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

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

    <bug>
          <bug_id>47537</bug_id>
          
          <creation_ts>2023-09-12 17:38:57 +0300</creation_ts>
          <short_desc>[done] join gerben@</short_desc>
          <delta_ts>2025-01-14 14:22:23 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Team Accounts</product>
          <component>join</component>
          <version>unspecified</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://altlinux.org/Team/Join</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="Denis Rastyogin">rastyoginds</reporter>
          <assigned_to name="Gleb F-Malinovskiy">glebfm</assigned_to>
          <cc>arseny</cc>
    
    <cc>dutyrok</cc>
    
    <cc>dutyrok</cc>
    
    <cc>glebfm</cc>
    
    <cc>ldv</cc>
          
          <qa_contact name="Andrey Cherepanov">cas</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>232956</commentid>
    <comment_count>0</comment_count>
      <attachid>14395</attachid>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2023-09-12 17:38:57 +0300</bug_when>
    <thetext>Created attachment 14395
ssh_public_key

Псевдоним (имя пользователя): gerben
Почта для перессылки: rastegind@gmail.com
Намерения: хочу научиться собирать пакеты
Имя ментора: dutyrok

Подписка: dutyrok@altlinux.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232957</commentid>
    <comment_count>1</comment_count>
      <attachid>14396</attachid>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2023-09-12 17:50:23 +0300</bug_when>
    <thetext>Created attachment 14396
gpg_public_key</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233100</commentid>
    <comment_count>2</comment_count>
      <attachid>14422</attachid>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2023-09-14 10:52:33 +0300</bug_when>
    <thetext>Created attachment 14422
gpg_public_key

Решил использовать подключ.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233113</commentid>
    <comment_count>3</comment_count>
      <attachid>14423</attachid>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2023-09-14 12:08:47 +0300</bug_when>
    <thetext>Created attachment 14423
gpg_public_key</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233118</commentid>
    <comment_count>4</comment_count>
      <attachid>14424</attachid>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2023-09-14 12:33:41 +0300</bug_when>
    <thetext>Created attachment 14424
