From unknown Wed Jun 18 00:26:09 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#69344 <69344@debbugs.gnu.org> To: bug#69344 <69344@debbugs.gnu.org> Subject: Status: ELPA process collapses Markdown fenced code block into 1 line for HTML page Reply-To: bug#69344 <69344@debbugs.gnu.org> Date: Wed, 18 Jun 2025 07:26:09 +0000 retitle 69344 ELPA process collapses Markdown fenced code block into 1 line= for HTML page reassign 69344 emacs submitter 69344 Okamsn severity 69344 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Fri Feb 23 21:17:25 2024 Received: (at submit) by debbugs.gnu.org; 24 Feb 2024 02:17:25 +0000 Received: from localhost ([127.0.0.1]:38091 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rdhbO-0004aC-E7 for submit@debbugs.gnu.org; Fri, 23 Feb 2024 21:17:25 -0500 Received: from lists.gnu.org ([209.51.188.17]:50088) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rdhbJ-0004Zs-LP for submit@debbugs.gnu.org; Fri, 23 Feb 2024 21:17:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rdhav-0008Ec-8H for bug-gnu-emacs@gnu.org; Fri, 23 Feb 2024 21:16:53 -0500 Received: from mail-4316.protonmail.ch ([185.70.43.16]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rdhao-0001HT-Fd for bug-gnu-emacs@gnu.org; Fri, 23 Feb 2024 21:16:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1708740994; x=1709000194; bh=yceN7kvdGv1TBKbMeOQmOpJWxL+KjPitJ6HG30Goj20=; h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=OX0YzZE3dWfG/PqhKmWrpY2vOjBnVgHy43FTulWbxMR3b/LD6cvaCxGQmFPBQ8nQ2 tUS+PkDjitLssfLqCFwu8UMMdI1OmCq6UU+0SHD1P6QMVORZaDqmrPyK9xZthw8kDT /yHLo3ugdCqvP7oztR+a1+Mg/HM5YCJDphnj5wPOT+MEctDHxfgD3DZ68OyvsBdbFi 6KPtBwSXdILknBjBCMKmKlNIe9PEJ4K3ClM19jdxSEXVK1n1rmlauhLYKtEBU/2XEf VUp8m/lXwh/PZ4Yef+9wSfYJlSlbY9Xvin1vT0zrmYz1TrCXtWrkzUzY7zk/fF09zD dhEe/yhwOLabg== Date: Sat, 24 Feb 2024 02:16:29 +0000 To: bug-gnu-emacs@gnu.org From: Okamsn Subject: ELPA process collapses Markdown fenced code block into 1 line for HTML page Message-ID: <07ce193d-06b6-4ab8-b1dc-2ae349daf8d2@protonmail.com> Feedback-ID: 25935600:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_wISXFCJSVuT9BYs9H3anblqkBRKbpdkuMj6mbDGG4" Received-SPF: pass client-ip=185.70.43.16; envelope-from=okamsn@protonmail.com; helo=mail-4316.protonmail.ch X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 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, NUMERIC_HTTP_ADDR=1.242, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_HTML_ATTACH=0.01, T_REMOTE_IMAGE=0.01, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) This is a multi-part message in MIME format. --b1_wISXFCJSVuT9BYs9H3anblqkBRKbpdkuMj6mbDGG4 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello, While working on adding my package to Non-GNU ELPA, I noticed that the=20 `make build/loopy` process collapsed the fenced code blocks in the file=20 "CHANGELOG.md" into 1 line in the HTML output. I have attached the Markdown file "CHANGELOG.md" and the outputted file=20 "loopy.html". The squashed code blocks can be seen towards the end of=20 the HTML file when viewed in EWW and Chromium. Thank you. --b1_wISXFCJSVuT9BYs9H3anblqkBRKbpdkuMj6mbDGG4 Content-Type: text/html; charset=UTF-8; name=loopy.html Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=loopy.html PCFET0NUWVBFIEhUTUwgUFVCTElDPgo8aHRtbCBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj4KICAg IDxoZWFkPgogICAgICAgIDx0aXRsZT5Ob25HTlUgRUxQQSAtIGxvb3B5PC90aXRsZT4KICAgICAg ICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hh cnNldD1VVEYtOCI+CiAgICAgICAgPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiB0eXBlPSJpbWFn ZS9wbmciIGhyZWY9Ii4uL2Zhdmljb24ucG5nIj4KICAgICAgICA8bGluayByZWw9InN0eWxlc2hl ZXQiIGhyZWY9Ii8vY29kZS5jZG4ubW96aWxsYS5uZXQvZm9udHMvZmlyYS5jc3MiPgogICAgICAg IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL2xheW91dC5j c3MiPgogICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxl PTEuMCxtYXhpbXVtLXNjYWxlPTEuMCx3aWR0aD1kZXZpY2Utd2lkdGgiIC8+CiAgICA8L2hlYWQ+ CiAgICA8Ym9keT4KCiAgICAgICAgPGRpdiBjbGFzcz0id3JhcHBlciI+CgogICAgICAgICAgICA8 ZGl2IGNsYXNzPSJoZWFkZXIgc21hbGwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29u dGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICA8aDE+PGEgaHJlZj0iaW5kZXguaHRtbCI+Tm9u R05VIEVMUEE8L2E+IC0gbG9vcHk8L2gxPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg ICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KPGgyIGNsYXNz PSJwYWNrYWdlIj5sb29weTwvaDI+PGRsPjxkdD5EZXNjcmlwdGlvbjwvZHQ+PGRkPkEgbG9vcGlu ZyBtYWNybzwvZGQ+CjxkdD5MYXRlc3Q8L2R0PiA8ZGQ+PGEgaHJlZj0ibG9vcHktMC4xMi4wLnRh ciI+bG9vcHktMC4xMi4wLnRhcjwvYT4sIDIwMjQtRmViLTIzLCAxLjM2Jm5ic3A7TWlCPC9kZD4K PGR0Pk1haW50YWluZXI8L2R0PiA8ZGQ+PC9kZD4KPGR0PldlYnNpdGU8L2R0PiA8ZGQ+PGEgaHJl Zj0iaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weSI+aHR0cHM6Ly9naXRodWIuY29tL29r YW1zbi9sb29weTwvYT48L2RkPgo8ZHQ+QnJvd3NlIEVMUEEncyByZXBvc2l0b3J5PC9kdD4gPGRk PjxhIGhyZWY9Imh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9lbWFjcy9ub25nbnUu Z2l0Lz9oPWVscGEvbG9vcHkiPkNHaXQ8L2E+IG9yIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LnNhdmFu bmFoLmdudS5vcmcvZ2l0d2ViLz9wPWVtYWNzL25vbmdudS5naXQ7YT1zaG9ydGxvZztoPXJlZnMv aGVhZHMvZWxwYS9sb29weSI+R2l0d2ViPC9hPjwvZGQ+CjxkdD5CYWRnZTwvZHQ+PGRkPjxpbWcg c3JjPSJsb29weS5zdmciLz48L2RkPgo8ZHQ+TWFudWFsPC9kdD4gPGRkPgo8YSBocmVmPSJkb2Mv bG9vcHkuaHRtbCI+bG9vcHk8L2E+CjwvZGQ+CjwvZGw+PHA+VG8gaW5zdGFsbCB0aGlzIHBhY2th Z2UsIHJ1biBpbiBFbWFjczo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgPHByZT5NLXggPHNw YW4gY2xhc3M9Imt3Ij5wYWNrYWdlLWluc3RhbGw8L3NwYW4+IFJFVCA8c3BhbiBjbGFzcz0ia3ci Pmxvb3B5PC9zcGFuPiBSRVQ8L3ByZT48aDI+RnVsbCBkZXNjcmlwdGlvbjwvaDI+CjxkaXYgY2xh c3M9InNwbGljZSBmdWxsZGVzY3JpcHRpb24iPgo8ZGl2IGlkPSJ0YWJsZS1vZi1jb250ZW50cyIg cm9sZT0iZG9jLXRvYyI+CjxoMz5UYWJsZSBvZiBDb250ZW50czwvaDM+CjxkaXYgaWQ9InRleHQt dGFibGUtb2YtY29udGVudHMiIHJvbGU9ImRvYy10b2MiPgo8dWw+CjxsaT48YSBocmVmPSIjb3Jn YzdjZjE5NyI+MS4gSW50cm9kdWN0aW9uPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjb3JnMzY0N2I5 YiI+Mi4gU2ltaWxhciBMaWJyYXJpZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNvcmdlMTQ3NGM4 Ij4zLiBIb3cgdG8gSW5zdGFsbDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI29yZzUxODcwMWYiPjQu IE11bHRpcGxlIEtpbmRzIG9mIERlc3RydWN0dXJpbmc8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNv cmdkNTk5ZjRjIj41LiBMb29wIENvbW1hbmRzIGluIEFyYml0cmFyeSBDb2RlPC9hPjwvbGk+Cjxs aT48YSBocmVmPSIjYWRkaW5nLWN1c3RvbS1jb21tYW5kcyI+Ni4gQWRkaW5nIEN1c3RvbSBDb21t YW5kczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI2hvdy1kb2VzLWl0LWNvbXBhcmUtdG8tb3RoZXIt YXBwcm9hY2hlcyI+Ny4gQ29tcGFyaW5nIHRvIDxjb2RlPmNsLWxvb3A8L2NvZGU+PC9hPjwvbGk+ CjxsaT48YSBocmVmPSIjb3JnYjQ4YmUwZiI+OC4gUmVhbC1Xb3JsZCBFeGFtcGxlczwvYT48L2xp Pgo8L3VsPgo8L2Rpdj4KPC9kaXY+CjxwPgo8Y29kZT5sb29weTwvY29kZT46IDxhIGhyZWY9Imh0 dHBzOi8vbWVscGEub3JnLyMvbG9vcHkiPjxpbWcgc3JjPSJodHRwczovL21lbHBhLm9yZy9wYWNr YWdlcy9sb29weS1iYWRnZS5zdmciIGFsdD0ibG9vcHktYmFkZ2Uuc3ZnIiBjbGFzcz0ib3JnLXN2 ZyIgLz48L2E+IDxiciAvPgo8Y29kZT5sb29weS1kYXNoPC9jb2RlPjogPGEgaHJlZj0iaHR0cHM6 Ly9tZWxwYS5vcmcvIy9sb29weS1kYXNoIj48aW1nIHNyYz0iaHR0cHM6Ly9tZWxwYS5vcmcvcGFj a2FnZXMvbG9vcHktZGFzaC1iYWRnZS5zdmciIGFsdD0ibG9vcHktZGFzaC1iYWRnZS5zdmciIGNs YXNzPSJvcmctc3ZnIiAvPjwvYT4KPC9wPgoKPGhyIC8+Cgo8cD4KPGNvZGU+bG9vcHk8L2NvZGU+ IGlzIGEgbWFjcm8gbWVhbnQgZm9yIGl0ZXJhdGluZyBhbmQgbG9vcGluZy4gIEl0IGlzIHNpbWls YXIgaW4gdXNhZ2UgdG8KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lbWFj cy9tYW51YWwvaHRtbF9ub2RlL2NsL0xvb3AtRmFjaWxpdHkuaHRtbCNMb29wLUZhY2lsaXR5Ij48 Y29kZT5jbC1sb29wPC9jb2RlPjwvYT4gYnV0IHVzZXMgc3ltYm9saWMgZXhwcmVzc2lvbnMgcmF0 aGVyIHRoYW4ga2V5d29yZHMuCjwvcD4KCjxwPgpGb3IgbW9zdCB1c2UgY2FzZXMsIDxjb2RlPmxv b3B5PC9jb2RlPiBzaG91bGQgYmUgYSBuaWNlIHN1YnN0aXR1dGUgZm9yIDxjb2RlPmNsLWxvb3A8 L2NvZGU+IGFuZApjb21wbGVtZW50YXJ5IHRvIHRoZSBmZWF0dXJlcyBwcm92aWRlZCBieSB0aGUg PGEgaHJlZj0iaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lbWFjcy9tYW51YWwvaHRtbF9u b2RlL2VsaXNwL1NlcXVlbmNlcy1BcnJheXMtVmVjdG9ycy5odG1sIj5TZXE8L2E+IGFuZCA8YSBo cmVmPSJodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VtYWNzL21hbnVhbC9odG1sX25vZGUv Y2wvaW5kZXguaHRtbCI+Q0w8L2E+IGxpYnJhcmllcyBhbmQgRW1hY3MncwpyZWd1bGFyIGxvb3Bp bmcgYW5kIG1hcHBpbmcgZmVhdHVyZXMuCjwvcD4KCjxwPgpGb3IgZGV0YWlsZWQgaW5mb3JtYXRp b24sIHNlZSA8YSBocmVmPSJkb2MvbG9vcHktZG9jLmh0bWwiPnRoZSBkb2N1bWVudGF0aW9uIGZp bGU8L2E+LiAgVGhpcyBSRUFETUUgaXMganVzdCBhbgpvdmVydmlldy4KPC9wPgoKPGhyIC8+Cjxk aXYgY2xhc3M9Im9yZy1jZW50ZXIiPgo8cD4KPGI+Tk9URTwvYj46IExvb3B5IGlzIHN0aWxsIGlu IGl0cyBsYXR0ZXIgbWlkZGxlIHN0YWdlcy48YnIgLz4KQ29uc3RydWN0aXZlIGNyaXRpY2lzbSBp cyB3ZWxjb21lLiAgSWYgeW91IHNlZSBhIHBsYWNlIGZvciBpbXByb3ZlbWVudCwKcGxlYXNlIGxl dCBtZSBrbm93Lgo8L3A+CjwvZGl2Pgo8aHIgLz4KCjxwPgo8c3BhbiBjbGFzcz0idW5kZXJsaW5l Ij5SZWNlbnQgYnJlYWtpbmcgY2hhbmdlczo8L3NwYW4+CjwvcD4KPHVsIGNsYXNzPSJvcmctdWwi Pgo8bGk+VmVyc2lvbiAwLjEyLjA6Cjx1bCBjbGFzcz0ib3JnLXVsIj4KPGxpPlRoZSBib29sZWFu IGNvbW1hbmRzIDxjb2RlPmFsd2F5czwvY29kZT4sIDxjb2RlPm5ldmVyPC9jb2RlPiwgYW5kIDxj b2RlPnRoZXJlaXM8L2NvZGU+IG5vdyBiZWhhdmUgbW9yZSBsaWtlCmFjY3VtdWxhdGlvbiBjb21t YW5kcyBhbmQgdXNlIDxjb2RlPmxvb3B5LXJlc3VsdDwvY29kZT4gYnkgZGVmYXVsdC48L2xpPgo8 bGk+VXNpbmcgbXVsdGlwbGUgY29uZGl0aW9ucyBpbiA8Y29kZT5hbHdheXM8L2NvZGU+LCA8Y29k ZT5uZXZlcjwvY29kZT4sIGFuZCA8Y29kZT50aGVyZWlzPC9jb2RlPiBpcwpkZXByZWNhdGVkLiAg VGhlc2UgY29tbWFuZHMgd2lsbCBiZSBjaGFuZ2VkIHRvIGhhdmUgY2FsbCBhcmd1bWVudCBsaXN0 cwptb3JlIGxpa2UgYWNjdW11bGF0aW9uIGNvbW1hbmRzLCBzdWNoIGFzIDxjb2RlPihhbHdheXMg W1ZBUl0gVkFMICZhbXA7a2V5IGludG8pPC9jb2RlPi4KVGhpcyB3aWxsIHNpbXBsaWZ5IHRoZSBj b2RlIGFuZCByZW1vdmUgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZW0gYW5kCnRoZSBvdGhl ciBjb21tYW5kcy48L2xpPgo8bGk+UmUtdXNpbmcgaXRlcmF0aW9uIHZhcmlhYmxlcyBpbiBtdWx0 aXBsZSBpdGVyYXRpb24gY29tbWFuZHMgbm93IHNpZ25hbHMKYW4gZXJyb3IuICBJdCBuZXZlciBw cm9kdWNlZCBjb3JyZWN0IGNvZGUuPC9saT4KPGxpPkJ5IGRlZmF1bHQsIHRoZSBjb21tYW5kcyA8 Y29kZT5jb25zPC9jb2RlPiwgPGNvZGU+aXRlcjwvY29kZT4sIDxjb2RlPm51bXM8L2NvZGU+LCBh bmQgPGNvZGU+c2VxLWluZGV4PC9jb2RlPgo8aT5jYW48L2k+IHVwZGF0ZSBuYW1lZCBpdGVyYXRp b24gdmFyaWFibGVzIG91dHNpZGUgb2YgdGhlIG1haW4gbG9vcCBib2R5CmFuZCBpbml0aWFsaXpl IHZhcmlhYmxlcyB0byBub24tbmlsIHZhbHVlcywgcHJvZHVjaW5nIGZhc3RlciBjb2RlLgpUaGlz IGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgc3BlY2lhbCBtYWNybyBhcmd1bWVudCA8Y29kZT53 aXRoPC9jb2RlPi48L2xpPgo8bGk+PGNvZGU+OnJlc3VsdC10eXBlPC9jb2RlPiBpcyBkZXByZWNh dGVkLiAgSW5zdGVhZCwgdXNlIGNvZXJjaW9uIGZ1bmN0aW9ucyBpbgpzcGVjaWFsIG1hY3JvIGFy Z3VtZW50cywgcG9zc2libHkgd2l0aCA8Y29kZT5hY2N1bS1vcHQ8L2NvZGU+LjwvbGk+CjxsaT5U aGUgPGNvZGU+OmluaXQ8L2NvZGU+IGtleXdvcmQgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gIFVz ZSB0aGUgc3BlY2lhbCBtYWNybyBhcmd1bWVudAo8Y29kZT53aXRoPC9jb2RlPiBpbnN0ZWFkLjwv bGk+CjxsaT48Y29kZT5yZWR1Y2U8L2NvZGU+IGhhcyBiZWVuIGZpeGVkLiBJdCBub3cgd29ya3Mg bGlrZSA8Y29kZT5jbC1yZWR1Y2U8L2NvZGU+IHdoZW4gdGhlIHZhcmlhYmxlCnN0YXJ0aW5nIHZh bHVlIGlzbid0IGV4cGxpY2l0bHkgZ2l2ZW4sIHN0b3JpbmcgdGhlIGZpcnN0IHZhbHVlIGluc3Rl YWQgb2YKc3RvcmluZyB0aGUgcmVzdWx0IG9mIHBhc3NpbmcgdGhlIGZpcnN0IHZhbHVlIGFuZCA8 Y29kZT5uaWw8L2NvZGU+IHRvIHRoZSBmdW5jdGlvbi48L2xpPgo8bGk+VGhlIGRlcHJlY2F0ZWQg ZmxhZ3MgPGNvZGU+bGF4LW5hbWluZzwvY29kZT4gYW5kIDxjb2RlPnNwbGl0PC9jb2RlPiB3ZXJl IHJlbW92ZWQuPC9saT4KPGxpPlRoZSBkZXByZWNhdGVkIGNvbW1hbmQgPGNvZGU+c3ViLWxvb3A8 L2NvZGU+IHdhcyByZW1vdmVkLjwvbGk+CjxsaT5UaGUgbm9uLWtleXdvcmQgYXJndW1lbnRzIG9m IDxjb2RlPm51bWJlcnM8L2NvZGU+IGFyZSBkZXByZWNhdGVkLiAgVXNlIHRoZSBrZXl3b3JkCmFy Z3VtZW50cyBpbnN0ZWFkLiAgQSA8Y29kZT46dGVzdDwvY29kZT4ga2V5d29yZCBhcmd1bWVudCB3 YXMgYWRkZWQsIHdoaWNoIGlzIG1vcmUKZmxleGlibGUgYW5kIGV4cGxpY2l0IHRoYW4gdGhlIG5v bi1rZXl3b3JkIGFyZ3VtZW50cy48L2xpPgo8bGk+Rml4ZWQgYSBwcm9ibGVtIHdpdGggbWFjcm8g ZXhwYW5zaW9uIGluIHNvbWUgY2FzZXMgZm9yIHN1Yi1tYWNyb3MKdGhhdCBjcmVhdGVkIGEgbmV3 IG1hY3JvIGVudmlyb25tZW50IChlLmcuLCA8Y29kZT5jbC1mbGV0PC9jb2RlPikuPC9saT4KPGxp Pkxvb3AgY29tbWFuZHMgbm93IGV2YWx1YXRlIGFyZ3VtZW50cyBsaWtlIDxjb2RlPjp0ZXN0PC9j b2RlPiwgPGNvZGU+OmtleTwvY29kZT4sIGFuZCA8Y29kZT46Ynk8L2NvZGU+IG9ubHkKb25jZS48 L2xpPgo8bGk+Q2hhbmdlIHRoZSBhcmd1bWVudCBvcmRlciBvZiA8Y29kZT50ZXN0PC9jb2RlPiB0 byBiZSAoMSkgdGhlIHNlcXVlbmNlIGVsZW1lbnQgdGhlbiAoMikKdGhlIHRlc3RlZCB2YWx1ZSwg bGlrZSBpbiA8Y29kZT5zZXEtY29udGFpbnMtcDwvY29kZT4gYW5kIDxzcGFuIGNsYXNzPSJ1bmRl cmxpbmUiPnVubGlrZTwvc3Bhbj4gaW4gPGNvZGU+Y2wtbWVtYmVyPC9jb2RlPiwgYW5kCmV4cGxp Y2l0bHkgc3RhdGUgdGhpcyBvcmRlciBpbiB0aGUgZG9jdW1lbnRhdGlvbi48L2xpPgo8bGk+PGNv ZGU+JmFtcDtrZXk8L2NvZGU+IG5vdyBzaWduYWxzIGFuIGVycm9yIHdoZW4gdGhlcmUgYXJlIHVu bWF0Y2hlZCBrZXlzIGluIHRoZSBwbGlzdCwgYXMKaW4gPGNvZGU+Y2wtbGliPC9jb2RlPi4gIDxj b2RlPiZhbXA7YWxsb3ctb3RoZXIta2V5czwvY29kZT4gaGFzIGJlZW4gYWRkZWQuPC9saT4KPC91 bD48L2xpPgo8bGk+U2VlIHRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xv b3B5L2Jsb2IvbWFzdGVyL0NIQU5HRUxPRy5tZCI+Y2hhbmdlIGxvZzwvYT4gZm9yIGxlc3MgcmVj ZW50IGNoYW5nZXMuPC9saT4KPC91bD4KPGRpdiBpZD0ib3V0bGluZS1jb250YWluZXItb3JnYzdj ZjE5NyIgY2xhc3M9Im91dGxpbmUtMyI+CjxoMyBpZD0ib3JnYzdjZjE5NyI+PHNwYW4gY2xhc3M9 InNlY3Rpb24tbnVtYmVyLTMiPjEuPC9zcGFuPiBJbnRyb2R1Y3Rpb248L2gzPgo8ZGl2IGNsYXNz PSJvdXRsaW5lLXRleHQtMyIgaWQ9InRleHQtMSI+CjxwPgpUaGUgPGNvZGU+bG9vcHk8L2NvZGU+ IG1hY3JvIGlzIHVzZWQgdG8gZ2VuZXJhdGUgY29kZSBmb3IgYSBsb29wLCBzaW1pbGFyIHRvIDxj b2RlPmNsLWxvb3A8L2NvZGU+LgpVbmxpa2UgPGNvZGU+Y2wtbG9vcDwvY29kZT4sIDxjb2RlPmxv b3B5PC9jb2RlPiB1c2VzIHBhcmVudGhldGljYWwgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiAiY2xh dXNlcyIuCjwvcD4KCjxkaXYgY2xhc3M9Im9yZy1zcmMtY29udGFpbmVyIj4KPHByZSBjbGFzcz0i c3JjIHNyYy1lbWFjcy1saXNwIj47OyBBIHNpbXBsZSB1c2FnZSBvZiBgY2wtbG9vcCc6CihjbC1s b29wIGZvciBpIGZyb20gMSB0byAxMAogICAgICAgICBpZiAoY2wtZXZlbnAgaSkgY29sbGVjdCBp IGludG8gZXZlbnMKICAgICAgICAgZWxzZSBjb2xsZWN0IGkgaW50byBvZGRzCiAgICAgICAgIGVu ZCA7IFRoaXMgYGVuZCcga2V5d29yZCBpcyBvcHRpb25hbCBoZXJlLgogICAgICAgICBmaW5hbGx5 IHJldHVybiAobGlzdCBvZGRzIGV2ZW5zKSkKCjs7IEhvdyBpdCBjb3VsZCBiZSBkb25lIHVzaW5n IGBsb29weSc6Cihsb29weSAobnVtYmVycyBpIDpmcm9tIDEgOnRvIDEwKQogICAgICAgKGlmIChj bC1ldmVucCBpKQogICAgICAgICAgIChjb2xsZWN0IGV2ZW5zIGkpCiAgICAgICAgIChjb2xsZWN0 IG9kZHMgaSkpCiAgICAgICAoZmluYWxseS1yZXR1cm4gb2RkcyBldmVucykpCgoobG9vcHkgKG51 bWJlcnMgaSA6ZnJvbSAxIDp0byAxMCkKICAgICAgIChpZiAoY2wtZXZlbnAgaSkKICAgICAgICAg ICAoY29sbGVjdCBpIDppbnRvIGV2ZW5zKQogICAgICAgICAoY29sbGVjdCBpIDppbnRvIG9kZHMp KQogICAgICAgKGZpbmFsbHktcmV0dXJuIG9kZHMgZXZlbnMpKQo8L3ByZT4KPC9kaXY+Cgo8cD4K PGNvZGU+bG9vcHk8L2NvZGU+IHN1cHBvcnRzIGRlc3RydWN0dXJpbmcgZm9yIGl0ZXJhdGlvbiBj b21tYW5kcyBsaWtlIDxjb2RlPmxpc3Q8L2NvZGU+IGFuZAphY2N1bXVsYXRpb24gY29tbWFuZHMg bGlrZSA8Y29kZT5zdW08L2NvZGU+IG9yIDxjb2RlPmNvbGxlY3Q8L2NvZGU+Lgo8L3A+Cgo8ZGl2 IGNsYXNzPSJvcmctc3JjLWNvbnRhaW5lciI+CjxwcmUgY2xhc3M9InNyYyBzcmMtZW1hY3MtbGlz cCI+OzsgU3VtbWluZyB0aGUgbnRoIGVsZW1lbnRzIG9mIGFycmF5czoKOzsgPSZndDsgKDggMTAg MTIgMTQgMTYgMTgpCihsb29weSAobGlzdCAobGlzdC1lbGVtMSBsaXN0LWVsZW0yKQogICAgICAg ICAgICAgJygoWzEgMiAzXSBbNCA1IDZdKQogICAgICAgICAgICAgICAoWzcgOCA5XSBbMTAgMTEg MTJdKSkpCiAgICAgICAoc3VtIFtzdW0xIHN1bTIgc3VtM10gbGlzdC1lbGVtMSkKICAgICAgIChz dW0gW3N1bTQgc3VtNSBzdW02XSBsaXN0LWVsZW0yKQogICAgICAgKGZpbmFsbHktcmV0dXJuIHN1 bTEgc3VtMiBzdW0zIHN1bTQgc3VtNSBzdW02KSkKCjs7IE9yLCBtb3JlIHNpbXBseToKOzsgPSZn dDsgKDggMTAgMTIgMTQgMTYgMTgpCihsb29weSAobGlzdCBsaXN0LWVsZW0gJygoWzEgMiAzXSBb NCA1IDZdKQogICAgICAgICAgICAgICAgICAgICAgICAgKFs3IDggOV0gWzEwIDExIDEyXSkpKQog ICAgICAgKHN1bSAoW3N1bTEgc3VtMiBzdW0zXSBbc3VtNCBzdW01IHN1bTZdKQogICAgICAgICAg ICBsaXN0LWVsZW0pCiAgICAgICAoZmluYWxseS1yZXR1cm4gc3VtMSBzdW0yIHN1bTMgc3VtNCBz dW01IHN1bTYpKQoKOzsgU2VwYXJhdGUgdGhlIGVsZW1lbnRzIG9mIHN1Yi1saXN0Ogo7OyA9Jmd0 OyAoKDEgMykgKDIgNCkpCihsb29weSAobGlzdCBpICcoKDEgMikgKDMgNCkpKQogICAgICAgKGNv bGxlY3QgKGVsZW0xIGVsZW0yKSBpKQogICAgICAgKGZpbmFsbHktcmV0dXJuIGVsZW0xIGVsZW0y KSkKPC9wcmU+CjwvZGl2PgoKPHA+ClRoZSA8Y29kZT5sb29weTwvY29kZT4gbWFjcm8gaXMgY29u ZmlndXJhYmxlIGFuZCBleHRlbnNpYmxlLiAgSW4gYWRkaXRpb24gdG8gd3JpdGluZyBvbmUncwpv d24gImxvb3AgY29tbWFuZHMiIChzdWNoIGFzIDxjb2RlPmxpc3Q8L2NvZGU+IGluIHRoZSBleGFt cGxlIGFib3ZlKSwgYnkgdXNpbmcgImZsYWdzIiwgb25lCmNhbiBjaG9vc2Ugd2hldGhlciB0byBp bnN0ZWFkIHVzZSA8Y29kZT5wY2FzZS1sZXQ8L2NvZGU+LCA8Y29kZT5zZXEtbGV0PC9jb2RlPiwg b3IgZXZlbiB0aGUgRGFzaApsaWJyYXJ5IGZvciBkZXN0cnVjdHVyaW5nLgo8L3A+Cgo8ZGl2IGNs YXNzPSJvcmctc3JjLWNvbnRhaW5lciI+CjxwcmUgY2xhc3M9InNyYyBzcmMtZW1hY3MtbGlzcCI+ OzsgVXNlIGBwY2FzZScgdG8gZGVzdHJ1Y3R1cmUgYXJyYXkgZWxlbWVudHM6Cjs7ID0mZ3Q7ICgo MSAyIDMgNCkgKDEwIDEyIDE0KSAoMTEgMTMgMTUpKQoobG9vcHkgKGZsYWcgcGNhc2UpCiAgICAg ICAoYXJyYXkgKG9yIGAoLGNhciAuICxjZHIpIGRpZ2l0KQogICAgICAgICAgICAgIFsxICgxMCAu IDExKSAyICgxMiAuIDEzKSAzIDQgKDE0IC4gMTUpXSkKICAgICAgIChpZiBkaWdpdAogICAgICAg ICAgIChjb2xsZWN0IGRpZ2l0cyBkaWdpdCkKICAgICAgICAgKGNvbGxlY3QgY2FycyBjYXIpCiAg ICAgICAgIChjb2xsZWN0IGNkcnMgY2RyKSkKICAgICAgIChmaW5hbGx5LXJldHVybiBkaWdpdHMg Y2FycyBjZHJzKSkKCjs7IFVzaW5nIHRoZSBkZWZhdWx0IGRlc3RydWN0dXJpbmc6Cjs7ID0mZ3Q7 ICgoMSAyIDMgNCkgKDEwIDEyIDE0KSAoMTEgMTMgMTUpKQoobG9vcHkgKGFycmF5IGVsZW0gWzEg KDEwIC4gMTEpIDIgKDEyIC4gMTMpIDMgNCAoMTQgLiAxNSldKQogICAgICAgKGlmIChudW1iZXJw IGVsZW0pCiAgICAgICAgICAgKGNvbGxlY3QgZGlnaXRzIGVsZW0pCiAgICAgICAgIChjb2xsZWN0 IChjYXJzIC4gY2RycykgZWxlbSkpCiAgICAgICAoZmluYWxseS1yZXR1cm4gZGlnaXRzIGNhcnMg Y2RycykpCjwvcHJlPgo8L2Rpdj4KCjxwPgpWYXJpYWJsZXMgbGlrZSA8Y29kZT5jYXJzPC9jb2Rl PiwgPGNvZGU+Y2RyczwvY29kZT4sIGFuZCA8Y29kZT5kaWdpdHM8L2NvZGU+IGluIHRoZSBleGFt cGxlIGFib3ZlIGFyZQphdXRvbWF0aWNhbGx5IDxjb2RlPmxldDwvY29kZT4tYm91bmQgc28gYXMg dG8gbm90IGFmZmVjdCBjb2RlIG91dHNpZGUgb2YgdGhlIGxvb3AuCjwvcD4KCjxwPgo8Y29kZT5s b29weTwvY29kZT4gaGFzIGFyZ3VtZW50cyBmb3IgYmluZGluZyAob3Igbm90IGJpbmRpbmcpIHZh cmlhYmxlcywgZXhlY3V0aW5nIGNvZGUKYmVmb3JlIG9yIGFmdGVyIHRoZSBsb29wLCBleGVjdXRp bmcgY29kZSBvbmx5IGlmIHRoZSBsb29wIGNvbXBsZXRlcywgYW5kIGZvcgpzZXR0aW5nIHRoZSBt YWNybydzIHJldHVybiB2YWx1ZSAoZGVmYXVsdCA8Y29kZT5uaWw8L2NvZGU+KS4gIFRoaXMgaXMg aW4gYWRkaXRpb24gdG8gdGhlCmxvb3BpbmcgZmVhdHVyZXMgdGhlbXNlbHZlcy4KPC9wPgoKPHA+ CkFsbCBvZiB0aGlzIG1ha2VzIDxjb2RlPmxvb3B5PC9jb2RlPiBhIHVzZWZ1bCBhbmQgY29udmVu aWVudCBjaG9pY2UgZm9yIGxvb3BpbmcgYW5kCml0ZXJhdGlvbi4KPC9wPgo8L2Rpdj4KPC9kaXY+ Cgo8ZGl2IGlkPSJvdXRsaW5lLWNvbnRhaW5lci1vcmczNjQ3YjliIiBjbGFzcz0ib3V0bGluZS0z Ij4KPGgzIGlkPSJvcmczNjQ3YjliIj48c3BhbiBjbGFzcz0ic2VjdGlvbi1udW1iZXItMyI+Mi48 L3NwYW4+IFNpbWlsYXIgTGlicmFyaWVzPC9oMz4KPGRpdiBjbGFzcz0ib3V0bGluZS10ZXh0LTMi IGlkPSJ0ZXh0LTIiPgo8cD4KTG9vcHkgaXMgbm90IHRoZSBvbmx5IExpc3AgbGlicmFyeSB0aGF0 IHVzZXMgcGFyZW50aGV0aWNhbCBleHByZXNzaW9ucyBpbnN0ZWFkIG9mCmtleXdvcmQgY2xhdXNl cyAoYXMgaW4gPGNvZGU+Y2wtbG9vcDwvY29kZT4pLiAgPGEgaHJlZj0iaHR0cHM6Ly9jb21tb24t bGlzcC5uZXQvcHJvamVjdC9pdGVyYXRlLyI+SXRlcmF0ZTwvYT4gYW5kIDxhIGhyZWY9Imh0dHBz Oi8vZ2l0aHViLmNvbS9TaGlubWVyYS9mb3IvIj5Gb3I8L2E+IGFyZSB0d28gZXhhbXBsZXMgZnJv bQpDb21tb24gTGlzcC4KPC9wPgoKPGRpdiBjbGFzcz0ib3JnLXNyYy1jb250YWluZXIiPgo8cHJl IGNsYXNzPSJzcmMgc3JjLWVtYWNzLWxpc3AiPjs7IENvbGxlY3RpbmcgMTAgcmFuZG9tIG51bWJl cnM6Cgo7OyBjbC1sb29wIChFbWFjcyBMaXNwKQooY2wtbG9vcCByZXBlYXQgMTAgY29sbGVjdCAo cmFuZG9tIDEwKSkKCjs7IGxvb3B5IChMb29weSkKKGxvb3B5IChyZXBlYXQgMTApIChjb2xsZWN0 IChyYW5kb20gMTApKSkKCjs7IGl0ZXJhdGUgKENvbW1vbiBMaXNwKQooaXRlcmF0ZSAocmVwZWF0 IDEwKSAoY29sbGVjdCAocmFuZG9tIDEwKSkpCgo7OyBmb3IgKENvbW1vbiBMaXNwKQooZm9yOmZv ciAoKGkgcmVwZWF0IDEwKSAocmFuZG9tcyBjb2xsZWN0aW5nIChyYW5kb20gMTApKSkpCgo8L3By ZT4KPC9kaXY+Cgo8cD4KR2VuZXJhbGx5LCBhbGwgb2YgdGhlIHBhY2thZ2VzIGhhbmRsZSBiYXNp YyB1c2UgY2FzZXMgaW4gc2ltaWxhciB3YXlzLiAgT25lCmxhcmdlIGRpZmZlcmVuY2UgaXMgdGhh dCA8Y29kZT5pdGVyYXRlPC9jb2RlPiBjYW4gZW1iZWQgaXRzIGxvb3BpbmcgY29uc3RydWN0cyBp biBhcmJpdHJhcnkKY29kZS4gIExvb3B5IGlzIGN1cnJlbnRseSBwcm92aWRlcyB0aGlzIGZlYXR1 cmUgYXMgYSBzZXBhcmF0ZSBtYWNybywKPGNvZGU+bG9vcHktaXRlcjwvY29kZT4sIHdoaWNoIGV4 cGFuZHMgbG9vcGluZyBjb25zdHJ1Y3RzIHVzaW5nIDxjb2RlPm1hY3JvZXhwYW5kPC9jb2RlPi4K PC9wPgoKPGRpdiBjbGFzcz0ib3JnLXNyYy1jb250YWluZXIiPgo8cHJlIGNsYXNzPSJzcmMgc3Jj LWVtYWNzLWxpc3AiPihyZXF1aXJlICdsb29weS1pdGVyKQoKOzsgVGhpbmdzIHRvIG5vZGU6Cjs7 IC0gYGFjY3VtLW9wdCcgcHJvZHVjZXMgbW9yZSBlZmZpY2llbnQgYWNjdW11bGF0aW9ucyBmb3Ig bmFtZXMgdmFyaWFibGVzCjs7IC0gYGN5Y2xpbmcnIGlzIGFub3RoZXIgbmFtZSBmb3IgYHJlcGVh dCcKOzsgPSZndDsgKCgtOSAtOCAtNyAtNiAtNSAtNCAtMyAtMiAtMSkKOzsgICAgICgwKQo7OyAg ICAgKDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExKSkKKGxvb3B5LWl0ZXIgKGFjY3VtLW9wdCBwb3Np dGl2ZXMgbmVnYXRpdmVzIHplcm9lcykKICAgICAgICAgICAgKG51bWJlcmluZyBpIDpmcm9tIC0x MCA6dG8gMTApCiAgICAgICAgICAgIDs7IE5vcm1hbCBgbGV0JyBhbmQgYHBjYXNlJywgbm90IExv b3B5IGNvbnN0cnVjdHM6CiAgICAgICAgICAgIChsZXQgKCh2YXIgKDErIGkpKSkKICAgICAgICAg ICAgICAocGNhc2UgdmFyCiAgICAgICAgICAgICAgICAoKHByZWQgY2wtcGx1c3ApICAoY29sbGVj dGluZyBwb3NpdGl2ZXMgdmFyKSkKICAgICAgICAgICAgICAgICgocHJlZCBjbC1taW51c3ApIChj b2xsZWN0aW5nIG5lZ2F0aXZlcyB2YXIpKQogICAgICAgICAgICAgICAgKChwcmVkIHplcm9wKSAg ICAgKGNvbGxlY3RpbmcgemVyb2VzIHZhcikpKSkKICAgICAgICAgICAgKGZpbmFsbHktcmV0dXJu IG5lZ2F0aXZlcyB6ZXJvZXMgcG9zaXRpdmVzKSkKPC9wcmU+CjwvZGl2PgoKPHA+Ckxvb3B5IGlz IG5vdCB5ZXQgZmVhdHVyZSBjb21wbGV0ZS4gIFBsZWFzZSByZXF1ZXN0IGZlYXR1cmVzIG9yIHJl cG9ydCBwcm9ibGVtcwppbiB0aGlzIHByb2plY3TigJlzIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHVi LmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzIj5pc3N1ZXMgdHJhY2tlcjwvYT4uICBXaGlsZSBiYXNp YyB1c2VzIGFyZSBjb3ZlcmVkLCBzb21lIG9mIHRoZQptb3JlIG5pY2hlIGZlYXR1cmVzIG9mIDxj b2RlPmNsLWxvb3A8L2NvZGU+IGFuZCA8Y29kZT5pdGVyYXRlPC9jb2RlPiBhcmUgc3RpbGwgYmVp bmcgYWRkZWQuCjwvcD4KPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ib3V0bGluZS1jb250YWluZXIt b3JnZTE0NzRjOCIgY2xhc3M9Im91dGxpbmUtMyI+CjxoMyBpZD0ib3JnZTE0NzRjOCI+PHNwYW4g Y2xhc3M9InNlY3Rpb24tbnVtYmVyLTMiPjMuPC9zcGFuPiBIb3cgdG8gSW5zdGFsbDwvaDM+Cjxk aXYgY2xhc3M9Im91dGxpbmUtdGV4dC0zIiBpZD0idGV4dC0zIj4KPHA+Ckxvb3B5IGNhbiBiZSBp bnN0YWxsZWQgZnJvbSA8YSBocmVmPSJodHRwczovL21lbHBhLm9yZy8jL2xvb3B5Ij5NRUxQQTwv YT4gYXMgdGhlIHBhY2thZ2UgPGNvZGU+bG9vcHk8L2NvZGU+LiAgVGhlIG9wdGlvbmFsIHBhY2th Z2UKPGNvZGU+bG9vcHktZGFzaDwvY29kZT4gY2FuIGJlIGluc3RhbGxlZCB0byBlbmFibGUgdXNp bmcgdGhlIERhc2ggbGlicmFyeSBmb3IgZGVzdHJ1Y3R1cmluZwooaW5zdGVhZCBvZiBvdGhlciBt ZXRob2RzKS4KPC9wPgoKPGRpdiBjbGFzcz0ib3JnLXNyYy1jb250YWluZXIiPgo8cHJlIGNsYXNz PSJzcmMgc3JjLWVtYWNzLWxpc3AiPih1c2UtcGFja2FnZSBsb29weSkKCjs7IE9wdGlvbmFsIHN1 cHBvcnQgZm9yIGRlc3RydWN0dXJpbmcgd2l0aCBEYXNoLgoodXNlLXBhY2thZ2UgbG9vcHktZGFz aAogIDphZnRlciAobG9vcHkpCiAgOmRlbWFuZCB0KQo8L3ByZT4KPC9kaXY+Cgo8cD4KVG8gbG9h ZCBhbGwgb2YgdGhlIGFsdGVybmF0aXZlIGRlc3RydWN0dXJpbmcgbGlicmFyaWVzIChzZWUgc2Vj dGlvbiA8YSBocmVmPSIjb3JnNTE4NzAxZiI+TXVsdGlwbGUKS2luZHMgb2YgRGVzdHJ1Y3R1cmlu ZzwvYT4pIGFuZCB0aGUgYWx0ZXJuYXRpdmUgbWFjcm8gZm9ybSAoc2VlIHNlY3Rpb24gPGEgaHJl Zj0iI29yZ2Q1OTlmNGMiPkxvb3AKQ29tbWFuZHMgaW4gQXJiaXRyYXJ5IENvZGU8L2E+KSwgdXNl CjwvcD4KCjxkaXYgY2xhc3M9Im9yZy1zcmMtY29udGFpbmVyIj4KPHByZSBjbGFzcz0ic3JjIHNy Yy1lbWFjcy1saXNwIj4odXNlLXBhY2thZ2UgbG9vcHkKICA6Y29uZmlnCiAgKHJlcXVpcmUgJ2xv b3B5LWl0ZXIpCiAgKHJlcXVpcmUgJ2xvb3B5LXBjYXNlKQogIChyZXF1aXJlICdsb29weS1zZXEp KQoKKHVzZS1wYWNrYWdlIGxvb3B5LWRhc2gKICA6YWZ0ZXIgKGxvb3B5KQogIDpkZW1hbmQgdCkK PC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJvdXRsaW5lLWNvbnRhaW5lci1v cmc1MTg3MDFmIiBjbGFzcz0ib3V0bGluZS0zIj4KPGgzIGlkPSJvcmc1MTg3MDFmIj48c3BhbiBj bGFzcz0ic2VjdGlvbi1udW1iZXItMyI+NC48L3NwYW4+IE11bHRpcGxlIEtpbmRzIG9mIERlc3Ry dWN0dXJpbmc8L2gzPgo8ZGl2IGNsYXNzPSJvdXRsaW5lLXRleHQtMyIgaWQ9InRleHQtNCI+Cjxw PgpUaGUgZGVmYXVsdCBkZXN0cnVjdHVyaW5nIHN5c3RlbSBpcyBhIHN1cGVyLXNldCBvZiB3aGF0 IDxjb2RlPmNsLWxpYjwvY29kZT4gcHJvdmlkZXMKYW5kIGlzIGRlc2NyaWJlZCBpbiB0aGUgc2Vj dGlvbiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L2Jsb2IvbWFzdGVy L2RvYy9sb29weS1kb2Mub3JnI2Jhc2ljLWRlc3RydWN0dXJpbmciPkJhc2ljIERlc3RydWN0dXJp bmc8L2E+IGluIHRoZSBkb2N1bWVudGF0aW9uLgo8L3A+Cgo8cD4KSW4gYWRkaXRpb24gdG8gdGhl IGJ1aWx0LWluIGRlc3RydWN0dXJpbmcgc3R5bGUsIDxjb2RlPmxvb3B5PC9jb2RlPiBjYW4gb3B0 aW9uYWxseSB1c2UKZGVzdHJ1Y3R1cmluZyBwcm92aWRlZCBieSA8Y29kZT5wY2FzZS1sZXQ8L2Nv ZGU+LCA8Y29kZT5zZXEtbGV0PC9jb2RlPiwgdGhlIDxjb2RlPmRhc2g8L2NvZGU+IGxpYnJhcnku ICBUaGlzCnByb3ZpZGVzIGdyZWF0ZXIgZmxleGliaWxpdHkgYW5kIGFsbG93cyB5b3UgdG8gdXNl IGRlc3RydWN0dXJpbmcgcGF0dGVybnMgdGhhdAp5b3UncmUgYWxyZWFkeSBmYW1pbGlhciB3aXRo Lgo8L3A+Cgo8cD4KVGhlc2UgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgd2l0aCAiZmxhZ3MiLCBk ZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL29rYW1z bi9sb29weS9ibG9iL21hc3Rlci9kb2MvbG9vcHktZG9jLm9yZyN1c2luZy1mbGFncyI+VXNpbmcg RmxhZ3M8L2E+CmluIHRoZSBkb2N1bWVudGF0aW9uLgo8L3A+Cgo8cD4KSGVyZSBhcmUgYSBmZXcg ZXhhbXBsZXMgdGhhdCBkZW1vbnN0cmF0ZSBob3cgPGNvZGU+bG9vcHk8L2NvZGU+IGNhbiB1c2Ug ZGVzdHJ1Y3R1cmluZyB3aXRoCmFjY3VtdWxhdGlvbiBjb21tYW5kcy4KPC9wPgoKPGRpdiBjbGFz cz0ib3JnLXNyYy1jb250YWluZXIiPgo8cHJlIGNsYXNzPSJzcmMgc3JjLWVtYWNzLWxpc3AiPihy ZXF1aXJlICdsb29weS1kYXNoKQo7OyA9Jmd0OyAoKCgxICgyIDMpKSAoNCAoNSA2KSkpIDsgd2hv bGUKOzsgICAgICgxIDQpICAgICAgICAgICAgICAgICA7IGkKOzsgICAgICgzIDYpKSAgICAgICAg ICAgICAgICA7IGsKKGxvb3B5IChmbGFnIGRhc2gpCiAgICAgICAobGlzdCBlbGVtICcoKDEgKDIg MykpICg0ICg1IDYpKSkpCiAgICAgICAoY29sbGVjdCAod2hvbGUgJmFtcDthcyBpIChfIGspKSBl bGVtKQogICAgICAgKGZpbmFsbHktcmV0dXJuIHdob2xlIGkgaykpCgo7OyA9ICZndDsgKCgzIDUp ICg0IDYpKQoobG9vcHkgKGZsYWcgZGFzaCkKICAgICAgIChsaXN0ICgmYW1wO3BsaXN0IDphIGEg IDpiIGIpCiAgICAgICAgICAgICAnKCg6YSAzICA6YiA0IDpjIDcpICg6ZyA4IDphIDUgOmIgNikp KQogICAgICAgKGNvbGxlY3QgYS12YWxzIGEpCiAgICAgICAoY29sbGVjdCBiLXZhbHMgYikKICAg ICAgIChmaW5hbGx5LXJldHVybiBhLXZhbHMgYi12YWxzKSkKCihyZXF1aXJlICdsb29weS1wY2Fz ZSkKOzsgPSZndDsgKCgxIDQpICgzIDYpKQoobG9vcHkgKGZsYWcgcGNhc2UpCiAgICAgICAobGlz dCBlbGVtICcoKDEgKDIgMykpICg0ICg1IDYpKSkpCiAgICAgICAoY29sbGVjdCBgKCxhICgsXyAs YikpIGVsZW0pCiAgICAgICAoZmluYWxseS1yZXR1cm4gYSBiKSkKCjs7ID0mZ3Q7ICgoMSA2KSAo MyA4KSAoWzQgNV0gWzkgMTBdKSkKKHJlcXVpcmUgJ2xvb3B5LXNlcSkKKGxvb3B5IChmbGFnIHNl cSkKICAgICAgIChsaXN0IGVsZW0gJyhbMSAyIDMgNCA1XSBbNiA3IDggOSAxMF0pKQogICAgICAg KGNvbGxlY3QgW2EgXyBiICZhbXA7cmVzdCBjXSBlbGVtKQogICAgICAgKGZpbmFsbHktcmV0dXJu IGEgYiBjKSkKPC9wcmU+CjwvZGl2PgoKPHA+CkZvciBtb3JlIG9uIGhvdyA8Y29kZT5kYXNoPC9j b2RlPiBkb2VzIGRlc3RydWN0dXJpbmcsIHNlZSB0aGVpciBkb2N1bWVudGF0aW9uIG9uIHRoZSA8 YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFnbmFycy9kYXNoLmVsIy1sZXQtdmFybGlzdC1y ZXN0LWJvZHkiPi1sZXQ8L2E+CmV4cHJlc3Npb24uCjwvcD4KPC9kaXY+CjwvZGl2PgoKPGRpdiBp ZD0ib3V0bGluZS1jb250YWluZXItb3JnZDU5OWY0YyIgY2xhc3M9Im91dGxpbmUtMyI+CjxoMyBp ZD0ib3JnZDU5OWY0YyI+PHNwYW4gY2xhc3M9InNlY3Rpb24tbnVtYmVyLTMiPjUuPC9zcGFuPiBM b29wIENvbW1hbmRzIGluIEFyYml0cmFyeSBDb2RlPC9oMz4KPGRpdiBjbGFzcz0ib3V0bGluZS10 ZXh0LTMiIGlkPSJ0ZXh0LTUiPgo8cD4KVGhlIG1hY3JvIDxjb2RlPmxvb3B5LWl0ZXI8L2NvZGU+ IGNhbiBiZSB1c2VkIHRvIGVtYmVkIGxvb3AgY29tbWFuZHMgaW4gYXJiaXRyYXJ5IGNvZGUuICBJ dAppcyBzaW1pbGFyIGluIHVzZSB0byBDb21tb24gTGlzcCdzIEl0ZXJhdGUgbWFjcm8sIGJ1dCBp dCBpcyBub3QgYSBwb3J0IG9mCkl0ZXJhdGUgdG8gRW1hY3MgTGlzcC4KPC9wPgoKPGRpdiBjbGFz cz0ib3JnLXNyYy1jb250YWluZXIiPgo8cHJlIGNsYXNzPSJzcmMgc3JjLWVtYWNzLWxpc3AiPihy ZXF1aXJlICdsb29weS1pdGVyKQoKOzsgPSZndDsgKCgxIDIgMykgKC0zIC0yIC0xKSAoMCkpCihs b29weS1pdGVyIChhY2N1bS1vcHQgcG9zaXRpdmVzIG5lZ2F0aXZlcyBvdGhlcikKICAgICAgICAg ICAgKG51bWJlcmluZyBpIDpmcm9tIC0zIDp0byAzKQogICAgICAgICAgICAocGNhc2UgaQogICAg ICAgICAgICAgICgocHJlZCBjbC1wbHVzcCkgIChjb2xsZWN0aW5nIHBvc2l0aXZlcyBpKSkKICAg ICAgICAgICAgICAoKHByZWQgY2wtbWludXNwKSAoY29sbGVjdGluZyBuZWdhdGl2ZXMgaSkpCiAg ICAgICAgICAgICAgKF8gICAgICAgICAgICAgICAgKGNvbGxlY3Rpbmcgb3RoZXIgaSkpKQogICAg ICAgICAgICAoZmluYWxseS1yZXR1cm4gcG9zaXRpdmVzIG5lZ2F0aXZlcyBvdGhlcikpCgo7OyA9 Jmd0OyA2Cihsb29weS1pdGVyIChsaXN0aW5nIGVsZW0gJygxIDIgMykpCiAgICAgICAgICAgIChm dW5jYWxsICMnKGxhbWJkYSAoeCkgKHN1bW1pbmcgeCkpCiAgICAgICAgICAgICAgICAgICAgIGVs ZW0pKQo8L3ByZT4KPC9kaXY+Cgo8cD4KRm9yIG1vcmUgb24gdGhpcywgPGEgaHJlZj0iaHR0cHM6 Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9ibG9iL21hc3Rlci9kb2MvbG9vcHktZG9jLm9yZyN0 aGUtbG9vcHktaXRlci1tYWNybyI+c2VlIHRoZSBkb2N1bWVudGF0aW9uPC9hPi4KPC9wPgo8L2Rp dj4KPC9kaXY+Cgo8ZGl2IGlkPSJvdXRsaW5lLWNvbnRhaW5lci1hZGRpbmctY3VzdG9tLWNvbW1h bmRzIiBjbGFzcz0ib3V0bGluZS0zIj4KPGgzIGlkPSJhZGRpbmctY3VzdG9tLWNvbW1hbmRzIj48 c3BhbiBjbGFzcz0ic2VjdGlvbi1udW1iZXItMyI+Ni48L3NwYW4+IEFkZGluZyBDdXN0b20gQ29t bWFuZHM8L2gzPgo8ZGl2IGNsYXNzPSJvdXRsaW5lLXRleHQtMyIgaWQ9InRleHQtYWRkaW5nLWN1 c3RvbS1jb21tYW5kcyI+CjxwPgpJdCBpcyBlYXN5IHRvIGNyZWF0ZSBjdXN0b20gY29tbWFuZHMg Zm9yIExvb3B5LiAgVG8gc2VlIGhvdywgc2VlIHRoZSBzZWN0aW9uCjxhIGhyZWY9Imh0dHBzOi8v Z2l0aHViLmNvbS9va2Ftc24vbG9vcHkvYmxvYi9tYXN0ZXIvZG9jL2xvb3B5LWRvYy5vcmcjY3Vz dG9tLWNvbW1hbmRzIj5DdXN0b20gQ29tbWFuZHM8L2E+IGluIHRoZSBkb2N1bWVudGF0aW9uLgo8 L3A+CjwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9Im91dGxpbmUtY29udGFpbmVyLWhvdy1kb2VzLWl0 LWNvbXBhcmUtdG8tb3RoZXItYXBwcm9hY2hlcyIgY2xhc3M9Im91dGxpbmUtMyI+CjxoMyBpZD0i aG93LWRvZXMtaXQtY29tcGFyZS10by1vdGhlci1hcHByb2FjaGVzIj48c3BhbiBjbGFzcz0ic2Vj dGlvbi1udW1iZXItMyI+Ny48L3NwYW4+IENvbXBhcmluZyB0byA8Y29kZT5jbC1sb29wPC9jb2Rl PjwvaDM+CjxkaXYgY2xhc3M9Im91dGxpbmUtdGV4dC0zIiBpZD0idGV4dC1ob3ctZG9lcy1pdC1j b21wYXJlLXRvLW90aGVyLWFwcHJvYWNoZXMiPgo8cD4KU2VlIHRoZSBkb2N1bWVudGF0aW9uIHBh Z2UgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9ibG9iL21hc3Rlci9k b2MvbG9vcHktZG9jLm9yZyNjb21wYXJpbmctdG8tY2wtbG9vcCI+Q29tcGFyaW5nIHRvIDxjb2Rl PmNsLWxvb3A8L2NvZGU+PC9hPi4gIFNlZSBhbHNvIHRoZSB3aWtpIHBhZ2UgPGEgaHJlZj0iaHR0 cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS93aWtpL3NwZWVkLWNvbXBhcmlzb25zIj5TcGVl ZApDb21wYXJpc29uczwvYT4uCjwvcD4KPC9kaXY+CjwvZGl2PgoKCjxkaXYgaWQ9Im91dGxpbmUt Y29udGFpbmVyLW9yZ2I0OGJlMGYiIGNsYXNzPSJvdXRsaW5lLTMiPgo8aDMgaWQ9Im9yZ2I0OGJl MGYiPjxzcGFuIGNsYXNzPSJzZWN0aW9uLW51bWJlci0zIj44Ljwvc3Bhbj4gUmVhbC1Xb3JsZCBF eGFtcGxlczwvaDM+CjxkaXYgY2xhc3M9Im91dGxpbmUtdGV4dC0zIiBpZD0idGV4dC04Ij4KPHA+ ClNlZSB0aGUgd2lraSBwYWdlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9v cHkvd2lraS9FeGFtcGxlcyI+RXhhbXBsZXM8L2E+Lgo8L3A+CjwvZGl2Pgo8L2Rpdj4KCjwvZGl2 Pgo8aDI+TmV3czwvaDI+CjxkaXYgY2xhc3M9InNwbGljZSBuZXdzIj4KPGgzPkNIQU5HRUxPRzwv aDM+Cgo8cD5UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdXNlci1mYWNpbmcgY2hhbmdlcyB0 byBMb29weS48L3A+Cgo8aDQ+MC4xMi4wPC9oND4KCjxoNT5CdWdzIEZpeGVkPC9oNT4KCjx1bD4K PGxpPjxwPlJld3JpdGUgPGNvZGU+cHJlcGVuZDwvY29kZT4gaW4gdGVybXMgb2YgPGNvZGU+YXBw ZW5kPC9jb2RlPi4gIFJld3JpdGUgPGNvZGU+cHVzaC1pbnRvPC9jb2RlPiBpbiB0ZXJtcyBvZgo8 Y29kZT5jb2xsZWN0PC9jb2RlPiAoWyMxNjBdKS4gIFRoaXMgY2hhbmdlIG1ha2VzIHRoZXNlIGNv bW1hbmRzIHdvcmsgd2l0aCB0aGUgbmV3IHN5c3RlbSBmb3IKb3B0aW1pemVkIGFjY3VtdWxhdGlv biB2YXJpYWJsZXMuPC9wPjwvbGk+CjxsaT48cD5XaXRob3V0IGFuIGV4cGxpY2l0IHN0YXJ0aW5n IHZhbHVlIGZvciB0aGUgYWNjdW11bGF0aW9uIHZhcmlhYmxlLCA8Y29kZT5yZWR1Y2U8L2NvZGU+ IG5vdwp1c2VzIHRoZSBmaXJzdCBhY2N1bXVsYXRlZCB2YWx1ZSB3aXRob3V0IHBhc3NpbmcgaXQg dG8gdGhlIGZ1bmN0aW9uLiAgVGhpcyBpcwpob3cgcmVkdWNpbmcgYWN0dWFsbHkgd29ya3MsIGFu ZCB3YXMgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBQcmV2aW91c2x5LCB0aGUKZnVuY3Rpb24gd2Fz IGFsd2F5cyBjYWxsZWQuIDxlbT5UaGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlLjwvZW0+IFNlZSBb IzE2NF0uPC9wPgoKPHA+PGNvZGU+ZW1hY3MtbGlzcAo7OyBOb3cgY29ycmVjdCBiZWhhdmlvciAo d291bGQgcHJldmlvdXNseSBlcnJvcik6Cjs7ID0mZ3Q7IDYKKGxvb3B5IChsaXN0IGkgJygxIDIg MykpCiAgICAgKHJlZHVjZSBpICMnKikpCjwvY29kZT48L3A+PC9saT4KPGxpPjxwPkZpeCA8Y29k ZT5maW5kPC9jb2RlPiB3aGVuIDxjb2RlPjpvbi1mYWlsdXJlPC9jb2RlPiBpcyBuaWwgKFsjMTcx XSkuICBQcmV2aW91c2x5LCA8Y29kZT5uaWw8L2NvZGU+IHdhcwppbnRlcnByZXRlZCBhcyBub3Qg cGFzc2luZyA8Y29kZT46b24tZmFpbHVyZTwvY29kZT4uPC9wPgoKPHA+PGNvZGU+ZW1hY3MtbGlz cAo7OyBQcmV2aW91c2x5IGVycm9uZW91c2x5IHJldHVybmVkIDI3Ogo7OyA9Jmd0OyBuaWwKKGxv b3B5ICh3aXRoICh2YWwgMjcpKQogICAgICAobGlzdCBpICcoMSAyIDMpKQogICAgICAoZmluZCB2 YWwgbmlsICgmZ3Q7IGkgMTApIDpvbi1mYWlsdXJlIG5pbCkKICAgICAgKGZpbmFsbHktcmV0dXJu IHZhbCkpCjwvY29kZT48L3A+PC9saT4KPGxpPjxwPkZpeCA8Y29kZT5maW5kPC9jb2RlPiB3aGVu IDxjb2RlPkVYUFI8L2NvZGU+IGlzIG5pbCBhbmQgPGNvZGU+Om9uLWZhaWx1cmU8L2NvZGU+IGlz IGdpdmVuIChbIzE3MV0pLgpQcmV2aW91c2x5LCBhZnRlciB0aGUgdGVzdCBwYXNzZWQgYW5kIDxj b2RlPlZBUjwvY29kZT4gd2FzIHNldCB0byA8Y29kZT5uaWw8L2NvZGU+LCB0aGF0IDxjb2RlPm5p bDwvY29kZT4gd2FzCmludGVycHJldGVkIGFzIG5vdCBwYXNzaW5nIHRoZSB0ZXN0LCBzbyB0aGF0 IDxjb2RlPlZBUjwvY29kZT4gdGhlbiBib3VuZCB0byB0aGUgdmFsdWUKcGFzc2VkIGZvciA8Y29k ZT46b24tZmFpbHVyZTwvY29kZT4uPC9wPgoKPHA+PGNvZGU+ZW1hY3MtbGlzcAo7OyBQcmV2aW91 c2x5IGVycm9uZW91c2x5IHJldHVybmVkIDI3Ogo7OyA9Jmd0OyBuaWwKKGxvb3B5IChsaXN0IGkg JygxIDIgMykpCiAgICAgKGZpbmQgbmlsICgmZ3Q7IGkgMSkgOm9uLWZhaWx1cmUgMjcpKQo8L2Nv ZGU+PC9wPjwvbGk+CjxsaT48cD5CZXR0ZXIgc2lnbmFsIGFuIGVycm9yIHdpdGggY29uZmxpY3Rp bmcgYXJndW1lbnRzIGluIDxjb2RlPm51bWJlcnM8L2NvZGU+LiAgU2VlIFsjMTcyXS48L3A+PC9s aT4KPGxpPjxwPkZpeCBtYWNybyBleHBhbnNpb24gaW4gc29tZSBjYXNlcyBieSBub3QgcmVzZXR0 aW5nIHRoZSBtYWNybyBlbnZpcm9ubWVudAooWyMxNzNdKS4gIEZvciBleGFtcGxlLCB3ZSBmYWls ZWQgdG8gcGFzcyB0aGUgY3VycmVudC9tb2RpZmllZCBlbnZpcm9ubWVudCB0bwo8Y29kZT5tYWNy b2V4cGFuZC1hbGw8L2NvZGU+IGluIHNvbWUgY2FzZXMuPC9wPgoKPHA+PGNvZGU+ZW1hY3MtbGlz cAo7OyBQcmV2aW91c2x5IGZhaWxlZCB0byB1c2UgYGNsLWZsZXQnJ3MgaW50ZXJuYWxseSBkZWZp bmVkIGZ1bmN0aW9uCjs7IGZvciBgMTArJzoKOzsgPSZndDsgKDExIDEyIDEzIDE0IDE1KQoobG9v cHkgKG5hbWVkIG91dGVyKQogICAgIChsaXN0IGkgJygoMSAyKSAoMyA0KSAoNSkpKQogICAgIChs b29weS1pdGVyIChsaXN0aW5nIGogaSkKICAgICAgICAgICAgICAgICAoY2wtZmxldCAoKDEwKyAo eSkgKCsgMTAgeSkpKQogICAgICAgICAgICAgICAgICAgKGF0IG91dGVyCiAgICAgICAgICAgICAg ICAgICAgICAgKGNvbGxlY3RpbmcgKDEwKyBqKSkpKSkpCjwvY29kZT48L3A+PC9saT4KPGxpPjxw PlRoZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyBMb29weSdzIGRlZmF1bHQgZGVzdHJ1Y3R1cmlu ZyBzdHlsZSBhcyBhIHN1cGVyLXNldApvZiB0aGF0IG9mIDxjb2RlPmNsLWxpYjwvY29kZT4uICA8 Y29kZT4mYW1wO2tleTwvY29kZT4gbm93IGJlaGF2ZXMgbW9yZSBsaWtlIGl0IGRvZXMgaW4gPGNv ZGU+Y2wtbGliPC9jb2RlPiwKc2lnbmFsaW5nIGFuIGVycm9yIHdoZW4gYXBwcm9wcmlhdGUgKFsj MTgyXSkgYW5kIHN1cHBvcnRpbmcgdGhlIGZ1bGwgZm9ybQo8Y29kZT4oKEtFWSBWQVIpIERFRkFV TFQgU1VQUExJRUQpPC9jb2RlPi48L3A+PC9saT4KPC91bD4KCjxoNT5CcmVha2luZyBDaGFuZ2Vz PC9oNT4KCjx1bD4KPGxpPjxwPkZpeCBob3cgdGhlIGZpcnN0IGFjY3VtdWxhdGVkIHZhbHVlIGlz IHVzZWQgaW4gPGNvZGU+cmVkdWNlPC9jb2RlPi4gIFNlZSBbIzE2NF0gYW5kIHRoZQppdGVtIGFi b3ZlLjwvcD48L2xpPgo8bGk+PHA+TWFrZSBpdCBhbiBlcnJvciB0byByZS11c2UgaXRlcmF0aW9u IHZhcmlhYmxlcyB3aXRoIG11bHRpcGxlIGl0ZXJhdGlvbgpjb21tYW5kcyAoWyMxNDJdLCBbIzE0 NF0pLiAgVGhlIHJlc3VsdGluZyBjb2RlIHNob3VsZG4ndCBoYXZlIHdvcmtlZCBhbnl3YXksCmJ1 dCB3ZSBub3cgcmVwb3J0IGl0IGFzIGFuIGVycm9yIGR1cmluZyBtYWNybyBleHBhbnNpb24uPC9w PgoKPHA+PGNvZGU+ZWxpc3AKOzsgV2lsbCBub3cgc2lnbmFsIGFuIGVycm9yIGR1cmluZyBleHBh bnNpb246Cihsb29weSAobGlzdCBpICcoMSAyIDMpKQogICAgIChsaXN0IGkgJyg0IDUgNikpKQo8 L2NvZGU+PC9wPjwvbGk+CjxsaT48cD5UaGUga2V5d29yZCBhcmd1bWVudHMgb2YgY29tbWFuZHMg YXJlIG5vdyBldmFsdWF0ZWQgb25seSBvbmNlLiAgVGhpcyBpcyBub3cKY29uc2lzdGVudCB3aXRo IHBhc3NpbmcgZnVuY3Rpb24gdmFsdWVzIG9mIG90aGVyIGxvb3AgY29tbWFuZHMuICBJZiBjb25z dGFudAphY2NvcmRpbmcgdG8gPGNvZGU+bWFjcm9leHAtY29uc3QtcDwvY29kZT4sIHRoZW4gdGhl eSBhcmUgdXNlZCBkaXJlY3RseS4gIE90aGVyd2lzZSwgdGhlCnZhbHVlIGlzIGZpcnN0IHN0b3Jl ZCBpbiBhIHZhcmlhYmxlLiAgU2VlIFsjMTcwXSwgWyMxNzddLCBbIzE3Nl0sIGFuZCBbIzE4MF0u PC9wPjwvbGk+CjxsaT48cD5JbiBhY2N1bXVsYXRpb24gY29tbWFuZHMgdXNpbmcgdGhlIDxjb2Rl PnRlc3Q8L2NvZGU+IGtleXdvcmQgYXJndW1lbnQsIHRoZSBhcmd1bWVudCBvcmRlcgpvZiB0aGUg dHdvLWFyZ3VtZW50IHRlc3QgZnVuY3Rpb24gaXMgbm93IGRvY3VtZW50IGFzIDxjb2RlPihTRVFV RU5DRS1JVEVNLApURVNURUQtSVRFTSk8L2NvZGU+LCBzaW1pbGFyIHRvIDxjb2RlPnNlcS1jb250 YWlucy1wPC9jb2RlPi4gIFRoZSBhcmd1bWVudCBvcmRlciB3YXMgcHJldmlvdXNseQp1bmRvY3Vt ZW50ZWQgYW5kIG5vdCBndWFyYW50ZWVkLiBTZWUgWyMxNzBdIGFuZCBbIzE3N10uPC9wPjwvbGk+ CjxsaT48cD5MaWtlIGluIDxjb2RlPmNsLWxpYjwvY29kZT4sIGRlc3RydWN0dXJpbmcgd2l0aCA8 Y29kZT4mYW1wO2tleTwvY29kZT4gd2lsbCBub3cgc2lnbmFsIGFuIGVycm9yIGlmIHRoZXJlCmFy ZSB1bm1hdGNoZWQga2V5cyBhbmQgPGNvZGU+JmFtcDthbGxvdy1vdGhlci1rZXlzPC9jb2RlPiB3 YXMgbm90IGdpdmVuIG9yCjxjb2RlPjphbGxvdy1vdGhlci1rZXlzPC9jb2RlPiBpcyBub3QgcHJl c2VudCBpbiB0aGUgcHJvcGVydHkgbGlzdCB3aXRoIGEgbm9uLW5pbCB2YWx1ZQooWyMxODJdKS48 L3A+PC9saT4KPGxpPjxwPlRoZSBkZWZhdWx0IGRlc3RydWN0dXJpbmcgc3R5bGUgbm93IHVzZXMg PGNvZGU+cGNhc2U8L2NvZGU+IHVuZGVybmVhdGggKFsjMTgyXSkuICBUbwphY2NvbW9kYXRlIHRo aXMsIHNvbWUgb2YgdGhlIGRlZmluZWQgZXJyb3JzIGFuZCBlcnJvciBkZXRlY3Rpb25zIGhhdmUg Y2hhbmdlZC48L3A+PC9saT4KPC91bD4KCjxoNj5SZW1vdmFsczwvaDY+Cgo8dWw+CjxsaT5UaGUg ZGVwcmVjYXRlZCBmbGFnIDxjb2RlPnNwbGl0PC9jb2RlPiB3YXMgcmVtb3ZlZCAoWyMxNjVdLCBb IzEzMV0sIFsjMTI0XSkuICBJbnN0ZWFkLAp1c2UgbmFtZWQgYWNjdW11bGF0aW9uIHZhcmlhYmxl cyB3aXRoIHRoZSBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50IDxjb2RlPmFjY3VtLW9wdDwvY29kZT4K Li4uCi4uLjwvbGk+CjwvdWw+Cgo8L2Rpdj4KPC9kaXY+CgoKICAgICAgICA8ZGl2IGNsYXNzPSJm b290ZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgICAgICAg ICAgPHA+TGFzdCByZWZyZXNoZWQgb24gMjAyNC1GZWItMjQgMDE6NTQgR01UPC9wPgogICAgICAg ICAgICAgICAgPHA+Q29weXJpZ2h0IDIwMTYtMjAyNCA8YSBocmVmPSJodHRwczovL2ZzZi5vcmci PkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4sIEluYy48L3A+CiAgICAgICAgICAgICAgICA8 cD5EZXNpZ24gcHJvdmlkZWQgYnkgPGEgaHJlZj0iaHR0cHM6Ly9uaWNvbGFzLnBldHRvbi5mciI+ Tmljb2xhcyBQZXR0b248L2E+PC9wPgogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAg ICAgIFRoaXMgd2Vic2l0ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKICAgICAgICAgICAgICAgICAg PGEgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8i PkNDIEJZLVNBIDQuMDwvYT4KICAgICAgICAgICAgICAgICAgSW50ZXJuYXRpb25hbCBMaWNlbnNl LgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPHA+PGEgaHJlZj0iL2pzbGlj ZW5zZS5odG1sIiBkYXRhLWpzbGljZW5zZT0iMSI+SmF2YVNjcmlwdCBMaWNlbnNlczwvYT48L3A+ CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKPC9ib2R5Pgo= --b1_wISXFCJSVuT9BYs9H3anblqkBRKbpdkuMj6mbDGG4 Content-Type: text/markdown; charset=UTF-8; name=CHANGELOG.md Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=CHANGELOG.md IyBDSEFOR0VMT0cKClRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB1c2VyLWZhY2luZyBjaGFu Z2VzIHRvIExvb3B5LgoKIyMgMC4xMi4wCgojIyMgQnVncyBGaXhlZAoKLSBSZXdyaXRlIGBwcmVw ZW5kYCBpbiB0ZXJtcyBvZiBgYXBwZW5kYC4gIFJld3JpdGUgYHB1c2gtaW50b2AgaW4gdGVybXMg b2YKICBgY29sbGVjdGAgKFsjMTYwXSkuICBUaGlzIGNoYW5nZSBtYWtlcyB0aGVzZSBjb21tYW5k cyB3b3JrIHdpdGggdGhlIG5ldyBzeXN0ZW0gZm9yCiAgb3B0aW1pemVkIGFjY3VtdWxhdGlvbiB2 YXJpYWJsZXMuCgotIFdpdGhvdXQgYW4gZXhwbGljaXQgc3RhcnRpbmcgdmFsdWUgZm9yIHRoZSBh Y2N1bXVsYXRpb24gdmFyaWFibGUsIGByZWR1Y2VgIG5vdwogIHVzZXMgdGhlIGZpcnN0IGFjY3Vt dWxhdGVkIHZhbHVlIHdpdGhvdXQgcGFzc2luZyBpdCB0byB0aGUgZnVuY3Rpb24uICBUaGlzIGlz CiAgaG93IHJlZHVjaW5nIGFjdHVhbGx5IHdvcmtzLCBhbmQgd2FzIHRoZSBpbnRlbmRlZCBiZWhh dmlvci4gUHJldmlvdXNseSwgdGhlCiAgZnVuY3Rpb24gd2FzIGFsd2F5cyBjYWxsZWQuIF9UaGlz IGlzIGEgYnJlYWtpbmcgY2hhbmdlLl8gU2VlIFsjMTY0XS4KCiAgYGBgZW1hY3MtbGlzcAogIDs7 IE5vdyBjb3JyZWN0IGJlaGF2aW9yICh3b3VsZCBwcmV2aW91c2x5IGVycm9yKToKICA7OyA9PiA2 CiAgKGxvb3B5IChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgIChyZWR1Y2UgaSAjJyopKQogIGBg YAoKLSBGaXggYGZpbmRgIHdoZW4gYDpvbi1mYWlsdXJlYCBpcyBuaWwgKFsjMTcxXSkuICBQcmV2 aW91c2x5LCBgbmlsYCB3YXMKICBpbnRlcnByZXRlZCBhcyBub3QgcGFzc2luZyBgOm9uLWZhaWx1 cmVgLgoKICBgYGBlbWFjcy1saXNwCiAgIDs7IFByZXZpb3VzbHkgZXJyb25lb3VzbHkgcmV0dXJu ZWQgMjc6CiAgIDs7ID0+IG5pbAogICAobG9vcHkgKHdpdGggKHZhbCAyNykpCiAgICAgICAgICAo bGlzdCBpICcoMSAyIDMpKQogICAgICAgICAgKGZpbmQgdmFsIG5pbCAoPiBpIDEwKSA6b24tZmFp bHVyZSBuaWwpCiAgICAgICAgICAoZmluYWxseS1yZXR1cm4gdmFsKSkKICBgYGAKCi0gRml4IGBm aW5kYCB3aGVuIGBFWFBSYCBpcyBuaWwgYW5kIGA6b24tZmFpbHVyZWAgaXMgZ2l2ZW4gKFsjMTcx XSkuCiAgUHJldmlvdXNseSwgYWZ0ZXIgdGhlIHRlc3QgcGFzc2VkIGFuZCBgVkFSYCB3YXMgc2V0 IHRvIGBuaWxgLCB0aGF0IGBuaWxgIHdhcwogIGludGVycHJldGVkIGFzIG5vdCBwYXNzaW5nIHRo ZSB0ZXN0LCBzbyB0aGF0IGBWQVJgIHRoZW4gYm91bmQgdG8gdGhlIHZhbHVlCiAgcGFzc2VkIGZv ciBgOm9uLWZhaWx1cmVgLgoKICBgYGBlbWFjcy1saXNwCiAgOzsgUHJldmlvdXNseSBlcnJvbmVv dXNseSByZXR1cm5lZCAyNzoKICA7OyA9PiBuaWwKICAobG9vcHkgKGxpc3QgaSAnKDEgMiAzKSkK ICAgICAgICAgKGZpbmQgbmlsICg+IGkgMSkgOm9uLWZhaWx1cmUgMjcpKQogIGBgYAoKLSBCZXR0 ZXIgc2lnbmFsIGFuIGVycm9yIHdpdGggY29uZmxpY3RpbmcgYXJndW1lbnRzIGluIGBudW1iZXJz YC4gIFNlZSBbIzE3Ml0uCgotIEZpeCBtYWNybyBleHBhbnNpb24gaW4gc29tZSBjYXNlcyBieSBu b3QgcmVzZXR0aW5nIHRoZSBtYWNybyBlbnZpcm9ubWVudAogIChbIzE3M10pLiAgRm9yIGV4YW1w bGUsIHdlIGZhaWxlZCB0byBwYXNzIHRoZSBjdXJyZW50L21vZGlmaWVkIGVudmlyb25tZW50IHRv CiAgYG1hY3JvZXhwYW5kLWFsbGAgaW4gc29tZSBjYXNlcy4KCiAgYGBgZW1hY3MtbGlzcAogIDs7 IFByZXZpb3VzbHkgZmFpbGVkIHRvIHVzZSBgY2wtZmxldCcncyBpbnRlcm5hbGx5IGRlZmluZWQg ZnVuY3Rpb24KICA7OyBmb3IgYDEwKyc6CiAgOzsgPT4gKDExIDEyIDEzIDE0IDE1KQogIChsb29w eSAobmFtZWQgb3V0ZXIpCiAgICAgICAgIChsaXN0IGkgJygoMSAyKSAoMyA0KSAoNSkpKQogICAg ICAgICAobG9vcHktaXRlciAobGlzdGluZyBqIGkpCiAgICAgICAgICAgICAgICAgICAgIChjbC1m bGV0ICgoMTArICh5KSAoKyAxMCB5KSkpCiAgICAgICAgICAgICAgICAgICAgICAgKGF0IG91dGVy CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2xsZWN0aW5nICgxMCsgaikpKSkpKQogIGBg YAoKLSBUaGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgTG9vcHkncyBkZWZhdWx0IGRlc3RydWN0 dXJpbmcgc3R5bGUgYXMgYSBzdXBlci1zZXQKICBvZiB0aGF0IG9mIGBjbC1saWJgLiAgYCZrZXlg IG5vdyBiZWhhdmVzIG1vcmUgbGlrZSBpdCBkb2VzIGluIGBjbC1saWJgLAogIHNpZ25hbGluZyBh biBlcnJvciB3aGVuIGFwcHJvcHJpYXRlIChbIzE4Ml0pIGFuZCBzdXBwb3J0aW5nIHRoZSBmdWxs IGZvcm0KICBgKChLRVkgVkFSKSBERUZBVUxUIFNVUFBMSUVEKWAuCgojIyMgQnJlYWtpbmcgQ2hh bmdlcwoKLSBGaXggaG93IHRoZSBmaXJzdCBhY2N1bXVsYXRlZCB2YWx1ZSBpcyB1c2VkIGluIGBy ZWR1Y2VgLiAgU2VlIFsjMTY0XSBhbmQgdGhlCiAgaXRlbSBhYm92ZS4KCi0gTWFrZSBpdCBhbiBl cnJvciB0byByZS11c2UgaXRlcmF0aW9uIHZhcmlhYmxlcyB3aXRoIG11bHRpcGxlIGl0ZXJhdGlv bgogIGNvbW1hbmRzIChbIzE0Ml0sIFsjMTQ0XSkuICBUaGUgcmVzdWx0aW5nIGNvZGUgc2hvdWxk bid0IGhhdmUgd29ya2VkIGFueXdheSwKICBidXQgd2Ugbm93IHJlcG9ydCBpdCBhcyBhbiBlcnJv ciBkdXJpbmcgbWFjcm8gZXhwYW5zaW9uLgoKICBgYGBlbGlzcAogIDs7IFdpbGwgbm93IHNpZ25h bCBhbiBlcnJvciBkdXJpbmcgZXhwYW5zaW9uOgogIChsb29weSAobGlzdCBpICcoMSAyIDMpKQog ICAgICAgICAobGlzdCBpICcoNCA1IDYpKSkKICBgYGAKCi0gVGhlIGtleXdvcmQgYXJndW1lbnRz IG9mIGNvbW1hbmRzIGFyZSBub3cgZXZhbHVhdGVkIG9ubHkgb25jZS4gIFRoaXMgaXMgbm93CiAg Y29uc2lzdGVudCB3aXRoIHBhc3NpbmcgZnVuY3Rpb24gdmFsdWVzIG9mIG90aGVyIGxvb3AgY29t bWFuZHMuICBJZiBjb25zdGFudAogIGFjY29yZGluZyB0byBgbWFjcm9leHAtY29uc3QtcGAsIHRo ZW4gdGhleSBhcmUgdXNlZCBkaXJlY3RseS4gIE90aGVyd2lzZSwgdGhlCiAgdmFsdWUgaXMgZmly c3Qgc3RvcmVkIGluIGEgdmFyaWFibGUuICBTZWUgWyMxNzBdLCBbIzE3N10sIFsjMTc2XSwgYW5k IFsjMTgwXS4KCi0gSW4gYWNjdW11bGF0aW9uIGNvbW1hbmRzIHVzaW5nIHRoZSBgdGVzdGAga2V5 d29yZCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IG9yZGVyCiAgb2YgdGhlIHR3by1hcmd1bWVudCB0 ZXN0IGZ1bmN0aW9uIGlzIG5vdyBkb2N1bWVudCBhcyBgKFNFUVVFTkNFLUlURU0sCiAgVEVTVEVE LUlURU0pYCwgc2ltaWxhciB0byBgc2VxLWNvbnRhaW5zLXBgLiAgVGhlIGFyZ3VtZW50IG9yZGVy IHdhcyBwcmV2aW91c2x5CiAgdW5kb2N1bWVudGVkIGFuZCBub3QgZ3VhcmFudGVlZC4gU2VlIFsj MTcwXSBhbmQgWyMxNzddLgoKLSBMaWtlIGluIGBjbC1saWJgLCBkZXN0cnVjdHVyaW5nIHdpdGgg YCZrZXlgIHdpbGwgbm93IHNpZ25hbCBhbiBlcnJvciBpZiB0aGVyZQogIGFyZSB1bm1hdGNoZWQg a2V5cyBhbmQgYCZhbGxvdy1vdGhlci1rZXlzYCB3YXMgbm90IGdpdmVuIG9yCiAgYDphbGxvdy1v dGhlci1rZXlzYCBpcyBub3QgcHJlc2VudCBpbiB0aGUgcHJvcGVydHkgbGlzdCB3aXRoIGEgbm9u LW5pbCB2YWx1ZQogIChbIzE4Ml0pLgoKLSBUaGUgZGVmYXVsdCBkZXN0cnVjdHVyaW5nIHN0eWxl IG5vdyB1c2VzIGBwY2FzZWAgdW5kZXJuZWF0aCAoWyMxODJdKS4gIFRvCiAgYWNjb21vZGF0ZSB0 aGlzLCBzb21lIG9mIHRoZSBkZWZpbmVkIGVycm9ycyBhbmQgZXJyb3IgZGV0ZWN0aW9ucyBoYXZl IGNoYW5nZWQuCgojIyMjIFJlbW92YWxzCgotIFRoZSBkZXByZWNhdGVkIGZsYWcgYHNwbGl0YCB3 YXMgcmVtb3ZlZCAoWyMxNjVdLCBbIzEzMV0sIFsjMTI0XSkuICBJbnN0ZWFkLAogIHVzZSBuYW1l ZCBhY2N1bXVsYXRpb24gdmFyaWFibGVzIHdpdGggdGhlIHNwZWNpYWwgbWFjcm8gYXJndW1lbnQg YGFjY3VtLW9wdGAKICBhcyBhcHByb3ByaWF0ZS4KCi0gVGhlIGRlcHJlY2F0ZWQgZmxhZyBgbGF4 LW5hbWluZ2Agd2FzIHJlbW92ZWQgKFsjMTY1XSwgWyMxMTldKS4gIEluc3RlYWQsIHNlZQogIGBs b29weS1pdGVyLWJhcmUtY29tbWFuZHNgIGFuZCBgbG9vcHktaXRlci1iYXJlLXNwZWNpYWwtbWFj cm8tYXJndW1lbnRzYC4KCi0gVGhlIGRlcHJlY2F0ZWQgY29tbWFuZCBgc3ViLWxvb3BgIHdhcyBy ZW1vdmVkIChbIzE2NV0sIFsjMTMwXSwgWyMxMjddKS4gIFVzZQogIHRoZSBjb21tYW5kcy9tYWNy b3MgYGxvb3B5YCBhbmQgYGxvb3B5LWl0ZXJgIGluc3RlYWQuICBJbiBgbG9vcHlgLCBgc3ViLWxv b3BgCiAgYWN0ZWQgbGlrZSBgbG9vcHlgLiAgSW4gYGxvb3B5LWl0ZXJgLCBgc3ViLWxvb3BgIGFj dGVkIGxpa2UgYGxvb3B5LWl0ZXJgLgoKLSBUaGUgb2Jzb2xldGUgdmFyaWFibGUgYWxpYXMgYGxv b3B5LWl0ZXItY29tbWFuZC1rZXl3b3Jkc2AgZm9yIHRoZSB2YXJpYWJsZQogIGBsb29weS1pdGVy LWtleXdvcmRzYCB3YXMgcmVtb3ZlZCAoWyMxNjVdLCBbIzExOV0pLgoKCiMjIyMgRGVwcmVjYXRp b25zCgotIFVzaW5nIG11bHRpcGxlIGNvbmRpdGlvbnMgaW4gYGFsd2F5c2AsIGBuZXZlcmAsIGFu ZCBgdGhlcmVpc2AgaXMgZGVwcmVjYXRlZAogIChbIzE0NV0sIFsjMTYxXSkuICBUaGVzZSBjb21t YW5kcyB3aWxsIGJlIGNoYW5nZWQgdG8gaGF2ZSBjYWxsIGFyZ3VtZW50IGxpc3RzCiAgbW9yZSBs aWtlIGFjY3VtdWxhdGlvbiBjb21tYW5kcywgc3VjaCBhcyBgKGFsd2F5cyBbVkFSXSBWQUwgJmtl eSBpbnRvKWAuICBUaGlzCiAgd2lsbCBzaW1wbGlmeSB0aGUgY29kZSBhbmQgcmVtb3ZlIGFuIGlu Y29uc2lzdGVuY3kgYmV0d2VlbiB0aGVtIGFuZCB0aGUgb3RoZXIKICBjb21tYW5kcy4KCi0gYDpy ZXN1bHQtdHlwZWAgaXMgZGVwcmVjYXRlZCAoWyMxNTRdLCBbIzE2Ml0pLiAgVGhpcyBmZWF0dXJl IHdhcyB0YWtlbiBmcm9tCiAgQ29tbW9uIExpc3AncyBJdGVyYXRlLiAgV2hpbGUgdXNlZnVsLCB0 aGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0bHkgdXNpbmcKICBuYW1lZCBhY2N1bXVsYXRpb24g dmFyaWFibGVzIChzdWNoIGFzIGBsb29weS1yZXN1bHRgKSBpbiBzcGVjaWFsIG1hY3JvCiAgYXJn dW1lbnRzLCBzdWNoIGFzIGBmaW5hbGx5LXJldHVybmAuICBCZWNhdXNlIG9mIGBhY2N1bS1vcHRg LCB1c2luZyBuYW1lZAogIHZhcmlhYmxlcyBpcyBtb3JlIGZsZXhpYmxlLgoKICBgYGBlbGlzcAog IDs7IENhbid0IGJlIGRvbmUgdXNpbmcgb25seSBgOnJlc3VsdC10eXBlJy4KICA7OyA9PiAoWzIg NCA2XSBbMyA2IDldKQogIChsb29weSAoYWNjdW0tb3B0IGRvdWJsZXMgdHJpcGxlcykKICAgICAg ICAgKGxpc3QgaSAnKDEgMiAzKSkKICAgICAgICAgKGNvbGxlY3QgZG91YmxlcyAoKiBpIDIpKQog ICAgICAgICAoY29sbGVjdCB0cmlwbGVzICgqIGkgMykpCiAgICAgICAgIChmaW5hbGx5LXJldHVy biAoY2wtY29lcmNlIGRvdWJsZXMgJ3ZlY3RvcikKICAgICAgICAgICAgICAgICAgICAgICAgIChj bC1jb2VyY2UgdHJpcGxlcyAndmVjdG9yKSkpCiAgYGBgCgotIGA6aW5pdGAgaXMgZGVwcmVjYXRl ZCAoWyMxNDZdLCBbIzE2M10pLiAgU29tZSBjb21tYW5kcyBoYWQgc3BlY2lhbCBiZWhhdmlvciB3 aXRoCiAgYDppbml0YCwgc3VjaCBhcyBgc2V0LXByZXZgLCBidXQgdGhpcyBoYXMgYmVlbiBjaGFu Z2VkIHRvIHdvcmsgd2l0aCBgd2l0aGAKICB0b28uICBTb21lIGl0ZXJhdGlvbiBjb21tYW5kcywg c3VjaCBhcyBgbnVtYmVyc2AsIGNoYW5nZSBiZWhhdmlvciBiYXNlZCBvbgogIHdoZXRoZXIgYSB2 YXJpYWJsZSBpcyBgd2l0aGAgYm91bmQuICBSZW1vdmluZyBgOmluaXRgIGluY3JlYXNlcyBjb25z aXN0ZW5jeQogIHdpdGggdGhlc2UgY29tbWFuZHMgYW5kIGRlY3JlYXNlcyB0aGUgZHVwbGljYXRp b24gb2YgZmVhdHVyZXMuCiAgLSBSZWxhdGVkbHksIHJlbW92ZSBkb2N1bWVudGF0aW9uIHRoYXQg c2FpZCBgYWRqb2luYCBzdXBwb3J0ZWQgYDppbml0YC4gIEl0CiAgICBkb2VzIG5vdC4KCi0gVGhl IG5vbi1rZXl3b3JkIGFyZ3VtZW50cyBvZiBgbnVtYmVyc2AgYXJlIGRlcHJlY2F0ZWQgKFsjMTcy XSkuICBUaGVzZQogIGFyZ3VtZW50cyB3ZXJlIG1lYW50IHRvIGJlIHNpbWlsYXIgdG8gdGhlIGFy Z3VtZW50cyBvZiBQeXRob25zIGByYW5nZWAKICBmZWF0dXJlLCBidXQsIGRlcGVuZGluZyBvbiBw cmlvciBrbm93bGVkZ2UsIHdvdWxkIGdlbmVyYWxseSBwcm9kdWNlIHdvcnNlCiAgY29kZS4gIENh c2VzIGluIHdoaWNoIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGl0ZXJhdGlvbiAodXAgb3IgZG93bikg aXMgdW5rbm93bgogIGNhbiBub3cgYmUgaGFuZGxlZCBieSB0aGUgbmV3IGA6dGVzdGAgYXJndW1l bnQsIHdoaWNoIGlzIG1vcmUgZmxleGlibGUgdGhhbgogIHRoZSBub24ta2V5d29yZCBhcmd1bWVu dHMgYW55d2F5LgoKIyMjIENvbW1hbmQgSW1wcm92ZW1lbnRzCgotIFRvIHByb2R1Y2UgZmFzdGVy IGNvZGUsIHNvbWUgY29tbWFuZHMgbm93IGF2b2lkIGNyZWF0aW5nIGFuIGludGVybWVkaWF0ZQog IHZhcmlhYmxlIGJ5IGluaXRpYWxpemluZyBpdGVyYXRpb24gdmFyaWFibGVzIHRvIHRoZWlyIGZp cnN0IHZhbHVlIChbIzE0Ml0sCiAgWyMxNDRdKS4gIFRoaXMgaW5pdGlhbGl6YXRpb24gY2FuIGJl IGNvbnRyb2xsZWQgdXNpbmcgdGhlIGB3aXRoYCBzcGVjaWFsIG1hY3JvCiAgYXJndW1lbnQsIHdo aWNoIGNhbiByZXN1bHQgaW4gc2xvd2VyIGNvZGUuICBQcmV2aW91c2x5LCB0aGVzZSBpdGVyYXRp b24KICB2YXJpYWJsZXMgd2VyZSBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYG5pbGAgYW5kIHVwZGF0 ZWQgdG8gdGhlIGZpcnN0IHZhbHVlIGF0CiAgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tYW5kLgog IC0gYGN5Y2xlYCBhbHJlYWR5IGhhcyB0aGlzIGJlaGF2aW9yLCBidXQgY2FuIG5vdyBiZSBzbG93 ZXIuCiAgLSBgY29uc2Agd2lsbCBpbml0aWFsaXplIHRvIHRoZSBsaXN0IHZhbHVlLgogIC0gYG51 bXNgIGFuZCBgc2VxLWluZGV4YCB3aWxsIGluaXRpYWxpemUgdG8gdGhlIGZpcnN0IG51bWVyaWMg dmFsdWUuCgotIFRoZSBiZWhhdmlvciBvZiBgYWx3YXlzYCwgYG5ldmVyYCwgYW5kIGB0aGVyZWlz YCBoYXMgYmVlbiBzbGlnaHRseSBjaGFuZ2VkIHRvCiAgYmUgbW9yZSBjb252ZW5pZW50IGFuZCBj b25zaXN0ZW50IHdpdGggb3RoZXIgY29tbWFuZHMgKFsjMTQ0XSkuCiAgLSBUaGUgY29tbWFuZHMg bm93IGV4aXQgdGhlIGxvb3Agd2l0aG91dCBmb3JjaW5nIGEgcmV0dXJuIHZhbHVlLCB3aGljaCBh bGxvd3MKICAgIGltcGxpY2l0IHJldHVybiB2YWx1ZXMgdG8gYmUgZmluYWxpemVkLgoKICAtIFRo ZSBjb21tYW5kcyBub3cgdXNlIHZhcmlhYmxlcyB0byBzdG9yZSB0aGUgaW1wbGljaXQgcmV0dXJu IHZhbHVlcyBvZiB0aGUKICAgIGxvb3AsIGRlZmF1bHRpbmcgdG8gYGxvb3B5LXJlc3VsdGAgYW5k IHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQgdmlhIGA6aW50b2AsCiAgICBzaW1pbGFyIHRvIGFjY3Vt dWxhdGlvbiBjb21tYW5kcy4KCiAgICBgYGBlbGlzcAogICAgOzsgPT4gImhlbGxvIHRoZXJlIgog ICAgKGxvb3B5IChsaXN0IGkgJygxIDEgMSAxKSkKICAgICAgICAgICA7OyBUaGUgcmV0dXJuIHZh bHVlIG9mIGAoYW5kICg8IGkgMikgImhlbGxvIiknIGlzICJoZWxsbyIuCiAgICAgICAgICAgKGFs d2F5cyAoPCBpIDIpICJoZWxsbyIpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIChjb25jYXQg bG9vcHktcmVzdWx0ICIgdGhlcmUiKSkpCgogICAgOzsgPT4gNwogICAgKGxvb3B5IChsaXN0IGkg JyhuaWwgbmlsIDMgbmlsKSkKICAgICAgICAgICAodGhlcmVpcyBpKQogICAgICAgICAgIChmaW5h bGx5LXJldHVybiAoKyBsb29weS1yZXN1bHQgNCkpKQogICAgYGBgCgogIC0gQXMgd2l0aCBvdGhl ciBpbmNvbXBhdGlibGUgY29tbWFuZHMsIGFuIGVycm9yIGlzIG5vdyBzaWduYWxlZCB3aGVuIHRy eWluZyB0bwogICAgdXNlIGB0aGVyZWlzYCB3aXRoIGBhbHdheXNgIG9yIGBuZXZlcmAgKip3aGVu IHVzaW5nIHRoZSBzYW1lIHZhcmlhYmxlKioKICAgIChbIzE0NF0pLgoKLSBBZGQgYSBgOnRlc3Rg IGtleXdvcmQgYXJndW1lbnQgdG8gYG51bWJlcnNgLCBgYXJyYXlgLCBgYXJyYXktcmVmYCwgYHNl cXVlbmNlYCwKICBgc2VxdWVuY2UtcmVmYCwgYW5kIGBzZXF1ZW5jZS1pbmRleGAgKFsjMTcyXSwg WyMxODBdKS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4KICB0aGUgZGlyZWN0aW9uIG9mIHRoZSBpdGVy YXRpb24gaXMgbm90IGtub3duIGFoZWFkIG9mIHRpbWUuCgogIGBgYGVsaXNwCiAgOzsgPT4gKDEw IDkuNSA5LjAgOC41IDguMCA3LjUgNy4wIDYuNSA2LjAgNS41KQogIChsb29weSAod2l0aCAoc3Rh cnQgMTApCiAgICAgICAgICAgICAgIChlbmQgNSkKICAgICAgICAgICAgICAgKGZ1bmMgIyc+KQog ICAgICAgICAgICAgICAoc3RlcCAtMC41KSkKICAgICAgICAgKG51bWJlcnMgaSA6dG8gZW5kIDpm cm9tIHN0YXJ0IDpieSBzdGVwIDp0ZXN0IGZ1bmMpCiAgICAgICAgIChjb2xsZWN0IGkpKQogIGBg YAoKLSBCeSB1c2luZyBgbWFjcm9leHAtY29uc3QtcGAsIExvb3B5IG5vdyBiZXR0ZXIgdXNlcyBj b25zdGFudCB2YWx1ZXMgKFsjMTc2XSwKICBbIzE4MF0pLiAgSW5zdGVhZCBvZiBhbHdheXMgY3Jl YXRpbmcgYSB2YXJpYWJsZSBpbiBzb21lIGNhc2VzLCBpdCBub3cgYmV0dGVyCiAgdXNlcyB0aGUg Y29uc3RhbnQgdmFsdWUgZGlyZWN0bHksIHdoaWNoIEVtYWNzIGNhbiBvcHRpbWl6ZSB0byBhdm9p ZCBzb21lIHVzZXMKICBvZiBgZnVuY2FsbGAuCgojIyMgRGVzdHJ1Y3R1cmluZyBJbXByb3ZlbWVu dHMKCi0gQSBgbG9vcHlgIGBwY2FzZWAgcGF0dGVybiBoYXMgYmVlbiBhZGRlZCAoWyMxODJdKS4g IERlc3RydWN0dXJpbmcgaXMgbm93IGJhc2VkCiAgb24gYHBjYXNlYC4KLSBBIGAmbWFwYCBjb25z dHJ1Y3Qgd2FzIGFkZGVkIGZvciBkZXN0cnVjdHVyaW5nLCBhbmFsb2dvdXMgdG8gYCZrZXlgIGJ1 dCB1c2luZwogIGBtYXAtZWx0YCBhbmQgdGhlIGBtYXBgIGBwY2FzZWAgcGF0dGVybiAoWyMxODJd KS4gIEV4dGVuZGluZyB0aGUgYG1hcGAKICBwYXR0ZXJuLCBgJm1hcGAgYWxzbyBoYXMgYSBgU1VQ UExJRURgIHBhcmFtZXRlciwgYXMgaW4gYChLRVkgVkFSIERFRkFVTFQKICBTVVBQTElFRClgLgot IEFuIGAmb3B0aW9uYWxgIGNvbnN0cnVjdCB3YXMgYWRkZWQsIGxpa2UgaW4gYGNsLWxpYmAgKFsj MTgyXSkuCi0gYCZrZXlgIG5vdyB3b3JrcyBsaWtlIGl0IGRvZXMgaW4gYGNsLWxpYmAsIGluY2x1 ZGluZyB0aGUgYERFRkFVTFRgLAogIGBTVVBQTElFRGAsIGFuZCBgS0VZYCB2YWx1ZXMgaW4gdGhl IGZ1bGwgZm9ybSBhbmQgc2lnbmFsaW5nIGFuIGVycm9yCiAgd2hlbiBhcHByb3ByaWF0ZSAoWyMx ODJdKS4KCiMjIyBPdGhlciBDaGFuZ2VzCgotIEFkZCBgbG9vcHktLW90aGVyLXZhcnNgLCBnaXZl biB0aGUgbW9yZSBleHBsaWNpdCByZXN0cmljdGlvbiBvbgogIGBsb29weS0taXRlcmF0aW9uLXZh cnNgIChbIzE0NF0pLiAgRm9yIGV4YW1wbGUsIHRoZXNlIGFyZSB0aGUgdmFyaWFibGVzIGJvdW5k CiAgYnkgdGhlIGBzZXRgIGNvbW1hbmQsIHdoaWNoIGFyZSBhbGxvd2VkIHRvIG9jY3VyIGluIG1v cmUgdGhhbiBvbmUgY29tbWFuZC4KCi0gVG8gcmVkdWNlIHRoZSBtYWludGVuYW5jZSBidXJkZW4s IGRlc3RydWN0dXJpbmcgd2FzIHJlLWltcGxlbWVudGVkIHVzaW5nCiAgYHBjYXNlYCAoWyMxODJd KS4KClsjMTQ0XTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9pc3N1ZS8xNDIKWyMx NDRdOiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwvMTQ0ClsjMTQ1XTogaHR0 cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9pc3N1ZS8xNDUKWyMxNDZdOiBodHRwczovL2dp dGh1Yi5jb20vb2thbXNuL2xvb3B5L2lzc3VlLzE0NgpbIzE1NF06IGh0dHBzOi8vZ2l0aHViLmNv bS9va2Ftc24vbG9vcHkvaXNzdWUvMTU0ClsjMTYwXTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1z bi9sb29weS9wdWxsLzE2MApbIzE2MV06IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkv cHVsbC8xNjEKWyMxNjJdOiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwvMTYy ClsjMTYzXTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9wdWxsLzE2MwpbIzE2NF06 IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvcHVsbC8xNjQKWyMxNjVdOiBodHRwczov L2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwvMTY1ClsjMTcwXTogaHR0cHM6Ly9naXRodWIu Y29tL29rYW1zbi9sb29weS9pc3N1ZXMvMTcwClsjMTcxXTogaHR0cHM6Ly9naXRodWIuY29tL29r YW1zbi9sb29weS9wdWxsLzE3MQpbIzE3Ml06IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9v cHkvcHVsbC8xNzIKWyMxNzNdOiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwv MTczClsjMTc2XTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9pc3N1ZXMvMTc2Clsj MTc3XTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9wdWxsLzE3NwpbIzE4MF06IGh0 dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvcHVsbC8xODAKWyMxODJdOiBodHRwczovL2dp dGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwvMTgyCgojIyAwLjExLjIKCiMjIyBCdWdzIEZpeGVk CgotIEZpeCBgbnVuaW9uYCBmb3IgYXBwZW5kaW5nIG9udG8gdGhlIHN0YXJ0IG9mIGVuZC1vcHRp bWl6ZWQgbGlzdHMsIGFzIGluIHRoZQogIGJlbG93IGV4YW1wbGUuCgogIGBgYGVsaXNwCiAgOzsg PT4gKDEwIDggOSA3IDUgNiA0IDEgMiAzKQogIChsb29weSAoYWNjdW0tb3B0IChjb2xsIGVuZCkp CiAgICAgICAgICAgICAgIChhcnJheSBpICh2ZWN0b3IgKGxpc3QgMSAyIDMpIChsaXN0IDEgMiAz KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IDQgNSA2KSAobGlzdCA3IDgg OSkpKQogICAgICAgICAgICAgICAobnVuaW9uIGNvbGwgKGNvcHktc2VxdWVuY2UgaSkgOmF0IHN0 YXJ0KQogICAgICAgICAgICAgICAobnVuaW9uIGNvbGwgKG1hcGNhciAjJzErIGkpIDphdCBzdGFy dCkKICAgICAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGNvbGwpKQogIGBgYAoKIyMgMC4xMS4x CgpSZWxlYXNlZCAyMDIzLTAzLTEzLgoKIyMjIEJ1Z3MgRml4ZWQKCi0gRml4IGBuY29uY2AtaW5n IG9udG8gdGhlIG5vbi1vcHRpbWl6ZWQgZW5kIG9mIGFuIG9wdGltaXplZCBjb2xsZWN0aW9uLCBh cyBpbgogIHRoZSBiZWxvdyBleGFtcGxlIChbIzE1N10pLgoKICBgYGBlbGlzcAogIDs7ID0+ICgo MyA0IDEgMikgKDEgMiAzIDQpKQogIChsb29weSAoYWNjdW0tb3B0IChvcHQtZW5kIGVuZCkgKG9w dC1zdGFydCBzdGFydCkpCiAgICAgICAgIChsaXN0IGkgJygoMSAyKSAoMyA0KSkpCiAgICAgICAg IChuY29uYyBvcHQtZW5kIChjb3B5LXNlcXVlbmNlIGkpIDphdCBzdGFydCkKICAgICAgICAgKG5j b25jIG9wdC1zdGFydCAoY29weS1zZXF1ZW5jZSBpKSA6YXQgZW5kKQogICAgICAgICAoZmluYWxs eS1yZXR1cm4gb3B0LWVuZCBvcHQtc3RhcnQpKQogIGBgYAoKIyMjIE90aGVyIENoYW5nZXMKCi0g QWRkZWQgW0NvbXBhdF0oaHR0cHM6Ly9naXRodWIuY29tL2VtYWNzLWNvbXBhdC9jb21wYXQpIGFz IGEgZGVwZW5kZW5jeQogIChbIzE1Ml0pLiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgZ2VuZXJhbGl6 ZWQgdmFyaWFibGVzIGluIHByb3BlcnR5IGxpc3RzLiAgVGhpcwogIGZlYXR1cmUgd2FzIGFkZGVk IGluIEVtYWNzIDI4LCB3aGljaCB3ZSBoYWQgYmVlbiBjcmVhdGluZyBpZiBub3QgZm91bmQuICBJ dCBpcwogIGJldHRlciB0byBsZXQgQ29tcGF0IGRvIHRoaXMgZm9yIHVzLgoKWyMxNTJdOiBodHRw czovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwvMTUyClsjMTU3XTogaHR0cHM6Ly9naXRo dWIuY29tL29rYW1zbi9sb29weS9wdWxsLzE1NwoKIyMgMC4xMS4wCgpSZWxlYXNlZCAyMDIyLTEx LTI1LgoKIyMjIEJ1Z3MgRml4ZWQKCi0gU2lnbmFsIGFuIGVycm9yIHdoZW4gZGVzdHJ1Y3R1cmlu ZyBkb2Vzbid0IHByb2R1Y2UgYW55IGJpbmRpbmdzIChbIzExN10pLgotIERlc3RydWN0dXJlZCBi aW5kaW5ncyB0aGF0IHNob3VsZCBoYXZlIHNpZ25hbGVkIGFuIGVycm9yIG5vdyBkby4gRm9yIGV4 YW1wbGUsCiAgdmFsdWVzIGFmdGVyIGAmcmVzdGAgYW5kIGAma2V5YCBhcmUgbm93IGJldHRlciBj aGVja2VkLiBTZWUgWyMxMTddLgoKIyMjIEJyZWFraW5nIENoYW5nZXMKCiMjIyMgUmVtb3ZhbHMK Ci0gUmVtb3ZlIHRoZSB2YXJpYWJsZSBgbG9vcHktZmlyc3QtaXRlcmF0aW9uYC4gIFRoaXMgd2Fz IGFkZGVkIHRvIGJlIG1vcmUgbGlrZQogIENMJ3MgSXRlcmF0ZSwgYnV0IGl0IGhhcyBsaXR0bGUg dXRpbGl0eSBhbmQgd2FzIG5vdCBiZWluZyBjcmVhdGVkCiAgY29uZGl0aW9uYWxseS4gIFRvIGFj aGlldmUgc2ltaWxhciBiZWhhdmlvciwgc2ltcGx5IGNyZWF0ZSBhIHZhcmlhYmxlIGxpa2UgaW4K ICB0aGUgYmVsb3cgZXhhbXBsZS4KCiAgYGBgIGVsaXNwCiAgOzsgPT4gKCgxKSAoMiAzKSkKICAo bG9vcHkgKGxpc3QgaSAnKDEgMiAzKSkKICAgICAgICAgKHNldCBmaXJzdC1jeWNsZSB0IG5pbCkK ICAgICAgICAgKGlmIGZpcnN0LWN5Y2xlCiAgICAgICAgICAgICAoY29sbGVjdCBmaXJzdCBpKQog ICAgICAgICAgIChjb2xsZWN0IHJlc3QgaSkpCiAgICAgICAgIChmaW5hbGx5LXJldHVybiBmaXJz dCByZXN0KSkKICBgYGAKCi0gUmVtb3ZlIG9ic29sZXRlIGFsaWFzZXMgZm9yIHRoZSB2YXJpYWJs ZXMgYGxvb3B5LWFsaWFzZXNgIGFuZAogIGBsb29weS1jb21tYW5kLXBhcnNlcnNgLgoKIyMjIyBG ZWF0dXJlIERlcHJlY2F0aW9ucyBhbmQgUmVuYW1pbmcgVmFyaWFibGVzCgotIFRoZSBjb21tYW5k IGBzdWItbG9vcGAgaXMgZGVwcmVjYXRlZC4gIFVzZSB0aGUgY29tbWFuZHMgYGxvb3B5YCBvcgog IGBsb29weS1pdGVyYCBpbnN0ZWFkLiAgQ3VycmVudGx5LCB0aGUgYHN1Yi1sb29wYCBjb21tYW5k LCBkZXBlbmRpbmcgb24gdGhlCiAgbWFjcm8gaW4gd2hpY2ggaXQncyB1c2VkLCBqdXN0IGJlaGF2 ZXMgYXMgb25lIG9yIHRoZSBvdGhlci4gIFNlZSBbIzEzMF0gYW5kCiAgWyMxMjddLgoKICBUaGUg YHN1Yi1sb29wYCBjb21tYW5kIHdhcyBhZGRlZCBiZWZvcmUgdGhlIGNvbW1hbmRzIGBsb29weWAg YW5kIGBsb29weS1pdGVyYC4KICBQcmV2aW91c2x5LCBpdCB3YXMgbm90IGEgZnVsbHkgZmVhdHVy ZWQgbG9vcCBsaWtlIHRoZSBtYWNybyBgbG9vcHlgLiAgTm93IHRoYXQKICBzdWItbG9vcHMgY2Fu IHVzZSBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50cywgYW5kIG5vdyB0aGF0IHRoZSBtYWNyb3MgYGxv b3B5YCBhbmQKICBgbG9vcHktaXRlcmAgYm90aCBoYXZlIGNvbW1hbmQgdmVyc2lvbnMgb2YgdGhl bXNlbHZlcywgd2Ugbm8gbG9uZ2VyIG5lZWQgdGhpcwogIGNvbW1hbmQuCgotIFRoZSBgc3BsaXRg IGZsYWcgaXMgZGVwcmVjYXRlZC4gIFVzZSB0aGUgbW9yZSBnZW5lcmFsIGFuZCBjb250cm9sbGFi bGUKICBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50IGBhY2N1bS1vcHRgIGluc3RlYWQuICBTZWUgWyMx MjRdIGFuZCBbIzEzMV0uCgogIFRoZSBgc3BsaXRgIGZsYWcgbWFrZXMgYWxsIGFjY3VtdWxhdGlv biBjb21tYW5kcyB3aXRoIGFuIGltcGxpY2l0IHZhcmlhYmxlIHVzZQogIHNlcGFyYXRlLCBvcHRp bWl6ZWQgdmFyaWFibGVzLiAgVGhlcmUgaXMgbm8gd2F5IHRvIHVzZSBzcGxpdHRpbmcgd2l0aCBz b21lCiAgY29tbWFuZHMgYW5kIG5vdCBvdGhlcnMgdXNpbmcgdGhlIGBzcGxpdGAgZmxhZyBhbG9u ZSwgYnV0IHRoaXMgY2FuCiAgZXF1aXZhbGVudGx5IGJlIGRvbmUgdXNpbmcgdGhlIGBhY2N1bS1v cHRgIGZsYWcuICBTaW5jZSBgc3BsaXRgIGlzIGp1c3QgYQogIHNwZWNpZmljIHVzYWdlIG9mIGBh Y2N1bS1vcHRgLCBpdCBpcyBmaW5lIHRvIHJlbW92ZSBgc3BsaXRgLgoKLSBSZW5hbWVkIGBsb29w eS0tYWNjdW11bGF0aW9uLWZpbmFsLXVwZGF0ZXNgIHRvIGBsb29weS0tdmFycy1maW5hbC11cGRh dGVzYC4KICBUaGUgb2xkIG5hbWUgaXMgbm93IGFuIG9ic29sZXRlIGFsaWFzLiAgVGhlIGZlYXR1 cmUgc3RpbGwgd29ya3MgdGhlIHNhbWUsCiAgYnV0IGhhcyBiZWVuIGdlbmVyYWxpemVkIHRvIHN1 cHBvcnQgdGhlIGBjbG9zZWAgYXJndW1lbnQgb2YgdGhlIG5ldyBgaXRlcmAKICBjb21tYW5kLiAg U2VlIFBSIFsjMTM1XS4KCiMjIyMgRm9yIGltcHJvdmluZyBgbG9vcHktaXRlcmAKCi0gYGxvb3B5 LWl0ZXJgIGhhcyBiZWVuIGNoYW5nZWQgdG8gcmVseSBvbiBFbWFjcydzIG1hY3JvIGV4cGFuc2lv biBmYWNpbGl0aWVzCiAgaW5zdGVhZCBvZiB0cnlpbmcgdG8gdXNlIGN1c3RvbSBjb2RlLXdhbGtp bmcgZnVuY3Rpb25zLiAgVGhpcyBzaG91bGQgbWFrZSB0aGUKICBtYWNybyBtb3JlIHJvYnVzdC4g U2VlIFsjMTE5XS4gIFVzZXIgb3B0aW9ucyB3ZXJlIGFkZGVkLCB1cGRhdGVkLCBvciBvYnNvbGV0 ZWQKICB0byBhbGxvdyB0aGlzLiAgU2VlIHRoZSBtYW51YWwgZm9yIG1vcmUgZGV0YWlscy4KCiAg LSBUaGUgZmxhZyBgbGF4LW5hbWluZ2AgaXMgZGVwcmVjYXRlZC4gIEl0cyBiZWhhdmlvciBpcyBu b3cgdGhlIGRlZmF1bHQgZm9yCiAgICBjb21tYW5kIGFsaWFzZXMgbGlzdGVkIGluIGBsb29weS1p dGVyLWJhcmUtY29tbWFuZHNgLgoKICAgIGBgYGVsaXNwCiAgICA7OyBObyBuZWVkIGZvciBmbGFn IGBsYXgtbmFtaW5nJyBhbnltb3JlOgogICAgKGxvb3B5LWl0ZXIgKGxpc3RpbmcgaSAnKDEgMiAz KSkKICAgICAgICAgICAgICAgIChjb2xsZWN0aW5nIGkpKQogICAgYGBgCgogIC0gVGhlIHVzZXIg b3B0aW9uIGBsb29weS1pZ25vcmVkLW5hbWVzYCBpcyBub3cgZGVwcmVjYXRlZC4gIEluc3RlYWQg b2YgYW4KICAgIGV4Y2x1c2l2ZSBhcHByb2FjaCwgaXQgaXMgcmVwbGFjZWQgYnkgYW4gaW5jbHVz aXZlIGFwcHJvYWNoIHVzaW5nIHRoZSBuZXcKICAgIHVzZXIgb3B0aW9ucyBgbG9vcHktaXRlci1i YXJlLWNvbW1hbmRzYCBhbmQKICAgIGBsb29weS1pdGVyLWJhcmUtc3BlY2lhbC1tYXJjby1hcmd1 bWVudHNgLgoKICAtIFVzaW5nIGtleXdvcmRzIHdpbGwgY29udGludWUgdG8gd29yay4gIFNlZSB0 aGUgdmFyaWFibGUKICAgIGBsb29weS1pdGVyLWtleXdvcmRzYCwgcmVuYW1lZCBmcm9tIGBsb29w eS1pdGVyLWNvbW1hbmQta2V5d29yZHNgLiAgVGhlCiAgICBvbGQgbmFtZSBpcyBub3cgYW4gb2Jz b2xldGUgYWxpYXMuICBUaGVzZSBrZXl3b3JkcyBub3cgd29yayBmb3Igc3BlY2lhbAogICAgbWFj cm8gYXJndW1lbnRzIHRvby4KCiAgLSBUaGlzIGNoYW5nZSByZXF1aXJlZCBiZXR0ZXIgc3VwcHJl c3Npbmcgc29tZSBtYWNyb3MsIG5vdyBpbgogICAgYGxvb3B5LWl0ZXItc3VwcHJlc3NlZC1tYWNy b3NgLiAgRGVmYXVsdHMgaW5jbHVkZSBgY2wtcmV0dXJuYCwgYGNsLWJsb2NrYCwKICAgIGFuZCBg Y2wtcmV0dXJuLWZyb21gLgoKIyMjIE90aGVyIENoYW5nZXMKCi0gSW1wcm92ZW1lbnRzIHRvIGRl c3RydWN0dXJpbmcgKFsjMTE3XSk6CiAgLSBEb2N1bWVudCBpZ25vcmluZyB2YXJpYWJsZXMgaW4g dGhlIE9yZyBkb2MuICBUaGlzIGZlYXR1cmUgaGFzIGV4aXN0ZWQgZm9yIGEKICAgIHdoaWxlLgog IC0gRG9jdW1lbnQgYCZrZXlzYCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBgJmtleWAuICBUaGlzIGZl YXR1cmUgaGFzIGV4aXN0ZWQgZm9yCiAgICBhIHdoaWxlLgogIC0gQmV0dGVyIHNraXAgaWdub3Jl ZCB2YXJpYWJsZXMuCiAgLSBBZGQgc2xpZ2h0IG9wdGltaXphdGlvbnMgZm9yIGNvbW1vbiB1c2Vz LCBzdWNoIGFzIGZvciBgKGNhciAuIF8pYCBhbmQKICAgIGAoXyAuIGNkcilgLgoKIyMjIyBOZXcg Q29tbWFuZHMKCi0gQWRkZWQgZ2VuZXJpYyBhY2N1bXVsYXRpb24gY29tbWFuZCBgc2V0LWFjY3Vt YC4gIFRoaXMgY29tbWFuZCBpcyBhbgogIGFjY3VtdWxhdGluZyB2ZXJzaW9uIG9mIGBzZXRgLiAg SXQgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiB0aGUgb3RoZXIgZ2VuZXJpYwogIGFjY3VtdWxhdGlv biBjb21tYW5kcyBgYWNjdW11bGF0ZWAgYW5kIGByZWR1Y2VgLiAgU2VlIFsjMTI1XSBhbmQgWyMx MjldLgoKLSBBZGQgdGhlIGNvbW1hbmQgYGl0ZXJgIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBpdGVy YXRvciBvYmplY3RzLCBzdWNoIGFzCiAgdGhvc2UgY3JlYXRlZCBieSB1c2luZyB0aGUgb3V0cHV0 IG9mIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGggYGl0ZXItbGFtYmRhYC4KICBUaGlzIGlzIG5vdCB0 byBiZSBjb25mdXNlZCB3aXRoIHRoZSBtYWNybyBgbG9vcHktaXRlcmAsIHdoaWNoIGlzIG5hbWVk IGZvcgogIENvbW1vbiBMaXNwJ3MgYGl0ZXJgIG1hY3JvLiBTZWUgaXNzdWVzIFsjMTM0XSBhbmQg WyMxMzZdIGFuZCBQUiBbIzEzNV0uCgojIyMjIEFsaWFzZXMKCi0gQWRkZWQgdGhlIHJlbWFpbmlu ZyBwcmVzZW50IHBhcnRpY2lwbGUgYWxpYXNlcyB0byBgbG9vcHlgIGFuZCBgbG9vcHktaXRlcmAu CiAgVGhleSBhcmUgbm93IHRoZSBkZWZhdWx0IGJhcmUgZm9ybXMgKHNlZSBicmVha2luZyBjaGFu Z2VzIGFib3ZlKSBmb3IKICBgbG9vcHktaXRlcmAuICBTZWUgWyMxMTldLgoKLSBQcmVzZW50LXBh cnRpY2lwbGUgYWxpYXNlcyAodGhlICItaW5nIiBmb3JtKSBoYXZlIGJlZW4gYWRkZWQgZm9yIG1v cmUKICBjb21tYW5kcywgc3VjaCBhcyBgbGlzdGluZ2AgZm9yIGBsaXN0YCBhbmQgYHNldHRpbmdg IGZvciBgc2V0YC4gIFRoZXkgYWxyZWFkeQogIGV4aXN0ZWQgZm9yIGFjY3VtdWxhdGlvbiBjb21t YW5kcywgc3VjaCBhcyBgY29sbGVjdGluZ2AgZm9yIGBjb2xsZWN0YC4gIFNlZQogIFsjMTE4XSBh bmQgWyMxMDRdLgoKICAtIEFsaWFzZXMgZnJvbSBgY2wtbG9vcGAsIHN1Y2ggYXMgYGFjcm9zc2Ag Zm9yIHRoZSBjb21tYW5kIGBhcnJheWAgYW5kIGBpbmAKICAgIGZvciB0aGUgY29tbWFuZCBgbGlz dGAsIGhhdmUgYmVlbiBkZS1lbXBoYXNpemVkLiAgVGhlIHByZXNlbnQtcGFydGljaXBsZQogICAg YWxpYXNlcyBzaG91bGQgYmUgdXNlZCB3aGVuIG5vdCB1c2luZyB0aGUga2V5d29yZHMgaW4gYGxv b3B5LWl0ZXJgLgoKICAgIGBgYGVsaXNwCiAgICA7OyA9PiAoKDEgLiA2KSAoMiAuIDcpICgzIC4g OCkgKDQgLiA5KSkKICAgIChsb29weS1pdGVyIChsaXN0aW5nIGkgJygxIDIgMyA0KSkKICAgICAg ICAgICAgICAgIChmb3IgbGlzdCBqICcoNiA3IDggOSkpCiAgICAgICAgICAgICAgICAoY29sbGVj dGluZyAoY29ucyBpIGopKSkKICAgIGBgYAoKIyMjIyBPdGhlciBDaGFuZ2VzIHRvIGBsb29weS1p dGVyYAoKLSBgbG9vcHktaXRlcmAgY2FuIG5vdyB1c2Uga2V5d29yZHMgZm9yIG5hbWluZyBzcGVj aWFsIG1hY3JvIGFyZ3VtZW50cywgYXMgZG9uZQogIHdpdGggY29tbWFuZHMuICBUaGlzIGNhbiBo ZWxwIHRvIGF2b2lkIG5hbWluZyBjb25mbGljdHMuICBBZGRlZCB0aGUga2V5d29yZAogIGBhcmdg LiAgU2VlIFsjMTE5XS4KCiAgYGBgZWxpc3AKICA7OyBObyBtb3JlIGNvbmZsaWN0IHdpdGggc3Bl Y2lhbCBmb3JtIGBsZXQqJzoKICAobG9vcHktaXRlciAoYXJnIGxldCogKGEgNykpCiAgICAgICAg ICAgICAgKHJldHVybmluZyBhKSkKICBgYGAKCgotIEFkZGVkIGBsb29weS1pdGVyLXN1cHByZXNz ZWQtbWFjcm9zYCAoc2VlIGJyZWFraW5nIGNoYW5nZXMgYWJvdmUpLiAgU2VlCiAgWyMxMTldLgoK LSBUaGUgbmV3IHNwZWNpYWwgbWFjcm8gYXJndW1lbnQgYG5hbWVkYCB3YXMgYWRkZWQuICBJdCBp cyBhbm90aGVyIHdheSBvZgogIHNwZWNpZnlpbmcgbG9vcCBuYW1lcywgaW5zdGVhZCBvZiBqdXN0 IGxpc3RpbmcgYSBzeW1ib2wuICBUaGlzIG1pZ2h0IGJlIHVzZWZ1bAogIGluIGBsb29weS1pdGVy YC4gIFNlZSBpc3N1ZSBbIzEyM10gYW5kIFBSIFsjMTMyXS4KCgpbIzEwNF06IGh0dHBzOi8vZ2l0 aHViLmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzLzEwNApbIzExN106IGh0dHBzOi8vZ2l0aHViLmNv bS9va2Ftc24vbG9vcHkvcHVsbC8xMTcKWyMxMThdOiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNu L2xvb3B5L3B1bGwvMTE4ClsjMTE5XTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9w dWxsLzExOQpbIzEyM106IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzLzEy MwpbIzEyNF06IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzLzEyNApbIzEy NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzLzEyNQpbIzEyN106IGh0 dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzLzEyNwpbIzEyOV06IGh0dHBzOi8v Z2l0aHViLmNvbS9va2Ftc24vbG9vcHkvcHVsbC8xMjkKWyMxMzBdOiBodHRwczovL2dpdGh1Yi5j b20vb2thbXNuL2xvb3B5L3B1bGwvMTMwClsjMTMxXTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1z bi9sb29weS9wdWxsLzEzMQpbIzEzMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkv cHVsbC8xMzIKWyMxMzRdOiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L2lzc3Vlcy8x MzQKWyMxMzVdOiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwvMTM1ClsjMTM2 XTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9pc3N1ZXMvMTM2CgoKIyMgMC4xMC4x CgpSZWxlYXNlZCAyMDIyLTAzLTI5LgoKIyMjIEJ1Z3MgRml4ZWQKCi0gRml4IGJhZGx5IGZvcm1l ZCBjb25kaXRpb24gY2FzZSBpbiBgYXBwZW5kYCBjb21tYW5kLiAgVGhpcyBidWcgZG9lcyBub3Qg YWZmZWN0CiAgcHJvcGVybHkgd3JpdHRlbiBsb29wcywganVzdCBob3cgZXJyb3JzIGFyZSBzaWdu YWxlZC4gIFRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkCiAgaW4gdmVyc2lvbiAwLjkuMS4KLSBCZXR0 ZXIgY2hlY2sgZmluYWwgdXBkYXRlcyAoc3VjaCBhcyBmcm9tIGA6cmVzdWx0LXR5cGVgKSB3aGVu IG5vIGZpbmFsIHVwZGF0ZQogIHJlcXVlc3RlZC4gIEZvciBleGFtcGxlIHVzaW5nIGJvdGggYChj b2xsZWN0IGkpYCBhbmQgYChjb2xsZWN0IGkgOnJlc3VsdC10eXBlCiAgdmVjdG9yKWAgaW4gdGhl IHNhbWUgbG9vcCB3b3VsZCBwcmV2aW91c2x5IGNvbnZlcnQgYGxvb3B5LXJlc3VsdGAgdG8gYSB2 ZWN0b3IsCiAgYnV0IG5vdyByYWlzZXMgYW4gZXJyb3IgdG8gbm90ZSB0aGUgZGlzY3JlcGFuY3ku Ci0gSW4gYGxvb3B5LWRhc2guZWxgLCBmaXggdXNpbmcgcXVvdGVkIHN5bWJvbHMgYXMga2V5cyBm b3IgZGVzdHJ1Y3R1cmluZwogIGFjY3VtdWxhdGlvbnMgKFsjMTAxXSwgWyMxMDJdKS4gIFRoZSBu ZXcgYXBwcm9hY2ggc2hvdWxkIGJlIG1vcmUgcmVsaWFibGUsCiAgdGhvdWdoIG1pZ2h0IGNyZWF0 ZSBtb3JlIHZhcmlhYmxlcyB0aGFuIHN0cmljdGx5IG5lZWRlZC4KCiMjIyBCcmVha2luZyBDaGFu Z2VzCi0gVGhlIGRlZmF1bHQgdGVzdCBmdW5jdGlvbiBmb3IgY29tbWFuZHMgbGlrZSBgYWRqb2lu YCBhbmQgYHVuaW9uYCBpcyBub3cKICBgZXF1YWxgLiAgUHJldmlvdXNseSwgYGxvb3B5YCBjb3Bp ZWQgYGNsLWxvb3BgIGFuZCB1c2VkIGBlcWxgLCBidXQgaXQgbWFrZXMKICBtb3JlIHNlbnNlIHRv IGNvcHkgdGhlIGJlaGF2aW9yIG9mIG90aGVyIEVtYWNzIExpc3AgbGlicmFyaWVzIChsaWtlIGBz ZXEuZWxgKQogIHRoYW4gdG8gY29weSB0aGUgYmVoYXZpb3Igb2YgQ29tbW9uIExpc3AuCi0gVGhl IGBtYXBgY29tbWFuZCBub3cgZmlsdGVycyBvdXQgZHVwbGljYXRlIGtleXMgYnkgZGVmYXVsdC4g IGBtYXAtcmVmYCBhbHJlYWR5IAogIGRpZCB0aGlzLiBUaGUgYmVoYXZpb3IgaXMgbm93IG9wdGlv bmFsIGluIGJvdGggY29tbWFuZHMgdXNpbmcgdGhlIGB1bmlxdWVgIAogIGtleXdvcmQgYXJndW1l bnQuCi0gX19UaGUgd2F5IHRvIGFkZCBhbGlhc2VzIGhhcyBjaGFuZ2VkLl9fIChbIzEwMF0sIFsj MTA1XSkKICAtIGBsb29weS1jb21tYW5kLWFsaWFzZXNgIHdhcyByZW5hbWVkIHRvIGBsb29weS1h bGlhc2VzYC4gIFRoZSBvbGQgbmFtZSBpcwogICAgb2Jzb2xldGUuCiAgLSBUaGUgc3RydWN0dXJl IG9mIGBsb29weS1hbGlhc2VzYCBjaGFuZ2VkLiAgRm9yIGZvcndhcmQgY29tcGF0aWJpbGl0eSwK ICAgIGFsaWFzZXMgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCB1c2luZyBgbG9vcHktZGVmYWxpYXNg LgogIC0gUmVjdXJzaXZlIGRlZmluaXRpb25zIGFyZSBub3cgcmVzb2x2ZWQgYXQgZGVmaW5pdGlv bi4gIFRoaXMgYXZvaWRzIG5lZWRpbmcKICAgIHRvIHNsb3dseSBzZWFyY2ggZm9yIG1hbnkgbmFt ZXMgZm9yIGVhY2ggZXhwcmVzc2lvbiBwYXNzZWQgdG8gdGhlIG1hY3JvLAogICAgd2hpY2ggd2Fz IGRvdWJsaW5nIHRoZSBleHBhbnNpb24gdGltZSBhbmQgY29tcGxpY2F0aW5nIGNvZGUuCi0gQWRk IGBsb29weS1pdGVyLWlnbm9yZWQtbmFtZXNgLCB3aGljaCByZXBsYWNlcyBgbG9vcHktaXRlci1p Z25vcmVkLWNvbW1hbmRzYAogIChbIzEwMF0sIFsjMTA1XSkuICBUaGlzIG5ldyB2YXJpYWJsZSBh bHNvIGluY2x1ZGVzIHRoZSBhbGlhc2VzIG9mIHNwZWNpYWwKICBtYWNybyBhcmd1bWVudHMsIHN1 Y2ggYXMgYGxldCpgIGZvciBgd2l0aGAuICBUaGUgbmFtZSBvZiB0aGUgb2xkIHZhcmlhYmxlIGlz CiAgbm93IGFuIG9ic29sZXRlIGFsaWFzIG9mIHRoZSBuZXcgdmFyaWFibGUsIHRob3VnaCBub3Rl IHRoYXQgdGhlIHVzZSBpcyBub3cKICBtb3JlIGdlbmVyYWwuCi0gVGhlIHZhcmlhYmxlIG5hbWVz IGBsb29weS1jdXN0b20tY29tbWFuZC1hbGlhc2VzYCBhbmQKICBgbG9vcHktY3VzdG9tLWNvbW1h bmQtcGFyc2Vyc2AgYXJlIG5vdyBvYnNvbGV0ZS4KCiMjIyBPdGhlciBDaGFuZ2VzCgotIEFkZCB0 aGUgc3BlY2lhbCBtYWNybyBhcmd1bWVudCBgZmluYWxseS1wcm90ZWN0YCwgd2hpY2ggd3JhcHMg cGFydCBvZiB0aGUgbG9vcAogIHdpdGggYHVud2luZC1wcm90ZWN0YC4KLSBDbGVhbiB1cCB0aGUg T3JnIGRvY3VtZW50YXRpb24uCi0gQWNjdW11bGF0aW9ucyB1c2luZyBpbXBsaWNpdCBhY2N1bXVs YXRpb24gdmFyaWFibGVzIGFyZSBub3cgYXV0b21hdGljYWxseQogIG9wdGltaXplZCwgd2l0aG91 dCB0aGUgbmVlZCBvZiB0aGUgYHNwbGl0YCBmbGFnLiAgTm90ZSB0aGF0IHRoZSBgc3BsaXRgIGZs YWcKICBpcyBzdGlsbCBuZWVkZWQgdG8gcHJldmVudCBzdWNoIGNvbW1hbmRzIGFjY3VtdWxhdGlu ZyBpbnRvIHRoZSBzYW1lIHZhcmlhYmxlCiAgKGBsb29weS1yZXN1bHRgKS4gIFNlZSBbIzg5XSwg WyM5Nl0uCi0gTmFtZWQgYWNjdW11bGF0aW9uIHZhcmlhYmxlcyBjYW4gbm93IGJlIG9wdGltaXpl ZCB1c2luZyB0aGUgYGFjY3VtLW9wdGAKICBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50LCBhdCB0aGUg Y29zdCBvZiBub3QgYmVpbmcgY29ycmVjdCBkdXJpbmcgdGhlIGxvb3AuCiAgVGhlc2UgYXJlIHRo ZSBzYW1lIG9wdGltaXphdGlvbnMgbWFkZSBmb3IgdGhlIGltcGxpY2l0IHZhcmlhYmxlcy4KLSBU aGUgYHJlcGVhdGAgY29tbWFuZCB3YXMgcmVuYW1lZCB0byBgY3ljbGVgLCB3aXRoIGByZXBlYXRg IGFzIGFuIGFsaWFzLiAgVGhpcwogIGlzIGEgbW9yZSBhY2N1cmF0ZSBuYW1lLCBhcyBhbiBhcmd1 bWVudCBvZiAxICpjeWNsZXMqIHRoZSBsb29wIG9uY2UgYnV0CiAgKnJlcGVhdHMqIHRoZSBsb29w IHplcm8gdGltZXMuCi0gYHNldGAgaXMgbm93IHRoZSBwcmVmZXJyZWQgbmFtZSBvZiB0aGUgY29t bWFuZCBuYW1lZCBgZXhwcmAuICBUaGUgbmFtZSBgZXhwcmAKICBpcyBub3cgYW4gYWxpYXMgb2Yg YHNldGAsIGluc3RlYWQgb2YgdGhlIG90aGVyIHdheSBhcm91bmQuICBGb3IgY29uc2lzdGVuY3ks CiAgdGhlIHByZWZlcnJlZCBuYW1lIG9mIGBwcmV2LWV4cHJgIGlzIG5vIGBzZXQtcHJldmAuICBg cHJldi1leHByYCBpcyBub3cgYW4KICBhbGlhcyBvZiBgc2V0LXByZXZgLCB3aGljaCBhbHNvIGdh aW5lZCB0aGUgYWxpYXMgYHByZXYtc2V0YC4KClsjODldOiBodHRwczovL2dpdGh1Yi5jb20vb2th bXNuL2xvb3B5L2lzc3Vlcy84OQpbIzk2XTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29w eS9wdWxsLzk2ClsjMTAwXTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9pc3N1ZXMv MTAwClsjMTAxXTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9pc3N1ZXMvMTAxClsj MTAyXTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9wdWxsLzEwMgpbIzEwNV06IGh0 dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvcHVsbC8xMDUKCiMjIDAuOS4xCgpSZWxlYXNl ZCAyMDIxLTA5LTA2LgoKIyMjIEJyZWFraW5nIENoYW5nZXMKCi0gQWNjdW11bGF0aW9uIHZhcmlh YmxlcyBjYW4gbm8gbG9uZ2VyIGJlIGVkaXRlZCBvdXRzaWRlIG9mIGFjY3VtdWxhdGlvbgogIGNv bW1hbmRzIHdoaWxlIHRoZSBsb29wIGlzIHJ1bm5pbmcuICBUaGlzIGFsbG93cyB0aGUgbG9vcCB0 byBiZSBtdWNoIGZhc3RlcgogIHdoZW4gdXNpbmcgbmFtZWQgdmFyaWFibGVzIChyZXF1aXJlZCBm b3IgZGVzdHJ1Y3R1cmluZykgYW5kIHNpbXBsaWZpZXMgdGhlCiAgY29kZS4gIFNlZSBbIzgzXS4K LSBEdXBsaWNhdGluZyBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50cyAoc3VjaCBhcyB1c2luZyBgZmxh Z3NgIHR3aWNlKSBub3cgc2lnbmFscwogIGFuIGVycm9yLiAgU2VlIFsjODddLgotIFN1Yi1sb29w cyB1c2luZyB0aGUgYHN1Yi1sb29wYCBjb21tYW5kIGFyZSBub3cgZnVsbCBgbG9vcHlgIGxvb3Bz LgogIC0gVGhleSBjYW4gbm93IHRha2Ugc3BlY2lhbCBtYWNybyBhcmd1bWVudHMuCiAgLSBUaGVp ciBhY2N1bXVsYXRpb24gbm8gbG9uZ2VyIGFmZmVjdCB0aGUgc3Vycm91bmRpbmcgbG9vcC4gIFlv dSBtdXN0IG5vdyB1c2UKICAgIHRoZSBgYXRgIGNvbW1hbmQuICBTZWUgWyM3MF0sIFsjODddLgoK IyMjIE90aGVyIENoYW5nZXMKCi0gQW4gYGF0YCBjb21tYW5kIHdhcyBhZGRlZCwgd2hpY2ggYmV0 dGVyIGNvbnRyb2xzIGludGVyYWN0aW5nIHdpdGggc3Vycm91bmRpbmcKICBsb29wcy4gIFRoaXMg aXMgc2ltaWxhciB0byB0aGUgYGluYCBjbGF1c2UgZnJvbSBDb21tb24gTGlzcCdzIEl0ZXJhdGUg cGFja2FnZS4KICBTZWUgWyM3MF0sIFsjODddLgotIFRoZSBgbGVhdmUtZnJvbWAgY29tbWFuZCBo YXMgYmVlbiByZS1hZGRlZCwgbm93IHRoYXQgY29kZSBnZW5lcmF0aW9uIGlzIG1vcmUKICByb2J1 c3QuICBTZWUgWyM4N10uCi0gQSBgc2tpcC1mcm9tYCBjb21tYW5kIHdhcyBhZGRlZC4gIFNlZSBb Izg3XS4KLSBDb21tYW5kcyBgbG9vcHlgIGFuZCBgbG9vcHktaXRlcmAgd2VyZSBhZGRlZC4gIFNl ZSBbIzg3XS4KLSBBZGQgZmVhdHVyZSBgbG9vcHktbGFtYmRhYC4gIFRoaXMgaXMgbGlrZSBgcGNh c2UtbGFtYmRhYCwgYnV0IHVzZXMgYGxvb3B5YAogIGRlc3RydWN0dXJpbmcuICBTZWUgWyM4N10u Ci0gTGlzdCBgc2VxLmVsYCBpbiB0aGUgcGFja2FnZSByZXF1aXJlbWVudHMuICBTZWUgWyM4N10u CgoKWyM3MF06IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzLzcwClsjODNd OiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L2lzc3Vlcy84MwpbIzg3XTogaHR0cHM6 Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9wdWxsLzg3CgojIyAwLjguMQoKUmVsZWFzZWQgMjAy MS0wOC0yOC4KCiMjIyBCcmVha2luZyBDaGFuZ2VzCgotIEluc3RydWN0aW9ucyBhcmUgbm8gbG9u Z2VyIGRvdHRlZCBwYWlycyAoc3VjaCBhcyBgKEEgLiBCKWApLCBidXQgbm9ybWFsIGxpc3RzCiAg KHN1Y2ggYXMgYChBIEIpYCkuICBGb3IgY3VzdG9tIGNvbW1hbmRzLCBzaW1wbHkgc3dpdGNoIHRo ZSBkb3R0ZWQgcGFpcnMgdG8KICB1bi1kb3R0ZWQgcGFpcnMuCgojIyMgQnVncyBGaXhlZAoKLSBG aXggcGFyc2luZyBlcnJvciBpbiBgZXhwcmAgY29tbWFuZCB3aGVuIHJlZHVuZGFudGx5IHBhc3Np bmcgbmlsIHRvIGA6aW5pdGAuCiAgUHJldmlvdXNseSwgdGhlIGxpdGVyYWwgc3ltYm9sIGA6aW5p dGAgd291bGQgYmUgdGhlIGxhc3QgdmFsdWUgYXNzaWduZWQgdG8gdGhlCiAgdmFyaWFibGUsIGlu c3RlYWQgb2YgY29ycmVjdGx5IHN0b3BwaW5nIGF0IHRoZSBleHByZXNzaW9uIGJlZm9yZSB0aGUg c3ltYm9sLgoKIyMjIE90aGVyIENoYW5nZXMKCi0gQWRkIHRoZSBjb21tYW5kIGBtYXAtcmVmYCwg c2ltaWxhciB0byBgbGlzdC1yZWZgIGFuZCBgc2VxLXJlZmAuCi0gVGhlIGFjY3VtdWxhdGlvbiBj b21tYW5kcyBgcmVkdWNlYCBhbmQgYGFjY3VtdWxhdGVgIGhhdmUgZ2FpbmVkIHRoZSBhbGlhc2Vz CiAgYGNhbGxmYCBhbmQgYGNhbGxmMmAsIHJlc3BlY3RpdmVseS4gIFRoaXMgaXMgaW50ZW5kZWQg dG8gaGVscCB1c2VycyByZW1lbWJlcgogIHRoZSBvcmRlciBvZiBhcmd1bWVudHMuICBVbmxpa2Ug dGhlIGBjYWxsZipgIG1hY3JvcyBmcm9tIHdoaWNoIHRoZXNlIGFsaWFzZXMKICBkZXJpdmUsIHRo ZSBmdW5jdGlvbiBhcmd1bWVudCB0byB0aGVzZSBjb21tYW5kcyBpcyB0aGUgdGhpcmQgYXJndW1l bnQgYW5kIG11c3QKICBiZSBxdW90ZWQuCi0gVGhlIGRlZmF1bHQgZGVzdHJ1Y3R1cmluZyBzeXN0 ZW0gbm93IHRha2VzIG9uIHNvbWUgb2YgdGhlIGZlYXR1cmVzIG9mIEVtYWNzCiAgYGNsLWxpYmAg ZGVzdHJ1Y3R1cmluZyBmdW5jdGlvbnMuICBUaGUgc3BlY2lhbCBhcmd1bWVudHMgYCZrZXlgLCBg Jndob2xlYCwgYW5kCiAgYCZyZXN0YCB3ZXJlIGFkZGVkIGluIHdheXMgdGhhdCBtYWtlIHNlbnNl IGZvciBMb29weS4gIEJlY2F1c2UgdGhlIGZ1bmN0aW9ucwogIGluIGBzZXEuZWxgIGNhbiBiZSBl eHRlbmRlZCBmb3IgbmV3IHR5cGVzLCB0aGlzIGFkZGl0aW9uIG9ubHkgbWFrZXMKICBgbG9vcHkt c2VxLmVsYCByZWR1bmRhbnQgZm9yIHRoZSBkZXN0cnVjdHVyaW5nIG9mIGxpc3RzIGFuZCBhcnJh eXMuCiAgLSBTZWUgYWxzbyB0aGUgbmV3IGZlYXR1cmVzIGBsb29weS1kc2V0cWAsIGBsb29weS1s ZXQqYCwgYW5kIGBsb29weS1yZWZgLAogICAgZXhwb3NlIHRoZXNlIGRlc3RydWN0dXJpbmcgZmVh dHVyZXMgZm9yIHVzZXMgb3V0c2lkZSBvZiB0aGUgbG9vcC4KICAtIFRoZSBgc2V0ZmAtYWJsZSBw bGFjZXMgdXNpbmcgYCZrZXlgIHJlbHkgb24gdXNpbmcgYGd2LmVsYCBmb3IgYHBsaXN0LWdldGAu CiAgICBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIHRvIEVtYWNzJ3MgbWFzdGVyIGJyYW5jaCBpbiBT ZXB0ZW1iZXIgMjAyMCwgYW5kIGl0cwogICAgZGVmaW5pdGlvbiBpcyBjb3BpZWQgaW50byBgbG9v cHktbWlzYy5lbGAsIHdoaWNoIGN1cnJlbnRseSBjb250YWlucyB0aGUKICAgIGRlc3RydWN0dXJp bmcgZnVuY3Rpb25zLiAgT24gRW1hY3MgdmVyc2lvbnMgbGVzcyB0aGFuIDI4LCB0aGF0IGRlZmlu aXRpb24KICAgIHdpbGwgYmUgbG9hZGVkIGlmIGFuIGV4aXN0aW5nIHNldHRlciBmdW5jdGlvbiBp cyBub3QgZGV0ZWN0ZWQuCgojIyAwLjcuMgoKUmVsZWFzZWQgMjAyMS0wNi0zMC4KCiMjIyBCdWdz IEZpeGVkCgotIEZpeCB1bmRlcnN0YW5kaW5nIHRoZSBhcmd1bWVudHMgaW4gYGZpbmRgIHdoZW4g dXNpbmcgdGhlIGA6aW50b2Aga2V5d29yZAogIGFyZ3VtZW50LiAgTW9yZSB0ZXN0cyB3ZXJlIGFk ZGVkLgoKIyMjIE90aGVyIENoYW5nZXMKCi0gQWRkIGFsaWFzIGBtYXAtcGFpcnNgIGZvciBgbWFw YCwgc2luY2UgYG1hcGAgdXNlcyBgbWFwLXBhaXJzYCB1bmRlcm5lYXRoLgotIFNtYWxsIGNvcnJl Y3Rpb25zIHRvIE9yZy9JbmZvIGRvY3VtZW50YXRpb24uCgojIyAwLjcuMQoKUmVsZWFzZWQgMjAy MS0wNi0yOC4KCiMjIyBCcmVha2luZyBDaGFuZ2VzCgotIFByZXZpb3VzbHksIHNvbWUgY29tbWFu ZHMgKGBhY2N1bXVsYXRlYCwgYGNvbnNgKSByZXF1aXJlZCB1c2luZyBhIGZ1bmN0aW9uCiAgc3lt Ym9sIChxdW90ZWQgb3Igbm90KSBmb3IgdGhlaXIgZnVuY3Rpb24gcGFyYW1ldGVyLiAgVGhpcyBw cmV2ZW50ZWQgcGFzc2luZwogIHZhcmlhYmxlcyBjb250YWluaW5nIGZ1bmN0aW9uIHN5bWJvbHMg YXMgdGhlIGFyZ3VtZW50LgoKICBUaGlzIGJlaGF2aW9yIGhhcyBiZWVuIGNoYW5nZWQgc28gdGhh dCBmdW5jdGlvbiBzeW1ib2xzIG11c3Qgbm93IGJlIHF1b3RlZCAobm8KICBJc3N1ZSBvciBQUiku ICBVbnF1b3RlZCBzeW1ib2wgYXJndW1lbnRzIHdpbGwgbm93IGJlIHVuZGVyc3Rvb2QgdG8gYmUK ICB2YXJpYWJsZXMuCgogIFRoaXMgY2hhbmdlIG9ubHkgYXBwbGllcyB0byBmdW5jdGlvbiBwYXJh bWV0ZXJzLiAgQXJndW1lbnRzIGxpa2UgYGVuZGAgZm9yCiAgYGNvbGxlY3RgJ3MgcG9zaXRpb24g cGFyYW1ldGVyIGNhbiBzdGlsbCBiZSB1bnF1b3RlZC4KCi0gYGFwcGVuZGAgbm93IGFwcGVuZHMg dG8gdGhlIGVuZHMgb2YgZXhwbGljaXQgYWNjdW11bGF0aW9uIHZhcmlhYmxlcwogIHdpdGhvdXQg Y29weWluZyBmaXJzdC4gIEl0IGlzIG5vdyBtdWNoIGZhc3Rlci4gWyM3OF0KCi0gVGhlIGFjY3Vt dWxhdGlvbiBjb21tYW5kcyB3aGljaCBidWlsZCBsaXN0cyAoYGFkam9pbmAsIGBhcHBlbmRgLCBg Y29sbGVjdGAsCiAgYHVuaW9uYCwgYG5vbmNgLCBgbnVuaW9uYCkgYXJlIG5vdyBtb3JlIGNvcnJl Y3QsIGF0IHRoZSBjb3N0IG9mIHNvbWUgc3BlZWQKICAoWyM3OF0pLgogIC0gV2hlbiBhZGRpbmcg dGhlIGVuZCBvZiB0aGUgbGlzdCwgdmFyaWFibGVzIGV4cGxpY2l0bHkgbmFtZWQgY2FuIG5vdyBi ZQogICAgYmV0dGVyIG1vZGlmaWVkIGR1cmluZyB0aGUgbG9vcC4KICAtIEFjY3VtdWxhdGlvbiBj b21tYW5kcyBjYW4gbm93IGJldHRlciBtb2RpZnkgdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgYGxv b3B5LXJlc3VsdGAuICBVc2luZyBpbXBsaWNpdCB2YXJpYWJsZXMgaXMgc3RpbGwgZmFzdGVyIHRo YW4gdXNpbmcKICAgIGV4cGxpY2l0IHZhcmlhYmxlcy4KICAtIEFjY3VtdWxhdGlvbiBsb29wIGNv bW1hbmRzIGFyZSBub3cgZXZlbiBtb3JlIGVmZmljaWVudCB3aGVuIHVzaW5nIHRoZQogICAgYHNw bGl0YCBmbGFnLiAgVGhpcyBpcyB0aGUgZmFzdGVzdCBtZXRob2QgdG8gdXNlIGJ1aWxkIGEgcmVz dWx0LgoKLSBFeHBsaWNpdCBhY2N1bXVsYXRpb24gdmFyaWFibGVzIGFyZSBubyBsb25nZXIgdXNl ZCBhcyBpbXBsaWNpdCByZXR1cm4gdmFsdWVzCiAgZm9yIHRoZSBtYWNyby4gIFRoaXMgaXMgbmVl ZGVkIGZvciBtb3JlIGNvbnNpc3RlbnRseSBoYW5kbGluZyB0aGUgY29tcGxleGl0eQogIHRoYXQg Y29tZXMgZnJvbSBhbGxvd2luZyB0aGUgdXNlIG9mIFBjYXNlJ3MgYXJiaXRyYXJ5IGRlc3RydWN0 dXJpbmcgbWFjcm9zLgogIFRoaXMgaXMgcmVsYXRlZCB0bywgYnV0IG5vdCBhIGRpcmVjdCBmaXgg Zm9yLCBbIzQzXS4KCi0gVGhlIGNvbW1hbmQgYG1hcGAgbm93IGl0ZXJhdGVzIHRocm91Z2ggZG90 dGVkIHBhaXJzICh2aWEgYG1hcC1wYWlyc2ApIGluc3RlYWQKICBvZiB1bmRvdHRlZCBwYWlycyAo dmlhIGBtYXAtYXBwbHlgKS4gIFRoaXMgYnJpbmdzIGBsb29weWAgbW9yZSBpbiBsaW5lIHdpdGgK ICBvdGhlciBwYWNrYWdlcywgYmV0dGVyIG1lZXRpbmcgdXNlciBleHBlY3RhdGlvbnMuCgojIyMg QnVncyBGaXhlZAoKLSBDb3JyZWN0bHkgYGxldGAtYmluZCBgbG9vcHktLWRlc3RydWN0dXJpbmct Zm9yLWl0ZXJhdGlvbi1mdW5jdGlvbmAgKG5vIFBSIG9yCiAgSXNzdWUpLiAgUHJldmlvdXNseSwg c29tZSBkZXN0cnVjdHVyaW5nIHNldHRpbmdzIHdvdWxkIGFmZmVjdCB0aGUgbmV4dCBtYWNybwog IHJ1bi4KCi0gU3BsaXQgYWNjdW11bGF0aW9uIHZhbHVlcyBhcmUgY29ycmVjdGx5IGdhdGhlcmVk IGludG8gYGxvb3B5LXJlc3VsdGAgd2hlbiB0aGUKICBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50cyBg YWZ0ZXItZG9gLCBgZmluYWxseS1kb2AsIG9yIGBmaW5hbGx5LXJldHVybmAgYXJlCiAgdXNlZC4K CiMjIyBPdGhlciBDaGFuZ2VzCgotIEEgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciBpcyBzaWduYWxl ZCB3aGVuIGluY29tcGF0aWJsZSBhY2N1bXVsYXRpb24gY29tbWFuZHMKICBhcmUgdXNlZCAoWyM3 OF0pLCBzaG93aW5nIHRoZSBjb21tYW5kcyB0aGVtc2VsdmVzLiAgVGhpcyBhZGRyZXNzZXMgWyM0 NV0uCi0gVXBkYXRlIHNvbWUgb2YgdGhlIHVzZXIgb3B0aW9ucyAoWyM0OV0pOgogIC0gYGxvb3B5 LWN1c3RvbS1jb21tYW5kLWFsaWFzZXNgIGlzIG5vdyBhbiBhbGlhcyBvZiBgbG9vcHktY29tbWFu ZC1hbGlhc2VzYC4KICAtIGBsb29weS1jdXN0b20tY29tbWFuZC1wYXJzZXJzYCBpcyBub3cgYW4g YWxpYXMgb2YgYGxvb3B5LWNvbW1hbmQtcGFyc2Vyc2AuCiAgLSBVc2VyIGFsaWFzZXMgY2FuIG5v dyBiZSByZWN1cnNpdmUgKGkuZS4sIGFuIGFsaWFzIG9mIGFuIGFsaWFzKS4KLSBBZGQgdGhlIHNw ZWNpYWwgbWFjcm8gYXJndW1lbnQgYHdyYXBgLCB3aGljaCBjYW4gd3JhcCBwYXJ0cyBvZiB0aGUg bG9vcAogIChbIzY4XSkuCgpbIzQzXTogaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9p c3N1ZXMvNDMKWyM0NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzLzQ1 ClsjNDldOiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L2lzc3Vlcy80OQpbIzY4XTog aHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9wdWxsLzY4ClsjNzhdOiBodHRwczovL2dp dGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwvNzgKCiMjIDAuNi4xCgpSZWxlYXNlZCAyMDIxLTA2 LTA5LgoKIyMjIEJyZWFraW5nIENoYW5nZXMKCi0gQ29tbWFuZHMgd2VyZSB1cGRhdGVkIHRvIGlu Y2x1ZGUga2V5d29yZCBvcHRpb25zIG1vcmUgbGlrZSB0aG9zZSBvZiBgY2wtbG9vcGAKICBhbmQg YGl0ZXJhdGVgLCBzdWNoIGFzIHRoZSBrZXl3b3JkcyBgZnJvbWAsIGB1cGZyb21gLCBgZG93bmZy b21gLCBgdG9gLAogIGB1cHRvYCwgYGRvd250b2AsIGBhYm92ZWAsIGBiZWxvd2AsIGBieWAuIChb IzczXSwgWyM2NV0pCgogIC0gTGlzdCBjb21tYW5kcyBsaWtlIGBsaXN0YCBhbmQgYGxpc3QtcmVm YCBvbmx5IHJlY2VpdmVkIGBieWAsIHdoaWNoIHJlcGxhY2VzCiAgICB0aGUgb3B0aW9uYWwgdGhp cmQgYXJndW1lbnQgYEZVTkNgLgogIC0gYHNlcWAgYW5kIGBhcnJheWAgKGFuZCB0aGVpciB2YXJp YW50cykgcmVjZWl2ZWQgdGhlIGFib3ZlIGxpc3QgYW5kIHRoZQogICAga2V5d29yZCBgaW5kZXhg LCB3aGljaCBuYW1lcyBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIGluZGV4LgoKLSBUaGUgY29tbWFu ZHMgYGxpc3RgLCBgYXJyYXlgLCBhbmQgYHNlcWAgY2FuIG5vdyB0YWtlIG11bHRpcGxlIHNlcXVl bmNlcyBiZWZvcmUKICBrZXl3b3JkIGFyZ3VtZW50cywgaW4gd2hpY2ggY2FzZSB0aGUgZWxlbWVu dHMgb2YgdGhvc2Ugc2VxdWVuY2VzIGFyZQogIGRpc3RyaWJ1dGVkLiAgU2VlIHRoZSBkb2N1bWVu dGF0aW9uIGZvciBtb3JlIGluZm8uIChbIzczXSwgWyM2NV0pCgojIyMgTm9uLUJyZWFraW5nIENo YW5nZXMKCi0gVGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIG9mIHRoZSBgbnVtc2AgY29tbWFuZCBh cmUgbm93IG9wdGlvbmFsLCBhbmQgY2FuIGJlCiAgc3VwcGxlbWVudGVkIHdpdGgga2V5d29yZCBm cm9tIHRoZSBsaXN0IGFib3ZlLiAoWyM3M10pCi0gUmUtYXJyYW5nZSBkb2N1bWVudGF0aW9uLgoK IyMjIEJ1ZyBGaXhlcwoKLSBGaXggdXNpbmcgdmFyaWFibGVzIGZvciB0aGUgbmV3IGBieWAgYXJn dW1lbnQgb2YgdGhlIGNvbW1hbmRzIGBsaXN0LXJlZmAsCiAgYGxpc3RgLCBhbmQgYGNvbnNgLiAg VGhpcyBhcmd1bWVudCBjYW4gbm93IGJlIGEgdmFyaWFibGUsIHdoaWNoIG1lYW5zIHRoYXQKICBy ZWZlcmVuY2VzIHRvIGZ1bmN0aW9uIHN5bWJvbHMgbXVzdCBub3cgYmUgcXVvdGVkIChbIzczXSku CgoKWyM2NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvaXNzdWVzLzY1ClsjNzNd OiBodHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L3B1bGwvNzMK --b1_wISXFCJSVuT9BYs9H3anblqkBRKbpdkuMj6mbDGG4-- From debbugs-submit-bounces@debbugs.gnu.org Sat Feb 24 04:58:33 2024 Received: (at 69344) by debbugs.gnu.org; 24 Feb 2024 09:58:33 +0000 Received: from localhost ([127.0.0.1]:44119 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rdong-0008Sa-53 for submit@debbugs.gnu.org; Sat, 24 Feb 2024 04:58:33 -0500 Received: from mout01.posteo.de ([185.67.36.65]:50287) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rdonb-0008Rz-EZ for 69344@debbugs.gnu.org; Sat, 24 Feb 2024 04:58:31 -0500 Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id F1922240027 for <69344@debbugs.gnu.org>; Sat, 24 Feb 2024 10:57:56 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1708768677; bh=9tnjt4roceokUesG3ZWEckIF0Ye/QNh89R50mJUmf3A=; h=From:To:Cc:Subject:OpenPGP:Date:Message-ID:MIME-Version: Content-Type:From; b=B4GFDXJucDxCvdNp4raXnSi6m5kbep1CO6m2G7nOvcjy0fRzoTqd6EbAPt564cvwJ vrn9j7T4dSasXArMbgiVq0n5jdDuV8Lb5SckUrthJKZol3Nl3ys6YBNXpeGsWOM7Jt Y/Ybf/kOyGZCfjkKPKUDDJK162Fix9R+jrP8uosAD5Bd1NeOJPnHfZ4vDhY8jzp8O7 i5Bz9cn3FkX3ye6oy2WEMcgwOZIDmi6izuXfWqLSsN1SaBhIFJESdHp7vT77ug5NtJ hUPKCzjEqUwDZDYxRTLkCfaVU2ge3FLxkzQ3jgWJWu3jaLC7PSMCpMfpjQ8kR2fEdn G6Paa+ow+VxoA== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4Thj4439Ppz9rxK; Sat, 24 Feb 2024 10:57:56 +0100 (CET) From: Philip Kaludercic To: Okamsn Subject: Re: bug#69344: ELPA process collapses Markdown fenced code block into 1 line for HTML page In-Reply-To: <07ce193d-06b6-4ab8-b1dc-2ae349daf8d2@protonmail.com> (okamsn@protonmail.com's message of "Sat, 24 Feb 2024 02:16:29 +0000") References: <07ce193d-06b6-4ab8-b1dc-2ae349daf8d2@protonmail.com> OpenPGP: id=7126E1DE2F0CE35C770BED01F2C3CC513DB89F66; url="https://keys.openpgp.org/vks/v1/by-fingerprint/7126E1DE2F0CE35C770BED01F2C3CC513DB89F66"; preference=signencrypt Date: Sat, 24 Feb 2024 09:57:55 +0000 Message-ID: <87zfvq6v6k.fsf@posteo.net> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 69344 Cc: 69344@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Okamsn writes: > Hello, > > While working on adding my package to Non-GNU ELPA, I noticed that the > `make build/loopy` process collapsed the fenced code blocks in the file > "CHANGELOG.md" into 1 line in the HTML output. > > I have attached the Markdown file "CHANGELOG.md" and the outputted file > "loopy.html". The squashed code blocks can be seen towards the end of > the HTML file when viewed in EWW and Chromium. (In case anyone else is confused by the same thing as I was, apparently Gnus renders the code blocks and removed the backticks.) > Thank you. [...] > ```emacs-lisp > ;; Now correct behavior (would previously error): > ;; => 6 > (loopy (list i '(1 2 3)) > (reduce i #'*)) > ``` Elpa-admin.el uses the original markdown implementation by John Gruber or markdown2 (https://pypi.org/project/markdown2/) to render Markdown, which apparently doesn't handle formatted code blocks: --8<---------------cut here---------------start------------->8--- $ markdown ```emacs-lisp ;; Previously erroneously returned 27: ;; => nil (loopy (with (val 27)) (list i '(1 2 3)) (find val nil (> i 10) :on-failure nil) (finally-return val)) ```

emacs-lisp ;; Previously erroneously returned 27: ;; => nil (loopy (with (val 27)) (list i '(1 2 3)) (find val nil (> i 10) :on-failure nil) (finally-return val))

--8<---------------cut here---------------end--------------->8--- or rather it handles them as regular fixed-with formatting sequences. The quick fix would just be to use classical indented code-blocks, but it would be worth considering a more robust and predictable markdown implementation like cmark.