<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-jms-mole-architecture-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="MOLE Architecture">Moderation of unLinkable Endorsements (MOLE) Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-jms-mole-architecture-01"/>
    <author fullname="Samuel Schlesinger">
      <organization>Google LLC</organization>
      <address>
        <email>sgschlesinger@gmail.com</email>
      </address>
    </author>
    <author fullname="Dennis Jackson">
      <organization>Mozilla</organization>
      <address>
        <email>ietf@dennis-jackson.uk</email>
      </address>
    </author>
    <author fullname="Thibault Meunier">
      <organization>Cloudflare</organization>
      <address>
        <email>ot-ietf@thibault.uk</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <keyword>moderation</keyword>
    <keyword>endorsement</keyword>
    <keyword>unlinkability</keyword>
    <keyword>privacy</keyword>
    <abstract>
      <?line 53?>

<t>Moderation of unLinkable Endorsements (MOLE) is an architecture that lets a party performing access control (a Moderator) bootstrap trust in a client from a third party (an Anchor) that already has a trust relationship with that client, and then adjust that trust over time in response to the client's behaviour, for example by dynamically rate-limiting access.</t>
      <t>MOLE targets open deployments, in which independent parties may be responsible for access control and for vouching for clients, whilst maintaining strong privacy protections for clients. These protections are designed to hold even if participants in the ecosystem collude or otherwise misbehave.</t>
      <t>This document specifies the roles, the information flows between them, the privacy and security requirements, and deployment considerations.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moderation-of-unlinkable-endorsements.github.io/internet-drafts/draft-jms-mole-architecture.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-jms-mole-architecture/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/Moderation-of-unLinkable-Endorsements/internet-drafts"/>.</t>
    </note>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Traditional approaches to access control rely on long-term identifiers such as
user IDs or cookies, which allow clients to be tracked as they interact with the
system. Newer approaches like Privacy Pass <xref target="RFC9576"/> enable access control
without identification, but they provide no privacy-preserving way to bootstrap
trust in a client and cannot adjust that trust dynamically over time.</t>
      <t>MOLE aims to address these gaps and enable privacy-preserving access control in an open ecosystem. This means supporting a deployment where clients are trying to access resources from multiple independent services, each performing independent access control and potentially relying on different third parties to vouch for the trustworthiness of clients. Building a system which can support both openness and privacy is a key requirement and differentiator of MOLE.</t>
      <t>MOLE has three distinct roles. Clients seek to access resources protected by
Moderators, who set and enforce access control policy. A Moderator may have no
direct trust relationship with a Client, but instead trusts Anchors, who do have
a relationship with some Clients, to vouch for them. A given Moderator may trust
multiple Anchors in order to cover more of its user base. An Anchor may vouch for
Clients that a Moderator deems untrustworthy; the Moderator can mitigate this
either by withdrawing trust in those specific Clients or by withdrawing trust in
the Anchor.</t>
      <t>These roles interact through three distinct flows: Endorsement, Redeem &amp; Issue, and
Presentation. In Endorsement, an Anchor grants a Client an Endorsement, which
conveys the Anchor's trust in the Client to other parties. In Redeem &amp; Issue, a Client
redeems an Endorsement at a Moderator and receives a Credential, allowing the
Moderator to bootstrap its trust in the Client. In Presentation, the Client
presents a Credential to a Moderator, allowing the Moderator to make an access
control decision and to adjust its level of trust in the Client over time,
including by dynamically rate-limiting access.</t>
      <t>These flows are designed to protect the Client's privacy. Redeeming an
Endorsement does not reveal the granting Anchor, only that it is a member of the
Moderator's Anchor Set, so it does not leak information about the Client such as
which Anchor's policy the Client satisfies. In addition, a Client's interactions
across Endorsement, Redeem &amp; Issue and Presentation are unlinkable, preventing Anchors and
Moderators from tracking Clients through their participation in the system. These privacy properties are designed to hold
even when Anchors and Moderators collude.</t>
      <t>This document describes the requirements for these flows and how they interact,
as well as the anticipated deployment model.</t>
    </section>
    <section anchor="use-cases">
      <name>Use Cases</name>
      <t>MOLE is applicable to any system where Moderators wish to rate-limit access to resources without having a direct relationship with those clients, instead trusting third parties to vouch for trustworthy users. MOLE tolerates third parties making incorrect decisions, e.g. trusting a malicious client, and enables Moderators to respond dynamically to limit abuse.</t>
      <t>MOLE targets an open system like the web where a population of Moderators and Anchors make independent decisions about their access control policy, which Anchors they trust, and which users are Endorsed. This contrasts with a closed system where the parties participating in the system are known a priori and can be expected to coordinate their deployment configuration.</t>
      <section anchor="uc-friction">
        <name>Reduced-Friction Challenges</name>
        <t>A user visits a website for the first time, with no cookies and possibly through
a VPN, shared NAT, or privacy-preserving proxy that obscures network-layer
identifiers. The site has no per-user history and limited reputational signal
from the network path. The user then bears the friction if the site responds
with measures intended to mitigate volumetric abuse --- repeated CAPTCHAs,
silent rejection, or a degraded experience --- which also harm users trying to
access the site legitimately.</t>
        <t>However, other sites may have access to relatively rich context about a user, e.g. because
the user maintains an account, made a payment, or provided some other scarce
signal to the site. MOLE enables such sites to act as Anchors which grant
Endorsements to users, suitable for bootstrapping trust when users visit new sites for the first time.</t>
        <t>In this use case, the site acts as or works with a Moderator.
The Client presents a Credential whose underlying
Endorsement attests to a scarce property accepted under the Moderator's
policy. The site combines this signal with its existing inputs to decide
whether to admit, challenge, or reject the request. A Credential may be
one input among several; it does not entitle the Client to admission.
The Moderator can then go on to adjust the Client's Credential in response to the Client's behaviour, allowing access to be upgraded or removed over time.</t>
      </section>
      <section anchor="uc-agents">
        <name>User Agents Acting Under Delegation</name>
        <t>A user delegates some of their interaction with a site to an automated agent
running in, or alongside, their browser. Sites that lack a richer signal
commonly treat the appearance of automation as grounds for friction or denial
of service, blocking delegated browsing as a side effect of resisting unwanted
automation.</t>
        <t>Here the agent presents a Credential on the user's behalf, and the site admits
the request based on the user's standing without the agent surfacing a stable
identity or correlatable state. From the Credential alone, the Moderator and
site cannot tell agent-driven presentations from the user's own;
distinguishability via request content, timing, or rate is the user agent's
responsibility, not the Credential's.</t>
        <t>When delegated behaviour violates policy, the Moderator may update state bound
to the user's Credential, so the user bears the consequences for the agent's
actions --- yet those actions remain unlinkable to other sessions and to the
user's own, and the user's identity is not revealed to the site.</t>
        <t>Alternatively,
delegated agents may rely on a distinct pool of Anchors and Credentials,
letting sites and Moderators differentiate them from traditional user agents. The
same architecture can serve automation not acting under delegation, such as
autonomous crawlers.</t>
        <t>In all configurations, clients enjoy strong privacy protections from sites and
Moderators, while sites and Moderators are protected from abusive clients
mounting volumetric attacks.</t>
      </section>
      <section anchor="uc-access">
        <name>Private Access Control</name>
        <t>A user visits a site repeatedly, without persistent cookies, expecting that
successive visits are not linkable to one another. The site gates some
functionality on a non-public criterion such as a paid subscription, group
membership, or a per-period quota of allowed operations.</t>
        <t>In this use case, the Anchor's attestation conveys eligibility under such a
criterion, and the Moderator translates that eligibility into a Credential
under a policy that may include rate or quota state.
The successive presentations are unlinkable to each other and to Redeem &amp; Issue.</t>
        <t>This use case is a secondary goal. More
elaborate authorization policies, including rich attribute-based access control
and multi-factor eligibility combinations, are out of scope of this
architecture document but may be included in companion documents.</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?>

<t>The following terms are used throughout this document:</t>
      <dl>
        <dt><strong>Client:</strong></dt>
        <dd>
          <t>An entity that seeks access to resources controlled by a Moderator.</t>
        </dd>
        <dt><strong>Anchor:</strong></dt>
        <dd>
          <t>An entity that grants Endorsements to Clients based on a trust relationship.</t>
        </dd>
        <dt><strong>Moderator:</strong></dt>
        <dd>
          <t>An entity that consumes Endorsement redemptions and Credential presentations
from Clients and issues Credentials according to an access policy.</t>
        </dd>
        <dt><strong>Endorsement:</strong></dt>
        <dd>
          <t>A cryptographic object granted by an Anchor to a Client.</t>
        </dd>
        <dt><strong>Credential:</strong></dt>
        <dd>
          <t>A cryptographic object issued by a Moderator to a Client. This Credential
has an associated state that is updated during presentation.</t>
        </dd>
        <dt><strong>Predicate:</strong></dt>
        <dd>
          <t>A boolean test that a Moderator evaluates against a Credential's hidden state
during a Presentation. The Moderator learns only whether the state satisfies
the Predicate, not the state itself.</t>
        </dd>
        <dt><strong>Endorsement Flow:</strong></dt>
        <dd>
          <t>The flow in which an Anchor grants an Endorsement to a Client, based on the
Anchor's trust relationship with that Client.</t>
        </dd>
        <dt><strong>Redeem &amp; Issue Flow:</strong></dt>
        <dd>
          <t>The flow in which a Client redeems an Endorsement at a Moderator and, in
return, obtains a Credential, without revealing which Anchor granted the
Endorsement.</t>
        </dd>
        <dt><strong>Presentation Flow:</strong></dt>
        <dd>
          <t>The flow by which a Client proves possession of a Credential whose state
satisfies a Predicate specified by the Moderator.</t>
        </dd>
        <dt><strong>Policy:</strong></dt>
        <dd>
          <t>Rules used by a Moderator to evaluate presentations.</t>
        </dd>
        <dt><strong>Anchor Set:</strong></dt>
        <dd>
          <t>The set of Anchors whose Endorsements a Moderator will accept during Redeem &amp; Issue.</t>
        </dd>
        <dt><strong>Anonymity Set:</strong></dt>
        <dd>
          <t>The set of Clients among which a given Client is indistinguishable during an
interaction. The strength of MOLE's unlinkability and Anchor-hiding properties
depends on the size of this set.</t>
        </dd>
      </dl>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>MOLE is composed of three distinct flows:
Endorsement, in which a Client obtains an Endorsement signifying
its trust relationship with an Anchor; Redeem &amp; Issue, in which a Client redeems an
Endorsement from an Anchor to obtain a Credential from a Moderator without
revealing which Anchor granted it; and Presentation, in which a Client uses
a Credential from a Moderator to prove that it is
presently in good standing with the Moderator in order to access a resource.</t>
      <figure anchor="fig-mole-architecture">
        <name>MOLE Architecture Overview</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="480" viewBox="0 0 480 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 40,64 L 40,144" fill="none" stroke="black"/>
              <path d="M 40,176 L 40,400" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
              <path d="M 176,224 L 176,304" fill="none" stroke="black"/>
              <path d="M 184,32 L 184,64" fill="none" stroke="black"/>
              <path d="M 216,64 L 216,144" fill="none" stroke="black"/>
              <path d="M 216,176 L 216,208" fill="none" stroke="black"/>
              <path d="M 216,240 L 216,312" fill="none" stroke="black"/>
              <path d="M 216,328 L 216,400" fill="none" stroke="black"/>
              <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
              <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
              <path d="M 424,64 L 424,144" fill="none" stroke="black"/>
              <path d="M 424,176 L 424,216" fill="none" stroke="black"/>
              <path d="M 424,232 L 424,312" fill="none" stroke="black"/>
              <path d="M 424,328 L 424,400" fill="none" stroke="black"/>
              <path d="M 464,240 L 464,304" fill="none" stroke="black"/>
              <path d="M 472,32 L 472,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 184,32 L 256,32" fill="none" stroke="black"/>
              <path d="M 376,32 L 472,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
              <path d="M 184,64 L 256,64" fill="none" stroke="black"/>
              <path d="M 376,64 L 472,64" fill="none" stroke="black"/>
              <path d="M 48,96 Q 50,92.8 52,96 Q 54,99.2 56,96 Q 58,92.8 60,96 Q 62,99.2 64,96 Q 66,92.8 68,96 Q 70,99.2 72,96 " fill="none" stroke="black"/>
              <path d="M 184,96 Q 186,92.8 188,96 Q 190,99.2 192,96 Q 194,92.8 196,96 Q 198,99.2 200,96 Q 202,92.8 204,96 Q 206,99.2 208,96 " fill="none" stroke="black"/>
              <path d="M 40,126 L 72,126" fill="none" stroke="black"/>
              <path d="M 40,130 L 72,130" fill="none" stroke="black"/>
              <path d="M 184,126 L 208,126" fill="none" stroke="black"/>
              <path d="M 184,130 L 208,130" fill="none" stroke="black"/>
              <path d="M 16,160 Q 18,156.8 20,160 Q 22,163.2 24,160 Q 26,156.8 28,160 Q 30,163.2 32,160 Q 34,156.8 36,160 Q 38,163.2 40,160 Q 42,156.8 44,160 Q 46,163.2 48,160 Q 50,156.8 52,160 Q 54,163.2 56,160 Q 58,156.8 60,160 Q 62,163.2 64,160 Q 66,156.8 68,160 Q 70,163.2 72,160 Q 74,156.8 76,160 Q 78,163.2 80,160 Q 82,156.8 84,160 Q 86,163.2 88,160 Q 90,156.8 92,160 Q 94,163.2 96,160 Q 98,156.8 100,160 Q 102,163.2 104,160 Q 106,156.8 108,160 Q 110,163.2 112,160 Q 114,156.8 116,160 Q 118,163.2 120,160 Q 122,156.8 124,160 Q 126,163.2 128,160 Q 130,156.8 132,160 Q 134,163.2 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 Q 186,156.8 188,160 Q 190,163.2 192,160 Q 194,156.8 196,160 Q 198,163.2 200,160 Q 202,156.8 204,160 Q 206,163.2 208,160 Q 210,156.8 212,160 Q 214,163.2 216,160 Q 218,156.8 220,160 Q 222,163.2 224,160 Q 226,156.8 228,160 Q 230,163.2 232,160 Q 234,156.8 236,160 Q 238,163.2 240,160 Q 242,156.8 244,160 Q 246,163.2 248,160 Q 250,156.8 252,160 Q 254,163.2 256,160 Q 258,156.8 260,160 Q 262,163.2 264,160 Q 266,156.8 268,160 Q 270,163.2 272,160 Q 274,156.8 276,160 Q 278,163.2 280,160 Q 282,156.8 284,160 Q 286,163.2 288,160 Q 290,156.8 292,160 Q 294,163.2 296,160 Q 298,156.8 300,160 Q 302,163.2 304,160 Q 306,156.8 308,160 Q 310,163.2 312,160 Q 314,156.8 316,160 Q 318,163.2 320,160 Q 322,156.8 324,160 Q 326,163.2 328,160 Q 330,156.8 332,160 Q 334,163.2 336,160 Q 338,156.8 340,160 Q 342,163.2 344,160 Q 346,156.8 348,160 Q 350,163.2 352,160 Q 354,156.8 356,160 Q 358,163.2 360,160 Q 362,156.8 364,160 Q 366,163.2 368,160 Q 370,156.8 372,160 Q 374,163.2 376,160 Q 378,156.8 380,160 Q 382,163.2 384,160 Q 386,156.8 388,160 Q 390,163.2 392,160 Q 394,156.8 396,160 Q 398,163.2 400,160 Q 402,156.8 404,160 Q 406,163.2 408,160 Q 410,156.8 412,160 Q 414,163.2 416,160 Q 418,156.8 420,160 Q 422,163.2 424,160 Q 426,156.8 428,160 Q 430,163.2 432,160 Q 434,156.8 436,160 Q 438,163.2 440,160 Q 442,156.8 444,160 Q 446,163.2 448,160 " fill="none" stroke="black"/>
              <path d="M 224,192 Q 226,188.8 228,192 Q 230,195.2 232,192 Q 234,188.8 236,192 Q 238,195.2 240,192 Q 242,188.8 244,192 Q 246,195.2 248,192 Q 250,188.8 252,192 Q 254,195.2 256,192 Q 258,188.8 260,192 Q 262,195.2 264,192 " fill="none" stroke="black"/>
              <path d="M 376,192 Q 378,188.8 380,192 Q 382,195.2 384,192 Q 386,188.8 388,192 Q 390,195.2 392,192 Q 394,188.8 396,192 Q 398,195.2 400,192 Q 402,188.8 404,192 Q 406,195.2 408,192 Q 410,188.8 412,192 Q 414,195.2 416,192 " fill="none" stroke="black"/>
              <path d="M 176,224 L 208,224" fill="none" stroke="black"/>
              <path d="M 320,224 L 448,224" fill="none" stroke="black"/>
              <path d="M 216,256 L 264,256" fill="none" stroke="black"/>
              <path d="M 376,256 L 416,256" fill="none" stroke="black"/>
              <path d="M 224,288 L 264,288" fill="none" stroke="black"/>
              <path d="M 368,288 L 424,288" fill="none" stroke="black"/>
              <path d="M 192,320 L 448,320" fill="none" stroke="black"/>
              <path d="M 216,350 L 264,350" fill="none" stroke="black"/>
              <path d="M 216,354 L 264,354" fill="none" stroke="black"/>
              <path d="M 384,350 L 416,350" fill="none" stroke="black"/>
              <path d="M 384,354 L 416,354" fill="none" stroke="black"/>
              <path d="M 224,382 L 288,382" fill="none" stroke="black"/>
              <path d="M 224,386 L 288,386" fill="none" stroke="black"/>
              <path d="M 360,382 L 416,382" fill="none" stroke="black"/>
              <path d="M 360,386 L 416,386" fill="none" stroke="black"/>
              <path d="M 448,224 C 456.83064,224 464,231.16936 464,240" fill="none" stroke="black"/>
              <path d="M 192,320 C 183.16936,320 176,312.83064 176,304" fill="none" stroke="black"/>
              <path d="M 448,320 C 456.83064,320 464,312.83064 464,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="424,352 412,346.4 412,357.6" fill="black" transform="rotate(0,416,352)"/>
              <polygon class="arrowhead" points="424,256 412,250.4 412,261.6" fill="black" transform="rotate(0,416,256)"/>
              <polygon class="arrowhead" points="424,192 412,186.4 412,197.6" fill="black" transform="rotate(0,416,192)"/>
              <polygon class="arrowhead" points="232,384 220,378.4 220,389.6" fill="black" transform="rotate(180,224,384)"/>
              <polygon class="arrowhead" points="232,288 220,282.4 220,293.6" fill="black" transform="rotate(180,224,288)"/>
              <polygon class="arrowhead" points="232,192 220,186.4 220,197.6" fill="black" transform="rotate(180,224,192)"/>
              <polygon class="arrowhead" points="216,128 204,122.4 204,133.6" fill="black" transform="rotate(0,208,128)"/>
              <polygon class="arrowhead" points="216,96 204,90.4 204,101.6" fill="black" transform="rotate(0,208,96)"/>
              <polygon class="arrowhead" points="56,96 44,90.4 44,101.6" fill="black" transform="rotate(180,48,96)"/>
              <g class="text">
                <text x="44" y="52">Anchor</text>
                <text x="220" y="52">Client</text>
                <text x="424" y="52">Moderator</text>
                <text x="128" y="100">Interaction</text>
                <text x="128" y="132">Endorsement</text>
                <text x="320" y="196">Interaction</text>
                <text x="232" y="228">(If</text>
                <text x="280" y="228">needed)</text>
                <text x="320" y="260">Endorsement</text>
                <text x="316" y="292">Credential</text>
                <text x="324" y="356">Presentation</text>
                <text x="324" y="388">Update</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+            +--------+              +-----------+