gpg_public</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233119</commentid>
    <comment_count>5</comment_count>
    <who name="Alexandr Shashkin">dutyrok</who>
    <bug_when>2023-09-14 12:37:17 +0300</bug_when>
    <thetext>(Ответ для rastyoginds на комментарий #0)
&gt; Создано вложение 14395 [подробности]
&gt; ssh_public_key
&gt; 
&gt; Псевдоним (имя пользователя): gerben
&gt; Почта для перессылки: rastegind@gmail.com
&gt; Намерения: хочу научиться собирать пакеты
&gt; Имя ментора: dutyrok
&gt; 
&gt; Подписка: dutyrok@altlinux.org

Согласен быть ментором</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236689</commentid>
    <comment_count>6</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2023-11-08 21:17:38 +0300</bug_when>
    <thetext>Ментор есть, ключи в порядке.
T/J/S -&gt; 1.3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237832</commentid>
    <comment_count>7</comment_count>
    <who name="Alexandr Shashkin">dutyrok</who>
    <bug_when>2023-11-25 18:32:26 +0300</bug_when>
    <thetext>Кандидат готов к следующему этапу

T/J/M -&gt; 2.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238643</commentid>
    <comment_count>8</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2023-12-07 22:58:59 +0300</bug_when>
    <thetext>ssh ключ на gitery.alt зарегистрирован.
Адрес для пересылки создан.

T/J/S -&gt; 2.3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243279</commentid>
    <comment_count>9</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-03-20 19:25:47 +0300</bug_when>
    <thetext>На данный момент собран: 
yyjson - https://git.altlinux.org/people/gerben/packages/?p=libyyjson.git;a=summary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243297</commentid>
    <comment_count>10</comment_count>
    <who name="Alexandr Shashkin">dutyrok</who>
    <bug_when>2024-03-21 11:04:58 +0300</bug_when>
    <thetext>Прошу кандидату дать доступ к сборочнице.

T/J/M -&gt; 3.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243557</commentid>
    <comment_count>11</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2024-03-26 23:09:36 +0300</bug_when>
    <thetext>ssh ключ на gyle.alt зарегистрирован.
Пакет alt-gpgkeys обновлён.
Адрес подписан на devel@.

T/J/S -&gt; 3.6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248740</commentid>
    <comment_count>12</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-07-11 16:39:22 +0300</bug_when>
    <thetext>В процессе вступления были собраны:
gpg-tui - https://packages.altlinux.org/ru/tasks/349963/
libyyjson - https://packages.altlinux.org/ru/tasks/345401/
python3-module-yyjson - https://packages.altlinux.org/ru/tasks/345401/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249231</commentid>
    <comment_count>13</comment_count>
    <who name="Alexandr Shashkin">dutyrok</who>
    <bug_when>2024-07-24 14:27:49 +0300</bug_when>
    <thetext>Думаю кандидат готов к независимой оценке.
Пора звать рецензента.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254363</commentid>
    <comment_count>14</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2024-11-12 21:45:19 +0300</bug_when>
    <thetext>Призван рецензент (arseny@) для независимой оценки готовности кандидата.

T/J/S -&gt; 4.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254616</commentid>
    <comment_count>15</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-17 18:15:11 +0300</bug_when>
    <thetext>(In reply to Gleb F-Malinovskiy from comment #14)
&gt; Призван рецензент (arseny@) для независимой оценки готовности кандидата.
&gt; 
&gt; T/J/S -&gt; 4.2.
ACK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254617</commentid>
    <comment_count>16</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-17 18:17:54 +0300</bug_when>
    <thetext>(In reply to rastyoginds from comment #12)
&gt; В процессе вступления были собраны:
&gt; libyyjson - https://packages.altlinux.org/ru/tasks/345401/
&gt; python3-module-yyjson - https://packages.altlinux.org/ru/tasks/345401/
Здравствуйте, Денис!

Пакет libyyjson мне прямо понравился, упакован очень методично и бережно. В частности, докопаться не до чего. :)
Впрочем, видимо, сами исходники не очень портили мейнтейнеру нервы (иначе &quot;шрамы боевого опыта&quot; остаются в спеке).

Библиотека сразу упакована правильно.

К питоньему модулю тоже вопросов не имею, URL и VCS расставлены с умом, pyproject_installer всё сделал.

Я хотел бы ещё увидеть, как вы планируете обновлять такие пакеты в сизифе (вышла как минимум новая версия libyyjson).

(In reply to rastyoginds from comment #12)
&gt; В процессе вступления были собраны:
&gt; gpg-tui - https://packages.altlinux.org/ru/tasks/349963/
Это немного позже.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254706</commentid>
    <comment_count>17</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-19 11:29:49 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #16)
&gt; Я хотел бы ещё увидеть, как вы планируете обновлять такие пакеты в сизифе
&gt; (вышла как минимум новая версия libyyjson).

Добрый день, Арсений! Спасибо за рецензию, пакеты обновил https://packages.altlinux.org/ru/tasks/362819/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254715</commentid>
    <comment_count>18</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-19 13:27:58 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #17)
&gt; (Ответ для Arseny Maslennikov на комментарий #16)
&gt; &gt; Я хотел бы ещё увидеть, как вы планируете обновлять такие пакеты в сизифе
&gt; &gt; (вышла как минимум новая версия libyyjson).
&gt; 
&gt; Добрый день, Арсений! Спасибо за рецензию, пакеты обновил
&gt; https://packages.altlinux.org/ru/tasks/362819/
Увидел.
Неплохо!
Питоний модуль даже успел обновиться дважды. :)

Вопрос _к кандидату_: если вам вдруг потребуется изменить/улучшить исходники упакованных libyyjson или python3-module-py_yyjson (чего вам пока не приходилось) и упаковать результат, как вы это будете делать?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254720</commentid>
    <comment_count>19</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-19 14:04:59 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #18)
&gt; Вопрос _к кандидату_: если вам вдруг потребуется изменить/улучшить исходники
&gt; упакованных libyyjson или python3-module-py_yyjson (чего вам пока не
&gt; приходилось) и упаковать результат, как вы это будете делать?

У меня был небольшой опыт при сборке данного пакета https://git.altlinux.org/people/gerben/packages/?p=python3-module-fastapi-template.git;a=summary . С этими же пакетами я поступил бы также, добавил и применил патч.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254820</commentid>
    <comment_count>20</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-20 13:53:37 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #19)
&gt; (Ответ для Arseny Maslennikov на комментарий #18)
&gt; &gt; Вопрос _к кандидату_: если вам вдруг потребуется изменить/улучшить исходники
&gt; &gt; упакованных libyyjson или python3-module-py_yyjson (чего вам пока не
&gt; &gt; приходилось) и упаковать результат, как вы это будете делать?
&gt; 
&gt; У меня был небольшой опыт при сборке данного пакета
&gt; https://git.altlinux.org/people/gerben/packages/?p=python3-module-fastapi-
&gt; template.git;a=summary .
Да, так можно. :)

Пойду читать gpg-tui на rust+cargo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254821</commentid>
    <comment_count>21</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-20 13:54:08 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #19)
&gt; (Ответ для Arseny Maslennikov на комментарий #18)
&gt; &gt; Вопрос _к кандидату_: если вам вдруг потребуется изменить/улучшить исходники
&gt; &gt; упакованных libyyjson или python3-module-py_yyjson (чего вам пока не
&gt; &gt; приходилось) и упаковать результат, как вы это будете делать?
&gt; 
&gt; У меня был небольшой опыт при сборке данного пакета
&gt; https://git.altlinux.org/people/gerben/packages/?p=python3-module-fastapi-
&gt; template.git;a=summary . С этими же пакетами я поступил бы также, добавил и
&gt; применил патч.
Ооо. Попалось на глаза:
https://git.altlinux.org/people/gerben/packages/?p=python3-module-fastapi-template.git;a=blob;f=.gear/instead_of_pytests.sh;h=d5cad27c8a986bebf3c1c7d44e72c769f7c15078;hb=982aa4c91056009949ee20c0452aafc62ecbbabb

Вот ещё хороший вопрос.
Зачем, по-вашему, здесь /bin/bash в hashbang? Есть же /bin/sh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254822</commentid>
    <comment_count>22</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-20 14:26:39 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #21)
&gt; Ооо. Попалось на глаза:
&gt; https://git.altlinux.org/people/gerben/packages/?p=python3-module-fastapi-
&gt; template.git;a=blob;f=.gear/instead_of_pytests.sh;
&gt; h=d5cad27c8a986bebf3c1c7d44e72c769f7c15078;
&gt; hb=982aa4c91056009949ee20c0452aafc62ecbbabb
&gt; 
&gt; Вот ещё хороший вопрос.
&gt; Зачем, по-вашему, здесь /bin/bash в hashbang? Есть же /bin/sh.

Если скрипт строго POSIX-совместим, тогда нужно использовать /bin/sh. Однако так как это пользовательский тест, то можно использовать более функциональный /bin/bash. Конкретно в этом случае не имеет особого значения, что использовать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254832</commentid>
    <comment_count>23</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2024-11-20 15:33:05 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #22)
&gt; Если скрипт строго POSIX-совместим, тогда нужно использовать /bin/sh.
Для кода, который предполагает использование только в Альте можно считать, что /bin/sh это такой bash --posix и без libreadline.  А зачем вообще тестирование из нескольких строк выносить в отдельный файл?  Мне кажется, этот же код нормально смотрелся прямо в секции %check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254833</commentid>
    <comment_count>24</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-20 15:50:17 +0300</bug_when>
    <thetext>(Ответ для Gleb F-Malinovskiy на комментарий #23)
&gt; А зачем вообще тестирование из нескольких строк выносить в отдельный файл? 
&gt; Мне кажется, этот же код нормально смотрелся прямо в секции %check.

Мне показалось, что так будет лучше, с точки зрения читабельности spec файла. Да и в какой-то момент тесты могут вырасти с нескольких строчек, поэтому решил сделать небольшой задел на будущее)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254870</commentid>
    <comment_count>25</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-21 18:45:22 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #22)
&gt; (Ответ для Arseny Maslennikov на комментарий #21)
&gt; &gt; Ооо. Попалось на глаза:
&gt; &gt; https://git.altlinux.org/people/gerben/packages/?p=python3-module-fastapi-
&gt; &gt; template.git;a=blob;f=.gear/instead_of_pytests.sh;
&gt; &gt; h=d5cad27c8a986bebf3c1c7d44e72c769f7c15078;
&gt; &gt; hb=982aa4c91056009949ee20c0452aafc62ecbbabb
&gt; &gt; 
&gt; &gt; Вот ещё хороший вопрос.
&gt; &gt; Зачем, по-вашему, здесь /bin/bash в hashbang? Есть же /bin/sh.
&gt; 
&gt; Если скрипт строго POSIX-совместим, тогда нужно использовать /bin/sh. Однако,
&gt; так как это пользовательский тест,
А что значит &quot;пользовательский тест&quot;?
Тест, наверное, в том смысле, что исполняется в %check с целью как-то протестировать собранное. А что есть &quot;пользовательский&quot;?

&gt; то можно использовать более
&gt; функциональный /bin/bash. Конкретно в этом случае не имеет особого значения,
&gt; что использовать.
А раз не имеет значения, то отсюда и из реплики Глеба, как я понимаю, вытекает, что /bin/bash использовать можно, но незачем =&gt; не нужно. Более того, даже если в Альте бы поддерживались non-bash реализации sh, они бы все (busybox ash, dash) справились с вашим скриптом.

Да и просто многие отличительные башизмы в исходном тексте скриптов труднее использовать правильно, чем функциональность, которая есть и в /bin/sh.
Если же позарез потребуются вещи вроде &lt;()-подстановки, к bash можно и вернуться, написав в видном месте, почему.
[Написал и после этого проверил; у нас sh, он же sh5, точно умеет &lt;(). Ну, значит, что-нибудь ещё действительно безобидное. А, и &lt;() в хешернице потребует наличия там /proc. :)]

В общем, пока что неубедительно; я б предложил далее так не делать, но мчаться срочно исправлять bash на sh тоже смысла нет, такие вещи можно поменять во время следующего обновления. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254871</commentid>
    <comment_count>26</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-21 18:46:14 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #22)
&gt; (Ответ для Arseny Maslennikov на комментарий #21)
&gt; &gt; Ооо. Попалось на глаза:
&gt; &gt; https://git.altlinux.org/people/gerben/packages/?p=python3-module-fastapi-
&gt; &gt; template.git;a=blob;f=.gear/instead_of_pytests.sh;
&gt; &gt; h=d5cad27c8a986bebf3c1c7d44e72c769f7c15078;
&gt; &gt; hb=982aa4c91056009949ee20c0452aafc62ecbbabb
&gt; &gt; 
&gt; &gt; Вот ещё хороший вопрос.
&gt; &gt; Зачем, по-вашему, здесь /bin/bash в hashbang? Есть же /bin/sh.
&gt; 
&gt; Если скрипт строго POSIX-совместим, тогда нужно использовать /bin/sh. Однако
&gt; так как это пользовательский тест, то можно использовать более
&gt; функциональный /bin/bash. Конкретно в этом случае не имеет особого значения,
&gt; что использовать.
Также, по мотивам:
— начать скрипт с `set -e` — хорошая идея; `set -eu` ещё лучше;
— `if [ ! -e $item ];`: конкретно тут никаких проблем, но лучше вогнать в привычку брать подстановки в &quot;&quot;, чтобы не забыть это сделать там, где подстанавливаются данные внешней природы и возможно появление в команде новых слов после word split. На следующей строке, например, всё хорошо.

То же самое справедливо и для .gear/vendor-modules.sh в gpg-tui. Вот любопытный этюд, рекомендую его как-нибудь запустить и посмотреть, что он выведет. :)
sh -ex &lt;&lt;&apos;__EOS&apos;
D=&quot;$(mktemp -d)&quot;; trap &quot;rm -rf $D&quot; 0 1 2 3 6 9 15; cd &quot;$D&quot; 
bash -ec &apos;echo [INFO]: Add, update modules&apos;
touch N:
bash -ec &apos;echo [INFO]: Add, update modules&apos;
touch F:
bash -ec &apos;echo [INFO]: Add, update modules&apos;
__EOS

BTW, для больших и/или многоразовых программ на шелле есть неплохая идиома:
  fatal() {
    printf &apos;%s: %s\n&apos; &quot;$0&quot; &quot;$*&quot;
    exit 1
  }
Тогда потом можно писать:
  [ -e &quot;$item&quot; ] || fatal &quot;$item is missing.&quot;
Возможны варианты по вкусу, конечно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254873</commentid>
    <comment_count>27</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-21 19:07:09 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #12)
&gt; В процессе вступления были собраны:
&gt; gpg-tui - https://packages.altlinux.org/ru/tasks/349963/
https://git.altlinux.org/tasks/archive/done/_341/349963/gears/300/git?p=git;a=blob;f=.gear/gpg-tui.spec;h=780ae8f9cbda3716bbb77730e3e66c93d14c886f;hb=314e887a72cd73c4c059bd0ed0ca3f5243e19ccc
Спек годится. cargo и rustc настроены, актуальные флаги туда переданы, других грубых ошибок imho нет.

А вот завендоренные исходники:
  vendor/winapi-i686-pc-windows-gnu/lib/libwinapi_activeds.a 	[new file with mode: 0644] 	blob
  vendor/winapi-i686-pc-windows-gnu/lib/libwinapi_advapi32.a 	[new file with mode: 0644] 	blob
  vendor/winapi-i686-pc-windows-gnu/lib/libwinapi_advpack.a 	[new file with mode: 0644] 	blob
  vendor/winapi-i686-pc-windows-gnu/lib/libwinapi_amsi.a 	[new file with mode: 0644] 	blob
  vendor/winapi-i686-pc-windows-gnu/lib/libwinapi_api-ms-win-net-isolation-l1-1-0.a 	[new file with mode: 0644] 	blob
.gear/vendor-modules.sh содержит вызов команды `find`, где из поддерева `vendor/` будто предполагается удалить `*.a` в т. ч., а в коммите 	e21814d5bcc7f82e4d6b360d96cce326d9bc75f9 вот такое выше. Это как?

Nits:
Ман-страницы указаны в расчёте на то, что кто-нибудь их перед упаковкой в rpm сожмёт (smth.1.*). Интересно, почему так? (это не экзамен, на этот вопрос нет разумных неправильных ответов, хочу логику мышления увидеть)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254877</commentid>
    <comment_count>28</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2024-11-22 02:12:54 +0300</bug_when>
    <thetext>(In reply to Arseny Maslennikov from comment #26)
&gt; BTW, для больших и/или многоразовых программ на шелле есть неплохая идиома:
&gt;   fatal() {
&gt;     printf &apos;%s: %s\n&apos; &quot;$0&quot; &quot;$*&quot;
&gt;     exit 1
&gt;   }

printf &gt;&amp;2, конечно, если уж зашла речь об идиомах.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255015</commentid>
    <comment_count>29</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-25 16:32:59 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #25)
Спасибо за подробную резензию, из неё я продчеркнул несколько моментов, о которых раньше не задумывался)

&gt; А что значит &quot;пользовательский тест&quot;?
&gt; Тест, наверное, в том смысле, что исполняется в %check с целью как-то
&gt; протестировать собранное. А что есть &quot;пользовательский&quot;?

Под пользовательским имелось ввиду то что это вроде проверки &quot;для себя&quot;, чтобы убедиться, что собранный пакет работает в сборочной среде.
То есть это не часть общепринятого стандарта тестирования, а что-то кастомное, написанное под конкретный случай, из-за невозможности применить тесты из upstream.

Я учту предложенные изменения при следующем обновлении пакета, спасибо!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255017</commentid>
    <comment_count>30</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-25 16:35:01 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #27) 
&gt; .gear/vendor-modules.sh содержит вызов команды `find`, где из поддерева
&gt; `vendor/` будто предполагается удалить `*.a` в т. ч., а в коммите 
&gt; e21814d5bcc7f82e4d6b360d96cce326d9bc75f9 вот такое выше. Это как?

С завендоренными исходниками действительно произошел небольшой косяк.
Сначала появились vendors, а затем добавился скрипт для автоматизации.           
Только на этапе работы со скриптом я обратил внимание на файлы вроде 
vendor/winapi-i686-pc-windows-gnu/lib/libwinapi_activeds.a [новый файл с правами 0644] итд. 
В общем, скрипт не успел отработать до создания коммита)

&gt; Nits:
&gt; Ман-страницы указаны в расчёте на то, что кто-нибудь их перед упаковкой в
&gt; rpm сожмёт (smth.1.*). Интересно, почему так? (это не экзамен, на этот
&gt; вопрос нет разумных неправильных ответов, хочу логику мышления увидеть)

В пакете rpm-build есть scripts/brp-compress.in:88: @RPMCONFIGDIR@/compress_files &quot;$f&quot;, (https://git.altlinux.org/gears/r/rpm-build.git?p=rpm-build.git;a=blob;f=scripts/brp-compress.in;h=3e165adddfb7e5e0e65cbfe51094675049391ee2;hb=6496f05484ea73b4e97f32b376b4f03f56c3c5cf#:~:text=88-,%40RPMCONFIGDIR%40,-/compress_files%C2%A0%22%24f%22)
Думаю, именно из-за этого происходит автоматическое сжатие man-страниц перед упаковкой в RPM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255033</commentid>
    <comment_count>31</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-25 20:20:58 +0300</bug_when>
    <thetext>(In reply to Dmitry V. Levin from comment #28)
&gt; (In reply to Arseny Maslennikov from comment #26)
&gt; &gt; BTW, для больших и/или многоразовых программ на шелле есть неплохая идиома:
&gt; &gt;   fatal() {
&gt; &gt;     printf &apos;%s: %s\n&apos; &quot;$0&quot; &quot;$*&quot;
&gt; &gt;     exit 1
&gt; &gt;   }
&gt; 
&gt; printf &gt;&amp;2, конечно, если уж зашла речь об идиомах.

Да, вне всяких сомнений.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255036</commentid>
    <comment_count>32</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-25 20:45:18 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #29)
&gt; (Ответ для Arseny Maslennikov на комментарий #25)
&gt; Спасибо за подробную резензию, из неё я продчеркнул несколько моментов, о
&gt; которых раньше не задумывался)
:)

&gt; &gt; А что значит &quot;пользовательский тест&quot;?
&gt; &gt; Тест, наверное, в том смысле, что исполняется в %check с целью как-то
&gt; &gt; протестировать собранное. А что есть &quot;пользовательский&quot;?
&gt; 
&gt; Под пользовательским имелось ввиду то что это вроде проверки &quot;для себя&quot;,
&gt; чтобы убедиться, что собранный пакет работает в сборочной среде.
&gt; То есть это не часть общепринятого стандарта тестирования, а что-то
&gt; кастомное, написанное под конкретный случай, из-за невозможности применить
&gt; тесты из upstream.
Ага, понятно, благодарю за пояснение. &quot;Пользовательский&quot; в смысле non-first-party.
Слово &quot;пользовательский&quot; здесь как-то не подходит. Но ладно, главное, мы поняли, о чём речь. :)

Никакого &quot;общепринятого стандарта тестирования&quot; нет и скорее не может быть: ПО разное, модели определения мест в коде, где могут проявиться сбои или быть допущены ошибки, разные. Вот стандартизованный API чего-то можно себе представить, или стандартный протокол общения между тестом и test harness.
Тесты от апстрима ценны не сами по себе, а тем, что (как можно было бы полагать) апстрим хорошо знает свой код и знает, что тестировать — т. е. некомпетентный апстрим может в качестве тестов всякие глупости писать. Или же просто разработчики из какой-то другой реальности могут написать что-то несовместимое с окружением на альт-сборочнице, хоть среди СПО в целом и в наше время в частности такое встречается всё реже.

Из того же, что скрипт написан под конкретные обстоятельства, не следует, что он &quot;для себя&quot; — результаты его работы всё же для пользователей — и что к нему должна быть заниженная планка требований по качеству, мол, &quot;если мой плохой код вижу только я, да ещё и редко запускаю, то и ладно&quot;. Можно, конечно, на более высоком уровне абстракции опытным взглядом решить, что и так сойдёт в конкретных текущих условиях задачи, и не тратить времени на обретение более элегантного или корректного решения, написать покривее; здесь это не просто кривой код, а сознательное решение, которое позволило выиграть что-то другое. Но sh -&gt; bash на пустом месте — не тот случай.

Выражение о &quot;плохом коде&quot;, что я позволил себе выше, относится не к конкретному вашему пакету и коду (в частности, у вас этого всё же было не много), а абстрактно и вообще.

&gt; Я учту предложенные изменения при следующем обновлении пакета, спасибо!
Добро. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255037</commentid>
    <comment_count>33</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-25 20:57:45 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #30)
&gt; (Ответ для Arseny Maslennikov на комментарий #27) 
&gt; &gt; .gear/vendor-modules.sh содержит вызов команды `find`, где из поддерева
&gt; &gt; `vendor/` будто предполагается удалить `*.a` в т. ч., а в коммите 
&gt; &gt; e21814d5bcc7f82e4d6b360d96cce326d9bc75f9 вот такое выше. Это как?
&gt; 
&gt; С завендоренными исходниками действительно произошел небольшой косяк.
&gt; Сначала появились vendors, а затем добавился скрипт для автоматизации.      
&gt; 
&gt; Только на этапе работы со скриптом я обратил внимание на файлы вроде 
&gt; vendor/winapi-i686-pc-windows-gnu/lib/libwinapi_activeds.a [новый файл с
&gt; правами 0644] итд. 
&gt; В общем, скрипт не успел отработать до создания коммита)

Такое бывает.
Прошу выпустить (тоже в сизиф, раз задание уже закоммитилось) новый релиз пакета, при подготовке которого уже воспользоваться своим инструментом и добиться результата. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255038</commentid>
    <comment_count>34</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-25 21:02:09 +0300</bug_when>
    <thetext>
(In reply to Denis Rastyogin from comment #30)
&gt; (Ответ для Arseny Maslennikov на комментарий #27) 
&gt; &gt; Nits:
&gt; &gt; Ман-страницы указаны в расчёте на то, что кто-нибудь их перед упаковкой в
&gt; &gt; rpm сожмёт (smth.1.*). Интересно, почему так? (это не экзамен, на этот
&gt; &gt; вопрос нет разумных неправильных ответов, хочу логику мышления увидеть)
&gt; 
&gt; В пакете rpm-build есть scripts/brp-compress.in:88:
&gt; @RPMCONFIGDIR@/compress_files &quot;$f&quot;,
&gt; (https://git.altlinux.org/gears/r/rpm-build.git?p=rpm-build.git;a=blob;
&gt; f=scripts/brp-compress.in;h=3e165adddfb7e5e0e65cbfe51094675049391ee2;
&gt; hb=6496f05484ea73b4e97f32b376b4f03f56c3c5cf#:~:text=88-,%40RPMCONFIGDIR%40,-/
&gt; compress_files%C2%A0%22%24f%22)
&gt; Думаю, именно из-за этого происходит автоматическое сжатие man-страниц перед
&gt; упаковкой в RPM.

Я выше отмечал, что на заданный вопрос нет разумных неправильных ответов. Хоть ваш ответ и верен фактически (что хорошо), он не годится, потому что он не на тот вопрос :/

Имел в виду вот что: интересно, почему man-страницы указаны в %files в расчёте на то, что их потом сожмут.
Я считаю, что лучше написать `smth.1*` (но не считаю себя вправе настаивать). Согласны ли вы? Если нет, то почему?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255161</commentid>
    <comment_count>35</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-27 14:09:59 +0300</bug_when>
    <thetext>(In reply to Arseny Maslennikov from comment #34)
&gt; интересно, почему man-страницы указаны в %files в
&gt; расчёте на то, что их потом сожмут.
Т. е. указаны таким шаблоном, который сломается, если brp-compress нет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255163</commentid>
    <comment_count>36</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-27 14:19:25 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #33)
&gt; Такое бывает.
&gt; Прошу выпустить (тоже в сизиф, раз задание уже закоммитилось) новый релиз
&gt; пакета, при подготовке которого уже воспользоваться своим инструментом и
&gt; добиться результата. :)

Подготовил задание с исправлением https://packages.altlinux.org/ru/tasks/363382/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255164</commentid>
    <comment_count>37</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-27 14:22:19 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #34)
&gt; Имел в виду вот что: интересно, почему man-страницы указаны в %files в
&gt; расчёте на то, что их потом сожмут.
&gt; Я считаю, что лучше написать `smth.1*` (но не считаю себя вправе
&gt; настаивать). Согласны ли вы? Если нет, то почему?

Согласен, тк это более универсальный вариант. В случае отказа от сжатия man страниц, пакет не сломается, если будет `smth.1*`. Однако, помимо моего пакета, существует  множество других пакетов, которые рассчитывают на сжатие man-страниц. Поэтому, на мой взгляд, если такой переход и произойдёт, то он окажется небесшовным.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255219</commentid>
    <comment_count>38</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-27 19:25:43 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #36)
&gt; (Ответ для Arseny Maslennikov на комментарий #33)
&gt; &gt; Такое бывает.
&gt; &gt; Прошу выпустить (тоже в сизиф, раз задание уже закоммитилось) новый релиз
&gt; &gt; пакета, при подготовке которого уже воспользоваться своим инструментом и
&gt; &gt; добиться результата. :)
&gt; 
&gt; Подготовил задание с исправлением
&gt; https://packages.altlinux.org/ru/tasks/363382/
Все придирки к программам на шелле в составе fastapi-template относятся к любому пакету, в том числе и сюда. Поправьте грубые ошибки в `.gear/vendor-modules.sh`, пожалуйста.
Грубейшую из них (нет `&gt;&amp;2`) обнаружил вообще не я, а ув. ldv@.

Shortlog будет выглядеть как-то наподобие:
&gt; vendor-modules.sh: fix quoting and error logging
&gt; Remove unnecessary vendored files
&gt; 0.11.0-alt2
(в порядке от предков к потомкам; git log, gitweb и визуализаторы графа показывают наоборот)

Кроме того, нам с вами наконец-то довелось составить нетривиальный changelog:
&gt;  %changelog
&gt; +* Mon Nov 25 2024 Denis Rastyogin &lt;gerben@altlinux.org&gt; 0.11.0-alt2
&gt; +- remove unnecessary vendor files.
&gt; +- optimize file pattern for man pages.
&gt; +
1) Стили оформления changelog встречаются разные, здесь, в новом пакете, вы задаёте стиль сами, но о совершённых действиях принято писать в прошедшем времени. Т. е. optimized, removed.
2) changelog пакета — это место для замечаний не о сопровождении пакета (как получается в gear git shortlog), а о его наполнении для пользователей. У вас 2 записи; первая, наверное, касается пользователей (хотя это под вопросом, но хоть что-нибудь в changelog должно быть), а вторая точно нет. О том, что вы optimized file pattern for man pages, разработчики с удовольствием прочтут в git-коммитах. :)
Прошу тоже поправить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255245</commentid>
    <comment_count>39</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-11-28 13:32:58 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #38)
&gt; (In reply to Denis Rastyogin from comment #36)
&gt; &gt; (Ответ для Arseny Maslennikov на комментарий #33)
&gt; &gt; &gt; Такое бывает.
&gt; &gt; &gt; Прошу выпустить (тоже в сизиф, раз задание уже закоммитилось) новый релиз
&gt; &gt; &gt; пакета, при подготовке которого уже воспользоваться своим инструментом и
&gt; &gt; &gt; добиться результата. :)
&gt; &gt; 
&gt; &gt; Подготовил задание с исправлением
&gt; &gt; https://packages.altlinux.org/ru/tasks/363382/
&gt; Все придирки к программам на шелле в составе fastapi-template относятся к
&gt; любому пакету, в том числе и сюда. Поправьте грубые ошибки в
&gt; `.gear/vendor-modules.sh`, пожалуйста.
&gt; Грубейшую из них (нет `&gt;&amp;2`) обнаружил вообще не я, а ув. ldv@.
&gt; 
&gt; Shortlog будет выглядеть как-то наподобие:
&gt; &gt; vendor-modules.sh: fix quoting and error logging
&gt; &gt; Remove unnecessary vendored files
&gt; &gt; 0.11.0-alt2
&gt; (в порядке от предков к потомкам; git log, gitweb и визуализаторы графа
&gt; показывают наоборот)
&gt; 
&gt; Кроме того, нам с вами наконец-то довелось составить нетривиальный changelog:
&gt; &gt;  %changelog
&gt; &gt; +* Mon Nov 25 2024 Denis Rastyogin &lt;gerben@altlinux.org&gt; 0.11.0-alt2
&gt; &gt; +- remove unnecessary vendor files.
&gt; &gt; +- optimize file pattern for man pages.
&gt; &gt; +
&gt; 1) Стили оформления changelog встречаются разные, здесь, в новом пакете, вы
&gt; задаёте стиль сами, но о совершённых действиях принято писать в прошедшем
&gt; времени. Т. е. optimized, removed.
&gt; 2) changelog пакета — это место для замечаний не о сопровождении пакета (как
&gt; получается в gear git shortlog), а о его наполнении для пользователей. У вас
&gt; 2 записи; первая, наверное, касается пользователей (хотя это под вопросом,
&gt; но хоть что-нибудь в changelog должно быть), а вторая точно нет. О том, что
&gt; вы optimized file pattern for man pages, разработчики с удовольствием
&gt; прочтут в git-коммитах. :)
&gt; Прошу тоже поправить.

Спасибо за разъяснения. Поправил моменты, которые ранее упустил. https://packages.altlinux.org/ru/tasks/363382/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255293</commentid>
    <comment_count>40</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-29 12:10:37 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #39)
&gt; (Ответ для Arseny Maslennikov на комментарий #38)
&gt; &gt; Прошу тоже поправить.
&gt; 
&gt; Спасибо за разъяснения. Поправил моменты, которые ранее упустил.
&gt; https://packages.altlinux.org/ru/tasks/363382/
Хорошо.
(In reply to Denis Rastyogin from comment #37)
&gt; (Ответ для Arseny Maslennikov на комментарий #34)
&gt; &gt; Имел в виду вот что: интересно, почему man-страницы указаны в %files в
&gt; &gt; расчёте на то, что их потом сожмут.
&gt; &gt; Я считаю, что лучше написать `smth.1*` (но не считаю себя вправе
&gt; &gt; настаивать). Согласны ли вы? Если нет, то почему?
&gt; 
&gt; Согласен, тк это более универсальный вариант. В случае отказа от сжатия man
&gt; страниц, пакет не сломается, если будет `smth.1*`. Однако, помимо моего
&gt; пакета, существует  множество других пакетов, которые рассчитывают на сжатие
&gt; man-страниц. Поэтому, на мой взгляд, если такой переход и произойдёт, то он
&gt; окажется небесшовным.
Валидное рассуждение, спасибо. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255294</commentid>
    <comment_count>41</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-11-29 12:25:53 +0300</bug_when>
    <thetext>К представленным на review пакетам вопросов больше нет; предлагаю для закрепления результата обновить что-нибудь заброшенное и при этом не наделать грубых ошибок.

Вот, например, пакет, который не мейнтейнится, а достаётся инструментом fcimport (который делает нечто стыдное, не буду говорить, что, хотя и так понятно):
https://packages.altlinux.org/sisyphus/srpms/librtaudio
Его стоило бы обновить и собрать правильно (иными словами, определить, что там сейчас неправильного, и поправить).
Вот его апстрим: https://github.com/thestk/rtaudio
Мне этот пакет видится весьма хорошим экзерсисом. :) Но вы с ув. ментором можете выбрать что-то ещё, конечно.

P.S. У rtaudio есть собрат rtmidi, который упакован в альт и честно сопровождается.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255708</commentid>
    <comment_count>42</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-12-09 14:40:28 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #41)
&gt; Вот, например, пакет, который не мейнтейнится, а достаётся инструментом
&gt; fcimport (который делает нечто стыдное, не буду говорить, что, хотя и так
&gt; понятно):
&gt; https://packages.altlinux.org/sisyphus/srpms/librtaudio
&gt; Его стоило бы обновить и собрать правильно (иными словами, определить, что
&gt; там сейчас неправильного, и поправить).
&gt; Вот его апстрим: https://github.com/thestk/rtaudio
&gt; Мне этот пакет видится весьма хорошим экзерсисом. :) Но вы с ув. ментором
&gt; можете выбрать что-то ещё, конечно.
&gt; 
&gt; P.S. У rtaudio есть собрат rtmidi, который упакован в альт и честно
&gt; сопровождается.

Пересобрал и обновил librtaudio в задании https://packages.altlinux.org/ru/tasks/364130/

P.S. Пришлось немного повозиться, так как пакет OPN2BankEditor, использующий эту библиотеку, оказался немного несовместим с её новой версией.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255725</commentid>
    <comment_count>43</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-12-09 16:37:13 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #42)
&gt; (Ответ для Arseny Maslennikov на комментарий #41)
&gt; &gt; Вот, например, пакет, который не мейнтейнится, а достаётся инструментом
&gt; &gt; fcimport (который делает нечто стыдное, не буду говорить, что, хотя и так
&gt; &gt; понятно):
&gt; &gt; https://packages.altlinux.org/sisyphus/srpms/librtaudio
&gt; &gt; Его стоило бы обновить и собрать правильно (иными словами, определить, что
&gt; &gt; там сейчас неправильного, и поправить).
&gt; &gt; Вот его апстрим: https://github.com/thestk/rtaudio
&gt; &gt; Мне этот пакет видится весьма хорошим экзерсисом. :) Но вы с ув. ментором
&gt; &gt; можете выбрать что-то ещё, конечно.
&gt; &gt; 
&gt; &gt; P.S. У rtaudio есть собрат rtmidi, который упакован в альт и честно
&gt; &gt; сопровождается.
&gt; 
&gt; Пересобрал и обновил librtaudio в задании
&gt; https://packages.altlinux.org/ru/tasks/364130/
Вижу много логичных исправлений по сравнению с 5.2.0 и меньше. У пакета с библиотекой изменилось имя, что хорошо. Патчи и коммиты оформлены грамотно.

&gt; P.S. Пришлось немного повозиться, так как пакет OPN2BankEditor, использующий
&gt; эту библиотеку, оказался немного несовместим с её новой версией.
Вы попытались и его починить, спасибо! ^^

Ситуация была такова, что часть пакетов ожидает API от пятой версии, а часть от шестой (нередкая ситуация в большом репозитории).
Перед вами стоял выбор:
— собрать обе версии в разных исходных пакетах;
— оставить только более свежую и сделать что-нибудь с пакетами, которым это не нравится.
Пошли по второму пути; что OK как решение и может вас хорошо характеризовать как разработчика.

Но вот характер исправления противоестественный: вы патчите и пакета-пользователя, и библиотеку.

Если пополнять код библиотеки особыми знаниями про ужимки и особенности каждого проекта, который от неё зависит, то он раздуется до немыслимых размеров.
Библиотеки в силу своей сути не должны превращаться в коллекцию хаков-подстроек под пользующийся ими код, потому что &quot;вас у меня много, а я одна&quot;, их задача — дать программисту переиспользуемый механизм решения подзадачи.
Иначе — это превращение в Windows (её даже в Microsoft не могут полностью пересобрать из исходников, dllки, как священные коровы, кочуют из релиза в релиз). Представьте себе, если Qt/Glib начнут себе наворачивать мегабайты хаков для каждого пакета, что от них зависит.

Тем более, авторы библиотеки между 5 и 6 (soname 6 и 7) явно избавили свой интерфейс от с++-исключений, о чём написали в свои doxygen-файлы; у них, как обычно, были на это причины. Ну и зачем обратно добавлять?

Т. е., идя вашим путём, стоило запатчить только opn2bankeditor: заменить RtAudioError на то, что вместо него в новой librtaudio, и наложить другой ваш патч. :)
Другой вариант — пересобрать opn2bankeditor так, чтобы он пользовался bundled rtaudio: взять зафиксированный сабмодуль у авторов и подложить его как новый source. Такое у нас в целом не приветствуется, но входит в моду у апстримов прикладных пакетов (один cargo-культ чего стоит, он же &quot;синдром leftpad&quot;). Да и библиотека из двух файлов большой погоды не сделает, её и прочесть можно.

Короче, я против того, чтобы возвращать исключения в rtaudio 6.

Ещё мелочёвка:
* в changelog-записи: что значит &quot;rebuilt as legacy library&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255783</commentid>
    <comment_count>44</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2024-12-10 11:18:53 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #43)
&gt; Вижу много логичных исправлений по сравнению с 5.2.0 и меньше. У пакета с
&gt; библиотекой изменилось имя, что хорошо. Патчи и коммиты оформлены грамотно.
&gt; 
&gt; &gt; P.S. Пришлось немного повозиться, так как пакет OPN2BankEditor, использующий
&gt; &gt; эту библиотеку, оказался немного несовместим с её новой версией.
&gt; Вы попытались и его починить, спасибо! ^^
&gt; 
&gt; Ситуация была такова, что часть пакетов ожидает API от пятой версии, а часть
&gt; от шестой (нередкая ситуация в большом репозитории).
&gt; Перед вами стоял выбор:
&gt; — собрать обе версии в разных исходных пакетах;
&gt; — оставить только более свежую и сделать что-нибудь с пакетами, которым это
&gt; не нравится.
&gt; Пошли по второму пути; что OK как решение и может вас хорошо характеризовать
&gt; как разработчика.
&gt; 
&gt; Но вот характер исправления противоестественный: вы патчите и
&gt; пакета-пользователя, и библиотеку.
&gt; 
&gt; Если пополнять код библиотеки особыми знаниями про ужимки и особенности
&gt; каждого проекта, который от неё зависит, то он раздуется до немыслимых
&gt; размеров.
&gt; Библиотеки в силу своей сути не должны превращаться в коллекцию
&gt; хаков-подстроек под пользующийся ими код, потому что &quot;вас у меня много, а я
&gt; одна&quot;, их задача — дать программисту переиспользуемый механизм решения
&gt; подзадачи.
&gt; Иначе — это превращение в Windows (её даже в Microsoft не могут полностью
&gt; пересобрать из исходников, dllки, как священные коровы, кочуют из релиза в
&gt; релиз). Представьте себе, если Qt/Glib начнут себе наворачивать мегабайты
&gt; хаков для каждого пакета, что от них зависит.
&gt; 
&gt; Тем более, авторы библиотеки между 5 и 6 (soname 6 и 7) явно избавили свой
&gt; интерфейс от с++-исключений, о чём написали в свои doxygen-файлы; у них, как
&gt; обычно, были на это причины. Ну и зачем обратно добавлять?
&gt; 
&gt; Т. е., идя вашим путём, стоило запатчить только opn2bankeditor: заменить
&gt; RtAudioError на то, что вместо него в новой librtaudio, и наложить другой
&gt; ваш патч. :)
&gt; Другой вариант — пересобрать opn2bankeditor так, чтобы он пользовался
&gt; bundled rtaudio: взять зафиксированный сабмодуль у авторов и подложить его
&gt; как новый source. Такое у нас в целом не приветствуется, но входит в моду у
&gt; апстримов прикладных пакетов (один cargo-культ чего стоит, он же &quot;синдром
&gt; leftpad&quot;). Да и библиотека из двух файлов большой погоды не сделает, её и
&gt; прочесть можно.
&gt; 
&gt; Короче, я против того, чтобы возвращать исключения в rtaudio 6.

