€•X|Œ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”Œ1/translations/zh_CN/userspace-api/media/dvb/intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/zh_TW/userspace-api/media/dvb/intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/it_IT/userspace-api/media/dvb/intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ja_JP/userspace-api/media/dvb/intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ko_KR/userspace-api/media/dvb/intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/pt_BR/userspace-api/media/dvb/intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/sp_SP/userspace-api/media/dvb/intro”Œ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Œ8SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later”h]”hŒ8SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/userspace-api/media/dvb/intro.rst”h´KubhŒtarget”“”)”}”(hŒ.. _dvb_introduction:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œdvb-introduction”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´KubhÉ)”}”(hŒ.. _requisites:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒ requisites”uh1hÈh´K hhØh²hh³hÇubh×)”}”(hhh]”(hÜ)”}”(hŒWhat you need to know”h]”hŒWhat you need to know”…””}”(hhùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhöh²hh³hÇh´K ubhŒ paragraph”“”)”}”(hX\The reader of this document is required to have some knowledge in the area of digital video broadcasting (Digital TV) and should be familiar with part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e you should know what a program/transport stream (PS/TS) is and what is meant by a packetized elementary stream (PES) or an I-frame.”h]”hX\The reader of this document is required to have some knowledge in the area of digital video broadcasting (Digital TV) and should be familiar with part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e you should know what a program/transport stream (PS/TS) is and what is meant by a packetized elementary stream (PES) or an I-frame.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khhöh²hubj)”}”(hŒEVarious Digital TV standards documents are available for download at:”h]”hŒEVarious Digital TV standards documents are available for download at:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khhöh²hubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒHEuropean standards (DVB): http://www.dvb.org and/or http://www.etsi.org.”h]”j)”}”(hj.h]”(hŒEuropean standards (DVB): ”…””}”(hj0h²hh³Nh´NubhŒ reference”“”)”}”(hŒhttp://www.dvb.org”h]”hŒhttp://www.dvb.org”…””}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j;uh1j7hj0ubhŒ and/or ”…””}”(hj0h²hh³Nh´Nubj8)”}”(hŒhttp://www.etsi.org”h]”hŒhttp://www.etsi.org”…””}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jNuh1j7hj0ubhŒ.”…””}”(hj0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj'h²hh³hÇh´Nubj+)”}”(hŒ:American standards (ATSC): https://www.atsc.org/standards/”h]”j)”}”(hjmh]”(hŒAmerican standards (ATSC): ”…””}”(hjoh²hh³Nh´Nubj8)”}”(hŒhttps://www.atsc.org/standards/”h]”hŒhttps://www.atsc.org/standards/”…””}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jxuh1j7hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj'h²hh³hÇh´Nubj+)”}”(hŒ1Japanese standards (ISDB): http://www.dibeg.org/ ”h]”j)”}”(hŒ0Japanese standards (ISDB): http://www.dibeg.org/”h]”(hŒJapanese standards (ISDB): ”…””}”(hj•h²hh³Nh´Nubj8)”}”(hŒhttp://www.dibeg.org/”h]”hŒhttp://www.dibeg.org/”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jŸuh1j7hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj'h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j%h³hÇh´Khhöh²hubj)”}”(hŒ‚It is also necessary to know how to access Linux devices and how to use ioctl calls. This also includes the knowledge of C or C++.”h]”hŒ‚It is also necessary to know how to access Linux devices and how to use ioctl calls. This also includes the knowledge of C or C++.”…””}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khhöh²hubhÉ)”}”(hŒ .. _history:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒhistory”uh1hÈh´Khhöh²hh³hÇubeh}”(h]”(Œwhat-you-need-to-know”hõeh ]”h"]”(Œwhat you need to know”Œ requisites”eh$]”h&]”uh1hÖhhØh²hh³hÇh´K Œexpect_referenced_by_name”}”jßhësŒexpect_referenced_by_id”}”hõhësubh×)”}”(hhh]”(hÜ)”}”(hŒHistory”h]”hŒHistory”…””}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjæh²hh³hÇh´K"ubj)”}”(hXcThe first API for Digital TV cards we used at Convergence in late 1999 was an extension of the Video4Linux API which was primarily developed for frame grabber cards. As such it was not really well suited to be used for Digital TV cards and their new features like recording MPEG streams and filtering several section and PES data streams at the same time.”h]”hXcThe first API for Digital TV cards we used at Convergence in late 1999 was an extension of the Video4Linux API which was primarily developed for frame grabber cards. As such it was not really well suited to be used for Digital TV cards and their new features like recording MPEG streams and filtering several section and PES data streams at the same time.”…””}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K$hjæh²hubj)”}”(hXIn early 2000, Convergence was approached by Nokia with a proposal for a new standard Linux Digital TV API. As a commitment to the development of terminals based on open standards, Nokia and Convergence made it available to all Linux developers and published it on https://linuxtv.org in September 2000. With the Linux driver for the Siemens/Hauppauge DVB PCI card, Convergence provided a first implementation of the Linux Digital TV API. Convergence was the maintainer of the Linux Digital TV API in the early days.”h]”(hX In early 2000, Convergence was approached by Nokia with a proposal for a new standard Linux Digital TV API. As a commitment to the development of terminals based on open standards, Nokia and Convergence made it available to all Linux developers and published it on ”…””}”(hjh²hh³Nh´Nubj8)”}”(hŒhttps://linuxtv.org”h]”hŒhttps://linuxtv.org”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”juh1j7hjubhŒè in September 2000. With the Linux driver for the Siemens/Hauppauge DVB PCI card, Convergence provided a first implementation of the Linux Digital TV API. Convergence was the maintainer of the Linux Digital TV API in the early days.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K*hjæh²hubj)”}”(hŒàNow, the API is maintained by the LinuxTV community (i.e. you, the reader of this document). The Linux Digital TV API is constantly reviewed and improved together with the improvements at the subsystem's core at the Kernel.”h]”hŒâNow, the API is maintained by the LinuxTV community (i.e. you, the reader of this document). The Linux Digital TV API is constantly reviewed and improved together with the improvements at the subsystem’s core at the Kernel.”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K3hjæh²hubhÉ)”}”(hŒ .. _overview:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒoverview”uh1hÈh´K9hjæh²hh³hÇubeh}”(h]”(jØŒid1”eh ]”h"]”Œhistory”ah$]”Œhistory”ah&]”uh1hÖhhØh²hh³hÇh´K"Œ referenced”Kjâ}”jDjÎsjä}”jØjÎsubh×)”}”(hhh]”(hÜ)”}”(hŒOverview”h]”hŒOverview”…””}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjKh²hh³hÇh´KŒid2”eh ]”h"]”Œoverview”ah$]”Œoverview”ah&]”uh1hÖhhØh²hh³hÇh´Kj4subh×)”}”(hhh]”(hÜ)”}”(hŒLinux Digital TV Devices”h]”hŒLinux Digital TV Devices”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj h²hh³hÇh´Kxubj)”}”(hXäThe Linux Digital TV API lets you control these hardware components through currently six Unix-style character devices for video, audio, frontend, demux, CA and IP-over-DVB networking. The video and audio devices control the MPEG2 decoder hardware, the frontend device the tuner and the Digital TV demodulator. The demux device gives you control over the PES and section filters of the hardware. If the hardware does not support filtering, these filters can be implemented in software. Finally, the CA device controls all the conditional access capabilities of the hardware. It can depend on the individual security requirements of the platform, if and how many of the CA functions are made available to the application through this device.”h]”hXäThe Linux Digital TV API lets you control these hardware components through currently six Unix-style character devices for video, audio, frontend, demux, CA and IP-over-DVB networking. The video and audio devices control the MPEG2 decoder hardware, the frontend device the tuner and the Digital TV demodulator. The demux device gives you control over the PES and section filters of the hardware. If the hardware does not support filtering, these filters can be implemented in software. Finally, the CA device controls all the conditional access capabilities of the hardware. It can depend on the individual security requirements of the platform, if and how many of the CA functions are made available to the application through this device.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kzhj h²hubj)”}”(hŒdAll devices can be found in the ``/dev`` tree under ``/dev/dvb``. The individual devices are called:”h]”(hŒ All devices can be found in the ”…””}”(hj)h²hh³Nh´NubhŒliteral”“”)”}”(hŒ``/dev``”h]”hŒ/dev”…””}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)ubhŒ tree under ”…””}”(hj)h²hh³Nh´Nubj2)”}”(hŒ ``/dev/dvb``”h]”hŒ/dev/dvb”…””}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)ubhŒ$. The individual devices are called:”…””}”(hj)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K†hj h²hubj&)”}”(hhh]”(j+)”}”(hŒ``/dev/dvb/adapterN/audioM``, ”h]”j)”}”(hŒ``/dev/dvb/adapterN/audioM``,”h]”(j2)”}”(hŒ``/dev/dvb/adapterN/audioM``”h]”hŒ/dev/dvb/adapterN/audioM”…””}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjdubhŒ,”…””}”(hjdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K‰hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj]h²hh³hÇh´Nubj+)”}”(hŒ``/dev/dvb/adapterN/videoM``, ”h]”j)”}”(hŒ``/dev/dvb/adapterN/videoM``,”h]”(j2)”}”(hŒ``/dev/dvb/adapterN/videoM``”h]”hŒ/dev/dvb/adapterN/videoM”…””}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠubhŒ,”…””}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K‹hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj]h²hh³hÇh´Nubj+)”}”(hŒ!``/dev/dvb/adapterN/frontendM``, ”h]”j)”}”(hŒ ``/dev/dvb/adapterN/frontendM``,”h]”(j2)”}”(hŒ``/dev/dvb/adapterN/frontendM``”h]”hŒ/dev/dvb/adapterN/frontendM”…””}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°ubhŒ,”…””}”(hj°h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj]h²hh³hÇh´Nubj+)”}”(hŒ``/dev/dvb/adapterN/netM``, ”h]”j)”}”(hŒ``/dev/dvb/adapterN/netM``,”h]”(j2)”}”(hŒ``/dev/dvb/adapterN/netM``”h]”hŒ/dev/dvb/adapterN/netM”…””}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÖubhŒ,”…””}”(hjÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj]h²hh³hÇh´Nubj+)”}”(hŒ``/dev/dvb/adapterN/demuxM``, ”h]”j)”}”(hŒ``/dev/dvb/adapterN/demuxM``,”h]”(j2)”}”(hŒ``/dev/dvb/adapterN/demuxM``”h]”hŒ/dev/dvb/adapterN/demuxM”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüubhŒ,”…””}”(hjüh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K‘hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj]h²hh³hÇh´Nubj+)”}”(hŒ``/dev/dvb/adapterN/dvrM``, ”h]”j)”}”(hŒ``/dev/dvb/adapterN/dvrM``,”h]”(j2)”}”(hŒ``/dev/dvb/adapterN/dvrM``”h]”hŒ/dev/dvb/adapterN/dvrM”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj"ubhŒ,”…””}”(hj"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K“hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj]h²hh³hÇh´Nubj+)”}”(hŒ``/dev/dvb/adapterN/caM``, ”h]”j)”}”(hŒ``/dev/dvb/adapterN/caM``,”h]”(j2)”}”(hŒ``/dev/dvb/adapterN/caM``”h]”hŒ/dev/dvb/adapterN/caM”…””}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjHubhŒ,”…””}”(hjHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K•hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj]h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j¾j¿uh1j%h³hÇh´K‰hj h²hubj)”}”(hŒùwhere ``N`` enumerates the Digital TV cards in a system starting from 0, and ``M`` enumerates the devices of each type within each adapter, starting from 0, too. We will omit the "``/dev/dvb/adapterN/``\ " in the further discussion of these devices.”h]”(hŒwhere ”…””}”(hjph²hh³Nh´Nubj2)”}”(hŒ``N``”h]”hŒN”…””}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjpubhŒB enumerates the Digital TV cards in a system starting from 0, and ”…””}”(hjph²hh³Nh´Nubj2)”}”(hŒ``M``”h]”hŒM”…””}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjpubhŒd enumerates the devices of each type within each adapter, starting from 0, too. We will omit the “”…””}”(hjph²hh³Nh´Nubj2)”}”(hŒ``/dev/dvb/adapterN/``”h]”hŒ/dev/dvb/adapterN/”…””}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjpubhŒ1 “ in the further discussion of these devices.”…””}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K—hj h²hubj)”}”(hŒuMore details about the data structures and function calls of all the devices are described in the following chapters.”h]”hŒuMore details about the data structures and function calls of all the devices are described in the following chapters.”…””}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kœhj h²hubhÉ)”}”(hŒ.. _include_files:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒ include-files”uh1hÈh´K hj h²hh³hÇubeh}”(h]”(Œlinux-digital-tv-devices”jþeh ]”h"]”(Œlinux digital tv devices”Œ dvb_devices”eh$]”h&]”uh1hÖhhØh²hh³hÇh´Kxjâ}”jÓjôsjä}”jþjôsubh×)”}”(hhh]”(hÜ)”}”(hŒAPI include files”h]”hŒAPI include files”…””}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjØh²hh³hÇh´K£ubj)”}”(hŒ¬For each of the Digital TV devices a corresponding include file exists. The Digital TV API include files should be included in application sources with a partial path like:”h]”hŒ¬For each of the Digital TV devices a corresponding include file exists. The Digital TV API include files should be included in application sources with a partial path like:”…””}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K¥hjØh²hubhŒ literal_block”“”)”}”(hŒr#include #include #include #include ”h]”hŒr#include #include #include #include ”…””}”hjùsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”Œc”Œhighlight_args”}”uh1j÷h³hÇh´KªhjØh²hubj)”}”(hŒÕTo enable applications to support different API version, an additional include file ``linux/dvb/version.h`` exists, which defines the constant ``DVB_API_VERSION``. This document describes ``DVB_API_VERSION 5.10``.”h]”(hŒTTo enable applications to support different API version, an additional include file ”…””}”(hj h²hh³Nh´Nubj2)”}”(hŒ``linux/dvb/version.h``”h]”hŒlinux/dvb/version.h”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubhŒ$ exists, which defines the constant ”…””}”(hj h²hh³Nh´Nubj2)”}”(hŒ``DVB_API_VERSION``”h]”hŒDVB_API_VERSION”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubhŒ. This document describes ”…””}”(hj h²hh³Nh´Nubj2)”}”(hŒ``DVB_API_VERSION 5.10``”h]”hŒDVB_API_VERSION 5.10”…””}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubhŒ.”…””}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KµhjØh²hubeh}”(h]”(Œapi-include-files”jÌeh ]”h"]”(Œapi include files”Œ include_files”eh$]”h&]”uh1hÖhhØh²hh³hÇh´K£jâ}”jVjÂsjä}”jÌjÂsubeh}”(h]”(Œ introduction”hÕeh ]”h"]”(Œ introduction”Œdvb_introduction”eh$]”h&]”uh1hÖhhh²hh³hÇh´Kjâ}”jahÊsjä}”hÕhÊsubeh}”(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”}”(hÕ]”hÊahõ]”hëajØ]”jÎaj>]”j4ajf]”j\ajþ]”jôajÌ]”jÂauŒnameids”}”(jahÕj`j]jßhõjÞjÛjDjØjj>j¢jfjÓjþjÒjÏjVjÌjUjRuŒ nametypes”}”(jaˆj`‰j߈jÞ‰jDˆjˆj¢ˆjÓˆjÒ‰jVˆjU‰uh}”(hÕhØj]hØhõhöjÛhöjØjæjAjæj>jKjjKjfjjjþj jÏj jÌjØjRjØj—jouŒ 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”“”}”j—Ks…”R”Œparse_messages”]”(hŒsystem_message”“”)”}”(hhh]”j)”}”(hŒ*Duplicate implicit target name: "history".”h]”hŒ.Duplicate implicit target name: “historyâ€.”…””}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôubah}”(h]”h ]”h"]”h$]”h&]”jAaŒlevel”KŒtype”ŒINFO”Œsource”hÇŒline”K"uh1jòhjæh²hh³hÇh´K"ubjó)”}”(hhh]”j)”}”(hŒ+Duplicate implicit target name: "overview".”h]”hŒ/Duplicate implicit target name: “overviewâ€.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”jaŒlevel”KŒtype”j Œsource”hÇŒline”K