<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-gakiwate-dnsop-optimistic-dns-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Optimistic DNS">Optimistic DNS</title>
    <seriesInfo name="Internet-Draft" value="draft-gakiwate-dnsop-optimistic-dns-00"/>
    <author initials="G." surname="Akiwate" fullname="Gautam Akiwate">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino</city>
          <region>CA</region>
          <code>95014</code>
          <country>USA</country>
        </postal>
        <email>gakiwate@apple.com</email>
      </address>
    </author>
    <author initials="P." surname="Flack" fullname="Phil Flack">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino</city>
          <region>CA</region>
          <code>95014</code>
          <country>USA</country>
        </postal>
        <email>pf-ietf@flacko.com</email>
      </address>
    </author>
    <author initials="S." surname="Cheshire" fullname="Stuart Cheshire">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino</city>
          <region>CA</region>
          <code>95014</code>
          <country>USA</country>
        </postal>
        <email>cheshire@apple.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="03"/>
    <area>Operations and Management</area>
    <workgroup>Domain Name System Operations</workgroup>
    <keyword>DNS, caching, stub resolver, latency, delay</keyword>
    <abstract>
      <?line 89?>

<t>DNS lookups introduce user-visible delay, particularly when cached records
have expired and must be refreshed from the network.  This document describes
Optimistic DNS, a client-side stub resolver mechanism that immediately returns
expired cached DNS records to applications while simultaneously refreshing them
with a network query.  The application receives an answer in microseconds rather
than milliseconds, and if the data has changed receives an updated answer
shortly thereafter.  Optimistic DNS is complementary to RFC 8767, which
addresses serving stale data at recursive resolvers.  This document focuses
exclusively on client-side stub resolver behavior, including explicit signaling
from the application to inform the stub resolver that the application
is able to handle old and possibly incorrect information.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://gakiwate.github.io/draft-gakiwate-dnsop-optimistic-dns/draft-gakiwate-dnsop-optimistic-dns.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-gakiwate-dnsop-optimistic-dns/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Domain Name System Operations Working Group mailing list (<eref target="mailto:dnsop@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dnsop/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dnsop/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/gakiwate/draft-gakiwate-dnsop-optimistic-dns"/>.</t>
    </note>
  </front>
  <middle>
    <?line 103?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In the early days of the Internet, computers and network connections
were much slower than they are now.
Delays of a few tens or hundreds of milliseconds used to be
insignificant compared to the overall time taken to load a web page.
Today, increases in computing power and network throughput
have dramatically reduced previous major causes of slowness.
To continue progress on improving user experience,
we need to identify and reduce the remaining sources of delay, which
-- as other aspects of computer and network performance improve --
now constitute a larger proportion of the overall web page load time.
Computer processing speed and network throughput continue to increase,
but the speed of light isn’t changing.</t>
      <t>When a user views a website, the first step
is typically a DNS lookup to translate the hostname into an IP address.  If
the device's DNS cache contains a record for that hostname, the answer is
returned almost instantly and the user perceives no delay.  But if the
record's TTL has expired by even a single second, the device must perform
a fresh DNS lookup.  On a wired connection this might take 50 to 200
milliseconds.  On a cellular connection, particularly at the edge of
coverage, it can take several seconds.</t>
      <t>The user experiences this as a brief but noticeable pause.  The website
appears to hang.  The user wonders if something is wrong.  And in most
cases, the expired record still contained the correct IP address and the
website has not moved to a different server.  The user waited for
confirmation of something the device already knew.</t>
      <t>Consider a record for www.example.com with a TTL of 60 seconds.  At time
T=0 the record is fetched and cached.  For the next 60 seconds, any
application that asks for www.example.com gets an instant answer.  At time T=61,
the record has expired.  The very next lookup must go to the network.  From the
user's perspective, the transition from "instant" to "slow" is a sudden large spike.
The record was valid for 60 seconds, giving cached results in microseconds,
then invalid for the fraction of a second it took to refresh it,
resulting in a delay of tens or hundreds of milliseconds,
then valid again, with the delay returning to microseconds.
Yet that intermittent slowness will be the experience that the user notices
when the rest of their web browsing is usually consistently fast.</t>
      <t>This document describes Optimistic DNS, a stub resolver mechanism that addresses
this problem.  When the stub resolver has expired cached records that match a
query, it returns those expired records to the application immediately while
simultaneously issuing a fresh network query in the background.
The application first receives the expired (but likely still correct) records,
and then shortly afterwards, the authoritative fresh records, if different.
Using the (expired, but probably correct) address from the cache,
the networking library code that the application is using will start connecting.
While connecting, the networking library code <bcp14>MUST</bcp14> continue to pay attention
to asynchronous notifications of new addresses as they are learned,
and the networking library code <bcp14>MUST</bcp14> react gracefully if,
occasionally, some of the candidate addresses do, in fact,
prove to be stale and incorrect (<xref target="enabling-technologies"/>).</t>
      <t>The following diagram illustrates the timing difference between
conventional DNS resolution and Optimistic DNS:</t>
      <t><strong>Conventional DNS (after cache expiry):</strong></t>
      <artwork><![CDATA[
  Application        Stub Resolver        DNS Server
      |                    |                    |
      |--- Query --------->|                    |
      |                    |--- Query --------->|
      |                    |                    |
      |          (waiting for network)          |
      |                    |                    |
      |                    |<-- Response -------|
      |<-- Fresh Answer ---|                    |
      |                    |                    |
      [====== 150ms+ delay ======]
]]></artwork>
      <t><strong>Optimistic DNS (after cache expiry):</strong></t>
      <artwork><![CDATA[
  Application        Stub Resolver        DNS Server
      |                    |                    |
      |--- Query --------->|                    |
      |<- Expired Answer --|--- Query --------->|
      |   (~0ms delay)     |                    |
      |                    |                    |
      |  (app can start    |                    |
      |  connecting now)   |                    |
      |                    |<-- Response -------|
      |<-- Fresh Answer ---|                    |
      |    (if changed)    |                    |
]]></artwork>
      <t>Optimistic DNS is complementary to Serving Stale Data to Improve DNS
Resiliency <xref target="RFC8767"/>, which allows recursive resolvers to serve stale data
during upstream failures. The two mechanisms differ in their focus.
As reflected in the document title, the specification for serving stale
data from recursive resolvers was focused on improving resiliency
in situations where the authoritative servers are down or unreachable.
Optimistic DNS is focused on enhancements to the stub resolver
on the end-user's device, to reduce delays even in cases
where the authoritative servers are functioning perfectly well.
Both can be deployed simultaneously for layered staleness tolerance.</t>
      <t>This document describes only the client-side behavior.  Optimistic DNS does
not define any new DNS wire-protocol messages, opcodes, or EDNS options.
The signaling between the stub resolver and the application is purely a
local API matter.</t>
    </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?>

<dl>
        <dt><em>Stub Resolver.</em></dt>
        <dd>
          <t>A DNS resolver that operates on the end-user device.  It maintains a
local cache of DNS records and forwards queries to configured recursive
resolvers when cached answers are unavailable or expired.  This is the
component that implements Optimistic DNS.</t>
        </dd>
        <dt><em>Expired Record.</em></dt>
        <dd>
          <t>A cached DNS record whose TTL has reached zero.  Under conventional DNS
caching rules, such a record would be purged from the cache or ignored
when answering queries.</t>
        </dd>
        <dt><em>Optimistic Answer.</em></dt>
        <dd>
          <t>An expired cached record that is returned to an application in response
to a query, before the stub resolver has confirmed whether the record's
data is still current.</t>
        </dd>
        <dt><em>Fresh Answer.</em></dt>
        <dd>
          <t>A DNS record received from the network in response to a query, as
opposed to a record served from the local cache.
Fresh answers reflect the data known by the upstream recursive
resolver, which may be more recent than the data in the local cache.</t>
        </dd>
        <dt><em>Asynchronous DNS Resolution.</em></dt>
        <dd>
          <t>A DNS resolution model where the application initiates a query and
receives results through callbacks or event notifications as they
become available, rather than blocking until a single atomic set
of answers is returned all at once (<xref target="async"/>).</t>
        </dd>
        <dt><em>Happy Eyeballs.</em></dt>
        <dd>
          <t>A client-side connection establishment algorithm
<xref target="IETF72"/> <xref target="RFC6555"/> <xref target="RFC8305"/> <xref target="HEv3"/>
that races connection attempts across multiple addresses and
address families, using whichever connection succeeds first
(<xref target="happy-eyeballs"/>).</t>
        </dd>
      </dl>
    </section>
    <section anchor="problem-statement">
      <name>Problem Statement</name>
      <t>The DNS TTL mechanism creates an inherent tension between freshness and
performance.  When a record is cached and its TTL has not expired, lookups
are essentially free and the answer is returned from local memory in
microseconds.  The moment the TTL expires, the cost jumps to a full
network round trip. This is not a graceful degradation.  It is a dramatic spike.</t>
      <t>This problem is compounded by several factors:</t>
      <dl>
        <dt><em>Short TTLs.</em></dt>
        <dd>
          <t>Many content delivery networks and cloud services use TTLs of 60 seconds
or less to facilitate rapid failover and load balancing.  Short TTLs mean
more frequent cache expiration events, which means users hit the delay
spike more often.</t>
        </dd>
        <dt><em>High-latency networks.</em></dt>
        <dd>
          <t>On cellular networks, satellite links, or congested Wi-Fi, a DNS round
trip can take one to five seconds.  The penalty for a cache miss is
severe.</t>
        </dd>
        <dt><em>Multiple queries per page load.</em></dt>
        <dd>
          <t>A typical web page load involves DNS queries for dozens of hostnames (the
page itself, stylesheets, scripts, images, analytics, ads).
Often these DNS queries cannot be issued concurrently because
some of the hostnames are not known until earlier transactions complete.
For example, the hostnames for stylesheets and images are not known
until after the base HTML document is fetched.
If multiple hostnames have expired address records,
the cumulative delay can be substantial.</t>
        </dd>
        <dt><em>First query after sleep.</em></dt>
        <dd>
          <t>While a computer or smartphone is sleeping,
normal wall-clock time continues to elapse,
and by the time the device awakes,
many cached records may have expired.
Optimistic DNS avoids the delay penalty when a device is
used after sleep or any other extended period of inactivity.</t>
        </dd>
      </dl>
      <t>The fundamental observation behind Optimistic DNS is that in most cases, a
DNS record that expired a little while ago usually still contains the correct data.
Servers do not typically change IP addresses the instant a TTL expires.
The TTL is a freshness hint, not a correctness deadline.  It marks when
the resolver decides to refresh, not when the data becomes incorrect.</t>
      <t>The "stale" state is also relative.  A user querying the same record at
two different resolvers can see entirely different views of staleness.
The diagram below illustrates this: both Recursive A and Recursive B
cached A1 before the authoritative server replaced it with A2 at T=90.
But because each resolver started its TTL clock at a different moment,
they present a different view to their clients.
A client querying Recursive A at time T=80 will cause a DNS
request to the authoritative DNS server to retrieve fresh data.
A client querying Recursive B twenty seconds later at time T=100
will receive cached data because Recursive B considers it still valid.</t>
      <artwork><![CDATA[
Time:
 0 --- 15 --- 30 --- 45 --- 60 --- 75 --- 90 -- 105 -- 120

Authoritative Nameserver:
-------------------- A1 -------------------|----- A2 -----
                                           ^
                              Authoritative Answer Changes
                              At T=90 A1 is replaced by A2

Recursive A queries at T=15:
        +--------------------------+
        |    Cached A1 (TTL=60)    |
        +--------------------------+
       15 --- 30 --- 45 --- 60 --- 75  |
                                       |
                                       v
                            Client 1 queries at T=80:
                                 A1 TTL expired
                                   New Query

Recursive B queries at T=45:
                      +--------------------------+
                      |    Cached A1 (TTL=60)    |
                      +--------------------------+
                     45 --- 60 --- 75 --- 90 -- 105
                                              |
                                              |
                                              v
                                   Client 2 queries at T=100:
                                       A1 TTL still valid
                                       Returns cached A1
                                        (now incorrect).
]]></artwork>
      <t>Client 1 issued a query at time T=80 and suffered a delay waiting
for “fresh” data, even though, at that time,
the data on the authoritative nameserver had not yet changed.
In this case, using the expired cached data would have been fine,
because it was still correct.</t>
      <t>Client 2 issued a query twenty seconds later at time T=100,
yet Recursive B happily sent it cached data that was no longer correct.</t>
      <t>If the data was already considered “expired” at time T=80, it might be
natural to think that 20 seconds later it should be even more expired,
yet Client 2 received the opposite behavior.
Statistically, averaged over a large set of queries, records
that are older relative to their published TTL are more
likely to be considered expired, but for a specific
individual query the results are much less deterministic.</t>
      <t>Thus, clients should not attach too much importance to the
absolute value of a record’s age relative to its declared TTL.
The age of a record is a valuable hint as to whether it should
be assumed to be still valid, but it is not a guarantee.
Data being younger than its TTL is not a guarantee that it is still correct,
and data being older than its TTL is not a guarantee that it is wrong.</t>
      <t>The asynchronous connection-racing mechanism known as Happy Eyeballs
<xref target="IETF72"/> <xref target="RFC6555"/> <xref target="RFC8305"/> <xref target="HEv3"/>
is a key technology that makes Optimistic DNS useful,
because it makes applications more robust in occasional
situations where they may briefly receive incorrect information
(<xref target="happy-eyeballs"/>).</t>
    </section>
    <section anchor="zeno">
      <name>The Preemptive Refresh Problem - Zeno’s Paradox</name>
      <t>One seemingly attractive approach to avoiding the delay spike
might be to take inspiration from DHCP <xref target="RFC2131"/> <xref target="RFC2132"/>,
and renew a record before it expires, instead of waiting until
after it is already expired before requesting an update.
DHCP typically renews an address lease when half of the lease
lifetime has elapsed, rather than waiting for the lease
to expire and then briefly losing the right to use that
IP address while a new request is processed.</t>
      <t>Unfortunately, because of the way DNS operates, the DHCP-inspired approach
of refreshing records in advance of their expiration does not work.</t>
      <t>Suppose a DNS stub resolver makes a request for a name
that is not currently in the recursive resolver’s cache.
Suppose that when the recursive resolver fetches the authoritative
record it has a TTL of 24 hours, which it returns to the stub resolver.</t>
      <t>If the stub resolver were to request the same record 12 hours later,
the recursive resolver will tell the stub resolver that the record
has a remaining TTL of 12 hours.</t>
      <t>If the stub resolver were to request the same record 6 hours after that,
the recursive resolver will tell the stub resolver that the record now
has a remaining TTL of 6 hours.</t>
      <t>Using this algorithm would result in an ever-accelerating query rate
as the remaining TTL continues to count down towards zero,
without the stub resolver learning anything new.</t>
      <t>Eventually, the record finally expires from the recursive resolver’s
