<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>43062</bug_id>
          
          <creation_ts>2022-06-24 15:31:37 +0300</creation_ts>
          <short_desc>remove-old-kernels не должен удалять предпоследнее ядро</short_desc>
          <delta_ts>2022-09-22 14:13:04 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>update-kernel</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>NOTABUG</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Kovalev">alexvk72</reporter>
          <assigned_to name="Vitaly Chikunov">vt</assigned_to>
          <cc>asy</cc>
    
    <cc>boyarsh</cc>
    
    <cc>evg</cc>
    
    <cc>glebfm</cc>
    
    <cc>lav</cc>
    
    <cc>mike</cc>
    
    <cc>rider</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>212035</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Kovalev">alexvk72</who>
    <bug_when>2022-06-24 15:31:37 +0300</bug_when>
    <thetext>remove-old-kernels оставляет только текущее ядро, удаляя все остальные:

[root@localhost ~]# remove-old-kernels
Running kernel version: kernel-image-std-def-2:5.10.123-alt1
Checking for installed kernel packages...
For removing:
  kernel-image-std-def-5.10.118-alt1.x86_64
  kernel-image-std-def-5.10.121-alt1.x86_64

Таким образом, если в работе текущего ядра обнаружатся проблемы, да еще и не сразу, то возможности загрузить предыдущее ядро уже не будет. И для исключения таких случаев remove-old-kernels должен оставлять предыдущее ядро. В данном примере должно удалиться только 5.10.118.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212053</commentid>
    <comment_count>1</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-06-25 01:52:18 +0300</bug_when>
    <thetext>Идея хорошая, но... каким ядром пользовались до текущего не известно. Пользователь может ставить новые ядра, но не делать ребут (откладывая на потом и) оставаясь на более старом ядре чем предпоследнее.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212055</commentid>
    <comment_count>2</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2022-06-25 09:07:51 +0300</bug_when>
    <thetext>только вести историю версий загрузки ядер.
какую-то службу, которая каждый раз при загрузке пишет в текстовый файл/базу, какое ядро было загружено и когда.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212056</commentid>
    <comment_count>3</comment_count>
    <who name="Alexander Kovalev">alexvk72</who>
    <bug_when>2022-06-25 10:05:47 +0300</bug_when>
    <thetext>Попробовал загружать предыдущие установленные ядра, и, смотрите, как интересно ведет себя скрипт:

[root@localhost ~]# remove-old-kernels
Running kernel version: kernel-image-std-def-2:5.10.121-alt1
Checking for installed kernel packages...
For removing:
  kernel-image-std-def-5.10.118-alt1.x86_64


[root@localhost ~]# remove-old-kernels
Running kernel version: kernel-image-std-def-2:5.10.118-alt1
Checking for installed kernel packages...
For removing:

Nothing to remove.

То есть ядра, старше текущего, не рассматриваются! :) В таком случае, остается подправить, чтобы не удалялось ядро с максимальной версией из получаемого списка. В смысле, после получения списка удалить в нем максимальное значение.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212057</commentid>
    <comment_count>4</comment_count>
    <who name="Alexander Kovalev">alexvk72</who>
    <bug_when>2022-06-25 10:10:19 +0300</bug_when>
    <thetext>Не старше текущего, а моложе, конечно :) Более новой версии.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212059</commentid>
    <comment_count>5</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2022-06-25 11:48:56 +0300</bug_when>
    <thetext>Если важно, какие ядра были недавно загружены, можно смотреть в
вывод программы last -a reboot .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212063</commentid>
    <comment_count>6</comment_count>
      <attachid>10983</attachid>
    <who name="Alexander Kovalev">alexvk72</who>
    <bug_when>2022-06-25 23:16:56 +0300</bug_when>
    <thetext>Created attachment 10983
remove-old-kernels.new для тестирования</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212064</commentid>
    <comment_count>7</comment_count>
      <attachid>10983</attachid>
    <who name="Alexander Kovalev">alexvk72</who>
    <bug_when>2022-06-25 23:27:49 +0300</bug_when>
    <thetext>Comment on attachment 10983
remove-old-kernels.new для тестирования

