<?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.30 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-nfsv4-uncacheable-files-12" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Uncacheable File">Adding an Uncacheable File Data Attribute to NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-files-12"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>General</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 54?>

<t>Network File System version 4.2 (NFSv4.2) clients commonly perform
client-side caching of file data in order to improve performance.
On some systems, applications may influence client data caching
behavior, but there is no standardized mechanism for a server or
administrator to indicate that particular file data should not be
cached by clients for reasons of performance or correctness. This
document introduces a new file data caching attribute for NFSv4.2.
Files marked with this attribute are intended to be accessed with
client-side caching of file data suppressed, in order to support
workloads that require predictable data visibility. This document
extends NFSv4.2.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 68?>

<t>Discussion of this draft takes place
on the NFSv4 working group mailing list (nfsv4@ietf.org),
which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=nfsv4"/>. Source
code and issues list for this draft can be found at
<eref target="https://github.com/ietf-wg-nfsv4/uncacheable-files"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/ietf-wg-nfsv4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 79?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Clients of remote filesystems commonly perform client-side caching
of file data in order to improve performance.  Such caching may
include retaining data read from the server to satisfy subsequent
READ requests, as well as retaining data written by applications
in order to delay or combine WRITE requests before transmitting
them to the server.  While these techniques are effective for many
workloads, they may be unsuitable for workloads that require
predictable data visibility or involve concurrent modification of
shared files by multiple clients.</t>
      <t>In some cases, Network File System version 4.2 (NFSv4.2) (see
<xref target="RFC7862"/>) mechanisms such as file delegations can reduce the
impact of concurrent access.  However, delegations are not always
available or effective, particularly for workloads with frequent
concurrent writers or rapidly changing access patterns.</t>
      <t>There have been prior efforts to bypass file data caching in order to
address these issues.  In High-Performance Computing (HPC) workloads,
file data caching is often bypassed to improve predictability and to
avoid read-modify-write hazards when multiple clients write disjoint
byte ranges of the same file.</t>
      <t>Applications on some systems can request bypass of the client data
cache by opening files with the O_DIRECT flag (see <xref target="OPEN-O_DIRECT"/>).
However, this approach has limitations, including the requirement
that each application be explicitly modified and the lack of a
standardized mechanism for communicating this intent between servers
and clients.</t>
      <t>This document introduces the uncacheable file data attribute to
NFSv4.2.  This <bcp14>OPTIONAL</bcp14> attribute allows a server to indicate that
client-side caching of file data for a particular file is unsuitable.
When both the client and the server support this attribute, the
client is advised to suppress client-side caching of file data for
that file, in accordance with the semantics defined in this document.</t>
      <t>The uncacheable file data attribute is read-write, applies on a
per-file basis, and has a data type of boolean.</t>
      <t>Support for the uncacheable file data attribute is specific to the
exported filesystem and may differ between filesystems served by the
same server.  A client can determine whether the attribute is
supported for a given file by examining the supported_attrs attribute
for that file's filesystem or by probing support using the procedures
described in <xref target="RFC8178"/>.</t>
      <t>The uncacheable file data attribute applies only to regular files
(NF4REG).  Attempts to query or set this attribute on objects of
other types <bcp14>MUST</bcp14> result in an error of NFS4ERR_INVAL. Since the
uncacheable file data attribute applies only to regular files,
attempts to apply it to other object types represent an invalid use
of the attribute.</t>
      <t>Using the process described in <xref target="RFC8178"/>, the revisions in this
document extend NFSv4.2 <xref target="RFC7862"/>.  They are built on top of the
external data representation (XDR) <xref target="RFC4506"/> generated from
<xref target="RFC7863"/>.</t>
    </section>
    <section anchor="definitions">
      <name>Definitions</name>
      <dl>
        <dt>client-side caching of file data</dt>
        <dd>
          <t>The retention of file data by a client in a local data cache, commonly
referred to as the page cache, for the purpose of satisfying subsequent
READ requests or delaying transmission of WRITE data to the server.</t>
        </dd>
        <dt>write-behind caching</dt>
        <dd>
          <t>A form of file data caching in which WRITE data is retained by the
client and transmission of the data to the server is delayed in order
to combine multiple WRITE operations or improve efficiency.</t>
        </dd>
        <dt>direct I/O</dt>
        <dd>
          <t>An access mode in which file data is transferred between application
