GNU bug report logs - #35316
26.2; Emacs lags in c++-mode buffer when editing with iedit-mode on

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs,cc-mode; Reported by: Zhang Haijun <ccsmile2008@HIDDEN>; dated Fri, 19 Apr 2019 00:24:01 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 19 May 2019 14:26:27 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun May 19 10:26:27 2019
Received: from localhost ([127.0.0.1]:35282 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hSMlf-0005zi-6N
	for submit <at> debbugs.gnu.org; Sun, 19 May 2019 10:26:27 -0400
Received: from colin.muc.de ([193.149.48.1]:14776 helo=mail.muc.de)
 by debbugs.gnu.org with smtp (Exim 4.84_2)
 (envelope-from <acm@HIDDEN>) id 1hSMlc-0005zY-Ny
 for 35316 <at> debbugs.gnu.org; Sun, 19 May 2019 10:26:25 -0400
Received: (qmail 99456 invoked by uid 3782); 19 May 2019 14:26:20 -0000
Received: from acm.muc.de (p2E5D561D.dip0.t-ipconnect.de [46.93.86.29]) by
 colin.muc.de (tmda-ofmipd) with ESMTP;
 Sun, 19 May 2019 16:26:18 +0200
Received: (qmail 26517 invoked by uid 1000); 19 May 2019 14:26:15 -0000
Date: Sun, 19 May 2019 14:26:15 +0000
To: Noam Postavsky <npostavs@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Message-ID: <20190519142615.GB5262@ACM>
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
 <20190516161704.GA527@ACM> <871s0xop2o.fsf@HIDDEN>
 <20190517100118.GB5011@ACM> <87lfz5c7b5.fsf@HIDDEN>
 <20190519114019.GA5262@ACM> <877eamd1in.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <877eamd1in.fsf@HIDDEN>
User-Agent: Mutt/1.10.1 (2018-07-13)
X-Delivery-Agent: TMDA/1.1.12 (Macallan)
From: Alan Mackenzie <acm@HIDDEN>
X-Primary-Address: acm@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 35316
Cc: Amos Bird <amosbird@HIDDEN>, 35316 <at> debbugs.gnu.org,
 Zhang Haijun <ccsmile2008@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello, Noam.

On Sun, May 19, 2019 at 09:20:16 -0400, Noam Postavsky wrote:
> Alan Mackenzie <acm@HIDDEN> writes:

> >  (defun iedit-update-occurrences-2 (occurrence after beg end &optional change)
> >    ""
> > -  (let ((inhibit-modification-hooks t)
> > +  (let (;; (inhibit-modification-hooks t)
> > +        ;; Note: `inhibit-modification-hook' will already be non-nil when this
> > +	;; function is called.  Setting it to nil here doesn't work.

> By "doesn't work", do you mean that it would trigger an infloop?

It would trigger a binding stack overflow.  (It did when I tried it.)
iedit-update-occurrences-2 is (a subroutine of) the handler for the
modification-hooks property of the overlay at point.  It performs buffer
modifications on the other overlays.  If inhibit-modification-hooks is
bound to nil, these other modifications in their turn cause
iedit-update-occurrences-2 to get called recursively.

> Would something like this work:

>     (defvar iedit-inhibit-update nil)

>     (defun iedit-update-occurrences-2 (occurrence after beg end &optional change)
>      ...
>      ;; Let other modification hooks run, but don't recurse infinitely.
>      (unless iedit-inhibit-update
>        (let ((inhibit-modification-hooks nil)
>              (iedit-inhibit-update t))
>        ...

I haven't actually tried it, but gut feeling says this approach might be
problematic.  It could end up inserting into/deleting from each overlay
many times.  Or some of the insertions/deletions wouldn't get the change
hooks called for them, depending on how the rest of the code is split
into the two "..."s.

It might also be even less clean than the explicit calls to
before/after-change-functions.

> See also Bug#25111 "How modification-hooks let-bind
> inhibit-modification-hooks?" https://debbugs.gnu.org/25111

Thanks.  I was considering raising the same issue in a bug myself.
#25111 is still open, I think (the web interface doesn't explicitly
say), and I think the doc is objectively wrong.  It doesn't state that
when modification-hooks is called, inhibit-modification-hooks has
already been set to non-nil.  That was what caught me out when I wrote
the previous (garbage) patch on ?Thursday.

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 19 May 2019 13:52:01 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun May 19 09:52:01 2019
Received: from localhost ([127.0.0.1]:34248 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hSMEL-0004qb-6B
	for submit <at> debbugs.gnu.org; Sun, 19 May 2019 09:52:01 -0400
Received: from mail-oln040092255090.outbound.protection.outlook.com
 ([40.92.255.90]:32192 helo=APC01-HK2-obe.outbound.protection.outlook.com)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hSMEI-0004qM-0y
 for 35316 <at> debbugs.gnu.org; Sun, 19 May 2019 09:51:59 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HT2jh1YxAqquMHCrlc0chbCKvM6eq0DF1qrSN5GLndk=;
 b=QIRugbv99io40gJfTE4Fcn5UWt1sYhKASRrHZ5n4yfO4v/TPKCnTR/mrIsJU4VWe/6y3ekEHgV08tuDYpkf+EPewCyHk86NrkNe9M77ssy+tmdiAEO9Wb+kBjZvXf5ascQASvtC+58RxqsYOge8s/ZrZe7FbGRYOsks8NMXSalzwxl3e1D0glllISUCpO74+A2MmSVey/U8twBIKIlPT1nQ1ySiKuDX0623udJQZKjWGp1/VM4EpBSPhaX1ES57YWdvV/G7E+YPVyfb9QzQhfD9Ni1abNGs0jR4fGyk00y1XvS3A8NYmDVyvG8of388oIJ3bdx9bCduy/qDJQBIOXQ==
Received: from HK2APC01FT046.eop-APC01.prod.protection.outlook.com
 (10.152.248.60) by HK2APC01HT195.eop-APC01.prod.protection.outlook.com
 (10.152.249.228) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1900.16; Sun, 19 May
 2019 13:51:49 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com (10.152.248.60) by
 HK2APC01FT046.mail.protection.outlook.com (10.152.249.180) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.1900.16 via Frontend Transport; Sun, 19 May 2019 13:51:49 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::9403:ee98:34ab:76e9]) by PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::9403:ee98:34ab:76e9%3]) with mapi id 15.20.1900.020; Sun, 19 May 2019
 13:51:49 +0000
From: Zhang Haijun <ccsmile2008@HIDDEN>
To: Alan Mackenzie <acm@HIDDEN>, Amos Bird <amosbird@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Topic: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Index: AQHVDjenMG4nP9mQn0afnxnWbuRgSKZyb+z8
Date: Sun, 19 May 2019 13:51:49 +0000
Message-ID: <PS1PR06MB2759C33DF874809E6C9215EFA8050@HIDDEN>
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
 <20190516161704.GA527@ACM> <871s0xop2o.fsf@HIDDEN>
 <20190517100118.GB5011@ACM>
 <87lfz5c7b5.fsf@HIDDEN>,<20190519114019.GA5262@ACM>
In-Reply-To: <20190519114019.GA5262@ACM>
Accept-Language: zh-CN, en-US
Content-Language: zh-CN
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-incomingtopheadermarker: OriginalChecksum:5D3CCABAD427B3C8F6DA89C19F706749E38711EABBAC851EA3A068106DCA3C71;
 UpperCasedChecksum:DBF95EDF05F53CAF9C3229297CDD0A8313C72322FAFDDD9F21FB85F0E1D8A30C;
 SizeAsReceived:7191; Count:43
x-tmn: [9CHCpbiEzracKB/Gn/i61N42vMfskU+hj6r05pfbpfnqODSHuFaW99CAN5Htp7wP]
x-ms-publictraffictype: Email
x-incomingheadercount: 43
x-eopattributedmessage: 0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(5050001)(7020095)(20181119110)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031323274)(2017031324274)(2017031322404)(1601125500)(1603101475)(1701031045);
 SRVR:HK2APC01HT195; 
x-ms-traffictypediagnostic: HK2APC01HT195:
x-ms-exchange-purlcount: 2
x-microsoft-antispam-message-info: ctnBghx9HBhgxDJeQVbcOsIJ2pf+SHP1WCJZerxtLtE9ORaNooHZ87FqMeMDADO6CBSnHdpX49s/z5tTTe86FNzJ300HISIflZNlCQJm/q8Ae1SKvA01flSlmovU7F8TYq8IhYXFVcSbp5iOj40Oh7oNYgl+n1Vsgg3GzlQjPi1Lg70oVpqeAY6nXye554ai
Content-Type: multipart/alternative;
 boundary="_000_PS1PR06MB2759C33DF874809E6C9215EFA8050PS1PR06MB2759apcp_"
MIME-Version: 1.0
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-Network-Message-Id: 38399bd9-29f5-429d-68bc-08d6dc61244b
X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 May 2019 13:51:49.7764 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Internet
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2APC01HT195
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 35316
Cc: "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.1 (-)

--_000_PS1PR06MB2759C33DF874809E6C9215EFA8050PS1PR06MB2759apcp_
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: base64

VGhlIGF1dGhvciBvZiBpZWRpdCBzZWVtcyBub3QgdG9vIGFjdGl2ZShub3QgZXZlcnlkYXkpIG9u
IGdpdGh1Yi4gSGVyZSBpcyB0aGUgZW1haWwgb24gaGlzIGFjY291bnQgaW5mbyBvZiBnaXRodWI6
IHZpY3RvcmhnZUBnbWFpbC5jb20uDQoNCkhvd2V2ZXIsIHRoZSBnbWFpbCBpcyBibG9ja2VkIGlu
IGNoaW5hKHRoZSBwYWdlIHNob3dzIHRoYXQgaGUgaXMgaW4gY2hpbmEpLiBJIGRvbid0IGtub3du
IGlmIGhlIGNhbiByZWFkIHRoZSBtYWlsLg0KDQpCZXNpZGVzIGllZGl0LCBJIHRyaWVkIHdpdGgg
bXVsdGlwbGUtY3Vyc29ycyhodHRwczovL2dpdGh1Yi5jb20vbWFnbmFycy9tdWx0aXBsZS1jdXJz
b3JzLmVsKSB3aXRoIHRoZSBzaW1pbGFyIGVkaXRpbmcgb3BlcmF0aW9uLiBJdCB3b3JrcyB3ZWxs
KG5vIG9idmlvdXMgbGFncykuDQoNCrvxyKEgT3V0bG9vayBmb3IgQW5kcm9pZDxodHRwczovL2Fr
YS5tcy9naGVpMzY+DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpGcm9tOiBB
bGFuIE1hY2tlbnppZSA8YWNtQG11Yy5kZT4NClNlbnQ6IFN1bmRheSwgTWF5IDE5LCAyMDE5IDc6
NDA6MTkgUE0NClRvOiBBbW9zIEJpcmQ7IFpoYW5nIEhhaWp1bg0KQ2M6IDM1MzE2QGRlYmJ1Z3Mu
Z251Lm9yZw0KU3ViamVjdDogUmU6IGJ1ZyMzNTMxNjogMjYuMjsgRW1hY3MgbGFncyBpbiBjKyst
bW9kZSBidWZmZXIgd2hlbiBlZGl0aW5nIHdpdGggaWVkaXQtbW9kZSBvbg0KDQpIZWxsbywgQW1v
cyBhbmQgWmhhbmcuDQoNCkZpcnN0IHRoaW5nLCBhcG9sb2dpZXMgZm9yIHRoZSBwYXRjaCBJIHNl
bnQgeW91IGEgZmV3IGRheXMgYWdvLiAgSXQgd2FzDQpiYXNlZCBvbiBhIG1pc3VuZGVyc3RhbmRp
bmcsIGFuZCBpdCBpcyB0b3RhbCBnYXJiYWdlIQ0KDQpUaGUgbWlzdW5kZXJzdGFuZGluZyB3YXMg
dGhlIGFzc3VtcHRpb24gdGhhdA0KYGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzJyB3b3VsZCBi
ZSBuaWwgb24gZW50cnkgdG8NCmBpZWRpdC11cGRhdGUtb2NjdXJyZW5jZXMtMicsIGFuZCB0aGF0
IGxlYXZpbmcgaXQgbmlsIHdvdWxkIGFsbG93IHRoZQ0KYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25z
JyBhbmQgYGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMnIGhvb2tzIHRvIHJ1bg0Kbm9ybWFsbHkuDQoN
CkluIGFjdHVhbCBmYWN0IGBpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcycgaXMgdCBhdCB0aGF0
IHBvaW50LCBhbmQNCmNhbm5vdCBzdWNjZXNzZnVsbHkgYmUgYm91bmQgdG8gbmlsLiAgU28sIGJv
dGggYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zJw0KYW5kIGBhZnRlci1jaGFuZ2UtZnVuY3Rpb25z
JyBuZWVkIHRvIGJlIGNhbGxlZCBleHBsaWNpdGx5IGZvciBzdWNjZXNzZnVsDQpwcm9jZXNzaW5n
Lg0KDQpTbywgcGxlYXNlIGRpc3JlZ2FyZCB0aGF0IHByZXZpb3VzIHBhdGNoIGZyb20gbWUsIGFu
ZCB0cnkgb3V0IGluc3RlYWQNCnRoZSBwYXRjaCBiZWxvdy4gIEluIEMrKyBNb2RlIGl0IGlzIHNv
bWV3aGF0IHNsb3dlciwgc2luY2UgaXQgaXMNCmFjdHVhbGx5IGRvaW5nIHRoZSBjaGFuZ2UgcHJv
Y2Vzc2luZywgYnV0IG5vdCB1bnVzYWJseSBzby4gIFVuZG8gc2VlbXMNCnRvIGJlIHdvcmtpbmcg
YSBiaXQgZmFzdGVyIHRvbywgdGhvdWdoIGl0IGlzIG9mdGVuIG5vdCBpbnN0YW50YW5lb3VzIGFz
DQpvbmUgd291bGQgd2lzaCAoc2VlIGJlbG93KS4NCg0KT24gU2F0LCBNYXkgMTgsIDIwMTkgYXQg
MDE6MzU6NTggKzA4MDAsIEFtb3MgQmlyZCB3cm90ZToNCg0KPiBIaSBBbGFuIQ0KDQo+ID4gQXJl
IHdlIHN0aWxsIHRhbGtpbmcgYWJvdXQgQysrIE1vZGUNCg0KPiBZZWFoIGl0J3MgYysrIG1vZGUg
YnV0IGl0IGNhbiBhbHNvIGJlIHJlcHJvZHVjZWQgd2l0aCBjIG1vZGUuDQo+IFRoZSBtaW51dGUg
bG9uZyBmcm96ZW4gaXMgY2F1c2VkIG1haW5seSBieSB0aGUgbHNwLW1vZGUsIGhvd2V2ZWVyDQo+
IGl0J3Mgc3RpbGwgbGFnZ3kgYWZ0ZXIgdHVybmluZyBsc3Agb2ZmLg0KDQo+ID4gSG93IGJpZyBp
cyB5b3VyIGZpbGU/ICBDYW4geW91IGNoYXJhY3RlcmlzZSBpdCBpbiBhbnkgd2F5Pw0KDQo+IFlv
dSBjYW4gdHJ5IGVtYWNzL3NyYy94ZGlzcC5jIC4gaWVkaXRpbmcgYWxsICJtYWtlX2ZpeG51bSIs
DQo+IHR1cm5pbmcgdGhlbSBpbnRvICJtYWtlX2ZpeG51bV93aHlfdW5kb19yZWRvX2lzX3NvX3Ns
b3ciLCBhbmQNCj4gdW5kby4NCj4gSXQncyBhYm91dCAxMC0yMCBzZWNvbmRzIGZyZWV6aW5nIHRp
bWUgaGVyZS4NCg0KV2hlbiBJIGRvIHRoaXMgbm93ICh3aXRoIHRoZSBwYXRjaCBpbiBwbGFjZSks
IHVuZG8gd29ya3MgaW4gdHdvIHN0YWdlcywNCnRha2luZyBhYm91dCAwLjRzIGFuZCAyLjRzIHJl
c3BlY3RpdmVseSBvbiBteSBtYWNoaW5lLg0KDQo+ID4gSXQgc2VlbXMgSSBoYXZlIG1vcmUgd29y
ayB0byBkbyBvbiB0aGlzIGluIGFueSBjYXNlLg0KDQpBcyBhIG1hdHRlciBvZiBpbnRlcmVzdCwg
Y291bGQgb25lIG9mIHlvdSBwbGVhc2UgZ2l2ZSBtZSB0aGUgbmFtZSBhbmQNCmVtYWlsIGFkZHJl
c3Mgb2YgdGhlIGllZGl0LW1vZGUgbWFpbnRhaW5lci4gIEkgaGF2ZW4ndCBnb3QgYSBnaXRodWIN
CmFjY291bnQsIGFuZCBkb24ndCB3YW50IHRvIGNyZWF0ZSBvbmUsIHNvIEkgZG9uJ3QgdGhpbmsg
SSBjYW4gZ2V0IGluDQp0b3VjaCB3aXRoIGhlci9oaW0gdGhhdCB3YXkuDQoNCj4gTG9va2luZyBm
b3J3YXJkIHRvIGl0IQ0KDQpPSywgaGVyZSBnb2VzIQ0KDQoNCg0KLS0tIGllZGl0LWxpYi5lbC5v
cmlnICAgMjAxOS0wNS0xOSAxMDo1NTozMS42ODE5NTk5OTggKzAwMDANCisrKyBpZWRpdC1saWIu
ZWwgICAgICAgIDIwMTktMDUtMTkgMTE6MDg6MjcuNTQ5OTg4OTMwICswMDAwDQpAQCAtNDkwLDcg
KzQ5MCw5IEBADQoNCiAoZGVmdW4gaWVkaXQtdXBkYXRlLW9jY3VycmVuY2VzLTIgKG9jY3VycmVu
Y2UgYWZ0ZXIgYmVnIGVuZCAmb3B0aW9uYWwgY2hhbmdlKQ0KICAgIiINCi0gIChsZXQgKChpbmhp
Yml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KQ0KKyAgKGxldCAoOzsgKGluaGliaXQtbW9kaWZpY2F0
aW9uLWhvb2tzIHQpDQorICAgICAgICA7OyBOb3RlOiBgaW5oaWJpdC1tb2RpZmljYXRpb24taG9v
aycgd2lsbCBhbHJlYWR5IGJlIG5vbi1uaWwgd2hlbiB0aGlzDQorICAgICAgIDs7IGZ1bmN0aW9u
IGlzIGNhbGxlZC4gIFNldHRpbmcgaXQgdG8gbmlsIGhlcmUgZG9lc24ndCB3b3JrLg0KICAgICAg
ICAgKG9mZnNldCAoLSBiZWcgKG92ZXJsYXktc3RhcnQgb2NjdXJyZW5jZSkpKQ0KICAgICAgICAg
KHZhbHVlIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgYmVnIGVuZCkpKQ0KICAgICAo
c2F2ZS1leGN1cnNpb24NCkBAIC01MDEsNiArNTAzLDkgQEANCiAgICAgICAgICAgICAgICAgICAg
KGVuZGluZyAoKyBiZWdpbm5pbmcgKC0gZW5kIGJlZykpKSkNCiAgICAgICAgICAgICAgICh3aGVu
IChub3QgKGVxIGFub3RoZXItb2NjdXJyZW5jZSBvY2N1cnJlbmNlKSkNCiAgICAgICAgICAgICAg
ICAgKGdvdG8tY2hhciBiZWdpbm5pbmcpDQorICAgICAgICAgICAgICAgKHJ1bi1ob29rLXdpdGgt
YXJncyAnYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJlZ2lubmluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCsgYmVnaW5uaW5nIGNoYW5nZSkpDQogICAgICAgICAgICAgICAgIChpbnNlcnQtYW5kLWluaGVy
aXQgdmFsdWUpDQogICAgICAgICAgICAgICAgIDs7IHRvZG86IHJlY29uc2lkZXIgdGhpcyBjaGFu
Z2UgUXVpY2sgZml4IGZvcg0KICAgICAgICAgICAgICAgICA7OyBtdWx0aS1vY2N1ciBvY2N1ci1l
ZGl0LW1vZGU6IG11bHRpLW9jY3VyIGRlcGVuZCBvbg0KQEAgLTUxNywxMyArNTIyLDE3IEBADQog
ICAgICAgICA7OyBkZWxldGlvbg0KICAgICAgICAgKGRvbGlzdCAoYW5vdGhlci1vY2N1cnJlbmNl
IChyZW1vdmUgb2NjdXJyZW5jZSBpZWRpdC1vY2N1cnJlbmNlcy1vdmVybGF5cykpDQogICAgICAg
ICAgIChsZXQgKChiZWdpbm5pbmcgKCsgKG92ZXJsYXktc3RhcnQgYW5vdGhlci1vY2N1cnJlbmNl
KSBvZmZzZXQpKSkNCisgICAgICAgICAgIChnb3RvLWNoYXIgYmVnaW5uaW5nKQ0KKyAgICAgICAg
ICAgKHJ1bi1ob29rLXdpdGgtYXJncyAnYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgrIGJlZ2lubmluZyBjaGFuZ2UpKQ0KICAgICAgICAgICAgIChkZWxldGUtcmVn
aW9uIGJlZ2lubmluZyAoKyBiZWdpbm5pbmcgY2hhbmdlKSkNCiAgICAgICAgICAgICAodW5sZXNz
IChlcSBiZWcgZW5kKSA7OyByZXBsYWNlbWVudA0KICAgICAgICAgICAgICAgKGdvdG8tY2hhciBi
ZWdpbm5pbmcpDQogICAgICAgICAgICAgICAoaW5zZXJ0LWFuZC1pbmhlcml0IHZhbHVlKSkNCiAg
ICAgICAgICAgICAocnVuLWhvb2std2l0aC1hcmdzICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgrIGJlZ2lubmluZyAoLSBiZWcgZW5kKSkNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgrIGJlZ2lubmluZyAoLSBlbmQgYmVnKSkNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZSkpKSkpKSkNCg0KIChkZWZ1biBpZWRpdC1u
ZXh0LW9jY3VycmVuY2UgKCkNCg0KDQo+IHJlZ2FyZHMsDQoNCj4gLS0NCj4gQW1vcyBCaXJkDQo+
IGFtb3NiaXJkQGdtYWlsLmNvbQ0KDQotLQ0KQWxhbiBNYWNrZW56aWUgKE51cmVtYmVyZywgR2Vy
bWFueSkuDQo=

--_000_PS1PR06MB2759C33DF874809E6C9215EFA8050PS1PR06MB2759apcp_
Content-Type: text/html; charset="gb2312"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dgb2312">
<meta name=3D"Generator" content=3D"Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; pad=
ding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<div>
<div dir=3D"auto" style=3D"direction:ltr; margin:0; padding:0; font-family:=
sans-serif; font-size:11pt; color:black">
The author of iedit seems not too active(not everyday) on github. Here is t=
he email on his account info of github: victorhge@HIDDEN<br>
<br>
</div>
<div dir=3D"auto" style=3D"direction:ltr; margin:0; padding:0; font-family:=
sans-serif; font-size:11pt; color:black">
However, the gmail is blocked in china(the page shows that he is in china).=
 I don't known if he can read the mail.<br>
<br>
</div>
<div dir=3D"auto" style=3D"direction:ltr; margin:0; padding:0; font-family:=
sans-serif; font-size:11pt; color:black">
Besides iedit, I tried with multiple-cursors(<a href=3D"https://github.com/=
magnars/multiple-cursors.el">https://github.com/magnars/multiple-cursors.el=
</a>) with the similar editing operation. It works well(no obvious lags).<b=
r>
<br>
</div>
<div dir=3D"auto" style=3D"direction:ltr; margin:0; padding:0; font-family:=
sans-serif; font-size:11pt; color:black">
<div dir=3D"auto" style=3D"direction:ltr; margin:0; padding:0; font-family:=
sans-serif; font-size:11pt; color:black">
=BB=F1=C8=A1 <a href=3D"https://aka.ms/ghei36">Outlook for Android</a></div=
>
<br>
</div>
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"x_divRplyFwdMsg" dir=3D"ltr"><font face=3D"Calibri, sans-serif" =
color=3D"#000000" style=3D"font-size:11pt"><b>From:</b> Alan Mackenzie &lt;=
acm@HIDDEN&gt;<br>
<b>Sent:</b> Sunday, May 19, 2019 7:40:19 PM<br>
<b>To:</b> Amos Bird; Zhang Haijun<br>
<b>Cc:</b> 35316 <at> debbugs.gnu.org<br>
<b>Subject:</b> Re: bug#35316: 26.2; Emacs lags in c&#43;&#43;-mode buffer =
when editing with iedit-mode on</font>
<div>&nbsp;</div>
</div>
</div>
<font size=3D"2"><span style=3D"font-size:11pt;">
<div class=3D"PlainText">Hello, Amos and Zhang.<br>
<br>
First thing, apologies for the patch I sent you a few days ago.&nbsp; It wa=
s<br>
based on a misunderstanding, and it is total garbage!<br>
<br>
The misunderstanding was the assumption that<br>
`inhibit-modification-hooks' would be nil on entry to<br>
`iedit-update-occurrences-2', and that leaving it nil would allow the<br>
`before-change-functions' and `after-change-functions' hooks to run<br>
normally.<br>
<br>
In actual fact `inhibit-modification-hooks' is t at that point, and<br>
cannot successfully be bound to nil.&nbsp; So, both `before-change-function=
s'<br>
and `after-change-functions' need to be called explicitly for successful<br=
>
processing.<br>
<br>
So, please disregard that previous patch from me, and try out instead<br>
the patch below.&nbsp; In C&#43;&#43; Mode it is somewhat slower, since it =
is<br>
actually doing the change processing, but not unusably so.&nbsp; Undo seems=
<br>
to be working a bit faster too, though it is often not instantaneous as<br>
one would wish (see below).<br>
<br>
On Sat, May 18, 2019 at 01:35:58 &#43;0800, Amos Bird wrote:<br>
<br>
&gt; Hi Alan!<br>
<br>
&gt; &gt; Are we still talking about C&#43;&#43; Mode<br>
<br>
&gt; Yeah it's c&#43;&#43; mode but it can also be reproduced with c mode.<=
br>
&gt; The minute long frozen is caused mainly by the lsp-mode, howeveer<br>
&gt; it's still laggy after turning lsp off.<br>
<br>
&gt; &gt; How big is your file?&nbsp; Can you characterise it in any way?<b=
r>
<br>
&gt; You can try emacs/src/xdisp.c . iediting all &quot;make_fixnum&quot;,<=
br>
&gt; turning them into &quot;make_fixnum_why_undo_redo_is_so_slow&quot;, an=
d <br>
&gt; undo.<br>
&gt; It's about 10-20 seconds freezing time here.<br>
<br>
When I do this now (with the patch in place), undo works in two stages,<br>
taking about 0.4s and 2.4s respectively on my machine.<br>
<br>
&gt; &gt; It seems I have more work to do on this in any case.<br>
<br>
As a matter of interest, could one of you please give me the name and<br>
email address of the iedit-mode maintainer.&nbsp; I haven't got a github<br=
>
account, and don't want to create one, so I don't think I can get in<br>
touch with her/him that way.<br>
<br>
&gt; Looking forward to it!<br>
<br>
OK, here goes!<br>
<br>
<br>
<br>
--- iedit-lib.el.orig&nbsp;&nbsp; 2019-05-19 10:55:31.681959998 &#43;0000<b=
r>
&#43;&#43;&#43; iedit-lib.el&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2019=
-05-19 11:08:27.549988930 &#43;0000<br>
@@ -490,7 &#43;490,9 @@<br>
&nbsp;<br>
&nbsp;(defun iedit-update-occurrences-2 (occurrence after beg end &amp;opti=
onal change)<br>
&nbsp;&nbsp; &quot;&quot;<br>
-&nbsp; (let ((inhibit-modification-hooks t)<br>
&#43;&nbsp; (let (;; (inhibit-modification-hooks t)<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;; Note: `inhibit-modificat=
ion-hook' will already be non-nil when this<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;; function is called.&nbsp; Sett=
ing it to nil here doesn't work.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (offset (- beg (overlay-st=
art occurrence)))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (value (buffer-substring-n=
o-properties beg end)))<br>
&nbsp;&nbsp;&nbsp;&nbsp; (save-excursion<br>
@@ -501,6 &#43;503,9 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ending (&#43; beginning (- end beg=
))))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp; (when (not (eq another-occurrence occurrence))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; (goto-char beginning)<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp; (run-hook-with-args 'before-change-functions<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beginning<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&#43; beginnin=
g change))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; (insert-and-inherit value)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; ;; todo: reconsider this change Quick fix for<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; ;; multi-occur occur-edit-mode: multi-occur depend on=
<br>
@@ -517,13 &#43;522,17 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;; deletion<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dolist (another-occurrenc=
e (remove occurrence iedit-occurrences-overlays))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((beginni=
ng (&#43; (overlay-start another-occurrence) offset)))<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (goto-cha=
r beginning)<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (run-hook=
-with-args 'before-change-functions<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beginning<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&#43; beginning change))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (d=
elete-region beginning (&#43; beginning change))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (u=
nless (eq beg end) ;; replacement<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp; (goto-char beginning)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp; (insert-and-inherit value))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (r=
un-hook-with-args 'after-change-functions<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beginning<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&#43; beginning (- beg end))<br>
&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&#43; beginning (- end beg))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; change)))))))<br>
&nbsp;<br>
&nbsp;(defun iedit-next-occurrence ()<br>
<br>
<br>
&gt; regards,<br>
<br>
&gt; --<br>
&gt; Amos Bird<br>
&gt; amosbird@HIDDEN<br>
<br>
-- <br>
Alan Mackenzie (Nuremberg, Germany).<br>
</div>
</span></font>
</body>
</html>

--_000_PS1PR06MB2759C33DF874809E6C9215EFA8050PS1PR06MB2759apcp_--




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 19 May 2019 13:20:26 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun May 19 09:20:26 2019
Received: from localhost ([127.0.0.1]:34218 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hSLjl-000411-Nu
	for submit <at> debbugs.gnu.org; Sun, 19 May 2019 09:20:26 -0400
Received: from mail-it1-f169.google.com ([209.85.166.169]:38143)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <npostavs@HIDDEN>) id 1hSLjj-00040n-5Z
 for 35316 <at> debbugs.gnu.org; Sun, 19 May 2019 09:20:24 -0400
Received: by mail-it1-f169.google.com with SMTP id i63so19035769ita.3
 for <35316 <at> debbugs.gnu.org>; Sun, 19 May 2019 06:20:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:references:date:in-reply-to:message-id
 :user-agent:mime-version;
 bh=ZvN7eouQHXKG9QgGGFJX1eUm/+WceDK3S2e+0qvAnkk=;
 b=VYFyoF+gWKisUMODzX7JBzlGVitzXpMgpI0mKJBT9U0P1SjbMj/356mxWS3tzHZ1l+
 qNS0YYXO1nI2icrdXsbtFXhrYqIEgApqd0KMHG2K61PBliaZ3ZFBO6z/VXO3u4hdhXA8
 ElVq+4WVGoCBILP2iswPXRAuoou5q8hpkiyj1tuERAqBn5+94ZuwftT4V6QkXt7LqdbY
 JDt4EklLqW1QyYPnxiCe4kKeXOty8A69OSOPfiO/KCZSRZYDI2eIaBk1iVNXw+laoaPl
 a5sXjn2FrsFL7XEjzWp687Y15UyXNdLRA4t2FFIymT86l+dYyxYXC15Yc1mJ660ICxWL
 q0Sw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to
 :message-id:user-agent:mime-version;
 bh=ZvN7eouQHXKG9QgGGFJX1eUm/+WceDK3S2e+0qvAnkk=;
 b=KfaAgeqNjIfF8Qhld+s6tkhYCL7yODXMu4CmxWQSGrHEg/kWaa8ljkHy94ZTjWttbw
 ju+xh1ezGgGyeKnQSqXzrYWMjANXngDwnOi4kmsLqXgRlofFTcbZB5scYDDPtOjSQ3+g
 618c9oBqtw3GuiTjpdWJ720sQiDLpvix9izW2xxy0ixH7M/nH40e2oYVnc4WUVACbVn0
 98Nr4uV2mH4SEETisDphum5c4SmwCSO4eBg51v74WFvm9SAv6/BR+SrA8PXJhfPQN4Dh
 sqy3kHUIlvebp2SNRd/nkJ/o7uRRXEFNqSWY+/FhJjFfVd3Zd4N7KDj0gpT1lVA4X2uu
 +27w==
X-Gm-Message-State: APjAAAWzgmI8Gt95a7BKrRzqvj9Xe37KFKETZqgZKNIrpcMWRUYtmszk
 rulXXpnKVwpTdCzUWTHkJVBQf6UD
X-Google-Smtp-Source: APXvYqwbkaNkoe2JHVsmYCKJeLAAN60rF4vaCsJl16IrWr+d5qHdHnu5HIrjGDAcMOsFXMY+M5MOpA==
X-Received: by 2002:a05:660c:4:: with SMTP id q4mr8964068itj.30.1558272017393; 
 Sun, 19 May 2019 06:20:17 -0700 (PDT)
Received: from minid (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34])
 by smtp.gmail.com with ESMTPSA id
 l19sm4482187iob.19.2019.05.19.06.20.16
 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);
 Sun, 19 May 2019 06:20:16 -0700 (PDT)
From: Noam Postavsky <npostavs@HIDDEN>
To: Alan Mackenzie <acm@HIDDEN>
Subject: Re: bug#35316: 26.2;
 Emacs lags in c++-mode buffer when editing with iedit-mode on
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
 <20190516161704.GA527@ACM> <871s0xop2o.fsf@HIDDEN>
 <20190517100118.GB5011@ACM> <87lfz5c7b5.fsf@HIDDEN>
 <20190519114019.GA5262@ACM>
Date: Sun, 19 May 2019 09:20:16 -0400
In-Reply-To: <20190519114019.GA5262@ACM> (Alan Mackenzie's message of "Sun, 19
 May 2019 11:40:19 +0000")
Message-ID: <877eamd1in.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 35316
Cc: Amos Bird <amosbird@HIDDEN>, 35316 <at> debbugs.gnu.org,
 Zhang Haijun <ccsmile2008@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Alan Mackenzie <acm@HIDDEN> writes:

>  (defun iedit-update-occurrences-2 (occurrence after beg end &optional change)
>    ""
> -  (let ((inhibit-modification-hooks t)
> +  (let (;; (inhibit-modification-hooks t)
> +        ;; Note: `inhibit-modification-hook' will already be non-nil when this
> +	;; function is called.  Setting it to nil here doesn't work.

By "doesn't work", do you mean that it would trigger an infloop?
Would something like this work:

    (defvar iedit-inhibit-update nil)

    (defun iedit-update-occurrences-2 (occurrence after beg end &optional change)
     ...
     ;; Let other modification hooks run, but don't recurse infinitely.
     (unless iedit-inhibit-update
       (let ((inhibit-modification-hooks nil)
             (iedit-inhibit-update t))
       ...

See also Bug#25111 "How modification-hooks let-bind
inhibit-modification-hooks?" https://debbugs.gnu.org/25111




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 19 May 2019 11:40:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun May 19 07:40:32 2019
Received: from localhost ([127.0.0.1]:34031 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hSKB6-0007hA-09
	for submit <at> debbugs.gnu.org; Sun, 19 May 2019 07:40:32 -0400
Received: from colin.muc.de ([193.149.48.1]:11669 helo=mail.muc.de)
 by debbugs.gnu.org with smtp (Exim 4.84_2)
 (envelope-from <acm@HIDDEN>) id 1hSKB4-0007gy-BP
 for 35316 <at> debbugs.gnu.org; Sun, 19 May 2019 07:40:31 -0400
Received: (qmail 53083 invoked by uid 3782); 19 May 2019 11:40:24 -0000
Received: from acm.muc.de (p2E5D561D.dip0.t-ipconnect.de [46.93.86.29]) by
 colin.muc.de (tmda-ofmipd) with ESMTP;
 Sun, 19 May 2019 13:40:23 +0200
Received: (qmail 6220 invoked by uid 1000); 19 May 2019 11:40:19 -0000
Date: Sun, 19 May 2019 11:40:19 +0000
To: Amos Bird <amosbird@HIDDEN>, Zhang Haijun <ccsmile2008@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Message-ID: <20190519114019.GA5262@ACM>
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
 <20190516161704.GA527@ACM> <871s0xop2o.fsf@HIDDEN>
 <20190517100118.GB5011@ACM> <87lfz5c7b5.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <87lfz5c7b5.fsf@HIDDEN>
User-Agent: Mutt/1.10.1 (2018-07-13)
X-Delivery-Agent: TMDA/1.1.12 (Macallan)
From: Alan Mackenzie <acm@HIDDEN>
X-Primary-Address: acm@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 35316
Cc: 35316 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello, Amos and Zhang.

First thing, apologies for the patch I sent you a few days ago.  It was
based on a misunderstanding, and it is total garbage!

The misunderstanding was the assumption that
`inhibit-modification-hooks' would be nil on entry to
`iedit-update-occurrences-2', and that leaving it nil would allow the
`before-change-functions' and `after-change-functions' hooks to run
normally.

In actual fact `inhibit-modification-hooks' is t at that point, and
cannot successfully be bound to nil.  So, both `before-change-functions'
and `after-change-functions' need to be called explicitly for successful
processing.

So, please disregard that previous patch from me, and try out instead
the patch below.  In C++ Mode it is somewhat slower, since it is
actually doing the change processing, but not unusably so.  Undo seems
to be working a bit faster too, though it is often not instantaneous as
one would wish (see below).

On Sat, May 18, 2019 at 01:35:58 +0800, Amos Bird wrote:

> Hi Alan!

> > Are we still talking about C++ Mode

> Yeah it's c++ mode but it can also be reproduced with c mode.
> The minute long frozen is caused mainly by the lsp-mode, howeveer
> it's still laggy after turning lsp off.

> > How big is your file?  Can you characterise it in any way?

> You can try emacs/src/xdisp.c . iediting all "make_fixnum",
> turning them into "make_fixnum_why_undo_redo_is_so_slow", and 
> undo.
> It's about 10-20 seconds freezing time here.

When I do this now (with the patch in place), undo works in two stages,
taking about 0.4s and 2.4s respectively on my machine.

> > It seems I have more work to do on this in any case.

As a matter of interest, could one of you please give me the name and
email address of the iedit-mode maintainer.  I haven't got a github
account, and don't want to create one, so I don't think I can get in
touch with her/him that way.

> Looking forward to it!

OK, here goes!



--- iedit-lib.el.orig	2019-05-19 10:55:31.681959998 +0000
+++ iedit-lib.el	2019-05-19 11:08:27.549988930 +0000
@@ -490,7 +490,9 @@
 
 (defun iedit-update-occurrences-2 (occurrence after beg end &optional change)
   ""
-  (let ((inhibit-modification-hooks t)
+  (let (;; (inhibit-modification-hooks t)
+        ;; Note: `inhibit-modification-hook' will already be non-nil when this
+	;; function is called.  Setting it to nil here doesn't work.
         (offset (- beg (overlay-start occurrence)))
         (value (buffer-substring-no-properties beg end)))
     (save-excursion
@@ -501,6 +503,9 @@
                    (ending (+ beginning (- end beg))))
               (when (not (eq another-occurrence occurrence))
                 (goto-char beginning)
+		(run-hook-with-args 'before-change-functions
+				    beginning
+				    (+ beginning change))
                 (insert-and-inherit value)
                 ;; todo: reconsider this change Quick fix for
                 ;; multi-occur occur-edit-mode: multi-occur depend on
@@ -517,13 +522,17 @@
         ;; deletion
         (dolist (another-occurrence (remove occurrence iedit-occurrences-overlays))
           (let ((beginning (+ (overlay-start another-occurrence) offset)))
+	    (goto-char beginning)
+	    (run-hook-with-args 'before-change-functions
+				beginning
+				(+ beginning change))
             (delete-region beginning (+ beginning change))
             (unless (eq beg end) ;; replacement
               (goto-char beginning)
               (insert-and-inherit value))
             (run-hook-with-args 'after-change-functions
                                 beginning
-                                (+ beginning (- beg end))
+                                (+ beginning (- end beg))
                                 change)))))))
 
 (defun iedit-next-occurrence ()


> regards,

> --
> Amos Bird
> amosbird@HIDDEN

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 17 May 2019 17:35:50 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri May 17 13:35:49 2019
Received: from localhost ([127.0.0.1]:58899 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hRglp-0006LK-Jr
	for submit <at> debbugs.gnu.org; Fri, 17 May 2019 13:35:49 -0400
Received: from mail-pl1-f178.google.com ([209.85.214.178]:36121)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <amosbird@HIDDEN>) id 1hRgln-0006L5-Ll
 for 35316 <at> debbugs.gnu.org; Fri, 17 May 2019 13:35:48 -0400
Received: by mail-pl1-f178.google.com with SMTP id d21so3665836plr.3
 for <35316 <at> debbugs.gnu.org>; Fri, 17 May 2019 10:35:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=references:user-agent:from:to:cc:subject:in-reply-to:date
 :message-id:mime-version;
 bh=PBTJHZQk4M6ncBTI893c5ZN4EOZRoIZkus9YoHF3wTs=;
 b=DxMNKkEHsYEi3ca2M11EkrW6J4JzxlqftBupFhBdk4uL054otecXjDTwdSqMcw5dvw
 bP1RUO0eSp3WOh1QHPD826tyr0rP4wPoxUU0SlYnLr6A3tf/yeFGze1SIp4UjKSQ0rdi
 ekxfKcExuMxRor5HzQkKFXhueO+TOKAchk7RTG7+nflm3SAceg1P4h+iIpyVNOXnClB6
 qFCBa+q/v3UXIiL8PEYV91g5yjaY4Q6Y6iwHtR1/cyn+J7weEXpbUY6uyLzimiqjwLlQ
 oML6FKp9OgWBt8xbMmKvA9yQVCXFVIuJbq0UPFOE/Jxrrz6L9b2+AeIhGwoKN8HH2mQa
 lpFg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:references:user-agent:from:to:cc:subject
 :in-reply-to:date:message-id:mime-version;
 bh=PBTJHZQk4M6ncBTI893c5ZN4EOZRoIZkus9YoHF3wTs=;
 b=S7BFlSEtl979sc/Y5qoTC2NeKm/V4SwDA8JUMmkSA39/EPqc6qIv1rhxELbggOe1H0
 sm9OysBHqPtre1Phl2NJUOsVRjagpitrtCi3UJGW4RKn8tEEBlPm4EB5Pg1H7gyMtcnT
 M7JsrXiTeQlQ4pHtGCJP077irrebe+gfe2qIf+DJrN8LwlZ1F/4C6F0YGqq6dTIIIqvD
 NJ0EwRV2bUO7XDspwnB6b9OiJtWIQbp0UCvhcZrenxVPBoXkoxQ0UdYRi+0nuSyA/zFJ
 TZraKSw/xBhj5XZ0TDz5zLlMAdd0w7zhtjMO5ErhwMqL03gwcZFnA/LIGWAwxodA5xp6
 LfHA==
X-Gm-Message-State: APjAAAURe0cmewx4SyVR4Z/qKNPbcPGEtH/tTB3la1OQ0620LjSKlH1u
 btm7+4q7n/8B2Vt2u0VyyqY=
X-Google-Smtp-Source: APXvYqxYiX7EMxHtYyAF00wJh9qzP22IhZV1GDXkqqpL/xfM8t82xqsXIgJCVTtVwQEju86+OGzdNw==
X-Received: by 2002:a17:902:63:: with SMTP id 90mr5096428pla.342.1558114541983; 
 Fri, 17 May 2019 10:35:41 -0700 (PDT)
Received: from localhost ([13.75.109.155])
 by smtp.gmail.com with ESMTPSA id k67sm15081040pfb.44.2019.05.17.10.35.40
 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);
 Fri, 17 May 2019 10:35:41 -0700 (PDT)
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
 <20190516161704.GA527@ACM> <871s0xop2o.fsf@HIDDEN>
 <20190517100118.GB5011@ACM>
User-agent: mu4e 1.1.0; emacs 27.0.50
From: Amos Bird <amosbird@HIDDEN>
To: Alan Mackenzie <acm@HIDDEN>
Subject: Re: bug#35316: 26.2;
 Emacs lags in c++-mode buffer when editing with iedit-mode on
In-reply-to: <20190517100118.GB5011@ACM>
Date: Sat, 18 May 2019 01:35:58 +0800
Message-ID: <87lfz5c7b5.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; format=flowed
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 35316
Cc: 35316 <at> debbugs.gnu.org, ccsmile2008@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


Hi Alan!

> Are we still talking about C++ Mode

Yeah it's c++ mode but it can also be reproduced with c mode.
The minute long frozen is caused mainly by the lsp-mode, howeveer
it's still laggy after turning lsp off.

> How big is your file?  Can you characterise it in any way?

You can try emacs/src/xdisp.c . iediting all "make_fixnum",
turning them into "make_fixnum_why_undo_redo_is_so_slow", and 
undo.
It's about 10-20 seconds freezing time here.

> It seems I have more work to do on this in any case.

Looking forward to it!

regards,

--
Amos Bird
amosbird@HIDDEN




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 17 May 2019 10:01:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri May 17 06:01:27 2019
Received: from localhost ([127.0.0.1]:57328 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hRZg7-0003O3-LA
	for submit <at> debbugs.gnu.org; Fri, 17 May 2019 06:01:27 -0400
Received: from colin.muc.de ([193.149.48.1]:19697 helo=mail.muc.de)
 by debbugs.gnu.org with smtp (Exim 4.84_2)
 (envelope-from <acm@HIDDEN>) id 1hRZg5-0003Ns-Oe
 for 35316 <at> debbugs.gnu.org; Fri, 17 May 2019 06:01:26 -0400
Received: (qmail 18207 invoked by uid 3782); 17 May 2019 10:01:19 -0000
Received: from acm.muc.de (p4FE15D06.dip0.t-ipconnect.de [79.225.93.6]) by
 colin.muc.de (tmda-ofmipd) with ESMTP;
 Fri, 17 May 2019 12:01:18 +0200
Received: (qmail 5571 invoked by uid 1000); 17 May 2019 10:01:18 -0000
Date: Fri, 17 May 2019 10:01:18 +0000
To: Amos Bird <amosbird@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Message-ID: <20190517100118.GB5011@ACM>
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
 <20190516161704.GA527@ACM> <871s0xop2o.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <871s0xop2o.fsf@HIDDEN>
User-Agent: Mutt/1.10.1 (2018-07-13)
X-Delivery-Agent: TMDA/1.1.12 (Macallan)
From: Alan Mackenzie <acm@HIDDEN>
X-Primary-Address: acm@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 35316
Cc: 35316 <at> debbugs.gnu.org, ccsmile2008@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello, Amos.

On Fri, May 17, 2019 at 09:19:11 +0800, Amos Bird wrote:

> Hello, this patch works as expected. Is there any similar 
> technique I can apply to undo-tree? After modifying hundreds of 
> copies using iedit, doing undo/redo freezes for several minutes.

Whoa there!

Are we still talking about C++ Mode (or one of the other modes in the CC
Mode family)?  How big is your file?  Can you characterise it in any way?
For example, does it contain lots of, or big, raw strings?

I noticed yesterday on a C++ test file with a very long raw string, that
although editing copies of a string segment (using iedit) was fast, undo
afterwards was very slow indeed (~1 minute).

So, perhaps your problem is the same as mine.  Perhaps you have
encountered a different problem.  It seems I have more work to do on this
in any case.

So, details, please!

> regards,
> Amos

[ .... ]

> --
> Amos Bird
> amosbird@HIDDEN

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 17 May 2019 01:19:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 16 21:19:06 2019
Received: from localhost ([127.0.0.1]:56882 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hRRWc-0007K1-BX
	for submit <at> debbugs.gnu.org; Thu, 16 May 2019 21:19:06 -0400
Received: from mail-pg1-f179.google.com ([209.85.215.179]:47096)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <amosbird@HIDDEN>)
 id 1hRRWW-0007J3-EV; Thu, 16 May 2019 21:19:04 -0400
Received: by mail-pg1-f179.google.com with SMTP id t187so2402647pgb.13;
 Thu, 16 May 2019 18:19:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=references:user-agent:from:to:cc:subject:in-reply-to:date
 :message-id:mime-version:content-transfer-encoding;
 bh=19y8iTcEaZG2TC9/rYFGl700lifFKU9sNr1ZsGymKWw=;
 b=i/rVlmg7XfgGDg1zdHAnAbMeQsU28NfUu4ylUTIHRXpe0mY3Ii1rrKHq81MCeCxgd+
 ejvKB6Q5AATYyoNi5b7UZK/QA1GgklhPkVxprfkm/RA0h49CYT9dMpwwYqmawS/J7vRt
 lRQRj7LDNlKXBcu73dsaKgwwhkNpVwqOn/11eFKd2EVqumZE+Q1OUUDknkkJvSCc8nAH
 awcIXhBbdDI6d4BgCVB9RBzmjYk9B+7/bjIaTScT3XO/Da8LTA5LKMiKSvWhWl+fwwXe
 k2ATnp67NbddcjKntyhS1wNBSo8u7diHfAhYS3JLp4LeJrffogvFH3GkfB7w4vuG1eSU
 QADg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:references:user-agent:from:to:cc:subject
 :in-reply-to:date:message-id:mime-version:content-transfer-encoding;
 bh=19y8iTcEaZG2TC9/rYFGl700lifFKU9sNr1ZsGymKWw=;
 b=L4SdidHI+skL3lhK70EZrljveKBiDa+PSl2IY5ePg1Q79qElyI1RO+7qWAdUvuk3tR
 q8YD/GR9ZM6r1dUV62YVTMbeG8APJsSnXBTdI3RLlzAsTT1lKvbLjt52SGcQ1Su3Djot
 fY9+peaZDomYUsN85nQnn1iY1W6oPpiiVbqk9Qq+WYSVXeDJxegtPZYNZbvh29ENQzgh
 Dw+GodbP1Kh4E0c1RAkfiQals3sO2rx+LWZVhpfUjfp2DmtJ0/+Yu9G5mbyE15Rte4co
 iPf69dfXYAKkNy56Zy8Trx4eQu5OjRabTAR+a93KtW23uibd3iKzya6+qJYkGrKKKwyO
 xDAw==
X-Gm-Message-State: APjAAAX5kUWHngXAXs69u7IKSmC1/aL0adNu4JVs37zd87ri6/a/pX0f
 j0SEzssEvQTZzcjvThnkS7fQiMDM3XNyqg==
X-Google-Smtp-Source: APXvYqwPZMJjDQz1PA33y6O81oKuVPAIq3VBh0yoD7BD597CgC+PQEwtRZX93D4mP/p/OOumSM1b6Q==
X-Received: by 2002:a63:5c5f:: with SMTP id n31mr54193858pgm.325.1558055934243; 
 Thu, 16 May 2019 18:18:54 -0700 (PDT)
Received: from localhost ([13.75.109.155])
 by smtp.gmail.com with ESMTPSA id l21sm9042192pff.40.2019.05.16.18.18.52
 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);
 Thu, 16 May 2019 18:18:53 -0700 (PDT)
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
 <20190516161704.GA527@ACM>
User-agent: mu4e 1.1.0; emacs 27.0.50
From: Amos Bird <amosbird@HIDDEN>
To: debbugs-submit <at> debbugs.gnu.org
Subject: Re: bug#35316: 26.2;
 Emacs lags in c++-mode buffer when editing with iedit-mode on
In-reply-to: <20190516161704.GA527@ACM>
Date: Fri, 17 May 2019 09:19:11 +0800
Message-ID: <871s0xop2o.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 35316
Cc: "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>,
 Stefan Monnier <monnier@HIDDEN>,
 Zhang Haijun <ccsmile2008@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


Hello, this patch works as expected. Is there any similar=20
technique I can apply to undo-tree? After modifying hundreds of=20
copies using iedit, doing undo/redo freezes for several minutes.

regards,
Amos

Alan Mackenzie <acm@HIDDEN> writes:

> Hello, Zhang.
>
> On Thu, May 16, 2019 at 15:46:33 +0000, Zhang Haijun wrote:
>
>
>> > =E5=9C=A8 2019=E5=B9=B45=E6=9C=8816=E6=97=A5=EF=BC=8C=E4=B8=8B=E5=8D=
=8811:04=EF=BC=8CAlan Mackenzie <acm@HIDDEN> =E5=86=99=E9=81=93=EF=BC=9A
>
>> > The problem is in the function iedit-update-occurrences-2.=20
>> > There,
>> > inhibit-modification-hooks is bound to t, and the many=20
>> > changes are made.
>> > The hook after-change-functions is called explicitly after=20
>> > each change.
>
>> > But before-change-functions is not called in this loop.  This=20
>> > is a very
>> > bad idea.  Unlike many modes, CC Mode has critical parts of=20
>> > its
>> > functionality in the before-change-functions hook, and=20
>> > depends on this
>> > hook and after-change-functions both being called for each=20
>> > change.
>
>> > When CC Mode detects after-change-functions being called=20
>> > without
>> > before-..., it enlarges the region to the whole buffer, calls
>> > c-before-change with this enlarged region, finally proceding=20
>> > with the
>> > rest of c-after-change.  It does this to protect its buffer's=20
>> > integrity.
>
>
>> It seems that this leads too much redundant work.
>
> What iedit-mode is doing with after-change-functions is=20
> definitely wrong,
> and will lead to misfunctioning in any major mode which uses
> before-change-functions, as CC Mode does.
>
>> > So, the lag with the multiple cursors is being caused by=20
>> > processing the
>> > entire buffer for each cursor, rather than just part of the=20
>> > buffer
>> > involved.
>
>> > So, why are you binding inhibit-modification-hooks to t and=20
>> > calling
>> > after-change-functions this way?  Why not just let the=20
>> > modification hooks
>> > run in the normal fashion?  What is it about=20
>> > before-change-functions
>> > which is bad in iedit-mode?
>
>> I=E2=80=99m not the developer of iedit.
>
> Would you please consider forwarding this email to the=20
> maintainer of
> iedit.  Thanks!
>
>> I find a comment in the function iedit-update-occurrences-2:
>
>>                 ;; todo: reconsider this change Quick fix for
>>                 ;; multi-occur occur-edit-mode: multi-occur=20
>>                 depend on
>>                 ;; after-change-functions to update original
>>                 ;; buffer. Since inhibit-modification-hooks is=20
>>                 set to
>>                 ;; non-nil, after-change-functions hooks are=20
>>                 not going
>>                 ;; to be called for the changes of other=20
>>                 occurrences.
>>                 ;; So run the hook here.
>
> I saw this comment too.  I had a look at the repository on=20
> github, and
> this handling of after-change-functions has been there since at=20
> least
> 2012.  :-(
>
> When I comment out the offending bits of code from
> iedit-update-occurrences-2, like this:
>
>
>
> --- iedit-lib.el~	2019-04-19 08:03:29.000000000 +0000
> +++ iedit-lib.el	2019-05-16 15:58:27.158575662 +0000
> @@ -490,7 +490,7 @@
>
>  (defun iedit-update-occurrences-2 (occurrence after beg end=20
>  &optional change)
>    ""
> -  (let ((inhibit-modification-hooks t)
> +  (let (;; (inhibit-modification-hooks t)
>          (offset (- beg (overlay-start occurrence)))
>          (value (buffer-substring-no-properties beg end)))
>      (save-excursion
> @@ -509,10 +509,11 @@
>                  ;; non-nil, after-change-functions hooks are=20
>                  not going
>                  ;; to be called for the changes of other=20
>                  occurrences.
>                  ;; So run the hook here.
> -                (run-hook-with-args 'after-change-functions
> -                                    beginning
> -                                    ending
> -                                    change))
> +                ;; (run-hook-with-args 'after-change-functions
> +                ;;                     beginning
> +                ;;                     ending
> +                ;;                     change)
> +		)
>                (iedit-move-conjoined-overlays=20
>                another-occurrence)))
>          ;; deletion
>          (dolist (another-occurrence (remove occurrence=20
>          iedit-occurrences-overlays))
> @@ -521,10 +522,11 @@
>              (unless (eq beg end) ;; replacement
>                (goto-char beginning)
>                (insert-and-inherit value))
> -            (run-hook-with-args 'after-change-functions
> -                                beginning
> -                                (+ beginning (- beg end))
> -                                change)))))))
> +            ;; (run-hook-with-args 'after-change-functions
> +            ;;                     beginning
> +            ;;                     (+ beginning (- beg end))
> +            ;;                     change)
> +	    ))))))
>
>  (defun iedit-next-occurrence ()
>    "Move forward to the next occurrence in the `iedit'.
>
>
>
> , then iedit-mode and C++ Mode work well together.  In a C++=20
> Mode test
> buffer, just over 16k long, on a variable with 75 copies in it,=20
> I press
> C-;.  On editing the copies of these variables, the response is=20
> now
> instantaneous.
>
> The question remaining is what was the problem which led to this=20
> mistaken
> after-change-functions handling?  Is this problem still there?


--
Amos Bird
amosbird@HIDDEN




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 17 May 2019 00:48:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 16 20:48:30 2019
Received: from localhost ([127.0.0.1]:56834 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hRR30-0006Ns-Dp
	for submit <at> debbugs.gnu.org; Thu, 16 May 2019 20:48:30 -0400
Received: from mail-oln040092253088.outbound.protection.outlook.com
 ([40.92.253.88]:6049 helo=APC01-SG2-obe.outbound.protection.outlook.com)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hRR2x-0006NZ-Iq
 for 35316 <at> debbugs.gnu.org; Thu, 16 May 2019 20:48:29 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=bNDevaqNihN5QwrMEFvnO7PgmPgHa6Uj/4U+i4GzU4o=;
 b=VSc4bb7cpiM6HbVXHDtOV0inVwc8UlbiOeRfadnhdVI8tLbaTOox4U3sxAg5w2O8RqLc/A5oHQPbFKag2LocGlvib74lZlCxNzcMF3ifPf0G56m7wgfqSqLJIZnJ9Qite8VaKmhVSHOEosXY35n3otfQJsLZ2ManTYbVuQUhoG+1y9VM+sBdEL7dUY4lI1KoWgJ++zOpxwhrSKxPd7Dfwm+Q99N4h0RrH0faq+u6dWI/yvsuLrk+h9B0fRyFY/6OpZ42hJTAV9Qr1LoSmVJhk+8YJWihnW+e01TDaMdavO8FHe2dYk9izbR5XDP0JQYBQC5lDTFgFZ43G2t+XmNzCA==
Received: from SG2APC01FT015.eop-APC01.prod.protection.outlook.com
 (10.152.250.59) by SG2APC01HT005.eop-APC01.prod.protection.outlook.com
 (10.152.250.192) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1856.11; Fri, 17 May
 2019 00:48:18 +0000
Received: from TY2PR06MB2766.apcprd06.prod.outlook.com (10.152.250.54) by
 SG2APC01FT015.mail.protection.outlook.com (10.152.250.181) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.1856.11 via Frontend Transport; Fri, 17 May 2019 00:48:18 +0000
Received: from TY2PR06MB2766.apcprd06.prod.outlook.com
 ([fe80::b4e6:5763:c0b3:9f37]) by TY2PR06MB2766.apcprd06.prod.outlook.com
 ([fe80::b4e6:5763:c0b3:9f37%4]) with mapi id 15.20.1900.010; Fri, 17 May 2019
 00:48:18 +0000
From: Zhang Haijun <ccsmile2008@HIDDEN>
To: Alan Mackenzie <acm@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Topic: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Index: AQHVDEo3VmPGoI/nGkabXIXRxzwnog==
Date: Fri, 17 May 2019 00:48:18 +0000
Message-ID: <TY2PR06MB27669CC666C7B2DCCB742399A80B0@HIDDEN>
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
 <20190516161704.GA527@ACM>
In-Reply-To: <20190516161704.GA527@ACM>
Accept-Language: zh-CN, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: HK2PR04CA0046.apcprd04.prod.outlook.com
 (2603:1096:202:14::14) To TY2PR06MB2766.apcprd06.prod.outlook.com
 (2603:1096:404:35::16)
x-incomingtopheadermarker: OriginalChecksum:F3ED21414C8F53477B869646E032691CD4DE150BE50F297E0D1DEA8557FF46E6;
 UpperCasedChecksum:FA6379C9AB5B946BBBFC16A2EC0841DCC77DFBB972D25CB6E63E548387B0EA6D;
 SizeAsReceived:7691; Count:50
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: Apple Mail (2.3445.9.1)
x-tmn: [D2I3s61uPUAJ8YuTORWAV3N0DXdSPZwm]
x-microsoft-original-message-id: <D7DA8AB6-635E-4A83-9A08-D0AAD9FAD689@HIDDEN>
x-ms-publictraffictype: Email
x-incomingheadercount: 50
x-eopattributedmessage: 0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(5050001)(7020095)(20181119110)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031323274)(2017031324274)(2017031322404)(1601125500)(1603101475)(1701031045);
 SRVR:SG2APC01HT005; 
x-ms-traffictypediagnostic: SG2APC01HT005:
x-microsoft-antispam-message-info: leS+FSC/ry/6eeLTHSzULITPZpaT4Ligf0vC9evrTfiLBWl3t6N6ynfwdTiJa7MiXYEPlGRWa4q7YyBQJBEIXGz7GpCJgCJ8G3IX9p7M4iiUPqx9gei7QLAIuZ2djmP7eH+N6vE+tq98WEQF2AO7TJcFkghedLcsA4FuXEZX3C/jHIpbdyz1tegwa3CDhER8
Content-Type: text/plain; charset="gb2312"
Content-ID: <FB2EE20648E52B42ADAF20D6D2E1A76B@HIDDEN>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-Network-Message-Id: 10d8a652-9f7a-4d98-3276-08d6da615a4a
X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-originalarrivaltime: 17 May 2019 00:48:18.2917 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Internet
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2APC01HT005
X-Spam-Score: 0.2 (/)
X-Debbugs-Envelope-To: 35316
Cc: Stefan Monnier <monnier@HIDDEN>,
 "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.8 (/)

DQo+PiBJoa9tIG5vdCB0aGUgZGV2ZWxvcGVyIG9mIGllZGl0Lg0KPiANCj4gV291bGQgeW91IHBs
ZWFzZSBjb25zaWRlciBmb3J3YXJkaW5nIHRoaXMgZW1haWwgdG8gdGhlIG1haW50YWluZXIgb2YN
Cj4gaWVkaXQuICBUaGFua3MhDQo+IA0KDQpEb25lLg0KDQo+IA0KPiBJIHNhdyB0aGlzIGNvbW1l
bnQgdG9vLiAgSSBoYWQgYSBsb29rIGF0IHRoZSByZXBvc2l0b3J5IG9uIGdpdGh1YiwgYW5kDQo+
IHRoaXMgaGFuZGxpbmcgb2YgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyBoYXMgYmVlbiB0aGVyZSBz
aW5jZSBhdCBsZWFzdA0KPiAyMDEyLiAgOi0oDQo+IA0KPiBXaGVuIEkgY29tbWVudCBvdXQgdGhl
IG9mZmVuZGluZyBiaXRzIG9mIGNvZGUgZnJvbQ0KPiBpZWRpdC11cGRhdGUtb2NjdXJyZW5jZXMt
MiwgbGlrZSB0aGlzOg0KPiANCj4gDQo+IA0KPiAtLS0gaWVkaXQtbGliLmVsfgkyMDE5LTA0LTE5
IDA4OjAzOjI5LjAwMDAwMDAwMCArMDAwMA0KPiArKysgaWVkaXQtbGliLmVsCTIwMTktMDUtMTYg
MTU6NTg6MjcuMTU4NTc1NjYyICswMDAwDQo+IEBAIC00OTAsNyArNDkwLDcgQEANCj4gDQo+IChk
ZWZ1biBpZWRpdC11cGRhdGUtb2NjdXJyZW5jZXMtMiAob2NjdXJyZW5jZSBhZnRlciBiZWcgZW5k
ICZvcHRpb25hbCBjaGFuZ2UpDQo+ICAgIiINCj4gLSAgKGxldCAoKGluaGliaXQtbW9kaWZpY2F0
aW9uLWhvb2tzIHQpDQo+ICsgIChsZXQgKDs7IChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0
KQ0KPiAgICAgICAgIChvZmZzZXQgKC0gYmVnIChvdmVybGF5LXN0YXJ0IG9jY3VycmVuY2UpKSkN
Cj4gICAgICAgICAodmFsdWUgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBiZWcgZW5k
KSkpDQo+ICAgICAoc2F2ZS1leGN1cnNpb24NCj4gQEAgLTUwOSwxMCArNTA5LDExIEBADQo+ICAg
ICAgICAgICAgICAgICA7OyBub24tbmlsLCBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIGhvb2tzIGFy
ZSBub3QgZ29pbmcNCj4gICAgICAgICAgICAgICAgIDs7IHRvIGJlIGNhbGxlZCBmb3IgdGhlIGNo
YW5nZXMgb2Ygb3RoZXIgb2NjdXJyZW5jZXMuDQo+ICAgICAgICAgICAgICAgICA7OyBTbyBydW4g
dGhlIGhvb2sgaGVyZS4NCj4gLSAgICAgICAgICAgICAgICAocnVuLWhvb2std2l0aC1hcmdzICdh
ZnRlci1jaGFuZ2UtZnVuY3Rpb25zDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiZWdpbm5pbmcNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZGluZw0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlKSkNCj4g
KyAgICAgICAgICAgICAgICA7OyAocnVuLWhvb2std2l0aC1hcmdzICdhZnRlci1jaGFuZ2UtZnVu
Y3Rpb25zDQo+ICsgICAgICAgICAgICAgICAgOzsgICAgICAgICAgICAgICAgICAgICBiZWdpbm5p
bmcNCj4gKyAgICAgICAgICAgICAgICA7OyAgICAgICAgICAgICAgICAgICAgIGVuZGluZw0KPiAr
ICAgICAgICAgICAgICAgIDs7ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlKQ0KPiArCQkpDQo+
ICAgICAgICAgICAgICAgKGllZGl0LW1vdmUtY29uam9pbmVkLW92ZXJsYXlzIGFub3RoZXItb2Nj
dXJyZW5jZSkpKQ0KPiAgICAgICAgIDs7IGRlbGV0aW9uDQo+ICAgICAgICAgKGRvbGlzdCAoYW5v
dGhlci1vY2N1cnJlbmNlIChyZW1vdmUgb2NjdXJyZW5jZSBpZWRpdC1vY2N1cnJlbmNlcy1vdmVy
bGF5cykpDQo+IEBAIC01MjEsMTAgKzUyMiwxMSBAQA0KPiAgICAgICAgICAgICAodW5sZXNzIChl
cSBiZWcgZW5kKSA7OyByZXBsYWNlbWVudA0KPiAgICAgICAgICAgICAgIChnb3RvLWNoYXIgYmVn
aW5uaW5nKQ0KPiAgICAgICAgICAgICAgIChpbnNlcnQtYW5kLWluaGVyaXQgdmFsdWUpKQ0KPiAt
ICAgICAgICAgICAgKHJ1bi1ob29rLXdpdGgtYXJncyAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucw0K
PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcNCj4gLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCsgYmVnaW5uaW5nICgtIGJlZyBlbmQpKQ0KPiAtICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UpKSkpKSkpDQo+ICsgICAgICAgICAg
ICA7OyAocnVuLWhvb2std2l0aC1hcmdzICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zDQo+ICsgICAg
ICAgICAgICA7OyAgICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZw0KPiArICAgICAgICAgICAg
OzsgICAgICAgICAgICAgICAgICAgICAoKyBiZWdpbm5pbmcgKC0gYmVnIGVuZCkpDQo+ICsgICAg
ICAgICAgICA7OyAgICAgICAgICAgICAgICAgICAgIGNoYW5nZSkNCj4gKwkgICAgKSkpKSkpDQo+
IA0KPiAoZGVmdW4gaWVkaXQtbmV4dC1vY2N1cnJlbmNlICgpDQo+ICAgIk1vdmUgZm9yd2FyZCB0
byB0aGUgbmV4dCBvY2N1cnJlbmNlIGluIHRoZSBgaWVkaXQnLg0KPiANCj4gDQo+IA0KPiAsIHRo
ZW4gaWVkaXQtbW9kZSBhbmQgQysrIE1vZGUgd29yayB3ZWxsIHRvZ2V0aGVyLiAgSW4gYSBDKysg
TW9kZSB0ZXN0DQo+IGJ1ZmZlciwganVzdCBvdmVyIDE2ayBsb25nLCBvbiBhIHZhcmlhYmxlIHdp
dGggNzUgY29waWVzIGluIGl0LCBJIHByZXNzDQo+IEMtOy4gIE9uIGVkaXRpbmcgdGhlIGNvcGll
cyBvZiB0aGVzZSB2YXJpYWJsZXMsIHRoZSByZXNwb25zZSBpcyBub3cNCj4gaW5zdGFudGFuZW91
cy4NCj4gDQoNCkkgdHJpZWQgeW91ciBwYXRjaC4gQW5kIGl0IHdvcmtzIGFzIHlvdSBzYWllZC4g
Tm8gbGFncy4NCg0KDQoNCg==




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 16 May 2019 16:17:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 16 12:17:20 2019
Received: from localhost ([127.0.0.1]:56173 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hRJ4K-0002nn-4s
	for submit <at> debbugs.gnu.org; Thu, 16 May 2019 12:17:20 -0400
Received: from colin.muc.de ([193.149.48.1]:45723 helo=mail.muc.de)
 by debbugs.gnu.org with smtp (Exim 4.84_2)
 (envelope-from <acm@HIDDEN>) id 1hRJ4H-0002nc-Kb
 for 35316 <at> debbugs.gnu.org; Thu, 16 May 2019 12:17:18 -0400
Received: (qmail 4628 invoked by uid 3782); 16 May 2019 16:17:05 -0000
Received: from acm.muc.de (p4FE15BED.dip0.t-ipconnect.de [79.225.91.237]) by
 colin.muc.de (tmda-ofmipd) with ESMTP;
 Thu, 16 May 2019 18:17:04 +0200
Received: (qmail 1361 invoked by uid 1000); 16 May 2019 16:17:04 -0000
Date: Thu, 16 May 2019 16:17:04 +0000
To: Zhang Haijun <ccsmile2008@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Message-ID: <20190516161704.GA527@ACM>
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
 <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
User-Agent: Mutt/1.10.1 (2018-07-13)
X-Delivery-Agent: TMDA/1.1.12 (Macallan)
From: Alan Mackenzie <acm@HIDDEN>
X-Primary-Address: acm@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 35316
Cc: Stefan Monnier <monnier@HIDDEN>,
 "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello, Zhang.

On Thu, May 16, 2019 at 15:46:33 +0000, Zhang Haijun wrote:


> > 在 2019年5月16日,下午11:04,Alan Mackenzie <acm@HIDDEN> 写道:

> > The problem is in the function iedit-update-occurrences-2.  There,
> > inhibit-modification-hooks is bound to t, and the many changes are made.
> > The hook after-change-functions is called explicitly after each change.

> > But before-change-functions is not called in this loop.  This is a very
> > bad idea.  Unlike many modes, CC Mode has critical parts of its
> > functionality in the before-change-functions hook, and depends on this
> > hook and after-change-functions both being called for each change.

> > When CC Mode detects after-change-functions being called without
> > before-..., it enlarges the region to the whole buffer, calls
> > c-before-change with this enlarged region, finally proceding with the
> > rest of c-after-change.  It does this to protect its buffer's integrity.


> It seems that this leads too much redundant work.

What iedit-mode is doing with after-change-functions is definitely wrong,
and will lead to misfunctioning in any major mode which uses
before-change-functions, as CC Mode does.

> > So, the lag with the multiple cursors is being caused by processing the
> > entire buffer for each cursor, rather than just part of the buffer
> > involved.

> > So, why are you binding inhibit-modification-hooks to t and calling
> > after-change-functions this way?  Why not just let the modification hooks
> > run in the normal fashion?  What is it about before-change-functions
> > which is bad in iedit-mode?

> I’m not the developer of iedit.

Would you please consider forwarding this email to the maintainer of
iedit.  Thanks!

> I find a comment in the function iedit-update-occurrences-2:

>                 ;; todo: reconsider this change Quick fix for
>                 ;; multi-occur occur-edit-mode: multi-occur depend on
>                 ;; after-change-functions to update original
>                 ;; buffer. Since inhibit-modification-hooks is set to
>                 ;; non-nil, after-change-functions hooks are not going
>                 ;; to be called for the changes of other occurrences.
>                 ;; So run the hook here.

I saw this comment too.  I had a look at the repository on github, and
this handling of after-change-functions has been there since at least
2012.  :-(

When I comment out the offending bits of code from
iedit-update-occurrences-2, like this:



--- iedit-lib.el~	2019-04-19 08:03:29.000000000 +0000
+++ iedit-lib.el	2019-05-16 15:58:27.158575662 +0000
@@ -490,7 +490,7 @@
 
 (defun iedit-update-occurrences-2 (occurrence after beg end &optional change)
   ""
-  (let ((inhibit-modification-hooks t)
+  (let (;; (inhibit-modification-hooks t)
         (offset (- beg (overlay-start occurrence)))
         (value (buffer-substring-no-properties beg end)))
     (save-excursion
@@ -509,10 +509,11 @@
                 ;; non-nil, after-change-functions hooks are not going
                 ;; to be called for the changes of other occurrences.
                 ;; So run the hook here.
-                (run-hook-with-args 'after-change-functions
-                                    beginning
-                                    ending
-                                    change))
+                ;; (run-hook-with-args 'after-change-functions
+                ;;                     beginning
+                ;;                     ending
+                ;;                     change)
+		)
               (iedit-move-conjoined-overlays another-occurrence)))
         ;; deletion
         (dolist (another-occurrence (remove occurrence iedit-occurrences-overlays))
@@ -521,10 +522,11 @@
             (unless (eq beg end) ;; replacement
               (goto-char beginning)
               (insert-and-inherit value))
-            (run-hook-with-args 'after-change-functions
-                                beginning
-                                (+ beginning (- beg end))
-                                change)))))))
+            ;; (run-hook-with-args 'after-change-functions
+            ;;                     beginning
+            ;;                     (+ beginning (- beg end))
+            ;;                     change)
+	    ))))))
 
 (defun iedit-next-occurrence ()
   "Move forward to the next occurrence in the `iedit'.



, then iedit-mode and C++ Mode work well together.  In a C++ Mode test
buffer, just over 16k long, on a variable with 75 copies in it, I press
C-;.  On editing the copies of these variables, the response is now
instantaneous.

The question remaining is what was the problem which led to this mistaken
after-change-functions handling?  Is this problem still there?

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 16 May 2019 15:46:48 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 16 11:46:48 2019
Received: from localhost ([127.0.0.1]:56131 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hRIal-0001w3-JW
	for submit <at> debbugs.gnu.org; Thu, 16 May 2019 11:46:48 -0400
Received: from mail-oln040092255028.outbound.protection.outlook.com
 ([40.92.255.28]:6022 helo=APC01-HK2-obe.outbound.protection.outlook.com)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hRIag-0001vm-Av
 for 35316 <at> debbugs.gnu.org; Thu, 16 May 2019 11:46:43 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=odlebkPm/2QdOykzg8yHIVUsxNNNTUTQhJ9YrjOOyE0=;
 b=MkH54hBtNJ023tc6oI5evlSCaHYY4No1dg5nVwMlyslR4U41WKunO310WmjMKm/rJfwuTuVbjpC/ngXlZXaIv3DC+KkPqg3cjUTZ7mm6j8y8+daQoJ/M1Sq8VKJtoLKjBViyPHFzDylkT4ldm/YmrZchfGxFii2eKenHMbNbn1pPbaG1Gbnyhk+7KMDzVTW1IAe7k9dKv7mKnpHenCkr+ofWhWClliAhIYSFSxGl246kwADcIM91skOTschCp03Sxtt+T1VkBpuQLNT/5b1bOc0fy3SSlxJP5IhyP5iq3lp8/cJx8zZ6Dl1e/MRn2QVAH4gZMrfEK1FvHe+HRd2IzA==
Received: from SG2APC01FT049.eop-APC01.prod.protection.outlook.com
 (10.152.250.56) by SG2APC01HT247.eop-APC01.prod.protection.outlook.com
 (10.152.251.118) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1856.11; Thu, 16 May
 2019 15:46:33 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com (10.152.250.51) by
 SG2APC01FT049.mail.protection.outlook.com (10.152.251.207) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.1900.16 via Frontend Transport; Thu, 16 May 2019 15:46:33 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::9403:ee98:34ab:76e9]) by PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::9403:ee98:34ab:76e9%3]) with mapi id 15.20.1878.024; Thu, 16 May 2019
 15:46:33 +0000
From: Zhang Haijun <ccsmile2008@HIDDEN>
To: Alan Mackenzie <acm@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Topic: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Index: AQHVC/6JpX3O+izWQUefKmQHw1R/FQ==
Date: Thu, 16 May 2019 15:46:33 +0000
Message-ID: <PS1PR06MB2759849B039B99A23B463011A80A0@HIDDEN>
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
 <20190516150457.GA639@ACM>
In-Reply-To: <20190516150457.GA639@ACM>
Accept-Language: zh-CN, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: HK0PR03CA0099.apcprd03.prod.outlook.com
 (2603:1096:203:b0::15) To PS1PR06MB2759.apcprd06.prod.outlook.com
 (2603:1096:803:46::13)
x-incomingtopheadermarker: OriginalChecksum:9A90B4493DD88B22CE28C292B0D27BACFE208459F0359451322380FFC3344683;
 UpperCasedChecksum:994235A6D1E9E321D30A7C2E9B28AC2A61E9F4AF5FE6C8C85946CC3266BE68CE;
 SizeAsReceived:7578; Count:50
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: Apple Mail (2.3445.9.1)
x-tmn: [7eQYNriV4pHDBMStkfhWVDlcDFTo8wfw]
x-microsoft-original-message-id: <93761AC2-7A63-44D8-AB9E-D9D000405458@HIDDEN>
x-ms-publictraffictype: Email
x-incomingheadercount: 50
x-eopattributedmessage: 0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(5050001)(7020095)(20181119110)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031323274)(2017031324274)(2017031322404)(1601125500)(1603101475)(1701031045);
 SRVR:SG2APC01HT247; 
x-ms-traffictypediagnostic: SG2APC01HT247:
x-microsoft-antispam-message-info: yNtk7Imv+ilylJlfJdLqbt1xminT8kn6iLp2BnfgSBGd47CzEfqXjSzS821vsY4jYeh4cBbbXhJoH8KrRwqBQ41b1jPvqgZopG33IqnxhYkpTho/cF50lA/93FTR9Vrmzm2XJPFhuYyIdniNZdxCSFbZXi3BaPGxkGJx5/KY5HydNI+fE++OvIRskSS6S2Ht
Content-Type: text/plain; charset="gb2312"
Content-ID: <C66972DFA8E49C428D1381311481CE64@HIDDEN>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-Network-Message-Id: 4393bbec-e22c-4440-1b5e-08d6da15abde
X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 May 2019 15:46:33.4680 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Internet
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2APC01HT247
X-Spam-Score: 0.2 (/)
X-Debbugs-Envelope-To: 35316
Cc: Stefan Monnier <monnier@HIDDEN>,
 "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.8 (/)

DQoNCj4g1NogMjAxOcTqNdTCMTbI1aOsz8LO5zExOjA0o6xBbGFuIE1hY2tlbnppZSA8YWNtQG11
Yy5kZT4g0LS1wKO6DQo+IA0KPiBUaGUgcHJvYmxlbSBpcyBpbiB0aGUgZnVuY3Rpb24gaWVkaXQt
dXBkYXRlLW9jY3VycmVuY2VzLTIuICBUaGVyZSwNCj4gaW5oaWJpdC1tb2RpZmljYXRpb24taG9v
a3MgaXMgYm91bmQgdG8gdCwgYW5kIHRoZSBtYW55IGNoYW5nZXMgYXJlIG1hZGUuDQo+IFRoZSBo
b29rIGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMgaXMgY2FsbGVkIGV4cGxpY2l0bHkgYWZ0ZXIgZWFj
aCBjaGFuZ2UuDQo+IA0KPiBCdXQgYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMgaXMgbm90IGNhbGxl
ZCBpbiB0aGlzIGxvb3AuICBUaGlzIGlzIGEgdmVyeQ0KPiBiYWQgaWRlYS4gIFVubGlrZSBtYW55
IG1vZGVzLCBDQyBNb2RlIGhhcyBjcml0aWNhbCBwYXJ0cyBvZiBpdHMNCj4gZnVuY3Rpb25hbGl0
eSBpbiB0aGUgYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMgaG9vaywgYW5kIGRlcGVuZHMgb24gdGhp
cw0KPiBob29rIGFuZCBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIGJvdGggYmVpbmcgY2FsbGVkIGZv
ciBlYWNoIGNoYW5nZS4NCj4gDQo+IFdoZW4gQ0MgTW9kZSBkZXRlY3RzIGFmdGVyLWNoYW5nZS1m
dW5jdGlvbnMgYmVpbmcgY2FsbGVkIHdpdGhvdXQNCj4gYmVmb3JlLS4uLiwgaXQgZW5sYXJnZXMg
dGhlIHJlZ2lvbiB0byB0aGUgd2hvbGUgYnVmZmVyLCBjYWxscw0KPiBjLWJlZm9yZS1jaGFuZ2Ug
d2l0aCB0aGlzIGVubGFyZ2VkIHJlZ2lvbiwgZmluYWxseSBwcm9jZWRpbmcgd2l0aCB0aGUNCj4g
cmVzdCBvZiBjLWFmdGVyLWNoYW5nZS4gIEl0IGRvZXMgdGhpcyB0byBwcm90ZWN0IGl0cyBidWZm
ZXIncyBpbnRlZ3JpdHkuDQo+IA0KDQpJdCBzZWVtcyB0aGF0IHRoaXMgbGVhZHMgdG9vIG11Y2gg
cmVkdW5kYW50IHdvcmsuDQoNCj4gU28sIHRoZSBsYWcgd2l0aCB0aGUgbXVsdGlwbGUgY3Vyc29y
cyBpcyBiZWluZyBjYXVzZWQgYnkgcHJvY2Vzc2luZyB0aGUNCj4gZW50aXJlIGJ1ZmZlciBmb3Ig
ZWFjaCBjdXJzb3IsIHJhdGhlciB0aGFuIGp1c3QgcGFydCBvZiB0aGUgYnVmZmVyDQo+IGludm9s
dmVkLg0KPiANCj4gU28sIHdoeSBhcmUgeW91IGJpbmRpbmcgaW5oaWJpdC1tb2RpZmljYXRpb24t
aG9va3MgdG8gdCBhbmQgY2FsbGluZw0KPiBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIHRoaXMgd2F5
PyAgV2h5IG5vdCBqdXN0IGxldCB0aGUgbW9kaWZpY2F0aW9uIGhvb2tzDQo+IHJ1biBpbiB0aGUg
bm9ybWFsIGZhc2hpb24/ICBXaGF0IGlzIGl0IGFib3V0IGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25z
DQo+IHdoaWNoIGlzIGJhZCBpbiBpZWRpdC1tb2RlPw0KDQpJoa9tIG5vdCB0aGUgZGV2ZWxvcGVy
IG9mIGllZGl0LiBJIGZpbmQgYSBjb21tZW50IGluIHRoZSBmdW5jdGlvbiBpZWRpdC11cGRhdGUt
b2NjdXJyZW5jZXMtMjoNCg0KICAgICAgICAgICAgICAgIDs7IHRvZG86IHJlY29uc2lkZXIgdGhp
cyBjaGFuZ2UgUXVpY2sgZml4IGZvcg0KICAgICAgICAgICAgICAgIDs7IG11bHRpLW9jY3VyIG9j
Y3VyLWVkaXQtbW9kZTogbXVsdGktb2NjdXIgZGVwZW5kIG9uDQogICAgICAgICAgICAgICAgOzsg
YWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyB0byB1cGRhdGUgb3JpZ2luYWwNCiAgICAgICAgICAgICAg
ICA7OyBidWZmZXIuIFNpbmNlIGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIGlzIHNldCB0bw0K
ICAgICAgICAgICAgICAgIDs7IG5vbi1uaWwsIGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMgaG9va3Mg
YXJlIG5vdCBnb2luZw0KICAgICAgICAgICAgICAgIDs7IHRvIGJlIGNhbGxlZCBmb3IgdGhlIGNo
YW5nZXMgb2Ygb3RoZXIgb2NjdXJyZW5jZXMuDQogICAgICAgICAgICAgICAgOzsgU28gcnVuIHRo
ZSBob29rIGhlcmUuDQoNCg0K




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 16 May 2019 15:05:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 16 11:05:13 2019
Received: from localhost ([127.0.0.1]:56074 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hRHwX-0000sS-AU
	for submit <at> debbugs.gnu.org; Thu, 16 May 2019 11:05:13 -0400
Received: from colin.muc.de ([193.149.48.1]:52222 helo=mail.muc.de)
 by debbugs.gnu.org with smtp (Exim 4.84_2)
 (envelope-from <acm@HIDDEN>) id 1hRHwS-0000sB-VS
 for 35316 <at> debbugs.gnu.org; Thu, 16 May 2019 11:05:10 -0400
Received: (qmail 74442 invoked by uid 3782); 16 May 2019 15:04:58 -0000
Received: from acm.muc.de (p4FE15BED.dip0.t-ipconnect.de [79.225.91.237]) by
 colin.muc.de (tmda-ofmipd) with ESMTP;
 Thu, 16 May 2019 17:04:57 +0200
Received: (qmail 803 invoked by uid 1000); 16 May 2019 15:04:57 -0000
Date: Thu, 16 May 2019 15:04:57 +0000
To: Zhang Haijun <ccsmile2008@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Message-ID: <20190516150457.GA639@ACM>
References: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
User-Agent: Mutt/1.10.1 (2018-07-13)
X-Delivery-Agent: TMDA/1.1.12 (Macallan)
From: Alan Mackenzie <acm@HIDDEN>
X-Primary-Address: acm@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 35316
Cc: Stefan Monnier <monnier@HIDDEN>, 35316 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello, Zhang.

On Fri, Apr 19, 2019 at 00:22:59 +0000, Zhang Haijun wrote:
> iedit.el(https://github.com/victorhge/iedit) is a multiple-cursors like
> package. It can setup more than one virtual cursors at different
> positions in the buffer. When you edit in the buffer, it clones changes
> at the main cursor to all other virtual cursors.

> The problem is that: Emacs lags too much when editing in c++-mode with
> iedit-mode on.  Profiler shows that cpu are most used by
> c-after-change.

The problem is in the function iedit-update-occurrences-2.  There,
inhibit-modification-hooks is bound to t, and the many changes are made.
The hook after-change-functions is called explicitly after each change.

But before-change-functions is not called in this loop.  This is a very
bad idea.  Unlike many modes, CC Mode has critical parts of its
functionality in the before-change-functions hook, and depends on this
hook and after-change-functions both being called for each change.

When CC Mode detects after-change-functions being called without
before-..., it enlarges the region to the whole buffer, calls
c-before-change with this enlarged region, finally proceding with the
rest of c-after-change.  It does this to protect its buffer's integrity.

So, the lag with the multiple cursors is being caused by processing the
entire buffer for each cursor, rather than just part of the buffer
involved.

So, why are you binding inhibit-modification-hooks to t and calling
after-change-functions this way?  Why not just let the modification hooks
run in the normal fashion?  What is it about before-change-functions
which is bad in iedit-mode?


> The related issue: https://github.com/victorhge/iedit/issues/83



> In GNU Emacs 26.2 (build 1, x86_64-apple-darwin17.7.0, NS appkit-1561.60 Version 10.13.6 (Build 17G6030))
>  of 2019-04-13 built on jundeMac
> Windowing system distributor 'Apple', version 10.3.1561
> Recent messages:
> For information about GNU Emacs and the GNU system, type C-h C-a.

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 9 May 2019 13:23:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 09 09:23:53 2019
Received: from localhost ([127.0.0.1]:35002 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hOj1d-0002RR-FL
	for submit <at> debbugs.gnu.org; Thu, 09 May 2019 09:23:53 -0400
Received: from mail-oln040092254020.outbound.protection.outlook.com
 ([40.92.254.20]:56864 helo=APC01-PU1-obe.outbound.protection.outlook.com)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hOj1b-0002R9-CL
 for 35316 <at> debbugs.gnu.org; Thu, 09 May 2019 09:23:52 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=QLQLXzvq9IsBhqRUVuYp93jV7wprolA9MbMSph6mi54=;
 b=f77BpSpw24Qr8KPzDmZD9+GpAgOj7bU9yp+fJt5h9yVNv8mPOlfW3q64AUDJ0nn5Kv1PKwC2UD31xlo7ewBradqwYSbEX1HssvHeH6ttnuOfwLNUdOoSVeCXMXpawltC4C0jOjvh9RzuGy1mKwdYFLpKXRlt1/62hN3fWP5IKlg+/XeQnQ9QrYkfM4NeNRD1uzjWrr9aZ+LVNCdDGVBmmv5CUToYeOahVXme4IK39DwESoo/Ea0MsLhPfkSN992t/TsKRPCwHQj8dkRLYCtU5R5j+oKzz+WddF51D8d23+cb79rXb08j/bTHvvZ2ZXfqB/Pc64vxt5BNwvvg17eZfw==
Received: from HK2APC01FT022.eop-APC01.prod.protection.outlook.com
 (10.152.248.52) by HK2APC01HT146.eop-APC01.prod.protection.outlook.com
 (10.152.249.84) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1856.11; Thu, 9 May
 2019 13:23:42 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com (10.152.248.53) by
 HK2APC01FT022.mail.protection.outlook.com (10.152.248.185) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.1856.11 via Frontend Transport; Thu, 9 May 2019 13:23:42 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::3c3b:be45:a6af:3d86]) by PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::3c3b:be45:a6af:3d86%4]) with mapi id 15.20.1856.012; Thu, 9 May 2019
 13:23:42 +0000
From: Zhang Haijun <ccsmile2008@HIDDEN>
To: Stefan Monnier <monnier@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Topic: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Index: AQHU9kdhfQXib1heyEOMRFlaO2+ugKZDqwOCgACugICAHo66gA==
Date: Thu, 9 May 2019 13:23:42 +0000
Message-ID: <PS1PR06MB2759800EBE7BE0A65BF95F2DA8330@HIDDEN>
References: <5A24EADA-D920-4E1D-8CAE-511A6A74588C@HIDDEN>
 <PS1PR06MB2759795CDC5AFD9D6E41780FA8270@HIDDEN>
 <jwvmukmas4g.fsf-monnier+emacs@HIDDEN>
 <PS1PR06MB2759F95E6DC6F6E5DED1AE05A8200@HIDDEN>
In-Reply-To: <PS1PR06MB2759F95E6DC6F6E5DED1AE05A8200@HIDDEN>
Accept-Language: zh-CN, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: HK2PR0302CA0013.apcprd03.prod.outlook.com
 (2603:1096:202::23) To PS1PR06MB2759.apcprd06.prod.outlook.com
 (2603:1096:803:46::13)
x-incomingtopheadermarker: OriginalChecksum:3F7EEDA8640D7D0B87BC240370C58B6E779FC9204E75BF3D2144C5D089DD1DA7;
 UpperCasedChecksum:D66EF1AB9E49A1FC227B0D6498BB15CCDCFA5C219DE37BAA7E336BB86F559E02;
 SizeAsReceived:7736; Count:50
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: Apple Mail (2.3445.9.1)
x-tmn: [v8ueSxvL4vZ7JLR63rKztQwcdr7zyeaA]
x-microsoft-original-message-id: <A30B5860-DF2C-46F1-AE80-76965F6C9D3F@HIDDEN>
x-ms-publictraffictype: Email
x-incomingheadercount: 50
x-eopattributedmessage: 0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(5050001)(7020095)(20181119110)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031323274)(2017031324274)(2017031322404)(1601125500)(1603101475)(1701031045);
 SRVR:HK2APC01HT146; 
x-ms-traffictypediagnostic: HK2APC01HT146:
x-ms-exchange-purlcount: 1
x-microsoft-antispam-message-info: oFmzz5h3Kbt/ICTnzeFvp38jr76Q3WcWkXrTDBMeG4mP6TvkKVMDuBiH+5ueXpakn3GZDMxtD2iUwH8LCxKOU8LwHLsklK8XSfCxFu6MSz6fm/kOrLyCrDpTanKtljwpwFL+SsBJwcTKJxxa8S+RnlHpoDkeIdIRAwjk0r1PlPj9r5RAmoScOjfyByPXeKU3
Content-Type: text/plain; charset="gb2312"
Content-ID: <B3AC6955DD143243A28F0060861E1C7B@HIDDEN>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-Network-Message-Id: 05fa224f-b22b-4ca5-fd3e-08d6d4818e5e
X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 May 2019 13:23:42.7175 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Internet
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2APC01HT146
X-Spam-Score: 0.2 (/)
X-Debbugs-Envelope-To: 35316
Cc: "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.8 (/)

SSBmaW5kIHRoYXQgSSBoYWQgdG9vIGxpdHRsZSB0aW1lIGVkaXRpbmcgYy9jKysgc291cmNlIGZp
bGVzIHJlY2VudGx5LiBCZWNhdXNlIG91ciBwcm9qZWN0IHN3aXRjaGVkIHRvIGdvbGFuZy4NCg0K
U28gSSBkaWRuoa90IHRlc3QgdGhpcyBwYXRjaCB0b28gbXVjaC4gSSBqdXN0IGFwcGxpZWQgdGhl
IHBhdGNoIGFuZCB0ZXN0ZWQgaWVkaXQgd2l0aCBzb21lIGMrKyBmaWxlcyBhbmQgdGhlIGxhZyBk
aXNhcHBlYXJlZC4NCg0KDQo+INTaIDIwMTnE6jTUwjIwyNWjrMnPzucxMDo0NKOs1cW6o779IDxj
Y3NtaWxlMjAwOEBvdXRsb29rLmNvbT4g0LS1wKO6DQo+IA0KPiBJIHdpbGwgdHJ5IGl0IGZvciBz
b21lIGRheXMgYW5kIGdpdmUgZmVlZGJhY2suDQo+IA0KPj4g1NogMjAxOcTqNNTCMjDI1aOsyc/O
5zEyOjIwo6xTdGVmYW4gTW9ubmllciA8bW9ubmllckBJUk8uVU1vbnRyZWFsLkNBPiDQtLXAo7oN
Cj4+IA0KPj4+IFJlcHJvZHVjaW5nIHN0ZXBzOg0KPj4+IDEuIGVtYWNzIC1RDQo+Pj4gMi4gRXZh
bCBjb2RlOiAoYWRkLXRvLWxpc3QgJ3BhY2thZ2UtYXJjaGl2ZXMgJygibWVscGEiIC4gImh0dHBz
Oi8vbWVscGEub3JnL3BhY2thZ2VzL6GwKSkNCj4+PiAzLiBpbnN0YWxsIHRoZSBwYWNrYWdlIGll
ZGl0ICh2ZXJzaW9uIGZyb20gbWVscGEpDQo+Pj4gNC4gb3BlbiB0aGUgYXR0YWNobWVudCBjKysg
ZmlsZSwgYW5kIGdvdG8gbGluZSAyNjIgYW5kIGNvbHVtbiAxNy4gY3Vyc29yDQo+Pj4gd2lsbCBi
ZSBvbiB3b3JkIKGwc3Vic2Vzc2lvbiINCj4+PiA1LiBNLXggbmFycm93LXRvLWRlZnVuDQo+Pj4g
Ni4gTS14IGllZGl0LW1vZGUNCj4+PiA3LiBNLXggd2lkZW4NCj4+PiA4LiBZb3Ugd2lsbCBzZWUg
dGhlIGxhZyB3aGVuIGlucHV0dGluZyBjaGFycy4NCj4+IA0KPj4gVGhpcyBzZWVtcyB0byBiZSBh
IGdvb2QgdXNlIGNhc2UgZm9yIG15IHN5bnRheC1wcm9wZXJ0aXplIHBhdGNoLg0KPj4gSSBqdXN0
IHRyaWVkIGl0IG9uIHlvdXIgdGVzdCBjYXNlIGFuZCB3aGlsZSB0aGVyZSBpcyBzdGlsbCBhIHNs
aWdodCBzbG93DQo+PiBkb3duLCBpdCBzZWVtZWQgdG8gYmUgbXVjaCBsZXNzIHByb2JsZW1hdGlj
Lg0KPj4gDQo+PiBCRVdBUkU6IGl0IGxpa2VseSBpbnRyb2R1Y2VzIGJ1Z3MuDQo+PiANCj4+IA0K
Pj4gICAgICAgU3RlZmFuDQo+PiANCj4+IA0KPj4gZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVz
L2NjLW1vZGUuZWwgYi9saXNwL3Byb2dtb2Rlcy9jYy1tb2RlLmVsDQo+PiBpbmRleCA0OTI2OGM0
NDgyLi4zMWY1ZWNkZmRiIDEwMDY0NA0KPj4gLS0tIGEvbGlzcC9wcm9nbW9kZXMvY2MtbW9kZS5l
bA0KPj4gKysrIGIvbGlzcC9wcm9nbW9kZXMvY2MtbW9kZS5lbA0KPj4gQEAgLTUwNiw2ICs1MDYs
OCBAQCBjLWp1c3QtZG9uZS1iZWZvcmUtY2hhbmdlDQo+PiA7OyBhbmQgYGFmdGVyLWNoYW5nZS1m
dW5jdGlvbnMnLiAgTm90ZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCB3aGVuDQo+PiA7
OyBgYy1iZWZvcmUtY2hhbmdlJyBpcyBpbnZva2VkIGJ5IGEgY2hhbmdlIHRvIHRleHQgcHJvcGVy
dGllcy4NCj4+IA0KPj4gKyhkZWZ2YXIgYy0tdXNlLXN5bnRheC1wcm9wZXJ0aXplIHQpDQo+PiAr
DQo+PiAoZGVmdW4gYy1iYXNpYy1jb21tb24taW5pdCAobW9kZSBkZWZhdWx0LXN0eWxlKQ0KPj4g
ICJEbyB0aGUgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIGZvciB0aGUgc3ludGF4IGhhbmRsaW5n
IHJvdXRpbmVzDQo+PiBhbmQgdGhlIGxpbmUgYnJlYWtpbmcvZmlsbGluZyBjb2RlLiAgSW50ZW5k
ZWQgdG8gYmUgdXNlZCBieSBvdGhlcg0KPj4gQEAgLTY0OCwxMiArNjUwLDE3IEBAIGMtYmFzaWMt
Y29tbW9uLWluaXQNCj4+IA0KPj4gIDs7IEluc3RhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGVuc3Vy
ZSB0aGF0IHZhcmlvdXMgaW50ZXJuYWwgY2FjaGVzDQo+PiAgOzsgZG9uJ3QgYmVjb21lIGludmFs
aWQgZHVlIHRvIGJ1ZmZlciBjaGFuZ2VzLg0KPj4gLSAgKHdoZW4gKGZlYXR1cmVwICd4ZW1hY3Mp
DQo+PiAtICAgIChtYWtlLWxvY2FsLWhvb2sgJ2JlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zKQ0KPj4g
LSAgICAobWFrZS1sb2NhbC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zKSkNCj4+IC0gIChh
ZGQtaG9vayAnYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMgJ2MtYmVmb3JlLWNoYW5nZSBuaWwgdCkN
Cj4+IC0gIChzZXRxIGMtanVzdC1kb25lLWJlZm9yZS1jaGFuZ2UgbmlsKQ0KPj4gLSAgKGFkZC1o
b29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICdjLWFmdGVyLWNoYW5nZSBuaWwgdCkNCj4+ICsg
IChpZiBjLS11c2Utc3ludGF4LXByb3BlcnRpemUNCj4+ICsgICAgICAoc2V0cS1sb2NhbCBzeW50
YXgtcHJvcGVydGl6ZS1mdW5jdGlvbg0KPj4gKwkJICAobGFtYmRhIChzdGFydCBlbmQpDQo+PiAr
CQkgICAgKGMtYmVmb3JlLWNoYW5nZSBzdGFydCAocG9pbnQtbWF4KSkNCj4+ICsJCSAgICAoYy1h
ZnRlci1jaGFuZ2Ugc3RhcnQgZW5kICgtIGVuZCBzdGFydCkpKSkNCj4+ICsgICAgKHdoZW4gKGZl
YXR1cmVwICd4ZW1hY3MpDQo+PiArICAgICAgKG1ha2UtbG9jYWwtaG9vayAnYmVmb3JlLWNoYW5n
ZS1mdW5jdGlvbnMpDQo+PiArICAgICAgKG1ha2UtbG9jYWwtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1
bmN0aW9ucykpDQo+PiArICAgIChhZGQtaG9vayAnYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMgJ2Mt
YmVmb3JlLWNoYW5nZSBuaWwgdCkNCj4+ICsgICAgKHNldHEgYy1qdXN0LWRvbmUtYmVmb3JlLWNo
YW5nZSBuaWwpDQo+PiArICAgIChhZGQtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAnYy1h
ZnRlci1jaGFuZ2UgbmlsIHQpKQ0KPj4gICh3aGVuIChib3VuZHAgJ2ZvbnQtbG9jay1leHRlbmQt
YWZ0ZXItY2hhbmdlLXJlZ2lvbi1mdW5jdGlvbikNCj4+ICAgIChzZXQgKG1ha2UtbG9jYWwtdmFy
aWFibGUgJ2ZvbnQtbG9jay1leHRlbmQtYWZ0ZXItY2hhbmdlLXJlZ2lvbi1mdW5jdGlvbikNCj4+
ICAgICAgICAgJ2MtZXh0ZW5kLWFmdGVyLWNoYW5nZS1yZWdpb24pKSkgOyBDdXJyZW50bHkgKDIw
MDktMDUpIHVzZWQgYnkgYWxsDQo+PiBAQCAtNzExLDE1ICs3MTgsMTcgQEAgYy1jb21tb24taW5p
dA0KPj4gICAgKHdpZGVuKQ0KPj4gICAgKHNldHEgYy1uZXctQkVHIChwb2ludC1taW4pKQ0KPj4g
ICAgKHNldHEgYy1uZXctRU5EIChwb2ludC1tYXgpKQ0KPj4gLSAgICAoc2F2ZS1leGN1cnNpb24N
Cj4+IC0gICAgICAobGV0IChiZWZvcmUtY2hhbmdlLWZ1bmN0aW9ucyBhZnRlci1jaGFuZ2UtZnVu
Y3Rpb25zKQ0KPj4gLQkobWFwYyAobGFtYmRhIChmbikNCj4+IC0JCShmdW5jYWxsIGZuIChwb2lu
dC1taW4pIChwb2ludC1tYXgpKSkNCj4+IC0JICAgICAgYy1nZXQtc3RhdGUtYmVmb3JlLWNoYW5n
ZS1mdW5jdGlvbnMpDQo+PiAtCShtYXBjIChsYW1iZGEgKGZuKQ0KPj4gLQkJKGZ1bmNhbGwgZm4g
KHBvaW50LW1pbikgKHBvaW50LW1heCkNCj4+IC0JCQkgKC0gKHBvaW50LW1heCkgKHBvaW50LW1p
bikpKSkNCj4+IC0JICAgICAgYy1iZWZvcmUtZm9udC1sb2NrLWZ1bmN0aW9ucykpKSkNCj4+ICsg
ICAgKHVubGVzcyBjLS11c2Utc3ludGF4LXByb3BlcnRpemUNCj4+ICsgICAgICAoc2F2ZS1leGN1
cnNpb24NCj4+ICsJKGxldCAoYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMgYWZ0ZXItY2hhbmdlLWZ1
bmN0aW9ucykNCj4+ICsJICAobWFwYyAobGFtYmRhIChmbikNCj4+ICsJCSAgKGZ1bmNhbGwgZm4g
KHBvaW50LW1pbikgKHBvaW50LW1heCkpKQ0KPj4gKwkJYy1nZXQtc3RhdGUtYmVmb3JlLWNoYW5n
ZS1mdW5jdGlvbnMpDQo+PiArCSAgKG1hcGMgKGxhbWJkYSAoZm4pDQo+PiArCQkgIChmdW5jYWxs
IGZuIChwb2ludC1taW4pIChwb2ludC1tYXgpDQo+PiArCQkJICAgKC0gKHBvaW50LW1heCkgKHBv
aW50LW1pbikpKSkNCj4+ICsJCWMtYmVmb3JlLWZvbnQtbG9jay1mdW5jdGlvbnMpDQo+PiArCSAg
KSkpKQ0KPj4gDQo+PiAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnb3V0bGluZS1yZWdleHAp
ICJbXiNcblxeTV0iKQ0KPj4gIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ291dGxpbmUtbGV2
ZWwpICdjLW91dGxpbmUtbGV2ZWwpDQo+PiBAQCAtMTk1NCw2ICsxOTYzLDEyIEBAIGMtZm9udC1s
b2NrLWZvbnRpZnktcmVnaW9uDQo+PiAgOzsNCj4+ICA7OyBUeXBlIGEgc3BhY2UgaW4gdGhlIGZp
cnN0IGJsYW5rIGxpbmUsIGFuZCB0aGUgZm9udGlmaWNhdGlvbiBvZiB0aGUgbmV4dA0KPj4gIDs7
IGxpbmUgd2FzIGZvdWxlZCB1cCBieSBjb250ZXh0IGZvbnRpZmljYXRpb24uDQo+PiArICAod2hl
biBjLS11c2Utc3ludGF4LXByb3BlcnRpemUNCj4+ICsgICAgOzsgVGhpcyBzaG91bGQgYWxzbyB1
cGRhdGUgYy1uZXctRU5EIGFuZCBjLW5ldy1CRUcuDQo+PiArICAgIChzeW50YXgtcHJvcGVydGl6
ZSBlbmQpDQo+PiArICAgIDs7IEZJWE1FOiBBcHBhcmVudGx5IGBjLW5ldy1FTkQnIG1heSBiZSBs
ZWZ0IHVuY2hhbmdlZCB0byBhIHN0YWxlIHZhbHVlLA0KPj4gKyAgICA7OyBwcmVzdW1hYmx5IHdo
ZW4gdGhlIGJ1ZmZlciBnZXRzIHRydW5jYXRlZC4NCj4+ICsgICAgKGlmICg+IGMtbmV3LUVORCAo
cG9pbnQtbWF4KSkgKHNldHEgYy1uZXctRU5EIChwb2ludC1tYXgpKSkpDQo+PiAgKGxldCAobmV3
LWJlZyBuZXctZW5kIG5ldy1yZWdpb24gY2FzZS1mb2xkLXNlYXJjaCkNCj4+ICAgIChpZiAoYW5k
IGMtaW4tYWZ0ZXItY2hhbmdlLWZvbnRpZmljYXRpb24NCj4+IAkgICAgICg8IGJlZyBjLW5ldy1F
TkQpICg+IGVuZCBjLW5ldy1CRUcpKQ0KPj4gQEAgLTE5OTIsNyArMjAwNyw4IEBAIGMtZm9udC1s
b2NrLWZvbnRpZnktcmVnaW9uDQo+PiAoZGVmdW4gYy1hZnRlci1mb250LWxvY2staW5pdCAoKQ0K
Pj4gIDs7IFB1dCBvbiBgZm9udC1sb2NrLW1vZGUtaG9vaycuICBUaGlzIGZ1bmN0aW9uIGVuc3Vy
ZXMgb3VyIGFmdGVyLWNoYW5nZQ0KPj4gIDs7IGZ1bmN0aW9uIHdpbGwgZ2V0IGV4ZWN1dGVkIGJl
Zm9yZSB0aGUgZm9udC1sb2NrIG9uZS4NCj4+IC0gICh3aGVuIChtZW1xICMnYy1hZnRlci1jaGFu
Z2UgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucykNCj4+ICsgICh3aGVuIChhbmQgYy0tdXNlLXN5bnRh
eC1wcm9wZXJ0aXplDQo+PiArCSAgICAgKG1lbXEgIydjLWFmdGVyLWNoYW5nZSBhZnRlci1jaGFu
Z2UtZnVuY3Rpb25zKSkNCj4+ICAgIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9u
cyAjJ2MtYWZ0ZXItY2hhbmdlIHQpDQo+PiAgICAoYWRkLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5j
dGlvbnMgIydjLWFmdGVyLWNoYW5nZSBuaWwgdCkpKQ0KPj4gDQo+PiBAQCAtMjA0NiwxMSArMjA2
MiwxNCBAQCBjLWV4dGVuZC1hZnRlci1jaGFuZ2UtcmVnaW9uDQo+PiAgKHdoZW4gKGVxIGZvbnQt
bG9jay1zdXBwb3J0LW1vZGUgJ2ppdC1sb2NrLW1vZGUpDQo+PiAgICAoc2F2ZS1yZXN0cmljdGlv
bg0KPj4gICAgICAod2lkZW4pDQo+PiArICAgICAgOzsgRklYTUU6IFRoaXMgcHJlc3VtZXMgdGhh
dCBjLW5ldy1CRUcgYW5kIGMtbmV3LUVORCBoYXZlIGJlZW4gc2V0DQo+PiArICAgICAgOzsgSSBn
dWVzcyBmcm9tIHRoZSBiZWZvcmUtY2hhbmdlLWZ1bmN0aW9uLg0KPj4gICAgICAoYy1zYXZlLWJ1
ZmZlci1zdGF0ZSAoKSA7IFByb3RlY3QgdGhlIHVuZG8tbGlzdCBmcm9tIHB1dC10ZXh0LXByb3Bl
cnR5Lg0KPj4gCShpZiAoPCBjLW5ldy1CRUcgYmVnKQ0KPj4gCSAgICAocHV0LXRleHQtcHJvcGVy
dHkgYy1uZXctQkVHIGJlZyAnZm9udGlmaWVkIG5pbCkpDQo+PiAJKGlmICg+IGMtbmV3LUVORCBl
bmQpDQo+PiAtCSAgICAocHV0LXRleHQtcHJvcGVydHkgZW5kIGMtbmV3LUVORCAnZm9udGlmaWVk
IG5pbCkpKSkpDQo+PiArCSAgICAocHV0LXRleHQtcHJvcGVydHkgZW5kIChtaW4gYy1uZXctRU5E
IChwb2ludC1tYXgpKQ0KPj4gKwkJCSAgICAgICAnZm9udGlmaWVkIG5pbCkpKSkpDQo+PiAgKGNv
bnMgYy1uZXctQkVHIGMtbmV3LUVORCkpDQo+PiANCj4+IDs7IEVtYWNzIDwgMjIgYW5kIFhFbWFj
cw0KPiANCg0K




Information forwarded to bug-gnu-emacs@HIDDEN, bug-cc-mode@HIDDEN:
bug#35316; Package emacs,cc-mode. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 20 Apr 2019 02:45:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 22:45:09 2019
Received: from localhost ([127.0.0.1]:45238 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hHg05-0000Y4-2K
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2019 22:45:09 -0400
Received: from mail-oln040092253032.outbound.protection.outlook.com
 ([40.92.253.32]:48048 helo=APC01-SG2-obe.outbound.protection.outlook.com)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hHg02-0000XE-Fb
 for 35316 <at> debbugs.gnu.org; Fri, 19 Apr 2019 22:45:08 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Goge0eNVddJPv8ih4m/DsP/0/TQ/vEtetNAsJEx0xLY=;
 b=BoRKrH30BXM9l7rhCEvuo7cBh74GZB0NrTUQiwtdvjoQ4oGOBiNU9ko2lFJoNnQgHMJ0CicqKc0AMw5zieiLNlIslVEFRVi46ZlVMsgQj212EaccdIrb1wdGEvuNundXabODtpoB4aGRDJQlBXjs9bkCbx5XtkliNJ474Oucj9IzDPhv65jVYN9oCHt9ShCWJ5wkdJUg7byn/ZG/5X8K5F5e1QNEmNSNRFOLQosLqYdv9bFGMo14cSeMOufdIrYdnbObvKz0pCo+vVSTFP5lrCkcDq3awtg8da0p7/TVAjV6IH2uc4okABR4f79NQ64SVf/YGtW/YYKYhbxHnArPRg==
Received: from HK2APC01FT059.eop-APC01.prod.protection.outlook.com
 (10.152.248.56) by HK2APC01HT185.eop-APC01.prod.protection.outlook.com
 (10.152.249.21) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1771.16; Sat, 20 Apr
 2019 02:44:57 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com (10.152.248.51) by
 HK2APC01FT059.mail.protection.outlook.com (10.152.249.214) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.1771.16 via Frontend Transport; Sat, 20 Apr 2019 02:44:57 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::b5a7:335c:7ed:4ab1]) by PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::b5a7:335c:7ed:4ab1%6]) with mapi id 15.20.1813.013; Sat, 20 Apr 2019
 02:44:57 +0000
From: Zhang Haijun <ccsmile2008@HIDDEN>
To: Stefan Monnier <monnier@HIDDEN>
Subject: Re: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Topic: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with
 iedit-mode on
Thread-Index: AQHU9kdhfQXib1heyEOMRFlaO2+ugKZDqwOCgACugIA=
Date: Sat, 20 Apr 2019 02:44:57 +0000
Message-ID: <PS1PR06MB2759F95E6DC6F6E5DED1AE05A8200@HIDDEN>
References: <5A24EADA-D920-4E1D-8CAE-511A6A74588C@HIDDEN>
 <PS1PR06MB2759795CDC5AFD9D6E41780FA8270@HIDDEN>
 <jwvmukmas4g.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwvmukmas4g.fsf-monnier+emacs@HIDDEN>
Accept-Language: zh-CN, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: HK0PR03CA0037.apcprd03.prod.outlook.com
 (2603:1096:203:2f::25) To PS1PR06MB2759.apcprd06.prod.outlook.com
 (2603:1096:803:46::13)
x-incomingtopheadermarker: OriginalChecksum:C158174E18AEE211C6B75828185C769213A82E64C08C4F97F49913B05F427949;
 UpperCasedChecksum:9DFBD7088E647941F4EF6939628ED17DFB215671045E0E305A1C3D250F4D13CB;
 SizeAsReceived:7620; Count:50
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: Apple Mail (2.3445.9.1)
x-tmn: [rwdNrO/U91NR6kB3cy762gP5UMfAvuxf]
x-microsoft-original-message-id: <2B1B420A-3A0B-497B-89AC-556FAB2E85D7@HIDDEN>
x-ms-publictraffictype: Email
x-incomingheadercount: 50
x-eopattributedmessage: 0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(5050001)(7020095)(20181119110)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031323274)(2017031324274)(2017031322404)(1601125500)(1603101475)(1701031045);
 SRVR:HK2APC01HT185; 
x-ms-traffictypediagnostic: HK2APC01HT185:
x-ms-exchange-purlcount: 1
x-microsoft-antispam-message-info: 2VfiWzi9Z6Th8LsRBYc+ty6YApiInzGY40d/wr3a43S/YYe1B3ZVXn8feefmAzkFWKrWmYRuzUqTIJOnroch8R5dLiDdka69P60YQkRQv3a0hUds75nLDImqkqjg/hXRMNWm79x3dcVukfzhiZv6P9bnjcYEAslvWfUMaH5I0+moub3nD5plZ4JZgpphceOa
Content-Type: text/plain; charset="gb2312"
Content-ID: <D988EB0E75CD1E489CDEA1E63F10FC53@HIDDEN>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-Network-Message-Id: 98b6bbac-df1f-4790-2713-08d6c53a2d17
X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Apr 2019 02:44:57.6732 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Internet
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2APC01HT185
X-Spam-Score: 0.2 (/)
X-Debbugs-Envelope-To: 35316
Cc: "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.8 (/)

SSB3aWxsIHRyeSBpdCBmb3Igc29tZSBkYXlzIGFuZCBnaXZlIGZlZWRiYWNrLg0KDQo+INTaIDIw
MTnE6jTUwjIwyNWjrMnPzucxMjoyMKOsU3RlZmFuIE1vbm5pZXIgPG1vbm5pZXJASVJPLlVNb250
cmVhbC5DQT4g0LS1wKO6DQo+IA0KPj4gUmVwcm9kdWNpbmcgc3RlcHM6DQo+PiAxLiBlbWFjcyAt
UQ0KPj4gMi4gRXZhbCBjb2RlOiAoYWRkLXRvLWxpc3QgJ3BhY2thZ2UtYXJjaGl2ZXMgJygibWVs
cGEiIC4gImh0dHBzOi8vbWVscGEub3JnL3BhY2thZ2VzL6GwKSkNCj4+IDMuIGluc3RhbGwgdGhl
IHBhY2thZ2UgaWVkaXQgKHZlcnNpb24gZnJvbSBtZWxwYSkNCj4+IDQuIG9wZW4gdGhlIGF0dGFj
aG1lbnQgYysrIGZpbGUsIGFuZCBnb3RvIGxpbmUgMjYyIGFuZCBjb2x1bW4gMTcuIGN1cnNvcg0K
Pj4gd2lsbCBiZSBvbiB3b3JkIKGwc3Vic2Vzc2lvbiINCj4+IDUuIE0teCBuYXJyb3ctdG8tZGVm
dW4NCj4+IDYuIE0teCBpZWRpdC1tb2RlDQo+PiA3LiBNLXggd2lkZW4NCj4+IDguIFlvdSB3aWxs
IHNlZSB0aGUgbGFnIHdoZW4gaW5wdXR0aW5nIGNoYXJzLg0KPiANCj4gVGhpcyBzZWVtcyB0byBi
ZSBhIGdvb2QgdXNlIGNhc2UgZm9yIG15IHN5bnRheC1wcm9wZXJ0aXplIHBhdGNoLg0KPiBJIGp1
c3QgdHJpZWQgaXQgb24geW91ciB0ZXN0IGNhc2UgYW5kIHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEg
c2xpZ2h0IHNsb3cNCj4gZG93biwgaXQgc2VlbWVkIHRvIGJlIG11Y2ggbGVzcyBwcm9ibGVtYXRp
Yy4NCj4gDQo+IEJFV0FSRTogaXQgbGlrZWx5IGludHJvZHVjZXMgYnVncy4NCj4gDQo+IA0KPiAg
ICAgICAgU3RlZmFuDQo+IA0KPiANCj4gZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL2NjLW1v
ZGUuZWwgYi9saXNwL3Byb2dtb2Rlcy9jYy1tb2RlLmVsDQo+IGluZGV4IDQ5MjY4YzQ0ODIuLjMx
ZjVlY2RmZGIgMTAwNjQ0DQo+IC0tLSBhL2xpc3AvcHJvZ21vZGVzL2NjLW1vZGUuZWwNCj4gKysr
IGIvbGlzcC9wcm9nbW9kZXMvY2MtbW9kZS5lbA0KPiBAQCAtNTA2LDYgKzUwNiw4IEBAIGMtanVz
dC1kb25lLWJlZm9yZS1jaGFuZ2UNCj4gOzsgYW5kIGBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zJy4g
IE5vdGUgdGhhdCB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzZXQgd2hlbg0KPiA7OyBgYy1iZWZvcmUt
Y2hhbmdlJyBpcyBpbnZva2VkIGJ5IGEgY2hhbmdlIHRvIHRleHQgcHJvcGVydGllcy4NCj4gDQo+
ICsoZGVmdmFyIGMtLXVzZS1zeW50YXgtcHJvcGVydGl6ZSB0KQ0KPiArDQo+IChkZWZ1biBjLWJh
c2ljLWNvbW1vbi1pbml0IChtb2RlIGRlZmF1bHQtc3R5bGUpDQo+ICAgIkRvIHRoZSBuZWNlc3Nh
cnkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBzeW50YXggaGFuZGxpbmcgcm91dGluZXMNCj4gYW5k
IHRoZSBsaW5lIGJyZWFraW5nL2ZpbGxpbmcgY29kZS4gIEludGVuZGVkIHRvIGJlIHVzZWQgYnkg
b3RoZXINCj4gQEAgLTY0OCwxMiArNjUwLDE3IEBAIGMtYmFzaWMtY29tbW9uLWluaXQNCj4gDQo+
ICAgOzsgSW5zdGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZW5zdXJlIHRoYXQgdmFyaW91cyBpbnRl
cm5hbCBjYWNoZXMNCj4gICA7OyBkb24ndCBiZWNvbWUgaW52YWxpZCBkdWUgdG8gYnVmZmVyIGNo
YW5nZXMuDQo+IC0gICh3aGVuIChmZWF0dXJlcCAneGVtYWNzKQ0KPiAtICAgIChtYWtlLWxvY2Fs
LWhvb2sgJ2JlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zKQ0KPiAtICAgIChtYWtlLWxvY2FsLWhvb2sg
J2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMpKQ0KPiAtICAoYWRkLWhvb2sgJ2JlZm9yZS1jaGFuZ2Ut
ZnVuY3Rpb25zICdjLWJlZm9yZS1jaGFuZ2UgbmlsIHQpDQo+IC0gIChzZXRxIGMtanVzdC1kb25l
LWJlZm9yZS1jaGFuZ2UgbmlsKQ0KPiAtICAoYWRkLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlv
bnMgJ2MtYWZ0ZXItY2hhbmdlIG5pbCB0KQ0KPiArICAoaWYgYy0tdXNlLXN5bnRheC1wcm9wZXJ0
aXplDQo+ICsgICAgICAoc2V0cS1sb2NhbCBzeW50YXgtcHJvcGVydGl6ZS1mdW5jdGlvbg0KPiAr
CQkgIChsYW1iZGEgKHN0YXJ0IGVuZCkNCj4gKwkJICAgIChjLWJlZm9yZS1jaGFuZ2Ugc3RhcnQg
KHBvaW50LW1heCkpDQo+ICsJCSAgICAoYy1hZnRlci1jaGFuZ2Ugc3RhcnQgZW5kICgtIGVuZCBz
dGFydCkpKSkNCj4gKyAgICAod2hlbiAoZmVhdHVyZXAgJ3hlbWFjcykNCj4gKyAgICAgIChtYWtl
LWxvY2FsLWhvb2sgJ2JlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zKQ0KPiArICAgICAgKG1ha2UtbG9j
YWwtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucykpDQo+ICsgICAgKGFkZC1ob29rICdiZWZv
cmUtY2hhbmdlLWZ1bmN0aW9ucyAnYy1iZWZvcmUtY2hhbmdlIG5pbCB0KQ0KPiArICAgIChzZXRx
IGMtanVzdC1kb25lLWJlZm9yZS1jaGFuZ2UgbmlsKQ0KPiArICAgIChhZGQtaG9vayAnYWZ0ZXIt
Y2hhbmdlLWZ1bmN0aW9ucyAnYy1hZnRlci1jaGFuZ2UgbmlsIHQpKQ0KPiAgICh3aGVuIChib3Vu
ZHAgJ2ZvbnQtbG9jay1leHRlbmQtYWZ0ZXItY2hhbmdlLXJlZ2lvbi1mdW5jdGlvbikNCj4gICAg
IChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZvbnQtbG9jay1leHRlbmQtYWZ0ZXItY2hhbmdl
LXJlZ2lvbi1mdW5jdGlvbikNCj4gICAgICAgICAgJ2MtZXh0ZW5kLWFmdGVyLWNoYW5nZS1yZWdp
b24pKSkgOyBDdXJyZW50bHkgKDIwMDktMDUpIHVzZWQgYnkgYWxsDQo+IEBAIC03MTEsMTUgKzcx
OCwxNyBAQCBjLWNvbW1vbi1pbml0DQo+ICAgICAod2lkZW4pDQo+ICAgICAoc2V0cSBjLW5ldy1C
RUcgKHBvaW50LW1pbikpDQo+ICAgICAoc2V0cSBjLW5ldy1FTkQgKHBvaW50LW1heCkpDQo+IC0g
ICAgKHNhdmUtZXhjdXJzaW9uDQo+IC0gICAgICAobGV0IChiZWZvcmUtY2hhbmdlLWZ1bmN0aW9u
cyBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zKQ0KPiAtCShtYXBjIChsYW1iZGEgKGZuKQ0KPiAtCQko
ZnVuY2FsbCBmbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpDQo+IC0JICAgICAgYy1nZXQtc3Rh
dGUtYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMpDQo+IC0JKG1hcGMgKGxhbWJkYSAoZm4pDQo+IC0J
CShmdW5jYWxsIGZuIChwb2ludC1taW4pIChwb2ludC1tYXgpDQo+IC0JCQkgKC0gKHBvaW50LW1h
eCkgKHBvaW50LW1pbikpKSkNCj4gLQkgICAgICBjLWJlZm9yZS1mb250LWxvY2stZnVuY3Rpb25z
KSkpKQ0KPiArICAgICh1bmxlc3MgYy0tdXNlLXN5bnRheC1wcm9wZXJ0aXplDQo+ICsgICAgICAo
c2F2ZS1leGN1cnNpb24NCj4gKwkobGV0IChiZWZvcmUtY2hhbmdlLWZ1bmN0aW9ucyBhZnRlci1j
aGFuZ2UtZnVuY3Rpb25zKQ0KPiArCSAgKG1hcGMgKGxhbWJkYSAoZm4pDQo+ICsJCSAgKGZ1bmNh
bGwgZm4gKHBvaW50LW1pbikgKHBvaW50LW1heCkpKQ0KPiArCQljLWdldC1zdGF0ZS1iZWZvcmUt
Y2hhbmdlLWZ1bmN0aW9ucykNCj4gKwkgIChtYXBjIChsYW1iZGEgKGZuKQ0KPiArCQkgIChmdW5j
YWxsIGZuIChwb2ludC1taW4pIChwb2ludC1tYXgpDQo+ICsJCQkgICAoLSAocG9pbnQtbWF4KSAo
cG9pbnQtbWluKSkpKQ0KPiArCQljLWJlZm9yZS1mb250LWxvY2stZnVuY3Rpb25zKQ0KPiArCSAg
KSkpKQ0KPiANCj4gICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdvdXRsaW5lLXJlZ2V4cCkg
IlteI1xuXF5NXSIpDQo+ICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnb3V0bGluZS1sZXZl
bCkgJ2Mtb3V0bGluZS1sZXZlbCkNCj4gQEAgLTE5NTQsNiArMTk2MywxMiBAQCBjLWZvbnQtbG9j
ay1mb250aWZ5LXJlZ2lvbg0KPiAgIDs7DQo+ICAgOzsgVHlwZSBhIHNwYWNlIGluIHRoZSBmaXJz
dCBibGFuayBsaW5lLCBhbmQgdGhlIGZvbnRpZmljYXRpb24gb2YgdGhlIG5leHQNCj4gICA7OyBs
aW5lIHdhcyBmb3VsZWQgdXAgYnkgY29udGV4dCBmb250aWZpY2F0aW9uLg0KPiArICAod2hlbiBj
LS11c2Utc3ludGF4LXByb3BlcnRpemUNCj4gKyAgICA7OyBUaGlzIHNob3VsZCBhbHNvIHVwZGF0
ZSBjLW5ldy1FTkQgYW5kIGMtbmV3LUJFRy4NCj4gKyAgICAoc3ludGF4LXByb3BlcnRpemUgZW5k
KQ0KPiArICAgIDs7IEZJWE1FOiBBcHBhcmVudGx5IGBjLW5ldy1FTkQnIG1heSBiZSBsZWZ0IHVu
Y2hhbmdlZCB0byBhIHN0YWxlIHZhbHVlLA0KPiArICAgIDs7IHByZXN1bWFibHkgd2hlbiB0aGUg
YnVmZmVyIGdldHMgdHJ1bmNhdGVkLg0KPiArICAgIChpZiAoPiBjLW5ldy1FTkQgKHBvaW50LW1h
eCkpIChzZXRxIGMtbmV3LUVORCAocG9pbnQtbWF4KSkpKQ0KPiAgIChsZXQgKG5ldy1iZWcgbmV3
LWVuZCBuZXctcmVnaW9uIGNhc2UtZm9sZC1zZWFyY2gpDQo+ICAgICAoaWYgKGFuZCBjLWluLWFm
dGVyLWNoYW5nZS1mb250aWZpY2F0aW9uDQo+IAkgICAgICg8IGJlZyBjLW5ldy1FTkQpICg+IGVu
ZCBjLW5ldy1CRUcpKQ0KPiBAQCAtMTk5Miw3ICsyMDA3LDggQEAgYy1mb250LWxvY2stZm9udGlm
eS1yZWdpb24NCj4gKGRlZnVuIGMtYWZ0ZXItZm9udC1sb2NrLWluaXQgKCkNCj4gICA7OyBQdXQg
b24gYGZvbnQtbG9jay1tb2RlLWhvb2snLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIG91ciBhZnRl
ci1jaGFuZ2UNCj4gICA7OyBmdW5jdGlvbiB3aWxsIGdldCBleGVjdXRlZCBiZWZvcmUgdGhlIGZv
bnQtbG9jayBvbmUuDQo+IC0gICh3aGVuIChtZW1xICMnYy1hZnRlci1jaGFuZ2UgYWZ0ZXItY2hh
bmdlLWZ1bmN0aW9ucykNCj4gKyAgKHdoZW4gKGFuZCBjLS11c2Utc3ludGF4LXByb3BlcnRpemUN
Cj4gKwkgICAgIChtZW1xICMnYy1hZnRlci1jaGFuZ2UgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucykp
DQo+ICAgICAocmVtb3ZlLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgIydjLWFmdGVyLWNo
YW5nZSB0KQ0KPiAgICAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICMnYy1hZnRl
ci1jaGFuZ2UgbmlsIHQpKSkNCj4gDQo+IEBAIC0yMDQ2LDExICsyMDYyLDE0IEBAIGMtZXh0ZW5k
LWFmdGVyLWNoYW5nZS1yZWdpb24NCj4gICAod2hlbiAoZXEgZm9udC1sb2NrLXN1cHBvcnQtbW9k
ZSAnaml0LWxvY2stbW9kZSkNCj4gICAgIChzYXZlLXJlc3RyaWN0aW9uDQo+ICAgICAgICh3aWRl
bikNCj4gKyAgICAgIDs7IEZJWE1FOiBUaGlzIHByZXN1bWVzIHRoYXQgYy1uZXctQkVHIGFuZCBj
LW5ldy1FTkQgaGF2ZSBiZWVuIHNldA0KPiArICAgICAgOzsgSSBndWVzcyBmcm9tIHRoZSBiZWZv
cmUtY2hhbmdlLWZ1bmN0aW9uLg0KPiAgICAgICAoYy1zYXZlLWJ1ZmZlci1zdGF0ZSAoKSA7IFBy
b3RlY3QgdGhlIHVuZG8tbGlzdCBmcm9tIHB1dC10ZXh0LXByb3BlcnR5Lg0KPiAJKGlmICg8IGMt
bmV3LUJFRyBiZWcpDQo+IAkgICAgKHB1dC10ZXh0LXByb3BlcnR5IGMtbmV3LUJFRyBiZWcgJ2Zv
bnRpZmllZCBuaWwpKQ0KPiAJKGlmICg+IGMtbmV3LUVORCBlbmQpDQo+IC0JICAgIChwdXQtdGV4
dC1wcm9wZXJ0eSBlbmQgYy1uZXctRU5EICdmb250aWZpZWQgbmlsKSkpKSkNCj4gKwkgICAgKHB1
dC10ZXh0LXByb3BlcnR5IGVuZCAobWluIGMtbmV3LUVORCAocG9pbnQtbWF4KSkNCj4gKwkJCSAg
ICAgICAnZm9udGlmaWVkIG5pbCkpKSkpDQo+ICAgKGNvbnMgYy1uZXctQkVHIGMtbmV3LUVORCkp
DQo+IA0KPiA7OyBFbWFjcyA8IDIyIGFuZCBYRW1hY3MNCg0K




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#35316; Package emacs. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 19 Apr 2019 16:20:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 12:20:20 2019
Received: from localhost ([127.0.0.1]:44540 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hHWFQ-00062f-6Z
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2019 12:20:20 -0400
Received: from chene.dit.umontreal.ca ([132.204.246.20]:43996)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <monnier@HIDDEN>) id 1hHWFN-00062V-9F
 for 35316 <at> debbugs.gnu.org; Fri, 19 Apr 2019 12:20:18 -0400
Received: from pastel.home (lechon.iro.umontreal.ca [132.204.27.242])
 by chene.dit.umontreal.ca (8.14.7/8.14.1) with ESMTP id x3JGKFLv007908;
 Fri, 19 Apr 2019 12:20:15 -0400
Received: by pastel.home (Postfix, from userid 20848)
 id D8ECD6AE31; Fri, 19 Apr 2019 12:20:14 -0400 (EDT)
From: Stefan Monnier <monnier@HIDDEN>
To: Zhang Haijun <ccsmile2008@HIDDEN>
Subject: Re: bug#35316: 26.2;
 Emacs lags in c++-mode buffer when editing with iedit-mode on
Message-ID: <jwvmukmas4g.fsf-monnier+emacs@HIDDEN>
References: <5A24EADA-D920-4E1D-8CAE-511A6A74588C@HIDDEN>
 <PS1PR06MB2759795CDC5AFD9D6E41780FA8270@HIDDEN>
Date: Fri, 19 Apr 2019 12:20:14 -0400
In-Reply-To: <PS1PR06MB2759795CDC5AFD9D6E41780FA8270@HIDDEN>
 (Zhang Haijun's message of "Fri, 19 Apr 2019 00:32:34 +0000")
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-NAI-Spam-Flag: NO
X-NAI-Spam-Level: 
X-NAI-Spam-Threshold: 5
X-NAI-Spam-Score: 0.1
X-NAI-Spam-Rules: 3 Rules triggered
	TRK_NCM1=0.1, EDT_SA_DN_PASS=0, RV6529=0
X-NAI-Spam-Version: 2.3.0.9418 : core <6529> : inlines <7058> : streams
 <1819126> : uri <2834599>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 35316
Cc: "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Reproducing steps:
> 1. emacs -Q
> 2. Eval code: (add-to-list 'package-archives '("melpa" . "https://melpa.o=
rg/packages/=E2=80=9C))
> 3. install the package iedit (version from melpa)
> 4. open the attachment c++ file, and goto line 262 and column 17. cursor
> will be on word =E2=80=9Csubsession"
> 5. M-x narrow-to-defun
> 6. M-x iedit-mode
> 7. M-x widen
> 8. You will see the lag when inputting chars.

This seems to be a good use case for my syntax-propertize patch.
I just tried it on your test case and while there is still a slight slow
down, it seemed to be much less problematic.

BEWARE: it likely introduces bugs.


        Stefan


diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 49268c4482..31f5ecdfdb 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -506,6 +506,8 @@ c-just-done-before-change
 ;; and `after-change-functions'.  Note that this variable is not set when
 ;; `c-before-change' is invoked by a change to text properties.
=20
+(defvar c--use-syntax-propertize t)
+
 (defun c-basic-common-init (mode default-style)
   "Do the necessary initialization for the syntax handling routines
 and the line breaking/filling code.  Intended to be used by other
@@ -648,12 +650,17 @@ c-basic-common-init
=20
   ;; Install the functions that ensure that various internal caches
   ;; don't become invalid due to buffer changes.
-  (when (featurep 'xemacs)
-    (make-local-hook 'before-change-functions)
-    (make-local-hook 'after-change-functions))
-  (add-hook 'before-change-functions 'c-before-change nil t)
-  (setq c-just-done-before-change nil)
-  (add-hook 'after-change-functions 'c-after-change nil t)
+  (if c--use-syntax-propertize
+      (setq-local syntax-propertize-function
+		  (lambda (start end)
+		    (c-before-change start (point-max))
+		    (c-after-change start end (- end start))))
+    (when (featurep 'xemacs)
+      (make-local-hook 'before-change-functions)
+      (make-local-hook 'after-change-functions))
+    (add-hook 'before-change-functions 'c-before-change nil t)
+    (setq c-just-done-before-change nil)
+    (add-hook 'after-change-functions 'c-after-change nil t))
   (when (boundp 'font-lock-extend-after-change-region-function)
     (set (make-local-variable 'font-lock-extend-after-change-region-functi=
on)
          'c-extend-after-change-region))) ; Currently (2009-05) used by all
@@ -711,15 +718,17 @@ c-common-init
     (widen)
     (setq c-new-BEG (point-min))
     (setq c-new-END (point-max))
-    (save-excursion
-      (let (before-change-functions after-change-functions)
-	(mapc (lambda (fn)
-		(funcall fn (point-min) (point-max)))
-	      c-get-state-before-change-functions)
-	(mapc (lambda (fn)
-		(funcall fn (point-min) (point-max)
-			 (- (point-max) (point-min))))
-	      c-before-font-lock-functions))))
+    (unless c--use-syntax-propertize
+      (save-excursion
+	(let (before-change-functions after-change-functions)
+	  (mapc (lambda (fn)
+		  (funcall fn (point-min) (point-max)))
+		c-get-state-before-change-functions)
+	  (mapc (lambda (fn)
+		  (funcall fn (point-min) (point-max)
+			   (- (point-max) (point-min))))
+		c-before-font-lock-functions)
+	  ))))
=20
   (set (make-local-variable 'outline-regexp) "[^#\n\^M]")
   (set (make-local-variable 'outline-level) 'c-outline-level)
@@ -1954,6 +1963,12 @@ c-font-lock-fontify-region
   ;;
   ;; Type a space in the first blank line, and the fontification of the ne=
xt
   ;; line was fouled up by context fontification.
+  (when c--use-syntax-propertize
+    ;; This should also update c-new-END and c-new-BEG.
+    (syntax-propertize end)
+    ;; FIXME: Apparently `c-new-END' may be left unchanged to a stale valu=
e,
+    ;; presumably when the buffer gets truncated.
+    (if (> c-new-END (point-max)) (setq c-new-END (point-max))))
   (let (new-beg new-end new-region case-fold-search)
     (if (and c-in-after-change-fontification
 	     (< beg c-new-END) (> end c-new-BEG))
@@ -1992,7 +2007,8 @@ c-font-lock-fontify-region
 (defun c-after-font-lock-init ()
   ;; Put on `font-lock-mode-hook'.  This function ensures our after-change
   ;; function will get executed before the font-lock one.
-  (when (memq #'c-after-change after-change-functions)
+  (when (and c--use-syntax-propertize
+	     (memq #'c-after-change after-change-functions))
     (remove-hook 'after-change-functions #'c-after-change t)
     (add-hook 'after-change-functions #'c-after-change nil t)))
=20
@@ -2046,11 +2062,14 @@ c-extend-after-change-region
   (when (eq font-lock-support-mode 'jit-lock-mode)
     (save-restriction
       (widen)
+      ;; FIXME: This presumes that c-new-BEG and c-new-END have been set
+      ;; I guess from the before-change-function.
       (c-save-buffer-state () ; Protect the undo-list from put-text-proper=
ty.
 	(if (< c-new-BEG beg)
 	    (put-text-property c-new-BEG beg 'fontified nil))
 	(if (> c-new-END end)
-	    (put-text-property end c-new-END 'fontified nil)))))
+	    (put-text-property end (min c-new-END (point-max))
+			       'fontified nil)))))
   (cons c-new-BEG c-new-END))
=20
 ;; Emacs < 22 and XEmacs




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#35316; Package emacs. Full text available.

Message received at 35316 <at> debbugs.gnu.org:


Received: (at 35316) by debbugs.gnu.org; 19 Apr 2019 00:32:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 20:32:45 2019
Received: from localhost ([127.0.0.1]:42799 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hHHSP-0007XU-JF
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2019 20:32:45 -0400
Received: from mail-oln040092254017.outbound.protection.outlook.com
 ([40.92.254.17]:46809 helo=APC01-PU1-obe.outbound.protection.outlook.com)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hHHSO-0007XF-1I
 for 35316 <at> debbugs.gnu.org; Thu, 18 Apr 2019 20:32:44 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+TwUQtFR+h8dbHS0MpB62mPhXGxP1U+7aKx5nFjZjls=;
 b=O7tk//34qF1DO9LjyEsD0sPIXddAnAcdtxSzs7O4cdJc89OtogydscHGEfUpRThSv/bhuu3av5vxVfTcli6XWFdGh6Uh4/Vla/jg67Hr7+YU59yd2LG4ZA+FKKsMQTDPePi+ckolNyeaxzQny3YC2LQQvdXH88tnHkDq3DyzwqGJVXJphds/Ar6Suj0HyMD9WtXhgWcNyuzFw+0t3xkhAL5IpiI633BdvCkD6r/lj9N/TOQWXZLntaNVmmgr41GmBml5QyKU4hqlrtJ5h1tUUSySUL9if5GySIOi7h0ovTg7UV3Ht07NxiodemqwgLJiogZVEOUboj4CbAo/fgOuDw==
Received: from SG2APC01FT050.eop-APC01.prod.protection.outlook.com
 (10.152.250.51) by SG2APC01HT127.eop-APC01.prod.protection.outlook.com
 (10.152.251.43) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1771.16; Fri, 19 Apr
 2019 00:32:35 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com (10.152.250.56) by
 SG2APC01FT050.mail.protection.outlook.com (10.152.251.238) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.1771.16 via Frontend Transport; Fri, 19 Apr 2019 00:32:35 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::b5a7:335c:7ed:4ab1]) by PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::b5a7:335c:7ed:4ab1%6]) with mapi id 15.20.1792.021; Fri, 19 Apr 2019
 00:32:34 +0000
From: Zhang Haijun <ccsmile2008@HIDDEN>
To: "35316 <at> debbugs.gnu.org" <35316 <at> debbugs.gnu.org>
Subject: 26.2; Emacs lags in c++-mode buffer when editing with iedit-mode on
Thread-Topic: 26.2; Emacs lags in c++-mode buffer when editing with iedit-mode
 on
Thread-Index: AQHU9kdhfQXib1heyEOMRFlaO2+ugA==
Date: Fri, 19 Apr 2019 00:32:34 +0000
Message-ID: <PS1PR06MB2759795CDC5AFD9D6E41780FA8270@HIDDEN>
References: <5A24EADA-D920-4E1D-8CAE-511A6A74588C@HIDDEN>
Accept-Language: zh-CN, en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
x-clientproxiedby: HK2PR02CA0138.apcprd02.prod.outlook.com
 (2603:1096:202:16::22) To PS1PR06MB2759.apcprd06.prod.outlook.com
 (2603:1096:803:46::13)
x-incomingtopheadermarker: OriginalChecksum:0BDBE7A623DC4AAF657DEAE97EC0E683EEFCBB5F0DC24D0AA668448EE09837B9;
 UpperCasedChecksum:49C0C5B9C11923AC4A96704AF9C76B0D2FA8AEAB77E6DF6ECCB2ECBAEFB5B2BB;
 SizeAsReceived:7369; Count:48
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: Apple Mail (2.3445.9.1)
x-tmn: [15Q7BRuasj6TT+LzXmCXX2WUkx+YJw2n]
x-microsoft-original-message-id: <C3BA01AA-99EE-480A-B536-056D474FA4A9@HIDDEN>
x-ms-publictraffictype: Email
x-incomingheadercount: 48
x-eopattributedmessage: 0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(5050001)(7020095)(20181119110)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031323274)(2017031324274)(2017031322404)(1601125500)(1603101475)(1701031045);
 SRVR:SG2APC01HT127; 
x-ms-traffictypediagnostic: SG2APC01HT127:
x-ms-exchange-purlcount: 1
x-microsoft-antispam-message-info: Jol2NDN+abx2/6bQGNYqObeA+llCTYRX1TBlZHAHKCaPyE/7ZHMGNyHuYSm4+nESbcHo7d0Gd3txxC2X9eSIJcWBiF0wePwmzd9UaY4dB4lFgp3czPT/muveDrVa40gGIlVGddr1vvAIDaxjikb/FgDaCjjJeUi0oQYYdYRRe7esltByPMdnqJB7mqUOMawA
Content-Type: multipart/mixed;
 boundary="_004_PS1PR06MB2759795CDC5AFD9D6E41780FA8270PS1PR06MB2759apcp_"
MIME-Version: 1.0
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-Network-Message-Id: 452b985b-6365-44b9-9ebc-08d6c45e8282
X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Apr 2019 00:32:34.4783 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Internet
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2APC01HT127
X-Debbugs-Envelope-To: 35316
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--_004_PS1PR06MB2759795CDC5AFD9D6E41780FA8270PS1PR06MB2759apcp_
Content-Type: multipart/alternative;
	boundary="_000_PS1PR06MB2759795CDC5AFD9D6E41780FA8270PS1PR06MB2759apcp_"

--_000_PS1PR06MB2759795CDC5AFD9D6E41780FA8270PS1PR06MB2759apcp_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

DQpSZXByb2R1Y2luZyBzdGVwczoNCjEuIGVtYWNzIC1RDQoyLiBFdmFsIGNvZGU6IChhZGQtdG8t
bGlzdCAncGFja2FnZS1hcmNoaXZlcyAnKCJtZWxwYSIgLiAiaHR0cHM6Ly9tZWxwYS5vcmcvcGFj
a2FnZXMv4oCcKSkNCjMuIGluc3RhbGwgdGhlIHBhY2thZ2UgaWVkaXQgKHZlcnNpb24gZnJvbSBt
ZWxwYSkNCjQuIG9wZW4gdGhlIGF0dGFjaG1lbnQgYysrIGZpbGUsIGFuZCBnb3RvIGxpbmUgMjYy
IGFuZCBjb2x1bW4gMTcuIGN1cnNvciB3aWxsIGJlIG9uIHdvcmQg4oCcc3Vic2Vzc2lvbiINCjUu
IE0teCBuYXJyb3ctdG8tZGVmdW4NCjYuIE0teCBpZWRpdC1tb2RlDQo3LiBNLXggd2lkZW4NCjgu
IFlvdSB3aWxsIHNlZSB0aGUgbGFnIHdoZW4gaW5wdXR0aW5nIGNoYXJzLg0KDQoNCg0KDQo=

--_000_PS1PR06MB2759795CDC5AFD9D6E41780FA8270PS1PR06MB2759apcp_
Content-Type: text/html; charset="utf-8"
Content-ID: <394C7A34D6AF7F4AB9CC500DD9F14672@HIDDEN>
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBjbGFzcz0i
Qm9keUZyYWdtZW50Ij48Zm9udCBzaXplPSIyIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7
Ij4NCjxkaXYgY2xhc3M9IlBsYWluVGV4dCI+PGJyPg0KUmVwcm9kdWNpbmcgc3RlcHM6PGJyPg0K
MS4gZW1hY3MgLVE8YnI+DQoyLiBFdmFsIGNvZGU6IChhZGQtdG8tbGlzdCAncGFja2FnZS1hcmNo
aXZlcyAnKCZxdW90O21lbHBhJnF1b3Q7IC4gJnF1b3Q7PGEgaHJlZj0iaHR0cHM6Ly9tZWxwYS5v
cmcvcGFja2FnZXMv4oCcIj5odHRwczovL21lbHBhLm9yZy9wYWNrYWdlcy/igJw8L2E+KSk8YnI+
DQozLiBpbnN0YWxsIHRoZSBwYWNrYWdlIGllZGl0ICh2ZXJzaW9uIGZyb20gbWVscGEpPGJyPg0K
NC4gb3BlbiB0aGUgYXR0YWNobWVudCBjJiM0MzsmIzQzOyBmaWxlLCBhbmQgZ290byBsaW5lIDI2
MiBhbmQgY29sdW1uIDE3LiBjdXJzb3Igd2lsbCBiZSBvbiB3b3JkIOKAnHN1YnNlc3Npb24mcXVv
dDs8YnI+DQo1LiBNLXggbmFycm93LXRvLWRlZnVuPGJyPg0KNi4gTS14IGllZGl0LW1vZGU8YnI+
DQo3LiBNLXggd2lkZW48YnI+DQo4LiBZb3Ugd2lsbCBzZWUgdGhlIGxhZyB3aGVuIGlucHV0dGlu
ZyBjaGFycy48YnI+DQo8YnI+DQo8L2Rpdj4NCjwvc3Bhbj48L2ZvbnQ+PC9kaXY+DQo8ZGl2IGNs
YXNzPSJCb2R5RnJhZ21lbnQiPjxmb250IHNpemU9IjIiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6
MTFwdDsiPg0KPGRpdiBjbGFzcz0iUGxhaW5UZXh0Ij48YnI+DQo8YnI+DQo8YnI+DQo8L2Rpdj4N
Cjwvc3Bhbj48L2ZvbnQ+PC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo=

--_000_PS1PR06MB2759795CDC5AFD9D6E41780FA8270PS1PR06MB2759apcp_--

--_004_PS1PR06MB2759795CDC5AFD9D6E41780FA8270PS1PR06MB2759apcp_
Content-Type: application/octet-stream; name="QuickTimeFileSink.cpp"
Content-Description: QuickTimeFileSink.cpp
Content-Disposition: attachment; filename="QuickTimeFileSink.cpp"; size=85068;
	creation-date="Fri, 19 Apr 2019 00:32:34 GMT";
	modification-date="Fri, 19 Apr 2019 00:32:34 GMT"
Content-ID: <CC353FA3212CEB4C83FE06A617F76333@HIDDEN>
Content-Transfer-Encoding: base64

LyoqKioqKioqKioNClRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQp0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlDQpGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyDQpvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAoU2VlIDxodHRwOi8vd3d3LmdudS5v
cmcvY29weWxlZnQvbGVzc2VyLmh0bWw+LikNCg0KVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUDQpBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUw0KRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQptb3JlIGRldGFpbHMuDQoNCllvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQ0KYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwNCjUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSAgVVNBDQoqKioqKioqKioqLw0KLy8gImxpdmVN
ZWRpYSINCi8vIENvcHlyaWdodCAoYykgMTk5Ni0yMDE4IExpdmUgTmV0d29ya3MsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQovLyBBIHNpbmsgdGhhdCBnZW5lcmF0ZXMgYSBRdWlja1RpbWUg
ZmlsZSBmcm9tIGEgY29tcG9zaXRlIG1lZGlhIHNlc3Npb24NCi8vIEltcGxlbWVudGF0aW9uDQoN
CiNpbmNsdWRlICJRdWlja1RpbWVGaWxlU2luay5oaCINCiNpbmNsdWRlICJRdWlja1RpbWVHZW5l
cmljUlRQU291cmNlLmhoIg0KI2luY2x1ZGUgIkdyb3Vwc29ja0hlbHBlci5oaCINCiNpbmNsdWRl
ICJJbnB1dEZpbGUuaGgiDQojaW5jbHVkZSAiT3V0cHV0RmlsZS5oaCINCiNpbmNsdWRlICJIMjYz
cGx1c1ZpZGVvUlRQU291cmNlLmhoIiAvLyBmb3IgdGhlIHNwZWNpYWwgaGVhZGVyDQojaW5jbHVk
ZSAiTVBFRzRHZW5lcmljUlRQU291cmNlLmhoIiAvL2ZvciAic2FtcGxpbmdGcmVxdWVuY3lGcm9t
QXVkaW9TcGVjaWZpY0NvbmZpZygpIg0KI2luY2x1ZGUgIk1QRUc0TEFUTUF1ZGlvUlRQU291cmNl
LmhoIiAvLyBmb3IgInBhcnNlR2VuZXJhbENvbmZpZ1N0cigpIg0KI2luY2x1ZGUgIkJhc2U2NC5o
aCINCg0KI2luY2x1ZGUgPGN0eXBlLmg+DQoNCiNkZWZpbmUgZm91ckNoYXIoeCx5LHosdykgKCAo
KHgpPDwyNCl8KCh5KTw8MTYpfCgoeik8PDgpfCh3KSApDQoNCiNkZWZpbmUgSDI2NF9JRFJfRlJB
TUUgMHg2NSAgLy9iaXQgOCA9PSAwLCBiaXRzIDctNiAocmVmKSA9PSAzLCBiaXRzIDUtMCAodHlw
ZSkgPT0gNQ0KDQovLy8vLy8vLy8vIFN1YnNlc3Npb25JT1N0YXRlLCBDaHVua0Rlc2NyaXB0b3Ig
Ly8vLy8vLy8vLy8NCi8vIEEgc3RydWN0dXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBJL08gc3Rh
dGUgb2YgZWFjaCBpbnB1dCAnc3Vic2Vzc2lvbic6DQoNCmNsYXNzIENodW5rRGVzY3JpcHRvciB7
DQpwdWJsaWM6DQogIENodW5rRGVzY3JpcHRvcihpbnQ2NF90IG9mZnNldEluRmlsZSwgdW5zaWdu
ZWQgc2l6ZSwNCgkJICB1bnNpZ25lZCBmcmFtZVNpemUsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24s
DQoJCSAgc3RydWN0IHRpbWV2YWwgcHJlc2VudGF0aW9uVGltZSk7DQoNCiAgQ2h1bmtEZXNjcmlw
dG9yKiBleHRlbmRDaHVuayhpbnQ2NF90IG5ld09mZnNldEluRmlsZSwgdW5zaWduZWQgbmV3U2l6
ZSwNCgkJCSAgICAgICB1bnNpZ25lZCBuZXdGcmFtZVNpemUsDQoJCQkgICAgICAgdW5zaWduZWQg
bmV3RnJhbWVEdXJhdGlvbiwNCgkJCSAgICAgICBzdHJ1Y3QgdGltZXZhbCBuZXdQcmVzZW50YXRp
b25UaW1lKTsNCiAgICAgIC8vIHRoaXMgbWF5IGVuZCB1cCBhbGxvY2F0aW5nIGEgbmV3IGNodW5r
IGluc3RlYWQNCnB1YmxpYzoNCiAgQ2h1bmtEZXNjcmlwdG9yKiBmTmV4dENodW5rOw0KICBpbnQ2
NF90IGZPZmZzZXRJbkZpbGU7DQogIHVuc2lnbmVkIGZOdW1GcmFtZXM7DQogIHVuc2lnbmVkIGZG
cmFtZVNpemU7DQogIHVuc2lnbmVkIGZGcmFtZUR1cmF0aW9uOw0KICBzdHJ1Y3QgdGltZXZhbCBm
UHJlc2VudGF0aW9uVGltZTsgLy8gb2YgdGhlIHN0YXJ0IG9mIHRoZSBkYXRhDQp9Ow0KDQpjbGFz
cyBTdWJzZXNzaW9uQnVmZmVyIHsNCnB1YmxpYzoNCiAgU3Vic2Vzc2lvbkJ1ZmZlcih1bnNpZ25l
ZCBidWZmZXJTaXplKQ0KICAgIDogZkJ1ZmZlclNpemUoYnVmZmVyU2l6ZSkgew0KICAgIHJlc2V0
KCk7DQogICAgZkRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltidWZmZXJTaXplXTsNCiAgfQ0KICB2
aXJ0dWFsIH5TdWJzZXNzaW9uQnVmZmVyKCkgeyBkZWxldGVbXSBmRGF0YTsgfQ0KICB2b2lkIHJl
c2V0KCkgeyBmQnl0ZXNJblVzZSA9IDA7IH0NCiAgdm9pZCBhZGRCeXRlcyh1bnNpZ25lZCBudW1C
eXRlcykgeyBmQnl0ZXNJblVzZSArPSBudW1CeXRlczsgfQ0KDQogIHVuc2lnbmVkIGNoYXIqIGRh
dGFTdGFydCgpIHsgcmV0dXJuICZmRGF0YVswXTsgfQ0KICB1bnNpZ25lZCBjaGFyKiBkYXRhRW5k
KCkgeyByZXR1cm4gJmZEYXRhW2ZCeXRlc0luVXNlXTsgfQ0KICB1bnNpZ25lZCBieXRlc0luVXNl
KCkgY29uc3QgeyByZXR1cm4gZkJ5dGVzSW5Vc2U7IH0NCiAgdW5zaWduZWQgYnl0ZXNBdmFpbGFi
bGUoKSBjb25zdCB7IHJldHVybiBmQnVmZmVyU2l6ZSAtIGZCeXRlc0luVXNlOyB9DQoNCiAgdm9p
ZCBzZXRQcmVzZW50YXRpb25UaW1lKHN0cnVjdCB0aW1ldmFsIGNvbnN0JiBwcmVzZW50YXRpb25U
aW1lKSB7DQogICAgZlByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOw0KICB9DQog
IHN0cnVjdCB0aW1ldmFsIGNvbnN0JiBwcmVzZW50YXRpb25UaW1lKCkgY29uc3Qge3JldHVybiBm
UHJlc2VudGF0aW9uVGltZTt9DQoNCnByaXZhdGU6DQogIHVuc2lnbmVkIGZCdWZmZXJTaXplOw0K
ICBzdHJ1Y3QgdGltZXZhbCBmUHJlc2VudGF0aW9uVGltZTsNCiAgdW5zaWduZWQgY2hhciogZkRh
dGE7DQogIHVuc2lnbmVkIGZCeXRlc0luVXNlOw0KfTsNCg0KY2xhc3MgU3luY0ZyYW1lIHsNCnB1
YmxpYzoNCiAgU3luY0ZyYW1lKHVuc2lnbmVkIGZyYW1lTnVtKTsNCg0KcHVibGljOg0KICBjbGFz
cyBTeW5jRnJhbWUgKm5leHRTeW5jRnJhbWU7DQogIHVuc2lnbmVkIHNmRnJhbWVOdW07ICANCn07
DQoNCi8vIEEgNjQtYml0IGNvdW50ZXIsIHVzZWQgYmVsb3c6DQpjbGFzcyBDb3VudDY0IHsNCnB1
YmxpYzoNCiAgQ291bnQ2NCgpDQogICAgOiBoaSgwKSwgbG8oMCkgew0KICB9DQoNCiAgdm9pZCBv
cGVyYXRvcis9KHVuc2lnbmVkIGFyZyk7DQoNCiAgdV9pbnQzMl90IGhpLCBsbzsNCn07DQoNCmNs
YXNzIFN1YnNlc3Npb25JT1N0YXRlIHsNCnB1YmxpYzoNCiAgU3Vic2Vzc2lvbklPU3RhdGUoUXVp
Y2tUaW1lRmlsZVNpbmsmIHNpbmssIE1lZGlhU3Vic2Vzc2lvbiYgc3Vic2Vzc2lvbik7DQogIHZp
cnR1YWwgflN1YnNlc3Npb25JT1N0YXRlKCk7DQoNCiAgQm9vbGVhbiBzZXRRVHN0YXRlKCk7DQog
IHZvaWQgc2V0RmluYWxRVHN0YXRlKCk7DQoNCiAgdm9pZCBhZnRlckdldHRpbmdGcmFtZSh1bnNp
Z25lZCBwYWNrZXREYXRhU2l6ZSwNCgkJCSBzdHJ1Y3QgdGltZXZhbCBwcmVzZW50YXRpb25UaW1l
KTsNCiAgdm9pZCBvblNvdXJjZUNsb3N1cmUoKTsNCg0KICBCb29sZWFuIHN5bmNPSyhzdHJ1Y3Qg
dGltZXZhbCBwcmVzZW50YXRpb25UaW1lKTsNCiAgICAgIC8vIHJldHVybnMgdHJ1ZSBpZmYgZGF0
YSBpcyB1c2FibGUgZGVzcGl0ZSBhIHN5bmMgY2hlY2sNCg0KICBzdGF0aWMgdm9pZCBzZXRIaW50
VHJhY2soU3Vic2Vzc2lvbklPU3RhdGUqIGhpbnRlZFRyYWNrLA0KCQkJICAgU3Vic2Vzc2lvbklP
U3RhdGUqIGhpbnRUcmFjayk7DQogIEJvb2xlYW4gaXNIaW50VHJhY2soKSBjb25zdCB7IHJldHVy
biBmVHJhY2tIaW50ZWRCeVVzICE9IE5VTEw7IH0NCiAgQm9vbGVhbiBoYXNIaW50VHJhY2soKSBj
b25zdCB7IHJldHVybiBmSGludFRyYWNrRm9yVXMgIT0gTlVMTDsgfQ0KDQogIFVzYWdlRW52aXJv
bm1lbnQmIGVudmlyKCkgY29uc3QgeyByZXR1cm4gZk91clNpbmsuZW52aXIoKTsgfQ0KDQpwdWJs
aWM6DQogIHN0YXRpYyB1bnNpZ25lZCBmQ3VycmVudFRyYWNrTnVtYmVyOw0KICB1bnNpZ25lZCBm
VHJhY2tJRDsNCiAgU3Vic2Vzc2lvbklPU3RhdGUqIGZIaW50VHJhY2tGb3JVczsgU3Vic2Vzc2lv
bklPU3RhdGUqIGZUcmFja0hpbnRlZEJ5VXM7DQoNCiAgU3Vic2Vzc2lvbkJ1ZmZlciAqZkJ1ZmZl
ciwgKmZQcmV2QnVmZmVyOw0KICBRdWlja1RpbWVGaWxlU2luayYgZk91clNpbms7DQogIE1lZGlh
U3Vic2Vzc2lvbiYgZk91clN1YnNlc3Npb247DQoNCiAgdW5zaWduZWQgc2hvcnQgZkxhc3RQYWNr
ZXRSVFBTZXFOdW07DQogIEJvb2xlYW4gZk91clNvdXJjZUlzQWN0aXZlOw0KDQogIEJvb2xlYW4g
ZkhhdmVCZWVuU3luY2VkOyAvLyB1c2VkIGluIHN5bmNocm9uaXppbmcgd2l0aCBvdGhlciBzdHJl
YW1zDQogIHN0cnVjdCB0aW1ldmFsIGZTeW5jVGltZTsNCg0KICBCb29sZWFuIGZRVEVuYWJsZVRy
YWNrOw0KICB1bnNpZ25lZCBmUVRjb21wb25lbnRTdWJ0eXBlOw0KICBjaGFyIGNvbnN0KiBmUVRj
b21wb25lbnROYW1lOw0KICB0eXBlZGVmIHVuc2lnbmVkIChRdWlja1RpbWVGaWxlU2luazo6KmF0
b21DcmVhdGlvbkZ1bmMpKCk7DQogIGF0b21DcmVhdGlvbkZ1bmMgZlFUTWVkaWFJbmZvcm1hdGlv
bkF0b21DcmVhdG9yOw0KICBhdG9tQ3JlYXRpb25GdW5jIGZRVE1lZGlhRGF0YUF0b21DcmVhdG9y
Ow0KICBjaGFyIGNvbnN0KiBmUVRBdWRpb0RhdGFUeXBlOw0KICB1bnNpZ25lZCBzaG9ydCBmUVRT
b3VuZFNhbXBsZVZlcnNpb247DQogIHVuc2lnbmVkIGZRVFRpbWVTY2FsZTsNCiAgdW5zaWduZWQg
ZlFUVGltZVVuaXRzUGVyU2FtcGxlOw0KICB1bnNpZ25lZCBmUVRCeXRlc1BlckZyYW1lOw0KICB1
bnNpZ25lZCBmUVRTYW1wbGVzUGVyRnJhbWU7DQogIC8vIFRoZXNlIG5leHQgZmllbGRzIGFyZSBk
ZXJpdmVkIGZyb20gdGhlIG9uZXMgYWJvdmUsDQogIC8vIHBsdXMgdGhlIGluZm9ybWF0aW9uIGZy
b20gZWFjaCBjaHVuazoNCiAgdW5zaWduZWQgZlFUVG90TnVtU2FtcGxlczsNCiAgdW5zaWduZWQg
ZlFURHVyYXRpb25NOyAvLyBpbiBtZWRpYSB0aW1lIHVuaXRzDQogIHVuc2lnbmVkIGZRVER1cmF0
aW9uVDsgLy8gaW4gdHJhY2sgdGltZSB1bml0cw0KICBpbnQ2NF90IGZUS0hEX2R1cmF0aW9uUG9z
bjsNCiAgICAgIC8vIHBvc2l0aW9uIG9mIHRoZSBkdXJhdGlvbiBpbiB0aGUgb3V0cHV0ICd0a2hk
JyBhdG9tDQogIHVuc2lnbmVkIGZRVEluaXRpYWxPZmZzZXREdXJhdGlvbjsNCiAgICAgIC8vIGlm
IHRoZXJlJ3MgYSBwYXVzZSBhdCB0aGUgYmVnaW5uaW5nDQoNCiAgQ2h1bmtEZXNjcmlwdG9yICpm
SGVhZENodW5rLCAqZlRhaWxDaHVuazsNCiAgdW5zaWduZWQgZk51bUNodW5rczsNCiAgU3luY0Zy
YW1lICpmSGVhZFN5bmNGcmFtZSwgKmZUYWlsU3luY0ZyYW1lOw0KDQogIC8vIENvdW50ZXJzIHRv
IGJlIHVzZWQgaW4gdGhlIGhpbnQgdHJhY2sncyAndWR0YScvJ2hpbmYnIGF0b207DQogIHN0cnVj
dCBoaW5mIHsNCiAgICBDb3VudDY0IHRycHk7DQogICAgQ291bnQ2NCBudW1wOw0KICAgIENvdW50
NjQgdHB5bDsNCiAgICAvLyBJcyAnbWF4cicgbmVlZGVkPyBDb21wdXRpbmcgdGhpcyB3b3VsZCBi
ZSBhIFBJVEEuICMjIyMjDQogICAgQ291bnQ2NCBkbWVkOw0KICAgIENvdW50NjQgZGltbTsNCiAg
ICAvLyAnZHJlcCcgaXMgYWx3YXlzIDANCiAgICAvLyAndG1pbicgYW5kICd0bWF4JyBhcmUgYWx3
YXlzIDANCiAgICB1bnNpZ25lZCBwbWF4Ow0KICAgIHVuc2lnbmVkIGRtYXg7DQogIH0gZkhJTkY7
DQoNCnByaXZhdGU6DQogIHZvaWQgdXNlRnJhbWUoU3Vic2Vzc2lvbkJ1ZmZlciYgYnVmZmVyKTsN
CiAgdm9pZCB1c2VGcmFtZUZvckhpbnRpbmcodW5zaWduZWQgZnJhbWVTaXplLA0KCQkJICBzdHJ1
Y3QgdGltZXZhbCBwcmVzZW50YXRpb25UaW1lLA0KCQkJICB1bnNpZ25lZCBzdGFydFNhbXBsZU51
bWJlcik7DQoNCiAgLy8gdXNlZCBieSB0aGUgYWJvdmUgdHdvIHJvdXRpbmVzOg0KICB1bnNpZ25l
ZCB1c2VGcmFtZTEodW5zaWduZWQgc291cmNlRGF0YVNpemUsDQoJCSAgICAgc3RydWN0IHRpbWV2
YWwgcHJlc2VudGF0aW9uVGltZSwNCgkJICAgICB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBpbnQ2
NF90IGRlc3RGaWxlT2Zmc2V0KTsNCiAgICAgIC8vIHJldHVybnMgdGhlIG51bWJlciBvZiBzYW1w
bGVzIGluIHRoaXMgZGF0YQ0KDQpwcml2YXRlOg0KICAvLyBBIHN0cnVjdHVyZSB1c2VkIGZvciB0
ZW1wb3JhcmlseSBzdG9yaW5nIGZyYW1lIHN0YXRlOg0KICBzdHJ1Y3Qgew0KICAgIHVuc2lnbmVk
IGZyYW1lU2l6ZTsNCiAgICBzdHJ1Y3QgdGltZXZhbCBwcmVzZW50YXRpb25UaW1lOw0KICAgIGlu
dDY0X3QgZGVzdEZpbGVPZmZzZXQ7IC8vIHVzZWQgZm9yIG5vbi1oaW50IHRyYWNrcyBvbmx5DQoN
CiAgICAvLyBUaGUgcmVtYWluaW5nIGZpZWxkcyBhcmUgdXNlZCBmb3IgaGludCB0cmFja3Mgb25s
eToNCiAgICB1bnNpZ25lZCBzdGFydFNhbXBsZU51bWJlcjsNCiAgICB1bnNpZ25lZCBzaG9ydCBz
ZXFOdW07DQogICAgdW5zaWduZWQgcnRwSGVhZGVyOw0KICAgIHVuc2lnbmVkIGNoYXIgbnVtU3Bl
Y2lhbEhlYWRlcnM7IC8vIHVzZWQgd2hlbiBvdXIgUlRQIHNvdXJjZSBoYXMgc3BlY2lhbCBoZWFk
ZXJzDQogICAgdW5zaWduZWQgc3BlY2lhbEhlYWRlckJ5dGVzTGVuZ3RoOyAvLyBkaXR0bw0KICAg
IHVuc2lnbmVkIGNoYXIgc3BlY2lhbEhlYWRlckJ5dGVzW1NQRUNJQUxfSEVBREVSX0JVRkZFUl9T
SVpFXTsgLy8gZGl0dG8NCiAgICB1bnNpZ25lZCBwYWNrZXRTaXplc1syNTZdOw0KICB9IGZQcmV2
RnJhbWVTdGF0ZTsNCn07DQoNCg0KLy8vLy8vLy8vLyBRdWlja1RpbWVGaWxlU2luayBpbXBsZW1l
bnRhdGlvbiAvLy8vLy8vLy8vDQoNClF1aWNrVGltZUZpbGVTaW5rOjpRdWlja1RpbWVGaWxlU2lu
ayhVc2FnZUVudmlyb25tZW50JiBlbnYsDQoJCQkJICAgICBNZWRpYVNlc3Npb24mIGlucHV0U2Vz
c2lvbiwNCgkJCQkgICAgIGNoYXIgY29uc3QqIG91dHB1dEZpbGVOYW1lLA0KCQkJCSAgICAgdW5z
aWduZWQgYnVmZmVyU2l6ZSwNCgkJCQkgICAgIHVuc2lnbmVkIHNob3J0IG1vdmllV2lkdGgsDQoJ
CQkJICAgICB1bnNpZ25lZCBzaG9ydCBtb3ZpZUhlaWdodCwNCgkJCQkgICAgIHVuc2lnbmVkIG1v
dmllRlBTLA0KCQkJCSAgICAgQm9vbGVhbiBwYWNrZXRMb3NzQ29tcGVuc2F0ZSwNCgkJCQkgICAg
IEJvb2xlYW4gc3luY1N0cmVhbXMsDQoJCQkJICAgICBCb29sZWFuIGdlbmVyYXRlSGludFRyYWNr
cywNCgkJCQkgICAgIEJvb2xlYW4gZ2VuZXJhdGVNUDRGb3JtYXQpDQogIDogTWVkaXVtKGVudiks
IGZJbnB1dFNlc3Npb24oaW5wdXRTZXNzaW9uKSwNCiAgICBmQnVmZmVyU2l6ZShidWZmZXJTaXpl
KSwgZlBhY2tldExvc3NDb21wZW5zYXRlKHBhY2tldExvc3NDb21wZW5zYXRlKSwNCiAgICBmU3lu
Y1N0cmVhbXMoc3luY1N0cmVhbXMpLCBmR2VuZXJhdGVNUDRGb3JtYXQoZ2VuZXJhdGVNUDRGb3Jt
YXQpLA0KICAgIGZBcmVDdXJyZW50bHlCZWluZ1BsYXllZChGYWxzZSksDQogICAgZkxhcmdlc3RS
VFB0aW1lc3RhbXBGcmVxdWVuY3koMCksDQogICAgZk51bVN1YnNlc3Npb25zKDApLCBmTnVtU3lu
Y2VkU3Vic2Vzc2lvbnMoMCksDQogICAgZkhhdmVDb21wbGV0ZWRPdXRwdXRGaWxlKEZhbHNlKSwN
CiAgICBmTW92aWVXaWR0aChtb3ZpZVdpZHRoKSwgZk1vdmllSGVpZ2h0KG1vdmllSGVpZ2h0KSwN
CiAgICBmTW92aWVGUFMobW92aWVGUFMpLCBmTWF4VHJhY2tEdXJhdGlvbk0oMCkgew0KICBmT3V0
RmlkID0gT3Blbk91dHB1dEZpbGUoZW52LCBvdXRwdXRGaWxlTmFtZSk7DQogIGlmIChmT3V0Rmlk
ID09IE5VTEwpIHJldHVybjsNCg0KICBmTmV3ZXN0U3luY1RpbWUudHZfc2VjID0gZk5ld2VzdFN5
bmNUaW1lLnR2X3VzZWMgPSAwOw0KICBmRmlyc3REYXRhVGltZS50dl9zZWMgPSBmRmlyc3REYXRh
VGltZS50dl91c2VjID0gKHVuc2lnbmVkKSh+MCk7DQoNCiAgLy8gU2V0IHVwIEkvTyBzdGF0ZSBm
b3IgZWFjaCBpbnB1dCBzdWJzZXNzaW9uOg0KICBNZWRpYVN1YnNlc3Npb25JdGVyYXRvciBpdGVy
KGZJbnB1dFNlc3Npb24pOw0KICBNZWRpYVN1YnNlc3Npb24qIHN1YnNlc3Npb247DQogIHdoaWxl
ICgoc3Vic2Vzc2lvbiA9IGl0ZXIubmV4dCgpKSAhPSBOVUxMKSB7DQogICAgLy8gSWdub3JlIHN1
YnNlc3Npb25zIHdpdGhvdXQgYSBkYXRhIHNvdXJjZToNCiAgICBGcmFtZWRTb3VyY2UqIHN1YnNl
c3Npb25Tb3VyY2UgPSBzdWJzZXNzaW9uLT5yZWFkU291cmNlKCk7DQogICAgaWYgKHN1YnNlc3Np
b25Tb3VyY2UgPT0gTlVMTCkgY29udGludWU7DQoNCiAgICAvLyBJZiAic3Vic2Vzc2lvbidzIiBT
RFAgZGVzY3JpcHRpb24gc3BlY2lmaWVkIHNjcmVlbiBkaW1lbnNpb24NCiAgICAvLyBvciBmcmFt
ZSByYXRlIHBhcmFtZXRlcnMsIHRoZW4gdXNlIHRoZXNlLiAgKE5vdGUgdGhhdCB0aGlzIG11c3QN
CiAgICAvLyBiZSBkb25lIGJlZm9yZSB0aGUgY2FsbCB0byAic2V0UVRTdGF0ZSgpIiBiZWxvdy4p
DQogICAgaWYgKHN1YnNlc3Npb24tPnZpZGVvV2lkdGgoKSAhPSAwKSB7DQogICAgICBmTW92aWVX
aWR0aCA9IHN1YnNlc3Npb24tPnZpZGVvV2lkdGgoKTsNCiAgICB9DQogICAgaWYgKHN1YnNlc3Np
b24tPnZpZGVvSGVpZ2h0KCkgIT0gMCkgew0KICAgICAgZk1vdmllSGVpZ2h0ID0gc3Vic2Vzc2lv
bi0+dmlkZW9IZWlnaHQoKTsNCiAgICB9DQogICAgaWYgKHN1YnNlc3Npb24tPnZpZGVvRlBTKCkg
IT0gMCkgew0KICAgICAgZk1vdmllRlBTID0gc3Vic2Vzc2lvbi0+dmlkZW9GUFMoKTsNCiAgICB9
DQoNCiAgICBTdWJzZXNzaW9uSU9TdGF0ZSogaW9TdGF0ZQ0KICAgICAgPSBuZXcgU3Vic2Vzc2lv
bklPU3RhdGUoKnRoaXMsICpzdWJzZXNzaW9uKTsNCiAgICBpZiAoaW9TdGF0ZSA9PSBOVUxMIHx8
ICFpb1N0YXRlLT5zZXRRVHN0YXRlKCkpIHsNCiAgICAgIC8vIFdlJ3JlIG5vdCBhYmxlIHRvIG91
dHB1dCBhIFF1aWNrVGltZSB0cmFjayBmb3IgdGhpcyBzdWJzZXNzaW9uDQogICAgICBkZWxldGUg
aW9TdGF0ZTsgaW9TdGF0ZSA9IE5VTEw7DQogICAgICBjb250aW51ZTsNCiAgICB9DQogICAgc3Vi
c2Vzc2lvbi0+bWlzY1B0ciA9ICh2b2lkKilpb1N0YXRlOw0KDQogICAgaWYgKGdlbmVyYXRlSGlu
dFRyYWNrcykgew0KICAgICAgLy8gQWxzbyBjcmVhdGUgYSBoaW50IHRyYWNrIGZvciB0aGlzIHRy
YWNrOg0KICAgICAgU3Vic2Vzc2lvbklPU3RhdGUqIGhpbnRUcmFjaw0KCT0gbmV3IFN1YnNlc3Np
b25JT1N0YXRlKCp0aGlzLCAqc3Vic2Vzc2lvbik7DQogICAgICBTdWJzZXNzaW9uSU9TdGF0ZTo6
c2V0SGludFRyYWNrKGlvU3RhdGUsIGhpbnRUcmFjayk7DQogICAgICBpZiAoIWhpbnRUcmFjay0+
c2V0UVRzdGF0ZSgpKSB7DQoJZGVsZXRlIGhpbnRUcmFjazsNCglTdWJzZXNzaW9uSU9TdGF0ZTo6
c2V0SGludFRyYWNrKGlvU3RhdGUsIE5VTEwpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIEFs
c28gc2V0IGEgJ0JZRScgaGFuZGxlciBmb3IgdGhpcyBzdWJzZXNzaW9uJ3MgUlRDUCBpbnN0YW5j
ZToNCiAgICBpZiAoc3Vic2Vzc2lvbi0+cnRjcEluc3RhbmNlKCkgIT0gTlVMTCkgew0KICAgICAg
c3Vic2Vzc2lvbi0+cnRjcEluc3RhbmNlKCktPnNldEJ5ZUhhbmRsZXIob25SVENQQnllLCBpb1N0
YXRlKTsNCiAgICB9DQoNCiAgICB1bnNpZ25lZCBydHBUaW1lc3RhbXBGcmVxdWVuY3kgPSBzdWJz
ZXNzaW9uLT5ydHBUaW1lc3RhbXBGcmVxdWVuY3koKTsNCiAgICBpZiAocnRwVGltZXN0YW1wRnJl
cXVlbmN5ID4gZkxhcmdlc3RSVFB0aW1lc3RhbXBGcmVxdWVuY3kpIHsNCiAgICAgIGZMYXJnZXN0
UlRQdGltZXN0YW1wRnJlcXVlbmN5ID0gcnRwVGltZXN0YW1wRnJlcXVlbmN5Ow0KICAgIH0NCg0K
ICAgICsrZk51bVN1YnNlc3Npb25zOw0KICB9DQoNCiAgLy8gVXNlIHRoZSBjdXJyZW50IHRpbWUg
YXMgdGhlIGZpbGUncyBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uDQogIC8vIHRpbWUuICBVc2Ug
QXBwbGUncyB0aW1lIGZvcm1hdDogc2Vjb25kcyAoVVRDKSBzaW5jZSBKYW51YXJ5IDEsIDE5MDQN
Cg0KICBnZXR0aW1lb2ZkYXkoJmZTdGFydFRpbWUsIE5VTEwpOw0KICBmQXBwbGVDcmVhdGlvblRp
bWUgPSBmU3RhcnRUaW1lLnR2X3NlYyAtIDB4ODNkYTRmODA7DQoNCiAgLy8gQmVnaW4gYnkgd3Jp
dGluZyBhICJtZGF0IiBhdG9tIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4NCiAgLy8gKExhdGVy
LCB3aGVuIHdlJ3ZlIGZpbmlzaGVkIGNvcHlpbmcgZGF0YSB0byB0aGUgZmlsZSwgd2UnbGwgY29t
ZQ0KICAvLyBiYWNrIGFuZCBmaWxsIGluIGl0cyBzaXplLikNCiAgZk1EQVRwb3NpdGlvbiA9IFRl
bGxGaWxlNjQoZk91dEZpZCk7DQogIGFkZEF0b21IZWFkZXI2NCgibWRhdCIpOw0KICAvLyBhZGQg
NjRCaXQgb2Zmc2V0DQogIGZNREFUcG9zaXRpb24gKz0gODsNCn0NCg0KUXVpY2tUaW1lRmlsZVNp
bms6On5RdWlja1RpbWVGaWxlU2luaygpIHsNCiAgY29tcGxldGVPdXRwdXRGaWxlKCk7DQoNCiAg
Ly8gVGhlbiwgc3RvcCBzdHJlYW1pbmcgYW5kIGRlbGV0ZSBlYWNoIGFjdGl2ZSAiU3Vic2Vzc2lv
bklPU3RhdGUiOg0KICBNZWRpYVN1YnNlc3Npb25JdGVyYXRvciBpdGVyKGZJbnB1dFNlc3Npb24p
Ow0KICBNZWRpYVN1YnNlc3Npb24qIHN1YnNlc3Npb247DQogIHdoaWxlICgoc3Vic2Vzc2lvbiA9
IGl0ZXIubmV4dCgpKSAhPSBOVUxMKSB7DQogICAgaWYgKHN1YnNlc3Npb24tPnJlYWRTb3VyY2Uo
KSAhPSBOVUxMKSBzdWJzZXNzaW9uLT5yZWFkU291cmNlKCktPnN0b3BHZXR0aW5nRnJhbWVzKCk7
DQoNCiAgICBTdWJzZXNzaW9uSU9TdGF0ZSogaW9TdGF0ZQ0KICAgICAgPSAoU3Vic2Vzc2lvbklP
U3RhdGUqKShzdWJzZXNzaW9uLT5taXNjUHRyKTsNCiAgICBpZiAoaW9TdGF0ZSA9PSBOVUxMKSBj
b250aW51ZTsNCg0KICAgIGRlbGV0ZSBpb1N0YXRlLT5mSGludFRyYWNrRm9yVXM7IC8vIGlmIGFu
eQ0KICAgIGRlbGV0ZSBpb1N0YXRlOw0KICB9DQoNCiAgLy8gRmluYWxseSwgY2xvc2Ugb3VyIG91
dHB1dCBmaWxlOg0KICBDbG9zZU91dHB1dEZpbGUoZk91dEZpZCk7DQp9DQoNClF1aWNrVGltZUZp
bGVTaW5rKg0KUXVpY2tUaW1lRmlsZVNpbms6OmNyZWF0ZU5ldyhVc2FnZUVudmlyb25tZW50JiBl
bnYsDQoJCQkgICAgIE1lZGlhU2Vzc2lvbiYgaW5wdXRTZXNzaW9uLA0KCQkJICAgICBjaGFyIGNv
bnN0KiBvdXRwdXRGaWxlTmFtZSwNCgkJCSAgICAgdW5zaWduZWQgYnVmZmVyU2l6ZSwNCgkJCSAg
ICAgdW5zaWduZWQgc2hvcnQgbW92aWVXaWR0aCwNCgkJCSAgICAgdW5zaWduZWQgc2hvcnQgbW92
aWVIZWlnaHQsDQoJCQkgICAgIHVuc2lnbmVkIG1vdmllRlBTLA0KCQkJICAgICBCb29sZWFuIHBh
Y2tldExvc3NDb21wZW5zYXRlLA0KCQkJICAgICBCb29sZWFuIHN5bmNTdHJlYW1zLA0KCQkJICAg
ICBCb29sZWFuIGdlbmVyYXRlSGludFRyYWNrcywNCgkJCSAgICAgQm9vbGVhbiBnZW5lcmF0ZU1Q
NEZvcm1hdCkgew0KICBRdWlja1RpbWVGaWxlU2luayogbmV3U2luayA9IA0KICAgIG5ldyBRdWlj
a1RpbWVGaWxlU2luayhlbnYsIGlucHV0U2Vzc2lvbiwgb3V0cHV0RmlsZU5hbWUsIGJ1ZmZlclNp
emUsIG1vdmllV2lkdGgsIG1vdmllSGVpZ2h0LCBtb3ZpZUZQUywNCgkJCSAgcGFja2V0TG9zc0Nv
bXBlbnNhdGUsIHN5bmNTdHJlYW1zLCBnZW5lcmF0ZUhpbnRUcmFja3MsIGdlbmVyYXRlTVA0Rm9y
bWF0KTsNCiAgaWYgKG5ld1NpbmsgPT0gTlVMTCB8fCBuZXdTaW5rLT5mT3V0RmlkID09IE5VTEwp
IHsNCiAgICBNZWRpdW06OmNsb3NlKG5ld1NpbmspOw0KICAgIHJldHVybiBOVUxMOw0KICB9DQoN
CiAgcmV0dXJuIG5ld1Npbms7DQp9DQoNCnZvaWQgUXVpY2tUaW1lRmlsZVNpbmsNCjo6bm90ZVJl
Y29yZGVkRnJhbWUoTWVkaWFTdWJzZXNzaW9uJiAvKmlucHV0U3Vic2Vzc2lvbiovLA0KCQkgICAg
dW5zaWduZWQgLypwYWNrZXREYXRhU2l6ZSovLCBzdHJ1Y3QgdGltZXZhbCBjb25zdCYgLypwcmVz
ZW50YXRpb25UaW1lKi8pIHsNCiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbjogRG8gbm90aGlu
Zw0KfQ0KDQpCb29sZWFuIFF1aWNrVGltZUZpbGVTaW5rOjpzdGFydFBsYXlpbmcoYWZ0ZXJQbGF5
aW5nRnVuYyogYWZ0ZXJGdW5jLA0KCQkJCQl2b2lkKiBhZnRlckNsaWVudERhdGEpIHsNCiAgLy8g
TWFrZSBzdXJlIHdlJ3JlIG5vdCBhbHJlYWR5IGJlaW5nIHBsYXllZDoNCiAgaWYgKGZBcmVDdXJy
ZW50bHlCZWluZ1BsYXllZCkgew0KICAgIGVudmlyKCkuc2V0UmVzdWx0TXNnKCJUaGlzIHNpbmsg
aGFzIGFscmVhZHkgYmVlbiBwbGF5ZWQiKTsNCiAgICByZXR1cm4gRmFsc2U7DQogIH0NCg0KICBm
QXJlQ3VycmVudGx5QmVpbmdQbGF5ZWQgPSBUcnVlOw0KICBmQWZ0ZXJGdW5jID0gYWZ0ZXJGdW5j
Ow0KICBmQWZ0ZXJDbGllbnREYXRhID0gYWZ0ZXJDbGllbnREYXRhOw0KDQogIHJldHVybiBjb250
aW51ZVBsYXlpbmcoKTsNCn0NCg0KQm9vbGVhbiBRdWlja1RpbWVGaWxlU2luazo6Y29udGludWVQ
bGF5aW5nKCkgew0KICAvLyBSdW4gdGhyb3VnaCBlYWNoIG9mIG91ciBpbnB1dCBzZXNzaW9uJ3Mg
J3N1YnNlc3Npb25zJywNCiAgLy8gYXNraW5nIGZvciBhIGZyYW1lIGZyb20gZWFjaCBvbmU6DQog
IEJvb2xlYW4gaGF2ZUFjdGl2ZVN1YnNlc3Npb25zID0gRmFsc2U7DQogIE1lZGlhU3Vic2Vzc2lv
bkl0ZXJhdG9yIGl0ZXIoZklucHV0U2Vzc2lvbik7DQogIE1lZGlhU3Vic2Vzc2lvbiogc3Vic2Vz
c2lvbjsNCiAgd2hpbGUgKChzdWJzZXNzaW9uID0gaXRlci5uZXh0KCkpICE9IE5VTEwpIHsNCiAg
ICBGcmFtZWRTb3VyY2UqIHN1YnNlc3Npb25Tb3VyY2UgPSBzdWJzZXNzaW9uLT5yZWFkU291cmNl
KCk7DQogICAgaWYgKHN1YnNlc3Npb25Tb3VyY2UgPT0gTlVMTCkgY29udGludWU7DQoNCiAgICBp
ZiAoc3Vic2Vzc2lvblNvdXJjZS0+aXNDdXJyZW50bHlBd2FpdGluZ0RhdGEoKSkgY29udGludWU7
DQoNCiAgICBTdWJzZXNzaW9uSU9TdGF0ZSogaW9TdGF0ZQ0KICAgICAgPSAoU3Vic2Vzc2lvbklP
U3RhdGUqKShzdWJzZXNzaW9uLT5taXNjUHRyKTsNCiAgICBpZiAoaW9TdGF0ZSA9PSBOVUxMKSBj
b250aW51ZTsNCg0KICAgIGhhdmVBY3RpdmVTdWJzZXNzaW9ucyA9IFRydWU7DQogICAgdW5zaWdu
ZWQgY2hhciogdG9QdHIgPSBpb1N0YXRlLT5mQnVmZmVyLT5kYXRhRW5kKCk7DQogICAgdW5zaWdu
ZWQgdG9TaXplID0gaW9TdGF0ZS0+ZkJ1ZmZlci0+Ynl0ZXNBdmFpbGFibGUoKTsNCiAgICBzdWJz
ZXNzaW9uU291cmNlLT5nZXROZXh0RnJhbWUodG9QdHIsIHRvU2l6ZSwNCgkJCQkgICBhZnRlckdl
dHRpbmdGcmFtZSwgaW9TdGF0ZSwNCgkJCQkgICBvblNvdXJjZUNsb3N1cmUsIGlvU3RhdGUpOw0K
ICB9DQogIGlmICghaGF2ZUFjdGl2ZVN1YnNlc3Npb25zKSB7DQogICAgZW52aXIoKS5zZXRSZXN1
bHRNc2coIk5vIHN1YnNlc3Npb25zIGFyZSBjdXJyZW50bHkgYWN0aXZlIik7DQogICAgcmV0dXJu
IEZhbHNlOw0KICB9DQoNCiAgcmV0dXJuIFRydWU7DQp9DQoNCnZvaWQgUXVpY2tUaW1lRmlsZVNp
bmsNCjo6YWZ0ZXJHZXR0aW5nRnJhbWUodm9pZCogY2xpZW50RGF0YSwgdW5zaWduZWQgcGFja2V0
RGF0YVNpemUsDQoJCSAgICB1bnNpZ25lZCBudW1UcnVuY2F0ZWRCeXRlcywNCgkJICAgIHN0cnVj
dCB0aW1ldmFsIHByZXNlbnRhdGlvblRpbWUsDQoJCSAgICB1bnNpZ25lZCAvKmR1cmF0aW9uSW5N
aWNyb3NlY29uZHMqLykgew0KICBTdWJzZXNzaW9uSU9TdGF0ZSogaW9TdGF0ZSA9IChTdWJzZXNz
aW9uSU9TdGF0ZSopY2xpZW50RGF0YTsNCiAgaWYgKCFpb1N0YXRlLT5zeW5jT0socHJlc2VudGF0
aW9uVGltZSkpIHsNCiAgICAvLyBJZ25vcmUgdGhpcyBkYXRhOg0KICAgIGlvU3RhdGUtPmZPdXJT
aW5rLmNvbnRpbnVlUGxheWluZygpOw0KICAgIHJldHVybjsNCiAgfQ0KICBpZiAobnVtVHJ1bmNh
dGVkQnl0ZXMgPiAwKSB7DQogICAgaW9TdGF0ZS0+ZW52aXIoKSA8PCAiUXVpY2tUaW1lRmlsZVNp
bms6OmFmdGVyR2V0dGluZ0ZyYW1lKCk6IFRoZSBpbnB1dCBmcmFtZSBkYXRhIHdhcyB0b28gbGFy
Z2UgZm9yIG91ciBidWZmZXIuICAiDQogICAgICAgICAgICAgICAgICAgICA8PCBudW1UcnVuY2F0
ZWRCeXRlcw0KICAgICAgICAgICAgICAgICAgICAgPDwgIiBieXRlcyBvZiB0cmFpbGluZyBkYXRh
IHdhcyBkcm9wcGVkISAgQ29ycmVjdCB0aGlzIGJ5IGluY3JlYXNpbmcgdGhlIFwiYnVmZmVyU2l6
ZVwiIHBhcmFtZXRlciBpbiB0aGUgXCJjcmVhdGVOZXcoKVwiIGNhbGwuXG4iOw0KICB9DQogIGlv
U3RhdGUtPmFmdGVyR2V0dGluZ0ZyYW1lKHBhY2tldERhdGFTaXplLCBwcmVzZW50YXRpb25UaW1l
KTsNCn0NCg0Kdm9pZCBRdWlja1RpbWVGaWxlU2luazo6b25Tb3VyY2VDbG9zdXJlKHZvaWQqIGNs
aWVudERhdGEpIHsNCiAgU3Vic2Vzc2lvbklPU3RhdGUqIGlvU3RhdGUgPSAoU3Vic2Vzc2lvbklP
U3RhdGUqKWNsaWVudERhdGE7DQogIGlvU3RhdGUtPm9uU291cmNlQ2xvc3VyZSgpOw0KfQ0KDQp2
b2lkIFF1aWNrVGltZUZpbGVTaW5rOjpvblNvdXJjZUNsb3N1cmUxKCkgew0KICAvLyBDaGVjayB3
aGV0aGVyICphbGwqIG9mIHRoZSBzdWJzZXNzaW9uIHNvdXJjZXMgaGF2ZSBjbG9zZWQuDQogIC8v
IElmIG5vdCwgZG8gbm90aGluZyBmb3Igbm93Og0KICBNZWRpYVN1YnNlc3Npb25JdGVyYXRvciBp
dGVyKGZJbnB1dFNlc3Npb24pOw0KICBNZWRpYVN1YnNlc3Npb24qIHN1YnNlc3Npb247DQogIHdo
aWxlICgoc3Vic2Vzc2lvbiA9IGl0ZXIubmV4dCgpKSAhPSBOVUxMKSB7DQogICAgU3Vic2Vzc2lv
bklPU3RhdGUqIGlvU3RhdGUNCiAgICAgID0gKFN1YnNlc3Npb25JT1N0YXRlKikoc3Vic2Vzc2lv
bi0+bWlzY1B0cik7DQogICAgaWYgKGlvU3RhdGUgPT0gTlVMTCkgY29udGludWU7DQoNCiAgICBp
ZiAoaW9TdGF0ZS0+Zk91clNvdXJjZUlzQWN0aXZlKSByZXR1cm47IC8vIHRoaXMgc291cmNlIGhh
c24ndCBjbG9zZWQNCiAgfQ0KDQogIGNvbXBsZXRlT3V0cHV0RmlsZSgpOw0KDQogIC8vIENhbGwg
b3VyIHNwZWNpZmllZCAnYWZ0ZXInIGZ1bmN0aW9uOg0KICBpZiAoZkFmdGVyRnVuYyAhPSBOVUxM
KSB7DQogICAgKCpmQWZ0ZXJGdW5jKShmQWZ0ZXJDbGllbnREYXRhKTsNCiAgfQ0KfQ0KDQp2b2lk
IFF1aWNrVGltZUZpbGVTaW5rOjpvblJUQ1BCeWUodm9pZCogY2xpZW50RGF0YSkgew0KICBTdWJz
ZXNzaW9uSU9TdGF0ZSogaW9TdGF0ZSA9IChTdWJzZXNzaW9uSU9TdGF0ZSopY2xpZW50RGF0YTsN
Cg0KICBzdHJ1Y3QgdGltZXZhbCB0aW1lTm93Ow0KICBnZXR0aW1lb2ZkYXkoJnRpbWVOb3csIE5V
TEwpOw0KICB1bnNpZ25lZCBzZWNzRGlmZg0KICAgID0gdGltZU5vdy50dl9zZWMgLSBpb1N0YXRl
LT5mT3VyU2luay5mU3RhcnRUaW1lLnR2X3NlYzsNCg0KICBNZWRpYVN1YnNlc3Npb24mIHN1YnNl
c3Npb24gPSBpb1N0YXRlLT5mT3VyU3Vic2Vzc2lvbjsNCiAgaW9TdGF0ZS0+ZW52aXIoKSA8PCAi
UmVjZWl2ZWQgUlRDUCBcIkJZRVwiIG9uIFwiIg0KCQkgICA8PCBzdWJzZXNzaW9uLm1lZGl1bU5h
bWUoKQ0KCQkgICA8PCAiLyIgPDwgc3Vic2Vzc2lvbi5jb2RlY05hbWUoKQ0KCQkgICA8PCAiXCIg
c3Vic2Vzc2lvbiAoYWZ0ZXIgIg0KCQkgICA8PCBzZWNzRGlmZiA8PCAiIHNlY29uZHMpXG4iOw0K
DQogIC8vIEhhbmRsZSB0aGUgcmVjZXB0aW9uIG9mIGEgUlRDUCAiQllFIiBhcyBpZiB0aGUgc291
cmNlIGhhZCBjbG9zZWQ6DQogIGlvU3RhdGUtPm9uU291cmNlQ2xvc3VyZSgpOw0KfQ0KDQpzdGF0
aWMgQm9vbGVhbiB0aW1ldmFsR0Uoc3RydWN0IHRpbWV2YWwgY29uc3QmIHR2MSwNCgkJCSBzdHJ1
Y3QgdGltZXZhbCBjb25zdCYgdHYyKSB7DQogIHJldHVybiAodW5zaWduZWQpdHYxLnR2X3NlYyA+
ICh1bnNpZ25lZCl0djIudHZfc2VjDQogICAgfHwgKHR2MS50dl9zZWMgPT0gdHYyLnR2X3NlYw0K
CSYmICh1bnNpZ25lZCl0djEudHZfdXNlYyA+PSAodW5zaWduZWQpdHYyLnR2X3VzZWMpOw0KfQ0K
DQp2b2lkIFF1aWNrVGltZUZpbGVTaW5rOjpjb21wbGV0ZU91dHB1dEZpbGUoKSB7DQogIGlmIChm
SGF2ZUNvbXBsZXRlZE91dHB1dEZpbGUgfHwgZk91dEZpZCA9PSBOVUxMKSByZXR1cm47DQoNCiAg
Ly8gQmVnaW4gYnkgZmlsbGluZyBpbiB0aGUgaW5pdGlhbCAibWRhdCIgYXRvbSB3aXRoIHRoZSBj
dXJyZW50DQogIC8vIGZpbGUgc2l6ZToNCiAgaW50NjRfdCBjdXJGaWxlU2l6ZSA9IFRlbGxGaWxl
NjQoZk91dEZpZCk7DQogIHNldFdvcmQ2NChmTURBVHBvc2l0aW9uLCAodV9pbnQ2NF90KWN1ckZp
bGVTaXplKTsNCg0KICAvLyBUaGVuLCBub3RlIHRoZSB0aW1lIG9mIHRoZSBmaXJzdCByZWNlaXZl
ZCBkYXRhOg0KICBNZWRpYVN1YnNlc3Npb25JdGVyYXRvciBpdGVyKGZJbnB1dFNlc3Npb24pOw0K
ICBNZWRpYVN1YnNlc3Npb24qIHN1YnNlc3Npb247DQogIHdoaWxlICgoc3Vic2Vzc2lvbiA9IGl0
ZXIubmV4dCgpKSAhPSBOVUxMKSB7DQogICAgU3Vic2Vzc2lvbklPU3RhdGUqIGlvU3RhdGUNCiAg
ICAgID0gKFN1YnNlc3Npb25JT1N0YXRlKikoc3Vic2Vzc2lvbi0+bWlzY1B0cik7DQogICAgaWYg
KGlvU3RhdGUgPT0gTlVMTCkgY29udGludWU7DQoNCiAgICBDaHVua0Rlc2NyaXB0b3IqIGNvbnN0
IGhlYWRDaHVuayA9IGlvU3RhdGUtPmZIZWFkQ2h1bms7DQogICAgaWYgKGhlYWRDaHVuayAhPSBO
VUxMDQoJJiYgdGltZXZhbEdFKGZGaXJzdERhdGFUaW1lLCBoZWFkQ2h1bmstPmZQcmVzZW50YXRp
b25UaW1lKSkgew0KICAgICAgZkZpcnN0RGF0YVRpbWUgPSBoZWFkQ2h1bmstPmZQcmVzZW50YXRp
b25UaW1lOw0KICAgIH0NCiAgfQ0KDQogIC8vIFRoZW4sIHVwZGF0ZSB0aGUgUXVpY2tUaW1lLXNw
ZWNpZmljIHN0YXRlIGZvciBlYWNoIGFjdGl2ZSB0cmFjazoNCiAgaXRlci5yZXNldCgpOw0KICB3
aGlsZSAoKHN1YnNlc3Npb24gPSBpdGVyLm5leHQoKSkgIT0gTlVMTCkgew0KICAgIFN1YnNlc3Np
b25JT1N0YXRlKiBpb1N0YXRlDQogICAgICA9IChTdWJzZXNzaW9uSU9TdGF0ZSopKHN1YnNlc3Np
b24tPm1pc2NQdHIpOw0KICAgIGlmIChpb1N0YXRlID09IE5VTEwpIGNvbnRpbnVlOw0KDQogICAg
aW9TdGF0ZS0+c2V0RmluYWxRVHN0YXRlKCk7DQogICAgLy8gRG8gdGhlIHNhbWUgZm9yIGEgaGlu
dCB0cmFjayAoaWYgYW55KToNCiAgICBpZiAoaW9TdGF0ZS0+aGFzSGludFRyYWNrKCkpIHsNCiAg
ICAgIGlvU3RhdGUtPmZIaW50VHJhY2tGb3JVcy0+c2V0RmluYWxRVHN0YXRlKCk7DQogICAgfQ0K
ICB9DQoNCiAgaWYgKGZHZW5lcmF0ZU1QNEZvcm1hdCkgew0KICAgIC8vIEJlZ2luIHdpdGggYSAi
ZnR5cCIgYXRvbToNCiAgICBhZGRBdG9tX2Z0eXAoKTsNCiAgfQ0KDQogIC8vIFRoZW4sIGFkZCBh
ICJtb292IiBhdG9tIGZvciB0aGUgZmlsZSBtZXRhZGF0YToNCiAgYWRkQXRvbV9tb292KCk7DQoN
CiAgLy8gV2UncmUgZG9uZToNCiAgZkhhdmVDb21wbGV0ZWRPdXRwdXRGaWxlID0gVHJ1ZTsNCn0N
Cg0KDQovLy8vLy8vLy8vIFN1YnNlc3Npb25JT1N0YXRlLCBDaHVua0Rlc2NyaXB0b3IgaW1wbGVt
ZW50YXRpb24gLy8vLy8vLy8vLy8NCg0KdW5zaWduZWQgU3Vic2Vzc2lvbklPU3RhdGU6OmZDdXJy
ZW50VHJhY2tOdW1iZXIgPSAwOw0KDQpTdWJzZXNzaW9uSU9TdGF0ZTo6U3Vic2Vzc2lvbklPU3Rh
dGUoUXVpY2tUaW1lRmlsZVNpbmsmIHNpbmssDQoJCQkJICAgICBNZWRpYVN1YnNlc3Npb24mIHN1
YnNlc3Npb24pDQogIDogZkhpbnRUcmFja0ZvclVzKE5VTEwpLCBmVHJhY2tIaW50ZWRCeVVzKE5V
TEwpLA0KICAgIGZPdXJTaW5rKHNpbmspLCBmT3VyU3Vic2Vzc2lvbihzdWJzZXNzaW9uKSwNCiAg
ICBmTGFzdFBhY2tldFJUUFNlcU51bSgwKSwgZkhhdmVCZWVuU3luY2VkKEZhbHNlKSwgZlFUVG90
TnVtU2FtcGxlcygwKSwgDQogICAgZkhlYWRDaHVuayhOVUxMKSwgZlRhaWxDaHVuayhOVUxMKSwg
Zk51bUNodW5rcygwKSwNCiAgICBmSGVhZFN5bmNGcmFtZShOVUxMKSwgZlRhaWxTeW5jRnJhbWUo
TlVMTCkgew0KICBmVHJhY2tJRCA9ICsrZkN1cnJlbnRUcmFja051bWJlcjsNCg0KICBmQnVmZmVy
ID0gbmV3IFN1YnNlc3Npb25CdWZmZXIoZk91clNpbmsuZkJ1ZmZlclNpemUpOw0KICBmUHJldkJ1
ZmZlciA9IHNpbmsuZlBhY2tldExvc3NDb21wZW5zYXRlDQogICAgPyBuZXcgU3Vic2Vzc2lvbkJ1
ZmZlcihmT3VyU2luay5mQnVmZmVyU2l6ZSkgOiBOVUxMOw0KDQogIEZyYW1lZFNvdXJjZSogc3Vi
c2Vzc2lvblNvdXJjZSA9IHN1YnNlc3Npb24ucmVhZFNvdXJjZSgpOw0KICBmT3VyU291cmNlSXNB
Y3RpdmUgPSBzdWJzZXNzaW9uU291cmNlICE9IE5VTEw7DQoNCiAgZlByZXZGcmFtZVN0YXRlLnBy
ZXNlbnRhdGlvblRpbWUudHZfc2VjID0gMDsNCiAgZlByZXZGcmFtZVN0YXRlLnByZXNlbnRhdGlv
blRpbWUudHZfdXNlYyA9IDA7DQogIGZQcmV2RnJhbWVTdGF0ZS5zZXFOdW0gPSAwOw0KfQ0KDQpT
dWJzZXNzaW9uSU9TdGF0ZTo6flN1YnNlc3Npb25JT1N0YXRlKCkgew0KICBkZWxldGUgZkJ1ZmZl
cjsgZGVsZXRlIGZQcmV2QnVmZmVyOw0KDQogIC8vIERlbGV0ZSB0aGUgbGlzdCBvZiBjaHVuayBk
ZXNjcmlwdG9yczoNCiAgQ2h1bmtEZXNjcmlwdG9yKiBjaHVuayA9IGZIZWFkQ2h1bms7DQogIHdo
aWxlIChjaHVuayAhPSBOVUxMKSB7DQogICAgQ2h1bmtEZXNjcmlwdG9yKiBuZXh0ID0gY2h1bmst
PmZOZXh0Q2h1bms7DQogICAgZGVsZXRlIGNodW5rOw0KICAgIGNodW5rID0gbmV4dDsNCiAgfQ0K
DQogIC8vIERlbGV0ZSB0aGUgbGlzdCBvZiBzeW5jIGZyYW1lczoNCiAgU3luY0ZyYW1lKiBzeW5j
RnJhbWUgPSBmSGVhZFN5bmNGcmFtZTsNCiAgd2hpbGUgKHN5bmNGcmFtZSAhPSBOVUxMKSB7DQog
ICAgU3luY0ZyYW1lKiBuZXh0ID0gc3luY0ZyYW1lLT5uZXh0U3luY0ZyYW1lOw0KICAgIGRlbGV0
ZSBzeW5jRnJhbWU7DQogICAgc3luY0ZyYW1lID0gbmV4dDsNCiAgfQ0KfQ0KDQpCb29sZWFuIFN1
YnNlc3Npb25JT1N0YXRlOjpzZXRRVHN0YXRlKCkgew0KICBjaGFyIGNvbnN0KiBub0NvZGVjV2Fy
bmluZzEgPSAiV2FybmluZzogV2UgZG9uJ3QgaW1wbGVtZW50IGEgUXVpY2tUaW1lICI7DQogIGNo
YXIgY29uc3QqIG5vQ29kZWNXYXJuaW5nMiA9ICIgTWVkaWEgRGF0YSBUeXBlIGZvciB0aGUgXCIi
Ow0KICBjaGFyIGNvbnN0KiBub0NvZGVjV2FybmluZzMgPSAiXCIgdHJhY2ssIHNvIHdlJ2xsIGlu
c2VydCBhIGR1bW15IFwiPz8/P1wiIE1lZGlhIERhdGEgQXRvbSBpbnN0ZWFkLiAgQSBzZXBhcmF0
ZSwgY29kZWMtc3BlY2lmaWMgZWRpdGluZyBwYXNzIHdpbGwgYmUgbmVlZGVkIGJlZm9yZSB0aGlz
IHRyYWNrIGNhbiBiZSBwbGF5ZWQuXG4iOw0KDQogIGRvIHsNCiAgICBmUVRFbmFibGVUcmFjayA9
IFRydWU7IC8vIGVuYWJsZSB0aGlzIHRyYWNrIGluIHRoZSBtb3ZpZSBieSBkZWZhdWx0DQogICAg
ZlFUVGltZVNjYWxlID0gZk91clN1YnNlc3Npb24ucnRwVGltZXN0YW1wRnJlcXVlbmN5KCk7IC8v
IGJ5IGRlZmF1bHQNCiAgICBmUVRUaW1lVW5pdHNQZXJTYW1wbGUgPSAxOyAvLyBieSBkZWZhdWx0
DQogICAgZlFUQnl0ZXNQZXJGcmFtZSA9IDA7DQogICAgICAgIC8vIGJ5IGRlZmF1bHQgLSBpbmRp
Y2F0ZXMgdGhhdCB0aGUgd2hvbGUgcGFja2V0IGRhdGEgaXMgYSBmcmFtZQ0KICAgIGZRVFNhbXBs
ZXNQZXJGcmFtZSA9IDE7IC8vIGJ5IGRlZmF1bHQNCg0KICAgIC8vIE1ha2Ugc3VyZSBvdXIgc3Vi
c2Vzc2lvbidzIG1lZGl1bSBpcyBvbmUgdGhhdCB3ZSBrbm93IGhvdyB0bw0KICAgIC8vIHJlcHJl
c2VudCBpbiBhIFF1aWNrVGltZSBmaWxlOg0KICAgIGlmIChpc0hpbnRUcmFjaygpKSB7DQogICAg
ICAvLyBIaW50IHRyYWNrcyBhcmUgdHJlYXRlZCBzcGVjaWFsbHkNCiAgICAgIGZRVEVuYWJsZVRy
YWNrID0gRmFsc2U7IC8vIGhpbnQgdHJhY2tzIGFyZSBtYXJrZWQgYXMgaW5hY3RpdmUNCiAgICAg
IGZRVGNvbXBvbmVudFN1YnR5cGUgPSBmb3VyQ2hhcignaCcsJ2knLCduJywndCcpOw0KICAgICAg
ZlFUY29tcG9uZW50TmFtZSA9ICJoaW50IG1lZGlhIGhhbmRsZXIiOw0KICAgICAgZlFUTWVkaWFJ
bmZvcm1hdGlvbkF0b21DcmVhdG9yID0gJlF1aWNrVGltZUZpbGVTaW5rOjphZGRBdG9tX2dtaGQ7
DQogICAgICBmUVRNZWRpYURhdGFBdG9tQ3JlYXRvciA9ICZRdWlja1RpbWVGaWxlU2luazo6YWRk
QXRvbV9ydHA7DQogICAgfSBlbHNlIGlmIChzdHJjbXAoZk91clN1YnNlc3Npb24ubWVkaXVtTmFt
ZSgpLCAiYXVkaW8iKSA9PSAwKSB7DQogICAgICBmUVRjb21wb25lbnRTdWJ0eXBlID0gZm91ckNo
YXIoJ3MnLCdvJywndScsJ24nKTsNCiAgICAgIGZRVGNvbXBvbmVudE5hbWUgPSAiQXBwbGUgU291
bmQgTWVkaWEgSGFuZGxlciI7DQogICAgICBmUVRNZWRpYUluZm9ybWF0aW9uQXRvbUNyZWF0b3Ig
PSAmUXVpY2tUaW1lRmlsZVNpbms6OmFkZEF0b21fc21oZDsNCiAgICAgIGZRVE1lZGlhRGF0YUF0
b21DcmVhdG9yDQoJPSAmUXVpY2tUaW1lRmlsZVNpbms6OmFkZEF0b21fc291bmRNZWRpYUdlbmVy
YWw7IC8vIGJ5IGRlZmF1bHQNCiAgICAgIGZRVFNvdW5kU2FtcGxlVmVyc2lvbiA9IDA7IC8vIGJ5
IGRlZmF1bHQNCg0KICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb3VyIHN1YnNlc3Npb24ncyBjb2Rl
YyBpcyBvbmUgdGhhdCB3ZSBjYW4gaGFuZGxlOg0KICAgICAgaWYgKHN0cmNtcChmT3VyU3Vic2Vz
c2lvbi5jb2RlY05hbWUoKSwgIlgtUVQiKSA9PSAwIHx8DQoJICBzdHJjbXAoZk91clN1YnNlc3Np
b24uY29kZWNOYW1lKCksICJYLVFVSUNLVElNRSIpID09IDApIHsNCglmUVRNZWRpYURhdGFBdG9t
Q3JlYXRvciA9ICZRdWlja1RpbWVGaWxlU2luazo6YWRkQXRvbV9nZW5lcmljTWVkaWE7DQogICAg
ICB9IGVsc2UgaWYgKHN0cmNtcChmT3VyU3Vic2Vzc2lvbi5jb2RlY05hbWUoKSwgIlBDTVUiKSA9
PSAwKSB7DQoJZlFUQXVkaW9EYXRhVHlwZSA9ICJ1bGF3IjsNCglmUVRCeXRlc1BlckZyYW1lID0g
MTsNCiAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGZPdXJTdWJzZXNzaW9uLmNvZGVjTmFtZSgpLCAi
R1NNIikgPT0gMCkgew0KCWZRVEF1ZGlvRGF0YVR5cGUgPSAiYWdzbSI7DQoJZlFUQnl0ZXNQZXJG
cmFtZSA9IDMzOw0KCWZRVFNhbXBsZXNQZXJGcmFtZSA9IDE2MDsNCiAgICAgIH0gZWxzZSBpZiAo
c3RyY21wKGZPdXJTdWJzZXNzaW9uLmNvZGVjTmFtZSgpLCAiUENNQSIpID09IDApIHsNCglmUVRB
dWRpb0RhdGFUeXBlID0gImFsYXciOw0KCWZRVEJ5dGVzUGVyRnJhbWUgPSAxOw0KICAgICAgfSBl
bHNlIGlmIChzdHJjbXAoZk91clN1YnNlc3Npb24uY29kZWNOYW1lKCksICJRQ0VMUCIpID09IDAp
IHsNCglmUVRNZWRpYURhdGFBdG9tQ3JlYXRvciA9ICZRdWlja1RpbWVGaWxlU2luazo6YWRkQXRv
bV9RY2xwOw0KCWZRVFNhbXBsZXNQZXJGcmFtZSA9IDE2MDsNCiAgICAgIH0gZWxzZSBpZiAoc3Ry
Y21wKGZPdXJTdWJzZXNzaW9uLmNvZGVjTmFtZSgpLCAiTVBFRzQtR0VORVJJQyIpID09IDAgfHwN
CgkJIHN0cmNtcChmT3VyU3Vic2Vzc2lvbi5jb2RlY05hbWUoKSwgIk1QNEEtTEFUTSIpID09IDAp
IHsNCglmUVRNZWRpYURhdGFBdG9tQ3JlYXRvciA9ICZRdWlja1RpbWVGaWxlU2luazo6YWRkQXRv
bV9tcDRhOw0KCWZRVFRpbWVVbml0c1BlclNhbXBsZSA9IDEwMjQ7IC8vIFFUIGNvbnNpZGVycyBl
YWNoIGZyYW1lIHRvIGJlIGEgJ3NhbXBsZScNCgkvLyBUaGUgdGltZSBzY2FsZSAoZnJlcXVlbmN5
KSBjb21lcyBmcm9tIHRoZSAnY29uZmlnJyBpbmZvcm1hdGlvbi4NCgkvLyBJdCBtaWdodCBiZSBk
aWZmZXJlbnQgZnJvbSB0aGUgUlRQIHRpbWVzdGFtcCBmcmVxdWVuY3kgKGUuZy4sIGFhY1BsdXMp
Lg0KCXVuc2lnbmVkIGZyZXF1ZW5jeUZyb21Db25maWcNCgkgID0gc2FtcGxpbmdGcmVxdWVuY3lG
cm9tQXVkaW9TcGVjaWZpY0NvbmZpZyhmT3VyU3Vic2Vzc2lvbi5mbXRwX2NvbmZpZygpKTsNCglp
ZiAoZnJlcXVlbmN5RnJvbUNvbmZpZyAhPSAwKSBmUVRUaW1lU2NhbGUgPSBmcmVxdWVuY3lGcm9t
Q29uZmlnOw0KICAgICAgfSBlbHNlIHsNCgllbnZpcigpIDw8IG5vQ29kZWNXYXJuaW5nMSA8PCAi
QXVkaW8iIDw8IG5vQ29kZWNXYXJuaW5nMg0KCQk8PCBmT3VyU3Vic2Vzc2lvbi5jb2RlY05hbWUo
KSA8PCBub0NvZGVjV2FybmluZzM7DQoJZlFUTWVkaWFEYXRhQXRvbUNyZWF0b3IgPSAmUXVpY2tU
aW1lRmlsZVNpbms6OmFkZEF0b21fZHVtbXk7DQoJZlFURW5hYmxlVHJhY2sgPSBGYWxzZTsgLy8g
ZGlzYWJsZSB0aGlzIHRyYWNrIGluIHRoZSBtb3ZpZQ0KICAgICAgfQ0KICAgIH0gZWxzZSBpZiAo
c3RyY21wKGZPdXJTdWJzZXNzaW9uLm1lZGl1bU5hbWUoKSwgInZpZGVvIikgPT0gMCkgew0KICAg
ICAgZlFUY29tcG9uZW50U3VidHlwZSA9IGZvdXJDaGFyKCd2JywnaScsJ2QnLCdlJyk7DQogICAg
ICBmUVRjb21wb25lbnROYW1lID0gIkFwcGxlIFZpZGVvIE1lZGlhIEhhbmRsZXIiOw0KICAgICAg
ZlFUTWVkaWFJbmZvcm1hdGlvbkF0b21DcmVhdG9yID0gJlF1aWNrVGltZUZpbGVTaW5rOjphZGRB
dG9tX3ZtaGQ7DQoNCiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG91ciBzdWJzZXNzaW9uJ3MgY29k
ZWMgaXMgb25lIHRoYXQgd2UgY2FuIGhhbmRsZToNCiAgICAgIGlmIChzdHJjbXAoZk91clN1YnNl
c3Npb24uY29kZWNOYW1lKCksICJYLVFUIikgPT0gMCB8fA0KCSAgc3RyY21wKGZPdXJTdWJzZXNz
aW9uLmNvZGVjTmFtZSgpLCAiWC1RVUlDS1RJTUUiKSA9PSAwKSB7DQoJZlFUTWVkaWFEYXRhQXRv
bUNyZWF0b3IgPSAmUXVpY2tUaW1lRmlsZVNpbms6OmFkZEF0b21fZ2VuZXJpY01lZGlhOw0KICAg
ICAgfSBlbHNlIGlmIChzdHJjbXAoZk91clN1YnNlc3Npb24uY29kZWNOYW1lKCksICJIMjYzLTE5
OTgiKSA9PSAwIHx8DQoJCSBzdHJjbXAoZk91clN1YnNlc3Npb24uY29kZWNOYW1lKCksICJIMjYz
LTIwMDAiKSA9PSAwKSB7DQoJZlFUTWVkaWFEYXRhQXRvbUNyZWF0b3IgPSAmUXVpY2tUaW1lRmls
ZVNpbms6OmFkZEF0b21faDI2MzsNCglmUVRUaW1lU2NhbGUgPSA2MDA7DQoJZlFUVGltZVVuaXRz
UGVyU2FtcGxlID0gZlFUVGltZVNjYWxlL2ZPdXJTaW5rLmZNb3ZpZUZQUzsNCiAgICAgIH0gZWxz
ZSBpZiAoc3RyY21wKGZPdXJTdWJzZXNzaW9uLmNvZGVjTmFtZSgpLCAiSDI2NCIpID09IDApIHsN
CglmUVRNZWRpYURhdGFBdG9tQ3JlYXRvciA9ICZRdWlja1RpbWVGaWxlU2luazo6YWRkQXRvbV9h
dmMxOw0KCWZRVFRpbWVTY2FsZSA9IDYwMDsNCglmUVRUaW1lVW5pdHNQZXJTYW1wbGUgPSBmUVRU
aW1lU2NhbGUvZk91clNpbmsuZk1vdmllRlBTOw0KICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZk91
clN1YnNlc3Npb24uY29kZWNOYW1lKCksICJNUDRWLUVTIikgPT0gMCkgew0KCWZRVE1lZGlhRGF0
YUF0b21DcmVhdG9yID0gJlF1aWNrVGltZUZpbGVTaW5rOjphZGRBdG9tX21wNHY7DQoJZlFUVGlt
ZVNjYWxlID0gNjAwOw0KCWZRVFRpbWVVbml0c1BlclNhbXBsZSA9IGZRVFRpbWVTY2FsZS9mT3Vy
U2luay5mTW92aWVGUFM7DQogICAgICB9IGVsc2Ugew0KCWVudmlyKCkgPDwgbm9Db2RlY1dhcm5p
bmcxIDw8ICJWaWRlbyIgPDwgbm9Db2RlY1dhcm5pbmcyDQoJCTw8IGZPdXJTdWJzZXNzaW9uLmNv
ZGVjTmFtZSgpIDw8IG5vQ29kZWNXYXJuaW5nMzsNCglmUVRNZWRpYURhdGFBdG9tQ3JlYXRvciA9
ICZRdWlja1RpbWVGaWxlU2luazo6YWRkQXRvbV9kdW1teTsNCglmUVRFbmFibGVUcmFjayA9IEZh
bHNlOyAvLyBkaXNhYmxlIHRoaXMgdHJhY2sgaW4gdGhlIG1vdmllDQogICAgICB9DQogICAgfSBl
bHNlIHsNCiAgICAgIGVudmlyKCkgPDwgIldhcm5pbmc6IFdlIGRvbid0IGltcGxlbWVudCBhIFF1
aWNrVGltZSBNZWRpYSBIYW5kbGVyIGZvciBtZWRpYSB0eXBlIFwiIg0KCSAgICAgIDw8IGZPdXJT
dWJzZXNzaW9uLm1lZGl1bU5hbWUoKSA8PCAiXCIiOw0KICAgICAgYnJlYWs7DQogICAgfQ0KDQoj
aWZkZWYgUVRfU1VQUE9SVF9QQVJUSUFMTFlfT05MWQ0KICAgIGVudmlyKCkgPDwgIldhcm5pbmc6
IFdlIGRvbid0IGhhdmUgc3VmZmljaWVudCBjb2RlYy1zcGVjaWZpYyBpbmZvcm1hdGlvbiAoZS5n
Liwgc2FtcGxlIHNpemVzKSB0byBmdWxseSBnZW5lcmF0ZSB0aGUgXCIiDQoJICAgIDw8IGZPdXJT
dWJzZXNzaW9uLm1lZGl1bU5hbWUoKSA8PCAiLyIgPDwgZk91clN1YnNlc3Npb24uY29kZWNOYW1l
KCkNCgkgICAgPDwgIlwiIHRyYWNrLCBzbyB3ZSdsbCBkaXNhYmxlIHRoaXMgdHJhY2sgaW4gdGhl
IG1vdmllLiAgQSBzZXBhcmF0ZSwgY29kZWMtc3BlY2lmaWMgZWRpdGluZyBwYXNzIHdpbGwgYmUg
bmVlZGVkIGJlZm9yZSB0aGlzIHRyYWNrIGNhbiBiZSBwbGF5ZWRcbiI7DQogICAgZlFURW5hYmxl
VHJhY2sgPSBGYWxzZTsgLy8gZGlzYWJsZSB0aGlzIHRyYWNrIGluIHRoZSBtb3ZpZQ0KI2VuZGlm
DQoNCiAgICByZXR1cm4gVHJ1ZTsNCiAgfSB3aGlsZSAoMCk7DQoNCiAgZW52aXIoKSA8PCAiLCBz
byBhIHRyYWNrIGZvciB0aGUgXCIiIDw8IGZPdXJTdWJzZXNzaW9uLm1lZGl1bU5hbWUoKQ0KCSAg
PDwgIi8iIDw8IGZPdXJTdWJzZXNzaW9uLmNvZGVjTmFtZSgpDQoJICA8PCAiXCIgc3Vic2Vzc2lv
biB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IFF1aWNrVGltZSBmaWxlXG4iOw0K
ICByZXR1cm4gRmFsc2U7DQp9DQoNCnZvaWQgU3Vic2Vzc2lvbklPU3RhdGU6OnNldEZpbmFsUVRz
dGF0ZSgpIHsNCiAgLy8gQ29tcHV0ZSBkZXJpdmVkIHBhcmFtZXRlcnMsIGJ5IHJ1bm5pbmcgdGhy
b3VnaCB0aGUgbGlzdCBvZiBjaHVua3M6DQogIGZRVER1cmF0aW9uVCA9IDA7DQoNCiAgQ2h1bmtE
ZXNjcmlwdG9yKiBjaHVuayA9IGZIZWFkQ2h1bms7DQogIHdoaWxlIChjaHVuayAhPSBOVUxMKSB7
DQogICAgdW5zaWduZWQgY29uc3QgbnVtRnJhbWVzID0gY2h1bmstPmZOdW1GcmFtZXM7DQogICAg
dW5zaWduZWQgY29uc3QgZHVyID0gbnVtRnJhbWVzKmNodW5rLT5mRnJhbWVEdXJhdGlvbjsNCiAg
ICBmUVREdXJhdGlvblQgKz0gZHVyOw0KDQogICAgY2h1bmsgPSBjaHVuay0+Zk5leHRDaHVuazsN
CiAgfQ0KDQogIC8vIENvbnZlcnQgdGhpcyBkdXJhdGlvbiBmcm9tIHRyYWNrIHRvIG1vdmllIHRp
bWUgc2NhbGU6DQogIGRvdWJsZSBzY2FsZUZhY3RvciA9IGZPdXJTaW5rLm1vdmllVGltZVNjYWxl
KCkvKGRvdWJsZSlmUVRUaW1lU2NhbGU7DQogIGZRVER1cmF0aW9uTSA9ICh1bnNpZ25lZCkoZlFU
RHVyYXRpb25UKnNjYWxlRmFjdG9yKTsNCg0KICBpZiAoZlFURHVyYXRpb25NID4gZk91clNpbmsu
Zk1heFRyYWNrRHVyYXRpb25NKSB7DQogICAgZk91clNpbmsuZk1heFRyYWNrRHVyYXRpb25NID0g
ZlFURHVyYXRpb25NOw0KICB9DQp9DQoNCnZvaWQgU3Vic2Vzc2lvbklPU3RhdGU6OmFmdGVyR2V0
dGluZ0ZyYW1lKHVuc2lnbmVkIHBhY2tldERhdGFTaXplLA0KCQkJCQkgIHN0cnVjdCB0aW1ldmFs
IHByZXNlbnRhdGlvblRpbWUpIHsNCiAgLy8gQmVnaW4gYnkgY2hlY2tpbmcgd2hldGhlciB0aGVy
ZSB3YXMgYSBnYXAgaW4gdGhlIFJUUCBzdHJlYW0uDQogIC8vIElmIHNvLCB0cnkgdG8gY29tcGVu
c2F0ZSBmb3IgdGhpcyAoaWYgZGVzaXJlZCk6DQogIGlmIChmT3VyU3Vic2Vzc2lvbi5ydHBTb3Vy
Y2UoKSAhPSBOVUxMKSB7IC8vIHdlIGhhdmUgYSBSVFAgc3RyZWFtDQogICAgdW5zaWduZWQgc2hv
cnQgcnRwU2VxTnVtDQogICAgICA9IGZPdXJTdWJzZXNzaW9uLnJ0cFNvdXJjZSgpLT5jdXJQYWNr
ZXRSVFBTZXFOdW0oKTsNCiAgICBpZiAoZk91clNpbmsuZlBhY2tldExvc3NDb21wZW5zYXRlICYm
IGZQcmV2QnVmZmVyLT5ieXRlc0luVXNlKCkgPiAwKSB7DQogICAgICBzaG9ydCBzZXFOdW1HYXAg
PSBydHBTZXFOdW0gLSBmTGFzdFBhY2tldFJUUFNlcU51bTsNCiAgICAgIGZvciAoc2hvcnQgaSA9
IDE7IGkgPCBzZXFOdW1HYXA7ICsraSkgew0KCS8vIEluc2VydCBhIGNvcHkgb2YgdGhlIHByZXZp
b3VzIGZyYW1lLCB0byBjb21wZW5zYXRlIGZvciB0aGUgbG9zczoNCgl1c2VGcmFtZSgqZlByZXZC
dWZmZXIpOw0KICAgICAgfQ0KICAgIH0NCiAgICBmTGFzdFBhY2tldFJUUFNlcU51bSA9IHJ0cFNl
cU51bTsNCiAgfQ0KDQogIC8vIE5vdywgY29udGludWUgd29ya2luZyB3aXRoIHRoZSBmcmFtZSB0
aGF0IHdlIGp1c3QgZ290DQogIGZPdXJTaW5rLm5vdGVSZWNvcmRlZEZyYW1lKGZPdXJTdWJzZXNz
aW9uLCBwYWNrZXREYXRhU2l6ZSwgcHJlc2VudGF0aW9uVGltZSk7DQoNCiAgaWYgKGZCdWZmZXIt
PmJ5dGVzSW5Vc2UoKSA9PSAwKSB7DQogICAgZkJ1ZmZlci0+c2V0UHJlc2VudGF0aW9uVGltZShw
cmVzZW50YXRpb25UaW1lKTsNCiAgfQ0KICBmQnVmZmVyLT5hZGRCeXRlcyhwYWNrZXREYXRhU2l6
ZSk7DQoNCiAgLy8gSWYgb3VyIFJUUCBzb3VyY2UgaXMgYSAiUXVpY2tUaW1lR2VuZXJpY1JUUFNv
dXJjZSIsIHRoZW4NCiAgLy8gdXNlIGl0cyAncXRTdGF0ZScgdG8gc2V0IHNvbWUgcGFyYW1ldGVy
cyB0aGF0IHdlIG5lZWQ6DQogIGlmIChmT3VyU3Vic2Vzc2lvbi5ydHBTb3VyY2UoKSAhPSBOVUxM
IC8vIHdlIGhhdmUgYSBSVFAgc3RyZWFtDQogICAgICAmJiBmUVRNZWRpYURhdGFBdG9tQ3JlYXRv
ciA9PSAmUXVpY2tUaW1lRmlsZVNpbms6OmFkZEF0b21fZ2VuZXJpY01lZGlhKSB7DQogICAgUXVp
Y2tUaW1lR2VuZXJpY1JUUFNvdXJjZSogcnRwU291cmNlDQogICAgICA9IChRdWlja1RpbWVHZW5l
cmljUlRQU291cmNlKilmT3VyU3Vic2Vzc2lvbi5ydHBTb3VyY2UoKTsNCiAgICBRdWlja1RpbWVH
ZW5lcmljUlRQU291cmNlOjpRVFN0YXRlJiBxdFN0YXRlID0gcnRwU291cmNlLT5xdFN0YXRlOw0K
ICAgIGZRVFRpbWVTY2FsZSA9IHF0U3RhdGUudGltZXNjYWxlOw0KICAgIGlmIChxdFN0YXRlLndp
ZHRoICE9IDApIHsNCiAgICAgIGZPdXJTaW5rLmZNb3ZpZVdpZHRoID0gcXRTdGF0ZS53aWR0aDsN
CiAgICB9DQogICAgaWYgKHF0U3RhdGUuaGVpZ2h0ICE9IDApIHsNCiAgICAgIGZPdXJTaW5rLmZN
b3ZpZUhlaWdodCA9IHF0U3RhdGUuaGVpZ2h0Ow0KICAgIH0NCg0KICAgIC8vIEFsc28sIGlmIHRo
ZSBtZWRpYSB0eXBlIGluIHRoZSAic2RBdG9tIiBpcyBvbmUgdGhhdCB3ZSByZWNvZ25pemUNCiAg
ICAvLyB0byBoYXZlIGEgc3BlY2lhbCBwYXJhbWV0ZXJzLCB0aGVuIGZpeCB0aGlzIGhlcmU6DQog
ICAgaWYgKHF0U3RhdGUuc2RBdG9tU2l6ZSA+PSA4KSB7DQogICAgICBjaGFyIGNvbnN0KiBhdG9t
ID0gcXRTdGF0ZS5zZEF0b207DQogICAgICB1bnNpZ25lZCBtZWRpYVR5cGUgPSBmb3VyQ2hhcihh
dG9tWzRdLGF0b21bNV0sYXRvbVs2XSxhdG9tWzddKTsNCiAgICAgIHN3aXRjaCAobWVkaWFUeXBl
KSB7DQogICAgICBjYXNlIGZvdXJDaGFyKCdhJywnZycsJ3MnLCdtJyk6IHsNCglmUVRCeXRlc1Bl
ckZyYW1lID0gMzM7DQoJZlFUU2FtcGxlc1BlckZyYW1lID0gMTYwOw0KCWJyZWFrOw0KICAgICAg
fQ0KICAgICAgY2FzZSBmb3VyQ2hhcignUScsJ2MnLCdsJywncCcpOiB7DQoJZlFUQnl0ZXNQZXJG
cmFtZSA9IDM1Ow0KCWZRVFNhbXBsZXNQZXJGcmFtZSA9IDE2MDsNCglicmVhazsNCiAgICAgIH0N
CiAgICAgIGNhc2UgZm91ckNoYXIoJ0gnLCdjJywnbCcsJ3AnKTogew0KCWZRVEJ5dGVzUGVyRnJh
bWUgPSAxNzsNCglmUVRTYW1wbGVzUGVyRnJhbWUgPSAxNjA7DQoJYnJlYWs7DQogICAgICB9DQog
ICAgICBjYXNlIGZvdXJDaGFyKCdoJywnMicsJzYnLCczJyk6IHsNCglmUVRUaW1lVW5pdHNQZXJT
YW1wbGUgPSBmUVRUaW1lU2NhbGUvZk91clNpbmsuZk1vdmllRlBTOw0KCWJyZWFrOw0KICAgICAg
fQ0KICAgICAgfQ0KICAgIH0NCiAgfSBlbHNlIGlmIChmUVRNZWRpYURhdGFBdG9tQ3JlYXRvciA9
PSAmUXVpY2tUaW1lRmlsZVNpbms6OmFkZEF0b21fUWNscCkgew0KICAgIC8vIEZvciBRQ0VMUCBk
YXRhLCBtYWtlIGEgbm90ZSBvZiB0aGUgZnJhbWUgc2l6ZSAoZXZlbiB0aG91Z2ggaXQncyB0aGUN
CiAgICAvLyBzYW1lIGFzIHRoZSBwYWNrZXQgZGF0YSBzaXplKSwgYmVjYXVzZSBpdCB2YXJpZXMg
ZGVwZW5kaW5nIG9uIHRoZQ0KICAgIC8vICdyYXRlJyBvZiB0aGUgc3RyZWFtLCBhbmQgdGhpcyBz
aXplIGdldHMgdXNlZCBsYXRlciB3aGVuIHNldHRpbmcgdXANCiAgICAvLyB0aGUgJ1FjbHAnIFF1
aWNrVGltZSBhdG9tOg0KICAgIGZRVEJ5dGVzUGVyRnJhbWUgPSBwYWNrZXREYXRhU2l6ZTsNCiAg
fQ0KDQogIHVzZUZyYW1lKCpmQnVmZmVyKTsNCiAgaWYgKGZPdXJTaW5rLmZQYWNrZXRMb3NzQ29t
cGVuc2F0ZSkgew0KICAgIC8vIFNhdmUgdGhpcyBmcmFtZSwgaW4gY2FzZSB3ZSBuZWVkIGl0IGZv
ciByZWNvdmVyeToNCiAgICBTdWJzZXNzaW9uQnVmZmVyKiB0bXAgPSBmUHJldkJ1ZmZlcjsgLy8g
YXNzZXJ0OiAhPSBOVUxMDQogICAgZlByZXZCdWZmZXIgPSBmQnVmZmVyOw0KICAgIGZCdWZmZXIg
PSB0bXA7DQogIH0NCiAgZkJ1ZmZlci0+cmVzZXQoKTsgLy8gZm9yIHRoZSBuZXh0IGlucHV0DQoN
CiAgLy8gTm93LCB0cnkgZ2V0dGluZyBtb3JlIGZyYW1lczoNCiAgZk91clNpbmsuY29udGludWVQ
bGF5aW5nKCk7DQp9DQoNCnZvaWQgU3Vic2Vzc2lvbklPU3RhdGU6OnVzZUZyYW1lKFN1YnNlc3Np
b25CdWZmZXImIGJ1ZmZlcikgew0KICB1bnNpZ25lZCBjaGFyKiBjb25zdCBmcmFtZVNvdXJjZSA9
IGJ1ZmZlci5kYXRhU3RhcnQoKTsNCiAgdW5zaWduZWQgY29uc3QgZnJhbWVTaXplID0gYnVmZmVy
LmJ5dGVzSW5Vc2UoKTsNCiAgc3RydWN0IHRpbWV2YWwgY29uc3QmIHByZXNlbnRhdGlvblRpbWUg
PSBidWZmZXIucHJlc2VudGF0aW9uVGltZSgpOw0KICBpbnQ2NF90IGNvbnN0IGRlc3RGaWxlT2Zm
c2V0ID0gVGVsbEZpbGU2NChmT3VyU2luay5mT3V0RmlkKTsNCiAgdW5zaWduZWQgc2FtcGxlTnVt
YmVyT2ZGcmFtZVN0YXJ0ID0gZlFUVG90TnVtU2FtcGxlcyArIDE7DQogIEJvb2xlYW4gYXZjSGFj
ayA9IGZRVE1lZGlhRGF0YUF0b21DcmVhdG9yID09ICZRdWlja1RpbWVGaWxlU2luazo6YWRkQXRv
bV9hdmMxOw0KDQogIC8vIElmIHdlJ3JlIG5vdCBzeW5jaW5nIHN0cmVhbXMsIG9yIHRoaXMgc3Vi
c2Vzc2lvbiBpcyBub3QgdmlkZW8sIHRoZW4NCiAgLy8ganVzdCBnaXZlIHRoaXMgZnJhbWUgYSBm
aXhlZCBkdXJhdGlvbjoNCiAgaWYgKCFmT3VyU2luay5mU3luY1N0cmVhbXMNCiAgICAgIHx8IGZR
VGNvbXBvbmVudFN1YnR5cGUgIT0gZm91ckNoYXIoJ3YnLCdpJywnZCcsJ2UnKSkgew0KICAgIHVu
c2lnbmVkIGNvbnN0IGZyYW1lRHVyYXRpb24gPSBmUVRUaW1lVW5pdHNQZXJTYW1wbGUqZlFUU2Ft
cGxlc1BlckZyYW1lOw0KICAgIHVuc2lnbmVkIGZyYW1lU2l6ZVRvVXNlID0gZnJhbWVTaXplOw0K
ICAgIGlmIChhdmNIYWNrKSBmcmFtZVNpemVUb1VzZSArPSA0OyAvLyBILjI2NC9BVkMgZ2V0cyB0
aGUgZnJhbWUgc2l6ZSBwcmVmaXgNCg0KICAgIGZRVFRvdE51bVNhbXBsZXMgKz0gdXNlRnJhbWUx
KGZyYW1lU2l6ZVRvVXNlLCBwcmVzZW50YXRpb25UaW1lLCBmcmFtZUR1cmF0aW9uLCBkZXN0Rmls
ZU9mZnNldCk7DQogIH0gZWxzZSB7DQogICAgLy8gRm9yIHN5bmNlZCB2aWRlbyBzdHJlYW1zLCB3
ZSB1c2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdWNjZXNzaXZlDQogICAgLy8gZnJhbWVzJyBw
cmVzZW50YXRpb24gdGltZXMgYXMgdGhlICdmcmFtZSBkdXJhdGlvbicuICBTbywgcmVjb3JkDQog
ICAgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlICpwcmV2aW91cyogZnJhbWU6DQogICAgc3RydWN0
IHRpbWV2YWwgY29uc3QmIHBwdCA9IGZQcmV2RnJhbWVTdGF0ZS5wcmVzZW50YXRpb25UaW1lOyAv
L2FiYnJldg0KICAgIGlmIChwcHQudHZfc2VjICE9IDAgfHwgcHB0LnR2X3VzZWMgIT0gMCkgew0K
ICAgICAgLy8gVGhlcmUgaGFzIGJlZW4gYSBwcmV2aW91cyBmcmFtZS4NCiAgICAgIGRvdWJsZSBk
dXJhdGlvbiA9IChwcmVzZW50YXRpb25UaW1lLnR2X3NlYyAtIHBwdC50dl9zZWMpDQoJKyAocHJl
c2VudGF0aW9uVGltZS50dl91c2VjIC0gcHB0LnR2X3VzZWMpLzEwMDAwMDAuMDsNCiAgICAgIGlm
IChkdXJhdGlvbiA8IDAuMCkgZHVyYXRpb24gPSAwLjA7DQogICAgICB1bnNpZ25lZCBmcmFtZUR1
cmF0aW9uDQoJPSAodW5zaWduZWQpKCgyKmR1cmF0aW9uKmZRVFRpbWVTY2FsZSsxKS8yKTsgLy8g
cm91bmQNCiAgICAgIHVuc2lnbmVkIGZyYW1lU2l6ZVRvVXNlID0gZlByZXZGcmFtZVN0YXRlLmZy
YW1lU2l6ZTsNCiAgICAgIGlmIChhdmNIYWNrKSBmcmFtZVNpemVUb1VzZSArPSA0OyAvLyBILjI2
NC9BVkMgZ2V0cyB0aGUgZnJhbWUgc2l6ZSBwcmVmaXgNCg0KICAgICAgdW5zaWduZWQgbnVtU2Ft
cGxlcw0KCT0gdXNlRnJhbWUxKGZyYW1lU2l6ZVRvVXNlLCBwcHQsIGZyYW1lRHVyYXRpb24sIGZQ
cmV2RnJhbWVTdGF0ZS5kZXN0RmlsZU9mZnNldCk7DQogICAgICBmUVRUb3ROdW1TYW1wbGVzICs9
IG51bVNhbXBsZXM7DQogICAgICBzYW1wbGVOdW1iZXJPZkZyYW1lU3RhcnQgPSBmUVRUb3ROdW1T
YW1wbGVzICsgMTsNCiAgICB9DQoNCiAgICBpZiAoYXZjSGFjayAmJiAoKmZyYW1lU291cmNlID09
IEgyNjRfSURSX0ZSQU1FKSkgew0KICAgICAgU3luY0ZyYW1lKiBuZXdTeW5jRnJhbWUgPSBuZXcg
U3luY0ZyYW1lKGZRVFRvdE51bVNhbXBsZXMgKyAxKTsNCiAgICAgIGlmIChmVGFpbFN5bmNGcmFt
ZSA9PSBOVUxMKSB7DQogICAgICAgIGZIZWFkU3luY0ZyYW1lID0gbmV3U3luY0ZyYW1lOw0KICAg
ICAgfSBlbHNlIHsNCiAgICAgICAgZlRhaWxTeW5jRnJhbWUtPm5leHRTeW5jRnJhbWUgPSBuZXdT
eW5jRnJhbWU7DQogICAgICB9DQogICAgICBmVGFpbFN5bmNGcmFtZSA9IG5ld1N5bmNGcmFtZTsN
CiAgICB9DQoNCiAgICAvLyBSZW1lbWJlciB0aGUgY3VycmVudCBmcmFtZSBmb3IgbmV4dCB0aW1l
Og0KICAgIGZQcmV2RnJhbWVTdGF0ZS5mcmFtZVNpemUgPSBmcmFtZVNpemU7DQogICAgZlByZXZG
cmFtZVN0YXRlLnByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOw0KICAgIGZQcmV2
RnJhbWVTdGF0ZS5kZXN0RmlsZU9mZnNldCA9IGRlc3RGaWxlT2Zmc2V0Ow0KICB9DQoNCiAgaWYg
KGF2Y0hhY2spIGZPdXJTaW5rLmFkZFdvcmQoZnJhbWVTaXplKTsNCg0KICAvLyBXcml0ZSB0aGUg
ZGF0YSBpbnRvIHRoZSBmaWxlOg0KICBmd3JpdGUoZnJhbWVTb3VyY2UsIDEsIGZyYW1lU2l6ZSwg
Zk91clNpbmsuZk91dEZpZCk7DQoNCiAgLy8gSWYgd2UgaGF2ZSBhIGhpbnQgdHJhY2ssIHRoZW4g
d3JpdGUgdG8gaXQgYWxzbyAob25seSBpZiB3ZSBoYXZlIGEgUlRQIHN0cmVhbSk6DQogIGlmICho
YXNIaW50VHJhY2soKSAmJiBmT3VyU3Vic2Vzc2lvbi5ydHBTb3VyY2UoKSAhPSBOVUxMKSB7DQog
ICAgLy8gQmVjYXVzZSBwcmVzZW50YXRpb24gdGltZXMgYXJlIHVzZWQgZm9yIFJUUCBwYWNrZXQg
dGltZXN0YW1wcywNCiAgICAvLyB3ZSBkb24ndCBzdGFydGluZyB3cml0aW5nIHRvIHRoZSBoaW50
IHRyYWNrIHVudGlsIHdlJ3ZlIGJlZW4gc3luY2VkOg0KICAgIGlmICghZkhhdmVCZWVuU3luY2Vk
KSB7DQogICAgICBmSGF2ZUJlZW5TeW5jZWQgPSBmT3VyU3Vic2Vzc2lvbi5ydHBTb3VyY2UoKS0+
aGFzQmVlblN5bmNocm9uaXplZFVzaW5nUlRDUCgpOw0KICAgIH0NCiAgICBpZiAoZkhhdmVCZWVu
U3luY2VkKSB7DQogICAgICBmSGludFRyYWNrRm9yVXMtPnVzZUZyYW1lRm9ySGludGluZyhmcmFt
ZVNpemUsIHByZXNlbnRhdGlvblRpbWUsDQoJCQkJCSAgc2FtcGxlTnVtYmVyT2ZGcmFtZVN0YXJ0
KTsNCiAgICB9DQogIH0NCn0NCg0Kdm9pZCBTdWJzZXNzaW9uSU9TdGF0ZTo6dXNlRnJhbWVGb3JI
aW50aW5nKHVuc2lnbmVkIGZyYW1lU2l6ZSwNCgkJCQkJICAgc3RydWN0IHRpbWV2YWwgcHJlc2Vu
dGF0aW9uVGltZSwNCgkJCQkJICAgdW5zaWduZWQgc3RhcnRTYW1wbGVOdW1iZXIpIHsNCiAgLy8g
QXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIHNpbmdsZSwgY29tYmluZWQgZnJhbWUgLSBub3QgaW5k
aXZpZHVhbCBwYWNrZXRzLg0KICAvLyBGb3IgdGhlIGhpbnQgdHJhY2ssIHdlIG5lZWQgdG8gc3Bs
aXQgdGhlIGZyYW1lIGJhY2sgdXAgaW50byBzZXBhcmF0ZSBwYWNrZXRzLg0KICAvLyBIb3dldmVy
LCBmb3Igc29tZSBSVFAgc291cmNlcywgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gcmV1c2UgdGhlIHNw
ZWNpYWwNCiAgLy8gaGVhZGVyIGJ5dGVzIHRoYXQgd2VyZSBhdCB0aGUgc3RhcnQgb2YgZWFjaCBv
ZiB0aGUgUlRQIHBhY2tldHMuDQogIEJvb2xlYW4gaGFjazI2MyA9IHN0cmNtcChmT3VyU3Vic2Vz
c2lvbi5jb2RlY05hbWUoKSwgIkgyNjMtMTk5OCIpID09IDA7DQogIEJvb2xlYW4gaGFja200YV9n
ZW5lcmljID0gc3RyY21wKGZPdXJTdWJzZXNzaW9uLm1lZGl1bU5hbWUoKSwgImF1ZGlvIikgPT0g
MA0KICAgICYmIHN0cmNtcChmT3VyU3Vic2Vzc2lvbi5jb2RlY05hbWUoKSwgIk1QRUc0LUdFTkVS
SUMiKSA9PSAwOw0KICBCb29sZWFuIGhhY2ttNGFfbGF0bSA9IHN0cmNtcChmT3VyU3Vic2Vzc2lv
bi5tZWRpdW1OYW1lKCksICJhdWRpbyIpID09IDANCiAgICAmJiBzdHJjbXAoZk91clN1YnNlc3Np
b24uY29kZWNOYW1lKCksICJNUDRBLUxBVE0iKSA9PSAwOw0KICBCb29sZWFuIGhhY2ttNGEgPSBo
YWNrbTRhX2dlbmVyaWMgfHwgaGFja200YV9sYXRtOw0KICBCb29sZWFuIGhhdmVTcGVjaWFsSGVh
ZGVycyA9IChoYWNrMjYzIHx8IGhhY2ttNGFfZ2VuZXJpYyk7DQoNCiAgLy8gSWYgdGhlcmUgaGFz
IGJlZW4gYSBwcmV2aW91cyBmcmFtZSwgdGhlbiBvdXRwdXQgYSAnaGludCBzYW1wbGUnIGZvciBp
dC4NCiAgLy8gKFdlIHVzZSB0aGUgY3VycmVudCBmcmFtZSdzIHByZXNlbnRhdGlvbiB0aW1lIHRv
IGNvbXB1dGUgdGhlIHByZXZpb3VzDQogIC8vIGhpbnQgc2FtcGxlJ3MgZHVyYXRpb24uKQ0KICBS
VFBTb3VyY2UqIGNvbnN0IHJzID0gZk91clN1YnNlc3Npb24ucnRwU291cmNlKCk7IC8vIGFiYnJl
diAoQVNTRVJUOiAhPSBOVUxMKQ0KICBzdHJ1Y3QgdGltZXZhbCBjb25zdCYgcHB0ID0gZlByZXZG
cmFtZVN0YXRlLnByZXNlbnRhdGlvblRpbWU7IC8vYWJicmV2DQogIGlmIChwcHQudHZfc2VjICE9
IDAgfHwgcHB0LnR2X3VzZWMgIT0gMCkgew0KICAgIGRvdWJsZSBkdXJhdGlvbiA9IChwcmVzZW50
YXRpb25UaW1lLnR2X3NlYyAtIHBwdC50dl9zZWMpDQogICAgICArIChwcmVzZW50YXRpb25UaW1l
LnR2X3VzZWMgLSBwcHQudHZfdXNlYykvMTAwMDAwMC4wOw0KICAgIGlmIChkdXJhdGlvbiA8IDAu
MCkgZHVyYXRpb24gPSAwLjA7DQogICAgdW5zaWduZWQgbXNEdXJhdGlvbiA9ICh1bnNpZ25lZCko
ZHVyYXRpb24qMTAwMCk7IC8vIG1pbGxpc2Vjb25kcw0KICAgIGlmIChtc0R1cmF0aW9uID4gZkhJ
TkYuZG1heCkgZkhJTkYuZG1heCA9IG1zRHVyYXRpb247DQogICAgdW5zaWduZWQgaGludFNhbXBs
ZUR1cmF0aW9uDQogICAgICA9ICh1bnNpZ25lZCkoKDIqZHVyYXRpb24qZlFUVGltZVNjYWxlKzEp
LzIpOyAvLyByb3VuZA0KICAgIGlmIChoYWNrbTRhKSB7DQogICAgICAvLyBCZWNhdXNlIG11bHRp
cGxlIEFBQyBmcmFtZXMgY2FuIGFwcGVhciBpbiBhIFJUUCBwYWNrZXQsIHRoZSBwcmVzZW50YXRp
b24NCiAgICAgIC8vIHRpbWVzIG9mIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgZnJhbWVzIHdp
bGwgbm90IGJlIGFjY3VyYXRlLg0KICAgICAgLy8gU28sIHVzZSB0aGUga25vd24gImhpbnRTYW1w
bGVEdXJhdGlvbiIgaW5zdGVhZDoNCiAgICAgIGhpbnRTYW1wbGVEdXJhdGlvbiA9IGZUcmFja0hp
bnRlZEJ5VXMtPmZRVFRpbWVVbml0c1BlclNhbXBsZTsNCg0KICAgICAgLy8gQWxzbywgaWYgdGhl
ICd0aW1lIHNjYWxlJyB3YXMgZGlmZmVyZW50IGZyb20gdGhlIFJUUCB0aW1lc3RhbXAgZnJlcXVl
bmN5LA0KICAgICAgLy8gKGFzIGNhbiBoYXBwZW4gd2l0aCBhYWNQbHVzKSwgdGhlbiB3ZSBuZWVk
IHRvIHNjYWxlICJoaW50U2FtcGxlRHVyYXRpb24iDQogICAgICAvLyBhY2NvcmRpbmdseToNCiAg
ICAgIGlmIChmVHJhY2tIaW50ZWRCeVVzLT5mUVRUaW1lU2NhbGUgIT0gZk91clN1YnNlc3Npb24u
cnRwVGltZXN0YW1wRnJlcXVlbmN5KCkpIHsNCgl1bnNpZ25lZCBjb25zdCBzY2FsaW5nRmFjdG9y
DQoJICA9IGZPdXJTdWJzZXNzaW9uLnJ0cFRpbWVzdGFtcEZyZXF1ZW5jeSgpL2ZUcmFja0hpbnRl
ZEJ5VXMtPmZRVFRpbWVTY2FsZSA7DQoJaGludFNhbXBsZUR1cmF0aW9uICo9IHNjYWxpbmdGYWN0
b3I7DQogICAgICB9DQogICAgfQ0KDQogICAgaW50NjRfdCBjb25zdCBoaW50U2FtcGxlRGVzdEZp
bGVPZmZzZXQgPSBUZWxsRmlsZTY0KGZPdXJTaW5rLmZPdXRGaWQpOw0KDQogICAgdW5zaWduZWQg
Y29uc3QgbWF4UGFja2V0U2l6ZSA9IDE0NTA7DQogICAgdW5zaWduZWQgc2hvcnQgbnVtUFRFbnRy
aWVzDQogICAgICA9IChmUHJldkZyYW1lU3RhdGUuZnJhbWVTaXplICsgKG1heFBhY2tldFNpemUt
MSkpL21heFBhY2tldFNpemU7IC8vIG5vcm1hbCBjYXNlDQogICAgdW5zaWduZWQgY2hhciogaW1t
ZWRpYXRlRGF0YVB0ciA9IE5VTEw7DQogICAgdW5zaWduZWQgaW1tZWRpYXRlRGF0YUJ5dGVzUmVt
YWluaW5nID0gMDsNCiAgICBpZiAoaGF2ZVNwZWNpYWxIZWFkZXJzKSB7IC8vIHNwZWNpYWwgY2Fz
ZQ0KICAgICAgbnVtUFRFbnRyaWVzID0gZlByZXZGcmFtZVN0YXRlLm51bVNwZWNpYWxIZWFkZXJz
Ow0KICAgICAgaW1tZWRpYXRlRGF0YVB0ciA9IGZQcmV2RnJhbWVTdGF0ZS5zcGVjaWFsSGVhZGVy
Qnl0ZXM7DQogICAgICBpbW1lZGlhdGVEYXRhQnl0ZXNSZW1haW5pbmcNCgk9IGZQcmV2RnJhbWVT
dGF0ZS5zcGVjaWFsSGVhZGVyQnl0ZXNMZW5ndGg7DQogICAgfQ0KICAgIHVuc2lnbmVkIGhpbnRT
YW1wbGVTaXplDQogICAgICA9IGZPdXJTaW5rLmFkZEhhbGZXb3JkKG51bVBURW50cmllcyk7Ly8g
RW50cnkgY291bnQNCiAgICBoaW50U2FtcGxlU2l6ZSArPSBmT3VyU2luay5hZGRIYWxmV29yZCgw
eDAwMDApOyAvLyBSZXNlcnZlZA0KDQogICAgdW5zaWduZWQgb2Zmc2V0V2l0aGluU2FtcGxlID0g
MDsNCiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUFRFbnRyaWVzOyArK2kpIHsNCiAg
ICAgIC8vIE91dHB1dCBhIFBhY2tldCBUYWJsZSBlbnRyeSAocmVwcmVzZW50aW5nIGEgc2luZ2xl
IFJUUCBwYWNrZXQpOg0KICAgICAgdW5zaWduZWQgc2hvcnQgbnVtRFRFbnRyaWVzID0gMTsNCiAg
ICAgIHVuc2lnbmVkIHNob3J0IHNlcU51bSA9IGZQcmV2RnJhbWVTdGF0ZS5zZXFOdW0rKzsNCiAg
ICAgICAgICAvLyBOb3RlOiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgaW5wdXQgc3RyZWFtIGhhZCBu
byBwYWNrZXRzIGxvc3QgIyMjIyMNCiAgICAgIHVuc2lnbmVkIHJ0cEhlYWRlciA9IGZQcmV2RnJh
bWVTdGF0ZS5ydHBIZWFkZXI7DQogICAgICBpZiAoaSsxIDwgbnVtUFRFbnRyaWVzKSB7DQoJLy8g
VGhpcyBpcyBub3QgdGhlIGxhc3QgUlRQIHBhY2tldCwgc28gY2xlYXIgdGhlIG1hcmtlciBiaXQ6
DQoJcnRwSGVhZGVyICY9fiAoMTw8MjMpOw0KICAgICAgfQ0KICAgICAgdW5zaWduZWQgZGF0YUZy
YW1lU2l6ZSA9IChpKzEgPCBudW1QVEVudHJpZXMpDQoJPyBtYXhQYWNrZXRTaXplIDogZlByZXZG
cmFtZVN0YXRlLmZyYW1lU2l6ZSAtIGkqbWF4UGFja2V0U2l6ZTsgLy8gbm9ybWFsIGNhc2UNCiAg
ICAgIHVuc2lnbmVkIHNhbXBsZU51bWJlciA9IGZQcmV2RnJhbWVTdGF0ZS5zdGFydFNhbXBsZU51
bWJlcjsNCg0KICAgICAgdW5zaWduZWQgY2hhciBpbW1lZGlhdGVEYXRhTGVuID0gMDsNCiAgICAg
IGlmIChoYXZlU3BlY2lhbEhlYWRlcnMpIHsgLy8gc3BlY2lhbCBjYXNlDQoJKytudW1EVEVudHJp
ZXM7IC8vIHRvIGluY2x1ZGUgYSBEYXRhIFRhYmxlIGVudHJ5IGZvciB0aGUgc3BlY2lhbCBoZHIN
CglpZiAoaW1tZWRpYXRlRGF0YUJ5dGVzUmVtYWluaW5nID4gMCkgew0KCSAgaWYgKGhhY2syNjMp
IHsNCgkgICAgaW1tZWRpYXRlRGF0YUxlbiA9ICppbW1lZGlhdGVEYXRhUHRyKys7DQoJICAgIC0t
aW1tZWRpYXRlRGF0YUJ5dGVzUmVtYWluaW5nOw0KCSAgICBpZiAoaW1tZWRpYXRlRGF0YUxlbiA+
IGltbWVkaWF0ZURhdGFCeXRlc1JlbWFpbmluZykgew0KCSAgICAgIC8vIHNob3VsZG4ndCBoYXBw
ZW4gKGxlbmd0aCBieXRlIHdhcyBiYWQpDQoJICAgICAgaW1tZWRpYXRlRGF0YUxlbiA9IGltbWVk
aWF0ZURhdGFCeXRlc1JlbWFpbmluZzsNCgkgICAgfQ0KCSAgfSBlbHNlIHsNCgkgICAgaW1tZWRp
YXRlRGF0YUxlbiA9IGZQcmV2RnJhbWVTdGF0ZS5zcGVjaWFsSGVhZGVyQnl0ZXNMZW5ndGg7DQoJ
ICB9DQoJfQ0KCWRhdGFGcmFtZVNpemUgPSBmUHJldkZyYW1lU3RhdGUucGFja2V0U2l6ZXNbaV0g
LSBpbW1lZGlhdGVEYXRhTGVuOw0KDQoJaWYgKGhhY2syNjMpIHsNCgkgIEJvb2xlYW4gUGJpdFNl
dA0KCSAgICA9IGltbWVkaWF0ZURhdGFMZW4gPj0gMSAmJiAoaW1tZWRpYXRlRGF0YVB0clswXSYw
eDQpICE9IDA7DQoJICBpZiAoUGJpdFNldCkgew0KCSAgICBvZmZzZXRXaXRoaW5TYW1wbGUgKz0g
MjsgLy8gdG8gb21pdCB0aGUgdHdvIGxlYWRpbmcgMCBieXRlcw0KCSAgfQ0KCX0NCiAgICAgIH0N
Cg0KICAgICAgLy8gT3V0cHV0IHRoZSBQYWNrZXQgVGFibGU6DQogICAgICBoaW50U2FtcGxlU2l6
ZSArPSBmT3VyU2luay5hZGRXb3JkKDApOyAvLyBSZWxhdGl2ZSB0cmFuc21pc3Npb24gdGltZQ0K
ICAgICAgaGludFNhbXBsZVNpemUgKz0gZk91clNpbmsuYWRkV29yZChydHBIZWFkZXJ8c2VxTnVt
KTsNCiAgICAgICAgICAvLyBSVFAgaGVhZGVyIGluZm8gKyBSVFAgc2VxdWVuY2UgbnVtYmVyDQog
ICAgICBoaW50U2FtcGxlU2l6ZSArPSBmT3VyU2luay5hZGRIYWxmV29yZCgweDAwMDApOyAvLyBG
bGFncw0KICAgICAgaGludFNhbXBsZVNpemUgKz0gZk91clNpbmsuYWRkSGFsZldvcmQobnVtRFRF
bnRyaWVzKTsgLy8gRW50cnkgY291bnQNCiAgICAgIHVuc2lnbmVkIHRvdGFsUGFja2V0U2l6ZSA9
IDA7DQoNCiAgICAgIC8vIE91dHB1dCB0aGUgRGF0YSBUYWJsZToNCiAgICAgIGlmIChoYXZlU3Bl
Y2lhbEhlYWRlcnMpIHsNCgkvLyAgIHVzZSB0aGUgIkltbWVkaWF0ZSBEYXRhIiBmb3JtYXQgKDEp
Og0KCWhpbnRTYW1wbGVTaXplICs9IGZPdXJTaW5rLmFkZEJ5dGUoMSk7IC8vIFNvdXJjZQ0KCXVu
c2lnbmVkIGNoYXIgbGVuID0gaW1tZWRpYXRlRGF0YUxlbiA+IDE0ID8gMTQgOiBpbW1lZGlhdGVE
YXRhTGVuOw0KCWhpbnRTYW1wbGVTaXplICs9IGZPdXJTaW5rLmFkZEJ5dGUobGVuKTsgLy8gTGVu
Z3RoDQoJdG90YWxQYWNrZXRTaXplICs9IGxlbjsgZkhJTkYuZGltbSArPSBsZW47DQoJdW5zaWdu
ZWQgY2hhciBqOw0KCWZvciAoaiA9IDA7IGogPCBsZW47ICsraikgew0KCSAgaGludFNhbXBsZVNp
emUgKz0gZk91clNpbmsuYWRkQnl0ZShpbW1lZGlhdGVEYXRhUHRyW2pdKTsgLy8gRGF0YQ0KCX0N
Cglmb3IgKGogPSBsZW47IGogPCAxNDsgKytqKSB7DQoJICBoaW50U2FtcGxlU2l6ZSArPSBmT3Vy
U2luay5hZGRCeXRlKDApOyAvLyBEYXRhIChwYWRkaW5nKQ0KCX0NCg0KCWltbWVkaWF0ZURhdGFQ
dHIgKz0gaW1tZWRpYXRlRGF0YUxlbjsNCglpbW1lZGlhdGVEYXRhQnl0ZXNSZW1haW5pbmcgLT0g
aW1tZWRpYXRlRGF0YUxlbjsNCiAgICAgIH0NCiAgICAgIC8vICAgdXNlIHRoZSAiU2FtcGxlIERh
dGEiIGZvcm1hdCAoMik6DQogICAgICBoaW50U2FtcGxlU2l6ZSArPSBmT3VyU2luay5hZGRCeXRl
KDIpOyAvLyBTb3VyY2UNCiAgICAgIGhpbnRTYW1wbGVTaXplICs9IGZPdXJTaW5rLmFkZEJ5dGUo
MCk7IC8vIFRyYWNrIHJlZiBpbmRleA0KICAgICAgaGludFNhbXBsZVNpemUgKz0gZk91clNpbmsu
YWRkSGFsZldvcmQoZGF0YUZyYW1lU2l6ZSk7IC8vIExlbmd0aA0KICAgICAgdG90YWxQYWNrZXRT
aXplICs9IGRhdGFGcmFtZVNpemU7IGZISU5GLmRtZWQgKz0gZGF0YUZyYW1lU2l6ZTsNCiAgICAg
IGhpbnRTYW1wbGVTaXplICs9IGZPdXJTaW5rLmFkZFdvcmQoc2FtcGxlTnVtYmVyKTsgLy8gU2Ft
cGxlIG51bWJlcg0KICAgICAgaGludFNhbXBsZVNpemUgKz0gZk91clNpbmsuYWRkV29yZChvZmZz
ZXRXaXRoaW5TYW1wbGUpOyAvLyBPZmZzZXQNCiAgICAgIC8vIEdldCAiYnl0ZXN8c2FtcGxlcyBw
ZXIgY29tcHJlc3Npb24gYmxvY2siIGZyb20gdGhlIGhpbnRlZCB0cmFjazoNCiAgICAgIHVuc2ln
bmVkIHNob3J0IGNvbnN0IGJ5dGVzUGVyQ29tcHJlc3Npb25CbG9jaw0KCT0gZlRyYWNrSGludGVk
QnlVcy0+ZlFUQnl0ZXNQZXJGcmFtZTsNCiAgICAgIHVuc2lnbmVkIHNob3J0IGNvbnN0IHNhbXBs
ZXNQZXJDb21wcmVzc2lvbkJsb2NrDQoJPSBmVHJhY2tIaW50ZWRCeVVzLT5mUVRTYW1wbGVzUGVy
RnJhbWU7DQogICAgICBoaW50U2FtcGxlU2l6ZSArPSBmT3VyU2luay5hZGRIYWxmV29yZChieXRl
c1BlckNvbXByZXNzaW9uQmxvY2spOw0KICAgICAgaGludFNhbXBsZVNpemUgKz0gZk91clNpbmsu
YWRkSGFsZldvcmQoc2FtcGxlc1BlckNvbXByZXNzaW9uQmxvY2spOw0KDQogICAgICBvZmZzZXRX
aXRoaW5TYW1wbGUgKz0gZGF0YUZyYW1lU2l6ZTsvLyBmb3IgdGhlIG5leHQgaXRlcmF0aW9uIChp
ZiBhbnkpDQoNCiAgICAgIC8vIFRhbGx5IHN0YXRpc3RpY3MgZm9yIHRoaXMgcGFja2V0Og0KICAg
ICAgZkhJTkYubnVtcCArPSAxOw0KICAgICAgZkhJTkYudHB5bCArPSB0b3RhbFBhY2tldFNpemU7
DQogICAgICB0b3RhbFBhY2tldFNpemUgKz0gMTI7IC8vIGFkZCBpbiB0aGUgc2l6ZSBvZiB0aGUg
UlRQIGhlYWRlcg0KICAgICAgZkhJTkYudHJweSArPSB0b3RhbFBhY2tldFNpemU7DQogICAgICBp
ZiAodG90YWxQYWNrZXRTaXplID4gZkhJTkYucG1heCkgZkhJTkYucG1heCA9IHRvdGFsUGFja2V0
U2l6ZTsNCiAgICB9DQoNCiAgICAvLyBNYWtlIG5vdGUgb2YgdGhpcyBjb21wbGV0ZWQgaGludCBz
YW1wbGUgZnJhbWU6DQogICAgZlFUVG90TnVtU2FtcGxlcyArPSB1c2VGcmFtZTEoaGludFNhbXBs
ZVNpemUsIHBwdCwgaGludFNhbXBsZUR1cmF0aW9uLA0KCQkJCSAgaGludFNhbXBsZURlc3RGaWxl
T2Zmc2V0KTsNCiAgfQ0KDQogIC8vIFJlbWVtYmVyIHRoaXMgZnJhbWUgZm9yIG5leHQgdGltZToN
CiAgZlByZXZGcmFtZVN0YXRlLmZyYW1lU2l6ZSA9IGZyYW1lU2l6ZTsNCiAgZlByZXZGcmFtZVN0
YXRlLnByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOw0KICBmUHJldkZyYW1lU3Rh
dGUuc3RhcnRTYW1wbGVOdW1iZXIgPSBzdGFydFNhbXBsZU51bWJlcjsNCiAgZlByZXZGcmFtZVN0
YXRlLnJ0cEhlYWRlcg0KICAgID0gcnMtPmN1clBhY2tldE1hcmtlckJpdCgpPDwyMw0KICAgIHwg
KHJzLT5ydHBQYXlsb2FkRm9ybWF0KCkmMHg3Rik8PDE2Ow0KICBpZiAoaGFjazI2Mykgew0KICAg
IEgyNjNwbHVzVmlkZW9SVFBTb3VyY2UqIHJzXzI2MyA9IChIMjYzcGx1c1ZpZGVvUlRQU291cmNl
KilyczsNCiAgICBmUHJldkZyYW1lU3RhdGUubnVtU3BlY2lhbEhlYWRlcnMgPSByc18yNjMtPmZO
dW1TcGVjaWFsSGVhZGVyczsNCiAgICBmUHJldkZyYW1lU3RhdGUuc3BlY2lhbEhlYWRlckJ5dGVz
TGVuZ3RoID0gcnNfMjYzLT5mU3BlY2lhbEhlYWRlckJ5dGVzTGVuZ3RoOw0KICAgIHVuc2lnbmVk
IGk7DQogICAgZm9yIChpID0gMDsgaSA8IHJzXzI2My0+ZlNwZWNpYWxIZWFkZXJCeXRlc0xlbmd0
aDsgKytpKSB7DQogICAgICBmUHJldkZyYW1lU3RhdGUuc3BlY2lhbEhlYWRlckJ5dGVzW2ldID0g
cnNfMjYzLT5mU3BlY2lhbEhlYWRlckJ5dGVzW2ldOw0KICAgIH0NCiAgICBmb3IgKGkgPSAwOyBp
IDwgcnNfMjYzLT5mTnVtU3BlY2lhbEhlYWRlcnM7ICsraSkgew0KICAgICAgZlByZXZGcmFtZVN0
YXRlLnBhY2tldFNpemVzW2ldID0gcnNfMjYzLT5mUGFja2V0U2l6ZXNbaV07DQogICAgfQ0KICB9
IGVsc2UgaWYgKGhhY2ttNGFfZ2VuZXJpYykgew0KICAgIC8vIFN5bnRoZXNpemUgYSBzcGVjaWFs
IGhlYWRlciwgc28gdGhhdCB0aGlzIGZyYW1lIGNhbiBiZSBpbiBpdHMgb3duIFJUUCBwYWNrZXQu
DQogICAgdW5zaWduZWQgY29uc3Qgc2l6ZUxlbmd0aCA9IGZPdXJTdWJzZXNzaW9uLmF0dHJWYWxf
dW5zaWduZWQoInNpemVsZW5ndGgiKTsNCiAgICB1bnNpZ25lZCBjb25zdCBpbmRleExlbmd0aCA9
IGZPdXJTdWJzZXNzaW9uLmF0dHJWYWxfdW5zaWduZWQoImluZGV4bGVuZ3RoIik7DQogICAgaWYg
KHNpemVMZW5ndGggKyBpbmRleExlbmd0aCAhPSAxNikgew0KICAgICAgZW52aXIoKSA8PCAiV2Fy
bmluZzogdW5leHBlY3RlZCAnc2l6ZUxlbmd0aCcgIiA8PCBzaXplTGVuZ3RoDQoJICAgICAgPDwg
IiBhbmQgJ2luZGV4TGVuZ3RoJyAiIDw8IGluZGV4TGVuZ3RoDQoJICAgICAgPDwgInNlZW4gd2hl
biBjcmVhdGluZyBoaW50IHRyYWNrXG4iOw0KICAgIH0NCiAgICBmUHJldkZyYW1lU3RhdGUubnVt
U3BlY2lhbEhlYWRlcnMgPSAxOw0KICAgIGZQcmV2RnJhbWVTdGF0ZS5zcGVjaWFsSGVhZGVyQnl0
ZXNMZW5ndGggPSA0Ow0KICAgIGZQcmV2RnJhbWVTdGF0ZS5zcGVjaWFsSGVhZGVyQnl0ZXNbMF0g
PSAwOyAvLyBBVV9oZWFkZXJzX2xlbmd0aCAoaGlnaCBieXRlKQ0KICAgIGZQcmV2RnJhbWVTdGF0
ZS5zcGVjaWFsSGVhZGVyQnl0ZXNbMV0gPSAxNjsgLy8gQVVfaGVhZGVyc19sZW5ndGggKGxvdyBi
eXRlKQ0KICAgIGZQcmV2RnJhbWVTdGF0ZS5zcGVjaWFsSGVhZGVyQnl0ZXNbMl0gPSAoKGZyYW1l
U2l6ZTw8aW5kZXhMZW5ndGgpJjB4RkYwMCk+Pjg7DQogICAgZlByZXZGcmFtZVN0YXRlLnNwZWNp
YWxIZWFkZXJCeXRlc1szXSA9IChmcmFtZVNpemU8PGluZGV4TGVuZ3RoKTsNCiAgICBmUHJldkZy
YW1lU3RhdGUucGFja2V0U2l6ZXNbMF0NCiAgICAgID0gZlByZXZGcmFtZVN0YXRlLnNwZWNpYWxI
ZWFkZXJCeXRlc0xlbmd0aCArIGZyYW1lU2l6ZTsNCiAgfQ0KfQ0KDQp1bnNpZ25lZCBTdWJzZXNz
aW9uSU9TdGF0ZTo6dXNlRnJhbWUxKHVuc2lnbmVkIHNvdXJjZURhdGFTaXplLA0KCQkJCSAgICAg
IHN0cnVjdCB0aW1ldmFsIHByZXNlbnRhdGlvblRpbWUsDQoJCQkJICAgICAgdW5zaWduZWQgZnJh
bWVEdXJhdGlvbiwNCgkJCQkgICAgICBpbnQ2NF90IGRlc3RGaWxlT2Zmc2V0KSB7DQogIC8vIEZp
Z3VyZSBvdXQgdGhlIGFjdHVhbCBmcmFtZSBzaXplIGZvciB0aGlzIGRhdGE6DQogIHVuc2lnbmVk
IGZyYW1lU2l6ZSA9IGZRVEJ5dGVzUGVyRnJhbWU7DQogIGlmIChmcmFtZVNpemUgPT0gMCkgew0K
ICAgIC8vIFRoZSBlbnRpcmUgcGFja2V0IGRhdGEgaXMgYXNzdW1lZCB0byBiZSBhIGZyYW1lOg0K
ICAgIGZyYW1lU2l6ZSA9IHNvdXJjZURhdGFTaXplOw0KICB9DQogIHVuc2lnbmVkIGNvbnN0IG51
bUZyYW1lcyA9IHNvdXJjZURhdGFTaXplL2ZyYW1lU2l6ZTsNCiAgdW5zaWduZWQgY29uc3QgbnVt
U2FtcGxlcyA9IG51bUZyYW1lcypmUVRTYW1wbGVzUGVyRnJhbWU7DQoNCiAgLy8gUmVjb3JkIHRo
ZSBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCAnY2h1bmsnIHRoaXMgZGF0YSBiZWxvbmdzIHRvOg0K
ICBDaHVua0Rlc2NyaXB0b3IqIG5ld1RhaWxDaHVuazsNCiAgaWYgKGZUYWlsQ2h1bmsgPT0gTlVM
TCkgew0KICAgIG5ld1RhaWxDaHVuayA9IGZIZWFkQ2h1bmsNCiAgICAgID0gbmV3IENodW5rRGVz
Y3JpcHRvcihkZXN0RmlsZU9mZnNldCwgc291cmNlRGF0YVNpemUsDQoJCQkgICAgZnJhbWVTaXpl
LCBmcmFtZUR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lKTsNCiAgfSBlbHNlIHsNCiAgICBuZXdU
YWlsQ2h1bmsgPSBmVGFpbENodW5rLT5leHRlbmRDaHVuayhkZXN0RmlsZU9mZnNldCwgc291cmNl
RGF0YVNpemUsDQoJCQkJCSAgIGZyYW1lU2l6ZSwgZnJhbWVEdXJhdGlvbiwNCgkJCQkJICAgcHJl
c2VudGF0aW9uVGltZSk7DQogIH0NCiAgaWYgKG5ld1RhaWxDaHVuayAhPSBmVGFpbENodW5rKSB7
DQogICAvLyBUaGlzIGRhdGEgY3JlYXRlZCBhIG5ldyBjaHVuaywgcmF0aGVyIHRoYW4gZXh0ZW5k
aW5nIHRoZSBvbGQgb25lDQogICAgKytmTnVtQ2h1bmtzOw0KICAgIGZUYWlsQ2h1bmsgPSBuZXdU
YWlsQ2h1bms7DQogIH0NCg0KICByZXR1cm4gbnVtU2FtcGxlczsNCn0NCg0Kdm9pZCBTdWJzZXNz
aW9uSU9TdGF0ZTo6b25Tb3VyY2VDbG9zdXJlKCkgew0KICBmT3VyU291cmNlSXNBY3RpdmUgPSBG
YWxzZTsNCiAgZk91clNpbmsub25Tb3VyY2VDbG9zdXJlMSgpOw0KfQ0KDQpCb29sZWFuIFN1YnNl
c3Npb25JT1N0YXRlOjpzeW5jT0soc3RydWN0IHRpbWV2YWwgcHJlc2VudGF0aW9uVGltZSkgew0K
ICBRdWlja1RpbWVGaWxlU2luayYgcyA9IGZPdXJTaW5rOyAvLyBhYmJyZXZpYXRpb24NCiAgaWYg
KCFzLmZTeW5jU3RyZWFtcyB8fCBmT3VyU3Vic2Vzc2lvbi5ydHBTb3VyY2UoKSA9PSBOVUxMKSBy
ZXR1cm4gVHJ1ZTsgLy8gd2UgZG9uJ3QgY2FyZQ0KDQogIGlmIChzLmZOdW1TeW5jZWRTdWJzZXNz
aW9ucyA8IHMuZk51bVN1YnNlc3Npb25zKSB7DQogICAgLy8gTm90IGFsbCBzdWJzZXNzaW9ucyBo
YXZlIHlldCBiZWVuIHN5bmNlZC4gIENoZWNrIHdoZXRoZXIgb3VycyB3YXMNCiAgICAvLyBvbmUg
b2YgdGhlIHVuc3luY2VkIG9uZXMsIGFuZCwgaWYgc28sIHdoZXRoZXIgaXQgaXMgbm93IHN5bmNl
ZDoNCiAgICBpZiAoIWZIYXZlQmVlblN5bmNlZCkgew0KICAgICAgLy8gV2Ugd2VyZW4ndCBzeW5j
aHJvbml6ZWQgYmVmb3JlDQogICAgICBpZiAoZk91clN1YnNlc3Npb24ucnRwU291cmNlKCktPmhh
c0JlZW5TeW5jaHJvbml6ZWRVc2luZ1JUQ1AoKSkgew0KCS8vIEgyNjQgPw0KCWlmIChmUVRNZWRp
YURhdGFBdG9tQ3JlYXRvciA9PSAmUXVpY2tUaW1lRmlsZVNpbms6OmFkZEF0b21fYXZjMSkgew0K
CSAgLy8gc3BlY2lhbCBjYXNlOiBhdWRpbyArIEgyNjQgdmlkZW86IHdhaXQgdW50aWwgYXVkaW8g
aXMgaW4gc3luYw0KCSAgaWYgKChzLmZOdW1TdWJzZXNzaW9ucyA9PSAyKSAmJiAocy5mTnVtU3lu
Y2VkU3Vic2Vzc2lvbnMgPCAocy5mTnVtU3Vic2Vzc2lvbnMgLSAxKSkpIHJldHVybiBGYWxzZTsN
Cg0KCSAgLy8gaWYgYXVkaW8gaXMgaW4gc3luYywgd2FpdCBmb3IgdGhlIG5leHQgSURSIGZyYW1l
IHRvIHN0YXJ0DQoJICB1bnNpZ25lZCBjaGFyKiBjb25zdCBmcmFtZVNvdXJjZSA9IGZCdWZmZXIt
PmRhdGFTdGFydCgpOw0KCSAgaWYgKCpmcmFtZVNvdXJjZSAhPSBIMjY0X0lEUl9GUkFNRSkgcmV0
dXJuIEZhbHNlOw0KCX0NCgkvLyBCdXQgbm93IHdlIGFyZQ0KCWZIYXZlQmVlblN5bmNlZCA9IFRy
dWU7DQoJZlN5bmNUaW1lID0gcHJlc2VudGF0aW9uVGltZTsNCgkrK3MuZk51bVN5bmNlZFN1YnNl
c3Npb25zOw0KDQoJaWYgKHRpbWV2YWxHRShmU3luY1RpbWUsIHMuZk5ld2VzdFN5bmNUaW1lKSkg
ew0KCSAgcy5mTmV3ZXN0U3luY1RpbWUgPSBmU3luY1RpbWU7DQoJfQ0KICAgICAgfQ0KICAgIH0N
CiAgfQ0KDQogIC8vIENoZWNrIGFnYWluIHdoZXRoZXIgYWxsIHN1YnNlc3Npb25zIGhhdmUgYmVl
biBzeW5jZWQ6DQogIGlmIChzLmZOdW1TeW5jZWRTdWJzZXNzaW9ucyA8IHMuZk51bVN1YnNlc3Np
b25zKSByZXR1cm4gRmFsc2U7DQoNCiAgLy8gQWxsb3cgdGhpcyBkYXRhIGlmIGl0IGlzIG1vcmUg
cmVjZW50IHRoYW4gdGhlIG5ld2VzdCBzeW5jIHRpbWU6DQogIHJldHVybiB0aW1ldmFsR0UocHJl
c2VudGF0aW9uVGltZSwgcy5mTmV3ZXN0U3luY1RpbWUpOw0KfQ0KDQp2b2lkIFN1YnNlc3Npb25J
T1N0YXRlOjpzZXRIaW50VHJhY2soU3Vic2Vzc2lvbklPU3RhdGUqIGhpbnRlZFRyYWNrLA0KCQkJ
CSAgICAgU3Vic2Vzc2lvbklPU3RhdGUqIGhpbnRUcmFjaykgew0KICBpZiAoaGludGVkVHJhY2sg
IT0gTlVMTCkgaGludGVkVHJhY2stPmZIaW50VHJhY2tGb3JVcyA9IGhpbnRUcmFjazsNCiAgaWYg
KGhpbnRUcmFjayAhPSBOVUxMKSBoaW50VHJhY2stPmZUcmFja0hpbnRlZEJ5VXMgPSBoaW50ZWRU
cmFjazsNCn0NCg0KU3luY0ZyYW1lOjpTeW5jRnJhbWUodW5zaWduZWQgZnJhbWVOdW0pDQogIDog
bmV4dFN5bmNGcmFtZShOVUxMKSwgc2ZGcmFtZU51bShmcmFtZU51bSkgew0KfSAgDQoNCnZvaWQg
Q291bnQ2NDo6b3BlcmF0b3IrPSh1bnNpZ25lZCBhcmcpIHsNCiAgdW5zaWduZWQgbmV3TG8gPSBs
byArIGFyZzsNCiAgaWYgKG5ld0xvIDwgbG8pIHsgLy8gbG8gaGFzIG92ZXJmbG93ZWQNCiAgICAr
K2hpOw0KICB9DQogIGxvID0gbmV3TG87DQp9DQoNCkNodW5rRGVzY3JpcHRvcg0KOjpDaHVua0Rl
c2NyaXB0b3IoaW50NjRfdCBvZmZzZXRJbkZpbGUsIHVuc2lnbmVkIHNpemUsDQoJCSAgdW5zaWdu
ZWQgZnJhbWVTaXplLCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLA0KCQkgIHN0cnVjdCB0aW1ldmFs
IHByZXNlbnRhdGlvblRpbWUpDQogIDogZk5leHRDaHVuayhOVUxMKSwgZk9mZnNldEluRmlsZShv
ZmZzZXRJbkZpbGUpLA0KICAgIGZOdW1GcmFtZXMoc2l6ZS9mcmFtZVNpemUpLA0KICAgIGZGcmFt
ZVNpemUoZnJhbWVTaXplKSwgZkZyYW1lRHVyYXRpb24oZnJhbWVEdXJhdGlvbiksDQogICAgZlBy
ZXNlbnRhdGlvblRpbWUocHJlc2VudGF0aW9uVGltZSkgew0KfQ0KDQpDaHVua0Rlc2NyaXB0b3Iq
IENodW5rRGVzY3JpcHRvcg0KOjpleHRlbmRDaHVuayhpbnQ2NF90IG5ld09mZnNldEluRmlsZSwg
dW5zaWduZWQgbmV3U2l6ZSwNCgkgICAgICB1bnNpZ25lZCBuZXdGcmFtZVNpemUsIHVuc2lnbmVk
IG5ld0ZyYW1lRHVyYXRpb24sDQoJICAgICAgc3RydWN0IHRpbWV2YWwgbmV3UHJlc2VudGF0aW9u
VGltZSkgew0KICAvLyBGaXJzdCwgY2hlY2sgd2hldGhlciB0aGUgbmV3IHNwYWNlIGlzIGp1c3Qg
YXQgdGhlIGVuZCBvZiB0aGlzDQogIC8vIGV4aXN0aW5nIGNodW5rOg0KICBpZiAobmV3T2Zmc2V0
SW5GaWxlID09IGZPZmZzZXRJbkZpbGUgKyBmTnVtRnJhbWVzKmZGcmFtZVNpemUpIHsNCiAgICAv
LyBXZSBjYW4gZXh0ZW5kIHRoaXMgZXhpc3RpbmcgY2h1bmssIHByb3ZpZGVkIHRoYXQgdGhlIGZy
YW1lIHNpemUNCiAgICAvLyBhbmQgZnJhbWUgZHVyYXRpb24gaGF2ZSBub3QgY2hhbmdlZDoNCiAg
ICBpZiAobmV3RnJhbWVTaXplID09IGZGcmFtZVNpemUgJiYgbmV3RnJhbWVEdXJhdGlvbiA9PSBm
RnJhbWVEdXJhdGlvbikgew0KICAgICAgZk51bUZyYW1lcyArPSBuZXdTaXplL2ZGcmFtZVNpemU7
DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9DQogIH0NCg0KICAvLyBXZSdsbCBhbGxvY2F0ZSBh
IG5ldyBDaHVua0Rlc2NyaXB0b3IsIGFuZCBsaW5rIGl0IHRvIHRoZSBlbmQgb2YgdXM6DQogIENo
dW5rRGVzY3JpcHRvciogbmV3RGVzY3JpcHRvcg0KICAgID0gbmV3IENodW5rRGVzY3JpcHRvcihu
ZXdPZmZzZXRJbkZpbGUsIG5ld1NpemUsDQoJCQkgIG5ld0ZyYW1lU2l6ZSwgbmV3RnJhbWVEdXJh
dGlvbiwNCgkJCSAgbmV3UHJlc2VudGF0aW9uVGltZSk7DQoNCiAgZk5leHRDaHVuayA9IG5ld0Rl
c2NyaXB0b3I7DQoNCiAgcmV0dXJuIG5ld0Rlc2NyaXB0b3I7DQp9DQoNCg0KLy8vLy8vLy8vLyBR
dWlja1RpbWUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gLy8vLy8vLy8vLw0KDQp1bnNpZ25lZCBR
dWlja1RpbWVGaWxlU2luazo6YWRkV29yZDY0KHVfaW50NjRfdCB3b3JkKSB7DQogIGFkZEJ5dGUo
KHVuc2lnbmVkIGNoYXIpKHdvcmQ+PjU2KSk7IGFkZEJ5dGUoKHVuc2lnbmVkIGNoYXIpKHdvcmQ+
PjQ4KSk7DQogIGFkZEJ5dGUoKHVuc2lnbmVkIGNoYXIpKHdvcmQ+PjQwKSk7IGFkZEJ5dGUoKHVu
c2lnbmVkIGNoYXIpKHdvcmQ+PjMyKSk7DQogIGFkZEJ5dGUoKHVuc2lnbmVkIGNoYXIpKHdvcmQ+
PjI0KSk7IGFkZEJ5dGUoKHVuc2lnbmVkIGNoYXIpKHdvcmQ+PjE2KSk7DQogIGFkZEJ5dGUoKHVu
c2lnbmVkIGNoYXIpKHdvcmQ+PjgpKTsgYWRkQnl0ZSgodW5zaWduZWQgY2hhcikod29yZCkpOw0K
DQogIHJldHVybiA4Ow0KfQ0KDQp1bnNpZ25lZCBRdWlja1RpbWVGaWxlU2luazo6YWRkV29yZCh1
bnNpZ25lZCB3b3JkKSB7DQogIGFkZEJ5dGUod29yZD4+MjQpOyBhZGRCeXRlKHdvcmQ+PjE2KTsN
CiAgYWRkQnl0ZSh3b3JkPj44KTsgYWRkQnl0ZSh3b3JkKTsNCg0KICByZXR1cm4gNDsNCn0NCg0K
dW5zaWduZWQgUXVpY2tUaW1lRmlsZVNpbms6OmFkZEhhbGZXb3JkKHVuc2lnbmVkIHNob3J0IGhh
bGZXb3JkKSB7DQogIGFkZEJ5dGUoKHVuc2lnbmVkIGNoYXIpKGhhbGZXb3JkPj44KSk7IGFkZEJ5
dGUoKHVuc2lnbmVkIGNoYXIpaGFsZldvcmQpOw0KDQogIHJldHVybiAyOw0KfQ0KDQp1bnNpZ25l
ZCBRdWlja1RpbWVGaWxlU2luazo6YWRkWmVyb1dvcmRzKHVuc2lnbmVkIG51bVdvcmRzKSB7DQog
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Xb3JkczsgKytpKSB7DQogICAgYWRkV29yZCgw
KTsNCiAgfQ0KDQogIHJldHVybiBudW1Xb3Jkcyo0Ow0KfQ0KDQp1bnNpZ25lZCBRdWlja1RpbWVG
aWxlU2luazo6YWRkNEJ5dGVTdHJpbmcoY2hhciBjb25zdCogc3RyKSB7DQogIGFkZEJ5dGUoc3Ry
WzBdKTsgYWRkQnl0ZShzdHJbMV0pOyBhZGRCeXRlKHN0clsyXSk7IGFkZEJ5dGUoc3RyWzNdKTsN
Cg0KICByZXR1cm4gNDsNCn0NCg0KdW5zaWduZWQgUXVpY2tUaW1lRmlsZVNpbms6OmFkZEFyYml0
cmFyeVN0cmluZyhjaGFyIGNvbnN0KiBzdHIsDQoJCQkJCSAgICAgICBCb29sZWFuIG9uZUJ5dGVM
ZW5ndGgpIHsNCiAgdW5zaWduZWQgc2l6ZSA9IDA7DQogIGlmIChvbmVCeXRlTGVuZ3RoKSB7DQog
ICAgLy8gQmVnaW4gd2l0aCBhIGJ5dGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGxlbmd0aDoNCiAg
ICB1bnNpZ25lZCBzdHJMZW5ndGggPSBzdHJsZW4oc3RyKTsNCiAgICBpZiAoc3RyTGVuZ3RoID49
IDI1Nikgew0KICAgICAgZW52aXIoKSA8PCAiUXVpY2tUaW1lRmlsZVNpbms6OmFkZEFyYml0cmFy
eVN0cmluZyhcIiINCgkgICAgICA8PCBzdHIgPDwgIlwiKSBzYXcgc3RyaW5nIGxvbmdlciB0aGFu
IHdlIGtub3cgaG93IHRvIGhhbmRsZSAoIg0KCSAgICAgIDw8IHN0ckxlbmd0aCA8PCAiXG4iOw0K
ICAgIH0NCiAgICBzaXplICs9IGFkZEJ5dGUoKHVuc2lnbmVkIGNoYXIpc3RyTGVuZ3RoKTsNCiAg
fQ0KDQogIHdoaWxlICgqc3RyICE9ICdcMCcpIHsNCiAgICBzaXplICs9IGFkZEJ5dGUoKnN0cisr
KTsNCiAgfQ0KDQogIHJldHVybiBzaXplOw0KfQ0KDQp1bnNpZ25lZCBRdWlja1RpbWVGaWxlU2lu
azo6YWRkQXRvbUhlYWRlcihjaGFyIGNvbnN0KiBhdG9tTmFtZSkgew0KICAvLyBPdXRwdXQgYSBw
bGFjZWhvbGRlciBmb3IgdGhlIDQtYnl0ZSBzaXplOg0KICBhZGRXb3JkKDApOw0KDQogIC8vIE91
dHB1dCB0aGUgNC1ieXRlIGF0b20gbmFtZToNCiAgYWRkNEJ5dGVTdHJpbmcoYXRvbU5hbWUpOw0K
DQogIHJldHVybiA4Ow0KfQ0KDQp1bnNpZ25lZCBRdWlja1RpbWVGaWxlU2luazo6YWRkQXRvbUhl
YWRlcjY0KGNoYXIgY29uc3QqIGF0b21OYW1lKSB7DQogIC8vIE91dHB1dCA2NEJpdCBzaXplIG1h
cmtlcg0KICBhZGRXb3JkKDEpOw0KDQogIC8vIE91dHB1dCB0aGUgNC1ieXRlIGF0b20gbmFtZToN
CiAgYWRkNEJ5dGVTdHJpbmcoYXRvbU5hbWUpOw0KDQogIGFkZFdvcmQ2NCgwKTsNCg0KICByZXR1
cm4gMTY7DQp9DQoNCnZvaWQgUXVpY2tUaW1lRmlsZVNpbms6OnNldFdvcmQoaW50NjRfdCBmaWxl
UG9zbiwgdW5zaWduZWQgc2l6ZSkgew0KICBkbyB7DQogICAgaWYgKFNlZWtGaWxlNjQoZk91dEZp
ZCwgZmlsZVBvc24sIFNFRUtfU0VUKSA8IDApIGJyZWFrOw0KICAgIGFkZFdvcmQoc2l6ZSk7DQog
ICAgaWYgKFNlZWtGaWxlNjQoZk91dEZpZCwgMCwgU0VFS19FTkQpIDwgMCkgYnJlYWs7IC8vIGdv
IGJhY2sgdG8gd2hlcmUgd2Ugd2VyZQ0KDQogICAgcmV0dXJuOw0KICB9IHdoaWxlICgwKTsNCg0K
ICAvLyBPbmUgb2YgdGhlIFNlZWtGaWxlNjQoKXMgZmFpbGVkLCBwcm9iYWJsZSBiZWNhdXNlIHdl
J3JlIG5vdCBhIHNlZWthYmxlIGZpbGUNCiAgZW52aXIoKSA8PCAiUXVpY2tUaW1lRmlsZVNpbms6
OnNldFdvcmQoKTogU2Vla0ZpbGU2NCBmYWlsZWQgKGVyciAiDQoJICA8PCBlbnZpcigpLmdldEVy
cm5vKCkgPDwgIilcbiI7DQp9DQoNCnZvaWQgUXVpY2tUaW1lRmlsZVNpbms6OnNldFdvcmQ2NChp
bnQ2NF90IGZpbGVQb3NuLCB1X2ludDY0X3Qgc2l6ZSkgew0KICBkbyB7DQogICAgaWYgKFNlZWtG
aWxlNjQoZk91dEZpZCwgZmlsZVBvc24sIFNFRUtfU0VUKSA8IDApIGJyZWFrOw0KICAgIGFkZFdv
cmQ2NChzaXplKTsNCiAgICBpZiAoU2Vla0ZpbGU2NChmT3V0RmlkLCAwLCBTRUVLX0VORCkgPCAw
KSBicmVhazsgLy8gZ28gYmFjayB0byB3aGVyZSB3ZSB3ZXJlDQoNCiAgICByZXR1cm47DQogIH0g
d2hpbGUgKDApOw0KDQogIC8vIE9uZSBvZiB0aGUgU2Vla0ZpbGU2NCgpcyBmYWlsZWQsIHByb2Jh
YmxlIGJlY2F1c2Ugd2UncmUgbm90IGEgc2Vla2FibGUgZmlsZQ0KICBlbnZpcigpIDw8ICJRdWlj
a1RpbWVGaWxlU2luazo6c2V0V29yZDY0KCk6IFNlZWtGaWxlNjQgZmFpbGVkIChlcnIgIg0KCSAg
PDwgZW52aXIoKS5nZXRFcnJubygpIDw8ICIpXG4iOw0KfQ0KDQovLyBNZXRob2RzIGZvciB3cml0
aW5nIHBhcnRpY3VsYXIgYXRvbXMuICBOb3RlIHRoZSBmb2xsb3dpbmcgbWFjcm9zOg0KDQojZGVm
aW5lIGFkZEF0b20obmFtZSkgXA0KICAgIHVuc2lnbmVkIFF1aWNrVGltZUZpbGVTaW5rOjphZGRB
dG9tXyMjbmFtZSgpIHsgXA0KICAgIGludDY0X3QgaW5pdEZpbGVQb3NuID0gVGVsbEZpbGU2NChm
T3V0RmlkKTsgXA0KICAgIHVuc2lnbmVkIHNpemUgPSBhZGRBdG9tSGVhZGVyKCIiICNuYW1lICIi
KQ0KDQojZGVmaW5lIGFkZEF0b21FbmQgXA0KICBzZXRXb3JkKGluaXRGaWxlUG9zbiwgc2l6ZSk7
IFwNCiAgcmV0dXJuIHNpemU7IFwNCn0NCg0KYWRkQXRvbShmdHlwKTsNCiAgc2l6ZSArPSBhZGQ0
Qnl0ZVN0cmluZygibXA0MiIpOw0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAwMCk7DQogIHNp
emUgKz0gYWRkNEJ5dGVTdHJpbmcoIm1wNDIiKTsNCiAgc2l6ZSArPSBhZGQ0Qnl0ZVN0cmluZygi
aXNvbSIpOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShtb292KTsNCiAgc2l6ZSArPSBhZGRBdG9t
X212aGQoKTsNCg0KICBpZiAoZkdlbmVyYXRlTVA0Rm9ybWF0KSB7DQogICAgc2l6ZSArPSBhZGRB
dG9tX2lvZHMoKTsNCiAgfQ0KDQogIC8vIEFkZCBhICd0cmFrJyBhdG9tIGZvciBlYWNoIHN1YnNl
c3Npb246DQogIC8vIChGb3Igc29tZSB1bmtub3duIHJlYXNvbiwgUXVpY2tUaW1lIFBsYXllciAo
NS4wIGF0IGxlYXN0KQ0KICAvLyAgZG9lc24ndCBkaXNwbGF5IHRoZSBtb3ZpZSBjb3JyZWN0bHkg
dW5sZXNzIHRoZSBhdWRpbyB0cmFjaw0KICAvLyAgKGlmIHByZXNlbnQpIGFwcGVhcnMgYmVmb3Jl
IHRoZSB2aWRlbyB0cmFjay4gIFNvIGVuc3VyZSB0aGlzIGhlcmUuKQ0KICBNZWRpYVN1YnNlc3Np
b25JdGVyYXRvciBpdGVyKGZJbnB1dFNlc3Npb24pOw0KICBNZWRpYVN1YnNlc3Npb24qIHN1YnNl
c3Npb247DQogIHdoaWxlICgoc3Vic2Vzc2lvbiA9IGl0ZXIubmV4dCgpKSAhPSBOVUxMKSB7DQog
ICAgZkN1cnJlbnRJT1N0YXRlID0gKFN1YnNlc3Npb25JT1N0YXRlKikoc3Vic2Vzc2lvbi0+bWlz
Y1B0cik7DQogICAgaWYgKGZDdXJyZW50SU9TdGF0ZSA9PSBOVUxMKSBjb250aW51ZTsNCiAgICBp
ZiAoc3RyY21wKHN1YnNlc3Npb24tPm1lZGl1bU5hbWUoKSwgImF1ZGlvIikgIT0gMCkgY29udGlu
dWU7DQoNCiAgICBzaXplICs9IGFkZEF0b21fdHJhaygpOw0KDQogICAgaWYgKGZDdXJyZW50SU9T
dGF0ZS0+aGFzSGludFRyYWNrKCkpIHsNCiAgICAgIC8vIFRoaXMgdHJhY2sgaGFzIGEgaGludCB0
cmFjazsgb3V0cHV0IGl0IGFsc286DQogICAgICBmQ3VycmVudElPU3RhdGUgPSBmQ3VycmVudElP
U3RhdGUtPmZIaW50VHJhY2tGb3JVczsNCiAgICAgIHNpemUgKz0gYWRkQXRvbV90cmFrKCk7DQog
ICAgfQ0KICB9DQogIGl0ZXIucmVzZXQoKTsNCiAgd2hpbGUgKChzdWJzZXNzaW9uID0gaXRlci5u
ZXh0KCkpICE9IE5VTEwpIHsNCiAgICBmQ3VycmVudElPU3RhdGUgPSAoU3Vic2Vzc2lvbklPU3Rh
dGUqKShzdWJzZXNzaW9uLT5taXNjUHRyKTsNCiAgICBpZiAoZkN1cnJlbnRJT1N0YXRlID09IE5V
TEwpIGNvbnRpbnVlOw0KICAgIGlmIChzdHJjbXAoc3Vic2Vzc2lvbi0+bWVkaXVtTmFtZSgpLCAi
YXVkaW8iKSA9PSAwKSBjb250aW51ZTsNCg0KICAgIHNpemUgKz0gYWRkQXRvbV90cmFrKCk7DQoN
CiAgICBpZiAoZkN1cnJlbnRJT1N0YXRlLT5oYXNIaW50VHJhY2soKSkgew0KICAgICAgLy8gVGhp
cyB0cmFjayBoYXMgYSBoaW50IHRyYWNrOyBvdXRwdXQgaXQgYWxzbzoNCiAgICAgIGZDdXJyZW50
SU9TdGF0ZSA9IGZDdXJyZW50SU9TdGF0ZS0+ZkhpbnRUcmFja0ZvclVzOw0KICAgICAgc2l6ZSAr
PSBhZGRBdG9tX3RyYWsoKTsNCiAgICB9DQogIH0NCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20obXZo
ZCk7DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gVmVyc2lvbiArIEZsYWdzDQog
IHNpemUgKz0gYWRkV29yZChmQXBwbGVDcmVhdGlvblRpbWUpOyAvLyBDcmVhdGlvbiB0aW1lDQog
IHNpemUgKz0gYWRkV29yZChmQXBwbGVDcmVhdGlvblRpbWUpOyAvLyBNb2RpZmljYXRpb24gdGlt
ZQ0KDQogIC8vIEZvciB0aGUgIlRpbWUgc2NhbGUiIGZpZWxkLCB1c2UgdGhlIGxhcmdlc3QgUlRQ
IHRpbWVzdGFtcCBmcmVxdWVuY3kNCiAgLy8gdGhhdCB3ZSBzYXcgaW4gYW55IG9mIHRoZSBzdWJz
ZXNzaW9ucy4NCiAgc2l6ZSArPSBhZGRXb3JkKG1vdmllVGltZVNjYWxlKCkpOyAvLyBUaW1lIHNj
YWxlDQoNCiAgdW5zaWduZWQgY29uc3QgZHVyYXRpb24gPSBmTWF4VHJhY2tEdXJhdGlvbk07DQog
IGZNVkhEX2R1cmF0aW9uUG9zbiA9IFRlbGxGaWxlNjQoZk91dEZpZCk7DQogIHNpemUgKz0gYWRk
V29yZChkdXJhdGlvbik7IC8vIER1cmF0aW9uDQoNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMTAw
MDApOyAvLyBQcmVmZXJyZWQgcmF0ZQ0KICBzaXplICs9IGFkZFdvcmQoMHgwMTAwMDAwMCk7IC8v
IFByZWZlcnJlZCB2b2x1bWUgKyBSZXNlcnZlZFswXQ0KICBzaXplICs9IGFkZFplcm9Xb3Jkcygy
KTsgLy8gUmVzZXJ2ZWRbMS0yXQ0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAxMDAwMCk7IC8vIG1h
dHJpeCB0b3AgbGVmdCBjb3JuZXINCiAgc2l6ZSArPSBhZGRaZXJvV29yZHMoMyk7IC8vIG1hdHJp
eA0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAxMDAwMCk7IC8vIG1hdHJpeCBjZW50ZXINCiAgc2l6
ZSArPSBhZGRaZXJvV29yZHMoMyk7IC8vIG1hdHJpeA0KICBzaXplICs9IGFkZFdvcmQoMHg0MDAw
MDAwMCk7IC8vIG1hdHJpeCBib3R0b20gcmlnaHQgY29ybmVyDQogIHNpemUgKz0gYWRkWmVyb1dv
cmRzKDYpOyAvLyB2YXJpb3VzIHRpbWUgZmllbGRzDQogIHNpemUgKz0gYWRkV29yZChTdWJzZXNz
aW9uSU9TdGF0ZTo6ZkN1cnJlbnRUcmFja051bWJlcisxKTsvLyBOZXh0IHRyYWNrIElEDQphZGRB
dG9tRW5kOw0KDQphZGRBdG9tKGlvZHMpOw0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAwMCk7
IC8vIFZlcnNpb24gKyBGbGFncw0KICBzaXplICs9IGFkZFdvcmQoMHgxMDgwODA4MCk7DQogIHNp
emUgKz0gYWRkV29yZCgweDA3MDA0RkZGKTsNCiAgc2l6ZSArPSBhZGRXb3JkKDB4RkYwRkZGRkYp
Ow0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbSh0cmFrKTsNCiAgc2l6ZSArPSBhZGRBdG9tX3RraGQo
KTsNCg0KICAvLyBJZiB3ZSdyZSBzeW5jaHJvbml6aW5nIHRoZSBtZWRpYSBzdHJlYW1zIChvciBh
cmUgYSBoaW50IHRyYWNrKSwNCiAgLy8gYWRkIGFuIGVkaXQgbGlzdCB0aGF0IGhlbHBzIGRvIHRo
aXM6DQogIGlmIChmQ3VycmVudElPU3RhdGUtPmZIZWFkQ2h1bmsgIT0gTlVMTA0KICAgICAgJiYg
KGZTeW5jU3RyZWFtcyB8fCBmQ3VycmVudElPU3RhdGUtPmlzSGludFRyYWNrKCkpKSB7DQogICAg
c2l6ZSArPSBhZGRBdG9tX2VkdHMoKTsNCiAgfQ0KDQogIC8vIElmIHdlJ3JlIGdlbmVyYXRpbmcg
YSBoaW50IHRyYWNrLCBhZGQgYSAndHJlZicgYXRvbToNCiAgaWYgKGZDdXJyZW50SU9TdGF0ZS0+
aXNIaW50VHJhY2soKSkgc2l6ZSArPSBhZGRBdG9tX3RyZWYoKTsNCg0KICBzaXplICs9IGFkZEF0
b21fbWRpYSgpOw0KDQogIC8vIElmIHdlJ3JlIGdlbmVyYXRpbmcgYSBoaW50IHRyYWNrLCBhZGQg
YSAndWR0YScgYXRvbToNCiAgaWYgKGZDdXJyZW50SU9TdGF0ZS0+aXNIaW50VHJhY2soKSkgc2l6
ZSArPSBhZGRBdG9tX3VkdGEoKTsNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20odGtoZCk7DQogIGlm
IChmQ3VycmVudElPU3RhdGUtPmZRVEVuYWJsZVRyYWNrKSB7DQogICAgc2l6ZSArPSBhZGRXb3Jk
KDB4MDAwMDAwMEYpOyAvLyBWZXJzaW9uICsgIEZsYWdzDQogIH0gZWxzZSB7DQogICAgLy8gRGlz
YWJsZSB0aGlzIHRyYWNrIGluIHRoZSBtb3ZpZToNCiAgICBzaXplICs9IGFkZFdvcmQoMHgwMDAw
MDAwMCk7IC8vIFZlcnNpb24gKyAgRmxhZ3MNCiAgfQ0KICBzaXplICs9IGFkZFdvcmQoZkFwcGxl
Q3JlYXRpb25UaW1lKTsgLy8gQ3JlYXRpb24gdGltZQ0KICBzaXplICs9IGFkZFdvcmQoZkFwcGxl
Q3JlYXRpb25UaW1lKTsgLy8gTW9kaWZpY2F0aW9uIHRpbWUNCiAgc2l6ZSArPSBhZGRXb3JkKGZD
dXJyZW50SU9TdGF0ZS0+ZlRyYWNrSUQpOyAvLyBUcmFjayBJRA0KICBzaXplICs9IGFkZFdvcmQo
MHgwMDAwMDAwMCk7IC8vIFJlc2VydmVkDQoNCiAgdW5zaWduZWQgY29uc3QgZHVyYXRpb24gPSBm
Q3VycmVudElPU3RhdGUtPmZRVER1cmF0aW9uTTsgLy8gbW92aWUgdW5pdHMNCiAgZkN1cnJlbnRJ
T1N0YXRlLT5mVEtIRF9kdXJhdGlvblBvc24gPSBUZWxsRmlsZTY0KGZPdXRGaWQpOw0KICBzaXpl
ICs9IGFkZFdvcmQoZHVyYXRpb24pOyAvLyBEdXJhdGlvbg0KICBzaXplICs9IGFkZFplcm9Xb3Jk
cygzKTsgLy8gUmVzZXJ2ZWQrTGF5ZXIrQWx0ZXJuYXRlIGdycA0KICBzaXplICs9IGFkZFdvcmQo
MHgwMTAwMDAwMCk7IC8vIFZvbHVtZSArIFJlc2VydmVkDQogIHNpemUgKz0gYWRkV29yZCgweDAw
MDEwMDAwKTsgLy8gbWF0cml4IHRvcCBsZWZ0IGNvcm5lcg0KICBzaXplICs9IGFkZFplcm9Xb3Jk
cygzKTsgLy8gbWF0cml4DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDEwMDAwKTsgLy8gbWF0cml4
IGNlbnRlcg0KICBzaXplICs9IGFkZFplcm9Xb3JkcygzKTsgLy8gbWF0cml4DQogIHNpemUgKz0g
YWRkV29yZCgweDQwMDAwMDAwKTsgLy8gbWF0cml4IGJvdHRvbSByaWdodCBjb3JuZXINCiAgaWYg
KHN0cmNtcChmQ3VycmVudElPU3RhdGUtPmZPdXJTdWJzZXNzaW9uLm1lZGl1bU5hbWUoKSwgInZp
ZGVvIikgPT0gMCkgew0KICAgIHNpemUgKz0gYWRkV29yZChmTW92aWVXaWR0aDw8MTYpOyAvLyBU
cmFjayB3aWR0aA0KICAgIHNpemUgKz0gYWRkV29yZChmTW92aWVIZWlnaHQ8PDE2KTsgLy8gVHJh
Y2sgaGVpZ2h0DQogIH0gZWxzZSB7DQogICAgc2l6ZSArPSBhZGRaZXJvV29yZHMoMik7IC8vIG5v
dCB2aWRlbzogbGVhdmUgd2lkdGggYW5kIGhlaWdodCBmaWVsZHMgemVybw0KICB9DQphZGRBdG9t
RW5kOw0KDQphZGRBdG9tKGVkdHMpOw0KICBzaXplICs9IGFkZEF0b21fZWxzdCgpOw0KYWRkQXRv
bUVuZDsNCg0KI2RlZmluZSBhZGRFZGl0MShkdXJhdGlvbix0cmFja1Bvc2l0aW9uKSBkbyB7IFwN
CiAgICAgIHVuc2lnbmVkIHRyYWNrRHVyYXRpb24gXA0KICAgICAgICA9ICh1bnNpZ25lZCkgKCgy
KihkdXJhdGlvbikqbW92aWVUaW1lU2NhbGUoKSsxKS8yKTsgXA0KICAgICAgICAgICAgLyogaW4g
bW92aWUgdGltZSB1bml0cyAqLyBcDQogICAgICBzaXplICs9IGFkZFdvcmQodHJhY2tEdXJhdGlv
bik7IC8qIFRyYWNrIGR1cmF0aW9uICovIFwNCiAgICAgIHRvdGFsRHVyYXRpb25PZkVkaXRzICs9
IHRyYWNrRHVyYXRpb247IFwNCiAgICAgIHNpemUgKz0gYWRkV29yZCh0cmFja1Bvc2l0aW9uKTsg
LyogTWVkaWEgdGltZSAqLyBcDQogICAgICBzaXplICs9IGFkZFdvcmQoMHgwMDAxMDAwMCk7IC8q
IE1lZGlhIHJhdGUgKDF4KSAqLyBcDQogICAgICArK251bUVkaXRzOyBcDQp9IHdoaWxlICgwKQ0K
I2RlZmluZSBhZGRFZGl0KGR1cmF0aW9uKSBhZGRFZGl0MSgoZHVyYXRpb24pLGVkaXRUcmFja1Bv
c2l0aW9uKQ0KI2RlZmluZSBhZGRFbXB0eUVkaXQoZHVyYXRpb24pIGFkZEVkaXQxKChkdXJhdGlv
biksKH4wKSkNCg0KYWRkQXRvbShlbHN0KTsNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDAp
OyAvLyBWZXJzaW9uICsgRmxhZ3MNCg0KICAvLyBBZGQgYSBkdW1teSAiTnVtYmVyIG9mIGVudHJp
ZXMiIGZpZWxkDQogIC8vIChhbmQgcmVtZW1iZXIgaXRzIHBvc2l0aW9uKS4gIFdlJ2xsIGZpbGwg
dGhpcyBmaWVsZCBpbiBsYXRlcjoNCiAgaW50NjRfdCBudW1FbnRyaWVzUG9zaXRpb24gPSBUZWxs
RmlsZTY0KGZPdXRGaWQpOw0KICBzaXplICs9IGFkZFdvcmQoMCk7IC8vIGR1bW15IGZvciAiTnVt
YmVyIG9mIGVudHJpZXMiDQogIHVuc2lnbmVkIG51bUVkaXRzID0gMDsNCiAgdW5zaWduZWQgdG90
YWxEdXJhdGlvbk9mRWRpdHMgPSAwOyAvLyBpbiBtb3ZpZSB0aW1lIHVuaXRzDQoNCiAgLy8gUnVu
IHRocm91Z2ggb3VyIGNodW5rcywgbG9va2luZyBhdCB0aGVpciBwcmVzZW50YXRpb24gdGltZXMu
DQogIC8vIEZyb20gdGhlc2UsIGZpZ3VyZSBvdXQgdGhlIGVkaXRzIHRoYXQgbmVlZCB0byBiZSBt
YWRlIHRvIGtlZXANCiAgLy8gdGhlIHRyYWNrIG1lZGlhIGRhdGEgaW4gc3luYyB3aXRoIHRoZSBw
cmVzZW50YXRpb24gdGltZXMuDQoNCiAgZG91YmxlIGNvbnN0IHN5bmNUaHJlc2hvbGQgPSAwLjE7
IC8vIDEwMCBtcw0KICAgIC8vIGRvbid0IGFsbG93IHRoZSB0cmFjayB0byBnZXQgb3V0IG9mIHN5
bmMgYnkgbW9yZSB0aGFuIHRoaXMNCg0KICBzdHJ1Y3QgdGltZXZhbCBlZGl0U3RhcnRUaW1lID0g
ZkZpcnN0RGF0YVRpbWU7DQogIHVuc2lnbmVkIGVkaXRUcmFja1Bvc2l0aW9uID0gMDsNCiAgdW5z
aWduZWQgY3VycmVudFRyYWNrUG9zaXRpb24gPSAwOw0KICBkb3VibGUgdHJhY2tEdXJhdGlvbk9m
RWRpdCA9IDAuMDsNCiAgdW5zaWduZWQgY2h1bmtEdXJhdGlvbiA9IDA7DQoNCiAgQ2h1bmtEZXNj
cmlwdG9yKiBjaHVuayA9IGZDdXJyZW50SU9TdGF0ZS0+ZkhlYWRDaHVuazsNCiAgd2hpbGUgKGNo
dW5rICE9IE5VTEwpIHsNCiAgICBzdHJ1Y3QgdGltZXZhbCBjb25zdCYgY2h1bmtTdGFydFRpbWUg
PSBjaHVuay0+ZlByZXNlbnRhdGlvblRpbWU7DQogICAgZG91YmxlIG1vdmllRHVyYXRpb25PZkVk
aXQNCiAgICAgID0gKGNodW5rU3RhcnRUaW1lLnR2X3NlYyAtIGVkaXRTdGFydFRpbWUudHZfc2Vj
KQ0KICAgICAgKyAoY2h1bmtTdGFydFRpbWUudHZfdXNlYyAtIGVkaXRTdGFydFRpbWUudHZfdXNl
YykvMTAwMDAwMC4wOw0KICAgIHRyYWNrRHVyYXRpb25PZkVkaXQgPSAoY3VycmVudFRyYWNrUG9z
aXRpb24tZWRpdFRyYWNrUG9zaXRpb24pDQogICAgICAvIChkb3VibGUpKGZDdXJyZW50SU9TdGF0
ZS0+ZlFUVGltZVNjYWxlKTsNCg0KICAgIGRvdWJsZSBvdXRPZlN5bmMgPSBtb3ZpZUR1cmF0aW9u
T2ZFZGl0IC0gdHJhY2tEdXJhdGlvbk9mRWRpdDsNCg0KICAgIGlmIChvdXRPZlN5bmMgPiBzeW5j
VGhyZXNob2xkKSB7DQogICAgICAvLyBUaGUgdHJhY2sncyBkYXRhIGlzIHRvbyBzaG9ydCwgc28g
ZW5kIHRoaXMgZWRpdCwgYWRkIGEgbmV3DQogICAgICAvLyAnZW1wdHknIGVkaXQgYWZ0ZXIgaXQs
IGFuZCBzdGFydCBhIG5ldyBlZGl0DQogICAgICAvLyAoYXQgdGhlIGN1cnJlbnQgdHJhY2sgcG9z
bi4pOg0KICAgICAgaWYgKHRyYWNrRHVyYXRpb25PZkVkaXQgPiAwLjApIGFkZEVkaXQodHJhY2tE
dXJhdGlvbk9mRWRpdCk7DQogICAgICBhZGRFbXB0eUVkaXQob3V0T2ZTeW5jKTsNCg0KICAgICAg
ZWRpdFN0YXJ0VGltZSA9IGNodW5rU3RhcnRUaW1lOw0KICAgICAgZWRpdFRyYWNrUG9zaXRpb24g
PSBjdXJyZW50VHJhY2tQb3NpdGlvbjsNCiAgICB9IGVsc2UgaWYgKG91dE9mU3luYyA8IC1zeW5j
VGhyZXNob2xkKSB7DQogICAgICAvLyBUaGUgdHJhY2sncyBkYXRhIGlzIHRvbyBsb25nLCBzbyBl
bmQgdGhpcyBlZGl0LCBhbmQgc3RhcnQNCiAgICAgIC8vIGEgbmV3IGVkaXQgKHBvaW50aW5nIGF0
IHRoZSBjdXJyZW50IHRyYWNrIHBvc24uKToNCiAgICAgIGlmIChtb3ZpZUR1cmF0aW9uT2ZFZGl0
ID4gMC4wKSBhZGRFZGl0KG1vdmllRHVyYXRpb25PZkVkaXQpOw0KDQogICAgICBlZGl0U3RhcnRU
aW1lID0gY2h1bmtTdGFydFRpbWU7DQogICAgICBlZGl0VHJhY2tQb3NpdGlvbiA9IGN1cnJlbnRU
cmFja1Bvc2l0aW9uOw0KICAgIH0NCg0KICAgIC8vIE5vdGUgdGhlIGR1cmF0aW9uIG9mIHRoaXMg
Y2h1bms6DQogICAgdW5zaWduZWQgbnVtQ2hhbm5lbHMgPSBmQ3VycmVudElPU3RhdGUtPmZPdXJT
dWJzZXNzaW9uLm51bUNoYW5uZWxzKCk7DQogICAgY2h1bmtEdXJhdGlvbiA9IGNodW5rLT5mTnVt
RnJhbWVzKmNodW5rLT5mRnJhbWVEdXJhdGlvbi9udW1DaGFubmVsczsNCiAgICBjdXJyZW50VHJh
Y2tQb3NpdGlvbiArPSBjaHVua0R1cmF0aW9uOw0KDQogICAgY2h1bmsgPSBjaHVuay0+Zk5leHRD
aHVuazsNCiAgfQ0KDQogIC8vIFdyaXRlIG91dCB0aGUgZmluYWwgZWRpdA0KICB0cmFja0R1cmF0
aW9uT2ZFZGl0DQogICAgICArPSAoZG91YmxlKWNodW5rRHVyYXRpb24vZkN1cnJlbnRJT1N0YXRl
LT5mUVRUaW1lU2NhbGU7DQogIGlmICh0cmFja0R1cmF0aW9uT2ZFZGl0ID4gMC4wKSBhZGRFZGl0
KHRyYWNrRHVyYXRpb25PZkVkaXQpOw0KDQogIC8vIE5vdyBnbyBiYWNrIGFuZCBmaWxsIGluIHRo
ZSAiTnVtYmVyIG9mIGVudHJpZXMiIGZpZWxkOg0KICBzZXRXb3JkKG51bUVudHJpZXNQb3NpdGlv
biwgbnVtRWRpdHMpOw0KDQogIC8vIEFsc28sIGlmIHRoZSBzdW0gb2YgYWxsIG9mIHRoZSBlZGl0
IGR1cmF0aW9ucyBleGNlZWRzIHRoZQ0KICAvLyB0cmFjayBkdXJhdGlvbiB0aGF0IHdlIGFscmVh
ZHkgY29tcHV0ZWQgKGZyb20gc2FtcGxlIGR1cmF0aW9ucyksDQogIC8vIHRoZW4gcmVzZXQgdGhl
IHRyYWNrIGR1cmF0aW9uIHRvIHRoaXMgbmV3IHZhbHVlOg0KICBpZiAodG90YWxEdXJhdGlvbk9m
RWRpdHMgPiBmQ3VycmVudElPU3RhdGUtPmZRVER1cmF0aW9uTSkgew0KICAgIGZDdXJyZW50SU9T
dGF0ZS0+ZlFURHVyYXRpb25NID0gdG90YWxEdXJhdGlvbk9mRWRpdHM7DQogICAgc2V0V29yZChm
Q3VycmVudElPU3RhdGUtPmZUS0hEX2R1cmF0aW9uUG9zbiwgdG90YWxEdXJhdGlvbk9mRWRpdHMp
Ow0KDQogICAgLy8gQWxzbywgY2hlY2sgd2hldGhlciB0aGUgb3ZlcmFsbCBtb3ZpZSBkdXJhdGlv
biBuZWVkcyB0byBjaGFuZ2U6DQogICAgaWYgKHRvdGFsRHVyYXRpb25PZkVkaXRzID4gZk1heFRy
YWNrRHVyYXRpb25NKSB7DQogICAgICBmTWF4VHJhY2tEdXJhdGlvbk0gPSB0b3RhbER1cmF0aW9u
T2ZFZGl0czsNCiAgICAgIHNldFdvcmQoZk1WSERfZHVyYXRpb25Qb3NuLCB0b3RhbER1cmF0aW9u
T2ZFZGl0cyk7DQogICAgfQ0KDQogICAgLy8gQWxzbywgY29udmVydCB0byB0cmFjayB0aW1lIHNj
YWxlOg0KICAgIGRvdWJsZSBzY2FsZUZhY3Rvcg0KICAgICAgPSBmQ3VycmVudElPU3RhdGUtPmZR
VFRpbWVTY2FsZS8oZG91YmxlKW1vdmllVGltZVNjYWxlKCk7DQogICAgZkN1cnJlbnRJT1N0YXRl
LT5mUVREdXJhdGlvblQNCiAgICAgID0gKHVuc2lnbmVkKSh0b3RhbER1cmF0aW9uT2ZFZGl0cypz
Y2FsZUZhY3Rvcik7DQogIH0NCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20odHJlZik7DQogIHNpemUg
Kz0gYWRkQXRvbV9oaW50KCk7DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKGhpbnQpOw0KICBTdWJz
ZXNzaW9uSU9TdGF0ZSogaGludGVkVHJhY2sgPSBmQ3VycmVudElPU3RhdGUtPmZUcmFja0hpbnRl
ZEJ5VXM7DQogICAgLy8gQXNzZXJ0OiBoaW50ZWRUcmFjayAhPSBOVUxMDQogIHNpemUgKz0gYWRk
V29yZChoaW50ZWRUcmFjay0+ZlRyYWNrSUQpOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShtZGlh
KTsNCiAgc2l6ZSArPSBhZGRBdG9tX21kaGQoKTsNCiAgc2l6ZSArPSBhZGRBdG9tX2hkbHIoKTsN
CiAgc2l6ZSArPSBhZGRBdG9tX21pbmYoKTsNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20obWRoZCk7
DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gVmVyc2lvbiArIEZsYWdzDQogIHNp
emUgKz0gYWRkV29yZChmQXBwbGVDcmVhdGlvblRpbWUpOyAvLyBDcmVhdGlvbiB0aW1lDQogIHNp
emUgKz0gYWRkV29yZChmQXBwbGVDcmVhdGlvblRpbWUpOyAvLyBNb2RpZmljYXRpb24gdGltZQ0K
DQogIHVuc2lnbmVkIGNvbnN0IHRpbWVTY2FsZSA9IGZDdXJyZW50SU9TdGF0ZS0+ZlFUVGltZVNj
YWxlOw0KICBzaXplICs9IGFkZFdvcmQodGltZVNjYWxlKTsgLy8gVGltZSBzY2FsZQ0KDQogIHVu
c2lnbmVkIGNvbnN0IGR1cmF0aW9uID0gZkN1cnJlbnRJT1N0YXRlLT5mUVREdXJhdGlvblQ7IC8v
IHRyYWNrIHVuaXRzDQogIHNpemUgKz0gYWRkV29yZChkdXJhdGlvbik7IC8vIER1cmF0aW9uDQoN
CiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyBMYW5ndWFnZStRdWFsaXR5DQphZGRB
dG9tRW5kOw0KDQphZGRBdG9tKGhkbHIpOw0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAwMCk7
IC8vIFZlcnNpb24gKyBGbGFncw0KICBzaXplICs9IGFkZDRCeXRlU3RyaW5nKCJtaGxyIik7IC8v
IENvbXBvbmVudCB0eXBlDQogIHNpemUgKz0gYWRkV29yZChmQ3VycmVudElPU3RhdGUtPmZRVGNv
bXBvbmVudFN1YnR5cGUpOw0KICAgIC8vIENvbXBvbmVudCBzdWJ0eXBlDQogIHNpemUgKz0gYWRk
NEJ5dGVTdHJpbmcoImFwcGwiKTsgLy8gQ29tcG9uZW50IG1hbnVmYWN0dXJlcg0KICBzaXplICs9
IGFkZFdvcmQoMHgwMDAwMDAwMCk7IC8vIENvbXBvbmVudCBmbGFncw0KICBzaXplICs9IGFkZFdv
cmQoMHgwMDAwMDAwMCk7IC8vIENvbXBvbmVudCBmbGFncyBtYXNrDQogIHNpemUgKz0gYWRkQXJi
aXRyYXJ5U3RyaW5nKGZDdXJyZW50SU9TdGF0ZS0+ZlFUY29tcG9uZW50TmFtZSk7DQogICAgLy8g
Q29tcG9uZW50IG5hbWUNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20obWluZik7DQogIFN1YnNlc3Np
b25JT1N0YXRlOjphdG9tQ3JlYXRpb25GdW5jIG1lZGlhSW5mb3JtYXRpb25BdG9tQ3JlYXRvcg0K
ICAgID0gZkN1cnJlbnRJT1N0YXRlLT5mUVRNZWRpYUluZm9ybWF0aW9uQXRvbUNyZWF0b3I7DQog
IHNpemUgKz0gKHRoaXMtPiptZWRpYUluZm9ybWF0aW9uQXRvbUNyZWF0b3IpKCk7DQogIHNpemUg
Kz0gYWRkQXRvbV9oZGxyMigpOw0KICBzaXplICs9IGFkZEF0b21fZGluZigpOw0KICBzaXplICs9
IGFkZEF0b21fc3RibCgpOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShzbWhkKTsNCiAgc2l6ZSAr
PSBhZGRaZXJvV29yZHMoMik7IC8vIFZlcnNpb24rRmxhZ3MrQmFsYW5jZStSZXNlcnZlZA0KYWRk
QXRvbUVuZDsNCg0KYWRkQXRvbSh2bWhkKTsNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDEp
OyAvLyBWZXJzaW9uICsgRmxhZ3MNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDA0MDgwMDApOyAvLyBH
cmFwaGljcyBtb2RlICsgT3Bjb2xvcltyZWRdDQogIHNpemUgKz0gYWRkV29yZCgweDgwMDA4MDAw
KTsgLy8gT3Bjb2xvcltncmVlbn0gKyBPcGNvbG9yW2JsdWVdDQphZGRBdG9tRW5kOw0KDQphZGRB
dG9tKGdtaGQpOw0KICBzaXplICs9IGFkZEF0b21fZ21pbigpOw0KYWRkQXRvbUVuZDsNCg0KYWRk
QXRvbShnbWluKTsNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyBWZXJzaW9uICsg
RmxhZ3MNCiAgLy8gVGhlIGZvbGxvd2luZyBmaWVsZHMgcHJvYmFibHkgYXJlbid0IHVzZWQgZm9y
IGhpbnQgdHJhY2tzLCBzbyBqdXN0DQogIC8vIHVzZSB2YWx1ZXMgdGhhdCBJJ3ZlIHNlZW4gaW4g
b3RoZXIgZmlsZXM6DQogIHNpemUgKz0gYWRkV29yZCgweDAwNDA4MDAwKTsgLy8gR3JhcGhpY3Mg
bW9kZSArIE9wY29sb3IgKDFzdCAyIGJ5dGVzKQ0KICBzaXplICs9IGFkZFdvcmQoMHg4MDAwODAw
MCk7IC8vIE9wY29sb3IgKGxhc3QgNCBieXRlcykNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAw
MDApOyAvLyBCYWxhbmNlICsgUmVzZXJ2ZWQNCmFkZEF0b21FbmQ7DQoNCnVuc2lnbmVkIFF1aWNr
VGltZUZpbGVTaW5rOjphZGRBdG9tX2hkbHIyKCkgew0KICBpbnQ2NF90IGluaXRGaWxlUG9zbiA9
IFRlbGxGaWxlNjQoZk91dEZpZCk7DQogIHVuc2lnbmVkIHNpemUgPSBhZGRBdG9tSGVhZGVyKCJo
ZGxyIik7DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gVmVyc2lvbiArIEZsYWdz
DQogIHNpemUgKz0gYWRkNEJ5dGVTdHJpbmcoImRobHIiKTsgLy8gQ29tcG9uZW50IHR5cGUNCiAg
c2l6ZSArPSBhZGQ0Qnl0ZVN0cmluZygiYWxpcyIpOyAvLyBDb21wb25lbnQgc3VidHlwZQ0KICBz
aXplICs9IGFkZDRCeXRlU3RyaW5nKCJhcHBsIik7IC8vIENvbXBvbmVudCBtYW51ZmFjdHVyZXIN
CiAgc2l6ZSArPSBhZGRaZXJvV29yZHMoMik7IC8vIENvbXBvbmVudCBmbGFncytDb21wb25lbnQg
ZmxhZ3MgbWFzaw0KICBzaXplICs9IGFkZEFyYml0cmFyeVN0cmluZygiQXBwbGUgQWxpYXMgRGF0
YSBIYW5kbGVyIik7IC8vIENvbXBvbmVudCBuYW1lDQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKGRp
bmYpOw0KICBzaXplICs9IGFkZEF0b21fZHJlZigpOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShk
cmVmKTsNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyBWZXJzaW9uICsgRmxhZ3MN
CiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDEpOyAvLyBOdW1iZXIgb2YgZW50cmllcw0KICBz
aXplICs9IGFkZEF0b21fYWxpcygpOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShhbGlzKTsNCiAg
c2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDEpOyAvLyBWZXJzaW9uICsgRmxhZ3MNCmFkZEF0b21F
bmQ7DQoNCmFkZEF0b20oc3RibCk7DQogIHNpemUgKz0gYWRkQXRvbV9zdHNkKCk7DQogIHNpemUg
Kz0gYWRkQXRvbV9zdHRzKCk7DQogIGlmIChmQ3VycmVudElPU3RhdGUtPmZRVGNvbXBvbmVudFN1
YnR5cGUgPT0gZm91ckNoYXIoJ3YnLCdpJywnZCcsJ2UnKSkgew0KICAgIHNpemUgKz0gYWRkQXRv
bV9zdHNzKCk7IC8vIG9ubHkgZm9yIHZpZGVvIHN0cmVhbXMNCiAgfQ0KICBzaXplICs9IGFkZEF0
b21fc3RzYygpOw0KICBzaXplICs9IGFkZEF0b21fc3RzeigpOw0KICBzaXplICs9IGFkZEF0b21f
Y282NCgpOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShzdHNkKTsNCiAgc2l6ZSArPSBhZGRXb3Jk
KDB4MDAwMDAwMDApOyAvLyBWZXJzaW9uK0ZsYWdzDQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAw
MDAxKTsgLy8gTnVtYmVyIG9mIGVudHJpZXMNCiAgU3Vic2Vzc2lvbklPU3RhdGU6OmF0b21DcmVh
dGlvbkZ1bmMgbWVkaWFEYXRhQXRvbUNyZWF0b3INCiAgICA9IGZDdXJyZW50SU9TdGF0ZS0+ZlFU
TWVkaWFEYXRhQXRvbUNyZWF0b3I7DQogIHNpemUgKz0gKHRoaXMtPiptZWRpYURhdGFBdG9tQ3Jl
YXRvcikoKTsNCmFkZEF0b21FbmQ7DQoNCnVuc2lnbmVkIFF1aWNrVGltZUZpbGVTaW5rOjphZGRB
dG9tX2dlbmVyaWNNZWRpYSgpIHsNCiAgaW50NjRfdCBpbml0RmlsZVBvc24gPSBUZWxsRmlsZTY0
KGZPdXRGaWQpOw0KDQogIC8vIE91ciBzb3VyY2UgaXMgYXNzdW1lZCB0byBiZSBhICJRdWlja1Rp
bWVHZW5lcmljUlRQU291cmNlIg0KICAvLyBVc2UgaXRzICJzZEF0b20iIHN0YXRlIGZvciBvdXIg
Y29udGVudHM6DQogIFF1aWNrVGltZUdlbmVyaWNSVFBTb3VyY2UqIHJ0cFNvdXJjZSA9IChRdWlj
a1RpbWVHZW5lcmljUlRQU291cmNlKikNCiAgICBmQ3VycmVudElPU3RhdGUtPmZPdXJTdWJzZXNz
aW9uLnJ0cFNvdXJjZSgpOw0KICB1bnNpZ25lZCBzaXplID0gMDsNCiAgaWYgKHJ0cFNvdXJjZSAh
PSBOVUxMKSB7DQogICAgUXVpY2tUaW1lR2VuZXJpY1JUUFNvdXJjZTo6UVRTdGF0ZSYgcXRTdGF0
ZSA9IHJ0cFNvdXJjZS0+cXRTdGF0ZTsNCiAgICBjaGFyIGNvbnN0KiBmcm9tID0gcXRTdGF0ZS5z
ZEF0b207DQogICAgc2l6ZSA9IHF0U3RhdGUuc2RBdG9tU2l6ZTsNCiAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSBhZGRCeXRlKGZyb21baV0pOw0KICB9DQphZGRBdG9tRW5k
Ow0KDQp1bnNpZ25lZCBRdWlja1RpbWVGaWxlU2luazo6YWRkQXRvbV9zb3VuZE1lZGlhR2VuZXJh
bCgpIHsNCiAgaW50NjRfdCBpbml0RmlsZVBvc24gPSBUZWxsRmlsZTY0KGZPdXRGaWQpOw0KICB1
bnNpZ25lZCBzaXplID0gYWRkQXRvbUhlYWRlcihmQ3VycmVudElPU3RhdGUtPmZRVEF1ZGlvRGF0
YVR5cGUpOw0KDQovLyBHZW5lcmFsIHNhbXBsZSBkZXNjcmlwdGlvbiBmaWVsZHM6DQogIHNpemUg
Kz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gUmVzZXJ2ZWQNCiAgc2l6ZSArPSBhZGRXb3JkKDB4
MDAwMDAwMDEpOyAvLyBSZXNlcnZlZCtEYXRhIHJlZmVyZW5jZSBpbmRleA0KLy8gU291bmQgc2Ft
cGxlIGRlc2NyaXB0aW9uIGZpZWxkczoNCiAgdW5zaWduZWQgc2hvcnQgY29uc3QgdmVyc2lvbiA9
IGZDdXJyZW50SU9TdGF0ZS0+ZlFUU291bmRTYW1wbGVWZXJzaW9uOw0KICBzaXplICs9IGFkZFdv
cmQodmVyc2lvbjw8MTYpOyAvLyBWZXJzaW9uK1JldmlzaW9uIGxldmVsDQogIHNpemUgKz0gYWRk
V29yZCgweDAwMDAwMDAwKTsgLy8gVmVuZG9yDQogIHVuc2lnbmVkIHNob3J0IG51bUNoYW5uZWxz
DQogICAgPSAodW5zaWduZWQgc2hvcnQpKGZDdXJyZW50SU9TdGF0ZS0+Zk91clN1YnNlc3Npb24u
bnVtQ2hhbm5lbHMoKSk7DQogIHNpemUgKz0gYWRkSGFsZldvcmQobnVtQ2hhbm5lbHMpOyAvLyBO
dW1iZXIgb2YgY2hhbm5lbHMNCiAgc2l6ZSArPSBhZGRIYWxmV29yZCgweDAwMTApOyAvLyBTYW1w
bGUgc2l6ZQ0KICAvLyAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyBDb21wcmVzc2lv
biBJRCtQYWNrZXQgc2l6ZQ0KICBzaXplICs9IGFkZFdvcmQoMHhmZmZlMDAwMCk7IC8vIENvbXBy
ZXNzaW9uIElEK1BhY2tldCBzaXplICMjIyMjDQoNCiAgdW5zaWduZWQgY29uc3Qgc2FtcGxlUmF0
ZUZpeGVkUG9pbnQgPSBmQ3VycmVudElPU3RhdGUtPmZRVFRpbWVTY2FsZSA8PCAxNjsNCiAgc2l6
ZSArPSBhZGRXb3JkKHNhbXBsZVJhdGVGaXhlZFBvaW50KTsgLy8gU2FtcGxlIHJhdGUNCmFkZEF0
b21FbmQ7DQoNCnVuc2lnbmVkIFF1aWNrVGltZUZpbGVTaW5rOjphZGRBdG9tX1FjbHAoKSB7DQog
IC8vIFRoZSBiZWdpbm5pbmcgb2YgdGhpcyBhdG9tIGxvb2tzIGp1c3QgbGlrZSBhIGdlbmVyYWwg
U291bmQgTWVkaWEgYXRvbSwNCiAgLy8gZXhjZXB0IHdpdGggYSB2ZXJzaW9uIGZpZWxkIG9mIDE6
DQogIGludDY0X3QgaW5pdEZpbGVQb3NuID0gVGVsbEZpbGU2NChmT3V0RmlkKTsNCiAgZkN1cnJl
bnRJT1N0YXRlLT5mUVRBdWRpb0RhdGFUeXBlID0gIlFjbHAiOw0KICBmQ3VycmVudElPU3RhdGUt
PmZRVFNvdW5kU2FtcGxlVmVyc2lvbiA9IDE7DQogIHVuc2lnbmVkIHNpemUgPSBhZGRBdG9tX3Nv
dW5kTWVkaWFHZW5lcmFsKCk7DQoNCiAgLy8gTmV4dCwgYWRkIHRoZSBmb3VyIGZpZWxkcyB0aGF0
IGFyZSBwYXJ0aWN1bGFyIHRvIHZlcnNpb24gMToNCiAgLy8gKExhdGVyLCBwYXJhbWV0ZXJpemUg
dGhlc2UgIyMjIyMpDQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMGEwKTsgLy8gc2FtcGxlcyBw
ZXIgcGFja2V0DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gPz8/DQogIHNpemUg
Kz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gPz8/DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAw
MDAyKTsgLy8gYnl0ZXMgcGVyIHNhbXBsZSAodW5jb21wcmVzc2VkKQ0KDQogIC8vIE90aGVyIHNw
ZWNpYWwgZmllbGRzIGFyZSBpbiBhICd3YXZlJyBhdG9tIHRoYXQgZm9sbG93czoNCiAgc2l6ZSAr
PSBhZGRBdG9tX3dhdmUoKTsNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20od2F2ZSk7DQogIHNpemUg
Kz0gYWRkQXRvbV9mcm1hKCk7DQogIGlmIChzdHJjbXAoZkN1cnJlbnRJT1N0YXRlLT5mUVRBdWRp
b0RhdGFUeXBlLCAiUWNscCIpID09IDApIHsNCiAgICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAx
NCk7IC8vID8/Pw0KICAgIHNpemUgKz0gYWRkNEJ5dGVTdHJpbmcoIlFjbHAiKTsgLy8gPz8/DQog
ICAgaWYgKGZDdXJyZW50SU9TdGF0ZS0+ZlFUQnl0ZXNQZXJGcmFtZSA9PSAzNSkgew0KICAgICAg
c2l6ZSArPSBhZGRBdG9tX0ZjbHAoKTsgLy8gZnVsbC1yYXRlIFFDRUxQDQogICAgfSBlbHNlIHsN
CiAgICAgIHNpemUgKz0gYWRkQXRvbV9IY2xwKCk7IC8vIGhhbGYtcmF0ZSBRQ0VMUA0KICAgIH0g
Ly8gd2hhdCBhYm91dCBvdGhlciBRQ0VMUCAncmF0ZXMnPz8/ICMjIyMjDQogICAgc2l6ZSArPSBh
ZGRXb3JkKDB4MDAwMDAwMDgpOyAvLyA/Pz8NCiAgICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAw
MCk7IC8vID8/Pw0KICAgIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gPz8/DQogICAg
c2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDgpOyAvLyA/Pz8NCiAgfSBlbHNlIGlmIChzdHJjbXAo
ZkN1cnJlbnRJT1N0YXRlLT5mUVRBdWRpb0RhdGFUeXBlLCAibXA0YSIpID09IDApIHsNCiAgICBz
aXplICs9IGFkZFdvcmQoMHgwMDAwMDAwYyk7IC8vID8/Pw0KICAgIHNpemUgKz0gYWRkNEJ5dGVT
dHJpbmcoIm1wNGEiKTsgLy8gPz8/DQogICAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAv
LyA/Pz8NCiAgICBzaXplICs9IGFkZEF0b21fZXNkcygpOyAvLyBFU0Rlc2NyaXB0b3INCiAgICBz
aXplICs9IGFkZFdvcmQoMHgwMDAwMDAwOCk7IC8vID8/Pw0KICAgIHNpemUgKz0gYWRkV29yZCgw
eDAwMDAwMDAwKTsgLy8gPz8/DQogIH0NCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20oZnJtYSk7DQog
IHNpemUgKz0gYWRkNEJ5dGVTdHJpbmcoZkN1cnJlbnRJT1N0YXRlLT5mUVRBdWRpb0RhdGFUeXBl
KTsgLy8gPz8/DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKEZjbHApOw0KIHNpemUgKz0gYWRkV29y
ZCgweDAwMDAwMDAwKTsgLy8gPz8/DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKEhjbHApOw0KIHNp
emUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gPz8/DQphZGRBdG9tRW5kOw0KDQp1bnNpZ25l
ZCBRdWlja1RpbWVGaWxlU2luazo6YWRkQXRvbV9tcDRhKCkgew0KICB1bnNpZ25lZCBzaXplID0g
MDsNCiAgLy8gVGhlIGJlZ2lubmluZyBvZiB0aGlzIGF0b20gbG9va3MganVzdCBsaWtlIGEgZ2Vu
ZXJhbCBTb3VuZCBNZWRpYSBhdG9tLA0KICAvLyBleGNlcHQgd2l0aCBhIHZlcnNpb24gZmllbGQg
b2YgMToNCiAgaW50NjRfdCBpbml0RmlsZVBvc24gPSBUZWxsRmlsZTY0KGZPdXRGaWQpOw0KICBm
Q3VycmVudElPU3RhdGUtPmZRVEF1ZGlvRGF0YVR5cGUgPSAibXA0YSI7DQoNCiAgaWYgKGZHZW5l
cmF0ZU1QNEZvcm1hdCkgew0KICAgIGZDdXJyZW50SU9TdGF0ZS0+ZlFUU291bmRTYW1wbGVWZXJz
aW9uID0gMDsNCiAgICBzaXplID0gYWRkQXRvbV9zb3VuZE1lZGlhR2VuZXJhbCgpOw0KICAgIHNp
emUgKz0gYWRkQXRvbV9lc2RzKCk7DQogIH0gZWxzZSB7DQogICAgZkN1cnJlbnRJT1N0YXRlLT5m
UVRTb3VuZFNhbXBsZVZlcnNpb24gPSAxOw0KICAgIHNpemUgPSBhZGRBdG9tX3NvdW5kTWVkaWFH
ZW5lcmFsKCk7DQoNCiAgICAvLyBOZXh0LCBhZGQgdGhlIGZvdXIgZmllbGRzIHRoYXQgYXJlIHBh
cnRpY3VsYXIgdG8gdmVyc2lvbiAxOg0KICAgIC8vIChMYXRlciwgcGFyYW1ldGVyaXplIHRoZXNl
ICMjIyMjKQ0KICAgIHNpemUgKz0gYWRkV29yZChmQ3VycmVudElPU3RhdGUtPmZRVFRpbWVVbml0
c1BlclNhbXBsZSk7DQogICAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDEpOyAvLyA/Pz8NCiAg
ICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAwMSk7IC8vID8/Pw0KICAgIHNpemUgKz0gYWRkV29y
ZCgweDAwMDAwMDAyKTsgLy8gYnl0ZXMgcGVyIHNhbXBsZSAodW5jb21wcmVzc2VkKQ0KDQogICAg
Ly8gT3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIGluIGEgJ3dhdmUnIGF0b20gdGhhdCBmb2xsb3dz
Og0KICAgIHNpemUgKz0gYWRkQXRvbV93YXZlKCk7DQogIH0NCmFkZEF0b21FbmQ7DQoNCmFkZEF0
b20oZXNkcyk7DQogIC8vIyMjIyMNCiAgTWVkaWFTdWJzZXNzaW9uJiBzdWJzZXNzaW9uID0gZkN1
cnJlbnRJT1N0YXRlLT5mT3VyU3Vic2Vzc2lvbjsNCiAgaWYgKHN0cmNtcChzdWJzZXNzaW9uLm1l
ZGl1bU5hbWUoKSwgImF1ZGlvIikgPT0gMCkgew0KICAgIC8vIE1QRUctNCBhdWRpbw0KICAgIHNp
emUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gPz8/DQogICAgc2l6ZSArPSBhZGRXb3JkKDB4
MDM4MDgwODApOyAvLyA/Pz8NCiAgICBzaXplICs9IGFkZFdvcmQoMHgyYTAwMDAwMCk7IC8vID8/
Pw0KICAgIHNpemUgKz0gYWRkV29yZCgweDA0ODA4MDgwKTsgLy8gPz8/DQogICAgc2l6ZSArPSBh
ZGRXb3JkKDB4MWM0MDE1MDApOyAvLyA/Pz8NCiAgICBzaXplICs9IGFkZFdvcmQoMHgxODAwMDAw
MCk7IC8vID8/Pw0KICAgIHNpemUgKz0gYWRkV29yZCgweDZkNjAwMDAwKTsgLy8gPz8/DQogICAg
c2l6ZSArPSBhZGRXb3JkKDB4NmQ2MDA1ODApOyAvLyA/Pz8NCiAgICBzaXplICs9IGFkZEJ5dGUo
MHg4MCk7IHNpemUgKz0gYWRkQnl0ZSgweDgwKTsgLy8gPz8/DQogIH0gZWxzZSBpZiAoc3RyY21w
KHN1YnNlc3Npb24ubWVkaXVtTmFtZSgpLCAidmlkZW8iKSA9PSAwKSB7DQogICAgLy8gTVBFRy00
IHZpZGVvDQogICAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyA/Pz8NCiAgICBzaXpl
ICs9IGFkZFdvcmQoMHgwMzMzMDAwMCk7IC8vID8/Pw0KICAgIHNpemUgKz0gYWRkV29yZCgweDFm
MDQyYjIwKTsgLy8gPz8/DQogICAgc2l6ZSArPSBhZGRXb3JkKDB4MTEwNGZkNDYpOyAvLyA/Pz8N
CiAgICBzaXplICs9IGFkZFdvcmQoMHgwMDBkNGUxMCk7IC8vID8/Pw0KICAgIHNpemUgKz0gYWRk
V29yZCgweDAwMGQ0ZTEwKTsgLy8gPz8/DQogICAgc2l6ZSArPSBhZGRCeXRlKDB4MDUpOyAvLyA/
Pz8NCiAgfQ0KDQogIC8vIEFkZCB0aGUgc291cmNlJ3MgJ2NvbmZpZycgaW5mb3JtYXRpb246DQog
IHVuc2lnbmVkIGNvbmZpZ1NpemU7DQogIHVuc2lnbmVkIGNoYXIqIGNvbmZpZw0KICAgID0gcGFy
c2VHZW5lcmFsQ29uZmlnU3RyKHN1YnNlc3Npb24uZm10cF9jb25maWcoKSwgY29uZmlnU2l6ZSk7
DQogIHNpemUgKz0gYWRkQnl0ZShjb25maWdTaXplKTsNCiAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvbmZpZ1NpemU7ICsraSkgew0KICAgIHNpemUgKz0gYWRkQnl0ZShjb25maWdbaV0pOw0K
ICB9DQogIGRlbGV0ZVtdIGNvbmZpZzsNCg0KICBpZiAoc3RyY21wKHN1YnNlc3Npb24ubWVkaXVt
TmFtZSgpLCAiYXVkaW8iKSA9PSAwKSB7DQogICAgLy8gTVBFRy00IGF1ZGlvDQogICAgc2l6ZSAr
PSBhZGRXb3JkKDB4MDY4MDgwODApOyAvLyA/Pz8NCiAgICBzaXplICs9IGFkZEhhbGZXb3JkKDB4
MDEwMik7IC8vID8/Pw0KICB9IGVsc2Ugew0KICAgIC8vIE1QRUctNCB2aWRlbw0KICAgIHNpemUg
Kz0gYWRkSGFsZldvcmQoMHgwNjAxKTsgLy8gPz8/DQogICAgc2l6ZSArPSBhZGRCeXRlKDB4MDIp
OyAvLyA/Pz8NCiAgfQ0KICAvLyMjIyMjDQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKHNyY3EpOw0K
ICAvLyMjIyMjDQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDQwKTsgLy8gPz8/DQogIC8vIyMj
IyMNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20oaDI2Myk7DQovLyBHZW5lcmFsIHNhbXBsZSBkZXNj
cmlwdGlvbiBmaWVsZHM6DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gUmVzZXJ2
ZWQNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDEpOyAvLyBSZXNlcnZlZCtEYXRhIHJlZmVy
ZW5jZSBpbmRleA0KLy8gVmlkZW8gc2FtcGxlIGRlc2NyaXB0aW9uIGZpZWxkczoNCiAgc2l6ZSAr
PSBhZGRXb3JkKDB4MDAwMjAwMDEpOyAvLyBWZXJzaW9uK1JldmlzaW9uIGxldmVsDQogIHNpemUg
Kz0gYWRkNEJ5dGVTdHJpbmcoImFwcGwiKTsgLy8gVmVuZG9yDQogIHNpemUgKz0gYWRkV29yZCgw
eDAwMDAwMDAwKTsgLy8gVGVtcG9yYWwgcXVhbGl0eQ0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAw
MDJmYyk7IC8vIFNwYXRpYWwgcXVhbGl0eQ0KICB1bnNpZ25lZCBjb25zdCB3aWR0aEFuZEhlaWdo
dCA9IChmTW92aWVXaWR0aDw8MTYpfGZNb3ZpZUhlaWdodDsNCiAgc2l6ZSArPSBhZGRXb3JkKHdp
ZHRoQW5kSGVpZ2h0KTsgLy8gV2lkdGgraGVpZ2h0DQogIHNpemUgKz0gYWRkV29yZCgweDAwNDgw
MDAwKTsgLy8gSG9yaXpvbnRhbCByZXNvbHV0aW9uDQogIHNpemUgKz0gYWRkV29yZCgweDAwNDgw
MDAwKTsgLy8gVmVydGljYWwgcmVzb2x1dGlvbg0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAw
MCk7IC8vIERhdGEgc2l6ZQ0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAxMDU0OCk7IC8vIEZyYW1l
IGNvdW50K0NvbXByZXNzb3IgbmFtZSAoc3RhcnQpDQogICAgLy8gIkguMjYzIg0KICBzaXplICs9
IGFkZFdvcmQoMHgyZTMyMzYzMyk7IC8vIENvbXByZXNzb3IgbmFtZSAoY29udGludWVkKQ0KICBz
aXplICs9IGFkZFplcm9Xb3Jkcyg2KTsgLy8gQ29tcHJlc3NvciBuYW1lIChjb250aW51ZWQgLSB6
ZXJvKQ0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAxOCk7IC8vIENvbXByZXNzb3IgbmFtZSAo
ZmluYWwpK0RlcHRoDQogIHNpemUgKz0gYWRkSGFsZldvcmQoMHhmZmZmKTsgLy8gQ29sb3IgdGFi
bGUgaWQNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20oYXZjMSk7DQovLyBHZW5lcmFsIHNhbXBsZSBk
ZXNjcmlwdGlvbiBmaWVsZHM6DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gUmVz
ZXJ2ZWQNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDEpOyAvLyBSZXNlcnZlZCtEYXRhICAg
ICAgIHJlZmVyZW5jZSBpbmRleA0KLy8gVmlkZW8gc2FtcGxlICAgICAgIGRlc2NyaXB0aW9uICAg
ICBmaWVsZHM6DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gVmVyc2lvbitSZXZp
c2lvbiBsZXZlbA0KICBzaXplICs9IGFkZDRCeXRlU3RyaW5nKCJhcHBsIik7IC8vIFZlbmRvcg0K
ICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAwMCk7IC8vIFRlbXBvcmFsIHF1YWxpdHkNCiAgc2l6
ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyBTcGF0aWFsIHF1YWxpdHkNCiAgdW5zaWduZWQg
Y29uc3Qgd2lkdGhBbmRIZWlnaHQgICAgICAgPSAoZk1vdmllV2lkdGg8PDE2KXxmTW92aWVIZWln
aHQ7DQogIHNpemUgKz0gYWRkV29yZCh3aWR0aEFuZEhlaWdodCk7IC8vIFdpZHRoK2hlaWdodA0K
ICBzaXplICs9IGFkZFdvcmQoMHgwMDQ4MDAwMCk7IC8vIEhvcml6b250YWwgcmVzb2x1dGlvbg0K
ICBzaXplICs9IGFkZFdvcmQoMHgwMDQ4MDAwMCk7IC8vIFZlcnRpY2FsIHJlc29sdXRpb24NCiAg
c2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyBEYXRhIHNpemUNCiAgc2l6ZSArPSBhZGRX
b3JkKDB4MDAwMTA1NDgpOyAvLyBGcmFtZSAgICAgICBjb3VudCtDb21wcmVzc29yIG5hbWUgKHN0
YXJ0KQ0KICAgIC8vICJILjI2NCINCiAgc2l6ZSArPSBhZGRXb3JkKDB4MmUzMjM2MzQpOyAvLyBD
b21wcmVzc29yIG5hbWUgKGNvbnRpbnVlZCkNCiAgc2l6ZSArPSBhZGRaZXJvV29yZHMoNik7IC8v
IENvbXByZXNzb3IgbmFtZSAoY29udGludWVkIC0gemVybykNCiAgc2l6ZSArPSBhZGRXb3JkKDB4
MDAwMDAwMTgpOyAvLyBDb21wcmVzc29yIG5hbWUgKGZpbmFsKStEZXB0aA0KICBzaXplICs9IGFk
ZEhhbGZXb3JkKDB4ZmZmZik7IC8vIENvbG9yICAgICAgIHRhYmxlIGlkDQogIHNpemUgKz0gYWRk
QXRvbV9hdmNDKCk7DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKGF2Y0MpOw0KLy8gQmVnaW4gYnkg
QmFzZS02NCBkZWNvZGluZyB0aGUgInNwcm9wIiBwYXJhbWV0ZXIgc2V0cyBzdHJpbmdzOg0KICBj
aGFyKiBwc2V0cyA9IHN0ckR1cChmQ3VycmVudElPU3RhdGUtPmZPdXJTdWJzZXNzaW9uLmZtdHBf
c3Byb3BwYXJhbWV0ZXJzZXRzKCkpOw0KICBpZiAocHNldHMgPT0gTlVMTCkgcmV0dXJuIDA7DQoN
CiAgc2l6ZV90IGNvbW1hX3BvcyA9IHN0cmNzcG4ocHNldHMsICIsIik7DQogIHBzZXRzW2NvbW1h
X3Bvc10gPSAnXDAnOw0KICBjaGFyIGNvbnN0KiBzcHNfYjY0ID0gcHNldHM7DQogIGNoYXIgY29u
c3QqIHBwc19iNjQgPSAmcHNldHNbY29tbWFfcG9zKzFdOw0KICB1bnNpZ25lZCBzcHNfY291bnQ7
DQogIHVuc2lnbmVkIGNoYXIqIHNwc19kYXRhID0gYmFzZTY0RGVjb2RlKHNwc19iNjQsIHNwc19j
b3VudCwgZmFsc2UpOw0KICB1bnNpZ25lZCBwcHNfY291bnQ7DQogIHVuc2lnbmVkIGNoYXIqIHBw
c19kYXRhID0gYmFzZTY0RGVjb2RlKHBwc19iNjQsIHBwc19jb3VudCwgZmFsc2UpOw0KDQovLyBU
aGVuIGFkZCB0aGUgZGVjb2RlZCBkYXRhOg0KICBzaXplICs9IGFkZEJ5dGUoMHgwMSk7IC8vIGNv
bmZpZ3VyYXRpb24gdmVyc2lvbg0KICBzaXplICs9IGFkZEJ5dGUoc3BzX2RhdGFbMV0pOyAvLyBw
cm9maWxlDQogIHNpemUgKz0gYWRkQnl0ZShzcHNfZGF0YVsyXSk7IC8vIHByb2ZpbGUgY29tcGF0
DQogIHNpemUgKz0gYWRkQnl0ZShzcHNfZGF0YVszXSk7IC8vIGxldmVsDQogIHNpemUgKz0gYWRk
Qnl0ZSgweGZmKTsgLyogMGIxMTExMTEwMCB8IGxlbmd0aHNpemUgPSAweDExICovDQogIHNpemUg
Kz0gYWRkQnl0ZSgweGUwIHwgKHNwc19jb3VudCA+IDAgPyAxIDogMCkgKTsNCiAgaWYgKHNwc19j
b3VudCA+IDApIHsNCiAgICBzaXplICs9IGFkZEhhbGZXb3JkKHNwc19jb3VudCk7DQogICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNwc19jb3VudDsgaSsrKSB7DQogICAgICBzaXplICs9IGFk
ZEJ5dGUoc3BzX2RhdGFbaV0pOw0KICAgIH0NCiAgfQ0KICBzaXplICs9IGFkZEJ5dGUocHBzX2Nv
dW50ID4gMCA/IDEgOiAwKTsNCiAgaWYgKHBwc19jb3VudCA+IDApIHsNCiAgICBzaXplICs9IGFk
ZEhhbGZXb3JkKHBwc19jb3VudCk7DQogICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBwc19j
b3VudDsgaSsrKSB7DQogICAgICBzaXplICs9IGFkZEJ5dGUocHBzX2RhdGFbaV0pOw0KICAgIH0N
CiAgfQ0KDQovLyBGaW5hbGx5LCBkZWxldGUgdGhlIGRhdGEgdGhhdCB3ZSBhbGxvY2F0ZWQ6DQog
IGRlbGV0ZVtdIHBwc19kYXRhOyBkZWxldGVbXSBzcHNfZGF0YTsNCiAgZGVsZXRlW10gcHNldHM7
DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKG1wNHYpOw0KLy8gR2VuZXJhbCBzYW1wbGUgZGVzY3Jp
cHRpb24gZmllbGRzOg0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAwMCk7IC8vIFJlc2VydmVk
DQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAxKTsgLy8gUmVzZXJ2ZWQrRGF0YSByZWZlcmVu
Y2UgaW5kZXgNCi8vIFZpZGVvIHNhbXBsZSBkZXNjcmlwdGlvbiBmaWVsZHM6DQogIHNpemUgKz0g
YWRkV29yZCgweDAwMDIwMDAxKTsgLy8gVmVyc2lvbitSZXZpc2lvbiBsZXZlbA0KICBzaXplICs9
IGFkZDRCeXRlU3RyaW5nKCJhcHBsIik7IC8vIFZlbmRvcg0KICBzaXplICs9IGFkZFdvcmQoMHgw
MDAwMDIwMCk7IC8vIFRlbXBvcmFsIHF1YWxpdHkNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDA0
MDApOyAvLyBTcGF0aWFsIHF1YWxpdHkNCiAgdW5zaWduZWQgY29uc3Qgd2lkdGhBbmRIZWlnaHQg
PSAoZk1vdmllV2lkdGg8PDE2KXxmTW92aWVIZWlnaHQ7DQogIHNpemUgKz0gYWRkV29yZCh3aWR0
aEFuZEhlaWdodCk7IC8vIFdpZHRoK2hlaWdodA0KICBzaXplICs9IGFkZFdvcmQoMHgwMDQ4MDAw
MCk7IC8vIEhvcml6b250YWwgcmVzb2x1dGlvbg0KICBzaXplICs9IGFkZFdvcmQoMHgwMDQ4MDAw
MCk7IC8vIFZlcnRpY2FsIHJlc29sdXRpb24NCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDAp
OyAvLyBEYXRhIHNpemUNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMTBjNGQpOyAvLyBGcmFtZSBj
b3VudCtDb21wcmVzc29yIG5hbWUgKHN0YXJ0KQ0KICAgIC8vICJNUEVHLTQgVmlkZW8iDQogIHNp
emUgKz0gYWRkV29yZCgweDUwNDU0NzJkKTsgLy8gQ29tcHJlc3NvciBuYW1lIChjb250aW51ZWQp
DQogIHNpemUgKz0gYWRkV29yZCgweDM0MjA1NjY5KTsgLy8gQ29tcHJlc3NvciBuYW1lIChjb250
aW51ZWQpDQogIHNpemUgKz0gYWRkV29yZCgweDY0NjU2ZjAwKTsgLy8gQ29tcHJlc3NvciBuYW1l
IChjb250aW51ZWQpDQogIHNpemUgKz0gYWRkWmVyb1dvcmRzKDQpOyAvLyBDb21wcmVzc29yIG5h
bWUgKGNvbnRpbnVlZCAtIHplcm8pDQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDE4KTsgLy8g
Q29tcHJlc3NvciBuYW1lIChmaW5hbCkrRGVwdGgNCiAgc2l6ZSArPSBhZGRIYWxmV29yZCgweGZm
ZmYpOyAvLyBDb2xvciB0YWJsZSBpZA0KICBzaXplICs9IGFkZEF0b21fZXNkcygpOyAvLyBFU0Rl
c2NyaXB0b3INCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyA/Pz8NCmFkZEF0b21F
bmQ7DQoNCnVuc2lnbmVkIFF1aWNrVGltZUZpbGVTaW5rOjphZGRBdG9tX3J0cCgpIHsNCiAgaW50
NjRfdCBpbml0RmlsZVBvc24gPSBUZWxsRmlsZTY0KGZPdXRGaWQpOw0KICB1bnNpZ25lZCBzaXpl
ID0gYWRkQXRvbUhlYWRlcigicnRwICIpOw0KDQogIHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAw
KTsgLy8gUmVzZXJ2ZWQgKDFzdCA0IGJ5dGVzKQ0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAw
MSk7IC8vIFJlc2VydmVkIChsYXN0IDIgYnl0ZXMpICsgRGF0YSByZWYgaW5kZXgNCiAgc2l6ZSAr
PSBhZGRXb3JkKDB4MDAwMTAwMDEpOyAvLyBIaW50IHRyYWNrIHZlcnNpb24gKyBMYXN0IGNvbXBh
dCBodHYNCiAgc2l6ZSArPSBhZGRXb3JkKDE0NTApOyAvLyBNYXggcGFja2V0IHNpemUNCg0KICBz
aXplICs9IGFkZEF0b21fdGltcygpOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbSh0aW1zKTsNCiAg
c2l6ZSArPSBhZGRXb3JkKGZDdXJyZW50SU9TdGF0ZS0+Zk91clN1YnNlc3Npb24ucnRwVGltZXN0
YW1wRnJlcXVlbmN5KCkpOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShzdHRzKTsgLy8gVGltZS10
by1TYW1wbGUNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAvLyBWZXJzaW9uK2ZsYWdz
DQoNCiAgLy8gRmlyc3QsIGFkZCBhIGR1bW15ICJOdW1iZXIgb2YgZW50cmllcyIgZmllbGQNCiAg
Ly8gKGFuZCByZW1lbWJlciBpdHMgcG9zaXRpb24pLiAgV2UnbGwgZmlsbCB0aGlzIGZpZWxkIGlu
IGxhdGVyOg0KICBpbnQ2NF90IG51bUVudHJpZXNQb3NpdGlvbiA9IFRlbGxGaWxlNjQoZk91dEZp
ZCk7DQogIHNpemUgKz0gYWRkV29yZCgwKTsgLy8gZHVtbXkgZm9yICJOdW1iZXIgb2YgZW50cmll
cyINCg0KICAvLyBUaGVuLCBydW4gdGhyb3VnaCB0aGUgY2h1bmsgZGVzY3JpcHRvcnMsIGFuZCBl
bnRlciB0aGUgZW50cmllcw0KICAvLyBpbiB0aGlzIChjb21wcmVzc2VkKSBUaW1lLXRvLVNhbXBs
ZSB0YWJsZToNCiAgdW5zaWduZWQgbnVtRW50cmllcyA9IDAsIG51bVNhbXBsZXNTb0ZhciA9IDA7
DQogIHVuc2lnbmVkIHByZXZTYW1wbGVEdXJhdGlvbiA9IDA7DQogIHVuc2lnbmVkIGNvbnN0IHNh
bXBsZXNQZXJGcmFtZSA9IGZDdXJyZW50SU9TdGF0ZS0+ZlFUU2FtcGxlc1BlckZyYW1lOw0KICBD
aHVua0Rlc2NyaXB0b3IqIGNodW5rID0gZkN1cnJlbnRJT1N0YXRlLT5mSGVhZENodW5rOw0KICB3
aGlsZSAoY2h1bmsgIT0gTlVMTCkgew0KICAgIHVuc2lnbmVkIGNvbnN0IHNhbXBsZUR1cmF0aW9u
ID0gY2h1bmstPmZGcmFtZUR1cmF0aW9uL3NhbXBsZXNQZXJGcmFtZTsNCiAgICBpZiAoc2FtcGxl
RHVyYXRpb24gIT0gcHJldlNhbXBsZUR1cmF0aW9uKSB7DQogICAgICAvLyBUaGlzIGNodW5rIHdp
bGwgc3RhcnQgYSBuZXcgdGFibGUgZW50cnksDQogICAgICAvLyBzbyB3cml0ZSBvdXQgdGhlIG9s
ZCBvbmUgKGlmIGFueSk6DQogICAgICBpZiAoY2h1bmsgIT0gZkN1cnJlbnRJT1N0YXRlLT5mSGVh
ZENodW5rKSB7DQoJKytudW1FbnRyaWVzOw0KCXNpemUgKz0gYWRkV29yZChudW1TYW1wbGVzU29G
YXIpOyAvLyBTYW1wbGUgY291bnQNCglzaXplICs9IGFkZFdvcmQocHJldlNhbXBsZUR1cmF0aW9u
KTsgLy8gU2FtcGxlIGR1cmF0aW9uDQoJbnVtU2FtcGxlc1NvRmFyID0gMDsNCiAgICAgIH0NCiAg
ICB9DQoNCiAgICB1bnNpZ25lZCBjb25zdCBudW1TYW1wbGVzID0gY2h1bmstPmZOdW1GcmFtZXMq
c2FtcGxlc1BlckZyYW1lOw0KICAgIG51bVNhbXBsZXNTb0ZhciArPSBudW1TYW1wbGVzOw0KICAg
IHByZXZTYW1wbGVEdXJhdGlvbiA9IHNhbXBsZUR1cmF0aW9uOw0KICAgIGNodW5rID0gY2h1bmst
PmZOZXh0Q2h1bms7DQogIH0NCg0KICAvLyBUaGVuLCB3cml0ZSBvdXQgdGhlIGxhc3QgZW50cnk6
DQogICsrbnVtRW50cmllczsNCiAgc2l6ZSArPSBhZGRXb3JkKG51bVNhbXBsZXNTb0Zhcik7IC8v
IFNhbXBsZSBjb3VudA0KICBzaXplICs9IGFkZFdvcmQocHJldlNhbXBsZUR1cmF0aW9uKTsgLy8g
U2FtcGxlIGR1cmF0aW9uDQoNCiAgLy8gTm93IGdvIGJhY2sgYW5kIGZpbGwgaW4gdGhlICJOdW1i
ZXIgb2YgZW50cmllcyIgZmllbGQ6DQogIHNldFdvcmQobnVtRW50cmllc1Bvc2l0aW9uLCBudW1F
bnRyaWVzKTsNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20oc3Rzcyk7IC8vIFN5bmMtU2FtcGxlDQog
IHNpemUgKz0gYWRkV29yZCgweDAwMDAwMDAwKTsgLy8gVmVyc2lvbitmbGFncw0KDQogIC8vIEZp
cnN0LCBhZGQgYSBkdW1teSAiTnVtYmVyIG9mIGVudHJpZXMiIGZpZWxkDQogIC8vIChhbmQgcmVt
ZW1iZXIgaXRzIHBvc2l0aW9uKS4gIFdlJ2xsIGZpbGwgdGhpcyBmaWVsZCBpbiBsYXRlcjoNCiAg
aW50NjRfdCBudW1FbnRyaWVzUG9zaXRpb24gPSBUZWxsRmlsZTY0KGZPdXRGaWQpOw0KICBzaXpl
ICs9IGFkZFdvcmQoMCk7IC8vIGR1bW15IGZvciAiTnVtYmVyIG9mIGVudHJpZXMiDQoNCiAgdW5z
aWduZWQgbnVtRW50cmllcyA9IDAsIG51bVNhbXBsZXNTb0ZhciA9IDA7DQogIGlmIChmQ3VycmVu
dElPU3RhdGUtPmZIZWFkU3luY0ZyYW1lICE9IE5VTEwpIHsNCiAgICBTeW5jRnJhbWUqIGN1cnJl
bnRTeW5jRnJhbWUgPSBmQ3VycmVudElPU3RhdGUtPmZIZWFkU3luY0ZyYW1lOw0KDQogICAgLy8g
Rmlyc3QsIGNvdW50IHRoZSBudW1iZXIgb2YgZnJhbWVzICh0byB1c2UgYXMgYSBzYW5pdHkgY2hl
Y2s7IHNlZSBiZWxvdyk6DQogICAgdW5zaWduZWQgdG90TnVtRnJhbWVzID0gMDsNCiAgICBmb3Ig
KENodW5rRGVzY3JpcHRvciogY2h1bmsgPSBmQ3VycmVudElPU3RhdGUtPmZIZWFkQ2h1bms7IGNo
dW5rICE9IE5VTEw7IGNodW5rID0gY2h1bmstPmZOZXh0Q2h1bmspIHRvdE51bUZyYW1lcyArPSBj
aHVuay0+Zk51bUZyYW1lczsNCg0KICAgIHdoaWxlIChjdXJyZW50U3luY0ZyYW1lICE9IE5VTEwp
IHsNCiAgICAgIGlmIChjdXJyZW50U3luY0ZyYW1lLT5zZkZyYW1lTnVtID49IHRvdE51bUZyYW1l
cykgYnJlYWs7IC8vIHNhbml0eSBjaGVjaw0KICAgICAgDQogICAgICArK251bUVudHJpZXM7DQog
ICAgICBzaXplICs9IGFkZFdvcmQoY3VycmVudFN5bmNGcmFtZS0+c2ZGcmFtZU51bSk7DQogICAg
ICBjdXJyZW50U3luY0ZyYW1lID0gY3VycmVudFN5bmNGcmFtZS0+bmV4dFN5bmNGcmFtZTsNCiAg
ICB9DQogIH0gZWxzZSB7DQogICAgLy8gRmlyc3QsIHJ1biB0aHJvdWdoIHRoZSBjaHVuayBkZXNj
cmlwdG9ycywgY291bnRpbmcgdXAgdGhlIHRvdGFsIG51bWJlciBvZiBzYW1wbGVzOg0KICAgIHVu
c2lnbmVkIGNvbnN0IHNhbXBsZXNQZXJGcmFtZSA9IGZDdXJyZW50SU9TdGF0ZS0+ZlFUU2FtcGxl
c1BlckZyYW1lOw0KICAgIENodW5rRGVzY3JpcHRvciogY2h1bmsgPSBmQ3VycmVudElPU3RhdGUt
PmZIZWFkQ2h1bms7DQogICAgd2hpbGUgKGNodW5rICE9IE5VTEwpIHsNCiAgICAgIHVuc2lnbmVk
IGNvbnN0IG51bVNhbXBsZXMgPSBjaHVuay0+Zk51bUZyYW1lcypzYW1wbGVzUGVyRnJhbWU7DQog
ICAgICBudW1TYW1wbGVzU29GYXIgKz0gbnVtU2FtcGxlczsNCiAgICAgIGNodW5rID0gY2h1bmst
PmZOZXh0Q2h1bms7DQogICAgfQ0KICANCiAgICAvLyBUaGVuLCB3cml0ZSBvdXQgdGhlIHNhbXBs
ZSBudW1iZXJzIHRoYXQgd2UgZGVlbSBjb3JyZXNwb25kIHRvICdzeW5jIHNhbXBsZXMnOg0KICAg
IHVuc2lnbmVkIGk7DQogICAgZm9yIChpID0gMDsgaSA8IG51bVNhbXBsZXNTb0ZhcjsgaSArPSAx
Mikgew0KICAgICAgLy8gRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBjb25zdGFudCAiMTIiLCBz
ZWUgaHR0cDovL2xpc3RzLmxpdmU1NTUuY29tL3BpcGVybWFpbC9saXZlLWRldmVsLzIwMDktSnVs
eS8wMTA5NjkuaHRtbA0KICAgICAgLy8gKFBlcmhhcHMgd2Ugc2hvdWxkIHJlYWxseSB0cnkgdG8g
a2VlcCB0cmFjayBvZiB3aGljaCAnc2FtcGxlcycgKCdmcmFtZXMnIGZvciB2aWRlbykgcmVhbGx5
IGFyZSAna2V5IGZyYW1lcyc/KQ0KICAgICAgc2l6ZSArPSBhZGRXb3JkKGkrMSk7DQogICAgICAr
K251bUVudHJpZXM7DQogICAgfQ0KICANCiAgICAvLyBUaGVuLCB3cml0ZSBvdXQgdGhlIGxhc3Qg
ZW50cnkgKGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBkb25lIHNvKToNCiAgICBpZiAoaSAhPSAobnVt
U2FtcGxlc1NvRmFyIC0gMSkpIHsNCiAgICAgIHNpemUgKz0gYWRkV29yZChudW1TYW1wbGVzU29G
YXIpOw0KICAgICAgKytudW1FbnRyaWVzOw0KICAgIH0NCiAgfQ0KDQogIC8vIE5vdyBnbyBiYWNr
IGFuZCBmaWxsIGluIHRoZSAiTnVtYmVyIG9mIGVudHJpZXMiIGZpZWxkOg0KICBzZXRXb3JkKG51
bUVudHJpZXNQb3NpdGlvbiwgbnVtRW50cmllcyk7DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKHN0
c2MpOyAvLyBTYW1wbGUtdG8tQ2h1bmsNCiAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDApOyAv
LyBWZXJzaW9uK2ZsYWdzDQoNCiAgLy8gRmlyc3QsIGFkZCBhIGR1bW15ICJOdW1iZXIgb2YgZW50
cmllcyIgZmllbGQNCiAgLy8gKGFuZCByZW1lbWJlciBpdHMgcG9zaXRpb24pLiAgV2UnbGwgZmls
bCB0aGlzIGZpZWxkIGluIGxhdGVyOg0KICBpbnQ2NF90IG51bUVudHJpZXNQb3NpdGlvbiA9IFRl
bGxGaWxlNjQoZk91dEZpZCk7DQogIHNpemUgKz0gYWRkV29yZCgwKTsgLy8gZHVtbXkgZm9yICJO
dW1iZXIgb2YgZW50cmllcyINCg0KICAvLyBUaGVuLCBydW4gdGhyb3VnaCB0aGUgY2h1bmsgZGVz
Y3JpcHRvcnMsIGFuZCBlbnRlciB0aGUgZW50cmllcw0KICAvLyBpbiB0aGlzIChjb21wcmVzc2Vk
KSBTYW1wbGUtdG8tQ2h1bmsgdGFibGU6DQogIHVuc2lnbmVkIG51bUVudHJpZXMgPSAwLCBjaHVu
a051bWJlciA9IDA7DQogIHVuc2lnbmVkIHByZXZTYW1wbGVzUGVyQ2h1bmsgPSB+MDsNCiAgdW5z
aWduZWQgY29uc3Qgc2FtcGxlc1BlckZyYW1lID0gZkN1cnJlbnRJT1N0YXRlLT5mUVRTYW1wbGVz
UGVyRnJhbWU7DQogIENodW5rRGVzY3JpcHRvciogY2h1bmsgPSBmQ3VycmVudElPU3RhdGUtPmZI
ZWFkQ2h1bms7DQogIHdoaWxlIChjaHVuayAhPSBOVUxMKSB7DQogICAgKytjaHVua051bWJlcjsN
CiAgICB1bnNpZ25lZCBjb25zdCBzYW1wbGVzUGVyQ2h1bmsgPSBjaHVuay0+Zk51bUZyYW1lcypz
YW1wbGVzUGVyRnJhbWU7DQogICAgaWYgKHNhbXBsZXNQZXJDaHVuayAhPSBwcmV2U2FtcGxlc1Bl
ckNodW5rKSB7DQogICAgICAvLyBUaGlzIGNodW5rIHdpbGwgYmUgYSBuZXcgdGFibGUgZW50cnk6
DQogICAgICArK251bUVudHJpZXM7DQogICAgICBzaXplICs9IGFkZFdvcmQoY2h1bmtOdW1iZXIp
OyAvLyBDaHVuayBudW1iZXINCiAgICAgIHNpemUgKz0gYWRkV29yZChzYW1wbGVzUGVyQ2h1bmsp
OyAvLyBTYW1wbGVzIHBlciBjaHVuaw0KICAgICAgc2l6ZSArPSBhZGRXb3JkKDB4MDAwMDAwMDEp
OyAvLyBTYW1wbGUgZGVzY3JpcHRpb24gSUQNCg0KICAgICAgcHJldlNhbXBsZXNQZXJDaHVuayA9
IHNhbXBsZXNQZXJDaHVuazsNCiAgICB9DQogICAgY2h1bmsgPSBjaHVuay0+Zk5leHRDaHVuazsN
CiAgfQ0KDQogIC8vIE5vdyBnbyBiYWNrIGFuZCBmaWxsIGluIHRoZSAiTnVtYmVyIG9mIGVudHJp
ZXMiIGZpZWxkOg0KICBzZXRXb3JkKG51bUVudHJpZXNQb3NpdGlvbiwgbnVtRW50cmllcyk7DQph
ZGRBdG9tRW5kOw0KDQphZGRBdG9tKHN0c3opOyAvLyBTYW1wbGUgU2l6ZQ0KICBzaXplICs9IGFk
ZFdvcmQoMHgwMDAwMDAwMCk7IC8vIFZlcnNpb24rZmxhZ3MNCg0KICAvLyBCZWdpbiBieSBjaGVj
a2luZyB3aGV0aGVyIG91ciBjaHVua3MgYWxsIGhhdmUgdGhlIHNhbWUNCiAgLy8gJ2J5dGVzLXBl
ci1zYW1wbGUnLiAgVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBhdG9tJ3MgdGFibGUNCiAg
Ly8gaGFzIGp1c3QgYSBzaW5nbGUgZW50cnksIG9yIG11bHRpcGxlIGVudHJpZXMuDQogIEJvb2xl
YW4gaGF2ZVNpbmdsZUVudHJ5VGFibGUgPSBUcnVlOw0KICBkb3VibGUgZmlyc3RCUFMgPSAwLjA7
DQogIENodW5rRGVzY3JpcHRvciogY2h1bmsgPSBmQ3VycmVudElPU3RhdGUtPmZIZWFkQ2h1bms7
DQogIHdoaWxlIChjaHVuayAhPSBOVUxMKSB7DQogICAgZG91YmxlIGJwcw0KICAgICAgPSAoZG91
YmxlKShjaHVuay0+ZkZyYW1lU2l6ZSkvKGZDdXJyZW50SU9TdGF0ZS0+ZlFUU2FtcGxlc1BlckZy
YW1lKTsNCiAgICBpZiAoYnBzIDwgMS4wKSB7DQogICAgICAvLyBJIGRvbid0IHRoaW5rIGEgbXVs
dGlwbGUtZW50cnkgdGFibGUgd291bGQgbWFrZSBzZW5zZSBpbg0KICAgICAgLy8gdGhpcyBjYXNl
LCBzbyBhc3N1bWUgYSBzaW5nbGUgZW50cnkgdGFibGUgPz8/ICMjIyMjDQogICAgICBicmVhazsN
CiAgICB9DQoNCiAgICBpZiAoZmlyc3RCUFMgPT0gMC4wKSB7DQogICAgICBmaXJzdEJQUyA9IGJw
czsNCiAgICB9IGVsc2UgaWYgKGJwcyAhPSBmaXJzdEJQUykgew0KICAgICAgaGF2ZVNpbmdsZUVu
dHJ5VGFibGUgPSBGYWxzZTsNCiAgICAgIGJyZWFrOw0KICAgIH0NCg0KICAgIGNodW5rID0gY2h1
bmstPmZOZXh0Q2h1bms7DQogIH0NCg0KICB1bnNpZ25lZCBzYW1wbGVTaXplOw0KICBpZiAoaGF2
ZVNpbmdsZUVudHJ5VGFibGUpIHsNCiAgICBpZiAoZkN1cnJlbnRJT1N0YXRlLT5pc0hpbnRUcmFj
aygpDQoJJiYgZkN1cnJlbnRJT1N0YXRlLT5mSGVhZENodW5rICE9IE5VTEwpIHsNCiAgICAgIHNh
bXBsZVNpemUgPSBmQ3VycmVudElPU3RhdGUtPmZIZWFkQ2h1bmstPmZGcmFtZVNpemUNCgkgICAg
ICAgICAgICAgIC8gZkN1cnJlbnRJT1N0YXRlLT5mUVRTYW1wbGVzUGVyRnJhbWU7DQogICAgfSBl
bHNlIHsNCiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgZG9lc24ndCBzZWVtIHJpZ2h0LCBidXQgc2Vl
bXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nOg0KICAgICAgc2FtcGxlU2l6ZSA9IGZDdXJyZW50SU9T
dGF0ZS0+ZlFUVGltZVVuaXRzUGVyU2FtcGxlOyAvLz8/Pw0KICAgIH0NCiAgfSBlbHNlIHsNCiAg
ICBzYW1wbGVTaXplID0gMDsgLy8gaW5kaWNhdGVzIGEgbXVsdGlwbGUtZW50cnkgdGFibGUNCiAg
fQ0KICBzaXplICs9IGFkZFdvcmQoc2FtcGxlU2l6ZSk7IC8vIFNhbXBsZSBzaXplDQogIHVuc2ln
bmVkIGNvbnN0IHRvdE51bVNhbXBsZXMgPSBmQ3VycmVudElPU3RhdGUtPmZRVFRvdE51bVNhbXBs
ZXM7DQogIHNpemUgKz0gYWRkV29yZCh0b3ROdW1TYW1wbGVzKTsgLy8gTnVtYmVyIG9mIGVudHJp
ZXMNCg0KICBpZiAoIWhhdmVTaW5nbGVFbnRyeVRhYmxlKSB7DQogICAgLy8gTXVsdGlwbGUtZW50
cnkgdGFibGU6DQogICAgLy8gUnVuIHRocm91Z2ggdGhlIGNodW5rIGRlc2NyaXB0b3JzLCBlbnRl
cmluZyB0aGUgc2FtcGxlIHNpemVzOg0KICAgIENodW5rRGVzY3JpcHRvciogY2h1bmsgPSBmQ3Vy
cmVudElPU3RhdGUtPmZIZWFkQ2h1bms7DQogICAgd2hpbGUgKGNodW5rICE9IE5VTEwpIHsNCiAg
ICAgIHVuc2lnbmVkIG51bVNhbXBsZXMNCgk9IGNodW5rLT5mTnVtRnJhbWVzKihmQ3VycmVudElP
U3RhdGUtPmZRVFNhbXBsZXNQZXJGcmFtZSk7DQogICAgICB1bnNpZ25lZCBzYW1wbGVTaXplDQoJ
PSBjaHVuay0+ZkZyYW1lU2l6ZS8oZkN1cnJlbnRJT1N0YXRlLT5mUVRTYW1wbGVzUGVyRnJhbWUp
Ow0KICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNhbXBsZXM7ICsraSkgew0KCXNp
emUgKz0gYWRkV29yZChzYW1wbGVTaXplKTsNCiAgICAgIH0NCg0KICAgICAgY2h1bmsgPSBjaHVu
ay0+Zk5leHRDaHVuazsNCiAgICB9DQogIH0NCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20oY282NCk7
IC8vIENodW5rIE9mZnNldA0KICBzaXplICs9IGFkZFdvcmQoMHgwMDAwMDAwMCk7IC8vIFZlcnNp
b24rZmxhZ3MNCiAgc2l6ZSArPSBhZGRXb3JkKGZDdXJyZW50SU9TdGF0ZS0+Zk51bUNodW5rcyk7
IC8vIE51bWJlciBvZiBlbnRyaWVzDQoNCiAgLy8gUnVuIHRocm91Z2ggdGhlIGNodW5rIGRlc2Ny
aXB0b3JzLCBlbnRlcmluZyB0aGUgZmlsZSBvZmZzZXRzOg0KICBDaHVua0Rlc2NyaXB0b3IqIGNo
dW5rID0gZkN1cnJlbnRJT1N0YXRlLT5mSGVhZENodW5rOw0KICB3aGlsZSAoY2h1bmsgIT0gTlVM
TCkgew0KICAgIHNpemUgKz0gYWRkV29yZDY0KGNodW5rLT5mT2Zmc2V0SW5GaWxlKTsNCg0KICAg
IGNodW5rID0gY2h1bmstPmZOZXh0Q2h1bms7DQogIH0NCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20o
dWR0YSk7DQogIHNpemUgKz0gYWRkQXRvbV9uYW1lKCk7DQogIHNpemUgKz0gYWRkQXRvbV9obnRp
KCk7DQogIHNpemUgKz0gYWRkQXRvbV9oaW5mKCk7DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKG5h
bWUpOw0KICBjaGFyIGRlc2NyaXB0aW9uWzEwMF07DQogIHNwcmludGYoZGVzY3JpcHRpb24sICJI
aW50ZWQgJXMgdHJhY2siLA0KCSAgZkN1cnJlbnRJT1N0YXRlLT5mT3VyU3Vic2Vzc2lvbi5tZWRp
dW1OYW1lKCkpOw0KICBzaXplICs9IGFkZEFyYml0cmFyeVN0cmluZyhkZXNjcmlwdGlvbiwgRmFs
c2UpOyAvLyBuYW1lIG9mIG9iamVjdA0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShobnRpKTsNCiAg
c2l6ZSArPSBhZGRBdG9tX3NkcCgpOw0KYWRkQXRvbUVuZDsNCg0KdW5zaWduZWQgUXVpY2tUaW1l
RmlsZVNpbms6OmFkZEF0b21fc2RwKCkgew0KICBpbnQ2NF90IGluaXRGaWxlUG9zbiA9IFRlbGxG
aWxlNjQoZk91dEZpZCk7DQogIHVuc2lnbmVkIHNpemUgPSBhZGRBdG9tSGVhZGVyKCJzZHAgIik7
DQoNCiAgLy8gQWRkIHRoaXMgc3Vic2Vzc2lvbidzIFNEUCBsaW5lczoNCiAgY2hhciBjb25zdCog
c2RwTGluZXMgPSBmQ3VycmVudElPU3RhdGUtPmZPdXJTdWJzZXNzaW9uLnNhdmVkU0RQTGluZXMo
KTsNCiAgLy8gV2UgbmVlZCB0byBjaGFuZ2UgYW55ICJhPWNvbnRyb2w6dHJhY2tJRD0iIHZhbHVl
cyB0byBiZSB0aGlzDQogIC8vIHRyYWNrJ3MgYWN0dWFsIHRyYWNrIGlkOg0KICBjaGFyKiBuZXdT
RFBMaW5lcyA9IG5ldyBjaGFyW3N0cmxlbihzZHBMaW5lcykrMTAwLypvdmVya2lsbCovXTsNCiAg
Y2hhciBjb25zdCogc2VhcmNoU3RyID0gImE9Y29udHJvbDp0cmFja2lkPSI7DQogIEJvb2xlYW4g
Zm91bmRTZWFyY2hTdHJpbmcgPSBGYWxzZTsNCiAgY2hhciBjb25zdCAqcDEsICpwMiwgKnAzOw0K
ICBmb3IgKHAxID0gc2RwTGluZXM7ICpwMSAhPSAnXDAnOyArK3AxKSB7DQogICAgZm9yIChwMiA9
IHAxLHAzID0gc2VhcmNoU3RyOyB0b2xvd2VyKCpwMikgPT0gKnAzOyArK3AyLCsrcDMpIHt9DQog
ICAgaWYgKCpwMyA9PSAnXDAnKSB7DQogICAgICAvLyBXZSBmb3VuZCB0aGUgZW5kIG9mIHRoZSBz
ZWFyY2ggc3RyaW5nLCBhdCBwMi4NCiAgICAgIGludCBiZWZvcmVUcmFja051bVBvc24gPSBwMi1z
ZHBMaW5lczsNCiAgICAgIC8vIExvb2sgZm9yIHRoZSBzdWJzZXF1ZW50IHRyYWNrIG51bWJlciwg
YW5kIHNraXAgb3ZlciBpdDoNCiAgICAgIGludCB0cmFja051bUxlbmd0aDsNCiAgICAgIGlmIChz
c2NhbmYocDIsICIgJSpkJW4iLCAmdHJhY2tOdW1MZW5ndGgpIDwgMCkgYnJlYWs7DQogICAgICBp
bnQgYWZ0ZXJUcmFja051bVBvc24gPSBiZWZvcmVUcmFja051bVBvc24gKyB0cmFja051bUxlbmd0
aDsNCg0KICAgICAgLy8gUmVwbGFjZSB0aGUgb2xkIHRyYWNrIG51bWJlciB3aXRoIHRoZSBjb3Jy
ZWN0IG9uZToNCiAgICAgIGludCBpOw0KICAgICAgZm9yIChpID0gMDsgaSA8IGJlZm9yZVRyYWNr
TnVtUG9zbjsgKytpKSBuZXdTRFBMaW5lc1tpXSA9IHNkcExpbmVzW2ldOw0KICAgICAgc3ByaW50
ZigmbmV3U0RQTGluZXNbaV0sICIlZCIsIGZDdXJyZW50SU9TdGF0ZS0+ZlRyYWNrSUQpOw0KICAg
ICAgaSA9IGFmdGVyVHJhY2tOdW1Qb3NuOw0KICAgICAgaW50IGogPSBpICsgc3RybGVuKCZuZXdT
RFBMaW5lc1tpXSk7DQogICAgICB3aGlsZSAoMSkgew0KCWlmICgobmV3U0RQTGluZXNbal0gPSBz
ZHBMaW5lc1tpXSkgPT0gJ1wwJykgYnJlYWs7DQoJKytpOyArK2o7DQogICAgICB9DQoNCiAgICAg
IGZvdW5kU2VhcmNoU3RyaW5nID0gVHJ1ZTsNCiAgICAgIGJyZWFrOw0KICAgIH0NCiAgfQ0KDQog
IGlmICghZm91bmRTZWFyY2hTdHJpbmcpIHsNCiAgICAvLyBCZWNhdXNlIHdlIGRpZG4ndCBmaW5k
IGEgImE9Y29udHJvbDp0cmFja0lEPTx0cmFja0lkPiIgbGluZSwNCiAgICAvLyBhZGQgb25lIG9m
IG91ciBvd246DQogICAgc3ByaW50ZihuZXdTRFBMaW5lcywgIiVzJXMlZFxyXG4iLA0KCSAgICBz
ZHBMaW5lcywgc2VhcmNoU3RyLCBmQ3VycmVudElPU3RhdGUtPmZUcmFja0lEKTsNCiAgfQ0KDQog
IHNpemUgKz0gYWRkQXJiaXRyYXJ5U3RyaW5nKG5ld1NEUExpbmVzLCBGYWxzZSk7DQogIGRlbGV0
ZVtdIG5ld1NEUExpbmVzOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShoaW5mKTsNCiAgc2l6ZSAr
PSBhZGRBdG9tX3RvdGwoKTsNCiAgc2l6ZSArPSBhZGRBdG9tX25wY2soKTsNCiAgc2l6ZSArPSBh
ZGRBdG9tX3RwYXkoKTsNCiAgc2l6ZSArPSBhZGRBdG9tX3RycHkoKTsNCiAgc2l6ZSArPSBhZGRB
dG9tX251bXAoKTsNCiAgc2l6ZSArPSBhZGRBdG9tX3RweWwoKTsNCiAgLy8gSXMgJ21heHInIHJl
cXVpcmVkPyAjIyMjIw0KICBzaXplICs9IGFkZEF0b21fZG1lZCgpOw0KICBzaXplICs9IGFkZEF0
b21fZGltbSgpOw0KICBzaXplICs9IGFkZEF0b21fZHJlcCgpOw0KICBzaXplICs9IGFkZEF0b21f
dG1pbigpOw0KICBzaXplICs9IGFkZEF0b21fdG1heCgpOw0KICBzaXplICs9IGFkZEF0b21fcG1h
eCgpOw0KICBzaXplICs9IGFkZEF0b21fZG1heCgpOw0KICBzaXplICs9IGFkZEF0b21fcGF5dCgp
Ow0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbSh0b3RsKTsNCiBzaXplICs9IGFkZFdvcmQoZkN1cnJl
bnRJT1N0YXRlLT5mSElORi50cnB5LmxvKTsNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20obnBjayk7
DQogc2l6ZSArPSBhZGRXb3JkKGZDdXJyZW50SU9TdGF0ZS0+ZkhJTkYubnVtcC5sbyk7DQphZGRB
dG9tRW5kOw0KDQphZGRBdG9tKHRwYXkpOw0KIHNpemUgKz0gYWRkV29yZChmQ3VycmVudElPU3Rh
dGUtPmZISU5GLnRweWwubG8pOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbSh0cnB5KTsNCiBzaXpl
ICs9IGFkZFdvcmQoZkN1cnJlbnRJT1N0YXRlLT5mSElORi50cnB5LmhpKTsNCiBzaXplICs9IGFk
ZFdvcmQoZkN1cnJlbnRJT1N0YXRlLT5mSElORi50cnB5LmxvKTsNCmFkZEF0b21FbmQ7DQoNCmFk
ZEF0b20obnVtcCk7DQogc2l6ZSArPSBhZGRXb3JkKGZDdXJyZW50SU9TdGF0ZS0+ZkhJTkYubnVt
cC5oaSk7DQogc2l6ZSArPSBhZGRXb3JkKGZDdXJyZW50SU9TdGF0ZS0+ZkhJTkYubnVtcC5sbyk7
DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKHRweWwpOw0KIHNpemUgKz0gYWRkV29yZChmQ3VycmVu
dElPU3RhdGUtPmZISU5GLnRweWwuaGkpOw0KIHNpemUgKz0gYWRkV29yZChmQ3VycmVudElPU3Rh
dGUtPmZISU5GLnRweWwubG8pOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShkbWVkKTsNCiBzaXpl
ICs9IGFkZFdvcmQoZkN1cnJlbnRJT1N0YXRlLT5mSElORi5kbWVkLmhpKTsNCiBzaXplICs9IGFk
ZFdvcmQoZkN1cnJlbnRJT1N0YXRlLT5mSElORi5kbWVkLmxvKTsNCmFkZEF0b21FbmQ7DQoNCmFk
ZEF0b20oZGltbSk7DQogc2l6ZSArPSBhZGRXb3JkKGZDdXJyZW50SU9TdGF0ZS0+ZkhJTkYuZGlt
bS5oaSk7DQogc2l6ZSArPSBhZGRXb3JkKGZDdXJyZW50SU9TdGF0ZS0+ZkhJTkYuZGltbS5sbyk7
DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKGRyZXApOw0KIHNpemUgKz0gYWRkV29yZCgwKTsNCiBz
aXplICs9IGFkZFdvcmQoMCk7DQphZGRBdG9tRW5kOw0KDQphZGRBdG9tKHRtaW4pOw0KIHNpemUg
Kz0gYWRkV29yZCgwKTsNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20odG1heCk7DQogc2l6ZSArPSBh
ZGRXb3JkKDApOw0KYWRkQXRvbUVuZDsNCg0KYWRkQXRvbShwbWF4KTsNCiBzaXplICs9IGFkZFdv
cmQoZkN1cnJlbnRJT1N0YXRlLT5mSElORi5wbWF4KTsNCmFkZEF0b21FbmQ7DQoNCmFkZEF0b20o
ZG1heCk7DQogc2l6ZSArPSBhZGRXb3JkKGZDdXJyZW50SU9TdGF0ZS0+ZkhJTkYuZG1heCk7DQph
ZGRBdG9tRW5kOw0KDQphZGRBdG9tKHBheXQpOw0KICBNZWRpYVN1YnNlc3Npb24mIG91clN1YnNl
c3Npb24gPSBmQ3VycmVudElPU3RhdGUtPmZPdXJTdWJzZXNzaW9uOw0KICBSVFBTb3VyY2UqIHJ0
cFNvdXJjZSA9IG91clN1YnNlc3Npb24ucnRwU291cmNlKCk7DQogIGlmIChydHBTb3VyY2UgIT0g
TlVMTCkgew0KICAgIHNpemUgKz0gYWRkV29yZChydHBTb3VyY2UtPnJ0cFBheWxvYWRGb3JtYXQo
KSk7DQoNCiAgICAvLyBBbHNvLCBhZGQgYSAncnRwbWFwJyBzdHJpbmc6IDxtaW1lLXN1YnR5cGU+
LzxydHAtZnJlcXVlbmN5Pg0KICAgIHVuc2lnbmVkIHJ0cG1hcFN0cmluZ0xlbmd0aCA9IHN0cmxl
bihvdXJTdWJzZXNzaW9uLmNvZGVjTmFtZSgpKSArIDIwOw0KICAgIGNoYXIqIHJ0cG1hcFN0cmlu
ZyA9IG5ldyBjaGFyW3J0cG1hcFN0cmluZ0xlbmd0aF07DQogICAgc3ByaW50ZihydHBtYXBTdHJp
bmcsICIlcy8lZCIsDQoJICAgIG91clN1YnNlc3Npb24uY29kZWNOYW1lKCksIHJ0cFNvdXJjZS0+
dGltZXN0YW1wRnJlcXVlbmN5KCkpOw0KICAgIHNpemUgKz0gYWRkQXJiaXRyYXJ5U3RyaW5nKHJ0
cG1hcFN0cmluZyk7DQogICAgZGVsZXRlW10gcnRwbWFwU3RyaW5nOw0KICB9DQphZGRBdG9tRW5k
Ow0KDQovLyBBIGR1bW15IGF0b20gKHdpdGggbmFtZSAiPz8/PyIpOg0KdW5zaWduZWQgUXVpY2tU
aW1lRmlsZVNpbms6OmFkZEF0b21fZHVtbXkoKSB7DQogICAgaW50NjRfdCBpbml0RmlsZVBvc24g
PSBUZWxsRmlsZTY0KGZPdXRGaWQpOw0KICAgIHVuc2lnbmVkIHNpemUgPSBhZGRBdG9tSGVhZGVy
KCI/Pz8/Iik7DQphZGRBdG9tRW5kOw0K

--_004_PS1PR06MB2759795CDC5AFD9D6E41780FA8270PS1PR06MB2759apcp_--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#35316; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 19 Apr 2019 00:23:16 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 20:23:16 2019
Received: from localhost ([127.0.0.1]:42794 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1hHHJE-0007Gp-Dd
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2019 20:23:16 -0400
Received: from eggs.gnu.org ([209.51.188.92]:47163)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hHHJ9-0007Ga-N1
 for submit <at> debbugs.gnu.org; Thu, 18 Apr 2019 20:23:14 -0400
Received: from lists.gnu.org ([209.51.188.17]:58153)
 by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
 (Exim 4.71) (envelope-from <ccsmile2008@HIDDEN>)
 id 1hHHJ4-0000Cv-Jb
 for submit <at> debbugs.gnu.org; Thu, 18 Apr 2019 20:23:06 -0400
Received: from eggs.gnu.org ([209.51.188.92]:33304)
 by lists.gnu.org with esmtp (Exim 4.71)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hHHJ3-0005vo-2k
 for bug-gnu-emacs@HIDDEN; Thu, 18 Apr 2019 20:23:06 -0400
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level: ***
X-Spam-Status: No, score=3.6 required=5.0 tests=BAYES_50,
 FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,
 RECEIVED_FROM_WINDOWS_HOST,URIBL_BLOCKED autolearn=disabled version=3.3.2
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <ccsmile2008@HIDDEN>) id 1hHHJ1-0000BD-QP
 for bug-gnu-emacs@HIDDEN; Thu, 18 Apr 2019 20:23:04 -0400
Received: from mail-oln040092254051.outbound.protection.outlook.com
 ([40.92.254.51]:27568 helo=APC01-PU1-obe.outbound.protection.outlook.com)
 by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
 (Exim 4.71) (envelope-from <ccsmile2008@HIDDEN>)
 id 1hHHJ1-00009m-B4
 for bug-gnu-emacs@HIDDEN; Thu, 18 Apr 2019 20:23:03 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=StjGoxhRhpjOmnt8mHUNOaDTS+aD0Y8hb4Ds5lyDTag=;
 b=u7Q/0I+lCIHjvEVfKQSB8ctjyfCifCtNtcoC5T0e0xj9ZcPZPzQoebStitvvEpOOE6s5lmiUYG0ExiNdw4XpDRNt5+Nm6Tp/mZ2RTwL+t7vnsz3XJ42fsbMGbxnwj4S14ZR4RiX4WQuz8KYIGUUJyHDMZO07vmXZ289ITX61fLJVf03NyCfjj/C3lhBkOKhIqMdz02PCixmzQHTjen5epMAOn9mgHz/c3F0IXyX3R/CF/+e4B3WWCrIgNzS8R1ylBorf190QnygTiTR4kmbRTojdgi1IDY4fV2IEp7TmqgY6AqSH84MUowmTLewwZ5+Zh6OdDblRHfkvWjxuykc4XA==
Received: from HK2APC01FT115.eop-APC01.prod.protection.outlook.com
 (10.152.248.53) by HK2APC01HT235.eop-APC01.prod.protection.outlook.com
 (10.152.249.125) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1771.16; Fri, 19 Apr
 2019 00:22:59 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com (10.152.248.59) by
 HK2APC01FT115.mail.protection.outlook.com (10.152.248.194) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.1771.16 via Frontend Transport; Fri, 19 Apr 2019 00:22:59 +0000
Received: from PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::b5a7:335c:7ed:4ab1]) by PS1PR06MB2759.apcprd06.prod.outlook.com
 ([fe80::b5a7:335c:7ed:4ab1%6]) with mapi id 15.20.1792.021; Fri, 19 Apr 2019
 00:22:59 +0000
From: Zhang Haijun <ccsmile2008@HIDDEN>
To: "bug-gnu-emacs@HIDDEN" <bug-gnu-emacs@HIDDEN>
Subject: 26.2; Emacs lags in c++-mode buffer when editing with iedit-mode on
Thread-Topic: 26.2; Emacs lags in c++-mode buffer when editing with iedit-mode
 on
Thread-Index: AQHU9kYLR8YVtU4qnEimz+4uHSbAZQ==
Date: Fri, 19 Apr 2019 00:22:59 +0000
Message-ID: <PS1PR06MB2759273EF4B58A8ED70D3C8CA8270@HIDDEN>
Accept-Language: zh-CN, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: HK0P153CA0046.APCP153.PROD.OUTLOOK.COM
 (2603:1096:203:17::34) To PS1PR06MB2759.apcprd06.prod.outlook.com
 (2603:1096:803:46::13)
x-incomingtopheadermarker: OriginalChecksum:4344D109EA49D10BD7C6DF772BAAC621CEFC09668AAA20B06DD9F99C7CE51C05;
 UpperCasedChecksum:5D18BD3F667A29D675FE59778FBD94D47A095702741CAE851F1AB7A331002011;
 SizeAsReceived:7275; Count:47
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: Apple Mail (2.3445.9.1)
x-tmn: [sLoDjFTOp2Tep4IBEgVQpnKq7SaNVJDB]
x-microsoft-original-message-id: <FDFFBE70-B295-4AFF-B2AD-EC5651884863@HIDDEN>
x-ms-publictraffictype: Email
x-incomingheadercount: 47
x-eopattributedmessage: 0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(5050001)(7020095)(20181119110)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031323274)(2017031324274)(2017031322404)(1601125500)(1603101475)(1701031045);
 SRVR:HK2APC01HT235; 
x-ms-traffictypediagnostic: HK2APC01HT235:
x-ms-exchange-purlcount: 2
x-microsoft-antispam-message-info: ICMTEvZOTmEQ6Ptxguuy3cKE6galsQsXqcgsV+Ibga/ZoeebE+V+7c89iMg2iSZu2metNsZTf+kiF0IcxxcKLj7LilOCxmuPdgnepzOkEOxA3YHwWRJggyaP+sRBvEKTuDAGFMT14sWEVkDZV9c2bNEoIouKi4nmXEOD7gcD9+rmbKS4Cyqx3Im6Ap/qiOZj
Content-Type: text/plain; charset="gb2312"
Content-ID: <F156C20B2C58AB4D9BD56307EAE0DA9F@HIDDEN>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-Network-Message-Id: fa2dfdc3-4287-49b0-01cd-08d6c45d2d9f
X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Apr 2019 00:22:59.8083 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Internet
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2APC01HT235
X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy]
X-Received-From: 40.92.254.51
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x
X-Spam-Score: -1.1 (-)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.1 (--)

aWVkaXQuZWwoaHR0cHM6Ly9naXRodWIuY29tL3ZpY3RvcmhnZS9pZWRpdCkgaXMgYSBtdWx0aXBs
ZS1jdXJzb3JzIGxpa2UgcGFja2FnZS4gSXQgY2FuIHNldHVwIG1vcmUgdGhhbiBvbmUgdmlydHVh
bCBjdXJzb3JzIGF0IGRpZmZlcmVudCBwb3NpdGlvbnMgaW4gdGhlIGJ1ZmZlci4gV2hlbiB5b3Ug
ZWRpdCBpbiB0aGUgYnVmZmVyLCBpdCBjbG9uZXMgY2hhbmdlcyBhdCB0aGUgbWFpbiBjdXJzb3Ig
dG8gYWxsIG90aGVyIHZpcnR1YWwgY3Vyc29ycy4NCg0KVGhlIHByb2JsZW0gaXMgdGhhdDogRW1h
Y3MgbGFncyB0b28gbXVjaCB3aGVuIGVkaXRpbmcgaW4gYysrLW1vZGUgd2l0aCBpZWRpdC1tb2Rl
IG9uLg0KUHJvZmlsZXIgc2hvd3MgdGhhdCBjcHUgYXJlIG1vc3QgdXNlZCBieSBjLWFmdGVyLWNo
YW5nZS4NCg0KVGhlIHJlbGF0ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92aWN0b3JoZ2Uv
aWVkaXQvaXNzdWVzLzgzDQoNCg0KDQpJbiBHTlUgRW1hY3MgMjYuMiAoYnVpbGQgMSwgeDg2XzY0
LWFwcGxlLWRhcndpbjE3LjcuMCwgTlMgYXBwa2l0LTE1NjEuNjAgVmVyc2lvbiAxMC4xMy42IChC
dWlsZCAxN0c2MDMwKSkNCiBvZiAyMDE5LTA0LTEzIGJ1aWx0IG9uIGp1bmRlTWFjDQpXaW5kb3dp
bmcgc3lzdGVtIGRpc3RyaWJ1dG9yICdBcHBsZScsIHZlcnNpb24gMTAuMy4xNTYxDQpSZWNlbnQg
bWVzc2FnZXM6DQpGb3IgaW5mb3JtYXRpb24gYWJvdXQgR05VIEVtYWNzIGFuZCB0aGUgR05VIHN5
c3RlbSwgdHlwZSBDLWggQy1hLg0KDQpDb25maWd1cmVkIHVzaW5nOg0KICdjb25maWd1cmUgLS13
aXRoLW5zICctLWVuYWJsZS1sb2NhbGxpc3BwYXRoPS9MaWJyYXJ5L0FwcGxpY2F0aW9uDQogU3Vw
cG9ydC9FbWFjcy8ke3ZlcnNpb259L3NpdGUtbGlzcDovTGlicmFyeS9BcHBsaWNhdGlvbg0KIFN1
cHBvcnQvRW1hY3Mvc2l0ZS1saXNwJyAtLXdpdGgtbW9kdWxlcyAtLWRpc2FibGUtYWNsDQogLS13
aXRob3V0LW1ha2VpbmZvICdDQz1jYyAnIENGTEFHUz0tTzINCiBQS0dfQ09ORklHX1BBVEg9L1Vz
ZXJzL2p1bi9zb3VyY2UvYnVpbGQtZW1hY3MtbWFzdGVyL2JyZXcvbGliL3BrZ2NvbmZpZzonDQoN
CkNvbmZpZ3VyZWQgZmVhdHVyZXM6DQpKUEVHIE5PVElGWSBHTlVUTFMgTElCWE1MMiBaTElCIFRP
T0xLSVRfU0NST0xMX0JBUlMgTlMgTU9EVUxFUyBUSFJFQURTDQpMQ01TMg0KDQpJbXBvcnRhbnQg
c2V0dGluZ3M6DQogIHZhbHVlIG9mICRMQU5HOiB6aF9DTi5VVEYtOA0KICBsb2NhbGUtY29kaW5n
LXN5c3RlbTogdXRmLTgtdW5peA0KDQpNYWpvciBtb2RlOiBMaXNwIEludGVyYWN0aW9uDQoNCk1p
bm9yIG1vZGVzIGluIGVmZmVjdDoNCiAgdG9vbHRpcC1tb2RlOiB0DQogIGdsb2JhbC1lbGRvYy1t
b2RlOiB0DQogIGVsZG9jLW1vZGU6IHQNCiAgZWxlY3RyaWMtaW5kZW50LW1vZGU6IHQNCiAgbW91
c2Utd2hlZWwtbW9kZTogdA0KICB0b29sLWJhci1tb2RlOiB0DQogIG1lbnUtYmFyLW1vZGU6IHQN
CiAgZmlsZS1uYW1lLXNoYWRvdy1tb2RlOiB0DQogIGdsb2JhbC1mb250LWxvY2stbW9kZTogdA0K
ICBmb250LWxvY2stbW9kZTogdA0KICBibGluay1jdXJzb3ItbW9kZTogdA0KICBhdXRvLWNvbXBv
c2l0aW9uLW1vZGU6IHQNCiAgYXV0by1lbmNyeXB0aW9uLW1vZGU6IHQNCiAgYXV0by1jb21wcmVz
c2lvbi1tb2RlOiB0DQogIGxpbmUtbnVtYmVyLW1vZGU6IHQNCiAgdHJhbnNpZW50LW1hcmstbW9k
ZTogdA0KDQpMb2FkLXBhdGggc2hhZG93czoNCk5vbmUgZm91bmQuDQoNCkZlYXR1cmVzOg0KKHNo
YWRvdyBzb3J0IG1haWwtZXh0ciBlbWFjc2J1ZyBtZXNzYWdlIHJtYyBwdW55IHNlcSBieXRlLW9w
dCBndg0KYnl0ZWNvbXAgYnl0ZS1jb21waWxlIGNjb252IGNsLWxvYWRkZWZzIGNsLWxpYiBkaXJl
ZCBkaXJlZC1sb2FkZGVmcw0KZm9ybWF0LXNwZWMgcmZjODIyIG1tbCBlYXN5bWVudSBtbWwtc2Vj
IHBhc3N3b3JkLWNhY2hlIGVwYSBkZXJpdmVkIGVwZw0KZXBnLWNvbmZpZyBnbnVzLXV0aWwgcm1h
aWwgcm1haWwtbG9hZGRlZnMgbW0tZGVjb2RlIG1tLWJvZGllcyBtbS1lbmNvZGUNCm1haWwtcGFy
c2UgcmZjMjIzMSBtYWlsYWJicmV2IGdtbS11dGlscyBtYWlsaGVhZGVyIHNlbmRtYWlsIHJmYzIw
NDcNCnJmYzIwNDUgaWV0Zi1kcnVtcyBtbS11dGlsIG1haWwtcHJzdnIgbWFpbC11dGlscyBlbGVj
LXBhaXIgdGltZS1kYXRlDQpjaGluYS11dGlsIHRvb2x0aXAgZWxkb2MgZWxlY3RyaWMgdW5pcXVp
ZnkgZWRpZmYtaG9vayB2Yy1ob29rcw0KbGlzcC1mbG9hdC10eXBlIG13aGVlbCB0ZXJtL25zLXdp
biBucy13aW4gdWNzLW5vcm1hbGl6ZSBtdWxlLXV0aWwNCnRlcm0vY29tbW9uLXdpbiB0b29sLWJh
ciBkbmQgZm9udHNldCBpbWFnZSByZWdleHAtb3B0IGZyaW5nZQ0KdGFidWxhdGVkLWxpc3QgcmVw
bGFjZSBuZXdjb21tZW50IHRleHQtbW9kZSBlbGlzcC1tb2RlIGxpc3AtbW9kZQ0KcHJvZy1tb2Rl
IHJlZ2lzdGVyIHBhZ2UgbWVudS1iYXIgcmZuLWVzaGFkb3cgaXNlYXJjaCB0aW1lciBzZWxlY3QN
CnNjcm9sbC1iYXIgbW91c2Ugaml0LWxvY2sgZm9udC1sb2NrIHN5bnRheCBmYWNlbWVudSBmb250
LWNvcmUNCnRlcm0vdHR5LWNvbG9ycyBmcmFtZSBjbC1nZW5lcmljIGNoYW0gZ2VvcmdpYW4gdXRm
LTgtbGFuZyBtaXNjLWxhbmcNCnZpZXRuYW1lc2UgdGliZXRhbiB0aGFpIHRhaS12aWV0IGxhbyBr
b3JlYW4gamFwYW5lc2UgZXVjanAtbXMgY3A1MTkzMg0KaGVicmV3IGdyZWVrIHJvbWFuaWFuIHNs
b3ZhayBjemVjaCBldXJvcGVhbiBldGhpb3BpYyBpbmRpYW4gY3lyaWxsaWMNCmNoaW5lc2UgY29t
cG9zaXRlIGNoYXJzY3JpcHQgY2hhcnByb3AgY2FzZS10YWJsZSBlcGEtaG9vayBqa2EtY21wci1o
b29rDQpoZWxwIHNpbXBsZSBhYmJyZXYgb2JhcnJheSBtaW5pYnVmZmVyIGNsLXByZWxvYWRlZCBu
YWR2aWNlIGxvYWRkZWZzDQpidXR0b24gZmFjZXMgY3VzLWZhY2UgbWFjcm9leHAgZmlsZXMgdGV4
dC1wcm9wZXJ0aWVzIG92ZXJsYXkgc2hhMSBtZDUNCmJhc2U2NCBmb3JtYXQgZW52IGNvZGUtcGFn
ZXMgbXVsZSBjdXN0b20gd2lkZ2V0IGhhc2h0YWJsZS1wcmludC1yZWFkYWJsZQ0KYmFja3F1b3Rl
IHRocmVhZHMga3F1ZXVlIGNvY29hIG5zIGxjbXMyIG11bHRpLXR0eSBtYWtlLW5ldHdvcmstcHJv
Y2Vzcw0KZW1hY3MpDQoNCk1lbW9yeSBpbmZvcm1hdGlvbjoNCigoY29uc2VzIDE2IDIwNTEwNCAx
Mjc2MykNCiAoc3ltYm9scyA0OCAyMDEzNiAwKQ0KIChtaXNjcyA0MCAzNzMgMjAyKQ0KIChzdHJp
bmdzIDMyIDI4OTUzIDE3NjgpDQogKHN0cmluZy1ieXRlcyAxIDc2NDkxMikNCiAodmVjdG9ycyAx
NiAzNTkxNCkNCiAodmVjdG9yLXNsb3RzIDggNzg0MTUxIDc5NzIpDQogKGZsb2F0cyA4IDQ4IDMx
MSkNCiAoaW50ZXJ2YWxzIDU2IDIyNCAwKQ0KIChidWZmZXJzIDk5MiAxMSkpDQoNCg==




Acknowledgement sent to Zhang Haijun <ccsmile2008@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#35316; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 19 May 2019 14:30:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.