см. строки 98-116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212065</commentid>
    <comment_count>8</comment_count>
    <who name="Alexander Kovalev">alexvk72</who>
    <bug_when>2022-06-25 23:37:53 +0300</bug_when>
    <thetext>Спасибо, команда last -a reboot интересная, но если учитывать предыдущее загруженное ядро, придется весь код переписывать, я в этом пока не силен :) Посмотрел код, насколько понял, остаются текущее и новые ядра из текущего flavour и последние из других flavours. Чтобы сильно не менять алгоритм, дописал определение предыдущего ядра относительно текущего для текущего flavour и исключение этого предыдущего ядра и новее из выбора ядер для удаления. Файл вложил, смотреть строки 98-116. Может, код не очень красиво выглядит из-за повтора цикла, но работает :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212067</commentid>
    <comment_count>9</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-06-26 05:36:04 +0300</bug_when>
    <thetext>1. Сейчас поведение remove-old-kernels понятное, и его нужно запускать после успешной загрузки в новое ядро, после того как вы убедились, что проблем нет.
2. Как я уже сказал, просто предыдущая версия не гарантирует даже 99% что это предыдущее загруженное или предыдущее рабочее ядро. Вам повезло что это оказалась та версия что вам нужна, а другим людям не повезёт. Зачем реализовывать логику которая не дает и 1% гарантий не понятно.
3. `last -a reboot` интересный вариант. Видимо нужно выбирать ядро, которое проработало минимум 1 день.

 5.15.48-std-def-alt1:~# last -a reboot -22
 reboot   system boot  Sun Jun 26 05:17 - 05:24  (00:06)     5.15.48-std-def-alt1
 reboot   system boot  Sun Jun 26 05:06 - 05:16  (00:09)     5.18.6-un-def-alt2
 reboot   system boot  Sun Jun 26 05:00 - 05:05  (00:05)     5.18.6-un-def-alt2
 reboot   system boot  Sun Jun 26 04:35 - 04:59  (00:23)     5.15.48-std-def-alt1
 reboot   system boot  Sun Jun 26 04:31 - 04:34  (00:02)     5.18.6-un-def-alt2
 reboot   system boot  Sun Jun 26 04:28 - 04:30  (00:02)     5.18.6-un-def-alt2
 reboot   system boot  Fri Jun 24 03:54 - 04:30 (2+00:36)    5.18.6-un-def-alt2
 reboot   system boot  Thu Jun 23 20:02 - 03:53  (07:51)     5.18.6-un-def-alt1
 reboot   system boot  Wed Jun 22 03:59 - 20:00 (1+16:01)    5.15.48-std-def-alt1
 reboot   system boot  Wed Jun 22 03:45 - 03:57  (00:12)     5.15.48-std-def-alt1