buffers and the underlying storage without populating or consulting
the client's file data cache.  Direct I/O suppresses both read caching
and write-behind caching of file data.</t>
        </dd>
        <dt>write hole</dt>
        <dd>
          <t>A write hole is an instance of data corruption that arises when
multiple clients modify disjoint byte ranges within the same encoded
data block without having a consistent view of the existing contents.
This can result in stale data overwriting newer updates, particularly
in environments that use erasure encoding or striped storage.</t>
        </dd>
      </dl>
      <t>This document assumes familiarity with the NFSv4 protocol operations,
error codes, object types, and attributes as defined in <xref target="RFC8881"/>.</t>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="client-side-caching-of-file-data">
      <name>Client-Side Caching of File Data</name>
      <t>The uncacheable file data attribute advises the client to limit the
use of client-side caching of file data for a file. This includes
both write-behind caching and read caching, which are addressed
separately below.</t>
      <t>The server is often in a better position than individual clients to
determine sharing patterns, access behavior, or correctness
requirements associated with a file. By exposing this information
via an attribute, the server can advise clients to limit file data
caching in a consistent manner.</t>
      <section anchor="write-behind-caching">
        <name>Write-Behind Caching</name>
        <t>The uncacheable file data attribute inhibits write-behind caching,
in which multiple pending WRITEs are combined and transmitted to
the server at a later time for efficiency.</t>
        <t>When honoring the uncacheable file data attribute, clients <bcp14>MUST NOT</bcp14>
delay transmission of WRITE data for the purpose of combining
multiple WRITE operations or improving efficiency.</t>
        <t>When application data spans a data block in a client cache, delayed
transmission of WRITE data can result in clients modifying stale
data and overwriting updates written by others. Prompt transmission
of WRITE data enables the prompt detection of write holes and reduces
the risk of data corruption.</t>
      </section>
      <section anchor="write-durability">
        <name>WRITE Durability</name>
        <t>The uncacheable file data attribute does not, by itself, dictate
the <tt>stable_how</tt> value a client uses on WRITE operations.  The
protocol-level requirement is the following durability invariant:
when the application's write call returns successfully, the WRITE
data <bcp14>MUST</bcp14> be durable on the server.</t>
        <t>A client honoring the uncacheable file data attribute <bcp14>MAY</bcp14> satisfy
this invariant by either:</t>
        <ul spacing="normal">
          <li>
            <t>issuing WRITEs with <tt>stable_how</tt> of FILE_SYNC4 or DATA_SYNC4, in
which case the data is durable on the WRITE response, or</t>
          </li>
          <li>
            <t>issuing WRITEs with <tt>stable_how</tt> of UNSTABLE4 and a COMMIT that
completes before the application's write call returns.  If the
COMMIT response indicates a changed write verifier, the client
<bcp14>MUST</bcp14> re-issue the affected WRITEs from the application's buffer,
which remains available for the duration of the write call.</t>
          </li>
        </ul>
        <t>Clients <bcp14>MUST NOT</bcp14> defer COMMIT past the point at which the
application's write call returns, because no client-side copy of
the WRITE data is retained beyond that point and the data could
not otherwise be re-driven after a server reboot.</t>
        <t>The transient retention of WRITE data needed to complete an
in-flight UNSTABLE4 and COMMIT exchange is not considered "caching"
for the purposes of this attribute.  The attribute concerns the
long-lived retention of file data for the purpose of satisfying
future READs or combining future WRITEs.</t>
      </section>
      <section anchor="read-caching">
        <name>Read Caching</name>
        <t>The uncacheable file data attribute may also influence the use of
read caching. Retaining cached READ data while other clients
concurrently modify disjoint byte ranges of the same file can result
in read-modify-write operations based on stale data.</t>
        <t>Clients <bcp14>SHOULD</bcp14> ensure that cached file data is not reused without
first validating that the file has not changed.</t>
        <t>At a minimum, clients <bcp14>MUST</bcp14> revalidate metadata necessary to ensure
correctness of cached file data, including the change attribute and
file size. These attributes provide the primary mechanism for
detecting modification of file contents. Meeting this <bcp14>MUST</bcp14>
requirement satisfies the general <bcp14>SHOULD</bcp14> obligation above.</t>
        <t>Clients <bcp14>MAY</bcp14> revalidate additional attributes (e.g., modification
time or change time) as required by their local semantics or
application requirements.</t>
        <t>Failure to perform such revalidation can result in the client