cache, and the stub resolver then suffers a delay spike waiting
for the recursive resolver to fetch the authoritative record.</t>
      <t>Currently, recursive resolvers will continue to return a cached record
down to the last second of its lifetime. Even for a record that is the
subject of a large volume of queries, recursive resolvers will not take
the initiative of refreshing that record prior to its inevitable and
entirely predictable expiration. Instead, recursive resolvers will let
the record expire, and then suffer a delay spike on the very next query.</t>
      <t>With the current behavior of recursive resolvers, strictly
respecting a record’s TTL and avoiding predictable delay
spikes are incompatible goals. It is impossible to do both.</t>
    </section>
    <section anchor="enabling-technologies">
      <name>Enabling Technologies</name>
      <t>When an application receives an expired address and immediately begins
connecting to it, two things need to happen:</t>
      <ul spacing="normal">
        <li>
          <t>When the fresh answer arrives moments later, the application
needs a way to receive it -- which means the DNS API has to
support delivering asynchronous results as they arrive.</t>
        </li>
        <li>
          <t>If the expired address is found to be wrong,
the application needs to continue gracefully.</t>
        </li>
      </ul>
      <section anchor="async">
        <name>Asynchronous DNS Resolution</name>
        <t>Traditional synchronous DNS APIs typically block until the complete set of answers
is available.  The caller issues a query, waits, receives one set of results, and
the call is complete.  Optimistic DNS cannot function with this model since
there is no mechanism to deliver an expired answer now and
update it with newer answers shortly afterwards.</t>
        <t>Asynchronous DNS APIs support receiving multiple answers over time,
including updated answers that supersede earlier ones.
The operational model of asynchronous DNS resolution is
that it is a performance optimization over rapid polling.
If an application were to call an API like getaddrinfo()
as fast as it can in a tight loop, then the application
would always have the latest information available from the local
stub resolver, but it would be inefficient and wasteful of CPU time.
Most consecutive calls to getaddrinfo() would return unchanged information.
The guiding principle of an asynchronous DNS resolution API is
that it gives the application the exact same information as repeated
calls to the equivalent synchronous API, but more efficiently.
If a fresh new query would yield different results,
then the client’s asynchronous DNS operation <bcp14>MUST</bcp14> be given
asynchronous notifications to deliver the new set of results.
This avoids the temptation for clients to resort to polling,
in the belief that polling gives them better results
than trusting the asynchronous notification mechanism.
For efficiency, the application is notified via an asynchronous
notification only when the set of answers changes.
This is similar to the efficiency trade-offs present in other APIs,
where asynchronous notification is more efficient than polling.
For example, an application can repeatedly poll to find if
the content of a directory has changed, but using asynchronous
filesystem notifications gives the same effect more efficiently.</t>
        <t>This is the resolution model defined by Multicast DNS <xref target="RFC6762"/>
and is valuable for unicast DNS too.
Asynchronous DNS resolution is supported in
Apple’s networking APIs <xref target="ZC"/>,
and in other DNS stub resolver implementations like getdns <xref target="getdns"/>.</t>
        <t>This model naturally supports the incremental delivery that Optimistic DNS
requires.  Expired records arrive in the first callback, within
microseconds.  Fresh records from the network arrive in subsequent
callbacks, within milliseconds.  The application can act on the expired
answer immediately by opening a connection.  If the address has
changed, the application can start a new connection to the updated
address.  If the address is the same, the connection is already
established and the fresh answer serves as confirmation.</t>
      </section>
      <section anchor="happy-eyeballs">
        <name>Happy Eyeballs</name>
        <t>Optimistic DNS delivers DNS answers quickly, with the caveat that, on rare
occasions, some of those answers might be stale and incorrect, in which
case updated answers will be delivered as soon as they are available.
To make this optimistic approach viable, it <bcp14>MUST</bcp14> be coupled
with networking code that is designed to embrace this uncertainty,
and account for the fact that all data received from a network
is necessarily at least a little stale by the time it arrives,
and may subsequently be found to be incorrect.
Without Happy Eyeballs, a wrong expired address would mean a failed
connection and user frustration.</t>
        <t>Happy Eyeballs <xref target="IETF72"/> <xref target="RFC6555"/> <xref target="RFC8305"/> <xref target="HEv3"/>
defines algorithms for racing connection attempts across multiple
addresses and address families. When a client has several
candidate addresses for a destination, Happy Eyeballs staggers
connection attempts, in order of expected likelihood of success,
with short delays, and uses whichever connection succeeds first.</t>
        <t>The Happy Eyeballs mechanism pairs naturally with Optimistic DNS.
When using Happy Eyeballs, the networking code takes the set of
answers immediately available in the local cache and selects
the address it predicts is most likely to succeed.  If the prediction
is correct, which is the common case, the connection succeeds and
no additional traffic is generated.  The connection may succeed
before the fresh DNS answer from the network even arrives.</t>
        <t>In the rare cases where the first connection attempt does not
succeed within the expected network round-trip time, the TCP SYN
(or equivalent connection request packet) is retransmitted, and a
second connection attempt is immediately initiated to the next
address in order of preference.  The first connection attempt is
not abandoned when the second one starts -- its usual schedule of
retransmissions is still followed -- and the two attempts proceed
in parallel.  If the second connection attempt does not succeed
within the expected time, a third attempt is initiated, and so on.</t>
        <t>Running connection attempts in parallel rather than sequentially
prevents long stalls waiting for a connection to time out and fail
before the next attempt is started.  Staggering the start times by
the expected response time means that in the majority of cases only
the first connection attempt is needed, which avoids generating
unnecessary network traffic or extra load on servers.</t>
        <t>If new DNS results are received during this procedure, the list of
candidate addresses is updated accordingly for use in subsequent
connection requests.</t>
        <t>Using Optimistic DNS in conjunction with Happy Eyeballs means that, in
the common case, a connection to the correct server is made faster,
with no additional network traffic.  In the rare case when a server
address has actually changed, the cost is a small amount of wasted
network traffic while waiting for the DNS reply.  Once the reply
arrives, Happy Eyeballs can immediately connect to the correct server,
with no additional delay beyond what would have been experienced had
the application just waited for the DNS reply in the first place.
The cost of waiting for a fresh answer that simply confirms what the
cache already had is a guaranteed delay of the full network round-trip
time on every cache expiry.  For most applications, the expected value
of the optimistic approach is clearly positive.</t>
        <t>After the Happy Eyeballs algorithm has succeeded in
establishing a connection to an acceptable destination
(determined by verifying the TLS certificate, or otherwise,
as appropriate) the asynchronous DNS operation <bcp14>MUST</bcp14> be stopped.
Once an application has established a successful connection, it
should make its future decisions based on the viability of that
connection, rather than any subsequent information to the contrary
received from asynchronous DNS.
Cancelling the asynchronous DNS operation prematurely, before a successful
connection has been established, would prevent the reception of future updated
answers, which would defeat the purpose of Optimistic DNS, which is to deliver
available answers quickly while still ensuring eventual correctness. Failure to cancel
after an acceptable connection has been made would be a waste of resources, and
in the extreme case would constitute a resource leak on the client device.</t>
        <t>Applications using Optimistic DNS and Happy Eyeballs <bcp14>SHOULD</bcp14> follow
appropriate security practices (<xref target="security-considerations"/>) to ensure
that they are connecting to the intended host or service on the network.</t>
      </section>
      <section anchor="combined-effect">
        <name>Combined Effect</name>
        <t>Asynchronous DNS resolution makes Optimistic DNS <em>possible</em>.  It provides the
delivery mechanism for multiple waves of results.  Happy Eyeballs makes Optimistic
DNS <em>safe</em>.  It ensures that acting on a wrong expired address is not fatal to
the overall connection attempt.  Together, the application starts connecting
instantly with provisional cached addresses, the connection race handles any
staleness gracefully, and the fresh DNS answer arrives as an update confirming
or correcting the initial result.</t>
      </section>
    </section>
    <section anchor="optimistic-dns-overview">
      <name>Optimistic DNS Overview</name>
      <t>Building on the asynchronous resolution model and connection racing described
above, Optimistic DNS introduces a specific modification to stub resolver
behavior.  When an application that has opted in issues a DNS query and the
stub resolver's cache contains expired records matching that query, the resolver
performs two actions in parallel:</t>
      <ol spacing="normal" type="1"><li>
          <t>It immediately returns the expired cached records to the application.</t>
        </li>
        <li>
          <t>It issues a standard DNS query on the network to obtain fresh records.</t>
        </li>
      </ol>
      <t>As fresh answers arrive from the network, the resolver delivers them to
the application through the asynchronous callback mechanism.
<xref target="unchanged-flow"/> shows both waves for a query where www.example.com
has an expired A record (203.0.113.34) in the cache, and the fresh answer
returns the same address:</t>
      <table anchor="unchanged-flow">
        <name>Optimistic DNS when data is unchanged</name>
        <thead>
          <tr>
            <th align="left">Time</th>
            <th align="left">Event</th>
            <th align="left">Notes</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">T+0us</td>
            <td align="left">App queries www.example.com</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="left">T+5us</td>
            <td align="left">Callback: 203.0.113.34</td>
            <td align="left">Expired</td>
          </tr>
          <tr>
            <td align="left">T+120ms</td>
            <td align="left">(data unchanged, no callback)</td>
            <td align="left">Fresh Answer Same</td>
          </tr>
        </tbody>
      </table>
      <t>When a fresh positive answer matches the previous
Optimistic Positive Answer, no second callback is delivered.
The application that began connecting at T+5us saved 120
milliseconds compared to waiting for the fresh answer.</t>
      <t>When the data has changed (for example, if the server moved to a new address),
or a fresh negative answer confirms a previous Optimistic Negative Answer,
the application is notified.
Sending confirmations of Optimistic Negative Answers is
necessary because the client may be waiting for that negative
answer confirmation before proceeding with its next steps.</t>
      <table anchor="changed-flow">
        <name>Optimistic DNS when data has changed</name>
        <thead>
          <tr>
            <th align="left">Time</th>
            <th align="left">Event</th>
            <th align="left">Notes</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">T+0us</td>
            <td align="left">App queries www.example.com</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="left">T+5us</td>
            <td align="left">Callback: 203.0.113.34</td>
            <td align="left">Expired</td>
          </tr>
          <tr>
            <td align="left">T+120ms</td>
            <td align="left">Callback: 198.51.100.42</td>
            <td align="left">Fresh Answer Different</td>
          </tr>
        </tbody>
      </table>
      <t>In <xref target="changed-flow"/> the expired answer contained a stale and incorrect address.
An application that connected to 203.0.113.34 may find that
the connection fails with an ICMP Host Unreachable error,
a TCP RST, a TLS failure, or other unexpected content.
But the fresh answer arrives 120 milliseconds later,
and the application can retry with the correct address.
The total time to a successful connection is still only about 120 milliseconds
-- roughly the same as it would have been without Optimistic DNS.</t>
      <t>Optimistic DNS never makes things substantially worse for the application.  In the common
case where the data has not changed, it makes things dramatically faster.  In
the uncommon case where the data has changed and the server is no longer
available at the previous address, the cost is a small amount of wasted traffic
attempting to reach the previous address.</t>
      <t>Optimistic DNS is an opt-in mechanism.  Applications that do not request it
receive conventional stub resolver behavior: expired records are ignored,
and only fresh network answers are returned.  This ensures backward
compatibility and allows applications to choose the tradeoff that suits
their needs.
Applications that do not support both Happy Eyeballs
and appropriate application-layer security
<bcp14>SHOULD NOT</bcp14> use Optimistic DNS.
These applications are very dependent on always getting
the right answers from DNS every time, and do not recover
gracefully when delivered stale data by Optimistic DNS.</t>
    </section>
    <section anchor="implementation-details">
      <name>Implementation Details</name>
      <section anchor="query-initiation">
        <name>Query Initiation</name>
        <t>To use Optimistic DNS, an application signals its willingness to receive
expired answers when it issues a DNS query.  This signaling is a local
matter between the application and the stub resolver.</t>
        <t>One possible mechanism is for the stub resolver API to provide a flag that the
application includes with its query.  Setting this flag indicates that the
application is prepared to handle expired answers and will treat them
appropriately.</t>
      </section>
      <section anchor="cache-lookup-with-expired-records">
        <name>Cache Lookup with Expired Records</name>
        <t>When the stub resolver processes a query, it iterates through its cache looking
for records that match the query's name, type, and class.  For each matching
record, it determines whether the record has expired by comparing the time
elapsed since the record was received against the record's original TTL.</t>
        <t>If unexpired records are found in the cache, they are returned to the
application as a normal cache hit and no network query is needed.</t>
        <t>If a matching cache entry (positive or negative) has expired, then
this Optimistic Answer is delivered to the Optimistic DNS client.</t>
        <t>Optimistic Answers are subject to
concurrent verification (<xref target="parallel-network-query"/>)
and may subsequently result in an asynchronous update to
the client if newer information is discovered from the network.</t>
        <t>Optimistic Positive Answers indicate the stub resolver’s
optimistic best guess of the answer.</t>
        <t>Optimistic Negative Answers
(resulting from a previous NXDOMAIN or NODATA response)
indicate the stub resolver’s best guess that the
requested record probably still doesn’t exist.
Optimistic Negative Answers <bcp14>SHOULD NOT</bcp14> be used to generate
error messages to the user.
Such error messages <bcp14>SHOULD</bcp14> only be generated after a network
query has confirmed that the named record still does not exist.
Optimistic Negative Answers can be useful in certain
search scenarios (like applying DNS domain name search lists)
where the nonexistence of a certain record is a prerequisite
for using some other record, and the tentatively presumed
nonexistence of a certain record can serve as a useful hint that
the client should begin work speculatively looking up other names
that may be required by the search algorithm (<xref target="search"/>).</t>
      </section>
      <section anchor="parallel-network-query">
        <name>Parallel Network Query</name>
        <t>If no unexpired records are found, the stub resolver <bcp14>MUST</bcp14> issue a standard DNS
query on the network.  This query proceeds through the normal resolution path:
contacting configured recursive resolvers, following CNAME chains, and so on.</t>
        <t>Fresh answers from the network are delivered to the application through
an asynchronous callback mechanism.  The application’s networking code <bcp14>MUST</bcp14>
use these fresh answers to update the list of answers it received earlier.</t>
      </section>
      <section anchor="cache-management">
        <name>Cache Management</name>
        <t>Storing expired records forever could consume an unbounded amount of memory,
and return egregiously old records.</t>
        <t>For this reason, stub resolvers <bcp14>SHOULD NOT</bcp14> store records
for more than one week after the TTL has expired.</t>
        <t>The time limit of one week is selected so that a user could
go home from work on a Thursday night, take a four-day
long-weekend break, return to work the next Tuesday, and still
benefit from using expired cached records for faster performance.
Storing expired records for less time
risks eliminating the benefit of Optimistic DNS in many cases;
storing expired records for more time
is currently considered to offer little additional benefit, and using
excessively old data could lead to unexpected undesirable consequences.</t>
      </section>
      <section anchor="cname-handling">
        <name>CNAME Handling</name>
        <t>CNAME records introduce a complication for Optimistic DNS.
