<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 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-directories-10" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Uncacheable Dirent Metadata">Adding an Uncacheable Dirent Metadata Attribute to NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-directories-10"/>
    <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 33?>

<t>Network File System version 4.2 (NFSv4.2) clients may cache the
file attributes returned by READDIR alongside each directory
entry.  This caching is inherently best-effort: those attributes
belong to the underlying files and change when the files are
written, which the directory's change attribute does not track.
In some deployments the rate of file writes by other clients
makes such caching produce incorrect size and timestamp values
often enough to be a deployment problem.  This document introduces
an uncacheable dirent metadata attribute for NFSv4.2 that allows
a server to identify a directory for which an honoring client is
required to retrieve dirent metadata from the server on
each READDIR rather than serving the response from a local cache.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 48?>

<t>Note to RFC Editor: please remove this section prior to publication.</t>
      <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-directories"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/ietf-wg-nfsv4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Clients of remote filesystems may cache the file attributes returned
by READDIR alongside each directory entry, to reduce the volume of
follow-on GETATTR traffic for entries the client has already seen.
This caching is inherently best-effort -- writes to the underlying
files can change those attributes at any time, and the directory's
change attribute does not track such writes.  In some deployments
the cost of that staleness is high enough to be a deployment
problem; the conditions are described in <xref target="deployment-motivation"/>.</t>
      <t>In this document, the term directory is used to describe the
context in which directory entries are retrieved.  The uncacheable
dirent metadata attribute applies to the caching of dirent
metadata -- the file object attributes, such as size and timestamps,
returned alongside each entry.  It does not prohibit caching of the
directory object itself, nor does it affect caching of file data.</t>
      <t>When this best-effort caching returns stale size and timestamp
information for concurrently modified files, it also undermines the
effectiveness of uncacheable file data semantics
(<xref target="I-D.ietf-nfsv4-uncacheable-files"/>) in the same deployment:
applications can observe inconsistent metadata and data views even
when file data caching is disabled.</t>
      <t>This document introduces the uncacheable dirent metadata attribute
to NFSv4.2 to allow servers to advise clients that caching of
dirent metadata is unsuitable.  Using the process detailed
in <xref target="RFC8178"/>, the revisions in this document become an extension
of 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="deployment-motivation">
      <name>Deployment Motivation</name>
      <t>A class of deployment uses NFSv4.2 to serve a shared directory to
many concurrent NFSv4.2 client writers, each writing files within
the directory.  Workloads of this kind are typical of
High-Performance Computing (HPC) environments, where a single
output directory may receive results from hundreds or thousands of
compute nodes simultaneously, and of large-scale data-ingest
pipelines where many producers append to a common landing
directory.  The files within such a directory have their attributes
-- size and timestamps in particular -- modified at a high rate by
clients other than the one performing READDIR.</t>
      <t><xref target="RFC8881"/> Section 10.6 permits a client to cache the file attributes
returned by READDIR on the same basis as attributes obtained by GETATTR:
cached per file, bounded by an upper time boundary, and revalidated
against that file's change attribute.  In a directory receiving writes
from thousands of compute nodes, any nonzero cache lifetime yields stale
size and time_modify for most entries most of the time, and revalidating
each entry individually costs one GETATTR per entry -- the very traffic
that requesting attributes in READDIR exists to avoid.  NFSv4.2 gives a
server no in-band way to tell a client that the acceptable attribute
cache lifetime for the children of a particular directory is zero; mount
options express this out of band and per client, not per directory.</t>
      <t>The staleness has correctness consequences, not merely cosmetic ones.
An incremental backup or an rsync scan that decides what to copy from
the size and time_modify reported for each entry will silently skip a
file whose cached metadata predates a concurrent write, leaving data
uncopied.  This attribute lets a server mark the directories where that
outcome is likely, so that an honoring client fetches current metadata
on each enumeration.</t>
      <t>The fattr4_uncacheable_dirent_metadata attribute is the server's
mechanism to identify a directory for which this risk is high
enough that client-side caching is not safe.  When the server sets
the attribute on a directory, an honoring client retrieves
dirent metadata from the server on each READDIR rather
than from a local cache.</t>
    </section>
    <section anchor="definitions">
      <name>Definitions</name>
      <dl>
        <dt>dirent</dt>
        <dd>
          <t>A directory entry -- the (name, fileid) pair that names a file or
subdirectory within a directory.  This is what a client maintains for
an entry, whatever a given READDIR response carries on the wire; it is
the pair POSIX exposes as d_name and d_ino.  A dirent itself does not
include the file attributes returned alongside it.</t>
        </dd>
        <dt>dirent metadata</dt>
        <dd>
          <t>The file attributes (size, mtime, ctime, atime, mode, owner, etc.)
returned in a READDIR response alongside each dirent.  These attributes
belong to the underlying file object, not to the directory; they
change when the underlying file is written, which is independent of
the directory's change attribute.  The term "dirent metadata" in this
document is a naming convenience for "the file attributes that arrive
in a READDIR response"; it does not assert that those attributes
inherit the directory's cache-coherence semantics.</t>
        </dd>
        <dt>dirent caching</dt>
        <dd>
          <t>A client-side cache of the dirents themselves -- the (name, fileid)
pairs -- used to avoid repeated READDIR traffic.  Whether such a cache
remains valid is governed by the directory's change attribute: the
directory changes when an entry is created, removed, or renamed, and a
fileid is stable for as long as its entry names the same object.  A
fileid is therefore cached with the name rather than with the file
attributes: writes to a file change its size and timestamps without
touching either the name or the fileid.  Nothing in this document
constrains dirent caching.</t>
        </dd>
        <dt>dirent metadata caching</dt>
        <dd>
          <t>A client-side cache of the dirent metadata returned alongside those
entries, used to avoid repeated GETATTR traffic.  Because those file
attributes are not invalidated by the directory's change attribute
(only by writes to the underlying files), this caching is inherently
best-effort and subject to staleness whenever the underlying files are
modified.  This is the caching that the attribute defined in this
document constrains.</t>
        </dd>
        <dt>uncacheable dirent metadata attribute</dt>
        <dd>
          <t>An NFSv4.2 file attribute that advises clients not to cache
dirent metadata associated with file objects, such as
size and timestamps.</t>
        </dd>
        <dt>honoring client</dt>
        <dd>
          <t>A client that implements this attribute and enforces the
always-refetch behavior it defines for a directory on which the
attribute is set.  The attribute is advisory: a client that does not
implement it, or that declines to enforce it, is non-honoring and may
continue to cache dirent metadata.</t>
        </dd>
      </dl>
      <t>This document assumes familiarity with NFSv4.2 operations, attributes,
and error handling as defined in <xref target="RFC8881"/> and <xref target="RFC7862"/>.</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="caching-of-dirent-metadata">
      <name>Caching of Dirent Metadata</name>
      <t>The uncacheable dirent metadata attribute constrains what a READDIR on
