From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "David De La Harpe Golden" Newsgroups: gmane.emacs.devel Subject: Re: Improving X selection? Date: Thu, 7 Feb 2008 03:57:17 +0000 Message-ID: <8e24944a0802061957re4baf7cr9560fa3496be56b4@mail.gmail.com> References: <8e24944a0801281152w733c977akda93089a52701219@mail.gmail.com> <8e24944a0801281659sa5a9115rf4533184413a8b20@mail.gmail.com> <8e24944a0802011115h77423fd1p2eae15a1e46bca1a@mail.gmail.com> <8e24944a0802011617k66c49283id9478dc3d5168bdf@mail.gmail.com> <8e24944a0802030338i1ce3397yba581ffedbe2f118@mail.gmail.com> <47A5B737.8000804@swipnet.se> <8e24944a0802030512t77c4ca20s6d059df50295ebd2@mail.gmail.com> <8e24944a0802041302n45064c4fm2ac428ceda204254@mail.gmail.com> <47A80B57.3050402@swipnet.se> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_14733_2472276.1202356637438" X-Trace: ger.gmane.org 1202356679 12501 80.91.229.12 (7 Feb 2008 03:57:59 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 7 Feb 2008 03:57:59 +0000 (UTC) Cc: "Horsley, Tom" , "Jan D." To: rms@gnu.org, emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Feb 07 04:58:19 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1JMxte-0000yq-9c for ged-emacs-devel@m.gmane.org; Thu, 07 Feb 2008 04:58:15 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JMxtA-0002m7-2i for ged-emacs-devel@m.gmane.org; Wed, 06 Feb 2008 22:57:28 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JMxt5-0002m1-13 for emacs-devel@gnu.org; Wed, 06 Feb 2008 22:57:23 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JMxt3-0002la-Ji for emacs-devel@gnu.org; Wed, 06 Feb 2008 22:57:22 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JMxt3-0002lX-EG for emacs-devel@gnu.org; Wed, 06 Feb 2008 22:57:21 -0500 Original-Received: from wx-out-0506.google.com ([66.249.82.227]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JMxt2-0002sG-0y for emacs-devel@gnu.org; Wed, 06 Feb 2008 22:57:21 -0500 Original-Received: by wx-out-0506.google.com with SMTP id s7so2974704wxc.24 for ; Wed, 06 Feb 2008 19:57:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; bh=We4Ydpjmqmn05VtmwpTVQns1nE0AuGYUL/yK4Gie/bc=; b=VVYYNllpcnFcC2Y6wjib2mX2TJw72T2Pcq9wlL7ymcpWXZ7IDXqkWCTxAiESGur79Nn8BbkQzDC3zwBBy9HRWHLe1xfPsnQokTX4eoe+V6IxsHUDU0JcUG2E6qOdvWq/brWLGWMc1WBtSaDKEwqoJTeSNLs9kRC3bV71Za6OOFs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=lzE0nHPDkQht4eqCqoBuaTvvSNzzu855qFUyEGzU1JusuFHQgP4W9cKPbUEiS40O6+/iHqTW9zJO+1MEV3hIPjJONnpSXB7CCAoeSRqVHvGJoAAEPOFfFKNKcdM7EHATR4WQ/drsLYrg1Yep5akoabtMHB7uVfpqw72MHq0BS8w= Original-Received: by 10.142.144.16 with SMTP id r16mr5899313wfd.97.1202356637437; Wed, 06 Feb 2008 19:57:17 -0800 (PST) Original-Received: by 10.142.111.4 with HTTP; Wed, 6 Feb 2008 19:57:17 -0800 (PST) In-Reply-To: <47A80B57.3050402@swipnet.se> X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:88388 Archived-At: ------=_Part_14733_2472276.1202356637438 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline I'm sorry about email length (again), but if you haven't yet waded through my previous emails in this thread yet, please don't bother, just start on this one. Rev. 2 of improved X selections attempt attached (patch against recent emacs CVS HEAD). Supersedes previously sent patches and associated writeups in my previous emails in this thread. (To Tom Horsley: a part of particular interest for you re multiple selections is tagged "[TOM HORSLEY]" below.) This time, patch will (or at least should - if it doesn't, it's a bug) default to existing emacs behaviours. Sample customization that makes emacs with this patch mimic recent-X11-style interaction very closely is given at the end. Relevant customization groups: killing, mouse, editing-basics. Note again some complexity stems from trying to allow for all possible customizations of existing X11 emacs selection behaviour AND desired new behaviours. A ruthless reimplementation supporting only one recent-X11-style behaviour and/or losing backward-compat would yield rather simpler-looking code and customizations - but would hardly be acceptable for people who like all or aspects of existing emacs selection behaviour (myself included). Five files are affected in rev. 2: lisp/w32-vars.el (?!, see below) lisp/loadup.el lisp/simple.el lisp/mouse.el lisp/term/x-win.el Details of changes below - largely a more concise recap of previous mails, but sorted by file may be easier to take in as a whole. Meta: shouldn't the interprogram- functions be frame-specific somehow given multi-tty? the X11 implementations for these functions currently have an uggy check-if-frame-is-really-X. Meta: tool-bar and menu-bar cut/paste might benefit from alterations to go with these changes (but N.B. should still work as before without changes). *** 1. lisp/w32-vars.el [Niggle, but would need to be sorted somehow before any merge...] Not clear on (i) why this file is being loaded in the first place on my gnu+linux+xorg system, and (ii) not clear on what another x-select-enable-clipboard is doing in it either: presumably w32 has or should have something like w32-select-enable-clipboard for customization of its interprogram-[cut|paste]-function implementations, not screw up the x- ones. *** 2. lisp/loadup.el If I place the idle-timer based fix in simple.el, then timer needs to be loaded before it. I'm not sure this is safe, the old order might well have been that way for some reason, but seems to work. *** 3. lisp/simple.el Introduced interprogram-highlight-function analogous to interprogram-cut-function, but for outgoing highlight propagation on platforms where it makes sense (i.e. X11, mostly, though other terms could supply implementations if they wanted to provide some X11-like behaviour). The value of this function is called by the implementation of select-active-regions. Added idle-timer based implementation of select-active-regions: when region is active, have an idle timer check the active region for changes, and use interprogram-highlight-function to propagate out. Introduced interprogram-lightins-function analogous to interprogram-paste-function, but for incoming X11-style highlight/middlebutton insertions on platforms where it makes sense (i.e. X11, mostly, though other terms could supply implementations if they wanted to provide some X11-like behaviour). The value of this function is called by mouse-yank-at-click when mouse-yank-at-click-source is lightins (see mouse.el discussion below) (Note that to actually produce recent-X11-style behaviour, customizations of [the X11 implementations of] these functions and mouse behaviour, are necessary - see below mouse.el and x-win.el discussion and the example at end) *** 4. lisp/mouse.el (i) Move deactivate-mark in mouse-drag-track (mouse-1) so that it happens before initial point move. This is probably less important with the idle-timer implementation of select-active-regions (will emacs ever go idle in the middle of mouse-drag-track?), but still if the initial point move happens before the deactivate-mark, there IS a moment when the old active region has been spuriously deformed. (ii) Introduce mouse-yank-at-click-source, which allows to customize whether mouse-yank-at-click (mouse-2) gets the text to be inserted by using the kill ring yank proper (and thereby perhaps interprogram-paste-function, and perhaps adding to the kill ring), or the interprogram-lightins-function, without affecting the kill ring. (iii) Introduce mouse-save-then-kill-copy-region (mouse-3), which, analogously to mouse-drag-copy-region for mouse-drag, customizes the interaction of mouse-save-then-kill with the kill ring. original behaviour: single-click save, double-click kill new behaviour 1: just adjust active region. new behavour 2: adjust active region on single click, double-click save, triple-click kill. (point here is that active region adjustment may, depending on select-active-region, cause propagation to X11 selection(s) without affecting kill-ring via interprogram-highlight-function, whereas saving and killing will affect kill-ring and possibly also X11 selection(s) via interprogram-cut-function. So, the new behaviours are necessary to avoid confusing behaviour of mouse-3 when trying to do recent-X11-style) Should possibly also similarly augment mouse-secondary-save-then-kill. *** 5. lisp/term/x-win.el This is, perhaps despite appearances, really fairly straightforward: Supplied X11 implementations of the four (was two) interprogram-* functions in lisp/simple.el as follows: interprogram-cut => x-select-text (revised) interprogram-paste => x-cut-buffer-or-selection-value (revised) interprogram-highlight => x-select-text-for-highlight (new) interprogram-lightins => x-cut-buffer-or-selection-value-for-lightins (new) As x-select-text and x-select-text-for-highlight are nearly identical, they are both implemented as wrappers around x-select-text-for-op. These revised/new functions have an expanded range of possible customizations: Allowed specification of which of the X11 implementations of the interprogram- functions the X11 PRIMARY and CLIPBOARD selections and the legacy X Cut Buffer 0 will be involved in. I didn't bother involving X11 SECONDARY in all this. It could be done, though (mouse.el has existing secondary-handling code that is (afaik) neither hurt nor improved by this patch). This is done by allowing x-select-enable-clipboard, x-select-enable-primary and (new) x-select-enable-cutbuffer to take values other than nil and t: sets of one or more of cut, paste, highlight, lightins. nil and t also had to be supported for backward compat, and it was done "this way round" (rather than specifying for each interprogram- what selection) also for backward compat. [TOM HORSLEY] Multiple Selections: Also added something like Tom Horsley's (cc'd in case not onlist -as I'm not likely to use the feature, you might want to test if I've got the behaviour you want right!) desired feature (though different implementation to fit in with rest of changes...): As the ability for interprogram-paste-function implementations to return more than one value was added last year, add the ability for x-cut-buffer-or-selection-value to return multiple selections, customized by boolean x-cut-buffer-or-selection-value-return-multiple, and choice x-cut-buffer-or-selection-value-return-order: If -multiple is nil, then return the "winner", priority determined by -order. If -multiple is t, then return all available unique selections in order determined by -order. N.B. Existing emacs just used "winner" with a fixed order => default is existing emacs behaviour. I think the nondefault primary-first order works better with -return-multiple, FWIW. (Yes some names here are rather long. If I could slightly break transparency of the changes by e.g. removing "-cut-buffer-or" from them, they'd look much better.) *** Customization corresponding to recent-X11-style. The following, starting from an emacs -Q, makes X11 emacs + this patch closely follow recent-X11-style: kill-ring should "be" clipboard, but not primary. (though personally I prefer sort of a compromise position between this and historic emacs behaviour, but I doubt my prefs would make good default). ;; cua-mode (or pc-selection-mode) also works fine alongside ;; these settings to further "fit in". (custom-set-variables '(mouse-drag-copy-region nil) '(yank-pop-change-selection nil) '(mouse-save-then-kill-copy-region nil) '(mouse-yank-at-click-source :lightins) '(select-active-regions t) '(transient-mark-mode t) '(x-cut-buffer-or-selection-value-return-multiple nil) '(x-select-enable-clipboard (quote (:cut :paste))) '(x-select-enable-cutbuffer nil) '(x-select-enable-primary (quote (:highlight :lightins)))) ------=_Part_14733_2472276.1202356637438 Content-Type: text/x-diff; name=enhanced-x-selections_rev2.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fccrrc3x Content-Disposition: attachment; filename=enhanced-x-selections_rev2.diff SW5kZXg6IGxpc3AvdzMyLXZhcnMuZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZW1h Y3MvZW1hY3MvbGlzcC93MzItdmFycy5lbCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZm IC1VIDggLWQgLXIxLjE5IHczMi12YXJzLmVsCi0tLSBsaXNwL3czMi12YXJzLmVsCTggSmFuIDIw MDggMjA6NDQ6NDggLTAwMDAJMS4xOQorKysgbGlzcC93MzItdmFycy5lbAk3IEZlYiAyMDA4IDAz OjQzOjM0IC0wMDAwCkBAIC0xNDQsMTggKzE0NCwyMCBAQAogCSAgICAgIChyZXBlYXQgOmlubGlu ZSB0CiAJICAgICAgIChjaG9pY2UgOnRhZyAiIgogCQkoY29uc3QgOnRhZyAiU2VwYXJhdG9yIiAo IiIpKQogCQkobGlzdCA6dGFnICJGb250IEVudHJ5IgogCQkgICAgICAoc3RyaW5nIDp0YWcgIk1l bnUgdGV4dCIpCiAJCSAgICAgIChzdHJpbmcgOnRhZyAiRm9udCIpKSkpKSkpCiAgICAgOmdyb3Vw ICd3MzIpCiAKLShkZWZjdXN0b20geC1zZWxlY3QtZW5hYmxlLWNsaXBib2FyZCB0Ci0gICIqTm9u LW5pbCBtZWFucyBjdXR0aW5nIGFuZCBwYXN0aW5nIHVzZXMgdGhlIGNsaXBib2FyZC4KLVRoaXMg aXMgaW4gYWRkaXRpb24gdG8gdGhlIHByaW1hcnkgc2VsZWN0aW9uLiIKLSAgOnR5cGUgJ2Jvb2xl YW4KLSAgOmdyb3VwICdraWxsaW5nKQorOzsgV2h5IGlzIHRoaXMgaGVyZT8gRm9yIHRoYXQgbWF0 dGVyLCB3aHkgaXMgCis7OyB0aGlzIGZpbGUgYmVpbmcgbG9hZGVkIGluIGEgbGludXgvWDExIGJ1 aWxkIG9mIGVtYWNzPworOzsoZGVmY3VzdG9tIHgtc2VsZWN0LWVuYWJsZS1jbGlwYm9hcmQgdAor OzsgICIqTm9uLW5pbCBtZWFucyBjdXR0aW5nIGFuZCBwYXN0aW5nIHVzZXMgdGhlIGNsaXBib2Fy ZC4KKzs7VGhpcyBpcyBpbiBhZGRpdGlvbiB0byB0aGUgcHJpbWFyeSBzZWxlY3Rpb24uIgorOzsg IDp0eXBlICdib29sZWFuCis7OyAgOmdyb3VwICdraWxsaW5nKQogCiAocHJvdmlkZSAndzMyLXZh cnMpCiAKIDs7OyBhcmNoLXRhZzogZWUyMzk0ZmItOWRiNy00YzE1LWE4ZjAtNjZiNDdmNGEyYmIx CiA7OzsgdzMyLXZhcnMuZWwgZW5kcyBoZXJlCkluZGV4OiBsaXNwL2xvYWR1cC5lbAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvc291cmNlcy9lbWFjcy9lbWFjcy9saXNwL2xvYWR1cC5lbCx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4xNjAKZGlmZiAtVSA4IC1kIC1yMS4xNjAgbG9hZHVwLmVsCi0tLSBs aXNwL2xvYWR1cC5lbAkxIEZlYiAyMDA4IDIyOjQzOjEwIC0wMDAwCTEuMTYwCisrKyBsaXNwL2xv YWR1cC5lbAk3IEZlYiAyMDA4IDAzOjQzOjM1IC0wMDAwCkBAIC03NywxNiArNzcsMTcgQEAKIChs b2FkICJidXR0b24iKQogKGxvYWQgInN0YXJ0dXAiKQogCiAobWVzc2FnZSAiTGlzdHMgb2YgaW50 ZWdlcnMgKGdhcmJhZ2UgY29sbGVjdGlvbiBzdGF0aXN0aWNzKSBhcmUgbm9ybWFsIG91dHB1dCIp CiAobWVzc2FnZSAid2hpbGUgYnVpbGRpbmcgRW1hY3M7IHRoZXkgZG8gbm90IGluZGljYXRlIGEg cHJvYmxlbS4iKQogKG1lc3NhZ2UgIiVzIiAoZ2FyYmFnZS1jb2xsZWN0KSkKIChsb2FkICJsb2Fk ZGVmcy5lbCIpICA7RG9uJ3QgZ2V0IGNvbmZ1c2VkIGlmIHNvbWVvbmUgY29tcGlsZWQgdGhpcyBi eSBtaXN0YWtlLgogKG1lc3NhZ2UgIiVzIiAoZ2FyYmFnZS1jb2xsZWN0KSkKKyhsb2FkICJlbWFj cy1saXNwL3RpbWVyIikgOyAgc2VsZWN0LWFjdGl2ZS1yZWdpb25zIGluIHNpbXBsZS5lbCBuZWVk cyB0aW1lci4KIChsb2FkICJzaW1wbGUiKQogCiAobG9hZCAiaGVscCIpCiAKIChsb2FkICJqa2Et Y21wci1ob29rIikKIDs7IEFueSBFbWFjcyBMaXNwIHNvdXJjZSBmaWxlICgqLmVsKSBsb2FkZWQg aGVyZSBhZnRlciBjYW4gY29udGFpbgogOzsgbXVsdGlsaW5ndWFsIHRleHQuCiAobG9hZCAiaW50 ZXJuYXRpb25hbC9tdWxlLWNtZHMiKQpAQCAtMTQwLDE3ICsxNDEsMTYgQEAKIChsb2FkICJqaXQt bG9jayIpCiAKIChpZiAoZmJvdW5kcCAndHJhY2stbW91c2UpCiAgICAgKHByb2duCiAgICAgICAo bG9hZCAibW91c2UiKQogICAgICAgKGFuZCAoYm91bmRwICd4LXRvb2xraXQtc2Nyb2xsLWJhcnMp CiAJICAgKGxvYWQgInNjcm9sbC1iYXIiKSkKICAgICAgIChsb2FkICJzZWxlY3QiKSkpCi0obG9h ZCAiZW1hY3MtbGlzcC90aW1lciIpCiAobG9hZCAiaXNlYXJjaCIpCiAobG9hZCAicmZuLWVzaGFk b3ciKQogCiAobWVzc2FnZSAiJXMiIChnYXJiYWdlLWNvbGxlY3QpKQogKGxvYWQgIm1lbnUtYmFy IikKIChsb2FkICJwYXRocy5lbCIpICA7RG9uJ3QgZ2V0IGNvbmZ1c2VkIGlmIHNvbWVvbmUgY29t cGlsZWQgcGF0aHMgYnkgbWlzdGFrZS4KIChsb2FkICJlbWFjcy1saXNwL2xpc3AiKQogKGxvYWQg InRleHRtb2Rlcy9wYWdlIikKSW5kZXg6IGxpc3Avc2ltcGxlLmVsCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9zb3VyY2VzL2VtYWNzL2VtYWNzL2xpc3Avc2ltcGxlLmVsLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjg5OQpkaWZmIC1VIDggLWQgLXIxLjg5OSBzaW1wbGUuZWwKLS0tIGxpc3Avc2ltcGxl LmVsCTEgRmViIDIwMDggMTY6MDE6MDUgLTAwMDAJMS44OTkKKysrIGxpc3Avc2ltcGxlLmVsCTcg RmViIDIwMDggMDM6NDM6NDEgLTAwMDAKQEAgLTI1NDUsMTggKzI1NDUsMTkgQEAKIAkgICAgKHNl dC10ZXh0LXByb3BlcnRpZXMgMCAobGVuZ3RoIHN0cmluZykgbmlsIHN0cmluZykpCiAJc3RyaW5n KSkpCiAgICAobm9wcm9wcwogICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgYmVn IGVuZCkpCiAgICAodAogICAgIChidWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpKSkpCiAKIAotOzs7 OyBXaW5kb3cgc3lzdGVtIGN1dCBhbmQgcGFzdGUgaG9va3MuCis7Ozs7IFdpbmRvdyBzeXN0ZW0g Y3V0L3Bhc3RlIGFuZCBoaWdobGlnaHQvbGlnaHRpbnMgaG9va3MuCiAKKzs7IGdpdmVuIG11bHRp LXR0eSwgc2hvdWxkbid0IHRoZXNlIGJlIGZyYW1lLWxvY2FsPwogKGRlZnZhciBpbnRlcnByb2dy YW0tY3V0LWZ1bmN0aW9uIG5pbAogICAiRnVuY3Rpb24gdG8gY2FsbCB0byBtYWtlIGEga2lsbGVk IHJlZ2lvbiBhdmFpbGFibGUgdG8gb3RoZXIgcHJvZ3JhbXMuCiAKIE1vc3Qgd2luZG93IHN5c3Rl bXMgcHJvdmlkZSBzb21lIHNvcnQgb2YgZmFjaWxpdHkgZm9yIGN1dHRpbmcgYW5kCiBwYXN0aW5n IHRleHQgYmV0d2VlbiB0aGUgd2luZG93cyBvZiBkaWZmZXJlbnQgcHJvZ3JhbXMuCiBUaGlzIHZh cmlhYmxlIGhvbGRzIGEgZnVuY3Rpb24gdGhhdCBFbWFjcyBjYWxscyB3aGVuZXZlciB0ZXh0CiBp cyBwdXQgaW4gdGhlIGtpbGwgcmluZywgdG8gbWFrZSB0aGUgbmV3IGtpbGwgYXZhaWxhYmxlIHRv IG90aGVyCiBwcm9ncmFtcy4KQEAgLTI1ODYsMTcgKzI1ODcsNjcgQEAKIHVzZWQgYXMgdGhlIHBh c3RlZCB0ZXh0LCBidXQgdGhlIG90aGVyIHdpbGwgYmUgcGxhY2VkIGluIHRoZQoga2lsbCByaW5n IGZvciBlYXN5IGFjY2VzcyB2aWEgYHlhbmstcG9wJy4KIAogTm90ZSB0aGF0IHRoZSBmdW5jdGlv biBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIG9ubHkgaWYgYSBwcm9ncmFtIG90aGVyCiB0aGFuIEVt YWNzIGhhcyBwcm92aWRlZCBhIHN0cmluZyBmb3IgcGFzdGluZzsgaWYgRW1hY3MgcHJvdmlkZWQg dGhlCiBtb3N0IHJlY2VudCBzdHJpbmcsIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIG5pbC4g IElmIGl0IGlzCiBkaWZmaWN1bHQgdG8gdGVsbCB3aGV0aGVyIEVtYWNzIG9yIHNvbWUgb3RoZXIg cHJvZ3JhbSBwcm92aWRlZCB0aGUKIGN1cnJlbnQgc3RyaW5nLCBpdCBpcyBwcm9iYWJseSBnb29k IGVub3VnaCB0byByZXR1cm4gbmlsIGlmIHRoZSBzdHJpbmcKLWlzIGVxdWFsIChhY2NvcmRpbmcg dG8gYHN0cmluZz0nKSB0byB0aGUgbGFzdCB0ZXh0IEVtYWNzIHByb3ZpZGVkLiIpCitpcyBlcXVh bCBcKGFjY29yZGluZyB0byBgc3RyaW5nPScpIHRvIHRoZSBsYXN0IHRleHQgRW1hY3MgcHJvdmlk ZWQuIikKKworKGRlZnZhciBpbnRlcnByb2dyYW0taGlnaGxpZ2h0LWZ1bmN0aW9uIG5pbAorICAi RnVuY3Rpb24gdG8gY2FsbCB0byBtYWtlIGFuIGFjdGl2ZSByZWdpb24gYXZhaWxhYmxlIHRvIG90 aGVyIHByb2dhbXMuCisKK0luIGFkZGl0aW9uIHRvIGNsaWJwb2FyZCBjdXR0aW5nIGFuZCBwYXN0 aW5nIFwoc2VlIGBpbnRlcnByb2dyYW0tY3V0LWZ1bmN0aW9uJworYW5kIGBpbnRlcnByb2dyYW0t cGFzdGUtZnVuY3Rpb24nKSwgYXQgbGVhc3Qgb25lIHdpbmRvdyBzeXN0ZW0gXChYMTEpCitwcm92 aWRlcyBhIG1lY2hhbmlzbSB3aGVyZWJ5IHRleHQgbWVyZWx5IGhpZ2hsaWdodGVkIGluIG9uZSBh cHBsaWNhdGlvbiBtYXkKKyBiZSBpbW1lZGlhdGVseSBpbnNlcnRlZCBpbnRvIGFub3RoZXIuICBU aGlzIHZhcmlhYmxlIGhvbGRzIGEgZnVuY3Rpb24gdGhhdCAKK2BtYXliZS1zZWxlY3QtZm9yLXNl bGVjdC1hY3RpdmUtcmVnaW9ucycgY2FsbHMgd2hlbmV2ZXIgdGV4dCBpcyBub3Rpb25hbGx5Cito aWdobGlnaHRlZCBpbiBlbWFjcyAtIGkuZS4gdGhlcmUgIGlzIGFuIGFjdGl2ZSByZWdpb24gCitc KHNlZSBgdHJhbnNpZW50LW1hcmstbW9kZScpLCBhbmQgYHNlbGVjdC1hY3RpdmUtcmVnaW9ucydp cyBhY3RpdmUuCisKK1RoZSBmdW5jdGlvbiB0YWtlcyBvbmUgb3IgdHdvIGFyZ3VtZW50cywKK1Ro ZSBmaXJzdCBhcmd1bWVudCwgVEVYVCwgaXMgYSBzdHJpbmcgY29udGFpbmluZwordGhlIHRleHQg dGhhdCBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUuIAorVGhlIHNlY29uZCwgb3B0aW9uYWwsIGFy Z3VtZW50IFBVU0gsIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZQorc2ltaWxhciBhcmd1bWVu dCB0byBgeC1zZXQtY3V0LWJ1ZmZlcicsIHdoaWNoIHNlZS4iKQorCisoZGVmdmFyIGludGVycHJv Z3JhbS1saWdodGlucy1mdW5jdGlvbiBuaWwKKyAgIkZ1bmN0aW9uIHRvIGNhbGwgdG8gZ2V0IHRl eHQgbWFkZSBhdmFpbGFibGUgZm9yIGxpZ2h0d2VpZ2h0IAoraW5zZXJ0aW9uIGZyb20gb3RoZXIg cHJvZ3JhbXMuCisKK0F0IGxlYXN0IG9uZSB3aW5kb3cgc3lzdGVtIChYMTEpIHByb3ZpZGVzIGEg ZmFjaWxpdHkgZm9yIGltbWVkaWF0ZWx5IAoraW5zZXJ0aW5nIHRleHQgaGlnaGxpZ2h0ZWQgaW4g b25lIHByb2dyYW0gaW50byBhbm90aGVyLCBieXBhc3NpbmcgCit0aGUgY2xpcGJvYXJkLgorCitU aGlzIHZhcmlhYmxlIGhvbGRzIGEgZnVuY3Rpb24gdGhhdCBFbWFjcyBjYWxscyB0byBvYnRhaW4K K3RleHQgdGhhdCBvdGhlciBwcm9ncmFtcyBoYXZlIHByb3ZpZGVkIGZvciBzdWNoICdsaWdodHdl aWdodAoraW5zZXJ0aW9uJy4gIFRoZSBjb252ZW50aW9uIGhhcyBkZXZlbG9wZWQgb24gWDExIAor dGhhdCB0aGlzIGxpZ2h0d2VpZ2h0IGhpZ2hsaWdodC9pbnNlcnRpb24gc2hvdWxkIGJlIGVudGly ZWx5CitpbmRlcGVuZGVudCBmcm9tIHRoZSBjbGlwYm9hcmQgcHJvcGVyLgorCitUaGUgZnVuY3Rp b24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4gIElmIHRoZSBmdW5jdGlvbgor cmV0dXJucyBuaWwsIHRoZW4gbm8gb3RoZXIgcHJvZ3JhbSBoYXMgcHJvdmlkZWQgc3VjaCB0ZXh0 LiAgSWYgdGhlIAorZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZywgdGhlbiB0aGUgY2FsbGVyIG9m IHRoZSBmdW5jdGlvbiAKK1wodXN1YWxseSBgbW91c2UteWFuay1hdC1jbGljaycpIHdpbGwgaW5z ZXJ0IHRoaXMgc3RyaW5nCitpbnRvIHRoZSBidWZmZXIuLi4gd2l0aG91dCBhZmZlY3RpbmcgdGhl IGtpbGwgcmluZy4gIFRoaXMgbWF5CitzZWVtIHNsaWdodGx5IHN0cmFuZ2UsIGJ1dCBpcyBpbnRl bmRlZCBhbmQgbm93IHR5cGljYWwKK2JlaGF2aW91ciBvbiBYMTEgZGVza3RvcHMuICBJZiB5b3Ug RE8gd2FudCBtb3VzZS15YW5rLWF0LWNsaWNrIHRvIAorYWZmZWN0IHRoZSBraWxsIHJpbmcsICBh cyBpdCBoYXMgZG9uZSBpbiB0aGUgcGFzdCBpbiBlbWFjcywKK2FkanVzdCBgbW91c2UteWFuay1h dC1jbGljay1zb3VyY2UnIHRvIGhhdmUgaXQgdXNlIHRoZSBraWxsIAorcmluZyBcKGFuZCB0aGVy ZWJ5IHBvdGVudGlhbGx5IGBpbnRlcnByb2dyYW0tcGFzdGUtZnVuY3Rpb24nKSwgd2hpY2gKK29u IFgxMSBhdCBsZWFzdCBcKHRoZSBvbmx5IHJlbGV2YW50IHBsYXRmb3JtIGF0IHRoZSBtb21lbnQp IGNhbiAKK2luIHR1cm4gYmUgYWRqdXN0ZWQgdG8gcHVsbCBpbiBQUklNQVJZIGFzIHdlbGwgYXMg b3IgaW5zdGVhZCBvZiAKK0NMSVBCT0FSRCB2aWEgYHgtc2VsZWN0LWVuYWJsZS1wcmltYXJ5Jy4K KworTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIGlmIGF2YWls YWJsZSAKK3doZXRoZXIgb3Igbm90IGEgcHJvZ3JhbSBvdGhlciB0aGFuIEVtYWNzIHByb3ZpZGVk IHRoZSBzdHJpbmcsIAordGhpcyBpcyBzbyB0aGF0IGVtYWNzLT5lbWFjcyBoaWdobGlnaHQvbGln aHRpbnMgaW50ZXJhY3Rpb25zCit3b3JrIGFzIGV4cGVjdGVkLiIpCiAMCiAKIAogOzs7OyBUaGUg a2lsbCByaW5nIGRhdGEgc3RydWN0dXJlLgogCiAoZGVmdmFyIGtpbGwtcmluZyBuaWwKICAgIkxp c3Qgb2Yga2lsbGVkIHRleHQgc2VxdWVuY2VzLgogU2luY2UgdGhlIGtpbGwgcmluZyBpcyBzdXBw b3NlZCB0byBpbnRlcmFjdCBuaWNlbHkgd2l0aCBjdXQtYW5kLXBhc3RlCkBAIC0zMzEwLDU0ICsz MzYxLDEwNSBAQAogICAgICAgKG1hcmtlci1wb3NpdGlvbiAobWFyay1tYXJrZXIpKQogICAgIChz aWduYWwgJ21hcmstaW5hY3RpdmUgbmlsKSkpCiAKIDs7IE1hbnkgcGxhY2VzIHNldCBtYXJrLWFj dGl2ZSBkaXJlY3RseSwgYW5kIHNldmVyYWwgb2YgdGhlbSBmYWlsZWQgdG8gYWxzbwogOzsgcnVu IGRlYWN0aXZhdGUtbWFyay1ob29rLiAgVGhpcyBzaG9ydGhhbmQgc2hvdWxkIHNpbXBsaWZ5Lgog KGRlZnN1YnN0IGRlYWN0aXZhdGUtbWFyayAoKQogICAiRGVhY3RpdmF0ZSB0aGUgbWFyayBieSBz ZXR0aW5nIGBtYXJrLWFjdGl2ZScgdG8gbmlsLgogXChUaGF0IG1ha2VzIGEgZGlmZmVyZW5jZSBv bmx5IGluIFRyYW5zaWVudCBNYXJrIG1vZGUuKQotQWxzbyBydW5zIHRoZSBob29rIGBkZWFjdGl2 YXRlLW1hcmstaG9vaycuIgorQWxzbyBydW5zIHRoZSBob29rIGBkZWFjdGl2YXRlLW1hcmstaG9v aycsIGFuZCByZW1vdmVzCithbnkgaW5zdGFsbGVkIGBzZWxlY3QtYWN0aXZlLXJlZ2lvbnMnIGlk bGUgdGltZXIuIgorICAoYW5kIHNlbGVjdC1hY3RpdmUtcmVnaW9ucworICAgICAgIChjYW5jZWwt ZnVuY3Rpb24tdGltZXJzICdtYXliZS1zZWxlY3QtZm9yLXNlbGVjdC1hY3RpdmUtcmVnaW9ucykp CiAgIChjb25kCiAgICAoKGVxIHRyYW5zaWVudC1tYXJrLW1vZGUgJ2xhbWJkYSkKICAgICAoc2V0 cSB0cmFuc2llbnQtbWFyay1tb2RlIG5pbCkpCiAgICAodHJhbnNpZW50LW1hcmstbW9kZQogICAg IChzZXRxIG1hcmstYWN0aXZlIG5pbCkKICAgICAocnVuLWhvb2tzICdkZWFjdGl2YXRlLW1hcmst aG9vaykpKSkKIAorKGRlZnZhciBzZWxlY3QtYWN0aXZlLXJlZ2lvbnMtbGFzdC1yZWdpb24gbmls CisgICJyZWNvcmQgb2YgbGFzdCBwcm9wYWdhdGVkIHJlZ2lvbiBmb3IgY29tcGFyaXNvbgoraW4g YG1heWJlLXNlbGVjdC1mb3Itc2VsZWN0LWFjdGl2ZS1yZWdpb25zJyIpCisKIChkZWZjdXN0b20g c2VsZWN0LWFjdGl2ZS1yZWdpb25zIG5pbAotICAiSWYgbm9uLW5pbCwgYW4gYWN0aXZlIHJlZ2lv biBhdXRvbWF0aWNhbGx5IGJlY29tZXMgdGhlIHdpbmRvdyBzZWxlY3Rpb24uIgorICAiSWYgbm9u LW5pbCwgYW4gYWN0aXZlIHJlZ2lvbiBhdXRvbWF0aWNhbGx5IGJlY29tZXMgdGhlIHdpbmRvdyBz ZWxlY3Rpb24uCisKK0Z1bmN0aW9uIGluIGBpbnRlcnByb2dyYW0taGlnaGxpZ2h0LWZ1bmN0aW9u JyBpZiBhbnkgaXMgCit1c2VkIHRvIHByb3BhZ2F0ZSB0aGUgYWN0aXZlIHJlZ2lvbiB0byB0aGUg d2luZG93IHN5c3RlbS4KKyIKICAgOnR5cGUgJ2Jvb2xlYW4KICAgOmdyb3VwICdraWxsaW5nCi0g IDp2ZXJzaW9uICIyMy4xIikKKyAgOnZlcnNpb24gIjIzLjEiCisgIDpyaXNreSB0CisgIDs7IG1h a2Ugc3VyZSB0byBkZWFjdGl2YXRlIGlkbGUgdGltZXIgb24gZGlzYWJsZSwgaW4gY2FzZSB0aGVy ZSdzCisgIDs7IGEgcmVnaW9uIGFjdGl2ZSBkdXJpbmcgdGhlIGN1c3RvbWl6ZSBvcGVyYXRpb24K KyAgOnNldCAobGFtYmRhIChvcHQgdmFsKQorICAoc2V0cSBzZWxlY3QtYWN0aXZlLXJlZ2lvbnMg dmFsKQorICAoc2V0cSBzZWxlY3QtYWN0aXZlLXJlZ2lvbnMtbGFzdC1yZWdpb24gbmlsKQorICAo aWYgdmFsCisgICAgICAocHJvZ24KKwkoY2FuY2VsLWZ1bmN0aW9uLXRpbWVycyAnbWF5YmUtc2Vs ZWN0LWZvci1zZWxlY3QtYWN0aXZlLXJlZ2lvbnMpCisJKHJ1bi13aXRoLWlkbGUtdGltZXIgMCB0 CisJCQkgICAgICdtYXliZS1zZWxlY3QtZm9yLXNlbGVjdC1hY3RpdmUtcmVnaW9ucykpCisgICAg KGNhbmNlbC1mdW5jdGlvbi10aW1lcnMgJ21heWJlLXNlbGVjdC1mb3Itc2VsZWN0LWFjdGl2ZS1y ZWdpb25zKSkpKQorCisoZGVmdW4gbWF5YmUtc2VsZWN0LWZvci1zZWxlY3QtYWN0aXZlLXJlZ2lv bnMgKCkKKyAgIkltcGxlbWVudHMgYHNlbGVjdC1hY3RpdmUtcmVnaW9ucycuIENhbGxlZCBieSBh biBpZGxlIHRpbWVyIAorYWN0aXZlIHdoZW4gcmVnaW9uIGlzIGFjdGl2ZSBhbmQgYHNldC1tYXJr JyIKKyAgKGFuZCBzZWxlY3QtYWN0aXZlLXJlZ2lvbnMKKyAgICAgICAocmVnaW9uLWFjdGl2ZS1w KQorICAgICAgIChsZXQgKChtYXliZS1zZWwtY3VycmVudC1yZWdpb24tdGV4dAorCSAgICAgIChi dWZmZXItc3Vic3RyaW5nIChyZWdpb24tYmVnaW5uaW5nKSAocmVnaW9uLWVuZCkpKSkKKwkgKHdo ZW4gKG9yIChudWxsIHNlbGVjdC1hY3RpdmUtcmVnaW9ucy1sYXN0LXJlZ2lvbikKKwkJICAgKG5v dCAoc3RyaW5nPSBzZWxlY3QtYWN0aXZlLXJlZ2lvbnMtbGFzdC1yZWdpb24KKwkJCQkgbWF5YmUt c2VsLWN1cnJlbnQtcmVnaW9uLXRleHQpKSkKKwkgICAoc2V0cSBzZWxlY3QtYWN0aXZlLXJlZ2lv bnMtbGFzdC1yZWdpb24gCisJCSBtYXliZS1zZWwtY3VycmVudC1yZWdpb24tdGV4dCkKKwkgICAo aWYgKG9yIChudWxsIG1heWJlLXNlbC1jdXJyZW50LXJlZ2lvbi10ZXh0KSAKKwkJICAgKHN0cmlu Zz0gIiIgbWF5YmUtc2VsLWN1cnJlbnQtcmVnaW9uLXRleHQpKQorCSAgICAgICA7OyBkb24ndCBw cm9wYWdhdGUgaWYgdGhpcyByZWdpb24gaXMgZW1wdHksIGJ1dCB0aGlzIAorCSAgICAgICA7OyBy ZWdpb24gYmVpbmcgZW1wdHkgbWVhbnMgZnV0dXJlIG5vbmVtcHR5IHJlZ2lvbnMgCisJICAgICAg IDs7IG5lZWQgcmVwcm9wYWdhdGlvbgorCSAgICAgICAoc2V0cSBzZWxlY3QtYWN0aXZlLXJlZ2lv bnMtbGFzdC1yZWdpb24gbmlsKQorCSAgICAgKGFuZCBpbnRlcnByb2dyYW0taGlnaGxpZ2h0LWZ1 bmN0aW9uCisJCSAgKGZ1bmNhbGwgaW50ZXJwcm9ncmFtLWhpZ2hsaWdodC1mdW5jdGlvbgorCQkJ ICAgbWF5YmUtc2VsLWN1cnJlbnQtcmVnaW9uLXRleHQpKSkpKSkpCisKIAogKGRlZnVuIHNldC1t YXJrIChwb3MpCiAgICJTZXQgdGhpcyBidWZmZXIncyBtYXJrIHRvIFBPUy4gIERvbid0IHVzZSB0 aGlzIGZ1bmN0aW9uIQogVGhhdCBpcyB0byBzYXksIGRvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIHVu bGVzcyB5b3Ugd2FudAogdGhlIHVzZXIgdG8gc2VlIHRoYXQgdGhlIG1hcmsgaGFzIG1vdmVkLCBh bmQgeW91IHdhbnQgdGhlIHByZXZpb3VzCi1tYXJrIHBvc2l0aW9uIHRvIGJlIGxvc3QuCittYXJr IHBvc2l0aW9uIHRvIGJlIGxvc3QuICBJZiBgc2VsZWN0LWFjdGl2ZS1yZWdpb25zJyBpcyBzZXQs CitpbnN0YWxsIGFuIGlkbGUgdGltZXIgdG8gbW9uaXRvciB0aGUgYWN0aXZlIHJlZ2lvbi4KIAog Tm9ybWFsbHksIHdoZW4gYSBuZXcgbWFyayBpcyBzZXQsIHRoZSBvbGQgb25lIHNob3VsZCBnbyBv biB0aGUgc3RhY2suCiBUaGlzIGlzIHdoeSBtb3N0IGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIGBw dXNoLW1hcmsnLCBub3QgYHNldC1tYXJrJy4KIAogTm92aWNlIEVtYWNzIExpc3AgcHJvZ3JhbW1l cnMgb2Z0ZW4gdHJ5IHRvIHVzZSB0aGUgbWFyayBmb3IgdGhlIHdyb25nCiBwdXJwb3Nlcy4gIFRo ZSBtYXJrIHNhdmVzIGEgbG9jYXRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UuCiBNb3N0 IGVkaXRpbmcgY29tbWFuZHMgc2hvdWxkIG5vdCBhbHRlciB0aGUgbWFyay4KIFRvIHJlbWVtYmVy IGEgbG9jYXRpb24gZm9yIGludGVybmFsIHVzZSBpbiB0aGUgTGlzcCBwcm9ncmFtLAogc3RvcmUg aXQgaW4gYSBMaXNwIHZhcmlhYmxlLiAgRXhhbXBsZToKIAogICAgKGxldCAoKGJlZyAocG9pbnQp KSkgKGZvcndhcmQtbGluZSAxKSAoZGVsZXRlLXJlZ2lvbiBiZWcgKHBvaW50KSkpLiIKIAogICAo aWYgcG9zCiAgICAgICAocHJvZ24KIAkoc2V0cSBtYXJrLWFjdGl2ZSB0KQogCShydW4taG9va3Mg J2FjdGl2YXRlLW1hcmstaG9vaykKLQkoYW5kIHNlbGVjdC1hY3RpdmUtcmVnaW9ucwotCSAgICAg KHgtc2V0LXNlbGVjdGlvbgotCSAgICAgIG5pbCAoYnVmZmVyLXN1YnN0cmluZyAocmVnaW9uLWJl Z2lubmluZykgKHJlZ2lvbi1lbmQpKSkpCisJKHdoZW4gc2VsZWN0LWFjdGl2ZS1yZWdpb25zCisJ ICAoY2FuY2VsLWZ1bmN0aW9uLXRpbWVycyAnbWF5YmUtc2VsZWN0LWZvci1zZWxlY3QtYWN0aXZl LXJlZ2lvbnMpCisJICAocnVuLXdpdGgtaWRsZS10aW1lciAwIHQKKwkJCSAgICAgICAnbWF5YmUt c2VsZWN0LWZvci1zZWxlY3QtYWN0aXZlLXJlZ2lvbnMpCisJICA7O2ZvcmNlIGltbWVkaWF0ZSBy ZXByb3BhZ2F0ZSBpZiBtYXJrIGlzIHJlc2V0CisJICAoc2V0cSBzZWxlY3QtYWN0aXZlLXJlZ2lv bnMtbGFzdC1yZWdpb24gbmlsKQorCSAgKG1heWJlLXNlbGVjdC1mb3Itc2VsZWN0LWFjdGl2ZS1y ZWdpb25zKSkKIAkoc2V0LW1hcmtlciAobWFyay1tYXJrZXIpIHBvcyAoY3VycmVudC1idWZmZXIp KSkKICAgICA7OyBOb3JtYWxseSB3ZSBuZXZlciBjbGVhciBtYXJrLWFjdGl2ZSBleGNlcHQgaW4g VHJhbnNpZW50IE1hcmsgbW9kZS4KICAgICA7OyBCdXQgd2hlbiB3ZSBhY3R1YWxseSBjbGVhciBv dXQgdGhlIG1hcmsgdmFsdWUgdG9vLAogICAgIDs7IHdlIG11c3QgY2xlYXIgbWFyay1hY3RpdmUg aW4gYW55IG1vZGUuCiAgICAgKHNldHEgbWFyay1hY3RpdmUgbmlsKQogICAgIChydW4taG9va3Mg J2RlYWN0aXZhdGUtbWFyay1ob29rKQogICAgIChzZXQtbWFya2VyIChtYXJrLW1hcmtlcikgbmls KSkpCiAKSW5kZXg6IGxpc3AvbW91c2UuZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMv ZW1hY3MvZW1hY3MvbGlzcC9tb3VzZS5lbCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMjYKZGlm ZiAtVSA4IC1kIC1yMS4zMjYgbW91c2UuZWwKLS0tIGxpc3AvbW91c2UuZWwJOCBKYW4gMjAwOCAw NToxMjo1MCAtMDAwMAkxLjMyNgorKysgbGlzcC9tb3VzZS5lbAk3IEZlYiAyMDA4IDAzOjQzOjQz IC0wMDAwCkBAIC05MjAsMTYgKzkyMCwyMSBAQAogICAgIChtb3ZlLW92ZXJsYXkgb2wgKGNhciBy YW5nZSkgKG50aCAxIHJhbmdlKSkpKQogCiAoZGVmdW4gbW91c2UtZHJhZy10cmFjayAoc3RhcnQt ZXZlbnQgICZvcHRpb25hbAogCQkJCSAgICAgIGRvLW1vdXNlLWRyYWctcmVnaW9uLXBvc3QtcHJv Y2VzcykKICAgICAiVHJhY2sgbW91c2UgZHJhZ3MgYnkgaGlnaGxpZ2h0aW5nIGFyZWEgYmV0d2Vl biBwb2ludCBhbmQgY3Vyc29yLgogVGhlIHJlZ2lvbiB3aWxsIGJlIGRlZmluZWQgd2l0aCBtYXJr IGFuZCBwb2ludCwgYW5kIHRoZSBvdmVybGF5CiB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIgcmV0dXJu LiAgRE8tTU9VU0UtRFJBRy1SRUdJT04tUE9TVC1QUk9DRVNTCiBzaG91bGQgb25seSBiZSB1c2Vk IGJ5IG1vdXNlLWRyYWctcmVnaW9uLiIKKyAgOzsgdGhpcyBmdW5jdGlvbiBkZWZpbmVzIGEgbmV3 IHJlZ2lvbiwgc28gZGVhY3RpdmF0ZSBtYXJrIGJlZm9yZSBmaXJzdAorICA7OyBtb3ZpbmcgcG9p bnQsIHRvIGF2b2lkIGJyaWVmbHkgcmVzaXppbmcgdGhlIHByZXZpb3VzIGFjdGl2ZSByZWdpb24K KyAgOzsgaWYgYW55LiAgU3VjaCBhIGJyaWVmIHJlc2l6ZSBjYW4gcHJvZHVjZSBwb29yIGJlaGF2 aW91ciB3aGVuCisgIDs7IHNlbGVjdC1hY3RpdmUtcmVnaW9ucyBpcyBlbmFibGVkLgorICAoZGVh Y3RpdmF0ZS1tYXJrKQogICAobW91c2UtbWluaWJ1ZmZlci1jaGVjayBzdGFydC1ldmVudCkKICAg KHNldHEgbW91c2Utc2VsZWN0aW9uLWNsaWNrLWNvdW50LWJ1ZmZlciAoY3VycmVudC1idWZmZXIp KQogICAobGV0KiAoKG9yaWdpbmFsLXdpbmRvdyAoc2VsZWN0ZWQtd2luZG93KSkKICAgICAgICAg IDs7IFdlJ3ZlIHJlY29yZGVkIHdoYXQgd2UgbmVlZGVkIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVy IGFuZAogICAgICAgICAgOzsgd2luZG93LCBub3cgbGV0J3MganVtcCB0byB0aGUgcGxhY2Ugb2Yg dGhlIGV2ZW50LCB3aGVyZSB0aGluZ3MKICAgICAgICAgIDs7IGFyZSBoYXBwZW5pbmcuCiAgICAg ICAgICAoXyAobW91c2Utc2V0LXBvaW50IHN0YXJ0LWV2ZW50KSkKICAgICAgICAgIChlY2hvLWtl eXN0cm9rZXMgMCkKQEAgLTk2NiwxNyArOTcxLDE3IEBACiAgICAgKGlmICg8IChwb2ludCkgc3Rh cnQtcG9pbnQpCiAJKGdvdG8tY2hhciBzdGFydC1wb2ludCkpCiAgICAgKHNldHEgc3RhcnQtcG9p bnQgKHBvaW50KSkKICAgICAoaWYgcmVtYXAtZG91YmxlLWNsaWNrIDs7IERvbid0IGV4cGFuZCBt b3VzZSBvdmVybGF5IGluIGxpbmtzCiAJKHNldHEgY2xpY2stY291bnQgMCkpCiAgICAgKG1vdXNl LW1vdmUtZHJhZy1vdmVybGF5IG1vdXNlLWRyYWctb3ZlcmxheSBzdGFydC1wb2ludCBzdGFydC1w b2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljay1jb3VudCkKICAgICAob3Zl cmxheS1wdXQgbW91c2UtZHJhZy1vdmVybGF5ICd3aW5kb3cgc3RhcnQtd2luZG93KQotICAgIChk ZWFjdGl2YXRlLW1hcmspCisgICAgOzsgKGRlYWN0aXZhdGUtbWFyaykKICAgICAobGV0IChldmVu dCBlbmQgZW5kLXBvaW50IGxhc3QtZW5kLXBvaW50KQogICAgICAgKHRyYWNrLW1vdXNlCiAJKHdo aWxlIChwcm9nbgogCQkgKHNldHEgZXZlbnQgKHJlYWQtZXZlbnQpKQogICAgICAgICAgICAgICAg ICAob3IgKG1vdXNlLW1vdmVtZW50LXAgZXZlbnQpCiAgICAgICAgICAgICAgICAgICAgICAobWVt cSAoY2FyLXNhZmUgZXZlbnQpICcoc3dpdGNoLWZyYW1lIHNlbGVjdC13aW5kb3cpKSkpCiAgICAg ICAgICAgKGlmIChtZW1xIChjYXItc2FmZSBldmVudCkgJyhzd2l0Y2gtZnJhbWUgc2VsZWN0LXdp bmRvdykpCiAJICAgICAgbmlsCkBAIC0xMzUxLDMwICsxMzU2LDQ5IEBACiAgIChtb3VzZS1taW5p YnVmZmVyLWNoZWNrIGNsaWNrKQogICAobGV0KiAoKHBvc24gKGV2ZW50LXN0YXJ0IGNsaWNrKSkK IAkgKGNsaWNrLXBvc24gKHBvc24tcG9pbnQgcG9zbikpKQogICAgIChzZWxlY3Qtd2luZG93IChw b3NuLXdpbmRvdyBwb3NuKSkKICAgICAoaWYgKG51bWJlcnAgY2xpY2stcG9zbikKIAkoa2lsbC1y ZWdpb24gKG1pbiAocG9pbnQpIGNsaWNrLXBvc24pCiAJCSAgICAgKG1heCAocG9pbnQpIGNsaWNr LXBvc24pKSkpKQogCisoZGVmY3VzdG9tIG1vdXNlLXlhbmstYXQtY2xpY2stc291cmNlIDp5YW5r CisgICJTb3VyY2Ugb2YgeWFua2VkIHRleHQgaW4gYG1vdXNlLXlhbmstYXQtY2xpY2snCisKK1lh bms6IERvIGEgZnVsbCBlbWFjcyBraWxsLXJpbmcgeWFuay4gU3VjaCBhIHlhbmsgdXNlcyB0aGUg ZW1hY3Mga2lsbAorcmluZyBhbmQgYGludGVycHJvZ3JhbS1wYXN0ZS1mdW5jdGlvbicuCisKK0xp Z2h0SW5zOiBEbyBhbiBYMTEtc3R5bGUgJ2hpZ2hsaWdodC9taWRkbGVidXR0b24nIGxpZ2h0d2Vp Z2h0IGluc2VydAorYnkgY2FsbGluZyBgaW50ZXJwcm9ncmFtLWxpZ2h0aW5zLWZ1bmN0aW9uJywg d2l0aG91dCByZWZlcmVuY2luZyBvcgorYWZmZWN0aW5nIHRoZSBraWxsIHJpbmcuIgorICA6dHlw ZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiTGlnaHRJbnMiIDpsaWdodGlucykKKwkJIChjb25zdCA6 dGFnICJZYW5rIiA6eWFuaykpCisgIDpncm91cCAnbW91c2UpCisKIChkZWZ1biBtb3VzZS15YW5r LWF0LWNsaWNrIChjbGljayBhcmcpCi0gICJJbnNlcnQgdGhlIGxhc3Qgc3RyZXRjaCBvZiBraWxs ZWQgdGV4dCBhdCB0aGUgcG9zaXRpb24gY2xpY2tlZCBvbi4KLUFsc28gbW92ZSBwb2ludCB0byBv bmUgZW5kIG9mIHRoZSB0ZXh0IHRodXMgaW5zZXJ0ZWQgKG5vcm1hbGx5IHRoZSBlbmQpLAotYW5k IHNldCBtYXJrIGF0IHRoZSBiZWdpbm5pbmcuCisgICJJbnNlcnQgdGV4dCBmcm9tIGBtb3VzZS15 YW5rLWF0LWNsaWNrLXNvdXJjZScgYXQgdGhlIHBvc2l0aW9uIGNsaWNrZWQgb24uCisKK1RoZSBz b3VyY2UgaXMgZWl0aGVyIHRoZSBraWxsLXJpbmcvY2xpcGJvYXJkIG9yIGFuIFgxMS1zdHlsZSBp bnRlcnByb2dyYW0gCitoaWdobGlnaHQuIEFsc28gbW92ZSBwb2ludCB0byBvbmUgZW5kIG9mIHRo ZSB0ZXh0IHRodXMgaW5zZXJ0ZWQgKG5vcm1hbGx5IAordGhlIGVuZCksIGFuZCBzZXQgbWFyayBh dCB0aGUgYmVnaW5uaW5nLgogUHJlZml4IGFyZ3VtZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgd2l0 aCBcXFt5YW5rXS4KIElmIGBtb3VzZS15YW5rLWF0LXBvaW50JyBpcyBub24tbmlsLCBpbnNlcnQg YXQgcG9pbnQKIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgeW91IGNsaWNrLiIKICAgKGludGVyYWN0aXZl ICJlXG5QIikKICAgOzsgR2l2ZSB0ZW1wb3JhcnkgbW9kZXMgc3VjaCBhcyBpc2VhcmNoIGEgY2hh bmNlIHRvIHR1cm4gb2ZmLgogICAocnVuLWhvb2tzICdtb3VzZS1sZWF2ZS1idWZmZXItaG9vaykK ICAgKG9yIG1vdXNlLXlhbmstYXQtcG9pbnQgKG1vdXNlLXNldC1wb2ludCBjbGljaykpCi0gIChz ZXRxIHRoaXMtY29tbWFuZCAneWFuaykKICAgKHNldHEgbW91c2Utc2VsZWN0aW9uLWNsaWNrLWNv dW50IDApCi0gICh5YW5rIGFyZykpCisgIChjb25kICgoZXEgbW91c2UteWFuay1hdC1jbGljay1z b3VyY2UgOmxpZ2h0aW5zKQorCSAoYW5kIGludGVycHJvZ3JhbS1saWdodGlucy1mdW5jdGlvbgor CSAgICAgIChpbnNlcnQgKGZ1bmNhbGwgaW50ZXJwcm9ncmFtLWxpZ2h0aW5zLWZ1bmN0aW9uKSkp KQorCSh0CisJIChzZXRxIHRoaXMtY29tbWFuZCAneWFuaykKKwkgKHlhbmsgYXJnKSkpKQogCiAo ZGVmdW4gbW91c2UteWFuay1wcmltYXJ5IChjbGljaykKICAgIkluc2VydCB0aGUgcHJpbWFyeSBz ZWxlY3Rpb24gYXQgdGhlIHBvc2l0aW9uIGNsaWNrZWQgb24uCiBNb3ZlIHBvaW50IHRvIHRoZSBl bmQgb2YgdGhlIGluc2VydGVkIHRleHQuCiBJZiBgbW91c2UteWFuay1hdC1wb2ludCcgaXMgbm9u LW5pbCwgaW5zZXJ0IGF0IHBvaW50CiByZWdhcmRsZXNzIG9mIHdoZXJlIHlvdSBjbGljay4iCiAg IChpbnRlcmFjdGl2ZSAiZSIpCiAgIDs7IEdpdmUgdGVtcG9yYXJ5IG1vZGVzIHN1Y2ggYXMgaXNl YXJjaCBhIGNoYW5jZSB0byB0dXJuIG9mZi4KQEAgLTE0MzEsNzkgKzE0NTUsMTI4IEBACiAgICAg ICA7OyB0aGF0IGNhbWUgZnJvbSBkZWxldGluZyBvbmUgY2hhcmFjdGVyLgogICAgICAgKHdoaWxl IChhbmQgdGFpbCAobm90IChzdHJpbmdwIChjYXIgKGNhciB0YWlsKSkpKSkKIAkoc2V0cSB0YWls IChjZHIgdGFpbCkpKQogICAgICAgOzsgUmVwbGFjZSBpdCB3aXRoIGFuIGVudHJ5IGZvciB0aGUg ZW50aXJlIGRlbGV0ZWQgdGV4dC4KICAgICAgIChhbmQgdGFpbAogCSAgIChzZXRjYXIgdGFpbCAo Y29ucyAoY2FyIGtpbGwtcmluZykgKG1pbiBiZWcgZW5kKSkpKSkpCiAgICh1bmRvLWJvdW5kYXJ5 KSkKIAorKGRlZmN1c3RvbSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1jb3B5LXJlZ2lvbiB0CisgICJT YXlzIGhvdyBtYW55IGNsaWNrcyBuZWVkZWQgZm9yIG1vdXNlLXNhdmUtdGhlbi1raWxsIHRvIHNh dmUgdGhlbiBraWxsLgorIAorTmV2ZXI6IG9ubHkgYWRqdXN0IGFjdGl2ZSByZWdpb24sIG5ldmVy IGtpbGwuCitTaW5nbGU6IHNhdmUgb24gc2luZ2xlIGNsaWNrLCBraWxsIG9uIHNlY29uZCBjbGlj aworRG91YmxlOiBhZGp1c3QgYWN0aXZlIHJlZ2lvbiBvbiBmaXJzdCBjbGljaywgc2F2ZSAKK29u IHNlY29uZCwga2lsbCBvbiB0aGlyZCIKKworOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIk5l dmVyIiAgbmlsKQorICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiU2luZ2xlIiB0KQorICAgICAg ICAgICAgICAoY29uc3QgOnRhZyAiRG91YmxlIiA6ZG91YmxlKSkKKzpncm91cCAnbW91c2UKKzp2 ZXJzaW9uICIyMy4xIikKKwogKGRlZnVuIG1vdXNlLXNhdmUtdGhlbi1raWxsIChjbGljaykKLSAg IlNhdmUgdGV4dCB0byBwb2ludCBpbiBraWxsIHJpbmc7IHRoZSBzZWNvbmQgdGltZSwga2lsbCB0 aGUgdGV4dC4KKyAgIkRlcGVuZGluZyBvbiBjbGljayBjb3VudCwgYWRqdXN0IHJlZ2lvbiwgc2F2 ZSB0byBraWxsIHJpbmcsIG9yIGtpbGwKKworQmVoYXZpb3VyIGN1c3RvbWl6ZWQgYnkgYG1vdXNl LXNhdmUtdGhlbi1raWxsLWNvcHktcmVnaW9uJy4gIElmIHRoYXQKK2lzIG5pbCwgY2xpY2tpbmcg IG1lcmVseSBhZGp1c3RzIHRoZSByZWdpb24uIElmIDpkb3VibGUsIHNpbmdsZSAKK2NsaWNraW5n IGFkanVzdHMgdGhlICByZWdpb24sIGRvdWJsZSBjbGlja2luZyBzYXZlcyB0ZXh0IHRvIGtpbGwg CityaW5nLCB0cmlwbGUgY2xpY2tpbmcga2lsbHMgdGhlIHRleHQuICBJZiBuaWwsIHNpbmdsZSBj bGlja2luZyBzYXZlcyAKK3RleHQgdG8ga2lsbCByaW5nLCBkb3VibGUgY2xpY2tpbmcga2lsbHMu CisKIElmIHRoZSB0ZXh0IGJldHdlZW4gcG9pbnQgYW5kIHRoZSBtb3VzZSBpcyB0aGUgc2FtZSBh cyB3aGF0J3MKIGF0IHRoZSBmcm9udCBvZiB0aGUga2lsbCByaW5nLCB0aGlzIGRlbGV0ZXMgdGhl IHRleHQuCiBPdGhlcndpc2UsIGl0IGFkZHMgdGhlIHRleHQgdG8gdGhlIGtpbGwgcmluZywgbGlr ZSBcXFtraWxsLXJpbmctc2F2ZV0sCiB3aGljaCBwcmVwYXJlcyBmb3IgYSBzZWNvbmQgY2xpY2sg dG8gZGVsZXRlIHRoZSB0ZXh0LgogCiBJZiB5b3UgaGF2ZSBzZWxlY3RlZCB3b3JkcyBvciBsaW5l cywgdGhpcyBjb21tYW5kIGV4dGVuZHMgdGhlCiBzZWxlY3Rpb24gdGhyb3VnaCB0aGUgd29yZCBv ciBsaW5lIGNsaWNrZWQgb24uICBJZiB5b3UgZG8gdGhpcwogYWdhaW4gaW4gYSBkaWZmZXJlbnQg cG9zaXRpb24sIGl0IGV4dGVuZHMgdGhlIHNlbGVjdGlvbiBhZ2Fpbi4KLUlmIHlvdSBkbyB0aGlz IHR3aWNlIGluIHRoZSBzYW1lIHBvc2l0aW9uLCB0aGUgc2VsZWN0aW9uIGlzIGtpbGxlZC4iCisi CiAgIChpbnRlcmFjdGl2ZSAiZSIpCiAgIChsZXQgKChiZWZvcmUtc2Nyb2xsCiAJICh3aXRoLWN1 cnJlbnQtYnVmZmVyICh3aW5kb3ctYnVmZmVyIChwb3NuLXdpbmRvdyAoZXZlbnQtc3RhcnQgY2xp Y2spKSkKIAkgICBwb2ludC1iZWZvcmUtc2Nyb2xsKSkpCiAgICAgKG1vdXNlLW1pbmlidWZmZXIt Y2hlY2sgY2xpY2spCiAgICAgKGxldCAoKGNsaWNrLXBvc24gKHBvc24tcG9pbnQgKGV2ZW50LXN0 YXJ0IGNsaWNrKSkpCiAJICA7OyBEb24ndCBsZXQgYSBzdWJzZXF1ZW50IGtpbGwgY29tbWFuZCBh cHBlbmQgdG8gdGhpcyBvbmU6CiAJICA7OyBwcmV2ZW50IHNldHRpbmcgdGhpcy1jb21tYW5kIHRv IGtpbGwtcmVnaW9uLgogCSAgKHRoaXMtY29tbWFuZCB0aGlzLWNvbW1hbmQpKQogICAgICAgKGlm IChhbmQgKHdpdGgtY3VycmVudC1idWZmZXIKICAgICAgICAgICAgICAgICAgICAod2luZG93LWJ1 ZmZlciAocG9zbi13aW5kb3cgKGV2ZW50LXN0YXJ0IGNsaWNrKSkpCiAJCSAoYW5kIChtYXJrIHQp ICg+IChtb2QgbW91c2Utc2VsZWN0aW9uLWNsaWNrLWNvdW50IDMpIDApCiAJCSAgICAgIDs7IERv bid0IGJlIGZvb2xlZCBieSBhIHJlY2VudCBjbGljayBpbiBzb21lIG90aGVyIGJ1ZmZlci4KIAkJ ICAgICAgKGVxIG1vdXNlLXNlbGVjdGlvbi1jbGljay1jb3VudC1idWZmZXIKIAkJCSAgKGN1cnJl bnQtYnVmZmVyKSkpKSkKKwkgIDs7IG1vdmluZyBieSB3b3Jkcy9saW5lcwogCSAgKGlmIChub3Qg KGFuZCAoZXEgbGFzdC1jb21tYW5kICdtb3VzZS1zYXZlLXRoZW4ta2lsbCkKIAkJCShlcXVhbCBj bGljay1wb3NuCiAJCQkgICAgICAgKGNhciAoY2RyLXNhZmUgKGNkci1zYWZlIG1vdXNlLXNhdmUt dGhlbi1raWxsLXBvc24pKSkpKSkKIAkgICAgICA7OyBGaW5kIGJvdGggZW5kcyBvZiB0aGUgb2Jq ZWN0IHNlbGVjdGVkIGJ5IHRoaXMgY2xpY2suCiAJICAgICAgKGxldCogKChyYW5nZQogCQkgICAg ICAobW91c2Utc3RhcnQtZW5kIGNsaWNrLXBvc24gY2xpY2stcG9zbgogCQkJCSAgICAgICBtb3Vz ZS1zZWxlY3Rpb24tY2xpY2stY291bnQpKSkKIAkJOzsgTW92ZSB3aGljaGV2ZXIgZW5kIGlzIGNs b3NlciB0byB0aGUgY2xpY2suCiAJCTs7IFRoYXQncyB3aGF0IHh0ZXJtIGRvZXMsIGFuZCBpdCBz ZWVtcyByZWFzb25hYmxlLgogCQkoaWYgKDwgKGFicyAoLSBjbGljay1wb3NuIChtYXJrIHQpKSkK IAkJICAgICAgIChhYnMgKC0gY2xpY2stcG9zbiAocG9pbnQpKSkpCiAJCSAgICAoc2V0LW1hcmsg KGNhciByYW5nZSkpCiAJCSAgKGdvdG8tY2hhciAobnRoIDEgcmFuZ2UpKSkKLQkJOzsgV2UgaGF2 ZSBhbHJlYWR5IHB1dCB0aGUgb2xkIHJlZ2lvbiBpbiB0aGUga2lsbCByaW5nLgotCQk7OyBSZXBs YWNlIGl0IHdpdGggdGhlIGV4dGVuZGVkIHJlZ2lvbi4KLQkJOzsgKEl0IHdvdWxkIGJlIGFubm95 aW5nIHRvIG1ha2UgYSBzZXBhcmF0ZSBlbnRyeS4pCi0JCShraWxsLW5ldyAoYnVmZmVyLXN1YnN0 cmluZyAocG9pbnQpIChtYXJrIHQpKSB0KQorCQkKKwkJKGNvbmQgKChlcSBtb3VzZS1zYXZlLXRo ZW4ta2lsbC1jb3B5LXJlZ2lvbiB0KSA7IHNhdmUgb24gZmlyc3QgY2xpY2sKKwkJICAgICAgIDs7 IFdlIGhhdmUgYWxyZWFkeSBwdXQgdGhlIG9sZCByZWdpb24gaW4gdGhlIGtpbGwgcmluZy4KKwkJ ICAgICAgIDs7IFJlcGxhY2UgaXQgd2l0aCB0aGUgZXh0ZW5kZWQgcmVnaW9uLgorCQkgICAgICAg OzsgKEl0IHdvdWxkIGJlIGFubm95aW5nIHRvIG1ha2UgYSBzZXBhcmF0ZSBlbnRyeS4pCisJCSAg ICAgICAoa2lsbC1uZXcgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAobWFyayB0KSkgdCkKKwkJ ICAgICAgIDs7IEFycmFuZ2UgZm9yIGEgcmVwZWF0ZWQgbW91c2UtMyB0byBraWxsIHRoaXMgcmVn aW9uLgorCQkgICAgICAgKHNldHEgbW91c2Utc2F2ZS10aGVuLWtpbGwtcG9zbgorCQkJICAgICAo bGlzdCAoY2FyIGtpbGwtcmluZykgKHBvaW50KSBjbGljay1wb3NuKSkpCisJCSAgICAgICgoZXEg bW91c2Utc2F2ZS10aGVuLWtpbGwtY29weS1yZWdpb24gOmRvdWJsZSkgOyBubyBzYXZlIG9uIGZp cnN0IGNsaWNrCisJCSAgICAgICA7OyBubyBzYXZlIG9uIGZpcnN0IGNsaWNrLCBidXQgbmVlZCB0 byBrbm93IHJlZ2lvbiBmcm9tIGZpcnN0CisJCSAgICAgICA7OyBuaWwgZm9yIHNhdmVkIGtpbGwg cmluZyB0b3AgdXNlZCB0byBpbmRpY2F0ZSBsaW1ibyBiZXR3ZWVuIHNlY29uZCBhbmQgdGhpcmQg Y2xpY2tzCisJCSAgICAgICAoc2V0cSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1wb3NuCisJCQkgICAg IChsaXN0IG5pbCAocG9pbnQpIGNsaWNrLXBvc24pKSkpCiAJCShtb3VzZS1zZXQtcmVnaW9uLTEp Ci0JCTs7IEFycmFuZ2UgZm9yIGEgcmVwZWF0ZWQgbW91c2UtMyB0byBraWxsIHRoaXMgcmVnaW9u LgotCQkoc2V0cSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1wb3NuCi0JCSAgICAgIChsaXN0IChjYXIg a2lsbC1yaW5nKSAocG9pbnQpIGNsaWNrLXBvc24pKQogCQkobW91c2Utc2hvdy1tYXJrKSkKLQkg ICAgOzsgSWYgd2UgY2xpY2sgdGhpcyBidXR0b24gYWdhaW4gd2l0aG91dCBtb3ZpbmcgaXQsCi0J ICAgIDs7IHRoYXQgdGltZSBraWxsLgotCSAgICAobW91c2Utc2F2ZS10aGVuLWtpbGwtZGVsZXRl LXJlZ2lvbiAobWFyaykgKHBvaW50KSkKLQkgICAgKHNldHEgbW91c2Utc2VsZWN0aW9uLWNsaWNr LWNvdW50IDApCi0JICAgIChzZXRxIG1vdXNlLXNhdmUtdGhlbi1raWxsLXBvc24gbmlsKSkKLQko aWYgKGFuZCAoZXEgbGFzdC1jb21tYW5kICdtb3VzZS1zYXZlLXRoZW4ta2lsbCkKKwkgICAgKGNv bmQgKChlcSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1jb3B5LXJlZ2lvbiB0KSA7IGtpbGwgb24gc2Vj b25kIGNsaWNrCisJCSAgIDs7IElmIHdlIGNsaWNrIHRoaXMgYnV0dG9uIGFnYWluIHdpdGhvdXQg bW92aW5nIGl0LAorCQkgICA7OyB0aGF0IHRpbWUga2lsbC4KKwkJICAgKG1vdXNlLXNhdmUtdGhl bi1raWxsLWRlbGV0ZS1yZWdpb24gKG1hcmspIChwb2ludCkpCisJCSAgIChzZXRxIG1vdXNlLXNl bGVjdGlvbi1jbGljay1jb3VudCAwKQorCQkgICAoc2V0cSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1w b3NuIG5pbCkpCisJCSAgKChlcSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1jb3B5LXJlZ2lvbiA6ZG91 YmxlKSA7c2F2ZSBvbiBzZWNvbmQva2lsbCBvbiB0aGlyZAorCQkgICAoaWYgKGNhci1zYWZlIG1v dXNlLXNhdmUtdGhlbi1raWxsLXBvc24pIDsga2lsbCBvbiB0aGlyZAorCQkgICAgICAgKHByb2du CisJCQkgKG1vdXNlLXNhdmUtdGhlbi1raWxsLWRlbGV0ZS1yZWdpb24gKG1hcmspIChwb2ludCkp CisJCQkgKHNldHEgbW91c2Utc2VsZWN0aW9uLWNsaWNrLWNvdW50IDApCisJCQkgKHNldHEgbW91 c2Utc2F2ZS10aGVuLWtpbGwtcG9zbiBuaWwpKQorCQkgICAgIChwcm9nbiAgOyBzYXZlIG9uIHNl Y29uZAorCQkgICAgICAgKGtpbGwtbmV3IChidWZmZXItc3Vic3RyaW5nIChwb2ludCkgKG1hcmsg dCkpIHQpCisJCSAgICAgICAoc2V0cSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1wb3NuCisJCQkgICAg IChsaXN0IChjYXIga2lsbC1yaW5nKSAocG9pbnQpIGNsaWNrLXBvc24pKSkpKSkpCisJOzsgbW92 aW5nIGJ5IGNoYXJzCisJKGlmIChhbmQgKGVxIGxhc3QtY29tbWFuZCAnbW91c2Utc2F2ZS10aGVu LWtpbGwpIAogCQkgbW91c2Utc2F2ZS10aGVuLWtpbGwtcG9zbgotCQkgKGVxIChjYXIgbW91c2Ut c2F2ZS10aGVuLWtpbGwtcG9zbikgKGNhciBraWxsLXJpbmcpKQotCQkgKGVxdWFsIChjZHIgbW91 c2Utc2F2ZS10aGVuLWtpbGwtcG9zbikgKGxpc3QgKHBvaW50KSBjbGljay1wb3NuKSkpCi0JICAg IDs7IElmIHRoaXMgaXMgdGhlIHNlY29uZCB0aW1lIHdlJ3ZlIGNhbGxlZAotCSAgICA7OyBtb3Vz ZS1zYXZlLXRoZW4ta2lsbCwgZGVsZXRlIHRoZSB0ZXh0IGZyb20gdGhlIGJ1ZmZlci4KLQkgICAg KHByb2duCi0JICAgICAgKG1vdXNlLXNhdmUtdGhlbi1raWxsLWRlbGV0ZS1yZWdpb24gKHBvaW50 KSAobWFyaykpCi0JICAgICAgOzsgQWZ0ZXIgd2Uga2lsbCwgYW5vdGhlciBjbGljayBjb3VudHMg YXMgInRoZSBmaXJzdCB0aW1lIi4KLQkgICAgICAoc2V0cSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1w b3NuIG5pbCkpCisJCSAoZXF1YWwgKGNkci1zYWZlIG1vdXNlLXNhdmUtdGhlbi1raWxsLXBvc24p IChsaXN0IChwb2ludCkgY2xpY2stcG9zbikpKQorCSAgICAoY29uZCAoKGVxIG1vdXNlLXNhdmUt dGhlbi1raWxsLWNvcHktcmVnaW9uIHQpIDsga2lsbCBvbiBzZWNvbmQgY2xpY2sKKwkJICAgOzsg SWYgdGhpcyBpcyB0aGUgc2Vjb25kIHRpbWUgd2UndmUgY2FsbGVkCisJCSAgIDs7IG1vdXNlLXNh dmUtdGhlbi1raWxsLCBkZWxldGUgdGhlIHRleHQgZnJvbSB0aGUgYnVmZmVyLgorCQkgICAobW91 c2Utc2F2ZS10aGVuLWtpbGwtZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChtYXJrKSkKKwkJICAgOzsg QWZ0ZXIgd2Uga2lsbCwgYW5vdGhlciBjbGljayBjb3VudHMgYXMgInRoZSBmaXJzdCB0aW1lIi4K KwkJICAgKHNldHEgbW91c2Utc2F2ZS10aGVuLWtpbGwtcG9zbiBuaWwpKQorCQkgICgoZXEgbW91 c2Utc2F2ZS10aGVuLWtpbGwtY29weS1yZWdpb24gOmRvdWJsZSkgOyBzYXZlIG9uIHNlY29uZCAv IGtpbGwgb24gdGhpcmQKKwkJICAgKGlmIChjYXItc2FmZSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1w b3NuKSA7IGtpbGwgb24gdGhpcmQKKwkJICAgICAgIChwcm9nbgorCQkJIChtb3VzZS1zYXZlLXRo ZW4ta2lsbC1kZWxldGUtcmVnaW9uIChwb2ludCkgKG1hcmspKQorCQkJIChzZXRxIG1vdXNlLXNh dmUtdGhlbi1raWxsLXBvc24gbmlsKSkKKwkJICAgICAocHJvZ24gIDsgc2F2ZSBvbiBzZWNvbmQK KwkJICAgICAgIChraWxsLW5ldyAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQpIChtYXJrIHQpKSB0 KQorCQkgICAgICAgKHNldHEgbW91c2Utc2F2ZS10aGVuLWtpbGwtcG9zbgorCQkJICAgICAobGlz dCAoY2FyIGtpbGwtcmluZykgKHBvaW50KSBjbGljay1wb3NuKSkpKSkpCiAJICA7OyBUaGlzIGlz IG5vdCBhIHJlcGV0aXRpb24uCiAJICA7OyBXZSBhcmUgYWRqdXN0aW5nIGFuIG9sZCBzZWxlY3Rp b24gb3IgY3JlYXRpbmcgYSBuZXcgb25lLgogCSAgKGlmIChvciAoYW5kIChlcSBsYXN0LWNvbW1h bmQgJ21vdXNlLXNhdmUtdGhlbi1raWxsKQogCQkgICAgICAgbW91c2Utc2F2ZS10aGVuLWtpbGwt cG9zbikKIAkJICAoYW5kIG1hcmstYWN0aXZlIHRyYW5zaWVudC1tYXJrLW1vZGUpCiAJCSAgKGFu ZCAobWVtcSBsYXN0LWNvbW1hbmQKIAkJCSAgICAgJyhtb3VzZS1kcmFnLXJlZ2lvbiBtb3VzZS1z ZXQtcmVnaW9uKSkKIAkJICAgICAgIChvciBtYXJrLWV2ZW4taWYtaW5hY3RpdmUKQEAgLTE1MTUs MjcgKzE1ODgsMzYgQEAKIAkJKGlmIChudW1iZXJwIG5ldykKIAkJICAgIChwcm9nbgogCQkgICAg ICA7OyBNb3ZlIHdoaWNoZXZlciBlbmQgb2YgdGhlIHJlZ2lvbiBpcyBjbG9zZXIgdG8gdGhlIGNs aWNrLgogCQkgICAgICA7OyBUaGF0IGlzIHdoYXQgeHRlcm0gZG9lcywgYW5kIGl0IHNlZW1zIHJl YXNvbmFibGUuCiAJCSAgICAgIChpZiAoPD0gKGFicyAoLSBuZXcgKHBvaW50KSkpIChhYnMgKC0g bmV3IChtYXJrIHQpKSkpCiAJCQkgIChnb3RvLWNoYXIgbmV3KQogCQkJKHNldC1tYXJrIG5ldykp CiAJCSAgICAgIChzZXRxIGRlYWN0aXZhdGUtbWFyayBuaWwpKSkKLQkJKGtpbGwtbmV3IChidWZm ZXItc3Vic3RyaW5nIChwb2ludCkgKG1hcmsgdCkpIHQpKQorCQkoYW5kIChlcSBtb3VzZS1zYXZl LXRoZW4ta2lsbC1jb3B5LXJlZ2lvbiB0KSA7IHNhdmUgb24gZmlyc3QgY2xpY2sKKwkJICAgICAo a2lsbC1uZXcgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAobWFyayB0KSkgdCkpKQogCSAgICA7 OyBTZXQgdGhlIG1hcmsgd2hlcmUgcG9pbnQgaXMsIHRoZW4gbW92ZSB3aGVyZSBjbGlja2VkLgog CSAgICAobW91c2Utc2V0LW1hcmstZmFzdCBjbGljaykKIAkgICAgKGlmIGJlZm9yZS1zY3JvbGwK IAkJKGdvdG8tY2hhciBiZWZvcmUtc2Nyb2xsKSkKIAkgICAgKGV4Y2hhbmdlLXBvaW50LWFuZC1t YXJrKSAgIDtXaHk/Pz8gLS1TdGVmCi0JICAgIChraWxsLW5ldyAoYnVmZmVyLXN1YnN0cmluZyAo cG9pbnQpIChtYXJrIHQpKSkpCi0gICAgICAgICAgKG1vdXNlLXNob3ctbWFyaykKKwkgICAgKGFu ZCAoZXEgbW91c2Utc2F2ZS10aGVuLWtpbGwtY29weS1yZWdpb24gdCkgOyBzYXZlIG9uIGZpcnN0 IGNsaWNrCisJCSAoa2lsbC1uZXcgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAobWFyayB0KSkp KSkKKwkgIChjb25kICgoZXEgbW91c2Utc2F2ZS10aGVuLWtpbGwtY29weS1yZWdpb24gdCkgOyBz YXZlIG9uIGZpcnN0IGNsaWNrCisJCSAoc2V0cSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1wb3NuCisJ CSAgICAgICAobGlzdCAoY2FyIGtpbGwtcmluZykgKHBvaW50KSBjbGljay1wb3NuKSkpCisJCSgo ZXEgbW91c2Utc2F2ZS10aGVuLWtpbGwtY29weS1yZWdpb24gOmRvdWJsZSkgOyBubyBzYXZlIG9u IGZpcnN0IGNsaWNrCisJCSA7OyBubyBzYXZlIG9uIGZpcnN0IGNsaWNrLCBidXQgbmVlZCB0byBr bm93IHJlZ2lvbiBmcm9tIGZpcnN0CisJCSA7OyBuaWwgZm9yIHNhdmVkIGtpbGwgcmluZyB0b3Ag dXNlZCB0byBpbmRpY2F0ZSBsaW1ibyBiZXR3ZWVuIAorCQkgOztzZWNvbmQgYW5kIHRoaXJkIGNs aWNrcworCQkgKHNldHEgbW91c2Utc2F2ZS10aGVuLWtpbGwtcG9zbgorCQkgICAgICAgKGxpc3Qg bmlsIChwb2ludCkgY2xpY2stcG9zbikpKSkKIAkgIChtb3VzZS1zZXQtcmVnaW9uLTEpCi0JICAo c2V0cSBtb3VzZS1zYXZlLXRoZW4ta2lsbC1wb3NuCi0JCShsaXN0IChjYXIga2lsbC1yaW5nKSAo cG9pbnQpIGNsaWNrLXBvc24pKSkpKSkpCisgICAgICAgICAgKG1vdXNlLXNob3ctbWFyaykpKSkp KQogDAogKGdsb2JhbC1zZXQta2V5IFtNLW1vdXNlLTFdICdtb3VzZS1zdGFydC1zZWNvbmRhcnkp CiAoZ2xvYmFsLXNldC1rZXkgW00tZHJhZy1tb3VzZS0xXSAnbW91c2Utc2V0LXNlY29uZGFyeSkK IChnbG9iYWwtc2V0LWtleSBbTS1kb3duLW1vdXNlLTFdICdtb3VzZS1kcmFnLXNlY29uZGFyeSkK IChnbG9iYWwtc2V0LWtleSBbTS1tb3VzZS0zXSAnbW91c2Utc2Vjb25kYXJ5LXNhdmUtdGhlbi1r aWxsKQogKGdsb2JhbC1zZXQta2V5IFtNLW1vdXNlLTJdICdtb3VzZS15YW5rLXNlY29uZGFyeSkK IAogKGRlZmNvbnN0IG1vdXNlLXNlY29uZGFyeS1vdmVybGF5CkluZGV4OiBsaXNwL3Rlcm0veC13 aW4uZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZW1hY3MvZW1hY3MvbGlzcC90ZXJt L3gtd2luLmVsLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyMgpkaWZmIC1VIDggLWQgLXIxLjIy MiB4LXdpbi5lbAotLS0gbGlzcC90ZXJtL3gtd2luLmVsCTEgRmViIDIwMDggMTY6MDE6MjUgLTAw MDAJMS4yMjIKKysrIGxpc3AvdGVybS94LXdpbi5lbAk3IEZlYiAyMDA4IDAzOjQzOjQ1IC0wMDAw CkBAIC0yMTM1LDYwICsyMTM1LDE4MCBAQAogKGRlZnZhciB4LWxhc3Qtc2VsZWN0ZWQtdGV4dC1j dXQgbmlsCiAgICJUaGUgdmFsdWUgb2YgdGhlIFggY3V0IGJ1ZmZlciBsYXN0IHRpbWUgd2Ugc2Vs ZWN0ZWQgb3IgcGFzdGVkIHRleHQuCiBUaGUgYWN0dWFsIHRleHQgc3RvcmVkIGluIHRoZSBYIGN1 dCBidWZmZXIgaXMgd2hhdCBlbmNvZGVkIGZyb20gdGhpcyB2YWx1ZS4iKQogKGRlZnZhciB4LWxh c3Qtc2VsZWN0ZWQtdGV4dC1jdXQtZW5jb2RlZCBuaWwKICAgIlRoZSB2YWx1ZSBvZiB0aGUgWCBj dXQgYnVmZmVyIGxhc3QgdGltZSB3ZSBzZWxlY3RlZCBvciBwYXN0ZWQgdGV4dC4KIFRoaXMgaXMg dGhlIGFjdHVhbCB0ZXh0IHN0b3JlZCBpbiB0aGUgWCBjdXQgYnVmZmVyLiIpCiAoZGVmdmFyIHgt bGFzdC1jdXQtYnVmZmVyLWNvZGluZyAnaXNvLWxhdGluLTEKICAgIlRoZSBjb2Rpbmcgd2UgbGFz dCB1c2VkIHRvIGVuY29kZS9kZWNvZGUgdGhlIHRleHQgZnJvbSB0aGUgWCBjdXQgYnVmZmVyIikK KyhkZWZ2YXIgeC1sYXN0LXNlbGVjdGVkLXJldHVybi1tdWx0aXBsZS1saXN0IG5pbAorICAiVGhl IGxhc3QgcmV0dXJuZWQgbGlzdCBmcm9tIHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24tdmFsdWUg d2hlbgoreC1jdXQtYnVmZmVyLW9yLXNlbGVjdGlvbi12YWx1ZS1yZXR1cm4tbXVsdGlwbGUgaXMg b24uIikKIAogKGRlZnZhciB4LWN1dC1idWZmZXItbWF4IDIwMDAwIDsgTm90ZSB0aGlzIHZhbHVl IGlzIG92ZXJyaWRkZW4gYmVsb3cuCiAgICJNYXggbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcHV0 IGluIHRoZSBjdXQgYnVmZmVyLgogSXQgaXMgc2FpZCB0aGF0IG92ZXJsYXJnZSBzdHJpbmdzIGFy ZSBzbG93IHRvIHB1dCBpbnRvIHRoZSBjdXQgYnVmZmVyLiIpCiAKIChkZWZjdXN0b20geC1zZWxl Y3QtZW5hYmxlLWNsaXBib2FyZCBuaWwKLSAgIk5vbi1uaWwgbWVhbnMgY3V0dGluZyBhbmQgcGFz dGluZyB1c2VzIHRoZSBjbGlwYm9hcmQuCi1UaGlzIGlzIGluIGFkZGl0aW9uIHRvLCBidXQgaW4g cHJlZmVyZW5jZSB0bywgdGhlIHByaW1hcnkgc2VsZWN0aW9uLiIKLSAgOnR5cGUgJ2Jvb2xlYW4K LSAgOmdyb3VwICdraWxsaW5nKQorIldoaWNoIGludGVycHJvZ3JhbS1jdXQgZXRjLiBmdW5jdGlv bnMgc2hvdWxkIHVzZSB0aGUgWDExIENMSVBCT0FSRCBzZWxlY3Rpb24uCisKK25pbCAgICAgICAg OiAgbm9uZQordCAgICAgICAgICA6ICBhbGwKK09yIGNob29zZSBvbmUgb3IgbW9yZSBvZjoKKzpj dXQgICAgICAgOiAgQ3V0IChhbmQgQ29weSkgdmlhIGB4LXNlbGVjdC10ZXh0JyAKKyAgICAgICAg ICAgICAgIFwoWDExJ3MgYGludGVycHJvZ3JhbS1jdXQtZnVuY3Rpb24nKQorOnBhc3RlICAgICA6 ICBQYXN0ZSB2aWEgYHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24tdmFsdWUnCisgICAgICAgICAg ICAgICBcKFgxMSdzIGBpbnRlcnByb2dyYW0tcGFzdGUtZnVuY3Rpb24nKSAgCis6aGlnaGxpZ2h0 IDogIEhpZ2hsaWdodCB2aWEgYHgtc2VsZWN0LXRleHQtZm9yLWhpZ2hsaWdodCcKKyAgICAgICAg ICAgICAgIFwoWDExJ3MgYGludGVycHJvZ3JhbS1oaWdobGlnaHQtZnVuY3Rpb24nKQorOmxpZ2h0 aW5zICA6ICBMaWdodElucyB2aWEgYHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24tdmFsdWUtZm9y LWxpZ2h0aW5zJworICAgICAgICAgICAgICAgXChYMTEncyBgaW50ZXJwcm9ncmFtLWxpZ2h0aW5z LWZ1bmN0aW9uJykKKworaW50ZXJwcm9ncmFtIGN1dCBhbmQgcGFzdGUgYXJlIGFzc29jaWF0ZWQg d2l0aCBraWxsIHJpbmcgb3BlcmF0aW9ucyBpbiBlbWFjcy4KK2ludGVycHJvZ3JhbSBoaWdobGln aHQgYW5kIGxpZ2h0aW5zIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUga2lsbCByaW5nCithbmQgYXNz b2NpYXRlZCB3aXRoIGBzZXQtYWN0aXZlLXJlZ2lvbicgYW5kIGBtb3VzZS15YW5rLWF0LWNsaWNr JyIKKworOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIk5vbmUiIG5pbCkKKwkgICAgICAgKGNv bnN0IDp0YWcgIkFsbCIgdCkKKwkgICAgICAgKHNldCA6dGFnICJDaG9vc2UiIChjb25zdCA6dGFn ICJDdXQvQ29weSIgOmN1dCkKKwkJICAgIChjb25zdCA6dGFnICJQYXN0ZSIgOnBhc3RlKQorCQkg ICAgKGNvbnN0IDp0YWcgIkhpZ2hsaWdodCIgOmhpZ2hsaWdodCkKKyAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IDp0YWcgIkxpZ2h0SW5zIiA6bGlnaHRpbnMpKSkKKzpncm91cCAna2lsbGluZykK IAogKGRlZmN1c3RvbSB4LXNlbGVjdC1lbmFibGUtcHJpbWFyeSB0Ci0gICJOb24tbmlsIG1lYW5z IGN1dHRpbmcgYW5kIHBhc3RpbmcgdXNlcyB0aGUgcHJpbWFyeSBzZWxlY3Rpb24uIgotICA6dHlw ZSAnYm9vbGVhbgotICA6Z3JvdXAgJ2tpbGxpbmcpCisiV2hpY2ggaW50ZXJwcm9ncmFtLWN1dCBl dGMuIGZ1bmN0aW9ucyBzaG91bGQgdXNlIHRoZSBYMTEgUFJJTUFSWSBzZWxlY3Rpb24uCisKK25p bCAgICAgICAgOiAgbm9uZQordCAgICAgICAgICA6ICBhbGwKK09yIGNob29zZSBvbmUgb3IgbW9y ZSBvZjoKKzpjdXQgICAgICAgOiAgQ3V0IChhbmQgQ29weSkgdmlhIGB4LXNlbGVjdC10ZXh0JyAK KyAgICAgICAgICAgICAgIFwoWDExJ3MgYGludGVycHJvZ3JhbS1jdXQtZnVuY3Rpb24nKQorOnBh c3RlICAgICA6ICBQYXN0ZSB2aWEgYHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24tdmFsdWUnCisg ICAgICAgICAgICAgICBcKFgxMSdzIGBpbnRlcnByb2dyYW0tcGFzdGUtZnVuY3Rpb24nKSAgCis6 aGlnaGxpZ2h0IDogIEhpZ2hsaWdodCB2aWEgYHgtc2VsZWN0LXRleHQtZm9yLWhpZ2hsaWdodCcK KyAgICAgICAgICAgICAgIFwoWDExJ3MgYGludGVycHJvZ3JhbS1oaWdobGlnaHQtZnVuY3Rpb24n KQorOmxpZ2h0aW5zICA6ICBMaWdodElucyB2aWEgYHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24t dmFsdWUtZm9yLWxpZ2h0aW5zJworICAgICAgICAgICAgICAgXChYMTEncyBgaW50ZXJwcm9ncmFt LWxpZ2h0aW5zLWZ1bmN0aW9uJykKKworaW50ZXJwcm9ncmFtIGN1dCBhbmQgcGFzdGUgYXJlIGFz c29jaWF0ZWQgd2l0aCBraWxsIHJpbmcgb3BlcmF0aW9ucyBpbiBlbWFjcy4KK2ludGVycHJvZ3Jh bSBoaWdobGlnaHQgYW5kIGxpZ2h0aW5zIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUga2lsbCByaW5n CithbmQgYXNzb2NpYXRlZCB3aXRoIGBzZXQtYWN0aXZlLXJlZ2lvbicgYW5kIGBtb3VzZS15YW5r LWF0LWNsaWNrJyIKKworOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIk5vbmUiIG5pbCkKKwkg ICAgICAgKGNvbnN0IDp0YWcgIkFsbCIgdCkKKwkgICAgICAgKHNldCA6dGFnICJDaG9vc2UiIChj b25zdCA6dGFnICJDdXQvQ29weSIgOmN1dCkKKwkJICAgIChjb25zdCA6dGFnICJQYXN0ZSIgOnBh c3RlKQorCQkgICAgKGNvbnN0IDp0YWcgIkhpZ2hsaWdodCIgOmhpZ2hsaWdodCkKKwkJICAgIChj b25zdCA6dGFnICJMaWdodElucyIgOmxpZ2h0aW5zKSkpCis6Z3JvdXAgJ2tpbGxpbmcpCisKKwor KGRlZmN1c3RvbSB4LXNlbGVjdC1lbmFibGUtY3V0YnVmZmVyIHQKKyAgIldoaWNoIGludGVycHJv Z3JhbS1jdXQgZXRjLiBmdW5jdGlvbnMgc2hvdWxkIHVzZSBYMTEgbGVnYWN5IEN1dCBCdWZmZXIg MC4KKworSW4gWCwgY3V0IGJ1ZmZlcnMgaGF2ZSBsb25nIGJlZW4gc3VwZXJzZWRlZCBieSBjbGlw Ym9hcmQgYW5kIHByaW1hcnkKK3NlbGVjdGlvbnMuICBIb3dldmVyLCBzb21lIG9sZCBYIHByb2dy YW1zIHVzZSB0aGVtLiAgSWYgeW91CituZWVkIHRvIGV4Y2hhbmdlIGRhdGEgYmV0d2VlbiBlbWFj cyBhbmQgc3VjaCBwcm9ncmFtcyB2aWEKK1ggY3V0IGJ1ZmZlcnMsIHlvdSBtYXkgd2FudCB0byBz ZXQgdGhpcyB0byBhIG5vbi1uaWwgdmFsdWUKK1woY3VycmVudGx5IGRlZmF1bHRzIHRvIHQgdG8g cHJlc2VydmUgaGlzdG9yaWMgZW1hY3MgYmVoYXZpb3VyKQorCituaWwgICAgICAgIDogIG5vbmUK K3QgICAgICAgICAgOiAgYWxsCitPciBjaG9vc2Ugb25lIG9yIG1vcmUgb2Y6Cis6Y3V0ICAgICAg IDogIEN1dCAoYW5kIENvcHkpIHZpYSBgeC1zZWxlY3QtdGV4dCcgCisgICAgICAgICAgICAgICBc KFgxMSdzIGBpbnRlcnByb2dyYW0tY3V0LWZ1bmN0aW9uJykKKzpwYXN0ZSAgICAgOiAgUGFzdGUg dmlhIGB4LWN1dC1idWZmZXItb3Itc2VsZWN0aW9uLXZhbHVlJworICAgICAgICAgICAgICAgXChY MTEncyBgaW50ZXJwcm9ncmFtLXBhc3RlLWZ1bmN0aW9uJykgIAorOmhpZ2hsaWdodCA6ICBIaWdo bGlnaHQgdmlhIGB4LXNlbGVjdC10ZXh0LWZvci1oaWdobGlnaHQnCisgICAgICAgICAgICAgICBc KFgxMSdzIGBpbnRlcnByb2dyYW0taGlnaGxpZ2h0LWZ1bmN0aW9uJykKKzpsaWdodGlucyAgOiAg TGlnaHRJbnMgdmlhIGB4LWN1dC1idWZmZXItb3Itc2VsZWN0aW9uLXZhbHVlLWZvci1saWdodGlu cycKKyAgICAgICAgICAgICAgIFwoWDExJ3MgYGludGVycHJvZ3JhbS1saWdodGlucy1mdW5jdGlv bicpCisKKworaW50ZXJwcm9ncmFtIGN1dCBhbmQgcGFzdGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBr aWxsIHJpbmcgb3BlcmF0aW9ucyBpbiBlbWFjcy4KK2ludGVycHJvZ3JhbSBoaWdobGlnaHQgYW5k IGxpZ2h0aW5zIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUga2lsbCByaW5nCithbmQgYXNzb2NpYXRl ZCB3aXRoIGBzZXQtYWN0aXZlLXJlZ2lvbicgYW5kIGBtb3VzZS15YW5rLWF0LWNsaWNrJyIKKwor OnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIk5vbmUiIG5pbCkKKwkgICAgICAgKGNvbnN0IDp0 YWcgIkFsbCIgdCkKKwkgICAgICAgKHNldCA6dGFnICJDaG9vc2UiIChjb25zdCA6dGFnICJDdXQv Q29weSIgOmN1dCkKKwkJICAgIChjb25zdCA6dGFnICJQYXN0ZSIgOnBhc3RlKQorCQkgICAgKGNv bnN0IDp0YWcgIkhpZ2hsaWdodCIgOmhpZ2hsaWdodCkKKwkJICAgIChjb25zdCA6dGFnICJMaWdo dElucyIgOmxpZ2h0aW5zKSkpCis6Z3JvdXAgJ2tpbGxpbmcKKzp2ZXJzaW9uICIyMy4xIikKKyAK KworKGRlZnVuIHgtc2VsZWN0LXRleHQtZm9yLW9wIChvcCB0ZXh0ICZvcHRpb25hbCBwdXNoKQor ICAiTWFrZSBURVhULCBhIHN0cmluZywgdGhlIHByaW1hcnkgYW5kL29yIGNsaXBib2FyZCBYIHNl bGVjdGlvbi4KKworVGhpcyBmdW5jdGlvbiBtYXRjaGVzIE9QIGFnYWluc3QgYHgtc2VsZWN0LWVu YWJsZS1wcmltYXJ5JworYW5kIGB4LXNlbGVjdC1lbmFibGUtY2xpcGJvYXJkJy4gIE9QIG11c3Qg YmUgb25lIG9mIDpjdXQKK29yIDpoaWdobGlnaHQsIGNvcnJlc3BvbmRpbmcgdG8gdXNlIGFzIGFu IGBpbnRlcnByb2dyYW0tY3V0LWZ1bmN0aW9uJworb3IgYGludGVycHJvZ3JhbS1oaWdobGlnaHQt ZnVuY3Rpb24nLiAgVGhpcyBmdW5jdGlvbiBpcword3JhcHBlZCBieSBgeC1zZWxlY3QtdGV4dCcg YW5kIGB4LXNlbGVjdC10ZXh0LWZvci1oaWdobGlnaHQnCitmb3IgdGhlaXIgdXNlIGFzIHRoZSBY MTEgaW1wbGVtZW50YXRpb25zIG9mIGBpbnRlcnByb2dyYW0tY3V0LWZ1bmN0aW9uJworYW5kIGBp bnRlcnByb2dyYW0taGlnaGxpZ2h0LWZ1bmN0aW9uJy4KKworQWxzbyBtYXkgc2V0IHRoZSB2YWx1 ZSBvZiBYIGN1dCBidWZmZXIgMCwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKK3dpdGggb2xk ZXIgWCBhcHBsaWNhdGlvbnMsIG1hdGNoaW5nIE9QIGFnYWluc3QgYHgtc2VsZWN0LWVuYWJsZS1j dXRidWZmZXInCiAKLShkZWZ1biB4LXNlbGVjdC10ZXh0ICh0ZXh0ICZvcHRpb25hbCBwdXNoKQot ICAiTWFrZSBURVhULCBhIHN0cmluZywgdGhlIHByaW1hcnkgWCBzZWxlY3Rpb24uCi1BbHNvLCBz ZXQgdGhlIHZhbHVlIG9mIFggY3V0IGJ1ZmZlciAwLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0 eQotd2l0aCBvbGRlciBYIGFwcGxpY2F0aW9ucy4KIGdpbGRlYUBzdG9wLm1haWwtYWJ1c2Uub3Jn IHNheXMgaXQncyBub3QgZGVzaXJhYmxlIHRvIHB1dCBraWxscwogaW4gdGhlIGNsaXBib2FyZC4i CiAgIDs7IFdpdGggbXVsdGktdHR5LCB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBh IHR0eSBmcmFtZS4KICAgKHdoZW4gKGVxIChmcmFtZXAgKHNlbGVjdGVkLWZyYW1lKSkgJ3gpCi0g ICAgOzsgRG9uJ3Qgc2VuZCB0aGUgY3V0IGJ1ZmZlciB0b28gbXVjaCB0ZXh0LgotICAgIDs7IEl0 IGJlY29tZXMgc2xvdywgYW5kIGlmIHJlYWxseSBiaWcgaXQgY2F1c2VzIGVycm9ycy4KLSAgICAo Y29uZCAoKD49IChsZW5ndGggdGV4dCkgeC1jdXQtYnVmZmVyLW1heCkKLSAgICAgICAgICAgKHgt c2V0LWN1dC1idWZmZXIgIiIgcHVzaCkKLSAgICAgICAgICAgKHNldHEgeC1sYXN0LXNlbGVjdGVk LXRleHQtY3V0ICIiCi0gICAgICAgICAgICAgICAgIHgtbGFzdC1zZWxlY3RlZC10ZXh0LWN1dC1l bmNvZGVkICIiKSkKLSAgICAgICAgICAodAotICAgICAgICAgICAoc2V0cSB4LWxhc3Qtc2VsZWN0 ZWQtdGV4dC1jdXQgdGV4dAotICAgICAgICAgICAgICAgICB4LWxhc3QtY3V0LWJ1ZmZlci1jb2Rp bmcgJ2lzby1sYXRpbi0xCi0gICAgICAgICAgICAgICAgIHgtbGFzdC1zZWxlY3RlZC10ZXh0LWN1 dC1lbmNvZGVkCi0gICAgICAgICAgICAgICAgIDs7IElDQ0NNIHNheXMgY3V0IGJ1ZmZlciBhbHdh eXMgY29udGFpbiBJU08tTGF0aW4tMQotICAgICAgICAgICAgICAgICAoZW5jb2RlLWNvZGluZy1z dHJpbmcgdGV4dCAnaXNvLWxhdGluLTEpKQotICAgICAgICAgICAoeC1zZXQtY3V0LWJ1ZmZlciB4 LWxhc3Qtc2VsZWN0ZWQtdGV4dC1jdXQtZW5jb2RlZCBwdXNoKSkpCi0gICAgKHdoZW4geC1zZWxl Y3QtZW5hYmxlLXByaW1hcnkKKyAgICAod2hlbiAob3IgKGVxIHgtc2VsZWN0LWVuYWJsZS1jdXRi dWZmZXIgdCkKKwkgICAgICAobWVtYmVyIG9wIHgtc2VsZWN0LWVuYWJsZS1jdXRidWZmZXIpKQor ICAgICAgOzsgRG9uJ3Qgc2VuZCB0aGUgY3V0IGJ1ZmZlciB0b28gbXVjaCB0ZXh0LgorICAgICAg OzsgSXQgYmVjb21lcyBzbG93LCBhbmQgaWYgcmVhbGx5IGJpZyBpdCBjYXVzZXMgZXJyb3JzLgor ICAgICAgKGNvbmQgKCg+PSAobGVuZ3RoIHRleHQpIHgtY3V0LWJ1ZmZlci1tYXgpCisJICAgICAo eC1zZXQtY3V0LWJ1ZmZlciAiIiBwdXNoKQorCSAgICAgKHNldHEgeC1sYXN0LXNlbGVjdGVkLXRl eHQtY3V0ICIiCisJCSAgIHgtbGFzdC1zZWxlY3RlZC10ZXh0LWN1dC1lbmNvZGVkICIiKSkKKwkg ICAgKHQKKwkgICAgIChzZXRxIHgtbGFzdC1zZWxlY3RlZC10ZXh0LWN1dCB0ZXh0CisJCSAgIHgt bGFzdC1jdXQtYnVmZmVyLWNvZGluZyAnaXNvLWxhdGluLTEKKwkJICAgeC1sYXN0LXNlbGVjdGVk LXRleHQtY3V0LWVuY29kZWQKKwkJICAgOzsgSUNDQ00gc2F5cyBjdXQgYnVmZmVyIGFsd2F5cyBj b250YWluIElTTy1MYXRpbi0xCisJCSAgIChlbmNvZGUtY29kaW5nLXN0cmluZyB0ZXh0ICdpc28t bGF0aW4tMSkpCisJICAgICAoeC1zZXQtY3V0LWJ1ZmZlciB4LWxhc3Qtc2VsZWN0ZWQtdGV4dC1j dXQtZW5jb2RlZCBwdXNoKSkpKQorICAgICh3aGVuIChvciAoZXEgeC1zZWxlY3QtZW5hYmxlLXBy aW1hcnkgdCkKKwkgICAgICAobWVtYmVyIG9wIHgtc2VsZWN0LWVuYWJsZS1wcmltYXJ5KSkKICAg ICAgICh4LXNldC1zZWxlY3Rpb24gJ1BSSU1BUlkgdGV4dCkKICAgICAgIChzZXRxIHgtbGFzdC1z ZWxlY3RlZC10ZXh0LXByaW1hcnkgdGV4dCkpCi0gICAgKHdoZW4geC1zZWxlY3QtZW5hYmxlLWNs aXBib2FyZAorICAgICh3aGVuIChvciAoZXEgeC1zZWxlY3QtZW5hYmxlLWNsaXBib2FyZCB0KQor CSAgICAgIChtZW1iZXIgb3AgeC1zZWxlY3QtZW5hYmxlLWNsaXBib2FyZCkpIAogICAgICAgKHgt c2V0LXNlbGVjdGlvbiAnQ0xJUEJPQVJEIHRleHQpCiAgICAgICAoc2V0cSB4LWxhc3Qtc2VsZWN0 ZWQtdGV4dC1jbGlwYm9hcmQgdGV4dCkpKSkKIAorCisoZGVmdW4geC1zZWxlY3QtdGV4dCAodGV4 dCAmb3B0aW9uYWwgcHVzaCkKKyAgIk1ha2UgVEVYVCwgYSBzdHJpbmcsIHRoZSBwcmltYXJ5IGFu ZC9vciBjbGlwYm9hcmQgWDExIHNlbGVjdGlvbiAoZm9yIGN1dCkuCisKK0Fsc28gbWF5IHNldCB0 aGUgdmFsdWUgb2YgWCBjdXQgYnVmZmVyIDAsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Cit3 aXRoIG9sZGVyIFggYXBwbGljYXRpb25zLgorCitUaGlzIGZ1bmN0aW9uIGlzIHN1aXRhYmxlIGFz IGFuIGBpbnRlcnByb2dyYW0tY3V0LWZ1bmN0aW9uJy4gIAorVGhpcyBmdW5jdGlvbiBpcyBpbXBs ZW1lbnRlZCBieSBjYWxsaW5nICBgeC1zZWxlY3QtdGV4dC1mb3Itb3AnIHdpdGggT1AgOmN1dCIK KyAgKHgtc2VsZWN0LXRleHQtZm9yLW9wIDpjdXQgdGV4dCBwdXNoKSkKKworCisoZGVmdW4geC1z ZWxlY3QtdGV4dC1mb3ItaGlnaGxpZ2h0ICh0ZXh0ICZvcHRpb25hbCBwdXNoKQorICAiTWFrZSBU RVhULCBhIHN0cmluZywgdGhlIHByaW1hcnkgYW5kL29yIGNsaXBib2FyZCBYMTEgc2VsZWN0aW9u IChmb3IgaGlnaGxpZ2h0KS4KKworQWxzbyBtYXkgc2V0IHRoZSB2YWx1ZSBvZiBYIGN1dCBidWZm ZXIgMCwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKK3dpdGggb2xkZXIgWCBhcHBsaWNhdGlv bnMuCisKK1RoaXMgZnVuY3Rpb24gaXMgc3VpdGFibGUgYXMgYW4gYGludGVycHJvZ3JhbS1oaWdo bGlnaHQtZnVuY3Rpb24nLiAgCitUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxp bmcgYHgtc2VsZWN0LXRleHQtZm9yLW9wJyB3aXRoIE9QIGA6aGlnaGxpZ2h0JyIKKyAgKHgtc2Vs ZWN0LXRleHQtZm9yLW9wIDpoaWdobGlnaHQgdGV4dCBwdXNoKSkKKworCiAoZGVmdmFyIHgtc2Vs ZWN0LXJlcXVlc3QtdHlwZSBuaWwKICAgIipEYXRhIHR5cGUgcmVxdWVzdCBmb3IgWCBzZWxlY3Rp b24uCiBUaGUgdmFsdWUgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZGF0YSB0eXBlcywgYSBsaXN0 IG9mIHRoZW0sIG9yIG5pbDoKICAgYENPTVBPVU5EX1RFWFQnLCBgVVRGOF9TVFJJTkcnLCBgU1RS SU5HJywgYFRFWFQnCiAKIElmIHRoZSB2YWx1ZSBpcyBvbmUgb2YgdGhlIGFib3ZlIHN5bWJvbHMs IHRyeSBvbmx5IHRoZSBzcGVjaWZpZWQKIHR5cGUuCiAKQEAgLTIyMTYsMjcgKzIzMzYsOTUgQEAK IAkgIChzZXRxIHJlcXVlc3QtdHlwZSAoY2RyIHJlcXVlc3QtdHlwZSkpKQogICAgICAgKGNvbmRp dGlvbi1jYXNlIG5pbAogCSAgKHNldHEgdGV4dCAoeC1nZXQtc2VsZWN0aW9uIHR5cGUgcmVxdWVz dC10eXBlKSkKIAkoZXJyb3IgbmlsKSkpCiAgICAgKGlmIHRleHQKIAkocmVtb3ZlLXRleHQtcHJv cGVydGllcyAwIChsZW5ndGggdGV4dCkgJyhmb3JlaWduLXNlbGVjdGlvbiBuaWwpIHRleHQpKQog ICAgIHRleHQpKQogCi07OyBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IFggc2VsZWN0 aW9uLgotOzsgQ29uc3VsdCB0aGUgc2VsZWN0aW9uLCBhbmQgdGhlIGN1dCBidWZmZXIuICBUcmVh dCBlbXB0eSBzdHJpbmdzCisKKyhkZWZjdXN0b20geC1jdXQtYnVmZmVyLW9yLXNlbGVjdGlvbi12 YWx1ZS1yZXR1cm4tbXVsdGlwbGUgbmlsCisiSWYgbm9uLW5pbCBgeC1jdXQtYnVmZmVyLW9yLXNl bGVjdGlvbi12YWx1ZScgcmV0dXJucyBtdWx0aXBsZSBzZWxlY3Rpb25zLgorT3JkZXIgaXMgZGV0 ZXJtaW5lZCBieSBgeC1jdXQtYnVmZmVyLW9yLXNlbGVjdGlvbi12YWx1ZS1yZXR1cm4tb3JkZXIn IgorOnR5cGUgJ2Jvb2xlYW4KKzpncm91cCAna2lsbGluZworOnZlcnNpb24gIjIzLjEiKQorCiso ZGVmY3VzdG9tIHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24tdmFsdWUtcmV0dXJuLW9yZGVyIDpj cGIKKyJEZXRlcm1pbmVzIHByZWNlZGVuY2UgZm9yIHJldHVybiBmcm9tIGB4LWN1dC1idWZmZXIt b3Itc2VsZWN0aW9uLXZhbHVlJywKK3RoZSBYIGltcGxlbWVudGF0aW9uIG9mIGBpbnRlcnByb2dy YW0tcGFzdGUtZnVuY3Rpb24nLgorCitOb3RlIHRoYXQgYSBzZWxlY3Rpb24gd2lsbCBvbmx5IGFj dHVhbGx5IGJlIHJldHVybmVkCitpZiB0aGUgYXNzb2NpYXRlZCBgeC1zZWxlY3QtZW5hYmxlLXBy aW1hcnknCisvYHgtc2VsZWN0LWVuYWJsZS1jbGlwYm9hcmQnLyBgeC1zZWxlY3QtZW5hYmxlLWN1 dGJ1ZmZlcicgCitoYXMgOnBhc3RlIG9yIHQgc2V0LgorCitJZiBgeC1jdXQtYnVmZmVyLW9yLXNl bGVjdGlvbi12YWx1ZS1yZXR1cm4tbXVsdGlwbGUnIGlzIG5pbCwKK3RoaXMgZGV0ZXJtaW5lcyBw cmVjZWRlbmNlIGZvciB0aGUgc2luZ2xlIHJldHVybi4iCisKKzp0eXBlICcoY2hvaWNlIAorCShj b25zdCA6dGFnICJDbGlwYm9hcmQgPiBQcmltYXJ5ID4gQ3V0QnVmZmVyIiA6Y3BiKQorCShjb25z dCA6dGFnICJQcmltYXJ5ID4gQ2xpcGJvYXJkID4gQ3V0QnVmZmVyIiA6cGNiKSkKKyAgICAgICAg OzsgbW9yZSBjb3VsZCBiZSBhZGRlZCwgYnV0IEkgZG91YnQgYXJlIHRlcnJpYmx5IHVzZWZ1bCAK KyAgICAgICAgOzsgLSBDdXQgQnVmZmVyIDAgbm90IGV4YWN0bHkgdXNlZCBtdWNoLgorCTs7ICco Y29uc3QgOnRhZyAiQ2xpcGJvYXJkID4gQ3V0QnVmZmVyID4gUHJpbWFyeSIgOmNicCkKKwk7OyAn KGNvbnN0IDp0YWcgIlByaW1hcnkgPiBDdXRCdWZmZXIgPiBDbGlwYm9hcmQiIDpwYmMpCisJOzsg Jyhjb25zdCA6dGFnICJDdXRCdWZmZXIgPiBDbGlwYm9hcmQgPiBQcmltYXJ5IiA6YmNwKQorICAg ICAgICA7OyAnKGNvbnN0IDp0YWcgIkN1dEJ1ZmZlciA+IFByaW1hcnkgPiBDbGlwYm9hcmQiIDpi cGMpCis6Z3JvdXAgJ2tpbGxpbmcKKzp2ZXJzaW9uICIyMy4xIikKKworKGRlZmN1c3RvbSB4LWN1 dC1idWZmZXItb3Itc2VsZWN0aW9uLXZhbHVlLWZvci1saWdodGlucy1yZXR1cm4tb3JkZXIgOmNw YgorIkRldGVybWluZXMgcHJlY2VkZW5jZSBmb3IgcmV0dXJuIAorZnJvbSBgeC1jdXQtYnVmZmVy LW9yLXNlbGVjdGlvbi12YWx1ZS1mb3ItbGlnaHRpbnMnLCAKK3RoZSBYICBpbXBsZW1lbnRhdGlv biBvZiBgaW50ZXJwcm9ncmFtLXBhc3RlLWZ1bmN0aW9uJy4KKworTm90ZSB0aGF0IGEgc2VsZWN0 aW9uIHdpbGwgb25seSBhY3R1YWxseSBiZSByZXR1cm5lZAoraWYgdGhlIGFzc29jaWF0ZWQgYHgt c2VsZWN0LWVuYWJsZS1wcmltYXJ5JworL2B4LXNlbGVjdC1lbmFibGUtY2xpcGJvYXJkJy8gYHgt c2VsZWN0LWVuYWJsZS1jdXRidWZmZXInIAoraGFzIDpsaWdodGlucyBvciB0IHNldC4iCisKKzp0 eXBlICcoY2hvaWNlIAorCShjb25zdCA6dGFnICJDbGlwYm9hcmQgPiBQcmltYXJ5ID4gQ3V0QnVm ZmVyIiA6Y3BiKQorCShjb25zdCA6dGFnICJQcmltYXJ5ID4gQ2xpcGJvYXJkID4gQ3V0QnVmZmVy IiA6cGNiKSkKKyAgICAgICAgOzsgbW9yZSBjb3VsZCBiZSBhZGRlZCwgYnV0IEkgZG91YnQgYXJl IHRlcnJpYmx5IHVzZWZ1bCAKKyAgICAgICAgOzsgLSBDdXQgQnVmZmVyIDAgbm90IGV4YWN0bHkg dXNlZCBtdWNoLgorCTs7ICcoY29uc3QgOnRhZyAiQ2xpcGJvYXJkID4gQ3V0QnVmZmVyID4gUHJp bWFyeSIgOmNicCkKKwk7OyAnKGNvbnN0IDp0YWcgIlByaW1hcnkgPiBDdXRCdWZmZXIgPiBDbGlw Ym9hcmQiIDpwYmMpCisJOzsgJyhjb25zdCA6dGFnICJDdXRCdWZmZXIgPiBDbGlwYm9hcmQgPiBQ cmltYXJ5IiA6YmNwKQorICAgICAgICA7OyAnKGNvbnN0IDp0YWcgIkN1dEJ1ZmZlciA+IFByaW1h cnkgPiBDbGlwYm9hcmQiIDpicGMpCis6Z3JvdXAgJ2tpbGxpbmcKKzp2ZXJzaW9uICIyMy4xIikK KworCis7OyBSZXR1cm4gdGhlIHZhbHVlKHMpIG9mIHRoZSBjdXJyZW50IFggc2VsZWN0aW9uKHMp LgorOzsgQ29uc3VsdCB0aGUgc2VsZWN0aW9ucywgYW5kIHRoZSBjdXQgYnVmZmVyLiAgVHJlYXQg ZW1wdHkgc3RyaW5ncwogOzsgYXMgaWYgdGhleSB3ZXJlIHVuc2V0LgogOzsgSWYgdGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgdHdpY2UgYW5kIGZpbmRzIHRoZSBzYW1lIHRleHQsCiA7OyBpdCByZXR1 cm5zIG5pbCB0aGUgc2Vjb25kIHRpbWUuICBUaGlzIGlzIHNvIHRoYXQgYSBzaW5nbGUKIDs7IHNl bGVjdGlvbiB3b24ndCBiZSBhZGRlZCB0byB0aGUga2lsbCByaW5nIG92ZXIgYW5kIG92ZXIuCiAo ZGVmdW4geC1jdXQtYnVmZmVyLW9yLXNlbGVjdGlvbi12YWx1ZSAoKQogICA7OyBXaXRoIG11bHRp LXR0eSwgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSB0dHkgZnJhbWUuCiAgICh3 aGVuIChlcSAoZnJhbWVwIChzZWxlY3RlZC1mcmFtZSkpICd4KQogICAgIChsZXQgKGNsaXAtdGV4 dCBwcmltYXJ5LXRleHQgY3V0LXRleHQpCi0gICAgICAod2hlbiB4LXNlbGVjdC1lbmFibGUtY2xp cGJvYXJkCisgICAgICAKKyAgICAgIDs7IERvbid0IGV2ZXIgZG8gaW5kaXZpZHVhbCBuZXduZXNz IGNoZWNrcyB3aGVuIAorICAgICAgOzsgcG90ZW50aWFsbHkgcmV0dXJuaW5nIG11bHRpcGxlIHNl bGVjdGlvbnMsCisgICAgICA7OyBpbiB0aGUgbXVsdGlwbGUgc2VsZWN0aW9uIGNhc2UsIG9ubHkg Y29tcGFyaW5nCisgICAgICA7OyB0aGUgcHJldmlvdXMgZW50aXJlIHJldHVybiBsaXN0IHByb2R1 Y2VzIAorICAgICAgOzsgcmVhc29uYWJsZSBiZWhhdmlvdXIuCisgICAgICAod2hlbiB4LWN1dC1i dWZmZXItb3Itc2VsZWN0aW9uLXZhbHVlLXJldHVybi1tdWx0aXBsZQorCShzZXRxIHgtbGFzdC1z ZWxlY3RlZC10ZXh0LXByaW1hcnkgbmlsCisJICAgICAgeC1sYXN0LXNlbGVjdGVkLXRleHQtY2xp cGJvYXJkIG5pbAorCSAgICAgIHgtbGFzdC1zZWxlY3RlZC10ZXh0LWN1dCBuaWwgCisJICAgICAg eC1sYXN0LXNlbGVjdGVkLXRleHQtY3V0LWVuY29kZWQgbmlsKSkKKyAgICAgIAorICAgICAgKHdo ZW4gKG9yIChlcSB4LXNlbGVjdC1lbmFibGUtY2xpcGJvYXJkIHQpCisJCShtZW1iZXIgOnBhc3Rl IHgtc2VsZWN0LWVuYWJsZS1jbGlwYm9hcmQpKQogICAgICAgICAoc2V0cSBjbGlwLXRleHQgKHgt c2VsZWN0aW9uLXZhbHVlICdDTElQQk9BUkQpKQogICAgICAgICAoaWYgKHN0cmluZz0gY2xpcC10 ZXh0ICIiKSAoc2V0cSBjbGlwLXRleHQgbmlsKSkKIAogICAgICAgICA7OyBDaGVjayB0aGUgQ0xJ UEJPQVJEIHNlbGVjdGlvbiBmb3IgJ25ld25lc3MnLCBpcyBpdCBkaWZmZXJlbnQKICAgICAgICAg OzsgZnJvbSB3aGF0IHdlIHJlbWViZXJlZCB0aGVtIHRvIGJlIGxhc3QgdGltZSB3ZSBkaWQgYQog ICAgICAgICA7OyBjdXQvcGFzdGUgb3BlcmF0aW9uLgogICAgICAgICAoc2V0cSBjbGlwLXRleHQK ICAgICAgICAgICAgICAgKGNvbmQgOzsgY2hlY2sgY2xpcGJvYXJkCkBAIC0yMjQ1LDE3ICsyNDMz LDE4IEBACiAgICAgICAgICAgICAgICAoKGVxICAgICAgY2xpcC10ZXh0IHgtbGFzdC1zZWxlY3Rl ZC10ZXh0LWNsaXBib2FyZCkgbmlsKQogICAgICAgICAgICAgICAgKChzdHJpbmc9IGNsaXAtdGV4 dCB4LWxhc3Qtc2VsZWN0ZWQtdGV4dC1jbGlwYm9hcmQpCiAgICAgICAgICAgICAgICAgOzsgUmVj b3JkIHRoZSBuZXdlciBzdHJpbmcsCiAgICAgICAgICAgICAgICAgOzsgc28gc3Vic2VxdWVudCBj YWxscyBjYW4gdXNlIHRoZSBgZXEnIHRlc3QuCiAgICAgICAgICAgICAgICAgKHNldHEgeC1sYXN0 LXNlbGVjdGVkLXRleHQtY2xpcGJvYXJkIGNsaXAtdGV4dCkKICAgICAgICAgICAgICAgICBuaWwp CiAgICAgICAgICAgICAgICAodCAoc2V0cSB4LWxhc3Qtc2VsZWN0ZWQtdGV4dC1jbGlwYm9hcmQg Y2xpcC10ZXh0KSkpKSkKIAotICAgICAgKHdoZW4geC1zZWxlY3QtZW5hYmxlLXByaW1hcnkKKyAg ICAgICh3aGVuIChvciAoZXEgeC1zZWxlY3QtZW5hYmxlLXByaW1hcnkgdCkKKwkJKG1lbWJlciA6 cGFzdGUgeC1zZWxlY3QtZW5hYmxlLXByaW1hcnkpKQogCShzZXRxIHByaW1hcnktdGV4dCAoeC1z ZWxlY3Rpb24tdmFsdWUgJ1BSSU1BUlkpKQogCTs7IENoZWNrIHRoZSBQUklNQVJZIHNlbGVjdGlv biBmb3IgJ25ld25lc3MnLCBpcyBpdCBkaWZmZXJlbnQKIAk7OyBmcm9tIHdoYXQgd2UgcmVtZWJl cmVkIHRoZW0gdG8gYmUgbGFzdCB0aW1lIHdlIGRpZCBhCiAJOzsgY3V0L3Bhc3RlIG9wZXJhdGlv bi4KIAkoc2V0cSBwcmltYXJ5LXRleHQKIAkgICAgICAoY29uZCA7OyBjaGVjayBwcmltYXJ5IHNl bGVjdGlvbgogCSAgICAgICAoKG9yIChub3QgcHJpbWFyeS10ZXh0KSAoc3RyaW5nPSBwcmltYXJ5 LXRleHQgIiIpKQogCQkoc2V0cSB4LWxhc3Qtc2VsZWN0ZWQtdGV4dC1wcmltYXJ5IG5pbCkpCkBA IC0yMjYzLDc0ICsyNDUyLDEzMCBAQAogCSAgICAgICAoKHN0cmluZz0gcHJpbWFyeS10ZXh0IHgt bGFzdC1zZWxlY3RlZC10ZXh0LXByaW1hcnkpCiAJCTs7IFJlY29yZCB0aGUgbmV3ZXIgc3RyaW5n LAogCQk7OyBzbyBzdWJzZXF1ZW50IGNhbGxzIGNhbiB1c2UgdGhlIGBlcScgdGVzdC4KIAkJKHNl dHEgeC1sYXN0LXNlbGVjdGVkLXRleHQtcHJpbWFyeSBwcmltYXJ5LXRleHQpCiAJCW5pbCkKIAkg ICAgICAgKHQKIAkJKHNldHEgeC1sYXN0LXNlbGVjdGVkLXRleHQtcHJpbWFyeSBwcmltYXJ5LXRl eHQpKSkpKQogCi0gICAgICAoc2V0cSBjdXQtdGV4dCAoeC1nZXQtY3V0LWJ1ZmZlciAwKSkKKyAg ICAgICh3aGVuIChvciAoZXEgeC1zZWxlY3QtZW5hYmxlLWN1dGJ1ZmZlciB0KQorCQkobWVtYmVy IDpwYXN0ZSB4LXNlbGVjdC1lbmFibGUtY3V0YnVmZmVyKSkKKwkoc2V0cSBjdXQtdGV4dCAoeC1n ZXQtY3V0LWJ1ZmZlciAwKSkKKwkKKwk7OyBDaGVjayB0aGUgeCBjdXQgYnVmZmVyIGZvciAnbmV3 bmVzcycsIGlzIGl0IGRpZmZlcmVudAorCTs7IGZyb20gd2hhdCB3ZSByZW1lYmVyZWQgdGhlbSB0 byBiZSBsYXN0IHRpbWUgd2UgZGlkIGEKKwk7OyBjdXQvcGFzdGUgb3BlcmF0aW9uLgorCShzZXRx IGN1dC10ZXh0CisJICAgICAgKGxldCAoKG5leHQtY29kaW5nIChvciBuZXh0LXNlbGVjdGlvbi1j b2Rpbmctc3lzdGVtICdpc28tbGF0aW4tMSkpKQorCQkoY29uZCA7OyBjaGVjayBjdXQgYnVmZmVy CisJCSAoKG9yIChub3QgY3V0LXRleHQpIChzdHJpbmc9IGN1dC10ZXh0ICIiKSkKKwkJICAoc2V0 cSB4LWxhc3Qtc2VsZWN0ZWQtdGV4dC1jdXQgbmlsKSkKKwkJIDs7IFRoaXMgc2hvcnQgY3V0IGRv ZXNuJ3Qgd29yayBiZWNhdXNlIHgtZ2V0LWN1dC1idWZmZXIKKwkJIDs7IGFsd2F5cyByZXR1cm5z IGEgbmV3bHkgY3JlYXRlZCBzdHJpbmcuCisJCSA7OyAoKGVxICAgICAgY3V0LXRleHQgeC1sYXN0 LXNlbGVjdGVkLXRleHQtY3V0KSBuaWwpCisJCSAoKGFuZCAoc3RyaW5nPSBjdXQtdGV4dCB4LWxh c3Qtc2VsZWN0ZWQtdGV4dC1jdXQtZW5jb2RlZCkKKwkJICAgICAgIChlcSB4LWxhc3QtY3V0LWJ1 ZmZlci1jb2RpbmcgbmV4dC1jb2RpbmcpKQorCQkgIDs7IFNlZSB0aGUgY29tbWVudCBhYm92ZS4g IE5vIG5lZWQgb2YgdGhpcyByZWNvcmRpbmcuCisJCSAgOzsgUmVjb3JkIHRoZSBuZXdlciBzdHJp bmcsCisJCSAgOzsgc28gc3Vic2VxdWVudCBjYWxscyBjYW4gdXNlIHRoZSBgZXEnIHRlc3QuCisJ CSAgOzsgKHNldHEgeC1sYXN0LXNlbGVjdGVkLXRleHQtY3V0IGN1dC10ZXh0KQorCQkgIG5pbCkK KwkJICh0CisJCSAgKHNldHEgeC1sYXN0LXNlbGVjdGVkLXRleHQtY3V0LWVuY29kZWQgY3V0LXRl eHQKKwkJCXgtbGFzdC1jdXQtYnVmZmVyLWNvZGluZyBuZXh0LWNvZGluZworCQkJeC1sYXN0LXNl bGVjdGVkLXRleHQtY3V0CisJCQk7OyBJQ0NDTSBzYXlzIGN1dCBidWZmZXIgYWx3YXlzIGNvbnRh aW4gSVNPLUxhdGluLTEsIGJ1dAorCQkJOzsgdXNlIG5leHQtc2VsZWN0aW9uLWNvZGluZy1zeXN0 ZW0gaWYgbm90IG5pbC4KKwkJCShkZWNvZGUtY29kaW5nLXN0cmluZworCQkJIGN1dC10ZXh0IG5l eHQtY29kaW5nKSkpKSkpCiAKLSAgICAgIDs7IENoZWNrIHRoZSB4IGN1dCBidWZmZXIgZm9yICdu ZXduZXNzJywgaXMgaXQgZGlmZmVyZW50Ci0gICAgICA7OyBmcm9tIHdoYXQgd2UgcmVtZWJlcmVk IHRoZW0gdG8gYmUgbGFzdCB0aW1lIHdlIGRpZCBhCi0gICAgICA7OyBjdXQvcGFzdGUgb3BlcmF0 aW9uLgotICAgICAgKHNldHEgY3V0LXRleHQKLSAgICAgICAgICAgIChsZXQgKChuZXh0LWNvZGlu ZyAob3IgbmV4dC1zZWxlY3Rpb24tY29kaW5nLXN5c3RlbSAnaXNvLWxhdGluLTEpKSkKLSAgICAg ICAgICAgICAgKGNvbmQgOzsgY2hlY2sgY3V0IGJ1ZmZlcgotICAgICAgICAgICAgICAgKChvciAo bm90IGN1dC10ZXh0KSAoc3RyaW5nPSBjdXQtdGV4dCAiIikpCi0gICAgICAgICAgICAgICAgKHNl dHEgeC1sYXN0LXNlbGVjdGVkLXRleHQtY3V0IG5pbCkpCi0gICAgICAgICAgICAgICA7OyBUaGlz IHNob3J0IGN1dCBkb2Vzbid0IHdvcmsgYmVjYXVzZSB4LWdldC1jdXQtYnVmZmVyCi0gICAgICAg ICAgICAgICA7OyBhbHdheXMgcmV0dXJucyBhIG5ld2x5IGNyZWF0ZWQgc3RyaW5nLgotICAgICAg ICAgICAgICAgOzsgKChlcSAgICAgIGN1dC10ZXh0IHgtbGFzdC1zZWxlY3RlZC10ZXh0LWN1dCkg bmlsKQotICAgICAgICAgICAgICAgKChhbmQgKHN0cmluZz0gY3V0LXRleHQgeC1sYXN0LXNlbGVj dGVkLXRleHQtY3V0LWVuY29kZWQpCi0gICAgICAgICAgICAgICAgICAgICAoZXEgeC1sYXN0LWN1 dC1idWZmZXItY29kaW5nIG5leHQtY29kaW5nKSkKLSAgICAgICAgICAgICAgICA7OyBTZWUgdGhl IGNvbW1lbnQgYWJvdmUuICBObyBuZWVkIG9mIHRoaXMgcmVjb3JkaW5nLgotICAgICAgICAgICAg ICAgIDs7IFJlY29yZCB0aGUgbmV3ZXIgc3RyaW5nLAotICAgICAgICAgICAgICAgIDs7IHNvIHN1 YnNlcXVlbnQgY2FsbHMgY2FuIHVzZSB0aGUgYGVxJyB0ZXN0LgotICAgICAgICAgICAgICAgIDs7 IChzZXRxIHgtbGFzdC1zZWxlY3RlZC10ZXh0LWN1dCBjdXQtdGV4dCkKLSAgICAgICAgICAgICAg ICBuaWwpCi0gICAgICAgICAgICAgICAodAotICAgICAgICAgICAgICAgIChzZXRxIHgtbGFzdC1z ZWxlY3RlZC10ZXh0LWN1dC1lbmNvZGVkIGN1dC10ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAg eC1sYXN0LWN1dC1idWZmZXItY29kaW5nIG5leHQtY29kaW5nCi0gICAgICAgICAgICAgICAgICAg ICAgeC1sYXN0LXNlbGVjdGVkLXRleHQtY3V0Ci0gICAgICAgICAgICAgICAgICAgICAgOzsgSUND Q00gc2F5cyBjdXQgYnVmZmVyIGFsd2F5cyBjb250YWluIElTTy1MYXRpbi0xLCBidXQKLSAgICAg ICAgICAgICAgICAgICAgICA7OyB1c2UgbmV4dC1zZWxlY3Rpb24tY29kaW5nLXN5c3RlbSBpZiBu b3QgbmlsLgotICAgICAgICAgICAgICAgICAgICAgIChkZWNvZGUtY29kaW5nLXN0cmluZwotICAg ICAgICAgICAgICAgICAgICAgICBjdXQtdGV4dCBuZXh0LWNvZGluZykpKSkpKQorCTs7IEFzIHdl IGhhdmUgZG9uZSBvbmUgc2VsZWN0aW9uLCBjbGVhciB0aGlzIG5vdy4KKwkoc2V0cSBuZXh0LXNl bGVjdGlvbi1jb2Rpbmctc3lzdGVtIG5pbCkpCiAKLSAgICAgIDs7IEFzIHdlIGhhdmUgZG9uZSBv bmUgc2VsZWN0aW9uLCBjbGVhciB0aGlzIG5vdy4KLSAgICAgIChzZXRxIG5leHQtc2VsZWN0aW9u LWNvZGluZy1zeXN0ZW0gbmlsKQorICAgICAgOzsgcmV0dXJuIG9uZSBvciBtb3JlIG9mIHRoZSBm b3VuZCBzZWxlY3Rpb25zLgorICAgICAgKGlmIHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24tdmFs dWUtcmV0dXJuLW11bHRpcGxlCisJICAobGV0ICgobWF5YmUteC1zZWwtdmFsLXJldHVybi1saXN0 CisJCSAoY29uZCAoKGVxIDpjcGIgeC1jdXQtYnVmZmVyLW9yLXNlbGVjdGlvbi12YWx1ZS1yZXR1 cm4tb3JkZXIpCisJCQkoZGVsZXRlLWR1cHMgKGRlbHEgbmlsIChsaXN0IGNsaXAtdGV4dCBwcmlt YXJ5LXRleHQgY3V0LXRleHQpKSkpCisJCSAgICAgICAoKGVxIDpwY2IgeC1jdXQtYnVmZmVyLW9y LXNlbGVjdGlvbi12YWx1ZS1yZXR1cm4tb3JkZXIpCisJCQkoZGVsZXRlLWR1cHMgKGRlbHEgbmls IChsaXN0IHByaW1hcnktdGV4dCBjbGlwLXRleHQgY3V0LXRleHQpKSkpKSkpCisJICAgIChpZiAo b3IgKG51bGwgeC1sYXN0LXNlbGVjdGVkLXJldHVybi1tdWx0aXBsZS1saXN0KQorCQkgICAgOzsg aWYgdGhlIHJldHVybiBsaXN0IHdvdWxkIGJlIHNhbWUgYXMgKGVxdWFsKSB0byBvcgorCQkgICAg OzsgZXF1YWwgdG8gYSBoZWFkLXBpbm5lZCBzdWJsaXN0IG9mIHRoZSBsYXN0IHJldHVybiwgCisJ CSAgICA7OyBkbyBub3QgcmVyZXR1cm4gaXQuCisJCSAgICA7OyB0aGlzIGtlZXBzIGtpbGwtcmlu ZyBpbnRlcmFjdGlvbiBvZiBtdWx0aXBsZSBzZWxlY3Rpb25zCisJCSAgICA7OyAuLi4gbm90IGdy ZWF0LCBidXQgbGVzcyBzdWNreSB0aGFuIGVuZGxlc3MgZHVwbGljYXRlcy4KKwkJICAgIDs7IGNv dWxkIGhhdmUgdXNlZCBjbGVhcmVyIGNsLCBidXQgd2FudGVkIHRvIGF2b2lkIGRlcC4KKwkJICAg IChub3QgKGxldCAoKGEgbWF5YmUteC1zZWwtdmFsLXJldHVybi1saXN0KQorCQkJICAoYiB4LWxh c3Qtc2VsZWN0ZWQtcmV0dXJuLW11bHRpcGxlLWxpc3QpCisJCQkgIChzdWIgdCkpCisJCQkgICAo d2hpbGUgKGFuZCBzdWIgCisJCQkJICAgICAgIChub3QgKG51bGwgYSkpKQorCQkJICAgICAoc2V0 cSBzdWIgKGFuZCAoZXF1YWwgKGNhciBhKSAoY2FyIGIpKQorCQkJCQkgICAgKG5vdCAobnVsbCBi KSkpCisJCQkJICAgYSAoY2RyIGEpCisJCQkJICAgYiAoY2RyIGIpKSkKKwkJCSAgIHN1YikpKQor CQkoc2V0cSB4LWxhc3Qtc2VsZWN0ZWQtcmV0dXJuLW11bHRpcGxlLWxpc3QgCisJCSAgICAgIG1h eWJlLXgtc2VsLXZhbC1yZXR1cm4tbGlzdCkKKwkgICAgICBuaWwpKQorCShjb25kICgoZXEgOmNw YiB4LWN1dC1idWZmZXItb3Itc2VsZWN0aW9uLXZhbHVlLXJldHVybi1vcmRlcikKKwkgICAgICAg KG9yIGNsaXAtdGV4dCBwcmltYXJ5LXRleHQgY3V0LXRleHQpKQorCSAgICAgICgoZXEgOnBjYiB4 LWN1dC1idWZmZXItb3Itc2VsZWN0aW9uLXZhbHVlLXJldHVybi1vcmRlcikKKwkgICAgICAgKG9y IHByaW1hcnktdGV4dCBjbGlwLXRleHQgY3V0LXRleHQpKSkpKSkpCiAKLSAgICAgIDs7IEF0IHRo aXMgcG9pbnQgd2UgaGF2ZSByZWNvcmRlZCB0aGUgY3VycmVudCB2YWx1ZXMgZm9yIHRoZQotICAg ICAgOzsgc2VsZWN0aW9uIGZyb20gY2xpcGJvYXJkIChpZiB3ZSBhcmUgc3VwcG9zZWQgdG8pIHBy aW1hcnksCi0gICAgICA7OyBhbmQgY3V0IGJ1ZmZlci4gIFNvIHJldHVybiB0aGUgZmlyc3Qgb25l IHRoYXQgaGFzIGNoYW5nZWQKLSAgICAgIDs7ICh3aGljaCBpcyB0aGUgZmlyc3Qgbm9uLW51bGwg b25lKS4KLSAgICAgIDs7Ci0gICAgICA7OyBOT1RFOiBUaGVyZSB3aWxsIGJlIGNhc2VzIHdoZXJl IG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgaGFzCi0gICAgICA7OyBjaGFuZ2VkIGFuZCB0aGUgbmV3 IHZhbHVlcyBkaWZmZXIuICBUaGlzIGluZGljYXRlcyB0aGF0Ci0gICAgICA7OyBzb21ldGhpbmcg bGlrZSB0aGUgZm9sbG93aW5nIGhhcyBoYXBwZW5lZCBzaW5jZSB0aGUgbGFzdCB0aW1lCi0gICAg ICA7OyB3ZSBsb29rZWQgYXQgdGhlIHNlbGVjdGlvbnM6IEFwcGxpY2F0aW9uIFggc2V0IGFsbCB0 aGUKLSAgICAgIDs7IHNlbGVjdGlvbnMsIHRoZW4gQXBwbGljYXRpb24gWSBzZXQgb25seSBvbmUg b3IgdHdvIG9mIHRoZW0gKHNheQotICAgICAgOzsganVzdCB0aGUgY3V0LWJ1ZmZlcikuICBJbiB0 aGlzIGNhc2Ugc2luY2Ugd2UgZG9uJ3QgaGF2ZQotICAgICAgOzsgdGltZXN0YW1wcyB0aGVyZSBp cyBubyB3YXkgdG8ga25vdyB3aGF0IHRoZSAnY29ycmVjdCcgdmFsdWUgdG8KLSAgICAgIDs7IHJl dHVybiBpcy4gIFRoZSBuaWNlIHRoaW5nIHRvIGRvIHdvdWxkIGJlIHRvIHRlbGwgdGhlIHVzZXIg d2UKLSAgICAgIDs7IHNhdyBtdWx0aXBsZSBwb3NzaWJsZSBzZWxlY3Rpb25zIGFuZCBhc2sgdGhl IHVzZXIgd2hpY2ggd2FzIHRoZQotICAgICAgOzsgb25lIHRoZXkgd2FudGVkLgotICAgICAgOzsg VGhpcyBjb2RlIGlzIHN0aWxsIGEgYmlnIGltcHJvdmVtZW50IGJlY2F1c2Ugbm93IHRoZSB1c2Vy IGNhbgotICAgICAgOzsgZnV0eiB3aXRoIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgZ2V0IGVt YWNzIHRvIHBheSBhdHRlbnRpb24KLSAgICAgIDs7IHRvIHRoZSBjdXQgYnVmZmVyIGFnYWluIChw cmV2aW91c2x5IGFzIHNvb24gYXMgY2xpcGJvYXJkIG9yCi0gICAgICA7OyBwcmltYXJ5IGhhZCBi ZWVuIHNldCB0aGUgY3V0IGJ1ZmZlciB3b3VsZCBlc3NlbnRpYWxseSBuZXZlciBiZQotICAgICAg OzsgY2hlY2tlZCBhZ2FpbikuCi0gICAgICAob3IgY2xpcC10ZXh0IHByaW1hcnktdGV4dCBjdXQt dGV4dCkKLSAgICAgICkpKQorCis7OyBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IFgg c2VsZWN0aW9uIGZvciBhICJsaWdodHdlaWdodCBpbnNlcnRpb24iCis7OyB0aGF0IGlzIG5vdCBp bnRlbmRlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBraWxsIHJpbmcuIE5vLCByZWFsbHkuCis7OyBD b25zdWx0IHRoZSBzZWxlY3Rpb24sIGFuZCB0aGUgY3V0IGJ1ZmZlci4gIFRyZWF0IGVtcHR5IHN0 cmluZ3MKKzs7IGFzIGlmIHRoZXkgd2VyZSB1bnNldC4KKzs7IElmIHRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIHR3aWNlIGFuZCBmaW5kcyB0aGUgc2FtZSB0ZXh0LAorOzsgdW5saWtlIHgtY3V0LWJ1 ZmZlci1vci1zZWxlY3Rpb24tdmFsdWUsIGl0IHNob3VsZCByZXR1cm4gdGhlIHNhbWUgdGV4dC4K Kzs7IFNlZSBpbnRlcnByb2dyYW0tbGlnaHRpbnMtZnVuY3Rpb24gZG9jc3RyaW5nLi4uCisoZGVm dW4geC1jdXQtYnVmZmVyLW9yLXNlbGVjdGlvbi12YWx1ZS1mb3ItbGlnaHRpbnMgKCkKKyAgOzsg V2l0aCBtdWx0aS10dHksIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgdHR5IGZy YW1lLgorICAod2hlbiAoZXEgKGZyYW1lcCAoc2VsZWN0ZWQtZnJhbWUpKSAneCkKKyAgICAobGV0 IChjbGlwLXRleHQgcHJpbWFyeS10ZXh0IGN1dC10ZXh0KQorICAgICAgKHdoZW4gKG9yIChlcSB4 LXNlbGVjdC1lbmFibGUtY2xpcGJvYXJkIHQpCisJCShtZW1iZXIgOmxpZ2h0aW5zIHgtc2VsZWN0 LWVuYWJsZS1jbGlwYm9hcmQpKQorICAgICAgICAoc2V0cSBjbGlwLXRleHQgKHgtc2VsZWN0aW9u LXZhbHVlICdDTElQQk9BUkQpKQorICAgICAgICAoaWYgKHN0cmluZz0gY2xpcC10ZXh0ICIiKSAo c2V0cSBjbGlwLXRleHQgbmlsKSkpCisKKyAgICAgICh3aGVuIChvciAoZXEgeC1zZWxlY3QtZW5h YmxlLXByaW1hcnkgdCkKKwkJKG1lbWJlciA6bGlnaHRpbnMgeC1zZWxlY3QtZW5hYmxlLXByaW1h cnkpKQorCShzZXRxIHByaW1hcnktdGV4dCAoeC1zZWxlY3Rpb24tdmFsdWUgJ1BSSU1BUlkpKSkK KworICAgICAgKHdoZW4gKG9yIChlcSB4LXNlbGVjdC1lbmFibGUtY3V0YnVmZmVyIHQpCisJCSht ZW1iZXIgOmxpZ2h0aW5zIHgtc2VsZWN0LWVuYWJsZS1jdXRidWZmZXIpKQorCShzZXRxIGN1dC10 ZXh0ICh4LWdldC1jdXQtYnVmZmVyIDApKQorICAgICAgICA7OyB0cnkgdG8gZGVjb2RlIGN1dCBi dWZmZXIuCisJKHNldHEgY3V0LXRleHQKKwkgICAgICAobGV0ICgobmV4dC1jb2RpbmcgKG9yIG5l eHQtc2VsZWN0aW9uLWNvZGluZy1zeXN0ZW0gJ2lzby1sYXRpbi0xKSkpCisJCShjb25kIDs7IGNo ZWNrIGN1dCBidWZmZXIKKwkJICgob3IgKG5vdCBjdXQtdGV4dCkgKHN0cmluZz0gY3V0LXRleHQg IiIpKQorCQkgIG5pbCkKKwkJICh0CTs7IElDQ0NNIHNheXMgY3V0IGJ1ZmZlciBhbHdheXMgY29u dGFpbiBJU08tTGF0aW4tMSwgYnV0CisJCQk7OyB1c2UgbmV4dC1zZWxlY3Rpb24tY29kaW5nLXN5 c3RlbSBpZiBub3QgbmlsLgorCQkJKGRlY29kZS1jb2Rpbmctc3RyaW5nCisJCQkgY3V0LXRleHQg bmV4dC1jb2RpbmcpKSkpKQorCisJOzsgQXMgd2UgaGF2ZSBkb25lIG9uZSBzZWxlY3Rpb24sIGNs ZWFyIHRoaXMgbm93LgorCShzZXRxIG5leHQtc2VsZWN0aW9uLWNvZGluZy1zeXN0ZW0gbmlsKSkK KworICAgICAgKGNvbmQgKChlcSA6Y3BiIHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24tdmFsdWUt Zm9yLWxpZ2h0aW5zLXJldHVybi1vcmRlcikKKwkgICAgIChvciBjbGlwLXRleHQgcHJpbWFyeS10 ZXh0IGN1dC10ZXh0KSkKKwkgICAgKChlcSA6cGNiIHgtY3V0LWJ1ZmZlci1vci1zZWxlY3Rpb24t dmFsdWUtZm9yLWxpZ2h0aW5zLXJldHVybi1vcmRlcikKKwkgICAgIChvciBwcmltYXJ5LXRleHQg Y2xpcC10ZXh0IGN1dC10ZXh0KSkpKSkpCiAKIDs7IEFycmFuZ2UgZm9yIHRoZSBraWxsIGFuZCB5 YW5rIGZ1bmN0aW9ucyB0byBzZXQgYW5kIGNoZWNrIHRoZSBjbGlwYm9hcmQuCiAoc2V0cSBpbnRl cnByb2dyYW0tY3V0LWZ1bmN0aW9uICd4LXNlbGVjdC10ZXh0KQogKHNldHEgaW50ZXJwcm9ncmFt LXBhc3RlLWZ1bmN0aW9uICd4LWN1dC1idWZmZXItb3Itc2VsZWN0aW9uLXZhbHVlKQorKHNldHEg aW50ZXJwcm9ncmFtLWhpZ2hsaWdodC1mdW5jdGlvbiAneC1zZWxlY3QtdGV4dC1mb3ItaGlnaGxp Z2h0KQorKHNldHEgaW50ZXJwcm9ncmFtLWxpZ2h0aW5zLWZ1bmN0aW9uICd4LWN1dC1idWZmZXIt b3Itc2VsZWN0aW9uLXZhbHVlLWZvci1saWdodGlucykKIAogKGRlZnVuIHgtY2xpcGJvYXJkLXlh bmsgKCkKICAgIkluc2VydCB0aGUgY2xpcGJvYXJkIGNvbnRlbnRzLCBvciB0aGUgbGFzdCBzdHJl dGNoIG9mIGtpbGxlZCB0ZXh0LiIKICAgKGludGVyYWN0aXZlICIqIikKICAgKGxldCAoKGNsaXBi b2FyZC10ZXh0ICh4LXNlbGVjdGlvbi12YWx1ZSAnQ0xJUEJPQVJEKSkKIAkoeC1zZWxlY3QtZW5h YmxlLWNsaXBib2FyZCB0KSkKICAgICAoaWYgKGFuZCBjbGlwYm9hcmQtdGV4dCAoPiAobGVuZ3Ro IGNsaXBib2FyZC10ZXh0KSAwKSkKIAkoa2lsbC1uZXcgY2xpcGJvYXJkLXRleHQpKQo= ------=_Part_14733_2472276.1202356637438--