Исправил в задании https://packages.altlinux.org/ru/tasks/364130/. Я согласен с выше сказанным, но хочу немного оправдаться. Несостыковка произошла из-за того, что клиент не успели адаптировать под новую версию библиотеки, и я надеюсь, что это временная проблема. В будущем upstream OPN2BankEditor, который, как я понимаю, ещё не совсем заброшен, исправит её самостоятельно. Поэтому свои патчи я рассматривал с учётом этого и выбрал путь наименьшего сопротивления, добавив старый класс. Конечно, апстрим может и не исправить проблему, и пакетов с подобными клиентами может быть много, а изменения могли бы составить и больше 20 строк, но, рассматривая конкретно этот случай, я посчитал своё решение приемлемым в данных условиях.

&gt; Ещё мелочёвка:
&gt; * в changelog-записи: что значит &quot;rebuilt as legacy library&quot;?

Подсмотрел у одного из мейнтейнеров запись при подобных изменениях и посчитал её корректной для моего случая)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256658</commentid>
    <comment_count>45</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-12-26 14:43:24 +0300</bug_when>
    <thetext>Извините за тормоз с моей стороны: мне потребовалось найти довольно много времени, чтобы вчитаться в этот неладный opn2bankeditor и понять, как его исправлять. Когда я предлагал обновить librtaudio, я не думал, что придётся _столько_ разбираться в побочно возникающих вопросах (для кандидата на join, который ещё и ушёл на review, а не с ментором занимается, это перебор). Ну ничего, бо́льшую часть пути мы уже прошли. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256659</commentid>
    <comment_count>46</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-12-26 14:43:40 +0300</bug_when>
    <thetext>