a particular directory does: it directs an honoring client to fetch the
entries' file attributes from the server rather than serve them from a
local cache.  It constrains dirent metadata caching only: an honoring
client may continue to cache the dirents themselves, validated by the
directory's change attribute as it would be for any other directory,
and refetch only their metadata.  This matches how clients are
typically built, with the dirent cache maintained separately from the
attributes obtained for the objects the entries name.
A server sets it on the directories where it knows the
staleness of cached READDIR attributes is particularly likely and
particularly damaging.  It is a <bcp14>RECOMMENDED</bcp14>
attribute for NFSv4.2, in the attribute-category sense of <xref target="RFC8881"/>
Section 5.2 and <xref target="RFC7862"/> Section 12 rather than the BCP 14 sense; a
server is not required to support it.  If both the client and the
server support this attribute, and the attribute is set on a
directory, the client <bcp14>MUST</bcp14> retrieve dirent metadata from
the server on each READDIR rather than serving the response from
a local cache.</t>
      <t>Because the attribute governs a READDIR rather than the objects the
entries name, it makes no claim about those objects.  A file reached
through a directory on which the attribute is not set is unaffected,
including where the same file is linked into both a directory on which
it is set and one on which it is not.</t>
      <t>This document specifies the required observable behavior rather
than mandating a particular internal implementation strategy.
Clients <bcp14>MAY</bcp14> employ more sophisticated mechanisms, such as
time-limited caches that revalidate against the server on each
READDIR, provided that the externally visible behavior is
equivalent to retrieving dirent metadata from the
server on each READDIR.</t>
      <t>Allowing clients to set this attribute provides a portable mechanism
to request that dirent metadata not be cached, without
requiring changes to application behavior or out-of-band administrative
configuration.</t>
      <t>A client can determine whether the uncacheable dirent metadata attribute
is supported for a given directory by examining the supported_attrs
attribute for that directory's filesystem or by probing support using
the procedures described in <xref target="RFC8178"/>.</t>
      <t>The uncacheable dirent metadata attribute governs the client's
caching of READDIR responses for the directory.  It does NOT govern:</t>
      <ul spacing="normal">
        <li>
          <t>The client's per-file attribute cache for individual children of
the directory, populated by direct GETATTR (for example, following
a LOOKUP).  Such caches are governed by the attribute-cache
mechanisms already defined by NFSv4.2 and are subject to the same
staleness from concurrent writes; clients in deployments using
this attribute may wish to apply correspondingly short cache
lifetimes to per-file attributes for children of the directory,
but the present attribute does not require this.</t>
        </li>
        <li>
          <t>The directory's own attribute cache.  The directory object's own
attributes (mode, owner, etc.) can be cached normally and
revalidated via the directory's change attribute as usual.</t>
        </li>
        <li>
          <t>Operations that do not return file attributes in their response
(for example, LOOKUP without a following GETATTR, ACCESS).  These
are unaffected.</t>
        </li>
      </ul>
      <t>The uncacheable dirent metadata attribute addresses a different
aspect of client-side caching than fattr4_uncacheable_file_data
(<xref target="I-D.ietf-nfsv4-uncacheable-files"/>).  The file data attribute
governs caching of file contents, while the dirent metadata
attribute governs caching of file attributes returned by READDIR.
The attributes are independent and may be used separately.</t>
      <t>This attribute follows the same pattern as
fattr4_uncacheable_file_data (<xref target="I-D.ietf-nfsv4-uncacheable-files"/>)
applied at the file-data layer.  In both cases:</t>
      <ul spacing="normal">
        <li>
          <t>The underlying NFSv4.2 protocol permits client-side caching that
can become stale.</t>
        </li>
        <li>
          <t>Client caching of the relevant data is widely implemented in
practice and reduces network traffic for stable objects.</t>
        </li>
        <li>
          <t>For specific objects where the deployment knows the caching will
produce incorrect results, the server requires a mechanism to
instruct an honoring client to suppress the caching for those
specific objects.</t>
        </li>
        <li>
          <t>The attribute does not redefine the legality of caching in the
general case.  It is a per-object server-side signal that the
caching is known to be unsuitable for that object.</t>
        </li>
      </ul>
      <t>The attribute does NOT make dirent metadata caching reliable for
directories where it is not set.  Clients <bcp14>MUST NOT</bcp14> interpret the
absence of fattr4_uncacheable_dirent_metadata, or its value being
false, as a guarantee that cached READDIR attributes are
authoritative.  As stated in <xref target="RFC8881"/> Section 10.6, all
client-cached attributes are subject to staleness; the attribute
defined in this document only identifies directories for which
staleness is particularly likely and particularly damaging.  The base
specification separates the two concerns this attribute is often accused
of conflating: <xref target="RFC8881"/> Section 10.8.2 governs caching of the
directory entries themselves, while Section 10.6 governs caching of the
file attributes that arrive alongside them, and this attribute affects
only the latter.</t>
      <t>This attribute does not define behavior for positive or negative
name caching or for caching of LOOKUP results outside the scope of
file attributes returned by READDIR.</t>
      <t>A directory delegation (<xref target="RFC8881"/> Section 10.9) lets a client cache a
directory's entries and the directory's own attributes until the server
recalls the delegation.  It is not recalled when the attributes of an
entry within the directory change (<xref target="RFC8881"/> Sections 10.9.2 and
10.9.4), so a directory delegation does not, by itself, keep the file
attributes returned by READDIR fresh.  NOTIFY4_CHANGE_CHILD_ATTRS,
requested through GET_DIR_DELEGATION, can deliver changed child
attributes to a delegated client, but it is not a substitute for this
attribute in the deployments of <xref target="deployment-motivation"/>:
GET_DIR_DELEGATION is <bcp14>OPTIONAL</bcp14> and is not implemented by the clients and
servers those deployments use; notification cost scales with the number
of delegated clients times the number of changes, which a directory
written by thousands of clients makes prohibitive (and <xref target="RFC8881"/>
Section 10.9.4 permits a server that finds a directory is causing too
many notifications to decline to delegate it); and the
dirent_notif_delay attribute lets a server bound or refuse
child-attribute notification, so a client cannot rely on notification
for freshness.</t>
      <section anchor="sec_dirents">
        <name>Uncacheable Dirent Metadata</name>
        <t>The fattr4_uncacheable_dirent_metadata attribute is a read-write boolean
attribute that applies to directory objects.
Authorization to query or modify this attribute is governed by
existing NFSv4.2 authorization mechanisms.</t>
        <t>Because the attribute applies only to directory objects, a server that
receives a GETATTR requesting fattr4_uncacheable_dirent_metadata on an
object that is not a directory <bcp14>MUST NOT</bcp14> return the attribute value and
<bcp14>MUST NOT</bcp14> set the attribute bit in the result bitmap, as specified for
unsupported attributes in <xref target="RFC8881"/> Section 18.7.3.  A server that
receives a SETATTR requesting fattr4_uncacheable_dirent_metadata on an
object that is not a directory <bcp14>MUST</bcp14> return NFS4ERR_ATTRNOTSUPP.</t>
        <t>This attribute is set per directory.  This document does not define
