From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: martin rudalics via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#59862: quit-restore per window buffer Date: Mon, 8 Jul 2024 18:49:52 +0200 Message-ID: References: <86fsds8mlm.fsf@mail.linkov.net> <86ttibq1w1.fsf@mail.linkov.net> <8243325e-ed03-4e9e-b64f-c8225fb6dc60@gmx.at> <18173da7-32e1-4f14-bbea-9a8fa66af7dd@gmx.at> <86plsxmc6d.fsf@mail.linkov.net> <86r0d4ezdc.fsf@mail.linkov.net> <0d01a044-d7d6-456a-9ba9-d987faad4332@gmx.at> <86frthjq4y.fsf@mail.linkov.net> <743dc4dd-cf09-4c5e-9209-b63a47480e0b@gmx.at> <86msnne7ut.fsf@mail.linkov.net> <86plsgrfvu.fsf@mail.linkov.net> Reply-To: martin rudalics Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------LljYayqEV1Ur0nfWMbfh90n8" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37698"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: 59862@debbugs.gnu.org To: Juri Linkov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jul 08 18:51:30 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sQraM-0009bH-1L for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 08 Jul 2024 18:51:30 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sQrZr-0003Do-N4; Mon, 08 Jul 2024 12:50:59 -0400 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 1sQrZp-0003DT-8l for bug-gnu-emacs@gnu.org; Mon, 08 Jul 2024 12:50:57 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sQrZp-0008Mo-04 for bug-gnu-emacs@gnu.org; Mon, 08 Jul 2024 12:50:57 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sQrZt-0001p4-TW for bug-gnu-emacs@gnu.org; Mon, 08 Jul 2024 12:51:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 08 Jul 2024 16:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 59862 X-GNU-PR-Package: emacs Original-Received: via spool by 59862-submit@debbugs.gnu.org id=B59862.17204574116926 (code B ref 59862); Mon, 08 Jul 2024 16:51:01 +0000 Original-Received: (at 59862) by debbugs.gnu.org; 8 Jul 2024 16:50:11 +0000 Original-Received: from localhost ([127.0.0.1]:51377 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sQrZ3-0001nd-No for submit@debbugs.gnu.org; Mon, 08 Jul 2024 12:50:11 -0400 Original-Received: from mout.gmx.net ([212.227.17.20]:45199) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sQrYz-0001mw-Ug for 59862@debbugs.gnu.org; Mon, 08 Jul 2024 12:50:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.at; s=s31663417; t=1720457393; x=1721062193; i=rudalics@gmx.at; bh=FBNap9ctbV82IG6GZWIU5J5XfgR7r4lTqpm9nE/Ws2A=; h=X-UI-Sender-Class:Content-Type:Message-ID:Date:MIME-Version: Subject:To:Cc:References:From:In-Reply-To:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=TGBMcQNqqzCVbhCuQGulfUnaXxm2hDrHwYqBAxPEqUHuyOrF1wLcxEUOsHJEU2nE G553CoYgDV01WaqauCrXM5sZd2oEfNMPAtVGeOp3sfth3rujwhQYOl+lR/8SFaXQk 9OIEkVrIweHTUneeEQnn102xRspnRVZohCX1WV81TcnBKlzHSYjmiVEiexj3rWsel lCxFaVns6Qt+X/NeQTYILKL+Jx2VVVvRIFTcdqlso+iis6J63yDjgwcCTtlrv673q e1h3VC7tkxDaYedYS64Odj8It0USPSIzKubkIRl7jEPWu9RC5FSEIOM/rweQd7PNh 9aKgRq2dQvBvtDddiA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Original-Received: from [192.168.31.113] ([213.142.96.136]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MQv8x-1sme6I2IXX-00T70h; Mon, 08 Jul 2024 18:49:53 +0200 Content-Language: en-US In-Reply-To: <86plsgrfvu.fsf@mail.linkov.net> X-Provags-ID: V03:K1:Vtd2K3RtoMN3dOzca5pGWX/9apTNSZTjBq1FZi9g0BM0xU26Evl NpF3ecVxs3F8xEhtZq38FTEzaH0BFjnKxEGulX/cDIuOsFntTn1rsROJWkMbfcJm9rAFUvc qlGUqmUPfuV7jsCLD9hTHhZikhnJWRTd6SRweywgohEZ1M3sUdxoq8YRFcVpk0wr6UYarfW ONeZYxIzRfW5cTlDdSwgg== UI-OutboundReport: notjunk:1;M01:P0:4Eb8diwgEFc=;xa2bCXnvr4d3rw5gQVefMm24ZeG MlWW9RnHgLww7KxA08jKS16K/SC0QFJOCrLioD7OLD7PCotk2i0DNaPfPOFXkdiDeVJ0CbaYa nhyxttjKO6iPvC5jrvQQDDhKuPqayuiazUpJ5yhaI5GjJnxzo5+gKlXcGVn8NX1LRrMq6KbLE 1PlDWLAJTa0J/1CYjoXJ27xnNl3Y83sI9lMhUIbbI4XrbFWpD2XU4RUSGpQ3svc8u60iQByg2 9SreZGJuEx7KZ+eBKrfgQFSXfym3BJlxJD2G1e7HTTo36iijsXz7RG705NdIO4DzV1aap9ezA Xj3DMpx4EBl1zSm2GBZyYw6Qkv6uirKy5wpcHZh9rjePamTHlGbEziFWzI3rWxbRA8nLhwL53 PS1DSmXeZQULEj0Cs+ChOQ8gQrlru825LQIV66zJ4H0p4mp06AHnmFqMwP5B4m+W5upvBGHS7 DW8KdIpsGHk8jpr3Xg6TNbQ/UyPsNU3XWtfB0IQZwEc8vtEXpQmpduG5sIO6ivcjMEMln/jF4 DckCk62juYRtc/QxiKom/zy5H7CeZiV5yXRUtP7kB2C7MtzqQz+9yNopqOEOFuMJRXI6Nm9RS YD3KjWgGcCDNuASldnCYUBiHHTfocfMAOBPsQVwR6/zf5I147YdEfKJZvQ3aKVsJj+Gyp8w/f glqDVrsUis7+xU+NO53j5NbyDm225Pu2wlN+MdvoF2+ywvIFlCadJxmtApXZEopwjr6/i7uER C4qCWjsQ1GrRC4yTwPIVVot9pp1RjLQPtPxI4fOPA+NeC75zMJTkIvJznJWaXM+D/RWn9pgf X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:288600 Archived-At: This is a multi-part message in MIME format. --------------LljYayqEV1Ur0nfWMbfh90n8 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit It took me some time to rewrite the code for this since I found a couple of leaks in the window handling code which I tried to plug now. In a nutshell, the new patch is supposed to fix the following issues. - I introduced a new variable called 'kill-buffer-quit-windows'. If non-nil, it makes killing a buffer call 'quit-restore-window' for each window showing the buffer thus implementing the behavior you want. If nil, killing a buffer works as before apart from the fixes I added below. - The new window parameter type 'quit-restore-prev' that was already in the previous patch handles most scenarios of traversing an entire chain of buffer display operations back to the one that initially created a window or a frame. The only thing it does not handle is to restore the previously selected window for all but the first and last such operation. - As in the previous patch I remove a buffer from all live windows' previous/next buffers and quit-restore(-prev) parameters when killing it. In the present patch I remove it also from dead windows (windows presumably stored in window configurations if they survived at least one collection cycle after their deletion). This should eliminate the necessity to scan these lists separately in the mark phase of the collector. - The old code erroneously has an internal window share the lists of previous/next buffers of a live window whenever that internal window is created by splitting the live window. If the live window is subsequently deleted but the internal window persists, these lists will continue to exist until the internal window is deleted. Since you cannot switch buffers in internal windows, these lists are completely useless while increasing memory overhead. The patch fixes this leak. Dead windows are kept in a weak hash table, adding a window when it is deleted and removing it when restoring it from a saved window configuration. The collector is supposed to remove all dead windows whose configurations have died in its finalization phase. For testing purposes, this hash table is accessible from Lisp via the variable 'window-dead-windows-table'. In earlier versions of Emacs, window configurations were mostly used to handle window excursions and were consequently rather short-lived. Your tab bar code has changed that. Hence we should try to avoid any leaks introduced by long-lived configurations. The hash table based code should also work for the incremental (MPS based) collector once it is capable of handling weak hash tables correctly. The present approach to emulate the above mentioned separate mark steps in Elisp is completely inadequate in this regard since it cannot identify dead windows. Please test the patch intensively and report any problems you see. I used the forms below to test the various features of the patch. martin (display-buffer (get-buffer-create "*foo*")) (display-buffer (get-buffer-create "*bar*")) (setq kill-buffer-quit-windows t) (kill-buffer "*bar*") (kill-buffer "*foo*") (setq foo (current-window-configuration)) (set-window-configuration foo) (setq foo nil) ; To reclaim all dead windows of foo (garbage-collect) (hash-table-count window-dead-windows-table) --------------LljYayqEV1Ur0nfWMbfh90n8 Content-Type: text/x-patch; charset=UTF-8; name="windows-and-buffers.diff" Content-Disposition: attachment; filename="windows-and-buffers.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3Avd2luZG93LmVsIGIvbGlzcC93aW5kb3cuZWwKaW5kZXggOWZj MmU1ZDY1ZTguLjBhODJhYTk5ODlkIDEwMDY0NAotLS0gYS9saXNwL3dpbmRvdy5lbAorKysg Yi9saXNwL3dpbmRvdy5lbApAQCAtNDU0MiwxNCArNDU0MiwxOCBAQCByZWNvcmQtd2luZG93 LWJ1ZmZlcgogICAgICAgKHB1c2gtd2luZG93LWJ1ZmZlci1vbnRvLXByZXYgd2luZG93KQog ICAgICAgKHJ1bi1ob29rcyAnYnVmZmVyLWxpc3QtdXBkYXRlLWhvb2spKSkpCiAKKzs7IEEg dmVyc2lvbiBpbiBDIHRoYXQgaGFuZGxlcyBkZWFkIHdpbmRvd3MgKHRoYXQgcHJlc3VtYWJs eSBhcmUgcGFydCBvZgorOzsgYSBzYXZlZCB3aW5kb3cgY29uZmlndXJhdGlvbikgbGl2ZXMg aW4gd2luZG93LmMgYW5kIGlzIGNhbGxlZAorOzsgd2luZG93X2Rpc2NhcmRfYnVmZmVyX2Zy b21fZGVhZF93aW5kb3cuICBXZSBjb3VsZCBjYWxsIHRoYXQgZnJvbSBoZXJlCis7OyBidXQg aXQgc2VlbXMgbW9yZSBwcmFjdGljYWwgdG8gaGFuZGxlIGxpdmUgd2luZG93cyBlbnRpcmVs eSBpbiBFbGlzcC4KIChkZWZ1biB1bnJlY29yZC13aW5kb3ctYnVmZmVyICgmb3B0aW9uYWwg d2luZG93IGJ1ZmZlcikKICAgIlVucmVjb3JkIEJVRkZFUiBpbiBXSU5ET1cuCi1XSU5ET1cg bXVzdCBiZSBhIGxpdmUgd2luZG93IGFuZCBkZWZhdWx0cyB0byB0aGUgc2VsZWN0ZWQgb25l LgotQlVGRkVSIG11c3QgYmUgYSBsaXZlIGJ1ZmZlciBhbmQgZGVmYXVsdHMgdG8gdGhlIGJ1 ZmZlciBvZgotV0lORE9XLgorV0lORE9XIG11c3QgYmUgYSBsaXZlIHdpbmRvdyBhbmQgZGVm YXVsdHMgdG8gdGhlIHNlbGVjdGVkIG9uZS4gIEJVRkZFUgorbXVzdCBiZSBhIGxpdmUgYnVm ZmVyIGFuZCBkZWZhdWx0cyB0byB0aGUgYnVmZmVyIG9mIFdJTkRPVyAoYWx0aG91Z2gKK3Ro YXQgZGVmYXVsdCBoYXJkbHkgbWFrZXMgYW55IHNlbnNlKS4KIAotTWFrZSBCVUZGRVIgZGlz YXBwZWFyIGZyb20gYWxsIHZhcmlhYmxlcyBtZW50aW9uZWQgYnkgdGhlIG9iamVjdCBvZgot V0lORE9XLiAgVGhpcyBpbmNsdWRlcyB0aGUgYnVmZmVycyBwcmV2aW91c2x5IHNod29uIGlu IFdJTkRPVyBhcyB3ZWxsIGFzCitNYWtlIEJVRkZFUiBkaXNhcHBlYXIgZnJvbSBtb3N0IGNv bXBvbmVudHMgc3BlY2lmaWVkIGJ5IHRoZSBvYmplY3Qgb2YKK1dJTkRPVy4gIFRoaXMgaW5j bHVkZXMgdGhlIGJ1ZmZlcnMgcHJldmlvdXNseSBzaG93biBpbiBXSU5ET1cgYXMgd2VsbCBh cwogYW55IGJ1ZmZlcnMgbWVudGlvbmVkIGJ5IFdJTkRPVydzIGBxdWl0LXJlc3RvcmUnIGFu ZCBgcXVpdC1yZXN0b3JlLXByZXYnCiBwYXJhbWV0ZXJzLiIKICAgKGxldCogKCh3aW5kb3cg KHdpbmRvdy1ub3JtYWxpemUtd2luZG93IHdpbmRvdyB0KSkKQEAgLTQ1NjIsNyArNDU2Niwx MyBAQCB1bnJlY29yZC13aW5kb3ctYnVmZmVyCiAgICAgICAgd2luZG93IChhc3NxLWRlbGV0 ZS1hbGwgYnVmZmVyICh3aW5kb3ctcHJldi1idWZmZXJzIHdpbmRvdykpKQogICAgICAgKHNl dC13aW5kb3ctbmV4dC1idWZmZXJzCiAgICAgICAgd2luZG93IChkZWxxIGJ1ZmZlciAod2lu ZG93LW5leHQtYnVmZmVycyB3aW5kb3cpKSkKLQorICAgICAgOzsgSWYgdGhlIGZvdXJ0aCBl bGVtZW50cyBvZiB0aGUgJ3F1aXQtcmVzdG9yZScgb3IKKyAgICAgIDs7ICdxdWl0LXJlc3Rv cmUtcHJldicgcGFyYW1ldGVycyBlcXVhbCBCVUZGRVIsIHRoZXNlIHBhcmFtZXRlcnMKKyAg ICAgIDs7IGJlY29tZSB1c2VsZXNzIC0gaW4gJ3F1aXQtcmVzdG9yZS13aW5kb3cnIHRoZSBm b3VydGggZWxlbWVudAorICAgICAgOzsgbXVzdCBlcXVhbCB0aGUgYnVmZmVyIG9mIFdJTkRP VyBpbiBvcmRlciB0byB1c2UgdGhhdCBwYXJhbWV0ZXIuCisgICAgICA7OyBJZiBCVUZGRVIg aXMgbWVudGlvbmVkIGluIHRoZSBzZWNvbmQgZWxlbWVudCBvZiB0aGUgcGFyYW1ldGVyLAor ICAgICAgOzsgJ3F1aXQtcmVzdG9yZS13aW5kb3cnIGNhbm5vdCBwb3NzaWJseSBzaG93IEJV RkZFUiBpbnN0ZWFkOyBzbworICAgICAgOzsgdGhpcyBwYXJhbWV0ZXIgYmVjb21lcyB1c2Vs ZXNzIHRvby4KICAgICAgICh3aGVuIChvciAoZXEgYnVmZmVyIChudGggMyBxdWl0LXJlc3Rv cmUtcHJldikpCiAJCShhbmQgKGxpc3RwIChzZXRxIHF1YWQgKG50aCAxIHF1aXQtcmVzdG9y ZS1wcmV2KSkpCiAJCSAgICAgKGVxIChjYXIgcXVhZCkgYnVmZmVyKSkpCkBAIC00NTcyLDcg KzQ1ODIsOCBAQCB1bnJlY29yZC13aW5kb3ctYnVmZmVyCiAJCShhbmQgKGxpc3RwIChzZXRx IHF1YWQgKG50aCAxIHF1aXQtcmVzdG9yZSkpKQogCQkgICAgIChlcSAoY2FyIHF1YWQpIGJ1 ZmZlcikpKQogCShzZXQtd2luZG93LXBhcmFtZXRlcgotCSB3aW5kb3cgJ3F1aXQtcmVzdG9y ZSAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1aXQtcmVzdG9yZS1wcmV2KSkpKSkpCisJ IHdpbmRvdyAncXVpdC1yZXN0b3JlICh3aW5kb3ctcGFyYW1ldGVyIHdpbmRvdyAncXVpdC1y ZXN0b3JlLXByZXYpKQorCShzZXQtd2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1aXQtcmVz dG9yZS1wcmV2IG5pbCkpKSkpCiAKIChkZWZ1biBzZXQtd2luZG93LWJ1ZmZlci1zdGFydC1h bmQtcG9pbnQgKHdpbmRvdyBidWZmZXIgJm9wdGlvbmFsIHN0YXJ0IHBvaW50KQogICAiU2V0 IFdJTkRPVydzIGJ1ZmZlciB0byBCVUZGRVIuCkBAIC01MDkxLDYgKzUxMDIsMTggQEAgcHJl dmlvdXMtYnVmZmVyCiAgICAgICAgICAgICAgICAgIChub3QgKG9yIGV4ZWN1dGluZy1rYmQt bWFjcm8gbm9uaW50ZXJhY3RpdmUpKSkKICAgICAgICAgKHVzZXItZXJyb3IgIk5vIHByZXZp b3VzIGJ1ZmZlciIpKSkpKSkKIAorKGRlZmN1c3RvbSBraWxsLWJ1ZmZlci1xdWl0LXdpbmRv d3MgbmlsCisgICJOb24tbmlsIG1lYW5zIGtpbGxpbmcgYnVmZmVycyBzaGFsbCBxdWl0IHdp bmRvd3MuCitJZiB0aGlzIGlzIG5pbCwga2lsbGluZyBhIGJ1ZmZlciBtYXkgZGVsZXRlIGRl ZGljYXRlZCB3aW5kb3dzIG9ubHkuICBJZgordGhpcyBpcyBub24tbmlsLCBga2lsbC1idWZm ZXInIChhbmQgYHJlcGxhY2UtYnVmZmVyLWluLXdpbmRvd3MnIGluCitjb25zZXF1ZW5jZSkg aGF2ZSBgcXVpdC1yZXN0b3JlLXdpbmRvdycgZGVhbCB3aXRoIGFueSB3aW5kb3cgc2hvd2lu ZyB0aGUKK2J1ZmZlciB0byBiZSBraWxsZWQgd2hpY2ggbWF5IGRlbGV0ZSB0aGUgd2luZG93 IGlmIGl0J3Mgbm90IGRlZGljYXRlZCB0bworaXRzIGJ1ZmZlci4gIEFsc28sIGBkZWxldGUt d2luZG93cy1vbicgd2lsbCB1c2UgYHF1aXQtcmVzdG9yZS13aW5kb3cnIGFzCitmYWxsYmFj ayB3aGVuIGEgd2luZG93IGNhbm5vdCBiZSBkZWxldGVkIG90aGVyd2lzZS4iCisgIDp0eXBl ICdib29sZWFuCisgIDp2ZXJzaW9uICIzMS4xIgorICA6Z3JvdXAgJ3dpbmRvd3MpCisKIChk ZWZ1biBkZWxldGUtd2luZG93cy1vbiAoJm9wdGlvbmFsIGJ1ZmZlci1vci1uYW1lIGZyYW1l KQogICAiRGVsZXRlIGFsbCB3aW5kb3dzIHNob3dpbmcgQlVGRkVSLU9SLU5BTUUuCiBCVUZG RVItT1ItTkFNRSBtYXkgYmUgYSBidWZmZXIgb3IgdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcg YnVmZmVyCkBAIC01MTI4LDggKzUxNTEsMTAgQEAgZGVsZXRlLXdpbmRvd3Mtb24KIHRlcm1p bmFsLCBkZWxldGUgdGhhdCBmcmFtZS4gIE90aGVyd2lzZSwgZG8gbm90IGRlbGV0ZSBhIGZy YW1lJ3Mgcm9vdAogd2luZG93IGlmIGl0IHNob3dzIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5 IEJVRkZFUi1PUi1OQU1FIGFuZCBkbyBub3QKIGRlbGV0ZSBhbnkgZnJhbWUncyBtYWluIHdp bmRvdyBzaG93aW5nIHRoYXQgYnVmZmVyIGVpdGhlci4gIFJhdGhlciwgaW4KLWFueSBzdWNo IGNhc2UsIGNhbGwgYHF1aXQtcmVzdG9yZS13aW5kb3cnIHRvIHNob3cgYW5vdGhlciBidWZm ZXIgaW4gdGhhdAotd2luZG93IGFuZCBtYWtlIHN1cmUgdGhlIHdpbmRvdyBpcyBubyBtb3Jl IGRlZGljYXRlZCB0byBpdHMgYnVmZmVyLgorYW55IHN1Y2ggY2FzZSwgY2FsbCBlaXRoZXIg YHF1aXQtcmVzdG9yZS13aW5kb3cnIChwcm92aWRlZAorYGtpbGwtYnVmZmVyLXF1aXQtd2lu ZG93cycgaXMgbm9uLW5pbCkgb3IgYHN3aXRjaC10by1wcmV2LWJ1ZmZlcicgdG8KK3Nob3cg YW5vdGhlciBidWZmZXIgaW4gdGhhdCB3aW5kb3cgYW5kIG1ha2Ugc3VyZSB0aGUgd2luZG93 IGlzIG5vIG1vcmUKK2RlZGljYXRlZCB0byBpdHMgYnVmZmVyLgogCiBJZiB0aGUgYnVmZmVy IHNwZWNpZmllZCBieSBCVUZGRVItT1ItTkFNRSBpcyBzaG93biBpbiBhIG1pbmlidWZmZXIK IHdpbmRvdywgZG8gbm90aGluZyBmb3IgdGhhdCB3aW5kb3cuICBGb3IgYW55IHdpbmRvdyB0 aGF0IGRvZXMgbm90IHNob3cKQEAgLTUxNjYsOSArNTE5MSwxOCBAQCBkZWxldGUtd2luZG93 cy1vbgogCSAgICAgKChlcSBkZWxldGFibGUgdCkKIAkgICAgICA7OyBEZWxldGUgd2luZG93 LgogCSAgICAgIChkZWxldGUtd2luZG93IHdpbmRvdykpCisJICAgICAoa2lsbC1idWZmZXIt cXVpdC13aW5kb3dzCisJICAgICAgKHF1aXQtcmVzdG9yZS13aW5kb3cgd2luZG93ICdidXJ5 KQorCSAgICAgICh3aGVuICh3aW5kb3ctbGl2ZS1wIHdpbmRvdykKKwkJOzsgVW5yZWNvcmQg QlVGRkVSIGluIHRoaXMgd2luZG93LgorCQkodW5yZWNvcmQtd2luZG93LWJ1ZmZlciB3aW5k b3cgYnVmZmVyKSkpCiAJICAgICAodAotCSAgICAgICh3aGVuIChlcSAod2luZG93LWJ1ZmZl ciB3aW5kb3cpIGJ1ZmZlcikKLQkJKHF1aXQtcmVzdG9yZS13aW5kb3cgd2luZG93ICdidXJ5 KSkKKwkgICAgICA7OyBJbiB3aW5kb3cgc3dpdGNoIHRvIHByZXZpb3VzIGJ1ZmZlci4KKwkg ICAgICAoc2V0LXdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cgbmlsKQorCSAgICAgIChzd2l0 Y2gtdG8tcHJldi1idWZmZXIgd2luZG93ICdidXJ5KQorCSAgICAgIDs7IFJlc3RvcmUgdGhl IGRlZGljYXRlZCAnc2lkZScgZmxhZy4KKwkgICAgICAod2hlbiAoZXEgZGVkaWNhdGVkICdz aWRlKQorICAgICAgICAgICAgICAgIChzZXQtd2luZG93LWRlZGljYXRlZC1wIHdpbmRvdyAn c2lkZSkpCiAJICAgICAgKHdoZW4gKHdpbmRvdy1saXZlLXAgd2luZG93KQogCQk7OyBVbnJl Y29yZCBCVUZGRVIgaW4gdGhpcyB3aW5kb3cuCiAJCSh1bnJlY29yZC13aW5kb3ctYnVmZmVy IHdpbmRvdyBidWZmZXIpKSkpKQpAQCAtNTE3NywyOSArNTIxMSw0NiBAQCBkZWxldGUtd2lu ZG93cy1vbgogCiAoZGVmdW4gcmVwbGFjZS1idWZmZXItaW4td2luZG93cyAoJm9wdGlvbmFs IGJ1ZmZlci1vci1uYW1lKQogICAiUmVwbGFjZSBCVUZGRVItT1ItTkFNRSB3aXRoIHNvbWUg b3RoZXIgYnVmZmVyIGluIGFsbCB3aW5kb3dzIHNob3dpbmcgaXQuCi1CVUZGRVItT1ItTkFN RSBtYXkgYmUgYSBidWZmZXIgb3IgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYnVmZmVyCi1h bmQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLiAgTWluaWJ1ZmZlciB3aW5kb3dz IGFyZSBub3QKLWNvbnNpZGVyZWQuCi0KLVdpdGggdGhlIGV4Y2VwdGlvbiBvZiBzaWRlIHdp bmRvd3MsIHdoZW4gYSB3aW5kb3cgc2hvd2luZyBCVUZGRVItT1ItTkFNRQotaXMgZGVkaWNh dGVkLCB0aGF0IHdpbmRvdyBpcyBkZWxldGVkLiAgSWYgdGhhdCB3aW5kb3cgaXMgdGhlIG9u bHkgd2luZG93Ci1vbiBpdHMgZnJhbWUsIHRoZSBmcmFtZSBpcyBkZWxldGVkIHRvbyB3aGVu IHRoZXJlIGFyZSBvdGhlciBmcmFtZXMgbGVmdC4KLUlmIHRoZXJlIGFyZSBubyBvdGhlciBm cmFtZXMgbGVmdCwgc29tZSBvdGhlciBidWZmZXIgaXMgZGlzcGxheWVkIGluIHRoYXQKK0JV RkZFUi1PUi1OQU1FIG1heSBiZSBhIGJ1ZmZlciBvciB0aGUgbmFtZSBvZiBhbiBleGlzdGlu ZyBidWZmZXIgYW5kCitkZWZhdWx0cyB0byB0aGUgY3VycmVudCBidWZmZXIuICBNaW5pYnVm ZmVyIHdpbmRvd3MgYXJlIG5vdCBjb25zaWRlcmVkLgorCitJZiB0aGUgb3B0aW9uIGBraWxs LWJ1ZmZlci1xdWl0LXdpbmRvd3MnIGlzIG5pbCwgYmVoYXZlIGFzIGZvbGxvd3M6IFdpdGgK K3RoZSBleGNlcHRpb24gb2Ygc2lkZSB3aW5kb3dzLCB3aGVuIGEgd2luZG93IHNob3dpbmcg QlVGRkVSLU9SLU5BTUUgaXMKK2RlZGljYXRlZCwgZGVsZXRlIHRoYXQgd2luZG93LiAgSWYg dGhhdCB3aW5kb3cgaXMgdGhlIG9ubHkgd2luZG93IG9uIGl0cworZnJhbWUsIGRlbGV0ZSBp dHMgZnJhbWUgd2hlbiB0aGVyZSBhcmUgb3RoZXIgZnJhbWVzIGxlZnQuICBJbiBhbnkgb3Ro ZXIKK2Nhc2UsIGNhbGwgYHN3aXRjaC10by1wcmV2LWJ1ZmZlcicgdG8gZGlzcGxheSBzb21l IG90aGVyIGJ1ZmZlciBpbiB0aGF0CiB3aW5kb3cuCiAKLVRoaXMgZnVuY3Rpb24gcmVtb3Zl cyB0aGUgYnVmZmVyIGRlbm90ZWQgYnkgQlVGRkVSLU9SLU5BTUUgZnJvbSBhbGwKLXdpbmRv dy1sb2NhbCBidWZmZXIgbGlzdHMgYW5kIHJlbW92ZXMgYW55IGBxdWl0LXJlc3RvcmUnIG9y Ci1gcXVpdC1yZXN0b3JlLXByZXYnIHBhcmFtZXRlcnMgbWVudGlvbmluZyBpdC4iCitJZiBg a2lsbC1idWZmZXItcXVpdC13aW5kb3dzJyBpcyBub24tbmlsLCBjYWxsIGBxdWl0LXJlc3Rv cmUtd2luZG93JyBmb3IKK2FueSB3aW5kb3cgc2hvd2luZyBCVUZGRVItT1ItTkFNRSB3aXRo IHRoZSBhcmd1bWVudCBCVVJZLU9SLUtJTEwgc2V0IHRvCitga2lsbGluZycgdG8gYXZvaWQg dGhhdCB0aGUgbGF0dGVyIGtpbGxzIHRoZSBidWZmZXIgcHJlbWF0dXJlbHkuCisKK0luIGVp dGhlciBjYXNlLCByZW1vdmUgdGhlIGJ1ZmZlciBkZW5vdGVkIGJ5IEJVRkZFUi1PUi1OQU1F IGZyb20gdGhlCitsaXN0cyBvZiBwcmV2aW91cyBhbmQgbmV4dCBidWZmZXJzIG9mIGFsbCB3 aW5kb3dzIGFuZCByZW1vdmUgYW55CitgcXVpdC1yZXN0b3JlJyBvciBgcXVpdC1yZXN0b3Jl LXByZXYnIHBhcmFtZXRlcnMgbWVudGlvbmluZyBpdC4KKworVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgYnkgYGtpbGwtYnVmZmVyJyB3aGljaCBraWxscyB0aGUgYnVmZmVyCitzcGVjaWZp ZWQgYnkgYGJ1ZmZlci1vci1uYW1lJyBhZnRlcndhcmRzLiAgSXQgbmV2ZXIga2lsbHMgYSBi dWZmZXIgYnkKK2l0c2VsZi4iCiAgIChpbnRlcmFjdGl2ZSAiYkJ1ZmZlciB0byByZXBsYWNl OiAiKQogICAobGV0ICgoYnVmZmVyICh3aW5kb3ctbm9ybWFsaXplLWJ1ZmZlciBidWZmZXIt b3ItbmFtZSkpKQotICAgIDs7IFNjYW4gYWxsIHdpbmRvd3MuICBXZSBoYXZlIHRvIHVucmVj b3JkIEJVRkZFUiBpbiB0aG9zZSBub3QKLSAgICA7OyBzaG93aW5nIGl0LgorICAgIDs7IFNj YW4gYWxsIHdpbmRvd3MuICBXZSBoYXZlIHRvIHVucmVjb3JkIEJVRkZFUi1PUi1OQU1FIGlu IHRob3NlCisgICAgOzsgbm90IHNob3dpbmcgaXQuCiAgICAgKGRvbGlzdCAod2luZG93ICh3 aW5kb3ctbGlzdC0xIG5pbCBuaWwgdCkpCiAgICAgICAod2hlbiAoZXEgKHdpbmRvdy1idWZm ZXIgd2luZG93KSBidWZmZXIpCi0JKHF1aXQtcmVzdG9yZS13aW5kb3cgd2luZG93KSkKLSAg ICAgICh3aGVuICh3aW5kb3ctbGl2ZS1wIHdpbmRvdykKLQk7OyBVbnJlY29yZCBCVUZGRVIg aW4gdGhpcyB3aW5kb3cuCi0JKHVucmVjb3JkLXdpbmRvdy1idWZmZXIgd2luZG93IGJ1ZmZl cikpKSkpCisJKGlmIGtpbGwtYnVmZmVyLXF1aXQtd2luZG93cworCSAgICAocXVpdC1yZXN0 b3JlLXdpbmRvdyB3aW5kb3cgJ2tpbGxpbmcpCisJICAobGV0ICgoZGVkaWNhdGVkLXNpZGUg KGVxICh3aW5kb3ctZGVkaWNhdGVkLXAgd2luZG93KSAnc2lkZSkpKQorICAgICAgICAgICAg KHdoZW4gKG9yIGRlZGljYXRlZC1zaWRlIChub3QgKHdpbmRvdy0tZGVsZXRlIHdpbmRvdyB0 ICdraWxsKSkpCisJICAgICAgOzsgU3dpdGNoIHRvIGFub3RoZXIgYnVmZmVyIGluIHRoYXQg d2luZG93LgorCSAgICAgIChzZXQtd2luZG93LWRlZGljYXRlZC1wIHdpbmRvdyBuaWwpCisJ ICAgICAgKGlmIChzd2l0Y2gtdG8tcHJldi1idWZmZXIgd2luZG93ICdraWxsKQorICAgICAg ICAgICAgICAgICAgKGFuZCBkZWRpY2F0ZWQtc2lkZSAoc2V0LXdpbmRvdy1kZWRpY2F0ZWQt cCB3aW5kb3cgJ3NpZGUpKQorCQkod2luZG93LS1kZWxldGUgd2luZG93IG5pbCAna2lsbCkp KSkpKQorCisJKHdoZW4gKHdpbmRvdy1saXZlLXAgd2luZG93KQorCSAgOzsgVW5yZWNvcmQg QlVGRkVSIGluIHRoaXMgd2luZG93LgorCSAgKHVucmVjb3JkLXdpbmRvdy1idWZmZXIgd2lu ZG93IGJ1ZmZlcikpKSkpCiAKIChkZWZjdXN0b20gcXVpdC13aW5kb3ctaG9vayBuaWwKICAg Ikhvb2sgcnVuIGJlZm9yZSBwZXJmb3JtaW5nIGFueSBvdGhlciBhY3Rpb25zIGluIHRoZSBg cXVpdC13aW5kb3cnIGNvbW1hbmQuIgpAQCAtNTI0OSw3ICs1MzAwLDE0IEBAIHF1aXQtcmVz dG9yZS13aW5kb3cKICAgbW9zdCByZWxpYWJsZSByZW1lZHkgdG8gbm90IGhhdmUgYHN3aXRj aC10by1wcmV2LWJ1ZmZlcicgc3dpdGNoCiAgIHRvIHRoaXMgYnVmZmVyIGFnYWluIHdpdGhv dXQga2lsbGluZyB0aGUgYnVmZmVyLgogCi1ga2lsbCcgbWVhbnMgdG8ga2lsbCBXSU5ET1cn cyBidWZmZXIuIgorYGtpbGwnIG1lYW5zIHRvIGtpbGwgV0lORE9XJ3MgYnVmZmVyLgorCitg a2lsbGluZycgaXMgbGlrZSBga2lsbCcgYnV0IG1lYW5zIHRoYXQgV0lORE9XJ3MgYnVmZmVy IHdpbGwgZ2V0IGtpbGxlZAorZWxzZXdoZXJlLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IGBy ZXBsYWNlLWJ1ZmZlci1pbi13aW5kb3dzJyBhbmQKK2BxdWl0LXdpbmRvd3Mtb24nLgorCitg YnVyeWluZycgaXMgbGlrZSBgYnVyeScgYnV0IG1lYW5zIHRoYXQgV0lORE9XJ3MgYnVmZmVy IHdpbGwgZ2V0IGJ1cmllZAorZWxzZXdoZXJlLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IGBx dWl0LXdpbmRvd3Mtb24nLiIKICAgKHNldHEgd2luZG93ICh3aW5kb3ctbm9ybWFsaXplLXdp bmRvdyB3aW5kb3cgdCkpCiAgIChsZXQqICgoYnVmZmVyICh3aW5kb3ctYnVmZmVyIHdpbmRv dykpCiAJIChxdWl0LXJlc3RvcmUgKHdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJl c3RvcmUpKQpAQCAtNTI2NSwzMiArNTMyMywzMCBAQCBxdWl0LXJlc3RvcmUtd2luZG93CiAg ICAgKGNvbmQKICAgICAgOzsgRmlyc3QgdHJ5IHRvIGRlbGV0ZSBkZWRpY2F0ZWQgd2luZG93 cyB0aGF0IGFyZSBub3Qgc2lkZSB3aW5kb3dzLgogICAgICAoKGFuZCBkZWRpY2F0ZWQgKG5v dCAoZXEgZGVkaWNhdGVkICdzaWRlKSkKLSAgICAgICAgICAgKHdpbmRvdy0tZGVsZXRlIHdp bmRvdyAnZGVkaWNhdGVkIChlcSBidXJ5LW9yLWtpbGwgJ2tpbGwpKSkKKyAgICAgICAgICAg KHdpbmRvdy0tZGVsZXRlCisJICAgIHdpbmRvdyAnZGVkaWNhdGVkIChtZW1xIGJ1cnktb3It a2lsbCAnKGtpbGwga2lsbGluZykpKSkKICAgICAgIDs7IElmIHRoZSBwcmV2aW91c2x5IHNl bGVjdGVkIHdpbmRvdyBpcyBzdGlsbCBhbGl2ZSwgc2VsZWN0IGl0LgogICAgICAgKHdpbmRv dy0tcXVpdC1yZXN0b3JlLXNlbGVjdC13aW5kb3cgcXVpdC1yZXN0b3JlLTIpKQogICAgICAo KGFuZCAobm90IHByZXYtYnVmZmVyKQogCSAgIChlcSAobnRoIDEgcXVpdC1yZXN0b3JlKSAn dGFiKQotCSAgIChlcSAobnRoIDMgcXVpdC1yZXN0b3JlKSBidWZmZXIpKQorCSAgIChlcSAo bnRoIDMgcXVpdC1yZXN0b3JlKSBidWZmZXIpCisJICAgKDwgKHNlcS1jb3VudCAobGFtYmRh ICh3KSAod2luZG93LXBhcmFtZXRlciB3ICdxdWl0LXJlc3RvcmUpKQorCQkgICAgICAgICAo d2luZG93LWxpc3QtMSBuaWwgJ25vbWluaSkpCisgICAgICAgICAgICAgIDIpKQogICAgICAg KHRhYi1iYXItY2xvc2UtdGFiKQogICAgICAgOzsgSWYgdGhlIHByZXZpb3VzbHkgc2VsZWN0 ZWQgd2luZG93IGlzIHN0aWxsIGFsaXZlLCBzZWxlY3QgaXQuCiAgICAgICAod2luZG93LS1x dWl0LXJlc3RvcmUtc2VsZWN0LXdpbmRvdyBxdWl0LXJlc3RvcmUtMikpCiAgICAgICgoYW5k IChub3QgcHJldi1idWZmZXIpCi0JICAgKG9yIChhbmQgKG9yIChlcSAobnRoIDEgcXVpdC1y ZXN0b3JlKSAnZnJhbWUpCi0JCQkoYW5kIChlcSAobnRoIDEgcXVpdC1yZXN0b3JlKSAnd2lu ZG93KQotCQkJICAgICA7OyBJZiB0aGUgd2luZG93IGhhcyBiZWVuIGNyZWF0ZWQgb24gYW4K LQkJCSAgICAgOzsgZXhpc3RpbmcgZnJhbWUgYW5kIGVuZGVkIHVwIGFzIHRoZSBzb2xlCi0J CQkgICAgIDs7IHdpbmRvdyBvbiB0aGF0IGZyYW1lLCBkbyBub3QgZGVsZXRlIGl0Ci0JCQkg ICAgIDs7IChCdWcjMTI3NjQpLgotCQkJICAgICAobm90IChlcSB3aW5kb3cgKGZyYW1lLXJv b3Qtd2luZG93IHdpbmRvdykpKSkpCi0JCSAgICAoZXEgKG50aCAzIHF1aXQtcmVzdG9yZSkg YnVmZmVyKSkKLQkgICAgICAgKGFuZCAob3IgKGVxIChudGggMSBxdWl0LXJlc3RvcmUtcHJl dikgJ2ZyYW1lKQotCQkJKGFuZCAoZXEgKG50aCAxIHF1aXQtcmVzdG9yZS1wcmV2KSAnd2lu ZG93KQotCQkJICAgICAobm90IChlcSB3aW5kb3cgKGZyYW1lLXJvb3Qtd2luZG93IHdpbmRv dykpKSkpCi0JCSAgICAoZXEgKG50aCAzIHF1aXQtcmVzdG9yZS1wcmV2KSBidWZmZXIpCi0J CSAgICA7OyBVc2Ugc2VsZWN0ZWQgd2luZG93IGZyb20gcXVpdC1yZXN0b3JlLXByZXYuCi0J CSAgICAoc2V0cSBxdWl0LXJlc3RvcmUtMiBxdWl0LXJlc3RvcmUtcHJldi0yKSkpCisJICAg KG9yIChlcSAobnRoIDEgcXVpdC1yZXN0b3JlKSAnZnJhbWUpCisJICAgICAgIChhbmQgKGVx IChudGggMSBxdWl0LXJlc3RvcmUpICd3aW5kb3cpCisJCSAgICA7OyBJZiB0aGUgd2luZG93 IGhhcyBiZWVuIGNyZWF0ZWQgb24gYW4gZXhpc3RpbmcKKwkJICAgIDs7IGZyYW1lIGFuZCBl bmRlZCB1cCBhcyB0aGUgc29sZSB3aW5kb3cgb24gdGhhdAorCQkgICAgOzsgZnJhbWUsIGRv IG5vdCBkZWxldGUgaXQgKEJ1ZyMxMjc2NCkuCisJCSAgICAobm90IChlcSB3aW5kb3cgKGZy YW1lLXJvb3Qtd2luZG93IHdpbmRvdykpKSkpCisJICAgKGVxIChudGggMyBxdWl0LXJlc3Rv cmUpIGJ1ZmZlcikKIAkgICA7OyBEZWxldGUgV0lORE9XIGlmIHBvc3NpYmxlLgotCSAgICh3 aW5kb3ctLWRlbGV0ZSB3aW5kb3cgbmlsIChlcSBidXJ5LW9yLWtpbGwgJ2tpbGwpKSkKKwkg ICAod2luZG93LS1kZWxldGUKKwkgICAgd2luZG93IG5pbCAobWVtcSBidXJ5LW9yLWtpbGwg JyhraWxsIGtpbGxpbmcpKSkpCiAgICAgICA7OyBJZiB0aGUgcHJldmlvdXNseSBzZWxlY3Rl ZCB3aW5kb3cgaXMgc3RpbGwgYWxpdmUsIHNlbGVjdCBpdC4KICAgICAgICh3aW5kb3ctLXF1 aXQtcmVzdG9yZS1zZWxlY3Qtd2luZG93IHF1aXQtcmVzdG9yZS0yKSkKICAgICAgKChvciAo YW5kIChsaXN0cCAoc2V0cSBxdWFkIChudGggMSBxdWl0LXJlc3RvcmUtcHJldikpKQpAQCAt NTMyOCw3ICs1Mzg0LDcgQEAgcXVpdC1yZXN0b3JlLXdpbmRvdwogICAgICAgOzsgRGVhbCB3 aXRoIHRoZSBidWZmZXIgd2UganVzdCByZW1vdmVkIGZyb20gV0lORE9XLgogICAgICAgKHNl dHEgZW50cnkgKGFuZCAoZXEgYnVyeS1vci1raWxsICdhcHBlbmQpCiAJCSAgICAgICAoYXNz cSBidWZmZXIgKHdpbmRvdy1wcmV2LWJ1ZmZlcnMgd2luZG93KSkpKQotICAgICAgKHdoZW4g YnVyeS1vci1raWxsCisgICAgICAod2hlbiAobWVtcSBidXJ5LW9yLWtpbGwgJyhidXJ5IGJ1 cnlpbmcga2lsbCBraWxsaW5nKSkKIAk7OyBSZW1vdmUgYnVmZmVyIGZyb20gV0lORE9XJ3Mg cHJldmlvdXMgYW5kIG5leHQgYnVmZmVycy4KIAkoc2V0LXdpbmRvdy1wcmV2LWJ1ZmZlcnMK IAkgd2luZG93IChhc3NxLWRlbGV0ZS1hbGwgYnVmZmVyICh3aW5kb3ctcHJldi1idWZmZXJz IHdpbmRvdykpKQpAQCAtNTM1OSwxMyArNTQxNSwxNCBAQCBxdWl0LXJlc3RvcmUtd2luZG93 CiAgICAgICAoaWYgKHN3aXRjaC10by1wcmV2LWJ1ZmZlciB3aW5kb3cgYnVyeS1vci1raWxs KQogICAgICAgICAgICh3aGVuIChlcSBkZWRpY2F0ZWQgJ3NpZGUpCiAgICAgICAgICAgICAo c2V0LXdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cgJ3NpZGUpKQotICAgICAgICAod2luZG93 LS1kZWxldGUgd2luZG93IG5pbCAoZXEgYnVyeS1vci1raWxsICdraWxsKSkpKSkKKyAgICAg ICAgKHdpbmRvdy0tZGVsZXRlCisJIHdpbmRvdyBuaWwgKG1lbXEgYnVyeS1vci1raWxsICco a2lsbCBraWxsaW5nKSkpKSkpCiAgICAgOzsgRGVhbCB3aXRoIHRoZSBidWZmZXIuCiAgICAg KGNvbmQKICAgICAgKChub3QgKGJ1ZmZlci1saXZlLXAgYnVmZmVyKSkpCiAgICAgICgoZXEg YnVyeS1vci1raWxsICdraWxsKQogICAgICAgKGtpbGwtYnVmZmVyIGJ1ZmZlcikpCi0gICAg IChidXJ5LW9yLWtpbGwKKyAgICAgKChlcSBidXJ5LW9yLWtpbGwgJ2J1cnkpCiAgICAgICAo YnVyeS1idWZmZXItaW50ZXJuYWwgYnVmZmVyKSkpKSkKIAogKGRlZnVuIHF1aXQtd2luZG93 ICgmb3B0aW9uYWwga2lsbCB3aW5kb3cpCkBAIC01NDA2LDExICs1NDYzLDE4IEBAIHF1aXQt d2luZG93cy1vbgogCShmcmFtZXMgKGNvbmQgKChub3QgZnJhbWUpIHQpICgoZXEgZnJhbWUg dCkgbmlsKSAodCBmcmFtZSkpKSkKICAgICAoZG9saXN0ICh3aW5kb3cgKHdpbmRvdy1saXN0 LTEgbmlsIG5pbCBmcmFtZXMpKQogICAgICAgKHdoZW4gKGVxICh3aW5kb3ctYnVmZmVyIHdp bmRvdykgYnVmZmVyKQotCShxdWl0LXJlc3RvcmUtd2luZG93IHdpbmRvdyBraWxsKSkKKwko cXVpdC1yZXN0b3JlLXdpbmRvdworCSB3aW5kb3cgKGlmIGtpbGwgJ2tpbGxpbmcgJ2J1cnlp bmcpKSkKIAogICAgICAgKHdoZW4gKHdpbmRvdy1saXZlLXAgd2luZG93KQogCTs7IFVucmVj b3JkIEJVRkZFUiBpbiB0aGlzIHdpbmRvdy4KLQkodW5yZWNvcmQtd2luZG93LWJ1ZmZlciB3 aW5kb3cgYnVmZmVyKSkpKSkKKwkodW5yZWNvcmQtd2luZG93LWJ1ZmZlciB3aW5kb3cgYnVm ZmVyKSkpCisKKyAgICA7OyBEZWFsIHdpdGggQlVGRkVSLU9SLU5BTUUuCisgICAgKGNvbmQK KyAgICAgKChub3QgKGJ1ZmZlci1saXZlLXAgYnVmZmVyKSkpCisgICAgIChraWxsIChraWxs LWJ1ZmZlciBidWZmZXIpKQorICAgICAodCAoYnVyeS1idWZmZXItaW50ZXJuYWwgYnVmZmVy KSkpKSkKIAwKIChkZWZ1biB3aW5kb3ctLWNvbWJpbmF0aW9uLXJlc2l6YWJsZSAocGFyZW50 ICZvcHRpb25hbCBob3Jpem9udGFsKQogICAiUmV0dXJuIG51bWJlciBvZiBwaXhlbHMgcmVj b3ZlcmFibGUgZnJvbSBoZWlnaHQgb2Ygd2luZG93IFBBUkVOVC4KQEAgLTY3MjMsOSArNjc4 NywxMSBAQCBkaXNwbGF5LWJ1ZmZlci1yZWNvcmQtd2luZG93CiAKIElmIFRZUEUgaXMgYHJl dXNlJywgQlVGRkVSIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgY3VycmVudGx5IGRpc3Bs YXllZAogaW4gV0lORE9XLCBhbmQgV0lORE9XIGFscmVhZHkgaGFzIGEgYHF1aXQtcmVzdG9y ZScgcGFyYW1ldGVyLCBpbnN0YWxsIG9yCi11cGRhdGUgYSBgcXVpdC1yZXN0b3JlLXByZXYn IHBhcmFtZXRlciBmb3IgdGhpcyB3aW5kb3cgdGhhdCBhbGxvd3MgdG8KLXF1aXQgV0lORE9X IGluIGEgc2ltaWxhciBmYXNoaW9uIGJ1dCByZW1lbWJlcnMgdGhlIHZlcnkgZmlyc3QgaW4g YQotc2VyaWVzIG9mIGJ1ZmZlciBkaXNwbGF5IG9wZXJhdGlvbnMgZm9yIHRoaXMgd2luZG93 LiIKK3VwZGF0ZSBhIGBxdWl0LXJlc3RvcmUtcHJldicgcGFyYW1ldGVyIGZvciB0aGlzIHdp bmRvdy4gIFRoaXMgYWxsb3dzIGZvcgorcXVpdHRpbmcgV0lORE9XIGluIGEgc2ltaWxhciBm YXNoaW9uIGJ1dCBhbHNvIGtlZXBzIHRoZSB2ZXJ5IGZpcnN0CitgcXVpdC1yZXN0b3JlJyBw YXJhbWV0ZXIgc3RvcmVkIGZvciB0aGlzIHdpbmRvdyBhcm91bmQuICBDb25zZXF1ZW50bHks CitXSU5ET1cgKG9yIGl0cyBmcmFtZSkgY2FuIGJlIGV2ZW50dWFsbHkgZGVsZXRlZCBieSBg cXVpdC1yZXN0b3JlLXdpZG93JworaWYgdGhhdCBwYXJhbWV0ZXIncyBmb3VydGggZWxlbWVu dCBlcXVhbHMgV0lORE9XJ3MgYnVmZmVyLiIKICAgKGNvbmQKICAgICgoZXEgdHlwZSAncmV1 c2UpCiAgICAgKGlmIChlcSAod2luZG93LWJ1ZmZlciB3aW5kb3cpIGJ1ZmZlcikKZGlmZiAt LWdpdCBhL3NyYy9hbGxvYy5jIGIvc3JjL2FsbG9jLmMKaW5kZXggNjY2Zjc3YmZjZTEuLmI5 NTU2NTFmNWMwIDEwMDY0NAotLS0gYS9zcmMvYWxsb2MuYworKysgYi9zcmMvYWxsb2MuYwpA QCAtNjk5OCwzMyArNjk5OCw2IEBAIG1hcmtfZmFjZV9jYWNoZSAoc3RydWN0IGZhY2VfY2Fj aGUgKmMpCiAgICAgfQogfQogCi0vKiBSZW1vdmUga2lsbGVkIGJ1ZmZlcnMgb3IgaXRlbXMg d2hvc2UgY2FyIGlzIGEga2lsbGVkIGJ1ZmZlciBmcm9tCi0gICBMSVNULCBhbmQgbWFyayBv dGhlciBpdGVtcy4gIFJldHVybiBjaGFuZ2VkIExJU1QsIHdoaWNoIGlzIG1hcmtlZC4gICov Ci0KLXN0YXRpYyBMaXNwX09iamVjdAotbWFya19kaXNjYXJkX2tpbGxlZF9idWZmZXJzIChM aXNwX09iamVjdCBsaXN0KQotewotICBMaXNwX09iamVjdCB0YWlsLCAqcHJldiA9ICZsaXN0 OwotCi0gIGZvciAodGFpbCA9IGxpc3Q7IENPTlNQICh0YWlsKSAmJiAhY29uc19tYXJrZWRf cCAoWENPTlMgKHRhaWwpKTsKLSAgICAgICB0YWlsID0gWENEUiAodGFpbCkpCi0gICAgewot ICAgICAgTGlzcF9PYmplY3QgdGVtID0gWENBUiAodGFpbCk7Ci0gICAgICBpZiAoQ09OU1Ag KHRlbSkpCi0JdGVtID0gWENBUiAodGVtKTsKLSAgICAgIGlmIChCVUZGRVJQICh0ZW0pICYm ICFCVUZGRVJfTElWRV9QIChYQlVGRkVSICh0ZW0pKSkKLQkqcHJldiA9IFhDRFIgKHRhaWwp OwotICAgICAgZWxzZQotCXsKLQkgIHNldF9jb25zX21hcmtlZCAoWENPTlMgKHRhaWwpKTsK LQkgIG1hcmtfb2JqZWN0IChYQ0FSICh0YWlsKSk7Ci0JICBwcmV2ID0geGNkcl9hZGRyICh0 YWlsKTsKLQl9Ci0gICAgfQotICBtYXJrX29iamVjdCAodGFpbCk7Ci0gIHJldHVybiBsaXN0 OwotfQotCiBzdGF0aWMgdm9pZAogbWFya19mcmFtZSAoc3RydWN0IExpc3BfVmVjdG9yICpw dHIpCiB7CkBAIC03MDc5LDE1ICs3MDUyLDYgQEAgbWFya193aW5kb3cgKHN0cnVjdCBMaXNw X1ZlY3RvciAqcHRyKQogICAgICAgbWFya19nbHlwaF9tYXRyaXggKHctPmN1cnJlbnRfbWF0 cml4KTsKICAgICAgIG1hcmtfZ2x5cGhfbWF0cml4ICh3LT5kZXNpcmVkX21hdHJpeCk7CiAg ICAgfQotCi0gIC8qIEZpbHRlciBvdXQga2lsbGVkIGJ1ZmZlcnMgZnJvbSBib3RoIGJ1ZmZl ciBsaXN0cwotICAgICBpbiBhdHRlbXB0IHRvIGhlbHAgR0MgdG8gcmVjbGFpbSBraWxsZWQg YnVmZmVycyBmYXN0ZXIuCi0gICAgIFdlIGNhbiBkbyBpdCBlbHNld2hlcmUgZm9yIGxpdmUg d2luZG93cywgYnV0IHRoaXMgaXMgdGhlCi0gICAgIGJlc3QgcGxhY2UgdG8gZG8gaXQgZm9y IGRlYWQgd2luZG93cy4gICovCi0gIHdzZXRfcHJldl9idWZmZXJzCi0gICAgKHcsIG1hcmtf ZGlzY2FyZF9raWxsZWRfYnVmZmVycyAody0+cHJldl9idWZmZXJzKSk7Ci0gIHdzZXRfbmV4 dF9idWZmZXJzCi0gICAgKHcsIG1hcmtfZGlzY2FyZF9raWxsZWRfYnVmZmVycyAody0+bmV4 dF9idWZmZXJzKSk7CiB9CiAKIC8qIEVudHJ5IG9mIHRoZSBtYXJrIHN0YWNrLiAgKi8KZGlm ZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwppbmRleCA3NDRiMGVmNTU0 OC4uNmVjNDBhZmY2NDYgMTAwNjQ0Ci0tLSBhL3NyYy9idWZmZXIuYworKysgYi9zcmMvYnVm ZmVyLmMKQEAgLTIwMTIsNiArMjAxMiwxMyBAQCBERUZVTiAoImtpbGwtYnVmZmVyIiwgRmtp bGxfYnVmZmVyLCBTa2lsbF9idWZmZXIsIDAsIDEsICJiS2lsbCBidWZmZXI6ICIsCiAgICAg IGJ1ZmZlciAoYnVnIzEwMTE0KS4gICovCiAgIHJlcGxhY2VfYnVmZmVyX2luX3dpbmRvd3Mg KGJ1ZmZlcik7CiAKKyAgLyogRm9yIGRlYWQgd2luZG93cyB0aGF0IGhhdmUgbm90IGJlZW4g Y29sbGVjdGVkIHlldCwgcmVtb3ZlIHRoaXMKKyAgICAgYnVmZmVyIGZyb20gdGhvc2Ugd2lu ZG93cycgbGlzdHMgb2YgcHJldmlvdXNseSBhbmQgbmV4dCBzaG93bgorICAgICBidWZmZXJz IGFuZCByZW1vdmUgYW55ICdxdWl0LXJlc3RvcmUnIG9yICdxdWl0LXJlc3RvcmUtcHJldicK KyAgICAgcGFyYW1ldGVycyBtZW50aW9uaW5nIHRoZSBidWZmZXIuICAqLworICBpZiAoWEZJ WE5VTSAoQlZBUiAoYiwgZGlzcGxheV9jb3VudCkpID4gMCkKKyAgICB3aW5kb3dfZGlzY2Fy ZF9idWZmZXJfZnJvbV9kZWFkX3dpbmRvd3MgKGJ1ZmZlcik7CisKICAgLyogRXhpdCBpZiBy ZXBsYWNpbmcgdGhlIGJ1ZmZlciBpbiB3aW5kb3dzIGhhcyBraWxsZWQgb3VyIGJ1ZmZlci4g ICovCiAgIGlmICghQlVGRkVSX0xJVkVfUCAoYikpCiAgICAgcmV0dXJuIFF0OwpkaWZmIC0t Z2l0IGEvc3JjL3dpbmRvdy5jIGIvc3JjL3dpbmRvdy5jCmluZGV4IGZmMjhiYWM1MzA2Li5k ZDBhYmU4NGZkZiAxMDA2NDQKLS0tIGEvc3JjL3dpbmRvdy5jCisrKyBiL3NyYy93aW5kb3cu YwpAQCAtMzI3Nyw2ICszMjc3LDkwIEBAIHdpbmRvd19waXhlbF90b190b3RhbCAoTGlzcF9P YmplY3QgZnJhbWUsIExpc3BfT2JqZWN0IGhvcml6b250YWwpCiB9CiAKIAorLyogUmVtb3Zl IGZpcnN0IG9jY3VycmVuY2Ugb2YgZWxlbWVudCB3aG9zZSBjYXIgaXMgQlVGRkVSIGZyb20g QUxJU1QuCisgICBSZXR1cm4gY2hhbmdlZCBBTElTVC4gICovCitzdGF0aWMgTGlzcF9PYmpl Y3QKK3dpbmRvd19kaXNjYXJkX2J1ZmZlcl9mcm9tX2FsaXN0IChMaXNwX09iamVjdCBidWZm ZXIsIExpc3BfT2JqZWN0IGFsaXN0KQoreworICBMaXNwX09iamVjdCB0YWlsLCAqcHJldiA9 ICZhbGlzdDsKKworICBmb3IgKHRhaWwgPSBhbGlzdDsgQ09OU1AgKHRhaWwpOyB0YWlsID0g WENEUiAodGFpbCkpCisgICAgeworICAgICAgTGlzcF9PYmplY3QgdGVtID0gWENBUiAodGFp bCk7CisKKyAgICAgIHRlbSA9IFhDQVIgKHRlbSk7CisKKyAgICAgIGlmIChFUSAodGVtLCBi dWZmZXIpKQorCXsKKwkgICpwcmV2ID0gWENEUiAodGFpbCk7CisJICBicmVhazsKKwl9Cisg ICAgICBlbHNlCisJcHJldiA9IHhjZHJfYWRkciAodGFpbCk7CisgICAgfQorCisgIHJldHVy biBhbGlzdDsKK30KKworLyogUmVtb3ZlIGZpcnN0IG9jY3VycmVuY2Ugb2YgQlVGRkVSIGZy b20gTElTVC4gIFJldHVybiBjaGFuZ2VkCisgICBMSVNULiAgKi8KK3N0YXRpYyBMaXNwX09i amVjdAord2luZG93X2Rpc2NhcmRfYnVmZmVyX2Zyb21fbGlzdCAoTGlzcF9PYmplY3QgYnVm ZmVyLCBMaXNwX09iamVjdCBsaXN0KQoreworICBMaXNwX09iamVjdCB0YWlsLCAqcHJldiA9 ICZsaXN0OworCisgIGZvciAodGFpbCA9IGxpc3Q7IENPTlNQICh0YWlsKTsgdGFpbCA9IFhD RFIgKHRhaWwpKQorICAgIHsKKyAgICAgIGlmIChFUSAoWENBUiAodGFpbCksIGJ1ZmZlcikp CisJeworCSAgKnByZXYgPSBYQ0RSICh0YWlsKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGVs c2UKKwlwcmV2ID0geGNkcl9hZGRyICh0YWlsKTsKKyAgICB9CisKKyAgcmV0dXJuIGxpc3Q7 Cit9CisKK3N0YXRpYyB2b2lkCit3aW5kb3dfZGlzY2FyZF9idWZmZXJfZnJvbV9kZWFkX3dp bmRvdyAoTGlzcF9PYmplY3QgYnVmZmVyLCBMaXNwX09iamVjdCB3aW5kb3cpCit7CisgIHN0 cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XICh3aW5kb3cpOworICBMaXNwX09iamVjdCBxdWl0 X3Jlc3RvcmUgPSB3aW5kb3dfcGFyYW1ldGVyICh3LCBRcXVpdF9yZXN0b3JlKTsKKyAgTGlz cF9PYmplY3QgcXVpdF9yZXN0b3JlX3ByZXYgPSB3aW5kb3dfcGFyYW1ldGVyICh3LCBRcXVp dF9yZXN0b3JlX3ByZXYpOworICBMaXNwX09iamVjdCBxdWFkOworCisgIHdzZXRfcHJldl9i dWZmZXJzCisgICAgKHcsIHdpbmRvd19kaXNjYXJkX2J1ZmZlcl9mcm9tX2FsaXN0IChidWZm ZXIsIHctPnByZXZfYnVmZmVycykpOworICB3c2V0X25leHRfYnVmZmVycworICAgICh3LCB3 aW5kb3dfZGlzY2FyZF9idWZmZXJfZnJvbV9saXN0IChidWZmZXIsIHctPm5leHRfYnVmZmVy cykpOworCisgIGlmIChFUSAoYnVmZmVyLCBGbnRoIChtYWtlX2ZpeG51bSAoMyksIHF1aXRf cmVzdG9yZV9wcmV2KSkKKyAgICAgIHx8IChDT05TUCAocXVhZCA9IEZjYXIgKEZjZHIgKHF1 aXRfcmVzdG9yZV9wcmV2KSkpCisJICAmJiBFUSAoRmNhciAocXVhZCksIGJ1ZmZlcikpKQor ICAgIEZzZXRfd2luZG93X3BhcmFtZXRlciAod2luZG93LCBRcXVpdF9yZXN0b3JlX3ByZXYs IFFuaWwpOworCisgIGlmIChFUSAoYnVmZmVyLCBGbnRoIChtYWtlX2ZpeG51bSAoMyksIHF1 aXRfcmVzdG9yZSkpCisgICAgICB8fCAoQ09OU1AgKHF1YWQgPSBGY2FyIChGY2RyIChxdWl0 X3Jlc3RvcmUpKSkKKwkgICYmIEVRIChGY2FyIChxdWFkKSwgYnVmZmVyKSkpCisgICAgewor ICAgICAgRnNldF93aW5kb3dfcGFyYW1ldGVyICh3aW5kb3csIFFxdWl0X3Jlc3RvcmUsCisJ CQkgICAgIHdpbmRvd19wYXJhbWV0ZXIgKHcsIFFxdWl0X3Jlc3RvcmVfcHJldikpOworICAg ICAgRnNldF93aW5kb3dfcGFyYW1ldGVyICh3aW5kb3csIFFxdWl0X3Jlc3RvcmVfcHJldiwg UW5pbCk7CisgICAgfQorfQorCit2b2lkCit3aW5kb3dfZGlzY2FyZF9idWZmZXJfZnJvbV9k ZWFkX3dpbmRvd3MgKExpc3BfT2JqZWN0IGJ1ZmZlcikKK3sKKyAgc3RydWN0IExpc3BfSGFz aF9UYWJsZSAqaCA9IFhIQVNIX1RBQkxFICh3aW5kb3dfZGVhZF93aW5kb3dzX3RhYmxlKTsK KworICBET0hBU0ggKGgsIGssIHYpCisgICAgd2luZG93X2Rpc2NhcmRfYnVmZmVyX2Zyb21f ZGVhZF93aW5kb3cgKGJ1ZmZlciwgdik7Cit9CisKKwogREVGVU4gKCJkZWxldGUtb3RoZXIt d2luZG93cy1pbnRlcm5hbCIsIEZkZWxldGVfb3RoZXJfd2luZG93c19pbnRlcm5hbCwKICAg ICAgICBTZGVsZXRlX290aGVyX3dpbmRvd3NfaW50ZXJuYWwsIDAsIDIsICIiLAogICAgICAg IGRvYzogLyogTWFrZSBXSU5ET1cgZmlsbCBpdHMgZnJhbWUuCkBAIC00NDAyLDYgKzQ0ODYs MTAgQEAgbWFrZV9wYXJlbnRfd2luZG93IChMaXNwX09iamVjdCB3aW5kb3csIGJvb2wgaG9y ZmxhZykKICAgd3NldF9idWZmZXIgKHAsIFFuaWwpOwogICB3c2V0X2NvbWJpbmF0aW9uIChw LCBob3JmbGFnLCB3aW5kb3cpOwogICB3c2V0X2NvbWJpbmF0aW9uX2xpbWl0IChwLCBRbmls KTsKKyAgLyogUmVzZXQgYW55IHByZXZpb3VzIGFuZCBuZXh0IGJ1ZmZlcnMgb2YgcCB3aGlj aCBoYXZlIGJlZW4gaW5zdGFsbGVkCisgICAgIGJ5IHRoZSBtZW1jcHkgYWJvdmUuICAqLwor ICB3c2V0X3ByZXZfYnVmZmVycyAocCwgUW5pbCk7CisgIHdzZXRfbmV4dF9idWZmZXJzIChw LCBRbmlsKTsKICAgd3NldF93aW5kb3dfcGFyYW1ldGVycyAocCwgUW5pbCk7CiB9CiAKQEAg LTQ0MjYsMTAgKzQ1MTQsNiBAQCBtYWtlX3dpbmRvdyAodm9pZCkKICAgd3NldF92ZXJ0aWNh bF9zY3JvbGxfYmFyX3R5cGUgKHcsIFF0KTsKICAgd3NldF9ob3Jpem9udGFsX3Njcm9sbF9i YXJfdHlwZSAodywgUXQpOwogICB3c2V0X2N1cnNvcl90eXBlICh3LCBRdCk7Ci0gIC8qIFRo ZXNlIExpc3AgZmllbGRzIGFyZSBtYXJrZWQgc3BlY2lhbGx5IHNvIHRoZXkncmUgbm90IHNl dCB0byBuaWwgYnkKLSAgICAgYWxsb2NhdGVfd2luZG93LiAgKi8KLSAgd3NldF9wcmV2X2J1 ZmZlcnMgKHcsIFFuaWwpOwotICB3c2V0X25leHRfYnVmZmVycyAodywgUW5pbCk7CiAKICAg LyogSW5pdGlhbGl6ZSBub24tTGlzcCBkYXRhLiAgTm90ZSB0aGF0IGFsbG9jYXRlX3dpbmRv dyB6ZXJvZXMgb3V0IGFsbAogICAgICBub24tTGlzcCBkYXRhLCBzbyBkbyBpdCBvbmx5IGZv ciBzbG90cyB3aGljaCBzaG91bGQgbm90IGJlIHplcm8uICAqLwpAQCAtNTI1Miw2ICs1MzM2 LDExIEBAIERFRlVOICgiZGVsZXRlLXdpbmRvdy1pbnRlcm5hbCIsIEZkZWxldGVfd2luZG93 X2ludGVybmFsLCBTZGVsZXRlX3dpbmRvd19pbnRlcm5hCiAJICB1bmNoYWluX21hcmtlciAo WE1BUktFUiAody0+b2xkX3BvaW50bSkpOwogCSAgdW5jaGFpbl9tYXJrZXIgKFhNQVJLRVIg KHctPnN0YXJ0KSk7CiAJICB3c2V0X2J1ZmZlciAodywgUW5pbCk7CisJICAvKiBBZGQgV0lO RE9XIHRvIHRhYmxlIG9mIGRlYWQgd2luZG93cyBzbyB3aGVuIGtpbGxpbmcgYSBidWZmZXIK KwkgICAgIFdJTkRPVyBtZW50aW9ucywgYWxsIHJlZmVyZW5jZXMgdG8gdGhhdCBidWZmZXIg Y2FuIGJlIHJlbW92ZWQKKwkgICAgIGFuZCB0aGUgYnVmZmVyIGJlIGNvbGxlY3RlZC4gICov CisJICBGcHV0aGFzaCAobWFrZV9maXhudW0gKHctPnNlcXVlbmNlX251bWJlciksCisJCSAg ICB3aW5kb3csIHdpbmRvd19kZWFkX3dpbmRvd3NfdGFibGUpOwogCX0KIAogICAgICAgaWYg KE5JTFAgKHMtPnByZXYpICYmIE5JTFAgKHMtPm5leHQpKQpAQCAtNzM1Niw2ICs3NDQ1LDEw IEBAIERFRlVOICgic2V0LXdpbmRvdy1jb25maWd1cmF0aW9uIiwgRnNldF93aW5kb3dfY29u ZmlndXJhdGlvbiwKIAkJfQogCSAgICB9CiAKKwkgIC8qIFJlbW92ZSB3aW5kb3cgZnJvbSB0 aGUgdGFibGUgb2YgZGVhZCB3aW5kb3dzLiAgKi8KKwkgIEZyZW1oYXNoIChtYWtlX2ZpeG51 bSAody0+c2VxdWVuY2VfbnVtYmVyKSwKKwkJICAgIHdpbmRvd19kZWFkX3dpbmRvd3NfdGFi bGUpOworCiAJICBpZiAoKE5JTFAgKGRvbnRfc2V0X21pbml3aW5kb3cpIHx8ICFNSU5JX1dJ TkRPV19QICh3KSkKIAkgICAgICAmJiBCVUZGRVJQIChwLT5idWZmZXIpICYmIEJVRkZFUl9M SVZFX1AgKFhCVUZGRVIgKHAtPmJ1ZmZlcikpKQogCSAgICAvKiBJZiBzYXZlZCBidWZmZXIg aXMgYWxpdmUsIGluc3RhbGwgaXQsIHVubGVzcyBpdCdzIGEKQEAgLTc1ODUsNiArNzY3OCwx MSBAQCBkZWxldGVfYWxsX2NoaWxkX3dpbmRvd3MgKExpc3BfT2JqZWN0IHdpbmRvdykKIAkg cG9zc2libGUgcmVzdXJyZWN0aW9uIGluIEZzZXRfd2luZG93X2NvbmZpZ3VyYXRpb24uICAq LwogICAgICAgd3NldF9jb21iaW5hdGlvbl9saW1pdCAodywgdy0+Y29udGVudHMpOwogICAg ICAgd3NldF9idWZmZXIgKHcsIFFuaWwpOworICAgICAgLyogQWRkIFdJTkRPVyB0byB0YWJs ZSBvZiBkZWFkIHdpbmRvd3Mgc28gd2hlbiBraWxsaW5nIGEgYnVmZmVyCisJIFdJTkRPVyBt ZW50aW9ucywgYWxsIHJlZmVyZW5jZXMgdG8gdGhhdCBidWZmZXIgY2FuIGJlIHJlbW92ZWQK KwkgYW5kIHRoZSBidWZmZXIgYmUgY29sbGVjdGVkLiAgKi8KKyAgICAgIEZwdXRoYXNoICht YWtlX2ZpeG51bSAody0+c2VxdWVuY2VfbnVtYmVyKSwKKwkJd2luZG93LCB3aW5kb3dfZGVh ZF93aW5kb3dzX3RhYmxlKTsKICAgICB9CiAKICAgVndpbmRvd19saXN0ID0gUW5pbDsKQEAg LTg1OTQsNiArODY5Miw4IEBAIHN5bXNfb2Zfd2luZG93ICh2b2lkKQogICBERUZTWU0gKFFj b25maWd1cmF0aW9uLCAiY29uZmlndXJhdGlvbiIpOwogICBERUZTWU0gKFFkZWxldGUsICJk ZWxldGUiKTsKICAgREVGU1lNIChRZGVkaWNhdGVkLCAiZGVkaWNhdGVkIik7CisgIERFRlNZ TSAoUXF1aXRfcmVzdG9yZSwgInF1aXQtcmVzdG9yZSIpOworICBERUZTWU0gKFFxdWl0X3Jl c3RvcmVfcHJldiwgInF1aXQtcmVzdG9yZS1wcmV2Iik7CiAKICAgREVGVkFSX0xJU1AgKCJ0 ZW1wLWJ1ZmZlci1zaG93LWZ1bmN0aW9uIiwgVnRlbXBfYnVmZmVyX3Nob3dfZnVuY3Rpb24s CiAJICAgICAgIGRvYzogLyogTm9uLW5pbCBtZWFucyBjYWxsIGFzIGZ1bmN0aW9uIHRvIGRp c3BsYXkgYSBoZWxwIGJ1ZmZlci4KQEAgLTg5MTcsNiArOTAxNywxNyBAQCBzeW1zX29mX3dp bmRvdyAodm9pZCkKIGRpc3BsYXllZCBhZnRlciBhIHNjcm9sbGluZyBvcGVyYXRpb24gdG8g YmUgc29tZXdoYXQgaW5hY2N1cmF0ZS4gICovKTsKICAgZmFzdF9idXRfaW1wcmVjaXNlX3Nj cm9sbGluZyA9IGZhbHNlOwogCisgIERFRlZBUl9MSVNQICgid2luZG93LWRlYWQtd2luZG93 cy10YWJsZSIsIHdpbmRvd19kZWFkX3dpbmRvd3NfdGFibGUsCisgICAgZG9jOiAvKiBIYXNo IHRhYmxlIG9mIGRlYWQgd2luZG93cy4KK0VhY2ggZW50cnkgaW4gdGhpcyB0YWJsZSBtYXBz IGEgd2luZG93IG51bWJlciB0byBhIHdpbmRvdyBvYmplY3QuCitFbnRyaWVzIGFyZSBhZGRl ZCBieSBgZGVsZXRlLXdpbmRvdy1pbnRlcm5hbCcgYW5kIGFyZSByZW1vdmVkIGJ5IHRoZQor Z2FyYmFnZSBjb2xsZWN0b3IuCisKK1RoaXMgdGFibGUgaXMgbWFpbnRhaW5lZCBieSBjb2Rl IGluIHdpbmRvdy5jIGFuZCBpcyBtYWRlIHZpc2libGUgaW4KK0VsaXNwIGZvciB0ZXN0aW5n IHB1cnBvc2VzIG9ubHkuICAqLyk7CisgIHdpbmRvd19kZWFkX3dpbmRvd3NfdGFibGUKKyAg ICA9IENBTExOIChGbWFrZV9oYXNoX3RhYmxlLCBRQ3dlYWtuZXNzLCBRdCk7CisKICAgZGVm c3ViciAoJlNzZWxlY3RlZF93aW5kb3cpOwogICBkZWZzdWJyICgmU29sZF9zZWxlY3RlZF93 aW5kb3cpOwogICBkZWZzdWJyICgmU21pbmlidWZmZXJfd2luZG93KTsKZGlmZiAtLWdpdCBh L3NyYy93aW5kb3cuaCBiL3NyYy93aW5kb3cuaAppbmRleCA4NjkzMjE4MTI1Mi4uMzM1ZTBh MzQ1M2UgMTAwNjQ0Ci0tLSBhL3NyYy93aW5kb3cuaAorKysgYi9zcmMvd2luZG93LmgKQEAg LTE0Miw2ICsxNDIsMTIgQEAgI2RlZmluZSBXSU5ET1dfSF9JTkNMVURFRAogICAgICAgIGFz IHdlbGwuICAqLwogICAgIExpc3BfT2JqZWN0IGNvbnRlbnRzOwogCisgICAgLyogQSBsaXN0 IG9mIDxidWZmZXIsIHdpbmRvdy1zdGFydCwgd2luZG93LXBvaW50PiB0cmlwbGVzIGxpc3Rp bmcKKyAgICAgICBidWZmZXJzIHByZXZpb3VzbHkgc2hvd24gaW4gdGhpcyB3aW5kb3cuICAq LworICAgIExpc3BfT2JqZWN0IHByZXZfYnVmZmVyczsKKyAgICAvKiBMaXN0IG9mIGJ1ZmZl cnMgcmUtc2hvd24gaW4gdGhpcyB3aW5kb3cuICAqLworICAgIExpc3BfT2JqZWN0IG5leHRf YnVmZmVyczsKKwogICAgIC8qIFRoZSBvbGQgYnVmZmVyIG9mIHRoaXMgd2luZG93LCBzZXQg dG8gdGhpcyB3aW5kb3cncyBidWZmZXIgYnkKICAgICAgICBydW5fd2luZG93X2NoYW5nZV9m dW5jdGlvbnMgZXZlcnkgdGltZSBpdCBzZWVzIHRoaXMgd2luZG93LgogICAgICAgIFVudXNl ZCBmb3IgaW50ZXJuYWwgd2luZG93cy4gICovCkBAIC0yMTgsMTQgKzIyNCw2IEBAICNkZWZp bmUgV0lORE9XX0hfSU5DTFVERUQKICAgICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpjdXJyZW50 X21hdHJpeDsKICAgICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpkZXNpcmVkX21hdHJpeDsKIAot ICAgIC8qIFRoZSB0d28gTGlzcF9PYmplY3QgZmllbGRzIGJlbG93IGFyZSBtYXJrZWQgaW4g YSBzcGVjaWFsIHdheSwKLSAgICAgICB3aGljaCBpcyB3aHkgdGhleSdyZSBwbGFjZWQgYWZ0 ZXIgYGN1cnJlbnRfbWF0cml4Jy4gICovCi0gICAgLyogQSBsaXN0IG9mIDxidWZmZXIsIHdp bmRvdy1zdGFydCwgd2luZG93LXBvaW50PiB0cmlwbGVzIGxpc3RpbmcKLSAgICAgICBidWZm ZXJzIHByZXZpb3VzbHkgc2hvd24gaW4gdGhpcyB3aW5kb3cuICAqLwotICAgIExpc3BfT2Jq ZWN0IHByZXZfYnVmZmVyczsKLSAgICAvKiBMaXN0IG9mIGJ1ZmZlcnMgcmUtc2hvd24gaW4g dGhpcyB3aW5kb3cuICAqLwotICAgIExpc3BfT2JqZWN0IG5leHRfYnVmZmVyczsKLQogICAg IC8qIE51bWJlciBzYXlpbmcgaG93IHJlY2VudGx5IHdpbmRvdyB3YXMgc2VsZWN0ZWQuICAq LwogICAgIEVNQUNTX0lOVCB1c2VfdGltZTsKIApAQCAtMTIyOCw2ICsxMjI2LDcgQEAgI2Rl ZmluZSBDSEVDS19MSVZFX1dJTkRPVyhXSU5ET1cpCQkJCVwKIGV4dGVybiB2b2lkIHdzZXRf YnVmZmVyIChzdHJ1Y3Qgd2luZG93ICosIExpc3BfT2JqZWN0KTsKIGV4dGVybiBib29sIHdp bmRvd19vdXRkYXRlZCAoc3RydWN0IHdpbmRvdyAqKTsKIGV4dGVybiBwdHJkaWZmX3Qgd2lu ZG93X3BvaW50IChzdHJ1Y3Qgd2luZG93ICp3KTsKK2V4dGVybiB2b2lkIHdpbmRvd19kaXNj YXJkX2J1ZmZlcl9mcm9tX2RlYWRfd2luZG93cyAoTGlzcF9PYmplY3QpOwogZXh0ZXJuIHZv aWQgaW5pdF93aW5kb3dfb25jZSAodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X3dpbmRvdyAo dm9pZCk7CiBleHRlcm4gdm9pZCBzeW1zX29mX3dpbmRvdyAodm9pZCk7Cg== --------------LljYayqEV1Ur0nfWMbfh90n8--