From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: "Daniel R. Grayson" Newsgroups: gmane.emacs.bugs Subject: bug#55744: infinite loop Date: Tue, 31 May 2022 12:49:35 -0700 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000080a3b105e054136f" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="13571"; mail-complaints-to="usenet@ciao.gmane.io" To: 55744@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue May 31 21:51:42 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nw7u2-0003N0-Ax for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 31 May 2022 21:51:42 +0200 Original-Received: from localhost ([::1]:59590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nw7u0-0007Xm-Ng for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 31 May 2022 15:51:40 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:32988) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nw7tO-0007Ub-HX for bug-gnu-emacs@gnu.org; Tue, 31 May 2022 15:51:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:55070) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nw7tN-0003Xm-NA for bug-gnu-emacs@gnu.org; Tue, 31 May 2022 15:51:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1nw7tN-0000FJ-Kq for bug-gnu-emacs@gnu.org; Tue, 31 May 2022 15:51:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: "Daniel R. Grayson" Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 31 May 2022 19:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 55744 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.1654026606861 (code B ref -1); Tue, 31 May 2022 19:51:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 31 May 2022 19:50:06 +0000 Original-Received: from localhost ([127.0.0.1]:48965 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nw7sT-0000Di-Cv for submit@debbugs.gnu.org; Tue, 31 May 2022 15:50:06 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:38824) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nw7sQ-0000DN-FX for submit@debbugs.gnu.org; Tue, 31 May 2022 15:50:04 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:32782) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nw7sO-0007No-4b for bug-gnu-emacs@gnu.org; Tue, 31 May 2022 15:50:01 -0400 Original-Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]:43675) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nw7sK-00037Y-2Y for bug-gnu-emacs@gnu.org; Tue, 31 May 2022 15:49:58 -0400 Original-Received: by mail-lf1-x134.google.com with SMTP id be31so5241032lfb.10 for ; Tue, 31 May 2022 12:49:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=llYKlcSAbc3A0Rpi2C/hGsh1RRbjhZ3RXO32cqeZ5m0=; b=UHIBYml2SQ+NlcRpsHMX23i24PfzJ3BJXgdmXNpygm0RbCgWb/KG9UZmMB+xABXLXp 4y6ErxTb7FfRhi04+qMKjtnBt3iWLIhosjXSdulk57ZSOSS2SsZ6k887duqbLGeiBkSq hH/m385CTfuzTzY5GDVyO5w8cS9ZhLP5Kc3yYpw0zm2bUaNRX//3vNxbDnHKbYR26Gxr r77yxckX261EQDX6Qn+NTI34l5u6j+oIP2RYDMPMc1UNo4hDgs+qxkhKSwzy26KIMryk ZDRVtv2zZvPmU9MbMOA5mx5cR4NvFopnU8lD42g7D3a+15Mi74JmMkGAZwjbubX7Ypq5 rt1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=llYKlcSAbc3A0Rpi2C/hGsh1RRbjhZ3RXO32cqeZ5m0=; b=0bX0CHnKptvKIvBEDe0XGeSEGIh7R3Fk3hiFComwsMSJmeL24oJerCkox1O9TYXGX/ DVEpEd3iH6ylx6dBR4hEJRU+Fxo+jmsGu9PLZWgXBQXN7V8UH4o4RueO3eeIrawv1rHj hvZxKwXZUd7DRJrijtyU3ANVVWuOtxCZuXeIlIP1zaDusKzqSkHnlkJ+r95YElonaM90 aRosnPBqof8YcAUvlMjpo2ctFJmpmZPdX71RGD4Gj2u8EDw9iCm8vEV7VMj4dIkBxylp P9mxvNfqY5Wn2G+eEfm5elga6xNndanZ5XeiOD15KxlstHJkBEhmtAnC6hPTsTpAA93/ zybQ== X-Gm-Message-State: AOAM530LKw/5fsA8FbUUZKsx7zvGVhgeM3RZSM/UDUeDFigwJrDCKOiS 24oo2UFQOttu5lyi3IZM/jN9ZO8bkz1lWdbc8f9XRpeFQvc= X-Google-Smtp-Source: ABdhPJwimqkoZvtk9imn3fM5Zis5Bh9k6ZMVZYAHE5RZ+AfnqSDKmkXBMMZGla8QB1h6fzP60z/Fyz4De+SBKrkg250= X-Received: by 2002:a05:6512:6c9:b0:478:ff5f:ee55 with SMTP id u9-20020a05651206c900b00478ff5fee55mr736960lff.204.1654026592615; Tue, 31 May 2022 12:49:52 -0700 (PDT) Received-SPF: pass client-ip=2a00:1450:4864:20::134; envelope-from=danielrichardgrayson@gmail.com; helo=mail-lf1-x134.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:233459 Archived-At: --00000000000080a3b105e054136f Content-Type: multipart/alternative; boundary="00000000000080a3af05e054136d" --00000000000080a3af05e054136d Content-Type: text/plain; charset="UTF-8" The attached file contains the string "end--" in two places. When searching for that string with M-x isearch-forward (C-s) in that file, just after opening the file, starting from the top of the file, it often happens, that after positioning the cursor at the first "end" in the file, it displays "end-" on the mode line and then goes into an infinite loop, not responding to further input or making any further progress on the search. In GNU Emacs 28.1 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60 Version 10.14.6 (Build 18G95)) of 2022-04-22 built on builder10-14.lan Windowing system distributor 'Apple', version 10.3.2113 System Description: macOS 12.3 Configured using: 'configure --with-ns '--enable-locallisppath=/Library/Application Support/Emacs/${version}/site-lisp:/Library/Application Support/Emacs/site-lisp' --with-modules' Configured features: ACL GMP GNUTLS JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER THREADS TOOLKIT_SCROLL_BARS ZLIB Important settings: value of $EMACSLOADPATH: /Applications/LilyPond.app/Contents/Resources/share/emacs/site-lisp:/Users/dan/local/share/emacs/site-lisp:/usr/local/share/emacs/site-lisp: value of $LC_ALL: en_US.UTF-8 value of $LANG: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: Info Minor modes in effect: global-edit-server-edit-mode: t icomplete-mode: t global-auto-revert-mode: t auto-image-file-mode: t tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t temp-buffer-resize-mode: t buffer-read-only: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t Load-path shadows: /Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2-symbols hides /Applications/Macaulay2-1.20/share/emacs/site-lisp/macaulay2/M2-symbols /Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2 hides /Applications/Macaulay2-1.20/share/emacs/site-lisp/macaulay2/M2 /Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2-init hides /Applications/Macaulay2-1.20/share/emacs/site-lisp/macaulay2/M2-init /Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2-mode hides /Applications/Macaulay2-1.20/share/emacs/site-lisp/macaulay2/M2-mode /Users/dan/emacs/gedcom hides /Users/dan/home/emacs/gedcom /Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2-symbols hides /usr/local/share/emacs/site-lisp/macaulay2/M2-symbols /Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2 hides /usr/local/share/emacs/site-lisp/macaulay2/M2 /Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2-init hides /usr/local/share/emacs/site-lisp/macaulay2/M2-init /Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2-mode hides /usr/local/share/emacs/site-lisp/macaulay2/M2-mode /Users/dan/emacs/rmail hides /Applications/Emacs.app/Contents/Resources/lisp/mail/rmail /Users/dan/home/emacs/longlines hides /Applications/Emacs.app/Contents/Resources/lisp/obsolete/longlines Features: (shadow sort mail-extr warnings emacsbug message rmc puny rfc822 mml mml-sec epa epg rfc6068 epg-config gnus-util rmail mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils thai-util thai-word lao-util enriched facemenu view vc-git diff-mode vc-dispatcher M2 M2-symbols rx jka-compr dired-aux dired dired-loaddefs misearch multi-isearch eieio-opt cl-extra speedbar ezimage dframe find-func shortdoc thingatpt help-fns radix-tree tabify imenu man agda2-mode pcase derived agda2-queue agda2-abbrevs skeleton agda2-highlight agda2 annotation eri time-date pp agda-input quail help-mode edit-server easy-mmode edmacro kmacro server generic disp-table cc-styles cc-align cc-engine cc-vars cc-defs icomplete grep compile text-property-search comint ansi-color ring autorevert filenotify image-file image-converter cus-load info proof-site proof-autoloads package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads kqueue cocoa ns multi-tty make-network-process emacs) Memory information: ((conses 16 299140 12614) (symbols 48 14179 3) (strings 32 50438 2510) (string-bytes 1 1513842) (vectors 16 26190) (vector-slots 8 305278 27939) (floats 8 93 32) (intervals 56 7639 129) (buffers 992 27)) --00000000000080a3af05e054136d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
The attached file contains the string "end--&quo= t; in two places.=C2=A0 When searching for that string with M-x=C2=A0isearc= h-forward (C-s) in that file,
just after opening=C2=A0the file, s= tarting from the top of the file, it often happens, that after positioning = the cursor at the first "end" in the file,
it displays = "end-" on the mode line and then goes into an infinite loop, not = responding to further input or making any further=C2=A0
progress = on the search.




In GNU= Emacs 28.1 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60 Version = 10.14.6 (Build 18G95))
=C2=A0of 2022-04-22 built on builder10-14.lan
= Windowing system distributor 'Apple', version 10.3.2113
System D= escription: =C2=A0macOS 12.3

Configured using:
=C2=A0'configu= re --with-ns '--enable-locallisppath=3D/Library/Application
=C2=A0Su= pport/Emacs/${version}/site-lisp:/Library/Application
=C2=A0Support/Emac= s/site-lisp' --with-modules'

Configured features:
ACL GMP= GNUTLS JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER THREADS
TOOLKIT_SC= ROLL_BARS ZLIB

Important settings:
=C2=A0 value of $EMACSLOADPATH= : /Applications/LilyPond.app/Contents/Resources/share/emacs/site-lisp:/User= s/dan/local/share/emacs/site-lisp:/usr/local/share/emacs/site-lisp:
=C2= =A0 value of $LC_ALL: en_US.UTF-8
=C2=A0 value of $LANG: en_US.UTF-8
= =C2=A0 locale-coding-system: utf-8-unix

Major mode: Info

Mino= r modes in effect:
=C2=A0 global-edit-server-edit-mode: t
=C2=A0 icom= plete-mode: t
=C2=A0 global-auto-revert-mode: t
=C2=A0 auto-image-fil= e-mode: t
=C2=A0 tooltip-mode: t
=C2=A0 global-eldoc-mode: t
=C2= =A0 show-paren-mode: t
=C2=A0 electric-indent-mode: t
=C2=A0 mouse-wh= eel-mode: t
=C2=A0 file-name-shadow-mode: t
=C2=A0 global-font-lock-m= ode: t
=C2=A0 font-lock-mode: t
=C2=A0 auto-composition-mode: t
= =C2=A0 auto-encryption-mode: t
=C2=A0 auto-compression-mode: t
=C2=A0= temp-buffer-resize-mode: t
=C2=A0 buffer-read-only: t
=C2=A0 line-nu= mber-mode: t
=C2=A0 indent-tabs-mode: t
=C2=A0 transient-mark-mode: t=

Load-path shadows:
/Users/dan/src/M2/M2.git/M2/Macaulay2/editors= /emacs/M2-symbols hides /Applications/Macaulay2-1.20/share/emacs/site-lisp/= macaulay2/M2-symbols
/Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs= /M2 hides /Applications/Macaulay2-1.20/share/emacs/site-lisp/macaulay2/M2/Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2-init hides /Applic= ations/Macaulay2-1.20/share/emacs/site-lisp/macaulay2/M2-init
/Users/dan= /src/M2/M2.git/M2/Macaulay2/editors/emacs/M2-mode hides /Applications/Macau= lay2-1.20/share/emacs/site-lisp/macaulay2/M2-mode
/Users/dan/emacs/gedco= m hides /Users/dan/home/emacs/gedcom
/Users/dan/src/M2/M2.git/M2/Macaula= y2/editors/emacs/M2-symbols hides /usr/local/share/emacs/site-lisp/macaulay= 2/M2-symbols
/Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2 hide= s /usr/local/share/emacs/site-lisp/macaulay2/M2
/Users/dan/src/M2/M2.git= /M2/Macaulay2/editors/emacs/M2-init hides /usr/local/share/emacs/site-lisp/= macaulay2/M2-init
/Users/dan/src/M2/M2.git/M2/Macaulay2/editors/emacs/M2= -mode hides /usr/local/share/emacs/site-lisp/macaulay2/M2-mode
/Users/da= n/emacs/rmail hides /Applications/Emacs.app/Contents/Resources/lisp/mail/rm= ail
/Users/dan/home/emacs/longlines hides /Applications/Emacs.app/Conten= ts/Resources/lisp/obsolete/longlines

Features:
(shadow sort mail-= extr warnings emacsbug message rmc puny rfc822 mml
mml-sec epa epg rfc60= 68 epg-config gnus-util rmail mm-decode mm-bodies
mm-encode mail-parse r= fc2231 mailabbrev gmm-utils mailheader sendmail
rfc2047 rfc2045 ietf-dru= ms mm-util mail-prsvr mail-utils thai-util
thai-word lao-util enriched f= acemenu view vc-git diff-mode vc-dispatcher
M2 M2-symbols rx jka-compr d= ired-aux dired dired-loaddefs misearch
multi-isearch eieio-opt cl-extra = speedbar ezimage dframe find-func
shortdoc thingatpt help-fns radix-tree= tabify imenu man agda2-mode pcase
derived agda2-queue agda2-abbrevs ske= leton agda2-highlight agda2
annotation eri time-date pp agda-input quail= help-mode edit-server
easy-mmode edmacro kmacro server generic disp-tab= le cc-styles cc-align
cc-engine cc-vars cc-defs icomplete grep compile t= ext-property-search
comint ansi-color ring autorevert filenotify image-f= ile image-converter
cus-load info proof-site proof-autoloads package bro= wse-url url
url-proxy url-privacy url-expand url-methods url-history url= -cookie
url-domsuf url-util mailcap url-handlers url-parse auth-source c= l-seq
eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x= map
url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl= -lib
iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hook= s
lisp-float-type elisp-mode mwheel term/ns-win ns-win ucs-normalize
= mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe
t= abulated-list replace newcomment text-mode lisp-mode prog-mode register
= page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-b= ar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minib= uffer cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan t= hai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian = slovak czech european ethiopic indian cyrillic
chinese composite emoji-z= wj charscript charprop case-table epa-hook
jka-cmpr-hook help simple abb= rev obarray cl-preloaded nadvice button
loaddefs faces cus-face macroexp= files window text-properties overlay
sha1 md5 base64 format env code-pa= ges mule custom widget
hashtable-print-readable backquote threads kqueue= cocoa ns multi-tty
make-network-process emacs)