propagation of the attribute to subdirectories created within a
directory on which it is set; any such inheritance is a matter of
local server policy.</t>
        <t>If a directory object has the uncacheable dirent metadata attribute
set, the client <bcp14>MUST</bcp14> retrieve dirent metadata from the
server on each readdir rather than serving the response from a
local cache; that is, each application-level directory read is
satisfied by issuing READDIR to the server rather than from cached
results.  This ensures that the returned metadata reflects the
current state of the directory as determined by the server.  For such
a directory, a client <bcp14>MUST NOT</bcp14> assume that dirent metadata is
valid beyond the readdir that produced it.  Entries and metadata
retrieved during a single enumeration <bcp14>MAY</bcp14> be retained until that
enumeration completes, consistent with the snapshot requirement of
<xref target="RFC8881"/> Section 10.8.2.</t>
        <t>The uncacheable dirent metadata attribute does not modify the
semantics of the NFSv4.2 change attribute.  Clients <bcp14>MUST</bcp14> continue to
use the change attribute to detect directory modifications and to
determine when directory contents may have changed, even when
dirent metadata caching is suppressed.  Suppressing caching
of dirent metadata does not remove the need for change-based
validation.</t>
        <t>This attribute is advisory, so servers <bcp14>SHOULD NOT</bcp14> rely on it for
correctness: a client that does not implement it, or that declines to
enforce it, may continue to cache dirent metadata.  A server cannot
distinguish those clients from honoring ones.  Observing a GETATTR or
a SETATTR of the attribute shows only that a client knows the
attribute exists, not that it enforces the always-refetch rule, so
such a request is not a basis for treating that client's caching as
suppressed.</t>
        <t>A directory delegation would let a client serve dirent
metadata from its cache without refetching, which is incompatible with
the always-refetch rule this attribute defines.  Accordingly, if a
directory has the uncacheable dirent metadata attribute set and an
outstanding directory delegation, the server <bcp14>MUST</bcp14> recall the
delegation, after which the client follows the always-refetch rule on
each subsequent readdir.  A server <bcp14>MUST NOT</bcp14> grant a new directory
delegation on a directory while the uncacheable dirent metadata
attribute is set on that directory.</t>
      </section>
    </section>
    <section anchor="example-directory-enumeration-with-and-without-dirent-metadata-caching">
      <name>Example: Directory Enumeration With and Without Dirent Metadata Caching</name>
      <t>This example illustrates the difference in client-visible behavior when
dirent metadata caching is enabled versus when the uncacheable
dirent metadata attribute is set on a directory.  In both scenarios,
the set of entries in the directory does not change between the two
calls; an attribute value of one entry is updated at the server
between calls.  The difference is whether the second call observes
the updated attribute value.</t>
      <section anchor="classic-directory-enumeration-dirent-metadata-cached">
        <name>Classic Directory Enumeration (Dirent Metadata Cached)</name>
        <t>In this scenario, the client caches dirent metadata obtained
from the server and reuses it for the second readdir.</t>
        <figure anchor="fig-cached-dirents">
          <name>Dirent Metadata Cached</name>
          <artwork><![CDATA[
Application             NFSv4.2 Client        NFSv4.2 Server
-----------             --------------        --------------
readdir("/dir")
   |
   |                     READDIR, size and
   |                     time_modify requested
   |-------------------->------------------------>
   |                     entries:
   |                       a (size=100)
   |                       b (size=200)
   |                       c (size=300)
   |<--------------------<------------------------
   |<-- names a, b, c
                        (attributes retained per
                         entry, bounded by the
                         attribute cache lifetime)

stat("/dir/a")
   |                     (served from the retained
   |                      READDIR attributes)
   |<-- size=100

                                            (concurrent writer extends
                                             a from size=100 to
                                             size=500)

stat("/dir/a")
   |                     (no network traffic; still
   |                      within the cache lifetime)
   |<-- size=100
]]></artwork>
        </figure>
        <t>In this case, <xref target="fig-cached-dirents"/> shows that the attributes
retrieved by the READDIR are retained and reused to satisfy a
later stat of entry a.  readdir itself yields only names; the
size the application observes comes from the retained READDIR
attributes.  The second stat reflects entry a's size as it was
at the time of the READDIR, not the update that occurred at the
server between the two calls.  This behavior maximizes
performance and is what <xref target="RFC8881"/> Section 10.6 permits, but
for the duration of the cache lifetime it can result in
applications observing dirent attribute values that do not
reflect the current state of the server.</t>
      </section>
      <section anchor="directory-enumeration-with-uncacheable-dirent-metadata">
        <name>Directory Enumeration With Uncacheable Dirent Metadata</name>
        <t>In this scenario, the directory has the uncacheable dirent metadata
attribute set.  The client retrieves dirent metadata from
the server on each READDIR.</t>
        <figure anchor="fig-uncached-dirents">
          <name>Dirent Metadata Not Cached</name>
          <artwork><![CDATA[
Application             NFSv4.2 Client        NFSv4.2 Server
-----------             --------------        --------------
readdir("/dir")
   |
   |                     READDIR, size and
   |                     time_modify requested
   |-------------------->------------------------>
   |                     entries:
   |                       a (size=100)
   |                       b (size=200)
   |                       c (size=300)
   |<--------------------<------------------------
   |<-- names a, b, c

stat("/dir/a")
   |<-- size=100

                                            (concurrent writer extends
                                             a from size=100 to
                                             size=500)

readdir("/dir")
   |
   |                     READDIR, size and
   |                     time_modify requested
   |                     (cache not consulted)
   |-------------------->------------------------>
   |                     entries:
   |                       a (size=500)
   |                       b (size=200)
   |                       c (size=300)
   |<--------------------<------------------------
   |<-- names a, b, c

stat("/dir/a")
   |<-- size=500
]]></artwork>
        </figure>
        <t>In this case, <xref target="fig-uncached-dirents"/> shows that each readdir
results in a READDIR sent to the server, and that the attributes
it returns refresh what a following stat observes.  The set of
entries returned is unchanged between calls; only the attribute
value differs.  The client may still cache other information,
provided the externally observable behavior is equivalent to
retrieving dirent metadata from the server on each
READDIR.</t>
      </section>
      <section anchor="discussion">
        <name>Discussion</name>
        <t>This example demonstrates that the uncacheable dirent metadata
attribute does not mandate a particular client implementation, but
it does require the always-refetch behavior specified in
<xref target="sec_dirents"/>.  The attribute ensures that NFSv4.2 clients observe
file attribute values reflecting the current state of the server in
deployments where staleness of READDIR-returned attributes is known
to be a recurring problem.</t>
      </section>
    </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 dirent metadata attribute and a prototype Linux client
which treats the attribute as an indication to retrieve directory-
entry metadata from the server on each READDIR rather than from a
local cache.</t>
      <t>In the prototype, directories whose contents change at the server