presenting stale or inconsistent file state (e.g., incorrect size
or timestamps) to the application.</t>
        <t>Suppressing read caching in addition to suppressing write-behind
caching can further reduce the risk of stale-data overwrite in
multi-writer workloads. However, in some cases read caching may
remain appropriate when another NFSv4.2 mechanism ensures a
consistent view of the file, such as a delegation.</t>
      </section>
      <section anchor="relationship-to-direct-io">
        <name>Relationship to Direct I/O</name>
        <t>While similar in intent to O_DIRECT (<xref target="OPEN-O_DIRECT"/>) and
forcedirectio (<xref target="SOLARIS-FORCEDIRECTIO"/>), the uncacheable file
data attribute operates at the protocol level and is advisory.
Clients retain flexibility in how they satisfy the requirements
described above.</t>
      </section>
    </section>
    <section anchor="sec_setting">
      <name>Setting the Uncacheable File Data Attribute</name>
      <t>In some deployments, applications or administrative tools may request
that the uncacheable file data attribute be set on a file in order to
influence client behavior. For example, applications that require
predictable data visibility or that would otherwise rely on mechanisms
such as O_DIRECT may use this attribute as a protocol-visible hint to
the server.</t>
      <t>However, the setting of this attribute is subject to server policy.
The server is responsible for determining whether a request to set
or clear the attribute is permitted. This may depend on factors
such as administrative configuration, export policy, or access
control mechanisms.</t>
      <t>Requests that are not permitted <bcp14>MUST</bcp14> be rejected using existing
NFSv4 error codes (e.g., NFS4ERR_INVAL or NFS4ERR_PERM).</t>
      <t>One possible deployment model is for a server or administrator to
configure a mount (see <xref target="MOUNT"/>) option such that newly created
files under a given export are marked as uncacheable file data. In
such a configuration, a client may request setting of the attribute
at file creation time (e.g., via CREATE or OPEN createattrs).</t>
      <t>This approach is conceptually similar in intent to the Solaris
forcedirectio mount option (see <xref target="SOLARIS-FORCEDIRECTIO"/>), but
differs in scope and visibility in that it allows DIRECT-I/O-like
behavior to be applied without requiring changes to individual
applications.</t>
      <t>Unlike local mechanisms such as forcedirectio, the NFSv4.2 attribute
is visible to all clients accessing the file and is intended to
convey server-side knowledge or policy in a distributed environment.</t>
      <t>Changes to the uncacheable file data attribute while a file is
actively in use may not be immediately reflected in client behavior.
A client that has already opened a file <bcp14>MAY</bcp14> continue to operate
based on its existing caching behavior and is not required to
immediately alter its behavior in response to a change in the
attribute.</t>
      <t>Clients are expected to observe attribute changes through normal
NFSv4 mechanisms (e.g., GETATTR or revalidation) and apply updated
behavior as appropriate for subsequent operations.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: please remove this section prior to publication.</t>
      <t>There is a prototype Hammerspace server which implements the
uncacheable file data attribute and a prototype Linux client which
treats the attribute as an indication to use O_DIRECT-like behavior
for file access and to revalidate file-associated metadata before
exposing cached state.</t>
      <t>For the prototype, all files created under the mount
point have the fattr4_uncacheable_file_data set to be true.</t>
      <t>Experience with the prototype indicates that the uncacheable file
data attribute can provide many of the practical benefits of O_DIRECT
without requiring application modification. For applications that
issue well-formed I/O requests, this approach has been observed to
improve performance in many cases, while also reducing memory
pressure and CPU utilization in the NFS client.</t>
    </section>
    <section anchor="xdr-for-uncacheable-attribute">
      <name>XDR for Uncacheable Attribute</name>
      <sourcecode type="xdr"><![CDATA[
///
/// typedef bool            fattr4_uncacheable_file_data;
///
/// const FATTR4_UNCACHEABLE_FILE_DATA       = 87;
///
]]></sourcecode>
    </section>
    <section anchor="extraction-of-xdr">
      <name>Extraction of XDR</name>
      <t>This document contains the external data representation (XDR)
