gist.nuovell.cn Open in urlscan Pro
172.67.129.250  Public Scan

Submitted URL: http://gist.nuovell.cn/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977
Effective URL: https://gist.nuovell.cn/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977
Submission: On April 14 via api from US — Scanned from DE

Form analysis 32 forms found in the DOM

GET /search

<form class="position-relative js-quicksearch-form" role="search" aria-label="Site" data-turbo="false" action="/search" accept-charset="UTF-8" method="get">
  <div class="header-search-wrapper form-control input-sm js-chromeless-input-container">
    <input type="text" class="form-control input-sm js-site-search-focus header-search-input" data-hotkey="s,/" name="q" aria-label="Search" placeholder="Search…" autocorrect="off" autocomplete="off" autocapitalize="off">
  </div>
</form>

GET /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/load_comments

<form class="ajax-pagination-form js-ajax-pagination" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/load_comments" accept-charset="UTF-8" method="get">
  <input type="hidden" name="partial" id="partial" value="gists/timeline_marker" autocomplete="off" class="form-control">
  <input type="hidden" name="before_comment_id" id="before_comment_id" value="4581141" autocomplete="off" class="form-control">
  <input type="hidden" name="mark_as_unread" id="mark_as_unread" value="0" autocomplete="off" class="form-control">
  <button name="button" type="submit" class="ajax-pagination-btn" data-disable-with="Loading...">Load earlier comments...</button>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4581141

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4581141" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="vCWOYfY63iI6Yduu4zrySEDN1qbd2omtB6eUw1Ot_JQhezbHHAkOOegCiVnIFVH-iN_IP-QnkZhSyQvQhQ9wTQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4581141/edit_form?textarea_id=gistcomment-4581141-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4623219

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4623219" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="mxwQGL7b9SVdzRdDqLG4oi7gRcNKa9OYKArcc8PEjDJ_mbrO_F5ZeD8BwF1dGc4nQO1oGXwFcvRltDxt7QapUQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4623219/edit_form?textarea_id=gistcomment-4623219-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4623332

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4623332" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="9xCmv6BLPUHGLeDfuZj6QOMlnYxykuftVOk-oiBlBn85UtZffII_22u7DNqEz67AgM_P1vE12lRvKNCb55-NTQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4623332/edit_form?textarea_id=gistcomment-4623332-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4642813

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4642813" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="wuT2LgV76qrspqv2mWCKEBKfcq4YR4BAHjhM0bFAsJTjUBMo3NBsZR0YlzVyzrk2lcTHkqrGADH37w7BCoEp3Q" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4642813/edit_form?textarea_id=gistcomment-4642813-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4644823

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4644823" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="e5sxVfnJQOu6iACpzdxQub0b1osT-R1u98KuQG-B5k0UCOC45qou2jX7ubEysAshDf3QrMMFFeATgzM21RSyxA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4644823/edit_form?textarea_id=gistcomment-4644823-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4659540

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4659540" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="ouvbE7DsQNEDjc1TEvzm80JPogzh3jeLBZZw7RvoLdU0R9bA5kzGfNFjHXLk4iEb3R0x-gnRL-hTqy2MYMot0A" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4659540/edit_form?textarea_id=gistcomment-4659540-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4688841

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4688841" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="zOZGBIBjfhgp7JKrZH-rFDcWL9pcSoA5Z1mez4NSOuYW6T0ZMhUdAFh_NN06ITIzxUlFtbx-pUl3dk7UNXg8vg" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4688841/edit_form?textarea_id=gistcomment-4688841-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782704

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782704" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="8bEi0lA4JLpT0sWvs3S3vmWUYZmyI2a-FCgfEiuJOPYgsSEY4hfjlq25PrjkGbdiJDnzhcsMmxPPk-0oS7X3hw" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782704/edit_form?textarea_id=gistcomment-4782704-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782714

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782714" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="TgyNzjc_2E8wOCWqqDgohI4LybOfhzl4tTVbbRmQCSIZ1O-XZoLqlFloou2rIINMefosXjlg_BHjpOJV7GNBIA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782714/edit_form?textarea_id=gistcomment-4782714-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782719

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782719" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="lJ403vPdD8l94WiNYcvonUwT22cuC3n8Qt9uSIzNpl8CGwxbZABHcknCJCh83CbnaDlcZ_XtpK7-1fE2I2H5oQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782719/edit_form?textarea_id=gistcomment-4782719-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782720

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782720" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="fyEe6xNJ8BHDQdF_85A38Swd9C8nB3Z0x-qLJhFryhS_fy-xXi6znOXCbYCD1JoB3gpsfvNyqlkFNnOprnKjyA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782720/edit_form?textarea_id=gistcomment-4782720-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782895

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782895" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="eBFWrJPOUmPh--0X5WreQpjZDuAt0BZD3rPM96OywQU5hUVxAZ1-rQVg19MvJiQ5QkJV7ys1rf1RvLyGwWwKMw" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782895/edit_form?textarea_id=gistcomment-4782895-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782926

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782926" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="AIUxvMBpjlu1G5s9P7jV3ss-IhjSrma0Mm2EvYMs_yuLpin5nw4Rm6Hyh7TlxJG3C1QjUm-YfQYDN9zpAiJXlQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4782926/edit_form?textarea_id=gistcomment-4782926-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4784114

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4784114" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="B-TccHA-T36CYUAUbDreISKhd26nKD2tTtt-r_UB2aHTfDQQhXDEUGINchervfOowPuBWtDyfGVf83xz7T6OTA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4784114/edit_form?textarea_id=gistcomment-4784114-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787559

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787559" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="Ox8BhbyFL-qg_sajjc6WzvSrHMaOPCug_VulkYIzFVwAhWBIsRVHIPLnSwY-dBl82XxL37n4KgTByz0mhoYPnA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787559/edit_form?textarea_id=gistcomment-4787559-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787752

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787752" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="FL9-C7PkMRBtNXrO0nb4Kor9oicKwfYHZfAzqwcAVTgBHmlmqaYswf2A08WFW3L_CBsBwT8QYtnMZEQ4tF9REg" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787752/edit_form?textarea_id=gistcomment-4787752-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787766

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787766" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="8M9Rf1ysbrFVzESajYkSfiyLqWn5f_OipHYyfHnnIWwriZSawlX2Bk1lBhm5sj-NUK1-AKz6t495gDj5ftnThA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787766/edit_form?textarea_id=gistcomment-4787766-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787769

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787769" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="1stkrQ29i9f1bQHadKULgV2Aq12JLQcqqg7xVBUauy4Nk12I9I04lXs3BOH7KgDf8SqF7jGM9hqNc43ARM3XSw" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787769/edit_form?textarea_id=gistcomment-4787769-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787772

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787772" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="Wq_KNYXVt5mQ-Q1PyGtRTAmvKt17_FEDtLgmcuc_KCcFuoes2HcsOlHPlEVz6-T3sK7MlTBHUyDgt5Aeqw4VyQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787772/edit_form?textarea_id=gistcomment-4787772-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787777

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787777" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="2pcFUm0lcqu6ajI45HCSONdyJe6PEwYj-yEoV5yG05o0PTMyyi40Bvfjgl9Vg7trofD0kOtyM731WNF5MIYrPA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787777/edit_form?textarea_id=gistcomment-4787777-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787789

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787789" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="ELkh7VBDDTwP9HsYRQHp6OHFEbhp4Y9LB__H6Lmt39CuWQC1g-sewkckTiCmgH-EuxurGdAAXEB-Xo7_jJKytQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4787789/edit_form?textarea_id=gistcomment-4787789-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4916789

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4916789" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="70CcJ08vjYaISWSB_xzFith6as2sL0H4XLgsnMuH4GRmRbaOTHXc6AsX3UFNPEei5qYqYTmgWqKKpB_Rik-6SA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4916789/edit_form?textarea_id=gistcomment-4916789-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4924873

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4924873" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="XcDVjyIxRPicOGKUUUWFbhKrj8ICjvtm_hBDX4oVcwB7RtV6XJaYRFQedMBRrOaiWfkZa5TZBxAi3uNNZXsg-g" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4924873/edit_form?textarea_id=gistcomment-4924873-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4924955

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4924955" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="PvxFXmFe4aZq88PV6MfBLDRMZhrat_lvT1VYSwR04JfUo10htwWxcTR4C_bl797PTvyQ7Y8KAwlz2ntERd_zyQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4924955/edit_form?textarea_id=gistcomment-4924955-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4958097

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4958097" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="D68kHv5k0aOW9fJTKAWBrR0i1J_q8p_aMcHG4o3ObHYGl6GyogLVhSoHPI-f8bz2UfMe9pnh5WwrmtonJryDpQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4958097/edit_form?textarea_id=gistcomment-4958097-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4958110

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4958110" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="pRHD2pt1Q2GwwQ3ox2gcl-aG7CqG29sAPu3OKUZIdgfXDGu5xfE77fgjBnOyDnUwZjKYmgr_1x7e2RGMGQXYoQ" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4958110/edit_form?textarea_id=gistcomment-4958110-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4975571

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4975571" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="azMuwzvvlUaW1u__HXI5mdmqIyXr-qnLG7cr0F7OVXcPkm1zNkRv7Z9RKWsDqLW4S9qJYkN9awRwHKIjFgUK3A" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4975571/edit_form?textarea_id=gistcomment-4975571-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4975575

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4975575" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="mg_T7PLwQG5C_26ev0olCQrZp2IJnEJphLHgpV3ydyZw64-v5SeTQyvpDDt0H5zvL6OxTbBWCyoQhKf0XzFMLA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4975575/edit_form?textarea_id=gistcomment-4975575-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4984430

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4984430" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="z8VmGA7Ptcx5PG629JB0akAgb3JepamaQXHrdKlL0MYnCWlrtnTAZE8_aRGcL2oRI5q-tfAPkPbOAezTE0Bkmw" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4984430/edit_form?textarea_id=gistcomment-4984430-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