at a rate exceeding typical client cache lifetimes are marked with
the fattr4_uncacheable_dirent_metadata attribute.</t>
      <t>The Linux client decodes the attribute in fs/nfs/nfs4xdr.c into a
per-inode flag (nfsi-&gt;uncacheable_dirent_metadata, declared in
include/linux/nfs_fs.h).  The readdir path in fs/nfs/dir.c consults
this flag to skip the readdir cache and refetch from the
server on each readdir call.  Clients may employ more sophisticated
mechanisms, such as time-limited caches that revalidate against the
server on each READDIR, provided that the externally observable
behavior matches the always-refetch semantics described in this
document.</t>
      <t>The Linux client implementation encodes this attribute as a flag
distinct from the companion file-data attribute defined in
<xref target="I-D.ietf-nfsv4-uncacheable-files"/>; the two attributes are separated
as the two documents specify.  That implementation is posted to
linux-nfs (patches 4-6 of
<eref target="https://lore.kernel.org/linux-nfs/cover.1785140181.git.snitzer@kernel.org/">https://lore.kernel.org/linux-nfs/cover.1785140181.git.snitzer@kernel.org/</eref>).</t>
      <t>Experience with the prototype indicates that the attribute enables
servers to identify directories whose contents change faster than
typical NFSv4.2 client cache lifetimes can track, while remaining
compatible with existing NFSv4.2 semantics.</t>
    </section>
    <section anchor="xdr-for-the-uncacheable-dirent-metadata-attribute">
      <name>XDR for the Uncacheable Dirent Metadata Attribute</name>
      <sourcecode type="xdr"><![CDATA[
///
/// typedef bool            fattr4_uncacheable_dirent_metadata;
///
/// const FATTR4_UNCACHEABLE_DIRENT_METADATA   = 88;
///
]]></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 dirent metadata 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[
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
]]></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[
sh extract.sh < spec.txt > uncacheable_prot.x
]]></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>This attribute is not a security mechanism.  It addresses correctness
of client-side caching when client-cached dirent metadata
can become stale relative to the current state of the directory at
the server.  It does not change NFSv4.2 authentication or authorization
semantics, and it does not impose access controls on the entries it
describes.</t>
      <t>Authorization to set or modify the fattr4_uncacheable_dirent_metadata
attribute is governed by existing NFSv4.2 authorization mechanisms.
Servers <bcp14>MAY</bcp14> restrict modification of this attribute based on local
policy, file ownership, or access control rules.  This document does
not define a new authorization model.</t>
      <t>Because the attribute is visible to and affects the caching behavior
of all honoring clients, servers should consider the implications of
allowing unprivileged users to set or clear it.  Setting the attribute
on a directory forces honoring clients to abandon READDIR caching and
refetch dirent metadata on every enumeration, which can
increase load on the server and on other clients.  A server <bcp14>MAY</bcp14>
restrict modification of the attribute based on administrative
configuration, export policy, or ownership.</t>
      <t>If the client supports Labeled NFS (see <xref target="RFC7204"/> for background),
the client <bcp14>MUST</bcp14> locally enforce the MAC security policies defined by
NFSv4.2 (<xref target="RFC7862"/>, Section 9).  This obligation is independent of
whether dirent metadata is cached or refetched.</t>
      <t>The uncacheable dirent metadata attribute allows servers to indicate
that dirent metadata should not be assumed to remain valid
beyond the READDIR that produced it.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
      <t>NFSv4.2 attribute numbers are assigned by working group coordination
rather than through an IANA registry.  This document uses attribute
number 88, chosen alongside attribute number 87 in
<xref target="I-D.ietf-nfsv4-uncacheable-files"/>.</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="I-D.ietf-nfsv4-uncacheable-files">
          <front>
            <title>Adding an Uncacheable File Data Attribute to NFSv4.2</title>
            <author fullname="Thomas Haynes" initials="T." surname="Haynes">
              <organization>Hammerspace</organization>
            </author>
            <date day="24" month="July" year="2026"/>
            <abstract>
              <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-files-11"/>
        </reference>
        <reference anchor="RFC7204">
          <front>
            <title>Requirements for Labeled NFS</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="April" year="2014"/>
            <abstract>
              <t>This memo outlines high-level requirements for the integration of flexible Mandatory Access Control (MAC) functionality into the Network File System (NFS) version 4.2 (NFSv4.2). It describes the level of protections that should be provided over protocol components and the basic structure of the proposed system. The intent here is not to present the protocol changes but to describe the environment in which they reside.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7204"/>
          <seriesInfo name="DOI" value="10.17487/RFC7204"/>
        </reference>
      </references>
    </references>
    <?line 652?>

<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, Sorin Faibish, Christoph
Hellwig, and Jeff Layton reviewed the document.</t>
      <t>Chris Inacio, Brian Pawlowski, Chuck Lever, Zahed Sarker, and