When a DNS query encounters a CNAME record, the resolver must follow
one or more records in a CNAME chain to find the ultimate answer.
If a CNAME record itself is expired, it may no longer be correct.</t>
        <t>Consider the following example.  An application queries for
www.example.com, which has a CNAME record pointing to cdn.example.net.
Both records are in the cache but expired:</t>
        <artwork><![CDATA[
  www.example.com.   CNAME  cdn.example.net.  (expired)
  cdn.example.net.   A      198.51.100.42     (expired)
]]></artwork>
        <t>If the resolver follows the expired CNAME to cdn.example.net and returns
the expired A record, the application receives a result.  But if the CNAME
has changed (www.example.com now points to cdn2.example.net instead), the
resolver has followed a stale chain and returned a record for the wrong
name.</t>
        <t>To handle this correctly, when the stub resolver encounters CNAME
records during optimistic resolution, it takes the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>If the record is expired, and a background query is not already in
progress for this record name, then a background query is initiated,
as for any other expired record.</t>
          </li>
          <li>
            <t>The CNAME referral is followed.
(If the target of the CNAME referral is another CNAME record,
then this process repeats until a non-CNAME answer is found.)</t>
          </li>
          <li>
            <t>If, at any time while an asynchronous DNS query is active,
the record data for any of the names in the CNAME chain changes,
then the query is re-evaluated starting from the original query name,
as if it were a fresh query.
This maintains the operational model of asynchronous DNS resolution,
that it is simply a more efficient equivalent to repeated polling.
If a fresh new query would yield different results, then the client’s
asynchronous DNS operation receives asynchronous notifications
to deliver the new set of results, giving it the exact same
information that a fresh query at that time would yield.</t>
          </li>
        </ol>
        <t>This rewind-and-restart approach ensures that the application continues
to receive a complete, consistent answer for its query, even as DNS record
changes may mean that the CNAME chain for a given name changes over time.</t>
      </section>
    </section>
    <section anchor="interaction-with-other-dns-features">
      <name>Interaction with Other DNS Features</name>
      <section anchor="uncacheable-records">
        <name>Uncacheable Records</name>
        <t>The DNS specifications require that DNS records
with a TTL of zero <bcp14>MUST NOT</bcp14> be cached <xref target="RFC1035"/>.
This document does not change that requirement;
subsequent queries for these records always result in a new network request.</t>
      </section>
      <section anchor="dnssec">
        <name>DNSSEC</name>
        <t>Optimistic DNS extends the cache lifetime for DNS records,
as signaled by the TTL values.</t>
        <t>Optimistic DNS does not extend the validity periods of cryptographic signatures.</t>
        <t>Optimistic DNS does not interpret the content of any records,
including cryptographic records like RRSIG,
and will deliver DNS records after their cache lifetime has expired.
Clients are responsible for checking and respecting
the validity periods of cryptographic signatures.</t>
      </section>
      <section anchor="search">
        <name>DNS Domain Name Search Lists</name>
        <t>Most DNS stub resolvers support domain name search lists <xref target="RFC1034"/>.
Domain name search lists can be configured manually, or learned
automatically from the network using DHCP <xref target="RFC3397"/> <xref target="RFC3646"/>
or IPv6 Router Advertisements <xref target="RFC8106"/>.</t>
        <t>Applying domain name search lists can be thought
of as an iterative search algorithm that operates
at a layer above the stub resolver’s query mechanism.
Each query made in the course of executing the domain
name search algorithm is a normal query for a fully
qualified domain name, and is subject to all the
usual procedures like following CNAME referrals.
Optimistic DNS can be used to speed up the
process of handling domain name search lists.</t>
        <t>When a client issues a query for a name that is not
considered fully qualified, the stub resolver applies each
of the names from the domain name search list, in order,
and uses the first name that returns a positive answer.
The user expectation is that the order of the
domain name search list will be respected strictly.
This means that results from a later name in the search list
cannot be used until negative answers have been confirmed
for all the earlier entries in the search list.
The network queries do not need to be performed sequentially,
one at a time (intelligently performing queries in parallel
can result in a faster result for the user),
but the final determination of which name to use
cannot be made until all the necessary
Optimistic Negative Answers have been confirmed.</t>
        <t>For this reason, Optimistic DNS can use
Optimistic Negative Answers as a performance
hint to tell it that it should start a parallel query
for the next name in the search list, but the decision
to use a particular answer needs to wait until all
earlier Optimistic Negative Answers have been confirmed.</t>
        <t>If a stub resolver were to issue parallel queries
for all names in the domain name search list,
this could result in a lot of unnecessary network traffic,
particularly for users with many names in their search lists.
If a stub resolver were to issue its queries sequentially,
this could result in poor performance for the user.
Optimistic DNS provides a good balance between these two extremes.
Optimistic DNS allows the stub resolver to issue parallel
queries for all the names it reasonably expects it will
need to check, without generating wasteful traffic for
names near the end of the domain name search list that
come after a name that is believed to have a positive answer.
Optimistic DNS rapidly performs all the queries it needs
to do to confirm record nonexistence, and then returns
the first positive answer, whether fresh or expired.
If an expired positive answer turns out to be wrong when
confirmed with a query on the network, then the newly
updated answer is delivered asynchronously to the client.
If the newly updated answer is negative, then the
domain name search algorithm resumes, continuing with
the next untried name in the list, and continues until
some positive answer, if any, is returned.</t>
      </section>
      <section anchor="encrypted-dns-transports">
        <name>Encrypted DNS Transports</name>
        <t>Optimistic DNS is transport-agnostic.  It operates entirely within the stub
resolver's cache layer, which sits above the transport layer.  Whether the
stub resolver communicates with recursive resolvers using classic DNS over
UDP/TCP <xref target="RFC1035"/>, DNS over TLS (DoT) <xref target="RFC7858"/>, DNS over HTTPS (DoH)
<xref target="RFC8484"/>, or DNS over QUIC (DoQ) <xref target="RFC9250"/>, the Optimistic DNS
mechanism functions identically.</t>
      </section>
      <section anchor="serving-stale-data-at-recursive-resolvers">
        <name>Serving Stale Data at Recursive Resolvers</name>
        <t>Serving Stale Data to Improve DNS Resiliency <xref target="RFC8767"/> describes a
mechanism for recursive resolvers to serve stale cached data when they are
unable to refresh it from authoritative servers.  Optimistic DNS and
RFC 8767 address different levels of the DNS resolution chain:</t>
        <dl>
          <dt><em>Optimistic DNS.</em></dt>
          <dd>
            <t>Operates at the stub resolver on the end-user's device.  Serves expired
cached data proactively, while simultaneously initiating a network query.
The primary goal is delay reduction -- eliminating the TTL expiry spike.</t>
          </dd>
          <dt><em>RFC 8767.</em></dt>
          <dd>
            <t>Operates at the recursive resolver.
Serves stale data when upstream authoritative servers are unreachable.
The primary goal is resiliency -- maintaining DNS service during outages.</t>
          </dd>
        </dl>
        <t>The two mechanisms are complementary and can be deployed simultaneously.
When both are active, the resolution chain has two layers of staleness
tolerance:</t>
        <ol spacing="normal" type="1"><li>
            <t>The stub resolver returns expired records optimistically, eliminating
client-perceived delay.</t>
          </li>
          <li>
            <t>If the recursive resolver's cache has also expired and the authoritative
server is unreachable, the recursive resolver can serve its own stale
data rather than returning SERVFAIL.</t>
          </li>
        </ol>
        <t>Optimistic DNS delivers the data it has immediately, while
also delivering updated data the moment it becomes available. It gives
the application the benefit of timely data, which could occasionally be
wrong, without depriving the application of also receiving the exact
data it would have received with a traditional non-optimistic DNS query,
at the time it would have received it.</t>
        <t>In contrast, RFC 8767 serves stale data without any provision for a
future asynchronous notification when the desired data becomes available.</t>
        <t>Optimistic DNS is not applicable to recursive resolvers because
Optimistic DNS relies on the ability to deliver its best available
information immediately, and then asynchronously update that
information promptly if newer information becomes available.
Stub resolvers that provide Asynchronous DNS resolution APIs to client
applications are able to deliver these essential asynchronous updates.
Recursive resolvers do not currently have any good way
to issue asynchronous updates to correct an earlier
answer that is subsequently discovered to be wrong.
In principle, stub resolvers could use DNS Push Notifications <xref target="RFC8765"/>
to receive asynchronous updates from a recursive resolver, but
in practice this might place too much load on recursive resolvers.
The current recommended solution for recursive resolvers returning
stale data is that the TTL is reported as being 30 seconds <xref target="RFC8767"/>.
This has the effect of instructing stub resolvers to poll
the recursive resolver once every 30 seconds
to ascertain if newer data has become available.</t>
      </section>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>A consequence of Optimistic DNS is that clients may continue
to use an old IP address longer than expected.
There are other reasons that stale addresses may persist and
cause clients to use an old IP address longer than expected,
but Optimistic DNS adds a new way that this can happen.</t>
      <t>Suppose a server operator has a DNS address record for
website.example.com with a TTL of 24 hours, and the operator
updates that address record to point to a new IP address.
Depending on when that address record was cached at various recursive
resolvers around the world, the operator may expect to see a roughly
linear decrease in new incoming connection requests to the old
IP address in the 24 hours after the address record was updated, ending
with no new connection requests being received after 24 hours have passed.
In reality there are various reasons that some clients may still attempt
to use a stale address, but in practice there should be very few
incoming connection requests to the old IP address after 24 hours.
The server operator has to keep the website available at the old address
for at least 24 hours, to accommodate clients using the old address.</t>
      <t>Optimistic DNS changes this assumption.
Using the same 24-hour TTL, the decline in the incoming connection
rate will not be quite as rapid, and incoming connection requests
to the old IP address may continue to be received for a week
after the TTL has expired (<xref target="cache-management"/>).</t>
      <t>However, Optimistic DNS does not mean that the server operator
is forced to maintain the availability of their website
at the old IP address for a week after the address change.
Because clients using the expired IP address are using Optimistic DNS,
they have the benefit of asynchronous DNS and Happy Eyeballs,
which means that they will promptly switch to the new IP address,
and the brief failed attempt to use the old IP address is inconsequential.</t>
      <t>If a new IP address is established for the server but existing connections to
the old IP address continue to work, then there is no reason for clients to
abandon their working connections.  The decision about if and when to migrate
existing clients to the new IP address is in the hands of the server operator.
The server operator might choose to allow those connections to remain.  If the
server operator wishes to have clients reconnect using the new IP address, then
that could be achieved using an in-band message on the existing connection, or
by simply shutting down the server at the old IP address, so that clients
re-establish their connections using the new IP address.</t>
      <t>Moreover, Optimistic DNS gives server operators
the freedom to use shorter DNS TTLs safely.
One of the reasons why server operators may choose
to use long TTLs is to avoid their users experiencing
the periodic delay spikes caused by short TTLs.
When Optimistic DNS eliminates the concerns about periodic delay spikes,
it becomes reasonable to use shorter DNS TTLs.
With widespread use of Optimistic DNS, server operators
are free to use much shorter DNS TTLs, like five minutes.
Optimistic DNS clients will suffer no periodic delay spikes
because of the short DNS TTLs, and when the time comes
that it is necessary to update the server address for
website.example.com, the transition to the new server
can be completed in minutes, rather than hours.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Optimistic DNS introduces a tradeoff between speed and freshness.
Applications that use expired answers must be prepared for those answers to be
occasionally incorrect.
Applications using Optimistic DNS <bcp14>SHOULD</bcp14> employ application-layer
security (e.g., using TLS or QUIC) when connecting to addresses obtained from expired answers,
to detect cases where the address has been reassigned.</t>
      <t>Networking always entails a degree of uncertainty
-- for example, packets may be intercepted in transit and
not reach their intended destination -- and for correct
operation, secure applications have to guard against this.
Optimistic DNS adds a new way that packets may not reach their
intended destination, but does not fundamentally alter the
importance of application-layer security.</t>
      <dl>
        <dt><em>IP Address Reuse.</em></dt>
        <dd>
          <t>When a DNS record expires, the IP address it contained may no longer be
associated with the previous host or service.
For HTTPS connections, TLS certificate
validation will detect this mismatch and prevent data from being sent to
the wrong party.  For unencrypted protocols, there is a risk of
connecting to an unintended server.</t>
        </dd>
        <dt><em>Poisoning Amplification.</em></dt>
        <dd>
          <t>If an attacker successfully poisons a cache entry, Optimistic DNS could
extend the lifetime of the poisoned record beyond its original TTL.
However, the record will be purged after the retention period expires.
Moreover, the parallel network query will obtain and deliver the correct
answer, giving the application an opportunity to detect the discrepancy.</t>
        </dd>
        <dt><em>Expired Records Retention Period.</em></dt>
        <dd>
          <t>The recommended maximum retention period of one week (<xref target="cache-management"/>)