Memory informatio= n:
((conses 16 299140 12614)
=C2=A0(symbols 48 14179 3)
=C2=A0(str= ings 32 50438 2510)
=C2=A0(string-bytes 1 1513842)
=C2=A0(vectors 16 = 26190)
=C2=A0(vector-slots 8 305278 27939)
=C2=A0(floats 8 93 32)
= =C2=A0(intervals 56 7639 129)
=C2=A0(buffers 992 27))
--00000000000080a3af05e054136d-- --00000000000080a3b105e054136f Content-Type: application/octet-stream; name="Topcom.m2" Content-Disposition: attachment; filename="Topcom.m2" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l3ukchtr0 LS0gVE9ETzoKLS0gICAxLiBob3cgdG8gY2hlY2sgaWYgYSB0cmlhbmd1bGF0aW9uIGlzIGNvcnJl Y3Q/Ci0tICAgMi4gZ2VuZXJhdGUgdGhlIChvcmllbnRlZCkgY2lyY3VpdHMgb2YgYSBwb2ludCBz ZXQKLS0gICAzLiBQZXJoYXBzOiBhZGQgaW4gYSB0eXBlICJDaGlyb3RvcGUiIHRvIGZhY2lsaXRh dGUgdGhlIGNvbXB1dGF0aW9uIG9mIGNpcmN1aXRzCi0tICAgNC4gZmluZCB0aGUgbG93ZXIgaHVs bCBvZiBhIHBvbHl0b3BlIChtYXliZSBpbiBQb2x5aGVkcmE/IFdoZXJlPykKLS0gICA1LiBjaGVj ayB0aGF0IGdvaW5nIGZyb20gYSByZWd1bGFyIGZpbmUgdHJpYW5ndWxhdGlvbiB0byBhIHJlZ3Vs YXIgc3RhciBmaW5lIHRyaWFuZ3VsYXRpb24gCi0tICAgICAgIChpbiB0aGUgcmVmbGV4aXZlIGNh c2UpIHdvcmtzLgotLSAgIDYuIGdlbmVyYXRlIChwYXJ0cyBvZikgdGhlIGZsaXAgZ3JhcGgsIGF0 IGxlYXN0IGZvciByZWd1bGFyIHRyaWFuZ3VsYXRpb25zLgotLSAgIDcuIHRvcGNvbSB1c2VzIHN5 bW1ldHJ5LCBwbGFjZSB0aGF0IGludG8gdGhlIGludGVyZmFjZSBoZXJlIHRvbwotLSBwb3NzaWJs ZSBidWdzOgotLSAgIHdoeSBhcmUgdGhlIHJlZ3VsYXIgdHJpYW5ndWxhdGlvbiB3ZWlnaHRzIHNv bWV0aW1lcyBjb21pbmcgb3V0IG5lZ2F0aXZlPwotLSAgIG5lZWQgdG8gYmUgYWJsZSB0byBjaGVj ayB0aGF0IHdlaWdodHMgYXJlIGNvcnJlY3QuCm5ld1BhY2thZ2UoCiAgICAgICAgIlRvcGNvbSIs CiAgICAgICAgVmVyc2lvbiA9PiAiMC41IiwgCiAgICAgICAgRGF0ZSA9PiAiNiBNYXkgMjAxOCIs CiAgICAgICAgQXV0aG9ycyA9PiB7ewogICAgICAgICAgICAgICAgTmFtZSA9PiAiTWlrZSBTdGls bG1hbiIsIAogICAgICAgICAgICAgICAgRW1haWwgPT4gIm1pa2VAbWF0aC5jb3JuZWxsLmVkdSIs IAogICAgICAgICAgICAgICAgSG9tZVBhZ2U9PiJodHRwOi8vd3d3Lm1hdGguY29ybmVsbC5lZHUv fm1pa2UiCiAgICAgICAgICAgICAgICB9fSwKICAgICAgICBIZWFkbGluZSA9PiAiaW50ZXJmYWNl IHRvIGEgc21hbGwgcGFydCBvZiB0b3Bjb20iLAoJS2V5d29yZHMgPT4geyJJbnRlcmZhY2VzIn0s CiAgICAgICAgQ29uZmlndXJhdGlvbiA9PiB7CiAgICAgICAgICAgICJwYXRoIiA9PiAiIgogICAg ICAgICAgICB9LAogICAgICAgIFBhY2thZ2VJbXBvcnRzID0+IHsiRm91cmllck1vdHpraW4ifQog ICAgICAgICkKCmV4cG9ydCB7CiAgICAiYWxsVHJpYW5ndWxhdGlvbnMiLAogICAgImNoaXJvdG9w ZSIsCiAgICAiZmluZVN0YXJUcmlhbmd1bGF0aW9uIiwKICAgICJmbGlwcyIsCiAgICAiaXNSZWd1 bGFyVHJpYW5ndWxhdGlvbiIsCiAgICAibmFpdmVDaGlyb3RvcGUiLAogICAgIm5haXZlSXNUcmlh bmd1bGF0aW9uIiwKICAgICJudW1GbGlwcyIsCiAgICAibnVtVHJpYW5ndWxhdGlvbnMiLAogICAg Im9yaWVudGVkQ2lyY3VpdHMiLAogICAgIm9yaWVudGVkQ29jaXJjdWl0cyIsCiAgICAicmVndWxh ckZpbmVUcmlhbmd1bGF0aW9uIiwKICAgICJyZWd1bGFyRmluZVN0YXJUcmlhbmd1bGF0aW9uIiwK ICAgICJyZWd1bGFyVHJpYW5ndWxhdGlvbldlaWdodHMiLAogICAgIkNvbm5lY3RlZFRvUmVndWxh ciIsCiAgICAiSG9tb2dlbml6ZSIsCiAgICAiUmVndWxhck9ubHkiLAogICAgIkZpbmUiLAogICAg InRvcGNvbUlzVHJpYW5ndWxhdGlvbiIKICAgIH0KCi0tIGZvciBiYWNrd2FyZCBjb21wYXRpYmls aXR5CmlmIG5vdCBwcm9ncmFtUGF0aHMjPyJ0b3Bjb20iIGFuZCBUb3Bjb20jT3B0aW9ucyNDb25m aWd1cmF0aW9uIyJwYXRoIiAhPSAiIgogICAgdGhlbiBwcm9ncmFtUGF0aHMjInRvcGNvbSIgPSBU b3Bjb20jT3B0aW9ucyNDb25maWd1cmF0aW9uIyJwYXRoIgoKdG9wY29tUHJvZ3JhbSA9IG51bGwK CmF1Z21lbnQgPSAoQSkgLT4gKAogICAgLS0gQSBpcyBhIG1hdHJpeCBvdmVyIFpaCiAgICAtLSBh ZGQgaW4gYSBsYXN0IHJvdyBvZiAxJ3MuCiAgICBuIDo9IG51bUNvbHVtbnMgQTsKICAgIG9uZXMg Oj0gbWF0cml4IHt7biA6IDF9fTsKICAgIEEgfHwgb25lcwogICAgKQoKdG9wY29tUG9pbnRzID0g bWV0aG9kKE9wdGlvbnM9PntIb21vZ2VuaXplPT50cnVlfSkKdG9wY29tUG9pbnRzIE1hdHJpeCA6 PSBvcHRzIC0+IChBKSAtPiAoCiAgICBBMSA6PSBpZiBvcHRzLkhvbW9nZW5pemUgdGhlbiBhdWdt ZW50IEEgZWxzZSBBOwogICAgbmV3IEFycmF5IGZyb20gZm9yIGEgaW4gZW50cmllcyB0cmFuc3Bv c2UgQTEgbGlzdCBuZXcgQXJyYXkgZnJvbSBhCiAgICApCgotLSBXb3JraG9yc2UgZnVuY3Rpb24g Zm9yIGNhbGxpbmcgdG9wY29tLgotLSBjb21tYW5kOiBvbmUgb2YgdGhlIGNvbW1hbmRzIG9mIHRv cGNvbSwgd2l0aCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGluY2x1ZGVkLgotLSBpbnB1dHM6IGEg bGlzdCBvZiBvYmplY3RzIHRoYXQgYXJlIGluIHRoZSBmb3JtYXQgZm9yIHRvcGNvbSB0byB1bmRl cnN0YW5kLgotLSBvdXRwdXQ6IDIgZmlsZSBuYW1lcywgb25lIGZvciB0aGUgc3Rkb3V0LCBvbmUg Zm9yIHN0ZGVyci4KLS0gSWYgdGhlIGV4ZWN1dGFibGUgZmFpbHMsIHdoYXQgaGFwcGVucz8KLS0g ZGVidWdMZXZlbDogc2V0IHRvIDAgLSA3IGZvciB2YXJ5aW5nIHZlcmJvc2Ugb3V0cHV0CmNhbGxU b3Bjb20gPSBtZXRob2QoKQpjYWxsVG9wY29tKFN0cmluZywgTGlzdCkgOj0gKGNvbW1hbmQsIGlu cHV0cykgLT4gKAogICAgaWYgdG9wY29tUHJvZ3JhbSA9PT0gbnVsbCB0aGVuCgl0b3Bjb21Qcm9n cmFtID0gZmluZFByb2dyYW0oInRvcGNvbSIsImN1YmUgMyIsIFByZWZpeCA9PiB7CgkgICAgKCIu KiIsICJ0b3Bjb20tIiksIC0tIGRlYmlhbgoJICAgICgiXihjcm9zc3xjdWJlfGN5Y2xpY3xoeXBl cnNpbXBsZXh8bGF0dGljZSkkIiwgIlRPUENPTS0iKSwgLS1mZWRvcmEKCSAgICAoIl5jdWJlJCIs ICJ0b3Bjb21fIil9KTsgLS1nZW50b28KICAgIGZpbGVuYW1lIDo9IHRlbXBvcmFyeUZpbGVOYW1l KCk7CiAgICBpbmZpbGUgOj0gZmlsZW5hbWV8Ii5pbiI7CiAgICAtLSBub3cgY3JlYXRlIHRoZSBv dXRwdXQgZmlsZQogICAgRiA6PSBvcGVuT3V0KGluZmlsZSk7CiAgICBmb3IgZiBpbiBpbnB1dHMg ZG8gKAogICAgICAgIEYgPDwgdG9TdHJpbmcgZiA8PCBlbmRsOwogICAgKTsKICAgIEYgPDwgY2xv c2U7CgogICAgLS0gc2V0dGluZyBSYWlzZUVycm9yIHRvIGZhbHNlIGJlY2F1c2Ugd2Ugc29tZXRp bWVzIGdldCBub256ZXJvIHJldHVybgogICAgLS0gdmFsdWVzLCBlLmcuLCB0aGUgY2FsbHMgdG8g dG9wY29tSXNUcmlhbmd1bGF0aW9uIGluIHRoZQogICAgLS0gImJhZCB0cmlhbmd1bGF0aW9ucyBv ZiB0aGUgc3F1YXJlIiB0ZXN0cyBiZWxvdwogICAgcmV0dmFsIDo9IHJ1blByb2dyYW0odG9wY29t UHJvZ3JhbSwgY29tbWFuZCwgIiA8ICIgfCBpbmZpbGUsCglLZWVwRmlsZXMgPT4gdHJ1ZSwgUmFp c2VFcnJvciA9PiBmYWxzZSk7CgogICAgaWYgZGVidWdMZXZlbCA+PSAxIHRoZW4gKAogICAgICAg IDw8ICItLSBjYWxsaW5nIHRvcGNvbSIgPDwgZW5kbDsKICAgICAgICA8PCAiLS0gIiA8PCBjb21t YW5kIDw8ICI6IHVzaW5nIHRlbXBvcmFyeSBmaWxlIHByZWZpeCAiIDw8IGZpbGVuYW1lIDw8IGVu ZGw7CiAgICAgICAgKTsKICAgIGlmIGRlYnVnTGV2ZWwgPj0gNyB0aGVuIDw8ICItLSAiIDw8IGNv bW1hbmQgPDwgIjogaW5wdXQgPSAiIDw8IG5ldCBnZXQgaW5maWxlIDw8IGVuZGw7CiAgICBpZiBk ZWJ1Z0xldmVsID49IDIgdGhlbiA8PCAiLS0gIiA8PCBjb21tYW5kIDw8ICI6IGV4ZWN1dGluZyAi IDw8IHJldHZhbCMiY29tbWFuZCIgPDwgZW5kbDsKCiAgICAtLWlmIDAgPSE9IHJldHZhbCB0aGVu IGVycm9yICgiZXJyb3IgcnVubmluZyB0b3Bjb206InwgbmV0IGdldCBlcnJmaWxlKTsKCiAgICBp ZiBkZWJ1Z0xldmVsID49IDUgdGhlbiA8PCAiLS0gIiA8PCBjb21tYW5kIDw8ICI6IG91dHB1dCA9 ICIgPDwgbmV0IHJldHZhbCMib3V0cHV0IiA8PCBlbmRsOwogICAgaWYgZGVidWdMZXZlbCA+PSA2 IHRoZW4gPDwgIi0tICIgPDwgY29tbWFuZCA8PCAiOiBzdGRlcnIgPSAiIDw8IG5ldCByZXR2YWwj ImVycm9yIiA8PCBlbmRsOwoKICAgIChyZXR2YWwjIm91dHB1dCBmaWxlIiwgcmV0dmFsIyJlcnJv ciBmaWxlIikKICAgICkKCmlzUmVndWxhclRyaWFuZ3VsYXRpb24gPSBtZXRob2QoT3B0aW9ucz0+ e0hvbW9nZW5pemU9PnRydWV9KQppc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKE1hdHJpeCwgTGlzdCkg Oj0gb3B0cyAtPiAoQSwgdHJpKSAtPiAoCiAgICAtLSBub3cgY3JlYXRlIHRoZSBvdXRwdXQgZmls ZQogICAgKG91dGZpbGUsIGVycmZpbGUpIDo9IGNhbGxUb3Bjb20oImNoZWNrcmVndWxhcml0eSAt LWNoZWNrdHJpYW5nIC12Iiwge3RvcGNvbVBvaW50cyhBLCBvcHRzKSwgW10sIHRyaSB9KTsKICAg IG1hdGNoKCJDaGVja2VkIDEgdHJpYW5ndWxhdGlvbnMsIDAgbm9uLXJlZ3VsYXIgc28gZmFyIiwg Z2V0IGVycmZpbGUpCiAgICApCgpyZWd1bGFyVHJpYW5ndWxhdGlvbldlaWdodHMgPSBtZXRob2Qo T3B0aW9ucyA9PiBvcHRpb25zIGlzUmVndWxhclRyaWFuZ3VsYXRpb24pCnJlZ3VsYXJUcmlhbmd1 bGF0aW9uV2VpZ2h0cyhNYXRyaXgsIExpc3QpIDo9IG9wdHMgLT4gKEEsIHRyaSkgLT4gKAogICAg LS0gcmV0dXJucyBudWxsIGlmIHRoZSB0cmlhbmd1bGF0aW9uIGlzIG5vdCByZWd1bGFyLgogICAg LS0gb3RoZXJ3aXNlIHJldHVybnMgYSBsaXN0IG9mIHJhdGlvbmFsIG51bWJlcnMgd2hpY2ggYXJl IHRoZSAKICAgIC0tIGhlaWdodHMgdGhhdCByZXN1bHQgaW4gdGhlIHRyaWFuZ3VsYXRpb24uCiAg ICAob3V0ZmlsZSwgZXJyZmlsZSkgOj0gY2FsbFRvcGNvbSgiY2hlY2tyZWd1bGFyaXR5IC0taGVp Z2h0cyIsIHt0b3Bjb21Qb2ludHMoQSwgb3B0cyksIFtdLCB0cmkgfSk7CiAgICBvdXRwdXQgOj0g Z2V0IG91dGZpbGU7CiAgICBpZiBtYXRjaCgibm9uLXJlZ3VsYXIiLCBvdXRwdXQpIHRoZW4gcmV0 dXJuIG51bGw7CiAgICByZXN1bHQgOj0gdmFsdWUgZmlyc3QgbGluZXMgb3V0cHV0OwogICAgcmV0 dXJuIGlmIGluc3RhbmNlKHJlc3VsdCwgTnVtYmVyKSB0aGVuIHtyZXN1bHR9IGVsc2UgdG9MaXN0 IHJlc3VsdAogICAgKQoKcmVndWxhckZpbmVUcmlhbmd1bGF0aW9uID0gbWV0aG9kKE9wdGlvbnMg PT4gb3B0aW9ucyBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKQpyZWd1bGFyRmluZVRyaWFuZ3VsYXRp b24gTWF0cml4IDo9IG9wdHMgLT4gKEEpIC0+ICgKICAgIChvdXRmaWxlLGVycmZpbGUpIDo9IGNh bGxUb3Bjb20oInBvaW50czJmaW5ldHJpYW5nIC0tcmVndWxhciIsIHt0b3Bjb21Qb2ludHMoQSwg b3B0cyl9KTsKICAgIHZhbHVlIGdldCBvdXRmaWxlCiAgICApCgpjaGlyb3RvcGUgPSBtZXRob2Qo T3B0aW9ucyA9PiBvcHRpb25zIGlzUmVndWxhclRyaWFuZ3VsYXRpb24pCmNoaXJvdG9wZSBNYXRy aXggOj0gb3B0cyAtPiBBIC0+ICgKICAgIChvdXRmaWxlLGVycmZpbGUpIDo9IGNhbGxUb3Bjb20o InBvaW50czJjaGlybyIsIHt0b3Bjb21Qb2ludHMoQSwgb3B0cyl9KTsKICAgIGdldCBvdXRmaWxl CiAgICApCgpuYWl2ZUNoaXJvdG9wZSA9IG1ldGhvZChPcHRpb25zID0+IG9wdGlvbnMgY2hpcm90 b3BlKQpuYWl2ZUNoaXJvdG9wZSBNYXRyaXggOj0gb3B0cyAtPiBBIC0+ICgKICAgIEExIDo9IGlm IG9wdHMuSG9tb2dlbml6ZSB0aGVuIGF1Z21lbnQgQSBlbHNlIEE7CiAgICBuIDo9IG51bUNvbHVt bnMgQTE7CiAgICBkIDo9IG51bVJvd3MgQTE7CiAgICBjaGlyb0hlYWRlciA6PSAodG9TdHJpbmcg bikgfCAiLCIgfCAodG9TdHJpbmcgZCkgfCAiOlxuIjsKICAgIHN1YnMgOj0gc29ydCBzdWJzZXRz KG4sZCk7CiAgICBzdWJzMSA6PSBwYWNrKHN1YnMsIDEwMCk7CiAgICBjaGlyb0hlYWRlciB8IGNv bmNhdGVuYXRlIGZvciBzIGluIHN1YnMxIGxpc3QgKAogICAgICAgIGNvbmNhdGVuYXRlIChmb3Ig czEgaW4gcyBsaXN0ICgKICAgICAgICAgICAgICAgIGQgOj0gZGV0IEExX3MxOwogICAgICAgICAg ICAgICAgaWYgZCA+IDAgdGhlbiAiKyIgZWxzZSBpZiBkID09IDAgdGhlbiAiMCIgZWxzZSAiLSIK ICAgICAgICAgICAgICAgICkpIHwgIlxuIgogICAgICAgICkKICAgICkKCm9yaWVudGVkQ2lyY3Vp dHMgPSBtZXRob2QoT3B0aW9ucyA9PiB7SG9tb2dlbml6ZT0+dHJ1ZX0pCm9yaWVudGVkQ2lyY3Vp dHMgU3RyaW5nIDo9IG9wdHMgLT4gKGNoaXJvKSAtPiAoCiAgICAob3V0ZmlsZSxlcnJmaWxlKSA6 PSBjYWxsVG9wY29tKCJjaGlybzJjaXJjdWl0cyIsIHtjaGlyb30pOwogICAgcyA6PSBsaW5lcyBn ZXQgb3V0ZmlsZTsKICAgIC0tIHJlbW92ZSBmaXJzdCAyIGxpbmVzLCBhbmQgbGFzdCBsaW5lOgog ICAgcyA9IGRyb3AoZHJvcChzLCAyKSwgLTEpOwogICAgY2lyY3MgOj0gcy8oeCAtPiB0b0xpc3Qg dmFsdWUgeCk7CiAgICAtLSBub3cgc29ydCBpdCBhbGwKICAgIGNpcmNzL3NvcnQvL3NvcnQKICAg ICkKb3JpZW50ZWRDaXJjdWl0cyBNYXRyaXggOj0gb3B0cyAtPiBBIC0+IG9yaWVudGVkQ2lyY3Vp dHMgY2hpcm90b3BlKEEsIG9wdHMpCgpvcmllbnRlZENvY2lyY3VpdHMgPSBtZXRob2QoT3B0aW9u cyA9PiB7SG9tb2dlbml6ZT0+dHJ1ZX0pCm9yaWVudGVkQ29jaXJjdWl0cyBTdHJpbmcgOj0gb3B0 cyAtPiAoY2hpcm8pIC0+ICgKICAgIChvdXRmaWxlLGVycmZpbGUpIDo9IGNhbGxUb3Bjb20oImNo aXJvMmNvY2lyY3VpdHMiLCB7Y2hpcm99KTsKICAgIHMgOj0gbGluZXMgZ2V0IG91dGZpbGU7CiAg ICBzID0gZHJvcChkcm9wKHMsIDIpLCAtMSk7CiAgICBzLyh4IC0+IHRvTGlzdCB2YWx1ZSB4KQog ICAgKQpvcmllbnRlZENvY2lyY3VpdHMgTWF0cml4IDo9IG9wdHMgLT4gQSAtPiBvcmllbnRlZENv Y2lyY3VpdHMgY2hpcm90b3BlKEEsIG9wdHMpCgphbGxUcmlhbmdzRXhlY3V0YWJsZSA9IGhhc2hU YWJsZSB7CiAgICAtLSBGaW5lPywgQ09ubmVjdGVkVG9SZWd1bGFyPwogICAgKHRydWUsIHRydWUp ID0+ICJwb2ludHMyZmluZXRyaWFuZ3MiLAogICAgKHRydWUsIGZhbHNlKSA9PiAicG9pbnRzMmFs bGZpbmV0cmlhbmdzIiwKICAgIChmYWxzZSwgdHJ1ZSkgPT4gInBvaW50czJ0cmlhbmdzIiwKICAg IChmYWxzZSwgZmFsc2UpID0+ICJwb2ludHMyYWxsdHJpYW5ncyIKICAgIH0KbnVtVHJpYW5nc0V4 ZWN1dGFibGUgPSBoYXNoVGFibGUgewogICAgLS0gRmluZT8sIENPbm5lY3RlZFRvUmVndWxhcj8K ICAgICh0cnVlLCB0cnVlKSA9PiAicG9pbnRzMm5maW5ldHJpYW5ncyIsCiAgICAodHJ1ZSwgZmFs c2UpID0+ICJwb2ludHMybmFsbGZpbmV0cmlhbmdzIiwKICAgIChmYWxzZSwgdHJ1ZSkgPT4gInBv aW50czJudHJpYW5ncyIsCiAgICAoZmFsc2UsIGZhbHNlKSA9PiAicG9pbnRzMm5hbGx0cmlhbmdz IgogICAgfQoKYWxsVHJpYW5ndWxhdGlvbnMgPSBtZXRob2QoT3B0aW9ucyA9PiB7SG9tb2dlbml6 ZT0+dHJ1ZSwgUmVndWxhck9ubHkgPT4gdHJ1ZSwgRmluZSA9PiBmYWxzZSwgQ29ubmVjdGVkVG9S ZWd1bGFyID0+IHRydWV9KQphbGxUcmlhbmd1bGF0aW9ucyBNYXRyaXggOj0gb3B0cyAtPiAoQSkg LT4gKAogICAgaWYgbm90IG9wdHMuQ29ubmVjdGVkVG9SZWd1bGFyIGFuZCBvcHRzLlJlZ3VsYXJP bmx5IHRoZW4gZXJyb3IgImNhbm5vdCBoYXZlIGJvdGggUmVndWxhck9ubHk9PnRydWUgYW5kIENv bm5lY3RlZFRvUmVndWxhcj0+ZmFsc2UiOwogICAgZXhlY3V0YWJsZSA6PSBhbGxUcmlhbmdzRXhl Y3V0YWJsZSMob3B0cy5GaW5lLCBvcHRzLkNvbm5lY3RlZFRvUmVndWxhcik7CiAgICBhcmdzIDo9 IGlmIG9wdHMuUmVndWxhck9ubHkgdGhlbiAiIC0tcmVndWxhciIgZWxzZSAiIjsKICAgIChvdXRm aWxlLCBlcnJmaWxlKSA6PSBjYWxsVG9wY29tKGV4ZWN1dGFibGUgfCBhcmdzLCB7dG9wY29tUG9p bnRzKEEsIEhvbW9nZW5pemU9Pm9wdHMuSG9tb2dlbml6ZSl9KTsKICAgIHRyaXMgOj0gbGluZXMg Z2V0IG91dGZpbGU7CiAgICAtLSBpZiBDb25uZWN0VG9SZWd1bGFyIGlzIHRydWUsIHRoZW4gdGhl IG91dHB1dCBpcyBkaWZmZXJlbnQsIGFuZCBuZWVkcyB0byBiZSBwYXJzZWQuCiAgICAtLSBpbiB0 aGUgb3RoZXIgY2FzZSwgd2UgY2FuIGF2b2lkIHRoZSBmaXJzdCAyIGxpbmVzIGJ1dCB0aGV5IGRv bid0IGRvIGFueXRoaW5nIGVpdGhlci4KICAgIGZvciB0IGluIHRyaXMgbGlzdCAoCiAgICAgICAg dDEgOj0gcmVwbGFjZSgvLy9UXFtbMC05XStcXTo9XFsuKjovLy8sICIiLCB0KTsKICAgICAgICB0 MiA6PSByZXBsYWNlKC8vL1xdOy8vLywgIiIsIHQxKTsKICAgICAgICB0MyA6PSBzb3J0IHZhbHVl IHQyCiAgICAgICAgKQogICAgKQoKbnVtVHJpYW5ndWxhdGlvbnMgPSBtZXRob2QoT3B0aW9ucyA9 PiB7SG9tb2dlbml6ZT0+dHJ1ZSwgUmVndWxhck9ubHkgPT4gdHJ1ZSwgRmluZSA9PiBmYWxzZSwg Q29ubmVjdGVkVG9SZWd1bGFyID0+IHRydWV9KQpudW1Ucmlhbmd1bGF0aW9ucyBNYXRyaXggOj0g b3B0cyAtPiAoQSkgLT4gKAogICAgaWYgbm90IG9wdHMuQ29ubmVjdGVkVG9SZWd1bGFyIGFuZCBv cHRzLlJlZ3VsYXJPbmx5IHRoZW4gZXJyb3IgImNhbm5vdCBoYXZlIGJvdGggUmVndWxhck9ubHk9 PnRydWUgYW5kIENvbm5lY3RlZFRvUmVndWxhcj0+ZmFsc2UiOwogICAgZXhlY3V0YWJsZSA6PSBu dW1UcmlhbmdzRXhlY3V0YWJsZSMob3B0cy5GaW5lLCBvcHRzLkNvbm5lY3RlZFRvUmVndWxhcik7 CiAgICBhcmdzIDo9IGlmIG9wdHMuUmVndWxhck9ubHkgdGhlbiAiIC0tcmVndWxhciIgZWxzZSAi IjsKICAgIChvdXRmaWxlLCBlcnJmaWxlKSA6PSBjYWxsVG9wY29tKGV4ZWN1dGFibGUgfCBhcmdz LCB7dG9wY29tUG9pbnRzKEEsIEhvbW9nZW5pemU9Pm9wdHMuSG9tb2dlbml6ZSl9KTsKICAgIHZh bHVlIGdldCBvdXRmaWxlCiAgICApCgpudW1GbGlwcyA9IG1ldGhvZChPcHRpb25zID0+IHtIb21v Z2VuaXplPT50cnVlLCBSZWd1bGFyT25seSA9PnRydWV9KQpudW1GbGlwcyhNYXRyaXgsIExpc3Qp IDo9IG9wdHMgLT4gKEEsIHRyaSkgLT4gKAogICAgZXhlY3V0YWJsZSA6PSAicG9pbnRzMm5mbGlw cyI7CiAgICBhcmdzIDo9IGlmIG9wdHMuUmVndWxhck9ubHkgdGhlbiAiIC0tcmVndWxhciIgZWxz ZSAiIjsKICAgIChvdXRmaWxlLCBlcnJmaWxlKSA6PSBjYWxsVG9wY29tKGV4ZWN1dGFibGUgfCBh cmdzLCB7dG9wY29tUG9pbnRzKEEsIEhvbW9nZW5pemU9Pm9wdHMuSG9tb2dlbml6ZSl9KTsKICAg IChnZXQgb3V0ZmlsZSwgZ2V0IGVycmZpbGUpCiAgICApCgpmbGlwcyA9IG1ldGhvZChPcHRpb25z ID0+IHtIb21vZ2VuaXplPT50cnVlLCBSZWd1bGFyT25seSA9PnRydWV9KQpmbGlwcyhNYXRyaXgs IExpc3QpIDo9IG9wdHMgLT4gKEEsIHRyaSkgLT4gKAogICAgZXhlY3V0YWJsZSA6PSAicG9pbnRz MmZsaXBzIjsKICAgIGFyZ3MgOj0gaWYgb3B0cy5SZWd1bGFyT25seSB0aGVuICIgLS1yZWd1bGFy IiBlbHNlICIiOwogICAgKG91dGZpbGUsIGVycmZpbGUpIDo9IGNhbGxUb3Bjb20oZXhlY3V0YWJs ZSB8IGFyZ3MsIHt0b3Bjb21Qb2ludHMoQSwgSG9tb2dlbml6ZT0+b3B0cy5Ib21vZ2VuaXplKX0p OwogICAgKGdldCBvdXRmaWxlLCBnZXQgZXJyZmlsZSkKICAgICkKCmZpbmVTdGFyVHJpYW5ndWxh dGlvbiA9IG1ldGhvZCgpCmZpbmVTdGFyVHJpYW5ndWxhdGlvbihNYXRyaXgsIExpc3QpIDo9IChB LCB0cmkpIC0+ICgKICAgIGFBIDo9IGF1Z21lbnQgQTsKICAgIC0tIEggOj0gZmlyc3QgaGFsZnNw YWNlcyBjb252ZXhIdWxsIGFBOwogICAgSCA6PSB0cmFuc3Bvc2UoLShmaXJzdCBmb3VyaWVyTW90 emtpbiBhQSkpOwogICAgbXlmYWNldHMgOj0gZm9yIGUgaW4gZW50cmllcyBIIGxpc3QgKAogICAg ICAgIHBvc2l0aW9ucyhmbGF0dGVuIGVudHJpZXMobWF0cml4IHtlfSAqIGFBKSwgeCAtPiB4ID09 IDApCiAgICAgICAgKTsKICAgIHNvcnQgdW5pcXVlIGZsYXR0ZW4gZm9yIGYgaW4gdHJpIGxpc3Qg Zm9yIGcgaW4gbXlmYWNldHMgbGlzdCAoCiAgICAgICAgYSA6PSB0b0xpc3Qoc2V0IGcgKiBzZXQg Zik7IAogICAgICAgIGlmICNhIDwgbnVtUm93cyBBIHRoZW4gCiAgICAgICAgY29udGludWUgCiAg ICAgICAgZWxzZSBzb3J0IGEKICAgICAgICApCiAgICAtLSBuZXd0cmkgPSBmb3IgZiBpbiBuZXd0 cmkgbGlzdCBhcHBlbmQoZiwgbnVtQ29sdW1ucyBBKQogICAgKQoKcmVndWxhckZpbmVTdGFyVHJp YW5ndWxhdGlvbiA9IG1ldGhvZCgpCnJlZ3VsYXJGaW5lU3RhclRyaWFuZ3VsYXRpb24gTWF0cml4 IDo9IChBKSAtPiBmaW5lU3RhclRyaWFuZ3VsYXRpb24oQSwgcmVndWxhckZpbmVUcmlhbmd1bGF0 aW9uIEEpCgpuYWl2ZUlzVHJpYW5ndWxhdGlvbiA9IG1ldGhvZCgpCm5haXZlSXNUcmlhbmd1bGF0 aW9uKE1hdHJpeCwgTGlzdCwgTGlzdCkgOj0gKEEsIGNpcmN1aXRzLCB0cmkpIC0+ICgKICAgIGFB IDo9IGF1Z21lbnQgQTsKICAgIC0tIEggOj0gZmlyc3QgaGFsZnNwYWNlcyBjb252ZXhIdWxsIGFB OwogICAgSCA6PSB0cmFuc3Bvc2UoLShmaXJzdCBmb3VyaWVyTW90emtpbiBhQSkpOwogICAgbXlm YWNldHMgOj0gZm9yIGUgaW4gZW50cmllcyBIIGxpc3QgKAogICAgICAgIHBvc2l0aW9ucyhmbGF0 dGVuIGVudHJpZXMobWF0cml4IHtlfSAqIGFBKSwgeCAtPiB4ID09IDApCiAgICAgICAgKTsKICAg IC0tIHRlc3QgMTogZWFjaCB3YWxsIHNob3VsZCBiZSBpbiBhIGZhY2V0IG9mIHRoZSBjb252ZXgg aHVsbCwgb3Igb2NjdXIgZXhhY3RseSB0d2ljZS4KICAgIHdhbGxzIDo9IHRhbGx5IGZsYXR0ZW4g Zm9yIHQgaW4gdHJpIGxpc3Qgc3Vic2V0cyh0LCN0LTEpOwogICAgdGVzdDEgOj0gZm9yIGsgaW4g a2V5cyB3YWxscyBsaXN0ICgKICAgICAgICBpZiBhbnkobXlmYWNldHMsIGYgLT4gaXNTdWJzZXQo ayxmKSkgdGhlbiAKICAgICAgICAgIHdhbGxzI2sgPT0gMQogICAgICAgIGVsc2UKICAgICAgICAg IHdhbGxzI2sgPT0gMgogICAgICAgICk7CiAgICBpZiBhbnkodGVzdDEsIHggLT4gbm90IHgpIHRo ZW4gcmV0dXJuIGZhbHNlOwogICAgLS0gdGVzdCAyOiBmb3IgZWFjaCBvcmllbnRlZCBjaXJjdWl0 IFogPSAoWissIFotKQogICAgdGVzdDIgOj0gZm9yIHogaW4gY2lyY3VpdHMgbGlzdCAoCiAgICAg ICMgc2VsZWN0KHRyaSwgdCAtPiBpc1N1YnNldCh6XzAsIHQpKSwKICAgICAgIyBzZWxlY3QodHJp LCB0IC0+IGlzU3Vic2V0KHpfMSwgdCkpCiAgICAgICk7CiAgICBhbGwodGVzdDIsIHggLT4geCMw ID09IDAgb3IgeCMxID09IDApCiAgICApCm5haXZlSXNUcmlhbmd1bGF0aW9uKE1hdHJpeCwgTGlz dCkgOj0gKEEsIHRyaSkgLT4gbmFpdmVJc1RyaWFuZ3VsYXRpb24oQSwgb3JpZW50ZWRDaXJjdWl0 cyBBLCB0cmkpCgoKdG9wY29tSXNUcmlhbmd1bGF0aW9uID0gbWV0aG9kKCk7CnRvcGNvbUlzVHJp YW5ndWxhdGlvbihNYXRyaXgsIExpc3QpIDo9IChWaW4sIFQpIC0+ICgKICAgLS0gVG9wY29tIGRv ZXMgbm90IGNoZWNrIHdoZXRoZXIgdGhlIHNldHMgaW4gVCBhY3R1YWxseSBmb3JtIHNpbXBsaWNl cy4gSW4KICAgLS0gdGhhdCBjYXNlIGl0IHRocm93cyBhbiBlcnJvciBpbnN0ZWFkIG9mIGdpdmlu ZyBhbiBhbnN3ZXIuICAtLSBTbyB3ZSBkbyBpdAogICAtLSBtYW51YWxseToKICAgViA6PSBwcm9t b3RlKGF1Z21lbnQgVmluLCBRUSk7CiAgIGQgOj0gbnVtUm93cyBWOwogICBpZiBub3QgYWxsKFQs IHQtPiAjdCA9PSBkKSB0aGVuICgKICAgICAgPDwgIkluZGV4IHNldHMgZG8gbm90IGNvcnJlc3Bv bmQgdG8gZnVsbC1kaW1lbnNpb25hbCBzaW1wbGljZXMiIDw8IGVuZGw7CiAgICAgIHJldHVybiBm YWxzZTsKICAgKTsKICAgc2ltcGxpY2VzIDo9IGFwcGx5KFQsIHQgLT4gVl90KTsKICAgaWYgbm90 IGFsbChzaW1wbGljZXMsIHMtPmQ9PXJhbmsgcykgdGhlbiAoCiAgICAgIDw8ICJJbmRleCBzZXRz IGRvIG5vdCBjb3JyZXNwb25kIHRvIGZ1bGwtZGltZW5zaW9uYWwgc2ltcGxpY2VzIiA8PCBlbmRs OwogICAgICByZXR1cm4gZmFsc2U7CiAgICk7CiAgIChvdXRmaWxlLCBlcnJmaWxlKSA6PSBjYWxs VG9wY29tKCJwb2ludHMybmZsaXBzIC0tY2hlY2t0cmlhbmcgLXYiLCB7dG9wY29tUG9pbnRzKFYs IEhvbW9nZW5pemU9PmZhbHNlKSwgW10sIFQgfSk7CiAgIG5vdCBtYXRjaCgibm90IHZhbGlkIiwg Z2V0IGVycmZpbGUpCikKCgpiZWdpbkRvY3VtZW50YXRpb24oKQoKZG9jIC8vLwpLZXkKICBUb3Bj b20KSGVhZGxpbmUKICBpbnRlcmZhY2UgdG8gc2VsZWN0ZWQgZnVuY3Rpb25zIGZyb20gdG9wY29t IHBhY2thZ2UKRGVzY3JpcHRpb24KICBUZXh0CiAgICBUb3Bjb20gQEhSRUZ7Imh0dHA6Ly93d3cu cmFtYmF1LndtLnVuaS1iYXlyZXV0aC5kZS9UT1BDT00vIn1AIGlzIG1hdGhlbWF0aWNhbCBzb2Z0 d2FyZSB3cml0dGVuIGJ5IEpvcmcgUmFtYmF1IGZvciAKICAgIGNvbXB1dGluZyBhbmQgbWFuaXB1 bGF0aW5nIHRyaWFuZ3VsYXRpb25zIG9mIHBvbHl0b3BlcyBhbmQgY2hpcm90b3Blcy4KICAgIAog ICAgVGhpcyBwYWNrYWdlIGltcGxlbWVudHMgdHdvIGtleSBmdW5jdGlvbnMgZnJvbSB0aGUgdG9w Y29tIHBhY2thZ2UKICAgIEBUTyAiaXNSZWd1bGFyVHJpYW5ndWxhdGlvbiJAICBjaGVja3Mgd2hl dGhlciBhIHRyaWFuZ3VsYXRpb24gb2YgYSBwb2ludCBzZXQgaXMgYSByZWd1bGFyIHRyaWFuZ3Vs YXRpb24sCiAgICBhbmQgQFRPICJyZWd1bGFyRmluZVRyaWFuZ3VsYXRpb24iQCBjb21wdXRlcyBh IHRyaWFuZ3VsYXRpb24gd2hpY2ggaW52b2x2ZXMgYWxsIGxhdHRpY2UgcG9pbnRzIG9mIGEgcG9s eXRvcGUuCkNhdmVhdAogIFRoZXJlIGFyZSBtYW55IG90aGVyIGZ1bmN0aW9ucyBhdmFpbGFibGUg aW4gVG9wY29tLiAgSWYgeW91IHdpc2ggYW55IG9mIHRoZXNlIGltcGxlbWVudGVkLCBvciB5b3Ug d291bGQgbGlrZSB0byBjb250cmlidXRlCiAgc3VjaCBhbiBpbXBsZW1lbnRhdGlvbiwgcGxlYXNl IGNvbnRhY3QgdGhlIGF1dGhvci4KU2VlQWxzbwogICJDb2hvbUNhbGc6OkNvaG9tQ2FsZyIKICAi UmVmbGV4aXZlUG9seXRvcGVzREI6OlJlZmxleGl2ZVBvbHl0b3Blc0RCIgovLy8KCmRvYyAvLy8K S2V5CiAgaXNSZWd1bGFyVHJpYW5ndWxhdGlvbgogIChpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uLE1h dHJpeCxMaXN0KQpIZWFkbGluZQogIGRldGVybWluZSBpZiBhIGdpdmVuIHRyaWFuZ3VsYXRpb24g aXMgYSByZWd1bGFyIHRyaWFuZ3VsYXRpb24KVXNhZ2UKICBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9u KEMsIHRyaSkKSW5wdXRzCiAgQzpNYXRyaXgKICAgIEEgbWF0cml4IG92ZXIgWlouICBFYWNoIGNv bHVtbiByZXByZXNlbnRzIG9uZSBvZiB0aGUgcG9pbnRzCiAgICB3aGljaCBjYW4gYmUgdXNlZCBp biBhIHRyaWFuZ3VsYXRpb24KICB0cmk6TGlzdAogICAgQSB0cmlhbmd1bGF0aW9uIG9mIHRoZSBw b2ludCBzZXQgQwpPdXRwdXRzCiAgOkJvb2xlYW4KICAgIHdoZXRoZXIgdGhlIGdpdmVuIHRyaWFu Z3VsYXRpb24gaXMgcmVndWxhcgpEZXNjcmlwdGlvbgogIFRleHQKICAgIFRoZSBmb2xsb3dpbmcg ZXhhbXBsZSBpcyBvbmUgb2YgdGhlIHNpbXBsZXN0IGV4YW1wbGVzIG9mIGEgbm9uLXJlZ3VsYXIK ICAgIHRyaWFuZ3VsYXRpb24uICBOb3RpY2UgdGhhdCB7XHR0IHRyaX0gaXMgYSB0cmlhbmd1bGF0 aW9uIG9mIHRoZSAKICAgIHBvbHl0b3BlIHdoaWNoIGlzIHRoZSBjb252ZXggaHVsbCBvZiB0aGUg Y29sdW1ucyBvZiAkQSQsIHdoaWNoIGFyZSAKICAgIHRoZSBvbmx5IHBvaW50cyBhbGxvd2VkIGlu IHRoZSB0cmlhbmd1bGF0aW9uLgogIEV4YW1wbGUKICAgIEEgPSB0cmFuc3Bvc2UgbWF0cml4IHt7 MCwzfSx7MCwxfSx7LTEsLTF9LHsxLC0xfSx7LTQsLTJ9LHs0LC0yfX0KICAgIHRyaSA9IHt7MCwx LDJ9LCB7MSwzLDV9LCB7MiwzLDR9LCB7MCwxLDV9LCAKICAgICAgICB7MCwyLDR9LCB7Myw0LDV9 LCB7MSwyLDN9fQogICAgaXNSZWd1bGFyVHJpYW5ndWxhdGlvbihBLHRyaSkKICBUZXh0CiAgICBT ZXR0aW5nIGRlYnVnTGV2ZWwgdG8gZWl0aGVyIDEsMiwgb3IgNSB3aWxsIGdpdmUgbW9yZSBkZXRh aWwgYWJvdXQKICAgIHdoYXQgZmlsZXMgYXJlIHdyaXR0ZW4gdG8gVG9wY29tLCBhbmQgd2hhdCB0 aGUgZXhlY3V0YWJsZSBpcy4KICAgIFNldHRpbmcgZGVidWdMZXZlbCB0byAwIG1lYW5zIHRoYXQg dGhlIGZ1bmN0aW9uIHdpbGwgcnVuIHNpbGVudGx5LgpDYXZlYXQKICBEbyB3ZSBjaGVjayB0aGF0 IHRoZSB0cmlhbmd1bGF0aW9uIGlzIGFjdHVhbGx5IHdlbGxsIGRlZmluZWQ/ClNlZUFsc28KICBy ZWd1bGFyRmluZVRyaWFuZ3VsYXRpb24gIAovLy8KClRFU1QgLy8vCi0qCiAgcmVzdGFydAogIGRl YnVnIG5lZWRzUGFja2FnZSAiVG9wY29tIgoqLQogIC0tIHRlc3Qgb2YgaXNSZWd1bGFyVHJpYW5n dWxhdGlvbgogIEEgPSB0cmFuc3Bvc2UgbWF0cml4IHt7LTEsLTEsMX0sey0xLDEsMX0sezEsLTEs MX0sezEsMSwxfSx7MCwwLDF9fQogIHJlZ3VsYXJGaW5lVHJpYW5ndWxhdGlvbihBLCBIb21vZ2Vu aXplPT5mYWxzZSkKICB0cmkgPSB7ezAsIDIsIDR9LCB7MiwgMywgNH0sIHswLCAxLCA0fSwgezEs IDMsIDR9fQogIGFzc2VydCBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKEEsdHJpKQogIGFzc2VydChy ZWd1bGFyVHJpYW5ndWxhdGlvbldlaWdodHMoQSx0cmksSG9tb2dlbml6ZT0+ZmFsc2UpID09IHsx LDEsMCwwLDB9KQovLy8KClRFU1QgLy8vCiAgbmVlZHNQYWNrYWdlICJUb3Bjb20iCiAgLS0gdGVz dCBvZiBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uCiAgQSA9IHRyYW5zcG9zZSBtYXRyaXgge3swLDN9 LHswLDF9LHstMSwtMX0sezEsLTF9LHstNCwtMn0sezQsLTJ9fQogIHRyaSA9IHt7MCwxLDJ9LCB7 MSwzLDV9LCB7MiwzLDR9LAogICAgICAgICB7MCwxLDV9LCB7MCwyLDR9LCB7Myw0LDV9LAogICAg ICAgICB7MSwyLDN9fQogIGFzc2VydCBub3QgaXNSZWd1bGFyVHJpYW5ndWxhdGlvbihBLHRyaSkK ICBhc3NlcnQobnVsbCA9PT0gcmVndWxhclRyaWFuZ3VsYXRpb25XZWlnaHRzKEEsdHJpKSkKICBu dW1Ucmlhbmd1bGF0aW9ucyBBCiAgYWxsVHJpYW5ndWxhdGlvbnMgQSAgCiAgYWxsVHJpYW5ndWxh dGlvbnMoQSwgRmluZT0+dHJ1ZSkKICBhbGxUcmlhbmd1bGF0aW9ucyhBLCBGaW5lPT50cnVlLCBS ZWd1bGFyT25seT0+ZmFsc2UpCiAgQSA9IHRyYW5zcG9zZSBtYXRyaXgge3swLDN9LHswLDF9LHst MSwtMX0sezEsLTF9LHstNCwtMn0sezcsLTJ9fQogIHRyaSA9IHt7MCwxLDJ9LCB7MSwzLDV9LCB7 MiwzLDR9LAogICAgICAgICB7MCwxLDV9LCB7MCwyLDR9LCB7Myw0LDV9LAogICAgICAgICB7MSwy LDN9fQogIGFzc2VydCBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKEEsdHJpKQogIHJlZ3VsYXJUcmlh bmd1bGF0aW9uV2VpZ2h0cyhBLHRyaSkgLS0gUXVlc3Rpb246IGhvdyB0byB0ZXN0IHRoYXQgdGhp cyBpcyBjb3JyZWN0CiAgICAtLSBUT0RPOiBuZWVkIGEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYSBw b2ludCBzZXQsIHdlaWdodHMsIGFuZCBjcmVhdGVzIHRoZSBsaWZ0IChlYXN5KQogICAgLS0gICAg ICAgY29tcHV0ZSB0aGUgbG93ZXIgaHVsbCBvZiB0aGlzIHBvbHl0b3BlLgoKICBhc3NlcnQoY2hp cm90b3BlIEEgPT0gbmFpdmVDaGlyb3RvcGUgQSkKICBvcmllbnRlZENpcmN1aXRzIEEKICBvcmll bnRlZENvY2lyY3VpdHMgQQogIEEgPSB0cmFuc3Bvc2UgbWF0cml4IHt7MSwwfSx7MCwxfX0KICB0 cmkgPSB7ezAsMX19CiAgYXNzZXJ0IGlzUmVndWxhclRyaWFuZ3VsYXRpb24oQSx0cmkpCiAgcmVn dWxhclRyaWFuZ3VsYXRpb25XZWlnaHRzKEEsdHJpKSA9PSB7MCwxfSAtLSBUT0RPOiBjaGVjayB0 aGF0IHRoaXMgaXMgdGhlIGNvcnJlY3QgYW5zd2VyCiAgCiAgQSA9IHRyYW5zcG9zZSBtYXRyaXgg e3swfX0KICB0cmkgPSB7ezB9fQogIGFzc2VydCBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKEEsdHJp KQogIHJlZ3VsYXJUcmlhbmd1bGF0aW9uV2VpZ2h0cyhBLHRyaSkgPT0gezF9Ci8vLwoKLy8vCi0t IFRPRE86IFRoaXMgdGVzdCBuZWVkcyB0byBiZSBtYWRlIHRvIGFzc2VydCBjb3JyZWN0IHN0YXRl bWVudHMKLS0gSG93IHRvIHRlc3QgdGhhdCB0cmlhbmd1bGF0aW9ucyBhcmUgY29ycmVjdD8gIFdo YXQgSSB0aG91Z2h0IHdvcmtlZCBkb2VzIG5vdC4KICBuZWVkc1BhY2thZ2UgIlRvcGNvbSIKICBB ID0gdHJhbnNwb3NlIG1hdHJpeHt7LTEsLTF9LHstMSwxfSx7MSwtMX0sezEsMX0sezAsMH19CiAg cmVndWxhckZpbmVUcmlhbmd1bGF0aW9uIEEgIAogIHRyaSA9IHt7MCwgMiwgNH0sIHsyLCAzLCA0 fSwgezAsIDEsIDR9LCB7MSwgMywgNH19CiAgdHJpID0ge3swLCAyLCA0fSwgezIsIDMsIDR9LCB7 MCwgMSwgNH0sIHsxLCAyLCAzfX0KICBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKEEsIHRyaSkgLS0g V3JvbmchIQoKICBiYWR0cmkgPSB7ezAsIDIsIDR9LCB7MiwgMywgNH0sIHswLCAxLCA0fSwgezEs IDIsIDN9fQogIGRlYnVnTGV2ZWwgPSA2CiAgaXNSZWd1bGFyVHJpYW5ndWxhdGlvbihBLGJhZHRy aSkgLS0gdGhpcyBzaG91bGQgZmFpbCEgQnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBkbyBzby4gQlVH IGluIHNvbWV0aGluZyEhIQogIGRlYnVnTGV2ZWwgPSAwCiAgLS0gaG1tbSwgd2UgY2FuIG1ha2Ug bm9uLXNlbnNpY2FsIHRyaWFuZ3VsYXRpb25zLCB3aXRob3V0IGl0IG5vdGljaW5nLgogIC0tIHRo aXMgc2hvdWxkIGJlIGEgYnVnPyAgCiAgQSA9IHRyYW5zcG9zZSBtYXRyaXgge3swLDB9LHswLDF9 LHsxLDB9LHsxLDF9fQogIHRyaSA9IHt7MCwxLDJ9LHswLDIsM319CiAgYXNzZXJ0IGlzUmVndWxh clRyaWFuZ3VsYXRpb24oQSx0cmkpICAKICB0cmkgPSB7ezAsMSwyfSx7MSwyLDN9fQogIGFzc2Vy dCBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKEEsdHJpKSAKLy8vCgpURVNUIC8vLyAgCiAgbmVlZHNQ YWNrYWdlICJUb3Bjb20iCiAgbmVlZHNQYWNrYWdlICJQb2x5aGVkcmEiCiAgCiAgQSA9IHRyYW5z cG9zZSBtYXRyaXgge3stMSwtMSwyfSx7LTEsMCwxfSx7LTEsMSwxfSx7MCwtMSwyfSx7MCwxLDF9 LHsxLC0xLDN9LHsxLDAsLTF9LHsxLDEsLTJ9fQogIGRlYnVnTGV2ZWwgPSAwCiAgdHJpID0gcmVn dWxhckZpbmVUcmlhbmd1bGF0aW9uIEEKICBhc3NlcnQgaXNSZWd1bGFyVHJpYW5ndWxhdGlvbihB LCB0cmkpCiAgYXNzZXJ0KHJlZ3VsYXJUcmlhbmd1bGF0aW9uV2VpZ2h0cyhBLCB0cmkpID0hPSBu dWxsKQoKICBBID0gdHJhbnNwb3NlIG1hdHJpeCB7ey0xLCAwLCAtMSwgLTF9LCB7LTEsIDAsIDAs IC0xfSwgey0xLCAxLCAyLCAtMX0sIHstMSwgMSwgMiwgMH0sIHsxLCAtMSwgLTEsIC0xfSwgezEs IC0xLCAtMSwgMX0sIHsxLCAwLCAtMSwgMn0sIHsxLCAwLCAxLCAyfX0KICBQMiA9IHBvbGFyIGNv bnZleEh1bGwgQQogIEMgPSBtYXRyaXgge2xhdHRpY2VQb2ludHMgUDJ9CiAgdHJpID0gcmVndWxh ckZpbmVUcmlhbmd1bGF0aW9uIEMKICBhc3NlcnQgaXNSZWd1bGFyVHJpYW5ndWxhdGlvbihDLCB0 cmkpCiAgcmVndWxhclRyaWFuZ3VsYXRpb25XZWlnaHRzKEMsIHRyaSkgLS0gaXMgdGhpcyBjb3Jy ZWN0PyAgU29tZSB3ZWlnaHRzIGhhdmUgbmVnYXRpdmUgdmFsdWVzPz8KLy8vCgoKVEVTVCAvLy8K LS0gc2ltcGxlIGV4YW1wbGUgb2YgY2hpcm90b3BlCi0qCiAgcmVzdGFydAogIGRlYnVnIG5lZWRz UGFja2FnZSAiVG9wY29tIgoqLQogIEEgPSB0cmFuc3Bvc2UgbWF0cml4IHt7LTEsLTF9LHstMSwx fSx7MSwtMX0sezEsMX0sezAsMH19CiAgdHJpID0ge3swLCAyLCA0fSwgezIsIDMsIDR9LCB7MCwg MSwgNH0sIHsxLCAzLCA0fX0KICBjaDEgPSBjaGlyb3RvcGUgQQogIGNoMiA9IG5haXZlQ2hpcm90 b3BlIEEKICBhc3NlcnQoY2gxID09IGNoMikKLy8vCgpURVNUIC8vLwotLSBCYWQgdHJpYW5ndWxh dGlvbnMgb2YgdGhlIHNxdWFyZQpWID0gdHJhbnNwb3NlIG1hdHJpeCB7ezAsMH0sezEsMH0sezAs MX0sezEsMX19ClQxID0ge3swLDEsMn19ClQyID0ge3swLDEsMn0sezAsMSwzfX0KVDMgPSB7ezAs MSwyLDN9fQphc3NlcnQobm90IG5haXZlSXNUcmlhbmd1bGF0aW9uKFYsIFQxKSkKYXNzZXJ0KG5v dCBuYWl2ZUlzVHJpYW5ndWxhdGlvbihWLCBUMikpCmFzc2VydChub3QgbmFpdmVJc1RyaWFuZ3Vs YXRpb24oViwgVDMpKQotLSBhc3NlcnQobm90IHRvcGNvbUlzVHJpYW5ndWxhdGlvbihWLCBUMSkp IC0tIHRvcGNvbSBzaWduYWxzIGFuIGVycm9yIGhlcmUKLS0gYXNzZXJ0KG5vdCB0b3Bjb21Jc1Ry aWFuZ3VsYXRpb24oViwgVDIpKSAtLSB0b3Bjb20gc2lnbmFscyBhbiBlcnJvciBoZXJlCmFzc2Vy dChub3QgdG9wY29tSXNUcmlhbmd1bGF0aW9uKFYsIFQzKSkKLy8vCgotLSBUaGlzIGV4YW1wbGUg aXMgYSBnb29kIG9uZSwgYnV0IHRha2VzIHRvbyBsb25nIHRvIGJlIHJ1biBhdXRvbWF0aWNhbGx5 Ci8vLwpyZXN0YXJ0CiAgbmVlZHNQYWNrYWdlICJUb3Bjb20iICAKICBuZWVkc1BhY2thZ2UgIlBv bHloZWRyYSIKICBwdHMgPSAge3stMSwwLDAsLTF9LHstMSwwLDEsLTF9LHstMSwwLDEsMH0sey0x LDEsMCwtMX0sey0xLDEsMCwwfSx7LTEsMSwxLDJ9LHsxLC0xLDAsLTF9LHsxLDAsLTEsMX0sezEs LTEsLTEsLTF9LHswLDAsMCwtMX19CiAgQSA9IHRyYW5zcG9zZSBtYXRyaXggcHRzIAogIC0tIGRl YnVnTGV2ZWwgPSA3CgogIGVsYXBzZWRUaW1lIG4xID0gbnVtVHJpYW5ndWxhdGlvbnMoQSwgRmlu ZT0+dHJ1ZSwgQ29ubmVjdGVkVG9SZWd1bGFyPT50cnVlKSAtLSA2Ljkgc2VjLCA0MDggb2YgdGhl c2UgQ09SUkVDVAogIGVsYXBzZWRUaW1lIG4yID0gbnVtVHJpYW5ndWxhdGlvbnMoQSwgRmluZT0+ dHJ1ZSwgQ29ubmVjdGVkVG9SZWd1bGFyPT5mYWxzZSkgLS0gMTE2IHNlYywgNDQ4IG9mIHRoZXNl IFdST05HCiAgZWxhcHNlZFRpbWUgbjMgPSBudW1Ucmlhbmd1bGF0aW9ucyhBLCBGaW5lPT5mYWxz ZSwgQ29ubmVjdGVkVG9SZWd1bGFyPT50cnVlKSAgLS0gOCBzZWMsIDUyMCBvZiB0aGVzZSBDT1JS RUNUCiAgZWxhcHNlZFRpbWUgbjQgPSBudW1Ucmlhbmd1bGF0aW9ucyhBLCBGaW5lPT5mYWxzZSwg Q29ubmVjdGVkVG9SZWd1bGFyPT5mYWxzZSkgLS0gMTE1IHNlYywgNTY0IG9mIHRoZXNlIFdST05H CgogIGVsYXBzZWRUaW1lIG41ID0gbnVtVHJpYW5ndWxhdGlvbnMoQSwgRmluZT0+dHJ1ZSwgQ29u bmVjdGVkVG9SZWd1bGFyPT50cnVlLCBSZWd1bGFyT25seT0+ZmFsc2UpIC0tIC4wOSBzZWMsIDQ0 OCBvZiB0aGVzZQogIGVsYXBzZWRUaW1lIG42ID0gbnVtVHJpYW5ndWxhdGlvbnMoQSwgRmluZT0+ dHJ1ZSwgQ29ubmVjdGVkVG9SZWd1bGFyPT5mYWxzZSwgUmVndWxhck9ubHk9PmZhbHNlKSAtLSAx MTUuNSBzZWMsIDQ0OCBvZiB0aGVzZQogIGVsYXBzZWRUaW1lIG43ID0gbnVtVHJpYW5ndWxhdGlv bnMoQSwgRmluZT0+ZmFsc2UsIENvbm5lY3RlZFRvUmVndWxhcj0+dHJ1ZSwgUmVndWxhck9ubHk9 PmZhbHNlKSAgLS0gLjExIHNlYywgNTY0IG9mIHRoZXNlCiAgZWxhcHNlZFRpbWUgbjggPSBudW1U cmlhbmd1bGF0aW9ucyhBLCBGaW5lPT5mYWxzZSwgQ29ubmVjdGVkVG9SZWd1bGFyPT5mYWxzZSwg UmVndWxhck9ubHk9PmZhbHNlKSAtLSAxMTYgc2VjLCA1NjQgb2YgdGhlc2UKCiAgZWxhcHNlZFRp bWUgc2V0MSA9IGFsbFRyaWFuZ3VsYXRpb25zKEEsIEZpbmU9PnRydWUsIENvbm5lY3RlZFRvUmVn dWxhcj0+dHJ1ZSk7IC0tIDYuOSBzZWMsIDQwOCAgQ09SUkVDVAogIGVsYXBzZWRUaW1lIHNldDIg PSBhbGxUcmlhbmd1bGF0aW9ucyhBLCBGaW5lPT50cnVlLCBDb25uZWN0ZWRUb1JlZ3VsYXI9PmZh bHNlKTsgLS0gMTE4IHNlYywgNDQ4IFdST05HCiAgZWxhcHNlZFRpbWUgc2V0MyA9IGFsbFRyaWFu Z3VsYXRpb25zKEEsIEZpbmU9PmZhbHNlLCBDb25uZWN0ZWRUb1JlZ3VsYXI9PnRydWUpOyAtLSA4 LjEgc2VjLCA1MjAgQ09SUkVDVAogIGVsYXBzZWRUaW1lIHNldDQgPSBhbGxUcmlhbmd1bGF0aW9u cyhBLCBGaW5lPT5mYWxzZSwgQ29ubmVjdGVkVG9SZWd1bGFyPT5mYWxzZSk7IC0tIDExNiBzZWMu ICA1NjQgb2YgdGhlc2UuIFdST05HCgogIGVsYXBzZWRUaW1lIHNldDUgPSBhbGxUcmlhbmd1bGF0 aW9ucyhBLCBGaW5lPT50cnVlLCBDb25uZWN0ZWRUb1JlZ3VsYXI9PnRydWUsIFJlZ3VsYXJPbmx5 PT5mYWxzZSk7IC0tIC4xNSBzZWMsIDQ0OCBvZiB0aGVzZQogIGVsYXBzZWRUaW1lIHNldDYgPSBh bGxUcmlhbmd1bGF0aW9ucyhBLCBGaW5lPT50cnVlLCBDb25uZWN0ZWRUb1JlZ3VsYXI9PmZhbHNl LCBSZWd1bGFyT25seT0+ZmFsc2UpOyAtLSAxMTYgc2VjLCA0NDggb2YgdGhlc2UKICBlbGFwc2Vk VGltZSBzZXQ3ID0gYWxsVHJpYW5ndWxhdGlvbnMoQSwgRmluZT0+ZmFsc2UsIENvbm5lY3RlZFRv UmVndWxhcj0+dHJ1ZSwgUmVndWxhck9ubHk9PmZhbHNlKTsgLS0gLjIyIHNlYywgNTY0IG9mIHRo ZXNlCiAgZWxhcHNlZFRpbWUgc2V0OCA9IGFsbFRyaWFuZ3VsYXRpb25zKEEsIEZpbmU9PmZhbHNl LCBDb25uZWN0ZWRUb1JlZ3VsYXI9PmZhbHNlLCBSZWd1bGFyT25seT0+ZmFsc2UpOyAtLSAxMTcg c2VjLCA1NjQgb2YgdGhlc2UKCiAgYXNzZXJ0KChuMSxuMixuMyxuNCxuNSxuNixuNyxuOCkgPT0g KCNzZXQxLCAjc2V0MiwgI3NldDMsICNzZXQ0LCAjc2V0NSwgI3NldDYsICNzZXQ3LCAjc2V0OCkp CiAgZmluZVRyaXMgPSBzZWxlY3Qoc2V0OCwgeCAtPiAjIHVuaXF1ZSBmbGF0dGVuIHggPT0gbnVt Q29sdW1ucyBBKTsKICByZWd1bGFyRmluZVRyaXMgPSBzZWxlY3QoZmluZVRyaXMsIHggLT4gaXNS ZWd1bGFyVHJpYW5ndWxhdGlvbihBLCB4KSk7CiAgcmVndWxhclRyaXMgPSBzZWxlY3Qoc2V0OCwg eCAtPiBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKEEsIHgpKTsKCiAgYXNzZXJ0KCNyZWd1bGFyRmlu ZVRyaXMgPT0gNDA4KQogIGFzc2VydCgjZmluZVRyaXMgPT0gNDQ4KQogIGFzc2VydCgjcmVndWxh clRyaXMgPT0gNTIwKSAgCgogIGFzc2VydChzZXQgc2V0NSA9PT0gc2V0IHNldDYpIC0tIGluIGdl bmVyYWwsIHRoaXMgZG9lc24ndCBuZWVkIHRvIGhvbGQsIGJ1dCBpdCBpcyByYXJlIGZvciB0aGlz IHRvIGJlIHRoZSBjYXNlCiAgYXNzZXJ0KHNldCBzZXQ3ID09PSBzZXQgc2V0OCkgLS0gc2FtZTog cmFyZSBmb3IgdGhpcyB0byBub3QgaG9sZAogIGFzc2VydChzZXQgc2V0NCA9PT0gc2V0IHNldDgp IC0tIHRoaXMgb25lIHNob3VsZCBub3QgYmUgdHJ1ZT8gIAogIGFzc2VydChzZXQgc2VsZWN0KHNl dDcsIHggLT4gaXNSZWd1bGFyVHJpYW5ndWxhdGlvbihBLCB4KSkgPT09IHNldCBzZXQzKQogIGFz c2VydChzZXQgc2VsZWN0KHNldDUsIHggLT4gaXNSZWd1bGFyVHJpYW5ndWxhdGlvbihBLCB4KSkg PT09IHNldCBzZXQxKQoKICBzZXQ1XzAKICBmb3IgdHJpIGluIHNldDUgbGlzdCBuYWl2ZUlzVHJp YW5ndWxhdGlvbihBLCB0cmkpCgogIG51bUZsaXBzKEEsIHNldDVfMCkgIAogIGZsaXBzKEEsIHNl dDVfMCkKICAtLSBub3cgbGV0J3Mgc2VlIGFib3V0IHRoZSBuYWl2ZSB3YXkgb2YgZ2V0dGluZyBy ZWd1bGFyIHN0YXIgdHJpYW5ndWxhdGlvbnMgCiAgLS0gaS5lLiB3ZSBhZGQgaW4gdGhlIG9yaWdp bgogIAogIHB0czEgPSAge3stMSwwLDAsLTF9LHstMSwwLDEsLTF9LHstMSwwLDEsMH0sey0xLDEs MCwtMX0sey0xLDEsMCwwfSx7LTEsMSwxLDJ9LHsxLC0xLDAsLTF9LHsxLDAsLTEsMX0sezEsLTEs LTEsLTF9LHswLDAsMCwtMX0sezAsMCwwLDB9fQogIEExID0gdHJhbnNwb3NlIG1hdHJpeCBwdHMx CiAgLS1lbGFwc2VkVGltZSB0cmlzMSA9IGFsbFRyaWFuZ3VsYXRpb25zKEExLCBGaW5lPT50cnVl LCBDb25uZWN0ZWRUb1JlZ3VsYXI9PnRydWUsIFJlZ3VsYXJPbmx5PT5mYWxzZSk7IC0tIAogIGVs YXBzZWRUaW1lIHRyaXMxID0gYWxsVHJpYW5ndWxhdGlvbnMoQTEsIEZpbmU9PmZhbHNlLCBDb25u ZWN0ZWRUb1JlZ3VsYXI9PnRydWUsIFJlZ3VsYXJPbmx5PT5mYWxzZSk7IC0tIAogIGZpbmVUcmlz MSA9IHNlbGVjdCh0cmlzMSwgeCAtPiAjIHVuaXF1ZSBmbGF0dGVuIHggPT0gbnVtQ29sdW1ucyBB MSk7CiAgcmVnVHJpczEgPSBzZWxlY3QodHJpczEsIHggLT4gaXNSZWd1bGFyVHJpYW5ndWxhdGlv bihBMSwgeCkpOyAgCiAgZmluZVJlZ1RyaXMxID0gc2VsZWN0KHJlZ1RyaXMxLCB4IC0+ICMgdW5p cXVlIGZsYXR0ZW4geCA9PSBudW1Db2x1bW5zIEExKTsKICBzdGFyczEgPSBzZWxlY3QodHJpczEs IHggLT4gYWxsKHgsIHgxIC0+IG1lbWJlcigxMCwgeDEpKSk7IC0tIDEwMCBoZXJlCiAgc3RhcnNG aW5lMSA9IHNlbGVjdChzdGFyczEsIHggLT4gIyB1bmlxdWUgZmxhdHRlbiB4ID09IG51bUNvbHVt bnMgQTEpOwogIFJTVCA9IHNlbGVjdChzdGFyczEsIHggLT4gaXNSZWd1bGFyVHJpYW5ndWxhdGlv bihBMSx4KSk7IC0tIDgwIGhlcmUuLi4KICBGU1JUID0gc2VsZWN0KHN0YXJzRmluZTEsIHggLT4g aXNSZWd1bGFyVHJpYW5ndWxhdGlvbihBMSx4KSk7IC0tIDQ4IGhlcmUuLi4hCgoKICB1bmlxdWUg Zm9yIHRyaSBpbiBzZXQ1IGxpc3QgKAogICAgICB0cmkxIDo9IGZpbmVTdGFyVHJpYW5ndWxhdGlv bihBLCB0cmkpOwogICAgICBuZXd0cmkgOj0gZm9yIHQgaW4gdHJpMSBsaXN0IGFwcGVuZCh0LCAx MCk7CiAgICAgIG5ld3RyaQogICAgICApOwogIHNlbGVjdChvbywgdHJpIC0+IGlzUmVndWxhclRy aWFuZ3VsYXRpb24oQTEsIHRyaSkpICAKCiAgLS0gbGV0J3MgdGVzdCB0aGlzIG9uZSBmb3IgYmVp bmcgYSB0cmlhbmd1bGF0aW9uOgogIG9BID0gb3JpZW50ZWRDaXJjdWl0cyBBCiAgdHJpID0gc2V0 NV8zCiAgdGFsbHkgZmxhdHRlbiBmb3IgdCBpbiB0cmkgbGlzdCBzdWJzZXRzKHQsNCkKICBmb3Ig eiBpbiBvQSBsaXN0ICgKICAgICAgIyBzZWxlY3QodHJpLCB0IC0+IGlzU3Vic2V0KHpfMCwgdCkp LAogICAgICAjIHNlbGVjdCh0cmksIHQgLT4gaXNTdWJzZXQoel8xLCB0KSkKICAgICAgKQogIC0t IHRvZG86CiAgLS0gMS4gcm91dGluZSB0byBjaGVjayB0aGF0IGEgdHJpYW5ndWxhdGlvbiBpcyBh IHRyaWFuZ3VsYXRpb24KICAtLSAyLiByb3V0aW5lIHRvIHR1cm4gYSByZWd1bGFyLCBmaW5lIHRy aWFuZ3VsYXRpb24sIGludG8gYSBzdGFyIChmaW5lLCByZWd1bGFyKSB0cmlhbmd1bGF0aW9uLiBI b3cgZ2VuZXJhbCBpcyB0aGlzPyBET05FLCBJIHRoaW5rLgogIC0tIDMuIHBlcmZvcm0gYmlzdGVs bGFyIGZsaXBzIHRvIGdldCBuZXcgdHJpYW5ndWxhdGlvbnMuCi8vLwoKLy8vCiAgcmVzdGFydAog IG5lZWRzUGFja2FnZSAiUmVmbGV4aXZlUG9seXRvcGVzREIiCiAgbmVlZHNQYWNrYWdlICJUb3Bj b20iICAKICBuZWVkc1BhY2thZ2UgIlBvbHloZWRyYSIKIHN0ciA9ICI0IDE4ICBNOjUzIDE4IE46 MTEgMTAgSDo2LDQ1IFstNzhdCiAgICAgICAgMSAgIDAgICAwICAtMiAgIDAgICAyICAgMSAgIDMg IC0yICAgMiAgLTIgICAyICAgMyAgLTEgICAwICAtMiAgIDAgIC0xCiAgICAgICAgMCAgIDEgICAw ICAgMiAgIDAgICAwICAgMSAgLTIgICAxICAtMiAgIDAgICAwICAtMSAgIDAgIC0yICAgMCAgLTIg IC0xCiAgICAgICAgMCAgIDAgICAxICAgMSAgIDAgIC0xICAtMSAgLTIgICAyICAtMiAgIDAgIC0y ICAtMiAgIDIgIC0xICAgMiAgIDEgICAyCiAgICAgICAgMCAgIDAgICAwICAgMCAgIDEgIC0xICAt MSAgIDAgIC0xICAgMSAgIDEgIC0xICAtMSAgLTEgICAyICAtMSAgIDAgIC0xIgogc3RyID0gIjQg MTIgIE06NTAgMTIgTjoxMSA5IEg6Niw0NCBbLTc2XQogICAgICAgIDEgICAxICAgMSAgLTEgIC0x ICAgMCAgIDIgIC0zICAtMiAgIDMgIC01ICAgMQogICAgICAgIDAgICAyICAgMCAgLTIgICAwICAg MCAgIDEgIC0zICAtMiAgIDQgIC01ICAgNAogICAgICAgIDAgICAwICAgMiAgIDAgIC0yICAgMCAg IDIgIC0zICAgMCAgIDIgIC0zICAgMAogICAgICAgIDAgICAwICAgMCAgIDAgICAwICAgMSAgLTEg ICAxICAgMSAgLTIgICAxICAtMiIKIEEgPSBtYXRyaXhGcm9tU3RyaW5nIGxhc3QgZmlyc3QgcGFy c2VLUyBzdHIKIEEgPSBtYXRyaXggZmlyc3Qga3JldXplclNrYXJrZSBzdHIKIFAgPSBjb252ZXhI dWxsIEEKIFAyID0gcG9sYXIgUAogQTEgPSB2ZXJ0aWNlcyBQMgogTFAgPSBtYXRyaXh7c2VsZWN0 KGxhdHRpY2VQb2ludHMgUDIsIHggLT4geCAhPSAwKX0KIG51bVRyaWFuZ3VsYXRpb25zKExQLCBG aW5lID0+IHRydWUpCiBhbGxUcmlhbmd1bGF0aW9ucyhMUCwgRmluZT0+dHJ1ZSk7CiBudW1Ucmlh bmd1bGF0aW9ucyhMUCkKIGFsbFRyaWFuZ3VsYXRpb25zKExQKTsKCi8vLwoKZW5kLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKcmVzdGFydAp1bmlu c3RhbGxQYWNrYWdlICJUb3Bjb20iCnJlc3RhcnQKY2hlY2sgIlRvcGNvbSIKcmVzdGFydAppbnN0 YWxsUGFja2FnZSAiVG9wY29tIgpuZWVkc1BhY2thZ2UgIlRvcGNvbSIKCgpURVNUIC8vLyAKICAt LSBwb2ludHMyY2hpcm8KICB0b3BwYXRoID0gIi9Vc2Vycy9taWtlL3NyYy9NMi1tYXN0ZXIvTTIv QlVJTEQvZGFuL2J1aWxkcy50bXAvYXMtbXRoLWluZGlnby5sb2NhbC1tYXN0ZXIvbGlicmFyaWVz L3RvcGNvbS9idWlsZC90b3Bjb20tMC4xNy44L3NyYy8iCiAgQSA9IHRyYW5zcG9zZSBtYXRyaXgg e3stMSwtMSwxfSx7LTEsMSwxfSx7MSwtMSwxfSx7MSwxLDF9LHswLDAsMX19CiAgdHJpID0ge3sw LCAyLCA0fSwgezIsIDMsIDR9LCB7MCwgMSwgNH0sIHsxLCAzLCA0fX0KICBydW4gKHRvcHBhdGh8 Ii9wb2ludHMyY2hpcm8ifCIgLWgiKQogICJ0b3Bjb21mb28uaW4iIDw8IHRvcGNvbVBvaW50cyhB LCBIb21vZ2VuaXplPT5mYWxzZSkgPDwgZW5kbCA8PCBjbG9zZTsKICBjaGlybyA9IGdldCAoIiEi fHRvcHBhdGh8Ii9wb2ludHMyY2hpcm8ifCIgPHRvcGNvbWZvby5pbiIpCiAgI2NoaXJvCiAgY2hp cm8yID0gIjUsMzpcbiIgfCAoY29uY2F0ZW5hdGUgZm9yIHMgaW4gc29ydCBzdWJzZXRzKDUsMykg bGlzdCAoCiAgICAgIGQgOj0gZGV0IEFfczsKICAgICAgaWYgZCA+IDAgdGhlbiAiKyIgZWxzZSBp ZiBkID09IDAgdGhlbiAiMCIgZWxzZSAiLSIKICAgICAgKSkgfCAiXG4iCiAgY2hpcm8gPT0gY2hp cm8yCiAgLS0gbm90ZXM6IGEgY2hpcm90b3BlIGZvciB0b3Bjb206CiAgLS0gIDUsMzogIChudW1i ZXIgb2YgdmVydGljZXMsIGRpbSkKICAtLSAgYSBzdHJpbmcgb2YgIi0iLCIrIiwiMCIsIG1heWJl IGN1dCBvdmVyIGEgbnVtYmVyIG9mIGxpbmVzLgogIC0tIHNob3VsZCB3ZSBtYWtlIGEgdHlwZSBv dXQgb2YgdGhpcyAoc28gd2UgY2FuIHJlYWQgYW5kIHdyaXRlIGl0IHRvIGEgZmlsZSkKCiAgLS0g Y2hpcm8yY2lyY3VpdHMKICAidG9wY29tZm9vLmluIiA8PCBjaGlybyA8PCBlbmRsIDw8IFtdIDw8 IGVuZGwgPDwgY2xvc2U7CiAgY2lyY3MgPSBnZXQgKCIhInx0b3BwYXRofCIvY2hpcm8yY2lyY3Vp dHMifCIgIDx0b3Bjb21mb28uaW4iKQogIGNvY2lyY3MgPSBnZXQgKCIhInx0b3BwYXRofCIvY2hp cm8yY29jaXJjdWl0cyJ8IiAgPHRvcGNvbWZvby5pbiIpCiAgZHJvcChkcm9wKGNpcmNzLCAyKSwg LTEpCiAgb28vdmFsdWUKCmNoaXJvID0gIjUsIDM6IgoKcjEyJ2NoaXJvID0gIjEyLCA0OgotKy0t KysrLS0tKystLS0rKy0rLS0tKystKysrLS0tLS0rKy0tKystKysrKy0tKystLS0rKystKysrLS0r LS0tKystLS0rKy0tKystKysrKwotLSstLS0rKy0rKystLSsrKy0tKystLSstLS0tKy0rKystLSsr Ky0tKystLSstLS0tKy0tLSsrLS0rKy0rKysrLSsrLS0rLS0tLS0rLS0tLQotKystLS0rKy0tLSsr Ky0rKystLSstLS0rKy0tLSsrLS0rKy0rKysrLS0rLS0tKystKysrLS0rKystLSsrLS0rLS0tLSst KysrLS0rKystLQorKy0tKy0tLS0rLS0tKystLSsrLSsrKystLS0rKy0rKysrKy0rKysrKy0tKysr Ky0tLSsrLSsrKy0tKysrLS0rKy0tKy0tLS0rLSsrKy0tKworKy0tKystLSstLS0tKy0tLSsrLS0r Ky0rKysrLS0tKystKysrKystKysrKystLSsrKy0tLSsrLS0tKystLSsrLSsrKystKysrLS0rKy0t KwotLS0tKysrLS0rLS0tLS0rLS0tLS0rKy0tKysrLS0rKy0tKy0tLS0rKystLSstLS0tLSstLS0t LSsrLS0tLSsrLSsrKysrLSsrKysrLS0rKwotLS0tLS0tLSsrLS0rKy0KIgogIGNoaXJvID0gcjEy J2NoaXJvCiAgLS0gY2hpcm8yYWxsdHJpYW5ncywgY2hpcm8ybmFsbHRyaWFuZ3MKICAidG9wY29t Zm9vLmluIiA8PCAiNSwgMzoiIDw8IGVuZGwgPDwgY2hpcm8gPDwgZW5kbCA8PCBbXSA8PCBlbmRs IDw8IGNsb3NlOwogICJ0b3Bjb21mb28uaW4iIDw8IGNoaXJvIDw8IFtdIDw8IGVuZGwgPDwgY2xv c2U7CiAgZ2V0ICgiISJ8dG9wcGF0aHwiL2NoaXJvMnBsYWNpbmd0cmlhbmcifCIgLXYgPHRvcGNv bWZvby5pbiIpCiAgZ2V0ICgiISJ8dG9wcGF0aHwiL2NoaXJvMmNpcmN1aXRzInwiIDx0b3Bjb21m b28uaW4iKQogIGdldCAoIiEifHRvcHBhdGh8Ii9jaGlybzJjb2NpcmN1aXRzInwiIDx0b3Bjb21m b28uaW4iKQogIGdldCAoIiEifHRvcHBhdGh8Ii9jaGlybzJhbGx0cmlhbmdzInwiIDx0b3Bjb21m b28uaW4iKQogIGdldCAoIiEifHRvcHBhdGh8Ii9jaGlybzJudHJpYW5ncyJ8IiA8dG9wY29tZm9v LmluIikKICBnZXQgKCIhInx0b3BwYXRofCIvY2hpcm8yZmluZXRyaWFuZyJ8IiA8dG9wY29tZm9v LmluIikKICBnZXQgKCIhInx0b3BwYXRofCIvY2hpcm8yZmluZXRyaWFuZ3MifCIgPHRvcGNvbWZv by5pbiIpIC0tIHdoYXQgaXMgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGhlcmU/PwogIGdldCAo IiEifHRvcHBhdGh8Ii9jaGlybzJuZmluZXRyaWFuZ3MifCIgLXYgPHRvcGNvbWZvby5pbiIpCiAg Ci8vLwoKVEVTVCAvLy8KICByZXN0YXJ0CiAgZGVidWcgbmVlZHNQYWNrYWdlICJUb3Bjb20iCiAg bmVlZHNQYWNrYWdlICJSZWZsZXhpdmVQb2x5dG9wZXNEQiIKICBuZWVkc1BhY2thZ2UgIlN0cmlu Z1RvcmljcyIKICBwb2x5dG9wZXMgPSBrcmV1emVyU2thcmtlKDUwLCBMaW1pdD0+MTApOwogIHRv cGUgPSBwb2x5dG9wZXNfNQogIEEgPSBtYXRyaXggdG9wZQogIFAgPSBjb252ZXhIdWxsIEEKICBQ MiA9IHBvbGFyIFAKICBBID0gbWF0cml4e2xhdHRpY2VQb2ludHMgUDJ9CgogIExQID0gZHJvcChs YXR0aWNlUG9pbnRMaXN0IFAyLCAtMSk7CiAgQSA9IHRyYW5zcG9zZSBtYXRyaXggTFA7CiAgZGVi dWdMZXZlbCA9IDYKICBlbGFwc2VkVGltZSB0cmkgPSByZWd1bGFyRmluZVRyaWFuZ3VsYXRpb24g QTsKICAKICAtLSBYWFgKICBhdWdtZW50IEEKICAidG9wY29tZm9vLmluIiA8PCB0b3Bjb21Qb2lu dHMoYXVnbWVudCBBLCBIb21vZ2VuaXplPT5mYWxzZSkgPDwgZW5kbCA8PCBjbG9zZTsKICBjaGly byA9IGdldCAoIiEifHRvcHBhdGh8Ii9wb2ludHMyY2hpcm8ifCIgPHRvcGNvbWZvby5pbiIpCgog ICJ0b3Bjb21mb28uaW4iIDw8IGNoaXJvIDw8ICJbXSIgPDwgZW5kbCA8PCBjbG9zZTsKICBnZXQg KCIhInx0b3BwYXRofCIvY2hpcm8yY2lyY3VpdHMifCIgPHRvcGNvbWZvby5pbiIpCiAgZ2V0ICgi ISJ8dG9wcGF0aHwiL2NoaXJvMm50cmlhbmdzInwiIDx0b3Bjb21mb28uaW4iKQogIC0tZ2V0ICgi ISJ8dG9wcGF0aHwiL2NoaXJvMmFsbHRyaWFuZ3MifCIgIDx0b3Bjb21mb28uaW4iKQogIGdldCAo IiEifHRvcHBhdGh8Ii9jaGlybzJjb2NpcmN1aXRzInwiIDx0b3Bjb21mb28uaW4iKSAgICAKLy8v CgpURVNUIC8vLwotLSBob3cgdG8gY2hlY2sgYSB0cmlhbmd1bGF0aW9uPyAgSSBkb24ndCB0aGlu ayB0aGF0IFRvcGNvbSBoYXMgdGhpcyBpbXBsZW1lbnRlZCBmb3IgZ2VuZXJhbCB1c2UuCi0qCiAg cmVzdGFydAogIGRlYnVnIG5lZWRzUGFja2FnZSAiVG9wY29tIgoqLQogIC0tIHRlc3Qgb2YgaXNS ZWd1bGFyVHJpYW5ndWxhdGlvbgogIHRvcHBhdGggPSAiL1VzZXJzL21pa2Uvc3JjL00yLW1hc3Rl ci9NMi9CVUlMRC9kYW4vYnVpbGRzLnRtcC9hcy1tdGgtaW5kaWdvLmxvY2FsLW1hc3Rlci9saWJy YXJpZXMvdG9wY29tL2J1aWxkL3RvcGNvbS0wLjE3Ljgvc3JjLyIKICBBID0gdHJhbnNwb3NlIG1h dHJpeCB7ey0xLC0xLDF9LHstMSwxLDF9LHsxLC0xLDF9LHsxLDEsMX0sezAsMCwxfX0KICBiYWR0 cmkgPSB7ezAsIDIsIDR9LCB7MiwgMywgNH0sIHswLCAxLCA0fSwgezEsIDJ9fQogIGRlYnVnTGV2 ZWwgPSA2CgogIC0tIGEgcmVndWxhciB0cmlhbmd1bGF0aW9uCiAgQSA9IHRyYW5zcG9zZSBtYXRy aXgge3swLDN9LHswLDF9LHstMSwtMX0sezEsLTF9LHstNCwtMn0sezcsLTJ9fQogIHRyaSA9IHt7 MCwxLDJ9LCB7MSwzLDV9LCB7MiwzLDR9LAogICAgICAgICB7MCwxLDV9LCB7MCwyLDR9LCB7Myw0 LDV9LAogICAgICAgICB7MSwyLDN9fQogICJ0b3Bjb21mb28uaW4iIDw8IHRvcGNvbVBvaW50cyhB LCBIb21vZ2VuaXplPT50cnVlKSA8PCBlbmRsIDw8ICJbXSIgPDwgZW5kbCA8PCB0cmkgPDwgZW5k bCA8PCBjbG9zZTsKICBydW4gKHRvcGNvbXBhdGh8ImNoZWNrcmVndWxhcml0eSJ8IiAtLWhlaWdo dHMgPHRvcGNvbWZvby5pbiA+dG9wY29tZm9vLm91dCIpICAKCiAgLS0gcG9pbnRzMmNoaXJvCiAg InRvcGNvbWZvby5pbiIgPDwgdG9wY29tUG9pbnRzKEEsIEhvbW9nZW5pemU9PmZhbHNlKSA8PCBl bmRsIDw8ICJbXSIgPDwgZW5kbCA8PCBiYWR0cmkgPDwgZW5kbCA8PCBjbG9zZTsKICBwcmludCAo dG9wcGF0aHwiL3BvaW50czJhbGx0cmlhbmdzInwiIC0tY2hlY2t0cmlhbmcgLXYgPHRvcGNvbWZv by5pbiIpIAoKCiAgQSA9IHRyYW5zcG9zZSBtYXRyaXgge3swLDN9LHswLDF9LHstMSwtMX0sezEs LTF9LHstNCwtMn0sezQsLTJ9fQogIHRyaSA9IHt7MCwxLDJ9LCB7MSwzLDV9LCB7MiwzLDR9LAog ICAgICAgICB7MCwxLDV9LCB7MCwyLDR9LCB7Myw0LDV9LAogICAgICAgICB7MSwyLDN9fQogICJ0 b3Bjb21mb28uaW4iIDw8IHRvcGNvbVBvaW50cyhBLCBIb21vZ2VuaXplPT50cnVlKSA8PCBlbmRs IDw8ICJbXSIgPDwgZW5kbCA8PCB0cmkgPDwgZW5kbCA8PCBjbG9zZTsKICBydW4gKHRvcGNvbXBh dGh8ImNoZWNrcmVndWxhcml0eSJ8IiAtLWhlaWdodHMgPHRvcGNvbWZvby5pbiA+dG9wY29tZm9v Lm91dCIpCiAgYXNzZXJ0IG5vdCBpc1JlZ3VsYXJUcmlhbmd1bGF0aW9uKEEsdHJpKQoKLy8vCgoK ZW5kLS0KCnJlc3RhcnQKdW5pbnN0YWxsUGFja2FnZSAiVG9wY29tIgpyZXN0YXJ0Cm5lZWRzUGFj a2FnZSAiVG9wY29tIgppbnN0YWxsUGFja2FnZSAiVG9wY29tIgpyZXN0YXJ0CmNoZWNrICJUb3Bj b20iCnZpZXdIZWxwCgovLy8KLS0gZ2VuZXJhdGUgZXhhbXBsZXMgdG8gdXNlIGZvciB0aGlzIHBh Y2thZ2UKLS0gZnJvbSByZWZsZXhpdmUgcG9seXRvcGVzIG9mIGRpbSA0CiAgcmVzdGFydAogIG5l ZWRzUGFja2FnZSAiU3RyaW5nVG9yaWNzIgoKICBzdHIgPSBnZXRLcmV1emVyU2thcmtlKDEwLCBM aW1pdD0+NSkKICBzdHIgPSBnZXRLcmV1emVyU2thcmtlKDIwLCBMaW1pdD0+NSkKICBzdHIgPSBn ZXRLcmV1emVyU2thcmtlKDMwLCBMaW1pdD0+NSkKICBwb2x5dG9wZXMgPSBwYXJzZUtTIHN0cgog IHRvcGUgPSBwb2x5dG9wZXNfNF8xCiAgQSA9IG1hdHJpeEZyb21TdHJpbmcgdG9wZQogIFAgPSBj b252ZXhIdWxsIEEKICBQMiA9IHBvbGFyIFAKICBMUCA9IGRyb3AobGF0dGljZVBvaW50TGlzdCBQ MiwgLTEpCiAgQTEgPSB0cmFuc3Bvc2UgbWF0cml4IExQCiAgQTIgPSB0cmFuc3Bvc2UgbWF0cml4 IGxhdHRpY2VQb2ludExpc3QgUDIKICB0cmkgPSByZWd1bGFyRmluZVRyaWFuZ3VsYXRpb24gQTEK ICB0cmkyID0gcmVndWxhckZpbmVUcmlhbmd1bGF0aW9uIEEyCiAgI3RyaQogICN0cmkyCiAgZWxh cHNlZFRpbWUgY2hpcm8xID0gY2hpcm90b3BlIEExOwogIGVsYXBzZWRUaW1lIGNoaXJvMiA9IGNo aXJvdG9wZSBBMjsKICBlbGFwc2VkVGltZSAjIG9yaWVudGVkQ2lyY3VpdHMgY2hpcm8xCiAgZWxh cHNlZFRpbWUgIyBvcmllbnRlZENpcmN1aXRzIGNoaXJvMgogIGVsYXBzZWRUaW1lICMgb3JpZW50 ZWRDb2NpcmN1aXRzIGNoaXJvMQogIGVsYXBzZWRUaW1lICMgb3JpZW50ZWRDb2NpcmN1aXRzIGNo aXJvMgogIChzZWxlY3Qob3JpZW50ZWRDb2NpcmN1aXRzIEEyLCBmIC0+ICNmIzAgPT0gMCBvciAj ZiMxID09IDApKS9maXJzdAogIG5ldExpc3QgYW5ub3RhdGVkRmFjZXMgUDIgIAogIHRyaTIKICAt LSBmaW5lOgogIGFzc2VydChzb3J0IHVuaXF1ZSBmbGF0dGVuIHRyaTIgPT0gdG9MaXN0ICgwLi4x NCkpCiAgd2FsbHMgPSB0cmkyLyh4IC0+IHN1YnNldHMoeCwgI3gtMSkpLy9mbGF0dGVuCiAgbmZh Y2V0cyA9IHRhbGx5IHdhbGxzCiAgZmFjcyA9IChzZWxlY3QoKGFubm90YXRlZEZhY2VzIFAyKSwg eCAtPiB4XzAgPT0gMykpLyh4IC0+IHgjMikKICB3YWxscyA9IHBhcnRpdGlvbihrIC0+IG5mYWNl dHMjaywga2V5cyBuZmFjZXRzKQogIGZvciB3IGluIHdhbGxzIzEgbGlzdCAoCiAgICAgICMgc2Vs ZWN0KGZhY3MsIGYgLT4gaXNTdWJzZXQodywgZikpCiAgICAgICkKICBmb3IgdyBpbiB3YWxscyMy IGxpc3QgKAogICAgICAjIHNlbGVjdChmYWNzLCBmIC0+IGlzU3Vic2V0KHcsIGYpKQogICAgICAp CiAgLS0gY2hlY2sgb3ZlcmxhcHMgb2YgZWxlbWVudHMgb2YgdHJpMjoKICBDID0gb3JpZW50ZWRD aXJjdWl0cyBBMjsKICBlbGFwc2VkVGltZSBmb3IgYyBpbiBDIGxpc3QgKAogICAgICB2YWwxIDo9 IHNlbGVjdCh0cmkyLCB4IC0+IGlzU3Vic2V0KGNfMCwgeCkpOwogICAgICB2YWwyIDo9IHNlbGVj dCh0cmkyLCB4IC0+IGlzU3Vic2V0KGNfMSwgeCkpOwogICAgICBpZiAjdmFsMSA+IDAgYW5kICN2 YWwyID4gMCB0aGVuIHByaW50IChjLCB2YWwxLCB2YWwyKTsKICAgICAgKGMsICN2YWwxLCAjdmFs MikpOwogIAogIHRyaV8wCiAgCi8vLwogIApkb2MgLy8vCktleQpIZWFkbGluZQpVc2FnZQpJbnB1 dHMKT3V0cHV0cwpDb25zZXF1ZW5jZXMKRGVzY3JpcHRpb24KICBUZXh0CiAgRXhhbXBsZQogIENv ZGUKICBQcmUKQ2F2ZWF0ClNlZUFsc28KLy8vCgo= --00000000000080a3b105e054136f--