Gorry Fairhurst helped guide this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIABlqjGoAA+1deXPbSHb/vz9Fx94qS1skfYxmxiPPsRpJHnvXVyxNdidb
GxUINMmOQIBBg5I5jvez5LPkk+VdfQAEJTmV1FZS65qxKRBodL9+x+9drfF4
rFrbluZQHxWFreY6q/TPVZ7lC5NNS6NPbGOqVr82bVZkbaaP2rax03VrdFvr
N8/Prg4mT1Q2nTbm6vCmB1VR51W2hPcUTTZrx9a0s3E1c1cH43V8alzAU3lb
N9a48eNHKs9aM6+bzaF2baFgHHj+48nR+eknldeVM5Vbu0PdNmuj7KqhT659
8ujRN49gUo3JDvVPpjJNVqrrurmcN/V6dajfmBZ/0s8tTPNs41qz1P9kGmfr
Sh+oS7OBb4tD/bJqTVOZdnyCE1bKtVlVXGRlXcEkNsaplT3Uf27rfKRd3bSN
mTn4tFnyB1juMlutgKIjndfLJdDC/UWpbN0u6uZQ6bHS8MdWMP3ziX6RbSoY
ES8xkc4X9TJz6fW6mWeV/TVrYZqH8AUM2bhVlhv61iwzWx7qsp4vNs3v5vjT
BF6rVFU3S3jmysA79fvnxwdfPvpKPn799Ksn8eMX8vHp46+f+o9Pnz4+VMpW
s3SQl+OTyY7dmwFFnR/yyaODQzUej3U2dW2T5UDCIcpfecpPnug9Yah9nZcW
KaaX2UbT+LpdGIXj68xzoNONadewRYWebvT706OTk5fvNW7Q3NnCaAPPac9Q
GwXjNZuJBtJaR2Mit8NHWy0Msmq50VPj2rGZwXJb4KVF7dK3qanBoZHvYS56
XRWmKTc4CC0bBKfQ+SKr5kZfL0xFN8k3jVHXjW1bU43gOwvTwi/D1B44/2B4
G/APPFjVrUbSXU7Uywq4bAnXzaqsN8RONEgDMqHrGb1J40vgMaBGDd81nopq
mV3CZbeGF/uFr5q6WOcGVp/XDc5DO/uroUW0dgl0yJYrfZWVa1h4PYOZa1PV
6/kClz+F+5KJ4Fiw+0tPW2D9NV23QHF6i1OgVRJGoaXDDUuvVeK6gfZercD6
shb2s6yvYQDtTAO8gu+Hza1aO9vgLDwN6UGmLbxrUQPf4zKZArDNqjH/toab
CxwA+AY0zNX2PGZNvSSyysvqShEXeeYCaiNdYWIV3YKvoF0wboX6iAfIQA7z
rGTGnSgSAthKc/EG/2rri/cmA+ZxIBA1K1KQF31aWFjIoV6VJnM45LK+QrYH
ijpYI8rIqrE1UWC1npY2J10A459Yl68dSRFwAj1BSla3tO+rErVEzRxJtNUo
hTh30ogatQX+VFrX6j0S69+hhE9A5+yPFFPVIh8D71wBCbNW/fkve4u2XbnD
hw/xcflq4h97iBceOkP//EDa6QKH/45G35/os3rdwKzyumCms84Bq/EUcCuT
VeRA7ClyBohc79Vz2y7WU9R0D0klXc9ZKz3cYVP2gVp/lLX/RGsPyg3o03uR
vsOL9mV7l7YoSqPUfTQbxPQ4olLHosdgX3BDW1EJpPp62k3v0m7qDtpNk3Yb
MXOTYOOIV3UJkggvV7MaxWgMi/zp9Pzo/Pw96pXZzOZEbHwYqEPPiMQswPpk
JZjQYgPsZ4DN7qY3NRBD1NCWolSsDpHMou/6OhapnlUbUkEjVkZdRaluUZSs
5HgCoI8GtKaiRdbAZiQr8ELQdSWgBOdwVQsLOm6nqlOi6p4xqeoKZBb2mVQ8
3OZymBTIh630x4/xqTFsvL0iHvv0CRjmZSXsLYpyRKMB2lgmGwrfrx2rKz8w
2UB4aWs+oHIVddflAcv2Jqi4grSySbWv2q19AbGUNm6d322gFD+jwjOwzYFn
6+m/ogGJ2zjibQAW2jYqbqSC2e5xs7fQL9u4q0DwhZ3aNp0LkiGuWt5uW2fK
2QgeavhpeAY4HL9KHqX54gJQEbCVBkKn/Otv5kk65o6BdahUc6AQwcbk60Yk
YlkXdmZhicTyI5pM6WoWhqWtWNiUoQmC4iT2g/mlRjLMFQRwmYHFy53a+/jx
Nvz16dM+MgdZsazD+4eK9pftBsthPSVLRzCgcqB8u4wBC6YPV9ZcOw3sVCnC
NnFqiUIorMNZFEDaXThAFMIdgICK7gVyI6EAscrEnllxZZ0JOJEEOe7zFouj
NIGzYFt8K7DYz86bbmCwHIlfwK2wqkKR8AoQ/vRpJPYd3kZEsz3ZBd7JUcMA
LUEqwSFBtQ8b6edOQyHSBsknSdyQeE7XtgQNBIPVK2Fper6pADeQv9SYFaAK
eANz2N6fTt7v82gI4T990nPybFrkMQQd/kVfkIq5r08iPnsd1I/+eH9YLSl1
BLTMmAkTaAcqyKX7wNwCHLnIEEtFKWxrQJmguaMUhMfEopBSbkAWSNbxp4id
r8G82kp1lD2QC011WWeFC7gGLHdBBGw3K4sYC/b6Bajs8TvTkDhWYPqO6+Vq
TaPvvXh3vA965co2dUXqHwE4mC1cAtwAyrBet3BzshI0yvDZgFQirluXwF5E
4QUILywaJoPwpF47EA+cGahkfJ8B1VMgzLZLeCarDNxRbtiKwfQBIs3N2OWZ
SM4YXg+aBLzIlSlJIfDEiIqCzoHVQWJNRVYgIz8S9rCEEdGappQ6D84Gk1IU
cLKsRUZo0tgm9WlAjQ+oaOTyVdaAxlnDtFHXB32GBpqNJHke043yIlhHaIz7
CG6yXvGm4E4IgAHWZOEC1xJ4+EyA7eNHk6/w7iVocVwocwwseic6UkO+X52o
vWnmELK6FF3UU5BxeUZw0KGiVxT4dnrHSE8R//FN6Las8BukDX+RNbKnoBOy
0mJMolDZHMYFSEFqCEcZcOkYjqRbwlyG1GHAosT9iKylO6w1ImxU1dWvpvGk
Ke3M0OQ21pSFmCvV2dML2jz2kJYIfDxOWAYUZBLEFdaFPBbtMvBEAZMt1qCK
NwSgHO2xx5NIJb5RoAFo6o1HmYoIgy4YcBhFmeKmAK/5/TMfLA6LzH5VW4Qu
XofMQRphK5X4ZRU4gdV4itO9zjYEV0xZJpyDr8NJZHluVqT0E9PSoxy7G2BL
FrYEAScnKkv5vwPKkPbPgHRrQEP1ii2p+YC62rGKAoWCI9Dk8P9VcMRHjGhM
MiLZSpNAUMTd4pHTzxTmArKBXnP8/BK0BO8AWDcA8LAJbqKOKrTh4GOgxSjh
7fkleDewMmDhxm2qXLucJBMIU5jcFqRwMhayerUhFUcKeJB3wBoBOEJbg+5C
ZIprC2R3wPCEetylXcEmcSyCoL0IV7DDQCeUGBLyaCmI/UcaHF+SBrJ/gBLq
lRX8ahMxhttISQgrLLPmsuMl2KBKcbGo38lAW3QuLw1qZFdLaGE7UAAsARMG
ssvM/MTRfZZlg9lvvOdNahdndnCRoJoLRh8XAwDbuiS8AO7M0qCasG55h7gG
cVdj3aX3U5T3Uwj80ALGhKYTUIYc47IZap8/+qiUUM4Z8Ybi9OqOghoNUcg7
Fm4LY20HT/RA8ESRhRiMkyBomdmKXSol4yt1qI/6jq7XMXsYLR2RxrXFPsis
bZgaeB2ZhP2TRrn1NA4hJjLTXQtqyQEkoQiKZAl6HW2Gw33AKJb42XiXwUVm
pJqiCguRoDxriBXFJl3Dq56hG2CZ5jTVd2/PXv4JtUeNMAskv7jAiTPuvrBV
DfM68hiZHZzgGQFOzct1cXPoIPGwbDtR/S1D2p4PPL6HOmCkl2wUcrEN/A8o
BPi7vgbwCVCuzSf70RQTUbcoMRCzqFrGLJ8RYBU/j3Wg3BL2j/zxjeqHX/tD
4PZ247AUxwC8CxgLCQNg7rbIrIAt8tbv9eh5z7sHKvo+yIWwqSRBdQWsYlGX
k1jfG9o61kzAO1dGDdLzHrFRcJABs5smWLxeyJpiNLbdDjejxI3zmiI4uYkO
ZuQR0SEsfn3lYjxs4JtJqS2BPdFID4qmQn6n73xQgyw82hVDPoxfpQAGVleE
KAXJ0muB1ZYkjQRRkLjz+sp4GHjb1h32Igf8vWN+8bKNg4IdxUmNJAgLH2C3
YKGwooJBEhs5noJjfIE7CiJMLJxh+MHJgKyLAjBlPkbJTsbAlRoYIVhM1FH0
DCmENO4cvsGnVdzswyTuJopPCIBTGUL5OBKYR3C112wvjJXXyGsFGPE0EY3V
LduVnhNMyTjYOdyZLvts65zPYqz41IBGI25XAmZHuxirF++EVfxo8gxuFmnp
UZGcS5QrWwV4fxfeUnt1hZHQzc7oJ/tn+yMm3WAgVaWBKNwsMFsU3ELPO0BE
ZFeyPcNpqMYo760lZi0N50V0HKOoaHhZg3f1V9xZ2Mq7RW5wY6uA3Lv6TdQb
BW9ciN6ISmcR19tDO1fnlnaCmD8xBzHUCM8N8DhMugdgUr7j2djlqjQ+o9ZB
mjiWwTCfhK5UVoK74cYgqogT9dSAV40pGVTIREHHaiDBK3UVU36qAwQBf4kx
6Vwm4lDOu+vORMPv5wuvHbGMMqjnMAIQUuZM3xMGrMaBCrimZbahOLKt1iZ6
2T2yb4XxYBvWqMlmYM1KmwGbM5QKW12vBBmjpxqDwYrI2DQwUxCaglJNiHUi
y6UhAbw5DZohLHzPuTveo1cgeOtsbhh9X5oNZrPA8733+uez83sj/le/eUuf
35/+488v35+e4OezF0evXoUPSu44e/H251cn8VN88vjt69enb074YbiqO5fU
vddHv9xja3Dv7bvzl2/fHL26tx0fpGAVJRIsFhSAA4R8DPzaSRf8ePzuP//j
8QGs/B9g6U8eP/4GSME/PH389QH8gFIvwSRUNPwjoR4MEYGXimChRDC9sqAq
cAuAxRYA1DSqF6Djb/+MlPnLof52mq8eH3wvF3DBnYueZp2LRLPtK1sPMxEH
Lg28JlCzc71H6e58j37p/Ozpnlz89gcUAz1+/PSH7xUyz3GM/vdrUlQvM3JD
XjqxcOIhxKCT2hEtQIk9JN1Al9yQOwWswbqE0gFsyx5sgcK+a9XPQ5MXsBSv
SqVeFWVTts1z3xoTUx2mE1TBA6Kgbk9XDGO/ke7bTHWTzWSYBOK7LgtOvDYU
4eJIYnRDFYelmE7E/RzHDJpKzNwyY+cdmD6YFjSHEitG84xh91GEUAlYMcHX
g8k7AxsKyyg3gfRqKI7oQ0dijDiML9E1RFATdZR627ha8Qe3oxXw3WVVX7Oh
idYeg4AMCUMOOImduYTzYLIc4UAtoTrXi2yZzRGOETuQT5KIWGKWkvKLkc8i
hW/HvhxLY+UVQbVEcysfzP0STEFPi8dA75MO7+LwoPo0aD4a8lkM8UnsIi3b
cOsVRqHQlYV1zPS0lm0UVpV8sR/B39416jGt3DfGFP2IDDtKhyZFeWPZiLo1
8nFL2Yjqh0MiTk3nyg6PSx3DHkETZlQpM1IWkkuBqhqzPRaUxRTDlYyE5TmK
OZACagwxHqysoTjTLljTpSRFnEzLKTfOwILXJOEKCnZLcE78Ie+Zg9q+JGOI
1hJ3duh1iiIoND6bQhNnwl/B67eQi1uZHAGxlEx5luLkJyn+gOTSIBX4xBwG
74aDyY5jni4AMc6toYoF+dhMQtUHmCttlphM00v07Vy9gnm1mIGloKjE/hIQ
i8h1XNqlxRuIESQiELMNOiYb+gynhCVGmEC6spjECFjfZxdBG2Aus7NoAPxI
kyvUOW1SIEXB2B1RPjXM60D7I8zVRhPnOG/Yl0M/ReRkFFPahkASRZOgdIHA
2940kMum3lseBVeW95ZeLs49eoQx6x3XjP+t23E94zRCViwtvBi3ECMvYPFm
dr4Ogd7gMWAQvTAtJ/GRlYPHfDfnCJmX9ZKYDx9AjLwOltN8wIiRVxPhgQsc
x/XUdSCPN7OxwggXOaVs4hTH8gpxjalPFZLfxRr0UL96JSTAJ5+DkrxyipoT
S3YiAOvHslywoGko1td/IBLkEQ8BvZKn5AfFLMq451qyFccBY6oqTeqAh9h5
E0hJvQKJFrTC10O8YI8yHbAPK8wJcv0Ukk3Djr16+/YPP7/bh6me+ZpKiRz0
w1Gp7WTnNkp9qK/ynhA8412pTNLcSQDAK0x0dAM6IGnsZ1LcsyB6tupUjPLO
674oIsa7tm7hhWXDKSjcI9TYmNlZ+NoYfL9PnZF0be8E72qaTuvSHUaYrlup
vqAah6F6LlHTNNeJ3/+Uz9G16e2++NP94iC+GbcuiXFvB7J9AaDgLSqdLgVO
6TTfCxo0uzUihOh27YAHafJvg2/svXlZJIa1tvA+Iy/bBEGB93cZklnQ6z0M
+HkO9Rw80kfHx6dnZ/s+1I7rb0xilD9LtLOiwBwn6evCwgiUnMnQtFK+cyj/
xKme7fwYLveCPLC71TMlBQ66p0+9xunXeFGZnNR74M8DMUW1rbf6o9xcaz5R
neANa4A0nSCxFuQpik5Gt8JDlFSVU6FzxEUr+A4mhajgJhLqu5GQS7+4gMPH
dMf0fJltTMPFCQS78sxhEb8IXBJf9LoJjEZb53UZCjZ2bH0LDMcSRQlYUlok
C8felKYVfUDgEiQMrvuCrWsYD6QvoCwyTTDmCpsJbG6kWoELyyppLUjLWiUw
73Etvvo5XmY0mAegHAFpUvkUfLEwT8x10+v7lfNSJTTqeOisvVBa0hyvop6P
tlnng+lncXKkmCC+mq1kTTLcn37QjYM6lG0LDVaaOSiwduNdyhDJx1G5mqyk
3U+8RFTuUmDJC+NddnaOANiDS9roEM9GylUS84pFdxGrSAJEqYFJo8lHF2Vn
nAK4xPrh1KATHV0QWEdA4hLoikE49unBA8D8F8r7rWl8irUiv1NbBKyOSpqz
0hmKtQGQW4N0w/gS5d7ttmNQgjuBbEt4E30uSiS12wHRtEZqhCE+icyMZfye
/hlKGTzrYhHVi/ZHR4mCK1KGgERNCRwKEVSnYHpH/EHvij/gpk+ByZTnY3Ge
RDUy34MsE6oRMNlRlFhiQw0pWZ6jVlVUJlXNSnLVDnfR7ilWEW2r+W5GMCmE
DyEtth+dSrUd49yQyu2krczSByG62QYyy075CBdoZrQA26YiiLcId/BpcItW
tbPIUsisFUg8uTOUzQuz5RuTyQuY8NWOACj8TLXL6xV3ENzFHqq0UgO0N70f
q1d3bMo3+76aJ482waRRmAculrVvtwN0MSAGHFpbJmoY/EEM/DlR7n4+QcGx
jsRbMLfkywbSSN8MXqt8rROVjXSm4FHf0AIdrZDBvKKPB/tUfJQNE8lv6whJ
6svZL41ZDWV7B3vfZrCDC8zTvj1/+fyXg4vjF0dvfjqFf16+OrlATHg2UuJV
U2iAwzqAFy/g6YuT01enPx1hQH0kbm5p0ZTxEgsG9OkUKNEsC8DvpcgNsX3U
wxlqJNfaNvqrNnVhPUUTL4XiijvaJw7V9nTxVT4TIM1EnMJNkIP4YyEsDFsS
qskp+tV1k8wzHCGqJ2oYoeJdl6Tm18sp8BhVTHeJ4LS4R+EuMrockvC1Jwkb
+PZAnmZa/xn6IKmTS5ohULz3Qoi1F35lTkuqaX3jHNem4sApA1Iues3l8LUU
cadLd9yBQslF/shLhS3efxZCrmIq6cELuAVA766CPaqi5YKKGRBaEVuN493p
y0VcYuyFBbakgGB6o0LOIvZHu4RJw/s3tjF/vO9MLgbeffrvFfJhUUJWjMnl
hlXVpQFV0c90x4aavlOKRZuMAbipF+8B0cTvGy1ll9umLwkwKCqXTZF51hkv
Rhp2BpP99NjkDMxx1OUfJYXxuHgfKEmqeu9AQYyxV0ogJaffvZ6ILw9oTdzj
7qQZfqEEh/s4vJjehC1DolrYrOGVZbbitKjEgykCpxCj+ohc1wcftFpPJ19P
vqAg+Q7CnP0vE0aIApt+cPr+Pel1oMHZz+/ebUMFiZV3a477fbo9PIFNbqtM
jJI4Zwlbo4syTYGhVEuFssq0N6sbm4epPKMMH4W7pTiNWjZInJaEdxBscCJE
6LuqS5ujx/xy1s0JMK2wYvru8VeYwmcmdoaC3Sj4hd3Ow+7oB04zss/85koj
TBKcHoMDbMpOg0CGxkw5+NoRvyIycOBSxY6KEBrczgxzcJBzOILt/N7jyQmN
h6g8Y4ETScXVrAx5JB9fJBdlK6LH5RwSFA+2lmcEbySnG3ZcdWuLO1uAUswF
JsPxfqAC1/xNzaYWIOh3gR4Qt7zg7OBpghlDvCf0ROpizbUw0gSUVnVT0mZK
BOEcr8eUIOTpbdiZAYYNzXnSOhewgauylVvEMOZSykt3eyefFY0LIhsMBfKo
FHH6/QkNWNslrB2/OEnvK28jtqKZZPpbFLikVYrqzDxOICxQq052JM1r+JAc
hcSoHUmQ5Yg6C+n2XdWCWvImFIIsKPDOP1DwRCoKQ5tqfDyJhEg7PQAMI6kX
fv0YvdFC+aYXqevva1FflUWIxCPHWNkSQIml9nWVtHDsquPSt9ZxqbSOa7gO
o1+zlZglRktAUDJBawrvc0+G7D03tfkIFLWRaP126vVYtPBY+R6s2pZBwBoj
jyA6tfOxmiHezB0+UsRNerDtVNjpXoVds8Zgt6uVVAH7nGCwjdzmRX4FmqFQ
3hgSRZ6BMlCjkYF2eqpcjFKaZB1cYNNvgCbqUfSTNsIH4mXidO5LUmKO2gJe
gEKNd6odS+0DPikqxG3NgaU4GTPSdtaxsp9lAUPuHNEGOPotdxMOUqMT0RRL
ic4yQ/7ktmyGhjsWBPhumiSmPbRaf7wGeojU5NR6nZ4ycrAPc4yuYTm9uU5c
p2Tzuu0rSeT/Bsps1WRyhU6aU6UaxFPOvBySK8Hjnybm4I+o+JGsfxRG6Hsc
x77sme0vj6ZtWa65bkBiFJJZofiyD6xv5etv05SmokZsOltn7dJ+iLscApBU
w3TTspIgcDmM39jajaTmhfI/PkqzFSEJ+k5MytS010Ym1F7XigI0CAu3ID6M
igUeoSx/veLsW5bWPig/Ho0TEoCRjK6TpQe3D+EDcbE0v3NDThy8Mwl2JY+x
NdrmO/Z+b2ivTbEfT3rwJOtAT0kb9zfCF5epftEfpzuoI9u2IXEuC/Jyo9Rf
//pXdZRUPKR/PCKQDEzv6hkTdBz/dB4ed/4MX1Uyj717D+Hve/t4ONW/0196
6E+oV/Gl27tv7XYjSgyLbh8P/Pl+6CJ9sfsNwsGHu+/A3D/1Rn33+NGj/Zvu
m8p9T265L5f7vvD3fTs06cGLRG55xPe7jfQU4Kja8TK9140fMr4F33DnA77d
LWmJ5nTPLvL0ijF8ocA+HZ/WMlc8zO7dQJM94vYilrz6id5Axu0USyCm9tul
ds96aBb9moqGj3co3GcNowUn+ElwBvAz/tCDXyJz3J2AVd3Phj4Dv42Tl7so
mMS2+zun+4REBfPxUN+f2bnkoMahFBiPEvzu3rA+vPcpKkRMM470x4/bY4Bf
xIhyu0vFJR6c+Jhh55vEYwuKkqtGyXneoBee4T4iHb3BgqsTHfxI6bCUTnpC
tCRXz9i9QhVF80mUqzch6A6mddphLjLBJGwuJkr0Ns0muNoypwe+X4vrozOM
l7O9tMvgfQfdyVjaWzDJsebEvd5W+vhFz/YmNpNOwRF4scw+2CW836lVcqqG
BNap+v22MxwoCaBCbZfU0fmZ9/rvLVfVSZjOVt1TaurgkIih7BnoTj2NEkry
a4ZiFhKUIKt+A5K76STLHVb9s/C46uBxYYl+h/Xn1hn/3fj/3fjng4bi/5Uh
/Btw2eDte6zHyLUBTQXKCzG//hsx5Zf/d5nyyx6oEL15K6x4A5S/GVr0R+qC
izSU7wPk3TMMnBRlRZ3rKze2sYn11ZyIrSkV6TvFYmkmYw/BDAEIUGDY+8/x
MAUsZ/C5946T+yw0QSWJDXaZ2fF1XYOCoUMCgL7Fmrzh5Py6kUr6BTqtAkMt
EhhgSLsF1B26BXY0Kng77M8v7UVHCrPkzrU2TVXczazGCDl1cZhuD4c/F7bT
wcGoxR+uEOuPt4JXgRQxkQiw5ePHNKf8aau3t5Nz6R6O5mFOv4bIQxyBNT69
dAOywYmkpQxcFtdpJxPaj2NLfaehjMr3lD/7EjANvExODKZTfumQ027nyxn8
u/4fO872nCv5qPwQS03bzcqkB177lUp4Ne3eNndrUef4ZzL6K1utP/gGcQlj
YjjZ9fPl1MOJ7QV5yNl3kocEAMdSMPSZJ+MkSbtuD6foNhMnPOr1D1JY36dX
QuomjZKRIqIj28yH3BgK+foz9Dq1V7G2P6PT6JpLSe0S8PycGglJaKW0xewG
HZLXJSvo3Jl7WPH/Bx+KZpJzH1iGHsjY4ulnelZmczqd2I6/v7FKEzModDoh
iIIckvOwxEng6BczN1n4gnLv+K2A/skkMI6We5uO0UHMMODb0ZvEI67S5KNU
rCUdqrcljVGHJyk41M47m8TUQJOY/swmsR2dWrc0iUXNrxLHsJWXbanEmHzs
NBJ1DpMYYoheD52pPH90SyPpLCfYAklngYcXZIpSKxWdwhpq2ocOtlB3qZN/
Flzjflmt1KcWKoslqn5hvqKESyuyrVVhmWzNNXe1IlbEGei9ldDzYPwVQoBv
/WnTJfDB5BLrfEo6TDs88jDH8p/J46+ffvn44NHjp48nc9tOXGXbX03zu+SJ
7/Fg6tMPID183FDIS0edJ1rMDEVaJIPgYo1ccjrZ7apnlrlW9Jlvvu6fBtpX
NnQ4HZ7g7Atu+aQfakTv5s70VtlTenrRff2nk/chOH6n32RBXrMGraMePnyI
/6NixMJ5KupKsfHt2u9ZGIN67vVzzJkeXPz85vjo+MXp0Y+vTrF28fTN+cXr
0/Ojk6PzIxj2O/30KT+IKJhyTfQLEyRkAgvqN7QiwamdPxVaLWUb2+fGqvTc
WJbPVRqQuZPRFJ2Js0mHQN7mF/oDwGAzqlBvmOW2xCJ32GLAAdjZ6JemWMOT
WtyM23qM+2y5sh8UzUSf1/5umuSS8ltmjPfTTHszoROA6M4Eby/wWEi+5ZD3
mS6p+//wcGqrh26h5kAw/eBf9G+B/g/0b34LjhEGDh+4H/ia/uGHB/1rv4Fr
vFfP054sK0CMXkcpajwwSj+QVUzc4kGs+05OCFNyHyqRSfuhfTCCMQF3tf3l
4AGwMEBnJW6h4/j6W+0H0d+n23qBcj/5wJM+5+AVzZJxmcOzFwkTTMusutSE
s2LFNe4ukB4rsvgoSv0AqcUZKrIpWLIwIdFLdiQpld0eAZWqWYKZKGKHeS1d
gYnBYEjpFRS+gH5lgAjAUA8Dt1/xwXsgxy5Gzby+QJAhBOE2r73dZynvhzOU
GEk4RTlQVN88OnuSlRxNlOmDaKfr2QycuwM82LKat4sDbjPECkR1TceVOrb4
9Haby4D+6TXIxxdPLjhZjz98dXDR0rHlPqtN1OCWRT4mmAPeLHi9dUjmEWkH
5gLuBmADrrCcvEG/IqKIbYcwXFMDPM8oPpnHzZQcQVDBMAVSumfoJmBv0THW
QhW+13GokkaKwv0DAeBwUX5sM0xKaNSO/kJKbHe7YfoOYb8BDQt1qCcinHF/
S2VbmwRce2fTi7VLq2+RzX1qoOnW48b6LI4h2G4pEJ3cl+dy5mvb1GU4OzKk
1ttwaBCauq3qYYokJLXDd4Hr3fKHtH35M6qLzwQlYOkc7B4MmLed4rBwfndS
oItVV7hC8nQUF3mO5GwvbMp1C7uisqguVahyxA3WsKqkJ4arRHpTBu4vd9ZC
w2i+0ALtEnqI3JATchakHwULI0tiDUGvgw9RuhBDpCsXgaBREBfGzMZMZV6z
ryuQtitYOwZ7YG6NSzY0L+l8J0wTnJk2RAFi7KdX9yLlVP2p0bLwsIM6Hlca
qqMqLBFlKL9VkFBhfR51R4UsiS9uAvFSdO4w+vh4VHs4gzvWLOD2t8mvI+rU
9hz9om7gGDPEMDcd1TCi01SbVnt+wmMePDdxCXFSgSF133im2NRgwQywOiag
jWjOJ4/w5C0Ek3ieMv6ynKrY56qXtHaVOLjchGPX8PvXR8dRx9FkqJ8udPor
L1V7yTE5o5BM+ybYnXpa2nlwI3qHlfrKlu1qWd99yH0WdKrxZ/Z7c+lW6gCI
w6AGC3SF3eVcDi7llV+2hECeT4ZSSfVuqF/uV+9SgOnozdGwLQkSj1m2quY7
GVGiUgzKKvaTUP8Ne3FYxTMX/db9HUh5TeV1rKm7J+rI4TcVv6oxc+S97Sp6
KsyJMiltP0+fjsBOgHKvkhbA/uT006/v6qDK7xtCfkQ6HeUYrgPWnfMvt/l4
yCOa4rt71JqKkfHzBmn+enNZmunatSP92l4afcZe40j/HljrebmpQHj+gCeA
6tcA4IEAcs49/yo6xb+KjnQeUs4ESY8eJexjEqaDmb63+SWMlsOLlyN9vFjD
j68MRdFPsP73DZgb9PjOUE/p55mdWrfAGxsgcb1aqBcAk67tnCfyezObgaRu
2rqiX8hhriVencBFelS/rMDtqEf6R0AwlX6XXSMrX9reFP45QwE5wwgXh/XV
TwA5NjiPZrFuwHsDgA2OoJ6vuRuSXB36bSET9V+WhL/2OXEAAA==

-->

</rfc>