POST /mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4984605

<form class="js-comment-update" data-type="json" data-turbo="false" action="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4984605" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="put" autocomplete="off"><input
    type="hidden" name="authenticity_token" value="ThHbEI3GnsalQ3q8a8meoZR0wopJcsQCpBxdYEUTGf53DbEswdzj7fLwMvTy1HFZvIzgoX6qvw2FtW5N3Ib6jA" autocomplete="off">
  <include-fragment loading="lazy" src="/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977/comments/4984605/edit_form?textarea_id=gistcomment-4984605-body&amp;comment_context=discussion"
    class="previewable-comment-form js-comment-edit-form-deferred-include-fragment">
    <p class="text-center mt-3" data-hide-on-error="">
      <svg aria-label="Loading..." style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
        <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none"></circle>
        <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path>
      </svg>
    </p>
    <p class="ml-1 mb-2 mt-2" data-show-on-error="" hidden="">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
        <path
          d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
        </path>
      </svg> Sorry, something went wrong.
    </p>
  </include-fragment>
</form>

Text Content

Skip to content

All gists Back to GitHub Sign in Sign up

Sign in Sign up
You signed in with another tab or window. Reload to refresh your session. You
signed out in another tab or window. Reload to refresh your session. You
switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert

{{ message }}

Instantly share code, notes, and snippets.


MMOZEIKO/!README.MD

Last active April 14, 2024 08:48
Show Gist options
 * Download ZIP

 * Star 131 You must be signed in to star a gist
 * Fork 17 You must be signed in to fork a gist

 * Embed
    * Embed Embed this gist in your website.
    * Share Copy sharable link for this gist.
    * Clone via HTTPS Clone using the web URL.
    * 
    * Learn more about clone URLs
   
   Clone this repository at &lt;script
   src=&quot;https://gist.nuovell.cn/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977.js&quot;&gt;&lt;/script&gt;
   
   
 * Save mmozeiko/7f3162ec2988e81e56d5c4e22cde9977 to your computer and use it in
   GitHub Desktop.

Code Revisions 13 Stars 131 Forks 17
Embed
 * Embed Embed this gist in your website.
 * Share Copy sharable link for this gist.
 * Clone via HTTPS Clone using the web URL.
 * 
 * Learn more about clone URLs

Clone this repository at &lt;script
src=&quot;https://gist.nuovell.cn/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977.js&quot;&gt;&lt;/script&gt;


Save mmozeiko/7f3162ec2988e81e56d5c4e22cde9977 to your computer and use it in
GitHub Desktop.
Download ZIP
Download MSVC compiler/linker & Windows SDK without installing full Visual
Studio
Raw
!README.md

This downloads standalone 64-bit MSVC compiler, linker & other tools, also
headers/libraries from Windows SDK into portable folder, without installing
Visual Studio. Has bare minimum components - no UWP/Store/WindowsRT stuff, just
files & tools for 64-bit native desktop app development.

Run python.exe portable-msvc.py and it will download output into msvc folder. By
default it will download latest available MSVC & Windows SDK - currently
v14.32.17.2 and v10.0.22621.0.

You can list available versions with python.exe portable-msvc.py --show-versions
and then pass versions you want with --msvc-version and --sdk-version arguments.