https://git.altlinux.org/tasks/364130/gears/700/git?p=git;a=blob;f=.gear/patches/fix-openStream-callback-arguments.patch;h=85148719bfe424071925a8ad1f15edbf7a71469d;hb=3463721aba7e044c116adf549c850db2b557dab9
Здесь мы убираем errorCallback совсем. Больше он по коду нигде не используется. Может, эту функцию убрать? (Жалко, Wunused-function ничего не показал, это же не private-метод).
Более того, AudioOutRt::errorCallback(RtAudioError::Type, const std::string&amp;) — единственное место во всём проекте, где кидают исключение. После исчезновения этой функции throw statement в коде отсутствует (будем считать, что в Qt их нет, да и в любом случае в src/audio/ao_rtaudio.cpp обращений к Qt нет). Может, там и ловить ничего не надо, только проверять всплывающий код ошибки? Предлагаю уйти от try/catch в AudioOutRt::AudioOutRt(*) вообще.

Больше у меня вопросов к пакету не будет. :)
Все наши мытарства вокруг кода OPN2BankEditor никак на вердикт моего review не влияют, они не относятся к упаковке и ведению сизифа напрямую.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257262</commentid>
    <comment_count>47</comment_count>
    <who name="Denis Rastyogin">rastyoginds</who>
    <bug_when>2025-01-14 11:46:22 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #46)
&gt; https://git.altlinux.org/tasks/364130/gears/700/git?p=git;a=blob;f=.gear/
&gt; patches/fix-openStream-callback-arguments.patch;
&gt; h=85148719bfe424071925a8ad1f15edbf7a71469d;
&gt; hb=3463721aba7e044c116adf549c850db2b557dab9
&gt; Здесь мы убираем errorCallback совсем. Больше он по коду нигде не
&gt; используется. Может, эту функцию убрать? (Жалко, Wunused-function ничего не
&gt; показал, это же не private-метод).
&gt; Более того, AudioOutRt::errorCallback(RtAudioError::Type, const
&gt; std::string&amp;) — единственное место во всём проекте, где кидают исключение.
&gt; После исчезновения этой функции throw statement в коде отсутствует (будем
&gt; считать, что в Qt их нет, да и в любом случае в src/audio/ao_rtaudio.cpp
&gt; обращений к Qt нет). Может, там и ловить ничего не надо, только проверять
&gt; всплывающий код ошибки? Предлагаю уйти от try/catch в
&gt; AudioOutRt::AudioOutRt(*) вообще.
&gt; 
&gt; Больше у меня вопросов к пакету не будет. :)
&gt; Все наши мытарства вокруг кода OPN2BankEditor никак на вердикт моего review
&gt; не влияют, они не относятся к упаковке и ведению сизифа напрямую.

