€•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/virt/kvm/s390/s390-diag”Œ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/virt/kvm/s390/s390-diag”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/it_IT/virt/kvm/s390/s390-diag”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ja_JP/virt/kvm/s390/s390-diag”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ko_KR/virt/kvm/s390/s390-diag”Œ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/virt/kvm/s390/s390-diag”Œ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ŸŒE/var/lib/git/docbuild/linux/Documentation/virt/kvm/s390/s390-diag.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒThe s390 DIAGNOSE call on KVM”h]”hŒThe s390 DIAGNOSE call on KVM”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒ•KVM on s390 supports the DIAGNOSE call for making hypercalls, both for native hypercalls and for selected hypercalls found on other s390 hypervisors.”h]”hŒ•KVM on s390 supports the DIAGNOSE call for making hypercalls, both for native hypercalls and for selected hypercalls found on other s390 hypervisors.”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhÊ)”}”(hŒ_Note that bits are numbered as by the usual s390 convention (most significant bit on the left).”h]”hŒ_Note that bits are numbered as by the usual s390 convention (most significant bit on the left).”…””}”(hhÙhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒGeneral remarks”h]”hŒGeneral remarks”…””}”(hhêhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhçhžhhŸh³h KubhÊ)”}”(hŒ•DIAGNOSE calls by the guest cause a mandatory intercept. This implies all supported DIAGNOSE calls need to be handled by either KVM or its userspace.”h]”hŒ•DIAGNOSE calls by the guest cause a mandatory intercept. This implies all supported DIAGNOSE calls need to be handled by either KVM or its userspace.”…””}”(hhøhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhçhžhubhÊ)”}”(hŒ9All DIAGNOSE calls supported by KVM use the RS-a format::”h]”hŒ8All DIAGNOSE calls supported by KVM use the RS-a format:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhçhžhubhŒ literal_block”“”)”}”(hŒœ-------------------------------------- | '83' | R1 | R3 | B2 | D2 | -------------------------------------- 0 8 12 16 20 31”h]”hŒœ-------------------------------------- | '83' | R1 | R3 | B2 | D2 | -------------------------------------- 0 8 12 16 20 31”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhŸh³h KhhçhžhubhÊ)”}”(hŒÁThe second-operand address (obtained by the base/displacement calculation) is not used to address data. Instead, bits 48-63 of this address specify the function code, and bits 0-47 are ignored.”h]”hŒÁThe second-operand address (obtained by the base/displacement calculation) is not used to address data. Instead, bits 48-63 of this address specify the function code, and bits 0-47 are ignored.”…””}”(hj$hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhçhžhubhÊ)”}”(hŒ¼The supported DIAGNOSE function codes vary by the userspace used. For DIAGNOSE function codes not specific to KVM, please refer to the documentation for the s390 hypervisors defining them.”h]”hŒ¼The supported DIAGNOSE function codes vary by the userspace used. For DIAGNOSE function codes not specific to KVM, please refer to the documentation for the s390 hypervisors defining them.”…””}”(hj2hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K!hhçhžhubeh}”(h]”Œgeneral-remarks”ah ]”h"]”Œgeneral remarks”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒ.DIAGNOSE function code 'X'500' - KVM functions”h]”hŒ4DIAGNOSE function code ‘X’500’ - KVM functions”…””}”(hjKhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjHhžhhŸh³h K'ubhÊ)”}”(hŒoIf the function code specifies 0x500, various KVM-specific functions are performed, including virtio functions.”h]”hŒoIf the function code specifies 0x500, various KVM-specific functions are performed, including virtio functions.”…””}”(hjYhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K)hjHhžhubhÊ)”}”(hŒÜGeneral register 1 contains the subfunction code. Supported subfunctions depend on KVM's userspace. Regarding virtio subfunctions, generally userspace provides either s390-virtio (subcodes 0-2) or virtio-ccw (subcode 3).”h]”hŒÞGeneral register 1 contains the subfunction code. Supported subfunctions depend on KVM’s userspace. Regarding virtio subfunctions, generally userspace provides either s390-virtio (subcodes 0-2) or virtio-ccw (subcode 3).”…””}”(hjghžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K,hjHhžhubhÊ)”}”(hŒŸUpon completion of the DIAGNOSE instruction, general register 2 contains the function's return code, which is either a return code or a subcode specific value.”h]”hŒ¡Upon completion of the DIAGNOSE instruction, general register 2 contains the function’s return code, which is either a return code or a subcode specific value.”…””}”(hjuhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K1hjHhžhubhÊ)”}”(hŒ[If the specified subfunction is not supported, a SPECIFICATION exception will be triggered.”h]”hŒ[If the specified subfunction is not supported, a SPECIFICATION exception will be triggered.”…””}”(hjƒhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K5hjHhžhubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hŒTSubcode 0 - s390-virtio notification and early console printk Handled by userspace. ”h]”(hŒterm”“”)”}”(hŒ=Subcode 0 - s390-virtio notification and early console printk”h]”hŒ=Subcode 0 - s390-virtio notification and early console printk”…””}”(hjžhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jœhŸh³h K9hj˜ubhŒ definition”“”)”}”(hhh]”hÊ)”}”(hŒHandled by userspace.”h]”hŒHandled by userspace.”…””}”(hj±hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K9hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j–hŸh³h K9hj“ubj—)”}”(hŒ4Subcode 1 - s390-virtio reset Handled by userspace. ”h]”(j)”}”(hŒSubcode 1 - s390-virtio reset”h]”hŒSubcode 1 - s390-virtio reset”…””}”(hjÏhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jœhŸh³h KhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KBhj;ubhÊ)”}”(hŒƒGeneral register 2 contains a subchannel-identification word denoting the subchannel of the virtio-ccw proxy device to be notified.”h]”hŒƒGeneral register 2 contains a subchannel-identification word denoting the subchannel of the virtio-ccw proxy device to be notified.”…””}”(hjLhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KDhj;ubhÊ)”}”(hŒGGeneral register 3 contains the number of the virtqueue to be notified.”h]”hŒGGeneral register 3 contains the number of the virtqueue to be notified.”…””}”(hjZhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KGhj;ubhÊ)”}”(hŒŸGeneral register 4 contains a 64bit identifier for KVM usage (the kvm_io_bus cookie). If general register 4 does not contain a valid identifier, it is ignored.”h]”hŒŸGeneral register 4 contains a 64bit identifier for KVM usage (the kvm_io_bus cookie). If general register 4 does not contain a valid identifier, it is ignored.”…””}”(hjhhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KIhj;ubhÊ)”}”(hŒ³After completion of the DIAGNOSE call, general register 2 may contain a 64bit identifier (in the kvm_io_bus cookie case), or a negative error value, if an internal error occurred.”h]”hŒ³After completion of the DIAGNOSE call, general register 2 may contain a 64bit identifier (in the kvm_io_bus cookie case), or a negative error value, if an internal error occurred.”…””}”(hjvhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KMhj;ubhÊ)”}”(hŒ@See also the virtio standard for a discussion of this hypercall.”h]”hŒ@See also the virtio standard for a discussion of this hypercall.”…””}”(hj„hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KQhj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¬hj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j–hŸh³h KQhj“hžhubj—)”}”(hXÊSubcode 4 - storage-limit Handled by userspace. After completion of the DIAGNOSE call, general register 2 will contain the storage limit: the maximum physical address that might be used for storage throughout the lifetime of the VM. The storage limit does not indicate currently usable storage, it may include holes, standby storage and areas reserved for other means, such as memory hotplug or virtio-mem devices. Other interfaces for detecting actually usable storage, such as SCLP, must be used in conjunction with this subfunction. Note that the storage limit can be larger, but never smaller than the maximum storage address indicated by SCLP via the "maximum storage increment" and the "increment size". ”h]”(j)”}”(hŒSubcode 4 - storage-limit”h]”hŒSubcode 4 - storage-limit”…””}”(hj¢hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jœhŸh³h Kchjžubj­)”}”(hhh]”(hÊ)”}”(hŒHandled by userspace.”h]”hŒHandled by userspace.”…””}”(hj³hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KThj°ubhÊ)”}”(hŒ¸After completion of the DIAGNOSE call, general register 2 will contain the storage limit: the maximum physical address that might be used for storage throughout the lifetime of the VM.”h]”hŒ¸After completion of the DIAGNOSE call, general register 2 will contain the storage limit: the maximum physical address that might be used for storage throughout the lifetime of the VM.”…””}”(hjÁhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KVhj°ubhÊ)”}”(hX.The storage limit does not indicate currently usable storage, it may include holes, standby storage and areas reserved for other means, such as memory hotplug or virtio-mem devices. Other interfaces for detecting actually usable storage, such as SCLP, must be used in conjunction with this subfunction.”h]”hX.The storage limit does not indicate currently usable storage, it may include holes, standby storage and areas reserved for other means, such as memory hotplug or virtio-mem devices. Other interfaces for detecting actually usable storage, such as SCLP, must be used in conjunction with this subfunction.”…””}”(hjÏhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KZhj°ubhÊ)”}”(hŒ­Note that the storage limit can be larger, but never smaller than the maximum storage address indicated by SCLP via the "maximum storage increment" and the "increment size".”h]”hŒµNote that the storage limit can be larger, but never smaller than the maximum storage address indicated by SCLP via the “maximum storage increment†and the “increment sizeâ€.”…””}”(hjÝhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K`hj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j–hŸh³h Kchj“hžhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjHhžhhŸh³h Nubeh}”(h]”Œ*diagnose-function-code-x-500-kvm-functions”ah ]”h"]”Œ.diagnose function code 'x'500' - kvm functions”ah$]”h&]”uh1h´hh¶hžhhŸh³h K'ubhµ)”}”(hhh]”(hº)”}”(hŒ.DIAGNOSE function code 'X'501 - KVM breakpoint”h]”hŒ2DIAGNOSE function code ‘X’501 - KVM breakpoint”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KfubhÊ)”}”(hŒxIf the function code specifies 0x501, breakpoint functions may be performed. This function code is handled by userspace.”h]”hŒxIf the function code specifies 0x501, breakpoint functions may be performed. This function code is handled by userspace.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhjhžhubhÊ)”}”(hŒGThis diagnose function code has no subfunctions and uses no parameters.”h]”hŒGThis diagnose function code has no subfunctions and uses no parameters.”…””}”(hj$hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kkhjhžhubeh}”(h]”Œ+diagnose-function-code-x-501-kvm-breakpoint”ah ]”h"]”Œ.diagnose function code 'x'501 - kvm breakpoint”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kfubhµ)”}”(hhh]”(hº)”}”(hŒ9DIAGNOSE function code 'X'9C - Voluntary Time Slice Yield”h]”hŒ=DIAGNOSE function code ‘X’9C - Voluntary Time Slice Yield”…””}”(hj=hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj:hžhhŸh³h KoubhÊ)”}”(hŒ3General register 1 contains the target CPU address.”h]”hŒ3General register 1 contains the target CPU address.”…””}”(hjKhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kqhj:hžhubhÊ)”}”(hX)In a guest of a hypervisor like LPAR, KVM or z/VM using shared host CPUs, DIAGNOSE with function code 0x9c may improve system performance by yielding the host CPU on which the guest CPU is running to be assigned to another guest CPU, preferably the logical CPU containing the specified target CPU.”h]”hX)In a guest of a hypervisor like LPAR, KVM or z/VM using shared host CPUs, DIAGNOSE with function code 0x9c may improve system performance by yielding the host CPU on which the guest CPU is running to be assigned to another guest CPU, preferably the logical CPU containing the specified target CPU.”…””}”(hjYhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kshj:hžhubhµ)”}”(hhh]”(hº)”}”(hŒDIAG 'X'9C forwarding”h]”hŒDIAG ‘X’9C forwarding”…””}”(hjjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjghžhhŸh³h K{ubhÊ)”}”(hŒÀThe guest may send a DIAGNOSE 0x9c in order to yield to a certain other vcpu. An example is a Linux guest that tries to yield to the vcpu that is currently holding a spinlock, but not running.”h]”hŒÀThe guest may send a DIAGNOSE 0x9c in order to yield to a certain other vcpu. An example is a Linux guest that tries to yield to the vcpu that is currently holding a spinlock, but not running.”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K}hjghžhubhÊ)”}”(hŒúHowever, on the host the real cpu backing the vcpu may itself not be running. Forwarding the DIAGNOSE 0x9c initially sent by the guest to yield to the backing cpu will hopefully cause that cpu, and thus subsequently the guest's vcpu, to be scheduled.”h]”hŒüHowever, on the host the real cpu backing the vcpu may itself not be running. Forwarding the DIAGNOSE 0x9c initially sent by the guest to yield to the backing cpu will hopefully cause that cpu, and thus subsequently the guest’s vcpu, to be scheduled.”…””}”(hj†hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjghžhubj’)”}”(hhh]”j—)”}”(hŒÛdiag9c_forwarding_hz KVM kernel parameter allowing to specify the maximum number of DIAGNOSE 0x9c forwarding per second in the purpose of avoiding a DIAGNOSE 0x9c forwarding storm. A value of 0 turns the forwarding off.”h]”(j)”}”(hŒdiag9c_forwarding_hz”h]”hŒdiag9c_forwarding_hz”…””}”(hj›hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jœhŸh³h K‹hj—ubj­)”}”(hhh]”hÊ)”}”(hŒÆKVM kernel parameter allowing to specify the maximum number of DIAGNOSE 0x9c forwarding per second in the purpose of avoiding a DIAGNOSE 0x9c forwarding storm. A value of 0 turns the forwarding off.”h]”hŒÆKVM kernel parameter allowing to specify the maximum number of DIAGNOSE 0x9c forwarding per second in the purpose of avoiding a DIAGNOSE 0x9c forwarding storm. A value of 0 turns the forwarding off.”…””}”(hj¬hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K‰hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j–hŸh³h K‹hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjghžhhŸh³h Nubeh}”(h]”Œdiag-x-9c-forwarding”ah ]”h"]”Œdiag 'x'9c forwarding”ah$]”h&]”uh1h´hj:hžhhŸh³h K{ubeh}”(h]”Œ6diagnose-function-code-x-9c-voluntary-time-slice-yield”ah ]”h"]”Œ9diagnose function code 'x'9c - voluntary time slice yield”ah$]”h&]”uh1h´hh¶hžhhŸh³h Koubeh}”(h]”Œthe-s390-diagnose-call-on-kvm”ah ]”h"]”Œthe s390 diagnose call on kvm”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ÞjEjBjjÿj7j4jÙjÖjÑjÎuŒ nametypes”}”(já‰jE‰j‰j7‰jÙ‰jщuh}”(jÞh¶jBhçjÿjHj4jjÖj:jÎjguŒ 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.