€•3FŒ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”Œ7/translations/zh_CN/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/zh_TW/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/it_IT/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/ja_JP/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/ko_KR/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/sp_SP/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒQ/var/lib/git/docbuild/linux/Documentation/driver-api/cxl/linux/memory-hotplug.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒMemory Hotplug”h]”hŒMemory Hotplug”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒªThe final phase of surfacing CXL memory to the kernel page allocator is for the `DAX` driver to surface a `Driver Managed` memory region via the memory-hotplug component.”h]”(hŒPThe final phase of surfacing CXL memory to the kernel page allocator is for the ”…””}”(hhËhžhhŸNh NubhŒtitle_reference”“”)”}”(hŒ`DAX`”h]”hŒDAX”…””}”(hhÕhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÓhhËubhŒ driver to surface a ”…””}”(hhËhžhhŸNh NubhÔ)”}”(hŒ`Driver Managed`”h]”hŒDriver Managed”…””}”(hhçhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÓhhËubhŒ0 memory region via the memory-hotplug component.”…””}”(hhËhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhÊ)”}”(hŒ0There are four major configurations to consider:”h]”hŒ0There are four major configurations to consider:”…””}”(hhÿhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hh¶hžhubhŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ)Default Online Behavior (on/off and zone)”h]”hÊ)”}”(hjh]”hŒ)Default Online Behavior (on/off and zone)”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhžhhŸh³h Nubj)”}”(hŒHotplug Memory Block size”h]”hÊ)”}”(hj-h]”hŒHotplug Memory Block size”…””}”(hj/hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhžhhŸh³h Nubj)”}”(hŒMemory Map Resource location”h]”hÊ)”}”(hjDh]”hŒMemory Map Resource location”…””}”(hjFhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhžhhŸh³h Nubj)”}”(hŒ"Driver-Managed Memory Designation ”h]”hÊ)”}”(hŒ!Driver-Managed Memory Designation”h]”hŒ!Driver-Managed Memory Designation”…””}”(hj]hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ)”uh1j hh¶hžhhŸh³h K ubhµ)”}”(hhh]”(hº)”}”(hŒDefault Online Behavior”h]”hŒDefault Online Behavior”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj|hžhhŸh³h KubhÊ)”}”(hŒcThe default-online behavior of hotplug memory is dictated by the following, in order of precedence:”h]”hŒcThe default-online behavior of hotplug memory is dictated by the following, in order of precedence:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj|hžhubhŒ bullet_list”“”)”}”(hhh]”(j)”}”(hŒ::code:`CONFIG_MHP_DEFAULT_ONLINE_TYPE` Build Configuration”h]”hÊ)”}”(hj¢h]”(hŒliteral”“”)”}”(hŒ&:code:`CONFIG_MHP_DEFAULT_ONLINE_TYPE`”h]”hŒCONFIG_MHP_DEFAULT_ONLINE_TYPE”…””}”(hj©hžhhŸNh Nubah}”(h]”h ]”Œcode”ah"]”h$]”h&]”Œlanguage”huh1j§hj¤ubhŒ Build Configuration”…””}”(hj¤hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhžhhŸh³h Nubj)”}”(hŒ*:code:`memhp_default_state` Boot parameter”h]”hÊ)”}”(hjËh]”(j¨)”}”(hŒ:code:`memhp_default_state`”h]”hŒmemhp_default_state”…””}”(hjÐhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjÍubhŒ Boot parameter”…””}”(hjÍhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhžhhŸh³h Nubj)”}”(hŒ<:code:`/sys/devices/system/memory/auto_online_blocks` value ”h]”hÊ)”}”(hŒ;:code:`/sys/devices/system/memory/auto_online_blocks` value”h]”(j¨)”}”(hŒ5:code:`/sys/devices/system/memory/auto_online_blocks`”h]”hŒ-/sys/devices/system/memory/auto_online_blocks”…””}”(hj÷hžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjóubhŒ value”…””}”(hjóhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j›hŸh³h Khj|hžhubhÊ)”}”(hŒMThese dictate whether hotplugged memory blocks arrive in one of three states:”h]”hŒMThese dictate whether hotplugged memory blocks arrive in one of three states:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj|hžhubj)”}”(hhh]”(j)”}”(hŒOffline”h]”hÊ)”}”(hj1h]”hŒOffline”…””}”(hj3hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,hžhhŸh³h Nubj)”}”(hŒOnline in :code:`ZONE_NORMAL`”h]”hÊ)”}”(hjHh]”(hŒ Online in ”…””}”(hjJhžhhŸNh Nubj¨)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hjQhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,hžhhŸh³h Nubj)”}”(hŒOnline in :code:`ZONE_MOVABLE` ”h]”hÊ)”}”(hŒOnline in :code:`ZONE_MOVABLE`”h]”(hŒ Online in ”…””}”(hjphžhhŸNh Nubj¨)”}”(hŒ:code:`ZONE_MOVABLE`”h]”hŒ ZONE_MOVABLE”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,hžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”jwjxjyhjzj{uh1j hj|hžhhŸh³h KubhÊ)”}”(hŒ±:code:`ZONE_NORMAL` implies this capacity may be used for almost any allocation, while :code:`ZONE_MOVABLE` implies this capacity should only be used for migratable allocations.”h]”(j¨)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hj™ubhŒD implies this capacity may be used for almost any allocation, while ”…””}”(hj™hžhhŸNh Nubj¨)”}”(hŒ:code:`ZONE_MOVABLE`”h]”hŒ ZONE_MOVABLE”…””}”(hj°hžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hj™ubhŒF implies this capacity should only be used for migratable allocations.”…””}”(hj™hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hj|hžhubhÊ)”}”(hX:code:`ZONE_MOVABLE` attempts to retain the hotplug-ability of a memory block so that it the entire region may be hot-unplugged at a later time. Any capacity onlined into :code:`ZONE_NORMAL` should be considered permanently attached to the page allocator.”h]”(j¨)”}”(hŒ:code:`ZONE_MOVABLE`”h]”hŒ ZONE_MOVABLE”…””}”(hjÍhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjÉubhŒ˜ attempts to retain the hotplug-ability of a memory block so that it the entire region may be hot-unplugged at a later time. Any capacity onlined into ”…””}”(hjÉhžhhŸNh Nubj¨)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hjàhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjÉubhŒA should be considered permanently attached to the page allocator.”…””}”(hjÉhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K$hj|hžhubeh}”(h]”Œdefault-online-behavior”ah ]”h"]”Œdefault online behavior”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒHotplug Memory Block Size”h]”hŒHotplug Memory Block Size”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h K*ubhÊ)”}”(hXUBy default, on most architectures, the Hotplug Memory Block Size is either 128MB or 256MB. On x86, the block size increases up to 2GB as total memory capacity exceeds 64GB. As of v6.15, Linux does not take into account the size and alignment of the ACPI CEDT CFMWS regions (see Early Boot docs) when deciding the Hotplug Memory Block Size.”h]”hXUBy default, on most architectures, the Hotplug Memory Block Size is either 128MB or 256MB. On x86, the block size increases up to 2GB as total memory capacity exceeds 64GB. As of v6.15, Linux does not take into account the size and alignment of the ACPI CEDT CFMWS regions (see Early Boot docs) when deciding the Hotplug Memory Block Size.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K+hjhžhubeh}”(h]”Œhotplug-memory-block-size”ah ]”h"]”Œhotplug memory block size”ah$]”h&]”uh1h´hh¶hžhhŸh³h K*ubhµ)”}”(hhh]”(hº)”}”(hŒ Memory Map”h]”hŒ Memory Map”…””}”(hj+hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj(hžhhŸh³h K2ubhÊ)”}”(hŒ‹The location of :code:`struct folio` allocations to represent the hotplugged memory capacity are dictated by the following system settings:”h]”(hŒThe location of ”…””}”(hj9hžhhŸNh Nubj¨)”}”(hŒ:code:`struct folio`”h]”hŒ struct folio”…””}”(hjAhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hj9ubhŒg allocations to represent the hotplugged memory capacity are dictated by the following system settings:”…””}”(hj9hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K3hj(hžhubjœ)”}”(hhh]”(j)”}”(hŒ>:code:`/sys_module/memory_hotplug/parameters/memmap_on_memory`”h]”hÊ)”}”(hj_h]”j¨)”}”(hj_h]”hŒ6/sys_module/memory_hotplug/parameters/memmap_on_memory”…””}”(hjdhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K6hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZhžhhŸh³h Nubj)”}”(hŒ5:code:`/sys/bus/dax/devices/daxN.Y/memmap_on_memory` ”h]”hÊ)”}”(hŒ4:code:`/sys/bus/dax/devices/daxN.Y/memmap_on_memory`”h]”j¨)”}”(hj„h]”hŒ,/sys/bus/dax/devices/daxN.Y/memmap_on_memory”…””}”(hj†hžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K7hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j›hŸh³h K6hj(hžhubhÊ)”}”(hX If both of these parameters are set to true, :code:`struct folio` for this capacity will be carved out of the memory block being onlined. This has performance implications if the memory is particularly high-latency and its :code:`struct folio` becomes hotly contended.”h]”(hŒ-If both of these parameters are set to true, ”…””}”(hj¦hžhhŸNh Nubj¨)”}”(hŒ:code:`struct folio`”h]”hŒ struct folio”…””}”(hj®hžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hj¦ubhŒŸ for this capacity will be carved out of the memory block being onlined. This has performance implications if the memory is particularly high-latency and its ”…””}”(hj¦hžhhŸNh Nubj¨)”}”(hŒ:code:`struct folio`”h]”hŒ struct folio”…””}”(hjÁhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hj¦ubhŒ becomes hotly contended.”…””}”(hj¦hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K9hj(hžhubhÊ)”}”(hXIf either parameter is set to false, :code:`struct folio` for this capacity will be allocated from the local node of the processor running the hotplug procedure. This capacity will be allocated from :code:`ZONE_NORMAL` on that node, as it is a :code:`GFP_KERNEL` allocation.”h]”(hŒ%If either parameter is set to false, ”…””}”(hjÚhžhhŸNh Nubj¨)”}”(hŒ:code:`struct folio`”h]”hŒ struct folio”…””}”(hjâhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjÚubhŒ for this capacity will be allocated from the local node of the processor running the hotplug procedure. This capacity will be allocated from ”…””}”(hjÚhžhhŸNh Nubj¨)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hjõhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjÚubhŒ on that node, as it is a ”…””}”(hjÚhžhhŸNh Nubj¨)”}”(hŒ:code:`GFP_KERNEL`”h]”hŒ GFP_KERNEL”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hjÚubhŒ allocation.”…””}”(hjÚhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K>hj(hžhubhÊ)”}”(hŒ×Systems with extremely large amounts of :code:`ZONE_MOVABLE` memory (e.g. CXL memory pools) must ensure that there is sufficient local :code:`ZONE_NORMAL` capacity to host the memory map for the hotplugged capacity.”h]”(hŒ(Systems with extremely large amounts of ”…””}”(hj!hžhhŸNh Nubj¨)”}”(hŒ:code:`ZONE_MOVABLE`”h]”hŒ ZONE_MOVABLE”…””}”(hj)hžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hj!ubhŒK memory (e.g. CXL memory pools) must ensure that there is sufficient local ”…””}”(hj!hžhhŸNh Nubj¨)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hj<hžhhŸNh Nubah}”(h]”h ]”j´ah"]”h$]”h&]”Œlanguage”huh1j§hj!ubhŒ= capacity to host the memory map for the hotplugged capacity.”…””}”(hj!hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KChj(hžhubeh}”(h]”Œ memory-map”ah ]”h"]”Œ memory map”ah$]”h&]”uh1h´hh¶hžhhŸh³h K2ubhµ)”}”(hhh]”(hº)”}”(hŒDriver Managed Memory”h]”hŒDriver Managed Memory”…””}”(hj`hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj]hžhhŸh³h KHubhÊ)”}”(hX´The DAX driver surfaces this memory to memory-hotplug as "Driver Managed". This is not a configurable setting, but it's important to note that driver managed memory is explicitly excluded from use during kexec. This is required to ensure any reset or out-of-band operations that the CXL device may be subject to during a functional system-reboot (such as a reset-on-probe) will not cause portions of the kexec kernel to be overwritten.”h]”hXºThe DAX driver surfaces this memory to memory-hotplug as “Driver Managedâ€. This is not a configurable setting, but it’s important to note that driver managed memory is explicitly excluded from use during kexec. This is required to ensure any reset or out-of-band operations that the CXL device may be subject to during a functional system-reboot (such as a reset-on-probe) will not cause portions of the kexec kernel to be overwritten.”…””}”(hjnhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KIhj]hžhubeh}”(h]”Œdriver-managed-memory”ah ]”h"]”Œdriver managed memory”ah$]”h&]”uh1h´hh¶hžhhŸh³h KHubeh}”(h]”Œmemory-hotplug”ah ]”h"]”Œmemory hotplug”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”}”Œrefids”}”Œnameids”}”(j‰j†jþjûj%j"jZjWjj~uŒ nametypes”}”(j‰‰jþ‰j%‰jZ‰j‰uh}”(j†h¶jûj|j"jjWj(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.