Исправил в задании https://packages.altlinux.org/ru/tasks/364130/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257270</commentid>
    <comment_count>48</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-01-14 12:52:49 +0300</bug_when>
    <thetext>(In reply to Denis Rastyogin from comment #47)
&gt; (Ответ для Arseny Maslennikov на комментарий #46)
&gt; &gt; https://git.altlinux.org/tasks/364130/gears/700/git?p=git;a=blob;f=.gear/
&gt; &gt; patches/fix-openStream-callback-arguments.patch;
&gt; &gt; h=85148719bfe424071925a8ad1f15edbf7a71469d;
&gt; &gt; hb=3463721aba7e044c116adf549c850db2b557dab9
&gt; &gt; Здесь мы убираем errorCallback совсем. Больше он по коду нигде не
&gt; &gt; используется. Может, эту функцию убрать? (Жалко, Wunused-function ничего не
&gt; &gt; показал, это же не private-метод).
&gt; &gt; Более того, AudioOutRt::errorCallback(RtAudioError::Type, const
&gt; &gt; std::string&amp;) — единственное место во всём проекте, где кидают исключение.
&gt; &gt; После исчезновения этой функции throw statement в коде отсутствует (будем
&gt; &gt; считать, что в Qt их нет, да и в любом случае в src/audio/ao_rtaudio.cpp
&gt; &gt; обращений к Qt нет). Может, там и ловить ничего не надо, только проверять
&gt; &gt; всплывающий код ошибки? Предлагаю уйти от try/catch в
&gt; &gt; AudioOutRt::AudioOutRt(*) вообще.
&gt; &gt; 
&gt; &gt; Больше у меня вопросов к пакету не будет. :)
&gt; &gt; Все наши мытарства вокруг кода OPN2BankEditor никак на вердикт моего review
&gt; &gt; не влияют, они не относятся к упаковке и ведению сизифа напрямую.
&gt; 
&gt; Исправил в задании https://packages.altlinux.org/ru/tasks/364130/
Спасибо!

&gt; diff --git a/OPN2BankEditor.spec b/OPN2BankEditor.spec
&gt; index b74bde5..4d3ec3c 100644
&gt; --- a/OPN2BankEditor.spec
&gt; +++ b/OPN2BankEditor.spec
&gt; @@ -3,13 +3,13 @@
&gt;  
&gt;  Name: OPN2BankEditor
&gt;  Version: 1.3.0.90.git64f4a24
&gt; -Release: alt1
&gt; +Release: alt2
&gt;  
&gt;  Summary: a small cross-platform editor for OPN2 FM banks
&gt;  
&gt;  License: GPL-3.0
&gt;  Group: Sound
&gt; -URL: https://github.com/Wohlstand/OPN2BankEditor
&gt; +Url: https://github.com/Wohlstand/OPN2BankEditor
Не возражаю; мне скорее без особой разницы. rpm-build принимает обе формы, так что ладно.

&gt;  
&gt;  BuildRequires(pre): rpm-macros-cmake
&gt;  BuildRequires: cmake

В остальном вопросов нет. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257272</commentid>
    <comment_count>49</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-01-14 13:12:19 +0300</bug_when>
    <thetext>Ну что. Денис научился сопровождать разнородные пакеты, в том числе нетривиально их меняя; показал, что понимает, что делает, и что способен в позиции мейнтейнера принимать обоснованные решения; хорошо себя проявил в общении в команде.

Думаю, он может стать членом Team.

____
Более тонкие нюансы, например, ведения changelog в пакете приходят с опытом, если притрагиваться к принципиально разным пакетам, а тем более — если иногда выступать и разработчиком оригинального проекта.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257286</commentid>
    <comment_count>50</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2025-01-14 14:22:15 +0300</bug_when>
    <thetext>Пользователь добавлен в группу мейнтейнеров.

Желаю удачного мейнтейнерства!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>14395</attachid>
            <date>2023-09-12 17:38:57 +0300</date>
            <delta_ts>2023-09-12 17:38:57 +0300</delta_ts>
            <desc>ssh_public_key</desc>
            <filename>SSH-KEY.pub</filename>
            <type>application/vnd.ms-publisher</type>
            <size>95</size>
            <attacher name="Denis Rastyogin">rastyoginds</attacher>
            
              <data encoding="base64">c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUZPT2pkaGk1Q3pHSHZHZXQ2dzl3
RlI5Tisxa0JzM2RpZFN1c1R2bDBOR2QgZ2VyYmVuQGdlcmJlbgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>14396</attachid>
            <date>2023-09-12 17:50:23 +0300</date>
            <delta_ts>2023-09-14 10:49:31 +0300</delta_ts>
            <desc>gpg_public_key</desc>
            <filename>gpg_public_key</filename>
            <type>application/pgp-keys</type>
            <size>3078</size>
            <attacher name="Denis Rastyogin">rastyoginds</attacher>
            
              <data encoding="base64">LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkdVQWVUd0JFQUQ0bTBt
QmFWdE5oOW1IQjVSc1ZiaGdzUVB1OVNuWHFTS081VDk1NTlMRDBZamNOdnY4Cm1ldUpmcmEvb1BN
K0pDa0hrbXBKeVZveExMNGtnSWNPa0tFUWdRUVVBaVVtWHVmOVhFK29DRHlTZnFaUzZNVkgKR1A5
WU4xMVJVRDVhT0xQa2NrRHkwdGpZeDRaOTFSMHZpTEVyOXcxSnVVbkRXa1BjRGNOcFhjMkZFL29W
QUhXVgpNbHd5bWp5eDYxN2ZVK1puZURvb3R2MXd1NFNZdUpFTysrQjNxQkJ4R2N5NndWZUpIazVt
YlA4UWNpWkcyOXcvCmlEZFR0czZ3dlRpY1Z2aCs5cUw2V3AzUVdYMFRXRDd2eTFwZjl5elJxdjRr
Q0RNWTkraUNsZC8yOU1IVC9WU3UKSUZJYlFialhwdlcza1VZTGFQaTRsdUJibnBnNzJvYjRRNW8v
dms1NGp1MjNGaFBHbjdGQVZpSW0zSjRLbG1CTQplc0JrNWdZK01iQ1paMGZnRXVmSTExM0oxc3Bm
WEtOSlFibWNLVkhUZVhPcGY0T3JGQUxpRVBlTHJHcXJoai83CnBwRG56TGVYblRNNlpUZ3lFMUV0
M1RlZ2psdEh5OGJ6WS9xUDRCdDJYOWxoTDNWZGlYenFHNXBwUlVmVWswNzkKbGRUbFE5d1ArbW9Y
S2JFb3BpQ1Ziam1neGJ5dHZsdFhiVDVnZ2k5dHFocVZWWXFvZFVkaFAvcjlPY1pneHhFaAp0ZWhD
Nk1nNC91T2FMeHk3MFFpSDRKWjdMSDdvRC8wY3lrL0ZSNzJCOWdZVFlIaW9wUXBQWHNzWTlnUS9G
NFJKClkwcFgxbEZQVUZpU3QwS2NjcHpJRjd3Q001ejIrWEV0ZGVnZVhyMlhNWlFqRHl5NWFBbC9N
TWxveFFBUkFRQUIKdENWRVpXNXBjeUJTWVhOMGVXOW5hVzRnUEdkbGNtSmxia0JoYkhSc2FXNTFl
QzV2Y21jK2lRSTRCQk1CQ0FBaQpCUUpsQUhrOEFoc0RCZ3NKQ0FjREFnWVZDQUlKQ2dzRUZnSURB
UUllQVFJWGdBQUtDUkM5RGtOeXd3dXEzS3ZJCkQvMGF5R1RQVTYrRjBsOElSWGRnWjFCT2RzRElL
a0dyc2UrTVdCa2hTSmEvY2R3VitDSWhjd3dzUklGdExJeFEKUjY0WTNuZlZWMUxGcTF1Qm12RXRW
Lyt5YnczTzg0Y3k2U1p0VGhxWnNYc2MrN0ZWVVZWWUtrL25XUWtqQUgrYgpYMmNDU1dLNDJBak52
a0ZIMWlhYWc4ZHJBMDlUdnUvekNvczN5QlVySGhpaUM2VUtjVC9PYm9TOFN2TmhHaFNGCmJxRCtX
dFU2Qjk4Y2FwNHkwcE91N0hxbkpLYzRRb1pQN2RkY1BHYUY1clBXK1RLK3BMUEVRWVgzYWs0VmNW
U0oKd3BwRzVPVDFIMmo5MTJ5YjBONit6TFM4U1R4dXdoMXlYSm9RRFJiSlJUcms4S3Z6K05aanhL
enl2NTUxNlUwMwpKN1hUZHZZUnVtLzkyN3JrR3lJbnowWi9QYVlHSUt2YnRGSldVOW1yNUYwWmNB
bHlkZUJ6eFdGTEtiQmlYdUF4CmpUQ3hYUkdBbnhGUVV6VEZoeVZra3NGQnlObjRLSGJDaVJoLzha
MTZNc1pyOXo3eVZ3cXZoWUE1RGx0NCsxMkkKaWZvaU1ZRVZmQ3YrWm1WT1o3b2lPSlBjNnRadXda
ZjViTDZXdzRvek9aQW1Hd1R3K0M1SlZZb055UVVqS0RFbQpkWGpFTVNFdkFQenR6ZDE5WnVDZ3lj
QlpRSWhibmlwN3hJQ1JsdUs5Nm8vaEw1bWpSOGNScFY5ZENRQlhWdmFiClcrdmlJWWcxbkJXdUJF
QitQckc0eXB4OUZsM1EwKzAwLzV2Uk9kbHRYN0gxb0VuUUwxd1dPQVRoSEZYZWpoNSsKNlIxQTU1
dXM3dWgzZGtOUzNQdXhTNmNIWWNiSWtiSENwTFRYdDBlWGYwZmZWTGtDRFFSbEFIazhBUkFBdjB3
bwo4NWhmWXo2RldvL1d0Q29kR2sxWHlFTk4xTjMzVWduWWNNWjBiOU41RFExcjRBQmdFYkRRWTQx
ZFBLVHFjQzlhCmhDTGVQcFZ5a0I3YzU1SXBzcmdlbUpJNWgzQTRha1ZhSWx5VUNvQzBUU0hNbHVZ
NWVSM0prVzRMZzBlZmtmQ1YKcDZ4bG12RXRDQTBhOFhEZEZCQUxKbE9uR1BlRlN1TGVuenRZNnc3
ZEYwb2ZTRW5UTDNZcXJZUWZLTStQUkN4LwpmSnFvb2dRaDRuWVZSR295SFU4dWcxaGxnRjdTbFd1
Q1I4c3QvR2JYNWZNcHk1VUJGVXBORitpV1pVZXFOMHlaCis3aXduek04VjJBY3BlbVgyUmNneTdM
RHBFOU9YOXhuWjFOZ1dOZ0kzdjNwbEMyVE9oQzhZaXRLMjNTeGRwWm8KK0FvTnRQcVlEaW1CaFJG
WDhkYXg0U0l1VUlvckNyZEMySGR5eUpHcW52RnFnL0lOR0laQ3NtY3VYWHR5VUFRUAo0SnNzb2Vi
ak1YVFIwY2RJYmhjVWpyLzAxZmVKaDEzQkRlMXF2VWZTcDRKTTNTRzlQUGtQdXpsOFFiTlA5NCtp
CmpUTmt6ZDJYV2p3TGRoTkdLYnEwK3Q0bE5VV3VQVEdSN2EzM1kxRXJmcTE2clZpTnliWDJPOVhG
YktqTEJHalMKT1dKOENxL2g3VDRGNklCN3krS2IraVZQY1ZHNjdmM1dFVm51MjJnTHJtRkJuU1pZ
ZzFTZ2hrZnIyb2hCSDRkZgpqUW5hdWh2ZUJrL2JWaTRaQlBSVGl3NnJaeXFlRUFweVJ2cWNvU01G
VnZ1b2VIbVpXS2NCSThqVE96Wk8yWG5RCnBPVGhtSisrVzh5aHk3a1l6MFNIa0ZkdEg4UnlXczVz
QzNHcVFIRUFFUUVBQVlrQ0h3UVlBUWdBQ1FVQ1pRQjUKUEFJYkRBQUtDUkM5RGtOeXd3dXEzTUNq
RC8wVVB5enZaOHNIR0pLZTIzSVljSTNIeER0dUhOSlNDY0FTemlmWgpUWlZDTXprYmhNamRnRzUx
aHdlVEkzWEVWc0grSFNOUHhuNG5RYnVKb1VPNXJTZ0dQU0dvbEdxc3ljOHgvajliCnZiSFVtWEU1
a0pPTkkvUmpndGRHcUpUZE9WQWhtN2VOeUlWQnkzMmlmaWgvY0FKNDV5blkvenl6c1dobWZHd2YK
by9xaFl3Vm1FUWhGVDZCVmdmLzNsaVRManlZMVVjMjlWZThEWDlHcm9nNzc5VnMrKzlqVVZPUC8v
TUNDd2cvTwpiVXVxaldHeXorSy9JaGhHVEZzeXRXbkN1enI3eWdyUU5JUlJTVEZyWFNzR0RBZkRx
cVVBaGV4T3VETzBvdEk1CnhOOXlLOGZJREtmTUxnL2ZwRXRKNHY1VTQ1NG5Gczh2SkFET3JpTFVF
dC9IdXpIWVVXYWwyQThRQUo0RFRDQVAKZ3Z4SStZN2twTHM5Vi9RUjRSejA4SEF6dk1BczlyRkhQ
ZC8xNEU3d0ZjcG1QdUJmeU1ZbHdCT2dxd3dDVjNMYwoyaWdXWkg5bVl4MXduV1JpaWM3eFFySjZl
Z2Rzb2dGWXdWWjNBamlZLzRXNERrMDg4V2toV2JFcy9OcndpKzRzCjRsbk8xQXM2R3phR216Zkp6
aVpFSCtxZmpmOVlGOEZCZDRBMkhpUHhzVlJ3YVNJMXJmd1pIblJHdzhMd0ZBQnMKSXlhSktjWEUv
MWg2L0RpcHhsRnZCY3NrbW5URHViTy9LMjFIeTc2dkN6SzQ1S1F1UlhlVlF6VWVXSU41M3pxZgp5
bSt0TXNaRXVrZE55R3JoSGVybVBGMlNDV0dHU0lTMk16ZjdYZU0zM2pDVC9UM0JHYm9YOVFUOXN6
UDIrL1VYCk9jQnlUQT09Cj1GU1R6Ci0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>14422</attachid>
            <date>2023-09-14 10:52:33 +0300</date>
            <delta_ts>2023-09-14 12:08:47 +0300</delta_ts>
            <desc>gpg_public_key</desc>
            <filename>gpg_public_key</filename>
            <type>application/pgp-keys</type>
            <size>3095</size>
            <attacher name="Denis Rastyogin">rastyoginds</attacher>
            
              <data encoding="base64">LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkdVQ3Q4Z0JFQURtU3pO
Z2dVcm51TGhRNkoxLzRHQmNUdkNaUTNGZllGOTNQSEVoWU5Lc3ZySk9nbmY3CmdTa0x5YUdoNTky
VnBWVnJWd2lza2JMZXFTYit1TG9UejF0SVR0eWdMQVJiam9zODIyd1V4SVhHNFZXU2lmYjkKdFEv
MHdmVUZhYzMzV3dTRnZRWDNPeTNyMHEvNzdKSVAzQlpDcXA4YWlMQWZndE8vOExEbWR3cnRsWTQz
SStDVApRc3A1eVdXRWhENGtvcjVHcnovbXlWdjYxaENWNGNmSE5iR0l2RGs2TlZ4djdUdGJaNk9o
UjliSmZ4SGJ1RzN5CldhOFRoTmVyaXdVUm1vZjg5ZnpZcW1lc01iQzlnalBFMWtTQWNDOElSSFBB
eDAvditlSEt5WFlJUmNHaWZ1cnQKN3YwazQ1Umh4MDFrK2Rid1pRY0FwUjdlcjRha0pQTmFOaVcr
WXdCQTQ1WnZUQ0FaVkx2US9zTHdVNWJIeC9TaQphakJ1a09mUjlyOHU0TE9IRVBKTnAyNXVsWWtr
V0oyaEVMelVDb2JCVG5Sd0k5dWRkVDVjZ01TQ09oQS9IL0daCnVvYlJLNVdLUzdDQXlXYXFhUXZv
QTdjQ2dIanhHOEtjVFduTGgxWFl3M2hNNlBkVlV2Y2hjVlFkUU5EVk5ISmYKTnMxdU43eUp5Wmdu
Zm5FTXdvM0p0Q1hMdEF5TGVwekc5UitLRCtnd3REWkw5OVV2YWhHSi82Q0lCcFB0aVczKwpOTXZZ
UzhPU1lBR3NXQlcxYmxTY3RIRzhpcGFOMVc1MnBJdHk5amFFcEJXVEN4REUwdHRJaVJMZ1ZaRHpY
YmJ4Cjdsa241QWdJSnQ5WXVDYlgyNS9PcUZ1OGJIM1J1WFNuU2Z2MXhOZGIxTFJuMmdNMnR6ZGZF
SjFTcndBUkFRQUIKdENWRVpXNXBjeUJTWVhOMGVXOW5hVzRnUEdkbGNtSmxia0JoYkhSc2FXNTFl
QzV2Y21jK2lRSStCQk1CQ0FBbwpCUUpsQXJmSUFoc0RCUWtCNFRPQUJnc0pDQWNEQWdZVkNBSUpD
Z3NFRmdJREFRSWVBUUlYZ0FBS0NSQndVVVZUClNGdjdWcXhJRUFERHNzQmQyZE9HVWpPNk8rQitz
TFhtUFEySXlwajA5d2tJSjV2R1pUdHAvOFJHR1BkSWVtU0EKSjNsR3VsbTI2aTg2Vy8wamdtS0Vs
b3NRZGhrT04za0ZuNFB3UlFPR3RyazFRK1FjYkNjR05NMm9HT0pTVzRnTwo1TW5PSDNDcWRac3ZD
aTNNSlh0ZVpIVWZOSVdVeXJabUhSeloxaWZwZVZzUkhOS256a3FKVzZHbXpmY3BXWHhPCm1SWlh4
dUkwdEJBNnF0ZWhlSTRQM3pSc01RY2lROVF0MXJ5NW5sb3BwL01NTTRLUkdaaExmcGwrcXZUQjU5
RkQKU3U1M1AyZHgyQzU3ZTNzTkk0cCswcVNJVE9CVVJLd2RXb3V3SnBzZVdNMWt4WFJ5MEpDNFY5
aHhLdXpVMDlVVQpWckNNTFg5eXdWR0QyY3p0ZnB2WEM3cWQybDlROFpBYVV6U0RPRWpqTkNaOVNw
UjcwODEvVXhzbXVTeXRsYmd4CnhnbG9vV3Z5ZHhEd2xubzZhUkV1eFFjeFRWQnBmWE5tdGE3cE9n
NCtleElPbEtHRTJWbTkxMFZDT1Y4UWpDcHMKQlF0K2FmaGNSOGxaeGJkT3ZUVXV0YXQ3anRaT2xk
RDY3cXMrZDZYZ2sxUHNrQys1bmFtSjFMOVRiMjkvR1dtVwp4TEFKcVd0NlRmVWRZay9aV1EyRzRj
a0NZUkl5WnBRWEpISk9BUExiZEZDWGdORXZWN0R3RkdjYXRRc0drWG0rCjBPcC9LVEpTYU5vWVJz
TkVrUlVBbjhreHNqTENxMkxlNlpzOTVSVnZYTGlPUkUyL0M4V2FsSlJ2ckd2NS83bTgKM054Vnhs
ZHFQWTNqS0dGdjRKYzkwb0ZRWW11KzRRaTRNRUVRQ1BuMnFGTlNHRVRzRFY3b2Zia0NEUVJsQXJm
SQpBUkFBNnB4K2N3SHY4eEw3QU10S2ZsZ0Fvc0Q2dGVxZE1kREpNQVdJR05rQzZoQTJjS0lIZjNp
ZmNhZUs2bk5mClkzQTJCQVZLczR0UzY2YnNaRXU5S2UrbENOcHFrQmcrOFhCM21QY1FaMTBtZS9r
eEZ1ODFwNlZ4UHRyVDUxNDUKOGlUbG9XWThXOFVmemxsYVZsTDh0Rm5hWmcyMFY1VEJIejUxUndv
dnFzbXNKanRUNXNBSmhMWFE4SnVOMmVNOApTc21GUmRNQ3Q5YkNYTzJBT0dyWWxLdWh3ajR1aWlT
UjVPeVJTZXVEeWpVNnM3U2dUeVBsVHA1azV6Y1J2TzNCCk85V3lWdGkzc2JDKzJGVmZraTY0ZW1k
aXJ0SXdqQjVOcHc4L3g3QnVwRy8rdDU3RnRpR0tBVnUrbzBhSkk1QlgKcm43RTlteWtyQWVXOTVy
VjJrdXQ0TU5lK2FoZmhZeDlqWU00RUlhcm4wSXY0Q1VhelZVQlA3Sk0wZVlNbmRoYQpLckZaOC9V
ODBwQWNkRTBKbVkxZ05RdWgvWC9ISWZjZStFYWxDL2RsS25Kdy9pUGdRTktzcWM2SStvM21vM3dL
CmFjL1VwL1kwc09HWTRIbzlKYVo4U3dHdk9LQzBWc3hlcjB1SUxISVMyNWsyWitBVW50RWo3cWdw
bnpWbnp5R2wKTHRtelBMazNib1hjMURML2F6QlNLWk5HY1R0VEtLeHJtSjBhUHpBWWZKM1oycFFS
aUU0dnZjQXc4MHRSTVU2Zwp3dFZtbEd1ejg2UlhQU0ZRbGtSZ1ZPMHJUVjBSTTdjeDVlN3VTMzVB
OWlnUDgyTDhGY3dhT0NsSUw2Rk4rdlFnCm40OFhDNktJT0dyTGp5RGtKRnBma09GaXlvVjhlQnJs
MDhWMWw1SWFvM01ySEtjQUVRRUFBWWtDSlFRWUFRZ0EKRHdVQ1pRSzN5QUliREFVSkFlRXpnQUFL
Q1JCd1VVVlRTRnY3VmxHUEVBQzA5aGVtODdORVM0V3V3Zmx2dm5NNQpIYUQ0RjFZVCs0eFlSQ2FW
aTdRenkrUmh1T2RyeGlITlBEWTRhTFREeDRiSyt6ZVdvQlgzUDNWOHIrRFEzUkxiCjA4WnA0U1M3
bWZGZFkweUhOZ3plVHhJZjQ3RVBNazZzZzlmSURQTEphMlo5RkZSQTR3eUlyU1lWVVFLdmVaUGsK
Y0pKeVNlTGpXMisxR0lDTGx6cHBobzVvRzdTWVJlVWt3aDJmQll4QkpDWHdJaDRtemZHRFlSNjl3
WUthQWRCeApDT1BySnJIYjYwV3JnejdxR0lBaGVNTWt1V2ZJb3g3dUJDcG5nUVVaRFBiSnQwTjRw
bTVCazBYSHZ2cEI4dDZoCmE2ZDZKNzFMN3NyVzQ0d3MwSFdzaUFwZHhIdUJIU3VoakYzNVhyN3Az
Wm1MeUtNYUNuell1bkprS0tQeVI2ZlAKditoME96dWNaZWRQQXhHWi9idHA1RC9jOFRxYWdDOStj
c2lzd2ljQVF4YjZDenFEUzd0SFpXMVZGSGdjWDFqTwo2cTJZNTh5R25uMzlJOHNOY2c2ZmowS3lE
dStmazFwZmI2N2FCeDJHWG5WTDdyblU5UlVWaW9GY2hVbzQ4andOClNMQndUMkhPQ2NMdXFtN240
QXR2eDF5L0kvM1ZTckE4RjVFVGM3K2RHUUdOOU5ISzVJM0hiZm1xL0ZVV2VNM0MKNnlRRkJrZWlT
QXJBMXdBS2pORDBkNmYwczRIeXlQaUI3d0R0T0xqQnJDeVlLbHN0U1V0LzFxTjIrdk1TSTdGagpk
NGFFL0EyeVFYeWpQd2ZCOGFoTVJYcnQ5ZDlIdGJVQkNGRFRSdDhteTg3d1lnWExIY0k1T3V0N1dS
azAxNWxiClNVL1Fma29VWEFTQnIwdyszSnRaTmc9PQo9NUpBMQotLS0tLUVORCBQR1AgUFVCTElD
IEtFWSBCTE9DSy0tLS0tCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>14423</attachid>
            <date>2023-09-14 12:08:47 +0300</date>
            <delta_ts>2023-09-14 12:33:41 +0300</delta_ts>
            <desc>gpg_public_key</desc>
            <filename>gpg_public_key</filename>
            <type>application/pgp-keys</type>
            <size>5293</size>
            <attacher name="Denis Rastyogin">rastyoginds</attacher>
            
              <data encoding="base64">LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkdVQ3Q4Z0JFQURtU3pO
Z2dVcm51TGhRNkoxLzRHQmNUdkNaUTNGZllGOTNQSEVoWU5Lc3ZySk9nbmY3CmdTa0x5YUdoNTky
VnBWVnJWd2lza2JMZXFTYit1TG9UejF0SVR0eWdMQVJiam9zODIyd1V4SVhHNFZXU2lmYjkKdFEv
MHdmVUZhYzMzV3dTRnZRWDNPeTNyMHEvNzdKSVAzQlpDcXA4YWlMQWZndE8vOExEbWR3cnRsWTQz
SStDVApRc3A1eVdXRWhENGtvcjVHcnovbXlWdjYxaENWNGNmSE5iR0l2RGs2TlZ4djdUdGJaNk9o
UjliSmZ4SGJ1RzN5CldhOFRoTmVyaXdVUm1vZjg5ZnpZcW1lc01iQzlnalBFMWtTQWNDOElSSFBB
eDAvditlSEt5WFlJUmNHaWZ1cnQKN3YwazQ1Umh4MDFrK2Rid1pRY0FwUjdlcjRha0pQTmFOaVcr
WXdCQTQ1WnZUQ0FaVkx2US9zTHdVNWJIeC9TaQphakJ1a09mUjlyOHU0TE9IRVBKTnAyNXVsWWtr
V0oyaEVMelVDb2JCVG5Sd0k5dWRkVDVjZ01TQ09oQS9IL0daCnVvYlJLNVdLUzdDQXlXYXFhUXZv
QTdjQ2dIanhHOEtjVFduTGgxWFl3M2hNNlBkVlV2Y2hjVlFkUU5EVk5ISmYKTnMxdU43eUp5Wmdu
Zm5FTXdvM0p0Q1hMdEF5TGVwekc5UitLRCtnd3REWkw5OVV2YWhHSi82Q0lCcFB0aVczKwpOTXZZ
UzhPU1lBR3NXQlcxYmxTY3RIRzhpcGFOMVc1MnBJdHk5amFFcEJXVEN4REUwdHRJaVJMZ1ZaRHpY
YmJ4Cjdsa241QWdJSnQ5WXVDYlgyNS9PcUZ1OGJIM1J1WFNuU2Z2MXhOZGIxTFJuMmdNMnR6ZGZF
SjFTcndBUkFRQUIKdENWRVpXNXBjeUJTWVhOMGVXOW5hVzRnUEdkbGNtSmxia0JoYkhSc2FXNTFl
QzV2Y21jK2lRSStCQk1CQ0FBbwpCUUpsQXJmSUFoc0RCUWtCNFRPQUJnc0pDQWNEQWdZVkNBSUpD
Z3NFRmdJREFRSWVBUUlYZ0FBS0NSQndVVVZUClNGdjdWcXhJRUFERHNzQmQyZE9HVWpPNk8rQitz
TFhtUFEySXlwajA5d2tJSjV2R1pUdHAvOFJHR1BkSWVtU0EKSjNsR3VsbTI2aTg2Vy8wamdtS0Vs
b3NRZGhrT04za0ZuNFB3UlFPR3RyazFRK1FjYkNjR05NMm9HT0pTVzRnTwo1TW5PSDNDcWRac3ZD
aTNNSlh0ZVpIVWZOSVdVeXJabUhSeloxaWZwZVZzUkhOS256a3FKVzZHbXpmY3BXWHhPCm1SWlh4
dUkwdEJBNnF0ZWhlSTRQM3pSc01RY2lROVF0MXJ5NW5sb3BwL01NTTRLUkdaaExmcGwrcXZUQjU5
RkQKU3U1M1AyZHgyQzU3ZTNzTkk0cCswcVNJVE9CVVJLd2RXb3V3SnBzZVdNMWt4WFJ5MEpDNFY5
aHhLdXpVMDlVVQpWckNNTFg5eXdWR0QyY3p0ZnB2WEM3cWQybDlROFpBYVV6U0RPRWpqTkNaOVNw
UjcwODEvVXhzbXVTeXRsYmd4CnhnbG9vV3Z5ZHhEd2xubzZhUkV1eFFjeFRWQnBmWE5tdGE3cE9n
NCtleElPbEtHRTJWbTkxMFZDT1Y4UWpDcHMKQlF0K2FmaGNSOGxaeGJkT3ZUVXV0YXQ3anRaT2xk
RDY3cXMrZDZYZ2sxUHNrQys1bmFtSjFMOVRiMjkvR1dtVwp4TEFKcVd0NlRmVWRZay9aV1EyRzRj
a0NZUkl5WnBRWEpISk9BUExiZEZDWGdORXZWN0R3RkdjYXRRc0drWG0rCjBPcC9LVEpTYU5vWVJz
TkVrUlVBbjhreHNqTENxMkxlNlpzOTVSVnZYTGlPUkUyL0M4V2FsSlJ2ckd2NS83bTgKM054Vnhs
ZHFQWTNqS0dGdjRKYzkwb0ZRWW11KzRRaTRNRUVRQ1BuMnFGTlNHRVRzRFY3b2Zia0NEUVJsQXJm
SQpBUkFBNnB4K2N3SHY4eEw3QU10S2ZsZ0Fvc0Q2dGVxZE1kREpNQVdJR05rQzZoQTJjS0lIZjNp
ZmNhZUs2bk5mClkzQTJCQVZLczR0UzY2YnNaRXU5S2UrbENOcHFrQmcrOFhCM21QY1FaMTBtZS9r
eEZ1ODFwNlZ4UHRyVDUxNDUKOGlUbG9XWThXOFVmemxsYVZsTDh0Rm5hWmcyMFY1VEJIejUxUndv
dnFzbXNKanRUNXNBSmhMWFE4SnVOMmVNOApTc21GUmRNQ3Q5YkNYTzJBT0dyWWxLdWh3ajR1aWlT
UjVPeVJTZXVEeWpVNnM3U2dUeVBsVHA1azV6Y1J2TzNCCk85V3lWdGkzc2JDKzJGVmZraTY0ZW1k
aXJ0SXdqQjVOcHc4L3g3QnVwRy8rdDU3RnRpR0tBVnUrbzBhSkk1QlgKcm43RTlteWtyQWVXOTVy
VjJrdXQ0TU5lK2FoZmhZeDlqWU00RUlhcm4wSXY0Q1VhelZVQlA3Sk0wZVlNbmRoYQpLckZaOC9V
ODBwQWNkRTBKbVkxZ05RdWgvWC9ISWZjZStFYWxDL2RsS25Kdy9pUGdRTktzcWM2SStvM21vM3dL
CmFjL1VwL1kwc09HWTRIbzlKYVo4U3dHdk9LQzBWc3hlcjB1SUxISVMyNWsyWitBVW50RWo3cWdw
bnpWbnp5R2wKTHRtelBMazNib1hjMURML2F6QlNLWk5HY1R0VEtLeHJtSjBhUHpBWWZKM1oycFFS
aUU0dnZjQXc4MHRSTVU2Zwp3dFZtbEd1ejg2UlhQU0ZRbGtSZ1ZPMHJUVjBSTTdjeDVlN3VTMzVB
OWlnUDgyTDhGY3dhT0NsSUw2Rk4rdlFnCm40OFhDNktJT0dyTGp5RGtKRnBma09GaXlvVjhlQnJs
MDhWMWw1SWFvM01ySEtjQUVRRUFBWWtDSlFRWUFRZ0EKRHdVQ1pRSzN5QUliREFVSkFlRXpnQUFL
Q1JCd1VVVlRTRnY3VmxHUEVBQzA5aGVtODdORVM0V3V3Zmx2dm5NNQpIYUQ0RjFZVCs0eFlSQ2FW
aTdRenkrUmh1T2RyeGlITlBEWTRhTFREeDRiSyt6ZVdvQlgzUDNWOHIrRFEzUkxiCjA4WnA0U1M3
bWZGZFkweUhOZ3plVHhJZjQ3RVBNazZzZzlmSURQTEphMlo5RkZSQTR3eUlyU1lWVVFLdmVaUGsK
Y0pKeVNlTGpXMisxR0lDTGx6cHBobzVvRzdTWVJlVWt3aDJmQll4QkpDWHdJaDRtemZHRFlSNjl3
WUthQWRCeApDT1BySnJIYjYwV3JnejdxR0lBaGVNTWt1V2ZJb3g3dUJDcG5nUVVaRFBiSnQwTjRw
bTVCazBYSHZ2cEI4dDZoCmE2ZDZKNzFMN3NyVzQ0d3MwSFdzaUFwZHhIdUJIU3VoakYzNVhyN3Az
Wm1MeUtNYUNuell1bkprS0tQeVI2ZlAKditoME96dWNaZWRQQXhHWi9idHA1RC9jOFRxYWdDOStj
c2lzd2ljQVF4YjZDenFEUzd0SFpXMVZGSGdjWDFqTwo2cTJZNTh5R25uMzlJOHNOY2c2ZmowS3lE
dStmazFwZmI2N2FCeDJHWG5WTDdyblU5UlVWaW9GY2hVbzQ4andOClNMQndUMkhPQ2NMdXFtN240
QXR2eDF5L0kvM1ZTckE4RjVFVGM3K2RHUUdOOU5ISzVJM0hiZm1xL0ZVV2VNM0MKNnlRRkJrZWlT
QXJBMXdBS2pORDBkNmYwczRIeXlQaUI3d0R0T0xqQnJDeVlLbHN0U1V0LzFxTjIrdk1TSTdGagpk
NGFFL0EyeVFYeWpQd2ZCOGFoTVJYcnQ5ZDlIdGJVQkNGRFRSdDhteTg3d1lnWExIY0k1T3V0N1dS
azAxNWxiClNVL1Fma29VWEFTQnIwdyszSnRaTnJrQ0RRUmxBc3B2QVJBQXU3ODNiTDExNy9yM3J1
VXh3UWJ4cmQ3b1orZHMKc053S0tkd1hva1FtcXlGMFZjWDJzNmtNSjVUSFlZZ3FJZU1rdmV2UnpT
KzlReGZSb2tyMTc0ZUUyak12YVIxNgpaOGVpTjN3NzM4T1JXeEhvbDM2c3JhZFNQRGR5U0x2WlRk
RW45ZUpsNno3OWQ5MEttV0xBVC9scGJtRWZ0VlprCnFwN2pSRUtkRFlQdnAxYUxBOEwxWDludzB3
L1FodHZZOUlsRVdsWURaeFM0NHQrM2FndjZaNEJaUngwKzAvd2oKT2hnbllDOFhMUkhsM0F2am9G
OHdqRWV6ME01VnI1MTFGL0VDWWhqTTJXZUh1Y29xT1pQaHJ2S01iSjdmbHhoUgpCS0xmcDQ4NmJM
bDd4aTluK3hONWpsbzMyRkdvdmZkM0RpZEprcW5oK3JRWnQyY3J5M1hvOVZBamVicjVSVytvCitF
N2RSdnNBNm1LOUE1MHRlSTkvay8zNG1ZRzcvM1ZBNVA0eVJMU05FT05rOG5TaC9SazloQ3ZQSU45
ZzNvQXQKLzNXdUtZOHFQK2NoUExWTDE1QXFDd1lxeE85QkphNHlIYkxpQnlleS8wdTB0SEo2VEtW
MnQydGFwdWhnK2RWQQpxU05lKzZwdERtc3ozVlBaakZyMW5QMjRTMzJWU3cxVnJSb1ZKUnhNdTkx
UWpHRXYwSDl3Y0Z5d0lxTnJuN3I3CkptUjJwSTM4ay83NzBtTldqWDVZcDJnZGQ5U3dmWWQ3SFA1
bUM3OGpsdU5QSS9IcTNzbWU1WXFTQVNqd1FQYzYKcUQzeHBYZGg5d3pubEVrcXdRaXJTVTR3Zm5M
ZVo4djkyVTRSRmhmcGhhZmVwcGl2a0oyR3hKMjZCQUFwYU5GQwpRSFpONGp5NThCMmF2N01BRVFF
QUFZa0VSQVFZQVFnQUR3VUNaUUxLYndJYkFnVUpBZUV6Z0FJcENSQndVVVZUClNGdjdWc0ZkSUFR
WkFRZ0FCZ1VDWlFMS2J3QUtDUkFCWk9jSm84cnlkOHMvRUFDY2lOQVZOdDBMYnpBbTBzNE4KQnYx
TGdXQW5rQmxQclpDaTdpTHI5LzR3dnNsYVV1RHNRK2oxbWdjbkZpSHVnS3RvdEFDSDFtcHpIazQv
azVTRQpJNlh2RGpzRW13SGxnckNkcDZkNCsrVUFJYnlBVTFoWFdXWm5VdEFUOU81RTZrRHV5eUx3
bTFZM0FTc1BubGY3ClJvTStnU1o4alk0ZzJQWGV0KzVVUkh1cFJIWEQ4SWdzeUlsK3l4ZUtwRGhz
QUZIeTNBUksrSWRndDgxQnJmMzIKTU42TitWRHhRN1lEZWcxdXZXSmFJbEpIa1RWTFQyeDQ0Si9w
OWtIa0JzbkpjbDd2aVRDM013dXpuR3JWZnc0awpYWDBmaHloajJaTCtEVkxKMTR3YTNGWVd2OGFM
Q2VDMVhMU1lzb2sveHBGcUlDRlkzZ2xpeVhwZ0ltZ2wva0d5CkNXNEZXbG43OUROQk1FWFBtMUVX
OFdrdWQ1U3k4R0tqVXpEK0d6TENkaEYxZzVkbmNFc2FUV0lyODdOZU1qczYKcjROU2pYSFcxWTFr
MHBpcHRESXhQdVZnUUNucmpZT1hMMEFzYzZ1WGlzbDQ4OFluNDF3TmdrYVNyLzIvSkljNgprcHhn
Q2V2OTM4aEJaR21kU0tnOFhFYWpmQnY4L3FkcWpyR3pVaElnbVhZR1pEM3pxUmNkdUtOU3lLOWt0
b1NmCkRWMHhOVHljQTNzbzVEQzVpRENYa1Q1RFpzUzMzOFp2dVd2Wkp3ZWJIOW9aSmVpOE1DVkpT
Vjd4MTFXZDhlOXAKVnpMNHZqbUs5QjBobzh5OGVFbDFQRnNZakRMaXhDRHRwdGQ4UHB4UTA4RUw2
VnNVRHNOSWplUTlYSnc5TXhMbQpKTFJYR21jbHFoWDI3L1ZZSmNNTGRWWGpwZ2lrRC85TGl1MURR
NEgvd3VMYmQ0RTE5N0tKdzl5VUsweHh1VkxrClYrYXhlRkNnMmRlb203NG1OZVNUWFZPeDVVTzNQ
ajN0S2VLbGFoMGJ1UWY5Y2pHeFk2akphMjZRMndtKzQwMVMKZjlrYVpadU9ZYUFZd3N4L1VwekMr
dzRMMWxxRS80bm5kQm1DSFJUY2lLQk55NmV1Z2Q5NnR1cmpkRnFnUkZGaApDMVprSTN5SHg2dm5o
M1pzRG1PWEpLbndNMkQwd2U0Z2YwZmNsRmdOdVlSOU9MRFZBNzRPS05tU21yU05SbEg4CmVNNGlT
aVA3dExKQTI5SnZoRmcvT2toU3VqcEFqSHZMM0RBSW1SSFhDQjkyeUVBWDE1QWNsdlhPTlpoMVBE
L0EKMWdSQW1YOUtHT3MyVTkydTk1Vk4rYnZGNmJKTU95SDczbGM5L0F5UC8yTWl5SWRUYW5TVXRE
QmZkNzZPaGthWApXNDA1TVFjd29GbXJtNkFQck5mdENqR2l5NkNzc1FyTVo3ejlUbFJFTCtkUXps
NGdac0V5M09jYk5VVGRQQjlNCko2L2dRN1ZsRVV5VTNIYWFwNTB0eGlpd09QSEJMTVEzQ0FyL1p0
czVMazg1RTJvc1QrKzY3RSsyeUtNdlkzMnAKT2h1UjZEUnR0Q1kyeFk3cnRzbFArbHdQS1UvY0J3
T1BHQ05lR3RraGJJNUVnSnpaWHd1VHE1NzQrckkrd1F3aAo5dVc0ZG85N0lFQkJialpBTWcxcXRH
aUZpVWc5UG1NVjdkS0ZsUDMxNU1RSUpWSkJsaEtTZHNMK2ZsalphWHF3Cjl3Qm5RenhSUUd4OU5P
ODFHWmFmWDNWU0VJTnJQYmlqOEdudmpLMFN6TjAyVHUyV3dMbnJSblZHQi9HWTI5d1cKSHMyOWRo
bWpxdz09Cj10dDk4Ci0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>14424</attachid>
            <date>2023-09-14 12:33:41 +0300</date>
            <delta_ts>2023-09-14 12:33:41 +0300</delta_ts>
            <desc>gpg_public</desc>
            <filename>gpg_public</filename>
            <type>application/pgp-keys</type>
            <size>3830</size>
            <attacher name="Denis Rastyogin">rastyoginds</attacher>
            
              <data encoding="base64">LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkdVQ3Q4Z0JFQURtU3pO
Z2dVcm51TGhRNkoxLzRHQmNUdkNaUTNGZllGOTNQSEVoWU5Lc3ZySk9nbmY3CmdTa0x5YUdoNTky
VnBWVnJWd2lza2JMZXFTYit1TG9UejF0SVR0eWdMQVJiam9zODIyd1V4SVhHNFZXU2lmYjkKdFEv
MHdmVUZhYzMzV3dTRnZRWDNPeTNyMHEvNzdKSVAzQlpDcXA4YWlMQWZndE8vOExEbWR3cnRsWTQz
SStDVApRc3A1eVdXRWhENGtvcjVHcnovbXlWdjYxaENWNGNmSE5iR0l2RGs2TlZ4djdUdGJaNk9o
UjliSmZ4SGJ1RzN5CldhOFRoTmVyaXdVUm1vZjg5ZnpZcW1lc01iQzlnalBFMWtTQWNDOElSSFBB
eDAvditlSEt5WFlJUmNHaWZ1cnQKN3YwazQ1Umh4MDFrK2Rid1pRY0FwUjdlcjRha0pQTmFOaVcr
WXdCQTQ1WnZUQ0FaVkx2US9zTHdVNWJIeC9TaQphakJ1a09mUjlyOHU0TE9IRVBKTnAyNXVsWWtr
V0oyaEVMelVDb2JCVG5Sd0k5dWRkVDVjZ01TQ09oQS9IL0daCnVvYlJLNVdLUzdDQXlXYXFhUXZv
QTdjQ2dIanhHOEtjVFduTGgxWFl3M2hNNlBkVlV2Y2hjVlFkUU5EVk5ISmYKTnMxdU43eUp5Wmdu
Zm5FTXdvM0p0Q1hMdEF5TGVwekc5UitLRCtnd3REWkw5OVV2YWhHSi82Q0lCcFB0aVczKwpOTXZZ
UzhPU1lBR3NXQlcxYmxTY3RIRzhpcGFOMVc1MnBJdHk5amFFcEJXVEN4REUwdHRJaVJMZ1ZaRHpY
YmJ4Cjdsa241QWdJSnQ5WXVDYlgyNS9PcUZ1OGJIM1J1WFNuU2Z2MXhOZGIxTFJuMmdNMnR6ZGZF
SjFTcndBUkFRQUIKdENWRVpXNXBjeUJTWVhOMGVXOW5hVzRnUEdkbGNtSmxia0JoYkhSc2FXNTFl
QzV2Y21jK2lRSStCQk1CQ0FBbwpCUUpsQXJmSUFoc0RCUWtCNFRPQUJnc0pDQWNEQWdZVkNBSUpD
Z3NFRmdJREFRSWVBUUlYZ0FBS0NSQndVVVZUClNGdjdWcXhJRUFERHNzQmQyZE9HVWpPNk8rQitz
TFhtUFEySXlwajA5d2tJSjV2R1pUdHAvOFJHR1BkSWVtU0EKSjNsR3VsbTI2aTg2Vy8wamdtS0Vs
b3NRZGhrT04za0ZuNFB3UlFPR3RyazFRK1FjYkNjR05NMm9HT0pTVzRnTwo1TW5PSDNDcWRac3ZD
aTNNSlh0ZVpIVWZOSVdVeXJabUhSeloxaWZwZVZzUkhOS256a3FKVzZHbXpmY3BXWHhPCm1SWlh4
dUkwdEJBNnF0ZWhlSTRQM3pSc01RY2lROVF0MXJ5NW5sb3BwL01NTTRLUkdaaExmcGwrcXZUQjU5
RkQKU3U1M1AyZHgyQzU3ZTNzTkk0cCswcVNJVE9CVVJLd2RXb3V3SnBzZVdNMWt4WFJ5MEpDNFY5
aHhLdXpVMDlVVQpWckNNTFg5eXdWR0QyY3p0ZnB2WEM3cWQybDlROFpBYVV6U0RPRWpqTkNaOVNw
UjcwODEvVXhzbXVTeXRsYmd4CnhnbG9vV3Z5ZHhEd2xubzZhUkV1eFFjeFRWQnBmWE5tdGE3cE9n
NCtleElPbEtHRTJWbTkxMFZDT1Y4UWpDcHMKQlF0K2FmaGNSOGxaeGJkT3ZUVXV0YXQ3anRaT2xk
RDY3cXMrZDZYZ2sxUHNrQys1bmFtSjFMOVRiMjkvR1dtVwp4TEFKcVd0NlRmVWRZay9aV1EyRzRj
a0NZUkl5WnBRWEpISk9BUExiZEZDWGdORXZWN0R3RkdjYXRRc0drWG0rCjBPcC9LVEpTYU5vWVJz
TkVrUlVBbjhreHNqTENxMkxlNlpzOTVSVnZYTGlPUkUyL0M4V2FsSlJ2ckd2NS83bTgKM054Vnhs
ZHFQWTNqS0dGdjRKYzkwb0ZRWW11KzRRaTRNRUVRQ1BuMnFGTlNHRVRzRFY3b2Zia0NEUVJsQXNw
dgpBUkFBdTc4M2JMMTE3L3IzcnVVeHdRYnhyZDdvWitkc3NOd0tLZHdYb2tRbXF5RjBWY1gyczZr
TUo1VEhZWWdxCkllTWt2ZXZSelMrOVF4ZlJva3IxNzRlRTJqTXZhUjE2WjhlaU4zdzczOE9SV3hI
b2wzNnNyYWRTUERkeVNMdloKVGRFbjllSmw2ejc5ZDkwS21XTEFUL2xwYm1FZnRWWmtxcDdqUkVL
ZERZUHZwMWFMQThMMVg5bncwdy9RaHR2WQo5SWxFV2xZRFp4UzQ0dCszYWd2Nlo0QlpSeDArMC93
ak9oZ25ZQzhYTFJIbDNBdmpvRjh3akVlejBNNVZyNTExCkYvRUNZaGpNMldlSHVjb3FPWlBocnZL
TWJKN2ZseGhSQktMZnA0ODZiTGw3eGk5bit4TjVqbG8zMkZHb3ZmZDMKRGlkSmtxbmgrclFadDJj
cnkzWG85VkFqZWJyNVJXK28rRTdkUnZzQTZtSzlBNTB0ZUk5L2svMzRtWUc3LzNWQQo1UDR5UkxT
TkVPTms4blNoL1JrOWhDdlBJTjlnM29BdC8zV3VLWThxUCtjaFBMVkwxNUFxQ3dZcXhPOUJKYTR5
CkhiTGlCeWV5LzB1MHRISjZUS1YydDJ0YXB1aGcrZFZBcVNOZSs2cHREbXN6M1ZQWmpGcjFuUDI0
UzMyVlN3MVYKclJvVkpSeE11OTFRakdFdjBIOXdjRnl3SXFOcm43cjdKbVIycEkzOGsvNzcwbU5X
alg1WXAyZ2RkOVN3ZllkNwpIUDVtQzc4amx1TlBJL0hxM3NtZTVZcVNBU2p3UVBjNnFEM3hwWGRo
OXd6bmxFa3F3UWlyU1U0d2ZuTGVaOHY5CjJVNFJGaGZwaGFmZXBwaXZrSjJHeEoyNkJBQXBhTkZD
UUhaTjRqeTU4QjJhdjdNQUVRRUFBWWtFUkFRWUFRZ0EKRHdVQ1pRTEtid0liQWdVSkFlRXpnQUlw
Q1JCd1VVVlRTRnY3VnNGZElBUVpBUWdBQmdVQ1pRTEtid0FLQ1JBQgpaT2NKbzhyeWQ4cy9FQUNj
aU5BVk50MExiekFtMHM0TkJ2MUxnV0Fua0JsUHJaQ2k3aUxyOS80d3ZzbGFVdURzClErajFtZ2Nu
RmlIdWdLdG90QUNIMW1wekhrNC9rNVNFSTZYdkRqc0Vtd0hsZ3JDZHA2ZDQrK1VBSWJ5QVUxaFgK
V1dablV0QVQ5TzVFNmtEdXl5THdtMVkzQVNzUG5sZjdSb00rZ1NaOGpZNGcyUFhldCs1VVJIdXBS
SFhEOElncwp5SWwreXhlS3BEaHNBRkh5M0FSSytJZGd0ODFCcmYzMk1ONk4rVkR4UTdZRGVnMXV2
V0phSWxKSGtUVkxUMng0CjRKL3A5a0hrQnNuSmNsN3ZpVEMzTXd1em5HclZmdzRrWFgwZmh5aGoy
WkwrRFZMSjE0d2EzRllXdjhhTENlQzEKWExTWXNvay94cEZxSUNGWTNnbGl5WHBnSW1nbC9rR3lD
VzRGV2xuNzlETkJNRVhQbTFFVzhXa3VkNVN5OEdLagpVekQrR3pMQ2RoRjFnNWRuY0VzYVRXSXI4
N05lTWpzNnI0TlNqWEhXMVkxazBwaXB0REl4UHVWZ1FDbnJqWU9YCkwwQXNjNnVYaXNsNDg4WW40
MXdOZ2thU3IvMi9KSWM2a3B4Z0NldjkzOGhCWkdtZFNLZzhYRWFqZkJ2OC9xZHEKanJHelVoSWdt
WFlHWkQzenFSY2R1S05TeUs5a3RvU2ZEVjB4TlR5Y0Ezc281REM1aURDWGtUNURac1MzMzhadgp1
V3ZaSndlYkg5b1pKZWk4TUNWSlNWN3gxMVdkOGU5cFZ6TDR2am1LOUIwaG84eThlRWwxUEZzWWpE
TGl4Q0R0CnB0ZDhQcHhRMDhFTDZWc1VEc05JamVROVhKdzlNeExtSkxSWEdtY2xxaFgyNy9WWUpj
TUxkVlhqcGdpa0QvOUwKaXUxRFE0SC93dUxiZDRFMTk3S0p3OXlVSzB4eHVWTGtWK2F4ZUZDZzJk
ZW9tNzRtTmVTVFhWT3g1VU8zUGozdApLZUtsYWgwYnVRZjljakd4WTZqSmEyNlEyd20rNDAxU2Y5
a2FaWnVPWWFBWXdzeC9VcHpDK3c0TDFscUUvNG5uCmRCbUNIUlRjaUtCTnk2ZXVnZDk2dHVyamRG
cWdSRkZoQzFaa0kzeUh4NnZuaDNac0RtT1hKS253TTJEMHdlNGcKZjBmY2xGZ051WVI5T0xEVkE3
NE9LTm1TbXJTTlJsSDhlTTRpU2lQN3RMSkEyOUp2aEZnL09raFN1anBBakh2TAozREFJbVJIWENC
OTJ5RUFYMTVBY2x2WE9OWmgxUEQvQTFnUkFtWDlLR09zMlU5MnU5NVZOK2J2RjZiSk1PeUg3CjNs
YzkvQXlQLzJNaXlJZFRhblNVdERCZmQ3Nk9oa2FYVzQwNU1RY3dvRm1ybTZBUHJOZnRDakdpeTZD
c3NRck0KWjd6OVRsUkVMK2RRemw0Z1pzRXkzT2NiTlVUZFBCOU1KNi9nUTdWbEVVeVUzSGFhcDUw
dHhpaXdPUEhCTE1RMwpDQXIvWnRzNUxrODVFMm9zVCsrNjdFKzJ5S012WTMycE9odVI2RFJ0dENZ
MnhZN3J0c2xQK2x3UEtVL2NCd09QCkdDTmVHdGtoYkk1RWdKelpYd3VUcTU3NCtySSt3UXdoOXVX
NGRvOTdJRUJCYmpaQU1nMXF0R2lGaVVnOVBtTVYKN2RLRmxQMzE1TVFJSlZKQmxoS1Nkc0wrZmxq
WmFYcXc5d0JuUXp4UlFHeDlOTzgxR1phZlgzVlNFSU5yUGJpago4R252akswU3pOMDJUdTJXd0xu
clJuVkdCL0dZMjl3V0hzMjlkaG1qcXc9PQo9ejVuVAotLS0tLUVORCBQR1AgUFVCTElDIEtFWSBC
TE9DSy0tLS0tCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>