<xref target="RFC4506"/> description of the uncacheable file attribute.  The XDR
description is presented in a manner that facilitates easy extraction
into a ready-to-compile format. To extract the machine-readable XDR
description, use the following shell script:</t>
      <sourcecode type="shell"><![CDATA[
<CODE BEGINS>
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
<CODE ENDS>
]]></sourcecode>
      <t>For example, if the script is named 'extract.sh' and this document is
named 'spec.txt', execute the following command:</t>
      <sourcecode type="shell"><![CDATA[
<CODE BEGINS>
sh extract.sh < spec.txt > uncacheable_prot.x
<CODE ENDS>
]]></sourcecode>
      <t>This script removes leading blank spaces and the sentinel sequence '///'
from each line. XDR descriptions with the sentinel sequence are embedded
throughout the document.</t>
      <t>Note that the XDR code contained in this document depends on types from
the NFSv4.2 nfs4_prot.x file (generated from <xref target="RFC7863"/>).  This includes
both nfs types that end with a 4, such as offset4, length4, etc., as
well as more generic types such as uint32_t and uint64_t.</t>
      <t>While the XDR can be appended to that from <xref target="RFC7863"/>, the code snippets
should be placed in their appropriate sections within the existing XDR.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The uncacheable file data attribute does not introduce new
authentication or authorization mechanisms and does not alter
existing NFSv4.2 access control semantics. All operations that set
or clear the attribute are subject to existing access control and
server policy.</t>
      <t>In particular, a server <bcp14>MUST</bcp14> enforce appropriate authorization
checks for SETATTR operations that modify the fattr4_uncacheable_file_data
attribute. The ability to set or clear the attribute may be restricted
based on administrative configuration, export policy, or other
server-defined criteria.</t>
      <t>Because the attribute is visible to and may affect the behavior of
multiple clients, servers <bcp14>SHOULD</bcp14> consider the implications of
allowing unprivileged users to modify it. Inappropriate use of the
attribute could impact performance or data access patterns for other
clients accessing the same file.</t>
      <t>The uncacheable file data attribute is advisory and does not provide
a security boundary. Clients <bcp14>MUST NOT</bcp14> rely on the presence or absence
of this attribute to make access control decisions.</t>
      <t>Use of this attribute does not replace or modify existing cache
consistency mechanisms or data integrity protections provided by
NFSv4.2.</t>
    </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="RFC4506">
          <front>
            <title>XDR: External Data Representation Standard</title>
            <author fullname="M. Eisler" initials="M." role="editor" surname="Eisler"/>
            <date month="May" year="2006"/>
            <abstract>
              <t>This document describes the External Data Representation Standard (XDR) protocol as it is currently deployed and accepted. This document obsoletes RFC 1832. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="67"/>
          <seriesInfo name="RFC" value="4506"/>
          <seriesInfo name="DOI" value="10.17487/RFC4506"/>
        </reference>
        <reference anchor="RFC7862">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 Protocol</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document describes NFS version 4 minor version 2; it describes the protocol extensions made from NFS version 4 minor version 1. Major extensions introduced in NFS version 4 minor version 2 include the following: Server-Side Copy, Application Input/Output (I/O) Advise, Space Reservations, Sparse Files, Application Data Blocks, and Labeled NFS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7862"/>
          <seriesInfo name="DOI" value="10.17487/RFC7862"/>
        </reference>
        <reference anchor="RFC7863">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 External Data Representation Standard (XDR) Description</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides the External Data Representation (XDR) description for NFS version 4 minor version 2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7863"/>
          <seriesInfo name="DOI" value="10.17487/RFC7863"/>
        </reference>
        <reference anchor="RFC8178">
          <front>
            <title>Rules for NFSv4 Extensions and Minor Versions</title>
            <author fullname="D. Noveck" initials="D." surname="Noveck"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document describes the rules relating to the extension of the NFSv4 family of protocols. It covers the creation of minor versions, the addition of optional features to existing minor versions, and the correction of flaws in features already published as Proposed Standards. The rules relating to the construction of minor versions and the interaction of minor version implementations that appear in this document supersede the minor versioning rules in RFC 5661 and other RFCs defining minor versions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8178"/>
          <seriesInfo name="DOI" value="10.17487/RFC8178"/>
        </reference>
        <reference anchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <author fullname="C. Lever" initials="C." surname="Lever"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently. The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol.</t>
              <t>This document obsoletes RFC 5661. It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="MOUNT" target="https://man7.org/linux/man-pages/man2/mount.2.html">
          <front>
            <title>mount(2) - mount filesystem</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="Linux" value="Programmer's Manual"/>
        </reference>
        <reference anchor="OPEN-O_DIRECT" target="https://man7.org/linux/man-pages/man2/open.2.html">
          <front>
            <title>open(2) - Linux system call for opening files (O_DIRECT)</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="SOLARIS-FORCEDIRECTIO" target="https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/manage-nfs/mount-options-for-nfs-file-systems.html">
          <front>
            <title>mount -o forcedirectio - Solaris forcedirectio mount option</title>
            <author>
              <organization>Oracle Solaris Documentation</organization>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="Solaris" value="Administration Guide"/>
        </reference>
      </references>
    </references>
    <?line 437?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust, Mike Snitzer, Jon Flynn, Keith Mannthey, and Thomas
