€•gRŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ./translations/zh_CN/admin-guide/nfs/nfs-client”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/zh_TW/admin-guide/nfs/nfs-client”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/it_IT/admin-guide/nfs/nfs-client”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/ja_JP/admin-guide/nfs/nfs-client”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/ko_KR/admin-guide/nfs/nfs-client”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/pt_BR/admin-guide/nfs/nfs-client”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/sp_SP/admin-guide/nfs/nfs-client”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ NFS Client”h]”hŒ NFS Client”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒH/var/lib/git/docbuild/linux/Documentation/admin-guide/nfs/nfs-client.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒThe NFS client”h]”hŒThe NFS client”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)”}”(hŒÞThe NFS version 2 protocol was first documented in RFC1094 (March 1989). Since then two more major releases of NFS have been published, with NFSv3 being documented in RFC1813 (June 1995), and NFSv4 in RFC3530 (April 2003).”h]”hŒÞThe NFS version 2 protocol was first documented in RFC1094 (March 1989). Since then two more major releases of NFS have been published, with NFSv3 being documented in RFC1813 (June 1995), and NFSv4 in RFC3530 (April 2003).”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)”}”(hŒžThe Linux NFS client currently supports all the above published versions, and work is in progress on adding support for minor version 1 of the NFSv4 protocol.”h]”hŒžThe Linux NFS client currently supports all the above published versions, and work is in progress on adding support for minor version 1 of the NFSv4 protocol.”…””}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hhËh²hubhÝ)”}”(hŒ™The purpose of this document is to provide information on some of the special features of the NFS client that can be configured by system administrators.”h]”hŒ™The purpose of this document is to provide information on some of the special features of the NFS client that can be configured by system administrators.”…””}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œthe-nfs-client”ah ]”h"]”Œthe nfs client”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒThe nfs4_unique_id parameter”h]”hŒThe nfs4_unique_id parameter”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KubhÝ)”}”(hX8NFSv4 requires clients to identify themselves to servers with a unique string. File open and lock state shared between one client and one server is associated with this identity. To support robust NFSv4 state recovery and transparent state migration, this identity string must not change across client reboots.”h]”hX8NFSv4 requires clients to identify themselves to servers with a unique string. File open and lock state shared between one client and one server is associated with this identity. To support robust NFSv4 state recovery and transparent state migration, this identity string must not change across client reboots.”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjh²hubhÝ)”}”(hXWithout any other intervention, the Linux client uses a string that contains the local system's node name. System administrators, however, often do not take care to ensure that node names are fully qualified and do not change over the lifetime of a client system. Node names can have other administrative requirements that require particular behavior that does not work well as part of an nfs_client_id4 string.”h]”hXŸWithout any other intervention, the Linux client uses a string that contains the local system’s node name. System administrators, however, often do not take care to ensure that node names are fully qualified and do not change over the lifetime of a client system. Node names can have other administrative requirements that require particular behavior that does not work well as part of an nfs_client_id4 string.”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjh²hubhÝ)”}”(hXThe nfs.nfs4_unique_id boot parameter specifies a unique string that can be used together with a system's node name when an NFS client identifies itself to a server. Thus, if the system's node name is not unique, its nfs.nfs4_unique_id can help prevent collisions with other clients.”h]”hX!The nfs.nfs4_unique_id boot parameter specifies a unique string that can be used together with a system’s node name when an NFS client identifies itself to a server. Thus, if the system’s node name is not unique, its nfs.nfs4_unique_id can help prevent collisions with other clients.”…””}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K&hjh²hubhÝ)”}”(hX)The nfs.nfs4_unique_id string is typically a UUID, though it can contain anything that is believed to be unique across all NFS clients. An nfs4_unique_id string should be chosen when a client system is installed, just as a system's root file system gets a fresh UUID in its label at install time.”h]”hX+The nfs.nfs4_unique_id string is typically a UUID, though it can contain anything that is believed to be unique across all NFS clients. An nfs4_unique_id string should be chosen when a client system is installed, just as a system’s root file system gets a fresh UUID in its label at install time.”…””}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K+hjh²hubhÝ)”}”(hŒÙThe string should remain fixed for the lifetime of the client. It can be changed safely if care is taken that the client shuts down cleanly and all outstanding NFSv4 state has expired, to prevent loss of NFSv4 state.”h]”hŒÙThe string should remain fixed for the lifetime of the client. It can be changed safely if care is taken that the client shuts down cleanly and all outstanding NFSv4 state has expired, to prevent loss of NFSv4 state.”…””}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K1hjh²hubhÝ)”}”(hŒ«This string can be stored in an NFS client's grub.conf, or it can be provided via a net boot facility such as PXE. It may also be specified as an nfs.ko module parameter.”h]”hŒ­This string can be stored in an NFS client’s grub.conf, or it can be provided via a net boot facility such as PXE. It may also be specified as an nfs.ko module parameter.”…””}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K5hjh²hubhÝ)”}”(hŒïThis uniquifier string will be the same for all NFS clients running in containers unless it is overridden by a value written to /sys/fs/nfs/net/nfs_client/identifier which will be local to the network namespace of the process which writes.”h]”hŒïThis uniquifier string will be the same for all NFS clients running in containers unless it is overridden by a value written to /sys/fs/nfs/net/nfs_client/identifier which will be local to the network namespace of the process which writes.”…””}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K9hjh²hubeh}”(h]”Œthe-nfs4-unique-id-parameter”ah ]”h"]”Œthe nfs4_unique_id parameter”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒThe DNS resolver”h]”hŒThe DNS resolver”…””}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‹h²hh³hÊh´K@ubhÝ)”}”(hX NFSv4 allows for one server to refer the NFS client to data that has been migrated onto another server by means of the special "fs_locations" attribute. See `RFC3530 Section 6: Filesystem Migration and Replication`_ and `Implementation Guide for Referrals in NFSv4`_.”h]”(hŒ¡NFSv4 allows for one server to refer the NFS client to data that has been migrated onto another server by means of the special “fs_locations†attribute. See ”…””}”(hjœh²hh³Nh´NubhŒ reference”“”)”}”(hŒ:`RFC3530 Section 6: Filesystem Migration and Replication`_”h]”hŒ7RFC3530 Section 6: Filesystem Migration and Replication”…””}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ7RFC3530 Section 6: Filesystem Migration and Replication”Œrefuri”Œ-https://tools.ietf.org/html/rfc3530#section-6”uh1j¤hjœŒresolved”KubhŒ and ”…””}”(hjœh²hh³Nh´Nubj¥)”}”(hŒ.`Implementation Guide for Referrals in NFSv4`_”h]”hŒ+Implementation Guide for Referrals in NFSv4”…””}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ+Implementation Guide for Referrals in NFSv4”j¶Œ9https://tools.ietf.org/html/draft-ietf-nfsv4-referrals-00”uh1j¤hjœj¸KubhŒ.”…””}”(hjœh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KBhj‹h²hubhŒtarget”“”)”}”(hŒk.. _RFC3530 Section 6\: Filesystem Migration and Replication: https://tools.ietf.org/html/rfc3530#section-6”h]”h}”(h]”Œ6rfc3530-section-6-filesystem-migration-and-replication”ah ]”h"]”Œ7rfc3530 section 6: filesystem migration and replication”ah$]”h&]”j¶j·uh1jØh´KGhj‹h²hh³hÊŒ referenced”KubjÙ)”}”(hŒj.. _Implementation Guide for Referrals in NFSv4: https://tools.ietf.org/html/draft-ietf-nfsv4-referrals-00”h]”h}”(h]”Œ+implementation-guide-for-referrals-in-nfsv4”ah ]”h"]”Œ+implementation guide for referrals in nfsv4”ah$]”h&]”j¶jÍuh1jØh´KHhj‹h²hh³hÊjæKubhÝ)”}”(hXThe fs_locations information can take the form of either an ip address and a path, or a DNS hostname and a path. The latter requires the NFS client to do a DNS lookup in order to mount the new volume, and hence the need for an upcall to allow userland to provide this service.”h]”hXThe fs_locations information can take the form of either an ip address and a path, or a DNS hostname and a path. The latter requires the NFS client to do a DNS lookup in order to mount the new volume, and hence the need for an upcall to allow userland to provide this service.”…””}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KJhj‹h²hubhÝ)”}”(hŒAssuming that the user has the 'rpc_pipefs' filesystem mounted in the usual /var/lib/nfs/rpc_pipefs, the upcall consists of the following steps:”h]”hŒ”Assuming that the user has the ‘rpc_pipefs’ filesystem mounted in the usual /var/lib/nfs/rpc_pipefs, the upcall consists of the following steps:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KOhj‹h²hubhŒ block_quote”“”)”}”(hXw(1) The process checks the dns_resolve cache to see if it contains a valid entry. If so, it returns that entry and exits. (2) If no valid entry exists, the helper script '/sbin/nfs_cache_getent' (may be changed using the 'nfs.cache_getent' kernel boot parameter) is run, with two arguments: - the cache name, "dns_resolve" - the hostname to resolve (3) After looking up the corresponding ip address, the helper script writes the result into the rpc_pipefs pseudo-file '/var/lib/nfs/rpc_pipefs/cache/dns_resolve/channel' in the following (text) format: " \n" Where is in the usual IPv4 (123.456.78.90) or IPv6 (ffee:ddcc:bbaa:9988:7766:5544:3322:1100, ffee::1100, ...) format. is identical to the second argument of the helper script, and is the 'time to live' of this cache entry (in units of seconds). .. note:: If is invalid, say the string "0", then a negative entry is created, which will cause the kernel to treat the hostname as having no valid DNS translation. ”h]”hŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒvThe process checks the dns_resolve cache to see if it contains a valid entry. If so, it returns that entry and exits. ”h]”hÝ)”}”(hŒuThe process checks the dns_resolve cache to see if it contains a valid entry. If so, it returns that entry and exits.”h]”hŒuThe process checks the dns_resolve cache to see if it contains a valid entry. If so, it returns that entry and exits.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)”}”(hŒßIf no valid entry exists, the helper script '/sbin/nfs_cache_getent' (may be changed using the 'nfs.cache_getent' kernel boot parameter) is run, with two arguments: - the cache name, "dns_resolve" - the hostname to resolve ”h]”hÝ)”}”(hŒÞIf no valid entry exists, the helper script '/sbin/nfs_cache_getent' (may be changed using the 'nfs.cache_getent' kernel boot parameter) is run, with two arguments: - the cache name, "dns_resolve" - the hostname to resolve”h]”hŒêIf no valid entry exists, the helper script ‘/sbin/nfs_cache_getent’ (may be changed using the ‘nfs.cache_getent’ kernel boot parameter) is run, with two arguments: - the cache name, “dns_resolve†- the hostname to resolve”…””}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KUhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)”}”(hXÌAfter looking up the corresponding ip address, the helper script writes the result into the rpc_pipefs pseudo-file '/var/lib/nfs/rpc_pipefs/cache/dns_resolve/channel' in the following (text) format: " \n" Where is in the usual IPv4 (123.456.78.90) or IPv6 (ffee:ddcc:bbaa:9988:7766:5544:3322:1100, ffee::1100, ...) format. is identical to the second argument of the helper script, and is the 'time to live' of this cache entry (in units of seconds). .. note:: If is invalid, say the string "0", then a negative entry is created, which will cause the kernel to treat the hostname as having no valid DNS translation. ”h]”(hÝ)”}”(hŒÆAfter looking up the corresponding ip address, the helper script writes the result into the rpc_pipefs pseudo-file '/var/lib/nfs/rpc_pipefs/cache/dns_resolve/channel' in the following (text) format:”h]”hŒÊAfter looking up the corresponding ip address, the helper script writes the result into the rpc_pipefs pseudo-file ‘/var/lib/nfs/rpc_pipefs/cache/dns_resolve/channel’ in the following (text) format:”…””}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K[hjLubj)”}”(hŒ"" \n" ”h]”hÝ)”}”(hŒ!" \n"”h]”hŒ%“ n—…””}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K`hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´K`hjLubhÝ)”}”(hXWhere is in the usual IPv4 (123.456.78.90) or IPv6 (ffee:ddcc:bbaa:9988:7766:5544:3322:1100, ffee::1100, ...) format. is identical to the second argument of the helper script, and is the 'time to live' of this cache entry (in units of seconds).”h]”hXWhere is in the usual IPv4 (123.456.78.90) or IPv6 (ffee:ddcc:bbaa:9988:7766:5544:3322:1100, ffee::1100, ...) format. is identical to the second argument of the helper script, and is the ‘time to live’ of this cache entry (in units of seconds).”…””}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KbhjLubhŒnote”“”)”}”(hŒ§If is invalid, say the string "0", then a negative entry is created, which will cause the kernel to treat the hostname as having no valid DNS translation.”h]”hÝ)”}”(hŒ§If is invalid, say the string "0", then a negative entry is created, which will cause the kernel to treat the hostname as having no valid DNS translation.”h]”hŒ«If is invalid, say the string “0â€, then a negative entry is created, which will cause the kernel to treat the hostname as having no valid DNS translation.”…””}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kihj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”Œ(”Œsuffix”Œ)”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´KRhj‹h²hubeh}”(h]”Œthe-dns-resolver”ah ]”h"]”Œthe dns resolver”ah$]”h&]”uh1hµhh·h²hh³hÊh´K@ubh¶)”}”(hhh]”(h»)”}”(hŒ%A basic sample /sbin/nfs_cache_getent”h]”hŒ%A basic sample /sbin/nfs_cache_getent”…””}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¾h²hh³hÊh´KqubhŒ literal_block”“”)”}”(hXû#!/bin/bash # ttl=600 # cut=/usr/bin/cut getent=/usr/bin/getent rpc_pipefs=/var/lib/nfs/rpc_pipefs # die() { echo "Usage: $0 cache_name entry_name" exit 1 } [ $# -lt 2 ] && die cachename="$1" cache_path=${rpc_pipefs}/cache/${cachename}/channel case "${cachename}" in dns_resolve) name="$2" result="$(${getent} hosts ${name} | ${cut} -f1 -d\ )" [ -z "${result}" ] && result="0" ;; *) die ;; esac echo "${result} ${name} ${ttl}" >${cache_path}”h]”hXû#!/bin/bash # ttl=600 # cut=/usr/bin/cut getent=/usr/bin/getent rpc_pipefs=/var/lib/nfs/rpc_pipefs # die() { echo "Usage: $0 cache_name entry_name" exit 1 } [ $# -lt 2 ] && die cachename="$1" cache_path=${rpc_pipefs}/cache/${cachename}/channel case "${cachename}" in dns_resolve) name="$2" result="$(${getent} hosts ${name} | ${cut} -f1 -d\ )" [ -z "${result}" ] && result="0" ;; *) die ;; esac echo "${result} ${name} ${ttl}" >${cache_path}”…””}”hjÑsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”Œforce”‰Œlanguage”Œsh”Œhighlight_args”}”uh1jÏh³hÊh´Krhj¾h²hubeh}”(h]”Œ$a-basic-sample-sbin-nfs-cache-getent”ah ]”h"]”Œ%a basic sample /sbin/nfs_cache_getent”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kqubeh}”(h]”Œ nfs-client”ah ]”h"]”Œ nfs client”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œ7rfc3530 section 6: filesystem migration and replication”]”j¦aŒ+implementation guide for referrals in nfsv4”]”j½auŒrefids”}”Œnameids”}”(jójðj j jˆj…j»j¸jãjàjðjíjëjèuŒ nametypes”}”(jó‰j ‰jˆ‰j»‰jãˆjðˆjë‰uh}”(jðh·j hËj…jj¸j‹jàjÚjíjçjèj¾uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.