| Anchor |            | Client |              | Moderator |
+---+----+            +---+----+              +-----+-----+
    |                     |                         |
    |<~~~ Interaction ~~~>|                         |
    |                     |                         |
    +==== Endorsement ===>|                         |
    |                     |                         |
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |                     |                         |
    |                     |<~~~~~ Interaction ~~~~~>|
    |                     |                         |
    |                +---- (If needed) -----------------.
    |                |    |                         |    |
    |                |    +------ Endorsement ----->|    |
    |                |    |                         |    |
    |                |    |<----- Credential -------+    |
    |                |    |                         |    |
    |                 `---------------------------------'
    |                     |                         |
    |                     +====== Presentation ====>|
    |                     |                         |
    |                     |<======== Update ========|
    |                     |                         |
]]></artwork>
        </artset>
      </figure>
      <t>During Endorsement, a Client interacts with an Anchor with which it has a
trust relationship. The nature of the trust relationship is specific to the Anchor and may be based on some kind
of strong authentication, e.g. a login, or may be relatively weak, e.g. based on solving a
CAPTCHA. The Anchor grants the Client one or more Endorsements to signify this trust relationship.</t>
      <t>Later, when trying to access a resource, a Client may be prompted by a Moderator to present
a Credential. If the Client doesn't have a Credential for this Moderator it will then engage in the
Redeem &amp; Issue flow. In this flow, the Client redeems an Endorsement from the Moderator's
Anchor Set and receives a Credential in return. Redeeming an Endorsement does not reveal which
Anchor was used, only that it came from the Anchor Set.</t>
      <t>Once a Moderator has accepted a specific Endorsement, the Moderator can prevent a second use of that Endorsement in their system. This property prevents abusive Clients from constantly resetting their state to receive a fresh Credential from the Moderator in order to bypass rate limits.</t>
      <t>Finally, the Client can present the Credential to the Moderator, along with a credential update request. This presentation enables the Moderator to
query the state of the Credential and receive a boolean value indicating whether the presented Credential meets the
Moderator's chosen predicate. The Moderator can also update the state of the Credential, e.g. to increase or decrease access, but this process does not reveal any further information about the state of the Credential. Depending on the result of the applied predicate, the Moderator can make a decision about access control to the protected resource.</t>
    </section>
    <section anchor="privacy-properties">
      <name>Privacy Goals and Threat Model</name>
      <t>MOLE deployments aim to provide three privacy properties for Clients:</t>
      <ol spacing="normal" type="1"><li>
          <t><em>Endorsement Grants and Redemptions are Unlinkable</em> - During an interaction in which a Moderator issues a new Credential on the basis of an Endorsement obtained from an Anchor, neither the Moderator nor the Anchor can link the session in which the Endorsement was granted to the session in which it was redeemed.</t>
        </li>
        <li>
          <t><em>Endorsement Redemptions are Anchor-hiding</em> - During an interaction in which a Moderator issues a new Credential on the basis of an Endorsement from an Anchor, the Client hides the Anchor it obtained the Endorsement from among the Moderator's Anchor Set. Such Anchor-hiding makes an Endorsement redemption indistinguishable regardless of which Anchor in the Anchor Set the Client used, to both the Anchor and the Moderator.</t>
        </li>
        <li>
          <t><em>Credential Issuances and Presentations are Unlinkable</em> - If a Client engages in multiple presentations, then those presentations are unlinkable to each other and to the Redeem &amp; Issue flow that produced the Credential.</t>
        </li>
      </ol>
      <t>A successful presentation tells the Moderator that the Client holds a
Credential satisfying the Moderator's policy. It does not reveal the Client's
identity, the underlying Anchor, or the state of the Credential. Collectively,
these properties minimize the information Clients reveal to Anchors and Moderators
beyond what is necessary to participate in the system.</t>
      <t>The strength of these unlinkability properties depends on anonymity-set size. For
Credential Issuance and Presentation unlinkability, the relevant set is the population of
Clients holding Credentials under the same Moderator policy.</t>
      <t>For Anchor-hiding,
the relevant set is the Moderator's Anchor Set. A Moderator with only one
Anchor in its Anchor Set provides no Anchor-hiding.</t>
      <t>Further considerations for maximizing the size of these sets are set out in the Privacy Considerations section.</t>
      <t>MOLE's privacy properties are intended to hold in the face of strong attackers who:</t>
      <ul spacing="normal">
        <li>
          <t>May act in the role of Anchor, Moderator, or Client.</t>
        </li>
        <li>
          <t>May collude with other Anchors and Moderators in order to try to identify Clients.</t>
        </li>
        <li>
          <t>May have access to a cryptographically relevant quantum computer (CRQC).</t>
        </li>
        <li>
          <t>May deliberately deviate from the protocol and attempt to alter or forge messages.</t>
        </li>
      </ul>
      <t>Some attackers may exploit information not directly revealed by the protocol, for example:
 - Timing information
 - Network metadata like IP addresses
 - Implementation fingerprinting</t>
      <t>These side channels, which depend on details specific to each deployment, may compromise the privacy properties of MOLE and are discussed further in the Privacy Considerations.</t>
    </section>
    <section anchor="security-goals-and-threat-model">
      <name>Security Goals and Threat Model</name>
      <t>MOLE's security properties are intended for Moderators. Moderators can be assured:</t>
      <ul spacing="normal">
        <li>
          <t>When they accept an Endorsement, that it corresponds to exactly one Endorsement granted by a trusted Anchor.</t>
        </li>
        <li>
          <t>When they accept a Credential under a given predicate, that the Credential is one they previously issued with a matching predicate. Once a Credential has been presented, it will not be accepted again unless the Moderator chooses to re-issue it.</t>
        </li>
      </ul>
      <t>Collectively, these two properties allow Moderators to dynamically rate-limit access to the population of Anchor-endorsed Clients. If Endorsements could be redeemed, or Credentials presented, multiple times, it would allow malicious Clients to obtain additional Credentials which could be used to bypass rate limits.</t>
      <t>MOLE's security properties are intended to hold in the face of coordinated attackers who:
- Can control a number of Clients and deviate from the protocol.
- Cannot violate the endorsement criteria of a Moderator's trusted Anchors but may control other Anchors.
- Do not have access to a CRQC.</t>
      <t>MOLE considers a CRQC for its privacy properties like Anchor-hiding and unlinkability, because a CRQC deployed in the future could be used to analyse protocol transcripts recorded today and so identify Clients. By contrast, MOLE's security properties hold until an attacker gains access to a CRQC; once they do, only future protocol sessions are affected.</t>
    </section>
    <section anchor="flows">
      <name>Flows</name>
      <section anchor="endorsement">
        <name>Endorsement</name>
        <figure anchor="fig-mole-architecture-endorsement">
          <name>MOLE Endorsement</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="304" viewBox="0 0 304 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 40,64 L 40,160" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
                <path d="M 224,32 L 224,64" fill="none" stroke="black"/>
                <path d="M 256,64 L 256,192" fill="none" stroke="black"/>
                <path d="M 296,32 L 296,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 224,32 L 296,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 224,64 L 296,64" fill="none" stroke="black"/>
                <path d="M 48,94 L 64,94" fill="none" stroke="black"/>
                <path d="M 48,98 L 64,98" fill="none" stroke="black"/>
                <path d="M 224,94 L 248,94" fill="none" stroke="black"/>
                <path d="M 224,98 L 248,98" fill="none" stroke="black"/>
                <path d="M 40,128 L 64,128" fill="none" stroke="black"/>
                <path d="M 232,128 L 248,128" fill="none" stroke="black"/>
                <path d="M 48,144 L 64,144" fill="none" stroke="black"/>
                <path d="M 240,144 L 256,144" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="256,128 244,122.4 244,133.6" fill="black" transform="rotate(0,248,128)"/>
                <polygon class="arrowhead" points="256,96 244,90.4 244,101.6" fill="black" transform="rotate(0,248,96)"/>
                <polygon class="arrowhead" points="56,144 44,138.4 44,149.6" fill="black" transform="rotate(180,48,144)"/>
                <polygon class="arrowhead" points="56,96 44,90.4 44,101.6" fill="black" transform="rotate(180,48,96)"/>
                <g class="text">
                  <text x="44" y="52">Client</text>
                  <text x="260" y="52">Anchor</text>
                  <text x="88" y="100">Trust</text>
                  <text x="168" y="100">Establishment</text>
                  <text x="148" y="132">EndorsementRequest</text>
                  <text x="152" y="148">EndorsementResponse</text>
                  <text x="96" y="180">EndorsementFinalization</text>
                  <text x="40" y="196">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+                 +--------+
| Client |                 | Anchor |
+---+----+                 +---+----+
    |                          |
    |<==Trust Establishment===>|
    |                          |
    +--- EndorsementRequest -->|
    |<-- EndorsementResponse --+
    |                          |
EndorsementFinalization        |
    |                          |
]]></artwork>
          </artset>
        </figure>
        <t>The Endorsement flow allows an Anchor to provide a Client with an Endorsement, signalling its trust in the client. Depending on the deployment, the Endorsement flow might be triggered by the Anchor pro-actively, or it may be requested by the Client according to need.</t>
        <t>An Anchor will endorse a client according to its own criteria for trust in the client.
This may be because of some kind of strong authentication like a login, weak authentication
like a CAPTCHA or any other mechanism that the Anchor deems suitable. Moderators will choose
whether to trust a specific Anchor on the basis of its criteria for endorsing users.</t>
        <t>In order to be useful, Anchors will need to constrain how many times they will Endorse a given user.
This is because Endorsements are valuable to Clients and Moderators insofar as they are scarce. If
an Anchor gave out a very large number of Endorsements, this would reduce the effectiveness of rate limiting
applied by Moderators.</t>
        <t>Anchors furnish each Endorsement with the necessary metadata to identify the Anchor that used it and for the Client to evaluate whether a given Moderator can consume that Endorsement. This metadata may enumerate specific Moderators (in a small deployment) or identify authentication material like a public key which can be used later to evaluate whether a given Moderator is authorized.</t>
        <t>The specific properties of the Endorsement vary based on the exact protocol used. Important properties are described below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Public Verifiability: any party with knowledge of the Anchor can verify that the Endorsement is valid without needing access to secret key material held by the Anchor.</t>
          </li>
          <li>
            <t>Blind Redemption: a Client redeeming the Endorsement does not reveal any information other than that the Endorsement is from one of a set of Anchors trusted by a Moderator.</t>
          </li>
          <li>
            <t>Unlinkable Redemption: even if the Anchor colludes with another party at which the Endorsement is redeemed, they can't link the redemption to the session in which it was granted.</t>
          </li>
          <li>
            <t>Expiry:  A Client redeeming the Endorsement can prove that the Endorsement was granted within a particular time period.</t>
          </li>
          <li>
            <t>One-Time-Use: A Moderator can prevent the redemption of the same Endorsement twice.</t>
          </li>
          <li>
            <t>One-More Unforgability: A Client granted an Endorsement cannot forge an another valid Endorsement.</t>
          </li>
        </ol>
      </section>
      <section anchor="redeem-issue">
        <name>Redeem &amp; Issue</name>
        <figure anchor="fig-mole-architecture-issuance">
          <name>MOLE Redeem &amp; Issue</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="448" viewBox="0 0 448 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 40,64 L 40,112" fill="none" stroke="black"/>
                <path d="M 40,144 L 40,192" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
                <path d="M 344,32 L 344,64" fill="none" stroke="black"/>
                <path d="M 392,64 L 392,224" fill="none" stroke="black"/>
                <path d="M 440,32 L 440,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 344,32 L 440,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 344,64 L 440,64" fill="none" stroke="black"/>
                <path d="M 48,94 L 128,94" fill="none" stroke="black"/>
                <path d="M 48,98 L 128,98" fill="none" stroke="black"/>
                <path d="M 296,94 L 384,94" fill="none" stroke="black"/>
                <path d="M 296,98 L 384,98" fill="none" stroke="black"/>
                <path d="M 40,160 L 64,160" fill="none" stroke="black"/>
                <path d="M 360,160 L 384,160" fill="none" stroke="black"/>
                <path d="M 48,176 L 128,176" fill="none" stroke="black"/>
                <path d="M 296,176 L 392,176" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="392,160 380,154.4 380,165.6" fill="black" transform="rotate(0,384,160)"/>
                <polygon class="arrowhead" points="392,96 380,90.4 380,101.6" fill="black" transform="rotate(0,384,96)"/>
                <polygon class="arrowhead" points="56,176 44,170.4 44,181.6" fill="black" transform="rotate(180,48,176)"/>
                <polygon class="arrowhead" points="56,96 44,90.4 44,101.6" fill="black" transform="rotate(180,48,96)"/>
                <g class="text">
                  <text x="44" y="52">Client</text>
                  <text x="392" y="52">Moderator</text>
                  <text x="164" y="100">Anchor</text>
                  <text x="240" y="100">Negotiation</text>
                  <text x="88" y="132">EndorsementRedemption</text>
                  <text x="212" y="164">EndorsementToken+CredentialRequest</text>
                  <text x="212" y="180">CredentialResponse</text>
                  <text x="92" y="212">CredentialFinalization</text>
                  <text x="40" y="228">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+                                +-----------+
| Client |                                | Moderator |
+---+----+                                +-----+-----+
    |                                           |
    |<========== Anchor Negotiation ===========>|
    |                                           |
EndorsementRedemption                           |
    |                                           |
    +--- EndorsementToken+CredentialRequest --->|
    |<---------- CredentialResponse ------------+
    |                                           |
CredentialFinalization                          |
    |                                           |
]]></artwork>
          </artset>
        </figure>
        <t>The Redeem &amp; Issue flow allows an Anchor's trust in a Client to be communicated to a Moderator, enabling a new Credential to be issued with an initial amount of trust.</t>
        <t>Redeem &amp; Issue is likely to happen on-demand in response to a Moderator's challenge for a
Client to present a valid Credential. The challenge should contain enough information
to identify the Moderator and the Anchors whose Endorsements it will trust for redemption.
If the Client wishes to complete the presentation and has suitable Endorsements, it will
begin the Redeem &amp; Issue flow. In some circumstances, the Moderator may not require any Anchors for redemption, i.e. it has some local means of establishing trust in this case.</t>
        <t>In Redeem &amp; Issue, the Client redeems an Endorsement, proving to the Moderator that it holds a suitable Endorsement from an
Anchor trusted by the Moderator without revealing which specific Anchor was used. In order to translate this into a tangible privacy property for clients, the see the Privacy Considerations section for a discussion around anonymity sets and maximizing them. The redemption must be unlinkable to the grant of the Endorsement so that even if the Anchor and Moderator collude they can't link the two sessions.</t>
        <t>Further, the redemption of the Endorsement must ensure that even in the presence of a dishonest client, a Moderator will only issue a Credential once for a given Endorsement in order to mitigate attempts to bypass rate limits.</t>
        <t>The properties of the Credential issued by the Moderator will vary depending on the exact protocol used. However, they must support:</t>
        <ol spacing="normal" type="1"><li>
            <t>Unlinkable Presentation: A Client presenting a Credential reveals nothing beyond the result of the Moderator's predicate. Two successful presentations cannot be linked to one another, to the Redeem &amp; Issue session that produced the Credential, or to any prior update, even if the Moderator records every transcript.</t>
          </li>
          <li>
            <t>One-More Unforgeability: Even a dishonest Client cannot forge a Credential or derive additional valid Credentials from those it holds.</t>
          </li>
          <li>
            <t>Rate Limiting: The Credential enables the Moderator to apply a rate limiting policy to the client which may be dynamically adjusted.</t>
          </li>
        </ol>
      </section>
      <section anchor="presentation-and-updates">
        <name>Presentation and Updates</name>
        <figure anchor="fig-mole-architecture-presentation">
          <name>MOLE Presentation</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="288" width="448" viewBox="0 0 448 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 40,64 L 40,144" fill="none" stroke="black"/>
                <path d="M 40,176 L 40,240" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
                <path d="M 344,32 L 344,64" fill="none" stroke="black"/>
                <path d="M 392,64 L 392,272" fill="none" stroke="black"/>
                <path d="M 440,32 L 440,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 344,32 L 440,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 344,64 L 440,64" fill="none" stroke="black"/>
                <path d="M 48,96 L 120,96" fill="none" stroke="black"/>
                <path d="M 312,96 L 392,96" fill="none" stroke="black"/>
                <path d="M 48,126 L 88,126" fill="none" stroke="black"/>
                <path d="M 48,130 L 88,130" fill="none" stroke="black"/>
                <path d="M 312,126 L 384,126" fill="none" stroke="black"/>
                <path d="M 312,130 L 384,130" fill="none" stroke="black"/>
                <path d="M 40,192 L 64,192" fill="none" stroke="black"/>
                <path d="M 272,192 L 384,192" fill="none" stroke="black"/>
                <path d="M 48,224 L 128,224" fill="none" stroke="black"/>
                <path d="M 368,224 L 392,224" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="392,192 380,186.4 380,197.6" fill="black" transform="rotate(0,384,192)"/>
                <polygon class="arrowhead" points="392,128 380,122.4 380,133.6" fill="black" transform="rotate(0,384,128)"/>
                <polygon class="arrowhead" points="56,224 44,218.4 44,229.6" fill="black" transform="rotate(180,48,224)"/>
                <polygon class="arrowhead" points="56,128 44,122.4 44,133.6" fill="black" transform="rotate(180,48,128)"/>
                <polygon class="arrowhead" points="56,96 44,90.4 44,101.6" fill="black" transform="rotate(180,48,96)"/>
                <g class="text">
                  <text x="44" y="52">Client</text>
                  <text x="392" y="52">Moderator</text>
                  <text x="216" y="100">PresentationChallenge</text>
                  <text x="108" y="132">If</text>
                  <text x="152" y="132">needed,</text>
                  <text x="212" y="132">Redeem</text>
                  <text x="248" y="132">&amp;</text>
                  <text x="280" y="132">Issue</text>
                  <text x="92" y="164">CredentialPresentation</text>
                  <text x="168" y="196">Request+CredentialToken</text>
                  <text x="248" y="228">Response+CredentialResponse</text>
                  <text x="92" y="260">CredentialFinalization</text>
                  <text x="40" y="276">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+                                +-----------+
| Client |                                | Moderator |
+---+----+                                +-----+-----+
    |                                           |
    |<--------- PresentationChallenge ----------+
    |                                           |
    |<===== If needed, Redeem & Issue =========>|
    |                                           |
CredentialPresentation                          |
    |                                           |
    +--- Request+CredentialToken -------------->|
    |                                           |
    |<---------- Response+CredentialResponse ---+
    |                                           |
CredentialFinalization                          |
    |                                           |
]]></artwork>
          </artset>
        </figure>
        <t>Moderators trigger Presentations when they want to perform an access control check.
The client will consult its stored Credentials and identify if it has a Credential for this Moderator.
If it doesn't, it will consider triggering the Redeem &amp; Issue flow described above. The Client must never
present a Credential to a party other than the issuing Moderator to avoid spending the Credential unnecessarily.</t>
        <t>When a Moderator credential is presented, the Moderator learns
whether or not it satisfies the Moderator's policy. The presentation
must not be linkable to past updates, or to the Redeem &amp; Issue flow that produced it.</t>
        <t>After the presentation, the Moderator may provide a new Credential to the Client, which might be based on fresh state or derived from the Credential that the Client presented.</t>
        <t>To satisfy privacy requirements, Clients are limited in the number of Presentations they can satisfy within a particular context. This is discussed further in the <xref target="privacy-considerations"/>.</t>
        <t>Moderators may also Update Client's Credentials, typically as part of the Presentation flow. The Update may allow the Client to modify its credential, or provide an additional Credential. This process must satisfy similar requirements to Credential issuance for unlinkability. Provided that the Update process does not reveal information about the previous state of the Credential, then it may be performed multiple times within a context.</t>
      </section>
    </section>
    <section anchor="anchor-feedback">
      <name>Anchor Feedback</name>
      <t>MOLE depends on Anchor Endorsement scarcity. However, since Moderators do not
learn which Anchors produce Endorsements, they cannot gauge the quality of
Anchors. A malicious or compromised Anchor could grant excessive Endorsements
to a single Client, effectively bypassing the protections that MOLE aims
to provide. Moderation quality therefore depends on Anchor quality.</t>
      <t>While Moderators can change Anchor sets and measure observed behavior, e.g.,
by removing a single Anchor and seeing if "abuse" reduces, this practice
is undesirable, and dependent on Client implementation and deployments. Stable and consistent Anchor sets, which are part of a Moderator
configuration, are needed for Client privacy. Moreover, this behavior is
effectively a way for Moderators to infer information about Clients (which
Anchor did they use) through implicit signals.</t>
      <t>Moderators require an explicit mechanism for learning information about Anchor
Endorsements in MOLE. The exact information to be learned, as well as the mechanism
to produce this information, is not defined yet.</t>
      <t>[[OPEN ISSUE: Design use of <eref target="https://datatracker.ietf.org/group/ppm/about/">DAP / PPM / Prio</eref> in Endorsements which feeds into Credentials to measure per-anchor abuse rates.]]</t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <section anchor="anchor-policy">
        <name>Anchor Selection and Policy</name>
        <t>Moderators seek a deployment where honest users are able to pass as many challenges as possible, whereas the number of presentations that malicious users can pass is minimized. The exact weighting between the risk of excluding honest users vs including malicious users is deployment specific.</t>
        <t>This guides how Moderator's should select suitable Anchors, seeking to cover their user base whilst minimizing the number of Endorsements that users hold for a given time period. Each Endorsment can be converted into an independent credential, so if a malicious user can perform <tt>X</tt> queries before their credential is revoked and they have <tt>E</tt> endorsements then their total access is <tt>X * E</tt>.</t>
      </section>
      <section anchor="discriminatory-treatment">
        <name>Discriminatory Treatment</name>
        <t>In general servers already have the ability to deploy access control mechanisms to protect resources under their control. MOLE does not change this but does provide a new privacy preserving access control mechanism.</t>
        <t>In <xref section="5.1" sectionFormat="of" target="RFC9576"/>, Privacy Pass Issuers were encouraged to support a diverse range of attesters in order to reduce the possibility of discriminatory treatment by token verifiers. However, arranging many attesters to agree to use a single issuer is challenging. It requires coordinating changes in the trusted attesters with each downstream verifier. If downstream verifiers have differing token value requirements, this creates friction which leads to partitioning by issuer which reduces client privacy. There is also little incentive for high value attesters to share fate with low value attesters.</t>
        <t>The use of Anchors in MOLE and support for multiple Anchors mitigates this issue. Rather than requiring Issuers to coordinate with their Verifiers as to Attestor policy, instead Anchors can individually issue according to their own policies and Moderators can choose which anchors to trust. Moving the decision on aggregation from Issuers to Verifiers resolves the tension inherent in Privacy Pass.</t>
        <t>Further, the use of Anchor-Blinding prevents this from being a privacy risk for Clients, since even if Anchors are very fine grained and specific to a particular attestation type, the Moderator does not learn which Anchor was used and so cannot discriminate on this basis. This relies on the Moderator's Anchor set being large and not being partitioned on something specific to the client, which is discussed further in the Privacy Considerations section.</t>
      </section>
      <section anchor="centralization">
        <name> Centralization</name>
        <t><xref section="5.2" sectionFormat="of" target="RFC9576"/> identifies Centralization as a major risk from Privacy Pass, in large part due to the motivation for sharing Issuers as described in the previous section. MOLE aims to avoid the same centralization risk through a number of mechanisms.</t>
        <t>The Anchor / Endorsement mechanism means that parties that have user relationships and parties that provide access control can be distinct parties without compromising on user privacy. Without this mechanism, only parties which access to a scarce resource could also be effective Moderators, which would encourage centralization.</t>
        <t>MOLE allows each Moderator to make an independent decision about which anchors to trust rather than requiring shared Issuers to be established and coordinated. The dynamic rate limiting supported by MOLE enables lower-accuracy Anchors to be used than could otherwise be supported. A feedback mechanism also encourages experimentation with new Anchors by providing Moderators with insights into Anchor quality.</t>
        <t>However, there are residual risks. Moderators inherently benefit from scale which provides more insight into Client behavior and means that decisions to promote or restrict access are consequently more impactful. Sharing a rate limit across more sites means the amount of volumetric abuse that a attacker can inflict becomes smaller.</t>
      </section>
      <section anchor="deployment-in-a-web-context">
        <name>Deployment in a Web Context</name>
        <t>In a Web setting, the MOLE architecture may be deployed in several different configurations. For example, the Moderator could be deployed in front of a site, mediating access to protected resources directly, or it could be deployed as an independent service which the site interacts with on the back-end, or the Moderator could be a third party service which communicates with the site through an information flow mediated by the user-agent.</t>
        <t>Many browsers limit the flow of information between distinct top-level origins, for example by partitioning cookies and other state. In a web context, MOLE endorsements and credentials may be used without partitioning to enable a limited form of cross-site information transfer. However, user-agents must employ suitable safeguards to ensure that the information flow is limited in line with the user-agent's privacy posture, specific recommendations are given in the Privacy Considerations.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="key-compromise">
        <name>Key Compromise</name>
        <t>Anchor key compromise will enable an attacker to produce as many endorsement as they wish. For Moderators which trust this Anchor, attackers will be able to run the Redeem &amp; Issue flow as many times as they wish. If any Moderator allocates some rate limited access to each initial Credential, this will enable the Attacker to bypass the rate limit.</t>
        <t>Moderator key compromise will enable an attack to produce as many credentials as they like with arbitrary state. However, this will impact only the Moderator and not any other parties.</t>
      </section>
      <section anchor="state-management">
        <name> State Management</name>
        <t>MOLE requires all parties to maintain state in order to uphold its security and
privacy properties.</t>
        <t><strong>Anchors</strong> which grant Endorsements on the basis of some long term account
will need to maintain state in order to record when a user has been granted an
Endorsement (see <xref target="anchor-policy"/>). Losing this state means over-granting,
but not a privacy loss.</t>
        <t><strong>Moderators</strong> require state in order to prevent the double-spend of
Endorsements and Credentials and support presentation recovery. State should be bounded to uphold <xref target="privacy-properties"/>.</t>
        <t><strong>Clients</strong> store their tokens and <bcp14>MUST</bcp14> burn them once redeemed or presented (see
<xref target="concurrent-contexts"/>). Ensuring that they do no replay state is their responsibility,
as it puts them in control of the <xref target="privacy-properties"/>. If a Client is unsure
that its state is valid <bcp14>SHOULD</bcp14> discard the affected tokens. This might affect
their availability, but still uphold privacy and security.</t>
      </section>
      <section anchor="ddos-mitigations">
        <name>DDOS Mitigations</name>
        <t>The server-side cost of Presentation flows needs to be as cheap as possible as malicious users who receive a challenge for a presentation may submit responses which will certainly fail but cost server-side resources to verify.</t>
        <t>The Redeem &amp; Issue flow is particularly susceptible to DDOS as it is the only flow which is triggered by the client. Moderators should give consideration to suitable protection mechanisms for this endpoint, for example, using a client-side puzzle to ensure that clients spend at least as much CPU as it costs servers to reject a faulty Endorsement redemption.</t>
        <t>As the Endorsement flow is triggered by the Anchor in a context where it already trusts the user, it is less vulnerable to DDOS.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <section anchor="anonymity-sets-and-minimum-thresholds">
        <name>Anonymity Sets and Minimum Thresholds</name>
        <t>Client anonymity sets depend on the total number of clients that share the same configuration metadata. During a Redeem &amp; Issue flow, this corresponds to the number of other Clients that possess valid Endorsements for the specified anchor pool. During a Presentation flow, this corresponds to the number of other clients that possess valid Credentials for the specified Anchor pool.</t>
        <t>Client Vendors may act to limit the use of Anchors or Moderators where the total anonymity size is too low. For example, the Client Vendors may allow Endorsement flows to succeed but program Clients to flag the resulting Endorsement as unusable until a threshold is met across the fleet of clients. The same process may be applied to a Moderator's credential during Redeem &amp; Issue, ensuring that a minimum size set is reached before the Client will present a Credential from a given Moderator.</t>
      </section>
      <section anchor="configuration-consistency-and-partitioning-attacks">
        <name> Configuration Consistency and Partitioning Attacks</name>
        <t>During Redeem &amp; Issue, if Moderators can rotate their configuration material freely, they can enable the tracking of users, e.g. by restricting a user to a unique configuration which it can later detect. For this reason, Client Vendors should ensure that their clients receive consistent information from Anchors and Moderators.</t>
        <t>Deployments should make configuration material consistent across
Clients and resistant to split views. A deployment can use a
<xref target="CONSISTENCY-MIRROR"/>, <xref target="KEYTRANS"/>, <xref target="SCITT"/>, or another mechanism which provides similar global consistency properties.</t>
        <t>It maybe that some deployments are comfortable with a weaker form of consistency where Clients manage configurations locally and limit how often they tolerate updates to it. This cannot entirely eliminate partitioning attacks but can make them less effective in practice.</t>
      </section>
      <section anchor="side-channels">
        <name>Side Channels</name>
        <t>MOLE does not address all channels that can identify Clients. For example, side channels may reveal information about the user's Client, associated user-agent, hardware configuration, network address or similar information which can be used to cut the user's practical anonymity set. This type of side channel exists largely outside of the architecture's deployment and needs deployment-specific mitigations.</t>
        <t>Timing side channels may also reduce the practical anonymity set. For example, Redeem &amp; Issue may be performed in response to a challenge for a Presentation by a Moderator. Based on the latency which the Client takes to answer the Presentation Challenge and can likely infer that the Client's presentation can be linked to just-issued Credential. Further, the Moderator can even control how long Redeem &amp; Issue takes in order to actively cut the anonymity set. Clients can reduce their vulnerability to this type of attack by imposing a limit after which they will not attempt a presentation with a fresh credential after Redeem &amp; Issue.</t>
        <t>Depending on the configuration of clients, other timing side channels may exist in the protocol. For example, if the Client is programmed to fetch Anchor endorsements on-demand (rather than pro-actively provided by an Anchor), a similar timing side channel exists between Endorsement and Redeem &amp; Issue. This timing side channel is particularly severe as the Endorsement session may have context which identifies the user or their device. For this reason, deployments are discouraged from fetching Endorsements in direct response to a Redeem &amp; Issue session.</t>
        <t>Particular consideration should be given to designing flows in which Moderators provide all the information that Clients need during Redeem &amp; Issue and Presentation pro-actively, rather than requiring clients to interact with third parties, the Moderator or their Anchors in ways in which might lead to timing side channels.</t>
      </section>
      <section anchor="concurrent-contexts">
        <name>Multiple Presentations in Concurrent Contexts</name>
        <t>Credentials can only be used a single time. Consider a malicious Moderator which begins a presentation with a Client in one context. From the moment the Client begins to present their credential, they must mark it as burned and cannot use it in another session.</t>
        <t>If the Moderator simultaneously issues a challenge for a presentation in a different session, the Moderator can conclude that the Client cannot also answer that presentation (assuming it has a single Credential). A similar pattern holds for Updates. A Credential being Updated cannot be Updated or Presented in any other session.</t>
        <t>In order to avoid this behavior being exploited for a timing side channel. E.g. an attacker holds an Update on one client and challenges for Updates in other sessions in order to link two sessions. The client must only never offer the same Credential in concurrent contexts. That is, once a Credential has been used in one context, it must remain locked to that context for a period of a time.</t>
      </section>
      <section anchor="multiple-presentations-in-the-same-context">
        <name>Multiple Presentations in the Same Context</name>
        <t>Every successful presentation of a Credential reveals at least one bit of information about a client. Answering Multiple presentations for the same or different moderators within one context can lead to greater inferences about the Client.</t>
        <t>For example, consider a Credential Instantiation where the Moderator assigns each user a unique integer in their credential, a Presentation operation which checks the integer is &gt; 0 and an Update operation which reduces the integer by 1. If the Moderator can repeatedly issue Presentations and Updates, it can recover each user's unique integer in a given context, allowing their sessions to be linked.</t>
        <t>Consequently, the Clients should limit the number of presentations they'll make in any given context. A context is determined by the boundary of information flow. For example, in a web context, a context is governed not only by the top level origin but also carries on through navigations to different sites as bounce tracking or use of tracking URLs can enable information to cross to new pages.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="INTERNET-END-USER">
          <front>
            <title>The Internet is for End Users</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document explains why the IAB believes that, when there is a conflict between the interests of end users of the Internet and other parties, IETF decisions should favor end users. It also explores how the IETF can more effectively achieve this.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8890"/>
          <seriesInfo name="DOI" value="10.17487/RFC8890"/>
        </reference>
        <reference anchor="OBLIVIOUS-HTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="PERVASIVE-MONITORING">
          <front>
            <title>Pervasive Monitoring Is an Attack</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>Pervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="188"/>
          <seriesInfo name="RFC" value="7258"/>
          <seriesInfo name="DOI" value="10.17487/RFC7258"/>
        </reference>
        <reference anchor="CONSISTENCY-MIRROR">
          <front>
            <title>Checking Resource Consistency with HTTP Mirrors</title>
            <author fullname="Benjamin Beurdouche" initials="B." surname="Beurdouche">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Matthew Finkel" initials="M." surname="Finkel">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <date day="30" month="January" year="2024"/>
            <abstract>
              <t>   This document describes the mirror protocol, an HTTP-based protocol
   for fetching mirrored HTTP resources.  The primary use case for the
   mirror protocol is to support HTTP resource consistency checks in
   protocols that require clients have a consistent view of some
   protocol-specific resource (typically, a public key) for security or
   privacy reasons, including Privacy Pass and Oblivious HTTP.  To that
   end, this document also describes how to use the mirror protocol to
   implement these consistency checks.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-consistency-mirror-00"/>
        </reference>
        <reference anchor="KEYTRANS">
          <front>
            <title>Key Transparency Architecture</title>
            <author fullname="Brendan McMillion" initials="B." surname="McMillion">
              <organization>Independent</organization>
            </author>
            <date day="1" month="November" year="2026"/>
            <abstract>
              <t>   This document defines the terminology and interaction patterns
   involved in the deployment of Key Transparency in end-to-end
   encrypted communication services, and specifies the security
   properties that the protocol provides.  It also gives more general,
   non-prescriptive guidance on how to securely apply Key Transparency
   to a number of common applications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-keytrans-architecture-11"/>
        </reference>
        <reference anchor="SCITT">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Antoine Delignat-Lavaud" initials="A." surname="Delignat-Lavaud">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Cedric Fournet" initials="C." surname="Fournet">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>ARM</organization>
            </author>
            <author fullname="Steve Lasker" initials="S." surname="Lasker">
         </author>
            <date day="10" month="October" year="2025"/>
            <abstract>
              <t>   Traceability in supply chains is a growing security concern.  While
   verifiable data structures have addressed specific issues, such as
   equivocation over digital certificates, they lack a universal
   architecture for all supply chains.  This document defines such an
   architecture for single-issuer signed statement transparency.  It
   ensures extensibility, interoperability between different
   transparency services, and compliance with various auditing
   procedures and regulatory requirements.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-architecture-22"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</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 describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9576">
          <front>
            <title>The Privacy Pass Architecture</title>
            <author fullname="A. Davidson" initials="A." surname="Davidson"/>
            <author fullname="J. Iyengar" initials="J." surname="Iyengar"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="June" year="2024"/>
            <abstract>
              <t>This document specifies the Privacy Pass architecture and requirements for its constituent protocols used for authorization based on privacy-preserving authentication mechanisms. It describes the conceptual model of Privacy Pass and its protocols, its security and privacy goals, practical deployment models, and recommendations for each deployment model, to help ensure that the desired security and privacy goals are fulfilled.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9576"/>
          <seriesInfo name="DOI" value="10.17487/RFC9576"/>
        </reference>
      </references>
    </references>
    <?line 614?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>draft-jms-mole-architecture-01</t>
      <ul spacing="normal">
        <li>
          <t>Include presentation recovery in Moderator state requirements.</t>
        </li>
        <li>
          <t>Show the Update in the overview diagram and clarify the flow diagrams.</t>
        </li>
        <li>
          <t>Rename MoLE to MOLE.</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+V9a5PbxpXod/wKXKlq5QdJRdnkJpGTbMajcTI3eu3MyFlX
KlUGwSYJCwQYNDAjWnZ+y/6W/WV7nt2nQXBkJ9lbdetOla0ZEujH6fN+9Xw+
z/qqr93T/MGLduW6oq/aJm/X+dA8r5q3xbJ2+UWzajvvdq7pff7Ri1fPLz7O
z7pyW/Wu7IfOPciK5bJztzgGfDn6rix6t2m7w9O8atZtlq3asil2MOGqK9b9
/Judn+/a2s0L89b8J08yPyx3lfewnP6wh8cvL26+yJpht3Td02wFgz7Nyrbx
rvGDf5r33eAyWMG/Zm/d4a7tVk+zfJ7vwpbwLxf3gX8OTU07rOqqP+AH+666
LcpDduuaAUZ/mOebrh32sK2zpq/mX3TFsMrP291uaOCN/Pf45QN8jBf4YOqr
XVHV8NV+WNZVOS9gnDUO87u7f1203YYewY3DI9u+3/unjx/Xle/9gr9/TKC8
df7xaxrg8Xicxw8yWGXVb4dlcoLzdj2PJzi3J/i4anrXNa6f0wF4HKEGcPre
LGI3GqnWkQwM/YInXlTteMzH95ztYtvv6gdZVgz9tu3wmGABeb4e6prx4rrY
Da7Or8tt7XzVbFxHDwA4iqb6lhb1NP99224ANZ8/P6cvHcPZb3x863cb/HBR
trvjOZ65pql8/n+K8q1H5Dga/0X7bVXXhR28cv36dyt6cf4Nv7gY3h6PfbOt
lsVQ9/kLB9gwufrzuh1W67ronJ2g7ec0Ry8D4OhZ03Y7eOsWEDJDAgp/5fnl
y5uLq5cXN/OLl8/mb64vrp7mV1+c//KXv/oJfPnq8+eXX16+enM9/8PNzWv6
5lc/+/kv4ZvXF1dfnl1ffnkxf/Hq5eXNq6vLl7+n73/xU/r+/NXL68vrm4uX
51/NX1xeXb2CcS/nzxa4trnQyL7wfo7kB8jqmvIw31Vd1+JW/3jx1c3V2ctr
8w5QZN8VjU/QAB69Pr+8uTHP+bLq+/FDuO4nT37yVH79+S/+NwBisVhk2Xw+
z4ulh6HLPst+FPeCoy+a3M6U99uiz2sHzxT5vuiAiPeuQ3ADLuVFWTrvc9hw
37V1/lGRy3Rt93G+bNseV7FHJuR7YHMwRFlXMGG+7tod/AUn2q1k2I9g5rOm
3OKrNGlRd65YHfJtgXPzGJ2raS9+W+3zOyAzfpRHncHiV/CBg4lW3+Dj9CW/
2d66Lu+rncN1dM7vkUfmfYvPy/uPfL502+K2aodulsMec/eu2O0BVstDvjoA
FldlUdeHHDbo5nW1q/oIBAA8Mfm+6DYIrXYPy1i5fd0eCMQznPduW5Vb+AU+
B4aBgMC9V84DPzzA5LqwCg8IFzACMO4PP75tBzgimBv/4MXDBDB6DTsFoml6
+A+/B/i38I9gJ/zb4rkiAO2rC6BNB9CwXwMNwvJ9tWncCsG0betV7kAE5NWa
V11W+wJxB/aFMHRl6w+A9TtYbV0PKwe0DaS7dd1dBWODzCLgOgAUcAKfg7wb
EDK537uyWiMQcBjYpoO94K+BrAF313V7h8fT3zlH8+34Gd0ZQsa7cuhQzHTu
r0PVOYE7fhUPIifqVJrwQi+7arWqXQZi5xIhvRoICrDSrlhV+GsBwN8DfIpy
iwttxycDiHnIYZ01gHsOPH+XV3i+uK/O5x6OKy98NnhAwstnHkFTtu3byvGx
4bc17FAPBCcAbEASfgvgLwg0h5ykCVC1Yr7LGOKL/KW7g5HNCuvqrctfC3Be
A1fK378XPvH99yDxiQWke8hw1Hbow8pLAtEsXw49zw+j38KXedMq3IHvAeJ0
t4hrd4DCuG4l++yY7PEoyqJp2n6CQi2FBWpVsiqqHYN9tepwzT0h7KbYexpU
NjSxqtE54WoaJs6AsIj+gJA7B7wYjmq/bzsmbIs2d4DILpwPUkffHfCpiAsw
KXAO+JXZ2w5EVYXcw9I7LavEY3dwUJaX2qcmyH4PpAmnwvwHkA1fAXxbVes1
LKzpDS+tGEOJSRCZI6EQjEEBhMcaHBuEQaD+z4eqXvGOhYQZJ+GoFB5wrIBy
CDd6m1Yk2IVCIwdZZsmOiU7XVqFAwBnxKPVEt4TVnQM2A8KyagCtifYXoAUw
kL1zbyfBK3wKKGN5yILEIVJq4a1eUAK2Xo6RHOAIiuJhkZ9FUUXMF1kTIHa2
gh2U/UlxU8jqmCqqBqBVrPhpL+JL1rFqacysmBjFtyCHzpVvj89qh6vbVMhr
0zXSNFnAK5kOcRoUeySYFraJlLNrAT8B3hUsinjOsvAORlUJS6OFOTMFOItd
M+nKOSC7oYnIc/iMsCk+gjiCgnADMhFx0GeuQqaPMhP3ChrvHZGJMgPgMUC5
wvTLcNjtyTcynJDXTbIDCZ8wJfJDwKN22GzH+ERC46nVdGb5lcNN5f+SX3o/
OJIO2WtkFyAz8ZAWIAHSN4JeAmYPCTzFAfwmeZKoBq2vW3dgacYvgmJhtq8n
j8dF8lGJlqY+Wp88nXWOTyOdNB+dGGI+ILBD4wjfxbeIbcxYwhBgQXDENyzL
JoSZWCqtzEJpZr7M9vxFOh8RblxYOn2eTL8rQFah3kmUmimlrgBD0Mxlra5V
iYFLrEERqRHBp8AaZMcMDIMSNBGc9IdpcIxcrGuMFSBhOmamR1554EKOjQZr
Mns+qxYOAgVeB2tGsMDrhEf4LKPHDBg5rImor+qZn+4cGvS0RXtaj5TJ5NcO
EM63+EKYonbF20RrKpbtYFccFBHm7wE7mSkmD8IAfq1ICVK34mMv4t6V+pCz
ZUXZtcBl7yE1OkaLQwThaELPAJioXxrAkJwxDJ7lKmlF+FBkW0r9ruqibkpz
CGpEQc96blCHQQCTvJxSdzNSd+/QnjDryc16RNM9UmlhpLKrlqrSGnVUeXxE
MxhxC5pfouDNMhCOd66uRfXLEV9oTy7RZdEdUS9QbX0DA54Dkwc97yFw/HmJ
v38vohYxar+HIyYlCUmpOURJj3qN2RNo61t8JpKIilD8MMhgVRbRXmJdiQXn
lIWGDD9YKYnMZH5wWnGJcofkGGAjG1nA/nF9fvQycBJWpcq2o9UoD0F9a7FZ
xEmBwgoACJh6PrEeWZH0FiC8bTDLVgkLgY8FOktY2tj8UyVToEzqOB7knVsK
yMGcbvdDHUxzMyMuRDGOmKPVDcOWInVXR4YiE7TaFjoW4RiBgDfL3xJgiQCE
eleiENNgBSo2ovqUNZzkKsUcMsIE/Ib06BQM6dH4b5v2Dq0BoL+2q9QaQEvH
vduzQkcqDGgzVcP6BO4tNd7W1WZg4w0R/yFymaF0q/kXXUW8KD/fwvm4ZsO0
UM7X8gVQwxlrQ7cAQBJXcBrwmwtK8rrq0CZB2cF7blq100QJ92ibH5TlgHL3
5euXwIe3sL1V/vLsZoaKzIQZAqzmnbD4dunBTkWW7RC3387r4uC6zNiLxKdy
WhlqyWhuuW5OS4dzARRhe5fQz6G83w/MUkG+IAsr6ow5JYwik8DZ9Fsel8Yh
L8nSFYwVucIIjfte5xas92QYonnkadnIpAAV6ayC5nfb1sD6ehiG6SFHqxoW
5ohlnZ+9vjn/w5mfZb6q8Rw79w07GgheaGiBTMQxERE6IMeSR1Db2KMyDUY1
42qwvDLlTLrk2m1gRSD9wEIC9PhDewc8HAUs6Vn4iI/avmVrNXkPUTMgwwcw
373rhcIKmlY4yNKVBfxJSilBUt0tXlSYdkBesoPdkMfswLKQsIKs5xVr/7Ki
sgBumvGhqTcKlymMTtkRyW1ePhlEPQoGJWsGEikVWeLVg0cJYICgQ9UX6lQK
6t4+qtkk5Ri6RB2AN3cy4TFxAGQvG1L28ZUcZc0sngGszuPy4DXEvMA9AoNb
oJ6lisa08nhHMmMANOvI1M1SlRe98gwJgaCK8gMd6h5xjl5Olc1HPlPzLxBY
2e6WaBHzduQgaMXIIty7ygszAxqjKZH/rhxoUI5OkBRTIINZXirfodNmDA/y
HxaMVp3ZInv8srZxPHhe7NBV5xFhi/qzRLHDV/rajYwHnJcCQQzQ1CYjAt+0
6COIunOiu5q1TLhEzydcokGFj5QDvHvYC+3Srnegfq8S/81D0k66/GxD53xW
EkDf0PE8c0CxLAKJVxf0TOTUK/4eKYCIZi0iweieil50mqTb5MXQtztiPDRe
1g1Nw4fI7AaddOgDnMloyw40Mdct8mumMHJ5g5IJoyI7IM5BXBWQZce6eucK
BidQEXDRAhkWrE5mJu3WU5gM+CdRUOCwZFY3APUMnhd30Cxf1i0rtbrjFa+K
oO1pe8BQ3HqNSAUvwnEJZg7NHRC+W2VxbuR8KpsJAieorGUJjZCWg67XwYku
xIy47TODxuRLWI3e9T28RU5AUQvj1CA01kUp3iViQiLqgFjJDdoR9yXuBN8j
6/tChZdZKx6acJnE2s2Yitmp2JPKjNPOVx05UPbG4FD7IS4b1JHPMnYXbAbQ
eyXoCSywCNslWYAsHNAZHmPiRpFX+TAUzwnsJfjvaZwZEW+6kUdoZ/5pS8GB
cNJKYjBxSzHHoMCl+0WeMewxyMugAlYOCJYJycqmrM3v4zdG2lN8GHbXlIa9
6xbEoiPxe3C9qO/6aYcxucaYbdGLAQaH6KVsr6PhGuEc8Uo+C0hQWfvYrRIp
CIygxgiqSOdZFoHGrIJAos73Irp+9m1LDgJruEXAgCJSu57Ih2XcyK6znksi
o10wPUM4IJ4762uZL4BDJbEz8p8ChTvLF8j5XQrpriKPI2VI7XN8vml3ZJ10
xV2NSiEJXWDBqRIMwl2d0q75pj3cG/LBPYQNjzynVe2mgYGae/S4cuQOVDw4
EJ0526HSgzuyamDfYzCYBQBFIgCUZyw4zsVMYZ5Pn01o56KEsg5ZH2aBuYCk
5wBrH6MobEGwPVn0GQASR8VF6nidYyeJRdwGTWtCX6MSRIGTrYem5PMmdoUo
1rTNnNMN4Gjg8Q4PVc6NNL4KNLxhiQ6APR8qZUtk7NFBs1h0XtTpUdltV/lf
h7YvSH6ghEXuujcBqmldKzhvWB1i5FLfo6urjTAhwTJeYRaWHOnR+OIwGl0X
QQbaUUDiton0yHjcIjqPip6okZ1ujpkkjMqbY9ZOioo5m5Q9pw4hPCAKkjB7
Ea6SOpXU86KgYeeZdwCHVQFm0qYtalCl285lIGSWLa2JMywk6YCXTygUvYVk
BABcu2o59G7OEm8ULcP1kCt+DuINoWehxVqlEijuC/EWBX4JR8t6TAVkbrlF
8B5hZEHiwQLLFWpoMOa+aHDJ+iQRFxITuc2U9T5z66qp2C1H8MbYDKb++PzB
izfXNw9m/G/+8hX9fnXx728ury6e4e/Xfzh7/jz8kskT13949eb5s/hbfPP8
1YsXFy+f8cvwaZ58lD14cfbVA8a0B69e31y+enn2/AE7Bqy7jKJpLe8XsBOQ
ghi8z9SPRvv//Pz1f/3nk5/l79//r6svzn/65Mmvvv9e/vjlk1/8DP5AI4Zn
IyWN/0SnR8ZaGkX/kIEWezCHajwZoPMtOiXQlwHQ/OTPCJm/PM1/vSz3T372
W/kAN5x8qDBLPiSYHX9y9DIDceKjiWkCNJPPR5BO13v2VfK3wt18+Ot/AxoD
A/vJL//ttxnjyLoN7nnX7YQUEevF08E6nTm0pwCsT9hIePrJJ9lTDC6JQCdO
gME7P+k5FAKqKXyX2oUwJLO1ySEl/DI2cdUNHPTSqWQRGjvMNDk8akWwtWSC
HNndbh+Jy2ikCe/KcpaMuhh8tkIOZfUxggc5tzZqqTB8xCrFNZrJZZUgZg77
voXd78HQz9slGZYEDAFhCFAxi+aQDZ1PmPresWih49NIBmOHoGH+OafloJnj
27IijYxVUg5jeNFTV/lq6NgBZmJsuLbXMBimGDhd2hJUNoeWq9O8ALsad1vU
A4mmYoPelj4RRiAGt9VqhQ5XXAQsT6Yt8jS4lxrKMF8HB6vcgg36rSrXIQYC
w+GnYcVRr+cHQb1w9Xp8fPkXQFG8OaIwzO8IOUDHQcU0rGeAP0ssLljLKKh4
IifKoMEoEHPvutS/8IPDjSg3YVHAs4cO7eulOMMSO0Q1N1byyVA0numAzLw/
M59iSgwaTSwe48bp4tHVRkaUF6OEdKtjB5MiSzhpxhc+5ZCYRJSRaEq8LCJa
XsvVgF46YpjHVKSom3IMw+0wmBf3hAkMxnLhlSZMz45/V6HJS04vxfkjFQnn
aZvDDlnd1FSBaZEHSmHJGQgC0Qr9vomlDAqa0hiev/HIiCrdgwG1waQRzvt4
5NPMYhPlmAPtipNc4nFIwBTx8Opo8NW3QW/CdZPq8+oW/SfuLsa5UEmiIAU9
OpENkCUhymO8D/ib4j06gKo1uSJjjHwiPUTJ+rOjQP59JJa4N9nCsjyd15Qi
sGRQWkQgEss+QGJV/9lRJHZqcYDLoJ/eOyMHxW+V5SOSaC5AjWYAaN/tKnUN
jQwOm7kiorAImgKc8N/+9re8KPztJvt0Lj+f5uZn+lPzOX6Vfacw+M4+853u
9Lv03e/M+r6jeT+dnPf4U51X/p/xaFM/05/SN/zWr3Hnl8bJCX//9oNv/V1z
ffob+ElwHf7+n5jrb3/fzz8Cxunvfk3jjsGLAP5nzkVYkH90uc4bBzS0+jif
j38W029+94H57pn0uzAzzG3PlD757Qdf/Qdm/e7XPKvhGJY4//mz5l8fAXT8
8+ifjjxELUAviU7yG6KY/wFE/Y385G/Y6at//71zITm9f5o/XFeb4wKUnGJM
vzmuVQpi9sH3WfaMZX6aIRe0BCEpP5KG/Kdkv/dsOmQTRhopDk1Bk3KsZ0rS
ogKg6YPiLJZpyCfDnpOgM1Pg6C0oLxRvYecoeoAQRzXDmSK7RV63GwkRhXT8
EBe+c8VbDQHHoWtOfskkwM0bSBV7m5nWkEOMsjPHVqwoGKzfTNqvzwEDuhlH
ao9yj6PYNMchuwAhvdv3k6qpiOtE0C/yy7VdNUYhm0e9xMwTjYBCB5W3Er1n
jZTCj6D/FRsniSDZyApBdYySy2gE/MsmFZ6yP0IExwZ1oxZ9Ov+RY5xoo6TJ
evl9yXqc0Kk4XLCGP0rXK9HtH5YVlwIn9gqjghbihPgaoC4iFifUdJxfK4lx
wbNJ7k6iD1iCXT9DuuryJLE9xMZlHB/896r40/LR/wG6Wk8J5l7CIzIcW/at
ghZWsoZntkfq4Wn1bkm1UewUpsQVNIC+qBrMpUoOXjbsyQpOY4BC7ElSaaua
ZZGX8UkJkoXIu8DB8GzNrBhno2bwRncwxr3wIRuKjDgGs6rbAo08ytQirkLq
d3QoyNQucSDtnGP+kOR3lmjvEQjYDB37LBA+lBAje7xnpZr01qIfuXPoH6fo
s/zOrEPrOxhRiJmMyQDTBddDR7uZTi89sYBF/oysOClW4CiyxxpAeZTSEt0q
7nYK/Tk/2OQDc1ZOmvEmuBEDVcaMeBgqYX7fkhcODvBmSyF8nAnjUDFlS01Q
TZ40NVxYhaJWD4bj2cCcyCZFxii09TTLnizyxC/0e/X4rIgTBfciSIU3Ifrx
ST7Pn6l9neQ7GFvNkBr7GgvK2zkO8YPIqqjmY8Tw2LIMYb0mZCQ3ksWfnkYj
sWLhcng4uF5GAfG0hOXhh3auO8qIEEdPO/1OxY8x83erxTHwxhBLPAj/d4A2
hpVhXrAMZzP/cUMBxmOA8DjkcxlJNCtG8ushWPHqKEGKOBKN0VU94arp3Kbo
VrVU/iSeAcnTNELUbIgFHtUIiPVuVK2xTwzPyoAR5XxBOQZjh8MUsl+uo+LC
igNVtoRql8R5NmMFg3MTfnwQERc+oY6wQN1T/Z+cl+FlGKCW0OV6SN3/lHhy
JEu2RQJKTClHvddAiP2Oh6OqiJCSDwrSdAmBpmeFXBpGw5gxF2sLrEt7gkOf
Yyim1PyKXgtBlZWBmgTS+luWM5b5q+6gi2pPJMlnS3doKdmY4wKNQwhicBY5
acgYVjVRVRcOS1knIi8t9SGahRp/YaHezjk6ONFzuMi/wDqnY9w8rkpIJpiJ
zKrdbUHVe72m/STJ26GCCs+YShNMzCcmIlKGSESQEPWBtaUEPstOTXuKSZyN
PIGso4LBkUUqr3r7jkoxyi9OZscVibRPi2VJru2Kd4gQirPRL4un451kWpBn
eQilOSp/z9PxPGemSPJ8rKcZV2bYlGMqRJZh1wWn3alZRyknjp3mGKDMXxQH
ypaV57FsLPrWZ1aTDBJ7Ia9pFTNDk6BxogrEqrk947Ukcx+USnTQUd5xkcbj
tLiTT/2vgKD9sCOX9gCSLP/o/Orfzz/WoUBvqZZUBVHjH7eUqhSUcNSD2lJq
RzFDBCQDzYjpVLhZOEowzXZIisBp4QSu0U6OEETb0b0D1Qf9uobskQ9xqQet
VXK2JECisybV89Rx5KaSItcwEn76UpLTd64vQJktuE7i8rWW+WIgACQDjrIL
BLqmLhaAKZRypEVblB9ZboumcXUoqmaeQHWyMENVp44DkgtRvZvRnhHaAEQs
WecdHSGkxDMYsh0FGMrBo0sg6sj3ID3po9daqj6tkAZ6CCXtpwgC4RxRcZEU
J3FpBVhdA3AjIId5/icWmk7TpI8qGINRi1mZnP1PkHpX0HmjA8OqHDYIzU4L
pzGdxeR0VsvS/KGNJmpGC6A4Mv1QEWscD4ZmLBbuYJCBI9diAAJicVsEYzyJ
DW6GQiN86WJuKCo46rZA7F46Y6NvJNtRqwyMZbJtW+8kt2FOC4Fh4HQTgSp8
EdA8OUIq9k9rjKbLEw2zOJI6yrWl98wqMBvUpRL/UtkO9YodWqxYM78zQsrA
ImhcmL/tGTb0Pq861k2F+rsYoVqF9Eg7uFST6yI4r+SES+CHIv4JSRCLh1Zj
cTDPz4sm1tTn3DMpiX9Sp4gTnHTBAyCGSJYufW0a/2g+IGfyJaI6pQ0fUrx0
NYl8wZmetYSLR/ICRYDWmqlw9vI5MQMU8hNMixhrakTgbkfKjhS36HjMG10E
8sBpreODLODAD94IHUokpARI1A8x5YUeXBXSqGNCQOafH0LB2Sy/Bwvo1DHd
tKb0EznjfMNR2xGoPgOuUQrbWLXiuZNthNXGxGUsy6MUezI9H1KygacEVkNO
Hw5LcqTABiCnQ43krdfY5IlQYxjr0w8FFcXHr5GDG/IhX1DKPViBuPIPhSnM
CJ+OAkhXkg2PQSSZYvyA1I/8oEWaF8kHqMmY6S7uG+HeUIZtx5WENcy8GMy4
GVvkyOCIzfk0Aq8en2ChanwjkZ5cJUKx96NC+lISqY4cYlYBOfIQEMOtNtue
28FUG9B8orol64PFzYsgcNjpEAIYdGzxFe1cYPPQMD6J1q2J1oAoFBCa5i32
Hdwf5k0GlhfKdUcb5vxcDcoIf0GVXcMy+amwDPOsEJXBAMzoiUyekOgLpVU3
B2GmO4faYOV3UZ+Q7XFgQUviEp2Jds6S3VZ48caMw15GGjuKECoJRBiIlOvv
Qw5/9IkTC10PoC+HbB/SQpxWwjZYpwcA3ZLghb2RTGZ+Ro9ehFNiNQqnEZhX
PsA7zR4CLkcZSeIesdIvsWp8uy660HyIrDoqtkP9IjMJbCijuE7yFl3nNZZA
G+lqJ5+xo5n1iY4qd1mKEtfFHYiHKioFqOOrmxiQ2Ci7WaZQA8W7wbJ10ugT
n6PmnESvQ7A1rJlmsIOwhSRb1YeGW4Z0bEKXokhx1K6lZFUDE0qPwjSh35As
hEwtgBcZcxHHzFl8RNk/fofJy5FffEy0rlsYEQ/Wv3Wo7gqNSMkC5YKH5j4q
w1Gb6X7gzjDDXhLoiW2Qm0bXnJpJY3Z2i/BPysfIsIiSeKDic7D32g4jURMN
GiQdfOkwDZA8jtwBMv8SdruuRJN5SnyA+8oRCmDlOdipm+ABMx7sW3zzELlE
ElDzSCrVKiQwImmmFZAewyk9ATbAfOvqEZNe4FI/r6vE5/90nAumTpX7YpK4
M2uQt+Knp5rP6S2QLkvB5zXFEJP8QlVNx7nYsN7ooE0WrV3gLBzZWRLi/rGv
zQFTRqcDApU39gjxGDiOR30MKRiP9gcCBmKI0qov3u0rbKuK5bYfAi4HG0MO
230hC9wZkSH7LMEMk36CXMNDU79q3PwGPpu/8e5p4pOzYdzR1gQjyTmYpADf
VRi9kmGxhgUOBN02AcnDBnWNo4iAVEWyq6dowrkwSqdpttxJwXjEf6CaO/oZ
Z96dVHzHCt0PyLo7Pd+HM+5OzBq05ZBpIwj90m1arP7T9B75+bD6PDFHoiWH
Y//gqn70PsY6+0371jWfRkM86vBWidef3D4YdHl7mj9+VXHIKS3/n7Pz+w2B
Sv381gpIEV0NgamA0NgWsJ28CqMRLKmRAHY5LguJbybNryjbgOsRRrFGqXuy
fixkbxVnGlBhZWh0BWQ6WmTFlj23o9lilRPwk2YOSEYFKGlZf+qSCO0KuNFo
Fjej2ReFMAobLUJAxTf9lhQ5tNtRS3UN9WGyTt6xkpV2KosSZDLPPSQTEcjX
1F9A6WeRpVlK2LaIvXHowa1dr/5b23AKey0VUfUfqaYyXbZ0G7FhTqUskfFS
Vl057DBlptSOpWmlNgtt6v1EUjtoq8lGYN4FqNSSFkcj121J6SHYjxLO3qkN
P+qjh+nuhZduHON0cwOa6VSqGRu1bM5NRC6rELGchJdGwTW+ZNSIdLBTpR9j
W0rTqwjAJp4iJam8X6lCBZhvKtPwM6Y4JQ1xWWNwPyACxTSgrnxuToal9TGU
KKEtSjC0ATBuKmbl+Q4PaDkOQuMaSExPKcZUpo8Ft8eaVWKVhaDUlLaEPmZ1
ZcUQ3uyEumGnpxVjw3jt98zraAwFSXsLhNAWNElvei6Pi1HIx8b+8FG3iVJ4
jdgUo8y1cOahqZDErfxJZ/HN1k2YHEnYQCvbxkgJCyVzZDX2x0yaJKGREAGe
4CWNUdkIMZqyDSYbFU0YEcsAs0ImC9Lwib4lWt4fpUolyQEmOQxPfTorwasC
uHSEJSyXTM377EQuhGrZ96VDcGIBt5Kjfl6SjzZLkDhCnN3AHr/FEGlwEE8p
uC5ouBc4lsW6mCRoNNsEy9C/01FqXgxGjOVY6ASCIkcZHa3kCvHrufgduEjK
DH4qaZDy2NB+StwWoTLeNhkX7icOMRv04R497Hl+OOqUCBjBKeD+/ye1POqm
Fhqhv1tu9/T3zsFaf6jSOOpa+Y+p/hF3kvP80Kp+9D5I9Rf93mj8ZAGM6k7+
rn3Q/62xoCbCp9NWw/+bxkKa0mUMBnt4aC7YyC075UfpbXch8o3NmUip5k7f
puhbY3/l1pVvuTOGsoiKu7wQ+0efMvb8cykDI/1eNetqHcoq7s/PJ625Cjn9
MfCtsUTdjzpLpoyi6IYrlu2tJChryQGKxgaZfBbNiHFXYPYLJY4rNoFw1pSv
3rbYTkVF9Ei6D426dStq90f5BlYfKa0mYGPcKQPnMvDg8KdEV1KAY13wkQQ2
feQs2mQMgCh0Vf8D7aUXEelVdp4CcCp3KangbN2nqeSmDXNqdcRQ1bGlGY0C
zZAJwaXgluXEfkkXVGG6ivFwO+IowzEAGFWzVrMbg5KeXssQwg6dC50sReWM
sYOUqlTrDSNP+eSkd6M42bFjxan8nPfvNes7TXP7/vtFQuIIVcq4lyqsiQ56
aGwc9irIuROqKm4J52cTErFGBuPB+dRtjGHXroiyKaKUKF3hgE/kW8SqD2Iz
rKwKwDwAGoGUtCTGGFCqMheqqif5AQvYirSwDCcvuzhVOTBdLaAJPKfrFjCU
YcKYwjzdapScEhFATx2j9mI5fQECfVmUb2Mev+aHygOJBYaRLdpjUPV9hVCw
XcEoJyMjbjHqrCvEehTrYnxFgGyKYcOW6F8H6Sa11vgVpm/GtBoy8zQJbRU9
7OhpYQvSvdP+SXa+jPthAp+sI5WHwBrgJZtQykdtYzA6znDPRhYD3iE4igeo
C0cacuuWAjJjmMozxIyxo9goHw1Dsptg20aTmnvLYmtcbJcWOuJJ09VZtjxw
a0lpI8h7NBYyWPkUdV/nD6j97AMJLmrAcU91AKXLKs7H9VXHPcflchjprdzG
fgdpzmF6hwwc2DU7RKiFsV731Nt9hXtdOhe4gRFNWdLEjVtEsQZqikdie3k0
jloxQKvQkxODcZk94YIuYUlzArn8Zz1ZuqM8+KOk0G1VrRh1AZB4FxN3V0eI
AIb2kuXgUx4Z/VyUNUoPxgj8WoXsKAdUlsHzpr1rgarpthDilWyT2xfZbUpj
ojwftUsPMwsqS5yZHEhhjJl2HlxhwywA/IGK9v7851evL17ml9fXby7wQjTc
rhbc/fnZ2ev8cf769Qv8P1i9f/lIb4bDSC7f19PRrV10TR11fnu83+8e00Yf
f4zbSrbJSLKGkxfnltXxUAwIZWCzuELwnforU/vzxV/+ggzvWWyQnbq3yJIM
Kd+1+Loo5Z1N0/cPedA56zOpakv3r0xcgiOmeOwbbnQc6vxLmQplbMNdeO2c
7WY8hpxTFPT7kaCnXnLKEXkmCqHhDFWsSlhZ/LhzqMywEyXcE5V3lX9LXtR3
2t0tWf+tN33fxlNW3u5ePZbadG4zUPr81qZyPvLqFPcE7+g7DZfDIFjF7cq3
tfRUYxnuaQn3ePEelV9PJ1SEdIVOMuOsg82GJ/OLmBsRQp8UtmhgDax8cU8q
22zeqh6YtbdOGufTkulYxLj5+j++zrF+EjXmJYsI3lyqiIP4b+leq0YYDaU5
fn3xtc2m9KwE8Pt92xe1Gk4wwtf/kX+SX3zNrpJnFdojO8z6xNboN5hHzYl6
l02+cQ32U+Y+nIiv4Va5W2mQK6Uk1NoZz3psnwVm4u01ILGfWajvqDp9R7p3
B21IxB7z7kFi+qmiHj3Zp66uCutgh//799dCzz9fPEG0CNd7zdKLv8iwwAAL
0q5rQJHoig37AvVyJ/SwIXSQrTScJMFdJd2ovMGk7DBFV6LKkJZtDqHXQyDf
K7khKM+C29sHHavocEImveZgJkVU3GB1Jfcwj0KfPLqUhaIMBitWsExKRJCP
OcA4LoM+3FKnYYo4E8XcuBSgvcN8K1fswloplXric8/4w31imZhpi1QDnNo5
HKdBcNDFYNIFmvk+yC9OsCf7Bb+Qu2pkl/yUqDLqHQhKwQ1xY8zHQeMEDqKn
y8ZKJLRb1t+3wBFlVQls6cKCfE2ZPrh/tD9Gj4l7XSSfuWsqFD8o9lBV0PhS
KnXiS2N12hC5V4PRz2DCDSuGppc/aO4WkNWXAewFPXVGiwwlVPFSEZ29ZD5W
AYENZJNJPMKmMPLQmMSoLUCPrnchjRWTAUPXNsmZkZRAVMxulUGH+mQUsZtN
p43NyXI2W4ybQR5S34p3ARRISW3Z8oVuVZPQ8TikkxzMnFKLpPThVrinZv4s
HavNwQ5HiWhKlNXUUcd9KHPCREH01qN6hKYHaUl08qaKJjG+bS9avP137KCw
VxWNjKgQANQUcTGcDGNxHKOpPGdciqHbuZqCP82Rkyaq4wIDTk3E8dlDQwBT
0ovtQjgSM+4xUiaOk/scCx+sdnv48L/+89xhsru6ObPM8vOfJvw8XiXp8/Qt
bjm8K77BAAudKp63xRpq7cXbJitkNYRo5K7tsSmzRj+RJVhiLHyetF9NDXfZ
Sp5ezkjeupDMVKZrpQWqNWHLL6KAFZ4j5/Y4DVIGa4ID4+wk01uD8A9iyaST
2M4pcnOLfTBI3pEjljWi2ENc3tEIdrDKJVpIUwVu/KfQ+Z5yO2WxUnIQhmI2
YqoU5P4KVSfEzieOvjR5sYYtKQZyEm0Q6CNwh4szOYOFBNzkrWtTdwuJXTbN
9ND0mGDicgeOYXS4fk1dELI25TmsuUsAbBQ4E8kiGb/2IhRsj91hy3DYcxlT
KkIy9YqXxVCMt88uXRwTvS1r8Q0ZrCKQB2h6uYkmugD4PiDQ1EINj/paE6+1
KBQgkNAYEaPuyDli48loQHWEASSsiE7SSj4VCejDAXV2XUn2BeBOraIpVPNS
dyGZXkxK1huC00A8LkpD8UIpVm+BLzi+y8NjI/dQglZ05uYAXAvPtNuD7bUe
QOe9Fg5iw6C5XAxHz8r9OzK1M+lNR9cHSf/XUN7DAn1d43qWDigRO7RjPjSm
u5MREO00cgj+yS2pzbx7x3YAfyJtbUQsEX3YRlcalTV1T3Ifi7loNW2/T5Xl
Wup61L1EK6XsiHB0jbiDECAzAMiqKsxFhMbMMH1MfCi71RqP49G5Je/EfbMm
A5da3I8adYU6hvItls6EpgETO0kv7U6HNylwPqbe88UsyvebfHyts+w/pmkg
X+WbYJCJoV0gF7R4wSl8iN7Ekgszmpr9gYP37X4ud0V2FRgK/uha70Txtld9
yZ0WfCEJ4Q9e3SZu5pkyJVtWgezNOG8El4gnhYsL7GyYbi/3MIcACFnRWMaI
RDOXozJeL0ybWKNZEhhIBJa4+t2OjNjgd/DF2m2GopNKXpPlQ1G38WFU3kZj
qE94OMk4ly3Vbz3SzizqS5jqsQOgrExHDnZI/IjC6AlH1h8dfqyeca3+oMx7
U7UtxUvino0cxHgC1UVlq8S0zAXzCJmmLUtn6un4DqVKNcuZLTHFaZfRF9YN
J1MIw/wcw0hnxjYojSlzIQFexiuQImuNVxJoLbumjaaRlMonMKHcMgMUSawi
V1kY2zp3fxCAp8BrqUE3SdUonObaLSvA5+6gRGZkoi6ZhYv2Wxtnj9JNKqHe
Sy/RZe36miJLwDwAXdkXRBQbfARYSWOunNRL3LSht3F5DHuuM+5NOSrennJc
ZGs6OvtPPrHXsqUuu3HVmOR8Su99vUMuS0rB7lkgZ1ZxygFfVRdL3GNhQNJi
+CPMinz/PvX9fv/xIn/eSnyo0uCcZKHCwcz12tpZhj4sgn7gAnXrfdpjH0Gg
UYHjRdtaiFU7AC7NPfdqWKdxgNHFPYnjIcnXQDCgtUqxmT7kJi/lkiQGoxxm
jPyafl/fL+KVBrh4SroI/se3Tm4AoPsglkNHh7jjrEYtY+HwrLZ6QyiDWQcy
A9AGVYe5iA9PsL5AVqwX1jB1UIQRr7ypi4MCzcsSRldL4Q2xIAr5VjpcSBVr
2yWgemKXSaclioehSMgk6dfHeTlrTq6mQGMXhAjrbVIjLWDRejbSOPm7jNdc
3BZVHavLAWtAMNe1HoMiD0fwmLZEm3v26jp/wS6kKlxkwj7cObf6ALEzzhCQ
K3UbiqawSVCgn9AVexuDYAaVevrxxvbY02+UG58iGgp2PyxREdHsepUQnEoD
kAZKxUJz2D3tmhZrVx+VOlgmF6AtTlchVN74WGqc3WN/ikpEDQGL0UG6BHGZ
O74anBVHxcNakGwDPkwyG7raycpf9hWLQhEDx9Y1HnKNgIj3bYWOkrVVjAe+
yk6mZSjsh2+/lRZdRi3R66yYHxTkK/IkoHfYCe389RvZLELVB8c+cUK6zqIA
wA81sOnp7miYTcNgOiq1noJT7J8UsgwkDobWjUQTSDWI98HN5CyobcjtUGMI
whxW0pJwMmJnuvUL18Fg0LCjLjGe0lUzrdgYpajHnjfkVaTASfS1KHD5jhby
Akd/jTVsQnnqInTUm8JN9W+n/WLSeBXL53M7s9zMcFyJFu+ji7cvSNwTr3Qz
izki/B++lPL0UpIc4aOVnJmVBPh/yWokZ/KQ0WHMlJH7fKxW6i2NEt+KJ4ld
tRAb2zanjKEjI3NqckojGiM1+/sxQxxxeiDvF0jyeFUNfL2uC/Zhc8r5qMEz
ktvQDJ5QWDpvoEHHiJhzKbMa+mybOa4xLbW5x43iWMhKYutIC7uPq5NiwHDy
VosZs4wgPgsOlw47Bp10TOtQLaZ0Eo1FxnKhOiTLT16sMCp7VqdtQiLnmvkh
Muy1Ne9Yx/ahY/bRfRDrcagB+Gq89HpEjFpZvO6cthXiVDij1VP6Afkm13rv
L/erPgRfDpMO3wCNIAdr/a/DmPJDZS3196TS8JVDls9o2LPTvfCYQjFCQ5Eg
IyuziiSnMtYkzSQmKAJ/us0anMAz04pVZiIv5glYmTkYOUObPu7gi19Kdq4H
NMS+Pu6OkrHsjeMFZ38UoMmdv3p5fXl9c/Hy/Kv5i8urq1dXGGx9//6PF1/d
XJ29vOa/rs8vb27wVzJTxs0oRt46Tcjb1O3SLnlsWFxSLtxSYEoWQ9KYlnxz
uzXWzSM6SEMs7JnhuuhVMKMz71GA7MhQGrm2uA6tNpeNU65Du+41ublva25a
IImt3BlEr4/n+A2SFV3Q6WqN4iRuELknkvUk7fZLGi1Jz+gBr5qQxsVK4jXq
EOfS8k2z/DTAJB3k+L43eUb0C/RBHbUfShhs0kxOrhi9J59RL17Viqh4JVb0
mMzwAvPVnThRbeqX3tCuK8ZYjGCFne64awOGS9MVCHxSUeL0QDAgR/am2R3f
cO05RIQd3sCewK+1P7Pxjj5KkmHIACdFO344Dy6gXVTdUa/l5n/HUCWfu80p
OLX+5HRGashRjuhR2etYnU9Uh1Hfg/xz258CuR9Ti7pPNUOXOvBSwoy/k8zs
ZNhYpUKOwaLRQl3OxRulTj8adSeXY45VW1gaNJdqNpvqm4SE03YDFM5VkxAJ
l1wMI+DxPtJ7eCSZUHFrdBTKMkhihaMDFq96bkin6S3SiZsIcxvwhiYWRBIi
oNz2AOJDbMWnjStHFphwN85UN5oCD3R0/dVRy6VUXkQ9ZaY1CafwlYglBkOl
MVyKnVVSlsyJ2Khv7fgg166PIW+XuoW0bvsjG2Gz3Z1UbqTX/n08o1ACs4yJ
tSuNq3s8Ue2kIYkBmDCLiXGO7FD01zlNukzSqaWCcKc9T6PlRLpFDGgr95KQ
Q9VRB77STegaY4GHLglNZiLFgWA7Ul4JuTlyMuIK00WPgC+vk2ICYwVHl5Lk
12HKGF3cAXOyrh0akxjdLoSb+V6M1KMfr+pjx8W0unvcpjht+jUdki2jhq8B
H3XmawinOi5dDwdhcn7uioPZG3t6MHmJyHyCWlhAv9CkoLSMoyLNWXxiGqTz
+fuHU56yLLMmGTIdcm6oDAx5YehLXwRjOklTNGW/tHyq7/cnmEq4yYYKZUMx
SbiSftfu1G8Z4qo0nGmcMM55tGXDuwJEfUU2FToRNS7OutLA5ahVbNUSsfJy
XFELFA/wLRpnWqH6DzmvKi6n1VimDD8lPvAwpNY8rfKRtZLsDtKvGHljP8K2
s9zyVwvTtDIhgOVjVLWVb+2R13eN9BzAlUvBKz5kzDNO2nkjl4vGAmf9pA2l
eKwJxACBAaUVd5KzYrPqeQ7pfuw0p3YCzxf5Bd0cZMJM0jOh0cqYVhBJfTUr
mxhttkkYZ9eZSmWu8rcV/tyKw1TdEV1Q6R2ItLVtOZ7eghOpTNGbBqPu7DP2
Z0/3y+WmaAlhkKNrx5cVYYgCTYa3er9DESZQTOTbzin0TfT6AS6BG7imDWgg
/4Ly0U514R9f8qm19cGHiCtfVv04biwXigSX6BlhNaV1TN4+ED1DuDiqmFCC
2qV5ICm0WA0UtrmhlNCO9UHH1yQEiyJc3pqoFmXkbraVPV/bU6mZoD4lEyzz
KKQkCYiEbbD8US5sQubaiGuNNOVwKb3aIli46kWkyTA+/23+E26NHUlg9J7m
s9oXQZ95Ei6eShlRB+obknbI4hzdJBFr42fqtJBYUNwwXT463rA6eQIuF+EO
bL71SAlRik1IGacGzzEJxjrjglMiuv9OFzi4wyNQB8jYFS6VLAa5nmINVSFg
aJDyL8UtTUEtjJ6OcHl97C6sjrIXCjv2BkGFIyMnZeF6EKfkPrfZE2SiE9sv
i64LOZec2NEA69zo7lorYijpB3kIrLi0Xqou3GOlH725eu6tV2tU8SMexpYT
5qVv/cP88uzl2ZEb/Sa5YR55WNPyk3wjDL6KhexcIfgwPyu1RyAX071/ymfn
Vr95sIZNc5uoV89ewfuhmyBNf04Z5nW7mX5n1YFZMv9m5ycKzn/yBC8puBRB
OxnOpIzrKPN7vdZKE8zxOoDrrZSPCsEJ62zl2j44jII8viR9QNhqMyau5uYv
aaArgDtdUfH8AsFMBVjZfwOPrgzRDKUAAA==

-->

</rfc>
