€•®aŒ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/filesystems/qnx6”Œ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/filesystems/qnx6”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/it_IT/filesystems/qnx6”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/ja_JP/filesystems/qnx6”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/ko_KR/filesystems/qnx6”Œ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/filesystems/qnx6”Œ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ŸŒ>/var/lib/git/docbuild/linux/Documentation/filesystems/qnx6.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒThe QNX6 Filesystem”h]”hŒThe QNX6 Filesystem”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒŠThe qnx6fs is used by newer QNX operating system versions. (e.g. Neutrino) It got introduced in QNX 6.4.0 and is used default since 6.4.1.”h]”hŒŠThe qnx6fs is used by newer QNX operating system versions. (e.g. Neutrino) It got introduced in QNX 6.4.0 and is used default since 6.4.1.”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒOption”h]”hŒOption”…””}”(hhÜhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhÙhžhhŸh³h K ubhÊ)”}”(hŒJmmi_fs Mount filesystem as used for example by Audi MMI 3G system”h]”hŒJmmi_fs Mount filesystem as used for example by Audi MMI 3G system”…””}”(hhêhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hhÙhžhubeh}”(h]”Œoption”ah ]”h"]”Œoption”ah$]”h&]”uh1h´hh¶hžhhŸh³h K ubhµ)”}”(hhh]”(hº)”}”(hŒ Specification”h]”hŒ Specification”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KubhÊ)”}”(hŒwqnx6fs shares many properties with traditional Unix filesystems. It has the concepts of blocks, inodes and directories.”h]”hŒwqnx6fs shares many properties with traditional Unix filesystems. It has the concepts of blocks, inodes and directories.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjhžhubhÊ)”}”(hXOn QNX it is possible to create little endian and big endian qnx6 filesystems. This feature makes it possible to create and use a different endianness fs for the target (QNX is used on quite a range of embedded systems) platform running on a different endianness.”h]”hXOn QNX it is possible to create little endian and big endian qnx6 filesystems. This feature makes it possible to create and use a different endianness fs for the target (QNX is used on quite a range of embedded systems) platform running on a different endianness.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjhžhubhÊ)”}”(hŒ>The Linux driver handles endianness transparently. (LE and BE)”h]”hŒ>The Linux driver handles endianness transparently. (LE and BE)”…””}”(hj-hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjhžhubhµ)”}”(hhh]”(hº)”}”(hŒBlocks”h]”hŒBlocks”…””}”(hj>hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj;hžhhŸh³h KubhÊ)”}”(hŒœThe space in the device or file is split up into blocks. These are a fixed size of 512, 1024, 2048 or 4096, which is decided when the filesystem is created.”h]”hŒœThe space in the device or file is split up into blocks. These are a fixed size of 512, 1024, 2048 or 4096, which is decided when the filesystem is created.”…””}”(hjLhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj;hžhubhÊ)”}”(hŒ`Blockpointers are 32bit, so the maximum space that can be addressed is 2^32 * 4096 bytes or 16TB”h]”hŒ`Blockpointers are 32bit, so the maximum space that can be addressed is 2^32 * 4096 bytes or 16TB”…””}”(hjZhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K#hj;hžhubeh}”(h]”Œblocks”ah ]”h"]”Œblocks”ah$]”h&]”uh1h´hjhžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒThe superblocks”h]”hŒThe superblocks”…””}”(hjshžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjphžhhŸh³h K'ubhÊ)”}”(hXcThe superblock contains all global information about the filesystem. Each qnx6fs got two superblocks, each one having a 64bit serial number. That serial number is used to identify the "active" superblock. In write mode with reach new snapshot (after each synchronous write), the serial of the new master superblock is increased (old superblock serial + 1)”h]”hXgThe superblock contains all global information about the filesystem. Each qnx6fs got two superblocks, each one having a 64bit serial number. That serial number is used to identify the “active†superblock. In write mode with reach new snapshot (after each synchronous write), the serial of the new master superblock is increased (old superblock serial + 1)”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K)hjphžhubhÊ)”}”(hX<So basically the snapshot functionality is realized by an atomic final update of the serial number. Before updating that serial, all modifications are done by copying all modified blocks during that specific write request (or period) and building up a new (stable) filesystem structure under the inactive superblock.”h]”hX<So basically the snapshot functionality is realized by an atomic final update of the serial number. Before updating that serial, all modifications are done by copying all modified blocks during that specific write request (or period) and building up a new (stable) filesystem structure under the inactive superblock.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K/hjphžhubhÊ)”}”(hX>Each superblock holds a set of root inodes for the different filesystem parts. (Inode, Bitmap and Longfilenames) Each of these root nodes holds information like total size of the stored data and the addressing levels in that specific tree. If the level value is 0, up to 16 direct blocks can be addressed by each node.”h]”hX>Each superblock holds a set of root inodes for the different filesystem parts. (Inode, Bitmap and Longfilenames) Each of these root nodes holds information like total size of the stored data and the addressing levels in that specific tree. If the level value is 0, up to 16 direct blocks can be addressed by each node.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K5hjphžhubhÊ)”}”(hX'Level 1 adds an additional indirect addressing level where each indirect addressing block holds up to blocksize / 4 bytes pointers to data blocks. Level 2 adds an additional indirect addressing block level (so, already up to 16 * 256 * 256 = 1048576 blocks that can be addressed by such a tree).”h]”hX'Level 1 adds an additional indirect addressing level where each indirect addressing block holds up to blocksize / 4 bytes pointers to data blocks. Level 2 adds an additional indirect addressing block level (so, already up to 16 * 256 * 256 = 1048576 blocks that can be addressed by such a tree).”…””}”(hj«hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KObject mode field is POSIX format. (which makes things easier)”h]”hŒ>Object mode field is POSIX format. (which makes things easier)”…””}”(hj&hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K\hjhžhubhÊ)”}”(hŒjThere are also pointers to the first 16 blocks, if the object data can be addressed with 16 direct blocks.”h]”hŒjThere are also pointers to the first 16 blocks, if the object data can be addressed with 16 direct blocks.”…””}”(hj4hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K^hjhžhubhÊ)”}”(hŒ’For more than 16 blocks an indirect addressing in form of another tree is used. (scheme is the same as the one used for the superblock root nodes)”h]”hŒ’For more than 16 blocks an indirect addressing in form of another tree is used. (scheme is the same as the one used for the superblock root nodes)”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KahjhžhubhÊ)”}”(hŒeThe filesize is stored 64bit. Inode counting starts with 1. (while long filename inodes start with 0)”h]”hŒeThe filesize is stored 64bit. Inode counting starts with 1. (while long filename inodes start with 0)”…””}”(hjPhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kdhjhžhubeh}”(h]”Œinodes”ah ]”h"]”Œinodes”ah$]”h&]”uh1h´hjhžhhŸh³h KSubhµ)”}”(hhh]”(hº)”}”(hŒ Directories”h]”hŒ Directories”…””}”(hjihžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjfhžhhŸh³h KhubhÊ)”}”(hŒ©A directory is a filesystem object and has an inode just like a file. It is a specially formatted file containing records which associate each name with an inode number.”h]”hŒ©A directory is a filesystem object and has an inode just like a file. It is a specially formatted file containing records which associate each name with an inode number.”…””}”(hjwhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KjhjfhžhubhÊ)”}”(hŒ.'.' inode number points to the directory inode”h]”hŒ2‘.’ inode number points to the directory inode”…””}”(hj…hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KnhjfhžhubhÊ)”}”(hŒ6'..' inode number points to the parent directory inode”h]”hŒ:‘..’ inode number points to the parent directory inode”…””}”(hj“hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KphjfhžhubhÊ)”}”(hŒ?Eeach filename record additionally got a filename length field.”h]”hŒ?Eeach filename record additionally got a filename length field.”…””}”(hj¡hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KrhjfhžhubhÊ)”}”(hŒ:One special case are long filenames or subdirectory names.”h]”hŒ:One special case are long filenames or subdirectory names.”…””}”(hj¯hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KthjfhžhubhÊ)”}”(hŒŽThese got set a filename length field of 0xff in the corresponding directory record plus the longfile inode number also stored in that record.”h]”hŒŽThese got set a filename length field of 0xff in the corresponding directory record plus the longfile inode number also stored in that record.”…””}”(hj½hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KvhjfhžhubhÊ)”}”(hŒ†With that longfilename inode number, the longfilename tree can be walked starting with the superblock longfilename root node pointers.”h]”hŒ†With that longfilename inode number, the longfilename tree can be walked starting with the superblock longfilename root node pointers.”…””}”(hjËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kyhjfhžhubeh}”(h]”Œ directories”ah ]”h"]”Œ directories”ah$]”h&]”uh1h´hjhžhhŸh³h Khubhµ)”}”(hhh]”(hº)”}”(hŒ Special files”h]”hŒ Special files”…””}”(hjähžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjáhžhhŸh³h K}ubhÊ)”}”(hŒŠSymbolic links are also filesystem objects with inodes. They got a specific bit in the inode mode field identifying them as symbolic link.”h]”hŒŠSymbolic links are also filesystem objects with inodes. They got a specific bit in the inode mode field identifying them as symbolic link.”…””}”(hjòhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjáhžhubhÊ)”}”(hŒGThe directory entry file inode pointer points to the target file inode.”h]”hŒGThe directory entry file inode pointer points to the target file inode.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K‚hjáhžhubhÊ)”}”(hŒ›Hard links got an inode, a directory entry, but a specific mode bit set, no block pointers and the directory file record pointing to the target file inode.”h]”hŒ›Hard links got an inode, a directory entry, but a specific mode bit set, no block pointers and the directory file record pointing to the target file inode.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K„hjáhžhubhÊ)”}”(hŒªCharacter and block special devices do not exist in QNX as those files are handled by the QNX kernel/drivers and created in /dev independent of the underlying filesystem.”h]”hŒªCharacter and block special devices do not exist in QNX as those files are handled by the QNX kernel/drivers and created in /dev independent of the underlying filesystem.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kˆhjáhžhubeh}”(h]”Œ special-files”ah ]”h"]”Œ special files”ah$]”h&]”uh1h´hjhžhhŸh³h K}ubhµ)”}”(hhh]”(hº)”}”(hŒLong filenames”h]”hŒLong filenames”…””}”(hj5hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj2hžhhŸh³h KubhÊ)”}”(hŒ‚Long filenames are stored in a separate addressing tree. The staring point is the longfilename root node in the active superblock.”h]”hŒ‚Long filenames are stored in a separate addressing tree. The staring point is the longfilename root node in the active superblock.”…””}”(hjChžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj2hžhubhÊ)”}”(hŒ¬Each data block (tree leaves) holds one long filename. That filename is limited to 510 bytes. The first two starting bytes are used as length field for the actual filename.”h]”hŒ¬Each data block (tree leaves) holds one long filename. That filename is limited to 510 bytes. The first two starting bytes are used as length field for the actual filename.”…””}”(hjQhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K’hj2hžhubhÊ)”}”(hŒ…If that structure shall fit for all allowed blocksizes, it is clear why there is a limit of 510 bytes for the actual filename stored.”h]”hŒ…If that structure shall fit for all allowed blocksizes, it is clear why there is a limit of 510 bytes for the actual filename stored.”…””}”(hj_hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K–hj2hžhubeh}”(h]”Œlong-filenames”ah ]”h"]”Œlong filenames”ah$]”h&]”uh1h´hjhžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒBitmap”h]”hŒBitmap”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjuhžhhŸh³h KšubhÊ)”}”(hŒ The qnx6fs filesystem allocation bitmap is stored in a tree under bitmap root node in the superblock and each bit in the bitmap represents one filesystem block.”h]”hŒ The qnx6fs filesystem allocation bitmap is stored in a tree under bitmap root node in the superblock and each bit in the bitmap represents one filesystem block.”…””}”(hj†hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KœhjuhžhubhÊ)”}”(hŒ³The first block is block 0, which starts 0x1000 after superblock start. So for a normal qnx6fs 0x3000 (bootblock + superblock) is the physical address at which block 0 is located.”h]”hŒ³The first block is block 0, which starts 0x1000 after superblock start. So for a normal qnx6fs 0x3000 (bootblock + superblock) is the physical address at which block 0 is located.”…””}”(hj”hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hjuhžhubhÊ)”}”(hŒtBits at the end of the last bitmap block are set to 1, if the device is smaller than addressing space in the bitmap.”h]”hŒtBits at the end of the last bitmap block are set to 1, if the device is smaller than addressing space in the bitmap.”…””}”(hj¢hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K¤hjuhžhubeh}”(h]”Œbitmap”ah ]”h"]”Œbitmap”ah$]”h&]”uh1h´hjhžhhŸh³h Kšubhµ)”}”(hhh]”(hº)”}”(hŒBitmap system area”h]”hŒBitmap system area”…””}”(hj»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj¸hžhhŸh³h K¨ubhÊ)”}”(hŒ.The bitmap itself is divided into three parts.”h]”hŒ.The bitmap itself is divided into three parts.”…””}”(hjÉhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kªhj¸hžhubhÊ)”}”(hŒ5First the system area, that is split into two halves.”h]”hŒ5First the system area, that is split into two halves.”…””}”(hj×hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K¬hj¸hžhubhÊ)”}”(hŒThen userspace.”h]”hŒThen userspace.”…””}”(hjåhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K®hj¸hžhubhÊ)”}”(hŒeThe requirement for a static, fixed preallocated system area comes from how qnx6fs deals with writes.”h]”hŒeThe requirement for a static, fixed preallocated system area comes from how qnx6fs deals with writes.”…””}”(hjóhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K°hj¸hžhubhÊ)”}”(hŒÍEach superblock got its own half of the system area. So superblock #1 always uses blocks from the lower half while superblock #2 just writes to blocks represented by the upper half bitmap system area bits.”h]”hŒÍEach superblock got its own half of the system area. So superblock #1 always uses blocks from the lower half while superblock #2 just writes to blocks represented by the upper half bitmap system area bits.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K³hj¸hžhubhÊ)”}”(hŒvBitmap blocks, Inode blocks and indirect addressing blocks for those two tree structures are treated as system blocks.”h]”hŒvBitmap blocks, Inode blocks and indirect addressing blocks for those two tree structures are treated as system blocks.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K·hj¸hžhubhÊ)”}”(hXThe rational behind that is that a write request can work on a new snapshot (system area of the inactive - resp. lower serial numbered superblock) while at the same time there is still a complete stable filesystem structure in the other half of the system area.”h]”hXThe rational behind that is that a write request can work on a new snapshot (system area of the inactive - resp. lower serial numbered superblock) while at the same time there is still a complete stable filesystem structure in the other half of the system area.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kºhj¸hžhubhÊ)”}”(hXWhen finished with writing (a sync write is completed, the maximum sync leap time or a filesystem sync is requested), serial of the previously inactive superblock atomically is increased and the fs switches over to that - then stable declared - superblock.”h]”hXWhen finished with writing (a sync write is completed, the maximum sync leap time or a filesystem sync is requested), serial of the previously inactive superblock atomically is increased and the fs switches over to that - then stable declared - superblock.”…””}”(hj+hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K¿hj¸hžhubhÊ)”}”(hŒKFor all data outside the system area, blocks are just copied while writing.”h]”hŒKFor all data outside the system area, blocks are just copied while writing.”…””}”(hj9hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KÄhj¸hžhubeh}”(h]”Œbitmap-system-area”ah ]”h"]”Œbitmap system area”ah$]”h&]”uh1h´hjhžhhŸh³h K¨ubeh}”(h]”Œ specification”ah ]”h"]”Œ specification”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubeh}”(h]”Œthe-qnx6-filesystem”ah ]”h"]”Œthe qnx6 filesystem”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\jYhýhújTjQjmjjjjjcj`jÞjÛj/j,jrjojµj²jLjIuŒ nametypes”}”(j\‰hý‰jT‰jm‰j‰jc‰jÞ‰j/‰jr‰jµ‰jL‰uh}”(jYh¶húhÙjQjjjj;jjpj`jjÛjfj,jájoj2j²jujIj¸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.