Тут ядро это 5.18.6-un-def-alt2 так как оно работало 2 дня. Первое ядро с &quot;+&quot; в 10 столбце.

 5.15.48-std-def-alt1:~# last -a reboot | awk &apos;$10~/+/{print$11;exit}&apos;
 5.18.6-un-def-alt2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212068</commentid>
    <comment_count>10</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2022-06-26 09:46:20 +0300</bug_when>
    <thetext>update-kernel-1.3-alt1 -&gt; sisyphus:

 Sun Jun 26 2022 Vitaly Chikunov &lt;vt@altlinux&gt; 1.3-alt1
 - remove-old-kernels: Show list of kernel that won&apos;t be removed and why.
 - remove-old-kernels: Add colors to improve UI (for a dark background).
 - remove-old-kernels: Do not remove previous kernel with good uptime (backup
   kernel) as safeguarding measure. (ALT#43062)
 - remove-old-kernels: Slightly change confirmation logic (do not leave
   confirmation to apt-get.)
 - remove-old-kernels: Add -A option to attempt to remove other flavours
   completely (which was previously impossible).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212069</commentid>
    <comment_count>11</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-06-26 09:51:36 +0300</bug_when>
    <thetext>Сделал экспериментальную поддержку backup ядра (из &quot;last -a reboot&quot;). До кучи попробовал улучшить UI у remove-old-kernels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212095</commentid>
    <comment_count>12</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2022-06-27 16:08:58 +0300</bug_when>
    <thetext>(In reply to Alexander Kovalev from comment #0)

&gt; Таким образом, если в работе текущего ядра обнаружатся проблемы, да еще и не
&gt; сразу, то возможности загрузить предыдущее ядро уже не будет. И для
&gt; исключения таких случаев remove-old-kernels должен оставлять предыдущее
&gt; ядро. В данном примере должно удалиться только 5.10.118.

Вообще, до этого момента, я просто запускал remove-old-kernels до обновления ядра, оставляя одно то, которое давно работало.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215164</commentid>
    <comment_count>13</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2022-09-22 11:28:10 +0300</bug_when>
    <thetext>(In reply to Vitaly Chikunov from comment #11)

&gt; Сделал экспериментальную поддержку backup ядра (из &quot;last -a reboot&quot;). До
&gt; кучи попробовал улучшить UI у remove-old-kernels.

Интересный вариант, но несколько не доработан. 

Случай 1:

# remove-old-kernels
Currently booted kernel package: kernel-image-std-def-4.9.267-alt0.M80P.1
Backup kernel is the same as booted kernel (uptime 9 days).
Not removing this kernel (with the reason why):
   kernel-image-std-def-4.9.267-alt0.M80P.1 (latest for std-def, currently booted)

Will be removing this kernel:
   kernel-image-std-def-4.9.240-alt0.M80P.1

Запасным ядром выбирается работающее, и реально запаса не остаётся.

Случай 2:

# remove-old-kernels
Currently booted kernel package: kernel-image-std-def-4.9.319-alt0.M80P.1
Warning: Backup kernel is not determined.
Not removing this kernel (with the reason why):
   kernel-image-std-def-4.9.319-alt0.M80P.1 (latest for std-def, currently booted)

Will be removing these 3 kernels:

&quot;last -a reboot&quot; не выводит искомых строк (кстати, отдельно интересно почему), и опять не остаётся ни одного запасного ядра. 

В общем в случае, когда что-то непонятно, всё равно надо оставлять второе ядро, если есть, что оставлять.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215165</commentid>
    <comment_count>14</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2022-09-22 11:46:05 +0300</bug_when>
    <thetext>(In reply to Sergey Y. Afonin from comment #13)

&gt; Случай 1:
&gt; 
&gt; # remove-old-kernels
&gt; Currently booted kernel package: kernel-image-std-def-4.9.267-alt0.M80P.1
&gt; Backup kernel is the same as booted kernel (uptime 9 days).
&gt; Not removing this kernel (with the reason why):
&gt;    kernel-image-std-def-4.9.267-alt0.M80P.1 (latest for std-def, currently
&gt; booted)
&gt; 
&gt; Will be removing this kernel:
&gt;    kernel-image-std-def-4.9.240-alt0.M80P.1
&gt; 
&gt; Запасным ядром выбирается работающее, и реально запаса не остаётся.

И, кстати, это сам по себе баг, если расчёт по максимальному количеству дней:

# rpm -qa| grep kernel-im
kernel-image-std-def-4.9.267-alt0.M80P.1
kernel-image-std-def-4.9.240-alt0.M80P.1

# last -a reboot
reboot   system boot  Mon Sep 12 19:57 - 12:41 (9+16:44)    4.9.267-std-def-alt0.M80P.1
reboot   system boot  Sat Dec  5 05:31 - 12:41 (656+07:09)  4.9.240-std-def-alt0.M80P.1
reboot   system boot  Mon Oct 19 12:14 - 05:29 (46+17:15)   4.9.239-std-def-alt0.M80P.1
reboot   system boot  Tue Aug 27 17:40 - 12:12 (418+18:31)  4.9.188-std-def-alt0.M80P.1

4.9.240-alt0.M80P.1 явно должно получиться кандидатом на бакап. Хотя если выбирается просто первое ядро с +, то так оно и есть, так как текущее 9+. И ещё момент надо, видимо, учитывать: last -a reboot может выводить список с ядрами, которых уже нет, и максимальное время может оказаться у отсутствующих ядер.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215168</commentid>
    <comment_count>15</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-09-22 13:11:52 +0300</bug_when>
    <thetext>remove-old-kernels сейчас &quot;берет последнее ядро с uptime больше суток&quot;. Это может быть то же самое ядро что уже загружено. Это не баг и &quot;не недоработанное&quot;, а детерминированное понятнее поведение. Задача &quot;сделать чтоб было хорошо&quot; не решалась так как она априори не решаемая.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215173</commentid>
    <comment_count>16</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2022-09-22 14:13:04 +0300</bug_when>
    <thetext>(In reply to Vitaly Chikunov from comment #15)

&gt; Задача &quot;сделать чтоб было хорошо&quot; не решалась так как она априори не решаемая.

Почему? Главное её определить. А определить можно как &quot;любым возможным образом оставить не менее двух ядер&quot;. Тогда вполне решаемо: в случае, если определить предпочтительное запасное не вышло, дополнительно оставить первое попавшееся.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10983</attachid>
            <date>2022-06-25 23:16:56 +0300</date>
            <delta_ts>2022-06-25 23:16:56 +0300</delta_ts>
            <desc>remove-old-kernels.new для тестирования</desc>
            <filename>remove-old-kernels.new</filename>
            <type>application/x-shellscript</type>
            <size>4853</size>
            <attacher name="Alexander Kovalev">alexvk72</attacher>
            
              <data encoding="base64">IyEvYmluL3NoCiMgQ29weXJpZ2h0IChDKSAyMDA4IFZsYWRpbWlyIFYuIEthbWFyemluIDx2dmtA
YWx0bGludXgub3JnPgojCiMgUmVtb3ZlIGFsbCBrZXJuZWxzIGV4Y2VwdCBjdXJyZW50CiMKIyBU
aGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCgouIHNoZWxsLWVycm9yCi4gc2hlbGwtYXJncwoKc2hvd19oZWxwKCkKewogICAg
ICAgIGNhdCA8PEVPRgpVc2FnZTogJFBST0cgW29wdGlvbnNdClZhbGlkIG9wdGlvbnMgYXJlOgoJ
LWYsIC15LCAtLWZvcmNlICAgbm9uLWludGVyYWN0aXZlIGtlcm5lbCByZW1vdmFsIChkZWZhdWx0
IGlzIGludGVyYWN0aXZlKQoJLW4sIC0tZHJ5LXJ1biAgICAganVzdCBzaW11bGF0ZSByZW1vdmFs
CgktdCwgLS10eXBlICAgICAgICByZW1vdmUga2VybmVscyB3aXRoIHNwZWNpZmllZCBmbGF2b3Vy
IChvdnotc21wLCBzdGQtZGVmLCBldGMpCgktYSwgLS1hbGwgICAgICAgICByZW1vdmUga2VybmVs
cyB3aXRoIGFsbCBmbGF2b3VycwoJLWgsIC0taGVscCAgICAgICAgc2hvdyB0aGlzIHRleHQgYW5k
IGV4aXQKRU9GCmV4aXQgMQp9CgojcGFyc2UgY29tbWFuZCBsaW5lIG9wdGlvbnMKVEVNUD1gZ2V0
b3B0IC1uICRQUk9HIC1vIGYseSxuLHQ6LGgsYSAtbCBmb3JjZSxkcnktcnVuLHR5cGU6LGhlbHAs
YWxsIC0tICIkQCJgIHx8IHNob3dfaGVscApldmFsIHNldCAtLSAiJFRFTVAiCgp3aGlsZSA6OyBk
bwogICAgICAgIGNhc2UgIiQxIiBpbgogICAgICAgICAgICAgICAgLS0pIHNoaWZ0OyBicmVhawog
ICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgLWZ8LXl8LS1mb3JjZSkg
Zm9yY2U9Ii15IgogICAgICAgICAgICAgICAgICAgICAgICA7OwoJCS1ufC0tZHJ5LXJ1bikgZHJ5
cnVuPSItLW5vLXJlbW92ZSIKCQkJOzsKCQktdHwtLXR5cGUpIHNoaWZ0IDsga2VybmVsX2ZsYXZv
dXI9IiQxIgoJCQk7OwoJCS1hfC0tYWxsKSBhbGw9MQoJCQk7OwogICAgICAgICAgICAgICAgLWh8
LS1oZWxwKSBzaG93X2hlbHAKICAgICAgICBlc2FjCglzaGlmdApkb25lCgppZiBbIC1uICIkZm9y
Y2UiIC1hIC1uICIkZHJ5cnVuIiBdOyB0aGVuCglzaG93X3VzYWdlICctLWZvcmNlIGFuZCAtLWRy
eS1ydW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvcHRpb25zLicKZmkKCmlmIFsgLW4gIiRrZXJu
ZWxfZmxhdm91ciIgLWEgLW4gIiRhbGwiIF07IHRoZW4KCXNob3dfdXNhZ2UgJy0tdHlwZSBhbmQg
LS1hbGwgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvcHRpb25zLicKZmkKCiMjIyMjIyBjb3BpZWQg
ZnJvbSB1cGRhdGUta2VybmVsCiMgZ2V0IHJ1bm5pbmcga2VybmVsIHZlcnNpb24KY3VycmVudF9r
ZXJuZWxfcGFja2FnZT0kKHJwbXF1ZXJ5IC1xZiAvbGliL21vZHVsZXMvJCh1bmFtZSAtcikva2Vy
bmVsIDI+L2Rldi9udWxsKQppZiBbIC1uICIkY3VycmVudF9rZXJuZWxfcGFja2FnZSIgXSA7IHRo
ZW4KICAgIGN1cnJlbnRfa2VybmVsX3BrZ25hbWU9JChycG1xdWVyeSAtLXF1ZXJ5Zm9ybWF0ICIl
e05BTUV9LSV7U0VSSUFMfTole1ZFUlNJT059LSV7UkVMRUFTRX1cbiIgLXEgJGN1cnJlbnRfa2Vy
bmVsX3BhY2thZ2UpCiAgICBlY2hvICRjdXJyZW50X2tlcm5lbF9wa2duYW1lIHwgZ3JlcCAtcSAi
KG5vbmUpIiAmJiBjdXJyZW50X2tlcm5lbF9wa2duYW1lPSQocnBtcXVlcnkgLS1xdWVyeWZvcm1h
dCAiJXtOQU1FfS0le1ZFUlNJT059LSV7UkVMRUFTRX1cbiIgLXEgJGN1cnJlbnRfa2VybmVsX3Bh
Y2thZ2UpCmVsc2UKICAgIGN1cnJlbnRfa2VybmVsX3BrZ25hbWU9IlVOS05PV04iCmZpCmVjaG8g
IlJ1bm5pbmcga2VybmVsIHZlcnNpb246ICRjdXJyZW50X2tlcm5lbF9wa2duYW1lIgojIyMjIyMj
CgojIHNldCBrZXJuZWwgZmxhdm91ci4gaWYgbm90IGRlZmluZWQgd2l0aCAtdCBvcHRpb24sIHVz
ZSBjdXJyZW50CmN1cnJlbnRfa2VybmVsX2ZsYXZvdXI9IiQodW5hbWUgLXIpIgpjdXJyZW50X2tl
cm5lbF9mbGF2b3VyPSIke2N1cnJlbnRfa2VybmVsX2ZsYXZvdXIjKi19IgpjdXJyZW50X2tlcm5l
bF9mbGF2b3VyPSIke2N1cnJlbnRfa2VybmVsX2ZsYXZvdXIlLSp9IgppZiBbIC1uICIkYWxsIiBd
IDsgdGhlbgoJZmxhdm91cnM9IiQocnBtIC1xYSAtLXF1ZXJ5Zm9ybWF0ICcle05BTUV9XG4nIHwg
ZmdyZXAga2VybmVsLWltYWdlLSB8IGZncmVwIC12IGRvbVUgfCBzb3J0IC11IHwgY3V0IC1kICIt
IiAtZjMtIHwgdHIgJ1xuJyAnICcpIgplbHNlCglmbGF2b3Vycz0iJHtrZXJuZWxfZmxhdm91cjot
JGN1cnJlbnRfa2VybmVsX2ZsYXZvdXJ9IgpmaQoKZWNobyAiQ2hlY2tpbmcgZm9yIGluc3RhbGxl
ZCBrZXJuZWwgcGFja2FnZXMuLi4iCmZsYXZvdXJfdmVyc2lvbl9yZWxlYXNlPSIkKHVuYW1lIC1y
IHwgYXdrIC1GLSAne3ByaW50ICQyIi0iJDMiLSIkMSItIiQ0fScpIgoKZWNobyAiRm9yIHJlbW92
aW5nOiIKZm9yIGtlcm5lbF9mbGF2b3VyIGluICRmbGF2b3VycwpkbwoJb2xkX2tlcm5lbHM9IiQo
cnBtIC1xYSB8IGZncmVwIGtlcm5lbC1pbWFnZS0ka2VybmVsX2ZsYXZvdXIgfCBmZ3JlcCAtdiAk
Zmxhdm91cl92ZXJzaW9uX3JlbGVhc2UgfCBzb3J0IHwgdHIgJ1xuJyAnICcpIgoJaWYgWyAtbiAi
JGFsbCIgXSA7IHRoZW4KCQllY2hvICIka2VybmVsX2ZsYXZvdXI6IgoJZmkKIyMjIEFsZXhWSyBi
ZWdpbiBwYXRjaCAtLSBzZXQgcHJldmlvdXMga2VybmVsIHBhY2thZ2UgZm9yIGN1cnJlbnQga2Vy
bmVsIGluIGN1cnJlbnQgZmxhdm91ciAjIyMKCXByZXZfa2VybmVsX3BhY2thZ2U9IiRjdXJyZW50
X2tlcm5lbF9wYWNrYWdlIgoJZm9yIGtlcm5lbCBpbiAkb2xkX2tlcm5lbHMKCWRvCgkJaWYgWyAi
JGN1cnJlbnRfa2VybmVsX2ZsYXZvdXIiID0gIiRrZXJuZWxfZmxhdm91ciIgXSA7IHRoZW4KCQkJ
Y29tcGFyZXZlcj0iJChycG1ldnJjbXAgIiRrZXJuZWwiICIkY3VycmVudF9rZXJuZWxfcGFja2Fn
ZSIpIgoJCQlbICIkY29tcGFyZXZlciIgLWx0IDAgXSAmJiBwcmV2X2tlcm5lbF9wYWNrYWdlPSIk
a2VybmVsIgoJCWZpCglkb25lCiMjIyBBbGV4VksgZW5kIHBhdGNoICMjIwoJZm9yIGtlcm5lbCBp
biAkb2xkX2tlcm5lbHMKCWRvCgkJaWYgWyAiJGN1cnJlbnRfa2VybmVsX2ZsYXZvdXIiID0gIiRr
ZXJuZWxfZmxhdm91ciIgXSA7IHRoZW4KIyMjIEFsZXhWSyBjb21tZW50CQkJY29tcGFyZXZlcj0i
JChycG1ldnJjbXAgIiRjdXJyZW50X2tlcm5lbF9wYWNrYWdlIiAiJGtlcm5lbCIpIgojIyMgQWxl
eFZLIGNvbW1lbnQJCQlbICIkY29tcGFyZXZlciIgLWx0IDAgXSAmJiBjb250aW51ZQojIyMgQWxl
eFZLIGJlZ2luIHBhdGNoIC0tIHNlbGVjdCBrZXJuZWwgcGFja2FnZSBvbGRlciB0aGFuIHByZXZp
b3VzIGtlcm5lbCBmb3IgcmVtb3ZlICMjIwoJCQljb21wYXJldmVyPSIkKHJwbWV2cmNtcCAiJHBy
ZXZfa2VybmVsX3BhY2thZ2UiICIka2VybmVsIikiCgkJCVsgIiRjb21wYXJldmVyIiAtbGUgMCBd
ICYmIGNvbnRpbnVlCiMjIyBBbGV4VksgZW5kIHBhdGNoICMjIwoJCWVsc2UKCQkJIyBjaGVjayBp
ZiBrZXJuZWwgaXMgbGF0ZXN0IHdpdGggZ2l2ZW4gZmxhdm91cgoJCQlsYXRlc3Q9MQoJCQlmb3Ig
a2VybmVsMiBpbiAkb2xkX2tlcm5lbHMKCQkJZG8KCQkJCWNvbXBhcmV2ZXI9IiQocnBtZXZyY21w
ICIka2VybmVsIiAiJGtlcm5lbDIiKSIKCQkJCVsgIiRjb21wYXJldmVyIiAtbHQgMCBdICYmIGxh
dGVzdD0wCgkJCWRvbmUKCQkJWyAiJGxhdGVzdCIgLWVxIDEgXSAmJiBjb250aW51ZQoJCWZpCgkJ
ZWNobyAiICAka2VybmVsIgoJCWFwdF9hcmdzX2xpc3Q9IiRhcHRfYXJnc19saXN0ICQocnBtIC1x
IC0tcXVlcnlmb3JtYXQgJyV7TkFNRX09JXtFUE9DSH06JXtWRVJTSU9OfS0le1JFTEVBU0V9XG4n
ICRrZXJuZWwgXAoJCQl8IHNlZCAtZSAicywobm9uZSk6LCxnIikiCglkb25lCmRvbmUKZWNobwoK
aWYgWyAteiAiJGFwdF9hcmdzX2xpc3QiIF0gOyB0aGVuCgllY2hvICJOb3RoaW5nIHRvIHJlbW92
ZS4iCglleGl0IDAKZmkKCiMgdXNlIHN1ZG8oMSkgaWYgcnVubmluZyBhcyB1bnByaXZpbGVnZWQg
dXNlcgpbICIkVUlEIiA9ICIwIiBdICYmIFNVRE89IHx8IFNVRE89c3VkbwoKJFNVRE8gYXB0LWdl
dCAkZm9yY2UgJGRyeXJ1biByZW1vdmUgJGFwdF9hcmdzX2xpc3QKCiMgTWFzayBub24temVybyBh
cHQgZXhpdCBjb2RlIG9uIGRyeSBydW46CmlmIFsgLW4gIiRkcnlydW4iIF07IHRoZW4KICAgIGV4
aXQgMApmaQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>