bounds the maximum time an expired record can be served.
Implementations <bcp14>MAY</bcp14> allow this period to be configured.
Shorter periods reduce the window of exposure to stale data but also
reduce the effectiveness of Optimistic DNS for infrequently-accessed names.</t>
        </dd>
      </dl>
    </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="HEv3">
          <front>
            <title>Happy Eyeballs Version 3: Better Connectivity Using Concurrency</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Nidhi Jaju" initials="N." surname="Jaju">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Kenichi Ishibashi" initials="K." surname="Ishibashi">
              <organization>Google LLC</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   Many communication protocols operating over the modern Internet use
   hostnames.  These often resolve to multiple IP addresses, each of
   which may have different performance and connectivity
   characteristics.  Since specific addresses or address families (IPv4
   or IPv6) may be blocked, broken, or sub-optimal on a network, clients
   that attempt multiple connections in parallel have a chance of
   establishing a connection more quickly.  This document specifies
   requirements for algorithms that reduce this user-visible delay and
   provides an example algorithm, referred to as "Happy Eyeballs".  This
   document updates the algorithm description in RFC 8305.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-happy-happyeyeballs-v3-03"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC1035">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
        <reference anchor="RFC1034">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IETF72" target="https://www.stuartcheshire.org/IETF72/">
          <front>
            <title>Stuart Cheshire on IPv6 Adoption</title>
            <author initials="S." surname="Cheshire">
              <organization/>
            </author>
            <date year="2008"/>
          </front>
          <annotation>This presentation introduced the concept of asynchronous concurrent connection racing, later known as Happy Eyeballs.</annotation>
        </reference>
        <reference anchor="getdns" target="https://getdnsapi.net/">
          <front>
            <title>Welcome to getdns!</title>
            <author>
              <organization>NLnet Labs, Sinodun and No Mountain Software</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ZC">
          <front>
            <title>Zero Configuration Networking: The Definitive Guide</title>
            <author initials="S." surname="Cheshire" fullname="Stuart Cheshire">
              <organization/>
            </author>
            <author initials="D. H." surname="Steinberg" fullname="Daniel H. Steinberg">
              <organization/>
            </author>
            <date year="2005" month="December"/>
          </front>
          <seriesInfo name="ISBN" value="978-0-596-10100-5"/>
          <refcontent>O'Reilly Media</refcontent>
        </reference>
        <reference anchor="RFC8767">
          <front>
            <title>Serving Stale Data to Improve DNS Resiliency</title>
            <author fullname="D. Lawrence" initials="D." surname="Lawrence"/>
            <author fullname="W. Kumari" initials="W." surname="Kumari"/>
            <author fullname="P. Sood" initials="P." surname="Sood"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>This document defines a method (serve-stale) for recursive resolvers to use stale DNS data to avoid outages when authoritative nameservers cannot be reached to refresh expired data. One of the motivations for serve-stale is to make the DNS more resilient to DoS attacks and thereby make them less attractive as an attack vector. This document updates the definitions of TTL from RFCs 1034 and 1035 so that data can be kept in the cache beyond the TTL expiry; it also updates RFC 2181 by interpreting values with the high-order bit set as being positive, rather than 0, and suggests a cap of 7 days.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8767"/>
          <seriesInfo name="DOI" value="10.17487/RFC8767"/>
        </reference>
        <reference anchor="RFC6555">
          <front>
            <title>Happy Eyeballs: Success with Dual-Stack Hosts</title>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="A. Yourtchenko" initials="A." surname="Yourtchenko"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>When a server's IPv4 path and protocol are working, but the server's IPv6 path and protocol are not working, a dual-stack client application experiences significant connection delay compared to an IPv4-only client. This is undesirable because it causes the dual- stack client to have a worse user experience. This document specifies requirements for algorithms that reduce this user-visible delay and provides an algorithm. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6555"/>
          <seriesInfo name="DOI" value="10.17487/RFC6555"/>
        </reference>
        <reference anchor="RFC8305">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <reference anchor="RFC2131">
          <front>
            <title>Dynamic Host Configuration Protocol</title>
            <author fullname="R. Droms" initials="R." surname="Droms"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>The Dynamic Host Configuration Protocol (DHCP) provides a framework for passing configuration information to hosts on a TCPIP network. DHCP is based on the Bootstrap Protocol (BOOTP), adding the capability of automatic allocation of reusable network addresses and additional configuration options. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2131"/>
          <seriesInfo name="DOI" value="10.17487/RFC2131"/>
        </reference>
        <reference anchor="RFC2132">
          <front>
            <title>DHCP Options and BOOTP Vendor Extensions</title>
            <author fullname="S. Alexander" initials="S." surname="Alexander"/>
            <author fullname="R. Droms" initials="R." surname="Droms"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>This document specifies the current set of DHCP options. Future options will be specified in separate RFCs. The current list of valid options is also available in ftp://ftp.isi.edu/in-notes/iana/assignments. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2132"/>
          <seriesInfo name="DOI" value="10.17487/RFC2132"/>
        </reference>
        <reference anchor="RFC6762">
          <front>
            <title>Multicast DNS</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important. In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t>
              <t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server. In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t>
              <t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6762"/>
          <seriesInfo name="DOI" value="10.17487/RFC6762"/>
        </reference>
        <reference anchor="RFC3397">
          <front>
            <title>Dynamic Host Configuration Protocol (DHCP) Domain Search Option</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="November" year="2002"/>
            <abstract>
              <t>This document defines a new DHCP option which is passed from the DHCP
Server to the DHCP Client to specify the domain search list used when
resolving hostnames using DNS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3397"/>
          <seriesInfo name="DOI" value="10.17487/RFC3397"/>
        </reference>
        <reference anchor="RFC3646">
          <front>
            <title>DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)</title>
            <author fullname="R. Droms" initials="R." role="editor" surname="Droms"/>
            <date month="December" year="2003"/>
            <abstract>
              <t>This document describes Dynamic Host Configuration Protocol for IPv6 (DHCPv6) options for passing a list of available DNS recursive name servers and a domain search list to a client.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3646"/>
          <seriesInfo name="DOI" value="10.17487/RFC3646"/>
        </reference>
        <reference anchor="RFC8106">
          <front>
            <title>IPv6 Router Advertisement Options for DNS Configuration</title>
            <author fullname="J. Jeong" initials="J." surname="Jeong"/>
            <author fullname="S. Park" initials="S." surname="Park"/>
            <author fullname="L. Beloeil" initials="L." surname="Beloeil"/>
            <author fullname="S. Madanapalli" initials="S." surname="Madanapalli"/>
            <date month="March" year="2017"/>
            <abstract>
              <t>This document specifies IPv6 Router Advertisement (RA) options (called "DNS RA options") to allow IPv6 routers to advertise a list of DNS Recursive Server Addresses and a DNS Search List to IPv6 hosts.</t>
              <t>This document, which obsoletes RFC 6106, defines a higher default value of the lifetime of the DNS RA options to reduce the likelihood of expiry of the options on links with a relatively high rate of packet loss.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8106"/>
          <seriesInfo name="DOI" value="10.17487/RFC8106"/>
        </reference>
        <reference anchor="RFC7858">
          <front>
            <title>Specification for DNS over Transport Layer Security (TLS)</title>
            <author fullname="Z. Hu" initials="Z." surname="Hu"/>
            <author fullname="L. Zhu" initials="L." surname="Zhu"/>
            <author fullname="J. Heidemann" initials="J." surname="Heidemann"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <author fullname="D. Wessels" initials="D." surname="Wessels"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="May" year="2016"/>
            <abstract>
              <t>This document describes the use of Transport Layer Security (TLS) to provide privacy for DNS. Encryption provided by TLS eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network, such as discussed in RFC 7626. In addition, this document specifies two usage profiles for DNS over TLS and provides advice on performance considerations to minimize overhead from using TCP and TLS with DNS.</t>
              <t>This document focuses on securing stub-to-recursive traffic, as per the charter of the DPRIVE Working Group. It does not prevent future applications of the protocol to recursive-to-authoritative traffic.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7858"/>
          <seriesInfo name="DOI" value="10.17487/RFC7858"/>
        </reference>
        <reference anchor="RFC8484">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS. Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
        <reference anchor="RFC9250">
          <front>
            <title>DNS over Dedicated QUIC Connections</title>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="S. Dickinson" initials="S." surname="Dickinson"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <date month="May" year="2022"/>
            <abstract>
              <t>This document describes the use of QUIC to provide transport confidentiality for DNS. The encryption provided by QUIC has similar properties to those provided by TLS, while QUIC transport eliminates the head-of-line blocking issues inherent with TCP and provides more efficient packet-loss recovery than UDP. DNS over QUIC (DoQ) has privacy properties similar to DNS over TLS (DoT) specified in RFC 7858, and latency characteristics similar to classic DNS over UDP. This specification describes the use of DoQ as a general-purpose transport for DNS and includes the use of DoQ for stub to recursive, recursive to authoritative, and zone transfer scenarios.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9250"/>
          <seriesInfo name="DOI" value="10.17487/RFC9250"/>
        </reference>
        <reference anchor="RFC8765">
          <front>
            <title>DNS Push Notifications</title>
            <author fullname="T. Pusateri" initials="T." surname="Pusateri"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>The Domain Name System (DNS) was designed to return matching records efficiently for queries for data that are relatively static. When those records change frequently, DNS is still efficient at returning the updated results when polled, as long as the polling rate is not too high. But, there exists no mechanism for a client to be asynchronously notified when these changes occur. This document defines a mechanism for a client to be notified of such changes to DNS records, called DNS Push Notifications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8765"/>
          <seriesInfo name="DOI" value="10.17487/RFC8765"/>
        </reference>
      </references>
    </references>
    <?line 1040?>

<section anchor="deployment-history">
      <name>Deployment History</name>
      <section anchor="mdnsresponder">
        <name>Optimistic DNS in mDNSResponder</name>
        <t>The mDNSResponder project is an open-source system stub resolver, and runs on
macOS, iOS, tvOS, watchOS, Microsoft Windows, Android, Linux, and other
platforms.  This section describes its concrete implementation of the Optimistic
DNS mechanism described in this document.</t>
        <t>Optimistic DNS in Apple’s mDNSResponder code was first shipped enabled by
default in macOS 10.14 (Mojave) and iOS 12 in September 2018.  It has been
active on all Apple platforms since that release, serving as the default stub
resolver behavior for all applications that use Apple’s recommended networking
APIs.</t>
        <t>Prior to implementing Optimistic DNS, the mDNSResponder code addressed the
Zeno’s paradox problem (<xref target="zeno"/>) by implementing a modest form of DNS TTL
stretching.  The mDNSResponder code stretches TTLs by 25%, plus two seconds to
account for minor clock variations.  This results in the situation where, when
the age of the record as viewed by the stub resolver reaches 80% of its
stretched TTL, the actual TTL of the record as viewed by the recursive resolver
has expired.</t>
        <t>If a client performs a new DNS query for a record within the time window
of 80-100% of the stretched TTL, then the mDNSResponder stub resolver
code will return the available answer to the client immediately,
while in parallel sending a query to the recursive resolver.</t>
        <t>In addition, if an asynchronous query is active on the client
at the time the record age passes 80% of its stretched TTL,
then the mDNSResponder stub resolver code will send a DNS query
to the recursive resolver to fetch fresh data, and will update
the client with fresh information if new data is received.</t>
        <t>This DNS query to the recursive resolver happens after the
recursive resolver’s copy of the record has expired, causing the
recursive resolver to fetch a new fresh copy of the authoritative record,
but because available answers are delivered to DNS clients immediately,
DNS clients do not experience a delay spike while
waiting for the recursive resolver to refresh the record.
Thus, traditional DNS queries using the mDNSResponder stub resolver
may receive answers that are up to 25% beyond their original lifetime.</t>
        <t>The development of Happy Eyeballs in 2008 <xref target="IETF72"/> <xref target="RFC6555"/> <xref target="RFC8305"/>
          <xref target="HEv3"/> made it feasible to increase effective record lifetimes beyond a modest
extension of just 25%, and this new capability is what made Optimistic DNS
possible.</t>
        <section anchor="signaling">
          <name>Signaling</name>
          <t>This document describes query initiation as a local signaling matter
between the application and the stub resolver. The mDNSResponder code implements
this through the following API flags:</t>
          <dl>
            <dt><em>kDNSServiceFlagsAllowExpiredAnswers.</em></dt>
            <dd>
              <t>Set by the application when issuing a query to request delivery
of expired cached records.</t>
            </dd>
            <dt><em>kDNSServiceFlagsExpiredAnswer.</em></dt>
            <dd>
              <t>Set by the resolver on individual answer callbacks to indicate that the
record being returned is expired.
In the case of Optimistic Negative Answers, the flag is a useful
hint to the client about how much trust it should place in this answer.
An expired Optimistic Negative Answer should be quickly updated with
a fresh confirmation of the negative answer, or a new positive answer.
In the case of Optimistic Positive Answers, the flag has little
significance, since the application verifies the validity of
positive answers by attempting communication with those addresses.
Developers should take care in how they interpret this answer property
because, as mentioned earlier, the notion of record expiry is subjective,
and this flag is easily misunderstood and misused by developers who
think it carries more significance than it really does.</t>
            </dd>
            <dt><em>kDNSServiceFlagsAnsweredFromCache.</em></dt>
            <dd>
              <t>Set by the resolver to indicate that the record was served from the
local cache rather than from a network response.  Set regardless of
whether the record is expired, allowing the application to distinguish
cached answers (immediate) from network answers (delayed).
Providing an equivalent indication in other implementations is not recommended,
because this flag is easily misunderstood and misused by developers who
think it carries more significance than it really does.
If two clients happen to query for the same domain name at almost
exactly the same time then one will be told that the answer
came from the cache and the other will be told that it did not.
Which client gets told which is effectively a coin toss,
and usually has little significance.
Revealing whether an answer was served from the cache
also has privacy implications.
A rogue application could issue queries for a large
number of popular domain names, and from the replies
indicating which domain names were already in the local
cache and which were not, the rogue application could infer
a list of which services this user has recently accessed.</t>
            </dd>
          </dl>
        </section>
        <section anchor="record-immortalization">
          <name>Record Lifecycle</name>
          <t>The main cache lookup operation requires that expired records remain
in the cache so that they are available to serve optimistically.
Conceptually, the stub resolver code saves all records for up to seven days.
Practically, the stub resolver code may want to limit its memory usage.
The mDNSResponder code approaches this with a three-state
record lifecycle:</t>
          <dl>
            <dt><em>Mortal (default).</em></dt>
            <dd>
              <t>The normal cache state for a record retrieved to
answer a traditional (not Optimistic DNS) query.
If subsequently queried by an Optimistic DNS
operation, this record gets promoted to immortal.
Mortal records may be refreshed in the course
of normal operation,
though because of Zeno’s paradox (<xref target="zeno"/>)
such refreshes are likely to be successful only for
records in the final 20% of their stretched TTL lifetime.
When the (stretched) TTL of a mortal record expires
the record is eligible for immediate removal.</t>
            </dd>
            <dt><em>Immortal.</em></dt>
            <dd>
              <t>A record marked to survive past its (stretched) TTL expiry.
This is the initial cache state for a record retrieved to
answer an Optimistic DNS query.
In addition, promotion from mortal to immortal occurs when a cached
record is used to answer a query from an application that has opted
in to Optimistic DNS.
(The logic is that if an application has made an Optimistic DNS
query for this DNS name, that is a hint that there may be
more such Optimistic DNS queries in the future.
If there has not been even one single Optimistic DNS query
for this DNS name, then that is a sign that whatever applications
are resolving this DNS name do not yet use Optimistic DNS,
so saving these records for a long time would be a waste of memory.)
Successful subsequent queries for immortal records
will refresh their lifetime, as it is with mortal records.
When the (stretched) TTL of an immortal record expires
the record becomes a ghost record.</t>
            </dd>
            <dt><em>Ghost.</em></dt>
            <dd>
              <t>An immortal record whose (stretched) TTL has expired.
Ghost records linger in the cache, available to serve future
Optimistic DNS queries.
If an Optimistic DNS query is issued that matches a ghost record,
then the ghost record data is delivered immediately to the
application, and the simultaneous DNS query over the network,
if successful, will refresh the ghost record and
restore it to immortal state.
If not refreshed for the ghost retention period (maximum of
one week), ghost records are purged.</t>
            </dd>
          </dl>
          <t>The complete lifecycle:</t>
          <artwork><![CDATA[
       | Traditional      Optimistic DNS |
       | Query                     Query |   ----R----
       | for record           for record |  |         |
 -R-   | not in cache       not in cache |  |   -R-   |
|   |  |                                 |  |  |   |  |
|   V  V                                 V  V  V   |  |
| +--------+  Optimistic DNS Query   +-----------+ |  |
| | Mortal | ----------------------> | Immortal  | |  |
| +--------+     during lifetime     +-----------+ |  |
|   | |                                    |   |   |  |
 ---  |                                    |    ---   |
      | TTL expires            TTL expires |          |
      |                                    |          |
      |                                    |          |
      |                                    v          |
      V                               +---------+     |
   [purged] <-----------------------  |  Ghost  |-----
                   ghost retention    +---------+
                    period expires
]]></artwork>
          <t>This creates a virtuous cycle: the more frequently a name is queried with