Haynes all worked on the prototype at Hammerspace.</t>
      <t>Rick Macklem, Chuck Lever, Dave Noveck, Barry Leiba, Vijay Gurbani, and
Claudio Allocchio reviewed the document.</t>
      <t>Chris Inacio, Chuck Lever, Brian Pawlowski, and Gorry Fairhurst
helped guide this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAOHzlmoAA61c63bbRpL+30/RI885tnJIKna0iUeby8iSfJm1Ja8kJ5Mz
Z1bTBJpkRyDAQQOSGK/zLPss+2RbX1U30KBkW9ldn5OYBIHuquq6fHWBx+Ox
alxT2D29n+eunGtT6ndlZrKFNdPC6ueO/ndoGqP3m6Z207axuqn08fOzq93J
E2Wm09pe7d16ROVVVpolLZvXZtaMnW1m43Lmr3bHbX/reEa3+vHjJyozjZ1X
9XpP+yZXOX3b0+8P98+PPqisKr0tfev3dFO3VrlVzZ988+TLL//0JdFQW7On
X9jS1qZQ11V9Oa+rdrWnj22Db8LD2do3dql/tLV3Val31aVd06/5nn5VNrYu
bTM+BKlK+caU+YUpqpKIWFuvVm5P/62pspH2Vd3Udubp03opH4jRpVmtSHQj
nVXLpS0b/3elTNssqnpP6bHS9MeVRP75RL8065JWxCURz/miWhqfXq/quSnd
r6YhMvfoB1qy9iuTWf7VLo0r9nRRzRfr+s9zfJvQtkqVVb2kZ64s7alPnx/s
/suXX4eP3zz9+kn/8avw8enjb57Gj0+fPt5TypWzdJE3J++Oz/d416Aiy6ot
m0dPtvVYPmo+Pxas3GbquW329KJpVn5vZ2dpym8mxM9O4cr2Bl/HKzO3Hp+e
7PASkyeTRbMs+PFOZvRnDDns6dd4UHcP6lVd/WKzhm8RLXny5ZNd/upt7awH
D7KClof39NbbuprXLMeHXr8xZWuKLbrl5O3R8fjk4vDV6dHBkM9qZUthU/YX
FnVmikKTiPh32Aqzrx/FNbb/F0LAUv9fMjg7eb1/+ups/Pzk9OBISHp1cvsA
9bgCF5nNXU3ruIo2OqsKUzu/cV1ur1ZQxTt5I+X3xJvJCgst3LElGKpJhcr5
WKTmd7ysvSP3jePXx48nu5AB8QTPIOowls38mAjBVfYQcaVPSumEV+8YOayy
FrZoOto7UX31EXUJj5LC7OdLVzrf1Py0ftG63G4pNR6PtZniMklf3eVdrqJ3
mTzRj4KP3NZZ4eAV2D1UZbHWJCJYmpIfxp6W13CK0KlqxmoFcg25DWIutzVc
rlvSwV/Z+LApMztRJyX5pKUNGkruiFxR4TKm25POrGmJWdFaujmQIQuH3dTU
LsyVq+qRJs+um4WtrSbplZVmL2jq3P1qc7202YKckl+y+hsIj1gl2pTpRVUJ
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
MUzlVwkm6n8AthLMUq5EAAA=

-->

</rfc>
