From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Okamsn Newsgroups: gmane.emacs.devel Subject: Adding package "Loopy" to Non-GNU Devel? Date: Tue, 20 Feb 2024 02:15:16 +0000 Message-ID: <871ec398-df6a-44a1-a149-d0014f99b756@protonmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_HrqAhwmgGYAM6kNMg5ZfvMBPawR4e9W5dnzVVFLZAU" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2125"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Feb 20 04:22:09 2024 Return-path: Envelope-to: ged-emacs-devel@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 1rcGht-0000Kh-0H for ged-emacs-devel@m.gmane-mx.org; Tue, 20 Feb 2024 04:22:09 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rcGh6-0005GP-E5; Mon, 19 Feb 2024 22:21:20 -0500 Original-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 1rcFfV-0007iq-Q5 for emacs-devel@gnu.org; Mon, 19 Feb 2024 21:15:37 -0500 Original-Received: from mail-40133.protonmail.ch ([185.70.40.133]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rcFfS-0001yw-9D for emacs-devel@gnu.org; Mon, 19 Feb 2024 21:15:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1708395330; x=1708654530; bh=w1FjtZqNic9R3M3EDoQ71SFHGGbaARskHP8sHUJqyJw=; h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=jytbxpIMtnqq7q9e011XWpDlVAf7aAYWyt2/5SLL0NARpW0z+fRfbJIIynQioRLnJ 4AB3rQ/UirJNsMldQPxOfNia2FhJWwcvBMCydIpPf7721wkeKxvHOi+uo7L94o/YnD v+I65FDiwuaIiM0KE8qoy1C83H7Lf2gQ3GlfhNh+BQWVifJNJ5vWsNKWkl40APilr/ Ei7DLbsdLqz7Qc7/U3qmvt6yMnYkriqcq0i1F2ruN27m/wrYvkU0C6B/3XdR6Oy+Xj RvPcy96w3UeuTaSmJ8i4dFtJLx087aHUrNmikeD3StmS0j/8hQPU1Pbh0OARl3QpFu 0eGWrl4oS6pJA== Feedback-ID: 25935600:user:proton Received-SPF: pass client-ip=185.70.40.133; envelope-from=okamsn@protonmail.com; helo=mail-40133.protonmail.ch 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, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 19 Feb 2024 22:21:17 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:316386 Archived-At: This is a multi-part message in MIME format. --b1_HrqAhwmgGYAM6kNMg5ZfvMBPawR4e9W5dnzVVFLZAU Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello, I am the author of the package "loopy", which provides macros similar to ~cl-loop~ and Common Lisp's =3Diterate=3D. It is located here: https://github.com/okamsn/loopy For those not willing to browse GitHub, I have copied the main points=20 from the README.org file. I have attached the README and the Org documentation file. Visually, Loopy differs by using parentheses instead of keywords like=20 ~cl-loop~. For example, #+begin_src emacs-lisp ;; A use of `cl-loop': (cl-loop for i from 1 to 10 if (cl-evenp i) collect i into evens else collect i into odds end ; This `end' keyword is optional here. finally return (list odds evens)) ;; How it could be done using `loopy': (loopy (numbers i :from 1 :to 10) (if (cl-evenp i) (collect evens i) (collect odds i)) (finally-return odds evens)) #+end_src Non-visually, these are I think the main improvements: - Better destructuring than =3Dcl-lib=3D, in that it can destructure arrays= and supports destructuring in accumulations (like ~collect~) as well as in iteration. I recently added a Pcase pattern for this outside of the=20 ~loopy~ macro. #+begin_src emacs-lisp ;; =3D> (8 10 12 14 16 18) (loopy (list list-elem '(([1 2 3] [4 5 6]) ([7 8 9] [10 11 12]))) (sum ([sum1 sum2 sum3] [sum4 sum5 sum6]) list-elem) (finally-return sum1 sum2 sum3 sum4 sum5 sum6)) #+end_src - Better control over accumulations, in that one can declare that an accumulation is "optimized" (for example, using the ~push~-~nreverse~=20 pattern instead of the ~append~-~list~ pattern) for named variables, allowing to efficiently accumulate for multiple values and to declare beforehand=20 whether adding to the front or the end of the list should be preferred. The below expands into two instances of the ~push~-~nreverse~ pattern: #+begin_src emacs-lisp ;; Separate the elements of sub-list: ;; =3D> ((1 3) (2 4)) (loopy (accum-opt elem1 elem2) (list i '((1 2) (3 4))) (collect (elem1 elem2) i) (finally-return elem1 elem2)) #+end_src - A way to embed the looping constructs in arbitrary code like in Common=20 Lisp's Iterate: #+begin_src emacs-lisp (require 'loopy-iter) ;; Things to note: ;; =3D> ((-9 -8 -7 -6 -5 -4 -3 -2 -1) ;; (0) ;; (1 2 3 4 5 6 7 8 9 10 11)) (loopy-iter (accum-opt positives negatives zeroes) (numbering i :from -10 :to 10) ;; Normal `let' and `pcase', not Loopy constructs: (let ((var (1+ i))) (pcase var ((pred cl-plusp) (collecting positives var)) ((pred cl-minusp) (collecting negatives var)) ((pred zerop) (collecting zeroes var)))) (finally-return negatives zeroes positives)) #+end_src - An =3Dat=3D feature to manipulate containing loops, such as moving to the= next iteration step or accumulating into a variable: #+begin_src emacs-lisp (loopy outer (array i [(1 2) (3 4) (5 6)]) (loopy (with (sum (apply #'+ i))) (list j i) (at outer (collect (+ sum j))))) #+end_src - It should be easy to add new looping features. The documentation has=20 examples of this. The package and an extension package (to use Dash's destructuring instead o= f that of Loopy, Pcase, or Seq) has been available on MELPA for a few=20 years now. I am asking about Non-GNU Devel instead of just the normal Non-GNU archive because I am still making breaking changes to the package as I reduce duplication and improve on the ideas, but those changes are coming less frequently now. Is it possible to add this package and the extension package to the archive= ? I keep the extension package in the same GitHub repo as the main package fo= r testing purposes. The Dash functionality was requested by a user, but=20 Dash is not used by the rest of the package. Because of that, I put the Dash functionality in a small separate package. Thank you. --b1_HrqAhwmgGYAM6kNMg5ZfvMBPawR4e9W5dnzVVFLZAU Content-Type: application/vnd.lotus-organizer; name=README.org Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=README.org Iyt0aXRsZTogTG9vcHk6IEEgTG9vcGluZyBhbmQgSXRlcmF0aW9uIE1hY3JvCiMgTWFrZSBzdXJl IHRvIGV4cG9ydCBhbGwgaGVhZGluZ3MgYXMgc3VjaC4gIE90aGVyd2lzZSwgc29tZSBsaW5rcyB0 bwojIHN1Yi1oZWFkaW5ncyB3b27igJl0IHdvcmsuCiMrb3B0aW9uczogSDo2CiMgU29tZSBwYXJz ZXJzIHJlcXVpcmUgdGhpcyBvcHRpb24gdG8gZXhwb3J0IGZvb3Rub3Rlcy4KIytvcHRpb25zOiBm OnQKCiMgTUVMUEEgQmFkZ2VzCj1sb29weT06IFtbaHR0cHM6Ly9tZWxwYS5vcmcvIy9sb29weV1b ZmlsZTpodHRwczovL21lbHBhLm9yZy9wYWNrYWdlcy9sb29weS1iYWRnZS5zdmddXSBcXAo9bG9v cHktZGFzaD06IFtbaHR0cHM6Ly9tZWxwYS5vcmcvIy9sb29weS1kYXNoXVtmaWxlOmh0dHBzOi8v bWVscGEub3JnL3BhY2thZ2VzL2xvb3B5LWRhc2gtYmFkZ2Uuc3ZnXV0KCi0tLS0tCgp+bG9vcHl+ IGlzIGEgbWFjcm8gbWVhbnQgZm9yIGl0ZXJhdGluZyBhbmQgbG9vcGluZy4gIEl0IGlzIHNpbWls YXIgaW4gdXNhZ2UgdG8KW1todHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VtYWNzL21hbnVh bC9odG1sX25vZGUvY2wvTG9vcC1GYWNpbGl0eS5odG1sI0xvb3AtRmFjaWxpdHldW35jbC1sb29w fl1dIGJ1dCB1c2VzIHN5bWJvbGljIGV4cHJlc3Npb25zIHJhdGhlciB0aGFuIGtleXdvcmRzLgoK Rm9yIG1vc3QgdXNlIGNhc2VzLCB+bG9vcHl+IHNob3VsZCBiZSBhIG5pY2Ugc3Vic3RpdHV0ZSBm b3IgfmNsLWxvb3B+IGFuZApjb21wbGVtZW50YXJ5IHRvIHRoZSBmZWF0dXJlcyBwcm92aWRlZCBi eSB0aGUgW1todHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VtYWNzL21hbnVhbC9odG1sX25v ZGUvZWxpc3AvU2VxdWVuY2VzLUFycmF5cy1WZWN0b3JzLmh0bWxdW1NlcV1dIGFuZCBbW2h0dHBz Oi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZW1hY3MvbWFudWFsL2h0bWxfbm9kZS9jbC9pbmRleC5o dG1sXVtDTF1dIGxpYnJhcmllcyBhbmQgRW1hY3MncwpyZWd1bGFyIGxvb3BpbmcgYW5kIG1hcHBp bmcgZmVhdHVyZXMuCgpGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24sIHNlZSBbW2ZpbGU6ZG9jL2xv b3B5LWRvYy5vcmddW3RoZSBkb2N1bWVudGF0aW9uIGZpbGVdXS4gIFRoaXMgUkVBRE1FIGlzIGp1 c3QgYW4Kb3ZlcnZpZXcuCgotLS0tLQojK2JlZ2luX2NlbnRlcgoqTk9URSo6IExvb3B5IGlzIHN0 aWxsIGluIGl0cyBsYXR0ZXIgbWlkZGxlIHN0YWdlcy5cXApDb25zdHJ1Y3RpdmUgY3JpdGljaXNt IGlzIHdlbGNvbWUuICBJZiB5b3Ugc2VlIGEgcGxhY2UgZm9yIGltcHJvdmVtZW50LApwbGVhc2Ug bGV0IG1lIGtub3cuCiMrZW5kX2NlbnRlcgotLS0tLQoKIF9SZWNlbnQgYnJlYWtpbmcgY2hhbmdl czpfCiAtIFZlcnNpb24gMC4xMi4wOgogICAtIFRoZSBib29sZWFuIGNvbW1hbmRzID1hbHdheXM9 LCA9bmV2ZXI9LCBhbmQgPXRoZXJlaXM9IG5vdyBiZWhhdmUgbW9yZSBsaWtlCiAgICAgYWNjdW11 bGF0aW9uIGNvbW1hbmRzIGFuZCB1c2Ugfmxvb3B5LXJlc3VsdH4gYnkgZGVmYXVsdC4KICAgLSBV c2luZyBtdWx0aXBsZSBjb25kaXRpb25zIGluID1hbHdheXM9LCA9bmV2ZXI9LCBhbmQgPXRoZXJl aXM9IGlzCiAgICAgZGVwcmVjYXRlZC4gIFRoZXNlIGNvbW1hbmRzIHdpbGwgYmUgY2hhbmdlZCB0 byBoYXZlIGNhbGwgYXJndW1lbnQgbGlzdHMKICAgICBtb3JlIGxpa2UgYWNjdW11bGF0aW9uIGNv bW1hbmRzLCBzdWNoIGFzID0oYWx3YXlzIFtWQVJdIFZBTCAma2V5IGludG8pPS4KICAgICBUaGlz IHdpbGwgc2ltcGxpZnkgdGhlIGNvZGUgYW5kIHJlbW92ZSBhbiBpbmNvbnNpc3RlbmN5IGJldHdl ZW4gdGhlbSBhbmQKICAgICB0aGUgb3RoZXIgY29tbWFuZHMuCiAgIC0gUmUtdXNpbmcgaXRlcmF0 aW9uIHZhcmlhYmxlcyBpbiBtdWx0aXBsZSBpdGVyYXRpb24gY29tbWFuZHMgbm93IHNpZ25hbHMK ICAgICBhbiBlcnJvci4gIEl0IG5ldmVyIHByb2R1Y2VkIGNvcnJlY3QgY29kZS4KICAgLSBCeSBk ZWZhdWx0LCB0aGUgY29tbWFuZHMgPWNvbnM9LCA9aXRlcj0sID1udW1zPSwgYW5kID1zZXEtaW5k ZXg9CiAgICAgL2Nhbi8gdXBkYXRlIG5hbWVkIGl0ZXJhdGlvbiB2YXJpYWJsZXMgb3V0c2lkZSBv ZiB0aGUgbWFpbiBsb29wIGJvZHkKICAgICBhbmQgaW5pdGlhbGl6ZSB2YXJpYWJsZXMgdG8gbm9u LW5pbCB2YWx1ZXMsIHByb2R1Y2luZyBmYXN0ZXIgY29kZS4KICAgICBUaGlzIGNhbiBiZSBvdmVy cmlkZGVuIHZpYSB0aGUgc3BlY2lhbCBtYWNybyBhcmd1bWVudCA9d2l0aD0uCiAgIC0gPTpyZXN1 bHQtdHlwZT0gaXMgZGVwcmVjYXRlZC4gIEluc3RlYWQsIHVzZSBjb2VyY2lvbiBmdW5jdGlvbnMg aW4KICAgICBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50cywgcG9zc2libHkgd2l0aCA9YWNjdW0tb3B0 PS4KICAgLSBUaGUgPTppbml0PSBrZXl3b3JkIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuICBVc2Ug dGhlIHNwZWNpYWwgbWFjcm8gYXJndW1lbnQKICAgICA9d2l0aD0gaW5zdGVhZC4KICAgLSA9cmVk dWNlPSBoYXMgYmVlbiBmaXhlZC4gSXQgbm93IHdvcmtzIGxpa2UgfmNsLXJlZHVjZX4gd2hlbiB0 aGUgdmFyaWFibGUKICAgICBzdGFydGluZyB2YWx1ZSBpc24ndCBleHBsaWNpdGx5IGdpdmVuLCBz dG9yaW5nIHRoZSBmaXJzdCB2YWx1ZSBpbnN0ZWFkIG9mCiAgICAgc3RvcmluZyB0aGUgcmVzdWx0 IG9mIHBhc3NpbmcgdGhlIGZpcnN0IHZhbHVlIGFuZCB+bmlsfiB0byB0aGUgZnVuY3Rpb24uCiAg IC0gVGhlIGRlcHJlY2F0ZWQgZmxhZ3MgPWxheC1uYW1pbmc9IGFuZCA9c3BsaXQ9IHdlcmUgcmVt b3ZlZC4KICAgLSBUaGUgZGVwcmVjYXRlZCBjb21tYW5kID1zdWItbG9vcD0gd2FzIHJlbW92ZWQu CiAgIC0gVGhlIG5vbi1rZXl3b3JkIGFyZ3VtZW50cyBvZiA9bnVtYmVycz0gYXJlIGRlcHJlY2F0 ZWQuICBVc2UgdGhlIGtleXdvcmQKICAgICBhcmd1bWVudHMgaW5zdGVhZC4gIEEgPTp0ZXN0PSBr ZXl3b3JkIGFyZ3VtZW50IHdhcyBhZGRlZCwgd2hpY2ggaXMgbW9yZQogICAgIGZsZXhpYmxlIGFu ZCBleHBsaWNpdCB0aGFuIHRoZSBub24ta2V5d29yZCBhcmd1bWVudHMuCiAgIC0gRml4ZWQgYSBw cm9ibGVtIHdpdGggbWFjcm8gZXhwYW5zaW9uIGluIHNvbWUgY2FzZXMgZm9yIHN1Yi1tYWNyb3MK ICAgICB0aGF0IGNyZWF0ZWQgYSBuZXcgbWFjcm8gZW52aXJvbm1lbnQgKGUuZy4sIH5jbC1mbGV0 fikuCiAgIC0gTG9vcCBjb21tYW5kcyBub3cgZXZhbHVhdGUgYXJndW1lbnRzIGxpa2UgPTp0ZXN0 PSwgPTprZXk9LCBhbmQgPTpieT0gb25seQogICAgIG9uY2UuCiAgIC0gQ2hhbmdlIHRoZSBhcmd1 bWVudCBvcmRlciBvZiA9dGVzdD0gdG8gYmUgKDEpIHRoZSBzZXF1ZW5jZSBlbGVtZW50IHRoZW4g KDIpCiAgICAgdGhlIHRlc3RlZCB2YWx1ZSwgbGlrZSBpbiB+c2VxLWNvbnRhaW5zLXB+IGFuZCBf dW5saWtlXyBpbiB+Y2wtbWVtYmVyfiwgYW5kCiAgICAgZXhwbGljaXRseSBzdGF0ZSB0aGlzIG9y ZGVyIGluIHRoZSBkb2N1bWVudGF0aW9uLgogICAtID0ma2V5PSBub3cgc2lnbmFscyBhbiBlcnJv ciB3aGVuIHRoZXJlIGFyZSB1bm1hdGNoZWQga2V5cyBpbiB0aGUgcGxpc3QsIGFzCiAgICAgaW4g PWNsLWxpYj0uICA9JmFsbG93LW90aGVyLWtleXM9IGhhcyBiZWVuIGFkZGVkLgogLSBTZWUgdGhl IFtbaHR0cHM6Ly9naXRodWIuY29tL29rYW1zbi9sb29weS9ibG9iL21hc3Rlci9DSEFOR0VMT0cu bWRdW2NoYW5nZSBsb2ddXSBmb3IgbGVzcyByZWNlbnQgY2hhbmdlcy4KCiMgVGhpcyBhdXRvLWdl bmVyYXRlZCBieSB0b2Mtb3JnLgoqIFRhYmxlIG9mIENvbnRlbnRzICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlRPQzpub2V4cG9ydDoKLSBbWyNpbnRyb2R1 Y3Rpb25dW0ludHJvZHVjdGlvbl1dCi0gW1sjc2ltaWxhci1saWJyYXJpZXNdW1NpbWlsYXIgTGli cmFyaWVzXV0KLSBbWyNob3ctdG8taW5zdGFsbF1bSG93IHRvIEluc3RhbGxdXQotIFtbI211bHRp cGxlLWtpbmRzLW9mLWRlc3RydWN0dXJpbmddW011bHRpcGxlIEtpbmRzIG9mIERlc3RydWN0dXJp bmddXQotIFtbI2xvb3AtY29tbWFuZHMtaW4tYXJiaXRyYXJ5LWNvZGVdW0xvb3AgQ29tbWFuZHMg aW4gQXJiaXRyYXJ5IENvZGVdXQotIFtbI2FkZGluZy1jdXN0b20tY29tbWFuZHNdW0FkZGluZyBD dXN0b20gQ29tbWFuZHNdXQotIFtbI2NvbXBhcmluZy10by1jbC1sb29wXVtDb21wYXJpbmcgdG8g PWNsLWxvb3A9XV0KLSBbWyNyZWFsLXdvcmxkLWV4YW1wbGVzXVtSZWFsLVdvcmxkIEV4YW1wbGVz XV0KCiogSW50cm9kdWN0aW9uCgpUaGUgfmxvb3B5fiBtYWNybyBpcyB1c2VkIHRvIGdlbmVyYXRl IGNvZGUgZm9yIGEgbG9vcCwgc2ltaWxhciB0byB+Y2wtbG9vcH4uClVubGlrZSB+Y2wtbG9vcH4s IH5sb29weX4gdXNlcyBwYXJlbnRoZXRpY2FsIGV4cHJlc3Npb25zIGluc3RlYWQgb2YgImNsYXVz ZXMiLgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogIDs7IEEgc2ltcGxlIHVzYWdlIG9mIGBjbC1s b29wJzoKICAoY2wtbG9vcCBmb3IgaSBmcm9tIDEgdG8gMTAKICAgICAgICAgICBpZiAoY2wtZXZl bnAgaSkgY29sbGVjdCBpIGludG8gZXZlbnMKICAgICAgICAgICBlbHNlIGNvbGxlY3QgaSBpbnRv IG9kZHMKICAgICAgICAgICBlbmQgOyBUaGlzIGBlbmQnIGtleXdvcmQgaXMgb3B0aW9uYWwgaGVy ZS4KICAgICAgICAgICBmaW5hbGx5IHJldHVybiAobGlzdCBvZGRzIGV2ZW5zKSkKCiAgOzsgSG93 IGl0IGNvdWxkIGJlIGRvbmUgdXNpbmcgYGxvb3B5JzoKICAobG9vcHkgKG51bWJlcnMgaSA6ZnJv bSAxIDp0byAxMCkKICAgICAgICAgKGlmIChjbC1ldmVucCBpKQogICAgICAgICAgICAgKGNvbGxl Y3QgZXZlbnMgaSkKICAgICAgICAgICAoY29sbGVjdCBvZGRzIGkpKQogICAgICAgICAoZmluYWxs eS1yZXR1cm4gb2RkcyBldmVucykpCgogIChsb29weSAobnVtYmVycyBpIDpmcm9tIDEgOnRvIDEw KQogICAgICAgICAoaWYgKGNsLWV2ZW5wIGkpCiAgICAgICAgICAgICAoY29sbGVjdCBpIDppbnRv IGV2ZW5zKQogICAgICAgICAgIChjb2xsZWN0IGkgOmludG8gb2RkcykpCiAgICAgICAgIChmaW5h bGx5LXJldHVybiBvZGRzIGV2ZW5zKSkKIytlbmRfc3JjCgp+bG9vcHl+IHN1cHBvcnRzIGRlc3Ry dWN0dXJpbmcgZm9yIGl0ZXJhdGlvbiBjb21tYW5kcyBsaWtlID1saXN0PSBhbmQKYWNjdW11bGF0 aW9uIGNvbW1hbmRzIGxpa2UgPXN1bT0gb3IgPWNvbGxlY3Q9LgoKIytiZWdpbl9zcmMgZW1hY3Mt bGlzcAogIDs7IFN1bW1pbmcgdGhlIG50aCBlbGVtZW50cyBvZiBhcnJheXM6CiAgOzsgPT4gKDgg MTAgMTIgMTQgMTYgMTgpCiAgKGxvb3B5IChsaXN0IChsaXN0LWVsZW0xIGxpc3QtZWxlbTIpCiAg ICAgICAgICAgICAgICcoKFsxIDIgM10gWzQgNSA2XSkKICAgICAgICAgICAgICAgICAoWzcgOCA5 XSBbMTAgMTEgMTJdKSkpCiAgICAgICAgIChzdW0gW3N1bTEgc3VtMiBzdW0zXSBsaXN0LWVsZW0x KQogICAgICAgICAoc3VtIFtzdW00IHN1bTUgc3VtNl0gbGlzdC1lbGVtMikKICAgICAgICAgKGZp bmFsbHktcmV0dXJuIHN1bTEgc3VtMiBzdW0zIHN1bTQgc3VtNSBzdW02KSkKCiAgOzsgT3IsIG1v cmUgc2ltcGx5OgogIDs7ID0+ICg4IDEwIDEyIDE0IDE2IDE4KQogIChsb29weSAobGlzdCBsaXN0 LWVsZW0gJygoWzEgMiAzXSBbNCA1IDZdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAoWzcg OCA5XSBbMTAgMTEgMTJdKSkpCiAgICAgICAgIChzdW0gKFtzdW0xIHN1bTIgc3VtM10gW3N1bTQg c3VtNSBzdW02XSkKICAgICAgICAgICAgICBsaXN0LWVsZW0pCiAgICAgICAgIChmaW5hbGx5LXJl dHVybiBzdW0xIHN1bTIgc3VtMyBzdW00IHN1bTUgc3VtNikpCgogIDs7IFNlcGFyYXRlIHRoZSBl bGVtZW50cyBvZiBzdWItbGlzdDoKICA7OyA9PiAoKDEgMykgKDIgNCkpCiAgKGxvb3B5IChsaXN0 IGkgJygoMSAyKSAoMyA0KSkpCiAgICAgICAgIChjb2xsZWN0IChlbGVtMSBlbGVtMikgaSkKICAg ICAgICAgKGZpbmFsbHktcmV0dXJuIGVsZW0xIGVsZW0yKSkKIytlbmRfc3JjCgpUaGUgfmxvb3B5 fiBtYWNybyBpcyBjb25maWd1cmFibGUgYW5kIGV4dGVuc2libGUuICBJbiBhZGRpdGlvbiB0byB3 cml0aW5nIG9uZSdzCm93biAibG9vcCBjb21tYW5kcyIgKHN1Y2ggYXMgPWxpc3Q9IGluIHRoZSBl eGFtcGxlIGFib3ZlKSwgYnkgdXNpbmcgImZsYWdzIiwgb25lCmNhbiBjaG9vc2Ugd2hldGhlciB0 byBpbnN0ZWFkIHVzZSB+cGNhc2UtbGV0fiwgfnNlcS1sZXR+LCBvciBldmVuIHRoZSBEYXNoCmxp YnJhcnkgZm9yIGRlc3RydWN0dXJpbmcuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgVXNl IGBwY2FzZScgdG8gZGVzdHJ1Y3R1cmUgYXJyYXkgZWxlbWVudHM6CiAgOzsgPT4gKCgxIDIgMyA0 KSAoMTAgMTIgMTQpICgxMSAxMyAxNSkpCiAgKGxvb3B5IChmbGFnIHBjYXNlKQogICAgICAgICAo YXJyYXkgKG9yIGAoLGNhciAuICxjZHIpIGRpZ2l0KQogICAgICAgICAgICAgICAgWzEgKDEwIC4g MTEpIDIgKDEyIC4gMTMpIDMgNCAoMTQgLiAxNSldKQogICAgICAgICAoaWYgZGlnaXQKICAgICAg ICAgICAgIChjb2xsZWN0IGRpZ2l0cyBkaWdpdCkKICAgICAgICAgICAoY29sbGVjdCBjYXJzIGNh cikKICAgICAgICAgICAoY29sbGVjdCBjZHJzIGNkcikpCiAgICAgICAgIChmaW5hbGx5LXJldHVy biBkaWdpdHMgY2FycyBjZHJzKSkKCiAgOzsgVXNpbmcgdGhlIGRlZmF1bHQgZGVzdHJ1Y3R1cmlu ZzoKICA7OyA9PiAoKDEgMiAzIDQpICgxMCAxMiAxNCkgKDExIDEzIDE1KSkKICAobG9vcHkgKGFy cmF5IGVsZW0gWzEgKDEwIC4gMTEpIDIgKDEyIC4gMTMpIDMgNCAoMTQgLiAxNSldKQogICAgICAg ICAoaWYgKG51bWJlcnAgZWxlbSkKICAgICAgICAgICAgIChjb2xsZWN0IGRpZ2l0cyBlbGVtKQog ICAgICAgICAgIChjb2xsZWN0IChjYXJzIC4gY2RycykgZWxlbSkpCiAgICAgICAgIChmaW5hbGx5 LXJldHVybiBkaWdpdHMgY2FycyBjZHJzKSkKIytlbmRfc3JjCgpWYXJpYWJsZXMgbGlrZSA9Y2Fy cz0sID1jZHJzPSwgYW5kID1kaWdpdHM9IGluIHRoZSBleGFtcGxlIGFib3ZlIGFyZQphdXRvbWF0 aWNhbGx5IH5sZXR+LWJvdW5kIHNvIGFzIHRvIG5vdCBhZmZlY3QgY29kZSBvdXRzaWRlIG9mIHRo ZSBsb29wLgoKfmxvb3B5fiBoYXMgYXJndW1lbnRzIGZvciBiaW5kaW5nIChvciBub3QgYmluZGlu ZykgdmFyaWFibGVzLCBleGVjdXRpbmcgY29kZQpiZWZvcmUgb3IgYWZ0ZXIgdGhlIGxvb3AsIGV4 ZWN1dGluZyBjb2RlIG9ubHkgaWYgdGhlIGxvb3AgY29tcGxldGVzLCBhbmQgZm9yCnNldHRpbmcg dGhlIG1hY3JvJ3MgcmV0dXJuIHZhbHVlIChkZWZhdWx0IH5uaWx+KS4gIFRoaXMgaXMgaW4gYWRk aXRpb24gdG8gdGhlCmxvb3BpbmcgZmVhdHVyZXMgdGhlbXNlbHZlcy4KCkFsbCBvZiB0aGlzIG1h a2VzIH5sb29weX4gYSB1c2VmdWwgYW5kIGNvbnZlbmllbnQgY2hvaWNlIGZvciBsb29waW5nIGFu ZAppdGVyYXRpb24uCgoqIFNpbWlsYXIgTGlicmFyaWVzCgpMb29weSBpcyBub3QgdGhlIG9ubHkg TGlzcCBsaWJyYXJ5IHRoYXQgdXNlcyBwYXJlbnRoZXRpY2FsIGV4cHJlc3Npb25zIGluc3RlYWQg b2YKa2V5d29yZCBjbGF1c2VzIChhcyBpbiB+Y2wtbG9vcH4pLiAgW1todHRwczovL2NvbW1vbi1s aXNwLm5ldC9wcm9qZWN0L2l0ZXJhdGUvXVtJdGVyYXRlXV0gYW5kIFtbaHR0cHM6Ly9naXRodWIu Y29tL1NoaW5tZXJhL2Zvci9dW0Zvcl1dIGFyZSB0d28gZXhhbXBsZXMgZnJvbQpDb21tb24gTGlz cC4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBDb2xsZWN0aW5nIDEwIHJhbmRvbSBudW1i ZXJzOgoKICA7OyBjbC1sb29wIChFbWFjcyBMaXNwKQogIChjbC1sb29wIHJlcGVhdCAxMCBjb2xs ZWN0IChyYW5kb20gMTApKQoKICA7OyBsb29weSAoTG9vcHkpCiAgKGxvb3B5IChyZXBlYXQgMTAp IChjb2xsZWN0IChyYW5kb20gMTApKSkKCiAgOzsgaXRlcmF0ZSAoQ29tbW9uIExpc3ApCiAgKGl0 ZXJhdGUgKHJlcGVhdCAxMCkgKGNvbGxlY3QgKHJhbmRvbSAxMCkpKQoKICA7OyBmb3IgKENvbW1v biBMaXNwKQogIChmb3I6Zm9yICgoaSByZXBlYXQgMTApIChyYW5kb21zIGNvbGxlY3RpbmcgKHJh bmRvbSAxMCkpKSkKCiMrZW5kX3NyYwoKR2VuZXJhbGx5LCBhbGwgb2YgdGhlIHBhY2thZ2VzIGhh bmRsZSBiYXNpYyB1c2UgY2FzZXMgaW4gc2ltaWxhciB3YXlzLiAgT25lCmxhcmdlIGRpZmZlcmVu Y2UgaXMgdGhhdCB+aXRlcmF0ZX4gY2FuIGVtYmVkIGl0cyBsb29waW5nIGNvbnN0cnVjdHMgaW4g YXJiaXRyYXJ5CmNvZGUuICBMb29weSBpcyBjdXJyZW50bHkgcHJvdmlkZXMgdGhpcyBmZWF0dXJl IGFzIGEgc2VwYXJhdGUgbWFjcm8sCn5sb29weS1pdGVyfiwgd2hpY2ggZXhwYW5kcyBsb29waW5n IGNvbnN0cnVjdHMgdXNpbmcgfm1hY3JvZXhwYW5kfi4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AK ICAocmVxdWlyZSAnbG9vcHktaXRlcikKCiAgOzsgVGhpbmdzIHRvIG5vZGU6CiAgOzsgLSBgYWNj dW0tb3B0JyBwcm9kdWNlcyBtb3JlIGVmZmljaWVudCBhY2N1bXVsYXRpb25zIGZvciBuYW1lcyB2 YXJpYWJsZXMKICA7OyAtIGBjeWNsaW5nJyBpcyBhbm90aGVyIG5hbWUgZm9yIGByZXBlYXQnCiAg OzsgPT4gKCgtOSAtOCAtNyAtNiAtNSAtNCAtMyAtMiAtMSkKICA7OyAgICAgKDApCiAgOzsgICAg ICgxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSkpCiAgKGxvb3B5LWl0ZXIgKGFjY3VtLW9wdCBwb3Np dGl2ZXMgbmVnYXRpdmVzIHplcm9lcykKICAgICAgICAgICAgICAobnVtYmVyaW5nIGkgOmZyb20g LTEwIDp0byAxMCkKICAgICAgICAgICAgICA7OyBOb3JtYWwgYGxldCcgYW5kIGBwY2FzZScsIG5v dCBMb29weSBjb25zdHJ1Y3RzOgogICAgICAgICAgICAgIChsZXQgKCh2YXIgKDErIGkpKSkKICAg ICAgICAgICAgICAgIChwY2FzZSB2YXIKICAgICAgICAgICAgICAgICAgKChwcmVkIGNsLXBsdXNw KSAgKGNvbGxlY3RpbmcgcG9zaXRpdmVzIHZhcikpCiAgICAgICAgICAgICAgICAgICgocHJlZCBj bC1taW51c3ApIChjb2xsZWN0aW5nIG5lZ2F0aXZlcyB2YXIpKQogICAgICAgICAgICAgICAgICAo KHByZWQgemVyb3ApICAgICAoY29sbGVjdGluZyB6ZXJvZXMgdmFyKSkpKQogICAgICAgICAgICAg IChmaW5hbGx5LXJldHVybiBuZWdhdGl2ZXMgemVyb2VzIHBvc2l0aXZlcykpCiMrZW5kX3NyYwoK TG9vcHkgaXMgbm90IHlldCBmZWF0dXJlIGNvbXBsZXRlLiAgUGxlYXNlIHJlcXVlc3QgZmVhdHVy ZXMgb3IgcmVwb3J0IHByb2JsZW1zCmluIHRoaXMgcHJvamVjdOKAmXMgW1todHRwczovL2dpdGh1 Yi5jb20vb2thbXNuL2xvb3B5L2lzc3Vlc11baXNzdWVzIHRyYWNrZXJdXS4gIFdoaWxlIGJhc2lj IHVzZXMgYXJlIGNvdmVyZWQsIHNvbWUgb2YgdGhlCm1vcmUgbmljaGUgZmVhdHVyZXMgb2YgfmNs LWxvb3B+IGFuZCB+aXRlcmF0ZX4gYXJlIHN0aWxsIGJlaW5nIGFkZGVkLgoKKiBIb3cgdG8gSW5z dGFsbAoKTG9vcHkgY2FuIGJlIGluc3RhbGxlZCBmcm9tIFtbaHR0cHM6Ly9tZWxwYS5vcmcvIy9s b29weV1bTUVMUEFdXSBhcyB0aGUgcGFja2FnZSA9bG9vcHk9LiAgVGhlIG9wdGlvbmFsIHBhY2th Z2UKPWxvb3B5LWRhc2g9IGNhbiBiZSBpbnN0YWxsZWQgdG8gZW5hYmxlIHVzaW5nIHRoZSBEYXNo IGxpYnJhcnkgZm9yIGRlc3RydWN0dXJpbmcKKGluc3RlYWQgb2Ygb3RoZXIgbWV0aG9kcykuCgoj K2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgKHVzZS1wYWNrYWdlIGxvb3B5KQoKICA7OyBPcHRpb25h bCBzdXBwb3J0IGZvciBkZXN0cnVjdHVyaW5nIHdpdGggRGFzaC4KICAodXNlLXBhY2thZ2UgbG9v cHktZGFzaAogICAgOmFmdGVyIChsb29weSkKICAgIDpkZW1hbmQgdCkKIytlbmRfc3JjCgpUbyBs b2FkIGFsbCBvZiB0aGUgYWx0ZXJuYXRpdmUgZGVzdHJ1Y3R1cmluZyBsaWJyYXJpZXMgKHNlZSBz ZWN0aW9uIFtbKk11bHRpcGxlIEtpbmRzIG9mIERlc3RydWN0dXJpbmddW011bHRpcGxlCktpbmRz IG9mIERlc3RydWN0dXJpbmddXSkgYW5kIHRoZSBhbHRlcm5hdGl2ZSBtYWNybyBmb3JtIChzZWUg c2VjdGlvbiBbWypMb29wIENvbW1hbmRzIGluIEFyYml0cmFyeSBDb2RlXVtMb29wCkNvbW1hbmRz IGluIEFyYml0cmFyeSBDb2RlXV0pLCB1c2UKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAodXNl LXBhY2thZ2UgbG9vcHkKICAgIDpjb25maWcKICAgIChyZXF1aXJlICdsb29weS1pdGVyKQogICAg KHJlcXVpcmUgJ2xvb3B5LXBjYXNlKQogICAgKHJlcXVpcmUgJ2xvb3B5LXNlcSkpCgogICh1c2Ut cGFja2FnZSBsb29weS1kYXNoCiAgICA6YWZ0ZXIgKGxvb3B5KQogICAgOmRlbWFuZCB0KQojK2Vu ZF9zcmMKCiogTXVsdGlwbGUgS2luZHMgb2YgRGVzdHJ1Y3R1cmluZwoKVGhlIGRlZmF1bHQgZGVz dHJ1Y3R1cmluZyBzeXN0ZW0gaXMgYSBzdXBlci1zZXQgb2Ygd2hhdCA9Y2wtbGliPSBwcm92aWRl cwphbmQgaXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIFtbaHR0cHM6Ly9naXRodWIuY29tL29r YW1zbi9sb29weS9ibG9iL21hc3Rlci9kb2MvbG9vcHktZG9jLm9yZyNiYXNpYy1kZXN0cnVjdHVy aW5nXVtCYXNpYyBEZXN0cnVjdHVyaW5nXV0gaW4gdGhlIGRvY3VtZW50YXRpb24uCgpJbiBhZGRp dGlvbiB0byB0aGUgYnVpbHQtaW4gZGVzdHJ1Y3R1cmluZyBzdHlsZSwgfmxvb3B5fiBjYW4gb3B0 aW9uYWxseSB1c2UKZGVzdHJ1Y3R1cmluZyBwcm92aWRlZCBieSB+cGNhc2UtbGV0fiwgfnNlcS1s ZXR+LCB0aGUgPWRhc2g9IGxpYnJhcnkuICBUaGlzCnByb3ZpZGVzIGdyZWF0ZXIgZmxleGliaWxp dHkgYW5kIGFsbG93cyB5b3UgdG8gdXNlIGRlc3RydWN0dXJpbmcgcGF0dGVybnMgdGhhdAp5b3Un cmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoLgoKVGhlc2UgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQg d2l0aCAiZmxhZ3MiLCBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gW1todHRwczovL2dpdGh1Yi5j b20vb2thbXNuL2xvb3B5L2Jsb2IvbWFzdGVyL2RvYy9sb29weS1kb2Mub3JnI3VzaW5nLWZsYWdz XVtVc2luZyBGbGFnc11dCmluIHRoZSBkb2N1bWVudGF0aW9uLgoKSGVyZSBhcmUgYSBmZXcgZXhh bXBsZXMgdGhhdCBkZW1vbnN0cmF0ZSBob3cgfmxvb3B5fiBjYW4gdXNlIGRlc3RydWN0dXJpbmcg d2l0aAphY2N1bXVsYXRpb24gY29tbWFuZHMuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgKHJl cXVpcmUgJ2xvb3B5LWRhc2gpCiAgOzsgPT4gKCgoMSAoMiAzKSkgKDQgKDUgNikpKSA7IHdob2xl CiAgOzsgICAgICgxIDQpICAgICAgICAgICAgICAgICA7IGkKICA7OyAgICAgKDMgNikpICAgICAg ICAgICAgICAgIDsgawogIChsb29weSAoZmxhZyBkYXNoKQogICAgICAgICAobGlzdCBlbGVtICco KDEgKDIgMykpICg0ICg1IDYpKSkpCiAgICAgICAgIChjb2xsZWN0ICh3aG9sZSAmYXMgaSAoXyBr KSkgZWxlbSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIHdob2xlIGkgaykpCgogIDs7ID0gPiAo KDMgNSkgKDQgNikpCiAgKGxvb3B5IChmbGFnIGRhc2gpCiAgICAgICAgIChsaXN0ICgmcGxpc3Qg OmEgYSAgOmIgYikKICAgICAgICAgICAgICAgJygoOmEgMyAgOmIgNCA6YyA3KSAoOmcgOCA6YSA1 IDpiIDYpKSkKICAgICAgICAgKGNvbGxlY3QgYS12YWxzIGEpCiAgICAgICAgIChjb2xsZWN0IGIt dmFscyBiKQogICAgICAgICAoZmluYWxseS1yZXR1cm4gYS12YWxzIGItdmFscykpCgogIChyZXF1 aXJlICdsb29weS1wY2FzZSkKICA7OyA9PiAoKDEgNCkgKDMgNikpCiAgKGxvb3B5IChmbGFnIHBj YXNlKQogICAgICAgICAobGlzdCBlbGVtICcoKDEgKDIgMykpICg0ICg1IDYpKSkpCiAgICAgICAg IChjb2xsZWN0IGAoLGEgKCxfICxiKSkgZWxlbSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGEg YikpCgogIDs7ID0+ICgoMSA2KSAoMyA4KSAoWzQgNV0gWzkgMTBdKSkKICAocmVxdWlyZSAnbG9v cHktc2VxKQogIChsb29weSAoZmxhZyBzZXEpCiAgICAgICAgIChsaXN0IGVsZW0gJyhbMSAyIDMg NCA1XSBbNiA3IDggOSAxMF0pKQogICAgICAgICAoY29sbGVjdCBbYSBfIGIgJnJlc3QgY10gZWxl bSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGEgYiBjKSkKIytlbmRfc3JjCgpGb3IgbW9yZSBv biBob3cgPWRhc2g9IGRvZXMgZGVzdHJ1Y3R1cmluZywgc2VlIHRoZWlyIGRvY3VtZW50YXRpb24g b24gdGhlIFtbaHR0cHM6Ly9naXRodWIuY29tL21hZ25hcnMvZGFzaC5lbCMtbGV0LXZhcmxpc3Qt cmVzdC1ib2R5XVstbGV0XV0KZXhwcmVzc2lvbi4KCiogTG9vcCBDb21tYW5kcyBpbiBBcmJpdHJh cnkgQ29kZQoKVGhlIG1hY3JvIH5sb29weS1pdGVyfiBjYW4gYmUgdXNlZCB0byBlbWJlZCBsb29w IGNvbW1hbmRzIGluIGFyYml0cmFyeSBjb2RlLiAgSXQKaXMgc2ltaWxhciBpbiB1c2UgdG8gQ29t bW9uIExpc3AncyBJdGVyYXRlIG1hY3JvLCBidXQgaXQgaXMgbm90IGEgcG9ydCBvZgpJdGVyYXRl IHRvIEVtYWNzIExpc3AuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgKHJlcXVpcmUgJ2xvb3B5 LWl0ZXIpCgogIDs7ID0+ICgoMSAyIDMpICgtMyAtMiAtMSkgKDApKQogIChsb29weS1pdGVyIChh Y2N1bS1vcHQgcG9zaXRpdmVzIG5lZ2F0aXZlcyBvdGhlcikKICAgICAgICAgICAgICAobnVtYmVy aW5nIGkgOmZyb20gLTMgOnRvIDMpCiAgICAgICAgICAgICAgKHBjYXNlIGkKICAgICAgICAgICAg ICAgICgocHJlZCBjbC1wbHVzcCkgIChjb2xsZWN0aW5nIHBvc2l0aXZlcyBpKSkKICAgICAgICAg ICAgICAgICgocHJlZCBjbC1taW51c3ApIChjb2xsZWN0aW5nIG5lZ2F0aXZlcyBpKSkKICAgICAg ICAgICAgICAgIChfICAgICAgICAgICAgICAgIChjb2xsZWN0aW5nIG90aGVyIGkpKSkKICAgICAg ICAgICAgICAoZmluYWxseS1yZXR1cm4gcG9zaXRpdmVzIG5lZ2F0aXZlcyBvdGhlcikpCgogIDs7 ID0+IDYKICAobG9vcHktaXRlciAobGlzdGluZyBlbGVtICcoMSAyIDMpKQogICAgICAgICAgICAg IChmdW5jYWxsICMnKGxhbWJkYSAoeCkgKHN1bW1pbmcgeCkpCiAgICAgICAgICAgICAgICAgICAg ICAgZWxlbSkpCiMrZW5kX3NyYwoKRm9yIG1vcmUgb24gdGhpcywgW1todHRwczovL2dpdGh1Yi5j b20vb2thbXNuL2xvb3B5L2Jsb2IvbWFzdGVyL2RvYy9sb29weS1kb2Mub3JnI3RoZS1sb29weS1p dGVyLW1hY3JvXVtzZWUgdGhlIGRvY3VtZW50YXRpb25dXS4KCiogQWRkaW5nIEN1c3RvbSBDb21t YW5kcwo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogYWRkaW5nLWN1c3RvbS1jb21tYW5kcwo6RU5E OgoKSXQgaXMgZWFzeSB0byBjcmVhdGUgY3VzdG9tIGNvbW1hbmRzIGZvciBMb29weS4gIFRvIHNl ZSBob3csIHNlZSB0aGUgc2VjdGlvbgpbW2h0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkv YmxvYi9tYXN0ZXIvZG9jL2xvb3B5LWRvYy5vcmcjY3VzdG9tLWNvbW1hbmRzXVtDdXN0b20gQ29t bWFuZHNdXSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KCiogQ29tcGFyaW5nIHRvID1jbC1sb29wPQo6 UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogaG93LWRvZXMtaXQtY29tcGFyZS10by1vdGhlci1hcHBy b2FjaGVzCjpFTkQ6CgpTZWUgdGhlIGRvY3VtZW50YXRpb24gcGFnZSBbW2h0dHBzOi8vZ2l0aHVi LmNvbS9va2Ftc24vbG9vcHkvYmxvYi9tYXN0ZXIvZG9jL2xvb3B5LWRvYy5vcmcjY29tcGFyaW5n LXRvLWNsLWxvb3BdW0NvbXBhcmluZyB0byB+Y2wtbG9vcH5dXS4gIFNlZSBhbHNvIHRoZSB3aWtp IHBhZ2UgW1todHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xvb3B5L3dpa2kvc3BlZWQtY29tcGFy aXNvbnNdW1NwZWVkCkNvbXBhcmlzb25zXV0uCgoKKiBSZWFsLVdvcmxkIEV4YW1wbGVzCgpTZWUg dGhlIHdpa2kgcGFnZSBbW2h0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHkvd2lraS9FeGFt cGxlc11bRXhhbXBsZXNdXS4KCiMgTG9jYWwgVmFyaWFibGVzOgojIG9yZy1saW5rLWZpbGUtcGF0 aC10eXBlOiByZWxhdGl2ZQojIG9yZy1hZGFwdC1pbmRlbnRhdGlvbjogbmlsCiMgRW5kOgo= --b1_HrqAhwmgGYAM6kNMg5ZfvMBPawR4e9W5dnzVVFLZAU Content-Type: application/vnd.lotus-organizer; name=loopy-doc.org Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=loopy-doc.org IyAtKi0gbGV4aWNhbC1iaW5kaW5nOiB0OyAtKi0KCiMrdGl0bGU6IExvb3B5OiBBIExvb3Bpbmcg YW5kIEl0ZXJhdGlvbiBNYWNybwojK2F1dGhvcjogRWFybCBIeWF0dAojK2V4cG9ydF9maWxlX25h bWU6IGxvb3B5CgojIE1ha2Ugc3VyZSB0byBleHBvcnQgYWxsIGhlYWRpbmdzIGFzIHN1Y2guICBP dGhlcndpc2UsIHNvbWUgbGlua3MgdG8KIyBzdWItaGVhZGluZ3Mgd29u4oCZdCB3b3JrLgojK29w dGlvbnM6IEg6NgojIFNvbWUgcGFyc2VycyByZXF1aXJlIHRoaXMgb3B0aW9uIHRvIGV4cG9ydCBm b290bm90ZXMuCiMrb3B0aW9uczogZjp0CgojIEV4YW1wbGUgc2V0dGluZ3MKIytQUk9QRVJUWTog aGVhZGVyLWFyZ3M6ZW1hY3MtbGlzcCA6bGV4aWNhbCB0CgojIFRleGluZm8gc2V0dGluZ3MuCiMr VEVYSU5GT19GSUxFTkFNRTogbG9vcHkuaW5mbwojK1RFWElORk9fRElSX0NBVEVHT1JZOiBFbWFj cwojK1RFWElORk9fRElSX1RJVExFOiBMb29weTogKGxvb3B5KQojK1RFWElORk9fRElSX0RFU0M6 IEEgYmV0dGVyIGxvb3BpbmcgYW5kIGl0ZXJhdGlvbiBtYWNyby4KCiMrTUFDUk86IGRmbiBAQHRl eGluZm86QGRmbnskMX1AQAojK01BQ1JPOiBrYmQgQEB0ZXhpbmZvOkBrYmR7JDF9QEAKIytNQUNS TzogZmlsZSBAQHRleGluZm86QGZpbGV7JDF9QEAKIytNQUNSTzogdmFyIEBAdGV4aW5mbzpAdmFy eyQxfUBACgojK2JlZ2luX2V4cG9ydCBodG1sCk5PVEU6IFRoaXMgZmlsZSBpcyBtZWFudCBmb3Ig dmlld2luZyBpbiBPcmcgbW9kZSBvciBmb3IgZXhwb3J0aW5nIHRvIFRleGluZm8uCkZlYXR1cmVz IG1pZ2h0IG5vdCB3b3JrIGluIG90aGVyIGZvcm1hdHMgKGZvciBleGFtcGxlLCBJbmZvIGxpbmtz IGluIEhUTUwpLgojK2VuZF9leHBvcnQKCn5sb29weX4gaXMgYSBtYWNybyBtZWFudCBmb3IgaXRl cmF0aW5nIGFuZCBsb29waW5nLiAgSXQgaXMgc2ltaWxhciBpbiB1c2FnZSB0bwp+Y2wtbG9vcH4g KFtbaW5mbzpjbCNMb29wIEZhY2lsaXR5XV0pIGJ1dCB1c2VzIHBhcmVudGhlc2l6ZWQgZXhwcmVz c2lvbnMgcmF0aGVyIHRoYW4Ka2V5d29yZCBjbGF1c2VzLgoKRm9yIG1vc3QgY2FzZXMsIH5sb29w eX4gaXMgYSBmZWF0dXJlZnVsIHJlcGxhY2VtZW50IGZvciB+Y2wtbG9vcH4gYW5kCmNvbXBsZW1l bnRhcnkgdG8gRW1hY3MncyBidWlsdC1pbiBsb29waW5nIGFuZCBtYXBwaW5nIGZlYXR1cmVzIChz dWNoIGFzIHRoZQpsaWJyYXJpZXMgPXNlcT0gKFtbaW5mbzplbGlzcCNTZXF1ZW5jZSBGdW5jdGlv bnNdXSkgYW5kID1jbC1saWI9IChbW2luZm86Y2xdXSkpLgoKCi0tLS0tCgojIFRoaXMgYXV0by1n ZW5lcmF0ZWQgYnkgdG9jLW9yZy4KKiBUYWJsZSBvZiBDb250ZW50cyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpUT0M6bm9leHBvcnQ6Ci0gW1sjaW50cm9k dWN0aW9uXVtJbnRyb2R1Y3Rpb25dXQotIFtbI2Jhc2ljLWNvbmNlcHRzXVtCYXNpYyBDb25jZXB0 c11dCi0gW1sjc3BlY2lhbC1tYWNyby1hcmd1bWVudHNdW1NwZWNpYWwgTWFjcm8gQXJndW1lbnRz XV0KLSBbWyNsb29wLWNvbW1hbmRzXVtMb29wIENvbW1hbmRzXV0KICAtIFtbI2Jhc2ljLWRlc3Ry dWN0dXJpbmddW0Jhc2ljIERlc3RydWN0dXJpbmddXQogIC0gW1sjZ2VuZXJpYy1ldmFsdWF0aW9u XVtHZW5lcmljIEV2YWx1YXRpb25dXQogIC0gW1sjaXRlcmF0aW9uXVtJdGVyYXRpb25dXQogICAg LSBbWyNnZW5lcmljLWl0ZXJhdGlvbl1bR2VuZXJpYyBJdGVyYXRpb25dXQogICAgLSBbWyNudW1l cmljLWl0ZXJhdGlvbl1bTnVtZXJpYyBJdGVyYXRpb25dXQogICAgLSBbWyNzZXF1ZW5jZS1pdGVy YXRpb25dW1NlcXVlbmNlIEl0ZXJhdGlvbl1dCiAgICAtIFtbI3NlcXVlbmNlLWluZGV4LWl0ZXJh dGlvbl1bU2VxdWVuY2UgSW5kZXggSXRlcmF0aW9uXV0KICAgIC0gW1sjc2VxdWVuY2UtcmVmZXJl bmNlLWl0ZXJhdGlvbl1bU2VxdWVuY2UgUmVmZXJlbmNlIEl0ZXJhdGlvbl1dCiAgLSBbWyNhY2N1 bXVsYXRpb25dW0FjY3VtdWxhdGlvbl1dCiAgICAtIFtbI2NvbW1vbi1wcm9wZXJ0aWVzLW9mLWFj Y3VtdWxhdGlvbi1jb21tYW5kc11bQ29tbW9uIFByb3BlcnRpZXMgb2YgQWNjdW11bGF0aW9uIENv bW1hbmRzXV0KICAgIC0gW1sjZ2VuZXJpYy1hY2N1bXVsYXRpb25dW0dlbmVyaWMgQWNjdW11bGF0 aW9uXV0KICAgIC0gW1sjbnVtZXJpYy1hY2N1bXVsYXRpb25dW051bWVyaWMgQWNjdW11bGF0aW9u XV0KICAgIC0gW1sjc2VxdWVuY2UtYWNjdW11bGF0aW9uXVtTZXF1ZW5jZSBBY2N1bXVsYXRpb25d XQogICAgLSBbWyNvdGhlci1hY2N1bXVsYXRpb24tY29tbWFuZHNdW090aGVyIEFjY3VtdWxhdGlv biBDb21tYW5kc11dCiAgICAtICBbWyNvcHRpbWl6aW5nLWFjY3VtdWxhdGlvbnNdW09wdGltaXpp bmcgQWNjdW11bGF0aW9uc11dCiAgLSBbWyNjaGVja2luZy1jb25kaXRpb25zXVtDaGVja2luZyBD b25kaXRpb25zXV0KICAtIFtbI2NvbnRyb2wtZmxvd11bQ29udHJvbCBGbG93XV0KICAgIC0gW1sj Y29uZGl0aW9uYWxzXVtDb25kaXRpb25hbHNdXQogICAgLSBbWyNza2lwcGluZy1jeWNsZXNdW1Nr aXBwaW5nIEN5Y2xlc11dCiAgICAtIFtbI2Vhcmx5LWV4aXRdW0Vhcmx5IEV4aXRdXQogIC0gW1sj c3ViLWxvb3BzXVtTdWItTG9vcHNdXQotIFtbI2Rlc3RydWN0dXJpbmctbWFjcm9zXVtEZXN0cnVj dHVyaW5nIE1hY3Jvc11dCi0gW1sjdGhlLWxvb3B5LWl0ZXItbWFjcm9dW1RoZSB+bG9vcHktaXRl cn4gTWFjcm9dXQogIC0gW1sjZGVmYXVsdC1iYXJlLW5hbWVzLWluLWxvb3B5LWl0ZXJdW0RlZmF1 bHQgQmFyZSBOYW1lcyBpbiB+bG9vcHktaXRlcn5dXQotIFtbI3VzaW5nLWZsYWdzXVtVc2luZyBG bGFnc11dCi0gW1sjY3VzdG9tLWFsaWFzZXNdW0N1c3RvbSBBbGlhc2VzXV0KLSBbWyNjdXN0b20t Y29tbWFuZHNdW0N1c3RvbSBDb21tYW5kc11dCiAgLSBbWyNiYWNrZ3JvdW5kLWluZm9dW0JhY2tn cm91bmQgSW5mb11dCiAgLSBbWyNoZWxsby13b3JsZF1bSGVsbG8gV29ybGRdXQogIC0gW1sjYW4t YWx3YXlzLWNvbW1hbmRdW0FuIH5hbHdheXN+IENvbW1hbmRdXQogIC0gW1sjY3VzdG9tLWNvbW1h bmRzLWluLXRoZS1sb29weS1pdGVyLW1hY3JvXVtDdXN0b20gY29tbWFuZHMgaW4gdGhlIH5sb29w eS1pdGVyfiBtYWNyb11dCiAgLSBbWyNmaW5kaW5nLW1vcmUtZXhhbXBsZXNdW0ZpbmRpbmcgTW9y ZSBFeGFtcGxlc11dCi0gW1sjY29tcGFyaW5nLXRvLWNsLWxvb3BdW0NvbXBhcmluZyB0byB+Y2wt bG9vcH5dXQotIFtbI3RyYW5zbGF0aW5nLXRvLWFuZC1mcm9tLWNsLWxvb3BdW1RyYW5zbGF0aW5n IHRvIGFuZCBmcm9tID1jbC1sb29wPV1dCiAgLSBbWyNmb3ItY2xhdXNlc11bRm9yIENsYXVzZXNd XQogIC0gW1sjaXRlcmF0aW9uLWNsYXVzZXNdW0l0ZXJhdGlvbiBDbGF1c2VzXV0KICAtIFtbI2Fj Y3VtdWxhdGlvbi1jbGF1c2VzXVtBY2N1bXVsYXRpb24gQ2xhdXNlc11dCiAgLSBbWyNvdGhlci1j bGF1c2VzXVtPdGhlciBDbGF1c2VzXV0KLSBbWyNtYWNyby1hcmd1bWVudC1hbmQtbG9vcC1jb21t YW5kLWluZGV4XVtNYWNybyBBcmd1bWVudCBhbmQgTG9vcCBDb21tYW5kIEluZGV4XV0KLSBbWyN2 YXJpYWJsZS1pbmRleF1bVmFyaWFibGUgSW5kZXhdXQotIFtbI2NvbmNlcHQtaW5kZXhdW0NvbmNl cHQgSW5kZXhdXQotIFtbI2Zvb3Rub3Rlc11bRm9vdG5vdGVzXV0KCiogSW50cm9kdWN0aW9uCjpQ Uk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEEgc2hvcnQgb3ZlcnZpZXcgb2YgZmVhdHVyZXMuCjpF TkQ6CgpMb29weSBpcyBhIGxpYnJhcnkgZm9yIGxvb3BpbmcgYW5kIGl0ZXJhdGlvbiwgd2l0aCBz dXBwbGVtZW50YWwgZmVhdHVyZXMgZm9yCmRlc3RydWN0dXJpbmcuICBVcGZyb250LCB0aGUgZmVh dHVyZXMgcHJvdmlkZWQgYXJlIHN1bW1hcml6ZWQgYmVsb3cuICBUaGV5IGFyZQpkZXNjcmliZWQg dGhvcm91Z2hseSBsYXRlciBpbiB0aGlzIGRvY3VtZW50LgoKLSB+bG9vcHl+IDo6IEEgbWFjcm8g c2ltaWxhciB0byB+Y2wtbG9vcH4uICBVbmxpa2UgfmNsLWxvb3B+LCB+bG9vcHl+IHVzZXMKICBw YXJlbnRoZXRpY2FsIGZvcm1zIGluc3RlYWQgb2Yga2V5d29yZCAiY2xhdXNlcyIuCgogICMrYmVn aW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7IEEgc2ltcGxlIHVzYWdlIG9mIGBjbC1sb29wJzoKICAg IChjbC1sb29wIGZvciBpIGZyb20gMSB0byAxMAogICAgICAgICAgICAgaWYgKGNsLWV2ZW5wIGkp IGNvbGxlY3QgaSBpbnRvIGV2ZW5zCiAgICAgICAgICAgICBlbHNlIGNvbGxlY3QgaSBpbnRvIG9k ZHMKICAgICAgICAgICAgIGVuZCA7IFRoaXMgYGVuZCcga2V5d29yZCBpcyBvcHRpb25hbCBoZXJl LgogICAgICAgICAgICAgZmluYWxseSByZXR1cm4gKGxpc3Qgb2RkcyBldmVucykpCgogICAgOzsg SG93IGl0IGNvdWxkIGJlIGRvbmUgdXNpbmcgYGxvb3B5JzoKICAgIChsb29weSAobnVtYmVycyBp IDpmcm9tIDEgOnRvIDEwKQogICAgICAgICAgIChpZiAoY2wtZXZlbnAgaSkKICAgICAgICAgICAg ICAgKGNvbGxlY3QgZXZlbnMgaSkKICAgICAgICAgICAgIChjb2xsZWN0IG9kZHMgaSkpCiAgICAg ICAgICAgKGZpbmFsbHktcmV0dXJuIG9kZHMgZXZlbnMpKQogICMrZW5kX3NyYwoKLSB+bG9vcHkt aXRlcn4gOjogQSBtYWNybyBzaW1pbGFyIHRvIENvbW1vbiBMaXNwJ3MgSXRlcmF0ZSBtYWNybyAo W1sjbG9vcHktaXRlcl1dKS4KICBVbmxpa2UgQ29tbW9uIExpc3AncyB+bG9vcH4sIHRoZSB+aXRl cmF0ZX4gbWFjcm8gYWxsb3dzIHRoZSBlbWJlZGRpbmcgb2YgaXRzCiAgbG9vcGluZyBjb25zdHJ1 Y3RzIGluc2lkZSBvZiBhcmJpdHJhcnkgY29kZS4gIFRvIGJlIGNsZWFyLCB+bG9vcHktaXRlcn4g aXMKICBfbm90XyBhIHBvcnQgb2Ygfml0ZXJhdGV+IHRvIEVtYWNzIExpc3AuCgogICMrYmVnaW5f c3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICgoMSAyIDMpICgtMyAtMiAtMSkgKDApKQogICAgKGxv b3B5LWl0ZXIgKG51bWJlcmluZyBpIC0zIDMpCiAgICAgICAgICAgICAgICAocGNhc2UgaQogICAg ICAgICAgICAgICAgICAoKHByZWQgY2wtcGx1c3ApICAoY29sbGVjdGluZyBwb3NpdGl2ZXMgaSkp CiAgICAgICAgICAgICAgICAgICgocHJlZCBjbC1taW51c3ApIChjb2xsZWN0aW5nIG5lZ2F0aXZl cyBpKSkKICAgICAgICAgICAgICAgICAgKF8gICAgICAgICAgICAgICAgKGNvbGxlY3Rpbmcgb3Ro ZXIgaSkpKQogICAgICAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIHBvc2l0aXZlcyBuZWdhdGl2 ZXMgb3RoZXIpKQogICMrZW5kX3NyYwoKLSB+bG9vcHktbGV0Kn4sIH5sb29weS1zZXRxfiwgfmxv b3B5LWxhbWJkYX4sIGFuZCB+bG9vcHktcmVmfiA6OiBEZXN0cnVjdHVyaW5nCiAgbWFjcm9zIHRo YXQgY2FuIGJlIHVzZWQgb3V0c2lkZSBvZiB+bG9vcHl+IGFuZCB+bG9vcHktaXRlcn4KICAoW1sj YmFzaWMtZGVzdHJ1Y3R1cmluZ11dKS4gIEZvciBjb252ZW5pZW5jZSwgTG9vcHkgcHJvdmlkZXMg aXRzIG93biBmb3JtIG9mCiAgZGVzdHJ1Y3R1cmluZywgd2hpY2ggaXMgc2ltaWxhciB0bywgdGhv dWdoIG1vcmUgZmVhdHVyZWZ1bCB0aGFuLCB0aGF0IHByb3ZpZGVkCiAgYnkgPWNsLWxpYj0uCgog ICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICgxIDIgMyAoOmsxIDQpIDQpCiAgICAo bG9vcHktbGV0KiAoKChhIGIgYyAmcmVzdCBkICZrZXkgazEpICcoMSAyIDMgOmsxIDQpKSkKICAg ICAgKGxpc3QgYSBiIGMgZCBrMSkpCgogICAgOzsgPT4gKCg3IDIgOCkgWzkgMiAxMF0pCiAgICAo bGV0ICgobXktbGlzdCAobGlzdCAxIDIgMykpCiAgICAgICAgICAobXktdmVjdG9yICAodmVjdG9y IDEgMiAzKSkpCiAgICAgIChsb29weS1yZWYgKCgoYSBfIGMpIG15LWxpc3QpCiAgICAgICAgICAg ICAgICAgIChbZCBfIGVdIG15LXZlY3RvcikpCiAgICAgICAgKHNldGYgYSA3CiAgICAgICAgICAg ICAgYyA4CiAgICAgICAgICAgICAgZCA5CiAgICAgICAgICAgICAgZSAxMCkKICAgICAgICAobGlz dCBteS1saXN0IG15LXZlY3RvcikpKQogICMrZW5kX3NyYwoKClNvbWUgb3RoZXIgdGhpbmdzIHRv IG5vdGUgYXJlOgoKLSB+bG9vcHl+IChhbmQgc28gfmxvb3B5LWl0ZXJ+KSBzdXBwb3J0cyBkZXN0 cnVjdHVyaW5nIGZvciBib3RoIGl0ZXJhdGlvbiBhbmQKICBhY2N1bXVsYXRpb24gY29tbWFuZHMu CgogICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7IFN1bW1pbmcgdGhlIG50aCBlbGVtZW50 cyBvZiBhcnJheXM6CiAgICA7OyA9PiAoOCAxMCAxMiAxNCAxNiAxOCkKICAgIChsb29weSAobGlz dCAobGlzdC1lbGVtMSBsaXN0LWVsZW0yKQogICAgICAgICAgICAgICAgICcoKFsxIDIgM10gWzQg NSA2XSkKICAgICAgICAgICAgICAgICAgIChbNyA4IDldIFsxMCAxMSAxMl0pKSkKICAgICAgICAg ICAoc3VtIFtzdW0xIHN1bTIgc3VtM10gbGlzdC1lbGVtMSkKICAgICAgICAgICAoc3VtIFtzdW00 IHN1bTUgc3VtNl0gbGlzdC1lbGVtMikKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gc3VtMSBz dW0yIHN1bTMgc3VtNCBzdW01IHN1bTYpKQoKICAgIDs7IFNlcGFyYXRlIHRoZSBlbGVtZW50cyBv ZiBzdWItbGlzdDoKICAgIDs7ID0+ICgoMSAzKSAoMiA0KSkKICAgIChsb29weSAobGlzdCBpICco KDEgMikgKDMgNCkpKQogICAgICAgICAgIChjb2xsZWN0IChlbGVtMSBlbGVtMikgaSkKICAgICAg ICAgICAoZmluYWxseS1yZXR1cm4gZWxlbTEgZWxlbTIpKQogICMrZW5kX3NyYwoKLSBUaGUgbG9v cGluZyBtYWNyb3MgYXJlIGNvbmZpZ3VyYWJsZSBhbmQgZXh0ZW5zaWJsZS4gIE9uZSBjYW4gY3Jl YXRlIG9uZSdzIG93bgogIGxvb3AgY29tbWFuZHMgYW5kIGNvbW1hbmQgYWxpYXNlcy4gICJGbGFn cyIgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZQogIGxvb3BpbmcgbWFjcm9zJyBiZWhhdmlv ciwgc3VjaCBhcyBieSB1c2luZyBhbiBhbHRlcm5hdGl2ZSBkZXN0cnVjdHVyaW5nIHN5c3RlbQog IGxpa2UgPXBjYXNlPSBvciB0aGUgRGFzaCBsaWJyYXJ5LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1s aXNwCiAgICA7OyBVc2UgYHBjYXNlJyB0byBkZXN0cnVjdHVyZSBhcnJheSBlbGVtZW50czoKICAg IDs7ID0+ICgoMSAyIDMgNCkgKDEwIDEyIDE0KSAoMTEgMTMgMTUpKQogICAgKGxvb3B5IChmbGFn IHBjYXNlKQogICAgICAgICAgIChhcnJheSAob3IgYCgsY2FyIC4gLGNkcikgZGlnaXQpCiAgICAg ICAgICAgICAgICAgIFsxICgxMCAuIDExKSAyICgxMiAuIDEzKSAzIDQgKDE0IC4gMTUpXSkKICAg ICAgICAgICAoaWYgZGlnaXQKICAgICAgICAgICAgICAgKGNvbGxlY3QgZGlnaXRzIGRpZ2l0KQog ICAgICAgICAgICAgKGNvbGxlY3QgY2FycyBjYXIpCiAgICAgICAgICAgICAoY29sbGVjdCBjZHJz IGNkcikpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGRpZ2l0cyBjYXJzIGNkcnMpKQogICMr ZW5kX3NyYwoKLSBDb21wYXJlZCB0byB+Y2wtbG9vcH4sIG1vcmUgY29uc3RydWN0cyBhcmUgcHJv dmlkZWQgZm9yIGhvdyBsb29wcyBhcmUKICBjb21wbGV0ZWQgYW5kIGhvdyB2YWx1ZXMgYXJlIHJl dHVybmVkLiAgRm9yIGV4YW1wbGUsIHRoZSA9bGVhdmU9IGNvbW1hbmQgd2lsbAogIGV4aXQgdGhl IGxvb3Agd2l0aG91dCBjaGFuZ2luZyB3aGF0IHdvdWxkIGJlIHJldHVybmVkLiAgVGhpcyBpcyBh IG1vcmUgZ2VuZXJpYwogIGZvcm0gb2YgdGhlIGNvbW1hbmRzID13aGlsZT0gYW5kID11bnRpbD0s IHRob3VnaCB0aG9zZSBhcmUgYWxzbyBwcm92aWRlZC4KICA9YWZ0ZXItZG89IChhLmsuYS4gPWVs c2UtZG89KSBpcyBhIGNvbnN0cnVjdCB0aGF0IHJ1bnMgTGlzcCBjb2RlIG9ubHkgd2hlbiB0aGUK ICBsb29wIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIHNpbWlsYXIgdG8gUHl0aG9uJ3MgfmVsc2V+ IHN0YXRlbWVudCBhZnRlciB+Zm9yfgogIGFuZCB+d2hpbGV+IGxvb3BzLgoKICAjK2JlZ2luX3Ny YyBlbWFjcy1saXNwCiAgICA7OyA9PiAoMSAzIDUpCiAgICAobG9vcHkgKG51bWJlcnMgaSA6ZnJv bSAxIDp0byAxMCkKICAgICAgICAgICAoY29uZCAoKGNsLWV2ZW5wIGkpIChza2lwKSkKICAgICAg ICAgICAgICAgICAoKD4gaSA1KSAgICAgIChsZWF2ZSkpKQogICAgICAgICAgIChjb2xsZWN0IGkp KQoKICAgIDs7ID0+ICh0IG5pbCkKICAgIChsb29weSAod2l0aCAoYWx3YXlzLXJ1bikKICAgICAg ICAgICAgICAgICAocnVuLXdoZW4tY29tcGxldGUpKQogICAgICAgICAgIChudW1iZXJzIGkgOmZy b20gMSA6dG8gMTApCiAgICAgICAgICAgKHdoaWxlICg8IGkgNCkpCiAgICAgICAgICAgKGFmdGVy LWRvICAgKHNldHEgcnVuLXdoZW4tY29tcGxldGUgdCkpCiAgICAgICAgICAgKGZpbmFsbHktZG8g KHNldHEgYWx3YXlzLXJ1biB0KSkKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gYWx3YXlzLXJ1 biBydW4td2hlbi1jb21wbGV0ZSkpCiAgIytlbmRfc3JjCgotIE9uZSBjYW4gZGVjbGFyZSB3aGlj aCBhY2N1bXVsYXRpb25zIHZhcmlhYmxlcyBzaG91bGQgYmUgb3B0aW1pemVkIChhbmQgc28KICB0 cmVhdGVkIGFzIHVzZXItaW5hY2Nlc3NpYmxlIGR1cmluZyB0aGUgbG9vcCkuICBUaGlzIGNhbiBt YWtlIGFjY3VtdWxhdGlvbgogIGludG8gbXVsdGlwbGUgbmFtZWQgdmFyaWFibGVzIG11Y2ggZmFz dGVyLiAgQXMgbmVlZGVkLCBjYW4gbWFrZSBMb29weSBvcHRpbWl6ZQogIGZvciBhdC1zdGFydCBh Y2N1bXVsYXRpb25zIG9yIGF0LWVuZCBhY2N1bXVsYXRpb25zLgoKICAjK2JlZ2luX3NyYyBlbWFj cy1saXNwCiAgICA7OyBFeHBhbmRzIGludG8gdGhlIGVmZmljaWVudCBgcHVzaCctYG5yZXZlcnNl JyBpZGlvbSwgbm90CiAgICA7OyB0aGUgYG5vbmMnLWBsaXN0JyBpZGlvbSB0aGF0IHdvdWxkIGJl IHVzZWQgYnkgYGNsLWxvb3AnLgogICAgOzsgPT4gKCgxIDMpICgyIDQpKQogICAgKGxvb3B5IChh Y2N1bS1vcHQgY2FycyBjZHJzKQogICAgICAgICAgIChhcnJheSBlbGVtIFsoMSAuIDIpICgzIC4g NCldKQogICAgICAgICAgIChjb2xsZWN0IChjYXJzIC4gY2RycykgZWxlbSkKICAgICAgICAgICAo ZmluYWxseS1yZXR1cm4gY2FycyBjZHJzKSkKCiAgICA7OyBQcmlvcml0aXplcyBjb2xsZWN0aW5n IGF0IHRoZSBzdGFydCBvZiBgbXktdmFyJy4KICAgIDs7ID0+ICg1IDMgMSA0IDYpCiAgICAobG9v cHkgKGFjY3VtLW9wdCAobXktdmFyIHN0YXJ0KSkKICAgICAgICAgICAoYXJyYXkgKGNhciAuIGNk cikgWygxIC4gMikgKDMgLiA0KSAoNSAuIDYpXSkKICAgICAgICAgICAoY29sbGVjdCBteS12YXIg Y2FyIDphdCBzdGFydCkKICAgICAgICAgICAod2hlbiAoPiBjZHIgMikKICAgICAgICAgICAgIChj b2xsZWN0IG15LXZhciBjZHIgOmF0IGVuZCkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIG15 LXZhcikpCiAgIytlbmRfc3JjCgoKQWxsIHRoYXQgYmVpbmcgc2FpZCwgTG9vcHkgaXMgbm90IHll dCBmZWF0dXJlIGNvbXBsZXRlLiAgUGxlYXNlIHJlcXVlc3QgZmVhdHVyZXMKb3IgcmVwb3J0IHBy b2JsZW1zIGluIHRoaXMgcHJvamVjdOKAmXMgW1todHRwczovL2dpdGh1Yi5jb20vb2thbXNuL2xv b3B5L2lzc3Vlc11baXNzdWVzIHRyYWNrZXJdXS4KCiogQmFzaWMgQ29uY2VwdHMKOlBST1BFUlRJ RVM6CjpDVVNUT01fSUQ6IGJhc2ljLWNvbmNlcHRzCjpERVNDUklQVElPTjogQmFzaWMgaW5mb3Jt YXRpb24gYWJvdXQgYGxvb3B5JyBhbmQgaXRzIGxvb3BzLgo6RU5EOgoKRXhjZXB0IGZvciBhbiBv cHRpb25hbCBsb29wIG5hbWUsIGFsbCBhcmd1bWVudHMgb2YgdGhlIH5sb29weX4gbWFjcm8gYXJl CnBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbnMuICBUaGVzZSBleHByZXNzaW9ucyBjYW4sIGZvciBl eGFtcGxlLCBhc3NpZ24gdmFyaWFibGVzCmxvY2FsIHRvIHRoZSBsb29wLCBhZGQgY29kZSB0aGF0 IHJ1bnMgYmVmb3JlL2FmdGVyIHRoZSBsb29wLCBhbmQvb3Igc2V0IHRoZQp1bHRpbWF0ZSByZXR1 cm4gdmFsdWUgb2YgdGhlIG1hY3JvLgoKRm9yIGNvbnZlbmllbmNlIGFuZCBjbGFyaXR5LCBleHBy ZXNzaW9ucyB0aGF0IGdlbmVyYXRlIGNvZGUgaW4gdGhlIGxvb3AgYm9keSBhcmUKY2FsbGVkICJs b29wIGNvbW1hbmRzIiAoW1sjbG9vcC1jb21tYW5kc11bTG9vcCBDb21tYW5kc11dKS4gIEV4cHJl c3Npb25zIHRoYXQgZ2VuZXJhdGUgY29kZSBhcm91bmQKdGhlIGxvb3AgYXJlIGNhbGxlZCAic3Bl Y2lhbCBtYWNybyBhcmd1bWVudHMiIG9yIGp1c3QgIm1hY3JvIGFyZ3VtZW50cyIgYXMKb3Bwb3Nl ZCB0byAibG9vcCBjb21tYW5kcyIgKFtbI21hY3JvLWFyZ3VtZW50c11bU3BlY2lhbCBNYWNybyBB cmd1bWVudHNdXSkuCgoiTG9vcCBjb21tYW5kcyIgYXJlIHRoZSBtYWluIGJ1aWxkaW5nIGJsb2Nr cyBvZiB0aGUgfmxvb3B5fiBtYWNybywgc3VjaCBhcyB0aGUKY29tbWFuZCA9bGlzdD0gaW4gdGhl IGV4cHJlc3Npb24gPShsaXN0IGkgJygxIDIgMykpPS4gIEEgY29tbWFuZCBpbnNlcnRzIGNvZGUK aW50byB0aGUgbG9vcCBib2R5LCBidXQgY2FuIGFsc28gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVw IGxpa2UgaW5pdGlhbGl6aW5nCnZhcmlhYmxlcy4gIE1hbnkgY29tbWFuZHMgc2V0IGEgY29uZGl0 aW9uIGZvciBlbmRpbmcgdGhlIGxvb3AuICBJbiB0aGUgY2FzZSBvZgo9bGlzdD0gaW4gdGhlIGFi b3ZlIGV4cHJlc3Npb24sIHRoZSBjb21tYW5kIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnRz IG9mIGEKbGlzdCwgYmluZGluZyB0aGUgdmFyaWFibGUgfml+IHRvIGVhY2ggZWxlbWVudC4gIEFm dGVyIGl0ZXJhdGluZyB0aHJvdWdoIGFsbAplbGVtZW50cywgdGhlIGxvb3AgaXMgZm9yY2VkIHRv IGVuZC4KCkluIGdlbmVyYWwsIGEgbG9vcCBlbmRzIHdoZW4gYW55IGxvb3BpbmcgY29uZGl0aW9u IHJlcXVpcmVkIGJ5IGEgbG9vcCBjb21tYW5kCmV2YWx1YXRlcyB0byB+bmlsfi4gIElmIG5vIGNv bmRpdGlvbnMgYXJlIG5lZWRlZCwgdGhlbiB0aGUgbG9vcCBydW5zIGluZmluaXRlbHkKdW50aWwg YSBlYXJseS1leGl0IGNvbW1hbmQgaXMgcmVhY2hlZCAoW1sjZXhpdGluZy10aGUtbG9vcC1lYXJs eV1bRXhpdGluZyB0aGUgTG9vcCBFYXJseV1dKS4KClRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZSBv ZiB0aGUgbG9vcCBpcyB+bmlsfi4gIE90aGVyIHJldHVybiB2YWx1ZXMgbXVzdCBiZQpzdGF0ZWQg ZXhwbGljaXRseSwgYXMgaW4gb25lIG9mIHRoZSBlYXJseS1leGl0IGNvbW1hbmRzIG9yIHBhcnQg b2YgdGhlCj1maW5hbGx5LXJldHVybj0gbWFjcm8gYXJndW1lbnQsIG9yIGNvbWUgZnJvbSBhY2N1 bXVsYXRpbmcgbG9vcCBjb21tYW5kcyB1c2luZwphbiBpbXBsaWVkIGFjY3VtdWxhdGlvbiB2YXJp YWJsZSAoW1sjYWNjdW11bGF0aW9uLWNvbW1hbmRzXVtBY2N1bXVsYXRpb24gQ29tbWFuZHNdXSku CgpUaGUgfmxvb3B5fiBtYWNybyBpcyBjb25maWd1cmFibGUuICBPbmUgY2FuIGFkZCBjdXN0b20g Y29tbWFuZHMgKFtbI2FkZGluZy1jdXN0b20tY29tbWFuZHNdW0N1c3RvbQpDb21tYW5kc11dKSwg YWRkIGN1c3RvbSBjb21tYW5kIGFsaWFzZXMgKFtbI2N1c3RvbS1hbGlhc2VzXVtDdXN0b20gQWxp YXNlc11dKSwgYW5kIHNwZWNpZnkgbWFjcm8Kb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIGxvb3Ag KFtbI2ZsYWdzXVtVc2luZyBGbGFnc11dKS4gIEVhY2ggb2YgdGhlc2UgZmVhdHVyZXMgaXMKZXhw bGFpbmVkIGluIGRldGFpbCBsYXRlciBpbiB0aGlzIGRvY3VtZW50LgoKKiBTcGVjaWFsIE1hY3Jv IEFyZ3VtZW50cwo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogbWFjcm8tYXJndW1lbnRzCjpERVND UklQVElPTjogQ3JlYXRpbmcgdGhlIGVudmlyb25tZW50IG9mIHRoZSBsb29wLgo6RU5EOgoKIytj aW5kZXg6IHNwZWNpYWwgbWFjcm8gYXJndW1lbnQKVGhlcmUgYXJlIG9ubHkgYSBmZXcgc3BlY2lh bCBtYWNybyBhcmd1bWVudHMuICBJZiBhIG1hY3JvIGFyZ3VtZW50IGRvZXMgbm90Cm1hdGNoIG9u ZSBvZiB0aGVzZSBzcGVjaWFsIGZldywgfmxvb3B5fiB3aWxsIGF0dGVtcHQgdG8gaW50ZXJwcmV0 IGl0IGFzIGEgbG9vcApjb21tYW5kLCBhbmQgd2lsbCBzaWduYWwgYW4gZXJyb3IgaWYgdGhhdCBm YWlscy4KClRoZXNlIHNwZWNpYWwgbWFjcm8gYXJndW1lbnRzIGFyZSBhbHdheXMgcHJvY2Vzc2Vk IGJlZm9yZSBsb29wIGNvbW1hbmRzLApyZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgYXJn dW1lbnRzIHBhc3NlZCB0byB+bG9vcHl+LgoKIytmaW5kZXg6IG5hbWVkCi0gPW5hbWVkPSBvciBq dXN0IGEgc3ltYm9sIDo6IE5hbWUgdGhlIGxvb3AuICBUaGlzIGFsc28gbmFtZXMgdGhlIH5jbC1i bG9ja34KICB3aGljaCBjb250YWlucyB0aGUgbG9vcC4gIFRoaXMgY2FuIGJlIG9mIHRoZSBmb3Jt ID0obmFtZWQgTkFNRSk9IG9yIGp1c3QKICA9TkFNRT0uCgogICMrYmVnaW5fc3JjIGVtYWNzLWxp c3AKICAgIDs7ID0+IDMKICAgIChsb29weSBvdXRlcgogICAgICAgICAgIChhcnJheSBpIFsoMSAy KSAoMyA0KSAoNSA2KV0pCiAgICAgICAgICAgKGxvb3B5IChsaXN0IGogaSkKICAgICAgICAgICAg ICAgICAgKHdoZW4gKD4gaiAyKQogICAgICAgICAgICAgICAgICAgIChyZXR1cm4tZnJvbSBvdXRl ciBqKSkpKQoKICAgIDs7ID0+IDMKICAgIChsb29weSAobmFtZWQgb3V0ZXIpCiAgICAgICAgICAg KGFycmF5IGkgWygxIDIpICgzIDQpICg1IDYpXSkKICAgICAgICAgICAobG9vcHkgKGxpc3QgaiBp KQogICAgICAgICAgICAgICAgICAod2hlbiAoPiBqIDIpCiAgICAgICAgICAgICAgICAgICAgKHJl dHVybi1mcm9tIG91dGVyIGopKSkpCiAgIytlbmRfc3JjCgojK2ZpbmRleDogd2l0aAojK2ZpbmRl eDogbGV0KgojK2ZpbmRleDogaW5pdAotID13aXRoPSwgPWxldCo9LCA9aW5pdD0gOjogRGVjbGFy ZSB2YXJpYWJsZXMgYmVmb3JlIHRoZSBsb29wLCBpbiBvcmRlci4gIFRoaXMKICBjYW4gYWxzbyBi ZSB1c2VkIHRvIGluaXRpYWxpemUgdmFyaWFibGVzIHJlZmVyZW5jZWQgYnkgbG9vcCBjb21tYW5k cy4gID13aXRoPQogIGNhbiB1c2UgZGVzdHJ1Y3R1cmluZyAoW1sjYmFzaWMtZGVzdHJ1Y3R1cmlu Z11dKS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDQgNSA2KQogICAgKGxv b3B5CiAgICAgKHdpdGggKGEgMSkgICAgICAgICAgOyBTZXQgYGEnIHRvIDEuCiAgICAgICAgICAg KGIgKDErIGEpKSkgICAgOyBTZXQgYGInIHRvIDErMT0yLgogICAgIChsaXN0IGkgJygxIDIgMykp ICAgIDsgQmluZCBgaScgdG8gZWxlbWVudHMgb2YgdGhlIGxpc3QuCiAgICAgKGNvbGxlY3QgKCsg aSBhIGIpKSkgOyBDb2xsZWN0IHN1bSBvZiBgYScsIGBiJywgYW5kIGVhY2ggYGknIGludG8gYSBs aXN0LgoKICAgIDs7ID0+IDE2CiAgICAobG9vcHkKICAgICAobGV0KiAobXktc3VtIDEwKSkgICAg ICAgOyBCaW5kIGBteS1zdW0nIHRvIDEwLgogICAgIChsaXN0IGkgJygxIDIgMykpICAgICAgICA7 IEJpbmQgYGknIHRvIGVsZW1lbnRzIG9mIHRoZSBsaXN0LgogICAgIChzdW0gbXktc3VtIGkpICAg ICAgICAgICA7IFNldCBgbXktc3VtJyB0byBgaScgKyBgbXktc3VtJy4KICAgICAoZmluYWxseS1y ZXR1cm4gbXktc3VtKSkgOyBSZXR1cm4gdGhlIHZhbHVlIG9mIGBteS1zdW0nLgogICMrZW5kX3Ny YwoKIytmaW5kZXg6IHdpdGhvdXQKIytmaW5kZXg6IG5vLXdpdGgKIytmaW5kZXg6IG5vLWluaXQK LSA9d2l0aG91dD0sID1uby13aXRoPSwgPW5vLWluaXQ9IDo6IFZhcmlhYmxlcyB0aGF0IH5sb29w eX4gc2hvdWxkIG5vdCB0cnkgdG8KICBpbml0aWFsaXplLiAgfmxvb3B5fiB0cmllcyB0byBpbml0 aWFsaXplIGFsbCBvZiB0aGUgdmFyaWFibGVzIHRoYXQgaXQgdXNlcwogIGluIGEgfmxldH4tbGlr ZSBmb3JtLCBidXQgdGhhdCBpc27igJl0IGFsd2F5cyBkZXNpcmVkLgoKICAjK2JlZ2luX3NyYyBl bWFjcy1saXNwCiAgICA7OyBXaXRob3V0IGB3aXRob3V0JywgYGxvb3B5JyB3b3VsZCB0cnkgdG8g aW5pdGlhbGl6ZSBgYScgdG8gbmlsLCB3aGljaCB3b3VsZAogICAgOzsgb3ZlcndyaXRlIHRoZSB2 YWx1ZSBvZiA1IGFib3ZlLgoKICAgIDs7ID0+ICg1IDQgMyAyIDEpCiAgICAobGV0ICgoYSA1KSkK ICAgICAgKGxvb3B5ICh3aXRob3V0IGEpICAgICAgICA7IERvbid0IGluaXRpYWxpemUgYGEnLgog ICAgICAgICAgICAgKHVudGlsICh6ZXJvcCBhKSkgIDsgTGVhdmUgbG9vcCB3aGVuIGBhJyBlcXVh bHMgMC4KICAgICAgICAgICAgIChjb2xsZWN0IGEpICAgICAgICA7IENvbGxlY3QgdGhlIHZhbHVl IG9mIGBhJyBpbnRvIGEgbGlzdC4KICAgICAgICAgICAgIChzZXQgYSAoMS0gYSkpKSkgICA7IFNl dCBgYScgdG8gdGhlIHZhbHVlIG9mIGAoMS0gYSknLgoKICAgIDs7ID0+ICg1IDQgMyAyIDEpCiAg ICAobGV0ICgoYSA1KSkKICAgICAgKGxvb3B5IChuby1pbml0IGEpCiAgICAgICAgICAgICAod2hp bGUgKG5vdCAoemVyb3AgYSkpKQogICAgICAgICAgICAgKGNvbGxlY3QgYSkKICAgICAgICAgICAg IChzZXQgYSAoMS0gYSkpKSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBiZWZvcmUKIytmaW5kZXg6 IGJlZm9yZS1kbwojK2ZpbmRleDogaW5pdGlhbGx5LWRvCiMrZmluZGV4OiBpbml0aWFsbHkKLSA9 YmVmb3JlLWRvPSwgPWJlZm9yZT0sID1pbml0aWFsbHktZG89LCA9aW5pdGlhbGx5PSA6OiBSdW4g TGlzcCBleHByZXNzaW9ucwogIGJlZm9yZSB0aGUgbG9vcCBzdGFydHMsIGFmdGVyIHZhcmlhYmxl cyBhcmUgaW5pdGlhbGl6ZWQuCgogICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICg2 IDcgOCkKICAgIChsb29weSAod2l0aCAoYSAxKSAoYiAyKSkgICAgICA7IFNldCBgYScgdG8gMSBh bmQgYGInIHRvIDIuCiAgICAgICAgICAgKGJlZm9yZS1kbyAoY2wtaW5jZiBhKSAgOyBBZGQgMSB0 byBgYScuCiAgICAgICAgICAgICAgICAgICAgICAoY2wtaW5jZiBiKSkgOyBBZGQgMSB0byBgYicu CiAgICAgICAgICAgKGxpc3QgaSAnKDEgMiAzKSkgICAgICAgOyBTZXQgYGknIHRvIGVhY2ggZWxl bWVudCBpbiB0aGUgbGlzdC4KICAgICAgICAgICAoY29sbGVjdCAoKyBpIGEgYikpKSAgICA7IENv bGxlY3QgZWFjaCBzdW0gaW50byBhIGxpc3QuCgogICAgOzsgPT4gKDEgMiAzKQogICAgKGxvb3B5 ICh3aXRoIChhIDEpKQogICAgICAgICAgIDs7IE1lc3NhZ2UgYmVmb3JlIHRoZSBsb29wIHN0YXJ0 czoKICAgICAgICAgICAoaW5pdGlhbGx5IChtZXNzYWdlICJTdGFydGluZyBsb29wLi4uIikpCiAg ICAgICAgICAgKGxpc3QgaSAnKDEgMiAzKSkKICAgICAgICAgICAoY29sbGVjdCBpKSkKICAjK2Vu ZF9zcmMKCiMrZmluZGV4OiBhZnRlci1kbwojK2ZpbmRleDogYWZ0ZXIKIytmaW5kZXg6IGVsc2Ut ZG8KIytmaW5kZXg6IGVsc2UKLSA9YWZ0ZXItZG89LCA9YWZ0ZXI9LCA9ZWxzZS1kbz0sID1lbHNl PSA6OiBSdW4gTGlzcCBleHByZXNzaW9ucyBhZnRlciB0aGUgbG9vcAogIHN1Y2Nlc3NmdWxseSBj b21wbGV0ZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8gUHl0aG9u4oCZcyB+ZWxzZX4gc3RhdGVtZW50 CiAgZm9sbG93aW5nIGEgfmZvcn4gb3IgfndoaWxlfiBsb29wLiAgVW5saWtlIH5wcm9nbn4sIHRo ZSByZXR1cm4gdmFsdWVzIG9mIHRoZQogIGV4cHJlc3Npb25zIF9kbyBub3RfIGFmZmVjdCB0aGUg cmV0dXJuIHZhbHVlIG9mIHRoZSBtYWNyby4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAg OzsgTWVzc2FnZXMgdGhhdCBubyBvZGQgbnVtYmVyIHdhcyBmb3VuZDoKICAgIDs7ID0+IG5pbAog ICAgKGxvb3B5IChsaXN0IGkgJygyIDQgNiA4KSkKICAgICAgICAgICAod2hlbiAoY2wtb2RkcCBp KQogICAgICAgICAgICAgKGRvIChtZXNzYWdlICJPZGQgbnVtYmVyIGZvdW5kLiIpKQogICAgICAg ICAgICAgKHJldHVybiB0KSkgICAgICAgICAgICAgICAgICA7IE1ha2UgdGhlIGxvb3AgcmV0dXJu IGB0Jy4KICAgICAgICAgICAoYWZ0ZXItZG8KICAgICAgICAgICAgKG1lc3NhZ2UgIk5vIG9kZCBu dW1iZXIgZm91bmQuIikKICAgICAgICAgICAgOzsgVGhlIG1hY3JvIGFscmVhZHkgcmV0dXJuIGBu aWwnIGJ5IGRlZmF1bHQsCiAgICAgICAgICAgIDs7IGJ1dCBvbmUgY2FuIHN0aWxsIHVzZSBgY2wt cmV0dXJuJyB0byBiZSBtb3JlIGV4cGxpY2l0LgogICAgICAgICAgICAoY2wtcmV0dXJuIG5pbCkp KQoKICAgIDs7IE1lc3NhZ2VzIHRoYXQgYW4gb2RkIG51bWJlciB3YXMgZm91bmQ6CiAgICA7OyA9 PiB0CiAgICAobG9vcHkgKGxpc3QgaSAnKDIgNCA1IDgpKQogICAgICAgICAgICh3aGVuIChjbC1v ZGRwIGkpCiAgICAgICAgICAgICAoZG8gKG1lc3NhZ2UgIk9kZCBudW1iZXIgZm91bmQuIikpCiAg ICAgICAgICAgICAocmV0dXJuIHQpKQogICAgICAgICAgIChlbHNlIChtZXNzYWdlICJObyBvZGQg bnVtYmVyIGZvdW5kLiIpKSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBmaW5hbGx5LWRvCiMrZmlu ZGV4OiBmaW5hbGx5Ci0gPWZpbmFsbHktZG89LCA9ZmluYWxseT0gOjogUnVuIExpc3AgZXhwcmVz c2lvbnMgYWZ0ZXIgdGhlIGxvb3AgZXhpdHMsIGFsd2F5cy4KICBVbmxpa2UgfnByb2dufiwgdGhl IHJldHVybiB2YWx1ZXMgb2YgdGhlIGV4cHJlc3Npb25zIF9kbyBub3RfIGFmZmVjdCB0aGUKICBy ZXR1cm4gdmFsdWUgb2YgdGhlIG1hY3JvLgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7 OyA9PiAobmlsIGZpbmFsbHkpCiAgICAobGV0IChhIGIpCiAgICAgIChsb29weSAobGlzdCBpICco MSAyIDMgNCA1IDYpKQogICAgICAgICAgICAgKHdoZW4gKD4gaSAzKSAobGVhdmUpKQogICAgICAg ICAgICAgKGFmdGVyLWRvIChzZXRxIGEgJ2FmdGVyKSkKICAgICAgICAgICAgIChmaW5hbGx5LWRv IChzZXRxIGIgJ2ZpbmFsbHkpKSkKICAgICAgKGxpc3QgYSBiKSkKCiAgICA7OyA9PiBuaWwKICAg IChsb29weSAobGVhdmUpCiAgICAgICAgICAgOzsgRG9lc24ndCBhZmZlY3QgcmV0dXJuIHZhbHVl OgogICAgICAgICAgIChmaW5hbGx5LWRvIDk5OSkpCiAgIytlbmRfc3JjCgojK2ZpbmRleDogZmlu YWxseS1yZXR1cm4KLSA9ZmluYWxseS1yZXR1cm49IDo6IFJldHVybiBhIHZhbHVlLCByZWdhcmRs ZXNzIG9mIGhvdyB0aGUgbG9vcCBjb21wbGV0ZXMuCiAgVGhlc2UgYXJndW1lbnRzIG92ZXJyaWRl IGFueSBleHBsaWNpdCByZXR1cm4gdmFsdWVzIGdpdmVuIGluIGNvbW1hbmRzIGxpa2UKICA9cmV0 dXJuPSBhbmQgPXJldHVybi1mcm9tPSwgYXMgd2VsbCBhcyBhbnkgaW1wbGljaXQgcmV0dXJuIHZh bHVlcyB0aGF0IGNhbgogIGJlIGNyZWF0ZWQgYnkgYWNjdW11bGF0aW9uIGNvbW1hbmRzLgoKICBT cGVjaWZ5aW5nIG11bHRpcGxlIHZhbHVlcyBpcyB0aGUgc2FtZSBhcyByZXR1cm5pbmcgYSBsaXN0 IG9mIHRob3NlIHZhbHVlcy4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gOTk5 CiAgICAobG9vcHkgKHJldHVybiAxKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiA5OTkpKQoK ICAgIDs7ID0+ICgxIDIpCiAgICAobG9vcHkgKGxlYXZlKSA7IExlYXZlIHRvIGF2b2lkIGluZmlu aXRlIGxvb3AuCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIDEgMikpCiAgIytlbmRfc3JjCgoj K2ZpbmRleDogZmluYWxseS1wcm90ZWN0CiMrZmluZGV4OiBmaW5hbGx5LXByb3RlY3RlZAotID1m aW5hbGx5LXByb3RlY3Q9LCA9ZmluYWxseS1wcm90ZWN0ZWQ9IDo6IFdyYXAgdGhlIGxvb3AgaW4g fnVud2luZC1wcm90ZWN0fgogIChub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB+Y29uZGl0aW9uLWNh c2V+KS4gIFRoZSBhcmd1bWVudHMgdG8gdGhpcyBzcGVjaWFsCiAgbWFjcm8gYXJndW1lbnQgKHdo aWNoIGFyZSBMaXNwIGV4cHJlc3Npb25zKSBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZXMgdXNlZCBi eQogIHRoZSBsb29wLgoKICBTaWduYWxpbmcgYW4gZXJyb3Igd2lsbCBwcmV2ZW50IHRoZSBsb29w IGZyb20gcmV0dXJuaW5nIGEgdmFsdWUuICBUaGlzCiAgc3BlY2lhbCBtYWNybyBhcmd1bWVudCBk b2VzIG5vdCBwcmV2ZW50IHRoYXQgZXJyb3IgZnJvbSBiZWluZyBzaWduYWxlZCwgYW5kCiAgaXMg b25seSBtZWFudCB0byBoZWxwIGF2b2lkIGxpbmdlcmluZyBlZmZlY3RzIHRoYXQgbWlnaHQgYXJp c2UgZnJvbQogIHVucGxhbm5lZCBzdG9wcyBvZiB0aGUgbG9vcCdzIGV4ZWN1dGlvbi4KCiAgIyti ZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgUHJpbnRzIG91dCB0aGUgZm9sbG93aW5nLCB0aGVu IGNvbnRpbnVlcyBzaWduYWxsaW5nIHRoZSBlcnJvcjoKICAgIDs7CiAgICA7OyBFeGFtcGxlIHZh ciBpczogMQogICAgOzsgTGFzdCB1c2VkIGVsZW1lbnQgaW4gbGlzdCBpczogNAogICAgOzsgVGhl biBjdXJyZW50IHZhbHVlIG9mIOKAmG15LWNvbGxlY3Rpb27igJk6ICgxIDIgMyA0KQogICAgKGxv b3B5ICh3aXRoIChleGFtcGxlLXZhciAxKSkKICAgICAgICAgICAobGlzdCBpICcoMSAyIDMgNCA1 KSkKICAgICAgICAgICAoY29sbGVjdCBteS1jb2xsZWN0aW9uIGkpCiAgICAgICAgICAgKHdoZW4g KD4gaSAzKQogICAgICAgICAgICAgKGRvIChzaWduYWwgJ3NvbWUtZXJyb3IgKGxpc3QgaSkpKSkK ICAgICAgICAgICAoZmluYWxseS1wcm90ZWN0CiAgICAgICAgICAgIChtZXNzYWdlICJFeGFtcGxl IHZhciBpczogJWQiIGV4YW1wbGUtdmFyKQogICAgICAgICAgICAobWVzc2FnZSAiTGFzdCB1c2Vk IGVsZW1lbnQgaW4gbGlzdCBpczogJXMiIGkpCiAgICAgICAgICAgIChtZXNzYWdlICJUaGVuIGN1 cnJlbnQgdmFsdWUgb2YgYG15LWNvbGxlY3Rpb24nOiAlcyIKICAgICAgICAgICAgICAgICAgICAg bXktY29sbGVjdGlvbikpKQogICMrZW5kX3NyYwoKIytmaW5kZXg6IGZsYWcKIytmaW5kZXg6IGZs YWdzCi0gPWZsYWc9LCA9ZmxhZ3M9IDo6IE9wdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGJlaGF2aW9y IG9mIH5sb29weX4gKFtbI2ZsYWdzXV0pLgogIEZvciBleGFtcGxlLCBvbmUgY2FuIG9wdCB0byB1 c2UgYSBkaWZmZXJlbnQgZGVzdHJ1Y3R1cmluZyBzeXN0ZW0sIHN1Y2ggYXMKICB3aGF0IGlzIHBy b3ZpZGVkIGJ5IHRoZSBEYXNoIGxpYnJhcnkuICBTZWUgdGhhdCBsaW5rZWQgc2VjdGlvbiBmb3Ig bW9yZQogIGluZm9ybWF0aW9uLgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyBVc2Ug RGFzaCBmb3IgZGVzdHJ1Y3R1cmluZzoKICAgIDs7CiAgICA7OyAoKCgxIDIpICgzIDQpKSAoMSAz KSAoMiA0KSkKICAgIChyZXF1aXJlICdsb29weS1kYXNoKQogICAgKGxvb3B5IChmbGFnIGRhc2gp CiAgICAgICAgICAgKGxpc3QgKHdob2xlICZhcyBhIGIpICcoKDEgMikgKDMgNCkpKQogICAgICAg ICAgIChjb2xsZWN0IHdob2xlcyB3aG9sZSkKICAgICAgICAgICAoY29sbGVjdCBhcyBhKQogICAg ICAgICAgIChjb2xsZWN0IGJzIGIpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIHdob2xlcyBh cyBicykpCgogICAgOzsgVXNlIFNlcSBmb3IgZGVzdHJ1Y3R1cmluZzoKICAgIDs7CiAgICA7OyA9 PiAoMSBbMiAzXSkKICAgIChsb29weSAoZmxhZyBzZXEpCiAgICAgICAgICAgKHdpdGggKFthICZy ZXN0IGJdIFsxIDIgM10pKQogICAgICAgICAgIChyZXR1cm4gYSBiKSkKICAjK2VuZF9zcmMKCiMr ZmluZGV4OiBhY2N1bS1vcHQKIytmaW5kZXg6IG9wdC1hY2N1bQotID1hY2N1bS1vcHQ9LCA9b3B0 LWFjY3VtPSA6OiBBY2N1bXVsYXRpb24gdmFyaWFibGVzIHdob3NlIHVzZSBzaG91bGQgYmUKICBv cHRpbWl6ZWQgKFtbI29wdGltaXplZC1hY2N1bXNdXSkuICBJbXBsaWNpdCBhY2N1bXVsYXRpb24g dmFyaWFibGVzIGFyZSBhbHdheXMKICBvcHRpbWl6ZWQsIGJ1dCBleHBsaWNpdCB2YXJpYWJsZXMg YXJlIHVub3B0aW1pemVkIGJ5IGRlZmF1bHQKICAoW1sjYWNjdW11bGF0aW9uLWNvbW1hbmRzXV0p LiAgVGhpcyBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50IGFsbG93cyBvcHRpbWl6aW5nIG5hbWVkCiAg dmFyaWFibGVzICh3aXRoIHJlc3RyaWN0aW9ucyksIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHVzaW5n IG1vcmUgdGhhbiBvbmUKICBhY2N1bXVsYXRpb24gdmFyaWFibGUuICBUaGlzIGlzIGVzcGVjaWFs bHkgaW1wb3J0YW50IGZvciBkZXN0cnVjdHVyaW5nCiAgYWNjdW11bGF0aW9ucy4KCiAgIytiZWdp bl9zcmMgZW1hY3MtbGlzcAogICAgOzsgTXVsdGlwbGUgYWNjdW11bGF0aW9uIHZhcmlhYmxlcyBp biBgY2wtbG9vcCc6CiAgICA7OyA9PiAoKDIgNCkgKDEgMykpCiAgICAoY2wtbG9vcCBmb3IgaSBp biAnKDEgMiAzIDQpCiAgICAgICAgICAgICBpZiAoY2wtZXZlbnAgaSkgY29sbGVjdCBpIGludG8g ZXZlbnMKICAgICAgICAgICAgIGVsc2UgY29sbGVjdCBpIGludG8gb2RkcwogICAgICAgICAgICAg ZmluYWxseSByZXR1cm4gKGxpc3QgZXZlbnMgb2RkcykpCgogICAgOzsgRmFzdGVyIGNvZGUgdGhh biBhYm92ZSBgY2wtbG9vcCcgKHRyeSBgcHAtbWFjcm9leHBhbmQtbGFzdC1zZXhwJyk6CiAgICA7 OyA9PiAoKDIgNCkgKDEgMykpCiAgICAobG9vcHkgKGFjY3VtLW9wdCBldmVucyBvZGRzKQogICAg ICAgICAgIChsaXN0IGkgJygxIDIgMyA0KSkKICAgICAgICAgICAoaWYgKGNsLWV2ZW5wIGkpCiAg ICAgICAgICAgICAgIChjb2xsZWN0IGV2ZW5zIGkpCiAgICAgICAgICAgICAoY29sbGVjdCBvZGRz IGkpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBldmVucyBvZGRzKSkKICAjK2VuZF9zcmMK CgojK2ZpbmRleDogd3JhcAotID13cmFwPSA6OiBBIGxpc3Qgb2YgZm9ybXMgaW4gd2hpY2ggdG8g d3JhcCB0aGUgbG9vcCBpdHNlbGYgKHRoYXQgaXMsIG5vdAogID1iZWZvcmUtZG89LCA9YWZ0ZXIt ZG89LCBvciBhbnl0aGluZyBlbHNlKS4gIEVhY2ggZm9ybSBjYW4gYmUgZWl0aGVyIGEgbGlzdAog IG9yIGEgc3ltYm9sLiAgSWYgYSBsaXN0LCB0aGUgbG9vcCBpcyBpbnNlcnRlZCBpbnRvIHRoZSBl bmQgb2YgdGhlIGxpc3QuICBJZgogIGEgc3ltYm9sLCBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8g YSBsaXN0IG9mIDEgZWxlbWVudCBiZWZvcmUgaW5zZXJ0aW5nIHRoZQogIGxvb3AgYXQgdGhlIGVu ZCBvZiB0aGUgbGlzdC4gIFRoaXMgc3BlY2lhbCBtYWNybyBhcmd1bWVudCBpcyBzaW1pbGFyIGlu IHVzZQogIHRvIHRoZSBFbWFjcyBMaXNwIG1hY3JvIH50aHJlYWQtbGFzdH4sIGV4Y2VwdCB0aGF0 IGZvcm1zIGxpc3RlZCBmaXJzdCBhcmUKICBhcHBsaWVkIGxhc3QsIGFzIGluIG5vcm1hbCBMaXNw IGNvZGUuCgogIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyB0aGlzIG1hY3JvIGFy Z3VtZW50IGluc3RlYWQgb2YganVzdAogIHdyaXRpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIG5vcm1h bGx5IGlzIHRoYXQgdGhlc2UgZm9ybXMgY2FuIGFjY2VzcyB2YXJpYWJsZXMKICBpbml0aWFsaXpl ZCBieSB0aGUgbWFjcm8gYW5kIHRoYXQgdGhleSBvY2N1ciBhZnRlciB0aGUgY29kZSBpbiA9YmVm b3JlLWRvPQogIGlzIHJ1bi4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgKGxvb3B5ICh3 cmFwIChsZXQgKChhIDEpKSkKICAgICAgICAgICAgICAgICBzYXZlLW1hdGNoLWRhdGEpCiAgICAg ICAgICAgLi4uKQoKICAgIDs7IFNpbWlsYXIgdG8KICAgIChsZXQgKChhIDEpKQogICAgICAoc2F2 ZS1tYXRjaC1kYXRhCiAgICAgICAgKGxvb3B5IC4uLikpKQoKICAgIDs7ID0+IDYKICAgIChsb29w eSAod2l0aCAoYSAxKSkKICAgICAgICAgICAoYmVmb3JlLWRvIChjbC1pbmNmIGEgMikpCiAgICAg ICAgICAgKHdyYXAgKHByb2duIChzZXRxIGEgKCogMiBhKSkpKQogICAgICAgICAgIChyZXR1cm4g YSkpCiAgIytlbmRfc3JjCgoKQXMgc3RhdGVkIGFib3ZlLCBhbGwgb3RoZXIgZXhwcmVzc2lvbnMg d2lsbCBiZSBjb25zaWRlcmVkIGxvb3AgY29tbWFuZHMKKFtbI2xvb3AtY29tbWFuZHNdW0xvb3Ag Q29tbWFuZHNdXSkuCgojK0FUVFJfVEVYSU5GTzogOnRhZyBOb3RlCiMrQkVHSU5fUVVPVEUKRm9y IGNvbnZlbmllbmNlLCB0aGUgfndoaWxlfi1sb29wIHRoYXQgfmxvb3B5fiBjcmVhdGVzIGlzIHdy YXBwZWQgYnkgYQp+Y2wtYmxvY2t+LiAgTmFtaW5nIHRoZSBsb29wIG5hbWVzIHRoaXMgYmxvY2ss IHdoaWNoIGlzIGNyZWF0ZWQgL2FmdGVyLwppbml0aWFsaXppbmcgdmFyaWFibGVzLgoKVGhlIHR3 byBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50cyA9YmVmb3JlLWRvPSBhbmQgPWFmdGVyLWRvPSAoYW5k IHRoZWlyIGFsaWFzZXMpCmFsc28gb2NjdXIgd2l0aGluIHRoaXMgfmNsLWJsb2NrfiwgYmVmb3Jl IGFuZCBhZnRlciB0aGUgbG9vcCwgcmVzcGVjdGl2ZWx5LgpUaGlzIGhhcyAyIGNvbnNlcXVlbmNl czoKCjEuIFVzaW5nIH5jbC1yZXR1cm5+IGluID1iZWZvcmUtZG89IHdpbGwgcHJldmVudCB0aGUg Ym90aCBsb29wIGFuZCA9YWZ0ZXItZG89CiAgIGNvZGUgZnJvbSBydW5uaW5nLgoKMi4gVXNpbmcg fmNsLXJldHVybn4gb3IgYW4gZWFybHkgZXhpdCBjb21tYW5kIChbWyNleGl0aW5nLXRoZS1sb29w LWVhcmx5XVtFYXJseSBFeGl0XV0pIGluIHRoZSBsb29wIHdpbGwKICAgcHJldmVudCB0aGUgPWFm dGVyLWRvPSBjb2RlIGZyb20gcnVubmluZy4gIEZvciB0aGlzIHJlYXNvbiwgPWFmdGVyLWRvPSBp cwogICBydW4gaWYgYW5kIG9ubHkgaWYgdGhlIGxvb3AgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwg aGVuY2UgdGhlIGFsaWFzCiAgID1lbHNlLWRvPSBhbmQgdGhlIHNpbWlsYXJpdHkgdG8gUHl0aG9u J3MgfmVsc2V+IHN0YXRlbWVudCB3aGVuIHVzZWQgd2l0aAogICBsb29wcy4KClRoZXNlIHRocmVl IHNlY3Rpb25zICg9YmVmb3JlLWRvPSwgPWFmdGVyLWRvPSwgYW5kIHRoZSB+d2hpbGV+LWxvb3Ag aXRzZWxmKQphcmUgdGhlIG9ubHkgc3RydWN0dXJlcyB0aGF0IG9jY3VyIHdpdGhpbiB0aGUgfmNs LWJsb2Nrfi4gIFVzaW5nIH5jbC1yZXR1cm5+CmluID1iZWZvcmUtZG89LCBmb3IgZXhhbXBsZSwg d2lsbCBub3Qgc3RvcCBjb2RlIGluID1maW5hbGx5LWRvPSBmcm9tIHJ1bm5pbmcKb3IgdmFsdWVz IGxpc3RlZCBpbiA9ZmluYWxseS1yZXR1cm49IGZyb20gYmVpbmcgcmV0dXJuZWQuCiMrRU5EX1FV T1RFCgoqIExvb3AgQ29tbWFuZHMKOlBST1BFUlRJRVM6CjpDVVNUT01fSUQ6IGxvb3AtY29tbWFu ZHMKOkRFU0NSSVBUSU9OOiBUaGUgbWFpbiBmZWF0dXJlcyBvZiBgbG9vcHknLgo6RU5EOgoKIytj aW5kZXg6IGxvb3AgY29tbWFuZApJZiBhIG1hY3JvIGFyZ3VtZW50IGRvZXMgbm90IG1hdGNoIG9u ZSBvZiB0aGUgcHJldmlvdXNseSBsaXN0ZWQgc3BlY2lhbCBtYWNybwphcmd1bWVudHMgKFtbI21h Y3JvLWFyZ3VtZW50c11bU3BlY2lhbCBNYWNybyBBcmd1bWVudHNdXSksIH5sb29weX4gd2lsbCBh dHRlbXB0IHRvIHRyZWF0IGl0IGFzIGEgbG9vcApjb21tYW5kLiAgTG9vcCBjb21tYW5kcyBhcmUg b25seSB2YWxpZCBhcyBhIHRvcC1sZXZlbCBhcmd1bWVudCB0byB0aGUgbWFjcm8sIG9yCmluc2lk ZSBhbm90aGVyIGxvb3AgY29tbWFuZC4KClRoZXJlZm9yZSwgdGhlc2UgbWFjcm8gY2FsbHMgYXJl IHZhbGlkOgoKIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogIChsb29weSAobGlzdCBpICcoMSAyIDMp KQogICAgICAgICAoY29sbGVjdCBjb2xsIGkpCiAgICAgICAgIDs7IFNwZWNpYWwgbWFjcm8gYXJn dW1lbnQ6CiAgICAgICAgIChmaW5hbGx5LXJldHVybiBjb2xsKSkKCiAgOzsgSW1wbGljaXQgYWNj dW11bGF0aW9uIHZhcmlhYmxlIGFuZCBpbXBsaWNpdCByZXR1cm4gdmFsdWU6CiAgKGxvb3B5IChs aXN0IGkgJygxIDIgMykpCiAgICAgICAgIChjb2xsZWN0IGkpKQojK0VORF9TUkMKCmFuZCB0aGlz IGlzIG5vdDoKCiMrQkVHSU5fU1JDIGVtYWNzLWxpc3AKICAobG9vcHkgKHdpdGggKGxpc3QgaSAn KDEgMiAzKSkpCiAgICAgICAgIChmaW5hbGx5LXJldHVybiAoY29sbGVjdCBjb2xsIGkpKSkKIytF TkRfU1JDCgpUcnlpbmcgdG8gdXNlIGxvb3AgY29tbWFuZHMgaW4gcGxhY2VzIHdoZXJlIHRoZXkg ZG9uJ3QgYmVsb25nIHdpbGwgcmVzdWx0IGluCmVycm9ycyB3aGlsZSB0aGUgbWFjcm8gaXMgZXhw YW5kaW5nIGFuZCB3aGVuIHRoZSBjb2RlIGlzIGV2YWx1YXRlZC4KCllvdSBzaG91bGQga2VlcCBp biBtaW5kIHRoYXQgY29tbWFuZHMgYXJlIGV2YWx1YXRlZCBpbiBvcmRlci4gIFRoaXMgbWVhbnMg dGhhdAphdHRlbXB0aW5nIHNvbWV0aGluZyBsaWtlIHRoZSBiZWxvdyBleGFtcGxlIG1pZ2h0IG5v dCBkbyB3aGF0IHlvdSBleHBlY3QsIGFzID1pPQppcyBhc3NpZ25lZCBhIHZhbHVlIGZyb20gdGhl IGxpc3QgYWZ0ZXIgY29sbGVjdGluZyA9aT0gaW50byA9Y29sbD0uCgojK2NhcHRpb246IEFuIGV4 YW1wbGUgb2YgaG93IGxvb3AgY29tbWFuZHMgYXJlIGV2YWx1YXRlZCBpbiBvcmRlci4KIytCRUdJ Tl9TUkMgZW1hY3MtbGlzcAogIDs7ID0+IChuaWwgMSAyKQogIChsb29weSAoY29sbGVjdCBjb2xs IGkpCiAgICAgICAgIChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgIChmaW5hbGx5LXJldHVybiBj b2xsKSkKIytFTkRfU1JDCgpGb3IgY29udmVuaWVuY2UgYW5kIHVuZGVyc3RhbmRpbmcsIHRoZSBz YW1lIGNvbW1hbmQgbWlnaHQgaGF2ZSBtdWx0aXBsZSBuYW1lcywKY2FsbGVkIHt7e2RmbihhbGlh c2VzKX19fS4gIEZvciBleGFtcGxlLCB0aGUgY29tbWFuZCA9c2V0PSBoYXMgYW4gYWxpYXMgPWV4 cHI9LApiZWNhdXNlID1zZXQ9IGlzIHVzZWQgdG8gL3NldC8gYSB2YXJpYWJsZSB0byB0aGUgdmFs dWUgb2YgYW4gL2V4cHJlc3Npb24vLgpTaW1pbGFyeSwgdGhlID1hcnJheT0gY29tbWFuZCBoYXMg dGhlIGFsaWFzID1zdHJpbmc9LCBiZWNhdXNlIHRoZSA9YXJyYXk9CmNvbW1hbmQgY2FuIGJlIHVz ZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiBhbiBhcnJheSBvciBzdHJpbmdb Zm46MV0uCllvdSBjYW4gZGVmaW5lIGN1c3RvbSBhbGlhc2VzIHVzaW5nIHRoZSBtYWNybyB+bG9v cHktZGVmYWxpYXN+IChbWyNjdXN0b20tYWxpYXNlc11bQ3VzdG9tIEFsaWFzZXNdXSkuCgpTaW1p bGFyIHRvIG90aGVyIGxpYnJhcmllcywgbWFueSBjb21tYW5kcyBoYXZlIGFuIGFsaWFzIG9mIHRo ZQpwcmVzZW50LXBhcnRpY2lwbGUgZm9ybSAodGhlICItaW5nIiBmb3JtKS4gIEEgZmV3IGV4YW1w bGVzIGFyZSBzZWVuIGluIHRoZSB0YWJsZQpiZWxvdy4KCnwgQ29tbWFuZCAgIHwgIi1pbmciIEFs aWFzIHwKfC0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tfAp8ID1zZXQ9ICAgICB8ID1zZXR0aW5n PSAgICB8CnwgPWxpc3Q9ICAgIHwgPWxpc3Rpbmc9ICAgIHwKfCA9Y29sbGVjdD0gfCA9Y29sbGVj dGluZz0gfAp8ID1udW1iZXJzPSB8ID1udW1iZXJpbmc9ICB8CgpTb21lIGNvbW1hbmRzIHRha2Ug b3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMuICBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQgPWxp c3Q9CmNhbiB0YWtlIGEgZnVuY3Rpb24gYXJndW1lbnQgZm9sbG93aW5nIHRoZSBrZXl3b3JkID06 Ynk9LCB3aGljaCBhZmZlY3RzIGhvdyB0aGF0CmNvbW1hbmQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUg ZWxlbWVudHMgaW4gdGhlIGxpc3QuCgpGb3Igc2ltcGxpY2l0eSwgdGhlIGNvbW1hbmRzIGFyZSBk ZXNjcmliZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBub3RhdGlvbjoKCi0gSWYgYSBjb21tYW5kIGhh cyBtdWx0aXBsZSBuYW1lcywgdGhlIG5hbWVzIGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBi YXIsCiAgc3VjaCBhcyBpbiA9c2V0fGV4cHI9LgotID1WQVI9IGlzIGFuIHVucXVvdGVkIHN5bWJv bCB0aGF0IHdpbGwgYmUgdXNlZCBhcyBhIHZhcmlhYmxlIG5hbWUsIHN1Y2ggYXMgPWk9CiAgaW4g PShsaXN0IGkgbXktbGlzdCk9LgotID1GVU5DPSBpcyBhIHF1b3RlZCBMaXNwIGZ1bmN0aW9uIG5h bWUsIHN1Y2ggYXMgfiMnbXktZnVuY34gb3IgfidteS1mdW5jfiwgYQogIHZhcmlhYmxlIHdob3Nl IHZhbHVlIGlzIGEgZnVuY3Rpb24sIG9yIGEgfmxhbWJkYX4gZXhwcmVzc2lvbi4KLSA9TkFNRT0g aXMgYW4gdW5xdW90ZWQgbmFtZSBvZiBhIGxvb3AgKG9yLCBtb3JlIGFjY3VyYXRlbHksIG9mIGEg PWNsLWJsb2NrPSkuCi0gPUVYUFI9IGlzIGEgc2luZ2xlIExpc3AgZXhwcmVzc2lvbiwgc3VjaCBh cyA9KCsgMSAyKT0sID0nKDEgMiAzKT0sID1teS12YXI9LAogIG9yID0oc29tZS1mdW5jdGlvbiBt eS12YXIpPS4gID1FWFBSUz0gbWVhbnMgbXVsdGlwbGUgZXhwcmVzc2lvbnMuICBSZWFsbHksIHdl CiAgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiwgbm90IHRo ZSBleHByZXNzaW9uIGl0c2VsZi4KLSA9Q01EPSBpcyBhIGxvb3AgY29tbWFuZCwgYXMgb3Bwb3Nl ZCB0byBhIG5vcm1hbCBMaXNwIGV4cHJlc3Npb24uCiAgPShsaXN0IGkgJygxIDIgMykpPSwgPShj eWNsZSA1KT0sIGFuZCA9KHJldHVybi1mcm9tIG91dGVyLWxvb3AgNyk9CiAgYXJlIGV4YW1wbGVz IG9mIGxvb3AgY29tbWFuZHMuICA9Q01EUz0gbWVhbnMgbXVsdGlwbGUgY29tbWFuZHMuCi0gT3B0 aW9uYWwgYXJndW1lbnRzIGFyZSBzdXJyb3VuZCBieSBicmFja2V0cy4gID1bRVhQUl09IGlzIGFu IG9wdGlvbmFsCiAgZXhwcmVzc2lvbiwgYW5kID1bQ01EXT0gaXMgYW4gb3B0aW9uYWwgY29tbWFu ZC4gIEJ5IGV4dGVuc2lvbiwgPVtFWFBSU109IGlzCiAgZXF1aXZhbGVudCB0byA9W0VYUFIgW0VY UFIgWy4uLl1dXT0sIGFuZCA9W0NNRFNdPSB0byA9W0NNRCBbQ01EIFsuLi5dXV09LgotIE9wdGlv bmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBzaG93biBhcyA9JmtleSBrZXkxIGtleTIgLi4uPSwg d2hlcmUgPWtleTE9LAogID1rZXkyPSwgYW5kIHNvIG9uIGFyZSB0aGUgbGl0ZXJhbCBrZXl3b3Jk cy4gIEp1c3QgbGlrZSBpbiBub3JtYWwgTGlzcAogIGZ1bmN0aW9ucywgY29tbWFuZCBrZXl3b3Jk cyBtdXN0IGJlIHByZWZpeGVkIGJ5IGEgY29sb24gKCI6IikuICBGb3IgZXhhbXBsZSwKICB0aGUg aXRlcmF0aW9uIGNvbW1hbmQgPWxpc3Q9IGhhcyBhIGtleXdvcmQgYXJndW1lbnQgPWJ5PSwgd2hp Y2ggY2FuIGJlIGdpdmVuIGEKICB2YWx1ZSB1c2luZyA9OmJ5IFNPTUUtRVhQUkVTU0lPTj0uCgoK R2VuZXJhbGx5LCA9VkFSPSBpcyBpbml0aWFsaXplZCB0byB+bmlsfiwgYnV0IG5vdCBhbHdheXMu ICBUaGlzIGRvY3VtZW50IHRyaWVzCnRvIG5vdGUgd2hlbiB0aGF0IGlzIG5vdCB0aGUgY2FzZS4g IEZvciB3aGVuIHRoYXQgaXMgbm90IHRoZSBjYXNlLCB0aGUgdmFyaWFibGUKY2FuIHN0aWxsIGJl IGluaXRpYWxpemVkIHRvIH5uaWx+IGlmIGl0IGlzIHNldCB0byB+bmlsfiB1c2luZyB0aGUgPXdp dGg9IHNwZWNpYWwKbWFjcm8gYXJndW1lbnQuICBUaGVzZSBzcGVjaWFsIGNhc2VzIGFsbG93IGZv ciBtb3JlIGVmZmljaWVudCBjb2RlIGFuZCBsZXNzCmluZGlyZWN0aW9uLgoKIytiZWdpbl9zcmMg ZW1hY3MtbGlzcAogIDs7ID0+ICgwIDEgMiAzKQogIChsb29weSAoY29sbGVjdCBpKQogICAgICAg ICAobnVtYmVycyBpIDpmcm9tIDAgOnRvIDMpKQoKICA7OyA9PiAobmlsIDAgMSAyKQogIChsb29w eSAod2l0aCAoaSBuaWwpKQogICAgICAgICAoY29sbGVjdCBpKQogICAgICAgICAobnVtYmVycyBp IDpmcm9tIDAgOnRvIDMpKQojK2VuZF9zcmMKClVubGlrZSB+Y2wtbG9vcH4gaW4gc29tZSBjYXNl cywgaW4gTG9vcHksIHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGtleXdvcmQgYXJndW1lbnRzCmFyZSBl dmFsdWF0ZWQgb25seSBvbmNlLiAgRm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kID0obGlzdCBpIHNv bWUtbGlzdCA6YnkKKGdldC1mdW5jdGlvbikpPSBldmFsdWF0ZXMgfihnZXQtZnVuY3Rpb24pfiBv bmx5IG9uY2UuICBJdCBkb2VzIG5vdCBldmFsdWF0ZSBpdApyZXBlYXRlZGx5IGZvciBlYWNoIHN0 ZXAgb2YgdGhlIGxvb3AuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgUGFzc2VzIHRoZSBh c3NlcnRpb246CiAgOzsKICA7OyA9PiAoMCAxIDIgMyA0IDUgNiA3IDggOSAxMCkKICAobG9vcHkg KHdpdGggKHRpbWVzIDApKQogICAgICAgICAobGlzdCBpIChudW1iZXItc2VxdWVuY2UgMCAxMCkg OmJ5IChwcm9nbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNsLWFzc2VydCAoPSB0aW1lcyAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjbC1pbmNmIHRpbWVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIydjZHIpKQogICAgICAgICAoY29sbGVjdCBpKSkKCiAgOzsgPT4g RmFpbHMgdGhlIGFzc2VydGlvbiBvbiB0aGUgc2Vjb25kIHN0ZXAgb2YgdGhlIGxvb3A6CiAgKGNs LWxvb3Agd2l0aCB0aW1lcyA9IDAKICAgICAgICAgICBmb3IgaSBpbiAobnVtYmVyLXNlcXVlbmNl IDAgMTApIGJ5IChwcm9nbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2wtYXNzZXJ0ICg9IHRpbWVzIDApKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2wtaW5jZiB0aW1lcykKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIydjZHIpCiAgICAgICAgICAgY29sbGVjdCBp KQojK2VuZF9zcmMKCioqIEJhc2ljIERlc3RydWN0dXJpbmcKOlBST1BFUlRJRVM6CjpDVVNUT01f SUQ6IGJhc2ljLWRlc3RydWN0dXJpbmcKOkRFU0NSSVBUSU9OOiBIb3cgdG8gZGVzdHJ1Y3R1cmUg dmFyaWFibGVzIGFuZCB2YWx1ZXMgaW4gbG9vcCBjb21tYW5kcy4KOkVORDoKCiMrY2luZGV4OiB2 YXJpYWJsZSBkZXN0cnVjdHVyaW5nClNpbWlsYXIgdG8gZmVhdHVyZXMgbGlrZSB+c2VxLWxldH4s IH5jbC1kZXN0cnVjdHVyaW5nLWJpbmR+LCBhbmQgfnBjYXNlLWxldH4sCn5sb29weX4gaXMgY2Fw YWJsZSBvZiBkZXN0cnVjdHVyaW5nIHZhbHVlcyB3aGVuIGFzc2lnbmluZyB2YWx1ZXMgdG8gdmFy aWFibGVzLgpEZXN0cnVjdHVyaW5nIGluIExvb3B5IGlzIHNpbWlsYXIgdG8sIGJ1dCBtb3JlIGZl YXR1cmVmdWwgdGhhbiwgd2hhdCBpcwpwcm92aWRlZCBpbiA9Y2wtbGliPS4KClNvbWUgZGlmZmVy ZW5jZXMgaW5jbHVkZToKLSBEZXN0cnVjdHVyaW5nIGFycmF5cwoKLSBEZXN0cnVjdHVyaW5nIGlu IGFjY3VtdWxhdGlvbiBjb21tYW5kcyAoW1sjYWNjdW11bGF0aW9uLWNvbW1hbmRzXV0pCgotIERl c3RydWN0dXJpbmcgaW4gY29tbWFuZHMgaXRlcmF0aW5nIHRocm91Z2ggfnNldGZ+LWFibGUgcGxh Y2VzIGluIGEgc2VxdWVuY2UKICAoW1sjc2VxdWVuY2UtcmVmZXJlbmNlLWl0ZXJhdGlvbl1dKQoK LSBUaGUgZXh0ZW5kZWQgZm9ybXMgb2YgdGhlID0mb3B0aW9uYWw9IGFuZCA9JmtleT0gdmFyaWFi bGVzIChzdWNoIGFzIGRlZmF1bHQKICB2YWx1ZXMgbGlrZSBpbiB+Li4uICZvcHRpb25hbCAodmFy IGRlZmF1bHQpIC4uLn4pIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcKICBzcXVhcmUgYnJhY2tldHMg YXMgd2VsbCBhcyBwYXJlbnRoZXNlcyAoc3VjaCBhcyB+Li4uICZvcHRpb25hbCBbdmFyIGRlZmF1 bHRdCiAgLi4ufikuICBTaW5jZSBzdWNoIHZhcmlhYmxlcyBjYW4gYmUgZnVydGhlciBkZXN0cnVj dHVyZWQgYnkgYmVpbmcgd3JpdHRlbiBhcwogIHNlcXVlbmNlcyB0aGVtc2VsdmVzLCBhbGxvd2lu ZyBib3RoIHBhcmVudGhlc2VzIGFuZCBicmFja2V0cyByZWR1Y2VzIGNvbmZ1c2lvbgogIGFuZCBp bXByb3ZlcyBjb25zaXN0ZW5jeS4KCi0gQSA9Jm1hcD0gY29uc3RydWN0LCBzaW1pbGFyIHRvID0m a2V5PSwgYnV0IHVzaW5nIH5tYXAtZWx0fiBpbnN0ZWFkIG9mCiAgfnBsaXN0LWdldH4gYW5kIHdo aWNoIGRvZXMgbm90IGVycm9yIHdoZW4gdGhlIG1hcCBjb250YWlucyBrZXlzIHdoaWNoIGFyZW4n dAogIG1hdGNoZWQgKGluIG90aGVyIHdvcmRzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBlcXVp dmFsZW50IG9mCiAgPSZhbGxvdy1vdGhlci1rZXlzPSkuCgoKVGhpcyBzZWN0aW9uIGRlc2NyaWJl cyB0aGUgYmFzaWMgYnVpbHQtaW4gZGVzdHJ1Y3R1cmluZyB1c2VkIGJ5IG1vc3QgbG9vcApjb21t YW5kcywgc3VjaCBhcyA9c2V0PSBhbmQgPWxpc3Q9LiAgRGVzdHJ1Y3R1cmluZyBpbiBhY2N1bXVs YXRpb24gY29tbWFuZHMKKFtbI2FjY3VtdWxhdGlvbi1jb21tYW5kc11dKSBhbmQgc2VxdWVuY2Ut cmVmZXJlbmNlIGNvbW1hbmRzCihbWyNzZXF1ZW5jZS1yZWZlcmVuY2UtaXRlcmF0aW9uXV0pIHdv cmtzIHNsaWdodGx5IGRpZmZlcmVudGx5LCBhbmQgaXMgZGVzY3JpYmVkCm1vcmUgaW4gdGhvc2Ug c2VjdGlvbnMuCgpJbiBhZGRpdGlvbiB0byB3aGF0IGNhbiBiZSBkb25lIGluIGxvb3AgY29tbWFu ZHMsIHNldmVyYWwgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZQpmb3IgdXNpbmcgTG9vcHkncyBkZXN0 cnVjdHVyaW5nIG91dHNpZGUgb2Ygfmxvb3B5fiBsb29wcyAoW1sjZGVzdHItbWFjcm9zXV0pLApp bmNsdWRpbmcgdGhlIH5wY2FzZX4gcGF0dGVybiA9bG9vcHk9LgoKVGhlIGxhc3QgdGhpbmcgdG8g bm90ZSBpcyB0aGF0IH5sb29weX4gbG9vcHMgY2FuIGJlIG1hZGUgdG8gdXNlIGFsdGVybmF0aXZl CmRlc3RydWN0dXJpbmcgc3lzdGVtcywgc3VjaCBhcyB+c2VxLWxldH4gb3IgfnBjYXNlLWxldH4u ICBUaGlzIGlzIGRvbmUgYnkgdXNpbmcKdGhlID1mbGFnPSBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50 IChbWyNmbGFnc11dKS4gIElmIHlvdSBhcmUgZmFtaWxpYXIgd2l0aCB0aGUKcGFja2FnZSA9ZGFz aD0gW2ZuOmRhc2hdIGFuZCBpdHMgQ2xvanVyZS1zdHlsZSBkZXN0cnVjdHVyaW5nLCBjb25zaWRl ciB0cnlpbmcKdGhlIGZsYWcgPWRhc2g9IHByb3ZpZGVkIGJ5IHRoZSBwYWNrYWdlID1sb29weS1k YXNoPS4KCgpCZWxvdyBhcmUgdHdvIGV4YW1wbGVzIG9mIGRlc3RydWN0dXJpbmcgaW4gfmNsLWxv b3B+IGFuZCB+bG9vcHl+LgoKIytjYXB0aW9uOiBEZXN0cnVjdHVyaW5nIHZhbHVlcyBpbiBhIGxp c3QuCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyA9PiAoMSAyIDMgNCkKICAoY2wtbG9vcCBm b3IgKGkgLiBqKSBpbiAnKCgxIC4gMikgKDMgLiA0KSkKICAgICAgICAgICBjb2xsZWN0IGkKICAg ICAgICAgICBjb2xsZWN0IGopCgogIDs7ID0+ICgxIDIgMyA0KQogIChsb29weSAobGlzdCAoaSAu IGopICcoKDEgLiAyKSAoMyAuIDQpKSkKICAgICAgICAgKGNvbGxlY3QgaSkKICAgICAgICAgKGNv bGxlY3QgaikpCiMrZW5kX3NyYwoKIytjYXB0aW9uOiBEZXN0cnVjdHVyaW5nIHZhbHVlcyBpbiBh c3NpZ25tZW50LgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgPT4gKDEgMiAzIDQpCiAgKGNs LWxvb3AgZm9yIGVsZW0gaW4gJygoMSAuIDIpICgzIC4gNCkpCiAgICAgICAgICAgZm9yIChpIC4g aikgPSBlbGVtCiAgICAgICAgICAgY29sbGVjdCBpCiAgICAgICAgICAgY29sbGVjdCBqKQoKICA7 OyA9PiAoMSAyIDMgNCkKICAobG9vcHkgKGxpc3QgZWxlbSAnKCgxIC4gMikgKDMgLiA0KSkpCiAg ICAgICAgIChzZXQgKGkgLiBqKSBlbGVtKQogICAgICAgICAoY29sbGVjdCBpKQogICAgICAgICAo Y29sbGVjdCBqKSkKIytlbmRfc3JjCgoKWW91IGNhbiB1c2UgZGVzdHJ1Y3R1cmVkIGFzc2lnbm1l bnQgYnkgcGFzc2luZyBhbiB1bnF1b3RlZCBzZXF1ZW5jZSBvZiBzeW1ib2xzCmFzIHRoZSA9VkFS PSBhcmd1bWVudCBvZiBhIGxvb3AgY29tbWFuZC4gIExvb3B5IHN1cHBvcnRzIGRlc3RydWN0dXJp bmcgbGlzdHMgYW5kCmFycmF5cyAod2hpY2ggaW5jbHVkZXMgc3RyaW5ncyBhbmQgdmVjdG9ycyku Ci0gVG8gZGVzdHJ1Y3R1cmUgbGlzdHMsIHVzZSBhIGxpc3QsIGFzIGluID0oYSBiIGMpPS4KLSBU byBkZXN0cnVjdHVyZSBhcnJheXMsIHVzZSBhIHZlY3RvciwgYXMgaW4gPVthIGIgY109LgoKClRo aXMgc2VxdWVuY2Ugb2Ygc3ltYm9scyBjYW4gYmUgc2hvcnRlciB0aGFuIHRoZSBkZXN0cnVjdHVy ZWQgc2VxdWVuY2UsIC9idXQgbm90Cmxvbmdlci8uICBJZiBzaG9ydGVyLCB0aGUgdW5hc3NpZ25l ZCBlbGVtZW50cyBvZiB0aGUgZGVzdHJ1Y3R1cmVkIHNlcXVlbmNlIGFyZQpzaW1wbHkgaWdub3Jl ZC4KClRoZSBjb250ZW50IG9mIHRoaXMgZGVzdHJ1Y3R1cmluZyBzZXF1ZW5jZSBpcyBzaW1pbGFy IHRvID1jbC1saWI9LCBhbmQgaXMKCiMrYmVnaW5fZXhhbXBsZQpQT1NJVElPTkFMLVZBUklBQkxF Uwomb3B0aW9uYWwgT1BUSU9OQUwtVkFSSUFCTEVTCiZyZXN0IFJFU1QtVkFSSUFCTEUKJmtleSBL RVktVkFSSUFCTEVTIFsmYWxsb3ctb3RoZXIta2V5c10KJm1hcCBNQVAtVkFSSUFCTEVTCiZhdXgg QVVYSUxMSUFSWS1WQVJJQUJMRVMKIytlbmRfZXhhbXBsZQoKaW4gd2hpY2ggYXQgbGVhc3Qgb25l IG9mIHRoZSBhYm92ZSBjb25zdHJ1Y3RzIG11c3QgYmUgcHJvdmlkZWQuCgojK2JlZ2luX3NyYyBl bWFjcy1saXNwCiAgOzsgPT4gKDEgMiAzCiAgOzsgICAgIDQgNSB0CiAgOzsgICAgICg6azEgMTEx IDprMiAyMjIpCiAgOzsgICAgIDExMSB0CiAgOzsgICAgIDIyMgogIDs7ICAgICAxMTEKICA7OyAg ICAgMzMzIG5pbAogIDs7ICAgICA0NDQ0IDU1NTUpCiAgKHBjYXNlIChsaXN0IDEgMiAzIDQgNSA6 azEgMTExIDprMiAyMjIpCiAgICAoKGxvb3B5ICggYSBiIGMKICAgICAgICAgICAgICAmb3B0aW9u YWwKICAgICAgICAgICAgICBkCiAgICAgICAgICAgICAgKGUgbmlsIGUtc3VwcGxpZWQpCiAgICAg ICAgICAgICAgJnJlc3QKICAgICAgICAgICAgICByCiAgICAgICAgICAgICAgJmtleQogICAgICAg ICAgICAgICgoOmsxIGsxKSBuaWwgazEtc3VwcGxpZWQpCiAgICAgICAgICAgICAgazIKICAgICAg ICAgICAgICAmbWFwCiAgICAgICAgICAgICAgKDprMSBtYXAxKQogICAgICAgICAgICAgIFs6azMg bWFwMyAzMzMgbWFwMy1zdXBwbGllZF0KICAgICAgICAgICAgICAmYXV4CiAgICAgICAgICAgICAg W3gxIDQ0NDRdICh4MiA1NTU1KSkpCiAgICAgKGxpc3QgYSBiIGMKICAgICAgICAgICBkCiAgICAg ICAgICAgZSBlLXN1cHBsaWVkCiAgICAgICAgICAgcgogICAgICAgICAgIGsxIGsxLXN1cHBsaWVk CiAgICAgICAgICAgazIKICAgICAgICAgICBtYXAxCiAgICAgICAgICAgbWFwMyBtYXAzLXN1cHBs aWVkCiAgICAgICAgICAgeDEgeDIpKSkKIytlbmRfc3JjCgoKSW4gbW9yZSBkZXRhaWwsIHRoZSBl bGVtZW50cyBvZiB0aGUgZGVzdHJ1Y3R1cmluZyBzZXF1ZW5jZSBjYW4gYmU6CgotIEEgcG9zaXRp b25hbCB2YXJpYWJsZSB3aGljaCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVs ZW1lbnQgaW4gdGhlCiAgc2VxdWVuY2UuICBUaGVzZSB2YXJpYWJsZXMgY2FuIHRoZW1zZWx2ZXMg YmUgc2VxdWVuY2VzLCBidXQgbXVzdCBiZSBvZiB0aGUKICBjb3JyZWN0IHR5cGUuICBVbmxpa2Ug fnNlcS1sZXR+LCBMb29weSBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhIGdlbmVyaWMKICBzeW50 YXggZm9yIHNlcXVlbmNlcy4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgKCgxIDIg MykgKDQgNSA2KSkKICAgIChsb29weSAobGlzdCBbaSAoaiBrKV0gJyhbMSAoMiAzKV0gWzQgKDUg NildKSkKICAgICAgICAgICAoY29sbGVjdCAobGlzdCBpIGogaykpKQogICMrZW5kX3NyYwoKIytj aW5kZXg6IF8KLSBUaGUgc3ltYm9sID1fPSAoYW4gdW5kZXJzY29yZSkgb3IgYSBzeW1ib2wgYmVn aW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZTogVGhpcwogIG1lYW5zIHRvIGlnbm9yZSB0aGUgZWxl bWVudCBhdCB0aGlzIGxvY2F0aW9uLiAgVGhpcyBjYW4gYmUgbW9yZSBlZmZpY2llbnQuCgogICMr YmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7IE9ubHkgY3JlYXRlcyB0aGUgdmFyaWFibGVzIGBh JyBhbmQgYGQnOgogICAgOzsgPT4gKCgxIDQpICg1IDgpKQogICAgKGxvb3B5IChsaXN0IChhIF8g XyBkKSAnKCgxIDIgMyA0KSAoNSA2IDcgOCkpKQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGEg ZCkpKQoKICAgIDs7IFRoZXNlIHR3byBkZXN0cnVjdHVyaW5ncyBkbyB0aGUgc2FtZSB0aGluZywK ICAgIDs7IGFuZCBvbmx5IGJpbmQgdGhlIHZhcmlhYmxlIGBhJzoKICAgIDs7CiAgICA7OyA9PiAo MSAzKQogICAgKGxvb3B5IChhcnJheSAoYSkgWygxIDIpICgzIDQpXSkKICAgICAgICAgICAoY29s bGVjdCBhKSkKCiAgICA7OyA9PiAoMSAzKQogICAgKGxvb3B5IChhcnJheSAoYSAuIF9pZ25vcmVk KSBbKDEgMikgKDMgNCldKQogICAgICAgICAgIChjb2xsZWN0IGEpKQogICMrZW5kX3NyYwoKIytj aW5kZXg6ICZ3aG9sZQotIFRoZSBzeW1ib2wgPSZ3aG9sZT06IElmID0md2hvbGU9IGlzIHRoZSBm aXJzdCBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSwgdGhlbgogIHRoZSBzZWNvbmQgZWxlbWVudCBv ZiB0aGUgc2VxdWVuY2UgbmFtZXMgYSB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBlbnRpcmUKICB2 YWx1ZSBvZiB3aGF0IGlzIGRlc3RydWN0dXJlZC4KCiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB3aGVu IHVzZWQgaW4gYSBDTCB+bGFtYmRhfiBsaXN0LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAg ICA7OyBTZWUgdGhhdCB0aGUgdmFyaWFibGUgYGJvdGgnIGhvbGRzIHRoZSB2YWx1ZSBvZiB0aGUg ZW50aXJlCiAgICA7OyBsaXN0IGVsZW1lbnQ6CiAgICA7OwogICAgOzsgPT4gKCgoMSAyKSAxIDIp CiAgICA7OyAgICAgKCgzIDQpIDMgNCkpCiAgICAobG9vcHkgKGxpc3QgKCZ3aG9sZSBib3RoIGkg aikgICcoKDEgMikgKDMgNCkpKQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGJvdGggaSBqKSkp CgogICAgKG1hcGNhciAoY2wtZnVuY3Rpb24gKGxhbWJkYSAoKCZ3aG9sZSBib3RoIGkgaikpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IGJvdGggaSBqKSkpCiAgICAgICAgICAgICco KDEgMikgKDMgNCkpKQogICMrZW5kX3NyYwoKIytjaW5kZXg6ICZyZXN0Ci0gVGhlIHN5bWJvbCA9 JnJlc3Q9OiBBIHZhcmlhYmxlIG5hbWVkIGFmdGVyID0mcmVzdD0gY29udGFpbnMgdGhlIHJlbWFp bmluZwogIGVsZW1lbnRzIG9mIHRoZSBkZXN0cnVjdHVyZWQgdmFsdWUgYWZ0ZXIgYW55IHBvc2l0 aW9uYWwgYW5kIG9wdGlvbmFsIHZhbHVlcy4KICBXaGVuIGRlc3RydWN0dXJpbmcgbGlzdHMsIG9u ZSBjYW4gYWxzbyB1c2UgZG90dGVkIG5vdGF0aW9uLCBhcyBpbiBhIENMCiAgfmxhbWJkYX4gbGlz dC4gIFRoZXNlIHZhcmlhYmxlcyBjYW4gdGhlbXNlbHZlcyBiZSBzZXF1ZW5jZXMgdG8gYmUgZnVy dGhlcgogIGRlc3RydWN0dXJlZC4KCiAgV2hlbiB1c2VkIGFmdGVyIG9wdGlvbmFsIHZhbHVlcywg dGhlID0mcmVzdD0gdmFsdWUgaXMgdGhlIHN1YnNlcXVlbmNlIHN0YXJ0aW5nCiAgYXQgdGhlIGlu ZGV4IGFmdGVyIGFueSBwb3NzaWJsZSBvcHRpb25hbCB2YWx1ZXMsIGV2ZW4gd2hlbiB0aG9zZSBv cHRpb25hbAogIHZhbHVlcyBhcmUgbm90IGFjdHVhbGx5IHByZXNlbnQuICBJZiB0aGUgc2VxdWVu Y2UgaXMgbm90IGxvbmcgZW5vdWdoLCB0aGFuIHRoZQogIHN1Yi1zZXF1ZW5jZSBpcyBlbXB0eS4K CiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDEgMiAoMykpCiAgICAocGNhc2Ug KGxpc3QgMSAyIDMpCiAgICAgICgobG9vcHkgKGEgJm9wdGlvbmFsIGIgJnJlc3QgYykpCiAgICAg ICAobGlzdCBhIGIgYykpKQoKICAgIDs7ID0+ICgxIG5pbCBuaWwpCiAgICAocGNhc2UgKGxpc3Qg MSkKICAgICAgKChsb29weSAoYSAmb3B0aW9uYWwgYiAmcmVzdCBjKSkKICAgICAgIChsaXN0IGEg YiBjKSkpCgogICAgOzsgPT4gKDEgW10pCiAgICAocGNhc2UgKHZlY3RvciAxKQogICAgICAoKGxv b3B5IFthICZvcHRpb25hbCBfIF8gXyBfICZyZXN0IGNdKQogICAgICAgKGxpc3QgYSBjKSkpCiAg IytlbmRfc3JjCgogIFRoaXMgPSZyZXN0PSBpcyB0aGUgc2FtZSBhcyB3aGVuIHVzZWQgaW4gfnNl cS1sZXR+LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyA9PiAoKDEgWzIgM10pICg0 IFs1IDZdKSkKICAgIChsb29weSAobGlzdCBbaSAmcmVzdCBqXSAnKFsxIDIgM10gWzQgNSA2XSkp CiAgICAgICAgICAgKGNvbGxlY3QgKGxpc3QgaSBqKSkpCgogICAgOzsgPT4gKCgxIDIgMykgKDQg NSA2KSkKICAgIChsb29weSAobGlzdCBbaSAmcmVzdCBbaiBrXV0gJyhbMSAyIDNdIFs0IDUgNl0p KQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGkgaiBrKSkpCgogICAgOzsgPT4gKCgxICgyIDMp KSAoNCAoNSA2KSkpCiAgICAobG9vcHkgKGxpc3QgKGkgJnJlc3QgaikgJygoMSAyIDMpICg0IDUg NikpKQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGkgaikpKQoKICAgIDs7ID0+ICgoMSAyIDMp ICg0IDUgNikpCiAgICAobG9vcHkgKGxpc3QgKGkgJnJlc3QgKGogaykpICcoKDEgMiAzKSAoNCA1 IDYpKSkKICAgICAgICAgICAoY29sbGVjdCAobGlzdCBpIGogaykpKQoKICAgIDs7ID0+ICgoMSAy IDMpICg0IDUgNikpCiAgICAobG9vcHkgKGxpc3QgKGkgLiAoaiBrKSkgJygoMSAyIDMpICg0IDUg NikpKQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGkgaiBrKSkpCgogICAgOzsgPT4gKCgxIDIg MykgKDQgNSA2KSkKICAgIChsb29weSAobGlzdCAoaSAmcmVzdCBbaiBrXSkgJygoMSAuIFsyIDNd KSAoNCAuIFs1IDZdKSkpCiAgICAgICAgICAgKGNvbGxlY3QgKGxpc3QgaSBqIGspKSkKCiAgICA7 OyA9PiAoKDEgMiAzKSAoNCA1IDYpKQogICAgKGxvb3B5IChsaXN0IChpIC4gW2oga10pICcoKDEg LiBbMiAzXSkgKDQgLiBbNSA2XSkpKQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGkgaikpKQog ICMrZW5kX3NyYwoKIytjaW5kZXg6ICZvcHRpb25hbAotIFRoZSBzeW1ib2wgPSZvcHRpb25hbD06 IEEgdmFyaWFibGUgbmFtZWQgYWZ0ZXIgPSZvcHRpb25hbD0gaXMgb3B0aW9uYWwuICBJZgogIHRo ZSBsaXN0IGlzIG5vdCBsb25nIGVub3VnaCB0byBiaW5kIHRoZSB2YXJpYWJsZSwgdGhlbiB0aGUg dmFyaWFibGUgaXMgYm91bmQKICB0byB+bmlsfiBvciwgaWYgc3BlY2lmaWVkLCBhIGRlZmF1bHQg dmFsdWUuICBBZGRpdGlvbmFsbHksIG9uZSBtYXkgYmluZCBhCiAgdmFyaWFibGUgdG8gcmVjb3Jk IHdoZXRoZXIgdGhlIGxpc3Qgd2FzIGxvbmcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIG9wdGlvbmFs CiAgdmFsdWUuCgogIEFzIGluIGEgQ0wgfmxhbWJkYX4gbGlzdCwgdGhlIHZhcmlhYmxlIGhhcyB0 aGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CgogIC0gPShWQVIgREVGQVVMVCBTVVBQTElF RCk9IG9yID1bVkFSIERFRkFVTFQgU1VQUExJRURdPSwgaW4gd2hpY2ggPVZBUj0gaXRzZWxmCiAg ICBjYW4gYmUgYSBzZXF1ZW5jZQoKICAtID0oVkFSIERFRkFVTFQpPSBvciA9W1ZBUiBERUZBVUxU XT0sIGluIHdoaWNoID1WQVI9IGl0c2VsZiBjYW4gYmUgYSBzZXF1ZW5jZQoKICAtID0oVkFSKT0g b3IgPVtWQVJdPSwgaW4gd2hpY2ggPVZBUj0gaXRzZWxmIGNhbiBiZSBhIHNlcXVlbmNlCgogIC0g YSBzeW1ib2wgPVZBUj0KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDEgMiA4 OCB0IG5pbCkKICAgIChsb29weSAoYXJyYXkgKGEgJm9wdGlvbmFsICgoYiAmb3B0aW9uYWwgKGMg ODggYy1zdXBwbGllZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgNzcp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmMtc3VwcGxpZWQpKQogICAgICAgICAg ICAgICAgICBbKDEgKDIpKV0pCiAgICAgICAgICAgKGNvbGxlY3QgKGxpc3QgYSBiIGMgYmMtc3Vw cGxpZWQgYy1zdXBwbGllZCkpKQoKICAgIDs7ID0+ICgxIDIgMyB0IHQpCiAgICAobG9vcHkgKGFy cmF5IChhICZvcHRpb25hbCAoKGIgJm9wdGlvbmFsIChjIDg4IGMtc3VwcGxpZWQpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IDc3KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJjLXN1cHBsaWVkKSkKICAgICAgICAgICAgICAgICAgWygxICgyIDMpKV0pCiAg ICAgICAgICAgKGNvbGxlY3QgKGxpc3QgYSBiIGMgYmMtc3VwcGxpZWQgYy1zdXBwbGllZCkpKQog ICMrZW5kX3NyYwoKICA9Jm9wdGlvbmFsPSBjYW5ub3QgYmUgdXNlZCBhZnRlciA9JnJlc3Q9LgoK ICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyA9PiAoKDEgMiAzIDQgNSkKICAgIDs7ICAg ICAxCiAgICA7OyAgICAgMgogICAgOzsgICAgIDMKICAgIDs7ICAgICAoNCA1KSkKICAgIChsb29w eSAoYXJyYXkgKCZ3aG9sZSBhbGwgYSBiICZvcHRpb25hbCBjICZyZXN0IGQpCiAgICAgICAgICAg ICAgICAgIFsoMSAyIDMgNCA1KV0pCiAgICAgICAgICAgKGNvbGxlY3QgKGxpc3QgYWxsIGEgYiBj IGQpKSkKCiAgICA7OyBTYW1lIGFzIGFib3ZlOgogICAgKGxvb3B5IChhcnJheSAoJndob2xlIGFs bCBhIGIgJnJlc3QgKGMgJnJlc3QgZCkpCiAgICAgICAgICAgICAgICAgIFsoMSAyIDMgNCA1KV0p CiAgICAgICAgICAgKGNvbGxlY3QgKGxpc3QgYWxsIGEgYiBjIGQpKSkKICAjK2VuZF9zcmMKCiMr Y2luZGV4OiAma2V5CiMrY2luZGV4OiAma2V5cwotIFRoZSBzeW1ib2wgPSZrZXk9IG9yID0ma2V5 cz06IFZhcmlhYmxlcyBuYW1lZCBhZnRlciA9JmtleT0gYXJlIHRyYW5zZm9ybWVkCiAgaW50byBr ZXlzIHdob3NlIHZhbHVlcyB3aWxsIGJlIHNvdWdodCB1c2luZyB+cGxpc3QtZ2V0fiwgd2hpY2gg cmV0dXJucyB+bmlsfgogIGlmIHRoZSBrZXkgaXNuJ3QgZm91bmQgaW4gdGhlIGxpc3QuCgogIEN1 cnJlbnRseSwgb25seSBsaXN0cyBzdXBwb3J0IHRoaXMgZGVzdHJ1Y3R1cmluZy4KCiAgIytiZWdp bl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKCgxIDIgbmlsKSAoNCA1IG5pbCkpCiAgICAobG9v cHkgKGxpc3QgKCZrZXkgYSBiIG1pc3NpbmcpICcoKDpiIDIgOmMgMyA6YSAxKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICg6YSA0IDpiIDUgOmMgNikpKQogICAgICAgICAg IChjb2xsZWN0IChsaXN0IGEgYiBtaXNzaW5nKSkpCiAgIytlbmRfc3JjCgogIFZhcmlhYmxlcyBh ZnRlciA9JmtleT0gY2FuIGJlIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CgogIC0gPSgoVkFSIEtF WSkgREVGQVVMVCBTVVBQTElFRCk9LCA9W1tWQVIgS0VZXSBERUZBVUxUIFNVUFBMSUVEXT0sID0o W1ZBUiBLRVldCiAgICBERUZBVUxUIFNVUFBMSUVEKT0sIG9yID1bKFZBUiBLRVkpIERFRkFVTFQg U1VQUExJRURdPSwgaW4gd2hpY2ggPVZBUj0gaXRzZWxmCiAgICBjYW4gYmUgYSBzZXF1ZW5jZQoK ICAtID0oKFZBUiBLRVkpIERFRkFVTFQpPSwgPVtbVkFSIEtFWV0gREVGQVVMVF09LCA9KFtWQVIg S0VZXSBERUZBVUxUKT0sIG9yCiAgICA9WyhWQVIgS0VZKSBERUZBVUxUXT0sIGluIHdoaWNoID1W QVI9IGl0c2VsZiBjYW4gYmUgYSBzZXF1ZW5jZQoKICAtID0oKFZBUiBLRVkpKT0sID1bW1ZBUiBL RVldXT0sID0oW1ZBUiBLRVldKT0sIG9yID1bKFZBUiBLRVkpXT0sIGluIHdoaWNoCiAgICA9VkFS PSBpdHNlbGYgY2FuIGJlIGEgc2VxdWVuY2UKCiAgLSA9KFZBUiBERUZBVUxUIFNVUFBMSUVEKT0g b3IgPVtWQVIgREVGQVVMVCBTVVBQTElFRF09LCBpbiB3aGljaCA9VkFSPSBpcyBhCiAgICBzeW1i b2wKCiAgLSA9KFZBUiBERUZBVUxUKT0gb3IgPVtWQVIgREVGQVVMVF09LCBpbiB3aGljaCA9VkFS PSBpcyBhIHN5bWJvbAoKICAtID0oVkFSKT0gb3IgPVtWQVJdPSwgaW4gd2hpY2ggPVZBUj0gaXMg YSBzeW1ib2wKCiAgLSBhIHN5bWJvbCA9VkFSPQoKICBJZiBhIGRlZmF1bHQgdmFsdWUgaXMgcHJv dmlkZWQsIHRoZW4ga2V5cyBhcmUgc291Z2h0IHVzaW5nIH5wbGlzdC1tZW1iZXJ+LgogIFRoYXQg d2F5LCBhIHZhbHVlIG9mIH5uaWx+IGZvciBhIGtleSBpcyBub3QgdGhlIHNhbWUgYXMgYSBtaXNz aW5nIGtleS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgTm90ZSB0aGF0IGBuaWwn IGlzIG5vdCB0aGUgc2FtZSBhcyBhIG1pc3NpbmcgdmFsdWU6CiAgICA7OwogICAgOzsgPT4gKCgx IDIgbmlsIDI1KSAoNCA1IDI0IDI1KSkKICAgIChsb29weSAobGlzdCAoJmtleSBhIGIgKGMgMjQp IChtaXNzaW5nIDI1KSkgJygoOmIgMiA6YyBuaWwgOmEgMSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOmEgNCA6YiA1KSkpCiAgICAgICAgICAgKGNv bGxlY3QgKGxpc3QgYSBiIGMgbWlzc2luZykpKQogICMrZW5kX3NyYwoKICBCeSBkZWZhdWx0LCB0 aGUgc291Z2h0IGtleSBpcyBtYWRlIGJ5IHByZXBlbmRpbmcgYSBjb2xvbiAoIjoiKSB0byB0aGUg c3ltYm9sCiAgbmFtZS4gIEZvciBleGFtcGxlLCA9YT0gc2VhcmNoZXMgZm9yID06YT0gYW5kID1i PSBzZWFyY2hlcyBmb3IgPTpiPS4gIExpa2UgaW4KICA9Y2wtbGliPSwgYW4gZXZhbHVhdGVkIGtl eSBjYW4gYmUgc291Z2h0IGJ5IHVzaW5nIGEgc3ViLXNlcXVlbmNlIGFzIHRoZSBmaXJzdAogIGVs ZW1lbnQgb2YgdGhlIGxpc3QuICBXaGVuID1WQVI9IGlzIGEgc2VxdWVuY2UsIHRoZSBrZXkgbXVz dCBiZSBwcm92aWRlZAogIHNlcGFyYXRlbHkuCgogICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAg IDs7ID0+ICgoMSBuaWwgdCkpCiAgICAobG9vcHkgKGxpc3QgKCZrZXkgKCg6Y2F0IGMpKSAoKDpk b2cgZCkgMjcgZG9nLWZvdW5kKSkKICAgICAgICAgICAgICAgICAnKCg6Y2F0IDEgOmRvZyBuaWwp KSkKICAgICAgICAgICAoY29sbGVjdCAobGlzdCBjIGQgZG9nLWZvdW5kKSkpCiAgIytlbmRfc3Jj CgogIEtleXMgYXJlIHNvdWdodCBpbiB2YWx1ZXMgYWZ0ZXIgdGhvc2UgYm91bmQgdG8gcG9zaXRp b25hbCB2YXJpYWJsZXMsIHdoaWNoIGNhbgogIGJlIHRoZSBzYW1lIHZhbHVlcyBib3VuZCB0byB0 aGUgdmFyaWFibGUgbmFtZWQgYnkgPSZyZXN0PSB3aGVuIGJvdGggYXJlCiAgdXNlZC4KCiAgIyti ZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgS2V5cyBhcmUgb25seSBzb3VnaHQgYWZ0ZXIgcG9z aXRpb25hbCB2YXJpYWJsZXM6CiAgICA7OwogICAgOzsgPT4gKCgxIDIgOmsxICdpZ25vcmVkIDMp KQogICAgKGxvb3B5IChhcnJheSAoYSBiIGMgZCAma2V5IGsxKSBbKDEgMiA6azEgJ2lnbm9yZWQg OmsxIDMpXSkKICAgICAgICAgICAoY29sbGVjdCAobGlzdCBhIGIgYyBkIGsxKSkpCgogICAgOzsg SWYgYCZyZXN0JyBpcyB1c2VkLCBrZXlzIGFyZSBzb3VnaHQgb25seSBpbiB0aGF0IHZhcmlhYmxl OgogICAgOzsKICAgIDs7ID0+ICgoMSAoOmsxIDMpIDMpKQogICAgKGxvb3B5IChhcnJheSAoYSAm cmVzdCBiICZrZXkgazEpIFsoMSA6azEgMyldKQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGEg YiBrMSkpKQogICMrZW5kX3NyYwoKICA9JmtleT0gYW5kID0mcmVzdD0gY2FuIGJlIHVzZWQgaW4g YW55IG9yZGVyLCBidXQgPSZrZXk9IG11c3QgY29tZSBiZWZvcmUKICB0aGUgZG90IGluIGRvdHRl ZCBsaXN0cy4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKCgxICg6azEgMykg MykpCiAgICAobG9vcHkgKGFycmF5IChhICZyZXN0IGIgJmtleSBrMSkgWygxIDprMSAzKV0pCiAg ICAgICAgICAgKGNvbGxlY3QgKGxpc3QgYSBiIGsxKSkpCgogICAgKGxvb3B5IChhcnJheSAoYSAm a2V5IGsxICZyZXN0IGIpIFsoMSA6azEgMyldKQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGEg YiBrMSkpKQoKICAgIChsb29weSAoYXJyYXkgKGEgJmtleSBrMSAuIGIpIFsoMSA6azEgMyldKQog ICAgICAgICAgIChjb2xsZWN0IChsaXN0IGEgYiBrMSkpKQogICMrZW5kX3NyYwoKICBMaWtlIGlu ID1jbC1saWI9LCBpZiwgYWZ0ZXIgc2VhcmNoaW5nIGZvciB0aGUgb3RoZXIga2V5cywgdGhlcmUg cmVtYWlucyBhbgogIHVubWF0Y2hlZCBrZXkgaW4gdGhlIGRlc3RydWN0dXJlZCB2YWx1ZSwgYW4g ZXJyb3IgaXMgc2lnbmFsZWQgdW5sZXNzCiAgPSZhbGxvdy1vdGhlci1rZXlzPSBpcyBhbHNvIHVz ZWQsIG9yIHVubGVzcyB0aGUga2V5ID06YWxsb3ctb3RoZXIta2V5cz0gaXMKICBhc3NvY2lhdGVk IHdpdGggYSBub24tbmlsIHZhbHVlIGluIHRoZSBwcm9wZXJ0eSBsaXN0LCBldmVuIHdoZW4gdXNp bmcgPSZyZXN0PS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgRXJyb3IgZHVlIHRv IHByZXNlbmNlIG9mIGA6azMnOgogICAgKGNsLWRlc3RydWN0dXJpbmctYmluZCAoYSBiICZyZXN0 IGMgJmtleSBrMSBrMikKICAgICAgICAobGlzdCAxIDIgOmsxIDMgOmsyIDQgOmszIDUpCiAgICAg IChsaXN0IGEgYiBjIGsxIGsyKSkKCiAgICA7OyBXb3JrcyBhcyBleHBlY3RlZDoKICAgIDs7CiAg ICA7OyA9PiAoMSAyICg6azEgMyA6azIgNCA6azMgNSkgMyA0KQogICAgKGNsLWRlc3RydWN0dXJp bmctYmluZCAoYSBiICZyZXN0IGMgJmtleSBrMSBrMiAmYWxsb3ctb3RoZXIta2V5cykKICAgICAg ICAobGlzdCAxIDIgOmsxIDMgOmsyIDQgOmszIDUpCiAgICAgIChsaXN0IGEgYiBjIGsxIGsyKSkK ICAjK2VuZF9zcmMKCiMrY2luZGV4OiAmbWFwCi0gVGhlIHN5bWJvbCA9Jm1hcD06IFZhcmlhYmxl cyBhZnRlciA9Jm1hcD0gYXJlIGJvdW5kIHNpbWlsYXIgdG8gfm1hcC1sZXR+IGZyb20KICB0aGUg bGlicmFyeSA9bWFwLmVsPS4gID0mbWFwPSB3b3JrcyBzaW1pbGFybHkgdG8gPSZrZXk9LCBidXQg aGFzIGEgZmV3CiAgaW1wb3J0YW50IGRpZmZlcmVuY2VzOgoKICAxLiBNYXBzIGFyZSBtb3JlIGdl bmVyaWMgdGhhbiBwcm9wZXJ0eSBsaXN0cyAoInBsaXN0cyIpLiAgQSAibWFwIiBpcyBhIGdlbmVy aWMKICAgICBzdHJ1Y3R1cmUgd2hpY2ggc3VwcG9ydHMgdGhlIGZ1bmN0aW9uIH5tYXAtZWx0fi4g IFRoZSBidWlsdC1pbiBtYXBzIGFyZQogICAgIGFycmF5cywgcHJvcGVydHkgbGlzdHMgKCJwbGlz dHMiKSwgYXNzb2NpYXRpb24gbGlzdHMgKCJhbGlzdHMiKSwgYW5kIGhhc2gKICAgICB0YWJsZXMu ICBUaGlzIGdlbmVyYWxpdHkgbWVhbnMgdGhhdCBpdCBpcyBzbG93ZXIgdGhhbiA9JmtleT0gZm9y IHByb3BlcnR5CiAgICAgbGlzdHMsIHRob3VnaCB0aGUgZGlmZmVyZW5jZSBzaG91bGQgYmUgc21h bGwuCgogIDIuID0mbWFwPSB3aWxsIG5vdCBzaWduYWwgYW4gZXJyb3IgaWYgdGhlcmUgYXJlIHVu dXNlZCBrZXlzIGluc2lkZSB0aGUKICAgICBkZXN0cnVjdHVyZWQgdmFsdWU7IHRoZXJlIGlzIG5v ID0mYWxsb3ctb3RoZXIta2V5cz0gZm9yID1tYXA9LiAgSW4gdGhlIHNhbWUKICAgICB2ZWluLCBp dCBjYW5ub3QgYmUgbWFkZSB0byBzaWduYWwgYW4gZXJyb3IgaWYgdGhlcmUgYXJlIHVudXNlZCBr ZXlzLgoKICBWYXJpYWJsZXMgYWZ0ZXIgPSZtYXA9IGNhbiBiZSBvZiB0aGUgZm9sbG93aW5nIGZv cm1zOgoKICAtID0oS0VZIFZBUiBERUZBVUxUIFNVUFBMSUVEKT0gb3IgPVtLRVkgVkFSIERFRkFV TFQgU1VQUExJRURdPSwgaW4gd2hpY2ggPVZBUj0KICAgIGl0c2VsZiBjYW4gYmUgYSBzZXF1ZW5j ZQoKICAtID0oS0VZIFZBUiBERUZBVUxUKT0gb3IgPVtLRVkgVkFSIERFRkFVTFRdPSwgaW4gd2hp Y2ggPVZBUj0gaXRzZWxmIGNhbiBiZSBhCiAgICBzZXF1ZW5jZQoKICAtID0oS0VZIFZBUik9IG9y ID1bS0VZIFZBUl09LCBpbiB3aGljaCA9VkFSPSBpdHNlbGYgY2FuIGJlIGEgc2VxdWVuY2UKCiAg LSA9KFZBUik9IG9yID1bVkFSXT0sIGluIHdoaWNoID1WQVI9IGlzIGEgc3ltYm9sCgogIC0gYSBz eW1ib2wgPVZBUj0KCiAgV2hlbiBzcGVjaWZ5aW5nID1LRVk9LCA9VkFSPSBjYW4gYmUgYSBzZXF1 ZW5jZSB0byBwZXJmb3JtIGZ1cnRoZXIKICBkZXN0cnVjdHVyaW5nLiAgV2hlbiA9S0VZPSBpcyBu b3QgZ2l2ZW4sIHRoZW4gdGhlIGtleSBpcyB0aGUgc3ltYm9sID1WQVI9LCBhcwogIGluIH4ocXVv dGUgVkFSKX4uCgogICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICgoMSAyIDMgNCAy NykpCiAgICAobG9vcHkgKGFycmF5IChhIGIgJm1hcCBjICgnZG9nIGQpICg6ZWxlcGhhbnQgZSAy NykpCiAgICAgICAgICAgICAgICAgIFsoMSAyIGMgMyBkb2cgNCldKQogICAgICAgICAgIChjb2xs ZWN0IChsaXN0IGEgYiBjIGQgZSkpKQoKICAgIDs7ID0+ICgoMSAyIDMgNCAyNyAzMyBuaWwpKQog ICAgKGxvb3B5IChhcnJheSAoIGEgYgogICAgICAgICAgICAgICAgICAgICZtYXAKICAgICAgICAg ICAgICAgICAgICBjCiAgICAgICAgICAgICAgICAgICAgKCdkb2cgZCkKICAgICAgICAgICAgICAg ICAgICAoOmVsZXBoYW50IGUgMjcpCiAgICAgICAgICAgICAgICAgICAgKDpmb3ggZiAzMyBmb3gt Zm91bmQpKQogICAgICAgICAgICAgICAgICBbKDEgMiAoYyAuIDMpIChkb2cgLiA0KSldKQogICAg ICAgICAgIChjb2xsZWN0IChsaXN0IGEgYiBjIGQgZSBmIGZveC1mb3VuZCkpKQoKICAgIDs7ID0+ ICgoMSAyIDUgdCkpCiAgICAobG9vcHkgKGFycmF5IChhIGIgJm1hcCAoOmZveCBmIDMzIGZveC1m b3VuZCkpCiAgICAgICAgICAgICAgICAgIFsoMSAyIChjIC4gMykgKGRvZyAuIDQpICg6Zm94IC4g NSkpXSkKICAgICAgICAgICAoY29sbGVjdCAobGlzdCBhIGIgZiBmb3gtZm91bmQpKSkKCiAgICA7 OyBGb3IgYXJyYXlzLCB0aGUga2V5IGlzIHRoZSBpbmRleDoKICAgIDs7CiAgICA7OyA9PiAoKDIw IDUwKSkKICAgIChsb29weSAobGlzdCAoJm1hcCAoMiB0d28tdGltZXMtdGVuKSAoNSBmaXZlLXRp bWVzLXRlbikpCiAgICAgICAgICAgICAgICAgKGxpc3QgIFswMCAxMCAyMCAzMCA0MCA1MCA2MCA3 MCA4MCA5MCAxMDBdKSkKICAgICAgICAgICAoY29sbGVjdCAobGlzdCB0d28tdGltZXMtdGVuIGZp dmUtdGltZXMtdGVuKSkpCiAgIytlbmRfc3JjCgogIFdoZW4gPSZtYXA9IGFuZCA9JmtleT0gYXJl IHVzZWQgdG9nZXRoZXIsIHRoZXkgc2VhcmNoIHRocm91Z2ggdGhlIHNhbWUKICB2YWx1ZXMuICBU aGUgdXNlIG9mIGJvdGggaXMgbm9ybWFsbHkgcmVkdW5kYW50LgoKICAjK2JlZ2luX3NyYyBlbWFj cy1saXNwCiAgICA7OyA9PiAoMSAyICg6azEgMyA6azIgNCkKICAgIDs7ICAgICAzIDQKICAgIDs7 ICAgICAzIDQpCiAgICAobG9vcHkgKGFycmF5ICggYSBiCiAgICAgICAgICAgICAgICAgICAgJnJl c3QgYwogICAgICAgICAgICAgICAgICAgICZrZXkgKCg6azEga2V5LWsxKSkgKCg6azIga2V5LWsy KSkKICAgICAgICAgICAgICAgICAgICAmbWFwICg6azEgbWFwLWsxKSAoOmsyIG1hcC1rMikpCiAg ICAgICAgICAgICAgICAgIFsoMSAyIDprMSAzIDprMiA0KV0pCiAgICAgICAgICAgKGNvbGxlY3Qg KGxpc3QgYSBiIGMKICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktazEga2V5LWsyCiAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFwLWsxIG1hcC1rMikpKQogICMrZW5kX3NyYwoKLSBUaGUg c3ltYm9sID0mYXV4PTogVmFyaWFibGVzIG5hbWVkIGFmdGVyID0mYXV4PSBhcmUgYm91bmQgdG8g dGhlIGdpdmVuIHZhbHVlcy4KICBMaWtlIGluIENMIExpYiwgPSZhdXg9IG11c3QgY29tZSBsYXN0 IGluIHRoZSBsaXN0LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyA9PiAoNyA3IDcp CiAgICAobG9vcHkgKGN5Y2xlIDMpCiAgICAgICAgICAgKGNvbGxlY3QgKCZhdXggW2NvbGwgN10p ICdpZ25vcmVkKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBjb2xsKSkKICAjK2VuZF9zcmMK CgoqKiBHZW5lcmljIEV2YWx1YXRpb24KOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogU2V0dGlu ZyB2YXJpYWJsZXMsIGV2YWx1YXRpbmcgZXhwcmVzc2lvbnMsIGV0Yy4KOkNVU1RPTV9JRDogY29t bWFuZHMtZm9yLWdlbmVyaWMtZXZhbHVhdGlvbgo6RU5EOgoKVGhlc2UgZ2VuZXJpYyBjb21tYW5k cyBhcmUgZm9yIHNldHRpbmdzIHZhbHVlcyBhbmQgcnVubmluZyBzdWItY29tbWFuZHMgb3IKc3Vi LWV4cHJlc3Npb25zIGR1cmluZyB0aGUgbG9vcC4gIFRoZXNlIGNvbW1hbmRzIGRvIG5vdCBhZmZl Y3QgbWFjcm8ncyByZXR1cm4KdmFsdWUgYW5kIGRvIG5vIGFmZmVjdCBob3cgdGhlIGxvb3AgaXRl cmF0ZXMuCgojK2ZpbmRleDogZG8KLSA9KGRvIEVYUFJTKT0gOjogRXZhbHVhdGUgbXVsdGlwbGUg TGlzcCBleHByZXNzaW9ucywgbGlrZSBhID1wcm9nbj0uCgogIFlvdSBjYW5ub3QgaW5jbHVkZSBh cmJpdHJhcnkgY29kZSBpbiB0aGUgbG9vcCBib2R5IGluIH5sb29weX4uICBUcnlpbmcgdG8gZG8K ICBzbyB3aWxsIHJlc3VsdCBpbiBlcnJvcnMsIGFzIHRoZSBtYWNybyB3aWxsIGF0dGVtcHQgdG8g aW50ZXJwcmV0IHN1Y2ggY29kZSBhcwogIGEgY29tbWFuZC4KCiAgVG8gdXNlIGxvb3B5IGNvbW1h bmRzIGluIGFyYml0cmFyeSBjb2RlLCB1c2UgdGhlIG1hY3JvIH5sb29weS1pdGVyfiBpbnN0ZWFk CiAgKFtbI2xvb3B5LWl0ZXJdXSkuCgogICMrQkVHSU5fU1JDIGVtYWNzLWxpc3AKICAgIChsb29w eSAobGlzdCBpICcoMSAyIDMpKQogICAgICAgICAgIChkbyAobWVzc2FnZSAiJWQiIGkpKSkKICAj K0VORF9TUkMKCiMrZmluZGV4OiBncm91cAojK2ZpbmRleDogY29tbWFuZC1kbwotID0oZ3JvdXB8 Y29tbWFuZC1kbyBbQ01EU10pPSA6OiBFdmFsdWF0ZSBtdWx0aXBsZSBsb29wIGNvbW1hbmRzLCBh cyBpZiBpbiBhCiAgPXByb2duPS4gIFRoaXMgaXMgc2ltaWxhciB0byA9ZG89LCBidXQgcnVucyBj b21tYW5kcyBpbnN0ZWFkIG9mIG5vcm1hbCBMaXNwCiAgZXhwcmVzc2lvbnMuICBDdXJyZW50bHks IHRoaXMgY29tbWFuZCBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzZWQgd2l0aGluIHRoZQogID1pZj0g Y29tbWFuZC4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgUmVwb3J0IHdoZXRoZXIg YW4gZXZlbiBudW1iZXIgaXMgZm91bmQsIG9yIHJldHVybiB0aGUgc3VtIG9mCiAgICA7OyB0aGUg bGlzdCdzIGVsZW1lbnRzLiAgVG8gYmUgY2xlYXIsIHRoaXMgaXMgbm90IGFuIGlkaW9tYXRpYyBl eGFtcGxlLgoKICAgIDs7IFJldHVybnMgc3VtOgogICAgOzsgPT4gOQogICAgKGxvb3B5IChsaXN0 IGkgJygxIDMgNSkpCiAgICAgICAgICAgKGlmIChjbC1ldmVucCBpKQogICAgICAgICAgICAgICAo Z3JvdXAKICAgICAgICAgICAgICAgIChkbyAobWVzc2FnZSAiRXZlbiBmb3VuZC4iKSkKICAgICAg ICAgICAgICAgIChyZXR1cm4gaSkpCiAgICAgICAgICAgICAoc3VtIGkpKSkKCiAgICA7OyBSZXR1 cm5zIHRoZSBkZXRlY3RlZCBldmVuIG51bWJlcjoKICAgIDs7ID0+IDIKICAgIChsb29weSAobGlz dCBpICcoMSAzIDIgNSkpCiAgICAgICAgICAgKGlmIChjbC1ldmVucCBpKQogICAgICAgICAgICAg ICAoY29tbWFuZC1kbwogICAgICAgICAgICAgICAgKGRvIChtZXNzYWdlICJFdmVuIGZvdW5kLiIp KQogICAgICAgICAgICAgICAgKHJldHVybiBpKSkKICAgICAgICAgICAgIChzdW0gaSkpKQogICMr ZW5kX3NyYwoKIytmaW5kZXg6IHNldAojK2ZpbmRleDogc2V0dGluZwojK2ZpbmRleDogZXhwcgoj K2ZpbmRleDogZXhwcnMKLSA9KHNldHxleHByIFZBUiBbRVhQUlNdKT0gOjogQmluZCA9VkFSPSB0 byBlYWNoID1FWFBSPSBpbiBvcmRlci4gIE9uY2UgdGhlIGxhc3QKICA9RVhQUj0gaXMgcmVhY2hl ZCwgaXQgaXMgdXNlZCByZXBlYXRlZGx5IGZvciB0aGUgcmVzdCBvZiB0aGUgbG9vcC4gIFdpdGgg bm8KICA9RVhQUj0sID1WQVI9IGlzIGJvdW5kIHRvIH5uaWx+IGR1cmluZyBlYWNoIGl0ZXJhdGlv biBvZiB0aGUgbG9vcC4KCiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlhc2VzID1zZXR0 aW5nPSBhbmQgPWV4cHJzPS4KCiAgVW5saWtlIHRoZSBFbWFjcyBMaXNwIGZ1bmN0aW9uIH5zZXR+ LCB0aGUgdmFyaWFibGUgbmFtZSBzaG91bGQgbm90IGJlIHF1b3RlZC4KICBVbmxpa2UgdGhlIEVt YWNzIExpc3Agc3BlY2lhbCBmb3JtIH5zZXRxfiwgdGhlIGNvbW1hbmQgPXNldD0gb25seSBzZXRz IG9uZQogIHZhcmlhYmxlLCBhbmQgdGhpcyB2YXJpYWJsZSBpcyBieSBkZWZhdWx0IH5sZXR+LWJv dW5kIGFyb3VuZCB0aGUgbG9vcC4gIFRvCiAgc3RvcCA9VkFSPSBmcm9tIGJlaW5nIH5sZXR+LWJv dW5kIGFyb3VuZCB0aGUgbG9vcCwgdXNlIHRoZSBzcGVjaWFsIG1hY3JvCiAgYXJndW1lbnQgPXdp dGhvdXQ9IChbWyNtYWNyby1hcmd1bWVudHNdXSkuCgogICMrQkVHSU5fU1JDIGVtYWNzLWxpc3AK ICAgIDs7ID0+ICcoMSAyIDMgMyAzKQogICAgKGxvb3B5IChjeWNsZSA1KQogICAgICAgICAgIChz ZXQgaSAxIDIgMykKICAgICAgICAgICAoY29sbGVjdCBjb2xsIGkpCiAgICAgICAgICAgKGZpbmFs bHktcmV0dXJuIGNvbGwpKQoKICAgIDs7ID0+ICcoMCAxIDIgMyA0KQogICAgKGxvb3B5IChjeWNs ZSA1KQogICAgICAgICAgIChzZXQgaSAwICgxKyBpKSkKICAgICAgICAgICAoY29sbGVjdCBjb2xs IGkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGNvbGwpKQogICMrRU5EX1NSQwoKIytmaW5k ZXg6IHNldC1wcmV2CiMrZmluZGV4OiBzZXR0aW5nLXByZXYKIytmaW5kZXg6IHByZXYtc2V0CiMr ZmluZGV4OiBwcmV2LWV4cHIKIytmaW5kZXg6IHByZXYKLSA9KHNldC1wcmV2fHByZXYtZXhwciBW QVIgVkFMICZrZXkgYmFjayk9IDo6IEJpbmQgPVZBUj0gdG8gYSB2YWx1ZSA9VkFMPSBmcm9tIGEK ICBwcmV2aW91cyBjeWNsZSBpbiB0aGUgbG9vcC4gIFdpdGggPUJBQ0s9IChkZWZhdWx0OiAxKSwg dXNlIHRoZSB2YWx1ZSBmcm9tIHRoYXQKICBtYW55IGN5Y2xlcyBwcmV2aW91cy4gIFRoaXMgY29t bWFuZCAvZG9lcyBub3QvIHdvcmsgbGlrZSBhIHF1ZXVlOyBpdCBhbHdheXMKICB1c2VzIHRoZSB2 YWx1ZSBmcm9tIHRoZSA9QkFDSz0tdGggcHJldmlvdXMgY3ljbGUsIHJlZ2FyZGxlc3Mgb2Ygd2hl biB0aGUKICBjb21tYW5kIGlzIHJ1bi4KCiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlh c2VzID1zZXR0aW5nLXByZXY9LCA9cHJldi1zZXQ9LCBhbmQgPXByZXY9LgoKICAjK2JlZ2luX3Ny YyBlbWFjcy1saXNwCiAgICA7OyA9PiAobmlsIDEgMiAzIDQpCiAgICAobG9vcHkgKGxpc3QgaSAn KDEgMiAzIDQgNSkpCiAgICAgICAgICAgKHNldC1wcmV2IGogaSkKICAgICAgICAgICAoY29sbGVj dCBqKSkKCiAgICA7OyA9PiAobmlsIG5pbCBuaWwgMSAyKQogICAgKGxvb3B5IChsaXN0IGkgJygx IDIgMyA0IDUpKQogICAgICAgICAgIChzZXQtcHJldiBqIGkgOmJhY2sgMykKICAgICAgICAgICAo Y29sbGVjdCBqKSkKCiAgICA7OyA9PiAoKGZpcnN0LXZhbCBuaWwpIChmaXJzdC12YWwgbmlsKSAo MSAyKSAoMyA0KSkKICAgIChsb29weSAod2l0aCAoaiAnZmlyc3QtdmFsKSkKICAgICAgICAgICAo bGlzdCBpICcoKDEgLiAyKSAoMyAuIDQpICg1IC4gNikgKDcgLiA4KSkpCiAgICAgICAgICAgKHNl dC1wcmV2IChqIC4gaykgaSA6YmFjayAyKQogICAgICAgICAgIChjb2xsZWN0IChsaXN0IGogaykp KQoKICAgIDs7IE5PVEU6IGBwcmV2LWV4cHInIGtlZXBzIHRyYWNrIG9mIHRoZSBwcmV2aW91cyB2 YWx1ZSBvZiBgaScsCiAgICA7OyAgICAgICBldmVuIHdoZW4gYGonIGlzbid0IHVwZGF0ZWQuCiAg ICA7OwogICAgOzsgPT4gKGZpcnN0LXZhbCBmaXJzdC12YWwgMiAyIDQgNCA2IDYgOCA4KQogICAg KGxvb3B5ICh3aXRoIChqICdmaXJzdC12YWwpKQogICAgICAgICAgIChudW1iZXJzIGkgOmZyb20g MSA6dG8gMTApCiAgICAgICAgICAgKHdoZW4gKGNsLW9kZHAgaSkKICAgICAgICAgICAgIChzZXQt cHJldiBqIGkpKQogICAgICAgICAgIChjb2xsZWN0IGopKQogICMrZW5kX3NyYwoKKiogSXRlcmF0 aW9uCjpQUk9QRVJUSUVTOgo6Q1VTVE9NX0lEOiBpdGVyYXRpb24tYW5kLWxvb3BpbmctY29tbWFu ZHMKOkRFU0NSSVBUSU9OOiBJdGVyYXRpbmcgdGhyb3VnaCBzZXF1ZW5jZXMsIGV0Yy4KOkVORDoK Ckl0ZXJhdGlvbiBjb21tYW5kcyBiaW5kIGxvY2FsIHZhcmlhYmxlcyBhbmQgZGV0ZXJtaW5lIHdo ZW4gdGhlIGxvb3AgZW5kcy4gIElmIG5vCmNvbW1hbmQgc2V0cyBhbiBlbmRpbmcgY29uZGl0aW9u LCB0aGVuIHRoZSBsb29wIHJ1bnMgZm9yZXZlci4gIEluZmluaXRlIGxvb3BzCmNhbiBiZSBleGl0 ZWQgYnkgdXNpbmcgZWFybHktZXhpdCBjb21tYW5kcyAoW1sjZXhpdGluZy10aGUtbG9vcC1lYXJs eV1dKSBvciBib29sZWFuCmNvbW1hbmRzIChbWyNib29sZWFuLWNvbW1hbmRzXV0pLgoKSXRlcmF0 aW9uIGNvbW1hbmRzIG11c3Qgb2NjdXIgaW4gdGhlIHRvcCBsZXZlbCBvZiB0aGUgfmxvb3B5fiBm b3JtIG9yIGluIGEKc3ViLWxvb3AgY29tbWFuZCAoW1sjc3ViLWxvb3BzXV0pLiAgVXNpbmcgdGhl bSBlbHNld2hlcmUgYW5kIHRyeWluZyB0byBkbyBzb21ldGhpbmcKbGlrZSB0aGUgYmVsb3cgZXhh bXBsZSB3aWxsIHNpZ25hbCBhbiBlcnJvci4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBT aWduYWxzIGFuIGVycm9yOgogIChsb29weSAobGlzdCBpICcoMSAyIDMgNCA1KSkKICAgICAgICAg KHdoZW4gKGNsLWV2ZW5wIGkpCiAgICAgICAgICAgOzsgQ2FuJ3QgdXNlIGBsaXN0JyBpbnNpZGUg YHdoZW4nLgogICAgICAgICAgIDs7IFdpbGwgc2lnbmFsIGFuIGVycm9yLgogICAgICAgICAgIChs aXN0IGogJyg2IDcgOCA5IDEwKSkKICAgICAgICAgICAoY29sbGVjdCBqKSkpCiMrZW5kX3NyYwoK SW4gfmxvb3B5fiwgaXRlcmF0aW9uIGNvbW1hbmRzIGFyZSBuYW1lZCBhZnRlciB3aGF0IHRoZXkg aXRlcmF0ZSB0aHJvdWdoLiAgRm9yCmV4YW1wbGUsIHRoZSA9YXJyYXk9IGFuZCA9bGlzdD0gY29t bWFuZHMgaXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiBhcnJheXMKYW5kIGxpc3RzLCBy ZXNwZWN0aXZlbHkuCgojK0FUVFJfVEVYSU5GTzogOnRhZyBOb3RlCiMrYmVnaW5fcXVvdGUKSW4g Z2VuZXJhbCwgaXRlcmF0aW9uIHZhcmlhYmxlcyAoc3VjaCBhcyB0aGUgfml+IGFuZCB+an4gYWJv dmUpIGFyZSBpbml0aWFsaXplZAp0byB+bmlsfi4gIEZvciBlZmZpY2llbmN5LCBzb21lIGNvbW1h bmRzIGRvIG5vdCBkbyB0aGlzLiAgSW4gc3VjaCBjYXNlcywgdGhlCmluaXRpYWwgdmFsdWUgb2Yg YW4gaXRlcmF0aW9uIHZhcmlhYmxlIGNhbiBiZSBzZXQgdXNpbmcgdGhlID13aXRoPSBzcGVjaWFs IG1hY3JvCmFyZ3VtZW50LCBidXQgdGhpcyBjYW4gcmVzdWx0IGluIGxlc3MgZWZmaWNpZW50IGNv ZGUuCiMrZW5kX3F1b3RlCgpCZWNhdXNlIHNvbWUgaXRlcmF0aW9uIGNvbW1hbmRzIHVzZSB0aGVp ciB2YXJpYWJsZSB0byBtYW5hZ2Ugc3RhdGUsIGl0IGlzIGFuCmVycm9yIHRvIHVzZSB0aGUgc2Ft ZSBpdGVyYXRpb24gdmFyaWFibGUgZm9yIG11bHRpcGxlIGl0ZXJhdGlvbiBjb21tYW5kcy4KCiMr YmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBTaWduYWxzIGFuIGVycm9yIGR1ZSB0byB0aGUgcmUt dXNlIG9mIGBpJzoKICAobG9vcHkgKG51bWJlcnMgaSA6ZnJvbSAxIDp0byAxMCkKICAgICAgICAg KGxpc3QgaSAnKDEgMiAzKSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIHQpKQojK2VuZF9zcmMK ClVubGlrZSB+Y2wtbG9vcH4gYW5kIGxpa2UgQ29tbW9uIExpc3AncyB+aXRlcmF0ZX4sIGFyZ3Vt ZW50cyBvZiB0aGUgaXRlcmF0aW9uCmNvbW1hbmRzIGFyZSBldmFsdWF0ZWQgb25seSBvbmNlLiAg Rm9yIGV4YW1wbGUsIHdoaWxlIGl0ZXJhdGluZyB0aHJvdWdoIG51bWJlcnMsCnlvdSBjYW4ndCBz dWRkZW5seSBjaGFuZ2UgdGhlIGRpcmVjdGlvbiBvZiB0aGUgaXRlcmF0aW9uIGluIHRoZSBtaWRk bGUgb2YgdGhlCmxvb3AsIG5vciBjYW4geW91IGNoYW5nZSB0aGUgZmluYWwgbnVtZXJpYyB2YWx1 ZS4gIFNpbWlsYXJseSwgdGhlIGZ1bmN0aW9uIHVzZWQKdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBs aXN0IGluIHRoZSA9bGlzdD0gY29tbWFuZCBpcyB0aGUgc2FtZSBmb3IgdGhlIGVudGlyZQpsb29w LiAgVGhpcyByZXN0cmljdGlvbiBhbGxvd3MgZm9yIHByb2R1Y2luZyBtb3JlIGVmZmljaWVudCBj b2RlLgoKCioqKiBHZW5lcmljIEl0ZXJhdGlvbgo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogZ2Vu ZXJpYy1pdGVyYXRpb24KOkRFU0NSSVBUSU9OOiBMb29waW5nIGEgY2VydGFpbiBudW1iZXIgb2Yg dGltZXMuCjpFTkQ6CgojK2ZpbmRleDogY3ljbGUKIytmaW5kZXg6IGN5Y2xpbmcKIytmaW5kZXg6 IHJlcGVhdAojK2ZpbmRleDogcmVwZWF0aW5nCi0gPShjeWNsZXxyZXBlYXQgW1ZBUl0gRVhQUik9 IDo6IFJ1biB0aGUgbG9vcCBmb3IgPUVYUFI9IGl0ZXJhdGlvbnMuICBJZgogIHNwZWNpZmllZCwg PVZBUj0gc3RhcnRzIGF0IDAsIGFuZCBpcyBpbmNyZW1lbnRlZCBieSAxIGF0IHRoZSBlbmQgb2Yg ZWFjaCBzdGVwCiAgaW4gdGhlIGxvb3AuICBJZiA9RVhQUj0gaXMgMCwgdGhlbiB0aGUgbG9vcCBp c24ndCBydW4uCgogIEZvciBlZmZpY2llbmN5LCA9VkFSPSBpcyBub3QgaW5pdGlhbGl6ZWQgdG8g fm5pbH4uICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuCiAgdXNpbmcgdGhlID13aXRoPSBzcGVjaWFs IG1hY3JvIGFyZ3VtZW50LCB3aGljaCBjYW4gcmVzdWx0IGluIHNsb3dlciBjb2RlLgoKICBUaGlz IGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzZXMgPWN5Y2xpbmc9IGFuZCA9cmVwZWF0aW5nPS4K CiAgIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDEwIDEwIDEwKQogICAgKGxvb3B5 ICh3aXRoIChpIDEwKSkKICAgICAgICAgICAoY3ljbGUgMykKICAgICAgICAgICAoY29sbGVjdCBp KSkKCiAgICA7OyA9PiAoMTAgMCAxMCAxIDEwIDIpCiAgICAobG9vcHkgKHdpdGggKGkgMTApKQog ICAgICAgICAgIChyZXBlYXQgaiAzKQogICAgICAgICAgIChjb2xsZWN0IGkpCiAgICAgICAgICAg KGNvbGxlY3QgaikpCgogICAgOzsgQW4gYXJndW1lbnQgb2YgMCBzdG9wcyB0aGUgbG9vcCBmcm9t IHJ1bm5pbmc6CiAgICA7OyA9PiBuaWwKICAgIChsb29weSAoY3ljbGUgMCkKICAgICAgICAgICAo cmV0dXJuICdyZXR1cm4tY29tbWFuZC1yYW4pKQogICMrRU5EX1NSQwoKIytmaW5kZXg6IGl0ZXIK IytmaW5kZXg6IGl0ZXJhdGluZwotID0oaXRlciBbVkFSXSBFWFBSICZrZXkgY2xvc2UgeWllbGQt cmVzdWx0KT0gOjogSXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMKICByZXR1cm5lZCBieSBhbiBF bWFjcyBMaXNwIGl0ZXJhdG9yIChbW2luZm86ZWxpc3AjR2VuZXJhdG9yc11dKS4gID1FWFBSPSBp cyBhbgogIGl0ZXJhdG9yIG9iamVjdCBwcm9kdWNlZCBieSBhIGNhbGxpbmcgYSBnZW5lcmF0b3Ig ZnVuY3Rpb24uICBJZiBnaXZlbiwgPVZBUj0KICBob2xkcyB0aGUgdmFsdWUgeWllbGRlZCBieSB0 aGUgaXRlcmF0b3IuIFRoZSBsb29wIGVuZHMgd2hlbiB0aGUgaXRlcmF0b3IKICBmaW5pc2hlcy4K CiAgPXlpZWxkLXJlc3VsdD0gaXMgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byB0aGUg ZnVuY3Rpb24gfml0ZXItbmV4dH4sCiAgd2hpY2ggaXMgdGhlIHZhbHVlIG9mIH5pdGVyLXlpZWxk fiBpbiB0aGUgaXRlcmF0b3IgKG5vdCB0byBiZSBjb25mdXNlZCB3aXRoCiAgdGhlIHZhbHVlIHlp ZWxkZWQgYnkgY2FsbGluZyB+aXRlci1uZXh0fikuCgogID1jbG9zZT0gaXMgd2hldGhlciB0aGUg Z2VuZXJhdG9yIHNob3VsZCBiZSAgY2xvc2VkIHZpYSB+aXRlci1jbG9zZX4gYWZ0ZXIgdGhlCiAg bG9vcCBlbmRzLiAgVGhlIGRlZmF1bHQgaXMgfnR+LiAgTm90ZSB0aGF0IEVtYWNzIHdpbGwgZXZl bnR1YWxseSBjbG9zZQogIHVuLWNsb3NlZCwgdW4tcmVhY2hhYmxlIGdlbmVyYXRvcnMgZHVyaW5n IGdhcmJhZ2UgY29sbGVjdGlvbi4KCiAgRm9yIGVmZmljaWVuY3ksIHdoZW4gcG9zc2libGUsID1W QVI9IGlzIGJvdW5kIHRvIHRoZSB5aWVsZGVkIHZhbHVlIGJlZm9yZSBlYWNoCiAgc3RlcCBvZiB0 aGUgbG9vcCwgd2hpY2ggaXMgdXNlZCB0byBkZXRlY3Qgd2hldGhlciB0aGUgaXRlcmF0b3Igc2ln bmFscyB0aGF0IGl0CiAgaXMgZmluaXNoZWQuICBUaGlzIGlzIG5vdCBwb3NzaWJsZSB3aGVuIGRl c3RydWN0dXJpbmcuICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMKICBiZWhhdmlvciBieSB1c2luZyB0 aGUgPXdpdGg9IHNwZWNpYWwgbWFjcm8gYXJndW1lbnQsIHdoaWNoIGNhbiByZXN1bHQgaW4KICBz bG93ZXIgY29kZSBhbmQgdGVsbHMgdGhlIG1hY3JvIHRoYXQgdGhlIGluaXRpYWwgdmFsdWUgb2Yg PVZBUj0gaXMgbWVhbmluZ2Z1bAogIGFuZCB0byB1cGRhdGUgPVZBUj0gZHVyaW5nIHRoZSBsb29w LgoKICBUaGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIG5hbWUgPWl0ZXJhdGluZz0uCgogICMrYmVn aW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7IFdpdGggdmFyOgogICAgOzsgPT4gKCgxIC4gNCkgKDIg LiA1KSAoMyAuIDYpKQogICAgKGxvb3B5ICh3aXRoIChpdGVyLW1ha2VyIChpdGVyLWxhbWJkYSAo eCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aGlsZSB4CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChpdGVyLXlpZWxkIChwb3AgeCkpKSkpKQogICAgICAgICAgIChp dGVyIGkgKGZ1bmNhbGwgaXRlci1tYWtlciAobGlzdCAxIDIgMykpKQogICAgICAgICAgIChpdGVy IGogKGZ1bmNhbGwgaXRlci1tYWtlciAobGlzdCA0IDUgNikpKQogICAgICAgICAgIChjb2xsZWN0 IChjb25zIGkgaikpKQoKICAgIDs7IFdpdGhvdXQgdmFyOgogICAgOzsgPT4gKDEgMiAzKQogICAg KGxvb3B5IChpdGVyIChmdW5jYWxsIChpdGVyLWxhbWJkYSAoKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgOzsgVGhlc2UgeWllbGRlZCB2YWx1ZXMgYXJlIGFsbCBpZ25vcmVkLgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGl0ZXIteWllbGQgJ2ZpcnN0LXlpZWxkKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGl0ZXIteWllbGQgJ3NlY29uZC15aWVsZCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChpdGVyLXlpZWxkICd0aGlyZC15aWVsZCkpKSkKICAgICAgICAgICAo c2V0IGkgMSAoMSsgaSkpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCiAgIytlbmRfc3JjCgogICMr QVRUUl9URVhJTkZPOiA6dGFnIFdhcm5pbmcKICAjK2JlZ2luX3F1b3RlCiAgQmUgYXdhcmUgdGhh dCB2YWx1ZXMgYXJlIHlpZWxkZWQgZnJvbSB0aGUgaXRlcmF0b3IgYmVmb3JlIHJ1bm5pbmcgdGhl IGxvb3AKICBib2R5LiAgV2hlbiB0aGUgaXRlcmF0b3IgY2FuIG5vIGxvbmdlciB5aWVsZCB2YWx1 ZXMsIGl0IGlzIGZpbmlzaGVkLgoKICBCZWNhdXNlIHZhbHVlcyBhcmUgeWllbGRlZCBiZWZvcmUg dGhlIG5leHQgaXRlcmF0aW9uIHN0ZXAgb2YgdGhlIGxvb3AsIHRyeWluZwogIHRvIHlpZWxkIG1v cmUgdmFsdWVzIGZyb20gdGhlIGl0ZXJhdG9yIGFmdGVyIHRoZSBsb29wIGVuZHMgd2lsbCByZXN1 bHQgaW4gbG9zdAogIHZhbHVlcy4gIE9uZSBvcHRpb24gZm9yIHdvcmtpbmcgYXJvdW5kIHRoaXMg aXMgdG8gdXNlIHRoZSBnZW5lcmljIGNvbW1hbmQKICA9c2V0PSB3aXRoIHRoZSBmdW5jdGlvbiB+ aXRlci1uZXh0fiBkaXJlY3RseS4KICAjK2VuZF9xdW90ZQoKICAjK2JlZ2luX3NyYyBlbWFjcy1s aXNwCiAgICA7OyA9PiA1LCBub3QgNCBhcyBvbmUgbWlnaHQgZXhwZWN0LgogICAgKGxvb3B5ICh3 aXRoIChpdGVyLW9iaiAoZnVuY2FsbCAoaXRlci1sYW1iZGEgKCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobGV0ICgoaSAwKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh3aGlsZSB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpdGVyLXlpZWxkIChjbC1pbmNmIGkpKSkpKSkpKQogICAgICAgICAgIChpdGVy IGl0ZXItb2JqIDpjbG9zZSBuaWwpCiAgICAgICAgICAgKGN5Y2xlIDMpCiAgICAgICAgICAgKGZp bmFsbHktcmV0dXJuIChwcm9nMSAoaXRlci1uZXh0IGl0ZXItb2JqKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChpdGVyLWNsb3NlIGl0ZXItb2JqKSkpKQoKICAgIDs7IEF2b2lkaW5nIG1p c3NlZCB5aWVsZGVkIHZhbHVlczoKICAgIDs7CiAgICA7OyA9PiAoKDEgMiAzKSA0KQogICAgKGxv b3B5ICh3aXRoIChpdGVyLW9iaiAoZnVuY2FsbCAoaXRlci1sYW1iZGEgKCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgoaSAwKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICh3aGlsZSB0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChpdGVyLXlpZWxkIChjbC1pbmNmIGkpKSkpKSkpCiAgICAgICAgICAg ICAgICAgKGogbmlsKSkKICAgICAgICAgICAoY3ljbGUgMykKICAgICAgICAgICAoc2V0IGogKGNv bmRpdGlvbi1jYXNlIG5pbAogICAgICAgICAgICAgICAgICAgICAgKGl0ZXItbmV4dCBpdGVyLW9i aikKICAgICAgICAgICAgICAgICAgICAoaXRlci1lbmQtb2Ytc2VxdWVuY2UgbmlsKSkpCiAgICAg ICAgICAgKGNvbGxlY3QgaikKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gKHByb2cxCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCBsb29weS1yZXN1bHQgKGl0ZXItbmV4dCBp dGVyLW9iaikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZXItY2xvc2UgaXRlci1v YmopKSkpCiAgIytlbmRfc3JjCgoKKioqIE51bWVyaWMgSXRlcmF0aW9uCjpQUk9QRVJUSUVTOgo6 Q1VTVE9NX0lEOiBudW1lcmljLWl0ZXJhdGlvbgo6REVTQ1JJUFRJT046IEl0ZXJhdGluZyB0aHJv dWdoIG51bWJlcnMuCjpFTkQ6CgpGb3IgaXRlcmF0aW5nIHRocm91Z2ggbnVtYmVycywgdGhlcmUg aXMgdGhlIGdlbmVyYWwgPW51bWJlcnM9IGNvbW1hbmQsIGFuZCBpdHMKdmFyaWFudHMgPW51bWJl cnMtdXA9IGFuZCA9bnVtYmVycy1kb3duPS4KCiMrZmluZGV4OiBudW0KIytmaW5kZXg6IG51bXMK IytmaW5kZXg6IG51bWJlcgojK2ZpbmRleDogbnVtYmVyaW5nCiMrZmluZGV4OiBudW1iZXJzCi0g PShudW1iZXJzfG51bXMgVkFSICZrZXkgS0VZUyk9IDo6IEl0ZXJhdGUgdGhyb3VnaCBudW1iZXJz LiAgPUtFWVM9IGlzIG9uZSBvcgogIHNldmVyYWwgb2YgPWZyb209LCA9dXBmcm9tPSwgPWRvd25m cm9tPSwgPXRvPSwgPXVwdG89LCA9ZG93bnRvPSwgPWFib3ZlPSwKICA9YmVsb3c9LCA9Ynk9LCBh bmQgPXRlc3Q9LgoKICBUaGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzZXMgPW51bT0sID1u dW1iZXI9LCBhbmQgPW51bWJlcmluZz0uCgogIFRoZSBjb21tYW5kID1udW1iZXJzPSBpcyB1c2Vk IHRvIGl0ZXJhdGUgdGhyb3VnaCBudW1iZXJzLiAgRm9yIGV4YW1wbGUsCiAgPShudW1iZXJzIGkg OmZyb20gMSA6dG8gMTApPSBpcyBzaW1pbGFyIHRvIHRoZSBjb21tYW5kCiAgPShsaXN0IGkgKG51 bWJlci1zZXF1ZW5jZSAxIDEwKSk9LCBhbmQgPShudW1iZXJzIGkgMyk9IGlzIHNpbWlsYXIgdG8K ICA9KHNldCBpIDMgKDErIGkpKT0uCgogIEZvciBlZmZpY2llbmN5LCBfPVZBUj0gaXMgaW5pdGlh bGl6ZWQgdG8gdGhlIHN0YXJ0aW5nIG51bWVyaWMgdmFsdWVfLCBub3QKICB+bmlsfiwgYW5kIGlz IHVwZGF0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHN0ZXAgb2YgdGhlIGxvb3AuICBUaGlzIGNhbiBi ZQogIG92ZXJyaWRkZW4gdXNpbmcgdGhlID13aXRoPSBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50LCB3 aGljaCBjYW4gcmVzdWx0IGluIHNsb3dlcgogIGNvZGUuCgogIEluIGl0cyBtb3N0IGJhc2ljIGZv cm0sID1udW1iZXJzPSBpdGVyYXRlcyBmcm9tIGEgc3RhcnRpbmcgdmFsdWUgdG8gYW4KICBpbmNs dXNpdmUgZW5kaW5nIHZhbHVlIHVzaW5nIHRoZSA9OmZyb209IGFuZCA9OnRvPSBrZXl3b3Jkcywg cmVzcGVjdGl2ZWx5LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyA9PiAoMSAyIDMg NCA1KQogICAgKGxvb3B5IChudW1iZXJzIGkgOmZyb20gMSA6dG8gNSkKICAgICAgICAgICAoY29s bGVjdCBpKSkKICAjK2VuZF9zcmMKCiAgSWYgdGhlIGVuZGluZyB2YWx1ZSBpcyBub3QgZ2l2ZW4s IHRoZW4gdGhlIHZhbHVlIGlzIGluY3JlbWVudGVkIGJ5IDEgd2l0aG91dAogIGVuZC4KCiAgIyti ZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2 KQogICAgKGxvb3B5IChjeWNsZSAxMCkKICAgICAgICAgICAobnVtYmVycyBpIDcpCiAgICAgICAg ICAgKGNvbGxlY3QgaSkpCiAgIytlbmRfc3JjCgogIFRvIHNwZWNpZnkgdGhlIHN0ZXAgc2l6ZSwg b25lIGNhbiB1c2UgdGhlIGtleXdvcmQgPTpieT0uICBFeGNlcHQgd2hlbiA9OnRlc3Q9CiAgaXMg Z2l2ZW4sIF90aGUgdmFsdWUgZm9yID06Ynk9IG11c3QgYmUgcG9zaXRpdmVfLiAgT3RoZXIga2V5 d29yZCBhcmd1bWVudHMKICAoPTp1cGZyb209LCA9OmRvd25mcm9tPSwgPTp1cHRvPSwgPTpkb3du dG89LCA9OmFib3ZlPSwgYW5kID06YmVsb3c9KSBjb250cm9sCiAgd2hldGhlciB0aGUgdmFyaWFi bGUgaXMgaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQuCgogICMrYmVnaW5fc3JjIGVtYWNzLWxp c3AKICAgIDs7ID0+ICgxIDMgNSkKICAgIChsb29weSAobnVtYmVycyBpIDpmcm9tIDEgOnRvIDUg OmJ5IDIpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCgogICAgOzsgPT4gKDEgMyA1KQogICAgKGxv b3B5IChudW1iZXJzIGkgMSA1IDIpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCgogICAgOzsgPT4g KDcgOSAxMSAxMyAxNSAxNyAxOSAyMSAyMyAyNSkKICAgIChsb29weSAoY3ljbGUgMTApCiAgICAg ICAgICAgKG51bWJlcnMgaSA3IDpieSAyKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7 ID0+ICgxIDIuNSA0LjApCiAgICAobG9vcHkgKG51bWJlcnMgaSA6ZnJvbSAxIDp0byA1IDpieSAx LjUpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCiAgIytlbmRfc3JjCgogIEJ5IGRlZmF1bHQsIHRo ZSB2YXJpYWJsZSdzIHZhbHVlIHN0YXJ0cyBhdCAwIGFuZCBpbmNyZWFzZXMgYnkgMS4gIFRvIHNw ZWNpZnkKICB3aGV0aGVyIHRoZSB2YWx1ZSBzaG91bGQgYmUgaW5jcmVhc2luZyBvciBkZWNyZWFz aW5nIHdoZW4gdXNpbmcgdGhlID06Ynk9CiAga2V5d29yZCwgb25lIGNhbiB1c2UgdGhlIGtleXdv cmRzID06ZG93bmZyb209LCA9OmRvd250bz0sID06dXBmcm9tPSwgPTp1cHRvPSwKICA9OmFib3Zl PSwgYW5kID06YmVsb3c9LiAgVGhlIGtleXdvcmRzID06ZnJvbT0gYW5kID06dG89IGRvbid0IGJ5 IHRoZW1zZWx2ZXMKICBzcGVjaWZ5IGEgZGlyZWN0aW9uLCBhbmQgdGhleSBjYW4gYmUgdXNlZCB3 aXRoIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGRvCiAgd2l0aG91dCBjb25mbGljdC4gIFVz aW5nIGFyZ3VtZW50cyB0aGF0IGNvbnRyYWRpY3Qgb25lIGFub3RoZXIgd2lsbCBzaWduYWwgYW4K ICBlcnJvci4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDMgMiAxKQogICAg KGxvb3B5IChjeWNsZSAzKQogICAgICAgICAgIChudW1iZXJzIGkgOmRvd25mcm9tIDMpCiAgICAg ICAgICAgKGNvbGxlY3QgaSkpCgogICAgOzsgPT4gKDAgLTEgLTIgLTMpCiAgICAobG9vcHkgKG51 bWJlcnMgaSA6ZG93bnRvIC0zKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7ID0+ICgx MCA5IDggNyA2IDUgNCAzIDIpCiAgICAobG9vcHkgKG51bWJlcnMgaSA6ZG93bmZyb20gMTAgOnRv IDIpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCgogICAgOzsgPT4gKDEwIDggNiA0IDIpCiAgICAo bG9vcHkgKG51bWJlcnMgaSA6ZnJvbSAxMCA6ZG93bnRvIDIgOmJ5IDIpCiAgICAgICAgICAgKGNv bGxlY3QgaSkpCgogICAgOzsgPT4gKDEgMiAzIDQgNSA2IDcpCiAgICAobG9vcHkgKG51bWJlcnMg aSA6ZnJvbSAxIDp1cHRvIDcpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCgogICAgOzsgPT4gU2ln bmFscyBhbiBlcnJvcjoKICAgIChsb29weSAobnVtYmVycyBpIDpkb3duZnJvbSAxMCA6dXB0byAy MCkKICAgICAgICAgICAoY29sbGVjdCBpKSkKICAjK2VuZF9zcmMKCiAgVG8gc3BlY2lmeSBhbiAv ZXhjbHVzaXZlLyBlbmRpbmcgdmFsdWUsIHVzZSB0aGUga2V5d29yZHMgPTpiZWxvdz0gZm9yCiAg aW5jcmVhc2luZyB2YWx1ZXMgYW5kID06YWJvdmU9IGZvciBkZWNyZWFzaW5nIHZhbHVlcy4KCiAg IytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDEgMiAzIDQgNSA2IDcgOCA5KQogICAg KGxvb3B5IChudW1iZXJzIGkgOmZyb20gMSA6YmVsb3cgMTApCiAgICAgICAgICAgKGNvbGxlY3Qg aSkpCgogICAgOzsgU2FtZSBhcyBhYm92ZToKICAgIChsb29weSAoc2V0IGkgMSAoMSsgaSkpCiAg ICAgICAgICAgKHdoaWxlICg8IGkgMTApKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7 ID0+ICgxMCA5IDggNyA2IDUgNCAzIDIpCiAgICAobG9vcHkgKG51bWJlcnMgaSA6ZnJvbSAxMCA6 YWJvdmUgMSkKICAgICAgICAgICAoY29sbGVjdCBpKSkKCiAgICA7OyA9PiAoMCAtMSAtMikKICAg IChsb29weSAobnVtYmVycyBpIDphYm92ZSAtMykKICAgICAgICAgICAoY29sbGVjdCBpKSkKICAj K2VuZF9zcmMKCiAgSWYgeW91IGRvIG5vdCBrbm93IHdoZXRoZXIgeW91IHdpbGwgYmUgaW5jcmVt ZW50aW5nIG9yIGRlY3JlbWVudGluZywgeW91IGNhbgogIHVzZSB0aGUga2V5d29yZCBhcmd1bWVu dCA9dGVzdD0sIHdob3NlIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuCiAg YSBub24tbmlsIHZhbHVlIGlmIHRoZSBsb29wIHNob3VsZCBjb250aW51ZSwgc3VjaCBhcyB+Iyc8 PX4uICBUaGUgZnVuY3Rpb24KICByZWNlaXZlcyA9VkFSPSBhcyB0aGUgZmlyc3QgYXJndW1lbnQg YW5kIHRoZSBmaW5hbCB2YWx1ZSBhcyB0aGUgc2Vjb25kCiAgYXJndW1lbnQsIGFzIGluIH4oZnVu Y2FsbCBURVNUIFZBUiBGSU5BTC1WQUwpfi4gID10ZXN0PSBjYW4gb25seSBiZSB1c2VkIHdpdGgK ICA9ZnJvbT0gYW5kID10bz07IGl0IGNhbm5vdCBiZSB1c2VkIHdpdGgga2V5d29yZHMgdGhhdCBh bHJlYWR5IGRlc2NyaWJlIGEKICBkaXJlY3Rpb24gYW5kIGVuZGluZyBjb25kaXRpb24uICBUbyBt YXRjaCB0aGUgYmVoYXZpb3Igb2YgfmNsLWxvb3B+LCB0aGUKICBkZWZhdWx0IHRlc3RpbmcgZnVu Y3Rpb24gaXMgfiMnPD1+LiAgV2hlbiA9dGVzdD0gaXMgZ2l2ZW4sID1ieT0gY2FuIGJlCiAgbmVn YXRpdmUuICBBcyB0aGVyZSBpcyBubyBkZWZhdWx0IGVuZCB2YWx1ZSB3aGVuID10ZXN0PSBpcyBn aXZlbiwgPXRvPSBtdXN0CiAgYWxzbyBiZSBnaXZlbi4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlz cAogICAgOzsgPT4gKDEwIDkuNSA5LjAgOC41IDguMCA3LjUgNy4wIDYuNSA2LjAgNS41KQogICAg KGxvb3B5ICh3aXRoIChzdGFydCAxMCkKICAgICAgICAgICAgICAgICAoZW5kIDUpCiAgICAgICAg ICAgICAgICAgKGZ1bmMgIyc+KQogICAgICAgICAgICAgICAgIChzdGVwIC0wLjUpKQogICAgICAg ICAgIChudW1iZXJzIGkgOnRvIGVuZCA6ZnJvbSBzdGFydCA6Ynkgc3RlcCA6dGVzdCBmdW5jKQog ICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7IEV4cGFuZHMgdG8gc2ltaWxhciBjb2RlIGFz IGFib3ZlLgogICAgOzsgTm90ZSB0aGF0IHdpdGggYDphYm92ZScsIHN0ZXAgbXVzdCBiZSBwb3Np dGl2ZS4KICAgIDs7CiAgICA7OyA9PiAoMTAgOS41IDkuMCA4LjUgOC4wIDcuNSA3LjAgNi41IDYu MCA1LjUpCiAgICAobG9vcHkgKHdpdGggKHN0YXJ0IDEwKQogICAgICAgICAgICAgICAgIChlbmQg NSkKICAgICAgICAgICAgICAgICAoc3RlcCAwLjUpKQogICAgICAgICAgIChudW1iZXJzIGkgOmZy b20gc3RhcnQgOmFib3ZlIGVuZCA6Ynkgc3RlcCkKICAgICAgICAgICAoY29sbGVjdCBpKSkKCiAg ICA7OyBTaWduYWxzIGFuIGVycm9yIGJlY2F1c2UgYDp1cHRvJyBpbXBsaWVzIGEgdGVzdGluZyBm dW5jdGlvbiBhbHJlYWR5OgogICAgKGxvb3B5IChudW1iZXJzIGkgOmZyb20gMSA6dXB0byAxMCA6 dGVzdCAjJzwpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCiAgIytlbmRfc3JjCgpJZiB5b3UgcHJl ZmVyIHVzaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRvIGtleXdvcmQgYXJndW1lbnRzLCB5b3Ug Y2FuIHVzZSB0aGUKY29tbWFuZHMgPW51bWJlcnMtdXA9IGFuZCA9bnVtYmVycy1kb3duPSB0byBz cGVjaWZ5IGRpcmVjdGlvbnMuICBUaGVzZSBjb21tYW5kcwphcmUgc2ltcGxlIHdyYXBwZXJzIG9m IHRoZSBhYm92ZSA9bnVtYmVycz0gY29tbWFuZC4KCiMrZmluZGl4OiBudW1zLWRvd24KIytmaW5k ZXg6IG51bWJlcnMtZG93bgojK2ZpbmRleDogbnVtYmVyaW5nLWRvd24KLSA9KG51bWJlcnMtZG93 bnxudW1zLWRvd24gVkFSIFNUQVJUIFtFTkRdICZrZXkgYnkpPSA6OiBFcXVpdmFsZW50IHRvID0o bnVtYmVycwogIFZBUiBTVEFSVCBbOmRvd250byBFTkRdICZrZXkgYnkpPS4gIFRoaXMgY29tbWFu ZCBleGlzdHMgb25seSBmb3IgY29udmVuaWVuY2UuCgogIFRoaXMgY29tbWFuZCBhbHNvIGhhcyB0 aGUgYWxpYXNlcyA9bnVtc2Rvd249IGFuZCA9bnVtYmVyaW5nLWRvd249LgoKICAjK2JlZ2luX3Ny YyBlbWFjcy1saXNwCiAgICA7OyA9PiAoMTAgOCA2IDQgMikKICAgIChsb29weSAobnVtYmVycy1k b3duIGkgMTAgMSA6YnkgMikKICAgICAgICAgICAoY29sbGVjdCBpKSkKCiAgICA7OyA9PiAoMTAg OCA2IDQgMikKICAgIChsb29weSAobnVtYmVycy1kb3duIGkgMTAgMSAyKQogICAgICAgICAgIChj b2xsZWN0IGkpKQogICMrZW5kX3NyYwoKIytmaW5kaXg6IG51bXMtdXAKIytmaW5kZXg6IG51bWJl cnMtdXAKIytmaW5kZXg6IG51bWJlcmluZy11cAotID0obnVtYmVycy11cHxudW1zLXVwIFZBUiBT VEFSVCBbRU5EXSAma2V5IGJ5KT0gOjogRXF1aXZhbGVudCB0byA9KG51bWJlcnMgVkFSCiAgU1RB UlQgW0VORF0gJmtleSBieSk9LiAgVGhpcyBjb21tYW5kIGV4aXN0cyBvbmx5IGZvciBjb252ZW5p ZW5jZS4KCiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlhc2VzID1udW1zdXA9IGFuZCA9 bnVtYmVyaW5nLXVwPS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDEgMyA1 IDcgOSkKICAgIChsb29weSAobnVtYmVycy11cCBpIDEgMTAgOmJ5IDIpCiAgICAgICAgICAgKGNv bGxlY3QgaSkpCgogICAgOzsgPT4gKDEgMyA1IDcgOSkKICAgIChsb29weSAobnVtYmVycy11cCBp IDEgMTAgMikKICAgICAgICAgICAoY29sbGVjdCBpKSkKICAjK2VuZF9zcmMKCgoqKiogU2VxdWVu Y2UgSXRlcmF0aW9uCjpQUk9QRVJUSUVTOgo6Q1VTVE9NX0lEOiBzZXF1ZW5jZS1pdGVyYXRpb24K OkRFU0NSSVBUSU9OOiBJdGVyYXRpbmcgdGhyb3VnaCBzZXF1ZW5jZXMuCjpFTkQ6CgpUaGVzZSBj b21tYW5kcyBwcm92aWRlIHZhcmlvdXMgd2F5cyB0byBpdGVyYXRlIHRocm91Z2ggc2VxdWVuY2Vz CihbW2luZm86ZWxpc3AjU2VxdWVuY2VzIEFycmF5cyBWZWN0b3JzXV0pLgoKIytjaW5kZXg6IHNl cXVlbmNlIGVsZW1lbnQgZGlzdHJpYnV0aW9uCkluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2gg anVzdCBvbmUgc2VxdWVuY2UsIHRoZSA9YXJyYXk9LCA9bGlzdD0sIGFuZCA9c2VxPQpjb21tYW5k cyBjYW4gYmUgZ2l2ZW4gbXVsdGlwbGUgc2VxdWVuY2VzIG9mIHZhcmlvdXMgc2l6ZXMuICBJbiBz dWNoIGNhc2VzLCB0aGUKZWxlbWVudHMgb2YgdGhlIHNlcXVlbmNlcyBhcmUge3t7ZGZuKGRpc3Ry aWJ1dGVkKX19fSwgbGlrZSBpbiB0aGUgZGlzdHJpYnV0aXZlCnByb3BlcnR5IGZyb20gbWF0aGVt YXRpY3MuICBBIG5ldyBzZXF1ZW5jZSBvZiBkaXN0cmlidXRlZCBlbGVtZW50cyBpcyBjcmVhdGVk CmJlZm9yZSB0aGUgbG9vcCBydW5zLCBhbmQgdGhhdCBzZXF1ZW5jZSBpcyB1c2VkIGZvciBpdGVy YXRpb24gaW5zdGVhZCBvZiB0aGUKc291cmNlIHNlcXVlbmNlcy4gIEFzIHNlZW4gaW4gdGhlIGJl bG93IGV4YW1wbGUsIHRoZSByZXN1bHRpbmcgYmVoYXZpb3IgaXMKc2ltaWxhciB0byB0aGF0IG9m IG5lc3RlZCBsb29wcy4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyA9PiAoKDEgMyA2KSAo MSA0IDYpICgxIDUgNikgKDIgMyA2KSAoMiA0IDYpICgyIDUgNikpCiAgKGxvb3B5IChsaXN0IGkg JygxIDIpICcoMyA0IDUpICcoNikpCiAgICAgICAgIChjb2xsZWN0IGkpKQoKICA7OyBHaXZlcyB0 aGUgc2FtZSByZXN1bHQgYXMgdGhpcwogIChsZXQgKChyZXN1bHQgbmlsKSkKICAgIChkb2xpc3Qg KGkgJygxIDIpKQogICAgICAoZG9saXN0IChqICcoMyA0IDUpKQogICAgICAgIChkb2xpc3QgKGsg Jyg2KSkKICAgICAgICAgIChwdXNoIChsaXN0IGkgaiBrKSByZXN1bHQpKSkpCiAgICAobnJldmVy c2UgcmVzdWx0KSkKCiAgOzsgYW5kIHRoaXMKICAoY2wtbG9vcCBmb3IgaSBpbiAnKDEgMikKICAg ICAgICAgICBhcHBlbmQgKGNsLWxvb3AgZm9yIGogaW4gJygzIDQgNSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXBwZW5kIChjbC1sb29wIGZvciBrIGluICcoNikKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3QgKGxpc3QgaSBqIGspKSkpCiMrZW5k X3NyYwoKVGhlID1hcnJheT0gYW5kID1zZXF1ZW5jZT0gY29tbWFuZHMgY2FuIHVzZSB0aGUgc2Ft ZSBrZXl3b3JkcyBhcyB0aGUgPW51bWJlcnM9CmNvbW1hbmQgKFtbI251bWVyaWMtaXRlcmF0aW9u XV0pIGZvciB3b3JraW5nIHdpdGggdGhlIGluZGV4IGFuZCBjaG9vc2luZyBhIHJhbmdlIG9mCnRo ZSBzZXF1ZW5jZSdzIGVsZW1lbnRzIHRocm91Z2ggd2hpY2ggdG8gaXRlcmF0ZS4gIEluIGFkZGl0 aW9uIHRvIHRob3NlCmtleXdvcmRzLCB0aGV5IGFsc28gaGF2ZSBhbiA9aW5kZXg9IGtleXdvcmQs IHdoaWNoIG5hbWVzIHRoZSB2YXJpYWJsZSB1c2VkIHRvCnN0b3JlIHRoZSBhY2Nlc3NlZCBpbmRl eCBkdXJpbmcgdGhlIGxvb3AuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgPT4gKCgxIC4g OSkgKDMgLiA2KSAoNSAuIDUpICg3IC4gMykgKDkgLiAxKSkKICAobG9vcHkgKGFycmF5IGkgWzEw IDkgOCA2IDcgNSA0IDMgMiAxXSA6ZnJvbSAxIDpieSAyIDppbmRleCBpbmQpCiAgICAgICAgIChj b2xsZWN0IChjb25zIGluZCBpKSkpCiMrZW5kX3NyYwoKS2VlcCBpbiBtaW5kIHRoYXQgaWYgdXNl ZCB3aXRoIHNlcXVlbmNlIGRpc3RyaWJ1dGlvbiwgdGhlc2Uga2V5d29yZHMgYWZmZWN0Cml0ZXJh dGluZyB0aHJvdWdoIHRoZSBzZXF1ZW5jZSBvZiBkaXN0cmlidXRlZCBlbGVtZW50cy4gIFRoYXQg aXMsIHRoZXkgZG8gbm90CmFmZmVjdCBob3cgc2FpZCBzZXF1ZW5jZSBpcyBwcm9kdWNlZC4gIElu IHRoZSBleGFtcGxlIGJlbG93LCBzZWUgdGhhdCB+Y2Rkcn4gaXMKYXBwbGllZCB0byB0aGUgc2Vx dWVuY2Ugb2YgZGlzdHJpYnV0ZWQgZWxlbWVudHMuICBJdCBpcyAvbm90LyBhcHBsaWVkIHRvIHRo ZQpzb3VyY2Ugc2VxdWVuY2VzLgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogIDs7IFRoaXMgY29k ZSBjcmVhdGVzIHRoZSBzZXF1ZW5jZSBvZiBkaXN0cmlidXRlZCBlbGVtZW50cwogIDs7ICgoMSA0 KSAoMSA1KSAoMSA2KSAoMiA0KSAoMiA1KSAoMiA2KSAoMyA0KSAoMyA1KSAoMyA2KSkKICA7OyBh bmQgdGhlbiBtb3ZlcyB0aHJvdWdoIHRoaXMgc2VxdWVuY2UgdXNpbmcgYGNkZHInLgogIDs7CiAg OzsgPT4gKCgxIDQpICgxIDYpICgyIDUpICgzIDQpICgzIDYpKQogIChsb29weSAobGlzdCBpICco MSAyIDMpICcoNCA1IDYpIDpieSAjJ2NkZHIpCiAgICAgICAgIChjb2xsZWN0IGkpKQoKICA7OyBO b3QgdGhlIHNhbWUgYXM6CiAgOzsgPT4gKCgxIDQpICgxIDYpICgzIDQpICgzIDYpKQogIChsb29w eSAobGlzdCBpICcoMSAzKSAnKDQgNikpCiAgICAgICAgIChjb2xsZWN0IGkpKQojK2VuZF9zcmMK CgojK2ZpbmRleDogYXJyYXkKIytmaW5kZXg6IHN0cmluZwojK2ZpbmRleDogYXJyYXlpbmcKIytm aW5kZXg6IHN0cmluZ2luZwotID0oYXJyYXl8c3RyaW5nIFZBUiBFWFBSIFtFWFBSU10gJmtleSBL RVlTKT0gOjogTG9vcCB0aHJvdWdoIHRoZQogIGVsZW1lbnRzIG9mIHRoZSBhcnJheSA9RVhQUj0u ICBJbiBFbWFjcyBMaXNwLCBzdHJpbmdzIGFyZSBhcnJheXMgd2hvc2UKICBlbGVtZW50cyBhcmUg Y2hhcmFjdGVycy4KCiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlhc2VzID1hcnJheWlu Zz0gYW5kID1zdHJpbmdpbmc9LgoKICA9S0VZUz0gaXMgb25lIG9yIHNldmVyYWwgb2YgPWZyb209 LCA9dXBmcm9tPSwgPWRvd25mcm9tPSwgPXRvPSwgPXVwdG89LAogID1kb3dudG89LCA9YWJvdmU9 LCA9YmVsb3c9LCA9Ynk9LCBhbmQgPWluZGV4PS4gID1pbmRleD0gbmFtZXMgdGhlIHZhcmlhYmxl CiAgdXNlZCB0byBzdG9yZSB0aGUgaW5kZXggYmVpbmcgYWNjZXNzZWQuICBGb3Igb3RoZXJzLCBz ZWUgdGhlID1udW1iZXJzPQogIGNvbW1hbmQuCgogIElmIG11bHRpcGxlIGFycmF5cyBhcmUgZ2l2 ZW4sIHRoZW4gdGhlIGVsZW1lbnRzIG9mIHRoZXNlIGFycmF5cyBhcmUKICBkaXN0cmlidXRlZCBp bnRvIGFuIGFycmF5IG9mIGxpc3RzLiAgSW4gdGhhdCBjYXNlLCB0aGUgYWJvdmUga2V5d29yZHMg YXBwbHkgdG8KICB0aGlzIG5ldywgcmVzdWx0aW5nIGFycmF5IG9mIGxpc3RzLgoKICAjK0JFR0lO X1NSQyBlbWFjcy1saXNwCiAgICAobG9vcHkgKGFycmF5IGkgWzEgMiAzXSkKICAgICAgICAgICAo ZG8gKG1lc3NhZ2UgIiVkIiBpKSkpCgogICAgOzsgPT4gKDEgMykKICAgIChsb29weSAoYXJyYXkg aSBbMSAyIDMgNF0gOmJ5IDIpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCgogICAgOzsgQ29sbGVj dHMgdGhlIGludGVnZXIgdmFsdWVzIHJlcHJlc2VudGluZyBlYWNoIGNoYXJhY3Rlci4KICAgIDs7 ID0+ICg5NyA5OCA5OSkKICAgIChsb29weSAoc3RyaW5nIGMgImFiYyIpCiAgICAgICAgICAgKGNv bGxlY3QgYykpCgogICAgOzsgVGhpcyBpcyB0aGUgc2FtZSBhcyB1c2luZyBbKDEgMykgKDEgNCkg KDIgMykgKDIgNCldLgogICAgOzsgPT4gKCgxIDMpICgxIDQpICgyIDMpICgyIDQpKQogICAgKGxv b3B5IChhcnJheSBpIFsxIDJdIFszIDRdKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7 ID0+ICgoMSAzKSAoMiAzKSkKICAgIChsb29weSAoYXJyYXkgaSBbMSAyXSBbMyA0XSA6YnkgMikK ICAgICAgICAgICAoY29sbGVjdCBpKSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiBjb25zCiMrZmlu ZGV4OiBjb25zZXMKIytmaW5kZXg6IGNvbnNpbmcKLSA9KGNvbnN8Y29uc2VzIFZBUiBFWFBSICZr ZXkgYnkpPSA6OiBMb29wIHRocm91Z2ggdGhlIGNvbnMgY2VsbHMgb2YgPUVYUFI9LgogIE9wdGlv bmFsbHksIGZpbmQgdGhlIGNvbnMgY2VsbHMgdmlhIHRoZSBmdW5jdGlvbiA9Ynk9IGluc3RlYWQg b2YgPWNkcj0uCgogIEZvciBlZmZpY2llbmN5LCB3aGVuIHBvc3NpYmxlLCA9VkFSPSBpcyBpbml0 aWFsaXplZCB0byB0aGUgdmFsdWUgb2YgPUVYUFI9LAogIG5vdCB+bmlsfiwgYW5kIGlzIHVwZGF0 ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHN0ZXAgaW4gdGhlIGxvb3AuICBUaGlzIGlzIG5vdAogIHBv c3NpYmxlIHdoZW4gZGVzdHJ1Y3R1cmluZy4gIFN1Y2ggaW5pdGlhbGl6YXRpb24gY2FuIGJlIG92 ZXJyaWRkZW4gYnkgdXNpbmcKICB0aGUgPXdpdGg9IHNwZWNpYWwgbWFjcm8gYXJndW1lbnQsIHdo aWNoIGNhbiByZXN1bHQgaW4gc2xvd2VyIGNvZGUuCgogIFRoaXMgY29tbWFuZCBhbHNvIGhhcyB0 aGUgYWxpYXMgPWNvbnNpbmc9LgoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7OyA9PiAo KDEgMiAzKSAoMiAzKSAoMykpCiAgICAobG9vcHkgKGNvbnMgaSAnKDEgMiAzKSkKICAgICAgICAg ICAoY29sbGVjdCBjb2xsIGkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGNvbGwpKQoKICAg IDs7ID0+ICgoMSAyIDMgNCA1IDYpICgzIDQgNSA2KSAoNSA2KSkKICAgIChsb29weSAoY29ucyBp ICcoMSAyIDMgNCA1IDYpIDpieSAjJ2NkZHIpCiAgICAgICAgICAgKGNvbGxlY3QgY29sbCBpKQog ICAgICAgICAgIChmaW5hbGx5LXJldHVybiBjb2xsKSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiBs aXN0CiMrZmluZGV4OiBsaXN0aW5nCiMrZmluZGV4OiBlYWNoCi0gPShsaXN0fGVhY2ggVkFSIEVY UFIgW0VYUFJTXSAma2V5IGJ5KT0gOjogTG9vcCB0aHJvdWdoIGVhY2ggZWxlbWVudCBvZiB0aGUK ICBsaXN0ID1FWFBSPS4gIE9wdGlvbmFsbHksIHVwZGF0ZSB0aGUgbGlzdCB1c2luZyA9Ynk9IGlu c3RlYWQgb2YgPWNkcj0uCgogIFRoaXMgY29tbWFuZCBhbHNvIGhhcyB0aGUgYWxpYXMgPWxpc3Rp bmc9LgoKICBJZiBtdWx0aXBsZSBsaXN0cyBhcmUgZ2l2ZW4sIGRpc3RyaWJ1dGUgdGhlIGVsZW1l bnRzIG9mIHRoZSBsaXN0cyBpbnRvIG9uZSBuZXcKICBsaXN0LiAgSW4gc3VjaCBjYXNlcywgPWJ5 PSBhcHBsaWVzIHRvIHRoZSBuZXcgbGlzdCwgbm90IHRoZSBhcmd1bWVudHMgb2YgdGhlCiAgY29t bWFuZC4KCiAgIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDEgNCA3IDEwKS4KICAg IChsb29weSAobGlzdCBpIChudW1iZXItc2VxdWVuY2UgMSAxMCAzKSkKICAgICAgICAgICAoY29s bGVjdCBpKSkKCiAgICA7OyA9PiAoMSAzIDUpCiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMiAzIDQg NSA2KSA6YnkgIydjZGRyKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7ID0+ICgoMSA0 KSAoMSA1KSAoMSA2KSAoMiA0KSAoMiA1KSAoMiA2KSAoMyA0KSAoMyA1KSAoMyA2KSkKICAgIChs b29weSAobGlzdCBpICcoMSAyIDMpICcoNCA1IDYpKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoK ICAgIDs7ID0+ICgoMSA0KSAoMSA2KSAoMiA1KSAoMyA0KSAoMyA2KSkKICAgIChsb29weSAobGlz dCBpICcoMSAyIDMpICcoNCA1IDYpIDpieSAjJ2NkZHIpCiAgICAgICAgICAgKGNvbGxlY3QgaSkp CiAgIytFTkRfU1JDCgojK2ZpbmRleDogbWFwCiMrZmluZGV4OiBtYXAtcGFpcnMKIytmaW5kZXg6 IG1hcHBpbmcKIytmaW5kZXg6IG1hcHBpbmctcGFpcnMKLSA9KG1hcHxtYXAtcGFpcnMgVkFSIEVY UFIgJmtleSB1bmlxdWUpPSA6OiBJdGVyYXRlIHRocm91Z2ggdGhlIGRvdHRlZCBrZXktdmFsdWUK ICBwYWlycyBvZiBtYXAgPUVYUFI9LCB1c2luZyB0aGUgZnVuY3Rpb24gfm1hcC1wYWlyc34gZnJv bSB0aGUgPW1hcC5lbD0gbGlicmFyeS4KICBUaGlzIGxpYnJhcnkgZ2VuZXJhbGl6ZXMgd29ya2lu ZyB3aXRoIGFzc29jaWF0aW9uIGxpc3RzICgiYWxpc3RzIiksIHByb3BlcnR5CiAgbGlzdHMgKCJw bGlzdHMiKSwgaGFzaC10YWJsZXMsIGFuZCB2ZWN0b3JzLgoKICBUaGlzIGNvbW1hbmQgYWxzbyBo YXMgdGhlIGFsaWFzZXMgPW1hcHBpbmc9IGFuZCA9bWFwcGluZy1wYWlycz0uCgogIEluIGVhY2gg ZG90dGVkIHBhaXIgYXNzaWduZWQgdG8gPVZBUj0sIHRoZSB+Y2FyfiBpcyB0aGUga2V5IGFuZCB0 aGUgfmNkcn4gaXMKICB0aGUgdmFsdWUuCgogIEJ5IGRlZmF1bHQsIG9ubHkgdGhlIHVuaXF1ZSBr ZXlzIGFyZSB1c2VkLiAgVG8gZGlzYWJsZSB0aGlzIGRlZHVwbGljYXRpb24sCiAgcGFzcyB+bmls fiB0byB0aGUgPXVuaXF1ZT0ga2V5d29yZCBhcmd1bWVudC4KCiAgSW4gZ2VuZXJhbCwgYXMgYSBt YXAgaW4gbm90IG5lY2Vzc2FyaWx5IGEgc2VxdWVuY2UsIHlvdSBzaG91bGQgbm90IHJlbHkgb24g dGhlCiAgb3JkZXIgaW4gd2hpY2ggdGhlIGtleS12YWx1ZSBwYWlycyBhcmUgZm91bmQuICBUaGVy ZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGV5CiAgYmUgaW4gdGhlIHNhbWUgb3JkZXIgZWFjaCB0 aW1lLgoKICBUaGVzZSBwYWlycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIGxvb3AgYmVnaW5zLiAg SW4gb3RoZXIgd29yZHMsIHRoZSBtYXAKICA9RVhQUj0gaXMgbm90IHByb2Nlc3NlZCBwcm9ncmVz c2l2ZWx5LCBidXQgYWxsIGF0IG9uY2UuICBUaGVyZWZvcmUsIHRoaXMKICBjb21tYW5kIGNhbiBo YXZlIGEgbm90aWNlYWJsZSBzdGFydC11cCBjb3N0IHdoZW4gd29ya2luZyB3aXRoIHZlcnkgbGFy Z2UgbWFwcy4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKChhIC4gMSkgKGIg LiAyKSkKICAgIChsb29weSAobWFwIHBhaXIgJygoYSAuIDEpIChiIC4gMikpKQogICAgICAgICAg IChjb2xsZWN0IHBhaXIpKQoKICAgIDs7ID0+ICgoYSBiKSAoMSAyKSkKICAgIChsb29weSAobWFw IChrZXkgLiB2YWx1ZSkgJygoYSAuIDEpIChiIC4gMikpKQogICAgICAgICAgIChjb2xsZWN0IGtl eXMga2V5KQogICAgICAgICAgIChjb2xsZWN0IHZhbHVlcyB2YWx1ZSkKICAgICAgICAgICAoZmlu YWxseS1yZXR1cm4ga2V5cyB2YWx1ZXMpKQoKICAgIDs7ID0+ICgoOmEgOmIpICgxIDIpKQogICAg KGxvb3B5IChtYXAgKGtleSAuIHZhbHVlKSAnKDphIDEgOmIgMikpCiAgICAgICAgICAgKGNvbGxl Y3Qga2V5cyBrZXkpCiAgICAgICAgICAgKGNvbGxlY3QgdmFsdWVzIHZhbHVlKQogICAgICAgICAg IChmaW5hbGx5LXJldHVybiBrZXlzIHZhbHVlcykpCgogICAgOzsgTk9URTogRm9yIHZlY3RvcnMs IHRoZSBrZXlzIGFyZSBpbmRpY2VzLgogICAgOzsgPT4gKCgwIDEpICgxIDIpKQogICAgKGxvb3B5 IChtYXAgKGtleSAuIHZhbHVlKSBbMSAyXSkKICAgICAgICAgICAoY29sbGVjdCBrZXlzIGtleSkK ICAgICAgICAgICAoY29sbGVjdCB2YWx1ZXMgdmFsdWUpCiAgICAgICAgICAgKGZpbmFsbHktcmV0 dXJuIGtleXMgdmFsdWVzKSkKCiAgICA7OyA9PiAoKGEgYikgKDEgMikpCiAgICAobGV0ICgobXkt dGFibGUgKG1ha2UtaGFzaC10YWJsZSkpKQogICAgICAocHV0aGFzaCAnYSAxIG15LXRhYmxlKQog ICAgICAocHV0aGFzaCAnYiAyIG15LXRhYmxlKQoKICAgICAgKGxvb3B5IChtYXAgKGtleSAuIHZh bHVlKSBteS10YWJsZSkKICAgICAgICAgICAgIChjb2xsZWN0IGtleXMga2V5KQogICAgICAgICAg ICAgKGNvbGxlY3QgdmFsdWVzIHZhbHVlKQogICAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGtl eXMgdmFsdWVzKSkpCiAgIytlbmRfc3JjCgogIERlcGVuZGluZyBvbiBob3cgYSBtYXAgaXMgY3Jl YXRlZCwgYSBtYXAgbWlnaHQgY29udGFpbiBhIGtleSBtdWx0aXBsZSB0aW1lcy4KICBDdXJyZW50 bHksIHRoZSBmdW5jdGlvbiB+bWFwLXBhaXJzfiByZXR1cm5zIHN1Y2gga2V5cy4gIEJ5IGRlZmF1 bHQsIHRoZQogIH5sb29weX4gY29tbWFuZCA9bWFwLXBhaXJzPSBpZ25vcmVzIHN1Y2ggZHVwbGlj YXRlIGtleXMuICBUaGlzIGlzIGZvciB0d28KICByZWFzb25zOgogIDEuIFRoaXMgaXMgbW9yZSBj b25zaXN0ZW50IHdpdGggdGhlIGNvbW1hbmQgPW1hcC1yZWY9LCBmb3Igd2hpY2ggc3VjaAogICAg IGR1cGxpY2F0ZXMgYXJlIG1vcmUgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4KICAyLiBGb3IgbWFw cyB0aGF0IGNhbiBoYXZlIGR1cGxpY2F0ZSBrZXlzIChzdWNoIGFzIGFsaXN0cyBhbmQgcGxpc3Rz KSwgdGhlcmUKICAgICBhcmUgYWxyZWFkeSBvdGhlciBpdGVyYXRpb24gY29tbWFuZHMgKHN1Y2gg YXMgPWxpc3Q9IGFuZCA9Y29ucz0pIHRoYXQKICAgICBleHBsaWNpdGx5IGluY2x1ZGUgdGhlIGR1 cGxpY2F0ZXMuCgogIEFnYWluLCB0aGlzIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nID11bmlx dWU9IHRvIG5pbC4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgQSBjb21wYXJpc29u IG9mIHNldHRpbmcgdGhlIGB1bmlxdWUnIGtleSB0byBuaWw6CiAgICA7OwogICAgOzsgPT4gKChh IDEpIChhIDIpIChiIDMpKQogICAgKGxvb3B5IChtYXAgKGtleSAuIHZhbCkgJygoYSAuIDEpIChh IC4gMikgKGIgLiAzKSkgOnVuaXF1ZSBuaWwpCiAgICAgICAgICAgKGNvbGxlY3QgKGxpc3Qga2V5 IHZhbCkpKQoKICAgIDs7IEluIHRoaXMgY2FzZSwgYGxpc3QnIGhhcyB0aGUgc2FtZSByZXN1bHQ6 CiAgICA7OyA9PiAoKGEgMSkgKGEgMikgKGIgMykpCiAgICAobG9vcHkgKGxpc3QgKGtleSAuIHZh bCkgJygoYSAuIDEpIChhIC4gMikgKGIgLiAzKSkpCiAgICAgICAgICAgKGNvbGxlY3QgKGxpc3Qg a2V5IHZhbCkpKQoKICAgIDs7ID0+ICgoOmEgMSkgKDphIDIpICg6YiAzKSkKICAgIChsb29weSAo bWFwIChrZXkgLiB2YWwpICcoOmEgMSA6YSAyIDpiIDMpIDp1bmlxdWUgbmlsKQogICAgICAgICAg IChjb2xsZWN0IChsaXN0IGtleSB2YWwpKSkKCiAgICA7OyBJbiB0aGlzIGNhc2UsIGBjb25zJyBo YXMgdGhlIHNhbWUgcmVzdWx0OgogICAgOzsgPT4gKCg6YSAxKSAoOmEgMikgKDpiIDMpKQogICAg KGxvb3B5IChjb25zIChrZXkgdmFsKSAnKDphIDEgOmEgMiA6YiAzKSA6YnkgIydjZGRyKQogICAg ICAgICAgIChjb2xsZWN0IChsaXN0IGtleSB2YWwpKSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBz ZXEKIytmaW5kZXg6IHNlcXVlbmNlCiMrZmluZGV4OiBzZXFpbmcKIytmaW5kZXg6IHNlcXVlbmNp bmcKLSA9KHNlcXVlbmNlfHNlcSBWQVIgRVhQUiBbRVhQUlNdICZrZXkgS0VZUyk9IDo6IExvb3Ag dGhyb3VnaCB0aGUgc2VxdWVuY2UKICA9RVhQUj0sIGJpbmRpbmcgPVZBUj0gdG8gdGhlIGVsZW1l bnRzIG9mIHRoZSBzZXF1ZW5jZSAoYSBsaXN0IG9yIGFuIGFycmF5KS4KICBCZWNhdXNlIGl0IGlz IG1vcmUgZ2VuZXJpYywgPXNlcXVlbmNlPSBpcyBzb21ld2hhdCBsZXNzIGVmZmljaWVudCB0aGFu IHRoZQogID1saXN0PSBhbmQgPWFycmF5PSBjb21tYW5kcy4KCiAgIytBVFRSX1RFWElORk86IDp0 YWcgTm90ZQogICMrYmVnaW5fcXVvdGUKICBGb3IgbW9yZSBvbiBzZXF1ZW5jZXMsIHNlZSBbW2lu Zm86ZWxpc3AjU2VxdWVuY2VzIEFycmF5cyBWZWN0b3JzXV0uICBUaGlzIGNvbW1hbmQKICB3b3Jr cyB3aXRoIHRoZSBiYXNpYyBzZXF1ZW5jZXMgdW5kZXJzdG9vZCBieSB0aGUgRW1hY3MgTGlzcCBm dW5jdGlvbnMgfmxlbmd0aH4KICBhbmQgfmVsdH4uICBJdCBkb2VzIG5vdCB3b3JrIHdpdGggdGhl IGdlbmVyaWMgc2VxdWVuY2VzIHVuZGVyc3Rvb2QgYnkgdGhlCiAgbGlicmFyeSA9c2VxLmVsPS4K ICAjK2VuZF9xdW90ZQoKICBUaGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzZXMgPXNlcWlu Zz0gYW5kID1zZXF1ZW5jaW5nPS4KCiAgPUtFWVM9IGlzIG9uZSBvciBzZXZlcmFsIG9mID1mcm9t PSwgPXVwZnJvbT0sID1kb3duZnJvbT0sID10bz0sID11cHRvPSwKICA9ZG93bnRvPSwgPWFib3Zl PSwgPWJlbG93PSwgPWJ5PSwgPXRlc3Q9LCBhbmQgPWluZGV4PS4gID1pbmRleD0gbmFtZXMgdGhl CiAgdmFyaWFibGUgdXNlZCB0byBzdG9yZSB0aGUgaW5kZXggYmVpbmcgYWNjZXNzZWQuICBGb3Ig dGhlIG90aGVycywgc2VlIHRoZQogID1udW1iZXJzPSBjb21tYW5kLgoKICAjK0FUVFJfVEVYSU5G TzogOnRhZyBXYXJuaW5nCiAgIytiZWdpbl9xdW90ZQogIEFycmF5IGVsZW1lbnRzIGNhbiBiZSBh Y2Nlc3NlZCBpbiBjb25zdGFudCB0aW1lLCBidXQgbm90IGxpc3QgZWxlbWVudHMuICBGb3IKICBs aXN0cywgdGhlID1zZXF1ZW5jZT0gY29tbWFuZCBpcyBmYXN0ZXN0IHdoZW4gbW92aW5nIGZvcndh cmRzIHRocm91Z2ggdGhlCiAgbGlzdC4gIEluIHRoYXQgY2FzZSwgdGhlIGNvbW1hbmQgZG9lcyBu b3QgaGF2ZSB0byBzZWFyY2ggZnJvbSB0aGUgYmVnaW5uaW5nIG9mCiAgdGhlIGxpc3QgZWFjaCB0 aW1lIHRvIGZpbmQgdGhlIG5leHQgZWxlbWVudC4gIFRoZSA9c2VxdWVuY2U9IGNvbW1hbmQgY2Fu IGJlCiAgbm90aWNlYWJseSBzbG93ZXIgZm9yIGxpc3RzIHdoZW4gd29ya2luZyBiYWNrd2FyZHMg b3Igd2hlbiB0aGUgPXRlc3Q9CiAgcGFyYW1ldGVyIChmb3Igd2hpY2ggZGlyZWN0aW9uIGNhbm5v dCBiZSBhc3N1bWVkKSBpcyBwcm92aWRlZC4KICAjK2VuZF9xdW90ZQoKICBJZiBtdWx0aXBsZSBz ZXF1ZW5jZXMgYXJlIGdpdmVuLCB0aGVuIHRoZXNlIGtleXdvcmQgYXJndW1lbnRzIGFwcGx5IHRv IHRoZQogIHJlc3VsdGluZyBzZXF1ZW5jZSBvZiBkaXN0cmlidXRlZCBlbGVtZW50cy4KCiAgIytC RUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDEgMiAzKQogICAgKGxvb3B5IChzZXF1ZW5j ZSBpIFsxIDIgM10pCiAgICAgICAgICAgKGNvbGxlY3QgY29sbCBpKQogICAgICAgICAgIChmaW5h bGx5LXJldHVybiBjb2xsKSkKCiAgICA7OyA9PiAoMCAyIDQpCiAgICAobG9vcHkgKHNlcXVlbmNl IGkgWzAgMSAyIDMgNCA1XSA6YnkgMikKICAgICAgICAgICAoY29sbGVjdCBpKSkKCiAgICA7OyA9 PiAoMSAzIDUpCiAgICAobG9vcHkgKHNlcXVlbmNlIGkgWzAgMSAyIDMgNCA1IDZdCiAgICAgICAg ICAgICAgICA6YnkgMiA6ZnJvbSAxIDp0byA1KQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAg IDs7ID0+ICg1IDMgMSkKICAgIChsb29weSAoc2VxdWVuY2UgaSAnKDAgMSAyIDMgNCA1IDYpCiAg ICAgICAgICAgICAgICA6ZG93bmZyb20gNSA6YnkgMiA6dG8gMSkKICAgICAgICAgICAoY29sbGVj dCBpKSkKCiAgICA7OyA9PiAoKDEgMykgKDEgNCkgKDIgMykgKDIgNCkpCiAgICAobG9vcHkgKHNl cXVlbmNlIGkgWzEgMl0gJygzIDQpKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7ID0+ ICgoMSAzKSAoMiAzKSkKICAgIChsb29weSAoc2VxdWVuY2UgaSBbMSAyXSAnKDMgNCkgOmJ5IDIp CiAgICAgICAgICAgKGNvbGxlY3QgaSkpCiAgIytFTkRfU1JDCgoqKiogU2VxdWVuY2UgSW5kZXgg SXRlcmF0aW9uCjpQUk9QRVJUSUVTOgo6Q1VTVE9NX0lEOiBzZXF1ZW5jZS1pbmRleC1pdGVyYXRp b24KOkRFU0NSSVBUSU9OOiBJdGVyYXRpbmcgdGhyb3VnaCBpbmRpY2VzIHdpdGhvdXQgYWNjZXNz aW5nIHZhbHVlcy4KOkVORDoKClRoaXMgY29tbWFuZCBpcyBmb3IgaXRlcmF0aW5nIHRocm91Z2gg YSBzZXF1ZW5jZSdzIGluZGljZXMgd2l0aG91dCBhY2Nlc3NpbmcKdGhlIGFjdHVhbCB2YWx1ZXMg b2YgdGhhdCBzZXF1ZW5jZS4gIFRoaXMgaXMgaGVscGZ1bCBpZiB5b3Uga25vdyBhaGVhZCBvZgp0 aW1lIHRoYXQgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzbWFsbCBzdWJzZXQgb2YgdGhl IHNlcXVlbmNlJ3MKZWxlbWVudHMuCgpBcyB3aXRoIHRoZSA9YXJyYXk9IGFuZCA9c2VxPSBjb21t YW5kcywgdGhlID1zZXEtaW5kZXg9IGNvbW1hbmQgY2FuIHVzZSB0aGUKc2FtZSBrZXl3b3JkcyBh cyB0aGUgPW51bWJlcnM9IGNvbW1hbmQgKFtbI251bWVyaWMtaXRlcmF0aW9uXV0pIGZvciB3b3Jr aW5nIHdpdGgKdGhlIGluZGV4IGFuZCBjaG9vc2luZyBhIHJhbmdlIG9mIHRoZSBzZXF1ZW5jZSBl bGVtZW50cyB0aHJvdWdoIHdoaWNoIHRvCml0ZXJhdGUuCgojK2ZpbmRleDogc2VxLWluZGV4CiMr ZmluZGV4OiBzZXFpCiMrZmluZGV4OiBzZXFpbmctaW5kZXgKIytmaW5kZXg6IHNlcXVlbmNpbmct aW5kZXgKIytmaW5kZXg6IHNlcWkKIytmaW5kZXg6IGFycmF5LWluZGV4CiMrZmluZGV4OiBhcnJh eWluZy1pbmRleAojK2ZpbmRleDogYXJyYXlpCiMrZmluZGV4OiBsaXN0LWluZGV4CiMrZmluZGV4 OiBsaXN0aW5nLWluZGV4CiMrZmluZGV4OiBsaXN0aQojK2ZpbmRleDogc3RyaW5nLWluZGV4CiMr ZmluZGV4OiBzdHJpbmdpbmctaW5kZXgKIytmaW5kZXg6IHN0cmluZ2kKLSA9KHNlcS1pbmRleCBW QVIgRVhQUiAma2V5IEtFWVMpPSA6OiBJdGVyYXRlIHRocm91Z2ggdGhlIGluZGljZXMgb2YgPUVY UFI9LgoKICBUaGVyZSBpcyBvbmx5IG9uZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNvbW1hbmQ7 IHRoZXJlIGFyZSBubwogIHR5cGUtc3BlY2lmaWMgdmVyc2lvbnMuICBUaGlzIGNvbW1hbmQgYWxz byBoYXMgdGhlIGZvbGxvd2luZyBhbGlhc2VzOgogIC0gPWFycmF5LWluZGV4PSwgPWFycmF5aW5n LWluZGV4PSwgPWFycmF5aT0KICAtID1saXN0LWluZGV4PSwgPWxpc3RpbmctaW5kZXg9LCA9bGlz dGk9CiAgLSA9c3RyaW5nLWluZGV4PSwgPXN0cmluZ2luZy1pbmRleD0sID1zdHJpbmdpPQogIC0g PXNlcXVlbmNlLWluZGV4PSwgPXNlcXVlbmNlaW5nLWluZGV4PSwgPXNlcXVlbmNlaT0sID1zZXFp PSwgPXNlcWluZy1pbmRleD0KCgogIFRoZSBhbGlhc2VzID1zZXFpPSwgPWFycmF5aT0sID1saXN0 aT0sIGFuZCA9c3RyaW5naT0gYXJlIHNpbWlsYXIgdG8gdGhlCiAgYWxpYXNlcyA9c2VxZj0sID1h cnJheWY9LCA9bGlzdGY9LCBhbmQgPXN0cmluZ2Y9IG9mIHRoZSA9c2VxLXJlZj0gY29tbWFuZC4K CiAgPUtFWVM9IGlzIG9uZSBvciBzZXZlcmFsIG9mID1mcm9tPSwgPXVwZnJvbT0sID1kb3duZnJv bT0sID10bz0sID11cHRvPSwKICA9ZG93bnRvPSwgPWFib3ZlPSwgPWJlbG93PSwgPWJ5PSwgYW5k ID10ZXN0PS4gIEZvciB0aGVpciBtZWFuaW5nLCBzZWUgdGhlCiAgPW51bWJlcnM9IGNvbW1hbmQu ICBUaGlzIGNvbW1hbmQgaXMgdmVyeSBzaW1pbGFyIHRvID1udW1iZXJzPSwgZXhjZXB0IHRoYXQg aXQKICBjYW4gYXV0b21hdGljYWxseSBlbmQgdGhlIGxvb3Agd2hlbiB0aGUgaW5kZXggb2YgdGhl IGZpbmFsIGVsZW1lbnQgaXMgcmVhY2hlZC4KICBXaXRoID1udW1iZXJzPSwgb25lIHdvdWxkIGZp cnN0IG5lZWQgdG8gZXhwbGljaXRseSBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUKICBzZXF1 ZW5jZS4KCiAgU2ltaWxhciB0byA9bnVtYmVycz0sIGZvciBlZmZpY2llbmN5LCA9VkFSPSBpcyBp bml0aWFsaXplZCB0byB0aGUgc3RhcnRpbmcKICBpbmRleCB2YWx1ZSwgbm90IH5uaWx+LCBhbmQg aXMgdXBkYXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggc3RlcCBvZiB0aGUgbG9vcC4KICBUaGlzIGNh biBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSA9d2l0aD0gc3BlY2lhbCBtYWNybyBhcmd1bWVudCwg d2hpY2ggY2FuCiAgcmVzdWx0IGluIHNsb3dlciBjb2RlLgoKICAjK2JlZ2luX3NyYyBlbWFjcy1s aXNwCiAgICA7OyA9PiAoOTcgOTggOTkgMTAwIDEwMSAxMDIpCiAgICAobG9vcHkgKHdpdGggKG15 LXN0cmluZyAiYWJjZGVmIikpCiAgICAgICAgICAgKHN0cmluZy1pbmRleCBpZHggbXktc3RyaW5n KQogICAgICAgICAgIChjb2xsZWN0IChhcmVmIG15LXN0cmluZyBpZHgpKSkKCiAgICA7OyBXb3Jr cyB0aGUgc2FtZSBhcwogICAgKGxvb3B5ICh3aXRoIChteS1zdHJpbmcgImFiY2RlZiIpKQogICAg ICAgICAgIChudW1iZXJzIGlkeCA6ZnJvbSAwIDpiZWxvdyAobGVuZ3RoIG15LXN0cmluZykpCiAg ICAgICAgICAgKGNvbGxlY3QgKGFyZWYgbXktc3RyaW5nIGlkeCkpKQogICMrZW5kX3NyYwoKICBU aGlzIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBkZXN0cnVjdHVyaW5nLgoKICAjK2JlZ2luX3Ny YyBlbWFjcy1saXNwCiAgICA7OyA9PiAoMCAxIDIpCiAgICAobG9vcHkgKHNlcS1pbmRleCBpIFsx IDIgM10pCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCgogICAgOzsgPT4gKDAgMSAyKQogICAgKGxv b3B5IChhcnJheS1pbmRleCBpICJhYmMiKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7 ID0+ICgwIDEgMikKICAgIChsb29weSAobGlzdC1pbmRleCBpICcoMSAyIDMpKQogICAgICAgICAg IChjb2xsZWN0IGkpKQoKICAgIDs7ID0+ICg4IDYgNCAyKQogICAgKGxvb3B5ICh3aXRoIChteS1z ZXEgWzAgMSAyIDMgNCA1IDYgNyA4IDkgMTBdKSkKICAgICAgICAgICAoc2VxLWluZGV4IGlkeCBt eS1zZXEgOmZyb20gOCA6ZG93bnRvIDEgOmJ5IDIpCiAgICAgICAgICAgKGNvbGxlY3QgKGVsdCBt eS1zZXEgaWR4KSkpCiAgIytlbmRfc3JjCgoqKiogU2VxdWVuY2UgUmVmZXJlbmNlIEl0ZXJhdGlv bgo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogc2VxdWVuY2UtcmVmZXJlbmNlLWl0ZXJhdGlvbgo6 REVTQ1JJUFRJT046IEl0ZXJhdGluZyB0aHJvdWdoIHBsYWNlcy9maWVsZHMgaW4gc2VxdWVuY2Vz Lgo6RU5EOgoKVGhlc2UgY29tbWFuZHMgYWxsIGl0ZXJhdGUgdGhyb3VnaCB+c2V0Zn4tYWJsZSBw bGFjZXMgYXMgZ2VuZXJhbGl6ZWQKdmFyaWFibGVzIChbW2luZm86ZWxpc3AjR2VuZXJhbGl6ZWQg VmFyaWFibGVzXV0pLiAgVGhlc2UgZ2VuZXJhbGl6ZWQgdmFyaWFibGVzCmFyZSBjb21tb25seSBj YWxsZWQgInJlZmVyZW5jZXMiLCAiZmllbGRzIiwgb3IgInBsYWNlcyIuICBUaGUgYmVsb3cgZXhh bXBsZQpkZW1vbnN0cmF0ZXMgdXNpbmcgfihudGggMSBteS1saXN0KX4gYW5kIH4oYXJlZiBteS1h cnJheSAxKX4gYXMgfnNldGZ+LWFibGUKcGxhY2VzLgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAog IDs7ID0+ICgxIDk5IDMgNCA1KQogIChsZXQgKChteS1saXN0ICcoMSAyIDMgNCA1KSkpCiAgICAo c2V0ZiAobnRoIDEgbXktbGlzdCkgOTkpCiAgICBteS1saXN0KQoKICA7OyA9PiBbKDEgMiAzKSAo NCAuIDk5KV0KICAobGV0ICgobXktYXJyYXkgWygxIDIgMykgKDQgNSA2KV0pKQogICAgKHNldGYg KGNkciAoYXJlZiBteS1hcnJheSAxKSkgOTkpCiAgICBteS1hcnJheSkKIytlbmRfc3JjCgpMaWtl IG90aGVyIGNvbW1hbmRzLCAiZmllbGQiIG9yICJyZWZlcmVuY2UiIGNvbW1hbmRzIGNhbiBhbHNv IHVzZQpkZXN0cnVjdHVyaW5nLCBpbiB3aGljaCBjYXNlIHRoZSBmaWVsZHMvcGxhY2VzIG9mIHRo ZSBzZXF1ZW5jZSBhcmUKZGVzdHJ1Y3R1cmVkIGludG8gInN1Yi1maWVsZHMiLCBsaWtlIHRoZSB+ Y2RyfiBvZiB0aGUgc2Vjb25kIGFycmF5IGVsZW1lbnQKaW4gdGhlIGV4YW1wbGUgYWJvdmUuCgoj K2F0dHJfdGV4aW5mbzogOnRhZyBDYXV0aW9uCiMrYmVnaW5fcXVvdGUKQmUgYXdhcmUgdGhhdCB1 c2luZyB+c2V0Zn4gb24gYW4gYXJyYXkgc3ViLXNlcXVlbmNlIG5hbWVkIGJ5ID0mcmVzdD0Kd2ls bCBvbmx5IG92ZXJ3cml0ZSB2YWx1ZXMsIG5vdCB0cnVuY2F0ZSBvciBncm93IHRoZSBhcnJheS4g CiMrZW5kX3F1b3RlCgojK2F0dHJfdGV4aW5mbzogOnRhZyBXYXJuaW5nCiMrYmVnaW5fcXVvdGUK VW5mb3J0dW5hdGVseSwgbm90IGFsbCBraW5kcyBvZiByZWN1cnNpdmUgZGVzdHJ1Y3R1cmluZyB3 b3JrIG9uIHJlZmVyZW5jZXMuClRoaXMgaXMgYSBsaW1pdGF0aW9uIG9mIGhvdyBnZW5lcmljIHNl dHRlcnMgYXJlIGltcGxlbWVudGVkLCBhbmQgbm90IGFsbApsaW1pdGF0aW9ucyBhcmUgc3BlY2lm aWMgdG8gfmxvb3B5fi4KCkN1cnJlbnRseToKLSBUaGUgdmFyaWFibGUgYWZ0ZXIgPSZyZXN0PSBp biBhcnJheXMgY2Fubm90IGJlIHJlY3Vyc2l2ZS4KLSBUaGUgdmFyaWFibGVzIGFmdGVyID0mbWFw PSBjYW5ub3QgYmUgcmVjdXJzaXZlIGR1ZSB0byB0aGUgY3VycmVudAogIGltcGxlbWVudGF0aW9u IG9mID1tYXAuZWw9IHVwc3RyZWFtLgotID0mb3B0aW9uYWw9IHZhcmlhYmxlcyBhcmUgbm90IHN1 cHBvcnRlZAotID1TVVBQTElFRD0gdmFyaWFibGVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciA9Jmtl eT0gYW5kID0mbWFwPS4KLSBOb24tbmlsIGRlZmF1bHQgdmFsdWVzIGZvciA9Jm9wdGlvbmFsPSwg PSZrZXk9LCBhbmQgPSZtYXA9IGFyZSBub3Qgc3VwcG9ydGVkLgojK2VuZF9xdW90ZQoKQXMgd2l0 aCB0aGUgPWFycmF5PSBhbmQgPXNlcT0gY29tbWFuZHMsIHRoZSA9YXJyYXktcmVmPSBhbmQgPXNl cS1yZWY9CmNvbW1hbmRzIGNhbiB1c2UgdGhlIHNhbWUga2V5d29yZHMgYXMgdGhlID1udW1iZXJz PSBjb21tYW5kCihbWyNudW1lcmljLWl0ZXJhdGlvbl1dKSBmb3Igd29ya2luZyB3aXRoIHRoZSBp bmRleCBhbmQgY2hvb3NpbmcgYSByYW5nZSBvZiB0aGUKc2VxdWVuY2UgZWxlbWVudHMgdGhyb3Vn aCB3aGljaCB0byBpdGVyYXRlLiAgSW4gYWRkaXRpb24gdG8gdGhvc2Uga2V5d29yZHMsCnRoZXkg YWxzbyBoYXZlIGFuID1pbmRleD0ga2V5d29yZCwgd2hpY2ggbmFtZXMgdGhlIHZhcmlhYmxlIHVz ZWQgdG8gc3RvcmUKdGhlIGFjY2Vzc2VkIGluZGV4IGR1cmluZyB0aGUgbG9vcC4KCiMrZmluZGV4 OiBhcnJheS1yZWYKIytmaW5kZXg6IGFycmF5ZgojK2ZpbmRleDogc3RyaW5nLXJlZgojK2ZpbmRl eDogc3RyaW5nZgojK2ZpbmRleDogYXJyYXlpbmctcmVmCiMrZmluZGV4OiBhcnJheWluZ2YKIytm aW5kZXg6IHN0cmluZ2luZy1yZWYKIytmaW5kZXg6IHN0cmluZ2luZ2YKIytmaW5kZXg6IGFjcm9z cy1yZWYKLSA9KGFycmF5LXJlZnxhcnJheWZ8c3RyaW5nLXJlZnxzdHJpbmdmIFZBUiBFWFBSICZr ZXkgS0VZUyk9IDo6IExvb3AKICB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkgPUVY UFI9LCBiaW5kaW5nID1WQVI9IGFzIGEgfnNldGZ+LWFibGUKICBwbGFjZS4KCiAgPUtFWVM9IGlz IG9uZSBvciBzZXZlcmFsIG9mID1mcm9tPSwgPXVwZnJvbT0sID1kb3duZnJvbT0sID10bz0sID11 cHRvPSwKICA9ZG93bnRvPSwgPWFib3ZlPSwgPWJlbG93PSwgPWJ5PSwgYW5kID1pbmRleD0uICA9 aW5kZXg9IG5hbWVzIHRoZSB2YXJpYWJsZQogIHVzZWQgdG8gc3RvcmUgdGhlIGluZGV4IGJlaW5n IGFjY2Vzc2VkLiAgRm9yIG90aGVycywgc2VlIHRoZSA9bnVtYmVycz0KICBjb21tYW5kLgoKICAj K0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7OyA9PiAiYWFhIgogICAgKGxvb3B5ICh3aXRoICht eS1zdHIgImNhdCIpKQogICAgICAgICAgIChhcnJheS1yZWYgaSBteS1zdHIpCiAgICAgICAgICAg KGRvIChzZXRmIGkgP2EpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1zdHIpKQoKICAg IDs7ID0+ICIwYTJhNGE2YTg5IgogICAgKGxvb3B5ICh3aXRoIChteS1zdHIgIjAxMjM0NTY3ODki KSkKICAgICAgICAgICAoYXJyYXktcmVmIGkgbXktc3RyIDpmcm9tIDEgOmJ5IDIgOnRvIDcpCiAg ICAgICAgICAgKGRvIChzZXRmIGkgP2EpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1z dHIpKQoKICAgIDs7IFdvcmtzIHRoZSBzYW1lIGFzCiAgICAobG9vcHkgKHdpdGggKG15LXN0ciAi MDEyMzQ1Njc4OSIpKQogICAgICAgICAgIChudW1iZXJzIGlkeCAxIDcgOmJ5IDIpCiAgICAgICAg ICAgKGRvIChzZXRmIChhcmVmIG15LXN0ciBpZHgpID9hKSkKICAgICAgICAgICAoZmluYWxseS1y ZXR1cm4gbXktc3RyKSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiBsaXN0LXJlZgojK2ZpbmRleDog bGlzdGluZy1yZWYKIytmaW5kZXg6IGxpc3RmCiMrZmluZGV4OiBsaXN0aW5nZgojK2ZpbmRleDog aW4tcmVmCi0gPShsaXN0LXJlZnxsaXN0ZiBWQVIgRVhQUiAma2V5IGJ5KT0gOjogTG9vcCB0aHJv dWdoIHRoZSBlbGVtZW50cyBvZgogIHRoZSBsaXN0ID1FWFBSPSwgYmluZGluZyA9VkFSPSBhcyBh IH5zZXRmfi1hYmxlIHBsYWNlLiAgT3B0aW9uYWxseSwgdXBkYXRlCiAgdGhlIGxpc3QgdmlhIGZ1 bmN0aW9uID1ieT0gaW5zdGVhZCBvZiB+Y2Ryfi4KCiAgIytCRUdJTl9TUkMgZW1hY3MtbGlzcAog ICAgOzsgPT4gKDcgNyA3KQogICAgKGxvb3B5ICh3aXRoIChteS1saXN0ICcoMSAyIDMpKSkKICAg ICAgICAgICAobGlzdC1yZWYgaSBteS1saXN0KQogICAgICAgICAgIChkbyAoc2V0ZiBpIDcpKQog ICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1saXN0KSkKCiAgICA7OyBXb3JrcyBzaW1pbGFy IHRvCiAgICAobG9vcHkgKHdpdGggKG15LWxpc3QgJygxIDIgMykpKQogICAgICAgICAgIChudW1i ZXJzIGlkeCA6YmVsb3cgKGxlbmd0aCBteS1saXN0KSkKICAgICAgICAgICAoZG8gKHNldGYgKG50 aCBpZHggbXktbGlzdCkgNykpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIG15LWxpc3QpKQoK ICAgIDs7ID0+ICg3IDIgNykKICAgIChsb29weSAod2l0aCAobXktbGlzdCAnKDEgMiAzKSkpCiAg ICAgICAgICAgKGxpc3QtcmVmIGkgbXktbGlzdCA6YnkgIydjZGRyKQogICAgICAgICAgIChkbyAo c2V0ZiBpIDcpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1saXN0KSkKCiAgICA7OyA9 PiAoWzEgN10gWzIgN10pCiAgICAobG9vcHkgKHdpdGggKG15LWxpc3QgJyhbMSAyXSBbMiAzXSkp KQogICAgICAgICAgIChsaXN0LXJlZiBbXyBpXSBteS1saXN0KQogICAgICAgICAgIChkbyAoc2V0 ZiBpIDcpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1saXN0KSkKICAjK0VORF9TUkMK CiMrZmluZGV4OiBtYXAtcmVmCiMrZmluZGV4OiBtYXBwaW5nLXJlZgojK2ZpbmRleDogbWFwZgoj K2ZpbmRleDogbWFwcGluZ2YKLSA9KG1hcC1yZWZ8bWFwZiBWQVIgRVhQUiAma2V5IGtleSB1bmlx dWUpPSA6OiBMb29wIHRocm91Z2ggdGhlIHZhbHVlcyBvZgogIG1hcCA9RVhQUj0sIGJpbmRpbmcg PVZBUj0gYXMgYSB+c2V0Zn4tYWJsZSBwbGFjZS4gIExpa2UgdGhlIGNvbW1hbmQgPW1hcD0sCiAg dGhpcyBjb21tYW5kIHVzZXMgdGhlID1tYXAuZWw9IGxpYnJhcnkuCgogID1rZXk9IGlzIGEgdmFy aWFibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIGN1cnJlbnQga2V5IGZvciB0aGUgfnNldGZ+LWFi bGUKICBwbGFjZSByZWZlcnJlZCB0byBieSA9VkFSPS4gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUg PWluZGV4PSBrZXl3b3JkIHBhcmFtZXRlcgogIG9mIG90aGVyIGNvbW1hbmRzLiAgVGhpcyBpcyBu b3QgdGhlIHNhbWUgYXMgdGhlID1rZXk9IGtleXdvcmQgcGFyYW1ldGVyIG9mIHRoZQogIGFjY3Vt dWxhdGlvbiBjb21tYW5kcy4KCiAgTGlrZSBpbiB0aGUgY29tbWFuZCA9bWFwPSwgdGhlIGtleXMg b2YgdGhlIG1hcCBhcmUgZ2VuZXJhdGVkIGJlZm9yZSB0aGUKICBsb29wIGlzIHJ1biwgd2hpY2gg Y2FuIGJlIGV4cGVuc2l2ZSBmb3IgbGFyZ2UgbWFwcy4KCiAgU2ltaWxhciB0byA9bWFwPSwgYW55 IGR1cGxpY2F0ZSBrZXlzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuICBUaGlzIGNhbiBiZQogIGRp c2FibGVkIGJ5IHNldHRpbmcgdGhlID11bmlxdWU9IGtleXdvcmQgYXJndW1lbnQgdG8gbmlsLCB0 aG91Z2ggbm90ZSB0aGF0CiAgdXNpbmcgc3VjaCBkdXBsaWNhdGUga2V5cyB3aWxsIHN0aWxsIHJl ZmVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QKICBvY2N1cmVuY2UuICBUaGVyZSBpcyBubyB3 YXkgdG8gdXNlIGEgZHVwbGljYXRlIGtleSB0byByZWZlciB0byB0aGUKICBkdXBsaWNhdGUncyB2 YWx1ZS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgRHVwbGljYXRlIGtleXMgYXJl IGlnbm9yZWQgYnkgZGVmYXVsdC4KICAgIDs7CiAgICA7OyA9PiAoOmEgOCA6YSAnaWdub3JlZCA6 YiAxMCkKICAgIChsb29weSAod2l0aCAobWFwIChsaXN0IDphIDEgOmEgJ2lnbm9yZWQgOmIgMykp KQogICAgICAgICAgIChtYXAtcmVmIGkgbWFwKQogICAgICAgICAgIChkbyAoY2wtaW5jZiBpIDcp KQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBtYXApKQoKICAgIDs7IElmIGR1cGxpY2F0ZXMg YXJlIG5vdCBpZ25vcmVkOgogICAgOzsKICAgIDs7ID0+ICg6YSAxNSA6YSBpZ25vcmVkIDpiIDEw KQogICAgKGxvb3B5ICh3aXRoIChtYXAgKGxpc3QgOmEgMSA6YSAnaWdub3JlZCA6YiAzKSkpCiAg ICAgICAgICAgKG1hcC1yZWYgaSBtYXAgOnVuaXF1ZSBuaWwpCiAgICAgICAgICAgKGRvIChjbC1p bmNmIGkgNykpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIG1hcCkpCgogICAgOzsgR2V0dGlu ZyB0aGUga2V5IHVzaW5nIGBrZXknOgogICAgOzsKICAgIDs7ID0+ICgoKGNhdCAuIDcpICAgICAg IDsgVGhlIG1hcCBpdHNlbGYKICAgIDs7ICAgICAgKGRvZyAuIDcpCiAgICA7OyAgICAgICh6ZWJy YSAuIDcpKQogICAgOzsgICAgIChjYXQgZG9nIHplYnJhKSkgOyBUaGUga2V5cwogICAgKGxvb3B5 ICh3aXRoIChtYXAgKGxpc3QgKGNvbnMgJ2NhdCAxKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnMgJ2RvZyAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgJ3plYnJh IDMpKSkpCiAgICAgICAgICAgKG1hcC1yZWYgaSBtYXAgOmtleSBteS1rZXkpCiAgICAgICAgICAg KGRvIChzZXRmIGkgNykpCiAgICAgICAgICAgKGNvbGxlY3QgbXkta2V5KQogICAgICAgICAgIChm aW5hbGx5LXJldHVybiBtYXAgbG9vcHktcmVzdWx0KSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBz ZXEtcmVmCiMrZmluZGV4OiBzZXFmCiMrZmluZGV4OiBzZXF1ZW5jZS1yZWYKIytmaW5kZXg6IHNl cXVlbmNpbmctcmVmCiMrZmluZGV4OiBzZXF1ZW5jZWYKIytmaW5kZXg6IHNlcXVlbmNpbmdmCiMr ZmluZGV4OiBlbGVtZW50cy1yZWYKLSA9KHNlcXVlbmNlLXJlZnxzZXF1ZW5jZWZ8c2VxLXJlZnxz ZXFmIFZBUiBFWFBSICZrZXkgS0VZUyk9IDo6IExvb3AKICB0aHJvdWdoIHRoZSBlbGVtZW50cyBv ZiB0aGUgc2VxdWVuY2UgPUVYUFI9LCBiaW5kaW5nID1WQVI9IGFzIGEKICB+c2V0Zn4tYWJsZSBw bGFjZS4KCiAgPUtFWVM9IGlzIG9uZSBvciBzZXZlcmFsIG9mID1mcm9tPSwgPXVwZnJvbT0sID1k b3duZnJvbT0sID10bz0sID11cHRvPSwKICA9ZG93bnRvPSwgPWFib3ZlPSwgPWJlbG93PSwgPWJ5 PSwgPXRlc3Q9LCBhbmQgPWluZGV4PS4gID1pbmRleD0gbmFtZXMgdGhlCiAgdmFyaWFibGUgdXNl ZCB0byBzdG9yZSB0aGUgaW5kZXggYmVpbmcgYWNjZXNzZWQuICBGb3Igb3RoZXJzLCBzZWUgdGhl CiAgPW51bWJlcnM9IGNvbW1hbmQuCgogICMrQkVHSU5fU1JDIGVtYWNzLWxpc3AKICAgIDs7ID0+ ICg3IDcgNyA3KQogICAgKGxvb3B5ICh3aXRoIChteS1zZXEgKGxpc3QgMSAyIDMgNCkpKQogICAg ICAgICAgIChzZXF1ZW5jZS1yZWYgaSBteS1zZXEpCiAgICAgICAgICAgKGRvIChzZXRmIGkgNykp CiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIG15LXNlcSkpCgogICAgOzsgPT4gKDAgY2F0IDIg Y2F0IDQgY2F0IDYgY2F0IDggY2F0KQogICAgKGxvb3B5ICh3aXRoIChteS1saXN0IChsaXN0IDAg MSAyIDMgNCA1IDYgNyA4IDkpKSkKICAgICAgICAgICAoc2VxdWVuY2UtcmVmIGkgbXktbGlzdCA6 ZnJvbSAxIDpieSAyICkKICAgICAgICAgICAoZG8gKHNldGYgaSAnY2F0KSkKICAgICAgICAgICAo ZmluYWxseS1yZXR1cm4gbXktbGlzdCkpCgogICAgOzsgPT4gIjAxMjM0NTZhOGEiCiAgICAobG9v cHkgKHdpdGggKG15LXN0ciAoY29weS1zZXF1ZW5jZSAiMDEyMzQ1Njc4OSIpKSkKICAgICAgICAg ICAoc2VxdWVuY2UtcmVmIGkgbXktc3RyIDpkb3dudG8gNiA6YnkgMiApCiAgICAgICAgICAgKGRv IChzZXRmIGkgP2EpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1zdHIpKQogICMrRU5E X1NSQwoKKiogQWNjdW11bGF0aW9uCjpQUk9QRVJUSUVTOgo6Q1VTVE9NX0lEOiBhY2N1bXVsYXRp b24tY29tbWFuZHMKOkRFU0NSSVBUSU9OOiBBY2N1bXVsYXRpbmcgdmFsdWVzIGludG8gbmV3IHNl cXVlbmNlcywgYWdncmVnYXRpbmcgdmFsdWVzLCBldGMuCjpFTkQ6CgpBY2N1bXVsYXRpb24gY29t bWFuZHMgYXJlIHVzZWQgdG8gYWNjdW11bGF0ZSBvciBhZ2dyZWdhdGUgdmFsdWVzIGludG8gYQp2 YXJpYWJsZSwgc3VjaCBhcyBjcmVhdGluZyBhIGxpc3Qgb2YgdmFsdWVzIG9yIHN1bW1pbmcgdGhl IGVsZW1lbnRzIGluIGEKc2VxdWVuY2UuCgpVbmxpa2UgaXRlcmF0aW9uIGNvbW1hbmRzLCB5b3Ug Y2FuIHJlZmVyIHRvIHRoZSBzYW1lIGFjY3VtdWxhdGlvbiB2YXJpYWJsZSBpbgptdWx0aXBsZSBh Y2N1bXVsYXRpb24gY29tbWFuZHMgaWYgbmVlZGVkLgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAog IDs7ID0+ICgxIDYgMiA3IDMgOCkKICAobG9vcHkgKGxpc3QgaSAnKDEgMiAzKSkKICAgICAgICAg KGNvbGxlY3QgY29sbCBpKQogICAgICAgICAoY29sbGVjdCBjb2xsICgrIGkgNSkpCiAgICAgICAg IChmaW5hbGx5LXJldHVybiBjb2xsKSkKIytlbmRfc3JjCgojK2F0dHJfdGV4aW5mbzogOnRhZyBO b3RlCiMrYmVnaW5fcXVvdGUKS2VlcCBpbiBtaW5kIHRoYXQgaXQgaXMgYW4gZXJyb3IgdG8gbW9k aWZ5IGFjY3VtdWxhdGlvbiB2YXJpYWJsZXMgb3V0c2lkZSBvZgphY2N1bXVsYXRpb24gY29tbWFu ZHMuICBUaGlzIHJlc3RyaWN0aW9uIGFsbG93cyBhY2N1bXVsYXRpb25zIHRvIGJlIG11Y2ggZmFz dGVyLgojK2VuZF9xdW90ZQoKIytjaW5kZXg6IGFjY3VtdWxhdGlvbiBpbml0aWFsIHZhbHVlcwpM aWtlIHdpdGggb3RoZXIgbG9vcCBjb21tYW5kcywgdmFyaWFibGVzIGNyZWF0ZWQgYnkgYWNjdW11 bGF0aW9uIGNvbW1hbmRzIChzdWNoCmFzIH5jb2xsfiBpbiB0aGUgYWJvdmUgZXhhbXBsZSkgYXJl IGluaXRpYWxpemVkIHRvIH5uaWx+IHVubGVzcyBzdGF0ZWQKb3RoZXJ3aXNlLiAgV2hlbiBvdGhl cndpc2UsIHN1Y2ggYXMgZm9yIHRoZSBjb21tYW5kcyA9c3VtPSBhbmQgPW11bHRpcGx5PSwgdGhl CmluaXRpYWwgdmFsdWUgb2YgYSB2YXJpYWJsZSBkZXBlbmRzIG9uIHRoZSBmaXJzdCBhY2N1bXVs YXRpb24gY29tbWFuZCB1c2luZyB0aGF0CnZhcmlhYmxlIGluIHRoZSBhcmd1bWVudHMgZ2l2ZW4g dG8gdGhlIG1hY3JvLiAgUmVtZW1iZXIgdGhhdCBhIHZhcmlhYmxlJ3MKaW5pdGlhbCB2YWx1ZSBj YW4gYmUgY29udHJvbGxlZCB1c2luZyB0aGUgPXdpdGg9IHNwZWNpYWwgbWFjcm8gYXJndW1lbnQu CgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgPT4gMjcKICAobG9vcHkgKG51bWJlcnMgaSA6 ZnJvbSAxIDp0byAzKQogICAgICAgICAoc3VtIG15LWFjY3VtIGkpIDsgU3RhcnRzIGF0IDAuCiAg ICAgICAgIChtdWx0aXBseSBteS1hY2N1bSBpKQogICAgICAgICAoZmluYWxseS1yZXR1cm4gbXkt YWNjdW0pKQoKICA7OyA9PiAyMQogIChsb29weSAobnVtYmVycyBpIDpmcm9tIDEgOnRvIDMpCiAg ICAgICAgIChtdWx0aXBseSBteS1hY2N1bSBpKSA7IFN0YXJ0cyBhdCAxLgogICAgICAgICAoc3Vt IG15LWFjY3VtIGkpCiAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1hY2N1bSkpCgogIDs7IFVz aW5nIGB3aXRoJzoKICA7OwogIDs7ID0+IDg3CiAgKGxvb3B5ICh3aXRoIChteS1hY2N1bSAxMCkp CiAgICAgICAgIChudW1iZXJzIGkgOmZyb20gMSA6dG8gMykKICAgICAgICAgKHN1bSBteS1hY2N1 bSBpKSA7IFN0YXJ0cyBhdCAwLgogICAgICAgICAobXVsdGlwbHkgbXktYWNjdW0gaSkKICAgICAg ICAgKGZpbmFsbHktcmV0dXJuIG15LWFjY3VtKSkKIytlbmRfc3JjCgojK2NpbmRleDogYWNjdW11 bGF0aW9uIGRlc3RydWN0dXJpbmcKU2ltaWxhciB0byBpdGVyYXRpb24gY29tbWFuZHMsIGFjY3Vt dWxhdGlvbiBjb21tYW5kcyBjYW4gYWxzbyB1c2UgZGVzdHJ1Y3R1cmluZy4KSW4gYWNjdW11bGF0 aW9uIGNvbW1hbmRzLCB0aGUgdmFsdWVzIHJlc3VsdGluZyBmcm9tIGRlc3RydWN0dXJpbmcgYXJl CmFjY3VtdWxhdGVkLCBpbnN0ZWFkIG9mIHRoZSBkZXN0cnVjdHVyZWQgdmFsdWUuCgojK2JlZ2lu X3NyYyBlbWFjcy1saXNwCiAgOzsgPT4gKCgxIDQpICgyIDUpICgzIDYpKQogIChsb29weSAobGlz dCBlbGVtICcoKDEgMiAzKSAoNCA1IDYpKSkKICAgICAgICAgKGNvbGxlY3QgKGNvbGwxIGNvbGwy IGNvbGwzKSBlbGVtKQogICAgICAgICAoZmluYWxseS1yZXR1cm4gY29sbDEgY29sbDIgY29sbDMp KQoKICA7OyA9PiAoNSA3IDkpCiAgKGxvb3B5IChsaXN0IGVsZW0gJygoMSAyIDMpICg0IDUgNikp KQogICAgICAgICAoc3VtIChzdW0xIHN1bTIgc3VtMykgZWxlbSkKICAgICAgICAgKGZpbmFsbHkt cmV0dXJuIHN1bTEgc3VtMiBzdW0zKSkKCiAgOzsgUmV0dXJucyB0aGUgc2FtZSB2YWx1ZXMgYXMg YWJvdmUuCiAgKGxvb3B5IChsaXN0IGVsZW0gJygoMSAyIDMpICg0IDUgNikpKQogICAgICAgICAo c2V0IHN1bTEgKGNsLWZpcnN0IGVsZW0pICAoKyBzdW0xIChjbC1maXJzdCBlbGVtKSkpCiAgICAg ICAgIChzZXQgc3VtMiAoY2wtc2Vjb25kIGVsZW0pICgrIHN1bTIgKGNsLXNlY29uZCBlbGVtKSkp CiAgICAgICAgIChzZXQgc3VtMyAoY2wtdGhpcmQgZWxlbSkgICgrIHN1bTMgKGNsLXRoaXJkIGVs ZW0pKSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIHN1bTEgc3VtMiBzdW0zKSkKIytlbmRfc3Jj CgojK2NpbmRleDogaW1wbGllZCBhY2N1bXVsYXRpb24gcmVzdWx0cwpMaWtlIGluIH5jbC1sb29w fiwgeW91IGRvIG5vdCBuZWVkIHRvIHN1cHBseSBhIHZhcmlhYmxlIG5hbWUgdG8gYWNjdW11bGF0 aW9uCmNvbW1hbmRzLiAgSWYgbm8gYWNjdW11bGF0aW9uIHZhcmlhYmxlIGlzIGdpdmVuLCB0aGVu IHRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBpcwp1bmRlcnN0b29kIHRvIGJlIHRoZSByZXR1cm4gdmFs dWUgb2YgdGhlIGxvb3AuICBUaGVzZSBpbXBsaWVkIHJldHVybiB2YWx1ZXMgY2FuCmJlIG92ZXJy aWRkZW4gYnkgdXNpbmcgdGhlIHRoZSA9cmV0dXJuPSBhbmQgPXJldHVybi1mcm9tPSBsb29wIGNv bW1hbmRzIG9yIHRoZQo9ZmluYWxseS1yZXR1cm49IG1hY3JvIGFyZ3VtZW50LgoKIytiZWdpbl9z cmMgZW1hY3MtbGlzcAogIDs7ID0+ICgxIDIgMykKICAoY2wtbG9vcCBmb3IgaSBmcm9tIDEgdG8g MyBjb2xsZWN0IGkpCgogIDs7ID0+ICgxIDIgMykKICAobG9vcHkgKG51bWJlcnMgaSA6ZnJvbSAx IDp0byAzKSAoY29sbGVjdCBpKSkKIytlbmRfc3JjCgojK3ZpbmRleDogbG9vcHktcmVzdWx0ClVu bGlrZSB+Y2wtbG9vcH4sIExvb3B5IHVzZXMgYSBkZWZhdWx0IGFjY3VtdWxhdGlvbiB2YXJpYWJs ZSwgd2hpY2ggaXMgbmFtZWQKfmxvb3AtcmVzdWx0fi4gIFRoaXMgdmFyaWFibGUgY2FuIGJlIHVz ZWQgaW4gdGhlID1hZnRlci1kbz0sID1maW5hbGx5LWRvPSwgYW5kCj1maW5hbGx5LXJldHVybj0g c3BlY2lhbCBtYWNybyBhcmd1bWVudHMuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgPT4g KDAgMSAyIDMgNCA1KQogIChsb29weSAobnVtYmVycyBpIDpmcm9tIDEgOnRvIDEwKQogICAgICAg ICAod2hlbiAoPiBpIDUpIChsZWF2ZSkpCiAgICAgICAgIChjb2xsZWN0IGkpCiAgICAgICAgIChm aW5hbGx5LXJldHVybiAoY29ucyAwIGxvb3B5LXJlc3VsdCkpKQojK2VuZF9zcmMKCkluIGdlbmVy YWwsIHlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gbW9kaWZ5IG9yIHVzZSB0aGUgdmFsdWUgb2Yg fmxvb3B5LXJlc3VsdH4KZHVyaW5nIHRoZSBsb29wLCBhcyBpdCBpcyBub3QgZ3VhcmFudGVlZCB0 byBoYXZlIGEgY29ycmVjdCB2YWx1ZSB3aGVuCmVmZmljaWVudGx5IGJ1aWxkaW5nIHNlcXVlbmNl cy4gIEZvciBleGFtcGxlLCBpdCBpcyBvZnRlbiBmYXN0ZXIgdG8gYnVpbGQgYSBsaXN0CmluIHJl dmVyc2UgaW5zdGVhZCBvZiBhcHBlbmRpbmcgdG8gaXRzIGVuZC4gIEZvciBzb21lIGNvbW1hbmRz LCBzdWNoIGFzIHRob3NlIGluCltbI2FjY3VtLW51bWVyaWNdXSBhbmQgW1sjYWNjdW0tZ2VuZXJp Y11dLCB0aGlzIGRvZXMgbm90IG1hdHRlci4KCkJlIGF3YXJlIHRoYXQgZXhwbGljaXRseSBuYW1l ZCBhY2N1bXVsYXRpb24gdmFyaWFibGVzIGRvIG5vdCBhZmZlY3QgdGhlIGltcGxpZWQKcmV0dXJu IHZhbHVlIG9mIGEgbG9vcC4gIFN1Y2ggdmFsdWVzIG11c3QgYmUgcmV0dXJuZWQgZXhwbGljaXRs eSwgb3IgdGhleSB3aWxsCmJlIGlnbm9yZWQgd2hlbiB0aGUgbWFjcm8gcmV0dXJucyBhIHZhbHVl LiAgVGhpcyBsaW1pdGF0aW9uIGlzIG5lZWRlZCBmb3IgbW9yZQpjb25zaXN0ZW50bHkgaGFuZGxp bmcgdGhlIGNvbXBsZXhpdHkgdGhhdCBjb21lcyBmcm9tIGFsbG93aW5nIHVua25vd24ga2luZHMg b2YKZGVzdHJ1Y3R1cmluZyB2aWEgdGhlIGFsdGVybmF0aXZlIGRlc3RydWN0dXJpbmcgc3lzdGVt cy4gIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUKZnV0dXJlLgoKIytiZWdpbl9zcmMgZW1hY3MtbGlz cAogIDs7IFNlZSBob3cgdGhlIHZhcmlhYmxlIGBteS1leHBsaWNpdC12YXJpYWJsZScgaXMgaWdu b3JlZCB3aGVuCiAgOzsgcmV0dXJuaW5nIGEgZmluYWwgdmFsdWU6CiAgOzsKICA7OyA9PiAoMSAy IDMpCiAgKGxvb3B5IChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgIChjb2xsZWN0IGkpCiAgICAg ICAgIChjb2xsZWN0IG15LWV4cGxpY2l0LXZhcmlhYmxlICgqIDIgaSkpKQojK2VuZF9zcmMKClRo ZXJlZm9yZSwgd2hlbiBtaXhpbmcgaW1wbGljaXQgYW5kIGV4cGxpY2l0IGFjY3VtdWxhdGlvbiB2 YXJpYWJsZXMsIHlvdSBtdXN0CmFsd2F5cyB1c2UgdGhlID1maW5hbGx5LXJldHVybj0gc3BlY2lh bCBtYWNybyBhcmd1bWVudCB0byByZXR1cm4gYWxsIG9mIHRoZQphY2N1bXVsYXRpb24gcmVzdWx0 cy4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyA9PiAoKDEgMiAzKSAgOyBgbG9vcHktcmVz dWx0JwogIDs7ICAgICAoMiA0IDYpICA7IGBteS1vdGhlci1jb2xsZWN0aW9uJwogIDs7ICAgICAo MSAyIDMpICA7IGBjYXItY29sbCcKICA7OyAgICAgKDIgNCA2KSkgOyBgY2RyLWNvbGwnCiAgKGxv b3B5IChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgIChjb2xsZWN0IGkpIDsgVXNlcyBgbG9vcHkt cmVzdWx0JwogICAgICAgICAoc2V0IGogKCogMiBpKSkKICAgICAgICAgKGNvbGxlY3QgbXktb3Ro ZXItY29sbGVjdGlvbiBqKQogICAgICAgICAoY29sbGVjdCAoY2FyLWNvbGwgLiBjZHItY29sbCkg KGNvbnMgaSBqKSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGxvb3B5LXJlc3VsdAogICAgICAg ICAgICAgICAgICAgICAgICAgbXktb3RoZXItY29sbGVjdGlvbgogICAgICAgICAgICAgICAgICAg ICAgICAgY2FyLWNvbGwKICAgICAgICAgICAgICAgICAgICAgICAgIGNkci1jb2xsKSkKIytlbmRf c3JjCgojK2NpbmRleDogYWNjdW11bGF0aW9uIGNvbXBhdGliaWxpdHkKTGlrZSBpbiB+Y2wtbG9v cH4sIHdoZW4gdXNpbmcgaW1wbGllZCB2YXJpYWJsZXMsIG11bHRpcGxlIGFjY3VtdWxhdGlvbiBj b21tYW5kcwp3aWxsIHVzZSB0aGUgc2FtZSB2YXJpYWJsZSAofmxvb3B5LXJlc3VsdH4pLiAgRm9y IF9hbGxfIGFjY3VtdWxhdGlvbiB2YXJpYWJsZXMKdXNlZCBieSBtdWx0aXBsZSBhY2N1bXVsYXRp b24gY29tbWFuZHMsIHlvdSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbW1hbmRzCmFyZSBh Y3R1YWxseSBjb21wYXRpYmxlLiAgSWYgbm90LCB0aGVuIH5sb29weX4gd2lsbCBzaWduYWwgYW4g ZXJyb3IuCgpGb3IgZXhhbXBsZSwgeW91IHNob3VsZCBub3QgdHJ5IHRvIGFjY3VtdWxhdGUgPWNv bGxlY3Q9IHJlc3VsdHMgYW5kID1zdW09CnJlc3VsdHMgaW50byB0aGUgc2FtZSB2YXJpYWJsZSwg YXMgeW91IGNhbm5vdCB1c2UgYSBsaXN0IGFzIGEgbnVtYmVyLiAgT24gdGhlCm90aGVyIGhhbmQs ID1zdW09IGFuZCA9bXVsdGlwbHk9IGFyZSBjb21wYXRpYmxlLCBzaW5jZSB0aGV5IGJvdGggYWN0 IG9uIG51bWJlcnMuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgSW5jb21wYXRpYmxlIGNv bW1hbmRzOgogIDs7ID0+IEVSUk9SCiAgKGxvb3B5IChudW1iZXJzIGkgOmZyb20gMSA6dG8gMykK ICAgICAgICAgKGNvbGxlY3QgaSkKICAgICAgICAgKHN1bSBpKSkKCiAgOzsgQ29tcGF0aWJsZSBj b21tYW5kczoKICA7OyA9PiAyNwogIChsb29weSAobnVtYmVycyBpIDpmcm9tIDEgOnRvIDMpCiAg ICAgICAgIChzdW0gaSkKICAgICAgICAgKG11bHRpcGx5IGkpKQojK2VuZF9zcmMKCkJ5IGRlZmF1 bHQsIG9uZSBtdXN0IHNwZWNpZnkgc2VwYXJhdGUgYWNjdW11bGF0aW9uIHZhcmlhYmxlcyB0byBi ZSBhYmxlIHRvCmFjY3VtdWxhdGUgaW50byBzZXBhcmF0ZSB2YWx1ZXMuICBUaGlzIGNhbiBtYWtl IGFjY3VtdWxhdGlvbiBzbG93ZXIsIGJlY2F1c2UKfmxvb3B5fiBlbnN1cmVzIHRoYXQgbmFtZWQg YWNjdW11bGF0aW9uIHZhcmlhYmxlcyAoZXhjbHVkaW5nIHRoZSBwcmV2aW91c2x5Cm1lbnRpb25l ZCB+bG9vcHktcmVzdWx0fikgaGF2ZSB0aGUgY29ycmVjdCB2YWx1ZSBkdXJpbmcgdGhlIGxvb3Au ICBGb3IgZXhhbXBsZSwKfmxvb3B5fiB3aWxsIGNvbnN0cnVjdCBuYW1lZCBhY2N1bXVsYXRpb24g dmFyaWFibGVzIGNvbnRhaW5pbmcgbGlzdHMgaW4gdGhlCmNvcnJlY3Qgb3JkZXIsIGluc3RlYWQg b2YgdXNpbmcgdGhlIG1vcmUgZWZmaWNpZW50IH5wdXNofi1+bnJldmVyc2V+IGlkaW9tLgpUaGlz IGJlaGF2aW9yIGNhbiBiZSBkaXNhYmxlZCBieSBvcHRpbWl6aW5nIGFjY3VtdWxhdGlvbnMgdXNp bmcgdGhlID1hY2N1bS1vcHQ9CnNwZWNpYWwgbWFjcm8gYXJndW1lbnQgKFtbI29wdGltaXplZC1h Y2N1bXNdXSkuCgpCZWxvdyBhcmUgZXhhbXBsZXMgb2YgYW4gb3B0aW1pemVkIGFjY3VtdWxhdGlv biBhbmQgYW4gdW4tb3B0aW1pemVkCmFjY3VtdWxhdGlvbi4gIFNlZSB0aGF0IHRoZSBleGFtcGxl IGV4cGFuc2lvbiBvZiB0aGUgdW4tb3B0aW1pemVkIGFjY3VtdWxhdGlvbgppcyBtb3JlIGNvbXBs ZXggYW5kIHVzZXMgYSBzbG93ZXIgd2F5IG9mIGJ1aWxkaW5nIHRoZSBhY2N1bXVsYXRlZCBsaXN0 LgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogIDs7IE9wdGltaXplZCBhY2N1bXVsYXRpb246CiAg OzsKICA7OyA9PiAoMSAzIDIgNiAzIDkpCiAgKGxvb3B5IChhY2N1bS1vcHQgY29sbCkKICAgICAg ICAgKG51bWJlcnMgaSA6ZnJvbSAxIDp0byAzKQogICAgICAgICAoY29sbGVjdCBjb2xsIGkpCiAg ICAgICAgIChjb2xsZWN0IGNvbGwgKCogaSAzKSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGNv bGwpKQoKICA7OyBPcHRpbWl6ZWQgZXhhbXBsZSBleHBhbnNpb246CiAgOzsKICA7OyA9PiAoMSAz IDIgNiAzIDkpCiAgKGxldCogKChjb2xsIG5pbCkKICAgICAgICAgKGkgMSkKICAgICAgICAgKG51 bXMtZW5kMTkyIDMpCiAgICAgICAgIChudW1zLWluY3JlbWVudDE5MSAxKSkKICAgIChjbC1ibG9j ayBuaWwKICAgICAgKHdoaWxlICg8PSBpIG51bXMtZW5kMTkyKQogICAgICAgIChzZXRxIGNvbGwg KGNvbnMgaSBjb2xsKSkKICAgICAgICAoc2V0cSBjb2xsIChjb25zICgqIGkgMykgY29sbCkpCiAg ICAgICAgKHNldHEgaSAoMSsgaSkpKQogICAgICAoc2V0cSBjb2xsIChucmV2ZXJzZSBjb2xsKSkp CiAgICBjb2xsKQojK2VuZF9zcmMKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBVbm9wdGlt aXplZCBhY2N1bXVsYXRpb246CiAgOzsKICA7OyA9PiAoMSAzIDIgNiAzIDkpCiAgKGxvb3B5IChu dW1iZXJzIGkgOmZyb20gMSA6dG8gMykKICAgICAgICAgKGNvbGxlY3QgY29sbCBpKQogICAgICAg ICAoY29sbGVjdCBjb2xsICgqIGkgMykpCiAgICAgICAgIChmaW5hbGx5LXJldHVybiBjb2xsKSkK CiAgOzsgVW5vcHRpbWl6ZWQgZXhhbXBsZSBleHBhbnNpb246CiAgOzsKICA7OyA9PiAoMSAzIDIg NiAzIDkpCiAgKGxldCogKChjb2xsIG5pbCkKICAgICAgICAgKGNvbGwtbGFzdC1saW5rLTE5MCBj b2xsKQogICAgICAgICAoaSAxKQogICAgICAgICAobnVtcy1lbmQxODkgMykKICAgICAgICAgKG51 bXMtaW5jcmVtZW50MTg4IDEpKQogICAgKGNsLWJsb2NrIG5pbAogICAgICAod2hpbGUgKDw9IGkg bnVtcy1lbmQxODkpCiAgICAgICAgKGNvbmQKICAgICAgICAgKGNvbGwtbGFzdC1saW5rLTE5MAog ICAgICAgICAgKHNldGNkciBjb2xsLWxhc3QtbGluay0xOTAgKGxpc3QgaSkpCiAgICAgICAgICAo c2V0cSBjb2xsLWxhc3QtbGluay0xOTAgKGNkciBjb2xsLWxhc3QtbGluay0xOTApKSkKICAgICAg ICAgKGNvbGwKICAgICAgICAgIChzZXRxIGNvbGwtbGFzdC1saW5rLTE5MCAobGFzdCBjb2xsKSkK ICAgICAgICAgIChzZXRjZHIgY29sbC1sYXN0LWxpbmstMTkwIChsaXN0IGkpKQogICAgICAgICAg KHNldHEgY29sbC1sYXN0LWxpbmstMTkwIChjZHIgY29sbC1sYXN0LWxpbmstMTkwKSkpCiAgICAg ICAgICh0CiAgICAgICAgICAoc2V0cSBjb2xsIChsaXN0IGkpCiAgICAgICAgICAgICAgICBjb2xs LWxhc3QtbGluay0xOTAgY29sbCkpKQogICAgICAgIChjb25kCiAgICAgICAgIChjb2xsLWxhc3Qt bGluay0xOTAKICAgICAgICAgIChzZXRjZHIgY29sbC1sYXN0LWxpbmstMTkwIChsaXN0ICgqIGkg MykpKQogICAgICAgICAgKHNldHEgY29sbC1sYXN0LWxpbmstMTkwIChjZHIgY29sbC1sYXN0LWxp bmstMTkwKSkpCiAgICAgICAgIChjb2xsCiAgICAgICAgICAoc2V0cSBjb2xsLWxhc3QtbGluay0x OTAgKGxhc3QgY29sbCkpCiAgICAgICAgICAoc2V0Y2RyIGNvbGwtbGFzdC1saW5rLTE5MCAobGlz dCAoKiBpIDMpKSkKICAgICAgICAgIChzZXRxIGNvbGwtbGFzdC1saW5rLTE5MCAoY2RyIGNvbGwt bGFzdC1saW5rLTE5MCkpKQogICAgICAgICAodAogICAgICAgICAgKHNldHEgY29sbCAobGlzdCAo KiBpIDMpKQogICAgICAgICAgICAgICAgY29sbC1sYXN0LWxpbmstMTkwIGNvbGwpKSkKICAgICAg ICAoc2V0cSBpICgxKyBpKSkpKQogICAgY29sbCkKIytlbmRfc3JjCgojK2F0dHJfdGV4aW5mbzog OnRhZyBXYXJuaW5nCiMrYmVnaW5fcXVvdGUKWW91IHNob3VsZCBub3QgdHJ5IHRvIGFjY2VzcyBp bXBsaWVkIChvciBvcHRpbWl6ZWQpIGFjY3VtdWxhdGlvbiByZXN1bHRzIChmb3IKZXhhbXBsZSwg fmxvb3B5LXJlc3VsdH4pIHdoaWxlIHRoZSBsb29wIGlzIHJ1bm5pbmcuICBJbXBsaWVkIHJlc3Vs dHMgYXJlIG9ubHkKcmVxdWlyZWQgdG8gYmUgY29ycmVjdCBhZnRlciB0aGUgbG9vcCBlbmRzIChi ZWZvcmUgY29kZSBpbiA9ZWxzZS1kbz0gaXMgcnVuKSwKYWxsb3dpbmcgZm9yIG1vcmUgZWZmaWNp ZW50IGNvZGUuCgpGdXJ0aGVybW9yZSwgYmVjYXVzZSB1c2luZyBhID1yZXR1cm49IG9yID1yZXR1 cm4tZnJvbT0gY29tbWFuZCBvdmVycmlkZXMgaW1wbGllZApyZXR1cm4gdmFsdWVzLCB1c2luZyB0 aGVzZSBjb21tYW5kcyBjYW4gcHJldmVudCBpbXBsaWVkIGFjY3VtdWxhdGlvbiByZXN1bHRzCmZy b20gYmVpbmcgZmluYWxpemVkLiAgVXNpbmcgdGhlID1sZWF2ZT0gY29tbWFuZCwgd2hpY2ggZXhp dHMgdGhlIGxvb3Agd2l0aG91dApyZXR1cm5pbmcgYSB2YWx1ZSwgZG9lcyBub3QgYWZmZWN0IHRo ZSBjb3JyZWN0bmVzcyBvZiBpbXBsaWVkIHJlc3VsdHMuCiMrZW5kX3F1b3RlCgoqKiogQ29tbW9u IFByb3BlcnRpZXMgb2YgQWNjdW11bGF0aW9uIENvbW1hbmRzCjpQUk9QRVJUSUVTOgo6RU5EOgoK WW91IHdpbGwgbm90aWNlIHRoYXQgZWFjaCBhY2N1bXVsYXRpb24gY29tbWFuZCBoYXMgYW4gYWxp YXMgb2YgdGhlIGNvbW1hbmQgbmFtZQppbiB0aGUgcHJlc2VudCBwYXJ0aWNpcGxlIGZvcm0gKHRo ZSAiLWluZyIgZm9ybSkuICBGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZgoibWluaW1pemUiLCB5b3Ug Y2FuIHVzZSAibWluaW1pemluZyIuICBJbnN0ZWFkIG9mICJzdW0iIGFuZCAiYXBwZW5kIiwgeW91 IGNhbgp1c2UgInN1bW1pbmciIGFuZCAiYXBwZW5kaW5nIi4gIFRoaXMgaXMgc2ltaWxhciB0byB0 aGUgYmVoYXZpb3Igb2YgfmNsLWxvb3B+LAphbmQgaGVscHMgdG8gYXZvaWQgbmFtZSBjb2xsaXNp b25zIHdoZW4gdXNpbmcgdGhlIH5sb29weS1pdGVyfiBtYWNybwooW1sjbG9vcHktaXRlcl1bVGhl IH5sb29weS1pdGVyfiBNYWNyb11dKS4KCiMrY2luZGV4OiBhY2N1bXVsYXRpb24ga2V5d29yZCBh cmd1bWVudHMKU29tZSBhY2N1bXVsYXRpb24gY29tbWFuZHMgaGF2ZSBvcHRpb25hbCBrZXl3b3Jk IHBhcmFtZXRlcnMsIHdoaWNoIGFyZSBsaXN0ZWQKaW4gdGhlIGNvbW1hbmQncyBkZWZpbml0aW9u LiAgVG8gYXZvaWQgcmVwZXRpdGlvbiwgdGhlIGNvbW1vbiBwYXJhbWV0ZXJzIGFyZQphbGwgZGVz Y3JpYmVkIGJlbG93LgoKIytjaW5kZXg6IGFjY3VtdWxhdGlvbiBrZXl3b3JkIGF0Ci0gPWF0PSA6 OiBXaGVyZSB0byBwbGFjZSBhIHZhbHVlLiAgT25lIG9mID1lbmQ9LCA9c3RhcnQ9LCBvciA9YmVn aW5uaW5nPQogIChlcXVpdmFsZW50IHRvID1zdGFydD0pLiAgSWYgdW5naXZlbiwgZGVmYXVsdHMg dG8gPWVuZD0uICBUaGVzZSBwb3NpdGlvbnMKICBuZWVkIG5vdCBiZSBxdW90ZWQuCgogICMrYmVn aW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICgxIDIgMykKICAgIChsb29weSAobGlzdCBpICco MSAyIDMpKQogICAgICAgICAgIChjb2xsZWN0IGkgOmF0IGVuZCkpCgogICAgOzsgPT4gKDMgMiAx KQogICAgKGxvb3B5IChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgICAgKGNvbGxlY3QgaSA6YXQg c3RhcnQpKQogICMrZW5kX3NyYwoKIytjaW5kZXg6IGFjY3VtdWxhdGlvbiBrZXl3b3JkIGludG8K LSA9aW50bz0gOjogQW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwZWNpZnkgdGhlIHZhcmlhYmxlIGlu dG8gd2hpY2ggdG8KICBhY2N1bXVsYXRlIHZhbHVlcy4gIE9uZSB3b3VsZCBub3JtYWxseSBqdXN0 IGdpdmUgPVZBUj0gYXMgdGhlIGZpcnN0CiAgYXJndW1lbnQgb2YgdGhlIGxvb3AgY29tbWFuZCwg YnV0IGlmIHlvdSB3aXNoLCB5b3UgY2FuIHVzZSB0aGlzIGtleXdvcmQKICBhcmd1bWVudCBmb3Ig YSBtb3JlIH5jbC1sb29wfi1saWtlIHN5bnRheC4KCiAgQXMgYWxsIGFjY3VtdWxhdGlvbiBjb21t YW5kcyBzdXBwb3J0IHRoaXMga2V5d29yZCwgaXQgaXMgbm90IGxpc3RlZCBpbgogIGFueSBjb21t YW5kIGRlZmluaXRpb24uCgogICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICgxIDIg MykKICAgIChsb29weSAobGlzdCBpICcoMSAyIDMpKQogICAgICAgICAgIChjb2xsZWN0IG15LWNv bGxlY3Rpb24gaSkKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gbXktY29sbGVjdGlvbikpCgog ICAgOzsgPT4gKDEgMiAzKQogICAgKGxvb3B5IChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgICAg KGNvbGxlY3QgaSA6aW50byBteS1jb2xsZWN0aW9uKQogICAgICAgICAgIChmaW5hbGx5LXJldHVy biBteS1jb2xsZWN0aW9uKSkKICAjK2VuZF9zcmMKCiMrY2luZGV4OiBhY2N1bXVsYXRpb24ga2V5 d29yZCB0ZXN0Ci0gPXRlc3Q9IDo6IEEgZnVuY3Rpb24gb2YgdHdvIGFyZ3VtZW50cywgdXN1YWxs eSB1c2VkIHRvIHRlc3QgZm9yIGVxdWFsaXR5LgogIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkg dXNlZCB0byB0ZXN0IGlmIGEgdmFsdWUgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZQogIGFjY3Vt dWxhdGluZyBzZXF1ZW5jZS4gSWYgc28sIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbm9u LW5pbCB2YWx1ZS4KCiAgIythdHRyX3RleGluZm86IDp0YWcgTm90ZQogICMrYmVnaW5fcXVvdGUK ICBUaGlzIGFyZ3VtZW50IGlzIHNpbWlsYXIgdG8gdGhlID06dGVzdD0gYXJndW1lbnQgdXNlZCBi eSA9Y2wtbGliPSwgYnV0IGlzCiAgY2xvc2VyIHRvIHRoZSBvcHRpb25hbCA9dGVzdGZuPSBhcmd1 bWVudCB1c2VkIGJ5ID1zZXE9IChmb3IgZXhhbXBsZSwgaW4KICB+c2VxLWNvbnRhaW5zLXB+KS4g IFRoaXMgYXJlIHR3byBpbXBvcnRhbnQgZGlmZmVyZW5jZXM6CiAgMS4gVGVzdHMgZGVmYXVsdCB0 byB+ZXF1YWx+LCBsaWtlIGluIG90aGVyIEVtYWNzIExpc3AgbGlicmFyaWVzLCBub3QgfmVxbH4u CiAgMi4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBleGlzdGluZyB2YWx1ZSBvciBzZXF1ZW5j ZSBhbmQgdGhlIHNlY29uZAogICAgIGFyZ3VtZW50IGlzIHRoZSB0ZXN0ZWQgdmFsdWUuICBUaGlz IGlzIHRoZSAvb3Bwb3NpdGUvIG9mIHRoZSBvcmRlciB1c2VkIGJ5CiAgICAgfmNsLW1lbWJlcn4g YW5kIH5tZW1xfi4KICAjK2VuZF9xdW90ZQoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7 OyBPbmx5IGFkZCBpdGVtcyB0byB0aGUgbGlzdCB3aG9zZSBgY2FyJ3MgYXJlIG5vdCBhbHJlYWR5 IHByZXNlbnQKICAgIDs7IG9yIHdob3NlIGBjZHInIGlzIG5vdCAzOgogICAgOzsKICAgIDs7ID0+ ICgoYSAuIDEpIChjIC4gNCkpCiAgICAobG9vcHkgKHdpdGggKHRlc3QtZm4gKGxhbWJkYSAoc2Vx LXZhbCBuZXctdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChlcXVhbCAoY2Ry IG5ldy12YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxIChjYXIgc2VxLXZhbCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNhciBuZXctdmFsKSkpKSkpCiAgICAgICAgICAgKGxp c3QgaSAnKChhIC4gMSkgKGEgLiAyKSAoYiAuIDMpIChjIC4gNCkpKQogICAgICAgICAgIChhZGpv aW4gaSA6dGVzdCB0ZXN0LWZuKSkKICAjK2VuZF9zcmMKCiMrY2luZGV4OiBhY2N1bXVsYXRpb24g a2V5d29yZCBrZXkKLSA9a2V5PSA6OiBBIG9uZS1hcmd1bWVudCBmdW5jdGlvbiB0aGF0IHRyYW5z Zm9ybXMgdGhlIF9ib3RoXyB0ZXN0ZWQgdmFsdWUgYW5kCiAgdGhlIHZhbHVlIGZyb20gc2VxdWVu Y2UgdXNlZCBieSB0aGUgPXRlc3Q9IGtleXdvcmQuCgogIFRoZSBrZXl3b3JkID1rZXk9IGlzIHVz ZWZ1bCB0byBhdm9pZCBhcHBseWluZyBhIHRyYW5zZm9ybWluZyBmdW5jdGlvbiB0byB0aGUKICB0 ZXN0ZWQgdmFsdWUgbW9yZSB0aGFuIG9uY2Ugd2hlbiBzZWFyY2hpbmcgdGhyb3VnaCBhIGxvbmcg c2VxdWVuY2UsIGFzIHdvdWxkCiAgYmUgZG9uZSBpZiBpdCB3ZXJlIGNhbGxlZCBleHBsaWNpdGx5 IGluID10ZXN0PS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKChhIC4gMSkg KGIgLiAyKSAoYyAuIDQpKQogICAgKGxvb3B5ICh3aXRoICh0ZXN0ICMnY2FyKSkKICAgICAgICAg ICAobGlzdCBpICcoKGEgLiAxKSAoYiAuIDIpIChhIC4gMykgKGMgLiA0KSkpCiAgICAgICAgICAg KGFkam9pbiBpIDphdCBlbmQgOmtleSAjJ2NhcikpCgogICAgOzsgU2ltaWxhcnkgdG8gdGhlIGFi b3ZlOgogICAgOzsKICAgIDs7ID0+ICgoYSAuIDEpIChiIC4gMikgKGMgLiA0KSkKICAgIChsb29w eSAod2l0aCAodGVzdC12YWwpKQogICAgICAgICAgIChsaXN0IGkgJygoYSAuIDEpIChiIC4gMikg KGEgLiAzKSAoYyAuIDQpKSkKICAgICAgICAgICAoc2V0IHRlc3QtdmFsIChjYXIgaSkpCiAgICAg ICAgICAgKGFkam9pbiBpIDp0ZXN0IChsYW1iZGEgKHNlcS12YWwgXykKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoZXF1YWwgKGNhciBzZXEtdmFsKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZXN0LXZhbCkpKSkKICAjK2VuZF9zcmMKCgpUaGUgYXJndW1lbnRzIHRv IHRoZSA9dGVzdD0gYW5kID1rZXk9IHBhcmFtZXRlcnMgY2FuIGJlIHF1b3RlZCBmdW5jdGlvbnMg b3IKdmFyaWFibGVzLCBqdXN0IGxpa2Ugd2hlbiB1c2luZyB+Y2wtdW5pb25+LCB+Y2wtYWRqb2lu fiwgYW5kIHNvIG9uLiAgfmxvb3B5fgprbm93cyBob3cgdG8gZXhwYW5kIGVmZmljaWVudGx5IGZv ciBlaXRoZXIgY2FzZS4KCioqKiBHZW5lcmljIEFjY3VtdWxhdGlvbgo6UFJPUEVSVElFUzoKOkNV U1RPTV9JRDogYWNjdW0tZ2VuZXJpYwo6REVTQ1JJUFRJT046IEFjY3VtdWxhdGluZyBmdW5jdGlv biBvdXRwdXQuCjpFTkQ6CgpHZW5lcmljIGFjY3VtdWxhdGlvbiBjb21tYW5kcyBhcmUgbW9yZSBl eHBsaWNpdCB1c2VzIG9mIHRoZSBhY2N1bXVsYXRpb24KdmFyaWFibGUuICBUaGV5IGFyZSB2ZXJ5 IHNpbWlsYXIgdG8gdXBkYXRpbmcgYSB2YXJpYWJsZSdzIHZhbHVlCnVzaW5nIHRoZSA9c2V0PSBj b21tYW5kIGFuZCBleGlzdCBmb3Igc2l0dWF0aW9uIG5vdCBjb3ZlcmVkIGJ5IHRoZSBvdGhlcgph Y2N1bXVsYXRpb24gY29tbWFuZHMuCgotID1yZWR1Y2U9IGlzIGxpa2UgfmNsLXJlZHVjZX4sIGNh bGxpbmcgYSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzICgxKSB0aGUKICBhY2N1bXVsYXRpb24gdmFy aWFibGUgYW5kICgyKSB0aGUgdmFsdWUgdG8gYWNjdW11bGF0ZSwgaW4gdGhhdCBvcmRlci4KLSA9 YWNjdW11bGF0ZT0gd29ya3MgYnkgY2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgKDEp IHRoZSB2YWx1ZSB0bwogIGFjY3VtdWxhdGUgYW5kICgyKSB0aGUgYWNjdW11bGF0aW9uIHZhcmlh YmxlLCBpbiB0aGF0IG9yZGVyLgotID1zZXQtYWNjdW09IGlzIHRoZSBtb3N0IGdlbmVyaWMsIGFu ZCB3b3JrcyBsaWtlID1zZXQ9IGZvciBvbmx5IG9uZSB2YWx1ZS4KCgpUaGUgY29tbWFuZHMgYXJl IGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBiZWxvdy4KCiMrZmluZGV4OiByZWR1Y2UKIytmaW5k ZXg6IHJlZHVjaW5nCi0gPShyZWR1Y2UgVkFSIEVYUFIgRlVOQyk9IDo6IFJlZHVjZSA9RVhQUj0g aW50byA9VkFSPSBieSA9RlVOQz0sIGxpa2UgaW4KICB+Y2wtcmVkdWNlfiBhbmQgfihmdW5jYWxs IEZVTkMgVkFSIEVYUFIpfi4gID1GVU5DPSBpcyBjYWxsZWQgd2l0aCA9VkFSPSBhcyB0aGUKICBm aXJzdCBhcmd1bWVudCBhbmQgPUVYUFI9IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuICBUaGlzIGlz IHVubGlrZQogID1hY2N1bXVsYXRlPSwgd2hpY2ggZ2l2ZXMgPVZBUj0gYW5kID1FWFBSPSB0byA9 RlVOQz0gaW4gdGhlIG9wcG9zaXRlIG9yZGVyCiAgKHRoYXQgaXMsID1FWFBSPSBmaXJzdCwgdGhl biA9VkFSPSkuCgogIFRoaXMgY29tbWFuZCBhbHNvIGhhcyB0aGUgYWxpYXMgPXJlZHVjaW5nPS4K CiAgTm90ZSB0aGF0IHRoZSBmaXJzdCBhY2N1bXVsYXRlZCB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBp bml0aWFsIHZhbHVlIG9mID1WQVI9LgogIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhY2N1bXVsYXRl ZCB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgPUVYUFI9LCBub3QgYSByZXN1bHQKICBvZiBjYWxsaW5n ID1GVU5DPS4gIEhvd2V2ZXIsIGlmID1WQVI9IGhhcyBhbiBpbml0aWFsIHZhbHVlIGdpdmVuIGJ5 IHRoZSA9d2l0aD0KICBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50LCB0aGVuIHRoZSBmaXJzdCBhY2N1 bXVsYXRlZCB2YWx1ZSBpcyB0aGUgcmVzdWx0IG9mCiAgfihmdW5jYWxsIEZVTkMgVkFSIEVYUFIp fiwgYXMgYWxzbyBkb25lIGluIHRoZSBzdWJzZXF1ZW50IHN0ZXBzIG9mIHRoZSBsb29wLgogIFRo aXMgdXNlIG9mID13aXRoPSBpcyBzaW1pbGFyIHRvIHRoZSA9OmluaXRpYWwtdmFsdWU9IGtleXdv cmQgYXJndW1lbnQgdXNlZCBieQogIH5jbC1yZWR1Y2V+LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1s aXNwCiAgICA7OyA9PiA2CiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMiAzKSkKICAgICAgICAgICAo cmVkdWNlIGkgIycqKSkKCiAgICA7OyBTaW1pbGFyIHRvIHRoZSBhYm92ZToKICAgIChsb29weSAo bGlzdCBpICcoMSAyIDMpKQogICAgICAgICAgIChzZXQgbG9vcHktcmVzdWx0IGkgKCogaSBsb29w eS1yZXN1bHQpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBsb29weS1yZXN1bHQpKQoKICAg IDs7ID0gPiA2CiAgICAobG9vcHkgKHdpdGggKG15LXJlZHVjdGlvbiAwKSkKICAgICAgICAgICAo bGlzdCBpICcoMSAyIDMpKQogICAgICAgICAgIChyZWR1Y2UgbXktcmVkdWN0aW9uIGkgIycrKQog ICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1yZWR1Y3Rpb24pKQoKICAgIDs7IFNpbWlsYXIg dG8gdGhlIGFib3ZlOgogICAgKGNsLXJlZHVjZSAjJysgKGxpc3QgMSAyIDMpIDppbml0aWFsLXZh bHVlIDApCiAgICAoc2VxLXJlZHVjZSAjJysgWzEgMiAzXSAwKQogICMrZW5kX3NyYwoKICBUaGlz IGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzID1jYWxsZj0uICBJdCBpcyBzaW1pbGFyIHRvIHVz aW5nIHRoZQogIGZ1bmN0aW9uIH5jbC1jYWxsZn4sIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBh cmd1bWVudCBpcyBnaXZlbiBsYXN0IGFuZAogIG11c3QgYmUgcXVvdGVkLiAgVGhpcyBhbGlhcyBp cyBpbnRlbmRlZCB0byBoZWxwIHVzZXJzIHJlbWVtYmVyIGFyZ3VtZW50CiAgb3JkZXIuCgogICMr YmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIChsb29weSAod2l0aCAobXktcmVkdWN0aW9uIDApKQog ICAgICAgICAgIChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgICAgKGNhbGxmIG15LXJlZHVjdGlv biBpICMnKykKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gbXktcmVkdWN0aW9uKSkKCiAgICA7 OyBJcyBzaW1pbGFyIHRvIHRoZSBhYm92ZToKICAgIChsb29weSAod2l0aCAobXktcmVkdWN0aW9u IDApKQogICAgICAgICAgIChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgICAgKGRvIChjbC1jYWxs ZiArIG15LXJlZHVjdGlvbiBpKSkKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gbXktcmVkdWN0 aW9uKSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBhY2N1bXVsYXRlCiMrZmluZGV4OiBhY2N1bXVs YXRpbmcKLSA9KGFjY3VtdWxhdGV8YWNjdW11bGF0aW5nIFZBUiBFWFBSIEZVTkMpPSA6OiBBY2N1 bXVsYXRlIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcKICBmdW5jdGlvbiA9RlVOQz0gdG8gPUVYUFI9 IGFuZCA9VkFSPSBsaWtlIGluIH4oZnVuY2FsbCBGVU5DIEVYUFIgVkFSKX4uICA9RVhQUj0KICBh bmQgPVZBUj0gYXJlIHVzZWQgYXMgdGhlIGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzIHRvID1G VU5DPSwgcmVzcGVjdGl2ZWx5LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyBDYWxs IGAoY29ucyBpIG15LWFjY3VtKScKICAgIDs7CiAgICA7OyA9PiAoMiAxKQogICAgKGxvb3B5IChs aXN0IGkgJygxIDIpKQogICAgICAgICAgIChhY2N1bXVsYXRlIG15LWFjY3VtIGkgIydjb25zKQog ICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1hY2N1bSkpCgogICAgOzsgV29ya3MgbW9zdGx5 IHRoZSBzYW1lIGFzIHRoZSBhYm92ZToKICAgIChsb29weSAobGlzdCBpICcoMSAyKSkKICAgICAg ICAgICAoc2V0IG15LWFjY3VtIChjb25zIGkgbXktYWNjdW0pKQogICAgICAgICAgIChmaW5hbGx5 LXJldHVybiBteS1hY2N1bSkpCgogICAgOzsgPT4gKCgzIDEpICg0IDIgOCA5IDEwKSkKICAgIChs b29weSAod2l0aCAoYWNjdW0xIG5pbCkKICAgICAgICAgICAgICAgICAoYWNjdW0yIChsaXN0IDgg OSAxMCkpKQogICAgICAgICAgIChsaXN0IGkgJygoMSAyKSAoMyA0KSkpCiAgICAgICAgICAgKGFj Y3VtdWxhdGUgKGFjY3VtMSBhY2N1bTIpIGkgIydjb25zKQogICAgICAgICAgIChmaW5hbGx5LXJl dHVybiBhY2N1bTEgYWNjdW0yKSkKICAjK2VuZF9zcmMKCiAgVGhpcyBjb21tYW5kIGFsc28gaGFz IHRoZSBhbGlhcyA9Y2FsbGYyPS4gIEl0IGlzIHNpbWlsYXIgdG8gdXNpbmcgdGhlIGZ1bmN0aW9u CiAgfmNsLWNhbGxmMn4sIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBhcmd1bWVudCBpcyBnaXZl biBsYXN0IGFuZCBtdXN0IGJlCiAgcXVvdGVkLiAgVGhpcyBhbGlhcyBpcyBpbnRlbmRlZCB0byBo ZWxwIHVzZXJzIHJlbWVtYmVyIGFyZ3VtZW50IG9yZGVyLgoKICAjK2JlZ2luX3NyYyBlbWFjcy1s aXNwCiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMikpCiAgICAgICAgICAgKGNhbGxmMiBteS1hY2N1 bSBpICMnY29ucykKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gbXktYWNjdW0pKQoKICAgIDs7 IElzIHRoZSBzYW1lIGFzIHRoZSBhYm92ZToKICAgIChsb29weSAod2l0aCAobXktYWNjdW0pKQog ICAgICAgICAgIChsaXN0IGkgJygxIDIpKQogICAgICAgICAgIChkbyAoY2wtY2FsbGYyIGNvbnMg aSBteS1hY2N1bSkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIG15LWFjY3VtKSkKICAjK2Vu ZF9zcmMKCiMrZmluZGV4OiBzZXQtYWNjdW0KIytmaW5kZXg6IHNldHRpbmctYWNjdW0KLSA9KHNl dC1hY2N1bSBWQVIgRVhQUik9IDo6IFNldCB0aGUgYWNjdW11bGF0aW9uIHZhcmlhYmxlID1WQVI9 IHRvIHRoZQogIHZhbHVlIG9mID1FWFBSPS4KCiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBh bGlhcyA9c2V0dGluZy1hY2N1bT0uCgogIFRoaXMgY29tbWFuZCBpcyBhIGJhc2ljIHdyYXBwZXIg YXJvdW5kID1zZXQ9IGZvciBvbmx5IG9uZSB2YWx1ZS4gIEJlY2F1c2UgdGhpcwogIGNvbW1hbmQg Y2Fubm90IGJlIG9wdGltaXplZCAoYXMgaXQgZG9lcyBub3QgY29uc3RydWN0IGEgc2VxdWVuY2Up LCBpdCBpcyBzYWZlCiAgdG8gYWNjZXNzIHRoZSBpbXBsaWNpdCB2YXJpYWJsZSB+bG9vcHktcmVz dWx0fiBpbiA9RVhQUj0sIHNvIGxvbmcgYXMgdGhlCiAgdmFyaWFibGUgaXMgbm90IGJlaW5nIG1v ZGlmaWVkIGJ5IGFub3RoZXIgY29tbWFuZCBmb3Igd2hpY2ggdGhhdCB3b3VsZCBiZQogIHVuc2Fm ZS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gNgogICAgKGxvb3B5ICh3aXRo IChsb29weS1yZXN1bHQgMCkpCiAgICAgICAgICAgKGFycmF5IGkgWzEgMiAzXSkKICAgICAgICAg ICAoc2V0LWFjY3VtICgrIGxvb3B5LXJlc3VsdCBpKSkpCgogICAgOzsgVGhlc2UgYXJlIGVxdWl2 YWxlbnQgdG8gdGhlIGFib3ZlIGV4YW1wbGU6CgogICAgOzsgPT4gNgogICAgKGxvb3B5ICh3aXRo IChsb29weS1yZXN1bHQgMCkpCiAgICAgICAgICAgKGFycmF5IGkgWzEgMiAzXSkKICAgICAgICAg ICAoc2V0IGxvb3B5LXJlc3VsdCAoKyBsb29weS1yZXN1bHQgaSkpCiAgICAgICAgICAgKGZpbmFs bHktcmV0dXJuIGxvb3B5LXJlc3VsdCkpCgogICAgOzsgPT4gNgogICAgKGxvb3B5ICh3aXRoIChs b29weS1yZXN1bHQgMCkpCiAgICAgICAgICAgKGFycmF5IGkgWzEgMiAzXSkKICAgICAgICAgICAo c2V0LWFjY3VtIGxvb3B5LXJlc3VsdCAoKyBsb29weS1yZXN1bHQgaSkpCiAgICAgICAgICAgKGZp bmFsbHktcmV0dXJuIGxvb3B5LXJlc3VsdCkpCiAgIytlbmRfc3JjCgoqKiogTnVtZXJpYyBBY2N1 bXVsYXRpb24KOlBST1BFUlRJRVM6CjpDVVNUT01fSUQ6IGFjY3VtLW51bWVyaWMKOkRFU0NSSVBU SU9OOiBVc2luZyBhbmQgcmV0dXJuaW5nIG51bWJlcnMuCjpFTkQ6CgpOdW1lcmljIGFjY3VtdWxh dGlvbiB3b3JrIG9uIG51bWJlcnMsIHN1Y2ggYXMgYnkgcmVwZWF0ZWRseSBhZGRpbmcgb3IKbXVs dGlwbHlpbmcgdmFsdWVzIHRvZ2V0aGVyLgoKIytmaW5kZXg6IGNvdW50CiMrZmluZGV4OiBjb3Vu dGluZwotID0oY291bnQgVkFSIEVYUFIpPSA6OiBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRo YXQgPUVYUFI9IGV2YWx1YXRlcyB0byBhCiAgbm9uLW5pbCB2YWx1ZS4gID1WQVI9IHN0YXJ0cyBh dCAwIGFuZCBpcyBpbmNyZW1lbnRlZCBieSAxIGVhY2ggdGltZS4KCiAgVGhpcyBjb21tYW5kIGFs c28gaGFzIHRoZSBhbGlhcyA9Y291bnRpbmc9LgoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAg ICA7OyA9PiAzCiAgICAobG9vcHkgKGxpc3QgaSAnKDEgbmlsIDMgbmlsIDUpKQogICAgICAgICAg IChjb3VudCBub24tbmlsLWNvdW50IGkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIG5vbi1u aWwtY291bnQpKQogICMrRU5EX1NSQwoKIytmaW5kZXg6IG1heAojK2ZpbmRleDogbWF4aW5nCiMr ZmluZGV4OiBtYXhpbWl6ZQojK2ZpbmRleDogbWF4aW1pemluZwotID0obWF4aW1pemV8bWF4IFZB UiBFWFBSKT0gOjogUmVwZWF0ZWRseSBzZXQgPVZBUj0gdG8gdGhlIGdyZWF0ZXIgb2YgdGhlIHZh bHVlcwogID1WQVI9IGFuZCA9RVhQUj0uICA9VkFSPSBzdGFydHMgYXQgbmVnYXRpdmUgaW5maW5p dHkgKH4tMS4wZStJTkZ+KSwgc28gdGhhdAogIGFueSBvdGhlciB2YWx1ZSBzaG91bGQgYmUgZ3Jl YXRlciB0aGF0IGl0LgoKICBUaGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzZXMgPW1heGlt aXppbmc9IGFuZCA9bWF4aW5nPS4KCiAgIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4g MTEKICAgIChsb29weSAobGlzdCBpICcoMSAxMSAyIDEwIDMgOSA0IDggNSA3IDYpKQogICAgICAg ICAgIChtYXhpbWl6ZSBteS1tYXggaSkKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gbXktbWF4 KSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiBtaW4KIytmaW5kZXg6IG1pbmltaXplCiMrZmluZGV4 OiBtaW5ubmluZwojK2ZpbmRleDogbWluaW1pemluZwotID0obWluaW1pemV8bWluIFZBUiBFWFBS KT0gOjogUmVwZWF0ZWRseSBzZXQgPVZBUj0gdG8gdGhlIGxlc3NlciBvZiB0aGUgdmFsdWVzCiAg PVZBUj0gYW5kID1FWFBSPS4gID1WQVI9IHN0YXJ0cyBhdCBwb3NpdGl2ZSBpbmZpbml0eSAofjEu MGUrSU5GfiksIHNvIHRoYXQgYW55CiAgb3RoZXIgdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiBp dC4KCiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlhc2VzID1taW5pbWl6aW5nPSBhbmQg PW1pbm5pbmc9LgoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7OyA9PiAwCiAgICAobG9v cHkgKGxpc3QgaSAnKDEgMTEgMiAxMCAzIDAgOSA0IDggNSA3IDYpKQogICAgICAgICAgIChtaW5p bWl6ZSBteS1taW4gaSkKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gbXktbWluKSkKICAjK0VO RF9TUkMKCiMrZmluZGV4OiBtdWx0aXBseQojK2ZpbmRleDogbXVsdGlwbHlpbmcKLSA9KG11bHRp cGx5IFZBUiBFWFBSKT0gOjogUmVwZWF0ZWRseSBzZXQgPVZBUj0gdG8gdGhlIHByb2R1Y3Qgb2YK ICB0aGUgdmFsdWVzID1FWFBSPSBhbmQgPVZBUj0uICA9VkFSPSBzdGFydHMgYXQgMS4KCiAgVGhp cyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlhcyA9bXVsdGlwbHlpbmc9LgoKICAjK0JFR0lOX1NS QyBlbWFjcy1saXNwCiAgICA7OyA9PiAxMjAKICAgIChsb29weSAobGlzdCBpICcoMSAyIDMgNCA1 KSkKICAgICAgICAgICAobXVsdGlwbHkgNS1mYWN0b3JpYWwgaSkKICAgICAgICAgICAoZmluYWxs eS1yZXR1cm4gNS1mYWN0b3JpYWwpKQogICMrRU5EX1NSQwoKIytmaW5kZXg6IHN1bQojK2ZpbmRl eDogc3VtbWluZwotID0oc3VtIFZBUiBFWFBSKT0gOjogUmVwZWF0ZWRseSBzZXQgPVZBUj0gdG8g dGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mID1FWFBSPQogIGFuZCA9VkFSPS4gID1WQVI9IHN0YXJ0 cyBhdCAwLgoKICBUaGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzID1zdW1taW5nPS4KCiAg IytCRUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gMTAKICAgIChsb29weSAobGlzdCBpICco MSAyIDMgNCkpCiAgICAgICAgICAgKHN1bSBteS1zdW0gaSkKICAgICAgICAgICAoZmluYWxseS1y ZXR1cm4gbXktc3VtKSkKICAjK0VORF9TUkMKCioqKiBTZXF1ZW5jZSBBY2N1bXVsYXRpb24KOlBS T1BFUlRJRVM6CjpERVNDUklQVElPTjogVXNpbmcgYW5kIHJldHVybmluZyBzZXF1ZW5jZXMuCjpD VVNUT01fSUQ6IGFjY3VtLXNlcXVlbmNlCjpFTkQ6CgpTZXF1ZW5jZSBhY2N1bXVsYXRpb24gY29t bWFuZHMgYXJlIHVzZWQgdG8gam9pbiBsaXN0cyAoc3VjaCBhcyA9dW5pb249IGFuZAo9YXBwZW5k PSkgYW5kIHRvIGNvbGxlY3QgaXRlbXMgaW50byBsaXN0cyAoc3VjaCBhcyA9Y29sbGVjdD0gYW5k ID1hZGpvaW49KS4KCiMrZmluZGV4OiBhZGpvaW4KIytmaW5kZXg6IGFkam9pbmluZwotID0oYWRq b2luIFZBUiBFWFBSICZrZXkgYXQgdGVzdCBrZXkpPSA6OiBSZXBlYXRlZGx5IGFkZCA9RVhQUj0g dG8gPVZBUj0gaWYgaXQKICBpcyBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBsaXN0LgoKICBU aGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzID1hZGpvaW5pbmc9LgoKICBVbmxpa2UgfmNs LWFkam9pbn4gYW5kIGxpa2UgdGhlIG90aGVyIGFjY3VtdWxhdGlvbiBjb21tYW5kcywgdGhpcyBj b21tYW5kCiAgZGVmYXVsdHMgdG8gYWRqb2luaW5nID1FWFBSPSB0byB0aGUgZW5kIG9mID1WQVI9 LCBub3QgdGhlIGJlZ2lubmluZy4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4g KCgxIC4gMSkgKDEgLiAyKSAoMiAuIDMpKQogICAgKGxvb3B5IChsaXN0IGkgJygoMSAuIDEpICgx IC4gMikgKDEgLiAyKSAoMiAuIDMpKSkKICAgICAgICAgICAoYWRqb2luIGkpKQoKICAgIDs7IENv ZXJjZWQgdG8gYSB2ZWN0b3IgL2FmdGVyLyB0aGUgbG9vcCBlbmRzLgogICAgOzsgPT4gWzEgMiAz IDRdCiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMiAzIDMgNCkpCiAgICAgICAgICAgKGFkam9pbiBt eS12YXIgaSkKICAgICAgICAgICAod2hlbiAodmVjdG9ycCBteS12YXIpCiAgICAgICAgICAgICAo cmV0dXJuICdpcy12ZWN0b3IpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS12YXIpKQoK ICAgIDs7ID0+IFs0IDMgMiAxXQogICAgKGxvb3B5IChsaXN0IGkgJygxIDIgMyAzIDQpKQogICAg ICAgICAgIChhZGpvaW4gbXktdmFyIGkgOmF0ICdzdGFydCkKICAgICAgICAgICAoZmluYWxseS1y ZXR1cm4gbXktdmFyKSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBhcHBlbmQKIytmaW5kZXg6IGFw cGVuZGluZwotID0oYXBwZW5kIFZBUiBFWFBSICZrZXkgYXQpPSA6OiBSZXBlYXRlZGx5IGNvbmNh dGVuYXRlID1FWFBSPSB0byA9VkFSPSwgYXMgaWYKICBieSB0aGUgZnVuY3Rpb24gfmFwcGVuZH4u CgogIFRoaXMgY29tbWFuZCBhbHNvIGhhcyB0aGUgYWxpYXMgPWFwcGVuZGluZz0uCgogICMrQkVH SU5fU1JDIGVtYWNzLWxpc3AKICAgIDs7ID0+ICcoMSAyIDMgNCA1IDYpCiAgICAobG9vcHkgKGxp c3QgaSAnKCgxIDIgMykgKDQgNSA2KSkpCiAgICAgICAgICAgKGFwcGVuZCBjb2xsIGkpCiAgICAg ICAgICAgKGZpbmFsbHktcmV0dXJuIGNvbGwpKQoKICAgIDs7ID0+ICg0IDUgNiAxIDIgMykKICAg IChsb29weSAobGlzdCBpICcoKDEgMiAzKSAoNCA1IDYpKSkKICAgICAgICAgICAoYXBwZW5kIGkg OmF0IHN0YXJ0KSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiBjb2xsZWN0CiMrZmluZGV4OiBjb2xs ZWN0aW5nCi0gPShjb2xsZWN0IFZBUiBFWFBSICZrZXkgYXQpPSA6OiBDb2xsZWN0IHRoZSB2YWx1 ZSBvZiA9RVhQUj0gaW50bwogIHRoZSBsaXN0ID1WQVI9LiAgQnkgZGVmYXVsdCwgZWxlbWVudHMg YXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCgogIFRoaXMgY29tbWFuZCBhbHNvIGhh cyB0aGUgYWxpYXMgPWNvbGxlY3Rpbmc9LgoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7 OyA9PiAnKDEgMiAzKQogICAgKGxvb3B5IChsaXN0IGkgJygxIDIgMykpCiAgICAgICAgICAgKGNv bGxlY3QgaSkpCgogICAgOzsgPT4gJygoMSAyIDMpICgoMSkgKDEgMikgKDEgMiAzKSkpCiAgICAo bG9vcHkgKGxpc3QgaSAnKDEgMiAzKSkKICAgICAgICAgICA7OyBDb2xsZWN0IGBpJyBpbnRvIGBj b2xsMScuCiAgICAgICAgICAgKGNvbGxlY3QgY29sbDEgaSkKICAgICAgICAgICA7OyBDb2xsZWN0 IGBjb2xsMScgaW50byBhIGdlbmVyYXRlZCB2YXJpYWJsZS4KICAgICAgICAgICAoY29sbGVjdCBj b2xsMSkKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gY29sbDEgbG9vcHktcmVzdWx0KSkKCiAg ICA7OyA9PiBbMSAyIDNdCiAgICAobG9vcHkgKGxpc3QgaiAnKDEgMiAzKSkKICAgICAgICAgICAo Y29sbGVjdCBqKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiAoY2wtY29lcmNlIGxvb3B5LXJl c3VsdCAndmVjdG9yKSkpCgogICAgOzsgPT4gKDMgMiAxKQogICAgKGxvb3B5IChsaXN0IGogJygx IDIgMykpCiAgICAgICAgICAgKGNvbGxlY3QgaiA6YXQgc3RhcnQpKQoKICAgIDs7ID0+ICgxIDIg MykKICAgIChsb29weSAobGlzdCBqICcoMSAyIDMpKQogICAgICAgICAgIChjb2xsZWN0IGogOmF0 ICdlbmQpKQogICMrRU5EX1NSQwoKIytmaW5kZXg6IGNvbmNhdAojK2ZpbmRleDogY29uY2F0aW5n Ci0gPShjb25jYXQgVkFSIEVYUFIgJmtleSBhdCk9IDo6IFJlcGVhdGVkbHkgfmNvbmNhdH4gdGhl IHZhbHVlIG9mID1FWFBSPSBvbnRvCiAgPVZBUj0sIGFzIGEgc3RyaW5nLiAgRm9yIGNvbmNhdGVu YXRpbmcgdmFsdWVzIGludG8gYSB2ZWN0b3IsIHNlZSB0aGUgY29tbWFuZAogID12Y29uY2F0PS4K CiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlhcyA9Y29uY2F0aW5nPS4KCiAgIytCRUdJ Tl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gImFiYyIKICAgIChsb29weSAobGlzdCBpICcoImEi ICJiIiAiYyIpKQogICAgICAgICAgIChjb25jYXQgc3RyIGkpCiAgICAgICAgICAgKGZpbmFsbHkt cmV0dXJuIHN0cikpCgogICAgOzsgPT4gKCJkYSIgImViIiAiZmMiKQogICAgKGxvb3B5IChsaXN0 IGogJygoImEiICJiIiAiYyIpICgiZCIgImUiICJmIikpKQogICAgICAgICAgIChjb25jYXQgKHN0 cjEgc3RyMiBzdHIzKSBqIDphdCAnc3RhcnQpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIHN0 cjEgc3RyMiBzdHIzKSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiBuY29uYwojK2ZpbmRleDogbmNv bmNpbmcKLSA9KG5jb25jIFZBUiBFWFBSICZrZXkgYXQpPSA6OiBSZXBlYXRlZGx5IGFuZCAvZGVz dHJ1Y3RpdmVseS8gY29uY2F0ZW5hdGUgdGhlCiAgdmFsdWUgb2YgPUVYUFI9IG9udG8gPVZBUj0g YXMgaWYgYnkgdXNpbmcgdGhlIGZ1bmN0aW9uIH5uY29uY34uCgogIFRoaXMgY29tbWFuZCBhbHNv IGhhcyB0aGUgYWxpYXMgPW5jb25jaW5nPS4KCiAgIythdHRyX3RleGluZm86IDp0YWcgQ2F1dGlv bgogICMrYmVnaW5fcXVvdGUKICB+bmNvbmN+IGlzIGEgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uIHRo YXQgbW9kaWZpZXMgPVZBUj0gZGlyZWN0bHkKICAoW1tpbmZvOmVsaXNwI1JlYXJyYW5nZW1lbnRd XSkuICBUaGlzIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQgd2hlbiB3b3JraW5nCiAgd2l0 aCBsaXRlcmFsIHZhbHVlcywgc3VjaCBhcyB0aGUgbGlzdCA9JygxIDIgMyk9LCB3aG9zZSBtb2Rp ZmljYXRpb24gY291bGQKICBhcHBseSB3aGVyZXZlciB0aGF0IHZhbHVlIGlzIHVzZWQgKFtbaW5m bzplbGlzcCNTZWxmLUV2YWx1YXRpbmcgRm9ybXNdXSkuCiAgIytlbmRfcXVvdGUKCiAgIytCRUdJ Tl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gJygxIDIgMyA0IDUgNiA3IDgpCiAgICAobG9vcHkg KGxpc3QgaSAnKCgxIDIgMyA0KSAoNSA2IDcgOCkpKQogICAgICAgICAgIChuY29uYyBteS1uZXct bGlzdCBpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBteS1uZXctbGlzdCkpCgogICAgOzsg PT4gJygzIDMgMyAyIDIgMSkKICAgIChsb29weSAobGlzdCBpIChsaXN0IChtYWtlLWxpc3QgMSAx KQogICAgICAgICAgICAgICAgICAgICAgICAgKG1ha2UtbGlzdCAyIDIpCiAgICAgICAgICAgICAg ICAgICAgICAgICAobWFrZS1saXN0IDMgMykpKQogICAgICAgICAgIChuY29uYyBpIDphdCBzdGFy dCkpCiAgIytFTkRfU1JDCgojK2ZpbmRleDogbnVuaW9uCiMrZmluZGV4OiBudW5pb25pbmcKLSA9 KG51bmlvbiBWQVIgRVhQUiAma2V5IHRlc3QgYXQga2V5KT0gOjogUmVwZWF0ZWRseSBhbmQgL2Rl c3RydWN0aXZlbHkvIGluc2VydAogIGludG8gPVZBUj0gdGhlIGVsZW1lbnRzIG9mID1FWFBSPSB3 aGljaCBhcmUgbm90IGFscmVhZHkgcHJlc2VudCBpbiA9VkFSPS4KCiAgVGhpcyBjb21tYW5kIGFs c28gaGFzIHRoZSBhbGlhcyA9bnVuaW9uaW5nPS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAog ICAgOzsgPT4gKDQgMSAyIDMpCiAgICAobG9vcHkgKGxpc3QgaSAnKCgxIDIpICgyIDMpICgzIDQp KSkKICAgICAgICAgICAobnVuaW9uIHZhciBpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiB2 YXIpKQoKICAgIDs7ID0+ICg0IDIgKDEgMSkgMykKICAgIChsb29weSAobGlzdCBpICcoKCgxIDEp IDIpICgoMSAxKSAzKSAoMyA0KSkpCiAgICAgICAgICAgKG51bmlvbmluZyB2YXIgaSA6dGVzdCAj J2VxdWFsKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiB2YXIpKQoKICAgIDs7ID0+ICgoMSAy IDMpICgyIDMgNCkpCiAgICAobG9vcHkgKGFycmF5IGkgWygoMSAyKSAoMiAzKSkKICAgICAgICAg ICAgICAgICAgICAgKCgxIDIgMykgKDMgNCkpXSkKICAgICAgICAgICAobnVuaW9uICh2YXIxIHZh cjIpIGkgOnRlc3QgIydlcXVhbCkKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gdmFyMSB2YXIy KSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBwcmVwZW5kCiMrZmluZGV4OiBwcmVwZW5kaW5nCi0g PShwcmVwZW5kIFZBUiBFWFBSKT0gOjogUmVwZWF0ZWRseSBjb25jYXRlbmF0ZSA9RVhQUj0gb250 byB0aGUgZnJvbnQgb2YgPVZBUj0sCiAgYXMgaWYgYnkgdGhlIGZ1bmN0aW9uIH5hcHBlbmR+LgoK ICBUaGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzID1wcmVwZW5kaW5nPS4KCiAgVGhpcyBj b21tYW5kIGlzIGludGVycHJldGVkIGJ5IExvb3B5IGFzID0oYXBwZW5kIFZBUiBFWFBSIDphdCBz dGFydCk9LCBhbmQgaXMKICBub3JtYWxseSBkZXNjcmliZWQgYXMgc3VjaCB3aGVuIHJlcG9ydGlu ZyBlcnJvcnMuICBJdCBleGlzdHMgZm9yIGNsYXJpdHkgYW5kCiAgY29udmVuaWVuY2UuCgogICMr YmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICg1IDYgMyA0IDEgMikKICAgIChsb29weSAo YXJyYXkgaSBbKDEgMikgKDMgNCkgKDUgNildKQogICAgICAgICAgIChwcmVwZW5kIGkpKQoKICAg IDs7ID0+ICg0IDMgMiAxKQogICAgKGxldCAoKG15LWxpc3QgJygxKSkpCiAgICAgIChsb29weSAo d2l0aG91dCBteS1saXN0KQogICAgICAgICAgICAgKGFycmF5IGVsZW0gWygyKSAoMykgKDQpXSkK ICAgICAgICAgICAgIChwcmVwZW5kIG15LWxpc3QgZWxlbSkKICAgICAgICAgICAgIChmaW5hbGx5 LXJldHVybiBteS1saXN0KSkpCiAgIytlbmRfc3JjCgojK2ZpbmRleDogcHVzaAojK2ZpbmRleDog cHVzaGluZwojK2ZpbmRleDogcHVzaC1pbnRvCiMrZmluZGV4OiBwdXNoaW5nLWludG8KLSA9KHB1 c2gtaW50b3xwdXNoIFZBUiBFWFBSKT0gOjogQ29sbGVjdCB0aGUgdmFsdWUgb2YgPUVYUFI9IGlu dG8gYSBsaXN0LCBhZGRpbmcKICB2YWx1ZXMgdG8gdGhlIGZyb250IG9mID1WQVI9IGFzIGlmIGJ5 IHVzaW5nIHRoZSBmdW5jdGlvbiB+cHVzaH4uCgogIFRoaXMgY29tbWFuZCBhbHNvIGhhcyB0aGUg YWxpYXMgPXB1c2hpbmc9IGFuZCA9cHVzaGluZy1pbnRvPS4KCiAgVGhpcyBjb21tYW5kIGlzIGlu dGVycHJldGVkIGJ5IExvb3B5IGFzID0oY29sbGVjdCBWQVIgRVhQUiA6YXQgc3RhcnQpPSwgYW5k IGlzCiAgbm9ybWFsbHkgZGVzY3JpYmVkIGFzIHN1Y2ggd2hlbiByZXBvcnRpbmcgZXJyb3JzLiAg SXQgZXhpc3RzIGZvciBjbGFyaXR5IGFuZAogIGNvbnZlbmllbmNlLgoKICAjK0JFR0lOX1NSQyBl bWFjcy1saXNwCiAgICA7OyA9PiAoMyAyIDEpCiAgICAobG9vcHkgKGFycmF5IGkgWzEgMiAzXSkK ICAgICAgICAgICAocHVzaCBteS1saXN0IGkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIG15 LWxpc3QpKQogICMrRU5EX1NSQwoKIytmaW5kZXg6IHVuaW9uCiMrZmluZGV4OiB1bmlvbmluZwot ID0odW5pb24gVkFSIEVYUFIgJmtleSB0ZXN0IGF0IGtleSk9IDo6IFJlcGVhdGVkbHkgaW5zZXJ0 IGludG8gPVZBUj0gdGhlCiAgZWxlbWVudHMgb2YgdGhlIGxpc3QgPUVYUFI9IHRoYXQgYXJlIG5v dCBhbHJlYWR5IHByZXNlbnQgaW4gPVZBUj0uCgogIFRoaXMgY29tbWFuZCBhbHNvIGhhcyB0aGUg YWxpYXMgPXVuaW9uaW5nPS4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDQg MSAyIDMpCiAgICAobG9vcHkgKGxpc3QgaSAnKCgxIDIpICgyIDMpICgzIDQpKSkKICAgICAgICAg ICAodW5pb24gdmFyIGkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIHZhcikpCgogICAgOzsg PT4gKDQgMiAoMSAxKSAzKQogICAgKGxvb3B5IChsaXN0IGkgJygoKDEgMSkgMikgKCgxIDEpIDMp ICgzIDQpKSkKICAgICAgICAgICAodW5pb25pbmcgdmFyIGkgOnRlc3QgIydlcXVhbCkKICAgICAg ICAgICAoZmluYWxseS1yZXR1cm4gdmFyKSkKCiAgICA7OyA9PiAoKDEgMiAzKSAoMiAzIDQpKQog ICAgKGxvb3B5IChhcnJheSBpIFsoKDEgMikgKDIgMykpCiAgICAgICAgICAgICAgICAgICAgICgo MSAyIDMpICgzIDQpKV0pCiAgICAgICAgICAgKHVuaW9uICh2YXIxIHZhcjIpIGkgOnRlc3QgIyc9 KQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiB2YXIxIHZhcjIpKQogICMrZW5kX3NyYwoKIytm aW5kZXg6IHZjb25jYXQKIytmaW5kZXg6IHZjb25jYXRpbmcKLSA9KHZjb25jYXQgVkFSIEVYUFIg JmtleSBhdCk9IDo6IFJlcGVhdGVkbHkgY29uY2F0ZW5hdGUgdGhlIHZhbHVlIG9mID1FWFBSPQog IG9udG8gPVZBUj0gdmlhIHRoZSBmdW5jdGlvbiB+dmNvbmNhdH4uICBGb3IgY29uY2F0ZW5hdGlu ZyB2YWx1ZXMgaW50byBhCiAgc3RyaW5nLCBzZWUgdGhlIGNvbW1hbmQgPWNvbmNhdD0uCgogIFRo aXMgY29tbWFuZCBhbHNvIGhhcyB0aGUgYWxpYXMgPXZjb25jYXRpbmc9LgoKICAjK0JFR0lOX1NS QyBlbWFjcy1saXNwCiAgICA7OyA9PiBbMSAyIDMgNCA1IDZdCiAgICAobG9vcHkgKGxpc3QgaSAn KFsxIDIgM10gWzQgNSA2XSkpCiAgICAgICAgICAgKHZjb25jYXQgbXktdmVjdG9yIGkpCiAgICAg ICAgICAgKGZpbmFsbHktcmV0dXJuIG15LXZlY3RvcikpCgogICAgOzsgPT4gWzQgNSA2IDEgMiAz XQogICAgKGxvb3B5IChsaXN0IGkgJyhbMSAyIDNdIFs0IDUgNl0pKQogICAgICAgICAgICh2Y29u Y2F0IGkgOmF0ICdzdGFydCkpCiAgIytFTkRfU1JDCgoqKiogT3RoZXIgQWNjdW11bGF0aW9uIENv bW1hbmRzCgojK2ZpbmRleDogZmluZAojK2ZpbmRleDogZmluZGluZwotID0oZmluZCBWQVIgRVhQ UiBURVNUICZrZXkgT04tRkFJTFVSRSk9IDo6IElmIHRoZSBleHByZXNzaW9uID1URVNUPSBpcyBu b24tbmlsLAogIHRoZW4gdGhlIGxvb3Agc3RvcHMgYW5kID1WQVI9IGlzIHNldCB0byB0aGUgdmFs dWUgb2YgPUVYUFI9LiAgSWYgPVRFU1Q9IGlzCiAgbmV2ZXIgbm9uLW5pbCwgdGhlbiA9VkFSPSBp cyBzZXQgdG8gdGhlIHZhbHVlIG9mID1PTi1GQUlMVVJFPSwgaWYgcHJvdmlkZWQuCgogIFRoaXMg Y29tbWFuZCBhbHNvIGhhcyB0aGUgYWxpYXMgPWZpbmRpbmc9LgoKICBJZiB0aGUgbG9vcCBpcyBs ZWZ0IGVhcmx5IGFuZCA9VEVTVD0gd2FzIG5ldmVyIG5vbi1uaWwsIHRoaXMgaXMgdGhlIHNhbWUg YXMgYQogIG5vcm1hbCBmYWlsdXJlIGFuZCA9VkFSPSB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUg b2YgPU9OLUZBSUxVUkU9LCBpZgogIHByb3ZpZGVkLgoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNw CiAgICA7OyA9PiAoMTMgKDEgMikpCiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMiAzIDQgNSA2IDcg OCkpCiAgICAgICAgICAgKGZpbmQgKCsgaSAxMCkgKD4gaSAyKSkKICAgICAgICAgICAoY29sbGVj dCBjb2xsIGkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGxvb3B5LXJlc3VsdCBjb2xsKSkK CiAgICA7OyA9PiBuaWwKICAgIChsb29weSAobGlzdCBpICcoMSAyIDMgNCA1IDYpKQogICAgICAg ICAgIChmaW5kIGkgKD4gaSAxMikpKQoKICAgIDs7ID0+IDI3CiAgICAobG9vcHkgKGxpc3QgaSAn KDEgMiAzIDQgNSA2KSkKICAgICAgICAgICAoZmluZCBpICg+IGkgMTIpIDpvbi1mYWlsdXJlIDI3 KSkKCiAgICA7OyA9PiAyNwogICAgKGxvb3B5IChsaXN0IGkgJygxIDIgMyA0IDUgNikpCiAgICAg ICAgICAgKHdoaWxlICg8IGkgMykpCiAgICAgICAgICAgKGZpbmQgaSAoPiBpIDEyKSA6b24tZmFp bHVyZSAyNykpCgogICAgOzsgPT4gbmlsCiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMiAzIDQgNSA2 KSkKICAgICAgICAgICAoZmluZCBuaWwgKD4gaSAzKSA6b24tZmFpbHVyZSAyNykpCiAgIytFTkRf U1JDCgoqKiogIE9wdGltaXppbmcgQWNjdW11bGF0aW9ucwo6UFJPUEVSVElFUzoKOkNVU1RPTV9J RDogb3B0aW1pemVkLWFjY3Vtcwo6REVTQ1JJUFRJT046IFByb2R1Y2luZyBlZmZpY2llbnQgYWNj dW11bGF0aW9ucy4KOkVORDoKCiMrY2luZGV4OiBvcHRpbWl6aW5nIGFjY3VtdWxhdGlvbnMKQnkg ZGVmYXVsdCwgbmFtZWQgYWNjdW11bGF0aW9uIHZhcmlhYmxlcyAoZXhjbHVkaW5nIHRoZSBhdXRv bWF0aWNhbGx5IG5hbWVkCn5sb29weS1yZXN1bHR+KSBhcmUgYWNjZXNzaWJsZSBkdXJpbmcgdGhl IGxvb3AsIGFuZCB0aGVpciB2YWx1ZXMgYXJlIGFsd2F5cwpjb3JyZWN0IGR1cmluZyBleGVjdXRp b24uICBGb3IgZXhhbXBsZSwgbGlzdHMgYXJlIGFsd2F5cyBpbiB0aGUgY29ycmVjdCBvcmRlciwK ZXZlbiB3aGVuIGNvbnN0cnVjdGluZyBsaW5rZWQgbGlzdHMgaW4gdGhlIHJldmVyc2Ugb3JkZXIg d291bGQgYmUgbW9yZQplZmZpY2llbnQuCgojK2JlZ2luX3NyYyBlbGlzcAogIDs7IE5vdGUgaG93 IGBjb2xsJyBpcyBhbHdheXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXI6CiAgOzsgPT4gKCgxIDIgMykK ICA7OyAgICAgKCgxKSAoMSAyKSAoMSAyIDMpKSkKICAobG9vcHkgKGFycmF5IGkgWzEgMiAzXSkK ICAgICAgICAgKGNvbGxlY3QgY29sbCBpKQogICAgICAgICAoY29sbGVjdCBpbnRlcm1lZGlhdGUt dmFsdWVzIChjb3B5LXNlcXVlbmNlIGNvbGwpKQogICAgICAgICAoZmluYWxseS1yZXR1cm4gY29s bCBpbnRlcm1lZGlhdGUtdmFsdWVzKSkKIytlbmRfc3JjCgpJbXBsaWVkIGFjY3VtdWxhdGlvbiB2 YXJpYWJsZXMgYXJlIG5vdCByZXF1aXJlZCB0byBhbHdheXMgYmUgaW4gdGhlIGNvcnJlY3QKb3Jk ZXIsIHNvIGNvbW1hbmRzIHVzaW5nIHN1Y2ggdmFyaWFibGVzIGNhbiBwcm9kdWNlIG1vcmUgZWZm aWNpZW50IGNvZGUuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgU2ltaWxhciBpbiBlZmZp Y2llbmN5IHRvIHRoZSBiZWxvdzoKICA7OyA9PiAoMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEz IC4uLikKICAobG9vcHkgKGxpc3QgaSAobnVtYmVyLXNlcXVlbmNlIDEgMTAwMCkpCiAgICAgICAg IChjb2xsZWN0ICgxKyBpKSkpCgogIDs7ID0+ICgyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMg Li4uKQogIChsZXQgKHJlc3VsdCkKICAgIChkb2xpc3QgKGkgKG51bWJlci1zZXF1ZW5jZSAxIDEw MDApKQogICAgICAocHVzaCAoMSsgaSkgcmVzdWx0KSkKICAgIChucmV2ZXJzZSByZXN1bHQpKQoj K2VuZF9zcmMKClRoZSBzaXR1YXRpb24gYmVjb21lcyBtb3JlIGNvbXBsZXggd2hlbiBjb21tYW5k cyBwbGFjZSB2YWx1ZXMgYXQgYm90aCBzaWRlcyBvZiBhCnNlcXVlbmNlLiAgSW4gdGhhdCBjYXNl LCB+bG9vcHl+IGtlZXBzIHRyYWNrIG9mIHRoZSBiZWdpbm5pbmcgL2FuZC8gdGhlIGVuZCBvZgp0 aGUgc2VxdWVuY2UuICB+bG9vcHl+IC9kb2VzIG5vdC8gbWVyZWx5IGFwcGVuZCB0byB0aGUgZW5k IG9mIHRoZSBhY2N1bXVsYXRpbmcKbGlzdCwgc2luY2UgdGhhdCB3b3VsZCBiZSBtdWNoIHNsb3dl ciBmb3IgbGFyZ2UgbGlzdHMuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgYGxvb3B5JyBj YW4gYmUgZmFzdGVyIHRoYW4gdGhlIGJlbG93IGBkb2xpc3QnIGFwcHJvYWNoOgogIDs7ID0+ICgz IDIgMSA3IDE0IDIxKQogIChsb29weSAobGlzdCBpICcoMSAyIDMpKQogICAgICAgICAoY29sbGVj dCBpIDphdCBzdGFydCkKICAgICAgICAgKGNvbGxlY3QgKCogaSA3KSA6YXQgZW5kKSkKCiAgOzsg Rm9yIGxhcmdlIGFjY3VtdWxhdGlvbnMsIHRoaXMgaXMgc2xvd2VyIHRoYW4gdGhlIGFib3ZlOgog IDs7ID0+ICgzIDIgMSA3IDE0IDIxKQogIChsZXQgKHJlc3VsdCkKICAgIChkb2xpc3QgKGkgJygx IDIgMykpCiAgICAgIChzZXRxIHJlc3VsdCAoY29ucyBpIHJlc3VsdCkKICAgICAgICAgICAgcmVz dWx0IChuY29uYyByZXN1bHQgKGxpc3QgKCogaSA3KSkpKSkKICAgIHJlc3VsdCkKIytlbmRfc3Jj CgpJbiBzdWNoIGNhc2VzLCB+bG9vcHl+IHdpbGwgbmFpdmVseSBvcHRpbWl6ZSBwbGFjaW5nIHZh bHVlcyBhdCB3aGljaGV2ZXIgc2lkZSBvZgp0aGUgc2VxdWVuY2VzIGFwcGVhcnMgdG8gYmUgbW9y ZSB1c2VkLiAgSW4gdGhlIGV4YW1wbGUgYmVsb3csIG5vdGUgdGhhdCBldmVuCnRob3VnaCB0aGUg Y29tbWFuZHMgdG8gaW5zZXJ0IHZhbHVlcyBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QgYXJlIG5l dmVyIGFjdHVhbGx5CnJ1biwgfmxvb3B5fiB3aWxsIHN0aWxsIG9wdGltaXplIGZvciBmcm9udGFs IGluc2VydGlvbnMuICBIZXJlLCB+bG9vcHl+IHNpbXBseQpjb3VudHMgdGhhdCAyIGNvbW1hbmRz IHNlZW0gdG8gcGxhY2UgdmFsdWVzIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCB3aGlsZSBvbmx5 CjEgY29tbWFuZCBzZWVtcyB0byBwbGFjZSB2YWx1ZXMgYXQgdGhlIGVuZC4KCiMrYmVnaW5fc3Jj IGVtYWNzLWxpc3AKICA7OyBUaGlzIGNvZGUgb3B0aW1pemVzIGZvciBpbnNlcnRpb25zIGF0IHRo ZSBmcm9udCBvZiB0aGUgbGlzdDoKICA7OyA9PiAoMSAyIDMpCiAgKGxvb3B5IChsaXN0IGkgJygx IDIgMykpCiAgICAgICAgIChjb2xsZWN0IGkgOmF0IGVuZCkKICAgICAgICAgKHdoZW4gbmlsCiAg ICAgICAgICAgKGNvbGxlY3QgaSA6YXQgc3RhcnQpCiAgICAgICAgICAgKGNvbGxlY3QgaSA6YXQg c3RhcnQpKSkKIytlbmRfc3JjCgpUaGUgc3BlY2lhbCBtYWNybyBhcmd1bWVudCA9YWNjdW0tb3B0 PSBjYW4gYmUgdXNlZCB0byBiZXR0ZXIgY29udHJvbCB0aGVzZQpvcHRpbWl6YXRpb25zIChbWyNt YWNyby1hcmd1bWVudHNdXSkuICBXaXRoIGl0LCB5b3UgY2FuICgxKSB0cmVhdCBhbiBleHBsaWNp dAp2YXJpYWJsZSBhcyBpZiBpdCB3ZXJlIGltcGxpY2l0IGFuZCBvcHRpb25hbGx5ICgyKSBzcGVj aWZ5IHdoaWNoIHNpZGUgb2YgYQpzZXF1ZW5jZSB5b3UgZXhwZWN0IHRvIHVzZSBtb3JlLiAgVGhl IGFyZ3VtZW50cyBwYXNzZWQgdG8gPWFjY3VtLW9wdD0gYXJlIGVpdGhlcgpzeW1ib2xzIChzdWNo IGFzIH5sb29weS1yZXN1bHR+KSBvciBsaXN0cyBvZiBhIHN5bWJvbCBhbmQgYSBwb3NpdGlvbi4g IFRvIGJlCmNsZWFyLCB1c2Ugb2YgdGhlIHZhcmlhYmxlIH5sb29weS1yZXN1bHR+IGlzIGFsd2F5 cyBhdCBsZWFzdCBuYWl2ZWx5IG9wdGltaXplZAppbiB0aGUgbWFubmVyIGRlc2NyaWJlZCBhYm92 ZS4KCkluIHRoZSBleGFtcGxlIGJlbG93LCBzZWUgdGhhdAoxLiBBY2N1bXVsYXRpb24gaW50byB0 aGUgbmFtZWQgdmFyaWFibGUgfmNvbGx+IGhhcyBiZWVuIGV4cGxpY2l0bHkgb3B0aW1pemVkIGZv cgogICB1c2luZyB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSwgZGVzcGl0ZSB0aGVyZSBiZWluZyBt b3JlIGNvbW1hbmRzIHRoYXQgdXNlIHRoZQogICBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlLgoy LiBCZWNhdXNlIGFjY3VtdWxhdGlvbiBpbnRvIH5jb2xsfiBoYXMgYmVlbiBvcHRpbWl6ZWQsIHRo ZSBvcmRlciBvZiB2YWx1ZXMgaW4KICAgfmNvbGx+IG5lZWQgbm90IGJlIGNvcnJlY3QgZHVyaW5n IHRoZSBsb29wLgoKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBUaGlzIGNvZGUgb3B0aW1p emVzIGZvciBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgYGNvbGwnOgogIDs7CiAgOzsgPT4gKCgy MyAxMyAyMiAxMiAyMSAxMSAxIDIgMykKICA7OyAgICAgKCgxIDExIDIxKSAoMiAxIDExIDIxIDEy IDIyKSAoMyAyIDEgMTEgMjEgMTIgMjIgMTMgMjMpKSkKICAobG9vcHkgKGFjY3VtLW9wdCAoY29s bCBlbmQpKQogICAgICAgICAobGlzdCBpICcoMSAyIDMpKQogICAgICAgICAoY29sbGVjdCBjb2xs IGkgOmF0IGVuZCkKICAgICAgICAgKGNvbGxlY3QgY29sbCAoKyAxMCBpKSA6YXQgc3RhcnQpCiAg ICAgICAgIChjb2xsZWN0IGNvbGwgKCsgMjAgaSkgOmF0IHN0YXJ0KQogICAgICAgICAoY29sbGVj dCBpbnRlcm1lZGlhdGUtdmFsdWVzIChjb3B5LXNlcXVlbmNlIGNvbGwpKQogICAgICAgICAoZmlu YWxseS1yZXR1cm4gY29sbCBpbnRlcm1lZGlhdGUtdmFsdWVzKSkKIytlbmRfc3JjCgpUaGUgPWFj Y3VtcC1vcHQ9IHNwZWNpYWwgbWFjcm8gYXJndW1lbnQgY2FuIGFsc28gYmUgdXNlZCB3aXRoIGRl c3RydWN0dXJpbmcuCkJlY2F1c2UgZGVzdHJ1Y3R1cmluZyByZXF1aXJlcyB1c2luZyBuYW1lZCB2 YXJpYWJsZXMsIHN1Y2ggdmFyaWFibGVzIGFyZSBieQpkZWZhdWx0IHJlcXVpcmVkIHRvIGJlIG9y ZGVyZWQgY29ycmVjdGx5IGR1cmluZyB0aGUgbG9vcC4gIElmIHlvdSBkbyBub3QgbmVlZAp0aGVt IHRvIGJlIHNvLCB5b3UgYXJlIHJlY29tbWVuZGVkIHRvIHVzZSA9YWNjdW0tb3B0PSBvbiB0aG9z ZSB2YXJpYWJsZXMuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgPT4gKCgxIDMpCiAgOzsg ICAgICgyIDQpCiAgOzsgICAgICgoMSkgKDMgMSkpCiAgOzsgICAgICgoMikgKDQgMikpKQogIChs b29weSAoYWNjdW0tb3B0IGEgYikKICAgICAgICAgKGFycmF5IGVsZW0gWygxIDIpICgzIDQpXSkK ICAgICAgICAgKGNvbGxlY3QgKGEgYikgZWxlbSkKICAgICAgICAgKGNvbGxlY3QgaW50ZXJtZWRp YXRlLWEgKGNvcHktc2VxdWVuY2UgYSkpCiAgICAgICAgIChjb2xsZWN0IGludGVybWVkaWF0ZS1i IChjb3B5LXNlcXVlbmNlIGIpKQogICAgICAgICAoZmluYWxseS1yZXR1cm4gYSBiIGludGVybWVk aWF0ZS1hIGludGVybWVkaWF0ZS1iKSkKIytlbmRfc3JjCgoqKiBDaGVja2luZyBDb25kaXRpb25z CjpQUk9QRVJUSUVTOgo6Q1VTVE9NX0lEOiBib29sZWFuLWNvbW1hbmRzCjpERVNDUklQVElPTjog VGVzdGluZyB3aGV0aGVyIGEgY29uZGl0aW9uIGhvbGRzIHRydWUuCjpFTkQ6Cgp7e3tkZm4oQm9v bGVhbiBjb21tYW5kcyl9fX0gYXJlIHVzZWQgdG8gdGVzdCB3aGV0aGVyIGEgY29uZGl0aW9uIGhv bGRzIHRydWUKZHVyaW5nIHRoZSBsb29wLiAgVGhleSB3b3JrIGxpa2UgYSBjb21iaW5hdGlvbiBv ZiBpdGVyYXRpb24gYW5kIGFjY3VtdWxhdGlvbgpjb21tYW5kcywgaW4gdGhhdCB2YWx1ZXMgYXJl IHN0b3JlZCBpbiB+bG9vcHktcmVzdWx0fiBhbmQgdGhhdCB0aGV5IGNhbgp0ZXJtaW5hdGUgdGhl IGxvb3AuCgpCZSBhd2FyZSBvZiB0aGUgZm9sbG93aW5nOgoKLSBDdXJyZW50bHksIHVubGlrZSBh Y2N1bXVsYXRpb24gY29tbWFuZHMsIHRoZXJlIGlzIG5vIG5vbi1rZXl3b3JkIHdheSB0bwogIHNw ZWNpZnkgYSB2YXJpYWJsZS4gIFRoZSBmaXJzdCBhcmd1bWVudCAodGhlIG9ubHkgcmVxdWlyZWQg YXJndW1lbnQpIG9mIGVhY2gKICBib29sZWFuIGNvbW1hbmQgaXMgYSBjb25kaXRpb24gdG8gY2hl Y2suCgotIExpa2UgYWNjdW11bGF0aW9uIGNvbW1hbmRzLCB0aGUga2V5d29yZCA9OmludG89IGNh biBiZSB1c2VkIHRoZSBzcGVjaWZ5IGEKICB2YXJpYWJsZSBvdGhlciB0aGFuIH5sb29weS1yZXN1 bHR+LgoKLSBUaGUgPWFsd2F5cz0gYW5kID1uZXZlcj0gY29tbWFuZHMgbXVzdCB1c2UgdGhlIHNh bWUgdmFyaWFibGUgdG8gd29yawogIHRvZ2V0aGVyIGNvcnJlY3RseS4gIEJ5IGRlZmF1bHQsIHRo ZSBib3RoIHVzZSB+bG9vcHktcmVzdWx0fi4KCi0gVGhlc2UgY29tbWFuZHMgZXhpdCB0aGUgbG9v cCB3aXRob3V0IGZvcmNpbmcgYSByZXR1cm4gdmFsdWUKICAoW1sjZXhpdGluZy10aGUtbG9vcC1l YXJseV1dKS4gIFRoZXJlZm9yZSwgb3B0aW1pemVkIGFjY3VtdWxhdGlvbiB2YXJpYWJsZXMgY2Fu IGJlCiAgZmluYWxpemVkIGV2ZW4gd2hlbiB0aGUgbG9vcCBlbmRzLCBhcyBoYXBwZW5zIHdpdGgg dGhlID1sZWF2ZT0gY29tbWFuZC4KICBIb3dldmVyLCBiZWNhdXNlIHRoZSBib29sZWFuIGNvbW1h bmRzIGFscmVhZHkgdXNlIH5sb29weS1yZXN1bHR+LCBzdWNoCiAgb3B0aW1pemVkIGFjY3VtdWxh dGlvbiB2YXJpYWJsZXMgbXVzdCBiZSBjcmVhdGVkIHdpdGggdGhlIHNwZWNpYWwgbWFjcm8KICBh cmd1bWVudCA9YWNjdW0tb3B0PSBhbmQgbXVzdCBiZSB1c2VkIGV4cGxpY2l0bHksIGFzIGluIHRo ZSBiZWxvdyBleGFtcGxlLgoKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyA9PiAobmlsICgx IDMgNSkpCiAgKGxvb3B5IChhY2N1bS1vcHQgY29sbCkKICAgICAgICAgKGxpc3QgaSAnKDEgMyA1 IDYgOSkpCiAgICAgICAgIChhbHdheXMgKGNsLW9kZHAgaSkpCiAgICAgICAgIChjb2xsZWN0IGNv bGwgaSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIGxvb3B5LXJlc3VsdCBjb2xsKSkKCiAgOzsg V29ya3Mgc2ltaWxhcmx5LCBidXQgZm9yY2VzIHRoZSBgbmlsJyByZXR1cm4gdmFsdWUuCiAgOzsg UmV0dXJucyB0aGUgY29sbGVjdGlvbiBpZiBgYWx3YXlzJyBkb2Vzbid0IHRyaWdnZXIgYW4gZXhp dC4KICA7OyBBdHRlbXB0aW5nIHNpbWlsYXIgd2l0aCBDTCdzIGBpdGVyYXRlJyB3aWxsIHNpZ25h bCBhbiBlcnJvci4KICA7OwogIDs7ID0+IG5pbAogIChjbC1sb29wIGZvciBpIGluICcoMSAzIDUg NiA5KQogICAgICAgICAgIGFsd2F5cyAoY2wtb2RkcCBpKQogICAgICAgICAgIGNvbGxlY3QgaSkK IytlbmRfc3JjCgojK2F0dHJfdGV4aW5mbzogOnRhZyBXYXJuCiMrYmVnaW5fcXVvdGUKVXNpbmcg dGhlIGNvbW1hbmQgPXRoZXJlaXM9IGZvciBhIHZhcmlhYmxlIGlzIGluY29tcGF0aWJsZSB3aXRo IHVzaW5nIHRoZQpjb21tYW5kcyA9YWx3YXlzPSBhbmQgPW5ldmVyPSBvbiB0aGF0IHNhbWUgdmFy aWFibGUsIGFzIHRoaXMgd291bGQgY3JlYXRlCmNvbmZsaWN0aW5nIGluaXRpYWwgdmFsdWVzIGZv ciB0aGUgaW1wbGljaXQgcmV0dXJuIHZhbHVlIChib3RoIHVzaW5nCn5sb29weS1yZXN1bHR+KS4K IytlbmRfcXVvdGUKCgojK2ZpbmRleDogYWx3YXlzCi0gPShhbHdheXMgRVhQUiAma2V5IGludG8p PSA6OiBDaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBjb25kaXRpb24gPUVYUFI9LiAgSWYgdGhlCiAg Y29uZGl0aW9uIGV2YWx1YXRlcyB0byB+bmlsfiwgZW5kIHRoZSBsb29wLiAgT3RoZXJ3aXNlLCB0 aGUgbG9vcCByZXR1cm5zIHRoZQogIGZpbmFsIHZhbHVlIG9mIHRoZSBjb25kaXRpb24gb3IgfnR+ IGlmIHRoZSBjb21tYW5kIGlzIG5ldmVyIHJ1bi4KCiAgVGhlIHN0ZXBzIGFyZSB0aHVzOgogIDEu IFRoZSB2YXJpYWJsZSAoYnkgZGVmYXVsdCwgfmxvb3B5LXJlc3VsdH4pIGlzIGluaXRpYWxseSBi b3VuZCB0byB+dH4sIHVzaW5nCiAgICAgaXQgYXMgdGhlIGltcGxpY2l0IHJldHVybiB2YWx1ZSBv ZiB0aGUgbG9vcC4KICAyLiBXaGVuIHRoZSBjb25kaXRpb24gaXMgY2hlY2tlZCwgdGhlIHZhcmlh YmxlIGlzIGJvdW5kIHRvIHRoZSB2YWx1ZSBvZgogICAgIHRoZSBjb25kaXRpb24uCiAgMy4gSWYg dGhlIHZhcmlhYmxlIGlzIH5uaWx+LCB0aGUgbG9vcCBpcyBleGl0ZWQuCiAgNC4gSWYgdGhlIGxv b3AgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgdGhlbiB0aGUgdmFyaWFibGUgaXMgdGhlIGZpbmFs IHZhbHVlCiAgICAgb2YgdGhlIGNvbmRpdGlvbi4gIElmIHRoZSBjb21tYW5kIGlzIG5ldmVyIHJ1 biwgdGhlbiB0aGUgdmFyaWFibGUgd2lsbAogICAgIHJlbWFpbiB+dH4uCgoKICAjK0JFR0lOX1NS QyBlbWFjcy1saXNwCiAgICA7OyA9PiB0CiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMCAxIDAgMSkp CiAgICAgICAgICAgKGFsd2F5cyAoPCBpIDIpKSkKCiAgICA7OyBSZXR1cm5zIHRoZSBmaW5hbCB2 YWx1ZSBvZiB0aGUgY29uZGl0aW9uOgogICAgOzsgPT4gNQogICAgKGxvb3B5IChsaXN0IGkgJygx IDAgMSAwIDEpKQogICAgICAgICAgIChhbHdheXMgKGFuZCAoPCBpIDIpIDUpKSkKCiAgICA7OyA9 PiBuaWwKICAgIChsb29weSAobGlzdCBpICcoMSAwIDEgMCAxKSkKICAgICAgICAgICAoYWx3YXlz ICg8IGkgMSkpKQoKICAgIDs7IE5PVEU6IEhlcmUsIHRoZSBpbXBsaWNpdCByZXR1cm4gdmFsdWUg aXMgYHQnIGJlY2F1c2UgYW4KICAgIDs7ICAgICAgIGBhbHdheXMnIGNvbW1hbmQgd2FzIHVzZWQs IGFuZCB0aGF0IHJldHVybiB2YWx1ZQogICAgOzsgICAgICAgaXMgbmV2ZXIgdXBkYXRlZCB0byAi aGVsbG8iIGJlY2F1c2UgdGhlIGBhbHdheXMnCiAgICA7OyAgICAgICBjb21tYW5kIGlzIG5ldmVy IGFjdHVhbGx5IHJ1bi4KICAgIDs7CiAgICA7OyA9PiB0CiAgICAobG9vcHkgKGxpc3QgaSAnKDEg MSAxIDEpKQogICAgICAgICAgICh3aGVuIG5pbAogICAgICAgICAgICAgKGFsd2F5cyAoYW5kICg+ IGkgNSkgImhlbGxvIikpKSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiBuZXZlcgotID0obmV2ZXIg RVhQUiAma2V5IGludG8pPSA6OiBDaGVjayB0aGUgY29uZGl0aW9uID1FWFBSPS4gIElmIHRoZSBj b25kaXRpb24gaXMKICBldmVyIG5vbi1uaWwsIHRoZW4gdGhlIGxvb3AgaXMgZXhpdGVkIGFuZCBy ZXR1cm5zIH5uaWx+LiAgT3RoZXJ3aXNlIHRoZSBsb29wCiAgcmV0dXJucyB+dH4uCgogIFRoZSBz dGVwcyBhcmUgdGh1czoKICAxLiBUaGUgdmFyaWFibGUgKGJ5IGRlZmF1bHQsIH5sb29weS1yZXN1 bHR+KSBpcyBpbml0aWFsaXplZCB0byB+dH4gYW5kIHVzZWQgYXMKICAgICB0aGUgbG9vcCdzIGlt cGxpY2l0IHJldHVybiB2YWx1ZS4KICAyLiBUaGUgdmFsdWUgb2YgdGhlIGNvbmRpdGlvbiBpcyBj aGVja2VkLgogIDMuIElmIHRoZSBjb25kaXRpb24gaXMgbm9uLW5pbCwgdGhlbiB0aGUgdmFyaWFi bGUgaXMgc2V0IHRvIH5uaWx+CiAgICAgYW5kIHRoZSBsb29wIGlzIGV4aXRlZC4KCgogICMrYXR0 cl90ZXhpbmZvOiA6dGFnIE5vdGUKICAjK2JlZ2luX3F1b3RlCiAgVW5saWtlIHRoZSA9YWx3YXlz PSBjb21tYW5kLCA9bmV2ZXI9IGRvZXMgbm90IHN0b3JlIGFueSBpbmZvcm1hdGlvbiBpbiB0aGUK ICB2YXJpYWJsZSB1bnRpbCBpdCBlbmRzIHRoZSBsb29wLiAgVGhlcmVmb3JlLCA9bmV2ZXI9IGRv ZXMgbm90IGFmZmVjdCB0aGUKICBsb29wJ3MgaW1wbGljaXQgcmV0dXJuIHZhbHVlIHdoZW4gdXNp bmcgdGhlID1hbHdheXM9IGNvbW1hbmQgc28gbG9uZyBhcyB0aGUKICBjb25kaXRpb25zIG9mID1u ZXZlcj0gYXJlIGFsd2F5cyB+bmlsfi4KCiAgQmUgYXdhcmUsIHRob3VnaCwgdGhhdCB0aGlzIGJl aGF2aW9yIGRlcGVuZHMgb24gPWFsd2F5cz0gYW5kID1uZXZlcj0gdXNpbmcKICB0aGUgc2FtZSB2 YXJpYWJsZS4KICAjK2VuZF9xdW90ZQoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7OyA9 PiB0CiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMCAxIDAgMSkpCiAgICAgICAgICAgKG5ldmVyICg9 IGkgMykpKQoKICAgIDs7ID0+IG5pbAogICAgKGxvb3B5IChsaXN0IGkgJygxIDAgMSAwIDEpKQog ICAgICAgICAgIChuZXZlciAoPSBpIDApKSkKCiAgICA7OyBUaGlzIGV4YW1wbGUgdGFrZW4gZnJv bSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBDTCdzIEl0ZXJhdGUgcGFja2FnZS4KICAgIDs7CiAgICA7 OyA9PiAyLCBub3QgdAogICAgKGxvb3B5IChjeWNsZSAyKQogICAgICAgICAgIChhbHdheXMgMikK ICAgICAgICAgICAobmV2ZXIgbmlsKSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiB0aGVyZWlzCi0g PSh0aGVyZWlzIEVYUFIgJmtleSBpbnRvKT0gOjogQ2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgY29u ZGl0aW9uID1FWFBSPS4gIElmCiAgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gYSBub24tfm5p bH4gdmFsdWUsIHRoZSBsb29wIHJldHVybnMgdGhhdCB2YWx1ZS4KICBPdGhlcndpc2UsIHRoZSBs b29wIHJldHVybnMgbmlsLgoKICBUaGUgc3RlcHMgYXJlIHRodXM6CiAgMS4gVGhlIHZhcmlhYmxl IChieSBkZWZhdWx0LCB+bG9vcHktcmVzdWx0fikgaXMgaW5pdGlhbGl6ZWQgdG8gfm5pbH4gYW5k IHVzZWQKICAgICBhcyB0aGUgaW1wbGljaXQgcmV0dXJuIHZhbHVlIG9mIHRoZSBsb29wLgogIDIu IFRoZSB2YWx1ZSBvZiB0aGUgY29uZGl0aW9uIGlzIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUuCiAg My4gSWYgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBpcyBub24tbmlsLCB0aGUgbG9vcCBleGl0 cy4KCgogICMrQkVHSU5fU1JDIGVtYWNzLWxpc3AKICAgIDs7ID0+IDMKICAgIChsb29weSAobGlz dCBpICcoMSAwIDEgMyAxKSkKICAgICAgICAgICA7OyBOb3RlOiBgYW5kJyByZXR1cm5zIHRoZSBs YXN0IHZhbHVlIGl0IGV2YWx1YXRlcy4KICAgICAgICAgICAodGhlcmVpcyAoYW5kICg+IGkgMikg aSkpKQoKICAgIDs7ID0+IG5pbAogICAgKGxvb3B5IChsaXN0IGkgJygxIDAgMSAwIDEpKQogICAg ICAgICAgICh0aGVyZWlzIChhbmQgKD4gaSAyKSBpKSkpCgogICAgOzsgPT4gNwogICAgKGxvb3B5 IChsaXN0IGkgJyhuaWwgbmlsIDMgbmlsKSkKICAgICAgICAgICAodGhlcmVpcyBpKQogICAgICAg ICAgIChmaW5hbGx5LXJldHVybiAoKyBsb29weS1yZXN1bHQgNCkpKQogICMrRU5EX1NSQwoKCioq IENvbnRyb2wgRmxvdwo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogY29udHJvbC1mbG93CjpERVND UklQVElPTjogV2hlbiB0byBydW4gbG9vcCBjb21tYW5kcy4KOkVORDoKCioqKiBDb25kaXRpb25h bHMKOlBST1BFUlRJRVM6CjpDVVNUT01fSUQ6IGNvbmRpdGlvbmFscwo6REVTQ1JJUFRJT046IENo b29zaW5nIGlmIGNvbW1hbmRzIHNob3VsZCBydW4uCjpFTkQ6CgpDb25kaXRpb25hbCBjb21tYW5k cyBpbiB+bG9vcHl+IGNhbiB0YWtlIG11bHRpcGxlIHN1Yi1jb21tYW5kcywgYW5kIHdvcmsgbGlr ZQp0aGVpciBMaXNwIGNvdW50ZXJwYXJ0cy4gIFRoZXJlIGlzIHRoZXJlZm9yZSBubyBuZWVkIGZv ciBhbiA9YW5kPSBjb21tYW5kIGFzCnVzZWQgaW4gfmNsLWxvb3B+LgoKIytmaW5kZXg6IGNvbmQK LSA9KGNvbmQgWyhFWFBSIENNRFMpIFsuLi5dXSk9IDo6IFJ1biB0aGUgY29tbWFuZHMgPUNNRFM9 IGZvbGxvd2luZyB0aGUgZmlyc3QKICBub24tbmlsIGNvbmRpdGlvbiA9RVhQUj0uICBUaGlzIGlz IHRoZSB+bG9vcHl+IHZlcnNpb24gb2YgdGhlIH5jb25kfiBzcGVjaWFsCiAgZm9ybSBmcm9tIG5v cm1hbCBFbWFjcyBMaXNwLgoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7OyA9PiAnKCgy IDQgNikgKDEgMyA1KSAoImNhdCIgImRvZyIpKQogICAgKGxvb3B5IChsaXN0IGkgJygxIDIgMyAi Y2F0IiA0IDUgNiAiZG9nIikpCiAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgKChub3QgKG51 bWJlcnAgaSkpIChjb2xsZWN0IG5vdC1udW1iZXJzIGkpKQogICAgICAgICAgICAoKGNsLWV2ZW5w IGkpICAgICAgKGNvbGxlY3QgZXZlbnMgaSkpCiAgICAgICAgICAgICh0ICAgICAgICAgICAgICAg ICAoY29sbGVjdCBvZGRzIGkpKSkKICAgICAgICAgICAoZmluYWxseS1yZXR1cm4gZXZlbnMgb2Rk cyBub3QtbnVtYmVycykpCiAgIytFTkRfU1JDCgojK2ZpbmRleDogaWYKLSA9KGlmIEVYUFIgQ01E Uyk9IDo6IFJ1biB0aGUgZmlyc3QgY29tbWFuZCBpZiA9RVhQUj0gaXMgbm9uLW5pbC4gIE90aGVy d2lzZSwKICBydW4gdGhlIHJlbWFpbmluZyBjb21tYW5kcy4gIFRoaXMgaXMgdGhlIH5sb29weX4g dmVyc2lvbiBvZiB0aGUgfmlmfiBzcGVjaWFsCiAgZm9ybSBmcm9tIG5vcm1hbCBFbWFjcyBMaXNw LgoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7OyA9PiAnKCgxIDMgNSA3KSAoMiA0IDYp ICgzIDMgMykpCiAgICAobG9vcHkgKHNlcXVlbmNlIGkgWzEgMiAzIDQgNSA2IDddKQogICAgICAg ICAgIChpZiAoY2wtb2RkcCBpKQogICAgICAgICAgICAgICAoY29sbGVjdCBvZGRzIGkpCiAgICAg ICAgICAgICAoY29sbGVjdCBldmVucyBpKQogICAgICAgICAgICAgKGNvbGxlY3Qgc29tZS10aHJl ZXMgMykpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJuIG9kZHMgZXZlbnMgc29tZS10aHJlZXMp KQogICMrRU5EX1NSQwoKIytmaW5kZXg6IHdoZW4KLSA9KHdoZW4gRVhQUiBDTURTKT0gOjogUnVu ID1DTURTPSBvbmx5IGlmID1FWFBSPSBpcyBub24tbmlsLiAgVGhpcyBpcyB0aGUKICB+bG9vcHl+ IHZlcnNpb24gb2YgdGhlIH53aGVufiBtYWNybyBmcm9tIG5vcm1hbCBFbWFjcyBMaXNwLgoKICAj K0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7OyBHZXQgb25seSB0aGUgaW5uZXIgbGlzdHMgd2l0 aCBhbGwgZXZlbiBudW1iZXJzOgogICAgOzsKICAgIDs7ID0+ICcoKDIgNCA2KSAoOCAxMCAxMikg KDE2IDE4IDIwKSkKICAgIChsb29weSAobGlzdCBpICcoKDIgNCA2KSAoOCAxMCAxMikgKDEzIDE0 IDE1KSAoMTYgMTggMjApKSkKICAgICAgICAgICAod2hlbiAobG9vcHkgKGxpc3QgaiBpKQogICAg ICAgICAgICAgICAgICAgICAgICAoYWx3YXlzIChjbC1ldmVucCBqKSkpCiAgICAgICAgICAgICAo Y29sbGVjdCBvbmx5LWV2ZW5zIGkpKQogICAgICAgICAgIChmaW5hbGx5LXJldHVybiBvbmx5LWV2 ZW5zKSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiB1bmxlc3MKLSA9KHVubGVzcyBFWFBSIENNRFMp PSA6OiBSdW4gPUNNRFM9IG9ubHkgaWYgPUVYUFI9IGlzIG5pbC4gIFRoaXMgaXMgdGhlIH5sb29w eX4KICB2ZXJzaW9uIG9mIHRoZSB+dW5sZXNzfiBtYWNybyBmcm9tIG5vcm1hbCBFbWFjcyBMaXNw LgoKICAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgICA7OyBHZXQgb25seSB0aGUgaW5uZXIgbGlz dHMgd2l0aCBhbGwgZXZlbiBudW1iZXJzOgogICAgOzsKICAgIDs7ID0+ICcoKDIgNCA2KSAoOCAx MCAxMikgKDE2IDE4IDIwKSkKICAgIChsb29weSAobGlzdCBpICcoKDIgNCA2KSAoOCAxMCAxMikg KDEzIDE0IDE1KSAoMTYgMTggMjApKSkKICAgICAgICAgICAodW5sZXNzIChsb29weSAobGlzdCBq IGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZXJlaXMgKGNsLW9kZHAgaikpKQogICAg ICAgICAgICAgKGNvbGxlY3Qgb25seS1ldmVucyBpKSkKICAgICAgICAgICAoZmluYWxseS1yZXR1 cm4gb25seS1ldmVucykpCiAgIytFTkRfU1JDCgoqKiogU2tpcHBpbmcgQ3ljbGVzCjpQUk9QRVJU SUVTOgo6Q1VTVE9NX0lEOiBza2lwcGluZy1hbi1pdGVyYXRpb24KOkRFU0NSSVBUSU9OOiBJbW1l ZGlhdGVseSBiZWdpbm5pbmcgdGhlIG5leHQgaXRlcmF0aW9uLgo6RU5EOgoKIytmaW5kZXg6IHNr aXAKIytmaW5kZXg6IGNvbnRpbnVlCiMrZmluZGV4OiBza2lwcGluZwojK2ZpbmRleDogY29udGlu dWluZwotID0oc2tpcHxjb250aW51ZSk9IDo6IFNraXAgdGhlIHJlbWFpbmluZyBjb21tYW5kcyBh bmQgY29udGludWUgdG8gdGhlIG5leHQgbG9vcAogIGl0ZXJhdGlvbi4KCiAgVGhpcyBjb21tYW5k IGFsc28gaGFzIHRoZSBhbGlhc2VzID1za2lwcGluZz0gYW5kID1jb250aW51aW5nPS4KCiAgIytC RUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDIgNCA2IDggMTAgMTIgMTQgMTYgMTggMjAp CiAgICAobG9vcHkgKHNlcXVlbmNlIGkgKG51bWJlci1zZXF1ZW5jZSAxIDIwKSkKICAgICAgICAg ICAod2hlbiAoY2wtb2RkcCBpKSAoc2tpcCkpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCiAgIytF TkRfU1JDCgojK2ZpbmRleDogc2tpcC1mcm9tCiMrZmluZGV4OiBjb250aW51ZS1mcm9tCiMrZmlu ZGV4OiBza2lwcGluZy1mcm9tCiMrZmluZGV4OiBjb250aW51aW5nLWZyb20KLSA9KHNraXAtZnJv bXxjb250aW51ZS1mcm9tIE5BTUUpPSA6OiBTa2lwIHRoZSByZW1haW5pbmcgY29tbWFuZHMgYW5k IGNvbnRpbnVlCiAgdG8gdGhlIG5leHQgbG9vcCBpdGVyYXRpb24gb2YgdGhlIGxvb3AgPU5BTUU9 LgoKICBUaGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFzZXMgPXNraXBwaW5nLWZyb209IGFu ZCA9Y29udGludWluZy1mcm9tPS4KCiAgIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4g KCgxIDIgMykgKDcgOCA5KSkKICAgIChsb29weSBvdXRlcgogICAgICAgICAgIChhcnJheSBpIFso MSAyIDMpICg0IDUgNikgKDcgOCA5KV0pCiAgICAgICAgICAgKGxvb3B5IChsaXN0IGogaSkKICAg ICAgICAgICAgICAgICAgKHdoZW4gKD0gNSBqKQogICAgICAgICAgICAgICAgICAgIChza2lwLWZy b20gb3V0ZXIpKSkKICAgICAgICAgICAoY29sbGVjdCBpKSkKICAjK0VORF9TUkMKCgoqKiogRWFy bHkgRXhpdAo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogZXhpdGluZy10aGUtbG9vcC1lYXJseQo6 REVTQ1JJUFRJT046IExlYXZpbmcgdGhlIGxvb3AgZWFybHksIHdpdGggb3Igd2l0aG91dCByZXR1 cm5pbmcgdmFsdWVzLgo6RU5EOgoKVGhlIGxvb3AgaXMgY29udGFpbmVkIGluIGEgfmNsLWJsb2Nr fiwgd2hpY2ggY2FuIGJlIGV4aXRlZCBieSB0aGUgZnVuY3Rpb24KfmNsLXJldHVybi1mcm9tfi4g IEluZGVlZCwgdGhlID1yZXR1cm49IGFuZCA9cmV0dXJuLWZyb209IGNvbW1hbmRzIGRlc2NyaWJl ZApiZWxvdyBhcmUganVzdCB3cmFwcGVycyBhcm91bmQgdGhhdCBmdW5jdGlvbi4KCkFzIHdpdGgg dGhlID1maW5hbGx5LXJldHVybj0gc3BlY2lhbCBtYWNybyBhcmd1bWVudCwgcGFzc2luZyBtdWx0 aXBsZSByZXR1cm4KdmFsdWVzIHRvIHRob3NlIGNvbW1hbmRzIHdpbGwgcmV0dXJuIGEgbGlzdCBv ZiB0aG9zZSB2YWx1ZXMuICBJZiBubyB2YWx1ZSBpcwpnaXZlbiwgfm5pbH4gaXMgcmV0dXJuZWQu CgpJbiBMb29weSwgaW1wbGllZCBhY2N1bXVsYXRpb24gdmFyaWFibGVzIGNhbiBiZSBtb2RpZmll ZCBhIGZpbmFsIHRpbWUgYWZ0ZXIgdGhlCmxvb3AgZXhpdHMgaW4gb3JkZXIgdG8gZmluYWxpemUg dGhlaXIgdmFsdWVzLiAgRm9yIGV4YW1wbGUsIGlmIGFuIGFjY3VtdWxhdGVkCmxpc3QgaXMgYnVp bHQgaW4gcmV2ZXJzZSwgdGhlbiBpdCB3aWxsIGJlIHJldmVyc2VkIGludG8gdGhlIGNvcnJlY3Qg b3JkZXIgYWZ0ZXIKdGhlIGxvb3AgY29tcGxldGVzLiAgTG9vcHkgaGFzICJyZXR1cm4iIGNvbW1h bmRzIGZvciAoMSkgaW1tZWRpYXRlbHkgcmV0dXJuaW5nIGEKdmFsdWUgZnJvbSB0aGUgbG9vcCB3 aXRob3V0IGZpbmFsaXppbmcgdmFsdWVzIGFuZCAibGVhdmUiIGNvbW1hbmRzIGZvciAoMikKbGVh dmluZyB0aGUgbG9vcCB3aXRob3V0IGZvcmNpbmcgYSByZXR1cm4gdmFsdWUsIGFsbG93aW5nIHZh bHVlcyB0byBiZQpmaW5hbGl6ZWQuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgQW4gZXhh bXBsZSBvZiBub3QgZmluYWxpemluZyB0aGUgYWNjdW11bGF0ZWQgdmFsdWU6CiAgOzsKICA7OyA9 PiAoNCAzIDIgMSAwKQogIChsb29weSAobnVtYmVycyBpIDp0byAxMCkKICAgICAgICAgKGlmICg8 IGkgNSkKICAgICAgICAgICAgIChjb2xsZWN0IGkpCiAgICAgICAgICAgOzsgTm90IGZpbmFsaXpl ZDoKICAgICAgICAgICAocmV0dXJuIGxvb3B5LXJlc3VsdCkpKQoKICA7OyBBbiBleGFtcGxlIG9m IGZpbmFsaXppbmcgdGhlIGFjY3VtdWxhdGVkIHZhbHVlOgogIDs7CiAgOzsgPT4gKDAgMSAyIDMg NCkKICAobG9vcHkgKG51bWJlcnMgaSA6dG8gMTApCiAgICAgICAgIChpZiAoPCBpIDUpCiAgICAg ICAgICAgICAoY29sbGVjdCBpKQogICAgICAgICAgIChsZWF2ZSkpCiAgICAgICAgIChmaW5hbGx5 LXJldHVybiBsb29weS1yZXN1bHQpKQojK2VuZF9zcmMKCkFzIG5vdGVkIGluIFtbI21hY3JvLWFy Z3VtZW50c11dLCB0aGUgc3BlY2lhbCBtYWNybyBhcmd1bWVudCA9ZmluYWxseS1kbz0gZG9lcyBu b3QKYWZmZWN0IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxvb3AuCgojK2JlZ2luX3NyYyBlbWFj cy1saXNwCiAgOzsgPT4gKDAgMSAyIDMgNCkKICAobG9vcHkgKG51bWJlcnMgaSA6dG8gMTApCiAg ICAgICAgIChpZiAoPCBpIDUpCiAgICAgICAgICAgICAoY29sbGVjdCBpKQogICAgICAgICAgIChs ZWF2ZSkpCiAgICAgICAgIChmaW5hbGx5LWRvIDcpKQoKICA7OyA9PiAoNCAzIDIgMSAwKQogIChs b29weSAobnVtYmVycyBpIDp0byAxMCkKICAgICAgICAgKGlmICg8IGkgNSkKICAgICAgICAgICAg IChjb2xsZWN0IGkpCiAgICAgICAgICAgOzsgTm90IGZpbmFsaXplZDoKICAgICAgICAgICAocmV0 dXJuIGxvb3B5LXJlc3VsdCkpCiAgICAgICAgIChmaW5hbGx5LWRvCiAgICAgICAgICAoY2wtY2Fs bGYyIGNvbnMgMjIgbG9vcHktcmVzdWx0KSkpCiMrZW5kX3NyYwoKQXMgbm90ZWQgaW4gW1sjbWFj cm8tYXJndW1lbnRzXV0sIHRoZSBzcGVjaWFsIG1hY3JvIGFyZ3VtZW50ID1maW5hbGx5LXJldHVy bj0Kb3ZlcnJpZGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxvb3AsIGluY2x1ZGluZyB2YWx1 ZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4KcmV0dXJuZWQgYnkgYW55ID1yZXR1cm49IGNvbW1hbmRz LgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogIDs7ID0+IDIyCiAgKGxvb3B5IChudW1iZXJzIGkg OnRvIDEwKQogICAgICAgICAoaWYgKDwgaSA1KQogICAgICAgICAgICAgKGNvbGxlY3QgaSkKICAg ICAgICAgICA7OyBOb3QgZmluYWxpemVkOgogICAgICAgICAgIChyZXR1cm4gbG9vcHktcmVzdWx0 KSkKICAgICAgICAgKGZpbmFsbHktcmV0dXJuIDIyKSkKCiAgOzsgPT4gMjIKICAobG9vcHkgKG51 bWJlcnMgaSA6dG8gMTApCiAgICAgICAgIChpZiAoPCBpIDUpCiAgICAgICAgICAgICAoY29sbGVj dCBpKQogICAgICAgICAgIChsZWF2ZSkpCiAgICAgICAgIChmaW5hbGx5LXJldHVybiAyMikpCiMr ZW5kX3NyYwoKCiMrZmluZGV4OiBsZWF2ZQojK2ZpbmRleDogbGVhdmluZwotID0obGVhdmUpPSA6 OiBMZWF2ZSB0aGUgY3VycmVudCBsb29wIHdpdGhvdXQgZm9yY2luZyBhIHJldHVybiB2YWx1ZS4K CiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlhcyA9bGVhdmluZz0uCgogICMrYmVnaW5f c3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICgxIDIgMyA0KQogICAgKGxvb3B5IChsaXN0IGkgJygx IDIgMyA0IDUgNiA3KSkKICAgICAgICAgICAoaWYgKD0gaSA1KQogICAgICAgICAgICAgICAobGVh dmUpCiAgICAgICAgICAgICAoY29sbGVjdCBpKSkpCiAgIytlbmRfc3JjCgojK2ZpbmRleDogbGVh dmUtZnJvbQojK2ZpbmRleDogbGVhdmluZy1mcm9tCi0gPShsZWF2ZS1mcm9tfGxlYXZpbmctZnJv bSBOQU1FKT0gOjogTGVhdmUgdGhlIGxvb3AgPU5BTUU9IHdpdGhvdXQgZm9yY2luZyBhCiAgcmV0 dXJuIHZhbHVlLiAgVGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gPShhdCBOQU1FIChsZWF2 ZSkpPSAoW1sjc3ViLWxvb3BzXV0pLgoKICBUaGlzIGNvbW1hbmQgYWxzbyBoYXMgdGhlIGFsaWFz ID1sZWF2aW5nLWZyb209LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyA9PiAoWzIg NF0gWzYgOF0pCiAgICAobG9vcHkgb3V0ZXIKICAgICAgICAgICAobGlzdCBpICcoWzIgNF0gWzYg OF0gWzcgMTBdKSkKICAgICAgICAgICAobG9vcHkgKGFycmF5IGogaSkKICAgICAgICAgICAgICAg ICAgKHdoZW4gKGNsLW9kZHAgaikKICAgICAgICAgICAgICAgICAgICA7OyBFcXVpdmFsZW50IHRv IGAoYXQgb3V0ZXIgKGxlYXZlKSknCiAgICAgICAgICAgICAgICAgICAgKGxlYXZlLWZyb20gb3V0 ZXIpKSkKICAgICAgICAgICAoY29sbGVjdCBpKSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiByZXR1 cm4KIytmaW5kZXg6IHJldHVybmluZwotID0ocmV0dXJuIFtFWFBSU10pPSA6OiBSZXR1cm4gZnJv bSB0aGUgY3VycmVudCBsb29wIHdpdGhvdXQgZmluYWxpemluZyB2YWx1ZXMsCiAgcmV0dXJuaW5n ID1bRVhQUlNdPS4KCiAgVGhpcyBjb21tYW5kIGFsc28gaGFzIHRoZSBhbGlhcyA9cmV0dXJuaW5n PS4KCiAgIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gNgogICAgKGxvb3B5ICh3aXRo ICAoaiAwKSkKICAgICAgICAgICAoZG8gKGNsLWluY2YgaikpCiAgICAgICAgICAgKHdoZW4gKD4g aiA1KQogICAgICAgICAgICAgKHJldHVybiBqKSkpCiAgIytFTkRfU1JDCgojK2ZpbmRleDogcmV0 dXJuLWZyb20KIytmaW5kZXg6IHJldHVybmluZy1mcm9tCi0gPShyZXR1cm4tZnJvbSBOQU1FIFtF WFBSU10pPSA6OiBSZXR1cm4gZnJvbSB0aGUgbG9vcCA9TkFNRT0sIHJldHVybmluZwogID1bRVhQ UlNdPS4gIFRoaXMgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvID0oYXQgTkFNRSAocmV0dXJuKSk9 IChbWyNzdWItbG9vcHNdXSkuCgogIFRoaXMgY29tbWFuZCBhbHNvIGhhcyB0aGUgYWxpYXMgPXJl dHVybmluZy1mcm9tPS4KCiAgIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogICAgOzsgPT4gJ2JhZC12 YWw/CiAgICAobG9vcHkgKG5hbWVkIG91dGVyLWxvb3ApCiAgICAgICAgICAgKGxpc3QgaW5uZXIt bGlzdCAnKCgxIDIgMykgKDEgYmFkLXZhbD8gMSkgKDQgNSA2KSkpCiAgICAgICAgICAgKGxvb3B5 IChsaXN0IGkgaW5uZXItbGlzdCkKICAgICAgICAgICAgICAgICAgKHdoZW4gKGVxIGkgJ2JhZC12 YWw/KQogICAgICAgICAgICAgICAgICAgIChyZXR1cm4tZnJvbSBvdXRlci1sb29wICdiYWQtdmFs PykpKSkKICAjK0VORF9TUkMKCiMrZmluZGV4OiB3aGlsZQotID0od2hpbGUgQ09ORCk9IDo6IExl YXZlIHRoZSBsb29wIG9uY2UgPUNPTkQ9IGlzIGZhbHNlLCB3aXRob3V0IGZvcmNpbmcgYQogIHJl dHVybiB2YWx1ZS4gID0od2hpbGUgQ09ORCk9IGlzIHRoZSBzYW1lIGFzID0odW50aWwgKG5vdCBD T05EKSk9LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyA9PiAoMSAyIDMgNCkKICAg IChsb29weSAobGlzdCBpICcoMSAyIDMgNCA1IDYgNykpCiAgICAgICAgICAgKHdoaWxlICgvPSBp IDUpKQogICAgICAgICAgIChjb2xsZWN0IGkpKQoKICAgIDs7IFNhbWUgYXMgdGhlIGFib3ZlOgog ICAgOzsKICAgIDs7ID0+ICgxIDIgMyA0KQogICAgKGxvb3B5IChsaXN0IGkgJygxIDIgMyA0IDUg NiA3KSkKICAgICAgICAgICAodW5sZXNzICgvPSBpIDUpIChsZWF2ZSkpCiAgICAgICAgICAgKGNv bGxlY3QgaSkpCiAgIytlbmRfc3JjCgojK2ZpbmRleDogdW50aWwKLSA9KHVudGlsIENPTkQpPSA6 OiBMZWF2ZSB0aGUgbG9vcCBvbmNlID1DT05EPSBpcyB0cnVlLCB3aXRob3V0IGZvcmNpbmcgYSBy ZXR1cm4KICB2YWx1ZS4gID0odW50aWwgQ09ORCk9IGlzIHRoZSBzYW1lIGFzID0od2hpbGUgKG5v dCBDT05EKSk9LgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyA9PiAoMSAyIDMgNCkK ICAgIChsb29weSAobGlzdCBpICcoMSAyIDMgNCA1IDYgNykpCiAgICAgICAgICAgKHVudGlsICg9 IGkgNSkpCiAgICAgICAgICAgKGNvbGxlY3QgaSkpCgogICAgOzsgU2FtZSBhcyB0aGUgYWJvdmU6 CiAgICA7OwogICAgOzsgPT4gKDEgMiAzIDQpCiAgICAobG9vcHkgKGxpc3QgaSAnKDEgMiAzIDQg NSA2IDcpKQogICAgICAgICAgICh3aGVuICg9IGkgNSkgKGxlYXZlKSkKICAgICAgICAgICAoY29s bGVjdCBpKSkKICAjK2VuZF9zcmMKCioqIFN1Yi1Mb29wcwo6UFJPUEVSVElFUzoKOkRFU0NSSVBU SU9OOiBSdW5uaW5nIGEgbG9vcCB3aXRoaW4gYSBsb29wLgo6Q1VTVE9NX0lEOiBzdWItbG9vcHMK OkVORDoKCkxvb3B5IHByb3ZpZGVzIHR3byBzZXRzIG9mIGNvbW1hbmRzIGZvciB3b3JraW5nIHdp dGggc3ViLWxvb3BzOgoxLiBUaGUgPWxvb3B5PSBhbmQgPWxvb3B5LWl0ZXI9IGNvbW1hbmRzLCB3 aGljaCBjb3JyZWN0bHkgZXhwYW5kIGlubmVyIGxvb3BzCiAgIGR1cmluZyB0aGUgZXhwYW5zaW9u IG9mIG91dGVyIGxvb3BzLgoyLiBUaGUgPWF0PSBjb21tYW5kLCB3aGljaCBjb250cm9scyB0aGUg bmFtZWQgb3V0ZXIgbG9vcCB0aGF0IGNvbW1hbmRzIGludGVyYWN0CiAgIHdpdGguICBGb3IgZXhh bXBsZSwgaXQgY2FuIGNvbnRyb2wgdG8gd2hpY2ggbG9vcCBhbiBpbXBsaWVkIGFjY3VtdWxhdGlv bgogICB2YXJpYWJsZSBpcyBzY29wZWQgYW5kIHNvIGZvciB3aGljaCBsb29wIHRoYXQgdmFyaWFi bGUgaXMgdXNlZCBhcyBhbiBpbXBsaWVkCiAgIHJldHVybiB2YWx1ZS4KCkluIHRoZSBleGFtcGxl IGJlbG93LCB0aGUgYXJndW1lbnRzIG9mIHRoZSA9ZG89IGNvbW1hbmQgYXJlIGluc2VydGVkIGlu dG8gdGhlCmxvb3AgYm9keSBsaXRlcmFsbHksIHNvIGJ5IHRoZSB0aW1lIHRoZSBpbm5lciBsb29w IGV4cGFuZHMsIHRoZSBvdXRlciBsb29wIGhhcwphbHJlYWR5IGJlZW4gZXhwYW5kZWQgaW50byBu b3JtYWwgRW1hY3MgTGlzcCBjb2RlLCBhbmQgc28gdGhlIGlubmVyIG1hY3JvIGNhbm5vdApmaW5k IGFueSBvdXRlciBMb29weSBsb29wIG5hbWVkICJvdXRlciIuCgojK2JlZ2luX3NyYyBlbWFjcy1s aXNwCiAgOzsgQ2FuIHNpZ25hbCBhbiBlcnJvciBvciBub3Qgd29yayBhcyBleHBlY3RlZDoKICAo bG9vcHkgKG5hbWVkIG91dGVyKQogICAgICAgICAobGlzdCBpICcoKDEgMikgKDMgNCkgKDUgNikp KQogICAgICAgICAoZG8gKGxvb3B5IChsaXN0IGogaSkKICAgICAgICAgICAgICAgICAgICAod2hl biAoPSBqIDUpCiAgICAgICAgICAgICAgICAgICAgICAobGVhdmUtZnJvbSBvdXRlcikpKSkKICAg ICAgICAgKGNvbGxlY3QgaSkpCiMrZW5kX3NyYwoKSW4gZ2VuZXJhbCwgY29ycmVjdCBjb2RlIHJl cXVpcmVzIHRoYXQgaW5uZXIgbG9vcHMgYmUgZXhwYW5kZWQgZHVyaW5nIHRoZQpleHBhbnNpb24g b2YgdGhlIG91dGVyIGxvb3AsIGFzIGRvbmUgd2l0aCBvdGhlciBjb21tYW5kcy4KCiMrYmVnaW5f c3JjIGVtYWNzLWxpc3AKICA7OyBXb3JrcyBhcyBleHBlY3RlZDoKICA7OwogIDs7ID0+ICgoMSAy KSAoMyA0KSkKICAobG9vcHkgb3V0ZXIKICAgICAgICAgKGxpc3QgaSAnKCgxIDIpICgzIDQpICg1 IDYpKSkKICAgICAgICAgKGxvb3B5IChsaXN0IGogaSkKICAgICAgICAgICAgICAgICh3aGVuICg9 IGogNSkKICAgICAgICAgICAgICAgICAgKGxlYXZlLWZyb20gb3V0ZXIpKSkKICAgICAgICAgKGNv bGxlY3QgaSkpCiMrZW5kX3NyYwoKIythdHRyX3RleGluZm86IDp0YWcgV2FybmluZwojK2JlZ2lu X3F1b3RlCkRvbid0IGNvbmZ1c2UgdXNpbmcgdGhlc2Ugc3ViLWxvb3AgY29tbWFuZHMgd2l0aCB1 c2luZyBjYWxscyB0byB0aGUgbWFjcm9zCn5sb29weX4gYW5kIH5sb29weS1pdGVyfi4gIEZvciBl eGFtcGxlLCB0aGUgPUVYUFI9IHBhcmFtZXRlciB0byBsb29wIGNvbW1hbmRzIGlzCnVzZWQgbGl0 ZXJhbGx5LCBhbmQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byBhZmZlY3QgbWFjcm8g ZXhwYW5zaW9uLgojK2VuZF9xdW90ZQoKVGhlIGNvbW1hbmRzIGFyZSBkZXNjcmliZWQgaW4gbW9y ZSBkZXRhaWwgYmVsb3cuCgojK2ZpbmRleDogbG9vcHkgY29tbWFuZAotID0obG9vcHkgW1NQRUNJ QUwtTUFDUk8tQVJHVU1FTlRTIG9yIENNRFNdKT0gOjogVXNlIHRoZSB+bG9vcHl+IG1hY3JvIGFz IGEKICBjb21tYW5kLgoKICAjK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgICA7OyA9PiAoMSAxMSAy IDEyIDMgMTMgNCAxNCkKICAgIChsb29weSBvdXRlcgogICAgICAgICAgIChsaXN0IGkgJyhbMSAy XSBbMyA0XSAnYmFkIFs1IDZdIFs3IDhdKSkKICAgICAgICAgICAobG9vcHkgKHVubGVzcyAoYXJy YXlwIGkpCiAgICAgICAgICAgICAgICAgICAgKGxlYXZlLWZyb20gb3V0ZXIpKQogICAgICAgICAg ICAgICAgICAoYXJyYXkgaiBpKQogICAgICAgICAgICAgICAgICAoYXQgb3V0ZXIKICAgICAgICAg ICAgICAgICAgICAgIChjb2xsZWN0IGopCiAgICAgICAgICAgICAgICAgICAgICAoY29sbGVjdCAo KyBqIDEwKSkpKSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBsb29weS1pdGVyIGNvbW1hbmQKLSA9 KGxvb3B5LWl0ZXIgW1NQRUNJQUwtTUFDUk8tQVJHVU1FTlRTIG9yIENNRFMgb3IgTElTUC1FWFBS U10pPSA6OiBVc2UgdGhlCiAgfmxvb3B5LWl0ZXJ+IG1hY3JvIGFzIGEgY29tbWFuZCAoW1sjbG9v cHktaXRlcl1dKS4KCiAgVGhpcyBmZWF0dXJlIGNhbiBvbmx5IGJlIHVzZWQgYWZ0ZXIgZmlyc3Qg bG9hZGluZyB0aGUgbGlicmFyeSA9bG9vcHktaXRlcj0uCgogICMrYmVnaW5fc3JjIGVsaXNwCiAg ICAocmVxdWlyZSAnbG9vcHktaXRlcikKCiAgICA7OyA9PiAoMSAxMSAyIDEyIDMgMTMgNCAxNCkK ICAgIChsb29weSBvdXRlcgogICAgICAgICAgIChsaXN0IGkgJyhbMSAyXSBbMyA0XSAnYmFkIFs1 IDZdIFs3IDhdKSkKICAgICAgICAgICAobG9vcHktaXRlciAodW5sZXNzIChhcnJheXAgaSkKICAg ICAgICAgICAgICAgICAgICAgICAgIChsZWF2aW5nLWZyb20gb3V0ZXIpKQogICAgICAgICAgICAg ICAgICAgICAgIChhcnJheWluZyBqIGkpCiAgICAgICAgICAgICAgICAgICAgICAgKGNsLWZsZXQg KCgxMCsgKHgpICgrIHggMTApKSkKICAgICAgICAgICAgICAgICAgICAgICAgIChhdCBvdXRlcgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2xsZWN0aW5nIGopCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbGxlY3RpbmcgKDEwKyBqKSkpKSkpCiAgIytlbmRfc3JjCgojK2Zp bmRleDogYXQKLSA9KGF0IExPT1AtTkFNRSBbQ01EU10pPSA6OiBQYXJzZSBjb21tYW5kcyB3aXRo IHJlc3BlY3QgdG8gPUxPT1AtTkFNRT0uICBGb3IKICBleGFtcGxlLCBhID1sZWF2ZT0gc3ViY29t bWFuZCB3b3VsZCBleGl0IHRoZSBsb29wID1MT09QLU5BTUU9LCBhbmQgYW4KICBhY2N1bXVsYXRp b24gY29tbWFuZCB3b3VsZCBjcmVhdGUgYSB2YXJpYWJsZSBpbiB0aGF0IHN1cGVyLWxvb3AuCgog IElmIG9uZSBkaWQgbm90IHVzZSA9YXQ9IGluIHRoZSBiZWxvdyBleGFtcGxlLCB0aGVuIHRoZSBh Y2N1bXVsYXRpb24gd291bGQgYmUKICBsb2NhbCB0byB0aGUgc3ViLWxvb3AgYW5kIHRoZSByZXR1 cm4gdmFsdWUgb2YgdGhlIGxvb3AgPW91dGVyPSB3b3VsZCBiZSB+bmlsfi4KCiAgIytiZWdpbl9z cmMgZW1hY3MtbGlzcAogICAgOzsgPT4gKDQgNSAxMCAxMSAxNiAxNykKICAgIChsb29weSBvdXRl cgogICAgICAgICAgIChhcnJheSBpIFsoMSAyKSAoMyA0KSAoNSA2KV0pCiAgICAgICAgICAgKGxv b3B5ICh3aXRoIChzdW0gKGFwcGx5ICMnKyBpKSkpCiAgICAgICAgICAgICAgICAgIChsaXN0IGog aSkKICAgICAgICAgICAgICAgICAgKGF0IG91dGVyIChjb2xsZWN0ICgrIHN1bSBqKSkpKSkKICAj K2VuZF9zcmMKCiAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGVmZmVjdHMgb2YgZmxhZ3MgKFtbI2Zs YWdzXV0pIGFyZSBsb2NhbCB0byB0aGUgbG9vcHMgaW4KICB3aGljaCB0aGV5IGFyZSB1c2VkLCBl dmVuIHdoZW4gdXNpbmcgdGhlID1hdD0gY29tbWFuZC4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlz cAogICAgOzsgPT4gKCgxIDIgMTEgMTIpCiAgICA7OyAgICAgKCgyKSAoMykgKDEyKSAoMTMpKSkK ICAgIChsb29weSBvdXRlcgogICAgICAgICAgIChmbGFnIHBjYXNlKQogICAgICAgICAgIChhcnJh eSBlbGVtIFsoMSAyKSAoMTEgMTIpXSkKICAgICAgICAgICAoY29sbGVjdCBgKCxmaXJzdCAuICxy ZXN0KSBlbGVtKQogICAgICAgICAgIDs7IE5PVEU6IFRoZSBzdWItbG9vcCB1c2VzIHRoZSBkZWZh dWx0IGRlc3RydWN0dXJpbmcgc3R5bGUuCiAgICAgICAgICAgOzsgICAgICAgVGhlIGBwY2FzZScg c3R5bGUgb25seSBhZmZlY3RzIHRoZSBzdXJyb3VuZGluZyBsb29wLgogICAgICAgICAgIChsb29w eSAoYXQgb3V0ZXIgKGNvbGxlY3QgKGZpcnN0ICZyZXN0IHJlc3QpIChtYXBjYXIgIycxKyBlbGVt KSkpCiAgICAgICAgICAgICAgICAgIChsZWF2ZSkpCiAgICAgICAgICAgKGZpbmFsbHktcmV0dXJu IGZpcnN0IHJlc3QpKQogICMrZW5kX3NyYwoKKiBEZXN0cnVjdHVyaW5nIE1hY3Jvcwo6UFJPUEVS VElFUzoKOkNVU1RPTV9JRDogZGVzdHItbWFjcm9zCjpERVNDUklQVElPTjogRGVzdHJ1Y3R1cmlu ZyBvdXRzaWRlIG9mIHRoZSBsb29wLgo6RU5EOgoKIytjaW5kZXg6IGRlc3RydWN0dXJpbmcgbWFj cm9zClRoZSBiZWxvdyBtYWNyb3MgbWFrZSBMb29weSdzIGJ1aWx0LWluIGRlc3RydWN0dXJpbmcg c3lzdGVtIGF2YWlsYWJsZSBmb3IKZ2VuZXJhbCB1c2UgKFtbI2Jhc2ljLWRlc3RydWN0dXJpbmdd XSkuICBGb3IgZXhhbXBsZSwgfmxvb3B5LWxldCp+IGNhbiBiZSB1c2VkIGZvcgp+bGV0fi1iaW5k aW5nIGRlc3RydWN0dXJlZCB2YWx1ZXMsIHNpbWlsYXIgdG8gfnBjYXNlLWxldCp+LiAgQmVjYXVz ZSBsaWJyYXJpZXMKbGlrZSA9cGNhc2U9IGFuZCA9c2VxPSBhbHJlYWR5IHByb3ZpZGUgc2ltaWxh ciBkZXN0cnVjdHVyaW5nIG1hY3JvcyB1c2luZyB0aGVpcgpvd24gZGVzdHJ1Y3R1cmluZyBzeXN0 ZW1zLCB0aGVzZSBtYWNyb3MgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGUgZmxhZ3MKdGhhdCBjb25m aWd1cmUgdGhlIGRlc3RydWN0dXJpbmcgdXNlZCBieSBsb29wIGNvbW1hbmRzIChbWyNmbGFnc11d KSwgYXMgdGhhdCB3b3VsZApiZSByZWR1bmRhbnQuCgpUbyBiZSBjbGVhciwgdGhlc2UgZGVzdHJ1 Y3R1cmluZyBtYWNyb3MgY2FuIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgbG9vcGluZwptYWNyb3Mu CgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsgPT4gKDUgOSkKICAobG9vcHkgKGZsYWcgc2Vx KQogICAgICAgICA7OyBgc2VxLWxldCctZGVzdHJ1Y3R1cmluZyB1c2VkIGJ5IGxvb3AgY29tbWFu ZDoKICAgICAgICAgKGxpc3QgKF8gJnJlc3QgY2RyKSAnKChrZXkxIC4gKDIgLiAzKSkgKGtleTIg LiAoNCAuIDUpKSkpCiAgICAgICAgIDs7IERvZXNuJ3QgdXNlIGBzZXEtbGV0Jy1zdHlsZSBkZXN0 cnVjdHVyaW5nOgogICAgICAgICAoY29sbGVjdCAobG9vcHktbGV0KiAoKChhIC4gYikgY2RyKSkK ICAgICAgICAgICAgICAgICAgICAoKyBhIGIpKSkpCiMrZW5kX3NyYwoKIytmaW5kZXg6IGxvb3B5 LWxldCoKLSB+bG9vcHktbGV0Kn4gOjogVXNlIGRlc3RydWN0dXJpbmcgaW4gYSB+bGV0fiBmb3Jt LCBsaWtlIGluIH5wY2FzZS1sZXQqfiBhbmQKICB+c2VxLWxldH4uCgogICMrYmVnaW5fc3JjIGVt YWNzLWxpc3AKICAgIDs7ID0+ICgxIDIgMyA0IDUgMjgpCiAgICAobG9vcHktbGV0KiAoKGEgMSkK ICAgICAgICAgICAgICAgICAoW2IgY10gWzIgM10pCiAgICAgICAgICAgICAgICAgKCgma2V5cyBr MSBrMiAoazMgMjgpKSAnKDprMSA0IDprMiA1KSkpCiAgICAgIChsaXN0IGEgYiBjIGsxIGsyIGsz KSkKICAjK2VuZF9zcmMKCiMrZmluZGV4OiBsb29weS1zZXRxCi0gfmxvb3B5LXNldHF+IDo6IFVz ZSBkZXN0cnVjdHVyaW5nIGluIGEgfnNldHF+IGZvcm0sIGxpa2UgaW4gfnNlcS1zZXRxfiBhbmQK ICB+cGNhc2Utc2V0cX4uCgogICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7ID0+ICgxIDIg MyA0IDUgMjgpCiAgICAobGV0IChhIGIgYyBrMSBrMiBrMykKICAgICAgKGxvb3B5LXNldHEgYSAx CiAgICAgICAgICAgICAgICAgIFtiIGNdIFsyIDNdCiAgICAgICAgICAgICAgICAgICgma2V5cyBr MSBrMiAoazMgMjgpKSAnKDprMSA0IDprMiA1KSkKICAgICAgKGxpc3QgYSBiIGMgazEgazIgazMp KQogICMrZW5kX3NyYwoKIytmaW5kZXg6IGxvb3B5LWxhbWJkYQotIH5sb29weS1sYW1iZGF+IDo6 IFVzZSBkZXN0cnVjdHVyaW5nIGluIGEgfmxhbWJkYX4ncyBhcmd1bWVudCBsaXN0LCBsaWtlIGlu CiAgfnBjYXNlLWxhbWJkYX4gYW5kIH5jbC1mdW5jdGlvbn4uCgogICMrYmVnaW5fc3JjIGVtYWNz LWxpc3AKICAgIDs7ID0+ICgoMSAyIDprMSAzKSAxMTApCiAgICAoZnVuY2FsbCAobG9vcHktbGFt YmRhICgoJndob2xlIGZpcnN0LWFyZyBhIGIgJmtleSBrMSAoazIgNCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWNvbmQtYXJnKQogICAgICAgICAgICAgICAobGlzdCBmaXJzdC1hcmcg KCsgYSBiIGsxIGsyIHNlY29uZC1hcmcpKSkKICAgICAgICAgICAgIChsaXN0IDEgMiA6azEgMykg MTAwKQogICMrZW5kX3NyYwoKIytmaW5kZXg6IGxvb3B5LXJlZgotIH5sb29weS1yZWZ+IDo6IENy ZWF0ZSBkZXN0cnVjdHVyZWQgcmVmZXJlbmNlcyB0byB0aGUgZmllbGRzIGluIGEgc2VxdWVuY2Ug dmlhCiAgfmNsLXN5bWJvbC1tYWNyb2xldH4uICBEbyBub3QgY29uZnVzZSB0aGlzIHdpdGggdGhl IGJlaGF2aW9yIG9mIH5jbC1sZXRmfiwKICB3aGljaCB0ZW1wb3JhcmlseSBiaW5kcyB0aG9zZSBw bGFjZXMgdG8gYSB2YWx1ZS4KCiAgVGhpcyBtYWNybyB1c2VzIHRoZSBkZXN0cnVjdHVyaW5nIGZv dW5kIGluIHRoZSBzZXF1ZW5jZSByZWZlcmVuY2UgaXRlcmF0aW9uCiAgY29tbWFuZHMgKFtbI3Nl cXVlbmNlLXJlZmVyZW5jZS1pdGVyYXRpb25dXSkuICBUaGVyZSBhcmUgc29tZSBsaW1pdGF0aW9u cyB0byB0aGlzCiAgZnVuY3Rpb25hbGl0eSBpbiBFbWFjcyBMaXNwLCB3aGljaCBhcmUgZGVzY3Jp YmVkIGluIHRoYXQgc2VjdGlvbi4KCiAgIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogICAgOzsgPT4g KCgyMCAyIDIzKSBbMjQgMjUgMjZdKQogICAgKGxldCAoKGwxIChsaXN0IDEgMiAzKSkKICAgICAg ICAgIChhMSAodmVjdG9yIDQgNSA2KSkpCiAgICAgIChsb29weS1yZWYgKCgoYSBfIGIpIGwxKQog ICAgICAgICAgICAgICAgICAoW2MgJnJlc3QgZF0gYTEpKQogICAgICAgIChzZXRmIGEgMjAKICAg ICAgICAgICAgICBiIDIzCiAgICAgICAgICAgICAgYyAyNAogICAgICAgICAgICAgIGQgWzI1IDI2 XSkpCiAgICAgIChsaXN0IGwxIGExKSkKICAjK2VuZF9zcmMKCiAgCiogVGhlIH5sb29weS1pdGVy fiBNYWNybwo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogbG9vcHktaXRlcgo6REVTQ1JJUFRJT046 IEVtYmVkZGluZyBsb29wIGNvbW1hbmRzIGluIGFyYml0cmFyeSBjb2RlLgo6RU5EOgoKIytjaW5k ZXg6IGxvb3B5LWl0ZXIKIytmaW5kZXg6IGxvb3B5LWl0ZXIKfmxvb3B5LWl0ZXJ+IGlzIGEgbWFj cm8gdGhhdCBhbGxvd3MgdGhlIGVtYmVkZGluZyBvZiBsb29wIGNvbW1hbmRzIGluc2lkZSBvZgph cmJpdHJhcnkgY29kZS4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxvb3AgY29tbWFuZCA9 ZG89LCB3aGljaCBhbGxvd3MgdGhlCmVtYmVkZGluZyBvZiBhcmJpdHJhcnkgY29kZSBpbnNpZGUg b2YgYSB+bG9vcHl+IGxvb3AuICBZb3UgbXVzdCB1c2UgfnJlcXVpcmV+IHRvCmxvYWQgdGhpcyBm ZWF0dXJlLgoKVGhpcyBtYWNybyBpcyBuYW1lZCBhZnRlciB0aGUgfml0ZXJhdGV+IG9yIH5pdGVy fiBtYWNybyBwcm92aWRlZCBieSB0aGUgQ29tbW9uCkxpc3AgcGFja2FnZSAiSXRlcmF0ZSIgW2Zu Oml0ZXJdIChub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgfml0ZXItKn4gZnVuY3Rpb25zCnBy b3ZpZGVkIGJ5IEVtYWNzKS4gIEhvd2V2ZXIsIHdoaWxlIH5sb29weX4gYW5kIH5sb29weS1pdGVy fiB3ZXJlIGluZmx1ZW5jZWQgYnkKfml0ZXJhdGV+LCB+bG9vcHktaXRlcn4gaXMgbm90IGEgcG9y dCBvZiB+aXRlcmF0ZX4gdG8gRW1hY3MgTGlzcC4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAo cmVxdWlyZSAnbG9vcHktaXRlcikgOyA8LSBNdXN0IGByZXF1aXJlJyB0byBsb2FkIGZlYXR1cmUu CgogIDs7ID0+ICgoMSAyIDMpICgtMyAtMiAtMSkgKDApKQogIChsb29weS1pdGVyIChhY2N1bS1v cHQgcG9zaXRpdmVzIG5lZ2F0aXZlcyBvdGhlcikKICAgICAgICAgICAgICAobnVtYmVyaW5nIGkg OmZyb20gLTMgOnRvIDMpCiAgICAgICAgICAgICAgKHBjYXNlIGkKICAgICAgICAgICAgICAgICgo cHJlZCBjbC1wbHVzcCkgIChjb2xsZWN0aW5nIHBvc2l0aXZlcyBpKSkKICAgICAgICAgICAgICAg ICgocHJlZCBjbC1taW51c3ApIChjb2xsZWN0aW5nIG5lZ2F0aXZlcyBpKSkKICAgICAgICAgICAg ICAgIChfICAgICAgICAgICAgICAgIChjb2xsZWN0aW5nIG90aGVyIGkpKSkKICAgICAgICAgICAg ICAoZmluYWxseS1yZXR1cm4gcG9zaXRpdmVzIG5lZ2F0aXZlcyBvdGhlcikpCgogIDs7ID0+ICgx IDIgMykKICAobG9vcHktaXRlciAobGlzdGluZyBlbGVtICcoMSAyIDMpKQogICAgICAgICAgICAg IChmdW5jYWxsICMnKGxhbWJkYSAoeCkgKGNvbGxlY3RpbmcgeCkpCiAgICAgICAgICAgICAgICAg ICAgICAgZWxlbSkpCiMrZW5kX3NyYwoKIytjaW5kZXg6IGxvb3B5LWl0ZXIgbmFtZSBjb25mbGlj dHMKVGhlIGFyZ3VtZW50cyBvZiB+bG9vcHl+IGFyZSBsaW1pdGVkIHRvIGxvb3AgY29tbWFuZHMg YW5kIHNwZWNpYWwgbWFjcm8KYXJndW1lbnRzLiAgfmxvb3B5LWl0ZXJ+IGRpZmZlcnMgYnkgYWxs b3dpbmcgYXJiaXRyYXJ5IExpc3AgZXhwcmVzc2lvbnMsIGluCndoaWNoIGxvb3AgY29tbWFuZHMg YXJlIHRyZWF0ZWQgYXMgbWFjcm9zIHRvIGJlIGV4cGFuZGVkIGJ5IH5tYWNyb2V4cGFuZC1hbGx+ LgpIZW5jZSwgYSBsb29wIGNvbW1hbmQgY291bGQgb3ZlcnNoYWRvdyB0aGUgZnVuY3Rpb24gdmFs dWUgb2YgYSBzeW1ib2wuICBUaGVyZQphcmUgdHdvIHdheXMgdG8gYXZvaWQgc3VjaCBjb25mbGlj dHMuCgojK2NpbmRleDogbG9vcHktaXRlciBiYXJlIGNvbW1hbmRzCiMrdmluZGV4OiBsb29weS1p dGVyLWJhcmUtY29tbWFuZHMKVGhlIGZpcnN0IHdheSBpcyB0byB1c2Ugbm9uLWNvbmZsaWN0aW5n IGFsaWFzZXMuICBMaWtlIGluIEl0ZXJhdGUgKGFuZAp+Y2wtbG9vcH4sIHRvIGFuIGV4dGVudCks IGFsbW9zdCBhbGwgY29tbWFuZHMgaW4gfmxvb3B5fiBoYXZlIGFsaWFzZXMgaW4gdGhlCnByZXNl bnQtcGFydGljaXBsZSBmb3JtICh0aGUgIi1pbmciIGZvcm0pLiAgRm9yIGV4YW1wbGUsIExvb3B5 IHByb3ZpZGVzIHRoZQpjb21tYW5kID1saXN0PSB3aXRoIHRoZSBhbGlhcyA9bGlzdGluZz0uICBC ZWNhdXNlIHRoZSBjb21tYW5kIG5hbWUgPWxpc3Q9IHdvdWxkCmNvbmZsaWN0IHdpdGggdGhlIGJ1 aWx0LWluIEVtYWNzIExpc3AgZnVuY3Rpb24gfmxpc3R+LCBvbmx5IHRoZSBjb21tYW5kIG5hbWUK PWxpc3Rpbmc9IGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LiAgVGhlc2UgbmFtZXMgb2YgY29tbWFu ZHMgYW5kIHNwZWNpYWwgbWFjcm8KYXJndW1lbnRzIGFyZSBjYWxsZWQge3t7ZGZuKGJhcmUgbmFt ZXMpfX19IHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB0aGUgc2Vjb25kCndheSBvZiBhdm9pZGlu ZyBjb25mbGljdHMuICBUaGUgY29tcGxldGUgbGlzdCBvZiBjb21tYW5kcyBhbmQgc3BlY2lhbCBt YWNybwphcmd1bWVudHMgdGhhdCBhcmUgcmVjb2duaXplZCBieSBkZWZhdWx0IGFyZSBnaXZlbiBp biBbWyNpdGVyLWRlZmF1bHQtbmFtZXNdXS4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBJ biBgbG9vcHknLCBgbGlzdCcgaXMgdW5hbWJpZ3VvdXNseSBhIGNvbW1hbmQgbmFtZS4KICA7OyA9 PiAoMSAyIDMgNCkKICAobG9vcHkgKG5hbWVkIG91dGVyKQogICAgICAgICAobGlzdCBpICcoKDEg MikgKDMgNCkpKQogICAgICAgICAobG9vcCAobGlzdCBqIGkpCiAgICAgICAgICAgICAgIChhdCBv dXRlciAoY29sbGVjdCBqKSkpKQoKICA7OyBJbiBgbG9vcHktaXRlcicsIGBsaXN0JyB3b3VsZCBi ZSBhIGZ1bmN0aW9uLiAgYGxpc3RpbmcnIGlzIHRoZSBjb21tYW5kLgogIDs7ID0+ICgxIDIgMyA0 KQogIChsb29weS1pdGVyIChuYW1lZCBvdXRlcikKICAgICAgICAgICAgICAobGlzdGluZyBpIChs aXN0IChsaXN0IDEgMikgKGxpc3QgMyA0KSkpCiAgICAgICAgICAgICAgKGxvb3B5LWl0ZXIgKGxp c3RpbmcgaiBpKQogICAgICAgICAgICAgICAgICAgICAgICAgIDs7IENhbiB1c2UgYGF0JyBpbnN0 ZWFkIG9mIGBhdHRpbmcnOgogICAgICAgICAgICAgICAgICAgICAgICAgIChhdCBvdXRlciAoY29s bGVjdGluZyBqKSkpKQojK2VuZF9zcmMKClRoZSBjb21tYW5kIGFsaWFzZXMgcmVjb2duaXplZCBi eSB+bG9vcHktaXRlcn4gY2FuIGJlIGN1c3RvbWl6ZWQgd2l0aCB0aGUgdXNlcgpvcHRpb24gfmxv b3B5LWl0ZXItYmFyZS1jb21tYW5kc34sIHdoaWNoIGlzIGEgbGlzdCBvZiBzeW1ib2xzIG5hbWlu ZyBjb21tYW5kcwphbmQgdGhlaXIgYWxpYXNlcy4gIEFnYWluLCB0aGVzZSBjb21tYW5kcyBhcmUg Zm91bmQgaW4gdGhlIGxvb3AgYm9keSBieSB1c2luZwpFbWFjcyBMaXNwJ3MgbWFjcm8tZXhwYW5z aW9uIGZlYXR1cmVzLCBzbyBhZGRpbmcgYW4gYWxpYXMgdGhhdCBvdmVycmlkZXMgYQpzeW1ib2wn cyBmdW5jdGlvbiBkZWZpbml0aW9uIGNhbiBjYXVzZSBlcnJvcnMuICB+bG9vcHl+LCB3aG9zZSBl bnZpcm9ubWVudCBpcwptb3JlIGxpbWl0ZWQsIGRvZXMgbm90IGhhdmUgdGhpcyByZXN0cmljdGlv bi4KCiMrdmluZGV4OiBsb29weS1pdGVyLWJhcmUtc3BlY2lhbC1tYWNyby1hcmd1bWVudHMKVGhl IHNwZWNpYWwgbWFjcm8gYXJndW1lbnRzIChhbmQgdGhlaXIgYWxpYXNlcykgcmVjb2duaXplZCBi eSB+bG9vcHktaXRlcn4gY2FuCmJlIHNldCBpbiB0aGUgdXNlciBvcHRpb24gfmxvb3B5LWl0ZXIt YmFyZS1zcGVjaWFsLW1hY3JvLWFyZ3VtZW50c34uICBTb21lIG9mCnRoZWlyIGJ1aWx0LWluIGFs aWFzZXMsIHN1Y2ggYXMgPWxldCo9IGZvciA9d2l0aD0sIGFyZSBleGNsdWRlZCBieSBkZWZhdWx0 LgoKIytjaW5kZXg6IGxvb3B5LWl0ZXIga2V5d29yZHMKIyt2aW5kZXg6IGxvb3B5LWl0ZXIta2V5 d29yZHMKVGhlIGZpcnN0IG1ldGhvZCBhYm92ZSBkZWFscyB3aXRoIGxvb3BpbmcgZmVhdHVyZXMg dGhhdCBhcmUgd3JpdHRlbiBsaWtlCmZ1bmN0aW9ucy4gIElmIGZvciBzb21lIHJlYXNvbiBhIHN1 aXRhYmxlIGFsaWFzIGNhbm5vdCBiZSB1c2VkIG9yIGNhbm5vdCBiZQphZGRlZCB0byBvbmUgb2Yg dGhlIGFib3ZlIHVzZXIgb3B0aW9ucywgb25lIGNhbiB3cml0ZSB0aGUgZmVhdHVyZSBuYW1lIHBy ZWNlZGVkCmJ5IG9uZSBvZiB0aGUga2V5d29yZHMgaW4gfmxvb3B5LWl0ZXIta2V5d29yZHN+LiAg VGhpcyBpcyB0aGUgc2Vjb25kIG1ldGhvZC4KCkJ5IGRlZmF1bHQsIHRoZSBwb3NzaWJsZSBrZXl3 b3JkcyBhcmUgPWZvcj0sID1hY2N1bT0sID1leGl0PSwgYW5kID1hcmc9LiAgVGhlc2UKc3ltYm9s cyBkbyBub3Qgc2hhcmUgYSBuYW1lIHdpdGggYW55IGJ1aWx0LWluIEVtYWNzIGZlYXR1cmUgYW5k IGFyZSBzaW1pbGFyIHRvCnRoZSBrZXl3b3JkcyB1c2VkIGJ5IG90aGVyIHBhY2thZ2VzLiAgTm90 ZSB0aGF0IHRoZXNlIGFyZSBub3QgTGlzcCAia2V5d29yZHMiCnRoYXQgYXJlIHByZWZpeGVkIHdp dGggYSBjb2xvbiwgc3VjaCBhcyB0aGUgPTp0ZXN0PSBpbiB+KGNsLWNvdW50IElURU0gU0VRIDp0 ZXN0CkZVTkMpfi4gIEZvciBleGFtcGxlLAoKLSB0aGUgY29tbWFuZCA9KGxpc3RpbmcgVkFSIExJ U1QpPSBjb3VsZCBhbHNvIGJlIHdyaXR0ZW4gYXMgPShmb3IgbGlzdCBWQVIKICBMSVNUKT0gYW5k IGFzID0oZm9yIGxpc3RpbmcgVkFSIExJU1QpPS4KLSB0aGUgc3BlY2lhbCBtYXJjbyBhcmd1bWVu dCA9d2l0aD0sIHdpdGggdGhlIGFsaWFzID1sZXQqPSwgY291bGQgYWxzbyBiZQogIHdyaXR0ZW4g YXMgPShhcmcgbGV0KiAoVkFSIEVYUFIpIC4uLik9LiAgU2VlIHRoYXQgdGhpcyBkb2VzIG5vdCBj b25mbGljdCB3aXRoCiAgdXNpbmcgdGhlIH5sZXQqfiBzcGVjaWFsIGZvcm0uCgoKVGhpcyBtZXRo b2QgcmVjb2duaXplcyBhbGwgY29tbWFuZHMgYW5kIHRoZWlyIGFsaWFzZXMgaW4gdGhlIHVzZXIg b3B0aW9uCn5sb29weS1hbGlhc2Vzfi4KCiMrY2FwdGlvbjogVGhlIGZpcnN0IGV4YW1wbGUsIGJ1 dCBub3cgdXNpbmcga2V5d29yZCBzeW1ib2xzLgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgOzsg PT4gKCgxIDIgMykgKC0zIC0yIC0xKSAoMCkpCiAgKGxvb3B5LWl0ZXIgKGFyZyBhY2N1bS1vcHQg cG9zaXRpdmVzIG5lZ2F0aXZlcyBvdGhlcikKICAgICAgICAgICAgICAoZm9yIG51bWJlcnMgaSA6 ZnJvbSAtMyA6dG8gMykKICAgICAgICAgICAgICAocGNhc2UgaQogICAgICAgICAgICAgICAgKChw cmVkIGNsLXBsdXNwKSAgKGFjY3VtIGNvbGxlY3QgcG9zaXRpdmVzIGkpKQogICAgICAgICAgICAg ICAgKChwcmVkIGNsLW1pbnVzcCkgKGFjY3VtIGNvbGxlY3QgbmVnYXRpdmVzIGkpKQogICAgICAg ICAgICAgICAgKF8gICAgICAgICAgICAgICAgKGFjY3VtIGNvbGxlY3Qgb3RoZXIgaSkpKQogICAg ICAgICAgICAgIChhcmcgZmluYWxseS1yZXR1cm4gcG9zaXRpdmVzIG5lZ2F0aXZlcyBvdGhlcikp CiMrZW5kX3NyYwoKV2hpbGUgdGhlIHN5bWJvbHMgPWZvcj0sID1hY2N1bT0sID1leGl0PSwgYW5k ID1hcmc9IGFyZSBuYW1lZCBmb3IgaXRlcmF0aW9uLAphY2N1bXVsYXRpb24sIGVhcmx5IGV4aXRz LCBhbmQgc3BlY2lhbCBtYWNybyBhcmd1bWVudHMsIHJlc3BlY3RpdmVseSwgYW55CmtleXdvcmQg aW4gdGhlIHVzZXIgb3B0aW9uIH5sb29weS1pdGVyLWtleXdvcmRzfiBjYW4gYmUgdXNlZCB0byBp ZGVudGlmeSBhbnkKbG9vcCBjb21tYW5kIG9yIHNwZWNpYWwgbWFjcm8gYXJndW1lbnQuICBGb3Ig ZXhhbXBsZSwgPShhY2N1bSBjb2xsZWN0IFZBTCk9IGFuZAo9KGZvciBjb2xsZWN0IFZBTCk9IGFy ZSBib3RoIHZhbGlkIHdheXMgb2YgcmVmZXJyaW5nIHRvIHRoZSA9Y29sbGVjdD0gbG9vcCBjb21t YW5kCmluIH5sb29weS1pdGVyfi4gIEluc3RlYWQgb2YgPShhcmcgbGV0KiAoVkFSIDcpKT0gaW4g dGhlIGV4YW1wbGUgYWJvdmUsIG9uZSBjb3VsZAphbHNvIHdyaXRlID0oZXhpdCBsZXQqIChWQVIg NykpPSBpZiBvbmUgcmVhbGx5IHdhbnRlZCB0by4KCldoaWxlIH5sb29weS1pdGVyfiBpbXBvc2Vz IGxlc3MgcmVzdHJpY3Rpb25zIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgbG9vcCBib2R5CnRoYW4g dGhlIG1hY3JvIH5sb29weX4sIHJlc3RyaWN0aW9ucyBvbiB0aGUgcGxhY2VtZW50IG9mIGxvb3Ag Y29tbWFuZHMgYW5kCnNwZWNpYWwgbWFjcm8gYXJndW1lbnRzIHN0aWxsIGFwcGx5IGluIH5sb29w eS1pdGVyfi4gIEZvciBleGFtcGxlLCBpdGVyYXRpb24KY29tbWFuZHMgbXVzdCBzdGlsbCBvY2N1 ciBhdCB0aGUgdG9wIGxldmVsIG9mIH5sb29weS1pdGVyfiBvciBhIHN1Yi1sb29wLgoKIytiZWdp bl9zcmMgZW1hY3MtbGlzcAogIDs7IEJBRDoKICAobG9vcHktaXRlciAobGV0ICgoYSAocHJvZ24K ICAgICAgICAgICAgICAgICAgICAgICAgIDs7IEVSUk9SOiBgbGlzdGluZycgbXVzdCBvY2N1ciBh dCB0aGUgdG9wIGxldmVsLgogICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3RpbmcgaiAnKDgg OSAxMCAxMSAxMikpCiAgICAgICAgICAgICAgICAgICAgICAgICBqKSkpCiAgICAgICAgICAgICAg ICAoY29sbGVjdGluZyBhKSkpCgogIDs7IEdPT0Q6CiAgOzsgPT4gKDggOSAxMCAxMSAxMikKICAo bG9vcHktaXRlciAobGV0ICgoYSAocHJvZ24KICAgICAgICAgICAgICAgICAgICAgICAgIDs7IE5P VEU6IE5vIHJlc3RyaWN0aW9uIG9uIHBsYWNlbWVudCBvZiBgc2V0dGluZycuCiAgICAgICAgICAg ICAgICAgICAgICAgICAoc2V0dGluZyBqIDggKDErIGopKQogICAgICAgICAgICAgICAgICAgICAg ICAgKHdoZW4gKD4gaiAxMikgKGxlYXZpbmcpKQogICAgICAgICAgICAgICAgICAgICAgICAgaikp KQogICAgICAgICAgICAgICAgKGNvbGxlY3RpbmcgYSkpKQojK2VuZF9zcmMKCiMrY2luZGV4OiBs b29weS1pdGVyIHN1Yi1sb29wcwpJbiB0aGUgbWFjcm8gfmxvb3B5fiwgdGhlIGNvbW1hbmRzID1s b29weT0gYW5kID1sb29weS1pdGVyPSBhcmUgbmVlZGVkIHRvCmNvcnJlY3RseSBoYW5kbGUgc3Vi LWxvb3BzLiAgVGhvc2UgY29tbWFuZHMgYXJlIG5vdCBuZWVkZWQgaW4gdGhlIG1hY3JvCn5sb29w eS1pdGVyfiwgc2luY2UgdGhlIG1hY3JvIGV4cGFuZHMgYW55IG1hY3JvcyBpbiBpdHMgYXJndW1l bnQgd2hpbGUKcHJvY2Vzc2luZyB0aGVtLgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogIDs7ID0+ ICgyIDMgNCA1KQogIChsb29weS1pdGVyIG91dGVyCiAgICAgICAgICAgICAgKGxpc3RpbmcgaSAn KFsxIDJdIFszIDRdKSkKICAgICAgICAgICAgICA7OyBOT1RFOiBgbG9vcHktaXRlcicgbWFjcm8s IG5vdCBjb21tYW5kCiAgICAgICAgICAgICAgKGxvb3B5LWl0ZXIgKGFycmF5aW5nIGogaSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAoYXQgb3V0ZXIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxldCAoKHZhbCAoMSsgaikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb2xsZWN0aW5nIHZhbCkpKSkpCgogIDs7ID0+ICgyIDMgNCA1KQogIChsb29weS1pdGVyIG91 dGVyCiAgICAgICAgICAgICAgKGxpc3RpbmcgaSAnKFsxIDJdIFszIDRdKSkKICAgICAgICAgICAg ICA7OyBOT1RFOiBgbG9vcHknIG1hY3JvLCBub3QgY29tbWFuZAogICAgICAgICAgICAgIChsb29w eSAoYXJyYXkgaiBpKQogICAgICAgICAgICAgICAgICAgICAoc2V0IHZhbCAoMSsgaikpCiAgICAg ICAgICAgICAgICAgICAgIChhdCBvdXRlciAoY29sbGVjdCB2YWwpKSkpCiMrZW5kX3NyYwoKRmlu YWxseSwgdGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0byBrZWVwIGluIG1pbmQgd2hlbiB1c2luZyB+ bG9vcHktaXRlcn46CgoxLiBZb3Ugc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhIGxv b3AgY29tbWFuZCdzIGV4cGFuZGVkIGNvZGUuICBTdWNoCiAgIGV4cGFuZGVkIGNvZGUgaXMgYW4g aW1wbGVtZW50YXRpb24gZGV0YWlsIGFuZCBzdWJqZWN0IHRvIGNoYW5nZS4KCjIuIFNvbWUgbWFj cm9zLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLCBwcm9k dWNlIGJyb2tlbgogICBjb2RlIHdoaWxlIH5sb29weS1pdGVyfiBpcyBleHBhbmRpbmcgaXRzIGFy Z3VtZW50cy4gIEZvciBleGFtcGxlLAogICB+Y2wtcmV0dXJuLWZyb21+IGlzIGtub3duIHRvIGJl IHByb2JsZW1hdGljLCBzaW5jZSBpdCB0cmllcyB0byBpbnRlcmFjdCB3aXRoCiAgIHRoZSBjb3Jy ZWN0IH5jbC1ibG9ja34uCgogICBNYWNyb3MgdGhhdCBzaG91bGQgbm90IGJlIGV4cGFuZGVkIHdo aWxlIH5sb29weS1pdGVyfiBleHBhbmRzIGFyZSBsaXN0ZWQgaW4KICAgfmxvb3B5LWl0ZXItc3Vw cHJlc3NlZC1tYWNyb3N+LiAgTm90ZSB0aGF0IHRoaXMgc3VwcHJlc3Npb24gaXMgb25seSBpbiBl ZmZlY3QKICAgd2hpbGUgfmxvb3B5LWl0ZXJ+IGV4cGFuZHMgaXRzIGxvb3AgY29tbWFuZHMuICBP bmNlIH5sb29weS1pdGVyfiBvdXRwdXRzIGl0cwogICBjb2RlLCBFbWFjcyB3aWxsIGF0dGVtcHQg dG8gZnVydGhlciBleHBhbmQgYW55IG1hY3JvcyBpbiB0aGUgb3V0cHV0dGVkIGNvZGUuCgogICBJ ZGVhbGx5LCBzdWNoIHByb2JsZW1hdGljIG1hY3JvcyBhcmUgdW5jb21tb24uICBQbGVhc2UgcmVw b3J0IHN1Y2ggY2FzZXMgb24KICAgdGhpcyBwcm9qZWN0J3MgW1todHRwczovL2dpdGh1Yi5jb20v b2thbXNuL2xvb3B5L2lzc3Vlc11baXNzdWVzIHRyYWNrZXJdXSBzbyB0aGF0IHRoZXkgY2FuIGJl IGFkZGVkIHRvCiAgIH5sb29weS1pdGVyLXN1cHByZXNzZWQtbWFjcm9zfiBieSBkZWZhdWx0LgoK KiogRGVmYXVsdCBCYXJlIE5hbWVzIGluIH5sb29weS1pdGVyfgo6UFJPUEVSVElFUzoKOkNVU1RP TV9JRDogaXRlci1kZWZhdWx0LW5hbWVzCjpFTkQ6CgpUaGlzIHNlY3Rpb24gbGlzdHMgdGhlIGRl ZmF1bHQgYWxpYXNlcyBzdXBwb3J0ZWQgYXMgYmFyZSBuYW1lcyBpbiB0aGUgbWFjcm8Kfmxvb3B5 LWl0ZXJ+LiAgVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJhcmUgbmFtZXMgY2FuIGJlIGN1c3RvbWl6 ZWQgaW4gdGhlIHVzZXIKb3B0aW9ucyB+bG9vcHktaXRlci1iYXJlLWNvbW1hbmRzfiBhbmQKfmxv b3B5LWl0ZXItYmFyZS1zcGVjaWFsLW1hY3JvLWFyZ3VtZW50c34uCgpCeSBkZWZhdWx0LCB0aGUg Zm9sbG93aW5nIGNvbW1hbmRzIGFyZSBub3QgcmVjb2duaXplZDoKLSA9ZG89IGFuZCA9Z3JvdXA9 LCB3aGljaCBhcmUgbm90IG5lZWRlZC4KCi0gQ29tbWFuZHMgdGhhdCBleGlzdHMgb25seSBhcyBh IGNvbW1hbmQgdmVyc2lvbiBvZiBhbiBleGlzdGluZyBMaXNwIGZlYXR1cmUsCiAgc3VjaCBhcyA9 aWY9LCA9Y29uZD0sID13aGVuPSwgYW5kID11bmxlc3M9LgoKLSBUaGUgY29tbWFuZHMgPWxvb3B5 PSBhbmQgPWxvb3B5LWl0ZXI9LiAgVGhlIG1hY3JvIH5sb29weS1pdGVyfiBleHBhbmRzIG1hY3Jv cwogIGluIGl0cyBhcmd1bWVudHMsIGFuZCBzbyBjYW4gcHJvcGVybHkgaGFuZGxlIGluc3RhbmNl cyBvZiBpdHNlbGYgYW5kIHRoZSBtYWNybwogIH5sb29weX4gd2l0aG91dCBuZWVkaW5nIHRoZW0g dG8gYmUgcmVpbXBsZW1lbnRlZCBhcyBsb29wIGNvbW1hbmRzLgoKLSA9d2hpbGU9LCBhcyBpdCB3 b3VsZCBjb25mbGljdCB3aXRoIHRoZSBzcGVjaWFsIGZvcm0gfndoaWxlfi4KICBVc2Ugfih3aGVu IChub3QgQ09ORCkgKGxlYXZpbmcpKX4gb3Igfih1bmxlc3MgQ09ORCAobGVhdmluZykpfiBpbnN0 ZWFkLgoKLSA9dW50aWw9LCB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGV4Y2x1c2lvbiBvZiA9 d2hpbGU9LgoKClVzaW5nIHRoZSBjb21tYW5kcyA9cmV0dXJuaW5nPSBhbmQgPXJldHVybmluZy1m cm9tPSBhcmUgdGhlIHNhbWUgYXMgdXNpbmcgdGhlCm1hY3JvcyB+Y2wtcmV0dXJufiBhbmQgfmNs LXJldHVybi1mcm9tfiwgZXhjZXB0IHRoYXQgdGhlIGNvbW1hbmRzIGF1dG9tYXRpY2FsbHkKY3Jl YXRlIGEgbGlzdCBpZiBtb3JlIHRoYW4gb25lIHJldHVybiB2YWx1ZSBpcyBnaXZlbi4KCiMrYmVn aW5fc3JjIGVtYWNzLWxpc3AKICA7OyA9PiAoNiA3IDgpCiAgKGxvb3B5LWl0ZXIgKG51bWJlcmlu ZyBuIDpmcm9tIDAgOnRvIDEwKQogICAgICAgICAgICAgICh3aGVuICg+IG4gNSkKICAgICAgICAg ICAgICAgIChyZXR1cm5pbmcgbiAoMSsgbikgKCsgMiBuKSkpKQoKICA7OyA9PiAoNiA3IDgpCiAg KGxvb3B5LWl0ZXIgKG51bWJlcmluZyBuIDpmcm9tIDAgOnRvIDEwKQogICAgICAgICAgICAgICh3 aGVuICg+IG4gNSkKICAgICAgICAgICAgICAgIChjbC1yZXR1cm4gKGxpc3QgbiAoMSsgbikgKCsg MiBuKSkpKSkKIytlbmRfc3JjCgoKLSBTcGVjaWFsIE1hY3JvIEFyZ3VtZW50IE5hbWVzOgogIC0g PWFjY3VtLW9wdD0KICAtID1hZnRlci1kbz0KICAtID1hZnRlcj0KICAtID1iZWZvcmUtZG89CiAg LSA9YmVmb3JlPQogIC0gPWVsc2UtZG89CiAgLSA9ZWxzZT0KICAtID1maW5hbGx5LWRvPQogIC0g PWZpbmFsbHktcHJvdGVjdD0KICAtID1maW5hbGx5LXByb3RlY3RlZD0KICAtID1maW5hbGx5LXJl dHVybj0KICAtID1maW5hbGx5PQogIC0gPWZsYWc9CiAgLSA9ZmxhZ3M9CiAgLSA9aW5pdD0KICAt ID1pbml0aWFsbHktZG89CiAgLSA9aW5pdGlhbGx5PQogIC0gPW5vLWluaXQ9CiAgLSA9bm8td2l0 aD0KICAtID1vcHQtYWNjdW09CiAgLSA9d2l0aD0KICAtID13aXRob3V0PQogIC0gPXdyYXA9Ci0g Q29tbWFuZCBOYW1lczoKICAtIEl0ZXJhdGlvbiBDb21tYW5kIE5hbWVzOgogICAgLSBHZW5lcmlj IEl0ZXJhdGlvbiBDb21tYW5kIE5hbWVzOgogICAgICAtID1jeWNsaW5nPQogICAgICAtID1yZXBl YXRpbmc9CiAgICAtIE51bWVyaWMgSXRlcmF0aW9uIENvbW1hbmQgTmFtZXM6CiAgICAgIC0gPW51 bWJlcmluZz0KICAgICAgLSA9bnVtYmVyaW5nLWRvd249CiAgICAgIC0gPW51bWJlcmluZy11cD0K ICAgIC0gU2VxdWVuY2UgSXRlcmF0aW9uIENvbW1hbmQgTmFtZXM6CiAgICAgIC0gPWFycmF5aW5n PQogICAgICAtID1jb25zaW5nPQogICAgICAtID1saXN0aW5nPQogICAgICAtID1tYXBwaW5nLXBh aXJzPQogICAgICAtID1tYXBwaW5nPQogICAgICAtID1zZXFpbmc9CiAgICAgIC0gPXNlcXVlbmNp bmc9CiAgICAgIC0gPXN0cmluZ2luZz0KICAgIC0gU2VxdWVuY2UgSW5kZXggSXRlcmF0aW9uIENv bW1hbmQgTmFtZXM6CiAgICAgIC0gPWFycmF5aW5nLWluZGV4PQogICAgICAtID1saXN0aW5nLWlu ZGV4PQogICAgICAtID1zZXF1ZW5jaW5nLWluZGV4PQogICAgICAtID1zdHJpbmdpbmctaW5kZXg9 CiAgICAtIFNlcXVlbmNlIFJlZmVyZW5jZSBJdGVyYXRpb24gQ29tbWFuZCBOYW1lczoKICAgICAg LSA9YXJyYXlpbmctcmVmPQogICAgICAtID1saXN0aW5nLXJlZj0KICAgICAgLSA9bWFwcGluZy1y ZWY9CiAgICAgIC0gPXNlcXVlbmNpbmctcmVmPQogICAgICAtID1zdHJpbmdpbmctcmVmPQogIC0g QWNjdW11bGF0aW9uIENvbW1hbmRzOgogICAgLSA9YWNjdW11bGF0aW5nPQogICAgLSA9YWRqb2lu aW5nPQogICAgLSA9YXBwZW5kaW5nPQogICAgLSA9Y29sbGVjdGluZz0KICAgIC0gPWNvbmNhdGlu Zz0KICAgIC0gPWNvdW50aW5nPQogICAgLSA9ZmluZGluZz0KICAgIC0gPW1heGltaXppbmc9CiAg ICAtID1taW5pbWl6aW5nPQogICAgLSA9bXVsdGlwbHlpbmc9CiAgICAtID1uY29uY2luZz0KICAg IC0gPW51bmlvbmluZz0KICAgIC0gPXByZXBlbmRpbmc9CiAgICAtID1wdXNoaW5nPQogICAgLSA9 cHVzaGluZy1pbnRvPQogICAgLSA9cmVkdWNpbmc9CiAgICAtID1zdW1taW5nPQogICAgLSA9dW5p b25pbmc9CiAgICAtID12Y29uY2F0aW5nPQogIC0gQm9vbGVhbiBDb21tYW5kczoKICAgIC0gPWFs d2F5cz0KICAgIC0gPW5ldmVyPQogICAgLSA9dGhlcmVpcz0KICAtIEN5Y2xlLVNraXBwaW5nIENv bW1hbmRzOgogICAgLSA9Y29udGludWluZz0KICAgIC0gPWNvbnRpbnVpbmctZnJvbT0KICAgIC0g PXNraXBwaW5nPQogICAgLSA9c2tpcHBpbmctZnJvbT0KICAtIEVhcmx5LUV4aXQgQ29tbWFuZHM6 CiAgICAtID1sZWF2aW5nPQogICAgLSA9bGVhdmluZy1mcm9tPQogICAgLSA9cmV0dXJuaW5nPQog ICAgLSA9cmV0dXJuaW5nLWZyb209CiAgLSBTdWItbG9vcCBDb21tYW5kczoKICAgIC0gPWF0PQoK KiBVc2luZyBGbGFncwo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogZmxhZ3MKOkRFU0NSSVBUSU9O OiBVc2luZyBmbGFncyB0byBjaGFuZ2UgYmVoYXZpb3IuCjpFTkQ6CgojK2NpbmRleDogZmxhZwpB IHt7e2RmbihmbGFnKX19fSBpcyBhIHN5bWJvbCBwYXNzZWQgdG8gdGhlID1mbGFnPSBvciA9Zmxh Z3M9IHNwZWNpYWwgbWFjcm8KYXJndW1lbnQsIGNoYW5naW5nIHRoZSBtYWNybydzIGJlaGF2aW9y LiAgQ3VycmVudGx5LCBmbGFncyBhZmZlY3Qgd2hhdCBtZXRob2QKfmxvb3B5fiB1c2VzIHRvIHBl cmZvcm0gZGVzdHJ1Y3R1cmluZyAoPXBjYXNlPSwgPXNlcT0sID1kYXNoPSwgb3IgdGhlIGRlZmF1 bHQpCgpGbGFncyBhcmUgYXBwbGllZCBpbiBvcmRlci4gIElmIHlvdSBzcGVjaWZ5ID0oZmxhZ3Mg c2VxIHBjYXNlKT0sIHRoZW4gfmxvb3B5fgp3aWxsIHVzZSB+cGNhc2UtbGV0fiBmb3IgZGVzdHJ1 Y3R1cmluZywgbm90IH5zZXEtbGV0fi4KCiMrdmluZGV4OiBsb29weS1kZWZhdWx0LWZsYWdzCklm IHlvdSB3aXNoIHRvIGFsd2F5cyB1c2UgYSBmbGFnLCB5b3UgY2FuIGFkZCB0aGF0IGZsYWcgdG8g dGhlIGxpc3QKfmxvb3B5LWRlZmF1bHQtZmxhZ3N+LiAgVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4g YnkgYW55IGZsYWcgZ2l2ZW4gaW4gdGhlID1mbGFnPQpzcGVjaWFsIG1hY3JvIGFyZ3VtZW50LgoK VGhlIGZvbGxvd2luZyBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKCiMrY2luZGV4OiBw Y2FzZSBmbGFnCi0gPXBjYXNlPSA6OiBVc2UgfnBjYXNlLWxldH4gZm9yIGRlc3RydWN0dXJpbmcK ICAoW1tpbmZvOmVsaXNwI0Rlc3RydWN0dXJpbmcgd2l0aCBwY2FzZSBQYXR0ZXJuc11dKS4KIytj aW5kZXg6IHNlcSBmbGFnCi0gPXNlcT0gOjogVXNlIH5zZXEtbGV0fiBmb3IgZGVzdHJ1Y3R1cmlu ZyAoW1tpbmZvOmVsaXNwI3NlcS1sZXRdXSkuCiMrY2luZGV4OiBkYXNoIGZsYWcKLSA9ZGFzaD0g OjogVXNlIHRoZSBzdHlsZSBvZiBkZXN0cnVjdHVyaW5nIGZvdW5kIGluIHRoZSA9ZGFzaD0gbGli cmFyeQogKFtbaW5mbzpkYXNoIy1sZXRdXSkuCiMrY2luZGV4OiBkZWZhdWx0IGZsYWcKLSA9ZGVm YXVsdD0gOjogVXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhbGwgb3B0aW9ucy4KCgpGb3Ig Y29udmVuaWVuY2UsIGFsbCBmbGFncyAoZXhjZXB0ID1kZWZhdWx0PSkgY2FuIGJlIHVuZG9uZSBi eSBwcmVmaXhpbmcgdGhlbQp3aXRoID0tPSAoYSBkYXNoIG9yIG1pbnVzIHNpZ24pLCB3aGljaCBy ZXZlcnRzIH5sb29weX4gdG8gaXRzIGRlZmF1bHQgYmVoYXZpb3IuCgpGb3IgZXhhbXBsZSwgaWYg eW91IGhhdmUgc2V0IH5sb29weS1kZWZhdWx0LWZsYWdzfiB0byA9KGRhc2gpPSBhbmQgd2lzaCB0 byB1c2UKdGhlIGRlZmF1bHQgZGVzdHJ1Y3R1cmluZyBtZXRob2QsIHlvdSBjYW4gdXNlID0oZmxh Z3MgZGVmYXVsdCk9IG9yID0oZmxhZ3MKLWRhc2gpPS4gIFRoZXNlIHByZWZpeGVkIGZsYWdzIG9u bHkgYXBwbHkgd2hlbiB0aGUgdW5wcmVmaXhlZCB2ZXJzaW9uIGlzIGFjdGl2ZS4KVGhhdCBpcywg PShmbGFncyBwY2FzZSAtZGFzaCk9IGlzIHRoZSBzYW1lIGFzIGp1c3QgPShmbGFncyBwY2FzZSk9 LCByZWdhcmRsZXNzCm9mIHRoZSB2YWx1ZSBvZiB+bG9vcHktZGVmYXVsdC1mbGFnc34sIGFzID1w Y2FzZT0gZGVzdHJ1Y3R1cmluZyB3aWxsIG92ZXJyaWRlCmFsbCB1c2VzIG9mID1kYXNoPSBkZXN0 cnVjdHVyaW5nIGFzIGl0IGNvbWVzIGxhdGVyIGluIHRoZSBsaXN0LiAgU2ltaWxhcmx5LAo9KGZs YWdzIC1kYXNoIGRhc2gpPSBhbmQgPShmbGFncyAtZGFzaCArZGFzaCk9IGxlYXZlID1kYXNoPSBk ZXN0cnVjdHVyaW5nCmVuYWJsZWQsIGFuZCA9KGZsYWdzICtkYXNoIC1kYXNoKT0gZGlzYWJsZXMg PWRhc2g9IGRlc3RydWN0dXJpbmcgYW5kIHVzZXMgdGhlCmRlZmF1bHQgYmVoYXZpb3IuCgojK2Np bmRleDogbG9vcHktZGFzaAojK2NpbmRleDogbG9vcHktcGNhc2UKIytjaW5kZXg6IGxvb3B5LXNl cQpUaGUgZGVzdHJ1Y3R1cmluZyBmbGFncyAoPXBjYXNlPSwgPXNlcT0sIGFuZCA9ZGFzaD0pIGFy ZSBzZXBhcmF0ZSBsaWJyYXJpZXMKKHJlc3BlY3RpdmVseSwgPWxvb3B5LXBjYXNlPSwgPWxvb3B5 LXNlcT0sIGFuZCA9bG9vcHktZGFzaD0pIHRoYXQgbXVzdCBiZQpsb2FkZWQgYWZ0ZXIgPWxvb3B5 PS4gIEN1cnJlbnRseSwgPWxvb3B5LWRhc2g9IGlzIGEgc2VwYXJhdGUgcGFja2FnZS4KCkJlbG93 IGFyZSBzb21lIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGRlc3RydWN0dXJpbmcgZmxhZ3MuICBUaGVz ZSBmbGFncyBhZmZlY3QKdGhlIGRlc3RydWN0dXJpbmcgb2Y6Ci0gaXRlcmF0aW9uIHZhcmlhYmxl cwotIGFjY3VtdWxhdGlvbiB2YXJpYWJsZXMKLSB2YXJpYWJsZXMgYm91bmQgYnkgdGhlIHNwZWNp YWwgbWFjcm8gYXJndW1lbnQgPXdpdGg9CgpUaGVzZSBmbGFncyBkbyBub3QgYWZmZWN0IHRoZSBk ZXN0cnVjdHVyaW5nIG9mIGdlbmVyYWxpemVkIHZhcmlhYmxlcwoofnNldGZ+LWFibGUgcGxhY2Vz KSBhcyB0aGUgbGlicmFyaWVzID1wY2FzZS5lbD0sID1zZXEuZWw9LCBhbmQgPWRhc2guZWw9IGRv IG5vdAp5ZXQgcHJvdmlkZSB0aGUgcmVxdWlyZWQgZnVuY3Rpb25hbGl0eS4KCiMrYmVnaW5fc3Jj IGVtYWNzLWxpc3AKICA7OyA9PiAoKDEgNCkgICAgICAgICAgICBjb2xsMQogIDs7ICAgICAoKDIg MykgKDUgNikpICAgIHdob2xlCiAgOzsgICAgICgyIDUpICAgICAgICAgICAgeAogIDs7ICAgICAo MyA2KSkgICAgICAgICAgIHkKICAocmVxdWlyZSAnbG9vcHktZGFzaCkKICAobG9vcHkgKGZsYWcg ZGFzaCkKICAgICAgICAgKGxpc3QgKGkgaikgJygoMSAoMiAzKSkgKDQgKDUgNikpKSkKICAgICAg ICAgKGNvbGxlY3QgY29sbDEgaSkKICAgICAgICAgKGNvbGxlY3QgKHdob2xlICZhcyB4IHkpIGop CiAgICAgICAgIChmaW5hbGx5LXJldHVybiBjb2xsMSB3aG9sZSB4IHkpKQoKICA7OyA9PiAoKDEg NCkgKDMgNikgMTAgMjAgbmlsIG5pbCkKICAocmVxdWlyZSAnbG9vcHktcGNhc2UpCiAgKGxvb3B5 IChmbGFnIHBjYXNlKQogICAgICAgICAod2l0aCAoKG9yIGBbLHYxICx2Ml0gYCgsdjMgLHY0KSkK ICAgICAgICAgICAgICAgIFsxMCAyMF0pKQogICAgICAgICAobGlzdCBlbGVtICcoKDEgKDIgMykp ICg0ICg1IDYpKSkpCiAgICAgICAgIChjb2xsZWN0IGAoLGEgKCxfICxiKSkgZWxlbSkKICAgICAg ICAgKGZpbmFsbHktcmV0dXJuIGEgYiB2MSB2MiB2MyB2NCkpCgogIDs7ID0+ICgxNCAyNikKICAo cmVxdWlyZSAnbG9vcHktc2VxKQogIChsb29weSAoZmxhZyBzZXEpCiAgICAgICAgICh3aXRoIChb djEgdjJdIFsxMCAyMF0pKQogICAgICAgICAobGlzdCAoaSAmcmVzdCBqKSAnKCgxIC4gMikgKDMg LiA0KSkpCiAgICAgICAgIChzdW0gc3VtMSBpKQogICAgICAgICAoc3VtIHN1bTIgaikKICAgICAg ICAgKGZpbmFsbHktcmV0dXJuICgrIHN1bTEgdjEpICgrIHN1bTIgdjIpKSkKIytlbmRfc3JjCgoK IythdHRyX3RleGluZm86IDp0YWcgV2FybmluZwojK2JlZ2luX3F1b3RlCkZvciBhY2N1bXVsYXRp b24gY29tbWFuZHMsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGEgdmFyaWFibGUgdGhhdCB3 YXMgdXNlZAppbiBkZXN0cnVjdHVyaW5nIHdhcyBtZWFudCB0byBiZSB1c2VyLWZhY2luZy4gIERl c3RydWN0dXJpbmcgc3lzdGVtcyBjYW4gY3JlYXRlCm5ldyB2YXJpYWJsZXMgYXMgdGhleSBwbGVh c2UsIHdoaWNoIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhY2N1bXVsYXRpb24KdmFyaWFibGVzLgoj K2VuZF9xdW90ZQoKCkNvbnNpZGVyIHRoZSBiZWxvdyBleGFtcGxlIGluIHdoaWNoIGEgaHlwb3Ro ZXRpY2FsIH5wY2FzZX4gcGF0dGVybiBjcmVhdGVzIHRoZQp2YXJpYWJsZSB+dGVtcG9yYXJ5P34g Zm9yIGRlc3RydWN0dXJpbmcuICBMb29weSBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciBp dAp3YXMgdGhlIHVzZXIgd2hvIGNyZWF0ZSB0aGUgdmFyaWFibGUsIG9yIHRoZSBkZXN0cnVjdHVy aW5nIHN5c3RlbS4gIEFzIGEgcmVzdWx0LAp+dGVtcG9yYXJ5P34gaXMgdHJlYXRlZCBhcyBhbiBh Y2N1bXVsYXRpb24gdmFyaWFibGUuICBTdWNoIGNhc2VzIGNhbiBiZSB1bndhbnRlZAphbmQgcHJv ZHVjZSBpbmVmZmljaWVudCBjb2RlLgoKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBQb3Nz aWJseSB1bmV4cGVjdGVkIGJlaGF2aW9yOgogIDs7CiAgOzsgPT4gKCgxIDIgMykgKDIgNCA2KSkK ICAobG9vcHkgKGZsYWcgK3BjYXNlKQogICAgICAgICAobGlzdCBpICcoMSAyIDMpKQogICAgICAg ICAoY29sbGVjdCAoYW5kIHdob2xlCiAgICAgICAgICAgICAgICAgICAgICAgKGxldCB0ZW1wb3Jh cnk/ICgqIDIgd2hvbGUpKSkKICAgICAgICAgICAgICAgICAgaSkKICAgICAgICAgKGZpbmFsbHkt cmV0dXJuIHdob2xlIHRlbXBvcmFyeT8pKQojK2VuZF9zcmMKCgoqIEN1c3RvbSBBbGlhc2VzCjpQ Uk9QRVJUSUVTOgo6Q1VTVE9NX0lEOiBjdXN0b20tYWxpYXNlcwo6REVTQ1JJUFRJT046IEhvdyB0 byBhZGQgb25lJ3Mgb3duIGFsaWFzZXMuCjpFTkQ6CgojK2NpbmRleDogY3VzdG9tIGFsaWFzZXMK QW4ge3t7ZGZuKGFsaWFzKX19fSBpcyBhbm90aGVyIG5hbWUgZm9yIGEgY29tbWFuZCBvciBzcGVj aWFsIG1hY3JvIGFyZ3VtZW50Lgp+bG9vcHl+IGNvbWVzIHdpdGggc2V2ZXJhbCBidWlsdC1pbiBh bGlhc2VzLCBzdWNoIGFzID1zdHJpbmc9IGZvciB0aGUgY29tbWFuZAo9YXJyYXk9IG9yID1lbHNl PSBmb3IgdGhlIHNwZWNpYWwgbWFjcm8gYXJndW1lbnQgPWFmdGVyLWRvPS4KCnwgQ29tbWFuZCBv ciBTcGVjaWFsIE1hY3JvIEFyZ3VtZW50IHwgQnVpbHQtSW4gQWxpYXNlcyAgICAgICAgICAgfAp8 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLXwKfCA9YXJyYXk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA9c3RyaW5nPSAg ICAgICAgICAgICAgICAgICB8CnwgPXNlcS1yZWY9ICAgICAgICAgICAgICAgICAgICAgICAgIHwg PXNlcXVlbmNlLXJlZj0sID1zZXFmPSAgICAgfAp8ID1hZnRlci1kbz0gICAgICAgICAgICAgICAg ICAgICAgICB8ID1hZnRlcj0sID1lbHNlPSwgPWVsc2UtZG89IHwKCkFuIGFsaWFzIHdvcmtzIHRo ZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kIG9yIHNwZWNpYWwgbWFjcm8gYXJndW1lbnQu ClRoZXkgYXJlIHByb3ZpZGVkIGZvciBjbGFyaXR5IGFuZCBjb252ZW5pZW5jZS4KCiMrYmVnaW5f c3JjIGVtYWNzLWxpc3AKICA7OyA9PiAoImEiICJiIiAiYyIgImQiKQogIChsb29weSAoYXJyYXkg aSAiYWJjZCIpCiAgICAgICAgIChjb2xsZWN0IChjaGFyLXRvLXN0cmluZyBpKSkpCgogIDs7ID0+ ICgiYSIgImIiICJjIiAiZCIpCiAgKGxvb3B5IChzdHJpbmcgaSAiYWJjZCIpCiAgICAgICAgIChj b2xsZWN0IChjaGFyLXRvLXN0cmluZyBpKSkpCiMrZW5kX3NyYwoKIytmaW5kZXg6IGxvb3B5LWRl ZmFsaWFzClVzZXJzIGNhbiBkZWZpbmUgY3VzdG9tIGFsaWFzZXMgdXNpbmcgdGhlIG1hY3JvIH5s b29weS1kZWZhbGlhc34sIHdoaWNoIHRha2VzIGFuCmFsaWFzIGFuZCBhIGRlZmluaXRpb24gYXMg YXJndW1lbnRzLiAgVGhlc2UgYXJndW1lbnRzIGNhbiBiZSBxdW90ZWQgb3IgdW5xdW90ZWQuCgoj K2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgKGxvb3B5LWRlZmFsaWFzIGl0ZW1zIGFycmF5KQoKICA7 OyA9PiAoMSAyIDMpCiAgKGxvb3B5IChpdGVtcyBpIFsxIDIgM10pCiAgICAgICAgIChjb2xsZWN0 IGkpKQojK2VuZF9zcmMKClRoZSBkZWZpbml0aW9uIG11c3QgZXhpc3QgZm9yIHRoZSBhbGlhcyB0 byBiZSBkZWZpbmVkIGNvcnJlY3RseS4gIERlZmluaXRpb25zCmNhbiB0aGVtc2VsdmVzIGJlIGFs aWFzZXMsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWxyZWFkeSBkZWZpbmVkLiAgSW4gb3RoZXIgd29y ZHMsCndoZW4gYWxpYXNpbmcgY3VzdG9tIGNvbW1hbmRzLCB5b3Ugc2hvdWxkIGRlZmluZSB0aGUg YWxpYXMgL2FmdGVyLyBkZWZpbmluZyB0aGUKY29tbWFuZCAoW1sjYWRkaW5nLWN1c3RvbS1jb21t YW5kc11dKS4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBEZWZpbmUgYW4gYWxpYXMgZm9y IHRoZSBgaXRlbXMnIGFsaWFzIGZyb20gYWJvdmU6CiAgKGxvb3B5LWRlZmFsaWFzIGl0ZW1zMiBp dGVtcykKCiAgOzsgPT4gKDEgMiAzKQogIChsb29weSAoaXRlbXMyIGkgWzEgMiAzXSkKICAgICAg ICAgKGNvbGxlY3QgaSkpCiMrZW5kX3NyYwoKV2hlbiBsb29raW5nIGZvciBob3cgdG8gcGFyc2Ug YSBjb21tYW5kLCB+bG9vcHl+IHdpbGwgY2hlY2sgYWxpYXNlcyBiZWZvcmUKY2hlY2tpbmcgdGhl IHRydWUgbmFtZXMgb2YgY29tbWFuZHMuICBFZmZlY3RpdmVseSwgdGhpcyBtZWFucyB0aGF0IGNv bW1hbmRzIGNhbgpiZSBvdmVycmlkZGVuIGJ5IGFsaWFzZXMsIHRob3VnaCB0aGlzIGlzIGRpc2Nv dXJhZ2VkLiAgU3VjaCBjb21tYW5kcyBjYW4gc3RpbGwKYmUgYWNjZXNzZWQgdmlhIHRoZWlyIG90 aGVyIG5hbWVzLgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogIDs7IERlZmluZSBgY29ucycgYXMg YW4gYWxpYXMgb2YgYGFycmF5JzoKICAobG9vcHktZGVmYWxpYXMgY29ucyBhcnJheSkKCiAgOzsg PT4gKDEgMiAzKQogIChsb29weSAoY29ucyBpIFsxIDIgM10pCiAgICAgICAgIChjb2xsZWN0IGkp KQoKICA7OyBFUlJPUjogQ2FuIG5vIGxvbmdlciB1c2UgdGhlIG9yaWdpbmFsIGRlZmluaXRpb246 CiAgKGxvb3B5IChjb25zIGkgJygxIDIgMykpCiAgICAgICAgIChjb2xsZWN0IGkpKQoKICA7OyBP dGhlciBuYW1lcyBzdGlsbCB3b3JrOgogIDs7ID0+ICgoMSAyIDMpICgyIDMpICgzKSkKICAobG9v cHkgKGNvbnNlcyBpICcoMSAyIDMpKQogICAgICAgICAoY29sbGVjdCBpKSkKIytlbmRfc3JjCgpT cGVjaWFsIG1hY3JvIGFyZ3VtZW50cyAoW1sjbWFjcm8tYXJndW1lbnRzXVtTcGVjaWFsIE1hY3Jv IEFyZ3VtZW50c11dKSBjYW4gYWxzbyBiZSBhbGlhc2VkLiAgVXNpbmcgYW4KYWxpYXMgZG9lcyBu b3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgdGhlIHNwZWNpYWwgbWFjcm8gYXJndW1lbnRzIGFyZSBw YXJzZWQKYmVmb3JlIGxvb3AgY29tbWFuZHMuCgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgKGxv b3B5LWRlZmFsaWFzIGFzIHdpdGgpCgogIDs7ID0+ICg4IDkgMTApCiAgKGxvb3B5IChhcyAoYSA3 KSkKICAgICAgICAgKGxpc3QgaSAnKDEgMiAzKSkKICAgICAgICAgKGNvbGxlY3QgKCsgaSA3KSkp CiMrZW5kX3NyYwoKIyt2aW5kZXg6IGxvb3B5LWFsaWFzZXMKVGhlIG1hY3JvIH5sb29weS1kZWZh bGlhc34gbW9kaWZpZXMgdGhlIHVzZXIgb3B0aW9uIH5sb29weS1hbGlhc2Vzfi4gIEhvd2V2ZXIs CndoaWxlIH5sb29weX4gaXMgc3RpbGwgY2hhbmdpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGF2 b2lkIG1vZGlmeWluZyB0aGlzCnZhcmlhYmxlIGRpcmVjdGx5LCBhcyBpdHMgc3RydWN0dXJlIG1h eSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gIH5sb29weS1kZWZhbGlhc34KaXMgdGhlIGZvcndhcmQt Y29tcGF0aWJsZSB3YXkgb2YgY3JlYXRpbmcgYWxpYXNlcy4KCiogQ3VzdG9tIENvbW1hbmRzCjpQ Uk9QRVJUSUVTOgo6Q1VTVE9NX0lEOiBhZGRpbmctY3VzdG9tLWNvbW1hbmRzCjpERVNDUklQVElP TjogRXh0ZW5kaW5nIGBsb29weScgd2l0aCBwZXJzb25hbCBjb21tYW5kcy4KOkVORDoKClRoaXMg c2VjdGlvbiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBob3cgbG9vcCBjb21tYW5kcyB3b3Jr IGFuZCBob3cgb25lIGNhbgphZGQgY3VzdG9tIGNvbW1hbmRzIHRvIH5sb29weX4uICBUd28gZXhh bXBsZXMgYXJlIHByb3ZpZGVkLgoKKiogQmFja2dyb3VuZCBJbmZvCjpQUk9QRVJUSUVTOgo6Q1VT VE9NX0lEOiBiYWNrZ3JvdW5kLWluZm8KOkRFU0NSSVBUSU9OOiBUaGUgaW50ZXJuYWxzIG9mIGBs b29weScuCjpFTkQ6CgojK2NpbmRleDogaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9ucwpUaGUgY29y ZSB3b3JraW5nIG9mIH5sb29weX4gaXMgdGFraW5nIGEgbG9vcCBjb21tYW5kIGFuZCBnZW5lcmF0 aW5nIGNvZGUgdGhhdApiZWNvbWVzIHBhcnQgb2YgYSB+d2hpbGV+LWxvb3AuICBUaGlzIGNvZGUg aXMgcmVwcmVzZW50ZWQgYnkKe3t7ZGZuKGluc3RydWN0aW9ucyl9fX0sIHdoaWNoIGJhc2ljYWxs eSBkZXNjcmliZSB3aGVyZSBhbmQgaG93IGNvZGUgaXMgaW5zZXJ0ZWQKaW50byBhbmQgYXJvdW5k IGEgdGVtcGxhdGUgb2YgYSB+d2hpbGV+LWxvb3AuCgpTb21lIGV4YW1wbGVzIG9mIGluc3RydWN0 aW9ucyBhcmU6CgotIERlY2xhcmluZyBhIGdpdmVuIHZhcmlhYmxlIGluIGEgfmxldH4tbGlrZSBm b3JtIHRvIG1ha2Ugc3VyZSBpdCdzIGxvY2FsbHkKICBzY29wZWQuCgotIERlY2xhcmluZyBhIGdl bmVyYXRlZCB2YXJpYWJsZSBpbiBhIH5sZXR+LWxpa2UgZm9ybSB0byBjb250YWluIGEgZ2l2ZW4g dmFsdWUuCgotIEFkZGluZyBhIGNvbmRpdGlvbiBmb3IgY29udGludWluZy9leGl0aW5nIHRoZSBs b29wLgoKLSBBZGRpbmcgY29kZSB0byBiZSBydW4gZHVyaW5nIHRoZSBtYWluIHByb2Nlc3Npbmcg c2VjdGlvbiBvZiB0aGUgfndoaWxlfi1sb29wLgogIFRoaXMgbG9jYXRpb24gaXMgcmVmZXJyZWQg dG8gYXMgdGhlIHt7e2RmbihtYWluIGJvZHkpfX19IG9mIHRoZSBsb29wLgoKLSBBZGRpbmcgY29k ZSB0byBiZSBydW4gYWZ0ZXIgdGhlIG1haW4gcHJvY2Vzc2luZyBzZWN0aW9uLCBzdWNoIGFzIGZv ciB1cGRhdGluZwogIHZhcmlhYmxlcy4gIFRoaXMgbG9jYXRpb24gaXMgcmVmZXJyZWQgdG8gYXMg dGhlIHt7e2RmbihsYXR0ZXIgYm9keSl9fX0gb2YgdGhlCiAgbG9vcC4KCgpGb3IgZXhhbXBsZSwg cGFyc2luZyB0aGUgY29tbWFuZCA9KGxpc3QgaSAnKDEgMiAzKSk9IHByb2R1Y2VzIHRoZSBmb2xs b3dpbmcgbGlzdApvZiBpbnN0cnVjdGlvbnMuICBTb21lIGNvbW1hbmRzIHJlcXVpcmUgdGhlIGNy ZWF0aW9uIG9mIHVuaXF1ZSB0ZW1wb3JhcnkKdmFyaWFibGVzLCBzdWNoIGFzID1saXN0LTIxMT0g aW4gdGhlIGJlbG93IG91dHB1dC4KCiMrQkVHSU5fU1JDIGVtYWNzLWxpc3AKICAoKGxvb3B5LS1p dGVyYXRpb24tdmFycyAobGlzdC0yMTEgJygxIDIgMykpKQogICAobG9vcHktLWl0ZXJhdGlvbi12 YXJzIChpIG5pbCkpCiAgIChsb29weS0tcHJlLWNvbmRpdGlvbnMgKGNvbnNwIGxpc3QtMjExKSkK ICAgKGxvb3B5LS1tYWluLWJvZHkgICAgICAoc2V0cSBpIChjYXIgbGlzdC0yMTEpKSkKICAgKGxv b3B5LS1sYXR0ZXItYm9keSAgICAoc2V0cSBsaXN0LTIxMSAoY2RyIGxpc3QtMjExKSkpKQojK0VO RF9TUkMKClRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGluc3RydWN0aW9uIGRlc2NyaWJlcyB3aGVy ZSB0byBpbnNlcnQgY29kZSBpbnRvIHRoZQp0ZW1wbGF0ZS4gIFRoZSBzZWNvbmQgZWxlbWVudCBv ZiBhbiBpbnN0cnVjdGlvbiBpcyB0aGUgaW5zZXJ0ZWQgY29kZS4gIFlvdSBjYW4Kc2VlIHRoYXQg bm90IGFsbCBvZiB0aGUgY29kZSB0byBiZSBpbnNlcnRlZCBpcyBhIHZhbGlkIExpc3AgZm9ybS4g IEZvciBleGFtcGxlLAp0aGUgYWJvdmUgaW5zdHJ1Y3Rpb24gcmVmZXJlbmNpbmcgfmxvb3B5LS1p dGVyYXRpb24tdmFyc34gaW5zZXJ0cyBhIGJpbmRpbmcgZm9yCnRoZSB2YXJpYWJsZSA9bGlzdC0y MTE9IGludG8gYSB+bGV0fi1saWtlIGZvcm0uCgp8IFBsYWNlICAgICAgICAgICAgICAgICAgIHwg Q29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8ID1sb29weS0taXRlcmF0 aW9uLXZhcnM9IHwgPShsaXN0LTIxMSAnKDEgMiAzKSk9ICAgICAgICAgICAgfAp8ID1sb29weS0t bGF0dGVyLWJvZHk9ICAgIHwgPShzZXRxIGxpc3QtMjExIChjZHIgbGlzdC0yMTEpKT0gfAp8ID1s b29weS0tcHJlLWNvbmRpdGlvbnM9IHwgPShjb25zcCBsaXN0LTIxMSk9ICAgICAgICAgICAgICAg fAp8ID1sb29weS0taXRlcmF0aW9uLXZhcnM9IHwgPShpIG5pbCk9ICAgICAgICAgICAgICAgICAg ICAgICAgfAp8ID1sb29weS0tbWFpbi1ib2R5PSAgICAgIHwgPShzZXRxIGkgKGNhciBsaXN0LTIx MSkpKT0gICAgICAgfAoKIytjaW5kZXg6IGluc3RydWN0aW9uIG9yZGVyCkluc3RydWN0aW9ucyBh cmUgYXBwbGllZCBpbiBvcmRlciBpbiBzdWNoIGEgd2F5IHRoYXQgZWFybGllciBpbnN0cnVjdGlv bnMgYXJlCi9ub3QvIG92ZXJyaWRkZW4gYnkgbGF0ZXIgaW5zdHJ1Y3Rpb25zLiAgRm9yIGV4YW1w bGUsIGlmIHRoZSBzcGVjaWFsIG1hY3JvCmFyZ3VtZW50ID13aXRoPSBzZXRzIGEgdmFyaWFibGUn cyB2YWx1ZSwgdGhhdCB2YWx1ZSB3aWxsIG5vdCBiZSBvdmVycmlkZGVuIGJ5CmNvbW1hbmRzIHdo aWNoIG1pZ2h0IHRyeSB0byBpbml0aWFsaXplIHRoYXQgdmFyaWFibGUgdG8gfm5pbH4uICBUaGlz IHdvcmtzCmJlY2F1c2Ugc3BlY2lhbCBtYWNybyBhcmd1bWVudHMgYXJlIGFsd2F5cyBwYXJzZWQg YmVmb3JlIGxvb3AgY29tbWFuZHMuCgojK2ZpbmRleDogbG9vcHktLXBhcnNlLWxvb3AtY29tbWFu ZAojK2ZpbmRleDogbG9vcHktLXBhcnNlLWxvb3AtY29tbWFuZHMKQ29tbWFuZHMgYXJlIHBhcnNl ZCBieSB+bG9vcHktLXBhcnNlLWxvb3AtY29tbWFuZH4sIHdoaWNoIHJlY2VpdmVzIGEgY29tbWFu ZApjYWxsLCBzdWNoIGFzID0obGlzdCBpICcoMSAyIDMpKT0sIGFuZCByZXR1cm5zIGEgbGlzdCBv ZiBpbnN0cnVjdGlvbnMuICBJdCBkb2VzCnRoaXMgYnkgc2VhcmNoaW5nIGZvciBhbiBhcHByb3By aWF0ZSBjb21tYW5kLXNwZWNpZmljIHBhcnNpbmcgZnVuY3Rpb24gaW4Kfmxvb3B5LWFsaWFzZXN+ IGFuZCB1bHRpbWF0ZWx5IGluIH5sb29weS1jb21tYW5kLXBhcnNlcnN+LiAgRm9yIHBhcnNpbmcg bXVsdGlwbGUKY29tbWFuZHMgaW4gb3JkZXIsIHRoZXJlIGlzIH5sb29weS0tcGFyc2UtbG9vcC1j b21tYW5kc34sIHdoaWNoIHdyYXBzIHRoZQpzaW5nbGUtY29tbWFuZCB2ZXJzaW9uLgoKRm9yIGV4 YW1wbGUsIGNvbnNpZGVyIHRoZSBmdW5jdGlvbiB+bG9vcHktLXBhcnNlLWlmLWNvbW1hbmR+LCB3 aGljaCBwYXJzZXMgdGhlCj1pZj0gbG9vcCBjb21tYW5kLiAgSXQgbmVlZHMgdG8gY2hlY2sgdGhl IGluc3RydWN0aW9ucyBvZiB0aGUgc3ViLWNvbW1hbmRzCnBhc3NlZCB0byA9aWY9LCBsb29raW5n IGZvciBjb2RlIHRoYXQgd291bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgbG9vcCdzIG1haW4KYm9k eSAoYXMgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgaW5zdHJ1Y3Rpb24p LiAgT25jZSBmb3VuZCwgaXQKd3JhcHMgdGhhdCBjb2RlIHdpdGggYW4gfmlmfi1mb3JtLgoKIyti ZWdpbl9zcmMgZW1hY3MtbGlzcAogIDs7IEV4YW1wbGUgaW5zdHJ1Y3Rpb25zIHRoYXQgY291bGQg YmUgZ2VuZXJhdGVkIGJ5ICJzZXQiIGFuZCAiaWYiIGNvbW1hbmRzOgogIDs7CiAgOzsgPT4gKChs b29weS0tb3RoZXItdmFycyAoaSBuaWwpKQogIDs7ICAgICAobG9vcHktLW1haW4tYm9keSAoc2V0 cSBpIDEpKSkKICAobG9vcHktLXBhcnNlLWxvb3AtY29tbWFuZCAnKHNldCBpIDEpKQoKICA7OyA9 PiAoKGxvb3B5LS1vdGhlci12YXJzIChpIG5pbCkpCiAgOzsgICAgIChsb29weS0tbWFpbi1ib2R5 IChpZiAobXktY29uZGl0aW9uKQogIDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEg aSAxKQogIDs7ICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGkgMikpKSkKICAobG9vcHkt LXBhcnNlLWlmLWNvbW1hbmQgJyhpZiAobXktY29uZGl0aW9uKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChzZXQgaSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0 IGkgMikpKQojK2VuZF9zcmMKCkZvciB0aGUgcHVycG9zZSBvZiB0aGlzIGV4YW1wbGUsIGJlbG93 IGlzIGEgdmVyc2lvbiBvZiB0aGUgcGFyc2luZyBmdW5jdGlvbiBtYWRlCm9mIHRoZSBiYXNpYyBM aXNwIGZlYXR1cmVzIHdpdGggd2hpY2ggeW91IGFyZSBmYW1pbGlhci4gIFRoZSBhY3R1YWwgZGVm aW5pdGlvbgptYWtlcyB1c2Ugb2YgbW9yZSBjb252ZW5pZW50IEVtYWNzIExpc3AgbGlicmFyaWVz IGFuZCBjYW4gYmUgc2VlbiBpbiB0aGUgbGlicmFyeQp7e3tmaWxlKGxvb3B5LWNvbW1hbmRzLmVs KX19fS4KCiMrQkVHSU5fU1JDIGVtYWNzLWxpc3AKICAocmVxdWlyZSAnbG9vcHkpCgogIChkZWZ1 biBsb29weS0tcGFyc2UtaWYtY29tbWFuZCAoYXJnKQogICAgIlBhcnNlIHRoZSBgaWYnIGxvb3Ag Y29tbWFuZCB1c2FnZSBBUkcuCiAgQVJHIGlzIG9mIHRoZSBmb3JtIChpZiBDT05ESVRJT04gSUYt VFJVRSAmcmVzdCBJRi1GQUxTRSkuIgoKICAgIChsZXQgKChjb25kaXRpb24gKGNhZHIgYXJnKSkg ICA7IFNlY29uZCBlbGVtZW50IG9mIGBhcmcnLgogICAgICAgICAgKGlmLXRydWUgICAoY2FkZHIg YXJnKSkgIDsgVGhpcmQgZWxlbWVudCBvZiBgYXJnJy4KICAgICAgICAgIChpZi1mYWxzZSAgKGNk ZGRyIGFyZykpKSA7IFJlbWFpbmluZyBlbGVtZW50cyBvZiBgYXJnJy4KCiAgICAgIDs7IFRoZSBt YWluIHByb2Nlc3Npbmcgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBzZXBhcmF0ZSBpbnN0cnVjdGlv bnMKICAgICAgOzsgZm9yIHRoZSBsb29wJ3MgbWFpbiBib2R5IGZyb20gb3RoZXIgaW5zdHJ1Y3Rp b25zLAogICAgICA7OyBhbmQgdG8gdGhlbiB3cmFwIHRob3NlIG1haW4tYm9keSBpbnN0cnVjdGlv bnMgd2l0aCBhbgogICAgICA7OyBgaWYnIHNwZWNpYWwgZm9ybS4KICAgICAgKGxldCAoKGZ1bGwt aW5zdHJ1Y3Rpb25zKQogICAgICAgICAgICAoaWYtdHJ1ZS1tYWluLWJvZHkpCiAgICAgICAgICAg IChpZi1mYWxzZS1tYWluLWJvZHkpCiAgICAgICAgICAgIDs7IFRoaXMgdmFyaWFibGUgaXMganVz dCBzbyB0aGF0IGl0ZXJhdGlvbiBjb21tYW5kcyBrbm93IHdoZW4KICAgICAgICAgICAgOzsgdGhl eSBhcmUgYmVpbmcgdXNlZCBhd2F5IGZyb20gdGhlIHRvcCBsZXZlbCBvZiB0aGUgbG9vcCdzCiAg ICAgICAgICAgIDs7IHN0cnVjdHVyZSAod2hpY2ggaXMgYW4gZXJyb3IpLgogICAgICAgICAgICAo bG9vcHktLWluLXN1Yi1sZXZlbCB0KSkKCiAgICAgICAgOzsgUHJvY2VzcyB0aGUgaW5zdHJ1Y3Rp b25zIGZvciB0aGUgY29tbWFuZCB0aGF0IHNob3VsZCBydW4gaWYgdGhlCiAgICAgICAgOzsgY29u ZGl0aW9uIGlzIHRydWUuCiAgICAgICAgKGRvbGlzdCAoaW5zdHJ1Y3Rpb24gKGxvb3B5LS1wYXJz ZS1sb29wLWNvbW1hbmQgaWYtdHJ1ZSkpCiAgICAgICAgICAoaWYgKGVxICdsb29weS0tbWFpbi1i b2R5IChjYXIgaW5zdHJ1Y3Rpb24pKQogICAgICAgICAgICAgIChwdXNoIChjYWRyIGluc3RydWN0 aW9uKSBpZi10cnVlLW1haW4tYm9keSkKICAgICAgICAgICAgKHB1c2ggaW5zdHJ1Y3Rpb24gZnVs bC1pbnN0cnVjdGlvbnMpKSkKCiAgICAgICAgOzsgUHJvY2VzcyB0aGUgaW5zdHJ1Y3Rpb25zIGZv ciB0aGUgY29tbWFuZHMgdGhhdCBzaG91bGQgcnVuCiAgICAgICAgOzsgaWYgdGhlIGNvbmRpdGlv biBpcyBmYWxzZS4KICAgICAgICAoZG9saXN0IChpbnN0cnVjdGlvbiAobG9vcHktLXBhcnNlLWxv b3AtY29tbWFuZHMgaWYtZmFsc2UpKQogICAgICAgICAgKGlmIChlcSAnbG9vcHktLW1haW4tYm9k eSAoY2FyIGluc3RydWN0aW9uKSkKICAgICAgICAgICAgICAocHVzaCAoY2FkciBpbnN0cnVjdGlv bikgaWYtZmFsc2UtbWFpbi1ib2R5KQogICAgICAgICAgICAocHVzaCBpbnN0cnVjdGlvbiBmdWxs LWluc3RydWN0aW9ucykpKQoKICAgICAgICA7OyBOb3RlOiBgcHVzaCcgYWRkcyBlbGVtZW50cyB0 byB0aGUgZnJvbnQgb2YgYSBsaXN0LAogICAgICAgIDs7ICAgICAgIHNvIHdlIG5lZWQgdG8gcmV2 ZXJzZSB0aGVzZSBsaXN0cyBiZWZvcmUgcmV0dXJuaW5nCiAgICAgICAgOzsgICAgICAgdGhlIG5l dyBsaXN0IG9mIGluc3RydWN0aW9ucy4KCiAgICAgICAgOzsgYGxvb3B5LS1wYXJzZS1sb29wLWNv bW1hbmQnIGFsd2F5cyByZXR1cm5zIGEgbGlzdCBvZiBpbnN0cnVjdGlvbnMuCiAgICAgICAgOzsg Rm9yIHNvbWUgY29tbWFuZHMsIHRoYXQgbWVhbnMgd3JhcHBpbmcgbXVsdGlwbGUgaW5zdHJ1Y3Rp b25zIGluCiAgICAgICAgOzsgYSBgcHJvZ24nIGZvcm0uICBGb3Igb3RoZXJzLCB3ZSBuZWVkIHRv IGV4dHJhY3QgdGhlIG9ubHkgZWxlbWVudC4KICAgICAgICAoc2V0cSBpZi10cnVlLW1haW4tYm9k eQogICAgICAgICAgICAgIChpZiAoPSAxIChsZW5ndGggaWYtdHJ1ZS1tYWluLWJvZHkpKQogICAg ICAgICAgICAgICAgICAoY2FyIGlmLXRydWUtbWFpbi1ib2R5KQogICAgICAgICAgICAgICAgKGNv bnMgJ3Byb2duIChucmV2ZXJzZSBpZi10cnVlLW1haW4tYm9keSkpKSkKCiAgICAgICAgOzsgUmV0 dXJuIHRoZSBuZXcsIGZ1bGwgbGlzdCBvZiBpbnN0cnVjdGlvbnMuCiAgICAgICAgKGNvbnMgYChs b29weS0tbWFpbi1ib2R5CiAgICAgICAgICAgICAgICAuIChpZiAsY29uZGl0aW9uCiAgICAgICAg ICAgICAgICAgICAgICAsaWYtdHJ1ZS1tYWluLWJvZHkKICAgICAgICAgICAgICAgICAgICAsQChu cmV2ZXJzZSBpZi1mYWxzZS1tYWluLWJvZHkpKSkKICAgICAgICAgICAgICAobnJldmVyc2UgZnVs bC1pbnN0cnVjdGlvbnMpKSkpKQojK0VORF9TUkMKCkluIGdlbmVyYWwsIHRoZSBjb2RlIG9mIGNv bW1hbmQgcGFyc2VycyBpcyBub3QgY29tcGxpY2F0ZWQuICBUaGUgaGFyZGVzdCBwYXJ0IG9mCndy aXRpbmcgdGhlIHBhcnNlciBpcyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBjb2RlIGluc2VydGVkIGlu dG8gdGhlIH53aGlsZX4tbG9vcAp0ZW1wbGF0ZSBlbmRzIHVwIGluIHRoZSBjb3JyZWN0IG9yZGVy LgoKIytjaW5kZXg6IHRlbXBsYXRlIHZhcmlhYmxlcwpBIGxvb3AgY29tbWFuZCBoYXMgNyBtYWlu IHBsYWNlcyB0byBwdXQgY29kZToKCiMrdmluZGV4OiBsb29weS0tZ2VuZXJhbGl6ZWQtdmFycwot ID1sb29weS0tZ2VuZXJhbGl6ZWQtdmFycz0gOjogTGlzdHMgb2YgYSBzeW1ib2wgYW5kIGEgbWFj cm8gZXhwYW5zaW9uIHRoYXQgd2lsbAogIGJlIGdpdmVuIHRvID1jbC1zeW1ib2wtbWFjcm9sZXQ9 LiAgVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBuYW1lZCB+c2V0Zn4tYWJsZQogIHBsYWNlcy4gIFRo ZSBleHBhbnNpb24geW91IHVzZSBkZXBlbmRzIG9uIHRoZSBraW5kIG9mIHNlcXVlbmNlIGFuZCBo b3cgdGhlIGl0CiAgaXMgdXBkYXRlZC4KCiAgRm9yIGV4YW1wbGUsID0obGlzdC1yZWYgaSBteS1s aXN0KT0gZGVjbGFyZXMgPWk9IHRvIGJlIGEgc3ltYm9sIHdoaWNoIGV4cGFuZHMKICB0byA9KGNh ciBURU1QLVZBUik9LCBpbiB3aGljaCA9VEVNUC1WQVI9IGhvbGRzIHRoZSB2YWx1ZSBvZiA9bXkt bGlzdD0uICBBdCB0aGUKICBlbmQgb2YgdGhlIGxvb3AgYm9keSwgPVRFTVAtVkFSPSBpcyBzZXQg dG8gaXRzID1jZHI9LCBlbnN1cmluZyB0aGF0IHRoZSBuZXh0CiAgY2FsbCB0byA9Y2FyPSByZXR1 cm5zIHRoZSBjb3JyZWN0IHZhbHVlLgoKIyt2aW5kZXg6IGxvb3B5LS1pdGVyYXRpb24tdmFycwot ID1sb29weS0taXRlcmF0aW9uLXZhcnM9IDo6IExpc3RzIG9mIGEgc3ltYm9sIGFuZCBhbiBleHBy ZXNzaW9uIHRoYXQgd2lsbCBiZQogIGdpdmVuIHRvIH5sZXQqfi4gIFRoaXMgaXMgdXNlZCBmb3Ig aW5pdGlhbGl6aW5nIHZhcmlhYmxlcyBuZWVkZWQgZm9yIGl0ZXJhdGlvbgogIGNvbW1hbmRzLCBz dWNoIGFzIHRoZSA9aT0gaW4gPShsaXN0IGkgJygxIDIgMykpPSBvciB0byBzdG9yZSB0aGUgbGlz dCA9JygxIDIKICAzKT0gaW4gPShsaXN0IGkgJygxIDIgMykpPS4gIFRoaXMgYWxzbyBpbmNsdWRl cyB2YXJpYWJsZXMgbmVlZGVkIGZvcgogIGRlc3RydWN0dXJpbmcgZm9yIHNhaWQgY29tbWFuZHMu CgogIExvb3B5IHdpbGwgc2lnbmFsIGFuIGVycm9yIGlmIGl0ZXJhdGlvbiB2YXJpYWJsZXMgd291 bGQgYmUgaW5pdGlhbGl6ZWQKICBtdWx0aXBsZSB0aW1lcy4gIEZvciBleGFtcGxlLCBzdWNoIGFz IGlmIHRoZSB2YXJpYWJsZSB3YXMgdXNlZCBieSBtdWx0aXBsZQogIGl0ZXJhdGlvbiBjb21tYW5k cywgdGhhdCBjb3VsZCByZXN1bHQgaW4gZXhwYW5kaW5nIGludG8gaW5jb3JyZWN0IGNvZGUgd2hp Y2gKICB3b3VsZCBmYWlsIGR1cmluZyBydW50aW1lCgojK3ZpbmRleDogbG9vcHktLWFjY3VtdWxh dGlvbi12YXJzCi0gPWxvb3B5LS1hY2N1bXVsYXRpb24tdmFycz0gOjogTGlzdHMgb2YgYSBzeW1i b2wgYW5kIGFuIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlCiAgZ2l2ZW4gdG8gfmxldCp+LiAgVGhp cyBpcyB1c2VkIGZvciBpbml0aWFsaXppbmcgdmFyaWFibGVzIG5lZWRlZCBmb3IKICBhY2N1bXVs YXRpb24gY29tbWFuZHMsIHN1Y2ggYXMgdGhlID1jb2xsPSBpbiA9KGNvbGxlY3QgY29sbCBteS12 YWwpPSBvciBhbnkKICB2YXJpYWJsZXMgbmVlZGVkIGZvciBkZXN0cnVjdHVyaW5nIGZvciBzYWlk IGNvbW1hbmRzLgoKIyt2aW5kZXg6IGxvb3B5LS1vdGhlci12YXJzCi0gPWxvb3B5LS1vdGhlci12 YXJzPSA6OiBMaXN0cyBvZiBhIHN5bWJvbCBhbmQgYW4gZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUK ICBnaXZlbiB0byB+bGV0Kn4uICBUaGlzIGlzIHVzZWQgZm9yIGluaXRpYWxpemluZyB2YXJpYWJs ZXMgbmVlZGVkIGZvcgogIGdlbmVyaWMgY29tbWFuZHMsIHN1Y2ggYXMgdGhlID1teS12YXI9IGlu ID0oc2V0IG15LXZhciAyKT0gb3IgYW55CiAgdmFyaWFibGVzIG5lZWRlZCBmb3IgZGVzdHJ1Y3R1 cmluZyBmb3Igc2FpZCBjb21tYW5kLgoKIyt2aW5kZXg6IGxvb3B5LS1wcmUtY29uZGl0aW9ucwot ID1sb29weS0tcHJlLWNvbmRpdGlvbnM9IDo6IEV4cHJlc3Npb25zIHRoYXQgZGV0ZXJtaW5lIGlm IHRoZSA9d2hpbGU9IGxvb3AKICBydW5zL2NvbnRpbnVlcywgc3VjaCBhcyB3aGV0aGVyIGEgbGlz dCBzdGlsbCBoYXMgZWxlbWVudHMgaW4gaXQuICBJZiB0aGVyZSBpcwogIG1vcmUgdGhhbiBvbmUg ZXhwcmVzc2lvbiwgdGhhbiBhbGwgZXhwcmVzc2lvbnMgYXJlIHVzZWQgaW4gYW4gfmFuZH4gc3Bl Y2lhbAogIGZvcm0uCgojK3ZpbmRleDogbG9vcHktLW1haW4tYm9keQotID1sb29weS0tbWFpbi1i b2R5PSA6OiBFeHByZXNzaW9ucyB0aGF0IG1ha2UgdXAgdGhlIG1haW4gYm9keSBvZiB0aGUgbG9v cC4gIFRoZQogICJtYWluIiBib2R5IG9mIHRoZSBsb29wIGlzIHNpbWlsYXIgaW4gdXNlIHRvIHRo ZSBhcmd1bWVudHMgZ2l2ZW4gdG8sIGZvcgogIGV4YW1wbGUsIHRoZSB+ZG9saXN0fiBtYWNyby4g IENvZGUgdGhhdCBjYW4gYmUgcGxhY2VkIGluIHRoZSBtYWluIGJvZHkKICBpbmNsdWRlczoKICAt IGNvZGUgdGhhdCB1cGRhdGluZyBzb21lIGl0ZXJhdGlvbiB2YXJpYWJsZXMsIHN1Y2ggYXMgdGhl ID1pPSBpbiA9KGxpc3QgaQogICAgbXktbGlzdCk9CiAgLSBjb2RlIHRoYXQgdXBkYXRpbmcgYWNj dW11bGF0aW9uIHZhcmlhYmxlcywgc3VjaCBhcyB0aGUgPWNvbGw9IGluID0oY29sbGVjdAogICAg Y29sbCBteS12YWx1ZSk9CiAgLSBjb2RlIHRoYXQgZXhpdHMgdGhlIGxvb3AgZWFybHksIHN1Y2gg YXMgZnJvbSB0aGUgPWxlYXZlPSBjb21tYW5kCgojK3ZpbmRleDogbG9vcHktLWxhdHRlci1ib2R5 Ci0gPWxvb3B5LS1sYXR0ZXItYm9keT0gOjogRXhwcmVzc2lvbnMgdGhhdCBuZWVkIHRvIGJlIHJ1 biBhZnRlciB0aGUgbWFpbiBib2R5LAogIHN1Y2ggYXMgdXBkYXRpbmcgc29tZSBvZiB0aGUgdmFy aWFibGVzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gYSBsb29wIGVuZHMuICBGb3IKICBleGFtcGxlLCBm b3IgdGhlIGNvbW1hbmQgPShsaXN0IGkgbXktbGlzdCk9LCB0aGUgY29tbWFuZCBhcHBsaWVzIHRo ZSBmdW5jdGlvbgogIHRoYXQgbW92ZXMgdGhlIGNvbW1hbmQgdGhyb3VnaCB0aGUgbGlzdCAoYnkg ZGVmYXVsdCwgfmNkcn4pIGluIHRoZSBsb29wJ3MKICBsYXR0ZXIgYm9keSwgc28gdGhhdCBkdXJp bmcgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtYWluIGJvZHkgdGhlIGl0ZXJhdGlvbgogIHZh cmlhYmxlID1pPSBjYW4gYmUgc2V0IHRvIHRoZSB+Y2FyfiBvZiB0aGF0IH5jZHJ+LgoKIyt2aW5k ZXg6IGxvb3B5LS1wb3N0LWNvbmRpdGlvbnMKLSA9bG9vcHktLXBvc3QtY29uZGl0aW9ucz0gOjog RXhwcmVzc2lvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGUgPXdoaWxlPQogIGxvb3AgY29u dGludWVzLCBidXQgY2hlY2tlZCBhZnRlciB0aGUgbG9vcCBib2R5IGhhcyBydW4uICBUaGUgY29k ZSBmcm9tIHRoaXMKICBpcyB1bHRpbWF0ZWx5IGFwcGVuZGVkIHRvIHRoZSBsYXR0ZXIgYm9keSBi ZWZvcmUgYmVpbmcgc3Vic3RpdHV0ZWQgaW4uCgpGb3IgYWNjdW11bGF0aW9uIGNvbW1hbmRzLCB5 b3UgbWlnaHQgYWxzbyB3aXNoIHRvIHBsYWNlIHZhbHVlcyBpbiB0aGUgZm9sbG93aW5nOgoKIyt2 aW5kZXg6IGxvb3B5LS1pbXBsaWNpdC1yZXR1cm4KLSA9bG9vcHktLWltcGxpY2l0LXJldHVybj0g OjogQSBsaXN0IG9mIHZhbHVlcyB0byBiZSByZXR1cm5lZCBieSB0aGUgbG9vcCBpZiBubwogIG90 aGVyIHJldHVybiB2YWx1ZSBpcyBzcGVjaWZpZWQvcmVhY2hlZC4gIEEgdmFsdWUgaXMgYWRkZWQg dG8gdGhpcyBsaXN0IHdoZW4KICBhbiBhY2N1bXVsYXRpb24gY29tbWFuZCBkb2VzIG5vdCBzcGVj aWZ5IGFuIGFjY3VtdWxhdGlvbiB2YXJpYWJsZSwgYW5kIGluIHNvbWUKICBzcGVjaWFsIG90aGVy IGNhc2VzLgoKICBCeSBkZWZhdWx0LCB0aGUgaW1wbGljaXQgcmV0dXJuIHZhbHVlIGlzIH5sb29w eS1yZXN1bHR+LCBhbmQgc28gdGhpcyB2YXJpYWJsZQogIGlzIHVzdWFsbHkganVzdCBhIGxpc3Qg b2YgdGhlIHN5bWJvbCA9bG9vcHktcmVzdWx0PS4KCiMrdmluZGV4OiBsb29weS0tdmFycy1maW5h bC11cGRhdGVzCi0gPWxvb3B5LS12YXJzLWZpbmFsLXVwZGF0ZXM9IDo6IEFjdGlvbnMgdG8gcGVy Zm9ybSBvbiB2YXJpYWJsZXMgKHVzdWFsbHkKICBhY2N1bXVsYXRpb24gdmFyaWFibGVzKSBhZnRl ciB0aGUgbG9vcCBlbmRzLiAgU29tZSBpbXBsaWVkIGFjY3VtdWxhdGlvbgogIGNvbW1hbmRzIG5l ZWQgdG8gdXBkYXRlIHRoZSB2YXJpYWJsZSBvbmUgZmluYWwgdGltZSBhZnRlciBlbmRpbmcgdGhl IGxvb3AuCiAgU29tZSBleGFtcGxlcyBhcmU6CiAgMS4gQ29ycmVjdGluZyB0aGUgb3JkZXIgb2Yg ZWxlbWVudHMgaW4gYSBsaXN0IHRoYXQgd2FzIGNvbnN0cnVjdGVkIGluIHJldmVyc2UuCiAgMi4g Q29lcmNpbmcgdGhlIHZhcmlhYmxlIGludG8gYSBuZXcgc2VxdWVuY2UgdHlwZS4KICAzLiBBcHBl bmRpbmcgYSBsaXN0IG9mIGxpc3RzLgoKICBFYWNoIGFjY3VtdWxhdGlvbiB2YXJpYWJsZSBjYW4g b25seSBiZSB1cGRhdGVkIG9uY2UsIGluIGEgc2luZ2xlIHdheS4gIEZvcgogIGV4YW1wbGUsIGEg dmFyaWFibGUgY2Fubm90IGJlIHJldmVyc2VkIGFjY29yZGluZyB0byB0aGUgbmVlZHMgb2Ygb25l IGNvbW1hbmQKICBhbmQgdGhlbiBjb2VyY2VkIGludG8gYSBuZXcgdHlwZSBhY2NvcmRpbmcgdG8g dGhlIG5lZWRzIG9mIGFub3RoZXIuICBDb21tYW5kcwogIGFjdGluZyBvbiB0aGUgc2FtZSBhY2N1 bXVsYXRpb24gdmFyaWFibGUgbXVzdCByZXF1aXJlIHRoZSBzYW1lIGZpbmFsIHVwZGF0ZSwKICBp bmNsdWRpbmcgaWYgdGhleSByZXF1aXJlIG5vIGZpbmFsIHVwZGF0ZS4KCgpMb29weSB3aWxsIGF0 dGVtcHQgdG8gcHJvZHVjZSBlZmZpY2llbnQgY29kZSwgYW5kIHdpbGwgbm90IGF0dGVtcHQgdG8g c2V0IHVwCmZlYXR1cmVzIHdoaWNoIGFyZSBub3QgdXNlZC4gIFRoZXJlZm9yZSwgdGhlIGV4cGFu ZGVkIGNvZGUgZGVwZW5kcyBvbiB0aGUga2luZHMKb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIHJl dHVybmVkIGJ5IHRoZSBwYXJzaW5nIGZ1bmN0aW9ucy4gIEZvciB0aGUgbW9zdCBwYXJ0LAp0aGUg aW5zdHJ1Y3Rpb25zIGFmZmVjdCB0aGUgZXhwYW5zaW9uIG9mIHRoZSBsb29wIHRoYXQgY29udGFp bnMgdGhlaXIgcmVzcGVjdGl2ZQpjb21tYW5kLiAgSG93ZXZlciwgdGhlcmUgYXJlIGNhc2VzIHdo ZXJlIGEgY29tbWFuZCBtdXN0IHNlbmQgaW5zdHJ1Y3Rpb25zIHRvIGEKc3Vycm91bmRpbmcgbG9v cCwgbm90IGp1c3QgdGhlIGxvb3Agd2hpY2ggaW1tZWRpYXRlbHkgY29udGFpbnMgaXQuICBDb25z aWRlcgp1c2luZyBhbiBhY2N1bXVsYXRpb24gY29tbWFuZCB3aXRoaW4gdGhlID1hdD0gY29tbWFu ZCwgYXMgaW4gdGhlIGJlbG93IGV4YW1wbGUuClRoZSBhY2N1bXVsYXRpb24gdmFyaWFibGUgbXVz dCBiZSBkZWNsYXJlZCBmb3IgdGhlIGxvb3AgPW91dGVyPSwgYnV0IHRoZQphY2N1bXVsYXRpb24g aXRzZWxmIG11c3Qgc3RpbGwgb2NjdXIgd2l0aGluIHRoZSBsb29wID1pbm5lcj0uCgojK2JlZ2lu X3NyYyBlbWFjcy1saXNwCiAgOzsgPT4gKDEgMiAzIDQpCiAgKGxvb3B5IChuYW1lZCBvdXRlcikK ICAgICAgICAgKGFycmF5IGkgWygxIDIpICgzIDQpXSkKICAgICAgICAgKGxvb3B5IGlubmVyCiAg ICAgICAgICAgICAgICAgICAobGlzdCBqIGkpCiAgICAgICAgICAgICAgICAgICAoYXQgb3V0ZXIg KGNvbGxlY3QgY29sbCBqKSkpCiAgICAgICAgIChmaW5hbGx5LXJldHVybiBjb2xsKSkKIytlbmRf c3JjCgpUbyBjb21tdW5pY2F0ZSB0aGVzZSBpbnN0cnVjdGlvbnMsIHVzZSB+bG9vcHktLWF0LWlu c3RydWN0aW9uc34uICBGb3IgZXhhbXBsZSwKdGhlIG91dHB1dCBvZiBwYXJzaW5nID0oYXQgb3V0 ZXIgKGNvbGxlY3QgaiA6YXQgc3RhcnQpKT0gd291bGQgYmUgYSBsaXN0IG9mCmluc3RydWN0aW9u cyBzaW1pbGFyIHRvIHRob3NlIGJlbG93LiAgV2hpbGUgYWxsIG9mIHRoZXNlIHN1Yi1pbnN0cnVj dGlvbnMgYXJlCnByb2R1Y2VkIGJ5IHBhcnNpbmcgdGhlID1jb2xsZWN0PSBjb21tYW5kLCBub3Qg YWxsIGFyZSBzZW50IHRvIHRoZSBsb29wID1vdXRlcj0uCgojK2JlZ2luX3NyYyBlbWFjcy1saXNw CiAgOzsgRXhhbXBsZSBpbnN0cnVjdGlvbnMgZnJvbSBwYXJzaW5nIGFuIGBhdGAgY29tbWFuZC4K ICAoKGxvb3B5LS1hdC1pbnN0cnVjdGlvbnMKICAgIChvdXRlciAobG9vcHktLWFjY3VtdWxhdGlv bi12YXJzIChsb29weS1yZXN1bHQgbmlsKSkKICAgICAgICAgICAobG9vcHktLWltcGxpY2l0LXJl dHVybiBsb29weS1yZXN1bHQpKSkKICAgKGxvb3B5LS1tYWluLWJvZHkgKHNldHEgbG9vcHktcmVz dWx0IChjb25zIGogbG9vcHktcmVzdWx0KSkpKQojK2VuZF9zcmMKCiMrdmluZGV4OiBsb29weS0t YXQtaW5zdHJ1Y3Rpb25zCi0gPWxvb3B5LS1hdC1pbnN0cnVjdGlvbnM9IDo6IEluc3RydWN0aW9u cyB0aGF0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBieSBhCiAgc3Vycm91bmRpbmcgbG9vcC4gIEZv ciBleGFtcGxlLCB0aGlzIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gaXMgdXNlZCBieSB0aGUgPWF0PSwK ICA9c2tpcC1mcm9tPSwgYW5kID1sZWF2ZS1mcm9tPSBjb21tYW5kcy4gIFRoZSBpbnN0cnVjdGlv bidzIHZhbHVlIGlzIGEgbGlzdCBvZgogIGEgbG9vcCBuYW1lIGZvbGxvd2VkIGJ5IHN1Yi1pbnN0 cnVjdGlvbnMuCgogIFRoaXMgdmFyaWFibGUgd29ya3MgYXMgYSBzb21ldGhpbmcgbGlrZSBhIGNv bWJpbmF0aW9uIG9mIGEgc3RhY2sgYW5kIGEgbWFwLgogIFRoaXMgbWVhbnMgdGhhdCB0aGVuIHdo ZW4gbXVsdGlwbGUgc3Vycm91bmRpbmcgbG9vcHMgc2hhcmUgdGhlIHNhbWUgbmFtZSwgdGhlCiAg aW5zdHJ1Y3Rpb25zIGFmZmVjdCB0aGUgaW5uZXJtb3N0IHN1cnJvdW5kaW5nIGxvb3Agb2YgdGhh dCBuYW1lLgoKClRoZXJlIGFyZSA0IG1vcmUgdmFyaWFibGVzIGEgbG9vcCBjb21tYW5kIGNhbiBw dXNoIHRvLCBidXQgdGhleSBhcmUgZGVyaXZlZCBmcm9tCnRoZSBtYWNybydzIGFyZ3VtZW50cy4g IEFkZGluZyB0byB0aGVtIGFmdGVyIHVzaW5nIGEgbWFjcm8gYXJndW1lbnQgbWlnaHQgbGVhZAp0 byB1bmludGVuZGVkIGJlaGF2aW9yLiAgWW91IG1pZ2h0IHdpc2ggdG8gdXNlIHRoZW0gaWYsIGZv ciBleGFtcGxlLCB5b3UgYXJlCmNvbmNlcm5lZCB3aXRoIHdoYXQgaGFwcGVucyBhZnRlciB0aGUg bG9vcCBleGl0cy9jb21wbGV0ZXMuCgojK3ZpbmRleDogbG9vcHktLWJlZm9yZS1kbwotID1sb29w eS0tYmVmb3JlLWRvPSA6OiBFeHByZXNzaW9ucyB0byBldmFsdWF0ZSBiZWZvcmUgdGhlIGxvb3Au ICBUaGVzZSBhcmUKICBkZXJpdmVkIGZyb20gdGhlID1iZWZvcmUtZG89IG1hY3JvIGFyZ3VtZW50 LgoKIyt2aW5kZXg6IGxvb3B5LS1hZnRlci1kbwotID1sb29weS0tYWZ0ZXItZG89IDo6IEV4cHJl c3Npb25zIHRvIGV2YWx1YXRlIGFmdGVyIHRoZSBsb29wIGNvbXBsZXRlcwogIHN1Y2Nlc3NmdWxs eS4gIFRoZXNlIGFyZSBkZXJpdmVkIGZyb20gdGhlID1hZnRlci1kbz0gbWFjcm8gYXJndW1lbnQu CgojK3ZpbmRleDogbG9vcHktLWZpbmFsLWRvCi0gPWxvb3B5LS1maW5hbC1kbz0gOjogRXhwcmVz c2lvbnMgdG8gZXZhbHVhdGUgYWZ0ZXIgdGhlIGxvb3AgY29tcGxldGVzLAogIHJlZ2FyZGxlc3Mg b2Ygc3VjY2Vzcy4gIFRoZXNlIGFyZSBkZXJpdmVkIGZyb20gdGhlID1maW5hbGx5LWRvPSBtYWNy bwogIGFyZ3VtZW50LgoKIyt2aW5kZXg6IGxvb3B5LS1maW5hbC1yZXR1cm4KLSA9bG9vcHktLWZp bmFsLXJldHVybj0gOjogQW4gZXhwcmVzc2lvbiB0aGF0IGlzIGFsd2F5cyByZXR1cm5lZCBieSB0 aGUgbWFjcm8sCiAgcmVnYXJkbGVzcyBvZiBhbnkgZWFybHkgcmV0dXJucyBpbiB0aGUgbG9vcCBi b2R5LiAgVGhpcyBpcyBkZXJpdmVkIGZyb20gdGhlCiAgPWZpbmFsbHktcmV0dXJuPSBtYWNybyBh cmd1bWVudC4KCgojK3ZpbmRleDogbG9vcHktLWxvb3AtbmFtZQpTb21lIGNvbW1hbmRzIG1pZ2h0 IGRlcGVuZCBvbiB0aGUgbmFtZSBvZiB0aGUgbG9vcC4gIFRoZSBzeW1ib2wgd2hpY2ggbmFtZXMg dGhlCmxvb3AgaXMgc3RvcmVkIGluIHRoZSB2YXJpYWJsZSB+bG9vcHktLWxvb3AtbmFtZX4uICBU aGUgZGVmYXVsdCBuYW1lIGlzIH5uaWx+LgoKVGhlIHN0cnVjdHVyZSBvZiB0aGUgbWFjcm/igJlz IGV4cGFuZGVkIGNvZGUgZGVwZW5kcyBvbiB0aGUgZmVhdHVyZXMgdXNlZCAoZm9yCmV4YW1wbGUs IH5sb29weX4gd29u4oCZdCB0cnkgdG8gZGVjbGFyZSB2YXJpYWJsZXMgaWYgbm9uZSBleGlzdCks IGJ1dCB0aGUgcmVzdWx0CndpbGwgd29yayBzaW1pbGFyIHRvIHRoZSBiZWxvdyBleGFtcGxlLgoK IytCRUdJTl9TUkMgZW1hY3MtbGlzcAogIGAoY2wtc3ltYm9sLW1hY3JvbGV0ICxsb29weS0tZ2Vu ZXJhbGl6ZWQtdmFycwogICAgIChsZXQqICxsb29weS0td2l0aC12YXJzCiAgICAgICAobGV0ICxs b29weS0tYWNjdW11bGF0aW9uLXZhcnMKICAgICAgICAgKGxldCogLGxvb3B5LS1pdGVyYXRpb24t dmFycwogICAgICAgICAgIChsZXQgKChsb29weS0tZWFybHktcmV0dXJuLWNhcHR1cmUKICAgICAg ICAgICAgICAgICAgKGNsLWJsb2NrICxsb29weS0tbG9vcC1uYW1lCiAgICAgICAgICAgICAgICAg ICAgLEBsb29weS0tYmVmb3JlLWRvCiAgICAgICAgICAgICAgICAgICAgKGNhdGNoIGxvb3B5LS1u b24tcmV0dXJuaW5nLWV4aXQtdGFnLW5hbWUKICAgICAgICAgICAgICAgICAgICAgICh3aGlsZSAs KGNsLWNhc2UgKGxlbmd0aCBsb29weS0tcHJlLWNvbmRpdGlvbnMpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKDAgdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSAo Y2FyIGxvb3B5LS1wcmUtY29uZGl0aW9ucykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHQgKGNvbnMgJ2FuZCBsb29weS0tcHJlLWNvbmRpdGlvbnMpKSkKICAgICAgICAgICAgICAg ICAgICAgICAgKGNhdGNoIGxvb3B5LS1za2lwLXRhZy1uYW1lCiAgICAgICAgICAgICAgICAgICAg ICAgICAgLEBsb29weS0tbWFpbi1ib2R5KQogICAgICAgICAgICAgICAgICAgICAgICAsQGxvb3B5 LS1sYXR0ZXItYm9keQogICAgICAgICAgICAgICAgICAgICAgICAodW5sZXNzICxsb29weS0tcG9z dC1jb25kaXRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsLXJldHVybi1mcm9tICxs b29weS0tbG9vcC1uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsbG9vcHktLWltcGxp Y2l0LXJldHVybikpKQogICAgICAgICAgICAgICAgICAgICAgLGxvb3B5LS12YXJzLWZpbmFsLXVw ZGF0ZXMKICAgICAgICAgICAgICAgICAgICAgICxAbG9vcHktLWFmdGVyLWRvKSkKICAgICAgICAg ICAgICAgICAgLGxvb3B5LS1pbXBsaWNpdC1yZXR1cm4pKQogICAgICAgICAgICAgLEBsb29weS0t ZmluYWwtZG8KICAgICAgICAgICAgICwoaWYgbG9vcHktLWZpbmFsLXJldHVybgogICAgICAgICAg ICAgICAgICBsb29weS0tZmluYWwtcmV0dXJuCiAgICAgICAgICAgICAgICAnbG9vcHktLWVhcmx5 LXJldHVybi1jYXB0dXJlKSkpKSkpCiMrRU5EX1NSQwoKKiogSGVsbG8gV29ybGQKOlBST1BFUlRJ RVM6CjpDVVNUT01fSUQ6IGEtc21hbGwtZXhhbXBsZQo6REVTQ1JJUFRJT046IEEgbWluaW1hbCB3 b3JraW5nIGV4YW1wbGUuCjpFTkQ6CgpUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb21tYW5kIHRo YXQgcHJpbnRzIGEgbWVzc2FnZSBkdXJpbmcgdGhlIG1haW4gbG9vcCBib2R5LgoKVG8gaW1wbGVt ZW50IGEgY3VzdG9tIGxvb3AtYm9keSBjb21tYW5kLCBMb29weSBuZWVkcyB0d28gcGllY2VzIG9m IGluZm9ybWF0aW9uOgoxLiBUaGUga2V5d29yZCB0aGF0IG5hbWVzIHlvdXIgY29tbWFuZAoyLiBU aGUgcGFyc2luZyBmdW5jdGlvbiB0aGF0IGNhbiB0dXJuIHVzZXMgb2YgeW91ciBjb21tYW5kIGlu dG8gaW5zdHJ1Y3Rpb25zLgoKSW1wb3J0YW50bHksIHlvdXIgY3VzdG9tIGNvbW1hbmRzIGNhbm5v dCBzaGFyZSBhIG5hbWUuCgpGb3IgZXhhbXBsZSwgc2F5IHRoYXQgeW91J3JlIHRpcmVkIG9mIHR5 cGluZyBvdXQgPShkbyAobWVzc2FnZSAiSGVsbG8sICVzICVzIgpQRVJTT05BTC1OQU1FIEZBTUlM WS1OQU1FKSk9IGFuZCB3b3VsZCBwcmVmZXIgdG8gaW5zdGVhZCB1c2UgPShncmVldApQRVJTT05B TC1OQU1FIFtGQU1JTFktTkFNRV0pPS4gIFRoaXMgb25seSByZXF1aXJlcyBhZGRpbmcgY29kZSB0 byB0aGUgbG9vcCdzCm1haW4gYm9keSwgc28gdGhlIGRlZmluaXRpb24gb2YgdGhlIHBhcnNpbmcg ZnVuY3Rpb24gaXMgcXVpdGUgc2ltcGxlLgoKIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogIChyZXF1 aXJlICdjbC1saWIpCgogIChjbC1kZWZ1biBteS1sb29weS1ncmVldC1jb21tYW5kLXBhcnNlcgog ICAgICAoKF8gcGVyc29uYWwtbmFtZSAmb3B0aW9uYWwgZmFtaWx5LW5hbWUpKQogICAgIkdyZWV0 IG9uZSB3aXRoIFBFUlNPTkFMLU5BTUUgYW5kIG9wdGlvbmFsIEZBTUlMWS1OQU1FLiIKICAgIDs7 IE5vdGU6IFVzZSBhIGdlbmVyYXRlZCB2YXJpYWJsZSB0byBhdm9pZCBldmFsdWF0aW5nIGBmYW1p bHktbmFtZScgdHdpY2UKICAgIDs7IChvbmNlIGluIHRoZSBgaWYnIGNvbmRpdGlvbiBhbmQgb25j ZSBpbiB0aGUgYG1lc3NhZ2UnKS4KICAgIDs7CiAgICA7OyBJbiBuZXdlciBFbWFjcywgc2VlIGFs c28gYGNsLXdpdGgtZ2Vuc3ltcycgYW5kIGBjbC1vbmNlLW9ubHknLAogICAgOzsgYWxzbyBhdmFp bGFibGUgZnJvbSB0aGUgQ29tcGF0IGxpYnJhcnkKICAgIDs7IChodHRwczovL2VscGEuZ251Lm9y Zy9wYWNrYWdlcy9jb21wYXQuaHRtbCksIG9uIHdoaWNoIExvb3B5IGRlcGVuZHMuCiAgICAobGV0 ICgoZmFtaWx5LW5hbWUtdmFyIChnZW5zeW0gImZhbWlseS1uYW1lIikpKQogICAgICBgKChsb29w eS0tbWFpbi1ib2R5CiAgICAgICAgIChpZi1sZXQgKCgsZmFtaWx5LW5hbWUtdmFyICxmYW1pbHkt bmFtZSkpCiAgICAgICAgICAgICAobWVzc2FnZSAiSGVsbG8sICVzICVzIiAscGVyc29uYWwtbmFt ZSAsZmFtaWx5LW5hbWUtdmFyKQogICAgICAgICAgIChtZXNzYWdlICJIZWxsbywgJXMiICxwZXJz b25hbC1uYW1lKSkpKSkpCiMrRU5EX1NSQwoKTG9vcHkgd2lsbCBwYXNzIHRoZSBlbnRpcmUgY29t bWFuZCBleHByZXNzaW9uIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9uLCBhbmQKZXhwZWN0cyB0aGF0 IGEgbGlzdCBvZiBpbnN0cnVjdGlvbnMgd2lsbCBiZSByZXR1cm5lZC4KCiMrdmluZGV4OiBsb29w eS1jb21tYW5kLXBhcnNlcnMKVG8gdGVsbCBMb29weSBhYm91dCB0aGlzIGZ1bmN0aW9uLCBhZGQg aXQgYW5kIHRoZSBjb21tYW5kIG5hbWUgPWdyZWV0PSB0byB0aGUKdmFyaWFibGUgfmxvb3B5LWNv bW1hbmQtcGFyc2Vyc34sIHdoaWNoIGFzc29jaWF0ZXMgY29tbWFuZHMgd2l0aCBwYXJzaW5nCmZ1 bmN0aW9ucy4gIFRoZSBmdW5jdGlvbiB0aGF0IGlzIHBhaXJlZCB3aXRoIHRoZSBzeW1ib2wgcmVj ZWl2ZXMgdGhlIGVudGlyZQpjb21tYW5kIGV4cHJlc3Npb24sIGFuZCBzaG91bGQgcHJvZHVjZSBh IGxpc3Qgb2YgdmFsaWQgaW5zdHJ1Y3Rpb25zLgoKIytCRUdJTl9TUkMgZW1hY3MtbGlzcAogIDs7 IFVzaW5nIHRoZSBNYXAgbGlicmFyeSwgZm9yIGNvbnZlbmllbmNlOgogIChyZXF1aXJlICdtYXAp CiAgKHNldGYgKG1hcC1lbHQgbG9vcHktY29tbWFuZC1wYXJzZXJzICdncmVldCkKICAgICAgICAj J215LWxvb3B5LWdyZWV0LWNvbW1hbmQtcGFyc2VyKQojK0VORF9TUkMKCkFmdGVyIHRoYXQsIHlv dSBjYW4gdXNlIHlvdXIgY3VzdG9tIGNvbW1hbmQgaW4gdGhlIGxvb3AgYm9keS4KCiMrQkVHSU5f U1JDIGVtYWNzLWxpc3AKICAobG9vcHkgKGxpc3QgbmFtZSAnKCgiSm9obiIgIkRlZXIiKSAoIkph bmUiICJEb2UiKSAoIkppbW15IikpKQogICAgICAgICAoZ3JlZXQgKGNhciBuYW1lKSAoY2FkciBu YW1lKSkpCiMrRU5EX1NSQwoKQnkgcnVubmluZyB7e3trYmQoTS14IHBwLW1hY3JvZXhwYW5kLWxh c3Qtc2V4cCBSRVQpfX19IG9uIHRoZSBhYm92ZSBleHByZXNzaW9uLAp5b3UgY2FuIHNlZSB0aGF0 IGl0IGV4cGFuZHMgdG8gZG8gd2hhdCB3ZSB3YW50LCBhcyBleHBlY3RlZC4KCiMrQkVHSU5fU1JD IGVtYWNzLWxpc3AKICA7OyBBbiBleGFtcGxlIGV4cGFuc2lvbjoKICAobGV0KiAoKGxpc3QtMTY2 ICcoKCJKb2huIiAiRGVlciIpICgiSmFuZSIgIkRvZSIpICgiSmltbXkiKSkpCiAgICAgICAgIChu YW1lIG5pbCkpCiAgICAoY2wtYmxvY2sgbmlsCiAgICAgICh3aGlsZSAoY29uc3AgbGlzdC0xNjYp CiAgICAgICAgKHNldHEgbmFtZSAoY2FyIGxpc3QtMTY2KSkKICAgICAgICAoaWYtbGV0ICgoZmFt aWx5LW5hbWU5MDAgKGNhZHIgbmFtZSkpKQogICAgICAgICAgICAobWVzc2FnZSAiSGVsbG8sICVz ICVzIgogICAgICAgICAgICAgICAgICAgICAoY2FyIG5hbWUpCiAgICAgICAgICAgICAgICAgICAg IGZhbWlseS1uYW1lOTAwKQogICAgICAgICAgKG1lc3NhZ2UgIkhlbGxvLCAlcyIKICAgICAgICAg ICAgICAgICAgIChjYXIgbmFtZSkpKQogICAgICAgIChzZXRxIGxpc3QtMTY2IChjZHIgbGlzdC0x NjYpKSkKICAgICAgbmlsKSkKIytFTkRfU1JDCgoqKiBBbiB+YWx3YXlzfiBDb21tYW5kCjpQUk9Q RVJUSUVTOgo6Q1VTVE9NX0lEOiBhbHdheXMtZXhhbXBsZQo6REVTQ1JJUFRJT046IEFkZGluZyBh IGZlYXR1cmUgZnJvbSBgY2wtbG9vcCcuCjpFTkQ6CgpMZXRzIHNheSB3ZSB3YW50IHRvIGVtdWxh dGUgfmNsLWxvb3B+J3MgPWFsd2F5cz0gY2xhdXNlLCB3aGljaCBjYXVzZXMgdGhlIGxvb3AKdG8g cmV0dXJuIH5uaWx+IGlmIGFuIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIH5uaWx+IGFuZCB+dH4g b3RoZXJ3aXNlLiAgVGhpcyBpcwpzaW1pbGFyIHRvIHRoZSBmdW5jdGlvbnMgfmNsLWV2ZXJ5fiBh bmQgfnNlcS1ldmVyeS1wfi4KCkhlcmUgaXMgYW4gZXhhbXBsZToKCiMrQkVHSU5fU1JDIGVtYWNz LWxpc3AKICA7OyA9PiB0CiAgKGNsLWxvb3AgZm9yIGkgZnJvbSAxIHRvIDkgYWx3YXlzICg8IGkg MTApKQojK0VORF9TUkMKCldoaWxlIH5sb29weX4gYWxyZWFkeSBoYXMgYW4gPWFsd2F5cz0gY29t bWFuZCwgd2UnbGwgaWdub3JlIGl0IGZvciB0aGUgc2FrZSBvZgp0aGlzIGV4YW1wbGUuICBXaXRo b3V0IGEgY3VzdG9tIGNvbW1hbmQsIHlvdSBjb3VsZCB0cmFuc2xhdGUgdGhpcyB1c2luZyB0aGUK Zm9sbG93aW5nIGNvZGU6CgojK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgOzsgPT4gdAogIChsb29w eSAobnVtYmVycyBpIDpmcm9tIDEgOnRvIDkpCiAgICAgICAgICh1bmxlc3MgKDwgaSAxMCkgKHJl dHVybiBuaWwpKQogICAgICAgICAoZWxzZS1kbyAoY2wtcmV0dXJuIHQpKSkKIytFTkRfU1JDCgpU aGlzIGlzIHNpbWlsYXIgdG8gd2hhdCB5b3UgbWlnaHQgd3JpdGUgaW4gb3RoZXIgbGFuZ3VhZ2Vz LCBzdWNoIGFzIFB5dGhvbi4KCiMrYmVnaW5fc3JjIHB5dGhvbgogICMgSW4gc29tZSB0ZXN0aW5n IFB5dGhvbiBmdW5jdGlvbjoKICBmb3IgaSBpbiByYW5nZSgxLCAxMCk6CiAgICAgIGlmIG5vdCAo aSA8IDEwKToKICAgICAgICAgIHJldHVybiBGYWxzZQogIGVsc2U6CiAgICAgIHJldHVybiBUcnVl CiMrZW5kX3NyYwoKV2hpbGUgdGhlIG1lYW5pbmcgb2YgdGhlIGNvZGUgaXMgY2xlYXIsIHRoaXMg YXBwcm9hY2ggaXMgY2VydGFpbmx5IHdvcmRpZXIuCgpIZXJlJ3MgaG93IG9uZSBjb3VsZCBkbyB0 aGlzIHVzaW5nIGEgY3VzdG9tIGNvbW1hbmQuICBBZ2FpbiwgTG9vcHkgYWxyZWFkeQpjb21lcyB3 aXRoIGEgYnVpbHQtaW4gPWFsd2F5cz0gY29tbWFuZC4gIFRoaXMgZXhhbXBsZSBpcyB0YWtlbiBk aXJlY3RseSBmcm9tIHRoZQpmaWxlIHt7e2ZpbGUobG9vcHktY29tbWFuZHMuZWwpfX19LCB3aGlj aCBjb250YWlucyB0aGUgY29kZSBvZiBhbGwgb2Ygfmxvb3B5fidzCmJ1aWx0LWluIHBhcnNlcnMu CgpXZSBjYW4gZGVzY3JpYmUgdGhlIGNvbW1hbmQncyBkZXNpcmVkIGJlaGF2aW9yIGluIHR3byBz ZW50ZW5jZXM6CjEuIFRoZSBsb29wIHNob3VsZCBpbW1lZGlhdGVseSByZXR1cm4gfm5pbH4gaWYg dGhlIGV4cHJlc3Npb24gZXZlciBldmFsdWF0ZXMgdG8KICAgfm5pbH4uCjIuIFRoZSBsb29wIHNo b3VsZCByZXR1cm4gfnR+IGlmIHRoZSBsb29wIGlzIGFibGUgdG8gY29tcGxldGUgc3VjY2Vzc2Z1 bGx5LgoKVGhpcyBzaW1wbGVzdCB3YXkgdG8gc2F0aXNmeSB0aGUgZmlyc3QgcmVxdWlyZW1lbnQg aXMgdG8gY29uZGl0aW9uYWxseSB1c2UKfmNsLXJldHVybn4gaWYgdGhlIGV4cHJlc3Npb25zIGV2 ZXIgZXZhbHVhdGVzIHRvIH5uaWx+LiAgV2Ugd2FudCB0byBkbyB0aGlzCndoaWxlIHRoZSBsb29w IGlzIHJ1bm5pbmcsIHNvIHdlIHNob3VsZCB1c2UgYW4gaW5zdHJ1Y3Rpb24gZm9yCn5sb29weS0t bWFpbi1ib2R5fi4KCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICA7OyBXZSB3YW50IHRvIGluc2Vy dCBzb21ldGhpbmcgbGlrZSB0aGUgYmVsb3cgY29kZSBpbnRvIHRoZSBsb29wCiAgKHVubGVzcyBD T05ESVRJT04KICAgIChjbC1yZXR1cm4gbmlsKSkKCiAgOzsgc28gd2UgY291bGQgdXNlIHRoZSBp bnN0cnVjdGlvbgogIGAobG9vcHktLW1haW4tYm9keSAodW5sZXNzICxDT05ESVRJT04gKGNsLXJl dHVybiBuaWwpKSkKCiAgOzsgaW4gd2hpY2ggQ09ORElUSU9OIGlzIHN1cHBsaWVkIGJ5IHRoZSBw YXJzaW5nIGZ1bmN0aW9uLgojK2VuZF9zcmMKCkZvciBhIHNpbXBsZSBsb29wLCB0aGlzIHdvcmtz IHdlbGwgZW5vdWdoLiAgSG93ZXZlciwgdGhpcyBhcHByb2FjaCBoYXMgdHdvCnByb2JsZW1zOgox LiBJZiB0aGUgbG9vcCBpcyBuYW1lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiA9bmlsPSwgfmNsLXJl dHVybn4gd291bGQgcmV0dXJuCiAgIGZyb20gdGhlIHdyb25nIH5jbC1ibG9ja34uCjIuIFVzaW5n IH5jbC1yZXR1cm5+IGRpcmVjdGx5IGNhdXNlcyB0aGUgbG9vcCB0byBleGl0IGltbWVkaWF0ZWx5 IHdpdGhvdXQKICAgZmluYWxpemluZyBvcHRpbWl6ZWQgYWNjdW11bGF0aW9uIHZhbHVlcywgc28g d2Ugd291bGRuJ3QgYmUgYWJsZSB0byBjb3JyZWN0bHkKICAgcmV0dXJuIG11bHRpcGxlIHZhbHVl cyBmcm9tIHRoZSBtYWNyby4KClRoZSBmaXJzdCBwcm9ibGVtIGNvdWxkIGJlIHNvbHZlZCBieSB1 c2luZyB0aGUgdmFyaWFibGUgfmxvb3B5LS1sb29wLW5hbWV+IHRvCnJldHJpZXZlIHRoZSBzeW1i b2wgbmFtaW5nIHRoZSBjdXJyZW50IGxvb3AsIGJ1dCB0aGF0IHN0aWxsIGxlYXZlcyB0aGUgc2Vj b25kCnByb2JsZW0uICBUaGUgYmV0dGVyIHNvbHV0aW9uLCB3aGVuIHRoZSBjb25kaXRpb24gaXMg bm8gbG9uZ2VyIG1lYW50LCBpcyB0bwpzdG9yZSBhIH5uaWx+IHZhbHVlIGluIGFuIGFjY3VtdWxh dGlvbiBjb21tYW5kIGFuZCB0byB0aGVuIGxlYXZlIHRoZSBsb29wIHdoaWxlCnN0aWxsIGZpbmFs aXppbmcgdmFyaWFibGVzLCBzdWNoIGFzIHZpYSB0aGUgPWxlYXZlPSBjb21tYW5kLiAgVGhpcyBn aXZlcyB1cwpzb21ldGhpbmcgbGlrZToKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICBgKGxvb3B5 LS1tYWluLWJvZHkgKHVubGVzcyAsQ09ORElUSU9OCiAgICAgICAgICAgICAgICAgICAgICAgKHNl dHEgLEFDQ1VNLVZBUiBuaWwpCiAgICAgICAgICAgICAgICAgICAgICAgLEAoTEVBVkUtQ09NTUFO RC1DT0RFKSkpCiMrZW5kX3NyYwoKVGhlIGJlc3Qgd2F5IHRvIHNhdGlzZnkgdGhlIHNlY29uZCBy ZXF1aXJlbWVudCBpcyB0byBzZXQgdGhlIGluaXRpYWwgdmFsdWUgb2YKdGhlIGFjY3VtdWxhdGlv biB2YXJpYWJsZSB0byB+dH4gYW5kIHRvIG1ha2UgdGhhdCBhY2N1bXVsYXRpb24gdmFyaWFibGUg dGhlCmltcGxpZWQgcmV0dXJuIHZhbHVlIG9mIHRoZSBsb29wLiAgQXMgZGVzY3JpYmVkIGluIFtb I2Vhcmx5LWV4aXRdXSwgbGVhdmluZyBhIGxvb3B5CmVhcmx5IChzdWNoIGFzIHZpYSB0aGUgPWxl YXZlPSBjb21tYW5kKSBkb2VzIG5vdCBjaGFuZ2UgdGhlIGltcGxpZWQgcmV0dXJuIHZhbHVlCm9m IGEgbG9vcC4gIFRoZSBsb2dpYyBvZiB0aGUgY29tbWFuZCB3b3VsZCBiZToKMS4gSW5pdGlhbGl6 ZSB0aGUgYWNjdW11bGF0aW9uIHZhcmlhYmxlIHRvIH50fi4KMi4gRHVyaW5nIHRoZSBsb29wLCBp ZiB0aGUgY29uZGl0aW9uIGlzIH5uaWx+LCBpbW1lZGlhdGVseSBzZXQgdGhlIGFjY3VtdWxhdGlv bgogICB2YXJpYWJsZSB0byB+bmlsfiBhbmQgbGVhdmUgdGhlIGxvb3AuICBJZiB0aGUgY29uZGl0 aW9uIGlzIGFsd2F5cyBub24tfm5pbH4sCiAgIHRoZW4gd2UgbmVlZCBkbyBub3RoaW5nLgozLiBS ZWdhcmRsZXNzIG9mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGxvb3AsIHRoZSBpbXBsaWVkIHJl dHVybiB2YWx1ZSBpcyB1c2VkCiAgIGFzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1hY3JvLCBi YXJyaW5nIGFueSB1c2Ugb2YgdGhlID1maW5hbGx5LXJldHVybj0KICAgbWFjcm8gYXJndW1lbnQu CgpXaXRoIHRoYXQgaW4gbWluZCwgb3VyIGluc3RydWN0aW9ucyBmb3IgdGhlIGxvb3Agd291bGQg YmUKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICBgKChsb29weS0tYWNjdW11bGF0aW9uLXZhcnMg KCxBQ0NVTS1WQVIgdCkpCiAgICAobG9vcHktLWltcGxpY2l0LXJldHVybiAsQUNDVU0tVkFSKQog ICAgKGxvb3B5LS1tYWluLWJvZHkgKHVubGVzcyAsQ09ORAogICAgICAgICAgICAgICAgICAgICAg ICAoc2V0cSAsQUNDVU0tVkFSIG5pbCkKICAgICAgICAgICAgICAgICAgICAgICAgLEAoTEVBVkUt Q09NTUFORC1DT0RFKSkpKQojK2VuZF9zcmMKCk9uY2Ugd2UndmUgY2hvc2VuIG91ciBpbnN0cnVj dGlvbnMsIHdlIG5lZWQgdG8gdGVsbCBMb29weSB3aGF0IGZ1bmN0aW9uIHRvIHVzZQp0byBwcm9k dWNlIHRoZXNlIGluc3RydWN0aW9ucy4gIExpa2UgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHdl IGRlZmluZSB0aGUKcGFyc2luZyBmdW5jdGlvbiBhbmQgYWRkIGl0IHRvIH5sb29weS1jb21tYW5k LXBhcnNlcnN+LgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogIDs7IEFzIG5vdGVkIGluIHRoZSBw cmV2aW91cyBzZWN0aW9uLCB0aGUgcGFyc2luZyBmdW5jdGlvbiBpcyBhbHdheXMKICA7OyBwYXNz ZWQgdGhlIGVudGlyZSBjb21tYW5kIGFzIGAoYWx3YXlzIENPTkRUSU9OKScsIG5vdCBqdXN0IHRo ZQogIDs7IGNvbW1hbmQgYXJndW1lbnRzIGFzIGBDT05ESVRJT04nLgogIChyZXF1aXJlICdjbC1s aWIpCiAgKHJlcXVpcmUgJ21hcCkKICAocmVxdWlyZSAnc2VxKQogIChyZXF1aXJlICdsb29weSkK CiAgKGNsLWRlZnVuIG15LS1sb29weS1hbHdheXMtY29tbWFuZC1wYXJzZXIgKChfIGNvbmRpdGlv bikpCiAgICAiUGFyc2UgYSBjb21tYW5kIG9mIHRoZSBmb3JtIGAoYWx3YXlzIENPTkRJVElPTikn LgoKICBJZiBhbnkgY29uZGl0aW9uIGlzIG5pbCwgYGxvb3B5JyBzaG91bGQgaW1tZWRpYXRlbHkg cmV0dXJuIG5pbC4KICBPdGhlcndpc2UsIGBsb29weScgc2hvdWxkIHJldHVybiB0LiIKICAgIChs ZXQgKChyZXN1bHQtdmFyICdsb29weS1yZXN1bHQpKQogICAgICBgKChsb29weS0tYWNjdW11bGF0 aW9uLXZhcnMgKCxyZXN1bHQtdmFyIHQpKQogICAgICAgIChsb29weS0taW1wbGljaXQtcmV0dXJu ICxyZXN1bHQtdmFyKQogICAgICAgIDs7IEdldCB0aGUgbWFpbi1ib2R5IGV4cHJlc3Npb25zIG9m IGBsZWF2ZScgYW5kIHNwbGljZQogICAgICAgIDs7IGludG8gdGhlIGB1bmxlc3MnIGJvZHkuICBU aGUgb3RoZXIgYGxlYXZlJyBpbnN0cnVjdGlvbnMKICAgICAgICA7OyBhcmUgdW5tb2RpZmllZCBh bmQgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBvZiB0aGUgcGFyc2VyLgogICAgICAgICxAKGxvb3B5 IChhY2N1bS1vcHQgbWFpbi1leHBycyBvdGhlci1pbnN0cnMpCiAgICAgICAgICAgICAgICAgKGxp c3QgKCZ3aG9sZSBpbnN0ciBwbGFjZSBleHByKSAobG9vcHktLXBhcnNlLWxlYXZlLWNvbW1hbmQg JyhsZWF2ZSkpKQogICAgICAgICAgICAgICAgIChpZiAoZXEgcGxhY2UgJ2xvb3B5LS1tYWluLWJv ZHkpCiAgICAgICAgICAgICAgICAgICAgIChjb2xsZWN0IG1haW4tZXhwcnMgZXhwcikKICAgICAg ICAgICAgICAgICAgIChjb2xsZWN0IG90aGVyLWluc3RycyBpbnN0cikpCiAgICAgICAgICAgICAg ICAgKGZpbmFsbHktcmV0dXJuCiAgICAgICAgICAgICAgICAgIGAoLEBvdGhlci1pbnN0cnMKICAg ICAgICAgICAgICAgICAgICAobG9vcHktLW1haW4tYm9keSAodW5sZXNzICxjb25kaXRpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxICxyZXN1bHQtdmFyIG5p bCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxAbWFpbi1leHBycykp KSkpKSkpCgogIChzZXRmIChtYXAtZWx0IGxvb3B5LWNvbW1hbmQtcGFyc2VycyAnYWx3YXlzKQog ICAgICAgICMnbXktLWxvb3B5LWFsd2F5cy1jb21tYW5kLXBhcnNlcikKIytlbmRfc3JjCgpPbmNl IHdlJ3ZlIGFkZGVkIG91ciBwYXJzaW5nIGZ1bmN0aW9uIHRvIH5sb29weS1jb21tYW5kLXBhcnNl cnN+LCBMb29weSB3aWxsIHVzZQp0aGF0IGZ1bmN0aW9uIHdoZW5ldmVyIGl0IHRyaWVzIHRvIHVu ZGVyc3RhbmQgdGhlID1hbHdheXM9IGNvbW1hbmQuICBJbiB0aGlzCmNhc2UsIHRoaXMgY3VzdG9t IHBhcnNlciB3b3VsZCBzdXBlcmNlZGUgdGhlIGJ1aWx0LWluIHBhcnNlci4gIEFuIGV4YW1wbGUg b3V0cHV0Cm9mIHBhcnNpbmcgYW4gZXhhbXBsZSBjb21tYW5kIHdvdWxkIGJlOgoKIytiZWdpbl9z cmMgZW1hY3MtbGlzcAogIChteS0tbG9vcHktYWx3YXlzLWNvbW1hbmQtcGFyc2VyICcoYWx3YXlz ICg8IGkgMTApKSkKCiAgOzsgPT4KICAoKGxvb3B5LS1hY2N1bXVsYXRpb24tdmFycyAobG9vcHkt cmVzdWx0IHQpKQogICAobG9vcHktLWltcGxpY2l0LXJldHVybiBsb29weS1yZXN1bHQpCiAgIChs b29weS0tbm9uLXJldHVybmluZy1leGl0LXVzZWQgbG9vcHktLW5vbi1yZXR1cm5pbmctZXhpdC10 YWcpCiAgIChsb29weS0tbWFpbi1ib2R5ICh1bmxlc3MgKDwgaSAxMCkKICAgICAgICAgICAgICAg ICAgICAgICAoc2V0cSBsb29weS1yZXN1bHQgbmlsKQogICAgICAgICAgICAgICAgICAgICAgICh0 aHJvdyAnbG9vcHktLW5vbi1yZXR1cm5pbmctZXhpdC10YWcgdCkpKSkKIytlbmRfc3JjCgpIZXJl IGFyZSBzb21lIGV4YW1wbGVzIG9mIHRoZSBjb21tYW5kIGluIGFjdGlvbjoKCiMrYmVnaW5fc3Jj IGVtYWNzLWxpc3AKICA7OyBPbmUgY29uZGl0aW9uOiA9PiB0CiAgKGxvb3B5IChsaXN0IGkgKG51 bWJlci1zZXF1ZW5jZSAxIDkpKSAoYWx3YXlzICg8IGkgMTApKSkKCiAgOzsgVHdvIGNvbmRpdGlv bnM6ID0+IG5pbAogIChsb29weSAobGlzdCBpIChudW1iZXItc2VxdWVuY2UgMSA5KSkKICAgICAg ICAgKGxpc3QgaiAnKDIgNCA2IDggOSkpCiAgICAgICAgIChhbHdheXMgKDwgaSAxMCkgKGNsLWV2 ZW5wIGopKSkKCiAgOzsgVGhlIHByZXZpb3VzIGV4YW1wbGUgaXMgZXF1aXZhbGVudCB0byB0aGlz LgogIChsb29weSAobGlzdCBpIChudW1iZXItc2VxdWVuY2UgMSA5KSkKICAgICAgICAgKGxpc3Qg aiAnKDIgNCA2IDggOSkpCiAgICAgICAgIChhbHdheXMgKGFuZCAoPCBpIDEwKSAoY2wtZXZlbnAg aikpKSkKIytlbmRfc3JjCgpUaGUgYWN0dWFsIGRlZmluaXRpb24gb2YgdGhlID1hbHdheXM9IGNv bW1hbmQgY2FuIGJlIHJlYWQgaW4gdGhlIGxpYnJhcnkKe3t7ZmlsZShsb29weS1jb21tYW5kcy5l bCl9fX0uICBJdCBpcyBjbG9zZSB0byB0aGUgYWJvdmUgZGVmaW5pdGlvbiwgYnV0CmluY2x1ZGVz IG1vcmUgZXJyb3IgY2hlY2tpbmcgZm9yIHdvcmtpbmcgd2l0aCB0aGUgb3RoZXIgY29tbWFuZHMu CgoKKiogQ3VzdG9tIGNvbW1hbmRzIGluIHRoZSB+bG9vcHktaXRlcn4gbWFjcm8KOlBST1BFUlRJ RVM6CjpDVVNUT01fSUQ6IGN1c3RvbS1jb21tYW5kcy1mb3ItbG9vcHktaXRlcgo6RU5EOgoKU2Vl IGFsc28gW1sjbG9vcHktaXRlcl1dLgoKfmxvb3B5LWl0ZXJ+IHdvcmtzIGJ5OgoxLiBzZXBhcmF0 aW5nIG1haW4tYm9keSBpbnN0cnVjdGlvbnMgZnJvbSBvdGhlciBpbnN0cnVjdGlvbnMKMi4gZXhw YW5kaW5nIHRoYXQgbWFpbi1ib2R5IGNvZGUgZm9yIH5sb29weX4gc3ViLWNvbW1hbmRzCjMuIGNv bGxlY3RlZCB0aG9zZSBleHBhbnNpb25zIGludG8gdGhlIG91dHB1dHRlZCBsb29wJ3MgYm9keQo0 LiBwcm9jZXNzaW5nIHRoZSBjb2xsZWN0ZWQgbm9uLW1haW4tYm9keSBpbnN0cnVjdGlvbnMKCk1v c3QgbG9vcCBjb21tYW5kcyBzaG91bGQgd29yayB3aXRoIH5sb29weS1pdGVyfiB3aXRob3V0IGFu eSBjaGFuZ2VzLiAgU29tZSBsb29wCmNvbW1hbmRzIGFyZSBqdXN0IH5sb29weX4gdmVyc2lvbnMg b2YgYnVpbHQtaW4gTGlzcCBtYWNyb3Mgb3Igc3BlY2lhbCBmb3JtcywgYW5kCnNvIGFyZW4ndCBu ZWVkZWQgaW4gfmxvb3B5LWl0ZXJ+IGluIHRoZSBmaXJzdCBwbGFjZS4KCkhvd2V2ZXIsIHNwZWNp YWwgY29uc2lkZXJhdGlvbiBpcyBuZWVkZWQgZm9yIGNvbW1hbmRzIHRoYXQgcHJvZHVjZSBtYWlu LWJvZHkKY29kZSBvdXRzaWRlIG9mIG1haW4tYm9keSBpbnN0cnVjdGlvbnMsIG9yIHRoYXQgYXNz dW1lIGFsbCBvZiB0aGVpciBhcmd1bWVudHMKYXJlIGxvb3AgY29tbWFuZHMuICBDb25zaWRlciBh biBleGFtcGxlIGRlZmluaXRpb24gb2YgdGhlIHBhcnNlciBmb3IgdGhlID1hdD0KY29tbWFuZDoK CiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAoY2wtZGVmdW4gbG9vcHktLXBhcnNlLWF0LWNvbW1h bmQgKChfIHRhcmdldC1sb29wICZyZXN0IGNvbW1hbmRzKSkKICAgICJQYXJzZSB0aGUgYGF0JyBj b21tYW5kIGFzIChhdCAmcmVzdCBDT01NQU5EUykuCgogIFRoZXNlIGNvbW1hbmRzIGFmZmVjdCBv dGhlciBsb29wcyBoaWdoZXIgdXAgaW4gdGhlIGNhbGwgbGlzdC4iCiAgICAobG9vcHktLWNoZWNr LXRhcmdldC1sb29wLW5hbWUgdGFyZ2V0LWxvb3ApCiAgICAobGV0ICgobG9vcHktLWxvb3AtbmFt ZSB0YXJnZXQtbG9vcCkKICAgICAgICAgIChsb29weS0taW4tc3ViLWxldmVsIHQpKQogICAgICBg KChsb29weS0tYXQtaW5zdHJ1Y3Rpb25zCiAgICAgICAgICgsdGFyZ2V0LWxvb3AKICAgICAgICAg ICxAKGxvb3B5LS1wYXJzZS1sb29wLWNvbW1hbmRzIGNvbW1hbmRzKSkpKSkpCiMrZW5kX3NyYwoK QWxsIGl0IGRvZXMgaXMgcHJvY2VzcyBpdHMgYXJndW1lbnRzIGFuZCB3cmFwIHRoZSByZXN1bHRp bmcgaW5zdHJ1Y3Rpb25zIGluIGFuCj1hdD0gaW5zdHJ1Y3Rpb24uICBCeSB3cmFwcGluZyBtYWlu LWJvZHkgaW5zdHJ1Y3Rpb25zIGluIGFuID1hdD0gaW5zdHJ1Y3Rpb24sCn5sb29weS1pdGVyfiBk b2VzIG5vdCBzZWUgdGhlIG1haW4tYm9keSBjb2RlLCBhbmQgc28gY2Fubm90IHVzZSBpdC4gIElu c3RlYWQsIGFuCmFsdGVybmF0aXZlIHBhcnNlciBtdXN0IGJlIHVzZWQ6CgojK2JlZ2luX3NyYyBl bWFjcy1saXNwCiAgKGNsLWRlZnVuIGxvb3B5LWl0ZXItLXBhcnNlLWF0LWNvbW1hbmQgKChfIHRh cmdldC1sb29wICZyZXN0IGNvbW1hbmRzKSkKICAgICJQYXJzZSB0aGUgYGF0JyBjb21tYW5kIGFz IChhdCAmcmVzdCBDT01NQU5EUykuCgogIFRoZXNlIGNvbW1hbmRzIGFmZmVjdCBvdGhlciBsb29w cyBoaWdoZXIgdXAgaW4gdGhlIGNhbGwgbGlzdC4iCiAgICAobG9vcHktLWNoZWNrLXRhcmdldC1s b29wLW5hbWUgdGFyZ2V0LWxvb3ApCiAgICA7OyBXZSBuZWVkIHRvIGNhcHR1cmUgYWxsIG5vbi1t YWluLWJvZHkgaW5zdHJ1Y3Rpb25zIGludG8gYSBuZXcgYGF0JwogICAgOzsgaW5zdHJ1Y3Rpb24s IHNvIHdlIGp1c3QgdGVtcG9yYXJpbHkgYGxldCctYmluZAogICAgOzsgYGxvb3B5LWl0ZXItLW5v bi1tYWluLWJvZHktaW5zdHJ1Y3Rpb25zJyB3aGlsZSB0aGUgZXhwYW5kaW5nIGZ1bmN0aW9ucyBw dXNoCiAgICA7OyB0byBpdCwgd2hpY2ggd2UgdGhlbiB3cmFwIGJhY2sgaW4gYSBuZXcgaW5zdHJ1 Y3Rpb24gYW5kIHBhc3MgdXAgdG8gdGhlCiAgICA7OyBjYWxsaW5nIGZ1bmN0aW9uLCB3aGljaCBj b25zdW1lcyBpbnN0cnVjdGlvbnMuCiAgICAobG9vcHkgKHdpdGggKGxvb3B5LWl0ZXItLW5vbi1t YWluLWJvZHktaW5zdHJ1Y3Rpb25zIG5pbCkKICAgICAgICAgICAgICAgICAobG9vcHktLWxvb3At bmFtZSB0YXJnZXQtbG9vcCkKICAgICAgICAgICAgICAgICAobG9vcHktLWluLXN1Yi1sZXZlbCB0 KQogICAgICAgICAgICAgICAgIChsb29weS1pdGVyLS1sZXZlbCAoMSsgbG9vcHktaXRlci0tbGV2 ZWwpKSkKICAgICAgICAgICAobGlzdCBjbWQgY29tbWFuZHMpCiAgICAgICAgICAgKGNvbGxlY3Qg KGxpc3QgJ2xvb3B5LS1tYWluLWJvZHkgKG1hY3JvZXhwYW5kLWFsbAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFjcm9leHBhbmQtYWxsLWVudmlyb25tZW50KSkpCiAgICAg ICAgICAgKGZpbmFsbHktcmV0dXJuCiAgICAgICAgICAgIDs7IFJldHVybiBsaXN0IG9mIGluc3Ry dWN0aW9ucyB0byBjb21wbHkgd2l0aCBleHBlY3RhdGlvbnMgb2YgY2FsbGluZwogICAgICAgICAg ICA7OyBmdW5jdGlvbiwgd2hpY2ggdGhpbmtzIHRoYXQgdGhpcyBpcyBhIG5vcm1hbCBsb29wLWNv bW1hbmQgcGFyc2VyLgogICAgICAgICAgICBgKCxAbG9vcHktcmVzdWx0CiAgICAgICAgICAgICAg KGxvb3B5LS1hdC1pbnN0cnVjdGlvbnMKICAgICAgICAgICAgICAgKCx0YXJnZXQtbG9vcAogICAg ICAgICAgICAgICAgLEAodGhyZWFkLWxhc3QgbG9vcHktaXRlci0tbm9uLW1haW4tYm9keS1pbnN0 cnVjdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZXZlcnNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoYXBwbHkgIydhcHBlbmQpKSkpKSkpKQojK2VuZF9zcmMK CiMrdmluZGV4OiBsb29weS1pdGVyLS1ub24tbWFpbi1ib2R5LWluc3RydWN0aW9ucwpUaGlzIH5s b29weS1pdGVyfi1zcGVjaWZpYyBkZWZpbml0aW9uIHNlcGFyYXRlcyB0aGUgbWFpbi1ib2R5IGlu c3RydWN0aW9ucyBvdXQKZnJvbSB0aGUgb3RoZXIgaW5zdHJ1Y3Rpb25zIHNvIHRoYXQgfmxvb3B5 LWl0ZXJ+IGNhbiBvcGVyYXRlIG9uIHRoZWlyIHZhbHVlcwpkaXJlY3RseS4gIFRoZSB2YXJpYWJs ZSB+bG9vcHktaXRlci0tbm9uLW1haW4tYm9keS1pbnN0cnVjdGlvbnN+IGlzIGEgcGxhY2UKd2hl cmUgdGhlIG1hY3JvLWV4cGFuZGluZyBwYXJzZXJzIHVzZWQgYnkgfmxvb3B5LWl0ZXJ+IGNhbiBw dXNoIGxpc3RzIG9mCmluc3RydWN0aW9ucyAoc2VlIHRoZSBjb2RlIGZvciB1c2FnZSBleGFtcGxl cykuCgojK3ZpbmRleDogbG9vcHktaXRlci1vdmVyd3JpdHRlbi1jb21tYW5kLXBhcnNlcnMKVGhl c2UgYWx0ZXJuYXRpdmUgY29tbWFuZCBwYXJzZXJzIGFyZSBsaXN0ZWQgaW4Kfmxvb3B5LWl0ZXIt b3ZlcndyaXR0ZW4tY29tbWFuZC1wYXJzZXJzfi4KCioqIEZpbmRpbmcgTW9yZSBFeGFtcGxlcwo6 UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogZmluZGluZy1tb3JlLWV4YW1wbGVzCjpFTkQ6CgpJZiB5 b3Ugd291bGQgbGlrZSB0byBzZWUgbW9yZSBleGFtcGxlcywgY29uc2lkZXIgcmVhZGluZyB0aHJv dWdoIHRoZSBzb3VyY2UgY29kZQpvZiB7e3tmaWxlKGxvb3B5LWNvbW1hbmRzLmVsKX19fSwgd2hp Y2ggY29udGFpbnMgdGhlIGNvZGUgb2YgYWxsIG9mIHRoZSBidWlsdC1pbgpsb29wIGNvbW1hbmRz LiAgWW91IGNhbiBlYXNpbHkgZmluZCB0aGlzIGZpbGUgdXNpbmcge3t7a2JkKE0teCBmaW5kLWxp YnJhcnkKbG9vcHktY29tbWFuZHMgUkVUKX19fS4KCiogQ29tcGFyaW5nIHRvIH5jbC1sb29wfgo6 UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogY29tcGFyaW5nLXRvLWNsLWxvb3AKOkRFU0NSSVBUSU9O OiBXaHkgYGxvb3B5JyBpbnN0ZWFkIG9mIGBjbC1sb29wJy4KOkVORDoKCn5sb29weX4gaXMgYSBi ZXR0ZXIgdmVyc2lvbiBvZiB+Y2wtbG9vcH4sIGp1ZGdpbmcgYnkgdGhlIGZvbGxvd2luZzoKLSBJ dCBhcyBmYXN0IG9yIGZhc3RlciB0aGFuIH5jbC1sb29wfiwgdGhvdWdoIHNvbWUgb3B0aW1pemF0 aW9ucyBhcmUgbW9yZQogIGV4cGxpY2l0LgoKLSBMb29wIGNvbW1hbmRzIGFyZSBhbHdheXMgZXZh bHVhdGVkIGluIG9yZGVyLgoKLSB+bG9vcHl+IHByb3ZpZGVzIGEgbW9yZSBjb21wbGV0ZSBkZXN0 cnVjdHVyaW5nIHN5c3RlbSwgd2hpY2ggY2FuIGJlIHN3YXBwZWQgb3V0CiAgd2l0aCBvdGhlcnMu CgogICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAgIDs7IE5vIGFycmF5IGRlc3RydWN0dXJpbmcg aW4gYGNsLWxvb3AnLgogICAgOzsgPT4gKDMgNykKICAgIChsb29weSAobGlzdCBbaSBqXSAnKFsx IDJdIFszIDRdKSkKICAgICAgICAgICAoY29sbGVjdCAoKyBpIGopKSkKICAjK2VuZF9zcmMKCi0g fmxvb3B5fiBwcm92aWRlcyBtb3JlIGxvb3BpbmcgY29uc3RydWN0cyBvdXQgb2YgdGhlIGJveCB3 aXRoIGEgKGFjY29yZGluZyB0bwogIHRoZSBhdXRob3IpIGNsZWFyZXIgbmFtaW5nIHNjaGVtZSB0 aGFuIH5jbC1sb29wfidzID1mb3I9IGNsYXVzZXMuCgogICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AK ICAgIChsb29weSAobGlzdCBpIG15LXZhcjEpCiAgICAgICAgICAgKGFycmF5IGogbXktdmFyMikK ICAgICAgICAgICAoY29sbGVjdCAoY29ucyBpIGopKSkKCiAgICAoY2wtbG9vcCBmb3IgaSBpbiBt eS12YXIxCiAgICAgICAgICAgICBmb3IgaiBhY3Jvc3MgbXktdmFyMgogICAgICAgICAgICAgY29s bGVjdCAoY29ucyBpIGopKQogICMrZW5kX3NyYwoKLSBUYWtpbmcgaW5mbHVlbmNlIGZyb20gQ0wn cyBJdGVyYXRlLCBzZXZlcmFsIH5sb29weX4gY29tbWFuZHMgYXJlIG1vcmUKICBmZWF0dXJlZnVs IHRoYW4gdGhlaXIgfmNsLWxvb3B+IGNvdW50ZXJwYXJ0cy4KCiAgIytiZWdpbl9zcmMgZW1hY3Mt bGlzcAogICAgOzsgYGFycmF5JyBpcyBtb3JlIGZlYXR1cmVmdWwgdGhhbiBgZm9yLWFjcm9zcycu CiAgICA7OyA9PiAoKDkgLiAyMCkgKDcgLiAxOCkgKDUgLiAxNikgKDMgLiAxNCkgKDEgLiAxMikp CiAgICAobG9vcHkgKGFycmF5IGkgWzExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwXQogICAg ICAgICAgICAgICAgICA6ZG93bmZyb20gOSA6YnkgMiA6dG8gMSA6aW5kZXggaWR4KQogICAgICAg ICAgIChjb2xsZWN0IChjb25zIGlkeCBpKSkpCiAgIytlbmRfc3JjCgotIH5sb29weX4gcHJvdmlk ZXMgbW9yZSBjb250cm9sIG92ZXIgd2hhdCBoYXBwZW5zIGFmdGVyIGFuZCBhcm91bmQgdGhlIGxv b3AuCiAgfmNsLWxvb3B+IGxhY2tzIGVxdWl2YWxlbnRzIG9mIHRoZSBmb2xsb3dpbmcgc3BlY2lh bCBtYWNybyBhcmd1bWVudHM6CiAgLSA9YWZ0ZXItZG89OiBUaGVyZSBpcyBvbmx5IGEgfmZpbmFs bHkgZG9+LgogIC0gPXdpdGhvdXQ9OiBUaGVyZSBpcyBubyB3YXkgdG8gcHJldmVudCB+Y2wtbG9v cH4gZnJvbSBiaW5kaW5nIHZhcmlhYmxlcy4KICAtID1maW5hbGx5LXByb3RlY3Q9OiBUaG91Z2gg bmljaGUsIH5sb29weX4gY2FuIHdyYXAgb25seSB0aGUgbG9vcCBib2R5IGluCiAgICB+dW53aW5k LXByb3RlY3R+LgogIC0gPWFjY3VtLW9wdD06IE5hbWVkIGFjY3VtdWxhdGlvbnMgYXJlIGFsd2F5 cyBtb3JlIHNsb3cgdGhhbiBpbXBsaWNpdAogICAgYWNjdW11bGF0aW9ucyBpbiB+Y2wtbG9vcH4s IGV2ZW4gd2hlbiB0aGV5IGRvbid0IG5lZWQgdG8gYmUuCiAgLSA9d3JhcD06IEFnYWluIG5pY2hl LCBidXQgbWlzc2luZyBmcm9tIH5jbC1sb29wfi4KCi0gfmxvb3B5fiBpcyBtb3JlIGV4dGVuc2li bGUuICBMb29wIGNvbW1hbmRzIGNhbiBiZSBhZGRlZCBlYXNpbHkuCgotIFdoZW4gdXNpbmcgfmxv b3B5LWl0ZXJ+LCB0aGUgbWFjcm8gaXMgbW9yZSBmbGV4aWJsZSBpbiBob3cgaXQgY2FuIGJlIHVz ZWQuCgoqIFRyYW5zbGF0aW5nIHRvIGFuZCBmcm9tID1jbC1sb29wPQo6UFJPUEVSVElFUzoKOkNV U1RPTV9JRDogdHJhbnNsYXRpbmctZnJvbS1jbC1sb29wCjpERVNDUklQVElPTjogQ29udmVydGlu ZyBgY2wtbG9vcCcgdG8gYGxvb3B5JywgYW5kIHZpY2UgdmVyc2EuCjpFTkQ6Cgp+bG9vcHl+IGFu ZCB+Y2wtbG9vcH4gdXNlIHNsaWdodGx5IGRpZmZlcmVudCB0ZXJtaW5vbG9neS4gIFRoZSBlcXVp dmFsZW50IG9mCiJmb3IgY2xhdXNlcyIgYXJlIHJlZmVycmVkIHRvIGFzICJpdGVyYXRpb24gY29t bWFuZHMiIGluIH5sb29weX4sIGFzIHRoZXkgYXJlCmdlbmVyYWxseSB1c2VkIGZvciBpdGVyYXRp bmcgdGhyb3VnaCBzZXF1ZW5jZXMuICBNZWFud2hpbGUsICJpdGVyYXRpb24gY2xhdXNlcyIKY2Fu IGJlIHNlcGFyYXRlZCBpbnRvICJpdGVyYXRpb24gY29tbWFuZHMiICg9bGlzdD0gYW5kID1hcnJh eT0pIGFuZCAiZWFybHktZXhpdApjb21tYW5kcyIgKD13aGlsZT0gYW5kID11bnRpbD0pLgoKIkFj Y3VtdWxhdGlvbiBjbGF1c2VzIiB3b3JrIHRoZSBzYW1lIGFzICJhY2N1bXVsYXRpb24gY29tbWFu ZHMiLgoKKiogRm9yIENsYXVzZXMKOlBST1BFUlRJRVM6CjpDVVNUT01fSUQ6IGZvci1jbGF1c2Vz CjpFTkQ6CgpBcyBFbWFjcyBoYXMgbWFueSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gbGlzdHMsIHRo ZXJlIGlzIG5vIG5lZWQgdG8gaW1wbGVtZW50IGFuCmV4YWN0IGVxdWl2YWxlbnQgZm9yIGV2ZXJ5 ID1mb3I9LWNsYXVzZSB0aGF0IH5jbC1sb29wfiBoYXMuICBJbnN0ZWFkLCBvbmUgY2FuCmp1c3Qg aXRlcmF0ZSB0aHJvdWdoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0 aW9uIHVzaW5nIHRoZQo9bGlzdD0gY29tbWFuZC4KCkZvciB0aGUgY29tbWFuZHMgb3BlcmF0aW5n IG9uIGhhc2ggdGFibGVzLCBzZWUgYWxzbyB0aGUgZ2VuZXJpYyBpdGVyYXRpb24KY29tbWFuZCA9 bWFwLXBhaXJzPSwgd2hpY2ggd29ya3MgZ2VuZXJpY2FsbHkgb24gaGFzaCB0YWJsZXMsIGFzc29j aWF0aW9uIGxpc3RzCigiYWxpc3RzIiksIHByb3BlcnR5IGxpc3RzICgicGxpc3RzIiksIGFuZCB2 ZWN0b3JzLgoKfCB+Y2wtbG9vcH4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCB+bG9vcHl+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8ID1mb3IgVkFSIGZyb20gRVhQ UjEgdG8gRVhQUjIgYnkgRVhQUjM9ICAgICAgICB8ID0obnVtYmVycyBWQVIgOmZyb20gRVhQUjEg OnRvIEVYUFIyIDpieSBFWFBSMyk9IHwKfCA9Zm9yIFZBUiBpbiBMSVNUIFtieSBGVU5DVElPTl09 ICAgICAgICAgICAgICAgfCA9KGxpc3QgVkFSIExJU1QgOmJ5IEZVTkMpPSAgICAgICAgICAgICAg ICAgICAgICB8CnwgPWZvciBWQVIgb24gTElTVCBbYnkgRlVOQ1RJT05dPSAgICAgICAgICAgICAg IHwgPShjb25zIFZBUiBWQUwgOmJ5IEZVTkMpPSAgICAgICAgICAgICAgICAgICAgICAgfAp8ID1m b3IgVkFSIGluLXJlZiBMSVNUIGJ5IEZVTkNUSU9OPSAgICAgICAgICAgICB8ID0obGlzdC1yZWYg VkFSIExJU1QgOmJ5IEZVTkMpPSAgICAgICAgICAgICAgICAgIHwKfCA9Zm9yIFZBUiBhY3Jvc3Mg QVJSQVk9ICAgICAgICAgICAgICAgICAgICAgICAgfCA9KGFycmF5IFZBUiBBUlJBWSk9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8CnwgPWZvciBWQVIgYWNyb3NzLXJlZiBBUlJBWT0gICAg ICAgICAgICAgICAgICAgIHwgPShhcnJheS1yZWYgVkFSIEFSUkFZKT0gICAgICAgICAgICAgICAg ICAgICAgICAgfAp8ID1mb3IgVkFSIGJlaW5nIHRoZSBlbGVtZW50cyBvZiBTRVFVRU5DRT0gICAg ICB8ID0oc2VxdWVuY2UgVkFSIFNFUVVFTkNFKT0gICAgICAgICAgICAgICAgICAgICAgIHwKfCA9 Zm9yIFZBUiBiZWluZyB0aGUgZWxlbWVudHMgb2YtcmVmIFNFUVVFTkNFPSAgfCA9KHNlcXVlbmNl LXJlZiBWQVIgU0VRVUVOQ0UpPSAgICAgICAgICAgICAgICAgICB8CnwgPWZvciBWQVIgYmVpbmcg dGhlIHN5bWJvbHMgW29mIE9CQVJSQVldPSAgICAgIHwgTm9uZSBzbyBmYXIuICBVc2Ugfm1hcGF0 b21zfi4gICAgICAgICAgICAgICAgICAgfAp8ID1mb3IgVkFSIGJlaW5nIHRoZSBoYXNoLWtleXMg b2YgSEFTSC1UQUJMRT0gICB8ID0obGlzdCBWQVIgKGhhc2gtdGFibGUta2V5cyBIQVNILVRBQkxF KSk9ICAgICAgIHwKfCA9Zm9yIFZBUiBiZWluZyB0aGUgaGFzaC12YWx1ZXMgb2YgSEFTSC1UQUJM RT0gfCA9KGxpc3QgVkFSIChoYXNoLXRhYmxlLXZhbHVlcyBIQVNILVRBQkxFKSk9ICAgICB8Cnwg PWZvciBWQVIgYmVpbmcgdGhlIGtleS1jb2RlcyBvZiBLRVlNQVA9ICAgICAgIHwgTm9uZSBzbyBm YXIuICBVc2Ugfm1hcC1rZXltYXB+LiAgICAgICAgICAgICAgICAgfAp8ID1mb3IgVkFSIGJlaW5n IHRoZSBrZXktYmluZGluZ3Mgb2YgS0VZTUFQPSAgICB8IE5vbmUgc28gZmFyLiAgVXNlIH5tYXAt a2V5bWFwfi4gICAgICAgICAgICAgICAgIHwKfCA9Zm9yIFZBUiBiZWluZyB0aGUga2V5LXNlcXMg b2YgS0VZTUFQPSAgICAgICAgfCBOb25lIHNvIGZhci4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8CnwgPWZvciBWQVIgYmVpbmcgdGhlIG92ZXJsYXlzIFtvZiBCVUZGRVJdPSAg ICAgIHwgTm9uZSBzbyBmYXIuICBVc2Ugfm92ZXJsYXktbGlzdHN+LiAgICAgICAgICAgICAgfAp8 ID1mb3IgVkFSIGJlaW5nIHRoZSBpbnRlcnZhbHMgW29mIEJVRkZFUl09ICAgICB8IE5vbmUgc28g ZmFyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCA9Zm9yIFZBUiBiZWlu ZyB0aGUgZnJhbWVzPSAgICAgICAgICAgICAgICAgICAgfCA9KGxpc3QgVkFSIChmcmFtZS1saXN0 KSk9ICAgICAgICAgICAgICAgICAgICAgICB8CnwgPWZvciBWQVIgYmVpbmcgdGhlIHdpbmRvd3Mg W29mIEZSQU1FXT0gICAgICAgIHwgPShsaXN0IFZBUiAod2luZG93LWxpc3QgRlJBTUUpKT0gICAg ICAgICAgICAgICAgfAp8ID1mb3IgVkFSIGJlaW5nIHRoZSBidWZmZXJzPSAgICAgICAgICAgICAg ICAgICB8ID0obGlzdCBWQVIgKGJ1ZmZlci1saXN0KSk9ICAgICAgICAgICAgICAgICAgICAgIHwK fCA9Zm9yIFZBUiA9IEVYUFIxIHRoZW4gRVhQUjI9ICAgICAgICAgICAgICAgICAgfCA9KHNldCBW QVIgRVhQUjEgRVhQUjIpPSAgICAgICAgICAgICAgICAgICAgICAgICB8CgoqKiBJdGVyYXRpb24g Q2xhdXNlcwo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogaXRlcmF0aW9uLWNsYXVzZXMKOkVORDoK CnwgfmNsLWxvb3B+ICAgICAgICAgIHwgfmxvb3B5fiAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCA9cmVwZWF0IElOVD0gICAgICAgfCA9KGN5 Y2xlIElOVCk9ICAgICB8CnwgPXdoaWxlIENPTkQ9ICAgICAgIHwgPSh3aGlsZSBDT05EKT0gICAg fAp8ID11bnRpbCBDT05EPSAgICAgICB8ID0odW50aWwgQ09ORCk9ICAgIHwKfCA9aXRlci1ieSBp dGVyYXRvcj0gfCA9KGl0ZXIgSVRFUkFUT1IpPSB8CnwgPW5ldmVyPSAgICAgICAgICAgIHwgPShu ZXZlciBDT05EKT0gICAgfAp8ID1hbHdheXM9ICAgICAgICAgICB8ID0oYWx3YXlzIENPTkQpPSAg IHwKfCA9dGhlcmVpcz0gICAgICAgICAgfCA9KHRoZXJlaXMgQ09ORCk9ICB8CgoqKiBBY2N1bXVs YXRpb24gQ2xhdXNlcwo6UFJPUEVSVElFUzoKOkNVU1RPTV9JRDogYWNjdW11bGF0aW9uLWNsYXVz ZXMKOkVORDoKCkxpa2Ugd2l0aCB+Y2wtbG9vcH4sIGluIH5sb29weX4sIGFjY3VtdWxhdGlvbiBj b21tYW5kcyBhY2N1bXVsYXRlIGludG8gdGhlIHNhbWUKdmFyaWFibGUgd2hlbiBubyA9VkFSPSBp cyBnaXZlbiAoYnkgZGVmYXVsdCwgfmxvb3B5LXJlc3VsdH4pLgoKfCB+Y2wtbG9vcH4gICAgICAg ICAgICAgICAgfCB+bG9vcHl+ICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8ID1hcHBlbmQgRVhQUiBpbnRvIFZBUj0gICB8 ID0oYXBwZW5kIFZBUiBFWFBSKT0gIHwKfCA9Y29sbGVjdCBFWFBSIGludG8gVkFSPSAgfCA9KGNv bGxlY3QgVkFSIEVYUFIpPSB8CnwgPWNvbmNhdCBFWFBSIGludG8gVkFSPSAgIHwgPShjb25jYXQg VkFSIEVYUFIpPSAgfAp8ID1jb3VudCBFWFBSIGludG8gVkFSPSAgICB8ID0oY291bnQgVkFSIEVY UFIpPSAgIHwKfCA9bWF4aW1pemUgRVhQUiBpbnRvIFZBUj0gfCA9KG1heGltaXplIFZBUiBFWFBS KT0gfAp8ID1taW5pbWl6ZSBFWFBSIGludG8gVkFSPSB8ID0obWluaW1pemUgVkFSIEVYUFIpPSB8 CnwgPW5jb25jIEVYUFIgaW50byBWQVI9ICAgIHwgPShuY29uYyBWQVIgRVhQUik9ICAgfAp8ID1z dW0gRVhQUiBpbnRvIFZBUj0gICAgICB8ID0oc3VtIFZBUiBFWFBSKT0gICAgIHwKfCA9dmNvbmNh dCBFWFBSIGludG8gVkFSPSAgfCA9KHZjb25jYXQgVkFSIEVYUFIpPSB8CgoqKiBPdGhlciBDbGF1 c2VzCjpQUk9QRVJUSUVTOgo6Q1VTVE9NX0lEOiBvdGhlci1jbGF1c2VzCjpFTkQ6CgpJbiB+bG9v cHl+LCA9aWY9LCA9d2hlbj0sIGFuZCA9dW5sZXNzPSBjYW4gdGFrZSBtdWx0aXBsZSBsb29wIGNv bW1hbmRzIGFzCmFyZ3VtZW50cywgYW5kIG9wZXJhdGUgbW9yZSBsaWtlIHRoZWlyIExpc3AgY291 bnRlcnBhcnRzLgoKVGhpcyBtZWFucyB0aGF0ID1pZj0gaXMgbm90IGEgc3lub255bSBmb3IgPXdo ZW49LiAgSnVzdCBsaWtlIHRoZSBub3JtYWwgTGlzcApzcGVjaWFsIGZvcm0gfmlmfiwgPShpZiBD T05EIGNtZDEgY21kMiBjbWQzKT0gb25seSBydW5zID1jbWQxPSBpZiA9Q09ORD0KZXZhbHVhdGVz IHRvIG5vbi1uaWwsIGFuZCBvbmx5IHJ1bnMgY29tbWFuZHMgPWNtZDI9IGFuZCA9Y21kMz0gaWYg PUNPTkQ9CmV2YWx1YXRlcyB0byB+bmlsfi4KCn5sb29weX4gYWxzbyBwcm92aWRlcyB0aGUgY29t bWFuZCA9Y29uZD0sIHdoaWNoIHdvcmtzIGxpa2UgdGhlIG5vcm1hbCBMaXNwCnNwZWNpYWwgZm9y bSB+Y29uZH4uCgp8IH5jbC1sb29wfiAgICAgICAgICAgICAgfCB+bG9vcHl+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8ID13aXRoIHZh ciA9IHZhbHVlPSAgICAgfCA9KHdpdGggKFZBUiBWQUxVRSkpPSBhcyBhIG1hY3JvIGFyZ3VtZW50 ICAgICAgfAp8ID1pZiBDT05EIGNsYXVzZT0gICAgICAgfCA9KGlmIENPTkQgQ01EUyk9IGFzIGEg bG9vcCBjb21tYW5kICAgICAgICAgICAgfAp8ID13aGVuIENPTkQgY2xhdXNlPSAgICAgfCA9KHdo ZW4gQ09ORCBDTURTKT0gYXMgYSBsb29wIGNvbW1hbmQgICAgICAgICAgfAp8ID11bmxlc3MgQ09O RCBjbGF1c2U9ICAgfCA9KHVubGVzcyBDT05EIENNRFMpPSBhcyBhIGxvb3AgY29tbWFuZCAgICAg ICAgfAp8ID1uYW1lZCBOQU1FPSAgICAgICAgICAgfCA9TkFNRT0gb3IgPShuYW1lZCBOQU1FKT0g YXMgYSBtYWNybyBhcmd1bWVudCAgfAp8ID1pbml0aWFsbHkgW2RvXSBFWFBSUz0gfCA9KGJlZm9y ZS1kbyBFWFBSUyk9IGFzIGEgbWFjcm8gYXJndW1lbnQgICAgICAgfAp8ID1maW5hbGx5IFtkb10g RVhQUlM9ICAgfCA9KGZpbmFsbHktZG8gRVhQUlMpPSBhcyBhIG1hY3JvIGFyZ3VtZW50ICAgICAg fAp8ID1maW5hbGx5IHJldHVybiBFWFBSPSAgfCA9KGZpbmFsbHktcmV0dXJuIEVYUFIpPSBhcyBh IG1hY3JvIGFyZ3VtZW50ICAgfAp8ID1kbyBFWFBSUz0gICAgICAgICAgICAgfCA9KGRvIEVYUFJT KT0gYXMgYSBsb29wIGNvbW1hbmQgICAgICAgICAgICAgICAgfAp8ID1yZXR1cm4gRVhQUj0gICAg ICAgICAgfCA9KHJldHVybiBFWFBSKT0gYXMgYSBsb29wIGNvbW1hbmQgICAgICAgICAgICAgfAoK KiBNYWNybyBBcmd1bWVudCBhbmQgTG9vcCBDb21tYW5kIEluZGV4CiAgOlBST1BFUlRJRVM6CiAg OklOREVYOiBmbgogIDpFTkQ6CgoqIFZhcmlhYmxlIEluZGV4CiAgOlBST1BFUlRJRVM6CiAgOklO REVYOiB2cgogIDpFTkQ6CgoqIENvbmNlcHQgSW5kZXgKICA6UFJPUEVSVElFUzoKICA6SU5ERVg6 IGNwCiAgOkVORDoKCiogRm9vdG5vdGVzCltmbjpkYXNoXSBodHRwczovL2dpdGh1Yi5jb20vbWFn bmFycy9kYXNoLmVsCgpbZm46MV0gU3RyaW5ncyBiZWluZyBhIGtpbmQgb2YgYXJyYXkuICBTZWUg W1tpbmZvOmVsaXNwI1NlcXVlbmNlcyBBcnJheXMgVmVjdG9yc11dCmZvciBtb3JlLgoKW2ZuOml0 ZXJdIGh0dHBzOi8vY29tbW9uLWxpc3AubmV0L3Byb2plY3QvaXRlcmF0ZS8KCltmbjpyZXBvXSBb W2h0dHBzOi8vZ2l0aHViLmNvbS9va2Ftc24vbG9vcHldXQoKW2ZuOnNlbC13aWtpXQpbW2h0dHBz Oi8vZ2l0aHViLmNvbS9yYXhvZDUwMi9zZWxlY3RydW0vd2lraS9Vc2VmdWwtQ29tbWFuZHMjc3dp cGVyLWxpa2UtanVtcGluZy10by1tYXRjaGluZy1saW5lc11dCgojIExvY2FsIFZhcmlhYmxlczoK IyB0b2Mtb3JnLW1heC1kZXB0aDogMjAKIyBzZW50ZW5jZS1lbmQtZG91YmxlLXNwYWNlOiB0CiMg b3JnLWFkYXB0LWluZGVudGF0aW9uOiBuaWwKIyBFbmQ6CgojICBMb2NhbFdvcmRzOiAgYWxpc3Rz IHBsaXN0cyBMb29weSdzIENMJ3MK --b1_HrqAhwmgGYAM6kNMg5ZfvMBPawR4e9W5dnzVVFLZAU--