To use cl.exe/link.exe from output folder, first run setup.bat - after that
PATH/INCLUDE/LIB env variables will be setup to use all the tools as usual. You
can also use clang-cl.exe with these includes & libraries.

To use clang-cl.exe without running setup.bat, pass extra /winsysroot msvc
argument (msvc is folder name where output is stored).

Raw
portable-msvc.py
This file contains bidirectional Unicode text that may be interpreted or
compiled differently than what appears below. To review, open the file in an
editor that reveals hidden Unicode characters. Learn more about bidirectional
Unicode characters
Show hidden characters

#!/usr/bin/env python3 import io import os import sys import json import shutil
import hashlib import zipfile import tempfile import argparse import subprocess
import urllib.request import urllib.error from pathlib import Path OUTPUT =
Path("msvc") # output folder # other architectures may work or may not - not
really tested HOST = "x64" # or x86 TARGET = "x64" # or x86, arm, arm64
MANIFEST_URL = "https://aka.ms/vs/17/release/channel" MANIFEST_PREVIEW_URL =
"https://aka.ms/vs/17/pre/channel" ssl_context = None def download(url): with
urllib.request.urlopen(url, context=ssl_context) as res: return res.read() def
download_progress(url, check, name, f): data = io.BytesIO() with
urllib.request.urlopen(url, context=ssl_context) as res: total =
int(res.headers["Content-Length"]) size = 0 while True: block = res.read(1<<20)
if not block: break f.write(block) data.write(block) size += len(block) perc =
size * 100 // total print(f"\r{name} ... {perc}%", end="") print() data =
data.getvalue() digest = hashlib.sha256(data).hexdigest() if check.lower() !=
digest: exit(f"Hash mismatch for f{pkg}") return data # super crappy msi format
parser just to find required .cab files def get_msi_cabs(msi): index = 0 while
True: index = msi.find(b".cab", index+4) if index < 0: return yield
msi[index-32:index+4].decode("ascii") def first(items, cond): return next(item
for item in items if cond(item)) ### parse command-line arguments ap =
argparse.ArgumentParser() ap.add_argument("--show-versions",
action="store_true", help="Show available MSVC and Windows SDK versions")
ap.add_argument("--accept-license", action="store_true", help="Automatically
accept license") ap.add_argument("--msvc-version", help="Get specific MSVC
version") ap.add_argument("--sdk-version", help="Get specific Windows SDK
version") ap.add_argument("--preview", action="store_true", help="Use preview
channel for Preview versions") args = ap.parse_args() print(args.preview) ###
get main manifest URL = MANIFEST_PREVIEW_URL if args.preview else MANIFEST_URL
try: manifest = json.loads(download(URL)) except urllib.error.URLError as err:
import ssl if isinstance(err.args[0], ssl.SSLCertVerificationError): # for more
info about Python & issues with Windows certificates see
https://stackoverflow.com/a/52074591 print("ERROR: ssl certificate verification
error") try: import certifi except ModuleNotFoundError: print("ERROR: please
install 'certifi' package to use Mozilla certificates") print("ERROR: or update
your Windows certs, see instructions here:
https://woshub.com/updating-trusted-root-certificates-in-windows-10/#h2_3")
exit() print("NOTE: retrying with certifi certificates") ssl_context =
ssl.create_default_context(cafile=certifi.where()) manifest =
json.loads(download(URL)) else: raise ### download VS manifest ITEM_NAME =
"Microsoft.VisualStudio.Manifests.VisualStudioPreview" if args.preview else
"Microsoft.VisualStudio.Manifests.VisualStudio" vs =
first(manifest["channelItems"], lambda x: x["id"] == ITEM_NAME) payload =
vs["payloads"][0]["url"] vsmanifest = json.loads(download(payload)) ### find
MSVC & WinSDK versions packages = {} for p in vsmanifest["packages"]:
packages.setdefault(p["id"].lower(), []).append(p) msvc = {} sdk = {} for pid,p
in packages.items(): if
pid.startswith("Microsoft.VisualStudio.Component.VC.".lower()) and
pid.endswith(".x86.x64".lower()): pver = ".".join(pid.split(".")[4:6]) if
pver[0].isnumeric(): msvc[pver] = pid elif
pid.startswith("Microsoft.VisualStudio.Component.Windows10SDK.".lower()) or \
pid.startswith("Microsoft.VisualStudio.Component.Windows11SDK.".lower()): pver =
pid.split(".")[-1] if pver.isnumeric(): sdk[pver] = pid if args.show_versions:
print("MSVC versions:", " ".join(sorted(msvc.keys()))) print("Windows SDK
versions:", " ".join(sorted(sdk.keys()))) exit(0) msvc_ver = args.msvc_version
or max(sorted(msvc.keys())) sdk_ver = args.sdk_version or
max(sorted(sdk.keys())) if msvc_ver in msvc: msvc_pid = msvc[msvc_ver] msvc_ver
= ".".join(msvc_pid.split(".")[4:-2]) else: exit(f"Unknown MSVC version:
f{args.msvc_version}") if sdk_ver in sdk: sdk_pid = sdk[sdk_ver] else:
exit(f"Unknown Windows SDK version: f{args.sdk_version}") print(f"Downloading
MSVC v{msvc_ver} and Windows SDK v{sdk_ver}") ### agree to license tools =
first(manifest["channelItems"], lambda x: x["id"] ==
"Microsoft.VisualStudio.Product.BuildTools") resource =
first(tools["localizedResources"], lambda x: x["language"] == "en-us") license =
resource["license"] if not args.accept_license: accept = input(f"Do you accept
Visual Studio license at {license} [Y/N] ? ") if not accept or accept[0].lower()
!= "y": exit(0) OUTPUT.mkdir(exist_ok=True) total_download = 0 ### download MSVC
msvc_packages = [ # MSVC binaries
f"microsoft.vc.{msvc_ver}.tools.host{HOST}.target{TARGET}.base",
f"microsoft.vc.{msvc_ver}.tools.host{HOST}.target{TARGET}.res.base", # MSVC
headers f"microsoft.vc.{msvc_ver}.crt.headers.base", # MSVC libs
f"microsoft.vc.{msvc_ver}.crt.{TARGET}.desktop.base",
f"microsoft.vc.{msvc_ver}.crt.{TARGET}.store.base", # MSVC runtime source
f"microsoft.vc.{msvc_ver}.crt.source.base", # ASAN
f"microsoft.vc.{msvc_ver}.asan.headers.base",
f"microsoft.vc.{msvc_ver}.asan.{TARGET}.base", # MSVC redist
#f"microsoft.vc.{msvc_ver}.crt.redist.x64.base", ] for pkg in msvc_packages: p =
first(packages[pkg], lambda p: p.get("language") in (None, "en-US")) for payload
in p["payloads"]: with tempfile.TemporaryFile() as f: data =
download_progress(payload["url"], payload["sha256"], pkg, f) total_download +=
len(data) with zipfile.ZipFile(f) as z: for name in z.namelist(): if
name.startswith("Contents/"): out = OUTPUT / Path(name).relative_to("Contents")
out.parent.mkdir(parents=True, exist_ok=True) out.write_bytes(z.read(name)) ###
download Windows SDK sdk_packages = [ # Windows SDK tools (like rc.exe & mt.exe)
f"Windows SDK for Windows Store Apps Tools-x86_en-us.msi", # Windows SDK headers
f"Windows SDK for Windows Store Apps Headers-x86_en-us.msi", f"Windows SDK
Desktop Headers x86-x86_en-us.msi", # Windows SDK libs f"Windows SDK for Windows
Store Apps Libs-x86_en-us.msi", f"Windows SDK Desktop Libs
{TARGET}-x86_en-us.msi", # CRT headers & libs f"Universal CRT Headers Libraries
and Sources-x86_en-us.msi", # CRT redist #"Universal CRT
Redistributable-x86_en-us.msi", ] with tempfile.TemporaryDirectory() as d: dst =
Path(d) sdk_pkg = packages[sdk_pid][0] sdk_pkg =
packages[first(sdk_pkg["dependencies"], lambda x: True).lower()][0] msi = []
cabs = [] # download msi files for pkg in sdk_packages: payload =
first(sdk_pkg["payloads"], lambda p: p["fileName"] == f"Installers\\{pkg}")
msi.append(dst / pkg) with open(dst / pkg, "wb") as f: data =
download_progress(payload["url"], payload["sha256"], pkg, f) total_download +=
len(data) cabs += list(get_msi_cabs(data)) # download .cab files for pkg in
cabs: payload = first(sdk_pkg["payloads"], lambda p: p["fileName"] ==
f"Installers\\{pkg}") with open(dst / pkg, "wb") as f: data =
download_progress(payload["url"], payload["sha256"], pkg, f) total_download +=
len(data) print("Unpacking msi files...") # run msi installers for m in msi:
subprocess.check_call(["msiexec.exe", "/a", m, "/quiet", "/qn",
f"TARGETDIR={OUTPUT.resolve()}"]) ### versions msvcv = list((OUTPUT /
"VC/Tools/MSVC").glob("*"))[0].name sdkv = list((OUTPUT / "Windows
Kits/10/bin").glob("*"))[0].name # place debug CRT runtime files into MSVC
folder (not what real Visual Studio installer does... but is reasonable) dst =
OUTPUT / "VC/Tools/MSVC" / msvcv / f"bin/Host{HOST}/{TARGET}" with
tempfile.TemporaryDirectory() as d: d = Path(d) pkg =
"microsoft.visualcpp.runtimedebug.14" dbg = first(packages[pkg], lambda p:
p["chip"] == HOST) for payload in dbg["payloads"]: name = payload["fileName"]
with open(d / name, "wb") as f: data = download_progress(payload["url"],
payload["sha256"], f"{pkg}/{name}", f) total_download += len(data) msi = d /
first(dbg["payloads"], lambda p: p["fileName"].endswith(".msi"))["fileName"]
with tempfile.TemporaryDirectory() as d2: subprocess.check_call(["msiexec.exe",
"/a", str(msi), "/quiet", "/qn", f"TARGETDIR={d2}"]) for f in
first(Path(d2).glob("System*"), lambda x: True).iterdir(): f.replace(dst /
f.name) # download DIA SDK and put msdia140.dll file into MSVC folder with
tempfile.TemporaryDirectory() as d: d = Path(d) pkg =
"microsoft.visualc.140.dia.sdk.msi" dia = packages[pkg][0] for payload in
dia["payloads"]: name = payload["fileName"] with open(d / name, "wb") as f: data
= download_progress(payload["url"], payload["sha256"], f"{pkg}/{name}", f)
total_download += len(data) msi = d / first(dia["payloads"], lambda p:
p["fileName"].endswith(".msi"))["fileName"] with tempfile.TemporaryDirectory()
as d2: subprocess.check_call(["msiexec.exe", "/a", str(msi), "/quiet", "/qn",
f"TARGETDIR={d2}"]) if HOST == "x86": msdia = "msdia140.dll" elif HOST == "x64":
msdia = "amd64/msdia140.dll" else: exit("unknown") src = Path(d2) / "Program
Files" / "Microsoft Visual Studio 14.0" / "DIA SDK" / "bin" / msdia
src.replace(dst / "msdia140.dll") ### cleanup shutil.rmtree(OUTPUT / "Common7",
ignore_errors=True) for f in ["Auxiliary", f"lib/{TARGET}/store",
f"lib/{TARGET}/uwp"]: shutil.rmtree(OUTPUT / "VC/Tools/MSVC" / msvcv / f) for f
in OUTPUT.glob("*.msi"): f.unlink() for f in ["Catalogs", "DesignTime",
f"bin/{sdkv}/chpe", f"Lib/{sdkv}/ucrt_enclave"]: shutil.rmtree(OUTPUT / "Windows
Kits/10" / f, ignore_errors=True) for arch in ["x86", "x64", "arm", "arm64"]: if
arch != TARGET: shutil.rmtree(OUTPUT / "Windows Kits/10/Lib" / sdkv / "ucrt" /
arch) shutil.rmtree(OUTPUT / "Windows Kits/10/Lib" / sdkv / "um" / arch) if arch
!= HOST: shutil.rmtree(OUTPUT / "Windows Kits/10/bin" / sdkv / arch) #
executable that is collecting & sending telemetry every time cl/link runs
(OUTPUT / "VC/Tools/MSVC" / msvcv /
f"bin/Host{HOST}/{TARGET}/vctip.exe").unlink(missing_ok=True) ### setup.bat
SETUP = f"""@echo off set ROOT=%~dp0 set MSVC_VERSION={msvcv} set
MSVC_HOST=Host{HOST} set MSVC_ARCH={TARGET} set SDK_VERSION={sdkv} set
SDK_ARCH={TARGET} set MSVC_ROOT=%ROOT%VC\\Tools\\MSVC\\%MSVC_VERSION% set
SDK_INCLUDE=%ROOT%Windows Kits\\10\\Include\\%SDK_VERSION% set
SDK_LIBS=%ROOT%Windows Kits\\10\\Lib\\%SDK_VERSION% set
VCToolsInstallDir=%MSVC_ROOT%\\ set
PATH=%MSVC_ROOT%\\bin\\%MSVC_HOST%\\%MSVC_ARCH%;%ROOT%Windows
Kits\\10\\bin\\%SDK_VERSION%\\%SDK_ARCH%;%ROOT%Windows
Kits\\10\\bin\\%SDK_VERSION%\\%SDK_ARCH%\\ucrt;%PATH% set
INCLUDE=%MSVC_ROOT%\\include;%SDK_INCLUDE%\\ucrt;%SDK_INCLUDE%\\shared;%SDK_INCLUDE%\\um;%SDK_INCLUDE%\\winrt;%SDK_INCLUDE%\\cppwinrt
set
LIB=%MSVC_ROOT%\\lib\\%MSVC_ARCH%;%SDK_LIBS%\\ucrt\\%SDK_ARCH%;%SDK_LIBS%\\um\\%SDK_ARCH%
""" (OUTPUT / "setup.bat").write_text(SETUP) print(f"Total downloaded:
{total_download>>20} MB") print("Done!")

Load earlier comments...
Copy link

UN1Q32 COMMENTED MAY 27, 2023

building and installing from source solved the issue, strangely uninstalling the
source build and then installing from scoop makes the scoop version work

Sorry, something went wrong.

Copy link

UN1Q32 COMMENTED JUL 9, 2023

Traceback (most recent call last):
  File "C:\Users\Joey\Downloads\portable-msvc.py", line 83, in <module>
    vsmanifest = json.loads(download(payload))
                            ^^^^^^^^^^^^^^^^^
  File "C:\Users\Joey\Downloads\portable-msvc.py", line 27, in download
    return res.read()
           ^^^^^^^^^^
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1264.0_x64__qbz5n2kfra8p0\Lib\http\client.py", line 482, in read
    s = self._safe_read(self.length)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1264.0_x64__qbz5n2kfra8p0\Lib\http\client.py", line 633, in _safe_read
    raise IncompleteRead(data, amt-len(data))
http.client.IncompleteRead: IncompleteRead(12025853 bytes read, 564488 more expected)


no longer works

Sorry, something went wrong.

Copy link
Author
MMOZEIKO COMMENTED JUL 9, 2023

That sounds like downloading of file was interrupted. Try running it again. Or
get the url and try downloading in your browser to see what happens. Maybe
you're running extra firewalls or whatever 3rd party security software, try
disabling it.

Sorry, something went wrong.

Copy link

JONNY-VB COMMENTED JUL 27, 2023

Really useful script for getting msvc setup on a fresh windows install (or
docker container in my case). Two small inconveniences though:

 * At some point the script renames/moves files from a temp location into the
   msvc folder, however if the script is running on a mapped volume (and
   therefore essentially a different drive), you get errors OSError: [WinError
   17] The system cannot move the file to a different disk drive. I think this
   could be solved by using an os move instead of rename function somewhere?
 * The generated setup.bat works well in cmd, but is a pain to use in powershell
   - would it be possible to create an additional powershell version of this,
   i.e. using $env:PATH ... instead of set PATH ...

Thanks for providing this script though, I'd been banging my head for a couple
of days trying to get msvc working properly in my container before I found this.

Sorry, something went wrong.

Copy link

GARYMMI COMMENTED JUL 29, 2023

another issue, cmake cannot get CMAKE_VS_PLATFORM_NAME value

-- CMAKE_SYSTEM_NAME: Windows
-- CMAKE_SYSTEM_PROCESSOR: AMD64
-- CMAKE_VS_PLATFORM_NAME:
-- Use static onnxruntime libraries
-- CMAKE_SYSTEM_NAME: Windows
-- CMAKE_SYSTEM_PROCESSOR: AMD64
-- CMAKE_VS_PLATFORM_NAME:
CMake Error at cmake/onnxruntime-win-x64-static.cmake:11 (message):
This file is for Windows x64 only. Given:
Call Stack (most recent call first):
cmake/onnxruntime.cmake:59 (include)
cmake/onnxruntime.cmake:139 (download_onnxruntime)
CMakeLists.txt:142 (include)

Sorry, something went wrong.

Copy link

CRENDKING COMMENTED AUG 13, 2023

> Two small inconveniences though

Fixed them in my fork:
https://gist.nuovell.cn/CrendKing/154abfa33200ef1cda38ddd61f4d414b.

Sorry, something went wrong.

Copy link

ANDHIKAWB COMMENTED SEP 12, 2023 •
EDITED

This tool inspired me to make BuildToolsInspector because Flutter still doesn't
work correctly with this one. It's not finished yet and I kinda give up, but
it's pretty customizable in case any of you want to fork it. It tries to mimic
the original build tools installer (by searching nested dependencies) rather
than looking for specific packages.

EDIT3:

I figured out how vswhere works, but it may need some config files that will be
generated automatically if you install VS using the official installer.
Technically, we can generate it ourself but it's quite complicated. Steps:

 1. Get the Microsoft.VisualStudio.Setup.Configuration package (download the
    payload, check from manifest)
 2. Extract the MSI file (e.g. by using Uni Extract 2 or msiexec /a). Move the
    files/folder to build tools install folder (e.g
    C:\BuildTools\VisualStudio\Setup)
 3. Register the dll by using this command (use the x86 version even on x64 OS):
    "%SystemRoot%\SysWoW64\regsvr32.exe"
    "C:\BuildTools\VisualStudio\Setup\x86\Microsoft.VisualStudio.Setup.Configuration.Native.dll"
 4. Create a new reg value CachePath under
    HKLM\SOFTWARE\Microsoft\VisualStudio\Setup
 5. Set the cache path as C:\BuildTools\VisualStudio\Packages (for reference,
    the default path is %ProgramData%\Microsoft\VisualStudio\Packages)
 6. Create a new _Instances folder in the Packages folder
 7. Download example instance files from this link (VS build tools 2022). I
    can't attach zip here, not sure why
 8. Modify some path(s) in state.json to the right path (e.g. from C:\Program
    Files (x86)\Microsoft Visual Studio\2022\BuildTools to C:\BuildTools)
 9. Check if the portable installation is detected using vswhere

Sorry, something went wrong.

Copy link

FLORIANINGERL COMMENTED DEC 5, 2023

Unfortunately I get an error. This is my output:
D:\Software\MSVC>python portable-msvc.py
Downloading MSVC v14.38.17.8 and Windows SDK v22621
Do you accept Visual Studio license at
https://go.microsoft.com/fwlink/?LinkId=2179911 [Y/N] ? Y
microsoft.vc.14.38.17.8.tools.hostx64.targetx64.base ... 100%
microsoft.vc.14.38.17.8.tools.hostx64.targetx64.res.base ... 100%
microsoft.vc.14.38.17.8.crt.headers.base ... 100%
microsoft.vc.14.38.17.8.crt.x64.desktop.base ... 100%
microsoft.vc.14.38.17.8.crt.x64.store.base ... 100%
microsoft.vc.14.38.17.8.crt.source.base ... 100%
microsoft.vc.14.38.17.8.asan.headers.base ... 100%
microsoft.vc.14.38.17.8.asan.x64.base ... 100%
Windows SDK for Windows Store Apps Tools-x86_en-us.msi ... 100%
Windows SDK for Windows Store Apps Headers-x86_en-us.msi ... 100%
Windows SDK Desktop Headers x86-x86_en-us.msi ... 100%
Windows SDK for Windows Store Apps Libs-x86_en-us.msi ... 100%
Windows SDK Desktop Libs x64-x86_en-us.msi ... 100%
Universal CRT Headers Libraries and Sources-x86_en-us.msi ... 100%
15bc5316e373960d82abc253bceaa25d.cab ... 100%
2630bae9681db6a9f6722366f47d055c.cab ... 100%
26ea25236f12b23db661acf268a70cfa.cab ... 100%
2a30b5d1115d515c6ddd8cd6b5173835.cab ... 100%
4a4c678668584fc994ead5b99ccf7f03.cab ... 100%
61d57a7a82309cd161a854a6f4619e52.cab ... 100%
68de71e3e2fb9941ee5b7c77500c0508.cab ... 100%
69661e20556b3ca9456b946c2c881ddd.cab ... 100%
b82881a61b7477bd4eb5de2cd5037fe2.cab ... 100%
dcfb1aa345e349091a44e86ce1766566.cab ... 100%
e072b3b3d3164e26b63338dce51862a7.cab ... 100%
e3d1b35aecfccda1b4af6fe5988ac4be.cab ... 100%
766c0ffd568bbb31bf7fb6793383e24a.cab ... 100%
8125ee239710f33ea485965f76fae646.cab ... 100%
c0aa6d435b0851bf34365aadabd0c20f.cab ... 100%
c1c7e442409c0adbf81ae43aa0e4351f.cab ... 100%
07a57cdb41ba28cced14005f087267be.cab ... 100%
2e876dd22fa5e6785f137e3422dd50ec.cab ... 100%
4fe4c8b88812f5339018c0eef95acdb9.cab ... 100%
05047a45609f311645eebcac2739fc4c.cab ... 100%
0b2a4987421d95d0cb37640889aa9e9b.cab ... 100%
13d68b8a7b6678a368e2d13ff4027521.cab ... 100%
463ad1b0783ebda908fd6c16a4abfe93.cab ... 100%
5a22e5cde814b041749fb271547f4dd5.cab ... 100%
ba60f891debd633ae9c26e1372703e3c.cab ... 100%
e10768bb6e9d0ea730280336b697da66.cab ... 100%
f9b24c8280986c0683fbceca5326d806.cab ... 100%
58314d0646d7e1a25e97c902166c3155.cab ... 100%
16ab2ea2187acffa6435e334796c8c89.cab ... 100%
2868a02217691d527e42fe0520627bfa.cab ... 100%
6ee7bbee8435130a869cf971694fd9e2.cab ... 100%
78fa3c824c2c48bd4a49ab5969adaaf7.cab ... 100%
7afc7b670accd8e3cc94cfffd516f5cb.cab ... 100%
80dcdb79b8a5960a384abe5a217a7e3a.cab ... 100%
96076045170fe5db6d5dcf14b6f6688e.cab ... 100%
80dcdb79b8a5960a384abe5a217a7e3a.cab ... 100%
96076045170fe5db6d5dcf14b6f6688e.cab ... 100%
a1e2a83aa8a71c48c742eeaff6e71928.cab ... 100%
b2f03f34ff83ec013b9e45c7cd8e8a73.cab ... 100%
beb5360d2daaa3167dea7ad16c28f996.cab ... 100%
eca0aa33de85194cd50ed6e0aae0156f.cab ... 100%
f9ff50431335056fb4fbac05b8268204.cab ... 100%
Unpacking msi files...
microsoft.visualcpp.runtimedebug.14/vc_RuntimeDebug.msi ... 100%
microsoft.visualcpp.runtimedebug.14/cab1.cab ... 100%
Traceback (most recent call last):
File "D:\Software\MSVC\portable-msvc.py", line 248, in
f.replace(dst / f.name)
File "D:\Software\Python\Lib\pathlib.py", line 1188, in replace
os.replace(self, target)
OSError: [WinError 17] Das System kann die Datei nicht auf ein anderes Laufwerk
verschieben:
'C:\Users\imelf\AppData\Local\Temp\tmp6cetkl7r\System64\concrt140d.dll' ->
'msvc\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64\concrt140d.dll'

How can I fix this? Any help is appreciated.

Sorry, something went wrong.

Copy link

DELPHIER COMMENTED DEC 5, 2023 •
EDITED

@florianingerl
You cant set the output dir to D drive, only the C drive that is the same as the
temp dir.
This is because the os.replace function, which only works on the same drive.
Fixed in my fork:
https://gist.nuovell.cn/Delphier/386097ba36f6399e2e593c59d66d224b

Sorry, something went wrong.

Copy link

FLORIANINGERL COMMENTED DEC 5, 2023 VIA EMAIL

Hello Delphier, Thanks for your reply. Should I thus try to rerun the
python-script of your fork? Because I don't see the place where I can set the
output dir to D drive in the python script and do it myself. All the best,
Florian
…
On Tue, Dec 5, 2023 at 11:29 AM Delphier ***@***.***> wrote: ***@***.****
commented on this gist. ------------------------------ @florianingerl
<https://hub.nuovell.cn/florianingerl> You cant set the output dir to D drive,
only the C drive as the temp dir. This is because the os.replace function, which
only works on the same drive. Fixed in my fork:
https://gist.nuovell.cn/Delphier/386097ba36f6399e2e593c59d66d224b — Reply to
this email directly, view it on GitHub
<https://gist.nuovell.cn/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977#gistcomment-4782714>
or unsubscribe
<https://hub.nuovell.cn/notifications/unsubscribe-auth/AE6YEWRFRTYMT34MBU6L6HTYH3ZRVBFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFQKSXMYLMOVS2I5DSOVS2I3TBNVS3W5DIOJSWCZC7OBQXE5DJMNUXAYLOORPWCY3UNF3GS5DZVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTCNRQHA2DANBSU52HE2LHM5SXFJTDOJSWC5DF>
. You are receiving this email because you were mentioned. Triage notifications
on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>
.


Sorry, something went wrong.

Copy link

DELPHIER COMMENTED DEC 5, 2023

Copy portable-msvc.py to a folder on the C drive, and then run the script.
or download my fork, that support any folder.

Sorry, something went wrong.

Copy link

BLACKCATDEVEL0PER COMMENTED DEC 5, 2023

Big thanks!

Sorry, something went wrong.

Copy link

FLORIANINGERL COMMENTED DEC 5, 2023 VIA EMAIL

Hello Delphier, Thanks a lot. Now I get another error later:
D:\Software\MSVC>python portable-msvc.py Downloading MSVC v14.38.17.8 and
Windows SDK v22621 Do you accept Visual Studio license at
https://go.microsoft.com/fwlink/?LinkId=2179911 [Y/N] ? Y
microsoft.vc.14.38.17.8.tools.hostx64.targetx64.base ... 100%
microsoft.vc.14.38.17.8.tools.hostx64.targetx64.res.base ... 100%
microsoft.vc.14.38.17.8.crt.headers.base ... 100%
microsoft.vc.14.38.17.8.crt.x64.desktop.base ... 100%
microsoft.vc.14.38.17.8.crt.x64.store.base ... 100%
microsoft.vc.14.38.17.8.crt.source.base ... 100%
microsoft.vc.14.38.17.8.asan.headers.base ... 100%
microsoft.vc.14.38.17.8.asan.x64.base ... 100% Windows SDK for Windows Store
Apps Tools-x86_en-us.msi ... 100% Windows SDK for Windows Store Apps
Headers-x86_en-us.msi ... 100% Windows SDK Desktop Headers x86-x86_en-us.msi ...
100% Windows SDK for Windows Store Apps Libs-x86_en-us.msi ... 100% Windows SDK
Desktop Libs x64-x86_en-us.msi ... 100% Universal CRT Headers Libraries and
Sources-x86_en-us.msi ... 100% 15bc5316e373960d82abc253bceaa25d.cab ... 100%
2630bae9681db6a9f6722366f47d055c.cab ... 100%
26ea25236f12b23db661acf268a70cfa.cab ... 100%
2a30b5d1115d515c6ddd8cd6b5173835.cab ... 100%
4a4c678668584fc994ead5b99ccf7f03.cab ... 100%
61d57a7a82309cd161a854a6f4619e52.cab ... 100%
68de71e3e2fb9941ee5b7c77500c0508.cab ... 100%
69661e20556b3ca9456b946c2c881ddd.cab ... 100%
b82881a61b7477bd4eb5de2cd5037fe2.cab ... 100%
dcfb1aa345e349091a44e86ce1766566.cab ... 100%
e072b3b3d3164e26b63338dce51862a7.cab ... 100%
e3d1b35aecfccda1b4af6fe5988ac4be.cab ... 100%
766c0ffd568bbb31bf7fb6793383e24a.cab ... 100%
8125ee239710f33ea485965f76fae646.cab ... 100%
c0aa6d435b0851bf34365aadabd0c20f.cab ... 100%
c1c7e442409c0adbf81ae43aa0e4351f.cab ... 100%
07a57cdb41ba28cced14005f087267be.cab ... 100%
2e876dd22fa5e6785f137e3422dd50ec.cab ... 100%
4fe4c8b88812f5339018c0eef95acdb9.cab ... 100%
05047a45609f311645eebcac2739fc4c.cab ... 100%
0b2a4987421d95d0cb37640889aa9e9b.cab ... 100%
13d68b8a7b6678a368e2d13ff4027521.cab ... 100%
463ad1b0783ebda908fd6c16a4abfe93.cab ... 100%
5a22e5cde814b041749fb271547f4dd5.cab ... 100%
ba60f891debd633ae9c26e1372703e3c.cab ... 100%
e10768bb6e9d0ea730280336b697da66.cab ... 100%
f9b24c8280986c0683fbceca5326d806.cab ... 100%
58314d0646d7e1a25e97c902166c3155.cab ... 100%
16ab2ea2187acffa6435e334796c8c89.cab ... 100%
2868a02217691d527e42fe0520627bfa.cab ... 100%
6ee7bbee8435130a869cf971694fd9e2.cab ... 100%
78fa3c824c2c48bd4a49ab5969adaaf7.cab ... 100%
7afc7b670accd8e3cc94cfffd516f5cb.cab ... 100%
80dcdb79b8a5960a384abe5a217a7e3a.cab ... 100%
96076045170fe5db6d5dcf14b6f6688e.cab ... 100%
a1e2a83aa8a71c48c742eeaff6e71928.cab ... 100%
b2f03f34ff83ec013b9e45c7cd8e8a73.cab ... 100%
beb5360d2daaa3167dea7ad16c28f996.cab ... 100%
eca0aa33de85194cd50ed6e0aae0156f.cab ... 100%
f9ff50431335056fb4fbac05b8268204.cab ... 100% Unpacking msi files...
microsoft.visualcpp.runtimedebug.14/vc_RuntimeDebug.msi ... 100%
microsoft.visualcpp.runtimedebug.14/cab1.cab ... 100% Traceback (most recent
call last): File "D:\Software\MSVC\portable-msvc.py", line 246, in <module>
subprocess.check_call(["msiexec.exe", "/a", str(msi), "/quiet", "/qn",
f"TARGETDIR={d2}"]) File "D:\Software\Python\Lib\subprocess.py", line 413, in
check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError:
Command '['msiexec.exe', '/a',
'C:\\Users\\imelf\\AppData\\Local\\Temp\\tmpmmmsqd3b\\vc_RuntimeDebug.msi',
'/quiet', '/qn', 'TARGETDIR=MSVC\\tmp9rkm4qgk']' returned non-zero exit status
1603. Is there also a reason for this that can be solved? All the best, Florian
…
On Tue, Dec 5, 2023 at 2:49 PM Asadbek Sayfiyev ***@***.***> wrote: ***@***.****
commented on this gist. ------------------------------ Big thanks! — Reply to
this email directly, view it on GitHub
<https://gist.nuovell.cn/mmozeiko/7f3162ec2988e81e56d5c4e22cde9977#gistcomment-4782895>
or unsubscribe
<https://hub.nuovell.cn/notifications/unsubscribe-auth/AE6YEWVSZA4VVYSWODQBTZDYH4Q5HBFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFQKSXMYLMOVS2I5DSOVS2I3TBNVS3W5DIOJSWCZC7OBQXE5DJMNUXAYLOORPWCY3UNF3GS5DZVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTCNRQHA2DANBSU52HE2LHM5SXFJTDOJSWC5DF>
. You are receiving this email because you commented on the thread. Triage
notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>
.


Sorry, something went wrong.

Copy link

ANDHIKAWB COMMENTED DEC 6, 2023 •
EDITED

@florianingerl I think the target dir must be full path, not relative path. Try
replacing TARGETDIR={d2} with TARGETDIR={Path(d2).resolve()}.

Or just use the original code, install it in C, you can move it to D drive
later.

Sorry, something went wrong.

Copy link

ABIDANBRITO COMMENTED DEC 9, 2023

Works great with cl / link! But clang-cl is unrecognized, even after running the
batch script. Any ideas?

Sorry, something went wrong.

Copy link
Author
MMOZEIKO COMMENTED DEC 9, 2023

If it says clang-cl.exe is unrecognized then you have not set PATH to where it
is installed. Either put folder where clang-cl is in the PATH env variable, or
run by specifying absolute path to clang-cl.exe.

Sorry, something went wrong.

Copy link

ABIDANBRITO COMMENTED DEC 9, 2023

Where is clang-cl.exe supposed to be installed? After running the setup.bat,
cl.exe and link.exe are recognized, so I'm not sure env variables is the issue.

Sorry, something went wrong.

Copy link
Author
MMOZEIKO COMMENTED DEC 9, 2023

You can install it anywhere. When you run llvm/clang installer then by default
it will install in C:\Program Files\LLVM. But during installation you can put
any location there - it's up to you where you want it.

Sorry, something went wrong.

Copy link

ABIDANBRITO COMMENTED DEC 9, 2023

Oh, my bad. I thougth that clang came preinstalled with the packages. So this is
just the integration with msvc?

Sorry, something went wrong.

Copy link
Author
MMOZEIKO COMMENTED DEC 9, 2023

Right, this downloads MSVC compiler & linker and Windows SDK headers & libs. Not
clang. You can install clang from their github releases. It will be able to use
Windows headers & libs from this script.

Sorry, something went wrong.

Copy link

ABIDANBRITO COMMENTED DEC 9, 2023

Perfect, thank you!

Sorry, something went wrong.

Copy link

DARKERBIT COMMENTED FEB 19, 2024

Leaving this here for future masochists to find on Google:

Want to use .NET NativeAOT with this script's Visual Studio environment? Pass in
/p:IlcUseEnvironmentalTools=true into dotnet publish.

Hope this helps! I sure wish someone had documented this before... but oh well,
atleast others won't suffer as much as I did

Sorry, something went wrong.

Copy link

GREENOZON COMMENTED FEB 21, 2024

I hit this error, what cert does it complain about?

    return self.do_open(http.client.HTTPSConnection, req,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\urllib\request.py", line 1347, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1000)>


Sorry, something went wrong.

Copy link
Author
MMOZEIKO COMMENTED FEB 22, 2024

Script is connecting to Microsoft server to download MSVC. Expired certificate
may be result of incorrect date on your computer - check that you have correct
date set. Another reason could be bad 3rd party proxy / firewall / network
monitoring or security software which is intercepting all https requests.

Sorry, something went wrong.

Copy link

GREENOZON COMMENTED MAR 1, 2024

@mmozeiko great advice!
so I opened up the certmgr.msc util and went one by one over all the cert hives
and just deleted those that are older then 2024!
it did the trick and I was able to successfully run the script!

proofs -

c:\Prg\>python portable-msvc.py --show-versions
MSVC versions: 14.29 14.30 14.31 14.32 14.33 14.34 14.35 14.36 14.37 14.38 14.39
Windows SDK versions: 18362 19041 20348 22000 22621


btw, what is the goal of adding this into latest script?

  # executable that is collecting & sending telemetry every time cl/link runs
  (OUTPUT / "VC/Tools/MSVC" / msvcv / f"bin/Host{arch}/{arch}/vctip.exe").unlink(missing_ok=True)



Sorry, something went wrong.

Copy link
Author
MMOZEIKO COMMENTED MAR 1, 2024

It deletes vctip.exe ("VC++ Technology Improvement Program") which is runs every
time you run cl/link and sends telemetry to Microsoft servers. Compiler & linker
still works fine without this file. I don't want compiler making network
requests every time I compile something.

You can also opt out of MSVC telemetry by editing registry:
https://learn.microsoft.com/en-us/visualstudio/ide/visual-studio-experience-improvement-program#registry-settings
But it requires changing HKLM keys, so admin rights required, which I don't want
for this python script.

Sorry, something went wrong.

Copy link

ROY4801 COMMENTED MAR 7, 2024

To resolve the SSL error ssl.SSLCertVerificationError: [SSL:
CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired
(_ssl.c:1000)
You can add these two lines at the beginning of the portable-msvc.py.

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

Sorry, something went wrong.

Copy link
Author
MMOZEIKO COMMENTED MAR 7, 2024

That is a bad way to solve this problem. Do not ever do that. It disables TLS
verification, so you won't know if things you connect & download are valid and
not intercepted/mangled with. Fix your computer time & apply OS updates instead.

Sorry, something went wrong.

Copy link

MAGICALDRIZZLE COMMENTED MAR 12, 2024 •
EDITED

hi! it seems it's not possible to download hostx64-86 cross toolchain? the bin
directory barely have any files afterward.
I tried another tool and the result was the sazme.
it seems this is an issue on microsoft's side?

also, running the script with python 3.12 results in NameError: name 'exit' is
not defined
the solution seems to be replacing exit(0) with sys.exit(0).

feature request: is it possible to add the ability to specify the folder where
the toolchain is located? at the moment it seems to be hardcoded to msvc.

Sorry, something went wrong.

Copy link
Author
MMOZEIKO COMMENTED MAR 12, 2024 •
EDITED

There's no issue on MS side. I just never really tested other hosts/targets than
x64. I've fixed the script so it now works for x64 host & x86 target. arm/arm64
may still be not properly done, have not tested it.

Not sure why you see error with exit - it is perfectly valid to call, even in
Python 3.12: https://docs.python.org/3/library/constants.html#exit
Only issue I could see is that your Python installation is done in a strange way
that does not have default site module.

You can just rename msvc folder after script runs. It's not like this code keeps
track of this folder and keeps it up to date or tracks what is installed. This
tool is not supposed to be fancy installer. Just a quick "run once and forget"
kind of tool.

Sorry, something went wrong.


Sign up for free to join this conversation on GitHub. Already have an account?
Sign in to comment


FOOTER

© 2024 GitHub, Inc.


FOOTER NAVIGATION

 * Terms
 * Privacy
 * Security
 * Status
 * Docs
 * Contact
 * Manage cookies
 * Do not share my personal information

You can’t perform that action at this time.