Optimistic DNS, the more likely the cache will contain a ghost record for
it the next time the TTL expires.</t>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO: Acknowledgments.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19+24bV5rn/+cpahwMWkpIRnJix/F094ziSyIgvrSlTLZ7
MAsUySJVbbKKU1WUwnbc6NcYYBfYZ9lH6SfZ7/ddzqWqJDu9sztYYIXAkciq
c/nOd777ZTqduq7sNsXj7N6rXVduy7YrF9nTlxf3XD6fN8X1yBeLvCvWdXN4
nLXd0i3rRZVvaYBlk6+66Tp/W97QA9Nl1da7ae3fxQfTkxPX7uf0QVvWVXfY
0Wvnzy6fZ9knWb5pa5qsrJbFrqB/qu7eJLtXLMuubsp8gz/Oz76h/9UN/fbm
8vk9V+2386J57JY032O3qKu2qNp9+zjrmn3haOlfuLwpct5C0eQdzdlmebXM
XuRVvi62mMPd1M3bdVPvd/TY03qbl1X2kvaTXRzarthm4c177m1xoKeXjwGG
SbbIF1dltZ4QFPbzrCnaenNdNJNsQ6upFodJtiw2+cFdF9WeVpdlHzlJlglc
7v1IC6Pxs2/xHj6n1zb0OQP2n8qiW83qZo0v8mZxRV9cdd2uffz553gOH5XX
xcwe+xwffD5v6pu2+JxH+Bxvrsvuaj+nd+3YPv+IU8SL2GTbRZPaGzMZclbW
HzPUxzwzu+q2m3vO5fvuqqbTzqY0f5aVFR30t7PsTF7lzwQRv6Un823yBUHg
cXa2222K7LxazPiztmuKgrbwqir0q9d58zb7kc4MXy/KjjD8yZ6Opiurmj9r
ijUdEn16Jo/USxzU1w9OTr+8p5/sqw4344cLeaSQQ7MN/lOOiWaLeuuSfbye
Zc83+eJttIvXV+Um+vA/ewe71RS49E8rrKge7uBilj25KtqrsomP4qLb502X
fvOfvZOFLiY+i6putnQBr+mi0qPfPbv+ggjT9Clfn+kVPXiQf4tDMc83m3Z6
/YVzZbVKXgMl++r+Y57LiGoPAFldZeevrx9mZ0sgeV3JUj1q42c6DlAmctn9
k5NHMkHerAExu383Nzezliez/fG1lzV9LrNUVd0xmaGFXV6VbbYjqkVEkD+j
WbumXu4XxTLrrgoCX7Uodl1Wr7K8PVSLq6au6n2roK0W+6ahV/FrVSx4gCZf
MD0EbWiyt1V9U9Gr2XcAXPZMITe7B1DR0ulmp6D6sdjQWRRZV+vXfzcKHEaf
l99XRZd9n8/bSXZBGLHcV0zYX9bZCxw7COxFvepucoVeH1wyQ74rZzTQ51jS
H56ky/lD0dTZk7paleu9EOfsZdHdCFF+nF0SiJ4Wq7Iqcf7Zt/tyWYys97bT
vPuK+NeezrLvZvRIUVbE6da9V5/mVVlshk94VHkwPb0v96toyqIFwtq6zi++
efk4+/qrR9OT6YOvH05PT05P6De9Wis6VuJiIPCvfvWmKDebQ/aCeHFOpzed
TjMCfEfH3TlHrDDb1PXb/a4NGJTtacLpddmWc7rKzAcn2Y62WS72xJposJur
omIOStjWFAviqq27ygmQxU87gsKST3O7b7tsXmA9hKh4dNXUW8bOSo5ilmWM
yCSE7MHOaa520ZTzonWp1DLJ8myxKemRaUsnlfLsbFssrgiWLcbOu6zcbrHX
rqCFNkW3b6rW2bp0zdi2rhsIC1JSLlTCuCHKTTOU2/2my6uCLg2Pw3sAQ6f1
b90NsUlak+4j+7d90Rx4N0U8GOYoCL8gttB/7Q0tllB7Wy6auqXpK5qekPOq
aBytHF9sNqV+MWEYliuGF6FEnl3RbcRG1wJ0P/B+B4xZ6gSuJfTtaMkYtiD2
XDS0sBScGcGcLivRT0A9bw4AwpvnT7JHXz38agIILK5cvlzSlluag7DhGjtv
u3yjayEw0xL2TYvbYwfRDs5zRb/QCAT+xWaPZ2ldBJbbj3JeEBqVNclhZUWv
LDEtnR0BtOzoTNZVvqGPnEekGNi0B6Hp/E06LiNG7wVHK82B4fQigXVJv9Ub
Qd1d3QL5D1hFTZRy0WWeXdTVTG7RtlzSO859QoxQbg6P6s4rnqngm7LMDy2I
MD6hx4qGUGbCwN/THyLPGhYFYtw6OsmCbtDiKms39Y3sgMc9kLxIF6i+mbmn
uJk8ep6tipuMrnwL+fpqX9HRLfmbGKVwr5fY7bwg7gdoliuCBbOBLd1v+RIr
rQlmRO6JmoKi528Lhu6mzgk82U0xJ2qwLmbusl6CNBCQCNOAKYTcsjWc247X
HW+wIy60X1/R90ItSHwERBf5hq+YcC/iaoQB+5YE5j/SZhY5MAhbASAqwkjM
C1jRJPuCHq/XwFPgVbmlvxhVQcGAOCCcxAgnBE9ahWywhHZSrg68NJmVN91A
wqgY0et9s5BJlfrJlQDppE9xs+iXHZ0VP2OnmeyVpmaEodl1XUVG6hodHNZO
N7GjVwiaG7C2BtvY0b0FHiu22BkYuAX8OJGZe2Iz0mu00JYXvSuU8A7BHcDF
l0SOa+Lme7kU8irNuynXV4TqbfXXv/x7J8SGhiZ8/xEEPxewXpfFTSt40JZd
MeEhVmVD1J7UoR2uFelAeqp5FlgMY1dDZAoiBr91VbcdmCF4Tw1adv46U7pD
tOR85Zj4ET4sil+1PBITcN4OnRVWIWScKI1echtSlmVEt3XCCQChzZYeAYMm
8g5CCZDhWd4cHZtS1qqWw6eFfENwEkrsZDpazOXl90yRjbPMD1lxzUDCaYCD
8KWTZcgWhCMqYji6s2ApEXxApzHAjbCqIJp1IKpbPhtcxuzBCUBJEoKLr7e9
vig2G/DpaIQe+1ZaWCwJq+oVqd5AtTWBjIjsAmQGk7QFI2Bmozt3aUAKF6uV
teU4iTl9tMqAUySo0naZtu5wfZUzKsI4osFEHFulu2v9lke+oalAFgnaLUmT
HXNcmuCGxFc8eAaeSIySTtAtQHIEvnYIigx0u+jiKJJ4gVjoeMAwO3in6+Lj
pKXT6NdCKfJsWa5WBUvKYILMSsNa8xJslw4Txgu6AMIdmFT5tUenn2/o2i0P
JFoXRLzpDldggE2Kw1AEip/yreo2mQoawDYa9+FJFg77rGNq4C5/c6L0i0ch
aK2KjsUcbFAkHnr8Od8QkMGfumggyBkHl/BRXKO8fduOLohEb5Y69P7oDQvL
yS5/8/B04qIFRbdEwUeAPMg6lDDwxVjXxn6CePhcGb0DxOnWEd4x3aUbKifP
9KTkdbNQcE/XdQ9j3QPLuAeI0K3cL4nuC7klgle+Bf8Ki7yhRV6TcCGnEINn
XTJH8dJuS3Jh2xfjeMMAShiDqSKkbMWJXIfEJeto21igipX00cTJyIzvuMVM
e5gXfICr69Qycb4mjJ8I1gjqYRShfYyOdbLsmft90anUDOFkW3YdI7uyWhqI
LtK8sEumtz6IU3wR5LqTzIJ1yMG3nbKxsmEGxqYrvcv7ds+sAWyQRNKCifAq
bzsmMaPqQDZUB+5UAbzs6jpRlGuiRVvCpx9tienrMSFP1RoZj242SWK5Yzmf
yaQqFvQ1wbJHf1rD4/hWxVoJqxiup2KUbbsHhIwvJLoFcAIjzvMFmzurpWBv
PIOwYK8ZxHTxCFR5QzhP8xhxZHJ4bEueOKWGVWYKBOsOpIIvlciKZlx2bDLR
RdrbINieVs7cD63RviNdwoQZAw4in/PZ6/RGi71Ez+AX+lF5hZ3WPm+gp8BO
NCrMC2LhUUZZogFNsG5AhPmR1brwySS7a4oXP1xcJkLTLgfbBLJCxgdviKwq
fANWXoMkzCcSH5AQ7NFL7htifcSTPLzvXgJxDOJZayIjxWqPS1OuJq5eEOuj
mXCLJsxrTGYk5r0soQ1Gky9rSOh0wRZEZEQOZRVA1TnWMr2Wc/TuXVHRCdFq
ph3dqare1OuyaN+/P1YBYFVviDhgtYTNtLBtRvDew57QKdLhpvLXgg5ELua0
xaKowCavBYIkV4gOThdwz+eHdaS3/LFzn376pP/KEaOlyoGMXIfjx59+6tyf
//xnl7H50VBCfy5w1d/YVdcfDHXBLF0tKj9nIz/jH9obUAJ/x7dzaj+/vfuN
0S9Hh/nbVxU+OoKEgqMAO1I0O/7YVf3yffya9kFg3sGRY1vxb+DL50wyzkQk
x5e/fI673viX3/BPdvrgZNt+pqxPPvtXxg5Cp54d5P9pZPr1NHum9N3D9IPI
dPRnAo7A5vgjVvXL90FTEFlmNUKI8Ee8EagyDBvHf9uq/g+g3xFxNbW4Hd+x
D8atj7CwXagd7YIJ71PY0ejTczUO0FuO1l/CNrY4ZO/e/eOb509gkHv/Xu0P
pEEQ6W3HLG8YiDWUyEjnlvuGbSE7+GeIUK/ycrOnV2YshBM5CGJTq+Ra5QyS
2th0N3NnmG61odMpliaEePmMje0TMyEsPAtkgpNYDR1bDZnJj60e0rfYCpep
HafxAHE0OQn6e2+lhYFsKJaImtYyq13ChUEr2Vdgo1fQR2cj5xRNXFRXMNhg
c16ISyRFV6txr1pOVSUR7W4i4jwbk5Zil2NzACxi0FPdxyx4ta9YXWDrWdGs
COqQFkmfn7lvahLpcavmmGC3qQ+05J4ICbDT1AVIAoOdZfiu3pAiT9u6Q76u
K7EYJ6ZZM8YO7cfLmnYEVXkJHwqEiAOLPPgO1ospnV9XL+oNYVjb5mvo6fUO
Yk3LEQDP8KC40FoRZL1t14SFESndJKae2LcjnIa46jb1goSEs9fnkNdh94Zt
NggQovCb1wdGVp75LQlmNyy134PIhUgFFr1evuLf3zz73Q/nb549xe8X3519
/73/xekTF9+9+uH7p+G38OaTVy9ePHv5VF6mT7PkI3fvxdnv74md/96r15fn
r16efX9PLll8SsAMkdhYR9uR6gHdvnV2fHwxv3ny+n/+j9MviW78HdGN+6en
X79/r388Ov3qS/oD6pnMxqctf0IuVYMM651QDfIdIecGloEWygBdIuAuQfPT
fwFk/vVx9uv5Ynf65W/1A2w4+dBglnzIMBt+MnhZgDjy0cg0HprJ5z1Ip+s9
+33yt8E9+vDX/7gBTk9PH/3jbx1tOmH5s0/d4+wsCK/euVBzEAhfpYRCKH2A
ORN6ZGmGS0RhML6K8EECfOyUwinRbWbtizXAsmCCtFCPpuiaQkddFlPSyDMn
phkhLfsqv0ZgCWxydZPYYwjXSpbcXcY8q66YtosrTTlYXwMHMpjw8YbXrIAZ
ONhoRdCQzVzKlJge+FPR1DT7DzD3ZX29AAuR8Jys2W9AM1p4Qryh7Kbeb5a4
EHT117FfUWFJqLyualobDcQAEUhgPIUl1h/tSIQC2UI1bglQgLSZNySLxToh
RvD4iQSCQCAYENViMC/oNItbLA9qPSwAq4KdC8F69iu47Jl50tSquovvHluI
RZoEM3nFagoY+l3jhSbLzDFbvdvVrRlAzaIKLhUNFKEuQkBkHYZvKjAEz6UE
E8yFw3hxZAyBTdLZkuhO57sF0LANQcgqDKmiSLIO9+lZrJQDEm+8gtm/uKJ1
boklbWJhIjlNYhN8pRU+uJW8VrWwmC1Q/SwZPB4w0LC5Dty/6xkG1A5AY8wL
Dpbwd3KifmDZ5Zy2xQaBPV2KTXAp5F29JWxtiw7HtPIAj7ESFBzkCHo3afNs
phDt/dNeKIde2IjhRy6HguSH+aZsr4QFbdaQWK627t07iUlh5gIJ9eGDBw/8
H4++OJE/EIPz/r3jOwPjRRuPDea83cGMDEtkm0GGKRE1FFlMCNLeNJRvIQMS
FVADDzAEzol4TCIQiwLWUbaCOdq5xP1YyI+A4JPstZgCIYN3TNlECABagEQF
OyJ8ZF2hpu4r8QHAFIvJTERhG1ilrgQXefzM0ujvD9SB3Nvkyy74jyBFeRuZ
hmIg7jEDIOj42VRKExVB/DGfVjh0vpdyF7YFXRrYC11i6BXD+7YWuf1KCLLM
q+a9Bbxif9xvdxISkcHe5IxgsMkx65pyN/McAyvPvW2K+Bz9uhQHOTM7Nrub
i9dM7u4yMsialoTBxYVmTidYq+qmhQnoAuZILFcw9gVkTY1vgaRdqjOB1ymM
c7Gp90KyYJaGjZpfTx0ouEEkLYuAjPkIx4AThK47WPDpYtYmdLLnldCIjrZk
N1RYE8E7rxDdCUpFx0SEAv70YFAQWsLUoPXUjd7hddHdvSq7YKmngRhOMly9
ok3yxS3XV1MNTPVbZWi8qoK7z74gbgkz8wYuLZJk3orITZsmMRyS44/l9Hk5
Uc8sHyyYFR1t8P2RCMBQEQUlxqBdQTy6E1Uj130iIBgu1kyOjynxC7vTJrzs
4Fw1N7bSHnUT91zcZXUNXiAE3F7HfMv6T4WYV83J22ZHIrfw23Stis0KEb2H
DQKOCkAcIvIOv5Rb0UNy2sCBMBK/LttjsK9XADROoS2SSRccc8eSd9vuxSer
3HcD/sSxCdh2ZIINS5M4jU65n5ByBIWUIPNwW4lvyAwFnXBSFs7Y3TbpjcdK
ddiaUBLeVDoVjaJ8g41b4jagnX13+eL7oFUENyGmPV8FKhxmTEO6lBx7h0Em
ZGNPL4oqKxY31VHb/ZwdcUTAWFJh54SyUV5XuymKHSOCmObzEEeBjW7zpttd
AREh+OBZGO1pUg72JJwhwjhdgFGK29GM9XydaSE7BDhkDCQVPCSYJfLH3hCq
8z62TFNSvw8kkHj/jCepFpxf1+WyjfxsdjlE5rR5+GawhSHaOPaIWSWYpPip
K5gEwsNWcyhGWQE9rsvuYIZ3uqg5W5M2WT0HdRPSQlp6ObCdi0TPbj12lmfq
LM9dJB/yA/54iVZ0HZ2DxL/l69o76hJ3ept40yGLzdyF2jCWNWNhiP4Q41nk
c1cXgXcex2xIDAH4gDlHYK60v26i7EYn5s+XRb6Eqma6Feg/QK/OZ5Wwl8WC
ZJs2crfKWN5byfKkCGRtcIUo1O+xHeUezCkdoyISHWggQXm4vcUHyphtTq8W
IS0K5LxzsLSFQIKgq7GNtICq2JVswggPSYwNIgnMjCPQMZ/LvNjUNz3PS9k+
zuawEr3xFrYzxv/w9zdOsfzsNFZJxixStM7dJkdAFjEo9ief3Ydgefmbr09m
DhExSv8yaHQB3Gz0LYKMI1cUPtloeyKHsJfvYGHMyQPYvxrgykZlVFgj9dcA
7mSvPgLh0Ym4AWWBzOkc8+a2877ZZM+4FbpvxhNih4V3cgqS3zX3NxkJhFV3
MGapQdRhQacnJ45XpMqDURvDPV5nPN5Co0NagF8uIHv4Z+KbuKRhH7vsBHbs
7PQB/+8L+etL+euh/PWV/PU1/spOTx7w/+6fOHeW7B/pLLL/x2468gOEGfn4
Z/3yvnzpxuzjt/z81w88nK5PrfZPmJ60H3pVsBRrZiFZ8ZjYwNl952KMMUbP
eH364LEf+LMxIMjPZ/4hdgc88RfqiND9Nw9PxFPwi0b6wAFGo33g56MfvL7z
wSeC6KcpfB6dPP7w8ASHQNKXH7Ocl3TT2WMVH8036dRfPrht6o86qPTno47t
f3eWu2/hL7kodyzrP+r5u7FBfxQp7vcuzcnHYIX8KG5E1Oxj33yj0Taee330
Bo8QcOuZOkn77KzzCK5yvTfwxBwErLPdM0da+oAsdak7CON//ct/Ywbx17/8
dybkE3H5EN3ar0nIyNWIihEloIWpvdqHU/5TefpLQueS5ZND0ZnzcSYx5WxE
ILFW7SBxgE/MTsQ6yrLrnK0UJCJNnDEZcPO8TaOAZh4i9/sQ+TBfmzisNL66
sLyUkBtZz+iSxTFEbtjuQdpetWYrji3iPMp2wDMWMWnMkAYhmOueAfX4vDgs
S4Jk54WrcsIYkpSZ25MSLBPfP+ntBMz1yqzJfHqseZtBhrfmQePtqRyeDSsp
VGzvJXOwKbEELoE5uUTVLjOxI1joYcGhcXqJJj59RuLWGs5BYOlLlSovBO32
bI+j8XCJ8CSW6jSqSxxEEaCSuCvR1s1H60hfIM1iSdK9nbIIzGzNzC3xYCMy
NocFVrwvlon3tGgVyAx2LJp3HeTArq7l7XKLeHYOf5ctuHzOZtcCV39fSEik
7P6vf/l3mnddJLuGAEmy+4bzEmjLGvC2Tt4UVQEDsmcDmgJbWWtvSvcnTDeA
vmr3W8uBiAmRgKnsIrvWPicdvStIK38qQhru3KHeM86ymdZE3OE7qnt1kdFe
kFzCvpZhQDntXzCcREKLcpLEoAVj6FRS+SJj5i3ZfL/QmsuwhrvUR4YdLDzy
7SBGE2rRar9JCI88l2RbiYW/nu85JD8LoW1uzNl/EMcAAs05Y0Rk6dEkndtN
wIDc66aACRpvv9EYXLMMT7M/FFXNKPma4L+sf8reffIn+ui9c0hwJY0N8W0c
Rs9ZdBiEJmpqwX8xC4TYb3ANNuo5I058IWBmIzXYWwjZhPv0uyevFfj3T784
9SdBf9AZCfKQfoTgQrsAqsaVXbDmQrsmuol7YhFgbBByYn8QPDLa6vMXZBzV
kjgQ1VLL6AZgXUGt5yVIUpsahTZIKBGV+irfrMwYxh8TiVoVTKY5zJZNM8vU
4REHqoX3YMjh1WU+NtWOflN7FthIXkTNdl6go4tC/NWYwcEJpgCK/RlpM+Cs
7gfgTLevODR34pUx3cENnZ4EK4h7V4xygMdUTg+8Ug/f0TtRoqBZkuBWX14z
JfQx0ZFpGLEUYpBAyLtzF3v2v6l9thfmLBfIb0XoOoQHZ+5JjBRslKUFZPdj
bhi/1W9mMwpvDkHc/XfUYNgO5Rdn1LjjM/b5Cve/zIj2Nt7wHQdOj0TXBBEg
3TYnw7Ferip8z8Zyel+mEabukw/6y2cFHJbxkSl8TLEM6WQbISVMN2Qz/a0r
fagLNdNs3v1HrBZRc7et+KFfsAVl8+VXf54Ki8L7GVPZV9FM88Wi2HBZC3Wa
H3BhiYm3Om88TWJ75cR9ib3qaglggLN/wjmztWWcJdvhmGghOQdJm5EUmWfw
muxFmop2SwItkyEleMErPY7mYvOaeP9ZH5QIeWcxv/VSvjhhYln/lkOCkwSX
YkSkl8VCtLbbOBmPfTPjqoWayw0x74pZpJ1CVOhjjmQ7SSeBrZgkByOyswxQ
U8rQC12AFNbu538Eq2QhSkTSaxLLxIERS6XjC2X7LlEhJ2Zc9pDjsZT0id9X
Jt81Zd2YQEeqyHXZsawGl6m3fO6IjpYL+SLQxll2LqzsjgVtii5ONhKcmASO
IUfbO1nVwUIekiRwO/ejJc5YgQST7mWDgzXA2dSUCNND/s5Og1gTuZaldVqN
FwvivYrXjxclkjdkme2Odo9v13W+aWfqS4VA3UpKPgFzWbOtlwWaZxqxn11G
EfsktIxH8lsyZ3Vrpnrf4yOOppC+Mi/WxPtcFLXLpzvhkFK+v61PtoUIVlSP
nZuG3JtVFC1Cm254XjEJGwnvB2O4ip37OfNjviMq+nWwqMRe1U69+QgDvGJV
gFB+B13EvMV8QrHk7DUfn6aBJSHLO1Mi34cIR42yR5wVCZbJhZDHMJU1d1Gy
ckjkwMF9kt0Rr0LnJ7EbJOqTFFpqdFT/BdpmnG7LkSPq/hM/jbgWTe3UiBEW
5S32RD27GIDDCtp9CHmZMBEUgiD4UVd+MIUbXzbX6RAh8rkrhoGj6lG1QFdL
VEN6K0fiEItaMG1pChFm4syu2k4wQVJBI5h5sAyRWL3PgvgIPy5xMsPMJjqG
wRkwSA1nZN+sTfkoFR2N1Xox7oRiBWkxBnXCtSh9Q9Jm4f2/BEX16NRWPAqx
GwyDXsmWfshSqbYCFeOTRHMpvfQnzUNlLw5HM+zqzYazoM5X/YtvEgufHX2H
ewObAhI9ge5QqY6OwfeRooc7oknCnKXYsfC9qevdRMht/96KfJFvbhARzTYp
4V8dS+JBXQvo2Asyc736XKqn+xBA4iirVblgEw0I1Q2tkuNRCIxPXv+gCfMv
2AeKeLfFvhP/C2mEWqwmbNOLQ8yBCUm13EZS/AGntt4bLaejZ6yoBbJ3HBwg
Gx3e2mfppcm3oDZI+molLz6CEPsyEJW0dH75/Py/7ctruAm7hDzQfAIuMWkZ
lEB7zldRmuGNyney90NZ0L+Ju5IvufPHK8Yfsdn0t+uxWdLX6HywzcrdkS0X
XWsJUbzp0ZeZxAxF3nYOHwuZBmaNYr7Q4tYiYU9QHndTQiBojmIl91G/C0cA
hyoixm1KKcfSNXvRhLu+rSXeQaBQM8fRGwroxWHAxVQ/o1cJp67LvI8xLhnX
R2mL1JoQcLUMG2xgZqKLjyggwwm/CsSaLItpvVr5ilFsaWHtG7RuorkJt++w
bHs4JFq7pypJ0EqPvoBUGNpC0Ks3Gwkt4uo2wjY0motF0mUJSw5C2KJ6N4LH
YvZOALYi9b6VKnwpVoXbxfeIVg6hd3gTXBT/PAwMlfQGdh1yQNMCJBB4rtay
rx7ef/+erTJlG6yQK845CQ93dT0bspmEpBu/YVrjuIYaX7AoOZTZ0rt3f3hi
hiB/iEM7gY/bVmgYQV9WGEJ+ef/edi97VYs57PayFgvVWDSFhp34cDu+RSlr
Z/86h3FkPi3NR7OzQGXGCMlTtmBZSVYfhis+j/OLhxHMYUgEGknYnfMBuDZo
1quPcdm7j0BO0FpPeMVraRGWscx7AG0TJTUytXKVErnmKhoS1jqPtf37H7Li
xCQV1/ioNTqa5QcXV0FJxi8DVlvcph8jmPWcj9/VkNOB3M3eJpZ54+IVIpb2
rMT9nClFA0FjI0h0+Iu30HF97YEFcXv1gU0yLjDXFD53uY0Tl9ncpeN4I+lI
ejInMkspHjjCBsKWVSvQBXKWDE0jvLOzDOwg+KKQEExqIoGGupXBnEtEmqOz
iV8bQ1vUe7pcS6fypb+fITUdyTsFEppEBSq2c4j9MgnJFEWDOKruILc4X4jB
xJeMyBfqN4RAxp6CNI7fVx2DEE8njwSrppSqLrCbdiGUS0AYh7+VnSlcMjvM
6eECsW6XaDZRONSPar5JkQNxpKz+DHQkESeglEHWIJBDbImCwGkOjpxaNRLD
JNiXjp79MgeFkOvIvCVBk+oO+YgIdJdEoGf9CPSZRXVrJBA4lEYsu7HUezHC
LNmenksdnt7+6ITWayhkI4tjbCfqV7DxAdU3OAmTHX7lVS1hghz33rZiXRMF
R/MPJwbi9mMi5tWj1FteUL52OT0V8Qierp8TxNARLt3Hkoh2h8vC1uwg3Dif
zxAR3qAXDFM+xEVfINmkdQmR7MzK0orw0vryF0iUlZ0H2qrPak04T2zUZm0R
j9ttXakDvkd3PSihgZLOSsswfZ0wG+IGRlkXFfsQrApONIBcQx7ERXF5oUCU
Eu0BG5SSU3KjZ770HCitRHxGqS3Kdgd45h0QTldgvFM5omBdkggw5WhxVn35
qcsnr7OL3790R5ADgzISFxdVe/iOuHPRHWvyAoKgueTMUpA1d2rTHFllmaKF
Jef4knUw4/mUkfji0OFqHQqF+62AKCWnNZ/TWupK0rFM+BZTa1UI+25hdYI9
k0NksxZ22j0rgc5vi4tkt8EDLIUzaFRUkVOODIOZp0XslCIEoMXvctyyYhNQ
9HbAeP+RIdDY8clZIfyi5JjUAFODo5xAW2dMht/sq+o2mhmtL3HiKRPhjBWH
Kn5iz6s1B3zTJm6+vC/8gD2Bv3DqI935+CKwjTZatQaZIhNDCKiPvGXhCmO1
xPdcAoOQ8YapzFooMdJ4kOsNlh0XXZLLAw3M3Xl3SrF0Anyaoi9aqt51eA/2
lTFpn7vhqQLrTfSHJD6AkkgktbiXLKM6jszwsoAm91t9owUhYKPXkcQ+Jqdj
LAkiiElNC8jW4spmlaUdyNODCxz8SP14c1R+rP6Y2PUGzMQgDs7mBkR1gBFR
nLnGRoGWkzLLpig4+kQGSwhuD8S4QT2iaOH5MqaLBHfoAvsocH0ZZUZJEbEt
W8m2LLGxex0ZNa5/rOJ17ju15Sh3mwMX6vNFJ+kDZzJZH2RsZ4uongJoHDqj
4BCvx7w4gHrcsIO3Fx4Wynrh0+XAiv1HhGaEWnfpVlKdjgNtxUDGMIsCEOTK
JxqImEahqh5MB2llifBTKYPXKAUExfEJ+JiYZVQhDQvYbzYjTMoJWRGn5iEp
9KIl8Vg2iENSJinl5GAlZzU5R1QESAwbKfbKEWHiOjjzuTe9Iw2uV5YehWaL
2u91tr6WaanGC5T0Vr+RlyndkcVoiaECHo6VT0W4/P4ig8YhppGCU8HYanBT
IkEmb2UjuwYYdjy0dI0b9dqu3u0QPcF43LP4cJRHrH6akAqrbFyTsuycBpCx
EgZ+utqTgFlwzoawT2QuLb2/jrQxpOnpqecxhUoDSpBaEwhZYkb1d6fqUGzL
9bSr3uZn7gks62Iv/AB0dvCKd1yNwmd8x5uP6SmAJNcvQGqid1N5p/mci52V
EFToeBuBiMvGeuRl0oEKDQ7Y7RuO66A3+/Xzgmjrra8uSNo9nd5KYrMYgx4d
zHkKdc7HKTmz7LnUmBGPAgCnQUcp+o4Bggm7N+vnQlvVDCz1eMXR5EWbDnYp
pej8WlJX196CTvzWEEj1Ni3J4NxZHIq2H+NrkEZ6N1irUYg856LrAyFtzxLE
juPCkHx69O6dfTq16EyZ7/37Y7YOAJ4avuNNFKlrVcxwmiF2xYS1sfRW25mV
zGT7zZN6O2dy8IzNniM+rtjSORa896n5mj+V5Cqux7MUbc15M2BQD0HevYPs
Jr+W4slmwM8GokBvTs5K+7TNVzafQEXls1wgUVe32ho07mmVdxzyyzzM6icP
pTboAfWaw0OHJjqV78MJuFApmPkrg0JiFH1Ot4lXA82QDT9SXLzlQquhLE/w
BU96FrpI4TPveB5VejdmibXVPnza6JMI9BuFPccH9M721TVQp7hx7pt9uVkq
aAe0bWAMz1P9Q60qvgiNy+c1qrIOBEPtKtBGEcgYMbgXoJInRZaiwkNjsQpS
5zlni50Uv/FOa8ve9VWdU/fhr9p+Ael+5U6u9OlDWNQH7n0DWJz6W1tR3jSF
N9KJHjt3KjEbwz4ESTBBv9DooGYoHd59jf7Q7QERl3mzjPaZ3n+MUs+5gUZS
oJP93In45a3yfZtCut1g7GU3md6t9DSk+sUAgcwaHzvI3r3zTtXpisjn+/dc
YaiVxEUhHCIqqk+SzRe9GsQS6hZCAM4s+Ofo/skXs5PZ6ekXsy++PDbZtBf+
FQPBxefCjiK9ynSIP2dIssuQL8RxaLfnmPycvayRgjn2lfs5zZW74+eOB37G
aj47IaDSZMS0fA5OvzpzdkuROr8aGuaBDPNEjwetRgLUok2ZF+eWYU7vn2zb
n7MjNlH7U0VurT/5YwyTlN27yBmkOsy7x9knKT5ISbnf9JqWicZmVXD8G/d8
LJMeqsnfRj35MquJ0doKxM6M1/a8rI7XboYWQ1425qs7YVhzl6nEvFjnVcyz
kRnFYG5zCJbIt0z6MMTtFvpaYoyeVngfnw9agBytYq9raWYi1pOjCuZRJdrj
iYu0sIpWHQPLq2B5aMEQweqlPa6wGtCByLeNjPBqqfYj71tqe4Job0QuIRFM
JRaHHYltWhQohRjB2nbi0p1YejzL4WpckwLB3RUrG2xVQssCkMf/f90/6rqH
YU6/fjR7cDo7PTmZfXk/DJNc96c+jMSu+y+67BG6466fV9m7dz3uETPUcPxa
9z8frXFsrlV3NiJW6C2W25NACtjHUQusePbkPBgsWy3WX2XnT168zr6DoP5D
KD2ZFU1T073J2Vz+5uISFi+o51qWM6jmROG8+UFjIyTjfuDENfGQDift9KKB
8GMVEyUgo2sOkae2DxmQua5mYbrcaomwUSU+mLc5WoVEQFpmfzXom8IygtaY
FEbbhjCuYIyyGPFBtbkejlRFSIfQiNOo4MiGKzq2hSeqsVDlDYJifHRmElRT
s0c8TqQwpuaTl3SypHONWCN5YMaLfRXZNceGNhLuI9K9ddNnRcbaeJcwMDul
j7NNmk3Sqe6jKiVj5eiwQ1iXLGyRrD0t42CnpDyyampaAMRn2nRmXUlL/I33
fHo8EMY5IFoq+QkuM5Kl5fHjIodWD8vKGpoWCYKFcE9nsdViRGKXk5TUTXLS
YLu4qmtlPhw+Va80dKzdl+JrLBuJ7525W8FgMaQs2/ZiKnjuyHQQLWDKJVy9
McGF6pdsou9fjUsuW5RsALBgBd03Y2XlWYIwSfFltZalfA62MBBKChqduBhL
1WeEfEU7Vu4U46Jy9EKrfbhF1CFsfhhe4k9Q7DgKTMqeFh0IJxstpGr1uaYU
oJHWZT2y4UGAmVSObZmjIwCE9qZlb81Z4lIGoUUyy25EbTTMCeVo+W5JJKpU
lU0K1MYLGc0vmUnSoA/dDyaTsvXkKb0PiBNFAKOYXCCvbXLVR6HQpiUKEXdc
tEGmsV1cyCmLf4gHQNLvQkvFjA3F0YFeLNWGaH3IcYQtJyY1amXcxhYwi2vn
6grZ99LchdeWFgttI8E23bxl5kUR6DiorrAqN6JsYquiyaNkniXpjPTswAw8
zq/aTNtCHXaK1otNzhFWHL6Yc9VJUf41nY2n9sb1dqQ6Z78DlAj2Zorh7jya
7yiR7fGrNxzPq7Zn7tvSxjldv0IVyXKNVCfJfoZHkAWDAYmUgJ1U2/WmxLhc
af/MOWNM62kJNFGNjluI1f3+I+bolIXkwVCiPhU0a82OvAbGHQdELD+OoSRh
4tKWZVCANVG2zCDSzyBgXSDlUmcRD7D8pq52UZ9TdorYto/evTNjzVR3OeVd
vn9/PB4VleTHJUYONcmpXUQVlXKliQex3wF7K1umoCMlWdMN9RTT1l/e4Y3h
DLfILzUH413vuSOeRg6aLnmH7uWOGt9+SKPMvGDw8r88ffXi7PwlzvTlq6dn
l2felX7s7l5YvBpPdVQ6CJV1fVcYkSQR0CAN6IqfSkQm3aUzRsxxXvgGhxZq
41jm9kXIfZBlC3hcoExB7wEdjuUMBK9byI4mbIbYO7kVafVen5UJQtNrRuaj
ND5iT1pBTxLo2bMuIYOuLdAHPGsXRUVUpm6zIw7sxZVmh5+UZuf+5NxVT59H
PEB7HFWgr+qKl1FoTnJuM9iaS7UCcEwv92yTAAFpjgiPKhNCI5M+nEUY+7Vm
9HGtBffByaQMGnoXMD3SbXMph6BqycXytTrWCAQFdYJFWesPclp4LXVzd7pC
rqvilB8cpBsthyn7qoAKo+CWZY8NPtN6AZ9wGQCOdtEOwlauCCEa9V00eTLC
4NiFyoJHz57rxuy5Jo/Id2rECGxQDpPpd2SuJxH36rFjNVjsUWNVw+McxtDT
58nLsxfPoJ+UVZtGBKUlnkfisYsh6R4xE7s+AR2xEg/itPuh8L4/klMLUVv0
bNsoB6CUOQTEhHrJXeC8mpEVyy0v8oqIgRQHvuhq8Xb2zhhGJQmoNM8jUmjh
o6nmWs42qGJSk9fKN3BuUbHmDujctqHe+HEBaBYKOUAub+HXTvAnoXhtp/Wx
WaRiH5xETEFfq9BwsXgbVQHttazUkE/W8DdEjHip/jUIwYX2/WhrdcRJxC7v
2a1JSAQpYFRgHGAH3eUV4deS7loF3WIihS5y3IdmSh87qLdTzFCgMift8e3E
YAJrqPQt1YivS+IT3GGWERF01M2JIq9oqTyrEKRb/CkAh2jmcYrc7K4T1XLA
ENuaEg0QC8Clyr1zzWYfeNS5zqZUESXZ9R9ce8ckckaYBKEjvlRDVLsHThzO
WtY47iieR1dgwb0QVoufuAWsNFfeaHUZwcsNyoB0dWxQAm62ZWNueJFxFhw9
igvA9/87CP9Y/rtPFqCg0yv94L1z8kSobWE9w6V8a2hGRxsdDQ+OfXQ0Ma6I
ZN7HA/d8UNweUv3tQFADYlxhIyZdPsGImT1JNVtWsVUOYvE1nk0LBwPlvZRa
CsMIVarm3kwW9+5ki5ynnmaaRZ/ShPhFVYxdz4ZrsRhSviFZ1q4uKzPYLJaV
f4soofaDSQwlkfzP6VK6l8fWzao3Ma1SpxsMnvm2fcdu7NvsTKy9QxNweI/r
rGnwaiggUou5JbbayhqGW8wCtWxd/MJZgiTjSezm/o5798pMLvGh9A3qSCNm
sLe6ovvJkrSyzvFEBdmoiYMP7zWjs2Bi2AR/ZRUsVPHnaAaHKzZjc4dq3VLq
TbCNU2rGdeXo+sjWDB00NjTSCoJ0wKgdIu8D8rIjRJ3XdmwmDPprwWarqAtl
pB0iclqj9UrUoA6duVeBo0m1Estdqm4ZKwQlY5xcXcJRteSYqIqX/NLON+Nw
b5R+K8OhoHhzdqTb6lD0wvqTjryUVzJNQpAwQCfHEOoHaWJj6/s0kKw7lddC
kX6WBGfHzn0BwHJZQGyF2a6WJxrJG/awkAJTNr+BUNppGVRWXutojQzE1FBz
ReM9FGGCppgWnLrYiQGvCUogh9GYEUJe4LPTUylXbMLn3FGVv7SORqZia+h3
w0P9wlR3XXCopCaxonk/GTVKOWCjnySbhvTUjKPof2nCcwBVSHiWjd8aABjo
z63pzrylD2U8+6bD2hsgJITj9SSYUcSyCPhJ2cl4i5bt2RR03ZdTusnTptBk
RItlTcKuBo4jq/LjogIcuS/2MIka+vp8FbTiMauklsfM7Zi5qo3iJjNbzhXz
U8cYLCEhnEoumq295mswiHUZxDCPItBfdZYf+7zgyEwxNf9QMZdkGcgbJEFB
OJM27mTXmr4o64paNLm0MzdKHGXWDIuFBZFGpQPX6ckXD5Bv22u/ZjYBLZOu
VXN4PjzwDy4KYY0bIYjG45m/2PUjGxWjlA+GFnOLyHe0gYtnT0iuW1ZtW6C4
SE+OlUr0bSRK+OptmDkCAAcPi508aNOABkdMj/iRIhMI5uDnufgiR0xy4Xu2
WS2aw64j1pHvrtA3BDPw0d0xom+Mpj6xkE9eHcJ6Q5WOdAoDJBtT3ry5OP9W
VDU2dNtNTbpzmUpVNn0gJfrVEy1MIHZYNpmVliBOb0mPH5EQrHaQ+xugIuea
PRXLD0p5Zxdi1fgelh86bTVoOKmDMcgXD+VObrMeBTz+Enj89LbH1HQVGRxI
K9IKXnVjzY9dvu/qyH/aNyaIXhcVQ/zii6+/8lmfXzz88uH79whlOX99/TB7
U3PPiLPlNcLcW21XpgmipycPOc/9zExkt25QVy7FezvHnImb/7DrQeri9yxF
Sd83x4RYXHccCXmLRVSIdBQS9wyEVz9FCLTJ8ajaVkjmJxctsYKSvAEXbyCs
qIwM+jKk5l3AWef+jQ5Cak9EUBCZjisQmOGcM48h4Ep2m88u0hvStxaZ7NQO
mmsGQyZroYTjUEB3PLaJUOjmYurmbYcz83FeZmBPihRFZRCzqAyiizRq8VZ6
AIwZ5pjV0aCFVnIMIpXHz1vWFxJ1hW7src2FZMWEdVm0Yd6PVJOICzauiKLu
XQaeHfp8RgDvloX4BHilJyzQSXky5T1R1ptllam5X+ohV1J0JraMYmAXOuHw
YYq824sga6M4Dm8UZ6uU4pOvfgRnURlk1WgiAUTseioL31fEaoqh8Z9YdLDB
KOtwwtYBvohMjI/AF0gIXIuFRV+K2gDGcbtOAmMCE1XjkX5kKhsO6Xji5haO
U0qWlTgJc8vUEJ1eTp692BEE+ZarxqCA8WFvd/oFRsA7Zi8cuYRYwF0j571C
Uk6s77XUnyytG6Q3wFsNC58HyvfQF0pk490tqCSlXPg2aZKP09qtPBwtj5tZ
WVkvK6GGoL8ANGeY9MvBxZrAeNFOsconeyIc8Ric6Fe3kQKnunuvqma2qVke
uSMZdOLC9kNGZqO+fTYuxisomx6J/ODGTBAH3qe3ZnTNu7pOLKfJDRiQep8g
QmI6ShNIt7QiDpZoJd9ZE3eG3CIPtqFeic7+0bhYGPZ3SIDT6T1gh6IQU4k0
K7mdnVAQFr4mPtosZOuG8mGWywmTnQxdoUcukzGpunkHGmSanAaXgDkOY+7E
xaiuLdKC1agBR+hBhwu5BSLW+n17UiYEkrUzIpjWLLbZerNL5IiLCmTGJjZN
40yXMvGBD6JmRu1jtZ6cGWT68dfC7bjma6iTKC2aop6nokeNeb8iHZw0GpJg
0oIvabhArHNLnYegu8/MEsnDZMNhjJWFGcd4bBC0xLnZTkwptrhi58nfnnnc
MiGDQv80j0Yr5kplbnaqDuBesgIziVs9irj/rGJ1oJBEkEsUHOCKTWOxe519
O83XVc1l/DnFyjcs9kVYo8IBuIDevumzZli6NYN1C3oSJF0/jTwlqTsWLpNm
4XDkJRfI6ix0aay8q2gBHKSju+Hosx+evv78kjWDoFlP/NccUXv0tL48VhXg
q0cPHiUPfHd5+Zof+e7YqZbw5aMv8Yjqt/zU7344f4KHfmfjfH3/wQkeGoak
uCgNTvPf6TYi6k70Gzky9EjDfi7YOMwtBfK4bcYb27dzI48SNp9vQWMLKxOK
gjSo7qZb+OohFKTQ0D13aXLeGIAhkrPfXQ3WcQ8RvQUcQ+T2Va5lZ7XGb2Ye
uNFe9sOyn8jbpFVmWKZP2gsmtw3Rwo2PV+nlJ7IF6HHarxnuJG5/aTicj5WV
7nXi/lUbenFfSPWr0KYo3jwbwySiYGK5ryWyG/OqEOJihY85TzsJlIK18ZLD
asstmDxK+CqdymGKWO7FPDWdDpyLvm/SwTdL/dSANrrb4Zlidt1aFIrJh+nb
Lo8emfYI98Hqt22jCYhHOzDzrsWeWE6q+R/2Xc41CsXPfBMVc201zdWHg2rG
nmqMy2K3qQ8cNRfDXV2IHE/LlbwWnmYPMEaK/9KcTI7SXnrEIlHbnPig+Dsu
B6hjmlrffxtcKmLTiM4QplltpkznZFU6cOyax7e65dA8eWUXINoLhqhLDd9P
au1nWRQwHp3Z5JbxowAbkGyUEWdIYCCpLxYlzsvGmfo8e/PPz8/Ovx8xu0Up
gZqVJfmYUcajXhzH+4kKLxvr1WZAviVx2fkWjFFh4nMtkzqSdJg446HtoX8i
N2ES9iTibOgnwgFdTio1e8GP8KwRS3t/Ath/pNOj1f/1hnhnW46SF3w4iUoz
XVSyGU6hOoWg2MOd3mOrzDY2XtlJWScpVwDxwdPRdnjRdVvQFXyasgjJTmsH
3F7kM/TDRHxAsUz7YkZF80ZkDHb+CfQ8oxjyG2uY25dsC7a7WA6yBudHThJg
LQcS+kW4JLAyxjov1vbEQR8NRHJ5/DKBabvjThljMZsju79IDadST1ZDte9K
s5dC3bWSCDeI1zfARZ6hNmoCPhZ1SpT1zQiY1VoSIktEw6gOopnd5AfnNaqx
UUV10Iygyow2llxnKkwSHxsFtkaSPrct8xWSB4FMckP32nP59Z7EipdJDVcv
2jxAK/nI5zS2aDVjDfGODQ5cVEuLMoi1ROpMcsWa0LTKyjCNYK+WtdF4YvAD
QjuO8/JHfJuc5Wmqi+5qbNvTrk9NoSVguSQGaM4XoV9ZLOepMe9Km3FocVtu
GkxMfi9Bfz1oa0nk27qN1FDWJe8jTAqg562Fa/ob4vOY5HoktOETlVKE9D1J
Kl449FANIUdjUVQKFKvoDK+gqUreTFRxlFPU5EcjdJh/WZwTHxeuVROCVWEW
sIrskhfoy2JtuXtzA/clC6uSexoVlv74mcU22BeAl9y9AH457mAgJ1+K20F6
JCStf5TBi45WNxodpCM1oQ23RBQVc8ToJoEsqXcy9OExkcJGdv7Ssyc5HZxx
Ri2Bsviw95l7yslFWj5CucdwDKQ5WJmMLrtG3DIXl1AMdAFDc4kC4biYutmo
kd6DAEckMBbFhYu8SFahQxfonFs9N9yICnp7IX0ft70ydlbIzAwEdKJxwyjV
fw1gUfTkyL5UmJlkAgdff6tX2tdPKZc6JH3w2H4qJtO7XNpSneO1XDihR+QA
vRiVcQXjCyMB55rvF4yrCcprHf2EKGKW0AyRScGquHEfCcT4WqQbE8o5htH0
9lv0QucjFyTOBnmPGFsHFlOslbkNSA30XHDOpdRHUWCENpnRGEP5xWIJpDMS
OgTupPrGD/59zli9/+UU8+FOTcyADcQznBkBlIO+FhrnzGGt4022Ys+b+NTk
2yDsxiEcE0ZluaGOFXvDEGLrbo39RZQ738rp1gc7S7z7d/VNwVzzNl97GqXR
O1YnWW0LEQRMP5T7Iwcb1e+CDVuP3UWHHW0zbGXkIsq5zdw3RUqth91RY9SE
njtS6El7kfsOFZFyMQj4GdaEQgn9uAWN1XLik/ciZkv0QVoEWthPWFjI1eYW
d1ow2deZ9O3tBiAqpWd9FSz65uRIJ+Awvqgqm889lAOUgNGy7VI8bH01pXTW
GPdSS61v3CJEqtegwWlxVTt9H9DvJ9Tof3MOaUo5W0KtIGsN4U3Se/yKA6ce
wlZgxF/A1ewNTT3cHadTIidaPnAtXopMapancMqkKZqv2er6Q90A8q23+dua
wVCkrGPA3B5yMHSdFiiwCmmLK/EhaFsEZINO55y+JtlMoar94Fhh63Tzg0XU
tVd7yRaVHmMBCqO3cuLzAXQHDiGEhlp6sjFobtvWDPEoTVGPkRvp39CDoDop
mqJY1lu7E1zzWgN0iMqh6MqKE1GRd1ub0UUY5s3VYTCm0FI+X2OWXLOWx5IK
eVzUVTcmPjlfNNNCdiRShxYftRmD4MPuckCaK3NjTDVi9eOu1JBUWLVp1Imv
WkX/0dEnLjKaeKdXcRtcpII7ISHp9zvE6Wb78dqAA6BzPlNT+JFZVeoPP9Hg
EGgVtJN9N+LhM4xnsqiN2YhSjO7O9RpxCgDDbIEcmAWFARH3Rgqu1jQdyJA7
MJkxEXoS3BplXDhSwjW5dKyPdpIISM7B1b2n5SitBSPcAFoiMFWNOEZrvEzg
0N4SV1Tz1QnM0SpBNlxEGZb6SiqdDEoUALL95G5Os5gXIQ9ceETcnYFFDZdY
1aIWAR8up6jJS8TTNvVhWPTA+QqKR8VsPbNO5/Dp1OKTOZZDTwskBj1Oap9Z
fm1vgxN2jdJBLbpBdfS4CjDHDOBCSQ8HOreXIfdMoy1hs0bJF5T3X+NusHPf
93ZAyZOkPpMUPm8tC5EDFlEOU5BGsUzrx7MLe2GU1Fd+jGq+Wg3xVaj/53wY
8kRKR/RqQohkU3MB3TjfvBxxxI8oq/H6eyt0YysUBcMLjSvS7HLpIoMI7o3K
ci7qEg5J69YiGPCFEOM401N6UxD+sk8kyilKOkBqeZRYCOiiykD93B6HuO62
XkhJeV8Yx+dA96puwj2CuBvxJUa8btIvuEsPcjSn2lglopQxUK1QrdQpwGla
3VcJ7gcCi8LYSmS7kwwAcaIjVsRKGO+rwvuDSdjs6kWtLRdEGCM9uWzfoiJ4
1r84yFf0xydUDaB+XZfETbjrEHK6zCTHENcWcmj3/hYn5MsCcQHkkvlsHlcF
GEYkcf5gFscB+/hZpfYyUEii1gLW7L9IqiJkmVdY1LLFyrnGwe32zdor2vJ9
J1VolOkYtmCgIIvwCiwMKK2DwCNrhUUujRIF8ttNzLwDfz3uXOByOjvuOu1N
3YoTBdtSQYCrBWN9r3AG/d928Jp3wGdyqVs3k+Q2/6nc7rfD7cYZnuMqIK2e
E1hFDrGB+GyiSI8odXuuDJWTbM57jadenP3eS8zIm5FViMIagoTZbanyhIU8
s6tUaDPyFWgEaYJSt1peOK41A5/HpsUNiV4TsyhyBjTOtIeGnJxQrRqzYnPP
Y1hfJJRIMgrOXp4NrJhpFL/UipIntRwoWocShUZqEwZ5yt5Mfvi7EpmhB44I
GMkgpf+/4ThxxHq++2S7rNrG/n4vbtT0GbruHLRrNZqKaqplj7UrWq97Igeb
7xGUU7ltvnhF4l6Jf7pr/HsDUoRfXnAvrnrVZT8y7ImanFXLpobF4nsScH6S
kdiw6nabvOOQJF88R20YIRqhlIq6C+BjrzmZ3fheMeAQveALzIoOF4F+xBVV
ZaF3WgopzhmH0U5inNqrEhXMM+6RyyI6ugflGvvGoMlOT2anX2ZHL+o/5qhi
wqYafHwfj1yAeW/nsHOdnD6SkBoTHpw4pqXo0kaWlHkw+VIwHITLre5F6Jbu
dmpakrUkcTihGbHFveWjcl0AQUwTQv68gy+KgPfad2a2ExmxiwgZGILSZC6p
svuHoqp5RpDNZf0T1/SgMUFk/kTfodg1aUHJRDkngUkX+y3QQIV7h0AFKS6j
xoCR6fWZohU9jca+/+DvScza7MXrb24TmByiDlsknbM9Al1yYU3Ng82hDI2A
LQiq7PbeN4oCfTeihdPm15FqyZSQzg01laO6Er14gpwX++jk77Vht+2S3vAG
RWk/YUb7u0YfenBcmtnPFiCNlg8hg76lSBw373mmj/6S1DG++YiEf3QyPT2R
hcvO+guvRpAkregstw+803L9rxJTr/oW45i9xK/rJAwnbj3TqvPBQgf15bGg
GFjTLYdeo+pSq14v2zItF5+46eNDWau5Pj7WHnTcx0AnC9DBpuIUeXfrrjjH
nVvPS0SWxD74tCVRd+PaKSzUavRW7D2XPjPmkzQrsmULBmS5fSXiv4p8JW74
EBOHRb079DA7KQ0FhV/lpZEhwo4Fj2Uv8ZhpaJNl7kI6MGPCsMfBoHBJbKhI
UDD+Qn3soXdKr8G8BL/0a/uO78li6gJUYIncQ4KPokjsIBAqEQxqd925LQec
qcs8bkfNNvAdFzh98PcmWouy6YVrE8g1eGuJCL16t9W0ul45f7qW909OHn1U
tz5n3fo024noMnFAa2vP3UbhwfPCmyGKLai1BRv7cKxGtCpKcLcaZgViT2cz
0A1h1s5cD6U2meHpe5GcVqaPQzY/yS6sCmBf5guSjVIOX7VQUimkR10oIiiV
A90vqxx4G+vzTLSVwP24GFDIzUIVQdT9Q0r/p2+R9ymq63N8doanVLPQdAnW
Iy6KzjhM0iOc6yW27b5Hb63OpzWEIPlbhPSReiyzkWUkK+gvIA7jRJWx63IJ
5mhFfq3Vq2CNL0KmNcayoDiKy1UrMJQRjwyFYPOBIbSfTCL8WeoohiJVNIRP
lAmEVky2V6SxsKGUu0hHuTMScmKyrEX7c8kQg9ztC4kctNacxSLqOPw888ng
SRFsS2dLE7Y44llo6SD74C7g9KvTRcABOZeiNTQC8J9tB5xwEAogxqglhfnU
6u3zXtlU0VsTC3lRFdsQRO7TvdVWadZA7OKpEC7OcRXQcUGihVZMuWLNtDgk
GcT+WCDF0qsdEFs5yAQXfCtKdagepf0tawN2bIo6RMmVWsnBkyZDKFBAOkqC
L8rzkH6CQC125dAn6kFYhp3cXIkxqKzeslkLZaAL7dEdA12Mz5ISA/MMzHFj
91DOsVg+b+otl8C69S6OXbY4IkIsAT5jklYZt+uMTeJpL9tM06MlNhsLXufN
ciOKO2rXDEtvJmVJjOr10QumFfF+7cv2KsR5G0odeQ5/LCvqlxU+Yq5eLI+B
TK85zk+9bVHVCQWJVGTVcKN+C26Nkow0sknAqv9EbBBv5U3tRRuR5gC5oCR0
FgMRJ8Vwi2K0T2NTXo4s0/CgCctaiEztcR08iaG4hPTgwKFsoz4kobUr+x4Z
msMBUJq1RFJThz38KDG/QoDXBXuCN8vQ5sqLE1w/ZFFzjai2tcvIic6bQ0S+
EshhhjcEcGHmhovcZozJxAjmyy4wPKKIMS4ijfOF6MCmszPdz5p6ve+X2gCl
khDNJNct26B4Db1V7dn2gP6m9Y4zJqOjUfeYXwta9SGTMfOYytsAbOK3tJSL
L+IjllkufZxFp6LdxvAsQV/trrdtoVrxCee+Bp8mDwn10aAbTny+0nq4HFBq
pjgVxMT4mX1PMuDisKDTefeJUIEp3V84EDbln3haM5Jx2RtfHxjlIKMiLdKn
XtCoH+AvPnxrMiZDmLu7G3QQDyk0aWLADBXC4N7R0gdDg4AYMbjfTc5acagP
J6J5y8VSlvmBkOS1BGndORak/ZtchBGp5gdtVCoPEoDztTZmHDPlaPkXOw6L
Yb9qimLadtAjIyGcDwBC5QsGPCgk26qOvSU6qSjM76eWBnQfsPRHbyzvBc0f
gVim0vlxyLA5X6Xxx3JHmDDmfdc6hNLgGovrUDGdQHROrf0eDJnUG9Dl4WB8
9VCWropQbpnLNIjgq/sOszFZZtk8cmYPTGXBRAaZCSKjzSLaaWhcDVN76MIg
xfDrxgu73nAlSen3vckGucKxWSLS7rTDFt468s8cmwmKSy0FMJi3xGV9Rrwh
tdEqm3iWistUX3NA0qfnBlogiW/YtM2bt1obYk8EQeIfBXP7q9GmnU5NddqV
27qd/VJcG8RfBNSKTUWCHBzbDVqqwIgwBQkme6sor16vZdA+hLZJJx7DcuWq
LP7c1deMqTXe7JdRzLKjSyZsa+krLuxw1R8NA7GOO3YjYtauVh6rypZrPwlf
gFcdiXID6F0RLICnIzCMyjpIxolJGDyG9dWQzpfXKh3AmrEZFPoW+1c2vkgL
NpbOF8Sq5U8o9oUv5hFKbmkBHiKXvia+jWamnEPRjXUbwJWsQahVuozqLilD
hjc2qrWV9q4U+jvDzb4IN/eWsk4eqazEVGYmU28gKht/dyfaQsUIdvruB292
1Z9u/HL7DJhszT5wX3Pv02/xt1zn4Vg3rIn1501M1Fn2bTQi5C72xfeatg05
raCVG+SYKiQV32654RwKCLFKpUjrEJZuTwi3Ai/+wptJg8Uw7vKnJfazGP1C
yH2cyxg38At14CTpHRd/FRH6yQAL0jUhaAQUR6oBl11Cn5gkKkxE/zAGZnK9
jdXzFB+Z65f1L3MaH0+SuYVBiZddLYUWDJXIClwM1LeIuoz4PP/0Turn8Kg0
BRn7kW/Q/Qods97gn/BaaAYRvRF9+HPcN4umo/f5PaklptxEfpKP9D193P3M
L93VgsuvyJ772d77Z/7vAz//7J/T9z6zFmGfDaBmoPosaiT2mb33s8kzP2fj
Lcd+S98Yj8ZsI/PRjyb2+miN7Lb5dIgP//ycRXDB2j4GnPqOPO7R5ecgJ6Td
2eKPo8HDex873//F966H730IXT6bpofF7/2LXM5/zX59S685Xo9Q4kxa0rmR
sftEIp1u7I1egI2QABbdYOHnLPbsumy6PReBZzohHo1aok1NtNfKKWXrhXw2
dI56qetIWvbaGxNPjfzq0XmWnrXGJhft8C6+CGU4DuRs8baqbzbFci2G93eP
RQEvlr+5tyIVv0B/ustXT1897j86c/8LEEDFeqbfAAA=

-->

</rfc>
