From unknown Sat Sep 20 11:29:47 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#56393 <56393@debbugs.gnu.org> To: bug#56393 <56393@debbugs.gnu.org> Subject: Status: Actually fix the long lines display bug Reply-To: bug#56393 <56393@debbugs.gnu.org> Date: Sat, 20 Sep 2025 18:29:47 +0000 retitle 56393 Actually fix the long lines display bug reassign 56393 emacs submitter 56393 Gregory Heytings severity 56393 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 04:49:46 2022 Received: (at submit) by debbugs.gnu.org; 5 Jul 2022 08:49:46 +0000 Received: from localhost ([127.0.0.1]:49309 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8eFc-0005mY-MB for submit@debbugs.gnu.org; Tue, 05 Jul 2022 04:49:46 -0400 Received: from lists.gnu.org ([209.51.188.17]:43602) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8eFZ-0005mP-8v for submit@debbugs.gnu.org; Tue, 05 Jul 2022 04:49:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8eFY-0003c1-Up for bug-gnu-emacs@gnu.org; Tue, 05 Jul 2022 04:49:41 -0400 Received: from heytings.org ([95.142.160.155]:51548) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8eFU-0006fN-9M for bug-gnu-emacs@gnu.org; Tue, 05 Jul 2022 04:49:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657010971; bh=zi9gneA4rf8C6sF0HwhK/KBjenlTH2vpfAn4DIV3qSk=; h=Date:From:To:Subject:Message-ID:From; b=og+Qwdjbxd5bB1KH0dcJK8P9umYugQ91g42/lvOemF/nA8Vpf50CO0cnq2epaImZ/ SU0AX7XlhME5QPaDVi1VoGvA8LGy39y6yl5wzNxSJR4Hlo00aUPsk7MIN9l/wgg7rD qg+jxdJ6xiPhDcTxw9SqXIs0lWSys0qgiDQHTEgSyKadKLAzMZ/BarJKT0zYHnousl NkmroZ9HBNOAFatWqS/5eHCtNc6NvbWh8H1ufR2NYeYTUqHaOM1cK2yHeUO5XIjcaY 1tDCpLCHw80tw48v3ZxLwagbK+Gyh8Xl0KUJLrQyROEMxDPkBtK9ddzJLpDYwg1Nt/ Hhg1FZSEOEMzg== Date: Tue, 05 Jul 2022 08:49:30 +0000 From: Gregory Heytings To: bug-gnu-emacs@gnu.org Subject: Actually fix the long lines display bug Message-ID: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="3C8xaJEIMJ" Received-SPF: pass client-ip=95.142.160.155; envelope-from=gregory@heytings.org; helo=heytings.org X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) --3C8xaJEIMJ Content-Type: text/plain; format=flowed; charset=us-ascii Please review. --3C8xaJEIMJ Content-Type: text/x-diff; name=Actually-fix-the-long-lines-display-bug.patch Content-Transfer-Encoding: base64 Content-ID: <38c1a310404d7a1ee473@heytings.org> Content-Disposition: attachment; filename=Actually-fix-the-long-lines-display-bug.patch RnJvbSBmZWQxMDczMjdjZTM4YzU0MTZhZTUyYjcwZWRkNjczZDM3ZTY4Njk1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogR3JlZ29yeSBIZXl0 aW5ncyA8Z3JlZ29yeUBoZXl0aW5ncy5vcmc+DQpEYXRlOiBUdWUsIDUgSnVs IDIwMjIgMDg6NDQ6MDQgKzAwMDANClN1YmplY3Q6IFtQQVRDSF0gQWN0dWFs bHkgZml4IHRoZSBsb25nIGxpbmVzIGRpc3BsYXkgYnVnLg0KDQoqIGxpc3Av ZmlsZXMuZWwgKGF1dG8tbmFycm93LW1vZGUpOiBOZXcgbWlub3IgbW9kZS4N CihhdXRvLW5hcnJvdy1wcmUtY29tbWFuZC1mdW5jdGlvbiwgYXV0by1uYXJy b3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9uKToNCk5ldyBhdXhpbGlhcnkgZnVu Y3Rpb25zIGZvciB0aGUgbWlub3IgbW9kZS4NCihhdXRvLW5hcnJvdy1kaXNw bGF5LWxlbmd0aCwgYXV0by1uYXJyb3ctd2lkZW4tYXV0b21hdGljYWxseSk6 IE5ldw0KZGVmY3VzdG9tcyBmb3IgdGhlIG1pbm9yIG1vZGUuDQooYXV0by1u YXJyb3ctLXdpZGVuLWF1dG9tYXRpY2FsbHksIGF1dG8tbmFycm93LS1pc2Vh cmNoLXdpZGVuLWF1dG9tYXRpY2FsbHksDQphdXRvLW5hcnJvdy0taW5pdGlh bGl6ZWQpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGVzIGZvciB0aGUgbWlub3Ig bW9kZS4NCg0KKiBzcmMvYnVmZmVyLmggKHN0cnVjdCBidWZmZXIpOiBOZXcg aW50ZXJuYWwgdmFyaWFibGUgZm9yIHRoZSBtaW5vciBtb2RlLg0KDQoqIHNy Yy9idWZmZXIuYyAoaW5pdF9idWZmZXJfb25jZSwgc3ltc19vZl9idWZmZXIp OiBOZXcgaW50ZXJuYWwgdmFyaWFibGUNCmZvciB0aGUgbWlub3IgbW9kZS4N Cg0KKiBzcmMvZmlsZWlvLmMgKEZpbnNlcnRfZmlsZV9jb250ZW50cyk6IEF1 dG9tYXRpY2FsbHkgZW50ZXIgdGhlIG1pbm9yIG1vZGUNCndoZW4gYXBwcm9w cmlhdGUuDQooc3ltc19vZl9maWxlaW8pOiBOZXcgZGVmY3VzdG9tIGZvciB0 aGUgbWlub3IgbW9kZS4NCg0KKiBzcmMva2V5Ym9hcmQuYyAoc3ltc19vZl9r ZXlib2FyZCk6IE5ldyBob29rIGZ1bmN0aW9ucyBmb3IgdGhlIG1pbm9yIG1v ZGUuDQooY29tbWFuZF9sb29wXzEpOiBFeGVjdXRlIHRoZSBob29rIGZ1bmN0 aW9ucy4NCg0KKiBzcmMvc2VhcmNoLmMgKGZpbmRfbmV3bGluZTEpOiBNYWtl IGl0IGV4dGVybmFsbHkgdmlzaWJsZS4NCg0KKiBzcmMvbGlzcC5oOiBNYWtl IGZpbmRfbmV3bGluZTEgZXh0ZXJuYWxseSB2aXNpYmxlLg0KDQoqIHNyYy94 ZGlzcC5jIChkZWNvZGVfbW9kZV9zcGVjKTogSW5kaWNhdGUgd2hlbiB0aGUg bWlub3IgbW9kZSBpcyBhY3RpdmUNCmluIHRoZSBtb2RlbGluZS4NCg0KKiBs aXNwL2lzZWFyY2guZWwgKGlzZWFyY2gtd2lkZW4tYXV0b21hdGljYWxseSk6 IE5ldyBkZWZjdXN0b20uDQooaXNlYXJjaC1zZWFyY2gpOiBVc2UgdGhlIG5l dyBkZWZjdXN0b20uDQoNCiogbGlzcC9iaW5kaW5ncy5lbCAobW9kZS1saW5l LW1vZGVzKTogRG8gbm90IHByb3BlcnRpemUgdGhlIGluZGljYXRpb24NCmlu IHRoZSBtb2RlbGluZSB3aGVuIHRoZSBuZXcgbWlub3IgbW9kZSBpcyBhY3Rp dmUuDQoNCiogZXRjL05FV1M6IEFubm91bmNlIHRoZSBuZXcgbWlub3IgbW9k ZSwgYW5kIHJlbW92ZSB0aGUgdW5vYnNvbGV0aW9uDQppbmRpY2F0aW9uIGZv ciAnbG9uZ2xpbmVzLW1vZGUnLg0KDQoqIGxpc3AvbG9uZ2xpbmVzLmVsOiBS ZW9ic29sZXRlIGxvbmdsaW5lcy1tb2RlLg0KDQoqIGRvYy9lbWFjcy9kaXNw bGF5LnRleGkgKEF1dG8tTmFycm93aW5nKTogTmV3IHNlY3Rpb24sIGRlc2Ny aWJpbmcgdGhlIG5ldw0KbWlub3IgbW9kZS4NCihEaXNwbGF5KTogRW50cnkg Zm9yIHRoZSBuZXcgc2VjdGlvbi4NCg0KKiBkb2MvZW1hY3MvdHJvdWJsZS50 ZXhpIChMb25nIExpbmVzKTogUmVtb3ZlIHRoZSBzZWN0aW9uLg0KKExvc3Nh Z2UpOiBSZW1vdmUgdGhlIGVudHJ5IGZvciB0aGUgTG9uZyBMaW5lcyBzZWN0 aW9uLg0KDQoqIGRvYy9lbWFjcy9lbWFjcy50ZXhpIChUb3ApOiBSZW1vdmUg dGhlIGVudHJ5IGZvciB0aGUgTG9uZyBMaW5lcyBzZWN0aW9uLg0KLS0tDQog ZG9jL2VtYWNzL2Rpc3BsYXkudGV4aSB8ICAyNSArKw0KIGRvYy9lbWFjcy9l bWFjcy50ZXhpICAgfCAgIDEgLQ0KIGRvYy9lbWFjcy90cm91YmxlLnRleGkg fCAgNTkgLS0tLS0NCiBldGMvTkVXUyAgICAgICAgICAgICAgIHwgIDE1ICst DQogbGlzcC9iaW5kaW5ncy5lbCAgICAgICB8ICAxMiArLQ0KIGxpc3AvZmls ZXMuZWwgICAgICAgICAgfCAgOTIgKysrKysrKysNCiBsaXNwL2lzZWFyY2gu ZWwgICAgICAgIHwgIDMyICsrLQ0KIGxpc3AvbG9uZ2xpbmVzLmVsICAgICAg fCA1MDIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCiBzcmMvYnVmZmVyLmMgICAgICAgICAgIHwgICA1ICsNCiBzcmMvYnVm ZmVyLmggICAgICAgICAgIHwgICAzICsNCiBzcmMvZmlsZWlvLmMgICAgICAg ICAgIHwgIDI1ICsrDQogc3JjL2tleWJvYXJkLmMgICAgICAgICB8ICAyOCAr KysNCiBzcmMvbGlzcC5oICAgICAgICAgICAgIHwgICAyICsNCiBzcmMvc2Vh cmNoLmMgICAgICAgICAgIHwgICAyICstDQogc3JjL3hkaXNwLmMgICAgICAg ICAgICB8ICAgNyArLQ0KIDE1IGZpbGVzIGNoYW5nZWQsIDIyOCBpbnNlcnRp b25zKCspLCA1ODIgZGVsZXRpb25zKC0pDQogZGVsZXRlIG1vZGUgMTAwNjQ0 IGxpc3AvbG9uZ2xpbmVzLmVsDQoNCmRpZmYgLS1naXQgYS9kb2MvZW1hY3Mv ZGlzcGxheS50ZXhpIGIvZG9jL2VtYWNzL2Rpc3BsYXkudGV4aQ0KaW5kZXgg Y2FkYWM3ZTQ1My4uOWZlOTUzM2U4OCAxMDA2NDQNCi0tLSBhL2RvYy9lbWFj cy9kaXNwbGF5LnRleGkNCisrKyBiL2RvYy9lbWFjcy9kaXNwbGF5LnRleGkN CkBAIC0xOSw2ICsxOSw4IEBAIERpc3BsYXkNCiAqIEhvcml6b250YWwgU2Ny b2xsaW5nOjogICBNb3ZpbmcgdGV4dCBsZWZ0IGFuZCByaWdodCBpbiBhIHdp bmRvdy4NCiAqIE5hcnJvd2luZzo6ICAgICAgICAgICAgICBSZXN0cmljdGlu ZyBkaXNwbGF5IGFuZCBlZGl0aW5nIHRvIGEgcG9ydGlvbg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGJ1ZmZlci4NCisqIEF1dG8t TmFycm93aW5nOjogICAgICAgICBBdXRvbWF0aWNhbGx5IHJlc3RyaWN0IGRp c3BsYXkgdG8gYSBwb3J0aW9uIG9mDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGUgYnVmZmVyLg0KICogVmlldyBNb2RlOjogICAgICAgICAg ICAgIFZpZXdpbmcgcmVhZC1vbmx5IGJ1ZmZlcnMuDQogKiBGb2xsb3cgTW9k ZTo6ICAgICAgICAgICAgRm9sbG93IG1vZGUgbGV0cyB0d28gd2luZG93cyBz Y3JvbGwgYXMgb25lLg0KICogRmFjZXM6OiAgICAgICAgICAgICAgICAgIEhv dyB0byBjaGFuZ2UgdGhlIGRpc3BsYXkgc3R5bGUgdXNpbmcgZmFjZXMuDQpA QCAtNDY3LDYgKzQ2OSwyOSBAQCBOYXJyb3dpbmcNCiBpZiB5b3UgZW5hYmxl IHRoZSBjb21tYW5kLCBjb25maXJtYXRpb24gd2lsbCBubyBsb25nZXIgYmUg cmVxdWlyZWQgZm9yDQogaXQuICBAeHJlZntEaXNhYmxpbmd9Lg0KIA0KK0Bu b2RlIEF1dG8tTmFycm93aW5nDQorQGZpbmRleCBhdXRvLW5hcnJvdy1tb2Rl DQorQHZpbmRleCBhdXRvLW5hcnJvdy1sb25nLWxpbmUtdGhyZXNob2xkDQor QHZpbmRleCBhdXRvLW5hcnJvdy1kaXNwbGF5LWxlbmd0aA0KK0B2aW5kZXgg YXV0by1uYXJyb3ctd2lkZW4tYXV0b21hdGljYWxseQ0KKw0KKyAgV2hlbiBh IGZpbGUgd2l0aCBleHRyZW1lbHkgbG9uZyBsaW5lcyBpcyBvcGVuZWQgb3Ig aW5zZXJ0ZWQgaW4gYQ0KK2J1ZmZlciwgRW1hY3MgYXV0b21hdGljYWxseSBl bnRlcnMgYXV0by1uYXJyb3cgbW9kZSwgYW5kIHRoZSB3b3JkDQorQHNhbXB7 QXV0by1OYXJyb3d9IGFwcGVhcnMgaW4gdGhlIG1vZGUgbGluZS4gIFRoaXMg bWVhbnMgdGhhdCBFbWFjcw0KK3Jlc3RyaWN0cyBkaXNwbGF5LCBidXQgbm90 IGVkaXRpbmcsIHRvIGEgcG9ydGlvbiBvZiB0aGUgYnVmZmVyIGFib3ZlDQor YW5kIGJlbG93IHBvaW50LiAgQWxsIGVkaXRpbmcgY29tbWFuZHMsIGluY2x1 ZGluZyBuYXJyb3dpbmcgY29tbWFuZHMsDQorcmVtYWluIGF2YWlsYWJsZSwg YW5kIHRoZXkgYWN0IG9uIHRoZSB3aG9sZSBidWZmZXIuICBGb3IgZXhhbXBs ZSwNCitAa2Jke00tPn0gbW92ZXMgcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUg YnVmZmVyLCBhbmQgbm90LCBhcyB3b3VsZA0KK2hhcHBlbiB3aXRoIG9yZGlu YXJ5IG5hcnJvd2luZywgdG8gdGhlIGVuZCBvZiB0aGUgcG9ydGlvbiBvZiB0 aGUNCitidWZmZXIgdG8gd2hpY2ggZGlzcGxheSBpcyBjdXJyZW50bHkgcmVz dHJpY3RlZC4NCisNCisgIFRoZSBiZWhhdmlvciBvZiBhdXRvLW5hcnJvdyBt b2RlIGlzIGNvbnRyb2xsZWQgYnkgdGhyZWUgdmFyaWFibGVzOg0KK0Bjb2Rl e2F1dG8tbmFycm93LWxvbmctbGluZS10aHJlc2hvbGR9IGlzIHRoZSBsaW5l IGxlbmd0aCBhYm92ZSB3aGljaA0KK2F1dG8tbmFycm93IG1vdmUgaXMgZW50 ZXJlZCwgQGNvZGV7YXV0by1uYXJyb3ctZGlzcGxheS1sZW5ndGh9IGlzIHRo ZQ0KK251bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHdoaWNoIGRpc3BsYXkgaXMg cmVzdHJpY3RlZCwgYW5kDQorQGNvZGV7YXV0by1uYXJyb3ctd2lkZW4tYXV0 b21hdGljYWxseX0gaXMgYSBsaXN0IG9mIGNvbW1hbmRzIGZvciB3aGljaA0K K2Rpc3BsYXkgaXMgd2lkZW5lZCBiZWZvcmUgdGhleSBhcmUgZXhlY3V0ZWQu DQorDQogQG5vZGUgVmlldyBNb2RlDQogQHNlY3Rpb24gVmlldyBNb2RlDQog QGNpbmRleCBWaWV3IG1vZGUNCmRpZmYgLS1naXQgYS9kb2MvZW1hY3MvZW1h Y3MudGV4aSBiL2RvYy9lbWFjcy9lbWFjcy50ZXhpDQppbmRleCA1ZTcyNjk5 YmJlLi5iNDNjOTY2Zjg3IDEwMDY0NA0KLS0tIGEvZG9jL2VtYWNzL2VtYWNz LnRleGkNCisrKyBiL2RvYy9lbWFjcy9lbWFjcy50ZXhpDQpAQCAtMTE5MCw3 ICsxMTkwLDYgQEAgVG9wDQogKiBDcmFzaGluZzo6ICAgICAgICAgICAgV2hh dCBFbWFjcyBkb2VzIHdoZW4gaXQgY3Jhc2hlcy4NCiAqIEFmdGVyIGEgQ3Jh c2g6OiAgICAgICBSZWNvdmVyaW5nIGVkaXRpbmcgaW4gYW4gRW1hY3Mgc2Vz c2lvbiB0aGF0IGNyYXNoZWQuDQogKiBFbWVyZ2VuY3kgRXNjYXBlOjogICAg V2hhdCB0byBkbyBpZiBFbWFjcyBzdG9wcyByZXNwb25kaW5nLg0KLSogTG9u ZyBMaW5lczo6ICAgICAgICAgIE1pdGlnYXRpbmcgc2xvd25lc3MgZHVlIHRv IGV4dHJlbWVseSBsb25nIGxpbmVzLg0KICogREVMIERvZXMgTm90IERlbGV0 ZTo6IFdoYXQgdG8gZG8gaWYgQGtleXtERUx9IGRvZXNuJ3QgZGVsZXRlLg0K IA0KIFJlcG9ydGluZyBCdWdzDQpkaWZmIC0tZ2l0IGEvZG9jL2VtYWNzL3Ry b3VibGUudGV4aSBiL2RvYy9lbWFjcy90cm91YmxlLnRleGkNCmluZGV4IGYw NmI5Mzc1OWQuLjg4N2U1YzYxNzAgMTAwNjQ0DQotLS0gYS9kb2MvZW1hY3Mv dHJvdWJsZS50ZXhpDQorKysgYi9kb2MvZW1hY3MvdHJvdWJsZS50ZXhpDQpA QCAtMTU4LDcgKzE1OCw2IEBAIExvc3NhZ2UNCiAqIENyYXNoaW5nOjogICAg ICAgICAgICAgIFdoYXQgRW1hY3MgZG9lcyB3aGVuIGl0IGNyYXNoZXMuDQog KiBBZnRlciBhIENyYXNoOjogICAgICAgICBSZWNvdmVyaW5nIGVkaXRpbmcg aW4gYW4gRW1hY3Mgc2Vzc2lvbiB0aGF0IGNyYXNoZWQuDQogKiBFbWVyZ2Vu Y3kgRXNjYXBlOjogICAgICBXaGF0IHRvIGRvIGlmIEVtYWNzIHN0b3BzIHJl c3BvbmRpbmcuDQotKiBMb25nIExpbmVzOjogICAgICAgICAgICBNaXRpZ2F0 aW5nIHNsb3duZXNzIGR1ZSB0byBleHRyZW1lbHkgbG9uZyBsaW5lcy4NCiAq IERFTCBEb2VzIE5vdCBEZWxldGU6OiAgIFdoYXQgdG8gZG8gaWYgQGtleXtE RUx9IGRvZXNuJ3QgZGVsZXRlLg0KIEBlbmQgbWVudQ0KIA0KQEAgLTQzMyw2 NCArNDMyLDYgQEAgRW1lcmdlbmN5IEVzY2FwZQ0KIGVtZXJnZW5jeSBlc2Nh cGUtLS1idXQgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIGl0IHdvbid0IHdvcmss IHdoZW4gYQ0KIHN5c3RlbSBjYWxsIGhhbmdzIG9yIHdoZW4gRW1hY3MgaXMg c3R1Y2sgaW4gYSB0aWdodCBsb29wIGluIEMgY29kZS4NCiANCi1Abm9kZSBM b25nIExpbmVzDQotQHN1YnNlY3Rpb24gTG9uZyBMaW5lcw0KLUBjaW5kZXgg bG9uZyBsaW5lcw0KLQ0KLSAgRm9yIGEgdmFyaWV0eSBvZiByZWFzb25zIChz b21lIG9mIHdoaWNoIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgRW1hY3MNCi1y ZWRpc3BsYXkgY29kZSBhbmQgdGhlIGNvbXBsZXggcmFuZ2Ugb2YgcG9zc2li aWxpdGllcyBpdCBoYW5kbGVzOw0KLW90aGVycyBvZiB3aGljaCBhcmUgZHVl IHRvIG1vZGVzIGFuZCBmZWF0dXJlcyB3aGljaCBkbyBub3Qgc2NhbGUgd2Vs bA0KLWluIHVudXN1YWwgY2lyY3Vtc3RhbmNlcyksIEVtYWNzIGNhbiBwZXJm b3JtIHBvb3JseSB3aGVuIGV4dHJlbWVseQ0KLWxvbmcgbGluZXMgYXJlIHBy ZXNlbnQgKHdoZXJlIGBgZXh0cmVtZWx5IGxvbmcnJyB1c3VhbGx5IG1lYW5z IGF0DQotbGVhc3QgbWFueSB0aG91c2FuZHMgb2YgY2hhcmFjdGVycykuDQot DQotQGNpbmRleCBAY29kZXtzby1sb25nfSBtb2RlDQotQGZpbmRleCBnbG9i YWwtc28tbG9uZy1tb2RlDQotQHZpbmRleCBzby1sb25nLWFjdGlvbg0KLSAg QSBwYXJ0aWN1bGFyIHByb2JsZW0gaXMgdGhhdCBFbWFjcyBtYXkgYGBoYW5n JycgZm9yIGEgbG9uZyB0aW1lIGF0DQotdGhlIHBvaW50IG9mIHZpc2l0aW5n IGEgZmlsZSB3aXRoIGV4dHJlbWVseSBsb25nIGxpbmVzLiAgVGhpcyBjYW4g YmUNCi1taXRpZ2F0ZWQgYnkgZW5hYmxpbmcgdGhlIEBmaWxle3NvLWxvbmd9 IGxpYnJhcnksIHdoaWNoIGRldGVjdHMgd2hlbiBhDQotdmlzaXRlZCBmaWxl IGNvbnRhaW5zIGFibm9ybWFsbHkgbG9uZyBsaW5lcywgYW5kIHRha2VzIHN0 ZXBzIHRvDQotZGlzYWJsZSBmZWF0dXJlcyB3aGljaCBhcmUgbGlhYmxlIHRv IGNhdXNlIHNsb3duZXNzIGluIHRoYXQgc2l0dWF0aW9uLg0KLVRvIGVuYWJs ZSB0aGlzIGxpYnJhcnksIHR5cGUgQGtiZHtNLXggZ2xvYmFsLXNvLWxvbmct bW9kZSBAa2V5e1JFVH19LA0KLW9yIHR1cm4gb24gdGhlIEBjb2Rle2dsb2Jh bC1zby1sb25nLW1vZGV9IGluIHlvdXIgaW5pdCBmaWxlDQotKEBweHJlZntJ bml0IEZpbGV9KSwgb3IgY3VzdG9taXplIHRoZSBAY29kZXtnbG9iYWwtc28t bG9uZy1tb2RlfQ0KLW9wdGlvbi4gIFlvdSBjYW4gdGFpbG9yIHRoaXMgbW9k ZSdzIG9wZXJhdGlvbiBieSBjdXN0b21pemluZyB0aGUNCi12YXJpYWJsZSBA Y29kZXtzby1sb25nLWFjdGlvbn0uDQotDQotICBUaGUgQGZpbGV7c28tbG9u Z30gbGlicmFyeSBjYW4gYWxzbyBzaWduaWZpY2FudGx5IGltcHJvdmUNCi1w ZXJmb3JtYW5jZSB3aGVuIG1vdmluZyBhbmQgZWRpdGluZyBpbiBhIGJ1ZmZl ciB3aXRoIGxvbmcgbGluZXMuDQotUGVyZm9ybWFuY2UgaXMgc3RpbGwgbGlr ZWx5IHRvIGRlZ3JhZGUgYXMgeW91IGdldCBkZWVwZXIgaW50byB0aGUgbG9u Zw0KLWxpbmVzLCBidXQgdGhlIGltcHJvdmVtZW50cyBmcm9tIHVzaW5nIHRo aXMgbGlicmFyeSBjYW4gbmV2ZXJ0aGVsZXNzDQotYmUgc3Vic3RhbnRpYWwu DQotDQotQGZpbmRleCBzby1sb25nLWNvbW1lbnRhcnkNCi0gIFVzZSBAa2Jk e00teCBzby1sb25nLWNvbW1lbnRhcnl9IHRvIHZpZXcgdGhlIGRvY3VtZW50 YXRpb24gZm9yIHRoaXMNCi1saWJyYXJ5IGFuZCBsZWFybiBtb3JlIGFib3V0 IGhvdyB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSBpdC4NCi0NCi1AdmluZGV4 IG1heC1yZWRpc3BsYXktdGlja3MNCi0gIElmIGV2ZW4gQGNvZGV7c28tbG9u Zy1tb2RlfSBkb2Vzbid0IGhlbHAgbWFraW5nIEVtYWNzIHJlc3BvbnNpdmUN Ci1lbm91Z2gsIG9yIGlmIHlvdSdkIHJhdGhlciBub3QgZGlzYWJsZSB0aGUg ZGlzcGxheS1yZWxhdGVkIGZlYXR1cmVzDQotdGhhdCBAY29kZXtzby1sb25n LW1vZGV9IHR1cm5zIG9mZiwgeW91IGNhbiBpbnN0ZWFkIGN1c3RvbWl6ZSB0 aGUNCi12YXJpYWJsZSBAY29kZXttYXgtcmVkaXNwbGF5LXRpY2tzfSB0byBh IG5vbi16ZXJvIHZhbHVlLiAgVGhlbiBFbWFjcw0KLXdpbGwgYWJvcnQgcmVk aXNwbGF5IG9mIGEgd2luZG93IGFuZCBjb21tYW5kcywgbGlrZSBAa2Jke0Mt bn0gYW5kDQotQGtiZHtNLXZ9LCB3aGljaCB1c2UgdGhlIGRpc3BsYXkgY29k ZSB0byBkbyB0aGVpciBqb2IsIGlmIHByb2Nlc3NpbmcgYQ0KLXdpbmRvdyBu ZWVkcyBtb3JlIGxvdy1sZXZlbCBkaXNwbGF5IG9wZXJhdGlvbnMgdGhhbiB0 aGUgdmFsdWUgb2YgdGhpcw0KLXZhcmlhYmxlLiAgVGhlIGRpc3BsYXkgb2Yg dGhlIG9mZmVuZGluZyB3aW5kb3cgd2lsbCB0aGVuIHJlbWFpbg0KLW91dGRh dGVkLCBhbmQgcG9zc2libHkgaW5jb21wbGV0ZSwgb24gdGhlIHNjcmVlbiwg YnV0IEVtYWNzIHNob3VsZA0KLW90aGVyd2lzZSBiZSByZXNwb25zaXZlLCBh bmQgeW91IGNvdWxkIHRoZW4gc3dpdGNoIHRvIGFub3RoZXIgYnVmZmVyLA0K LW9yIGtpbGwgdGhlIHByb2JsZW1hdGljIGJ1ZmZlciwgb3IgdHVybiBvbiBA Y29kZXtzby1sb25nLW1vZGV9IG9yDQotQGNvZGV7c28tbG9uZy1taW5vci1t b2RlfSBpbiB0aGF0IGJ1ZmZlci4gIFdoZW4gdGhlIGRpc3BsYXkgb2YgYQ0K LXdpbmRvdyBpcyBhYm9ydGVkIGR1ZSB0byB0aGlzIHJlYXNvbiwgdGhlIGJ1 ZmZlciBzaG93biBpbiB0aGF0IHdpbmRvdw0KLXdpbGwgbm90IGhhdmUgYW55 IG9mIGl0cyB3aW5kb3dzIHJlZGlzcGxheWVkIHVudGlsIHRoZSBidWZmZXIg aXMNCi1tb2RpZmllZCBvciB1bnRpbCB5b3UgdHlwZSBAa2Jke0MtbH0gKEBw eHJlZntSZWNlbnRlcmluZ30pIGluIG9uZSBvZg0KLXRoYXQgYnVmZmVyJ3Mg d2luZG93cy4NCi0NCi0gIElmIHlvdSBkZWNpZGUgdG8gY3VzdG9taXplIHRo aXMgdmFyaWFibGUgdG8gYSBub24temVybyB2YWx1ZSwgd2UNCi1yZWNvbW1l bmQgdG8gdXNlIGEgdmFsdWUgYmV0d2VlbiAxMDAsMDAwIGFuZCAxLDAwMCww MDAsIGRlcGVuZGluZyBvbg0KLXlvdXIgcGF0aWVuY2UgYW5kIHRoZSBzcGVl ZCBvZiB5b3VyIHN5c3RlbS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzDQotemVy bywgd2hpY2ggZGlzYWJsZXMgdGhpcyBmZWF0dXJlLg0KLQ0KIEBub2RlIERF TCBEb2VzIE5vdCBEZWxldGUNCiBAc3Vic2VjdGlvbiBJZiBAa2V5e0RFTH0g RmFpbHMgdG8gRGVsZXRlDQogQGNpbmRleCBAa2V5e0RFTH0gdnMgQGtleXtC QUNLU1BBQ0V9DQpkaWZmIC0tZ2l0IGEvZXRjL05FV1MgYi9ldGMvTkVXUw0K aW5kZXggNzk2NzE5MGM2ZS4uMzBjNzFlN2YwYyAxMDA2NDQNCi0tLSBhL2V0 Yy9ORVdTDQorKysgYi9ldGMvTkVXUw0KQEAgLTMyNCw5ICszMjQsNiBAQCBz dGFydHVwLiAgUHJldmlvdXNseSwgdGhlc2UgZnVuY3Rpb25zIGlnbm9yZWQN CiAMDQogKiBDaGFuZ2VzIGluIEVtYWNzIDI5LjENCiANCi0tLS0NCi0qKiAn bG9uZ2xpbmVzLW1vZGUnIGlzIG5vIGxvbmdlciBvYnNvbGV0ZS4NCi0NCiAr KysNCiAqKiBOZXcgY29tbWFuZCB0byBjaGFuZ2UgdGhlIGZvbnQgc2l6ZSBn bG9iYWxseS4NCiBUbyBpbmNyZWFzZSB0aGUgZm9udCBzaXplLCB0eXBlICdD LXggQy1NLSsnIG9yICdDLXggQy1NLT0nOyB0bw0KQEAgLTkwMSw2ICs4OTgs MTggQEAgRm9ybWVybHkgaXQgaW52b2tlZCAnanVzdC1vbmUtc3BhY2UnLiAg VGhlIGFjdGlvbnMgcGVyZm9ybWVkIGJ5DQogJ2N5Y2xlLXNwYWNpbmcnIGFu ZCB0aGVpciBvcmRlciBjYW4gbm93IGJlIGN1c3RvbWl6ZWQgdmlhIHRoZSB1 c2VyDQogb3B0aW9uICdjeWNsZS1zcGFjaW5nLWFjdGlvbnMnLg0KIA0KKysr Kw0KKyoqIEVtYWNzIGlzIG5vdyBjYXBhYmxlIG9mIGVkaXRpbmcgZmlsZXMg d2l0aCBhcmJpdGFyaWx5IGxvbmcgbGluZXMuDQorV2hlbiBhIGZpbGUgd2l0 aCBsb25nIGxpbmVzIGlzIG9wZW5lZCBvciBpbnNlcnRlZCBpbiBhIGJ1ZmZl ciwgRW1hY3MNCithdXRvbWF0aWNhbGx5IGVudGVycyBhdXRvLW5hcnJvdyBt b2RlLiAgVGhpcyBtZWFucyB0aGF0IEVtYWNzDQorcmVzdHJpY3RzIGRpc3Bs YXksIGJ1dCBub3QgZWRpdGluZywgdG8gYSBwb3J0aW9uIG9mIHRoZSBidWZm ZXIgYWJvdmUNCithbmQgYmVsb3cgcG9pbnQuICBBbGwgZWRpdGluZyBjb21t YW5kcywgaW5jbHVkaW5nIG5hcnJvd2luZyBjb21tYW5kcywNCityZW1haW4g YXZhaWxhYmxlLCBhbmQgdGhleSBhY3Qgb24gdGhlIHdob2xlIGJ1ZmZlci4g IFRoZSBiZWhhdmlvciBvZg0KK3RoYXQgbW9kZSBpcyBjb250cm9sbGVkIGJ5 IHRocmVlIHZhcmlhYmxlczoNCithdXRvLW5hcnJvdy1sb25nLWxpbmUtdGhy ZXNob2xkLCBhdXRvLW5hcnJvdy1kaXNwbGF5LWxlbmd0aCBhbmQNCithdXRv LW5hcnJvdy13aWRlbi1hdXRvbWF0aWNhbGx5LiAgVG8gZGlzYWJsZSB0aGF0 IGZlYXR1cmUsIHNldA0KK2F1dG8tbmFycm93LWxvbmctbGluZS10aHJlc2hv bGQgdG8gbmlsIGluIHlvdXIgaW5pdCBmaWxlLg0KKw0KIC0tLQ0KICoqICd6 YXAtdG8tY2hhcicgYW5kICd6YXAtdXAtdG8tY2hhcicgYXJlIGNhc2Utc2Vu c2l0aXZlIGZvciB1cHBlci1jYXNlIGNoYXJzLg0KIFRoZXNlIGNvbW1hbmRz IG5vdyBiZWhhdmUgYXMgY2FzZS1zZW5zaXRpdmUgZm9yIGludGVyYWN0aXZl IGNhbGxzIHdoZW4NCmRpZmYgLS1naXQgYS9saXNwL2JpbmRpbmdzLmVsIGIv bGlzcC9iaW5kaW5ncy5lbA0KaW5kZXggMGNmMTgzNGE0Zi4uZmE1MDQwNzc2 ZCAxMDA2NDQNCi0tLSBhL2xpc3AvYmluZGluZ3MuZWwNCisrKyBiL2xpc3Av YmluZGluZ3MuZWwNCkBAIC00MDAsMTAgKzQwMCwxNCBAQCBtb2RlLWxpbmUt bW9kZXMNCiBtb3VzZS0yOiBTaG93IGhlbHAgZm9yIG1pbm9yIG1vZGVcblwN CiBtb3VzZS0zOiBUb2dnbGUgbWlub3IgbW9kZXMiDQogCQkJbG9jYWwtbWFw ICxtb2RlLWxpbmUtbWlub3ItbW9kZS1rZXltYXApDQotCSAgKHByb3BlcnRp emUgIiVuIiAnaGVscC1lY2hvICJtb3VzZS0yOiBSZW1vdmUgbmFycm93aW5n IGZyb20gYnVmZmVyIg0KLQkJICAgICAgJ21vdXNlLWZhY2UgJ21vZGUtbGlu ZS1oaWdobGlnaHQNCi0JCSAgICAgICdsb2NhbC1tYXAgKG1ha2UtbW9kZS1s aW5lLW1vdXNlLW1hcA0KLQkJCQkgICdtb3VzZS0yICMnbW9kZS1saW5lLXdp ZGVuKSkNCisgICAgICAgICAgJyg6ZXZhbA0KKyAgICAgICAgICAgIChpZiAo bm90IChlcSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdhdXRvKSkNCisgICAg ICAgICAgICAgICAgKHByb3BlcnRpemUgIiVuIg0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnaGVscC1lY2hvICJtb3VzZS0yOiBSZW1vdmUgbmFy cm93aW5nIGZyb20gYnVmZmVyIg0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnbW91c2UtZmFjZSAnbW9kZS1saW5lLWhpZ2hsaWdodA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnbG9jYWwtbWFwIChtYWtlLW1vZGUt bGluZS1tb3VzZS1tYXANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ21vdXNlLTIgIydtb2RlLWxpbmUtd2lkZW4pKQ0KKyAg ICAgICAgICAgICAgIiVuIikpDQogCSAgIikiDQogCSAgKHByb3BlcnRpemUg IiVdIiAnaGVscC1lY2hvIHJlY3Vyc2l2ZS1lZGl0LWhlbHAtZWNobykNCiAJ ICAiICIpKQ0KZGlmZiAtLWdpdCBhL2xpc3AvZmlsZXMuZWwgYi9saXNwL2Zp bGVzLmVsDQppbmRleCA4ODEyMTc1MDE0Li5hYmRlZWE3YTgwIDEwMDY0NA0K LS0tIGEvbGlzcC9maWxlcy5lbA0KKysrIGIvbGlzcC9maWxlcy5lbA0KQEAg LTI2NDgsNiArMjY0OCw5OCBAQCBmaW5kLWZpbGUtbGl0ZXJhbGx5DQogICAJ ICAoY29uZmlybS1ub25leGlzdGVudC1maWxlLW9yLWJ1ZmZlcikpKSkNCiAg IChzd2l0Y2gtdG8tYnVmZmVyIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZW5h bWUgbmlsIHQpKSkNCiAMDQorKGRlZmN1c3RvbSBhdXRvLW5hcnJvdy1kaXNw bGF5LWxlbmd0aCAzMDAwMA0KKyAgIk51bWJlciBvZiBjaGFyYWN0ZXJzIHRv IHdoaWNoIGRpc3BsYXkgaXMgcmVzdHJpY3RlZCBpbiBgYXV0by1uYXJyb3ct bW9kZScuIg0KKyAgOmdyb3VwICdmaWxlcw0KKyAgOmdyb3VwICdmaW5kLWZp bGUNCisgIDp2ZXJzaW9uICIyOS4xIg0KKyAgOnR5cGUgJ2ludGVnZXIpDQor DQorKGRlZmN1c3RvbSBhdXRvLW5hcnJvdy13aWRlbi1hdXRvbWF0aWNhbGx5 DQorICAnKCBtb3ZlLWJlZ2lubmluZy1vZi1saW5lIG1vdmUtZW5kLW9mLWxp bmUgYmFja3dhcmQtc2VudGVuY2UgZm9yd2FyZC1zZW50ZW5jZQ0KKyAgICAg YmFja3dhcmQtc2V4cCBmb3J3YXJkLXNleHAgYmVnaW5uaW5nLW9mLWRlZnVu IGVuZC1vZi1kZWZ1bg0KKyAgICAgYmVnaW5uaW5nLW9mLWJ1ZmZlciBlbmQt b2YtYnVmZmVyIGdvdG8tY2hhciBnb3RvLWxpbmUNCisgICAgIG1hcmstc2V4 cCBtYXJrLWRlZnVuIG1hcmstcGFyYWdyYXBoIG1hcmstd2hvbGUtYnVmZmVy IG1hcmstcGFnZQ0KKyAgICAgZXhjaGFuZ2UtcG9pbnQtYW5kLW1hcmsgcG9w LWdsb2JhbC1tYXJrIHNldC1tYXJrLWNvbW1hbmQganVtcC10by1yZWdpc3Rl cg0KKyAgICAgYm9va21hcmstanVtcCkNCisgICJDb21tYW5kcyBmb3Igd2hp Y2ggZGlzcGxheSBpcyBhdXRvbWF0aWNhbGx5IHdpZGVuZWQgaW4gYGF1dG8t bmFycm93LW1vZGUnLiINCisgIDpncm91cCAnZmlsZXMNCisgIDpncm91cCAn ZmluZC1maWxlDQorICA6dmVyc2lvbiAiMjkuMSINCisgIDp0eXBlICcocmVw ZWF0IGZ1bmN0aW9uKSkNCisNCisoZGVmdmFyLWxvY2FsIGF1dG8tbmFycm93 LS13aWRlbi1hdXRvbWF0aWNhbGx5IG5pbA0KKyAgIkludGVybmFsIHZhcmlh YmxlIHVzZWQgYnkgYGF1dG8tbmFycm93LW1vZGUnLiIpDQorDQorKGRlZnZh ci1sb2NhbCBhdXRvLW5hcnJvdy0taXNlYXJjaC13aWRlbi1hdXRvbWF0aWNh bGx5IG5pbA0KKyAgIkludGVybmFsIHZhcmlhYmxlIHVzZWQgYnkgYGF1dG8t bmFycm93LW1vZGUnLiIpDQorDQorKGRlZnZhci1sb2NhbCBhdXRvLW5hcnJv dy0taW5pdGlhbGl6ZWQgbmlsDQorICAiSW50ZXJuYWwgdmFyaWFibGUgdXNl ZCBieSBgYXV0by1uYXJyb3ctbW9kZScuIikNCisNCisoZGVmdW4gYXV0by1u YXJyb3ctcHJlLWNvbW1hbmQtZnVuY3Rpb24gKCkNCisgICJDb25kaXRpb25h bGx5IHdpZGVuIGRpc3BsYXkgd2hlbiBgYXV0by1uYXJyb3ctbW9kZScgaXMg aW4gZWZmZWN0LiINCisgICh3aGVuIGF1dG8tbmFycm93LW1vZGUNCisgICAg KHVubGVzcyBhdXRvLW5hcnJvdy0taW5pdGlhbGl6ZWQNCisgICAgICAoc2V0 cSBhdXRvLW5hcnJvdy0td2lkZW4tYXV0b21hdGljYWxseSB3aWRlbi1hdXRv bWF0aWNhbGx5DQorICAgICAgICAgICAgYXV0by1uYXJyb3ctLWlzZWFyY2gt d2lkZW4tYXV0b21hdGljYWxseSBpc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2Fs bHkNCisgICAgICAgICAgICBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdhdXRv DQorICAgICAgICAgICAgYXV0by1uYXJyb3ctLWluaXRpYWxpemVkIHQpKQ0K KyAgICAoc2V0cS1sb2NhbCB3aWRlbi1hdXRvbWF0aWNhbGx5IHQNCisgICAg ICAgICAgICAgICAgaXNlYXJjaC13aWRlbi1hdXRvbWF0aWNhbGx5IHQpDQor ICAgIChpZiAobWVtcSB0aGlzLWNvbW1hbmQgJyhuYXJyb3ctdG8tcmVnaW9u IG5hcnJvdy10by1kZWZ1biBuYXJyb3ctdG8tcGFnZSkpDQorICAgICAgICAo c2V0cSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdleHBsaWNpdA0KKyAgICAg ICAgICAgICAgd2lkZW4tYXV0b21hdGljYWxseSBhdXRvLW5hcnJvdy0td2lk ZW4tYXV0b21hdGljYWxseQ0KKyAgICAgICAgICAgICAgaXNlYXJjaC13aWRl bi1hdXRvbWF0aWNhbGx5IGF1dG8tbmFycm93LS1pc2VhcmNoLXdpZGVuLWF1 dG9tYXRpY2FsbHkpKQ0KKyAgICAoaWYgKGVxIHRoaXMtY29tbWFuZCAnd2lk ZW4pDQorICAgICAgICAoc2V0cSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdh dXRvKSkNCisgICAgKHdoZW4gKGFuZCAobm90IChlcSBhdXRvLW5hcnJvdy0t bmFycm93aW5nICdleHBsaWNpdCkpDQorICAgICAgICAgICAgICAgKG1lbXEg dGhpcy1jb21tYW5kIGF1dG8tbmFycm93LXdpZGVuLWF1dG9tYXRpY2FsbHkp KQ0KKyAgICAgICh3aWRlbikpKSkNCisNCisoZGVmdW4gYXV0by1uYXJyb3ct cG9zdC1jb21tYW5kLWZ1bmN0aW9uICgpDQorICAiVXBkYXRlIGRpc3BsYXkg bmFycm93aW5nIHdoZW4gYGF1dG8tbmFycm93LW1vZGUnIGlzIGluIGVmZmVj dC4iDQorICAod2hlbiAoYW5kIGF1dG8tbmFycm93LW1vZGUNCisgICAgICAg ICAgICAgKG5vdCAoZXEgYXV0by1uYXJyb3ctLW5hcnJvd2luZyAnZXhwbGlj aXQpKSkNCisgICAgKHVubGVzcyBhdXRvLW5hcnJvdy0taW5pdGlhbGl6ZWQN CisgICAgICAoc2V0cSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdhdXRvKSkN CisgICAgKGxldCAocG9pbnQgY3VyLXBvaW50LW1pbiBidWYtcG9pbnQtbWlu IGJ1Zi1wb2ludC1tYXggc2l6ZSkNCisgICAgICAoc2V0cSBwb2ludCAocG9p bnQpIGN1ci1wb2ludC1taW4gKHBvaW50LW1pbikNCisgICAgICAgICAgICBz aXplICgvIGF1dG8tbmFycm93LWRpc3BsYXktbGVuZ3RoIDMpKQ0KKyAgICAg IChzYXZlLXJlc3RyaWN0aW9uDQorICAgICAgICAod2lkZW4pDQorICAgICAg ICAoc2V0cSBidWYtcG9pbnQtbWluIChwb2ludC1taW4pIGJ1Zi1wb2ludC1t YXggKHBvaW50LW1heCkpKQ0KKyAgICAgIChsZXQqICgocG9zICgqIChtaW4g KG1heCAoLyBwb2ludCBzaXplKSAxKQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgKDEtICgvIGJ1Zi1wb2ludC1tYXggc2l6ZSkpKQ0KKyAgICAgICAg ICAgICAgICAgICAgIHNpemUpKQ0KKyAgICAgICAgICAgICAoYmVnaW4gKG1h eCAoLSBwb3Mgc2l6ZSkgYnVmLXBvaW50LW1pbikpDQorICAgICAgICAgICAg IChlbmQgKG1pbiAoKyBiZWdpbiAoKiAzIHNpemUpKSBidWYtcG9pbnQtbWF4 KSkpDQorICAgICAgICAod2hlbiAob3IgKG5vdCAoYnVmZmVyLW5hcnJvd2Vk LXApKQ0KKwkJICAobm90ICg9IGJlZ2luIGN1ci1wb2ludC1taW4pKSkNCisJ ICAobmFycm93LXRvLXJlZ2lvbiBiZWdpbiBlbmQpKSkpKSkNCisNCisoc2V0 cSBhdXRvLW5hcnJvdy1sb25nLWxpbmUtdGhyZXNob2xkIDMwMDAwDQorICAg ICAgYXV0by1uYXJyb3ctcHJlLWNvbW1hbmQtZnVuY3Rpb24gIydhdXRvLW5h cnJvdy1wcmUtY29tbWFuZC1mdW5jdGlvbg0KKyAgICAgIGF1dG8tbmFycm93 LXBvc3QtY29tbWFuZC1mdW5jdGlvbiAjJ2F1dG8tbmFycm93LXBvc3QtY29t bWFuZC1mdW5jdGlvbikNCisNCisoZGVmaW5lLW1pbm9yLW1vZGUgYXV0by1u YXJyb3ctbW9kZQ0KKyAgIkF1dG9tYXRpY2FsbHkgbmFycm93IHRoZSBkaXNw bGF5IG9mIGEgYnVmZmVyIGFib3ZlIGFuZCBiZWxvdyBwb2ludC4NCisNCitU aGlzIG1vZGUgaXMgYXV0b21hdGljYWxseSBlbnRlcmVkIHdoZW4gYSBmaWxl IHdpdGggb25lIG9yIG1vcmUgbGluZXMNCitsb25nZXIgdGhhbiBgYXV0by1u YXJyb3ctbG9uZy1saW5lLXRocmVzaG9sZCcgaXMgb3BlbmVkIG9yIGluc2Vy dGVkDQoraW4gYSBidWZmZXIuICBJdCByZXN0cmljdHMgZGlzcGxheSwgYnV0 IG5vdCBlZGl0aW5nLCB0bw0KK2BhdXRvLW5hcnJvdy1kaXNwbGF5LWxlbmd0 aCcgY2hhcmFjdGVycy4gIERpc3BsYXkgaXMgd2lkZW5lZCBiZWZvcmUNCitl eGVjdXRpbmcgYW55IG9mIHRoZSBjb21tYW5kcyBsaXN0ZWQgaW4gYGF1dG8t bmFycm93LXdpZGVuLWF1dG9tYXRpY2FsbHknLiINCisgIDpncm91cCAnZmls ZXMNCisgIDp2ZXJzaW9uICIyOS4xIg0KKyAgOmFmdGVyLWhvb2sgKHByb2du IChwdXQgJ2F1dG8tbmFycm93LW1vZGUgJ3Blcm1hbmVudC1sb2NhbCB0KQ0K KyAgICAgICAgICAgICAgICAgICAgIChwdXQgJ2F1dG8tbmFycm93LS1uYXJy b3dpbmcgJ3Blcm1hbmVudC1sb2NhbCB0KSkNCisgIChpZiBhdXRvLW5hcnJv dy1tb2RlDQorICAgICAgKGF1dG8tbmFycm93LXBvc3QtY29tbWFuZC1mdW5j dGlvbikNCisgICAgKHdoZW4gKG5vdCAoZXEgYXV0by1uYXJyb3ctLW5hcnJv d2luZyAnZXhwbGljaXQpKQ0KKyAgICAgICh3aWRlbikpDQorICAgIChzZXRx IGF1dG8tbmFycm93LS1uYXJyb3dpbmcgbmlsKSkpDQorDA0KIChkZWZ1biBh ZnRlci1maW5kLWZpbGUgKCZvcHRpb25hbCBlcnJvciB3YXJuIG5vYXV0bw0K IAkJCQkgIF9hZnRlci1maW5kLWZpbGUtZnJvbS1yZXZlcnQtYnVmZmVyDQog CQkJCSAgbm9tb2RlcykNCmRpZmYgLS1naXQgYS9saXNwL2lzZWFyY2guZWwg Yi9saXNwL2lzZWFyY2guZWwNCmluZGV4IGRiN2I1M2MwMTQuLmE2ZTAzNGRm NmIgMTAwNjQ0DQotLS0gYS9saXNwL2lzZWFyY2guZWwNCisrKyBiL2xpc3Av aXNlYXJjaC5lbA0KQEAgLTMwMzcsNiArMzAzNywxMyBAQCBpc2VhcmNoLWFs bG93LXByZWZpeA0KICAgOnR5cGUgJ2Jvb2xlYW4NCiAgIDpncm91cCAnaXNl YXJjaCkNCiANCisoZGVmY3VzdG9tIGlzZWFyY2gtd2lkZW4tYXV0b21hdGlj YWxseSBuaWwNCisgICJXaGV0aGVyIGEgbmFycm93ZWQgYnVmZmVyIGNhbiBi ZSB3aWRlbmVkIHdoZW4gaXNlYXJjaCBmYWlscy4NCitUaGlzIG9wdGlvbiBo YXMgbm8gZWZmZWN0IHdoZW4gYHdpZGVuLWF1dG9tYXRpY2FsbHknIGlzIG5p bC4iDQorICA6dmVyc2lvbiAiMjkuMSINCisgIDp0eXBlICdib29sZWFuDQor ICA6Z3JvdXAgJ2lzZWFyY2gpDQorDQogKGRlZnVuIGlzZWFyY2gtc3RyaW5n LW91dC1vZi13aW5kb3cgKGlzZWFyY2gtcG9pbnQpDQogICAiVGVzdCB3aGV0 aGVyIHRoZSBzZWFyY2ggc3RyaW5nIGlzIGN1cnJlbnRseSBvdXRzaWRlIG9m IHRoZSB3aW5kb3cuDQogUmV0dXJuIG5pbCBpZiBpdCdzIGNvbXBsZXRlbHkg dmlzaWJsZSwgb3IgaWYgcG9pbnQgaXMgdmlzaWJsZSwNCkBAIC0zNjQ5LDE3 ICszNjU2LDIwIEBAIGlzZWFyY2gtc2VhcmNoDQogCSh3aGlsZSByZXRyeQ0K IAkgIChzZXRxIGlzZWFyY2gtc3VjY2Vzcw0KIAkJKGlzZWFyY2gtc2VhcmNo LXN0cmluZyBpc2VhcmNoLXN0cmluZyBuaWwgdCkpDQotCSAgOzsgQ2xlYXIg UkVUUlkgdW5sZXNzIHRoZSBzZWFyY2ggcHJlZGljYXRlIHNheXMNCi0JICA7 OyB0byBza2lwIHRoaXMgc2VhcmNoIGhpdC4NCi0JICAoaWYgKG9yIChub3Qg aXNlYXJjaC1zdWNjZXNzKQ0KLQkJICAoZnVuY2FsbCBpc2VhcmNoLWZpbHRl ci1wcmVkaWNhdGUNCi0JCQkgICAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRj aC1lbmQgMCkpKQ0KLQkgICAgICAoc2V0cSByZXRyeSBuaWwpDQotCSAgICA7 OyBBZHZhbmNlIHBvaW50IG9uIGVtcHR5IG1hdGNoZXMgYmVmb3JlIHJldHJ5 aW5nDQotCSAgICAod2hlbiAoPSAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRj aC1lbmQgMCkpDQotCSAgICAgIChpZiAoaWYgaXNlYXJjaC1mb3J3YXJkIChl b2JwKSAoYm9icCkpDQotCQkgIChzZXRxIHJldHJ5IG5pbCBpc2VhcmNoLXN1 Y2Nlc3MgbmlsKQ0KLQkJKGZvcndhcmQtY2hhciAoaWYgaXNlYXJjaC1mb3J3 YXJkIDEgLTEpKSkpKSkNCisgICAgICAgICAgKGlmIChhbmQgKG5vdCBpc2Vh cmNoLXN1Y2Nlc3MpIChidWZmZXItbmFycm93ZWQtcCkNCisgICAgICAgICAg ICAgICAgICAgaXNlYXJjaC13aWRlbi1hdXRvbWF0aWNhbGx5IHdpZGVuLWF1 dG9tYXRpY2FsbHkpDQorICAgICAgICAgICAgICAod2lkZW4pDQorCSAgICA7 OyBDbGVhciBSRVRSWSB1bmxlc3MgdGhlIHNlYXJjaCBwcmVkaWNhdGUgc2F5 cw0KKwkgICAgOzsgdG8gc2tpcCB0aGlzIHNlYXJjaCBoaXQuDQorCSAgICAo aWYgKG9yIChub3QgaXNlYXJjaC1zdWNjZXNzKQ0KKwkJICAgIChmdW5jYWxs IGlzZWFyY2gtZmlsdGVyLXByZWRpY2F0ZQ0KKwkJCSAgICAgKG1hdGNoLWJl Z2lubmluZyAwKSAobWF0Y2gtZW5kIDApKSkNCisJICAgICAgICAoc2V0cSBy ZXRyeSBuaWwpDQorCSAgICAgIDs7IEFkdmFuY2UgcG9pbnQgb24gZW1wdHkg bWF0Y2hlcyBiZWZvcmUgcmV0cnlpbmcNCisJICAgICAgKHdoZW4gKD0gKG1h dGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKQ0KKwkgICAgICAgIChp ZiAoaWYgaXNlYXJjaC1mb3J3YXJkIChlb2JwKSAoYm9icCkpDQorCQkgICAg KHNldHEgcmV0cnkgbmlsIGlzZWFyY2gtc3VjY2VzcyBuaWwpDQorCQkgIChm b3J3YXJkLWNoYXIgKGlmIGlzZWFyY2gtZm9yd2FyZCAxIC0xKSkpKSkpKQ0K IAkoc2V0cSBpc2VhcmNoLWp1c3Qtc3RhcnRlZCBuaWwpDQogCSh3aGVuIGlz ZWFyY2gtc3VjY2Vzcw0KIAkgIChzZXRxIGlzZWFyY2gtb3RoZXItZW5kDQpk aWZmIC0tZ2l0IGEvbGlzcC9sb25nbGluZXMuZWwgYi9saXNwL2xvbmdsaW5l cy5lbA0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCBhNmNmOTNh MDM5Li4wMDAwMDAwMDAwDQotLS0gYS9saXNwL2xvbmdsaW5lcy5lbA0KKysr IC9kZXYvbnVsbA0KQEAgLTEsNTAyICswLDAgQEANCi07OzsgbG9uZ2xpbmVz LmVsIC0tLSBhdXRvbWF0aWNhbGx5IHdyYXAgbG9uZyBsaW5lcyAgIC0qLSBs ZXhpY2FsLWJpbmRpbmc6IHQ7IC0qLQ0KLQ0KLTs7IENvcHlyaWdodCAoQykg MjAwMC0yMDAxLCAyMDA0LTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuDQotDQotOzsgQXV0aG9yczogICAgS2FpIEdyb3Nzam9oYW5uIDxL YWkuR3Jvc3Nqb2hhbm5AQ1MuVW5pLURvcnRtdW5kLkRFPg0KLTs7ICAgICAg ICAgICAgIEFsZXggU2Nocm9lZGVyIDxhbGV4QGdudS5vcmc+DQotOzsgICAg ICAgICAgICAgQ2hvbmcgWWlkb25nIDxjeWRAc3R1cGlkY2hpY2tlbi5jb20+ DQotOzsgTWFpbnRhaW5lcjogZW1hY3MtZGV2ZWxAZ251Lm9yZw0KLTs7IEtl eXdvcmRzOiBjb252ZW5pZW5jZSwgd3ANCi0NCi07OyBUaGlzIGZpbGUgaXMg cGFydCBvZiBHTlUgRW1hY3MuDQotDQotOzsgR05VIEVtYWNzIGlzIGZyZWUg c29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkNCi07OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KLTs7IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yDQotOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4NCi0NCi07OyBHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCi07OyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZg0KLTs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCi07OyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KLQ0KLTs7 IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotOzsgYWxvbmcgd2l0aCBHTlUgRW1h Y3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+Lg0KLQ0KLTs7OyBDb21tZW50YXJ5Og0KLQ0KLTs7IFNvbWUgdGV4dCBl ZGl0b3JzIHNhdmUgdGV4dCBmaWxlcyB3aXRoIGxvbmcgbGluZXMsIGFuZCB0 aGV5DQotOzsgYXV0b21hdGljYWxseSBicmVhayB0aGVzZSBsaW5lcyBhdCB3 aGl0ZXNwYWNlLCB3aXRob3V0IGFjdHVhbGx5DQotOzsgaW5zZXJ0aW5nIGFu eSBuZXdsaW5lIGNoYXJhY3RlcnMuICBXaGVuIGRvaW5nIGBNLXEnIGluIEVt YWNzLCB5b3UNCi07OyBhcmUgaW5zZXJ0aW5nIG5ld2xpbmUgY2hhcmFjdGVy cy4gIExvbmdsaW5lcyBtb2RlIHByb3ZpZGVzIGEgZmlsZQ0KLTs7IGZvcm1h dCB3aGljaCB3cmFwcyB0aGUgbG9uZyBsaW5lcyB3aGVuIHJlYWRpbmcgYSBm aWxlIGFuZCB1bndyYXBzDQotOzsgdGhlIGxpbmVzIHdoZW4gc2F2aW5nIHRo ZSBmaWxlLiAgSXQgY2FuIGFsc28gd3JhcCBhbmQgdW53cmFwDQotOzsgYXV0 b21hdGljYWxseSBhcyBlZGl0aW5nIHRha2VzIHBsYWNlLg0KLQ0KLTs7IFNw ZWNpYWwgdGhhbmtzIHRvIFJvZCBTbWl0aCBmb3IgbWFueSB1c2VmdWwgYnVn IHJlcG9ydHMuDQotDQotOzs7IENvZGU6DQotOzs7IE9wdGlvbnMNCi0NCi0o ZGVmZ3JvdXAgbG9uZ2xpbmVzIG5pbA0KLSAgIkF1dG9tYXRpYyB3cmFwcGlu ZyBvZiBsb25nIGxpbmVzIHdoZW4gbG9hZGluZyBmaWxlcy4iDQotICA6Z3Jv dXAgJ2ZpbGwpDQotDQotKGRlZmN1c3RvbSBsb25nbGluZXMtYXV0by13cmFw IHQNCi0gICJOb24tbmlsIG1lYW5zIGxvbmcgbGluZXMgYXJlIGF1dG9tYXRp Y2FsbHkgd3JhcHBlZCBhZnRlciBlYWNoIGNvbW1hbmQuDQotT3RoZXJ3aXNl LCB5b3UgY2FuIHBlcmZvcm0gZmlsbGluZyB1c2luZyBgZmlsbC1wYXJhZ3Jh cGgnIG9yDQotYGF1dG8tZmlsbC1tb2RlJy4gIEluIGFueSBjYXNlLCB0aGUg c29mdCBuZXdsaW5lcyB3aWxsIGJlIHJlbW92ZWQNCi13aGVuIHRoZSBmaWxl IGlzIHNhdmVkIHRvIGRpc2suIg0KLSAgOnR5cGUgJ2Jvb2xlYW4pDQotDQot KGRlZmN1c3RvbSBsb25nbGluZXMtd3JhcC1mb2xsb3dzLXdpbmRvdy1zaXpl IG5pbA0KLSAgIk5vbi1uaWwgbWVhbnMgd3JhcHBpbmcgYW5kIGZpbGxpbmcg aGFwcGVuIGF0IHRoZSBlZGdlIG9mIHRoZSB3aW5kb3cuDQotT3RoZXJ3aXNl LCBgZmlsbC1jb2x1bW4nIGlzIHVzZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHdp bmRvdyBzaXplLiAgVGhpcw0KLWRvZXMgbm90IHdvcmsgd2VsbCB3aGVuIHRo ZSBidWZmZXIgaXMgZGlzcGxheWVkIGluIG11bHRpcGxlIHdpbmRvd3MNCi13 aXRoIGRpZmZlcmluZyB3aWR0aHMuDQotDQotSWYgdGhlIHZhbHVlIGlzIGFu IGludGVnZXIsIHRoYXQgc3BlY2lmaWVzIHRoZSBkaXN0YW5jZSBmcm9tIHRo ZQ0KLXJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdyBhdCB3aGljaCB3cmFwcGlu ZyBvY2N1cnMuICBGb3IgYW55IG90aGVyDQotbm9uLW5pbCB2YWx1ZSwgd3Jh cHBpbmcgb2NjdXJzIDIgY2hhcmFjdGVycyBmcm9tIHRoZSByaWdodCBlZGdl LiINCi0gIDp0eXBlICdib29sZWFuKQ0KLQ0KLShkZWZjdXN0b20gbG9uZ2xp bmVzLXNob3ctaGFyZC1uZXdsaW5lcyBuaWwNCi0gICJOb24tbmlsIG1lYW5z IGVhY2ggaGFyZCBuZXdsaW5lIGlzIG1hcmtlZCBvbiB0aGUgc2NyZWVuLg0K LVwoVGhlIHZhcmlhYmxlIGBsb25nbGluZXMtc2hvdy1lZmZlY3QnIGNvbnRy b2xzIHdoYXQgdGhleSBsb29rIGxpa2UuKQ0KLVlvdSBjYW4gYWxzbyBlbmFi bGUgdGhlIGRpc3BsYXkgdGVtcG9yYXJpbHksIHVzaW5nIHRoZSBjb21tYW5k DQotYGxvbmdsaW5lcy1zaG93LWhhcmQtbmV3bGluZXMnLiINCi0gIDp0eXBl ICdib29sZWFuKQ0KLQ0KLShkZWZjdXN0b20gbG9uZ2xpbmVzLXNob3ctZWZm ZWN0IChwcm9wZXJ0aXplICLCtlxuIiAnZmFjZSAnZXNjYXBlLWdseXBoKQ0K LSAgIkEgc3RyaW5nIHRvIGRpc3BsYXkgd2hlbiBzaG93aW5nIGhhcmQgbmV3 bGluZXMuDQotVGhpcyBpcyB1c2VkIHdoZW4gYGxvbmdsaW5lcy1zaG93LWhh cmQtbmV3bGluZXMnIGlzIG9uLiINCi0gIDp0eXBlICdzdHJpbmcpDQotDQot KGRlZmN1c3RvbSBsb25nbGluZXMtYnJlYWtwb2ludC1jaGFycyAiIDssfCIN Ci0gICJBIGJhZyBvZiBzZXBhcmF0b3IgY2hhcnMgZm9yIGxvbmdsaW5lcy4i DQotICA6dHlwZSAnc3RyaW5nKQ0KLQ0KLTs7OyBJbnRlcm5hbCB2YXJpYWJs ZXMNCi0NCi0oZGVmdmFyIGxvbmdsaW5lcy13cmFwLWJlZyBuaWwpDQotKGRl ZnZhciBsb25nbGluZXMtd3JhcC1lbmQgbmlsKQ0KLShkZWZ2YXIgbG9uZ2xp bmVzLXdyYXAtcG9pbnQgbmlsKQ0KLShkZWZ2YXIgbG9uZ2xpbmVzLXNob3dp bmcgbmlsKQ0KLShkZWZ2YXIgbG9uZ2xpbmVzLWRlY29kZWQgbmlsKQ0KLQ0K LShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnbG9uZ2xpbmVzLXdyYXAt YmVnKQ0KLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnbG9uZ2xpbmVz LXdyYXAtZW5kKQ0KLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnbG9u Z2xpbmVzLXdyYXAtcG9pbnQpDQotKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxv Y2FsICdsb25nbGluZXMtc2hvd2luZykNCi0obWFrZS12YXJpYWJsZS1idWZm ZXItbG9jYWwgJ2xvbmdsaW5lcy1kZWNvZGVkKQ0KLQ0KLTs7OyBNb2RlDQot DQotKGRlZnZhciBtZXNzYWdlLWluZGVudC1jaXRhdGlvbi1mdW5jdGlvbikN Ci0NCi07OzsjIyNhdXRvbG9hZA0KLShkZWZpbmUtbWlub3ItbW9kZSBsb25n bGluZXMtbW9kZQ0KLSAgIlRvZ2dsZSBMb25nIExpbmVzIG1vZGUgaW4gdGhp cyBidWZmZXIuDQotDQotV2hlbiBMb25nIExpbmVzIG1vZGUgaXMgZW5hYmxl ZCwgbG9uZyBsaW5lcyBhcmUgd3JhcHBlZCBpZiB0aGV5DQotZXh0ZW5kIGJl eW9uZCBgZmlsbC1jb2x1bW4nLiAgVGhlIHNvZnQgbmV3bGluZXMgdXNlZCBm b3IgbGluZQ0KLXdyYXBwaW5nIHdpbGwgbm90IHNob3cgdXAgd2hlbiB0aGUg dGV4dCBpcyB5YW5rZWQgb3Igc2F2ZWQgdG8NCi1kaXNrLg0KLQ0KLUlmIHRo ZSB2YXJpYWJsZSBgbG9uZ2xpbmVzLWF1dG8td3JhcCcgaXMgbm9uLW5pbCwg bGluZXMgYXJlDQotYXV0b21hdGljYWxseSB3cmFwcGVkIHdoZW5ldmVyIHRo ZSBidWZmZXIgaXMgY2hhbmdlZC4gIFlvdSBjYW4NCi1hbHdheXMgY2FsbCBg ZmlsbC1wYXJhZ3JhcGgnIHRvIGZpbGwgaW5kaXZpZHVhbCBwYXJhZ3JhcGhz Lg0KLQ0KLUlmIHRoZSB2YXJpYWJsZSBgbG9uZ2xpbmVzLXNob3ctaGFyZC1u ZXdsaW5lcycgaXMgbm9uLW5pbCwgaGFyZA0KLW5ld2xpbmVzIGFyZSBpbmRp Y2F0ZWQgd2l0aCBhIHN5bWJvbC4iDQotICA6bGlnaHRlciAiIGxsIg0KLSAg KGlmIGxvbmdsaW5lcy1tb2RlDQotICAgICAgOzsgVHVybiBvbiBsb25nbGlu ZXMgbW9kZQ0KLSAgICAgIChwcm9nbg0KLSAgICAgICAgKHVzZS1oYXJkLW5l d2xpbmVzIDEgJ25ldmVyKQ0KLSAgICAgICAgKHNldCAobWFrZS1sb2NhbC12 YXJpYWJsZSAncmVxdWlyZS1maW5hbC1uZXdsaW5lKSBuaWwpDQotICAgICAg ICAoYWRkLXRvLWxpc3QgJ2J1ZmZlci1maWxlLWZvcm1hdCAnbG9uZ2xpbmVz KQ0KLSAgICAgICAgKGFkZC1ob29rICdjaGFuZ2UtbWFqb3ItbW9kZS1ob29r ICMnbG9uZ2xpbmVzLW1vZGUtb2ZmIG5pbCB0KQ0KLQkoYWRkLWhvb2sgJ2Jl Zm9yZS1yZXZlcnQtaG9vayAjJ2xvbmdsaW5lcy1iZWZvcmUtcmV2ZXJ0LWhv b2sgbmlsIHQpDQotICAgICAgICAobWFrZS1sb2NhbC12YXJpYWJsZSAnYnVm ZmVyLXN1YnN0cmluZy1maWx0ZXJzKQ0KLSAgICAgICAgKG1ha2UtbG9jYWwt dmFyaWFibGUgJ2xvbmdsaW5lcy1hdXRvLXdyYXApDQotCShzZXQgKG1ha2Ut bG9jYWwtdmFyaWFibGUgJ2lzZWFyY2gtc2VhcmNoLWZ1bi1mdW5jdGlvbikN Ci0JICAgICAjJ2xvbmdsaW5lcy1zZWFyY2gtZnVuY3Rpb24pDQotCShzZXQg KG1ha2UtbG9jYWwtdmFyaWFibGUgJ3JlcGxhY2Utc2VhcmNoLWZ1bmN0aW9u KQ0KLQkgICAgICMnbG9uZ2xpbmVzLXNlYXJjaC1mb3J3YXJkKQ0KLQkoc2V0 IChtYWtlLWxvY2FsLXZhcmlhYmxlICdyZXBsYWNlLXJlLXNlYXJjaC1mdW5j dGlvbikNCi0JICAgICAjJ2xvbmdsaW5lcy1yZS1zZWFyY2gtZm9yd2FyZCkN Ci0gICAgICAgIChhZGQtdG8tbGlzdCAnYnVmZmVyLXN1YnN0cmluZy1maWx0 ZXJzICdsb25nbGluZXMtZW5jb2RlLXN0cmluZykNCi0gICAgICAgICh3aGVu IGxvbmdsaW5lcy13cmFwLWZvbGxvd3Mtd2luZG93LXNpemUNCi0JICAobGV0 ICgoZHcgKGlmIChhbmQgKGludGVnZXJwIGxvbmdsaW5lcy13cmFwLWZvbGxv d3Mtd2luZG93LXNpemUpDQotCQkJICAgICAoPj0gbG9uZ2xpbmVzLXdyYXAt Zm9sbG93cy13aW5kb3ctc2l6ZSAwKQ0KLQkJCSAgICAgKDwgbG9uZ2xpbmVz LXdyYXAtZm9sbG93cy13aW5kb3ctc2l6ZQ0KLQkJCQkod2luZG93LXdpZHRo KSkpDQotCQkJbG9uZ2xpbmVzLXdyYXAtZm9sbG93cy13aW5kb3ctc2l6ZQ0K LQkJICAgICAgMikpKQ0KLQkgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJs ZSAnZmlsbC1jb2x1bW4pDQotCQkgKC0gKHdpbmRvdy13aWR0aCkgZHcpKSkN Ci0gICAgICAgICAgKGFkZC1ob29rICd3aW5kb3ctY29uZmlndXJhdGlvbi1j aGFuZ2UtaG9vaw0KLSAgICAgICAgICAgICAgICAgICAgIydsb25nbGluZXMt d2luZG93LWNoYW5nZS1mdW5jdGlvbiBuaWwgdCkpDQotICAgICAgICAobGV0 ICgoYnVmZmVyLXVuZG8tbGlzdCB0KQ0KLSAgICAgICAgICAgICAgKGluaGli aXQtcmVhZC1vbmx5IHQpDQotCSAgICAgIChpbmhpYml0LW1vZGlmaWNhdGlv bi1ob29rcyB0KQ0KLSAgICAgICAgICAgICAgKG1vZCAoYnVmZmVyLW1vZGlm aWVkLXApKQ0KLQkgICAgICBidWZmZXItZmlsZS1uYW1lIGJ1ZmZlci1maWxl LXRydWVuYW1lKQ0KLSAgICAgICAgICA7OyBUdXJuaW5nIG9mZiB1bmRvIGlz IE9LIHNpbmNlIChzcGFjZXMgKyBuZXdsaW5lcykgaXMNCi0gICAgICAgICAg OzsgY29uc2VydmVkLCBleGNlcHQgZm9yIGEgY29ybmVyIGNhc2UgaW4NCi0g ICAgICAgICAgOzsgbG9uZ2xpbmVzLXdyYXAtbGluZXMgdGhhdCB3ZSdsbCBu ZXZlciBlbmNvdW50ZXIgZnJvbSBoZXJlDQotCSAgKHNhdmUtcmVzdHJpY3Rp b24NCi0JICAgICh3aWRlbikNCi0JICAgICh1bmxlc3MgbG9uZ2xpbmVzLWRl Y29kZWQNCi0JICAgICAgKGxvbmdsaW5lcy1kZWNvZGUtYnVmZmVyKQ0KLQkg ICAgICAoc2V0cSBsb25nbGluZXMtZGVjb2RlZCB0KSkNCi0JICAgIChsb25n bGluZXMtd3JhcC1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkpKQ0K LSAgICAgICAgICAoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG1vZCkpDQotICAg ICAgICAod2hlbiAoYW5kIGxvbmdsaW5lcy1zaG93LWhhcmQtbmV3bGluZXMN Ci0gICAgICAgICAgICAgICAgICAgKG5vdCBsb25nbGluZXMtc2hvd2luZykp DQotICAgICAgICAgIChsb25nbGluZXMtc2hvdy1oYXJkLW5ld2xpbmVzKSkN Ci0NCi0JOzsgSGFja3MgdG8gbWFrZSBsb25nbGluZXMgcGxheSBuaWNlIHdp dGggdmFyaW91cyBtb2Rlcy4NCi0JKGNvbmQgKChlcSBtYWpvci1tb2RlICdt YWlsLW1vZGUpDQotCSAgICAgICAoZGVjbGFyZS1mdW5jdGlvbiBtYWlsLWlu ZGVudC1jaXRhdGlvbiAic2VuZG1haWwiICgpKQ0KLQkgICAgICAgKGFkZC1o b29rICdtYWlsLXNldHVwLWhvb2sgIydsb25nbGluZXMtZGVjb2RlLWJ1ZmZl ciBuaWwgdCkNCi0JICAgICAgIChvciBtYWlsLWNpdGF0aW9uLWhvb2sNCi0J CSAgIChhZGQtaG9vayAnbWFpbC1jaXRhdGlvbi1ob29rICMnbWFpbC1pbmRl bnQtY2l0YXRpb24gbmlsIHQpKQ0KLQkgICAgICAgKGFkZC1ob29rICdtYWls LWNpdGF0aW9uLWhvb2sgIydsb25nbGluZXMtZGVjb2RlLXJlZ2lvbiBuaWwg dCkpDQotCSAgICAgICgoZXEgbWFqb3ItbW9kZSAnbWVzc2FnZS1tb2RlKQ0K LQkgICAgICAgKGFkZC1ob29rICdtZXNzYWdlLXNldHVwLWhvb2sgIydsb25n bGluZXMtZGVjb2RlLWJ1ZmZlciBuaWwgdCkNCi0JICAgICAgIChtYWtlLWxv Y2FsLXZhcmlhYmxlICdtZXNzYWdlLWluZGVudC1jaXRhdGlvbi1mdW5jdGlv bikNCi0JICAgICAgIChpZiAobm90IChsaXN0cCBtZXNzYWdlLWluZGVudC1j aXRhdGlvbi1mdW5jdGlvbikpDQotCQkgICAoc2V0cSBtZXNzYWdlLWluZGVu dC1jaXRhdGlvbi1mdW5jdGlvbg0KLQkJCSAobGlzdCBtZXNzYWdlLWluZGVu dC1jaXRhdGlvbi1mdW5jdGlvbikpKQ0KLQkgICAgICAgKGFkZC1ob29rICdt ZXNzYWdlLWluZGVudC1jaXRhdGlvbi1mdW5jdGlvbg0KLQkJCSAjJ2xvbmds aW5lcy1kZWNvZGUtcmVnaW9uIHQgdCkpKQ0KLQ0KLQkoYWRkLWhvb2sgJ2Fm dGVyLWNoYW5nZS1mdW5jdGlvbnMgIydsb25nbGluZXMtYWZ0ZXItY2hhbmdl LWZ1bmN0aW9uIG5pbCB0KQ0KLQkoYWRkLWhvb2sgJ3Bvc3QtY29tbWFuZC1o b29rICMnbG9uZ2xpbmVzLXBvc3QtY29tbWFuZC1mdW5jdGlvbiBuaWwgdCkN Ci0gICAgICAgICh3aGVuIGxvbmdsaW5lcy1hdXRvLXdyYXANCi0gICAgICAg ICAgKGF1dG8tZmlsbC1tb2RlIDApKSkNCi0gICAgOzsgVHVybiBvZmYgbG9u Z2xpbmVzIG1vZGUNCi0gICAgKHNldHEgYnVmZmVyLWZpbGUtZm9ybWF0IChk ZWxldGUgJ2xvbmdsaW5lcyBidWZmZXItZmlsZS1mb3JtYXQpKQ0KLSAgICAo aWYgbG9uZ2xpbmVzLXNob3dpbmcNCi0gICAgICAgIChsb25nbGluZXMtdW5z aG93LWhhcmQtbmV3bGluZXMpKQ0KLSAgICAobGV0ICgoYnVmZmVyLXVuZG8t bGlzdCB0KQ0KLQkgIChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KQ0K LSAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkNCi0JICBidWZmZXIt ZmlsZS1uYW1lIGJ1ZmZlci1maWxlLXRydWVuYW1lKQ0KLSAgICAgIChpZiBs b25nbGluZXMtZGVjb2RlZA0KLQkgIChzYXZlLXJlc3RyaWN0aW9uDQotCSAg ICAod2lkZW4pDQotCSAgICAobG9uZ2xpbmVzLWVuY29kZS1yZWdpb24gKHBv aW50LW1pbikgKHBvaW50LW1heCkpDQotCSAgICAoc2V0cSBsb25nbGluZXMt ZGVjb2RlZCBuaWwpKSkpDQotICAgIChyZW1vdmUtaG9vayAnY2hhbmdlLW1h am9yLW1vZGUtaG9vayAjJ2xvbmdsaW5lcy1tb2RlLW9mZiB0KQ0KLSAgICAo cmVtb3ZlLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgIydsb25nbGlu ZXMtYWZ0ZXItY2hhbmdlLWZ1bmN0aW9uIHQpDQotICAgIChyZW1vdmUtaG9v ayAncG9zdC1jb21tYW5kLWhvb2sgIydsb25nbGluZXMtcG9zdC1jb21tYW5k LWZ1bmN0aW9uIHQpDQotICAgIChyZW1vdmUtaG9vayAnYmVmb3JlLXJldmVy dC1ob29rICMnbG9uZ2xpbmVzLWJlZm9yZS1yZXZlcnQtaG9vayB0KQ0KLSAg ICAocmVtb3ZlLWhvb2sgJ3dpbmRvdy1jb25maWd1cmF0aW9uLWNoYW5nZS1o b29rDQotICAgICAgICAgICAgICAgICAjJ2xvbmdsaW5lcy13aW5kb3ctY2hh bmdlLWZ1bmN0aW9uIHQpDQotICAgICh3aGVuIGxvbmdsaW5lcy13cmFwLWZv bGxvd3Mtd2luZG93LXNpemUNCi0gICAgICAoa2lsbC1sb2NhbC12YXJpYWJs ZSAnZmlsbC1jb2x1bW4pKQ0KLSAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAn aXNlYXJjaC1zZWFyY2gtZnVuLWZ1bmN0aW9uKQ0KLSAgICAoa2lsbC1sb2Nh bC12YXJpYWJsZSAncmVwbGFjZS1zZWFyY2gtZnVuY3Rpb24pDQotICAgIChr aWxsLWxvY2FsLXZhcmlhYmxlICdyZXBsYWNlLXJlLXNlYXJjaC1mdW5jdGlv bikNCi0gICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3JlcXVpcmUtZmluYWwt bmV3bGluZSkNCi0gICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2J1ZmZlci1z dWJzdHJpbmctZmlsdGVycykNCi0gICAgKGtpbGwtbG9jYWwtdmFyaWFibGUg J3VzZS1oYXJkLW5ld2xpbmVzKSkpDQotDQotKGRlZnVuIGxvbmdsaW5lcy1t b2RlLW9mZiAoKQ0KLSAgIlR1cm4gb2ZmIGxvbmdsaW5lcyBtb2RlLg0KLVRo aXMgZnVuY3Rpb24gZXhpc3RzIHRvIGJlIGNhbGxlZCBieSBgY2hhbmdlLW1h am9yLW1vZGUtaG9vaycgd2hlbiB0aGUNCi1tYWpvciBtb2RlIGNoYW5nZXMu Ig0KLSAgKGxvbmdsaW5lcy1tb2RlIDApKQ0KLQ0KLTs7OyBTaG93aW5nIHRo ZSBlZmZlY3Qgb2YgaGFyZCBuZXdsaW5lcyBpbiB0aGUgYnVmZmVyDQotDQot KGRlZnVuIGxvbmdsaW5lcy1zaG93LWhhcmQtbmV3bGluZXMgKCZvcHRpb25h bCBhcmcpDQotICAiTWFrZSBoYXJkIG5ld2xpbmVzIHZpc2libGUgYnkgYWRk aW5nIGEgZmFjZS4NCi1XaXRoIG9wdGlvbmFsIGFyZ3VtZW50IEFSRywgbWFr ZSB0aGUgaGFyZCBuZXdsaW5lcyBpbnZpc2libGUgYWdhaW4uIg0KLSAgKGlu dGVyYWN0aXZlICJQIikNCi0gICAgKGlmIGFyZw0KLSAgICAgICAgKGxvbmds aW5lcy11bnNob3ctaGFyZC1uZXdsaW5lcykNCi0gICAgICAoc2V0cSBsb25n bGluZXMtc2hvd2luZyB0KQ0KLSAgICAgIChsb25nbGluZXMtc2hvdy1yZWdp b24gKHBvaW50LW1pbikgKHBvaW50LW1heCkpKSkNCi0NCi0oZGVmdW4gbG9u Z2xpbmVzLXNob3ctcmVnaW9uIChiZWcgZW5kKQ0KLSAgIk1ha2UgaGFyZCBu ZXdsaW5lcyBiZXR3ZWVuIEJFRyBhbmQgRU5EIHZpc2libGUuIg0KLSAgKGxl dCogKChwbWluIChtaW4gYmVnIGVuZCkpDQotICAgICAgICAgKHBtYXggKG1h eCBiZWcgZW5kKSkNCi0gICAgICAgICAocG9zICh0ZXh0LXByb3BlcnR5LW5v dC1hbGwgcG1pbiBwbWF4ICdoYXJkIG5pbCkpDQotCSAobW9kIChidWZmZXIt bW9kaWZpZWQtcCkpDQotCSAoYnVmZmVyLXVuZG8tbGlzdCB0KQ0KLQkgKGlu aGliaXQtcmVhZC1vbmx5IHQpDQotCSAoaW5oaWJpdC1tb2RpZmljYXRpb24t aG9va3MgdCkNCi0JIGJ1ZmZlci1maWxlLW5hbWUgYnVmZmVyLWZpbGUtdHJ1 ZW5hbWUpDQotICAgICh3aGlsZSBwb3MNCi0gICAgICAocHV0LXRleHQtcHJv cGVydHkgcG9zICgxKyBwb3MpICdkaXNwbGF5DQotCQkJIChjb3B5LXNlcXVl bmNlIGxvbmdsaW5lcy1zaG93LWVmZmVjdCkpDQotICAgICAgKHNldHEgcG9z ICh0ZXh0LXByb3BlcnR5LW5vdC1hbGwgKDErIHBvcykgcG1heCAnaGFyZCBu aWwpKSkNCi0gICAgKHJlc3RvcmUtYnVmZmVyLW1vZGlmaWVkLXAgbW9kKSkp DQotDQotKGRlZnVuIGxvbmdsaW5lcy11bnNob3ctaGFyZC1uZXdsaW5lcyAo KQ0KLSAgIk1ha2UgaGFyZCBuZXdsaW5lcyBpbnZpc2libGUgYWdhaW4uIg0K LSAgKGludGVyYWN0aXZlKQ0KLSAgKHNldHEgbG9uZ2xpbmVzLXNob3dpbmcg bmlsKQ0KLSAgKGxldCAoKHBvcyAodGV4dC1wcm9wZXJ0eS1ub3QtYWxsIChw b2ludC1taW4pIChwb2ludC1tYXgpICdoYXJkIG5pbCkpDQotCShtb2QgKGJ1 ZmZlci1tb2RpZmllZC1wKSkNCi0JKGJ1ZmZlci11bmRvLWxpc3QgdCkNCi0J KGluaGliaXQtcmVhZC1vbmx5IHQpDQotCShpbmhpYml0LW1vZGlmaWNhdGlv bi1ob29rcyB0KQ0KLQlidWZmZXItZmlsZS1uYW1lIGJ1ZmZlci1maWxlLXRy dWVuYW1lKQ0KLSAgICAod2hpbGUgcG9zDQotICAgICAgKHJlbW92ZS10ZXh0 LXByb3BlcnRpZXMgcG9zICgxKyBwb3MpICcoZGlzcGxheSBuaWwpKQ0KLSAg ICAgIChzZXRxIHBvcyAodGV4dC1wcm9wZXJ0eS1ub3QtYWxsICgxKyBwb3Mp IChwb2ludC1tYXgpICdoYXJkIG5pbCkpKQ0KLSAgICAocmVzdG9yZS1idWZm ZXItbW9kaWZpZWQtcCBtb2QpKSkNCi0NCi07OzsgV3JhcHBpbmcgdGhlIHBh cmFncmFwaHMNCi0NCi0oZGVmdW4gbG9uZ2xpbmVzLXdyYXAtcmVnaW9uIChi ZWcgZW5kKQ0KLSAgIldyYXAgZWFjaCBzdWNjZXNzaXZlIGxpbmUsIHN0YXJ0 aW5nIHdpdGggdGhlIGxpbmUgYmVmb3JlIEJFRy4NCi1TdG9wIHdoZW4gd2Ug cmVhY2ggbGluZXMgYWZ0ZXIgRU5EIHRoYXQgZG9uJ3QgbmVlZCB3cmFwcGlu Zywgb3IgdGhlDQotZW5kIG9mIHRoZSBidWZmZXIuIg0KLSAgKGxldCAoKG1v ZCAoYnVmZmVyLW1vZGlmaWVkLXApKSkNCi0gICAgKHNldHEgbG9uZ2xpbmVz LXdyYXAtcG9pbnQgKHBvaW50KSkNCi0gICAgKGdvdG8tY2hhciBiZWcpDQot ICAgIChmb3J3YXJkLWxpbmUgLTEpDQotICAgIDs7IFR3byBzdWNjZXNzZnVs IGxvbmdsaW5lcy13cmFwLWxpbmUncyBpbiBhIHJvdyBtZWFuIHN1Y2Nlc3Np dmUNCi0gICAgOzsgbGluZXMgZG9uJ3QgbmVlZCB3cmFwcGluZy4NCi0gICAg KHdoaWxlIChudWxsIChhbmQgKGxvbmdsaW5lcy13cmFwLWxpbmUpDQotCQkg ICAgICAob3IgKGVvYnApDQotCQkJICAoYW5kICg+PSAocG9pbnQpIGVuZCkN Ci0JCQkgICAgICAgKGxvbmdsaW5lcy13cmFwLWxpbmUpKSkpKSkNCi0gICAg KGdvdG8tY2hhciBsb25nbGluZXMtd3JhcC1wb2ludCkNCi0gICAgKHNldC1i dWZmZXItbW9kaWZpZWQtcCBtb2QpKSkNCi0NCi0oZGVmdW4gbG9uZ2xpbmVz LXdyYXAtbGluZSAoKQ0KLSAgIklmIHRoZSBjdXJyZW50IGxpbmUgbmVlZHMg dG8gYmUgd3JhcHBlZCwgd3JhcCBpdCBhbmQgcmV0dXJuIG5pbC4NCi1JZiB3 cmFwcGluZyBpcyBwZXJmb3JtZWQsIHBvaW50IHJlbWFpbnMgb24gdGhlIGxp bmUuICBJZiB0aGUgbGluZSBkb2VzDQotbm90IG5lZWQgdG8gYmUgd3JhcHBl ZCwgbW92ZSBwb2ludCB0byB0aGUgbmV4dCBsaW5lIGFuZCByZXR1cm4gdC4i DQotICAoaWYgKGxvbmdsaW5lcy1zZXQtYnJlYWtwb2ludCBmaWxsLWNvbHVt bikNCi0gICAgICAocHJvZ24gKGluc2VydC1iZWZvcmUtbWFya2Vycy1hbmQt aW5oZXJpdCA/XG4pDQotICAgICAgICAgICAgIG5pbCkNCi0gICAgKGlmIChs b25nbGluZXMtbWVyZ2UtbGluZXMtcCkNCi0gICAgICAgIChwcm9nbiAoZW5k LW9mLWxpbmUpDQotICAgICA7OyBBZnRlciBjZXJ0YWluIGNvbW1hbmRzIChl LmcuIGtpbGwtbGluZSksIHRoZXJlIG1heSBiZSB0d28NCi0gICAgIDs7IHN1 Y2Nlc3NpdmUgc29mdCBuZXdsaW5lcyBpbiB0aGUgYnVmZmVyLiAgSW4gdGhp cyBjYXNlLCB3ZQ0KLSAgICAgOzsgcmVwbGFjZSB0aGVzZSB0d28gbmV3bGlu ZXMgYnkgYSBzaW5nbGUgc3BhY2UuICBVbmZvcnR1bmF0ZWx5LA0KLSAgICAg OzsgdGhpcyBicmVha3MgdGhlIGNvbnNlcnZhdGlvbiBvZiAoc3BhY2VzICsg bmV3bGluZXMpLCBzbyB3ZQ0KLSAgICAgOzsgaGF2ZSB0byBmaWRkbGUgd2l0 aCBsb25nbGluZXMtd3JhcC1wb2ludC4NCi0gICAgICAgICAgICAgICAoaWYg KG9yIChwcm9nMSAoYm9scCkgKGZvcndhcmQtY2hhciAxKSkgKGVvbHApKQ0K LQkgICAgICAgICAgIChwcm9nbg0KLQkgICAgICAgICAgICAgKGRlbGV0ZS1j aGFyIC0xKQ0KLQkgICAgICAgICAgICAgKGlmICg+IGxvbmdsaW5lcy13cmFw LXBvaW50IChwb2ludCkpDQotCQkgICAgICAgICAoc2V0cSBsb25nbGluZXMt d3JhcC1wb2ludA0KLQkJICAgICAgICAgICAgICAgKDEtIGxvbmdsaW5lcy13 cmFwLXBvaW50KSkpKQ0KLQkgICAgICAgICAoZGVsZXRlLWNoYXIgLTEpKQ0K LSAgICAgICAgICAgICAgIG5pbCkNCi0gICAgICAoZm9yd2FyZC1saW5lIDEp DQotICAgICAgdCkpKQ0KLQ0KLShkZWZ1biBsb25nbGluZXMtc2V0LWJyZWFr cG9pbnQgKHRhcmdldC1jb2x1bW4pDQotICAiUGxhY2UgcG9pbnQgd2hlcmUg d2Ugc2hvdWxkIGJyZWFrIHRoZSBjdXJyZW50IGxpbmUsIGFuZCByZXR1cm4g dC4NCi1JZiB0aGUgbGluZSBzaG91bGQgbm90IGJlIGJyb2tlbiwgcmV0dXJu IG5pbDsgcG9pbnQgcmVtYWlucyBvbiB0aGUNCi1saW5lLiINCi0gIChtb3Zl LXRvLWNvbHVtbiB0YXJnZXQtY29sdW1uKQ0KLSAgKGxldCAoKG5vbi1icmVh a3BvaW50LXJlIChmb3JtYXQgIlteJXNdIiBsb25nbGluZXMtYnJlYWtwb2lu dC1jaGFycykpKQ0KLSAgICAoaWYgKGFuZCAocmUtc2VhcmNoLWZvcndhcmQg bm9uLWJyZWFrcG9pbnQtcmUgKGxpbmUtZW5kLXBvc2l0aW9uKSB0IDEpDQot ICAgICAgICAgICAgICg+IChjdXJyZW50LWNvbHVtbikgdGFyZ2V0LWNvbHVt bikpDQotICAgICAgICA7OyBUaGlzIGxpbmUgaXMgdG9vIGxvbmcuICBDYW4g d2UgYnJlYWsgaXQ/DQotICAgICAgICAob3IgKGxvbmdsaW5lcy1maW5kLWJy ZWFrLWJhY2t3YXJkKQ0KLSAgICAgICAgICAgIChwcm9nbiAobW92ZS10by1j b2x1bW4gdGFyZ2V0LWNvbHVtbikNCi0gICAgICAgICAgICAgICAgICAgKGxv bmdsaW5lcy1maW5kLWJyZWFrLWZvcndhcmQpKSkpKSkNCi0NCi0oZGVmdW4g bG9uZ2xpbmVzLWZpbmQtYnJlYWstYmFja3dhcmQgKCkNCi0gICJNb3ZlIHBv aW50IGJhY2t3YXJkIHRvIHRoZSBmaXJzdCBhdmFpbGFibGUgYnJlYWtwb2lu dCBhbmQgcmV0dXJuIHQuDQotSWYgbm8gYnJlYWtwb2ludCBpcyBmb3VuZCwg cmV0dXJuIG5pbC4iDQotICAobGV0ICgoYnJlYWtwb2ludC1yZSAoZm9ybWF0 ICJbJXNdIiBsb25nbGluZXMtYnJlYWtwb2ludC1jaGFycykpKQ0KLSAgICAo d2hlbiAoYW5kIChyZS1zZWFyY2gtYmFja3dhcmQgYnJlYWtwb2ludC1yZSAo bGluZS1iZWdpbm5pbmctcG9zaXRpb24pIHQgMSkNCi0gICAgICAgICAgICAg ICAoc2F2ZS1leGN1cnNpb24NCi0gICAgICAgICAgICAgICAgIChza2lwLWNo YXJzLWJhY2t3YXJkIGxvbmdsaW5lcy1icmVha3BvaW50LWNoYXJzDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZS1iZWdp bm5pbmctcG9zaXRpb24pKQ0KLSAgICAgICAgICAgICAgICAgKG51bGwgKGJv bHApKSkpDQotICAgICAgKGZvcndhcmQtY2hhciAxKQ0KLSAgICAgIChpZiAo YW5kIGZpbGwtbm9icmVhay1wcmVkaWNhdGUNCi0gICAgICAgICAgICAgICAo cnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MgJ2ZpbGwtbm9icmVh ay1wcmVkaWNhdGUpKQ0KLSAgICAgICAgICAocHJvZ24NCi0gICAgICAgICAg ICAoc2tpcC1jaGFycy1iYWNrd2FyZCBsb25nbGluZXMtYnJlYWtwb2ludC1j aGFycw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5l LWJlZ2lubmluZy1wb3NpdGlvbikpDQotICAgICAgICAgICAgKGxvbmdsaW5l cy1maW5kLWJyZWFrLWJhY2t3YXJkKSkNCi0gICAgICAgIHQpKSkpDQotDQot KGRlZnVuIGxvbmdsaW5lcy1maW5kLWJyZWFrLWZvcndhcmQgKCkNCi0gICJN b3ZlIHBvaW50IGZvcndhcmQgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSBicmVh a3BvaW50IGFuZCByZXR1cm4gdC4NCi1JZiBubyBicmVhayBwb2ludCBpcyBm b3VuZCwgcmV0dXJuIG5pbC4iDQotICAobGV0ICgoYnJlYWtwb2ludC1yZSAo Zm9ybWF0ICJbJXNdIiBsb25nbGluZXMtYnJlYWtwb2ludC1jaGFycykpKQ0K LSAgICAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCBicmVha3BvaW50LXJlIChs aW5lLWVuZC1wb3NpdGlvbikgdCAxKQ0KLSAgICAgICAgIChwcm9nbg0KLSAg ICAgICAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCBsb25nbGluZXMtYnJlYWtw b2ludC1jaGFycyAobGluZS1lbmQtcG9zaXRpb24pKQ0KLSAgICAgICAgICAg KG51bGwgKGVvbHApKSkNCi0gICAgICAgICAoaWYgKGFuZCBmaWxsLW5vYnJl YWstcHJlZGljYXRlDQotICAgICAgICAgICAgICAgICAgKHJ1bi1ob29rLXdp dGgtYXJncy11bnRpbC1zdWNjZXNzICdmaWxsLW5vYnJlYWstcHJlZGljYXRl KSkNCi0gICAgICAgICAgICAgKGxvbmdsaW5lcy1maW5kLWJyZWFrLWZvcndh cmQpDQotICAgICAgICAgICB0KSkpKQ0KLQ0KLShkZWZ1biBsb25nbGluZXMt bWVyZ2UtbGluZXMtcCAoKQ0KLSAgIlJldHVybiB0IGlmIHBhcnQgb2YgdGhl IG5leHQgbGluZSBjYW4gZml0IG9udG8gdGhlIGN1cnJlbnQgbGluZS4NCi1P dGhlcndpc2UsIHJldHVybiBuaWwuICBUZXh0IGNhbm5vdCBiZSBtb3ZlZCBh Y3Jvc3MgaGFyZCBuZXdsaW5lcy4iDQotICAoc2F2ZS1leGN1cnNpb24NCi0g ICAgKGVuZC1vZi1saW5lKQ0KLSAgICAoYW5kIChudWxsIChlb2JwKSkNCi0g ICAgICAgICAobnVsbCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnaGFy ZCkpDQotICAgICAgICAgKGxldCAoKHNwYWNlICgtIGZpbGwtY29sdW1uIChj dXJyZW50LWNvbHVtbikpKSkNCi0gICAgICAgICAgIChmb3J3YXJkLWxpbmUg MSkNCi0gICAgICAgICAgIChsb25nbGluZXMtc2V0LWJyZWFrcG9pbnQgKG1h eCAwICgxLSBzcGFjZSkpKSkpKSkNCi0NCi0oZGVmdW4gbG9uZ2xpbmVzLWRl Y29kZS1yZWdpb24gKCZvcHRpb25hbCBiZWcgZW5kKQ0KLSAgIlR1cm4gYWxs IG5ld2xpbmVzIGJldHdlZW4gQkVHIGFuZCBFTkQgaW50byBoYXJkIG5ld2xp bmVzLg0KLUlmIEJFRyBhbmQgRU5EIGFyZSBuaWwsIHRoZSBwb2ludCBhbmQg bWFyayBhcmUgdXNlZC4iDQotICAoaWYgKG51bGwgYmVnKSAoc2V0cSBiZWcg KHBvaW50KSkpDQotICAoaWYgKG51bGwgZW5kKSAoc2V0cSBlbmQgKG1hcmsg dCkpKQ0KLSAgKHNhdmUtZXhjdXJzaW9uDQotICAgIChsZXQgKChyZWctbWF4 IChtYXggYmVnIGVuZCkpKQ0KLSAgICAgIChnb3RvLWNoYXIgKG1pbiBiZWcg ZW5kKSkNCi0gICAgICAod2hpbGUgKHNlYXJjaC1mb3J3YXJkICJcbiIgcmVn LW1heCB0KQ0KLQkoc2V0LWhhcmQtbmV3bGluZS1wcm9wZXJ0aWVzDQotCSAo bWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpKSkpKQ0KLQ0KLShk ZWZ1biBsb25nbGluZXMtZGVjb2RlLWJ1ZmZlciAoKQ0KLSAgIlR1cm4gYWxs IG5ld2xpbmVzIGluIHRoZSBidWZmZXIgaW50byBoYXJkIG5ld2xpbmVzLiIN Ci0gIChsb25nbGluZXMtZGVjb2RlLXJlZ2lvbiAocG9pbnQtbWluKSAocG9p bnQtbWF4KSkpDQotDQotKGRlZnVuIGxvbmdsaW5lcy1lbmNvZGUtcmVnaW9u IChiZWcgZW5kICZvcHRpb25hbCBfYnVmZmVyKQ0KLSAgIlJlbW92ZSBlYWNo IHNvZnQgbmV3bGluZSBiZXR3ZWVuIEJFRyBhbmQgRU5ELg0KLUhhcmQgbmV3 bGluZXMgYXJlIGxlZnQgaW50YWN0LiAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50 IEJVRkZFUiBleGlzdHMgZm9yDQotY29tcGF0aWJpbGl0eSB3aXRoIGBmb3Jt YXQtYWxpc3QnLCBhbmQgaXMgaWdub3JlZC4iDQotICAoc2F2ZS1leGN1cnNp b24NCi0gICAgKGxldCAoKHJlZy1tYXggKG1heCBiZWcgZW5kKSkNCi0JICAo bW9kIChidWZmZXItbW9kaWZpZWQtcCkpKQ0KLSAgICAgIChnb3RvLWNoYXIg KG1pbiBiZWcgZW5kKSkNCi0gICAgICAod2hpbGUgKHNlYXJjaC1mb3J3YXJk ICJcbiIgcmVnLW1heCB0KQ0KLQkobGV0ICgocG9zIChtYXRjaC1iZWdpbm5p bmcgMCkpKQ0KLQkgICh1bmxlc3MgKGdldC10ZXh0LXByb3BlcnR5IHBvcyAn aGFyZCkNCi0gICAgICAgICAgICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyBw b3MgKDErIHBvcykgJyhoYXJkIG5pbCkpDQotICAgICAgICAgICAgKGRlbGV0 ZS1yZWdpb24gcG9zICgxKyBwb3MpKSkpKQ0KLSAgICAgIChzZXQtYnVmZmVy LW1vZGlmaWVkLXAgbW9kKQ0KLSAgICAgIGVuZCkpKQ0KLQ0KLShkZWZ1biBs b25nbGluZXMtZW5jb2RlLXN0cmluZyAoc3RyaW5nKQ0KLSAgIlJldHVybiBh IGNvcHkgb2YgU1RSSU5HIHdpdGggZWFjaCBzb2Z0IG5ld2xpbmUgcmVwbGFj ZWQgYnkgYSBzcGFjZS4NCi1IYXJkIG5ld2xpbmVzIGFyZSBsZWZ0IGludGFj dC4iDQotICAobGV0KiAoKHN0ciAoY29weS1zZXF1ZW5jZSBzdHJpbmcpKQ0K LSAgICAgICAgIChwb3MgKHN0cmluZy1zZWFyY2ggIlxuIiBzdHIpKSkNCi0g ICAgKHdoaWxlIHBvcw0KLSAgICAgIChpZiAobnVsbCAoZ2V0LXRleHQtcHJv cGVydHkgcG9zICdoYXJkIHN0cikpDQotICAgICAgICAgIChhc2V0IHN0ciBw b3MgPyApKQ0KLSAgICAgIChzZXRxIHBvcyAoc3RyaW5nLXNlYXJjaCAiXG4i IHN0ciAoMSsgcG9zKSkpKQ0KLSAgICBzdHIpKQ0KLQ0KLTs7OyBBdXRvIHdy YXANCi0NCi0oZGVmdW4gbG9uZ2xpbmVzLWF1dG8td3JhcCAoJm9wdGlvbmFs IGFyZykNCi0gICJUb2dnbGUgYXV0b21hdGljIGxpbmUgd3JhcHBpbmcuDQot V2l0aCBvcHRpb25hbCBhcmd1bWVudCBBUkcsIHR1cm4gb24gbGluZSB3cmFw cGluZyBpZiBhbmQgb25seSBpZg0KLUFSRyBpcyBwb3NpdGl2ZS4NCi1JZiBh dXRvbWF0aWMgbGluZSB3cmFwcGluZyBpcyB0dXJuZWQgb24sIHdyYXAgdGhl IGVudGlyZSBidWZmZXIuIg0KLSAgKGludGVyYWN0aXZlICJQIikNCi0gIChz ZXRxIGFyZyAoaWYgYXJnDQotCQkoPiAocHJlZml4LW51bWVyaWMtdmFsdWUg YXJnKSAwKQ0KLQkgICAgICAobm90IGxvbmdsaW5lcy1hdXRvLXdyYXApKSkN Ci0gIChpZiBhcmcNCi0gICAgICAocHJvZ24NCi0JKHNldHEgbG9uZ2xpbmVz LWF1dG8td3JhcCB0KQ0KLQkobG9uZ2xpbmVzLXdyYXAtcmVnaW9uIChwb2lu dC1taW4pIChwb2ludC1tYXgpKQ0KLQkobWVzc2FnZSAiQXV0byB3cmFwIGVu YWJsZWQuIikpDQotICAgIChzZXRxIGxvbmdsaW5lcy1hdXRvLXdyYXAgbmls KQ0KLSAgICAobWVzc2FnZSAiQXV0byB3cmFwIGRpc2FibGVkLiIpKSkNCi0N Ci0oZGVmdW4gbG9uZ2xpbmVzLWFmdGVyLWNoYW5nZS1mdW5jdGlvbiAoYmVn IGVuZCBfbGVuKQ0KLSAgIlVwZGF0ZSBgbG9uZ2xpbmVzLXdyYXAtYmVnJyBh bmQgYGxvbmdsaW5lcy13cmFwLWVuZCcuDQotVGhpcyBpcyBjYWxsZWQgYnkg YGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMnIHRvIGtlZXAgdHJhY2sgb2YgdGhl IHJlZ2lvbg0KLXRoYXQgaGFzIGNoYW5nZWQuIg0KLSAgKHdoZW4gKGFuZCBs b25nbGluZXMtYXV0by13cmFwIChub3QgdW5kby1pbi1wcm9ncmVzcykpDQot ICAgIChzZXRxIGxvbmdsaW5lcy13cmFwLWJlZw0KLSAgICAgICAgICAoaWYg bG9uZ2xpbmVzLXdyYXAtYmVnIChtaW4gbG9uZ2xpbmVzLXdyYXAtYmVnIGJl ZykgYmVnKSkNCi0gICAgKHNldHEgbG9uZ2xpbmVzLXdyYXAtZW5kDQotICAg ICAgICAgIChpZiBsb25nbGluZXMtd3JhcC1lbmQgKG1heCBsb25nbGluZXMt d3JhcC1lbmQgZW5kKSBlbmQpKSkpDQotDQotKGRlZnVuIGxvbmdsaW5lcy1w b3N0LWNvbW1hbmQtZnVuY3Rpb24gKCkNCi0gICJQZXJmb3JtIGxpbmUgd3Jh cHBpbmcgb24gdGhlIHBhcnRzIG9mIHRoZSBidWZmZXIgdGhhdCBoYXZlIGNo YW5nZWQuDQotVGhpcyBpcyBjYWxsZWQgYnkgYHBvc3QtY29tbWFuZC1ob29r JyBhZnRlciBlYWNoIGNvbW1hbmQuIg0KLSAgKHdoZW4gKGFuZCBsb25nbGlu ZXMtYXV0by13cmFwIGxvbmdsaW5lcy13cmFwLWJlZykNCi0gICAgKGlmIChv ciAoZXEgdGhpcy1jb21tYW5kICd5YW5rKQ0KLQkgICAgKGVxIHRoaXMtY29t bWFuZCAneWFuay1wb3ApKQ0KLQkobG9uZ2xpbmVzLWRlY29kZS1yZWdpb24g KHBvaW50KSAobWFyayB0KSkpDQotICAgIChpZiBsb25nbGluZXMtc2hvd2lu Zw0KLQkobG9uZ2xpbmVzLXNob3ctcmVnaW9uIGxvbmdsaW5lcy13cmFwLWJl ZyBsb25nbGluZXMtd3JhcC1lbmQpKQ0KLSAgICAodW5sZXNzIChvciAoZXEg dGhpcy1jb21tYW5kICdmaWxsLXBhcmFncmFwaCkNCi0gICAgICAgICAgICAg ICAgKGVxIHRoaXMtY29tbWFuZCAnZmlsbC1yZWdpb24pKQ0KLSAgICAgIChs b25nbGluZXMtd3JhcC1yZWdpb24gbG9uZ2xpbmVzLXdyYXAtYmVnIGxvbmds aW5lcy13cmFwLWVuZCkpDQotICAgIChzZXRxIGxvbmdsaW5lcy13cmFwLWJl ZyBuaWwpDQotICAgIChzZXRxIGxvbmdsaW5lcy13cmFwLWVuZCBuaWwpKSkN Ci0NCi0oZGVmdW4gbG9uZ2xpbmVzLXdpbmRvdy1jaGFuZ2UtZnVuY3Rpb24g KCkNCi0gICJSZS13cmFwIHRoZSBidWZmZXIgaWYgdGhlIHdpbmRvdyB3aWR0 aCBoYXMgY2hhbmdlZC4NCi1UaGlzIGlzIGNhbGxlZCBieSBgd2luZG93LWNv bmZpZ3VyYXRpb24tY2hhbmdlLWhvb2snLiINCi0gIChsZXQgKChkdyAoaWYg KGFuZCAoaW50ZWdlcnAgbG9uZ2xpbmVzLXdyYXAtZm9sbG93cy13aW5kb3ct c2l6ZSkNCi0JCSAgICAgKD49IGxvbmdsaW5lcy13cmFwLWZvbGxvd3Mtd2lu ZG93LXNpemUgMCkNCi0JCSAgICAgKDwgbG9uZ2xpbmVzLXdyYXAtZm9sbG93 cy13aW5kb3ctc2l6ZSAod2luZG93LXdpZHRoKSkpDQotCQlsb25nbGluZXMt d3JhcC1mb2xsb3dzLXdpbmRvdy1zaXplDQotCSAgICAgIDIpKSkNCi0gICAg KHdoZW4gKC89IGZpbGwtY29sdW1uICgtICh3aW5kb3ctd2lkdGgpIGR3KSkN Ci0gICAgICAoc2V0cSBmaWxsLWNvbHVtbiAoLSAod2luZG93LXdpZHRoKSBk dykpDQotICAgICAgKGxvbmdsaW5lcy13cmFwLXJlZ2lvbiAocG9pbnQtbWlu KSAocG9pbnQtbWF4KSkpKSkNCi0NCi07OzsgSXNlYXJjaA0KLQ0KLShkZWZ1 biBsb25nbGluZXMtc2VhcmNoLWZ1bmN0aW9uICgpDQotICAoY29uZA0KLSAg ICgob3IgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24gaXNlYXJjaC1yZWdleHAp IChpc2VhcmNoLXNlYXJjaC1mdW4tZGVmYXVsdCkpDQotICAgKGlzZWFyY2gt Zm9yd2FyZCAjJ2xvbmdsaW5lcy1zZWFyY2gtZm9yd2FyZCkNCi0gICAodCAj J2xvbmdsaW5lcy1zZWFyY2gtYmFja3dhcmQpKSkNCi0NCi0oZGVmdW4gbG9u Z2xpbmVzLXNlYXJjaC1mb3J3YXJkIChzdHJpbmcgJm9wdGlvbmFsIGJvdW5k IG5vZXJyb3IgY291bnQpDQotICAobGV0ICgoc2VhcmNoLXNwYWNlcy1yZWdl eHAgIiAqWyBcbl0iKSkNCi0gICAgKHJlLXNlYXJjaC1mb3J3YXJkIChyZWdl eHAtcXVvdGUgc3RyaW5nKSBib3VuZCBub2Vycm9yIGNvdW50KSkpDQotDQot KGRlZnVuIGxvbmdsaW5lcy1zZWFyY2gtYmFja3dhcmQgKHN0cmluZyAmb3B0 aW9uYWwgYm91bmQgbm9lcnJvciBjb3VudCkNCi0gIChsZXQgKChzZWFyY2gt c3BhY2VzLXJlZ2V4cCAiICpbIFxuXSIpKQ0KLSAgICAocmUtc2VhcmNoLWJh Y2t3YXJkIChyZWdleHAtcXVvdGUgc3RyaW5nKSBib3VuZCBub2Vycm9yIGNv dW50KSkpDQotDQotKGRlZnVuIGxvbmdsaW5lcy1yZS1zZWFyY2gtZm9yd2Fy ZCAoc3RyaW5nICZvcHRpb25hbCBib3VuZCBub2Vycm9yIGNvdW50KQ0KLSAg KGxldCAoKHNlYXJjaC1zcGFjZXMtcmVnZXhwICIgKlsgXG5dIikpDQotICAg IChyZS1zZWFyY2gtZm9yd2FyZCBzdHJpbmcgYm91bmQgbm9lcnJvciBjb3Vu dCkpKQ0KLQ0KLTs7OyBMb2FkaW5nIGFuZCBzYXZpbmcNCi0NCi0oZGVmdW4g bG9uZ2xpbmVzLWJlZm9yZS1yZXZlcnQtaG9vayAoKQ0KLSAgKGFkZC1ob29r ICdhZnRlci1yZXZlcnQtaG9vayAjJ2xvbmdsaW5lcy1hZnRlci1yZXZlcnQt aG9vayBuaWwgdCkNCi0gIChsb25nbGluZXMtbW9kZSAwKSkNCi0NCi0oZGVm dW4gbG9uZ2xpbmVzLWFmdGVyLXJldmVydC1ob29rICgpDQotICAocmVtb3Zl LWhvb2sgJ2FmdGVyLXJldmVydC1ob29rICMnbG9uZ2xpbmVzLWFmdGVyLXJl dmVydC1ob29rIHQpDQotICAobG9uZ2xpbmVzLW1vZGUgMSkpDQotDQotKGFk ZC10by1saXN0DQotICdmb3JtYXQtYWxpc3QNCi0gKGxpc3QgJ2xvbmdsaW5l cyAiQXV0b21hdGljYWxseSB3cmFwIGxvbmcgbGluZXMuIiBuaWwgbmlsDQot ICAgICAgICMnbG9uZ2xpbmVzLWVuY29kZS1yZWdpb24gdCBuaWwpKQ0KLQ0K LTs7OyBVbmxvYWRpbmcNCi0NCi0oZGVmdW4gbG9uZ2xpbmVzLXVubG9hZC1m dW5jdGlvbiAoKQ0KLSAgIlVubG9hZCB0aGUgbG9uZ2xpbmVzIGxpYnJhcnku Ig0KLSAgKHNhdmUtY3VycmVudC1idWZmZXINCi0gICAgKGRvbGlzdCAoYnVm ZmVyIChidWZmZXItbGlzdCkpDQotICAgICAgKHNldC1idWZmZXIgYnVmZmVy KQ0KLSAgICAgIChsb25nbGluZXMtbW9kZS1vZmYpKSkNCi0gIDs7IGNvbnRp bnVlIHN0YW5kYXJkIHVubG9hZGluZw0KLSAgbmlsKQ0KLQ0KLShwcm92aWRl ICdsb25nbGluZXMpDQotDQotOzs7IGxvbmdsaW5lcy5lbCBlbmRzIGhlcmUN CmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmMgYi9zcmMvYnVmZmVyLmMNCmlu ZGV4IDUwOWNlNTFiNTUuLmNiYzI0NjA2N2QgMTAwNjQ0DQotLS0gYS9zcmMv YnVmZmVyLmMNCisrKyBiL3NyYy9idWZmZXIuYw0KQEAgLTUyNzYsNiArNTI3 Niw3IEBAIGluaXRfYnVmZmVyX29uY2UgKHZvaWQpDQogICBYU0VURkFTVElO VCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgdGFiX2xpbmVfZm9ybWF0 KSwgaWR4KTsgKytpZHg7DQogICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZl cl9sb2NhbF9mbGFncywgY3Vyc29yX3R5cGUpLCBpZHgpOyArK2lkeDsNCiAg IFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBleHRy YV9saW5lX3NwYWNpbmcpLCBpZHgpOyArK2lkeDsNCisgIFhTRVRGQVNUSU5U IChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBhdXRvX25hcnJvd19fbmFy cm93aW5nKSwgaWR4KTsgKytpZHg7DQogICBYU0VURkFTVElOVCAoQlZBUiAo JmJ1ZmZlcl9sb2NhbF9mbGFncywgY3Vyc29yX2luX25vbl9zZWxlY3RlZF93 aW5kb3dzKSwgaWR4KTsgKytpZHg7DQogDQogICAvKiBidWZmZXJfbG9jYWxf ZmxhZ3MgY29udGFpbnMgbm8gcG9pbnRlcnMsIHNvIGl0J3Mgc2FmZSB0byB0 cmVhdCBpdA0KQEAgLTYzNjMsNiArNjM2NCwxMCBAQCBmcm9tIChhYnMgUE9T SVRJT04pLiAgSWYgUE9TSVRJT04gaXMgcG9zaXRpdmUsIHBvaW50IHdhcyBh dCB0aGUgZnJvbnQNCiBJZiB2YWx1ZSBpcyBhIGZsb2F0aW5nIHBvaW50IG51 bWJlciwgaXQgc3BlY2lmaWVzIHRoZSBzcGFjaW5nIHJlbGF0aXZlDQogdG8g dGhlIGRlZmF1bHQgZnJhbWUgbGluZSBoZWlnaHQuICBBIHZhbHVlIG9mIG5p bCBtZWFucyBhZGQgbm8gZXh0cmEgc3BhY2UuICAqLyk7DQogDQorICBERUZW QVJfUEVSX0JVRkZFUiAoImF1dG8tbmFycm93LS1uYXJyb3dpbmciLA0KKwkJ ICAgICAmQlZBUiAoY3VycmVudF9idWZmZXIsIGF1dG9fbmFycm93X19uYXJy b3dpbmcpLCBRbmlsLA0KKwkJICAgICBkb2M6IC8qIEludGVybmFsIHZhcmlh YmxlIHVzZWQgYnkgYGF1dG8tbmFycm93LW1vZGUnLiAgKi8pOw0KKw0KICAg REVGVkFSX1BFUl9CVUZGRVIgKCJjdXJzb3ItaW4tbm9uLXNlbGVjdGVkLXdp bmRvd3MiLA0KIAkJICAgICAmQlZBUiAoY3VycmVudF9idWZmZXIsIGN1cnNv cl9pbl9ub25fc2VsZWN0ZWRfd2luZG93cyksIFFuaWwsDQogCQkgICAgIGRv YzogLyogTm9uLW5pbCBtZWFucyBzaG93IGEgY3Vyc29yIGluIG5vbi1zZWxl Y3RlZCB3aW5kb3dzLg0KZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuaCBiL3Ny Yy9idWZmZXIuaA0KaW5kZXggMTM1ZWFmNzJkMy4uYTZhYmM2ZWNlOCAxMDA2 NDQNCi0tLSBhL3NyYy9idWZmZXIuaA0KKysrIGIvc3JjL2J1ZmZlci5oDQpA QCAtNTYxLDYgKzU2MSw5IEBAICNkZWZpbmUgQlZBUihidWYsIGZpZWxkKSAo KGJ1ZiktPmZpZWxkICMjIF8pDQogICAgICBpbiB0aGUgZGlzcGxheSBvZiB0 aGlzIGJ1ZmZlci4gICovDQogICBMaXNwX09iamVjdCBleHRyYV9saW5lX3Nw YWNpbmdfOw0KIA0KKyAgLyogTmFycm93aW5nIHR5cGUgd2hlbiBhdXRvLW5h cnJvdyBtb2RlIGlzIGluIGVmZmVjdC4gICovDQorICBMaXNwX09iamVjdCBh dXRvX25hcnJvd19fbmFycm93aW5nXzsNCisNCiAgIC8qIEN1cnNvciB0eXBl IHRvIGRpc3BsYXkgaW4gbm9uLXNlbGVjdGVkIHdpbmRvd3MuDQogICAgICB0 IG1lYW5zIHRvIHVzZSBob2xsb3cgYm94IGN1cnNvci4NCiAgICAgIFNlZSBg Y3Vyc29yLXR5cGUnIGZvciBvdGhlciB2YWx1ZXMuICAqLw0KZGlmZiAtLWdp dCBhL3NyYy9maWxlaW8uYyBiL3NyYy9maWxlaW8uYw0KaW5kZXggMTBkNGI4 YmMxNS4uOWQyY2YyYWUwMCAxMDA2NDQNCi0tLSBhL3NyYy9maWxlaW8uYw0K KysrIGIvc3JjL2ZpbGVpby5jDQpAQCAtNDk5Nyw2ICs0OTk3LDIwIEBAIGJl Y2F1c2UgKDEpIGl0IHByZXNlcnZlcyBzb21lIG1hcmtlciBwb3NpdGlvbnMg KGluIHVuY2hhbmdlZCBwb3J0aW9ucw0KIAkgICBPdGhlcndpc2Ugc3RhcnQg d2l0aCBhbiBlbXB0eSB1bmRvX2xpc3QuICAqLw0KIAlic2V0X3VuZG9fbGlz dCAoY3VycmVudF9idWZmZXIsIEVRIChvbGRfdW5kbywgUXQpID8gUXQgOiBR bmlsKTsNCiANCisgICAgICBpZiAoIW5vbmludGVyYWN0aXZlICYmICFOSUxQ IChWYXV0b19uYXJyb3dfbG9uZ19saW5lX3RocmVzaG9sZCkpDQorCXsNCisJ ICBwdHJkaWZmX3QgY3VyLCBuZXh0LCBmb3VuZCwgbWF4ID0gMDsNCisJICBm b3IgKGN1ciA9IFBUOyBjdXIgPCBQVCArIGluc2VydGVkOyBjdXIgPSBuZXh0 KQ0KKwkgICAgew0KKwkgICAgICBuZXh0ID0gZmluZF9uZXdsaW5lMSAoY3Vy LCBDSEFSX1RPX0JZVEUgKGN1ciksIDAsIC0xLCAxLA0KKwkJCQkgICAgJmZv dW5kLCBOVUxMLCB0cnVlKTsNCisJICAgICAgaWYgKG5leHQgLSBjdXIgPiBt YXgpIG1heCA9IG5leHQgLSBjdXI7DQorCSAgICAgIGlmICghZm91bmQpIGJy ZWFrOw0KKwkgICAgfQ0KKwkgIGlmIChtYXggPiBYRklYTlVNIChWYXV0b19u YXJyb3dfbG9uZ19saW5lX3RocmVzaG9sZCkpDQorCSAgICBzYWZlX2NhbGwg KDEsIFFhdXRvX25hcnJvd19tb2RlKTsNCisJfQ0KKw0KICAgICAgIHVuYmlu ZF90byAoY291bnQxLCBRbmlsKTsNCiAgICAgfQ0KIA0KQEAgLTY2MzgsNiAr NjY1MiwxNyBAQCBkbyAoZmlsZS1leGlzdHMtcCBGSUxFTkFNRSkgYW5kIEZJ TEVOQU1FIGlzIGhhbmRsZWQgYnkgSEFORExFUiwgdGhlbg0KICAgLyogTGlz cCBmdW5jdGlvbiBmb3IgcmVjdXJzaXZlbHkgZGVsZXRpbmcgZGlyZWN0b3Jp ZXMuICAqLw0KICAgREVGU1lNIChRZGVsZXRlX2RpcmVjdG9yeSwgImRlbGV0 ZS1kaXJlY3RvcnkiKTsNCiANCisgIERFRlZBUl9MSVNQICgiYXV0by1uYXJy b3ctbG9uZy1saW5lLXRocmVzaG9sZCIsDQorCSAgICAgICBWYXV0b19uYXJy b3dfbG9uZ19saW5lX3RocmVzaG9sZCwNCisJICAgICAgIGRvYzogLyogTGlu ZSBsZW5ndGggYWJvdmUgd2hpY2ggYGF1dG8tbmFycm93LW1vZGUnIGlzIGVu dGVyZWQuDQorV2hlbiBub24tbmlsLCBhbmQgd2hlbiBhIGZpbGUgd2l0aCBv bmUgb3IgbW9yZSBsaW5lcyBsb25nZXIgdGhhbg0KK2BhdXRvLW5hcnJvdy1s b25nLWxpbmUtdGhyZXNob2xkJyBpcyBvcGVuZWQgb3IgaW5zZXJ0ZWQgaW4g YSBidWZmZXIsDQorYGF1dG8tbmFycm93LW1vZGUnIGlzIGF1dG9tYXRpY2Fs bHkgZW5hYmxlZC4NCitXaGVuIG5pbCwgYGF1dG8tbmFycm93LW1vZGUnIGlz IG5vdCBlbnRlcmVkIGF1dG9tYXRpY2FsbHkuICAqLyk7DQorICBWYXV0b19u YXJyb3dfbG9uZ19saW5lX3RocmVzaG9sZCA9IFFuaWw7DQorDQorICBERUZT WU0gKFFhdXRvX25hcnJvd19tb2RlLCAiYXV0by1uYXJyb3ctbW9kZSIpOw0K Kw0KICAgREVGU1lNIChRc3Vic3RpdHV0ZV9lbnZfaW5fZmlsZV9uYW1lLCAi c3Vic3RpdHV0ZS1lbnYtaW4tZmlsZS1uYW1lIik7DQogICBERUZTWU0gKFFn ZXRfYnVmZmVyX3dpbmRvd19saXN0LCAiZ2V0LWJ1ZmZlci13aW5kb3ctbGlz dCIpOw0KIA0KZGlmZiAtLWdpdCBhL3NyYy9rZXlib2FyZC5jIGIvc3JjL2tl eWJvYXJkLmMNCmluZGV4IGJlZDgzMDdiNmYuLjM4YWE2NDc3NGQgMTAwNjQ0 DQotLS0gYS9zcmMva2V5Ym9hcmQuYw0KKysrIGIvc3JjL2tleWJvYXJkLmMN CkBAIC0xMjkwLDYgKzEyOTAsOSBAQCBjb21tYW5kX2xvb3BfMSAodm9pZCkN CiANCiAgIGlmIChOSUxQIChWbWVtb3J5X2Z1bGwpKQ0KICAgICB7DQorICAg ICAgaWYgKCFOSUxQIChWYXV0b19uYXJyb3dfcG9zdF9jb21tYW5kX2Z1bmN0 aW9uKSAmJiAhTklMUCAoVnJ1bl9ob29rcykpDQorCXNhZmVfcnVuX2hvb2tz IChRYXV0b19uYXJyb3dfcG9zdF9jb21tYW5kX2Z1bmN0aW9uKTsNCisNCiAg ICAgICAvKiBNYWtlIHN1cmUgdGhpcyBob29rIHJ1bnMgYWZ0ZXIgY29tbWFu ZHMgdGhhdCBnZXQgZXJyb3JzIGFuZA0KIAkgdGhyb3cgdG8gdG9wIGxldmVs LiAgKi8NCiAgICAgICAvKiBOb3RlIHRoYXQgdGhlIHZhbHVlIGNlbGwgd2ls bCBuZXZlciBkaXJlY3RseSBjb250YWluIG5pbA0KQEAgLTE0NzIsNiArMTQ3 NSw4IEBAIGNvbW1hbmRfbG9vcF8xICh2b2lkKQ0KICAgICAgIFZyZWFsX3Ro aXNfY29tbWFuZCA9IGNtZDsNCiAgICAgICBzYWZlX3J1bl9ob29rcyAoUXBy ZV9jb21tYW5kX2hvb2spOw0KIA0KKyAgICAgIHNhZmVfcnVuX2hvb2tzIChR YXV0b19uYXJyb3dfcHJlX2NvbW1hbmRfZnVuY3Rpb24pOw0KKw0KICAgICAg IGFscmVhZHlfYWRqdXN0ZWQgPSAwOw0KIA0KICAgICAgIGlmIChOSUxQIChW dGhpc19jb21tYW5kKSkNCkBAIC0xNTIyLDYgKzE1MjcsOCBAQCBjb21tYW5k X2xvb3BfMSAodm9pZCkNCiAgICAgICAgICAgfQ0KICAgICAgIGtzZXRfbGFz dF9wcmVmaXhfYXJnIChjdXJyZW50X2tib2FyZCwgVmN1cnJlbnRfcHJlZml4 X2FyZyk7DQogDQorICAgICAgc2FmZV9ydW5faG9va3MgKFFhdXRvX25hcnJv d19wb3N0X2NvbW1hbmRfZnVuY3Rpb24pOw0KKw0KICAgICAgIHNhZmVfcnVu X2hvb2tzIChRcG9zdF9jb21tYW5kX2hvb2spOw0KIA0KICAgICAgIC8qIElm IGRpc3BsYXlpbmcgYSBtZXNzYWdlLCByZXNpemUgdGhlIGVjaG8gYXJlYSB3 aW5kb3cgdG8gZml0DQpAQCAtMTIwNDAsNiArMTIwNDcsMTEgQEAgc3ltc19v Zl9rZXlib2FyZCAodm9pZCkNCiAgIERFRlNZTSAoUXByZV9jb21tYW5kX2hv b2ssICJwcmUtY29tbWFuZC1ob29rIik7DQogICBERUZTWU0gKFFwb3N0X2Nv bW1hbmRfaG9vaywgInBvc3QtY29tbWFuZC1ob29rIik7DQogDQorICBERUZT WU0gKFFhdXRvX25hcnJvd19wcmVfY29tbWFuZF9mdW5jdGlvbiwNCisJICAi YXV0by1uYXJyb3ctcHJlLWNvbW1hbmQtZnVuY3Rpb24iKTsNCisgIERFRlNZ TSAoUWF1dG9fbmFycm93X3Bvc3RfY29tbWFuZF9mdW5jdGlvbiwNCisJICAi YXV0by1uYXJyb3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9uIik7DQorDQogICBE RUZTWU0gKFF1bmRvX2F1dG9fX2FkZF9ib3VuZGFyeSwgInVuZG8tYXV0by0t YWRkLWJvdW5kYXJ5Iik7DQogICBERUZTWU0gKFF1bmRvX2F1dG9fX3VuZG9h Ymx5X2NoYW5nZWRfYnVmZmVycywNCiAgICAgICAgICAgInVuZG8tYXV0by0t dW5kb2FibHktY2hhbmdlZC1idWZmZXJzIik7DQpAQCAtMTI2MDQsNiArMTI2 MTYsMjIgQEAgc3ltc19vZl9rZXlib2FyZCAodm9pZCkNCiBTZWUgYWxzbyBg cHJlLWNvbW1hbmQtaG9vaycuICAqLyk7DQogICBWcG9zdF9jb21tYW5kX2hv b2sgPSBRbmlsOw0KIA0KKyAgREVGVkFSX0xJU1AgKCJhdXRvLW5hcnJvdy1w cmUtY29tbWFuZC1mdW5jdGlvbiIsDQorCSAgICAgICBWYXV0b19uYXJyb3df cHJlX2NvbW1hbmRfZnVuY3Rpb24sDQorCSAgICAgICBkb2M6IC8qIEZ1bmN0 aW9uIGV4ZWN1dGVkIGJlZm9yZSBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQg aW4gYGF1dG8tbmFycm93LW1vZGUnLg0KK0lmIG5vbi1uaWwsIGFuZCBgYXV0 by1uYXJyb3ctbW9kZScgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIGlzDQor Y2FsbGVkIGJlZm9yZSBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGFmdGVy IGBwcmUtY29tbWFuZC1ob29rJy4NCitJdCBpcyBjYWxsZWQgd2l0aG91dCBh cmd1bWVudHMuICAqLyk7DQorICBWYXV0b19uYXJyb3dfcHJlX2NvbW1hbmRf ZnVuY3Rpb24gPSBRbmlsOw0KKw0KKyAgREVGVkFSX0xJU1AgKCJhdXRvLW5h cnJvdy1wb3N0LWNvbW1hbmQtZnVuY3Rpb24iLA0KKwkgICAgICAgVmF1dG9f bmFycm93X3Bvc3RfY29tbWFuZF9mdW5jdGlvbiwNCisJICAgICAgIGRvYzog LyogRnVuY3Rpb24gZXhlY3V0ZWQgYWZ0ZXIgZWFjaCBjb21tYW5kIGlzIGV4 ZWN1dGVkIGluIGBhdXRvLW5hcnJvdy1tb2RlJy4NCitJZiBub24tbmlsLCBh bmQgYGF1dG8tbmFycm93LW1vZGUnIGlzIGVuYWJsZWQsIHRoZSBmdW5jdGlv biBpcw0KK2NhbGxlZCBhZnRlciBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQs IGJlZm9yZSBgcG9zdC1jb21tYW5kLWhvb2snLg0KK0l0IGlzIGNhbGxlZCB3 aXRob3V0IGFyZ3VtZW50cy4gICovKTsNCisgIFZhdXRvX25hcnJvd19wb3N0 X2NvbW1hbmRfZnVuY3Rpb24gPSBRbmlsOw0KKw0KICNpZiAwDQogICBERUZW QVJfTElTUCAoImVjaG8tYXJlYS1jbGVhci1ob29rIiwgLi4uLA0KIAkgICAg ICAgZG9jOiAvKiBOb3JtYWwgaG9vayBydW4gd2hlbiBjbGVhcmluZyB0aGUg ZWNobyBhcmVhLiAgKi8pOw0KZGlmZiAtLWdpdCBhL3NyYy9saXNwLmggYi9z cmMvbGlzcC5oDQppbmRleCBlNGE0OWI4ZWY5Li4yODkxNDEyOTZjIDEwMDY0 NA0KLS0tIGEvc3JjL2xpc3AuaA0KKysrIGIvc3JjL2xpc3AuaA0KQEAgLTQ3 NjEsNiArNDc2MSw4IEBAIGZhc3Rfc3RyaW5nX21hdGNoX2lnbm9yZV9jYXNl IChMaXNwX09iamVjdCByZWdleHAsIExpc3BfT2JqZWN0IHN0cmluZykNCiAJ CQkJCQkgIHB0cmRpZmZfdCk7DQogZXh0ZXJuIHB0cmRpZmZfdCBmYXN0X2xv b2tpbmdfYXQgKExpc3BfT2JqZWN0LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90 LCBwdHJkaWZmX3QsIExpc3BfT2JqZWN0KTsNCitleHRlcm4gcHRyZGlmZl90 IGZpbmRfbmV3bGluZTEgKHB0cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZm X3QsIHB0cmRpZmZfdCwNCisJCQkJcHRyZGlmZl90LCBwdHJkaWZmX3QgKiwg cHRyZGlmZl90ICosIGJvb2wpOw0KIGV4dGVybiBwdHJkaWZmX3QgZmluZF9u ZXdsaW5lIChwdHJkaWZmX3QsIHB0cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJk aWZmX3QsDQogCQkJICAgICAgIHB0cmRpZmZfdCwgcHRyZGlmZl90ICosIHB0 cmRpZmZfdCAqLCBib29sKTsNCiBleHRlcm4gdm9pZCBzY2FuX25ld2xpbmUg KHB0cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwN CmRpZmYgLS1naXQgYS9zcmMvc2VhcmNoLmMgYi9zcmMvc2VhcmNoLmMNCmlu ZGV4IDlkNmJkMDc0ZTEuLmI1ZDZhNDQyYzAgMTAwNjQ0DQotLS0gYS9zcmMv c2VhcmNoLmMNCisrKyBiL3NyYy9zZWFyY2guYw0KQEAgLTMxOTIsNyArMzE5 Miw3IEBAIERFRlVOICgicmVnZXhwLXF1b3RlIiwgRnJlZ2V4cF9xdW90ZSwg U3JlZ2V4cF9xdW90ZSwgMSwgMSwgMCwNCiB9DQogDQogLyogTGlrZSBmaW5k X25ld2xpbmUsIGJ1dCBkb2Vzbid0IHVzZSB0aGUgY2FjaGUsIGFuZCBvbmx5 IHNlYXJjaGVzIGZvcndhcmQuICAqLw0KLXN0YXRpYyBwdHJkaWZmX3QNCitw dHJkaWZmX3QNCiBmaW5kX25ld2xpbmUxIChwdHJkaWZmX3Qgc3RhcnQsIHB0 cmRpZmZfdCBzdGFydF9ieXRlLCBwdHJkaWZmX3QgZW5kLA0KIAkgICAgICAg cHRyZGlmZl90IGVuZF9ieXRlLCBwdHJkaWZmX3QgY291bnQsIHB0cmRpZmZf dCAqY291bnRlZCwNCiAJICAgICAgIHB0cmRpZmZfdCAqYnl0ZXBvcywgYm9v bCBhbGxvd19xdWl0KQ0KZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3Jj L3hkaXNwLmMNCmluZGV4IDQwODk1MjVlMTAuLmQ3ODI2NTliOTIgMTAwNjQ0 DQotLS0gYS9zcmMveGRpc3AuYw0KKysrIGIvc3JjL3hkaXNwLmMNCkBAIC0y NzY2Nyw3ICsyNzY2NywxMiBAQCBkZWNvZGVfbW9kZV9zcGVjIChzdHJ1Y3Qg d2luZG93ICp3LCByZWdpc3RlciBpbnQgYywgaW50IGZpZWxkX3dpZHRoLA0K IA0KICAgICBjYXNlICduJzoNCiAgICAgICBpZiAoQlVGX0JFR1YgKGIpID4g QlVGX0JFRyAoYikgfHwgQlVGX1pWIChiKSA8IEJVRl9aIChiKSkNCi0JcmV0 dXJuICIgTmFycm93IjsNCisJew0KKwkgIGlmIChFUSAoQlZBUiAoY3VycmVu dF9idWZmZXIsIGF1dG9fbmFycm93X19uYXJyb3dpbmcpLCBpbnRlcm4gKCJh dXRvIikpKQ0KKwkgICAgcmV0dXJuICIgQXV0by1OYXJyb3ciOw0KKwkgIGVs c2UNCisJICAgIHJldHVybiAiIE5hcnJvdyI7DQorCX0NCiAgICAgICBicmVh azsNCiANCiAgICAgICAvKiBEaXNwbGF5IHRoZSAiZGVncmVlIG9mIHRyYXZl bCIgb2YgdGhlIHdpbmRvdyB0aHJvdWdoIHRoZSBidWZmZXIuICAqLw0KLS0g DQoyLjM1LjENCg0K --3C8xaJEIMJ-- From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 05:28:24 2022 Received: (at submit) by debbugs.gnu.org; 5 Jul 2022 09:28:25 +0000 Received: from localhost ([127.0.0.1]:49332 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8er1-0006m8-HO for submit@debbugs.gnu.org; Tue, 05 Jul 2022 05:28:24 -0400 Received: from lists.gnu.org ([209.51.188.17]:46884) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8eqy-0006ly-HS for submit@debbugs.gnu.org; Tue, 05 Jul 2022 05:28:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51410) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8eqy-0001H4-Bn for bug-gnu-emacs@gnu.org; Tue, 05 Jul 2022 05:28:20 -0400 Received: from heytings.org ([95.142.160.155]:51590) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8eql-000440-07 for bug-gnu-emacs@gnu.org; Tue, 05 Jul 2022 05:28:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657013285; bh=bEEzTbmRGP0LuladAXykazspLO2Ae+mtvGcQAjs4dF8=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=nvUxoqAA/4Wal1J40HYr70EuFozc5196sJkQY8Xx3mKiIXPy6GYHPbAblrZ7bpK0K SGqFppY6zojmSLh6ax9KrUtkgVCMHHQ8dTRFd/gibWWgM3UzF7Aa2NjuDOc199Kuc8 voGUwV0Shfhh3s/OzAiW9FWlKXK2Cg9i2muY8Vvslm8lOHcBTqefDyG+BHsvBn2XoJ ipLxE/Zc2fCd3mnypFJupjA7kvR0PHEB+pJbQUIjDKamvMhkeHsqXZFM/YpHZUc81F kd1aQC7isyXgXt57nkU0TBj7USGloP1pyF/CgZa7z71gYYON0tzIzqd7fLdWWvw+2w mWLeVGwhtcSFg== Date: Tue, 05 Jul 2022 09:28:04 +0000 From: Gregory Heytings To: 56393@debbugs.gnu.org Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <38c1a31040d2d2bc47ae@heytings.org> Message-ID: <38c1a310405bd4bbe370@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="5iV1xan7nE" Received-SPF: pass client-ip=95.142.160.155; envelope-from=gregory@heytings.org; helo=heytings.org X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit Cc: bug-gnu-emacs@gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) --5iV1xan7nE Content-Type: text/plain; charset=us-ascii; format=flowed Sorry, something was missing in the previous patch, here is the complete one, with a bug number. --5iV1xan7nE Content-Type: text/x-diff; name=Actually-fix-the-long-lines-display-bug.patch Content-Transfer-Encoding: base64 Content-ID: <38c1a31040c31dfb7db5@heytings.org> Content-Disposition: attachment; filename=Actually-fix-the-long-lines-display-bug.patch RnJvbSBiZmIxNDhjY2FjY2NiNzI0NzIzZGU0NWI4NmMxMTBiZTMzYTkzMTc1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogR3JlZ29yeSBIZXl0 aW5ncyA8Z3JlZ29yeUBoZXl0aW5ncy5vcmc+DQpEYXRlOiBUdWUsIDUgSnVs IDIwMjIgMDk6MjM6NTcgKzAwMDANClN1YmplY3Q6IFtQQVRDSF0gQWN0dWFs bHkgZml4IHRoZSBsb25nIGxpbmVzIGRpc3BsYXkgYnVnIChidWcjNTYzOTMp Lg0KDQoqIGxpc3AvZmlsZXMuZWwgKGF1dG8tbmFycm93LW1vZGUpOiBOZXcg bWlub3IgbW9kZS4NCihhdXRvLW5hcnJvdy1wcmUtY29tbWFuZC1mdW5jdGlv biwgYXV0by1uYXJyb3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9uKToNCk5ldyBh dXhpbGlhcnkgZnVuY3Rpb25zIGZvciB0aGUgbWlub3IgbW9kZS4NCihhdXRv LW5hcnJvdy1kaXNwbGF5LWxlbmd0aCwgYXV0by1uYXJyb3ctd2lkZW4tYXV0 b21hdGljYWxseSk6IE5ldw0KZGVmY3VzdG9tcyBmb3IgdGhlIG1pbm9yIG1v ZGUuDQooYXV0by1uYXJyb3ctLXdpZGVuLWF1dG9tYXRpY2FsbHksIGF1dG8t bmFycm93LS1pc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHksDQphdXRvLW5h cnJvdy0taW5pdGlhbGl6ZWQpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGVzIGZv ciB0aGUgbWlub3IgbW9kZS4NCg0KKiBzcmMvYnVmZmVyLmggKHN0cnVjdCBi dWZmZXIpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGUgZm9yIHRoZSBtaW5vciBt b2RlLg0KDQoqIHNyYy9idWZmZXIuYyAoaW5pdF9idWZmZXJfb25jZSwgc3lt c19vZl9idWZmZXIpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGUNCmZvciB0aGUg bWlub3IgbW9kZS4NCg0KKiBzcmMvZmlsZWlvLmMgKEZpbnNlcnRfZmlsZV9j b250ZW50cyk6IEF1dG9tYXRpY2FsbHkgZW50ZXIgdGhlIG1pbm9yIG1vZGUN CndoZW4gYXBwcm9wcmlhdGUuDQooc3ltc19vZl9maWxlaW8pOiBOZXcgZGVm Y3VzdG9tIGZvciB0aGUgbWlub3IgbW9kZS4NCg0KKiBzcmMva2V5Ym9hcmQu YyAoc3ltc19vZl9rZXlib2FyZCk6IE5ldyBob29rIGZ1bmN0aW9ucyBmb3Ig dGhlIG1pbm9yIG1vZGUuDQooY29tbWFuZF9sb29wXzEpOiBFeGVjdXRlIHRo ZSBob29rIGZ1bmN0aW9ucy4NCg0KKiBzcmMvc2VhcmNoLmMgKGZpbmRfbmV3 bGluZTEpOiBNYWtlIGl0IGV4dGVybmFsbHkgdmlzaWJsZS4NCg0KKiBzcmMv bGlzcC5oOiBNYWtlIGZpbmRfbmV3bGluZTEgZXh0ZXJuYWxseSB2aXNpYmxl Lg0KDQoqIHNyYy94ZGlzcC5jIChkZWNvZGVfbW9kZV9zcGVjKTogSW5kaWNh dGUgd2hlbiB0aGUgbWlub3IgbW9kZSBpcyBhY3RpdmUNCmluIHRoZSBtb2Rl bGluZS4NCg0KKiBsaXNwL2lzZWFyY2guZWwgKGlzZWFyY2gtd2lkZW4tYXV0 b21hdGljYWxseSk6IE5ldyBkZWZjdXN0b20uDQooaXNlYXJjaC1zZWFyY2gp OiBVc2UgdGhlIG5ldyBkZWZjdXN0b20uDQoNCiogbGlzcC9iaW5kaW5ncy5l bCAobW9kZS1saW5lLW1vZGVzKTogRG8gbm90IHByb3BlcnRpemUgdGhlIGlu ZGljYXRpb24NCmluIHRoZSBtb2RlbGluZSB3aGVuIHRoZSBuZXcgbWlub3Ig bW9kZSBpcyBhY3RpdmUuDQoNCiogZXRjL05FV1M6IEFubm91bmNlIHRoZSBu ZXcgbWlub3IgbW9kZSwgYW5kIHJlbW92ZSB0aGUgdW5vYnNvbGV0aW9uDQpp bmRpY2F0aW9uIGZvciAnbG9uZ2xpbmVzLW1vZGUnLg0KDQoqIGxpc3AvbG9u Z2xpbmVzLmVsOiBSZW9ic29sZXRlIGxvbmdsaW5lcy1tb2RlLg0KDQoqIGRv Yy9lbWFjcy9kaXNwbGF5LnRleGkgKEF1dG8tTmFycm93aW5nKTogTmV3IHNl Y3Rpb24sIGRlc2NyaWJpbmcgdGhlIG5ldw0KbWlub3IgbW9kZS4NCihEaXNw bGF5KTogRW50cnkgZm9yIHRoZSBuZXcgc2VjdGlvbi4NCg0KKiBkb2MvZW1h Y3MvdHJvdWJsZS50ZXhpIChMb25nIExpbmVzKTogUmVtb3ZlIHRoZSBzZWN0 aW9uLg0KKExvc3NhZ2UpOiBSZW1vdmUgdGhlIGVudHJ5IGZvciB0aGUgTG9u ZyBMaW5lcyBzZWN0aW9uLg0KDQoqIGRvYy9lbWFjcy9lbWFjcy50ZXhpIChU b3ApOiBSZW1vdmUgdGhlIGVudHJ5IGZvciB0aGUgTG9uZyBMaW5lcyBzZWN0 aW9uLg0KLS0tDQogZG9jL2VtYWNzL2Rpc3BsYXkudGV4aSAgICAgICAgICAg fCAyNSArKysrKysrKysNCiBkb2MvZW1hY3MvZW1hY3MudGV4aSAgICAgICAg ICAgICB8ICAxIC0NCiBkb2MvZW1hY3MvdHJvdWJsZS50ZXhpICAgICAgICAg ICB8IDU5IC0tLS0tLS0tLS0tLS0tLS0tLS0tDQogZXRjL05FV1MgICAgICAg ICAgICAgICAgICAgICAgICAgfCAxNSArKysrLS0NCiBsaXNwL2JpbmRpbmdz LmVsICAgICAgICAgICAgICAgICB8IDEyICsrKy0tDQogbGlzcC9maWxlcy5l bCAgICAgICAgICAgICAgICAgICAgfCA5MiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KIGxpc3AvaXNlYXJjaC5lbCAgICAgICAgICAgICAg ICAgIHwgMzIgKysrKysrKy0tLS0NCiBsaXNwL3sgPT4gb2Jzb2xldGV9L2xv bmdsaW5lcy5lbCB8ICAxICsNCiBsaXNwL3gtZG5kLmVsICAgICAgICAgICAg ICAgICAgICB8IDY1ICsrKysrKysrKysrKysrKy0tLS0tLS0NCiBzcmMvYnVm ZmVyLmMgICAgICAgICAgICAgICAgICAgICB8ICA1ICsrDQogc3JjL2J1ZmZl ci5oICAgICAgICAgICAgICAgICAgICAgfCAgMyArKw0KIHNyYy9maWxlaW8u YyAgICAgICAgICAgICAgICAgICAgIHwgMjUgKysrKysrKysrDQogc3JjL2tl eWJvYXJkLmMgICAgICAgICAgICAgICAgICAgfCAyOCArKysrKysrKysrDQog c3JjL2xpc3AuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArDQogc3Jj L3NlYXJjaC5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KIHNyYy94 ZGlzcC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDcgKystDQogMTYgZmls ZXMgY2hhbmdlZCwgMjc0IGluc2VydGlvbnMoKyksIDEwMCBkZWxldGlvbnMo LSkNCiByZW5hbWUgbGlzcC97ID0+IG9ic29sZXRlfS9sb25nbGluZXMuZWwg KDk5JSkNCg0KZGlmZiAtLWdpdCBhL2RvYy9lbWFjcy9kaXNwbGF5LnRleGkg Yi9kb2MvZW1hY3MvZGlzcGxheS50ZXhpDQppbmRleCBjYWRhYzdlNDUzLi45 ZmU5NTMzZTg4IDEwMDY0NA0KLS0tIGEvZG9jL2VtYWNzL2Rpc3BsYXkudGV4 aQ0KKysrIGIvZG9jL2VtYWNzL2Rpc3BsYXkudGV4aQ0KQEAgLTE5LDYgKzE5 LDggQEAgRGlzcGxheQ0KICogSG9yaXpvbnRhbCBTY3JvbGxpbmc6OiAgIE1v dmluZyB0ZXh0IGxlZnQgYW5kIHJpZ2h0IGluIGEgd2luZG93Lg0KICogTmFy cm93aW5nOjogICAgICAgICAgICAgIFJlc3RyaWN0aW5nIGRpc3BsYXkgYW5k IGVkaXRpbmcgdG8gYSBwb3J0aW9uDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvZiB0aGUgYnVmZmVyLg0KKyogQXV0by1OYXJyb3dpbmc6OiAg ICAgICAgIEF1dG9tYXRpY2FsbHkgcmVzdHJpY3QgZGlzcGxheSB0byBhIHBv cnRpb24gb2YNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBi dWZmZXIuDQogKiBWaWV3IE1vZGU6OiAgICAgICAgICAgICAgVmlld2luZyBy ZWFkLW9ubHkgYnVmZmVycy4NCiAqIEZvbGxvdyBNb2RlOjogICAgICAgICAg ICBGb2xsb3cgbW9kZSBsZXRzIHR3byB3aW5kb3dzIHNjcm9sbCBhcyBvbmUu DQogKiBGYWNlczo6ICAgICAgICAgICAgICAgICAgSG93IHRvIGNoYW5nZSB0 aGUgZGlzcGxheSBzdHlsZSB1c2luZyBmYWNlcy4NCkBAIC00NjcsNiArNDY5 LDI5IEBAIE5hcnJvd2luZw0KIGlmIHlvdSBlbmFibGUgdGhlIGNvbW1hbmQs IGNvbmZpcm1hdGlvbiB3aWxsIG5vIGxvbmdlciBiZSByZXF1aXJlZCBmb3IN CiBpdC4gIEB4cmVme0Rpc2FibGluZ30uDQogDQorQG5vZGUgQXV0by1OYXJy b3dpbmcNCitAZmluZGV4IGF1dG8tbmFycm93LW1vZGUNCitAdmluZGV4IGF1 dG8tbmFycm93LWxvbmctbGluZS10aHJlc2hvbGQNCitAdmluZGV4IGF1dG8t bmFycm93LWRpc3BsYXktbGVuZ3RoDQorQHZpbmRleCBhdXRvLW5hcnJvdy13 aWRlbi1hdXRvbWF0aWNhbGx5DQorDQorICBXaGVuIGEgZmlsZSB3aXRoIGV4 dHJlbWVseSBsb25nIGxpbmVzIGlzIG9wZW5lZCBvciBpbnNlcnRlZCBpbiBh DQorYnVmZmVyLCBFbWFjcyBhdXRvbWF0aWNhbGx5IGVudGVycyBhdXRvLW5h cnJvdyBtb2RlLCBhbmQgdGhlIHdvcmQNCitAc2FtcHtBdXRvLU5hcnJvd30g YXBwZWFycyBpbiB0aGUgbW9kZSBsaW5lLiAgVGhpcyBtZWFucyB0aGF0IEVt YWNzDQorcmVzdHJpY3RzIGRpc3BsYXksIGJ1dCBub3QgZWRpdGluZywgdG8g YSBwb3J0aW9uIG9mIHRoZSBidWZmZXIgYWJvdmUNCithbmQgYmVsb3cgcG9p bnQuICBBbGwgZWRpdGluZyBjb21tYW5kcywgaW5jbHVkaW5nIG5hcnJvd2lu ZyBjb21tYW5kcywNCityZW1haW4gYXZhaWxhYmxlLCBhbmQgdGhleSBhY3Qg b24gdGhlIHdob2xlIGJ1ZmZlci4gIEZvciBleGFtcGxlLA0KK0BrYmR7TS0+ fSBtb3ZlcyBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGFuZCBu b3QsIGFzIHdvdWxkDQoraGFwcGVuIHdpdGggb3JkaW5hcnkgbmFycm93aW5n LCB0byB0aGUgZW5kIG9mIHRoZSBwb3J0aW9uIG9mIHRoZQ0KK2J1ZmZlciB0 byB3aGljaCBkaXNwbGF5IGlzIGN1cnJlbnRseSByZXN0cmljdGVkLg0KKw0K KyAgVGhlIGJlaGF2aW9yIG9mIGF1dG8tbmFycm93IG1vZGUgaXMgY29udHJv bGxlZCBieSB0aHJlZSB2YXJpYWJsZXM6DQorQGNvZGV7YXV0by1uYXJyb3ct bG9uZy1saW5lLXRocmVzaG9sZH0gaXMgdGhlIGxpbmUgbGVuZ3RoIGFib3Zl IHdoaWNoDQorYXV0by1uYXJyb3cgbW92ZSBpcyBlbnRlcmVkLCBAY29kZXth dXRvLW5hcnJvdy1kaXNwbGF5LWxlbmd0aH0gaXMgdGhlDQorbnVtYmVyIG9m IGNoYXJhY3RlcnMgdG8gd2hpY2ggZGlzcGxheSBpcyByZXN0cmljdGVkLCBh bmQNCitAY29kZXthdXRvLW5hcnJvdy13aWRlbi1hdXRvbWF0aWNhbGx5fSBp cyBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIHdoaWNoDQorZGlzcGxheSBpcyB3 aWRlbmVkIGJlZm9yZSB0aGV5IGFyZSBleGVjdXRlZC4NCisNCiBAbm9kZSBW aWV3IE1vZGUNCiBAc2VjdGlvbiBWaWV3IE1vZGUNCiBAY2luZGV4IFZpZXcg bW9kZQ0KZGlmZiAtLWdpdCBhL2RvYy9lbWFjcy9lbWFjcy50ZXhpIGIvZG9j L2VtYWNzL2VtYWNzLnRleGkNCmluZGV4IDVlNzI2OTliYmUuLmI0M2M5NjZm ODcgMTAwNjQ0DQotLS0gYS9kb2MvZW1hY3MvZW1hY3MudGV4aQ0KKysrIGIv ZG9jL2VtYWNzL2VtYWNzLnRleGkNCkBAIC0xMTkwLDcgKzExOTAsNiBAQCBU b3ANCiAqIENyYXNoaW5nOjogICAgICAgICAgICBXaGF0IEVtYWNzIGRvZXMg d2hlbiBpdCBjcmFzaGVzLg0KICogQWZ0ZXIgYSBDcmFzaDo6ICAgICAgIFJl Y292ZXJpbmcgZWRpdGluZyBpbiBhbiBFbWFjcyBzZXNzaW9uIHRoYXQgY3Jh c2hlZC4NCiAqIEVtZXJnZW5jeSBFc2NhcGU6OiAgICBXaGF0IHRvIGRvIGlm IEVtYWNzIHN0b3BzIHJlc3BvbmRpbmcuDQotKiBMb25nIExpbmVzOjogICAg ICAgICAgTWl0aWdhdGluZyBzbG93bmVzcyBkdWUgdG8gZXh0cmVtZWx5IGxv bmcgbGluZXMuDQogKiBERUwgRG9lcyBOb3QgRGVsZXRlOjogV2hhdCB0byBk byBpZiBAa2V5e0RFTH0gZG9lc24ndCBkZWxldGUuDQogDQogUmVwb3J0aW5n IEJ1Z3MNCmRpZmYgLS1naXQgYS9kb2MvZW1hY3MvdHJvdWJsZS50ZXhpIGIv ZG9jL2VtYWNzL3Ryb3VibGUudGV4aQ0KaW5kZXggZjA2YjkzNzU5ZC4uODg3 ZTVjNjE3MCAxMDA2NDQNCi0tLSBhL2RvYy9lbWFjcy90cm91YmxlLnRleGkN CisrKyBiL2RvYy9lbWFjcy90cm91YmxlLnRleGkNCkBAIC0xNTgsNyArMTU4 LDYgQEAgTG9zc2FnZQ0KICogQ3Jhc2hpbmc6OiAgICAgICAgICAgICAgV2hh dCBFbWFjcyBkb2VzIHdoZW4gaXQgY3Jhc2hlcy4NCiAqIEFmdGVyIGEgQ3Jh c2g6OiAgICAgICAgIFJlY292ZXJpbmcgZWRpdGluZyBpbiBhbiBFbWFjcyBz ZXNzaW9uIHRoYXQgY3Jhc2hlZC4NCiAqIEVtZXJnZW5jeSBFc2NhcGU6OiAg ICAgIFdoYXQgdG8gZG8gaWYgRW1hY3Mgc3RvcHMgcmVzcG9uZGluZy4NCi0q IExvbmcgTGluZXM6OiAgICAgICAgICAgIE1pdGlnYXRpbmcgc2xvd25lc3Mg ZHVlIHRvIGV4dHJlbWVseSBsb25nIGxpbmVzLg0KICogREVMIERvZXMgTm90 IERlbGV0ZTo6ICAgV2hhdCB0byBkbyBpZiBAa2V5e0RFTH0gZG9lc24ndCBk ZWxldGUuDQogQGVuZCBtZW51DQogDQpAQCAtNDMzLDY0ICs0MzIsNiBAQCBF bWVyZ2VuY3kgRXNjYXBlDQogZW1lcmdlbmN5IGVzY2FwZS0tLWJ1dCB0aGVy ZSBhcmUgY2FzZXMgd2hlcmUgaXQgd29uJ3Qgd29yaywgd2hlbiBhDQogc3lz dGVtIGNhbGwgaGFuZ3Mgb3Igd2hlbiBFbWFjcyBpcyBzdHVjayBpbiBhIHRp Z2h0IGxvb3AgaW4gQyBjb2RlLg0KIA0KLUBub2RlIExvbmcgTGluZXMNCi1A c3Vic2VjdGlvbiBMb25nIExpbmVzDQotQGNpbmRleCBsb25nIGxpbmVzDQot DQotICBGb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMgKHNvbWUgb2Ygd2hpY2gg YXJlIGZ1bmRhbWVudGFsIHRvIHRoZSBFbWFjcw0KLXJlZGlzcGxheSBjb2Rl IGFuZCB0aGUgY29tcGxleCByYW5nZSBvZiBwb3NzaWJpbGl0aWVzIGl0IGhh bmRsZXM7DQotb3RoZXJzIG9mIHdoaWNoIGFyZSBkdWUgdG8gbW9kZXMgYW5k IGZlYXR1cmVzIHdoaWNoIGRvIG5vdCBzY2FsZSB3ZWxsDQotaW4gdW51c3Vh bCBjaXJjdW1zdGFuY2VzKSwgRW1hY3MgY2FuIHBlcmZvcm0gcG9vcmx5IHdo ZW4gZXh0cmVtZWx5DQotbG9uZyBsaW5lcyBhcmUgcHJlc2VudCAod2hlcmUg YGBleHRyZW1lbHkgbG9uZycnIHVzdWFsbHkgbWVhbnMgYXQNCi1sZWFzdCBt YW55IHRob3VzYW5kcyBvZiBjaGFyYWN0ZXJzKS4NCi0NCi1AY2luZGV4IEBj b2Rle3NvLWxvbmd9IG1vZGUNCi1AZmluZGV4IGdsb2JhbC1zby1sb25nLW1v ZGUNCi1AdmluZGV4IHNvLWxvbmctYWN0aW9uDQotICBBIHBhcnRpY3VsYXIg cHJvYmxlbSBpcyB0aGF0IEVtYWNzIG1heSBgYGhhbmcnJyBmb3IgYSBsb25n IHRpbWUgYXQNCi10aGUgcG9pbnQgb2YgdmlzaXRpbmcgYSBmaWxlIHdpdGgg ZXh0cmVtZWx5IGxvbmcgbGluZXMuICBUaGlzIGNhbiBiZQ0KLW1pdGlnYXRl ZCBieSBlbmFibGluZyB0aGUgQGZpbGV7c28tbG9uZ30gbGlicmFyeSwgd2hp Y2ggZGV0ZWN0cyB3aGVuIGENCi12aXNpdGVkIGZpbGUgY29udGFpbnMgYWJu b3JtYWxseSBsb25nIGxpbmVzLCBhbmQgdGFrZXMgc3RlcHMgdG8NCi1kaXNh YmxlIGZlYXR1cmVzIHdoaWNoIGFyZSBsaWFibGUgdG8gY2F1c2Ugc2xvd25l c3MgaW4gdGhhdCBzaXR1YXRpb24uDQotVG8gZW5hYmxlIHRoaXMgbGlicmFy eSwgdHlwZSBAa2Jke00teCBnbG9iYWwtc28tbG9uZy1tb2RlIEBrZXl7UkVU fX0sDQotb3IgdHVybiBvbiB0aGUgQGNvZGV7Z2xvYmFsLXNvLWxvbmctbW9k ZX0gaW4geW91ciBpbml0IGZpbGUNCi0oQHB4cmVme0luaXQgRmlsZX0pLCBv ciBjdXN0b21pemUgdGhlIEBjb2Rle2dsb2JhbC1zby1sb25nLW1vZGV9DQot b3B0aW9uLiAgWW91IGNhbiB0YWlsb3IgdGhpcyBtb2RlJ3Mgb3BlcmF0aW9u IGJ5IGN1c3RvbWl6aW5nIHRoZQ0KLXZhcmlhYmxlIEBjb2Rle3NvLWxvbmct YWN0aW9ufS4NCi0NCi0gIFRoZSBAZmlsZXtzby1sb25nfSBsaWJyYXJ5IGNh biBhbHNvIHNpZ25pZmljYW50bHkgaW1wcm92ZQ0KLXBlcmZvcm1hbmNlIHdo ZW4gbW92aW5nIGFuZCBlZGl0aW5nIGluIGEgYnVmZmVyIHdpdGggbG9uZyBs aW5lcy4NCi1QZXJmb3JtYW5jZSBpcyBzdGlsbCBsaWtlbHkgdG8gZGVncmFk ZSBhcyB5b3UgZ2V0IGRlZXBlciBpbnRvIHRoZSBsb25nDQotbGluZXMsIGJ1 dCB0aGUgaW1wcm92ZW1lbnRzIGZyb20gdXNpbmcgdGhpcyBsaWJyYXJ5IGNh biBuZXZlcnRoZWxlc3MNCi1iZSBzdWJzdGFudGlhbC4NCi0NCi1AZmluZGV4 IHNvLWxvbmctY29tbWVudGFyeQ0KLSAgVXNlIEBrYmR7TS14IHNvLWxvbmct Y29tbWVudGFyeX0gdG8gdmlldyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhp cw0KLWxpYnJhcnkgYW5kIGxlYXJuIG1vcmUgYWJvdXQgaG93IHRvIGVuYWJs ZSBhbmQgY29uZmlndXJlIGl0Lg0KLQ0KLUB2aW5kZXggbWF4LXJlZGlzcGxh eS10aWNrcw0KLSAgSWYgZXZlbiBAY29kZXtzby1sb25nLW1vZGV9IGRvZXNu J3QgaGVscCBtYWtpbmcgRW1hY3MgcmVzcG9uc2l2ZQ0KLWVub3VnaCwgb3Ig aWYgeW91J2QgcmF0aGVyIG5vdCBkaXNhYmxlIHRoZSBkaXNwbGF5LXJlbGF0 ZWQgZmVhdHVyZXMNCi10aGF0IEBjb2Rle3NvLWxvbmctbW9kZX0gdHVybnMg b2ZmLCB5b3UgY2FuIGluc3RlYWQgY3VzdG9taXplIHRoZQ0KLXZhcmlhYmxl IEBjb2Rle21heC1yZWRpc3BsYXktdGlja3N9IHRvIGEgbm9uLXplcm8gdmFs dWUuICBUaGVuIEVtYWNzDQotd2lsbCBhYm9ydCByZWRpc3BsYXkgb2YgYSB3 aW5kb3cgYW5kIGNvbW1hbmRzLCBsaWtlIEBrYmR7Qy1ufSBhbmQNCi1Aa2Jk e00tdn0sIHdoaWNoIHVzZSB0aGUgZGlzcGxheSBjb2RlIHRvIGRvIHRoZWly IGpvYiwgaWYgcHJvY2Vzc2luZyBhDQotd2luZG93IG5lZWRzIG1vcmUgbG93 LWxldmVsIGRpc3BsYXkgb3BlcmF0aW9ucyB0aGFuIHRoZSB2YWx1ZSBvZiB0 aGlzDQotdmFyaWFibGUuICBUaGUgZGlzcGxheSBvZiB0aGUgb2ZmZW5kaW5n IHdpbmRvdyB3aWxsIHRoZW4gcmVtYWluDQotb3V0ZGF0ZWQsIGFuZCBwb3Nz aWJseSBpbmNvbXBsZXRlLCBvbiB0aGUgc2NyZWVuLCBidXQgRW1hY3Mgc2hv dWxkDQotb3RoZXJ3aXNlIGJlIHJlc3BvbnNpdmUsIGFuZCB5b3UgY291bGQg dGhlbiBzd2l0Y2ggdG8gYW5vdGhlciBidWZmZXIsDQotb3Iga2lsbCB0aGUg cHJvYmxlbWF0aWMgYnVmZmVyLCBvciB0dXJuIG9uIEBjb2Rle3NvLWxvbmct bW9kZX0gb3INCi1AY29kZXtzby1sb25nLW1pbm9yLW1vZGV9IGluIHRoYXQg YnVmZmVyLiAgV2hlbiB0aGUgZGlzcGxheSBvZiBhDQotd2luZG93IGlzIGFi b3J0ZWQgZHVlIHRvIHRoaXMgcmVhc29uLCB0aGUgYnVmZmVyIHNob3duIGlu IHRoYXQgd2luZG93DQotd2lsbCBub3QgaGF2ZSBhbnkgb2YgaXRzIHdpbmRv d3MgcmVkaXNwbGF5ZWQgdW50aWwgdGhlIGJ1ZmZlciBpcw0KLW1vZGlmaWVk IG9yIHVudGlsIHlvdSB0eXBlIEBrYmR7Qy1sfSAoQHB4cmVme1JlY2VudGVy aW5nfSkgaW4gb25lIG9mDQotdGhhdCBidWZmZXIncyB3aW5kb3dzLg0KLQ0K LSAgSWYgeW91IGRlY2lkZSB0byBjdXN0b21pemUgdGhpcyB2YXJpYWJsZSB0 byBhIG5vbi16ZXJvIHZhbHVlLCB3ZQ0KLXJlY29tbWVuZCB0byB1c2UgYSB2 YWx1ZSBiZXR3ZWVuIDEwMCwwMDAgYW5kIDEsMDAwLDAwMCwgZGVwZW5kaW5n IG9uDQoteW91ciBwYXRpZW5jZSBhbmQgdGhlIHNwZWVkIG9mIHlvdXIgc3lz dGVtLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMNCi16ZXJvLCB3aGljaCBkaXNh YmxlcyB0aGlzIGZlYXR1cmUuDQotDQogQG5vZGUgREVMIERvZXMgTm90IERl bGV0ZQ0KIEBzdWJzZWN0aW9uIElmIEBrZXl7REVMfSBGYWlscyB0byBEZWxl dGUNCiBAY2luZGV4IEBrZXl7REVMfSB2cyBAa2V5e0JBQ0tTUEFDRX0NCmRp ZmYgLS1naXQgYS9ldGMvTkVXUyBiL2V0Yy9ORVdTDQppbmRleCA3OTY3MTkw YzZlLi4zMGM3MWU3ZjBjIDEwMDY0NA0KLS0tIGEvZXRjL05FV1MNCisrKyBi L2V0Yy9ORVdTDQpAQCAtMzI0LDkgKzMyNCw2IEBAIHN0YXJ0dXAuICBQcmV2 aW91c2x5LCB0aGVzZSBmdW5jdGlvbnMgaWdub3JlZA0KIAwNCiAqIENoYW5n ZXMgaW4gRW1hY3MgMjkuMQ0KIA0KLS0tLQ0KLSoqICdsb25nbGluZXMtbW9k ZScgaXMgbm8gbG9uZ2VyIG9ic29sZXRlLg0KLQ0KICsrKw0KICoqIE5ldyBj b21tYW5kIHRvIGNoYW5nZSB0aGUgZm9udCBzaXplIGdsb2JhbGx5Lg0KIFRv IGluY3JlYXNlIHRoZSBmb250IHNpemUsIHR5cGUgJ0MteCBDLU0tKycgb3Ig J0MteCBDLU0tPSc7IHRvDQpAQCAtOTAxLDYgKzg5OCwxOCBAQCBGb3JtZXJs eSBpdCBpbnZva2VkICdqdXN0LW9uZS1zcGFjZScuICBUaGUgYWN0aW9ucyBw ZXJmb3JtZWQgYnkNCiAnY3ljbGUtc3BhY2luZycgYW5kIHRoZWlyIG9yZGVy IGNhbiBub3cgYmUgY3VzdG9taXplZCB2aWEgdGhlIHVzZXINCiBvcHRpb24g J2N5Y2xlLXNwYWNpbmctYWN0aW9ucycuDQogDQorKysrDQorKiogRW1hY3Mg aXMgbm93IGNhcGFibGUgb2YgZWRpdGluZyBmaWxlcyB3aXRoIGFyYml0YXJp bHkgbG9uZyBsaW5lcy4NCitXaGVuIGEgZmlsZSB3aXRoIGxvbmcgbGluZXMg aXMgb3BlbmVkIG9yIGluc2VydGVkIGluIGEgYnVmZmVyLCBFbWFjcw0KK2F1 dG9tYXRpY2FsbHkgZW50ZXJzIGF1dG8tbmFycm93IG1vZGUuICBUaGlzIG1l YW5zIHRoYXQgRW1hY3MNCityZXN0cmljdHMgZGlzcGxheSwgYnV0IG5vdCBl ZGl0aW5nLCB0byBhIHBvcnRpb24gb2YgdGhlIGJ1ZmZlciBhYm92ZQ0KK2Fu ZCBiZWxvdyBwb2ludC4gIEFsbCBlZGl0aW5nIGNvbW1hbmRzLCBpbmNsdWRp bmcgbmFycm93aW5nIGNvbW1hbmRzLA0KK3JlbWFpbiBhdmFpbGFibGUsIGFu ZCB0aGV5IGFjdCBvbiB0aGUgd2hvbGUgYnVmZmVyLiAgVGhlIGJlaGF2aW9y IG9mDQordGhhdCBtb2RlIGlzIGNvbnRyb2xsZWQgYnkgdGhyZWUgdmFyaWFi bGVzOg0KK2F1dG8tbmFycm93LWxvbmctbGluZS10aHJlc2hvbGQsIGF1dG8t bmFycm93LWRpc3BsYXktbGVuZ3RoIGFuZA0KK2F1dG8tbmFycm93LXdpZGVu LWF1dG9tYXRpY2FsbHkuICBUbyBkaXNhYmxlIHRoYXQgZmVhdHVyZSwgc2V0 DQorYXV0by1uYXJyb3ctbG9uZy1saW5lLXRocmVzaG9sZCB0byBuaWwgaW4g eW91ciBpbml0IGZpbGUuDQorDQogLS0tDQogKiogJ3phcC10by1jaGFyJyBh bmQgJ3phcC11cC10by1jaGFyJyBhcmUgY2FzZS1zZW5zaXRpdmUgZm9yIHVw cGVyLWNhc2UgY2hhcnMuDQogVGhlc2UgY29tbWFuZHMgbm93IGJlaGF2ZSBh cyBjYXNlLXNlbnNpdGl2ZSBmb3IgaW50ZXJhY3RpdmUgY2FsbHMgd2hlbg0K ZGlmZiAtLWdpdCBhL2xpc3AvYmluZGluZ3MuZWwgYi9saXNwL2JpbmRpbmdz LmVsDQppbmRleCAwY2YxODM0YTRmLi5mYTUwNDA3NzZkIDEwMDY0NA0KLS0t IGEvbGlzcC9iaW5kaW5ncy5lbA0KKysrIGIvbGlzcC9iaW5kaW5ncy5lbA0K QEAgLTQwMCwxMCArNDAwLDE0IEBAIG1vZGUtbGluZS1tb2Rlcw0KIG1vdXNl LTI6IFNob3cgaGVscCBmb3IgbWlub3IgbW9kZVxuXA0KIG1vdXNlLTM6IFRv Z2dsZSBtaW5vciBtb2RlcyINCiAJCQlsb2NhbC1tYXAgLG1vZGUtbGluZS1t aW5vci1tb2RlLWtleW1hcCkNCi0JICAocHJvcGVydGl6ZSAiJW4iICdoZWxw LWVjaG8gIm1vdXNlLTI6IFJlbW92ZSBuYXJyb3dpbmcgZnJvbSBidWZmZXIi DQotCQkgICAgICAnbW91c2UtZmFjZSAnbW9kZS1saW5lLWhpZ2hsaWdodA0K LQkJICAgICAgJ2xvY2FsLW1hcCAobWFrZS1tb2RlLWxpbmUtbW91c2UtbWFw DQotCQkJCSAgJ21vdXNlLTIgIydtb2RlLWxpbmUtd2lkZW4pKQ0KKyAgICAg ICAgICAnKDpldmFsDQorICAgICAgICAgICAgKGlmIChub3QgKGVxIGF1dG8t bmFycm93LS1uYXJyb3dpbmcgJ2F1dG8pKQ0KKyAgICAgICAgICAgICAgICAo cHJvcGVydGl6ZSAiJW4iDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdoZWxwLWVjaG8gIm1vdXNlLTI6IFJlbW92ZSBuYXJyb3dpbmcgZnJvbSBi dWZmZXIiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3VzZS1m YWNlICdtb2RlLWxpbmUtaGlnaGxpZ2h0DQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdsb2NhbC1tYXAgKG1ha2UtbW9kZS1saW5lLW1vdXNlLW1h cA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn bW91c2UtMiAjJ21vZGUtbGluZS13aWRlbikpDQorICAgICAgICAgICAgICAi JW4iKSkNCiAJICAiKSINCiAJICAocHJvcGVydGl6ZSAiJV0iICdoZWxwLWVj aG8gcmVjdXJzaXZlLWVkaXQtaGVscC1lY2hvKQ0KIAkgICIgIikpDQpkaWZm IC0tZ2l0IGEvbGlzcC9maWxlcy5lbCBiL2xpc3AvZmlsZXMuZWwNCmluZGV4 IDg4MTIxNzUwMTQuLmFiZGVlYTdhODAgMTAwNjQ0DQotLS0gYS9saXNwL2Zp bGVzLmVsDQorKysgYi9saXNwL2ZpbGVzLmVsDQpAQCAtMjY0OCw2ICsyNjQ4 LDk4IEBAIGZpbmQtZmlsZS1saXRlcmFsbHkNCiAgIAkgIChjb25maXJtLW5v bmV4aXN0ZW50LWZpbGUtb3ItYnVmZmVyKSkpKQ0KICAgKHN3aXRjaC10by1i dWZmZXIgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlbmFtZSBuaWwgdCkpKQ0K IAwNCisoZGVmY3VzdG9tIGF1dG8tbmFycm93LWRpc3BsYXktbGVuZ3RoIDMw MDAwDQorICAiTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gd2hpY2ggZGlzcGxh eSBpcyByZXN0cmljdGVkIGluIGBhdXRvLW5hcnJvdy1tb2RlJy4iDQorICA6 Z3JvdXAgJ2ZpbGVzDQorICA6Z3JvdXAgJ2ZpbmQtZmlsZQ0KKyAgOnZlcnNp b24gIjI5LjEiDQorICA6dHlwZSAnaW50ZWdlcikNCisNCisoZGVmY3VzdG9t IGF1dG8tbmFycm93LXdpZGVuLWF1dG9tYXRpY2FsbHkNCisgICcoIG1vdmUt YmVnaW5uaW5nLW9mLWxpbmUgbW92ZS1lbmQtb2YtbGluZSBiYWNrd2FyZC1z ZW50ZW5jZSBmb3J3YXJkLXNlbnRlbmNlDQorICAgICBiYWNrd2FyZC1zZXhw IGZvcndhcmQtc2V4cCBiZWdpbm5pbmctb2YtZGVmdW4gZW5kLW9mLWRlZnVu DQorICAgICBiZWdpbm5pbmctb2YtYnVmZmVyIGVuZC1vZi1idWZmZXIgZ290 by1jaGFyIGdvdG8tbGluZQ0KKyAgICAgbWFyay1zZXhwIG1hcmstZGVmdW4g bWFyay1wYXJhZ3JhcGggbWFyay13aG9sZS1idWZmZXIgbWFyay1wYWdlDQor ICAgICBleGNoYW5nZS1wb2ludC1hbmQtbWFyayBwb3AtZ2xvYmFsLW1hcmsg c2V0LW1hcmstY29tbWFuZCBqdW1wLXRvLXJlZ2lzdGVyDQorICAgICBib29r bWFyay1qdW1wKQ0KKyAgIkNvbW1hbmRzIGZvciB3aGljaCBkaXNwbGF5IGlz IGF1dG9tYXRpY2FsbHkgd2lkZW5lZCBpbiBgYXV0by1uYXJyb3ctbW9kZScu Ig0KKyAgOmdyb3VwICdmaWxlcw0KKyAgOmdyb3VwICdmaW5kLWZpbGUNCisg IDp2ZXJzaW9uICIyOS4xIg0KKyAgOnR5cGUgJyhyZXBlYXQgZnVuY3Rpb24p KQ0KKw0KKyhkZWZ2YXItbG9jYWwgYXV0by1uYXJyb3ctLXdpZGVuLWF1dG9t YXRpY2FsbHkgbmlsDQorICAiSW50ZXJuYWwgdmFyaWFibGUgdXNlZCBieSBg YXV0by1uYXJyb3ctbW9kZScuIikNCisNCisoZGVmdmFyLWxvY2FsIGF1dG8t bmFycm93LS1pc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHkgbmlsDQorICAi SW50ZXJuYWwgdmFyaWFibGUgdXNlZCBieSBgYXV0by1uYXJyb3ctbW9kZScu IikNCisNCisoZGVmdmFyLWxvY2FsIGF1dG8tbmFycm93LS1pbml0aWFsaXpl ZCBuaWwNCisgICJJbnRlcm5hbCB2YXJpYWJsZSB1c2VkIGJ5IGBhdXRvLW5h cnJvdy1tb2RlJy4iKQ0KKw0KKyhkZWZ1biBhdXRvLW5hcnJvdy1wcmUtY29t bWFuZC1mdW5jdGlvbiAoKQ0KKyAgIkNvbmRpdGlvbmFsbHkgd2lkZW4gZGlz cGxheSB3aGVuIGBhdXRvLW5hcnJvdy1tb2RlJyBpcyBpbiBlZmZlY3QuIg0K KyAgKHdoZW4gYXV0by1uYXJyb3ctbW9kZQ0KKyAgICAodW5sZXNzIGF1dG8t bmFycm93LS1pbml0aWFsaXplZA0KKyAgICAgIChzZXRxIGF1dG8tbmFycm93 LS13aWRlbi1hdXRvbWF0aWNhbGx5IHdpZGVuLWF1dG9tYXRpY2FsbHkNCisg ICAgICAgICAgICBhdXRvLW5hcnJvdy0taXNlYXJjaC13aWRlbi1hdXRvbWF0 aWNhbGx5IGlzZWFyY2gtd2lkZW4tYXV0b21hdGljYWxseQ0KKyAgICAgICAg ICAgIGF1dG8tbmFycm93LS1uYXJyb3dpbmcgJ2F1dG8NCisgICAgICAgICAg ICBhdXRvLW5hcnJvdy0taW5pdGlhbGl6ZWQgdCkpDQorICAgIChzZXRxLWxv Y2FsIHdpZGVuLWF1dG9tYXRpY2FsbHkgdA0KKyAgICAgICAgICAgICAgICBp c2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHkgdCkNCisgICAgKGlmIChtZW1x IHRoaXMtY29tbWFuZCAnKG5hcnJvdy10by1yZWdpb24gbmFycm93LXRvLWRl ZnVuIG5hcnJvdy10by1wYWdlKSkNCisgICAgICAgIChzZXRxIGF1dG8tbmFy cm93LS1uYXJyb3dpbmcgJ2V4cGxpY2l0DQorICAgICAgICAgICAgICB3aWRl bi1hdXRvbWF0aWNhbGx5IGF1dG8tbmFycm93LS13aWRlbi1hdXRvbWF0aWNh bGx5DQorICAgICAgICAgICAgICBpc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2Fs bHkgYXV0by1uYXJyb3ctLWlzZWFyY2gtd2lkZW4tYXV0b21hdGljYWxseSkp DQorICAgIChpZiAoZXEgdGhpcy1jb21tYW5kICd3aWRlbikNCisgICAgICAg IChzZXRxIGF1dG8tbmFycm93LS1uYXJyb3dpbmcgJ2F1dG8pKQ0KKyAgICAo d2hlbiAoYW5kIChub3QgKGVxIGF1dG8tbmFycm93LS1uYXJyb3dpbmcgJ2V4 cGxpY2l0KSkNCisgICAgICAgICAgICAgICAobWVtcSB0aGlzLWNvbW1hbmQg YXV0by1uYXJyb3ctd2lkZW4tYXV0b21hdGljYWxseSkpDQorICAgICAgKHdp ZGVuKSkpKQ0KKw0KKyhkZWZ1biBhdXRvLW5hcnJvdy1wb3N0LWNvbW1hbmQt ZnVuY3Rpb24gKCkNCisgICJVcGRhdGUgZGlzcGxheSBuYXJyb3dpbmcgd2hl biBgYXV0by1uYXJyb3ctbW9kZScgaXMgaW4gZWZmZWN0LiINCisgICh3aGVu IChhbmQgYXV0by1uYXJyb3ctbW9kZQ0KKyAgICAgICAgICAgICAobm90IChl cSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdleHBsaWNpdCkpKQ0KKyAgICAo dW5sZXNzIGF1dG8tbmFycm93LS1pbml0aWFsaXplZA0KKyAgICAgIChzZXRx IGF1dG8tbmFycm93LS1uYXJyb3dpbmcgJ2F1dG8pKQ0KKyAgICAobGV0IChw b2ludCBjdXItcG9pbnQtbWluIGJ1Zi1wb2ludC1taW4gYnVmLXBvaW50LW1h eCBzaXplKQ0KKyAgICAgIChzZXRxIHBvaW50IChwb2ludCkgY3VyLXBvaW50 LW1pbiAocG9pbnQtbWluKQ0KKyAgICAgICAgICAgIHNpemUgKC8gYXV0by1u YXJyb3ctZGlzcGxheS1sZW5ndGggMykpDQorICAgICAgKHNhdmUtcmVzdHJp Y3Rpb24NCisgICAgICAgICh3aWRlbikNCisgICAgICAgIChzZXRxIGJ1Zi1w b2ludC1taW4gKHBvaW50LW1pbikgYnVmLXBvaW50LW1heCAocG9pbnQtbWF4 KSkpDQorICAgICAgKGxldCogKChwb3MgKCogKG1pbiAobWF4ICgvIHBvaW50 IHNpemUpIDEpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoMS0gKC8g YnVmLXBvaW50LW1heCBzaXplKSkpDQorICAgICAgICAgICAgICAgICAgICAg c2l6ZSkpDQorICAgICAgICAgICAgIChiZWdpbiAobWF4ICgtIHBvcyBzaXpl KSBidWYtcG9pbnQtbWluKSkNCisgICAgICAgICAgICAgKGVuZCAobWluICgr IGJlZ2luICgqIDMgc2l6ZSkpIGJ1Zi1wb2ludC1tYXgpKSkNCisgICAgICAg ICh3aGVuIChvciAobm90IChidWZmZXItbmFycm93ZWQtcCkpDQorCQkgIChu b3QgKD0gYmVnaW4gY3VyLXBvaW50LW1pbikpKQ0KKwkgIChuYXJyb3ctdG8t cmVnaW9uIGJlZ2luIGVuZCkpKSkpKQ0KKw0KKyhzZXRxIGF1dG8tbmFycm93 LWxvbmctbGluZS10aHJlc2hvbGQgMzAwMDANCisgICAgICBhdXRvLW5hcnJv dy1wcmUtY29tbWFuZC1mdW5jdGlvbiAjJ2F1dG8tbmFycm93LXByZS1jb21t YW5kLWZ1bmN0aW9uDQorICAgICAgYXV0by1uYXJyb3ctcG9zdC1jb21tYW5k LWZ1bmN0aW9uICMnYXV0by1uYXJyb3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9u KQ0KKw0KKyhkZWZpbmUtbWlub3ItbW9kZSBhdXRvLW5hcnJvdy1tb2RlDQor ICAiQXV0b21hdGljYWxseSBuYXJyb3cgdGhlIGRpc3BsYXkgb2YgYSBidWZm ZXIgYWJvdmUgYW5kIGJlbG93IHBvaW50Lg0KKw0KK1RoaXMgbW9kZSBpcyBh dXRvbWF0aWNhbGx5IGVudGVyZWQgd2hlbiBhIGZpbGUgd2l0aCBvbmUgb3Ig bW9yZSBsaW5lcw0KK2xvbmdlciB0aGFuIGBhdXRvLW5hcnJvdy1sb25nLWxp bmUtdGhyZXNob2xkJyBpcyBvcGVuZWQgb3IgaW5zZXJ0ZWQNCitpbiBhIGJ1 ZmZlci4gIEl0IHJlc3RyaWN0cyBkaXNwbGF5LCBidXQgbm90IGVkaXRpbmcs IHRvDQorYGF1dG8tbmFycm93LWRpc3BsYXktbGVuZ3RoJyBjaGFyYWN0ZXJz LiAgRGlzcGxheSBpcyB3aWRlbmVkIGJlZm9yZQ0KK2V4ZWN1dGluZyBhbnkg b2YgdGhlIGNvbW1hbmRzIGxpc3RlZCBpbiBgYXV0by1uYXJyb3ctd2lkZW4t YXV0b21hdGljYWxseScuIg0KKyAgOmdyb3VwICdmaWxlcw0KKyAgOnZlcnNp b24gIjI5LjEiDQorICA6YWZ0ZXItaG9vayAocHJvZ24gKHB1dCAnYXV0by1u YXJyb3ctbW9kZSAncGVybWFuZW50LWxvY2FsIHQpDQorICAgICAgICAgICAg ICAgICAgICAgKHB1dCAnYXV0by1uYXJyb3ctLW5hcnJvd2luZyAncGVybWFu ZW50LWxvY2FsIHQpKQ0KKyAgKGlmIGF1dG8tbmFycm93LW1vZGUNCisgICAg ICAoYXV0by1uYXJyb3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9uKQ0KKyAgICAo d2hlbiAobm90IChlcSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdleHBsaWNp dCkpDQorICAgICAgKHdpZGVuKSkNCisgICAgKHNldHEgYXV0by1uYXJyb3ct LW5hcnJvd2luZyBuaWwpKSkNCisMDQogKGRlZnVuIGFmdGVyLWZpbmQtZmls ZSAoJm9wdGlvbmFsIGVycm9yIHdhcm4gbm9hdXRvDQogCQkJCSAgX2FmdGVy LWZpbmQtZmlsZS1mcm9tLXJldmVydC1idWZmZXINCiAJCQkJICBub21vZGVz KQ0KZGlmZiAtLWdpdCBhL2xpc3AvaXNlYXJjaC5lbCBiL2xpc3AvaXNlYXJj aC5lbA0KaW5kZXggZGI3YjUzYzAxNC4uYTZlMDM0ZGY2YiAxMDA2NDQNCi0t LSBhL2xpc3AvaXNlYXJjaC5lbA0KKysrIGIvbGlzcC9pc2VhcmNoLmVsDQpA QCAtMzAzNyw2ICszMDM3LDEzIEBAIGlzZWFyY2gtYWxsb3ctcHJlZml4DQog ICA6dHlwZSAnYm9vbGVhbg0KICAgOmdyb3VwICdpc2VhcmNoKQ0KIA0KKyhk ZWZjdXN0b20gaXNlYXJjaC13aWRlbi1hdXRvbWF0aWNhbGx5IG5pbA0KKyAg IldoZXRoZXIgYSBuYXJyb3dlZCBidWZmZXIgY2FuIGJlIHdpZGVuZWQgd2hl biBpc2VhcmNoIGZhaWxzLg0KK1RoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qg d2hlbiBgd2lkZW4tYXV0b21hdGljYWxseScgaXMgbmlsLiINCisgIDp2ZXJz aW9uICIyOS4xIg0KKyAgOnR5cGUgJ2Jvb2xlYW4NCisgIDpncm91cCAnaXNl YXJjaCkNCisNCiAoZGVmdW4gaXNlYXJjaC1zdHJpbmctb3V0LW9mLXdpbmRv dyAoaXNlYXJjaC1wb2ludCkNCiAgICJUZXN0IHdoZXRoZXIgdGhlIHNlYXJj aCBzdHJpbmcgaXMgY3VycmVudGx5IG91dHNpZGUgb2YgdGhlIHdpbmRvdy4N CiBSZXR1cm4gbmlsIGlmIGl0J3MgY29tcGxldGVseSB2aXNpYmxlLCBvciBp ZiBwb2ludCBpcyB2aXNpYmxlLA0KQEAgLTM2NDksMTcgKzM2NTYsMjAgQEAg aXNlYXJjaC1zZWFyY2gNCiAJKHdoaWxlIHJldHJ5DQogCSAgKHNldHEgaXNl YXJjaC1zdWNjZXNzDQogCQkoaXNlYXJjaC1zZWFyY2gtc3RyaW5nIGlzZWFy Y2gtc3RyaW5nIG5pbCB0KSkNCi0JICA7OyBDbGVhciBSRVRSWSB1bmxlc3Mg dGhlIHNlYXJjaCBwcmVkaWNhdGUgc2F5cw0KLQkgIDs7IHRvIHNraXAgdGhp cyBzZWFyY2ggaGl0Lg0KLQkgIChpZiAob3IgKG5vdCBpc2VhcmNoLXN1Y2Nl c3MpDQotCQkgIChmdW5jYWxsIGlzZWFyY2gtZmlsdGVyLXByZWRpY2F0ZQ0K LQkJCSAgIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpDQot CSAgICAgIChzZXRxIHJldHJ5IG5pbCkNCi0JICAgIDs7IEFkdmFuY2UgcG9p bnQgb24gZW1wdHkgbWF0Y2hlcyBiZWZvcmUgcmV0cnlpbmcNCi0JICAgICh3 aGVuICg9IChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkNCi0J ICAgICAgKGlmIChpZiBpc2VhcmNoLWZvcndhcmQgKGVvYnApIChib2JwKSkN Ci0JCSAgKHNldHEgcmV0cnkgbmlsIGlzZWFyY2gtc3VjY2VzcyBuaWwpDQot CQkoZm9yd2FyZC1jaGFyIChpZiBpc2VhcmNoLWZvcndhcmQgMSAtMSkpKSkp KQ0KKyAgICAgICAgICAoaWYgKGFuZCAobm90IGlzZWFyY2gtc3VjY2Vzcykg KGJ1ZmZlci1uYXJyb3dlZC1wKQ0KKyAgICAgICAgICAgICAgICAgICBpc2Vh cmNoLXdpZGVuLWF1dG9tYXRpY2FsbHkgd2lkZW4tYXV0b21hdGljYWxseSkN CisgICAgICAgICAgICAgICh3aWRlbikNCisJICAgIDs7IENsZWFyIFJFVFJZ IHVubGVzcyB0aGUgc2VhcmNoIHByZWRpY2F0ZSBzYXlzDQorCSAgICA7OyB0 byBza2lwIHRoaXMgc2VhcmNoIGhpdC4NCisJICAgIChpZiAob3IgKG5vdCBp c2VhcmNoLXN1Y2Nlc3MpDQorCQkgICAgKGZ1bmNhbGwgaXNlYXJjaC1maWx0 ZXItcHJlZGljYXRlDQorCQkJICAgICAobWF0Y2gtYmVnaW5uaW5nIDApICht YXRjaC1lbmQgMCkpKQ0KKwkgICAgICAgIChzZXRxIHJldHJ5IG5pbCkNCisJ ICAgICAgOzsgQWR2YW5jZSBwb2ludCBvbiBlbXB0eSBtYXRjaGVzIGJlZm9y ZSByZXRyeWluZw0KKwkgICAgICAod2hlbiAoPSAobWF0Y2gtYmVnaW5uaW5n IDApIChtYXRjaC1lbmQgMCkpDQorCSAgICAgICAgKGlmIChpZiBpc2VhcmNo LWZvcndhcmQgKGVvYnApIChib2JwKSkNCisJCSAgICAoc2V0cSByZXRyeSBu aWwgaXNlYXJjaC1zdWNjZXNzIG5pbCkNCisJCSAgKGZvcndhcmQtY2hhciAo aWYgaXNlYXJjaC1mb3J3YXJkIDEgLTEpKSkpKSkpDQogCShzZXRxIGlzZWFy Y2gtanVzdC1zdGFydGVkIG5pbCkNCiAJKHdoZW4gaXNlYXJjaC1zdWNjZXNz DQogCSAgKHNldHEgaXNlYXJjaC1vdGhlci1lbmQNCmRpZmYgLS1naXQgYS9s aXNwL2xvbmdsaW5lcy5lbCBiL2xpc3Avb2Jzb2xldGUvbG9uZ2xpbmVzLmVs DQpzaW1pbGFyaXR5IGluZGV4IDk5JQ0KcmVuYW1lIGZyb20gbGlzcC9sb25n bGluZXMuZWwNCnJlbmFtZSB0byBsaXNwL29ic29sZXRlL2xvbmdsaW5lcy5l bA0KaW5kZXggYTZjZjkzYTAzOS4uZDQ0YTYzNGUyZSAxMDA2NDQNCi0tLSBh L2xpc3AvbG9uZ2xpbmVzLmVsDQorKysgYi9saXNwL29ic29sZXRlL2xvbmds aW5lcy5lbA0KQEAgLTYsNiArNiw3IEBADQogOzsgICAgICAgICAgICAgQWxl eCBTY2hyb2VkZXIgPGFsZXhAZ251Lm9yZz4NCiA7OyAgICAgICAgICAgICBD aG9uZyBZaWRvbmcgPGN5ZEBzdHVwaWRjaGlja2VuLmNvbT4NCiA7OyBNYWlu dGFpbmVyOiBlbWFjcy1kZXZlbEBnbnUub3JnDQorOzsgT2Jzb2xldGUtc2lu Y2U6IDI0LjQNCiA7OyBLZXl3b3JkczogY29udmVuaWVuY2UsIHdwDQogDQog OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLg0KZGlmZiAtLWdp dCBhL2xpc3AveC1kbmQuZWwgYi9saXNwL3gtZG5kLmVsDQppbmRleCAzZmQy ZDcwY2I2Li45YzFjOThhMWJmIDEwMDY0NA0KLS0tIGEvbGlzcC94LWRuZC5l bA0KKysrIGIvbGlzcC94LWRuZC5lbA0KQEAgLTEzNSw3ICsxMzUsMTEgQEAg eC1kbmQtZGlyZWN0LXNhdmUtZnVuY3Rpb24NCiBJZiB0aGUgZmlyc3QgYXJn dW1lbnQgaXMgbmlsLCB0aGUgc2Vjb25kIGlzIHRoZSBuYW1lIG9mIHRoZSBm aWxlDQogdGhhdCB3YXMgZHJvcHBlZC4iDQogICA6dmVyc2lvbiAiMjkuMSIN Ci0gIDp0eXBlICdmdW5jdGlvbg0KKyAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0 IDp0YWcgIlByb21wdCBmb3IgbmFtZSBiZWZvcmUgc2F2aW5nIg0KKyAgICAg ICAgICAgICAgICAgICAgICAgIHgtZG5kLXNhdmUtZGlyZWN0KQ0KKyAgICAg ICAgICAgICAgICAgKGNvbnN0IDp0YWcgIlNhdmUgYW5kIG9wZW4gaW1tZWRp YXRlbHkgd2l0aG91dCBwcm9tcHRpbmciDQorICAgICAgICAgICAgICAgICAg ICAgICAgeC1kbmQtc2F2ZS1kaXJlY3QtaW1tZWRpYXRlbHkpDQorICAgICAg ICAgICAgICAgICAoZnVuY3Rpb24gOnRhZyAiT3RoZXIgZnVuY3Rpb24iKSkN CiAgIDpncm91cCAneCkNCiANCiAoZGVmY3VzdG9tIHgtZG5kLWNvcHktdHlw ZXMgJygiY2hyb21pdW0veC1yZW5kZXJlci10YWludCIpDQpAQCAtMTg2LDE4 ICsxOTAsMjEgQEAgeC1kbmQtZW1wdHktc3RhdGUNCiANCiAoZGVjbGFyZS1m dW5jdGlvbiB4LXJlZ2lzdGVyLWRuZC1hdG9tICJ4c2VsZWN0LmMiKQ0KIA0K KyhkZWZ2YXIgeC1mYXN0LXByb3RvY29sLXJlcXVlc3RzKQ0KKw0KIChkZWZ1 biB4LWRuZC1pbml0LWZyYW1lICgmb3B0aW9uYWwgZnJhbWUpDQogICAiU2V0 dXAgZHJhZyBhbmQgZHJvcCBmb3IgRlJBTUUgKGkuZS4gY3JlYXRlIGFwcHJv cHJpYXRlIHByb3BlcnRpZXMpLiINCiAgICh3aGVuIChlcSAneCAod2luZG93 LXN5c3RlbSBmcmFtZSkpDQotICAgICh4LXJlZ2lzdGVyLWRuZC1hdG9tICJE bmRQcm90b2NvbCIgZnJhbWUpDQotICAgICh4LXJlZ2lzdGVyLWRuZC1hdG9t ICJfTU9USUZfRFJBR19BTkRfRFJPUF9NRVNTQUdFIiBmcmFtZSkNCi0gICAg KHgtcmVnaXN0ZXItZG5kLWF0b20gIlhkbmRFbnRlciIgZnJhbWUpDQotICAg ICh4LXJlZ2lzdGVyLWRuZC1hdG9tICJYZG5kUG9zaXRpb24iIGZyYW1lKQ0K LSAgICAoeC1yZWdpc3Rlci1kbmQtYXRvbSAiWGRuZExlYXZlIiBmcmFtZSkN Ci0gICAgKHgtcmVnaXN0ZXItZG5kLWF0b20gIlhkbmREcm9wIiBmcmFtZSkN Ci0gICAgKHgtcmVnaXN0ZXItZG5kLWF0b20gIl9ETkRfUFJPVE9DT0wiIGZy YW1lKQ0KLSAgICAoeC1kbmQtaW5pdC14ZG5kLWZvci1mcmFtZSBmcmFtZSkN Ci0gICAgKHgtZG5kLWluaXQtbW90aWYtZm9yLWZyYW1lIGZyYW1lKSkpDQor ICAgIChsZXQgKCh4LWZhc3QtcHJvdG9jb2wtcmVxdWVzdHMgKG5vdCB4LWRu ZC1kZWJ1Zy1lcnJvcnMpKSkNCisgICAgICAoeC1yZWdpc3Rlci1kbmQtYXRv bSAiRG5kUHJvdG9jb2wiIGZyYW1lKQ0KKyAgICAgICh4LXJlZ2lzdGVyLWRu ZC1hdG9tICJfTU9USUZfRFJBR19BTkRfRFJPUF9NRVNTQUdFIiBmcmFtZSkN CisgICAgICAoeC1yZWdpc3Rlci1kbmQtYXRvbSAiWGRuZEVudGVyIiBmcmFt ZSkNCisgICAgICAoeC1yZWdpc3Rlci1kbmQtYXRvbSAiWGRuZFBvc2l0aW9u IiBmcmFtZSkNCisgICAgICAoeC1yZWdpc3Rlci1kbmQtYXRvbSAiWGRuZExl YXZlIiBmcmFtZSkNCisgICAgICAoeC1yZWdpc3Rlci1kbmQtYXRvbSAiWGRu ZERyb3AiIGZyYW1lKQ0KKyAgICAgICh4LXJlZ2lzdGVyLWRuZC1hdG9tICJf RE5EX1BST1RPQ09MIiBmcmFtZSkNCisgICAgICAoeC1kbmQtaW5pdC14ZG5k LWZvci1mcmFtZSBmcmFtZSkNCisgICAgICAoeC1kbmQtaW5pdC1tb3RpZi1m b3ItZnJhbWUgZnJhbWUpKSkpDQogDQogKGRlZnVuIHgtZG5kLWdldC1zdGF0 ZS1jb25zLWZvci1mcmFtZSAoZnJhbWUtb3Itd2luZG93KQ0KICAgIlJldHVy biB0aGUgZW50cnkgaW4gYHgtZG5kLWN1cnJlbnQtc3RhdGUnIGZvciBhIGZy YW1lIG9yIHdpbmRvdy4iDQpAQCAtNDMwLDggKzQzNyw2IEBAIHgtZG5kLWRy b3AtZGF0YQ0KIAkgIChzZWxlY3QtZnJhbWUgZnJhbWUpDQogCSAgKGZ1bmNh bGwgaGFuZGxlciB3aW5kb3cgYWN0aW9uIGRhdGEpKSkpKSkNCiANCi0oZGVm dmFyIHgtZmFzdC1wcm90b2NvbC1yZXF1ZXN0cykNCi0NCiAoZGVmdW4geC1k bmQtaGFuZGxlLWRyYWctbi1kcm9wLWV2ZW50IChldmVudCkNCiAgICJSZWNl aXZlIGRyYWcgYW5kIGRyb3AgZXZlbnRzIChYIGNsaWVudCBtZXNzYWdlcyku DQogQ3VycmVudGx5IFhETkQsIE1vdGlmIGFuZCBvbGQgS0RFIDEueCBwcm90 b2NvbHMgYXJlIHJlY29nbml6ZWQuIg0KQEAgLTEzNjEsNiArMTM2NiwyNyBA QCB4LWRuZC1zYXZlLWRpcmVjdA0KICAgICAgICAgKHJldmVydC1idWZmZXIp DQogICAgICAgKGZpbmQtZmlsZSBuYW1lKSkpKQ0KIA0KKyhkZWZ1biB4LWRu ZC1zYXZlLWRpcmVjdC1pbW1lZGlhdGVseSAobmVlZC1uYW1lIG5hbWUpDQor ICAiU2F2ZSBhbmQgb3BlbiBhIGRyb3BwZWQgZmlsZSwgbGlrZSBgeC1kbmQt c2F2ZS1kaXJlY3QnLg0KK05FRUQtTkFNRSB0ZWxscyB3aGV0aGVyIG9yIG5v dCB0aGUgZmlsZSB3YXMgbm90IHlldCBzYXZlZC4gIE5BTUUNCitpcyBlaXRo ZXIgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIG9yIHRoZSBuYW1lIHRoZSBkcm9w IHNvdXJjZSB3YW50cw0KK3VzIHRvIHNhdmUgdW5kZXIuDQorDQorVW5saWtl IGB4LWRuZC1zYXZlLWRpcmVjdCcsIGRvIG5vdCBwcm9tcHQgZm9yIHRoZSBu YW1lIGJ5IHdoaWNoDQordG8gc2F2ZSB0aGUgZmlsZS4gIFNpbXBseSBzYXZl IGl0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4iDQorICAoaWYgbmVlZC1u YW1lDQorICAgICAgKGxldCAoKGZpbGUtbmFtZSAoZXhwYW5kLWZpbGUtbmFt ZSBuYW1lKSkpDQorICAgICAgICAod2hlbiAoZmlsZS1leGlzdHMtcCBmaWxl LW5hbWUpDQorICAgICAgICAgICh1bmxlc3MgKHktb3Itbi1wIChmb3JtYXQt bWVzc2FnZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGUg YCVzJyBleGlzdHM7IG92ZXJ3cml0ZT8gIiBmaWxlLW5hbWUpKQ0KKyAgICAg ICAgICAgIChzZXRxIGZpbGUtbmFtZSBuaWwpKSkNCisgICAgICAgIGZpbGUt bmFtZSkNCisgICAgOzsgVE9ETzogbW92ZSB0aGlzIHRvIGRpcmVkLmVsIG9u Y2UgYSBwbGF0Zm9ybS1hZ29uaXN0aWMNCisgICAgOzsgaW50ZXJmYWNlIGNh biBiZSBmb3VuZC4NCisgICAgKGlmIChkZXJpdmVkLW1vZGUtcCAnZGlyZWQt bW9kZSkNCisgICAgICAgIChyZXZlcnQtYnVmZmVyKQ0KKyAgICAgIChmaW5k LWZpbGUgbmFtZSkpKSkNCisNCiAoZGVmdW4geC1kbmQtaGFuZGxlLW9jdGV0 LXN0cmVhbS1mb3ItZHJvcCAoc2F2ZS10bykNCiAgICJTYXZlIHRoZSBjb250 ZW50cyBvZiB0aGUgWERTIHNlbGVjdGlvbiB0byBTQVZFLVRPLg0KIFJldHVy biBub24tbmlsIGlmIHN1Y2Nlc3NmdWwsIG5pbCBvdGhlcndpc2UuIg0KQEAg LTE0MDIsMTUgKzE0MjgsMTQgQEAgeC1kbmQtaGFuZGxlLXhkcy1kcm9wDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkLW5hbWUN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBmaWxlLW5h bWUtY29kaW5nLXN5c3RlbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQtZmlsZS1uYW1lLWNvZGluZy1zeXN0ZW0pKSkN Ci0gICAgICAgICAgICAoc2V0cSBzYXZlLXRvIChleHBhbmQtZmlsZS1uYW1l DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgeC1kbmQt ZGlyZWN0LXNhdmUtZnVuY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0IGRlc2lyZWQtbmFtZSkpDQotICAgICAgICAgICAg ICAgICAgc2F2ZS10by1yZW1vdGUgc2F2ZS10bykNCi0gICAgICAgICAgICAo aWYgKGZpbGUtcmVtb3RlLXAgc2F2ZS10bykNCi0gICAgICAgICAgICAgICAg KHNldHEgaG9zdG5hbWUgKGZpbGUtcmVtb3RlLXAgc2F2ZS10byAnaG9zdCkN Ci0gICAgICAgICAgICAgICAgICAgICAgc2F2ZS10byAoZmlsZS1sb2NhbC1u YW1lIHNhdmUtdG8pKQ0KLSAgICAgICAgICAgICAgKHNldHEgaG9zdG5hbWUg KHN5c3RlbS1uYW1lKSkpDQorICAgICAgICAgICAgKGxldCAoKG5hbWUgKGZ1 bmNhbGwgeC1kbmQtZGlyZWN0LXNhdmUtZnVuY3Rpb24NCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0IGRlc2lyZWQtbmFtZSkpKQ0KKyAg ICAgICAgICAgICAgKHNldHEgc2F2ZS10byBuYW1lIHNhdmUtdG8tcmVtb3Rl IG5hbWUpKQ0KICAgICAgICAgICAgICh3aGVuIHNhdmUtdG8NCisgICAgICAg ICAgICAgIChpZiAoZmlsZS1yZW1vdGUtcCBzYXZlLXRvKQ0KKyAgICAgICAg ICAgICAgICAgIChzZXRxIGhvc3RuYW1lIChmaWxlLXJlbW90ZS1wIHNhdmUt dG8gJ2hvc3QpDQorICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZS10byAo ZmlsZS1sb2NhbC1uYW1lIHNhdmUtdG8pKQ0KKyAgICAgICAgICAgICAgICAo c2V0cSBob3N0bmFtZSAoc3lzdGVtLW5hbWUpKSkNCiAgICAgICAgICAgICAg ICh3aXRoLXNlbGVjdGVkLXdpbmRvdyB3aW5kb3cNCiAgICAgICAgICAgICAg ICAgKGxldCAoKHVyaSAoZm9ybWF0ICJmaWxlOi8vJXMlcyIgaG9zdG5hbWUg c2F2ZS10bykpKQ0KICAgICAgICAgICAgICAgICAgICh4LWNoYW5nZS13aW5k b3ctcHJvcGVydHkgIlhkbmREaXJlY3RTYXZlMCINCmRpZmYgLS1naXQgYS9z cmMvYnVmZmVyLmMgYi9zcmMvYnVmZmVyLmMNCmluZGV4IDUwOWNlNTFiNTUu LmNiYzI0NjA2N2QgMTAwNjQ0DQotLS0gYS9zcmMvYnVmZmVyLmMNCisrKyBi L3NyYy9idWZmZXIuYw0KQEAgLTUyNzYsNiArNTI3Niw3IEBAIGluaXRfYnVm ZmVyX29uY2UgKHZvaWQpDQogICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZl cl9sb2NhbF9mbGFncywgdGFiX2xpbmVfZm9ybWF0KSwgaWR4KTsgKytpZHg7 DQogICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywg Y3Vyc29yX3R5cGUpLCBpZHgpOyArK2lkeDsNCiAgIFhTRVRGQVNUSU5UIChC VkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBleHRyYV9saW5lX3NwYWNpbmcp LCBpZHgpOyArK2lkeDsNCisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVy X2xvY2FsX2ZsYWdzLCBhdXRvX25hcnJvd19fbmFycm93aW5nKSwgaWR4KTsg KytpZHg7DQogICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9m bGFncywgY3Vyc29yX2luX25vbl9zZWxlY3RlZF93aW5kb3dzKSwgaWR4KTsg KytpZHg7DQogDQogICAvKiBidWZmZXJfbG9jYWxfZmxhZ3MgY29udGFpbnMg bm8gcG9pbnRlcnMsIHNvIGl0J3Mgc2FmZSB0byB0cmVhdCBpdA0KQEAgLTYz NjMsNiArNjM2NCwxMCBAQCBmcm9tIChhYnMgUE9TSVRJT04pLiAgSWYgUE9T SVRJT04gaXMgcG9zaXRpdmUsIHBvaW50IHdhcyBhdCB0aGUgZnJvbnQNCiBJ ZiB2YWx1ZSBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgaXQgc3BlY2lm aWVzIHRoZSBzcGFjaW5nIHJlbGF0aXZlDQogdG8gdGhlIGRlZmF1bHQgZnJh bWUgbGluZSBoZWlnaHQuICBBIHZhbHVlIG9mIG5pbCBtZWFucyBhZGQgbm8g ZXh0cmEgc3BhY2UuICAqLyk7DQogDQorICBERUZWQVJfUEVSX0JVRkZFUiAo ImF1dG8tbmFycm93LS1uYXJyb3dpbmciLA0KKwkJICAgICAmQlZBUiAoY3Vy cmVudF9idWZmZXIsIGF1dG9fbmFycm93X19uYXJyb3dpbmcpLCBRbmlsLA0K KwkJICAgICBkb2M6IC8qIEludGVybmFsIHZhcmlhYmxlIHVzZWQgYnkgYGF1 dG8tbmFycm93LW1vZGUnLiAgKi8pOw0KKw0KICAgREVGVkFSX1BFUl9CVUZG RVIgKCJjdXJzb3ItaW4tbm9uLXNlbGVjdGVkLXdpbmRvd3MiLA0KIAkJICAg ICAmQlZBUiAoY3VycmVudF9idWZmZXIsIGN1cnNvcl9pbl9ub25fc2VsZWN0 ZWRfd2luZG93cyksIFFuaWwsDQogCQkgICAgIGRvYzogLyogTm9uLW5pbCBt ZWFucyBzaG93IGEgY3Vyc29yIGluIG5vbi1zZWxlY3RlZCB3aW5kb3dzLg0K ZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuaCBiL3NyYy9idWZmZXIuaA0KaW5k ZXggMTM1ZWFmNzJkMy4uYTZhYmM2ZWNlOCAxMDA2NDQNCi0tLSBhL3NyYy9i dWZmZXIuaA0KKysrIGIvc3JjL2J1ZmZlci5oDQpAQCAtNTYxLDYgKzU2MSw5 IEBAICNkZWZpbmUgQlZBUihidWYsIGZpZWxkKSAoKGJ1ZiktPmZpZWxkICMj IF8pDQogICAgICBpbiB0aGUgZGlzcGxheSBvZiB0aGlzIGJ1ZmZlci4gICov DQogICBMaXNwX09iamVjdCBleHRyYV9saW5lX3NwYWNpbmdfOw0KIA0KKyAg LyogTmFycm93aW5nIHR5cGUgd2hlbiBhdXRvLW5hcnJvdyBtb2RlIGlzIGlu IGVmZmVjdC4gICovDQorICBMaXNwX09iamVjdCBhdXRvX25hcnJvd19fbmFy cm93aW5nXzsNCisNCiAgIC8qIEN1cnNvciB0eXBlIHRvIGRpc3BsYXkgaW4g bm9uLXNlbGVjdGVkIHdpbmRvd3MuDQogICAgICB0IG1lYW5zIHRvIHVzZSBo b2xsb3cgYm94IGN1cnNvci4NCiAgICAgIFNlZSBgY3Vyc29yLXR5cGUnIGZv ciBvdGhlciB2YWx1ZXMuICAqLw0KZGlmZiAtLWdpdCBhL3NyYy9maWxlaW8u YyBiL3NyYy9maWxlaW8uYw0KaW5kZXggMTBkNGI4YmMxNS4uOWQyY2YyYWUw MCAxMDA2NDQNCi0tLSBhL3NyYy9maWxlaW8uYw0KKysrIGIvc3JjL2ZpbGVp by5jDQpAQCAtNDk5Nyw2ICs0OTk3LDIwIEBAIGJlY2F1c2UgKDEpIGl0IHBy ZXNlcnZlcyBzb21lIG1hcmtlciBwb3NpdGlvbnMgKGluIHVuY2hhbmdlZCBw b3J0aW9ucw0KIAkgICBPdGhlcndpc2Ugc3RhcnQgd2l0aCBhbiBlbXB0eSB1 bmRvX2xpc3QuICAqLw0KIAlic2V0X3VuZG9fbGlzdCAoY3VycmVudF9idWZm ZXIsIEVRIChvbGRfdW5kbywgUXQpID8gUXQgOiBRbmlsKTsNCiANCisgICAg ICBpZiAoIW5vbmludGVyYWN0aXZlICYmICFOSUxQIChWYXV0b19uYXJyb3df bG9uZ19saW5lX3RocmVzaG9sZCkpDQorCXsNCisJICBwdHJkaWZmX3QgY3Vy LCBuZXh0LCBmb3VuZCwgbWF4ID0gMDsNCisJICBmb3IgKGN1ciA9IFBUOyBj dXIgPCBQVCArIGluc2VydGVkOyBjdXIgPSBuZXh0KQ0KKwkgICAgew0KKwkg ICAgICBuZXh0ID0gZmluZF9uZXdsaW5lMSAoY3VyLCBDSEFSX1RPX0JZVEUg KGN1ciksIDAsIC0xLCAxLA0KKwkJCQkgICAgJmZvdW5kLCBOVUxMLCB0cnVl KTsNCisJICAgICAgaWYgKG5leHQgLSBjdXIgPiBtYXgpIG1heCA9IG5leHQg LSBjdXI7DQorCSAgICAgIGlmICghZm91bmQpIGJyZWFrOw0KKwkgICAgfQ0K KwkgIGlmIChtYXggPiBYRklYTlVNIChWYXV0b19uYXJyb3dfbG9uZ19saW5l X3RocmVzaG9sZCkpDQorCSAgICBzYWZlX2NhbGwgKDEsIFFhdXRvX25hcnJv d19tb2RlKTsNCisJfQ0KKw0KICAgICAgIHVuYmluZF90byAoY291bnQxLCBR bmlsKTsNCiAgICAgfQ0KIA0KQEAgLTY2MzgsNiArNjY1MiwxNyBAQCBkbyAo ZmlsZS1leGlzdHMtcCBGSUxFTkFNRSkgYW5kIEZJTEVOQU1FIGlzIGhhbmRs ZWQgYnkgSEFORExFUiwgdGhlbg0KICAgLyogTGlzcCBmdW5jdGlvbiBmb3Ig cmVjdXJzaXZlbHkgZGVsZXRpbmcgZGlyZWN0b3JpZXMuICAqLw0KICAgREVG U1lNIChRZGVsZXRlX2RpcmVjdG9yeSwgImRlbGV0ZS1kaXJlY3RvcnkiKTsN CiANCisgIERFRlZBUl9MSVNQICgiYXV0by1uYXJyb3ctbG9uZy1saW5lLXRo cmVzaG9sZCIsDQorCSAgICAgICBWYXV0b19uYXJyb3dfbG9uZ19saW5lX3Ro cmVzaG9sZCwNCisJICAgICAgIGRvYzogLyogTGluZSBsZW5ndGggYWJvdmUg d2hpY2ggYGF1dG8tbmFycm93LW1vZGUnIGlzIGVudGVyZWQuDQorV2hlbiBu b24tbmlsLCBhbmQgd2hlbiBhIGZpbGUgd2l0aCBvbmUgb3IgbW9yZSBsaW5l cyBsb25nZXIgdGhhbg0KK2BhdXRvLW5hcnJvdy1sb25nLWxpbmUtdGhyZXNo b2xkJyBpcyBvcGVuZWQgb3IgaW5zZXJ0ZWQgaW4gYSBidWZmZXIsDQorYGF1 dG8tbmFycm93LW1vZGUnIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZC4NCitX aGVuIG5pbCwgYGF1dG8tbmFycm93LW1vZGUnIGlzIG5vdCBlbnRlcmVkIGF1 dG9tYXRpY2FsbHkuICAqLyk7DQorICBWYXV0b19uYXJyb3dfbG9uZ19saW5l X3RocmVzaG9sZCA9IFFuaWw7DQorDQorICBERUZTWU0gKFFhdXRvX25hcnJv d19tb2RlLCAiYXV0by1uYXJyb3ctbW9kZSIpOw0KKw0KICAgREVGU1lNIChR c3Vic3RpdHV0ZV9lbnZfaW5fZmlsZV9uYW1lLCAic3Vic3RpdHV0ZS1lbnYt aW4tZmlsZS1uYW1lIik7DQogICBERUZTWU0gKFFnZXRfYnVmZmVyX3dpbmRv d19saXN0LCAiZ2V0LWJ1ZmZlci13aW5kb3ctbGlzdCIpOw0KIA0KZGlmZiAt LWdpdCBhL3NyYy9rZXlib2FyZC5jIGIvc3JjL2tleWJvYXJkLmMNCmluZGV4 IGJlZDgzMDdiNmYuLjM4YWE2NDc3NGQgMTAwNjQ0DQotLS0gYS9zcmMva2V5 Ym9hcmQuYw0KKysrIGIvc3JjL2tleWJvYXJkLmMNCkBAIC0xMjkwLDYgKzEy OTAsOSBAQCBjb21tYW5kX2xvb3BfMSAodm9pZCkNCiANCiAgIGlmIChOSUxQ IChWbWVtb3J5X2Z1bGwpKQ0KICAgICB7DQorICAgICAgaWYgKCFOSUxQIChW YXV0b19uYXJyb3dfcG9zdF9jb21tYW5kX2Z1bmN0aW9uKSAmJiAhTklMUCAo VnJ1bl9ob29rcykpDQorCXNhZmVfcnVuX2hvb2tzIChRYXV0b19uYXJyb3df cG9zdF9jb21tYW5kX2Z1bmN0aW9uKTsNCisNCiAgICAgICAvKiBNYWtlIHN1 cmUgdGhpcyBob29rIHJ1bnMgYWZ0ZXIgY29tbWFuZHMgdGhhdCBnZXQgZXJy b3JzIGFuZA0KIAkgdGhyb3cgdG8gdG9wIGxldmVsLiAgKi8NCiAgICAgICAv KiBOb3RlIHRoYXQgdGhlIHZhbHVlIGNlbGwgd2lsbCBuZXZlciBkaXJlY3Rs eSBjb250YWluIG5pbA0KQEAgLTE0NzIsNiArMTQ3NSw4IEBAIGNvbW1hbmRf bG9vcF8xICh2b2lkKQ0KICAgICAgIFZyZWFsX3RoaXNfY29tbWFuZCA9IGNt ZDsNCiAgICAgICBzYWZlX3J1bl9ob29rcyAoUXByZV9jb21tYW5kX2hvb2sp Ow0KIA0KKyAgICAgIHNhZmVfcnVuX2hvb2tzIChRYXV0b19uYXJyb3dfcHJl X2NvbW1hbmRfZnVuY3Rpb24pOw0KKw0KICAgICAgIGFscmVhZHlfYWRqdXN0 ZWQgPSAwOw0KIA0KICAgICAgIGlmIChOSUxQIChWdGhpc19jb21tYW5kKSkN CkBAIC0xNTIyLDYgKzE1MjcsOCBAQCBjb21tYW5kX2xvb3BfMSAodm9pZCkN CiAgICAgICAgICAgfQ0KICAgICAgIGtzZXRfbGFzdF9wcmVmaXhfYXJnIChj dXJyZW50X2tib2FyZCwgVmN1cnJlbnRfcHJlZml4X2FyZyk7DQogDQorICAg ICAgc2FmZV9ydW5faG9va3MgKFFhdXRvX25hcnJvd19wb3N0X2NvbW1hbmRf ZnVuY3Rpb24pOw0KKw0KICAgICAgIHNhZmVfcnVuX2hvb2tzIChRcG9zdF9j b21tYW5kX2hvb2spOw0KIA0KICAgICAgIC8qIElmIGRpc3BsYXlpbmcgYSBt ZXNzYWdlLCByZXNpemUgdGhlIGVjaG8gYXJlYSB3aW5kb3cgdG8gZml0DQpA QCAtMTIwNDAsNiArMTIwNDcsMTEgQEAgc3ltc19vZl9rZXlib2FyZCAodm9p ZCkNCiAgIERFRlNZTSAoUXByZV9jb21tYW5kX2hvb2ssICJwcmUtY29tbWFu ZC1ob29rIik7DQogICBERUZTWU0gKFFwb3N0X2NvbW1hbmRfaG9vaywgInBv c3QtY29tbWFuZC1ob29rIik7DQogDQorICBERUZTWU0gKFFhdXRvX25hcnJv d19wcmVfY29tbWFuZF9mdW5jdGlvbiwNCisJICAiYXV0by1uYXJyb3ctcHJl LWNvbW1hbmQtZnVuY3Rpb24iKTsNCisgIERFRlNZTSAoUWF1dG9fbmFycm93 X3Bvc3RfY29tbWFuZF9mdW5jdGlvbiwNCisJICAiYXV0by1uYXJyb3ctcG9z dC1jb21tYW5kLWZ1bmN0aW9uIik7DQorDQogICBERUZTWU0gKFF1bmRvX2F1 dG9fX2FkZF9ib3VuZGFyeSwgInVuZG8tYXV0by0tYWRkLWJvdW5kYXJ5Iik7 DQogICBERUZTWU0gKFF1bmRvX2F1dG9fX3VuZG9hYmx5X2NoYW5nZWRfYnVm ZmVycywNCiAgICAgICAgICAgInVuZG8tYXV0by0tdW5kb2FibHktY2hhbmdl ZC1idWZmZXJzIik7DQpAQCAtMTI2MDQsNiArMTI2MTYsMjIgQEAgc3ltc19v Zl9rZXlib2FyZCAodm9pZCkNCiBTZWUgYWxzbyBgcHJlLWNvbW1hbmQtaG9v aycuICAqLyk7DQogICBWcG9zdF9jb21tYW5kX2hvb2sgPSBRbmlsOw0KIA0K KyAgREVGVkFSX0xJU1AgKCJhdXRvLW5hcnJvdy1wcmUtY29tbWFuZC1mdW5j dGlvbiIsDQorCSAgICAgICBWYXV0b19uYXJyb3dfcHJlX2NvbW1hbmRfZnVu Y3Rpb24sDQorCSAgICAgICBkb2M6IC8qIEZ1bmN0aW9uIGV4ZWN1dGVkIGJl Zm9yZSBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQgaW4gYGF1dG8tbmFycm93 LW1vZGUnLg0KK0lmIG5vbi1uaWwsIGFuZCBgYXV0by1uYXJyb3ctbW9kZScg aXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIGlzDQorY2FsbGVkIGJlZm9yZSBl YWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGFmdGVyIGBwcmUtY29tbWFuZC1o b29rJy4NCitJdCBpcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuICAqLyk7 DQorICBWYXV0b19uYXJyb3dfcHJlX2NvbW1hbmRfZnVuY3Rpb24gPSBRbmls Ow0KKw0KKyAgREVGVkFSX0xJU1AgKCJhdXRvLW5hcnJvdy1wb3N0LWNvbW1h bmQtZnVuY3Rpb24iLA0KKwkgICAgICAgVmF1dG9fbmFycm93X3Bvc3RfY29t bWFuZF9mdW5jdGlvbiwNCisJICAgICAgIGRvYzogLyogRnVuY3Rpb24gZXhl Y3V0ZWQgYWZ0ZXIgZWFjaCBjb21tYW5kIGlzIGV4ZWN1dGVkIGluIGBhdXRv LW5hcnJvdy1tb2RlJy4NCitJZiBub24tbmlsLCBhbmQgYGF1dG8tbmFycm93 LW1vZGUnIGlzIGVuYWJsZWQsIHRoZSBmdW5jdGlvbiBpcw0KK2NhbGxlZCBh ZnRlciBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGJlZm9yZSBgcG9zdC1j b21tYW5kLWhvb2snLg0KK0l0IGlzIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50 cy4gICovKTsNCisgIFZhdXRvX25hcnJvd19wb3N0X2NvbW1hbmRfZnVuY3Rp b24gPSBRbmlsOw0KKw0KICNpZiAwDQogICBERUZWQVJfTElTUCAoImVjaG8t YXJlYS1jbGVhci1ob29rIiwgLi4uLA0KIAkgICAgICAgZG9jOiAvKiBOb3Jt YWwgaG9vayBydW4gd2hlbiBjbGVhcmluZyB0aGUgZWNobyBhcmVhLiAgKi8p Ow0KZGlmZiAtLWdpdCBhL3NyYy9saXNwLmggYi9zcmMvbGlzcC5oDQppbmRl eCBlNGE0OWI4ZWY5Li4yODkxNDEyOTZjIDEwMDY0NA0KLS0tIGEvc3JjL2xp c3AuaA0KKysrIGIvc3JjL2xpc3AuaA0KQEAgLTQ3NjEsNiArNDc2MSw4IEBA IGZhc3Rfc3RyaW5nX21hdGNoX2lnbm9yZV9jYXNlIChMaXNwX09iamVjdCBy ZWdleHAsIExpc3BfT2JqZWN0IHN0cmluZykNCiAJCQkJCQkgIHB0cmRpZmZf dCk7DQogZXh0ZXJuIHB0cmRpZmZfdCBmYXN0X2xvb2tpbmdfYXQgKExpc3Bf T2JqZWN0LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90LCBwdHJkaWZmX3QsIExp c3BfT2JqZWN0KTsNCitleHRlcm4gcHRyZGlmZl90IGZpbmRfbmV3bGluZTEg KHB0cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwN CisJCQkJcHRyZGlmZl90LCBwdHJkaWZmX3QgKiwgcHRyZGlmZl90ICosIGJv b2wpOw0KIGV4dGVybiBwdHJkaWZmX3QgZmluZF9uZXdsaW5lIChwdHJkaWZm X3QsIHB0cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QsDQogCQkJICAg ICAgIHB0cmRpZmZfdCwgcHRyZGlmZl90ICosIHB0cmRpZmZfdCAqLCBib29s KTsNCiBleHRlcm4gdm9pZCBzY2FuX25ld2xpbmUgKHB0cmRpZmZfdCwgcHRy ZGlmZl90LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwNCmRpZmYgLS1naXQgYS9z cmMvc2VhcmNoLmMgYi9zcmMvc2VhcmNoLmMNCmluZGV4IDlkNmJkMDc0ZTEu LmI1ZDZhNDQyYzAgMTAwNjQ0DQotLS0gYS9zcmMvc2VhcmNoLmMNCisrKyBi L3NyYy9zZWFyY2guYw0KQEAgLTMxOTIsNyArMzE5Miw3IEBAIERFRlVOICgi cmVnZXhwLXF1b3RlIiwgRnJlZ2V4cF9xdW90ZSwgU3JlZ2V4cF9xdW90ZSwg MSwgMSwgMCwNCiB9DQogDQogLyogTGlrZSBmaW5kX25ld2xpbmUsIGJ1dCBk b2Vzbid0IHVzZSB0aGUgY2FjaGUsIGFuZCBvbmx5IHNlYXJjaGVzIGZvcndh cmQuICAqLw0KLXN0YXRpYyBwdHJkaWZmX3QNCitwdHJkaWZmX3QNCiBmaW5k X25ld2xpbmUxIChwdHJkaWZmX3Qgc3RhcnQsIHB0cmRpZmZfdCBzdGFydF9i eXRlLCBwdHJkaWZmX3QgZW5kLA0KIAkgICAgICAgcHRyZGlmZl90IGVuZF9i eXRlLCBwdHJkaWZmX3QgY291bnQsIHB0cmRpZmZfdCAqY291bnRlZCwNCiAJ ICAgICAgIHB0cmRpZmZfdCAqYnl0ZXBvcywgYm9vbCBhbGxvd19xdWl0KQ0K ZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3JjL3hkaXNwLmMNCmluZGV4 IDQwODk1MjVlMTAuLmQ3ODI2NTliOTIgMTAwNjQ0DQotLS0gYS9zcmMveGRp c3AuYw0KKysrIGIvc3JjL3hkaXNwLmMNCkBAIC0yNzY2Nyw3ICsyNzY2Nywx MiBAQCBkZWNvZGVfbW9kZV9zcGVjIChzdHJ1Y3Qgd2luZG93ICp3LCByZWdp c3RlciBpbnQgYywgaW50IGZpZWxkX3dpZHRoLA0KIA0KICAgICBjYXNlICdu JzoNCiAgICAgICBpZiAoQlVGX0JFR1YgKGIpID4gQlVGX0JFRyAoYikgfHwg QlVGX1pWIChiKSA8IEJVRl9aIChiKSkNCi0JcmV0dXJuICIgTmFycm93IjsN CisJew0KKwkgIGlmIChFUSAoQlZBUiAoY3VycmVudF9idWZmZXIsIGF1dG9f bmFycm93X19uYXJyb3dpbmcpLCBpbnRlcm4gKCJhdXRvIikpKQ0KKwkgICAg cmV0dXJuICIgQXV0by1OYXJyb3ciOw0KKwkgIGVsc2UNCisJICAgIHJldHVy biAiIE5hcnJvdyI7DQorCX0NCiAgICAgICBicmVhazsNCiANCiAgICAgICAv KiBEaXNwbGF5IHRoZSAiZGVncmVlIG9mIHRyYXZlbCIgb2YgdGhlIHdpbmRv dyB0aHJvdWdoIHRoZSBidWZmZXIuICAqLw0KLS0gDQoyLjM1LjENCg0K --5iV1xan7nE-- From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 05:59:06 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 09:59:06 +0000 Received: from localhost ([127.0.0.1]:49345 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8fKk-0007Xe-1C for submit@debbugs.gnu.org; Tue, 05 Jul 2022 05:59:06 -0400 Received: from sonic301-31.consmr.mail.ne1.yahoo.com ([66.163.184.200]:34180) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8fKg-0007X4-JA for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 05:59:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1657015136; bh=1xDOzI0+fAAVBLShmPlduj64Pkp2asbH+fg8aTWpU2E=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From:Subject:Reply-To; b=SlVBya6A+i9jNaLr1GbsePR1e1hHYUbk7PwiOpcYvg0NSpsfMdCE4+sONs6+wMffdryijjoydqp3rNuIxSNl1GmS96IwHAXcqQOxRZE1/PwuDa5qMx9z84aWo4Dl8yVcFY8hcr7l8Z7YEpPTaovvMTCuhd/t9aabjwdC6aEMTkJpErIK4YAcjOalSLbxAnG/vuriz9Vodcn2V5MTRHpSQG1AMmni0w2Bg4o8UnWN20E8txBUUkjMo+vDqSFZzMNZVQBCTH2kGPmWH/wa1k7Rle0h/7IR2h/FlUdEHmARrmyKi5KKgSENAKSRl7iSbek+D6mxNtqjVaT5b0AIUb0aYw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1657015136; bh=IDMibjVPmXJ2NNXf2hREiucCCTuvpVsmcRVS+C/8Soz=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=jnuPKE/5vS1qEnKehHlKvAQNXrFxqJmkvDhXPWLAcb6Pp664gQRVdMqg6yhoOaSrFa0H3rQ4OF6p9oOObtE0arShVAjav/DBgJJWTjSCZjdbG0HFdwpdRrKPMqn18opi/T8oQi5N2/e49VXSvk1GgICj8sl3ZQ7ttowDfJ27t3dF01pvg/DDQrUoDxnr33MU2EpuqQBZXmnCD9hBDNPo165YUSjlr2F/8biqSLQ8m7nvN0sUniiCkudM3oCsFICe5A+FXA0B/PMoapdNTES6uphVv+Xj/pD9Gx+0fItmSqc2yGQXwnK9L1wfkU7pVhI6+nJt/sOVo7FJVanaOpqG7A== X-YMail-OSG: n2pze3oVM1nRE3vEEQlzRksdre6QG0achIQB5UiaBW9SX4TEzcwepo9f_2QrkX5 VqAzlhjU3uOqLzzJ5e68i7s3wCoyxl7UU3yI4zNnsQSRS7mtktzfUb9eOWm7lxAH9jD8Na0H0VKP fic9Jx_RLGsgF8zJriIGWhCPLUlo59nDAcESOYLSTijfAk9LksDxLnx4EqqiY.k_TCw3tlUTvVle DFhKHEqTQecxd4QFyRBZBvFYDkOm_6uzoRjysgSNqex6JD0AV0esZCtdUO0YUmu4SyEoatOBwsMG 2HV7rJ3xEWLsYxVt3nvq2ye7S5X9RR.z.c44.hbRvkn5ReOla.8HQSlKLZ_PCIo5ZwWENHz.MV0b N6_iyMrj5JFJ81_Hrd42Yl8omWklUK0IvYXtTvB2DT.ftGOtyhYZ3DTZOqgw5BKOJSWDf8DKTrFn QpaYiM7QhRWq85sSRGxBZ3K8hVDHtcMozklEwnSN6aNO9C9QR7R09KfQBnRbsk9r_yw0COLhkTaC EhXFzg.brVcC.WVRvZ1LoRg38kG57YmNHndgXymwL4b.iIgwr08hctBUWa552_GdpH9B8QjyPFoj mIvnKZ_ycXZtLu86xffF58o5PvjHwQ1Lnu6q88Z4dOZzZIkPPFXV7Q9ibOEDvaRZFsXpHOMLHDzQ FTdnYYSLekIgoCjbXNTqwAzIVClew67HR9ixSxBkHXUaKIvjxiDJlamR8eyfdRLCpRkmJ1CIHmjU uA4XvKQi5_R6hEJYI0YsyR1zGozvQzhRq_KWUm8YO5TbDWTb1y_hYaTudhFgK6G9gWDREpCMaabz 7KuvL6vJ9V2.s.L6eFRvlKKrMS6870wFYU8PAp1p2XeXBRpLN_i7XhOHWWiFXU8hf154F5S_kyAm xDYfUhH9YxMNUm944n9_EfWV8D2ogiDPUQE7N4o0VJhmmSkT5PEu9GIiKHKFagSUdSv8IGwTOu2b wvlx6hYaN2ilSC6W2Vg1S4fXP6YxkSWPT8X5kkS_yWcdtpLP7SjRXGlvEXN1BKeA3g0AtntKmsJ. PAfZht7zdtptCv1hv20.9X47zMnNE6w3jGaUM3Q8du.tWNclhEs6nGX.cWS8E9GPUMlZtwdGY0TS pO.fguffesP.tlMpH1eqS.TGo30Lk0ZNlRu3Kgju8ndu1152vqVYeafoW1PVRJqXg3W7ZSl72vtF h03jaIVdZKKJdIQiL34vkFI.cPQT_UwP0yAdX8YV8IohuqTueqLa7Mw50PoONBDzmc6tcrtHDjAd mItk09coOi7AOzdL6vc80d3EmEj4CU5wUEZ.e59KateiwwO0WCyF0nLXqlSqyZZ57Vffl76WYI5q NJGrM8ryCZWFsiglmN08bcaeUNdgQxwmpWTx92thqbJgP1nvmgDhVXAOYA2Dfc7_yGILtzuCoreF ZZYtonp6domvyTPHK.5ILuFAfN0h7BAMD4zHMLgcD8X2VUKBdsxDDraCPb8tVHiWhUr7NzckxmGe BZChAp5UvACX.oRF7jiVcKu_w3ug0sXwqHHQaYd4JPl4tUGBeJXYOZxZTZ41DynLq140AW1NSTKg OHgKu4uXMO0PQCklRHonlsYz_YvBKCPeWq89ghgIpqwkA57SDsElSto4Iri.DglWDSQLCW7DEL6Z sVGCiqZbDNL9hnwteBEm5Iu7XjDMa_z8MTUN5fBC7XZDkw3jyvHtrDTpIL7_Cy_wOEs6WtlmK9mf XlGdSEEmZaKwfABISzE9zSUQY1XCNiL_DZaM.Z.61MF892.IAmreuZmr9vRuHu5NkyYv6SR1VxxK uV2sABPzkkxtgVHQJuGw.n5jDHAhYGAb147T2E7L1kDI30u0xTcA4sYBIB7vMprstDL75dbJdaBj CL_NJz_.ntK5eiZYTmqJtX_u_AWdr_1Ye0CtZWY4eDFSMO02uWEpjHozfnPzH3zCGK4rIPTnwa7E AiYExESfsKQUFjRI92EwfPUPK3Yw2MilIZXLYJv8ouLYHGpWAskTaGHFvwsD7JHDCmax97SCQRVi 5vFXhkgiZtyrCBPUSy0kw0g4TmlAaWUh7BQNtjhmGXJJ_pI18.fWLGLA3QJWwgHAbXGOBc643pj4 ow3ImAffNEZKl1AZZ7TpTv16t.nFPLAsV2T7fy5bvrpFqihajgWbfsjdkHpYzACpG5ETg8SPxVzY pVepAg9eZS0UnbpwO50pnPfeHmRNKIg7zQLWBRaKXEMFNkXDzeeA5xEXPdNugOjE8VlP_N4nuzNo Ikrg2ntrN7.Kh7iYECqkmE5tZMs.90EUtkSIIcFJmVD_V8OfWvI8dMRFxIQdZIIx9 X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.ne1.yahoo.com with HTTP; Tue, 5 Jul 2022 09:58:56 +0000 Received: by hermes--canary-production-sg3-67975bbd4b-bp49d (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 036ac90ed49258d81e8604fe29b77807; Tue, 05 Jul 2022 09:58:51 +0000 (UTC) From: Po Lu To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> Date: Tue, 05 Jul 2022 17:58:45 +0800 In-Reply-To: <38c1a310405bd4bbe370@heytings.org> (Gregory Heytings's message of "Tue, 05 Jul 2022 09:28:04 +0000") Message-ID: <87a69n98yy.fsf@yahoo.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Mailer: WebService/1.1.20381 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 207 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: > Sorry, something was missing in the previous patch, here is the > complete one, with a bug number. This one seems to include the last change to x-dnd.el. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 06:17:43 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 10:17:43 +0000 Received: from localhost ([127.0.0.1]:49362 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8fcj-00080T-VA for submit@debbugs.gnu.org; Tue, 05 Jul 2022 06:17:43 -0400 Received: from heytings.org ([95.142.160.155]:53434) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8fch-00080J-Bi for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 06:17:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657016257; bh=61xMqTYbp4CnqaTrM6lTHN2uj7V0OHB0X++tnl/Z9pU=; h=Date:From:To:Subject:In-Reply-To:Message-ID:References:From; b=eRKHOzNLnEvL2yUWLrwWjsfp8HPvhIyLwo66ckZWNzz62MW6bMktF5VrpTbxFcZoM jcYOaB/tlRNtSWEWVX2CPlYdA7PMHBk+cc4ADdKuXa8wYpKRlveQrH4avwyqdfTUqv FvfjceuXFnCi5GM74ydwyHiN/af5zZP8jHReI48URHBfNl2WXksKaafR1Bn9BOzWoL h4faImDmqFCedZOK9fV1/6Sf5fR/jYljn9LcY2rE9vCvx9eZCP+fHgbEi+HnUxE+QT O+s56WbLIpAw3vbfF4elpSJVNR62KJIuAsiSFi76cpSea3eI+CNAk2+LhmK9OllQ6s II0hJEDwnS6aA== Date: Tue, 05 Jul 2022 10:17:37 +0000 From: Gregory Heytings To: 56393@debbugs.gnu.org Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <87a69n98yy.fsf@yahoo.com> Message-ID: <38c1a31040f5546dbd3a@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="HHx0DgQAHk" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --HHx0DgQAHk Content-Type: text/plain; format=flowed; charset=us-ascii > > This one seems to include the last change to x-dnd.el. > Gosh! After including too little, I included too much. The attached one is correct (I hope). --HHx0DgQAHk Content-Type: text/x-diff; name=Actually-fix-the-long-lines-display-bug.patch Content-Transfer-Encoding: base64 Content-ID: <38c1a31040c39fc46a12@heytings.org> Content-Disposition: attachment; filename=Actually-fix-the-long-lines-display-bug.patch RnJvbSA1NWNkZWM1ZDYwMDI1NDUxODI2ZGFlMjFjMjBkMWU2MTI0NGJjNmFh IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogR3JlZ29yeSBIZXl0 aW5ncyA8Z3JlZ29yeUBoZXl0aW5ncy5vcmc+DQpEYXRlOiBUdWUsIDUgSnVs IDIwMjIgMTA6MTQ6MjQgKzAwMDANClN1YmplY3Q6IFtQQVRDSF0gQWN0dWFs bHkgZml4IHRoZSBsb25nIGxpbmVzIGRpc3BsYXkgYnVnIChidWcjNTYzOTMp Lg0KDQoqIGxpc3AvZmlsZXMuZWwgKGF1dG8tbmFycm93LW1vZGUpOiBOZXcg bWlub3IgbW9kZS4NCihhdXRvLW5hcnJvdy1wcmUtY29tbWFuZC1mdW5jdGlv biwgYXV0by1uYXJyb3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9uKToNCk5ldyBh dXhpbGlhcnkgZnVuY3Rpb25zIGZvciB0aGUgbWlub3IgbW9kZS4NCihhdXRv LW5hcnJvdy1kaXNwbGF5LWxlbmd0aCwgYXV0by1uYXJyb3ctd2lkZW4tYXV0 b21hdGljYWxseSk6IE5ldw0KZGVmY3VzdG9tcyBmb3IgdGhlIG1pbm9yIG1v ZGUuDQooYXV0by1uYXJyb3ctLXdpZGVuLWF1dG9tYXRpY2FsbHksIGF1dG8t bmFycm93LS1pc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHksDQphdXRvLW5h cnJvdy0taW5pdGlhbGl6ZWQpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGVzIGZv ciB0aGUgbWlub3IgbW9kZS4NCg0KKiBzcmMvYnVmZmVyLmggKHN0cnVjdCBi dWZmZXIpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGUgZm9yIHRoZSBtaW5vciBt b2RlLg0KDQoqIHNyYy9idWZmZXIuYyAoaW5pdF9idWZmZXJfb25jZSwgc3lt c19vZl9idWZmZXIpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGUNCmZvciB0aGUg bWlub3IgbW9kZS4NCg0KKiBzcmMvZmlsZWlvLmMgKEZpbnNlcnRfZmlsZV9j b250ZW50cyk6IEF1dG9tYXRpY2FsbHkgZW50ZXIgdGhlIG1pbm9yIG1vZGUN CndoZW4gYXBwcm9wcmlhdGUuDQooc3ltc19vZl9maWxlaW8pOiBOZXcgZGVm Y3VzdG9tIGZvciB0aGUgbWlub3IgbW9kZS4NCg0KKiBzcmMva2V5Ym9hcmQu YyAoc3ltc19vZl9rZXlib2FyZCk6IE5ldyBob29rIGZ1bmN0aW9ucyBmb3Ig dGhlIG1pbm9yIG1vZGUuDQooY29tbWFuZF9sb29wXzEpOiBFeGVjdXRlIHRo ZSBob29rIGZ1bmN0aW9ucy4NCg0KKiBzcmMvc2VhcmNoLmMgKGZpbmRfbmV3 bGluZTEpOiBNYWtlIGl0IGV4dGVybmFsbHkgdmlzaWJsZS4NCg0KKiBzcmMv bGlzcC5oOiBNYWtlIGZpbmRfbmV3bGluZTEgZXh0ZXJuYWxseSB2aXNpYmxl Lg0KDQoqIHNyYy94ZGlzcC5jIChkZWNvZGVfbW9kZV9zcGVjKTogSW5kaWNh dGUgd2hlbiB0aGUgbWlub3IgbW9kZSBpcyBhY3RpdmUNCmluIHRoZSBtb2Rl bGluZS4NCg0KKiBsaXNwL2lzZWFyY2guZWwgKGlzZWFyY2gtd2lkZW4tYXV0 b21hdGljYWxseSk6IE5ldyBkZWZjdXN0b20uDQooaXNlYXJjaC1zZWFyY2gp OiBVc2UgdGhlIG5ldyBkZWZjdXN0b20uDQoNCiogbGlzcC9iaW5kaW5ncy5l bCAobW9kZS1saW5lLW1vZGVzKTogRG8gbm90IHByb3BlcnRpemUgdGhlIGlu ZGljYXRpb24NCmluIHRoZSBtb2RlbGluZSB3aGVuIHRoZSBuZXcgbWlub3Ig bW9kZSBpcyBhY3RpdmUuDQoNCiogZXRjL05FV1M6IEFubm91bmNlIHRoZSBu ZXcgbWlub3IgbW9kZSwgYW5kIHJlbW92ZSB0aGUgdW5vYnNvbGV0aW9uDQpp bmRpY2F0aW9uIGZvciAnbG9uZ2xpbmVzLW1vZGUnLg0KDQoqIGxpc3AvbG9u Z2xpbmVzLmVsOiBSZW9ic29sZXRlIGxvbmdsaW5lcy1tb2RlLg0KDQoqIGRv Yy9lbWFjcy9kaXNwbGF5LnRleGkgKEF1dG8tTmFycm93aW5nKTogTmV3IHNl Y3Rpb24sIGRlc2NyaWJpbmcgdGhlIG5ldw0KbWlub3IgbW9kZS4NCihEaXNw bGF5KTogRW50cnkgZm9yIHRoZSBuZXcgc2VjdGlvbi4NCg0KKiBkb2MvZW1h Y3MvdHJvdWJsZS50ZXhpIChMb25nIExpbmVzKTogUmVtb3ZlIHRoZSBzZWN0 aW9uLg0KKExvc3NhZ2UpOiBSZW1vdmUgdGhlIGVudHJ5IGZvciB0aGUgTG9u ZyBMaW5lcyBzZWN0aW9uLg0KDQoqIGRvYy9lbWFjcy9lbWFjcy50ZXhpIChU b3ApOiBSZW1vdmUgdGhlIGVudHJ5IGZvciB0aGUgTG9uZyBMaW5lcyBzZWN0 aW9uLg0KLS0tDQogZG9jL2VtYWNzL2Rpc3BsYXkudGV4aSAgICAgICAgICAg fCAyNSArKysrKysrKysNCiBkb2MvZW1hY3MvZW1hY3MudGV4aSAgICAgICAg ICAgICB8ICAxIC0NCiBkb2MvZW1hY3MvdHJvdWJsZS50ZXhpICAgICAgICAg ICB8IDU5IC0tLS0tLS0tLS0tLS0tLS0tLS0tDQogZXRjL05FV1MgICAgICAg ICAgICAgICAgICAgICAgICAgfCAxNSArKysrLS0NCiBsaXNwL2JpbmRpbmdz LmVsICAgICAgICAgICAgICAgICB8IDEyICsrKy0tDQogbGlzcC9maWxlcy5l bCAgICAgICAgICAgICAgICAgICAgfCA5MiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KIGxpc3AvaXNlYXJjaC5lbCAgICAgICAgICAgICAg ICAgIHwgMzIgKysrKysrKy0tLS0NCiBsaXNwL3sgPT4gb2Jzb2xldGV9L2xv bmdsaW5lcy5lbCB8ICAxICsNCiBzcmMvYnVmZmVyLmMgICAgICAgICAgICAg ICAgICAgICB8ICA1ICsrDQogc3JjL2J1ZmZlci5oICAgICAgICAgICAgICAg ICAgICAgfCAgMyArKw0KIHNyYy9maWxlaW8uYyAgICAgICAgICAgICAgICAg ICAgIHwgMjUgKysrKysrKysrDQogc3JjL2tleWJvYXJkLmMgICAgICAgICAg ICAgICAgICAgfCAyOCArKysrKysrKysrDQogc3JjL2xpc3AuaCAgICAgICAg ICAgICAgICAgICAgICAgfCAgMiArDQogc3JjL3NlYXJjaC5jICAgICAgICAg ICAgICAgICAgICAgfCAgMiArLQ0KIHNyYy94ZGlzcC5jICAgICAgICAgICAg ICAgICAgICAgIHwgIDcgKystDQogMTUgZmlsZXMgY2hhbmdlZCwgMjI5IGlu c2VydGlvbnMoKyksIDgwIGRlbGV0aW9ucygtKQ0KIHJlbmFtZSBsaXNwL3sg PT4gb2Jzb2xldGV9L2xvbmdsaW5lcy5lbCAoOTklKQ0KDQpkaWZmIC0tZ2l0 IGEvZG9jL2VtYWNzL2Rpc3BsYXkudGV4aSBiL2RvYy9lbWFjcy9kaXNwbGF5 LnRleGkNCmluZGV4IGNhZGFjN2U0NTMuLjlmZTk1MzNlODggMTAwNjQ0DQot LS0gYS9kb2MvZW1hY3MvZGlzcGxheS50ZXhpDQorKysgYi9kb2MvZW1hY3Mv ZGlzcGxheS50ZXhpDQpAQCAtMTksNiArMTksOCBAQCBEaXNwbGF5DQogKiBI b3Jpem9udGFsIFNjcm9sbGluZzo6ICAgTW92aW5nIHRleHQgbGVmdCBhbmQg cmlnaHQgaW4gYSB3aW5kb3cuDQogKiBOYXJyb3dpbmc6OiAgICAgICAgICAg ICAgUmVzdHJpY3RpbmcgZGlzcGxheSBhbmQgZWRpdGluZyB0byBhIHBvcnRp b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBidWZm ZXIuDQorKiBBdXRvLU5hcnJvd2luZzo6ICAgICAgICAgQXV0b21hdGljYWxs eSByZXN0cmljdCBkaXNwbGF5IHRvIGEgcG9ydGlvbiBvZg0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlci4NCiAqIFZpZXcgTW9k ZTo6ICAgICAgICAgICAgICBWaWV3aW5nIHJlYWQtb25seSBidWZmZXJzLg0K ICogRm9sbG93IE1vZGU6OiAgICAgICAgICAgIEZvbGxvdyBtb2RlIGxldHMg dHdvIHdpbmRvd3Mgc2Nyb2xsIGFzIG9uZS4NCiAqIEZhY2VzOjogICAgICAg ICAgICAgICAgICBIb3cgdG8gY2hhbmdlIHRoZSBkaXNwbGF5IHN0eWxlIHVz aW5nIGZhY2VzLg0KQEAgLTQ2Nyw2ICs0NjksMjkgQEAgTmFycm93aW5nDQog aWYgeW91IGVuYWJsZSB0aGUgY29tbWFuZCwgY29uZmlybWF0aW9uIHdpbGwg bm8gbG9uZ2VyIGJlIHJlcXVpcmVkIGZvcg0KIGl0LiAgQHhyZWZ7RGlzYWJs aW5nfS4NCiANCitAbm9kZSBBdXRvLU5hcnJvd2luZw0KK0BmaW5kZXggYXV0 by1uYXJyb3ctbW9kZQ0KK0B2aW5kZXggYXV0by1uYXJyb3ctbG9uZy1saW5l LXRocmVzaG9sZA0KK0B2aW5kZXggYXV0by1uYXJyb3ctZGlzcGxheS1sZW5n dGgNCitAdmluZGV4IGF1dG8tbmFycm93LXdpZGVuLWF1dG9tYXRpY2FsbHkN CisNCisgIFdoZW4gYSBmaWxlIHdpdGggZXh0cmVtZWx5IGxvbmcgbGluZXMg aXMgb3BlbmVkIG9yIGluc2VydGVkIGluIGENCitidWZmZXIsIEVtYWNzIGF1 dG9tYXRpY2FsbHkgZW50ZXJzIGF1dG8tbmFycm93IG1vZGUsIGFuZCB0aGUg d29yZA0KK0BzYW1we0F1dG8tTmFycm93fSBhcHBlYXJzIGluIHRoZSBtb2Rl IGxpbmUuICBUaGlzIG1lYW5zIHRoYXQgRW1hY3MNCityZXN0cmljdHMgZGlz cGxheSwgYnV0IG5vdCBlZGl0aW5nLCB0byBhIHBvcnRpb24gb2YgdGhlIGJ1 ZmZlciBhYm92ZQ0KK2FuZCBiZWxvdyBwb2ludC4gIEFsbCBlZGl0aW5nIGNv bW1hbmRzLCBpbmNsdWRpbmcgbmFycm93aW5nIGNvbW1hbmRzLA0KK3JlbWFp biBhdmFpbGFibGUsIGFuZCB0aGV5IGFjdCBvbiB0aGUgd2hvbGUgYnVmZmVy LiAgRm9yIGV4YW1wbGUsDQorQGtiZHtNLT59IG1vdmVzIHBvaW50IHRvIHRo ZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYW5kIG5vdCwgYXMgd291bGQNCitoYXBw ZW4gd2l0aCBvcmRpbmFyeSBuYXJyb3dpbmcsIHRvIHRoZSBlbmQgb2YgdGhl IHBvcnRpb24gb2YgdGhlDQorYnVmZmVyIHRvIHdoaWNoIGRpc3BsYXkgaXMg Y3VycmVudGx5IHJlc3RyaWN0ZWQuDQorDQorICBUaGUgYmVoYXZpb3Igb2Yg YXV0by1uYXJyb3cgbW9kZSBpcyBjb250cm9sbGVkIGJ5IHRocmVlIHZhcmlh YmxlczoNCitAY29kZXthdXRvLW5hcnJvdy1sb25nLWxpbmUtdGhyZXNob2xk fSBpcyB0aGUgbGluZSBsZW5ndGggYWJvdmUgd2hpY2gNCithdXRvLW5hcnJv dyBtb3ZlIGlzIGVudGVyZWQsIEBjb2Rle2F1dG8tbmFycm93LWRpc3BsYXkt bGVuZ3RofSBpcyB0aGUNCitudW1iZXIgb2YgY2hhcmFjdGVycyB0byB3aGlj aCBkaXNwbGF5IGlzIHJlc3RyaWN0ZWQsIGFuZA0KK0Bjb2Rle2F1dG8tbmFy cm93LXdpZGVuLWF1dG9tYXRpY2FsbHl9IGlzIGEgbGlzdCBvZiBjb21tYW5k cyBmb3Igd2hpY2gNCitkaXNwbGF5IGlzIHdpZGVuZWQgYmVmb3JlIHRoZXkg YXJlIGV4ZWN1dGVkLg0KKw0KIEBub2RlIFZpZXcgTW9kZQ0KIEBzZWN0aW9u IFZpZXcgTW9kZQ0KIEBjaW5kZXggVmlldyBtb2RlDQpkaWZmIC0tZ2l0IGEv ZG9jL2VtYWNzL2VtYWNzLnRleGkgYi9kb2MvZW1hY3MvZW1hY3MudGV4aQ0K aW5kZXggNWU3MjY5OWJiZS4uYjQzYzk2NmY4NyAxMDA2NDQNCi0tLSBhL2Rv Yy9lbWFjcy9lbWFjcy50ZXhpDQorKysgYi9kb2MvZW1hY3MvZW1hY3MudGV4 aQ0KQEAgLTExOTAsNyArMTE5MCw2IEBAIFRvcA0KICogQ3Jhc2hpbmc6OiAg ICAgICAgICAgIFdoYXQgRW1hY3MgZG9lcyB3aGVuIGl0IGNyYXNoZXMuDQog KiBBZnRlciBhIENyYXNoOjogICAgICAgUmVjb3ZlcmluZyBlZGl0aW5nIGlu IGFuIEVtYWNzIHNlc3Npb24gdGhhdCBjcmFzaGVkLg0KICogRW1lcmdlbmN5 IEVzY2FwZTo6ICAgIFdoYXQgdG8gZG8gaWYgRW1hY3Mgc3RvcHMgcmVzcG9u ZGluZy4NCi0qIExvbmcgTGluZXM6OiAgICAgICAgICBNaXRpZ2F0aW5nIHNs b3duZXNzIGR1ZSB0byBleHRyZW1lbHkgbG9uZyBsaW5lcy4NCiAqIERFTCBE b2VzIE5vdCBEZWxldGU6OiBXaGF0IHRvIGRvIGlmIEBrZXl7REVMfSBkb2Vz bid0IGRlbGV0ZS4NCiANCiBSZXBvcnRpbmcgQnVncw0KZGlmZiAtLWdpdCBh L2RvYy9lbWFjcy90cm91YmxlLnRleGkgYi9kb2MvZW1hY3MvdHJvdWJsZS50 ZXhpDQppbmRleCBmMDZiOTM3NTlkLi44ODdlNWM2MTcwIDEwMDY0NA0KLS0t IGEvZG9jL2VtYWNzL3Ryb3VibGUudGV4aQ0KKysrIGIvZG9jL2VtYWNzL3Ry b3VibGUudGV4aQ0KQEAgLTE1OCw3ICsxNTgsNiBAQCBMb3NzYWdlDQogKiBD cmFzaGluZzo6ICAgICAgICAgICAgICBXaGF0IEVtYWNzIGRvZXMgd2hlbiBp dCBjcmFzaGVzLg0KICogQWZ0ZXIgYSBDcmFzaDo6ICAgICAgICAgUmVjb3Zl cmluZyBlZGl0aW5nIGluIGFuIEVtYWNzIHNlc3Npb24gdGhhdCBjcmFzaGVk Lg0KICogRW1lcmdlbmN5IEVzY2FwZTo6ICAgICAgV2hhdCB0byBkbyBpZiBF bWFjcyBzdG9wcyByZXNwb25kaW5nLg0KLSogTG9uZyBMaW5lczo6ICAgICAg ICAgICAgTWl0aWdhdGluZyBzbG93bmVzcyBkdWUgdG8gZXh0cmVtZWx5IGxv bmcgbGluZXMuDQogKiBERUwgRG9lcyBOb3QgRGVsZXRlOjogICBXaGF0IHRv IGRvIGlmIEBrZXl7REVMfSBkb2Vzbid0IGRlbGV0ZS4NCiBAZW5kIG1lbnUN CiANCkBAIC00MzMsNjQgKzQzMiw2IEBAIEVtZXJnZW5jeSBFc2NhcGUNCiBl bWVyZ2VuY3kgZXNjYXBlLS0tYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBp dCB3b24ndCB3b3JrLCB3aGVuIGENCiBzeXN0ZW0gY2FsbCBoYW5ncyBvciB3 aGVuIEVtYWNzIGlzIHN0dWNrIGluIGEgdGlnaHQgbG9vcCBpbiBDIGNvZGUu DQogDQotQG5vZGUgTG9uZyBMaW5lcw0KLUBzdWJzZWN0aW9uIExvbmcgTGlu ZXMNCi1AY2luZGV4IGxvbmcgbGluZXMNCi0NCi0gIEZvciBhIHZhcmlldHkg b2YgcmVhc29ucyAoc29tZSBvZiB3aGljaCBhcmUgZnVuZGFtZW50YWwgdG8g dGhlIEVtYWNzDQotcmVkaXNwbGF5IGNvZGUgYW5kIHRoZSBjb21wbGV4IHJh bmdlIG9mIHBvc3NpYmlsaXRpZXMgaXQgaGFuZGxlczsNCi1vdGhlcnMgb2Yg d2hpY2ggYXJlIGR1ZSB0byBtb2RlcyBhbmQgZmVhdHVyZXMgd2hpY2ggZG8g bm90IHNjYWxlIHdlbGwNCi1pbiB1bnVzdWFsIGNpcmN1bXN0YW5jZXMpLCBF bWFjcyBjYW4gcGVyZm9ybSBwb29ybHkgd2hlbiBleHRyZW1lbHkNCi1sb25n IGxpbmVzIGFyZSBwcmVzZW50ICh3aGVyZSBgYGV4dHJlbWVseSBsb25nJycg dXN1YWxseSBtZWFucyBhdA0KLWxlYXN0IG1hbnkgdGhvdXNhbmRzIG9mIGNo YXJhY3RlcnMpLg0KLQ0KLUBjaW5kZXggQGNvZGV7c28tbG9uZ30gbW9kZQ0K LUBmaW5kZXggZ2xvYmFsLXNvLWxvbmctbW9kZQ0KLUB2aW5kZXggc28tbG9u Zy1hY3Rpb24NCi0gIEEgcGFydGljdWxhciBwcm9ibGVtIGlzIHRoYXQgRW1h Y3MgbWF5IGBgaGFuZycnIGZvciBhIGxvbmcgdGltZSBhdA0KLXRoZSBwb2lu dCBvZiB2aXNpdGluZyBhIGZpbGUgd2l0aCBleHRyZW1lbHkgbG9uZyBsaW5l cy4gIFRoaXMgY2FuIGJlDQotbWl0aWdhdGVkIGJ5IGVuYWJsaW5nIHRoZSBA ZmlsZXtzby1sb25nfSBsaWJyYXJ5LCB3aGljaCBkZXRlY3RzIHdoZW4gYQ0K LXZpc2l0ZWQgZmlsZSBjb250YWlucyBhYm5vcm1hbGx5IGxvbmcgbGluZXMs IGFuZCB0YWtlcyBzdGVwcyB0bw0KLWRpc2FibGUgZmVhdHVyZXMgd2hpY2gg YXJlIGxpYWJsZSB0byBjYXVzZSBzbG93bmVzcyBpbiB0aGF0IHNpdHVhdGlv bi4NCi1UbyBlbmFibGUgdGhpcyBsaWJyYXJ5LCB0eXBlIEBrYmR7TS14IGds b2JhbC1zby1sb25nLW1vZGUgQGtleXtSRVR9fSwNCi1vciB0dXJuIG9uIHRo ZSBAY29kZXtnbG9iYWwtc28tbG9uZy1tb2RlfSBpbiB5b3VyIGluaXQgZmls ZQ0KLShAcHhyZWZ7SW5pdCBGaWxlfSksIG9yIGN1c3RvbWl6ZSB0aGUgQGNv ZGV7Z2xvYmFsLXNvLWxvbmctbW9kZX0NCi1vcHRpb24uICBZb3UgY2FuIHRh aWxvciB0aGlzIG1vZGUncyBvcGVyYXRpb24gYnkgY3VzdG9taXppbmcgdGhl DQotdmFyaWFibGUgQGNvZGV7c28tbG9uZy1hY3Rpb259Lg0KLQ0KLSAgVGhl IEBmaWxle3NvLWxvbmd9IGxpYnJhcnkgY2FuIGFsc28gc2lnbmlmaWNhbnRs eSBpbXByb3ZlDQotcGVyZm9ybWFuY2Ugd2hlbiBtb3ZpbmcgYW5kIGVkaXRp bmcgaW4gYSBidWZmZXIgd2l0aCBsb25nIGxpbmVzLg0KLVBlcmZvcm1hbmNl IGlzIHN0aWxsIGxpa2VseSB0byBkZWdyYWRlIGFzIHlvdSBnZXQgZGVlcGVy IGludG8gdGhlIGxvbmcNCi1saW5lcywgYnV0IHRoZSBpbXByb3ZlbWVudHMg ZnJvbSB1c2luZyB0aGlzIGxpYnJhcnkgY2FuIG5ldmVydGhlbGVzcw0KLWJl IHN1YnN0YW50aWFsLg0KLQ0KLUBmaW5kZXggc28tbG9uZy1jb21tZW50YXJ5 DQotICBVc2UgQGtiZHtNLXggc28tbG9uZy1jb21tZW50YXJ5fSB0byB2aWV3 IHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzDQotbGlicmFyeSBhbmQgbGVh cm4gbW9yZSBhYm91dCBob3cgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgaXQu DQotDQotQHZpbmRleCBtYXgtcmVkaXNwbGF5LXRpY2tzDQotICBJZiBldmVu IEBjb2Rle3NvLWxvbmctbW9kZX0gZG9lc24ndCBoZWxwIG1ha2luZyBFbWFj cyByZXNwb25zaXZlDQotZW5vdWdoLCBvciBpZiB5b3UnZCByYXRoZXIgbm90 IGRpc2FibGUgdGhlIGRpc3BsYXktcmVsYXRlZCBmZWF0dXJlcw0KLXRoYXQg QGNvZGV7c28tbG9uZy1tb2RlfSB0dXJucyBvZmYsIHlvdSBjYW4gaW5zdGVh ZCBjdXN0b21pemUgdGhlDQotdmFyaWFibGUgQGNvZGV7bWF4LXJlZGlzcGxh eS10aWNrc30gdG8gYSBub24temVybyB2YWx1ZS4gIFRoZW4gRW1hY3MNCi13 aWxsIGFib3J0IHJlZGlzcGxheSBvZiBhIHdpbmRvdyBhbmQgY29tbWFuZHMs IGxpa2UgQGtiZHtDLW59IGFuZA0KLUBrYmR7TS12fSwgd2hpY2ggdXNlIHRo ZSBkaXNwbGF5IGNvZGUgdG8gZG8gdGhlaXIgam9iLCBpZiBwcm9jZXNzaW5n IGENCi13aW5kb3cgbmVlZHMgbW9yZSBsb3ctbGV2ZWwgZGlzcGxheSBvcGVy YXRpb25zIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMNCi12YXJpYWJsZS4gIFRo ZSBkaXNwbGF5IG9mIHRoZSBvZmZlbmRpbmcgd2luZG93IHdpbGwgdGhlbiBy ZW1haW4NCi1vdXRkYXRlZCwgYW5kIHBvc3NpYmx5IGluY29tcGxldGUsIG9u IHRoZSBzY3JlZW4sIGJ1dCBFbWFjcyBzaG91bGQNCi1vdGhlcndpc2UgYmUg cmVzcG9uc2l2ZSwgYW5kIHlvdSBjb3VsZCB0aGVuIHN3aXRjaCB0byBhbm90 aGVyIGJ1ZmZlciwNCi1vciBraWxsIHRoZSBwcm9ibGVtYXRpYyBidWZmZXIs IG9yIHR1cm4gb24gQGNvZGV7c28tbG9uZy1tb2RlfSBvcg0KLUBjb2Rle3Nv LWxvbmctbWlub3ItbW9kZX0gaW4gdGhhdCBidWZmZXIuICBXaGVuIHRoZSBk aXNwbGF5IG9mIGENCi13aW5kb3cgaXMgYWJvcnRlZCBkdWUgdG8gdGhpcyBy ZWFzb24sIHRoZSBidWZmZXIgc2hvd24gaW4gdGhhdCB3aW5kb3cNCi13aWxs IG5vdCBoYXZlIGFueSBvZiBpdHMgd2luZG93cyByZWRpc3BsYXllZCB1bnRp bCB0aGUgYnVmZmVyIGlzDQotbW9kaWZpZWQgb3IgdW50aWwgeW91IHR5cGUg QGtiZHtDLWx9IChAcHhyZWZ7UmVjZW50ZXJpbmd9KSBpbiBvbmUgb2YNCi10 aGF0IGJ1ZmZlcidzIHdpbmRvd3MuDQotDQotICBJZiB5b3UgZGVjaWRlIHRv IGN1c3RvbWl6ZSB0aGlzIHZhcmlhYmxlIHRvIGEgbm9uLXplcm8gdmFsdWUs IHdlDQotcmVjb21tZW5kIHRvIHVzZSBhIHZhbHVlIGJldHdlZW4gMTAwLDAw MCBhbmQgMSwwMDAsMDAwLCBkZXBlbmRpbmcgb24NCi15b3VyIHBhdGllbmNl IGFuZCB0aGUgc3BlZWQgb2YgeW91ciBzeXN0ZW0uICBUaGUgZGVmYXVsdCB2 YWx1ZSBpcw0KLXplcm8sIHdoaWNoIGRpc2FibGVzIHRoaXMgZmVhdHVyZS4N Ci0NCiBAbm9kZSBERUwgRG9lcyBOb3QgRGVsZXRlDQogQHN1YnNlY3Rpb24g SWYgQGtleXtERUx9IEZhaWxzIHRvIERlbGV0ZQ0KIEBjaW5kZXggQGtleXtE RUx9IHZzIEBrZXl7QkFDS1NQQUNFfQ0KZGlmZiAtLWdpdCBhL2V0Yy9ORVdT IGIvZXRjL05FV1MNCmluZGV4IDc5NjcxOTBjNmUuLjMwYzcxZTdmMGMgMTAw NjQ0DQotLS0gYS9ldGMvTkVXUw0KKysrIGIvZXRjL05FV1MNCkBAIC0zMjQs OSArMzI0LDYgQEAgc3RhcnR1cC4gIFByZXZpb3VzbHksIHRoZXNlIGZ1bmN0 aW9ucyBpZ25vcmVkDQogDA0KICogQ2hhbmdlcyBpbiBFbWFjcyAyOS4xDQog DQotLS0tDQotKiogJ2xvbmdsaW5lcy1tb2RlJyBpcyBubyBsb25nZXIgb2Jz b2xldGUuDQotDQogKysrDQogKiogTmV3IGNvbW1hbmQgdG8gY2hhbmdlIHRo ZSBmb250IHNpemUgZ2xvYmFsbHkuDQogVG8gaW5jcmVhc2UgdGhlIGZvbnQg c2l6ZSwgdHlwZSAnQy14IEMtTS0rJyBvciAnQy14IEMtTS09JzsgdG8NCkBA IC05MDEsNiArODk4LDE4IEBAIEZvcm1lcmx5IGl0IGludm9rZWQgJ2p1c3Qt b25lLXNwYWNlJy4gIFRoZSBhY3Rpb25zIHBlcmZvcm1lZCBieQ0KICdjeWNs ZS1zcGFjaW5nJyBhbmQgdGhlaXIgb3JkZXIgY2FuIG5vdyBiZSBjdXN0b21p emVkIHZpYSB0aGUgdXNlcg0KIG9wdGlvbiAnY3ljbGUtc3BhY2luZy1hY3Rp b25zJy4NCiANCisrKysNCisqKiBFbWFjcyBpcyBub3cgY2FwYWJsZSBvZiBl ZGl0aW5nIGZpbGVzIHdpdGggYXJiaXRhcmlseSBsb25nIGxpbmVzLg0KK1do ZW4gYSBmaWxlIHdpdGggbG9uZyBsaW5lcyBpcyBvcGVuZWQgb3IgaW5zZXJ0 ZWQgaW4gYSBidWZmZXIsIEVtYWNzDQorYXV0b21hdGljYWxseSBlbnRlcnMg YXV0by1uYXJyb3cgbW9kZS4gIFRoaXMgbWVhbnMgdGhhdCBFbWFjcw0KK3Jl c3RyaWN0cyBkaXNwbGF5LCBidXQgbm90IGVkaXRpbmcsIHRvIGEgcG9ydGlv biBvZiB0aGUgYnVmZmVyIGFib3ZlDQorYW5kIGJlbG93IHBvaW50LiAgQWxs IGVkaXRpbmcgY29tbWFuZHMsIGluY2x1ZGluZyBuYXJyb3dpbmcgY29tbWFu ZHMsDQorcmVtYWluIGF2YWlsYWJsZSwgYW5kIHRoZXkgYWN0IG9uIHRoZSB3 aG9sZSBidWZmZXIuICBUaGUgYmVoYXZpb3Igb2YNCit0aGF0IG1vZGUgaXMg Y29udHJvbGxlZCBieSB0aHJlZSB2YXJpYWJsZXM6DQorYXV0by1uYXJyb3ct bG9uZy1saW5lLXRocmVzaG9sZCwgYXV0by1uYXJyb3ctZGlzcGxheS1sZW5n dGggYW5kDQorYXV0by1uYXJyb3ctd2lkZW4tYXV0b21hdGljYWxseS4gIFRv IGRpc2FibGUgdGhhdCBmZWF0dXJlLCBzZXQNCithdXRvLW5hcnJvdy1sb25n LWxpbmUtdGhyZXNob2xkIHRvIG5pbCBpbiB5b3VyIGluaXQgZmlsZS4NCisN CiAtLS0NCiAqKiAnemFwLXRvLWNoYXInIGFuZCAnemFwLXVwLXRvLWNoYXIn IGFyZSBjYXNlLXNlbnNpdGl2ZSBmb3IgdXBwZXItY2FzZSBjaGFycy4NCiBU aGVzZSBjb21tYW5kcyBub3cgYmVoYXZlIGFzIGNhc2Utc2Vuc2l0aXZlIGZv ciBpbnRlcmFjdGl2ZSBjYWxscyB3aGVuDQpkaWZmIC0tZ2l0IGEvbGlzcC9i aW5kaW5ncy5lbCBiL2xpc3AvYmluZGluZ3MuZWwNCmluZGV4IDBjZjE4MzRh NGYuLmZhNTA0MDc3NmQgMTAwNjQ0DQotLS0gYS9saXNwL2JpbmRpbmdzLmVs DQorKysgYi9saXNwL2JpbmRpbmdzLmVsDQpAQCAtNDAwLDEwICs0MDAsMTQg QEAgbW9kZS1saW5lLW1vZGVzDQogbW91c2UtMjogU2hvdyBoZWxwIGZvciBt aW5vciBtb2RlXG5cDQogbW91c2UtMzogVG9nZ2xlIG1pbm9yIG1vZGVzIg0K IAkJCWxvY2FsLW1hcCAsbW9kZS1saW5lLW1pbm9yLW1vZGUta2V5bWFwKQ0K LQkgIChwcm9wZXJ0aXplICIlbiIgJ2hlbHAtZWNobyAibW91c2UtMjogUmVt b3ZlIG5hcnJvd2luZyBmcm9tIGJ1ZmZlciINCi0JCSAgICAgICdtb3VzZS1m YWNlICdtb2RlLWxpbmUtaGlnaGxpZ2h0DQotCQkgICAgICAnbG9jYWwtbWFw IChtYWtlLW1vZGUtbGluZS1tb3VzZS1tYXANCi0JCQkJICAnbW91c2UtMiAj J21vZGUtbGluZS13aWRlbikpDQorICAgICAgICAgICcoOmV2YWwNCisgICAg ICAgICAgICAoaWYgKG5vdCAoZXEgYXV0by1uYXJyb3ctLW5hcnJvd2luZyAn YXV0bykpDQorICAgICAgICAgICAgICAgIChwcm9wZXJ0aXplICIlbiINCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlbHAtZWNobyAibW91c2Ut MjogUmVtb3ZlIG5hcnJvd2luZyBmcm9tIGJ1ZmZlciINCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ21vdXNlLWZhY2UgJ21vZGUtbGluZS1oaWdo bGlnaHQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2FsLW1h cCAobWFrZS1tb2RlLWxpbmUtbW91c2UtbWFwDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdtb3VzZS0yICMnbW9kZS1saW5l LXdpZGVuKSkNCisgICAgICAgICAgICAgICIlbiIpKQ0KIAkgICIpIg0KIAkg IChwcm9wZXJ0aXplICIlXSIgJ2hlbHAtZWNobyByZWN1cnNpdmUtZWRpdC1o ZWxwLWVjaG8pDQogCSAgIiAiKSkNCmRpZmYgLS1naXQgYS9saXNwL2ZpbGVz LmVsIGIvbGlzcC9maWxlcy5lbA0KaW5kZXggODgxMjE3NTAxNC4uYWJkZWVh N2E4MCAxMDA2NDQNCi0tLSBhL2xpc3AvZmlsZXMuZWwNCisrKyBiL2xpc3Av ZmlsZXMuZWwNCkBAIC0yNjQ4LDYgKzI2NDgsOTggQEAgZmluZC1maWxlLWxp dGVyYWxseQ0KICAgCSAgKGNvbmZpcm0tbm9uZXhpc3RlbnQtZmlsZS1vci1i dWZmZXIpKSkpDQogICAoc3dpdGNoLXRvLWJ1ZmZlciAoZmluZC1maWxlLW5v c2VsZWN0IGZpbGVuYW1lIG5pbCB0KSkpDQogDA0KKyhkZWZjdXN0b20gYXV0 by1uYXJyb3ctZGlzcGxheS1sZW5ndGggMzAwMDANCisgICJOdW1iZXIgb2Yg Y2hhcmFjdGVycyB0byB3aGljaCBkaXNwbGF5IGlzIHJlc3RyaWN0ZWQgaW4g YGF1dG8tbmFycm93LW1vZGUnLiINCisgIDpncm91cCAnZmlsZXMNCisgIDpn cm91cCAnZmluZC1maWxlDQorICA6dmVyc2lvbiAiMjkuMSINCisgIDp0eXBl ICdpbnRlZ2VyKQ0KKw0KKyhkZWZjdXN0b20gYXV0by1uYXJyb3ctd2lkZW4t YXV0b21hdGljYWxseQ0KKyAgJyggbW92ZS1iZWdpbm5pbmctb2YtbGluZSBt b3ZlLWVuZC1vZi1saW5lIGJhY2t3YXJkLXNlbnRlbmNlIGZvcndhcmQtc2Vu dGVuY2UNCisgICAgIGJhY2t3YXJkLXNleHAgZm9yd2FyZC1zZXhwIGJlZ2lu bmluZy1vZi1kZWZ1biBlbmQtb2YtZGVmdW4NCisgICAgIGJlZ2lubmluZy1v Zi1idWZmZXIgZW5kLW9mLWJ1ZmZlciBnb3RvLWNoYXIgZ290by1saW5lDQor ICAgICBtYXJrLXNleHAgbWFyay1kZWZ1biBtYXJrLXBhcmFncmFwaCBtYXJr LXdob2xlLWJ1ZmZlciBtYXJrLXBhZ2UNCisgICAgIGV4Y2hhbmdlLXBvaW50 LWFuZC1tYXJrIHBvcC1nbG9iYWwtbWFyayBzZXQtbWFyay1jb21tYW5kIGp1 bXAtdG8tcmVnaXN0ZXINCisgICAgIGJvb2ttYXJrLWp1bXApDQorICAiQ29t bWFuZHMgZm9yIHdoaWNoIGRpc3BsYXkgaXMgYXV0b21hdGljYWxseSB3aWRl bmVkIGluIGBhdXRvLW5hcnJvdy1tb2RlJy4iDQorICA6Z3JvdXAgJ2ZpbGVz DQorICA6Z3JvdXAgJ2ZpbmQtZmlsZQ0KKyAgOnZlcnNpb24gIjI5LjEiDQor ICA6dHlwZSAnKHJlcGVhdCBmdW5jdGlvbikpDQorDQorKGRlZnZhci1sb2Nh bCBhdXRvLW5hcnJvdy0td2lkZW4tYXV0b21hdGljYWxseSBuaWwNCisgICJJ bnRlcm5hbCB2YXJpYWJsZSB1c2VkIGJ5IGBhdXRvLW5hcnJvdy1tb2RlJy4i KQ0KKw0KKyhkZWZ2YXItbG9jYWwgYXV0by1uYXJyb3ctLWlzZWFyY2gtd2lk ZW4tYXV0b21hdGljYWxseSBuaWwNCisgICJJbnRlcm5hbCB2YXJpYWJsZSB1 c2VkIGJ5IGBhdXRvLW5hcnJvdy1tb2RlJy4iKQ0KKw0KKyhkZWZ2YXItbG9j YWwgYXV0by1uYXJyb3ctLWluaXRpYWxpemVkIG5pbA0KKyAgIkludGVybmFs IHZhcmlhYmxlIHVzZWQgYnkgYGF1dG8tbmFycm93LW1vZGUnLiIpDQorDQor KGRlZnVuIGF1dG8tbmFycm93LXByZS1jb21tYW5kLWZ1bmN0aW9uICgpDQor ICAiQ29uZGl0aW9uYWxseSB3aWRlbiBkaXNwbGF5IHdoZW4gYGF1dG8tbmFy cm93LW1vZGUnIGlzIGluIGVmZmVjdC4iDQorICAod2hlbiBhdXRvLW5hcnJv dy1tb2RlDQorICAgICh1bmxlc3MgYXV0by1uYXJyb3ctLWluaXRpYWxpemVk DQorICAgICAgKHNldHEgYXV0by1uYXJyb3ctLXdpZGVuLWF1dG9tYXRpY2Fs bHkgd2lkZW4tYXV0b21hdGljYWxseQ0KKyAgICAgICAgICAgIGF1dG8tbmFy cm93LS1pc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHkgaXNlYXJjaC13aWRl bi1hdXRvbWF0aWNhbGx5DQorICAgICAgICAgICAgYXV0by1uYXJyb3ctLW5h cnJvd2luZyAnYXV0bw0KKyAgICAgICAgICAgIGF1dG8tbmFycm93LS1pbml0 aWFsaXplZCB0KSkNCisgICAgKHNldHEtbG9jYWwgd2lkZW4tYXV0b21hdGlj YWxseSB0DQorICAgICAgICAgICAgICAgIGlzZWFyY2gtd2lkZW4tYXV0b21h dGljYWxseSB0KQ0KKyAgICAoaWYgKG1lbXEgdGhpcy1jb21tYW5kICcobmFy cm93LXRvLXJlZ2lvbiBuYXJyb3ctdG8tZGVmdW4gbmFycm93LXRvLXBhZ2Up KQ0KKyAgICAgICAgKHNldHEgYXV0by1uYXJyb3ctLW5hcnJvd2luZyAnZXhw bGljaXQNCisgICAgICAgICAgICAgIHdpZGVuLWF1dG9tYXRpY2FsbHkgYXV0 by1uYXJyb3ctLXdpZGVuLWF1dG9tYXRpY2FsbHkNCisgICAgICAgICAgICAg IGlzZWFyY2gtd2lkZW4tYXV0b21hdGljYWxseSBhdXRvLW5hcnJvdy0taXNl YXJjaC13aWRlbi1hdXRvbWF0aWNhbGx5KSkNCisgICAgKGlmIChlcSB0aGlz LWNvbW1hbmQgJ3dpZGVuKQ0KKyAgICAgICAgKHNldHEgYXV0by1uYXJyb3ct LW5hcnJvd2luZyAnYXV0bykpDQorICAgICh3aGVuIChhbmQgKG5vdCAoZXEg YXV0by1uYXJyb3ctLW5hcnJvd2luZyAnZXhwbGljaXQpKQ0KKyAgICAgICAg ICAgICAgIChtZW1xIHRoaXMtY29tbWFuZCBhdXRvLW5hcnJvdy13aWRlbi1h dXRvbWF0aWNhbGx5KSkNCisgICAgICAod2lkZW4pKSkpDQorDQorKGRlZnVu IGF1dG8tbmFycm93LXBvc3QtY29tbWFuZC1mdW5jdGlvbiAoKQ0KKyAgIlVw ZGF0ZSBkaXNwbGF5IG5hcnJvd2luZyB3aGVuIGBhdXRvLW5hcnJvdy1tb2Rl JyBpcyBpbiBlZmZlY3QuIg0KKyAgKHdoZW4gKGFuZCBhdXRvLW5hcnJvdy1t b2RlDQorICAgICAgICAgICAgIChub3QgKGVxIGF1dG8tbmFycm93LS1uYXJy b3dpbmcgJ2V4cGxpY2l0KSkpDQorICAgICh1bmxlc3MgYXV0by1uYXJyb3ct LWluaXRpYWxpemVkDQorICAgICAgKHNldHEgYXV0by1uYXJyb3ctLW5hcnJv d2luZyAnYXV0bykpDQorICAgIChsZXQgKHBvaW50IGN1ci1wb2ludC1taW4g YnVmLXBvaW50LW1pbiBidWYtcG9pbnQtbWF4IHNpemUpDQorICAgICAgKHNl dHEgcG9pbnQgKHBvaW50KSBjdXItcG9pbnQtbWluIChwb2ludC1taW4pDQor ICAgICAgICAgICAgc2l6ZSAoLyBhdXRvLW5hcnJvdy1kaXNwbGF5LWxlbmd0 aCAzKSkNCisgICAgICAoc2F2ZS1yZXN0cmljdGlvbg0KKyAgICAgICAgKHdp ZGVuKQ0KKyAgICAgICAgKHNldHEgYnVmLXBvaW50LW1pbiAocG9pbnQtbWlu KSBidWYtcG9pbnQtbWF4IChwb2ludC1tYXgpKSkNCisgICAgICAobGV0KiAo KHBvcyAoKiAobWluIChtYXggKC8gcG9pbnQgc2l6ZSkgMSkNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICgxLSAoLyBidWYtcG9pbnQtbWF4IHNpemUp KSkNCisgICAgICAgICAgICAgICAgICAgICBzaXplKSkNCisgICAgICAgICAg ICAgKGJlZ2luIChtYXggKC0gcG9zIHNpemUpIGJ1Zi1wb2ludC1taW4pKQ0K KyAgICAgICAgICAgICAoZW5kIChtaW4gKCsgYmVnaW4gKCogMyBzaXplKSkg YnVmLXBvaW50LW1heCkpKQ0KKyAgICAgICAgKHdoZW4gKG9yIChub3QgKGJ1 ZmZlci1uYXJyb3dlZC1wKSkNCisJCSAgKG5vdCAoPSBiZWdpbiBjdXItcG9p bnQtbWluKSkpDQorCSAgKG5hcnJvdy10by1yZWdpb24gYmVnaW4gZW5kKSkp KSkpDQorDQorKHNldHEgYXV0by1uYXJyb3ctbG9uZy1saW5lLXRocmVzaG9s ZCAzMDAwMA0KKyAgICAgIGF1dG8tbmFycm93LXByZS1jb21tYW5kLWZ1bmN0 aW9uICMnYXV0by1uYXJyb3ctcHJlLWNvbW1hbmQtZnVuY3Rpb24NCisgICAg ICBhdXRvLW5hcnJvdy1wb3N0LWNvbW1hbmQtZnVuY3Rpb24gIydhdXRvLW5h cnJvdy1wb3N0LWNvbW1hbmQtZnVuY3Rpb24pDQorDQorKGRlZmluZS1taW5v ci1tb2RlIGF1dG8tbmFycm93LW1vZGUNCisgICJBdXRvbWF0aWNhbGx5IG5h cnJvdyB0aGUgZGlzcGxheSBvZiBhIGJ1ZmZlciBhYm92ZSBhbmQgYmVsb3cg cG9pbnQuDQorDQorVGhpcyBtb2RlIGlzIGF1dG9tYXRpY2FsbHkgZW50ZXJl ZCB3aGVuIGEgZmlsZSB3aXRoIG9uZSBvciBtb3JlIGxpbmVzDQorbG9uZ2Vy IHRoYW4gYGF1dG8tbmFycm93LWxvbmctbGluZS10aHJlc2hvbGQnIGlzIG9w ZW5lZCBvciBpbnNlcnRlZA0KK2luIGEgYnVmZmVyLiAgSXQgcmVzdHJpY3Rz IGRpc3BsYXksIGJ1dCBub3QgZWRpdGluZywgdG8NCitgYXV0by1uYXJyb3ct ZGlzcGxheS1sZW5ndGgnIGNoYXJhY3RlcnMuICBEaXNwbGF5IGlzIHdpZGVu ZWQgYmVmb3JlDQorZXhlY3V0aW5nIGFueSBvZiB0aGUgY29tbWFuZHMgbGlz dGVkIGluIGBhdXRvLW5hcnJvdy13aWRlbi1hdXRvbWF0aWNhbGx5Jy4iDQor ICA6Z3JvdXAgJ2ZpbGVzDQorICA6dmVyc2lvbiAiMjkuMSINCisgIDphZnRl ci1ob29rIChwcm9nbiAocHV0ICdhdXRvLW5hcnJvdy1tb2RlICdwZXJtYW5l bnQtbG9jYWwgdCkNCisgICAgICAgICAgICAgICAgICAgICAocHV0ICdhdXRv LW5hcnJvdy0tbmFycm93aW5nICdwZXJtYW5lbnQtbG9jYWwgdCkpDQorICAo aWYgYXV0by1uYXJyb3ctbW9kZQ0KKyAgICAgIChhdXRvLW5hcnJvdy1wb3N0 LWNvbW1hbmQtZnVuY3Rpb24pDQorICAgICh3aGVuIChub3QgKGVxIGF1dG8t bmFycm93LS1uYXJyb3dpbmcgJ2V4cGxpY2l0KSkNCisgICAgICAod2lkZW4p KQ0KKyAgICAoc2V0cSBhdXRvLW5hcnJvdy0tbmFycm93aW5nIG5pbCkpKQ0K KwwNCiAoZGVmdW4gYWZ0ZXItZmluZC1maWxlICgmb3B0aW9uYWwgZXJyb3Ig d2FybiBub2F1dG8NCiAJCQkJICBfYWZ0ZXItZmluZC1maWxlLWZyb20tcmV2 ZXJ0LWJ1ZmZlcg0KIAkJCQkgIG5vbW9kZXMpDQpkaWZmIC0tZ2l0IGEvbGlz cC9pc2VhcmNoLmVsIGIvbGlzcC9pc2VhcmNoLmVsDQppbmRleCBkYjdiNTNj MDE0Li5hNmUwMzRkZjZiIDEwMDY0NA0KLS0tIGEvbGlzcC9pc2VhcmNoLmVs DQorKysgYi9saXNwL2lzZWFyY2guZWwNCkBAIC0zMDM3LDYgKzMwMzcsMTMg QEAgaXNlYXJjaC1hbGxvdy1wcmVmaXgNCiAgIDp0eXBlICdib29sZWFuDQog ICA6Z3JvdXAgJ2lzZWFyY2gpDQogDQorKGRlZmN1c3RvbSBpc2VhcmNoLXdp ZGVuLWF1dG9tYXRpY2FsbHkgbmlsDQorICAiV2hldGhlciBhIG5hcnJvd2Vk IGJ1ZmZlciBjYW4gYmUgd2lkZW5lZCB3aGVuIGlzZWFyY2ggZmFpbHMuDQor VGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCB3aGVuIGB3aWRlbi1hdXRvbWF0 aWNhbGx5JyBpcyBuaWwuIg0KKyAgOnZlcnNpb24gIjI5LjEiDQorICA6dHlw ZSAnYm9vbGVhbg0KKyAgOmdyb3VwICdpc2VhcmNoKQ0KKw0KIChkZWZ1biBp c2VhcmNoLXN0cmluZy1vdXQtb2Ytd2luZG93IChpc2VhcmNoLXBvaW50KQ0K ICAgIlRlc3Qgd2hldGhlciB0aGUgc2VhcmNoIHN0cmluZyBpcyBjdXJyZW50 bHkgb3V0c2lkZSBvZiB0aGUgd2luZG93Lg0KIFJldHVybiBuaWwgaWYgaXQn cyBjb21wbGV0ZWx5IHZpc2libGUsIG9yIGlmIHBvaW50IGlzIHZpc2libGUs DQpAQCAtMzY0OSwxNyArMzY1NiwyMCBAQCBpc2VhcmNoLXNlYXJjaA0KIAko d2hpbGUgcmV0cnkNCiAJICAoc2V0cSBpc2VhcmNoLXN1Y2Nlc3MNCiAJCShp c2VhcmNoLXNlYXJjaC1zdHJpbmcgaXNlYXJjaC1zdHJpbmcgbmlsIHQpKQ0K LQkgIDs7IENsZWFyIFJFVFJZIHVubGVzcyB0aGUgc2VhcmNoIHByZWRpY2F0 ZSBzYXlzDQotCSAgOzsgdG8gc2tpcCB0aGlzIHNlYXJjaCBoaXQuDQotCSAg KGlmIChvciAobm90IGlzZWFyY2gtc3VjY2VzcykNCi0JCSAgKGZ1bmNhbGwg aXNlYXJjaC1maWx0ZXItcHJlZGljYXRlDQotCQkJICAgKG1hdGNoLWJlZ2lu bmluZyAwKSAobWF0Y2gtZW5kIDApKSkNCi0JICAgICAgKHNldHEgcmV0cnkg bmlsKQ0KLQkgICAgOzsgQWR2YW5jZSBwb2ludCBvbiBlbXB0eSBtYXRjaGVz IGJlZm9yZSByZXRyeWluZw0KLQkgICAgKHdoZW4gKD0gKG1hdGNoLWJlZ2lu bmluZyAwKSAobWF0Y2gtZW5kIDApKQ0KLQkgICAgICAoaWYgKGlmIGlzZWFy Y2gtZm9yd2FyZCAoZW9icCkgKGJvYnApKQ0KLQkJICAoc2V0cSByZXRyeSBu aWwgaXNlYXJjaC1zdWNjZXNzIG5pbCkNCi0JCShmb3J3YXJkLWNoYXIgKGlm IGlzZWFyY2gtZm9yd2FyZCAxIC0xKSkpKSkpDQorICAgICAgICAgIChpZiAo YW5kIChub3QgaXNlYXJjaC1zdWNjZXNzKSAoYnVmZmVyLW5hcnJvd2VkLXAp DQorICAgICAgICAgICAgICAgICAgIGlzZWFyY2gtd2lkZW4tYXV0b21hdGlj YWxseSB3aWRlbi1hdXRvbWF0aWNhbGx5KQ0KKyAgICAgICAgICAgICAgKHdp ZGVuKQ0KKwkgICAgOzsgQ2xlYXIgUkVUUlkgdW5sZXNzIHRoZSBzZWFyY2gg cHJlZGljYXRlIHNheXMNCisJICAgIDs7IHRvIHNraXAgdGhpcyBzZWFyY2gg aGl0Lg0KKwkgICAgKGlmIChvciAobm90IGlzZWFyY2gtc3VjY2VzcykNCisJ CSAgICAoZnVuY2FsbCBpc2VhcmNoLWZpbHRlci1wcmVkaWNhdGUNCisJCQkg ICAgIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpDQorCSAg ICAgICAgKHNldHEgcmV0cnkgbmlsKQ0KKwkgICAgICA7OyBBZHZhbmNlIHBv aW50IG9uIGVtcHR5IG1hdGNoZXMgYmVmb3JlIHJldHJ5aW5nDQorCSAgICAg ICh3aGVuICg9IChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkN CisJICAgICAgICAoaWYgKGlmIGlzZWFyY2gtZm9yd2FyZCAoZW9icCkgKGJv YnApKQ0KKwkJICAgIChzZXRxIHJldHJ5IG5pbCBpc2VhcmNoLXN1Y2Nlc3Mg bmlsKQ0KKwkJICAoZm9yd2FyZC1jaGFyIChpZiBpc2VhcmNoLWZvcndhcmQg MSAtMSkpKSkpKSkNCiAJKHNldHEgaXNlYXJjaC1qdXN0LXN0YXJ0ZWQgbmls KQ0KIAkod2hlbiBpc2VhcmNoLXN1Y2Nlc3MNCiAJICAoc2V0cSBpc2VhcmNo LW90aGVyLWVuZA0KZGlmZiAtLWdpdCBhL2xpc3AvbG9uZ2xpbmVzLmVsIGIv bGlzcC9vYnNvbGV0ZS9sb25nbGluZXMuZWwNCnNpbWlsYXJpdHkgaW5kZXgg OTklDQpyZW5hbWUgZnJvbSBsaXNwL2xvbmdsaW5lcy5lbA0KcmVuYW1lIHRv IGxpc3Avb2Jzb2xldGUvbG9uZ2xpbmVzLmVsDQppbmRleCBhNmNmOTNhMDM5 Li5kNDRhNjM0ZTJlIDEwMDY0NA0KLS0tIGEvbGlzcC9sb25nbGluZXMuZWwN CisrKyBiL2xpc3Avb2Jzb2xldGUvbG9uZ2xpbmVzLmVsDQpAQCAtNiw2ICs2 LDcgQEANCiA7OyAgICAgICAgICAgICBBbGV4IFNjaHJvZWRlciA8YWxleEBn bnUub3JnPg0KIDs7ICAgICAgICAgICAgIENob25nIFlpZG9uZyA8Y3lkQHN0 dXBpZGNoaWNrZW4uY29tPg0KIDs7IE1haW50YWluZXI6IGVtYWNzLWRldmVs QGdudS5vcmcNCis7OyBPYnNvbGV0ZS1zaW5jZTogMjQuNA0KIDs7IEtleXdv cmRzOiBjb252ZW5pZW5jZSwgd3ANCiANCiA7OyBUaGlzIGZpbGUgaXMgcGFy dCBvZiBHTlUgRW1hY3MuDQpkaWZmIC0tZ2l0IGEvc3JjL2J1ZmZlci5jIGIv c3JjL2J1ZmZlci5jDQppbmRleCA1MDljZTUxYjU1Li5jYmMyNDYwNjdkIDEw MDY0NA0KLS0tIGEvc3JjL2J1ZmZlci5jDQorKysgYi9zcmMvYnVmZmVyLmMN CkBAIC01Mjc2LDYgKzUyNzYsNyBAQCBpbml0X2J1ZmZlcl9vbmNlICh2b2lk KQ0KICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3Ms IHRhYl9saW5lX2Zvcm1hdCksIGlkeCk7ICsraWR4Ow0KICAgWFNFVEZBU1RJ TlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGN1cnNvcl90eXBlKSwg aWR4KTsgKytpZHg7DQogICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9s b2NhbF9mbGFncywgZXh0cmFfbGluZV9zcGFjaW5nKSwgaWR4KTsgKytpZHg7 DQorICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywg YXV0b19uYXJyb3dfX25hcnJvd2luZyksIGlkeCk7ICsraWR4Ow0KICAgWFNF VEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGN1cnNvcl9p bl9ub25fc2VsZWN0ZWRfd2luZG93cyksIGlkeCk7ICsraWR4Ow0KIA0KICAg LyogYnVmZmVyX2xvY2FsX2ZsYWdzIGNvbnRhaW5zIG5vIHBvaW50ZXJzLCBz byBpdCdzIHNhZmUgdG8gdHJlYXQgaXQNCkBAIC02MzYzLDYgKzYzNjQsMTAg QEAgZnJvbSAoYWJzIFBPU0lUSU9OKS4gIElmIFBPU0lUSU9OIGlzIHBvc2l0 aXZlLCBwb2ludCB3YXMgYXQgdGhlIGZyb250DQogSWYgdmFsdWUgaXMgYSBm bG9hdGluZyBwb2ludCBudW1iZXIsIGl0IHNwZWNpZmllcyB0aGUgc3BhY2lu ZyByZWxhdGl2ZQ0KIHRvIHRoZSBkZWZhdWx0IGZyYW1lIGxpbmUgaGVpZ2h0 LiAgQSB2YWx1ZSBvZiBuaWwgbWVhbnMgYWRkIG5vIGV4dHJhIHNwYWNlLiAg Ki8pOw0KIA0KKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJhdXRvLW5hcnJvdy0t bmFycm93aW5nIiwNCisJCSAgICAgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBh dXRvX25hcnJvd19fbmFycm93aW5nKSwgUW5pbCwNCisJCSAgICAgZG9jOiAv KiBJbnRlcm5hbCB2YXJpYWJsZSB1c2VkIGJ5IGBhdXRvLW5hcnJvdy1tb2Rl Jy4gICovKTsNCisNCiAgIERFRlZBUl9QRVJfQlVGRkVSICgiY3Vyc29yLWlu LW5vbi1zZWxlY3RlZC13aW5kb3dzIiwNCiAJCSAgICAgJkJWQVIgKGN1cnJl bnRfYnVmZmVyLCBjdXJzb3JfaW5fbm9uX3NlbGVjdGVkX3dpbmRvd3MpLCBR bmlsLA0KIAkJICAgICBkb2M6IC8qIE5vbi1uaWwgbWVhbnMgc2hvdyBhIGN1 cnNvciBpbiBub24tc2VsZWN0ZWQgd2luZG93cy4NCmRpZmYgLS1naXQgYS9z cmMvYnVmZmVyLmggYi9zcmMvYnVmZmVyLmgNCmluZGV4IDEzNWVhZjcyZDMu LmE2YWJjNmVjZTggMTAwNjQ0DQotLS0gYS9zcmMvYnVmZmVyLmgNCisrKyBi L3NyYy9idWZmZXIuaA0KQEAgLTU2MSw2ICs1NjEsOSBAQCAjZGVmaW5lIEJW QVIoYnVmLCBmaWVsZCkgKChidWYpLT5maWVsZCAjIyBfKQ0KICAgICAgaW4g dGhlIGRpc3BsYXkgb2YgdGhpcyBidWZmZXIuICAqLw0KICAgTGlzcF9PYmpl Y3QgZXh0cmFfbGluZV9zcGFjaW5nXzsNCiANCisgIC8qIE5hcnJvd2luZyB0 eXBlIHdoZW4gYXV0by1uYXJyb3cgbW9kZSBpcyBpbiBlZmZlY3QuICAqLw0K KyAgTGlzcF9PYmplY3QgYXV0b19uYXJyb3dfX25hcnJvd2luZ187DQorDQog ICAvKiBDdXJzb3IgdHlwZSB0byBkaXNwbGF5IGluIG5vbi1zZWxlY3RlZCB3 aW5kb3dzLg0KICAgICAgdCBtZWFucyB0byB1c2UgaG9sbG93IGJveCBjdXJz b3IuDQogICAgICBTZWUgYGN1cnNvci10eXBlJyBmb3Igb3RoZXIgdmFsdWVz LiAgKi8NCmRpZmYgLS1naXQgYS9zcmMvZmlsZWlvLmMgYi9zcmMvZmlsZWlv LmMNCmluZGV4IDEwZDRiOGJjMTUuLjlkMmNmMmFlMDAgMTAwNjQ0DQotLS0g YS9zcmMvZmlsZWlvLmMNCisrKyBiL3NyYy9maWxlaW8uYw0KQEAgLTQ5OTcs NiArNDk5NywyMCBAQCBiZWNhdXNlICgxKSBpdCBwcmVzZXJ2ZXMgc29tZSBt YXJrZXIgcG9zaXRpb25zIChpbiB1bmNoYW5nZWQgcG9ydGlvbnMNCiAJICAg T3RoZXJ3aXNlIHN0YXJ0IHdpdGggYW4gZW1wdHkgdW5kb19saXN0LiAgKi8N CiAJYnNldF91bmRvX2xpc3QgKGN1cnJlbnRfYnVmZmVyLCBFUSAob2xkX3Vu ZG8sIFF0KSA/IFF0IDogUW5pbCk7DQogDQorICAgICAgaWYgKCFub25pbnRl cmFjdGl2ZSAmJiAhTklMUCAoVmF1dG9fbmFycm93X2xvbmdfbGluZV90aHJl c2hvbGQpKQ0KKwl7DQorCSAgcHRyZGlmZl90IGN1ciwgbmV4dCwgZm91bmQs IG1heCA9IDA7DQorCSAgZm9yIChjdXIgPSBQVDsgY3VyIDwgUFQgKyBpbnNl cnRlZDsgY3VyID0gbmV4dCkNCisJICAgIHsNCisJICAgICAgbmV4dCA9IGZp bmRfbmV3bGluZTEgKGN1ciwgQ0hBUl9UT19CWVRFIChjdXIpLCAwLCAtMSwg MSwNCisJCQkJICAgICZmb3VuZCwgTlVMTCwgdHJ1ZSk7DQorCSAgICAgIGlm IChuZXh0IC0gY3VyID4gbWF4KSBtYXggPSBuZXh0IC0gY3VyOw0KKwkgICAg ICBpZiAoIWZvdW5kKSBicmVhazsNCisJICAgIH0NCisJICBpZiAobWF4ID4g WEZJWE5VTSAoVmF1dG9fbmFycm93X2xvbmdfbGluZV90aHJlc2hvbGQpKQ0K KwkgICAgc2FmZV9jYWxsICgxLCBRYXV0b19uYXJyb3dfbW9kZSk7DQorCX0N CisNCiAgICAgICB1bmJpbmRfdG8gKGNvdW50MSwgUW5pbCk7DQogICAgIH0N CiANCkBAIC02NjM4LDYgKzY2NTIsMTcgQEAgZG8gKGZpbGUtZXhpc3RzLXAg RklMRU5BTUUpIGFuZCBGSUxFTkFNRSBpcyBoYW5kbGVkIGJ5IEhBTkRMRVIs IHRoZW4NCiAgIC8qIExpc3AgZnVuY3Rpb24gZm9yIHJlY3Vyc2l2ZWx5IGRl bGV0aW5nIGRpcmVjdG9yaWVzLiAgKi8NCiAgIERFRlNZTSAoUWRlbGV0ZV9k aXJlY3RvcnksICJkZWxldGUtZGlyZWN0b3J5Iik7DQogDQorICBERUZWQVJf TElTUCAoImF1dG8tbmFycm93LWxvbmctbGluZS10aHJlc2hvbGQiLA0KKwkg ICAgICAgVmF1dG9fbmFycm93X2xvbmdfbGluZV90aHJlc2hvbGQsDQorCSAg ICAgICBkb2M6IC8qIExpbmUgbGVuZ3RoIGFib3ZlIHdoaWNoIGBhdXRvLW5h cnJvdy1tb2RlJyBpcyBlbnRlcmVkLg0KK1doZW4gbm9uLW5pbCwgYW5kIHdo ZW4gYSBmaWxlIHdpdGggb25lIG9yIG1vcmUgbGluZXMgbG9uZ2VyIHRoYW4N CitgYXV0by1uYXJyb3ctbG9uZy1saW5lLXRocmVzaG9sZCcgaXMgb3BlbmVk IG9yIGluc2VydGVkIGluIGEgYnVmZmVyLA0KK2BhdXRvLW5hcnJvdy1tb2Rl JyBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQuDQorV2hlbiBuaWwsIGBhdXRv LW5hcnJvdy1tb2RlJyBpcyBub3QgZW50ZXJlZCBhdXRvbWF0aWNhbGx5LiAg Ki8pOw0KKyAgVmF1dG9fbmFycm93X2xvbmdfbGluZV90aHJlc2hvbGQgPSBR bmlsOw0KKw0KKyAgREVGU1lNIChRYXV0b19uYXJyb3dfbW9kZSwgImF1dG8t bmFycm93LW1vZGUiKTsNCisNCiAgIERFRlNZTSAoUXN1YnN0aXR1dGVfZW52 X2luX2ZpbGVfbmFtZSwgInN1YnN0aXR1dGUtZW52LWluLWZpbGUtbmFtZSIp Ow0KICAgREVGU1lNIChRZ2V0X2J1ZmZlcl93aW5kb3dfbGlzdCwgImdldC1i dWZmZXItd2luZG93LWxpc3QiKTsNCiANCmRpZmYgLS1naXQgYS9zcmMva2V5 Ym9hcmQuYyBiL3NyYy9rZXlib2FyZC5jDQppbmRleCBiZWQ4MzA3YjZmLi4z OGFhNjQ3NzRkIDEwMDY0NA0KLS0tIGEvc3JjL2tleWJvYXJkLmMNCisrKyBi L3NyYy9rZXlib2FyZC5jDQpAQCAtMTI5MCw2ICsxMjkwLDkgQEAgY29tbWFu ZF9sb29wXzEgKHZvaWQpDQogDQogICBpZiAoTklMUCAoVm1lbW9yeV9mdWxs KSkNCiAgICAgew0KKyAgICAgIGlmICghTklMUCAoVmF1dG9fbmFycm93X3Bv c3RfY29tbWFuZF9mdW5jdGlvbikgJiYgIU5JTFAgKFZydW5faG9va3MpKQ0K KwlzYWZlX3J1bl9ob29rcyAoUWF1dG9fbmFycm93X3Bvc3RfY29tbWFuZF9m dW5jdGlvbik7DQorDQogICAgICAgLyogTWFrZSBzdXJlIHRoaXMgaG9vayBy dW5zIGFmdGVyIGNvbW1hbmRzIHRoYXQgZ2V0IGVycm9ycyBhbmQNCiAJIHRo cm93IHRvIHRvcCBsZXZlbC4gICovDQogICAgICAgLyogTm90ZSB0aGF0IHRo ZSB2YWx1ZSBjZWxsIHdpbGwgbmV2ZXIgZGlyZWN0bHkgY29udGFpbiBuaWwN CkBAIC0xNDcyLDYgKzE0NzUsOCBAQCBjb21tYW5kX2xvb3BfMSAodm9pZCkN CiAgICAgICBWcmVhbF90aGlzX2NvbW1hbmQgPSBjbWQ7DQogICAgICAgc2Fm ZV9ydW5faG9va3MgKFFwcmVfY29tbWFuZF9ob29rKTsNCiANCisgICAgICBz YWZlX3J1bl9ob29rcyAoUWF1dG9fbmFycm93X3ByZV9jb21tYW5kX2Z1bmN0 aW9uKTsNCisNCiAgICAgICBhbHJlYWR5X2FkanVzdGVkID0gMDsNCiANCiAg ICAgICBpZiAoTklMUCAoVnRoaXNfY29tbWFuZCkpDQpAQCAtMTUyMiw2ICsx NTI3LDggQEAgY29tbWFuZF9sb29wXzEgKHZvaWQpDQogICAgICAgICAgIH0N CiAgICAgICBrc2V0X2xhc3RfcHJlZml4X2FyZyAoY3VycmVudF9rYm9hcmQs IFZjdXJyZW50X3ByZWZpeF9hcmcpOw0KIA0KKyAgICAgIHNhZmVfcnVuX2hv b2tzIChRYXV0b19uYXJyb3dfcG9zdF9jb21tYW5kX2Z1bmN0aW9uKTsNCisN CiAgICAgICBzYWZlX3J1bl9ob29rcyAoUXBvc3RfY29tbWFuZF9ob29rKTsN CiANCiAgICAgICAvKiBJZiBkaXNwbGF5aW5nIGEgbWVzc2FnZSwgcmVzaXpl IHRoZSBlY2hvIGFyZWEgd2luZG93IHRvIGZpdA0KQEAgLTEyMDQwLDYgKzEy MDQ3LDExIEBAIHN5bXNfb2Zfa2V5Ym9hcmQgKHZvaWQpDQogICBERUZTWU0g KFFwcmVfY29tbWFuZF9ob29rLCAicHJlLWNvbW1hbmQtaG9vayIpOw0KICAg REVGU1lNIChRcG9zdF9jb21tYW5kX2hvb2ssICJwb3N0LWNvbW1hbmQtaG9v ayIpOw0KIA0KKyAgREVGU1lNIChRYXV0b19uYXJyb3dfcHJlX2NvbW1hbmRf ZnVuY3Rpb24sDQorCSAgImF1dG8tbmFycm93LXByZS1jb21tYW5kLWZ1bmN0 aW9uIik7DQorICBERUZTWU0gKFFhdXRvX25hcnJvd19wb3N0X2NvbW1hbmRf ZnVuY3Rpb24sDQorCSAgImF1dG8tbmFycm93LXBvc3QtY29tbWFuZC1mdW5j dGlvbiIpOw0KKw0KICAgREVGU1lNIChRdW5kb19hdXRvX19hZGRfYm91bmRh cnksICJ1bmRvLWF1dG8tLWFkZC1ib3VuZGFyeSIpOw0KICAgREVGU1lNIChR dW5kb19hdXRvX191bmRvYWJseV9jaGFuZ2VkX2J1ZmZlcnMsDQogICAgICAg ICAgICJ1bmRvLWF1dG8tLXVuZG9hYmx5LWNoYW5nZWQtYnVmZmVycyIpOw0K QEAgLTEyNjA0LDYgKzEyNjE2LDIyIEBAIHN5bXNfb2Zfa2V5Ym9hcmQgKHZv aWQpDQogU2VlIGFsc28gYHByZS1jb21tYW5kLWhvb2snLiAgKi8pOw0KICAg VnBvc3RfY29tbWFuZF9ob29rID0gUW5pbDsNCiANCisgIERFRlZBUl9MSVNQ ICgiYXV0by1uYXJyb3ctcHJlLWNvbW1hbmQtZnVuY3Rpb24iLA0KKwkgICAg ICAgVmF1dG9fbmFycm93X3ByZV9jb21tYW5kX2Z1bmN0aW9uLA0KKwkgICAg ICAgZG9jOiAvKiBGdW5jdGlvbiBleGVjdXRlZCBiZWZvcmUgZWFjaCBjb21t YW5kIGlzIGV4ZWN1dGVkIGluIGBhdXRvLW5hcnJvdy1tb2RlJy4NCitJZiBu b24tbmlsLCBhbmQgYGF1dG8tbmFycm93LW1vZGUnIGlzIGVuYWJsZWQsIHRo ZSBmdW5jdGlvbiBpcw0KK2NhbGxlZCBiZWZvcmUgZWFjaCBjb21tYW5kIGlz IGV4ZWN1dGVkLCBhZnRlciBgcHJlLWNvbW1hbmQtaG9vaycuDQorSXQgaXMg Y2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLiAgKi8pOw0KKyAgVmF1dG9fbmFy cm93X3ByZV9jb21tYW5kX2Z1bmN0aW9uID0gUW5pbDsNCisNCisgIERFRlZB Ul9MSVNQICgiYXV0by1uYXJyb3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9uIiwN CisJICAgICAgIFZhdXRvX25hcnJvd19wb3N0X2NvbW1hbmRfZnVuY3Rpb24s DQorCSAgICAgICBkb2M6IC8qIEZ1bmN0aW9uIGV4ZWN1dGVkIGFmdGVyIGVh Y2ggY29tbWFuZCBpcyBleGVjdXRlZCBpbiBgYXV0by1uYXJyb3ctbW9kZScu DQorSWYgbm9uLW5pbCwgYW5kIGBhdXRvLW5hcnJvdy1tb2RlJyBpcyBlbmFi bGVkLCB0aGUgZnVuY3Rpb24gaXMNCitjYWxsZWQgYWZ0ZXIgZWFjaCBjb21t YW5kIGlzIGV4ZWN1dGVkLCBiZWZvcmUgYHBvc3QtY29tbWFuZC1ob29rJy4N CitJdCBpcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuICAqLyk7DQorICBW YXV0b19uYXJyb3dfcG9zdF9jb21tYW5kX2Z1bmN0aW9uID0gUW5pbDsNCisN CiAjaWYgMA0KICAgREVGVkFSX0xJU1AgKCJlY2hvLWFyZWEtY2xlYXItaG9v ayIsIC4uLiwNCiAJICAgICAgIGRvYzogLyogTm9ybWFsIGhvb2sgcnVuIHdo ZW4gY2xlYXJpbmcgdGhlIGVjaG8gYXJlYS4gICovKTsNCmRpZmYgLS1naXQg YS9zcmMvbGlzcC5oIGIvc3JjL2xpc3AuaA0KaW5kZXggZTRhNDliOGVmOS4u Mjg5MTQxMjk2YyAxMDA2NDQNCi0tLSBhL3NyYy9saXNwLmgNCisrKyBiL3Ny Yy9saXNwLmgNCkBAIC00NzYxLDYgKzQ3NjEsOCBAQCBmYXN0X3N0cmluZ19t YXRjaF9pZ25vcmVfY2FzZSAoTGlzcF9PYmplY3QgcmVnZXhwLCBMaXNwX09i amVjdCBzdHJpbmcpDQogCQkJCQkJICBwdHJkaWZmX3QpOw0KIGV4dGVybiBw dHJkaWZmX3QgZmFzdF9sb29raW5nX2F0IChMaXNwX09iamVjdCwgcHRyZGlm Zl90LCBwdHJkaWZmX3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHB0cmRpZmZfdCwgcHRyZGlmZl90LCBMaXNwX09iamVjdCk7DQor ZXh0ZXJuIHB0cmRpZmZfdCBmaW5kX25ld2xpbmUxIChwdHJkaWZmX3QsIHB0 cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QsDQorCQkJCXB0cmRpZmZf dCwgcHRyZGlmZl90ICosIHB0cmRpZmZfdCAqLCBib29sKTsNCiBleHRlcm4g cHRyZGlmZl90IGZpbmRfbmV3bGluZSAocHRyZGlmZl90LCBwdHJkaWZmX3Qs IHB0cmRpZmZfdCwgcHRyZGlmZl90LA0KIAkJCSAgICAgICBwdHJkaWZmX3Qs IHB0cmRpZmZfdCAqLCBwdHJkaWZmX3QgKiwgYm9vbCk7DQogZXh0ZXJuIHZv aWQgc2Nhbl9uZXdsaW5lIChwdHJkaWZmX3QsIHB0cmRpZmZfdCwgcHRyZGlm Zl90LCBwdHJkaWZmX3QsDQpkaWZmIC0tZ2l0IGEvc3JjL3NlYXJjaC5jIGIv c3JjL3NlYXJjaC5jDQppbmRleCA5ZDZiZDA3NGUxLi5iNWQ2YTQ0MmMwIDEw MDY0NA0KLS0tIGEvc3JjL3NlYXJjaC5jDQorKysgYi9zcmMvc2VhcmNoLmMN CkBAIC0zMTkyLDcgKzMxOTIsNyBAQCBERUZVTiAoInJlZ2V4cC1xdW90ZSIs IEZyZWdleHBfcXVvdGUsIFNyZWdleHBfcXVvdGUsIDEsIDEsIDAsDQogfQ0K IA0KIC8qIExpa2UgZmluZF9uZXdsaW5lLCBidXQgZG9lc24ndCB1c2UgdGhl IGNhY2hlLCBhbmQgb25seSBzZWFyY2hlcyBmb3J3YXJkLiAgKi8NCi1zdGF0 aWMgcHRyZGlmZl90DQorcHRyZGlmZl90DQogZmluZF9uZXdsaW5lMSAocHRy ZGlmZl90IHN0YXJ0LCBwdHJkaWZmX3Qgc3RhcnRfYnl0ZSwgcHRyZGlmZl90 IGVuZCwNCiAJICAgICAgIHB0cmRpZmZfdCBlbmRfYnl0ZSwgcHRyZGlmZl90 IGNvdW50LCBwdHJkaWZmX3QgKmNvdW50ZWQsDQogCSAgICAgICBwdHJkaWZm X3QgKmJ5dGVwb3MsIGJvb2wgYWxsb3dfcXVpdCkNCmRpZmYgLS1naXQgYS9z cmMveGRpc3AuYyBiL3NyYy94ZGlzcC5jDQppbmRleCA0MDg5NTI1ZTEwLi5k NzgyNjU5YjkyIDEwMDY0NA0KLS0tIGEvc3JjL3hkaXNwLmMNCisrKyBiL3Ny Yy94ZGlzcC5jDQpAQCAtMjc2NjcsNyArMjc2NjcsMTIgQEAgZGVjb2RlX21v ZGVfc3BlYyAoc3RydWN0IHdpbmRvdyAqdywgcmVnaXN0ZXIgaW50IGMsIGlu dCBmaWVsZF93aWR0aCwNCiANCiAgICAgY2FzZSAnbic6DQogICAgICAgaWYg KEJVRl9CRUdWIChiKSA+IEJVRl9CRUcgKGIpIHx8IEJVRl9aViAoYikgPCBC VUZfWiAoYikpDQotCXJldHVybiAiIE5hcnJvdyI7DQorCXsNCisJICBpZiAo RVEgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBhdXRvX25hcnJvd19fbmFycm93 aW5nKSwgaW50ZXJuICgiYXV0byIpKSkNCisJICAgIHJldHVybiAiIEF1dG8t TmFycm93IjsNCisJICBlbHNlDQorCSAgICByZXR1cm4gIiBOYXJyb3ciOw0K Kwl9DQogICAgICAgYnJlYWs7DQogDQogICAgICAgLyogRGlzcGxheSB0aGUg ImRlZ3JlZSBvZiB0cmF2ZWwiIG9mIHRoZSB3aW5kb3cgdGhyb3VnaCB0aGUg YnVmZmVyLiAgKi8NCi0tIA0KMi4zNS4xDQoNCg== --HHx0DgQAHk-- From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 07:25:01 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 11:25:01 +0000 Received: from localhost ([127.0.0.1]:49423 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8gfs-0001QC-Tz for submit@debbugs.gnu.org; Tue, 05 Jul 2022 07:25:01 -0400 Received: from quimby.gnus.org ([95.216.78.240]:42832) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8gfp-0001Pv-FU for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 07:25:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=5gp56oGbcYRxg0O5lASwtUb0PcpOoxMjgIEZIuQ4ghU=; b=MWjU47QGJvAVDQfuUnMECcdNeT KY41YOM4qwA/vxttTfcY8LmfsePn1M1Pn3kuKtdicluQoF72/MLg0A0Tgko5v4+rh0hePhE/nX6OO dsmdcoiDtQQ3WTTlmao1RFarY/CtsULJakhEoItgm1xALP0gp/HVyqVvjVExHYC9XNDc=; Received: from [84.212.220.105] (helo=joga) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8gff-000102-Ho; Tue, 05 Jul 2022 13:24:50 +0200 From: Lars Ingebrigtsen To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <38c1a31040f5546dbd3a@heytings.org> (Gregory Heytings's message of "Tue, 05 Jul 2022 10:17:37 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> X-Now-Playing: Eurythmics's _1984 (For The Love Of Big Brother)_: "Room 101" Date: Tue, 05 Jul 2022 13:24:45 +0200 Message-ID: <87czej6buq.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Gregory Heytings writes: > + When a file with extremely long lines is opened or inserted in a > +buffer, Emacs automatically enters auto-narrow mode, and the word > +@samp{Auto-Narrow} appears in the mode line. This means tha [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Gregory Heytings writes: > + When a file with extremely long lines is opened or inserted in a > +buffer, Emacs automatically enters auto-narrow mode, and the word > +@samp{Auto-Narrow} appears in the mode line. This means that Emacs > +restricts display, but not editing, to a portion of the buffer above > +and below point. All editing commands, including narrowing commands, > +remain available, and they act on the whole buffer. For example, > +@kbd{M->} moves point to the end of the buffer, and not, as would > +happen with ordinary narrowing, to the end of the portion of the > +buffer to which display is currently restricted. Oh, that's an interesting approach. I haven't tried your patch, but it sounds like it'd do the trick. > + if (!noninteractive && !NILP (Vauto_narrow_long_line_threshold)) > + { > + ptrdiff_t cur, next, found, max = 0; > + for (cur = PT; cur < PT + inserted; cur = next) > + { > + next = find_newline1 (cur, CHAR_TO_BYTE (cur), 0, -1, 1, > + &found, NULL, true); You could also use Fbuffer_line_statistics here, which I think should be faster. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 08:16:33 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 12:16:33 +0000 Received: from localhost ([127.0.0.1]:49588 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8hTk-0000uS-9B for submit@debbugs.gnu.org; Tue, 05 Jul 2022 08:16:33 -0400 Received: from heytings.org ([95.142.160.155]:53570) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8hTh-0000uI-Fu for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 08:16:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657023387; bh=dDY3k6dOflMmBliy66gyMXmPq9nqX/yD9o1xdTMnBr0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=5lkjfUuRJXeUKKGwOLoIClqX4h8TwWsUq4BnmyMyJzIqPL3q5gG55s+7HdeiTbsHU t105o91iyf+K4v5QsSf4qXkCrxAKA0gV8QiOwtIyRphbJ7KQIR+T/MelxX200PYRh5 HxHx6HBthun0GQnG3Jb5Jhp32B+FRydRkuZ0EcWBWuLvXpk/yK5qa+/Dkm0klEZChh pj8HwdspOmlWkHJzhcQdoSlrxSndewjdW9/MPjFOrNMCjcZuLSRR+HaJ5l32FcVe54 sM9Qh8jDkUFQXs6lxsHmfOrflkmuLPSwMa8n/Tpb4v0onQndf61JbKcVDdk27Ygw66 21ZZwsJStDX/A== Date: Tue, 05 Jul 2022 12:16:27 +0000 From: Gregory Heytings To: Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <87czej6buq.fsf@gnus.org> Message-ID: <38c1a31040e66d2b273e@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="KToD5uLpV2" Content-ID: <38c1a31040429842cd9a@heytings.org> X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --KToD5uLpV2 Content-Type: text/plain; charset=us-ascii; format=flowed Content-ID: <38c1a3104044c011d1dd@heytings.org> > > I haven't tried your patch, but it sounds like it'd do the trick. > It does indeed, even with a 1GB long line. > > You could also use Fbuffer_line_statistics here, which I think should be > faster. > Thanks, this simplifies the patch a bit, see attached. --KToD5uLpV2 Content-Type: text/x-diff; name=Actually-fix-the-long-lines-display-bug.patch; charset=us-ascii Content-Transfer-Encoding: base64 Content-ID: <38c1a310408859887554@heytings.org> Content-Disposition: attachment; filename=Actually-fix-the-long-lines-display-bug.patch RnJvbSBmYmRhMzg4M2UwNjdjMjc0ZDgyZTVhMWE5YjFkYzQxODljYzA1NzY3 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogR3JlZ29yeSBIZXl0 aW5ncyA8Z3JlZ29yeUBoZXl0aW5ncy5vcmc+DQpEYXRlOiBUdWUsIDUgSnVs IDIwMjIgMTI6MDc6MDcgKzAwMDANClN1YmplY3Q6IFtQQVRDSF0gQWN0dWFs bHkgZml4IHRoZSBsb25nIGxpbmVzIGRpc3BsYXkgYnVnIChidWcjNTYzOTMp Lg0KDQoqIGxpc3AvZmlsZXMuZWwgKGF1dG8tbmFycm93LW1vZGUpOiBOZXcg bWlub3IgbW9kZS4NCihhdXRvLW5hcnJvdy1wcmUtY29tbWFuZC1mdW5jdGlv biwgYXV0by1uYXJyb3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9uKToNCk5ldyBh dXhpbGlhcnkgZnVuY3Rpb25zIGZvciB0aGUgbWlub3IgbW9kZS4NCihhdXRv LW5hcnJvdy1kaXNwbGF5LWxlbmd0aCwgYXV0by1uYXJyb3ctd2lkZW4tYXV0 b21hdGljYWxseSk6IE5ldw0KZGVmY3VzdG9tcyBmb3IgdGhlIG1pbm9yIG1v ZGUuDQooYXV0by1uYXJyb3ctLXdpZGVuLWF1dG9tYXRpY2FsbHksIGF1dG8t bmFycm93LS1pc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHksDQphdXRvLW5h cnJvdy0taW5pdGlhbGl6ZWQpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGVzIGZv ciB0aGUgbWlub3IgbW9kZS4NCg0KKiBzcmMvYnVmZmVyLmggKHN0cnVjdCBi dWZmZXIpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGUgZm9yIHRoZSBtaW5vciBt b2RlLg0KDQoqIHNyYy9idWZmZXIuYyAoaW5pdF9idWZmZXJfb25jZSwgc3lt c19vZl9idWZmZXIpOiBOZXcgaW50ZXJuYWwgdmFyaWFibGUNCmZvciB0aGUg bWlub3IgbW9kZS4NCg0KKiBzcmMvZmlsZWlvLmMgKEZpbnNlcnRfZmlsZV9j b250ZW50cyk6IEF1dG9tYXRpY2FsbHkgZW50ZXIgdGhlIG1pbm9yIG1vZGUN CndoZW4gYXBwcm9wcmlhdGUuDQooc3ltc19vZl9maWxlaW8pOiBOZXcgZGVm Y3VzdG9tIGZvciB0aGUgbWlub3IgbW9kZS4NCg0KKiBzcmMva2V5Ym9hcmQu YyAoc3ltc19vZl9rZXlib2FyZCk6IE5ldyBob29rIGZ1bmN0aW9ucyBmb3Ig dGhlIG1pbm9yIG1vZGUuDQooY29tbWFuZF9sb29wXzEpOiBFeGVjdXRlIHRo ZSBob29rIGZ1bmN0aW9ucy4NCg0KKiBzcmMveGRpc3AuYyAoZGVjb2RlX21v ZGVfc3BlYyk6IEluZGljYXRlIHdoZW4gdGhlIG1pbm9yIG1vZGUgaXMgYWN0 aXZlDQppbiB0aGUgbW9kZWxpbmUuDQoNCiogbGlzcC9pc2VhcmNoLmVsIChp c2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHkpOiBOZXcgZGVmY3VzdG9tLg0K KGlzZWFyY2gtc2VhcmNoKTogVXNlIHRoZSBuZXcgZGVmY3VzdG9tLg0KDQoq IGxpc3AvYmluZGluZ3MuZWwgKG1vZGUtbGluZS1tb2Rlcyk6IERvIG5vdCBw cm9wZXJ0aXplIHRoZSBpbmRpY2F0aW9uDQppbiB0aGUgbW9kZWxpbmUgd2hl biB0aGUgbmV3IG1pbm9yIG1vZGUgaXMgYWN0aXZlLg0KDQoqIGV0Yy9ORVdT OiBBbm5vdW5jZSB0aGUgbmV3IG1pbm9yIG1vZGUsIGFuZCByZW1vdmUgdGhl IHVub2Jzb2xldGlvbg0KaW5kaWNhdGlvbiBmb3IgJ2xvbmdsaW5lcy1tb2Rl Jy4NCg0KKiBsaXNwL2xvbmdsaW5lcy5lbDogUmVvYnNvbGV0ZSBsb25nbGlu ZXMtbW9kZS4NCg0KKiBkb2MvZW1hY3MvZGlzcGxheS50ZXhpIChBdXRvLU5h cnJvd2luZyk6IE5ldyBzZWN0aW9uLCBkZXNjcmliaW5nIHRoZSBuZXcNCm1p bm9yIG1vZGUuDQooRGlzcGxheSk6IEVudHJ5IGZvciB0aGUgbmV3IHNlY3Rp b24uDQoNCiogZG9jL2VtYWNzL3Ryb3VibGUudGV4aSAoTG9uZyBMaW5lcyk6 IFJlbW92ZSB0aGUgc2VjdGlvbi4NCihMb3NzYWdlKTogUmVtb3ZlIHRoZSBl bnRyeSBmb3IgdGhlIExvbmcgTGluZXMgc2VjdGlvbi4NCg0KKiBkb2MvZW1h Y3MvZW1hY3MudGV4aSAoVG9wKTogUmVtb3ZlIHRoZSBlbnRyeSBmb3IgdGhl IExvbmcgTGluZXMgc2VjdGlvbi4NCi0tLQ0KIGRvYy9lbWFjcy9kaXNwbGF5 LnRleGkgICAgICAgICAgIHwgMjUgKysrKysrKysrDQogZG9jL2VtYWNzL2Vt YWNzLnRleGkgICAgICAgICAgICAgfCAgMSAtDQogZG9jL2VtYWNzL3Ryb3Vi bGUudGV4aSAgICAgICAgICAgfCA1OSAtLS0tLS0tLS0tLS0tLS0tLS0tLQ0K IGV0Yy9ORVdTICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUgKysrKy0t DQogbGlzcC9iaW5kaW5ncy5lbCAgICAgICAgICAgICAgICAgfCAxMiArKyst LQ0KIGxpc3AvZmlsZXMuZWwgICAgICAgICAgICAgICAgICAgIHwgOTIgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiBsaXNwL2lzZWFyY2gu ZWwgICAgICAgICAgICAgICAgICB8IDMyICsrKysrKystLS0tDQogbGlzcC97 ID0+IG9ic29sZXRlfS9sb25nbGluZXMuZWwgfCAgMSArDQogc3JjL2J1ZmZl ci5jICAgICAgICAgICAgICAgICAgICAgfCAgNSArKw0KIHNyYy9idWZmZXIu aCAgICAgICAgICAgICAgICAgICAgIHwgIDMgKysNCiBzcmMvZmlsZWlvLmMg ICAgICAgICAgICAgICAgICAgICB8IDIyICsrKysrKysrDQogc3JjL2tleWJv YXJkLmMgICAgICAgICAgICAgICAgICAgfCAyOCArKysrKysrKysrDQogc3Jj L3hkaXNwLmMgICAgICAgICAgICAgICAgICAgICAgfCAgNyArKy0NCiAxMyBm aWxlcyBjaGFuZ2VkLCAyMjMgaW5zZXJ0aW9ucygrKSwgNzkgZGVsZXRpb25z KC0pDQogcmVuYW1lIGxpc3AveyA9PiBvYnNvbGV0ZX0vbG9uZ2xpbmVzLmVs ICg5OSUpDQoNCmRpZmYgLS1naXQgYS9kb2MvZW1hY3MvZGlzcGxheS50ZXhp IGIvZG9jL2VtYWNzL2Rpc3BsYXkudGV4aQ0KaW5kZXggY2FkYWM3ZTQ1My4u OWZlOTUzM2U4OCAxMDA2NDQNCi0tLSBhL2RvYy9lbWFjcy9kaXNwbGF5LnRl eGkNCisrKyBiL2RvYy9lbWFjcy9kaXNwbGF5LnRleGkNCkBAIC0xOSw2ICsx OSw4IEBAIERpc3BsYXkNCiAqIEhvcml6b250YWwgU2Nyb2xsaW5nOjogICBN b3ZpbmcgdGV4dCBsZWZ0IGFuZCByaWdodCBpbiBhIHdpbmRvdy4NCiAqIE5h cnJvd2luZzo6ICAgICAgICAgICAgICBSZXN0cmljdGluZyBkaXNwbGF5IGFu ZCBlZGl0aW5nIHRvIGEgcG9ydGlvbg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2YgdGhlIGJ1ZmZlci4NCisqIEF1dG8tTmFycm93aW5nOjog ICAgICAgICBBdXRvbWF0aWNhbGx5IHJlc3RyaWN0IGRpc3BsYXkgdG8gYSBw b3J0aW9uIG9mDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUg YnVmZmVyLg0KICogVmlldyBNb2RlOjogICAgICAgICAgICAgIFZpZXdpbmcg cmVhZC1vbmx5IGJ1ZmZlcnMuDQogKiBGb2xsb3cgTW9kZTo6ICAgICAgICAg ICAgRm9sbG93IG1vZGUgbGV0cyB0d28gd2luZG93cyBzY3JvbGwgYXMgb25l Lg0KICogRmFjZXM6OiAgICAgICAgICAgICAgICAgIEhvdyB0byBjaGFuZ2Ug dGhlIGRpc3BsYXkgc3R5bGUgdXNpbmcgZmFjZXMuDQpAQCAtNDY3LDYgKzQ2 OSwyOSBAQCBOYXJyb3dpbmcNCiBpZiB5b3UgZW5hYmxlIHRoZSBjb21tYW5k LCBjb25maXJtYXRpb24gd2lsbCBubyBsb25nZXIgYmUgcmVxdWlyZWQgZm9y DQogaXQuICBAeHJlZntEaXNhYmxpbmd9Lg0KIA0KK0Bub2RlIEF1dG8tTmFy cm93aW5nDQorQGZpbmRleCBhdXRvLW5hcnJvdy1tb2RlDQorQHZpbmRleCBh dXRvLW5hcnJvdy1sb25nLWxpbmUtdGhyZXNob2xkDQorQHZpbmRleCBhdXRv LW5hcnJvdy1kaXNwbGF5LWxlbmd0aA0KK0B2aW5kZXggYXV0by1uYXJyb3ct d2lkZW4tYXV0b21hdGljYWxseQ0KKw0KKyAgV2hlbiBhIGZpbGUgd2l0aCBl eHRyZW1lbHkgbG9uZyBsaW5lcyBpcyBvcGVuZWQgb3IgaW5zZXJ0ZWQgaW4g YQ0KK2J1ZmZlciwgRW1hY3MgYXV0b21hdGljYWxseSBlbnRlcnMgYXV0by1u YXJyb3cgbW9kZSwgYW5kIHRoZSB3b3JkDQorQHNhbXB7QXV0by1OYXJyb3d9 IGFwcGVhcnMgaW4gdGhlIG1vZGUgbGluZS4gIFRoaXMgbWVhbnMgdGhhdCBF bWFjcw0KK3Jlc3RyaWN0cyBkaXNwbGF5LCBidXQgbm90IGVkaXRpbmcsIHRv IGEgcG9ydGlvbiBvZiB0aGUgYnVmZmVyIGFib3ZlDQorYW5kIGJlbG93IHBv aW50LiAgQWxsIGVkaXRpbmcgY29tbWFuZHMsIGluY2x1ZGluZyBuYXJyb3dp bmcgY29tbWFuZHMsDQorcmVtYWluIGF2YWlsYWJsZSwgYW5kIHRoZXkgYWN0 IG9uIHRoZSB3aG9sZSBidWZmZXIuICBGb3IgZXhhbXBsZSwNCitAa2Jke00t Pn0gbW92ZXMgcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBhbmQg bm90LCBhcyB3b3VsZA0KK2hhcHBlbiB3aXRoIG9yZGluYXJ5IG5hcnJvd2lu ZywgdG8gdGhlIGVuZCBvZiB0aGUgcG9ydGlvbiBvZiB0aGUNCitidWZmZXIg dG8gd2hpY2ggZGlzcGxheSBpcyBjdXJyZW50bHkgcmVzdHJpY3RlZC4NCisN CisgIFRoZSBiZWhhdmlvciBvZiBhdXRvLW5hcnJvdyBtb2RlIGlzIGNvbnRy b2xsZWQgYnkgdGhyZWUgdmFyaWFibGVzOg0KK0Bjb2Rle2F1dG8tbmFycm93 LWxvbmctbGluZS10aHJlc2hvbGR9IGlzIHRoZSBsaW5lIGxlbmd0aCBhYm92 ZSB3aGljaA0KK2F1dG8tbmFycm93IG1vdmUgaXMgZW50ZXJlZCwgQGNvZGV7 YXV0by1uYXJyb3ctZGlzcGxheS1sZW5ndGh9IGlzIHRoZQ0KK251bWJlciBv ZiBjaGFyYWN0ZXJzIHRvIHdoaWNoIGRpc3BsYXkgaXMgcmVzdHJpY3RlZCwg YW5kDQorQGNvZGV7YXV0by1uYXJyb3ctd2lkZW4tYXV0b21hdGljYWxseX0g aXMgYSBsaXN0IG9mIGNvbW1hbmRzIGZvciB3aGljaA0KK2Rpc3BsYXkgaXMg d2lkZW5lZCBiZWZvcmUgdGhleSBhcmUgZXhlY3V0ZWQuDQorDQogQG5vZGUg VmlldyBNb2RlDQogQHNlY3Rpb24gVmlldyBNb2RlDQogQGNpbmRleCBWaWV3 IG1vZGUNCmRpZmYgLS1naXQgYS9kb2MvZW1hY3MvZW1hY3MudGV4aSBiL2Rv Yy9lbWFjcy9lbWFjcy50ZXhpDQppbmRleCA1ZTcyNjk5YmJlLi5iNDNjOTY2 Zjg3IDEwMDY0NA0KLS0tIGEvZG9jL2VtYWNzL2VtYWNzLnRleGkNCisrKyBi L2RvYy9lbWFjcy9lbWFjcy50ZXhpDQpAQCAtMTE5MCw3ICsxMTkwLDYgQEAg VG9wDQogKiBDcmFzaGluZzo6ICAgICAgICAgICAgV2hhdCBFbWFjcyBkb2Vz IHdoZW4gaXQgY3Jhc2hlcy4NCiAqIEFmdGVyIGEgQ3Jhc2g6OiAgICAgICBS ZWNvdmVyaW5nIGVkaXRpbmcgaW4gYW4gRW1hY3Mgc2Vzc2lvbiB0aGF0IGNy YXNoZWQuDQogKiBFbWVyZ2VuY3kgRXNjYXBlOjogICAgV2hhdCB0byBkbyBp ZiBFbWFjcyBzdG9wcyByZXNwb25kaW5nLg0KLSogTG9uZyBMaW5lczo6ICAg ICAgICAgIE1pdGlnYXRpbmcgc2xvd25lc3MgZHVlIHRvIGV4dHJlbWVseSBs b25nIGxpbmVzLg0KICogREVMIERvZXMgTm90IERlbGV0ZTo6IFdoYXQgdG8g ZG8gaWYgQGtleXtERUx9IGRvZXNuJ3QgZGVsZXRlLg0KIA0KIFJlcG9ydGlu ZyBCdWdzDQpkaWZmIC0tZ2l0IGEvZG9jL2VtYWNzL3Ryb3VibGUudGV4aSBi L2RvYy9lbWFjcy90cm91YmxlLnRleGkNCmluZGV4IGYwNmI5Mzc1OWQuLjg4 N2U1YzYxNzAgMTAwNjQ0DQotLS0gYS9kb2MvZW1hY3MvdHJvdWJsZS50ZXhp DQorKysgYi9kb2MvZW1hY3MvdHJvdWJsZS50ZXhpDQpAQCAtMTU4LDcgKzE1 OCw2IEBAIExvc3NhZ2UNCiAqIENyYXNoaW5nOjogICAgICAgICAgICAgIFdo YXQgRW1hY3MgZG9lcyB3aGVuIGl0IGNyYXNoZXMuDQogKiBBZnRlciBhIENy YXNoOjogICAgICAgICBSZWNvdmVyaW5nIGVkaXRpbmcgaW4gYW4gRW1hY3Mg c2Vzc2lvbiB0aGF0IGNyYXNoZWQuDQogKiBFbWVyZ2VuY3kgRXNjYXBlOjog ICAgICBXaGF0IHRvIGRvIGlmIEVtYWNzIHN0b3BzIHJlc3BvbmRpbmcuDQot KiBMb25nIExpbmVzOjogICAgICAgICAgICBNaXRpZ2F0aW5nIHNsb3duZXNz IGR1ZSB0byBleHRyZW1lbHkgbG9uZyBsaW5lcy4NCiAqIERFTCBEb2VzIE5v dCBEZWxldGU6OiAgIFdoYXQgdG8gZG8gaWYgQGtleXtERUx9IGRvZXNuJ3Qg ZGVsZXRlLg0KIEBlbmQgbWVudQ0KIA0KQEAgLTQzMyw2NCArNDMyLDYgQEAg RW1lcmdlbmN5IEVzY2FwZQ0KIGVtZXJnZW5jeSBlc2NhcGUtLS1idXQgdGhl cmUgYXJlIGNhc2VzIHdoZXJlIGl0IHdvbid0IHdvcmssIHdoZW4gYQ0KIHN5 c3RlbSBjYWxsIGhhbmdzIG9yIHdoZW4gRW1hY3MgaXMgc3R1Y2sgaW4gYSB0 aWdodCBsb29wIGluIEMgY29kZS4NCiANCi1Abm9kZSBMb25nIExpbmVzDQot QHN1YnNlY3Rpb24gTG9uZyBMaW5lcw0KLUBjaW5kZXggbG9uZyBsaW5lcw0K LQ0KLSAgRm9yIGEgdmFyaWV0eSBvZiByZWFzb25zIChzb21lIG9mIHdoaWNo IGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgRW1hY3MNCi1yZWRpc3BsYXkgY29k ZSBhbmQgdGhlIGNvbXBsZXggcmFuZ2Ugb2YgcG9zc2liaWxpdGllcyBpdCBo YW5kbGVzOw0KLW90aGVycyBvZiB3aGljaCBhcmUgZHVlIHRvIG1vZGVzIGFu ZCBmZWF0dXJlcyB3aGljaCBkbyBub3Qgc2NhbGUgd2VsbA0KLWluIHVudXN1 YWwgY2lyY3Vtc3RhbmNlcyksIEVtYWNzIGNhbiBwZXJmb3JtIHBvb3JseSB3 aGVuIGV4dHJlbWVseQ0KLWxvbmcgbGluZXMgYXJlIHByZXNlbnQgKHdoZXJl IGBgZXh0cmVtZWx5IGxvbmcnJyB1c3VhbGx5IG1lYW5zIGF0DQotbGVhc3Qg bWFueSB0aG91c2FuZHMgb2YgY2hhcmFjdGVycykuDQotDQotQGNpbmRleCBA Y29kZXtzby1sb25nfSBtb2RlDQotQGZpbmRleCBnbG9iYWwtc28tbG9uZy1t b2RlDQotQHZpbmRleCBzby1sb25nLWFjdGlvbg0KLSAgQSBwYXJ0aWN1bGFy IHByb2JsZW0gaXMgdGhhdCBFbWFjcyBtYXkgYGBoYW5nJycgZm9yIGEgbG9u ZyB0aW1lIGF0DQotdGhlIHBvaW50IG9mIHZpc2l0aW5nIGEgZmlsZSB3aXRo IGV4dHJlbWVseSBsb25nIGxpbmVzLiAgVGhpcyBjYW4gYmUNCi1taXRpZ2F0 ZWQgYnkgZW5hYmxpbmcgdGhlIEBmaWxle3NvLWxvbmd9IGxpYnJhcnksIHdo aWNoIGRldGVjdHMgd2hlbiBhDQotdmlzaXRlZCBmaWxlIGNvbnRhaW5zIGFi bm9ybWFsbHkgbG9uZyBsaW5lcywgYW5kIHRha2VzIHN0ZXBzIHRvDQotZGlz YWJsZSBmZWF0dXJlcyB3aGljaCBhcmUgbGlhYmxlIHRvIGNhdXNlIHNsb3du ZXNzIGluIHRoYXQgc2l0dWF0aW9uLg0KLVRvIGVuYWJsZSB0aGlzIGxpYnJh cnksIHR5cGUgQGtiZHtNLXggZ2xvYmFsLXNvLWxvbmctbW9kZSBAa2V5e1JF VH19LA0KLW9yIHR1cm4gb24gdGhlIEBjb2Rle2dsb2JhbC1zby1sb25nLW1v ZGV9IGluIHlvdXIgaW5pdCBmaWxlDQotKEBweHJlZntJbml0IEZpbGV9KSwg b3IgY3VzdG9taXplIHRoZSBAY29kZXtnbG9iYWwtc28tbG9uZy1tb2RlfQ0K LW9wdGlvbi4gIFlvdSBjYW4gdGFpbG9yIHRoaXMgbW9kZSdzIG9wZXJhdGlv biBieSBjdXN0b21pemluZyB0aGUNCi12YXJpYWJsZSBAY29kZXtzby1sb25n LWFjdGlvbn0uDQotDQotICBUaGUgQGZpbGV7c28tbG9uZ30gbGlicmFyeSBj YW4gYWxzbyBzaWduaWZpY2FudGx5IGltcHJvdmUNCi1wZXJmb3JtYW5jZSB3 aGVuIG1vdmluZyBhbmQgZWRpdGluZyBpbiBhIGJ1ZmZlciB3aXRoIGxvbmcg bGluZXMuDQotUGVyZm9ybWFuY2UgaXMgc3RpbGwgbGlrZWx5IHRvIGRlZ3Jh ZGUgYXMgeW91IGdldCBkZWVwZXIgaW50byB0aGUgbG9uZw0KLWxpbmVzLCBi dXQgdGhlIGltcHJvdmVtZW50cyBmcm9tIHVzaW5nIHRoaXMgbGlicmFyeSBj YW4gbmV2ZXJ0aGVsZXNzDQotYmUgc3Vic3RhbnRpYWwuDQotDQotQGZpbmRl eCBzby1sb25nLWNvbW1lbnRhcnkNCi0gIFVzZSBAa2Jke00teCBzby1sb25n LWNvbW1lbnRhcnl9IHRvIHZpZXcgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRo aXMNCi1saWJyYXJ5IGFuZCBsZWFybiBtb3JlIGFib3V0IGhvdyB0byBlbmFi bGUgYW5kIGNvbmZpZ3VyZSBpdC4NCi0NCi1AdmluZGV4IG1heC1yZWRpc3Bs YXktdGlja3MNCi0gIElmIGV2ZW4gQGNvZGV7c28tbG9uZy1tb2RlfSBkb2Vz bid0IGhlbHAgbWFraW5nIEVtYWNzIHJlc3BvbnNpdmUNCi1lbm91Z2gsIG9y IGlmIHlvdSdkIHJhdGhlciBub3QgZGlzYWJsZSB0aGUgZGlzcGxheS1yZWxh dGVkIGZlYXR1cmVzDQotdGhhdCBAY29kZXtzby1sb25nLW1vZGV9IHR1cm5z IG9mZiwgeW91IGNhbiBpbnN0ZWFkIGN1c3RvbWl6ZSB0aGUNCi12YXJpYWJs ZSBAY29kZXttYXgtcmVkaXNwbGF5LXRpY2tzfSB0byBhIG5vbi16ZXJvIHZh bHVlLiAgVGhlbiBFbWFjcw0KLXdpbGwgYWJvcnQgcmVkaXNwbGF5IG9mIGEg d2luZG93IGFuZCBjb21tYW5kcywgbGlrZSBAa2Jke0Mtbn0gYW5kDQotQGti ZHtNLXZ9LCB3aGljaCB1c2UgdGhlIGRpc3BsYXkgY29kZSB0byBkbyB0aGVp ciBqb2IsIGlmIHByb2Nlc3NpbmcgYQ0KLXdpbmRvdyBuZWVkcyBtb3JlIGxv dy1sZXZlbCBkaXNwbGF5IG9wZXJhdGlvbnMgdGhhbiB0aGUgdmFsdWUgb2Yg dGhpcw0KLXZhcmlhYmxlLiAgVGhlIGRpc3BsYXkgb2YgdGhlIG9mZmVuZGlu ZyB3aW5kb3cgd2lsbCB0aGVuIHJlbWFpbg0KLW91dGRhdGVkLCBhbmQgcG9z c2libHkgaW5jb21wbGV0ZSwgb24gdGhlIHNjcmVlbiwgYnV0IEVtYWNzIHNo b3VsZA0KLW90aGVyd2lzZSBiZSByZXNwb25zaXZlLCBhbmQgeW91IGNvdWxk IHRoZW4gc3dpdGNoIHRvIGFub3RoZXIgYnVmZmVyLA0KLW9yIGtpbGwgdGhl IHByb2JsZW1hdGljIGJ1ZmZlciwgb3IgdHVybiBvbiBAY29kZXtzby1sb25n LW1vZGV9IG9yDQotQGNvZGV7c28tbG9uZy1taW5vci1tb2RlfSBpbiB0aGF0 IGJ1ZmZlci4gIFdoZW4gdGhlIGRpc3BsYXkgb2YgYQ0KLXdpbmRvdyBpcyBh Ym9ydGVkIGR1ZSB0byB0aGlzIHJlYXNvbiwgdGhlIGJ1ZmZlciBzaG93biBp biB0aGF0IHdpbmRvdw0KLXdpbGwgbm90IGhhdmUgYW55IG9mIGl0cyB3aW5k b3dzIHJlZGlzcGxheWVkIHVudGlsIHRoZSBidWZmZXIgaXMNCi1tb2RpZmll ZCBvciB1bnRpbCB5b3UgdHlwZSBAa2Jke0MtbH0gKEBweHJlZntSZWNlbnRl cmluZ30pIGluIG9uZSBvZg0KLXRoYXQgYnVmZmVyJ3Mgd2luZG93cy4NCi0N Ci0gIElmIHlvdSBkZWNpZGUgdG8gY3VzdG9taXplIHRoaXMgdmFyaWFibGUg dG8gYSBub24temVybyB2YWx1ZSwgd2UNCi1yZWNvbW1lbmQgdG8gdXNlIGEg dmFsdWUgYmV0d2VlbiAxMDAsMDAwIGFuZCAxLDAwMCwwMDAsIGRlcGVuZGlu ZyBvbg0KLXlvdXIgcGF0aWVuY2UgYW5kIHRoZSBzcGVlZCBvZiB5b3VyIHN5 c3RlbS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzDQotemVybywgd2hpY2ggZGlz YWJsZXMgdGhpcyBmZWF0dXJlLg0KLQ0KIEBub2RlIERFTCBEb2VzIE5vdCBE ZWxldGUNCiBAc3Vic2VjdGlvbiBJZiBAa2V5e0RFTH0gRmFpbHMgdG8gRGVs ZXRlDQogQGNpbmRleCBAa2V5e0RFTH0gdnMgQGtleXtCQUNLU1BBQ0V9DQpk aWZmIC0tZ2l0IGEvZXRjL05FV1MgYi9ldGMvTkVXUw0KaW5kZXggNzk2NzE5 MGM2ZS4uMzBjNzFlN2YwYyAxMDA2NDQNCi0tLSBhL2V0Yy9ORVdTDQorKysg Yi9ldGMvTkVXUw0KQEAgLTMyNCw5ICszMjQsNiBAQCBzdGFydHVwLiAgUHJl dmlvdXNseSwgdGhlc2UgZnVuY3Rpb25zIGlnbm9yZWQNCiAMDQogKiBDaGFu Z2VzIGluIEVtYWNzIDI5LjENCiANCi0tLS0NCi0qKiAnbG9uZ2xpbmVzLW1v ZGUnIGlzIG5vIGxvbmdlciBvYnNvbGV0ZS4NCi0NCiArKysNCiAqKiBOZXcg Y29tbWFuZCB0byBjaGFuZ2UgdGhlIGZvbnQgc2l6ZSBnbG9iYWxseS4NCiBU byBpbmNyZWFzZSB0aGUgZm9udCBzaXplLCB0eXBlICdDLXggQy1NLSsnIG9y ICdDLXggQy1NLT0nOyB0bw0KQEAgLTkwMSw2ICs4OTgsMTggQEAgRm9ybWVy bHkgaXQgaW52b2tlZCAnanVzdC1vbmUtc3BhY2UnLiAgVGhlIGFjdGlvbnMg cGVyZm9ybWVkIGJ5DQogJ2N5Y2xlLXNwYWNpbmcnIGFuZCB0aGVpciBvcmRl ciBjYW4gbm93IGJlIGN1c3RvbWl6ZWQgdmlhIHRoZSB1c2VyDQogb3B0aW9u ICdjeWNsZS1zcGFjaW5nLWFjdGlvbnMnLg0KIA0KKysrKw0KKyoqIEVtYWNz IGlzIG5vdyBjYXBhYmxlIG9mIGVkaXRpbmcgZmlsZXMgd2l0aCBhcmJpdGFy aWx5IGxvbmcgbGluZXMuDQorV2hlbiBhIGZpbGUgd2l0aCBsb25nIGxpbmVz IGlzIG9wZW5lZCBvciBpbnNlcnRlZCBpbiBhIGJ1ZmZlciwgRW1hY3MNCith dXRvbWF0aWNhbGx5IGVudGVycyBhdXRvLW5hcnJvdyBtb2RlLiAgVGhpcyBt ZWFucyB0aGF0IEVtYWNzDQorcmVzdHJpY3RzIGRpc3BsYXksIGJ1dCBub3Qg ZWRpdGluZywgdG8gYSBwb3J0aW9uIG9mIHRoZSBidWZmZXIgYWJvdmUNCith bmQgYmVsb3cgcG9pbnQuICBBbGwgZWRpdGluZyBjb21tYW5kcywgaW5jbHVk aW5nIG5hcnJvd2luZyBjb21tYW5kcywNCityZW1haW4gYXZhaWxhYmxlLCBh bmQgdGhleSBhY3Qgb24gdGhlIHdob2xlIGJ1ZmZlci4gIFRoZSBiZWhhdmlv ciBvZg0KK3RoYXQgbW9kZSBpcyBjb250cm9sbGVkIGJ5IHRocmVlIHZhcmlh YmxlczoNCithdXRvLW5hcnJvdy1sb25nLWxpbmUtdGhyZXNob2xkLCBhdXRv LW5hcnJvdy1kaXNwbGF5LWxlbmd0aCBhbmQNCithdXRvLW5hcnJvdy13aWRl bi1hdXRvbWF0aWNhbGx5LiAgVG8gZGlzYWJsZSB0aGF0IGZlYXR1cmUsIHNl dA0KK2F1dG8tbmFycm93LWxvbmctbGluZS10aHJlc2hvbGQgdG8gbmlsIGlu IHlvdXIgaW5pdCBmaWxlLg0KKw0KIC0tLQ0KICoqICd6YXAtdG8tY2hhcicg YW5kICd6YXAtdXAtdG8tY2hhcicgYXJlIGNhc2Utc2Vuc2l0aXZlIGZvciB1 cHBlci1jYXNlIGNoYXJzLg0KIFRoZXNlIGNvbW1hbmRzIG5vdyBiZWhhdmUg YXMgY2FzZS1zZW5zaXRpdmUgZm9yIGludGVyYWN0aXZlIGNhbGxzIHdoZW4N CmRpZmYgLS1naXQgYS9saXNwL2JpbmRpbmdzLmVsIGIvbGlzcC9iaW5kaW5n cy5lbA0KaW5kZXggMGNmMTgzNGE0Zi4uZmE1MDQwNzc2ZCAxMDA2NDQNCi0t LSBhL2xpc3AvYmluZGluZ3MuZWwNCisrKyBiL2xpc3AvYmluZGluZ3MuZWwN CkBAIC00MDAsMTAgKzQwMCwxNCBAQCBtb2RlLWxpbmUtbW9kZXMNCiBtb3Vz ZS0yOiBTaG93IGhlbHAgZm9yIG1pbm9yIG1vZGVcblwNCiBtb3VzZS0zOiBU b2dnbGUgbWlub3IgbW9kZXMiDQogCQkJbG9jYWwtbWFwICxtb2RlLWxpbmUt bWlub3ItbW9kZS1rZXltYXApDQotCSAgKHByb3BlcnRpemUgIiVuIiAnaGVs cC1lY2hvICJtb3VzZS0yOiBSZW1vdmUgbmFycm93aW5nIGZyb20gYnVmZmVy Ig0KLQkJICAgICAgJ21vdXNlLWZhY2UgJ21vZGUtbGluZS1oaWdobGlnaHQN Ci0JCSAgICAgICdsb2NhbC1tYXAgKG1ha2UtbW9kZS1saW5lLW1vdXNlLW1h cA0KLQkJCQkgICdtb3VzZS0yICMnbW9kZS1saW5lLXdpZGVuKSkNCisgICAg ICAgICAgJyg6ZXZhbA0KKyAgICAgICAgICAgIChpZiAobm90IChlcSBhdXRv LW5hcnJvdy0tbmFycm93aW5nICdhdXRvKSkNCisgICAgICAgICAgICAgICAg KHByb3BlcnRpemUgIiVuIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnaGVscC1lY2hvICJtb3VzZS0yOiBSZW1vdmUgbmFycm93aW5nIGZyb20g YnVmZmVyIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW91c2Ut ZmFjZSAnbW9kZS1saW5lLWhpZ2hsaWdodA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnbG9jYWwtbWFwIChtYWtlLW1vZGUtbGluZS1tb3VzZS1t YXANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J21vdXNlLTIgIydtb2RlLWxpbmUtd2lkZW4pKQ0KKyAgICAgICAgICAgICAg IiVuIikpDQogCSAgIikiDQogCSAgKHByb3BlcnRpemUgIiVdIiAnaGVscC1l Y2hvIHJlY3Vyc2l2ZS1lZGl0LWhlbHAtZWNobykNCiAJICAiICIpKQ0KZGlm ZiAtLWdpdCBhL2xpc3AvZmlsZXMuZWwgYi9saXNwL2ZpbGVzLmVsDQppbmRl eCA4ODEyMTc1MDE0Li5hYmRlZWE3YTgwIDEwMDY0NA0KLS0tIGEvbGlzcC9m aWxlcy5lbA0KKysrIGIvbGlzcC9maWxlcy5lbA0KQEAgLTI2NDgsNiArMjY0 OCw5OCBAQCBmaW5kLWZpbGUtbGl0ZXJhbGx5DQogICAJICAoY29uZmlybS1u b25leGlzdGVudC1maWxlLW9yLWJ1ZmZlcikpKSkNCiAgIChzd2l0Y2gtdG8t YnVmZmVyIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZW5hbWUgbmlsIHQpKSkN CiAMDQorKGRlZmN1c3RvbSBhdXRvLW5hcnJvdy1kaXNwbGF5LWxlbmd0aCAz MDAwMA0KKyAgIk51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHdoaWNoIGRpc3Bs YXkgaXMgcmVzdHJpY3RlZCBpbiBgYXV0by1uYXJyb3ctbW9kZScuIg0KKyAg Omdyb3VwICdmaWxlcw0KKyAgOmdyb3VwICdmaW5kLWZpbGUNCisgIDp2ZXJz aW9uICIyOS4xIg0KKyAgOnR5cGUgJ2ludGVnZXIpDQorDQorKGRlZmN1c3Rv bSBhdXRvLW5hcnJvdy13aWRlbi1hdXRvbWF0aWNhbGx5DQorICAnKCBtb3Zl LWJlZ2lubmluZy1vZi1saW5lIG1vdmUtZW5kLW9mLWxpbmUgYmFja3dhcmQt c2VudGVuY2UgZm9yd2FyZC1zZW50ZW5jZQ0KKyAgICAgYmFja3dhcmQtc2V4 cCBmb3J3YXJkLXNleHAgYmVnaW5uaW5nLW9mLWRlZnVuIGVuZC1vZi1kZWZ1 bg0KKyAgICAgYmVnaW5uaW5nLW9mLWJ1ZmZlciBlbmQtb2YtYnVmZmVyIGdv dG8tY2hhciBnb3RvLWxpbmUNCisgICAgIG1hcmstc2V4cCBtYXJrLWRlZnVu IG1hcmstcGFyYWdyYXBoIG1hcmstd2hvbGUtYnVmZmVyIG1hcmstcGFnZQ0K KyAgICAgZXhjaGFuZ2UtcG9pbnQtYW5kLW1hcmsgcG9wLWdsb2JhbC1tYXJr IHNldC1tYXJrLWNvbW1hbmQganVtcC10by1yZWdpc3Rlcg0KKyAgICAgYm9v a21hcmstanVtcCkNCisgICJDb21tYW5kcyBmb3Igd2hpY2ggZGlzcGxheSBp cyBhdXRvbWF0aWNhbGx5IHdpZGVuZWQgaW4gYGF1dG8tbmFycm93LW1vZGUn LiINCisgIDpncm91cCAnZmlsZXMNCisgIDpncm91cCAnZmluZC1maWxlDQor ICA6dmVyc2lvbiAiMjkuMSINCisgIDp0eXBlICcocmVwZWF0IGZ1bmN0aW9u KSkNCisNCisoZGVmdmFyLWxvY2FsIGF1dG8tbmFycm93LS13aWRlbi1hdXRv bWF0aWNhbGx5IG5pbA0KKyAgIkludGVybmFsIHZhcmlhYmxlIHVzZWQgYnkg YGF1dG8tbmFycm93LW1vZGUnLiIpDQorDQorKGRlZnZhci1sb2NhbCBhdXRv LW5hcnJvdy0taXNlYXJjaC13aWRlbi1hdXRvbWF0aWNhbGx5IG5pbA0KKyAg IkludGVybmFsIHZhcmlhYmxlIHVzZWQgYnkgYGF1dG8tbmFycm93LW1vZGUn LiIpDQorDQorKGRlZnZhci1sb2NhbCBhdXRvLW5hcnJvdy0taW5pdGlhbGl6 ZWQgbmlsDQorICAiSW50ZXJuYWwgdmFyaWFibGUgdXNlZCBieSBgYXV0by1u YXJyb3ctbW9kZScuIikNCisNCisoZGVmdW4gYXV0by1uYXJyb3ctcHJlLWNv bW1hbmQtZnVuY3Rpb24gKCkNCisgICJDb25kaXRpb25hbGx5IHdpZGVuIGRp c3BsYXkgd2hlbiBgYXV0by1uYXJyb3ctbW9kZScgaXMgaW4gZWZmZWN0LiIN CisgICh3aGVuIGF1dG8tbmFycm93LW1vZGUNCisgICAgKHVubGVzcyBhdXRv LW5hcnJvdy0taW5pdGlhbGl6ZWQNCisgICAgICAoc2V0cSBhdXRvLW5hcnJv dy0td2lkZW4tYXV0b21hdGljYWxseSB3aWRlbi1hdXRvbWF0aWNhbGx5DQor ICAgICAgICAgICAgYXV0by1uYXJyb3ctLWlzZWFyY2gtd2lkZW4tYXV0b21h dGljYWxseSBpc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHkNCisgICAgICAg ICAgICBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdhdXRvDQorICAgICAgICAg ICAgYXV0by1uYXJyb3ctLWluaXRpYWxpemVkIHQpKQ0KKyAgICAoc2V0cS1s b2NhbCB3aWRlbi1hdXRvbWF0aWNhbGx5IHQNCisgICAgICAgICAgICAgICAg aXNlYXJjaC13aWRlbi1hdXRvbWF0aWNhbGx5IHQpDQorICAgIChpZiAobWVt cSB0aGlzLWNvbW1hbmQgJyhuYXJyb3ctdG8tcmVnaW9uIG5hcnJvdy10by1k ZWZ1biBuYXJyb3ctdG8tcGFnZSkpDQorICAgICAgICAoc2V0cSBhdXRvLW5h cnJvdy0tbmFycm93aW5nICdleHBsaWNpdA0KKyAgICAgICAgICAgICAgd2lk ZW4tYXV0b21hdGljYWxseSBhdXRvLW5hcnJvdy0td2lkZW4tYXV0b21hdGlj YWxseQ0KKyAgICAgICAgICAgICAgaXNlYXJjaC13aWRlbi1hdXRvbWF0aWNh bGx5IGF1dG8tbmFycm93LS1pc2VhcmNoLXdpZGVuLWF1dG9tYXRpY2FsbHkp KQ0KKyAgICAoaWYgKGVxIHRoaXMtY29tbWFuZCAnd2lkZW4pDQorICAgICAg ICAoc2V0cSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdhdXRvKSkNCisgICAg KHdoZW4gKGFuZCAobm90IChlcSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdl eHBsaWNpdCkpDQorICAgICAgICAgICAgICAgKG1lbXEgdGhpcy1jb21tYW5k IGF1dG8tbmFycm93LXdpZGVuLWF1dG9tYXRpY2FsbHkpKQ0KKyAgICAgICh3 aWRlbikpKSkNCisNCisoZGVmdW4gYXV0by1uYXJyb3ctcG9zdC1jb21tYW5k LWZ1bmN0aW9uICgpDQorICAiVXBkYXRlIGRpc3BsYXkgbmFycm93aW5nIHdo ZW4gYGF1dG8tbmFycm93LW1vZGUnIGlzIGluIGVmZmVjdC4iDQorICAod2hl biAoYW5kIGF1dG8tbmFycm93LW1vZGUNCisgICAgICAgICAgICAgKG5vdCAo ZXEgYXV0by1uYXJyb3ctLW5hcnJvd2luZyAnZXhwbGljaXQpKSkNCisgICAg KHVubGVzcyBhdXRvLW5hcnJvdy0taW5pdGlhbGl6ZWQNCisgICAgICAoc2V0 cSBhdXRvLW5hcnJvdy0tbmFycm93aW5nICdhdXRvKSkNCisgICAgKGxldCAo cG9pbnQgY3VyLXBvaW50LW1pbiBidWYtcG9pbnQtbWluIGJ1Zi1wb2ludC1t YXggc2l6ZSkNCisgICAgICAoc2V0cSBwb2ludCAocG9pbnQpIGN1ci1wb2lu dC1taW4gKHBvaW50LW1pbikNCisgICAgICAgICAgICBzaXplICgvIGF1dG8t bmFycm93LWRpc3BsYXktbGVuZ3RoIDMpKQ0KKyAgICAgIChzYXZlLXJlc3Ry aWN0aW9uDQorICAgICAgICAod2lkZW4pDQorICAgICAgICAoc2V0cSBidWYt cG9pbnQtbWluIChwb2ludC1taW4pIGJ1Zi1wb2ludC1tYXggKHBvaW50LW1h eCkpKQ0KKyAgICAgIChsZXQqICgocG9zICgqIChtaW4gKG1heCAoLyBwb2lu dCBzaXplKSAxKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEtICgv IGJ1Zi1wb2ludC1tYXggc2l6ZSkpKQ0KKyAgICAgICAgICAgICAgICAgICAg IHNpemUpKQ0KKyAgICAgICAgICAgICAoYmVnaW4gKG1heCAoLSBwb3Mgc2l6 ZSkgYnVmLXBvaW50LW1pbikpDQorICAgICAgICAgICAgIChlbmQgKG1pbiAo KyBiZWdpbiAoKiAzIHNpemUpKSBidWYtcG9pbnQtbWF4KSkpDQorICAgICAg ICAod2hlbiAob3IgKG5vdCAoYnVmZmVyLW5hcnJvd2VkLXApKQ0KKwkJICAo bm90ICg9IGJlZ2luIGN1ci1wb2ludC1taW4pKSkNCisJICAobmFycm93LXRv LXJlZ2lvbiBiZWdpbiBlbmQpKSkpKSkNCisNCisoc2V0cSBhdXRvLW5hcnJv dy1sb25nLWxpbmUtdGhyZXNob2xkIDMwMDAwDQorICAgICAgYXV0by1uYXJy b3ctcHJlLWNvbW1hbmQtZnVuY3Rpb24gIydhdXRvLW5hcnJvdy1wcmUtY29t bWFuZC1mdW5jdGlvbg0KKyAgICAgIGF1dG8tbmFycm93LXBvc3QtY29tbWFu ZC1mdW5jdGlvbiAjJ2F1dG8tbmFycm93LXBvc3QtY29tbWFuZC1mdW5jdGlv bikNCisNCisoZGVmaW5lLW1pbm9yLW1vZGUgYXV0by1uYXJyb3ctbW9kZQ0K KyAgIkF1dG9tYXRpY2FsbHkgbmFycm93IHRoZSBkaXNwbGF5IG9mIGEgYnVm ZmVyIGFib3ZlIGFuZCBiZWxvdyBwb2ludC4NCisNCitUaGlzIG1vZGUgaXMg YXV0b21hdGljYWxseSBlbnRlcmVkIHdoZW4gYSBmaWxlIHdpdGggb25lIG9y IG1vcmUgbGluZXMNCitsb25nZXIgdGhhbiBgYXV0by1uYXJyb3ctbG9uZy1s aW5lLXRocmVzaG9sZCcgaXMgb3BlbmVkIG9yIGluc2VydGVkDQoraW4gYSBi dWZmZXIuICBJdCByZXN0cmljdHMgZGlzcGxheSwgYnV0IG5vdCBlZGl0aW5n LCB0bw0KK2BhdXRvLW5hcnJvdy1kaXNwbGF5LWxlbmd0aCcgY2hhcmFjdGVy cy4gIERpc3BsYXkgaXMgd2lkZW5lZCBiZWZvcmUNCitleGVjdXRpbmcgYW55 IG9mIHRoZSBjb21tYW5kcyBsaXN0ZWQgaW4gYGF1dG8tbmFycm93LXdpZGVu LWF1dG9tYXRpY2FsbHknLiINCisgIDpncm91cCAnZmlsZXMNCisgIDp2ZXJz aW9uICIyOS4xIg0KKyAgOmFmdGVyLWhvb2sgKHByb2duIChwdXQgJ2F1dG8t bmFycm93LW1vZGUgJ3Blcm1hbmVudC1sb2NhbCB0KQ0KKyAgICAgICAgICAg ICAgICAgICAgIChwdXQgJ2F1dG8tbmFycm93LS1uYXJyb3dpbmcgJ3Blcm1h bmVudC1sb2NhbCB0KSkNCisgIChpZiBhdXRvLW5hcnJvdy1tb2RlDQorICAg ICAgKGF1dG8tbmFycm93LXBvc3QtY29tbWFuZC1mdW5jdGlvbikNCisgICAg KHdoZW4gKG5vdCAoZXEgYXV0by1uYXJyb3ctLW5hcnJvd2luZyAnZXhwbGlj aXQpKQ0KKyAgICAgICh3aWRlbikpDQorICAgIChzZXRxIGF1dG8tbmFycm93 LS1uYXJyb3dpbmcgbmlsKSkpDQorDA0KIChkZWZ1biBhZnRlci1maW5kLWZp bGUgKCZvcHRpb25hbCBlcnJvciB3YXJuIG5vYXV0bw0KIAkJCQkgIF9hZnRl ci1maW5kLWZpbGUtZnJvbS1yZXZlcnQtYnVmZmVyDQogCQkJCSAgbm9tb2Rl cykNCmRpZmYgLS1naXQgYS9saXNwL2lzZWFyY2guZWwgYi9saXNwL2lzZWFy Y2guZWwNCmluZGV4IGRiN2I1M2MwMTQuLmE2ZTAzNGRmNmIgMTAwNjQ0DQot LS0gYS9saXNwL2lzZWFyY2guZWwNCisrKyBiL2xpc3AvaXNlYXJjaC5lbA0K QEAgLTMwMzcsNiArMzAzNywxMyBAQCBpc2VhcmNoLWFsbG93LXByZWZpeA0K ICAgOnR5cGUgJ2Jvb2xlYW4NCiAgIDpncm91cCAnaXNlYXJjaCkNCiANCiso ZGVmY3VzdG9tIGlzZWFyY2gtd2lkZW4tYXV0b21hdGljYWxseSBuaWwNCisg ICJXaGV0aGVyIGEgbmFycm93ZWQgYnVmZmVyIGNhbiBiZSB3aWRlbmVkIHdo ZW4gaXNlYXJjaCBmYWlscy4NCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0 IHdoZW4gYHdpZGVuLWF1dG9tYXRpY2FsbHknIGlzIG5pbC4iDQorICA6dmVy c2lvbiAiMjkuMSINCisgIDp0eXBlICdib29sZWFuDQorICA6Z3JvdXAgJ2lz ZWFyY2gpDQorDQogKGRlZnVuIGlzZWFyY2gtc3RyaW5nLW91dC1vZi13aW5k b3cgKGlzZWFyY2gtcG9pbnQpDQogICAiVGVzdCB3aGV0aGVyIHRoZSBzZWFy Y2ggc3RyaW5nIGlzIGN1cnJlbnRseSBvdXRzaWRlIG9mIHRoZSB3aW5kb3cu DQogUmV0dXJuIG5pbCBpZiBpdCdzIGNvbXBsZXRlbHkgdmlzaWJsZSwgb3Ig aWYgcG9pbnQgaXMgdmlzaWJsZSwNCkBAIC0zNjQ5LDE3ICszNjU2LDIwIEBA IGlzZWFyY2gtc2VhcmNoDQogCSh3aGlsZSByZXRyeQ0KIAkgIChzZXRxIGlz ZWFyY2gtc3VjY2Vzcw0KIAkJKGlzZWFyY2gtc2VhcmNoLXN0cmluZyBpc2Vh cmNoLXN0cmluZyBuaWwgdCkpDQotCSAgOzsgQ2xlYXIgUkVUUlkgdW5sZXNz IHRoZSBzZWFyY2ggcHJlZGljYXRlIHNheXMNCi0JICA7OyB0byBza2lwIHRo aXMgc2VhcmNoIGhpdC4NCi0JICAoaWYgKG9yIChub3QgaXNlYXJjaC1zdWNj ZXNzKQ0KLQkJICAoZnVuY2FsbCBpc2VhcmNoLWZpbHRlci1wcmVkaWNhdGUN Ci0JCQkgICAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpKQ0K LQkgICAgICAoc2V0cSByZXRyeSBuaWwpDQotCSAgICA7OyBBZHZhbmNlIHBv aW50IG9uIGVtcHR5IG1hdGNoZXMgYmVmb3JlIHJldHJ5aW5nDQotCSAgICAo d2hlbiAoPSAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpDQot CSAgICAgIChpZiAoaWYgaXNlYXJjaC1mb3J3YXJkIChlb2JwKSAoYm9icCkp DQotCQkgIChzZXRxIHJldHJ5IG5pbCBpc2VhcmNoLXN1Y2Nlc3MgbmlsKQ0K LQkJKGZvcndhcmQtY2hhciAoaWYgaXNlYXJjaC1mb3J3YXJkIDEgLTEpKSkp KSkNCisgICAgICAgICAgKGlmIChhbmQgKG5vdCBpc2VhcmNoLXN1Y2Nlc3Mp IChidWZmZXItbmFycm93ZWQtcCkNCisgICAgICAgICAgICAgICAgICAgaXNl YXJjaC13aWRlbi1hdXRvbWF0aWNhbGx5IHdpZGVuLWF1dG9tYXRpY2FsbHkp DQorICAgICAgICAgICAgICAod2lkZW4pDQorCSAgICA7OyBDbGVhciBSRVRS WSB1bmxlc3MgdGhlIHNlYXJjaCBwcmVkaWNhdGUgc2F5cw0KKwkgICAgOzsg dG8gc2tpcCB0aGlzIHNlYXJjaCBoaXQuDQorCSAgICAoaWYgKG9yIChub3Qg aXNlYXJjaC1zdWNjZXNzKQ0KKwkJICAgIChmdW5jYWxsIGlzZWFyY2gtZmls dGVyLXByZWRpY2F0ZQ0KKwkJCSAgICAgKG1hdGNoLWJlZ2lubmluZyAwKSAo bWF0Y2gtZW5kIDApKSkNCisJICAgICAgICAoc2V0cSByZXRyeSBuaWwpDQor CSAgICAgIDs7IEFkdmFuY2UgcG9pbnQgb24gZW1wdHkgbWF0Y2hlcyBiZWZv cmUgcmV0cnlpbmcNCisJICAgICAgKHdoZW4gKD0gKG1hdGNoLWJlZ2lubmlu ZyAwKSAobWF0Y2gtZW5kIDApKQ0KKwkgICAgICAgIChpZiAoaWYgaXNlYXJj aC1mb3J3YXJkIChlb2JwKSAoYm9icCkpDQorCQkgICAgKHNldHEgcmV0cnkg bmlsIGlzZWFyY2gtc3VjY2VzcyBuaWwpDQorCQkgIChmb3J3YXJkLWNoYXIg KGlmIGlzZWFyY2gtZm9yd2FyZCAxIC0xKSkpKSkpKQ0KIAkoc2V0cSBpc2Vh cmNoLWp1c3Qtc3RhcnRlZCBuaWwpDQogCSh3aGVuIGlzZWFyY2gtc3VjY2Vz cw0KIAkgIChzZXRxIGlzZWFyY2gtb3RoZXItZW5kDQpkaWZmIC0tZ2l0IGEv bGlzcC9sb25nbGluZXMuZWwgYi9saXNwL29ic29sZXRlL2xvbmdsaW5lcy5l bA0Kc2ltaWxhcml0eSBpbmRleCA5OSUNCnJlbmFtZSBmcm9tIGxpc3AvbG9u Z2xpbmVzLmVsDQpyZW5hbWUgdG8gbGlzcC9vYnNvbGV0ZS9sb25nbGluZXMu ZWwNCmluZGV4IGE2Y2Y5M2EwMzkuLmQ0NGE2MzRlMmUgMTAwNjQ0DQotLS0g YS9saXNwL2xvbmdsaW5lcy5lbA0KKysrIGIvbGlzcC9vYnNvbGV0ZS9sb25n bGluZXMuZWwNCkBAIC02LDYgKzYsNyBAQA0KIDs7ICAgICAgICAgICAgIEFs ZXggU2Nocm9lZGVyIDxhbGV4QGdudS5vcmc+DQogOzsgICAgICAgICAgICAg Q2hvbmcgWWlkb25nIDxjeWRAc3R1cGlkY2hpY2tlbi5jb20+DQogOzsgTWFp bnRhaW5lcjogZW1hY3MtZGV2ZWxAZ251Lm9yZw0KKzs7IE9ic29sZXRlLXNp bmNlOiAyNC40DQogOzsgS2V5d29yZHM6IGNvbnZlbmllbmNlLCB3cA0KIA0K IDs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4NCmRpZmYgLS1n aXQgYS9zcmMvYnVmZmVyLmMgYi9zcmMvYnVmZmVyLmMNCmluZGV4IDUwOWNl NTFiNTUuLmNiYzI0NjA2N2QgMTAwNjQ0DQotLS0gYS9zcmMvYnVmZmVyLmMN CisrKyBiL3NyYy9idWZmZXIuYw0KQEAgLTUyNzYsNiArNTI3Niw3IEBAIGlu aXRfYnVmZmVyX29uY2UgKHZvaWQpDQogICBYU0VURkFTVElOVCAoQlZBUiAo JmJ1ZmZlcl9sb2NhbF9mbGFncywgdGFiX2xpbmVfZm9ybWF0KSwgaWR4KTsg KytpZHg7DQogICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9m bGFncywgY3Vyc29yX3R5cGUpLCBpZHgpOyArK2lkeDsNCiAgIFhTRVRGQVNU SU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBleHRyYV9saW5lX3Nw YWNpbmcpLCBpZHgpOyArK2lkeDsNCisgIFhTRVRGQVNUSU5UIChCVkFSICgm YnVmZmVyX2xvY2FsX2ZsYWdzLCBhdXRvX25hcnJvd19fbmFycm93aW5nKSwg aWR4KTsgKytpZHg7DQogICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9s b2NhbF9mbGFncywgY3Vyc29yX2luX25vbl9zZWxlY3RlZF93aW5kb3dzKSwg aWR4KTsgKytpZHg7DQogDQogICAvKiBidWZmZXJfbG9jYWxfZmxhZ3MgY29u dGFpbnMgbm8gcG9pbnRlcnMsIHNvIGl0J3Mgc2FmZSB0byB0cmVhdCBpdA0K QEAgLTYzNjMsNiArNjM2NCwxMCBAQCBmcm9tIChhYnMgUE9TSVRJT04pLiAg SWYgUE9TSVRJT04gaXMgcG9zaXRpdmUsIHBvaW50IHdhcyBhdCB0aGUgZnJv bnQNCiBJZiB2YWx1ZSBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgaXQg c3BlY2lmaWVzIHRoZSBzcGFjaW5nIHJlbGF0aXZlDQogdG8gdGhlIGRlZmF1 bHQgZnJhbWUgbGluZSBoZWlnaHQuICBBIHZhbHVlIG9mIG5pbCBtZWFucyBh ZGQgbm8gZXh0cmEgc3BhY2UuICAqLyk7DQogDQorICBERUZWQVJfUEVSX0JV RkZFUiAoImF1dG8tbmFycm93LS1uYXJyb3dpbmciLA0KKwkJICAgICAmQlZB UiAoY3VycmVudF9idWZmZXIsIGF1dG9fbmFycm93X19uYXJyb3dpbmcpLCBR bmlsLA0KKwkJICAgICBkb2M6IC8qIEludGVybmFsIHZhcmlhYmxlIHVzZWQg YnkgYGF1dG8tbmFycm93LW1vZGUnLiAgKi8pOw0KKw0KICAgREVGVkFSX1BF Ul9CVUZGRVIgKCJjdXJzb3ItaW4tbm9uLXNlbGVjdGVkLXdpbmRvd3MiLA0K IAkJICAgICAmQlZBUiAoY3VycmVudF9idWZmZXIsIGN1cnNvcl9pbl9ub25f c2VsZWN0ZWRfd2luZG93cyksIFFuaWwsDQogCQkgICAgIGRvYzogLyogTm9u LW5pbCBtZWFucyBzaG93IGEgY3Vyc29yIGluIG5vbi1zZWxlY3RlZCB3aW5k b3dzLg0KZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuaCBiL3NyYy9idWZmZXIu aA0KaW5kZXggMTM1ZWFmNzJkMy4uYTZhYmM2ZWNlOCAxMDA2NDQNCi0tLSBh L3NyYy9idWZmZXIuaA0KKysrIGIvc3JjL2J1ZmZlci5oDQpAQCAtNTYxLDYg KzU2MSw5IEBAICNkZWZpbmUgQlZBUihidWYsIGZpZWxkKSAoKGJ1ZiktPmZp ZWxkICMjIF8pDQogICAgICBpbiB0aGUgZGlzcGxheSBvZiB0aGlzIGJ1ZmZl ci4gICovDQogICBMaXNwX09iamVjdCBleHRyYV9saW5lX3NwYWNpbmdfOw0K IA0KKyAgLyogTmFycm93aW5nIHR5cGUgd2hlbiBhdXRvLW5hcnJvdyBtb2Rl IGlzIGluIGVmZmVjdC4gICovDQorICBMaXNwX09iamVjdCBhdXRvX25hcnJv d19fbmFycm93aW5nXzsNCisNCiAgIC8qIEN1cnNvciB0eXBlIHRvIGRpc3Bs YXkgaW4gbm9uLXNlbGVjdGVkIHdpbmRvd3MuDQogICAgICB0IG1lYW5zIHRv IHVzZSBob2xsb3cgYm94IGN1cnNvci4NCiAgICAgIFNlZSBgY3Vyc29yLXR5 cGUnIGZvciBvdGhlciB2YWx1ZXMuICAqLw0KZGlmZiAtLWdpdCBhL3NyYy9m aWxlaW8uYyBiL3NyYy9maWxlaW8uYw0KaW5kZXggMTBkNGI4YmMxNS4uZTZj NTFkYTBkOSAxMDA2NDQNCi0tLSBhL3NyYy9maWxlaW8uYw0KKysrIGIvc3Jj L2ZpbGVpby5jDQpAQCAtNDk5Nyw2ICs0OTk3LDE3IEBAIGJlY2F1c2UgKDEp IGl0IHByZXNlcnZlcyBzb21lIG1hcmtlciBwb3NpdGlvbnMgKGluIHVuY2hh bmdlZCBwb3J0aW9ucw0KIAkgICBPdGhlcndpc2Ugc3RhcnQgd2l0aCBhbiBl bXB0eSB1bmRvX2xpc3QuICAqLw0KIAlic2V0X3VuZG9fbGlzdCAoY3VycmVu dF9idWZmZXIsIEVRIChvbGRfdW5kbywgUXQpID8gUXQgOiBRbmlsKTsNCiAN CisgICAgICBpZiAoIW5vbmludGVyYWN0aXZlDQorCSAgJiYgIU5JTFAgKFZh dXRvX25hcnJvd19sb25nX2xpbmVfdGhyZXNob2xkKQ0KKwkgICYmICFOSUxQ IChDQUxMTg0KKwkJICAgIChGZ3RyLA0KKwkJICAgICBGY2FyIChGY2RyIChG YnVmZmVyX2xpbmVfc3RhdGlzdGljcyAoRmN1cnJlbnRfYnVmZmVyICgpKSkp LA0KKwkJICAgICBWYXV0b19uYXJyb3dfbG9uZ19saW5lX3RocmVzaG9sZCkp KQ0KKwl7DQorCSAgc2FmZV9jYWxsICgxLCBRYXV0b19uYXJyb3dfbW9kZSk7 DQorCSAgbWVzc2FnZTEgKCJBdXRvLU5hcnJvdyBtb2RlIGVuYWJsZWQgaW4g Y3VycmVudCBidWZmZXIiKTsNCisJfQ0KKw0KICAgICAgIHVuYmluZF90byAo Y291bnQxLCBRbmlsKTsNCiAgICAgfQ0KIA0KQEAgLTY2MzgsNiArNjY0OSwx NyBAQCBkbyAoZmlsZS1leGlzdHMtcCBGSUxFTkFNRSkgYW5kIEZJTEVOQU1F IGlzIGhhbmRsZWQgYnkgSEFORExFUiwgdGhlbg0KICAgLyogTGlzcCBmdW5j dGlvbiBmb3IgcmVjdXJzaXZlbHkgZGVsZXRpbmcgZGlyZWN0b3JpZXMuICAq Lw0KICAgREVGU1lNIChRZGVsZXRlX2RpcmVjdG9yeSwgImRlbGV0ZS1kaXJl Y3RvcnkiKTsNCiANCisgIERFRlZBUl9MSVNQICgiYXV0by1uYXJyb3ctbG9u Zy1saW5lLXRocmVzaG9sZCIsDQorCSAgICAgICBWYXV0b19uYXJyb3dfbG9u Z19saW5lX3RocmVzaG9sZCwNCisJICAgICAgIGRvYzogLyogTGluZSBsZW5n dGggYWJvdmUgd2hpY2ggYGF1dG8tbmFycm93LW1vZGUnIGlzIGVudGVyZWQu DQorV2hlbiBub24tbmlsLCBhbmQgd2hlbiBhIGZpbGUgd2l0aCBvbmUgb3Ig bW9yZSBsaW5lcyBsb25nZXIgdGhhbg0KK2BhdXRvLW5hcnJvdy1sb25nLWxp bmUtdGhyZXNob2xkJyBpcyBvcGVuZWQgb3IgaW5zZXJ0ZWQgaW4gYSBidWZm ZXIsDQorYGF1dG8tbmFycm93LW1vZGUnIGlzIGF1dG9tYXRpY2FsbHkgZW5h YmxlZC4NCitXaGVuIG5pbCwgYGF1dG8tbmFycm93LW1vZGUnIGlzIG5vdCBl bnRlcmVkIGF1dG9tYXRpY2FsbHkuICAqLyk7DQorICBWYXV0b19uYXJyb3df bG9uZ19saW5lX3RocmVzaG9sZCA9IFFuaWw7DQorDQorICBERUZTWU0gKFFh dXRvX25hcnJvd19tb2RlLCAiYXV0by1uYXJyb3ctbW9kZSIpOw0KKw0KICAg REVGU1lNIChRc3Vic3RpdHV0ZV9lbnZfaW5fZmlsZV9uYW1lLCAic3Vic3Rp dHV0ZS1lbnYtaW4tZmlsZS1uYW1lIik7DQogICBERUZTWU0gKFFnZXRfYnVm ZmVyX3dpbmRvd19saXN0LCAiZ2V0LWJ1ZmZlci13aW5kb3ctbGlzdCIpOw0K IA0KZGlmZiAtLWdpdCBhL3NyYy9rZXlib2FyZC5jIGIvc3JjL2tleWJvYXJk LmMNCmluZGV4IGJlZDgzMDdiNmYuLjM4YWE2NDc3NGQgMTAwNjQ0DQotLS0g YS9zcmMva2V5Ym9hcmQuYw0KKysrIGIvc3JjL2tleWJvYXJkLmMNCkBAIC0x MjkwLDYgKzEyOTAsOSBAQCBjb21tYW5kX2xvb3BfMSAodm9pZCkNCiANCiAg IGlmIChOSUxQIChWbWVtb3J5X2Z1bGwpKQ0KICAgICB7DQorICAgICAgaWYg KCFOSUxQIChWYXV0b19uYXJyb3dfcG9zdF9jb21tYW5kX2Z1bmN0aW9uKSAm JiAhTklMUCAoVnJ1bl9ob29rcykpDQorCXNhZmVfcnVuX2hvb2tzIChRYXV0 b19uYXJyb3dfcG9zdF9jb21tYW5kX2Z1bmN0aW9uKTsNCisNCiAgICAgICAv KiBNYWtlIHN1cmUgdGhpcyBob29rIHJ1bnMgYWZ0ZXIgY29tbWFuZHMgdGhh dCBnZXQgZXJyb3JzIGFuZA0KIAkgdGhyb3cgdG8gdG9wIGxldmVsLiAgKi8N CiAgICAgICAvKiBOb3RlIHRoYXQgdGhlIHZhbHVlIGNlbGwgd2lsbCBuZXZl ciBkaXJlY3RseSBjb250YWluIG5pbA0KQEAgLTE0NzIsNiArMTQ3NSw4IEBA IGNvbW1hbmRfbG9vcF8xICh2b2lkKQ0KICAgICAgIFZyZWFsX3RoaXNfY29t bWFuZCA9IGNtZDsNCiAgICAgICBzYWZlX3J1bl9ob29rcyAoUXByZV9jb21t YW5kX2hvb2spOw0KIA0KKyAgICAgIHNhZmVfcnVuX2hvb2tzIChRYXV0b19u YXJyb3dfcHJlX2NvbW1hbmRfZnVuY3Rpb24pOw0KKw0KICAgICAgIGFscmVh ZHlfYWRqdXN0ZWQgPSAwOw0KIA0KICAgICAgIGlmIChOSUxQIChWdGhpc19j b21tYW5kKSkNCkBAIC0xNTIyLDYgKzE1MjcsOCBAQCBjb21tYW5kX2xvb3Bf MSAodm9pZCkNCiAgICAgICAgICAgfQ0KICAgICAgIGtzZXRfbGFzdF9wcmVm aXhfYXJnIChjdXJyZW50X2tib2FyZCwgVmN1cnJlbnRfcHJlZml4X2FyZyk7 DQogDQorICAgICAgc2FmZV9ydW5faG9va3MgKFFhdXRvX25hcnJvd19wb3N0 X2NvbW1hbmRfZnVuY3Rpb24pOw0KKw0KICAgICAgIHNhZmVfcnVuX2hvb2tz IChRcG9zdF9jb21tYW5kX2hvb2spOw0KIA0KICAgICAgIC8qIElmIGRpc3Bs YXlpbmcgYSBtZXNzYWdlLCByZXNpemUgdGhlIGVjaG8gYXJlYSB3aW5kb3cg dG8gZml0DQpAQCAtMTIwNDAsNiArMTIwNDcsMTEgQEAgc3ltc19vZl9rZXli b2FyZCAodm9pZCkNCiAgIERFRlNZTSAoUXByZV9jb21tYW5kX2hvb2ssICJw cmUtY29tbWFuZC1ob29rIik7DQogICBERUZTWU0gKFFwb3N0X2NvbW1hbmRf aG9vaywgInBvc3QtY29tbWFuZC1ob29rIik7DQogDQorICBERUZTWU0gKFFh dXRvX25hcnJvd19wcmVfY29tbWFuZF9mdW5jdGlvbiwNCisJICAiYXV0by1u YXJyb3ctcHJlLWNvbW1hbmQtZnVuY3Rpb24iKTsNCisgIERFRlNZTSAoUWF1 dG9fbmFycm93X3Bvc3RfY29tbWFuZF9mdW5jdGlvbiwNCisJICAiYXV0by1u YXJyb3ctcG9zdC1jb21tYW5kLWZ1bmN0aW9uIik7DQorDQogICBERUZTWU0g KFF1bmRvX2F1dG9fX2FkZF9ib3VuZGFyeSwgInVuZG8tYXV0by0tYWRkLWJv dW5kYXJ5Iik7DQogICBERUZTWU0gKFF1bmRvX2F1dG9fX3VuZG9hYmx5X2No YW5nZWRfYnVmZmVycywNCiAgICAgICAgICAgInVuZG8tYXV0by0tdW5kb2Fi bHktY2hhbmdlZC1idWZmZXJzIik7DQpAQCAtMTI2MDQsNiArMTI2MTYsMjIg QEAgc3ltc19vZl9rZXlib2FyZCAodm9pZCkNCiBTZWUgYWxzbyBgcHJlLWNv bW1hbmQtaG9vaycuICAqLyk7DQogICBWcG9zdF9jb21tYW5kX2hvb2sgPSBR bmlsOw0KIA0KKyAgREVGVkFSX0xJU1AgKCJhdXRvLW5hcnJvdy1wcmUtY29t bWFuZC1mdW5jdGlvbiIsDQorCSAgICAgICBWYXV0b19uYXJyb3dfcHJlX2Nv bW1hbmRfZnVuY3Rpb24sDQorCSAgICAgICBkb2M6IC8qIEZ1bmN0aW9uIGV4 ZWN1dGVkIGJlZm9yZSBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQgaW4gYGF1 dG8tbmFycm93LW1vZGUnLg0KK0lmIG5vbi1uaWwsIGFuZCBgYXV0by1uYXJy b3ctbW9kZScgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIGlzDQorY2FsbGVk IGJlZm9yZSBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGFmdGVyIGBwcmUt Y29tbWFuZC1ob29rJy4NCitJdCBpcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVu dHMuICAqLyk7DQorICBWYXV0b19uYXJyb3dfcHJlX2NvbW1hbmRfZnVuY3Rp b24gPSBRbmlsOw0KKw0KKyAgREVGVkFSX0xJU1AgKCJhdXRvLW5hcnJvdy1w b3N0LWNvbW1hbmQtZnVuY3Rpb24iLA0KKwkgICAgICAgVmF1dG9fbmFycm93 X3Bvc3RfY29tbWFuZF9mdW5jdGlvbiwNCisJICAgICAgIGRvYzogLyogRnVu Y3Rpb24gZXhlY3V0ZWQgYWZ0ZXIgZWFjaCBjb21tYW5kIGlzIGV4ZWN1dGVk IGluIGBhdXRvLW5hcnJvdy1tb2RlJy4NCitJZiBub24tbmlsLCBhbmQgYGF1 dG8tbmFycm93LW1vZGUnIGlzIGVuYWJsZWQsIHRoZSBmdW5jdGlvbiBpcw0K K2NhbGxlZCBhZnRlciBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGJlZm9y ZSBgcG9zdC1jb21tYW5kLWhvb2snLg0KK0l0IGlzIGNhbGxlZCB3aXRob3V0 IGFyZ3VtZW50cy4gICovKTsNCisgIFZhdXRvX25hcnJvd19wb3N0X2NvbW1h bmRfZnVuY3Rpb24gPSBRbmlsOw0KKw0KICNpZiAwDQogICBERUZWQVJfTElT UCAoImVjaG8tYXJlYS1jbGVhci1ob29rIiwgLi4uLA0KIAkgICAgICAgZG9j OiAvKiBOb3JtYWwgaG9vayBydW4gd2hlbiBjbGVhcmluZyB0aGUgZWNobyBh cmVhLiAgKi8pOw0KZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3JjL3hk aXNwLmMNCmluZGV4IDQwODk1MjVlMTAuLmQ3ODI2NTliOTIgMTAwNjQ0DQot LS0gYS9zcmMveGRpc3AuYw0KKysrIGIvc3JjL3hkaXNwLmMNCkBAIC0yNzY2 Nyw3ICsyNzY2NywxMiBAQCBkZWNvZGVfbW9kZV9zcGVjIChzdHJ1Y3Qgd2lu ZG93ICp3LCByZWdpc3RlciBpbnQgYywgaW50IGZpZWxkX3dpZHRoLA0KIA0K ICAgICBjYXNlICduJzoNCiAgICAgICBpZiAoQlVGX0JFR1YgKGIpID4gQlVG X0JFRyAoYikgfHwgQlVGX1pWIChiKSA8IEJVRl9aIChiKSkNCi0JcmV0dXJu ICIgTmFycm93IjsNCisJew0KKwkgIGlmIChFUSAoQlZBUiAoY3VycmVudF9i dWZmZXIsIGF1dG9fbmFycm93X19uYXJyb3dpbmcpLCBpbnRlcm4gKCJhdXRv IikpKQ0KKwkgICAgcmV0dXJuICIgQXV0by1OYXJyb3ciOw0KKwkgIGVsc2UN CisJICAgIHJldHVybiAiIE5hcnJvdyI7DQorCX0NCiAgICAgICBicmVhazsN CiANCiAgICAgICAvKiBEaXNwbGF5IHRoZSAiZGVncmVlIG9mIHRyYXZlbCIg b2YgdGhlIHdpbmRvdyB0aHJvdWdoIHRoZSBidWZmZXIuICAqLw0KLS0gDQoy LjM1LjENCg0K --KToD5uLpV2-- From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 08:55:29 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 12:55:29 +0000 Received: from localhost ([127.0.0.1]:49652 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8i5Q-00044s-B3 for submit@debbugs.gnu.org; Tue, 05 Jul 2022 08:55:29 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51284) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8i5O-00044d-Ag for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 08:55:26 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50858) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8i5J-0005AD-1L; Tue, 05 Jul 2022 08:55:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=ORa0fzNice64JrKzLHhqlA7GpZoUiyGufCL0rDXo5t0=; b=LxOR7vvXH2cm gFNMK9dbS+r6WCeqvvPOlVmuzGRwodLSCKgMA32Crpl9RV6JiyangkRx0ibNoMCTXuRrYUp7I5Fek DFrXimcjZB1CZdhbDJSsWlocw48DkWZb0jrvpRUqXqZ6iFuAvKpC383gnRfSRpr4JWE/gXcVjowCj tDE/EIKxSzffgoqDxxXdwUuQ3U1cZENzMLQ9lYT1Ggn1Sy/imssVRJQA/sxsYobbtwFUtq3EQZQ14 4p7ATnrMOH0XGpNWTF3sBNFxhcjbDcabyr2mfvGWWI1Za7kJYSkb+lvTd1jA+CY/vnD0MwHZHZzYn RE+Opqju9kFz9rVl1Zx76w==; Received: from [87.69.77.57] (port=4546 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8i55-0006Vx-A3; Tue, 05 Jul 2022 08:55:19 -0400 Date: Tue, 05 Jul 2022 15:54:59 +0300 Message-Id: <83a69n90t8.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <38c1a31040f5546dbd3a@heytings.org> (message from Gregory Heytings on Tue, 05 Jul 2022 10:17:37 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 05 Jul 2022 10:17:37 +0000 > From: Gregory Heytings > > Gosh! After including too little, I included too much. The attached one > is correct (I hope). Thanks! It's a good idea, but I wonder how far we can safely take it; see below. > diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi > index f06b93759d..887e5c6170 100644 > --- a/doc/emacs/trouble.texi > +++ b/doc/emacs/trouble.texi > @@ -158,7 +158,6 @@ Lossage > * Crashing:: What Emacs does when it crashes. > * After a Crash:: Recovering editing in an Emacs session that crashed. > * Emergency Escape:: What to do if Emacs stops responding. > -* Long Lines:: Mitigating slowness due to extremely long lines. > * DEL Does Not Delete:: What to do if @key{DEL} doesn't delete. > @end menu > > @@ -433,64 +432,6 @@ Emergency Escape > emergency escape---but there are cases where it won't work, when a > system call hangs or when Emacs is stuck in a tight loop in C code. > > -@node Long Lines > -@subsection Long Lines > -@cindex long lines This removal is premature, IMO. We should first establish that this feature can indeed cope well enough with the important use cases, and I'm not sure we are there yet. It is possible that this feature will be one of several available features that attempt to solve the same problem in different ways, each way with its own advantages and disadvantages. > --- a/etc/NEWS > +++ b/etc/NEWS > @@ -324,9 +324,6 @@ startup. Previously, these functions ignored > > * Changes in Emacs 29.1 > > ---- > -** 'longlines-mode' is no longer obsolete. > - Likewise here. > +** Emacs is now capable of editing files with arbitarily long lines. I'd suggest saying something like Emacs now copes better with editing files with extremely long lines. > +(defcustom auto-narrow-display-length 30000 > + "Number of characters to which display is restricted in `auto-narrow-mode'." This should tell how the narrowed region is positioned relative to point, I think, because without it the doc string tells too little. > +(defcustom auto-narrow-widen-automatically > + '( move-beginning-of-line move-end-of-line backward-sentence forward-sentence > + backward-sexp forward-sexp beginning-of-defun end-of-defun > + beginning-of-buffer end-of-buffer goto-char goto-line > + mark-sexp mark-defun mark-paragraph mark-whole-buffer mark-page > + exchange-point-and-mark pop-global-mark set-mark-command jump-to-register > + bookmark-jump) > + "Commands for which display is automatically widened in `auto-narrow-mode'." What are the criteria for this default? (I'm surprised the list is so short, for the reasons I explain below.) > +(setq auto-narrow-long-line-threshold 30000 > + auto-narrow-pre-command-function #'auto-narrow-pre-command-function > + auto-narrow-post-command-function #'auto-narrow-post-command-function) We might eventually decide to have this turned off by default. > --- a/src/fileio.c > +++ b/src/fileio.c > @@ -4997,6 +4997,20 @@ because (1) it preserves some marker positions (in unchanged portions > Otherwise start with an empty undo_list. */ > bset_undo_list (current_buffer, EQ (old_undo, Qt) ? Qt : Qnil); > > + if (!noninteractive && !NILP (Vauto_narrow_long_line_threshold)) > + { > + ptrdiff_t cur, next, found, max = 0; > + for (cur = PT; cur < PT + inserted; cur = next) > + { > + next = find_newline1 (cur, CHAR_TO_BYTE (cur), 0, -1, 1, > + &found, NULL, true); > + if (next - cur > max) max = next - cur; > + if (!found) break; > + } > + if (max > XFIXNUM (Vauto_narrow_long_line_threshold)) > + safe_call (1, Qauto_narrow_mode); > + } > + This will invoke auto-narrow-mode for any file that is for some reason inserted by Emacs into some buffer. Many Emacs commands insert files into temporary buffers or buffers that are never meant for display, and AFAIU the above will narrow such a buffer if a file inserted happens to have long lines, is that correct? If so, a Lisp program that inserts such a file, and then processes it, might fail to do its job because it will bump into the auto-narrowed restriction. I think this is a symptom of a larger problem with this approach; more about it below. > + DEFVAR_LISP ("auto-narrow-long-line-threshold", > + Vauto_narrow_long_line_threshold, > + doc: /* Line length above which `auto-narrow-mode' is entered. > +When non-nil, and when a file with one or more lines longer than > +`auto-narrow-long-line-threshold' is opened or inserted in a buffer, > +`auto-narrow-mode' is automatically enabled. > +When nil, `auto-narrow-mode' is not entered automatically. */); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "When nil, `auto-narrow-mode' is disabled." > --- a/src/keyboard.c > +++ b/src/keyboard.c > @@ -1290,6 +1290,9 @@ command_loop_1 (void) > > if (NILP (Vmemory_full)) > { > + if (!NILP (Vauto_narrow_post_command_function) && !NILP (Vrun_hooks)) > + safe_run_hooks (Qauto_narrow_post_command_function); > + > /* Make sure this hook runs after commands that get errors and > throw to top level. */ > [...] > @@ -1522,6 +1527,8 @@ command_loop_1 (void) > } > kset_last_prefix_arg (current_kboard, Vcurrent_prefix_arg); > > + safe_run_hooks (Qauto_narrow_post_command_function); > + > safe_run_hooks (Qpost_command_hook); AFAIU, this means post-command-hook functions will run with the current buffer narrowed, right? That could cause them to fail, if they for some reason want to access the buffer portions outside the restriction. > @@ -1472,6 +1475,8 @@ command_loop_1 (void) > Vreal_this_command = cmd; > safe_run_hooks (Qpre_command_hook); > > + safe_run_hooks (Qauto_narrow_pre_command_function); > + And here's a similar problem with pre-command-hook functions. A similar problem will happen with any Lisp that is run from the redisplay code: it will only see the narrowed region. I don't quite see clearly what these general issues could mean, but they are at least worrisome, I think, because they could potentially mean significant breakage in many places. The simple measure of having a list of commands that automatically widen the buffer is insufficient, I'm afraid, because the real problem is not on the command level, it is on the level of Lisp programs which say save-excursion and then go far away for whatever purposes. Also for commands written by users: for example, if someone writes a command that is a trivial wrapper around goto-line, that command will no longer automatically widen as goto-line does, right? Can we come up with a better solution for these potential problems? Alternatively, maybe you will explain that I'm bothered by a non-existent problem? Other observations: Since the narrowing is basically in effect only during redisplay, it doesn't help with commands that use display code outside of redisplay proper. For example, C-n, C-v, C-l, and other commands are still extremely sluggish in files with long lines. E.g., try the file long-line.xml mentioned here: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45898#80 Or try dragging the mode line of a window showing that file. Also, the automatic restriction is very visible and causes surprising effects: (point-min) and (point-max) evaluate to the narrowed region (so it's basically very hard to know the real size of the buffer), and scrolling through the buffer causes the scroll-bar thumb move in a non-monotonic manner: I scroll towards the end of the buffer, but the thumb sometimes jumps back up, as if I moved towards the beginning. And sometimes I see that C-n moves point horizontally, i.e. point stays on the same screen line, instead of the expected vertical movement. I guess this is because the restriction violates some assumptions that Emacs makes regarding horizontal coordinates of some reference position. I think at this point it is best to have this feature on a feature branch, so that people could try it, and so that improving it won't need to post the entire patch each time anew. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 08:59:47 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 12:59:47 +0000 Received: from localhost ([127.0.0.1]:49658 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8i9b-0004Ak-CA for submit@debbugs.gnu.org; Tue, 05 Jul 2022 08:59:47 -0400 Received: from mail-ed1-f51.google.com ([209.85.208.51]:34505) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8i9Z-0004AY-PC for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 08:59:46 -0400 Received: by mail-ed1-f51.google.com with SMTP id z41so15204331ede.1 for <56393@debbugs.gnu.org>; Tue, 05 Jul 2022 05:59:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version; bh=g3CBGSddbyjirGyoHTA7LmljIwNddMFkwkBFkVxpaCI=; b=WWHFU+uA6wQkqd5Kqcy2JAMk8uEH1uGWjH5zGUOl08LtUwDr/XmK6or42RQTxzImL9 BZdODMY6o+V+R/J3AnH166lRCieOXGIq9Jz7EexmNiJXY0H5ewV47VIc+FMUqR0O8xdy oU+oO7Kg83ox6aINCwU4nl+EeA07NQKdzdIrPGyb/8P7RBT6WpHY9t317OvBx1Map2tX Kh1/c1i2rOayPV8DTreGkuBKhfklBjIzxmrqZGfoDo82QW9Qm8OoQw+HXUQatuMGqcQW eI+xeLo/daiEg7nSNKt1kKsWKIhg5lbWN2nuo1fNPj0E3gwPb1EFwz6QAiZ3HcEtSc7h qmdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version; bh=g3CBGSddbyjirGyoHTA7LmljIwNddMFkwkBFkVxpaCI=; b=cV4IPRS0+AekZ7HG5gy0f2luyCH51lon4ZDgTYF9V/MWxIoYMhTYWc/FCLTe3mIUKv YeWySZYXs+0WAXjWlmeCaF+uL/jRYBdRcvPU5BIpBX7k36ieiS1DEMZBceFbITDZgIra ognjd/RUAfvcQ2EE1JtstctQkiOkHRVvBrAC/DzBmXDGVy69XEXfsQQTXJpFPKBAFGvO iLk0o9Y7Y6fW996TSnLd1zvOhA9MKy+V8JiG6yBIBzAzerV1Dega24KWR2QweC3O0h0D OwDEY0OD9zYKCCAVCRN63FA4cRu0VpeMpmFj/kO7mjyJBiEjHOLEcsetKZvQOxnvdkVw 2QMg== X-Gm-Message-State: AJIora+FFlAHXY9Q8hnNIOJLMshGfMuGEzpJsIAm+Lpi6eaVVbWhVIjS BWG20d7eoBJIBv3b7vQ9eibIqaatOjP59Q== X-Google-Smtp-Source: AGRyM1tfPoLjFAiO2gXe/PACTDWfCRSaB0dyXwG6kMnrLc7PG+3ppDGGV6TrrlRg/8ApqOnT/bYxBg== X-Received: by 2002:a05:6402:5207:b0:435:a27b:88f7 with SMTP id s7-20020a056402520700b00435a27b88f7mr47258867edd.22.1657025979461; Tue, 05 Jul 2022 05:59:39 -0700 (PDT) Received: from Mini.fritz.box (pd9e36821.dip0.t-ipconnect.de. [217.227.104.33]) by smtp.gmail.com with ESMTPSA id 8-20020a170906300800b0072aadbd48c7sm4528869ejz.84.2022.07.05.05.59.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 05:59:38 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <38c1a31040e66d2b273e@heytings.org> (Gregory Heytings's message of "Tue, 05 Jul 2022 12:16:27 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> Date: Tue, 05 Jul 2022 14:59:37 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: >> >> I haven't tried your patch, but it sounds like it'd do the trick. >> > > It does indeed, even with a 1GB long line. > >> >> You could also use Fbuffer_line_statistics here, which I think >> should be faster. >> > > Thanks, this simplifies the patch a bit, see attached. This is very nice, indeed. I'll take a closer look at your patch in the next days. (I'm currently still in the process of getting Emacs to better integrate with my M1 Mac, and it's kicking and screaming :-).) From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 09:53:42 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 13:53:42 +0000 Received: from localhost ([127.0.0.1]:49740 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8izm-0005Z8-AE for submit@debbugs.gnu.org; Tue, 05 Jul 2022 09:53:42 -0400 Received: from heytings.org ([95.142.160.155]:53676) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8izi-0005Yw-JX for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 09:53:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657029217; bh=XPAr/CSsNd8DICc4t/40VLIpZha1oiR2gDTnQkc6e4I=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=neBVdh0b5zAxiglhQZtiCIwopDnfYj3Q1lXXFRT6jhuNbBiYqhwuPfqjQhl76gVNX Y7xP0jEuZzTssKOsi/jOatM5UHrK/CE/pt+npC3OBPbVaEyySJMi+Q8Kd9gPnExuiU kP2zz7Bd7Bmdj3OZzYptW0i7DI5hvl64A2m1O1zrsDxwqo5TK+kN878uldCPWK1mmC +hQR/th3vbYMwXUtN889xLSUqwJt/rOEGhHuOjKa4yJzouiNZBfVPTv7vWYW2HpbQe eVV43i0IcrzhDmS+nK3clsxo45VmZWXoBNo9+07cczadOSrMIYvhRwB2qVW1wKLwFt hPd/Z9kQ54q7A== Date: Tue, 05 Jul 2022 13:53:36 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83a69n90t8.fsf@gnu.org> Message-ID: <38c1a31040ad21b41adc@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Thanks for your review; some comments below. > > This removal is premature, IMO. We should first establish that this > feature can indeed cope well enough with the important use cases, and > I'm not sure we are there yet. It is possible that this feature will be > one of several available features that attempt to solve the same problem > in different ways, each way with its own advantages and disadvantages. > AFAICS, this patch properly solves the problem indicated in that section. So I don't see why it should be kept. >> -** 'longlines-mode' is no longer obsolete. > > Likewise here. > This mode was unobsoleted a few days ago, because the conclusion was that there was no better mechanism available to cope with large files. Now there is. >> +** Emacs is now capable of editing files with arbitarily long lines. > > I'd suggest saying something like > > Emacs now copes better with editing files with extremely long lines. > As I just said to Lars, Emacs can now handle files with 1GB long lines just fine, as if it were a small file. I used for I in $(seq 1 60); do cat dictionary.json; done > hugedictionary.json So I think this title is appropriate. >> +(defcustom auto-narrow-widen-automatically >> + '( move-beginning-of-line move-end-of-line backward-sentence forward-sentence >> + backward-sexp forward-sexp beginning-of-defun end-of-defun >> + beginning-of-buffer end-of-buffer goto-char goto-line >> + mark-sexp mark-defun mark-paragraph mark-whole-buffer mark-page >> + exchange-point-and-mark pop-global-mark set-mark-command jump-to-register >> + bookmark-jump) >> + "Commands for which display is automatically widened in `auto-narrow-mode'." > > What are the criteria for this default? (I'm surprised the list is so > short, for the reasons I explain below.) > The review I asked was in particular meant to add commands in these defaults. I reviewed all ordinary editing commands, but I may have missed some of them. Please tell me which command you'd like to add in that list. (Also note that isearch commands are handled with their own mechanism.) >> +(setq auto-narrow-long-line-threshold 30000 >> + auto-narrow-pre-command-function #'auto-narrow-pre-command-function >> + auto-narrow-post-command-function #'auto-narrow-post-command-function) > > We might eventually decide to have this turned off by default. > Sorry, but no. > > This will invoke auto-narrow-mode for any file that is for some reason > inserted by Emacs into some buffer. Many Emacs commands insert files > into temporary buffers or buffers that are never meant for display, and > AFAIU the above will narrow such a buffer if a file inserted happens to > have long lines, is that correct? > It might, everything is possible with software. Let's see if it happens in practice and take the appropriate measure if it happens. And the cure for these potential cases is easy: (let ((auto-narrow-long-line-threshold nil)) ...) > > I don't quite see clearly what these general issues could mean, but they > are at least worrisome, I think, because they could potentially mean > significant breakage in many places. > Again, let's see if it happens in practice and take the appropriate measure if it actually happens. > > Also for commands written by users: for example, if someone writes a > command that is a trivial wrapper around goto-line, that command will no > longer automatically widen as goto-line does, right? > Indeed, that's the purpose of the auto-narrow-widen-automatically defcustom: users can easily add their own commands to that list. > > Alternatively, maybe you will explain that I'm bothered by a > non-existent problem? > What I think is that you are bothered with a potential problem which is far less important than seeing Emacs becoming unresponsive. > > Since the narrowing is basically in effect only during redisplay, it > doesn't help with commands that use display code outside of redisplay > proper. For example, C-n, C-v, C-l, and other commands are still > extremely sluggish in files with long lines. E.g., try the file > long-line.xml mentioned here: > > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45898#80 > Did you actually try the patch? This is (one of) the files I used while designing this code, and navigation commands work perfectly well (on a seven year old laptop). In that particular XML file, you can turn off font-lock-mode to make navigation even faster (instantaneous). > > Also, the automatic restriction is very visible and causes surprising > effects: (point-min) and (point-max) evaluate to the narrowed region (so > it's basically very hard to know the real size of the buffer), and > scrolling through the buffer causes the scroll-bar thumb move in a > non-monotonic manner: I scroll towards the end of the buffer, but the > thumb sometimes jumps back up, as if I moved towards the beginning. > Indeed. Users will see the "Auto-Narrow" indication in the modeline with which they can easily find an explanation for that behavior. If this behavior is problematic, it could be fixed by using the dimensions of the whole buffer when updating the scroll bar (and perhaps also the modeline), when auto-narrow-mode is active. > > I think at this point it is best to have this feature on a feature > branch, so that people could try it, and so that improving it won't need > to post the entire patch each time anew. > Okay, will do. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 10:15:26 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 14:15:26 +0000 Received: from localhost ([127.0.0.1]:51187 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8jKn-0006Sk-W1 for submit@debbugs.gnu.org; Tue, 05 Jul 2022 10:15:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43448) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8jKj-0006SU-7L for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 10:15:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54400) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8jKd-00027X-HT; Tue, 05 Jul 2022 10:15:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=mlvHca1xzUMDKO3HIofpEkuUWVYrO9l26110PKgpsIE=; b=ZWfpXPAmwPT8 +b6Wrkr3ogYhD5eUuSyQd+ZEPfHIDF2/CSxtFJ/JKEwCqA0ArcJlERR4ZkTZdU4MeroN/twNgswlt eZ/hHOlNQzayjOaZRmieLbrxViXu1b9dLsvLgkdN7xB4wqOt2EGCocJHdS9XTwCv0OLYDhDgvoOw+ tx3SdX7J3HctVnFdZs5o2HBHmqDZSEUpli0JXPQSgTSs0B+ovDJJHtkPH24AX4zILobOT+LuwvqlT rPGAptZGcpfu85bh5kPWpcA3Wic1tZWxLhjPh6kt0Fm6amysMJbznQvQX6Rrmk1MbW/z94TW6vLV+ y7Pd77CePZhWO4haqu9KaA==; Received: from [87.69.77.57] (port=1531 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8jKT-0001ll-HX; Tue, 05 Jul 2022 10:15:14 -0400 Date: Tue, 05 Jul 2022 17:14:56 +0300 Message-Id: <835ykb8x3z.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <38c1a31040ad21b41adc@heytings.org> (message from Gregory Heytings on Tue, 05 Jul 2022 13:53:36 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 05 Jul 2022 13:53:36 +0000 > From: Gregory Heytings > cc: 56393@debbugs.gnu.org > > >> -** 'longlines-mode' is no longer obsolete. > > > > Likewise here. > > > > This mode was unobsoleted a few days ago, because the conclusion was that > there was no better mechanism available to cope with large files. Now > there is. Well, the cursor motion problems I mentioned? longlines doesn't have them. > > This will invoke auto-narrow-mode for any file that is for some reason > > inserted by Emacs into some buffer. Many Emacs commands insert files > > into temporary buffers or buffers that are never meant for display, and > > AFAIU the above will narrow such a buffer if a file inserted happens to > > have long lines, is that correct? > > It might, everything is possible with software. Let's see if it happens > in practice and take the appropriate measure if it happens. I did try this, and it does happen. Here: (with-temp-buffer (insert-file-contents "long-line.xml") (point-max)) (where long-line.xml is the file whose URL I've shown in my message). This gives me 30001, whereas the correct value is 306666. > And the cure for these potential cases is easy: (let > ((auto-narrow-long-line-threshold nil)) ...) Where do you suggest doing this? > > I don't quite see clearly what these general issues could mean, but they > > are at least worrisome, I think, because they could potentially mean > > significant breakage in many places. > > > > Again, let's see if it happens in practice and take the appropriate > measure if it actually happens. See above. I think it will happen quite a lot in the wild. > > Also for commands written by users: for example, if someone writes a > > command that is a trivial wrapper around goto-line, that command will no > > longer automatically widen as goto-line does, right? > > Indeed, that's the purpose of the auto-narrow-widen-automatically > defcustom: users can easily add their own commands to that list. That means the list will be very long and users will have to constantly update it. E.g., whenever they install a new package or even a new version of a package. > > Alternatively, maybe you will explain that I'm bothered by a > > non-existent problem? > > What I think is that you are bothered with a potential problem which is > far less important than seeing Emacs becoming unresponsive. I'm not sure. A broken command might be important, especially if this feature is going to be on by default. > > Since the narrowing is basically in effect only during redisplay, it > > doesn't help with commands that use display code outside of redisplay > > proper. For example, C-n, C-v, C-l, and other commands are still > > extremely sluggish in files with long lines. E.g., try the file > > long-line.xml mentioned here: > > > > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45898#80 > > Did you actually try the patch? Yes. > > Also, the automatic restriction is very visible and causes surprising > > effects: (point-min) and (point-max) evaluate to the narrowed region (so > > it's basically very hard to know the real size of the buffer), and > > scrolling through the buffer causes the scroll-bar thumb move in a > > non-monotonic manner: I scroll towards the end of the buffer, but the > > thumb sometimes jumps back up, as if I moved towards the beginning. > > Indeed. Users will see the "Auto-Narrow" indication in the modeline with > which they can easily find an explanation for that behavior. If this > behavior is problematic, it could be fixed by using the dimensions of the > whole buffer when updating the scroll bar (and perhaps also the modeline), > when auto-narrow-mode is active. I think it should be fixed, yes. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 10:30:16 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 14:30:16 +0000 Received: from localhost ([127.0.0.1]:51197 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8jZ9-0006py-Ni for submit@debbugs.gnu.org; Tue, 05 Jul 2022 10:30:16 -0400 Received: from heytings.org ([95.142.160.155]:53726) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8jZ4-0006pg-Bw for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 10:30:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657031409; bh=DMXiPcafvvu3TXmijbSSfKvYd/9XRMJtQ645M3g7Tew=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=NnRHVgBGVIF3SNrEYJbr9e8pFCeGhL+cKhBfwFoVKbdLN/e1rawFoznvDblrsjLWN Nh6m0yBbJ+pxu5JpB6gYx0O9eXeL5n/2ZG2rOjyyOrwfLDKHILYOoCoVIKs71QQr18 1UC7sReh8jsjSmM+aYl61PZ2E8DzjSLObv1yd1l65gpsQUQ1Zy1JDsgYT9wzYJbK5K a7H4hTOcT+VaI01vfcsvwLdW7F4yG1svLPT9Q84gYEeAnvUqW2owAL7XbOdTWdulDT mYKQLioiGwasocBfvqiaUQVP8dcpTCGRji80XforOp1XQSNRgNjPVXYE3Mdfwad3KX pzJdRkF+ejN9A== Date: Tue, 05 Jul 2022 14:30:08 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <835ykb8x3z.fsf@gnu.org> Message-ID: <38c1a310403dbabc7270@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > I did try this, and it does happen. Here: > > (with-temp-buffer > (insert-file-contents "long-line.xml") > (point-max)) > > (where long-line.xml is the file whose URL I've shown in my message). > This gives me 30001, whereas the correct value is 306666. > That's of course not what I meant with "in practice". What I meant is: are there actual uses of "(with-temp-buffer (insert-file-contents ..." which insert actual files with sufficiently long lines? Such files are not so common. As I said, if that's the case, it's easy to add a "(let ((auto-narrow-long-line-threshold nil))" around the code, in this case either in the with-temp-buffer macro or in the code above. > > I think it will happen quite a lot in the wild. > Let's see if it does before reaching a conclusion. > > That means the list will be very long and users will have to constantly > update it. E.g., whenever they install a new package or even a new > version of a package. > Packages can take care of this by themselves, can't they? When the package is loaded, (add-to-list auto-narrow-widen-automatically the-package-command). >>> Also, the automatic restriction is very visible and causes surprising >>> effects: (point-min) and (point-max) evaluate to the narrowed region >>> (so it's basically very hard to know the real size of the buffer), and >>> scrolling through the buffer causes the scroll-bar thumb move in a >>> non-monotonic manner: I scroll towards the end of the buffer, but the >>> thumb sometimes jumps back up, as if I moved towards the beginning. >> >> Indeed. Users will see the "Auto-Narrow" indication in the modeline >> with which they can easily find an explanation for that behavior. If >> this behavior is problematic, it could be fixed by using the dimensions >> of the whole buffer when updating the scroll bar (and perhaps also the >> modeline), when auto-narrow-mode is active. > > I think it should be fixed, yes. > Okay, I'll see what I can do. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 11:21:44 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 15:21:44 +0000 Received: from localhost ([127.0.0.1]:51285 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8kMy-0008A8-79 for submit@debbugs.gnu.org; Tue, 05 Jul 2022 11:21:44 -0400 Received: from mail-wr1-f43.google.com ([209.85.221.43]:44807) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8kMw-00089u-Gt for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 11:21:42 -0400 Received: by mail-wr1-f43.google.com with SMTP id bk26so2974611wrb.11 for <56393@debbugs.gnu.org>; Tue, 05 Jul 2022 08:21:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version:content-transfer-encoding; bh=Zo2/aF03JiODL6OTvDpdlf5TdZ6dPEDuSHA8WI0IbBU=; b=GUWKjDsOl0sawo/jqqfMVxzDw/wG4kuxA3ASyeIJD+OBDODAS+tk6wxXBiAqotKgBG EzH82oLhHcN+iw2tRO/wGo7SivBI5HgUE/HGugUZyAtpRM98r6sIMjh/dpxmp52B24N6 PoZEdZDzu/b0sYzIMsmgA/aiOiLAF9VqOqWUbMWSv61Tiv2j5Di7d8NbLlu0Z3r7p1YN i0kKcC3cdxUXdKAynOk5Lutie7XnPM2By2DXadM9IsjQ8JqyEGp3bmUO0W03byAi8OZ4 CyW0sEEqYnLTouWiGhCmAL99DAlTaoeV0Y6QiFqyrb/QJxm+wJmCbEIIX3RQig93AaU6 Alqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version:content-transfer-encoding; bh=Zo2/aF03JiODL6OTvDpdlf5TdZ6dPEDuSHA8WI0IbBU=; b=SWuTfJGNMRW1zP704yUafRHjReR7RLhMP5/47t7nxG+GgwCTPY9tBTEuDMmKNAj07c G2/+2u2hQQCnarlipBRcaAK13oDSZnXrqjJaYgd1sY0ZPMeF/wFYTPFiVGLc4LpPuwdW pgTW8o/6SKyvPs16/VqWOk+5AXWnVpqNga4eU2MxW7Yx43nR8mRgWlqmpbAJwYqeE+Y0 cpPLjXOPxqrFtWqi8MBmXiViFqg1JNRPLFZZRFztWvc/dpJ/olnlyRu4UGnBYstjKeek 5niocFGTbvs0pRY2oPOc+ioWJtiiLPsYaegjUHDUvM9N19Ab8r+UcpJLZhndP6A+CEOi Uyyg== X-Gm-Message-State: AJIora+5IKRkTA2cv9dqmLiu5dTkT5bbNop6cj0DKiApPUGqIKf9zCWP 7m4HTeIZkt7HWhUmreUQpzsusnzDOQQ= X-Google-Smtp-Source: AGRyM1t0KiUCHDA4ZHgjrab44dqh8vVv13WNqbghpIndksKTZi3EsqBY5leLsYZdJhoHQA4n8XHf5w== X-Received: by 2002:a5d:6443:0:b0:21d:4a15:29ce with SMTP id d3-20020a5d6443000000b0021d4a1529cemr22300332wrw.645.1657034495999; Tue, 05 Jul 2022 08:21:35 -0700 (PDT) Received: from rltb ([2a01:e0a:3f3:fb50:7c37:9e2a:e0d4:8386]) by smtp.gmail.com with ESMTPSA id p17-20020a5d48d1000000b0021d63da245bsm9062251wrs.97.2022.07.05.08.21.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 08:21:35 -0700 (PDT) From: Robert Pluim To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <38c1a310403dbabc7270@heytings.org> (Gregory Heytings's message of "Tue, 05 Jul 2022 14:30:08 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> Date: Tue, 05 Jul 2022 17:21:34 +0200 Message-ID: <871quzio01.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >>>>> On Tue, 05 Jul 2022 14:30:08 +0000, Gregory Heytings said: >>=20 >> I did try this, and it does happen. Here: >>=20 >> (with-temp-buffer >> (insert-file-contents "long-line.xml") >> (point-max)) >>=20 >> (where long-line.xml is the file whose URL I've shown in my >> message). This gives me 30001, whereas the correct value is 306666. >>=20 Gregory> That's of course not what I meant with "in practice". What I = meant Gregory> is: are there actual uses of "(with-temp-buffer (insert-file-c= ontents Gregory> ..." which insert actual files with sufficiently long lines? = Such Gregory> files are not so common. As I said, if that's the case, it's = easy to Gregory> add a "(let ((auto-narrow-long-line-threshold nil))" around th= e code, Gregory> in this case either in the with-temp-buffer macro or in the co= de Gregory> above. .newsrc.eld can have very long lines (mine is 2.7M, for only 21 lines). You break Gnus we=CA=BCll be coming for you with pitchforks =F0=9F= =99=82 (although I think gnus uses `read', not `insert-file-contents') Robert --=20 From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 11:46:57 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 15:46:57 +0000 Received: from localhost ([127.0.0.1]:51351 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8klN-0000PN-8M for submit@debbugs.gnu.org; Tue, 05 Jul 2022 11:46:57 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39890) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8klK-0000PA-RD for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 11:46:55 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:59790) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8klF-0000wz-H0; Tue, 05 Jul 2022 11:46:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=0lYCcn2Ry+0w5WBh3R2vfVM7ZIPVrrK4TAATTNcYoek=; b=oGN3ROLd72wM fC3Uag3h9vsdJ40MOBi1A7ZKtHNsPvnAR6MHYf5mkCjDdWFDzFl2AYN2JCY/XDQav8g+I1ltnky4g hlmV9xX3IDcayeLeLjyXwkpbbGuneJC87+W7Fj5QR8bKzEOTK66V2aWRrItESPETIZ8nizNMXCc/J KwwUWGxJDfK72lip0iZ6mBkk5cwBo2FfC2oXuo6U9n1n3q591m3oCQWSrKFAcxMxi02sGZl/D6csa fgqeom9sk4N58wSCoPvqyP/SgiMUg6qrrS9iAv+DDY4eRAOtUnkwbOs9EPdPPVgFLoEuqSBCH5v9t kY89sj+sXz5FwHg84Dlv/Q==; Received: from [87.69.77.57] (port=3144 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8klE-0005Y2-0I; Tue, 05 Jul 2022 11:46:48 -0400 Date: Tue, 05 Jul 2022 18:46:39 +0300 Message-Id: <834jzv8sv4.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <38c1a310403dbabc7270@heytings.org> (message from Gregory Heytings on Tue, 05 Jul 2022 14:30:08 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 05 Jul 2022 14:30:08 +0000 > From: Gregory Heytings > cc: 56393@debbugs.gnu.org > > > > (with-temp-buffer > > (insert-file-contents "long-line.xml") > > (point-max)) > > > > (where long-line.xml is the file whose URL I've shown in my message). > > This gives me 30001, whereas the correct value is 306666. > > > > That's of course not what I meant with "in practice". What I meant is: > are there actual uses of "(with-temp-buffer (insert-file-contents ..." > which insert actual files with sufficiently long lines? Such files are > not so common. JSON files are quite frequently like that, for example. (One of the files mentioned in bug#45898 is such a file.) > As I said, if that's the case, it's easy to add a "(let > ((auto-narrow-long-line-threshold nil))" around the code, in this > case either in the with-temp-buffer macro or in the code above. These macros are called a lot, and I don't think it's a good idea to tell all their callers to make such changes. > > That means the list will be very long and users will have to constantly > > update it. E.g., whenever they install a new package or even a new > > version of a package. > > Packages can take care of this by themselves, can't they? When the > package is loaded, (add-to-list auto-narrow-widen-automatically > the-package-command). I don't like this. And neither will package maintainers, I think. I think we should try to work out a solution that only affects the C code in the display engine, such that any Lisp called from the various hooks and places in display code is not affected, and neither are pre-command-hook and post-command-hook. That should have almost the same effect, performance-wise, but be much safer than the automatic narrowing that affects everything in Emacs as long as the narrowing is in effect. IOW, replace all BEGV and ZV in display code with a couple of new macros, which effectively "narrow" the buffer, as far as the display engine is concerned. Then set the limits of this restriction in redisplay_window, and remove it when the window's redisplay is done. Or something along these lines. > >>> Also, the automatic restriction is very visible and causes surprising > >>> effects: (point-min) and (point-max) evaluate to the narrowed region > >>> (so it's basically very hard to know the real size of the buffer), and > >>> scrolling through the buffer causes the scroll-bar thumb move in a > >>> non-monotonic manner: I scroll towards the end of the buffer, but the > >>> thumb sometimes jumps back up, as if I moved towards the beginning. > >> > >> Indeed. Users will see the "Auto-Narrow" indication in the modeline > >> with which they can easily find an explanation for that behavior. If > >> this behavior is problematic, it could be fixed by using the dimensions > >> of the whole buffer when updating the scroll bar (and perhaps also the > >> modeline), when auto-narrow-mode is active. > > > > I think it should be fixed, yes. > > > > Okay, I'll see what I can do. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 12:22:02 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 16:22:02 +0000 Received: from localhost ([127.0.0.1]:51398 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8lJK-0003Ur-Gl for submit@debbugs.gnu.org; Tue, 05 Jul 2022 12:22:02 -0400 Received: from heytings.org ([95.142.160.155]:53856) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8lJH-0003UR-Qx for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 12:22:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657038118; bh=6FTyfxtAtPfp2yKm6a+8LD98XP9UwTd4snRu2zlVLzE=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=c1hmXCODh1DPUkmI3r45SGdAZLiSgXCb6+kGKFr7C1TYrZbXZVgzu2PKAmGiJRaUR aWub8Rjg46TW+lYBlkyoJDA6/yhtIGjiZFWQq44WJtw4DgPbWrqNUrNcOXyn6oRMyu p1mLJi3ifASEnenaz6ietA64b0zFiiCvAUpdweJf+QwWUme103wDexKPivrF+5EVeL i6WLJKHien/TfpkLP6XXPRWtyTjZkIPHYpvVUhXw/TMfjs3IgsBp8MgkntY4RV1OPE awX8L5d39t+p57hIn6P0mVBox/C94HRMhyp1CMVQmcm5InogAnM0w2dvbyDiWLQhed roZrKD9hmVckg== Date: Tue, 05 Jul 2022 16:21:57 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <834jzv8sv4.fsf@gnu.org> Message-ID: <38c1a31040ba2976eb4d@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> As I said, if that's the case, it's easy to add a "(let >> ((auto-narrow-long-line-threshold nil))" around the code, in this case >> either in the with-temp-buffer macro or in the code above. > > These macros are called a lot, and I don't think it's a good idea to > tell all their callers to make such changes. > As I said, this can also be done inside the with-temp-buffer macro. A (very quick) review of calls to insert-file-contents in Emacs core and ELPA tells me that that the majority of these calls are inside a with-temp-buffer or with-current-buffer (with a temporary buffer). > > I think we should try to work out a solution that only affects the C > code in the display engine, such that any Lisp called from the various > hooks and places in display code is not affected, and neither are > pre-command-hook and post-command-hook. That should have almost the > same effect, performance-wise, but be much safer than the automatic > narrowing that affects everything in Emacs as long as the narrowing is > in effect. > > IOW, replace all BEGV and ZV in display code with a couple of new > macros, which effectively "narrow" the buffer, as far as the display > engine is concerned. Then set the limits of this restriction in > redisplay_window, and remove it when the window's redisplay is done. Or > something along these lines. > I guess this means, in essence, to throw away the patch? Or do I interpret what you wrote too negatively? From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 12:35:03 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 16:35:03 +0000 Received: from localhost ([127.0.0.1]:51422 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8lVu-0003pI-4A for submit@debbugs.gnu.org; Tue, 05 Jul 2022 12:35:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53046) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8lVe-0003oW-DO for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 12:35:01 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34264) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8lVY-0000UO-SQ; Tue, 05 Jul 2022 12:34:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=JsAFHSIxRvr5NVhSI8W7IyLAO9fQJxeLGv4LXJl98/0=; b=PX+yyUZ5Vjqw 50ruek0jlPUAxU2l61TQyw1Us76qOyxTEmCcqvc6q7ioTlidVA9/OvWJIit+w8aFT2oASJ6WuILZO CHakyeb3xQdoBGRk9uvQx+K0msUzak2Bd4QpN3YpWkU5tLyALFypBsJjwhEYrdOgZi78S12FeFxoN gGzkfppDCZrcomATw8OF7RHeMNHoJQksrDcWJ94JfCE7DZafrULDWm7vLhZ683TJLP83fGwI4OQRz cU3GAcVjBkjmK2UcEAQTYTrT6Vd47qYRsYR4GpDbcmiy/UD4Av4mvjM7/IC+d8slt5sHdNv0PQqdV RDabcYECQq2XlsW3qqc9tA==; Received: from [87.69.77.57] (port=2406 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8lVX-0001lB-RJ; Tue, 05 Jul 2022 12:34:40 -0400 Date: Tue, 05 Jul 2022 19:34:31 +0300 Message-Id: <83y1x77c2w.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <38c1a31040ba2976eb4d@heytings.org> (message from Gregory Heytings on Tue, 05 Jul 2022 16:21:57 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 05 Jul 2022 16:21:57 +0000 > From: Gregory Heytings > cc: 56393@debbugs.gnu.org > > > >> As I said, if that's the case, it's easy to add a "(let > >> ((auto-narrow-long-line-threshold nil))" around the code, in this case > >> either in the with-temp-buffer macro or in the code above. > > > > These macros are called a lot, and I don't think it's a good idea to > > tell all their callers to make such changes. > > > > As I said, this can also be done inside the with-temp-buffer macro. A > (very quick) review of calls to insert-file-contents in Emacs core and > ELPA tells me that that the majority of these calls are inside a > with-temp-buffer or with-current-buffer (with a temporary buffer). with-current-buffer can be legitimately called to insert stuff into a buffer that is displayed. The macro doesn't know. > > I think we should try to work out a solution that only affects the C > > code in the display engine, such that any Lisp called from the various > > hooks and places in display code is not affected, and neither are > > pre-command-hook and post-command-hook. That should have almost the > > same effect, performance-wise, but be much safer than the automatic > > narrowing that affects everything in Emacs as long as the narrowing is > > in effect. > > > > IOW, replace all BEGV and ZV in display code with a couple of new > > macros, which effectively "narrow" the buffer, as far as the display > > engine is concerned. Then set the limits of this restriction in > > redisplay_window, and remove it when the window's redisplay is done. Or > > something along these lines. > > I guess this means, in essence, to throw away the patch? Or do I > interpret what you wrote too negatively? It means I think the idea is good, but the main part of the implementation should be on a different level, not using narrowing, which has a too global effect. But I'd like to hear more opinions, including from Gerd. I didn't think about this long enough to be sure I'm right. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 19:10:13 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 23:10:13 +0000 Received: from localhost ([127.0.0.1]:51915 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8rgK-0005rF-T8 for submit@debbugs.gnu.org; Tue, 05 Jul 2022 19:10:13 -0400 Received: from quimby.gnus.org ([95.216.78.240]:48964) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8rgF-0005qw-TW for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 19:10:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=3rSZDfcoxo1mZRND25+98RJkrmMFpVE7liCfeyT05h0=; b=WBuFEEy6FWwdXYkLuVtGZMOcsz aeT7D6GsdaxfP8av+6gsAgR2Svs6UzWvYzY2/np2TAzp6AZOkO24gNHs9xQpK0xcw23khtjWENwXo MaQYFXXlaC3H2dlDHirg+MFq6ZEMHep3ZuXQTnMER/wj8OdHXfJqe7hxsf0l8o8+eeZ0=; Received: from [84.212.220.105] (helo=joga) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8rg5-0006t2-Ik; Wed, 06 Jul 2022 01:10:00 +0200 From: Lars Ingebrigtsen To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83y1x77c2w.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 05 Jul 2022 19:34:31 +0300") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> X-Now-Playing: Kraftwerk's _Computer World_: "Home Computer" Date: Wed, 06 Jul 2022 01:09:56 +0200 Message-ID: <87k08rkvgb.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Would it be feasible to combine Gregory's work here with the new ticks code? That is, not enabling the new mode by default in all buffers, but if we've registered that a particular window has generated a lot of ticks, then we check the buffer for long lines and then enable the [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Would it be feasible to combine Gregory's work here with the new ticks code? That is, not enabling the new mode by default in all buffers, but if we've registered that a particular window has generated a lot of ticks, then we check the buffer for long lines and then enable the mode in that buffer. I.e., postpone enabling the mode until we see that we need it. That should make most programmatic usages not trigger the mode. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 19:10:16 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 23:10:16 +0000 Received: from localhost ([127.0.0.1]:51918 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8rgO-0005rX-3F for submit@debbugs.gnu.org; Tue, 05 Jul 2022 19:10:16 -0400 Received: from heytings.org ([95.142.160.155]:54300) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8rgN-0005rQ-1S for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 19:10:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657062613; bh=U5kRJRlCUuC3DZR6woWMoNH84kkCn8TExKWexPiYMuU=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=kGZmrxryRU8wHLjKyGbvKjuQL9QwBt7WEgl6Ri3CgJ8eVQ9Tr4LouZKTXdZienTtl C+JH88U7HTK3klWy16jMLTe/78QIfG+Hs2pNiuAZesTmSgzJNuli47X80m0b47n08V KN5V0O7k9gxvXSubCLvLtgxktMOBAZHSax6ynjtIY9OydlIK4Xd4iozhs9A4QHQyAz O0teH8DSYbmY1Lxz68bPCrFhwu5xk2SpiPV4OTBMhgR/aYfmIY6iXSB2g9ANfhdl65 BGKriWQZtBPMTHl/YpwVW7N56J8fv4F6rO1ytwOFXEoazYxsTRas+O/CZ7cZj+LA91 oR4GyxpHzcOyQ== Date: Tue, 05 Jul 2022 23:10:12 +0000 From: Gregory Heytings To: 56393@debbugs.gnu.org Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83y1x77c2w.fsf@gnu.org> Message-ID: <38c1a31040a5b59ba27f@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , Eli Zaretskii , Lars Ingebrigtsen X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Okay, I've now pushed an improved version of the patch to the feature/fix-the-long-lines-display-bug branch. A few additional comments: Auto-narrow mode is now entered only when the buffer is actually displayed, which solves the problem of (with-temp-buffer (insert-file-contents ...) ...) and friends. The scroll bar and modeline now display information relative to the whole buffer. Instead of the command list in auto-narrow-widen-automatically, a symbol property could also be used, which would perhaps be easier to manage for users and package maintainers. That being said, in most cases buffers with very long lines will typically be opened literally, so advanced editing commands will not be available anyway. The auto-narrow-pre-command-function and auto-narrow-post-command-function could perhaps be moved before pre-command-hook and after post-command-hook, but even if that were the case the buffer that functions in pre-command-hook and post-command-hook would see would still be, in most cases, the narrowed one. I think it might make sense to automatically disable font-lock-mode when auto-narrow is entered, as it seems to be the cause of the remaining display slowdowns, and it is not an essential editing feature. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 05 19:12:47 2022 Received: (at 56393) by debbugs.gnu.org; 5 Jul 2022 23:12:47 +0000 Received: from localhost ([127.0.0.1]:51923 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8rip-0005vS-Gi for submit@debbugs.gnu.org; Tue, 05 Jul 2022 19:12:47 -0400 Received: from heytings.org ([95.142.160.155]:54316) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o8rio-0005vL-KT for 56393@debbugs.gnu.org; Tue, 05 Jul 2022 19:12:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657062766; bh=N1RaThNkoqAHIZRWua8cF9g2llqjRvCMBxTHfeszCNI=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=2o3kZGya+ElX3EEHxpevOp5gm0175k3HVUge4hQlLl/be1+3TA3rVFT5NDXiT3U9f VpPZWHRsmMJ1AwR4eu7QVWt12DARLJ0BBb0qeuL5TfPrAr3lvfhGqLoKEhaglK+92z zeWkSoTKbjqyLT/yVa18pz43S2OPpxE98WSntnqdyKYkR4jUrACk06KeySz5gpgUOg rRSrrWrqBtLIXWWQKp7ahke9XJsO/xf74eJt4hE7xqKyU/4bZ/24yEJMSVwvAwzqKQ jmTZRMuMyrDDA2dJ5Qg9b4HakzkMPK2bFyd4kYTTt66G34qVRW7fbZ496iZP24/4RA 9hjjYnRYfyZPA== Date: Tue, 05 Jul 2022 23:12:45 +0000 From: Gregory Heytings To: Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <87k08rkvgb.fsf@gnus.org> Message-ID: <38c1a31040e94458bd3d@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Would it be feasible to combine Gregory's work here with the new ticks > code? > > That is, not enabling the new mode by default in all buffers, but if > we've registered that a particular window has generated a lot of ticks, > then we check the buffer for long lines and then enable the mode in that > buffer. > > I.e., postpone enabling the mode until we see that we need it. That > should make most programmatic usages not trigger the mode. > Our mails crossed each other: the problem of programmatic usages is now solved AFAICS. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 05:50:04 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 09:50:04 +0000 Received: from localhost ([127.0.0.1]:52396 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o91fY-0001kQ-4i for submit@debbugs.gnu.org; Wed, 06 Jul 2022 05:50:04 -0400 Received: from mail-ed1-f41.google.com ([209.85.208.41]:45908) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o91fV-0001jp-HK for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 05:50:02 -0400 Received: by mail-ed1-f41.google.com with SMTP id g1so10918689edb.12 for <56393@debbugs.gnu.org>; Wed, 06 Jul 2022 02:50:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version; bh=q3zthbe6lxKlXJe8Q36/dd0rxusIsP3syM4X4U+bJcI=; b=VexlcP4qZkNiO6WUCTfAC4V2tWnVEUcLr6q5vuHy7UE/kzCZM8lGOS72qSDFHje2kG ScDR7D5DuPXuutJT3kv6gcHQdYSjDZLHWplZSl20X7wTaMmIsyAIzMBh0DlS0bY1HTII rmB5JLqfQC/8Vhyb7cEmhDh5AuXZh9/SP5MtMMJzGSR94soLZDHYdwmJdHPAs3yKXqP0 pbG4uf0jnkmgXe6oOmKYuBBZMPJj7kAQmct6SEovWShLZ6DGHFkVsl27WMr6GHKuMTrs hKAJaDtS0NCEsSjwczWR71LSxw6C2YMA3ORfcPAJjvl5U8hMaAk5J4XZ+rL6FbAdOhjP aRQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version; bh=q3zthbe6lxKlXJe8Q36/dd0rxusIsP3syM4X4U+bJcI=; b=uBGpBOfd3teehCYcNikXLLafU9mNhNRJUdk1Vsf9lnoRsyOdXQ/XKVHBTrdq5gHVIP rE4mOQ1pA898UVag8GxZz5rl+RKrBuZsucPUsYcNm/qsH7lnRHJrYKiAcPXt+/UpppFJ w8r4T4MhbXlEXdvoJJwTKymoEgOphpX8Hx8m4PMV4tj66cuNUxPpzytjpSI6mD5l9doK OGX7quC2SslwQCaS4yTIG/ismncNeGx2rGmIQbl36L57Qtw9pKhW2rVfHm83A/k75bjs xAWoAvoVtVMo1XXBNqiklcCBcDbUhbc5VtNRYp3FF/eO2PybrWfKXfKNR3IY5SsU2Tjv xF1w== X-Gm-Message-State: AJIora/AAeh2OpJ5AIo7ZsrfZrDaz71U/XvkHkxtkyx2CH5j1H/DP8Ht AV69M+9v6n92fzREte2RhlY= X-Google-Smtp-Source: AGRyM1sPQMGxnNPH5Q4Far9hesOjRI8hHBBXNt7fhA1tSdsmUj4ZXgmYfRMEbZRBOE0Xbj0tB0QqHw== X-Received: by 2002:aa7:df83:0:b0:43a:4b96:f126 with SMTP id b3-20020aa7df83000000b0043a4b96f126mr22669644edy.309.1657100995401; Wed, 06 Jul 2022 02:49:55 -0700 (PDT) Received: from Mini.fritz.box (pd9e36b5b.dip0.t-ipconnect.de. [217.227.107.91]) by smtp.gmail.com with ESMTPSA id g26-20020a056402115a00b0043a52eda27esm6821002edw.9.2022.07.06.02.49.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Jul 2022 02:49:54 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <38c1a31040a5b59ba27f@heytings.org> (Gregory Heytings's message of "Tue, 05 Jul 2022 23:10:12 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> Date: Wed, 06 Jul 2022 11:49:53 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: > Okay, I've now pushed an improved version of the patch to the > feature/fix-the-long-lines-display-bug branch. Just to give some progress feedback - I've got the branch and will take a closer look ASAP, probably tomorrow. >From a brief look - very nice! Thank you, Gregory! From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 06:22:19 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 10:22:19 +0000 Received: from localhost ([127.0.0.1]:52571 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o92Ah-0002jd-52 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 06:22:19 -0400 Received: from heytings.org ([95.142.160.155]:54854) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o92AQ-0002iy-Md for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 06:22:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657102917; bh=YcLs7LOPCutLEYVmt6p7w74U9wB2JnorBZrAVMHM0GA=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=nB9PeDZfzinVR9W/YDVAzklgjW3U5T/rFpyIET5KvB/2yD7lhwjPe/ZC8bNQ3xgR7 SE7oIPE7kraV5UWTeGW1Rn+KIFrg16eoelY5O/9ZFCGyk44RoPCYJNdDqXt+vj+if7 n0nsOFpksCd1Qj+CnwoCzBmJvmRb9rWEEXeMWCg3lzALh/sXOMpO4aNiwOXuqOsRY6 2NRA3TFJ40aLgDHvPfCqfAlP9uVTbHFcQhS6nwraviF4BfcZVO13NmvcPedY1J1WoZ SVQeP57A8bS/XnhMsFNiT08SxxZNmv8Rirdi+wBv5i4eIrpnLzPvhHZMiPWROOV34R +8XEEXxa2bNTQ== Date: Wed, 06 Jul 2022 10:21:56 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: <762d22480993e01f5426@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="sojGjoAI1u" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --sojGjoAI1u Content-Type: text/plain; format=flowed; charset=utf-8 Content-Transfer-Encoding: quoted-printable >> Okay, I've now pushed an improved version of the patch to the=20 >> feature/fix-the-long-lines-display-bug branch. > > Just to give some progress feedback - I've got the branch and will take= =20 > a closer look ASAP, probably tomorrow. > > From a brief look - very nice! > > Thank you, Gregory! > Thank you! =F0=9F=98=83 I've made a few more improvements, in particular I added a=20 auto-narrow-hook which, by default, turns font-lock-mode off. Now even=20 opening the dictionary.json file non-literally (that is, with JavaScript=20 mode enabled) works smoothly. --sojGjoAI1u-- From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 07:32:00 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 11:32:00 +0000 Received: from localhost ([127.0.0.1]:52677 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o93GC-0004dF-6g for submit@debbugs.gnu.org; Wed, 06 Jul 2022 07:32:00 -0400 Received: from quimby.gnus.org ([95.216.78.240]:53992) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o93GA-0004Xz-Vg for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 07:31:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=bk9cX+DFEnZZbFlxB44S5LetwOh4gEsRFMC5WgzdHsQ=; b=UyBdTlodnaxqeKuJwOcjSmLqd9 5IZzRD7lpwbg0JNAq10dmZ73GLKvtQaMaZN7ke9OnlnwiyBveQDC+iwIRCAMuOGMmxwA6WpQbVl1q 6p0helHDmyNf5Kr8R1VtdxfzIE7x5HCtkZyVngb96tLYxt7M0OP3sLXYM2m23qpgYUo0=; Received: from [84.212.220.105] (helo=joga) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o93G0-0004j4-5t; Wed, 06 Jul 2022 13:31:50 +0200 From: Lars Ingebrigtsen To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <38c1a31040a5b59ba27f@heytings.org> (Gregory Heytings's message of "Tue, 05 Jul 2022 23:10:12 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAD1BMVEU8LjurpJ+SamPy 8e3///9OwGRvAAAAAWJLR0QEj2jZUQAAAAd0SU1FB+YHBgsaFD0gELQAAAF4SURBVDjLhZON0ewg CEWRNCDYAJIGNPbf2wOMu+7f95jdGeMBgSsC/DJaC7VfZcmMqnW0J0BEKZVTNqBn3oMTJz6KR6ju QJSh0Oio+AKwCUIl7QexqgD/r6o0Nmt21HeQBMpXgAJ15abNMvxh4xgj9zLquKxWrV5rzQtYS2lc anKh7aN1cYNIfpG3zLKBBooGCoMBFZ0gOZAJ5ANAdeCy0tJ2AvSIMwC/Aq/q9D3/ywPIBF2nPUBm sKOaJxdE68ZB+SWJAQHqZEfZoKiPi+KMQK/aqwI0EB95RUxJEjqy3OFa5r6BVh0QlU7yls+mBESw LNeR4z6vN7fjAdRHCW265ulPUOlHxHkBCVcfBq9ri2BYy5L35IXeQfuIqC8RVsy9bPXXyGn0q0to 96ULyd5QDG08uHRNEKLLVKsE6DdwF4gB4u4q2HUGyNWBXy6Sae15xEFm9a7xrorYdVvJQ8r9LUaE 6rb5YZE0Xs/zokY/XKsW4yLfwXf7B+AAVYKTs451AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTA3 LTA2VDExOjI2OjIwKzAwOjAwbK271QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wNy0wNlQxMToy NjoyMCswMDowMB3wA2kAAAAASUVORK5CYII= X-Now-Playing: Latin Quarter's _Mick and Caroline_: "Love Has Gone" Date: Wed, 06 Jul 2022 13:31:47 +0200 Message-ID: <877d4qlboc.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Gregory Heytings writes: > Auto-narrow mode is now entered only when the buffer is actually > displayed, which solves the problem of (with-temp-buffer > (insert-file-contents ...) ...) and friends. Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: Gerd =?utf-8?Q?M=C3=B6llmann?= , Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Gregory Heytings writes: > Auto-narrow mode is now entered only when the buffer is actually > displayed, which solves the problem of (with-temp-buffer > (insert-file-contents ...) ...) and friends. Great! I think that'll take care of the vast majority of potential problems in this area. I've now tried the branch with a couple of files that Emacs currently chokes on, and it seems to work well -- for instance, with the dictionary.json file, I can search for "aan zich" and then edit the JSON with the normal commands like `C-M-k' to kill a sexps -- which is totally impossible on the current trunk. There's some slight hangs when `C-s'-ing the file, but none that last longer than a second or two. (Perhaps that has something to do with `C-s' trying to add highlights to all the matches?) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 08:13:22 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 12:13:22 +0000 Received: from localhost ([127.0.0.1]:52760 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o93uD-0008ND-VU for submit@debbugs.gnu.org; Wed, 06 Jul 2022 08:13:22 -0400 Received: from heytings.org ([95.142.160.155]:54988) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o93uB-0008N5-IK for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 08:13:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657109598; bh=fO+v3PQaJWDOHLUSD70ZAhsBdp/zlTX9yMq9OscISlM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=KrX7nQS/I/LseiFhi8CeB3CAGh1IxSaL0ymoSg/SdtH9EMGr2qX66K96Muh1XtRns puIPU5zM6JrPt9tOe+ZJgYiXY6B5S21WeAh104Ee9DmXdumhLo5RNB46dmgbBqdMcB q4qZHH8dHYajsJGmkzveOvj+Yd7wYjpPMlCcxucAoFeBis9VY9IowwShaKTq5hgbPU kP9g6RIZwDKYPiML1w/M+y0bTQWhIZGKatN+A1T8RJLDRs8SCAElNt9M1aQOrK8JBZ fNDYZ1S2CRo+bVN7mnEB+8K6VA1iNrzSRmoSkhZt2NIn01u8Am1vDt7trbhRi3S6TI /llWaF0NvGHGw== Date: Wed, 06 Jul 2022 12:13:18 +0000 From: Gregory Heytings To: Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <877d4qlboc.fsf@gnus.org> Message-ID: <762d2248092ba9ada552@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <877d4qlboc.fsf@gnus.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Thanks for your feedback! > > There's some slight hangs when `C-s'-ing the file, but none that last > longer than a second or two. (Perhaps that has something to do with > `C-s' trying to add highlights to all the matches?) > Indeed. I want to preserve normal editing experience as far as possible, so I did not touch these values so far. I tried the four possible t/nil combinations for search-highlight and isearch-lazy-highlight, and setting isearch-lazy-highlight to nil improves Emacs' response time in such cases. Also setting isearch-highlight to nil is better, but only slightly. I'll see what I can do. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 08:30:04 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 12:30:04 +0000 Received: from localhost ([127.0.0.1]:52778 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94AM-0000N7-Q1 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 08:30:04 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51702) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94AK-0000MS-3G for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 08:30:01 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44566) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o94AE-0007ZA-Ld; Wed, 06 Jul 2022 08:29:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=TLDntMBNWLmmkLgXlMJ5YokB4iORKIOoGyHkK7MX/uk=; b=k1B0yNECQZpU AvGOqK0pi17b1U0f2Z8pU4kr3OV5MNesBBtRC76XEB0Gs1ZYXwzpSp8Q5JD7zfN4LmBfoB5xByyia D1FEbnOpceYIEKC/EEHoMmaqmKKh++pbwC9nJ20C3bLz+pTtam2rKzEDhulz+N9XQZmctcbnpZnYf SZEb5vun9QJY1W6OqtRyIg0fvuVnV696O00+zfYw3swPvIc2k9/+62wS6n9Nvc9Lj9IGBclRnLxCB CSkO7F1fRDu0xl6WbzAa2qLhAwJGTtdVa/ePCALcDJnAWxmntPTuFGek6oX23749aLinjHyXdmK2O BhPoTNpaq6RuYF+D0c2k2Q==; Received: from [87.69.77.57] (port=3861 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o94AE-0000Tj-4Z; Wed, 06 Jul 2022 08:29:54 -0400 Date: Wed, 06 Jul 2022 15:29:47 +0300 Message-Id: <83o7y277b8.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <38c1a31040e94458bd3d@heytings.org> (message from Gregory Heytings on Tue, 05 Jul 2022 23:12:45 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 56393@debbugs.gnu.org > Date: Tue, 05 Jul 2022 23:12:45 +0000 > From: Gregory Heytings > > > > > > Would it be feasible to combine Gregory's work here with the new ticks > > code? > > > > That is, not enabling the new mode by default in all buffers, but if > > we've registered that a particular window has generated a lot of ticks, > > then we check the buffer for long lines and then enable the mode in that > > buffer. > > > > I.e., postpone enabling the mode until we see that we need it. That > > should make most programmatic usages not trigger the mode. > > > > Our mails crossed each other: the problem of programmatic usages is now > solved AFAICS. Thanks, it's definitely better now. However, not all the issues with Lisp programs are gone, AFAICT. At least the hooks called from redisplay, like window-scroll-functions, still see a narrowed buffer. Functions that are run by timers will also see a narrowed buffer. I think we should decide what kind of feature this one is supposed to be. Is this really the full and complete solution of the long-line display problems, or is this just a way to prevent Emacs from being sluggish/not responsive by any means deemed necessary? If this is supposed to be the complete solution, such that we don't need any others, then it shouldn't interfere with editing and shouldn't disable useful features such as font-lock, shouldn't make commands a no-op (as it does now with 'recenter'), and shouldn't get in the way of Lisp code that expects to have access to the entire buffer when it has no reason to expect narrowing. IOW, it should affect only the display code and nothing else. It is also possible and useful to have a partial solution, which makes redisplay perform reasonably well at a price of disabling some features and commands, and perhaps breaking some code out there. But then IMO it can no longer be the only such feature; instead, it is one of several alternatives that attempt to unwedge redisplay by taking different kinds of measures, each one with its advantages and disadvantages. As a notable example, if someone needs to search or edit a large single-line JSON file, longlines.el currently sounds no worse, and possibly better, than auto-narrow-mode, because it doesn't disable font-lock and doesn't narrow the buffer, thus cannot affect Lisp hooks and programs that aren't prepared for this narrowing. Other solutions we have each one has advantages in other situations. IOW, we can only consider valid use cases as "unimportant" or "rare enough" if we are implementing yet another way of trading editing and text-processing capabilities and features for responsiveness. The complete solution, by contrast, should cover _all_ the valid uses, and should allow the user to use Emacs _as_usual_, without losing any features, when files have very long lines. (Here "valid" means basically any useful Lisp program that doesn't intentionally crash or infloop.) If we cannot or don't intend to provide such a complete solution, we should have several ones, and let the users choose what is best for them in each situation. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 08:39:58 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 12:39:58 +0000 Received: from localhost ([127.0.0.1]:52795 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94Jy-0002nD-0R for submit@debbugs.gnu.org; Wed, 06 Jul 2022 08:39:58 -0400 Received: from eggs.gnu.org ([209.51.188.92]:57238) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94Jw-0002n0-Bk for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 08:39:56 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44696) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o94Jq-0003jG-Gc; Wed, 06 Jul 2022 08:39:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=u4fxdEDxawldYCsdW4H3WwVlkGkj/QYrZzPNvDPx1Zo=; b=p1raGAdJlHSe0elEhwdE uXhhN8DOsUn0vcEmD7+G2rCVxnrnUVVR0BkOu9rA0vuCnTEYSbVacaOuiuTNtdE86Wb0JoNxSdZob K24CNvROmvcsCSgeyFfLZmTz8f8+aUEVgcZ5SfxaHMneFEy5RHi+dUzUXEGEOvhRjubkgvx+rtPhr ab2OXXnYWl/9dpzNC26awDTUP5QYBkMblm9ogQDjtBVhukDhsF1DuN1GT7yGkhYiGIDemAj/ItbiH zeLZyCzc8HjKC1YEwiZKmstWK8gh7lUat4eV/22NjULehECfjbM5AF+3LRu8rr6fnCUkuFMBN1JAO 5BaFBw+QqL0fXQ==; Received: from [87.69.77.57] (port=4464 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o94Jq-0006TT-0l; Wed, 06 Jul 2022 08:39:50 -0400 Date: Wed, 06 Jul 2022 15:39:43 +0300 Message-Id: <83mtdm76uo.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <38c1a31040a5b59ba27f@heytings.org> (message from Gregory Heytings on Tue, 05 Jul 2022 23:10:12 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 05 Jul 2022 23:10:12 +0000 > From: Gregory Heytings > cc: Eli Zaretskii , > Gerd Möllmann , > Lars Ingebrigtsen > > Auto-narrow mode is now entered only when the buffer is actually > displayed, which solves the problem of (with-temp-buffer > (insert-file-contents ...) ...) and friends. > > The scroll bar and modeline now display information relative to the whole > buffer. > > Instead of the command list in auto-narrow-widen-automatically, a symbol > property could also be used, which would perhaps be easier to manage for > users and package maintainers. That being said, in most cases buffers > with very long lines will typically be opened literally, so advanced > editing commands will not be available anyway. > > The auto-narrow-pre-command-function and auto-narrow-post-command-function > could perhaps be moved before pre-command-hook and after > post-command-hook, but even if that were the case the buffer that > functions in pre-command-hook and post-command-hook would see would still > be, in most cases, the narrowed one. One problem I spotted with the current branch is that it's still sluggish when commands are repeated very fast. For example, visit the long-line.xml file, then lean on C-n or arrow -- you will see that this gets back to the very slow responses after traversing several lines. By contrast, pressing C-n one keystroke at a time, even if I do that as fast as I can (say, 5 keypresses per second) performs much faster. The autorepeat rate on this system is about 30 per second. And this is an unoptimized build, in case it matters. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 08:44:31 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 12:44:31 +0000 Received: from localhost ([127.0.0.1]:52799 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94ON-0002vl-Kn for submit@debbugs.gnu.org; Wed, 06 Jul 2022 08:44:31 -0400 Received: from heytings.org ([95.142.160.155]:55026) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94OK-0002va-GK for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 08:44:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657111467; bh=ZV+q50vu126sfEq31uT5LepuK1uTmZC9kzSTbmIEGHA=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=jWVUbpE6aoIsDyzehz3Cmy3EkroXRq4qFYp3S16RsOHPl7lOgNdhjrBBimJMs9i5x aY0iVhR1Kc0vIX3nT+jARuYaXGcy6w3Bi6xTI5zk/lkbTWB2hwbComLRSCDDWcW9Qx 9hluE1Wf2AYD5dDfQuS90PWE7C5i/xmo+3L2THnS6vyrXk3K7et7v/uMRXpn3HzUiW a7BRb5FL7v4yUvRd0gHHAKv4q0JnDI3Hi0Gf9l/mjN74p5cxgO5K+3tp/5/N9D9rvR twlzfCkusC6xAeFTSrJGKyz/wq6AMnj7HOaUx0VxhpjKZaG7kOsMGpvHHnxokn4/73 VodFJfWKYUZZw== Date: Wed, 06 Jul 2022 12:44:26 +0000 From: Gregory Heytings To: Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <762d2248092ba9ada552@heytings.org> Message-ID: <762d224809560620fece@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <877d4qlboc.fsf@gnus.org> <762d2248092ba9ada552@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> There's some slight hangs when `C-s'-ing the file, but none that last >> longer than a second or two. (Perhaps that has something to do with >> `C-s' trying to add highlights to all the matches?) > > Indeed. I want to preserve normal editing experience as far as > possible, so I did not touch these values so far. I tried the four > possible t/nil combinations for search-highlight and > isearch-lazy-highlight, and setting isearch-lazy-highlight to nil > improves Emacs' response time in such cases. Also setting > isearch-highlight to nil is better, but only slightly. I'll see what I > can do. > I just pushed a change to the feature branch which should improve isearch in that case. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 08:50:37 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 12:50:37 +0000 Received: from localhost ([127.0.0.1]:52809 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94UH-00038T-30 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 08:50:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59850) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94UF-00038E-Ih for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 08:50:35 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44754) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o94U9-0001yE-Sn; Wed, 06 Jul 2022 08:50:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=+Ae4co4NwV7WZvqZ3lAFDe40sz7adMK/v/ywhaZqpXY=; b=oeK27OmSZ8903+0/AHTf d68GqBzNT56KkeCIsex6oWkmcEMSMbnNk6PXiVdkKbbevhX9tsiPr0ajtTyhb6ghUgxPe2Rb/hgbt APusMtJ3aHAoep08T6UQajcIGxjNkWm3rpGrd0/CGA6vf5/ll4wAe+HDCHzEVzCWoMeRlx7EYLTqr xOqXGyNOGBorOY/kOa0bSmcxM2udMWVagCquQTb1VEh6tV8Hv15nrGDAOzHAOxCxWbE2i3Ch/MrMs XSlKFrW4TbHaQMew04qfuVV7YR5xTQwIqGslwr9UIyV067XIXTwBeT8r4dJUBE8h4rd1b1XHHEpWV fBJSdipuC2avhw==; Received: from [87.69.77.57] (port=1145 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o94U4-0007Uf-8w; Wed, 06 Jul 2022 08:50:27 -0400 Date: Wed, 06 Jul 2022 15:50:18 +0300 Message-Id: <83k08q76d1.fsf@gnu.org> From: Eli Zaretskii To: Lars Ingebrigtsen In-Reply-To: <877d4qlboc.fsf@gnus.org> (message from Lars Ingebrigtsen on Wed, 06 Jul 2022 13:31:47 +0200) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <877d4qlboc.fsf@gnus.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, gregory@heytings.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Lars Ingebrigtsen > Cc: 56393@debbugs.gnu.org, Eli Zaretskii , Gerd > Möllmann > > Date: Wed, 06 Jul 2022 13:31:47 +0200 > > There's some slight hangs when `C-s'-ing the file, but none that last > longer than a second or two. (Perhaps that has something to do with > `C-s' trying to add highlights to all the matches?) If this was in an optimized build, it is worth investigating, IMO: second or two is quite long for an optimized build. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 09:01:43 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 13:01:43 +0000 Received: from localhost ([127.0.0.1]:52824 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94f1-0003RP-0M for submit@debbugs.gnu.org; Wed, 06 Jul 2022 09:01:43 -0400 Received: from heytings.org ([95.142.160.155]:55052) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94ez-0003RF-4D for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 09:01:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657112499; bh=xjI7JMuvywuatKY1h1XbFSa5BtTwLcjWfQcl16ld7JI=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=a0XLbjGTaCmN0Xj6vuwjhqhR5p1tiqe4INwYxpivHbqEBKnQThQKqQTsM+X/3K05o aVG32gmnao8/aUeHdEp7aHOQLD0Wsxv047X51x7hdj2XkClvJyudMJpbNq3gIQ7EPs QGkLdeRm0rv5ybUoGZNShAKEh6bd/gAaNet5NAzCkI2EVnW98WDXrfQMSuzSUvSyuu c6PTTn9ZpuTRvTJHUai/ryU66L6qWFVgGaO4TpLT4woTFzUdb1P2VlAVI6x9qEruSP MiWJRC2MdhxuTsggnENtVD2HNplc3ZPeAxBqQAbEaJgH2l3O8Lxyas4BarXB3jh5Ij cotYFnekopLbg== Date: Wed, 06 Jul 2022 13:01:39 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83o7y277b8.fsf@gnu.org> Message-ID: <762d224809bcab0d6bbc@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > I think we should decide what kind of feature this one is supposed to > be. Is this really the full and complete solution of the long-line > display problems, or is this just a way to prevent Emacs from being > sluggish/not responsive by any means deemed necessary? > As far as I can tell, it's a full and complete solution, which makes a few compromises (as few as possible). > > If this is supposed to be the complete solution, such that we don't need > any others, then it shouldn't interfere with editing and shouldn't > disable useful features such as font-lock, > Font locking is as far as I can see the main reason why Emacs is still a bit sluggish in such cases. Font locking is surely a useful feature, but it's not essential to edit a file. And users who for some reason prefer not to disable font locking can do so by removing turn-off-font-lock-mode from the auto-narrow-mode hook. > > shouldn't make commands a no-op (as it does now with 'recenter'), > It's not no-op, it's no-op when if and only if it is called on a temporarily widened buffer when auto-narrow-mode is on. So you can still use C-l as usual everywhere. > > and shouldn't get in the way of Lisp code that expects to have access to > the entire buffer when it has no reason to expect narrowing. > Lisp code that expects to have access to the entire buffer is typically embedded in a (save-restriction (widen) ...) form, isn't it? Or IOW, Lisp code that expects to have access to the entire buffer without being embedded is such a form has a bug, isn't it? From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 09:06:29 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 13:06:29 +0000 Received: from localhost ([127.0.0.1]:52833 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94jc-0003ZE-Q7 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 09:06:28 -0400 Received: from heytings.org ([95.142.160.155]:55080) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94jb-0003Z6-CK for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 09:06:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657112786; bh=Q9Nyuu6puMvG2j/pIF/P+rprCqwcnD7JERPj48tlGcE=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=heav7lBzOQ65iBiRqgPJheqSdPnodV+AJCwXS3WoEPK5+IkWARgdXiHcBJNxpF/AJ whLO2/d+m2fSsUkfwNnhxFdTjlX9I9pcc+A9QdVaXT9lbdyIeMI4r+Y8BiNOhl5Gf7 CyTISwyOt9vlN9qZfTOoVVoFBq8NupJSYT7EfWUSWYSgOd/0HcMKuKvsWGBk0MaH20 ndmP0U2m1bcQ1VOD7jSXNP8eNV/aDmDNZFSdRapmp3/oa5KkoFRazSXKBLS6KploUi y6DwWTOZnlsylBhcuAraIeH/FTob8IDqiVNXaxxZqeDMuWSV4Lu099+G4rsrc5zx3e rky0SzBfWciaA== Date: Wed, 06 Jul 2022 13:06:26 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83mtdm76uo.fsf@gnu.org> Message-ID: <762d224809ba5a4b1337@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > One problem I spotted with the current branch is that it's still > sluggish when commands are repeated very fast. For example, visit the > long-line.xml file, then lean on C-n or arrow -- you will see > that this gets back to the very slow responses after traversing several > lines. By contrast, pressing C-n one keystroke at a time, even if I do > that as fast as I can (say, 5 keypresses per second) performs much > faster. > I don't see that. On my seven year old laptop, Emacs remains responsive, and commands are executed instantaneously. Did you try M-x find-file-literally? If you don't see the slowdown with M-x find-file-literally, it's a slowdown due to the major mode (in this case nXML). From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 09:16:55 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 13:16:55 +0000 Received: from localhost ([127.0.0.1]:52843 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94tj-0003pm-2L for submit@debbugs.gnu.org; Wed, 06 Jul 2022 09:16:55 -0400 Received: from smtp-1.orcon.net.nz ([60.234.4.34]:47261) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o94tg-0003pd-Pq for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 09:16:54 -0400 Received: from [10.253.37.70] (port=45020 helo=webmail.orcon.net.nz) by smtp-1.orcon.net.nz with esmtpa (Exim 4.90_1) (envelope-from ) id 1o94tN-0004XZ-Mr; Thu, 07 Jul 2022 01:16:33 +1200 Received: from ip-116-251-140-135.kinect.net.nz ([116.251.140.135]) via [10.253.37.253] by webmail.orcon.net.nz with HTTP (HTTP/1.1 POST); Thu, 07 Jul 2022 01:16:33 +1200 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Thu, 07 Jul 2022 01:16:33 +1200 From: Phil Sainty To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <877d4qlboc.fsf@gnus.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <877d4qlboc.fsf@gnus.org> Message-ID: <01d4369f802989ba53ac3a9f4a522589@webmail.orcon.net.nz> X-Sender: psainty@orcon.net.nz User-Agent: Orcon Webmail X-GeoIP: -- X-Spam_score: -2.9 X-Spam_score_int: -28 X-Spam_bar: -- X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , Lars Ingebrigtsen , Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Gregory, Thanks for this. I've only had a brief play, but it looks like a very useful approach. I can cause it to glitch by visiting a large file and leaning on the page down key. After a little while it fails to widen, and I'm left in some narrowed portion of the buffer until I use a command which re-triggers it. I have vague misgivings about the fact that it doesn't care about the file type or major mode, as it triggers for binary files which are already handled safely by their major mode (images, archives, docview, and anything else). I say "vague" because I also didn't observe any problems with such examples -- but I don't know whether that is guaranteed to be true for all file types. It's not clear to me how seamless this feature is (partly because I've not had a chance to examine it in detail -- but I won't be able to do so any time soon). I see an explicit list of supported commands in the code though, and I worry about that. Surely(?) we can't insist that all commands (if not functions generally?) which need to deal with the full buffer (including all the custom code out there in users' configs) should be updated to make them explicitly aware of this new mode? That doesn't seem maintainable to me, and I can only imagine it causing lots of problems. I always imagined a final resolution for this issue being something that didn't necessitate code changes by users. Is that really needed? As you're already attacking this in C code, couldn't the widening and re-narrowing happen automatically for everything? I'm (perhaps naively) imagining that the narrowing might just happen for the duration of each redisplay cycle. Obviously there is some overlap with so-long.el which is a framework for "doing a thing" (out of a collection of possible things) if long lines are detected, and auto-narrow-mode could certainly be the new default thing to do; so I'm wondering whether or not there's any benefit to integrating the two things. So-long is conservative in when it triggers by comparison, partly to be confident of not causing unwanted issues, and partly by necessity because its default action (a major mode) is very disruptive; but its decision making can be made more aggressive. I always saw so-long.el as a band-aid until a real fix arrived, so there may not be any need for any integration if its purpose has been served. It would seem possible to do, though, and so if there are drawbacks of any significance with this new approach then I'd be inclined to suggest that so-long and longlines would still have a place, and integrating the new tool into the existing toolkit would be a good thing. -Phil From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 09:26:02 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 13:26:02 +0000 Received: from localhost ([127.0.0.1]:52863 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o952Y-00045Z-0j for submit@debbugs.gnu.org; Wed, 06 Jul 2022 09:26:02 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40234) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o952V-00045D-KW for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 09:26:00 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45794) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o952P-00065q-Jj; Wed, 06 Jul 2022 09:25:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=zZtGcpWeHWNKmX48BSGiar+mBfekieWjU6zfLBukVr4=; b=OGqiICiH1wNO Dh460uM357oe63CtaUVpU/sO+Ed+4YuY9sQlyihAtGsZHFHY8g6UJHFQllkfcapvSICoXTDEOSeul jc/yoZlXTyP5ReZUIEiVmZBTYhg2odZvZv9UI05IXCJi25g15CuEWBFsHso/N4jT+kACqGodFW1X+ YZoIKrAeFsmDXg7ZqdNoFpefKUaitfVQJf/SKK/8Bo67nFjHIuz1qZavFHToD0IBjoc6PHx4A3hZX ZRf3v5m1xAIO6U1PYupZiBZ/7q7ublNHqZxAW97jc0ALKxMusQUQUO+jMrr9PEcFKxPmxLMRfLoJG yXC3HXr34jaGZVfoJzVnjQ==; Received: from [87.69.77.57] (port=3310 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o952M-0006oq-Kr; Wed, 06 Jul 2022 09:25:52 -0400 Date: Wed, 06 Jul 2022 16:25:44 +0300 Message-Id: <83fsje74pz.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <762d224809bcab0d6bbc@heytings.org> (message from Gregory Heytings on Wed, 06 Jul 2022 13:01:39 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 06 Jul 2022 13:01:39 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > > I think we should decide what kind of feature this one is supposed to > > be. Is this really the full and complete solution of the long-line > > display problems, or is this just a way to prevent Emacs from being > > sluggish/not responsive by any means deemed necessary? > > As far as I can tell, it's a full and complete solution, which makes a few > compromises (as few as possible). Depending on the compromise, that might or might not qualify as a full and complete solution. Font-lock is a very important feature, so disabling it sounds like a heavy price to pay. Especially since I don't understand why: if the buffer is narrowed to 30K characters, why should font-lock be unable to cope? > > If this is supposed to be the complete solution, such that we don't need > > any others, then it shouldn't interfere with editing and shouldn't > > disable useful features such as font-lock, > > Font locking is as far as I can see the main reason why Emacs is still a > bit sluggish in such cases. Font locking is surely a useful feature, but > it's not essential to edit a file. Well, I disagree it's non-essential. > And users who for some reason prefer not to disable font locking can > do so by removing turn-off-font-lock-mode from the auto-narrow-mode > hook. I'm talking about the defaults here. The defaults should allow editing without sacrificing important features (and ideally without sacrificing anything). Otherwise, this isn't a solution, it's a workaround. Which is also fine, but we should recognize it as such. > > shouldn't make commands a no-op (as it does now with 'recenter'), > > It's not no-op, it's no-op when if and only if it is called on a > temporarily widened buffer when auto-narrow-mode is on. So you can still > use C-l as usual everywhere. It shouldn't be a no-op under any circumstances. It's an important command. > > and shouldn't get in the way of Lisp code that expects to have access to > > the entire buffer when it has no reason to expect narrowing. > > > > Lisp code that expects to have access to the entire buffer is typically > embedded in a (save-restriction (widen) ...) form, isn't it? No, not necessarily. Lisp code that doesn't expect to find narrowing simply does nothing about narrowing. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 09:32:36 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 13:32:36 +0000 Received: from localhost ([127.0.0.1]:52869 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o958t-0004Fz-Vs for submit@debbugs.gnu.org; Wed, 06 Jul 2022 09:32:36 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41918) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o958s-0004Fl-8U for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 09:32:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45928) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o958m-0007Ow-Pi; Wed, 06 Jul 2022 09:32:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=6wnZLM5cIwnUwAoFNaQ8/fYzbY6FAmaJo8AQk35gWaQ=; b=ibDhL1QIMXUD kdCHpc+1H8lq3IaoDzqRkPdhhlkgET0c4rlZm11UkNm7Nen3O0u4nfvHlSWp2hdWE/eHCjEie2syv NTAEBsP6KN+7XsrIlgMCFBr+NKK8z1I3wrh+Zipb0Nd1yYQJ/MLozC41plP5fFp3mcuIwf8I+53z5 VcR7SWgmbSjlRd93WafSHAP+j3hK/26DXZvcmb7hq301HlGrXok1nrfC9fww7PsXpuJsSfHwKbSz3 PO7J36kY85u3nXoToECRzJ16RCX6FSHMoOsINJbmPTWLDejxX8RXUSPh1ZqU+wwQZtvDBYwO7ZPGQ 8jJ3j18dOZ187Si0CaXClA==; Received: from [87.69.77.57] (port=3717 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o958m-00044Q-8U; Wed, 06 Jul 2022 09:32:28 -0400 Date: Wed, 06 Jul 2022 16:32:23 +0300 Message-Id: <83czei74ew.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <762d224809ba5a4b1337@heytings.org> (message from Gregory Heytings on Wed, 06 Jul 2022 13:06:26 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 06 Jul 2022 13:06:26 +0000 > From: Gregory Heytings > cc: 56393@debbugs.gnu.org, gerd.moellmann@gmail.com, larsi@gnus.org > > > One problem I spotted with the current branch is that it's still > > sluggish when commands are repeated very fast. For example, visit the > > long-line.xml file, then lean on C-n or arrow -- you will see > > that this gets back to the very slow responses after traversing several > > lines. By contrast, pressing C-n one keystroke at a time, even if I do > > that as fast as I can (say, 5 keypresses per second) performs much > > faster. > > I don't see that. On my seven year old laptop, Emacs remains responsive, > and commands are executed instantaneously. Did you try M-x > find-file-literally? If you don't see the slowdown with M-x > find-file-literally, it's a slowdown due to the major mode (in this case > nXML). I see the same if I visit literally, just after leaning on C-n longer. It starts happening around 15% into the file. And I don't think I understand what the major mode has to do with this. How do you think a major mode can affect C-n when font-lock is turned off? Here's the profile of leaning on C-n, in case it's useful: 1082 94% - command-execute 1082 94% - call-interactively 1077 93% - funcall-interactively 1076 93% - next-line 1076 93% - line-move 418 36% - line-move-partial 3 0% - pos-visible-in-window-p 2 0% - eval 2 0% if 1 0% file-remote-p 2 0% + window-screen-lines 2 0% + default-line-height 1 0% posn-at-point 1 0% - window-inside-pixel-edges 1 0% + window-edges 265 23% line-move-visual 1 0% + execute-extended-command 5 0% + byte-code 64 5% + ... 1 0% + undo-auto--add-boundary From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 09:35:16 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 13:35:16 +0000 Received: from localhost ([127.0.0.1]:52873 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95BU-0004KR-GH for submit@debbugs.gnu.org; Wed, 06 Jul 2022 09:35:16 -0400 Received: from mail-pj1-f54.google.com ([209.85.216.54]:40936) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95BS-0004KA-2L for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 09:35:15 -0400 Received: by mail-pj1-f54.google.com with SMTP id g16-20020a17090a7d1000b001ea9f820449so20395433pjl.5 for <56393@debbugs.gnu.org>; Wed, 06 Jul 2022 06:35:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=+wptvAdly474K3Ymz8K37gFTumYiFbGAstpqq/1TxUs=; b=4y4KqAWG5AS5mLRkp02Y1Y8kHW3tQe/wpK9Bna4UGijqxje90DEwf1qKA3VES6ZDyD JLGGw7tnjTCnvO9tsVpZIs/4HZyuj7tpOW9H1MOGZAwhIKoaHrQQSqJZXurE8UYq6kHd PNO8KbuFFISxcAJ+8wKILAKSD3/rnyjnrb16Rt+Gk8IZpt6/kBfCSrsW8/fsjzLl7SEc c7tcfM8PiO7D398SAH6PZtSQLEpI7XvIvpts6lJb8Dd8uDgkx9bU5Z9miP5DltHebMFn vmKQ9ZcjvC0Q2QhkuV/JiQSWQwD+Vef84vVjwgbwd1iWQJ5Fn2YwciwrMRHui0MV1duI 663Q== X-Gm-Message-State: AJIora9vpbSpeAJ+A22iuCkvRN3Jud9EZOe4Co8uwuFoIqFNIifFnt1l T5GhjwyuGxQVi64+R9/GTRyJkCgDqGm+QghJmX4= X-Google-Smtp-Source: AGRyM1sjeLoaV+e94x5O/u2ZsA3NMWWcWNqhoDQmHbdMS69FAmdo6FLWc3Zu8LT7O2Q7kVd+dj8bZ6FHq0F0Jc5C0nE= X-Received: by 2002:a17:90b:896:b0:1ef:935c:f326 with SMTP id bj22-20020a17090b089600b001ef935cf326mr13795789pjb.193.1657114508350; Wed, 06 Jul 2022 06:35:08 -0700 (PDT) MIME-Version: 1.0 References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> In-Reply-To: <762d224809bcab0d6bbc@heytings.org> From: Stefan Kangas Date: Wed, 6 Jul 2022 15:34:56 +0200 Message-ID: Subject: Re: bug#56393: Actually fix the long lines display bug To: Gregory Heytings Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.5 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.5 (/) Gregory Heytings writes: > As far as I can tell, it's a full and complete solution, which makes a few > compromises (as few as possible). [...] > Font locking is as far as I can see the main reason why Emacs is still a > bit sluggish in such cases. Surely, a full and complete solution should make *no* compromises, not even with secondary features. (And preferably be completely transparent to Lisp.) From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 09:45:32 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 13:45:32 +0000 Received: from localhost ([127.0.0.1]:52881 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95LQ-0004ai-L1 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 09:45:32 -0400 Received: from heytings.org ([95.142.160.155]:55140) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95LN-0004aX-QK for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 09:45:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657115128; bh=Rha2UZi5FViNhFMQKFIyMR5pO/QUgN++C5YZSbxPALs=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=VHvN9RHSaBu/DevYUnreUxvK/wY6A3NLxJVNxMsQX8/igmsykaFytbWmBfMSGdrGu g8e6zhXqj7yvvVf7p4Be9OObHxlGkLm1DufungANsrMBzvTp1LIXGYj0m4qrkmHfFe 7QGf9t4UwTbFAXi1AOfRQ7vQ10oCPfY3VaFrwpCr3OhZOt3wicwzzI4gLDzG+Pnket V9IbIlZHlIjVPg3rNnld0DxnlxIfRIojndf0MqedHGtJGz5LjCK8ZHS24C7JvOHBL9 k2gJeXOTl1AC2wdwyCexeGk4N1vmLZeY4MCzjLnfJC4y5AzdGUV3GRGRB+cxkZHyuV ONM55gYHIYFjA== Date: Wed, 06 Jul 2022 13:45:27 +0000 From: Gregory Heytings To: Phil Sainty Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <01d4369f802989ba53ac3a9f4a522589@webmail.orcon.net.nz> Message-ID: <762d224809b600ab6df5@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <877d4qlboc.fsf@gnus.org> <01d4369f802989ba53ac3a9f4a522589@webmail.orcon.net.nz> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , Lars Ingebrigtsen , Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Phil, Thanks for your detailed feedback. > > I can cause it to glitch by visiting a large file and leaning on the > page down key. After a little while it fails to widen, and I'm left in > some narrowed portion of the buffer until I use a command which > re-triggers it. > That probably means you have a very big frame, you should set auto-narrow-display-length to a larger value than its default one (30000). > > I see an explicit list of supported commands in the code though, and I > worry about that. Surely(?) we can't insist that all commands (if not > functions generally?) which need to deal with the full buffer (including > all the custom code out there in users' configs) should be updated to > make them explicitly aware of this new mode? That doesn't seem > maintainable to me, and I can only imagine it causing lots of problems. > This new mode isn't necessary for ordinary files, so it will be activated only rarely. That already means that it cannot cause "lots of problems". I think it's okay if it "breaks" a few commands, especially if the fix is only to add these commands to a list or to put a property on them. > > So-long is conservative in when it triggers by comparison, partly to be > confident of not causing unwanted issues, and partly by necessity > because its default action (a major mode) is very disruptive. > I see, so-long restricts its action to so-long-target-modes, is that correct? I'm not sure such a restriction is necessary for auto-narrow-mode, it does not change anything apart from turning font-lock-mode off (by default) and narrowing the buffer. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 09:56:10 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 13:56:10 +0000 Received: from localhost ([127.0.0.1]:54749 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95Vh-0005OL-Ob for submit@debbugs.gnu.org; Wed, 06 Jul 2022 09:56:10 -0400 Received: from heytings.org ([95.142.160.155]:55170) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95Vg-0005OF-7a for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 09:56:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657115767; bh=cnv2CU7cyDummuVfXNldEpvhYD7m50grBvDxmnRZG4E=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=z0YoqPyJji+RufZsFzNr2gmhTtKoLw7wPR7tVSuCI4uu5oDDknj9rc7KAb1VOxeV0 Ha7ObSiWVeVRxMckr2q1JUBNGWipkDRh/2k5/7ZzUReA4MXqv6V8Q2f1IFaoBvcWpT ndG4x1Ry7gZEL5VTQno0Jh1tNJDdli8KoOiqacixDMKh9xrpsI6MCuUUFrDxKQR97T kp2bMtQ3FfO97eMrgUA6EeYKDR3//K+FoVl1auCrV+8sBEGHMHDgFjQb7zy/pY/GZ9 4EVe0gwRiOSsWLpkMT/m2L4OWU+KH6SRXTo5aP/weO2lmws6mCaj+t+Xa/WLMBojOH lGAW7Md+C7EuA== Date: Wed, 06 Jul 2022 13:56:06 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83fsje74pz.fsf@gnu.org> Message-ID: <762d224809bc038d2030@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Depending on the compromise, that might or might not qualify as a full > and complete solution. Font-lock is a very important feature, so > disabling it sounds like a heavy price to pay. Especially since I don't > understand why: if the buffer is narrowed to 30K characters, why should > font-lock be unable to cope? > I don't know. I only observe that it's often unable to cope with such cases. And this is outside of the scope of the long line display bug, it's (possibly) a font-lock bug (or an inherent limitation of font-lock). I can try to tackle that bug next, if you want. >> Font locking is as far as I can see the main reason why Emacs is still >> a bit sluggish in such cases. Font locking is surely a useful feature, >> but it's not essential to edit a file. > > Well, I disagree it's non-essential. > Okay. My opinion is that being able to edit a file normally without nice colors on its characters is way better than being unable to edit a file. But let's agree to disagree. >>> shouldn't make commands a no-op (as it does now with 'recenter'), >> >> It's not no-op, it's no-op when if and only if it is called on a >> temporarily widened buffer when auto-narrow-mode is on. So you can >> still use C-l as usual everywhere. > > It shouldn't be a no-op under any circumstances. It's an important > command. > It's never a no-op when it is used as a command. It can become a no-op when it is used internally by a command. >>> and shouldn't get in the way of Lisp code that expects to have access >>> to the entire buffer when it has no reason to expect narrowing. >> >> Lisp code that expects to have access to the entire buffer is typically >> embedded in a (save-restriction (widen) ...) form, isn't it? > > No, not necessarily. Lisp code that doesn't expect to find narrowing > simply does nothing about narrowing. > Narrowing has been in Emacs since about forever, so as far as I can tell functions that were written without taking the possibility that the buffer on display is narrowed into account, and that do not work anymore when the buffer is narrowed, have a bug. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:05:59 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:05:59 +0000 Received: from localhost ([127.0.0.1]:54761 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95fD-0005ez-Ja for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:05:59 -0400 Received: from heytings.org ([95.142.160.155]:55204) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95fA-0005eq-Tz for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:05:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657116355; bh=jEZzwS8BW7TFrscjpLZGsQS5BthXoTAuUTYYH49VA60=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=vxEFQ1Ustl7Ax987PQTrVzfCtuevdK3F0mrXXZm2haSjFbzmpl7Qa/e9eN64Uv+27 wq6vKLqudTk5E55E8glVzeGZ2YzLsIw3NuNDGQDNZYvXAJeA1pbefw5ET0MlWL86/0 V6CADrQfCxQNfsNax9zd3CDHv8jkxDdTHtAK4A1Aysug6ls6qxkH4ZIrwUtTJu70I1 I/Csl2N55Ehjb/vHwh3uobzyLmEgszvmxSCBSVZV7JU3m0NnbzcGQC6Tb7L9nJFlmX izQatNzjATAhpwjFT8dtcrZjGVsuPxgkURldkvt/Vh8o8xGoq317FsC40UTSMPey7y p8/uNrk6dK69w== Date: Wed, 06 Jul 2022 14:05:55 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83czei74ew.fsf@gnu.org> Message-ID: <762d22480901fd242010@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> <83czei74ew.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> I don't see that. On my seven year old laptop, Emacs remains >> responsive, and commands are executed instantaneously. Did you try M-x >> find-file-literally? If you don't see the slowdown with M-x >> find-file-literally, it's a slowdown due to the major mode (in this >> case nXML). > > I see the same if I visit literally, just after leaning on C-n longer. > It starts happening around 15% into the file. > I can't reproduce that. Is that with emacs -Q? What computer do you use? I see the same profile, but Emacs remains responsive. > > And I don't think I understand what the major mode has to do with this. > How do you think a major mode can affect C-n when font-lock is turned > off? > nXML adds rng-maybe-echo-error-at-point to post-command-hook. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:06:08 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:06:08 +0000 Received: from localhost ([127.0.0.1]:54765 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95fL-0005fm-Px for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:06:07 -0400 Received: from smtp-4.orcon.net.nz ([60.234.4.59]:52101) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95fH-0005fX-2J for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:06:06 -0400 Received: from [10.253.37.70] (port=48178 helo=webmail.orcon.net.nz) by smtp-4.orcon.net.nz with esmtpa (Exim 4.90_1) (envelope-from ) id 1o95f0-0006vj-L5; Thu, 07 Jul 2022 02:05:46 +1200 Received: from ip-116-251-140-135.kinect.net.nz ([116.251.140.135]) via [10.253.37.253] by webmail.orcon.net.nz with HTTP (HTTP/1.1 POST); Thu, 07 Jul 2022 02:05:46 +1200 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Thu, 07 Jul 2022 02:05:46 +1200 From: Phil Sainty To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <762d224809b600ab6df5@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <877d4qlboc.fsf@gnus.org> <01d4369f802989ba53ac3a9f4a522589@webmail.orcon.net.nz> <762d224809b600ab6df5@heytings.org> Message-ID: X-Sender: psainty@orcon.net.nz User-Agent: Orcon Webmail X-GeoIP: -- X-Spam_score: -2.9 X-Spam_score_int: -28 X-Spam_bar: -- X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , Lars Ingebrigtsen , Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 2022-07-07 01:45, Gregory Heytings wrote: > I see, so-long restricts its action to so-long-target-modes, > is that correct? That's correct. The so-long-predicate function determines whether to take action, but the predicate is only called in the first place if the buffer's major mode derives from one of the target modes. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:09:39 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:09:39 +0000 Received: from localhost ([127.0.0.1]:54770 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95il-0005ku-8V for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:09:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53266) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95ih-0005kc-NX for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:09:37 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46614) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o95ic-00070V-AH; Wed, 06 Jul 2022 10:09:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=3lJRUKnGg7Ajsd3KE3Hagwi5W0SFw/FXxKhF3e/cAJY=; b=n+ct44vrNpOd uwrmNO6tKbqxukGjnh5j4nqlirXCbddG+iRCHllnKhryvsGSmJcuHkr2+p+dHqD1k7+xkIJtKpFOE 6NAumPlPlLXr7S3ub1EN2/SUwuoazfZ+TAswlK+Zn4PzomWFTZ893caqSHfjzzg+5rPbPHcQyRrwB LF7fbtAeLhsxOlBEyTjL1vrcSYEnPeEYVB3mv+am/RDaG/5aFRK4k2lrGB5jblZksJ2WzBganVd0l GHrGOpzO1cn3XXah6p4EAneh3t5wrMF/lKkmQ7+iw5XlGZIOyKN+5YOMRU3E1kzuELMBzCC6S6qw9 LwgSkc7SY3wY7CbA8WKuBw==; Received: from [87.69.77.57] (port=2146 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o95ib-0002BR-Oa; Wed, 06 Jul 2022 10:09:30 -0400 Date: Wed, 06 Jul 2022 17:09:24 +0300 Message-Id: <838rp672p7.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <762d224809bc038d2030@heytings.org> (message from Gregory Heytings on Wed, 06 Jul 2022 13:56:06 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 06 Jul 2022 13:56:06 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > > Depending on the compromise, that might or might not qualify as a full > > and complete solution. Font-lock is a very important feature, so > > disabling it sounds like a heavy price to pay. Especially since I don't > > understand why: if the buffer is narrowed to 30K characters, why should > > font-lock be unable to cope? > > I don't know. I only observe that it's often unable to cope with such > cases. And this is outside of the scope of the long line display bug, > it's (possibly) a font-lock bug (or an inherent limitation of font-lock). > I can try to tackle that bug next, if you want. I think we must, because font-lock is run by the display engine, and if font-lock makes redisplay significantly slower, it's part of the same problem. > >> Font locking is as far as I can see the main reason why Emacs is still > >> a bit sluggish in such cases. Font locking is surely a useful feature, > >> but it's not essential to edit a file. > > > > Well, I disagree it's non-essential. > > > > Okay. My opinion is that being able to edit a file normally without nice > colors on its characters is way better than being unable to edit a file. Oh, we agree here: it's definitely way better. I'm just saying that a complete solution cannot force users to make such sacrifices. > >>> shouldn't make commands a no-op (as it does now with 'recenter'), > >> > >> It's not no-op, it's no-op when if and only if it is called on a > >> temporarily widened buffer when auto-narrow-mode is on. So you can > >> still use C-l as usual everywhere. > > > > It shouldn't be a no-op under any circumstances. It's an important > > command. > > It's never a no-op when it is used as a command. It can become a no-op > when it is used internally by a command. I understand. And that means some of those callers will work differently under auto-narrow-mode than they do without. Which is not a good thing to have. Why is 'recenter' at all relevant, btw? It isn't called by the display code, AFAIR, so why do we have to disable it? > >>> and shouldn't get in the way of Lisp code that expects to have access > >>> to the entire buffer when it has no reason to expect narrowing. > >> > >> Lisp code that expects to have access to the entire buffer is typically > >> embedded in a (save-restriction (widen) ...) form, isn't it? > > > > No, not necessarily. Lisp code that doesn't expect to find narrowing > > simply does nothing about narrowing. > > Narrowing has been in Emacs since about forever, so as far as I can tell > functions that were written without taking the possibility that the buffer > on display is narrowed into account, and that do not work anymore when the > buffer is narrowed, have a bug. I think there's a misunderstanding here: what these Lisp programs don't expect is to find narrowing that is different from what the user sees or expects top have. Narrowing is largely a user-level feature, so using it for internal purposes is problematic at best. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:10:22 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:10:22 +0000 Received: from localhost ([127.0.0.1]:54774 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95jS-0005md-La for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:10:22 -0400 Received: from heytings.org ([95.142.160.155]:55228) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95jR-0005mT-I5 for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:10:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657116620; bh=k2wUOGaNCzV8nnKV23y/KNeDa1SC48gcsHizLwLm8sA=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=xUp58nDFqz3hHTqPaE8Erkc2J60fT6OY8UP3wmJ6LEJLql0PyCpVIBURauP2yBghJ d9BBLAzjjsmbf+YV/aa0DxU02Y5LAMYhk0tXyOIy2XIXqBv70qbpT2OZm0R0JcO30j LjeTF5kslTfmnTIEU9sWhyVO7gFOh8ejpCky0KipYp65qHCADO/RHQzMHH7Xdv9WEh hLGh9fNZzWY4MP8s8GDtVfd8gKyRBT6VMuVeMo66Dy4XDlgZIuTnEjxr1nVvAgHKK5 m38Qr0LDchOA6yYZkyLbsQzn9pjzFEVp+LC6nLFVXjPsCZLmf45Wo9sHF5tuf2cyCw jr/PS5L85aBOg== Date: Wed, 06 Jul 2022 14:10:20 +0000 From: Gregory Heytings To: Stefan Kangas Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: <762d22480916ff973882@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Font locking is as far as I can see the main reason why Emacs is still >> a bit sluggish in such cases. > > Surely, a full and complete solution should make *no* compromises, not > even with secondary features. (And preferably be completely transparent > to Lisp.) > Perfect is the enemy of good. Emacs users have been plagued for decades by this bug, asking for a solution without any compromises is simply unreasonable. Even more so as the compromise is, in this case, to disable a feature that is outside of the scope of this bug. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:13:29 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:13:29 +0000 Received: from localhost ([127.0.0.1]:54780 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95mT-0005rM-23 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:13:29 -0400 Received: from eggs.gnu.org ([209.51.188.92]:54718) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o95mR-0005r6-EF for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:13:27 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46820) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o95mM-0000Qj-5z; Wed, 06 Jul 2022 10:13:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=NmQHCWUFnYCaDceSCZloraONkjaSc7IaYVtom/reFvw=; b=Ft5l5A2aXuvo 1xKazAivK8gV7A/SJYXjNyQkh/KTr/7YfU2rxuGXzv937S7iYYzJGr4Y/GmDBnYCzTYDbmHo9/6pm e9W5/zHFGLPWYtEgvLQf+XKncjSByCWK2mtbkEzyLuI6xYl2B0qp5y+wgP4WcwxpyVYoL+AfdkMzl OFKGLLtL4owH273er3C+ONBZhzeiH/yFbm9RgYceT5dD+lWtUU3HHPH7geMAdWhJfiSKGaqskaLdl I+Oda+AkfUud/orYrY8Zi7XSBRHcwnFFhV+dnAWaw3u/HeZoNug5oUpK46mPd0iP2uZ4WsBN0n2Fh RlF8NWH984FGAKTHp7NJ7Q==; Received: from [87.69.77.57] (port=2382 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o95mL-0002rY-Ka; Wed, 06 Jul 2022 10:13:21 -0400 Date: Wed, 06 Jul 2022 17:13:16 +0300 Message-Id: <837d4q72ir.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <762d22480901fd242010@heytings.org> (message from Gregory Heytings on Wed, 06 Jul 2022 14:05:55 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> <83czei74ew.fsf@gnu.org> <762d22480901fd242010@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 06 Jul 2022 14:05:55 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > >> I don't see that. On my seven year old laptop, Emacs remains > >> responsive, and commands are executed instantaneously. Did you try M-x > >> find-file-literally? If you don't see the slowdown with M-x > >> find-file-literally, it's a slowdown due to the major mode (in this > >> case nXML). > > > > I see the same if I visit literally, just after leaning on C-n longer. > > It starts happening around 15% into the file. > > > > I can't reproduce that. Maybe you need to make the file larger? > Is that with emacs -Q? Yes, of course. > What computer do you use? A 10-year old 3.4 GHz Core i7. My Emacs is slightly slower than normal because it's a 32-bit build --with-wide-int. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:27:52 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:27:52 +0000 Received: from localhost ([127.0.0.1]:54808 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o960O-0006FJ-A1 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:27:52 -0400 Received: from heytings.org ([95.142.160.155]:55256) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o960M-0006F9-8s for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:27:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657117669; bh=TLQEVYgXBYGH1hSliCO4mXq/wX6Hl94wBWXZvssStyA=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=kzCf7jKB2ckc7cTLnqpUV7H2LRSRu8lTGh3Jqv8YBUOmyYF7zhqx/F2pOOIL40YGW irLepJ/xZf1JgUccRwfNNh8PYMBVtlpO31oHw1iXlWobI6pKZcHw0IHjWIlgHzwi5b ORQPNNVB8PRHstrIjhUbFvpRylHlUJW13ezzIb28sXc09uLqgV06UfU+BTRTnMH1Az JAQw3Fi95vpMePXhBAapsqXezk5z6L0r1lfU6gDM1PuyDMZz6dokgXx9o9afSItFa1 +Im6WQ+KIJIV/cq1C4YdT0MU0JR+KWrk7jrdgUtE9FRdBpg1Em5akt5XOr6KUmptah ivyYaMzxH5sIw== Date: Wed, 06 Jul 2022 14:27:48 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <837d4q72ir.fsf@gnu.org> Message-ID: <762d224809a270411298@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> <83czei74ew.fsf@gnu.org> <762d22480901fd242010@heytings.org> <837d4q72ir.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="U1pzp6NzGC" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --U1pzp6NzGC Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable >> I can't reproduce that. > > Maybe you need to make the file larger? > How large? I can't reproduce it with the 20MB dictionary.json file, nor=20 with the 1GB hugedictionary.json. (But I didn't have the patience to lean= =20 on C-n to reach 15% in hugedictionary.json =F0=9F=98=89) > > A 10-year old 3.4 GHz Core i7. My Emacs is slightly slower than normal= =20 > because it's a 32-bit build --with-wide-int. > This may explain that. Because my laptop has 2.8 GHz Core i7 CPU, so it=20 should be slower. --U1pzp6NzGC-- From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:37:47 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:37:47 +0000 Received: from localhost ([127.0.0.1]:54821 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o969y-0006W5-U9 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:37:47 -0400 Received: from mail-pf1-f173.google.com ([209.85.210.173]:34347) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o969w-0006Vo-0u for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:37:45 -0400 Received: by mail-pf1-f173.google.com with SMTP id i17so5013713pfk.1 for <56393@debbugs.gnu.org>; Wed, 06 Jul 2022 07:37:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=itSp59eB6VTS8CdG4XNzOcZ/i79rMdElyuN6ORKa2fA=; b=nL+vjkb9R3AMawi+DoYeTZMQ+r6FzQ80dapp5AW9gYd9TM6Z83/1Mx3cNJpTlfwM16 65JxGTRlTdTNT0wz/cCgy5rboPdDwDaW0zMKUhEOLQEm23Y9a/fEy61sGEE9B5QOX9ap DaiBAwz8ojknE4N3irHWQZQ8Nf/9K4bEFTZML74D/kZIjOG2eqGOMR+/fJB+Ba798ESO X6tjvXFvRL72hqvWnd5xxwzfojOyzMrnh/e+4fvye/cp5V9F13wwM9K7bH83iiNkYPDl uuSQyIJ2kQscxrvrnRSu4SwYoPdmL49RM+GwaiFRqrbQEpnHeTgvAIDJbzpN3ov19VEd ayfA== X-Gm-Message-State: AJIora8MU9MKP23ZHh+euw7nKOJj8DQM87e3kgpFfX9HMGzVu5L21dc1 iXUNqcI8LvA9Oey9vV03dQcD8JlI/NNZUm360ig= X-Google-Smtp-Source: AGRyM1t6r4t/UZjBSIGe838omBQ1r9ibhMOesM72w6twRLw3UeUmDejFpmCgW8zTMWkbPYR5dJheVllk5kjmZ05iLiE= X-Received: by 2002:aa7:8e17:0:b0:528:9f8d:ad38 with SMTP id c23-20020aa78e17000000b005289f8dad38mr6629863pfr.4.1657118257658; Wed, 06 Jul 2022 07:37:37 -0700 (PDT) MIME-Version: 1.0 References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <762d22480916ff973882@heytings.org> In-Reply-To: <762d22480916ff973882@heytings.org> From: Stefan Kangas Date: Wed, 6 Jul 2022 16:37:26 +0200 Message-ID: Subject: Re: bug#56393: Actually fix the long lines display bug To: Gregory Heytings Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.5 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.5 (/) Gregory Heytings writes: > Perfect is the enemy of good. Emacs users have been plagued for decades > by this bug, asking for a solution without any compromises is simply > unreasonable. I'm not asking for more than what you have, which I believe everyone is very happy to see. I'm saying that Eli is correct in saying that we should not treat it as the full and complete solution. IME, other text editors doesn't choke on files with long lines, nor require you to disable any features. The full and complete solution will make sure Emacs doesn't either. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:41:12 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:41:12 +0000 Received: from localhost ([127.0.0.1]:54825 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o96DI-0006c3-Ed for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:41:12 -0400 Received: from heytings.org ([95.142.160.155]:55282) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o96DG-0006bs-NF for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:41:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657118469; bh=MZ0nBsn53Bzf47p3zkmCJQqcsKztcBW7xTnAaDSAYUY=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=yBDB6aa6ZidaKEoq1cycSr58Kgq4PS7MdCwFQWoBFyA8lIyghKjKomiMfylskXJJM hQS4ly0AiE16oFQWbenpsI/jOBzJsHnItfUF3TUvfMuDy77IOS1u8v67JdaVzQBE0G tkPnT7hY4h6CNzZ1LHFqtVieTFL8fAN4l/+9AvUkC5/hUcLqmw0X/y2EZxTCjdLuM+ jv053vyCbBXyodIOocEf9F1NnCUd4qt/x74y+VWKPQ42KeEOCoqUeXznRGSJdJBeqb zSbJ1SgKyKsczYIEFmfKEltch4yJer4rI52iyMOWqiIhj/Xehd+5H0YP2boriDPxpB pEEdMiIrKkuqg== Date: Wed, 06 Jul 2022 14:41:08 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <838rp672p7.fsf@gnu.org> Message-ID: <762d224809114fbaf4af@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > I think we must, because font-lock is run by the display engine, and if > font-lock makes redisplay significantly slower, it's part of the same > problem. > I disagree. It's not the redisplay part that make font-lock slower, but how it parses the buffer. So it's a different problem. > > Oh, we agree here: it's definitely way better. I'm just saying that a > complete solution cannot force users to make such sacrifices. > Users can reasonably expect and understand that in exceptional circumstances a non-essential editing feature is, by default, turned off, if the purpose of doing that is to maintain responsiveness. If you load a very big file in a browser (or for that matter in any application), it will become sluggish. Try to open the 1GB hugedictionay.json file with vim, nano, VS Code, Atom, and try opening it with the patched Emacs. (Atom is the only one that displays a warning: "Atom will be unresponsive during the loading of very large files. Do you still want to load this file?" If you proceed, Atom becomes unuseable.) > > Why is 'recenter' at all relevant, btw? It isn't called by the display > code, AFAIR, so why do we have to disable it? > Because commands in auto-narrow-widen-automatically might call "recenter" for aesthetic purposes. One example is end-of-buffer. Which means that what you have is (progn (widen) (recenter)), which takes a few seconds without fundamentally changing what is on display. > > I think there's a misunderstanding here: what these Lisp programs don't > expect is to find narrowing that is different from what the user sees or > expects top have. Narrowing is largely a user-level feature, so using > it for internal purposes is problematic at best. > Sorry, I don't get what you mean. Do you have a concrete example of a problematic function? A Lisp program that takes into account the possibility that the user uses narrowing and that needs to have access to the whole buffer will use (save-restriction (widen) ...). A Lisp program that requires the user to narrow the buffer to work properly will still work, because explicit narrowing can still be used with auto-narrow mode. What are the remaining possibilities? From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 10:47:49 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 14:47:49 +0000 Received: from localhost ([127.0.0.1]:54829 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o96Jh-0006nA-6N for submit@debbugs.gnu.org; Wed, 06 Jul 2022 10:47:49 -0400 Received: from heytings.org ([95.142.160.155]:55296) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o96JV-0006lt-50 for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 10:47:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657118855; bh=f+nqFUAuSE5JUUXz1yLusa/WuPy1HePFsFTXAuJ+3K8=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=vyQFqQLtlzP9DZFnlKx+Czz2Jf76Adds4bxn7w7yuXmYkmLeGn4SlDk0qtscR6YgU Zh9X69Z/kdneoV7Z7gWHDADzyo8gpKCUJNMgUWqSBk4W1Qf/o/bOsnATH+Ke4pYWGx JrT2z77TJg+rJU2GTnNhjM8YspYHIWhoHMTKalFK8ZqDHO6E+9rs6KoCKxDPkAxMAY EKQHqPu+IAyYlwZBhiUJi8jXjn6INF0sHyb+YAj+7SReJC8ramO0uDUr5NuMJdKvao 1MCeFsrdGadG8TV2FJVDEIy8MNH/vLqn89axia6Fx4kH18puNI1BNJmcB5ys/XcwY3 wcVJM53aUp5dg== Date: Wed, 06 Jul 2022 14:47:35 +0000 From: Gregory Heytings To: Stefan Kangas Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: <762d2248095d4825415f@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <762d22480916ff973882@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > IME, other text editors doesn't choke on files with long lines, nor > require you to disable any features. The full and complete solution > will make sure Emacs doesn't either. > That's wrong, sorry. Try opening hugedictionary.json in these editors and you'll see the effect. Try opening dictionary.json in VS Code, and you'll see a warning: "For performance reasons, document symbols have been limited to 5000 items." I don't know what that exactly means (I don't use VS Code), but clearly some limitation has been set automatically for performance reasons. Moreover highlighting is completely (and silently) turned off on that file by VS Code. All this is a very reasonable thing to do. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 11:04:16 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 15:04:17 +0000 Received: from localhost ([127.0.0.1]:54846 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o96Zc-0007Gr-Oh for submit@debbugs.gnu.org; Wed, 06 Jul 2022 11:04:16 -0400 Received: from mail-pg1-f172.google.com ([209.85.215.172]:46918) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o96ZZ-0007GZ-Br for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 11:04:15 -0400 Received: by mail-pg1-f172.google.com with SMTP id s27so14197409pga.13 for <56393@debbugs.gnu.org>; Wed, 06 Jul 2022 08:04:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0POMNdrEPZChrOmGUjEnqxlwI4lwfUWxZ8uQUi5g49E=; b=3A1liRVy/AIXKNawNzqVG7y5EPq6O6ylg11U78as2IGP/lULkt5q2K2a3Kk8RdOm3C 7wk9oXGo9yyYZu2tgvyn/qUukOfM3AMRFpZzXpPEo69Do3BPYhr9DlCzcR/RaMmYMSxM LKAegbwyLVBBuffSDZUHO0vaWyw7whXYNiMErdAbkDO+J8Z0wC4ZMjNnMofQ4yI1jbpd C2T4sNVjWCjb8kwDlm9MFJds+Q0P0NqrmBH82S+w+MpSqww5NMDVndd7C6dI8T6xAmGR ZxJwP6hgLM1K/m0I+LrimpuLyrR7F8f8nLtzLT9GJFz/1lEJ4NvcG7FIAswRG6PE3QLN sFyQ== X-Gm-Message-State: AJIora89Bee6DE7M6F4Q3kjnPLuJxy4gcsen50a5Yx3mFF1WO+iTwSxP 84DKr9CIMtpk77myfBcwE4jssja04Pd+8zLxyww= X-Google-Smtp-Source: AGRyM1upQReTRolnQB5lLEwdDG0ml3hQcK3Pv7ePS0IGECsaWsXlQS8PRIgtTgC0zuSm/SUgWKhlBXFYPUMfrJwPS9Y= X-Received: by 2002:a63:2254:0:b0:40d:d291:7710 with SMTP id t20-20020a632254000000b0040dd2917710mr34348058pgm.269.1657119847578; Wed, 06 Jul 2022 08:04:07 -0700 (PDT) MIME-Version: 1.0 References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <762d22480916ff973882@heytings.org> <762d2248095d4825415f@heytings.org> In-Reply-To: <762d2248095d4825415f@heytings.org> From: Stefan Kangas Date: Wed, 6 Jul 2022 17:03:56 +0200 Message-ID: Subject: Re: bug#56393: Actually fix the long lines display bug To: Gregory Heytings Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.5 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.5 (/) Gregory Heytings wries: > That's wrong, sorry. Try opening hugedictionary.json in these editors and > you'll see the effect. I was thinking of much smaller files that Emacs chokes on but e.g. vim does not. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 11:31:16 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 15:31:16 +0000 Received: from localhost ([127.0.0.1]:54881 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o96zk-0001if-Hd for submit@debbugs.gnu.org; Wed, 06 Jul 2022 11:31:16 -0400 Received: from heytings.org ([95.142.160.155]:55352) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o96zf-0001iN-9n for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 11:31:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657121469; bh=bPX4Fp1rJsHsEhC0Anjx72S/5QYmQ6AqXZHK5lENjHc=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=lfW6HcNWosB2Q+/igtAzkBYgebFH1xx3xKJcIhzbm7SMPyA/PAZnjdKaSj48tqZ/g 8KAzsyTI2jNz3jORdonp4CznQCrTlpQjLePDYuqdMDWKbK4SnwCzmCzV+tiKT1lCmZ g02YeS15tVrnFMiBVXTbvucEvBffbURTg2fJnUFnhWsCt5e+fdViXFS9J1h60xzIVP U4O4K0HsNs7+OzsjvNiBGBvJYIdC6lL+qCdjtbM5JlYp+Qon5i/j5Dc8ks+lZ18BM/ HhSx7fl3lHc83BMyd5POMKA1CqFuxaJ6JwmKHH/nwB/PcXMEjOnNE1Y7Md9GP7RyFi V1t1xxDav+YUg== Date: Wed, 06 Jul 2022 15:31:09 +0000 From: Gregory Heytings To: Stefan Kangas Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: <762d2248098c8b40bcb9@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <762d22480916ff973882@heytings.org> <762d2248095d4825415f@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> That's wrong, sorry. Try opening hugedictionary.json in these editors >> and you'll see the effect. > > I was thinking of much smaller files that Emacs chokes on but e.g. vim > does not. > Surely, different editors have different limits. My aim was to set the limit as high as possible for Emacs. As far as I can tell the only limit is now RAM. I just tried: for I in $(seq 1 600); do cat dictionary.json; done > monsterdictionary.json which produces a file with a single 11GB (!) long line, and you can edit it almost as it it were a 1KB file with Emacs. That being said, my main point here was that all editors disable non-essential features when they open "big" files, for some definition of "big". Both VS Code and Atom (silently) disable most highlighting even for the 300KB long-line.xml file (only "short" lines are highlighted), and (silently) disable all highlighting for the 19MB dictionary.json file. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 11:50:46 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 15:50:46 +0000 Received: from localhost ([127.0.0.1]:54891 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o97Ia-0002Fz-G8 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 11:50:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51320) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o97IW-0002Fg-69 for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 11:50:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:49144) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o97IQ-0006cd-Cc; Wed, 06 Jul 2022 11:50:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=BCtH8dIZzJWiC61/DbFkn2AINWD6hl6/5XUn/dy6jV4=; b=R3h6/laiF++y 4NibDuSJ7uUVb1P0tiwQgsXRDKFghgHIX8gHPBZ7G9fhL4ky8elub4S41k9RszNjwabuIRCT65I0V PIFDoBLZ11kNzrVEfoGvh6YxdgpxcSBmuVIbMX3Uuylfptxj1lCGYE391pbyoPnJTEBaUVqVd9asg b73sQuwpW3FDRi1+khJo4acJDK8Dc7jWOqFPWC4mDuDaM+CNAeWEM0cg7e9W4KpNeTnpRIeMxNK8q qf6RFn5bMtnhIfNfO9pU3b7w2aUkOTlEj0aX+q4zvMT2jrVnkTM6VczKHwPdFXMdf7tm+GtzY1oKo xe7SL7rf2nwGiIw9pgRcYg==; Received: from [87.69.77.57] (port=4333 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o97IP-0006jo-Rr; Wed, 06 Jul 2022 11:50:34 -0400 Date: Wed, 06 Jul 2022 18:50:28 +0300 Message-Id: <835yka6y0r.fsf@gnu.org> From: Eli Zaretskii To: Stefan Kangas In-Reply-To: (message from Stefan Kangas on Wed, 6 Jul 2022 16:37:26 +0200) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <762d22480916ff973882@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Stefan Kangas > Date: Wed, 6 Jul 2022 16:37:26 +0200 > Cc: Eli Zaretskii , Lars Ingebrigtsen , 56393@debbugs.gnu.org > > I'm saying that Eli is correct in saying that we should not treat it > as the full and complete solution. That's not what I said. I said if we think this will provide a complete solution, we should strive to make it that. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 12:20:09 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 16:20:09 +0000 Received: from localhost ([127.0.0.1]:54938 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o97l2-00035d-Qw for submit@debbugs.gnu.org; Wed, 06 Jul 2022 12:20:09 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59036) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o97kv-00034w-E1 for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 12:20:08 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50164) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o97kp-00024J-Ql; Wed, 06 Jul 2022 12:19:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=zu3Svp7bhCLeR5H0ewW072JnU+ATNqnZg53ySQKaAj4=; b=asUj3Cu9lHUx efsIcL6frix8GYq1uIdP9ArjJyjZhPJ70dAoGORqUo7VbqYyuTmPNEBrVoPEEH0Cvb11PvsALuxkU dXwKRizxaYUymq4gt7aykj8YZ5+lI6BV/mobTa2k3pdxzHBrI1eHkkP5pwtYWpzdIFQF1cUl6eptW ihrDjG0fyn3ihZysYry5h29XAKv2op6sJYj2cCYHQGGWuAxWdvg6+2r7B7RRtoTxf9lJfvFu9sWmB RFQ3En4ucpSHFayJcC/7D9CZ+/VmgX7bpMbFq79Il8DXuz4MFxSRHiCVW1SP1uZPxHjGZlrk6gdQy TzaGQQfUWCUgT/VBYNaX2g==; Received: from [87.69.77.57] (port=2147 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o97ko-0005Hg-OW; Wed, 06 Jul 2022 12:19:55 -0400 Date: Wed, 06 Jul 2022 19:19:49 +0300 Message-Id: <834jzu6wnu.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <762d224809114fbaf4af@heytings.org> (message from Gregory Heytings on Wed, 06 Jul 2022 14:41:08 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 06 Jul 2022 14:41:08 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > > I think we must, because font-lock is run by the display engine, and if > > font-lock makes redisplay significantly slower, it's part of the same > > problem. > > I disagree. It's not the redisplay part that make font-lock slower, but > how it parses the buffer. So it's a different problem. How is it different from the code in the display engine that calls next-single-char-property-change or remove-text-properties, or loops over all the overlays at certain position calling overlay-get? In Emacs nowadays font-lock is almost always called as part of redisplay, so I don't see how we can separate them and say that this is a different problem. > > Oh, we agree here: it's definitely way better. I'm just saying that a > > complete solution cannot force users to make such sacrifices. > > Users can reasonably expect and understand that in exceptional > circumstances a non-essential editing feature is, by default, turned off, > if the purpose of doing that is to maintain responsiveness. If you load a > very big file in a browser (or for that matter in any application), it > will become sluggish. Try to open the 1GB hugedictionay.json file with > vim, nano, VS Code, Atom, and try opening it with the patched Emacs. > > (Atom is the only one that displays a warning: "Atom will be unresponsive > during the loading of very large files. Do you still want to load this > file?" If you proceed, Atom becomes unuseable.) I invite you to look at this from a different aspect angle. Your idea is basically to present to the display engine a small portion of the buffer, whose size is 30K characters. If you actually cut 30K characters from any of the files we are using for this work, do you see Emacs choking on any of them if you don't turn off font-lock and leave 'recenter' as it behaves on master? If not, then why doesn't the same work with auto-narrow-mode? And if a 30K-character cut is still clunky, then maybe 30K is not the right default value? For example, why not use 2 window-fulls before and after the window (assuming that gives us a smaller chunk)? The point is that we should try to squeeze the most out of this narrowing idea, before we start disabling up features. Because disabling features is a kind of retreat, an indication that we turned every stone and couldn't make Emacs fast enough, so we are kinda giving up. And it's too early to give up, IMO. > > Why is 'recenter' at all relevant, btw? It isn't called by the display > > code, AFAIR, so why do we have to disable it? > > Because commands in auto-narrow-widen-automatically might call "recenter" > for aesthetic purposes. One example is end-of-buffer. Which means that > what you have is (progn (widen) (recenter)), which takes a few seconds > without fundamentally changing what is on display. That's what I thought. And to me this means that you see an example of a problem I mentioned earlier: code from the display engine is used in commands that basically have nothing to do with redisplay per se, and your current implementation doesn't take care of those calls into the display code by commands like recenter, C-v, C-n, etc. I think sooner or later we will need to present a narrowed buffer to them as well. > > I think there's a misunderstanding here: what these Lisp programs don't > > expect is to find narrowing that is different from what the user sees or > > expects top have. Narrowing is largely a user-level feature, so using > > it for internal purposes is problematic at best. > > > > Sorry, I don't get what you mean. Do you have a concrete example of a > problematic function? What kind of example do you want to see? What do you mean by "problematic" in this context? > A Lisp program that takes into account the possibility that the user uses > narrowing and that needs to have access to the whole buffer will use > (save-restriction (widen) ...). A Lisp program that requires the user to > narrow the buffer to work properly will still work, because explicit > narrowing can still be used with auto-narrow mode. What are the remaining > possibilities? When the user narrows the buffer, he/she doesn't expect the parts outside the restriction to be accessible. But when the user didn't narrow, the results of having some part of a command being able to access only 30K around point _will_ surprise users. Which is why I'm saying that it is better to restrict the display code via some other means, and leave the narrowing alone. After all, it is our code that deliberately references BEGV and ZV in the display engine, so using some other values shouldn't be that difficult, I think. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 12:53:27 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 16:53:27 +0000 Received: from localhost ([127.0.0.1]:54969 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o98HH-0006C0-C8 for submit@debbugs.gnu.org; Wed, 06 Jul 2022 12:53:27 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37170) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o98HE-0006Bn-Vw for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 12:53:26 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51182) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o98H9-0004Ju-Fu; Wed, 06 Jul 2022 12:53:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=aAulDLlgcrEV+ORBa4zYct1iMr3/h30N0Fb6hDARdu8=; b=meSJC8QXSO01 bqUMri6sSFgPMBzr5QYrck7Qs7zL1XvGQgZibiA495PzkOaho8rPSq3/VIf435aDn2FjMQBuNM0bQ xVsveHhW1m5SBPPnqMURqZAi/f4X/Uqrm5a5g6f9Ot8bReeKK6CbfkqXw8K3ikPRGa0L9LhOhGNVA dYCPFR+0dOxZSTybGA2EhxgLsW1gMMhv3/cIJs5GHJXE78r4aKtn6uX3IjT8lDVNyjUE2o5VpBWD5 L6sGl2693KiQnE0OD+quMVE+nQobtLRVKFU0Mux4TvgaGaY87H51YdSr+XQSYZ1cK32o61xy85Iq/ zOZjMMtIK5dIQr9wXf5sUw==; Received: from [87.69.77.57] (port=4208 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o98H8-0003je-VW; Wed, 06 Jul 2022 12:53:19 -0400 Date: Wed, 06 Jul 2022 19:53:12 +0300 Message-Id: <831quy6v47.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <762d224809a270411298@heytings.org> (message from Gregory Heytings on Wed, 06 Jul 2022 14:27:48 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> <83czei74ew.fsf@gnu.org> <762d22480901fd242010@heytings.org> <837d4q72ir.fsf@gnu.org> <762d224809a270411298@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 06 Jul 2022 14:27:48 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > A 10-year old 3.4 GHz Core i7. My Emacs is slightly slower than normal > > because it's a 32-bit build --with-wide-int. > > This may explain that. Because my laptop has 2.8 GHz Core i7 CPU, so it > should be slower. Then maybe try to increase your keyboard auto-repeat rate? From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 12:57:29 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 16:57:29 +0000 Received: from localhost ([127.0.0.1]:54973 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o98LA-0006IO-SO for submit@debbugs.gnu.org; Wed, 06 Jul 2022 12:57:29 -0400 Received: from heytings.org ([95.142.160.155]:55446) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o98L5-0006IB-Uf for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 12:57:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657126642; bh=IGIwXXZw8q5HXDMUh4+gg1/ruqv9CMkpNBT5lQzmtyI=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=DXxFH/ehuLpSr8faXVd3252VsBbywzCVCYz7l8+m4bSathH6LO/n9g5azWszjoYTL 3JQDmAyCKbZbWweFZ5tKpguVPEnjvLPoE2ygk6kjbxJz+7RZVu3fRe+4b0+cTDU6Hd Uv/tmYzRjcvI33K1J4JQWeUo19DWXXExb5sGQxbtbpRMUwjdCVUcMCxJHj6hIgrvFm h269erRvHTwq6dBL0hIxlbdKBB+5o6zW8eJzP4R9no/+32eCLtylcVwB7rfjzg7bv/ qDkuIfDr0d/vy3XP6WNQIDsS89Nh4xPv8DQ9k3j9FbKO0i2NnhmpbgF66khwpflxnS M9wMad7jzxm0g== Date: Wed, 06 Jul 2022 16:57:22 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <834jzu6wnu.fsf@gnu.org> Message-ID: <762d224809c7a439895e@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="IGIbwxo4k9" Content-ID: <762d224809570e2cd73c@heytings.org> X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --IGIbwxo4k9 Content-Type: text/plain; charset=us-ascii; format=flowed Content-ID: <762d2248093b6b04c07d@heytings.org> > > How is it different from the code in the display engine that calls > next-single-char-property-change or remove-text-properties, or loops > over all the overlays at certain position calling overlay-get? In Emacs > nowadays font-lock is almost always called as part of redisplay, so I > don't see how we can separate them and say that this is a different > problem. > Again, I don't know (my understanding of the font-lock machinery is very limited). I only observe that turning font lock mode off makes things significantly better. And that turning highlighting off in such files is what other editors do, too. So at this point I don't see why it wouldn't be a reasonable thing to do. > > I invite you to look at this from a different aspect angle. Your idea > is basically to present to the display engine a small portion of the > buffer, whose size is 30K characters. If you actually cut 30K > characters from any of the files we are using for this work, do you see > Emacs choking on any of them if you don't turn off font-lock and leave > 'recenter' as it behaves on master? If not, then why doesn't the same > work with auto-narrow-mode? > That's something I already did, and yes, I do see Emacs choking. Try to navigate in the attached 30K file. Then try again after turning font-lock mode off. (But I do not understand what you mean by "leave 'recenter' as it behaves on master".) > > For example, why not use 2 window-fulls before and after the window > (assuming that gives us a smaller chunk)? > That would mean to compute the dimensions of the window in a command-hook. I tried to make that hook as efficient as possible, so it is on purpose that I used a constant there, with something that seemed a reasonable default, instead of computing it again and again. > > The point is that we should try to squeeze the most out of this > narrowing idea, before we start disabling up features. Because > disabling features is a kind of retreat, an indication that we turned > every stone and couldn't make Emacs fast enough, so we are kinda giving > up. And it's too early to give up, IMO. > I agree with that idea/direction, but again I think that at least now Emacs doesn't do worse than all other editors out there, and in fact it does way better. If all editors turn off highlighting in such cases, that must surely be for a good reason. Highlighting means parsing, and parsing is infinitely more expensive than not parsing. > > And to me this means that you see an example of a problem I mentioned > earlier: code from the display engine is used in commands that basically > have nothing to do with redisplay per se, and your current > implementation doesn't take care of those calls into the display code by > commands like recenter, C-v, C-n, etc. I think sooner or later we will > need to present a narrowed buffer to them as well. > You mean, a widened buffer? Yes, that's a question for which I still don't have a clear answer: is it better to "whitelist" commands that will always work correctly with a narrowed buffer or to "whitelist" commands that may require a widened buffer? I tend to think that the latter is better. > > What kind of example do you want to see? What do you mean by > "problematic" in this context? > I mean, an actual example of "Lisp code that expects to have access to the entire buffer when it has no reason to expect narrowing", that is, Lisp code that expects to have access to the entire buffer without using (save-restriction (widen) ...). > > Which is why I'm saying that it is better to restrict the display code > via some other means, and leave the narrowing alone. After all, it is > our code that deliberately references BEGV and ZV in the display engine, > so using some other values shouldn't be that difficult, I think. > Yes, I've understood that you want to do something else. --IGIbwxo4k9 Content-Type: application/xml; name=long-line-excerpt.xml Content-Transfer-Encoding: base64 Content-ID: <762d224809759e763ae7@heytings.org> Content-Disposition: attachment; filename=long-line-excerpt.xml PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHByb2pl Y3QgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEv Ij4KPHRpdGxlPkRydXBhbCBjb3JlPC90aXRsZT4KPHNob3J0X25hbWU+ZHJ1 cGFsPC9zaG9ydF9uYW1lPgo8ZGM6Y3JlYXRvcj5EcnVwYWw8L2RjOmNyZWF0 b3I+Cjx0eXBlPnByb2plY3RfY29yZTwvdHlwZT4KPHN1cHBvcnRlZF9icmFu Y2hlcz4xMC4wLiw5LjMuLDkuNC4sOS41Ljwvc3VwcG9ydGVkX2JyYW5jaGVz Pgo8cHJvamVjdF9zdGF0dXM+cHVibGlzaGVkPC9wcm9qZWN0X3N0YXR1cz4K PGxpbms+aHR0cHM6Ly93d3cuZHJ1cGFsLm9yZy9wcm9qZWN0L2RydXBhbDwv bGluaz4KPHRlcm1zPjx0ZXJtPjxuYW1lPlByb2plY3RzPC9uYW1lPjx2YWx1 ZT5EcnVwYWwgY29yZTwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPk1haW50 ZW5hbmNlIHN0YXR1czwvbmFtZT48dmFsdWU+QWN0aXZlbHkgbWFpbnRhaW5l ZDwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPkRldmVsb3BtZW50IHN0YXR1 czwvbmFtZT48dmFsdWU+VW5kZXIgYWN0aXZlIGRldmVsb3BtZW50PC92YWx1 ZT48L3Rlcm0+PC90ZXJtcz4KPHJlbGVhc2VzPgo8cmVsZWFzZT48bmFtZT5k cnVwYWwgMTAuMC4wLWFscGhhNTwvbmFtZT48dmVyc2lvbj4xMC4wLjAtYWxw aGE1PC92ZXJzaW9uPjx0YWc+MTAuMC4wLWFscGhhNTwvdGFnPjxzdGF0dXM+ cHVibGlzaGVkPC9zdGF0dXM+PHJlbGVhc2VfbGluaz5odHRwczovL3d3dy5k cnVwYWwub3JnL3Byb2plY3QvZHJ1cGFsL3JlbGVhc2VzLzEwLjAuMC1hbHBo YTU8L3JlbGVhc2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5k cnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC0xMC4wLjAtYWxwaGE1 LnRhci5nejwvZG93bmxvYWRfbGluaz48ZGF0ZT4xNjU0NzIyOTkzPC9kYXRl PjxmaWxlcz48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmls ZXMvcHJvamVjdHMvZHJ1cGFsLTEwLjAuMC1hbHBoYTUudGFyLmd6PC91cmw+ PGFyY2hpdmVfdHlwZT50YXIuZ3o8L2FyY2hpdmVfdHlwZT48bWQ1PmE5NThl YzA0YjA1ZmQ5ZjlkMTk1YmEyZGVjNDhiZDkyPC9tZDU+PHNpemU+MTg5MjE1 Njg8L3NpemU+PGZpbGVkYXRlPjE2NTQ3MjI5OTM8L2ZpbGVkYXRlPjwvZmls ZT48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmlsZXMvcHJv amVjdHMvZHJ1cGFsLTEwLjAuMC1hbHBoYTUuemlwPC91cmw+PGFyY2hpdmVf dHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PjE2YTdhZjcxMzMzY2YyMzMy Yzg3NmExNGE5NDExNGM1PC9tZDU+PHNpemU+MzE1OTM0NTM8L3NpemU+PGZp bGVkYXRlPjE2NTQ3MjI5OTM8L2ZpbGVkYXRlPjwvZmlsZT48L2ZpbGVzPjx0 ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVlPkJ1 ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlw ZTwvbmFtZT48dmFsdWU+TmV3IGZlYXR1cmVzPC92YWx1ZT48L3Rlcm0+PC90 ZXJtcz48c2VjdXJpdHk+QWxwaGEgcmVsZWFzZXMgYXJlIG5vdCBjb3ZlcmVk IGJ5IERydXBhbCBzZWN1cml0eSBhZHZpc29yaWVzLjwvc2VjdXJpdHk+PC9y ZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCAxMC4wLjAtYWxwaGE0PC9u YW1lPjx2ZXJzaW9uPjEwLjAuMC1hbHBoYTQ8L3ZlcnNpb24+PHRhZz4xMC4w LjAtYWxwaGE0PC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVs ZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJvamVjdC9kcnVw YWwvcmVsZWFzZXMvMTAuMC4wLWFscGhhNDwvcmVsZWFzZV9saW5rPjxkb3du bG9hZF9saW5rPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmlsZXMvcHJvamVj dHMvZHJ1cGFsLTEwLjAuMC1hbHBoYTQudGFyLmd6PC9kb3dubG9hZF9saW5r PjxkYXRlPjE2NTE4NzU2MDE8L2RhdGU+PGZpbGVzPjxmaWxlPjx1cmw+aHR0 cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtMTAu MC4wLWFscGhhNC50YXIuZ3o8L3VybD48YXJjaGl2ZV90eXBlPnRhci5nejwv YXJjaGl2ZV90eXBlPjxtZDU+Njk4ZGEyZTU2MTdhNTRjYTAyZGUxNjc4ZDQ2 OGQ0MGQ8L21kNT48c2l6ZT4xODg5NzgwNzwvc2l6ZT48ZmlsZWRhdGU+MTY1 MTg3NTYwMTwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9m dHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtMTAuMC4wLWFs cGhhNC56aXA8L3VybD48YXJjaGl2ZV90eXBlPnppcDwvYXJjaGl2ZV90eXBl PjxtZDU+N2UzNDQ5ZjBmYTkyMDhiNDlmZjQwNjA0ZmU3MmQ5N2U8L21kNT48 c2l6ZT4zMTUzMTg2NTwvc2l6ZT48ZmlsZWRhdGU+MTY1MTg3NTYwMTwvZmls ZWRhdGU+PC9maWxlPjwvZmlsZXM+PHRlcm1zPjx0ZXJtPjxuYW1lPlJlbGVh c2UgdHlwZTwvbmFtZT48dmFsdWU+QnVnIGZpeGVzPC92YWx1ZT48L3Rlcm0+ PHRlcm0+PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5OZXcgZmVh dHVyZXM8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eT5BbHBoYSBy ZWxlYXNlcyBhcmUgbm90IGNvdmVyZWQgYnkgRHJ1cGFsIHNlY3VyaXR5IGFk dmlzb3JpZXMuPC9zZWN1cml0eT48L3JlbGVhc2U+PHJlbGVhc2U+PG5hbWU+ ZHJ1cGFsIDEwLjAuMC1hbHBoYTM8L25hbWU+PHZlcnNpb24+MTAuMC4wLWFs cGhhMzwvdmVyc2lvbj48dGFnPjEwLjAuMC1hbHBoYTM8L3RhZz48c3RhdHVz PnB1Ymxpc2hlZDwvc3RhdHVzPjxyZWxlYXNlX2xpbms+aHR0cHM6Ly93d3cu ZHJ1cGFsLm9yZy9wcm9qZWN0L2RydXBhbC9yZWxlYXNlcy8xMC4wLjAtYWxw aGEzPC9yZWxlYXNlX2xpbms+PGRvd25sb2FkX2xpbms+aHR0cHM6Ly9mdHAu ZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtMTAuMC4wLWFscGhh My50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY0OTg4Nzc5MzwvZGF0 ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2Zp bGVzL3Byb2plY3RzL2RydXBhbC0xMC4wLjAtYWxwaGEzLnRhci5nejwvdXJs PjxhcmNoaXZlX3R5cGU+dGFyLmd6PC9hcmNoaXZlX3R5cGU+PG1kNT5hZWMw MDQyNDkxNGZmYzcxOGQ4OTFkNjM0NDZiMzFmZTwvbWQ1PjxzaXplPjE4ODk5 NzczPC9zaXplPjxmaWxlZGF0ZT4xNjQ5ODg3NzkzPC9maWxlZGF0ZT48L2Zp bGU+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3By b2plY3RzL2RydXBhbC0xMC4wLjAtYWxwaGEzLnppcDwvdXJsPjxhcmNoaXZl X3R5cGU+emlwPC9hcmNoaXZlX3R5cGU+PG1kNT45ZjdjNWMwZDk0OGY3Yjhl NmY3MDQ2ZWFjZmJkZTg4NzwvbWQ1PjxzaXplPjMxNTUwMDQ5PC9zaXplPjxm aWxlZGF0ZT4xNjQ5ODg3NzkzPC9maWxlZGF0ZT48L2ZpbGU+PC9maWxlcz48 dGVybXM+PHRlcm0+PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5J bnNlY3VyZTwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlw ZTwvbmFtZT48dmFsdWU+QnVnIGZpeGVzPC92YWx1ZT48L3Rlcm0+PHRlcm0+ PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5OZXcgZmVhdHVyZXM8 L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eT5BbHBoYSByZWxlYXNl cyBhcmUgbm90IGNvdmVyZWQgYnkgRHJ1cGFsIHNlY3VyaXR5IGFkdmlzb3Jp ZXMuPC9zZWN1cml0eT48L3JlbGVhc2U+PHJlbGVhc2U+PG5hbWU+ZHJ1cGFs IDEwLjAuMC1hbHBoYTI8L25hbWU+PHZlcnNpb24+MTAuMC4wLWFscGhhMjwv dmVyc2lvbj48dGFnPjEwLjAuMC1hbHBoYTI8L3RhZz48c3RhdHVzPnB1Ymxp c2hlZDwvc3RhdHVzPjxyZWxlYXNlX2xpbms+aHR0cHM6Ly93d3cuZHJ1cGFs Lm9yZy9wcm9qZWN0L2RydXBhbC9yZWxlYXNlcy8xMC4wLjAtYWxwaGEyPC9y ZWxlYXNlX2xpbms+PGRvd25sb2FkX2xpbms+aHR0cHM6Ly9mdHAuZHJ1cGFs Lm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtMTAuMC4wLWFscGhhMi50YXIu Z3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY0NTIwNDMwNTwvZGF0ZT48Zmls ZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3By b2plY3RzL2RydXBhbC0xMC4wLjAtYWxwaGEyLnRhci5nejwvdXJsPjxhcmNo aXZlX3R5cGU+dGFyLmd6PC9hcmNoaXZlX3R5cGU+PG1kNT4zNmNkYmZiNDQ4 MDU2MDA2MWNkMDIwZGU1ZGVkNjhhMDwvbWQ1PjxzaXplPjE4OTIwNjk1PC9z aXplPjxmaWxlZGF0ZT4xNjQ1MjA0MzA1PC9maWxlZGF0ZT48L2ZpbGU+PGZp bGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3Rz L2RydXBhbC0xMC4wLjAtYWxwaGEyLnppcDwvdXJsPjxhcmNoaXZlX3R5cGU+ emlwPC9hcmNoaXZlX3R5cGU+PG1kNT4xYmExYWVlZGZlNjFlZTM3ZTU2YzJj Y2NmNzRlOTliYzwvbWQ1PjxzaXplPjMxODc1NTc3PC9zaXplPjxmaWxlZGF0 ZT4xNjQ1MjA0MzA1PC9maWxlZGF0ZT48L2ZpbGU+PC9maWxlcz48dGVybXM+ PHRlcm0+PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5JbnNlY3Vy ZTwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFt ZT48dmFsdWU+QnVnIGZpeGVzPC92YWx1ZT48L3Rlcm0+PHRlcm0+PG5hbWU+ UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5OZXcgZmVhdHVyZXM8L3ZhbHVl PjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eT5BbHBoYSByZWxlYXNlcyBhcmUg bm90IGNvdmVyZWQgYnkgRHJ1cGFsIHNlY3VyaXR5IGFkdmlzb3JpZXMuPC9z ZWN1cml0eT48L3JlbGVhc2U+PHJlbGVhc2U+PG5hbWU+ZHJ1cGFsIDEwLjAu MC1hbHBoYTE8L25hbWU+PHZlcnNpb24+MTAuMC4wLWFscGhhMTwvdmVyc2lv bj48dGFnPjEwLjAuMC1hbHBoYTE8L3RhZz48c3RhdHVzPnB1Ymxpc2hlZDwv c3RhdHVzPjxyZWxlYXNlX2xpbms+aHR0cHM6Ly93d3cuZHJ1cGFsLm9yZy9w cm9qZWN0L2RydXBhbC9yZWxlYXNlcy8xMC4wLjAtYWxwaGExPC9yZWxlYXNl X2xpbms+PGRvd25sb2FkX2xpbms+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9m aWxlcy9wcm9qZWN0cy9kcnVwYWwtMTAuMC4wLWFscGhhMS50YXIuZ3o8L2Rv d25sb2FkX2xpbms+PGRhdGU+MTY0MzQwNDA0MTwvZGF0ZT48ZmlsZXM+PGZp bGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3Rz L2RydXBhbC0xMC4wLjAtYWxwaGExLnRhci5nejwvdXJsPjxhcmNoaXZlX3R5 cGU+dGFyLmd6PC9hcmNoaXZlX3R5cGU+PG1kNT45ZjA3ZWY5OTFjZGRmNGVm NTdmODEwYzRmYjY0ZWExNzwvbWQ1PjxzaXplPjE5NzQxNTQyPC9zaXplPjxm aWxlZGF0ZT4xNjQzNDA0MDQxPC9maWxlZGF0ZT48L2ZpbGU+PGZpbGU+PHVy bD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBh bC0xMC4wLjAtYWxwaGExLnppcDwvdXJsPjxhcmNoaXZlX3R5cGU+emlwPC9h cmNoaXZlX3R5cGU+PG1kNT4yYzZhYWYwMTg1Y2I1NDExMzg5MTVlZjQ5ODNl NTBlZDwvbWQ1PjxzaXplPjMyNTI3MDI4PC9zaXplPjxmaWxlZGF0ZT4xNjQz NDA0MDQxPC9maWxlZGF0ZT48L2ZpbGU+PC9maWxlcz48dGVybXM+PHRlcm0+ PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5JbnNlY3VyZTwvdmFs dWU+PC90ZXJtPjwvdGVybXM+PHNlY3VyaXR5PkFscGhhIHJlbGVhc2VzIGFy ZSBub3QgY292ZXJlZCBieSBEcnVwYWwgc2VjdXJpdHkgYWR2aXNvcmllcy48 L3NlY3VyaXR5PjwvcmVsZWFzZT48cmVsZWFzZT48bmFtZT5kcnVwYWwgOS40 LjE8L25hbWU+PHZlcnNpb24+OS40LjE8L3ZlcnNpb24+PHRhZz45LjQuMTwv dGFnPjxzdGF0dXM+cHVibGlzaGVkPC9zdGF0dXM+PHJlbGVhc2VfbGluaz5o dHRwczovL3d3dy5kcnVwYWwub3JnL3Byb2plY3QvZHJ1cGFsL3JlbGVhc2Vz LzkuNC4xPC9yZWxlYXNlX2xpbms+PGRvd25sb2FkX2xpbms+aHR0cHM6Ly9m dHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS40LjEudGFy Lmd6PC9kb3dubG9hZF9saW5rPjxkYXRlPjE2NTU4NDU1MTE8L2RhdGU+PGZp bGVzPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9w cm9qZWN0cy9kcnVwYWwtOS40LjEudGFyLmd6PC91cmw+PGFyY2hpdmVfdHlw ZT50YXIuZ3o8L2FyY2hpdmVfdHlwZT48bWQ1PjhlMGU4MWEzNjgwNDI5MmVm MjI1ZmJjNzU1ODllMzJlPC9tZDU+PHNpemU+MjE0NjkzMjE8L3NpemU+PGZp bGVkYXRlPjE2NTU4NDU1MTE8L2ZpbGVkYXRlPjwvZmlsZT48ZmlsZT48dXJs Pmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmlsZXMvcHJvamVjdHMvZHJ1cGFs LTkuNC4xLnppcDwvdXJsPjxhcmNoaXZlX3R5cGU+emlwPC9hcmNoaXZlX3R5 cGU+PG1kNT5lOTY0ZmVhZDJiMWI5MzQ0MGUxMTc4NTk0ODMxOTgyZjwvbWQ1 PjxzaXplPjM0NDgwNzM5PC9zaXplPjxmaWxlZGF0ZT4xNjU1ODQ1NTExPC9m aWxlZGF0ZT48L2ZpbGU+PC9maWxlcz48dGVybXM+PHRlcm0+PG5hbWU+UmVs ZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5CdWcgZml4ZXM8L3ZhbHVlPjwvdGVy bT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVkIGJ5IERy dXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJpdHk+PC9y ZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5LjQuMDwvbmFtZT48dmVy c2lvbj45LjQuMDwvdmVyc2lvbj48dGFnPjkuNC4wPC90YWc+PHN0YXR1cz5w dWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRy dXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVsZWFzZXMvOS40LjA8L3JlbGVh c2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3Jn L2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjQuMC50YXIuZ3o8L2Rvd25sb2Fk X2xpbms+PGRhdGU+MTY1NTMxMTEzODwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVy bD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBh bC05LjQuMC50YXIuZ3o8L3VybD48YXJjaGl2ZV90eXBlPnRhci5nejwvYXJj aGl2ZV90eXBlPjxtZDU+N2E4ZDViN2YwY2FiMDYzYmFjM2E2NjhjMjc0MGRh ZjM8L21kNT48c2l6ZT4yMTQ2NDIxNjwvc2l6ZT48ZmlsZWRhdGU+MTY1NTMx MTEzODwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAu ZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS40LjAuemlwPC91 cmw+PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PjUxZGRm ZDBjODIxMjlkNjU0YmZkMjZlY2ZjMjU3YzdmPC9tZDU+PHNpemU+MzQ0NzYy ODc8L3NpemU+PGZpbGVkYXRlPjE2NTUzMTExMzg8L2ZpbGVkYXRlPjwvZmls ZT48L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25h bWU+PHZhbHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1l PlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+TmV3IGZlYXR1cmVzPC92YWx1 ZT48L3Rlcm0+PC90ZXJtcz48c2VjdXJpdHkgY292ZXJlZD0iMSI+Q292ZXJl ZCBieSBEcnVwYWwncyBzZWN1cml0eSBhZHZpc29yeSBwb2xpY3k8L3NlY3Vy aXR5PjwvcmVsZWFzZT48cmVsZWFzZT48bmFtZT5kcnVwYWwgOS40LjAtcmMy PC9uYW1lPjx2ZXJzaW9uPjkuNC4wLXJjMjwvdmVyc2lvbj48dGFnPjkuNC4w LXJjMjwvdGFnPjxzdGF0dXM+cHVibGlzaGVkPC9zdGF0dXM+PHJlbGVhc2Vf bGluaz5odHRwczovL3d3dy5kcnVwYWwub3JnL3Byb2plY3QvZHJ1cGFsL3Jl bGVhc2VzLzkuNC4wLXJjMjwvcmVsZWFzZV9saW5rPjxkb3dubG9hZF9saW5r Pmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmlsZXMvcHJvamVjdHMvZHJ1cGFs LTkuNC4wLXJjMi50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY1NDg5 MDA1NTwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVw YWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjQuMC1yYzIudGFyLmd6 PC91cmw+PGFyY2hpdmVfdHlwZT50YXIuZ3o8L2FyY2hpdmVfdHlwZT48bWQ1 PmI0MDYwY2I4MWZhZTBmOWFlZTQ1ZDE4M2M5MjA0NmE5PC9tZDU+PHNpemU+ MjE0ODczOTA8L3NpemU+PGZpbGVkYXRlPjE2NTQ4OTAwNTU8L2ZpbGVkYXRl PjwvZmlsZT48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmls ZXMvcHJvamVjdHMvZHJ1cGFsLTkuNC4wLXJjMi56aXA8L3VybD48YXJjaGl2 ZV90eXBlPnppcDwvYXJjaGl2ZV90eXBlPjxtZDU+M2U4NTAxMTEzNzY2NThk MWMwY2Q1Y2Y2ZTg1MGRiMDg8L21kNT48c2l6ZT4zNDY4NTkyMDwvc2l6ZT48 ZmlsZWRhdGU+MTY1NDg5MDA1NTwvZmlsZWRhdGU+PC9maWxlPjwvZmlsZXM+ PHRlcm1zPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+ U2VjdXJpdHkgdXBkYXRlPC92YWx1ZT48L3Rlcm0+PHRlcm0+PG5hbWU+UmVs ZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5CdWcgZml4ZXM8L3ZhbHVlPjwvdGVy bT48L3Rlcm1zPjxzZWN1cml0eT5SQyByZWxlYXNlcyBhcmUgbm90IGNvdmVy ZWQgYnkgRHJ1cGFsIHNlY3VyaXR5IGFkdmlzb3JpZXMuPC9zZWN1cml0eT48 L3JlbGVhc2U+PHJlbGVhc2U+PG5hbWU+ZHJ1cGFsIDkuNC4wLXJjMTwvbmFt ZT48dmVyc2lvbj45LjQuMC1yYzE8L3ZlcnNpb24+PHRhZz45LjQuMC1yYzE8 L3RhZz48c3RhdHVzPnB1Ymxpc2hlZDwvc3RhdHVzPjxyZWxlYXNlX2xpbms+ aHR0cHM6Ly93d3cuZHJ1cGFsLm9yZy9wcm9qZWN0L2RydXBhbC9yZWxlYXNl cy85LjQuMC1yYzE8L3JlbGVhc2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRw czovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjQu MC1yYzEudGFyLmd6PC9kb3dubG9hZF9saW5rPjxkYXRlPjE2NTQ3NDAwMTk8 L2RhdGU+PGZpbGVzPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9y Zy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS40LjAtcmMxLnRhci5nejwvdXJs PjxhcmNoaXZlX3R5cGU+dGFyLmd6PC9hcmNoaXZlX3R5cGU+PG1kNT4xYzAx NjZhZDNiYTkzMTRjNjhhMDNhZDFiOTRjYWI5YTwvbWQ1PjxzaXplPjIxNDg0 Njg3PC9zaXplPjxmaWxlZGF0ZT4xNjU0NzQwMDE5PC9maWxlZGF0ZT48L2Zp bGU+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3By b2plY3RzL2RydXBhbC05LjQuMC1yYzEuemlwPC91cmw+PGFyY2hpdmVfdHlw ZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PjliMmI3YTIwNzNkZjU1OGQyNmY1 OWQ2MmI1YTlhNDRkPC9tZDU+PHNpemU+MzQ2ODQ4Njc8L3NpemU+PGZpbGVk YXRlPjE2NTQ3NDAwMTk8L2ZpbGVkYXRlPjwvZmlsZT48L2ZpbGVzPjx0ZXJt cz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVlPkJ1ZyBm aXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwv bmFtZT48dmFsdWU+TmV3IGZlYXR1cmVzPC92YWx1ZT48L3Rlcm0+PHRlcm0+ PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5JbnNlY3VyZTwvdmFs dWU+PC90ZXJtPjwvdGVybXM+PHNlY3VyaXR5PlJDIHJlbGVhc2VzIGFyZSBu b3QgY292ZXJlZCBieSBEcnVwYWwgc2VjdXJpdHkgYWR2aXNvcmllcy48L3Nl Y3VyaXR5PjwvcmVsZWFzZT48cmVsZWFzZT48bmFtZT5kcnVwYWwgOS40LjAt YmV0YTE8L25hbWU+PHZlcnNpb24+OS40LjAtYmV0YTE8L3ZlcnNpb24+PHRh Zz45LjQuMC1iZXRhMTwvdGFnPjxzdGF0dXM+cHVibGlzaGVkPC9zdGF0dXM+ PHJlbGVhc2VfbGluaz5odHRwczovL3d3dy5kcnVwYWwub3JnL3Byb2plY3Qv ZHJ1cGFsL3JlbGVhc2VzLzkuNC4wLWJldGExPC9yZWxlYXNlX2xpbms+PGRv d25sb2FkX2xpbms+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9q ZWN0cy9kcnVwYWwtOS40LjAtYmV0YTEudGFyLmd6PC9kb3dubG9hZF9saW5r PjxkYXRlPjE2NTM5MzgyMTQ8L2RhdGU+PGZpbGVzPjxmaWxlPjx1cmw+aHR0 cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS40 LjAtYmV0YTEudGFyLmd6PC91cmw+PGFyY2hpdmVfdHlwZT50YXIuZ3o8L2Fy Y2hpdmVfdHlwZT48bWQ1PmU3Y2I1Y2VjM2YxMWU3YTIyN2U1YmI3YzMzMWIz ZmNiPC9tZDU+PHNpemU+MjE0ODA3ODY8L3NpemU+PGZpbGVkYXRlPjE2NTM5 MzgyMTQ8L2ZpbGVkYXRlPjwvZmlsZT48ZmlsZT48dXJsPmh0dHBzOi8vZnRw LmRydXBhbC5vcmcvZmlsZXMvcHJvamVjdHMvZHJ1cGFsLTkuNC4wLWJldGEx LnppcDwvdXJsPjxhcmNoaXZlX3R5cGU+emlwPC9hcmNoaXZlX3R5cGU+PG1k NT44OTM5NTI2NmIyNDc3MGEzNjViZjljNGJmODA1N2RhOTwvbWQ1PjxzaXpl PjM0Nzc4MzEyPC9zaXplPjxmaWxlZGF0ZT4xNjUzOTM4MjE0PC9maWxlZGF0 ZT48L2ZpbGU+PC9maWxlcz48dGVybXM+PHRlcm0+PG5hbWU+UmVsZWFzZSB0 eXBlPC9uYW1lPjx2YWx1ZT5CdWcgZml4ZXM8L3ZhbHVlPjwvdGVybT48dGVy bT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVlPk5ldyBmZWF0dXJl czwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFt ZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1 cml0eT5CZXRhIHJlbGVhc2VzIGFyZSBub3QgY292ZXJlZCBieSBEcnVwYWwg c2VjdXJpdHkgYWR2aXNvcmllcy48L3NlY3VyaXR5PjwvcmVsZWFzZT48cmVs ZWFzZT48bmFtZT5kcnVwYWwgOS40LjAtYWxwaGExPC9uYW1lPjx2ZXJzaW9u PjkuNC4wLWFscGhhMTwvdmVyc2lvbj48dGFnPjkuNC4wLWFscGhhMTwvdGFn PjxzdGF0dXM+cHVibGlzaGVkPC9zdGF0dXM+PHJlbGVhc2VfbGluaz5odHRw czovL3d3dy5kcnVwYWwub3JnL3Byb2plY3QvZHJ1cGFsL3JlbGVhc2VzLzku NC4wLWFscGhhMTwvcmVsZWFzZV9saW5rPjxkb3dubG9hZF9saW5rPmh0dHBz Oi8vZnRwLmRydXBhbC5vcmcvZmlsZXMvcHJvamVjdHMvZHJ1cGFsLTkuNC4w LWFscGhhMS50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY1MTg3NTYw NjwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwu b3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjQuMC1hbHBoYTEudGFyLmd6 PC91cmw+PGFyY2hpdmVfdHlwZT50YXIuZ3o8L2FyY2hpdmVfdHlwZT48bWQ1 PmIzZGY2N2M2YjExZWYxNzA4ZGY5ODIxZmVjMjdkMGM2PC9tZDU+PHNpemU+ MjE0NTUyMDc8L3NpemU+PGZpbGVkYXRlPjE2NTE4NzU2MDY8L2ZpbGVkYXRl PjwvZmlsZT48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmls ZXMvcHJvamVjdHMvZHJ1cGFsLTkuNC4wLWFscGhhMS56aXA8L3VybD48YXJj aGl2ZV90eXBlPnppcDwvYXJjaGl2ZV90eXBlPjxtZDU+YmM3ZTBiYWIyZmVk NTA0YTgwNzRhZTA5YWJjOWU4MjE8L21kNT48c2l6ZT4zNDc2NzUzNDwvc2l6 ZT48ZmlsZWRhdGU+MTY1MTg3NTYwNjwvZmlsZWRhdGU+PC9maWxlPjwvZmls ZXM+PHRlcm1zPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFs dWU+SW5zZWN1cmU8L3ZhbHVlPjwvdGVybT48dGVybT48bmFtZT5SZWxlYXNl IHR5cGU8L25hbWU+PHZhbHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0 ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+TmV3IGZlYXR1 cmVzPC92YWx1ZT48L3Rlcm0+PC90ZXJtcz48c2VjdXJpdHk+QWxwaGEgcmVs ZWFzZXMgYXJlIG5vdCBjb3ZlcmVkIGJ5IERydXBhbCBzZWN1cml0eSBhZHZp c29yaWVzLjwvc2VjdXJpdHk+PC9yZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRy dXBhbCA5LjMuMTc8L25hbWU+PHZlcnNpb24+OS4zLjE3PC92ZXJzaW9uPjx0 YWc+OS4zLjE3PC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVs ZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJvamVjdC9kcnVw YWwvcmVsZWFzZXMvOS4zLjE3PC9yZWxlYXNlX2xpbms+PGRvd25sb2FkX2xp bms+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVw YWwtOS4zLjE3LnRhci5nejwvZG93bmxvYWRfbGluaz48ZGF0ZT4xNjU1ODQ2 NjIyPC9kYXRlPjxmaWxlcz48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBh bC5vcmcvZmlsZXMvcHJvamVjdHMvZHJ1cGFsLTkuMy4xNy50YXIuZ3o8L3Vy bD48YXJjaGl2ZV90eXBlPnRhci5nejwvYXJjaGl2ZV90eXBlPjxtZDU+NTNj YzhiMTVlYmE4YmVlNDVjYWFkNGIwN2Q1YmRkNDA8L21kNT48c2l6ZT4yMDk0 ODQ4Mjwvc2l6ZT48ZmlsZWRhdGU+MTY1NTg0NjYyMjwvZmlsZWRhdGU+PC9m aWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9w cm9qZWN0cy9kcnVwYWwtOS4zLjE3LnppcDwvdXJsPjxhcmNoaXZlX3R5cGU+ emlwPC9hcmNoaXZlX3R5cGU+PG1kNT4wMGE2OTBmMWI5NDI5NmI0YzQxM2Y5 YWQ3OTE3MmU1YjwvbWQ1PjxzaXplPjMzODcyMDcxPC9zaXplPjxmaWxlZGF0 ZT4xNjU1ODQ2NjIyPC9maWxlZGF0ZT48L2ZpbGU+PC9maWxlcz48dGVybXM+ PHRlcm0+PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5CdWcgZml4 ZXM8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIx Ij5Db3ZlcmVkIGJ5IERydXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGlj eTwvc2VjdXJpdHk+PC9yZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5 LjMuMTY8L25hbWU+PHZlcnNpb24+OS4zLjE2PC92ZXJzaW9uPjx0YWc+OS4z LjE2PC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9s aW5rPmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVs ZWFzZXMvOS4zLjE2PC9yZWxlYXNlX2xpbms+PGRvd25sb2FkX2xpbms+aHR0 cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4z LjE2LnRhci5nejwvZG93bmxvYWRfbGluaz48ZGF0ZT4xNjU0ODg4NzM2PC9k YXRlPjxmaWxlcz48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcv ZmlsZXMvcHJvamVjdHMvZHJ1cGFsLTkuMy4xNi50YXIuZ3o8L3VybD48YXJj aGl2ZV90eXBlPnRhci5nejwvYXJjaGl2ZV90eXBlPjxtZDU+Nzk1MzJlOTlj OWYzMjNiNTRjNGNjOWRiNzhlOGJmNmQ8L21kNT48c2l6ZT4yMDkzOTIyNDwv c2l6ZT48ZmlsZWRhdGU+MTY1NDg4ODczNjwvZmlsZWRhdGU+PC9maWxlPjxm aWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0 cy9kcnVwYWwtOS4zLjE2LnppcDwvdXJsPjxhcmNoaXZlX3R5cGU+emlwPC9h cmNoaXZlX3R5cGU+PG1kNT5jZThhY2E2N2Q2OTc2NDBhOTg3OGRjMjlkNmI1 ZDdhNzwvbWQ1PjxzaXplPjMzODYxMDQzPC9zaXplPjxmaWxlZGF0ZT4xNjU0 ODg4NzM2PC9maWxlZGF0ZT48L2ZpbGU+PC9maWxlcz48dGVybXM+PHRlcm0+ PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5TZWN1cml0eSB1cGRh dGU8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIx Ij5Db3ZlcmVkIGJ5IERydXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGlj eTwvc2VjdXJpdHk+PC9yZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5 LjMuMTU8L25hbWU+PHZlcnNpb24+OS4zLjE1PC92ZXJzaW9uPjx0YWc+OS4z LjE1PC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9s aW5rPmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVs ZWFzZXMvOS4zLjE1PC9yZWxlYXNlX2xpbms+PGRvd25sb2FkX2xpbms+aHR0 cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4z LjE1LnRhci5nejwvZG93bmxvYWRfbGluaz48ZGF0ZT4xNjU0MDk4NzY1PC9k YXRlPjxmaWxlcz48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcv ZmlsZXMvcHJvamVjdHMvZHJ1cGFsLTkuMy4xNS50YXIuZ3o8L3VybD48YXJj aGl2ZV90eXBlPnRhci5nejwvYXJjaGl2ZV90eXBlPjxtZDU+ZTc5ZmMyMDc5 ZTVkNDhhNDI1ZDU2ZGVkMjAxZGYwNjY8L21kNT48c2l6ZT4yMDkzOTc5Nzwv c2l6ZT48ZmlsZWRhdGU+MTY1NDA5ODc2NTwvZmlsZWRhdGU+PC9maWxlPjxm aWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0 cy9kcnVwYWwtOS4zLjE1LnppcDwvdXJsPjxhcmNoaXZlX3R5cGU+emlwPC9h cmNoaXZlX3R5cGU+PG1kNT4wMGYxODBiODc0Mzg0YzQwZTQzMDA0NzFjODVj OGNiODwvbWQ1PjxzaXplPjMzODYxNTI5PC9zaXplPjxmaWxlZGF0ZT4xNjU0 MDk4NzY1PC9maWxlZGF0ZT48L2ZpbGU+PC9maWxlcz48dGVybXM+PHRlcm0+ PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5CdWcgZml4ZXM8L3Zh bHVlPjwvdGVybT48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZh bHVlPkluc2VjdXJlPC92YWx1ZT48L3Rlcm0+PC90ZXJtcz48c2VjdXJpdHkg Y292ZXJlZD0iMSI+Q292ZXJlZCBieSBEcnVwYWwncyBzZWN1cml0eSBhZHZp c29yeSBwb2xpY3k8L3NlY3VyaXR5PjwvcmVsZWFzZT48cmVsZWFzZT48bmFt ZT5kcnVwYWwgOS4zLjE0PC9uYW1lPjx2ZXJzaW9uPjkuMy4xNDwvdmVyc2lv bj48dGFnPjkuMy4xNDwvdGFnPjxzdGF0dXM+cHVibGlzaGVkPC9zdGF0dXM+ PHJlbGVhc2VfbGluaz5odHRwczovL3d3dy5kcnVwYWwub3JnL3Byb2plY3Qv ZHJ1cGFsL3JlbGVhc2VzLzkuMy4xNDwvcmVsZWFzZV9saW5rPjxkb3dubG9h ZF9saW5rPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmlsZXMvcHJvamVjdHMv ZHJ1cGFsLTkuMy4xNC50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY1 MzUwNjI5MTwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5k cnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMTQudGFyLmd6 PC91cmw+PGFyY2hpdmVfdHlwZT50YXIuZ3o8L2FyY2hpdmVfdHlwZT48bWQ1 PmE2NjIwOTc3ODJiNTM5YmEyYjA4ZDNlMWQ5ZTc2YWQ0PC9tZDU+PHNpemU+ MjA5MTMyMTA8L3NpemU+PGZpbGVkYXRlPjE2NTM1MDYyOTE8L2ZpbGVkYXRl PjwvZmlsZT48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmls ZXMvcHJvamVjdHMvZHJ1cGFsLTkuMy4xNC56aXA8L3VybD48YXJjaGl2ZV90 eXBlPnppcDwvYXJjaGl2ZV90eXBlPjxtZDU+NDRmMDhkODYxYzI3NDM2NTgz MTFhZjE4ZTAyY2E3YWQ8L21kNT48c2l6ZT4zMzgxNTE1MTwvc2l6ZT48Zmls ZWRhdGU+MTY1MzUwNjI5MTwvZmlsZWRhdGU+PC9maWxlPjwvZmlsZXM+PHRl cm1zPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+U2Vj dXJpdHkgdXBkYXRlPC92YWx1ZT48L3Rlcm0+PHRlcm0+PG5hbWU+UmVsZWFz ZSB0eXBlPC9uYW1lPjx2YWx1ZT5JbnNlY3VyZTwvdmFsdWU+PC90ZXJtPjwv dGVybXM+PHNlY3VyaXR5IGNvdmVyZWQ9IjEiPkNvdmVyZWQgYnkgRHJ1cGFs J3Mgc2VjdXJpdHkgYWR2aXNvcnkgcG9saWN5PC9zZWN1cml0eT48L3JlbGVh c2U+PHJlbGVhc2U+PG5hbWU+ZHJ1cGFsIDkuMy4xMzwvbmFtZT48dmVyc2lv bj45LjMuMTM8L3ZlcnNpb24+PHRhZz45LjMuMTM8L3RhZz48c3RhdHVzPnB1 Ymxpc2hlZDwvc3RhdHVzPjxyZWxlYXNlX2xpbms+aHR0cHM6Ly93d3cuZHJ1 cGFsLm9yZy9wcm9qZWN0L2RydXBhbC9yZWxlYXNlcy85LjMuMTM8L3JlbGVh c2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3Jn L2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMTMudGFyLmd6PC9kb3dubG9h ZF9saW5rPjxkYXRlPjE2NTIyNjE4NzQ8L2RhdGU+PGZpbGVzPjxmaWxlPjx1 cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVw YWwtOS4zLjEzLnRhci5nejwvdXJsPjxhcmNoaXZlX3R5cGU+dGFyLmd6PC9h cmNoaXZlX3R5cGU+PG1kNT45OWU0NTE3MzU1MWQ2YmZiNTgxMzg5NDVjYjQw ZTFmYzwvbWQ1PjxzaXplPjIwOTEyMTY3PC9zaXplPjxmaWxlZGF0ZT4xNjUy MjYxODc0PC9maWxlZGF0ZT48L2ZpbGU+PGZpbGU+PHVybD5odHRwczovL2Z0 cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMTMuemlw PC91cmw+PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PjYy MjRjZjE4NTMxM2E0ZTNmMTNhNmQyYzFhNjZjYzNmPC9tZDU+PHNpemU+MzM4 MTM5OTQ8L3NpemU+PGZpbGVkYXRlPjE2NTIyNjE4NzQ8L2ZpbGVkYXRlPjwv ZmlsZT48L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8 L25hbWU+PHZhbHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxu YW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVl PjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVk IGJ5IERydXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJp dHk+PC9yZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5LjMuMTI8L25h bWU+PHZlcnNpb24+OS4zLjEyPC92ZXJzaW9uPjx0YWc+OS4zLjEyPC90YWc+ PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9saW5rPmh0dHBz Oi8vd3d3LmRydXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVsZWFzZXMvOS4z LjEyPC9yZWxlYXNlX2xpbms+PGRvd25sb2FkX2xpbms+aHR0cHM6Ly9mdHAu ZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4zLjEyLnRhci5n ejwvZG93bmxvYWRfbGluaz48ZGF0ZT4xNjUwNDY3NTM2PC9kYXRlPjxmaWxl cz48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmlsZXMvcHJv amVjdHMvZHJ1cGFsLTkuMy4xMi50YXIuZ3o8L3VybD48YXJjaGl2ZV90eXBl PnRhci5nejwvYXJjaGl2ZV90eXBlPjxtZDU+MjRjMjBjYjAzYTQ1ZjE2Y2Jj NGYxYmJjYTVkODRiNGU8L21kNT48c2l6ZT4yMDg5Mzk5Nzwvc2l6ZT48Zmls ZWRhdGU+MTY1MDQ2NzUzNjwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1cmw+ aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwt OS4zLjEyLnppcDwvdXJsPjxhcmNoaXZlX3R5cGU+emlwPC9hcmNoaXZlX3R5 cGU+PG1kNT41OGQ0NzY4ZDEzYTA5MTQxOGIxZGJmMDYzMWE4MzRkMjwvbWQ1 PjxzaXplPjMzNzg0OTE0PC9zaXplPjxmaWxlZGF0ZT4xNjUwNDY3NTM2PC9m aWxlZGF0ZT48L2ZpbGU+PC9maWxlcz48dGVybXM+PHRlcm0+PG5hbWU+UmVs ZWFzZSB0eXBlPC9uYW1lPjx2YWx1ZT5TZWN1cml0eSB1cGRhdGU8L3ZhbHVl PjwvdGVybT48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVl Pkluc2VjdXJlPC92YWx1ZT48L3Rlcm0+PC90ZXJtcz48c2VjdXJpdHkgY292 ZXJlZD0iMSI+Q292ZXJlZCBieSBEcnVwYWwncyBzZWN1cml0eSBhZHZpc29y eSBwb2xpY3k8L3NlY3VyaXR5PjwvcmVsZWFzZT48cmVsZWFzZT48bmFtZT5k cnVwYWwgOS4zLjExPC9uYW1lPjx2ZXJzaW9uPjkuMy4xMTwvdmVyc2lvbj48 dGFnPjkuMy4xMTwvdGFnPjxzdGF0dXM+cHVibGlzaGVkPC9zdGF0dXM+PHJl bGVhc2VfbGluaz5odHRwczovL3d3dy5kcnVwYWwub3JnL3Byb2plY3QvZHJ1 cGFsL3JlbGVhc2VzLzkuMy4xMTwvcmVsZWFzZV9saW5rPjxkb3dubG9hZF9s aW5rPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmlsZXMvcHJvamVjdHMvZHJ1 cGFsLTkuMy4xMS50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY0OTg5 NzM5MTwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVw YWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMTEudGFyLmd6PC91 cmw+PGFyY2hpdmVfdHlwZT50YXIuZ3o8L2FyY2hpdmVfdHlwZT48bWQ1PjNl MTk1MzY0OTg3MjE5OTA5NzQzMmFkYTc4ZTZkOTVjPC9tZDU+PHNpemU+MjA4 OTUxOTk8L3NpemU+PGZpbGVkYXRlPjE2NDk4OTczOTE8L2ZpbGVkYXRlPjwv ZmlsZT48ZmlsZT48dXJsPmh0dHBzOi8vZnRwLmRydXBhbC5vcmcvZmlsZXMv cHJvamVjdHMvZHJ1cGFsLTkuMy4xMS56aXA8L3VybD48YXJjaGl2ZV90eXBl PnppcDwvYXJjaGl2ZV90eXBlPjxtZDU+NDJhYWZmMjEwZjg3NTk1Nzk0Njg5 NDE1MjcxNzc3ZGQ8L21kNT48c2l6ZT4zMzc4NDkxNzwvc2l6ZT48ZmlsZWRh dGU+MTY0OTg5NzM5MTwvZmlsZWRhdGU+PC9maWxlPjwvZmlsZXM+PHRlcm1z Pjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+QnVnIGZp eGVzPC92YWx1ZT48L3Rlcm0+PHRlcm0+PG5hbWU+UmVsZWFzZSB0eXBlPC9u YW1lPjx2YWx1ZT5JbnNlY3VyZTwvdmFsdWU+PC90ZXJtPjwvdGVybXM+PHNl Y3VyaXR5IGNvdmVyZWQ9IjEiPkNvdmVyZWQgYnkgRHJ1cGFsJ3Mgc2VjdXJp dHkgYWR2aXNvcnkgcG9saWN5PC9zZWN1cml0eT48L3JlbGVhc2U+PHJlbGVh c2U+PG5hbWU+ZHJ1cGFsIDkuMy4xMDwvbmFtZT48dmVyc2lvbj45LjMuMTA8 L3ZlcnNpb24+PHRhZz45LjMuMTA8L3RhZz48c3RhdHVzPnB1Ymxpc2hlZDwv c3RhdHVzPjxyZWxlYXNlX2xpbms+aHR0cHM6Ly93d3cuZHJ1cGFsLm9yZy9w cm9qZWN0L2RydXBhbC9yZWxlYXNlcy85LjMuMTA8L3JlbGVhc2VfbGluaz48 ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3By b2plY3RzL2RydXBhbC05LjMuMTAudGFyLmd6PC9kb3dubG9hZF9saW5rPjxk YXRlPjE2NDk4OTAwOTg8L2RhdGU+PGZpbGVzPjxmaWxlPjx1cmw+aHR0cHM6 Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4zLjEw LnRhci5nejwvdXJsPjxhcmNoaXZlX3R5cGU+dGFyLmd6PC9hcmNoaXZlX3R5 cGU+PG1kNT5mMTk5N2FlYWFkYzY1Y2IyYmRkODA2ZGM4MjdjNzM4YTwvbWQ1 PjxzaXplPjIwODk0ODc1PC9zaXplPjxmaWxlZGF0ZT4xNjQ5ODkwMDk4PC9m aWxlZGF0ZT48L2ZpbGU+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwu b3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMTAuemlwPC91cmw+PGFy Y2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PjdkYmFlNjkyOTlk NTBkMDAwZDFhZjQxYzMxM2I5NGU3PC9tZDU+PHNpemU+MzM3ODQ3NDM8L3Np emU+PGZpbGVkYXRlPjE2NDk4OTAwOTg8L2ZpbGVkYXRlPjwvZmlsZT48L2Zp bGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZh bHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVh c2UgdHlwZTwvbmFtZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVlPjwvdGVybT48 L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVkIGJ5IERydXBh bCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJpdHk+PC9yZWxl YXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5LjMuOTwvbmFtZT48dmVyc2lv bj45LjMuOTwvdmVyc2lvbj48dGFnPjkuMy45PC90YWc+PHN0YXR1cz5wdWJs aXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRydXBh bC5vcmcvcHJvamVjdC9kcnVwYWwvcmVsZWFzZXMvOS4zLjk8L3JlbGVhc2Vf bGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3JnL2Zp bGVzL3Byb2plY3RzL2RydXBhbC05LjMuOS50YXIuZ3o8L2Rvd25sb2FkX2xp bms+PGRhdGU+MTY0Nzg5OTM2MDwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5o dHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05 LjMuOS50YXIuZ3o8L3VybD48YXJjaGl2ZV90eXBlPnRhci5nejwvYXJjaGl2 ZV90eXBlPjxtZDU+MDlmZjQ5ZGY0ZWUwN2ExYWZjODMzOWU1ZjIyYzJjMTQ8 L21kNT48c2l6ZT4yMDY3OTMyMDwvc2l6ZT48ZmlsZWRhdGU+MTY0Nzg5OTM2 MDwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1 cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4zLjkuemlwPC91cmw+ PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PmM1OGIzZTY5 NmM2OTEyNjA5NmZmNzIzODdiNTY1M2NkPC9tZDU+PHNpemU+MzM0NTQ1NTI8 L3NpemU+PGZpbGVkYXRlPjE2NDc4OTkzNjA8L2ZpbGVkYXRlPjwvZmlsZT48 L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+ PHZhbHVlPlNlY3VyaXR5IHVwZGF0ZTwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxu YW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVl PjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVk IGJ5IERydXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJp dHk+PC9yZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5LjMuODwvbmFt ZT48dmVyc2lvbj45LjMuODwvdmVyc2lvbj48dGFnPjkuMy44PC90YWc+PHN0 YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9saW5rPmh0dHBzOi8v d3d3LmRydXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVsZWFzZXMvOS4zLjg8 L3JlbGVhc2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVw YWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuOC50YXIuZ3o8L2Rv d25sb2FkX2xpbms+PGRhdGU+MTY0NzQ0NjkxNDwvZGF0ZT48ZmlsZXM+PGZp bGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3Rz L2RydXBhbC05LjMuOC50YXIuZ3o8L3VybD48YXJjaGl2ZV90eXBlPnRhci5n ejwvYXJjaGl2ZV90eXBlPjxtZDU+NmUzZjZhYWNiOGE1ODdlNWM1NzZhYzg0 NjhiMjQwOWM8L21kNT48c2l6ZT4yMDY4MDY3ODwvc2l6ZT48ZmlsZWRhdGU+ MTY0NzQ0NjkxNDwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6 Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4zLjgu emlwPC91cmw+PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1 PjQ3YzBiMmUwNTU3ZWMwNTNlY2MwNWI5ZmVjOGI4Y2JiPC9tZDU+PHNpemU+ MzM0NTQxNjA8L3NpemU+PGZpbGVkYXRlPjE2NDc0NDY5MTQ8L2ZpbGVkYXRl PjwvZmlsZT48L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5 cGU8L25hbWU+PHZhbHVlPlNlY3VyaXR5IHVwZGF0ZTwvdmFsdWU+PC90ZXJt Pjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+SW5zZWN1 cmU8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIx Ij5Db3ZlcmVkIGJ5IERydXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGlj eTwvc2VjdXJpdHk+PC9yZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5 LjMuNzwvbmFtZT48dmVyc2lvbj45LjMuNzwvdmVyc2lvbj48dGFnPjkuMy43 PC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9saW5r Pmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVsZWFz ZXMvOS4zLjc8L3JlbGVhc2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRwczov L2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuNy50 YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY0NjMwMDU5OTwvZGF0ZT48 ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVz L3Byb2plY3RzL2RydXBhbC05LjMuNy50YXIuZ3o8L3VybD48YXJjaGl2ZV90 eXBlPnRhci5nejwvYXJjaGl2ZV90eXBlPjxtZDU+ZGI1N2ZiNjEzYjg1NjVm ZDE1NTkzYTBlN2FmNDEzOWE8L21kNT48c2l6ZT4yMDY3NDIyNzwvc2l6ZT48 ZmlsZWRhdGU+MTY0NjMwMDU5OTwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1 cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVw YWwtOS4zLjcuemlwPC91cmw+PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVf dHlwZT48bWQ1PjY1ZmZjZGQwODJkNGE1NTFjNWM1ODViODFmYWUzOGIyPC9t ZDU+PHNpemU+MzM0NTE3MzM8L3NpemU+PGZpbGVkYXRlPjE2NDYzMDA1OTk8 L2ZpbGVkYXRlPjwvZmlsZT48L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5S ZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90 ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+SW5z ZWN1cmU8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVk PSIxIj5Db3ZlcmVkIGJ5IERydXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBv bGljeTwvc2VjdXJpdHk+PC9yZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBh bCA5LjMuNjwvbmFtZT48dmVyc2lvbj45LjMuNjwvdmVyc2lvbj48dGFnPjku My42PC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9s aW5rPmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVs ZWFzZXMvOS4zLjY8L3JlbGVhc2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRw czovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMu Ni50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY0NTAyOTQ2MDwvZGF0 ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2Zp bGVzL3Byb2plY3RzL2RydXBhbC05LjMuNi50YXIuZ3o8L3VybD48YXJjaGl2 ZV90eXBlPnRhci5nejwvYXJjaGl2ZV90eXBlPjxtZDU+MDFhZGZiMmFjOTI0 NmYyOGM0OTQ0ODY3MDRjMjc2ODA8L21kNT48c2l6ZT4xOTg3MzE2MTwvc2l6 ZT48ZmlsZWRhdGU+MTY0NTAyOTQ2MDwvZmlsZWRhdGU+PC9maWxlPjxmaWxl Pjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9k cnVwYWwtOS4zLjYuemlwPC91cmw+PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hp dmVfdHlwZT48bWQ1Pjk1MzMxMWZmN2Y2ZjRmNDlmMzk3MWRmODJlYTY0ZTYw PC9tZDU+PHNpemU+MzIzODk3MDU8L3NpemU+PGZpbGVkYXRlPjE2NDUwMjk0 NjA8L2ZpbGVkYXRlPjwvZmlsZT48L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFt ZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVlPlNlY3VyaXR5IHVwZGF0ZTwv dmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48 dmFsdWU+SW5zZWN1cmU8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1cml0 eSBjb3ZlcmVkPSIxIj5Db3ZlcmVkIGJ5IERydXBhbCdzIHNlY3VyaXR5IGFk dmlzb3J5IHBvbGljeTwvc2VjdXJpdHk+PC9yZWxlYXNlPjxyZWxlYXNlPjxu YW1lPmRydXBhbCA5LjMuNTwvbmFtZT48dmVyc2lvbj45LjMuNTwvdmVyc2lv bj48dGFnPjkuMy41PC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1cz48 cmVsZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJvamVjdC9k cnVwYWwvcmVsZWFzZXMvOS4zLjU8L3JlbGVhc2VfbGluaz48ZG93bmxvYWRf bGluaz5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2Ry dXBhbC05LjMuNS50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY0NDAx MTY3NjwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5kcnVw YWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuNS50YXIuZ3o8L3Vy bD48YXJjaGl2ZV90eXBlPnRhci5nejwvYXJjaGl2ZV90eXBlPjxtZDU+MDg1 MmM1ZTU0Yzg1ODhiODg1NTg1OWI1ODQ2Mjk2MWM8L21kNT48c2l6ZT4xOTg2 ODM3MDwvc2l6ZT48ZmlsZWRhdGU+MTY0NDAxMTY3NjwvZmlsZWRhdGU+PC9m aWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9w cm9qZWN0cy9kcnVwYWwtOS4zLjUuemlwPC91cmw+PGFyY2hpdmVfdHlwZT56 aXA8L2FyY2hpdmVfdHlwZT48bWQ1Pjk4NjhkYmQyMmRhYWZjYTgyZGY2YzEw MmI1NDdmYjljPC9tZDU+PHNpemU+MzIzODk0NzA8L3NpemU+PGZpbGVkYXRl PjE2NDQwMTE2NzY8L2ZpbGVkYXRlPjwvZmlsZT48L2ZpbGVzPjx0ZXJtcz48 dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVlPkJ1ZyBmaXhl czwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFt ZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxzZWN1 cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVkIGJ5IERydXBhbCdzIHNlY3VyaXR5 IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJpdHk+PC9yZWxlYXNlPjxyZWxlYXNl PjxuYW1lPmRydXBhbCA5LjMuNDwvbmFtZT48dmVyc2lvbj45LjMuNDwvdmVy c2lvbj48dGFnPjkuMy40PC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0YXR1 cz48cmVsZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJvamVj dC9kcnVwYWwvcmVsZWFzZXMvOS4zLjQ8L3JlbGVhc2VfbGluaz48ZG93bmxv YWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3Rz L2RydXBhbC05LjMuNC50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+MTY0 MzgzMjgwNTwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0cC5k cnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuNC50YXIuZ3o8 L3VybD48YXJjaGl2ZV90eXBlPnRhci5nejwvYXJjaGl2ZV90eXBlPjxtZDU+ NjE2MDcxNGUyZGY4NzNkNDEzY2EzNDFkMTkyODkxYWU8L21kNT48c2l6ZT4x OTg4MzU1Mjwvc2l6ZT48ZmlsZWRhdGU+MTY0MzgzMjgwNTwvZmlsZWRhdGU+ PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxl cy9wcm9qZWN0cy9kcnVwYWwtOS4zLjQuemlwPC91cmw+PGFyY2hpdmVfdHlw ZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PmQwYjAzOWM5YzhkMjUzYjYwYmQ5 NGEwYmU2Nzk1ZTEwPC9tZDU+PHNpemU+MzI0MDE4OTI8L3NpemU+PGZpbGVk YXRlPjE2NDM4MzI4MDU8L2ZpbGVkYXRlPjwvZmlsZT48L2ZpbGVzPjx0ZXJt cz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVlPkJ1ZyBm aXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwv bmFtZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVlPjwvdGVybT48L3Rlcm1zPjxz ZWN1cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVkIGJ5IERydXBhbCdzIHNlY3Vy aXR5IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJpdHk+PC9yZWxlYXNlPjxyZWxl YXNlPjxuYW1lPmRydXBhbCA5LjMuMzwvbmFtZT48dmVyc2lvbj45LjMuMzwv dmVyc2lvbj48dGFnPjkuMy4zPC90YWc+PHN0YXR1cz5wdWJsaXNoZWQ8L3N0 YXR1cz48cmVsZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRydXBhbC5vcmcvcHJv amVjdC9kcnVwYWwvcmVsZWFzZXMvOS4zLjM8L3JlbGVhc2VfbGluaz48ZG93 bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2pl Y3RzL2RydXBhbC05LjMuMy50YXIuZ3o8L2Rvd25sb2FkX2xpbms+PGRhdGU+ MTY0MjYwNzc2OTwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5odHRwczovL2Z0 cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMy50YXIu Z3o8L3VybD48YXJjaGl2ZV90eXBlPnRhci5nejwvYXJjaGl2ZV90eXBlPjxt ZDU+YmQ0YThiMmE0MmJiZmU0YTAxZWE1YTc0MDMxMGExZGQ8L21kNT48c2l6 ZT4xOTgxMTQ4Njwvc2l6ZT48ZmlsZWRhdGU+MTY0MjYwNzc2OTwvZmlsZWRh dGU+PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9m aWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4zLjMuemlwPC91cmw+PGFyY2hpdmVf dHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PjUwNjUwZTVmZTA5YzVhMGI3 YjI1OTliZDNjNzMxODdjPC9tZDU+PHNpemU+MzIzMjU3NDU8L3NpemU+PGZp bGVkYXRlPjE2NDI2MDc3Njk8L2ZpbGVkYXRlPjwvZmlsZT48L2ZpbGVzPjx0 ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+PHZhbHVlPlNl Y3VyaXR5IHVwZGF0ZTwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJlbGVh c2UgdHlwZTwvbmFtZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVlPjwvdGVybT48 L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVkIGJ5IERydXBh bCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJpdHk+PC9yZWxl YXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5LjMuMjwvbmFtZT48dmVyc2lv bj45LjMuMjwvdmVyc2lvbj48dGFnPjkuMy4yPC90YWc+PHN0YXR1cz5wdWJs aXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRydXBh bC5vcmcvcHJvamVjdC9kcnVwYWwvcmVsZWFzZXMvOS4zLjI8L3JlbGVhc2Vf bGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3JnL2Zp bGVzL3Byb2plY3RzL2RydXBhbC05LjMuMi50YXIuZ3o8L2Rvd25sb2FkX2xp bms+PGRhdGU+MTY0MTM1MTc5OTwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVybD5o dHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05 LjMuMi50YXIuZ3o8L3VybD48YXJjaGl2ZV90eXBlPnRhci5nejwvYXJjaGl2 ZV90eXBlPjxtZDU+OGI2ZjYyNWQyM2M4OGNhZjQxM2E0OGRkZjZjMDExNTA8 L21kNT48c2l6ZT4xOTgxMDIyNjwvc2l6ZT48ZmlsZWRhdGU+MTY0MTM1MTc5 OTwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAuZHJ1 cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4zLjIuemlwPC91cmw+ PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PmEyOTAxYzVk NGJjOTg4NzczZDJiNDAyZDAzNjAwMGZlPC9tZDU+PHNpemU+MzIzMjUzMjQ8 L3NpemU+PGZpbGVkYXRlPjE2NDEzNTE3OTk8L2ZpbGVkYXRlPjwvZmlsZT48 L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25hbWU+ PHZhbHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1lPlJl bGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVlPjwvdGVy bT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVkIGJ5IERy dXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJpdHk+PC9y ZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5LjMuMTwvbmFtZT48dmVy c2lvbj45LjMuMTwvdmVyc2lvbj48dGFnPjkuMy4xPC90YWc+PHN0YXR1cz5w dWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9saW5rPmh0dHBzOi8vd3d3LmRy dXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVsZWFzZXMvOS4zLjE8L3JlbGVh c2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3Jn L2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMS50YXIuZ3o8L2Rvd25sb2Fk X2xpbms+PGRhdGU+MTY0MTM0MjY3OTwvZGF0ZT48ZmlsZXM+PGZpbGU+PHVy bD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBh bC05LjMuMS50YXIuZ3o8L3VybD48YXJjaGl2ZV90eXBlPnRhci5nejwvYXJj aGl2ZV90eXBlPjxtZDU+NzJmYzFmNzYwZjU4NDg4NzFkMmVmMzFmYTEyZDg1 ODE8L21kNT48c2l6ZT4xOTgwOTU0MDwvc2l6ZT48ZmlsZWRhdGU+MTY0MTM0 MjY3OTwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9mdHAu ZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4zLjEuemlwPC91 cmw+PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1PjRiMWI1 NGQ1NDRjMzRmZDI2NWM0MjJlOTg3YTEzMjdiPC9tZDU+PHNpemU+MzIzMjUy MjY8L3NpemU+PGZpbGVkYXRlPjE2NDEzNDI2Nzk8L2ZpbGVkYXRlPjwvZmls ZT48L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8L25h bWU+PHZhbHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxuYW1l PlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+SW5zZWN1cmU8L3ZhbHVlPjwv dGVybT48L3Rlcm1zPjxzZWN1cml0eSBjb3ZlcmVkPSIxIj5Db3ZlcmVkIGJ5 IERydXBhbCdzIHNlY3VyaXR5IGFkdmlzb3J5IHBvbGljeTwvc2VjdXJpdHk+ PC9yZWxlYXNlPjxyZWxlYXNlPjxuYW1lPmRydXBhbCA5LjMuMDwvbmFtZT48 dmVyc2lvbj45LjMuMDwvdmVyc2lvbj48dGFnPjkuMy4wPC90YWc+PHN0YXR1 cz5wdWJsaXNoZWQ8L3N0YXR1cz48cmVsZWFzZV9saW5rPmh0dHBzOi8vd3d3 LmRydXBhbC5vcmcvcHJvamVjdC9kcnVwYWwvcmVsZWFzZXMvOS4zLjA8L3Jl bGVhc2VfbGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwu b3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMC50YXIuZ3o8L2Rvd25s b2FkX2xpbms+PGRhdGU+MTYzOTA1MTI3NjwvZGF0ZT48ZmlsZXM+PGZpbGU+ PHVybD5odHRwczovL2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2Ry dXBhbC05LjMuMC50YXIuZ3o8L3VybD48YXJjaGl2ZV90eXBlPnRhci5nejwv YXJjaGl2ZV90eXBlPjxtZDU+ZThiYWY5ZmMwOTZiMTI1YjM4NGI4YTUyMzRm YWJiYzI8L21kNT48c2l6ZT4xOTgwOTU1MTwvc2l6ZT48ZmlsZWRhdGU+MTYz OTA1MTI3NjwvZmlsZWRhdGU+PC9maWxlPjxmaWxlPjx1cmw+aHR0cHM6Ly9m dHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVwYWwtOS4zLjAuemlw PC91cmw+PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48bWQ1Pjcy ZjkwNDViZmZmNTJmYzRkMGU3MDFkMzk5Y2VhMWJlPC9tZDU+PHNpemU+MzIz MTkxNDE8L3NpemU+PGZpbGVkYXRlPjE2MzkwNTEyNzY8L2ZpbGVkYXRlPjwv ZmlsZT48L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNlIHR5cGU8 L25hbWU+PHZhbHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0ZXJtPjxu YW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+TmV3IGZlYXR1cmVzPC92 YWx1ZT48L3Rlcm0+PHRlcm0+PG5hbWU+UmVsZWFzZSB0eXBlPC9uYW1lPjx2 YWx1ZT5JbnNlY3VyZTwvdmFsdWU+PC90ZXJtPjwvdGVybXM+PHNlY3VyaXR5 IGNvdmVyZWQ9IjEiPkNvdmVyZWQgYnkgRHJ1cGFsJ3Mgc2VjdXJpdHkgYWR2 aXNvcnkgcG9saWN5PC9zZWN1cml0eT48L3JlbGVhc2U+PHJlbGVhc2U+PG5h bWU+ZHJ1cGFsIDkuMy4wLXJjMTwvbmFtZT48dmVyc2lvbj45LjMuMC1yYzE8 L3ZlcnNpb24+PHRhZz45LjMuMC1yYzE8L3RhZz48c3RhdHVzPnB1Ymxpc2hl ZDwvc3RhdHVzPjxyZWxlYXNlX2xpbms+aHR0cHM6Ly93d3cuZHJ1cGFsLm9y Zy9wcm9qZWN0L2RydXBhbC9yZWxlYXNlcy85LjMuMC1yYzE8L3JlbGVhc2Vf bGluaz48ZG93bmxvYWRfbGluaz5odHRwczovL2Z0cC5kcnVwYWwub3JnL2Zp bGVzL3Byb2plY3RzL2RydXBhbC05LjMuMC1yYzEudGFyLmd6PC9kb3dubG9h ZF9saW5rPjxkYXRlPjE2Mzc5NTk0MjQ8L2RhdGU+PGZpbGVzPjxmaWxlPjx1 cmw+aHR0cHM6Ly9mdHAuZHJ1cGFsLm9yZy9maWxlcy9wcm9qZWN0cy9kcnVw YWwtOS4zLjAtcmMxLnRhci5nejwvdXJsPjxhcmNoaXZlX3R5cGU+dGFyLmd6 PC9hcmNoaXZlX3R5cGU+PG1kNT5iNDNjYWExYjhiOTlhYWU2NjcxY2NjMDM3 ZGUxMWQ5ZjwvbWQ1PjxzaXplPjE5ODA4NzEzPC9zaXplPjxmaWxlZGF0ZT4x NjM3OTU5NDI0PC9maWxlZGF0ZT48L2ZpbGU+PGZpbGU+PHVybD5odHRwczov L2Z0cC5kcnVwYWwub3JnL2ZpbGVzL3Byb2plY3RzL2RydXBhbC05LjMuMC1y YzEuemlwPC91cmw+PGFyY2hpdmVfdHlwZT56aXA8L2FyY2hpdmVfdHlwZT48 bWQ1PmE1ZGE1ZDM1ZGU2ODIyNzllMWQ3ODZlNGZiODc0ZDM3PC9tZDU+PHNp emU+MzI1MTA1NTE8L3NpemU+PGZpbGVkYXRlPjE2Mzc5NTk0MjQ8L2ZpbGVk YXRlPjwvZmlsZT48L2ZpbGVzPjx0ZXJtcz48dGVybT48bmFtZT5SZWxlYXNl IHR5cGU8L25hbWU+PHZhbHVlPkJ1ZyBmaXhlczwvdmFsdWU+PC90ZXJtPjx0 ZXJtPjxuYW1lPlJlbGVhc2UgdHlwZTwvbmFtZT48dmFsdWU+TmV3IGZlYXR1 cmVzPC92YWx1ZT48L3Rlcm0+PHRlcm0+PG5hbWU+UmVsZWFzZSB0eXBlPC9u YW1lPjx2YWx1ZT5JbnNlY3VyZTwvdmFsdWU+PC90ZXJtPjwvdGVybXM+PHNl Y3VyaXR5PlJDIHJlbGVhc2VzIGFyZSBub3QgY292ZXJlZCBieSBEcnVwYWwg c2VjdXJpdHkgYWR2aXNvcmllcy48L3NlY3VyaXR5PjwvcmVsZWFzZT48cmVs ZWFzZT48bmFtZT5kcnVwYWwgOS4zLjAtYmV0YTM8L25hbWU+PHZlcnNpb24+ OS4zLjAtYmV0YTM8L3ZlcnNpb24+PHRhZz45LjMuMC1iZXRhMzwvdGFnPjxz dGF0dXM+cHVibGlzaGVkPC9zdGF0dXM+PHJlbGVhc2VfbGluaz48ZmlsZT48 L2ZpbGU+PGZpbGVzPjwvZmlsZXM+PC9yZWxlYXNlX2xpbms+PC9yZWxlYXNl PjwvcmVsZWFzZXM+CjwvcHJvamVjdD4K --IGIbwxo4k9-- From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 13:17:30 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 17:17:30 +0000 Received: from localhost ([127.0.0.1]:54992 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o98eY-0006pB-0i for submit@debbugs.gnu.org; Wed, 06 Jul 2022 13:17:30 -0400 Received: from heytings.org ([95.142.160.155]:55484) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o98eU-0006p2-Mp for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 13:17:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657127845; bh=63utx7ANV4b409N6Bs6HsWiCWYBL3E8on5C2jZzXmoA=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=AC5jhhJBu0uw7yHC3YP5/0cULHZpw1GqRoWJ1JMLP86x82tZQS6SFtfe/dnhWZzTe y2vWH6OF6gZEPRWWrDtbeqJzjf2zeFkqgp6PiXN3FNqVnFB4Q/BcjlkaxP33bicW1Q b1jU/K0BE0+HvUwXs7nnG42GigHGAQIpTO+W7iYDRWggKWkQye7GUkI1v5GxyWkCtP lJZlzmS5eoIvH2Ul/YetHxm8TgWCtzsKLZaiWdQ3Unn83ia3UcXRMaZu7pO0UPgIS7 cZR8n+ZoE2TXZmv/eOazBGEb0LCkNG/EEGrKhaDZtDhOWkAmbyu/1CavKIc2y0mY+1 NCw8VVJ7sI0wg== Date: Wed, 06 Jul 2022 17:17:25 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <831quy6v47.fsf@gnu.org> Message-ID: <762d22480922a3766f2e@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> <83czei74ew.fsf@gnu.org> <762d22480901fd242010@heytings.org> <837d4q72ir.fsf@gnu.org> <762d224809a270411298@heytings.org> <831quy6v47.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >>> A 10-year old 3.4 GHz Core i7. My Emacs is slightly slower than >>> normal because it's a 32-bit build --with-wide-int. >> >> This may explain that. Because my laptop has 2.8 GHz Core i7 CPU, so >> it should be slower. > > Then maybe try to increase your keyboard auto-repeat rate? > The default auto-repeat rate on my system is 25. I tried with 30, 35 and 40, Emacs is still as responsive. With 45 your recipe works, I see some chokes. Why is that a problem? From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 13:30:45 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 17:30:45 +0000 Received: from localhost ([127.0.0.1]:55019 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o98rM-0007DD-Ms for submit@debbugs.gnu.org; Wed, 06 Jul 2022 13:30:45 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44648) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o98rE-0007Ce-JA for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 13:30:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51900) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o98r8-0007Ja-Tm; Wed, 06 Jul 2022 13:30:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=TTC95X/7/O7vJopfxVcMVo2weag/NQ4cBB2TSpWHM4Q=; b=i2EgPMX9plmc cqBpr9fl4Te1bBN7CQlVNLi0r7qHhHgi32SP+vIgv6ssI4LEh3yHV0Jx1Ce/+5xnQ8pbhtSDp/AGV ukpgkf/EcvoDr3ZMtSfkQNj2qz6oxKF9bIp1DobY2IZv81YCz5D3MwC7/ZRNIbQmlz6y13rCy3T73 vqRgbTScVgcnb9CMowEVtC8hf8A6ve8XIkmOUNf37FMQgmJ7dLX2favjmtuoEdY7DMCyO/LTmi4V2 CdjB9vZKHVg80cbBs5IHlaxzc5W0tVsaAYqVe/ElS76KEWQYPQUlC0Oxk0vC2F4XuF1C4O95XuZmd /5bzUkw19G+Ctw0+fU4iUA==; Received: from [87.69.77.57] (port=2513 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o98r6-00056B-N9; Wed, 06 Jul 2022 13:30:29 -0400 Date: Wed, 06 Jul 2022 20:30:20 +0300 Message-Id: <83y1x65etv.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <762d22480922a3766f2e@heytings.org> (message from Gregory Heytings on Wed, 06 Jul 2022 17:17:25 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> <83czei74ew.fsf@gnu.org> <762d22480901fd242010@heytings.org> <837d4q72ir.fsf@gnu.org> <762d224809a270411298@heytings.org> <831quy6v47.fsf@gnu.org> <762d22480922a3766f2e@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 06 Jul 2022 17:17:25 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > Then maybe try to increase your keyboard auto-repeat rate? > > The default auto-repeat rate on my system is 25. I tried with 30, 35 and > 40, Emacs is still as responsive. With 45 your recipe works, I see some > chokes. Why is that a problem? Because I think we should understand the reason. I suspect the buffer doesn't get narrowed or something. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 13:50:58 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 17:50:58 +0000 Received: from localhost ([127.0.0.1]:55055 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o99Av-0007nc-Sc for submit@debbugs.gnu.org; Wed, 06 Jul 2022 13:50:58 -0400 Received: from eggs.gnu.org ([209.51.188.92]:48702) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o99Au-0007nN-KH for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 13:50:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52152) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o99Ap-0006nU-4S; Wed, 06 Jul 2022 13:50:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=E/B8qcxFujU1E8oM+QEAw1iSS+JzvUOyhFjMxns+Tdo=; b=TweP9EhP/qFR HYUNzecuYdcwb8jAc7JVsXbk7hW8AmIZ9sJD50GEocSHYLBYhwsk/XgRgmafdIbmFWy0BFFD8q7IC XdUhauEAjR1ehKy1TB/zVd7RaoNL9QzLNRUMEF4wE2CoqsP/HtbQQP40k3gxtDsgleXrUXeByM/mF 8pRHOHSq+SpG47d/eoEsZ1kiJWQQ153uUrAJ/Q8vt614+BBtIqgx0bse7G2cUduZ3WjOIdTAS07lf D6o3r9VdGSeljqB/EnkCb6WWeROPaf1zYDWYUY5WTO1gCdV4Lu7cc1vqtYMSAOJLaXLzKNMS9zctB fr+EdlFj+kMIpwtmLsLIag==; Received: from [87.69.77.57] (port=3783 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o99Ao-0008Ic-K6; Wed, 06 Jul 2022 13:50:50 -0400 Date: Wed, 06 Jul 2022 20:50:45 +0300 Message-Id: <83wncq5dvu.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <762d224809c7a439895e@heytings.org> (message from Gregory Heytings on Wed, 06 Jul 2022 16:57:22 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 06 Jul 2022 16:57:22 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > > How is it different from the code in the display engine that calls > > next-single-char-property-change or remove-text-properties, or loops > > over all the overlays at certain position calling overlay-get? In Emacs > > nowadays font-lock is almost always called as part of redisplay, so I > > don't see how we can separate them and say that this is a different > > problem. > > Again, I don't know (my understanding of the font-lock machinery is very > limited). Your understanding of font-lock, or your understanding how it is invoked from the display code? I can help with the latter. When Emacs is about to display some chunk of text, it checks whether the text has a non-nil 'fontified' property. If it does, that chunk of text was already fontified, but if not, the display engine calls font-lock (via jit-lock.el) to fontify the next 1500 characters, and puts a non-nil 'fontified' property on those 1500 characters. The result is face properties, which are then actually displayed. So if font-lock is slow for some reason, it will slow down redisplay. > I only observe that turning font lock mode off makes things > significantly better. And that turning highlighting off in such > files is what other editors do, too. So at this point I don't see > why it wouldn't be a reasonable thing to do. I think we should understand why it becomes slow before we decide whether to turn it off or speed it up somehow. Other editors fontify text using very different methods, so their limitations are not necessarily similar to ours. Btw, what happens if you turn on jit-lock-debug-mode? > That's something I already did, and yes, I do see Emacs choking. Try to > navigate in the attached 30K file. Then try again after turning font-lock > mode off. > > (But I do not understand what you mean by "leave 'recenter' as it behaves > on master".) I meant disable its disabling. > > For example, why not use 2 window-fulls before and after the window > > (assuming that gives us a smaller chunk)? > > That would mean to compute the dimensions of the window in a command-hook. > I tried to make that hook as efficient as possible, so it is on purpose > that I used a constant there, with something that seemed a reasonable > default, instead of computing it again and again. The primitives that access the window height and width are simple accessors to C variables, so they are very cheap. So I think this might be a case of premature optimization. A fixed constant is problematic because it needs to be large enough to satisfy the largest possible window. So for many windows we process too many characters, and slow down redisplay unnecessarily for the sake of those extreme cases. > > The point is that we should try to squeeze the most out of this > > narrowing idea, before we start disabling up features. Because > > disabling features is a kind of retreat, an indication that we turned > > every stone and couldn't make Emacs fast enough, so we are kinda giving > > up. And it's too early to give up, IMO. > > I agree with that idea/direction, but again I think that at least now > Emacs doesn't do worse than all other editors out there, and in fact it > does way better. If all editors turn off highlighting in such cases, that > must surely be for a good reason. Highlighting means parsing, and parsing > is infinitely more expensive than not parsing. Again, why give up without trying to fix that? > > And to me this means that you see an example of a problem I mentioned > > earlier: code from the display engine is used in commands that basically > > have nothing to do with redisplay per se, and your current > > implementation doesn't take care of those calls into the display code by > > commands like recenter, C-v, C-n, etc. I think sooner or later we will > > need to present a narrowed buffer to them as well. > > You mean, a widened buffer? No, a narrowed buffer. These commands use code from the display engine, so letting them process a widened buffer means they run slowly. > Yes, that's a question for which I still don't have a clear answer: > is it better to "whitelist" commands that will always work correctly > with a narrowed buffer or to "whitelist" commands that may require a > widened buffer? I tend to think that the latter is better. I think we need to present a narrowed buffer to display code regardless of whether it runs by redisplay or by commands like C-n or C-v or 'recenter'. > > What kind of example do you want to see? What do you mean by > > "problematic" in this context? > > I mean, an actual example of "Lisp code that expects to have access to the > entire buffer when it has no reason to expect narrowing", that is, Lisp > code that expects to have access to the entire buffer without using > (save-restriction (widen) ...). Are you saying that you don't believe in the existence of such code? Every Lisp program expects to see the same narrowing (or lack thereof) as the user sees. So anything different is a time bomb waiting to go off. > > Which is why I'm saying that it is better to restrict the display code > > via some other means, and leave the narrowing alone. After all, it is > > our code that deliberately references BEGV and ZV in the display engine, > > so using some other values shouldn't be that difficult, I think. > > Yes, I've understood that you want to do something else. No, it's the same idea, just implemented differently, and thus without some of the problems we are discussing. (But slowness of font-lock will still need a separate solution -- or the conclusion that we have no alternative but turn it off.) From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 17:53:52 2022 Received: (at 56393) by debbugs.gnu.org; 6 Jul 2022 21:53:52 +0000 Received: from localhost ([127.0.0.1]:55317 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Cy0-0008DF-IV for submit@debbugs.gnu.org; Wed, 06 Jul 2022 17:53:52 -0400 Received: from heytings.org ([95.142.160.155]:55742) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Cxy-0008D5-7v for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 17:53:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657144428; bh=SL/XblhGuQUQafZz7c+cj+giQA+DPSKp+LR0UTaJ/G0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=6dw/cBnKVsKMSnG/RcEJJf8WvXiTW4XvaOgXnf8Mn021MOkvde6srtrbtgp1lFmn3 BjoToE3VxP9IxkHrfFn9wzHHJtyL7zUD/YEfre/j93Nw4Vmqj+avDVPvirIszUISxO Fwu7C4dcU6swuDD4O8qKGWARMW07XFnVGuqmHOe3og84r0CfEU26a4cFFoySNTvhDF w1B8YJwZ9RtNQLuSh3J/BIEIT7Wwi+JJAvwE6ive2B5voJYl1JiaFbGpL2uWFOTsVk ycOkApI+gJSfT1zvhsdioWTpVtRLH2xXIRh2BJPCs9S09odNDdVYAwR45Igb7wMTBI 8d3nmIgKHAf0w== Date: Wed, 06 Jul 2022 21:53:48 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83y1x65etv.fsf@gnu.org> Message-ID: <762d22480991e943ef2b@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> <83czei74ew.fsf@gnu.org> <762d22480901fd242010@heytings.org> <837d4q72ir.fsf@gnu.org> <762d224809a270411298@heytings.org> <831quy6v47.fsf@gnu.org> <762d22480922a3766f2e@heytings.org> <83y1x65etv.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> The default auto-repeat rate on my system is 25. I tried with 30, 35 >> and 40, Emacs is still as responsive. With 45 your recipe works, I see >> some chokes. Why is that a problem? > > Because I think we should understand the reason. I suspect the buffer > doesn't get narrowed or something. > Okay, I'll see if I can find something interesting. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 20:27:11 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 00:27:11 +0000 Received: from localhost ([127.0.0.1]:55365 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9FMN-0005hA-Hx for submit@debbugs.gnu.org; Wed, 06 Jul 2022 20:27:11 -0400 Received: from mail-pg1-f169.google.com ([209.85.215.169]:36541) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9FMJ-0005gk-M4 for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 20:27:10 -0400 Received: by mail-pg1-f169.google.com with SMTP id s206so15580934pgs.3 for <56393@debbugs.gnu.org>; Wed, 06 Jul 2022 17:27:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version; bh=DQqZ9YSVoBCdq+A2B7DDRuNv0eIBIwel/PeqkXBrGJA=; b=ToKcqMwE58KtJlu4tYSJQoidCJByCzIraI6sQ737PDduUVF8N0OMdidaQ5SrwaCwex EUJ4Zi44qyasOpDkWtm2XdHciNfK4cwcNE9aob2uKMQ4PqmNm8h10RJwTAM4GjEkh8FO MAotDhtJO/Jimqt+GyBJzYRQfc0odeaEgHsrXOaMXZps9vTK6bnSaagwq0UXaTcqoOzk AyynTW4SbjNzLDde1Lp0k6aov2AJMKUScZCekXRGidIK7aihpeO/S+R95f0hqMz/HWjU 5aV9mhADNt9gsSWKKN5fycSVk6hYRquulJj0bzuRk8SUR3o0CH8Utsv4DFCIka5ekv8B 8K+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=DQqZ9YSVoBCdq+A2B7DDRuNv0eIBIwel/PeqkXBrGJA=; b=dr9IBR4MRGyfS6R92iJn+Fe4jwH+82KIyIWjxLOhucSdRc9lhruUJLTR6kWn0oQttE JdSsh6C+aYTvoAhe3v994x7LlY95xuGcPuSVbarLEeVqop417Xv3ILMfzjtJ2quTuW/c 4/7gED8Q6fnxfvQkPLS9j7J6qnBXwiwl5/A4EUPs3Pa46OgD1xqewbvsH59bt1+I8Mhr q/hYhzrmqrM6/IawrMDWdSF+6mWudG7ofVrqB4YIlUxODsa/+GU5SyqMywhLdrSKVq8Q qgjCrL8pk72X3ikkhVSuFEJPx9kn+9IST1ZnqFShP1a+JWp6OUgYFPE8J0UjdrMcz08o YP2g== X-Gm-Message-State: AJIora8NKDwywA6iCsuJngaif2/R6jOYILC8STKVr+C4RNSy/xrn9zP3 6iaNhsKDV69anHBNvRGZsLU= X-Google-Smtp-Source: AGRyM1tNq+FVy9e1BXqArydSkeqQNlWfBlbnL6gGcdEz9gj9o15TQueKY6Ei+Ob2PPr9fHZn1R/JBA== X-Received: by 2002:a17:90b:38cd:b0:1ef:b4c2:3624 with SMTP id nn13-20020a17090b38cd00b001efb4c23624mr1697272pjb.168.1657153621662; Wed, 06 Jul 2022 17:27:01 -0700 (PDT) Received: from localhost ([209.95.60.151]) by smtp.gmail.com with ESMTPSA id y7-20020aa78f27000000b00522c0a75c39sm25510054pfr.196.2022.07.06.17.26.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Jul 2022 17:27:00 -0700 (PDT) From: Ihor Radchenko To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83wncq5dvu.fsf@gnu.org> References: <38c1a31040d2d2bc47ae@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> Date: Thu, 07 Jul 2022 08:28:07 +0800 Message-ID: <87k08ppy08.fsf@localhost> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.2 (/) X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.8 (/) Eli Zaretskii writes: >> Again, I don't know (my understanding of the font-lock machinery is very >> limited). > > Your understanding of font-lock, or your understanding how it is > invoked from the display code? > > I can help with the latter. When Emacs is about to display some chunk > of text, it checks whether the text has a non-nil 'fontified' > property. If it does, that chunk of text was already fontified, but > if not, the display engine calls font-lock (via jit-lock.el) to > fontify the next 1500 characters, and puts a non-nil 'fontified' > property on those 1500 characters. The result is face properties, > which are then actually displayed. Doesn't font-lock extend the region to be fontified to at least the full current line? (see font-lock-extend-region-functions and font-lock-extend-region-wholelines) Best, Ihor From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 06 20:38:26 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 00:38:27 +0000 Received: from localhost ([127.0.0.1]:55371 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9FXG-0005zI-JM for submit@debbugs.gnu.org; Wed, 06 Jul 2022 20:38:26 -0400 Received: from heytings.org ([95.142.160.155]:55886) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9FXE-0005z8-PG for 56393@debbugs.gnu.org; Wed, 06 Jul 2022 20:38:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657154302; bh=epLjM/I0KBJXGtmQtyocSFZRMEYTF/cyyFtqWZKhgK0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=ydWI04TkwfZS9JJUkepx6okhnSqBVGdYOVcy7C6D2PmDHzZk3UI/Fmyklc785a4hh hbvFp2BBLKgiCw3UAhhwGSGz1XHHoRzigP101vB1rytcJhq1kKtWW9s3bGIJPVI68q Wfr28Q6fRRnwcN76WRi9soWEyHhMrynL4DmRc0A8Nm2klLYTl/9tETT9zCF3Q7YmP5 SxZF1VhVa+WvSLJ5O44otKso/x1PEcmmOUUtrjTQ+VS+dIFv5kf3OmiiyYC4pUmVhq UA0kiQ0Z+llFivwLdvomwsGpkYlMIcIIQ2OI48mDuNxsTizQKKpZtFovwXd90ep5LV +gHIcuUMhUSzg== Date: Thu, 07 Jul 2022 00:38:22 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83wncq5dvu.fsf@gnu.org> Message-ID: <3ffab1919622ce555e12@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > I can help with the latter. When Emacs is about to display some chunk > of text, it checks whether the text has a non-nil 'fontified' property. > If it does, that chunk of text was already fontified, but if not, the > display engine calls font-lock (via jit-lock.el) to fontify the next > 1500 characters, and puts a non-nil 'fontified' property on those 1500 > characters. The result is face properties, which are then actually > displayed. > > So if font-lock is slow for some reason, it will slow down redisplay. > Thanks. I meant the former, but this is very useful nonetheless. It means that the Lisp code which calculates these properties is (or at least can be) a bottleneck. To determine which properties must be placed on these 1500 characters, it must presumably look further away, possibly much further away. > > I think we should understand why it becomes slow before we decide > whether to turn it off or speed it up somehow. Other editors fontify > text using very different methods, so their limitations are not > necessarily similar to ours. > We can try, yes. But my feeling so far is that this won't get us anywhere. > > Btw, what happens if you turn on jit-lock-debug-mode? > I'll try that. >> I mean, an actual example of "Lisp code that expects to have access to >> the entire buffer when it has no reason to expect narrowing", that is, >> Lisp code that expects to have access to the entire buffer without >> using (save-restriction (widen) ...). > > Are you saying that you don't believe in the existence of such code? > Every Lisp program expects to see the same narrowing (or lack thereof) > as the user sees. So anything different is a time bomb waiting to go > off. > I don't say that I don't believe in the existence of such code. I get your point, and agree that narrow-mode (ab)uses a feature in a way that it was never intended to be (ab)used. But I also say that files with extremely long lines are rare, and that it's in my opinion much better to see some rare functions fail when opening such files than to see Emacs becoming unusable. Or in other words: if all essential editing commands work on these files, that's already a big step forward. >> Yes, I've understood that you want to do something else. > > No, it's the same idea, just implemented differently, and thus without > some of the problems we are discussing. (But slowness of font-lock will > still need a separate solution -- or the conclusion that we have no > alternative but turn it off.) > I tried to do that, and so far I don't see how your alternative approach could work. The problem with long lines is not only that redisplay takes forever in some cases, it's also (and perhaps mainly) that commands take forever. With dictionary.json, with point on the last character, C-p takes (on my computer) about 26 seconds outside of redisplay. I don't see how we could tell all that code that it should work on a narrowed buffer without actually narrowing the buffer. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 01:43:29 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 05:43:29 +0000 Received: from localhost ([127.0.0.1]:55522 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9KIT-0005Qt-0I for submit@debbugs.gnu.org; Thu, 07 Jul 2022 01:43:29 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41442) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9KIO-0005Qe-Vi for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 01:43:28 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:39648) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9KIJ-0004zJ-DD; Thu, 07 Jul 2022 01:43:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=HfoeAmfO+4UJga3BoYNfYSNlDwL6d4BKDIVW1395ky0=; b=O0OjSwaOZijE pHZ/VjTDlVZVodgbSeRtPV3w/BDw0upwR3MNDZ4LKXePSH3sw0swImq8USyc9w2ZqY3OWIj1FbN9F 4BbcYKektqeKp/IfYOlXenxNHVBY/VxhHg6Fe2kFDxQ8msGLun9GPwaYF+UDVde+MPvK00HwMNfYU l8bDorUt1iDBpZRiJvrrq2QzyK2VZEv50oI778CpYyQp7t+kgTBSfX827bNTjcKR5cjaTNZRz5aOb brSgI7GP3ZtrB9p5H+j/bxMWPB67ZkDwTd9LggtNEiV7E7F3Mr3MBmTupgJ/KXctMgEKOY8XD3eH2 zoqVCIqDSUkq2g6OeBrQOg==; Received: from [87.69.77.57] (port=3409 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9KII-0002yQ-GO; Thu, 07 Jul 2022 01:43:19 -0400 Date: Thu, 07 Jul 2022 08:43:15 +0300 Message-Id: <83k08p5vgs.fsf@gnu.org> From: Eli Zaretskii To: Ihor Radchenko In-Reply-To: <87k08ppy08.fsf@localhost> (message from Ihor Radchenko on Thu, 07 Jul 2022 08:28:07 +0800) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <87k08ppy08.fsf@localhost> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Ihor Radchenko > Cc: Gregory Heytings , larsi@gnus.org, > 56393@debbugs.gnu.org > Date: Thu, 07 Jul 2022 08:28:07 +0800 > > > I can help with the latter. When Emacs is about to display some chunk > > of text, it checks whether the text has a non-nil 'fontified' > > property. If it does, that chunk of text was already fontified, but > > if not, the display engine calls font-lock (via jit-lock.el) to > > fontify the next 1500 characters, and puts a non-nil 'fontified' > > property on those 1500 characters. The result is face properties, > > which are then actually displayed. > > Doesn't font-lock extend the region to be fontified to at least the full > current line? (see font-lock-extend-region-functions and > font-lock-extend-region-wholelines) It's possible that this is indeed the problem. If that's the case, we should probably limit that widening as well. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 01:54:00 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 05:54:00 +0000 Received: from localhost ([127.0.0.1]:55527 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9KSe-0005ic-1A for submit@debbugs.gnu.org; Thu, 07 Jul 2022 01:54:00 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43354) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9KSc-0005iP-0z for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 01:53:58 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:39720) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9KSW-0006Rh-09; Thu, 07 Jul 2022 01:53:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=+81rLF2rHxbW9jDNfxSZ7BT49wCRRnPcX3KlKTOGvoQ=; b=oBX0yqJ12t4z Sww6tfv7o/uJC2v6qh3ZiylLCv457NC4FJqqtPpBWZ3LxuUi1URr7OvZDAzONhzk9nK/7bRAIWTOd tXj0YM7c8fLwhy0smFHG4LrOrCCvAIy4lUvbmZhEj0/NB7xjnHRozAjN8qM0XKQslp1So/8h8r2I2 TCRJiTG3XSXzk+cwfqqrd6Q6rmcxG89DyzX8BDxx6NQgRG3m/5skJl6l1hk5X83BZm61QOmvSi517 qcXqc+Ngq63t4RuAqCltghFt+b+ry9qOycjX4E/JePrMlf93CvNoUdC04BWcSZbrHpZPtB/MA/rBu Cb6PlYppxFCjPgKfUnhNXQ==; Received: from [87.69.77.57] (port=4050 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9KSV-0006dm-FQ; Thu, 07 Jul 2022 01:53:51 -0400 Date: Thu, 07 Jul 2022 08:53:47 +0300 Message-Id: <83ilo95uz8.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <3ffab1919622ce555e12@heytings.org> (message from Gregory Heytings on Thu, 07 Jul 2022 00:38:22 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Thu, 07 Jul 2022 00:38:22 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > > So if font-lock is slow for some reason, it will slow down redisplay. > > > > Thanks. I meant the former, but this is very useful nonetheless. It > means that the Lisp code which calculates these properties is (or at least > can be) a bottleneck. To determine which properties must be placed on > these 1500 characters, it must presumably look further away, possibly much > further away. That's possible, but limiting that search should in most cases still produce reasonable fontifications. At least that's the hope. > > I think we should understand why it becomes slow before we decide > > whether to turn it off or speed it up somehow. Other editors fontify > > text using very different methods, so their limitations are not > > necessarily similar to ours. > > We can try, yes. But my feeling so far is that this won't get us > anywhere. Let's see if your feeling is right, okay? > > Are you saying that you don't believe in the existence of such code? > > Every Lisp program expects to see the same narrowing (or lack thereof) > > as the user sees. So anything different is a time bomb waiting to go > > off. > > > > I don't say that I don't believe in the existence of such code. I get > your point, and agree that narrow-mode (ab)uses a feature in a way that it > was never intended to be (ab)used. But I also say that files with > extremely long lines are rare, and that it's in my opinion much better to > see some rare functions fail when opening such files than to see Emacs > becoming unusable. Or in other words: if all essential editing commands > work on these files, that's already a big step forward. I think we should defer discussing tradeoffs until we hit a brick wall of sorts, i.e. get to the point where no significant further improvements can be made, and we understand why. The tradeoffs should be based on such an understanding, because it's not smart giving up features we could maybe have. > >> Yes, I've understood that you want to do something else. > > > > No, it's the same idea, just implemented differently, and thus without > > some of the problems we are discussing. (But slowness of font-lock will > > still need a separate solution -- or the conclusion that we have no > > alternative but turn it off.) > > I tried to do that, and so far I don't see how your alternative approach > could work. The problem with long lines is not only that redisplay takes > forever in some cases, it's also (and perhaps mainly) that commands take > forever. With dictionary.json, with point on the last character, C-p > takes (on my computer) about 26 seconds outside of redisplay. I don't see > how we could tell all that code that it should work on a narrowed buffer > without actually narrowing the buffer. C-p takes an inordinate amount of time in those cases because it calls functions of the display engine (see vertical-motion). Limiting the display code to some small enough region of the buffer will speed that up as well, since it's the same code in both cases. The somewhat tricky part with the likes of C-p is where and how to compute the restriction. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 03:48:18 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 07:48:18 +0000 Received: from localhost ([127.0.0.1]:55633 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9MFG-0000B2-0a for submit@debbugs.gnu.org; Thu, 07 Jul 2022 03:48:18 -0400 Received: from quimby.gnus.org ([95.216.78.240]:36100) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9MEz-000093-A1 for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 03:48:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=E/JPo5Wa9Tv8HK5ixeBNUpiERTIRENYm+3mh3+hiJi8=; b=ErHhPb3Ndan5UaEOG7MFKo9n+F sug9J3y5aOFrxzxGbFZDbez+l1u3VFm4zevHx/JXDvJ4GO1cK6RBqm2I9yaghlQhef9X/5UY/foHG inh6ABahitycwmYS06tKE7Zb81QQMBS+RiIXfUePUQouUvPuG4oVq2k5wwGx/WbABznQ=; Received: from [84.212.220.105] (helo=joga) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o9MEp-0005kR-JV; Thu, 07 Jul 2022 09:47:54 +0200 From: Lars Ingebrigtsen To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <762d22480901fd242010@heytings.org> (Gregory Heytings's message of "Wed, 06 Jul 2022 14:05:55 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <83mtdm76uo.fsf@gnu.org> <762d224809ba5a4b1337@heytings.org> <83czei74ew.fsf@gnu.org> <762d22480901fd242010@heytings.org> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIVBMVEX09Nb7++Le3sFj Y1SKiXUGBgK4uJ8tLSVHRjt/f23///+3Y8xXAAAAAWJLR0QKaND0VgAAAAd0SU1FB+YHBwcoAHss DrkAAAGvSURBVDjLdZRNT8JAEIZnkFSOu0B65kOCV4OaeKPCL6AMcFSM0SMayxk1Gn62M7Nttwvy HnbD+7DztW0BRAbBehlr0aoPXUR7IPVbyZGvAAcMsOqhLgZvkiCHZgGIujElYNdiXDyKO5l20QCc fwwpwdcF/8tkC15aRBsQQERJnxhAk+bGIhvvknrIYEQMAPsMoJ3lQE6w5gbrmawD/jELAPsChgrQ gzijCvAn0h86AGf7PZXi5CVg/ZwCgyqQ0DNjxK+1SrBwYAduuv3CTztazBYU4EV54M2N6ApkViCN 5dpAAViR90NQd97yCIBLPb8UYKoAXl0HvKX3Wu4OKmTeNC8cEALw4nqOeetAw4M8FLQPQJ8CwOXv quWmqIAf1nP61Ak28ua2Cu57vWfadqqAftvlBN4DQNd++iHwkhvsMUjdHL9pNWJNp9MHB1ZrBR8x bSovR6+xeqhlenuRTrdUfQwKrmpxCPgW3YnuwQmpzOWI+LHxpjQJRVXLr3+BxDMBcKGk8xKg2xTc xh4UXwYBvxDprQRgMhrd8vZ0N84j5Z8MyMfA73LRG8IJ2RM+2j+QnMAKWUIZ/wAAACV0RVh0ZGF0 ZTpjcmVhdGUAMjAyMi0wNy0wN1QwNzo0MDowMCswMDowMFihqZYAAAAldEVYdGRhdGU6bW9kaWZ5 ADIwMjItMDctMDdUMDc6NDA6MDArMDA6MDAp/BEqAAAAAElFTkSuQmCC X-Now-Playing: Ital Tek's _Planet Mu 25_: "Deadhead" Date: Thu, 07 Jul 2022 09:47:49 +0200 Message-ID: <87mtdlict6.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Gregory Heytings writes: >> I see the same if I visit literally, just after leaning on C-n >> longer. It starts happening around 15% into the file. > > I can't reproduce that. Is that with emacs -Q? What computer do you > use [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Gregory Heytings writes: >> I see the same if I visit literally, just after leaning on C-n >> longer. It starts happening around 15% into the file. > > I can't reproduce that. Is that with emacs -Q? What computer do you > use? I see the same profile, but Emacs remains responsive. I can't reproduce it with dictionary.json, either -- but I do see sluggishness if I go to the end of the buffer, and then lean on `C-p'. But if I visit the file literally, then `C-p' is fast, so js-mode is apparently having an effect on `C-p' here. (Or perhaps it's because the buffer is multibyte when not visiting literally and unibyte when visiting literally.) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 03:48:52 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 07:48:52 +0000 Received: from localhost ([127.0.0.1]:55636 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9MFn-0000Bp-FS for submit@debbugs.gnu.org; Thu, 07 Jul 2022 03:48:52 -0400 Received: from quimby.gnus.org ([95.216.78.240]:36120) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9MFf-0000BU-Ax for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 03:48:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=bejVFotiLl3XJ5BGiu363IKBGZxXyL2m71p97Yd/OGw=; b=oZt2qIchg1ETu+r8Oqf5/x12c3 q7EXsF2f2mfoMlMjzRObK437stbi5Vmi1PmwX4gkwOoa3tZB6afV2lbnXUzADM4jZCRQUehNJQkzA dt0GLwtXKi2xbxjQL3g2dkmjyOg2Tpj9oVqSk9p8UrsGKy10jKGo3x+kJYbulepMmzdI=; Received: from [84.212.220.105] (helo=joga) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o9MFV-0005kk-7W; Thu, 07 Jul 2022 09:48:35 +0200 From: Lars Ingebrigtsen To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <762d224809560620fece@heytings.org> (Gregory Heytings's message of "Wed, 06 Jul 2022 12:44:26 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <38c1a31040a5b59ba27f@heytings.org> <877d4qlboc.fsf@gnus.org> <762d2248092ba9ada552@heytings.org> <762d224809560620fece@heytings.org> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIVBMVEX09Nb7++Le3sFj Y1SKiXUGBgK4uJ8tLSVHRjt/f23///+3Y8xXAAAAAWJLR0QKaND0VgAAAAd0SU1FB+YHBwcoAHss DrkAAAGvSURBVDjLdZRNT8JAEIZnkFSOu0B65kOCV4OaeKPCL6AMcFSM0SMayxk1Gn62M7Nttwvy HnbD+7DztW0BRAbBehlr0aoPXUR7IPVbyZGvAAcMsOqhLgZvkiCHZgGIujElYNdiXDyKO5l20QCc fwwpwdcF/8tkC15aRBsQQERJnxhAk+bGIhvvknrIYEQMAPsMoJ3lQE6w5gbrmawD/jELAPsChgrQ gzijCvAn0h86AGf7PZXi5CVg/ZwCgyqQ0DNjxK+1SrBwYAduuv3CTztazBYU4EV54M2N6ApkViCN 5dpAAViR90NQd97yCIBLPb8UYKoAXl0HvKX3Wu4OKmTeNC8cEALw4nqOeetAw4M8FLQPQJ8CwOXv quWmqIAf1nP61Ak28ua2Cu57vWfadqqAftvlBN4DQNd++iHwkhvsMUjdHL9pNWJNp9MHB1ZrBR8x bSovR6+xeqhlenuRTrdUfQwKrmpxCPgW3YnuwQmpzOWI+LHxpjQJRVXLr3+BxDMBcKGk8xKg2xTc xh4UXwYBvxDprQRgMhrd8vZ0N84j5Z8MyMfA73LRG8IJ2RM+2j+QnMAKWUIZ/wAAACV0RVh0ZGF0 ZTpjcmVhdGUAMjAyMi0wNy0wN1QwNzo0MDowMCswMDowMFihqZYAAAAldEVYdGRhdGU6bW9kaWZ5 ADIwMjItMDctMDdUMDc6NDA6MDArMDA6MDAp/BEqAAAAAElFTkSuQmCC X-Now-Playing: =?utf-8?B?R++/vWJvciBM77+9eu+/vXIncw==?= _Planet Mu 25_: "Source" Date: Thu, 07 Jul 2022 09:48:32 +0200 Message-ID: <87ilo9icrz.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Gregory Heytings writes: > I just pushed a change to the feature branch which should improve > isearch in that case. Yup; `C-s' works fine now in dictionary.json. Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: Gerd =?utf-8?Q?M=C3=B6llmann?= , Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Gregory Heytings writes: > I just pushed a change to the feature branch which should improve > isearch in that case. Yup; `C-s' works fine now in dictionary.json. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 04:23:16 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 08:23:16 +0000 Received: from localhost ([127.0.0.1]:55692 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Mn6-0003Fq-8a for submit@debbugs.gnu.org; Thu, 07 Jul 2022 04:23:16 -0400 Received: from heytings.org ([95.142.160.155]:56250) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Mn3-0003Fg-5I for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 04:23:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657182191; bh=YMMcWe/xmIHsEur25vzM8w+DgDpv7XL5hkKD0N+saHw=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=gp6iGpqaMMHVQOwFJIu47IuyCA+FhvrucPs4yYfrlcznmP1BN4EX6qhqDKLOa+WgK 3xmtewwz6woEIRyL7xzlIHgpBsi2NH+SWf/1WmFuMnbRom0JO/NVPAbiS70p3pV5QY SIHJctcW3oWw9RuqzTyuSgpioDf3/qgghwHZkSnu+b9BIxekSzomp0hRUbqsodKfCn sqqbK+5hqcXeDkWHG0k6ZCZ2XJoLSyucvtf4S1MOfjxMN/odNvwUxkVC1ygJr1i/oG scFFy1CqZGmk8s3hdsxLMCSVtqtVERvSQSB+7rIIaa7H8hwp26QL1RZmBvL7GkLVv9 XedMYvkfIlS4Q== Date: Thu, 07 Jul 2022 08:23:11 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83ilo95uz8.fsf@gnu.org> Message-ID: <3ffab19196bc0451adb6@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > C-p takes an inordinate amount of time in those cases because it calls > functions of the display engine (see vertical-motion). Limiting the > display code to some small enough region of the buffer will speed that > up as well, since it's the same code in both cases. The somewhat tricky > part with the likes of C-p is where and how to compute the restriction. > Okay. Can I try to do this myself, or are you already working on it, if not already polishing your code? From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 06:11:03 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 10:11:03 +0000 Received: from localhost ([127.0.0.1]:55833 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9OTP-0001uu-5c for submit@debbugs.gnu.org; Thu, 07 Jul 2022 06:11:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44914) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9OTN-0001uQ-Ui for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 06:11:02 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42518) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9OTI-0000Tp-Nw; Thu, 07 Jul 2022 06:10:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=GEao7JMQh0NtRrcvQ7IJN+VV0BNtmNIdRAQzVziYol8=; b=An1gPWFQCkjG CnNyKuIU2FA9t2OqliIdrh2EsvsFym3OONftzT/BdLuAJH+QzcfI6vJu6ZYd5qUozQrcj8qDO3MAS mT/e+lNSIPjy9Npbte6sipzKNIOoZFTJcMBhtXpopmJDbunleqNMdra+0XjK9YJGJaixoqUjWBAvD Jj58ZeA3oEgOQYsjLAGeXGmfsI14b0gR6b6PVCknJFLCMsv9rrkNQ2EkCvzOkrNFbO13Bm6S6gDke 1mQHbqA+n6JbhpRGSa0aSe0bsWcZIwmSR0W2UtggQ/LJWYTmILxEeJfWoqi1OKb7X7BtLuLO3zUAK XiChMOQplPemj2gcfZQtnQ==; Received: from [87.69.77.57] (port=4063 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9OTE-0000Fx-Jq; Thu, 07 Jul 2022 06:10:56 -0400 Date: Thu, 07 Jul 2022 13:10:49 +0300 Message-Id: <83edyx5j2u.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <3ffab19196bc0451adb6@heytings.org> (message from Gregory Heytings on Thu, 07 Jul 2022 08:23:11 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Thu, 07 Jul 2022 08:23:11 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > > C-p takes an inordinate amount of time in those cases because it calls > > functions of the display engine (see vertical-motion). Limiting the > > display code to some small enough region of the buffer will speed that > > up as well, since it's the same code in both cases. The somewhat tricky > > part with the likes of C-p is where and how to compute the restriction. > > > > Okay. Can I try to do this myself, or are you already working on it, if > not already polishing your code? I'm not working on this (unless you call this discussion and trying the branch "work" ;-). If you want to try this, here are some thoughts which may or may not prove useful: . for actual redisplay, the natural place for checking whether we need to "narrow" is at the beginning of redisplay_window, where you can check the window's buffer; this might need to be rechecked in the few places (maybe just one) where redisplay moves point . to compute a good value for "narrowing", multiply the number of rows of the window's glyph matrix by the number of glyphs in each row, then by some small factor (like 2 or 3) . the way to "narrow" for display code only is to replace BEGV and ZV with new macros, say DBEGV and DZV, which look at separate variables, possibly new members in 'struct window', if those are set; when the above-mentioned check determines that "narrowing" is needed, set them accordingly . a good place to reset these new members of 'struct window' is in mark_window_display_accurate_1, when the window's display is marked as "accurate" . various calls to the likes of Fnext_single_property_change in the display code will need to specify explicit limits for the search, using DBEGV and DZV, instead of falling back on BEGV and ZV that are already set I don't yet have a good idea about where to check whether "narrowing" is necessary for commands like C-n and C-v, but maybe look where I set the display_working_on_window_p flag as guideline. Another idea would be to use those new members in 'struct window', but then (a) it is less clear when to reset them, and (b) some commands might go far away, thus making those values no longer pertinent. Let me know if you need help with display code internals. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 07:29:20 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 11:29:20 +0000 Received: from localhost ([127.0.0.1]:55939 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9PhA-00044S-4L for submit@debbugs.gnu.org; Thu, 07 Jul 2022 07:29:20 -0400 Received: from mail-ed1-f49.google.com ([209.85.208.49]:37573) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Ph8-00044F-LV for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 07:29:19 -0400 Received: by mail-ed1-f49.google.com with SMTP id y4so9371663edc.4 for <56393@debbugs.gnu.org>; Thu, 07 Jul 2022 04:29:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version; bh=sq3M2NYVuoh/klfhJBzFQmYt/u8B6+6d9oMo055/LZo=; b=ftuLBvX9LX+8ae75j7HuMbWBqd0BcFbbCH3Wi3IFaF/pTfSHtXdLYAFHkvAcO7EZkt PRjiKfi79u1HHOxROZKQmEIDc3uQ3/eQYaqKnwaEUpvBLbvecN2tt8ngi+Jx68Dz6SwX +hkdPesXLapetay+Nof8ZMaTyLVgCYRP0wetsbg028LTJQkjtsjcyO41t7ydo/WGdrWN RfKM5Crk7MRJC0szP+eWRYgrCUvFJ54fR09RP7H0C/hA+QNp8cDZWgMeCOVoRvrPMYv1 KYsdhNZzb9chU9LE1B1zyJIe1oCNXQjjqSIln+CG/Y8zQ7uGqaipmMKs9ReIMLKOV1nJ LI4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version; bh=sq3M2NYVuoh/klfhJBzFQmYt/u8B6+6d9oMo055/LZo=; b=k7L57gmg/tCuTUfo9BI5wpVejF0YS1mgzM382lXAR8BFlNaRUpZJmMoS3QI+uUsR9U TImJijkn6bp6EF/4VYSmCD+ovktK2rH70JeIIAUrl8Wm+NQy6bJbeXeVfQKTYuphIrd2 znJxbcWJ8rmRpRglFfFRZcGFj9CqIUvQhYwkno3ztBSGRzFOAjQR0WnNhlPyLIPJgjw+ YLnP8AadtrDEUGbTxQgCiq+ijRSKv2xxNVv9argMJrcfZJYEVz0m/3Mu/MFUEk7AfYEz +LC4D5zVTfwDizwpyONw4Obizk9ESWr+wv/KlcWIkmhh16oU9gJpOcazc65EShZx2ElM 8s6g== X-Gm-Message-State: AJIora9a0WQEcwCQPAfwFv4BaRhoPJXA7jkVAuuedCoFm0ZxZ1RjaFZv 0XY8MpafQultdRdK/jci6tphMMhcAdxwlw== X-Google-Smtp-Source: AGRyM1sYW7m13MsOFczJUt707PoLDtzNaNXhfECt9dMrRNvOnH9VWDl6U2KLYPyT8SZ7+TxmTdhxUg== X-Received: by 2002:a05:6402:1691:b0:43a:db2:a213 with SMTP id a17-20020a056402169100b0043a0db2a213mr30885816edv.100.1657193352191; Thu, 07 Jul 2022 04:29:12 -0700 (PDT) Received: from Mini.fritz.box (pd9e3694f.dip0.t-ipconnect.de. [217.227.105.79]) by smtp.gmail.com with ESMTPSA id x21-20020aa7dad5000000b0043a2338ca10sm10460921eds.92.2022.07.07.04.29.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Jul 2022 04:29:11 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: ("Gerd =?utf-8?Q?M=C3=B6llman?= =?utf-8?Q?n=22's?= message of "Tue, 05 Jul 2022 14:59:37 +0200") References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> Date: Thu, 07 Jul 2022 13:29:10 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Looking at the changes in 0463368a7b..7b19ce51fc, I don't have much to bicker, i.e. except about Magit, lldb, gcc-11, dap-mode, ... :-). >From my POV it's ready to go to master. The sooner more people get to use this the better. Thanks again, Gregory! P.S. I currently can't compile Emacs because of reasons, so I can't try it myself: What happens when evaluating an expression in *scratch* that returns a really large result? Or maybe in a Shell buffer some large output? Does Auto Narrow kick in? I'm not sure it does. Should it? modified src/buffer.c @@ -6363,6 +6366,10 @@ from (abs POSITION). If POSITION is positive, point was at the front If value is a floating point number, it specifies the spacing relative to the default frame line height. A value of nil means add no extra space. */); + DEFVAR_PER_BUFFER ("auto-narrow--narrowing-state", + &BVAR (current_buffer, auto_narrow__narrowing_state), Qnil, + doc: /* Internal variable used by `auto-narrow-mode'. */); + Don't know about the "--" in the name. AFAICS, no other per-buffer variable has that. Likewise the "__" in the name. Not that it is important. I just noticed it. And, maybe it's some convention that I don't know. @@ -832,6 +835,11 @@ bset_width_table (struct buffer *b, Lisp_Object val) { b->width_table_ = val; } +INLINE void +bset_auto_narrow__narrowing_state (struct buffer *b, Lisp_Object val) +{ + b->auto_narrow__narrowing_state_ = val; +} If someone feels like it, could you tell me what the '[bw]set_.*' business is for? A serializer? Or for setting breakpoints? @@ -6557,6 +6557,11 @@ DEFUN ("recenter", Frecenter, Srecenter, 0, 2, "P\np", if (buf != current_buffer) error ("`recenter'ing a window that does not display current-buffer."); + /* Refuse to recenter auto-narrowed buffers that are not actually narrowed, + as this can be very slow. */ + if (BUFFER_AUTO_NARROWED_NON_NARROWED_P (buf)) + return Qnil; + Hm, I don't know. Is it always the right thing that recenter does nothing in this case? I'm not saying it isn't. modified src/xdisp.c @@ -18872,11 +18872,20 @@ set_vertical_scroll_bar (struct window *w) && NILP (echo_area_buffer[0]))) { struct buffer *buf = XBUFFER (w->contents); - whole = BUF_ZV (buf) - BUF_BEGV (buf); - start = marker_position (w->start) - BUF_BEGV (buf); - /* I don't think this is guaranteed to be right. For the - moment, we'll pretend it is. */ - end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf); + if (! BUFFER_AUTO_NARROWED_P (buf)) + { + whole = BUF_ZV (buf) - BUF_BEGV (buf); + start = marker_position (w->start) - BUF_BEGV (buf); + /* I don't think this is guaranteed to be right. For the + moment, we'll pretend it is. */ + end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf); I can almost guarantee that it's not guaranteed that window_end_pos is always right. But I don't have an alternative, ATM. Could you please add a TODO or what's customary today in the comment, so it's easier to find? + } + else + { + whole = BUF_Z (buf) - BUF_BEG (buf); + start = marker_position (w->start) - BUF_BEG (buf); + end = BUF_Z (buf) - w->window_end_pos - BUF_BEG (buf); + } I'd find it easier to read if the if/else were reversed to that the ! isn't needed. @@ -19133,6 +19142,14 @@ redisplay_window (Lisp_Object window, bool just_this_one_p) variables. */ set_buffer_internal_1 (XBUFFER (w->contents)); + if (BUFFER_NEEDS_AUTO_NARROWING_P (current_buffer)) + { + safe_call (1, Qauto_narrow_mode); + /* Normally set by auto-narrow-mode, set it here anyway as a safety measure. */ + bset_auto_narrow__narrowing_state (current_buffer, Qauto); + message1 ("Auto-Narrow mode enabled in current buffer"); + } Could you please tell in what circumstances the call would not set the variable? And wouldn't the minot mode print something, also? In other words, can we remove it more or less safely? (If the user screws up, all bets are off anyway.) @@ -27667,7 +27684,12 @@ decode_mode_spec (struct window *w, register int c, int field_width, case 'n': if (BUF_BEGV (b) > BUF_BEG (b) || BUF_ZV (b) < BUF_Z (b)) - return " Narrow"; + { + if (! BUFFER_AUTO_NARROWED_P (b)) + return " Narrow"; + else + return " Auto-Narrow"; + } break; This if/else I'd also reverse because of the !. @@ -27675,17 +27697,27 @@ decode_mode_spec (struct window *w, register int c, int field_width, { ptrdiff_t toppos = marker_position (w->start); ptrdiff_t botpos = BUF_Z (b) - w->window_end_pos; - ptrdiff_t begv = BUF_BEGV (b); - ptrdiff_t zv = BUF_ZV (b); + ptrdiff_t beg, z; - if (zv <= botpos) - return toppos <= begv ? "All" : "Bottom"; - else if (toppos <= begv) + if (! BUFFER_AUTO_NARROWED_P (b)) + { + beg = BUF_BEGV (b); + z = BUF_ZV (b); + } + else + { + beg = BUF_BEG (b); + z = BUF_Z (b); + } Reverse if/else? From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 09:37:16 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 13:37:16 +0000 Received: from localhost ([127.0.0.1]:56046 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Rgj-00037f-DO for submit@debbugs.gnu.org; Thu, 07 Jul 2022 09:37:16 -0400 Received: from eggs.gnu.org ([209.51.188.92]:42902) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9RgX-00037E-TO for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 09:36:59 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46170) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9RgQ-0003DB-8V; Thu, 07 Jul 2022 09:36:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=NpZYddSgOA3DW/fTbrXjsQNLtbC0f4L2cMGTcTs6/I8=; b=eKwWAD6kRPyedlUKYkEe nvwq3vol1GcqZRUzBbBRL5JcsLktOXvlNRr4e1UNeWg6Yt0AXEzlT0gBwt0IXQ7IBe48PeB4HPE8e veFj/L+TohOdHjVRvmikj1LO5ohgrtARatw3AFdbrgtG6G+LW5ZNnU1waXfveeamr9Dzb3QEB6egl cW6U+jn9tYwxtvf/JQhxYHNTMF78xTnFrCzPOBCNhYLMiEN8YeLmaLtg4Um77NKvw44SymYcHpsRh y8SlLsfKT4yzxBAPMx+li3G9gTimECPCl5heZQM817l8y9gYuG2XKsF5MbDxCY1qQr0OkrO4v8LFt k8lmqYkIxtdbwQ==; Received: from [87.69.77.57] (port=4721 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9RgP-0003gL-NU; Thu, 07 Jul 2022 09:36:42 -0400 Date: Thu, 07 Jul 2022 16:36:38 +0300 Message-Id: <834jzt59jt.fsf@gnu.org> From: Eli Zaretskii To: Gerd =?utf-8?Q?M=C3=B6llmann?= In-Reply-To: (message from Gerd =?utf-8?Q?M=C3=B6llmann?= on Thu, 07 Jul 2022 13:29:10 +0200) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > Cc: Lars Ingebrigtsen , 56393@debbugs.gnu.org > From: Gerd Möllmann > Date: Thu, 07 Jul 2022 13:29:10 +0200 > > + DEFVAR_PER_BUFFER ("auto-narrow--narrowing-state", > + &BVAR (current_buffer, auto_narrow__narrowing_state), Qnil, > + doc: /* Internal variable used by `auto-narrow-mode'. */); > + > > Don't know about the "--" in the name. AFAICS, no other per-buffer > variable has that. Likewise the "__" in the name. > > Not that it is important. I just noticed it. And, maybe it's some > convention that I don't know. It's our current convention for "internal" variables and functions, similar to the "internal-" prefix you know about. > @@ -832,6 +835,11 @@ bset_width_table (struct buffer *b, Lisp_Object val) > { > b->width_table_ = val; > } > +INLINE void > +bset_auto_narrow__narrowing_state (struct buffer *b, Lisp_Object val) > +{ > + b->auto_narrow__narrowing_state_ = val; > +} > > If someone feels like it, could you tell me what the '[bw]set_.*' > business is for? A serializer? Or for setting breakpoints? It was originally supposed to make it easier to move to a more sophisticated GC, where it is important to have one place where a struct member is set, so that you could do whatever GC needs to do with variables that got written to. Unfortunately, the GC modernization is still not here. > modified src/xdisp.c > @@ -18872,11 +18872,20 @@ set_vertical_scroll_bar (struct window *w) > && NILP (echo_area_buffer[0]))) > { > struct buffer *buf = XBUFFER (w->contents); > - whole = BUF_ZV (buf) - BUF_BEGV (buf); > - start = marker_position (w->start) - BUF_BEGV (buf); > - /* I don't think this is guaranteed to be right. For the > - moment, we'll pretend it is. */ > - end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf); > + if (! BUFFER_AUTO_NARROWED_P (buf)) > + { > + whole = BUF_ZV (buf) - BUF_BEGV (buf); > + start = marker_position (w->start) - BUF_BEGV (buf); > + /* I don't think this is guaranteed to be right. For the > + moment, we'll pretend it is. */ > + end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf); > > I can almost guarantee that it's not guaranteed that window_end_pos is > always right. But I don't have an alternative, ATM. Could you please > add a TODO or what's customary today in the comment, so it's easier to > find? Yes, this should test window_end_valid before using window_end_pos. An alternative could be window-start point plus some estimation of the window's text, perhaps? From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 10:10:34 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 14:10:34 +0000 Received: from localhost ([127.0.0.1]:57483 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9SDB-0004Lb-ND for submit@debbugs.gnu.org; Thu, 07 Jul 2022 10:10:33 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52128) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9SD9-0004LJ-KB for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 10:10:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47138) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9SD3-0007J6-Sa; Thu, 07 Jul 2022 10:10:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=xSIXeWb2U+OG5CBl4IFZ2r4WvKfcDwkcDbUEBxZb4uo=; b=KgJ7Muu+sTTq BsziWj/kSF9uFs+TgcaPVhpW7ZFAPDYsAGM4cuiNHXwUbzbGjGpun2n8WhOxg1zVfgVMZzQ2IzN3v acHW54RFgyJHK43aNz++VE0Ad/k1VuetdCUbNBxEuUNGIhKpgNg2budkKhCCK6mCMZLYnBaNf7gcW qXP/VNMzPQtgb0ZA/iVJ+SXPbGpTMTDY7//H499HSkhs+Lbl0zjXsVspvcSVj8i8GbfTgRapnw6G0 HUXsRCzab3GhE+/kKHGtyeCzOKP8tXsNLLf6G7gae+vzV0DOPnqBSQFZ0aTtcwdHJWJHbFzGQqQVQ JTxxhV/cM0U7zn7WtspxAw==; Received: from [87.69.77.57] (port=2831 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9SCi-0006UP-EH; Thu, 07 Jul 2022 10:10:20 -0400 Date: Thu, 07 Jul 2022 17:10:01 +0300 Message-Id: <831qux5806.fsf@gnu.org> From: Eli Zaretskii To: gerd.moellmann@gmail.com, gregory@heytings.org In-Reply-To: <834jzt59jt.fsf@gnu.org> (message from Eli Zaretskii on Thu, 07 Jul 2022 16:36:38 +0300) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org > Date: Thu, 07 Jul 2022 16:36:38 +0300 > From: Eli Zaretskii > > > modified src/xdisp.c > > @@ -18872,11 +18872,20 @@ set_vertical_scroll_bar (struct window *w) > > && NILP (echo_area_buffer[0]))) > > { > > struct buffer *buf = XBUFFER (w->contents); > > - whole = BUF_ZV (buf) - BUF_BEGV (buf); > > - start = marker_position (w->start) - BUF_BEGV (buf); > > - /* I don't think this is guaranteed to be right. For the > > - moment, we'll pretend it is. */ > > - end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf); > > + if (! BUFFER_AUTO_NARROWED_P (buf)) > > + { > > + whole = BUF_ZV (buf) - BUF_BEGV (buf); > > + start = marker_position (w->start) - BUF_BEGV (buf); > > + /* I don't think this is guaranteed to be right. For the > > + moment, we'll pretend it is. */ > > + end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf); > > > > I can almost guarantee that it's not guaranteed that window_end_pos is > > always right. But I don't have an alternative, ATM. Could you please > > add a TODO or what's customary today in the comment, so it's easier to > > find? > > Yes, this should test window_end_valid before using window_end_pos. > An alternative could be window-start point plus some estimation of the > window's text, perhaps? Actually, we could be more accurate: we could use move_it_to, similarly to what pos_visible_p does when passed -1 as the position. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 10:25:21 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 14:25:21 +0000 Received: from localhost ([127.0.0.1]:57517 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9SRV-0004j6-I4 for submit@debbugs.gnu.org; Thu, 07 Jul 2022 10:25:21 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:16818) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9SRQ-0004iv-Pr for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 10:25:20 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 267C92eo001051; Thu, 7 Jul 2022 14:25:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=corp-2021-07-09; bh=BKoXcWOP2DBY0g5fNFp4z9KGd2/pQzLu79JkRIyt5lI=; b=PubUIoX5KNWcqjvLil6PKkJU524VoFE8Sdkx62gzp+qFie9Y3tN3uQM1QEzJ3KmZEwQ4 C0znm0X9TBkWTHhqz+qXRpVqLUmpsDed5rem5LOZfF7FWyG9+bLCJM0dxxzu+sjQvBWt xQr/86KwGNHBcRH+83VUzVKLF2mHE7l4OOOmArYYl9k2jolSP02Ts0IgdzEahaW4yw3z nHX7URMFw5HiGZfYS0DPuTImEi4s4CSNXmQZigV1VG5M3+KrGYzZc7If3DfZ0gXrV2OS MC+J8UxgrK/7fKrNcGkaVxvRAl7ZBV5RIw4HcgAsf9AE9QlhI9JHGAuLHMLcRrkANP4Y KA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3h4uby5acc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 07 Jul 2022 14:25:15 +0000 Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 267EHTpb019468; Thu, 7 Jul 2022 14:25:15 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2169.outbound.protection.outlook.com [104.47.56.169]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com with ESMTP id 3h4ud715hg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 07 Jul 2022 14:25:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U1eOqK2XuUM8/nrhPrDb9lVMk+Ooha3+1MtSF7t/2W/a3eEClfA0BFWvcLDS1YFeqUT7hlENuiuhjNhHT82NnCEUe0BLSv4hQcCpwYxzcOWLKnobaS44aFE7XYUUASLQALFMRQwzCtu10Hn1v7Cuh1r7kS4Qi76mo4dDi/OJBUKKvF7+/rDoDOKgJcLLqQtQRFDRhXeqaPwhY8A+a4XVipXAYws80U/YhTmA1b+V6i0XghiJ4qunJhJsa4+mA0JfaFRfKVN98MZeBQxyOhSpzXy1YhbISFiA51vHocxXNHgZpb+/MvPiQT2/jRgY1GmZRg/kKtxYmaMc/rcHBjjAsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BKoXcWOP2DBY0g5fNFp4z9KGd2/pQzLu79JkRIyt5lI=; b=Cf38dqKRaXswGfux8OCjFtQjn3Lr2/nSfxcGzREzakP3oi8lxPGuhTerUNWHIRlH4sn76+R5WBthDMwbuVR4VPxpfkQypHC+8YkXG5v9+1myYBwyU4I7wjfH5lbKEl+myMEhMpEg4v/bJKZl7MI4DEi8jT840mzvfsooFjbDZ01UFM3qo8pzVW+o0C+9s9c54P4wADlEjF8uTte4nPrtNZcuV1RmDFMkSW2XQuuFLlMV8lKjjApFB3ONI7AFhfK6H3BaP+7McWgIDBjEKZoVoG4gHiMKGbqLgtkQ0XQUdEx9mjyJJEV3p04htaLiZDDQv/6C8/WQkLUGOGCBU0fP4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BKoXcWOP2DBY0g5fNFp4z9KGd2/pQzLu79JkRIyt5lI=; b=nuZhxS95jA25Gxu0GuDXgzhBuW1zeVflo3e0gikjpjpuk/jWqQqnZ01cE8EaDffiXRaudyR6GfmzkVI3i8Ath5jUNSifX2fw7cKRwQjOtEdD2xeSomaHNa4Zq8RhNXyYjtbqPf2rwq+sG0ZB2l1LXAW6JRXYBs7aaTLCVn+6MGs= Received: from SJ0PR10MB5488.namprd10.prod.outlook.com (2603:10b6:a03:37e::19) by SA1PR10MB5886.namprd10.prod.outlook.com (2603:10b6:806:22b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.14; Thu, 7 Jul 2022 14:25:13 +0000 Received: from SJ0PR10MB5488.namprd10.prod.outlook.com ([fe80::581b:ae2f:16b9:80fb]) by SJ0PR10MB5488.namprd10.prod.outlook.com ([fe80::581b:ae2f:16b9:80fb%7]) with mapi id 15.20.5417.015; Thu, 7 Jul 2022 14:25:12 +0000 From: Drew Adams To: Gregory Heytings , Eli Zaretskii Subject: RE: [External] : bug#56393: Actually fix the long lines display bug Thread-Topic: [External] : bug#56393: Actually fix the long lines display bug Thread-Index: AQHYkZn8Z7FJa13hhESxUUrq7guYQa1y9EqQ Date: Thu, 7 Jul 2022 14:25:12 +0000 Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> In-Reply-To: <3ffab1919622ce555e12@heytings.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: df898063-4c56-44aa-496e-08da60248137 x-ms-traffictypediagnostic: SA1PR10MB5886:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DStOIKa38Z68vwqkhIpmVYLlVtz5gkDod08GCmWTjvCCcV0OZMsPjdQzI7abccbPaOMax2g7jyd+4S5ChsInVHBc+FRyRUkLTRxwwiJmVZgHLFvwXFaLHIvGQyOnvGpKnttngyb7t90lKBwIRfbPP7xMv/1qz2A1/rS5fl1kobCkPVSOOmJn6rAgZlS1RzrYNVqyDUFPVUBB66C9yw4OdRTj8HI134/I2Cbp3OpwFNSl/48Sq57v6aXxuu1royrEco6nmWaSrBi5QRU+XOkk3Vo5pa8GXr2L+2oSnbuJAhulwFUFXVcxz7CFNGkdyVhqu+scl8HpA6DkvAo3YAbri7HGSaQCF623bL8+OKq/7nGlVnYK3ob63S/52AfDAxA6kcRjMMrA5BVYxyS1Cak1xqlyGQF/V2m65pO6KHOZbf81Odg9uUU1+RiUCzPxz7F/EYoP001a/gvfFIVFplbGyexTFsqdjuF5EVLbbYLwxXOCy/tr5y1bdno52ETnrLzFQSl+6Bd5FDc6lpHghlFwUhejZfhsq6nDoGms4lt5cbKjJA7Ao35PzsxowdrBd/ADRXexisBiSTkL7S5kDS5g+AUTcM7fG/LyeZE8LELwXI+aNlJxXE59/n9jtmc5+NIk2oaYJ86q03eQ0cy7Ybx/lKwmGDEQrNO4Vv0UtltLeG8RThJ88llDnJua/+DH1ziyu5KEQvdEok1nIwegriRnWtBUEjvxOZKvUSB/FbpfWZgIxghnj/+JidrTcrY3j3orr4Jv6dhVrDFYmuk0u60KwXgEXsqID4elbZ8CtsoY7emy0mL95x/Ks30RYgkszevf x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR10MB5488.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(396003)(39860400002)(376002)(346002)(136003)(366004)(186003)(66946007)(9686003)(38070700005)(66476007)(110136005)(4326008)(76116006)(38100700002)(71200400001)(54906003)(8676002)(83380400001)(44832011)(66556008)(26005)(6506007)(2906002)(33656002)(478600001)(5660300002)(7696005)(8936002)(122000001)(66446008)(64756008)(86362001)(316002)(41300700001)(55016003)(52536014); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?MRdnOsPqw36wyGRWDK7N6Mp2OI4rd3kyMiDB1QWQDYr07yFiWIdxUtsix/Jc?= =?us-ascii?Q?F+1oUYJS2XQ1HB1sJjsOkuQp6F+Xt5T4B9J+67/aVQaBJJ4jnqpXimtwxR4M?= =?us-ascii?Q?c4e1zWm9USGjwM+ojfuV29PJzQAJBXSm/wCggUrG1ko/hEVaSnSNddh+6VcD?= =?us-ascii?Q?7tTCqzSLE8ggXeVX+eJKY6WCP9DtK1vZWD/xsGjjyvwF3GZGGCGVv0/aURci?= =?us-ascii?Q?7eXlUexCXHv7H9aLqgR2ug40pSFc5/6FC+N/Fp1tAlZGmOt6gKoCkyj9VoWJ?= =?us-ascii?Q?yZ4+JtfTS8VChZ8dqOlwEFZIjZqMPj4qJzGZqgwR75l9O5zu7oeuFs2ATmXT?= =?us-ascii?Q?0md5APLCeBQxJjMF4i+0amcAhGI1GZFNyalcpUkHPtAov73/ONle42MpODJQ?= =?us-ascii?Q?pbnYVO8IVxG7RDBzUZyA2Hnyo8hHvVcjE1QOSt7gnG3AllTbcoyt6YfFT4+I?= =?us-ascii?Q?uYUqnjqJFJc6sVOBRTi+bRVhP32NnhrY5Kj/g2P2bWk1Fq6IZdPoPA8nicxA?= =?us-ascii?Q?g3AziGfFO0PnhOzzsSKfnwCNU0RPp3ghIJoMkxaG/PO0DapgahlIM0Jw7LG4?= =?us-ascii?Q?PELC2QtblCBvYl4fDB4iJrBlX0ifblS+N4kB7NxpxK33QHE7YcfPQxuUPu4c?= =?us-ascii?Q?4ilxnb90V3wEtaHs3c93pipWVBum6Wk67y8WJvfmNvvLRB81xJMnSNXikLtk?= =?us-ascii?Q?ahyqOR1gdDLCtqtOBcC8hQuEIbcT6L004B93/NB9bcdPCqe/GBXW96Wdh3xJ?= =?us-ascii?Q?6G2gqPDd1Y6iRTDMqK5SJKzdFneZjO16OSmedM7ox8p2VtP4t9fHUSbT7C3s?= =?us-ascii?Q?m1jA6Dq0JOjfaS6jk6BoEk3BYqc8YzahTsdKf5/4XdxIg6UPh4i2/YgYkOFV?= =?us-ascii?Q?xhpxX9KWz5MhMyqKYsBvNUNqB45XSqGXJXYIYBIBrnOHQxefvncjszsB9xXc?= =?us-ascii?Q?DPDH7JB2FpRhjs1zFixlDlE/pDhB8oCHP8TGEzmZPVCERxgc9/wjoxhhaAuf?= =?us-ascii?Q?hSmAbLw7VWHGMvrqKesGKUbuLDsuVTc5WrX7zlEHRr/TK/sATBvFslTuQcX6?= =?us-ascii?Q?yM9Bt7LavoYz6rHFp6LBOufaHQD438A4AFrWVLO+GwE0oWM4iFI8uLnU6bOT?= =?us-ascii?Q?ARHbtar4ZORNqCBEm3bwBiAR8STB5dUdwPXYErmsywNJhYZ6JHOGEDfk9GHZ?= =?us-ascii?Q?4PmxJcK0GHFPRhNXJ91/in6+GW49U6b2kM+kQG5i5EmBZjmHhVH3tNL79RhK?= =?us-ascii?Q?SBjRAZfSM4p8xWeXuXPxF80iIxcaPpUmJOoVWnjp+I4J+LGEpwhrIWy47kMl?= =?us-ascii?Q?W0/OIDdk0aDDAMOVD6uY4UNu9twnkmB+NK4NNlCM2T3OdUCHxSOTjLMgX3c+?= =?us-ascii?Q?i59SZkA9tOmGOgDTQrlWxZCtuWen7r12ethziOkYxpJRLSfB9/pD6bU9e63G?= =?us-ascii?Q?bQB7UoeMWK2HI36okzGGV5GiFxhm3UMpyniKvkD86oO05b02y9+gzNbeMNbO?= =?us-ascii?Q?PkDf16s41nHqIZxiyKDC89AQbPgN6vaFmMghzCQas+mtSdm0f3QTpRRSk4V7?= =?us-ascii?Q?JdDVh/r6WVBYWzNR1tkdzArFpkOKbJzBL4hAxY1h?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR10MB5488.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: df898063-4c56-44aa-496e-08da60248137 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jul 2022 14:25:12.9163 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: knG3zJllwQ8rYF8HZuly03FUilc//SHybVg3VWYi25gFVFO4k8g1P+EOYSdZbY8W0roLORsBnasNUqzOFCArrw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB5886 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.517, 18.0.883 definitions=2022-07-07_12:2022-06-28, 2022-07-07 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 phishscore=0 adultscore=0 malwarescore=0 mlxscore=0 spamscore=0 mlxlogscore=955 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207070056 X-Proofpoint-ORIG-GUID: gEsrmJdUnYepXM_xkH5f2C4ouyZd4htG X-Proofpoint-GUID: gEsrmJdUnYepXM_xkH5f2C4ouyZd4htG X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 56393 Cc: "larsi@gnus.org" , "56393@debbugs.gnu.org" <56393@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) (Caveat: I'm not following this thread. Ignore if not helpful.) > narrow-mode (ab)uses a feature in a way that... If this is really about long-lines display, could you please consider not using a name such as `auto-narrow-mode' or `narrow-mode' for this? Functions and variables with `narrow' in the name should generally, when possible, be reserved for the usual feature of narrowing a buffer. (And in particular for users doing that.) If the reason for narrowing is only to carry out or enable some other action/behavior/feature (e.g. something to do with long-lines display?) then maybe put that in the name, without `narrow'? Will users look for this mode when they want to narrow a buffer for some reason? Or is this just something that has to be done in order to effect something else - a precondition/dependency? IOW, is this the best name, for users? What will a user looking for functions for narrowing think when coming across `narrow-mode'? If this isn't something users will generally use for narrowing a buffer then at least please make that clear in the doc string. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 11:58:36 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 15:58:36 +0000 Received: from localhost ([127.0.0.1]:57687 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Ttj-0000vI-Qj for submit@debbugs.gnu.org; Thu, 07 Jul 2022 11:58:36 -0400 Received: from eggs.gnu.org ([209.51.188.92]:54258) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Ttf-0000v2-MG for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 11:58:35 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50092) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9Tta-0003w3-3p; Thu, 07 Jul 2022 11:58:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=u/7sHDKIsRP8yfXnVqUM/F8Gt8T1PiFw31lGbzauyhU=; b=X5Ls4+QnNmEc 7e/ESW5GIF59xhX8XdBK2M4ThBes9kn6XFzKHuApFPydNt/NWhQhL8OdyBZ5Yb7fJX3DjqBWBJMYH 3/Z/0diTBSAbF3dvHqXKhBgFBQwLA8zaNqTMAX7D/B+ZCYd31glHadjwWnPivzgizkjoahzo+jwVa zmaPrqXegnmEeQNJm9Brkn/8qerfGfph0Sp/F82BA3V9xAp4rPm39T5fTtNOvQCeaSMLlXDd20AmH KbgCHCxk52E/a8JdOoFrFJQGvQOKzbA3kZgyrUAVr1MU3HNK3eMfmy6VXcBFZauWWa4sbwnWDYCZg sSTeaoufnSZR0uYhmCLvzw==; Received: from [87.69.77.57] (port=1472 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9TtW-00071d-Ct; Thu, 07 Jul 2022 11:58:24 -0400 Date: Thu, 07 Jul 2022 18:58:18 +0300 Message-Id: <83zghk52zp.fsf@gnu.org> From: Eli Zaretskii To: Drew Adams In-Reply-To: (message from Drew Adams on Thu, 7 Jul 2022 14:25:12 +0000) Subject: Re: [External] : bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Drew Adams > CC: "larsi@gnus.org" , > "56393@debbugs.gnu.org" > <56393@debbugs.gnu.org> > Date: Thu, 7 Jul 2022 14:25:12 +0000 > > > narrow-mode (ab)uses a feature in a way that... > > If this is really about long-lines display, could > you please consider not using a name such as > `auto-narrow-mode' or `narrow-mode' for this? auto-narrow-mode actually narrows the buffer. > If the reason for narrowing is only to carry out > or enable some other action/behavior/feature (e.g. > something to do with long-lines display?) then > maybe put that in the name, without `narrow'? > > Will users look for this mode when they want to > narrow a buffer for some reason? Or is this just > something that has to be done in order to effect > something else - a precondition/dependency? > > IOW, is this the best name, for users? What will > a user looking for functions for narrowing think > when coming across `narrow-mode'? If this isn't > something users will generally use for narrowing > a buffer then at least please make that clear in > the doc string. These questions are IMO premature, since the feature is under development and is not even on master yet. Hold your horses. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 13:51:08 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 17:51:09 +0000 Received: from localhost ([127.0.0.1]:57797 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Vee-0003qn-PN for submit@debbugs.gnu.org; Thu, 07 Jul 2022 13:51:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52954) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Veb-0003qJ-HX for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 13:51:08 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53398) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9VeW-00071u-7x; Thu, 07 Jul 2022 13:51:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=AdEQV1eod+9db1+MBuJjzQAEfwjqPrUIwzhJ6AvCAn4=; b=lnxUH7OTdcOw hXwnlU3TRkvTgnvJfFMTtjW1B5Zq2I6xQa0kmlH/fnnbQ78S+6KUZHR8iCWwaYRk+RTzvnP5tCvf2 Czr4Jkfv/8dawUmDvd8cfO2VsNIFuBbijv/N3+rPLjZ0xjkDHNngimv0Tffw05f1YeyMHJTm8QjbV OchLpSiCUKvWqgp9gC/w0Og1e0hCPKYjuBRUo+ht8ITc1j1c6OGAOvA9re/p1dxKgPNhQOwwvHSZV v5GOu/RLLgvIlOON8Axo5yIpsjjmFYlVPF2sKTizQ4pboiyPZz9yTyRYqIbfRLYSmqn8zwteQ7RQP wNbfGQ0dcQqvmlz5yv3fqg==; Received: from [87.69.77.57] (port=4505 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9VeV-00027v-Ne; Thu, 07 Jul 2022 13:51:00 -0400 Date: Thu, 07 Jul 2022 20:50:57 +0300 Message-Id: <83v8s84xry.fsf@gnu.org> From: Eli Zaretskii To: gregory@heytings.org In-Reply-To: <83zghk52zp.fsf@gnu.org> (message from Eli Zaretskii on Thu, 07 Jul 2022 18:58:18 +0300) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83zghk52zp.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) One problem with the current implementation that uses narrowing is that if you have the same buffer buffer shown in more than one window, the non-selected windows sometimes scroll "by themselves". To reproduce, visit, e.g., long-line.xml, say "C-x 2", then scroll with C-v: at some point the other window will also scroll, to reflect the narrowing. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 14:08:47 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 18:08:47 +0000 Received: from localhost ([127.0.0.1]:57839 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Vvj-0006TX-2S for submit@debbugs.gnu.org; Thu, 07 Jul 2022 14:08:47 -0400 Received: from heytings.org ([95.142.160.155]:56916) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Vve-0006TM-IZ for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 14:08:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657217321; bh=Sj2UxBjbpeF+eoB73sxjfH5ZCG598OThjLlUCUdKKGw=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=s/8UELwd9lMybGtXj6kwrY+0+HYsO/GsRj3a0vAi20bT0NBzmY978HLO1yyBpqojf 2WLMSOANhK32jIO/CrRCjuvL3/o359ho5o54nSzwOfyT493ng1CxkMChYKbR1028ZA ceJaWAbA2TPEPLZcBk3+sCiO+GumX3+cUX21zvTE2terStpj88Df/WrqLF36nOQp9I cH8zqcavIMlhgdhtS9djro/fYANPWQg34mX8bsyIt8attLxAQwHPTS0oywR+JDz1rP HqpiIU1ORmnZvsy4ifoNMty0K8qpzRgvTbX7C7TT23+L0c//UiMVh/M8p7fIKVyAxD ml8SoQDaYnPMw== Date: Thu, 07 Jul 2022 18:08:41 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83edyx5j2u.fsf@gnu.org> Message-ID: <3ffab1919632822f868f@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > If you want to try this, here are some thoughts which may or may not > prove useful: > Thanks. > > Let me know if you need help with display code internals. > I'll do that, thanks. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 14:38:17 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 18:38:17 +0000 Received: from localhost ([127.0.0.1]:57924 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9WOH-0003Bs-4t for submit@debbugs.gnu.org; Thu, 07 Jul 2022 14:38:17 -0400 Received: from heytings.org ([95.142.160.155]:56956) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9WOF-0003Bh-2l for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 14:38:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657219093; bh=5QHMBS1vkZc9EGYm3eRrXRHhZoiUFBOZ8u4j3ygMI8s=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=kJdLSSpIjD8ldqRv8NnPkZMg5YXcp2AKTqRQpjYEXxsb/wFgZjzub4oBXR8iErxdp /d4fV4crFfS3/rEmfOWDd4diBdDWRAp2MVRomOuh1eem5BimzDPlYkOWDlBu1M+rzD JL9X9/opIDHx41r510fYxeMLN9OIRRaZPn57Yw96nO0trHHqNWfKspgvAdLFEa14SF ow7BSYtk5I8bp20f9y4UIpir/zbLFNwvvOLziiiTaKvos+wm7LEWhXUxXDXpDnaUiu 5pxmdY7JGrvAXjsQispKzEbwziOnMZ9n18C0Q5tUn/qBBOeeDDdHhB7ImPjoUeJgka KlduYO7FvQrDg== Date: Thu, 07 Jul 2022 18:38:13 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: <3ffab19196f1cb984244@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Thanks for your detailed feedback, Gerd! > > From my POV it's ready to go to master. The sooner more people get to > use this the better. > Eli (almost) convinced me that there might be a way to do even better. I don't yet see how it can be done, but I think it's worth trying to see if it is indeed possible to do better before going to master. > > What happens when evaluating an expression in *scratch* that returns a > really large result? Or maybe in a Shell buffer some large output? Does > Auto Narrow kick in? I'm not sure it does. Should it? > It doesn't, indeed. I'm not sure it should, but ideally it would. > + else > + { > + whole = BUF_Z (buf) - BUF_BEG (buf); > + start = marker_position (w->start) - BUF_BEG (buf); > + end = BUF_Z (buf) - w->window_end_pos - BUF_BEG (buf); > + } > > I'd find it easier to read if the if/else were reversed to that the ! > isn't needed. > I'm not sure what the convention is here (or even if there is a convention). But my feeling is that it's better to place the "normal" case first, and the exceptional case in the else part. > + if (BUFFER_NEEDS_AUTO_NARROWING_P (current_buffer)) > + { > + safe_call (1, Qauto_narrow_mode); > + /* Normally set by auto-narrow-mode, set it here anyway as a safety measure. */ > + bset_auto_narrow__narrowing_state (current_buffer, Qauto); > + message1 ("Auto-Narrow mode enabled in current buffer"); > + } > > Could you please tell in what circumstances the call would not set the > variable? And wouldn't the minot mode print something, also? In other > words, can we remove it more or less safely? (If the user screws up, > all bets are off anyway.) > It should always set the variable indeed, but who knows what a user could do if they decide for some reason to override the definition of auto-narrow-mode in their init file? Setting the narrowing state again here is a cheap safety measure that avoids calling that function again during each redisplay cycle. I don't know why the minor mode doesn't print something when it's called from C, but it doesn't. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 14:46:56 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 18:46:56 +0000 Received: from localhost ([127.0.0.1]:57959 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9WWe-0003R5-AN for submit@debbugs.gnu.org; Thu, 07 Jul 2022 14:46:56 -0400 Received: from heytings.org ([95.142.160.155]:56966) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9WWc-0003Qy-QW for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 14:46:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657219614; bh=3xB9wCVnuKhF0/vQ3rGv2c+mKdpT7DdtZ1Tz4Ehj+xo=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=j8ADHSfsZG84pWv7yIhm84+SA2p2KfFuV8TKoPSfgvjH7dFLpcaHjvlOs99LcUSLT oK0WFMsQsrtCsHUvCans7SipNRIrMLvVmcWxewe7tJSt4Rw4DkYx3DW4E1jxDnRogf Z4Cu8Cab2A+ucWfZVmYg/Xxbh0QANwry68XzeFvH4XYdjqL2Z7P+4UNeALmJ9mLAdX 6vcq739DW++ptt4G1MU/cMeFkoqmZIa9pRWUhCCdc6Kft50WEIXJGfXTm5RRMuH1Rj DhQ7ND5JNn1Ii7GyberOzwwErIuDj1tBvKi9IbBmANy+9R7O0OCFTtkqUMNBlSv9yT EMW425zmr9W+g== Date: Thu, 07 Jul 2022 18:46:53 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83v8s84xry.fsf@gnu.org> Message-ID: <3ffab191960c833a0908@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83zghk52zp.fsf@gnu.org> <83v8s84xry.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > One problem with the current implementation that uses narrowing is that > if you have the same buffer buffer shown in more than one window, the > non-selected windows sometimes scroll "by themselves". To reproduce, > visit, e.g., long-line.xml, say "C-x 2", then scroll with C-v: at some > point the other window will also scroll, to reflect the narrowing. > Indeed. Another similar problem is that scroll-other-window does not work (or rather, it does, but the narrowing of the buffer is not updated). By the way, that's a problem I see with the idea of computing the narrowing dynamically by multiplying window-body-width by window-total-height. If a buffer is displayed in two windows, a small one and a larger one, and we navigate the buffer in the smaller one, the larger one will display only a part of what it could display. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 14:49:46 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 18:49:47 +0000 Received: from localhost ([127.0.0.1]:57963 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9WZO-0003Y5-Oc for submit@debbugs.gnu.org; Thu, 07 Jul 2022 14:49:46 -0400 Received: from heytings.org ([95.142.160.155]:56982) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9WZM-0003Xw-Gb for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 14:49:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657219783; bh=iX3vJPSKA0QiBQG6O+MDPKayFO0PaZmTjw3THcfbJhg=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=DiK95HfKy+Ht6umIy0h0+8buqnOhcS2Fvti7Vk60xBPrpO2K2xrPAwGH4rtEFco/n t7N4i98VBx+gGyiGCsERoIAV/FFrin+6GhQlxTZycilT0OXNoi3mxQwaodT/jJtfdZ x0z6VzMRHVWYNfoRO8WHr4l4+iyQJo1kP+WF1T5Kqbd9TFyx95dXvk5333YI8m6ize /04T2FnFt9CXkUqAm+r7Nj/hmXaJzT6bbowWYL2D2ctEUPAtGyTA9n/oRwQQrD3NNF xaoio5yJOz2D+I6ra3uGjVpn84B6fRb7Qzc7zh5OB3QJT9ktDD1pBaui4SYPqIiE00 9axeHtAgRBU9w== Date: Thu, 07 Jul 2022 18:49:43 +0000 From: Gregory Heytings To: Drew Adams Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: <3ffab1919615f706c8d3@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Ignore if not helpful. > It isn't, indeed. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 07 15:05:41 2022 Received: (at 56393) by debbugs.gnu.org; 7 Jul 2022 19:05:41 +0000 Received: from localhost ([127.0.0.1]:57976 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9Woc-00066l-0M for submit@debbugs.gnu.org; Thu, 07 Jul 2022 15:05:41 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43418) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9WoZ-00066X-Kh for 56393@debbugs.gnu.org; Thu, 07 Jul 2022 15:05:28 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:55292) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9WoU-0005Ur-4G; Thu, 07 Jul 2022 15:05:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=K0qJUuid2criX05drTjDMFZEmPvM4UdzaeKPhn+qP70=; b=KHcgVQRvSaHx 9i9luz3RmnzbVLUxkL8l/15YFEj2IseYWgv15eEiAZvVFG92zL77AJg72j+t05Ow8NJfz/tNeH2wI CI1bjHQ6ZuYO8DoAr3gCbhQqf0gJyQ6zQMD1RUX0Za6GffsckB0oOVerjzYmZH03kayPeybp2CMku 5t4wxQHbv4b2oZ32kGVFS+Hg86dP6qfSnmgbvbx6mjeW7OWyy2EFCX1oGCPYWSarRWfiqM2vfgLMa LB3+k/FNjM7qqcLSnjDmjhqGnyR2xVgdNcp0HKos7hTXxi/uJFOKeRFrHGP2N6/o5SSM6C0+5VSZM vIfdmUf0tdeY9xkaKO+wig==; Received: from [87.69.77.57] (port=1086 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9WoS-0000At-NT; Thu, 07 Jul 2022 15:05:21 -0400 Date: Thu, 07 Jul 2022 22:05:18 +0300 Message-Id: <83tu7s4uc1.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <3ffab191960c833a0908@heytings.org> (message from Gregory Heytings on Thu, 07 Jul 2022 18:46:53 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83zghk52zp.fsf@gnu.org> <83v8s84xry.fsf@gnu.org> <3ffab191960c833a0908@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Thu, 07 Jul 2022 18:46:53 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > By the way, that's a problem I see with the idea of computing the > narrowing dynamically by multiplying window-body-width by > window-total-height. If a buffer is displayed in two windows, a small one > and a larger one, and we navigate the buffer in the smaller one, the > larger one will display only a part of what it could display. If you are saying the above in the context of my proposal to implement the "narrowing" such that it's only visible to redisplay, then I see no problem: redisplay_window is called separately for each window, and so the "narrowing" will be computed separately and differently for each one of them. (Which might, btw, mean we will see each window with slightly different fontifications, if we limit font-lock to the same restriction. Something to keep in mind for later, I suppose.) If you are saying the above in the context of the current auto-narrow-mode, then it shouldn't be hard to loop over all the windows showing the same buffer and choose the widest narrowing of them all. Or am I missing something? From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 01:48:10 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 05:48:10 +0000 Received: from localhost ([127.0.0.1]:58539 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9gqY-00016d-Jb for submit@debbugs.gnu.org; Fri, 08 Jul 2022 01:48:10 -0400 Received: from mail-ej1-f42.google.com ([209.85.218.42]:42814) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9gqT-000167-Pw for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 01:48:09 -0400 Received: by mail-ej1-f42.google.com with SMTP id u15so11513989ejx.9 for <56393@debbugs.gnu.org>; Thu, 07 Jul 2022 22:48:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:subject:from:in-reply-to:date:cc:message-id:references :to; bh=oGgkLObRBqO37Mb0XkXcDiMjfTrdkAyJpZApwNqvxXg=; b=X4ojjjzvRh/0FbtxjUM97QRYme15jksmy8Nm87bAhYO/HsVyDWNt7eLlzcZQGhQG8T 6HohUN525LxSpbFy7DR5WTE1t0l//7dW9WmAgHPj/nkzW7spxBEyuPeVt+sON2j4u5Wy mTLNCgUBRqf7SLmFPuJNlmVvp+sVQ6/pFzQcWZB7SdZfpuyavxo2m2bx2brWMxmCAXbv zlhe0kpuLxdUKLzg+A+1HCJmT6gSXVTy61djUEUK6U1MYqS8DBmbltkydgwDp88ZGN3t s3JUBoPRdSqwEq3AxQMDjzwE7q5mtC9U1Bwu7H+ywoW79xIp5wIc71r7zaWUIBU42P+u j0Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :message-id:references:to; bh=oGgkLObRBqO37Mb0XkXcDiMjfTrdkAyJpZApwNqvxXg=; b=igztGlxopBqh3UO5aJDIXFedIUk1f81MoU4+c7Yk69EbiEUNbhWlIu0nUZ+BzucKTQ KvwbrR8aADTpO0pefB3+Cn7au7BaJRfiFGxfQVhTQuL7Q2T5I1rO+hWMLYn0Cmslpgzb PgZ5YpGMdqmwPEJXX1fg6zWqDE20VXzN4/XzNsZs800haM/YCLk31gUIzeC7XpJHd1sg mTdXyZqfZS0CiIhVhi0I6c/cFAgmhVFe6RPAffTyS4wv20ulftx17nUIu2kwasMsthNI bMNvlZLGD2iuoQU3O9MqDKVdcg9BUft2Pd/CwbFNkZ8TTveyQ8wSV+OAeWwLun/Kch/p xFOQ== X-Gm-Message-State: AJIora90tpdgogdKQjiQq4vVCjTCS7bbqnU78LT7KKHxDBZP6RiLC/EK jRf4aB9uj9vLBZQ569B/F/Y= X-Google-Smtp-Source: AGRyM1vhMyD1gbI3frnrKkMf1bDk/ijS/p6B5vNkbAbfGX9WvsjSpYdlB2D8yxEa+tZgdpj/53EgcA== X-Received: by 2002:a17:907:608b:b0:722:fb4c:5675 with SMTP id ht11-20020a170907608b00b00722fb4c5675mr1821964ejc.273.1657259279600; Thu, 07 Jul 2022 22:47:59 -0700 (PDT) Received: from smtpclient.apple (pd9e36b80.dip0.t-ipconnect.de. [217.227.107.128]) by smtp.gmail.com with ESMTPSA id 9-20020a170906210900b0072af56103casm3661979ejt.220.2022.07.07.22.47.58 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Jul 2022 22:47:58 -0700 (PDT) Content-Type: multipart/signed; boundary="Apple-Mail=_DF3C0A95-532F-4E9D-8B18-011606EB7C71"; protocol="application/pgp-signature"; micalg=pgp-sha512 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: bug#56393: Actually fix the long lines display bug From: =?utf-8?Q?Gerd_M=C3=B6llmann?= In-Reply-To: <834jzt59jt.fsf@gnu.org> Date: Fri, 8 Jul 2022 07:47:57 +0200 Message-Id: <38E1476D-D8F2-42F8-9D24-E7957813A9C8@gmail.com> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3696.100.31) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_DF3C0A95-532F-4E9D-8B18-011606EB7C71 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii > On 2022-07-07,, at 15:36 , Eli Zaretskii wrote: > > It's our current convention for "internal" variables and functions, > similar to the "internal-" prefix you know about. Thanks. Again what learned. > > It was originally supposed to make it easier to move to a more > sophisticated GC, where it is important to have one place where a > struct member is set, so that you could do whatever GC needs to do > with variables that got written to. Unfortunately, the GC > modernization is still not here. Too bad. It does not improve the "habitability" of the code, IMO. > >> I can almost guarantee that it's not guaranteed that window_end_pos is >> always right. But I don't have an alternative, ATM. Could you please >> add a TODO or what's customary today in the comment, so it's easier to >> find? > > Yes, this should test window_end_valid before using window_end_pos. Right. --Apple-Mail=_DF3C0A95-532F-4E9D-8B18-011606EB7C71 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIzBAEBCgAdFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLHxQ0ACgkQc+obGZDF PmNYzA/+JcU7uOB3DMlnktPrv/3lRkwzUDpqBPYKxllu/Kx9zi5TI5wKL9t6/Kjr 6xUOjvfHsVf+6bQQy3E9Yy1G2tmnsjsW4GgUVsVY5xo+0xSVvfzSneMAMRWbiUJd swgI2BVi0SzFJciOXmd1b0dq1hUqlhnVXSaeHU6QKweRRu/pLdctateC+oTn+Dki Y5S2HH0HKB1iczrOCfTJlcSCQUzOAPFXA1eGW46GnVFu4Ccr8v1VB9t3/pBihioM +npVy7MjTyq6mUUr8uvdKyWSpE3jFnbljB5tLbcdYYzW6lX1ZoU/Manba2pU0qa8 5V2MMyG2uJGeauvKLzV4Qe+NQZVqRZDjcnNNCIb2eZnUiF1JqQnbAKluOW+gv+Vh 2tqVoyFGlBfIHs4/c6LAns893QvsLxEkXpyHf62pqnJKlia7HCTkhYMaJIoapRb2 XOeApcoWBAz7zUrmCeS0W9c0URnLgwLcjwewJU643cvaXHo64tE7XI2bfPxt2yBA oLjgqCU/7YcnhByBvapa0fp2de/ifRO4PbfctXYcUarOqjfqSKkjgX6s+/xp6gP1 bpfPx34JMgMbkh0o0uaRyaCLvGDz2dL4zbhkA4vV/ylryqnkyAzUItLTFp1YvyLF MiMrCjtUvXUI4oJfcK4rcfK0GYeD9YEpSYM3of62vK2DlnRSiec= =YlW1 -----END PGP SIGNATURE----- --Apple-Mail=_DF3C0A95-532F-4E9D-8B18-011606EB7C71-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 01:49:40 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 05:49:40 +0000 Received: from localhost ([127.0.0.1]:58543 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9grz-0001Bg-UP for submit@debbugs.gnu.org; Fri, 08 Jul 2022 01:49:40 -0400 Received: from mail-ej1-f42.google.com ([209.85.218.42]:40559) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9gry-0001BT-7i for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 01:49:38 -0400 Received: by mail-ej1-f42.google.com with SMTP id dn9so30656712ejc.7 for <56393@debbugs.gnu.org>; Thu, 07 Jul 2022 22:49:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=wVcHKlMzJb9B5VA7wdezUB5FyDp5vXCtY4UopAE/Pf4=; b=PCVFUKUa0Hd6CgidJ4mejl9Rx4CAcxs6+hDGnnnCgKnjZaUCmYHa2RpvVVpUUoVV2c dJZ+RWwgg8ITsKMuRPqnaQTVF5SZ2MCG7rKjBOL3dJfQbfPcGUy4cinFQiZ44AEeCq6V kGTR4/4f0RSG5RzlUUiqxorJhiZsUNfbIQgfmRJAalyLz42CqHH1OA92KN6U3RPt5KEt kSf0LGDlwcVegSkz70yMZYDzKLM8WZxJP3lRNCTMcfT2xJuILpB4k1tq4FruQF+Q3v+y q0wLNzIqLyl52ILEHNYNfBRaKQVunsuLE0vLxqsBRhrYWknvb8XP6ekTUlw1d3OyIT20 djyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=wVcHKlMzJb9B5VA7wdezUB5FyDp5vXCtY4UopAE/Pf4=; b=vwomk76taCm66oIhlYPnAx+mKMTQnY9QZ9kl0+4rXaJDWHjrTU76a/gn7Wu1ZHSr/3 1Nws95qO7uo5g0hpqjhjecnmiVU8aTF2YsJeMndUe63pnPYBLr+t3NXc6TejVsdYaxdX 3L3BfiXyLL9wEjH9Mctntpih0tugbm1Ut6L3IhJebVXTPG1h+hM8FoGfKRbk5xOpZClV FDCjrjE2xuyjyVhgZjee6BLEmzsRpC04ePKSCSC/mViLeIgKuiYRN13WACfc21/KLul5 Rx4U9K+vNsJw3hwRqhN4aCRu5FkvKuAuSHTArvWoyv+F6bzPYhaVV2NeftHADDKFVfX4 Lx/w== X-Gm-Message-State: AJIora9ua6vfObsiomy9+3vFYHRmFf7wvotbqvklemLXO5QG2SYQrBuC C9ldU+HkcjsVAEARYbTIG94VIa/cIaRo8xs1 X-Google-Smtp-Source: AGRyM1tYicj1exAup341wz+kXNwCqsA+g6dJ5cojHhg+rCWd6LkIT+bBgfoE97KI5X1+1bW1boPA6A== X-Received: by 2002:a17:907:a056:b0:72b:1964:fbcc with SMTP id gz22-20020a170907a05600b0072b1964fbccmr1854390ejc.489.1657259372515; Thu, 07 Jul 2022 22:49:32 -0700 (PDT) Received: from smtpclient.apple (pd9e36b80.dip0.t-ipconnect.de. [217.227.107.128]) by smtp.gmail.com with ESMTPSA id g22-20020a056402091600b0043aa17dc199sm1528737edz.90.2022.07.07.22.49.31 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Jul 2022 22:49:31 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= Message-Id: <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> Content-Type: multipart/signed; boundary="Apple-Mail=_C7076BBF-32C4-483E-B633-3568418EE315"; protocol="application/pgp-signature"; micalg=pgp-sha512 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: bug#56393: Actually fix the long lines display bug Date: Fri, 8 Jul 2022 07:49:30 +0200 In-Reply-To: <831qux5806.fsf@gnu.org> To: Eli Zaretskii References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> X-Mailer: Apple Mail (2.3696.100.31) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_C7076BBF-32C4-483E-B633-3568418EE315 Content-Type: multipart/alternative; boundary="Apple-Mail=_F325E25C-253C-4A05-A753-53FDEC6734B5" --Apple-Mail=_F325E25C-253C-4A05-A753-53FDEC6734B5 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii > On 2022-07-07,, at 16:10 , Eli Zaretskii wrote: > >> Yes, this should test window_end_valid before using window_end_pos. >> An alternative could be window-start point plus some estimation of the >> window's text, perhaps? > > Actually, we could be more accurate: we could use move_it_to, > similarly to what pos_visible_p does when passed -1 as the position. That's a possibility, indeed. --Apple-Mail=_F325E25C-253C-4A05-A753-53FDEC6734B5 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii

On 2022-07-07,, at 16:10 , Eli Zaretskii <eliz@gnu.org> = wrote:

Yes, this should test = window_end_valid before using window_end_pos.
An = alternative could be window-start point plus some estimation of the
window's text, perhaps?

Actually, we could be more = accurate: we could use move_it_to,
similarly to what pos_visible_p does when passed -1 as the = position.

That's a possibility, indeed.
= --Apple-Mail=_F325E25C-253C-4A05-A753-53FDEC6734B5-- --Apple-Mail=_C7076BBF-32C4-483E-B633-3568418EE315 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIzBAEBCgAdFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLHxWoACgkQc+obGZDF PmPhOxAAj1aZXmdEgF+dSyH3Vy0WJq0IsB6auxNGfwFa7nFRO1wEttr6NQbJnj2c AM34tBCPGPRQMp/h4/tk5uKwYCs6L5nFT0ZKuki1K6k4PWVkzKW2yDfbmy4doiS3 zuLwUd20nLNS3EQ4Hn4u4tHLQ7uGQ2aXwawiT8M7sj6qj/W0290O+zEsKtAvfnzb MmnNDkHWbC35xsWOY6Pb+yezyvA7gBjYA6Wy+/RLSEETGWV7P4cpfMXm/lCaRL4/ xld/u+nRwyYBr+vH7erqPMnQqWdpTjCyMf3Bd+0b4rp0GKu/j6Sz13trimyWT14h CMJVoR1h58IjFosIQjFFt8ydqKchmwU6DM54nIrAD1FIJevYS+n5X9PPnZ3bG5cf NUn62/dqY7GUAa/GJkuAw162+s97DXobmZ7LPz1JRs+d+FOdEhlFKuWQ0N8GcC5L B+BdUvZFdvgJAJKwuB5RhmAzVLFkZ7UMQRl0xyMwg0HNS9s4dre9tkn7APfiz8Df poGpmXdBxFnwoDJT0T2BIPpfbAlyHuPo+2H2CF90alz4rRvDPKxmdaD+bemsfJ7Q iPuTY5ZCyRVx+vG7pfs8mdY5i7HH2oEiAZBiCUEleQrMlzDl/Q5XjDpY01Wupi0D 58CDLtctVqMiHCcXMgdTaF/nlqejGGuORC1IW5gzj4/fDW/oU1s= =2nr7 -----END PGP SIGNATURE----- --Apple-Mail=_C7076BBF-32C4-483E-B633-3568418EE315-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 01:56:30 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 05:56:31 +0000 Received: from localhost ([127.0.0.1]:58548 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9gyc-0001MD-Ls for submit@debbugs.gnu.org; Fri, 08 Jul 2022 01:56:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:36796) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9gya-0001Ly-4t for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 01:56:29 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38276) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9gyT-000508-LY; Fri, 08 Jul 2022 01:56:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=HClFNhjqHaSozQfMiFbMqPxhzrxemDU8iw2KMjvImpk=; b=YZ3ojIXD1HwMEKB4amrB crhlmbyMrFh3iFayLZ7D93pDW3ZclFfBaJMeeRiAcRRr4DFl8Yi71TDKZGnyXLEJSUA2aO16GIT9k V0ALe8ZqftpWbC0qAfp6Pih7XAnrXLCNn1wkeRAJxQeesHtM7SVJn9TgtliDbx0N793uvp29m2koq /tjZ8kfwfVn26DQXc2wRi47XZeP8AlcYwRAKU1gfjRVl3gPzkKIw8KWUx+GmxCZBazsXIZ04rmC8k r+29hhrwR379WEPkiz/wSx/xhrQzkhIfgLgtpJ8ujBMdDW1WzJs+2W106ts7Y5RQf2LxjtIvceI9Y 3VpaS3RbWQ7E9A==; Received: from [87.69.77.57] (port=4876 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9gyT-0002AH-0X; Fri, 08 Jul 2022 01:56:21 -0400 Date: Fri, 08 Jul 2022 08:56:19 +0300 Message-Id: <83mtdk4070.fsf@gnu.org> From: Eli Zaretskii To: Gerd =?utf-8?Q?M=C3=B6llmann?= In-Reply-To: <38E1476D-D8F2-42F8-9D24-E7957813A9C8@gmail.com> (message from Gerd =?utf-8?Q?M=C3=B6llmann?= on Fri, 8 Jul 2022 07:47:57 +0200) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <38E1476D-D8F2-42F8-9D24-E7957813A9C8@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Gerd Möllmann > Date: Fri, 8 Jul 2022 07:47:57 +0200 > Cc: gregory@heytings.org, > larsi@gnus.org, > 56393@debbugs.gnu.org > > > It was originally supposed to make it easier to move to a more > > sophisticated GC, where it is important to have one place where a > > struct member is set, so that you could do whatever GC needs to do > > with variables that got written to. Unfortunately, the GC > > modernization is still not here. > > Too bad. It does not improve the "habitability" of the code, IMO. I'm not sure I understand: can you elaborate what you mean by that? >From my POV, the names are quite self-explanatory, and in a production build these small functions are all inlined by the compiler, so I don't think I see a significant downside. (There _was_ a downside in the past: the annoying job of converting all direct accesses to struct members to function calls, but that's water under the bridge.) From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 01:59:16 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 05:59:16 +0000 Received: from localhost ([127.0.0.1]:58552 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9h1I-0001QR-4F for submit@debbugs.gnu.org; Fri, 08 Jul 2022 01:59:16 -0400 Received: from mail-ej1-f46.google.com ([209.85.218.46]:39511) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9h1F-0001QD-PP for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 01:59:14 -0400 Received: by mail-ej1-f46.google.com with SMTP id a9so6249890ejf.6 for <56393@debbugs.gnu.org>; Thu, 07 Jul 2022 22:59:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:subject:from:in-reply-to:date:cc:message-id:references :to; bh=4b20ChKdwM4bxMYE2bM2vIfB5ABxClMgYPiH7FFhnHE=; b=YzhVCYUnEJ33fIxoVOutmZoK0OubKG74EJ1IsSGfwlB58JYKhH6sAhmysGQlU/Qavm XEXyA2nIW6oDz9N08QnuY07T1Y9aXjnwFj4OCo96mkO9olrUTQ1Nc/2KZPUD14yRDCZN 3CVwRRDZZ5WOgfw0xmKhAbc/gV0xl/YSio/fNFB49clEYXYT+ZrsYGqxYGJCoQ8gZ6aE epEv9ugvRi0ElL5NVPJhg/ncfCb6kjasjmtadMB2fulUR20Vb5MW5xGm6ESyB23aF7MD Tr3nFjOszxGOO8XzmwSJAgRaj7trFTOYVbFKDez6Z92FSbFeuXbGZ8vMdl6FQnYRBleP cThw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :message-id:references:to; bh=4b20ChKdwM4bxMYE2bM2vIfB5ABxClMgYPiH7FFhnHE=; b=yhkQhj2AWT3JN5dKu6wA6t5UJv69DPXGejEsyzcQxJuQXyeksS398DnIZn1KfDkfJY 2XYqgFRTYQOMRXatoOIG9EgNH4JIIfhOgtsfFkQs7tdYCGfiLCfceqaM/dUo1MuF2NsE /sQLMqDNLmPUw7BmcQ6ivcg61jOO/coPfWWP6u5wf5ThfVekBnauRw14DvQ3PFmSlIWe SIAOg4yXbrj5BFs7jxHLcLRgU5UFfRiNJjmJWme8NShyLgNq89+zZ9YrOABrL1rcrwQg w9ac4pOdXVPE3rCA6fakMX+0xQSI2GX/hIpaoPK+f/GhXEuyaiK+xOiv6Y+rzIB1vRTg lbkA== X-Gm-Message-State: AJIora90PbM6gOe2KTjiFWxUdYAEbaInh5ZzGpF/ztzXnr9N1N7Kl7UG inDvaUn4EQz9/8M9nAjsmJs= X-Google-Smtp-Source: AGRyM1uFURrNVWVeVBL9QjUPaCO6njEVzaSet1ksZ5Yhlf0MzYnW8Y7I97ovSmdnZOqdRamCWmh60w== X-Received: by 2002:a17:906:7a58:b0:724:c5f7:21e9 with SMTP id i24-20020a1709067a5800b00724c5f721e9mr1877963ejo.90.1657259947930; Thu, 07 Jul 2022 22:59:07 -0700 (PDT) Received: from smtpclient.apple (pd9e36b80.dip0.t-ipconnect.de. [217.227.107.128]) by smtp.gmail.com with ESMTPSA id f15-20020a1709062c4f00b007081282cbd8sm19869995ejh.76.2022.07.07.22.59.06 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Jul 2022 22:59:07 -0700 (PDT) Content-Type: multipart/signed; boundary="Apple-Mail=_B12ECABB-DB0D-4759-BF62-0E66E4D45146"; protocol="application/pgp-signature"; micalg=pgp-sha512 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: bug#56393: Actually fix the long lines display bug From: =?utf-8?Q?Gerd_M=C3=B6llmann?= In-Reply-To: <3ffab19196f1cb984244@heytings.org> Date: Fri, 8 Jul 2022 07:59:06 +0200 Message-Id: <77F17106-A919-4D17-B22C-F35E677E31A3@gmail.com> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <3ffab19196f1cb984244@heytings.org> To: Gregory Heytings X-Mailer: Apple Mail (2.3696.100.31) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_B12ECABB-DB0D-4759-BF62-0E66E4D45146 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On 2022-07-07,, at 20:38 , Gregory Heytings = wrote: >=20 >> I'd find it easier to read if the if/else were reversed to that the ! = isn't needed. >>=20 >=20 > I'm not sure what the convention is here (or even if there is a = convention). But my feeling is that it's better to place the "normal" = case first, and the exceptional case in the else part. Ok. Tastes differ, I guess. >> Could you please tell in what circumstances the call would not set = the variable? And wouldn't the minot mode print something, also? In = other words, can we remove it more or less safely? (If the user screws = up, all bets are off anyway.) >>=20 >=20 > It should always set the variable indeed, but who knows what a user = could do if they decide for some reason to override the definition of = auto-narrow-mode in their init file? Setting the narrowing state again = here is a cheap safety measure that avoids calling that function again = during each redisplay cycle. >=20 > I don't know why the minor mode doesn't print something when it's = called from C, but it doesn't. I think we could use Ffuncall_interactively here to get the message = printed. --Apple-Mail=_B12ECABB-DB0D-4759-BF62-0E66E4D45146 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIzBAEBCgAdFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLHx6oACgkQc+obGZDF PmNQPBAA0Ii73nUx6KGeR/krs2UtkKJ9x6UhFT50wGhAddZDHuhm5LdrwqgsSuHk WNMJHNU39FAhQuecLt1IQ6iYamjzw84ePVI/2UcBi1g+hfc4rVwK6uZQKjJCrGdl 0lZx4wxoTyDyf55jnbVZajCDH6TIPIlwBR6EeYizJGNty8bBFd/91mvy6zS+qYES CLnR5g/MfLyLIaw83E8jXjHryAbXRqTWg6KM0IKbXCYyZ9w1EVS7Hh9C60Gsk2U3 SXxxlE+h/BBlbBfrzNPxUBl+wnHTs8PCVAA5kC9t5txeWcxmMBbAr/EZhN2l1Qg/ hN3GWoKoPjpYhc/pCSXLBM/szxHrD4L+Qh9Z2HO51XWGmACxSzNA7WhlMROGMLEp 3bJgPt/bEvq6/ykvpWaDUH+ZhyOL9DjeiO0p8mb5ke7QUQgHdPZcIt+jIOw0bb94 jxBbtzXryPaqHMMU1XNbKFMKJ8G8LQXRMeafVVIB63ytLNNQDuGvHsq0ldvUWtbB vI32JqW/+3x4I/BJh4AVK7NjI4puVjYT7HGXWE5J6RETpm3Pw1XVhnWt5R/WyAgJ 4xww6DoAFQC7fO0VlW1B/eG3PUEe3d9U4NGeY3F2Fv4J3oRM0OKMTHOIJF6TBzTj FMi1RfnRjyxoZqZzTs/djsCy90wyYaaFJm41pedl4iVizuCE0zA= =hR4T -----END PGP SIGNATURE----- --Apple-Mail=_B12ECABB-DB0D-4759-BF62-0E66E4D45146-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 02:25:39 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 06:25:39 +0000 Received: from localhost ([127.0.0.1]:58576 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9hQp-00027Y-CQ for submit@debbugs.gnu.org; Fri, 08 Jul 2022 02:25:39 -0400 Received: from mail-ej1-f46.google.com ([209.85.218.46]:39805) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9hQo-00027L-Et for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 02:25:38 -0400 Received: by mail-ej1-f46.google.com with SMTP id a9so6328897ejf.6 for <56393@debbugs.gnu.org>; Thu, 07 Jul 2022 23:25:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=1uusZYRwl5ZCYneyXhrqqQHOqBQoSYI6mWVhfptr/NE=; b=gymFlZHA+8pb773AdBllW7bPTOJzjZeTGw7aft0QkbLvdZQUHJhkoFJtuMA1EIYtEP LzluSmUzJ3KSlU4HTIABXxpBRy0+KHOI10aAnRYtLQ1CcBY+w3dXVLAZSza/K67f93/l CFE1Q3D67+JaXVIrnirQaYbrF27cCPIlsBxnxJrqn9yVVM++wYx8iyfiGpiqokS9eJNe g9vLGxRXVdOUIlwpzGM/eL7TjrfX+CCbcNgtsDxwBXEnIalc5K8+NaLbpGimzHeThNLR +S89hc1KbpZ3zWT7Rj9VWyzcV2y2Kfwfg/Dct4XRY3cviW1GK/R4UfD1mquGfbOnMPoA P+7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=1uusZYRwl5ZCYneyXhrqqQHOqBQoSYI6mWVhfptr/NE=; b=ReEqZEY+uQDR1dqU5FGcaxevbFno2q4gq1wbOP7fGWN+4Asqhlx+cO5asK575O12z+ cqeogx3ATlVQQy9Px9hNkKfsnAVlUMXsNNWfX7EviJksn/posQRZHb9FXX8bqmImlYBX YcjDotGkcDLGvFDOaYKwFsD608eROXHQXZJiVp51DRf96UUgZBqcfcd2RIL0fNYIJbg2 L4G5TqUlkOBBn/yyiIOA0Mncaezc7j9FeWplvG4NTqyfptkJIe99+br90pM+eMYMFHG2 gHZAFsXSZAF2YpgoE9oJ9Za9mOh6WYCSDtc2LEdXlB2LKz+K8bpiYlHLiCjtgUKKxCX0 LlAA== X-Gm-Message-State: AJIora8Jae+T7iTXmWFO1nJkoEnwwjpK1vLRGIgZ16oe3g9/Wc5yvQ1O WjTYoYlvgERJHNEafz13PW0= X-Google-Smtp-Source: AGRyM1tZdcot4nSjgCkkp66VCYExEZWBZRXlEgrswF3Q01Fo/8y9DgPpX73S4VV0y7y4sYOsAz0goA== X-Received: by 2002:a17:907:9627:b0:726:9f72:fc8 with SMTP id gb39-20020a170907962700b007269f720fc8mr1904245ejc.551.1657261532623; Thu, 07 Jul 2022 23:25:32 -0700 (PDT) Received: from smtpclient.apple (pd9e36b80.dip0.t-ipconnect.de. [217.227.107.128]) by smtp.gmail.com with ESMTPSA id lb26-20020a170907785a00b0072aa1313f5csm9052389ejc.201.2022.07.07.23.25.31 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Jul 2022 23:25:31 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= Message-Id: Content-Type: multipart/signed; boundary="Apple-Mail=_71D1BBF6-901A-42D1-A7FF-FE6D5E0F4147"; protocol="application/pgp-signature"; micalg=pgp-sha512 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: bug#56393: Actually fix the long lines display bug Date: Fri, 8 Jul 2022 08:25:29 +0200 In-Reply-To: <83mtdk4070.fsf@gnu.org> To: Eli Zaretskii References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <38E1476D-D8F2-42F8-9D24-E7957813A9C8@gmail.com> <83mtdk4070.fsf@gnu.org> X-Mailer: Apple Mail (2.3696.100.31) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_71D1BBF6-901A-42D1-A7FF-FE6D5E0F4147 Content-Type: multipart/alternative; boundary="Apple-Mail=_40B90B62-2818-461E-8967-AC4C416BBC0B" --Apple-Mail=_40B90B62-2818-461E-8967-AC4C416BBC0B Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On 2022-07-08,, at 7:56 , Eli Zaretskii wrote: >=20 >> From: Gerd M=C3=B6llmann >>=20 >> Too bad. It does not improve the "habitability" of the code, IMO. >=20 > I'm not sure I understand: can you elaborate what you mean by that? I used the term habitability in the sense of Richard Gabriel in Patterns = of Software. https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf = "Habitability is the characteristic of source code that enables = programmers, coders, bug-fixers, and people coming to the code later in = its life to understand its construction and intentions and to change it = comfortably and confidently." (There's of course more...) >=20 > =46rom my POV, the names are quite self-explanatory, and in a = production > build these small functions are all inlined by the compiler, so I > don't think I see a significant downside. But now, as in this case with the new variable, one has to write a new = bset function, for no other reason than to make matters worse by = introducing inconsistency by having some variables that habe a bset and = other that have not... I'm sure you understand what I mean. I think I wouldn't call it "significant" either, but I also don't think = it's good in any sense. > (There _was_ a downside in > the past: the annoying job of converting all direct accesses to struct > members to function calls, but that's water under the bridge.) Right. --Apple-Mail=_40B90B62-2818-461E-8967-AC4C416BBC0B Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8


On = 2022-07-08,, at 7:56 , Eli Zaretskii <eliz@gnu.org> wrote:

From: Gerd M=C3=B6llmann = <gerd.moellmann@gmail.com>

Too bad.  It does not improve the "habitability" of the = code, IMO.

I'm not sure I = understand: can you elaborate what you mean by that?

I = used the term habitability in the sense of Richard Gabriel in Patterns = of Software. 

https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf

"Habitability= is the characteristic of source code that enables programmers, coders, = bug-fixers, and people coming to the code later in its life to = understand its construction and intentions and to change it comfortably = and confidently."

(There's of course = more...)


=46rom my POV, the names are quite self-explanatory, and in a = production
build these small functions are all inlined by = the compiler, so I
don't think I see a significant = downside.

But = now, as in this case with the new variable, one has to write a new bset = function, for no other reason than to make matters worse by introducing = inconsistency by having some variables that habe a bset and other that = have not...  I'm sure you understand what I mean.

I think I wouldn't call it "significant" either, = but I also don't think it's good in any sense.

 (There _was_ a downside in
the past: the = annoying job of converting all direct accesses to struct
members to function calls, but that's water under the = bridge.)

Right.

= --Apple-Mail=_40B90B62-2818-461E-8967-AC4C416BBC0B-- --Apple-Mail=_71D1BBF6-901A-42D1-A7FF-FE6D5E0F4147 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIzBAEBCgAdFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLHzdkACgkQc+obGZDF PmNlHA//fO1xWt1Q8OXCi6rZW72ufq45MGidRG1e5sXFHvVTuLSiHJ9Uvihcylp9 z+eHKgsPNRKWrzdiyR/F+ptotKvtjHAVqSt2j/BUXdUi0oFkdXJ1YDwZg0yIMO1c rVrZGgYCF/mLNiPJm4XLx2K0DIEFpwfAYu2fePZSLm/r3+pto+8tAM+3ysUXUfW1 ALD1nwlfI2KxC1vi1KvZ8xzpXt30IlEGdzmoTucHaTrMPWwhann4i2aA/NKc3hSW DN5BOBx2ud3VpmR48RGDiP7j/RD/MLfUFkH3o6w7xsgIsnbGXQwUpj5D13Gom1J7 mvboyWOGNOePRBOckZ9pl5BVzxaDFru8YZ7bGZw6JcFp8eFs++JczJx/lyU/Ry84 cC8lMVZqrQgfXYQMUohcOMaO4CR9GumMvvjz/G56YlPpiqRNUXdrh0KyLHuGb/mS 72uLUdIiG3EQZpVFWVwQKtriQPHY4XiCzvpfyzwDVq63iWUcy5nw5mcZCgiTe7wk bxpTsetJ88Nfl4lpIhwbccw7VvM1fEP92NKN09Ibx0cf79OX5Oihn/+Ch9Ztvtwe t3VsjXufzDEAAUZjugoImFIhOZw4OeQa7uJwVks1UuTL1rDEbiioeQECu6dHj0Cn UTDSBpn/QuUl3kB7f7rIub3LczmthAfiNN3osmLFeE1iC9I8hcc= =GLPW -----END PGP SIGNATURE----- --Apple-Mail=_71D1BBF6-901A-42D1-A7FF-FE6D5E0F4147-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 02:56:08 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 06:56:08 +0000 Received: from localhost ([127.0.0.1]:58601 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9huA-0003id-Pn for submit@debbugs.gnu.org; Fri, 08 Jul 2022 02:56:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47484) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9hu6-0003i7-RX for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 02:55:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38882) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9htz-0004MJ-Tu; Fri, 08 Jul 2022 02:55:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=Epqrg9Mv3qftxWWGoHKGCN7mWzpvR7AhQkSLovePFKE=; b=YGOLzu/LWV3cTclbbQxz NcplxYPzMQHgRvz4ha7toiImCPYQofC6rl3/dZm7nwXmkU/UIxLPgmd0Hp/KUnyJDf2u+gMXEQZs/ NKNOSrDDx3NHiWtMsCi8/338WAq1CnuI+RtxuW6sE4xfiGdmr5M8uYn1GPs1Ng7C+alj48wScbWYN 7FFZau03V6S1VcTegOybK4KCyEOM9qedTns0f311eez/gG0K8T5RSmgWoGckoSvpBImwoa3FjeCn9 WPFoTY5yjF2o9jNseXbSNdVTAaWBmMUwBOCNsFp9RQZNxFeunM/fAIR6e7tMenIA3RnAwudXkaEht TO+LpQoJ087TPA==; Received: from [87.69.77.57] (port=4516 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9hto-0003uy-FV; Fri, 08 Jul 2022 02:55:45 -0400 Date: Fri, 08 Jul 2022 09:55:34 +0300 Message-Id: <83let43xg9.fsf@gnu.org> From: Eli Zaretskii To: Gerd =?utf-8?Q?M=C3=B6llmann?= In-Reply-To: <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> (message from Gerd =?utf-8?Q?M=C3=B6llmann?= on Fri, 8 Jul 2022 07:49:30 +0200) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Gerd Möllmann > Date: Fri, 8 Jul 2022 07:49:30 +0200 > Cc: gregory@heytings.org, > larsi@gnus.org, > 56393@debbugs.gnu.org > > Yes, this should test window_end_valid before using window_end_pos. > An alternative could be window-start point plus some estimation of the > window's text, perhaps? > > Actually, we could be more accurate: we could use move_it_to, > similarly to what pos_visible_p does when passed -1 as the position. > > That's a possibility, indeed. I installed the below on the feature branch. Testing it, I see that window_end_valid is false quite a lot in this spot, and in those cases using window_end_pos yields (a usually small, like 100 - 200 bytes, but occasionally very large) inaccuracy. This is very old code (I see it in Emacs 21), with a FIXME comment since those days, which AFAIU was written with exactly this issue in mind. If there are no problems with the fix below, I think it should be moved to master. diff --git a/src/xdisp.c b/src/xdisp.c index 7821c12..a583e10 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -18872,19 +18872,32 @@ set_vertical_scroll_bar (struct window *w) && NILP (echo_area_buffer[0]))) { struct buffer *buf = XBUFFER (w->contents); + ptrdiff_t window_end_pos = w->window_end_pos; + + /* If w->window_end_pos cannot be trusted, recompute it "the + hard way". */ + if (!w->window_end_valid) + { + struct it it; + struct text_pos start_pos; + + SET_TEXT_POS_FROM_MARKER (start_pos, w->start); + start_display (&it, w, start_pos); + move_it_to (&it, -1, it.last_visible_x, window_box_height (w), -1, + MOVE_TO_X | MOVE_TO_Y); + window_end_pos = BUF_Z (buf) - IT_CHARPOS (it); + } if (! BUFFER_AUTO_NARROWED_P (buf)) { whole = BUF_ZV (buf) - BUF_BEGV (buf); start = marker_position (w->start) - BUF_BEGV (buf); - /* I don't think this is guaranteed to be right. For the - moment, we'll pretend it is. */ - end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf); + end = BUF_Z (buf) - window_end_pos - BUF_BEGV (buf); } else { whole = BUF_Z (buf) - BUF_BEG (buf); start = marker_position (w->start) - BUF_BEG (buf); - end = BUF_Z (buf) - w->window_end_pos - BUF_BEG (buf); + end = BUF_Z (buf) - window_end_pos - BUF_BEG (buf); } if (end < start) From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 03:01:25 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 07:01:25 +0000 Received: from localhost ([127.0.0.1]:58605 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9hzQ-0003xr-T8 for submit@debbugs.gnu.org; Fri, 08 Jul 2022 03:01:25 -0400 Received: from mail-ej1-f44.google.com ([209.85.218.44]:38570) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9hzN-0003xa-Jq for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 03:01:24 -0400 Received: by mail-ej1-f44.google.com with SMTP id l23so4375789ejr.5 for <56393@debbugs.gnu.org>; Fri, 08 Jul 2022 00:01:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:subject:from:in-reply-to:date:cc:message-id:references :to; bh=7JLcIt4toc3lqfZ5PVe0kgmJxeXFokKxjr213vr30iE=; b=SVYZt6jk6qVChHc0cKNVweXiJslneJAzIW5fHBjVqBtAkTF/5nKJ+iFSLYa0uymkO8 XSZ8q4XciyBBQ3jgfBUxmzxHYBjGqadmOat0VMAnizkUua6LDVBYoMzz+ZEyYDY07c2h PtbA5B5MiDqKdW/A+ihdUdVB5nAdmGxW7JWIb2RaZvseQiUDq2NvQSMHCV7Qw2GfBcCn zYuxNMIXHyZVUTCfsaneb5DaR0mVLLoB5grFzfExTEVWjhVp1FZPHwZso6jLxr8Y9fg9 aEw6rsynGYt+uAL4836Wdt8qirPPW7S6NtapB7APWXG5N7gH+KVRxK8Nlzv4DMenqAG8 gT1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :message-id:references:to; bh=7JLcIt4toc3lqfZ5PVe0kgmJxeXFokKxjr213vr30iE=; b=UpCPJFXQYsXxeQNJYkjbNH10pGHCwGpdxWZMsbX6k4PBvlzDUhzQVBMFsvsge3Ma59 g7zhz2Z56Lgso5FznrLWoxY09Xhgbcya0j24VFfp9suY4mJhnXH6faK2hTVYz3I0pQTI qotNIm3tx41dE/wjsvdLe2hG6JA5USa2UfA9fgQbZLoFG9KfHkjXbbvIr037u5guHqAl UjNkpyNETfhqoqB+M3YkDV32C6v3p16EnWKnUp66cp4L9uO/VoHu82xetwq/zXMS4/RZ cmuLhNBYICiWaNytE8OQD/iTMtFg8aMns5b7nYyLY5dKcsMCoDHVu+0nGvl8OSwO1kRL 3JXg== X-Gm-Message-State: AJIora+i7pWcZ/iG04HSaV9M0rDeJ1PcN5ev1phI5eSkU7Hv34uB466A Qk/L/WnPiBOlG4bqtytgvOo= X-Google-Smtp-Source: AGRyM1ta11dVI4BrAdugKrYEvzzjAzqafADhZf2Yd1L/1McKctObov30pZz32XdegPg4oxNu1HS70Q== X-Received: by 2002:a17:907:e8e:b0:72a:ad07:8357 with SMTP id ho14-20020a1709070e8e00b0072aad078357mr2063938ejc.338.1657263675355; Fri, 08 Jul 2022 00:01:15 -0700 (PDT) Received: from smtpclient.apple (pd9e36b80.dip0.t-ipconnect.de. [217.227.107.128]) by smtp.gmail.com with ESMTPSA id d8-20020a056402000800b0043a71c376a2sm9066669edu.33.2022.07.08.00.01.13 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Jul 2022 00:01:13 -0700 (PDT) Content-Type: multipart/signed; boundary="Apple-Mail=_34B8807B-C7A5-4E5D-9B26-058A77915FBC"; protocol="application/pgp-signature"; micalg=pgp-sha512 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: bug#56393: Actually fix the long lines display bug From: =?utf-8?Q?Gerd_M=C3=B6llmann?= In-Reply-To: <83let43xg9.fsf@gnu.org> Date: Fri, 8 Jul 2022 09:01:12 +0200 Message-Id: <24D2721E-3F62-444A-B471-E54C1FAB4028@gmail.com> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3696.100.31) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , Lars Ingebrigtsen , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_34B8807B-C7A5-4E5D-9B26-058A77915FBC Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii > On 2022-07-08,, at 8:55 , Eli Zaretskii wrote: > > This is very old code (I see it in Emacs 21), Ugh. Will not happen again :-). > with a FIXME comment > since those days, which AFAIU was written with exactly this issue in > mind. If there are no problems with the fix below, I think it should > be moved to master. Three thumbs up! --Apple-Mail=_34B8807B-C7A5-4E5D-9B26-058A77915FBC Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIzBAEBCgAdFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLH1jgACgkQc+obGZDF PmOJtxAAurchbPJLWxkHs/8j+J7FEN+kud2P3Mic97IGtqitI9fPJTC3QccJ8siq fp3DZfowHbMeHvwfkFA/zrmmz1/zNp/DMGSkXP2J1LuI89T/rLK6m/MzanhVo2Mh wDyR1NNC1eVjXiMb5jbRD40yOBC7HnyKsNV5jno9fb5o4lISZu7ZEcB+FGlNww8s fvtd5sjMNzgvnmi7OPT/d4b21iAfBRjumDvroyPXTbGFlflUeKSP8Fl9iQY54Csf s2IUFkuuiUNXWCVT1gsTZD/iYwHV3EqDXRYaQincqDFDtL2oS6hnlngocU69SvIC trkuKbiGI2vm3V1XOVepDpTk/ZCBri+3T+2BHUBpf27UgXEjzbHAV7jTPlSy79yc eKHqA77s13K4Suhtm3ZhE03dpmIcdHr5Vv+Aw6elmow5Wer1a+PEmrDFH0xFEXQX HumNZWKVRBr5lQd3+dai/HSvFDVxEePo9jn4cw/cItPWLyPVXwkXdUy8UrBqgk36 PjoWTRkSmbBI4nZ7G13OVL8B7g5ddlC2MgsKvV0Y9FgSTm+/otAoqSM5GLCFYms/ xPCxlxhdOVkLWXfdbvCan2qO+58ekoYq5Bv0wYCpBA2M0ojkoQn7jpaSQMNrf+Y9 zUI14zquhK0eyCyWeoNqp+2hRnih61wVO1YyEI+hzmVsHg0Fdwc= =nX9T -----END PGP SIGNATURE----- --Apple-Mail=_34B8807B-C7A5-4E5D-9B26-058A77915FBC-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 03:20:15 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 07:20:17 +0000 Received: from localhost ([127.0.0.1]:58630 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9iHS-000502-Rf for submit@debbugs.gnu.org; Fri, 08 Jul 2022 03:20:14 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52546) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9iGo-0004qa-RC for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 03:19:46 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:39086) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9iGi-0007Nc-E1; Fri, 08 Jul 2022 03:19:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=1V59X3UB8KmTpIx3iHFm3uilYNM+Fw+dpA3QmNeqWEc=; b=r8IDVoe/9RNz+vEqr2PV nZgraY+Fq5IW2/Sd6aNECZ+pzkuGw4N1YlONT4Nn191h9Uq8sxt67fed0otS9Gxwq888nWBMYtA/0 ZRrd9d6EMldnnJsII5mTHHGdMKU55hxtF2458moXhkLaDalMvCc1Eu3Xje8+bWpNTa0zNrHXpp5Bx J3070smXvrhp0NQl/eQ9lhpm/ZhKCb8IvXd7rw30Gw1anhCQWwB52xdrWqN7QXrni6GowXnTtq4rY EO8KzG8QSeggbOfadhHhYI0LzJdjn78fRZDv/GisonSTU6DuJXLMHZUifpp1MfUkXMa7Yic5D2jAk 3MurTefCYjlqQw==; Received: from [87.69.77.57] (port=1992 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9iGh-0006Hu-Qc; Fri, 08 Jul 2022 03:19:16 -0400 Date: Fri, 08 Jul 2022 10:19:14 +0300 Message-Id: <83ilo83wct.fsf@gnu.org> From: Eli Zaretskii To: Gerd =?utf-8?Q?M=C3=B6llmann?= In-Reply-To: (message from Gerd =?utf-8?Q?M=C3=B6llmann?= on Fri, 8 Jul 2022 08:25:29 +0200) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <38E1476D-D8F2-42F8-9D24-E7957813A9C8@gmail.com> <83mtdk4070.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Gerd Möllmann > Date: Fri, 8 Jul 2022 08:25:29 +0200 > Cc: gregory@heytings.org, > larsi@gnus.org, > 56393@debbugs.gnu.org > > I used the term habitability in the sense of Richard Gabriel in Patterns of Software. > > https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf > > "Habitability is the characteristic of source code that enables programmers, coders, bug-fixers, and people > coming to the code later in its life to understand its construction and intentions and to change it comfortably > and confidently." > > (There's of course more...) > > From my POV, the names are quite self-explanatory, and in a production > build these small functions are all inlined by the compiler, so I > don't think I see a significant downside. > > But now, as in this case with the new variable, one has to write a new bset function, for no other reason than > to make matters worse by introducing inconsistency by having some variables that habe a bset and other > that have not... I'm sure you understand what I mean. Well, that's true, but we have a lot of similarly "un-habitable" stuff in Emacs anyway. Most of that is due to the aspects of the Emacs architecture, which is somewhat unique for a C program: automatic GC, proliferation non-local exits, differences between external and internal representation of text, C structs that represent Lisp objects, etc. As a simple example, the rule to use ENCODE_FILE and DECODE_FILE when calling any file-name-oriented C APIs is one such convention that newcomers have difficulties with following. From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 08 17:41:53 2022 Received: (at 56393) by debbugs.gnu.org; 8 Jul 2022 21:41:53 +0000 Received: from localhost ([127.0.0.1]:33324 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9vjV-0006Aq-91 for submit@debbugs.gnu.org; Fri, 08 Jul 2022 17:41:53 -0400 Received: from heytings.org ([95.142.160.155]:58342) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o9vjT-0006Ai-KT for 56393@debbugs.gnu.org; Fri, 08 Jul 2022 17:41:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657316510; bh=mB3b9hlrVxlgQAbxXH5fFTm/R9gyUhgO/JKnttVSpAc=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=1EuTF3p4cUGpR8f8hB5B/2HZ9FizPGGn34DvAOzPTciU/ikkhfpswf/XdSLk4ttk4 Jbq/faGtP3+MPswuSODR5Ai9JfmK5dUbg6+vTXXlAMxIXUVc8jBjgEHCr6sxf4zbyX 0NbinVP5WMW+x3u7Gm5rYNFyXcJzpUBmix1yiF/9doogojR3jcSpf9odOAfenKQ5bI OV33MSaOU9i4hW3rHFqPT7f+jtyfgXZVCZ/rpCRaAzLaAyB7TmUzOD9bMOa6PmKMtj 7prFOSTx97i5lNwKX5rh6w6BBJLkIL/Gw4LjfYhSr6hyHEL3U0NpfQS4abi4NVlKwh 4bjAE63w8dOpA== Date: Fri, 08 Jul 2022 21:41:49 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83let43xg9.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) I reverted all commits on the feature branch, and started anew. The feature has now been moved into the bowels of the display engine, and it works even better. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 02:20:38 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 06:20:38 +0000 Received: from localhost ([127.0.0.1]:33638 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA3pV-0002oa-W1 for submit@debbugs.gnu.org; Sat, 09 Jul 2022 02:20:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:58322) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA3pU-0002oO-58 for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 02:20:36 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36960) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA3pO-0004WD-Bf; Sat, 09 Jul 2022 02:20:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=bbf0NyirbvVquEb8IPPo8BFcAeRvt3DgbDJtTCsQ+eA=; b=Zz82yTJkIYcvhlWRQyNK KS8shLiW/KHx12BmNR/+EYmP9UXi6WlrgEv7wXMDQ7VNLDykRjxpok6b9sCp7PP+wb981MzMbz0Tf MkQifVKPvTo6T/2Rv2mMKWVbxcNAAug683f5qP9jaGv/4CpXoAugYT1l8nVRIjoVMH7IctsOlJicB sr4AcZSP6k+4G6nW9bzeU/MMEY2YtcUYA9PcsY4xJ0Mh+oXxdiUwCFkZio847XMWABL+aIIc1Ohuk fMREgouKGaiRmHqo6UcdxHbBttssctwd340/dkrne49lwVUNN8s+SJhMistAs0krNbtp2gx+k3CtW ODeEWWMAgsFwSw==; Received: from [87.69.77.57] (port=3287 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA3pN-0002IB-R3; Sat, 09 Jul 2022 02:20:30 -0400 Date: Sat, 09 Jul 2022 09:20:30 +0300 Message-Id: <83tu7q3iz5.fsf@gnu.org> From: Eli Zaretskii To: gregory@heytings.org In-Reply-To: <83edyx5j2u.fsf@gnu.org> (message from Eli Zaretskii on Thu, 07 Jul 2022 13:10:49 +0300) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, Gerd =?utf-8?Q?M=C3=B6llmann=22?= , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: larsi@gnus.org, 56393@debbugs.gnu.org > Date: Thu, 07 Jul 2022 13:10:49 +0300 > From: Eli Zaretskii > > I don't yet have a good idea about where to check whether "narrowing" > is necessary for commands like C-n and C-v, but maybe look where I set > the display_working_on_window_p flag as guideline. Another idea would > be to use those new members in 'struct window', but then (a) it is > less clear when to reset them, and (b) some commands might go far > away, thus making those values no longer pertinent. After some more thinking about this, I think I do now have an idea how to tackle command that employ the display code. I see that you decided to produce the "restriction" in init_iterator, which would, of course, work, but IMO it has a disadvantage: init_iterator is called a lot, so computing the "restriction" in it should be very fast. Your current implementation _is_ fast, but AFAIU its result is that we _always_ restrict the display code from seeing the entire buffer, even if there are no long lines in it, which I think is unnecessary. The original implementation only did that when it detected a long line, and I think we should keep it that way, because the "restriction" will inevitably have some negative effects, however minor, on what we display. My proposal is to calculate the "restriction" in start_display. That function is called by all the commands/functions that use the display code outside of redisplay proper. (I think one or two such places call init_iterator directly, but we can either handle them specially or change them to use start_display.) In addition, to prevent even start_display doing more than necessary, redisplay_window should compute the restriction for the window that is about to be redisplayed, and store the values in 'struct window'; then init_iterator, if called inside redisplay, will then simply reuse those values, and start_display will refrain from computing them anew. (To know whether some code is invoked by redisplay, test the value of the global variable redisplaying_p.) This way, we could make the "restriction" smarter, and only apply it when needed. Another advantage is that this way the "restriction" will be the same for all the code that is called by redisplay_window, directly or indirectly, which I think is safer than having different "restrictions" computed by different functions. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 03:03:33 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 07:03:33 +0000 Received: from localhost ([127.0.0.1]:33651 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA4V3-0003uX-AF for submit@debbugs.gnu.org; Sat, 09 Jul 2022 03:03:33 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39072) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA4V1-0003uK-RF for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 03:03:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:37168) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA4Uw-0006in-2r; Sat, 09 Jul 2022 03:03:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=YaAGwhnENyQ2rU0SR0fJ5f6nXvDbykpq/9uqdb3gmUo=; b=V/g/geYgnURHWFdygwP9 rlPe/UdH/FGepOt9o8ccsuikO1Ta0BBr/YuAD121J4rD3lClmxtU/2m6wYXN9ESNVbrswZTDYpX4T RLHWnlUcHZoOUXu3l/01rNb11iYKC7Cocq871wn75BMWk89Z9ioooqmFUl22LKO/itj9XK1aGJ+6A +8A2K5+0M8XZ3MUwfOqFdWvzTrGUZWrD2hifitvx6R4idMcFEgS6RcK6Ko1BPYZCqThuqTv2FLXMp ZVcF5h4osWN+Guj+cluMbZ5IDvYq7n0DHOm8D+bYGNwkULOXkB17USe4XlzXsetKl/dLtZLFraE3o qhJzEc1MTs0COw==; Received: from [87.69.77.57] (port=1917 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA4Uu-0004hn-Ri; Sat, 09 Jul 2022 03:03:25 -0400 Date: Sat, 09 Jul 2022 10:03:21 +0300 Message-Id: <83sfna3gzq.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Fri, 08 Jul 2022 21:41:49 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Fri, 08 Jul 2022 21:41:49 +0000 > From: Gregory Heytings > cc: Gerd Möllmann , larsi@gnus.org, > 56393@debbugs.gnu.org > > I reverted all commits on the feature branch, and started anew. The > feature has now been moved into the bowels of the display engine, and it > works even better. Thanks. A few comments to what I see on the branch (apologies if these are premature because you are still working on the code): . init_iterator is also called to display strings, and I'm not sure I understand what you intended to do in that case, since BEGV/ZV are not relevant to strings. . The WITH_NARROWED_BEGV macro is IMO awkward and not very convenient to use in C. For starters, it cannot accommodate multi-line code, except via the 'do { ... } while(0);' kludge, which I think will make the code less readable. It also should set up an unwind-protect handler, so that any non-local exit from the code will restore BEGV/ZV. So I think it will be better to have two separate functions (and a third one to unwind). . You currently only apply the "restriction" in a few places where the code calls functions like find_newline_no_quit. What about the rest of display code -- are you saying that it doesn't need to be "restricted"? or do you intend to add that in the future? And what about restricting the Lisp code invoked via Vfontification_functions (i.e. jit-lock.el)? . Don't we want to "restrict" ZV as well? . I'm not sure the "restriction" should be computed relative to point: that might be OK for redisplaying a window, but for commands that use the display code the position with which we call init_iterator and start_display might be a better/safer alternative, because that position could be very far from point. In any case, get_narrowed_begv receives a pointer to a window, so I think it should use the window-point, not PT, which is the value of point in the current buffer. . The 10000 number should at least be a C macro if not a variable exposed to Lisp. . The maximum number of characters in a window could be more than just its width multiplied by its height, because the window could use smaller fonts than the default. I think it is safer to use the dimensions of the window's glyph matrix for this, because there couldn't possibly be more characters in the window than the glyph matrix allows, and we always resize the matrix when we need to display more characters. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 04:24:42 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 08:24:42 +0000 Received: from localhost ([127.0.0.1]:33689 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA5la-00063M-0m for submit@debbugs.gnu.org; Sat, 09 Jul 2022 04:24:42 -0400 Received: from heytings.org ([95.142.160.155]:58862) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA5lY-00063C-EQ for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 04:24:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657355079; bh=hGf/b2ED3wtgrUWaCU5XHPl1NoV2wpbqxTqFBO6Tg4g=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=OtLydW04Rcaf6zZVihE5ld2kh4bT3qa4tLo78wTiH8pKynA1vBUsqO0EmmKtLsYpT uUO8PfSiwCAy3SMfNpEmCnfNPDac3E2LJ87LuDG2HN3RVl9qMgyf+Sym/CwZF0Wwey F7fI4xkgYI7IXwJ8iCnWCdayf+vgvlgPV0rHeUJ74W3vDeDt6WGW7ZbyW95ub8G3AK maNpBoC77eZm77I7eSEYIIu+q7GIPxJ+9R4m+xNKmo9oaKN6VfzqixbeESUJ1d3mlv R9xvlMMCrpj8cD9az92VSHK/lZXftyhXEesFe5pFbePcpf0rqC44nNuBL6KjWLCKG6 xMCiUNicjUhRg== Date: Sat, 09 Jul 2022 08:24:38 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83tu7q3iz5.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > I see that you decided to produce the "restriction" in init_iterator, > which would, of course, work, but IMO it has a disadvantage: > init_iterator is called a lot, so computing the "restriction" in it > should be very fast. Your current implementation _is_ fast, but AFAIU > its result is that we _always_ restrict the display code from seeing the > entire buffer, even if there are no long lines in it, which I think is > unnecessary. The original implementation only did that when it detected > a long line, and I think we should keep it that way, because the > "restriction" will inevitably have some negative effects, however minor, > on what we display. > I don't think we can detect long lines reliably enough. The problem of the original implementation is what Gerd mentioned: "What happens when evaluating an expression in *scratch* that returns a really large result? Or maybe in a Shell buffer some large output?" and similar cases, like inserting the result of a shell command in the buffer. Detecting long lines in insert-file-contents is not enough to make sure that Emacs will always continue to behave normally when a long line is on display. Note that we the current implementation does not always restrict display code from seeing the entire buffer, it does so in a few well-chosen places, everywhere else the display code sees the entire buffer. > > My proposal is to calculate the "restriction" in start_display. That > function is called by all the commands/functions that use the display > code outside of redisplay proper. (I think one or two such places call > init_iterator directly, but we can either handle them specially or > change them to use start_display.) In addition, to prevent even > start_display doing more than necessary, redisplay_window should compute > the restriction for the window that is about to be redisplayed, and > store the values in 'struct window'; then init_iterator, if called > inside redisplay, will then simply reuse those values, and start_display > will refrain from computing them anew. (To know whether some code is > invoked by redisplay, test the value of the global variable > redisplaying_p.) This way, we could make the "restriction" smarter, and > only apply it when needed. Another advantage is that this way the > "restriction" will be the same for all the code that is called by > redisplay_window, directly or indirectly, which I think is safer than > having different "restrictions" computed by different functions. > Okay, thanks. I'll try to do that. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 04:56:20 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 08:56:21 +0000 Received: from localhost ([127.0.0.1]:33731 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6GC-0006u4-LX for submit@debbugs.gnu.org; Sat, 09 Jul 2022 04:56:20 -0400 Received: from heytings.org ([95.142.160.155]:58894) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6GB-0006tw-DN for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 04:56:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657356977; bh=yzKqjssAoj5r0RNqnqEfE3zApJqAabQslhHCnb6JwlI=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=x5u/tNFuH9ti3YPgf2tcqskMaaKtHuuoc7niLAicYDyo+G8Cyl9o+qWMtq0sNHawU F6tCNQ9ieBYGRuUU/IfIGoNWCPGmUvfdHxW+JFtV4J9W/UlzPu4adc4dBK/cLT+Nve 1ucVY59EqERfQwR0XjpxN6j3y1+6dH4QRCTNjJU7/ekj5O4IFp0YeoPQujCI02JYBn VDDjPcUScWQuxqHVNH5O186kBRxR+69Vtb3ZpGMIgJl3wrBHRMNr4XIHunyLpMPYA0 dXdKUkhM2e3KeoyzGN+AwIxu3UOgOiNPmlo/oSkOt7T5oBsp9/BWnTdxwkixRjqW9y 0tHXWIG6UpBYA== Date: Sat, 09 Jul 2022 08:56:16 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83sfna3gzq.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Thanks. A few comments to what I see on the branch (apologies if these > are premature because you are still working on the code): > I am not, as far as I see the code is in a near-final state, except that I will of course try to take your (and other's) comments into account. > > . init_iterator is also called to display strings, and I'm not sure I > understand what you intended to do in that case, since BEGV/ZV are not > relevant to strings. > I guess moving the calculation of the restriction into start_display should fix that problem. Then it->narrowed_begv will be 0 for strings. > > . The WITH_NARROWED_BEGV macro is IMO awkward and not very convenient to > use in C. For starters, it cannot accommodate multi-line code, except > via the 'do { ... } while(0);' kludge, which I think will make the code > less readable. It also should set up an unwind-protect handler, so that > any non-local exit from the code will restore BEGV/ZV. So I think it > will be better to have two separate functions (and a third one to > unwind). > Hmmm... I'll see what I can do. (But I don't understand why you write that it cannot accomodate multi-line code: you can write "WITH_NARROWED_BEGV (frobnicate (foo); frobnicate (bar));".) > > . You currently only apply the "restriction" in a few places where the > code calls functions like find_newline_no_quit. What about the rest of > display code -- are you saying that it doesn't need to be "restricted"? > or do you intend to add that in the future? > Yes, that's what I'm saying. You asked me to make sure that the restriction would have the least possible impact, which I did. > > And what about restricting the Lisp code invoked via > Vfontification_functions (i.e. jit-lock.el)? > That would mean that some Lisp code would not have access to the entire buffer, which you wanted to avoid. > > . Don't we want to "restrict" ZV as well? > It's not necessary, no. Doing so has no performance impact AFAICS. > > . I'm not sure the "restriction" should be computed relative to point: > that might be OK for redisplaying a window, but for commands that use > the display code the position with which we call init_iterator and > start_display might be a better/safer alternative, because that position > could be very far from point. In any case, get_narrowed_begv receives a > pointer to a window, so I think it should use the window-point, not PT, > which is the value of point in the current buffer. > Okay, I'll do that. > > . The 10000 number should at least be a C macro if not a variable > exposed to Lisp. > Okay. > > . The maximum number of characters in a window could be more than just > its width multiplied by its height, because the window could use smaller > fonts than the default. I think it is safer to use the dimensions of > the window's glyph matrix for this, because there couldn't possibly be > more characters in the window than the glyph matrix allows, and we > always resize the matrix when we need to display more characters. > Okay. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 05:13:53 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 09:13:53 +0000 Received: from localhost ([127.0.0.1]:33741 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6XB-0007LA-HK for submit@debbugs.gnu.org; Sat, 09 Jul 2022 05:13:53 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39004) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6XA-0007Ky-1N for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 05:13:52 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38596) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA6X4-0004lb-FD; Sat, 09 Jul 2022 05:13:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=SoTgVwryucJs/CGAu67bLyEA7ExZCS1UdaSKRCPUmbA=; b=Bxg/IGu0rluFqzfIqj0F FiyEk37cWqbFcAv5PiiNvS1TOlogiA7B8VNutjAXNEvdM885DPBaq9suoH7dGi074tyHh6LjmKviI N0Sg5YiQT2VP4eb94/8gnLWLd+9FDUCa0uh9NNjzRPvHclOnnrIuUdzEdWODWsOrbGPULzgF+X7s3 Els7HLbhB2phz++sSvSVkjoZ+R4KAurV4hPguPuTdQ5X8Gzhiv4g49xlXeMbTveGd3av5OIWGEKT6 WO2QKpWOkyZnUVel6EDXo3F1xg9CXlUWml0NT0HcM2bAN5sHc1CuAuULPT12MgSlAGW1K27XKQgoP YLiWKNdFMbIpgQ==; Received: from [87.69.77.57] (port=1899 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA6Wz-0000Wk-L1; Sat, 09 Jul 2022 05:13:45 -0400 Date: Sat, 09 Jul 2022 12:13:35 +0300 Message-Id: <83pmie3ayo.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 08:24:38 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 08:24:38 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, Gerd Möllmann , > 56393@debbugs.gnu.org > > I see that you decided to produce the "restriction" in init_iterator, > > which would, of course, work, but IMO it has a disadvantage: > > init_iterator is called a lot, so computing the "restriction" in it > > should be very fast. Your current implementation _is_ fast, but AFAIU > > its result is that we _always_ restrict the display code from seeing the > > entire buffer, even if there are no long lines in it, which I think is > > unnecessary. The original implementation only did that when it detected > > a long line, and I think we should keep it that way, because the > > "restriction" will inevitably have some negative effects, however minor, > > on what we display. > > I don't think we can detect long lines reliably enough. The problem of > the original implementation is what Gerd mentioned: "What happens when > evaluating an expression in *scratch* that returns a really large result? That problem doesn't exist when you run the detection code at the beginning of redisplay (either in redisplay_window or in start_display or in init_iterator), because by the time redisplay runs the buffer text was already updated by the insertion that is the result of the evaluation. > Or maybe in a Shell buffer some large output?" and similar cases, like > inserting the result of a shell command in the buffer. Detecting long > lines in insert-file-contents is not enough to make sure that Emacs will > always continue to behave normally when a long line is on display. I agree, but doing this in insert-file-contents was not what I had in mind. > Note that we the current implementation does not always restrict display > code from seeing the entire buffer, it does so in a few well-chosen > places, everywhere else the display code sees the entire buffer. And this is enough to make Emacs responsive? If yes, that's great. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 05:20:51 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 09:20:51 +0000 Received: from localhost ([127.0.0.1]:33747 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6dv-0007WM-BS for submit@debbugs.gnu.org; Sat, 09 Jul 2022 05:20:51 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39920) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6du-0007WA-BG for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 05:20:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38640) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA6do-0005tS-Kw; Sat, 09 Jul 2022 05:20:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=RvUWXrWStmGD+CN81TMRlRV7tZaFi602KHdNJNYH20o=; b=OOA8Lr7bjVA6 0IH/GJU2EZdgcNZAIQ9BmAMJ80vk3YIa30zY3PCgkFP93pDeRDuLNkO6zqjEv9CD6pksYM/HLtyid BBeeUQuJclHTEfo34scWDrgkCBCVKN1W6kTkiWQhjpz32uzthBompk+TP2rvGv3S0j4IpMy2L5vKQ W3KilMfFnqmuamYE+wqaqi4csT/bArZNipymrFbNYICkATT7CjiUSEXoxKo7TGP1tCiVDdJ1xZ/aY 0AL6a03VLnPmJZZQ4iDrrshcQ7nY6WQWDNDln1yw/U44Uxg7T8iPmt1DNRNkiIRsavEh65PYL/LPx uG3WWB+7pCUB8mMePKXllQ==; Received: from [87.69.77.57] (port=2325 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA6do-0000jV-3o; Sat, 09 Jul 2022 05:20:44 -0400 Date: Sat, 09 Jul 2022 12:20:38 +0300 Message-Id: <83o7xy3amx.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 08:56:16 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 08:56:16 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > . init_iterator is also called to display strings, and I'm not sure I > > understand what you intended to do in that case, since BEGV/ZV are not > > relevant to strings. > > I guess moving the calculation of the restriction into start_display > should fix that problem. Then it->narrowed_begv will be 0 for strings. OK. It wasn't celar to me what you intended to do, because find_automatic_composition can be also invoked on strings. > > . The WITH_NARROWED_BEGV macro is IMO awkward and not very convenient to > > use in C. For starters, it cannot accommodate multi-line code, except > > via the 'do { ... } while(0);' kludge, which I think will make the code > > less readable. It also should set up an unwind-protect handler, so that > > any non-local exit from the code will restore BEGV/ZV. So I think it > > will be better to have two separate functions (and a third one to > > unwind). > > > > Hmmm... I'll see what I can do. (But I don't understand why you write > that it cannot accomodate multi-line code: you can write > "WITH_NARROWED_BEGV (frobnicate (foo); frobnicate (bar));".) What if the multi-line code includes an if clause or a for loop with just one line in their bodies? > > . You currently only apply the "restriction" in a few places where the > > code calls functions like find_newline_no_quit. What about the rest of > > display code -- are you saying that it doesn't need to be "restricted"? > > or do you intend to add that in the future? > > Yes, that's what I'm saying. You asked me to make sure that the > restriction would have the least possible impact, which I did. If this is enough, then it's great. I'm just asking myself how come font-lock, for example, no longer slows things down as it did before? Do you understand why? From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 05:23:38 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 09:23:38 +0000 Received: from localhost ([127.0.0.1]:33752 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6gb-0007b0-Rb for submit@debbugs.gnu.org; Sat, 09 Jul 2022 05:23:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40354) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6gT-0007ae-TY for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 05:23:37 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38664) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA6gO-0006Cz-MP; Sat, 09 Jul 2022 05:23:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=nbszrRJkED0Dw+IUE89d5IqZjRCksZe5BsMOqRmWb88=; b=ijOflgN0I1AE zsT3kCBcMipcU9xxOjrfZ9wUNesUT+4BWZMfwq1ErdSc+RYJ6P7aAKwfP9vU3gJ6jKtgmEUEiwgwG udtmBDoH2hWJC5pPOEIUs7lxWa/gaqYoWlzlbC3Atvrs7R+yQwdVfyTO4BYvl32PnL4KF/Iv6rWAV bkJR/ysN6qO3O/ETgQbJLh9fZaCC974UAfeDBvMEDqQvWRvggQguk1TkMSTnzgauO5dUtwX3h6IZT RkzPqEkIcVV1UUpRI5Y3L/m5Ca+oCpTdagICKbUavkYJTsQlZUgHOn8/xMIlAzTwMFRByGeE+lWeC wFEO2DYmqgvdzt/zsTkmgA==; Received: from [87.69.77.57] (port=2491 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA6gN-00025O-VA; Sat, 09 Jul 2022 05:23:24 -0400 Date: Sat, 09 Jul 2022 12:23:18 +0300 Message-Id: <83mtdi3aih.fsf@gnu.org> From: Eli Zaretskii To: gregory@heytings.org In-Reply-To: <83o7xy3amx.fsf@gnu.org> (message from Eli Zaretskii on Sat, 09 Jul 2022 12:20:38 +0300) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > Date: Sat, 09 Jul 2022 12:20:38 +0300 > From: Eli Zaretskii > > > I guess moving the calculation of the restriction into start_display > > should fix that problem. Then it->narrowed_begv will be 0 for strings. > > OK. It wasn't celar to me what you intended to do, because ^^^^^ I meant "clear" here, sorry for the typo. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 05:30:39 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 09:30:39 +0000 Received: from localhost ([127.0.0.1]:33757 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6nP-0007mh-L9 for submit@debbugs.gnu.org; Sat, 09 Jul 2022 05:30:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41446) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6nO-0007mO-Cd for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 05:30:38 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38710) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA6nI-00047x-U6; Sat, 09 Jul 2022 05:30:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=yfb8D8JeR6Djc3fQCXOPL5QrEQqw5cu2avRyoUgVNdI=; b=hDbDVmkYwR+K bopb/cfvzFHYToh/xwS8DidszrKwXX+zXB/TC8KJRja/AriC76bW0c/IzgZtT1nQ2Qtxo09YUFXLp zt29Q793atRsfC3N6RT6RQjdAx4sQaHZCKZdGIxOM+uUMzkaHWn6QX4wox/YWX7deKmrs8Gj01oe/ D5Hyfd5HuZ+fKiJgCF//OIT5ekFlCrhcELQldZ1+gGxEsFrxn+FfpK4zirWWzq4/hBqaAT73mGh1c 9ufaokAXGEaX/RpdwsLxoUUFH1mjq+sdxJiVOBzzvlBjgY6i71yASBUwOleYfOfeh492dzvsYIgPn WhVnWYNx6Cx/7/FD6vmk6g==; Received: from [87.69.77.57] (port=2908 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA6mw-0008RW-TD; Sat, 09 Jul 2022 05:30:31 -0400 Date: Sat, 09 Jul 2022 12:30:05 +0300 Message-Id: <83let23a76.fsf@gnu.org> From: Eli Zaretskii To: gregory@heytings.org In-Reply-To: <83o7xy3amx.fsf@gnu.org> (message from Eli Zaretskii on Sat, 09 Jul 2022 12:20:38 +0300) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > Date: Sat, 09 Jul 2022 12:20:38 +0300 > From: Eli Zaretskii > > > > . The WITH_NARROWED_BEGV macro is IMO awkward and not very convenient to > > > use in C. For starters, it cannot accommodate multi-line code, except > > > via the 'do { ... } while(0);' kludge, which I think will make the code > > > less readable. It also should set up an unwind-protect handler, so that > > > any non-local exit from the code will restore BEGV/ZV. So I think it > > > will be better to have two separate functions (and a third one to > > > unwind). > > > > > > > Hmmm... I'll see what I can do. (But I don't understand why you write > > that it cannot accomodate multi-line code: you can write > > "WITH_NARROWED_BEGV (frobnicate (foo); frobnicate (bar));".) > > What if the multi-line code includes an if clause or a for loop with > just one line in their bodies? This also requires to remember NOT to use a semi-colon at the end of the last line, which is problematic. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 05:32:49 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 09:32:49 +0000 Received: from localhost ([127.0.0.1]:33761 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6pV-0007pw-1q for submit@debbugs.gnu.org; Sat, 09 Jul 2022 05:32:49 -0400 Received: from heytings.org ([95.142.160.155]:58950) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6pT-0007pn-GK for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 05:32:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657359166; bh=6ujX+QJ7mBuMuk2lMiNUNQb9tNOoABFw2B7uG1obk9Y=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=ixEFNULZ0wdEb+/KQZ7njgQjCdzYqSnWz7uVE/D7V7OFWHHRI+Ltmu9ifXxMcWy2X ryFa2Q7AxM1gA0Kya6ExE937UhWI3EhK2/O5AhURS2uDUASxY4SXrJAwXszLUZolwL 1cOuvNdcQ+OBZGvyaHQcpF7uNbByzF48V12VuN/JAs5YgmEkzsT+QhLZHz+a60Itxg oHy/sv2/CTGFQFsmh94BCkLrbCp+1vzWYd7uDmI+WtFGBMsnIsfJtulXg/4VAzPibS M8N6UhH2LCjU20B+I7hRQXlqGB5LhRVs0ogOXit3Qz4PB1izd4spoOIe+xdZ7WqxjU KBPnBWrwdIR/A== Date: Sat, 09 Jul 2022 09:32:45 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83mtdi3aih.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83mtdi3aih.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="G8ly1oVK2H" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --G8ly1oVK2H Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable >> OK. It wasn't celar to me what you intended to do, because > ^^^^^ > I meant "clear" here, sorry for the typo. > It was clear that it was "clear". =F0=9F=98=89 --G8ly1oVK2H-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 05:39:42 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 09:39:43 +0000 Received: from localhost ([127.0.0.1]:33766 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6wA-0007zi-Mu for submit@debbugs.gnu.org; Sat, 09 Jul 2022 05:39:42 -0400 Received: from heytings.org ([95.142.160.155]:58962) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA6w8-0007zY-Ri for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 05:39:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657359580; bh=Rkct9loFl+s72Akkrh/QzPtfS0JPbdMmrxsraOgMn1g=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=CbrEQRPoPjK0gZe7ObzBFcL4PeV9nVlKFEdCbtIAse7uDRCIoefrqFxDJdVeYZe9Q Rrbb6beGIB90mU9y4k6yCmLkZpQ7e+JOWpmF0hVcedJ32lXgzLW3Ygz4kpNRvIND6G ees5z3NRoKg7wHfoLD3owCffoz/TkjB4Dqmv7q8uJFxvHyaKUi0cp5zCagywcw69PB I9DCXbVO5+88B1oD9mscLByO2qEjosYHrC5wikAqxLtVgCu4PW9/UkW9/dEx9AVNWy YLRK7PK8Uu7m9F0UpXdpMmHzZ7w0ITxdpGx7MF5qpFz9R/fNQbAaaTOXYNHx0mQpC4 GlEXKKRAmIxCA== Date: Sat, 09 Jul 2022 09:39:39 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83pmie3ayo.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> I don't think we can detect long lines reliably enough. The problem of >> the original implementation is what Gerd mentioned: "What happens when >> evaluating an expression in *scratch* that returns a really large >> result? > > That problem doesn't exist when you run the detection code at the > beginning of redisplay (either in redisplay_window or in start_display > or in init_iterator), because by the time redisplay runs the buffer text > was already updated by the insertion that is the result of the > evaluation. > Wouldn't running such detection code at the beginning of each redisplay be too expensive? >> Note that we the current implementation does not always restrict >> display code from seeing the entire buffer, it does so in a few >> well-chosen places, everywhere else the display code sees the entire >> buffer. > > And this is enough to make Emacs responsive? If yes, that's great. > It is. On master C-p at the end of dictionary.json loaded "literally" takes 27 seconds. Now the effect is immediate. On master inserting a character there takes several (about 5) seconds, now the effect is immediate. On master you cannot even move to the end of hugedictionary.json (the 1 GB file) for example with C-e (or perhaps you can, but I gave up after a few minutes). Now you can move there instantly, and the effect of commands there is immediate, too. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 05:49:39 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 09:49:39 +0000 Received: from localhost ([127.0.0.1]:33800 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA75n-0008IN-Dz for submit@debbugs.gnu.org; Sat, 09 Jul 2022 05:49:39 -0400 Received: from heytings.org ([95.142.160.155]:58980) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA75m-0008IF-1g for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 05:49:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657360176; bh=ofhDUE1SkbRe+YuFm0Rry4zMjY2yXfEmsKL4SACCrQ0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=gA2k++iXEOAmpctB6AljiSGRH7mWvZz61Stmy27Eymgpiwu+AFhjGihAFg8yRFPXE qHreetPwIdXd57M/iBXIlfIM25RQ3/3cy+h62zyooUZBzYx1xaCQYMszR9qwhtvb89 K20l3acFSlov6pbagQLnlkf3+4vcnQT7shcLlaTEFEAqL6thRp8KSD4sf1g6xVf3do uoeLQB1CbGz3BLGY4wKSq4izkgmAhZyqdpXBgPSUpSZS0AP298GpA1GAS5QG4p5Yjq IuRcvIPFLXKmXci8U0Y2VA0mtqay+lWPcnHSQorm88fjbf2ohgGabR5OF5r4wNYxVj biVyQS2WY75dw== Date: Sat, 09 Jul 2022 09:49:36 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83o7xy3amx.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >>> . You currently only apply the "restriction" in a few places where the >>> code calls functions like find_newline_no_quit. What about the rest >>> of display code -- are you saying that it doesn't need to be >>> "restricted"? or do you intend to add that in the future? >> >> Yes, that's what I'm saying. You asked me to make sure that the >> restriction would have the least possible impact, which I did. > > If this is enough, then it's great. I'm just asking myself how come > font-lock, for example, no longer slows things down as it did before? Do > you understand why? > Font lock does slow things down, see the NEWS entry. But it also slows things down on much smaller files (see the long-line-excerpt.xml file I sent you). As I said, to me the slowdown of font locking is a separate problem, as is shown by the fact that turning it off removes the remaining slowdowns in many/most cases. There are in fact four separate problems here: 1. slowdowns caused by long lines, 2. slowdowns caused by multibyte characters in long lines (which are not solved by solving 1), 3. slowdowns caused by font locking, 4. slowdowns caused by major and minor modes (pre and post-command hooks and the like). This bug "only" solves 1 and 2. And as I said, I can try to look at 3 if you want, but not now. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 05:59:18 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 09:59:18 +0000 Received: from localhost ([127.0.0.1]:33813 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA7F7-00005y-Nw for submit@debbugs.gnu.org; Sat, 09 Jul 2022 05:59:18 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45604) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA7F5-00005m-U3 for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 05:59:16 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38884) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA7F0-0004hN-5n; Sat, 09 Jul 2022 05:59:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=5JxL/FwJh/8EaZV+BimQsQpJtxCHXEkGyiwy/6rdJO4=; b=WuYg0UzU8XDk 0tNS8g0mlgJv9uG+o21OURvk2LXHXgchrN6Zx7xnwBZg9XbAutvz87vf7bMc6XLyHUtX3RLDV0/8d a9Wz+GjCBxEojb4e/kQC9y+WPlh8d0+J3tbFe3Nh+S0wCZhK2Vtr88fUC91sGkAkRNzYgXa1sP/Uh IYbRQnpZ3NIWT4SIFwHuiThZYpq62i9VgzR56VvWKXkDbOVUYvIlJxEFXL0viXhGwJJeQbqGRtrnz OSbs9RrxkSUn4BSCkPYOy+n5JjRePt09J6yPrpxF7kPt6Dn0e+oTVnqL4pd6U444R55KHskjYFLLA f5teyNXIoag6y2NlNb8Cdw==; Received: from [87.69.77.57] (port=4841 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA7Ez-0001d9-7L; Sat, 09 Jul 2022 05:59:09 -0400 Date: Sat, 09 Jul 2022 12:59:01 +0300 Message-Id: <83k08m38uy.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 09:39:39 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 09:39:39 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > >> I don't think we can detect long lines reliably enough. The problem of > >> the original implementation is what Gerd mentioned: "What happens when > >> evaluating an expression in *scratch* that returns a really large > >> result? > > > > That problem doesn't exist when you run the detection code at the > > beginning of redisplay (either in redisplay_window or in start_display > > or in init_iterator), because by the time redisplay runs the buffer text > > was already updated by the insertion that is the result of the > > evaluation. > > > > Wouldn't running such detection code at the beginning of each redisplay be > too expensive? I don't think so. find_newline1 is very fast, and if we call it once for every window, it shouldn't be a problem. Of course, only actually trying that will tell if I'm right or am missing something. And maybe this is not needed at all if restricting find_newline_no_quit is enough to solve the problem. > >> Note that we the current implementation does not always restrict > >> display code from seeing the entire buffer, it does so in a few > >> well-chosen places, everywhere else the display code sees the entire > >> buffer. > > > > And this is enough to make Emacs responsive? If yes, that's great. > > > > It is. On master C-p at the end of dictionary.json loaded "literally" > takes 27 seconds. Now the effect is immediate. On master inserting a > character there takes several (about 5) seconds, now the effect is > immediate. On master you cannot even move to the end of > hugedictionary.json (the 1 GB file) for example with C-e (or perhaps you > can, but I gave up after a few minutes). Now you can move there > instantly, and the effect of commands there is immediate, too. That's awesome, thanks. I guess we will only need more measures if some situations are reported where this is not fast enough, or causes some other problems. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 06:01:45 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 10:01:45 +0000 Received: from localhost ([127.0.0.1]:33818 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA7HV-0000Bj-8P for submit@debbugs.gnu.org; Sat, 09 Jul 2022 06:01:45 -0400 Received: from eggs.gnu.org ([209.51.188.92]:46044) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA7HT-0000BY-VE for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 06:01:44 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38940) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA7HN-0007OO-Mn; Sat, 09 Jul 2022 06:01:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=uSDPXH/AEfpnOUEeVjVJkLM/RpW7uvTDr9tzp0fhyTM=; b=akMFnTw/FjP/ R8fUsiI+i5Hyt31zKYh4v+V+B+8B/XNrYrXe/8Pt48+QpTAUjdD14enc+CwYkYBE4OBdFxir5e+zZ 2CNIvXI2aeDh2DGbRzywGR3tCuI969j+HHKi1tU/lmg2gbJJYPWZrjGxYytUr21+6dl//g1MhIhMa mLVhbnqOJAL8VtjuRlwlBlYEdMSouwfvy9QmmA46VYg6WQnVcFJdsnw+wqPpqdgnMooQKgVC0/DRy oiImvS9Xb+eHomnRoWtb1+274yUplUtVtUhiJNz6AqCk8YstXh6q4IO8y/+9HwtGzDLzMslqASpjB HLBLIoNef7HgU6vqVDCf8A==; Received: from [87.69.77.57] (port=4991 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA7HM-0002lh-FB; Sat, 09 Jul 2022 06:01:37 -0400 Date: Sat, 09 Jul 2022 13:01:30 +0300 Message-Id: <83ilo638qt.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 09:49:36 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 09:49:36 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > If this is enough, then it's great. I'm just asking myself how come > > font-lock, for example, no longer slows things down as it did before? Do > > you understand why? > > > > Font lock does slow things down, see the NEWS entry. But it also slows > things down on much smaller files (see the long-line-excerpt.xml file I > sent you). As I said, to me the slowdown of font locking is a separate > problem, as is shown by the fact that turning it off removes the remaining > slowdowns in many/most cases. There are in fact four separate problems > here: > > 1. slowdowns caused by long lines, > > 2. slowdowns caused by multibyte characters in long lines (which are not > solved by solving 1), > > 3. slowdowns caused by font locking, > > 4. slowdowns caused by major and minor modes (pre and post-command hooks > and the like). > > This bug "only" solves 1 and 2. And as I said, I can try to look at 3 if > you want, but not now. I'm asking whether applying the "restriction" where we call Vfontification_functions from the display engine won't also solve 3. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 06:20:55 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 10:20:55 +0000 Received: from localhost ([127.0.0.1]:33852 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA7a2-0000ei-KA for submit@debbugs.gnu.org; Sat, 09 Jul 2022 06:20:54 -0400 Received: from heytings.org ([95.142.160.155]:59026) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA7a0-0000ea-Qw for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 06:20:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657362051; bh=/pJrEYmkZLNxKMNGppSfJ98cKFvFH0jAF1PUkw8eMqY=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=bbkWROC8HReaZi81172ByNnIfHHGMQw+UQ7WnbIoix62R7epmdhFVorK/lfpiN/nv tkJYlcIsWD7BGo4BA88VIBROSxSHwIexnTqu1BNWSdllNlmJ+UZMrulul6NmJkJB3s YK/ryBEE2Hlr0PoYJMtD24IAqtWIfWToryylzk3AXgLRAMG2eU+78BN8j+pr/xnOuV 0nxy5Mf9PTDnOH2TJfS1c1Oi7eRd13NFStoz+oW1bEHSYZo/16HtM6ATp2p5pMWZL6 p6edR3qIP4MbdOdnb7dHwJujQz7IjgdNEaaZQQsvQ5h5MEO3pDlGUPJWR0C5HLO9Lq qKGB5v6KgLHCg== Date: Sat, 09 Jul 2022 10:20:51 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83k08m38uy.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > And maybe this is not needed at all if restricting find_newline_no_quit > is enough to solve the problem. > Indeed, that's what I think. > > That's awesome, thanks. I guess we will only need more measures if some > situations are reported where this is not fast enough, or causes some > other problems. > I don't think it's possible to make it faster. I forgot to mention that C-s works instantly, too. To anticipate one possible criticism: this feature comes at a (IMO) very little price, namely that inside long lines (and only inside long lines) line-move-visual does always not work as expected, point sometimes moves to another column (but in most cases does not). That's the only compromise I did, and it is unavoidable. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 06:41:40 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 10:41:41 +0000 Received: from localhost ([127.0.0.1]:33894 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA7u8-0001LH-K1 for submit@debbugs.gnu.org; Sat, 09 Jul 2022 06:41:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:58558) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA7u6-0001L3-82 for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 06:41:38 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40260) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA7u0-00031u-Gt; Sat, 09 Jul 2022 06:41:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=bn5I7ekKGrbKQ7I1n1E8lRLjuALxo5b+5UvQALyKHK4=; b=MV+puccfB0u6 awJEAn422p5w4l0zltV+uYima4GZNE1FpXUzqBwGTQh4GPLWNvDknUGfDzGJipwtXvwD8xtLUYzdh Kfdp15BlGd3KhcVSauBEj6OBnJ+xuF81RNEIFnBT9D04PJO0rhG9gQAqLDO2yBzMyQLxeJdzTOAQU OHjOCqaFlzh9kzXrlrsJxVW7WizfjEZbnvNr/eWuNC2nwD9QG52gPS9/Nhhj/oWPZse+tX084+G/f rKZAfBXQdt5m2yXLS+b66o1xHVxutlW8Q4cFw92PSrEia5OWAY26Q9ZIk2MugED0zVcVzOrvnd47B RIvrh+0aXw/xbT8CTvb4rg==; Received: from [87.69.77.57] (port=3451 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA7u0-0006W6-0v; Sat, 09 Jul 2022 06:41:32 -0400 Date: Sat, 09 Jul 2022 13:41:24 +0300 Message-Id: <83h73q36wb.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 10:20:51 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 10:20:51 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > That's awesome, thanks. I guess we will only need more measures if some > > situations are reported where this is not fast enough, or causes some > > other problems. > > > > I don't think it's possible to make it faster. I forgot to mention that > C-s works instantly, too. > > To anticipate one possible criticism: this feature comes at a (IMO) very > little price, namely that inside long lines (and only inside long lines) > line-move-visual does always not work as expected, point sometimes moves > to another column (but in most cases does not). That's the only > compromise I did, and it is unavoidable. I'm playing with the branch, and I see some problems. I fixed a couple, but that's just a band-aid, I think. Try this: emacs -Q C-x C-f src/xdisp.c RET M-> C-u 37100 C-p This signals an error "Beginning of buffer". And if I use M-v instead of C-p, I don't get an error message, but I don't get to the line I wanted, either: it silently stops much earlier. I think this is because find_newline_no_quit is not allowed to move back far enough. Actually detecting whether the buffer has long lines will help to avoid this in "normal" files, but I'm not sure yet what to do with buffers that really have long lines, or whether it matters. Also, are you running with assertions enabled? If not, please configure --enable-checking='yes,glyphs', because some problems are detected much earlier then (the ones I fixed were such problems). From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 06:50:30 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 10:50:30 +0000 Received: from localhost ([127.0.0.1]:33898 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA82g-0001ai-Hw for submit@debbugs.gnu.org; Sat, 09 Jul 2022 06:50:30 -0400 Received: from heytings.org ([95.142.160.155]:59054) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA82e-0001aa-QZ for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 06:50:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657363827; bh=DOMnQ+HzktMkmaVyUjhAGqTWZqXcTK+89GTntTf02f0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=hqMXmKyO8HUlHiX+DHFym0nd/K17V2KvELfhYPBuXsNZTzE5UyF2ygwhzMS8EAYjd doTyvpnYasl3/Q5Bg+D1lS842/V38V8MhFEt5eepQ6T+oJr70DpIFsoZV0PL6BReWM WmMs5j0dnVuCQngqDTgsii1kiFKVfMuHDcyXwZJKwH4lkWjzMvlfNUzAX8LT3jUjwH AE41QAZ0ie2AhAr9MSVIiQgaoMWB13NZTDf6gWL4iEu80br8XR3GYH6Xsxg7X7Bp3w sNwIZywuk6lEc59Xs4RnAD7V1YjOit79e8Tq842CgKDtJLinW5xVtuU/fJ3KciUfBu 4oaxsWHc59FEw== Date: Sat, 09 Jul 2022 10:50:26 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83ilo638qt.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Font lock does slow things down, see the NEWS entry. But it also slows >> things down on much smaller files (see the long-line-excerpt.xml file I >> sent you). As I said, to me the slowdown of font locking is a separate >> problem, as is shown by the fact that turning it off removes the >> remaining slowdowns in many/most cases. There are in fact four >> separate problems here: >> >> 1. slowdowns caused by long lines, >> >> 2. slowdowns caused by multibyte characters in long lines (which are >> not solved by solving 1), >> >> 3. slowdowns caused by font locking, >> >> 4. slowdowns caused by major and minor modes (pre and post-command >> hooks and the like). >> >> This bug "only" solves 1 and 2. And as I said, I can try to look at 3 >> if you want, but not now. > > I'm asking whether applying the "restriction" where we call > Vfontification_functions from the display engine won't also solve 3. > It doesn't, see again the long-line-excerpt.xml file I sent you. It is only 30K long, which would be a typical size for a restriction, and editing that file is slow when font locking is on and fast when font locking is off. What I would do (but I'm pretty sure you wouln't agree with that) is to measure the time taken by fontification-functions in handle_fontified_prop, and whenever that time is above a certain threshold (say 0.25 or 0.5 seconds), to set fontification-functions to nil in that buffer. For example, if you load dictionary.json (with "y") and type C-e, fontification-functions take about 2 seconds to complete. But fontification-functions are not the only problem here. What I also observe is that, for example, moving in a fontified buffer takes (much) longer than moving in a non-fontified buffer. For example, in long-line.xml, vertical-motion takes about 40 ms backward and 10 ms forward in a non-fontified buffer, and about 180 ms backward and 40 ms forward in a fontified buffer. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 06:54:39 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 10:54:39 +0000 Received: from localhost ([127.0.0.1]:33903 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA86h-0001gs-3O for submit@debbugs.gnu.org; Sat, 09 Jul 2022 06:54:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:32942) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA86f-0001gf-Qk for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 06:54:38 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40658) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA86a-0004qs-AT; Sat, 09 Jul 2022 06:54:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=7NXs2afs7MW6T5hc3u1afwHAS+h6fPiTsK7Yi+/mxQM=; b=QjEsLZKJv5kg e2HV6kyPjNkmLlEHBjArg6yk+w8lRJ1bS8FgjSV953fAhUEvSPgod6jBXh5cypBiPv39SU9hejAG8 7Dp/zo4SQh8N3dU2iANGZyw+bQfidcwVP1F0nE98zJwIeStVIeURUSS7XwWtCj8k7LPxkbGqe4tfs QC0naRQnQXf8BgJRRTC+H3VaUpgPoVl/oonp24pze1m/eMqkuJCKmd3M9DxmfqpFVhqSxZNvUelAi +4gFsbS2Xuoftx7ZMAtW574N4gWp5lpWCMlhtETY70beK9NYg3kHgD2niRsDqOIyDRATSOuQ9VWwI mWxE7EQ+rYI6Om4fBZo6sw==; Received: from [87.69.77.57] (port=4242 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA86Z-0004tG-Pa; Sat, 09 Jul 2022 06:54:32 -0400 Date: Sat, 09 Jul 2022 13:54:24 +0300 Message-Id: <83fsja36an.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 08:56:16 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 08:56:16 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > . I'm not sure the "restriction" should be computed relative to point: > > that might be OK for redisplaying a window, but for commands that use > > the display code the position with which we call init_iterator and > > start_display might be a better/safer alternative, because that position > > could be very far from point. In any case, get_narrowed_begv receives a > > pointer to a window, so I think it should use the window-point, not PT, > > which is the value of point in the current buffer. > > Okay, I'll do that. Here's one problem caused by using PT in get_narrowed_begv: emacs -Q C-x C-f src/xdisp.c RET C-x 2 M-> Now move the mouse pointer over the "other" window, the one which still shows xdisp.c at BOB, and turn the mouse wheel to scroll the window towards the end of the buffer. This segfaults: Thread 1 received signal SIGSEGV, Segmentation fault. 0x01054f5c in get_visually_first_element (it=0x82d960) at xdisp.c:8667 8667 && (FETCH_BYTE (it->bidi_it.bytepos - 1) == '\n' (gdb) bt #0 0x01054f5c in get_visually_first_element (it=0x82d960) at xdisp.c:8667 #1 0x010562b8 in next_element_from_buffer (it=0x82d960) at xdisp.c:9125 #2 0x01052b35 in get_next_display_element (it=0x82d960) at xdisp.c:7762 #3 0x0105704a in move_it_in_display_line_to (it=0x82d960, to_charpos=-1, to_x=0, op=MOVE_TO_X) at xdisp.c:9550 #4 0x01059bcb in move_it_to (it=0x82d960, to_charpos=-1, to_x=0, to_y=119, to_vpos=-1, op=3) at xdisp.c:10221 #5 0x01010aac in buffer_posn_from_coords (w=0x7c4ade8, x=0x82e90c, y=0x82e908, pos=0x82e920, object=0x82e938, dx=0x82e91c, dy=0x82e918, width=0x82e914, height=0x82e910) at dispnew.c:5539 #6 0x0117d5a6 in make_lispy_position (f=0x75fd018, x=make_fixnum(492), y=make_fixnum(427), t=1403593421) at keyboard.c:5532 #7 0x0117fae8 in make_lispy_event (event=0x1841100 ) at keyboard.c:6157 #8 0x01179e8d in kbd_buffer_get_event (kbp=0x82ee74, used_mouse_menu=0x82f43f, end_time=0x0) at keyboard.c:4241 #9 0x011721b4 in read_event_from_main_queue (end_time=0x0, local_getcjmp=0x82f190, used_mouse_menu=0x82f43f) at keyboard.c:2238 #10 0x011726d3 in read_decoded_event_from_main_queue (end_time=0x0, local_getcjmp=0x82f190, prev_event=XIL(0), used_mouse_menu=0x82f43f) at keyboard.c:2302 #11 0x01174d50 in read_char (commandflag=1, map=XIL(0xc000000007c46380), prev_event=XIL(0), used_mouse_menu=0x82f43f, end_time=0x0) at keyboard.c:2932 #12 0x0118d435 in read_key_sequence (keybuf=0x82f728, prompt=XIL(0), dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9947 #13 0x0116eeaf in command_loop_1 () at keyboard.c:1391 #14 0x01270266 in internal_condition_case (bfun=0x116e774 , handlers=XIL(0x90), hfun=0x116d742 ) at eval.c:1485 #15 0x0116e1e1 in command_loop_2 (handlers=XIL(0x90)) at keyboard.c:1132 #16 0x0126f0ed in internal_catch (tag=XIL(0xfe70), func=0x116e1aa , arg=XIL(0x90)) at eval.c:1208 #17 0x0116e14c in command_loop () at keyboard.c:1110 #18 0x0116d1a2 in recursive_edit_1 () at keyboard.c:719 #19 0x0116d440 in Frecursive_edit () at keyboard.c:802 #20 0x011683aa in main (argc=2, argv=0xa42a10) at emacs.c:2517 (gdb) p it.bidi_it.bytepos $1 = 1 (gdb) p it.bidi_it.charpos $2 = 1 (gdb) p bob $3 = 1160000 (gdb) p it.narrowed_begv $4 = 1160000 The problem is that narrowed_begv was computed using PT, which doesn't correspond to the window's point, and so the logic in get_visually_first_element backfires. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:09:45 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:09:45 +0000 Received: from localhost ([127.0.0.1]:33911 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8LI-00024F-Ub for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:09:45 -0400 Received: from heytings.org ([95.142.160.155]:59098) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8LG-000246-J2 for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:09:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657364981; bh=G6mqEmpWdRgiOd0XVhAjLyyQnujfthSCarX/u/uDwqQ=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=KQVBVtC2uiqOMWqmkhiRU0mxXOP7TS3sPqo7xDsfiOuAxq0tv52e1D79JoJYM6Mrd mTgEzRWCWE+1Ud8DGdilRPIaOTa4Dz8jBmoGh6F4A/yVJC+LOp+MtsnXiDo84QnWQi ThwCSyCaC9OuymAM1xSWcat85mejtd58olYvKjhf+o8XM3dR3zunQIuv6hn2smBpId 9/wKljTGf6eE9nnZQU03BuBQIhb9jGCauOhulUseKAmpdAp78Mq2PEPoNzASJqRxYq XkUIfjq/d8JzBX79nroYMBe7ltB1wZTmH/EhV6/cuaG8Muj7o7ky0S+fGkuivLLKn/ brjk5TjbDMMig== Date: Sat, 09 Jul 2022 11:09:40 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83h73q36wb.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> <83h73q36wb.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="q2yuLPmiFT" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --q2yuLPmiFT Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable > > I'm playing with the branch, and I see some problems. I fixed a > couple, > Thanks. I don't know why I forgot to check for a non-zero narrowed_begv=20 in find_automatic_composition. > > Try this: > > emacs -Q > C-x C-f src/xdisp.c RET > M-> > C-u 37100 C-p > > This signals an error "Beginning of buffer". > Nice. That's a recipe you concocted knowing the implementation details,=20 didn't you? =F0=9F=98=89 > > And if I use M-v instead of C-p, I don't get an error message, but I=20 > don't get to the line I wanted, either: it silently stops much earlier. > This I cannot reproduce, I can scroll through the whole buffer with M-v=20 without any visible problems. I tried to set the auto repeat rate to 50,= =20 and still do not see any problems. > > Also, are you running with assertions enabled? If not, please configure= =20 > --enable-checking=3D'yes,glyphs', because some problems are detected much= =20 > earlier then (the ones I fixed were such problems). > I'll do that. --q2yuLPmiFT-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:10:11 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:10:11 +0000 Received: from localhost ([127.0.0.1]:33916 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Lj-00025R-6i for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:10:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:36850) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Li-00025C-3q for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:10:10 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41220) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA8Lc-0002Ip-DS; Sat, 09 Jul 2022 07:10:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=rU/H/FQl36C8hfBroo3GzgX+swNhBC1n6SdspLEN0U4=; b=fDq9NCpM8Mpm XvS/6q0pdXzzRcrjo0Z/QcE6GFOFqr0nXoZAR2n69oij/vGq1bxKVxumiKfDsD4nbRU+yMrPltusL fYHpoYtwmYSs8Pv2zfvv/HozkTUNwtvDDdBzaPD830ODJ5cpaSwIZZcqRjiOfzFNrqS949XPCzvHA RlL3V7sCK70XKTWZDjKIkB/JkjHFtjVVRqvF/+nJT/7hsWm52Qy5t+J9vsFASGZRGbICZ+HT9AKJy ZRoT5+fPEIs2uElJX/xMpnHdqXrz2KxGPwDmyV7DSAl74jG4e1pOwfO+7sYLy4qOdlntyeWdtPY0L Hd4UrR/uGm8iis+Upvxu8A==; Received: from [87.69.77.57] (port=1216 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA8LX-0000PC-Mq; Sat, 09 Jul 2022 07:10:01 -0400 Date: Sat, 09 Jul 2022 14:09:51 +0300 Message-Id: <83edyu35kw.fsf@gnu.org> From: Eli Zaretskii To: gregory@heytings.org In-Reply-To: <83fsja36an.fsf@gnu.org> (message from Eli Zaretskii on Sat, 09 Jul 2022 13:54:24 +0300) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > Date: Sat, 09 Jul 2022 13:54:24 +0300 > From: Eli Zaretskii > > Here's one problem caused by using PT in get_narrowed_begv: > > emacs -Q > C-x C-f src/xdisp.c RET > C-x 2 > M-> Here's another: emacs -Q C-x C-f src/xdisp.c C-x *of After I type 'f' of "*of", Emacs segfaults: Thread 1 received signal SIGSEGV, Segmentation fault. 0x01054f5c in get_visually_first_element (it=0x82d210) at xdisp.c:8667 8667 && (FETCH_BYTE (it->bidi_it.bytepos - 1) == '\n' (gdb) bt #0 0x01054f5c in get_visually_first_element (it=0x82d210) at xdisp.c:8667 #1 0x010562b8 in next_element_from_buffer (it=0x82d210) at xdisp.c:9125 #2 0x01052b35 in get_next_display_element (it=0x82d210) at xdisp.c:7762 #3 0x0105704a in move_it_in_display_line_to (it=0x82d210, to_charpos=48949, to_x=0, op=(MOVE_TO_X | MOVE_TO_POS)) at xdisp.c:9550 #4 0x01059bcb in move_it_to (it=0x82d210, to_charpos=48949, to_x=-1, to_y=543, to_vpos=-1, op=10) at xdisp.c:10221 #5 0x01038364 in pos_visible_p (w=0x75fd230, charpos=48949, x=0x82e1fc, y=0x82e1f8, rtop=0x82e20c, rbot=0x82e208, rowh=0x82e204, vpos=0x82e200) at xdisp.c:1730 #6 0x010c9fcc in Fpos_visible_in_window_p (pos=XIL(0), window=XIL(0), partially=XIL(0x30)) at window.c:2000 #7 0x0127608d in funcall_subr (subr=0x173c8c0 , numargs=3, args=0x68b0240) at eval.c:3000 #8 0x012e9238 in exec_byte_code (fun=XIL(0xa000000005db8a1c), args_template=768, nargs=3, args=0x68b0200) at bytecode.c:809 #9 0x012765d1 in fetch_and_exec_byte_code (fun=XIL(0xa000000005e00f1c), args_template=512, nargs=2, args=0x82eb60) at eval.c:3045 #10 0x01276b30 in funcall_lambda (fun=XIL(0xa000000005e00f1c), nargs=2, arg_vector=0x82eb60) at eval.c:3117 #11 0x01275ae6 in funcall_general (fun=XIL(0xa000000005e00f1c), numargs=2, args=0x82eb60) at eval.c:2908 #12 0x01275e42 in Ffuncall (nargs=3, args=0x82eb58) at eval.c:2958 #13 0x0126526a in Ffuncall_interactively (nargs=3, args=0x82eb58) at callint.c:291 #14 0x01276482 in funcall_subr (subr=0x1747440 , numargs=3, args=0x82eb58) at eval.c:3023 #15 0x01275a7f in funcall_general (fun=XIL(0xa000000001747440), numargs=3, args=0x82eb58) at eval.c:2904 #16 0x01275e42 in Ffuncall (nargs=4, args=0x82eb50) at eval.c:2958 #17 0x01274d39 in Fapply (nargs=3, args=0x82ecc8) at eval.c:2629 #18 0x0126599c in Fcall_interactively (function=XIL(0x4570a8c), record_flag=XIL(0), keys=XIL(0xa000000007a59e70)) at callint.c:384 #19 0x0127608d in funcall_subr (subr=0x1747480 , numargs=3, args=0x68b0078) at eval.c:3000 #20 0x012e9238 in exec_byte_code (fun=XIL(0xa000000005dff734), args_template=1025, nargs=1, args=0x82f5b0) at bytecode.c:809 #21 0x012765d1 in fetch_and_exec_byte_code (fun=XIL(0xa000000005dff734), args_template=1025, nargs=1, args=0x82f5a8) at eval.c:3045 #22 0x01276b30 in funcall_lambda (fun=XIL(0xa000000005dff734), nargs=1, arg_vector=0x82f5a8) at eval.c:3117 #23 0x01275ae6 in funcall_general (fun=XIL(0xa000000005dff734), numargs=1, args=0x82f5a8) at eval.c:2908 #24 0x01275e42 in Ffuncall (nargs=2, args=0x82f5a0) at eval.c:2958 #25 0x0116b1ce in call1 (fn=XIL(0x4440), arg1=XIL(0x4570a8c)) at lisp.h:3239 #26 0x0116f400 in command_loop_1 () at keyboard.c:1510 #27 0x01270266 in internal_condition_case (bfun=0x116e774 , handlers=XIL(0x90), hfun=0x116d742 ) at eval.c:1485 #28 0x0116e1e1 in command_loop_2 (handlers=XIL(0x90)) at keyboard.c:1132 #29 0x0126f0ed in internal_catch (tag=XIL(0xfe70), func=0x116e1aa , arg=XIL(0x90)) at eval.c:1208 #30 0x0116e14c in command_loop () at keyboard.c:1110 #31 0x0116d1a2 in recursive_edit_1 () at keyboard.c:719 #32 0x0116d440 in Frecursive_edit () at keyboard.c:802 #33 0x011683aa in main (argc=2, argv=0xa42a10) at emacs.c:2517 Lisp Backtrace: "pos-visible-in-window-p" (0x68b0240) "pos-visible-in-window-group-p" (0x68b01e8) "isearch-update" (0x68b0198) "isearch-search-and-update" (0x68b0170) "isearch-process-search-string" (0x68b0130) "isearch-process-search-char" (0x68b00e0) "isearch-printing-char" (0x82eb60) "funcall-interactively" (0x82eb58) "call-interactively" (0x68b0078) "command-execute" (0x82f5a8) (gdb) p it->current $1 = { pos = { charpos = 1, bytepos = 1 }, overlay_string_index = -1, string_pos = { charpos = -1, bytepos = -1 }, dpvec_index = -1 } (gdb) p it->bidi_it.bytepos $2 = 1 (gdb) p bob $3 = 20000 (gdb) p it->narrowed_begv $4 = 20000 This is because start_display was called to start from the window's start point: #5 0x01038364 in pos_visible_p (w=0x75fd230, charpos=48949, x=0x82e1fc, y=0x82e1f8, rtop=0x82e20c, rbot=0x82e208, rowh=0x82e204, vpos=0x82e200) at xdisp.c:1730 1730 move_it_to (&it, charpos, -1, it.last_visible_y - 1, -1, (gdb) p top $6 = { charpos = 1, bytepos = 1 } (gdb) p PT $7 = 48949 (gdb) p w->start $8 = XIL(0xa00000000760a9d0) (gdb) xmarker $9 = (struct Lisp_Marker *) 0x760a9d0 (gdb) p *$ $10 = { header = { size = 1124081664 }, buffer = 0x76be1b8, need_adjustment = 0, insertion_type = 0, next = 0x7621158, charpos = 1, bytepos = 1 } In the source code it looks like this: SET_TEXT_POS_FROM_MARKER (top, w->start); [...] start_display (&it, w, top); move_it_to (&it, charpos, -1, it.last_visible_y - 1, -1, (charpos >= 0 ? MOVE_TO_POS : 0) | MOVE_TO_Y); From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:12:08 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:12:08 +0000 Received: from localhost ([127.0.0.1]:33921 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Nb-00028h-R9 for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:12:07 -0400 Received: from heytings.org ([95.142.160.155]:59110) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Na-00028Z-Bb for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:12:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657365125; bh=AiAdmpSXG2bAgtnzhAYmLTk/0xrWnWvJ+rYe75TJPwM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=Oek/jApR7YUBbhgSlOa19hbB8nM92lA4iGo27y9WOa6iI50FjipsX3OSW1Xe/unDV 1aGKyg/5h+Tmt81BgcLLFynbew0Uo3suTd6o06TVab/yxuSGSJjB5ZTHRKmKhQJzGx 3wnmMc1HRAnXqXyoNHor5LmaB6AScCcwYy/7E2cJExFKTBe+PG3Yp38x2E9C9sLZYh GuXwmTYKOzoIlXB6fBmimkm9UBWrkf+nR/NPtJ1/ARSlLKitIG6b8jlyOV2ROv8pNU /z9VwrY1uAMOoen/1DyZ8QzHIT0gPK1FvnmFH17VVeQcCZe8Ar/7c0G1sYAn5isJU4 RaRV4AcMtFWLQ== Date: Sat, 09 Jul 2022 11:12:05 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83fsja36an.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Here's one problem caused by using PT in get_narrowed_begv: > > emacs -Q > C-x C-f src/xdisp.c RET > C-x 2 > M-> > > Now move the mouse pointer over the "other" window, the one which still > shows xdisp.c at BOB, and turn the mouse wheel to scroll the window > towards the end of the buffer. This segfaults: > > The problem is that narrowed_begv was computed using PT, which doesn't > correspond to the window's point, and so the logic in > get_visually_first_element backfires. > Yes, I understand and noted that I should use window-point instead of PT. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:16:29 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:16:29 +0000 Received: from localhost ([127.0.0.1]:33930 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Rp-0002Hz-Aj for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:16:29 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37848) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Rn-0002Hk-0d for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:16:28 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41604) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA8Rh-00041K-HC; Sat, 09 Jul 2022 07:16:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=t2GZGLXGSWGbcvAKGIF6dPc51oL/TEtEZEub1cqusEg=; b=EYocqZx04fbH NDOZfeje9xHSevX5axRX8xrepEHnAdBMrzHv43mWQ3m35jOoKAfyVVtjAS5bqm5wfg4M8OGosZf0B OphSIcOBLpjGaH47HFZWX0Z5Lm00s+a4f2HA0wlKAMw3mpNDeplrE+mVMHmnlR+CzAUD0yKicB56C sCfBvr42SCoWX/nR0WsURWwclchXnnS0PoYv0y9talr4IiBpe9EVanF/+UnPUnLmZhR9SC3oKWsyS s+UwoDS91eSqPq4K9Qny1eGglqGkdl7Hkby3A/RTfigVToxjk0CM2QdN2BsrSWo0FWlC6BIlSWWwN mmeqSDidfx2mbNcrhGkSOg==; Received: from [87.69.77.57] (port=1600 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA8Rd-00068v-W0; Sat, 09 Jul 2022 07:16:21 -0400 Date: Sat, 09 Jul 2022 14:16:10 +0300 Message-Id: <83czee35ad.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 10:50:26 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 10:50:26 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > I'm asking whether applying the "restriction" where we call > > Vfontification_functions from the display engine won't also solve 3. > > > > It doesn't, see again the long-line-excerpt.xml file I sent you. It is > only 30K long, which would be a typical size for a restriction, and > editing that file is slow when font locking is on and fast when font > locking is off. I guess it's because we leave ZV at its original value, and font-lock attempts to fontify the entire long line till the end? Does it help to make the value of syntax-wholeline-max smaller? > What I would do (but I'm pretty sure you wouln't agree with that) is to > measure the time taken by fontification-functions in > handle_fontified_prop, and whenever that time is above a certain threshold > (say 0.25 or 0.5 seconds), to set fontification-functions to nil in that > buffer. You could instead look at the value of the "redisplay tick count" collected by update_redisplay_ticks. (That is only called if max-redisplay-ticks is non-zero, but you could set it to some large value, so that it never actually signals an error.) > But fontification-functions are not the only problem here. What I also > observe is that, for example, moving in a fontified buffer takes (much) > longer than moving in a non-fontified buffer. For example, in > long-line.xml, vertical-motion takes about 40 ms backward and 10 ms > forward in a non-fontified buffer, and about 180 ms backward and 40 ms > forward in a fontified buffer. I guess that's because vertical-motion calls the display code, and that calls fontification-functions. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:18:35 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:18:35 +0000 Received: from localhost ([127.0.0.1]:33935 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Tq-0002LE-P7 for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:18:35 -0400 Received: from eggs.gnu.org ([209.51.188.92]:38132) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8To-0002L2-HI for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:18:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41628) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA8Tj-0004Cj-B3; Sat, 09 Jul 2022 07:18:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=zsUgq4Kj/91tFnddVw1CD6TDCMQ1P2aYkjGR6TWa7LU=; b=pvqYTwjo06L0DoMtLclE Z5JgWpbRNvD3+Tk7in6oQDbM65H+Stp4cDS+a2KpjENUgHmPGmsiZFGcgujZLbgE61PMzDkx4tHD5 i+EhEwbBcKmVfNsFwkO7S4H2xCnoIifVVVLca3rWfJ/Z/DHGKpmD//4FzzWc5MEV4hcnkBUK02mB7 vOlwagkDcN4IqwuDIJs2npZXsgfOHdactoDbPa8+NbNAv5bFzszuJaiQIHRHd21Wmbv78uFYNkIEF PxJKimuoF1Pltx1O6+9sAsIIA5uOqvA2cn4/22aLDYLp5/4xwUt16/r0isC/ji3EbmOL8J+QFXWv2 nhNmOm88Asce2w==; Received: from [87.69.77.57] (port=1731 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA8Ti-0001Q2-QE; Sat, 09 Jul 2022 07:18:27 -0400 Date: Sat, 09 Jul 2022 14:18:17 +0300 Message-Id: <83bkty356u.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 11:09:40 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83a69n90t8.fsf@gnu.org> <38c1a31040ad21b41adc@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> <83h73q36wb.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 11:09:40 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > emacs -Q > > C-x C-f src/xdisp.c RET > > M-> > > C-u 37100 C-p > > > > This signals an error "Beginning of buffer". > > > > Nice. That's a recipe you concocted knowing the implementation details, > didn't you? 😉 Of course ;-) > > And if I use M-v instead of C-p, I don't get an error message, but I > > don't get to the line I wanted, either: it silently stops much earlier. > > > > This I cannot reproduce, I can scroll through the whole buffer with M-v > without any visible problems. I tried to set the auto repeat rate to 50, > and still do not see any problems. No, I meant this: C-u 37100 M-v From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:20:33 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:20:33 +0000 Received: from localhost ([127.0.0.1]:33939 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Vl-0002OM-6S for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:20:33 -0400 Received: from heytings.org ([95.142.160.155]:59142) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8Vk-0002OE-2a for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:20:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657365630; bh=0eIY5p2+pJlTOwg1GZuPFphb7W/tyoHOpw8bPAhQ7P0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=neIflvXr5RJmZnBvhrWxZ16O5ZPkKV+j5NKPTu12lZHbTg0HMuJOuDCyRDK+kQR/a DSQPvUw1p20S4+BO4/kWZSbyRKzmop1FdlGWfoEiCiv+vrqQtdVacCOVvQf+YAlfb+ LEAbSeu7kBziYnF4RbFgFYUGDe66nNITjWVGv+ZLcEPxbyrctOZDSVAWZFDnBsWC3Z PlzGH1GJNvzMHDk+HL/kqDW41a3r3LWDIiPkh3AYkpTHEZhnjmT40NwS+2zP/ThQU1 VjK+t/6NRzXnEtJV57O6PT8hYcAYnHXjtQrqlW5gniYJvrcSDCciBzoH8F8A1EY/x3 73pPU5ZABxpbQ== Date: Sat, 09 Jul 2022 11:20:30 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Here's one problem caused by using PT in get_narrowed_begv: >> >> emacs -Q >> C-x C-f src/xdisp.c RET >> C-x 2 >> M-> >> >> Now move the mouse pointer over the "other" window, the one which still >> shows xdisp.c at BOB, and turn the mouse wheel to scroll the window >> towards the end of the buffer. This segfaults: >> >> The problem is that narrowed_begv was computed using PT, which doesn't >> correspond to the window's point, and so the logic in >> get_visually_first_element backfires. > > Yes, I understand and noted that I should use window-point instead of > PT. > (That being said, I cannot reproduce that here either.) From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:38:20 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:38:20 +0000 Received: from localhost ([127.0.0.1]:33944 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8my-0004yb-MH for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:38:20 -0400 Received: from heytings.org ([95.142.160.155]:59162) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8mx-0004yS-0F for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:38:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657366697; bh=nWNj5vx1xycKXhKA3er75BAt6wPVxWS53eHXSH+oVaY=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=PRKWaZeEDkLq6QU9fltp+7mmx0pMIqlm0+Uss/6UqI5SCswaNpl0XOM8yEE6N1pMq UZqVHYPvyEdUqtZxCwRbwP6vO8dpNgHQlPK3zq9w3rjUXa/7ThaXVpQ1oGL9dq1SYU vKQbbZJouWaXVw7eLh0EbF9hf+VfknikvK8M/kO4ls8zjVBlAP8UTX9fzEwbm5kFKW hh+5MdjaZCZJ5KV3u3zPReFPidsVwkXrTo+pX2Lz19OdSmfZjq9zQayXn8CAZ/ausL wTuWuBV9P4W8uOpDFidjeu3mYJMuMg+vs0/GkJ98XRVecmFp+qpuW+PUntyDx5ogEY Al2dlJV0+4dbg== Date: Sat, 09 Jul 2022 11:38:17 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83bkty356u.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> <83h73q36wb.fsf@gnu.org> <83bkty356u.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="6FfuoRXlel" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --6FfuoRXlel Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable >>> emacs -Q >>> C-x C-f src/xdisp.c RET >>> M-> >>> C-u 37100 C-p >>> >>> This signals an error "Beginning of buffer". >> >> Nice. That's a recipe you concocted knowing the implementation=20 >> details, didn't you? =F0=9F=98=89 > > Of course ;-) > Then here's another recipe with long lines detection enabled: emacs -Q C-x C-f src/xdisp.c RET C-n C-x i .../dictionary.json RET M-> C-u 37100 C-p =F0=9F=98=89 --6FfuoRXlel-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:48:29 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:48:29 +0000 Received: from localhost ([127.0.0.1]:33949 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8wm-0005GO-KC for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:48:28 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41872) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8wk-0005G7-0O for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:48:26 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41806) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA8we-00061p-9c; Sat, 09 Jul 2022 07:48:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=s2ypE6ogP5dbSm/+/ef8Sai/pFueUYZGhd8ZvGmgPXA=; b=STE8qvybWGUT ydIQFX+KUn08JL5RYZIkgft2eaAQom+z46u4VBrcri390ubamsiK5bCeu6D2+2/A9DZJNYCiEH0/r A1iF+/vSMlJ3XlcYISjddUY87OYYWNNdxNLkss5jjeG9Vck42i1NEciBdAeNvmMcabv/eQHxas1OV oBq15rOQKKk2XgQLutgXAHB/X2gW8yOEMnGMfYC7/RyK56SHcHM7+ag0MtPIQAHVGbNBnyUauMJzG EAeq0JqqTarEXK93r1RabG7xAvJKEt7k+YpmDzqwPvxYziAK3GCojDsF+iFaqckgKr5x+11kuGeng bbnKMtkpq05r6AA/EQgx4w==; Received: from [87.69.77.57] (port=3562 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA8wd-0004KX-PK; Sat, 09 Jul 2022 07:48:20 -0400 Date: Sat, 09 Jul 2022 14:48:10 +0300 Message-Id: <83a69i33t1.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 11:38:17 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <835ykb8x3z.fsf@gnu.org> <38c1a310403dbabc7270@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> <83h73q36wb.fsf@gnu.org> <83bkty356u.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 11:38:17 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > Then here's another recipe with long lines detection enabled: > > emacs -Q > C-x C-f src/xdisp.c RET > C-n > C-x i .../dictionary.json RET > M-> > C-u 37100 C-p Where can I get a one-line dictionary.json file? I don't think I have it here. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:48:33 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:48:33 +0000 Received: from localhost ([127.0.0.1]:33952 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8wr-0005Gf-0K for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:48:33 -0400 Received: from heytings.org ([95.142.160.155]:59180) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA8wm-0005GM-Jy for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:48:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657367307; bh=tCtSMhz5+mNu4gx9DyM0bI/vSAxbXW/85HSAPtTADkY=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=zkVj2zMJokC7/OcM4FFwI1Zgn4heR6ORiwOUpCAWjBG+CBIint9FCSGxXsKuxP2Oa cro9qLEahrw1Wa6xq6ZrK+T14yFES1PDZSvsiET/0BvphsVmwIWr3r0ft2PmeXyesG MxamPF8aGnNE//l669DYYNipn+/0B1+4IZG24h2/rr9iNCwzL+iudS1guMHJpoMO2b 1QAxhF7Z+EWlMuLNXl5hef7Pw4j4NoJx9VDVwm2Y2qdaUXndUnhcMJDBmwGZB5AYnm p3hiqQaKmqlXTVJrNqBXfco3qAKpR61YlcLFeAfJU1GokKGOulCWKH1RayB19vabMH ZW3B5Nj522a9Q== Date: Sat, 09 Jul 2022 11:48:27 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83czee35ad.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> <83czee35ad.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> It doesn't, see again the long-line-excerpt.xml file I sent you. It is >> only 30K long, which would be a typical size for a restriction, and >> editing that file is slow when font locking is on and fast when font >> locking is off. > > I guess it's because we leave ZV at its original value, and font-lock > attempts to fontify the entire long line till the end? Does it help to > make the value of syntax-wholeline-max smaller? > Sorry, I wasn't clear enough: I meant opening that file with Emacs from master. Given that it's only 30K long, which would be a typical size for a temporarily narrowed buffer, and that editing it is slow, I don't see how applying a narrowing similar to the size of that file before calling fontification-functions could possibly help. >> But fontification-functions are not the only problem here. What I also >> observe is that, for example, moving in a fontified buffer takes (much) >> longer than moving in a non-fontified buffer. For example, in >> long-line.xml, vertical-motion takes about 40 ms backward and 10 ms >> forward in a non-fontified buffer, and about 180 ms backward and 40 ms >> forward in a fontified buffer. > > I guess that's because vertical-motion calls the display code, and that > calls fontification-functions. > No, fontification-functions are not called when moving around in an already fontified portion of the buffer. So the slowdown of C-n and C-p (and others) in that case is not caused by fontification-functions. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 07:59:52 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 11:59:52 +0000 Received: from localhost ([127.0.0.1]:33965 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA97o-0005XA-5V for submit@debbugs.gnu.org; Sat, 09 Jul 2022 07:59:52 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43570) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA97m-0005Wx-Ot for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 07:59:51 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41930) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA97h-00077n-5B; Sat, 09 Jul 2022 07:59:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=fJ05Um9u3PTGj9Sut6DfqSku7qVdwsthGEwN05eQNvI=; b=rjapObjOJsjI CZ01at/bbJkOhGIQ/twU6RbDfeNvPWAl/0Zm/vWKcfWZ94Yg62VPhyU3FrLDmLtW39kKWHztz4/J/ V04CUirpfPYmTxdmJTDe87PJbO2lgYuybbKQLEdh7L2BF4a0OH4viE/Ex5c3ZA4JTyotxda+u3GQa ZHqirp5B/zR18SeAaSOU55EPtLEuJUWGxmcMa1lvosenw8Qt2jRC3Rk1J9Tq99kBBaF42tiyBdl4e ZL0aDC3l/Lbfy/DhDZ1BwVXh1rYaYpbpZdkSKCip+VoMn7+ehw1J52isO3F81fpZP+5XefSbP6dEK FZdI5RQyEjycC/OS8OLR+w==; Received: from [87.69.77.57] (port=4256 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA97f-0006Qb-Vw; Sat, 09 Jul 2022 07:59:45 -0400 Date: Sat, 09 Jul 2022 14:59:35 +0300 Message-Id: <838rp233a0.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 11:48:27 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> <83czee35ad.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 11:48:27 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > >> But fontification-functions are not the only problem here. What I also > >> observe is that, for example, moving in a fontified buffer takes (much) > >> longer than moving in a non-fontified buffer. For example, in > >> long-line.xml, vertical-motion takes about 40 ms backward and 10 ms > >> forward in a non-fontified buffer, and about 180 ms backward and 40 ms > >> forward in a fontified buffer. > > > > I guess that's because vertical-motion calls the display code, and that > > calls fontification-functions. > > > > No, fontification-functions are not called when moving around in an > already fontified portion of the buffer. So the slowdown of C-n and C-p > (and others) in that case is not caused by fontification-functions. That's very strange, since AFAIK moving in a non-fontified buffer involves both fontifications and display of the fontified text, whereas moving through a fontified buffer involves only the latter. FWIW, I've _never_ seen movement through fontified buffer being slower than in a non-fontified one. I'd be very interested to know what slows down the movement in a fontified buffer. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:01:21 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:01:21 +0000 Received: from localhost ([127.0.0.1]:33974 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA99E-0005bq-Ow for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:01:20 -0400 Received: from heytings.org ([95.142.160.155]:59200) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA99D-0005bi-2F for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:01:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657368078; bh=BamO03Lbk1oEM/tDKBr78S4mdv0Clx5UBnHwiuqYEuw=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=ZufAR9zkVVZvFaDZL0TBUlww8fLxL7l3shf8YVaM0K7KiWwinffJfnhu0kXRruf8A 5Nh8iNBYLoAi/aGvpi0sp6N9lsvwWszrSTMKG1DwBQO/QFNqa2Fi7ZRvlBV9ojYd/0 842Dwu0mWBK7aiZUZA3C/1d+RMVAzg86ZCBeH0rOxh3jsDS+WNuQvlXChFF1XpUJgZ P1lecvXNVJzib5EU2ytID2cIGZ8hXK4Rpw9skOjeVvqNzeI8qmsFz4ZlTmiF59DvS6 1u7i2GQ//uedfexG1BVgqb/+T52gCAfuWZIiuFyxxRDEwmwEE8uLg5zZbi/MXGyI+J U43uczimaUqaA== Date: Sat, 09 Jul 2022 12:01:17 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83a69i33t1.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> <83h73q36wb.fsf@gnu.org> <83bkty356u.fsf@gnu.org> <83a69i33t1.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Then here's another recipe with long lines detection enabled: >> >> emacs -Q >> C-x C-f src/xdisp.c RET >> C-n >> C-x i .../dictionary.json RET >> M-> >> C-u 37100 C-p > > Where can I get a one-line dictionary.json file? I don't think I have > it here. > It's here: https://github.com/Wilfred/ReVo-utilities/blob/a4bdc40dd2656c496defc461fc19c403c8306d9f/revo-export/dictionary.json?raw=true Then you can obtain the 1GB file with: for I in $(seq 1 60); do cat dictionary.json; done > hugedictionary.json (Note that I did not actually try the above recipe, it's just meant to show that there will always be corner cases that won't be handled, even with a dynamic detection of long lines.) From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:08:04 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:08:04 +0000 Received: from localhost ([127.0.0.1]:33978 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9Fk-0005lR-Fy for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:08:04 -0400 Received: from heytings.org ([95.142.160.155]:59228) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9Fc-0005kw-Jh for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:08:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657368476; bh=Z0vQFFzEiXvv4XzoXvJZmB/UmdHlzoywdtxEHDQRpNk=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=iCusBfcily/gGzsXmlO795jeE/kwQE/2F8VFprQTIbKBg8YtoxNC0xy3MNXi+sfVx j1z2VTYsq+sMnV/6xgKjpwgNElFtjWBFn5z2NvWaoDixNUfQH5EGfHUC59n64H6sFs /IbRt3B25ark1KpGZkBXE/eKb05TVMF05shQuIwxB4aKIIKCranAKzWL2QtpgTw2rU h2t2Ju4Zu6PdywszkvuXP1hSu2KVWioaVE0JF1ZTS9SyanozvsMBdDYtsG6diVUNOe fAKejgUl3UWXcIe8/8e/0Ua6pnadQxlAC2zkHb/BAx6CXGg30Td2mJXZ2QjzBd6KdQ W1we0pgEnkYMA== Date: Sat, 09 Jul 2022 12:07:55 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <838rp233a0.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> <83czee35ad.fsf@gnu.org> <838rp233a0.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > That's very strange, since AFAIK moving in a non-fontified buffer > involves both fontifications and display of the fontified text, whereas > moving through a fontified buffer involves only the latter. FWIW, I've > _never_ seen movement through fontified buffer being slower than in a > non-fontified one. > Try the dictionary.json or the long-line.xml file with and without font-lock-mode. Also try emacs -Q C-x C-f dictionary.json RET y C-s aan zich RET and emacs -Q C-x C-f dictionary.json RET y M-x font-lock-mode C-s aan zich RET The first takes several seconds, the second is almost instantaneous. > > I'd be very interested to know what slows down the movement in a > fontified buffer. > One problem at a time, okay? From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:08:44 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:08:44 +0000 Received: from localhost ([127.0.0.1]:33981 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9GN-0005mJ-Pc for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:08:43 -0400 Received: from mail-pl1-f178.google.com ([209.85.214.178]:34517) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9GM-0005m7-Ll for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:08:43 -0400 Received: by mail-pl1-f178.google.com with SMTP id z1so894007plb.1 for <56393@debbugs.gnu.org>; Sat, 09 Jul 2022 05:08:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version; bh=/irjxjQR+391HBwCV760wiPm7QczdQvt38Hts7Ey/sc=; b=i+1JO4JYmmKH5S4YZTldWGolVDejLEzMx+7MmePXs393swctOcZWpremssKiQkx7sE H2jVoUsxu3u6ZDc5lRhxu45Q7nVNlO7/NUmM4nkQd8xec1tfxsn0qTjt255kkzcsiV3P 6slH8xlSu20CT9F8LNJXjz33YYhSfVT9JxJo/Nmxa9IyB5jjoxQQXy2FeXKXF5+66FnP XeGjk++WMxjRAdPEcNsHrT0Xc3yRIiL1VeesfFSfgewI/DRwPt4juVXkMyp9On8O59So 2s/O61zsvKK9D1Ptp3tdqHjWPL4dC/b6U3zVQZZV8GoR/lggnKKGdxCixDU9qjxTvaAV 5b/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=/irjxjQR+391HBwCV760wiPm7QczdQvt38Hts7Ey/sc=; b=Emp4uPrKJmQaecNZLtzuWHxITlbo4MMwwCGhtLExHJ9Re7exjlRbgA2OflAWqgD8wr 7wTrBsJMMPGu7FRfmUBhnOR1juk7B7Fw3CZYF/7v5cPjAIj7H56lQ/XmcLYe60YV+HSr P5FaG6325fZlItwWmY4OeJT0kv3MeRtqrS+nLN2DKbZtl5eJXpfx+zZFeZY7GwDapBX8 P7lEXyBZIvctP67JYF4ffIBRmBss7XaZlfx+J1R8hLNxcUFC32FPHgsbgTM1kviEXK9y VplOGcyO9TZq2HcPkj69Ym6nROpY5wJh8ZRcIYRcpIohaXqCnV8nA1jDZP1K4h6QTog1 MdsQ== X-Gm-Message-State: AJIora87mjzQfnWEY2GQLjAandxye+BW8+2X0Jxl9yvSU+om1iCAI3jH SmtfIG9l0FxpHeudY00p3lk= X-Google-Smtp-Source: AGRyM1uihXCR4NzM/rCDzTZe0yMMSJuQ1jM3y68s6Xhbo1jNYhJc2iCjuRqc8f1h2uUN/Ady2a0AdA== X-Received: by 2002:a17:90b:3807:b0:1f0:a86:6875 with SMTP id mq7-20020a17090b380700b001f00a866875mr3607410pjb.103.1657368516696; Sat, 09 Jul 2022 05:08:36 -0700 (PDT) Received: from localhost ([210.3.160.230]) by smtp.gmail.com with ESMTPSA id fa14-20020a17090af0ce00b001ec98cc43e4sm1016729pjb.49.2022.07.09.05.08.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Jul 2022 05:08:35 -0700 (PDT) From: Ihor Radchenko To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <838rp233a0.fsf@gnu.org> References: <38c1a31040d2d2bc47ae@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> <83czee35ad.fsf@gnu.org> <838rp233a0.fsf@gnu.org> Date: Sat, 09 Jul 2022 20:09:42 +0800 Message-ID: <87tu7qv661.fsf@localhost> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.2 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, Gregory Heytings , larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.8 (/) Eli Zaretskii writes: >> No, fontification-functions are not called when moving around in an >> already fontified portion of the buffer. So the slowdown of C-n and C-p >> (and others) in that case is not caused by fontification-functions. > > That's very strange, since AFAIK moving in a non-fontified buffer > involves both fontifications and display of the fontified text, > whereas moving through a fontified buffer involves only the latter. > FWIW, I've _never_ seen movement through fontified buffer being slower > than in a non-fontified one. I'd be very interested to know what > slows down the movement in a fontified buffer. I am not sure if it is related, but I do observe a slowdown when moving across fontified buffer. This happens in really large buffers when moving across invisible text. AFAIU, line-move-1 uses next-single-property-change loop, which could be costly when the region has a large number of discontinuous text properties. In the scenario here, I doubt that invisible text is present. Still, it might be worth checking for the code that loops over text property regions. Best, Ihor From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:24:28 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:24:28 +0000 Received: from localhost ([127.0.0.1]:33989 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9Vc-0006A9-6V for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:24:28 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49086) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9Va-00069t-7K for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:24:27 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42620) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA9VU-0004Cs-Rq; Sat, 09 Jul 2022 08:24:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=l/B3scWBcwBWD+z8QVSpnvytlivwS1BA16VQlLxE4VU=; b=gL6UywO6Mq5e z04mwFOcay7Uq5nstM8siwKwQs8D+9yTh/7pY5TbmBiBe+P72ggr5i1DiR1ugTKmcD7IUitCZj56V qEZYSLPPnec3SN57cSR5udRn60X0PtqrG57fjtp03P2BhlpYHgvpGgmxn9cBfhOclVjplJoDIE0AS NT8F8mWOgkQFQS92lhA+Ad0YnucmKC11E3HuX2Wex+oR87bir1Z1IjuGDUYYc3oo0HYMQKZpBHWZd BsGI8hqgldc9V4rKwDg7ALzs8hgY/tQH6Dgrm19srQ8ZXOkxl+MZ6W+QCaccqjz+Piv2PSTvxELQH xGu11/OfA9HRhgkmcit62Q==; Received: from [87.69.77.57] (port=1782 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA9VU-00061L-Aw; Sat, 09 Jul 2022 08:24:20 -0400 Date: Sat, 09 Jul 2022 15:24:11 +0300 Message-Id: <835yk63250.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 12:01:17 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <834jzv8sv4.fsf@gnu.org> <38c1a31040ba2976eb4d@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> <83h73q36wb.fsf@gnu.org> <83bkty356u.fsf@gnu.org> <83a69i33t1.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 12:01:17 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > Where can I get a one-line dictionary.json file? I don't think I have > > it here. > > > > It's here: https://github.com/Wilfred/ReVo-utilities/blob/a4bdc40dd2656c496defc461fc19c403c8306d9f/revo-export/dictionary.json?raw=true Thanks. > (Note that I did not actually try the above recipe, it's just meant to > show that there will always be corner cases that won't be handled, even > with a dynamic detection of long lines.) I think arbitrarily limiting C-p in buffers that don't have long lines will be deemed a regression. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:30:09 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:30:09 +0000 Received: from localhost ([127.0.0.1]:33994 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9b6-0006Jw-Rt for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:30:09 -0400 Received: from quimby.gnus.org ([95.216.78.240]:59020) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9b5-0006IJ-He for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:30:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID :References:In-Reply-To:Subject:CC:To:From:Date:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=ORurK+E6XiF4K2I1fbQDtVMSJFlG2FxXK2t4rl0ZuGg=; b=f5AYa4SFIorSudXlpOF9zeyu6k Tvkm7zakcBqsGqrOJtCC74YgbkNe5AQk2UxB/Wwcbq1mM/3K1nqF4U8AlWFqXDLPE4zGLERvXh1w8 uI8BlDueOFJ8Ujpk4xGaHQ6acjnc+MYaIieaNAczlBbCh2ZOvFdIo+83jpOb1q3/pB00=; Received: from 46.67.40.203.tmi.telenormobil.no ([46.67.40.203] helo=[127.0.0.1]) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oA9aq-0005kH-6z; Sat, 09 Jul 2022 14:29:54 +0200 Date: Sat, 09 Jul 2022 14:29:49 +0200 From: Lars Ingebrigtsen To: Gregory Heytings , Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug User-Agent: K-9 Mail for Android In-Reply-To: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> Message-ID: <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=----WZ18SAN8N4YUU2RV4YKUMKZ0QBKCB1 Content-Transfer-Encoding: 7bit X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Using a probalistic approach for turning the auto narrow mode on might work? I.e., check for long lines in insert-file, but also if the buffer has increased a lot in size, or many modtics, or many dis [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP 0.0 TVD_RCVD_IP Message was received from an IP address 0.0 HTML_MESSAGE BODY: HTML included in message -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) ------WZ18SAN8N4YUU2RV4YKUMKZ0QBKCB1 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Using a probalistic approach for turning the auto narrow mode on might work= ? I=2Ee=2E, check for long lines in insert-file, but also if the buffer has= increased a lot in size, or many modtics, or many display ticks=2E That way we'd avoid issues with the mode in normal buffers --=20 Sent from my Android device with K-9 Mail since Emacs doesn't run here ------WZ18SAN8N4YUU2RV4YKUMKZ0QBKCB1 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable Using a probalistic approach for turning the aut= o narrow mode on might work? I=2Ee=2E, check for long lines in insert-file,= but also if the buffer has increased a lot in size, or many modtics, or ma= ny display ticks=2E

That way we'd avoid issues with the mode in norm= al buffers
--
Sent from my Android device with K-9 Mail since Emacs doesn't ru= n here
------WZ18SAN8N4YUU2RV4YKUMKZ0QBKCB1-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:31:17 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:31:17 +0000 Received: from localhost ([127.0.0.1]:33998 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9cD-0006MA-7L for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:31:17 -0400 Received: from heytings.org ([95.142.160.155]:59262) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9cA-0006Lz-RW for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:31:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657369873; bh=QPg1X4YGXHlkna0LcsHGf1UNaU3jRnY4GNGNN0fh/IQ=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=qAFW9lQsviF7lniOqmtq8P2GJasO0o72IiVHuxdbI4h9IYeH6MhTc2Qq5DgnkQejA 2Hh17//h/3d1sh31Uexf2H3jL/7VJf3r79qBPo8mUDZlSOmyFh5I82lvQJbMk39QsA VcbmbkAqqv9o5ctWhPA3PYHmQ3SOucPcTst0hY8NnOpnASeSpiGE1q0krpMqQriGcA sjgAXHXaK9ku1hctm6RoHKkWoRaVTc/dMM7whYg9A+0WEO+Oy7io/4MAperxt6jaST VEYIHuCqiD7TRgKGSnOZqrAcI4v5mOLOvrEQrcjUkQ+BB+geCJ/lvc7u5c3VxpvCsk 9fG4YHrFxQdzQ== Date: Sat, 09 Jul 2022 12:31:13 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <835yk63250.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83y1x77c2w.fsf@gnu.org> <87k08rkvgb.fsf@gnus.org> <38c1a31040e94458bd3d@heytings.org> <83o7y277b8.fsf@gnu.org> <762d224809bcab0d6bbc@heytings.org> <83fsje74pz.fsf@gnu.org> <762d224809bc038d2030@heytings.org> <838rp672p7.fsf@gnu.org> <762d224809114fbaf4af@heytings.org> <834jzu6wnu.fsf@gnu.org> <762d224809c7a439895e@heytings.org> <83wncq5dvu.fsf@gnu.org> <3ffab1919622ce555e12@heytings.org> <83ilo95uz8.fsf@gnu.org> <3ffab19196bc0451adb6@heytings.org> <83edyx5j2u.fsf@gnu.org> <83tu7q3iz5.fsf@gnu.org> <83pmie3ayo.fsf@gnu.org> <83k08m38uy.fsf@gnu.org> <83h73q36wb.fsf@gnu.org> <83bkty356u.fsf@gnu.org> <83a69i33t1.fsf@gnu.org> <835yk63250.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> (Note that I did not actually try the above recipe, it's just meant to >> show that there will always be corner cases that won't be handled, even >> with a dynamic detection of long lines.) > > I think arbitrarily limiting C-p in buffers that don't have long lines > will be deemed a regression. > I bet that we won't have a single bug report about this. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:34:25 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:34:26 +0000 Received: from localhost ([127.0.0.1]:34005 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9fF-0006Qu-Ld for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:34:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52012) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9fD-0006Qi-N2 for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:34:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42706) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA9f8-0002q0-DZ; Sat, 09 Jul 2022 08:34:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=ns/RtLmasGD2Eg7Z602a74r/gXZvwi5qkmU8AMVhmms=; b=WXJFVF+ljYlS uGiBk9EWfg0C3Afh8irdJ9pvtAzY+1rSn+KdTV40H+SErimwlbNdH301NEvuY1mwac1cyv2q4SpXQ FVgHllC3PH0Nkhr196eDaSpghRlAO7T084aBgnU6ZBinAOiIT7VS32s4OB41quK+ZzwCUjVYS2kaD HQ8zfZW+4HOmtxeCCg9bcQXqwL0W0/ZK/hZapUCeHehnZ7ytLoqeOH4hq3XkAGMT5E+4EzTXqWzJm 3E02JIgCNtyswNLu3oyc9jQ4x9nYu5TTiuHLvP3x9Lie2+yaSjz1enZ96TF9zJrR3/0aBG5lGh4KC EOGo97OPA7qbJH63pURBeA==; Received: from [87.69.77.57] (port=2390 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA9f7-0004eX-Tc; Sat, 09 Jul 2022 08:34:18 -0400 Date: Sat, 09 Jul 2022 15:34:09 +0300 Message-Id: <834jzq31oe.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 09 Jul 2022 12:07:55 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> <83czee35ad.fsf@gnu.org> <838rp233a0.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 09 Jul 2022 12:07:55 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > > > > That's very strange, since AFAIK moving in a non-fontified buffer > > involves both fontifications and display of the fontified text, whereas > > moving through a fontified buffer involves only the latter. FWIW, I've > > _never_ seen movement through fontified buffer being slower than in a > > non-fontified one. > > > > Try the dictionary.json or the long-line.xml file with and without > font-lock-mode. Also try > > emacs -Q > C-x C-f dictionary.json RET > y > C-s aan zich RET > > and > > emacs -Q > C-x C-f dictionary.json RET > y > M-x font-lock-mode > C-s aan zich RET > > The first takes several seconds, the second is almost instantaneous. Ah, I misunderstood what you were saying. But you originally talked about C-n and vertical-motion, not about C-s. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:36:50 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:36:50 +0000 Received: from localhost ([127.0.0.1]:34009 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9ha-0006UU-34 for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:36:50 -0400 Received: from heytings.org ([95.142.160.155]:59282) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9hY-0006UL-N4 for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:36:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657370208; bh=EFV/kZV/iBsqUH2wfqo3Zoy/oNVHV7Zn0kBjfk5WbCk=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=WiOXR0Qc3TdSXuK04N0XY6figXerEBNscKXDrHXJPlS0lagK0Q4z3Y8wuAvstkcXo cVdUDyX0l87jIgpARI0kLYeri5SQfBXCE6lmg6rSCoK6hohqkMNAUSUFt1p5dyZaBY fjpeocNvtxUw9IClgihGUux0WcggBYYMmeSPYdy7hPtW6L94xeteh3VPq5c6iKRo9k iXnvB6ysbFn4NKcHmX39wkYS+kxNTpRA6U/Hk+GKQtWam3FJZIJ3Ek2dXsy8UkGU1r lc+zih1yWsunjy3Lazr99Mz0PwadZGcYOMOrntMrwpXibgyegNc8LQ/sx2yALBf2b5 GWp0HP7JGhEWA== Date: Sat, 09 Jul 2022 12:36:47 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <834jzq31oe.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> <83czee35ad.fsf@gnu.org> <838rp233a0.fsf@gnu.org> <834jzq31oe.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> The first takes several seconds, the second is almost instantaneous. > > Ah, I misunderstood what you were saying. > > But you originally talked about C-n and vertical-motion, not about C-s. > Yes, what I meant is that the effect is visible both with C-n / C-p and with C-s. And probably with other commands. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:37:40 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:37:40 +0000 Received: from localhost ([127.0.0.1]:34014 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9iO-0006Vv-BA for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:37:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52602) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9iM-0006Vi-EY for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:37:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42748) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA9iG-0005mE-Gw; Sat, 09 Jul 2022 08:37:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=kViFxZxZ6ID+mRBXX3cOgrr7s4nV4T5xc9sKQayRwtk=; b=SARcrLpj+xEW b9CZHt0jOmDAgbDqTk4CtMKMzej/DBuLatRUIsao1nbyxa6tlZxzp02uCkNWnCSTkfUPbjG/2Sgsz KfSDR72BGji9DtLJKzmBYpDhSN823wrdf7C3Bb9Xdg8D+a9+XK0vP76QN7xoDq21sO+vCHl5wa5dL ZISgFEwajM/tpP4AyHCUlL8LI/kx1KBvUBfT/ZyzblLDkXwbOFZ/wYSbB0zX1TDrpys38J9rM6Lp2 HGnJqv93g5XpzlHamx3y6i5ApmME/NmwF5vC47weqFbXrgGOKe5q5IBq8cxvapCEGJqiS/n9GoPP1 IBSdntIDa6AHbvY+/MKxhg==; Received: from [87.69.77.57] (port=2594 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oA9iG-0004Jb-0f; Sat, 09 Jul 2022 08:37:32 -0400 Date: Sat, 09 Jul 2022 15:37:22 +0300 Message-Id: <8335fa31j1.fsf@gnu.org> From: Eli Zaretskii To: Ihor Radchenko In-Reply-To: <87tu7qv661.fsf@localhost> (message from Ihor Radchenko on Sat, 09 Jul 2022 20:09:42 +0800) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83o7xy3amx.fsf@gnu.org> <83ilo638qt.fsf@gnu.org> <83czee35ad.fsf@gnu.org> <838rp233a0.fsf@gnu.org> <87tu7qv661.fsf@localhost> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, gregory@heytings.org, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Ihor Radchenko > Cc: Gregory Heytings , gerd.moellmann@gmail.com, > larsi@gnus.org, 56393@debbugs.gnu.org > Date: Sat, 09 Jul 2022 20:09:42 +0800 > > I am not sure if it is related, but I do observe a slowdown when moving > across fontified buffer. This happens in really large buffers when > moving across invisible text. AFAIU, line-move-1 uses > next-single-property-change loop, which could be costly when the region > has a large number of discontinuous text properties. Invisible text is a different matter altogether. The problem there is that the amount of text on the screen is very different from what's actually in the buffer, and moving through such a buffer needs to skip the invisible text, which isn't free. Face properties don't have such an effect. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 09 08:38:55 2022 Received: (at 56393) by debbugs.gnu.org; 9 Jul 2022 12:38:55 +0000 Received: from localhost ([127.0.0.1]:34018 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9jb-0006Xt-Lf for submit@debbugs.gnu.org; Sat, 09 Jul 2022 08:38:55 -0400 Received: from heytings.org ([95.142.160.155]:59298) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oA9ja-0006Xm-Ey for 56393@debbugs.gnu.org; Sat, 09 Jul 2022 08:38:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1657370333; bh=zbUrP/uABpUTTOJ2RRJsIVXHBa/3BOfhZsKAEJtZHYM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=bFVkC7Ig7PHILS1EHI0n5zWssrS366h4U2PJ5UOVoys0kWuUfQbVrQmScnIiDBhzs OFk1fi0PVEbRCw/M2PfDsTxcWh00djOsBSltjvLi2LPjajRwVsD3RR5xdKWXId/gnv nxoho6vqG8SZ6S3lpu+hQJfdKMZdsgO6FILK50VztMQAxc3LqvQQuE7dtWysMpgubr YtG3oSrN1L+pEFp2w3VTpYMk85SrolPEcz8zBri1of1/nQa3dejOdY9+KZR4Ry2mT6 Eg3ZNEKbKnClKCtlEE1Mh7cJinuKWq5MeN8KE0283S6Ha9KFFItodvBSt3Jnosp0A+ kbeQGQJUbvibw== Date: Sat, 09 Jul 2022 12:38:53 +0000 From: Gregory Heytings To: Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2PLiQ2VQEO" Content-ID: X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --2PLiQ2VQEO Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Content-ID: > > Using a probalistic approach for turning the auto narrow mode on might=20 > work? I.e., check for long lines in insert-file, but also if the buffer= =20 > has increased a lot in size, or many modtics, or many display ticks. > > That way we'd avoid issues with the mode in normal buffers-- > That's a neat idea, thanks. > > Sent from my Android device with K-9 Mail since Emacs doesn't run here > You could run Emacs inside an SSH session =F0=9F=98=89 --2PLiQ2VQEO-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 16 15:39:23 2022 Received: (at 56393) by debbugs.gnu.org; 16 Jul 2022 19:39:23 +0000 Received: from localhost ([127.0.0.1]:46131 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oCndK-0004z3-VP for submit@debbugs.gnu.org; Sat, 16 Jul 2022 15:39:23 -0400 Received: from heytings.org ([95.142.160.155]:40370) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oCndI-0004yv-W3 for 56393@debbugs.gnu.org; Sat, 16 Jul 2022 15:39:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658000359; bh=qdSO+Fo5/3wPjNwABUgt313BUn9hXlroTJYfdjKTTsQ=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=f4IW17bZR4baaukkkZZmpqpKthbdrWTwqZdHQ9wgK7HeL0XPk4h4JIiLoG9w8h87z Pneg0QuwOSD+Y2vFnPjTlKOx2NPqFanjNGcviMVrsprU07dQJyzDdA5A8OXrOhaI4m HUYzJ8ykwoZsWZOj+zDeT+6IJsYRTEE5/vggZ/i2oxBz0vGIlTbNmsqj7uFr2cru5I c4QU+y6ilovhSgyZlO8x9owVxPM8flgtlE3yJ/H6br3K0xzNbTuYLFLljVH66fV3m/ WDqLeuWw4gHbD6P1DPmSoO/k4YlkcZbSijIhxzAXvelViwDiFUKJGRNSlViVVsgCLt fuKL7uJL/WqBQ== Date: Sat, 16 Jul 2022 19:39:18 +0000 From: Gregory Heytings To: Eli Zaretskii , Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) I just pushed several improvements to the feature branch. A few comments: It turns out that it is not possible to calculate the restriction in start_display and/or in redisplay_window, because the restriction must also be used outside of redisplay. I tried various approaches, and my conclusion is that the best place to calculate the restriction is init_iterator. Using the size of the glyph matrix also turned out to be impractical, because the glyph matrix grows when the default font size becomes smaller (for example with C-x C-M--) but does not shrink when it becomes larger (with C-x C-M-+). So I've used another formula, still based on window_body_{width,height}. The optimizations now only apply to buffers which contain long lines, so the C-u 37100 C-p recipe in xdisp.c works as expected. I also replaced the WITH_NARROWED_BEGV macro with another one, SET_WITH_NARROWED_BEGV. I'm not convinced that defining another function, for example find_newline_no_quit_with_narrowed_begv, would be optimal, especially given that there is (in get_visually_first_element) a simple assignment that must be evaluated with a narrowed BEGV. From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 11:22:03 2022 Received: (at 56393) by debbugs.gnu.org; 17 Jul 2022 15:22:03 +0000 Received: from localhost ([127.0.0.1]:48345 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD65r-0004Xo-Ep for submit@debbugs.gnu.org; Sun, 17 Jul 2022 11:22:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37684) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD65p-0004X5-RN for 56393@debbugs.gnu.org; Sun, 17 Jul 2022 11:22:02 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47294) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oD65k-0002Rt-AW; Sun, 17 Jul 2022 11:21:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=u/0JcjOvZjO2Zv5jb/kIYQFZoSrb15VSA+gNT6rgJ9U=; b=i5k7BpyjreND hZewmQkRJFSWm3v0/ewKlnVt8hC4loPAKZLcpwvTHBqTOY7SHMA/VfTTqAXYnc6eXXhIm8oOYmT55 3oX7h7gaSqVOYehGCOz7K29brNdAuT5SMkd7pexkzSDpcqRYRZBWq+ittzBaErPTLCmso7t2AF3j4 aBcX09z5Q7giIAL8bKhGZv5tq2Ef/hwvdWMvCqTlf3dT+kMP+qF2kdX1ajtIM3RE7V4gq6P8aslWF JgPFCawbATrrZjcq6FiXhmBlZkJnBA/jzzIo0m+/uRNkjNfKcn7OFH+CJTwYA92wtbn3o/HXU1wPK T0qhoumeecc8pBLyj+TKZw==; Received: from [87.69.77.57] (port=1387 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oD65j-0001ly-QF; Sun, 17 Jul 2022 11:21:56 -0400 Date: Sun, 17 Jul 2022 18:21:40 +0300 Message-Id: <83v8rvpxx7.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Sat, 16 Jul 2022 19:39:18 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 16 Jul 2022 19:39:18 +0000 > From: Gregory Heytings > cc: 56393@debbugs.gnu.org > > > I just pushed several improvements to the feature branch. Thanks. I still see a segfault in get_visually_first_element. To reproduce: emacs -Q C-x C-f long-line.xml C-u 12 M-g g C-s C-q C-j IOW, go to line 12 and search for a newline. I think this segfaults because point is very far from window-start, so the narrowing doesn't include the position where get_visually_first_element is called. Similarly, this also segfaults: emacs -Q C-x C-f long-line.xml C-u 15000 M-g c C-x 2 From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 11:37:13 2022 Received: (at 56393) by debbugs.gnu.org; 17 Jul 2022 15:37:13 +0000 Received: from localhost ([127.0.0.1]:48360 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD6KX-00074r-Jr for submit@debbugs.gnu.org; Sun, 17 Jul 2022 11:37:13 -0400 Received: from heytings.org ([95.142.160.155]:41408) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD6KT-00074i-RX for 56393@debbugs.gnu.org; Sun, 17 Jul 2022 11:37:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658072228; bh=AjZAtBZPR9bMQ0F7a+u2qfZquXXKC0pJa1O2iVc2ERM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=PNZFXjaiEe9DYaQqZL6D20lf4SmeqgApBRHesnZ4su5zTdo958uYTtzPalmDz5Lai 3NevXfMuIjnlGblBe4YxbkV4mSaU5foS3Baf3X2TONoGNl3/FU8w4ft72eoGpdIRou +jSU6hGYWy6epjk2XOXeQaFa4yWog5DR5FWBtiC2RSGnAt+3m0Er4wRiXooHUSO46U mR8LGAoL97AMnDidrMmuVpwg9BZ4nQ3eSnCTb6Dp9fvTzozmyscvnVHa79duuszgm/ 6X2QcVxti2x9q4iCtVNW2VYiHO95HOXozGPs6yXkODMSyx/R8MCf2vX1uStLbT1H7N lZDA1EAJOfq8A== Date: Sun, 17 Jul 2022 15:37:08 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83v8rvpxx7.fsf@gnu.org> Message-ID: <209e6aa436f84e1f729a@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > I still see a segfault in get_visually_first_element. To reproduce: > > emacs -Q > C-x C-f long-line.xml > C-u 12 M-g g > C-s C-q C-j > > IOW, go to line 12 and search for a newline. I think this segfaults > because point is very far from window-start, so the narrowing doesn't > include the position where get_visually_first_element is called. > > Similarly, this also segfaults: > > emacs -Q > C-x C-f long-line.xml > C-u 15000 M-g c > C-x 2 > Thanks. I can't reproduce either of these two bugs with a regular build, both of these recipes produce the expected result. Are these segfaults due to --enable-checking? From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 12:00:57 2022 Received: (at 56393) by debbugs.gnu.org; 17 Jul 2022 16:00:57 +0000 Received: from localhost ([127.0.0.1]:48401 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD6hU-0007ix-WC for submit@debbugs.gnu.org; Sun, 17 Jul 2022 12:00:57 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43774) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD6hS-0007ij-Bv for 56393@debbugs.gnu.org; Sun, 17 Jul 2022 12:00:54 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47788) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oD6hM-0000dy-Mh; Sun, 17 Jul 2022 12:00:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=iddqPFwcBC9nZa1Nvmk3WVg39DqZ3Z4BLO/sZBiaVlQ=; b=pVqkwQ5vqVFO PJPWgdS2dAS39ggPj+bOTMXTmpo9Onk88WaTTGlfTgWfnuEvdxxrCjZN96qm86fcLRstwzBBsHxtP xnAZyjbB2Hof5RjbaQJllD5B2Lf1/ZsXj8wgYmLN37CrOSqXRbqUrkjksebo+j4/P6R/ajoY77aQ7 1Ib9NL3avBKckY3Vz2c/FiGKkKo9heNNRy7SkaHPcdWQ5TgnG7oC1MAgz73anZNVDwFhIZgzKq7XP c+vQT3CaHm42oun9nNunFReNJ75i3zMbgL9kNfEJIy8QTgCu5VOAmxsOB+rh6MwoMAi+caNxKdDhd pYmwzjmRfNdg9djRY+l2Bw==; Received: from [87.69.77.57] (port=3757 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oD6hM-0006yN-5X; Sun, 17 Jul 2022 12:00:48 -0400 Date: Sun, 17 Jul 2022 19:00:33 +0300 Message-Id: <83sfmzpw4e.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <209e6aa436f84e1f729a@heytings.org> (message from Gregory Heytings on Sun, 17 Jul 2022 15:37:08 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sun, 17 Jul 2022 15:37:08 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > > > > > I still see a segfault in get_visually_first_element. To reproduce: > > > > emacs -Q > > C-x C-f long-line.xml > > C-u 12 M-g g > > C-s C-q C-j > > > > IOW, go to line 12 and search for a newline. I think this segfaults > > because point is very far from window-start, so the narrowing doesn't > > include the position where get_visually_first_element is called. > > > > Similarly, this also segfaults: > > > > emacs -Q > > C-x C-f long-line.xml > > C-u 15000 M-g c > > C-x 2 > > > > Thanks. I can't reproduce either of these two bugs with a regular build, > both of these recipes produce the expected result. Are these segfaults > due to --enable-checking? No, I don't think so. --enable-checking produces SIGABRT, not SIGSEGV. The segfault happens because it->bidi_it.bytepos is 1, and FETCH_BYTE cannot be called with a zero argument. Here's a relevant portion of a debugging session: Thread 1 received signal SIGSEGV, Segmentation fault. 0x01055028 in get_visually_first_element (it=0x82d250) at xdisp.c:8691 8691 && (FETCH_BYTE (it->bidi_it.bytepos - 1) == '\n' (gdb) bt #0 0x01055028 in get_visually_first_element (it=0x82d250) at xdisp.c:8691 #1 0x010563d4 in next_element_from_buffer (it=0x82d250) at xdisp.c:9149 #2 0x01052bd3 in get_next_display_element (it=0x82d250) at xdisp.c:7786 #3 0x01057166 in move_it_in_display_line_to (it=0x82d250, to_charpos=306655, to_x=0, op=(MOVE_TO_X | MOVE_TO_POS)) at xdisp.c:9574 #4 0x01059ce7 in move_it_to (it=0x82d250, to_charpos=306655, to_x=-1, to_y=543, to_vpos=-1, op=10) at xdisp.c:10245 #5 0x01038364 in pos_visible_p (w=0x75fd640, charpos=306655, x=0x82e23c, y=0x82e238, rtop=0x82e24c, rbot=0x82e248, rowh=0x82e244, vpos=0x82e240) at xdisp.c:1730 #6 0x010ca308 in Fpos_visible_in_window_p (pos=XIL(0), window=XIL(0), partially=XIL(0x30)) at window.c:2000 #7 0x01276489 in funcall_subr (subr=0x173c8c0 , numargs=3, args=0x68b0248) at eval.c:3000 #8 0x012e9634 in exec_byte_code (fun=XIL(0xa000000005db8a1c), args_template=768, nargs=3, args=0x68b0208) at bytecode.c:809 #9 0x012769cd in fetch_and_exec_byte_code (fun=XIL(0xa000000005db9bdc), args_template=256, nargs=1, args=0x82ebd0) at eval.c:3045 #10 0x01276f2c in funcall_lambda (fun=XIL(0xa000000005db9bdc), nargs=1, arg_vector=0x82ebd0) at eval.c:3117 #11 0x01275ee2 in funcall_general (fun=XIL(0xa000000005db9bdc), numargs=1, args=0x82ebd0) at eval.c:2908 #12 0x0127623e in Ffuncall (nargs=2, args=0x82ebc8) at eval.c:2958 #13 0x01265666 in Ffuncall_interactively (nargs=2, args=0x82ebc8) at callint.c:291 #14 0x0127687e in funcall_subr (subr=0x1747440 , numargs=2, args=0x82ebc8) at eval.c:3023 #15 0x01275e7b in funcall_general (fun=XIL(0xa000000001747440), numargs=2, args=0x82ebc8) at eval.c:2904 #16 0x0127623e in Ffuncall (nargs=3, args=0x82ebc0) at eval.c:2958 #17 0x01268869 in Fcall_interactively (function=XIL(0x452974c), record_flag=XIL(0), keys=XIL(0xa0000000076986d8)) at callint.c:829 #18 0x01276489 in funcall_subr (subr=0x1747480 , numargs=3, args=0x68b0078) at eval.c:3000 #19 0x012e9634 in exec_byte_code (fun=XIL(0xa000000005dff734), args_template=1025, nargs=1, args=0x82f5b0) at bytecode.c:809 #20 0x012769cd in fetch_and_exec_byte_code (fun=XIL(0xa000000005dff734), args_template=1025, nargs=1, args=0x82f5a8) at eval.c:3045 #21 0x01276f2c in funcall_lambda (fun=XIL(0xa000000005dff734), nargs=1, arg_vector=0x82f5a8) at eval.c:3117 #22 0x01275ee2 in funcall_general (fun=XIL(0xa000000005dff734), numargs=1, args=0x82f5a8) at eval.c:2908 #23 0x0127623e in Ffuncall (nargs=2, args=0x82f5a0) at eval.c:2958 #24 0x0116b50a in call1 (fn=XIL(0x4440), arg1=XIL(0x452974c)) at lisp.h:3239 #25 0x0116f73c in command_loop_1 () at keyboard.c:1510 #26 0x01270662 in internal_condition_case (bfun=0x116eab0 , handlers=XIL(0x90), hfun=0x116da7e ) at eval.c:1485 #27 0x0116e51d in command_loop_2 (handlers=XIL(0x90)) at keyboard.c:1132 #28 0x0126f4e9 in internal_catch (tag=XIL(0xfe70), func=0x116e4e6 , arg=XIL(0x90)) at eval.c:1208 #29 0x0116e488 in command_loop () at keyboard.c:1110 #30 0x0116d4de in recursive_edit_1 () at keyboard.c:719 #31 0x0116d77c in Frecursive_edit () at keyboard.c:802 #32 0x011686e6 in main (argc=2, argv=0xa42a10) at emacs.c:2517 Lisp Backtrace: "pos-visible-in-window-p" (0x68b0248) "pos-visible-in-window-group-p" (0x68b01f0) "isearch-update" (0x68b01a0) "isearch-search-and-update" (0x68b0178) "isearch-process-search-string" (0x68b0138) "isearch-process-search-char" (0x68b00d8) "isearch-quote-char" (0x82ebd0) "funcall-interactively" (0x82ebc8) "call-interactively" (0x68b0078) "command-execute" (0x82f5a8) (gdb) p it.bidi_it.bytepos $1 = 1 (gdb) p bob $2 = 293760 (gdb) p it->current $3 = { pos = { charpos = 1, bytepos = 1 }, overlay_string_index = -1, string_pos = { charpos = -1, bytepos = -1 }, dpvec_index = -1 } From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 05:44:39 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 09:44:39 +0000 Received: from localhost ([127.0.0.1]:49197 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDNIs-0005M3-U7 for submit@debbugs.gnu.org; Mon, 18 Jul 2022 05:44:39 -0400 Received: from mail-ej1-f46.google.com ([209.85.218.46]:40492) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDNIr-0005Lq-OR for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 05:44:38 -0400 Received: by mail-ej1-f46.google.com with SMTP id tk8so8814191ejc.7 for <56393@debbugs.gnu.org>; Mon, 18 Jul 2022 02:44:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:content-language:to:cc:from :autocrypt:subject; bh=8L/pY0C5McoBj7i2ZPG5GEiRh3bu0DjHVO3dJSB/G1s=; b=E+G3Bin29yUwBrg+UGoLE6Z5oKeVRtxSmQssUeKEc4/AaaQN5RqaBPsPSyUcKRG4FA W/d8jv6E/tytdCeVuyu7GXcuOPWVGmyBgUv2INhojJcCKA6gWaqvyRbCmFFEXkpwXidZ Rf5TTQtJOkxx7+mzA4Mo4OwLjM3+h0odAscfIjU9Syntvea8oeBiHb3+UOCOGu/Rx26X YNNba0zj7DZNQDIzIU3GoLjYDh0DiRhWS5ciOti9JFclZqxjR9y5L0MLCeolWwZPdEjF 8muG3XiQcYMtiq68bTYJt/iPpqXdi1ySZhkFo8QOO51WIOUV+wDuVTLuHXrm18C0W6EL oEPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:cc:from:autocrypt:subject; bh=8L/pY0C5McoBj7i2ZPG5GEiRh3bu0DjHVO3dJSB/G1s=; b=xRIpLNl01O6s9fWBwNyiVv4Z9Y8n0CQwVY6Gyg0lNrxDu9eK+N9Ycib2znp6x1R3kK 5XHn+VVpwsdLiYEPNQUeRsu3+RfRZoiBQnqRyBt1ukOx22NkDKlkGOSHbISUSVHnRsaJ wqWIAGQQSl7HjMW3WW3gykPhFadRnMpfg7UVqagHzw8BKcHeyn9MAZfrFZyBUWzhyKF/ giyj+rfAUj8CGY9xBOL/yyIbTGtpgdWMnMCNacJk5CNhgLQ1hUYQWVYY1nCbLkfiOYjo 75mUzMk7usDx7LrHbL04EEa0U5844mKJm43it1wri2a7KKKkF4/zGsnjQ3p7kypnm7kI 8OOA== X-Gm-Message-State: AJIora+xvAcGa2/TV6IG1tyE7O9KZCTAa+JaL4DGlPtGHvpASAF0qWPm R9JH5jpyQWY7P3kNhEajQ68iZlsjaNSWE9rH X-Google-Smtp-Source: AGRyM1sn/AwA1u/zaVUO/LnwqsGVmGENHtK+5KieT19MKuAqY7T7Kh1FbIZes6zQCE8yZlCkyIYpew== X-Received: by 2002:a17:907:8a1d:b0:72b:9e7b:802a with SMTP id sc29-20020a1709078a1d00b0072b9e7b802amr24771069ejc.189.1658137471700; Mon, 18 Jul 2022 02:44:31 -0700 (PDT) Received: from [192.168.178.21] (pd9e36932.dip0.t-ipconnect.de. [217.227.105.50]) by smtp.gmail.com with ESMTPSA id by28-20020a0564021b1c00b0043acddee068sm8340209edb.83.2022.07.18.02.44.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 18 Jul 2022 02:44:30 -0700 (PDT) Message-ID: Date: Mon, 18 Jul 2022 11:44:29 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Content-Language: en-US To: Gregory Heytings From: =?UTF-8?Q?Gerd_M=c3=b6llmann?= Autocrypt: addr=gerd.moellmann@gmail.com; keydata= xsFNBGK3Qz4BEADz6clhctm9qf4lh1IJMOGL8dEBtyR8ZvdCtv1m7Oj5BVmBrHbF/hp/R/7m VAPNsyfPKNuqlesBmh/hr5zEHdzHMvLj8Hf5Yp8Ufo0ZqOtCzvIe62PHKvjt59FMNH3fpnId g5/8Kea2plWwH2u2hwxkhgC1mlMQFCILPED7OIMA3y4QvVbHqGP+kFl0OVHc4BeJHEXpVZTq RZl7q6V0LaXZtYWNffvQ/BWa9gmc1HztQTSBx6f3Lf9VTf5gQK7k691U+Vgyz7asKkHKeMO5 cdHAwsN+G+oI4KB2YCm2UMMpUKnoFLxdmswQGu1z6D75YlfxDLZmOTphlFXvIstoJnAgcT1Z ubowXAlHbxGnTfugZfe19xJxRTZ9zOty6m0aNaT4MshBQRj18nkZiBjZIoVQmluVMSgQ3kKJ cDzv+IijRf/9ekOcCfM8PK2pxOHX/lXm4fVW8hS4OMp/IPGTvAvu2ZXUOJSZpTUYz0EY3Al9 3XArmICvatrX/ePgvonkWJuruIQ6pPoefCsJyWaZj4/nrlW2mweDfVBkTbblbLO98UHM1TYu 1Pc0eTZChk7+5F8dXj7Tfn2Ll4xMVoYbIV5yEr1wMq/9d6S2EckCZAnH7R1romvtJhcse+uz tB2nyqxvCwMzZ28RrJiXkR4QIMSJi1ZMHU0dFQlkwZ/sRN0asQARAQABzSlHZXJkIE3Dtmxs bWFubiA8Z2VyZC5tb2VsbG1hbm5AZ21haWwuY29tPsLBlAQTAQoAPhYhBIq2Hj6Yk/Nh45H7 aXPqGxmQxT5jBQJit0M+AhsDBQkHhh9SBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEHPq GxmQxT5jG7sP/RcgeXp78GCJqyG52rXVBoxFc2qYi+j09jh7gLvHIvxiSW7umH68V6lhc9pY cIjLcI6qKyqHeyOytSYX7TGqA9L5S3oBZlSeQPN2q1kliNkOWG77T+9MVHkfNH3E+FM+BfqF oxcB6vpjcNkuT/y82ZaFwCHFhcIFjnCTp78HB7AkaywEAqtKCdJ70m5L4vPONMpA3P6S8AKf JEVyBZKUs2HSJtrObmW6wh0zRA//lKrI16ctCI476CgAqUTO+1blfx86XmRlwgc3McijArAX grj25yg9ryltL5YMv4M/pigqQMcwJ8bf4Q10si7jJ1SvGu9YMoTQ+QbYUtPYtPhYmJOT1CW/ jyIQrkRSPh8qslVM2frvD5YeQOMJMnW9ffB2ANDHGfiGHepm67gdeoKgO/ZShdSQchUCkkK7 ayjurIB6iYzuV/PSB1eQdxnG2RO/2w6ejcuk+nkFOavoyxDId/KRAZzWrErQnBQs9uZtwXrT FbB4rvL2apInnQKGCuiySscUrLeumbI3dCEjkOHfsqNLJj1LAL7HWsF3hBCnjupEglxP/7Ap D8SsANdmoEtJFjGJDcuX99PLl1zBrhjKFaIbIE/l+ncNrS8NwTTwr/Gdc+4YcSFmU/WXEP6R 70TTG0BBWM3If5lsMx1sPy5F/iuZCGzc7p5phO3Rg8btm0MzzsFNBGK3Qz4BEAC0R6MIhNIx RvY6VKUdP1OmR87arhPmZZWG4HOeH7uJ5QkgXbALd5SacbE5Hkfy9e+k25iTirJcA6EUMZcH KG26V3s1QKWDZMFT5ejTva4ZkAH3DitgnPDGTNnKEkLOSYJdTRtpXOqkdr9XyyKA8hjERPHU fgX32yqPj61pMK0uOm+EMaK4odoAIjix2qO6og7T97roiYn/Diw21V8aVWd08N2d8UZMVJuF /Z5xUB3pNqejNk3ZZEGsuHLAExHSuY9nRpW8PvwZZ/zWncrqJRmOD9xgbk8yuY99LM7ETyuT e73DIYKIHTL7XTq9yYnj9K3nZRRaABmhEfNY5wx2xwakkYjtTpA9LEIVDhWZDDw44v+rumVz 8MQB62RKyLyJnmt86qkDC6TTiHK2nK1r4XPyoYlIWF7pkoY1a2EVPkd67sKWjlvJ/oFjaSn6 WxfmyvPmm/2ryHyMuUepLZnjX/VA2ZIQ3VYrEsVDh1T2zTIX4myP6NwLTOVFpryRDD+WgNaL l5gbRRAJVcAEq4T63+zucULN98w59sGggdLrViiCL6bEeujj5dSI+BD1rog1rwhfzqMRdhVi rd2GwqvZNceVo2syx4V2JSPdp8na2pTyM9zI68JYVyvP+R5ok5CyVmEHgRkz9HNnZuG/bEPn zqeLROI/mqbxydwPLYi6PS+QLQARAQABwsF8BBgBCgAmFiEEirYePpiT82Hjkftpc+obGZDF PmMFAmK3Qz4CGwwFCQeGH1IACgkQc+obGZDFPmOT+g/9Hlui+8/EEiq3iat9OAXSR+qv4RGY 2XxdbsQVVr3Hx240IV9voxXqPa58Yt51qxlfdWaEkMcesqr8RPSS9FeEj0Zn4pWULp52j2Gu mTpJy4gnLkO12mUVOF/W9HazQdNjQqaAE2neimtmI5zUbGzdwKk7OBWGs9cBc3fJCZeAvuxE 3zTM/AoeFkqQ94F7jQERV+PNTbnNsXAj/0mu4Kp/nJsX2+b6V4zl2VN7GvSWuPyXCi8SZGZt fj4eETb0P7N1gCpch7NjhFe3nYWRG5D6HdcXak0DYsXwd3CbEHo8s36bSbIZ1EgIKjoqNow3 MrqJQsCuT8zajL95zBUICjF7IDYHW7EIDOma6p3D4dSJ+ySPkV5ZKzoqDEKKSKmgV9hDMknp Vsm6TRCyz+y3iDW4Fl8pTPR30Ug+vuNM5jK328wcpYrKrzbjf5JK3lT9fRV/uzBUTBjVE7oL yEGHWwCb5gr+dWSscS6l2Jjeh7fgpfhrbCZYvvcxC4Bfu1kFAhH20VFGYbo6O3xlNwJp8esi d1hplqC5SK7WmjZI0yEODn5Nt2fnk4zq1kXyqyj9jIh7VvYBJ7MDKcSINBwdOnSbmtYhUQfW 1fiKRG+gNgVI1o+mYoBgNd80vK8xfNUZjW8aVzJsS6F4C4hLXjs9dHKfEcgRnndY+AgoHVZy Vp5NW5c= Subject: Soon also looking at your branch Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------Qa820hSIGsxEdSsTQf7G5xmw" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------Qa820hSIGsxEdSsTQf7G5xmw Content-Type: multipart/mixed; boundary="------------bR2WRyuFFfOFTupDIldoitBJ"; protected-headers="v1" From: =?UTF-8?Q?Gerd_M=c3=b6llmann?= To: Gregory Heytings Cc: 56393@debbugs.gnu.org Message-ID: Subject: Soon also looking at your branch --------------bR2WRyuFFfOFTupDIldoitBJ Content-Type: multipart/mixed; boundary="------------OfTjpuq9DiWGic8XItxy8ZiQ" --------------OfTjpuq9DiWGic8XItxy8ZiQ Content-Type: multipart/alternative; boundary="------------l8Fc0bIxz6pthHFNrHPXCCxI" --------------l8Fc0bIxz6pthHFNrHPXCCxI Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SW4gY2FzZSBpdCBtYXR0ZXJzLCBJJ2xsIHNvb24gYWxzbyB0YWtlIGEgbG9vayBhdCB0aGlz Lg0KDQpTb29uIGJlY2F1c2UgSSdtIGN1cnJlbnRseSBhIGJpdCBmcnVzdHJhdGVkIGJ5IGFs bCB0aGUgdGhpbmdzIHRoYXQgZG9uJ3QgDQp3b3JrIG9uIG15IHN5c3RlbSBoZXJlLCBvciBk b24ndCB3b3JrIGFzIEkgd291bGQgZXhwZWN0LsKgIEl0IHN0YXJ0ZWQgDQp0b2RheSBieSBk ZWJidWdzLmVsIG5vdCBkaXNwbGF5aW5nIGFsbCBtZXNzYWdlcyB1bmRlciB0aGlzIGJ1ZyBy ZXBvcnQgDQp0aGF0IEkgY2FuIHNlZSB1bmRlciB0aGUgYnVnIG9uIHRoZSB3ZWIsIGFuZCBt ZSBub3QgZmluZGluZyBhbnkgd2F5IHRvIA0KZm9yY2UgaXQgdG8gbG9hZCBhbGwgbWVzc2Fn ZXMuwqAgQW5kIGl0IGNvbnRpbnVlZCB0aGF0IHdheSB0aGUgd2hvbGUgDQptb3JuaW5nLi4u DQoNCkNhLXRhcy10cm8tcGh5Lg0KDQpXaGF0ZXZlci4NCg0KSXMgaXQgY29ycmVjdCB0aGF0 IHRoZSBkaWZmZXJlbmNlcyBpbiB5b3VyIGJyYW5jaCBhcmUgdGhhdCBzbWFsbD/CoCBJIA0K c2VlLCBpbiB0aGUgc3VtbWFyeSBvZiBNYWdpdCdzIGVxdWl2YWxlbnQgdG8gImdpdCBkaWZm IG1hc3Rlci4uLiIgb25seQ0KDQoxMyBmaWxlcyBjaGFuZ2VkLCAxMTQgaW5zZXJ0aW9ucygr KSwgNzkgZGVsZXRpb25zKC0pDQpkb2MvZW1hY3MvZW1hY3MudGV4acKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8wqAgMSAtDQpkb2MvZW1hY3MvdHJvdWJsZS50ZXhpwqDCoMKgwqDCoMKg wqDCoMKgwqAgfCA1OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpldGMvTkVX U8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDI0 ICsrKysrKystLS0tLS0NCmxpc3AveyA9PiBvYnNvbGV0ZX0vbG9uZ2xpbmVzLmVsIHzCoCAx ICsNCnNyYy9idWZmZXIuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfCAxMCArKysrKysNCnNyYy9idWZmZXIuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfMKgIDQgKysrDQpzcmMvY29tcG9zaXRlLmPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA2ICsrKysNCnNyYy9kaXNwZXh0ZXJuLmjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgNSArKysNCnNyYy9saXNwLmjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMiArKw0Kc3Jj L3NlYXJjaC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAg MiArLQ0Kc3JjL3dpbmRvdy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqAgMiArLQ0Kc3JjL3dpbmRvdy5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqAgMSArDQpzcmMveGRpc3AuY8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDc2IA0KKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLQ0KDQpJJ20gb24NCg0KKkhlYWQ6wqDCoMKgwqAgNjY3MDRmYmJj ZiBGaXggdHlwbyBpbiBlN2I1OTEyYjIzLg0KKg0KDQpUaGF0J3Mgb25seSB+MTAwIGxpbmVz IG9mIGNvZGU/wqAgQ2FuIHRoYXQgYmU/wqAgSSdtIHN1c3BlY3RpbmcgdGhhdCBJIA0KZG9u J3QgdXNlIE1hZ2l0IHJpZ2h0LCBhZ2Fpbi7CoCBPciBzb21ldGhpbmcuDQoNCkFsc28sIHdv dWxkIGl0IGJlIGEgZ29vZCBpZGVhIHRvIHJlYmFzZSB0aGUgYnJhbmNoIG9uIG1hc3Rlcj/C oCBUaGF0IA0Kd291bGQgbWFrZSBpdCBwb3NzaWJsZSBmb3IgbWUgdG8gcnVuIHRoZSBicmFu Y2ggT09UQiB3aXRoIEFTQU4uwqAgSSBkaWQgDQp0aGF0IGxvY2FsbHkgaGVyZSwgYmVjYXVz ZSBJIGRvbid0IHdhbnQgdG8gaW50ZXJmZXJlIHdpdGggeW91ciB3b3JrLCBzby4uLg0KDQo= --------------l8Fc0bIxz6pthHFNrHPXCCxI Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGh0bWw+DQogIDxoZWFkPg0KDQogICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBl IiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPg0KICA8L2hlYWQ+DQogIDxi b2R5Pg0KICAgIDxwPjxmb250IGZhY2U9Ik1vbmFjbyI+SW4gY2FzZSBpdCBtYXR0ZXJzLCBJ J2xsIHNvb24gYWxzbyB0YWtlIGENCiAgICAgICAgbG9vayBhdCB0aGlzLjwvZm9udD48L3A+ DQogICAgPHA+PGZvbnQgZmFjZT0iTW9uYWNvIj5Tb29uIGJlY2F1c2UgSSdtIGN1cnJlbnRs eSBhIGJpdCBmcnVzdHJhdGVkDQogICAgICAgIGJ5IGFsbCB0aGUgdGhpbmdzIHRoYXQgZG9u J3Qgd29yayBvbiBteSBzeXN0ZW0gaGVyZSwgb3IgZG9uJ3QNCiAgICAgICAgd29yayBhcyBJ IHdvdWxkIGV4cGVjdC7CoCBJdCBzdGFydGVkIHRvZGF5IGJ5IGRlYmJ1Z3MuZWwgbm90DQog ICAgICAgIGRpc3BsYXlpbmcgYWxsIG1lc3NhZ2VzIHVuZGVyIHRoaXMgYnVnIHJlcG9ydCB0 aGF0IEkgY2FuIHNlZQ0KICAgICAgICB1bmRlciB0aGUgYnVnIG9uIHRoZSB3ZWIsIGFuZCBt ZSBub3QgZmluZGluZyBhbnkgd2F5IHRvIGZvcmNlIGl0DQogICAgICAgIHRvIGxvYWQgYWxs IG1lc3NhZ2VzLsKgIEFuZCBpdCBjb250aW51ZWQgdGhhdCB3YXkgdGhlIHdob2xlDQogICAg ICAgIG1vcm5pbmcuLi48YnI+DQogICAgICA8L2ZvbnQ+PC9wPg0KICAgIDxwPjxmb250IGZh Y2U9Ik1vbmFjbyI+Q2EtdGFzLXRyby1waHkuPC9mb250PjwvcD4NCiAgICA8cD48Zm9udCBm YWNlPSJNb25hY28iPldoYXRldmVyLjwvZm9udD48L3A+DQogICAgPHA+PGZvbnQgZmFjZT0i TW9uYWNvIj5JcyBpdCBjb3JyZWN0IHRoYXQgdGhlIGRpZmZlcmVuY2VzIGluIHlvdXINCiAg ICAgICAgYnJhbmNoIGFyZSB0aGF0IHNtYWxsP8KgIEkgc2VlLCBpbiB0aGUgc3VtbWFyeSBv ZiBNYWdpdCdzDQogICAgICAgIGVxdWl2YWxlbnQgdG8gImdpdCBkaWZmIG1hc3Rlci4uLiIg b25seSA8YnI+DQogICAgICA8L2ZvbnQ+PC9wPg0KICAgIDxwPjxmb250IGZhY2U9Ik1vbmFj byI+MTMgZmlsZXMgY2hhbmdlZCwgMTE0IGluc2VydGlvbnMoKyksIDc5DQogICAgICAgIGRl bGV0aW9ucygtKTxicj4NCiAgICAgICAgZG9jL2VtYWNzL2VtYWNzLnRleGnCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfMKgIDEgLTxicj4NCiAgICAgICAgZG9jL2VtYWNzL3Ryb3VibGUu dGV4acKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgNTkNCiAgICAgICAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLTxicj4NCiAgICAgICAgZXRjL05FV1PCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAyNCArKysrKysrLS0tLS0tPGJy Pg0KICAgICAgICBsaXNwL3sgPSZndDsgb2Jzb2xldGV9L2xvbmdsaW5lcy5lbCB8wqAgMSAr PGJyPg0KICAgICAgICBzcmMvYnVmZmVyLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHwgMTAgKysrKysrPGJyPg0KICAgICAgICBzcmMvYnVmZmVyLmjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA0ICsrKzxicj4NCiAg ICAgICAgc3JjL2NvbXBvc2l0ZS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqAgNiArKysrPGJyPg0KICAgICAgICBzcmMvZGlzcGV4dGVybi5owqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDUgKysrPGJyPg0KICAgICAgICBzcmMvbGlzcC5o wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDIgKys8 YnI+DQogICAgICAgIHNyYy9zZWFyY2guY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgIDIgKy08YnI+DQogICAgICAgIHNyYy93aW5kb3cuY8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDIgKy08YnI+DQogICAgICAg IHNyYy93aW5kb3cuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fMKgIDEgKzxicj4NCiAgICAgICAgc3JjL3hkaXNwLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfCA3Ng0KICAgICAgICArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tPGJyPg0KICAgICAgPC9mb250PjwvcD4NCiAgICA8cD48 Zm9udCBmYWNlPSJNb25hY28iPkknbSBvbiA8YnI+DQogICAgICA8L2ZvbnQ+PC9wPg0KICAg IDxwPjxmb250IGZhY2U9Ik1vbmFjbyI+PGI+SGVhZDrCoMKgwqDCoCA2NjcwNGZiYmNmIEZp eCB0eXBvIGluDQogICAgICAgICAgZTdiNTkxMmIyMy48YnI+DQogICAgICAgIDwvYj48L2Zv bnQ+PC9wPg0KICAgIDxwPjxmb250IGZhY2U9Ik1vbmFjbyI+VGhhdCdzIG9ubHkgfjEwMCBs aW5lcyBvZiBjb2RlP8KgIENhbiB0aGF0DQogICAgICAgIGJlP8KgIEknbSBzdXNwZWN0aW5n IHRoYXQgSSBkb24ndCB1c2UgTWFnaXQgcmlnaHQsIGFnYWluLsKgIE9yDQogICAgICAgIHNv bWV0aGluZy48L2ZvbnQ+PC9wPg0KICAgIDxwPjxmb250IGZhY2U9Ik1vbmFjbyI+QWxzbywg d291bGQgaXQgYmUgYSBnb29kIGlkZWEgdG8gcmViYXNlIHRoZQ0KICAgICAgICBicmFuY2gg b24gbWFzdGVyP8KgIFRoYXQgd291bGQgbWFrZSBpdCBwb3NzaWJsZSBmb3IgbWUgdG8gcnVu IHRoZQ0KICAgICAgICBicmFuY2ggT09UQiB3aXRoIEFTQU4uwqAgSSBkaWQgdGhhdCBsb2Nh bGx5IGhlcmUsIGJlY2F1c2UgSSBkb24ndA0KICAgICAgICB3YW50IHRvIGludGVyZmVyZSB3 aXRoIHlvdXIgd29yaywgc28uLi48YnI+DQogICAgICA8L2ZvbnQ+PC9wPg0KICA8L2JvZHk+ DQo8L2h0bWw+DQo= --------------l8Fc0bIxz6pthHFNrHPXCCxI-- --------------OfTjpuq9DiWGic8XItxy8ZiQ Content-Type: application/pgp-keys; name="OpenPGP_0x73EA1B1990C53E63.asc" Content-Disposition: attachment; filename="OpenPGP_0x73EA1B1990C53E63.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- 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 EcgRnndY+AgoHVZyVp5NW5c=3D =3DxjfX -----END PGP PUBLIC KEY BLOCK----- --------------OfTjpuq9DiWGic8XItxy8ZiQ-- --------------bR2WRyuFFfOFTupDIldoitBJ-- --------------Qa820hSIGsxEdSsTQf7G5xmw Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLVK30FAwAAAAAACgkQc+obGZDFPmPj ABAAo5zzu2uuqlkn2tZKjJZrPewceEbVnfeydwYvRHBM6aa6zaydgm4TZAmtoEchHQkM51r9MNh0 rL/a9BNCfg71/NyIavw3F7NAn8mzMCKy3wyvtPefCwRGIaPV5pJEvW36ICbaha71yzZV911sme12 +jtR51zkNNNpO5wGGtQ4CNePnQKqyB3rnqVsbx7Tg9Tnyw1Ajh6H0CyfDnseYSBmk66rwLxSENkl L8HrrzS8WQeK/PHQ/t6D5Vfm0GEvrtDYFl9RsFi8KetjZQEl68QHKeKchC9H4PCpNzJ70pNIjE31 XIgU5Ck9PQ26ijaUGh6JRttcK98OS3Z0X/7z24gDCzQJxWFVYR83pbQq5x9wma4m92wJnkCqerBY 1sj8EwZWY9yxaYGxNI6CiGWWiunnGcPuPaY7G2KtD/6a13FfVTboEh2eKzcqHiBpqPOW57y3HSIr 1nJ6nz8oCjrfcrgHywBkHqkXelViWw0fqYPWIcPleQpfnCo67dADAnRSF6fQGMRgM5ESUS07xP3Y AuNWTZ978X/wn10IrInd+ejrBrC3hLFC3cuxpObPWOr4FEPo6CWQXyqRd8gpTQ5qHX14IYRmbj0R IW/yanln3F/0KljfIALdO7A2oQL2EB8626qVHb790KhCN7y1Q4K0PvhTnqrWvApiIApqmVujy2/v /YU= =cOeM -----END PGP SIGNATURE----- --------------Qa820hSIGsxEdSsTQf7G5xmw-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 06:12:11 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 10:12:11 +0000 Received: from localhost ([127.0.0.1]:49206 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDNjX-00063q-Jf for submit@debbugs.gnu.org; Mon, 18 Jul 2022 06:12:11 -0400 Received: from mout.gmx.net ([212.227.17.21]:34403) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDNjR-00063C-HQ for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 06:12:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1658139118; bh=usd2LuRfE3hCxdPeJgRMc5IlBdjAvgIEmlpPdLFmiLI=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date; b=OLp/gPlzuTL6jrQfoyJYuPufO7GVCyalNDwweW6xm/tXvpr7aP7iwBagHO4b32kU0 CU0+YE0c9VZ1eSXA94hRjMb5w9ry2cAixOLB1rHMhr1BGN7Gw08+n98OWJs4JiEPoR EODW2V8s/kE3rWMbWlI54si8JhJkB/X7y54cKcqQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([79.140.112.19]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MxlzC-1nK2SG2nXi-00zH9i; Mon, 18 Jul 2022 12:11:58 +0200 From: Michael Albinus To: Gerd =?utf-8?Q?M=C3=B6llmann?= Subject: Re: bug#56393: Soon also looking at your branch In-Reply-To: ("Gerd =?utf-8?Q?M=C3=B6llmann=22's?= message of "Mon, 18 Jul 2022 11:44:29 +0200") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Mon, 18 Jul 2022 12:11:55 +0200 Message-ID: <87v8ru4tn8.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:/LkYP/BHULt3vPw/C0HAj2tUYEJVCu+85bjR1JOn4vuNIf/2Srw 9nmEoMmb1hp8al8eZ02JjgObowlGTbjMTsvhixIJnwAXuPcSocDC/GixiNYkDUJKPTqauyE JOYOli2st78yUgKBZxCfVhaNL8HrnooFa5D5FfDwvlb+ViM3Q2BtHYZw5eb0+p2LkBHrBT5 tT2HUVNFDY1vdRB06Pfkg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:ZJtXLW17QcQ=:5bjDcnAaEdtlkpg2NmOlzB ur8gfIrbkzGKkst9pSAIVwP6f599cpQ545sLg1mAOcUxFTKVNr0Y/gz+Mqi23Rqv6IgLuzk+H 3lxeYgiHBJFGXE0mrTbK/mWuFM7l01DRf9m4oQYEMFX7ZulOAsB/6oJWAYts0RqX8urCFO4yd Jrsgz5c9e3++4mKz2nXPYqG+Oy35cX+uqK9zHIQ78fnmvI/9lKMglSyM+xUFKJ1j370kP5Dw6 17TmBjN5UqT7IqTHGpxUh12bLXexdsZ0cjceYOA5XUQgmFT6diVQqXW+LFADdYNgsNGwVPPpI N2m/P+/EIV2j5NUNGiRYWR8rUhj9GL+MgmlvcH3NBAPCpq4DFcw9rjTH74vVib1JNEzQqESml Dh8Siyh49qTWv2UubDcgXbQKkczWbpvbt2lVomNKt1PHSGE9EN+DKRS/FHocvZKAyWMfMzLod sI0pJeCUkblBsgxVMiuIAkHy73Ie3lv84M87T6ZGWpqNyre7R29QN1unsmWrCloiChywvarFu vtsxOgKRLMkUmL0+pZFCJjUKBirujWDw1W0YtiwHHLukMZ1T/ckTkOzoHTRPvYbL5GQD/wsJ9 tt9AbUsAos859wBGm3xAoMp5149VIsm5u9G+YK86oTvjO8E4Qg5VXNPn0BJjIAT2uFL6/a4tC 1E83tw/4+KS8YPoV9m5tx1MBrbh4d0zI1rU4Kmnp5FxjzE9CEMT3y9TIaZeGzs3lUJlw/EpH2 StHwm4Cs4kqEsqP1hrzewYVbUnG49UX1WNzVzVKdVOTzJR/c6TAD7apwZs24N/c7WPF9GxbwH YbsMMv/5aA7I4tq7QJsp/Gg4Wx7vEhraIXWLdE0PED8ScI4g+K3DNCvBGGtYNEzRRZOuYeu7K 6Qdqo4Kv5sE0XjjtO4/SpwGAyuqiLfNwN1ycy/PxVK9n1UEupsu1I6vZ1OAhqptdJQ6vd1N7U lwmNjSHZomVzMtQx4oxo4h8cMN2HlBZfudDi0kw/X9l6msuWum42W4QmeJ+Strr4My95SVzBh AJ3G2uwbUmCUPGzH6EqxnBMCFV9YNlWrTQet/J/xDsOPj/RlAsJOJT+rYyUdWSuAWzgUrOtkU GzvA0n+nMAS0BWdoM+AN50Oh4seBMn0oiXiP/7hIPkBL0SNz6X+RwKUGw== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Gerd M=C3=B6llmann writes: Hi Gerd, > It started today by debbugs.el not displaying all messages under this > bug report that I can see under the bug on the web, and me not finding > any way to force it to load all messages. It's a long thread. Could you pls tell the message numbers (from the web) which are not displayed in debbugs.el? I'd like to debug it. Best regards, Michael. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 06:19:34 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 10:19:34 +0000 Received: from localhost ([127.0.0.1]:49210 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDNqg-0006Ez-ES for submit@debbugs.gnu.org; Mon, 18 Jul 2022 06:19:34 -0400 Received: from heytings.org ([95.142.160.155]:42290) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDNqc-0006Ep-3w for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 06:19:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658139569; bh=AX7pIOF9DSDqTbHHc+pxEqK5EesjugTR2aDsV3xQvcM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=XiASlS64FVjg+FSkAVY4MZrrlanLIMVDYY6FFgkWXcybX6fAW6QyyJYUX0hhaq1tR OoGI8jyFAT8uNumKnXskJdW6Ge+tAaPOtoH3MGtUDfGSgC2eGPscRVT21vKTxJv4wk QNknMwwYujoqisnKwHGr/AYIxM5Hs4YPev5w1PtAlw+321K59Uzq/+CFkpAy69OYTp fzKWNwUzsz9eZqNr+kEuvV5ZB96KIYaegHsY+zXM33nvAplqvXRE/IJgPSWRZJQSwv hAHuu8EQOi++7yt7CRbZrHOcFB5H6XXwlrJl0rEYfEn72ol3577z5v+MJEGxhlYhrC BLu/4nZ3JxodQ== Date: Mon, 18 Jul 2022 10:19:28 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83sfmzpw4e.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> I can't reproduce either of these two bugs with a regular build, both >> of these recipes produce the expected result. Are these segfaults due >> to --enable-checking? > > No, I don't think so. --enable-checking produces SIGABRT, not SIGSEGV. > Yes, I know, but it's possible that some checking causes a segfault. > > The segfault happens because it->bidi_it.bytepos is 1, and FETCH_BYTE > cannot be called with a zero argument. Here's a relevant portion of a > debugging session: > Thanks. With that indication, and after adding assertions in the code, I could make Emacs abort when that problem occurred. I pushed a fix a few minutes ago. But I'm still unable to reproduce your second recipe. I tried again and again, both with a regular and a checking-enable build, with and without the fix for the first recipe, and with various frame sizes... but without success. If you can still reproduce it with the fix, could you perhaps send me a backtrace? From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 06:26:26 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 10:26:27 +0000 Received: from localhost ([127.0.0.1]:49222 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDNxK-0006Z9-KS for submit@debbugs.gnu.org; Mon, 18 Jul 2022 06:26:26 -0400 Received: from mail-ej1-f42.google.com ([209.85.218.42]:37403) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDNxI-0006Yw-HL for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 06:26:24 -0400 Received: by mail-ej1-f42.google.com with SMTP id os14so20372064ejb.4 for <56393@debbugs.gnu.org>; Mon, 18 Jul 2022 03:26:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:content-language:to:cc :references:from:autocrypt:subject:in-reply-to; bh=MnNuYcC2QK3gGdVoR/9lInm1J3KGxSm2E6VF0+gagoo=; b=OHAxif5iMe0ZGzX78cV1Vt/SkkiH3G8YeyoWy7ZKapC63rKWfrvSNvQ5qInu1SkkCS W7E5cbbDzqc0nUHPnZCiALp8r703RDsb1ihL5NXQe/roJgGcySaBp4XH8Wlo6FfTWF/L n2GPofeEImFKwwtv+c+wqlHBUUgkpqrPE/kMxH9kzXREy88l8fvWWFjsQTGGxALKtuRC WpDOfohmgJVXe3Ry1WLPCjW+hiPTrhjyCJY2fuBi0HYlOs5X1hFyo6hK6fy2TqvAoOci SIiToyHxirr8HWyGcbj3K7F7TAVH57vESvx4lfVwEG/c8jHWGDMNttE54jtYndSgFNpL /nUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:cc:references:from:autocrypt:subject :in-reply-to; bh=MnNuYcC2QK3gGdVoR/9lInm1J3KGxSm2E6VF0+gagoo=; b=EXcjUiB0hVt325a33ogHd3aiDNjV3nZezYaB05rrnIzbNBGHbbgK84bvJWdVc37ecb oB52Cm+5C4qkszX0stlsQB0fqPfFfW6zN7poyTzoIn5xvTdarHHuCD04YtlbO1NcWcH1 xwZcLml/kCfZoh6SNjNaRYZuqX+7cZVvQacnGUYqSL+MwWWLr5rl1DBk7gB+NbETHNeZ BQdl+xA+IgYhKR2Pi7VsYStSpTYf/EV9+bkWuiDVjtxsbOlpoRvSyYo0erGlvxwAuuZz zEgcuTV42PZSyBDey2sm6g0zpqpVsybhvSztuNa43ZQ3Wma46agvx7hcUh9qJT2kaDJ9 ib/w== X-Gm-Message-State: AJIora+gbUPJ56vGXfasN1MNgsWtJwkBZBgILUjfJrGA+qoPRRVPO+bM tHYTsDEPsf6jiYYvgfBq08A= X-Google-Smtp-Source: AGRyM1v/xQcO5RdHDhiX+sSz9KAmg0029ywROtBgv2MPs7YouWsbtmYe6g9gYKJomL9drbVa2gEYqg== X-Received: by 2002:a17:906:58c7:b0:722:f4bf:cb75 with SMTP id e7-20020a17090658c700b00722f4bfcb75mr25510140ejs.450.1658139978598; Mon, 18 Jul 2022 03:26:18 -0700 (PDT) Received: from [192.168.178.21] (pd9e36932.dip0.t-ipconnect.de. [217.227.105.50]) by smtp.gmail.com with ESMTPSA id b18-20020a170906d11200b0072b4e4cd346sm5288434ejz.188.2022.07.18.03.26.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 18 Jul 2022 03:26:17 -0700 (PDT) Message-ID: <51d7ac86-2b29-fe77-4183-ada84192fac2@gmail.com> Date: Mon, 18 Jul 2022 12:26:17 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Content-Language: en-US To: Michael Albinus References: <38c1a31040d2d2bc47ae@heytings.org> <87v8ru4tn8.fsf@gmx.de> From: =?UTF-8?Q?Gerd_M=c3=b6llmann?= Autocrypt: addr=gerd.moellmann@gmail.com; keydata= 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 Vp5NW5c= Subject: Re: bug#56393: Soon also looking at your branch In-Reply-To: <87v8ru4tn8.fsf@gmx.de> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------ACrp7qpSbP66dqDaPD2vdodA" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------ACrp7qpSbP66dqDaPD2vdodA Content-Type: multipart/mixed; boundary="------------mJ1s5deBS5kz305r0zXTuJeo"; protected-headers="v1" From: =?UTF-8?Q?Gerd_M=c3=b6llmann?= To: Michael Albinus Cc: Gregory Heytings , 56393@debbugs.gnu.org Message-ID: <51d7ac86-2b29-fe77-4183-ada84192fac2@gmail.com> Subject: Re: bug#56393: Soon also looking at your branch References: <38c1a31040d2d2bc47ae@heytings.org> <87v8ru4tn8.fsf@gmx.de> In-Reply-To: <87v8ru4tn8.fsf@gmx.de> --------------mJ1s5deBS5kz305r0zXTuJeo Content-Type: multipart/mixed; boundary="------------jgz7l17y2wAW7do7dGgT2CzM" --------------jgz7l17y2wAW7do7dGgT2CzM Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 DQpPbiAyMi0wNy0xOCAxMjoxMSAsIE1pY2hhZWwgQWxiaW51cyB3cm90ZToNCj4gSXQncyBh IGxvbmcgdGhyZWFkLiBDb3VsZCB5b3UgcGxzIHRlbGwgdGhlIG1lc3NhZ2UgbnVtYmVycyAo ZnJvbSB0aGUNCj4gd2ViKSB3aGljaCBhcmUgbm90IGRpc3BsYXllZCBpbiBkZWJidWdzLmVs PyBJJ2QgbGlrZSB0byBkZWJ1ZyBpdC4NCj4NClRoaXMgb25lIGRvZXNuJ3Qgc2hvdyB1cDpo dHRwczovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNnaT9idWc9NTYzOTMjMzY1 DQoNClRoZSBsYXN0IGxpbmVzIG9mIHRoZSBhcnRpY2xlIGxpc3QgSSBzZWUgaXQ6DQoNCiDC oC7CoCAyMDIyLTA3LTA2IDE2OjEzwqAgRWxpIFphcmV0c2tpacKgwqDCoMKgwqDCoMKgwqDC oMKgIOKUgsKgwqAg4pSCwqDCoCDilbDilrrCoCAoLTEpDQogwqAuwqAgMjAyMi0wNy0wNiAx NjoyN8KgIEdyZWdvcnkgSGV5dGluZ8KgwqDCoMKgwqDCoMKgwqAg4pSCwqDCoCDilILCoMKg wqAg4pWw4pa6wqAgKC0xKQ0KIMKgLsKgIDIwMjItMDctMDYgMTg6NTPCoCBFbGkgWmFyZXRz a2lpwqDCoMKgwqDCoMKgwqDCoMKgwqAg4pSCwqDCoCDilILCoMKgwqDCoCDilbDilrrCoCAo LTEpDQogwqAuwqAgMjAyMi0wNy0wNiAxOToxN8KgIEdyZWdvcnkgSGV5dGluZ8KgwqDCoMKg wqDCoMKgwqAg4pSCwqDCoCDilILCoMKgwqDCoMKgIOKVsOKWusKgICgtMSkNCiDCoC7CoCAy MDIyLTA3LTA2IDE5OjMwwqAgRWxpIFphcmV0c2tpacKgwqDCoMKgwqDCoMKgwqDCoMKgIOKU gsKgwqAg4pSCwqDCoMKgwqDCoMKgIOKVsOKWusKgICgtMSkNCiDCoC7CoCAyMDIyLTA3LTA2 IDIzOjUzwqAgR3JlZ29yeSBIZXl0aW5nwqDCoMKgwqDCoMKgwqDCoCDilILCoMKgIOKUgsKg wqDCoMKgwqDCoMKgIOKVsOKWuiAoLTEpDQogwqAuwqAgMjAyMi0wNy0wNiAxMTo0OcKgIC0+ IEdyZWdvcnkgSGV5dMKgwqDCoMKgwqDCoMKgwqAg4pSCwqDCoCDilbDilrrCoCAoLTEpDQog wqAuwqAgMjAyMi0wNy0wNiAxMjoyMcKgIEdyZWdvcnkgSGV5dGluZ8KgwqDCoMKgwqDCoMKg wqAg4pSCwqDCoMKgIOKVsOKWusKgICgtMSkNCiDCoC7CoCAyMDIyLTA3LTA1IDE3OjIxwqAg Um9iZXJ0IFBsdWltwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDilbDilrrCoCAoLTEpDQoNClRo ZSAtMSBpcyBzdHJhbmdlLCB0b28NCg0K --------------jgz7l17y2wAW7do7dGgT2CzM Content-Type: application/pgp-keys; name="OpenPGP_0x73EA1B1990C53E63.asc" Content-Disposition: attachment; filename="OpenPGP_0x73EA1B1990C53E63.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- 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 EcgRnndY+AgoHVZyVp5NW5c=3D =3DxjfX -----END PGP PUBLIC KEY BLOCK----- --------------jgz7l17y2wAW7do7dGgT2CzM-- --------------mJ1s5deBS5kz305r0zXTuJeo-- --------------ACrp7qpSbP66dqDaPD2vdodA Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLVNUkFAwAAAAAACgkQc+obGZDFPmOv VRAA1m5nzDAocjSFaXBwTpyI5dhqRhKeXm7AmrfHLlN8O7QgU7DVo0QQzGgQSsvgY6mFJaYFXmnX JJJH93JZMD0fsfDg0yFrCfUQnssjDcWzWTh4rRNp9xam5p9zgXtdJl+axz7cpRWwxfGmc959LB4H R1P05cPfqLqM2kok5nOq32//EU835YS/ZBUtiNZL62utIk/lFuY66VGIy7N09UFhdGfCeoJNYVNA /Vudxbjzy9dz3ATVd77pNmsSPH/Bd/0AoZxPnp5RH0CUqAP+K6NxRklzJqwbTWNZBi0AQP7UW+kJ Nybs1QP5YojdfKz/kEcvvTRYMX8msT9axIrIJgvUebAbRfApKasE5732Ttl5UC/TUCLlPmQvMh5q xkAZgVGqcpU/U8oIjE2yW8aJAY428K0wHPBz4lqjSmPy1SAj2UlksVdu7uUCs6WNgipGp84u4gHi iR58hDB34FVcnR9eJA6+CdDb/tdusZJd0PBtYcz7COfDygn0GrhoQACpU/q8Z1IgValmpWNigYXB 8Lo8f/4rOsIS5/yClLzIf8dArg9Do2ds7g66EZXXU6YkLMECdDXdpB/HnWil7SZRLXkyCIq9g8MZ DdCqwumtrMeeHKJ121pKErrvIa1kUiFLgBEvP1ll1KAMiJds1v6IszbgtQbaLA1ucv1+Ckk5gdsl 3nA= =Riny -----END PGP SIGNATURE----- --------------ACrp7qpSbP66dqDaPD2vdodA-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 06:49:48 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 10:49:48 +0000 Received: from localhost ([127.0.0.1]:49264 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDOJw-0007Fn-7O for submit@debbugs.gnu.org; Mon, 18 Jul 2022 06:49:48 -0400 Received: from heytings.org ([95.142.160.155]:42320) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDOJu-0007Fd-E4 for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 06:49:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658141385; bh=4DJ26UEEoRYduO1wPBlFvCY71i5rVfszrhVKAuWb5zM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=CgY1ESnCYIsMZRiK7ratsYKUqpOa/N3tzQa7QZkAS+uZN7wAMatMpc/gTeFG80l+0 cTewAhnkhz0YHOCykoru+pxSc5RnPiljq6C8zYtdyHWMummnY4Q0O39FlHqGjS0A76 90NmZoAr+uqXezrF+hZuHhlmoqp8meWZZlag0OZ7Tumna8AneLFhMk3up+LrmXQNzS IhsxZOKmWwvxU3Vt66BeaycX2al+Sb7oqCbWZYuE6ubNvmmaB8wlWytA4sjukDOV/P 8teMzZffTV5duYdJShXkJyXFxRdNrx2QCwiA2YaC68rtZqcvbJcIWZsSAhoHi8QZN6 HvghGCfD+GYLA== Date: Mon, 18 Jul 2022 10:49:44 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Soon also looking at your branch In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="X9YyZr4wqE" Content-ID: X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --X9YyZr4wqE Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Content-ID: >=20 > That's only ~100 lines of code?=C2=A0 Can that be? I'm suspecting that I= =20 > don't use Magit right, again.=C2=A0 Or something. > You're using Magit right: it's indeed a small fix. Your comments would be most welcome, of course. --X9YyZr4wqE-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 07:43:44 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 11:43:44 +0000 Received: from localhost ([127.0.0.1]:49363 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDPA8-0002M0-Ct for submit@debbugs.gnu.org; Mon, 18 Jul 2022 07:43:44 -0400 Received: from mout.gmx.net ([212.227.17.21]:51211) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDPA6-0002Lm-8U for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 07:43:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1658144615; bh=sYD5o05CZ7NuQxCKhrbyRGmv8OFNtFLzL06vJfwe92Q=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date; b=X9B1Uk+ked9+Wne1YiFQ1bCL1NjLVbEpVFBo1pTkmPJQsDJgRm6Hf2qbIGPsvILz/ Ht6qwjEufPEnotG3rmSISWPoTffmWVz9+gpg437J8rfNef7aoeM8z+kA20LXPXkqgw WkJO2lzGlIuB6vGh/dpvke0qWeyIlDlg5bmpk488= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([79.140.112.19]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MwQXN-1nLITB3boj-00sOLP; Mon, 18 Jul 2022 13:43:34 +0200 From: Michael Albinus To: Gerd =?utf-8?Q?M=C3=B6llmann?= Subject: Re: bug#56393: Soon also looking at your branch In-Reply-To: <51d7ac86-2b29-fe77-4183-ada84192fac2@gmail.com> ("Gerd =?utf-8?Q?M=C3=B6llmann=22's?= message of "Mon, 18 Jul 2022 12:26:17 +0200") References: <38c1a31040d2d2bc47ae@heytings.org> <87v8ru4tn8.fsf@gmx.de> <51d7ac86-2b29-fe77-4183-ada84192fac2@gmail.com> Date: Mon, 18 Jul 2022 13:43:31 +0200 Message-ID: <87fsiy1w9o.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Provags-ID: V03:K1:Cfhe5RteBbHCW7i6w/1WB2v15P6rIlBwFPXUcNXYD3+udlkjXKJ B0eCoKYInxKawkNdqBy+TGgYSOQ/38ygZCh7fhDX/r0vho9Fbji89NxAjTUYCTJaX/PKG9L J0Ec+gHaGokGStV4Lpl97BsT4gQxUy9hUzxT7lCuKaob/Hh0WkH0aw04Rjqu8PL68yDijwb sqmZlm8Y6gwIbWIGKd0DA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:v52fickNFVs=:0s9UtMxqknIRextuIWf9VS CNfPlNPx+ru5jBjgGPNbUNDp4+/oAAxRQck2Y5ubTUZsmhVwRS3NsPueyLKjgvvMS6gJy7p8V fINNhKv7Z2g/ZeLvnWho2HLUN8kHpHgsqeJZrk9pRZbeNkHdpNjLeVr08oNUaqJPGPbH3FAuh IAizTDy8DKyHjBOuvB6MnaoRlUuXsSEdDTY399kBEs5ESWjnMjMAR6ALkcs7na9XnJffd5IcA 4uN5nvYx+eQ/Rs0/ytHgiMMsKQlgNecUqZBso7WeBHtTTZIGSFaNtrJndfpL6eR0/qLRnJhm/ X1J/sHXbcDNYjlz6VS/+u4bRBDAnaOmVJVktyEMFGoSbJMS6wQwrY2w0p28mgeHrdWXQjxYK9 qUuqCx0uVzt41t9VBmqg0jE4XHXuk6RExiJGRQ5ws/W7pHcdWYeMQ5KzmigruMspqNYg5hNFe ciwHAiRnwwQ52ZRkqkVJhaRsA/zdWqRYcjActVFcTzHmql+OwfaAQ3FlA94c4z76Ue4cKzwyF C6W2CnrRqFg+iNgcxkiss54zUCnXYygELNmy13CNsr/tHjd3tB5aEEKfmrgjJUe6BuT05Cpd2 rBBX+xm6V003goEa9fxStv0YhkGw5x0DIAJqD9l7Uc5zSsY9Rubn1I4LMDHuhEMNv2/2i7W7g NMk/Mv69BlCnzmiM5iGFrGPMVa7XUATNCWv8AZJh7Ge06sYt2syZ37FytkQxgfIALuLrZHt06 lfKiSltPYkNYgyj0GqNxeAogR8wCuCSZ0AKxY7Xzvq3f1cgP9gjSo0+thC+kXITsmOhxEDvhJ LG3V8WxWvdeNI1F5Dh/BpkJMXOLltFqVfOekxmNsghScgHTk2ck2e/lMHRGgHPedh5J3dQq+k qdD5LLAyQWwbLBEnOqMmnUGztxJntwKStAXQCcdnS8W8HpB1Fl033r+KQIQie08/bRSHzSbm/ JmZ975izHtpYagtrbqmeoTjTtNIbcjJdcn5gheAdHR79BpKD6DaRoFTKvNGZ46DyxEDJfy+I/ +rAu568bLDioGHa3qc8SQG/x4kjNYkhY+AIzrDC8M/5lyaF7v9kHP53/uj6nwrFjrBUatptcc W4BFQBEblxPt59fd0LfF02dmWbkPBFx0jQJJB9863xCvS61qk9hJoc3vQ== X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 R2VyZCBNw7ZsbG1hbm4gPGdlcmQubW9lbGxtYW5uQGdtYWlsLmNvbT4gd3JpdGVzOg0KDQpIaSBH ZXJkLA0KDQo+IE9uIDIyLTA3LTE4IDEyOjExICwgTWljaGFlbCBBbGJpbnVzIHdyb3RlOg0KPj4g SXQncyBhIGxvbmcgdGhyZWFkLiBDb3VsZCB5b3UgcGxzIHRlbGwgdGhlIG1lc3NhZ2UgbnVtYmVy cyAoZnJvbSB0aGUNCj4+IHdlYikgd2hpY2ggYXJlIG5vdCBkaXNwbGF5ZWQgaW4gZGViYnVncy5l bD8gSSdkIGxpa2UgdG8gZGVidWcgaXQuDQo+Pg0KPiBUaGlzIG9uZSBkb2Vzbid0IHNob3cgdXA6 aHR0cHM6Ly9kZWJidWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTU2MzkzIzM2NQ0K DQpUaGlzIGlzIE1lc3NhZ2UtSWQgPDgzdjhydnB4eDcuZnNmQGdudS5vcmc+LCBJIHNlZSBpdCBp biB0aGUgZGViYnVncw0KbWFpbCBidWZmZXIuIFNlZSBhdHRhY2hlZCBzY3JlZW5zaG90Lg0KDQpX aGljaCBtYWlsIGJhY2tlbmQgZG8geW91IHVzZSAoZGViYnVncy1nbnUtbWFpbC1iYWNrZW5kKT8g SSdtIG9uDQpnbnVzLiBCdXQgYWxzbyB3aXRoIHRoZSBybWFpbCBiYWNrZW5kLCB0aGF0IG1lc3Nh Z2UgaXMgdGhlcmUgKHNlZSBzZWNvbmQNCmF0dGFjaG1lbnQpLg0KDQpEbyB5b3UgaGF2ZSBhc3Bl Y2lhbCBnbnVzIG9yIHJtYWlsIGNvbmZpZywgd2hpY2ggc3VwcHJlc3NlcyBzb21lDQptZXNzYWdl cyB0byBiZSBzaG93bj8NCg0KPiBUaGUgbGFzdCBsaW5lcyBvZiB0aGUgYXJ0aWNsZSBsaXN0IEkg c2VlIGl0Og0KPg0KPiDCoC7CoCAyMDIyLTA3LTA2IDE2OjEzwqAgRWxpIFphcmV0c2tpacKgwqDC oMKgwqDCoMKgwqDCoMKgIOKUgsKgwqAg4pSCwqDCoCDilbDilrrCoCAoLTEpDQo+IMKgLsKgIDIw MjItMDctMDYgMTY6MjfCoCBHcmVnb3J5IEhleXRpbmfCoMKgwqDCoMKgwqDCoMKgIOKUgsKgwqAg 4pSCwqDCoMKgIOKVsOKWusKgICgtMSkNCj4gwqAuwqAgMjAyMi0wNy0wNiAxODo1M8KgIEVsaSBa YXJldHNraWnCoMKgwqDCoMKgwqDCoMKgwqDCoCDilILCoMKgIOKUgsKgwqDCoMKgIOKVsOKWusKg ICgtMSkNCj4gwqAuwqAgMjAyMi0wNy0wNiAxOToxN8KgIEdyZWdvcnkgSGV5dGluZ8KgwqDCoMKg wqDCoMKgwqAg4pSCwqDCoCDilILCoMKgwqDCoMKgIOKVsOKWusKgICgtMSkNCj4gwqAuwqAgMjAy Mi0wNy0wNiAxOTozMMKgIEVsaSBaYXJldHNraWnCoMKgwqDCoMKgwqDCoMKgwqDCoCDilILCoMKg IOKUgsKgwqDCoMKgwqDCoCDilbDilrrCoCAoLTEpDQo+IMKgLsKgIDIwMjItMDctMDYgMjM6NTPC oCBHcmVnb3J5IEhleXRpbmfCoMKgwqDCoMKgwqDCoMKgIOKUgsKgwqAg4pSCwqDCoMKgwqDCoMKg wqAg4pWw4pa6ICgtMSkNCj4gwqAuwqAgMjAyMi0wNy0wNiAxMTo0OcKgIC0+IEdyZWdvcnkgSGV5 dMKgwqDCoMKgwqDCoMKgwqAg4pSCwqDCoCDilbDilrrCoCAoLTEpDQo+IMKgLsKgIDIwMjItMDct MDYgMTI6MjHCoCBHcmVnb3J5IEhleXRpbmfCoMKgwqDCoMKgwqDCoMKgIOKUgsKgwqDCoCDilbDi lrrCoCAoLTEpDQo+IMKgLsKgIDIwMjItMDctMDUgMTc6MjHCoCBSb2JlcnQgUGx1aW3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIOKVsOKWusKgICgtMSkNCj4NCj4gVGhlIC0xIGlzIHN0cmFuZ2UsIHRv bw0KDQpJbmRlZWQuIElzIHRoaXMgZ251cyBvciBybWFpbD8gV2hpY2ggY29uZmlnPw0KDQpCZXN0 IHJlZ2FyZHMsIE1pY2hhZWwuDQoNCg== --=-=-= Content-Type: image/png Content-Disposition: attachment; filename="Screenshot from 2022-07-18 13-29-36.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAB4IAAAPzCAYAAABSrsGHAAAABHNCSVQICAgIfAhkiAAAABl0RVh0 U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAudEVYdENyZWF0aW9uIFRpbWUATW9uIDE4 IEp1bCAyMDIyIDAxOjI5OjM2IFBNIENFU1QUxW6OAAAgAElEQVR4nOzdd1xV9R/H8deFe9kICE4U RcWtufeeaZmmmZqpqaWWlqUNK0eZuVIrV+6ZZZmjX8OdaZoDt2WaAwXBhQtUltz7+wO9iQL3gghG 7+fjcR5yz/me7/fzHfd7uX455xiAioiIiIiIiIiIiIiIiIiISI5hBIiLjT2Q3YGIiIiIiIiIiIiI iIiIiMiDc3ZxecwIcC4iLLtjERERERERERERERERERGRTGIEwGLJ5jBERERERERERERERERERCSz GAG0DCwiIiIiIiIiIiIiIiIiknM4ZHcAIiIiIiIiIiIiIiIiIiKSubQQLCIiIiIiIiIiIiIiIiKS wyQ9I1g3hxYRERERERERERERERERyTGSFoK1DiwiIiIiIiIiIiIiIiIikmMYQevAIiIiIiIiIiIi IiIiIiI5iZ4RLCIiIiIiIiIiIiIiIiKSw+gZwSIiIiIiIiIiIiIiIiIiOYyeESwiIiIiIiIiIiIi IiIiksPo1tAiIiIiIpJhkZcuE3npcnaHIdlE/S8iIiIiIiLy6DKCLggWERERERHo3LMPri7OzP9i ivV1Lk8PZk2elGL6mJhYXh70Ng4GAwtnTsPZ2Skrw2XfwUNs2bad0LAzhEecxdvbi0L+BalTozqN G9TDYDBkaTyp2b4rmHGfTqHzM0/TucPTdp1zb18A/LxuA9//tIaYmBgaN6hHz+e7JDsnPiGBw38d 5YMx4xn69iAqV6yAo6NjsjQr/vcji77+FoChbw2iWpVKdsUTFxdPYuItXF1dre2a3v5PqU7ZLSN9 86h4FNvzQdiqj635KDO9M3wkUdHRfPHpJwCMHDuBkNOnk8U2ctwE9u4/eN+5n40dRdEiAQBERUWz aOm3/H3sOOcuXCS3jze1a1Sjx3OdiYqKZvX6jezcvYez58/jZHKiTKkgunV+Fv+CBYCk99iSb78j eO8+bty4SYnigfTq1pWAQv7W/G3lYc+8ICIiIiIiOdftK4It2rRp06ZNmzZt2rRp+89vd6T2Ovnm 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 GfPXb9y8b3yD7fkorbnFnjnA3rHl7e1Fw3p1uH7jBvsO/oGTyUSj+nUZ88H75MqVCwtQv25t3ujf j/z587IzeC8YDLzY43natWmNBShcyJ96tWty9VoUwXv3ERUdTdVKFRn5/juUL1eGqOs3KFG8GOER Z9m2YxdOTk506tCOke8PweDgYFceGfms0KZNmzZt2rRp06ZNW87ZAAxAxeNH/zyAiIiIiIjIv8CG TVuYMW8hefx86fpsB4KKFyO3jzcXIy8RFh7+z+KODWs3bmLmvEX069WDFk0bPdygRdLhud79yOXp yYzPPsnuUHI0zQEiIiIiIpKTlShV7rGkW0NbbKQUERERERF5RDRr1ICAQv5MmzOfSVNnJDvm55ub 6pUr4+DgcN95iYmJON5+1i1gvbVsQOFC+k4kjyaNy0ylOUBERERERP5r9IxgERERERH51ylZohif j/2Iq9eiOB0Wxs2bMfj5+lI8sAgODgZS+o6z4dctbPh1CyVLFCP0TDh//nWUiuXLUjqoeIrpRbKf xmVm0hwgIiIiIiL/NcbsDkBERERERCSjvL1y4e1Vzq60uTw9SEhIYOPmrXh75aJ1i2Z0fbb9Q45Q RB4VmgNEREREROS/xgBUPHbkDz0jWEREREREREREREREREQkBwgqXV7PCBYRERERERERERERERER yWn0jGARERERERERERERERERkRzGIbsDEBERERERERERERERERGRzKWFYBERERERERERERERERGR HMYIujG0iIiIiIiIiIiIiIiIiEhOkvSMYIuWgkVEREREREREREREREREcgrdGlpERERERERERERE REREJIcxAoSHhmR3HCIiIiIiIiIiIiIiIiIikkmMADXrN83uOEREREREREREREREREREJJPo1tAi IiIiIiIiIiIiIiIiIjmMFoJFRERERERERERERERERHIYLQSLiIiIiIiIiIiIiIiIiOQwWggWERER EREREREREREREclhtBAsIiIiIiIiIiIiIiIiIpLDaCFYRERERERERERERERERCSH0UKwiIiIiIiI iIiIiIiIiEgOY7Q34bCRo1i/8Zf79jdp1JDRH47guRd68Xjz5nTv2gWAnn1e5um2bXjqidaZF20G 4qtSqRLTP5+U4jkJCQnUb9aS5V9/iX/BgvfVIT4+HrPZgouLc6bGajabWfzVUn7b9jsnT52iYIH8 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 7tLxGcZN/JSQU6cYN2okL3TrirOzExM/n8r58+fJnduH57t0tusZlfZavup7lq/6Ptm+KpUqMf3z SQAMHvgan02dxqAh72EyGnmi1eO3r3ZKWasWzfl9x0669OhF1cqVmDDm4weO0dXVlXkzpjN7/kJm zZ1PWHg4RQMCqFm9Gr1f6H7f1XDVq1Vl6oyZRF66RIVy5fhi8qeYTEa74xs88FWmzpjFO+8P41bi LWpUq8ZnE8bZ9Xzk6OvX2bR5C9NmzuLGjZsUCSjMmI8+SPu20um0bMUqlq1YBSQtTpUoXoxxH4+k ZIkSAAx4uS+jxo6nS/ee+Pn50aZ1K5xSuGLQloyMv6yof1ps9Z2t43e/B1975eVsrUtq0uqXIgGF 6d+vD7PmLeCL2XOpUbXKfQtomfUefdD5KbPnivUbN9G8aRMcHO7/W51mTRqzZOm3vPn6wAeK5/13 3mLS5Kn0fXUgtxISCAoqQYnixXB1dc2W+duWtMa7rffqw5jLjUYjUz+dyLIVK9jwyyZmzJ6Lg6MD gUWK8vRTT9qMOavY8z6yJa3PzuyeJ+9ma5zeO64h7c9YERERERERERERkX87A1Dx5o3rtu8zKlmu Z5+XebptG556onV2hyIiIpKj6DNWREREREREREREcjI3d4/HsuQZwSIiIiIiIiIiIiIiIiIiknW0 ECwiIiIiIiIiIiIiIiIiksNoIVhEREREREREREREREREJIfRM4JFRERERERERERERERERHIQPSNY RERERERERERERERERCQH0kKwiIiIiIiIiIiIiIiIiEgOYwQ4e+5cdschIiIiIiIiIiIiIiIiIiKZ xAiQJ0/eNBN5ntueJcGIiIiIiIiIiIiIiIiIiOR00flrp3n8+PHjD1yGbg0tIiIiIiIiIiIiIiIi IpLDaCFYRERERERERERERERERCSH0UKwiIiIiIhkmNlsSfP4gSMnKVC3M8GH/s6iiERERERERERE BLQQLCIiIvKfdulqFHlrPUvPIRPpOWQiK9Zty7S8gw/9TbMeQyhUvytlHn+RleuT551w6xZ9h31O UPOeFGvSg8FjZmGxpL2omF7zvltLlXb9yV29A42ef4udB45kav6PMlOZ1oSfj7S+Xr52K/W7DM7U Mg4eDaFlr3fTTFMgT246tKhPofx+mVr2f90nc5ZZ37fFmvTI7nBERERERERE5BFkzO4ARERERCR7 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 VrKkXEjXCg2VESFPi47O29Sjhe2jj2R0Z9euMnpj6VL91HYxMTJC8vJlGe0WFSXBiqend86J9jmN 2qmMn35Gp6nlawNe4eF520btM2Br19ZPmVgQjG2/NuCmHW2bmCgXI9Vq2e+KFZOgU1iY4XMzExLk v62tjBbp2VMuVJYvr5+CEtBfcC1TRvZNjUb/lzkIpO3vpCQZOalUZh90fZqp5Vsif3YjFC21/xjb P7Lrn1Kl9BekHzzIufzcji93d3kurIODjGqrW1cCXTNm6PMfOqSv/9Ej+a/tGz8/GWXs4SFBLz8/ GQ2emKg/Fx07JhePixfXT1l88qS+/OhoCba1aiWj1iMipB1axvLnR8mS0nbtM3fj4oAzZ2QUlaV8 951s15kzMvLWXElJ8nzow4dl5F7m54Pevi0j2d55R/p/zRrZp3//3TJtN3Z+yCy748Oc42v0aPmc r13TP9OyoPzzj9zssHWr4QwH2VEoDKc+37hR9p9Hj2TfL18eaNNGyiwoPj76qYJzU7asBOW2b9cv 8/WVkf5HjwJffy3neXNGlJuTP7v6tZKS5OYe7cjR54mp/VuzpvTBn3/ql1lb68+bgOV/o3XvLn97 9wIzZ5o/44haLZ/JunUSvO7ePe83rAFyw1GFCvI5enjI/7175WYk7d+//+acPygo641AuaUb61/t s4EnTpTP5eBBw6C+Uik3nZw4IdMcp6YCgwZlrbcg9s/cjo/cft/ndv7K7/Gt9dNPEqB+Wn73Py0r K7nJlYiIiIiIiIjoZWNyILh1a+CrryT4Fh4OfPNN1tFV8fFyETqnUR/Ps7lzZZTHokUy/auXlzxn FJD/8fESoNm9WwKM2ulcTfHGGxIM3bNHAijNmhmmm1p+jRpy8XDnTpmacNw487ZR+wzYf/6RgE5B Mbb9tWrJKJGzZ4HOnSWglJoqIwqtreWC8LBhsm6rVnKBtFEjKevpYGetWvrphrW8vaXcW7dkpOXk yTLSZfFiw/Vu3JBRqM2ayQXP7t1NG3VjavnPKr+l9h9j+8eNG/rPJzpa2mhjIxd5bWzk82veXP6e voif2/GlVsuUmz4+MmI1OVlG5WoDxZcuSZ0BAdLujh1leY8e8l+plADemTPy+Q0ZIq/feUfadeqU 7C+1ask0utogpvZicWqqfqRS//4yGsrOTt8/xvLnl1ot5Z45I0Hmd9+VYOfgwZYpX1tHo0ZygT44 OGv62LHyXFnt6NuvvpL3aWmyX7VqJTcZlC0LnDsn7f3kE1m3aFEJwK5ZIyNqp0+X6ZkrVLBM242d H4wx5/i6c0fqq1DBMlNym+rECQm0b94sI/Mze/RI2qsd2RwcLNOea4+D336TANq8eTJlb0iILA8K Mh5QtqSyZeUGEu0NIVqPH8sxdeOGvL99G/j5Z7nhROvIEf3NJwcOSPrTgXiNRs4PnTtnrTu3/KbU r7VvX9bvp+dFTv2blib9sn69pD96JDcGZB5FXr687CNJSXKDhnYGDUvR3hgEyLH/9POBTfHRR7IN mzfL1PB5dfy43Eg0fbq8VyjkN8PgwfpRog8fZg0Eb90q/RMTIzM+PD2COLd0Y/27apV8d23aJFPo Pz3F94QJciMXIDenVKqU/Y2Gz2L/NPX4yO33fW7nL8C049sU/v7Zj0q2xP4HyG+Z3bul780Z8U1E RERERERE9Lwz+VL39Oky7aSvr4xUa9cu67Rx1taSnnnKuxdFhw5yYXDgQBnV8N57ctHr8mW5+DRl ilzk27ABqF9fghGmsreXIFv16hJUev11w4tlppbv5SXT0hYtKhf/z50zfVQyIBfQK1SQC8SNG5ue L7+Mbb+VlUxz2qOHBCCDgyUIl/n5z9Ony0gSBwe5WBwdLUGzp7d/5UqZEvVpa9ZIsPDePQlWBQVJ 0CSzMmVkJOilSzJy1dRArKnlP6v8ltp/jO0fvXtLv2v7R/t8RWdnCUy5u0sg7csvs14Mzu34AmS0 t3YazMyvAQkgz58v55dt2+Q8NGeO4bS9kyfLMyVPnZKL7d27y/TEgOxv06fLdJybNsmIptGjJXAG SKDgvfek/375Rc5vx47pR5say28JM2bIc3b375eZF775Rs6xlhYVlf1zQ+fPl+NNO+JwzRp5n54u AVjtNNxBQfK5f/+9jPACZHTaH39I4H7KFEnv2FFGb1mCKecHY0w9vqytTXvutSUlJMjNE9HR0m9F i8qf9oYD7eveveWYadZM9v2ePSW9dm3gxx9lhLCzswRkmjaVbXz6Zq1nSaGQYN6cOYbL3d1lX+7f X2YQaNgQaNDA8Dx98aKct3x9ZUrcPXuyn01BqZSRipGRhstzy29K/YCcC+fMyX4k5vMgp/5VqWSG hZ9/lvN3lSpyI8nKlfp1FiyQfcTfX84xs2ZZtm1LlgCzZwNVq8p5OC996OUlAdCEBP1NQOZo21a+ N0aPlvNn1676tJkzgTp15IaSypXlmbL37hnm9/OTWSAqVZL1nt4/cks31r+dO8t3X4kSUk7VqnIj S1KSpNepI+VVrChB5RMn5DPNLD/7Z/fuUu+IETIi2c9PjgPA9OMjp9/3xs5fgOnHd15ZYv8DZMT2 vn3SD0OHWq59RERERERERESFTQGgukajuVDYDSlMd+7IBbjlyyVIlZoqFxOXLJHAmvaCO72cIiMl KFS5sj4wSZbD40usWCEXqOPiDJ+va46DByUQeP68/pm55vDwkHx//JF9QPhV9vixBGFq1Xq2z6R/ maWmyujUGTOAFi0sX35SkoxyDg/XP6/dUr74Qm4yyBxAfd486/4tbB9/LMG8gn4297PWuLGMBK5c Wd7fvy+f47ffmv45vgj7JxERERERERERPX8UCkWNApz88vkVEiLT0f7yizxjbPNmCZS4uLyY01xT 3mRkFHYLXk48vgw5OsrovkWLTM+jfWZmfqcFnT5dno9pb29e/S+73r1l+no3t+yfQUmmUatltoGF C/XPcLekL7+U0ZWWDgL/95/cBLRsmWXLtbRn3b+F6cgR+Rs4sLBbYllpaTI6PzhYbjaJiZEZJ2xs sp+ePDsvyv5JRERERERERETPJ44IhgQAJ06UKYfDw2V0aL16MsVczZqF3Tp61rQjgitWlCAZWRaP LyLKrz175PmvU6fqnwdKLz7tVNDOzjLatX79wm6R5V28KDNgBAbKbBC1asnoZ0/Pwm4ZERERERER ERG97BQKRQ0GgomIiIiIiIiIiIiIiIiIXiIKhaKGCgBiY2NzXTE4OLhAGkRERERERERERERERERE 9LLz9fXNNT0wMDDfdfAZwURERERERERERERERERELxkGgomIiIiIiIiIiIiIiIiIXjKqAq9RowEU igKvlvJOk5KKkLE/AADSo+JRYkxH2FUpVbiNIiIiIiIiIiIiIiIiIqIcmRwIDh65EpqUNMBKAXUR Z7i2rQOHAH+zKksJfYSIjX/Ca1xnsxuaX5rUNERsPIL4f24CUMCuog88ujeGysOpwNuSnfSYBETv O4f4s0FQuTuixKedDNJCPl1tsL4mLQMqF3uUmj/ApPKTbt7DgwU7dO8zElNQpHdTODetbjSvwloN 3wUDAQB3J28wqb6nJd96gMhf/kLqvcdQ2FnDo0sDONQqp18hQ4PIn/5E/LkgKJRWcGn5OpybVDc5 v9Hyjcit/wFAk56BiLUHkXglBMjQwKGWPzy6vwWYeE+DsfYZq98cD+bvQFpUHHym99IvNNK/+Wak /KQbYXi89W+khj8BoIBL85pwbV3L9PY96/YTERERERERERERERG9ZMwaEVxiTEfYlPZE0s0whH+z C5rkNDjWr2hy/vTYRLMbaClPfj2F1LBI+MzoDSs7a8Sduo7k2w+em0CwQmkFmzLFkZGchtR7kQZp Smd7+K34xGDZg0U7zep723JeKL1ssO59+JLf8tdgc2g0ePLrSXh0bQgbv+JIvByM+wt2oNTc/lC5 OQIAov44g7TIWJT8qh80iSkIm/Uz1J5usKtc0nh+E8o3Jrf+B4CYA+eRHhUv7UtNx4N52xB36hoc 65nwGZjQPmP1myr22BVkpKRlWZ5r/5oh5W4ErBxss/SrsfITL4fAvUsD2PqXQOq9x7g7eQNs/Dxh V6mkSfkt1X4iIiIiIiIiIiIiIqJXhfnPCFYAtuW94dGjMR5vPa5bnBIWifBv/0DI2DW488m3ePjd HmhSJSCVHpOA0PFrEb7sDyTdCEPwyJUIHrkS92Zv1uXXpGfg8ba/EfLpaoR8uhoPV+5FRlKKQdWa 9AzcnbgeD7/bY3azU8IiYVO2BFRujrCytYZz42oGIzKDes9Depw+UP14y3FEbDyie3938gYk3wlH +JLfcOfjZbg7eQNSH0aZ3Y6cWDnYwiHAH7Z+nkbXjTt9Awq1Eo51ylusfmPbny8KBYqP7ACbMsUB BWBX1RfWPkWQcjdCt0rMkUtw6/QmFEorWDnawrV1bcQcuWhafhPKN8ZY/6fHJcK2gre0z1YNu+ql kRYVb7BOjvunCe0z5fM3tv+nPYnDk52n4Namdpa0XPvXDLF/X0Vy4H2zy3d7rz5s/UsAANRe7rDx 90JGfJLJ+S3VfiIiIiIiIiIiIiIioleF+YHg/2df3Q+p4VHISJRgbWr4EzjWq4CSs/rCd/4ApNyL RMwhCdQone1RclZfFO37NmzLe8N3wUD4LhgIr3FddOU92X4CSdfvwmdGb5T6+kNY2dvg8S/HDOrU pKYjNTwKKXkYMenUsDJiDp7H4y3H8zwy+dGq/XBtWwcl5/SD0sUBUTtP56mcfNEAT7b9DbcO9Qu+ bkvJ0CDtUTSsS7jr3z+Og3UJN0TtOoP4s4Gw9vFAangOgfan85ubngdOb1ZGzKGLiP3rMtJjE5Fw 4Q4caxtOPW3y/pnH9hkr/9GqffDo0gAKO+us9ZnTv+YytXwNkB6dgOgD55ERlwj7Gn6m5X/W7Sci IiIiIiIiIiIiInoJmTU1dGZWdtZQqFVIj46HlZ217nnBGUkpSL3/BGpPNyTdegAXE8uL3v8vSnza CVa7Es2dAAAgAElEQVS2agCAW7u6uDtpA4r0aaqv01aeVauwMb/ZDgH+8J7UHZE/HUXwiJVwbRkA tw71oFCbXpZ7lwawKS0jNh3rVkDM4YIfkZjw3x0oXR1g7WW5IGdBi9r9D+yqlIKqiDMAICMlDQql FaBQIPFqKDKSUmDt5Z5lRHhO+c1NzwuVhxNs/DwRc+QSHq3eD5fmNaHyMCzf1P0zr+3LrfzYP/+D wloFh9rlkBRkOGLX3P7Nzv2vtyI9LhFpj+MQf+o6nvx2CnaVSsKje2OTy48/exOPfjgAZGhQ4rNO umPPWH5LtJ+IiIiIiIiIiIiIiOhVk+dAcEZCMjSpaVC6yrNC057EIWLdIWiSU2Hj5wmF0goZCckm lZUem4iMxGQ8XGk45a3S0TbLulbZLDOVdamiKPFZJyQHP8SjVfuQcv8xig9rZ3J+hVI/gFrpYq+b +rogJVy4DbvKpfJdjkajsUBrzJd4JRQxhy/Ce9L7umUS/NdAk5aOEmM6AgCSboRB5epgUn5z0vPq /tztcGlREw4B/kgNj8KjNfsRtecsXFu+brCesf0zv+3Lrvy0yFg8+fUkvKf0yD6PGf2bkxKfdQIA RP7yF2z9isMh02hoU8t3qFUODrXKIfVhFMKX/g7X1rXgWK+i0fyWaD8REREREREREREREdGrJs+B 4ITzt6Au4a4bwRv+zS64NK+pe25t7F+XEX820CCPQq1ERlzWaZmVjnawsrGG12edsoyyfFpGQjIU 1iooVMq8Nh02vsXg8X5jhC/9Td82lRIZMYlQOtoBADRp6Xku/1lKuhEGj24Nzc+YoQGsFPq3Ccmw stdPIWzy9lspoMnIML9+AMm3w/Hwuz0oMboDlC6GQTxrnyJIDroP2wo+AICkwPuw9ilqcn5T0vMq Iy4JKaGPdKPe1Z6u8Hi/ER6t3p8lEJzb/mmJ9mVXfvy/QYCVAmEzfgQgU0inxyQgZMwq+EzrCSsH W5P6Nz/MKV9dzBVOjaoi/p9AONaraFL+Z91+IiIiIiIiIiIiIiKil02enhGcdCMMkT8dhXunN3TL 0iJioPj/QGPqgye65wNnpvb2QMrdCKRFxgCA/lm9CsD57Rp49MNB3Sji9JgEJAc//D/27js8rurO //h7+qiMeu+Si1zlXrEpLpheA4EkEAKBXSC7yyab/ttNsskmhJAeICQhgYTQQiCYXowxNu4dd8uy 1XvXaEaa9vtj7DETyZqRLWwMn9fz+HmsOfec873n3tF9Hn3vOSesvr/PQ+V//p66/3tmWPEGfH5q //dJut/bg9/Vj6/bRc/avdjH5ByPLSuZ7jV7CHi89G6roGft3mH1EewIav/3SRp+tXz4daPkbe7C lOwYdr2GXy0Pnp/PT19FQzCpNnr4529JTaB3x2EIBBOk0XKX19Hwy+Vk/dvlWPMHJvASFk2h7fn1 BLw+fJ29dK3YTsL5k6OuH6n8VBjj7BhsFpxbD0EgQMDnp3fnkQEvLQx1f45EfCdqP3HJVAruvy30 L/PfL8ean0bB/bdhjAvOII40vtGKKc3DkpU84POh2vf3uGn8zUt4GtoB8DR30rN+P7aSrKjqj2T8 IiIiIiIiIiIiIiIinxTDmhFc/7PnMRgMmFMcpN2yODRDEiDt5kW0L19P27PvYc1PI2HxFJybD4bV t6QnknL9Qmp/8DQGqxlLagJZX7kag8lIynUL6Fi+gZrvPYEBMMbaSL5yLhRmhOobzCbMaQlYspKG dZIGk5G0zy+m7dn3aH3yXfD7iZlcRPptFx6P/3Pn0/SHN+hes5u4WWNJuW4BfVXNw+oHAKMR5+Zy fD3HZ9dGo/GBl3GX1xHo84QSfuYUR9gSwgGfH5/ThckRfbvHpH3uApr/+Catf30HY0IM6V9cFrZH bbTnn3zVXBp/8xKV9/wO+7g8Mu+8JGLfgX4P9T9+FoxGGn75Qmi2sa0oM7TksGPhRDzNnVR/68/B ++H6hVjz06KqH037kQw5/gbI/vLVtDzxDq1ProJAAFtxJum3LAlr40T3ZzTxRXP9T/b+jzS+wxE7 pXjY7Rvj7cRNH0XT718PvgTiD+BYMDFsNnWk+EYqfhERERERERERERERkU8KA1DW1dW1Y6iDKisr T1M4Z7+Ax8uRL/2WogfuPKXlq0VERERERERERERERETk46mwsHDI8vLy8iHLI5k+ffqUk1oaWk6s /cWNxM8aqySwiIiIiIiIiIiIiIiIiJwxSgSPoN6dR8AfIP3WpWc6FBERERERERERERERERH5BBvW HsEytNiyImLLis50GCIiIiIiIiIiIiIiIiLyCacZwSIiIiIiIiIiIiIiIiIiHzNKBIuIiIiIiIiI iIiIiIiIfMwoESwiIiIiIiIiIiIiIiIi8jGjPYI/JO0vbMDX6STt5kVnOhQZQe6DdbT8dSWemlbM qQ6Sr5xL/Pzxp62+iIiIiIiIiIiIiIiISDSiSgT7elwcufNB0m9ZQsLiKQA0/fZV3OV1FNx/24ca 4EdF/U+fp+9QPX5XPwaTEYPVTMKiMlI+teBMhwaAr9tFy6Nv0burEoPJSNyssaTddAEGswkC0P3e Hjrf3IanthWjIwbHwomkXD0fDCPQ/kdc3+FGav7n8UHLRv3lK1G3E/B4afjlC/i6XMTPLQWDAVNS 3MjUD0DHyxvpXrMHb3sP9jE5pN+6FHOKI+r2RURERERERERERERERI6JekawKT6Gno37SVg8hYDX h7ui4cOM6yMn+ytXA9D4wMvYR2eTuGz6GY2nZ8N+fJ29JF44DYCWx1fSs/EAKZ9agLeti663d2DJ TCLpkpn4+z10vLgBg82C47zJOLeW0/78OszJ8SRcUBZVf0O1/1FnOpr4Psbf24dzSzn20rxhteOp b8fX2Yt9bC6Zd1067DiGqt/yl7fpfncXqZ+7AGtuKm3PrKbp4VfJ+eb1w+7nbNT613eInzcOW0nW mQ5FRERERERERERERETkYyHqRLAxzoavsxdfVy99FQ1Ys5Ppr20NlQd8ftpfWE/Pun0A2MfmknbT BRjtVgC87T00P/IG/bWtGMwmbMWZpHxqAZaMxKjK+2tbaV++gb4jjfidbmLLikn/whIMluApBDxe mv/4Ju7yerzNnWA0YkqMJf2WJcROKY4Y36ny97hpfuwtXHuqsWQkYs5IwhRnDzsm4PNT+52/Yi1I J+OOi06qH1+Hk+ZH38K5pZzUG84Nfe5pbMcUH0PSZbMA6F61C29rFwBGm4Wc/3cDpng7GAzYijNp evhVPM2dAHS+vpWWx1eSesO5JF0arN/86Ft0rdhB7nc/g31U9pDtA7Q/v46259ZS+Ivb6XxjGz3r 9mGwmsm/9xa6VuwYsn1LZhJH7nyQ+NljCfj8uPZWY81LI+P2ZViykvG2dFH19UcxxlgpuP9W/L19 VH3lEcxpCeT/6PP4OpxDlpvTEsLGu/mPb2KMtZH5rxdHPe6V9/wOb3sPAO4DtRy66aeYUxwU/vKO o+PfQctfV+I+UIfBaMBWkkXSxTOJmVgQsb6nqYOut3eQfutSHOdOAiD5qnnU3fs3/G4PRrsFT10b zY+9hbu8nkC/NxRXxh0XETuthCN3PkjikqkYzCa61+/DYDaRcfsyYiYUhGZEx04rIfvLV+Pr7OXI lx7CVphB3g9uiur8fV29tD7xDr07jgRfKDhnPMlXzwvNCB/q+hvMpiHjdyyciKeli5rvPUHSxTNJ uWY+BqtWrRcRERERERERERERETkVxmgP9Ls9xM0ag3NzOT0bDxAzuSisvP35dbj315D3/ZsouO9W jLE22p5ZE1ZuSU+k8Ge3U3DfrcTPLcUYY4263NPYTvzcUvJ/+HkKf/ZF+uta6Xp7Z6i845XN+N0e 8u+9hfwffh6DxUT+jz5P7JTiqOI7VU2PvIHBZKTwl3eQ9eWr8bV1Dzgm4PHhaeygv651kBYi6161 i6qv/wn3gVoy7rgolFQFiJ85Bl+Pi4af/4OOVzaBwYBj/oRQuckRQ391Cx2vbKb9+bWYUx0kHJ0l Gz8nuEyxc1tF6Pje7RWY0xKwj8qOqv1jGh96lc7Xt2LOSMKal4bBbIqqfYCejQfwO91YMpJwH6il 6eFXATCnJZBy7Xx8nU7aX9hAxyubCXh9pH0uuDR1pPIP6qtsouudnSRdNANzWkLUY5+4ZGpoVrE1 N5WUa+aTePGMUHnTw6/Su62ChPMmkXB+GZ7mTjxNHVHVd+2pxmAxh/YK9jR3hl6y8HU5g+P64Mu4 9tWQet0CbMWZAKRcMx/7mJxQH51vbce5vQJzUjzeli5aHl8Z9fkNKRCg4ecv0P3eXuxjczAnxdG+ fAOtT64acOhg1z+a+DPvvpTkK+fS+fpWqr/1GK59NSMTu4iIiIiIiIiIiIiIyCdU1NPuAh4vjvnj aXl8ZXBJ4mXT6XxtS6i8881tZH/1Wox2CwDJV8yh5r8fJ+3mRcGOUhz0bNiPa38N9jE5xE0fHR5I hPJjP/vd/Xjq27FkJuOuaCDxaHl/bSuxkwsxmIxYclIwxdvxtnZjzU2NKr76+/6Or8cV1mfM+HxS bzwv4tj4nW6cW8opfuguDGYTJkcMMZOK8HU6w44z2i0U/vx2DLbhz3bseHULrU+8g+OcCaR+7nxM 8TFh5YkXTqNzxQ56dxymd8dhYsblYc1PCzumZ+MB2l9YD0Dy1fMwpwdHz5QUR8z4fFz7qvH3uPG0 duFt7Q5LNEfTPoC3qYOC+28LS7JG0z6AJSORnG9/GvwBKm7/Ne7yevw9bozxdhKXTad7zR46X9uC wWQkdkpxKMkPRCw/pvP1rWAwkLBoSpQjH5R02WzcB2rpXrULa24qyVfPCyv3u/qB4F7KcbPGkHzV HAxWS1T1PU0dmDMSMZhNtD69mo6XN4XuUwjOJO+rasJWkEHiRTMwWC00H34Ta1EGlqzk0H1rTnGQ /6PPA3D4i7/CU9cGgWGd5qD6DjfiLq/DVpRJ1n9eRaDfw+E7fkPXih2k3nheWLJ9sOsfKX4Ag9lE yjXzccwdR9Mjb1D3w6fJ/X83YB+be+onICIiIiIiIiIiIiIi8gk0rIykJTsFX7eL2LJiDAZD6HNf twu/q4+m378Wdrwp/vjSyMlXzMEYb6ft6Xfpr28nbloJKdcvxJwcH1W5t72Hlj+/TaDPg604E4PJ iL+3L9R+7KRCut7eScykIvoq6gn4A6EkUzTxZX/t2uEMRRhPcyemhBiM/7QU9GCM8ZGPGYzJEQOG YNLQ1+EckAiu/8lzmOLsZN1zJZ2vb6V79W6a//gmGR9Y/jjl2vkkLp1K54odtD+/Dm9bNxlfXAZA /LxxuPZU0bvzMJ6W4JLP8XNKh9U+BBOyg820jdQ+AMcSikYDlswk+qub8fW4MMbbMZiMOM4ZT+tT 7xLw+ki+KjwRG6kcgglJ56YDWHPTMCXGDj7QAcAweNFQ0m9bStPDr9G9ejfdq3djjLGS9vnFOM4Z OGt6QJceHyZHLJ76Njpe2kjaTYuwFWVQ+/2nQudmyU6hv7aV3u0VODcfBANYM5PD2jHYLaGkrDE+ JvgiQmCYmeBBzv/YzGZrQXqwH6sFc2YSnro2vG3dWDKSQscOdv2jjR+C3yVvWzdGqwWDzTKgXERE RERERERERERERKIz7KmpmXdfhinOjvcDSx+b4mMw2qzkfO1azKknWG7XaCBxyVQSl0wN7qf75xU0 /+lNsr98dVTljQ+8TOKF04ifPRaA7tW7cW4pDzVvyUoGk5G2Z9dgjLGR883rMJiM0cd3CkwJsfh7 3AQ83tCexSfi7+3DYDUPWLI4EseCCVgyEmn6wxvU/L+/kHTJLJKvmovBasbT3IlrXw1Jl87CVphB xh0X4T5Yh3P78aWY3QdqsY/NxZQYh+OcCbQ/v46+8vpQefysMbQ8toLeXZV4W7uwZCSFlvCNpv1j jDG2QeMfqv2QoznLgMcb3H/YaAglFX09Ljpe3oQpMQ5fp5PON7dhH318WelI5QD9Vc343R5sRRmD xthX2UTDL17A5Igh5xvXYYwd/FwGY81JpeAnt9Jf3Yxz6yHa/r6WlkdXRJUItqQ6cO2uAqMxdP7d a/aEHZNwQRltT6+m4dcvYYq3k3bzYiw5KVHFduxe83UEZ6gfW276n53o/C3pwURvf3VzML5+L97G DgwmI+YUR1gbJ7r+keL3dThp+etKetbvJ2ZSIenfuh5LeuKgbYmIiIiIiIiIiIiIiEhkw04EWzKP zv774B64BkhYPIXmR1eQeeclGGNt+Lp68bb3YCsMJt3a/raG+PnjseamYoyzY81JxX3oeCIyUrm3 pQuDMThV0dPQTtfbO8NmdXat2oVj4UQSzp88MOgo4jsV5hQH1oJ02l9YT8q1C/A0ddCzbi8xEwrC jvP3eaj8z99jzUkl9zs3Drsf+9hc8n94M+3Pr6Pj5U1gNpJyzXxMjliMMVa6392FKTGOgLsfT0N7 KBHqPlRP7Q+ewlaUia0wA9eeaiC49PUxxjg7sZOL6N15GL+zj6RLZobKIrUfjaHaP8bT0Ebjr1/E 2+HE39uH45zxoSRm21Or8XW7yP7atXS+vpWetXuJn1NK3PRRUZUDeOrbgueTFDdojM5NB/G2dOFt 6cK1r3rA8uQn4ne6qfr6o1hzUogZn08gEAADmFLio6pvzkjC29SBOTmO+PnjaV++Ace5kyj69b9i Sgje452vbMaam0rCkqkYTMbQPXysfMj20xIwmE30HWmk7sfPBhO6g8x6PtH520oysY/Oxl1eT8Ov luPr7CXg85O4dFrULzREir/pd6/hrmgg4/ZlOM6dFFWbIiIiIiIiIiIiIiIicmLD36z2BFKuW0DH 8g3UfO8JDIAx1kbylXPhaKLVNiqLlsdX4m3tBr8fS1Yy6bcsCdWPVJ528yLal6+n7dn3sOankbB4 SnCJ2aPiZ4+l/v7naHv2PQwWE0abBfvYXNJuugCDxRwxvkjqf/o8fYfq8bv66d12iPYX1pOwqIyU Ty0AIPOuS2n6wxtU/sfDWAvScZwzAW97T1gbBrMJc1oClqykwbqIisFsIuW6BcTNHounvh0I7j2c /V/X0Pr0atqfew+DxUzczDGkffb84NgWZZJy7Tk4Nx2ke+0+TA47SZfMJOW6BWFtx88fh3PboeD/ 5x5ftjlS+9E6UfvHWNKT8HW76K9uJn5OKWk3Bfdvdh+so+vd94mZkE/s5CKs2SlUf/NRmv/0JjGl ufTXtQ1ZfmzJbu/RGbH/vKx2KL45Y3FuOoDREUvM+IJBjxmMwWYh5Zp5dK/ZQ8drWzAYjcSWFUe1 vzQQ3NvabqVr5ftk3nnJoMfEzRhN51vbaX7kjeP9Ws3k/e/nTrzM9VHGGCupN54XXA68pYvU6xfS 8frWAced8PwNBrLuuYqWJ96hd+dhjFYLSZfPJuWa+VGdX6T4rbmpxE4pJuNfLsKUOHiSXkRERERE RERERERERIbHAJR1dXXtGOqgysrK0xTOyav7v6dJu2UJ1txUILjUbO3/PknaF5YQO7nozAYnQ/L1 uDhy54NYc1PJv/eWMx3OGdG1cictj60g5boFxEwooL+uFXNqAjHj8vC2dFH11T+SfutSHAsnEvD5 aX3iHTrf2EbmnZcQP3/8mQ5/SGd7/CIiIiIiIiIiIiIiIiOtsLBwyPLy8vIhyyOZPn36lBGbEXwm BXx+PI0deFu6MCfGgcmI60AtWEzYi7POdHgSpUAgcKZDOGMSLijDaLfS8cpm2p9fhzkjiZSr5wHg aeki4PXRs2E/pqQ4/N0uercfxhhrw/6B5b0/qs72+EVERERERERERERERM5GH4tEsMFkJPur19D5 xjY6Xt6EwWbBVpxJ7rc+jTHefqbDE4lK/LxxxM8bN+DzmNJcki+fQ/d7e2j46fMYHTHYR+eQfNVc zMnR7UN8Jp3t8YuIiIiIiIiIiIiIiJyNPjZLQ4uIiIiIiIiIiIiIiIiInA0+MktDT548ecjywIHX TykQEREREREREREREREREZFPim6GTgSPBOOH3oOIiIiIiIiIiIiIiIiIiJxWSgQPk6/PSMOOBHz9 GrrBRBqfj/r4fdTjExEREREREREREREREYlGVEtDf9xVvJ3G6ntHhX4ed2Ujc+4+Muixa39eTMXb aZRe1sTcfz98miI8swJ+A3++aDaxaf1c98S2IY+NND5nYvx0fUVEREREREREREREROSTJupE8F9+ 8jU+d+XisM+8Ph+W8ZeMeFAfhhfvnEzbodiwz1LHOrnsN7tIKuql7DO1dFbHULk6Zch20kqd1G1J JGW0c1j9P3PDdFxtlgGff3b5Jsx2/7DaOlm7/5bNtsfyuOyBXSQVuj6UPiKNz8mO36k4HdeXAOx6 JodDb6XR22IlY2I38+45TGxa/ylELiIiIiIiIiIiIiIiInJyhj0j+I01W6hragXA7w+MeEARBQDD yVcvOrcNs90HQHxmHwApJb2klPRSuTolYqJw/NUNjL+6Ydj9Fl/QgqfXBEDHkVia98aTXNKLyXZ6 ksAA3fX2D33J40jjc7Lj98+OrErF1W5h/FWR2zod13fDg0WUv57O7DsrSSx0sfWRfFb/eBTLfrJ3 2G2djTb9tpDiC1pIKz19CX4RERERERERERERERE5sWEngu/7/d9YsW7g8sA7/pLL9r/k8anHt7H3 H1kcficVk9XPVX/YidEcwN1hYdPDBdRuSsJs91OyuIUpn6vFZPGz+fcF7H8pg/FXNlL+ejozbq9i 97PZBHwGLv7FbqxxwcRtW3kcK783BluClwvv2xv6fDhm/WvlSc3S/PPFswn4jmegyz5Ty7RbaqLv 91+qAPB5jCz/l8kYDDD/Pw9jONpk5eoUDrycQVtFLAGfgdxZHcz50hGs8cFzjDS+HpeJbY/mUbk6 BZ/HSO7MDmbfVYnN4eXwylTW/qwEb18wCfzC7WUAYUs9d9fZ2fhQIU274zGaAqSOdTLxU/VkT+sa cC4dlTG88h8Tscb7uPRXu4hJ8UQcn1Mdv2NcbRbW/6qYqrXJzLi9KvT5UOcfjUjxrfzuWKrWJofV sSV6ueFvW+ius7P/pQzm33OY0cuaAZjyuRre+Pp4vC4T5hgfndUxrP9VEc374vH1HU/GL/jqIfLm dPDUp2ZQenkjJksgeG0tfuZ/pYLsqV20HozjpbsnkTeng8Xf34+r3cIzn55OyqheLn/o/ajOb6jv H0S+v4aKf9TSFpxNVl75j4lMvLaBqTfXnNYXHERERERERERERERERGSgEd8jePW9o2neF0/6uB6s CV6M5gCBALz93bE074knf147rnYL7z+Zg9dlZPZdlQB4XSYqV6fQ7zTx3k9LSMh101kVQ9MuB3lz OgCoXJNMT6ONnkYbjTsSyJ/fPuz4tjySjyUmmKSacG09CbnuqOpN+Vwt+KG1PI7qdcmRK5zAzr/m 0FVjZ/zVDaSV9oQ+L38jna5aOwXz22nYmUDF22lYHb4Be9kONr4Aa+4bRdV7yeTPa8ee5KH89XR8 fUbO/5+DJBa6mHR9HeVvpNPTaKP08kZikjxYPpBIX3NfCU17HEy8rh6jKUDVe8l019sHJIL7Os28 /T+lACz5wT5iUjxRjc9IjN/B19PZ/HAhBlMglIA8Hv+Jzz8akeIrvqCVlFFOAn4Du5/LwusyMWpx sP+GHQmYrcHkKkBPg42OyuAy5K52C44YH+/+aBTtFbHMvKOKihVptB6MY+rNNaSPP34P7H8xk4Q8 N7Ep/bSWx7HpoUKueDi6RO9Qovn+HXOi+ytS/Au/eYj3n8zh/adyqHwvmXO+fJjMsoEvEYiIiIiI iIiIiIiIiMjpMexE8FuP3Rv6/z3/91t++djzYeXd9Tau/tOO0LLLAK0H4mjeE0/qaCeLvncAb5+R J6+eyf6XMpl5x/FZnbPurGT7o3nYEryULGlhzX2j6KyOCSWCi85to3JNCvYEL1lTTy7JVLEiLfT/ 4vNbo08Ef7YWgIOvpZ90IrPjSAy7nskhLr2f6f80G3buvx3GnuzFZPHTdiiWF++cTP3WhAFtDDa+ ziYrVe8lE5vWT+llTRgMAVr2x1O1Lhm/1xBaGrlhZwI9jTbGXdE4YI/g/t7greDusFC4sI2yz9Zi /qdZnX6vgZXfG0t3vY2lP9xHUtHxNiKNz6mO356/Z7Pp4QJGLWlh1r9WYks4PtM30vkfS2YOJVJ8 RecFl0Pf+UQuXpeJtHE9zPhi8N7trrfhyO7DaA6w5ZF8dj+TgznmeJI94DPQdiiOlJJeJlzTgNnm Z90vi0kZ3UtCnpu+ruDYx6b1hxK/T1w5k46qmOBS6Kco0vfvg+Mz2P0VKX4Ak8XP1JtrKL6glbU/ L+a1r47n4p/tIWNi96mfgIiIiIiIiIiIiIiIiAzbKe0RvKe8ckD5+GsawpJIENybFiB5VG+wU5sf R7abzuoYnE220HEmix+MYLQEMAyylW1ySS9X/X7nKe0RfN0T205qaehTFQjA2p+X4PcamPvvh8MS hRCcObrxwSLqtyXgcQX3Eu5tsQ5oZ6jx7W2x8ta3S8PKvG4T1vjIyyPPv6eCNfeP4tCbaRx6Mw1L rI85XzrCqCXHZ926Oyy4OyzB/3dZojjrkWNL8IABuutsuNosYYngkTj/aDTuTGD7n3Oxxns579vl oQSqr9+ILclDZ42dXU/nMPuuSlJHO3n1yxMAMJgCJOa56KyyU7Mhico1KWBgwEsIlhhfaKlmW4IX V5uFQGCYN/sge2hH+v45co7HMdj9FW38EJwN3dtsxWzzh/biFhERERERERERERERkdNvxPYIPsYa OzD548gOJpbaK4LL5fr6jHTX2zGaA8Rl9A04/kRCewQnell2314sg/R1Ksz2YBLO3T7ySc59L2TR vDeeovNaQzOcj/H0mnj9qxOITe1nyf/tJ6m4l2eunz7oZNDBxvdYQs6R3cdVj+w44QxYy9Hkc0Cg FOAAACAASURBVHe9fcCM4MQCF1f/cQftFbFUr09m+2N5bPh1UVgiGGD8VQ1Urk5h40OF5M7owJY4 MknWSEYtbcGR3cfan5Xw4l2TmfipeqZ8thaTzR/1+Z/K9XV3Wnj3R6MI+A0s+K+KsGRpXEYf9dsT MB59ecHnMXDorbSw+mMvbWLLHwpY9YMxWB1e5n7pCIn54dfgRI6dj+to3CeK/0R7aA/n+zfY/RVN /K42CxsfKuTIqlRypney7Cd7ic+K/rstIiIiIiIiIiIiIiIiI2vE9wgeTOrYHtLH99C8N553vj8G V5sFv9fAuCsbo1q295gP7hHcsP3k9gje/PuC0ExFs80ftkdqckkvRnOA6nVJrPnJKGJS+plxW/Ww +/hnvS1Wtv0pDwjOHl378+JQ2czbq+nrMuN1G/G4TNRsSmLbY3n4PEbM5ugS3bFp/RQubKNydQqv /dcEcqZ10lljJ2NiD+Ovaggdlz6hh+r1yWx6qJCGHQ68LhPz7jlMf4+Zf3yxjMR8F1lTugj4DWAI DJg5bU/yMPvOStLGOVl97yg2PVzIgq8dOuXxiVbGpG4uf/h9djyey65nsjGaA0y9uSbq8z/p6xuA 1feOorfViiO7j/YjsbQfCSZVy26sxZHdR3ednZjUfkoWtfD+E7mMXtbM9U9txZ4UTJTv/ls2SUW9 jLu8CaPZjyXOh7vDgj3JE7H7+Mw+TBY/rQfjePMb42g/HDvorPgT7aE9Et+/SPGv+ckoWvbHcc5X Khi9rDmqNkVEREREREREREREROTDc1oSwQYDXPDdA2x+uJDaTYmYbH4m31DHlJtqh9VO4bltVL6b ii3BQ2bZye0RfHhlauj/1nhfWCI4NrWfuf9xmO2P5VG9Lom0sc5Bl9odro4jMaHlnv95/9mpN9Xi yHEz5aZa9j6fScWKNEoWtWA0BWjaGx91H8dmqVauTmH337NJLHCRPy88UT7+6ga6au3UrE/i0Jvp JBW48PYZMdn8TPlcDRVvpbHn79kYTAFyZ3Uy8/aqsPpGcwAMULKohQMvZXDorTRKFreQM6PzJEdm +EwWP9O/UE3Rua101cSEPo/m/E/2+ro6LNRtSQSCe+huezQvVDb5hjpyZnRiifVx8JUMFn5j8MR4 /vx29r+YGfYSgMnm57Lf7CImeehksCXWx4zbq9nxeC49jTam31rN3uezBhx3oj20R+L7N1T8SYUu 8mZ3sOCrh4hJiZzYFhERERERERERERERkQ+fASjr6uraMdRBCQkJQzYSOPD6SMYkctY58EoGG35T xLRbqsme2kVHVQzxGf1klnXR02jjH7eWMfc/jjD6wmb8XgObf1fA3n9ksfAbhyhZ1BK5gzPobI9f RERERERERERERETko6Y7a96Q5eXl5afU/vTp06eclhnBIh93Yy9pwhLjY/ffstnxeF5wlvdngzNu nU1WfB4jR1alEJvSj7vLTM3GJKxxPrJOcmb76XS2xy8iIiIiIiIiIiIiIvJJpBnBIh+yQAC2/Smf Q2+l4e6wYEvwkj6+hymfrSVltPNMhxfR2R6/iIiIiIiIiIiIiIjIR83pmBGsRLCIiIiIiIiIiIiI iIiIyGn0kVkaWoleEREREREREREREREREZGzh/FMByAiIiIiIiIiIiIiIiIiIiNLiWARkaN8/T5a djfh9/jOdCgiIiIiIiIiIiIiIiKnJKqloc92vj4fb3/5ZQDc7S7mfvN80idnnuGoTp/+7j5eve05 4nMTWPzzS890OB+qtv0t7HpsK13VncSmxTL2monkLSw6pfoZU7M/MeN3JnyU7s/tD2+kZvURipaO Zsrts85oLGcrv8/P3id3Mu66yZhspjMdzkeKq6WXbQ9toKuqA3uSnQmfm0rGlOwzHZaIiIiIiIiI iIiIfExFnQhef+8q2g+24nV5MJiMmKwmipaOZvwNZSMSyIYfv0vbgRZMNhM+t5fkMWmUfXEmselx p9y2yWZi6QNXALDqmyO/33HFqwfY/+wugLDxAZjztXNJKU0b8T5Pt87KDnY9uoWOQ23EpMVRet0k cucVRF3u6/Py/p+20rC5BpPdQuHiEsZeNREMwfKGTTUcXL4vmCBJjqH02uMJ3I6KNlZ9Y/DrduUz N4b+7/f42Hj/avq7+sidXwAGsCfHRNV/pPoj5dDL+9n12FYAzrt3GUklKVHV6+vqY+cjm2ne2YDR ZCB7Tj6TvzADozk4qT/S+O96bCuHXt4f1uaYqyYw4TNTRujMIgjAweV7qF51BHdbLyml6Uy5YxYx qbGnp3+g/MV97H1qJ+f/eBmOvMRBj0kelULzjvqor4sMtPVX60gsSVYSeBC7/7KN+BwHc79xLoEA EDjTER1XtbKCitcO0NvkJLEwiQmfnUrymNQzHZaIiIiIiIiIiIiInIKoE8Fzv3EeAJt/uZaUMamU XFI64sFMunka+ecV43V5OPDcHnb+YRNzv3n+iPcz0kouHkvJxWOBD3d8hqN2XRV9He5QXKfC1+dl /Q/fwdfvo2jpaJp3NbL55+9hS7CRNjEzYjnAjt9tomZNJYWLR+Fud7H3yZ1YYq0ULxuDu83F5l+t Iz7HQd6CQurWVbH1N+tx5CWSWJyM1WGj4PySUDweZz/1m2pIHZ8eFmd3XTd9nW5SStOZ8R/zw8qG 6j9S/f7uvlMeQwBnfTd7n9yBOcaC1+UZVt1dj22lbl0V428ow9Xay5E3y4nLcjD68nFRjb/X5QUg Z14BZlvwa386k507/7SFqpUVTL5lOo68RPY8sYOtv1nPOd9ZFDrGMET9keBs6A4u+TxE8q3kktIz /t09E3Y9tpW8BUUkjTq1e6L2vUp8Hh9jrpwwQpF9vHRWdTD9rjkYLR+tJHn5i/uoWlnBjH+bR0JB Em0HmnE29igRLCIiIiIiIiIiInKWG7GloVd983Wm3jGbA//YQ8uuRmIz4ph5zznEZcYPP6gYCzlz 86ldWxn6LOALsP+5XdSuqSQApI5LZ/It0zHHWEL9j7qklMNvlONs6CZ5dCrT7pqD1WGL2F93dSfr fvgOSx+8AoMhmI7yOPtZcc/LXPjgFSPyR3tPr4fdf95G0456jGYjBeeXMObqCRiMx9NfAV+AVd98 ncSiZKbdNeek+nG3u9j5h83Ub6ph4uemhpUFvH42/nQNzTsbSCxMYtpdc4jLchwthKp3Kqh4ZT89 DT3EpsVSdOEYSi4eS0dFG+52F6MvH8fEm6bhcfbz2u3Pc/Afe0mbmBmxvL+nn5o1leTMzWfKHbMg AG9+aTmHXztA8bIx2FNiWPiDpSTkJWIwGYjPSWDXY1tp3tVIYnEyselxYeOx43ebsMRamP6leaHP 3rjzBdztLgDa9jfzwvVPEpMay4UPXRmx/0j1oxk/r8vD3qffp259FX6Pn8yp2Uz6wgys8dZg3UCA rQ9uwJZoJ3NaDoffOBh2bSLVd9Z3Y3XYGH3leAwYqHq7AleLEyDi+B9rH2D6XXMw2QZ+7SP1P9T9 Eanc2djDkTcPMvWO2RRcEEzol35qEmu//zZetzcUg8lmZvdftlGzphKj2cjUf50TWsJ9qPgOv36Q nY9sZsJnpzLmyvFAcOZl+Yv7OOe7i3G3u9j+2w34+oL7/r79lVcAwq7v8hufIuA7niEee+1Exn86 uNrBsaWri5eNwWg2Uru2CqPZyLQ755A2KRhfT20XO/6wmfaDLfj6j+8vPP3uueSfV4yzoZtdj22j dV8zRpOBpFEpjLpsfNRL1Pd1utn95200bq/HZDORv7CY0k9NwmgJzgjf/7dd7Pvb+1z44JVUvLqf mvcqMVnNLPrZJRjNxojx9bb08u6332DUZeMYd/3k0IoGw1X+0j6m3z037LOWPU0cenEf3j4vrmYn k26Zzvt/2kp8toN53z4fiPz73d3mYvvDG+iu6cJoNpJUksK4G8pCz5dI5d3VnRz4xx46Ktrw9PST OS2HKbfPDP1u93t8bP/dJtoOtNDb1IPBaMSeZKfsi7PInJYdMb5Idv9lGw1b6nA2drPx/jUYzUbi suKZ/9+LQvFvuO9d5n7r/ODvvp0NJBQkhsqHen5EM75D8fX52P/sLhZ8dzGJxckApI7PCDsmUnyR xifS+EZ6Pg7V/+l4fouIiIiIiIiIiIicrYwj2di2325g7FUTWPyLS7El2jn4/J6Taqe/u4/Ktw+F /igNsO/Z92nd08x5P76IJb+4DEushT1P7gyrV7XqMLO+fA4XPnQlRrOR3Y9vj6o/R34icZnxNG2v D31Wv7GGrBm5I/ZH5O0PbwQDLPnN5Zz7o2U0bK2j4pXwpXp9Hh/Oxh66azpPqo+qlRW8/eVXaN3X zPS75zL6ivFh5c7GHjzdfcRlxdO6r5mtD6wPlR1cvpdtD23A3eEmd34BlngrvU09AJjtwT/md1V1 0N/dR+veZgxGQyjOSOW9jT0EAgESipJY/d9vsfNPW0goTMLZEPwcILEwCYMp+Ed8vzeYqBpsWebO w+0cWVHOqEvHhS0bXnzRGPLPKwbAkZfIuOsmM+qycVH3P1T9aMZv6wPrqXhlP0klKWTPzqPmvcrg NT+q4pUDtO1vpuyLM0Pn+UGR6mfPyaO/u4+N962mfPleMBJaOjvS+AN43cFE8Ip7XuaVL/ydLb9e h6fXE3X/Q90fkcpbdjVisppD8fY2Hb/H+zrdoTY6Ktpo2FyLLclOb7MztIR2pPjyFhZhsprCXhxp 2FKHPTmG1PHpOPISGXPFhND9UrxszIDrW/qpSYy7bjJZM3MHXJtjDr9+kMatdaH43n/0eHybf7WW 1r1NjL9xSmim9bjrJ5M8Ni0Uf8OWWgoXlVCweBTOJifOxu4T9vVBgUCAjT9ZTfXqI6SUpmFPjuHA 87vZ/fi2Acdu+fVaKl45QFxmPI78xNDS4ZHim/nv8xl7zUQqXtnPyv96lZY9TVHF9kHudhfeXs+g y2437ayn7AszSB6TysF/7OW8H11Ie3krrtZeIPLv9/3P7iI2I56lv7mCxb+4jNz5BWFJ2EjlzoZu cucXcMH9F7P0N1fQXdPJkTfLQ+Xly/fhdXtZ/LNLWXT/JZgsRi64/2Iyp2VHFV8kE2+axuJfXEps ejxzv3U+Sx+4IpREDY1fh4stv1pL9qw8lv7mcqbfffxFl0jPj0jjO5Seui5MVlPY83YwQ8UXaXwi jW80z8cT9X86nt8iIiIiIiIiIiIiZ6sRmxEMMOHGKaE/JufOK+DIW4dCZev+7x36e8KX2E2bkMHE m6aFft71523sfXonrtZeCheNYuq/zA6VHX71APO+fT5mezDkMVdPZNU3XqPs1hmhY8ZcOSGUPMw/ vzgskRVJ8bIxVL51iMxpOQDUrDnC2GsnDSv+E/E4+6nfUM3Ff7wWo8mINd7K+E9PZueftoQlo8x2 M0sfuALzSeyteeilfez68zbyzy1i0uenDzoTOi4znnO+u5iAP8DLn/8bbftb8Dj7scRaOfiPPRhN Rs79v6XEZgRn0YWStEXJZM3IpWFLLa/e9hwxqbHB5Y2PzuaMVO7zBBO7BqMRX78Xv8eH0WTE7/cT 8AfCEqP93X0cenk/9uQYsmcNTModemU/BoOBogtHh30+5soJtO1vpmplBY68BEqvO37toul/qPqR xs/r8lK/sYaY1FiKLxwDBmgvb6Vhcw1+nx9Xk5O9T+4g/7xiMqfl0LitPqxdV0vvkPWNJiMlF5Vy 5I1yGrfV0bitjrQJGSQUJEU1/hBcEtqaYCd5TCrVqw5Ts/oIZruZKbfPity/0Tjk/UGAIcudjT3E ZcRhNBvZ89cdlC/fi8k+8FdPTGosF9x/CQAv3/w3ums7IQCu1qHjs8RayJlXQPWqw/TUd2MgmNwa dWkpBoOBxMIkEguTaNnTSG+zk+ILx+DID09Wlh79rle+fYiGzbUDYhsqvoA/QOeRdhILkxl1aSkm q4mOijYSi5OJzz46Y/xo0r2vq4+cufmUXjMp6j10OyvaaTvQQmJxMnO+di6+Ph+v3PIsR94oZ+JN 00LJXgBnQw+Lf3VZ2EsSAV/k+IwWI+Oun0zeOYVsf3gj731vBQv/dwkppekD4jmR3iYncVmDrwDh yE0MJuyyHTjyErE6bMSmxeJs7CEmNTbi73d7agx1a6to2dtESmkaWbPywtqPVH7sZ6/LQ09dN3HZ DtrLW0Pl3TWdZJRlBVckyE3A6rDhau0NJbWjef6cKnebixn/Np+0icHZuMdm7kfz/Ig0vkPp7+7D EmcN/bzhx+/SeaQdS5yVC+6/OGJ8EHl8hhrfaJ+PQ/Uf6fktIiIiIiIiIiIi8kk1oolgg+l4QsKW ZA/N7ASiWqJy0s3TyFtYxNtfeYWMsqxQMrO/uw+Py8PWBzeEHW+NP/Gyz468RDw9/VHHnjU7j11/ 2Ya73YXBYMDZ6CTtA8tjRhP/ifQ2ObE6bFhij89Qi8uKD5tReUxoKd5hsjpsYAgm3dwd7kETwYaj CSOD0UBcloOuyg76u/rwe/14nP3YU2JCSTwgtMwmBpjztXNp3d+M1+UldXw6b969/Piy3xHKjyXn PT39nP/jiwBY850V2BLsGD9wz/g9Pjb97D36u/uY+/XzBixhHPAFqN9QjSM/EVuiPeqxibb/SE40 fq624JLSrtZe1v3wnbA6PreXyrcP4ev3Ub3qMNWrDofKVn3jdc757uLQnrUnqm+Ms7Luh+9gibNy /n8tpOLVA1S9U8GO320MLo8d6foABeeXhPZZTp+UyYp7Xg7N+nQ29gzZvyfC/dHX5R6y3O/xYU2w 01PXxcEX9jD5CzNILE5mzf+8FdaXyW4OLXVscVjp63ATCAQixmeMs1K4aBTVqw5Tv746lGDNnV/I SDpRfMeWM++u7aRxax31G6vBAPHHll0HpvzLbLY9sD50D5hjLJTdNpP8c4vCOwkwYLNkZ0Nw5nBi UfAlG5PNRGxWPD21Xbhae8Ou86hLS8OSwEBU8YX6anLiau3FZDUPuoT4UPxef9gzYDCGD57c0fsj mt/vY6+eiDXexp6/7qCnrousmblMuHEK9pSYqMrdbS52/mkLPreHpJJUDEYD3t7jL0qkl2Vx5K1y 0suy6ChvJeAPEHc0SX4yz5+TYbabQ0nODxrO82Ow8Y0kNj0Od1tv6N6b8/Vz6e/uY8U9L0cVXzTj M9T4Rnt+J+ofIj+/RURERERERERERD6pRjQRPBIMRgPjrp/M3qd2kj07H4PJgDXehtluYf63LyAm bejZTcc4G3rCklKh9g0GAn7/gM+NJiMFF5RQ/e5hzDYzeecUDkjInKyY9Dj6u/vwujyh5UqdjU5i 0wfG5+n1YLKawmb5RSP/vGJiM+PZ/tuNrPraa4y6Yhyl104K3+vzaMLR7/HhanZiMBqISQvO1DTZ zLjbXHRVdYRmmvr6fKGkmqe3n5TSNAwGA41b6+jv7iN3fsEH4j5xeUxaLFaHjeZdjQB43V46DrWG 7UPp9/jYeP8aWnY3Mu2uOWRMzR5wjp1H2vG6vaGEWLSi6T8qJxi/YwmzuMx4Fv3i0gHJ5Yyp2Vg+ kOBv2FRL24EWii8aS1xmfChheqL6vU09tO5tYvQV40ksDu4f3bq/mYYtdaFjIl2fll2Nwf2CDcFZ qQDWo7MAj80KPVH/BBjy/rAl2Icsj0mLo3lXY2i/T7/HF5YQjyRifEDq+HTisx00bqvDEmclNj2O 5DGpYcccW0Lb2dQzYEbwqSpaMpo9f93Opp+vwRpvo+zWmcTnJoTKHbkJLP7lZXRVdtCwuZZ9z7zP zkc2hyWCOw+3s/H+1VgdNub/z6JQYiz2aKK3q7IDAF+/j96GHowm44DZnifaszZSfO52F7se20rt 2irSy7I45zuLBv39OZSY1JioliL+Z9H8fjcYDRQvG0PxsjH09/Tz/iOb2fH7Tcz5+rlRlW/+5XuU XFxKztx8gOBLAxtrQu3H5zgwmozse2on5lgL8/9nUeg+O5nnz0gazvPjZMRmxGOOsdC0s4GMKVnD rh/N+Aw1viNxfh/m81tERERERERERETkbPaRSwQD5M4t4OBzu6l6p4LCxaPAAEVLR7PjD5uY8e/z scRa6Ot0425zhe1rWLe+itRxafg8fvY/+z4FF5QMaDsmPY7GbfVklGXT7+wPm4FbtGQ0a3+wEmu8 jal3zBqx87HGW8malcfux7dTdttMvG4v+555n8JF4fH5+ry8efdyHLkJLPzB0mH3kzounQt+cjH7 n93FweXBpXrHXT85VN5T38Wmn66hr9ONp9dD3sKi0AzHkkvGcvD5Paz74TtkzcgN7eG64LtL8Pv9 rL93FX5vgISCRGrXVmGymhhz1QQA/L6hy40mI4WLR3HwH3vY8ut1uFp68fX7KF42BggmZjf8eBUt u5uIy4yn83A72/dvxGg2UnbbzOPx13UBg+8dPJRI/UfrRONnT4khZ24+deuree87K0ifnEVPfRcp pemUXDyWtImZwSTsUa5WF20HWig4vziUyBuqvjXBjjnGQtXKCuxJdrxuL876bpLHpEU1/l1VHaz9 /koSCpNIKEyiaVswgZy3IDhjNlL8GIa+PyKVx2XG42zowZ4cS97CIg48t5uCC0pY9vBV2BLteJxD z9yPGN9RhYtHseeJHRgtprDPj0kZm0bDllp2PbqVlt1N+NxepozQ97x8+V4c+YkUXzgGo9mI+ejv qGPnt+I/X8aRm0DaxEwC/gAYCM1WPaZuYzW9zU56m5207m4MLWecNCqF5DFptB9sYdNP1+DucOP3 +Sm+aGzUL4wMFR/AtgfX017exrQ75wz6ezMacZkOvL0e+jrc2JKin7Efze/3vU/uJG9BIY78RKxx VuLzEmg/eHxp50jlvUdf3ABw1ndz5M3ysFUFKt+uIP+84uDz5iTi+zBF+/w4WQZT8OWrHb/byKyv LCCxOJn28rZhNBB5fIYa35E6vw/r+S0iIiIiIiIiIiJyNos6Ebz+3lW0H2zF6/LQsLmW/X/fTdHS 0Yy/oWzkozLAuE+XhWbMGS0mxt9YxsHn9/Dut9/AAJhjrZReOzHsD/Emq4lV33yD/u4+8hYUMuqy 0gFNl14zkc2/eI837nqB1PHpzPj3+aEye3IMjtwEepudYbPlRsK0f53Nrse28eaXlmM0Gck/tzhs /0MILj0cmxYbWjLzZBgtRsbfWEbOvHx66rrDyvLPLQ7N2sydVxC2v+X468uwxlmpXHGI6ncPE5fl oHjZGAIEMGAge3Y+1asOU7euisSiZMpunRFKYkYqBxj/6TJ8fV5q11Zhtpspu20mWTODewB3VLTR svv4MsUVrx4ACB13jLvDDTDosteRDNV/tIYav2l3zSU2PY669dWUv7QPR14CWTPzhmgt3FD1zXYz 8751Hnv+uoN9z7yP0WIie04+k24O7k8dafwd+YlM+vw0atZUUr+hGluindFXTqB42dio+ofI98dQ 5RlTsjDHmKlcUc6Mf5s3rDEfzvjmn1fM3id34uvzhs2GPqbkklJ6Grpp3FJL9arDOPISwma9n4rs 2Xkcfv1g2L7kJquJ8360jLgsB+Oum0z1u4c59NI+DCYjGVOzB+wvnju3gPr11VgTbKRNOv7igMFg YM7XFrLrsa00ba/HZDMz5qoJjLtuMtEaKj5HfiKZ03KYfve84SVw/5kBCpeM5uDyvaF7M1qRfr8n j07h/ce24mrpJeAPEJ8dT9kXjyf7IpWX3TqTA8/tZu/TO0nIT6Ro6eiwGcE5c/NZ/6NV7H16JyaL CZPdTGppOpO/MD3q58+HKZrnx6koXDwKo9nI9oc20NvSS3xOAtPvnht1/UjjE2l8R+L8Psznt4iI iIiIiIiIiMjZygCUdXV17RjqIEfDutMUzslb9c3XmfjZqWEJlJOx4/ebSChIGvZsURE5scoVh9j5 h82Mu6GM9EmZdNd2EZMWS9qEkdvH0+sOzqi3JdlZ9NNLRqzdSHqbnay45yWm3D6LgvNL8Pv87P7z NipePcCMf5tH3sKi0xbLmY7P7/Oz+v+9xfgbJpMxZeDy7h9Va76zgim3z8SRF1wy3N3uYvV/v8WU 22eeVefxUXW6xlfPbxERERERERERETmbdGcNPXmuvLz8lNqfPn36lI/k0tAnKxA4tfotu5to2dPE 5C/MiHywiEStcPEoTHYz5cv3sv/ZXcRlxVP6qUkj1v7B5/dQt7GG/u4+Jt8yfcTajYarxYnf46du XRX25Bj6u/tp3FqHJdYStiT4mXI64zOajMz9xrlsfWA9qeMyRmS29Yct4AvgbOymt7kXW1IMRpOB tn3NGC1GkkalRm5AhnS6xlfPbxEREREREREREZGBPlYzgid8Zirpk4ef2PD1+Vhxz0uYYy1M/ZfZ pIxN+xAiFJEPg6/Py8uffxZrgo2Si8cy9uqJp7X/QCDA3qd2UvPuEfo63FgTbCSPSaX02kmnbeng szm+j4Kuyg4qXjuAs6Ebk81M0qgUii8cE7aPsJy8D3N89fwWERERERERERGRs9XpmBH8sUkEi4iI iIiIiIiIiIiIiIicDU5HIth4Si2IiIiIiIiIiIiIiIiIiMhHjhLBIiIiIiIiIiIiIiIiIiIfM0oE i4iIiIiIiIiIiIiIiIh8zJx1ieBAIDBkeWdlB6/d8Twdh9pOU0QfL5HG9+PI1+fjzbuX8+bdy3nx M0/T/H7jmQ5JJExPbReHXtp3psMQEREREREREREREZGziHmkGlp+41Nc+MCV2FNiAKjbUE3Fy/tZ 8L9LRqoLuio72PXnbcz/7wtOeIw9yU7OnPxQHJ8Ufo+PXY9to25DNRggbXwGE2+eRkxqbNRtRDO+ J6uv003Fqwdo2FSDPTWWed86f8AxTdvr2fPkDtztLmJS4xh/QxkZU7Kiar9tfwsb7ns39LPX5WHy F2ZQtHR0xLomm4mlD1wBwKpvvh7dCf2TjkNt7HliO921XZhjLEy4cQrZs/NC5QF/gN2PpfIG1AAA IABJREFUb6dhcy1Gk4GSS0spWjI66vqRyiOJNP6u1l52/mEz3TWdWOKsTPr8dFLHp0fdfuu+ZvY9 8z7O+m4wQMnFpYy+fNyItR8pfr/Pz/uPbKF5VyMBf4Ds2XlMumkaGKLuYkiRrt+HXR6X5aDtQAu8 vJ9Rl5aOzEmJiIiIiIiIiIiIiMjH2oglgk+H/u6+iMfYEu2U3TbzNETz0bL/ud1013Ry/o8vwhxj pnZdFR3lrcNKBEczvifLaDaSPCoFX5+X7tquAeUdh9rY8YfNzPnqQhIKk3DWd+Pp9UTdfkppGhc/ ck3o500/WzMicUcjEAiw/++7mPCZqSSVpND8fgMb7nuXJb++HHty8IWE8hf34mrtZfHPL8Xj8vDe d1cQn+0gbWJmxPrRtB9JpPHf+ut15MwrYM7Xz6Wnrou131/JuT+8MOr2W3Y1MuHGMpLHpNFT28U7 33idpJIU0iZmjEj7keI/8vpB3O0uFv38EvwePxvuXUXt2kpyzymMqv1juqo7scZZB7xIMtT1Ox3l BpOB6XfP451vvEbm1GzicxOGdV4iIiIiIiIiIiIiIvLJc9oSwQFfgP3P7aJ2TSUBIHVcOpNvmY45 xkJ3dSfrfvgOSx+8AoMhOIXP4+xnxT0vc+GDV+Dp9bD2+yvp63LjcXp48+7lAMRlxfP/2bvv6Dir O/H/7+mjkUZdVu+WJdkqltxtXLAxBkwLLSGbhJAEdgPZ3exuTsrmlwU2m2wKJGwSEiDwI5BCCIRi wBRjcC+yLFmyumT13tuMZqQp3z/GGnuQNTPCcgE+r3NyTjz3uXc+zy2PzuEz9z5rf7AZgEM/fB9T 9zjg2n145c+vxZgY4v7+vd97h6X3rqTu1Sr6K3owLAhk+TfXERgdBLh21J548hiDdf2Ye8dRKJXo Q/XkfW0F0QWxWAYnOPHEUcbaR1GqlYSmhZP1uTx3fV+mzFNUPldKb1kXSrWSpE1pZHxmMQqlwq/4 fBlrHyV0YYQ7gZW8Od2zvG2EulerGG4cZGp8kuiCOPLvWY5So8I6YvHZv+dLE6glZkUCNsu5E3l1 L1eSfWcewcmhru+ONc7L90577Y7nufbpW9AadQBUv1CO3WIj567C825boVCw6tsb3P+OyovBmBjK aOuwO9HZsruRVd/ZgEKlQBukZeENWbS8d4rIJdE+6/vTvi/e+n/KPMVw0xDrHtgCQFBcMEmb02je 1UDWHbnu65x2J3u/9w4hKWEU3LfKo43M23Lc/z8oPpjwRZFMjVvnrX1f82dybJLwrCiUKiVKlZIF +bFYhi1+9c3Z2vc3E5oeTtyqRI/PvY3fxSgH1871jBuzaXy77lP5YxchhBBCCCGEEEIIIYQQQszN RXtHcM1LJxmo6mPjT6/hqkevR2PQUPV8OQDGxBACo4PoPdHlvr6rqJ2YZfEoNSp0IXqufPha8r66 nIisKLY+diNbH7vRI0m59geb3Z9rg3XnjKH08aMsunkxWx7dji5ET/0rVe6yhh012Cw2tvxiO5sf vg6VRsmVD19LdEEsALUvVWBYEMTW39zIlkevJ35tEuoAjd/3f+KJIlDAVb+5gQ3/u43ukk4ad9b6 HZ8vSRtSaH63nuoXys+5s9fUPUb82iSufPhatv7mRsbaR2je1QDgV/9eaKOtwxgiAyl/qpiDD+2m 6vky7FbbRfv++eR0OJnoGycoLvjMvwfMBMUZadhRTdexdoKTQhk//cMFX/XnWj73gJ04Ju3YLGd2 YAcnhTLWPuJxmX3KjqlnfMbnZ9pxHeHc9E49k+NWogvj5rd9LxI2pNDyXgNte5uwjlrpOdE5I5n7 UfkavwtdfraYFQl0HWufl/sSQgghhBBCCCGEEEIIIcQn27zuCN79b2+6d7g6bHZCU8PdZU1v1bHm +5tQ611fmfGZJez97tvkfWUZAKnbMmh57xTRBa7kUfuBZhbdmsN8WnxnPiGpYQDEr0mi+b1T7rKx 9hEW5MWgUCkIig9Ga9QxMWDGmODaVayPCKDzUCv91b2EZ0YSs8L/97NOmSbpOtrGtf//rShVSrRB WrI/m0v5M8dJv/7Me1S9xedLzIoErvjhVqr+dIJ373uN9OuyyLxtCUqNyl0OrnfnjneOERhrZKhh wO/2L7SJwQmq/1pOzpcKCIgKpOyJIqr+Ukbu3csudWhzduqNGiJzojFEBQJgn7SjVCtRKBT0V/Zi m7BhjA/2SIx6qz/X8rnSBGoJTgmjcWcdadctYrBugOq/lKEL0Xtcp9ar2frYjah1qnO203WsnbLf H8PpcLL2/7vSPffmq31vDJEGQtPCadl9ihNPFJF27SICIv0/Fv3wj/YwOW5lYsBM5+FW6l+tInLx ApZ8scDn+F3o8rNpg7TYrXYcNgdK9UX7HY8QQgghhBBCCCGEEEIIIT6G5jURvOWX291HE3cebaPx TdeO18kxK1MTU5T89qjH9dqgMzt3Y1YmUPHHUixDEygUCkw9JiKzF8xneChUZxInulA9Dpvd/e+o vBia32sgKi+G4YYBnA6nx/HEiz6zBG2Qjqo/lzHeOUrM8ngW35k/412i52LuNaE16tAYzuwgDowJ wtzruePPW3z+CEkOZc33NzHSNMSJJ4sY7xxlxX9cAYBlcILyZ45jt0wRmhaBQqnAZr58dtzqQnQU 3LfKndxMu24RpY8Xkeuj3qyc8xbanPRX9tD83inW//dV7s/UerVrV+yUg9Xf2wjAYG0f+tCZc+dc 9edS/lGt+Pd11PztJEd+spewjEgyPrOY3rLuGddpg7SzthG7MoHYlQmYesYp/uVBFt6Q5X5H73y0 783h/91L+rWLiFmRgKl7jLLfH+PUm7Wkb8/0q/6a728CoOovZTOOhvY1fhe6/MOUKoUkgoUQQggh hBBCCCGEEEII4dNFeUewNkiHWq9h7fevnHWXnlKlJOnKNNr2NaHWqUlYlwwKz2tUGhWT4zOPPZ4P QXFGlColNX8tR23QsPa/NqM8KzGrUCpI3ZZB6rYMJscnOfl0MWW/P8aq72zw0qpLQFQgk2NWbBNT 7uOkTT0mDFH+vf93rkJSw1jyhaUc+8VB92fF/3eQtGsziVvtSnC17W2iq8jziNkL2b++GONDGO8Y dSeCdbMkwWbjdDjdu9EBpsyTHol3pVrJ5KjV/Y5gp81xznYUCgVOx7nLfBk+NUjJY0dY/Z2N6EI9 d7saE0MZahggIjsKgMG6AYKTQvyu70/5+TBEBVJ4/2r3vyueK50RH7je96vSqrwmIQOjg0i6Mo2u onZ3Ing+2/+wyfFJRluG3bveA2OMLPlCASeeLPI7EeyLr/G70OXTHFN2nE7cJysIIYQQQgghhBBC CCGEEELM5uJsKVNAytaFlD11jCmz67hT64iFkaYhj8tSrlpI275mOg63kbghZUYzxoRgxlpHmOg3 u9oYnb+kZcv7jSRuTGXZv64l/54VBEZ7Jmmrny9nrM317lJtoJaghGCcTv+2nWqDtMSsSKDyTydw OpxMmaeo+dtJkjenzUvsTruT/T/YRdu+ZmwTU1hHrbTvbyE8M9J9jbnP5E6UmrrG3O8HPpvP/nXC /h/s4tgjB+Yl7rOlXbeImr+ddM0PJ5x6vYaYZfF+1z/2yAHa9jbhtDsZPjXIUP0AYYvO3H9QrJHW fU04pux0H++gbV/zOdsJiAqkp7QLnK4Eo78G6/opemQ/K/79CoKTQ2eUp2xNp/alChw2B9YRC83v 1pO8Jd3v+r7Kz5frSGLX2uw72U3HoRZSr87wuMZutbHr/h0cfHC3x+eT45MU//Ig411jAJh7x+k4 1ELowoh5ad8XbaAWtV5Nd3EHTqcTp91Jz4lOAiLnfnR2RHYUQWedBDDN1/hd6PJpvWXdROVGz/m+ hBBCCCGEEEIIIYQQQgjx6XPRtpVl35lH/StV7Pv+uygAtUFL5q1L3O/EBdCHBWCMD8bcZyIoPnhG G4YFQWR/Pp8DD7yHUqvCEGlg9Xc3oVApZlw7V3GrEznyv3upfqEclUaFSq8mIjOK3LsLUWpUhC0M 5+SzJUz0m3E6nATFBpH3tRV+t1/wTyupeLaUXd/YgVKlJHFDqsf7gc+HQqUg7yvLqX6hnMo/lYLD SVReDEv/caX7mryvLKfu5UqqXygnODGElK0LZ+wI9qd/FUoFXUXtTI6d2V3rj+L/O8RQXT82i82d 8AuIMHDF6SOOowvimBgwc+AHu7DbHEQuXkD2Z/P8bj/ny4WUPVlExXOlaIN1LP36Ko936OZ8uZAT jxfRtreJuFWJLP58PiPNQzPaybxlCcWPHuTd+14jIjuKZf+y1ud32612Dv/PByiUCooe3o9jyrWj ODQt3H3kcNKmNMx9Jj741lsoVQqyP59PcFKoX/X9ad8XX/0/2jpM+dPF2CxTBEYbWfP9K9EEeh7T rFArMUQaPI5Mh9M/dFgez4nfHcXcZ8LpdJK4MdVjN+75tO8zfgWs+s4GKp4rpeKPpeCE0LQw8r+2 3K++Odv0O8o/zNv4XYxyAJzQsKOarDmsCyGEEEIIIYQQQgghhBBCfHopgLzR0dEybxcZuw9fpHCg 7PfHCE4KJXVbhu+L59GBB3aTf89yjAmu41gtQxPs/8F75N+znAX5sRc1lsuZY8rO2/e8wjW/vwWl Rt5RKsTFUvf3Ssz9Jo8feAghhBBCCCGEEEIIIYQQ4uNpLGaN1/KGhpmn+85FYWFh/mWVyeuv7KW/ qvecR6JeSE67E1PPGOY+M5Pjk9gmphis6UOpURKaHuG7gU+RuleqiFudJElgIS6i0bYRRttHyPsI u5yFEEIIIYQQQgghhBBCCPHpdNGOhvbGbrWz+5tvoDZoKPj6KpTqi5tkVKgUrPneJhrfrqNhRxUq nZrQ9HCueHAL2iCt7wY+JXpPdOF0Osm/1/8jsYUQ5y84MYTl/+r7mHIhhBBCCCGEEEIIIYQQQohp l93R0EIIIYQQQgghhBBCCCGEEEII8Un2qTsaWgghhBBCCCGEEEIIIYQQQgghxPmTRLAQQgghhBBC CCGEEEIIIYQQQnzCSCJYCPGpYZ+001/Zi2PKfqlDEUIIIYQQQgghhBBCCCGEuKDUF/sLJ/rNlP7u KKOtw+hD9Sz+wlIW5Mde7DCEmJXdauONL75IYIyRq351/QWvPzlm5a2vvkxQfDBbfrn9o4R8Wbuc 7u/EE0W0728mZetC8u9ZcUljEUIIIYQQQgghhBBCCCGEuJD8TgQf/ek+Buv6UelU2C02wjIiyfva cgxRgXP6wso/lhIUZ2T1dzfgdALOuYYsZnBC274mGt+uZ6x9BF2wjsSNqWTdngsK1yXWUSvlTxfT V96NUqUgdlUiuXcvQ6n2b1P4aOsw3cUdtLzfiLl3nC2PbicoLnje4vPVvt1q4+QzJXQXt6PSa0je ksaim5e460879WYtFc+WALDxJ9sITQufU/3ZdB9rp35HjesHDGEBZN66hIT1Kf5Vnof6/jrX/Q83 DrL3u++c8/qb/nbn/HyxE+p3VNG2txnLoJnwzCjy711BQIRhftr3Q8PrNVT/tZxNP92GMSHknNeE pYfTV9blnhdCCCGEEEIIIYQQQgghhBCfVHM6GjrnSwVc/dub2PrYjQQnhVL+1LE5f+FI6zCJG1JQ alSotCpUOtWc2xDQcbiVxrfqALBP2qh/tQqcTpI3pwFQ+1IFzbsb3NdXPFtC5+FWFt6QReyqRJp3 Nbjr+6P1g0YaXq9hYsA051j9ic9X+2VPHqP1g0ZiVyYSnBhC9fPlNL1b73GNqWuM6ufLUAdoPlL9 Mzyzw5bBCYp/dRj7pI2EK5KZHLVQ8psjjDQNXaD6H81s96816kjalOb+X+yKBAAisqPm7bvLnzlO 7UuVpG/PZPX3NmGz2Cj5zRGPa/zMuX9kpu4x15HPXn5cknZdJtc8dQvJW9IvcDSXl4pnSxg+NXip wxBCCCGEEEIIIYQQQgghxEX0kY6GVgdoiFudSMehFvdnTruT2pcr6DjQghOIyIoi98uF7qRU5R9L 6T7eialnjKKHD6BUKwmMCWLtDzb7Vd8yOMHRn+1j9X9uouLZEvrKuwlOCvG7/t7vvcPSe1dS92oV /RU9GBYEsvyb6wiMDnLfQ/vBFhpeq8Y6YkEXqifr9lxilsf7Hd+JJ44y1j6KUq0kNC2crM/lebTv tDvZ+713CEkJo+C+VR+l67EMTVD+VDFdx9pZ8oWlAKh0atY9dBVaoxaFQkFoWjgljx3B3HsmqWrq GkNr1LHwpmwUKGh9v5GJ/rOSrk5o3dNI485axrvHMUQaSLk6g7RrFwGQc1chOXcVcvCh3fRX9s6I q/NIG83vNTDaMozT7mBBQRx5X1mGJlDrV3ze2p8cn6T9QAtxqxPJv3cFOGHXN3bQ9HYdqdsyXOE7 nZT89ii6ED3RBXEeSV5/6o93jFL6eBGjrcPEroj3yFrqwwNY/z9bCU4IQaFSEBQX7JqDFT2EpIbN S30Ap81B0SMH6CvvJiQ5lIL7VhEYY/RrfLzdvyEq0GO+lT15DI1BQ+E31vg1fgC2iSmqXzhJ55FW HFMOopfGknP3MrRBWkw94zTvqmfpvStJutKV6M+8LYdDP3wfm8Xm/g6VTk3lH0tpP9CCUq1k6T+t Iio32mf7Te/UU/50MYv/YSkZN2UDrudJw+s1rHtwC5ahCU48fhS71fXe3/f/YycAAREGrv7dTQDs uPOvOO1nMsSLbl1C9mfzXPPj9NHVqdsyUKqVdBxqRalWUvD1VUTmRLvHt+ypYobq+7FPnnm/cOH9 q0ncmIqpe4yKZ0sZqOlDqVIQmh5O+vXZ7vvzxTpiofK5UnpOdKHSqUhcn0rmbTkoNa7f6tS+WEHN iye5+rc30fhWLe0HW1Bp1Wz+xXUo1Uqf8Zn7zez7/rukX59F1h25qLTyAxwhhBBCCCGEEEIIIYQQ 4pNuTjuCp02OWWl5/5RHEqvmpZMMVPWx8afXcNWj16MxaKh6vtxdvuSLBWx5dDuGqCBW/+cmtj52 ozuJ6099AMvwBMd/dYjYFQls/c0NFN6/Zk71Sx8/yqKbF7Pl0e3oQvTUv1LlLus43Er1X8oouG8V 2564meX/sha71eZ3+7UvVWBYEMTW39zIlkevJ35t0oydmfYpO6aeccbaR+ba5YBr1+z7/76TgZo+ Cu9fzcIbs91lumAdo60jNLxeQ+1LFQREGEjalOouj12VwOSYlaKf7adhRzUo8TiauH5HNaW/O4pl 2EL82iQ0QVrMveP+x7anEVPXGDHL49EadbTvb6b6hZN+x+eNuWccp9NJcEoo+3/wHuXPHCc4ORRT t+tzgMaddQzW9pH3teUoVIo51XfanRz9+X4Ga/sISQlzJag/tKs0JDnU3a7D5kq06cMCAM67/jRT zzhTY1YCY4IYqOmj5LEzO2p9jY+3+z/bSNMQzbsbSN+e5XGsu6/xK3nsCI07awlNCyd2ZQLtB1s4 8UQRAP0VPai0avd8MveemePWEYu7jeHGQbqLO9CF6jH3mdxHWPtqP2F9CiqtyuOHJ93HO9GHBRCR HYUxIYSMGxe77yd1WwZZt+eSfn2W+/rM23I8fthxLk3v1NNT0umO7+QfzsRX/KtDDFT3kn1nvvtY 6aw7cglbFOmOv/t4B8mb00jako6p14SpZ2zW7zqb0+mk6Of7advfTHhmJPqwAOpeqaTyT6Uzrj3+ 60M07qwjMDoIY2KI+2h3X/Et/5e1LLplCY07a/ngW2/RXzXzxxxCCCGEEEIIIYQQQgghhPhkmdOO 4IrnSql+oZyJATPJm9NZ+o8r3WVNb9Wx5vubUOtdTWZ8Zgl7v/s2eV9Z5lfb/tS3DE6w7J/XErlk AeDaYTiX+ovvzHcnr+PXJNH83il32ak3asn+fD4hKa7yoPhgguKD/W5fHxFA56FW+qt7Cc+MJOb0 8btnU+vVbH3sRtQf4TjsU2/UUPFcKYkbUsi5qxCtUTfjms4jrdT9vRKAzNtzMCw4sxs57ZpMmt9t oKe0k57STiIXLyA4KdRV6IT6V6tQqpRs+NFWd73pJKs/8r+2Al2IHqVGyUjzEHu+/TZ9J7v9js8b +5QrcapQKrFP2nBM2VGqlDgcDpwOJ+becaqfLyNxYyrRBXH0lHbNqf5wwwDjnaNEZC/gioe2YLPY ePNLL54zlskxK6ferEUfFuDa+QsMNfSfV/1pgdFBrHtwC06HkzfvepHB2n6mTJNoDFqv4zN9JPRs 93+2UztrUSgUpFy90ONzb+M30W+mq6idgAgDqVdngAKGGgboLm7HYXdg6hkncEEgSrWSqj+X0bCj GpV+5qMlIMLAlQ9fB8CbX3qRsY4RcMLEgPf2NQYNcWuSaNvbxHjXGApgvHOU9O2ZKBQKQpJDCUkO pb+qB3OfidSrMzAmer4jOPPWHABa3j9Fd3HHOftmtvicDicjzUOEJIeRvj0TlVbFcOMgIalhBMW6 dmzbzFOA613ccasTybwlx+9j70cahxis6yckNYxV396A3Wpn55dfovndBpZ8scDjPd6m7nG2/Op6 jyS+0+47PqVGSdYduSSsS+bEE0UcfGg36//7KsIz5+94cCGEEEIIIYQQQgghhBBCXF7mlAjO+VIB CetTeP8/drIgL8adjJwcszI1MUXJb496XK8NmpmsPBd/66v1ancS+KPUV6jOJFR0oXr3zkxwvV80 OMEzeTSX9hd9ZgnaIB1Vfy5jvHOUmOXxLL4zH314wIfqaM/5Hb5ojTpQuHaNWoYt50wEZ92RS9q2 RTTtqqf2xQom+s0UfN11JPDhH+9BE6hl07fW0/hWHa17Gil7sojCb6zBOmphyjSJPjzAIzmrUPj/ VlfriIWTzxynr6IH24QrKWYZnPA7Pm+md85OjU+y6afXAHDggd3ogvUoVUpa3j+FfdJO294m2vY2 uevt/e47rHtwCwERBq/1p4+oDj6dPJztth1Tdo794iCTY1ZWf2ej+4cI51t/muJ0wk+hVBAYY2S0 ZZjJUSsOm8Pr+Pi6/8jFrjXjtDvpOtqGMTEEXYje47u9jZ+px7XzeGLAzOEf7/GoZ7e4EuvaYD3j naPUv1ZF7t3LCEkN48B/vedxrUqvdh91rDFqsQ5bcDqdPttXBmpJ3pxO294muo60uROs8WuTz93R H9Fs8U0f5z3WMUJPSSddRW2ggKDpY7uB/H9cSeljR9xjoA7QkPfV5SRuSPH8EiczXpZs6nbtHJ7+ EYpKp8IQE8R4xygTA2aP4+XTt2d6JIEBv+Jzf1eviYkBMyqtesb8E0IIIYQQQgghhBBCCCHEJ8uc MwEKpYKsO3Kp/ms5sSsTUagUaIN0qPUa1n7/SgIiDXMO4lLXB9d7VMc7RwlODv1I7SuUClK3ZZC6 LYPJ8UlOPl1M2e+Pseo7GzyumzJPodKqPHb5+SNxYyqG6CBOPF7E3m+/TfqNWWTemuN+1+dATR8R WVHoQvUkrk+h9sUKhuoHANdRvQPVvSy8MZuQVNf7iQdq++g+3gmALliPSqfGMjjBaOuwe6ew3Wr3 a1ejbWKKAw/uRh8ewOrvbSQ4KZS373kZztpR7C0+XwIiDWiNOvoqelzfZ7ExfGqAiGxXgnPB0lg0 ZyXYu491MFjXT+o1iwiMDkIXqvdaXxfqSoqaTh+17LA5ZsTgmLJT9PAB+it7KLhvFQuWxrrLzre+ m/PMtRN9JhRKBQGRrp223sbH1/1PG2kewmaxuROO03yN3/Su0sDoIDY/uh2lynPuBkQG0lfRg0Kp cMd/dkLaF1/tA0RkRxEUa6SntBNNoBZDVCBhGREe16j1rqPYTb3jM3YEn6+UqxZS9ecTHPvlAbRB OvK+stzjxABjfDBb/u96RluG6S7uoOZvJyl/utgjETzSNETRw/vRGnWs/a/NaAyueA2nx2i0ZRgA +6Qdc/c4SpXS/SMG9z1+6Lh5f+OzDE1Q8WwJHYdaicqLYd0Dm/3ekS+EEEIIIYQQQgghhBBCiI+n j7QlLH51EvUvV9K6p5HkLemggJStCyl76hjL/mUtGoMG64gFy+CEx3uEZ3Wp6wMpVy+k6vlygpNC CYoPxtxnovNwq+s9vH60X/18OQlXJGNMDEEbqCUoIXhGotNutbHr/h0Y44NZ/z9b/YrrbBFZUVz5 82upfamC+h2uo4Kz7shlqH6AAw+8R2hqOCGpYfSfTnhO757WButRB2ho/aARfagem8WGqWuMsIxI d/+lXbeI+leqOPzjPcQsi3e/4/WKB68CBVT9+QROhxNTtyvZWf9aNdogLYs/vxTriAW71YbdYqO3 tIuaF8pxTDncCT1f8YH39pUqJclb0ql/tYrjvz7MRL8Z+6Sd1G0Zp9uJJnJJtLutiYEJBuv6SdqU 6k6keasfvigKXYie3hNdHP7RHibHrB79brPYOPrTvfRX9hIYHcRI0xAnaotQqpXkfXX5edefNt41 yrFHDmAdsTBlniJhfYp7h6q38fHn/sF1nDLMfDexr/HThwcQtzqRziNtHHxgN1G5MYx3jRKeGUXa ta5ks6l7HH2YgYT1KdS9XEnSlWlse+JmdCF6pkyTeOOr/WnJW9Kp+ksZSo3K4/Np4Ysi6T7eQcUf Suiv7MVusZF/7wqv3+2vhh3VGBNDSL06A6Vaifr0M2D6/nb/25sY44OJXBKN0+EEBTNOA+gsasPc Z8LcZ2Kgssd9fHxoejhhGZEM1fdz7JEDWIYtOOwOUq9Z5PcPRrzFB1D62yMMNQxS8PVVJF2ZNi99 IoQQQgghhBBCCCGEEEKIy9tHOxtUAVmfzXPveFNqVGTfmUf9K1Xs+/67KAC1QUvmrUv8TsRe6vrJ m9Nx2p0UPbwfm9WGLlhPxmcW+91+2MJwTj5bwkS/GafDSVBsEHlf80xCKdRKDJEGAmNnHtnqL6VG SfadecStSWS803WkbGhaONl35NF5tI32A81og3QsvCGL7M/lA64jtdf850aq/lwT54x7AAAgAElE QVRGzd9OotSoiF2VSM6XCs7c3x15aAO1tOw+Rdu+JgJjjKRuy8CJEwUKGt6owWk/s8O39YNGV73P 5RMYYyTz9hwad9bRtr+JhPUpKFRKhur6/YoP8Nq+QqUg+7N52K02Og61otaryfvqcmKWe75j1xtv 9VU6FSu/tZ6yp44x1DBA/JokHHYHdqvr6PDhxkH6K3sB1zHJjW/Vufs176vLz7v+tMQNqe5dv/Fr kjzeb+1rfPxhGbYAzDhW3Nf4ARTctxpDVCCdR9poeKMGY0IwMctdicwF+TGoA9S07G5g2T+v8SuW D/PWvrt/NqZS/Xw5dquN+LVJM9pIuy6T8e4xeo530La3CWNCsN+72n2JXZlA0zv1nHiiyP2ZSqti 4/9uIzDGSNbtubTta+LUGzUoVEoWLI1lyRcLPNqIX51E15E2tME6InPOJO4VCgWrvr2eimdL6D3R hUqnJuPmxWTdnjsv8RkTQ4guiKPw/jXu3etCCCGEEEIIIYQQQgghhPjkUwB5o6OjZd4uMnYfvkjh CCE+jlp2n6L8qWKyPpdHVE40Yx2jBEQa3O8nng82i2tHvS5Uz+ZHrpu3dn0x95nY/c03yL9nBUmb 0nDYHVQ+V0rjW3Us++c1JKxPuWixfBzjE0IIIYQQQgghhBBCCCHETGMx3jfXNTQ0nFf7hYWF+R9t R7AQQpwleUs6Kr2ahh3V1L5UQWBMEJm35cxb+/WvVNFZ1M7kmJXcLxfOW7v+mOg34Zhy0Hm4FX1Y AJNjk/SUdKIxaDyO5L5ULvf4hBBCCCGEEEIIIYQQQghxaUgiWAgxLxLWJZOwLnne27VbbVS/UI42 WEf2nXkXfYdreFYUGZ9ZTPu+Zo7+ZB/aYB1hGRFk3poz4z3Al8LlHp8QQgghhBBCCCGEEEIIIS4N ORpaCCGEEEIIIYQQQgghhBBCCCEuootxNLTyvFoQQgghhBBCCCGEEEIIIYQQQghx2ZFEsBBCCCGE EEIIIYQQQgghhBBCfMJIIliIy4h90k5/ZS+OKfulDkUIIYQQQgghhBBCCCGEEEJ8jKkvdQDi/E2O WXnrqy8TFB/Mll9u93m93WrjjS++SGCMkat+df15tz/X77/cXE7xn3iiiPb9zaRsXUj+PSsuaSxC zNVgbT8Vz5Yw2jaCIdLAoluWkLA+5aLV/ygup/UvhBBCCCGEEEIIIYQQQsyni5MIdkLbviYa365n rH0EXbCOxI2pZN2eCwrXJdZRK+VPF9NX3o1SpSB2VSK5dy9DqfZv0/Jo6zDdxR20vN+IuXecLY9u JygueN7i89W+3Wrj5DMldBe3o9JrSN6SxqKbl7jrTzv1Zi0Vz5YAsPEn2whNC/erfsWzJZx6s9aj rYybF7P48/n+3aOfZovvgvLR/8ONg+z97jvnrHrT3+4E/Oh/J9TvqKJtbzOWQTPhmVHk37uCgAjD hb+/0xper6H6r+Vs+uk2jAkh57wmLD2cvrKui9PvnyLeni/+zC9/dBxqpe7vFZj7zQQnhbLoM4uJ LowDYKRlmIo/HGf41CABkYFk3p5D/Jokv9v2Vf98n5/zwTFlp+jh/UyOWolfmwQK0IcFzE/9y2D9 CiGEEEIIIYQQQgghhBAfNxcsEdxxuBXrsIW0axdhn7RR/2oVKp2a5M1pdBd3UPtSBfrwAFKuWgi4 Ep2dh1vJ/lweEwNmmnc1EBhjZOENWX59X+sHjbTuacJmmZpzrP7E56v9sieP0X6gheQt6ViGJqh+ vhyNQUvqtgz3NaauMaqfL0MdoME2MTWn+rYJGwBxa5JQ61zD9tGThYpzfuotvgvJV/9rjTqSNqW5 r58yTdJ1rJ2I7Cj3Z776r/yZ47R+0EjulwsxJoRQ9ZcySn5zhHUPbHa3ce5emT+m7jHXkc/O2a9J uy6TtOsyL3Akl5+KZ0tIuCKF0PT5SYCf/fyZbn+254s/88uXrqJ2ih89SECEgdiVCfRX9NB3spvo wjjsVhtHfrwH+6SdlK0L6avoofiXB9EF64hcEu2zbX/qn+/zcz6MdY5hHbEQnhnFsn9dO6/1/Vm/ 5+tCr/9Lab7XlxBCCCGEEEIIIYQQQoiPh3lPBFuGJih/qpiuY+0s+cJSAFQ6NeseugqtUYtCoSA0 LZySx45g7jW565m6xtAadSy8KRsFClrfb2Si/0w5Tmjd00jjzlrGu8cxRBpIuTrDnejJuauQnLsK OfjQbvore2fE1Xmkjeb3GhhtGcZpd7CgII68ryxDE6j1Kz5v7U+OT9J+oIW41Ynk37sCnLDrGzto ervOnYh0Op2U/PYouhA90QVxNL1bP6f604nZwvtWodKde9icNgdFjxygr7ybkORQCu5bRWCMEYDx jlFKHy9itHWY2BXxM7Ie3uLzp31f5baJKapfOEnnkVYcUw6il8aSc/cytEG++98QFUjBfavc31P2 5DE0Bg2F31jjV/+ZesZp3lXP0ntXknSlK+GXeVsOh374PjaLzd2uSqem8o+ltB9oQalWsvSfVhGV G+0z/qZ36il/upjF/7CUjJuyAaj8YykNr9ew7sEtWIYmOPH4UexW13t/3/+PnQAERBi4+nc3AbDj zr/itJ/JEC+6dQnZn81z3d/po2tTt2WgVCvpONSKUq2k4OuriMyJdo9v2VPFDNX3Y588837hwvtX k7gxFVP3GBXPljJQ04dSpSA0PZz067Pd9+eLdcRC5XOl9JzoQqVTkbg+lczbclBqXDtOa1+soObF k1z925tofKuW9oMtqLRqNv/iOpRqpc/4zP1m9n3/XdKvzyLrjlxUWpVfcX3YuZ4/4P354mt+gffn B0D1C+WotCo2/Ohq9OEBTJkmUes1gGtHu2VogoU3ZLHkiwVMmSZ5+55XqH+1msgl0T7H11d9X/fn a36OtY14LY9cvMBnv7/79dewDE0AMFjbx2t3PO8xv33NP2/1fa3ftr1NPuP3NX7gff37mv++yn3y 8ffNW/uVfyyleVcDqdcuovX9RpZ8sYCG16tx2p2s/5+taAyaeVtfQgghhBBCCCGEEEIIIT5e5vXc 0NYPGnn/33cyUNNH4f2rWXhjtrtMF6xjtHWEhtdrqH2pgoAIA0mbUt3lsasSmByzUvSz/TTsqAYl Hu+GrN9RTenvjmIZthC/NglNkBZz77j/se1pxNQ1RszyeLRGHe37m6l+4aTf8Xlj7hnH6XQSnBLK /h+8R/kzxwlODsXU7focoHFnHYO1feR9bTkKlWLO9ad3Iu/+5pvsvPvvHP/1YabMnrt2TT3jTI1Z CYwJYqCmj5LHjgDgtDs5+vP9DNb2EZIS5kqwfmhXqrf4fLXvT3nJY0do3FlLaFo4sSsTaD/Ywokn iubc/yNNQzTvbiB9exaGqEC/+q+/ogeVVu2eT+beccbaRwBXgmXacOMg3cUd6EL1mPtM7iOyfcWf sD4FlVZFx6EW9/XdxzvRhwUQkR2FMSGEjBsXu+NN3ZZB1u25pF9/Zrdm5m05ZN2eS8zy+HP2PbgS ej0lne74Tv7hTHzFvzrEQHUv2Xfmu3eKZ92RS9iiSHf83cc7SN6cRtKWdEy9Jkw9Y7N+19mcTidF P99P2/5mwjMj0YcFUPdKJZV/Kp1x7fFfH6JxZx2B0UEYE0PcRxP7im/5v6xl0S1LaNxZywffeov+ qpk/5vDF2/PH1/Nl2rnmF3h/ftgsNsbaRojKjUGhUtBT0ol11OpeR9MJ4dHWYSbHrAxU96FQKtxz cNps4+tPfW/352t++ir3R+o1GSRudK1XY0LIjPnta/55q+9r/foTv6/nP8y+/n3N/7msj9l4+/vm T/s2i43OI21Mmaco/d0RnDYHY+0jDFS71tF8rC8hhBBCCCGEEEIIIYQQHz/ztiP41Bs1VDxXSuKG FHLuKkRr1M24pvNIK3V/rwQg8/YcDAuC3GVp12TS/G4DPaWd9JR2Erl4AcFJoa5CJ9S/WoVSpWTD j7a6600nSf2R/7UV6EL0KDVKRpqH2PPtt+k72e13fN7Yp1w7HBVKJfZJG44pO0qVEofDgdPhxNw7 TvXzZSRuTCW6II6e0q451VeoFMStSUIbrCcsI4K2vU20729GrVeTf88KdzuB0UGse3ALToeTN+96 kcHafqZMk4y1jzDeOUpE9gKueGgLNouNN7/0orve9JHQs8Xnq31f5bYJG11F7QREGEi9OgMUMNQw QHdxOw67A6VK6Xf/n9pZi0KhIOXqhX73n6lnnMAFgSjVSqr+XEbDjmpU+plTPyDCwJUPXwfAm196 kbGOEXDCxIDZa/wag4a4NUm07W1ivGsMBTDeOUr69kwUCgUhyaGEJIfSX9WDuc9E6tUZGBM93xGc eWsOAC3vn6K7uOOc/T9bfE6Hk5HmIUKSw0jfnolKq2K4cZCQ1DCCYk/vyD79owHrqJW41Ylk3pKD SuffrsCRxiEG6/oJSQ1j1bc3YLfa2fnll2h+t4ElXyzweA+tqXucLb+63iOJ6rT7jk+pUZJ1Ry4J 65I58UQRBx/azfr/vorwTP8Skb6eP16fL2e3c475Bd6fH+YeV8JuvHuMXd94HbvVBgpY8oUCFt6Q RUhKGDHL4uk+3sFbX32ZgAiD6/j1s3ajw+zj6099b/fna376KvdHxk2LGazto/WDRowJwWTenuNR 7mv+eavva/36E78/z//Z+t/X/B9tGfZ7fZyTj79vvr5/Wu6XC6n+azlao47EDamU/OYw451jsOz8 15cQQgghhBBCCCGEEEKIj6d5SwRrjTpQuP6jvWXYcs5EcNYduaRtW0TTrnpqX6xgot9MwdddR7Ie /vEeNIFaNn1rPY1v1dG6p5GyJ4so/MYarKMWpkyT6MMDPJKD/iYpwLVz7OQzx+mr6HEfs2wZnPA7 Pm/0YQEATI1Psumn1wBw4IHd6IL1KFVKWt4/hX3STtveJtr2Nrnr7f3uO6x7cAsBEQav9QGSNqW5 32MalRPN7m++OWNXl+J0wkGhVBAYY2S0ZZjJUav7iOXg08nHD3ebr/jc9WZpXxOk9Vo+cbqfJwbM HP7xHo/vtltsKE8fz+qr/512J11H2zAmhqAL0fvd/44pO9pgPeOdo9S/VkXu3csISQ3jwH+95xGL Sq92H+WqMWqxDltwOl2JZF/xJ29Op21vE11H2twJrvi1ycyn2eJTqBQExQUz1jFCT0knXUVtoICg s47tzv/HlZQ+dsQ9xuoADXlfXU7ihhTPL3Ey49hwU7dr52ZISpgrDp0KQ0wQ4x2jTAyYCYw+sybT t2d6JIEBv+Jzf1eviYkBMyqtetYj0M/F1/PH2/PFfeuzzC/w/vyYHm+nzcH6/74KTaCGff/5LrUv VbDw+ixQwKpvb2Cgtg/bhI2I7Ch23b/Do9/Ay/gqFT7r+7o/X/PT7/l7jvnhD7/n3zn4s359xe/P 83/W9e9j/s9lfZyr/3z9ffPV/jSlWoVCqUClUc14xk/7qOtLCCGEEEIIIYQQQgghxMfTvP2X4MSN qRiigzjxeBF7v/026TdmkXlrjvtdhAM1fURkRaEL1ZO4PoXaFysYqh8AXEd9DlT3svDGbEJSwyi4 bxUDtX10H+8EQBesR6VTYxmcYLR12L3TzW61+7Wr0TYxxYEHd6MPD2D19zYSnBTK2/e8DGftKPYW ny8BkQa0Rh19FT2u77PYGD41QES2692aC5bGupOlAN3HOhis6yf1mkUERgehC9V7rQ+u41Ejl0SD wrWrDkB71vstAfdxz44pOxN9JhRKBQGRgZhPvyvUdPqoUYfN4VHNV3y+2p8+tnq28umEQ2B0EJsf 3e5Obp/Nn/4faR7CZrG5EyL+9n9AZCB9FT0olAp3fGcnvH2Z3rXqLf6I7CiCYo30lHaiCdRiiAok LCPC45rpI35NveMzdgSfr5SrFlL15xMc++UBtEE68r6ynKD4YHe5MT6YLf93PaMtw3QXd1Dzt5OU P13skYgbaRqi6OH9aI061v7XZjQGV7yG03NgtGUYAPukHXP3OEqV0v0jBvc9Bmg+UnyWoQkqni2h 41ArUXkxrHtgs9878sH788fX88V9/7PML1/PD8OCIFRaFZogHSGprroBUUGMNA/isDlQapRMmScJ z4xEoXAdHT05ZiV+bZLf9+etvj/352t++jN/Z5sf/vBn/s3Gn/XrLX5/nv/e+Jr/k2NWr+XTZus/ X3/f5rL+ZnO+60sIIYQQQgghhBBCCCHEx9O8bgmKyIriyp9fS+1LFdTvcB11mXVHLkP1Axx44D1C U8MJSQ2j/3TCLnKJK1GnDdajDtDQ+kEj+lA9NosNU9cYYRmu94eigLTrFlH/ShWHf7yHmGXx7ndE XvHgVaCAqj+fcB0D3O1Kdta/Vo02SMvizy/FOmLBbrVht9joLe2i5oVyHFNnjiT2FR94b1+pUpK8 JZ36V6s4/uvDTPSbsU/aSd2WcbqdaFcS97SJgQkG6/pJ2pTq/g/53uqPtg5z6IcfEJwcSnByKL2l rgRPwhWeO/bGu0Y59sgBrCMWpsxTJKxPQalREr4oCl2Int4TXRz+0R534mKar/imr5+tfSzev18f HkDc6kQ6j7Rx8IHdROXGMN41SnhmFGnXLvKr/8F13Cuc2QE8zVf/B0YHYeoeRx9mIGF9CnUvV5J0 ZRrbnrgZXYje43jrc/EV/7TkLelU/aUMpUbl8fm08EWRdB/voOIPJfRX9mK32Mi/d8WM6z6Khh3V GBNDSL06A6VaidqgwTpicd/f7n97E2N8MJFLonE6nKBw3dfZOovaMPeZMPeZGKjsIWZFAgCh6eGE ZUQyVN/PsUcOYBm24LA7SL1mke9jb/2ID6D0t0cYahik4OurSLoy7SP1wWzPH5/Pl9Nmm1++nh8K pYL0G7Ko+3slx35xAF2InuFTA0QXxKLUKHHYHRz5yV4cNifBSSF0HGpFpVWRcfNiv+7LV31/78/X /PRVPtv88MXf+TcbX+vXV/y+xs8XX/Pf3/Uxa//5+Ps2H+tvPtaXEEIIIYQQQgghhBBCiI+feT8b UqlRkn1nHnFrEl3vJwRC08LJviOPzqNttB9oRhukY+ENWWR/Lt8VhF7Nmv/cSNWfy6j520mUGhWx qxLJ+dKZ9x9m35GHNlBLy+5TtO1rIjDGSOq2DJw4UaCg4Y0anPYzO7xaP2h01ftcPoExRjJvz6Fx Zx1t+5tIWJ+CQqVkqK7fr/gAr+0rVAqyP5uH3Wqj41Arar2avK8uJ2Z5vN/95q2+MTGEnLsKaD/Q QtfRNnQhehbetJjUbZ7JmsQNqe5dZfFrksj7yjLAdZToym+tp+ypYww1DBC/JgmH3YHdavc7Pm/t +1NecN9qDFGBdB5po+GNGowJwcQsP51o9KP/ASzDrozzuY4d99Z/C/JjUAeoadndwLJ/XjOjrj+8 xe++/42pVD9fjt1qO+duz7TrMhnvHqPneAdte5swJgT7vavdl9iVCTS9U8+JJ4rcn6m0Kjb+7zYC Y4xk3Z5L274mTr1Rg0KlZMHSWI/3iwLEr06i60gb2mAdkTlnfhigUChY9e31VDxbQu+JLlQ6NRk3 Lybr9tx5ic+YGEJ0QRyF969BF6r30opv53r++PN8gdnnl6/nB0DmbTkoUNC6pxGbxUbCumRyvlwI gAIFsSsTadvbROfhVkJSwsj7yjK/d3P6qu/v/fman77KZ5sfvqi0ar/m32z8Xb+zxe/P+Hnja/77 uz689Z/Xv2/zsP7ma30JIYQQQgghhBBCCCGE+HhRAHmjo6Nl3i4ydh++SOEIcWG07D5F+VPFZH0u j6icaMY6RgmINBC5eIHvyn6yWWzsun8HulA9mx+5bt7a9cXcZ2L3N98g/54VJG1Kw2F3UPlcKY1v 1bHsn9eQsD7losXycYzv08LX/LxU89cf/qzfyzl+IYQQQgghhBBCCCGEEOLDxmK8b15saGg4r/YL Cwvz531HsBCXo+Qt6aj0ahp2VFP7UgWBMUFk3pYzb+3Xv1JFZ1E7k2NWck/vBL1YJvpNOKYcdB5u RR8WwOTYJD0lnWgMGo8jvy+Vyz2+TwNf8/NSzl9/+Fq/l3v8QgghhBBCCCGEEEIIIcSlIIlg8amR sC6ZhHXJvi+cI7vVRvUL5WiDdWTfmXfRd7iGZ0WR8ZnFtO9r5uhP9qEN1hGWEUHmrTl+v4f10xzf J52v+Xmp56+/Zlu/H5f4hRBCCCGEEEIIIYQQQoiLTY6GFkIIIYQQQgghhBBCCCGEEEKIi+hiHA2t PK8WhBBCCCGEEEIIIYQQQgghhBBCXHYkESyEEEIIIYQQQgghhBBCCCGEEJ8wkggW4jJin7TTX9mL Y8p+qUMRl4CMvxBCCCGEEEIIIYQQQggh5ov6Ugcg5mawtp+KZ0sYbRvBEGlg0S1LSFifcqnD8mC3 2njjiy8SGGPkql9dz+SYlbe++jJB8cFs+eX2Ode/0OYa34V04oki2vc3k7J1Ifn3rLiksYiL76OM /+U0f8/3+fRxeL4JIYQQQgghhBBCCCGEEB8XFycR7IS2fU00vl3PWPsIumAdiRtTybo9FxSuS6yj VsqfLqavvBulSkHsqkRy716GUu3fpuXR1mG6iztoeb8Rc+84Wx7dTlBc8LzF56t9u9XGyWdK6C5u R6XXkLwljUU3L3HXn3bqzVoqni0BYONPthGaFu53fceUnaKH9zM5aiV+bRIoQB8WAEDFsyWcerPW 47sybl7M4s/n+1XuKz6AjkOt1P29AnO/meCkUBZ9ZjHRhXH+9fH58GN8/GmjfkcVbXubsQyaCc+M Iv/eFQREGC5o6GdreL2G6r+Ws+mn2zAmhJzzmrD0cPrKujz6XZw/b8+X4cZB9n73nXPWu+lvd17U OL2N/yVbf37y9nw67/qXwfoVQgghhBBCCCGEEEIIIT5uLlgiuONwK9ZhC2nXLsI+aaP+1SpUOjXJ m9PoLu6g9qUK9OEBpFy1EHAlKjsPt5L9uTwmBsw072ogMMbIwhuy/Pq+1g8aad3ThM0yNedY/YnP V/tlTx6j/UALyVvSsQxNUP18ORqDltRtGe5rTF1jVD9fhjpAg21ias71xzrHsI5YCM+MYtm/rvWo b5uwARC3Jgm1zjWsZyeTfJX7iq+rqJ3iRw8SEGEgdmUC/RU99J3sniUR5W92djae9f0ZH1/KnzlO 6weN5H65EGNCCFV/KaPkN0dY98DmeYvaF1P3mOvIX+fs16Rdl0nadZkXOJLLT8WzJSRckUJo+vwk wM9+/ky3P9vzRWvUkbQpzV13yjRJ17F2IrKj5iWWuZht/Oe2/i4Nb8+n863vz/r9NJvv9SOEEEII IYQQQgghhBDik2HeE8GWoQnKnyqm61g7S76wFACVTs26h65Ca9SiUCgITQun5LEjmHtN7nqmrjG0 Rh0Lb8pGgYLW9xuZ6D9TjhNa9zTSuLOW8e5xDJEGUq7OcCd6cu4qJOeuQg4+tJv+yt4ZcXUeaaP5 vQZGW4Zx2h0sKIgj7yvL0ARq/YrPW/uT45O0H2ghbnUi+feuACfs+sYOmt6ucydynU4nJb89ii5E T3RBHE3v1s+p/rtffw3L0AQAg7V9vHbH8wREGLj6dzcBuBO3hfetQqWbOay+yr3FB1D9QjkqrYoN P7oafXgAU6ZJ1HqNu3y8Y5TSx4sYbR0mdkX8ObOqTpuDokcO0FfeTUhyKAX3rSIwxuizvj/j4218 TT3jNO+qZ+m9K0m60pXwy7wth0M/fB+bxebxPZV/LKX9QAtKtZKl/7SKqNxod/9Vv3CSziOtOKYc RC+NJefuZWiDtDS9U0/508Us/oelZNyUDUDlH0tpeL2GdQ9uwTI0wYnHj2K3ut77+v5/7ATwGL8d d/4Vp/1MhnjRrUvI/mwecObo39RtGSjVSjoOtaJUKyn4+ioic6Ld/Vf2VDFD9f3YJ8+8X7bw/tUk bkzF1D1GxbOlDNT0oVQpCE0PJ/36bPf9+WIdsVD5XCk9J7pQ6VQkrk8l87YclBrXjv3aFyuoefEk V//2JhrfqqX9YAsqrZrNv7gOpVrpMz5zv5l933+X9OuzyLojF5VW5VdcH3au5w94f74YogIpuG+V +9qyJ4+hMWgo/MaaMw37eP4U/Xw/XcfaPWLRGnVc+/QtgPf5A97HH3yvP5h9fU3veI5ZFs+q72zA OmLh7XteISQljE0/uwbwXH8xy+MxdY8zOWb1+2h2X88nX/PPW31f61etV3udX9GFcV7Xjz/982lZ P0IIIYQQQgghhBBCCCE+Wfw7d9lPrR808v6/72Sgpo/C+1ez8MZsd5kuWMdo6wgNr9dQ+1IFAREG kjalustjVyUwOWal6Gf7adhRDUo83g1Zv6Oa0t8dxTJsIX5tEpogLebecf9j29OIqWuMmOXxaI06 2vc3U/3CSb/j88bcM47T6SQ4JZT9P3iP8meOE5wciqnb9TlA4846Bmv7yPvachQqxZzrp16TQeJG VzzGhBCybs8l/fozu6Wndyrv/uab7Lz77xz/9WGmzFN+l3uLz2axMdY2QlRuDAqVgp6STqyjVvd1 TruToz/fz2BtHyEpYa4E7Tl2vZp6xpkasxIYE8RATR8ljx3xu76v8fE2vv0VPai0avd8MveOM9Y+ ArgSNNOGGwfpLu5AF6rH3GdyH5ENUPLYERp31hKaFk7sygTaD7Zw4okiwDVPVVoVHYda3Nd3H+9E HxZARHYUxoQQMm5cjCEq0DWW2zJmjF/mbTlk3Z5LzPL4mR13WtM79fSUdLrjO/mHM/EV/+oQA9W9 ZN+Z797pnXVHLmGLIt3xdx/vIHlzGklb0jH1mjD1jM36XWdzOp0U/Xw/bfubCc+MRB8WQN0rlVT+ qXTGtcd/fYjGnXUERgdhTAxxH+3uK77l/7KWRbcsoXFnLR986y36q2b+mMMXb88fX8+XaSNNQzTv biB9e5Z7vMD38yd+XTJZt+eSeWsOar3rhxaJG860723+gPfx97X+ps22vvFehxUAACAASURBVHxx 2p0c/dk+9/qb6DMxVN/vV91pvp5Pvuaft/r+rF9f8wu8rx9fPg3rRwghhBBCCCGEEEIIIcQnz7zt CD71Rg0Vz5WSuCGFnLsK0Rp1M67pPNJK3d8rAci8PQfDgiB3Wdo1mTS/20BPaSc9pZ1ELl5AcFKo q9AJ9a9WoVQp2fCjre5600lSf+R/bQW6ED1KjZKR5iH2fPtt+k52+x2fN/Yp1w4thVKJfdKGY8qO UqXE4XDgdDgx945T/XwZiRtTiS6Io6e0a071FSoFGTctZrC2j9YPGjEmBJN5e45HG3FrktAG6wnL iKBtbxPt+5tR69Xk37PCZ/n0kdCzxWfucSW8xrvH2PWN17FbbaCAJV8oYOENWQw19DPeOUpE9gKu eGgLNouNN7/04ox+CowOYt2DW3A6nLx514sM1vYzZZpkrH3Er/rexsfb+Jp6xglcEIhSraTqz2U0 7KhGpZ859QMiDFz58HUAvPmlFxnrGAEnTAyY6SpqJyDCQOrVGaCAoYYBuovbcdgdaAwa4tYk0ba3 ifGuMRTA/2PvvqPjKu+Ej3+njzQajaolqxerWcVINtjGGBvbYGpgA3aSfUMgsGRfSHbf7G4Om909 7wZ2k2xJSCGVLDmJk5clCQSCwaa6YeMi25Jlq1jF6r1rpJFmpCnvH2ONLSTNvbaEbdjf5xz+QPc+ 9/6eqnP08/PcsU47mXfloNFosKVGYEuNoL+6h/E+B+m3ZWFNnvmN4Jz7/f3Zsvcc3Sc6ZsUWLD6f 18dI8xC21Egy78pBZ9Qx3DiILT2SsKX+Hdfu80l/l91Fwppkcj5dgM6kbtfgSOMQg3X92NIjWf3k zXhcHnY//DLN7zSQ/2DxjO94O7rH2Pzs3TOSqD6Pcnxag5bc7YUkrUvl1HOlfPD0Htb/yxaictQd z6y0/gRdXy5+zu5aNBoNabdddOS4ivUn8cYUAOpeqcLtdBOZFc3y8zuSJ/qDjx+tThu0/5Xm37T5 5peSoYZ+xrpGFedfMErrk9L4C1Zeaf4qja/JURcw//xR45M+f4QQQgghhBBCCCGEEEJ8Mi1aItho NYHG/0d757BzzkRw7vZCMrZm0/RuPbUvVTLRP07x4/4jWY98ez8Gi5GNX1tP45t1tO5vpOIXpZR8 ZS0uu5MpxyTmqJAZyT+NRv1XXV0jTs786iR9lT2BY5KdgxOq4wvGHBkCwNTYJBv/w3+U6KFv7MEU bkar09Ky9xyeSQ9tB5poO9AUKHfg62+z7qnNhESHBi2vRsrGjMB3TmML4tjz1V0zdoUFu64YX5S/ fj63l/X/sgWDxcD7//gOtS9Xsuzu3MARzeHnk5vzdYvmfMJDo9Vgibdibxlm0u5SXT5Y/wTrX++U B2O4mbFOO/WvVVP4xZXY0iM59M/vzXi+zqwPHNVqsBpxDTvx+Xw4zifiJgbGOfLt/TPKeJxutBYj qZsyaTvQRNfRtkCCKPHG1Lkrcpnmi0+j0xCWEM5oxwg9ZZ10lbaBBsLOH7sNsOIvb6D8J0cDfawP MVD06KoZu1YBf2LsQ+3v6PbvfLSlRfrjMOkIjQ9jrMPOxMA4lrgLczLzrpwZSSxAVXyBd/U6mBgY R2fUz3mE+XyU1p9g60ug6h4fXcfasCbbMNnMgZ+rXX/6q3s5+4czGCxGVn11XWDuqhk/wUyPp/nm XyCeeeaXkvG+cUB5/vmD4LI+pq16/M1Baf6qHV/zzZ9Fjf9jOn+EEEIIIYQQQgghhBBCfDIt2l+K kzekExoXxqmfl3LgybfI/FQuOfcXBL5VOHC2j+jcWEwRZpLXp1H7UiVD9QOA/6jPgZpeln0qD1t6 JMVPrGagto/uk50AmMLN6Ex6nIMT2FuHAzv5PC6Pql1Z7okpDj21B3NUCGv+YQPhKRG89dgrcFES IFh8SkJiQjFaTfRV9vjf53QzfG6A6LwlACy5bimGsAvJnu7jHQzW9ZN+ezaWuDBMEeag5dXor+wh Jj8ONP5dawDGixJMwa4rxWeODEFn1GEIM2FL9yczQmLDGGkexOv2YorwJ80c54/K9bq9cwd5vrm9 Ux4m+hxotBpCYiyMn/9Wa7DywfpHqX9DYiz0Vfag0WoC77844a1ketedJS6MTT+4a87kfHReLGFL rfSUd2KwGAmNtRCZFT3jnulvujp6x2btCF6otC3LqH7hFMe/fwhjmImiR1YRlhgeuG5NDGfzD+/G 3jJM94kOzv7hDKd/eWJGImukaYjS7x7EaDVx4z9vwhDqjzf0fKLK3jIMgGfSw3j3GFqdNvCPGAJ1 DJn53Vq18TmHJqjcUUbH4VZii+JZ941NqnfkQ/D1R2l9CdS/eQi30x1I2E1Ts/647C5O/vAwPq+P kidWz0jmqRk/wYQuCQs6/wLmmV+eLjsAzmH/P4xwDTtnPH866a00f+cbH2qoGX/zUTN/lcZXMNM7 cudrH7Xxf5znjxBCCCGEEEIIIYQQQohPpkXdMhSdG8st37mD2pcrqd/pP0o1d3shQ/UDHPrGe0Sk R2FLj6T/fMIzJt+f6DSGm9GHGGjd14g5wozb6cbRNUpk1vnvO2og485s6l+t5si39xO/MjHwjcib ntoCGqh+4RQ+rw9Htz+ZUf9aDcYwI8v//DpcI048Ljcep5ve8i7O/v403ilvICGjFB8Ef75WpyV1 cyb1f6rm5I+OMNE/jmfSQ/rWrPPPifMnYc+bGJhgsK6flI3pgURAsPJK7K3DHP7XfYSnRhCeGkFv uT/BlXRTqqrrauLLvCeXuj9Wcfx7hzDZzAyfGyCueClag5ao7FhMNjO9p7o48q39gaNYP2ysy87x Zw7hGnEyNT5F0vo0VeWV+kepfy1xYTi6xzBHhpK0Po26V6pIuSWDrc/dh8lmVjw+1xwVQsKaZDqP tvHBN/YQWxjPWJedqJxYMu7IDtyXujmT6v+uQGvQzfj5tKjsGLpPdlD56zL6q3rxON2s+NL1Qd+t VsPOGqzJNtJvy0Kr16IPNeAacQbqt+dvdmFNDCcmPw6f1wcaf70u1lnaxnifg/E+BwNVPcRfnwRA RGYUkVkxDNX3c/yZQziHnXg9XtJvz55xrO3lxgdQ/tOjDDUMUvz4alJuybisNphv/VFcX84b6/Qn TKd3+AcorT9A2Y8O4xyawBIXhr1tBHub/3r2n+WrHj/z0Wg1Qecf5/OW882v0FgLWoOW4cZBDn9z nz8hedGu1ajsGFXzd77xoUTt+JuP0vwF5fEVjFL7/E+ZP0IIIYQQQgghhBBCCCE+eRb97EitQUve 54pIWJvMWKf/SMyIjCjythfReayN9kPNGMNMLLsnl7zPrvAHYdaz9h83UP1CBWf/cAatQcfS1ckU fKE48Ny87UUYLUZa9pyj7f0mLPFW0rdm4cOHBg0Nb5zF57mww7d1X6O/3GdXYIm3krOtgMbddbQd bCJpfRoanZahun5V8QFBn6/Racj7TBEel5uOw63ozXqKHl1F/KpE1e22kPLWZBsFDxXTfqiFrmNt mGxmlt27nPSt2aquq5HzQAEaNLTub8TtdJO0LpWCh0sA/1GnN3xtPRXPH2eoYYDEtSl4PV48Ls+M ZyTfnB7YVZm4NoWiR1aqKq/UP0r9u2RFPPoQPS17Glj5V2u5HMVPrCE01kLn0TYa3jiLNSmc+FUz E2HJG9KpefE0Hpc78M3Yi2XcmcNY9yg9JztoO9CENSlc9a52JUtvSKLp7XpOPVca+JnOqGPDv23F Em8ld1shbe83ce6Ns2h0WpZct5T8B4tnPCNxTQpdR9swhpuIKbjwDwM0Gg2rn1xP5Y4yek91oTPp ybpvObnbChclPmuyjbjiBEq+vDawu/xyzbX+qFlfAJznd4LOdax9sPVn0u6it+LC96hrfnc6UC7r vuVoNBpV4weY95u1webftPnmlz7EQP7ni6l9uZLxPgfL/3wFjbtrA+VmzL/6fhLXpTLcNDgrhvnG hxKdUa9q/M1HzfwNNr6UxpRi+6iM/5Mwf4QQQgghhBBCCCGEEEJ8smiAIrvdXhHsJmv3kSsUjhAf jZY95zj9/AlyP1tEbEEcox12QmJCiVmu/vhtJW6nm3e/vBNThJlNz9y5aM9VMt7nYM9X32DFY9eT sjEDr8dL1W/KaXyzjpV/tZak9WlXLJaPY3zXkprfn6buj1UUPFRC5l05VyUGj8vDGw/+AUu8lS3P 3n1VYviwYPP3kz6+Pun1E0IIIYQQQgghhBBCiP+pRuODb15saGhY0PNLSkpWLPqOYCGuRambM9GZ 9TTsrKH25Uos8WHkPFCwaM+vf7WaztJ2JkddFH5op+ZHbaLfgXfKS+eRVsyRIUyOTtJT1okh1DDj yO+r5VqP72qbHHVx8tkjWOLD6PigBeCSdtwuvnm2JV9FwebvJ318fdLrJ4QQQgghhBBCCCGEEOKj I4lg8T9G0rpUktalLvpzPS43Nb8/jTHcRN7niq74Dr2o3Fiy/mw57e83c+zf38cYbiIyK5qc+wtU f4f1f3J8V9tY1yjuiSnaDjRhjg4l/8FibKkRVzusa8588/eTPr4+6fUTQgghhBBCCCGEEEII8dGR o6GFEEIIIYQQQgghhBBCCCGEEOIKuhJHQ2sX9AQhhBBCCCGEEEIIIYQQQgghhBDXHEkECyGEEEII IYQQQgghhBBCCCHEJ4wkgoW4hngmPfRX9eKd8lztUIT4xFno/Lra8/Nqv18IIYQQQgghhBBCCCHE x4v+agcgrj0el5s3HnwJS7yVLc/erXj/5KiLNx99hbDEcDZ//64rEOHiupbiP/VcKe0Hm0m7dRkr Hrv+qsYiPh6upfE7WNtP5Y4y7G0jhMaEkv3pfJLWp12x8koWOr8WWn6h9bsa68O1NL6EEEIIIYQQ QgghhBBCXJorkwj2Qdv7TTS+Vc9o+wimcBPJG9LJ3VYIGv8tLruL0788Qd/pbrQ6DUtXJ1P4xZVo 9eo2Ldtbh+k+0UHL3kbGe8fY/IO7CEsIX7T4lJ7vcbk586syuk+0ozMbSN2cQfZ9+YHy087tqqVy RxkAG/59KxEZUZdUPpiOw63U/bGS8f5xwlMiyP6z5cSVJKi+Hkz38Xbqd57F3jqMOTKEnPsvLYER rPxw4yAHvv72nOXu/cPnVPWPIh/U76ym7UAzzsFxonJiWfGl6wmJDlVdh4VqeP0sNb87zcb/2Io1 yTbnPZGZUfRVdAXGhbgyFjq+BXinPJR+9yCTdheJN6aABsyRIYtTPsj87a/u5YOn9hASHcptP7uX iYFx3nn8NQDueeEzaA0XfocsdH4tpPxC20fp/WrWFyGEEEIIIYQQQgghhBD/s3xkieCOI624hp1k 3JGNZ9JN/Z+q0Zn0pG7KoPtEB7UvV2KOCiFtyzIAKneU0XmklbzPFjExME7zuw1Y4q0suydX1fta 9zXSur8Jt3PqkmNVE5/S8yt+cZz2Qy2kbs7EOTRBzYunMYQaSd+aFbjH0TVKzYsV6EMMuCemLrl8 MF2l7Zz4wQeERIey9IYk+it76DvTHUj0Kl2faWZ21Tk4wYlnjxCWYCXpplQ6j7RS9uOjWJNs2NIj FWNTKm+0mkjZmBG4f8oxSdfxdqLzYgF1/aPk9K9O0rqvkcKHS7Am2aj+7wrKfnyUdd/YNE+tF5+j e9R/pKtv/nsy7swh486cjziSa0/ljjKSbkojInNxEuAXrz9KFjq+rxUf9fhVMto5imvESVROLCv/ z42LWl7N/J0YGMfeNsJQXf+871jo/FpI+YW2j9L71awv16rFnv9CCCGEEEIIIYQQQggh/BY9Eewc muD08yfoOt5O/uevA0Bn0rPu6S0YrUY0Gg0RGVGU/eQo472OQDlH1yhGq4ll9+ahQUPr3kYm+i9c xwet+xtp3F3LWPcYoTGhpN2WFUj0FDxUQsFDJXzw9B76q3pnxdV5tI3m9xqwtwzj83hZUpxA0SMr MViMquIL9vzJsUnaD7WQsCaZFV+6Hnzw7ld20vRWXSCR6/P5KPvpMUw2M3HFCTS9U39J5d0TU9T8 /gydR1vxTnmJu24pBV9ciTHMCEDN70+jM+q4+Vu3YY4KYcoxid5sCLxD6fpYh53yn5dibx1m6fWJ M7JK5qgQ1n/zVsKTbGh0GsISwqncUUZfZc+MRJnP7aX0mUP0ne7GlhpB8ROrscRbFcuHxloofmJ1 4DkVvziOIdRAyVfWqh4/wdrH0TNG87v1XPelG0i5xZ9wznmggMP/uhe30x14hs6kp+q35bQfakGr 13Ld/15NbGGc4vOb3q7n9C9PsPx/XUfWvXkAVP22nIbXz7Luqc04hyY49fNjeFz+73ru/bvdAIEd jAA7P/c7fJ4LGZzs+/PJ+0yRf3ycP5o1fWsWWr2WjsOtaPVaih9fTUxBXKD/Kp4/wVB9P57JC98P LfnyGpI3pOPoHqVyRzkDZ/vQ6jREZEaReXdeoH5KXCNOqn5TTs+pLnQmHcnr08l5oCCw27L2pUrO vnSG2356L41v1tL+QQs6o55N37sTrV6rGN94/zjv/9M7ZN6dS+72QnRGnaq4Pmyu9afqt+U0v9tA +h3ZtO5tJP/BYhper8Hn8bH+m7cqjs93nniNqbFJ7vrNthnt8dZjr5J4YwpFj65S7B+l9StY+zW/ U8+ZX5eR//nrWPYp//g6/fwJmt6p5+Zv3YYlPgwIPn6D9Z9S+xhCL6wT83nn8ddwDk0AMFjbx2vb X5wxvpXGX7DyaudvWEI4veWdDNYPEJYYzliHPXBtofMrWHk1lNpHaf4Ee3/7By2K60vpdw7Sdbx9 RkxGq4k7fvlp1XWYb32H4ONrvM/B3r/dhT7EwJYf3s3U+BTv/fXrhMRY2PSMv36LNf+FEEIIIYQQ QgghhBBCzKTu3GWVWvc1svdvdzNwto+SL68JJC0ATOEm7K0jNLx+ltqXKwmJDiVlY3rg+tLVSUyO uij9z4M07KwBLTOOZq3fWUP5z47hHHaSeGMKhjAj471j6mPb34ija5T4VYkYrSbaDzZT8/szquML ZrxnDJ/PR3haBAf/73uc/tVJwlMjcHT7fw7QuLuOwdo+iv5iFRqd5pLLl/3kKI27a4nIiGLpDUn+ P/4/VwqA2+lmtG2E2MJ4NDoNPWWduOyuwHuUrvs8Po595yCDtX3Y0iL9CdYP7SqzpUYE7ve6/QmH Dx9r6ugZY2rUhSU+jIGzfZT95OgllQcYaRqieU8DmXflEhprUd0/wdqnv7IHnVEfGE/jvWOMto8A /gTGtOHGQbpPdGCKMDPe5wgc4a30/KT1aeiMOjoOtwTu7z7ZiTkyhOi8WKxJNrI+tTxQn/StWeRu KyTz7gu73XMeKCB3WyHxqxJntcm0prfr6SnrDMR35tcX4jvx7GEGanrJ+9yKwLGxudsLicyOCcTf fbKD1E0ZpGzOxNHrwNEzOu+7Lubz+Sj9zkHaDjYTlRODOTKEulerqPp/5bPuPfmjwzTursMSF4Y1 2RY42l0pvlV/fSPZn86ncXct+772Jv3Vs/8xh5Jg64/b6abzaBtT41OU/+woPreX0fYRBmr87wk2 PsMSwnE73UyOutjzN7s4/M19OAf9Sb3pRBgE7x+169dc7ZewNgWNRkP3yY7Afd0nOwiNtRCZFR34 2XzjV03/KbWPkvTbs0je4J+P1iTbrPGtNP6ClVc7fyOXRdFzqov+yh6ic2JnxLfQ+aWmfDBK7TNt vvkT7P1q1pfEdankbisk5/4C9Gb/v/9Kvjntkuow3/quNL5CYy3kbi/CNeyk7pVqGl4/i3fKS+HD JYH6Lcb8F0IIIYQQQgghhBBCCDHbou0IPvfGWSp/U07yzWkUPFSC0WqadU/n0Vbq/lgFQM62AkKX hAWuZdyeQ/M7DfSUd9JT3knM8iWEp0T4L/qg/k/VaHVabv7WrYFy00lSNVb8xfWYbGa0Bi0jzUPs f/It+s50q44vGM+UP3Gk0WrxTLrxTnnQ6rR4vV58Xh/jvWPUvFhB8oZ04ooT6CnvuqTyzqEJukrb CYkOJf22LNDAUMMA3Sfa8Xq8jPf4E0pj3aO8+5XX8bjcoIH8zxez7J5cxetDDf2MddqJzlvCTU9v xu10s+sLL81Z18lRF+d21WKODPHvHL6IJS6MdU9txuf1seuhlxis7WfKMYnBYlRVHuDc7lo0Gg1p t80+8nm+/pnoHw/aPo6eMSxLLGj1WqpfqKBhZw068+yhHxIdyi3fvROAXV94idGOEfD5j5wN9nxD qIGEtSm0HWhirGsUDTDWaSfzrhw0Gg221AhsqRH0V/cw3ucg/bYsrMkzv+GZc38BAC17z9F9ouPD oQWNz+f1MdI8hC01ksy7ctAZdQw3DmJLjyRsqT9R6R73H0XusrtIWJNMzqcL0JnU7bobaRxisK4f W3okq5+8GY/Lw+6HX6b5nQbyHyye8R1vR/cYm5+9e0YS3+dRjk9r0JK7vZCkdamceq6UD57ew/p/ 2ULUhxJ681Gz/hQ+XELN705jtJpIvjmdsh8fYaxzFFZeuGeu8Rm21Erf6W5G2+04ByeYGpsMnFYw vRsX5u8fUL9+zdV+5sgQovOXMFDdy+T5d08MjM9IdAd7v1L/XUr7zCfr3uUM1vbRuq8Ra1I4OdsK ZlxXGn/ByqudvzH5cZT/7BjWZBsmm3nGtYXMLzTqygej1D6Bus7R/0rxq1lfEm9MAaDulSrcTjeR WdEsP79jXq351ndH95ji+pB5Zw5t7zdxbvdZNFotccVLiSu+8FmChc5/IYQQQgghhBBCCCGEEHNb tESw0WoCjf+P9s5h55yJmNzthWRszabp3XpqX6pkon+c4sf9RwIf+fZ+DBYjG7+2nsY362jd30jF L0op+cpaXHYnU45JzFEhM5KzGo36r2K6Rpyc+dVJ+ip7At/nnd7Vpya+YKZ3Dk6NTbLxP24H4NA3 9mAKN6PVaWnZew7PpIe2A020HWgKlDvw9bdZ99RmQqJDg5Z3nE/kTgyMc+Tb+2e82+N0BxIqPreX 9f+yBYPFwPv/+A61L1ey7O5cxevTRyyHn08ezNes3ikPx7/3AZOjLtb8/QZ0ppnDR3M+IajRarDE W7G3DDNpdwUSwUrlfR4fXcfa5kzkwPz9o9Q+3ikPxnAzY5126l+rpvCLK7GlR3Lon9+bca/OrA8c dWywGnENO/H5fIrP11qMpG7KpO1AE11H2wLtnXhj6twNeZnmi2/6OOPRjhF6yjrpKm0DDYRdtFt1 xV/eQPlPjgbGoD7EQNGjq2bvCjyf+LqYo9u/c9OW5j8GXGfSERofxliHnYmBcSxxF+Zk5l05s5JY auILvKvXn+TUGfWzxkcwatYfrV6HRqtBZ9DNOcbnG59hCeEA9J3uxpoYzkjTECPNw8DMHcHz9c/k qEv1+jVX+wEkrUulv7KH3lNdjPf5x+N0ck/p/Ur9p7Z9gDnHhxqqx98c1M5fQ5iRiMxo4oqXMuWY vOQY551fl/B75nLbZ9p8/b8Y+qt7OfuHMxgsRlZ9dR1a3RwHggSJf771Xc36oNFpSLopjeoXTgFe ch6YJxF+mfNfCCGEEEIIIYQQQgghxNwW7S+tyRvSCY0L49TPSznw5FtkfiqXnPsLAt/6GzjbR3Ru LKYIM8nr06h9qZKh+gHAf9TnQE0vyz6Vhy09kuInVjNQ20f3yU4ATOFmdCY9zsEJ7K3DgZ3CHpdH 1a5G98QUh57agzkqhDX/sIHwlAjeeuwVuGhHXrD4lITEhGK0muir7PG/z+lm+NwA0XlLAFhy3VIM YRd2xXYf72Cwrp/027OxxIVhijAHLT+9a9ISF8amH9w16w/4+hADOqMOQ5gp8M3ekNgwRpoH8bq9 hC4JC3rdFOFPujrOH1XrdXtn1dE75aH0u4for+qh+InVLLlu6eyG8F24d6LPgUarISTGorr8SPMQ bqc7kFC4WLD+UWqfkBgLfZU9aLSaQCwXJ+SVKD0fIDovlrClVnrKOzFYjLOO7QUC32R29I7N2rG3 UGlbllH9wimOf/8QxjATRY+sIiwxPHDdmhjO5h/ejb1lmO4THZz9wxlO//LEjETcSNMQpd89iNFq 4sZ/3hT4Nmzo+USvvcWf/PRMehjvHkOr0wb+EUOgjiFzf09WKT7n0ASVO8roONxKbFE8676xSfWO fFBef5QEG59hCf7+H6zrIyQ6FOfwBAO1ff5rcySzP+xS1q/52i9hTTKnf3mC3oouJvr9ybXpI7aV XEr/BTPf+FBDzfibj9r56/P6uOnpzWh0Gip3zD62/KO2kPaZNl//qyobZH1x2V2c/OFhfF4fJU+s njPZrBj/POv75Pmke7DxNTnqomFnDaYIM65hJ41v1rEyKybw6IXOfyGEEEIIIYQQQgghhBBzW9Qt N9G5sdzynTuofbmS+p3+o1BztxcyVD/AoW+8R0R6FLb0SPrPJzxj8v2JTmO4GX2IgdZ9jZgjzLid bhxdo0RO/6FYAxl3ZlP/ajVHvr2f+JWJgW9E3vTUFtBA9Qun8Hl9OLr9ycz612owhhlZ/ufX4Rpx 4nG58Tjd9JZ3cfb3p/FOeQMJPaX4IPjztTotqZszqf9TNSd/dISJ/nE8kx7St2adf04cMflxgWdN DEwwWNdPysb0wB/Kg5U3R4WQsCaZzqNtfPCNPcQWxjPWZScqJ5aMO7LRaDVk3pNL3R+rOP69Q5hs ZobPDRBXvDSwwy3Y9ajsWEw2M72nujjyrf1Mjrpm9Kvb6ebYfxygv6oXS1wYI01DnKotRavXUvTo qsB9Y112jj9zCNeIk6nxKZLWp6E1aNWX77T76/uhbwcr9Y9S+1jiwnB0j2GODCVpfRp1r1SRcksG W5+7D5PNrLh7UOn501I3Z1L93xVoDboZP58WlR1D98kOKn9dRn9VLx6nmxVfuj7ou9Vq2FmDNdlG +m1ZaPVa9KEGXCPOQP32/M0urInhxOTH4fP6QOOv18U6S9sY73MwJwgFFgAAIABJREFU3udgoKqH +OuTAIjIjCIyK4ah+n6OP3MI57ATr8dL+u3ZM46Fvtz4AMp/epShhkGKH19Nyi0Zl9UG860/SpTG 5/Q/BBisGyDj9iwmHZMM1vajM+kxRZhnzZdZVKxfSgwWI0tWLKX3VBdT45MsuztPudB5i9F/MP/4 UKJ2/M1Haf5evKtZbeL/o3C57bNY5l1ffFD2o8M4hyawxIVhbxvB3uYff9l/lh8Yf0rxz7e+qxlf 1S9UMDnqYu0/3ULj7lraD7WQeGNq4JvHizH/hRBCCCGEEEIIIYQQQsy26Gcvag1a8j5XRMLaZP/3 JYGIjCjythfReayN9kPNGMNMLLsnl7zPrvAHYdaz9h83UP1CBWf/cAatQcfS1ckUfOHC9yvzthdh tBhp2XOOtvebsMRbSd+ahQ8fGjQ0vHEWn+fCDt/WfY3+cp9dgSXeSs62Ahp319F2sImk9WlodFqG 6vpVxQcEfb5GpyHvM0V4XG46DreiN+spenRV4I/caiiVL35iDaGxFjqPttHwxlmsSeHEr7rwh/qc BwrQoKF1fyNup5ukdakUPFyi6rrOpOOGr62n4vnjDDUMkLg2Ba/Hi8fl/3bxcOMg/VW9gP/o3cY3 6wL9dnEiN/nm9MCux8S1KRQ9svKSyjuHnQCzjvVV0z/B2mfJinj0IXpa9jSw8q/Wqu6Tiym1P/h3 pda8eBqPyz3r2F6AjDtzGOsepedkB20HmrAmhave1a5k6Q1JNL1dz6nnSgM/0xl1bPi3rVjireRu K/R/o/ONs2h0WpZct3TG92EBEtek0HW0DWO4iZiCC/9wQaPRsPrJ9VTuKKP3VBc6k56s+5aTu005 yaomPmuyjbjiBEq+vDawO/1yzbX+KFEanyGxFrQGLR6Xm7CEcNxON/2VPYSnRqiOS2n9UiPpplS6 T/q/DzvX+JrPYvQfzD8+lOiMelXjbz6LMX+vhMttn8Uy3/ridk7RW9EN+Md3ze9OB8pk3bc8cPS1 Uvzzre9K42uwtp+WfeeIyY9jyYp4whKs7Pu73VT813Gi82IxWIyLNv+FEEIIIYQQQgghhBBCzKQB iux2e0Wwm6zdR65QOEJ8NFr2nOP08yfI/WwRsQVxjHbYCYkJJWb5EuXCKrmdbt798k5MEWY2PXPn oj1XyXifgz1ffYMVj11PysYMvB4vVb8p9x+/+ldrSVqfdsVi+TjGJ659V2L+CiGEEEIIIYQQQggh hBBX0mh88M1PDQ0NC3p+SUnJikXfESzEtSh1cyY6s56GnTXUvlyJJT6MnAcKFu359a9W01nazuSo i8KLdmJfCRP9DrxTXjqPtGKODGFydJKesk4MoYYZR5JfLdd6fOLa91HPXyGEEEIIIYQQQgghhBDi k0h2BAuxQB6Xm10PvYwx3ETGHdn+725eQT6fj5rfnab9/WZcw06M4SYis6LJub8AW3rkFY3l4xif EEIIIYQQQgghhBBCCCHElXYldgRLIlgIIYQQQgghhBBCCCGEEEIIIa6gK5EI1i7oCUIIIYQQQggh hBBCCCGEEEIIIa45kggWQgghhBBCCCGEEEIIIYQQQohPGEkEiyvKM+mhv6oX75TnqpRfqKv9fhHc td4/13p8QgghhBBCCCGEEEIIIYT45NBf7QCutMHafip3lGFvGyE0JpTsT+eTtD5txj0el5s3HnwJ S7yVLc/e/ZHHNDnq4s1HXyEsMZzN379rQc9SU7+PsrySU8+V0n6wmbRbl7HiseuvePmF1m+h778c izk+PumuRv9cio86vmt9/gshhBBCCCGEEEIIIYQQ4sq5ZhLB3cfbqd95FnvrMObIEHLuvygB4YO2 95tofKue0fYRTOEmkjekk7utEDT+Wyp3lHFuV+2MZ2bdt5zlf74i8P/eKQ+l3z3IpN1F4o0poAFz ZMgVquFHb6H1C1reB/U7q2k70IxzcJyonFhWfOl6QqJD6a/u5YOn9hASHcptP7uXiYFx3nn8NQDu eeEzaA0XNp5HZkbRV9FFREbUZdVxIeUXo/+Dvb/h9bPU/O40G/9jK9Yk2yXH90nmsrs4/csT9J3u RqvTsHR1MoVfXIlWr1U1v6ed21VL5Y4yADb8+9ZZ/bCQ8RGs/5TWl5GWYSp/fZLhc4OExFjI2VZA 4tqUWe/4KMfP1Zr/QgghhBBCCCGEEEIIIYS4Nn1kieCOI624hp1k3JGteK9zcIITzx4hLMFK0k2p dB5ppezHR7Em2bClR+KZdFP/p2p0Jj2pmzLoPtFB7cuVmKNCSNuyDAD3hBuAhLUp6E3+an042TLa OYprxElUTiwr/8+NQSLSBLn20VnoW9XX79LLn/7VSVr3NVL4cAnWJBvV/11B2Y+Psu4bmwL3TAyM Y28bYaiuf953ZNyZQ8adOZcc22KUX2j7KL3f0T3qP/LXd1mPvqoqd5SRdFMaEZmXl6D/sA/P/8od ZXQeaSXvs0VMDIzT/G4Dlngry+7JVTW/ARxdo9S8WIE+xIB7YmrO9y5kfATrv2Dri8fl5ui39+OZ 9JB26zL6Kns48f0PMIWbiMmPUx3fQsfP1Z7/n2SLPT+EEEIIIYQQQgghhBBCiCth0RPBzqEJTj9/ gq7j7eR//joAqn5bTvO7DaTfkU3r3kbyHyym4fUafB4f6795K+aoENZ/81bCk2xodBrCEsKp3FFG X2UPtvRIdCY9657egtFqRKPREJERRdlPjjLe6wi8dzoxVPLEanSm2dV65/HXcA5NADBY28dr218M 7GAFGOuwU/7zUuytwyy9PnF2VtYHrfsbadxdy1j3GKExoaTdlhVIdI112Kl4/gRD9f14Ji98/7Pk y2tI3pBO59E2mt9rwN4yjM/jZUlxAkWPrMRgMQbu1Zn0VP22nPZDLWj1Wq7736uJLYxDDaX6ObpH qdxRzsDZPrQ6DRGZUWTenRd4frDyjp4xmt+t57ov3UDKLRkA5DxQwOF/3Yvb6Q7EEJYQTm95J4P1 A4QlhjPWYQ9c2/m53+HzXMhwZd+fT95nioALRx+nb81Cq9fScbgVrV5L8eOriSmIUyy/GO1T+1Il Z186w20/vZfGN2tp/6AFnVHPpu/diVavDfr+9g9aOPXzY3hc/n7f+3e7AWY8v/Q7B+k63j4jJqPV xB2//LTqOvjcXkqfOUTf6W5sqREUP7EaS7wVANeIk6rflNNzqgudSUfy+nRyHihAa9Ay3udg79/u Qh9iYMsP72ZqfIr3/vp1QmIsbHrGX7/x/nHe/6d3yLw7l9ztheiMOtVxXWyu+Q/+JK7RamLZvXlo 0NC6t5GJfv/8VTO/fT4fZT89hslmJq44gaZ36me8V2l8BGt/Nf0XbH0ZbhzEOTTBsntyyX+wmCnH JG899ir1f6oJJIIXOn6UXM35rzfrg65/cSUJQef3cOMgB77+NvErE1n99zfjGnHy1mOvYkuLZON/ 3q6q/sHGPyjPb6X1e7HmhxBCCCGEEEIIIYQQQghxJS1qIrh1XyOVvylHo9UE/oA+ze1003m0janx Kcp/dpSweCujHXYGanqJX5mILTUicK/X7f9D/MXHmprCTYy0DNN3upvmd+oJiQ4lZePFz/cnavZ8 dRdup5u4kgSKHl2FIdQAQPrtWYx1jtK6rxFrko3EtSnoz1/zeXwc+85BxjrtROct8SegPrQrr35n DdUvnMJkM5N4YwpjnXbGe8cC1088exh7yzD5DxbTfrCZ4cZBcrcXEpkd42+b/Y04ukaJX5XIQHUv 7QebMViMFD2yMvCM4cZB3BNTmCLMjDQNUbmjjFu+e4eqtg9WP4CynxxlsLafZffkotFr6Sptx9Ez GkgEBSvfX9mDzqgPHNU93jvGaPsI4E/ATItcFkXPqS5GmoZIWJ08IxGc80ABeGG4aZDuEx1z1qHp 7XrClloD9T/z6wv1V1N+Ie0z7eSPDjNUN0BkdjSGMJP/6GKF91uTbGR9ajmt+xsZ73OQvjULU7h5 xvMT16ViS4vE5/VxbtdZ3E43yTenXVIdHD1jhESHYokPY+BsH2U/Ocr6f70Vn89H6XcOMljXT/yq RFwjTupercLtnKLwiysJjbWQu72Iqt+WU/dKNZ4pD94pL4UPlwTqt+qvb6Tu1Srq/1RNV2k71/3v G4hZvuSS4gs2/5euTqL6hQpK//Mg0bmxoGXGt2eV5nfj7joGa/tY8w8b6D3VNevdSuMjWPur6b9g 64ve7L/P3jrM5KiLwdp+NFpNYI4oxafm/Uqu5vzXm8MU1z8IPr8XQmn8X2y++a0U/2LMDyGEEEII IYQQQgghhBDiSlu0RPC5N85S+Ztykm9Oo+ChEoxW06x7Ch8uoeZ3pzFaTSTfnE7Zj48w1jkKF/2t fnLUxbldtZgjQ/w7cy/SebSVuj9WAZCzrYDQJWGBawlrUzCGm4nMiqbtQBPtB5vRm/WseOx6ALLu Xc5gbd/5REc4OdsKAmWHGvoDSeCbnt6M2+lm1xdeuvBiH9T/qRqtTsvN37o18F6fz58t9nl8jDQP YUuNJPOuHHRGHcONg9jSIwlb6t+xueIvrsdkM6M1aBlpHmL/k2/Rd6Z7Rv1CokO55bt3ArDrCy8x 2jHiT0irODM6WP0A3OP+RJbL7iJhTTI5ny5AZ9KpKu/oGcOyxIJWr6X6hQoadtagM88eOjH5cZT/ 7BjWZBsmm3nGtZz7/c9r2Xtu3kRusPqrKR+MUvsE6to9xuZn7yY01qI6fltqBLbUCPqre/yJvNuy sCbP/MZr4o3+78XWvVKF2+kmMiua5RftmFXDEhfGuqc24/P62PXQSwzW9jPlmMTRPcZgXT+29EhW P3kzHpeH3Q+/TPM7DeQ/WIxWryXzzhza3m/i3O6zaLRa4oqXElecEHi21qAld3shSetSOfVcKR88 vYf1/7KFqJxYVbEpzf+M23NofqeBnvJOeso7iVm+hPCUiBn3zDe/p4+ETt6QTlxxAj3lcySCFcZH sPZX03/B1hdbWiTxKxPpPtnBm4++Qkh0qP/46ot2yy90/Ci5mvNfaf2bHHUBQeb3Ao00DimO/0Bd 5pjfatbvhc4PIYQQQgghhBBCCCGEEOJqWLREsNFqAo0/aeAcds6ZCNbqdWi0GnQGHZo5kpveKQ/H v/cBk6Mu1vz9hllHsOZuLyRjazZN79ZT+1IlE/3jFD++GoCUjRmkbPQfWxpbEMeer+6iv7pXVezT R9CGn0++fDg2l93JlGMSc1TIjOSz5vyN08dZj3aM0FPWSVdpG2gg7PyxveDfOXfmVyfpq+wJHDPr HJyY8R6dWR84ytRgNeIaduLz+QLvAVQnhj9sxV/eQPlPjtJ2oIm2A03oQwwUPbpK1a5U75QHY7iZ sU479a9VU/jFldjSIzn0z+/NuM8QZiQiM5q44qVMOSYvOUZV9Vdyme0zLfOunFlJ4MXSX93L2T+c wWAxsuqr69DqtLNvChK/5nxCS6PVYIm3Ym8ZZtLuwtE9CoAtLRIAnUlHaHwYYx12JgbGscSFodFp SLopjeoXTgFe/w7VOTh6HUwMjKMz6uc8Yn0+SvP/yLf3Y7AY2fi19TS+WUfr/kYqflFKyVfWBu6Z b3637D2HZ9ITGLvTDnz9bdY9tVn1zkxV7T+PoOuLBlY/eTMDtX24J9xE58Xy7pd3YokLC/LEy3QN zn816x/MP78vyRz1VzP+p801v9XGD5c/P4QQQgghhBBCCCGEEEKIq0F9JkRB8oZ0bnp6C5Ojkxx4 8i2qX6yY8a1FJd4pD6XfPUR/VQ/X/eUNLLlu6YzrA2f70Gg0mCLMJJ8/onSofiBwvb+yJ7C7zGX3 70AzXvT93WBMEf7dq47zRz173d6Z18PN6Ex6nIMT2FuHAz+f/qYnQNqWZeCD498/xGi7naJHVhGW GA74vy966Kk92NtHWPMPG7jz1w/4EyKXmAQZaRri3a/s5MDX32bq/A4/tayJ4Wz+4d3c8p07yPtM ER6nm9O/PKGqbEiMBZfdiUbrz8B4pzwzEnLTfF4fNz29mez78y+1aotiIe0zTR+i/jjeWWXPHxHs uOjI8Gkuu4uTPzyMz+uj5InVcyabFeM/36beKQ8TfQ40Wg0hMRZCzye67C3+semZ9DDePYZWpyUk OhTw77Rv2FkTGOuNb9bNeLRzaIITP/iAo/+2H8tSK5ueuSOQWFMj2Pwf7x1joKaX2KJ4bOmR/m8b L7XSfbIzUD7Y/F5y3VKW/68Vgf+izh/Xm357tupkq5r2D9Z/SuvL1PgkUTkxxBUvZaC6l8lRF5FZ 0apiU/N+uLbnf7D1T8n0jl3nsP8fxriGnXPeN1/91Yz/afPNb6X4Fzo/hBBCCCGEEEIIIYQQQoir YVG3NEXnxnLLd+6g9uVK6nf6j1LO3V6oWM7tdHPsPw7QX9WLJS6MkaYhTtWWotVrKXp0FUP1Axz6 xntEpEdhS4/0J2WAmHz/TkB76zCH/3Uf4akRhKdG0FvuTzAl3ZSqKu6o7FhMNjO9p7o48q39gaNM AzSQcWc29a9Wc+Tb+4lfmRj4RuZNT20BDTTsrMGabCP9tiy0ei36UAOuEScmmxnXiBOPy43H6aa3 vIuzvz+Nd8p7STsSATpL2xjvczDe52Cgqof465NUlZtyTLLnb3ZhTQwnJj8On9cHGjBHhSgXxn8k saN7DHNkKEnr06h7pYqUWzLY+tx9mGxmJgbGA/fqjLogT/poXW77LJao7Bi6T3ZQ+esy+qt68Tjd rPjS9eCDsh8dxjk0gSUuDHvbCPY2//jJ/rP8wA5HpfjHuuwcf+YQrhEnU+NTJK1PQ2vQEpEZRWRW DEP1/Rx/5hDOYSdej5f027MDSbbqFyqYHHWx9p9uoXF3Le2HWki8MZX4Vf7j18t/epShhkGKH19N yi0Zl1X/+ea/MdyMPsRA675GzBFm3E43jq5RIrP8CV2l+R2TH0dMflzgPRMDEwzW9ZOyMX1Wom9O Ktt/vv5TWl+8Hi9H//0AXreP8BQbHYdb0Rl1ZN23/JLab97xc961Ov8h+PqnJDTWgtagZbhxkMPf 3OdP6M6x63m++qsZ/0qU4l+M+SGEEEIIIYQQQgghhBBCXGmLfral1qAl73NFJKxN9n//V4XhxkH6 q/zHrDp6xgK7FfVmPUWPriIiI4q87UV0Hmuj/VAzxjATy+7JJe+zKwCwJtsoeKiY9kMtdB1rw2Qz s+ze5aRvzVb1fp1Jxw1fW0/F88cZahggcW0KXo93xo7fvO1FGC1GWvaco+39JizxVtK3ZuHDhwYN S29Iountek49V3rhuUYdG/5tK9ZkGznbCmjcXUfbwSaS1qeh0WkZqutXFd+0xDUpdB1twxhuIqYg TrlAIA49udsK/d+IfeMsGp2WJdctJf/BYlXll6yIRx+ip2VPAyv/aq1ygavkcttnsWTcmcNY9yg9 JztoO9CENSkcj8uD2zlFb4X/e9COnjFqfnc6UCbrvuWBo6+V4k++OT2wKz1xbQpFj/g/rq3RaFj9 5Hoqd5TRe6oLnUlP1n3Lyd3m/0cYg7X9tOw7R0x+HEtWxBOWYGXf3+2m4r+OE50Xi8FiJK44gZIv rw3sGL5cc81/vVnP2n/cQPULFZz9wxm0Bh1LVydT8AX/+FOa35dkjp3oLrtTVfvP139K64t//ifT dqCJziOt2NIiKXpk5dxJ6iA75ed7//S3fK/l+R9s/VMaU/oQA/mfL6b25UrG+xws//MVNO6unXXf fPVXGv9qKK3fizU/hBBCCCGEEEIIIYQQQogrSQMU2e32imA3WbuPXKFwPp7G+xzs+eobrHjselI2 ZuD1eKn6TTmNb9ax8q/WknT+qNuPs5Y95zj9/AlyP1tEbEEcox12QmJCVX+fVYgroeb3p6n7YxUF D5WQeVfO1Q5nlms9vvkEm/8f9/Xv4x6/EEIIIYQQQgghhBBCiI+n0fjgmy8bGhoW9PySkpIVi74j +H+iiX4H3ikvnUdaMUeGMDk6SU9ZJ4ZQw4wjbT/OUjdnojPradhZQ+3LlVjiw8h5oOBqhyUEk6Mu Tj57BEt8GB0ftABclR3h87nW41Mj2Pz/uK9/H/f4hRBCCCGEEEIIIYQQQoj5yI7gReDz+aj53Wna 32/GNezEGG4iMiuanPsLsKVHXu3whPhEG6zrp+o35dhbhzFHh5L1qbxr6juu13p8C/VxX/8+7vEL IYQQQgghhBBCCCGE+Hi6EjuCJREshBBCCCGEEEIIIYQQQgghhBBX0JVIBGsX9AQhhBBCCCGEEEII IYQQQgghhBDXHEkECyGEEEIIIYQQQgghhBBCCCHEJ4wkgoUQQghx1XkmPfRX9eKd8lztUIQQQggh hBBCCCGEEOITQX+1AxCLa7C2n8odZdjbRgiNCSX70/kkrU+7YuWFEEKIy3HquVLaDzaTdusyVjx2 PQDtB5s5+aMjgXvSb8+m6JGVVytEIYQQQgghhBBCCCGE+Fi5Yolgl93F6V+eoO90N1qdhqWrkyn8 4kq0ei34oO39Jhrfqme0fQRTuInkDenkbisEjb+8vXWY7hMdtOxtZLx3jM0/uIuwhPArFT6VO8o4 t6t2xs+y7lvO8j9foVw/wONyc+ZXZXSfaEdnNpC6OYPs+/ID9QPoONxK3R8rGe8fJzwlguw/W05c SYLqGL1THkq/e5BJu4vEG1NAA+bIkMUp74P6ndW0HWjGOThOVE4sK750PSHRoaqfL+Y30jJM5a9P MnxukJAYCznbCkhcmzLjnv7KHs6+VIm9ZYiQGAupmzLIuCOH4aZBDnz97Tmfe+8fPgcEH38el5s3 HnwpUMZgMRK5LIrCR1YRttQKwP4n32KkeWjGsyMyo9jwb1sBKPvREdoONs+4rtFp+NSLn2W4UTk+ JUrzR2n+KcUP87fvxXNUybldtVTuKANgw79vJSIjKnBNaX43v9dAxS+OA3DLM3cSnmxTXX8lSu0T bPy5Rpy89dirAOhMesISrKRvzSL1lkz/+1Ws30qU1tdpc7XvpYyv+fon2O8XNc8PNv6nLaR/lX7/ Kb1fqf+vlfU9MjOKvoquGfPGmhJB9v35jLXb6TzWdkXjEUIIIYQQQgghhBBCiI+7jywR3HGkFdew k4w7sgH/H/o7j7SS99kiJgbGaX63AUu8lWX35OKZdFP/p2p0Jj2pmzLoPtFB7cuVmKNCSNuyDIDW fY207m/C7Zz6qEIOyj3hBiBhbQp6k7/ZLv5jdbD6AVT84jjth1pI3ZyJc2iCmhdPYwg1kr41C4Cu 0nZO/OADQqJDWXpDEv2VPfSd6b6kRPBo5yiuESdRObGs/D83XnIdg5U//auTtO5rpPDhEqxJNqr/ u4KyHx9l3Tc2XfJ7Po4qd5SRdFMaEZlRyjercPH88LjcHP32fjyTHtJuXUZfZQ8nvv8BpnATMflx AHQda6P0e4fQ6rVE5y1hvM9B07sNJG/MwGg1kbIxI/DsKcckXcfbic6LDfxMafwBGMOMpG/NZrCu n96Kbip+cXxW/148/kNjLbPqtWRFPObI88mj80ksNfEpUYpfaf4pxR+sfQ2hBlUxOrpGqXmxAn2I AffEzHVKzfzuKevEFG7CZXfRc7JjRqJQTf8FE3T9VTH+wN+P8SsT6T7Zwamfl+IadpL96XxV67cS pfU1WPuqHV/B+ifY75dLGb9zjf9pC+lftb//5nu/0vy4Vtb3jDtzyLgzZ8bPbKkR2FIj6DzWds0m ghf794MQQgghhBBCCCGEEEIslkVPBDuHJjj9/Am6jreT//nrAj93dI1itJpYdm8eGjS07m1kot8B +HeZrXt6C0arEY1GQ0RGFGU/Ocp4ryNQvuChEgoeKuGDp/fQX9U7671jHXbKf16KvXWY+FWJOLrH mBx1seXZuwM7uuJXJrL6728O7HCzpUWy8T9vZ7zPwd6/3YU+xMCWH97N1PgU7/3164TEWNj0zJ1o 9dpA4qDkidXoTLObLVj9JscmaT/UQsKaZFZ86Xrwwbtf2UnTW3WBP/TX/P40OqOOm791G+aoEKYc k+jN6hJQAO88/hrOoQkABmv7eG37i4REh3Lbz+71x9c9SuWOcgbO9qHVaYjIjCLz7jxiC+MUyzt6 xmh+t57rvnQDKbf4EyI5DxRw+F/34na60Zv1jHXYqXj+BEP1/XgmL3zfseTLa4grSeDNR18hfWsW Wr2WjsOtaPVaih9fTUxBnGL/qOEacVL1m3J6TnWhM+lIXp9OzgMFaA3+HW+1L1Vy9qUz3PbTe2l8 s5b2D1rQGfVs+p6/f4PFn7whnfH+cd7/p3fIvDuX3O2F6Iw61X1zsbnmx3DjIM6hCZbdk0v+g8VM OSZ567FXqf9TDTH5cfi8Ps78ugx8sObrG4kt9P9sctSFIdSAIdRA8ROrA++o+MVxDKEGSr6yFlA3 /gAMYSZyP1PI5Ngkbz7yR6bGJ2fFX/hQCeao+XeZL/vU8sCYmhYaawkanxI18Qebf0rxK7WvGj6f j7KfHsNkMxNXnEDTO/UzrivNb++Ul74zPSStS6WnvJOesk6y7luuuv5KgrWP0vibZo4wU/zEahw9 Y+z9m13UvVpF5l05qtZvJUrra7D2VTO+lPon2O+XSxm/c41/WHj/Kv3+U3p/sP5f6Ppubx2m+d0G 0u/IpnVvI/kPFtPweg0+j4/137wVQ6iBzqNtNL/XgL1lGJ/Hy5LiBIoeWYnBYgRg5+d+h8/jCzw3 +/588j5TNG89L5kPWvc30ri7lrHuMUJjQkm7LSvwD9WC/f6o+m25Yv0W6/eDEEIIIYQQQgghhBBC LDbtYj6sdV8je/92NwNn+yj58hqWfSovcG3p6iQmR12U/udBGnbWgJYZ3541hZuwt47Q8PpZal+u JCQ6lJSN6are6/P4OPaf7zNY24ctLZKJPgdD9f2q4w6NtZC7vQjXsJO6V6ppeP0s3ikvhQ+XBI7O nN6Jteeru9j9xT9y8kdHmBq/sDsrWP3Ge8bw+XyEp0Vw8P+IMAXrAAAgAElEQVS+x+lfnSQ8NQJH t//nbqeb0bYRYgvj0eg09JR14rK70OjUn0mbfnsWyRv87WVNspG7rZDMuy/shiz7yVG6T3aQuimD lM2ZOHodOHpGVZXvr+xBZ9RfqE/vGKPtI4D/D+gAJ549zEBNL3mfWxHYyZe7vZDI7JjAO5rervfv ioswM97n8CffFoHP56P0OwdpO9hMVE4M5sgQ6l6tour/lc+69+SPDtO4uw5LXBjWZFugf5XiX/XX N5L96Xwad9ey72tv0l89fzJmPvPNj+mEoL11mMlRFwM1fWi0mkAbj/eOMTEwji09MpDk0Wg1mGzm We8YaRqieU8DmXflBna8Ko2/ae6JKVr2nqPiF6XojDqyLpq/06pfOEXFfx2n4r+O4+ganXVdyVzx KVETv9L6Eiz+S2nf+TTurmOwto+iv1g1a96qmd/91T14XG4ilkURmRXNYF0/k2OTquuvJFj7KI2/ D7PEhRGVHYPH5WGsewxY2Prtb6Pg62uw9r3YfONLbXkllzN+4aPvXyXB+n8x1ne3003n0Tamxqco /9lRfG4vo+0jDNT418nW/Y04ukaJX5WI0Wqi/WAzNb8/E4gv54ECcrcVEr8qcVHq+2H1O2so/9kx nMNOEm9MwRBmZLzXP3bV/P5Qqt9i/H4QQgghhBBCCCGEEEKIj8Ki7Qg+98ZZKn9TTvLNaRQ8VILR appxPeP2HJrfafDvhirvJGb5EsJTImbc03m0lbo/VgGQs62A0CVhqt491NDPWNco0XlLuOnpzbid bnZ94SXlghfJvDOHtvebOLf7LBqtlrjipcQVXzi2NWFtCsZwM5FZ0bQdaKL9YDN6s54Vj12vWD/P lH8HlUarxTPpxjvlQavT4vV68Xl9jPf4/yA91v3/2bvz6Dir++Dj39lnJI1GqyVZu2Ttm+UF2xhj gwlmDQQwIWkIIZS0CWmbt82haXvehqzNnpSENPRNTkJSmhAMJAabLcY2NraQZcmLrN3a910ajTQj zfL+MdLYwtY8j5FsbPz7nMM5sZ7n3vnd+9x7J0c/3fvYefOLL+NxuUEDBZ8qPedo24Vk3ZXPcP0A 7XubsSaFk7O9cN5192xSxTXuYvn6ZHLuKURn0qkq7+ibIHRZKFq9lppnj9O0sxad+czQ8Xl8jLWO YEuN9O8QNOoYbR7Glh5JWIKVabsLAEt0CDf84DYAdn36eexdY7AEeY6x5hGGGwaxpUey7vHr8bg8 7P7MDlrfaKLgwdIz78EEHL0TbH3yjnlJHKX4AbQGLbn3F5G0MZVjT5fzztf2sOnrNxGVo+5442Dz w5YWGThy99VHXsQSHeI/vtbpPy53bmdlSIxy4un07no0Gg1pN585kldp/M1xjTk59otyAMJTIjBF nJsIPfs9pIkbUwmd7Z85h77xVuB/F31m1TnHvJ4vvrPfQXu2kNhQPvLURxXj1+g0qtaXheJX6l+l +OaOHE7enE5c6XL6qnrm3admfvdVdgMQmRnNjGOGnvJO+o/3kLQxVbH90xOuoPFB8PVJafydjzHc P36dw5PYUv31LLR+K/UfBF9flfr3bOcbXxdSXsn56j/bQuN/Mc/3QhLXC31+sOe/2PX97M+r/cMJ jFYTydenU/mzw0x022E1lPz1Wkw2M1qDlrHWEfY9/hoDJ3sDZXPu9X/ftL11mt6KLtXtVcUHjX+q QavTcv23PhIYl3NJdqXvDzXtW+z3gxBCCCGEEEIIIYQQQlwsS5YINlpNoPH/Utk56jwnEXz42/sw hBrZ8uVNNL/aQPu+Zo7/d/m84zVz7y8iY1s2LW82Uv98NVODk5R+fh1KJgcmAQLvXNS8jw1fGp2G pOvSqHn2GOAl5775idSULRmB90TGFsax50u75u36CdY+c6T/KNqZiWm2fNd/1PHBr+7BFG5Gq9MG ErI+t5dNX78JQ6iBt//1Dep3VLPijtz575r0cc67J9Uo+ZtrqHqqjI79LXTsb0FvMVD8yBqSr09T LOud8WAMNzPRPU7jn2soeng1tvRIDv77XwJ9F7Y8HHvXGH2V3fSUd4AGwuLnJwl1Zn3gqGaD1Yhr 1HnhO97O035Hr39npy0t0v85Jh0h8WFMdI0zNTRJaNyZPyjIvD3nnJ18auMHcPQ7mBqaRGfUn/cI 24UEnR8aWPf49QzVD+CechOdF8ubj+0MxG2O9r/zc2poMuhn+Dw+et7twJpsm7ebVWn8edxeAELj rdz05B1M9Ngp+4/9HP72fm791T3oz0oKbfvF3UGPhj77HaXWJNu8awvFZwgxsPrvzj1mdy4ZpRQ/ qFtfFopfqX+V4mt76zSeaU9gbs3Z/5XX2fjEViyznxdsfs8lCnsrupiYHc99ld0kbUxVbL9SfIr9 ozD+zsc16t8papntO1h4/VYTX7D1Val/Y/KX+ft3gfGltrySheo/20LjfzHP90Is9PnBnv9Sre9a vQ6NVoPOoDvnO9g15uTkr48yUN0XOAbcOTx1QW1T5TzfD65xJzOOacxRlnl/XKaZDVLp+2NOsPbN eb/fD0IIIYQQQgghhBBCCHGxLNlvKpM3pxMSF8axX5Sz//HXyPxoLjn3FqIz6pjsn2Cotp8VH83D lh5J6RfWMVQ/QO/R7kD5oboBonNjMUWYSd6URv3z1Yw0Dqn67Llfyjtmj3r0zia25sztCHWO+n/x PJfEONu03UXTzlpMEWZco06aX21gddaZY40Hq/v878vU+HfVAhhn32+o1D5LTAhGq4mB6j7Af8zk 6OkhovP8CYiQZWHojDoMYSZs6f5fRltiwxhrHcbr9gaSp2MtI5T/4ABGq4lr//1G1e8vBbAmhrP1 P+9gvG2U3oou6v54khO/qlCVCLbEhDJQ3YdG6//tt3fGMy+hApB20wpqnj3GkR8fxBhmovizawhL DFcVm5rnAwu3P2Q2YTXeNgqAZ9rDZO8EWp12XqIKQG85f58pxe8cmaL6mUq6DrUTWxzPxq/eqHrH OgSfHwAzk9NE5cSg0fiPDp62u0i8NgWA0PgwjFYTo83DDJzsC7zD1t41HvjjB4Cx1hHcTncgoTFH afy9V1iClbAEK45eO+NtIxe0q22hd5QGi09r0J33GGe18atZX4JR6l+l+JatTMAQZgz8u/dIF8MN g6Tfkk1oXBjmSEvQ+T3ZP4Fjdtdw3fNnjsvtP9aDz+tTbL9SfGr6J9j4ey9Hj53hxkH0Zj2hcf5k YLD1Wyk+CL6+KvXvnIXGl9ryShaq/2znG/8TXeOLer4X4nyfr/z9dHHXd/fUDAef2IM5ysL6f9lM eEoErz36IlzgHwHpjP7/uzJ3XPV7LfT9YAo3ozPpcQ5PMd4+euakDpfHn/S9gO+PhSz2+0EIIYQQ QgghhBBCCCEuliXdshKdG8sN37+V+h3VNO70H8WYe38RxnAzeouB9r3NmCPMuJ1uHD12ImcTrSON Qxz86l+ISI/Clh7J4OwvxGMKzvwivObZY/i8Phyz76Rs/HMtxjAj+Z9cSVR2DCabmf5jPRz+1r7A UcRzQmJD0Rq0jDYPc+ibe/2/8H3Pjp6aZ48zbXex4d9uoHl3PZ0H20i8NpX4NYmMt49y6Bt7CU+N IDw1gv4q/y/Qk65LBVBsn1anJXVrJo1/quHoTw8zNTiJZ9pD+rYswP8+0sw7c2l44RRHfnQQk83M 6Okh4koTAklggO7yDiYHHEwOOBg61Uf82iRVz2XGMc2e/7MLa2I4MQX+JBcagu7sPFtoXBiO3gnM kSEkbUqj4cVTpNyQwban7w4k4Zt21mJNtpF+cxZavRZ9iAHXmFPVe1bVPJ9g7Y/IjCIyK4aRxkGO /PAgzlEnXo+X9Fuy5x0LHYxS/FU/L2OkaZjSz68j5YYMVXW+10Lzw+vxUvad/XjdPsJTbHQdave/ o/fufMA/fgoeXEnVz9+l7Dv7iCmIY2rAweTgJFu+d0vgeNaJ7nHgzA7aOUrjb87MhIuGF04x3jlG /4keDCEGrMnzj1c+9buqwE5OnVFH0cOrVbd/ofiUKMWvNP+U4lfbvwuJKYjzJzFnTQ1NMdwwSMqW 9EAiKdj87p3dLVr40Coyb/cf5XvoG28xcLKPkcYhonJiVD2/hSj1j9L4m+McdXLs6XJ6yjvxeXxk P1CAzqRTtX4Ho7S+qulfWHh8qSkf7Ptl7mjm9zt+l+L5qolvIUrP/2Kv764xJx6XG4/TTX9VD3XP ncA7473g3c62tAi0Oi29FZ1UPlWGOcJC/l+VBK4v+P2ogYzbsml8qYbD395H/OrEwDuQr3vipiX5 /liK7wchhBBCCCGEEEIIIYS4GJb87EKtQUveJ4pZviHZ//48QG/Ws+FfN1Pz7HHq/ngSrUFHwrpk Cj/tf/9eREYUefcX0/1uB50HWzGGmVhxZy55D5z5JW/TK3X4PGd2ELXvbQYg74ESdCYd13x5E8d/ eYSRxkESN6Yy2jJ8ppEWAwWfKqV+RzWTAw7yP1lC8+76wPXh+kHa9p4mpiCOZSXxhC23svefdnP8 /x0hOi8Wa7KNwodK6TzYRs+7HZhsZlbclU/6tmxV7QPI+3gxHpebrkPt6M16ih9ZQ/yaxMD1nPsK 0aChfV8zbqebpI2pFH5m1by+TVyfQk9ZB8ZwEzGF5991eT46o57c7UX+dyC/UodGp2XZyoR57z8M ZllJPHqLnrY9Tec94hUg4ZokWl5v5NjT5Wd9ro7N/7HtvO+aPZvS85mzUPs1Gg3rHt9E9TOV9B/r QWfSk3V3Prnbi1S1Tyl+a7KNuNLlrHpsg2JblJxvfmjQkHBNMh37W+g+3I4tLZLiz66el+RK2ZKB IdRIw4s1DNcNEBIbSt4DxfOSlM7ZndTvPZYdlMcfwPTENLXPnUBvMRCVHUv+J0vO2XXe+U5b4H8b Qo0XlAgOFp+SYPGrmX9K8avp38UINr/njg0+O3Eakx/HwMk++iq7icqJUfX8FqLUP2rGH/hPTeh4 uxXrciv5nywh9cZMQN36HYzS+qrWYsZXsO+XuUTr+61/KZ6vmvgWovT8F7u+KwmNt5KzvZDm3Q10 HGghaVMaGp2WkYZBxbJnM0daKPncWur+eJLeii4iMqPmHQUd7Psx7/5ijKFG2vacpuPtFkLjraRv y8KHb0m+P5bq+0EIIYQQQgghhBBCCCGWmgYoHh8fPx7sJmvv4UsUztLwuDy88uAfA+88FYvXtuc0 J35ZQe4DxcQWxmHvGscSE0JM/jImBxzs+dIrlDy6lpQtGXg9Xk79tsp/vPbfbVA8FvaDdqXHL4QQ i/FhXt+FEEIIIYQQQgghhBDicmWPP//mnDlNTU2Lqn/VqlUlS74j+PJwYe8eFMpSt2aiM+tp2llL /Y5qQuPDyLmvEICpQQfeGS/dh9sxR1qYtk/TV9mNIcQw70jWy9WVHr8QQizGh3l9F0IIIYQQQggh hBBCiKvZhzQRLC6GpI2pJG1MPefnUbmxZH0sn863W3n3O29jDDcRmRVNzr2Fqt9D/EG60uMXQojF +rCu70IIIYQQQgghhBBCCHE1+1AeDS2EEEIIIYQQQgghhBBCCCGEEJerS3E0tHZRNQghhBBCCCGE EEIIIYQQQgghhLjsSCJYCCGEEEIIIYQQQgghhBBCCCE+ZCQRLIQQ4orgmfYweKof74zngw5FCCGE EEIIIYQQQgghhLjs6T/oANToPNDK0Z+eeU9x+i3ZFH929QcY0eVruH6Q6mcqGe8YIyQmhOx7Ckja lHbJyosLN2138eojLxKWGM7WH99+UT9Lnu+ldymf78VwOcV/7OlyOg+0kvaRFZQ8uvYDjUUIIYQQ QgghhBBCCCGEuNxdskSwa9zFiV9VMHCiF61OQ8K6ZIoeXo1WrwUfdLzdQvNrjdg7xzCFm0jenE7u 9iLQgDUlgux7C5joHKf73Y73HUPTy3XU/uEEW767DWuS7bz3nN5VT/UzlQBs/s42IjKiFONbCmNt o1T/5iijp4exxISSs72QxA0pF1SHd8ZD+Q8OMD3uIvHaFNCAOdKyNOV90Lizho79rTiHJ4nKiaXk c2uxRIdcUIzig7PY8aGk61A7DS9UMzk4SXhKBNkfyydu1XJVZaufqeT0rvp5P8u6O5/8T5YAi1s/ AHqPdNK4s47x9lHMkRZy7p2fAB9vH6W3oou2t5qZ7J9g609uJ2x5uOq2K9W/WErxBe0fwONyc/LX lfRWdKIzG0jdmkH23QVn1q/LYH6rWZ8jM6MYON7jX5eFEEIIIYQQQgghhBBCCBHURTsauutwO82v NgT+Xf1MJd2H21lxZy4J65JpfbMpcN0z7abxTzXg85F6YwYA9Tuqad3TBIAtNYK8jxeTeF3qomJy 9Nr9R4r6FrjeY6f298fRWwzzfq4U32J5XG7Kvr2PsdZR0j6yAq1BS8WP32HwVN8F1WPvtuMacxKZ HcPqf7iW1X9/LTGFcUtS/sSvj1K/4xSZt+ew/l+24Ha6qfxZ2QXFdyWrfqaS0dPDS1bfe+fHpbDY 8RFMT3knFT95h5nJGRKuSWJq0MHAyV7V5d1TbgCWb0ghZUsGKVsy5iX7FrN+OIenqHjyMJ5pN0nX pTI97qTyZ2WMtYwE6m/f20zTy3VMDTkuuO1q6l8spfiC9Q/A8f8+QvveZhKuSSY82Ubt70/Q8kZj 4Lqa+b1Ef/OyIKX1GSDjthxu+eU9pG7NvMjRXF6Wev0RQgghhBBCCCGEEEIIcXVY8h3BzpEpTvyy gp4jnRR8amXg544eO0ariRV35aFBQ/tbzUwN+pMaOpOejV+7CaPViEajISIjisqnypjsV5+UcU/N UPvcSbrL2vHOeIlbmUDhw6sxhhnpfKeNY794F4/L/17Jt/5pNwCW6BBu/q+7APD5fFT+/F1MNjNx pcvnJUmU4psccPDWP+5CbzFw03/ewczkDH/5+5exxIRy4w9vQ6vXMtE1zvFfVjDSOIhn+sz7LVc9 tp6QZaE4R6ZYcWcuBQ+WMuOY5rVHX6LxT7XEFKhL1L3x+T/jHJkCYLh+gD/f//t57XP02ql+poqh ugG0Og0RmVFk3pFHbFGcYnlH3wStbzay8nPXkHKDP9GWc18hh77xFm6nG71ZH7R9cauW8+ojL5K+ LQutXkvXoXa0ei2ln19HTGEco83D7P/K68SvTmTdP1+Pa8zJa4++hC0tki3fu0VV+11jTk79toq+ Yz3oTDqSN6WTc18hWoP/bx3qn6+m7vmT3Pzzu2h+tZ7Od9rQGfXc+CPl55O8OZ3JwUne/rc3yLwj l9z7i9AZdarieq+F5geAz+2l/IcHGTjRiy01gtIvrCM03goEH99qriuNj8XWX/vcCXRGHdd/62bM URZmHNPozWf+oEJN/QCrvrAOnencZWkx64c5ysKmb36E8CQbGp2GsOXhVD9TyUB1H7b0SAAKH1pF 4UOreOdrexg81X/ug/NB+75mmnfXM9E7QUhMCGk3Z5Fxa7aq+pWeb3dZB61/aWK8bRSfx8uy0uUU f3Y1hlCjqviC9c/0xDSdB9tYvj6Zks+tBR+8+cWdtLzWQPq2LMX5PUdn0nPqd1V0HmxDq9ey8m/X BdaPYM+35fVGTvyqgvy/WknWXXkAnPpdFU0v17Hxia04R6YU1+edn/gDPs+ZDHH2vQXkfbzY377Z o6sXWl8AxfmttD4quVLWHyGEEEIIIYQQQgghhBBXlyXdEdy+t5m3/nE3Q3UDrHpsPSs+mhe4lrAu iWm7i/LvHaBpZy1omXd0qincxHj7GE0v11G/oxpLdAgpW9JVf3blU2U0764nIiOKhGuS/Mnfp8sB sCbZyPpoPiGxoQCkb8sid3sRmXfkBso3725guH6A4r9eg0Z37t63YPGFxIaSe38xrlEnDS/W0PRy Hd4ZL0WfWRU4mrXiyUMM1faT94mSwE7H3PuLiMyOCSTMxttHmba7GKodQKPVYO8cU93+9FuySN6c Hmjve9tX+VQZvUe7SL0xg5StmTj6HTj67KrKD1b3oTPqA89rsn8iEJtrzKnYvjktrzfSV9mNKcLM 5ICDk7+pVN2+YHw+H+XfP0DHgVaicmIwR1poeOkUp/6n6px7j/70EM27GwiNC8OabFP1fADW/P21 ZN9TQPPuevZ++VUGa86TLFQQbH4AOPommLG7CI0PY6hugMqnzuzIDDa+1VxXMz7eb/1upxt7xxix RfFodBr6KrtxjbvmzSOl+t1OfyJ4z5d2sfvhFzj608PMTM4Eri92/bClRgTi8br9ibYLORa7cWct Vf/1Ls5RJ4nXpmAIMzLZP3FB9Qd7vu37mnH02Ilfk4jRaqLzQCu1z51UHV+w/pnsm8Dn8xGeFsGB //sXTvz6KOGpETh6/T9XM78BRpuH6a3oCszfuSP0IfjzTdqUhs6oo+tQW+D+3qPdmCMtROfFqlqf c+4rJHd7EfFrEhfsg2Dri9L8Vlofg7lS1h8hhBBCCCGEEEIIIYQQV58l2xF8+pU6qn9bRfL1aRQ+ tAqj1TTvesYtObS+0URfVTd9Vd3E5C8jPCVi3j3dZe00vHAKgJzthYQsC1P12VODk/SUd2KJDiH9 5izQwEjTEL0VnXg9XmypEdhSIxis6WNywEH6zVlYk8+8g3LuSOjkzenElS6nr6rnvJ8TLL7M23Lo eLuF07vr0Gi1xJUmEFfqfz+qz+NjrHUEW2okmbfnoDPqGG0expYeSViCFXwQvzqR3qNdvPrIi1ii Q9BbDPN24ynJuiuf4foB2vc2Y00KJ2d74bzr7tmkmmvcxfL1yeTcU4jOpFNV3tE3QeiyULR6LTXP HqdpZy0685mho9S+absL8O/wu+EHtwGw69PPY+8aC3oMrFpjzSMMNwxiS49k3ePX43F52P2ZHbS+ 0UTBg6WBZAuAo3eCrU/eEUg6qYkfQGvQknt/EUkbUzn2dDnvfG0Pm75+E1E5sapiVJofAKFxYWx8 Yis+r49dDz3PcP0gM45p3FPuoOPbNeIMel2r0wZ9vkrzR6n+yT5/QnSi186bX3wZj8sNGij4VCkr 7sxVrF+r07J8QwrGcDORWdF07G+h80ArerOekkfXAku3fkzbXZzeVY850kLC2oWTivP4oPFPNWh1 Wq7/1kcC9fp85w7eYPUv9HwNoUZK/notJpsZrUHLWOsI+x5/7YKO1g7WP54Zf2Jao9XimXbjnfGg 1Wnxer34vD7F+T1nofk7NRT8+RpCDCzfkELH/hYmeuxogInucTJvz0Gj0SiuzwA59/rHa9tbp+mt 6DpvHywUn8+rPL+V1sdgroT1RwghhBBCCCGEEEIIIcTVackSwUarCTT+pKFz1HlOouvwt/dhCDWy 5cubaH61gfZ9zRz/73JWfXFD4J7c+4vI2JZNy5uN1D9fzdTgJKWfX6f42Y7ZRNTU0CSHv71v3jWP 04129njVhbS9dRrPtIeO/S107G8J/Hz/V15n4xNbiclfphifRqch6bo0ap49BnjJue9Mom3uuFh7 1xh9ld30lHeABsJmj4VFA+sev56h+gHcU26i82J587GdhMadJxHu4329rLPkb66h6qmyQBv1FgPF j6wh+fo0xbLeGQ/GcDMT3eM0/rmGoodXY0uP5OC//0Vd+2bpzPrAUakGqxHXqPO8ybSgztN+R69/ 554tzX8Mr86kIyQ+jImucaaGJuf1Y+btOfOSMBcSP4Cj38HU0CQ6o/68RxgvRGl+AGhmE0YarYbQ eCvjbaNMj7uYGvYf6bzQ+F7s+Fcqr3R9LmHmc3vZ9PWbMIQaePtf36B+RzUr7shVFd/ce4EBYgvj 2POlXfN2PS7F+uGd8XDkR+8wbXex/p83q35+rnEnM45pzFGWeclljWb+QFSqf6Hnawg14hpzcvLX Rxmo7gsck+2cfe5qBOufuZ3JMxPTbPmu/6j1g1/dgync7E8IK8zvOQvNXzXPN/XGTDr2t9BT1hEY L4nXLu6d7++1UHxq5rfq9fEKXX+EEEIIIYQQQgghhBBCXJ2W7DfJyZvTCYkL49gvytn/+GtkfjSX nHsL0Rl1TPZPMFTbz4qP5mFLj6T0C+sYqh+g92h3oPxQ3QDRubGYIswkb0qj/vlqRhqH5n2GzugP 9+zjSoHArqnQuDBu/MntaHXnP/F67ghmR//EvB1ny1YmYAg7kyzrPdLFcMMg6bdkB36JrxTftN1F 085aTBFmXKNOml9tYHXWmWOR025aQc2zxzjy44MYw0wUf3YNYYnhgeszk9NE5cSg0fiP1p22u0i8 NmVe/GMtI5T/4ABGq4lr//1GDCEG1LImhrP1P+9gvG2U3oou6v54khO/qlCVCLbEhDJQ3YdGO3v0 7YxnXsJcTfuCmdsx5xz1J75co87z3rdQ+0Nmn9F42ygAnmkPk70TaHVaLNEh8+rQW87fZ0rxO0em qH6mkq5D7cQWx7Pxqzeq3rEOwedHwGxO3DvjYWrAgUarwRITGkj4LDS+1Y7/hSiVV7qutxjQGXUY wkyBd+JaYsMYax3G6/aqim+wus//PmyNf1cmgHE2gb0U64d3xkP5Dw4yeKqP0i+sY9nKBNX9Ywo3 ozPpcQ5PMd4+emanrcsTSGqqqn+B5+uemuHgE3swR1lY/y+bCU+J4LVHXwSVfySh1D+WmBCMVhMD 1X2A/yjv0dNDROctm72uPL+DUfN8o/NiCUuw0lfVjSHUSEhsKJFZ0fPuWWh9XgpK81vN+nglrz9C CCGEEEIIIYQQQgghrk5LuqUoOjeWG75/K/U7qmnc6T9KNff+IozhZvQWA+17mzFHmHE73Th67ETO JkpHGoc4+NW/EJEehS09ksHZhEVMwbJ59dvSItDqtPRWdFL5VBnmCAv5f1WCOcrC8vXJdJd18M5X 9xBbFM9EzzhRObFk3JodKB+VHUPv0S6qf1PJ4Kl+PE43JZ9bS0xBnD8JNWtqaIrhhkFStqRjiQ5R FV/Ns8eZtrvY8G830Ly7ns6DbSRemxp4p2XTzlqsyRRK4RgAACAASURBVDbSb85Cq9eiDzHgGnNi spnxeryUfWc/XreP8BQbXYfa0Rl1ZN2dP6/93eUdTA44mBxwMHSqj/i1Saqey4xjmj3/ZxfWxHBi CuLweX2gAXOUunekhsaF4eidwBwZQtKmNBpePEXKDRlse/puTDazYvuUhMSGojVoGW0e5tA39/oT KufZ9bxQ+yMyo4jMimGkcZAjPzyIc9SJ1+Ml/ZbseceyBqMUf9XPyxhpGqb08+tIuSFDVZ3vtdD8 mDPRM86RHx7ENeZkZnKGpE1paA1axfGtdvwvZLH1a7QaMu/MpeGFUxz50UFMNjOjp4eIK01QFf94 +yiHvrGX8NQIwlMj6K/yJzCTrvPvGF3s+uF2unn3u/sZPNVPaFwYYy0jHKsvR6vXUvzIGgBqnj3m Pya517+7tfHPtRjDjOR/ciUanYaM27JpfKmGw9/eR/zqxMA7dK974ibcLuX6gz3fqSEHHpcbj9NN f1UPdc+dwDvjnZdQDRafUv9odVpSt2bS+Kcajv70MFODk3imPaRvywKU5/eMY3pR42dO6tZMav73 OFqD7rzjcqH1eSkEm99q18crff0RQgghhBBCCCGEEEIIcfVZ8rMltQYteZ8oZvmGZCa6/Udm6s16 NvzrZmqePU7dH0+iNehIWJdM4adLAYjIiCLv/mK63+2g82ArxjATK+7MJe+Bknl1myMtlHxuLXV/ PElvRRcRmVGBozpLv7CekNhQuss6aHqlDmtSOPFr5idKM27LYaLXTt/RLjr2t2BNCp+3q28hSvEN 1w/Stvc0MQVxLCuJJ2y5lb3/tJvj/+8I0XmxGEKNJFyTRMvrjRx7ujxQr86oY/N/bCNseTgJ1yTT sb+F7sPt2NIiKf7s6nN2kyWuT6GnrANjuImYwjjU0hn15G4v8r/D+JU6NDoty1YmUPBgqaryy0ri 0Vv0tO1pYvXfbTjvPcHaZ4oIngzWWwwUfKqU+h3VTA44yP9kCc2768+5b6H2azQa1j2+iepnKuk/ 1oPOpCfr7nxytxedU8dCgsVvTbYRV7qcVY9tUGyLkvPNjznJ16cHdp0mbkih+LOrA9eUxrea8R/M YuvPua8QDRra9zXjdrpJ2phK4WdWqSpvTbZR+FApnQfb6Hm3A5PNzIq78knf5k8WLnb9GG0eZvCU /5hpR98Eza82BOqdS9Q2vVKHz3NmB2773mYA8h4oQaPTkHd/McZQI217TtPxdguh8VbSt2Xhw6eq /mDPNzTeSs72Qpp3N9BxoIWkTWlodFpGGgYDZYPFp9Q/AHkfL8bjctN1qD0Q19wfqaiZ30rUjL/k zenU/v4EHpf7nNMO4P2vz2oEm9+h8VZV6+OHYf0RQgghhBBCCCGEEEIIcXXRAMXj4+PHg91k7T18 icL5cJoccLDnS69Q8uhaUrZk4PV4OfXbKv/x0X+3gaRNaR90iIra9pzmxC8ryH2gmNjCOOxd41hi QojJX3bFt+9Kj1+IxQo2v5eK2+nmzcd2Yoowc+MPb1uyepVc7vP7co9PCCGEEEIIIYQQQgghxMVh jw++OaupqWlR9a9atapkyXcEi3NNDTrwznjpPtyOOdLCtH2avspuDCGGeUdSX85St2aiM+tp2llL /Y5qQuPDyLmvELjy23elxy/EYgWb30uh8aUauss7mba7KDprp/ilcLnP78s9PiGEEEIIIYQQQggh hBBXLtkRfAn4fD5q/3CCzrdbcY06MYabiMyKJufeQmzpkR90eIt2pbfvSo9fiMuZx+Vm10M7MIab yLg1m+yPFVzSz7/c5/flHp8QQgghhBBCCCGEEEKIi+NS7AiWRLAQQgghhBBCCCGEEEIIIYQQQlxC lyIRrF1UDUIIIYQQQgghhBBCCCGEEEIIIS47kggWQgghhBBCCCGEEEIIIYQQQogPGUkECyGEuCJ4 pj0MnurHO+P5oEMRQgghhBBCCCGEEEIIIS57+g86gKU2XD9I9TOVjHeMERITQvY9BSRtSvugw7pk Ftv+q73/PgjTdhevPvIiYYnhbP3x7R9oLErPX8348LjcvPLg84TGW7npyTsubQNEUO9nfl9O4/PY 0+V0Hmgl7SMrKHl07QcaixBCCCGEEEIIIYQQQghxubtkiWDXuIsTv6pg4EQvWp2GhHXJFD28Gq1e Cz7oeLuF5tcasXeOYQo3kbw5ndztRaBR/xneGQ/lPzjA9LiLxGtTQAPmSMvig1+i+C62xbY/aHkf NO6soWN/K87hSaJyYin53Fos0SEXqTXivboOtdPwQjWTg5OEp0SQ/bF84lYtB2CsbZTq3xxl9PQw lphQcrYXkrghxV9Q5fhVGj+LGV+9Rzpp3FnHePso5kgLOfeelYBUEV/Q9QOofqaS07vq531m1t35 5H+yRLl/VPC43Jz8dSW9FZ3ozAZSt2aQfXeB6vk/3j5Kb0UXbW81M9k/wdaf3E7Y8vBz7ju9q57q ZyoB2PydbURkRKkqr6b+y31+N71cR+0fTrDlu9uwJtnOe09kZhQDx3sC/SKEEEIIIYQQQgghhBBC iIVdtERw1+F2XKNOMm7NBvyJmu7D7eQ9UMzU0CStbzYRGm9lxZ25eKbdNP6pBp1JT+qNGfRWdFG/ oxpzlIW0m1ao/kx7tx3XmJOonFhW/8O1S9aWpYrvYlts+4OVP/Hro7TvbaboM6uwJtmo+d/jVP6s jI1fvXGpwr+sVT9TSdJ1aURkLk0C6r3zQ0lPeScVP3kHS3QICdckMVjdx8DJXuJWLcfjclP27X14 pj2kfWQFA9V9VPz4HUzhJmIK4lSPX6Xxo358zc+OOoenqHjyMGHLrSRdl0r34XYqf1aGNcmGLT1S VXzB1g8A95QbgOUbUtCb/MvaXLJQqX/UOP7fR+g82Ebq1kycI1PU/v4EhhAj6duyVJVv39tM+74W 3M6ZBe9x9Nip/f1x9BYD7qn59ymVV1P/Yuf3xf6bF0ev3X/ks2/hezJuyyHjtpyLHMnlZ6nXHyGE EEIIIYQQQgghhBBXhyVPBDtHpjjxywp6jnRS8KmVgZ87euwYrSZW3JWHBg3tbzUzNegAQGfSs/Fr N2G0GtFoNERkRFH5VBmT/Y4z5XvtVD9TxVDdAFqdhojMKDLvyCO2yJ/IeePzf8Y5MgXAcP0Af77/ 91iiQ7j5v+4KHG2avi0LrV5L16F2tHotpZ9fR0yhv3x3WQetf2livG0Un8fLstLlFH92NYZQo6r4 JrrGOf7LCkYaB/FMn3l/5arH1pO8OZ3y7x+g50jnvL4yWk3c+qt7AuWrflHOePso8WsScfROMG13 qT5aN1j7F9t/jr4JWt9sZOXnriHlhgwAcu4r5NA33sLtdKM364O2P27V8qD9P9o8zP6vvE786kTW /fP1uMacvPboS9jSItnyvVtUtd815uTUb6voO9aDzqQjeVM6OfcVojX4d4zWP19N3fMnufnnd9H8 aj2d77ShM+q58Ue3odVrFZ/f5OAkb//bG2TekUvu/UXojDpVcb3XQvMDwOf2Uv7Dgwyc6MWWGkHp F9YRGm8FoPa5E+iMOq7/1s2YoyzMOKbRmw0AjDYP4xyZYsWduRQ8WMqMY5rXHn2Jxj/VElMQp2r8 Ko0fpetnj9+EtYnzsobmKAubvvkRwpNsaHQawpaHU/1MJQPVfdjSI9XN/yDrBxBInK76wjp0pvnL mlL/zJWvfe4k3WXteGe8xK1MoPDh1RjDjExPTNN5sI3l65Mp+dxa8MGbX9xJy2sNgURwsPUDoPCh VRQ+tIp3vraHwVP954wLn89H5c/fxWQzE1e6nJY3GuddVyqvdH0x83uOzqTn1O+q6DzYhlavZeXf rgusH8H6r+X1Rk78qoL8v1pJ1l15AJz6XRVNL9ex8YmtOEemOPaLd/G4/PPurX/aDTBvfO38xB/w ec5kiLPvLSDv48UAqtZ3pfmttD4quVLWHyGEEEIIIYQQQgghhBBXF+1SVta+t5m3/nE3Q3UDrHps PSs+mhe4lrAuiWm7i/LvHaBpZy1omfduSlO4ifH2MZperqN+RzWW6BBStqQHrlc+VUbv0S5Sb8wg ZWsmjn4Hjj574Hr6LVkkb/bfb02ykbu9iMw7cufF1/J6I32V3ZgizEwOODj5m8ozse9rxtFjJ35N Ikaric4DrdQ+d1J1fBVPHmKotp+8T5QEdiLm3l9EZHYMAIkbU8ndXkTOvYXozf5EVfL1/vb7PD7e /d7bDNcPYEuLZGrAwUjj4AX1vVL7F9N/g9V96Iz6wPOa7J/A3jkG+BMgatqv1P+L4fP5KP/+AToO tBKVE4M50kLDS6c49T9V59x79KeHaN7dQGhcGNZkW+BoYaX41/z9tWTfU0Dz7nr2fvlVBmvOTbYp CTY/ABx9E8zYXYTGhzFUN0DlU2UAuJ1u7B1jxBbFo9Fp6KvsxjXuQqPzZ1vnEsLj7aNM210M1Q6g 0WoCzwiUx6/S+Al23efx8e73DwTG72S/45xdnbbUiEC8Xrc/0XX2sdJK8SmtH3M7Yfd8aRe7H36B oz89zMzkjOr+qXyqjObd9URkRJFwTRKd77Rx7OlyACb7JvD5fISnRXDg//6FE78+SnhqBI5e/89B ef1Q0ry7geH6AYr/ek2gn5bSYuc3+BPqvRVdgfk7d4Q1BO+/pE1p6Iw6ug61Be7vPdqNOdJCdF4s 1iQbWR/NJyQ21B/rtqxzxl/OfYXkbi8ifk3igm0Mtr4ozW+l9TGYK2X9EUIIIYQQQgghhBBCCHH1 WbIdwadfqaP6t1UkX59G4UOrMFpN865n3JJD6xtN9FV101fVTUz+MsJTIubd013WTsMLpwDI2V5I yLKwwDX3bFLHNe5i+fpkcu4pRGc6sysq6658husHaN/bjDUpnJzthefEaIkO4YYf3AbArk8/j71r zJ+w0kDJX6/FZDOjNWgZax1h3+OvMXCyV1V8Po+PsdYRbKmRZN6eg86oY7R5GFt6JGEJ/h2didf6 30fa8OIp3E43kVnR5M/uCB1pGmSix0503jKu+9pW3E43uz79/AX0vnL7F9N/jr4JQpeFotVrqXn2 OE07a9GZzwwdpfZP213B+3+RxppHGG4YxJYeybrHr8fj8rD7MztofaOJggdLA8kWAEfvBFufvCOQ dFITP4DWoCX3/iKSNqZy7Oly3vnaHjZ9/SaicmJVxag0PwBC48LY+MRWfF4fux56nuH6QWYc00wN TgIw0WvnzS++jMflBg0UfKqUFXfmYkuLJH51Ir1Hu3j1kRexRIf4jxc+azcnBJ9fSuMn2PWRpkEm usdVjd9pu4vTu+oxR1r8O4dVxqe0fizfkIIx3ExkVjQd+1voPNCK3qyn5NG1iv0zNThJT3knlugQ 0m/OAg2MNA3RW9GJ1+PFM+NPXGu0WjzTbrwzHrQ6LV6vF5/Xh0anUbV+LGTuSOjkzenElS6nr6pH VbkLsZj5PWeh+Ts1FLz/DCEGlm9IoWN/CxM9djTARPc4mbfnoNFosKVGYEuNYLCmj8kBB+k3Z2FN nv+O4Jx7/fG2vXWa3oqu87Zxofh8XuX5rbQ+BnMlrD9CCCGEEEIIIYQQQgghrk5Llgg2Wk2g8ScV nKPOcxJdh7+9D0OokS1f3kTzqw2072vm+H+Xs+qLGwL35N5fRMa2bFrebKT++WqmBicp/fw6AEr+ 5hqqniqjY38LHftb0FsMFD+yJrCrVg2dWR84qtNgNeIadeLz+dBoNLjGnJz89VEGqvsCx8w6h6fm lV8ovrnjbu1dY/RVdtNT3gEaCJs91nfOYE0/dX88iSHUyJovbUSr88cyOeBP9IXPJj80wTYEziau L9Ri+s8748EYbmaie5zGP9dQ9PBqbOmRHPz3v/jjVdn+hfr/gpyn/Y5e/849W1qk/3NMOkLiw5jo GmdqaJLQuDMJxczbc+YlYS4kfgBHv4OpoUl0Rv05RxAHozQ/ADSzCSONVkNovJXxtlGmx12BhJTP 7WXT12/CEGrg7X99g/od1ay4Ixc0sO7x6xmqH8A95SY6L5Y3H9s5r90QfH4txtwRzkrj1zvj4ciP 3mHa7mL9P28+p/+Cxae0fqRsySBli/9Y49jCOPZ8adeZXZMK/ePomwD8Cc3D3943LyaP0x3YuTwz Mc2W7/qPKj/41T2Yws2BOaxm/VhI21un8Ux7AnNzzv6vvM7GJ7YSk79MVT3vl9L8nrPQ/FXqP22o kdQbM+nY30JPWUdgPCdem7qk7VhwfVcxv1Wvj1fo+iOEEEIIIYQQQgghhBDi6rRkR0Mnb07nuq/d xLR9mv2Pv0bN748H3nU42T/BUG0/scXx2NIj/e8+TbDSe7Q7UH6obgCNRoMpwkzy7BGlI41DgevW xHC2/ucd3PD9W8n7eDEep5sTv6pYktjdUzMcfGIP451jrP+Xzdz2m/v8CYWzkpRK8aXdtAJ8cOTH B7F3jlP82TWEJYYHrrvGXRz9z0P4vD5WfWHdvGSAyWYGwNHvT6h43d7zxjnWMsKbX9zJ/q+8Hjj2 Vq3F9J8lJhTXuBONdvZo3xnPvIQVKLc/mLkdc85Rf+LMNeo8730LtT9kNtEy3jYKgGfaw2TvBFqd Fkt0yLw69BbDeetWit85MkXFT96h7D/2EZpg5cYf3hpI/KgRbH4EzA4374yHqQEHGq0GS0woIcvC 0Bl1GMJM2NIjCVkWhiU2zL87dXaszExOE5UTQ1xpAkM1/UzbXURmRQeqVhq/i2GKUB6/3hkP5T84 yOCpPlb+zTUsW5kw73qw+NSsH4PVfYH+c437d6AbZ9/PC8H7Z27XZWhcGHf+/uPc9cdPBP4zhBqx xIRgtJoYqO4D/Ed1j54eCjx/NetHMMtWJpD/VyWB/6JmjwNOvyX7nGT+xaBmfgej1H8A0XmxhCVY 6avqZuBkHyGxofPGJ5w5wntuHC0lpfmtZn28ktcfIYQQQgghhBBCCCGEEFenJd1SFJ0byw3fv5X6 HdU07qxBq/MfZ2kMN6O3GGjf24w5wozb6cbRYycyy5/wGGkc4uBX/0JEehS29Eh/UgeIKfDvhJtx TLPn/+zCmhhOTEEcPq8PNGCOsiwYy4VwjTnxuNx4nG76q3qoe+4E3hlvYLefUnwATTtrsSbbSL85 C61eiz7EgGvM6U/y+qDyp4dwjkwRGhfGeMcY4x3+d3Bmf6yAqOwYTDYz/cd6OPytfYGjlN+ru7yD yQEHkwMOhk71Eb82SVX7Ftt/oXFhOHonMEeGkLQpjYYXT5FyQwbbnr47kMQO2n4FIbGhaA1aRpuH OfTNvf6Eynl2lS7U/ojMKCKzYhhpHOTIDw/iHHXi9XhJvyV73rGswSjFX/XzMkaahin9/DpSbshQ Ved7LTQ/5kz0jHPkhwdxjTmZmZwhaVNaYIdj5p25NLxwiiM/OojJZmb09BBxpQloDVq8Hi9l39mP 1+0jPMVG16F2dEYdWXfnA+rG72JEZccGHb9up5t3v7ufwVP9hMaFMdYywrH6crR6LcWPrFGMT2n9 GG8f5dA39hKeGkF4agT9Vf4EcdJ1/h2nSv1jjrKwfH0y3WUdvPPVPcQWxTPRM05UTiwZt2aj1WlJ 3ZpJ459qOPrTw0wNTuKZ9pC+LQtQXj8Aap49hs/rw9HrT3I2/rkWY5iR/E+uJKYgjpiCuMC9U0NT DDcMkrIlPZBIDFZeo9MoXg9GaX7POKaDllfqvzmpWzOp+d/jaA26eT+fE5UdQ+/RLqp/U8ngqX48 Tjcln1sb9LPVCja/1a6PV/r6I4QQQgghhBBCCCGEEOLqs+RnS2oNWvI+UczyDclMdPuPzNSb9Wz4 183UPHucuj+eRGvQkbAumcJPlwIQkRFF3v3FdL/bQefBVoxhJlbcmUveAyUA6Ix6crcX0fF2C6df qUOj07JsZQIFD5YuScyh8VZythfSvLuBjgMtJG1KQ6PTMtIwqCo+gIRrkmh5vZFjT5cHfqYz6tj8 H9swhpvoP+5/X6ijb4LaP5wI3JN1dz46k45rvryJ4788wkjjIIkbUxltGT4nzsT1KfSUdWAMNxFT GHfO9YUstv+WlcSjt+hp29PE6r/bcN57grV/bsfoQvQWAwWfKqV+RzWTAw7yP1lC8+76c+5bqP0a jYZ1j2+i+plK+o/1oDPpybo7n9ztRefUsZBg8VuTbcSVLmfVYxsU26LkfPNjTvL16TiHpxhvHyVx QwrFn10duJZzXyEaNLTva8btdJO0MZXCz6zytx8NCdck07G/he7D7djSIin+7OpAElHN+F2MeeO3 aYjEDSn+d+u6/DueR5uHGTzlP6bZ0TdB86sNgH9dKH5kjWJ8SuuHNdlG4UOldB5so+fdDkw2Myvu yid9W7aq/gEo/cJ6QmJD6S7roOmVOqxJ4cSvOfOHFnkfL8bjctN1qD0Qd/wa/zuOldYPgKZX6vB5 zuwQbt/b7K/3gRLFRK2a8oupX838VqLUf+DfFV/7+xN4XO7AO9PPlnFbDhO9dvqOdtGxvwVrUjge l0f1u3qDCTa/Q+OtqtbHD8P6I4QQQgghhBBCCCGEEOLqogGKx8fHjwe7ydp7+BKFc2WaHHCw50uv UPLoWlK2ZOD1eDn12yqaX21g9d9tIGn2qFu1PC4Przz4R0Ljrdz05B0XJ+gL1LbnNCd+WUHuA8XE FsZh7xrHEhNCTP6yJW//pXalxy/EYgWb30vF7XTz5mM7MUWYufGHty1ZvUou9/l9uccnhBBCCCGE EEIIIYQQ4uKwxwffnNXU1LSo+letWlWy5DuCr0ZTgw68M166D7djjrQwbZ+mr7IbQ4hh3pGv6ql7 t+illLo1E51ZT9POWup3VBMaH0bOfYXAxWj/pXWlxy/EYgWb30uh8aUauss7mba7KJrdyX6pXO7z +3KPTwghhBBCCCGEEEIIIcSVS3YELwGfz0ftH07Q+XYrrlEnxnATkVnR5NxbiC098oLr87jcvPLg 85fVjuBglrr9l9qVHr8QlzOPy82uh3ZgDDeRcWs22R8ruKSff7nP78s9PiGEEEIIIYQQQgghhBAX x6XYESyJYCGEEEIIIYQQQgghhBBCCCGEuIQuRSJYu6gahBBCCCGEEEIIIYQQQgghhBBCXHYkESyE EEIIIYQQQgghhBBCCCGEEB8yV10i2DPtYfBUP94ZzwcdihBCiAsg67cQQgghhBBCCCGEEEIIoZ7+ gw7gQg3XD1L9TCXjHWOExISQfU8BSZvSVJc/9nQ5nQdaSfvICkoeXXvxAv2ALLZ/FlteXLhpu4tX H3mRsMRwtv749g80FqXnr2Z8eFxuXnnweULjrdz05B2XtgFXuIvRv4sdX5fT+Pywr99CCCGEEEII IYQQQgghxFK6ZIlg17iLE7+qYOBEL1qdhoR1yRQ9vBqtXgs+6Hi7hebXGrF3jmEKN5G8OZ3c7UWg OVOHd8ZD+Q8OMD3uIvHaFNCAOdJyQXFEZkYxcLyHiIwo9YVUxtd1qJ2GF6qZHJwkPCWC7I/lE7dq +QXFtxiL7Z+g5X3QuLOGjv2tOIcnicqJpeRza7FEh1yk1oj3Cja+xtpGqf7NUUZPD2OJCSVneyGJ G1L8BZdofi1mfPUe6aRxZx3j7aOYIy3k3HtWglNFfEHXD6X6l0D1M5Wc3lU/72dZd+eT/8mSwL+D PR815S9a/6pxGczvppfrqP3DCbZ8dxvWJNt573lf67cQQgghhBBCCCGEEEIIcZW6aIngrsPtuEad ZNyaDfgTId2H28l7oJipoUla32wiNN7Kijtz8Uy7afxTDTqTntQbM+it6KJ+RzXmKAtpN60I1Gnv tuMacxKVE8vqf7j2fcWVcVsOGbflXFAZNfH1lHdS8ZN3sESHkHBNEoPVfQyc7L2kieDF9k+w8id+ fZT2vc0UfWYV1iQbNf97nMqflbHxqzcuVfiXtepnKkm6Lo2IzKVJQL13figJNr48Ljdl396HZ9pD 2kdWMFDdR8WP38EUbiKmIG7J5pf68aWZ9y/n8BQVTx4mbLmVpOtS6T7cTuXPyrAm2bClR6qKL9j6 oVT/UnBPuQFYviEFvcm/bJ6djFSa/0rl4eL1rxpq5rcmSPml4Oi1+4989i18z/tZvz8Mlnr9EUII IYQQQgghhBBCCHF1WPJEsHNkihO/rKDnSCcFn1oZ+Lmjx47RamLFXXlo0ND+VjNTgw4AdCY9G792 E0arEY1GQ0RGFJVPlTHZ7wiUf+Pzf8Y5MgXAcP0Af77/91iiQ7j5v+7y199rp/qZKobqBtDqNERk RpF5Rx6xRXEA7PzEH/B5zmQYsu8tIO/jxYF/d5d10PqXJsbbRvF5vCwrXU7xZ1djCDWqiq/2uRPo jDqu/9bNmKMszDim0ZsNquqfO3o1fVsWWr2WrkPtaPVaSj+/jpjCOFX9vtj+CVbe0TdB65uNrPzc NaTckAFAzn2FHPrGW7idbvRmPRNd4xz/ZQUjjYN4ps+8v3PVY+uJW7U8aPtGm4fZ/5XXiV+dyLp/ vh7XmJPXHn0JW1okW753i6r2u8acnPptFX3HetCZdCRvSifnvkK0Bv+O0frnq6l7/iQ3//wuml+t p/OdNnRGPTf+6Da0em3Q+JM3pzM5OMnb//YGmXfkknt/ETqjTlVc77XQ/ADwub2U//AgAyd6saVG UPqFdYTGW4Hg42u0eRjnyBQr7syl4MFSZhzTvPboSzT+qZaYgrglmV9K1ye6xqn6RTnj7aMkrE2c lzU0R1nY9M2PEJ5kQ6PTELY8nOpnKhmo7sOWHqkqvmDrh1L9/s6F9n3NNO+uZ6J3gpCYENJuzgok 4t1TM9Q+d5Lusna8M17iViZQ+PBqjGHGwHWAVV9Yh8507rKpNP+Vyl/M/lUaX0rze47OpOfU76ro PNiGVq9l5d+uC6wfwfqv5fVGTvyqgvy/WknWXXkAnPpdFU0v17Hxia04R6Y49ot38bj88+6tf9oN MK/9wdZvNeun0vxWWh+VXCnrjxBCCCGEEEIImd4/7wAAIABJREFUIYQQQoiri3YpK2vf28xb/7ib oboBVj22nhUfzQtcS1iXxLTdRfn3DtC0sxa0zDu61BRuYrx9jKaX66jfUY0lOoSULemB6+m3ZJG8 2f9va5KN3O1FZN6RG7he+VQZvUe7SL0xg5StmTj6HTj67IHrOfcVkru9iPg1ieePfV8zjh478WsS MVpNdB5opfa5k6riczvd2DvGiC2KR6PT0FfZjWvchUanUV0/QMvrjfRVdmOKMDM54ODkbypV9/1i +ydY+cHqPnRGfeB5TfZPYO8cA/wJEICKJw8xVNtP3idKAjsdc+8vIjI7ZknaF4zP56P8+wfoONBK VE4M5kgLDS+d4tT/VJ1z79GfHqJ5dwOhcWFYk22Bo4WV4l/z99eSfU8Bzbvr2fvlVxms6b/gOIPN DwBH3wQzdheh8WEM1Q1Q+VQZoDy+5hKO4+2jTNtdDNUOoNFqAs8IFj+/gl33eXy8+/0DDNcPYEuL 9Cdw37Or05YaEYjX6/Ynus4+9lgpPqX1Q6n+xp21VP3XuzhHnSRem4IhzMhk/0TgeuVTZTTvrici I4qEa5LofKeNY0+XB667nf5E7p4v7WL3wy9w9KeHmZmcUfV8lMpfiv6FhceXmvkN/j846K3oCszf 6mfOzN9g/Ze0KQ2dUUfXobbA/b1HuzFHWojOi8WaZCPro/mExIb6+2Jb1jnjT2n9huDri9L8Vlof g7lS1h8hhBBCCCGEEEIIIYQQV58l2xF8+pU6qn9bRfL1aRQ+tAqj1TTvesYtObS+0URfVTd9Vd3E 5C8jPCVi3j3dZe00vHAKgJzthYQsCwtcy7orn+H6Adr3NmNNCidne+G8su7ZpIpr3MXy9cnk3FOI znRm11TOvf772946TW9F1znxl/z1Wkw2M1qDlrHWEfY9/hoDJ3tVxTfZ508oTfTaefOLL+NxuUED BZ8qZcWduarrt0SHcMMPbgNg16efx9415k/4qDiTdbH9E6y8o2+C0GWhaPVaap49TtPOWnTmM0PH 5/Ex1jqCLTWSzNtz0Bl1jDYPY0uPJCzByrTdFbx9izTWPMJwwyC29EjWPX49HpeH3Z/ZQesbTRQ8 WBpItgA4eifY+uQdgaSTmvgBtAYtufcXkbQxlWNPl/PO1/aw6es3EZUTqypGpfkBEBoXxsYntv5/ 9u48Oq6jTvT4t/dNrdZqSdYuWZZkLba8xHYcx46dxFlJIAuEIQTIJLyQMI+Zx8nwmPMIgSHAQIAJ hCEcOBBmmAzYWTCxncRxYsWbLNuSF0m2Fku29n1pqVvdrV7eH2213cjq24kVx0l+n3NywKpb9/6q blX5HP1cdQn4A2x7YDPDjYNMOTxMDjqB2ceXLSee1GXp9B7pYseDL2FKNKM16cJ2c8Klza9I5SMt g0x020ksnsc1T27E6/Ky7fObL9oPnnE3p7c1Yow3BXe2RhlfNOvHrPcPQPMrDag1aq793g2h+wYC wcE3Oeikp7oTU6KZ3BsLQAUjLUP0Hu7E7/Oj1qiZvzoLfayR+IJEOirb6NxzBq1Ry+KHVkQ1/yPV v1z9O9v4Uprf02abv5NDkftPZ9Yxf3UWHZVtTPSMowImuu3k31qISqXClh2HLTuOwYY+nAMOcm8s wJoZ/o1gpfU7UnwBv/L8VlofI/kwrD9CCCGEEEIIIYQQQgghPp7mLBGstxpAFUwaukZdMxJdB57a jc6iZ/3X19K6o4n23a0c+3U1Sx9bHbqm6N4y8jYtpG1nM42b65gcdFLxyMqonr/4y1dR+2wVHZVt dFS2oTXpKH9wOZnX5kRV3z3m4sTvjjBQ1xc6xtU1PBl2zWzxTScMAl4/a79zPTqLjne++QaNW+pY cFsRqKK7v8aoDR0lqrPqcY+6CAQCqFQXZIKjTAzPZf/4p3zoY41MdNtp/ksDZV9chi03nr3fehMg dBzteNcYfTXd9FR3gApizh1rrNS+d+Ui7Xf0Bnfu2XKCx+BqDBrMqTFMdNmZHHJiSTmfUMy/tTAs CfNu4gdw9DuYHHKi0WsvesTvbJTmB4DqXMJIpVZhSbViPzuKx+6OanytfPxahhoH8E56SSxOZuej W8PaDZc2vyKZPsI59lzyTjXL+PRP+Tj0k314xt2s+ud1M/ovUnzRrB+z3d9tdzHl8GBMMIUll6fn leNcIndyyMmBp3aHxeRzeVFb9GStzyNrffDY5OTSFHZ9bVtoV2Y07ydS/cvVv7ONL6X5PW22+RtN /2VvyKejso2eqo5Qf6VfnR1V+6M16/oZxfyOen38kK4/QgghhBBCCCGEEEIIIT6e5uxo6Mx1uVzz 5PV4xj1UPv4aDS8cC33r0Nk/wdDJfpLLU7Hlxge/TZlmpfdId6j+0KkBVCoVhjgjmeeOKB1pHor6 +db0WDb++21c96ObKf50OT6Xl+O/PRxVXe/kFHu/vQt75xir/u86bvn93cGEwgVJykjxmefFoNFr 0MUYsOXGY54Xgyk5Bp/Hi9/rj+r+0RhrG2HnY1up/MbrYcfKRuNS+seUZMFtd6FSnzt6dspHR2Vb 2DU51y+AABz66V7GO+2Uf2k5MemxUd1/esecazSYGHePui563WztN59LtNjPjgLg8/hw9k6g1qgx JZrD7qE16bgYpfhdI5Mc/tk+qr6/G0ualQ1P3xxK/EQj0vwIOTcc/FM+JgccqNQqTEkWxfEFMOX0 kFCYREpFGkMN/XjG3cQXJIZufanzKxJDnBEAx7mjlqdjupB/ykf1j/cyWN/Hki9fxbwlaWHlkeKL Zv2IdH9DrBGNQYtreBJ7+2jo59PfpJ3edWlJieH2Fz7NHX++L/SfzhL8RvBgXV/o/bjtwR3u+nNl 0byfSPUvR/8Cs46vaOZ3JNH0X2JxMjFpVvpquxk40Yc52RI2PuH8EeeOC47snitK8zua9fHDvP4I IYQQQgghhBBCCCGE+Hia0y1FiUXJXPejm2ncUkfz1uBRrEX3lqGPNaI16Wh/uxVjnBGvy4ujZ5z4 guD3D0eah9j7xJvE5SZgy40PJk2ApJJ5UT13yuFh1z9uw5oeS1JJCgF/AFRgTDApVya4W9fn9uJz eemv7eHUn47jnwoeCRtNfCq1ivzbi2h6sZ5DP9mLwWZk9PQQKRVpqHVqJoccEe8fre7qDpwDDpwD Dobq+0hdkXFZ+seSEoOjdwJjvJmMtTk0vVRP1nV5bHruTgy2YJKqZetJrJk2cm8sQK1VozXrcI+5 QuWRmJMtqHVqRluH2f+vbwcTKhfZ9Thb++PyE4gvSGKkeZBDT+/FNerC7/OTe9PCsGNZI1GKv/aX VYy0DFPxyEqyrsuL6p5/a7b5MW2ix86hp/fiHnMx5ZwiY21OaIdjpPHl9/mp+kElfm+A2CwbXfvb 0eg1FNy5CLj0+aUkYWEyBpuR/qM9HPje7tBR4NO8Li8Hf1jJYH0/lpQYxtpGONpYjVqrpvzB5Yrx Ka0fSvdHBXm3LKT55QYOPLWb1GXpoW/gXvPt6zEmmJi/KpPuqg72PbGL5LJUJnrsJBQmk3fzQuzt o+z/7tvEZscRmx1Hf20wAZ1xTXBHq9L8V6r/fvfvtNnGl9L8nnJ4Isan1H/Tsjfm0/Dfx1DrNGE/ P9/OJHqPdFH3+xoG6/vxubwsfnhFVH2kJNL8jnZ9/LCvP0IIIYQQQgghhBBCCCE+fub8bEm1Tk3x feXMX53JRHfwyEytUcvqb66j4Y/HOPXnE6h1GtJWZlL6+QoA4vISKL63nO6DHXTuPYM+xsCC24so /sziqJ6p0WspuqeMjnfaOP3qKVQaNfOWpFFyf8XMiy+yCdeSaqXwnlJatzfRsaeNjLU5qDRqRpoG o46v8O5SVKho392K1+UlY002pV9YGtX9o5W+Koueqg70sQaSSlOirveu+uci5i1ORWvScnZXC8u+ uvqi16RdlUHb680cfa76gudqWPf9TaEdjbPRmnSUfK6Cxi11OAccLPrsYlq3N864brb2q1QqVj6+ lrrna+g/2oPGoKXgzkUU3VM24x6ziRS/NdNGSsV8lj66WrEtSi42P6ZlXpsb2rWavjqL8i8tC5VF Gl8qVKRdlUlHZRvdB9qx5cRT/qVlod2Ilzq/lGgMGq76+lqO/eYQIy1DpK/Owu/zh3bcjrYOM1gf PAbZ0TdB644mILgulD+4XDE+pfVD6f4AxfeWo7foObvrNB3vtGFJtZK7qYAAAVSoqPjKKszJFrqr Omh59RTWjFhSlwcTfdZMG6UPVNC59yw9Bzsw2IwsuGMRuZvOJzMjvZ9o6r+f/TtttvEVzfxWEqn/ Qs9fl8vJF47jc3tJvzprxj3ybilkonecviNddFS2Yc2Ixef2Rf2t3kgizW9LqjWq9fGjsP4IIYQQ QgghhBBCCCGE+HhRAeV2u/1YpIusvQcuUzjvv5N/Ok7Ti/WUPrCU/FsLP+hwPjTO7jrN8d8cpugz 5SSXpjDeZceUZCZp0TycAw52fe1VFj+0gqz1efh9fur/UEvrjiaWfXU1GeeO+r1SfdjjF+JSRZrf c8Xr8rLz0a0Y4oxsePqWObuvkit9fl/p8QkhhBBCCCGEEEIIIYR4f4ynRt6c1dLSckn3X7p06eI5 3xF8JfKMuznyzAEsqTF07TsL8K521Irgsa4ao5aWrSdp3FKHJTWGwrtLAZgcdOCf8tN9oB1jvAnP uIe+mm50Zh1JJVd+P3/Y4xfiUkWa33Oh+eUGuqs78Yy7KTu3U/pyudLn95UenxBCCCGEEEIIIYQQ QogPr4/FjuDhpkHq/1CLvX0UY6KZgk8Uy3cW51AgEODk/xyn850zuEdd6GMNxBckUnhXKbbc+A86 PEUf9viFuJL53F62PbAFfayBvJsXsvCTJZf1+Vf6/L7S4xNCCCGEEEIIIYQQQgjx/rgcO4I/Folg IYQQQgghhBBCCCGEEEIIIYS4UlyORLD6ku4ghBBCCCGEEEIIIYQQQgghhBDiiiOJYCGEEEIIIYQQ QgghhBBCCCGE+IiRRLAQVxCfx8dgfT/+Kd8HHYoQQgghhBBCCCGEEEIIIYT4ENNejod4xt3sePAl YtJj2fjTWy/HI2c13DhI3fM12DvGMCeZWfipEjLW5kRdDuBze3n1/s1YUq1c/8xtl7cB77No2v9R cyWNz6PPVdO55ww5Nyxg8UMrPtBYhBBCCCGEEEIIIYQQQgghxIfXZUkER6trfztNL9bhHHQSmxXH wk8uImXpfADGzo5S9/sjjJ4expRkofCeUtJXZwUrBqDjnTZaX2tmvHMMQ6yBzHW5FN1TBqrz9/dP +aj+8R48djfpV2eBCozxpqjLI+k91Enz1lPY20cxxpsovOuCBGoU8bntbo7/9jADx3tRa1Skrcyk 7IvLUGsv36btaNp/elsjdc/XALDuB5uIy0sAFN4PweT5id/V0Hu4E41RR/bGPBbeWRJqf93zNZze 1hj2rII7F7Hos4sBhf6Noj4BaN7aQEflGVzDThIKk1n88ApMieZL7rdotfz1FCf/5zjrf7gJa4bt otfE5ycwcKwn1K9CCCGEEEIIIYQQQgghhBBCvBfvWyK460A77lEXeTcvjOr6nupODv9sH6ZEM2lX ZTBY18fAiV5Sls7H5/ZS9dRufB4fOTcsYKCuj8M/3Ych1kBSSQo+j5fmVxrQGLRkb8ij93AXjVvq MCaYyLl+QegZ493juMdcJBQms+x/Xz0jBqXy81Rhf3INT3L4mQPEzLeScU023QfaqflFFdYMG7bc +Kjiq3u+hu4D7RR/ppzJISdndrZgSbWy4PaiqPpvLii139EzzskXjqE16fBOToV+rvR+AI79+hCd e8+SvTEf18gkJ184js6sJ3dTAQDeSS8A81dnoTUEh+V0MlSpf5XqAxz/3RHa326l7AtLsWbYaPjv Y9T8ooo1T2wIXRP+Vueeo3c8eORzYPZr8m4pJO+Wwvc5kitP3fM1ZFyTQ1y+JMCFEEIIIYQQQggh hBBCCCHmwpwngl0jkxz/zWF6DnVS8rklYWUBr5/qp/cycLwXW3YcFV9ZiSXVCsDJPx1Ho9dw7fdu xJhgYsrhQWvUATDaOoxrZJIFtxdRcn8FUw4Prz30Ms2vnCSpJAWNQcuaJ69Hb9WjUqmIy0ug5tkq nP2O0LPfeOQvuEYmARhuHOAv976AKdHMjf9xR1TlE112an9Vjb19lLQV6WFZQ2OCibX/egOxGTZU GhUx82Ope76Ggbo+bLnxUcXn6BlHbzWw4I5iVKhof6uVycHz5QSgfXcrrdsbmeidwJxkJufGgvOJ 9kssV2p/IBCg5pcHMdiMpFTMp+2N5lBoSu/HM+Ghc+9Z5q/KZPHDKyAAOx/bSttrTRckgoOJ5aVf WYnGED4slfpXqb6jb4IzO5tZ8vBVZF2XB0Dh3aXs/+5beF3e0HUag5b6/6ylc+9Z1Fo1S/7XSpLL UkL3P/mnE3RXteOf8pOyJI3SLy5DH6On7fVmjv/2MIv+bgkFdxQDUP+ftbT89RRrvr0R18gkR391 EJ87+N3ft/7PdoCw/t163/8Q8J3PEC+8q4TiT5cD54+uzt1UgFqrpmt/O2qtmopHVpJUmhIan8d+ c5iR5kF8nvPfF1766Coy1+Xi6B2n7vlahk4NoNaoiMtPIP+24lD7lLjHXNT/oZa+oz1oDBoy1+ZS eHcpal1wx3rj5jpObT7Bjb+8g9YdjXTuO4tGr2XDT25BrVUrxuccdPLOv7xB/m1FFN1bhkaviSou IYQQQgghhBBCCCGEEEIIcXFzeu5w+9utvPVP2xk6NcDSR1ex4BPFYeWOvgmmxt1YUmMYOjVAzbNV AHhdXsY7xkguS0WlUdFX043b7kalCWZbpxPC9vZRPONuhk4OoFKrGO8cC93bEGvA3j5Gy19P0bil DlOimaz1uaHy3JsKyFwX/LM1w0bRPWXk31YUVXnAF+Dgj/Yw3DiALSc+mMD9m12dtuy4ULx+bzDR deGxykrxpa3MwDPupvrf9tCy9SSoCTv6uHnrSWr/4yCuURfpV2ehi9Hj7J+Ys3Kl/mnd3sRw4wDl f7881M5pSu/H2TdBIBAgNieOPf/vTY7/7gix2XE4eoM/D46BYCJ319e2sf2LL3Lk5weYcp7fdazU v5HqD9b1odFrQ/3p7J8IxeYec4XuMdo6TO/hLgxxRpwDjtAR2AA1z1bRur2RuLwE0q7KoHPfWY4+ Vw0E35NGr6Fr/9nQ9b1HujHGm0gsTsaaYaPgE4swJ1uCfb2pYEb/Ft5dStE9ZaQuT2c2ba8301fT HYrvxO/Px3f4mf0Mneyn+L7FoZ3QRfeWEb8wKRR/75EusjfkkbUxH0e/A0ff+KzPulAgEKD6R3vo 2HOGhMIkjPEmml6up/6/amdce+Tn+2nd3oQlJQZrpi10tLlSfMv/4WoWfqqE1u2NvP31HQw29EcV mxBCCCGEEEIIIYQQQgghhLi4OdsRfPrVU9T9oZbMa3MofWApeqthxjWWlBjWfHsjAX+AbQ9sZrhx kCmHh8lBJwATvePsfOyv+NxeUEHJ5ypYcHsRtpx4Upel03ukix0PvoQp0Rw8nviC3ZwA3VXtNL1Y D0DhPaWY58WEygruWMRw4wDtb7dizYil8J7SsLqRykdaBpnotpNYPI9rntyI1+Vl2+c3X7QfPONu Tm9rxBhvCu4cjjK+vJsKOfNGC3213fTVdpO0aB6xWXHBwgA0v9KAWqPm2u/dEKo3nUS95HKF9k8f CZ25LpeUivn01faEtUvp/fimgolblVqNz+PFP+VDrVHj9/sJ+AOoNCrmr85CH2skviCRjso2Ovec QWvUsvihFVH1b6T6jr4JLPMsqLVqGv54jJatJ9EYZw59U6KZ6358CwDbPr+Z8a4xCMDkkJOe6k5M iWZybywAFYy0DNF7uBO/z4/OrGP+6iw6KtuY6BlHBUx028m/tRCVSoUtOw5bdhyDDX04Bxzk3liA NTP8G8GFdwX7++xbp+k93DUjtkjxBfwBxs6MYMuOJ//WQjR6DaOtw9hy44lJC+64955Lirvtbuav yqTwU6VoDNHtuh1rHWG4aRBbbjwrH78Wn9vH9i9s4cwbLZTcXxH2HWtH7wQbn7ktlPSG4D+kUIpP rVNTdG8ZGWuyOfpcNfue3MXa71xPQmFyVDEKIYQQQgghhBBCCCGEEEKIcHOWCNZbDaAK7vp1jbou mghWnUsYqdQqLKlW7GdH8djdoYRUwOtn7XeuR2fR8c4336BxSx0LbisCFax8/FqGGgfwTnpJLE5m 56NbsaTEhN2/6N4y8jYtpG1nM42b65gcdFLxyMpLbtv0Ec6x55J3qlk+Juuf8nHoJ/vwjLtZ9c/r ZhxRHCm+A0/tRmfRs/7ra2nd0UT77laO/bqapY+txm13MeXwYEwwhSWPVecCudRyJWffOo3P46Oj so2OyrbQzyu/8Tprvr2RpEXzIr6f6Z27UxMe1v/wJgD2PrELQ6wRtSY4JrLW55G1Pnhsc3JpCru+ tm3GrtBI/Rupvn/Khz7WyES3nea/NFD2xWXYcuPZ+603w+6vMWpDRx3rrHrcoy4CgQCOvuDO6ckh Jwee2h1Wx+fyorboyd6QT0dlGz1VHaHxnH51dlT9G63Z4ps+Lnu8a4y+mm56qjtABTHnjl0HWPzl q6h9tir0DrUmHeUPLifz2pzwhwSY8bFkR29w57AtJ3gMt8agwZwaw0SXnckhZ9g8zL+1MCwJDEQV X+hZ/Q4mh5xo9NoZ80cIIYQQQgghhBBCCCGEEEJEb86Ohs5cl8s1T16PZ9xD5eOv0fDCsbBvgQKh 45T9Uz4mBxyo1CpMSRbM82LQ6DXoYgzYcuMxz4vBlBwT3D3q9QMw5fSQUJhESkUaQw39eMbdxBck hm49dGoAlUqFIc5I5rkjgEeah+akbYY4IwCOc0cpT8d0If+Uj+of72Wwvo8lX76KeUvSwsojxefs n2DoZD/J5anYcuOD305Os9J7pDv4/FgjGoMW1/Ak9vbR0D2nvzl7qeVK5i1JY9HfLQ79l3DuON/c mxaGkoCR3o8pyYzeamCgrg8IHgU+enoolFiE4PHN0+PDbXcDoLfoo+7fSPVNSRbcdhcqtSp0rwsT 2kqmd61aUmK4/YVPc8ef7wv9pzv3jMTiZGLSrPTVdjNwog9zsiVsfML5I7QdFxzJPVdyrl8AATj0 072Md9op/9JyYtJjQ+XW9Fg2/vttXPejmyn+dDk+l5fjvz0cdo+xthF2PraVym+8HnYst/ncO7af DY4dn8eHs3cCtUaNKdEc3kaT7j3F5xqZ5PDP9lH1/d1Y0qxsePrmsPEhhBBCCCGEEEIIIYQQQggh 3p053XKXWJTMdT+6mcYtdTRvDR5FXHRvWah8osfOoaf34h5zMeWcImNtTmiHY/7tRTS9WM+hn+zF YDMyenqIlIo01Do1fp+fqh9U4vcGiM2y0bW/HY1eQ8Gdi4BgQnXvE28Sl5uALTc+mBQEkkrmzUm7 EhYmY7AZ6T/aw4Hv7cYz7g4r97q8HPxhJYP1/VhSYhhrG+FoYzVqrZryB5crxqePNaI16Wh/uxVj nBGvy4ujZ5z4gmDCFRXk3bKQ5pcbOPDUblKXpYe+cXvNt6+fk/JIkkpSSCpJCf15cmiS4aZBstbn Yko0K74ftUZN9sZ8ml9p4MjPDzA56MTn8ZG7qQAIflt4/3ffJjY7jtjsOPprgwnwjGuyo+pfpfqW lBgcvRMY481krM2h6aV6sq7LY9Nzd2KwGZlyeCK235hgYv6qTLqrOtj3xC6Sy1KZ6LGTUJhM3s0L Q9dlb8yn4b+PodZpwn4+LWFhEr1Huqj7fQ2D9f34XF4WP7xixnXvRcvWk1gzbeTeWIBaq0Zr1uEe c4Xat+sft2FNjyWpJIWAPwCqYLsu1F3dgXPAgXPAwVB9H6krMgCIy08gviCJkeZBDj29F9eoC7/P T+5NC8OOhX6v8QHU/rKKkZZhKh5ZSdZ1eXPSJ0IIIYQQQgghhBBCCCGEEB9nc372qlqnpvi+cuav zmSiezysLPPa3NCu1PTVWZR/aVmorPDuUlSoaN/ditflJWNNNqVfWAqAChVpV2XSUdlG94F2bDnx lH9pWWg3YlxeAsX3ltN9sIPOvWfQxxhYcHsRxZ9ZPCdt0hg0XPX1tRz7zSFGWoZIX52F3+cP7agd bR1msD54DLGjb4LWHU0AaI1ayh9crhif1qhl9TfX0fDHY5z68wnUOg1pKzMp/XxFKIbie8vRW/Sc 3XWajnfasKRayd1UQIAAKlSXXH4plN4PENyF6vbStb891C+py4Pf+LVm2ih9oILOvWfpOdiBwWZk wR2LyN20MKr+Vao/b3EqWpOWs7taWPbV1e+pjRVfWYU52UJ3VQctr57CmhFL6vKMsGsy1+Vy8oXj +Nxe0q/OmnGPvFsKmegdp+9IFx2VbVgzYvG5fVF/qzeStKsyaHu9maPPVYd+ptFrWPf9TVhSrRTd U0bHO22cfvUUKo2aeUvSKLm/Iuwe6auy6KnqQB9rIKn0fOJfpVKx8vG11D1fQ//RHjQGLQV3LqLo njKiFSk+a6aNlIr5LH10dWj3vRBCCCGEEEIIIYQQQgghhLg0KqDcbrcfi3SRtffAZQpHiPfH2V2n Of6bwxR9ppzk0hTGu+yYkswkLZqbXeMQ3Lm889GtGOKMbHj6ljm7rxLngINdX3uVxQ+tIGt9Hn6f n/o/1NK6o4llX11NxrmjyD8oV3p8QgghhBBCCCGEEEIIIYQQl9t4auTNiy0tLZd0/6VLly6e8x3B QlyJsjfmozFqadl6ksYtdVhSYyi8u3TO7t/8cgPd1Z14xt2UndvJfrlMDjrwT/npPtCOMd6EZ9xD X003OrMu7EjvD8qVHp8QQgghhBBCCCGEEEIIIcRHkSSCxcdGxppsMtZkz/l9fW4vJ/90HH2sgeL7 yi/7DteEomQKPrmIznfOcPAH76CPNRAQ1LfOAAAgAElEQVRfkEjhXaUzvgP8QbjS4xNCCCGEEEII IYQQQgghhPgokqOhhRBCCCGEEEIIIYQQQgghhBDiMrocR0OrL+kOQgghhBBCCCGEEEIIIYQQQggh rjiSCBZCCCGEEEIIIYQQQgghhBBCiI8YSQQLIYQQQgghhBBCCCGEEEIIIcRHjCSChRBCCCGEEEII IYQQQgghhBDiI0Z7WZ4SgI532mh9rZnxzjEMsQYy1+VSdE8ZqMIvPb2tkbrnawBY94NNxOUlRF2/ a387TS/W4Rx0EpsVx8JPLiJl6XwAeg910rz1FPb2UYzxJgrvKiFjbU7Ys8+82cKxXx8C4LqnbyE2 0/auyiM9PxrR1L9o/wA+t5cTv6uh93AnGqOO7I15LLyzJLr+fRcuVn+0dZjKb7x+0evv+PN9QOT+ j6a+krGzo9T9/gijp4cxJVkovKeU9NVZYdcM1vVxanMd9rMjmJIsZG/II+/mwlAfRer/aPs3ktnu 73N7efX+zaHrdBY98QsSKPvScmLSrIr1o23fex2/iu/nEuene8zFaw+9DIDGoCVmvpXcTQVkX5cP KhTLLzTr+A5A89YGOirP4Bp2klCYzOKHV2BKNEf59oQQQgghhBBCCCGEEEIIIT5Yk5OTnKhvoH9g AIB5yUksKi4mxmK56PXv247grgPttO5oAsDn8dL8SgMEAmRvyAOgcUsdZ3a1hNVx9Ixz8oVjaE26 sJ9HU7+nupPDP9vHlHOKtKsymBx0MHCiFwDX8CSHnzmAz+Ml45psPHYXNb+oYqxtJOw5fTXdGGIN wf9/pGtGmyKVR3p+NKKpP1v/ABz79SHa324l7apMYjNtnHzhOG1vNEddPxqz1ddbDWStzwv9l7Yi A4DE4mRAuf+V6ivxub1UPbWbsTOj5NywALVOzeGf7mOwvi90Tc/BDvZ99y1GWgaJW5CIb8pH284W pianguUK/R9N/0YSzfvVx+gpvKuUuLwE+o/1hpK20dRXah+89/Gr9H4udX6G2m81kL46i8lBJ0d/ VU3Ty/XvqjzS+D7+uyM0bqkn/9ZCVv3f9XhdXmp+UTXjuo+ruudrGD09/EGHIYQQQgghhBBCCCGE EEKIWUy6XLxd+Q7dPT14vV68Xi/dPb28s2cvky7XRevM+Y5g18gkx39zmJ5DnZR8bgkQ3MW35snr 0Vv1qFQq4vISqHm2Cme/I1QvEAhQ88uDGGxGUirmhyXZoql/8k/H0eg1XPu9GzEmmJhyeNAagwkh Y4KJtf96A7EZNlQaFTHzY6l7voaBuj5sufEA+Kf8DJzoI2NNNn213fTVdFNw56LQ/ZXKIz0/Gkr1 I/WPZ8JD596zzF+VyeKHV0AAdj62lbbXmsjdVKBYPxqR6puTLVR8ZWXoz8d+fQidWcfSx1YDyv2v VF/JaOswrpFJFtxeRMn9FUw5PLz20Ms0v3KSpJIUAv4AJ35fAwFY9Y31JJcFf+YZd6Mz6xT7P5r+ VRLN+NDFGCj6dBmeCQ87vvQiU05PVPWjad+ljF+l93Op83OaMc5IxVdW4uib4K1/3EbTy8HErVK5 xqCNOD4dfROc2dnMkoevIuu6YKK68O5S9n/3LbwuL1qjlokuO8d+c5iR5kF8Hl+o7tJHV5GydD47 HnyJ3E0FqLVquva3o9aqqXhkJUmlKaEd06nL0ln5z9eGdjDbcuJZ/283BWPoHafu+VqGTg2g1qiI y08g/7ZikstSoho/7jEX9X+ope9oDxqDhsy1uRTeXYpaF/y3PI2b6zi1+QQ3/vIOWnc00rnvLBq9 lg0/uQW1Vh2xfZnrcnEOOnnnX94g/7Yiiu4tQ6PXRBWXEEIIIYQQQgghhBBCCCEujxN19Ximpmb8 3DM1RV19PSuWLZtRNqc7gtvfbuWtf9rO0KkBlj66igWfKA6VGWIN2NvHaPnrKRq31GFKNJO1PjdU 3rq9ieHGAcr/fjkqzczzdiPV97q8jHeMkVyWikqjoq+mG7fdHXYfW3Zc6M9+bzARYow3hcoHG/rw ub3ELUggviCR4aZBPBOeqMqjeX4k0dSP1D/OvgkCgQCxOXHs+X9vcvx3R4jNjsPRG/x5NP2rJNr6 Y20jnNnVQv6tRZiTz29DV+p/pfqRTCcU7e2jeMbdDJ0cQKVWMd45BoCzf4LJISe23PhQ4k2lVmGw GQHl/o+mfyOJdnx4J6c4+9Zpjv26Go1eQ8G5+aMYn0L7YO7G72zv51Ln54UsKTEkLEzC5/Yx0TsR VXmk8TlY14dGrw0dRe7snwiNDfdY8F/IHH5mP0Mn+ym+b3HoOOmie8uIX5gUuk/b683BXdVxRpwD jmDyPUo1z1bRe6SL7A15ZG3Mx9HvwNE3HlXdQCBA9Y/20LHnDAmFSRjjTTS9XE/9f9XOuPbIz/fT ur0JS0oM1kwbaq06qvYt/4erWfipElq3N/L213cw2NAfdduEEEIIIYQQQgghhBBCCPH+mz4O+mL6 +i9eNmc7gk+/eoq6P9SSeW0OpQ8sRW81zLimu6qdpheDx7kW3lOKeV4McP5I18x1uaRUzKevtuei z5itvrMvmAya6B1n52N/xef2ggpKPlfBgtuLwu7hGXdzelsjxngTaSvSQz/vq+kGID4/kSnHFD3V nfQf6yFjTbZiudLzL/zG6YXMyRZuePYTivWV+sc3FUysqtRqfB4v/ikfao0av99PwB/A2T8Rsb5S fNG+H4DT2xtRqVTk3LjgouWz9X+k+krx2XLiSV2WTu+RLnY8+BKmRDNakw6vywsQ2plqTrp4Ylmp /5X61zPhvqT3e2E7j/6qGoDYrDgMccao4lNqH1za+L1QpPc7F/Nzmv7cEdauYSfGOGPEcq1eE3F8 OvomsMyzoNaqafjjMVq2nkRjPL/0BXwBxs6MYMuOD+4w1msYbR3GlhtPTJoVz7gbAFOimet+fAsA 2z6/mfGuMVD+dwAAeJ3Bf6HjtruZvyqTwk+VojFEt+t2rHWE4aZBbLnxrHz8WnxuH9u/sIUzb7RQ cn9FKNkL4OidYOMzt4Ul6ZXaB6DWqSm6t4yMNdkcfa6afU/uYu13riehMLrj2YUQQgghhBBCCCGE EEII8f7yer3vumzOEsF6qwFUwaSLa9R10URw0b1l5G1aSNvOZho31zE56KTikZWcfes0Po+Pjso2 OirbQtdXfuN11nx7I0mL5kWsP51QCXj9rP3O9egsOt755hs0bqljwW1FcG6DoH/Kx6Gf7MMz7mbV P69DYzjf/OlEWe/hLiZ6x0M/+9tE8MXKlZ6vM+tY9tWZxxxPJ6OU6iv1jynRDMDUhIf1PwweRbv3 iV0YYo2oNWrF+gkFiRHji/b9BHwBeg52YM20he1GnRap/yPVV+o/VLDy8WsZahzAO+klsTiZnY9u xZISTEQaz/XP5JBzxj2i6f/pncuz9e+lvt9pllQr1z9zGxM941R9v5IDT1Vy828/pRyfQvvg0sbv 9PxRer/veX5ehHs0uFN3emxHKlcan/4pH/pYIxPddpr/0kDZF5dhy41n77feBAgdVz7eNUZfTTc9 1R2ggphUa9gzNUZt6ChmnVWPe9QV1Y5wgMVfvoraZ6tCMWpNOsofXE7mtTnhFwYI9fc0x7n3ZcsJ HmOvMWgwp8Yw0WVncsgZGucA+bcWzthJH237ABz9DiaHnGj02hnzUwghhBBCCCGEEEIIIYQQHy5z 9pv+zHW5mFNiOPqraioff438TxRReFdp6FuTQ6cGSCxKxhBnJHNtDo2b6xhpHgJg3pI0dDH60L16 D3Ux3DRI7k0LQ0mOSPXN82LQ6DXoYgyhb/6akmMYOzOM3+tHrVPjn/JR/eO9DNb3UfGVlcxbkhZ6 3kSXHce5XYunNp8I/bz/aA8BfwBHz3jEcuXna0LH0l6MUn2l/jHEGdFbDQzU9QHBo3hHTw+RWDwv qv5Vii+a9wMwdmYEr8sbSlhdKFL/K9VXig9gyukhoTAJlSp49LBn3E361VkAWFJj0FsNjLYOM3Ci L/QN3fEuO7GZNsX+NyWZI/bvpb7fvxWTZiUmzYqjdxz72RHiC5Ii1ldqn9L4jmb+RHo/cGnz8285 esYZbh5Ea9RiSbHidU1FLFcan6YkCwN1fajU544mn/KFJYwBcq5fQMMfj3Lop3vRxxgo/9JyYtJj Z32nF5rekesanQTOJ6kvZE2PZeO/34b97Ci9h7s49ecTHP/t4bBE8FjbCNU/3oPeauDqb20Ifd/Z fG6O2c+OAuDz+HD2TqDWqGckyrWmi3+XXKl9rpFJ6p6voWt/O8nlqax5YkNoR7cQQgghhBBCCCGE EEIIIT6c5nTLV2JRMtf96GYat9TRvLUBtSZ43OhI8xB7n3iTuNwEbLnxDJ5LqCWVzDv3vykklaSE 7jM5NMlw0yBZ63MxJZoV66vUKvJvL6LpxXoO/WQvBpuR0dNDpFSkodap8bq8HPxhJYP1/VhSYhhr G+FoYzVqrZryB5fTe263ZOkDS8m/tRCA/d99i4ETfYw0DzHcNBixPKEwKeLzlSjFr9Q/ANkb82l+ pYEjPz/A5KATn8dH7qaCqPpXSbT1J7rtwMxv/yr1v1J9JX6fn6ofVOL3BojNstG1vz34jd07FwGg 1qgpuX8Jtb88SNUPdpNUksLkgAPnoJP1/3YTMWlWxfcXqX+VKL1fnzuYDJ2acNP0Yj32zjH6j/eg M+uwZsYp1gcitk9pfEc7fmd7P5c6P6e5Rl0cfa6anupOAr4ACz9TgsagCSWCZytXGp+WlBgcvRMY 481krM2h6aV6sq7LY9Nzd4Z2NrdsPYk100bujQWotWq0Zh3uMddFdz7/LXOyBbVOzWjrMPv/9e1g wvaCXb1TDg+7/nEb1vRYkkqCSXpUYEwI78fu6g6cAw6cAw6G6vtIXZEBQFx+AvEFSYw0D3Lo6b24 Rl34fX5yb1oYdix0JErtq/1lFSMtw1Q8spKs6/KiuqcQQgghhBBCCCGEEEIIIa5sc372p1qnpvi+ cuavzmSiO3ikaVxeAsX3ltN9sIPOvWfQxxhYcHsRxZ9ZHNU9o6lfeHcpKlS0727F6/KSsSab0i8s BWC0dZjB+n4geHR1644mALRGLeUPLg8dmzuduAJIWpTCwIk++mq6Q4ng2coTCpMiPj8al1q/+NPl +Nxeuva3h9qVunzmN3jfT65zOyH/9lhwpf5Xqq9EhYq0qzLpqGyj+0A7tpx4yr+0LCxJnbU+D51F T9NLDQyfGsCcbKH4M+Whb6Qq9f+l9m8079cz4eHkn46jNelIWJjMos8uDu0KVaofqX1K4zva8Tvb +7nU+Rlq/7ibjnfOYJ1vZdFnF5O9If9dlc9m3uJUtCYtZ3e1XPQIb4C0qzJoe72Zo89Vh36m0WtY 9/1NoW81z0Zr0lHyuQoat9ThHHCw6LOLad3eeMF9tBTdU0bHO22cfvUUKo2aeUvSKLm/Iuw+6auy 6KnqQB9rIKn0fGJbpVKx8vG11D1fQ//RHjQGLQV3LqLonrKo2q/UPmumjZSK+Sx9dLViW4UQQggh hBBCCCGEEEII8eGhAsrtdvuxSBdZew9cpnCEEGLund11muO/OUzRZ8pJLk1hvMuOKclM0qJ5OAcc 7Praqyx+aAVZ6/Pw+/zU/6GW1h1NLPvqasVjya90H/X2CSGEEEIIIYQQQgghhBAfRuOpF9+8Nq2l pSXsz6/89dWI1995+21hf166dOniOd8RLIQQV5rsjflojFpatp6kcUsdltQYCu8uBWBy0IF/yk/3 gXaM8SY84x76arrRmXVhR05/WH3U2yeEEEIIIYQQQgghhBBCiIuTRLAQ4mMhY002GWuyZ/w8oSiZ gk8uovOdMxz8wTvoYw3EFyRSeFfpjO/4fhh91NsnhBBCCCGEEEIIIYQQQoiLk0SwEOJjTaVSsei+ xSy6L7pvln/YfNTbJ4QQQgghhBBCCCGEEEKIi1N/0AEIIYQQQgghhBBCCCGEEEIIIYSYW5IIFkII IYQQQgghhBBCCCGEEEKIjxhJBAtxBfF5fAzW9+Of8n3QoQghPmZk/RFCCCGEEEIIIYQQQoiPlsvy jWDPuJsdD75ETHosG3966+V45KyGGwepe74Ge8cY5iQzCz9VQsbanKjLAXxuL6/evxlLqpXrn7nt 8jZA4fnRxH+5vZv3Pxfxv9v3cyWNz6PPVdO55ww5Nyxg8UMrPtBYPiqupPf7frvU+XOx+vOWpH1s +u+DcCWNT1l/hBBCCCGEEEIIIYQQ4qPlsiSCo9W1v52mF+twDjqJzYpj4ScXkbJ0PgBjZ0ep+/0R Rk8PY0qyUHhPKemrs4IVA9DxThutrzUz3jmGIdZA5rpciu4pA9X5+/unfFT/eA8eu5v0q7NABcZ4 U9TlkfQe6qR56yns7aMY400U3nVBAiaK+Nx2N8d/e5iB472oNSrSVmZS9sVlqLXRb9pWij9S/9rb R+k93MXZt1px9k+w8We3EjM/FoDR1mEqv/H6RZ95x5/ve9/jj+b5igLQvLWBjsozuIadJBQms/jh FZgSzVHHd6la/nqKk/9znPU/3IQ1w3bRa+LzExg41kNcXsJli0soi7j+RFHuc3s58bsaeg93ojHq yN6Yx8I7S0LzP9L6Ee34jzT/lZ6vVH+unN7WSN3zNQCs+8GmqMe50vqi1P91z9dweltj2D0L7lzE os8unqOWKZD1RwghhBBCCCGEEEIIIcQH4H1LBHcdaMc96iLv5oVRXd9T3cnhn+3DlGgm7aoMBuv6 GDjRS8rS+fjcXqqe2o3P4yPnhgUM1PVx+Kf7MMQaSCpJwefx0vxKAxqDluwNefQe7qJxSx3GBBM5 1y8IPWO8exz3mIuEwmSW/e+rZ8SgVH6eKuxPruFJDj9zgJj5VjKuyab7QDs1v6jCmmHDlhsfVXx1 z9fQfaCd4s+UMznk5MzOFiypVhbcXqT4/Gjij9S/AO1vt9K+uw2va2rGffVWA1nr80J/nnJ46DnU SWJxcuhn7y7+i5stfueAQ/H54Wb2z/HfHaH97VbKvrAUa4aNhv8+Rs0vqljzxIYIteaWo3c8eORq YPZr8m4pJO+Wwvc5kitP3fM1ZFyTQ1z+3CSg3u36E4ni+qNQDnDs14fo3HuW7I35uEYmOfnCcXRm PbmbChTXj2jmH0Se/5Ger1TfM+6+5D4EcPSMc/KFY2hNOryTM9eZSCKtL9H0v3fSC8D81VloDcG/ 9i5nslPWnyvbXK8/QgghhBBCCCGEEEIIcaWY80Swa2SS4785TM+hTko+tySsLOD1U/30XgaO92LL jqPiKyuxpFoBOPmn42j0Gq793o0YE0xMOTxojToguCPONTLJgtuLKLm/gimHh9ceepnmV06SVJKC xqBlzZPXo7fqUalUxOUlUPNsFc5+R+jZbzzyF1wjkwAMNw7wl3tfwJRo5sb/uCOq8okuO7W/qsbe PkraivSw39obE0ys/dcbiM2wodKoiJkfS93zNQzU9WHLjY8qPkfPOHqrgQV3FKNCRftbrUwOni+P 9Pxo4o/UvwClDyyl9IGl7HtyF4P1/WH3NidbqPjKytCfj/36EDqzjqWPrY46fqX3Hyn+aJ4fqX8c fROc2dnMkoevIuu6YEKt8O5S9n/3Lbwub+g6jUFL/X/W0rn3LGqtmiX/ayXJZdOJpClO/ukE3VXt +Kf8pCxJo/SLy9DH6Gl7vZnjvz3Mor9bQsEdxQDU/2ctLX89xZpvb8Q1MsnRXx3E5w5+d/Ot/7Md IOz9bL3vfwj4zmdoFt5VQvGny4HzR8fmbipArVXTtb8dtVZNxSMrSSpNCbX/2G8OM9I8iM9z/vue Sx9dRea6XBy949Q9X8vQqQHUGhVx+Qnk31Ycap8S95iL+j/U0ne0B41BQ+baXArvLkWtC+7IbNxc x6nNJ7jxl3fQuqORzn1n0ei1bPjJLai1asX4nINO3vmXN8i/rYiie8vQ6DVRxfW33uv6QwDad7fS ur2Rid4JzElmcm4sIO/mhYrrj1K5Z8JD596zzF+VyeKHV0AAdj62lbbXmsjdVKC4fkQz/iPNH6Xn K9WPpv8izQ+AQCBAzS8PYrAZSamYT9sbzWHvRql+pPVFqf+n7w+w9Csr0Rhm/rWn9PxI40OpXNaf j8/6I4QQQgghhBBCCCGEEFea6M/tjUL726289U/bGTo1wNJHV7HgE8Vh5Y6+CabG3VhSYxg6NUDN s1UAeF1exjvGSC5LRaVR0VfTjdvuRqUJZvOmE5b29lE8426GTg6gUqsY7xwL3dsQa8DePkbLX0/R uKUOU6KZrPW5ofLcmwrIXBf8szXDRtE9ZeTfVhRVecAX4OCP9jDcOIAtJz6YwP2bXVW27LhQvH5v 8BfNFx6rqhRf2soMPONuqv9tDy1bT4Ka0NGw0Tw/UvxK/ftujLWNcGZXC/m3FmFOtkQV/7TZ3r9S /ErPV+qfwbo+NHptKB5n/0Ro7LjHXKHrRluH6T3chSHOiHPAETrCFqDm2SpatzcSl5dA2lUZdO47 y9HnqoFgOzV6DV37z4au7z3SjTHeRGJxMtYMGwWfWBSKN3dTwYz2Fd5dStE9ZaQuT5+179teb6av pjsU34nfn4/v8DP7GTrZT/F9i0M7HYvuLSN+YVIo/t4jXWRvyCNrYz6OfgeOvvFZn3WhQCBA9Y/2 0LHnDAmFSRjjTTS9XE/9f9XOuPbIz/fTur0JS0oM1kxb6OhepfiW/8PVLPxUCa3bG3n76zsYbOif cW8l73X9AWjeepLa/ziIa9RF+tVZ6GL0OPsnAOX1R6nc2TdBIBAgNieOPf/vTY7/7gix2XE4eoM/ B+X1Y9ps8y/S/Inm+dHMv0j9F2l+ALRub2K4cYDyv19+0XVHqX6k9SWavx+mTzrY9bVtbP/iixz5 +QGmnFNRPz/S+FAql/Xn47H+CCGEEEIIIYQQQgghxJVoznYEn371FHV/qCXz2hxKH1iK3mqYcY0l JYY1395IwB9g2wObGW4cZMrhYXLQCcBE7zg7H/srPrcXVFDyuQoW3F6ELSee1GXp9B7pYseDL2FK NAePF71gNxVAd1U7TS/WA1B4TynmeTGhsoI7FjHcOED7261YM2IpvKc0rG6k8pGWQSa67SQWz+Oa JzfidXnZ9vnNF+0Hz7ib09saMcabgjtTo4wv76ZCzrzRQl9tN3213SQtmkdsVlzUz48Uv7NvImL/ vhuntzeiUqnIuXFB2M8jxT9ttvevs+gV30+k5yv1j6NvAss8C2qtmoY/HqNl60k0xplD35Ro5rof 3wLAts9vZrxrDAIwOeSkp7oTU6KZ3BsLQAUjLUP0Hu7E7/OjM+uYvzqLjso2JnrGUQET3Xbyby1E pVJhy47Dlh3HYEMfzgEHuTcWYM0M/0Zn4V3B9p596zS9h7su2vbZ4gv4A4ydGcGWHU/+rYVo9BpG W4ex5cYTk3Zux+a5pJfb7mb+qkwKP1WKxhDdrrex1hGGmwax5caz8vFr8bl9bP/CFs680ULJ/RVh 34F29E6w8ZnbwpKUAZ9yfGqdmqJ7y8hYk83R56rZ9+Qu1n7nehIKZzv+O9ylrD86s57mVxpQa9Rc +70bQvMylKRVWH+Uyn1TwcSuSq3G5/Hin/Kh1qjx+/0E/IGwxGik9QNmn3+R5k80z49m/s3Wf95J b8T5Mdnv4OQLx8hcl0tKxXz6anvC7js5GHl+qTXqiOtLNH8/zF+dhT7WSHxBIh2VbXTuOYPWqGXx QyuUn69WRxwfBIhYLuvPR3/9EUIIIYQQQgghhBBCiCvVnCWC9VYDqIK/9HaNui6aiFGd+4WtSq3C kmrFfnYUj90d+oVwwOtn7XeuR2fR8c4336BxSx0LbisCFax8/FqGGgfwTnpJLE5m56NbsaTEhN2/ 6N4y8jYtpG1nM42b65gcdFLxyMoZcbxb00c4x5775blqlo20/ikfh36yD8+4m1X/vG7GEaSR4jvw 1G50Fj3rv76W1h1NtO9u5divq1n62Oqonz+baPo3GgFfgJ6DHVgzbRhsxrCySPFPm+396yz6S3q+ Uv/4p3zoY41MdNtp/ksDZV9chi03nr3fejPsOo1RGzpqVGfV4x51EQgEcJxLpE8OOTnw1O6wOj6X F7VFT/aGfDoq2+ip6gj1d/rV2VG1K1qzxTd9nPB41xh9Nd30VHeACmKmjz0GFn/5KmqfraKjso2O yja0Jh3lDy4n89qc8IcEmDEeHL3BnXu2nPhgHAYN5tQYJrrsTA45w+Zh/q2FYUkYIKr4Qs/qdzA5 5ESj1170CN/ZXMr64/f6mXJ4MCaYwv5xhmp6ICmtPwrl0zt7pyY8rP/hTQDsfWIXhlgjas35JJbS +hFp/kUS7fOVzNZ/k8PBI6Vnmx9n3zqNz+MLjb1pld94nTXf3hjavR9pfkVcX6L4+yFrfV7oO8vJ pSns+tq20K5Ppfk9pTA+3HZXxHJZfz76648QQgghhBBCCCGEEEJcqebsN52Z63Ixp8Rw9FfVVD7+ GvmfKKLwrtLwb+2d+4W/f8rH5IADlVqFKcmCSqNCo9egizFgyw3+steUHMPYmWH8Xj9qnZopp4eE wiRUquDRxp5xN+lXZ4VuPXRqgMSiZAxxRjLX5tC4uY6R5qE5aZshLph0cZw76tPv9c+4xj/lo/rH exms76PiKyuZtyQtrDxSfM7+CYZO9rPgE8XYcuOp+MpKhhoH6D3SHfXzIzHPi1Hs32iMnRnB6/KG fiE/TSn+kFnef7Rme75S/5iSLAzU9aFSn0/MXJiQUjK9a8ySEsOGn9160eRZYnEyMWlW+mq70Vn0 mJMtxBckhl0zfYSto39ixo68S5Vz/QIa/niUQz/diz7GQPmXlhOTHhsqt6bHsvHfb8N+dpTew12c +vMJjv/2cFgiZqxthOof70FvNXD1tzagMwfjNZ9LtNjPjgLg8/hw9k6g1qgxJZrD22jScTFK8blG Jql7voau/e0kl6ey5okNYUk1JfM8mvMAACAASURBVJey/qi1ajQGLa7hSezto6Gdpj63L5RUU1p/ IpWbkszorQYG6vqA4FHto6eHSCyeF6qvtH7A7ONfSTTPj8os/TedMJttfsxbkoYu5vw/9ug91MVw 0yC5Ny3EkhITSpjOVj+a9UXp/QzW9QW/F6wK7koF0J/7ByiK8ztAxPFhiDVGLJf156O//gghhBBC CCGEEEIIIcSVak63vCQWJXPdj26mcUsdzVuDR2UW3VsWKp/osXPo6b24x1xMOafIWJsTSkLm315E 04v1HPrJXgw2I6Onh0ipSEOtU+P3+an6QSV+b4DYLBtd+9vR6DUU3LkIgJHmIfY+8SZxuQnYcuMZ PJfwSCp5l4mOWSQsTMZgM9J/tIcD39uNZ9wdVu51eTn4w0oG6/uxpMQw1jbC0cZq1Fo15Q8uV4xP H2tEa9LR/nYrxjgjXpcXR8848QVJUT1fiUqtiti/AA1/PErAH8DRG0ymNv/lJPoYPYs+uyR0dO1E tx2Y+e1SpfinRXr/0Zjt+Ur9Y0mJwdE7gTHeTMbaHJpeqifrujw2PXcnBpuRKYcn4nONCSbmr8qk u6qDfU/sIrkslYkeOwmFyeTdvDB0XfbGfBr++xhqnSbs5+fjTKL3SBd1v69hsL4fn8vL4odXRN3+ SFq2nsSaaSP3xgLUWjVasw73mCvUvl3/uA1reixJJSkE/AFQBdt1oe7qDpwDDpwDDobq+0hdkQFA XH4C8QVJjDQPcujpvbhGXfh9fnJvWhh2LOt7jQ+g9pdVjLQMU/HISrKuy3tPfXAp60/eLQtpfrmB A0/tJnVZeugbrtd8+3r8/sjrj9L6pNaoyd6YT/MrDRz5+QEmB534PD5yNxUAyutHKP5Zxr8SpedH a7b+U5ofSSUpwSTsOZNDkww3DZK1PjeUyItUX2l9Uep/e/so+7/7NrHZccRmx9FfG0wgZ1wT3DGr OL9VkceHUrmsPx+P9UcIIYQQQgghhBBCCCGuRHN+9qFap6b4vnLm/3/27jw86vLe+/h7lsxMJjNZ SAIJSdjDkkACIWxR2RQpFlG7a4+t1dbTo6fL6fM8rdZ6TltPH7vYHttHWz3djtbWWq1YtCqiVlDZ BALZSCAsIQGyEZJMtslkMs8fkYERmPlNElY/r+viupy5t+/9+93z87r4ct+/BVl0HPGElGUtHB/c NZWxYAx5t88Olk35xHRMmDj01n76evrIvGIs028rAMCEifS5WdSuP8CRTYdIGJdE3u2zg0mExAkj mPapPI5sqaXunYPYXHYmXT+VaZ/JH5Y5WewW5v7vq9j1m/c4Xn2MjAVj6Pf34/cOvHuzdX8LzeUn jxnd/8oeAKwOK3l3FEaMz+qwsuDbi6j44y4q/1KKOcZC+rwspn9ulqHxjQh3fQGqX6ok4A8EPx/6 x34Apn0mP5gI7mntATjt2N1I8Z8Q7v4bcbbxI12fkflpWGOt1LxRzeyvLDitXyNm3TUfZ2ocRzbX Uv1SJe7MeNIKM0Pnt2g8u58uwe/tC9mNeMKE66bQUe+hYfthatcfwJ0ZH7LrdCjS52ZyYO1edj6+ NfidxWZh0YPLiUtzM/WTM6jdcIB9L1VispgZOTOd3FtD70/G/DEc3VyLLd5OyvSTiTuTycS8b15F 2RM7aNx5FIvdSvaNOUz95AyMChefOyuBUbNGU3D3guDu7sEa7PNn2qfysMXZqHljH7UbDhCX5mb8 8mwCBCI+fyKVA0z7dB5+bx+HNx4KPhfSCgfeARzp+XHC2da/EeHGNyrc9TPy+wgnXPtIz5dI19+d lcD0z8+i7p0ajm6pxZ7gYNINOYxfPtnQ+BB5fYQr1/Pnw/P8EREREREREREREbnYmIC89vb2XeEq ues3nadwRM6Nmjf2UfKbbUz9TB6p00fhOdxObIqTlJzh2TUOAzs71929Bnuig6U/vW7Y+o2kq6mT N77+EvlfmsOYxRPo9/dT/mQx+1/Zw+yvLCDzqnHnLZZLMT6Rc03PnwvnYo9PREREREREREREPrw8 aeE3D1VXV4d8fuHFl8LWv/H6lSGfCwoK8od9R7DIxWjs1ROxOKxUr9lN1XNlxKW5mPKJ6cPW/97V FRzZWkevx8uMU3Zanw/dzZ30+/o5sukQjqRYej29NOw4QowzJuRI3gvlYo9P5FzT8+fCudjjExER ERERERERETmXtCNYZIj83j7+/vnnsMXbmbBiMpNvyj2v4wcCAXb/uYS6DQfxtvZgi7eTlJ3MlI9P J2F80nmN5VKMT+RSpufPpR2fiIiIiIiIiIiIfHidjx3BSgSLiIiIiIiIiIiIiIiIiJxH5yMRbB5c aCIiIiIiIiIiIiIiIiIicrFSIlhERERERERERERERERE5DKjRLCIiIiIiIiIiIiIiIiIyGVGiWC5 6PT7+yl/aid+r3/Y+uw43M6+lyqHrT8RERERERERERERERGRi5nVSKWAP8Cb3/g7Of80k/Q5mQDs XV1B+6FWZn+tyNBA/T4/ZU8Uc2RLLZggZdpIcj83i9hk5+CjH0YXe3znWuu+Fir+tBPP4XassTHk 3JxP+txMw+2PVTZR+ZdSOo96wAQTVkxh0vVTBxXLjl9sImFCEha7ZVDtzyQuzU3Lnmb4exUTPzpl 2PoVERERERERERERERERuRgZSgSbLCZyPjuTymdKSS/MpK/Hx75XqrjqgWWGB6p6vhxPXRuLf/QR rLFWDm86RGv1sYsm0Xqxx3cuBQIBqv5aRs4tM0mcMIKm0nq2/HgD1/y/63EkxRrqo7msgZyb80jK TqHjcDtv3bOWxAkjSMkdGVUsh9+twe/zk31DzmCmclYmi4mCuxfw1j2vMmpmOq6M+GHtX0RERERE RERERERERORiYigRDJA+N5PqFyup21hDV2MHGQvGEDfKZXggT107iZOScYwYSCyOXToxpHz9vWuZ eN0UDrxWTWe9h6RJycy6ax42t32gfW0be16ooHV/C76OXkbNGk3+lwoxx1hormhk34uV9Hn76G7q ZPptBZT+fgeudDcL7ls8LPEB1L1bQ/XfduNt68Ge6GDqJ2eQVpgBgK/LR/mTxTTuOorZambM4glk 35SDyWwCoKelmy0/3sD8by+m7IkdNJXUEz8mgaL7lwIDu66rni/j8Ds1BIDkqanMuK0Aa2xMcPyA P8D6e9eSMC6JWXfNM3ztIzGZTMz75sLg59S8NNxZibQfajWcCJ7yienB/3ZlxDNicgq+Dm/UsVS/ VEnB3fOjbmeExW4he9U09r+6h7w7Cs/JGCIiIiIiIiIiIiIiIiIXg6jeEZx760wq/1zCoTf3M/lj uVENNGbhOA6+tpfdz5TQ6zlzgvDQ+gPM+cYVXPurGzBbzZQ/tTNY1lnvIaNoDEseWsGyR1bhqWvj 4LrqYHljyVHyvjCbpOxk9r6wm0UPXsvx6mN0H+salvgObzrE7j/tYtZd81j++I0UfrUIv7cvWL7z 8a1ggmseuZ6FDy6nfscR9r9cFdJHT2s323+xkfQ5mSx75HoK7l4QLKt8rpRjFU0s+tFHuObhlcQ4 Y6h4uiSkvd/np7OhA09dm6E5DVagP0B3Uweu0VHumg2At62HA2v30tvhZVTB6Kia9xzvpq/Lhzsz Ibpxo5A2J5Oj79Wds/5FRERERERERERERERELgaGdwQDJGUn09/XT8KEEdgTHCFlm37wFr0f2AGa kjOS3FtnAQMJuCsfWEbFUzt57a6/MfG6qUz5RC7mmJPvgc2+ISe4AzVr8fiB5Or70t5/N3Fft4+O Ix7i0t0crz4WLHdnJODOSiAu3Y07MwGb244zxUlnQwexyc4hx7fvpSqm3ZJPwrgkYGDX64njhX2d vRzdUsuK330cs8WMzWVj2qdnUPL77UxcefI9uT0t3cz+SlHwuGSL/eTlP/DKHhbctxirY+C77Jty WX/Pq+TdPjtYx+qwsuzRVVgH8e7cSPM/1b6XKkmZPgpnalxUYxx9r45dv36PQH+Aou8sCbm3RnQ1 dhKXduZd5pHiNzo/m8uG3+unv68fszWqfwchIiIiIiIiIiIiIiIicsmIKhFc+9YBkian0FLZhKeu LWTnppEjmBPGJrLgvsW0HTjOzv/eSseRdub8ryvPWNedmYCvozf4uaelm5Lfb8ff4yNxQjIms4m+ rr7T2pkwnfLh5H8PNb7Oeg/xZ9mp2tXYic1tJ8Z58hjnuDQXXY0dIfWsDusZ35nb6/Hi6/ax45db Qr63ueyn1bW5bBHncSZGj8huLm/g4Ov7uOr710Q9RvrcTNLnZtLZ0MG2/3qXSddPJeOKsYbb9/f1 Y7KcOTkbKX6j8wMwW0xKBIuIiIiIiIiIiIiIiMhlzXAi2O/1U/lsKUXfWULjrnrKn9rJ/HsWDWrQ hPFJ5P7TTN772btnrdNZ34Fz5Mndodt+/i4TVkxh9PwsAGrXH+Do1nNzxO+Z4nOmxtFxpJ34sYmn 1Y9NjaPX46Wv2xd8p29nQyfOVGPvULa57FgdMRTdt4TYFGfYur4uHxab5ZwkMVv3tbDj0c3M/9Yi 7ImOM9YxMn7cKBdjlkzg6Na6qBLBscmxho/yHqx+n59AgODOaxEREREREREREREREZHLkeFs4r6X KkmdnoZrdDzjlk3CU9tGU2mDobYBf4C3719H7YaD9HX78LZ7qXu7hhFTUkLqHdl8iH6fH1+Xj6rn ShmzZEKwrKupE5N5YIdv51FPyPuBh8pIfOOunUTF0yV0HG4PxlO9ZjcwsEs3bU4m5U/tJNAfwNfl o/IvpYxdOuGM453GBOOWTWLXb97D1+UDBt6123bgeEg1v7ePdXev4d3vvjEMsw7VsqeZrT99mznf uPKMye5w4/d29LLtv96l46gHgK7GDg5vrCFxUnJUMcSNctPX5cPb2jO4SRjQuKue1Bmjzln/IiIi IiIiIiIiIiIiIhcDQ9sivW097Hu5ikU/XA6A2Wpm6qdmUP5UMYt+uBzTKUcwn4nJYiLv9kJ2P1NC +VPF0B8gNS+Nmf88N6SexWZh/b2v0evxknnlWCaunBIsy7u9kD3Pl7P7mRLisxIYt2zSsO0INhLf 2KUTCfgDbH3obfq8fdjjHWTflBMsn/XluZQ9Ucy6f12D2WIma+H4kPcDRzLt5jz2rq5gw32vYQKs ThtTPp5Lwvikk3FazThTnMSlu4dl3if4vX42/ec/MJlNbH3obfp9/QAkThgRcuTy2ca3uWykFWaw 81db6GrqJBAIkLVoPBM/OoWomGDsNZPYu2Y30z93+ruLhywA1Wt2M/XTecPft4iIiIiIiIiIiIiI iMhFxATktbe37wpXyV2/6ZwHsv7eteR+diYp07Vb88Os39/P2995nWmfmcHI/PRh7XvPX8vpau48 7R8giIiIiIiIiIiIiIiIiJxPnrQFYcurq0NPR37hxZfC1r/x+pUhnwsKCvKH/0WzQxAIXOgI5EIz W8zMv2ch+/5ehd/rH7Z+22vbaK9rI++LhcPWp4iIiIiIiIiIiIiIiMjFytDR0CLnkz3BwYJvLx7W PuOzEij8WtGw9ikiIiIiIiIiIiIiIiJysbpoEsGLHlx+oUMQEREREREREREREREREbksXFRHQ4uI iIiIiIiIiIiIiIiIyNApESwiIiIiIiIiIiIiIiIicplRIlhERERERERERERERERE5DKjRPD71t+7 lqbShgsdxrDZ83w5Jb/bbrh+pPlfbtfng4Zrfm01rbx652pa97WcsTwQCAx5DND9FRERERERERER ERERkfCsRioF/AHe/MbfyfmnmaTPyQRg7+oK2g+1MvtrRYYG2vR/36KlsgmT2YTZaiZtTiZ5txdi jjn3uej9r+yh6rkyAPq6fZgsZiw2CwDzvrmQEVNSznkM8uHgSHQwel4WjhGxp5W117RS9mQxRfcv uQCRiYiIiIiIiIiIiIiIyIeJoUSwyWIi57MzqXymlPTCTPp6fOx7pYqrHlgW1WD5X5pD5lXj6Grq pPjRzex/dQ+Trp86qMCjMWHFZCasmAzAtp9vZER2MhOum3LOx5UPH3uCg7w7Cs9Y1uvxhm1b9/ZB Dq0/gMk08I8lpt9WQNwo17kIU0RERERERERERERERC5zhhLBAOlzM6l+sZK6jTV0NXaQsWDMoJNU ztQ4UvPS8Lb1BL8L+ANUPV/G4XdqCADJU1OZcVsB1tgYQ+Xr713LzDvnsueFCprLGnCOjKPw61dE FWNft4/3/uvdM7aPNH5PSzdbfryB+d9eTNkTO2gqqSd+TAJF9y811P5EnfX3riVhXBKz7poX1TXt 7eil5Dfv0VzeiHOki7hRccS47IavL0DbgRaqni2l46iHpOxkZv3LPGxuu6Hyv33qaVb89mPBz7uf KcHf08f0zxcA0O/zs/O/36NlTzNdjR2YzGYciQ7yvjiHUbPS6WnpZufjW/DUtWO2mkmcMIKpn8kz fP8itY8UX7j5NVc0su/FSvq8fXQ3dTL9tgJKf78DV7qbBfctBmDjA2/SWd8BQPexLpb8ZAXurAQA vG09bHzgH3jbe/B1+lh39xoA4tJcwfVxcF01LZVNzL9nEWarmc6jHop/uZkrv3eN7q+B/iP9/o3c /3B8XT7KnyymcddRzFYzYxZPIPumHExmExD59x8pfhERERERERERERERkeEW1bnMubfOpPLPJRx6 cz+TP5Y7qAED/QE6DrdTv/0Io+dlBb+vfK6UYxVNLPrRR7jm4ZXEOGOoeLrEcDlA8WNbmHxjDlc/ /FHsCQ72rq6IKrbKZ0vP2t7I+D2t3Wz/xUbS52Sy7JHrKbh7QVTt/T4/nQ0deOraooobYOfjWzFb zFz7yxuY962F9LR0h87NwPiNJfUU/tsVXPurGzBbzJQ/tTOq8nCq11TS19PH1T/7KEsfug5LjJkl D60IJsGqnivDOdLFskdWcfXDK8koGhOSxIxkqO0jza+x5Ch5X5hNUnYye1/YzaIHr+V49TG6j3UB UHT/UpY9uoplj67CFm8P6dee4GDJQyvIu6OQ5KmpwXonkoT+Xj/7X91D/p1zMFsHfpJx6W4IDJSB 7m+k/mHov/9wdj6+FUxwzSPXs/DB5dTvOML+l6tC6oT7/RuJX0REREREREREREREZDhFlQhOyk6m v68f95hE7AmOkLJNP3iL9feuDflT/ofikDq7fv0er35pNW/+75cZMTmZ+LGJwbIDr+wh55Y8rA4r mCD7plzqt9UZLgfIuTmfhPFJ2Nx2MhaMwXO4PZrpkfvZmWdtb2T8npZuJt+Uy+j5WVjs1pD3xBpp b3VYWfboKq783tVRxe3r7KV+ax0zbp+NOcaMPd5Oal5aSB0j42ffkIMjKRaz1UzW4vE0FB+Jqjwc T10bI/PSMFlMuDLisbntwSQqgCM5lmMVjTTvbqS/v5+0OZnYT0moRlpfkdobEW5+7owE3FkJxKW7 GTUrHZvbjjPFSWdDR1RjnEnH4XaSJiZjsVvpPtZF2RM72P7zjXQ2dNDX7ftQ3N+h9g9D//2fja+z l6Nbasm9dRZmixmby8a0T8/g4Bv7QuqF+/0biV9ERERERERERERERGQ4GT4aGqD2rQMkTU6hpbIJ T10b7syEYNmJI3LDOfGO4IA/wMHXq9lw71qW/PQ6ej1efN0+dvxyS0h92/tH30YqP8FkOZnXtic6 6O/zRzO9s7Y3Or7VYSUld+Rp/RptP/CdLaqYAboaO7HF24mJO3PbaMY/wZ2ZgK+jd9DlH5Sal8bB 16tJzUujtfoYgf7AwK7X902+KReby07FH3fRcaSdtMIMcm7ODybTIq2vSO2jdbb5mTCd8sF0Wvlg dDZ04BwZBwHY8qMNFHxlAfFZCWx84B/Ah+P+DrV/GPrv/2y6Gjuxue3EOE/uYI5Lc9HVGPqPAM72 +zcav4iIiIiIiIiIiIiIyHAynAj2e/1UPltK0XeW0LirnvKndjL/nkWDGtRkMTF26URKfrcNX5cP m8uO1RFD0X1LiE1xnlY/Uvm5NtTxo2nv6/JhsVmCRwQb6j/ejq+jl36fH3OMZVji72rowBnm/a0f LDdbzfS2e4PvYA309YfUd412Y7aYqfxzCVZnDEX/vhTzKYk7k9nE+OXZjF+eTW9HL6W/3cauX7/H vG8tNBRvpPaR4ot2/oNhibHQ2+E97fsYZwx+bx/9/f30+/uxxdk4trsRz+GBI8I/TPf3bOs/Uv+R GL3/Zxo/NjWOXo+Xvm5f8DjrzoZOnKnG18dQ4xcREREREREREREREYmW4UzEvpcqSZ2ehmt0POOW TcJT20ZTacOgBg34A+x/pQrX6PiBXXYmGLdsErt+8x6+Lh8A3rYe2g4cH2gQqfxcG+r4Btv7vX2s u3sN7373jajCi012Ej82kaq/lkMAOus91L1TE/X4R7fU0u/z09fto/LZMsYsnmC43JXu5tCGA/T7 /NRvP0zthoMhbWve3E/WovHM/loR+V+aQ9wHkpC7ny7BU/t+4jPOhisznkAgYPgaRGofKT4j8x8q d2Y8nkNtdDcPHAnsbR9ICjtHueg46sFsMTP91lmU/H47rftayLk5H4vN8qG5v+HWf6T+IzFy/882 vs1lI21OJuVP7STQH8DX5aPyL6WMXWp8fQw1fhERERERERERERERkWgZ2hHsbeth38tVLPrhcmBg d93UT82g/KliFv1wOSaDR+SW/HYbZU8WgwkSJ4xg3v+5Klg27eY89q6uYMN9r2ECrE4bUz6eS8L4 JEPl59pQxzfS3mQ140xxDurI2MKvFVH82BbWfvkFEsYlkbVwHN0t3VGN7xwZx/pvv0Zvu5fMK8cy ceWUkDHClU+/rYCdj22ldv0BRs/LIueWfNoOnkxEjp6fxeYH17P7mRIsMRYsDivJU1KZ8YUCzDEW kiaNoPSJHXQ3dxHoD+BKd5H3xTmG5x+pfaT4jMx/qJwjXUy7JZ93/uN1zDYLzhQn8+9ZTNxIFz3H u/G29TByZjojZ6af1vbDcH/Drf9I/Udi5P6HG3/Wl+dS9kQx6/51DWaLmayF45m4cmrEcYcrfhER ERERERERERERkWiZgLz29vZd4Sq56zedp3DkcvXOf7xB/pcKg++V7jnezdv3v07+lwoZmX964vPD pqH4KAderWLON67CYrfQ39dPb7t30O84Pt/O9f291NfPpR6/iIiIiIiIiIiIiIgML0/agrDl1dXV IZ9fePGlsPVvvH5lyOeCgoJ8w+8IFhmsgD9AZ4OHrqYu7ImxmC0mWiqbMMeYSZyYfKHDuyiMmpWO yQxbfrIBs8VMoD/AxJVTLolE8Lm+v5f6+rnU4xcRERERERERERERkUuTdgTLedFe08r+V/fQWe/B YreSOHEE46/Nxp7guNChyTA41/f3Ul8/l3r8IiIiIiIiIiIiIiIyvLQjWC4b8WMTmfnPcy90GHKO nOv7e6mvn0s9fhERERERERERERERufSYL3QAIiIiIiIiIiIiIiIiIiIyvJQIFhERERERERERERER ERG5zCgRLCIiIiIiIiIiIiIiIiJymbnkEsFtNa28eudqWve1BL/ze/2su3sN6+5ew4u3PENTacMF jPDidqbrJyIiIiIiIiIiIiIiIiKXF6uRSgF/gDe/8Xdy/mkm6XMyAdi7uoL2Q63M/lpRxPa9Hi+v 3PE8eV8sZPy12QDseGQTLXuOcc0vVkYVsCPRweh5WThGxAa/s9gtLHt0FQDr710bVX/nQ/32w+z+ 0y6W/PS64Hd+r5+Xb/8r1/5yFfYEx3mL5UzX72LQuq+Fij/txHO4HWtsDDk355M+N9Nwe29bD/tf 2UP9e3U4kp0s+PbiqMaP1L7f30/pb7fTVNZAoD9A+txMpt86C0xRDSMiIiIiIiIiIiIiIiJyXhja EWyymMj57EwqnymFAPR1+9j3ShVTP5NneCCb286RTbUA9Pf1c7x6cDtS7QkO8u4oxJF0cSUyw0md kUZnQwfdx7qC3zVXNJAwLvG8JoHh4rx+gUCAqr+WkXPLTJb/6kbyvjCb7b/YSM/xbsN9mK1mkiaO IDUvbVAxRGp/cO1eeo53s/S/rmPJQyto29/C4Y01gxpLRERERERERERERERE5FwztCMYIH1uJtUv VlK3sYauxg4yFowhbpTL8EAxcTa87T1423po3deCa7QbT117sNxT28aeFypo3d+Cr6OXUbNGk/+l QswxFgA2PvAmnfUdAHQf62LJT1bgzkowNHZzRSP7Xqykz9tHd1Mn028roPT3O3Clu1lw32JD46+/ dy0z75zLnhcqaC5rwDkyjsKvX2HoGlhsFlJnpNG48yhjr54IQOPOo6TNzgjWCfgDVD1fxuF3aggA yVNTmXFbAdbYGAB6WrrZ8uMNzP/2Ysqe2EFTST3xYxIoun9psHzn41vw1LVjtppJnDCCqZ/JC8YX 6fr5unyUP1lM466jmK1mxiyeQPZNOZjMJsPzD/gDrL93LQnjkph11zxD9wbAZDIx75sLg59T89Jw ZyXSfqjVcMI6Js5G2pxM+nr68Bxuj9wgyva9nl5GTE3FbDFjtpgZmZ9OT2tP1OOIiIiIiIiIiIiI iIiInA9RvSM499aZVP65hENv7mfyx3KjGqivx8fouVkc3VrHkc21jMxPDynvrPeQUTSGJQ+tYNkj q/DUtXFwXXWwvOj+pSx7dBXLHl2FLd4e1dgAjSVHyfvCbJKyk9n7wm4WPXgtx6uPBXfpRhofoPix LUy+MYerH/4o9gQHe1dXGB4/rTCDhp1HT8azqz4kEVz5XCnHKppY9KOPcM3DK4lxxlDxdElIHz2t 3Wz/xUbS52Sy7JHrKbh7QbCs6rkynCNdLHtkFVc/vJKMojHBJDJEvn47H98KJrjmketZ+OBy6ncc Yf/LVVHN3+/z09nQgaeuzfB1OZNAf4Dupg5co+OH1M9wylw4jprXq6ldfwBvu5eGnUcYPS/rQocl IiIiIiIiIiIiIiIickaGG15SFAAAIABJREFUdwQDJGUn09/XT8KEEacdabzpB2/R2+EN+S4lZyS5 t84CoN/XT+ZVYyn9nx1423qYsGIy+/5+MtGY9v67h/u6fXQc8RCX7uZ49bFBTepM3BkJuLMSiEt3 485MwOa240xx0tnQQWyy09D4OTfnkzA+CYCMBWM4+Po+w/MfVTCa8j8UE/AH6G7pwt/bR/zYxGDd A6/sYcF9i7E6Bm5J9k25rL/nVfJunx2s09PSzeyvFJGSOxIAi/3k7XMkx3Jk4yGadzcyYkpKcD5G +Dp7ObqllhW/+zhmixmby8a0T8+g5PfbmbhyqqH5A1gdVpY9ugqr3WJ47DPZ91IlKdNH4UyNG1I/ w8mZ4iRxwghq3tjHzse3MmHFZGJTnBc6LBEREREREREREREREZEziioRXPvWAZImp9BS2YSnrg13 5smjhU8csRyOa3Q8ve1eRs5Mh/ePHD6hp6Wbkt9vx9/jI3FCMiazib6uvmjCM8TEKeOaTv63kfFN lpMbqO2JDvr7/MHPkebvSIolLt1Ny95mPHVtIbuBez1efN0+dvxyS0gbmyt0567VYQ0mgT9o8k25 2Fx2Kv64i44j7aQVZpBzcz6OEZGPVu5q7MTmthPjPLmDOC7NRVdjR0i9cPM/GbMt4njhNJc3cPD1 fVz1/WuG1M9w2/TgeiaumEzanEw66z3s+vV77Pt7FRM/OuVChyYiIiIiIiIiIiIiIiJyGsOJYL/X T+WzpRR9ZwmNu+opf2on8+9ZFPWAhV8vIsZlDx7JfMK2n7/LhBVTGD1/4Ljd2vUHOLq1Lur+TSYT gf7+qNsN1/jhpBVm0FRSj6e2jbHXTAx+b3PZsTpiKLpvyaB3mZrMJsYvz2b88mx6O3op/e02dv36 PeZ9a2HEtrGpcfR6vPR1+4LHSXc2dOJMNf4O6BN8XT4sNgtma1SnjgPQuq+FHY9uZv63FmFPdJyx zlD6H2z73o5e2mtag7us49Lc5P7TLHb+91YlgkVEREREREREREREROSiZDgbtu+lSlKnp+EaHc+4 ZZPw1LbRVNoQ9YBxae4z7hrtaurE9P4u4c6jntPez2tUbGocDcVHITCQwDNquMYPJ212Bg3FRzhe fYyUnFEnC0wwbtkkdv3mPXxdPgC8bT20HThuuO/dT5fgqR14N68tzoYrM55AIGCorc1lI21OJuVP 7STQH8DX5aPyL6WMXTrB+OQAv7ePdXev4d3vvhFVO4CWPc1s/enbzPnGlSFHZg9X/0Npb4uzYXVY qd92mEAgQMAfoGHnEWJTLp6jq0VEREREREREREREREROZWhHsLeth30vV7Hoh8sBMFvNTP3UDMqf KmbRD5djMpki9BBZ3u2F7Hm+nN3PlBCflcC4ZZMGtSN3ysdy2fbwu7x2199InpbK7K8Wndfxw0kY l4S3tYfEScmYY0Jz8NNuzmPv6go23PcaJsDqtDHl47nBd/JGkjRpBKVP7KC7uYtAfwBXuou8L84x HNusL8+l7Ili1v3rGswWM1kLx4e8H9gIk9WMM8VJXLo7qnZ+r59N//kPTGYTWx96m37fwI7uxAkj Qo7cDtf/tp9v5PieZvp6+oIJ39hkJ1eecsT0oNubYN63FlL2ZDFlfyiGACROSCL/i4VRzVNERERE RERERERERETkfDEBee3t7bvCVXLXbzpP4YiIiIiIiIiIiIiIiIiIXN48aQvClldXh55e/MKLL4Wt f+P1K0M+FxQU5A/uRasiIiIiIiIiIiIiIiIiInLRUiJYREREREREREREREREROQyo0SwiIiIiIiI iIiIiIiIiMhlRolgEREREREREREREREREZHLjBLBIiIiIiIiIiIiIiIiIiKXGSWCRURERERERERE REREREQuM5dtInjP8+WU/G77hQ5jWPi9ftbdvYZ1d6/hxVueoam04ax122paefXO1bTuaxnUWIFA YLBhioiIiIiIiIiIiIiIiMhFwmq04tafvM2xyiasDiuBQADX6Himf76A+KyEcxmfABa7hWWPrgJg /b1rw9Z1JDoYPS8Lx4jYqMdpr2ml7Mliiu5fMqg4RUREREREREREREREROTiYDgRDJDz2XzGLp0I ATjw2l62P/wuS3563bmKTQbBnuAg747CQbXt9XiHORoRERERERERERERERERuRCiSgQHmWD0vCxK /2c7gUAAk8lET0s3W368gfnfXkzZEztoKqknfkwCRfcvBSDgD1D1fBmH36khACRPTWXGbQVYY2OC 3da9W0P133bjbevBnuhg6idnkFaYYah9b0cvJb95j+byRpwjXcSNiiPGZQ/2Han9+nvXMvPOuex5 oYLmsgacI+Mo/PoVxI1yDUt8J+qsv3ctCeOSmHXXvEFd+rPZ+MCbdNZ3ANB9rIslP1mB+5Td2j0t 3ex8fAueunbMVjOJE0Yw9TN5xI1y4W3rYeMD/8Db3oOv08e6u9cAEJfmCt4/ERERERERERERERER Ebl0DCoRHAgEqPnHPpImJWMymYLf97R2s/0XGxl3zSRm3jkHX6cvWFb5XCktlc0s+tFHsNqtlD25 g4qnS8i7fTYAhzcdYvefdjH3/1xFwrgkOg6303bwuOH2Ox/fitVm4dpf3oCv28e2n70TkgiO1B6g +LEtzPryPPK/WMiORzezd3UFM788d1jiA/D7/HQ2dGC2Dv+rmU9N2L565+rTyqueK8M50sX8exYD UL+tLpiktic4WPLQCo5sqeXga9U6GlpERERERERERERERETkEhdVRrLij7tYd/ca1t29htZ9Lcz+ alFIeU9LN5NvymX0/CwsdmvIe2oPvLKHnFvysDqsYILsm3Kp31YXLN/3UhXTbsknYVwSAK6MeDKu GGuova+zl/qtdcy4fTbmGDP2eDupeWkhsUUaHyDn5nwSxidhc9vJWDAGz+H2YYnvBKvDyrJHV3Hl 9642ftGHiSM5lmMVjTTvbqS/v5+0OZnY4+2RG4qIiIiIiIiIiIiIiIjIJWdw7wg+W2cOKym5I0/7 vtfjxdftY8cvt4R8bztlx25nvYf4zIQPNjXUvquxE1u8nZg426Dan2CynMyL2xMd9Pf5hyW+0O/O HOO5NvmmXGwuOxV/3EXHkXbSCjPIuTk/JFkvIiIiIiIiIiIiIiIiIpeHwb0jOEo2lx2rI4ai+5YQ m+I8Yx1nahwdR9qJH5sYdXtbvB1fRy/9Pj/mGMugxo9kKPGdytflw2KzDPp4aJPJRKC/P/p2ZhPj l2czfnk2vR29lP52G7t+/R7zvrUwWMcSY6G3wzuouERERERERERERERERETk4jH8L6s9ExOMWzaJ Xb95D1/XwHuDvW09tB04+Y7dcddOouLpEjreP465q6mT6jW7DbWPTXYSPzaRqr+WQ2Bg927dOzVR jR/JUOI7we/tY93da3j3u28YHveDYlPjaCg+CgHo7eg13G730yV4atsAsMXZcGXGEwgEQuq4M+Px HGqju7lrYA7tSgqLiIiIiIiIiIiIiIiIXIrOy45ggGk357F3dQUb7nsNE2B12pjy8VwSxg+8c3fs 0okE/AG2PvQ2fd4+7PEOsm/KMdy+8GtFFD+2hbVffoGEcUlkLRxHd0u34faRDDU+AJPVjDPFSVy6 e9DXccrHctn28Lu8dtffSJ6Wetp7ms8madIISp/YQXdzF4H+AK50F3lfnBNSxznSxbRb8nnnP17H bLPgTHEy/57FmCymQccrIiIiIiIiIiIiIiIiIuefCchrb2/fFa6Su37TeQpHRERERERERERERERE ROTy5klbELa8uro65PMLL74Utv6N168M+VxQUJB/fo6GFhERERERERERERERERGR80aJYBERERER ERERERERERGRy4wSwSIiIiIiIiIiIiIiIiIilxklgkVERERERERERERERERELjNKBIuIiIiIiIiI iIiIiIiIXGaUCBYRERERERERERERERERucwMeyK4raaVV+9cTeu+lkG1DwQCwxzRme15vpyS320/ L2MNx/jr711LU2nDoMsvdcM1v0jrc7jWn+6viIiIiIiIiIiIiIiIXEhWoxWbShuo+NNOFj24PGw9 R6KD0fOycIyIjTqY9ppWyp4spuj+JVG33fzD9Rzfe4y+bh8mixmLzcK4ZZOY9pm8qPuSy1e49TmU 9SciIiIiIiIiIiIiIiJyMTGcCDbKnuAg747CQbXt9XgHPe78exYBsO3nGxmRncyE66YMuq/hcOgf +zHbLGReMfaCxiGhwq3Poaw/ubzteb6cEVNSSckdeaFDERERERERERERERERMWTYEsEbH3iTzvoO ALqPdbHkJytwZyUEy3tautn5+BY8de2YrWYSJ4xg6mfyiBvlwtvWw8YH/oG3vQdfp491d68BIC7N RdH9S4clvt6OXkp+8x7N5Y04R7qIGxVHjMseUifgD7D+3rUkjEti1l3zBjVOz/Fudj6+lZg4G3m3 zzY8fsAfoOr5Mg6/U0MASJ6ayozbCrDGxgTrtB1ooerZUjqOekjKTmbWv8zD5rYbKv/bp55mxW8/ Fvy8+5kS/D19TP98AQD9Pj87//s9WvY009XYgclsxpHoIO+Lcxg1Kz3s/TN0XSK0jxRfuPk1VzSy 78VK+rx9dDd1Mv22Akp/vwNXupsF9y0Gwq/P4Vh/H/b7G6n/9feuZeadc9nzQgXNZQ04R8ZR+PUr orr/4fi6fJQ/WUzjrqOYrWbGLJ5A9k05mMwmYGD9bfnxBuZ/ezFlT+ygqaSe+DEJwfsbKf6MBWMo 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 4eLiIoxYXbJkiTDTw8vGjx+PS5cuwcXFRWLGgcmTJ6Nt27aYPn06PDw8sHDhQqSlpUkcq0z5ffPN N3Bzc8PmzZtx7do1uLm5CfcHIyMjfPDBB1i1ahVcXFwwa9YsdOzYUXiprYK0v08LCgrw5ZdfIjc3 F4sXLxZefHh52Y2YmBhMnz4dLi4uCAkJwapVq1TayTp79mz8+OOPmDhxIgIDA6tdx6WVDxERERER EZEGAIekpKRrNTn93OsoOTkZEyZMwJw5czBw4EAUFxfju+++wy+//IKFCxeiX79+tZ3F11p2djac nZ1hbW2N3bt313Z26hzWT+UwfgSUr+fq6uoKU1NT7Nq1q7azQ//F9qleNfX5XFvti/VHdYqLizFz 5kxMmjQJ7733nsrTLywsxIgRI/Drr78Ka0KLFRwcjJSUFMydO1fl+aop6o7v66wulB8RERERERHR m+bIkSNYu3ZtJ5VPDf2mSk1NRVFREU6fPg0zMzNkZ2fj/PnzMDQ0FEbGkXyqGn1Fklg/lcP4UUhI iDASbcaMGbWdHXoJ22fNUOfnc222L9Yf1dHW1saKFSvg7+8PBwcHYd1oVQkJCUHv3r0V7gR+9OgR YmNjsWDBApXmp6apO76vq7pSfkRERERERERvKg0ADk8TYq7dvB9X23mpVaWlpQgMDMSxY8eQkZEB Y2NjtGvXDuPHj6+0xhVVVjHiqHnz5ggKCqrt7NQ5rJ/KYfz+t+Xn52PIkCEwMTHBiBEjMHbs2NrO Er2E7VO91P35XNvti/XnzXDx4kXcvHkTHh4ewnqoRERERERERESkPlHnwuH9lW8nDQAOL6L/vvbd ofNIShO/ViEREREREREREREREREREb0+rBoaYdLAd2DSeVh5R3B2dvY1WQcYJZ+roawRERERERER EREREREREdVtOZbdZW5Xtn9Wo9WATpybjYiIiIiIiIiIiIiIiIiojmFHMBERERERERERERERERFR HcOOYCIiIiIiIiIiIiIiIiKiOoYdwUREREREREREREREREREdQw7gomIiIiIiIiIiIiIiIiI6hh2 BBMRERERERERERERERER1THsCCYiIiIiIiIiIiIiIiIiqmPYEUxEREREREREREREREREVMewI5iI iIiIiIiIiIiIiIiIqI5hRzARERERERERERERERERUR3DjmAiIiIiIiIiIiIiIiIiojqGHcFERERE RERERERERERERHUMO4KJiIiIiIiIiIiIiIiIiOoYdgQTEREREREREREREREREdUx7AgmIiIiIiIi IiIiIiIiIqpj2BFMRERERERERERERERERFTHaABwqO1MEBERERERERERERERERGR6vwfA5/r03kc t6UAAAAASUVORK5CYII= --=-=-= Content-Type: image/png Content-Disposition: attachment; filename="Screenshot from 2022-07-18 13-37-41.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAB4IAAAPzCAYAAABSrsGHAAAABHNCSVQICAgIfAhkiAAAABl0RVh0 U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAudEVYdENyZWF0aW9uIFRpbWUATW9uIDE4 IEp1bCAyMDIyIDAxOjM3OjQxIFBNIENFU1Sm3xKlAAAgAElEQVR4nOzdd3gUxR/H8felJ0AKBAgk lNC79N6lKwiIVEGaVEEBC0iVJiBFaVKlCagoYEeqIIjSe+8pEAg1QHru90fkIKTcpR2B3+f1PPvo 3e7MfGdmdy7H3M4agOqIiIiIiIiIiIiIiIiIiMgLww4gPCxs17MOREREREREREREREREREREUs/R yamGHcC1QL9nHYuIiIiIiIiIiIiIiIiIiKQROwCMxmcchoiIiIiIiIiIiIiIiIiIpBU7AE0Di4iI iIiIiIiIiIiIiIi8OGyedQAiIiIiIiIiIiIiIiIiIpK2NBEsIiIiIiIiIiIiIiIiIvKCiX1GsBaH FhERERERERERERERERF5YcROBGseWERERERERERERERERETkhWEHmgcWEREREREREREREREREXmR 6BnBIiIiIiIiIiIiIiIiIiIvGD0jWERERERERERERERERETkBaNnBIuIiIiIiIiIiIiIiIiIvGC0 NLSIiIiIiLzwgm/eIvjmrWcdhoiIiIiIiIiI1diBbggWEREREZHnR/tuvXB2cmTJl7NMr12zZGbB zOkJHh8aGkbfwR9iYzCwbP4cHB0drBkuB48cZceu3Vzx8ycg8Cru7m74eOemeuVK1KtdE4PBYNV4 ErN7z14mz5hF+zataP96K4vSPN0XAL9t3MyPv24gNDSUerVr0u3NDvHSJNVf1jB28lQOHDoS7/3P J40nf768ANy7F8Lyb77jzNlzXLt+g6we7lSrXJG3Orbn3r0Qft+0hX/37edqUBAO9g4UL1qYzu3b 4p07FxB73q387nv2HjjIgwcPKVTQl+6dO5HXx9uUv7k80kJGaG8RERERERF5NvSMYBEREREReU49 /T0m4e81jo725MvjjcFgg4ODXaLHpbX7Dx6wcOkKtu/cTb48PhQuVJBqlSsSfPMWp86cZea8hWzY vJVhQ97Fw93NKjFZLrltFHv83gMHWbBkOT65c/FSpQp45cyeRF7P7ntoeHg4AJXKl8PJydH0fqZM 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 D5vTbeXPrcSkZL06bYk2bvtZBoPUuHZ1zRr9kkoW93XYOe6X/J7uOvfjKkkZAa//b+e/24M8/9kz fwMAAAAAAAD4dzt0+IiSU1IyfZ6ckqLDR46o9mOPZUrLs0Cwm9Go2tUrKy4hUcfPWgZZ09LS9fai dZo26kXVeriitu/5Q+0HTdLp7StUwq+o/IoW0s19n1nk6Thkirq3a+aw+rm6SJX9E5SQYtDFSPdM 6Zv/KqQbcUat6H1OKSaD3tgUpB9PFFTzyjF2lV+tRII+H3jK/PfkLwMdVnc4hzWbv9eqTdvl4uIi N6Or5o0bpPKliufZ+a/fjLZ5jF/RQnr3zSF5UBvnVL5UCa2YPjLT54vWblHYtUgd/WapkpJT1Pal idrw9Q51fbqpJOmHX/5SyKt9VPeRKjp+9qJqPfuyaj1cSU3r1JAkvdbveXNZFVsG58m15NS5S+Eq E+QvSUr/28LFmzG3NKDr01owYXCWefcdPqnBkxZq0/uTVKNyWZ0Kvazo2Dhzuq32eWHUDHV+qrG2 LJmiE+cuqWWfMfr1k/kq4VfUrvy5FfL+eh09fUH7P39XBQt46eOvd2jvoZP/ikAw7niQ5z975m8A AAAAAAAA/263t4POSnhE1ml5tjV0YZ8Cat+inmo9XClzJVwM2vz+JNWuXkkGg0EtG9TUwxVL69CJ c1mW9ck3O+Xhnk+dWjdyWP28PUxqUD5Wlf2zXjodk+Cq6oEJMrqky9MtTbVLxykyznFx9OZzH1JM oqv57+V7fPXeDj+Hlf9vl5iUrN6vv6NKrV6UW5U28qzeTmWb9dI3O/dKki6HX1etji/rWmS0Xhg1 Q/71uqhF7zHm/KkmkyYtXK3KrfqqUqsX9eLY2boVl2B3+dG34tRv3FyVavKCyj/RR28vWieTKc2c 39r5j5w6r1JNXrDYtjMqJlb+9booMSlZkrR4/Vfaunu/vvzgLX27LERzxg5Q8JhZFm0QExuvzsNC VOzx51W74ys6cyHMruuzdf6IG1Gq0Xageoycrt37j5i3Yb27/Vr0HmP+3FjlKR05dd6ibrU7vqID R05nWz97+q9Nv/Eq06ynKrfqq+6vTtfZi2GyV276x5763W83om6p4WPV5GY0qkB+Tz3Z6DGFRUSa 0ye+3EN1H6kiSXqoXEnVe7SKIqNvObQOB46cVqNuI+Vfr4vaD5pkEVgyVHpSN6Lu/OhlwryVGjF1 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 XHHY9dlK//bbb3Xp0iU1bNhQPj4+2r59u5YvX57pPCEhIdq4caNKlCihMmXKyGg0qkWLFnJ3d7cI nO3Zs0dFixZV9erV7b4GR0hLS9OFCxf0yy+/qHHjxubPZ82aJYPBoLVr12rJkiX69ddf9dlnn0nK GFvLli3TsGHDVL16da1fv17r16/P8yDwjRs3FBcXZzHv3Iu0tDRdvXrVvCoxLS1N165dU8mSJfXR Rx9p9+7dKlu2rHmbWHvKszd/w4YNtXv37lzV/36xt32jo6P19ddfW+x4kJCQoMaNG2vXrl3asWOH Hn/88Uz5du3apTp16qhu3brauXOnw+tvzZNPPqnNmzdr+fLl97Syfe/evRo6dKiqVKmidevW6f33 39fx48cVERFhV/rly5fVrFkzLVu2TOvXr1doaGimVaaRkZEKCQlRw4YNtX79enNAvkyZMipevLj2 7t1rPnbXrl2qX7++OQgsZf/8tlde9M/9HP/p6em6efOmNm/erJiYGNWpU8ci3Vb72Mp/+5gPP/ww 01bRAAAAAAAAAHA/OHxFsKenpz766COLd0NKUtu2bbVhwwbt2LFDo0aNUmRkpHbv3q3o6Gjze2q/ +eYb/fLLL0pOTtaBAwe0cuVKderUybxq5vXXX1dMTIxFuf/5z380aNAgh9W/ePHimjdvntLS0tSm TRsdOXIk21U9dzOZTDp9+rTKly+vTp06yd3dXXPmzFGFChUUFBRk17mbNm2qQoUKqUqVKtq6dau2 b9+u/Pnza8SIEeaVuZcuXVK3bt2UmJgog8GggQMHqnPnzuYyduzYodWrV0uSevfureLFi0uSKlSo oPr162vPnj3q0KGDfH195enpaQ4+28pvr5dfflnLli2Tj4+PWrZsqWnTpunixYvmYHh27Xv58mUd OXJEFStWVEhIiJKSktS2bVt98cUXGjRokPmdqdu2bdOnn34qV1dX1alTx/xF++0VvH8XEBBgfvfk 7RXXUVFRaty4sXr27JlpnN7r9dlKr1evnkaMGKHChQvLzc1Np0+fVv/+/bV///5M57h8+bLWrFkj f39/82deXl5q0qSJtm3bpkuXLkmSLl68qE6dOplX+OWFOXPmaOHChYqLi9Ozzz6rcuXKScpYXbhz 50598cUXMhqN8vb2VnBwsBYuXPhAvc/26tWr5hXoufHxxx/r0UcfNfdRUlKSjEajXFxc9Oeffyoh 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 ySI9jAEiene2Y98Rad/i3PsjZ3xPJyjRcVAQzlxQYsxLVkx73X+SNJe6bjicBQyV7YhUnexwApM/ M+CbH3XIzBbQ8f4czBqb7anq9ef3fWqMfj8AR04ppb2on7V5fclg9mI9Js02IDTEjTdfsuLjhToI gjTPbvbVDzpM/MSAbKuA5g2c+OWrDL9LFW/bo8YDfYLzvR5oED3j63QBI6YG4Lt1WgQaRLz+nBWD e9tknS+nf398jb9SKWLWN3osWqnFuUQlGsc68cn4bMTV9/78/XVChadeNSLM5MbaL8wICRI97236 PANW/KLBqQQlwkJE9Opox5QR0vx2ulCi/v3Fr9WI2HFAjTEfGHDwuAo6rYj773biwzezUC1a3vzx x9f9uxXtgPSFj9gOJjzzuB0LppbOF2CIiIiIiIiIiIiIiOj2yKzQymd7fHx8ifqPi4trUyqJ4NKS ZRFQ/YFQVIhw48jatFtyTQBISFIi9tEQzH0nGwO62+BwAq9PC8DsxXosmZGJ3l1Kd6/iO9npBCXq PGLCpxOzMKR3/opFIip9NruAh/oH4fgZFY5vSJP9BQkiIiIiIiIiIiIiIvpnuhWJ4FuyNLQc0+bp sXKjFinpAmaNtfg/oRRduKSAPUfA9+s0qBjhRkq6gHXbNAg2injgxvK2BOw6qMKgsUZEhrnx7ONM jhPdKqkZAhQKYO38DCaBiYiIiIiIiIiIiIhIln9EIjjbKmD8rABEhLoxZYQFfZ64tUnGe5s58OZL Viz+WYvOLwUh3ORGyyZOjB+SKXsf4H+D+PNKVK3owk9zsmEK9r93LxGVjkqRbmz/NuN2h0FERERE RERERERERHeQf9TS0ERERERERERERERERERE5d2tWBpaUaIeiIiIiIiIiIiIiIiIiIjoH4eJYCIi IiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIi IiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIi IiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIi IiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKi coaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJ YCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKicoaJYCIiIiIiIiIiIiIiIiKickZ1uwMo MlGU/isItzeO4rrT4y8mR2Y2/hgzC6LLDcul6+j40ywICn4PgYiIiIiIiIiIiIiIiKgs3LJEsC05 DZuem4iAiuEQRRHhje9CbP8noA7UF6mfQ7OXIbrd3QhrWLuMIi1c6tEzOPL598gxZyGgUiTqv/gk gmIqF6mPsoz/6p4jOP3tOmReuIzaT3dErV6PeLW7bHYcW7ASqUfPQHS6UKFNE8T26yw7KX103nJc 3X0YAOB2OOHKceDR7z6Qda7aGIC2n41FRvwFHP70v8VKAl/YsAMXf90Jy9VUhNaviaaj+kOhypvC 5oQknPxmFSxXU6ANMaLJ6/2gCzfJPt9fuz/+xv/S9v04++MmiG43AqtWRMMhT0Ol18rqWxRFJKza isRNu+G02BAUUxn1BnWHPjK0VPqXE785IQmHP/0vXPYcaIONqNPnMZhia8ju3x9/96+s24mIiIiI iIiIiIiIiMoT2dm408vWI+Xw6WJfKONMIiLi6uKBeRPQds5YiC4XDs5cWOR+kg+eQHCtKsWOo7hE lxt7J81F3YFP4KFFUxDbvzMSN+8pcj9lGb+xWkXUfb4bDFFhCIqJ9mpzO5zYMepDBNWojPs/ewtt 546D1hQEV45Ddv/1X+qJ9l+9g/ZfvYPGw/sU631kxF9EcK2qRT4v9Wg8Uo+dwT3vDsWDX02CPTUD l7bu87RbrqbgwNQFuKtvZ7T9fBwqP9QSh+d8J/t8f+1y+Br/1CPxOPfzFrSc9iru+2QM9BEmnFq6 VnbfbocTosuNNjNHot38iVAF6HHq23Wl1r+/+AHgzw++QWy/zrh/9puIefIhHJ33Q5H6B4CsxKuw p2fme93f/SvrdiIiIiIiIiIiIiIiovJGdrljdPsW+OujJQiKiUbdAU9AoVEX6UIZZy4i+Eb1rEKl Qv2Xe+GXHq8jx5wNTVAAAODirzulikaXGxVaNUbKkXg0H/cCtCFG7Bo7G7bkdNhSzdgxciYAQKlW o81HoyDcqGi9tvcITn/3C3IysmCoEIamIwdAExzoFUfC6m2IX74RD8wdD5VBJzt+R7YFbocTYY3r AABMdWNgqhvjdUxJ4y8pQ1QYDFFhsKeZEVzTO0l7ft3viGgSi2qd7pVeEATU6PJAsa+VHn/B6xrx 3/0Cp82O2P5dAEgVrBu6v4ZH/vs+lFqN57iM+AsIrl2tyNcLrV8LofVreX4OrlUFTqs97/rfb0Tt ZzoiqKY0x6Lbt/BKVPo731+7HL7GP2HtdtTp87inQjem24PYMXIG6g3q7n1cIfNTqVEjpvuDnp9D aldF+qnzpda/v/gBICc9E6ENpDEyVokqcjU/ACRu2g1T3RhEtWjg9bq/+1fW7URERERERERERERE ROWN7IpgQ1QYWk0bhoBKEdgxcqZXEkoO85lETxIGkBJbuohQWK+lAAAu/roLCWu2o+XUYXjgiwlQ BeqRlXgFWlMQIAhoOXUYavfuhAqtGqHtZ2PR9rOxuHfWaE8S9equQzgy9wc0e2sQ2n0xAUE1onFy yZp8cVz/8zgUSmWRE9maoECE1q+JP9//Bo4sS772ksZfWuxpZgCQrnuThLXbUfG+OJz6dh32TZmP hNXbSnQdc/xFr2Sh+Vyi18+Wy8nQhgZ7JYEBqSI4pBgVwTcTRRHJf55EaEMpKSm63bi6+zAq3tsU ib/twsVfd0njKkht/s4varsvhY2/LTkdKl3eWIguF5zZ1nzn+5ufjsxsXNl1CAmrtyGma/tS77+w +AEgqmVjHPp4KZwWG059ux7VOt1XYB9F5e/+lXU7ERERERERERERERFReVS0jVoFAdUfb4u4N5/H vne/QOb5y7JPzThzMd9+ujkZZujCQuB2unBy8WrEjR7oSUCF1ovxVBDnMp+5WGClIgAcnb8CDYc8 BV1oMCAIiH7gbmTEX8x3XPOxL6Ldl29DoVLKjt1z7vgXodRpsGXQ20g9Gu95vTTiLy3ms0leCXdA SmzaUzNwft3viLqnIeoO6ILz6/+HS78fKPZ1/r7Ec8ZZ70S/+Vwigmp4Ly8sutzIungFgdUqFvu6 AHDm+40Iia2OoOpS/7bkdOgjTFCoVbiy+zCcFivcOQ4otZoC9yL++/lFbfeloPEHgJC7quPsys2w pWYg5dAp/DVrCfQRofmO8zU/M+Iv4Pfh7+PIZ/9FszcHwVi9Uqn27yt+d44DCpUS9owsbHx2DPRR oajQqrHPsbjZgekL8Mfoj5C4aTdOfPUT/hj9kWdpa3/3r6zbiYiIiIiIiIiIiIiIyiPZS0PnsqWk 4+jn36NCq8YIqBgu6xxHthU55iwEVMg73pacBohS5aE5IQkaYwACoiM97RnxF2Gs8bdE6tkkr+Vx c+WYs2FLTsfJRatxctFqz+shd1XPd6ygLH7iR6nVoMmIfri66xB2j/9MWvZYo0ZW4pUSxV+apASs 93VtyenQBBvRcMjTUKilW1710dZIP3EOle6LK/I1HNlW2DMyEVApAoCUJLSnZnjdX/O5pHyJ1MyL lxEQHVmsJHyupK17cXXvEbScMtTzmj0907NMcfOxLwAAru8/XuBexAWdX5R2fwoafwC4q89jOLVs PY589h1M9WIQ/cDduLbvaL7jfM3P4FpV0X7BJJgTkrB7wmdo98UET2VvafTvK/5dY2ej7nNdYaob g5TDp7F/6peo1uHefEuvFyZuzPMAgBMLV+VbGtrf/SvrdiIiIiIiIiIiIiIiovKoSIngxE27cebH 39DgpZ4Ia1RH9nnmszeSSzctg3zmh99Q/fG2AADb9TRoQrwTShnxFxDe+C6v1zIvXEZg5ah8/Tst VujCgnHvrNF+Y3E7nJ5kaFGIbrenejCqZSMYIsNgPpsIU2yNEsdfmsznkhDZvL7Xa+pAPeAWvd63 y5YDXbipWNdI+euUtJ/ujfuZlXgVhooRnp9FlxvJf55EzSe9k97mMwUnGeVK2rwHZ3/egpZThnot Oa01BcGWnO517MVfd6Lqo61lnS+3XY6Cxh8AlDot6g7s6vl519jZqPNsx3zHyZmfQdWjoQsPgflc kufLDqXVf0HxW66mwGXP8eyJHdawNiq2aYLkv06i0v3NfMYqh7/7V9btRERERERERERERERE5ZHs 8tiTS9Yg5fBptJnxepGSwIC0LHTwjeVmXfYcnF62HtcPnkDNno8AAAwVI5Bx+iKs11Ihut1IWL0N SVv25UsaaoICkXE2ERBFZJzJW/ZZHxUGt9OF6weOA5CStufX/Q5XjsPr/ITV27C+22vITrpapPhT Dp3CrrdmS/uniiKSD56APSMTxqoVSyX+XMkHT2DLC5NgPptYpPhuZj6bmG8JbpVeB114CK7uOQIA sF5PQ+Km3Yh+oLmsPhPWbEfCmm0QRRGOzGycWroW1Trd62l3O11wZFogutywpaTj4EeLkXXxCow1 8i+t7LLbAUhV3EVxduVmJKz9HS2nDoM60ODVpo8wAQoBaSfOAQASN++B02JF5E1Vp77Ol9MuV0Hj b0tOQ9K2fQCksTr25Y/QBAVIyfSbFDY/L/9+AEe/WAGXze6Zf5bLyQisWqFU+vcXv8YYAFtKOmwp GQAAR5YFaScS8i39LUdovRgYKoR5vebv/pV1OxERERERERERERERUXkkAGhtNpt3+DrIeGUn7Glm z/63RXVw5iJc23cUmqAAKNRqhDWqjdh+naHUaT3HnFq6Fud+3orAKlGo/tj9OLVsPdrOGetVvZi0 bR+OzPkOaoMehkrhaD72RagMOgBA2olzODLnOwCAQq1CVIuGiOn+oNf5JxauwrW9R3HvhyM9S+rK dX7d77jwyx+wpWRAFxqE+i/2QGiDvERbSeMHpGTk0XnLEffGc4hud7fs2C5t3+/ZbzXrwhUEVI6E oFCg+bgXPRXIlqspOPTJUrisdijUKsQO7ApTbA1Z/TuyLDg0exkyTp2HoFSgeue2qPFEO0+7KIrY N3keMhMuIbhWVdQd2BW7xs1G+y/f9qoCd1pt2DPxc+RkZCKkTjU0eb2/rOtf/HUXDs5ciIDoKAhK ARCl1+s93w1RLRsBAMwJSTg0aymcVhuMVSui8Yh+UOm1ss6X078v/sbfabXj0OxvYT6bCKVGjQqt GqPW0x0g3DQ2QOHzUxRFnFq6Fld3HoIjywJduAn1BnXzVOiWtH858+fS9v04uWQNVDotRJcbtZ/p iIr3NvU7NnL5un+3op2IiIiIiIiIiIiIiOhWyqzQymd7fHx8ifqPi4trIzsRTGXP7XBi68vvotW0 YdBHht7ucIiIiIiIiIiIiIiIiIioDNyKRHDRN8ulMmG9noZj81egVs+HmQQmIiIiIiIiIiIiIiIi ohJhIvgf4vqB46j9bEcEVS/6vqtERERERERERERERERERDdjIvgfouqjrW93CERERERERERERERE RERUTihudwBERERERERERERERERERFS6mAgmIiIiIiIiIiIiIiIiIipnmAgmIiIiIiIiIiIiIiIi IipnmAimfxZRlP4VwnIlGb/2HoP0kwm3LiYqFf8b/n7Z3zfOHyIiIiIiIiIiIiIiIgCA6lZe7OKv O3F03nJoggI9rwVWjkKLd4bcyjCKze104tTSdbi29ygcWRZE3l0fDV7uBUFZ/vPpmQmXsG/KfLSb P9HzWvz3G5FjzkK9Qd1L7TqHZi9DdLu7EdawdoHt6gA9qnW8D4FVK5TaNansiaKIzAuXYaxeqUyv w/lDREREREREREREREQkkZ0IPr1sPUIb1Co0wSKH+Uwi7urbGTWeaFfsPm4Xd44Du8bORnDtqmg5 dSjUAQbEL98Iy7UUBFSMuN3hlbmMs4kIqhHt9Zr5XCKiWjQs1eskHzyBei8UnlhWGwNQp89jpXrN snBx404oNCpEP3D37Q7llnFkWXFi4c/ISc+E2+WCxhiARq/2hqBQIDvpGvThJii1mjKNobzMn9JW Gs9vIiIiIiIiIiIiIiK6s8hOBEe3b4G/PlqCoJho1B3wBBQadZEvlnHmIiq0aVJo+5E536FC6yYw JyTh7IrfoNRpcd8nb0Cl1wEAzv28BRc37oTTakNIbA00GvqMp23bkCmo3K4FEtZsR0y39kg/dR7J B0+g1bThXtV/Cau3IX75RjwwdzxUBp3s2M+t2gpdhAn1X+zhea320x2KFP+1vUdw+rtfkJORBUOF MDQdOQCa4Lzq6AsbduDcT1vgdrtQsVUTpB47g2ZvDYLWFOT3/fu7/o7XZ6LhK097JXN3jpmFmO4P IapFA7/vPyP+YgGJ4CTUfqaj52df78/n9e+uj11jZ8OWnA5bqhk7Rs4EACjVarT5aBQEQUD89xuR tG0vHJkWBFWvlK+K/OKvu2BLTYc+IhQXN+5E9qVriB3wBCq3byFrfEVRxMlvViH12Bk4LFYEVq6A eoO6Qx9h8js2N7OnmfHXx0uhDTF6zRV/1wfu7PljvZaKgzMXot6LPRBcswoA4PiClbi65wgqtGwE 89n/s3ff4VFV+R/HP5Pee0hCgITQO4YiRaTYu+KKujZQUFeUFUF/FmzYC6trXTsg9rWCDUUEZQVB VHogvUAISUgmvc38/ogMjITcG2YSIL5fz7PPA3PuPed7yr37PH455+YqpHtn5S1fq+yv/9fk/PzV 148r82MUnzve3wAAAAAAAAAA4NhiOhEcEBOpkY/MUObnK7Vq9jwNuPFShfVMaFFj1vRchXTtdOjy jDx5+HjLy89XE96Yq7qySkeSY9uCz1SWtVOjnpwlLz8frX9ivrYv+lx9p10oW22dyrPyFdQpRr2u PEfb3vhEY565Xb8/vUjWrJ1OieA9v26Vh6dnixMhaR9+q1GPz2y+f83Ev3v1Bm1+5SONemKm/MJD tPWNT5SyaIkGTL9EUmMSJ+vLHzXikRnyDQvW9re/UHlOviOJ11z/zbQf0TdJe7dmOBJpBWs3S3a7 qSSwJFnTc9T1/AmOv9vq61VVUKygTjGm+mfU/oiHZyhvxTrtXr1Byf939UHtd590UqiJhwAAIABJ REFUqrpPOlU73vlStoaGJsd+z/otSjjjBA2fe4P2rN+q7Ys+dyTyjMa3aMMOFW1K1eh5sxr7s2aj yrPzW5TI27nyF+149yv1veYCRQ/p61Rm1P6+Phyr62fr6x+r/w2XKDghzlFfaM8E1ZVVNtadlquS lEyF90pscn7+6uvH1fkxis8d728AAAAAAAAAAHBsadnHbS0WJZ49Vsl3XKN1D76ssqxdpm+t3FWo hto6/TDjEX139T367up7lL96g9M11oxc1VVUqeflZ8nDy8uRxKguLlX2V6t03OzJ8vL3lSwWdT55 hAp/S5EklWXvUmj3zooZMVA1xaVKOHOMfMNDVF1UqqCOHZzaGHrXtRr/6n3y8PI0HXvNXqtsdXUK 6tyYUN743Dv6/voH9MOMRyW73TB+Sdr8yocaMP1i+UWEShaL4scNU2lqjiTJVt+glDcX67hbJzfe Y7EocmBPhSR1MtV/M+2H901SSUqGpMbvtW594xOnJJOR0rRcbXrhPS27ao6WXTVH315xl4I6x8ri 4WHYP7PtW9NyHLtJD6VkR7bCehycwCrLyFXXc8ep63nj5enjLd+wYFk8LJKMx1eSguKjVZa9SwXr NkuSYo4foOghfUyPT843q5Xx2fca9cQtByWBzbQvHbvrx5qeKw9vLwUnxMlWX6+85Wu16cX3lfbB UgV1anz+StNz1O3Ck5ucH6P+GbXviP8YXT+uzo/Z9eXK+xsAAAAAAAAAABx7TO8I3qe6qESbX3xf sSMHKTAuyvR9pek56jC0n4bde32T5VUFxfLw9taAf0w6+N7tWQrvleh0lLN3oL88/Rq/N2rNyFPw HzsFS9NzFT92qOwNNlXkFSgoIdapLotny3LfklRTUiaf4P1H8A648VJV7NqjXx5+VbJYDOOvtVao urBEKQsXK2XhYsfvYb0SJUkVOwvkFejv2F0r/XEU8x+JHKP+G7UvSeF9krRt/qeSpNxv1ygkqZNC u3cx1f+qgmJZLNLJCx9y/Jb99SqVpGSZ6p/Z9q3peUqaeFKzsZSmZiv0xksO/j09V8cdsBO0PCdf QV0ad6caja8k+UWFa/DMy7Xl5Q+VsnCx+k6dqMiBPZuN5UDRQ/po1w+/KGXhYvW5+nynb+Gaaf9Y Xj/FW9LUYVh/NdTU6peHXlHC2WPV77q/ac3dzyvkj8SsNT1Xg2dd5ajvwPn5q68fV+fHTHz7HO77 GwAAAAAAAAAAHHtalAjOXbZGaR99q/7XXdSiJJnUmJhobreeNSNPYb0Smzyyub6mVvXVNU6/7V67 SeF9kv64d6dCEjs2/jktR32mnK/y3N0KiI2Uh5dzF2119fLwbln+2z86QtVFJaqvqmncsafGxFbo AYmWZuOvrJJfZKhOePq2JuuvKbbKYrE4/VaSkqkOfxx7a9R/o/YlyTcsWLb6BtVXViv1g6814qEZ JnreqDQtR6E9nJNupTuyFdqtk6n+mW2/LHuXUzLrz2qtFbLXNzTuGj1AzV6rLB4e8g0Ldvx24PwY je8+saMGK3bkIOWv3qA197ygUxY9LO+ggEPGcyC/iFANnztd2V+t0qpZ89T/Hxcpol930+0fy+un PGe3upzWTSUpmQrsFKuY4f1Vlr1LDdU18vTxVm1puew2+yHn56+0fmz19Qe9k1ydH7PxufL+BgAA AAAAAAAAxx7T22NTFi1R0cYdGv3krMNKIljTcxXSrfnvA4c2sYNNkiL6JKkkJVOV+YWSGr8PmvvN anWfdJqkxmNdQ5I6yVZbp5qSMvlHhze296f6Mhev0JcXzFRF3u4Wxe4d5K/oIX2VsuAz2e122e12 Ffy82an+5uL3j4mUrb5Be9ZvlSTZbTZlffGDGmrrJEnBCXGq2LlH+T/9ruqiUm194xPtWvWr43uo Rv03an+f8N5dteXVjxQ3anCLvn1rTctVWHfn43RLU3Mcuz2N+me2fZ+QIJWm50p2u0rTcg4qb6ip la2+Qbb6BtWVVzmO5bam5ykkKd455gPm32h8a0vL9ftTb6quvFKyWBQ1uLc8W/gN6X26nD5aw+65 TtsXfa78n3431b50bK+f+soqefr6KKxngqzpOVr/2Ovas36rIvp2k9S427a5+fmrrJ/9758Cp99d nR8z68vV9zcAAAAAAAAAADj2mN4am3jWiU7fDG2p0rRcwx3BHcckN1nm3yFCg2ZeoZ/veUGSFNgx WqOeuEU+IYGOe0MSO8qauVPBCX/sDM44OBFcXVyq4MSO8o+OaHH8g2+5Qhuff1ffTb5bnr4+Cu/X TfHjh5uK32KxaMidU7Xphfe0bf6n8vD2UszwAY5dfL7hIUq+bYpS318qn+AAJZ47TjlLf3J8k9io /0bt7xPRN0kpby7RhNfntqjvpek56nRAX+02m6yZOx2JJqP+mW2/20Wn6Pen3tSWAH8FdIzS0Luu dTou1z86XB1PTNb3194vv8gwDblzqnzDQxrnuuufv7eb55h/o/H1CQ1SeN8krZnznCweFnkFBqjv tImmdwP/mX+HCI14eIZqSspMtb8v3mN1/QR27CBreq4C4zto5KM3H3SfNS2n2fn5q6yf6qISBXWO lV9UmNPvrs6PmfXl6vsbAAAAAAAAAAAceyySRlmt1lXNXRSc/1MbhQOpcTfixufe0eh/3erWeje9 +L6COscq8ewT3VrvsdL+Pq01vkdL+229fqoL92rtAy/r+AemyyckSLLbVVNS5vbEI+vHnKM9PgAA AAAAAAAAIJXFjmy2PDU11aX6k5OTR5s+Ghqtp2jDdlUXlUhq/F7pltc+VpfTT3BrG3vWb9XerelK ONO99R4L7bfF+B7J9o/0+vGLCle/aRfq18fna+3cl7T2gZe1d2tGm7Xf2o70+jFytMcHAAAAAAAA AACODNNHQ6P1VO+1avNL/5Wtrl4NtXVKPPtEdT61+X8FYNbOlb8o9YOl8g7017B7rpPFo21z/0e6 fal1x/doaP9oWD8R/bvr+AdvdEubh9N+azrS68fI0R4fAAAAAAAAAAA4MjgaGgAAAAAAAAAAAADa EEdDAwAAAAAAAAAAAABajEQwAAAAAAAAAAAAALQzJIIBAAAAAAAAAAAAoJ0hEXwM271mo36+70XT 1/948+MqSck87HIAAAAAAAAAAAAAxwavIx1AW1r3wMsq2ZElDy9PSZJPaLBOeOpWR3lDdY22vPax ijenyV7foNjRg9X7ynMki0V2u12Zn32v3GVrVF9ZrZCkTuo7daL8O0Q47t+58helf7RMdptNQV3i NGD6JfLy95UkU/e3lDU9V6FJnUxda7fbVZa9S8Fd4w+rHAAAAAAAAAAAAMCxw3QieMc7Xyqif3dF DujRmvG0qpIdWZrw6n3y8PE+qMxWV69Vt/5LCWeMUf8bLpbsdmUuWamG2jp5+vrIVlcve4NNo+fN loeXp35/5m1tf/sLDbr5cklS8aZUZXy6XCMe+ae8/H21bcFn2v7W5+o7daKj/ubul6S68iptW/Cp akvKZGtokE9woAb+8zJZPJreuF2anqv4cUNN9b0ir0D+HSLk2UTfzZQDAAAAAAAAAAAAOHaYTgTH Txiu359apJCkePWZfF6TyVQje7dlaNsbn6i62CqvAD/1uPh0xY4aZLpckjIXr1DqB0s17j93yyvA z3TbFbv2yD864pBxZ33xg6IH91bCmSc0/mCxqOu54xzlnj7eSpp4kuPvYT26qGR71v64Pl+pnpef 7dgBnHTBSVo1+0lHItjo/qqCYv02b4H6Xvs3hXbrLEna+trH2v3zJsWOGChJyvlmtdI/XiZbfb3i Rg5WWeZOhSZ1dtRRsHaTdrz3tWpLyxUQG6njZk+WT2iQpMbdwyGJ8dr04vva88sWyWLRcbdOVljP BFPlqe99rfrqGvW+6lxJjTuIv5o4U6e++7g8fX0kSdlfrVLGJ8tlszUobuRgFW9J05A7p8o3PER2 u10p8z9T8ZY01VVWKahTbOOO6OhwU/NnVH/ON6tVXVwi/+gI5Sz9SRU7C9R78nnqNGG46fiNZHy6 XDlLf1J9VbXCenfVwJsulZf//jW46YX3FDtqsKyZeUr/8Ft5+vlqzDP/57imufgBAAAAAAAAAAAA dzL9jeCAmEiNfGSGAjtGa9XseU5JTDOKN6fq18feUL9rL9L4V+7VsLuv1d6UDNPl++z5das8PD1b nIjeuzlNski///strbn7OWV//T+n8szPVypuTLK2v/2F1j30ijIXr2iynrqyCuWv3qDMxSuUdP4E x+/VhSXy8tufULQ3NKi+osr0/Vtf/1j9b7jEkQSWpNCeCaorq5Qk5S5bo8wlKzTioZs0/uV75Rng q+rCEgXERkqSdq/eoE3/+a+G3DlV41++RyFd45WyaImjLmtaroo3pyp+/DCNf+VexY8dqs0vfWC+ PCPXKbbKXYXyjQh1SgJnffmjRjwyQ+NfukcePl4qz8l3JDmLNuxQ0aZUjXriFo19/i51mjBc5dn5 TY5xU4zqt2bkKW/5WtWVVWj43BvU/4aLlf7RMtPxG9m24DMV/p6iUU/O0oTX7pckbV/0udM11ow8 FazbrPryKk14Y65GPT7TKQncXPwAAAAAAAAAAACAO5lOBEuSLBYlnj1WyXdco3UPvqyyrF2mb930 4gcaePPlCunW+E1bv6hw9ZlyvunyfYbeda3Gv3qf4zu/ZgV07KCu545T32smqvuk07T1tY9VvClV UuPu0JriUmV98YNijh+gPpPPVdaXP2rnD+ud6ihNzdYPNz+uTc+/qyF3TFVwYkdHWVivRKV//J2q i0tVtGG7fn96kfyjI0zdb03PlYe3l4IT4mSrr1fe8rXa9OL7SvtgqYI6dZCtvkEpCxcr+bYpjsRh RN9ujWNlsUiSNr/yoQZMv1h+EaGSxaL4ccNUmpqzv+30HA2c8XeF9+7aWH7ScKf5My7PdcyN1JhY Dfnje8K2+galvLlYx906uTE+i0WRA3sq5IDvFwfFR6sse5cK1m2WJMUcP0DRQ/qYmjsz9Zdl5Krr uePU9bzx8vTxlm9YsCweFlPxG6kuLlX2V6t03OzJjTu+LRZ1PnmECn9LcbrOmpGruooq9bz8LHl4 eTnmykz8AAAAAAAAAAAAgDu1LBEsqbqoRJtffF+xIwcpMC7K1D0NNbWqzC9U1MCmvy9sVH4gi6eH LJ4tDlsRfZPU8cQh8g7yV+SAHooZMUAlO7IlNe7m9QkN1oDpjTtyA+Nj1OW0USrZ5rwjObR7F014 7X4Nf2C61tzzvGy1dY6yXpefpYC4KG16/j2V7MhW/LhhCozvYOr+4i1p6jCsvxpqarVu7kvyCvRX v+v+Ju/gQIV066yKvAJ5BwU41VealuPY4VprrVB1YYlSFi7Wjzc/rh9vflwbnnnbcayz1JhsDu2x /+/2Bltj0thEua22TjXFpQqM3T/f1ow8hSQ2JlIrdhbIK9BfQZ1i9seXmuOU6PSLCtfgmZdry8sf 6ocZj6pow/bmJ+wAZuovTc9V7KjBjr+X5+QrqEucqfiNlG7PUnivRKejyL0D/eV5wA7wqoJieXh7 a8A/Jh1W/AAAAAAAAAAAAIA7mf5GsNR4PHHaR9+q/3UXKXJgT9P32erqJbvdsXu1peV/vtbDu0Vh N1l3Q1WNAv5IZHsH+Us2u1O9DdW18otq+vu1IYnx8osKkzUjT2G9EiVJnn6+TjuYV9/1rHr+/QxT 95fn7FaX07qpJCVTgZ1iFTO8v8qyd6mhukaePt6qKiiS5x/fHt6nNDVHkQMaE+f1lVXyiwzVCU/f 1mR7taXlkiTfsGDHbwU/b1R4v26mystzdysgLtoxhvYGmwp/TVG3Cxu/eVxTbJXlT+NbkpKpDsP7 O/0WO2qwYkcOUv7qDVpzzws6ZdHD8g4KcLrGVl8vDy/n+TWqv2avVRYPD6f4rem5Cv0j0WoUv1H7 9TW1qq+ucfpt99pNCu+TtL+9P+ayqSPLzY4PAAAAAAAAAAAA4C6mt9amLFqioo07NPrJWS1KAkuS d1CAAjpGK+PT5ZIaj8pN++83qi4qMVW+T+biFfrygpmqyNvdovYzPvte2974VA1/7MDdvWajrJk7 FX1cb0mSl7+f/KLCtPvnTZKkqj17lbtsjeLHDZUk7fphvTa//KEaqmsku12Fv21T5a5CBXWJlSRV F+5V3op1jti3vPqRfEICFdGvu6n76yur5Onro7CeCbKm52j9Y69rz/qtiujbmIgNiI1SSUqmKncX yW6zKXPxCu38fp1C/zjq2D8mUrb6Bu1Zv1WSZLfZlPXFD47+lqbnqqG23vFN3uLNaUr/+Dv1uOR0 U+W2+gbVlVXK3mBTdVGJfnvqTZXn5Cv4j6OVgxPiVLFzj/J/+l3VRaXa+sYn2rXqV8fRy7Wl5fr9 qTdVV14pWSyKGtxbnk0kTPfPb4HT70b1W9PzFJLkvLvXmp7r2HFrFL9R+xF9khrHP79QklSwdrNy v1mt7pNO299eRp4j8fxnRvEDAAAAAAAAAAAA7mZ6a23iWSc6vnl6OIbcOVUbn3tXmYtXyMPXW3Gj BssnNMh0udT4rdbgxI4HfXvXMPazx2rb/E/1482Py26zKbBjtI6fO12evvuP9h08+ypteOYtpb77 pTy8vTTolisc/Y094ThZs3Zq1ax5qiuvlF9UuIbOmSYv/8ajgr0CA7R7zUbteOdLefp4K3bkIPW5 5gJH3Ub3B3bsIGt6rgLjO2jkozcfFH9Q51h1n3SafrjpUQV1jlXiWWMUEBel4ITGbwxbLBYNuXOq Nr3wnrbN/1Qe3l6KGT7AsQvVmpajxDPHaNNLH6hqT7F8Q4M1/L4bFBATaao8tEcXhSTFa/m0+xTa vYv6TDlfe7emO45a9g0PUfJtU5T6/lL5BAco8dxxyln6k4I6Nya6fUKDFN43SWvmPCeLh0VegQHq O23iQbuBq4tKFNQ5Vn5RYU6/G9Xf+L1f5ySsNSPPkQg2it+off8OERo08wr9fM8Lf8xXtEY9cYt8 QgKd2us4JvmguTMTPwAAAAAAAAAAAOBuFkmjrFbrquYuCs7/qY3C+WuqLtyrtQ+8rOMfmC6fkCDJ bldNSZlLifcjyZqeq43PvaPR/7r1mKy/tR3r8QMAAAAAAAAAAMA1ZbEjmy1PTU11qf7k5OTRLfzY LlqDX1S4+k27UL8+Pt/xjdnOJ49Q7KhBRzgyc4o2bFdgfAf5RYapZq9VW177WF1OP+GYqb+1Hevx AwAAAAAAAAAA4NhDIvgoEdG/u45/8MYjHcZhqd5r1eaX/itbXb0aauuUePaJ6nxq8/+K4Wiqv7Ud 6/EDAAAAAAAAAADg2MPR0AAAAAAAAAAAAADQhtriaGgPl2oAAAAAAAAAAAAAABx1SAQDAAAAAAAA AAAAQDtDIhgAAAAAAAAAAAAA2hkSwQAAAAAAAAAAAADQzpAIBgAAAAAAAAAAAIB2xnQieMc7X6po 447WjAUAAAAAAAAAAAAA4AamE8HxE4Zr+1tfaPPL/5Wttq41YwIAAAAAAAAAAAAAuMB0IjggJlIj H5mhwI7RWjV7nkq2Z7VmXAAAAAAAAAAAAACAw9SybwRbLEo8e6yS77hG6x58WWVZu1opLAAAAAAA AAAAAADA4WpZIlhSdVGJNr/4vmJHDlJgXFRrxAQAAAAAAAAAAAAAcIFXSy7OXbZGaR99q/7XXaTI gT1bKyYAAAAAAAAAAAAAgAtMJ4JTFi1RdWGJRj85S17+fq0ZEwAAAAAAAAAAAADABaYTwYlnnSjf 8JDWjAUAAAAAAAAAAAAA4AamvxFMEhgAAAAAAAAAAAAAjg2mE8EAAAAAAAAAAAAAgGMDiWAAAAAA AAAAAAAAaGdIBAMAAAAAAAAAAABAO0MiGAAAAAAAAAAAAADaGRLBAAAAAAAAAAAAANDOkAgGAAAA AAAAAAAAgHaGRDAAAAAAAAAAAAAAtDMkggEAAAAAAAAAAACgnTGdCN7xzpcq2rijNWMBAAAAAAAA AAAAALiB6URw/ITh2v7WF9r88n9lq61rzZgAAAAAAAAAAAAAAC4wnQgOiInUyEdmKLBjtFbNnqeS 7VmtGRcAAAAAAAAAAAAA4DC17BvBFosSzx6r5Duu0boHX1ZZ1q5WCgsAAAAAAAAAAAAAcLhalgiW VF1Uos0vvq/YkYMUGBfVGjEBAAAAAAAAAAAAAFzg1ZKLc5etUdpH36r/dRcpcmDP1ooJAAAAAAAA AAAAAOAC04nglEVLVF1YotFPzpKXv19rxgQAAAAAAAAAAAAAcIHpRHDiWSfKNzykNWMBAAAAAAAA AAAAALiB6W8EkwQGAAAAAAAAAAAAgGOD6UQwAAAAAAAAAAAAAODYQCIYAAAAAAAAAAAAANoZEsEA AAAAAAAAAAAA0M6QCAYAAAAAAAAAAACAdoZEMAAAAAAAAAAAAAC0MySCAQAAAAAAAAAAAKCdOSYT wdbMPH3z99tVlrXL/ZXb7Y3/Owr9ePPjKknJdFt9u9ds1M/3vei2+o5mdWUVWjH9IX1//QP64twZ sttsh1VPZX6hvrnsdrfOw19Kaz9fR7B+dz+fh5L/v9+0fOp9+u6ae7Xm7udkq61zX+V/ofefux3t 8QEAAAAAAAAA/nq82rKxlTc+ovrKKlXuKpR/hwhZPD3U77qLFHP8gBbV4xMSpISzxigwLsrtMW54 9h3Fjx+myAE93F63K+x2u8qydyk4saPb6rSm5yo0qZPb6juaeQcHauzzd6k0NVsbn3tXFo/D+zcQ 3oH+SjhjjIK6xLo5wr+G1n6+jlT9rfF8NqW6qES//Wuhxvz7dgXGd1BlfqE8fLzdVv9R//7rGn+k Q2lSW80/AAAAAAAAAAAtYTobtuOdL1W0cYdLjZ343B0a+5+75eHjrQmvz9WE1+e2OAksSX4Roep5 2VluTYDsU/jbNoV27+z2el1VkVcg/6hwefr6uK3O0vRchXT7aySC9ylNzVFo9y6Hfb93cKB6Xn6W vPz93BjVX0drP19Hqv7WeD6bkv+/39Vx7DAFxneQJAXEuvcfwxzV778OEfJshXe+O7TV/AMAAAAA AAAA0BKmdwTHTxiu359apJCkePWZfN5hJ2HLMvIUnBAni2fLdmRaM/P06xPzJUm1pRUK79NVQ++a 5ihPfe9r1VfXqPdV50pq3KH11cSZOvXdx+Xp6yO73a6U+Z+peEua6iqrFNQpVn2nTpR/dLhkt2v1 Xc+qurBE1cVWrZo9T5Lk6e2t0U/dKovFYhhfzjerVZ6zS7baehX8skWSdNytkxXWM8H1+NS4ezek e2flLV+r7K//p4qdBeo9+Tx1mjDcEUPB2k3a8d7Xqi0tV0BspI6bPVk+oUFOMaZ/vEy2+nrFjRys ssydCk0yl/Qxis+o/R9nPqEBN1ys0B77k7Br5jynruePV4eh/UzFv+mF9xQ7arCsmXlK//Bbefr5 aswz/+dIyuZ885PSP1ome4NNsSMHqWhTqobOmSbf8BBHHaWp2QrtkWCqzwdKfX+p8lasVV1ZpUIS O2r43OlO5SumP6RO44crc8lKJV0wQSXbs1T42zaNfORmBXWJNVwfZvqX8ely5Sz9SfVV1Qrr3VUD b7rUUebq+BrFb3R/zjerVV1cIv/oCOUs/cl5fZp4vsysr0My+fw2N36u1u+O57M5u35Yr/RPvlNZ 5k55hwRqxfSHZJFFJzx9mzy8vUzVf8jnIyzYsH9G7y/JeP260n9req5CEuO16cX3teeXLZLF0uLn p7n3Q7Pr9w97t2Vo2xufqLrYKq8AP/W4+HTFjhq0Pz6D+QcAAAAAAAAAoK2ZTgQHxERq5CMzlPn5 Sq2aPU8DbrzU6T/Cm1WalquQwziOOCQxXmOfv0uStG3BZ47kxz7WjFzFnZDs+HvlrkL5RoQ6khRF G3aoaFOqRs+bJanx+7jl2fmNiSaLRSMenqG8Feu0e/UGJf/f1S2Oz5qRp10/rteQO6eq33V/0/a3 vtDmlz7Q6HmzXY9PkjUtVyUpmQrvlajhc2/QnvVbtX3R545Ew+7VG7T5lY806omZ8gsP0dY3PlHK oiUaMP0SSVLusjXKXLJCIx66Sb7hIdrx3leqLixRQGykqf4ZxWfUfljPBJWkZjsSlUUbd8hW3+BI Uhrdv2+MPXy85eXnqwlvzFVdWeUBSZ7VylyyUiMeniHf8BClfrBU5bn5TklgqXFHcMIZY0z1+UDd J52q7pNO1Y53vpStocGpzFZbp/KsfAV1ilGvK8/Rtjc+0ZhnbtfvTy+SNWungrrEGq4Po/5tW/CZ yrJ2atSTs+Tl56P1T8zX9kWfq++0C10eXzPxG82PNSNPe9ZvUcIZJxy8Pk08X0brq1km6jcaP1fr d/X5NBI3JllxY5K14oaHlPx/Vys4Ic6p3Kh+o+fDsH8G76/Gaw69fl3tvzUtV8WbUzXkrmnqf/1F LX5+jPrf7PqVVLw5Vb89uVBD51yrkG6dVF24VxmLV+xPBBvMPwAAAAAAAAAAR0LLtuVaLEo8e6yS 77hG6x58WWVZu1rcoDU9V6HdXDt6tCwjTyF/+lbkn485tmbkOl0TFB+tsuxdKli3WZIUc/wARQ/p 4xxbWs5hx1aWkauBN/1d4b27ShaL4k8a7jQ+rsZXmp6jbheerK7njZenj7d8w4Jl8di/U3nzKx9q wPSL5RcR2tj+uGEqTc2RJNnqG5SycLGSb5viSHxE9O3WGI+J3c5m4muufUkK69FF1rT9f982/zP1 nXqB6fv3jVldRZV6Xn6WPLy8HH2x1Tco5c0/9y/poO8f2xtsKs/JV9CfkmgtUbIjW2F/2lFclr1L od07K2bEQNUUlyrhzDHyDQ9RdVGpgjo2HuFrtD6a6191camyv1ql42ZPlpe/r2SxqPPJI1T4W4rj XlfG10z8RvNTlpGrrueOO+T6lJp/vsw8n0YOVb+Z8XOlfsm159MsW32DKnfHty01AAAgAElEQVQV KqhTzEFlhs+/ieej+f41//7a91tT69cd/S9Nz9HAGYf3/Jjpv9H63fTiBxp48+WOMfCLClefKec7 xdfc/AMAAAAAAAAAcCSY3hG8T3VRiTa/+L5iRw5SYFzLv09pTc9R/PhhLb7PqY4/JYJttXWqKS5V 4AHfy7Rm5Ckkcf81flHhGjzzcm15+UOlLFysvlMnKnJgzz/FlqekiScddkwHHssrm02+ESFui8+a nqvBs65y/L08J19BXRoTmrXWClUXlihl4WKlLFzsuCasV6Kkxu9XegcFOL4rKkmlLUx6NxefUfuS FNozQZlLVkpq3O0ZEBPh+FavmfurCorl4e2tAf+YdFBs5bn58gkOdO5fao6CuzonuspydikwvoM8 vDxN9/vPSlOzFXqj8y5Ga0aegv9Yj6XpuYofO1T2Bpsq8goUlBDruOZQ68Oof6XbsxTeK1FeAfuP MfYO9Jen3/7dmK6Mr1H8ZuanND1Xxx2wk/TA9ekYp2aeLzPPp5FD1W9m/Fypv7Hs8J9Ps8pz8xXQ MeqgY/WN6jf7fByqf2beX82tX3f035qe63Sku73B1phUNtG+mf43t34bampVmV+oqIE9mo3vUPMP AAAAAAAAAMCR0qJEcO6yNUr76Fv1v+6iFidpJEl2u6yZOxWSFG987SHUV1artqxCATH7jzQuz92t gLhox+5We4NNhb+mqNuFzkmN2FGDFTtykPJXb9Cae17QKYselndQgKO8LHtXk7vtjNTstcri6Snf sGDHb7vXbGrcveaG+GpLy2W32Z3qt6bnOna01VdWyS8yVCc8fVuT8VUVFMnT39fpt9LUHEUOOHRi oymHis+ofUkK6hyryvxC2e127Xj3Kw254xpHmZn7rRl5CuuV2OS3qav37JVPmPO3RktTsxU1qJdz HWm5Cuna8mPJ96m1Vshe3+CUgGqMbadCEjv+0UaO+kw5v3HOYyPl4eVluD6M+ldfU6v66hqn33av 3aTwPkmOv7syvkbx11eWNHt/zV6rLB4eh1yf+xg9X0bPp5FD1W9m/Fyp39Xn03T76XlNrl+j+s0+ H4fqn5n3V7Pr18X+15aWS5LT+Bb8vFHh/bqZat+o/0br11ZXL9nthzw9wWj+D2Srr5eHV4v//RUA AAAAAAAAAIfF9NHQKYuWqGjjDo1+ctbhJYElVewqlG94iOO7jYfDsRv4gP8ob6tvUF1ZpewNNlUX lei3p95UeU6+Y5djbWm5fn/qTdWVV0oWi6IG95ZnEwkDn5AglabnSna7StPMH1tqzchTQ02trJl5 kqS9W9OV9uG36nHx6W6JrzQ996DkuTV9/7eW/WMiZatv0J71WyVJdptNWV/8oIbaOklSQGyUSlIy Vbm7SHabTZmLV2jn9+sU2s1cUtQoPqP2JclisSiwU4wyPl6miH7d5N8hokX3WzPymkysSFJAXLRK d+SoqqDY0b+85euaTJo11DQmBGutFab67nxvrWz1DY3zWV7VmBxS47GyIUmdGndOlpTJPzrcaX6M 1odR/yL6JDXOX36hJKlg7WblfrNa3Sed5rjGlfE1it/ofmt6XrPrc59DPV9mn08jh6rfzPi5Ur+r z6dZpekHH8dspn6zz8eh+mf0/pKaX7+u9r80PVcNtfUqz86XJBVvTlP6x9+pxyXmnh+j/hutX++g AAV0jFbGp8sd45H2329UXVTiiM/M+s9cvEJfXjBTFXkFpvoNAAAAAAAAAICrTG9NSjzrRKdvPrZE 9terlPbfb9VQXaNaa4WWT7tfwQlxGjrn2hbX9edjoSUptEcXhSTFa/m0+xTavYv6TDlfe7emO44y 9QkNUnjfJK2Z85wsHhZ5BQao77SJB+027HbRKfr9qTe1JcBfAR2jNPSua52Ok20upvhxQ7X11Y9V WVAkn5AgDbv3esdRpK7GZ03LOShpY83IcyQaLBaLhtw5VZteeE/b5n8qD28vxQwfIMsfyfKgzrHq Puk0/XDTowrqHKvEs8YoIC5KwQkdTY25UXxG7e8T1jNBaR9+q3Ev3ev0u5n7rRl56jgmucn4gjrF qOt547TyxkcU1DlGiWedqIC4KAV1iXW6LnbUIGV//T99f91chfVMcDrK1Qz/6HB1PDFZ3197v/wi wzTkzqnyDQ/545jcjrJm7nSMqTXDORHc3Pow6p9/hwgNmnmFfr7nBUlSYMdojXriFvmEBDpdd7jj axS/8f0H77Q+cH3uc6jny+zzaeRQ9Zsdv8Ot39Xn0yxrRp66HXfwd5MNn3+Tz8eh+mf0/toX26HW r6v9t6blKPHMMdr00geq2lMs39BgDb/vBqdTIVx5P5hZv0PunKqNz72rzMUr5OHrrbhRg+UTGuSI z8z6ry4qUVDnWPlFhZnqNwAAAAAAAAAArrJIGmW1Wlc1d1Fw/k9tFI6xdQ++rNgRA9Xp5BFHOhSH X59coLhRgxQ7avCRDgVHIdYHAAAAAAAAAAAADlQWO7LZ8tTUVJfqT05OHm36aOgjqaqgWJJUnpOv wt+3q8Pw/kc4ImfWjFwFdY41vhB/SawPAAAAAAAAAAAAtDXTR0MfKXXlVVr/+Buqr6iSPCwacvvV 8gkJOtJhOdgbbKrcuUcBcdFHOhQchVgfAAAAAAAAAAAAOBKOuaOhAQAAAAAAAAAAAOBYxtHQAAAA AAAAAAAAAIAWIxEMAAAAAAAAAAAAAO0MiWAAAAAAAAAAAAAAaGdIBAMAAAAAAAAAAABAO0MiGAAA AAAAAAAAAADaGRLBAAAAAAAAAAAAANDOkAgGAAAAAAAAAAAAgHaGRDAAAAAAAAAAAAAAtDMkggEA AAAAAAAAAACgnSERDAAAAAAAAAAAAADtDIlgAAAAAAAAAAAAAGhnSAQDAAAAAAAAAAAAQDtDIhgA AAAAAAAAAAAA2hkSwQAAAAAAAAAAAADQzpAIBgAAAAAAAAAAAIB2hkQwAAAAAAAAAAAAALQzJIIB AAAAAAAAAAAAoJ0hEQwAAAAAAAAAAAAA7QyJYAAAAAAAAAAAAABoZ0gEAwAAAAAAAAAAAEA747ZE 8LCJN2nZT7+6q7qDTLl9nv694ONWqx8AAAAAAAAAAAAA2gsvMxc9s/ATPfD825Ika3mFvL285O/n K0n69MX7NCq5b+tFCAAAAAAAAAAAAABoEVOJ4BlXnq8ZV54vSbp05iMaMbi3/nnVBa0aGAAAAAAA AAAAAADg8Lj1G8HW8kpN+udDihp+kYZNvElp2bscZZt3ZOny2Y+pz+lTFTvqEk25fZ6qa2od5cMm 3qT1m1MPef+fzXjgBV0261HZ7XZJUt7uQp05dY4Sx1+hXqdeo7/f8qjScw59PwAAAAAAAAAAAAC0 V25NBN/3zJu6/dqLlbL0NcVEhemRl951lKVm7dTFZ47VhiX/UfqyBdqSmqWX3v3c6f5pc5465P0H mvvcW0rJyNX8x2bLYrE4fuvaOVYZ3y3Utq9f1cVnjlVwYIA7uwcAAAAAAAAAAAAAxwS3JoIfu3Wq kvt1V2RYiCadOVbb0nIcZeedPFLnTBih6po6bUnLUo/EeP28IcXp/odmTjnk/fs8/9Znev/LFfro +Xvk7bX/ZOtOsVFauXajVq7dqPqGBp138khFR4S6s3sAAAAAAAAAAAAAcEww9Y1gs7y9PR1/jokM U01tnePvebsLNeOBF1ReWa2h/XvKy9NTpWUVpu+XpI+WrlJBUYms5ZXaXbhXSZ3jHGV3Xn+pIsKC dfuTryslI0fnjB+hh2dNUXxMlDu7CAAAAAAAAAAAAABHPbfuCG7OpTMf0aVnj9fXrz+sh26ZrPEj BrW4jozcfC194xHd/88rNOX2eY7vA0uSp6eHpl92rn56/2mlfjtfdfUNuv6eZw6qo7SsQrV19S71 BQAAAAAAAAAAAACOZm2WCM7aWSBPz8bmdmTmHfR9YDNmTp6oznHRmnrRGfLz9dG/F3ziKLvrX/O1 eUeWJCk8JEh9unV2ShRLUkVVtRLHX6lxl892oScAAAAAAAAAAAAAcHRz69HQzXn27hv00Ivv6O6n F6h/j0Rdf+nZ+njpqhbV4eFhcfz5lQdv1vC/zdCZ44apZ2InDR/YSzMf/o+ydxaowWZTj4R4vXD/ TU73+3h7KaFjB/VIiHdLnwAAAAAAAAAAAADgaGSRNMpqtTabkQ3O/6mNwgEAAAAAAAAAAACA9q0s dmSz5ampqS7Vn5ycPLrNjoYGAAAAAAAAAAAAALQNEsEAAAAAAAAAAAAA0M6QCAYAAAAAAAAAAACA doZEMAAAAAAAAAAAAAC0MySCAQAAAAAAAAAAAKCdIREMAAAAAAAAAAAAAO0MiWAAAAAAAAAAAAAA aGdIBAMAAAAAAAAAAABAO0MiGAAAAAAAAAAAAADaGRLBAAAAAAAAAAAAANDOkAgGAAAAAAAAAAAA gHaGRDAAAAAAAAAAAAAAtDMkggEAAAAAAAAAAACgnSERDAAAAAAAAAAAAADtDIlgAAAAAAAAAAAA AGhnSAQDAAAAAAAAAAAAQDtDIhgAAAAAAAAAAAAA2hkSwQAAAAAAAAAAAADQzpAIBgAAAAAAAAAA AIB2hkQwAAAAAAAAAAAAALQzJIIBAAAAAAAAAAAAoJ0hEQwAAAAAAAAAAAAA7QyJYAAAAAAAAAAA AABoZ466RLDNZm+2/Pdt6YobfYnWbtzu+K2yqkZdx1+pruOvlG+/s7Tsp1+d7jEqh/tk7yzQKZNv V+yoSzT43H/o6x/WuVxnS+bPaP0YaWp9HU1c7Z+RI9H/o+n5NVq/rT0+rTG/x9L7r7XXN8x56MV3 dNPc5490GAAAAAAAAAAAF5lOBJ997d2KPn6SfPudpaBB5yn6+Ema89R8twazISVDp119R7PXxEVH 6MJTx6hTbJTjtwB/X2UsX6iM5Qs1sFfSQfcYlcN9bn38FfXq2lmZyxfqp/ef1pihA1yu0+z8mVk/ RppaX0cLd/TPyJHo/9H0/Bqt39Ycn9aa32Pl/dcW67spzyz8RNHHTzro/9+ij5+k/63f0ubxAAAA AAAAAADgLl5mL1zy8gOSpEtnPqIRg3vrn1dd4PZgCveWGl7TITJMz9073e1twz02bMvQG4/Okp+v T5u3bWb9GDma15c7+mfkaO5/WzBav605Pm0xv0ezI9X/GVeerxlXni+pdf//DQAAAAAAAACAttZm R0Pn7S7UmVPnKHH8Fep16jX6+y2PKj1nlySpoKhEA8++XpfNelQ//rLZcYzpyVfd7rj/5Ktud/zu 1ecMbd6R1VahG8YvSfUNDbrv2TfV69Rr1PPUq3X1HfNUVlFlutzI5h1Zunz2Y+pz+lTFjrpEU26f p+qa2jaLv7qmVlfd9oR6nnq1vPucKf8B56jr+Cv15cq1kqRbH3tFvU+7RqlZO3XhjQ8cNH9G8Vt6 nqaiEqvj73c/vUAzH/6Pqb6ZWT9GjNbXsIk3af3mVE3650OKGn6Rhk28SWnZuw5R28GMxq+58Xe1 f9vScxR/wt+djt0tKCpRx9GXqq6+3lT/jdaP0fy5un6bs3lHlrqMvdypfyXWcsWMvNh0G0br18z4 DJ14o/YUl+ry2Y8pZuTFTve7+v4z4ur7pbn7V/y8Qedef69OuvL/1P3kyVqyfI2SJlyl06+5y3T7 zT0/7uh/aystq9DUu55Sl7GXq9tJk/XgC2+rocFm+n6j9WFm/N767DudcMktihl5sc69/l6nxLlR /UbxF5eW6ZKbH1bMyIs1ctLN2pLqvL7NvJ/fWbJcx513g+JP+LuGXDBdny37yXT/9l1z3Hk3aMrt 80yPKwAAAAAAAACgeW2WCJ773Fvq2jlWGd8t1LavX9XFZ45VcGCApMZddhuW/EfP3XOjThjSz3GM 6bcLHnXc/+2CRx2/R0eEtlXYpuKXpPufXaSVazfql0+eU8rXryk0OFB3znvddLmR1KyduvjMsdqw 5D9KX7ZAW1Kz9NK7n7dZ/E++9l+VV1Zpy5evaOPnL8nXx1sblrykM04cJkl64v+madvXrymxU4y+ ePXBg+bP1fibY2b9GDGzvqbNeUq3X3uxUpa+ppioMD3y0rum6zcav+bG39X+9U7qrMROMfpu9W+O 395ZslyTzhwrby8vU/03Wj9GWnP++/VIUFLnOH31w1rHbx8tXaVzJowwvTPdaP2aWR/5e/bqslmP 6vyTRyn9uwVa8PhsR5mr7z8jrr5fjO5f+uMveubuG3T8oN569KX39POHz+jnDduUs2uP6fYP9fy4 o/+tbdqcp2WRRWnL5mvtR8/q8+9/1r8XftyiOppbH2bGb8HH3+iDZ+coZ+Vb8vH20m2Pv2q6fqP4 p931lLy9vZS9YpE++8/9yttd1KK+vf/FSt0x73W98egs5f34tt6ad7sqq2ta1L/qmlqlZe88KAkN AAAAAAAAADh8bZYI7hQbpZVrN2rl2o2qb2jQeSePPCIJ3cNlFP+zb36qh2+ZoqAAf1ksFt15/aX6 7LvVpsuNnHfySJ0zYYSqa+q0JS1LPRLj9fOGlDaLf0tqtk4ZPURenp7qndRZkWEhjiRQW8R/NHho 5hQl9+uuyLAQTTpzrLal5Zi+12j8XF0fRq6+8DQt+nSZ4+9vfrpMkyeeYvp+V5/f1p7/6Zedo1fe +9Lx97cXL9cV553ktvrNyNtdqDuvv1R/O32MAv39FB+z/zvCrf3+c3X9GN3fp1sX9euRoB6J8Tpj 7DBFhYeqS1wHx65mM+278vwcSSXWcn209Ec9efs0eXt5KSI0WHP/eaXTejOjufVhZvz+79pJiouO kI+3l6664BTHaQJG9RvFv7e0XJ98+z89M+cG+fp4KzoiVKeMTm5R356a/5EemXW1BvfpJqnxH59c cta4FvUvKMBfmd+/qRVvPdmitgEAAAAAAAAAh2b6G8GuuvP6SxURFqzbn3xdKRk5Omf8CD08a4rT fww/mjUXf+HeUlnLKw860jIiNFiSDMvNyNtdqBkPvKDyymoN7d9TXp6eKi2raJP4JemU0cl66d3P deoJyfp5Q4oabA3qkdixzeI/Gnh7ezr+HBMZppraOtP3Njd+7lgfRiadOVZ3PTVflVU1ytq5W3V1 9Y6kjRmuPr+tPf/nnzJKsx97Rbv2FMsii9JzdunEYQPcVr8ZQQH+Gnf8wCbLWvP95+r6acn9Fln2 /9liadH9rjw/R1JGbr6iwkMVGhzo+K17Qkdl5Oa3qJ5DrY/Dmb9+PRJUXFJmqn6j+DNy8xUdEabw 0KAW9edAOzLz1K9HYpNlLemfO995AAAAAAAAAIA2TAR7enpo+mXnavpl56q4tEw33v+8rr/nGS1+ aa7jGj9fHxX96T9ut5SHh0X19Q2HXX4ozcUfGRaioAA/ff36w+rSscNB9xqVm3HpzEc048rz9bfT x0hqPCb0k2/+1ybxS1LPrvHy9vLSnKcWKDQ4QMsWPO44Vtgd8ft4e2lPcakiw0IkSbV19U3W09z8 uWP9tJbmxs/s+nClf8GB/jp9zFAtXr5am3dkafLEU1t0v9HzazR/Ztfv4T6/3l5emnLhqVr48bcK DPDTpWePdyQqjwat+f5ryfulqfFz9f3kjvebZK7/pWUV8vfzlY93m/1flxLiY1S4t1RlFVUKDvSX JKXn7FJifIxb6j+c8UvN2qmunWJNXWsUf4fIMBWXlKm6pvaQR6kbPd+JnWKUkp6jgb26utS/IzG/ AAAAAAAAANCetdnR0Hf9a74272j89l94SJD6dOssu93udE3f7l20aXumsncWSJL2FJe2uJ2E+Bh9 uXKd7Ha7iksPTioYlR9O/BaLRddferZuuO9Zxy7HgqIS/bol1VS5GVk7C+Tp2ThdOzLzWvx9VVfi l6TXPvhKV008WW//63a9eP8MdesS16L2jeLv2bWTFn78raprarVk+RqnY4wP1Nz8uWP9tJbmxs/s +nC1f1f/7TS99/kKffLN//T3c8a36F6j59do/syuX1ee32svPlNvfvqtPvhypa44v22PhTbSmu+/ lrxfmho/V99P7ni/Scb9r6iqVuL4KzXu8tlN3d5qIkKDdd5JI3Xb46+oocGm0rIK3fvvN3XNRae7 pX6z4/fBlz+ouqZWpWUVuv+5Rbr6b6e5Jf5OsVEa2LurHnzhbdntdqVm7dTbi79zqsPo+f7HpWfr zn+9oW3pjcd9Z+UV6IlXP2hR/47U/AIAAAAAAABAe2Y6EXz2tXcr+vhJ+mjpj7rrX/MVffwkzXlq vumGhg/spZkP/0e9T7tGPU+9Wj/9ulXP3Xuj0zVdO8Xq4VlTdOJls9Tn9Km6fPZjqm9o2e7dOTf8 XUt//EVdxl6um+Y+3+Lyw43/oVsma/jA3hpx0T/V94xpOu8f92lnQbHpciPP3n2DHn3pPfU/61rd /fQCXX/p2abvdUf8fzt9jKbd9bTiRl+iruOvVP+zrtV1d/9b1TW1bon/qTuv1ztLlqv7yVP0zar1 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 25rP3+LFSdvKlk1aFXr6tHnFVcxL5jOyenXCwxUP2+7dUps25h6vVi1puz33x4oV5hhpqVq3NX6c kyfN9NrJeRD3Z1iY+Z179Kj5OSRE+uors7xBYsn9/bS3v2T7/AAAAAAAAAAAmYtDE8Hu7iZpeu+U yDVqSF9+aabczJ3b/MP++edNordZM9vtzvL66yZJd/CgqeyNqzrNndtUo3p5mX+0T56cNNnw8sum YrZ3b1OV9sor5p/6f/1le9wqVcy6lu7uJtnq4WHG69cvYZ/Ro6VRo0zSdvlyqWPHhETSM8+YJEtM jGmLijKJ47g1hC0WE09kpJly+6mnTOVYXLWtrf5x2rY1a0/Wq5c0SWyP5K5vlixm/ctOnczUrqdO mSR1QIBp37VLWrTIjNm4sTR3rqnY69PHvjWcnWHhQnN9S5c2Cf1Gjcy03YnlyGGq9SpXNtXZgwY5 N0aLxVSuT5uWtK1jR1Oh/M47pmLcx8e8z/dycTEJyMuXrbd362aSxNWqmUTa5MlJKz5jY83Yffo4 7JQeKSld33v3Gz/ePAwQGWn7uKtXSy+8YP3wyRNPmM/r3r3m5xYtzLq6q1ZJI0aY70eOtD7O77+b 7Ylft2/bd24p3R83b5rPZXi4eYgl7thxD5RI9t0fixcnTI/v6PEl83BJWJh52Oh+0nN/phSfl5fU sqV5MKRECbO9bt2kn//k/n7a29/W+QEAAAAAAAAAMh+LpDqxsbE7H3Ygj7OTJ8000J98YhIZd+6Y RGpgoLR0qUlqJzeNa9++ya+5i4yjRg3pww8f/vqdd+6YhNwHH0hNmqS+f2SkqdK/cMFUc6fGhAkm yb9gQerHfVyk9/pmVkeOmDXAnbkUwL0yw/0JAAAAAAAAAMg8LBaLn+vDDiIjOH3aVNZ9/bVUuLCp lvzpJ8nT00zzeeKE1L///fv26WOqLJHxPQrT+Lq5manYu3UzlYU5cqSu/+TJZmro1CaB//zTVMcv WZK6fo+b9F7fzGrxYrPu7cOSWe5PAAAAAAAAAEDmQkWwA9y9a6Zh/eILUymZP79Z83bUKOnppx92 dHgU1KghTZlipvh9XK1fL+3cKY0dy8MLAAAAAAAAAAAAjzKLxeJHIhgAAAAAAAAAAAAAMpD4qaEj IiJS3NHj/G6nBAQAAAAAAAAAAAAAGV2Ed+0U2x2Rn82S7iMAAAAAAAAAAAAAAB4pJIIBAAAAAAAA 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 f5H0Q1l0U+HyAAAAAElFTkSuQmCC --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 08:15:21 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 12:15:21 +0000 Received: from localhost ([127.0.0.1]:49407 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDPei-0003C8-Qk for submit@debbugs.gnu.org; Mon, 18 Jul 2022 08:15:21 -0400 Received: from mail-ed1-f51.google.com ([209.85.208.51]:40627) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDPee-0003Bn-1G for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 08:15:19 -0400 Received: by mail-ed1-f51.google.com with SMTP id r6so14978899edd.7 for <56393@debbugs.gnu.org>; Mon, 18 Jul 2022 05:15:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:content-language:to:cc :references:from:autocrypt:subject:in-reply-to; bh=IZQjvktnlaNtEu75MRVfX1v7EyQlt2YvBn4OgYdILKc=; b=LBiFuwzkDD3DSkvoI4U6HnghL/JAVhLmbZtvxKaedmhAwbcBZemJiqO9Bi5JVDd4Zm MP+crAlzsU4jHfn6PQObC8kpoWwcIey9mskhisqRw8mplpkgbA4ppiI1O9xsxQWMHum4 b2ANnpUSojX+A6q58sgdRnQg4+Up9aGg7bd3PUiSJf4eBFH+gqkaRnXRopnTYepGOxjI fOYMVaHtXBcsrJKslT3nchE5JggKjiAiDit9zugrq0/eMFGLFsbRbxzCDf/O8bZkGql7 z5zTsrNQS9iQtfCmISrr0eumCnOlbe6XGNPKBtbgmH8hkMmGGsm9irOKMmy75KCsWGVD fOsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:cc:references:from:autocrypt:subject :in-reply-to; bh=IZQjvktnlaNtEu75MRVfX1v7EyQlt2YvBn4OgYdILKc=; b=CyMZzxJbZCJ4/0Gb+Fe2MGMDMm1GqjzHgU2Je72KgNQepXRIY1rszB3h4dYLNDrlO2 cU2kT6uXO/BQZNDHtBkuyVj+o2NaLCGBfdwIbkGhb3dSRkrBAbxhP/yE3I60oXIfFHqj dDUu1NbGzF5CeqYYVZnKCqKIme5mFIVS7MggL3lLhgBTPvu2Uf7OOWz5RrpyTqtkx/Wc 1bfTDEcE3nOLBKLkv6t/FFDuucS9JqcKtPw+le/eC/XeJr1Eu5+9cS6Edqx/v6RrHRbz kaFN1JsrpNJVuFtqh/Ir0QSeUTquSfvj+3PQkGlXVZmUTZy0jh5z5ywrzpDNkevleHP3 jnpA== X-Gm-Message-State: AJIora8OjvD9Yu7bjc8xxa9kW7kSmA6K5izOrO//M3Zaia6uibpufLry +sD29smPqBW7J4omBYFSF0k= X-Google-Smtp-Source: AGRyM1v4SW/Y9vbbpt70JzmdrejIvLiwkjWKGjGMgQw+nV6Z5uxSH/zpKVF6ltv++rH2OZbTpEpMcg== X-Received: by 2002:a05:6402:5212:b0:43a:ad74:b336 with SMTP id s18-20020a056402521200b0043aad74b336mr36762331edd.16.1658146510065; Mon, 18 Jul 2022 05:15:10 -0700 (PDT) Received: from [192.168.178.21] (pd9e36932.dip0.t-ipconnect.de. [217.227.105.50]) by smtp.gmail.com with ESMTPSA id u2-20020aa7d0c2000000b0043a43fcde13sm8470226edo.13.2022.07.18.05.15.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 18 Jul 2022 05:15:08 -0700 (PDT) Message-ID: <5df44dc8-d0e2-576b-6e76-62dd5493739a@gmail.com> Date: Mon, 18 Jul 2022 14:15:07 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Content-Language: en-US To: Michael Albinus References: <38c1a31040d2d2bc47ae@heytings.org> <87v8ru4tn8.fsf@gmx.de> <51d7ac86-2b29-fe77-4183-ada84192fac2@gmail.com> <87fsiy1w9o.fsf@gmx.de> From: =?UTF-8?Q?Gerd_M=c3=b6llmann?= Autocrypt: addr=gerd.moellmann@gmail.com; keydata= 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 Vp5NW5c= Subject: Re: bug#56393: Soon also looking at your branch In-Reply-To: <87fsiy1w9o.fsf@gmx.de> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------QobX0Hzaeza9TDE0oDAVLumT" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------QobX0Hzaeza9TDE0oDAVLumT Content-Type: multipart/mixed; boundary="------------ZtvSF7YXertFXw08KUDPC06U"; protected-headers="v1" From: =?UTF-8?Q?Gerd_M=c3=b6llmann?= To: Michael Albinus Cc: Gregory Heytings , 56393@debbugs.gnu.org Message-ID: <5df44dc8-d0e2-576b-6e76-62dd5493739a@gmail.com> Subject: Re: bug#56393: Soon also looking at your branch References: <38c1a31040d2d2bc47ae@heytings.org> <87v8ru4tn8.fsf@gmx.de> <51d7ac86-2b29-fe77-4183-ada84192fac2@gmail.com> <87fsiy1w9o.fsf@gmx.de> In-Reply-To: <87fsiy1w9o.fsf@gmx.de> --------------ZtvSF7YXertFXw08KUDPC06U Content-Type: multipart/mixed; boundary="------------TSBDwGnrMbZPkCXCpYYzlTEH" --------------TSBDwGnrMbZPkCXCpYYzlTEH Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 DQpPbiAyMi0wNy0xOCAxMzo0MyAsIE1pY2hhZWwgQWxiaW51cyB3cm90ZToNCj4gVGhpcyBp cyBNZXNzYWdlLUlkIDw4M3Y4cnZweHg3LmZzZkBnbnUub3JnPiwgSSBzZWUgaXQgaW4gdGhl IGRlYmJ1Z3MNCj4gbWFpbCBidWZmZXIuIFNlZSBhdHRhY2hlZCBzY3JlZW5zaG90Lg0KPg0K PiBXaGljaCBtYWlsIGJhY2tlbmQgZG8geW91IHVzZSAoZGViYnVncy1nbnUtbWFpbC1iYWNr ZW5kKT8gSSdtIG9uDQo+IGdudXMuIEJ1dCBhbHNvIHdpdGggdGhlIHJtYWlsIGJhY2tlbmQs IHRoYXQgbWVzc2FnZSBpcyB0aGVyZSAoc2VlIHNlY29uZA0KPiBhdHRhY2htZW50KS4NCj4N Cj4gRG8geW91IGhhdmUgYXNwZWNpYWwgZ251cyBvciBybWFpbCBjb25maWcsIHdoaWNoIHN1 cHByZXNzZXMgc29tZQ0KPiBtZXNzYWdlcyB0byBiZSBzaG93bj8NCg0KTm93IGl0IGdldCdz IGludGVyZXN0aW5nLi4uDQoNCkknbSB0cnlpbmcgb3V0IFNwYWNlbWFjcyB3aXRoIHRoZSBo ZWxwIG9mIGNoZW1hY3MyLsKgIEkgaGF2ZSBvbmUgDQpub24tc3BhY2VtYWNzIHByb2ZpbGUs IHdoaWNoIHVzZXMgdGhlIEdudXMgdGhhdCBFbWFjcyBjb21lcyB3aXRoLCBhbmQgSSANCmhh dmUgYSBzcGFjZW1hY3MgcHJvZmlsZSBpbiB3aGljaCBJIHVzZSB0aGUgc3BhY2VtYWNzICJs YXllciIgZm9yIEdudXMuwqAgDQpJIGNhbiBzdGFydCBib3RoIHByb2ZpbGVzLCBhbHNvIGF0 IHRoZSBzYW1lIHRpbWUgd2l0aCAiZW1hY3MgDQotLXdpdGgtcHJvZmlsZSBkZWZhdWx0Iiwg YW5kICJlbWFjcyAtLXdpdGgtcHJvZmlsZSBzcGFjZW1hY3MiLg0KDQpOb3csIGd1ZXNzIHdo YXQ6DQoNCkRlYmJ1Z3Mgd29ya3MgZmluZSB3aXRoIHRoZSBub24tc3BhY2VtYWNzIHByb2Zp bGUsIGFuZCBzaG93cyB0aGUgLTEgYW5kIA0Kd2hhdG5vdCB3aXRoIHNwYWNlbWFjcyBwcm9m aWxlLCBydW5uaW5nIHNpZGUgYnkgc2lkZS4NCg0KRioqKiBtZSBiYWNrdyoqKiENCg0KU29t ZXRoaW5nIGluIHRoYXQgc3BhY2VtYWNzICJnbnVzIiBsYXllciBtdXN0IGhhdmUgc29tZXRo aW5nIHRvIGRvIHdpdGggDQp0aGlzLg0KDQpUaGFua3MgZm9yIGhlbHBpbmcgbWUgd2l0aCB0 aGlzIcKgIEkgdGhpbmsgdGhpcyBpcyBjbGVhcmx5IGEgdXNlciBlcnJvciwgDQp0aGUgdXNl ciBiZWluZyBtZS4NCg0KKEkgZ3Vlc3MgSSdsbCBubyBsb25nZXIgdXNlIHNwYWNlbWFjcy4g SXQncyB2ZXJ5IGRpc2NvdmVyYWJsZSwgYW5kIGdvb2QgDQpmb3Igb25lJ3MgaGFuZHMsIG5v IGRvdWJ0LCBidXQgYWxzbyBub3QgdmVyeSB0cmFuc3BhcmVudCB3aGVuIHNvbWV0aGluZyAN CmdvZXMgd3JvbmcuLi4pDQoNCg0K --------------TSBDwGnrMbZPkCXCpYYzlTEH Content-Type: application/pgp-keys; name="OpenPGP_0x73EA1B1990C53E63.asc" Content-Disposition: attachment; filename="OpenPGP_0x73EA1B1990C53E63.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- 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 EcgRnndY+AgoHVZyVp5NW5c=3D =3DxjfX -----END PGP PUBLIC KEY BLOCK----- --------------TSBDwGnrMbZPkCXCpYYzlTEH-- --------------ZtvSF7YXertFXw08KUDPC06U-- --------------QobX0Hzaeza9TDE0oDAVLumT Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLVTssFAwAAAAAACgkQc+obGZDFPmN7 KBAAoT5hkW/uIwzCzNPkYrYw5j6QUNDb3Aa/puxUfq17tBVJSjVqRdAZrtylsgYde6koXaa6gn00 ba1FtOLqDtFjObMwAkIYFA1AjxuJGKqNTd8clLiZxDr2E/b7jCb/KXrxtLIq4XRqPF3MPpROKV0F dtGdO/TyplhAZxDcp50Ag3TQ5OGZeLL+A+NYDtxOkptU4i7TWrahSrS2rBYFS01QIvkMrzDPrkjQ rOf1eX/BjyxgdqieCgWDm01Sh8YewaGf9dZ+TD/EOo7O3UqsDNzSF6IAJ1DFfWzyqVScS1km4ZPP JdmWPsFNHFJt4zuvybADxZw6GzCjrh9vrCgVWOfUVOfvcDlLKXv4tJkggzqkkEOl0raeWeaGnZYx wXbxOq2pANGztSFdhlTRgcf04Z9ZWKpPSqX8AKdbCMkhryhIaBCVMufqiGbOlWbt74FWnLSPIeQO yWMByBnRtEok/m367IivOb3ns/7T5O+p6NsIAE6qmA9vmw4xQPwc87PPjcCaupC56cd2KXRkKo4c wRc6ZW84qh39zifYxF8RJSq3RoEtbhx7qQhBEOOkmZg3JmNTrNuN80ETziOxF+yYnLcaAxJNFgVy bZoWg6l9YGMENJV3oys9fm1fRoCZA6ku99Qn9PhcLxxyaf+6cmdUaxYZmej7buZVR9BNp55T4oBG XqU= =7qlR -----END PGP SIGNATURE----- --------------QobX0Hzaeza9TDE0oDAVLumT-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 08:19:59 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 12:19:59 +0000 Received: from localhost ([127.0.0.1]:49415 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDPjD-0003It-Hx for submit@debbugs.gnu.org; Mon, 18 Jul 2022 08:19:59 -0400 Received: from mout.gmx.net ([212.227.17.22]:54309) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDPjC-0003Ih-4c for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 08:19:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1658146791; bh=ppWGlSChu4ttHuKGqhzIguHJB58cfX5gLI0LIAozbr8=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date; b=d/WlF40kgBmpQWOt4mlB5JgdetYPKXRXCIRuO4YhbTuV3OI57ADa+S0Mmd4Cc/akC CcKmCHYhcJqMtiF2rs5Q1AC8+hjM9vRS1qXJMfq4KfXvjAg9mhbyNn1sGCUrck5jdK Y4or5GR39G7QluHaotJoQ3mxw27PqgPmE1SqRCtg= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([79.140.112.19]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mlw7f-1nnSUe04R9-00j0OB; Mon, 18 Jul 2022 14:19:51 +0200 From: Michael Albinus To: Gerd =?utf-8?Q?M=C3=B6llmann?= Subject: Re: bug#56393: Soon also looking at your branch In-Reply-To: <5df44dc8-d0e2-576b-6e76-62dd5493739a@gmail.com> ("Gerd =?utf-8?Q?M=C3=B6llmann=22's?= message of "Mon, 18 Jul 2022 14:15:07 +0200") References: <38c1a31040d2d2bc47ae@heytings.org> <87v8ru4tn8.fsf@gmx.de> <51d7ac86-2b29-fe77-4183-ada84192fac2@gmail.com> <87fsiy1w9o.fsf@gmx.de> <5df44dc8-d0e2-576b-6e76-62dd5493739a@gmail.com> Date: Mon, 18 Jul 2022 14:19:49 +0200 Message-ID: <87r12i4nq2.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:pUzdi7fysXnLDIndX/Bs4J3OmMvC2Leog2vknBgTX6xBKA9H1TF YmEDKNFkwdnk8glkTnNbenWrlL4wSmUXeQdgUL32z68+Xmb1f8zDX7d6GNb4iCkzT9cb8Xi NrI/crdXUJ5M6x45avbejl17uV+gdOYm4bxwRHpMvQ6+wz4dYSiYDRPqFQFhqarJg31FTUW ievgfK/wrdPaNLdpzdE1g== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:lw0hHXIK6ao=:qz3+IhApalyhiRTm9abqPq iK+08Ne/byKi8pK4wrUzULvqaVH3293vkthXDkY2y6Y7FCrTXkts/dMVLQP5I5yjBbm9HSB+d RvCZtd/4B3G/mRNJSyfeoOAhYSIBWQu1g9nSG9xgInz+DFmmI3uA6C88rxRI+eOwLfCHDvuBA lN2fSWA+n9A4ZkZi134UfQDwcFbFdJZJ6n0KdncpKFv37VAOS9vl/BA/UC2OwxpIfrhp2BOLj ylj8uaipcOtvYCqAQsfL1tAD+I0LSOTiun+Kxx4wtQZs39w8jGdUqRZQr67RK1sgc6X/ZJt3I wBL0fzRbu4CyHBINnZS73OC69E6KMvB1joQi5cNf2Rc1sC0ORxssxxwj32x2ldyV/HX3ekM/d uv8TKiWmAUmhy7WTCs7ozIH2KHZuV8BLG18JuNlC69gdq7FJ7NemjnbvM0NMdDQ5Taq8hW8OL d+eR8L7j4s9aCI4ncQYS+ax6h8E0T85synV0hwnGZx7/95Ln1HyLjMbmSWA46MGMqn/0yrGQW 0F9+unS6St8j17XQE3UKLOaxOnWAgr1EZn7BEGTsKpG8zVWvc56OdrYJhdMBBR3SahjfSHODl j7VTDhWVuFLL62HMOO/Dca5d9+HM8oyzZ8ajRTiOh56DYpLg7nXPJbuM2SUVb+wUBKSQRBqlg Y89XAOgPMrJGgvdqTrwRy2ZZq4oZgNktLepbt+T0y27pkjPURiFY73tTJ3MGNW2X4H5FaMyuI V96ToscvnPq64hjLNEyYZjkVu3FpHHmtrpBRkb3L7s9rWZkptj1Z8YXKAHu6nowlQCAxjJuxt z6XQurK6WtnKqJrkGtOToISlE8UzD9dAvT6BJ7Rdup/ytYLdwmxYWQTJ4VWMTreBxK31XUxc/ lpeyIJ3EQooqAMRVeK0ffeOVku0dCjDitB/lOvOq2I+D+yE/qD7N7iDRx0rB1sa1OPkmnDJoF V7k3ZLPB6QCBGSwxLeDTJQV3yE8dCGeqr7m65YDZRGRBYCK5bo3U0n2UKQRzUIKTa2K7F/Mmd KNsl4Dcjx0YFX83+Y7Ct60rM81+TKUKJ99hHqM5x0+VZ0Ps7/tRLo+zQ0odK97lRMw4Dn1zTl zGkjK2smWD290Qo711tI2GhgS32KmkebL376McI1QlwFs4P1r54C8zh0g== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Gerd M=C3=B6llmann writes: Hi Gerd, > Thanks for helping me with this! I think this is clearly a user > error, the user being me. Thanks for the feedback. I was a little bit nervous about a hidden debbugs.el error. Best regards, Michael. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 08:20:43 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 12:20:43 +0000 Received: from localhost ([127.0.0.1]:49420 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDPju-0003Kp-Sh for submit@debbugs.gnu.org; Mon, 18 Jul 2022 08:20:43 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39688) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDPjs-0003Kb-DW for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 08:20:41 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35344) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDPjn-0002NB-3W; Mon, 18 Jul 2022 08:20:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=7R3G/UaLXTDy776qjubkW4NOZdDxEqQQhI+BVIT3djg=; b=i2PX5UKSbk9IpZFuAnHj uHNgsAzfriEmg/HZBLNrqAMc8hZ04CNdUYxNgqmfRWqsBSgS7+E8n4z0PFQElhamKglb034mmCGpr 3fPHkC2zBgCQ5sxh3i9Ms3+2SgCLKHXfZAi1tPVWpnR7/TTmbBi3p3tELCh/kST8F3TRk15oGQyFG ACxagubfbBoxWXoePFXqwOCOTKPpsza7BYipS5Owie3Hs1MJR+JCSuSkT66UWccmjLFauFOMBiFmu 7Pn58MiVdcj5wRaMaYxjasI+qlOqBu3EEBuG916LXvAEm4WPD6vfsCW/4wpptRtoSEKeiMGRL8VqE ovcgnYR9YMARpw==; Received: from [87.69.77.57] (port=2452 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDPjl-0006Zk-VK; Mon, 18 Jul 2022 08:20:34 -0400 Date: Mon, 18 Jul 2022 15:20:20 +0300 Message-Id: <83h73epq7v.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 10:19:28 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: =?utf-8?Q?Gerd_M=C3=B6llmann?= , larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 10:19:28 +0000 > From: Gregory Heytings > cc: larsi@gnus.org, 56393@debbugs.gnu.org > > >> I can't reproduce either of these two bugs with a regular build, both > >> of these recipes produce the expected result. Are these segfaults due > >> to --enable-checking? > > > > No, I don't think so. --enable-checking produces SIGABRT, not SIGSEGV. > > Yes, I know, but it's possible that some checking causes a segfault. Not in this case. I guess your OS/architecture don't (always) segfault upon dereferencing a pointer that points one byte before an allocated chunk of memory -- whether this is or isn't detected depends on details of memory allocation and run-time diagnostics. > > The segfault happens because it->bidi_it.bytepos is 1, and FETCH_BYTE > > cannot be called with a zero argument. Here's a relevant portion of a > > debugging session: > > > > Thanks. With that indication, and after adding assertions in the code, I > could make Emacs abort when that problem occurred. I pushed a fix a few > minutes ago. Thanks. The crash is gone, of course, but I'm not sure this is the correct fix. See below. > But I'm still unable to reproduce your second recipe. I tried again and > again, both with a regular and a checking-enable build, with and without > the fix for the first recipe, and with various frame sizes... but without > success. If you can still reproduce it with the fix, could you perhaps > send me a backtrace? I can send you a backtrace from yesterday: Thread 1 received signal SIGSEGV, Segmentation fault. 0x01055028 in get_visually_first_element (it=0x82af68) at xdisp.c:8691 8691 && (FETCH_BYTE (it->bidi_it.bytepos - 1) == '\n' (gdb) bt #0 0x01055028 in get_visually_first_element (it=0x82af68) at xdisp.c:8691 #1 0x010563d4 in next_element_from_buffer (it=0x82af68) at xdisp.c:9149 #2 0x01052bd3 in get_next_display_element (it=0x82af68) at xdisp.c:7786 #3 0x0108a318 in display_line (it=0x82af68, cursor_vpos=0) at xdisp.c:24377 #4 0x0107c178 in try_window (window=XIL(0xa000000007a89d98), pos=..., flags=1) at xdisp.c:20268 #5 0x01078db7 in redisplay_window (window=XIL(0xa000000007a89d98), just_this_one_p=false) at xdisp.c:19675 #6 0x010701d7 in redisplay_window_0 (window=XIL(0xa000000007a89d98)) at xdisp.c:17236 #7 0x0127074c in internal_condition_case_1 ( bfun=0x107017f , arg=XIL(0xa000000007a89d98), handlers=XIL(0xc00000000612fdac), hfun=0x106fe41 ) at eval.c:1509 #8 0x0106fe03 in redisplay_windows (window=XIL(0xa000000007a89d98)) at xdisp.c:17206 #9 0x0106fd99 in redisplay_windows (window=XIL(0xa000000007a89bb8)) at xdisp.c:17200 #10 0x0106e5ca in redisplay_internal () at xdisp.c:16656 #11 0x0106bd8c in redisplay () at xdisp.c:15860 #12 0x01173882 in read_char (commandflag=1, map=XIL(0xc000000007b8e0d0), prev_event=XIL(0), used_mouse_menu=0x82f43f, end_time=0x0) at keyboard.c:2595 #13 0x0118d771 in read_key_sequence (keybuf=0x82f728, prompt=XIL(0), dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9947 #14 0x0116f1eb in command_loop_1 () at keyboard.c:1391 #15 0x01270662 in internal_condition_case (bfun=0x116eab0 , handlers=XIL(0x90), hfun=0x116da7e ) at eval.c:1485 #16 0x0116e51d in command_loop_2 (handlers=XIL(0x90)) at keyboard.c:1132 #17 0x0126f4e9 in internal_catch (tag=XIL(0xfe70), func=0x116e4e6 , arg=XIL(0x90)) at eval.c:1208 #18 0x0116e488 in command_loop () at keyboard.c:1110 #19 0x0116d4de in recursive_edit_1 () at keyboard.c:719 #20 0x0116d77c in Frecursive_edit () at keyboard.c:802 #21 0x011686e6 in main (argc=2, argv=0xa42a10) at emacs.c:2517 Lisp Backtrace: "redisplay_internal (C function)" (0x0) (gdb) fr 4 #4 0x0107c178 in try_window (window=XIL(0xa000000007a89d98), pos=..., flags=1) at xdisp.c:20268 20268 if (display_line (&it, cursor_vpos)) (gdb) p pos $1 = { charpos = 1, bytepos = 1 } (gdb) fr 5 #5 0x01078db7 in redisplay_window (window=XIL(0xa000000007a89d98), just_this_one_p=false) at xdisp.c:19675 19675 if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0) (gdb) p startp $2 = { charpos = 1, bytepos = 1 } (gdb) p w->start $3 = XIL(0xa000000007a89f78) (gdb) xtype Lisp_Vectorlike PVEC_MARKER (gdb) xmarker $4 = (struct Lisp_Marker *) 0x7a89f78 (gdb) p *$ $5 = { header = { size = 1124081664 }, buffer = 0x7665a48, need_adjustment = 0, insertion_type = 0, next = 0x7a89fa8, charpos = 1, bytepos = 1 } (gdb) p w->pointm $8 = XIL(0xa000000007a89f90) (gdb) xtype Lisp_Vectorlike PVEC_MARKER (gdb) xmarker $9 = (struct Lisp_Marker *) 0x7a89f90 (gdb) p *$ $10 = { header = { size = 1124081664 }, buffer = 0x7665a48, need_adjustment = 0, insertion_type = 0, next = 0x7a9c530, charpos = 15000, bytepos = 15000 } As you see, the cause of problem was the same one: try_window was called to attempt displaying a window whose window-start position is 1, which is outside of the "narrowing". This is because, when we split the window with "C-x 2", the new window is given window-start of its buffer's BEGV, in this case 1 -- because split-window runs outside of redisplay, and so doesn't know about the "narrowing". Then redisplay is invoked, and it attempts to reuse the existing window-start point. Since you have now moved the iteration to begin at the "narrowed" BEGV, this crash is also gone. To tell the truth, I'm not sure this kind of fix is the correct solution, because basically its success is a matter of luck (or lack thereof). For example, recall the higher-level context of the first segfault: Thread 1 received signal SIGSEGV, Segmentation fault. 0x01055028 in get_visually_first_element (it=0x82d250) at xdisp.c:8691 8691 && (FETCH_BYTE (it->bidi_it.bytepos - 1) == '\n' (gdb) bt #0 0x01055028 in get_visually_first_element (it=0x82d250) at xdisp.c:8691 #1 0x010563d4 in next_element_from_buffer (it=0x82d250) at xdisp.c:9149 #2 0x01052bd3 in get_next_display_element (it=0x82d250) at xdisp.c:7786 #3 0x01057166 in move_it_in_display_line_to (it=0x82d250, to_charpos=306655, to_x=0, op=(MOVE_TO_X | MOVE_TO_POS)) at xdisp.c:9574 #4 0x01059ce7 in move_it_to (it=0x82d250, to_charpos=306655, to_x=-1, to_y=543, to_vpos=-1, op=10) at xdisp.c:10245 #5 0x01038364 in pos_visible_p (w=0x75fd640, charpos=306655, x=0x82e23c, y=0x82e238, rtop=0x82e24c, rbot=0x82e248, rowh=0x82e244, vpos=0x82e240) at xdisp.c:1730 #6 0x010ca308 in Fpos_visible_in_window_p (pos=XIL(0), window=XIL(0), Lisp Backtrace: "pos-visible-in-window-p" (0x68b0248) "pos-visible-in-window-group-p" (0x68b01f0) "isearch-update" (0x68b01a0) "isearch-search-and-update" (0x68b0178) "isearch-process-search-string" (0x68b0138) "isearch-process-search-char" (0x68b00d8) "isearch-quote-char" (0x82ebd0) "funcall-interactively" (0x82ebc8) "call-interactively" (0x68b0078) "command-execute" (0x82f5a8) This is isearch.el trying to establish whether the position of the match is visible in the window. To do that, it starts from the current window-start position (which happens to be 1), and simulates display of the buffer text portion up until point or until the end of window, whichever comes first, to determine whether point is beyond the end of the window. Your change makes the search start from some much later position instead, which could very well produce incorrect results: pos-visible-in-window-p could decide that point _is_ visible, when it really isn't. (It doesn't happen in this particular case because the newline is far away -- at the very end of the buffer -- so it isn't visible in both cases. But that's sheer luck.) More generally, if you look at redisplay_window, you will see that about 2/3 of its code tries very hard to reuse the previous window-start position, before it gives up and looks for a new starting position. So in any situation where the previous window-start is far enough before point, all that code will basically work with a buffer position that is at risk of being before the "narrowed" BEGV. Thus, any code there which tries stuff like start_display+move_it_to will risk hitting this kind of problems -- either FETCH_BYTE will crash, or we risk producing the wrong result because we force the code to jump to the "narrowed" BEGV before doing anything, while its caller expects results relative to a different position. I think this is because the display engine assumes that BEGV stays put during the entire redisplay_window lifetime, i.e. that all of the subroutines it calls see the same value of BEGV. This is no longer so on the branch, and I wonder whether and how we should handle this new situation to keep the display code stable and reliable. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 08:59:04 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 12:59:04 +0000 Received: from localhost ([127.0.0.1]:49497 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDQL2-0004MU-0L for submit@debbugs.gnu.org; Mon, 18 Jul 2022 08:59:04 -0400 Received: from heytings.org ([95.142.160.155]:42454) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDQKz-0004M3-24 for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 08:59:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658149139; bh=Lg9/J4lh/sOV+TYAAnWco+bq6KBoLPmnUWmfcw1bA+E=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=HDajTYGbSS22Up6mMAXMlTOXYpzdwv1OLVe151pCqcCupCA5kpI6N6ohA416mAYOp IYx4qFU+Q4DmZ7WBmOdoO/HlKGnW2/JxrcnNZM2F7A9iJ02nCcDgMFXoSU2gs6jycy s69GVpovONq28QbntSH885N8V+8rqqMg9Jf0h2JFfO9lqVNc5ovgc27XHAWWQKv/Ji HLefjvKDg6ZAf8KLtG6NbpUaoIyC5jkR4+H5x/PVLBzedPQkgnlsEzDNWhhPfPB55E +rATx0hHpW0eEZoJQPja6Fo7/D6y3hTbA+IV25nFlY3WuHYJJdcv2PN3vRFUjopTRx jDXUHevSBkxCQ== Date: Mon, 18 Jul 2022 12:58:59 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83h73epq7v.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= , larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Thanks. The crash is gone, of course, > That's good news. > > I can send you a backtrace from yesterday: > > [...] > > As you see, the cause of problem was the same one: > > [...] > > Since you have now moved the iteration to begin at the "narrowed" BEGV, > this crash is also gone. > That's good news, too. Thanks for the other backtrace. > > To tell the truth, I'm not sure this kind of fix is the correct > solution, because basically its success is a matter of luck (or lack > thereof). For example, recall the higher-level context of the first > segfault: > > [...] > > This is isearch.el trying to establish whether the position of the match > is visible in the window. To do that, it starts from the current > window-start position (which happens to be 1), and simulates display of > the buffer text portion up until point or until the end of window, > whichever comes first, to determine whether point is beyond the end of > the window. Your change makes the search start from some much later > position instead, which could very well produce incorrect results: > pos-visible-in-window-p could decide that point _is_ visible, when it > really isn't. (It doesn't happen in this particular case because the > newline is far away -- at the very end of the buffer -- so it isn't > visible in both cases. But that's sheer luck.) > Well, this happens only in buffers with long lines, and only when we are inside a long line, so from my point of view it works as expected, and moreover the risk is small. Would the following be better from your point of view? diff --git a/src/xdisp.c b/src/xdisp.c index d69d7440bc..572ad2b854 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -8668,18 +8668,11 @@ get_visually_first_element (struct it *it) bool string_p = STRINGP (it->string) || it->s; ptrdiff_t eob = (string_p ? it->bidi_it.string.schars : ZV); ptrdiff_t bob; + ptrdiff_t obegv = BEGV; - SET_WITH_NARROWED_BEGV (it, bob, string_p ? 0 : BEGV); - - /* Reseat again when, as a consequence of the SET_WITH_NARROWED_BEGV - above, the iterator is before bob. */ - if (!string_p && IT_CHARPOS (*it) < bob) - { - struct text_pos pos; - pos.charpos = bob; - pos.bytepos = CHAR_TO_BYTE (bob); - reseat (it, pos, true); - } + SET_WITH_NARROWED_BEGV (it, bob, + string_p ? 0 : + IT_BYTEPOS (*it) < BEGV ? obegv : BEGV); if (STRINGP (it->string)) { > > More generally, if you look at redisplay_window, you will see that about > 2/3 of its code tries very hard to reuse the previous window-start > position, before it gives up and looks for a new starting position. So > in any situation where the previous window-start is far enough before > point, all that code will basically work with a buffer position that is > at risk of being before the "narrowed" BEGV. Thus, any code there which > tries stuff like start_display+move_it_to will risk hitting this kind of > problems -- either FETCH_BYTE will crash, or we risk producing the wrong > result because we force the code to jump to the "narrowed" BEGV before > doing anything, while its caller expects results relative to a different > position. > I understand. But note that temporarily narrowing the buffer happens only at a few well-chosen places, which are situated rather low in the abstraction layers, so the effect on other parts of the code is nil. > > I think this is because the display engine assumes that BEGV stays put > during the entire redisplay_window lifetime, i.e. that all of the > subroutines it calls see the same value of BEGV. This is no longer so > on the branch, and I wonder whether and how we should handle this new > situation to keep the display code stable and reliable. > I don't know. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 09:34:19 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 13:34:19 +0000 Received: from localhost ([127.0.0.1]:49563 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDQt7-0005IN-6o for submit@debbugs.gnu.org; Mon, 18 Jul 2022 09:34:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:60998) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDQst-0005HE-Bf for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 09:34:15 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:37678) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDQsn-0007Or-SP; Mon, 18 Jul 2022 09:33:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=coaMOL/VRnxP/ieLCsG1fwk+o0rNKP+kqRb3gLe6H20=; b=jdOsDn2fW8VCr9bFufUz h/1/Mq9ZV0yesx6fzNFuryab8tZzXCT5o2Zm2lHSN5AEDxabwdahwGBJYlf65SYuoUPhCghIHDKDf 2B4rfK3xZYZvKuKBogd1sJg1o7RL75WWaEjumfhtivWQ6ry1FuCkPio8YGfv6S6J5Q14U5PYaL5rW 8oC9t6GtszOOlE77eAbfYtnkFPDotdDjZUpmi7n9W+lGNy4NvBgu879x8JOPDLEpcVd/L7T75fNzk RNy42KtbcB9hdMzBxTkora2UzwBGVz2hLsCuW9JwEw0KZ5q5G8p1vsVyWnQuN2dqPN8IsUB9HtuKC Xk3L35w7dfoKhA==; Received: from [87.69.77.57] (port=2958 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDQsn-0004Ft-FO; Mon, 18 Jul 2022 09:33:57 -0400 Date: Mon, 18 Jul 2022 16:33:43 +0300 Message-Id: <83cze2pmtk.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 12:58:59 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 12:58:59 +0000 > From: Gregory Heytings > cc: Gerd Möllmann , larsi@gnus.org, > 56393@debbugs.gnu.org > > > This is isearch.el trying to establish whether the position of the match > > is visible in the window. To do that, it starts from the current > > window-start position (which happens to be 1), and simulates display of > > the buffer text portion up until point or until the end of window, > > whichever comes first, to determine whether point is beyond the end of > > the window. Your change makes the search start from some much later > > position instead, which could very well produce incorrect results: > > pos-visible-in-window-p could decide that point _is_ visible, when it > > really isn't. (It doesn't happen in this particular case because the > > newline is far away -- at the very end of the buffer -- so it isn't > > visible in both cases. But that's sheer luck.) > > Well, this happens only in buffers with long lines, and only when we are > inside a long line Is the last part really guaranteed? AFAIU, the detection of long lines scans the entire buffer, so if there's a long line _anywhere_ in the buffer, the narrowing is applied, even if point is in no-so-long lines. Or am I missing something? > so from my point of view it works as expected "As expected" in what sense? Suppose we really are in a long line, the Isearch match is really outside the window, but if we use point-10000 as BEGV point seems to be _inside_ the window -- in this case the feature implemented in isearch-update for slow terminals will not do its thing, right? > and moreover the risk is small. Not sure this should pacify the fears. > Would the following be better from your point of view? > > diff --git a/src/xdisp.c b/src/xdisp.c > index d69d7440bc..572ad2b854 100644 > --- a/src/xdisp.c > +++ b/src/xdisp.c > @@ -8668,18 +8668,11 @@ get_visually_first_element (struct it *it) > bool string_p = STRINGP (it->string) || it->s; > ptrdiff_t eob = (string_p ? it->bidi_it.string.schars : ZV); > ptrdiff_t bob; > + ptrdiff_t obegv = BEGV; > > - SET_WITH_NARROWED_BEGV (it, bob, string_p ? 0 : BEGV); > - > - /* Reseat again when, as a consequence of the SET_WITH_NARROWED_BEGV > - above, the iterator is before bob. */ > - if (!string_p && IT_CHARPOS (*it) < bob) > - { > - struct text_pos pos; > - pos.charpos = bob; > - pos.bytepos = CHAR_TO_BYTE (bob); > - reseat (it, pos, true); > - } > + SET_WITH_NARROWED_BEGV (it, bob, > + string_p ? 0 : > + IT_BYTEPOS (*it) < BEGV ? obegv : BEGV); I guess it's better, as it reduces the number of cases where the problem could happen, at the price of making those cases slower. > > More generally, if you look at redisplay_window, you will see that about > > 2/3 of its code tries very hard to reuse the previous window-start > > position, before it gives up and looks for a new starting position. So > > in any situation where the previous window-start is far enough before > > point, all that code will basically work with a buffer position that is > > at risk of being before the "narrowed" BEGV. Thus, any code there which > > tries stuff like start_display+move_it_to will risk hitting this kind of > > problems -- either FETCH_BYTE will crash, or we risk producing the wrong > > result because we force the code to jump to the "narrowed" BEGV before > > doing anything, while its caller expects results relative to a different > > position. > > I understand. But note that temporarily narrowing the buffer happens only > at a few well-chosen places, which are situated rather low in the > abstraction layers, so the effect on other parts of the code is nil. I think I agree with everything except the "nil" part ;-) > > I think this is because the display engine assumes that BEGV stays put > > during the entire redisplay_window lifetime, i.e. that all of the > > subroutines it calls see the same value of BEGV. This is no longer so > > on the branch, and I wonder whether and how we should handle this new > > situation to keep the display code stable and reliable. > > > > I don't know. Neither do I. Still thinking about it. I'd be interested to hear Gerd's thoughts on this. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 10:00:45 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 14:00:45 +0000 Received: from localhost ([127.0.0.1]:51765 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDRIj-0006Z6-6x for submit@debbugs.gnu.org; Mon, 18 Jul 2022 10:00:45 -0400 Received: from heytings.org ([95.142.160.155]:42512) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDRIh-0006Yw-BA for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 10:00:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658152842; bh=2ch4MFhI3vc1buXiC99jx4zxgbBK2X/aHiQDhwbLw3U=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=1aKQsGdExJlFOEqYNJ3p4tKBNI0hL0avXJnqpyH+E42/RZc5uy3tGnps2qU9to6CM AxIYhrPZdsbpuGNcg8ptL5NitNSN/n08YGA/LcU+ulOq73nNmC6shYLTF9ZnFNlOdv UUSsbxngYiE33ee/XAQL6g1+9MkCdA/xxAmKewsTWxifvPeIlDX2MJ8BAWMf6BqYI2 r71DA2rG8Y0qr4O2UT2u9f75i6OhP3I0am1Pm8o2GMjEKy36JjrbNJ1MyzZ+YwzYv9 p2fiw/9Jh66nQPwv8SNEOEKL2sjzsGSnRrnwvY7XYDFnA4jPx+lhMbTlRRFzeNbgVU ejuE8BwK7hkjA== Date: Mon, 18 Jul 2022 14:00:41 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83cze2pmtk.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="onaBRdvIzm" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --onaBRdvIzm Content-Type: text/plain; format=flowed; charset=utf-8 Content-Transfer-Encoding: quoted-printable >> Well, this happens only in buffers with long lines, and only when we=20 >> are inside a long line > > Is the last part really guaranteed? AFAIU, the detection of long lines= =20 > scans the entire buffer, so if there's a long line _anywhere_ in the=20 > buffer, the narrowing is applied, even if point is in no-so-long lines. > That's correct, but the narrowing starts well before the visually first=20 element. So when point is inside a not-so-long line,=20 get_visually_first_element will work as usual: it will not stop at a=20 narrowed BOB while searching for the visually first element, or IOW it=20 will never need to search until the narrowed BOB to do its job. > > "As expected" in what sense? Suppose we really are in a long line, the= =20 > Isearch match is really outside the window, but if we use point-10000 as= =20 > BEGV point seems to be _inside_ the window -- in this case the feature=20 > implemented in isearch-update for slow terminals will not do its thing,= =20 > right? > I just tried emacs -Q (setq search-slow-speed most-positive-fixnum) C-x C-f dictionary.json C-s aan zich and everything worked as expected. >> Would the following be better from your point of view? >> >> [...] > > I guess it's better, as it reduces the number of cases where the problem= =20 > could happen, at the price of making those cases slower. > Okay, I'll push that. It seems to work as well. >> I understand. But note that temporarily narrowing the buffer happens=20 >> only at a few well-chosen places, which are situated rather low in the= =20 >> abstraction layers, so the effect on other parts of the code is nil. > > I think I agree with everything except the "nil" part ;-) > There is alas no "near-nil" value in Elisp. =F0=9F=98=89 --onaBRdvIzm-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 10:10:14 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 14:10:14 +0000 Received: from localhost ([127.0.0.1]:51771 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDRRu-0006mQ-9r for submit@debbugs.gnu.org; Mon, 18 Jul 2022 10:10:14 -0400 Received: from heytings.org ([95.142.160.155]:42536) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDRRr-0006mF-RH for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 10:10:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658153410; bh=wsw/haeX9YT10L8bfqn709gDlc5rAoOTip5ndATPBV0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=S/3xleIRrlUEqeldUh8cjF7vCEQTBKqWBrzBW9qpMnY9pS+gqgDMlrTdhIjAc1QuQ VMylMC2StKWtcNzURohMdtdENdv0tyJ6ot8aHtyEBOJ/dhq3Z+QwFjwYAOijz0/z8D RP/pUSY7ISYWOnxdL/K5Qia/1KcYB8eaGV7RZPZi6cf/zxyRfMdVLhcgG4DZOLlK5u sGFW8t5Tnb5NXAp8uBMdGZ7AHGb+VciQhsJbP+e8s7tH+w8zmjBQwsZhrYWi9wvcA+ U6faNfNrlAPzq5YZWKSPBDD2gkERBFqiFg7lng+wmqOuY9XZc/RRb8QaCWKj2xj6XZ lG+PzSJQ2vrDQ== Date: Mon, 18 Jul 2022 14:10:10 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-ID: X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> I guess it's better, as it reduces the number of cases where the >> problem could happen, at the price of making those cases slower. > > Okay, I'll push that. It seems to work as well. > Done. Can you please check that the earlier segfaults are still gone? From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 10:23:10 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 14:23:11 +0000 Received: from localhost ([127.0.0.1]:51777 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDReQ-000767-Ho for submit@debbugs.gnu.org; Mon, 18 Jul 2022 10:23:10 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44606) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDReO-00075s-28 for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 10:23:09 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38384) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDReI-00074E-GA; Mon, 18 Jul 2022 10:23:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=Kb8mbRUQzs6OOTfmKuhymw8+K1CyF3Awy8oRjUmysNk=; b=CK+bedvLuHQU 0NiGmSCHWcFfUPxBZ7jblMwe4aqh2T6OnaxO5UElcXIShVI86fmwtqg4fSMxAyTPFdFSMcVgHOZkg VPvlxjg8stQbneIL789V3M6S+8DzkOwIM+YO4+71gZAN6kRI6nrIo8dG+l6Z1DYPRSu1nTzHp8Ruz o3olvlpn0SacC6ajcPhUv0+NsipkyiUWa2tjrWwA/G46WUo7Sm6pHByiaCbwfmjktwre78sZ31Puc wN3DNe71RujnXpZz4rVdrZOBc6op1ZVvfUWHsNZaVNsfAAIjepwWIjqCkDlTt4d/hdduv573czGkO Fttv/jkaGmkX+hotA/t0oQ==; Received: from [87.69.77.57] (port=2148 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDReH-000610-AO; Mon, 18 Jul 2022 10:23:02 -0400 Date: Mon, 18 Jul 2022 17:22:47 +0300 Message-Id: <838roqpkjs.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 14:10:10 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a310405bd4bbe370@heytings.org> <87a69n98yy.fsf@yahoo.com> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 14:10:10 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > >> I guess it's better, as it reduces the number of cases where the > >> problem could happen, at the price of making those cases slower. > > > > Okay, I'll push that. It seems to work as well. > > > > Done. Can you please check that the earlier segfaults are still gone? Still gone. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 10:35:00 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 14:35:00 +0000 Received: from localhost ([127.0.0.1]:51798 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDRps-0007Oz-0C for submit@debbugs.gnu.org; Mon, 18 Jul 2022 10:35:00 -0400 Received: from heytings.org ([95.142.160.155]:42566) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDRpq-0007Or-4i for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 10:34:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658154897; bh=TnS2gLuLNIWcEGiFljxt2fRE3Y1fc2tF7ndCdARZ0aQ=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=xtS47YKzNoxvgqwcrJA9u13qR5BSFjcm2ZVIZMCPuY95wNJR/MypLOzbWMDKAvkYr ZuJU2Tipiws2JCIYMRE0RhrjVF/AEeNL2mCRfz+ijroYWZfnl4aA7STQHRXv7e9YCQ h86OuOGPwOLCSCNBjOjPm1YsLKFMD+yrBmjU+jLALGKCBD9vc2GkhGD3ZqlIUg5TSj 6Ty6OG2M/KmHo5OeW5WQk5CW33275Nv0BxD5dyBbFOs98W1h8LatNU7cNd+Qy3CMvK TOTZlDNBy/RAOTc/oH8jqrb2efM6ganPAkP3BkOCAzKkOGSfUPE1gvq+ROdOeov+Y/ 3g2oBJG9qpjQg== Date: Mon, 18 Jul 2022 14:34:56 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <838roqpkjs.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Done. Can you please check that the earlier segfaults are still gone? > > Still gone. > Great. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 12:06:58 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 16:06:59 +0000 Received: from localhost ([127.0.0.1]:51887 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDTGs-0001Pi-Kz for submit@debbugs.gnu.org; Mon, 18 Jul 2022 12:06:58 -0400 Received: from heytings.org ([95.142.160.155]:42676) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDTGn-0001PV-73 for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 12:06:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658160411; bh=4NjVmfkOFHC2z/0N8XIPEDO7dTG/aRYANUm/G71hfuk=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=1/jlgDDvDqnPHSNfPUN/jYwL42W+22yiFYtZ+21CiyklQrT5qhABWY2bJb1S3I/fm zMj7WHQyFHlCfNiN9elzDRaXrra+0cBO5A90hy/+jI2myHH3OfKRtqHGw4ja3OlbFQ fmx8cO0Y6lB6MG6uz96W+SpYp+x0lLVoJYicS6rDp/aeOzVVrqY9VhyKcJRd6vLjvd tzDbAvX0oCGm+3nDv6e8t2YCtMv1uq85lisMziCpGviFYVoVs7+rybx9jfFjcJ5uQL /YHANc7Ng2YYKmYJBn3yxeugS2Uhhtyb7xgVA1N9TBRbGYoM0WfjEiFyWVrbc2Iye/ 2adDxWVHG1eNA== Date: Mon, 18 Jul 2022 16:06:51 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <838roqpkjs.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) And I just pushed an improved heuristic to detect long lines. The code to detect whether the buffer contains long lines will only be executed when two or more characters have been added in the buffer since last redisplay, which means that normal typing (that is, one character at a time) is now entirely unaffected by that detection code. On my laptop that code takes only 1 ms in a 20 MiB large buffer, but that's still too much for my taste. Of course in theory one could add a very long line, one character at a time, in a buffer, but doing so without sometimes adding two characters between two redisplays is near to impossible. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 12:21:30 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 16:21:30 +0000 Received: from localhost ([127.0.0.1]:51906 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDTUw-0001pO-GL for submit@debbugs.gnu.org; Mon, 18 Jul 2022 12:21:30 -0400 Received: from heytings.org ([95.142.160.155]:42696) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDTUv-0001pF-Dh for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 12:21:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658161288; bh=js89QEC9/u2Ml38bNHDw2fVa6tie5GVTxL3KHdvA5rw=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=1IvelcPNdbbVd/AR8MH9OLB7Olg54c46ttdtrIQg/Y/ZbxWPlbFVcpTB7YqqfRhXg p5HjI8a0eo+UvAvCctvHNv71PU/WWDMGFGHHBqbuddhzNIm7GnLWycToBp6qlSmA5A oV5w8to9zLh7CgLJ/Gz4inpEluc5EqvyHXRhudWwyClPPEMzrf2ZcnAsfiB3Ch2l3f n0mdXSv+OILv/Ryu+ROGqFVzAt2ZepWrS1E/yHdBeM+3RuWKYjARrJntdAW/zQpbJ8 LQjL1PdapTYZWR3B9o8CiOLl/7h2CCFal3i1Ahmms9fKWpnFojLTG6iL3h8bCnuzyL SGaGFrYn2XsLA== Date: Mon, 18 Jul 2022 16:21:27 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) By the way, one last optimization would be possible in get_narrowed_begv. Is there a way to check (efficiently) whether the buffer is displayed with a single font in a single size? Or IOW, whether the buffer is displayed in a "character-only terminal" way? From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 12:48:51 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 16:48:51 +0000 Received: from localhost ([127.0.0.1]:51935 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDTvO-0002Zh-TT for submit@debbugs.gnu.org; Mon, 18 Jul 2022 12:48:51 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51518) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDTvJ-0002ZQ-FF for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 12:48:48 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40486) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDTvD-0004l3-Up; Mon, 18 Jul 2022 12:48:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=HEHEpWIosTQJsV+yZ+KBbLoCxqu/purt5ajWKFdg1es=; b=k43foEBUYK60 w52lrsvjG2lSZNJZ1LpTrn+IXBPE37GTDInVSG7BiKc/hQR5vfbFTQXWY1TbtDfUDawcpnCfIn+J0 eZTYyfOxvRVzrp8nSwAwi/yqvmxymg0t+9hNJ0w+69qLgtMJ3Y91MvT46JV1i5vJwzb/SWT7ytMAn G5GGUrdIGaMz/tgyd15DmozLEb+02RpTD+fbWX+adv3lvBPScu9AqFakzg6iLxuaes1MFoQ2zDyUd n/+PDdcEUQHVTw6+Uy83QjZUX13IArzVEJMvRlmEt7iqU6jCs/tqqLMLksGs4m9rVUsadInpJ86ZG 1Stscn5O0F3MasTUA7p8Ww==; Received: from [87.69.77.57] (port=3066 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDTvD-0003Vx-Dp; Mon, 18 Jul 2022 12:48:39 -0400 Date: Mon, 18 Jul 2022 19:48:25 +0300 Message-Id: <831quipdt2.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 16:06:51 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a31040f5546dbd3a@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 16:06:51 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > And I just pushed an improved heuristic to detect long lines. The code to > detect whether the buffer contains long lines will only be executed when > two or more characters have been added in the buffer since last redisplay, > which means that normal typing (that is, one character at a time) is now > entirely unaffected by that detection code. On my laptop that code takes > only 1 ms in a 20 MiB large buffer, but that's still too much for my > taste. Thanks, but couldn't we use the existing BUF_CHARS_MODIFF for that? And I found a scenario in which redisplay is still very slow, as slow as the master branch. Here, try this: emacs -Q C-x C-f long-line.xml RET Now, do NOT disable font-lock, and wait for Emacs to say "Valid" in the mode line (to get nXML mode out of the way). Then: M-x toggle-truncate-lines RET Now simple cursor motion commands that use redisplay optimizations are fast, but commands that cause more thorough redisplay are as slow as on master. As a simple example, try just "M-x" and wait until the "M-x" prompt appears in the minibuffer -- here it takes much longer, basically as long as the version on master. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 13:05:21 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 17:05:21 +0000 Received: from localhost ([127.0.0.1]:51955 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUBM-0002zm-MP for submit@debbugs.gnu.org; Mon, 18 Jul 2022 13:05:21 -0400 Received: from eggs.gnu.org ([209.51.188.92]:54664) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUBJ-0002zY-Qk for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 13:05:19 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40948) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDUBE-0007Ov-Gd; Mon, 18 Jul 2022 13:05:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=OqRpkiLhkTw3ieZX8rsV/f30lzuphw0LJivi6zMwTUc=; b=lmjNPRbT/bJH qhr3eDH214fohHA6OQmc3TUxLHK6M9fDdniu/d+17h6pMUjDyfOEfJov06QMY57lshVj81F2X3PPz V6XjNwRnrX60f9NYwSvwse5OiWuG7PFCQHRh+nRhazqXBrhptfVeREk1jyI92Eqvntjq/CjhBkBuD N4HhaPoEORZJSCMWGQVy3auRGUUjFGWm0oM7iHcCcgK4AzLpROa8yOZ0k5WtDaBg0bAxbM0sGbwQz g8Zx0aJ89D99mp4G2emKVGhoRm/ymp/ueiU6goW9H1kkeRSydrf7bTdaaIWepnHIJderVPrki8Drm ESheJOBYm3NxHUVlVZ7OnA==; Received: from [87.69.77.57] (port=4066 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDUBA-0005wD-3I; Mon, 18 Jul 2022 13:05:11 -0400 Date: Mon, 18 Jul 2022 20:04:54 +0300 Message-Id: <83y1wqnyh5.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 16:21:27 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <87czej6buq.fsf@gnus.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 16:21:27 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > By the way, one last optimization would be possible in get_narrowed_begv. > Is there a way to check (efficiently) whether the buffer is displayed with > a single font in a single size? Not that I know of, no. At least we don't keep this information anywhere, even after we compute it for display. In particular, if we never displayed some part of the buffer since the beginning of the session, we don't even know what fonts that could require. And computing that takes the same effort as displaying the text in the first place. But maybe I misunderstand the question: what do you mean by "buffer is displayed"? We never display the entire buffer, only as much as fits in the window. So do you really mean "the buffer" or "the portion of the buffer visible in the window" (or something else)? > Or IOW, whether the buffer is displayed in a "character-only > terminal" way? That translates into a lot of potential issues. First, you need a fixed-pitch default face, right? Then you need to ensure we don't have any characters that are displayed by fonts other than the default face's font, either because these characters aren't supported by the font, or required by some non-default face, or even because some face requires the default font, but with a different weight or size or slant. You also need to make sure there are no overlays in the buffer, and no 'display' or invisible properties. Maybe also that tab-width is at its default value? Maybe there's more. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 13:07:30 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 17:07:30 +0000 Received: from localhost ([127.0.0.1]:51959 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUDS-00032v-82 for submit@debbugs.gnu.org; Mon, 18 Jul 2022 13:07:30 -0400 Received: from heytings.org ([95.142.160.155]:42750) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUDP-00032l-NM for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 13:07:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658164046; bh=3Q0D8i/7zXHTngW4chwiFvs0XMfUj5Bl0zej+1sPPko=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=D6ehrmGgWAxF03R/5kSaXqSZg/EsuWSBHq1QUGoLIuiLJD7Z12MGY60rfFIfP0XoC v9+ERcz38B8aGnrvwLRKnrXp2QeIUUyM1wfJ+G9PwG7A6aBe0SKfd2BZkeunzPplIJ EJZrQsuQMW50EwjDCGV10sDjoc9ZASkhpb01ZNFmyyL4QjwU16mJFJAF9udOCHXa9v 7tqAzKKDOSgYKt/2+3t2TB+4maBCJyRfu8lUBwvl3eg/tGzqPSQbor7utj19GSNw4y q5Ks7tV+QVGyjY5e5TiTIl3wMolGpBmRqY1EAV1g2MCSGgUKC0mVH28frb0msulxzl ZZfLJm2TtV2Jw== Date: Mon, 18 Jul 2022 17:07:26 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83y1wqnyh5.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <83y1wqnyh5.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Not that I know of, no. At least we don't keep this information > anywhere, even after we compute it for display. In particular, if we > never displayed some part of the buffer since the beginning of the > session, we don't even know what fonts that could require. And > computing that takes the same effort as displaying the text in the first > place. > > [...] > > That translates into a lot of potential issues. First, you need a > fixed-pitch default face, right? Then you need to ensure we don't have > any characters that are displayed by fonts other than the default face's > font, either because these characters aren't supported by the font, or > required by some non-default face, or even because some face requires > the default font, but with a different weight or size or slant. You > also need to make sure there are no overlays in the buffer, and no > 'display' or invisible properties. Maybe also that tab-width is at its > default value? Maybe there's more. > Thanks for the detailed explanation. It's clear that computing that information would largely outweigh its potential benefit, so I'll have to live without that potential optimization. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 13:09:26 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 17:09:26 +0000 Received: from localhost ([127.0.0.1]:51964 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUFJ-00035o-NQ for submit@debbugs.gnu.org; Mon, 18 Jul 2022 13:09:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:55400) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUFI-00035b-B7 for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 13:09:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41084) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDUFD-0007pH-45; Mon, 18 Jul 2022 13:09:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=95DFEYpl7K0glY/+nhrapYIfGijPz8RtFw7XYA00Tyo=; b=fqn3xP/OHksz IZ+VncxF9vDjrUjaUYXbB+gwxhqlDXM4wDwi/MiwADj+i8b4ERoxN86QP0RKRG1TbTPiHWUkUz6aP o3+JufacTdj2Dy6ixayS+V5ooJdNGIjOeUzN6AbF3XjNF8TQ3RZriM4jLp9F7mY6uhAFhrQTegGHE UayBKhKIcT/vNKBFWlstuFRwlsD98WYeFa5XR1ymIBgQMefNgjXVUMSWX1dNN0G4Ph8nPWZ6UYoD+ CXK0edKbWq8JO1MX0m104l/xQKIBwk5R5krFB5D5jAnzJt/JwdOPOrpnRGE1/b+2jAxXZYGqJqeuR 9YMmNv3b7kNx6C0WRCDgpQ==; Received: from [87.69.77.57] (port=4323 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDUFC-0006aO-EB; Mon, 18 Jul 2022 13:09:18 -0400 Date: Mon, 18 Jul 2022 20:09:05 +0300 Message-Id: <83wncanya6.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 17:07:26 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <83y1wqnyh5.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 17:07:26 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > Thanks for the detailed explanation. It's clear that computing that > information would largely outweigh its potential benefit, so I'll have to > live without that potential optimization. If you had a way to do this, for how many characters would you need to have this info? (I presume you want it for characters before point, but how many?) From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 13:11:27 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 17:11:27 +0000 Received: from localhost ([127.0.0.1]:51969 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUHH-00039K-7b for submit@debbugs.gnu.org; Mon, 18 Jul 2022 13:11:27 -0400 Received: from heytings.org ([95.142.160.155]:42772) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUHF-00039C-Bx for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 13:11:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658164283; bh=e6Jel9Q8X2rcQsCC1XPF+Ac13w2qxvy60aPEGSIPacw=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=ORO/lP8Q/1x8keMyM0urgofmjCjna9rgZvifuehv8jR5LVWOwhOCQDWrSJIMr96Qu HJWTHQkY8dL6jFizQxcXsef+dg548UA0gDJoXDWCPnlRttAl/Jg1Egj6lkU4JqsDun xkV6O4r7obCPk50/JL4KsDUvdMQqRzrG4N9ZjLZuSOfsvgveGagloMRoxKUnMzJns7 2JItDmjvqe3RXF1VklRLlzXjSNzdElbePw+yNaIwy+gdxro5QfLGkGbn4NaJW5SEO8 yT7akbtCFYm2+9TWkxPI6TUx8jaHJLZHi7xd2N6/CSGz8x3Nj/Vqgh2rrnIrGfSaqT EbkMlZnsgJoEw== Date: Mon, 18 Jul 2022 17:11:23 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <831quipdt2.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Thanks, but couldn't we use the existing BUF_CHARS_MODIFF for that? > I'll have a look, thanks. > > And I found a scenario in which redisplay is still very slow, as slow as > the master branch. Here, try this: > > emacs -Q > C-x C-f long-line.xml RET > > Now, do NOT disable font-lock, and wait for Emacs to say "Valid" in the > mode line (to get nXML mode out of the way). Then: > > M-x toggle-truncate-lines RET > BTW, there is now a C-x x t binding for that. > > Now simple cursor motion commands that use redisplay optimizations are > fast, but commands that cause more thorough redisplay are as slow as on > master. As a simple example, try just "M-x" and wait until the "M-x" > prompt appears in the minibuffer -- here it takes much longer, basically > as long as the version on master. > Yes, it's a font locking issue. Turn font-lock-mode off and the problem is gone. As I said, I'll look at that later. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 13:19:54 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 17:19:54 +0000 Received: from localhost ([127.0.0.1]:51974 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUPS-0003Lf-5M for submit@debbugs.gnu.org; Mon, 18 Jul 2022 13:19:54 -0400 Received: from eggs.gnu.org ([209.51.188.92]:57684) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDUPN-0003LP-39 for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 13:19:52 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41296) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDUPH-00012v-HI; Mon, 18 Jul 2022 13:19:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=3GZbr/dJ8rmr6B0zG3kiJQgMhojNfshzjojVc1ScoYU=; b=nddsfIsSR8KF +bFOHLoYm5Adj9RCRMSkiw8HyXtrJIN2R44ujLTD6e9RQTvioyNE1PQ2iTLBFexTKOpKDX2R9hfVx 8TjVLyfWKo3ccHfT5tg8MorAIyjdVLRXqX0a72njvgdzLcaGKJrL9zOjcKbSqEd9Xsdg8uxioex7r vG8k0X78cWGZx9ppIxLjvB88wuYzZyDXJ2GYvCz/61AURqCj3T5XjEU1ksp788r+vbcLNUr8K39CJ 2aV9o2dDzDPBWNnd6SwwQ81XRVlgoPUn0vRgnU0fKWEC2RVBlvu+ad9d6GWNt6QRO9soIOI+KgSP2 4hPMltGLLXqaApQVNL/r9A==; Received: from [87.69.77.57] (port=4954 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDUPF-0006fX-IK; Mon, 18 Jul 2022 13:19:43 -0400 Date: Mon, 18 Jul 2022 20:19:28 +0300 Message-Id: <83v8runxsv.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 17:11:23 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <38c1a31040e66d2b273e@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 17:11:23 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > M-x toggle-truncate-lines RET > > BTW, there is now a C-x x t binding for that. Old habits die hard ;-) Besides, what I really type is M-x tog TAB tr TAB RET > > Now simple cursor motion commands that use redisplay optimizations are > > fast, but commands that cause more thorough redisplay are as slow as on > > master. As a simple example, try just "M-x" and wait until the "M-x" > > prompt appears in the minibuffer -- here it takes much longer, basically > > as long as the version on master. > > > > Yes, it's a font locking issue. Turn font-lock-mode off and the problem > is gone. As I said, I'll look at that later. So you are saying that font-lock becomes much more expensive when lines are truncated? Because the comparison is with the same file and font-lock turned ON, but without line truncation. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 14:17:47 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 18:17:47 +0000 Received: from localhost ([127.0.0.1]:52046 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDVJT-0004rq-Ih for submit@debbugs.gnu.org; Mon, 18 Jul 2022 14:17:47 -0400 Received: from heytings.org ([95.142.160.155]:42842) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDVJO-0004re-93 for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 14:17:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658168260; bh=GpX7u9x4vwt6Luwd6+eNKVR2whuoHLnSlUlHTzWuKgE=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=o2ItDq/4E4MMF57MSV8Sb8pjp+CWYbOgEN3cFlDDbd4vVHnBpUDeGUXAZ00paNo53 KY3EuNdzw4BWZfS7oHhTTRnMZhXmfx55Sxf8e7yTtFmyec578GHdTn8wMbJEc4BqEp HvgXou59V8qxN2jafMHc/lNv894ydjz0NfzUollelvvnalvV4+3RPvOhZVs2yMx7RM eQo4aMaBDrNQdxqr/0hQJLzOHlkJ4UhqJt8uyPwWWg0JCo3xdWF+PH67QZltNYZPmU XITfjccgl++W0eh/ZeHZsRn3p41fZwgCFruhVh8PUaQ8onJMivOZE+La66EcP5drH9 DnxhOhg2AIs+A== Date: Mon, 18 Jul 2022 18:17:39 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83v8runxsv.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83v8runxsv.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="fw7H9DnQ1A" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --fw7H9DnQ1A Content-Type: text/plain; format=flowed; charset=utf-8 Content-Transfer-Encoding: quoted-printable >> BTW, there is now a C-x x t binding for that. > > Old habits die hard ;-) Besides, what I really type is > > M-x tog TAB tr TAB RET > 10 keys instead of 4, a 250 % slowdown! =F0=9F=98=89 >> Yes, it's a font locking issue. Turn font-lock-mode off and the=20 >> problem is gone. As I said, I'll look at that later. > > So you are saying that font-lock becomes much more expensive when lines= =20 > are truncated? Because the comparison is with the same file and=20 > font-lock turned ON, but without line truncation. > I can't give a precise answer to your question. All I can say is that I'm= =20 sure that font locking slows down things significantly. After opening=20 that file and typing C-u C-x x f C-x x t, editing is fast. That being=20 said, perhaps there are specific optimizations to add for=20 toggle-truncate-lines. Which would be yet another subsection of this bug. --fw7H9DnQ1A-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 14:26:28 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 18:26:28 +0000 Received: from localhost ([127.0.0.1]:52050 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDVRs-000557-Gg for submit@debbugs.gnu.org; Mon, 18 Jul 2022 14:26:28 -0400 Received: from heytings.org ([95.142.160.155]:42854) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDVRn-00054t-Tw for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 14:26:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658168782; bh=0L4cQMghFG56XarVYzOyzLy4Ugxt7lNIpQPHP08/SFE=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=d+hJ5VE0TP8lAS5c2wnleXvr0woayYdP4lJoD72fSZo0+wdpCfNbQGadceZeCGSwy boMwdW/i7k+8AsUFpysSZcEql7qYYg+U2n6wkpALB2dzv0Ms3dkYeiemHVyp+cjIUz ilMLZqQECVUuQKID78S2QT7+/ZeAMd2Av4/MAGFKtD5zEviDlS8oCG/d+ypgQwuHn4 Z3FFM1SX+6c7fMhAuZiu++uff1Mc9yFcnw0vWyhTSbe/df06KK8duMNFzEvkP7UL2r M0AqtoYufOq8W4KwPYQQkVCnAUaf9Iue9K5/aJAmeXufozS0p6Z6MlyK4PGdxjJDLH jrhm9w7R/DlnQ== Date: Mon, 18 Jul 2022 18:26:22 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Thanks, but couldn't we use the existing BUF_CHARS_MODIFF for that? > > I'll have a look, thanks. > And the answer is no. (I tried to use it, but did not remember the reason why it was not usable in this context while writing my previous reply.) I don't know what BUF_CHARS_MODIFF records, but it is for example == 2 before and after C-x i dictionary.json RET. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 14:33:53 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 18:33:53 +0000 Received: from localhost ([127.0.0.1]:52060 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDVZ3-0007Qn-Gd for submit@debbugs.gnu.org; Mon, 18 Jul 2022 14:33:53 -0400 Received: from heytings.org ([95.142.160.155]:42872) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDVZ2-0007Qg-7a for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 14:33:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658169231; bh=cftZX+SdGFlkiZTDZ0No+FRZKGKllHTcIZFcsIv3kRE=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=AfxjGadbeqp4j5KMSZpdhTtS/vJRWG3DJePUmLO0CbxOit7+Me61oy2Mj5oCxQupQ vZCPgSwz+fc9yRzNdmG7e2YV2WkEFm+ztQY2CpT715X7KgrUUsr+iQavq3qWUnCXQU x5tssKA/rSE54u4XObxuOFfHgnSxHslpJT3yVbLAd9tlU0uKWqevkqr++gNt+fynFX TKgHYk6K7iZOil3abDHTfFkg/pFbFJnZ5UE+AuqasLlS+9XfU7RvV7uCPHj6Nxsm5A +Na8U5sXyVsMaZTzUsZSOmvMWzgdjmype5cwINjs+T8f9NIr7YBogR2LLfrnWy21cy Fd/jCK2H26TCw== Date: Mon, 18 Jul 2022 18:33:51 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83wncanya6.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <83y1wqnyh5.fsf@gnu.org> <83wncanya6.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Thanks for the detailed explanation. It's clear that computing that >> information would largely outweigh its potential benefit, so I'll have >> to live without that potential optimization. > > If you had a way to do this, for how many characters would you need to > have this info? (I presume you want it for characters before point, but > how many?) > For something like two screenful characters before window point. But as I said, if the infrastructure does not already exist, it's not worth the price. I asked just in case I missed something, because I did not want to omit an potential optimization, but (as you probably understood) I'm firmly against over-engineering. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 14:57:07 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 18:57:07 +0000 Received: from localhost ([127.0.0.1]:52118 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDVvW-00086D-T7 for submit@debbugs.gnu.org; Mon, 18 Jul 2022 14:57:07 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52574) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDVvV-00085k-70 for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 14:57:05 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:43928) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDVvP-0000ns-LU; Mon, 18 Jul 2022 14:56:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=2W8GofB+cPWH4j/9cqZakXhoK9F9+/IQJ0U24uGNig0=; b=Tbl8W6hG4eok Q2Mz0sujCWqoxJX3zcWwNK5AFI2prEkbOoVimexynH7uUFs0Sbue/MYx1PMhfGBuPildGlcL5y/4W 4JGZd1ThU9UJ7sKtBL9l9B2g9KXr3ZAHXZrT1koYEU4did9c1a+vkwHeRPssOG2TlpDGJDjwinKFn dTJ4cavRdgFq8nnmyUgiHJaWL4mhFRHLv1Abf/ljxe3eOKiXJKu84A1lAAJvj6nndeuIbtf8+BGjB t6mUErTHsVZ9w57iAzFz7E6dOMN11dzjxJ0+fnBadFU+jrEvteM2+piAe2C9VOXuKUmQQ0W3DeNEn yPrY47pUWADAaHzZu4k4xA==; Received: from [87.69.77.57] (port=3022 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDVvP-0002N5-2L; Mon, 18 Jul 2022 14:56:59 -0400 Date: Mon, 18 Jul 2022 21:56:44 +0300 Message-Id: <83r12intar.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 18:26:22 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 18:26:22 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > >> Thanks, but couldn't we use the existing BUF_CHARS_MODIFF for that? > > > > I'll have a look, thanks. > > > > And the answer is no. (I tried to use it, but did not remember the reason > why it was not usable in this context while writing my previous reply.) > I don't know what BUF_CHARS_MODIFF records What BUF_CHARS_MODIFF records is documented in the doc string of buffer-chars-modified-tick. > but it is for example == 2 before and after C-x i dictionary.json > RET. It's a bug, plain and simple. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 16:14:24 2022 Received: (at 56393) by debbugs.gnu.org; 18 Jul 2022 20:14:24 +0000 Received: from localhost ([127.0.0.1]:52310 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDX8K-0003ug-DY for submit@debbugs.gnu.org; Mon, 18 Jul 2022 16:14:24 -0400 Received: from heytings.org ([95.142.160.155]:42968) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDX8J-0003uY-6w for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 16:14:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658175262; bh=SSX2BtPlS9Mq2dg3bmSBj7wZYplJrp3AOaNeH/unFS0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=n2CIiI+bZ8I6F6fHKFcSvmnChcneVW4vr96FrnEryI/Gobj+M0jkbuV8goN/BXH3Q m+gynMMdRwYBcP+L5AGBLB7GGtpazFR/5qiNhW4avSMIo8OOQXZu5n7RRyJXgkpmM2 MmDUApj5GPcvhBhg7CWYGj4rLnHwm6i4f7gAoFg0vDrJmKJpN2CJsKvg3G2ptbPlgO OJMDIWNeJRS3rXIWhJOAV8t9VXYzzaW+xJ8onTpNtwFPyaoMtwecdS0cttoodVyeNU 6ka15/tZ4gveyWiZutSKOqYK1vfJMJoR6+wLS7EDay4titnK3LDciEC2kKKXnRXSjA gcQ/VlMcM78Hw== Date: Mon, 18 Jul 2022 20:14:21 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83r12intar.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-ID: X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> And the answer is no. (I tried to use it, but did not remember the >> reason why it was not usable in this context while writing my previous >> reply.) I don't know what BUF_CHARS_MODIFF records > > What BUF_CHARS_MODIFF records is documented in the doc string of > buffer-chars-modified-tick. > Yes, I know. But, even if it had no bugs, the doc string does not seem promising for the present task AFAICS: Each buffer has a character-change tick counter, which is set to the value of the buffer's tick counter (see `buffer-modified-tick'), each time text in that buffer is inserted or deleted. By comparing the values returned by two individual calls of `buffer-chars-modified-tick', you can tell whether a character change occurred in that buffer in between these calls. What I'm interested in in this case is not simply "whether a character change occurred", but "how many characters were added in the buffer". I want to calculate whether the long line optimizations should be enabled if and only if two or more characters were added in the buffer since last redisplay. That is, neither if only one character was added in the buffer (which is what happens during normal typing), nor if characters were removed from the buffer. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 22:35:06 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 02:35:06 +0000 Received: from localhost ([127.0.0.1]:52479 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDd4k-00059Q-5n for submit@debbugs.gnu.org; Mon, 18 Jul 2022 22:35:06 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44796) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDd4h-00058p-8h for 56393@debbugs.gnu.org; Mon, 18 Jul 2022 22:35:04 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54448) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDd4b-0005tL-Ld; Mon, 18 Jul 2022 22:34:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=Bj7zSVRKHRpeU2z3xrMB4G5dcfrtmfU73KoQtdn8HFI=; b=lnKlqlX0zT3F 7sgsDGt2hJj1Zi2XgQtc5/KucQ/+bGkfwTnZVidOtaL5p54Yhwwg5LtfIICU2Ls0YLYkcT93goxBG gFhEHUSIIzer9ChzXbQFXaN7NatX9ivBfJO1GSJU7SwuX+7Czi0Iibk5gugQuD5yzFnP8syS8PJ2B VtlOPgth8OXcCC6iMSFM+q2jMFilBWnczAnGVzELis1K3nfU+a2tOE26ovHux9LgsCO8S6BTnmK/0 SShSpqX3iFGgA0vy6qiOqhggJrOKAtjszuJxCgnb3fWjllYFQgfKXyPQwdXPAU3pX4/+3zQLmevAW ApqkC85NaU8YK+lAXuV4Bg==; Received: from [87.69.77.57] (port=3040 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDd4b-0003mf-5H; Mon, 18 Jul 2022 22:34:57 -0400 Date: Tue, 19 Jul 2022 05:34:45 +0300 Message-Id: <83lespomnu.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Mon, 18 Jul 2022 20:14:21 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 18 Jul 2022 20:14:21 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > Each buffer has a character-change tick counter, which is set to the value > of the buffer's tick counter (see `buffer-modified-tick'), each time text > in that buffer is inserted or deleted. By comparing the values returned > by two individual calls of `buffer-chars-modified-tick', you can tell > whether a character change occurred in that buffer in between these calls. > > What I'm interested in in this case is not simply "whether a character > change occurred", but "how many characters were added in the buffer". I > want to calculate whether the long line optimizations should be enabled if > and only if two or more characters were added in the buffer since last > redisplay. That is, neither if only one character was added in the buffer > (which is what happens during normal typing), nor if characters were > removed from the buffer. Why just "added"? Deletion of characters can also create long lines, if the deleted characters are newlines. Also, what if since last redisplay N characters were deleted and N other characters were added? Isn't there a good chance that the long line optimizations could now be needed in that case? BUF_CHARS_MODIFF will catch all of these, while just looking at the buffer's size won't. And that's on top of the main reason: BUF_CHARS_MODIFF exists for a long time, so introducing yet another similar counter sounds like not the best idea to me. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 01:39:30 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 05:39:30 +0000 Received: from localhost ([127.0.0.1]:52571 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDfxB-00027J-Ny for submit@debbugs.gnu.org; Tue, 19 Jul 2022 01:39:30 -0400 Received: from heytings.org ([95.142.160.155]:43490) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDfx8-000277-9f for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 01:39:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658209165; bh=MSrO1WWru9WsSl9UIBKQthKyZSOis5XiP1I8roFxWhg=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=krSsOEkL8XBLihZ7/PtevCLrP68oK97Gq2hSNSFQG/n3XCnAIPtSywl55eNnEYatk GN3D/Z6YU6OkVX/+N3ARpp+DUUtHV93sJtm8LTAB1LchvYQrzXEa6lDcLnRrX1BewJ c8YuU9LUkDUaM5zr2UnnyIMIkfRLVxZjUDLMIQsd1slLFsTj6EgfpLKbUR/c3fCIgO FZS+LNXirbfXJQK6Wz5YBzgJ5Vg6cpP4jbf4wv65fcjgeoVO5UHq3BXU10TynQKnUx /lwbKIHOMOkNy4hsz14hxbxGywDigU7+2zz54oa0bun89W/LTGVgGuyLuygQbNATmD Y7VDdO6xB66WQ== Date: Tue, 19 Jul 2022 05:39:24 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83lespomnu.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Why just "added"? Deletion of characters can also create long lines, if > the deleted characters are newlines. > Indeed, somehow I missed that possibility. I think a better heuristic would be: if more than one character was added or removed from the buffer, check whether the buffer contains long lines. I want to avoid affecting normal typing as much as possible, even if the effect is small. > > Also, what if since last redisplay N characters were deleted and N other > characters were added? > You mean for example M-% C-j RET SPC RET? Indeed, that's yet another possibility. > > And that's on top of the main reason: BUF_CHARS_MODIFF exists for a long > time, so introducing yet another similar counter sounds like not the > best idea to me. > To be honest, I don't really understand the purpose of BUF_CHARS_MODIFF. As the comment in buffer.h explains: "It is set to modiff for each such event, and never otherwise changed." So it doesn't contain new information. And it's inconvenient that you have to keep a copy of its previous value around, using MODIFIED != UNCHANGED_MODIFIED as I did earlier is much easier. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 04:21:11 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 08:21:11 +0000 Received: from localhost ([127.0.0.1]:52735 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDiTf-0000Gv-8S for submit@debbugs.gnu.org; Tue, 19 Jul 2022 04:21:11 -0400 Received: from mail-ej1-f51.google.com ([209.85.218.51]:45856) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDiTc-0000Gh-Cg for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 04:21:09 -0400 Received: by mail-ej1-f51.google.com with SMTP id fy29so24597194ejc.12 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 01:21:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version:content-transfer-encoding; bh=3K3dimCWKFPVfii8BgxUv/QO7DQc0TpAjHwXWneqWDM=; b=QnuhP3RqDY1NmhPG0EQgANzuWwI7GfGoU7FFqbrTUeOQmHjSW3hsvgDOqA3cOkntVX PE3FETDcd4MlCV2o1W2zquLDWEuSsFkALHyKIvbLBTDePC6Sm6TKsww2J1iuYPjD/sQc 5RjJF4Ug11W8a2lT1qI6GXfpV8FbpsIQDZxNKMwkNVj7g8qTLUNGSIqjW7XsJOKygIUW CmayCubECU6crJob4WHoNR1lho2VFZLWr8KIrAqA+pw4oIggnSV13Ypd2dSit2ThDbB8 o+L4SsPG6AQ+qmsXMeMSsx+IIbaQBsL6O7kVPV3m0tuef6JqKOhp+uCWjW1t8bdYa8ns EFxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version:content-transfer-encoding; bh=3K3dimCWKFPVfii8BgxUv/QO7DQc0TpAjHwXWneqWDM=; b=GoQMZZp9ztQob8uyM5Q8suzaqo9julPebMVaxnh13MEbtgDZEi3J6Yzrn2ATwG4E7s UHW/FsJmDEkrZFm7Zi8Zkc4Eq3X+xC+3jv6MhOC+jCSjVM6Slyfpb5s/LJUjUW/MeOpX Hy7lWc0QN/l6pEG8ZtSlRTqe7Vhr2yhcAZH0MFVnd7gqe8zKwqfFMWHH1qS3JPQyLGS9 bVmLThO4iCnY+WwL5n0vFfmUCE8Z+7K2jSlE6tRLGwqvljCaLwvRI7bajcj3xV3iMOvw 2AuEcG3zRjoJjJE672WHPaYrE/yb5BiAubbsYzoZEHLisuKTfM8Ibt2Vm/UhOLZmLf0+ 792A== X-Gm-Message-State: AJIora9deKAd+MARWwIO3gFy4aYJhRk0X3MDLfkqn0nb84j3Jdxx8zu4 SVmrWPI6IrHKbjPo5SRG1WNntREw3wI= X-Google-Smtp-Source: AGRyM1t1fUI8katTCjsjqr/QI+1WiPyP+mbwLrC49OrfJSFOfa7+laO7LUyS5QacnMx1tjSeSW5pIA== X-Received: by 2002:a17:906:ef8c:b0:72c:780c:6693 with SMTP id ze12-20020a170906ef8c00b0072c780c6693mr27914465ejb.196.1658218861969; Tue, 19 Jul 2022 01:21:01 -0700 (PDT) Received: from Mini.fritz.box (pd9e36437.dip0.t-ipconnect.de. [217.227.100.55]) by smtp.gmail.com with ESMTPSA id g23-20020a170906539700b006fef0c7072esm6512788ejo.144.2022.07.19.01.21.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 01:21:01 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: (Gregory Heytings's message of "Mon, 18 Jul 2022 10:49:44 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Tue, 19 Jul 2022 10:21:00 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: >> That's only ~100 lines of code?=C2=A0 Can that be? I'm suspecting that I >> don't use Magit right, again.=C2=A0 Or something. >> > > You're using Magit right: it's indeed a small fix. > > Your comments would be most welcome, of course. First of all - I find your design idea really nice. I think the iterator layer, if you will, is the right place for this kind of functionality. Whatever. Let me distinguish your code into the part that decides whether to do something, and the part that then does it. I'm currently only thinking about the first part, the determination if to do something. What I see, please correct me if I'm wrong: The determination is part of what I call Emacs' redisplay layer. Rediplay_window sets buffer's long_lines_optimization_p flag to true, under some condition. (l_l_o_p flag is then used to let the iterator layer do something, later.) Mark_window_display_accurate computes unchanged_size as Z - BEG, which is the buffer's size at that point. m_w_d_a is called from redisplay_internal, again under certain conditions, basically when a thorough display has been completed successfully. Questions I'm pondering are, and I'm not saying anything is wrong or something, I'm just thinking about this, and I guess you have been thinking about the subject longer than I have - Since the determination is done in what I'd call redisplay, what if a buffer with long lines is never, or not yet, displayed? Are there circumstances under which we are using an iterator then? Background fontification? Some hook? Other stuff I don't know about? Could that cause us trouble? - I did not see that l_l_o_p is set to false anywhere. Should it be? What if a buffer is modified in such a way that there are no long lines anymore? - I don't understand this in redisplay_window: /* Check whether the buffer to be displayed contains long lines. */ if (!NILP (Vlong_line_threshold) && !current_buffer->long_line_optimizations_p && Z - BEG - BUF_UNCHANGED_SIZE (current_buffer) <=3D 1) Does the last line mean "buffer got smaller"? Sorry if I'm dense here, but I don't get it. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 04:53:17 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 08:53:17 +0000 Received: from localhost ([127.0.0.1]:52764 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDiyj-0003GB-2a for submit@debbugs.gnu.org; Tue, 19 Jul 2022 04:53:17 -0400 Received: from heytings.org ([95.142.160.155]:43658) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDiyg-0003G0-Dq for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 04:53:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658220793; bh=byv2xxPg49jYqwGGim4we8zdCPq01amQQ+L7IJAaXqk=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=C5Uxn87lf0BOXZmcRIRjhd4w+X5fmeAYDPNdL8SB8ngySwdlNWzOMluUlUSQ798cd /I/+NilxNWNjWtXqptwdHFrHgOgKe5r4+EfukoWmoKEUmMZGoac2BR1hB1x2TvfCCW dWHldvZqtbXXFmfL17ciV/2g1syApdn7Opc1Eb5fLCDodBTKZoPc1FRN/0uDU+SLgw sRZqtTf03MHmU9fwpeakIfFjdU/OwmcF6qIadTOl36vADwjrbA8oGsFZBn42XKvnmO L3Nim2eRgKx8rRc+2sMykBE6tJiBMjJ2DF4yI79nN777d17QEGW5S+t9mJPZO+HKzr ziijVF1NlfkvQ== Date: Tue, 19 Jul 2022 08:53:12 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Thanks again for your detailed comments! > > - Since the determination is done in what I'd call redisplay, what if a > buffer with long lines is never, or not yet, displayed? Are there > circumstances under which we are using an iterator then? Background > fontification? Some hook? Other stuff I don't know about? Could that > cause us trouble? > If a buffer with long lines is never or not yet displayed, the specific optimizations do not take place. That was a very important if not critical improvement, because Emacs may internally use buffers with long lines, and they should be entirely unaffected by that change. (For example, the newsrc.eld file used internally by Gnus contains one such long line; if the same temporary restrictions were used in that buffer, it is possible that Gnus would not work correctly anymore.) As far as I can tell, iterators are used in such buffers, too, but they are not fontified. Fontification happens only when necessary, that is, when the buffer is actually displayed. > > - I did not see that l_l_o_p is set to false anywhere. Should it be? > What if a buffer is modified in such a way that there are no long lines > anymore? > Gosh! That was an error, thanks! > > - I don't understand this in redisplay_window: > > /* Check whether the buffer to be displayed contains long lines. */ > if (!NILP (Vlong_line_threshold) > && !current_buffer->long_line_optimizations_p > && Z - BEG - BUF_UNCHANGED_SIZE (current_buffer) <= 1) > > Does the last line mean "buffer got smaller"? Sorry if I'm dense here, > but I don't get it. > It is (- (point-max) (point-min) (buffer-size-after-last-redisplay)), so it means "the buffer got larger by more than one character". (Note that (buffer-size-after-last-redisplay) is a fictional function.) But after discussing this with Eli I'm not convinced that it's a good enough heuristic. The previous heuristic was simply "the buffer contents have changed", and I wanted to refine it a bit. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 04:58:55 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 08:58:55 +0000 Received: from localhost ([127.0.0.1]:52782 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDj4B-0003Oy-1l for submit@debbugs.gnu.org; Tue, 19 Jul 2022 04:58:55 -0400 Received: from heytings.org ([95.142.160.155]:43668) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDj49-0003Oi-HD for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 04:58:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658221132; bh=ysZ+SaGF8cLE4pLpIhY62h/aOROu8ExlMi6hVdtFcZM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=DXgHz/l6EHOBS8nRef6rbF3Zi7/yxTDFSK+yHgjg2FRvMcHtZ4wx0ObXKpascRE/m bjObA+mUzgQuPlBLt+PgFLc0Yz/1ZsJM1vdTM7ifbOOo0H0rE35jKO+ZXMhosXSejG x5am1tE9P0RuApybRADuoDYZpq//MGM+SN4CtWm/VD60TKJ8GXzELhMqPYO9xW1KkX smowOrIIR7Hl+Y1WF23g0P5Cdmg7pSOqXygYR4mDAtZZOr3mS6sNUFI6DT11UFPQtx W3NIIVyjO1j59lVEPENyrrpi0Anoe2Dm/07hYNWK10CFpqrzsxKKydh2f+rbr6OxyX VsGKSCTxfDGYA== Date: Tue, 19 Jul 2022 08:58:52 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> - I did not see that l_l_o_p is set to false anywhere. Should it be? >> What if a buffer is modified in such a way that there are no long lines >> anymore? > > Gosh! That was an error, thanks! > In fact it wasn't, there is a "b->long_line_optimizations_p = 0;" in reset_buffer. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 05:17:46 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 09:17:46 +0000 Received: from localhost ([127.0.0.1]:52807 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjMQ-0003tQ-Dt for submit@debbugs.gnu.org; Tue, 19 Jul 2022 05:17:46 -0400 Received: from mail-ej1-f47.google.com ([209.85.218.47]:38427) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjMO-0003t9-0j for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 05:17:45 -0400 Received: by mail-ej1-f47.google.com with SMTP id l23so25998235ejr.5 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 02:17:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version; bh=29Sh5Jmv2k6HGkgZGYEnrRa3t1Ef6dLxHvdHg8ONf9E=; b=pelpZGmmBaQ5qZNbfTsjOHQGih2jA7UftpVk5g+CePK0aCGTRtGVhIswetxko1U9VD p1AHk0dmtJvKK/5wFei0e/Tekkfa1MjXwjy42XxxPPn3r2GE/wzrxhBpvd1LSjC3QhHN w5fhtQYTZrDrVmB6TIrO5bbO3l9uAgb0nL+RMtXrFgZ3uDgrSwpZy+YAcLCy7uzFyQDK 4/MJQymgaiOHZudZLAmFSf9b9zFpB42eGOeKo9CalTG0ulxxHO22xbSpsa7QGxPjqT+g MTSSSIPr0jXTICawQZuZzIoGUJ/MKAfnbWTsIXpVUzBkgPPEXFjsH/jvxZ3AcP9+tPmR y3Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version; bh=29Sh5Jmv2k6HGkgZGYEnrRa3t1Ef6dLxHvdHg8ONf9E=; b=NduNE/NijrP14nngxYKUoiqnf8mzz+3SPj0N8VsNB9pXlXpX5nX/n8i+RW/IA3x1gS NkLY1lNUCfYqVPnrpCdYbmeEm4FI7plzIT/RVoVe67Na+GtjVdqIFWfPE1OTnHu9BaCh VnW803rn43ObGCJ416zC3VC7LiEZ4glQNLbjLkJY5+8rhNb14Rrnu2UkmAizjYEJkrDl PfBs3l30REo5LaJXOhiCanvz2L+Sjsl8OU6tWyA3TXRIH0B5t+10Hj0d+fFXHNeWbwT2 Y25L8+PGZNzdtiWiBA6rHB1qIEg/ZyH00dfPuztqC0wUZO75RNG4ITQO22uw2qjAxvcg Z3ag== X-Gm-Message-State: AJIora+x7XpA+kW1mCUB5RvohEstv8FXumUgHrp/aGo+vJRH7AkHFqZY FKX/WRtbJBLExmklPg+MatDsg8c7Qq4= X-Google-Smtp-Source: AGRyM1vSjnCphJNbEcgO5XCxCH3lg4O1LA3AXaLb6h3l9Qo9wZNDR4z0/xJXWO7ymU3CjQrgvoQ1HA== X-Received: by 2002:a17:907:2da7:b0:72b:53e1:adac with SMTP id gt39-20020a1709072da700b0072b53e1adacmr29301509ejc.357.1658222257704; Tue, 19 Jul 2022 02:17:37 -0700 (PDT) Received: from Mini.fritz.box (pd9e36437.dip0.t-ipconnect.de. [217.227.100.55]) by smtp.gmail.com with ESMTPSA id p24-20020a17090653d800b0072efb6c9697sm5260487ejo.101.2022.07.19.02.17.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 02:17:37 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Auto narrowing autside of redisplay In-Reply-To: (Gregory Heytings's message of "Tue, 19 Jul 2022 08:53:12 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Tue, 19 Jul 2022 11:17:36 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: > If a buffer with long lines is never or not yet displayed, the > specific optimizations do not take place. That was a very important > if not critical improvement, because Emacs may internally use buffers > with long lines, and they should be entirely unaffected by that > change. (For example, the newsrc.eld file used internally by Gnus > contains one such long line; if the same temporary restrictions were > used in that buffer, it is possible that Gnus would not work correctly > anymore.) > > As far as I can tell, iterators are used in such buffers, too, but > they are not fontified. Fontification happens only when necessary, > that is, when the buffer is actually displayed. Okay, I understand the internal buffer argument. But what if it is not such a buffer? Say a large XML or JS file with background fontification. WDYT about marking buffers that don't want auto narrowing? Or the opssite, mark buffers that want it? From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 05:26:03 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 09:26:03 +0000 Received: from localhost ([127.0.0.1]:52811 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjUR-00046P-CR for submit@debbugs.gnu.org; Tue, 19 Jul 2022 05:26:03 -0400 Received: from mail-ej1-f47.google.com ([209.85.218.47]:35832) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjUP-00045r-Hd for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 05:26:02 -0400 Received: by mail-ej1-f47.google.com with SMTP id j22so26047746ejs.2 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 02:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version:content-transfer-encoding; bh=y7NZMgP7TJ5kCLh6zUsWTxfA3HV19jQQI6bmEKKydPk=; b=E9ZDnx0fKPd6QaqdFQlct1uHpjjFOx9X4b8ldZ8etdOY1AUWE4MPYENNwBqIz1uqfD OfQYLfaPRPG0Twy+bZJ2WYmpmr91Joah5pwJnR4JqFp7ypFHA1rG9XtqZHL7M2iVrWEl lcUGPzqL+3tZdtAaeUeo+Z5bLpyfpCwxaez7C4vvJ/Cq3P1wIxljaWM4SD9bJvB44w+L I3v6LBWBWrcWuhZz4BJgcEyLLlwwzNOxLQ4P+dTtWs/8xlZFsljSfwyj34g6RTLjRTux 1ywP6Vh/XtktfgIN/MRj5uvSZ4wSIJ+3OL5pzIIYD3uwYlBho0zxYrcBAczkW4ZCGgyK nbbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version:content-transfer-encoding; bh=y7NZMgP7TJ5kCLh6zUsWTxfA3HV19jQQI6bmEKKydPk=; b=g9Xpkg7xAbmCBhzK6ZUZes9ahq2/JDGaYywUXSPze8FICszljLe2FKhALDJ81wrWx1 +84ZVtFzBCayg/Bq/42+WacuYjDq8yfuKa8k9cgE/C2b3pHDu1ycXEc4bS9NlQk5NLFQ GpPWWjWXdYhfF6+Y5yC6I4PeqAwzm6Idxmj7BnYopviBvb3H9xjHFS8G3JH/mxzLViaq Zm7ojMHKi7LI9yMrZrZR9MIEbmr6lf3uCwbXNe7kHNVNRv6sxFHDfU+A/K9n5wGH5QyR b18JKkdxVJrbwhdChY/U8tAn3iqrAwBVjRfl2h6oCfY8mQK+suAcvAgLF2nkxE5vJcqm ThUw== X-Gm-Message-State: AJIora+RLeNTHTEcRQaKdB7bOpWG8glUEtVJfi9sSEuaWyV1GXS8WyW/ a4D6a9Mk9iAlxsMm9DPxi4WkBY2eX3A= X-Google-Smtp-Source: AGRyM1ut+NTZXP+n7Y72mhFZL+JhRNQzqsHk/gPgEMC/UbMJAIAG9QIyHXYMxrpJU7yWdQ1jcNK71w== X-Received: by 2002:a17:907:6092:b0:72f:575:722d with SMTP id ht18-20020a170907609200b0072f0575722dmr18038444ejc.19.1658222755406; Tue, 19 Jul 2022 02:25:55 -0700 (PDT) Received: from Mini.fritz.box (pd9e36437.dip0.t-ipconnect.de. [217.227.100.55]) by smtp.gmail.com with ESMTPSA id ku5-20020a170907788500b007262a5e2204sm6501802ejc.153.2022.07.19.02.25.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 02:25:54 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Turn on narrowing in redisplay_window In-Reply-To: (Gregory Heytings's message of "Tue, 19 Jul 2022 08:53:12 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Tue, 19 Jul 2022 11:25:53 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: >> - I don't understand this in redisplay_window: >> >> /* Check whether the buffer to be displayed contains long lines. */ >> if (!NILP (Vlong_line_threshold) >> && !current_buffer->long_line_optimizations_p >> && Z - BEG - BUF_UNCHANGED_SIZE (current_buffer) <=3D 1) >> >> Does the last line mean "buffer got smaller"? Sorry if I'm dense >> here, but I don't get it. >> > > It is (- (point-max) (point-min) (buffer-size-after-last-redisplay)), Sorry, maybe it's too hot here to think (36=C2=B0C currently), I still don't get it (- (point-max) (point-min)) =3D current buffer size so current-buffer-size - last-buffer-size <=3D 1 current-buffer-size <=3D 1 + last-buffer-size which is "the buffer got smaller"? > so it means "the buffer got larger by more than one character". (Note > that (buffer-size-after-last-redisplay) is a fictional function.) Goes without saying. > But after discussing this with Eli I'm not convinced that it's a good > enough heuristic. The previous heuristic was simply "the buffer > contents have changed", and I wanted to refine it a bit. Okay. Hm. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 05:31:29 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 09:31:29 +0000 Received: from localhost ([127.0.0.1]:52824 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjZh-0004G3-BE for submit@debbugs.gnu.org; Tue, 19 Jul 2022 05:31:29 -0400 Received: from mail-ed1-f44.google.com ([209.85.208.44]:36709) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjZe-0004Fp-Si for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 05:31:28 -0400 Received: by mail-ed1-f44.google.com with SMTP id y8so18787140eda.3 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 02:31:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version; bh=M+qJniIWwV+W0vtfW73P4N4g6nAfgmiBYdLfI4SraL8=; b=cJaFu0xEzZFETJU5rPsAiGE1GtHSO0RMkpa6RS+2CvFc9H//AOvblA3n9l+lGPrITz 8UmX5THesmMQSOob/bfhUViLpsh+ssWWvgBGGRj07qBI3GANgPnZFSjMd2KzcmzSzzxF v1Vi8fd4GcWvYhIObkz0z8cnyPqHOex8J1FWAIr3GO66AzbXhb82M9ACMqPCZt1xnXXT AAa7AF5jBrJe4L0berj92dg3Sv3ltXJNmUFIC2cvRaPjob32Bh+jWBATrTAf+DHYssDI JEgzDUyMCcdAIPc94YGBS6jss+6ihFh+5b29j8P3Ex6mzRHB5bSOo3E0dNRp/EXQXg3V 0Tsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version; bh=M+qJniIWwV+W0vtfW73P4N4g6nAfgmiBYdLfI4SraL8=; b=pSmaFxP5rdgCqTA5M2GelD0sb3oCdetJX6nKUWypasR9MqoAoGPZlcUS9IFC5XdtLN SzetkFFylVIuFyfXIlWR4wlRRgK72/+ZtNjZcT8hydHFxNvgT8+ZLCicPDMziEdeLkhq kNAgYXbhKXQ0ZksgPL7huuc2lDn8ucTkkiiPIkuS6GWzp2d7ML/zXm93ZusSeycBW/W/ o3BZHJ3KTp4iibu4fwkDViiA6ijIHOjANoFWI06+C6qecv1RXKfJEyrrGVyGCYDnqa/l Lw70wmBB3grPrhQ+cBTtaib3xSAu8Q+0vEpgPUw5RQYRE7QKhzs0XChisppzhd/DkxSI ALJQ== X-Gm-Message-State: AJIora+iZX3PhIZLWY5CFywwjvD5+ezb8qtlQnuUZ3ZrNKHf5SyNh+Vi reXX2KgwoDTxOufzfIz7n2gqriLBCBo= X-Google-Smtp-Source: AGRyM1ucpSUo62w7f4h5N8/IAew61bugrDOl0iZ8Fe0NGA/aOksohOQVuilhYSnjtkch9dXSVlLaQg== X-Received: by 2002:a05:6402:428c:b0:43b:cd8:b679 with SMTP id g12-20020a056402428c00b0043b0cd8b679mr41815388edc.404.1658223080648; Tue, 19 Jul 2022 02:31:20 -0700 (PDT) Received: from Mini.fritz.box (pd9e36437.dip0.t-ipconnect.de. [217.227.100.55]) by smtp.gmail.com with ESMTPSA id m17-20020a50ef11000000b0043a9144d8ecsm10248660eds.71.2022.07.19.02.31.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 02:31:20 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Resetting long_line_optimization_p to 0 In-Reply-To: (Gregory Heytings's message of "Tue, 19 Jul 2022 08:58:52 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Tue, 19 Jul 2022 11:31:19 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: >>> - I did not see that l_l_o_p is set to false anywhere. Should it >>> be? What if a buffer is modified in such a way that there are no >>> long lines anymore? >> >> Gosh! That was an error, thanks! > > In fact it wasn't, there is a "b->long_line_optimizations_p = 0;" in > reset_buffer. Yes, I've seen that one, sorry for not being clear. What I meant was resetting the flag without resetting the buffer. For example in redisplay_window when it finds that the condition for setting it true is no longer met. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 05:51:09 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 09:51:09 +0000 Received: from localhost ([127.0.0.1]:52888 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjsi-0004pD-VH for submit@debbugs.gnu.org; Tue, 19 Jul 2022 05:51:09 -0400 Received: from heytings.org ([95.142.160.155]:43732) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjsd-0004oy-Ef for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 05:51:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658224262; bh=9md7oU/3/1JoxoCdBxfYlkG4+zQ//TlTQFp/vykB4+Q=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=VO+ojGoZsFRg0cs/nhkN9dkVuNT1VY47+i0TLBLnuSwgHQglD3yFkc9bryzC3NIbe YJVP+hhpSrdAob5ArdCxKYYI2peCYxsQlb47faR6uIEgpGiXR7lDTEyN/R/oy8Fu5k RGMiXdUaeCE/Uay4u/hCE/Z8mxKIdNE+QWkxugJOVe2c/9ejLCJre6K4i/vScEfaKm HEbZs78F8bN/l8C4HXbGhxM2RneyGTk33sMbXR1Zmc3z9GQVkcmX/Ek2TBoyaTci9J f/cT9z0uzTFVm5/EA/tO2i2DMQMsjFYt3mpiMi+AxqUZ/uj7MnW+ymHOqu7IIjaFMG 3H4NCow3siwKQ== Date: Tue, 19 Jul 2022 09:51:02 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Resetting long_line_optimization_p to 0 In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > What I meant was resetting the flag without resetting the buffer. For > example in redisplay_window when it finds that the condition for setting > it true is no longer met. > It is indeed never reset. It goes only in one direction: as soon as a buffer contains one "long enough" line, the specific optimizations are used, and the buffer continues to use them. Such buffers are not common, I don't think it is necessary/useful to check after each iteration whether the buffer still contains long lines, especially given that these optimizations have a near-nil effect in buffers without long lines. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 05:51:48 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 09:51:48 +0000 Received: from localhost ([127.0.0.1]:52899 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjtM-0004qS-Cx for submit@debbugs.gnu.org; Tue, 19 Jul 2022 05:51:48 -0400 Received: from heytings.org ([95.142.160.155]:43738) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjtK-0004qK-Pg for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 05:51:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658224306; bh=5ce/OztZBTz6OpXGIcRD59R7QbnywUgi2UB/12tL5tM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=eYt3nAGv3bmFmhxeGVg9r0ZgjhFI5fhzwXgOqDFUbgsdgWq86XDsV56K1OnUsVI3i LkhvUpxTiOuhuK/nwMun2VhpkT0kJzwEavIEezpsBk+XFC1ISvXUNwu117idnYaawA Tzt6BAo7CMcO69GF4bzd+460QMaIwEJEVrPW5zXemZ94MznnWZNoRDJv/8t/NSvZyX S9DyzG9B/DjdrM3oyTiLLY9dqFdY0zVkk2hRr1GXViztfeY/pY5BWiXhAaCV9MFAbB tOjxuhezzJ9gyMjqKgqoUqXIXMayJ8avk0Fqx3TgYvI+3biUIsxlI5tT/qGKRTTEnu V27I5+FpeId6Q== Date: Tue, 19 Jul 2022 09:51:45 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Auto narrowing autside of redisplay In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Okay, I understand the internal buffer argument. But what if it is not > such a buffer? Say a large XML or JS file with background > fontification. > > WDYT about marking buffers that don't want auto narrowing? Or the > opssite, mark buffers that want it? > One of the explicit aims when designing that feature was that it should be as transparent as possible. And it is: only a few selected places in xdisp.c see its effect. That being said, you can do what you want nonetheless: if you (setq-local long-line-threshold nil) the optimizations will never be used (in that buffer), if you (setq-local long-line-threshold 0) the optimizations will always be used (in that buffer). Adding code to expose the feature further to Lisp would be (IMO) a mistake. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 05:52:55 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 09:52:55 +0000 Received: from localhost ([127.0.0.1]:52912 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjuR-0004si-JP for submit@debbugs.gnu.org; Tue, 19 Jul 2022 05:52:55 -0400 Received: from heytings.org ([95.142.160.155]:43746) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDjuK-0004sV-Mi for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 05:52:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658224368; bh=zYvYd+amN1IMmwmnZ+QmC4ZzMQJddq7efkwQAygdm54=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=UVwoHXlTiYhaOySYnNybZHrXwGV4jJCdYex4QpsT69OhUNx2BTYtkERVwLLWbTNxh JI0ElIeGID8JV9f4sM5vFrrvRaOLzF6TxYS1o30mXuYIlcL9IXuqEZSt0/PgHV5hFZ 5GcRHtzwoFZtRHp6QK0BNfLfQVawnsj0a/kFIer8dtO/DsnGTTHOPf7/m0r2KBS0iU yy3hwEcYZ4w6mJgVGIoKqQUJi/EjRWJLHhtiMECvJqXX5kDy9TjMa8HeRl8AiO+0Kd 5vJFNuG2Po4H3olISpeyNRIpI7Me8oPaWw6taN/rUabXWL4zUZI6M3wr4VFgcxgD2K iukBo1tUpnyAA== Date: Tue, 19 Jul 2022 09:52:47 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Turn on narrowing in redisplay_window In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="AgxsP3ULqn" Content-ID: X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --AgxsP3ULqn Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Content-ID: > > Sorry, maybe it's too hot here to think (36=C2=B0C currently), I still do= n't=20 > get it > > (- (point-max) (point-min)) =3D current buffer size > > so > > current-buffer-size - last-buffer-size <=3D 1 > > current-buffer-size <=3D 1 + last-buffer-size > > which is "the buffer got smaller"? > You are correct. It's too hot here too, apparently! =F0=9F=98=89 --AgxsP3ULqn-- From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 06:57:01 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 10:57:01 +0000 Received: from localhost ([127.0.0.1]:52992 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDkuT-0006gU-5r for submit@debbugs.gnu.org; Tue, 19 Jul 2022 06:57:01 -0400 Received: from mail-ed1-f46.google.com ([209.85.208.46]:42860) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDkuR-0006g7-GJ for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 06:56:59 -0400 Received: by mail-ed1-f46.google.com with SMTP id m8so5597095edd.9 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 03:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version; bh=Q4HyG6sQmkPOmOpAF1pkyXBdvDXJDdTV5vFzrZ54wzg=; b=URbZBHmFmjX1ZX2wRoo7Y0MV8QCYO5OWL21OXREW8Qt+bK9JnjhOIEu3Y0BE5SmgyF QlIkbFHg5yxYDPosBj/8izvqn/a2JyNG63RAHyQcJXEsJzTvcpXT+xFSjytTNaUGp7GR T21OVVa/nm0Cg4Wdb2XpoMxVoRtA44hTzDItyzLcWO1vmLBum2r9iLBDtouQsTo4oBfJ K3Y3Y+vqzWzcS3VmKGLkVQtwkT0J1N91Uo8m3P3/ZrL3jedyrq2rtGy3f3VpB39DEkBa aGQDl7eof+7vTC80G7IAaHba5DNvsQx76nZrIrN4RpkgtGtIn2eJO3JeJnWSAdyxq0sl yCvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version; bh=Q4HyG6sQmkPOmOpAF1pkyXBdvDXJDdTV5vFzrZ54wzg=; b=FzLCZZN/X98QbuAefETTyBeP17VZkU3yQ7GUHo7jGbIszCV1rdzCdkKMckcGa2D4Cr Ad8bNrPSQKjHk1CKmoUEqVqJ5Ew4kUtHh2YQP/SJbwjLdRQnYSnft2IOydZoT6LE5wKM Sot54ZGdcVs1yv0liHHTiiPm7024eICcouRkTGZT4amQs7zdcaxe2Z579/fEtY9m1Ww7 3CFDZ7G6TuXPT3Jj2D5QaFMRAEWJsmSBkxYA5AKdxvfY3u15s7JlCNz6mQerbWunmlnD S/qECkbGBrlVawJsULekp9hWPzLmDjmlHacesnOqdVtfPgMU0WmmswpFTpHzMQ+gq2DQ gGsw== X-Gm-Message-State: AJIora/O72lu6NKSnzpYnj6Z4MEiG9+GOaYGXtDsBLomA97dVo3sw/6n EjnGxLjDiaZ5bcdac2NF83JhfoloY4M= X-Google-Smtp-Source: AGRyM1sUkw0EYZmpzu09WVfKwJySB/wZ3/a1mkTZGPIaSfNz/IM/qVhv2wKN5DE8e5yBScH1W3D/jg== X-Received: by 2002:a05:6402:b9b:b0:43a:5aac:ed6 with SMTP id cf27-20020a0564020b9b00b0043a5aac0ed6mr43302757edb.131.1658228213213; Tue, 19 Jul 2022 03:56:53 -0700 (PDT) Received: from Mini.fritz.box (pd9e36437.dip0.t-ipconnect.de. [217.227.100.55]) by smtp.gmail.com with ESMTPSA id gt2-20020a170906f20200b0072b342ad997sm6486035ejb.199.2022.07.19.03.56.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 03:56:52 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: (Gregory Heytings's message of "Tue, 19 Jul 2022 09:51:45 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Tue, 19 Jul 2022 12:56:51 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: >> WDYT about marking buffers that don't want auto narrowing? Or the >> opssite, mark buffers that want it? >> > > One of the explicit aims when designing that feature was that it > should be as transparent as possible. And it is: only a few selected > places in xdisp.c see its effect. Okay. > That being said, you can do what you want nonetheless: if you > (setq-local long-line-threshold nil) the optimizations will never be > used (in that buffer), if you (setq-local long-line-threshold 0) the > optimizations will always be used (in that buffer). > > Adding code to expose the feature further to Lisp would be (IMO) a > mistake. Understood. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 07:20:14 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 11:20:14 +0000 Received: from localhost ([127.0.0.1]:53006 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDlGw-0007HW-5N for submit@debbugs.gnu.org; Tue, 19 Jul 2022 07:20:14 -0400 Received: from mail-ej1-f42.google.com ([209.85.218.42]:46830) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDlGq-0007H9-WB for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 07:20:12 -0400 Received: by mail-ej1-f42.google.com with SMTP id ez10so26504176ejc.13 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 04:20:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version; bh=FiZ90HUiWdauCNwfqpVFHBPj8qFHyHXb56dp94UhI/Y=; b=Zig+rZMBaFMyXZRP2vGRSFvaE2n8o8MFOiCMaHn3zyqD+i/LDNO8QMUjf/7xnq/DYZ 68Q7+l3k24MDTh0f+H3tKNHQZxSG3/RLqHMMPpRgsSUqgBCgoQDT7sGrp3ICPgZTF4NA rovNVKEX00AgzYtZDjb5Ck2fQmpXXb4eu6v8o7Gjv5vp0VF10En/bCfME+02NNpp/V3p KA3H0Xs35xDNpdz9PLz/VUNeaZFELBmFa5JrE6tVOOLlZJbZGDxuyI48CYsjkiibeBL7 T2V0S1JnL37AiIj4suEYJbmW1ILZfTpG0SNzPZVdeLr0M3DIxnG9GEXJ+t0Mo90DTfRC Ajvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version; bh=FiZ90HUiWdauCNwfqpVFHBPj8qFHyHXb56dp94UhI/Y=; b=TLDToLtko2t1cv5CCg9KnManmzCllILO02GaHJYb0gy4ClYPU3UrQ+omdUdQ17nqyj UJ93qgvNL2bnXVx9HZ3b3NBN0z18+GhZL125gT63HKMAlEwiwfZFliQMzQkNWB6pE/0y 2mxFO+0JyIyMUCti3H7NQn2rC3jQj4PdFsBc9WOsTluQgx2nobYOxObJkxWpIyGisBnz kYitAnBdRaihRPfKfHE4LauiUMo62cs+mtsd6mbEfSpC6AMX6fpEPuGh731YNvS53nUm agsdEM7g83Tq72JfeWoVVzRTv8A7E9Y9ZfbjAIon4slSEiYjtq2NsJ+VUcz+bH2H0BKz RK9w== X-Gm-Message-State: AJIora8YHCYl2VjOIrrpM51RToLRZEAUsa+4f0wNlAh1gCiXE8pdV6v5 u0YEAwU13zmDhZSMe+/D83I//oJfaP4= X-Google-Smtp-Source: AGRyM1s0UGnYsIpS4QIeVbHj0Cc3QX+OXZTWtxh2EfxHC/xPtL5EhtA98ww2X8djloBiilOmba2AAg== X-Received: by 2002:a17:907:a0c6:b0:72e:ea7d:6a98 with SMTP id hw6-20020a170907a0c600b0072eea7d6a98mr20594758ejc.140.1658229602571; Tue, 19 Jul 2022 04:20:02 -0700 (PDT) Received: from Mini.fritz.box (pd9e36437.dip0.t-ipconnect.de. [217.227.100.55]) by smtp.gmail.com with ESMTPSA id o1-20020aa7dd41000000b00436f3107bdasm10219259edw.38.2022.07.19.04.20.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 04:20:01 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Resetting long_line_optimization_p to 0 In-Reply-To: (Gregory Heytings's message of "Tue, 19 Jul 2022 09:51:02 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Tue, 19 Jul 2022 13:20:01 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: >> >> What I meant was resetting the flag without resetting the buffer. >> For example in redisplay_window when it finds that the condition for >> setting it true is no longer met. >> > > It is indeed never reset. It goes only in one direction: as soon as a > buffer contains one "long enough" line, the specific optimizations are > used, and the buffer continues to use them. Okay. > > Such buffers are not common, Right. That's the reason I didn't want to tackle this problem in Emacs 21, BTW. But I also did not have your idea at the time. > > I don't think it is necessary/useful to check after each iteration > whether the buffer still contains long lines, especially given that > these optimizations have a near-nil effect in buffers without long > lines. Correct. Which leaves me with something to think about, of course: when redisplay sets the flag in the buffer, then there's of course a time before that. And the question is what can happen in that interval. But not today. I'll come back to you. P.S. (for Michael Albinus, if he's still reading this thread >:-)) When replying to a message in Debbugs with 'F' (Gnus), the subject gets changed to the original bug report subject. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 07:26:41 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 11:26:41 +0000 Received: from localhost ([127.0.0.1]:53010 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDlNA-0007RL-Ub for submit@debbugs.gnu.org; Tue, 19 Jul 2022 07:26:41 -0400 Received: from mail-ed1-f53.google.com ([209.85.208.53]:46601) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDlN8-0007R7-UM for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 07:26:39 -0400 Received: by mail-ed1-f53.google.com with SMTP id w12so19103157edd.13 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 04:26:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version:content-transfer-encoding; bh=Fcuo+C1K6LXajfsoWjF47X0SqyPjcfFijFFdTVdQmmQ=; b=RLv4k3hoV1HvvgdZR2BEMlhpJ/jaBlyaG3wwVywCXen+f5Gh7V+dv1gCqOU2k2LCVF gNGY5ri07A01E9vBiSc6vSYyH7qMCOA4y6iODNJrWYefbpmf4vNTBKY1cvQOxu8R7/zG /JDyYJYj60lIlL5LgVRlJOTBkFQ9DoAh0Zyx7Op5AYGMRebX8MtJidp6yd1c5TFW4AnV 6gRS1qTGTb6pBrCbojFJsKGHt2Hs/yeMzy97D7S+IPyWZbDsCJ6WbvYY4CqcQLrrj4D+ MjkP3/FzjPt6ipir3Vy3vGhq4DFyXoZmXtZysKXpGnc6vCY4qhmVfXyXQxyp4JEEDYkZ byvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version:content-transfer-encoding; bh=Fcuo+C1K6LXajfsoWjF47X0SqyPjcfFijFFdTVdQmmQ=; b=a0x/ksfyHUd5k1wZh6lhFdiv8y8H0EjYwQIqPFZ4DxnZxytgp4PeZm4svHzrKNf2Je Ikuh88z003mNtg6+a5l41wVdEYNuVi6vSp/zgOXZoBFuqU12oWBbMr0YxxCgPsFj5N+4 /qgSUFpBVkTazF12Mthh3jbCbULoma0iOjib8R9U/DJFbzMJfWpdllqSawXBhTQgUAl8 ZrQVJbV+sqYAf9BH+7Dbr8H0yGnwxBIzFCvc9R1klNXc/VwYLopKpEW6BA+fqMaF1m2Q 2hSUkfOoGYaV/10P4E8Kexa2Rih6+98cnh0lRamZtj5c8R+BaGTcuJ1+C7uSFeYJjIVy U7wg== X-Gm-Message-State: AJIora8abeAUeYq+kJKpEfhIEBcnGIqZ1C04JKOpjCQpJGVBqQFCzyug hPHobeaOYkkkBSkheohUWKAJtLMZMPk= X-Google-Smtp-Source: AGRyM1uoignOG7veOESaq3m3laBqzwJXx/ZIYJq9me3MfufeA2IBNyGFDzfSOAG3xngwaOVbNY/s4w== X-Received: by 2002:aa7:dd4b:0:b0:43a:d508:7cb9 with SMTP id o11-20020aa7dd4b000000b0043ad5087cb9mr43914371edw.218.1658229992394; Tue, 19 Jul 2022 04:26:32 -0700 (PDT) Received: from Mini.fritz.box (pd9e36437.dip0.t-ipconnect.de. [217.227.100.55]) by smtp.gmail.com with ESMTPSA id h5-20020a0564020e0500b0043b5adf54b3sm5456693edh.61.2022.07.19.04.26.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 04:26:31 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Turn on narrowing in redisplay_window In-Reply-To: (Gregory Heytings's message of "Tue, 19 Jul 2022 09:52:47 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Tue, 19 Jul 2022 13:26:31 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gregory Heytings writes: >> >> which is "the buffer got smaller"? >> > > You are correct. It's too hot here too, apparently! =F0=9F=98=89 Is finding newlines that expensive? (I don't remember.) I mean, if someone turns that "mode" on, does he deserve to suffer a little bit while that is switched on? I think someone with such a long line deserves to suffer. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 08:00:51 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 12:00:51 +0000 Received: from localhost ([127.0.0.1]:53032 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDluF-0004B4-43 for submit@debbugs.gnu.org; Tue, 19 Jul 2022 08:00:51 -0400 Received: from eggs.gnu.org ([209.51.188.92]:36012) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDluD-00046L-Od for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 08:00:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33806) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDlu7-0008Uz-Ev; Tue, 19 Jul 2022 08:00:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=riU0CIqsxl2OZRd673yMMNKKFg2Nntt/f+rnkc5zYJo=; b=ijIPxnepEFbK KYTwrPyjAuzcJu9JOwvoYb3ZUr9krNw8e317CJy4t+5I34rlApw/UdgRJZdpp7iROqSf1ZcYgf2yC t/6gAehtlPz6o8Bt3JCRUCX8TSGJUmNGgIGDSbCGniv8+q+1KL1DJ1qqBhRjAhJFthGP01WajNeGc 7D4RvVmEupcH77919JQovwtJSE6Xi9A7gXCTrKe5sCO/FLNr1/IwnXtTpeHQxuYoPBwlPrfJr6Kep jAUgPfUPaVL6BOYNJ/9Bh+/I8CgsffctSXv8pl8KpvqwWRa1eVmtoUGPhwwm29L8IoaJjwWE9zgBG 2nCRQuUumdqtL1ajAkZkfw==; Received: from [87.69.77.57] (port=1882 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDlu0-0000qx-Kr; Tue, 19 Jul 2022 08:00:42 -0400 Date: Tue, 19 Jul 2022 15:00:24 +0300 Message-Id: <83fsixnwh3.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Tue, 19 Jul 2022 05:39:24 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 19 Jul 2022 05:39:24 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > To be honest, I don't really understand the purpose of BUF_CHARS_MODIFF. > As the comment in buffer.h explains: "It is set to modiff for each such > event, and never otherwise changed." So it doesn't contain new > information. Yes, it does: it allows you to keep track of changes to the buffer text only, ignoring any other changes (like faces, overlays, etc.) which affect the buffer's modified status. The number itself is not interesting, the only thing that is interesting is when the number goes up -- this means the buffer text was changed in some way. > And it's inconvenient that you have to keep a copy of its previous > value around, using MODIFIED != UNCHANGED_MODIFIED as I did earlier > is much easier. We could indeed keep using MODIFIED != UNCHANGED_MODIFIED (and I'm not really sure why you decided it was not good enough: can you describe the problems using it?). Alternatively, we could add a new member of 'struct buffer_text' called, say, unchanged_chars_modiff, and use it instead of MODIFIED != UNCHANGED_MODIFIED in the same way as we use MODIFIED != UNCHANGED_MODIFIED. My point is that if you want the member you added, unchanged_size, to be as responsive to text changes as BUF_CHARS_MODIFF, you will need to add code to increment it in all the places where we already do that with BUF_CHARS_MODIFF, and that sounds like redundancy, since we don't really care about how many characters were added/deleted/replaced. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 08:07:44 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 12:07:44 +0000 Received: from localhost ([127.0.0.1]:53049 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDm0t-0004LP-RS for submit@debbugs.gnu.org; Tue, 19 Jul 2022 08:07:44 -0400 Received: from mail-ej1-f52.google.com ([209.85.218.52]:40777) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDm0s-0004LB-6V for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 08:07:42 -0400 Received: by mail-ej1-f52.google.com with SMTP id tk8so15410805ejc.7 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 05:07:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:autocrypt:in-reply-to; bh=1rTDdkG0z5R7IAneVq63cDUiRSRH2JMPmDNU2kqpsOE=; b=hnzaFjmU+B5CjuKZRl6zYIwPt5cOUiAyIJCkQMQfcAVYVY5cEuGp3XEHTSezhTzbvo Xm2e+mXGGg+HCsBsvz3WofCbO0bBUcuytrzkJ9ut5Rz9qeHCw1xafsNYpPTHrgsIez6J lSO3a+RuOAsQQjawfo1WHPCCrN4ujZ8lGNBm5/DK+IRoJzEthJnLYjysU4+4V6vzfQ+0 xNfT2j8SlHZLlbvmc40eiNAvp89sciZtWq0HDKwo/l3vxwIS9d9aGO9+fDqu54MGhT5b tQbdYE3rEUN0c5B8c2Z+6oYdxgo+fpBJX9L6SclBNOCEq0xS/MPNhl9gm6M4rwE8iHIh a5Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:autocrypt:in-reply-to; bh=1rTDdkG0z5R7IAneVq63cDUiRSRH2JMPmDNU2kqpsOE=; b=Q7UPih/t+RoKFpKi0rY7LT3Lzn7YrapEt/C9dg6gTy6rk85cZfVHFNyhLRwFTm01+1 IegA3NqJBhpPT5n+krnMU1FMokkudI5RHlNDqeknCP9U7+Ts1Or+iODmchuuDyMcvezH B3VYUM5k3Cq1xOpDwiv1nRJK8Wr/ouBk8hiI2QqE3mYEaIWTPT5nMMUPHr3+KOXM0RcJ MTgP05ulMG63GV+5/TCyDJYi+wfSU/ojHa/DivGVYqRzaD2KAd1Q1r/oLFw20yZlqtx5 ZphpzDS/wXA8UmHwooxLGKVmHx86V0pw8Vu7P/iV4HTQ2pedjfkRy5Kb+c/W/wXxofmi tfag== X-Gm-Message-State: AJIora+5s/9jT9y0DkMPQfWSstRowHa4hz5/m0PQ6MpdxYUB+dMrRu5+ KQttqSQJB4XF44Yq/90zL9U= X-Google-Smtp-Source: AGRyM1si58tJofbA1el4pNYgtfJxpWnAIUtFRtmciLPZUeyFbsQe19Yuze+IdSfsc4z6bE23+U94cg== X-Received: by 2002:a17:907:c26:b0:72b:4d8e:b458 with SMTP id ga38-20020a1709070c2600b0072b4d8eb458mr30666647ejc.195.1658232456206; Tue, 19 Jul 2022 05:07:36 -0700 (PDT) Received: from [192.168.178.21] (pd9e36437.dip0.t-ipconnect.de. [217.227.100.55]) by smtp.gmail.com with ESMTPSA id sa8-20020a170906eda800b00726dbb16b8dsm6582814ejb.65.2022.07.19.05.07.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 19 Jul 2022 05:07:35 -0700 (PDT) Message-ID: <7c1c6381-62f6-7a18-9d1c-8b468d302d17@gmail.com> Date: Tue, 19 Jul 2022 14:07:34 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: bug#56393: Actually fix the long lines display bug Content-Language: en-US To: Eli Zaretskii , Gregory Heytings References: <38c1a31040d2d2bc47ae@heytings.org> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> From: =?UTF-8?Q?Gerd_M=c3=b6llmann?= Autocrypt: addr=gerd.moellmann@gmail.com; keydata= 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 Vp5NW5c= In-Reply-To: <83fsixnwh3.fsf@gnu.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------W9TPBsJ0VbrYftcNhgPtBVlH" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------W9TPBsJ0VbrYftcNhgPtBVlH Content-Type: multipart/mixed; boundary="------------7NkCHzmhmpdLL4AWhJeh3Fct"; protected-headers="v1" From: =?UTF-8?Q?Gerd_M=c3=b6llmann?= To: Eli Zaretskii , Gregory Heytings Cc: larsi@gnus.org, 56393@debbugs.gnu.org Message-ID: <7c1c6381-62f6-7a18-9d1c-8b468d302d17@gmail.com> Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> In-Reply-To: <83fsixnwh3.fsf@gnu.org> --------------7NkCHzmhmpdLL4AWhJeh3Fct Content-Type: multipart/mixed; boundary="------------x2xO4JqGiZnX0b0kZbtQg0IU" --------------x2xO4JqGiZnX0b0kZbtQg0IU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 DQpPbiAyMi0wNy0xOSAxNDowMCAsIEVsaSBaYXJldHNraWkgd3JvdGU6DQo+IFdlIGNvdWxk IGluZGVlZCBrZWVwIHVzaW5nIE1PRElGSUVEICE9IFVOQ0hBTkdFRF9NT0RJRklFRA0KDQpB Z3JlZS4NCg0K --------------x2xO4JqGiZnX0b0kZbtQg0IU Content-Type: application/pgp-keys; name="OpenPGP_0x73EA1B1990C53E63.asc" Content-Disposition: attachment; filename="OpenPGP_0x73EA1B1990C53E63.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- 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 EcgRnndY+AgoHVZyVp5NW5c=3D =3DxjfX -----END PGP PUBLIC KEY BLOCK----- --------------x2xO4JqGiZnX0b0kZbtQg0IU-- --------------7NkCHzmhmpdLL4AWhJeh3Fct-- --------------W9TPBsJ0VbrYftcNhgPtBVlH Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLWnoYFAwAAAAAACgkQc+obGZDFPmON LRAA3N2FQQbKG5znhXIzcq7JgFkNEAPpxKAm/fpd6isboRXuNUaobrBKEVW13Gz4JEz773b5Jr4z hribH8sVOUa/8PYhHyphhiOZ3Gam481XJuIzZHYfAQp+eJWVon2MedId6qeZSR79UriFajwNLa69 NM6yj55gOUTfCc1kmsrrUL1HQJqUPmjRttDpkjKpeTfmDYyqT/bZrdZWfrMPn6lkxz/9KYZ9wS7r MWCL2BI+Cz8bG9k5I2iIIZA1SoUCKK4hMUj95x5cyT1EzNejYjLqBhEohcfx9WCCy/Ixksudv8T6 2EoIKRvo40pZVV8lwdqhsz9J2Hg+V5taFe4udK988QZuvuBCeGW+YMkyp1efxVax90gp9RWXem9u K+EDDTIPY8mPVS29JgNAZ9C+ZehZrZ0nUnn4lWM3AvaZ8ieFq3ptaB3QN4sCz3mD2xzS9+EqmAhR NZU3wuD17jSsy8WqjycaAI6yWZcj2QB7e93XsRTOTfKELM8nuLXu8jJ66HAbu8yFjlmYPr/R9njU WOAbjFivAXHD6nd1pSBEHPd+Gb6JZyimwhbYEevXh12d4gC50BNWYb6mVj3t07myuTHHdRV0IvXA mtjabClAI4dvfT6Wp51059SPs2dmdEl9S0J/YuvKZ9rqLeXe2YvfdvwR9APmJ2izJCoXRphh0SgZ +kA= =HhfN -----END PGP SIGNATURE----- --------------W9TPBsJ0VbrYftcNhgPtBVlH-- From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 08:21:40 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 12:21:40 +0000 Received: from localhost ([127.0.0.1]:53067 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmEO-0004gM-DZ for submit@debbugs.gnu.org; Tue, 19 Jul 2022 08:21:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40754) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmEJ-0004g7-N7 for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 08:21:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34292) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDmEE-0003KS-7y; Tue, 19 Jul 2022 08:21:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=DiOsv1wispNuHuIE3yaU4P3onwjR6mzcxlTzYIUzwqk=; b=YdKg13amJ06d biILpgIEk3SJUuytxeDBPP5A3Nrd80U2KQiK1xzVL+lMhTDw3Ub2eOQm8e8sCs0i59Xw7VGpHeaAx Ph9V+WBsgUCWDRDsEvnXfwk1y0D8PhJ+ZMWqzf3fipTIbbQ6MIqagNUeL5YVxjaJKMQKALt6UkiQC vxu+hmBP3P/f9KXMLbkQUdzsjUwuolh7/aL3l1ZspR6l6AO0Nf6GvtjVBmuNooPacElsJp/Z9lF+9 tV/kJ2SrN9q7XTaKx5ki6WgVCtYs6bpX6pKkGCAdfzaVl6FQZ4mMHoQys5hqFfuYRt/6IERsrGb7r yENqQeGd6FmIDuQb+gu28g==; Received: from [87.69.77.57] (port=3153 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDmED-0004Mj-Me; Tue, 19 Jul 2022 08:21:30 -0400 Date: Tue, 19 Jul 2022 15:21:18 +0300 Message-Id: <83edyhnvi9.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Tue, 19 Jul 2022 08:58:52 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 56393@debbugs.gnu.org > Date: Tue, 19 Jul 2022 08:58:52 +0000 > From: Gregory Heytings > > > >> - I did not see that l_l_o_p is set to false anywhere. Should it be? > >> What if a buffer is modified in such a way that there are no long lines > >> anymore? > > > > Gosh! That was an error, thanks! > > > > In fact it wasn't, there is a "b->long_line_optimizations_p = 0;" in > reset_buffer. But who calls reset_buffer when a buffer is being edited? From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 08:44:10 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 12:44:11 +0000 Received: from localhost ([127.0.0.1]:53077 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmaA-0005DP-HD for submit@debbugs.gnu.org; Tue, 19 Jul 2022 08:44:10 -0400 Received: from eggs.gnu.org ([209.51.188.92]:46066) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDma5-0005Ck-UG for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 08:44:09 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34598) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDma0-00072J-EY; Tue, 19 Jul 2022 08:44:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=GbFjG4ZHe8CbXbb+QzLp71Kxy7pd1h/VJAuX81kWF3o=; b=oP2dMGrrUAAWE5XSmAdS shNTFoyYLp3L09ysl+GFzKPMuTbId0c9eNfxKiBt3c4pPEFWsFR9AFoLtoI+jty1Ykhb6bYoe95F1 2RZDaixye5g31Yeru245GWmyMP8FGm/8sIkhzO6fAfZ78PvYXZrlRFddSsJbn3jhhActCJnwfwMqz Ri3Ur3VLgxRCC4aNeE1b/M8u1GgBky0R2jrZa+vGyyxRiJBD1/edQR/2vrq5WpZBjyvkPbXBJYXj+ O6+P/0E3zhqZOR8QfBBVgpQnO55k35EJ0J/AcXuRwZEiF6U0zyA305QN5ydx8dxVicFzWN2P3fN2n 2Al4by6ulGXpWQ==; Received: from [87.69.77.57] (port=4530 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDmZz-0002oj-Si; Tue, 19 Jul 2022 08:44:00 -0400 Date: Tue, 19 Jul 2022 15:43:48 +0300 Message-Id: <83a695nugr.fsf@gnu.org> From: Eli Zaretskii To: Gerd =?utf-8?Q?M=C3=B6llmann?= In-Reply-To: (message from Gerd =?utf-8?Q?M=C3=B6llmann?= on Tue, 19 Jul 2022 13:26:31 +0200) Subject: Re: bug#56393: Turn on narrowing in redisplay_window References: <38c1a31040d2d2bc47ae@heytings.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 56393@debbugs.gnu.org > From: Gerd Möllmann > Date: Tue, 19 Jul 2022 13:26:31 +0200 > > Gregory Heytings writes: > > >> > >> which is "the buffer got smaller"? > >> > > > > You are correct. It's too hot here too, apparently! 😉 > > Is finding newlines that expensive? (I don't remember.) It isn't, but if you have a very large buffer, finding _all_ the newlines in it could take time. > I mean, if someone turns that "mode" on, does he deserve to suffer a > little bit while that is switched on? We want to have this "mode" turned on by default. > I think someone with such a long line deserves to suffer. That's a bootstrap problem: when you first visit a file, you usually don't know whether it will have long lines. By the time you know, it's many times too late. Thus such a feature should ideally be active by default, unless it sometimes causes serious problems. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 08:48:58 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 12:48:58 +0000 Received: from localhost ([127.0.0.1]:53086 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmeo-0005N6-9Z for submit@debbugs.gnu.org; Tue, 19 Jul 2022 08:48:58 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47064) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmem-0005Mu-Vj for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 08:48:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34630) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDmeh-0007il-Jw; Tue, 19 Jul 2022 08:48:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=21ElgDrfBvIQ+kY8FTnpBO8dASuDe5cT0Dg3shRYN8E=; b=Yj3ruWgk4Ow7 knSfeAblLBds75AsPJWwfX9qNLtlBwGbVpJUUumQni0dVJkVN3QauLf5OS3IP9X6AKpB+6r7fEDSe bRXoOS+LUuXFNMOaJKDhonAnnnM8yyAtU/IlVYf28nOP6DyiwiyjFJQ01JExxTO/WjsTRB9AmZ0ZJ 6wxGN/r3yw/DqIP4zlfvkPjw5R6hBI9DPeqhoVrXvl3/RGneL76TmGFV2yQBupiNL20iHHpKzl87/ aHDWxexfKYrc9ZQbH0p7tkYhrM+w6sb929ChGr7X0Oo98JXQL9WSLt3ay/sWuPblVKtodip0AwlSM qF/nCD/4krIEEyS/NpSzXg==; Received: from [87.69.77.57] (port=4823 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDmeh-0003F3-3R; Tue, 19 Jul 2022 08:48:51 -0400 Date: Tue, 19 Jul 2022 15:48:39 +0300 Message-Id: <838ropnu8o.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Tue, 19 Jul 2022 08:53:12 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 56393@debbugs.gnu.org > Date: Tue, 19 Jul 2022 08:53:12 +0000 > From: Gregory Heytings > > If a buffer with long lines is never or not yet displayed, the specific > optimizations do not take place. That was a very important if not > critical improvement, because Emacs may internally use buffers with long > lines, and they should be entirely unaffected by that change. (For > example, the newsrc.eld file used internally by Gnus contains one such > long line; if the same temporary restrictions were used in that buffer, it > is possible that Gnus would not work correctly anymore.) > > As far as I can tell, iterators are used in such buffers, too, but they > are not fontified. Fontification happens only when necessary, that is, > when the buffer is actually displayed. Not sure what you mean by "fontification" here. AFAIR, when iterators are used in any buffer, Emacs always calls jit-lock, and then always resolves the faces produced by jit-lock (via font-lock). Those faces are never displayed, of course, if the buffer has no window. I agree that functions that use iterators should rarely be called in buffers that aren't displayed, but that still can happen. Stuff like vertical-motion, window-text-pixel-size, etc. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 08:49:43 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 12:49:43 +0000 Received: from localhost ([127.0.0.1]:53090 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmfW-0005OT-Nw for submit@debbugs.gnu.org; Tue, 19 Jul 2022 08:49:43 -0400 Received: from heytings.org ([95.142.160.155]:43930) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmfP-0005OF-Bl for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 08:49:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658234974; bh=VKec8UC93UFNzvgfgkuqbQlu8eKJajDZwwsxWvhxwDA=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=NIPGwaAohjYTarTOzWuSbIMdjn7Qm6U4BxxWG5A0jgAMqI50eANN+3tfMVuROitVT msT1v2DVzucYfIXgdWtwUtTe/LNictWbgF+CbywsuDJPgfPxstZf/ByEI7DfB7UHhV gRIxXZ71YNV0VrW4Z4pEGWR+2Lu0pWM69Kn8EUC/bbSJYj5i2eeC5pAF6Tirb3fyI9 9rh6J0LYwNNWIlGxGyzdVjcmftstQBRIv0PUmSaulEk9UQTqlMekzpxUjIWK9k9D0E F5totfIty/NvRJMKphNc3afy8fmKIgeeWnOW6vns59e4xvN8xloDWLAOgVYeNh3uUm 6jqkKa9jnSGcg== Date: Tue, 19 Jul 2022 12:49:33 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83fsixnwh3.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> And it's inconvenient that you have to keep a copy of its previous >> value around, using MODIFF != UNCHANGED_MODIFIED as I did earlier is >> much easier. > > We could indeed keep using MODIFF != UNCHANGED_MODIFIED (and I'm not > really sure why you decided it was not good enough: can you describe the > problems using it?). > The problem is that the loop under that condition is called whenever redisplay_window is called. For a file like xdisp.c or dictionary.json, that loop takes about 1 ms (on my laptop). For a file with 150K lines, it takes about 13 ms. As I said earlier, I would prefer to avoid calling that loop for normal typing, namely when only one character has been added or removed from the buffer since the last redisplay. IOW, I want to make the heuristic more precise. > > Alternatively, we could add a new member of 'struct buffer_text' called, > say, unchanged_chars_modiff, and use it instead of MODIFF != > UNCHANGED_MODIFIED in the same way as we use MODIFF != > UNCHANGED_MODIFIED. > > My point is that if you want the member you added, unchanged_size, to be > as responsive to text changes as BUF_CHARS_MODIFF, you will need to add > code to increment it in all the places where we already do that with > BUF_CHARS_MODIFF, and that sounds like redundancy, since we don't really > care about how many characters were added/deleted/replaced. > AFAIU that's not correct: like unchanged_modified, unchanged_size must be updated only when redisplay ends, namely in mark_window_display_accurate_1. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 08:57:05 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 12:57:05 +0000 Received: from localhost ([127.0.0.1]:53103 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmme-0005Ze-MK for submit@debbugs.gnu.org; Tue, 19 Jul 2022 08:57:04 -0400 Received: from heytings.org ([95.142.160.155]:43956) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDmmd-0005ZW-6S for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 08:57:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658235422; bh=84ASRSBstKAYEJnSdF/Hd+SR8wj3SazJUdzBfer0bBw=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=hcjvVBiwj2C0xqvsyb2PfiOaxKj8s68gqoh5gNKRuBgh85EsNps8vJ8YcnMq+icFq VGMOomPfR8w7SH53vzGcV3Bl5cZ+CSaP7o8Njy3SzZgFIUMUDRy2w4a+xtWd7ng/TZ /PrCnaAtOJ4i8hkRTAb8ep6ZoJmql1sZIMfBdHuPU80PfgteoWF/RhFn14ttrWgQug MEIt+KcHG9js2esdsaoTT2mJPwl65CtV2Z+3M9zzq8OR3+Yb+NhA0/KDXzs7VppuF/ Xa9YsXXc0zuepQU2xbA8FPfRZ+UGL/P3SVDKrVD23uu7kGEMAGzES/sOSKl790E4FG alhumDPvpG0Aw== Date: Tue, 19 Jul 2022 12:57:01 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > The problem is that the loop under that condition is called whenever > redisplay_window is called. For a file like xdisp.c or dictionary.json, > that loop takes about 1 ms (on my laptop). For a file with 150K lines, > it takes about 13 ms. As I said earlier, I would prefer to avoid > calling that loop for normal typing, namely when only one character has > been added or removed from the buffer since the last redisplay. IOW, I > want to make the heuristic more precise. > Sorry, that was not precise enough: the loop under that condition is called whenever redisplay_window is called AND the buffer has been modified. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 09:17:03 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 13:17:03 +0000 Received: from localhost ([127.0.0.1]:53131 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDn5y-00066G-TH for submit@debbugs.gnu.org; Tue, 19 Jul 2022 09:17:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:55718) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDn5w-00065h-Ng for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 09:17:02 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35170) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDn5r-0004nV-6r; Tue, 19 Jul 2022 09:16:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=vm5gp5asTkULoBTh4B9OGJtQMgNBdB5Wkz+bKAlHUdE=; b=JOw/LGNyCDmH GOinBRoVe/spqE8/gqO8aa2230jYjlNqDlPcYmJNiQDjGk/A7Dbvn+GON9YBNj19rJFCDtY+SeCCe quCinoykGXFMWRlVMpUVnz1uoxaanjG3MVxCq0SR3X9o/uAT7Lf95OhiHKwUVbOUUymKFgATvQVEi GJYvh4VpOzMBY1JKNskDqBY0XqnmvFEu3/Bl7diZWH6h7Wlr4rsmy4SnhK/CnJfpdD1u99KBSApu1 owU7+YL8dlKP7Iudnx1C3AYqJfV5BVb1IKUqPcAUEAxO80k1OlXZ5SpLHAETEWiwdctTYFdYK2mBF WmYQimQmlAsm8DoDLXBNxA==; Received: from [87.69.77.57] (port=2580 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDn5q-0002s5-Mi; Tue, 19 Jul 2022 09:16:55 -0400 Date: Tue, 19 Jul 2022 16:16:43 +0300 Message-Id: <834jzdnsxw.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Tue, 19 Jul 2022 12:49:33 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 19 Jul 2022 12:49:33 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > >> And it's inconvenient that you have to keep a copy of its previous > >> value around, using MODIFF != UNCHANGED_MODIFIED as I did earlier is > >> much easier. > > > > We could indeed keep using MODIFF != UNCHANGED_MODIFIED (and I'm not > > really sure why you decided it was not good enough: can you describe the > > problems using it?). > > > > The problem is that the loop under that condition is called whenever > redisplay_window is called. For a file like xdisp.c or dictionary.json, > that loop takes about 1 ms (on my laptop). For a file with 150K lines, it > takes about 13 ms. As I said earlier, I would prefer to avoid calling > that loop for normal typing, namely when only one character has been added > or removed from the buffer since the last redisplay. IOW, I want to make > the heuristic more precise. So you want to call the loop only when the buffer changed by two or more characters? Did you try something like MODIFF > UNCHANGED_MODIFIED + 1 ? (This could be optimized further to use a margin larger that 1.) > > Alternatively, we could add a new member of 'struct buffer_text' called, > > say, unchanged_chars_modiff, and use it instead of MODIFF != > > UNCHANGED_MODIFIED in the same way as we use MODIFF != > > UNCHANGED_MODIFIED. > > > > My point is that if you want the member you added, unchanged_size, to be > > as responsive to text changes as BUF_CHARS_MODIFF, you will need to add > > code to increment it in all the places where we already do that with > > BUF_CHARS_MODIFF, and that sounds like redundancy, since we don't really > > care about how many characters were added/deleted/replaced. > > > > AFAIU that's not correct: like unchanged_modified, unchanged_size must be > updated only when redisplay ends, namely in > mark_window_display_accurate_1. That's true, but I meant chars_modiff, not unchanged_chars_modiff. The former is updated all over insdel.c, to catch all the possible primitive operations that modify buffer text, so if you want to catch those modifications, you need to do the same, more or less. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 09:42:30 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 13:42:30 +0000 Received: from localhost ([127.0.0.1]:53147 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDnUc-0006h7-10 for submit@debbugs.gnu.org; Tue, 19 Jul 2022 09:42:30 -0400 Received: from heytings.org ([95.142.160.155]:44016) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDnUa-0006gy-5K for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 09:42:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658238147; bh=59Qli2VDrqh1QGc8a6f+kq6meOEU7Vl0q8nz7yvXldI=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=VrCHpM7OuzQ/MMFwuckrHaeyYcQuxd5o4KM/NvpahMGLHNBMGmFVOOmXTO1OeXzt1 Mer68fBOAaoiaJzX3tnpbI3f8z/GgspIQMUOhuw2n9vKt2OMILxCyIaSNVTYqFETYM ln9lbQpqeHwc/gPiAwm4pf9m+jaOnZtaA6ObzaimE9ZaC8KA8lL7n5NT/u13BAed+3 M+88YqN3Hp+odxfc6hsnvJoFvyeJJXoAjYVXDe1vLKtpy/+Ia+Pm+21AEQQSo8CVRr vfkC8URZRYPlVnBAGJw/QixIZ3kug3U4klzvwc2e8GoFLls0HWtDHQsdVJOMwHXUDK FxzRq4ResLxMg== Date: Tue, 19 Jul 2022 13:42:26 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <834jzdnsxw.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > So you want to call the loop only when the buffer changed by two or more > characters? Did you try something like > > MODIFF > UNCHANGED_MODIFIED + 1 > > ? (This could be optimized further to use a margin larger that 1.) > That doesn't work alas, otherwise I would have used that of course. After C-u 100000 a, MODIFF - UNCHANGED_MODIFIED == 1 in a buffer without fontification and == 2 in a buffer with fontification, which does what it promises: it tells you that the buffer has been changed, but not how much. I pushed an improved version of the heuristic, which uses both MODIFF / UNCHANGED_MODIFIED (to catch editing operations like M-% C-q C-j RET SPC RET) and the buffer size to decide whether a new detection should be performed. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 09:57:08 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 13:57:08 +0000 Received: from localhost ([127.0.0.1]:54807 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDnil-0007vH-QY for submit@debbugs.gnu.org; Tue, 19 Jul 2022 09:57:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:36682) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDnia-0007uM-Nk for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 09:57:05 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35670) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDniV-0003d4-5C; Tue, 19 Jul 2022 09:56:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=YmDY/XOVMWw3EMvfLSuzaQuKPNYxAhu0vl48ORQU8WY=; b=ZChDRm3SLPr5 Q3iBSJBbBDIPh5lmDo4qKDP8iS2Uvg9LKnHBsYXwR5eQhO1BeaKGaazH5sEKyN6iICr8o7Sh4lMZi /Yz2+lYA850xvRYpPczviE+uOT13Z02Hq1q1JV3NQN2AM8VAyY2AIvoBaS33GYO5HQs0QB59iibJV RPEzytfO1NH7llajcnsy+rBg9+gbNdxj7Mazd3+m1VZUxLSxArMakfXC/TYgF/ZfmaNfECh0BLYns u9ZfiA1bfSmdrzxvQ6cQ/2N09cjfaydxNNHnEdgADkprT4FjpW5m29/7PfTwfAO2E1PJx/QQ+JBWx YcKfxUStw9Y46QSDuvsigA==; Received: from [87.69.77.57] (port=1038 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDniU-0004Rc-LP; Tue, 19 Jul 2022 09:56:50 -0400 Date: Tue, 19 Jul 2022 16:56:39 +0300 Message-Id: <83y1wpmciw.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Tue, 19 Jul 2022 13:42:26 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 19 Jul 2022 13:42:26 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > So you want to call the loop only when the buffer changed by two or more > > characters? Did you try something like > > > > MODIFF > UNCHANGED_MODIFIED + 1 > > > > ? (This could be optimized further to use a margin larger that 1.) > > That doesn't work alas, otherwise I would have used that of course. > After C-u 100000 a, MODIFF - UNCHANGED_MODIFIED == 1 in a buffer without > fontification and == 2 in a buffer with fontification, which does what it > promises: it tells you that the buffer has been changed, but not how much. Why is that a problem? For this feature, we don't need the exact number of modifications in character units. > I pushed an improved version of the heuristic, which uses both MODIFF / > UNCHANGED_MODIFIED (to catch editing operations like M-% C-q C-j RET SPC > RET) and the buffer size to decide whether a new detection should be > performed. Fine by me, but I think this is over-engineered. Also, please add a comment there explaining the heuristics, including the cases we know about where the counters could behave "strangely" or fail to catch changes. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 10:06:25 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 14:06:25 +0000 Received: from localhost ([127.0.0.1]:54819 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDnrl-0008Ab-7z for submit@debbugs.gnu.org; Tue, 19 Jul 2022 10:06:25 -0400 Received: from heytings.org ([95.142.160.155]:44058) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDnrf-0008AO-Ch for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 10:06:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658239577; bh=9iYPYVI1bQ1oWxPfYCzdsyok78bwuyMn0q5SQuw9iLc=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=sV5ta3ZugDKcqgYm95BFpWTaEzGbl3Yp+ZBXCqk0GiRKvE8tB/x2LgiO6GvrtZxcX kvHxjr/j5K0OM4ZAn18wNE+4r8oZOWozojrO6GOXfW9aexx6l1hEMQ76BFKGNEGXYX rJsoEDUmCMiKO05Jex3jfIEnxyDauh64VNrEzfrYwAIj2bczmJgbzYv1cKL0d+BWg4 3qzr/oj/aBbgtHF1AYP255fMXmEut42frYd5A42vrTSVko+ua+udW2V97sphNICVXa APO9nD7jF9ZIA6Sy8dO9KowDtHbB5zLB1tStsN38VUB3yacieIHRahCkv5SXyc68Cm ie6KofBg9DpSQ== Date: Tue, 19 Jul 2022 14:06:17 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83y1wpmciw.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Why is that a problem? For this feature, we don't need the exact number > of modifications in character units. > Again, because I want to skip the long line detection code/overhead for normal editing operation (typing one character at a time). I do not think that a 13 ms overhead for each typed character in a file with 150K lines is okay. > > Fine by me, but I think this is over-engineered. > Fine, but then you'd have to tell me how to do that in another way (that is, how to not trigger the long line detection code when the buffer has only changed a little), or to convince me that the 13 ms overhead is okay. Also note that the full changeset only has 152 insertions and 88 deletions, that is, 64 added lines. > > Also, please add a comment there explaining the heuristics, including > the cases we know about where the counters could behave "strangely" or > fail to catch changes. > I'll do that. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 10:16:13 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 14:16:13 +0000 Received: from localhost ([127.0.0.1]:54835 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDo1E-0008QH-Lj for submit@debbugs.gnu.org; Tue, 19 Jul 2022 10:16:12 -0400 Received: from quimby.gnus.org ([95.216.78.240]:36486) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDo1C-0008Ps-6p for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 10:16:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=c95suaF5WQOPXUGBSJxpvI+BZPOpJ2Vp3lSVgN0hu0s=; b=nbypgBV1CMWc4QGlAb/QsiXXSX FJ84dCfrSAyYRSy0PmuCoyLHzVHaE0Mecy6tY2j/qXfzcRLU60ilsqdVzKINDEp8DJkP7K8lf21Qr 4hY9A+mF6SU/rsSltQb7MIJNdYW38LEAwfywBs4d7ZcLK2XEvgbPCLXYDBQCoJ+uY5fA=; Received: from [85.19.210.70] (helo=joga) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oDo11-0007VU-AC; Tue, 19 Jul 2022 16:16:02 +0200 From: Lars Ingebrigtsen To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: (Gregory Heytings's message of "Tue, 19 Jul 2022 14:06:17 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> Date: Tue, 19 Jul 2022 16:15:58 +0200 Message-ID: <87h73d5gtd.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Gregory Heytings writes: > Again, because I want to skip the long line detection code/overhead > for normal editing operation (typing one character at a time). I do > not think that a 13 ms overhead for each typed character i [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Gregory Heytings writes: > Again, because I want to skip the long line detection code/overhead > for normal editing operation (typing one character at a time). I do > not think that a 13 ms overhead for each typed character in a file > with 150K lines is okay. Do you need it to run as often as the current code does? It's a heuristic -- if it gets it wrong in some pathological situation (i.e., if the user replaces all newlines with spaces in a huge buffer with a function that does just that), that's not a deal breaker. That is, I don't think you have to run the detection as often as you do now. If the previous call said you had no lines longer than 80 characters, you don't have to run it again until the buffer has grown more than 30K characters, or you have a modiff in the thousands region. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 10:20:14 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 14:20:14 +0000 Received: from localhost ([127.0.0.1]:54841 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDo58-0008WN-9s for submit@debbugs.gnu.org; Tue, 19 Jul 2022 10:20:14 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43892) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDo56-0008W5-De for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 10:20:12 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36108) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDo51-0007d1-0u; Tue, 19 Jul 2022 10:20:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=Iang/kjSAvmQp/nu2M9NUxmhQDTh2FDG8+LV+IKSJK8=; b=eovpeY2AiKsf bFIOQqu3sDvu7OrvyaXd0Y7dP4AF7UFbO94GnhZoQov6FA98HRZloHuv4msDTCEjq6qb8fBmSJ/mT O22qPTOKGGD9ZuPEKY8kMm78NIFnyJFGcyt6bRfMqcxOwMyU9cF5S6U47jNPOY5Pa7Sc7b41j0mKq Lk3f0iX25lxvncyusXvFX3/d4GKUcPeUiHbDcCb0vRxBR2OKiuKFO75dJ+37rfjjJPFVmlAaV8Vsl qn2zO/x9/NEk7Ax+Rg0D1LvF1+QjMyhqPqg55OIr/sHBZseK4xe5E5ddliIWIWAnMeMl77X+wsurp 79eicI5E8ne1dzNi6S6HPQ==; Received: from [87.69.77.57] (port=2657 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDo50-00024S-Fl; Tue, 19 Jul 2022 10:20:06 -0400 Date: Tue, 19 Jul 2022 17:19:55 +0300 Message-Id: <83wnc9mbg4.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Tue, 19 Jul 2022 14:06:17 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 19 Jul 2022 14:06:17 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > Why is that a problem? For this feature, we don't need the exact number > > of modifications in character units. > > Again, because I want to skip the long line detection code/overhead for > normal editing operation (typing one character at a time). That's not the problem you presented. You presented an opposite problem: where inserting many characters bumps the tick by just 1. I asked why that is a problem. > > Fine by me, but I think this is over-engineered. > > Fine, but then you'd have to tell me how to do that in another way (that > is, how to not trigger the long line detection code when the buffer has > only changed a little), or to convince me that the 13 ms overhead is okay. That's not what I'm saying. I'm saying that not recomputing the long lines when the user types "C-u 100000 a" is not a catastrophe. > > Also, please add a comment there explaining the heuristics, including > > the cases we know about where the counters could behave "strangely" or > > fail to catch changes. > > > > I'll do that. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 10:24:11 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 14:24:11 +0000 Received: from localhost ([127.0.0.1]:54849 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDo8x-0000Bs-Ci for submit@debbugs.gnu.org; Tue, 19 Jul 2022 10:24:11 -0400 Received: from heytings.org ([95.142.160.155]:44088) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDo8v-0000Bi-Ef for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 10:24:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658240648; bh=ZG8JN9nA0ZTuVVpja61q63IcfqDVeBzMJaViC1mHjNI=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=aJDNDWMl8fnkBekvRcdH5REnrUdS7v9oBIJ/Ru1fQpWPvO5c4M7scysQSdAtyscHI YMsqViIDSVXcRNpBGq0zJfSFgx3AKK2vq+6fxt/6sFLazuCzynGIWk4925WMROr9/O /oGl7ZhBd9InteMxB63iXYOEev5K60EeFDB5X5QcNVstfxFErOIOsY0KF4KTXm9xHB DBu7HYmZ+p4qg9P+tDaqANQluiAOKO/hh6yNbQVpUkg8n5Yi8pZkcJ16YuwFcSWYIN +lD9ZZoF5aKZPr6kkw4PJMqLvWHA9ULPOmbuZliLAb2J09shpdGTvQmVOod1W1Wy9F 3b0CUX4uSYL7w== Date: Tue, 19 Jul 2022 14:24:07 +0000 From: Gregory Heytings To: Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <87h73d5gtd.fsf@gnus.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <87h73d5gtd.fsf@gnus.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Do you need it to run as often as the current code does? It's a > heuristic -- if it gets it wrong in some pathological situation (i.e., > if the user replaces all newlines with spaces in a huge buffer with a > function that does just that), that's not a deal breaker. > I think you need, yes. And with the present heuristic it will not run that often, in fact. The problem is that a single editing operation like C-u 100000 a creates a long line, and Emacs would start choking again. Or C-x i . Or a shell process which produces a long line. And so forth. > > That is, I don't think you have to run the detection as often as you do > now. If the previous call said you had no lines longer than 80 > characters, you don't have to run it again until the buffer has grown > more than 30K characters, or you have a modiff in the thousands region. > Hmmm... Thanks, I'll see if I can do something with that idea. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 10:33:55 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 14:33:56 +0000 Received: from localhost ([127.0.0.1]:54859 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDoIN-0000R0-LV for submit@debbugs.gnu.org; Tue, 19 Jul 2022 10:33:55 -0400 Received: from heytings.org ([95.142.160.155]:44110) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDoI5-0000QZ-He for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 10:33:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658241215; bh=9ncjisXEeoE+HKX4kbq3qfBoPYsanRHIBk5lzhD8Wp0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=XiFcgBeLB7ZTJYnVBBzgz8uUuUO+ngXduGdEvXd65/jSF8iIzoPPR0LYnF9NIPIeQ egcwnOirBsgowkxEFzc9KB2MPxEpzYOSaH/SbUweQtYsYDte6+xClFaKZO3OiR+Yj/ xxrf/kzZia5rNy2aFd5Auwnt2vLrFsWQpIMTvLAoBF1ONd5V/1Vc0oeeH8XzuXDo19 jDN0aJHjiDzE7xCVA8VZLKXRJEoMlMj8fltKRl2h009DphSnAMLza1vexzov5s/+SQ LjX4bqCs0g7PVWBDpN8+Clmr+I349SWvfvoHBib3mwMvn+C0ImoZVaieeozBIEkz6+ iqpxdSHrNSZWg== Date: Tue, 19 Jul 2022 14:33:35 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83wnc9mbg4.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > That's not the problem you presented. You presented an opposite > problem: where inserting many characters bumps the tick by just 1. I > asked why that is a problem. > We are miscommunicating. I was not telling you that the fact that inserting many characters bumps the tick by just 1 is in itself a problem. I was telling you that it makes that tick unusable for the present task. >> Fine, but then you'd have to tell me how to do that in another way >> (that is, how to not trigger the long line detection code when the >> buffer has only changed a little), or to convince me that the 13 ms >> overhead is okay. > > That's not what I'm saying. I'm saying that not recomputing the long > lines when the user types "C-u 100000 a" is not a catastrophe. > It is, at least if this is meant to be a full and complete solution to that problem, because the same happens for example with C-x i : the tick does not change "enough", long line optimizations would not be enabled, and Emacs would choke again. Or if a user innocently types "cat " in a shell buffer without knowing what that file contains. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 12:15:13 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 16:15:13 +0000 Received: from localhost ([127.0.0.1]:55030 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDpsO-0003AH-V3 for submit@debbugs.gnu.org; Tue, 19 Jul 2022 12:15:13 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47498) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDpsN-0003A1-DV for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 12:15:11 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38148) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDpsI-0003TF-32; Tue, 19 Jul 2022 12:15:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=002iTK/60AYDEvzFA7aJJikdktXGHddixzpPFEFGzPA=; b=ImEs7ACzM46Q 3+2CJT3jW97WoGWo29upsHLvH3cLmv3YIW4mJbGB8E0uZeJL6EIjVLf9WJf2xkglPF0o4cwdfAsjF tarckzDLKwv3bD8ATLEA4qoDuhM/v/ZVPC+vjRpTNTniwCrM7IOUvQi/DUjE3n563dd6OQo9PQoDy 3NBQKdWR7ypRDrgQ1we/lpJmgfMyx/UFTzD4zEIBIj8JAM4D/hOcV6NVRRAmkvPw1P/UJ/OpYrpJe aXy0P2bxpqE1sguqDJ4hHgalq0juoWBkXLI0+gNNOENzMFc1lYZ8dXUGMbSbdCK22fuMQF3OAXC6O kh++u7Q0nW5H5SK8H8ljGA==; Received: from [87.69.77.57] (port=1740 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDpsE-0000BE-T0; Tue, 19 Jul 2022 12:15:05 -0400 Date: Tue, 19 Jul 2022 19:14:51 +0300 Message-Id: <83o7xlm64k.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Tue, 19 Jul 2022 14:33:35 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 19 Jul 2022 14:33:35 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > That's not the problem you presented. You presented an opposite > > problem: where inserting many characters bumps the tick by just 1. I > > asked why that is a problem. > > We are miscommunicating. I was not telling you that the fact that > inserting many characters bumps the tick by just 1 is in itself a problem. > I was telling you that it makes that tick unusable for the present task. Would it help if the tick were incremented by the number of inserted (or deleted or replaced) characters (perhaps limited by some reasonable value, like 1000)? That would be an easy change, and I don't think it would break anything, since no current code relies on the exact value of the tick, and the value you get after some non-trivial operation on a buffer is generally unpredictable anyway. Would that make the tick usable for this task? You see, adding one more struct member to an object that we use all over the place makes Emacs slower, because the object is larger and thus takes more CPU cycles to copy. Granted, the slowdown is barely noticeable, but these things add up over the years, so it is best to avoid adding members if we can do without that. Thus, I'd rather extend/improve the existing members than add new ones to fix issues in the old ones. If you agree, I can make such a change (but feel free to do it yourself). From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 17:40:42 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 21:40:42 +0000 Received: from localhost ([127.0.0.1]:55357 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDuxO-0005Ej-IR for submit@debbugs.gnu.org; Tue, 19 Jul 2022 17:40:42 -0400 Received: from heytings.org ([95.142.160.155]:44496) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDuxL-0005EX-1S for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 17:40:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658266836; bh=xAHJfSMaqfLlrBADAE+LPPb50h7RSZ/2fRt86X/aJ58=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=E3AnoA95lT64f03M2u1Gn4iQi8FmbobnK4//cWVz3a1tMSEtcEi/RkctaFR/s7E96 UlsAF1mMr4Gz97CTM9mBKa3ShbX0PeAB6sCKytAjRK37/2kY7vgo5aRIK4CGGXPokl VRoA6bvNNkPu1DQxmKCHI/u8wNzViX0C1/sxsEMzqjnPB2HKx9xZQY3eKqEApDtBmd kFkiTtNwQEBEe9FXj867ql1c10z5YphCwWr5GWZouy5Vuy/vo80Rjn9gi8p7ReSkRO vhagASZnnUpVbbbkJd3pJYanBufJQEd/ae3El4u9r4qG4E/WiS5RjzNMmBTZjqEOcN w1MGcCW9h4LMA== Date: Tue, 19 Jul 2022 21:40:36 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83o7xlm64k.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Would it help if the tick were incremented by the number of inserted (or > deleted or replaced) characters (perhaps limited by some reasonable > value, like 1000)? That would be an easy change, and I don't think it > would break anything, since no current code relies on the exact value of > the tick, and the value you get after some non-trivial operation on a > buffer is generally unpredictable anyway. Would that make the tick > usable for this task? > It would. In fact it is not even necessary to record the exact number of inserted/deleted/replaced characters. > > If you agree, I can make such a change (but feel free to do it > yourself). > I just did it, is this what you had in mind? The tick is incremented logarithmically. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 17:55:53 2022 Received: (at 56393) by debbugs.gnu.org; 19 Jul 2022 21:55:53 +0000 Received: from localhost ([127.0.0.1]:55369 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDvC5-0005dQ-Fq for submit@debbugs.gnu.org; Tue, 19 Jul 2022 17:55:53 -0400 Received: from heytings.org ([95.142.160.155]:44514) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDvC3-0005dH-NE for 56393@debbugs.gnu.org; Tue, 19 Jul 2022 17:55:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658267749; bh=QXuaQMPMdANXBwfKfLTkljPC8EuaDLsVAbcgSixnMv0=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=B5b12bveLtiAuP8FJQ7JF8z5SprOAoyMBkRxsO49xGW+49L8K7xqVyCfSqOGRs1MW O65iAaEJjI8+F8i1FQZwd3/QhKtnDwYO7zfKj0ryylrrN93kuH7ZRxSsgJWESzRgsK sL3Seawi+CYa+h6gVqsVuFEWUXgrCRDHA/XZ55Vs/2EADcMvKAzUgp/Knnh1AxGDGu V/JQy0hRdjfDgkvkjfryKLPk1lvrPlMFs8TMoGInQO81WUOue0qXe5D1BLnZjf/o2l z3305QCRFT1Cmt1beyB+jThRvJlvCWHjtsbSf51LFk9230KWCsdAKbd9WkCO0lIa0t maE5Zmxsguxug== Date: Tue, 19 Jul 2022 21:55:49 +0000 From: Gregory Heytings To: Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <364167b2-83e-c5af-1981-221d53e33ce6@heytings.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <87h73d5gtd.fsf@gnus.org> <364167b2-83e-c5af-1981-221d53e33ce6@heytings.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> That is, I don't think you have to run the detection as often as you do >> now. If the previous call said you had no lines longer than 80 >> characters, you don't have to run it again until the buffer has grown >> more than 30K characters, or you have a modiff in the thousands region. > > Hmmm... Thanks, I'll see if I can do something with that idea. > I considered that option, but so far I cannot see how it could work reliably, or to be more precise, I fear that there are too many cases that would escape such a heuristic, such as M-% C-q C-j RET SPC RET in a sufficiently long buffer. One disadvantage is that it would be necessary to record, in struct buffer, the buffer size (and perhaps also the modiff) when the detection was last run, something Eli would prefer to avoid. I will continue to think about it, however. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 02:30:34 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 06:30:34 +0000 Received: from localhost ([127.0.0.1]:55658 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE3E9-0001yZ-VO for submit@debbugs.gnu.org; Wed, 20 Jul 2022 02:30:34 -0400 Received: from mail-ej1-f46.google.com ([209.85.218.46]:38514) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE3E6-0001y9-OX for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 02:30:32 -0400 Received: by mail-ej1-f46.google.com with SMTP id l23so31266656ejr.5 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 23:30:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version:content-transfer-encoding; bh=+E/Owt37Zi+GTGd7AUJtLmWrTiZj3z31OGW40fdpBxg=; b=dEJMLGIZ2bo77ARXOgplFMvsFMtTyD2KjRwtwfrMtWutFObL/7BLs2K3tB1Fpt1NFO wN2b+qW0e1aGFhZWRh+3V7JeST65LUyWaSOWZJYMzCnfV7Ht79nm2bWWnOD5qCUFG8io jMHKca+Ly5Q1r9SEt+uaCOZs568jV8gooHXXxAoU7L6qenaTIdn0FOy6wdyq6gbB4PWw S4kT8oKn8eKfDkaIOywrhSnq91e1m565lZIGqrL4zFSC4cJ+SVg6nlGGEDP5Rpm8SJ7c QIlru0AAi5bYFEnLVqkViG2WpdbuHJnZgMt7xkY/7nrn4E9SCHCe30LdvTSL0NGA7hN+ 54cA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version:content-transfer-encoding; bh=+E/Owt37Zi+GTGd7AUJtLmWrTiZj3z31OGW40fdpBxg=; b=m2MX7NReUMSxb6XUQdFTJSQzJuyVKZhFvBTmd/WdFlqc7pLmw4Qe0jhCNdgObfN0iz Uyd05pIJVfLnP3j4Te9NyIOoX/6Mo/R6wYq6TqbEXTznr4rFGCrdkQBTrTS8LCXyknSp qMGRYyHSMaG7Y6o2oG7GiHo3mWvp5ui/6XsWFlq8l+ZPtSXJonTTI2kF19BcGYBo3HEO YlSUIbQzuHZ+aE1RMnBb2bAZ6xbzV6Ve5YO6pNLLy9i7Xop+pXDXL1YYtUlSRcMwgseT 3kwA6ZW4GQVGW1izzLYNE2B39dAydYOiJ2f0WWqvuBOX/O1zFzg8uVTngBQvRecG7Db9 PzDg== X-Gm-Message-State: AJIora9f/hdBhC96QCD3bp3Zy4vuq21MeImrBpzzVY9urUHeE2DxMyE7 tZumonznJMOBV2GgdPsZtnJrB8zWiFhdiw== X-Google-Smtp-Source: AGRyM1sHWzVrr3B95Ay00NHiEKIieWFREXb2e9xMMfTtsx+jVbcaUa/NTmtBivba6AopyenDDCvsxw== X-Received: by 2002:a17:907:2bf1:b0:72b:5cc3:79cf with SMTP id gv49-20020a1709072bf100b0072b5cc379cfmr9818394ejc.382.1658298623457; Tue, 19 Jul 2022 23:30:23 -0700 (PDT) Received: from Mini.fritz.box (pd9e3685f.dip0.t-ipconnect.de. [217.227.104.95]) by smtp.gmail.com with ESMTPSA id 12-20020a170906318c00b0072b3391193dsm7568665ejy.154.2022.07.19.23.30.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 23:30:22 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83a695nugr.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 19 Jul 2022 15:43:48 +0300") References: <38c1a31040d2d2bc47ae@heytings.org> <83a695nugr.fsf@gnu.org> Date: Wed, 20 Jul 2022 08:30:21 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gregory@heytings.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> From: Gerd M=C3=B6llmann >>=20 >> Is finding newlines that expensive? (I don't remember.) > > It isn't, but if you have a very large buffer, finding _all_ the > newlines in it could take time. > >> I mean, if someone turns that "mode" on, does he deserve to suffer a >> little bit while that is switched on? > > We want to have this "mode" turned on by default. Okay. If that's already determined, I don't need to think about it. > >> I think someone with such a long line deserves to suffer. > > That's a bootstrap problem: when you first visit a file, you usually > don't know whether it will have long lines. By the time you know, > it's many times too late. Thus such a feature should ideally be > active by default, unless it sometimes causes serious problems. Ideally, right. What I'm trying to hint at it is that there's another way to see this: It was mentioned a number of times that only a small fraction of people encounter that problem. And I'd add that this small fraction encounters the problem only in a small fraction of cases. And I even think most of these cases are known upfront. So, with some kind of mode, one could turn the iterator-narrowing on (and off!) in redisplay_window without affecting anyone who doesn't have the problem in the first place. Just wanted to explain that. No need for discussions. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 02:33:02 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 06:33:02 +0000 Received: from localhost ([127.0.0.1]:55667 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE3GX-00022T-Pl for submit@debbugs.gnu.org; Wed, 20 Jul 2022 02:33:02 -0400 Received: from mail-ej1-f50.google.com ([209.85.218.50]:46752) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE3GU-000227-Ty for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 02:33:00 -0400 Received: by mail-ej1-f50.google.com with SMTP id ez10so31226424ejc.13 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 23:32:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version; bh=VngPJHVYRhYupoCiSoXPGQcHbGBGu0H7ySPkv/6r/mM=; b=J3H815Qak/FNPwmsC5YLWj1IugkBAI6wZudWkgNOg2HEJwJZB4TbpLL2t9SJdg9nsw 0s8mVtGADx5+UioaglXW5a4/QJDPBxauMmNyc+3Mk/xbS1aQ8iQsWSr94UXArG1xS6ak oA0oeH+GkeLrR/2KZjzYT24eyVyaq40rPgTgryuQjJRMd/19dNlIYKfqEsl1zONbXnAF tZH9ZtWVz4US2iP5143DYmOHhbMyXhaSbHKgrkj1y73bvAQsbfepdZBDlU7CvxotBLqH 9WVtmGKYx7IT/uoVxCcyNWWFwCFfvqVFq3fD4Umh0fTF+RYoDjCcP0N2l1JzkpEUbUCi msag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version; bh=VngPJHVYRhYupoCiSoXPGQcHbGBGu0H7ySPkv/6r/mM=; b=IBCVMZY64EcUEAjpNW5aXB3fq7d86CW87zd7N7CzBzIxxM/QlbA2GcVCFuiX0uDvsv jncAlIkd+rykp3OpuyMovnbTMzMVEYvGf4l4IkY9S72tt1zN24U8SPgzQ5A9oLcEXOWc qr/AWHLr8g4/o4lQdPrtoIaJZJsqMoVmNyUEe4vLozcOf+lsgYrTB8Kdj5IX6t5Pm1tW T9PRIf9QBBj8JDDCPxHfTGZcUNE+1yFuXPcGLI6STaZjwETKIdLn5uPRqO8sqKsPxehq 89Fu+FqGcz3+DNmqORWfL8x7Eswd3xyMxoAYk0prj/65iS0AzC2M1XFrPI4GOThPz8hZ YwHg== X-Gm-Message-State: AJIora9k/HOR7YvGd0e61tScVkbnXazdU05cQECAXyr2qUa/cYAvIcB1 Mx1S33SJ0a8JZctcKFKK/c0lwQuya4i4tw== X-Google-Smtp-Source: AGRyM1u+70ezVkpZDNQmzaONtQFJNup16SAPyN0VT9h4C7YeqMJawQ7ZwEX8/5S8SswI23pfWrzEpQ== X-Received: by 2002:a17:907:d29:b0:72b:4b20:5650 with SMTP id gn41-20020a1709070d2900b0072b4b205650mr33621194ejc.350.1658298772808; Tue, 19 Jul 2022 23:32:52 -0700 (PDT) Received: from Mini.fritz.box (pd9e3685f.dip0.t-ipconnect.de. [217.227.104.95]) by smtp.gmail.com with ESMTPSA id x18-20020a170906297200b00728f6d4d0d7sm7535772ejd.67.2022.07.19.23.32.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 23:32:52 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <838ropnu8o.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 19 Jul 2022 15:48:39 +0300") References: <38c1a31040d2d2bc47ae@heytings.org> <838ropnu8o.fsf@gnu.org> Date: Wed, 20 Jul 2022 08:32:51 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Gregory Heytings , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: > Not sure what you mean by "fontification" here. AFAIR, when iterators > are used in any buffer, Emacs always calls jit-lock, and then always True. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 02:58:17 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 06:58:17 +0000 Received: from localhost ([127.0.0.1]:55695 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE3ey-0002h1-PO for submit@debbugs.gnu.org; Wed, 20 Jul 2022 02:58:17 -0400 Received: from mail-ej1-f53.google.com ([209.85.218.53]:39675) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE3ew-0002gl-Sj for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 02:58:15 -0400 Received: by mail-ej1-f53.google.com with SMTP id bp15so31395404ejb.6 for <56393@debbugs.gnu.org>; Tue, 19 Jul 2022 23:58:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :user-agent:mime-version:content-transfer-encoding; bh=PWydb6SkPZIPAQVU9HozMzQY+am0WbzW/w0Svek30vQ=; b=ipJ3dwoXjYnZBCVy5cXDnadUzL7xU/61A/dh7KKZxSi3G3TAUbaZF5xtG3yE+DArXO fy7TBt9W0B1jTVBW+kq5EpRCemA3pb59p4069Sy6D/DKp5566DYb5bHlzJLng/vn8xk6 QUXDpP8q4xi76tStTSDL6kGCijk+CuyExVYN3VUHTKUxdQQIvsHKzOxzZ1eD/GZeqtGF yutwxe6LHa/JGAMgVOLPX3WqLi0la3QXXNNYvqBGGqmoRDXAqJMkXyfqcROWPGwtpp9Z WyT6Rfan1PhIo6MmVuMSRyKxx3bP8yxyO/pwWYxxTYUMJP3PcFpQfFzvQ/RQcEAxsQv6 9rXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:user-agent:mime-version:content-transfer-encoding; bh=PWydb6SkPZIPAQVU9HozMzQY+am0WbzW/w0Svek30vQ=; b=aVLrzgrTxDdxMYvEx4VQ56UjS+76+PjUPSwru1FIuCIi7TXE8KCQI0A8IOPr6b/YOC 8IDy+tb5Lw4sZHFs4RPbqUH4m1BUCPJN/OjNYDumo35HlzAzg3dAgXQcCVHZWZiEBwMi hU1xvJ5k5rhBvBP89riwRnlfJwlp9WJMV6Lsw4XJvZ9wwfQ+yndFZRymiyaowXfEyegT oy8sCoQfM/T/1UP0xvLC5gBMIei8PsdTOP2+Sm7ZxMM+mchv4lMPFhnQ9FNrS4NeQnkx 35rMmF640bBf+S8+90XKIYYuDLabJ5zewYDouKcw9koIr8TuEv5gcsWuGaVolNT38IFV a9vQ== X-Gm-Message-State: AJIora/I/kEIpumcseIbrWK56PgBBEimvTV7ZnWq0cyU91XjgrEaNbg5 KaUnd7Sw7t+BJvpDEri5M4DQTWzo8C0= X-Google-Smtp-Source: AGRyM1tMU8G1yi56ottGSn4AumI+3fAtq8W2wx0hX13+QimwH9GVcqiEEHGs8fdbizB0M5ahqvLEMQ== X-Received: by 2002:a17:906:93f0:b0:72e:d01f:b882 with SMTP id yl16-20020a17090693f000b0072ed01fb882mr31031119ejb.273.1658300288480; Tue, 19 Jul 2022 23:58:08 -0700 (PDT) Received: from Mini.fritz.box (pd9e3685f.dip0.t-ipconnect.de. [217.227.104.95]) by smtp.gmail.com with ESMTPSA id gz13-20020a170906f2cd00b00722e1bca239sm7510630ejb.204.2022.07.19.23.58.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jul 2022 23:58:07 -0700 (PDT) From: =?utf-8?Q?Gerd_M=C3=B6llmann?= To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: ("Gerd =?utf-8?Q?M=C3=B6llman?= =?utf-8?Q?n=22's?= message of "Tue, 19 Jul 2022 13:20:01 +0200") References: <38c1a31040d2d2bc47ae@heytings.org> Date: Wed, 20 Jul 2022 08:58:06 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (darwin) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Gerd M=C3=B6llmann writes: > Which leaves me with something to think about, of course: when redisplay > sets the flag in the buffer, then there's of course a time before that. > And the question is what can happen in that interval. But not today. > I'll come back to you. So far, I can't think of something specifically catastrophic happening in the interval between a buffer being loaded, let's say, and it being marked with the flag. I think it's the same situation we talked about previously wrt a buffer that is never or not yet displayed: Pretty much anything could potentially happen as soon as an iterator is used. The reason for this is that iterators must know faces and other stuff, let's simply say they must know text properties and overlays. And that can call Lisp, and then all bets are off. If that happens in practice, how often it happens, or what else, I don't know. What's the worst thing that can happen? Slowness, I guess. I can't think of something going seriously down the drain ATM. I guess that's about what I can continute to the whole matter. Nice work. THanks! From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 05:08:26 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 09:08:26 +0000 Received: from localhost ([127.0.0.1]:55833 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE5gw-00064T-2n for submit@debbugs.gnu.org; Wed, 20 Jul 2022 05:08:26 -0400 Received: from heytings.org ([95.142.160.155]:45038) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE5gu-00064I-Po for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 05:08:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658308103; bh=yxIwGYFP82ylXDDmjdfVmqw8lCgxlqVa14JyT7wtJUI=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=Yl+tB+5q5A2mfSqw5i0lrKLF7yp1MEdg0JQqPma/TqbGwbgTXsFVi2OCmIuU7oyJr o3/sZ5eDZEhn+UVVecwcnLVpmHpbtVvYq/mvi2W73TEJsgbazdpibdyf0LN2f6rGq5 5FMOaUUBEAa/2bOK794yFIFVQxyS7nDtkAQDIoS0An4YeY5RDODxnrH6Q2MWH1GLso syer0HQSMILiupnY6EfKiPlUPFwgI4ojl3JOGXi3+UGnAsrINh5xMcJab8q2WGbrZl 6hVhiT389sQrQ09oIUkd86eq72vimOaLszXvI5w/uaJh2T2DQ7jEvrIDbydsDgdxgI ECMzgBLqLgCaA== Date: Wed, 20 Jul 2022 09:08:22 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: <7d422ac79b0dec11e4ea@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <83a695nugr.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > It was mentioned a number of times that only a small fraction of people > encounter that problem. And I'd add that this small fraction encounters > the problem only in a small fraction of cases. And I even think most of > these cases are known upfront. > I agree that it's a relatively rare problem, but when it happens it is very annoying, because Emacs becomes unusable. I disagree, however, that most of theses cases are known upfront, in most cases a user simply opens a file that they can open in other editors without setting any specific option in these other editors, with the expectation that they will be able to edit it in Emacs. Now the situation is reversed: you can open and edit files in Emacs that you cannot open and edit in other editors. > > So, with some kind of mode, one could turn the iterator-narrowing on > (and off!) in redisplay_window without affecting anyone who doesn't have > the problem in the first place. > What we have right now is a kind of (minimal) mode indeed, which is turned on automatically when necessary. And from a user point of view it's also a kind of (minimal) mode, which they can turn off unconditionally by setting long-line-threshold to nil in their init file, or turn on unconditionally by setting long-line-threshold to 0 in their init file. I don't think turning it on unconditionally has any significant drawback, but there some extreme cases where commands would not do their job properly (for example, doing M-> C-u 37000 C-p in xdisp.c), which is why it is not turned on unconditionally by default. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 05:13:24 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 09:13:25 +0000 Received: from localhost ([127.0.0.1]:55854 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE5lk-0006Gr-Jk for submit@debbugs.gnu.org; Wed, 20 Jul 2022 05:13:24 -0400 Received: from heytings.org ([95.142.160.155]:45048) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE5li-0006Gi-VQ for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 05:13:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658308402; bh=MASF2o5mBstdnBD8Wt4R3M1zXAh412bQ8TbSlq+hn88=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=5NngT9OjuURxnRcSt4VP1O8n7kzJtg9sSJbVpEYclY7LWOcD8efuPQLbGkKOcJXom ZWzjCbvJItM/PUfZmkKNelF9Jy4fMswkn6lLMvz2kgINFGtZ/UQMdoIdlOf3e9NmwE ALjpha1FOqjF1SpcFv+cHs0mNCnpb5COdPxvZuMdohjnTncu5pWYLcFfmZeFgKcr9+ WOcIN/RuJShe3O9tS2WH1Aq/OCfOeaoXaHoyGxutWbakRr7NqfOJBjS1De+Lg7YJ1J O/PzwUoeajbQ85EtsRYx3dgXtnVCyF61NF0XkcsAIcqeSqeFc7g45aCw/TKZi1Pc+Y U/go52p1pDB1g== Date: Wed, 20 Jul 2022 09:13:21 +0000 From: Gregory Heytings To: =?UTF-8?Q?Gerd_M=C3=B6llmann?= Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: <7d422ac79b1f73068b54@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="wRnW4V0QVi" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --wRnW4V0QVi Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable >> Which leaves me with something to think about, of course: when=20 >> redisplay sets the flag in the buffer, then there's of course a time=20 >> before that. And the question is what can happen in that interval.=20 >> But not today. I'll come back to you. > > So far, I can't think of something specifically catastrophic happening=20 > in the interval between a buffer being loaded, let's say, and it being=20 > marked with the flag. > > I think it's the same situation we talked about previously wrt a buffer= =20 > that is never or not yet displayed: > > Pretty much anything could potentially happen as soon as an iterator is= =20 > used. The reason for this is that iterators must know faces and other=20 > stuff, let's simply say they must know text properties and overlays. And= =20 > that can call Lisp, and then all bets are off. > > If that happens in practice, how often it happens, or what else, I don't= =20 > know. > > What's the worst thing that can happen? Slowness, I guess. I can't=20 > think of something going seriously down the drain ATM. > Okay, now I see what you mean. As far as I can see (but I could be=20 wrong), there are no significant slowdowns between the moment the file is= =20 opened and the moment it is displayed. If such slowdowns exist, they are= =20 a separate problem, and will be dealt with when they will be reported. > > I guess that's about what I can continute to the whole matter. > > Nice work. THanks! > Thanks! =F0=9F=98=83 --wRnW4V0QVi-- From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 08:07:26 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 12:07:26 +0000 Received: from localhost ([127.0.0.1]:56083 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE8UA-00077U-7E for submit@debbugs.gnu.org; Wed, 20 Jul 2022 08:07:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:58358) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE8U7-00077H-Su for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 08:07:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57298) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oE8U2-0001SJ-Gy; Wed, 20 Jul 2022 08:07:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=gHLAcx2QuoXO3IGLBHp6eFaRSi6jxgDGgiblfTVwioA=; b=AkIcaqk7nuPH WnOJE1geKE36LRgrKyNevShrHFkWINyntImyXd8lGE+RiYiX5znjeg0dJSEi+n9mZjSnP0RPSmeoo kjh/BLkM2gW8nPDlu88+P0gIBP1Wv4Y440uapoaQTxVeDzmjnbnqzy8SzFcyouHJbcimtbiwjS6pJ Cf7O3ih3Qy2OeBweBRyMs0oi57jPfmveJIdead8JPwqK5xTrLl0qcRSR/YVQPFphQTGFNUBt2ATsc ssYHvvsZ1yUW05vkIYjAhndzNMuN3uVmMYQMWxCkPvIg691vuoTxjc++gqtDeSnVYd44PJJv1NsgQ +LpdpN6U8NTUX8CkSqDwRw==; Received: from [87.69.77.57] (port=2776 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oE8Tz-0002WV-Cr; Wed, 20 Jul 2022 08:07:17 -0400 Date: Wed, 20 Jul 2022 15:07:05 +0300 Message-Id: <83zgh4kmxi.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Tue, 19 Jul 2022 21:40:36 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Tue, 19 Jul 2022 21:40:36 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > Would it help if the tick were incremented by the number of inserted (or > > deleted or replaced) characters (perhaps limited by some reasonable > > value, like 1000)? That would be an easy change, and I don't think it > > would break anything, since no current code relies on the exact value of > > the tick, and the value you get after some non-trivial operation on a > > buffer is generally unpredictable anyway. Would that make the tick > > usable for this task? > > It would. In fact it is not even necessary to record the exact number of > inserted/deleted/replaced characters. > > > If you agree, I can make such a change (but feel free to do it > > yourself). > > > > I just did it, is this what you had in mind? The tick is incremented > logarithmically. Yes, thanks. Perhaps add a comment inside modiff_incr explaining why we do it logarithmically. Otherwise, LGTM. (Hmm... should we say something about this in NEWS? Not that I expect some code out there depend on the exact increments in MOFIFF...) From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 09:07:03 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 13:07:04 +0000 Received: from localhost ([127.0.0.1]:56329 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE9Pr-0000PA-Iu for submit@debbugs.gnu.org; Wed, 20 Jul 2022 09:07:03 -0400 Received: from heytings.org ([95.142.160.155]:45258) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE9Po-0000Oi-RR for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 09:07:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658322419; bh=TNk1mqSRrVXzDSsfYXwqGBgeVyM1i92ZhdbViyF5wOA=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=2akPtKC/GfCpl+2RSZhT2jVjtYCAwPFJZ9lcQqGROrUiU0srcMQIdl9yUvo2Rx9uF QGIUhshc7qC7Nxz2y31BvFnjn5R55sIJfZNk6SZ3JrjvpYNpNx/DsPwgGnLOyNxFYp 2cMwShLPDA4uRGahXXm0I9ThBjO1io8nT9ofgCgFC35LJ/Mq0AH1HlZEQSUwpR35ez 1vWt4gTcMkDVvkXSDbAjOEaxtJYr8qMrr6P2A231oJ96zCj53AecByW6wm9Y2FG2sh D9xgHHZ4VJGtM4TkSLuyydvcruNO81Vtovt3nWdKGmn77OgORvu6/LKHIiDY956i8Y ocLekp6w2Vy8w== Date: Wed, 20 Jul 2022 13:06:59 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83zgh4kmxi.fsf@gnu.org> Message-ID: <7d422ac79b437a119a4d@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > Yes, thanks. Perhaps add a comment inside modiff_incr explaining why we > do it logarithmically. > You mean, something like: "Increase the counter more for a large modification and less for a small modification, but increase it logarithmically to avoid increasing it too much for a large modification."? BTW, I think the threshold to trigger the long lines check in redisplay_window could be increased a bit. That is, instead of using "MODIFF - UNCHANGED_MODIFIED > 4" I think we could use "> 8". That would exclude a few more common editing operations, e.g. C-k in a buffer with 80 columns. WDYT? > > (Hmm... should we say something about this in NEWS? Not that I expect > some code out there depend on the exact increments in MOFIFF...) > That would be very surprising, because they are in general unpredictable, and different depending on the context; e.g. MODIFF is incremented when font locking is enabled. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 09:23:35 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 13:23:35 +0000 Received: from localhost ([127.0.0.1]:56359 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE9fr-0000pV-1D for submit@debbugs.gnu.org; Wed, 20 Jul 2022 09:23:35 -0400 Received: from eggs.gnu.org ([209.51.188.92]:50406) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE9fo-0000pH-HO for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 09:23:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:59336) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oE9fj-0000V7-01; Wed, 20 Jul 2022 09:23:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=CPuqhPg1WKPL2Osva53uaRn8PXPK/Asr7/mzZd9U2Tc=; b=sYlS/9n5qwCk 8/HqOhDmTkf9opUg9npty92ZERM0736JZ+PShE5N2bneNVT9DCJ5UdAPmgaFByMaluE9YJ+LIn800 ww9QM81Fc5Up9kQxqzsY7gOEdnM8YPG7z2cYhTMJLc6hN/0oqXcNva9Zp1HFpNMa472F6hqT1ZxPK TFpDoj2U5ZY0S9exD9SSKcPmtv83P9EUvpPs5NtlowBdT5JrbAUy7pUOMyvQ0pWboZ8yLJExTEOiq hky4KtOW/Vr//gPr5fizlrq0VDkLu5dt0LkN+2MISf/LTETpmXqGoq0bJ40kTurlO0Ode3wilLt+V LSeTe2qoJ9mKD9jHUrt1oA==; Received: from [87.69.77.57] (port=3950 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oE9fi-0006VU-G7; Wed, 20 Jul 2022 09:23:26 -0400 Date: Wed, 20 Jul 2022 16:23:16 +0300 Message-Id: <83r12flxyz.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <7d422ac79b437a119a4d@heytings.org> (message from Gregory Heytings on Wed, 20 Jul 2022 13:06:59 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 20 Jul 2022 13:06:59 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > > > > Yes, thanks. Perhaps add a comment inside modiff_incr explaining why we > > do it logarithmically. > > > > You mean, something like: "Increase the counter more for a large > modification and less for a small modification, but increase it > logarithmically to avoid increasing it too much for a large > modification."? No, I mean explaining why we want to be more sensitive to small modifications than to the large. IOW, why we want to avoid linear increments. My original proposal to limit the increment was because I wanted to avoid overflowing the counter when several very large insertions are made. If this is the only reason, I think we should say that in a comment there. > BTW, I think the threshold to trigger the long lines check in > redisplay_window could be increased a bit. That is, instead of using > "MODIFF - UNCHANGED_MODIFIED > 4" I think we could use "> 8". That would > exclude a few more common editing operations, e.g. C-k in a buffer with 80 > columns. WDYT? I have no real experience on which to base my opinions, so feel free to make the change. Like I said, the threshold should be tuned, and we may yet find the need to change it more than once. > > (Hmm... should we say something about this in NEWS? Not that I expect > > some code out there depend on the exact increments in MOFIFF...) > > > > That would be very surprising, because they are in general unpredictable, > and different depending on the context; e.g. MODIFF is incremented when > font locking is enabled. OK, let's wait until someone hollers, if they do. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 09:42:30 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 13:42:30 +0000 Received: from localhost ([127.0.0.1]:56377 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE9yA-0001HJ-8i for submit@debbugs.gnu.org; Wed, 20 Jul 2022 09:42:30 -0400 Received: from heytings.org ([95.142.160.155]:45292) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE9y8-0001H9-BE for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 09:42:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658324547; bh=XUvjYO0sKhwuv6d9f5ncAJ2ITtCEHzse82khN0dHY8g=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=56AVl+SAF/YHVImkrPBHz7XIgcyolQ+faT9rV4bfpbdMVF5mxvl4UFU3UEnU83cKV mSEtS59GQuGfGObtOiaBAKrXtlULAkEHkWceJCBA8VlLJ/qFOUMpIBaP37pSHWFsN0 HtpvKvoFCuBmWJr08ANcpnFvrjNZMNlwnGl4pGz3i3XiJC+m7hyCmp8L9y6rJo9vL6 GaPn+vMLY8F9T3D1DQ4r07Qs2BqVNuqe8tKT6JJ2Y1lgE7SdrJAucucpNyHynnsP8R Oj/Jo87RYqaEgwaeU1WD+ZRrA/2y0bih7mjON4uJW3c6f54DZqqkPdpiE2lK/f/ZLc DG5PbLiCejtUg== Date: Wed, 20 Jul 2022 13:42:26 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83r12flxyz.fsf@gnu.org> Message-ID: <7d422ac79b59898ded81@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> You mean, something like: "Increase the counter more for a large >> modification and less for a small modification, but increase it >> logarithmically to avoid increasing it too much for a large >> modification."? > > No, I mean explaining why we want to be more sensitive to small > modifications than to the large. IOW, why we want to avoid linear > increments. > > My original proposal to limit the increment was because I wanted to > avoid overflowing the counter when several very large insertions are > made. If this is the only reason, I think we should say that in a > comment there. > That's what I understood. I did not decide to go for a logarithmical increase instead of a truncated increase to be more sensitive to small modifications than to large ones, but both (1) because it increases the counter less, and (2) because currently it will be used to make a distinction between a "small" and a "not small" modification, but I can imagine that perhaps some day for some other reason there could be a need to make a distinction between "large" and "very large" modifications, which wouldn't be possible with a truncated increase. Is this better/clearer: "Increase the counter more for a large modification and less for a small modification. Increase it logarithmically to avoid increasing it too much."? From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 11:54:58 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 15:54:58 +0000 Received: from localhost ([127.0.0.1]:58700 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEC2M-0007qb-HN for submit@debbugs.gnu.org; Wed, 20 Jul 2022 11:54:58 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59520) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEC2J-0007qM-PD for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 11:54:56 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:32906) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oEC2E-0002HF-EE; Wed, 20 Jul 2022 11:54:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=Z/UYCJNp0cd36FkSMAGNmCpdEAea2eCeI+TXRrH4Sbk=; b=JGPUgRPAXCT1 RshnGx1gGa49+ty/j8do9rvxUeVgflSTYe7rj5kK/TEklBpQ+/lAm/eIJl4fTXxe8e3giE0WKN0s4 jkCLA6xoDSChmEFKlVOa/nXjG3aDqUl3Qw7/SJzYCDFSz3plHPBqtJWxXL/MK0CUgSzSqM/7hh3hE Ride8Kar9xpo+YdpBd/oLIDkHGkZeJwfpexLQWkr7fa63BJKmDdnzwKDsCEIA6ze7N363qF5Ily2f PQw1al6giWsKfXsVtTpICcZ8dFbcmCzoltqbfvJ0xQWxLACq4JJ+9UHUmM61KI4Tl9zePRUfk7ddI lDJ951iEtayWibot193UPw==; Received: from [87.69.77.57] (port=1261 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oEC2D-0001vB-Tt; Wed, 20 Jul 2022 11:54:50 -0400 Date: Wed, 20 Jul 2022 18:54:41 +0300 Message-Id: <83pmhzlqym.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <7d422ac79b59898ded81@heytings.org> (message from Gregory Heytings on Wed, 20 Jul 2022 13:42:26 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 20 Jul 2022 13:42:26 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > Is this better/clearer: "Increase the counter more for a large > modification and less for a small modification. Increase it > logarithmically to avoid increasing it too much."? Sounds good, thanks. From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 13:33:04 2022 Received: (at 56393) by debbugs.gnu.org; 20 Jul 2022 17:33:04 +0000 Received: from localhost ([127.0.0.1]:58754 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEDZI-0001zo-3o for submit@debbugs.gnu.org; Wed, 20 Jul 2022 13:33:04 -0400 Received: from heytings.org ([95.142.160.155]:45502) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEDZF-0001zL-LE for 56393@debbugs.gnu.org; Wed, 20 Jul 2022 13:33:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658338380; bh=eByea7Zw/HoZaGTGCAmJTUulGymyMwdWVUFsLiQQ6EQ=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=8H7DSjcj5Z2BYYOJXPD4tjFlvEzVnp6eGYCBlqTKTuJQQzvwMjGeKQVBZRA5oo7t6 wLeDTWP24UNCXJ4G7WT7R6KtS0GfbHJ8HqOXRtwF+aPBPspInoBbkyZwjdGaVxCKtu 3s//DwJ+pHk+uE4PTudVZwLPB9E0urqagXOuWmGRD3jauk65o7ARwROuQSTOLLuv5M eYgKOZjRqld5ECf5cD4+doF/VdOe1Cq3Vgeiwx6lR2PL6WN3u9Hpw9k2YE6iacr9El lvLI4rYIybr7kIyoyvJhJAcMST3fJVj8ZlGaNeQwRLAzmnSjGEGbLg5M7P0KJe0RRX 0skp1fxMrmAuw== Date: Wed, 20 Jul 2022 17:33:00 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83pmhzlqym.fsf@gnu.org> Message-ID: <7d422ac79b7b726cda9f@heytings.org> References: <38c1a31040d2d2bc47ae@heytings.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=us-ascii X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Is this better/clearer: "Increase the counter more for a large >> modification and less for a small modification. Increase it >> logarithmically to avoid increasing it too much."? > > Sounds good, thanks. Now done. I also made a few (final?) tweaks. Please tell me if the feature is ready to land on master, or if further improvements are needed. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 02:33:16 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 06:33:16 +0000 Received: from localhost ([127.0.0.1]:36526 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEPkJ-0005MM-OG for submit@debbugs.gnu.org; Thu, 21 Jul 2022 02:33:16 -0400 Received: from eggs.gnu.org ([209.51.188.92]:38754) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEPkH-0005M9-7H for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 02:33:14 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46816) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oEPkB-0005ek-BU; Thu, 21 Jul 2022 02:33:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=r9yFQ9P1IOJaGqiY5rH+Bpq/wU/yf+wcBDOBDC3wS9o=; b=SDPzGjtARZHU upyjMnMo4SAEqQ+iahAVmVtMxdoRM+HNv+c7d744pf1/FNhc1W+c56akL1F8VlJ8lkfyNd/z4100j 48ycX37LdIYOmoPgPhBF2LrMexDVdTNK/ynqVPA4O1lI4pB/nWnopl57Fg74wG6qpe7OS5SYZR+i7 CSQnVxxFn1Kw2AqvfElGkVp9ESMCZY+KLjDDKA97ZwfplyeMH7p2u5Rg+ReUReYbQznUyRiQruq9K AAnb++dCc8qanAYZQTyzGeD93aC6cf4lZq8sk0RVitXg2o0GZ4m5/2kcwzqZuFbF5whSmyAQM1uGC pcnAqvUYtSr5qGVPm85A2w==; Received: from [87.69.77.57] (port=4213 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oEPkA-0003kl-RU; Thu, 21 Jul 2022 02:33:07 -0400 Date: Thu, 21 Jul 2022 09:32:59 +0300 Message-Id: <83k087nffo.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: <7d422ac79b7b726cda9f@heytings.org> (message from Gregory Heytings on Wed, 20 Jul 2022 17:33:00 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 20 Jul 2022 17:33:00 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > I also made a few (final?) tweaks. Please tell me if the feature is ready > to land on master, or if further improvements are needed. Thanks. I think the code is ready to be merged, but what about the documentation? The branch currently removes all traces of the facilities we previously documented as possible remedies for poor performance in these cases. However, we do know that in some situations redisplay and related commands are still very slow. The NEWS entry on the branch does say that font-lock is one reason for the slowdown. So at least that part should be in the manual, perhaps in the form of a shorter description of so-long mode (because one thing it does is disable font-lock). We can remove that later, if and when these problems and any others we find are also resolved. IOW, I think we still don't have enough data and experience to decide that all those other measures will never be needed, so maybe it is too early to delete their docs. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 03:39:34 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 07:39:34 +0000 Received: from localhost ([127.0.0.1]:36587 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEQmU-00078X-F6 for submit@debbugs.gnu.org; Thu, 21 Jul 2022 03:39:34 -0400 Received: from heytings.org ([95.142.160.155]:46148) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEQmQ-00078L-LH for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 03:39:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658389169; bh=ApFr5E/DuVSp/uhsL7ky1zDkkWikumVJKW/E+z/Lurk=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=isop24aBB3FEwnj5658Qle7DWMwdHWe/jPD5TZFcbdDKb90eYVp+mpgXk+NmPS8Ip cXkPRURH79FEWWJQm8itJfUNYHZFwyjMdhjLwwzjDGXOjzRQ+Nh+19u/rSgqLjYkiI /Lmm8pmpbcKrVoS90uRZnkzKrjRU+vUrmH5Rnc2guyTpjvfwQNN6F42h2F2sk11aLb 7VGvKWI4H+EsXB3ST1vyUalizXJTVgeB45+xI8huM8xoz4uyUzvuPycFNltO/3d/37 y9xAJSyEmKjePglUsgqvPylpeprn4bylEvqq3+SC99vuKFxbcaktLIIYVkqAmI8myW 7JUtR5A6xbgNg== Date: Thu, 21 Jul 2022 07:39:28 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83k087nffo.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > I think the code is ready to be merged, but what about the > documentation? The branch currently removes all traces of the > facilities we previously documented as possible remedies for poor > performance in these cases. However, we do know that in some situations > redisplay and related commands are still very slow. The NEWS entry on > the branch does say that font-lock is one reason for the slowdown. > As far as I can see, font locking is the one and only remaining cause of slowdowns that is under control of Emacs. Mode-specific slowdowns can of course not be solved in Emacs. So what about simply turning font locking off unconditionally when long lines are detected in a buffer, until the font locking slowdowns are fixed? > > So at least that part should be in the manual, perhaps in the form of a > shorter description of so-long mode (because one thing it does is > disable font-lock). We can remove that later, if and when these > problems and any others we find are also resolved. > As I told you, I'll start working on the font locking slowdowns as soon as this branch is merged into master. It shouldn't take more than a couple of weeks to fix them. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 03:49:48 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 07:49:48 +0000 Received: from localhost ([127.0.0.1]:36601 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEQwO-0007Rl-6Q for submit@debbugs.gnu.org; Thu, 21 Jul 2022 03:49:48 -0400 Received: from heytings.org ([95.142.160.155]:46168) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEQwM-0007Rd-VO for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 03:49:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658389785; bh=sUAulm11H6TQWHVSMQy6DpyEf6OlQuJr4lE3n4InE0c=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=K1PmoZhy+yB/cSoRZdzkvkg0fWxIwDeeldQL4UqusKX5dtz4YRnqcGtZTZBl+XrC9 xUc8pnMqMAKUMu/O/BVKFJlnUkSlDl4x5cKbpamxIfxDmph7J5VMRLPQVL5rzKnhOO L3gxeTQKq/E7ClswS0E+6TjGbS7wq87IgXQewS5UVsWt8Nd30ZwhbNaJMgkd/g2yeZ XW2E9NYv1+J3ZgjIyhY12YBHfM7cG3vxZBBuQ4KUK4+zQ3yz4OqBbz1D8c9+DfsNDO LNXjDvNCNP1R5VjiztWmFnb87QRmComCfuVQ7c4gulkFN1fqLgpzgJrkPVVhEeuX8T cr+dmitAzqeIw== Date: Thu, 21 Jul 2022 07:49:44 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > > As far as I can see, font locking is the one and only remaining cause of > slowdowns that is under control of Emacs. Mode-specific slowdowns can > of course not be solved in Emacs. So what about simply turning font > locking off unconditionally when long lines are detected in a buffer, > until the font locking slowdowns are fixed? > (Doing that would also make it easier to get feedback about other causes of slowdown, if any.) From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 03:56:55 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 07:56:55 +0000 Received: from localhost ([127.0.0.1]:36607 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oER3G-0007cX-VH for submit@debbugs.gnu.org; Thu, 21 Jul 2022 03:56:55 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52766) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oER3E-0007cI-3N for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 03:56:53 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47512) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oER38-0001Et-PY; Thu, 21 Jul 2022 03:56:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=gJw8HlYIhPMvrk88MiaxCxYoVibG1A4e5BTZ3Q+B0Fk=; b=AnMz0kp/1e0H rAVDNH6IA2STtRaAM4h1l8Jqnfc/4rdRYmUNhbpIDOwmHdvJS5Vc9ZuIxlotSJgjfC5om2EylYgeE ZwF9am0higGJ+w0xg5ICQdrB2/OoMGzvBnHcQlOSo17zgst3qMn+rJYNm26MB0EiPG/zV06PWOqmG fHT1IO2wYzzqmK+82a5irUwSJrwm3LHJOoBHrSlxNhlAVhcZr9UzYP3YRsi4FwbOqxg47ZqXaR+g7 pexqKGkLYZwSOfdPebtcDJ+NkcMSG0IOnRiszlUl1IPd67loC2VPC5W//jya/Ojs/YMek/NQhbRnb HJJBH1HKaHWNlBJFh60H1g==; Received: from [87.69.77.57] (port=1736 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oER38-0003RK-1Q; Thu, 21 Jul 2022 03:56:46 -0400 Date: Thu, 21 Jul 2022 10:56:38 +0300 Message-Id: <83bktioq4p.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Thu, 21 Jul 2022 07:39:28 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Thu, 21 Jul 2022 07:39:28 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > I think the code is ready to be merged, but what about the > > documentation? The branch currently removes all traces of the > > facilities we previously documented as possible remedies for poor > > performance in these cases. However, we do know that in some situations > > redisplay and related commands are still very slow. The NEWS entry on > > the branch does say that font-lock is one reason for the slowdown. > > As far as I can see, font locking is the one and only remaining cause of > slowdowns that is under control of Emacs. Mode-specific slowdowns can of > course not be solved in Emacs. So what about simply turning font locking > off unconditionally when long lines are detected in a buffer, until the > font locking slowdowns are fixed? If that's a temporary measure, I don't think we should do it: coding it would be a throw-away effort. I see no problem to have unfinished code on master, we have that (for other features) all the time. We should delay such decisions until we either fix completely the slowdown due to font-lock, or have a good understanding of the reasons. > > So at least that part should be in the manual, perhaps in the form of a > > shorter description of so-long mode (because one thing it does is > > disable font-lock). We can remove that later, if and when these > > problems and any others we find are also resolved. > > As I told you, I'll start working on the font locking slowdowns as soon as > this branch is merged into master. It shouldn't take more than a couple > of weeks to fix them. Then I guess this is not very important either way. (Still, leaving the text until we know exactly what, if anything, to say instead sounds better to me than removing it and then possibly adding some of it later. But that's me.) From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 04:00:22 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 08:00:22 +0000 Received: from localhost ([127.0.0.1]:36618 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oER6c-0007jp-Ac for submit@debbugs.gnu.org; Thu, 21 Jul 2022 04:00:22 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53478) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oER6a-0007jc-Ql for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 04:00:21 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47568) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oER6V-0001nA-JJ; Thu, 21 Jul 2022 04:00:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=2iSEr0dtBTUxSaHUOZuSaM0IvFrw0tjgLT+vBY8HhiY=; b=DlFFWEUPCGJA xwEwzUzi/wQqi7jVpFSXM4HBxWjE0nc9KwVGwvDCX1gZs/9pigaj6hvv7AQbdgnud302JPW8lhtla 6fOpJK+gdPLOQsJeNCERaCT9MEKdkrmPk6dWZM71BD3eS71t09mdyTO/BctKYkU6UP7Tj74qk1Xuu hCeTukESam2rffXiMvtJAnmN7VDZoGZYn5d0yHwoycOkwYCiv91fgbeGCr8MrZmxBX4Vamr1DULUe Uj2U8qAhg3fO7v73WUSBl1zPques0WxG/djpC3slQch60wjZk5eXg0W108+GrggqwiwZ9whFQl4R2 lRSpgpoJkXjRA2xdI4mqQA==; Received: from [87.69.77.57] (port=1948 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oER6T-0008Ol-Rb; Thu, 21 Jul 2022 04:00:15 -0400 Date: Thu, 21 Jul 2022 11:00:07 +0300 Message-Id: <83a692opyw.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Thu, 21 Jul 2022 07:49:44 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Thu, 21 Jul 2022 07:49:44 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > As far as I can see, font locking is the one and only remaining cause of > > slowdowns that is under control of Emacs. Mode-specific slowdowns can > > of course not be solved in Emacs. So what about simply turning font > > locking off unconditionally when long lines are detected in a buffer, > > until the font locking slowdowns are fixed? > > > > (Doing that would also make it easier to get feedback about other causes > of slowdown, if any.) That could be so, but I'd prefer first to remove the elephant in the room. It's not like people edit such problematic files all the time, so feedback will probably come in quickly only from people who deliberately do that because they want to test this feature. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 04:20:47 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 08:20:47 +0000 Received: from localhost ([127.0.0.1]:36653 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oERQM-0008Gv-VN for submit@debbugs.gnu.org; Thu, 21 Jul 2022 04:20:47 -0400 Received: from heytings.org ([95.142.160.155]:46226) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oERQL-0008Gm-Cz for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 04:20:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658391644; bh=kHMYDEB/Fr5/vzWxbIMrJmOOd/8oPAfvACDyunM0kpg=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=3krsGckFhkS6PyLwvSFsTlDtWvuHzp39y+jcEOolB5MVEpAfNMDd0HtXSSYrvheFA w+FJ1thTCbKapRwEIJrAkh92Svz5yyi5iP8QvPw6Cwt+lQG7PJQ9tQO7942ZLqWM5d Oc+qCd13/FLBjrhlQOIr1aBTtssfOLfId2Uj6eZTr3Sc+L6hqYkjHcsz0gEopWPSLB dz6+amdGAjKLiEuH36SHcmiep9j9Qjk/Ghr0ES2rq/lhvksrGUUG2U8vnhKWCqyAVz 72nadunmXT6/KQBFxqNp0aZeW5EhICo94oGCRZ4N0sHjx2az5N4Zcjvpkbkk8elwtx wTAXZatBd6org== Date: Thu, 21 Jul 2022 08:20:43 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <83bktioq4p.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> <83bktioq4p.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> As I told you, I'll start working on the font locking slowdowns as soon >> as this branch is merged into master. It shouldn't take more than a >> couple of weeks to fix them. > > Then I guess this is not very important either way. (Still, leaving the > text until we know exactly what, if anything, to say instead sounds > better to me than removing it and then possibly adding some of it later. > But that's me.) > So... what do I do? From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 04:58:40 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 08:58:40 +0000 Received: from localhost ([127.0.0.1]:36692 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oES0z-0000rb-0s for submit@debbugs.gnu.org; Thu, 21 Jul 2022 04:58:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:38436) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oES0u-0000rM-B0 for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 04:58:35 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48510) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oES0o-0002ZX-MV; Thu, 21 Jul 2022 04:58:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=bMoYdat1lw8RxKLemErlNVIY++ZysUKOmhS6GA932/o=; b=eUxarH4hGOLv ZtW4181MYSv2PwQE4lZjZEVga6QGqu3mko/sfv3/HutgXQUE+qKmySyo0bwHb6C1pTvA6mmCQEzZG MfLiUooC90XcdD/DrR3QLuNKZyLg+ydUynTLDKimrmVmvu0hHTngwI2wMM+QOoNL9hSHnWFFMKuww GR4MKYeW66gb+YHzhVptAxWa6ahAQmCU3FRMmq5T59ENwuSyeFlnf751LCDo00ydD/IQdVg0V6sES 439cwAqdbIQkWO181ds/TKpVpdVLU3ucYdp+EHDcW530r/JI2acvCCF3/aMctBr7o/RMizQsKXvxj MLWnsxcvOleX9fuvlHxvhw==; Received: from [87.69.77.57] (port=1522 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oES0o-0004Ji-3o; Thu, 21 Jul 2022 04:58:26 -0400 Date: Thu, 21 Jul 2022 11:58:18 +0300 Message-Id: <838romon9x.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Thu, 21 Jul 2022 08:20:43 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> <83bktioq4p.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Thu, 21 Jul 2022 08:20:43 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > >> As I told you, I'll start working on the font locking slowdowns as soon > >> as this branch is merged into master. It shouldn't take more than a > >> couple of weeks to fix them. > > > > Then I guess this is not very important either way. (Still, leaving the > > text until we know exactly what, if anything, to say instead sounds > > better to me than removing it and then possibly adding some of it later. > > But that's me.) > > > > So... what do I do? It's your call. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 05:00:17 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 09:00:17 +0000 Received: from localhost ([127.0.0.1]:36696 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oES2a-0000vw-P3 for submit@debbugs.gnu.org; Thu, 21 Jul 2022 05:00:16 -0400 Received: from heytings.org ([95.142.160.155]:46256) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oES2Z-0000vl-0R for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 05:00:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658394013; bh=ur2QE7rRdNQjs+zPHrMjfG4n0c6K9pUTT2ScS4TTOSQ=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=vcDbffOHOcNdRpOIBUlpjmbGzNocMr5iKYvHzHAuWaLIREh6fzFVCHgMmirwXzYuC 6OF3dUz1Goak/iaOMK5qDOe1xUnvb+TZuAE+/vVVj+cnExPDucAWOFI7b0Yj3GI/Eb KJGOk+INOwWLScQ1xjIOkDh742FL3mcIa/FaApCgzFY9gz1H3h9ojGLdlL7qLrBYnd Ey4U9fapNUMM2Gq5sOFgvYENeH9uVWAZre95NXTe3gZ/uUZHLtFap8P6eq4H8vWki5 9pJK9lBiB2Jm9TGrFRN/qm/JEy8NV2UrKRiU7UeyclH9ysuGOkySOVjf4INcZdd47O HSemvwXhA10Lw== Date: Thu, 21 Jul 2022 09:00:13 +0000 From: Gregory Heytings To: Eli Zaretskii Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <838romon9x.fsf@gnu.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> <83lespomnu.fsf@gnu.org> <83fsixnwh3.fsf@gnu.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> <83bktioq4p.fsf@gnu.org> <838romon9x.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> So... what do I do? > > It's your call. > Okay. Should I wait for Lars' feedback? From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 05:18:43 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 09:18:43 +0000 Received: from localhost ([127.0.0.1]:36719 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oESKR-0001O6-3Q for submit@debbugs.gnu.org; Thu, 21 Jul 2022 05:18:43 -0400 Received: from quimby.gnus.org ([95.216.78.240]:55054) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oESKP-0001Ns-3q for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 05:18:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=XrSNtmsSkJtmVSu65Jeo52UChlo53BR3DyxmS9OYBAk=; b=cMyw3ZvNg5UD+PHKp2nfaBoFWg NjycuZgIB7W/U7OpP20wt7/YNb4DysoIgVh7ikSVxbYCJ8glei19vYptK/jI7fC3PiH2k8hISVPJl DEmeprCD1lyKVDTXNljKxPojt2dG/HlvV11xzOU56iXm4Mi7zryBpe1fFZmO7VQKdBwQ=; Received: from [85.19.210.70] (helo=joga) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oESKF-0001rD-He; Thu, 21 Jul 2022 11:18:33 +0200 From: Lars Ingebrigtsen To: Gregory Heytings Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: (Gregory Heytings's message of "Thu, 21 Jul 2022 09:00:13 +0000") References: <38c1a31040d2d2bc47ae@heytings.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> <83bktioq4p.fsf@gnu.org> <838romon9x.fsf@gnu.org> Date: Thu, 21 Jul 2022 11:18:30 +0200 Message-ID: <878rom6cyh.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Gregory Heytings writes: > Okay. Should I wait for Lars' feedback? Merging into master is fine by me. Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, Eli Zaretskii , 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Gregory Heytings writes: > Okay. Should I wait for Lars' feedback? Merging into master is fine by me. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 05:42:35 2022 Received: (at 56393) by debbugs.gnu.org; 21 Jul 2022 09:42:36 +0000 Received: from localhost ([127.0.0.1]:36730 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEShX-00020F-J4 for submit@debbugs.gnu.org; Thu, 21 Jul 2022 05:42:35 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47636) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEShV-000201-Sn for 56393@debbugs.gnu.org; Thu, 21 Jul 2022 05:42:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48946) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oEShP-00013I-Dh; Thu, 21 Jul 2022 05:42:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=l0uRIW0xNvn4vtponEi2LfqP1iqBU0Gy1u7cgE2uPJU=; b=iG9k7HXyxNAh dCuItJAZjCAxD89GoMaiz8MGNYCqmi0ROtdT2lkyNy7OKgrBK6956SN4cFScYsIEl2fNy1Wx4CwJh 2RPyfedlB393A3cR3aWfGT5pPNoYv0zxKh25J8itUti+UXHH5yXxEMMDsPrSPGMioRtOJ1DCmnK6p /99M5KowXhR4pbltKPrD4fb8Jtb2TqoCjtn7ooKwfdnHYLhiLNFRWiSaS2P6XXvFVPtd5/jPqK1RM zlsBGN2ygoYchaLJ7Ho6EVJmWA2hn2ty35RVylYPuj1cIFgEtXzqW4cDNvQfwWX0W0M4KrhKmEtLP Z/48xLiQHrM1mxETvsPalQ==; Received: from [87.69.77.57] (port=4201 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oEShN-0003QL-Jo; Thu, 21 Jul 2022 05:42:26 -0400 Date: Thu, 21 Jul 2022 12:42:18 +0300 Message-Id: <837d46ol8l.fsf@gnu.org> From: Eli Zaretskii To: gregory@heytings.org In-Reply-To: <83r12intar.fsf@gnu.org> (message from Eli Zaretskii on Mon, 18 Jul 2022 21:56:44 +0300) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <834jzt59jt.fsf@gnu.org> <831qux5806.fsf@gnu.org> <9C70BEF7-08EC-46A0-89D3-547417FA01F8@gmail.com> <83let43xg9.fsf@gnu.org> <83sfna3gzq.fsf@gnu.org> <83fsja36an.fsf@gnu.org> <34362AA6-6404-4727-9C60-6B6CA6736DD4@gnus.org> <83v8rvpxx7.fsf@gnu.org> <209e6aa436f84e1f729a@heytings.org> <83sfmzpw4e.fsf@gnu.org> <83h73epq7v.fsf@gnu.org> <83cze2pmtk.fsf@gnu.org> <838roqpkjs.fsf@gnu.org> <831quipdt2.fsf@gnu.org> <83r12intar.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393 Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > Date: Mon, 18 Jul 2022 21:56:44 +0300 > From: Eli Zaretskii > > > Date: Mon, 18 Jul 2022 18:26:22 +0000 > > From: Gregory Heytings > > cc: gerd.moellmann@gmail.com, larsi@gnus.org, 56393@debbugs.gnu.org > > > > > > >> Thanks, but couldn't we use the existing BUF_CHARS_MODIFF for that? > > > > > > I'll have a look, thanks. > > > > > > > And the answer is no. (I tried to use it, but did not remember the reason > > why it was not usable in this context while writing my previous reply.) > > I don't know what BUF_CHARS_MODIFF records > > What BUF_CHARS_MODIFF records is documented in the doc string of > buffer-chars-modified-tick. > > > but it is for example == 2 before and after C-x i dictionary.json > > RET. > > It's a bug, plain and simple. Should now be fixed on the master branch. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 07:56:25 2022 Received: (at 56393-done) by debbugs.gnu.org; 21 Jul 2022 11:56:25 +0000 Received: from localhost ([127.0.0.1]:36797 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEUn3-0008Pk-9k for submit@debbugs.gnu.org; Thu, 21 Jul 2022 07:56:25 -0400 Received: from heytings.org ([95.142.160.155]:46424) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEUmy-0008PT-Gv for 56393-done@debbugs.gnu.org; Thu, 21 Jul 2022 07:56:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1658404579; bh=Li3C7HIgqvAb6O9X/Sju22HgMuH2aZ3/XaKw8AGNJ5o=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=bqLjx1E2lZFro84hRE2V9UJkuWSia04978bSqi8ufNHWJpc7MJb5WTDBoTEMTwEow C56hTDUHxN7ZQkafcdikokZpOLlK08whvwjfdiWJmKJJAYv6st+ZvaeVCbsNaDkDc0 sY5lrGWAGbw0PlYn7/LEU8dMiJpJsMxjN4f4tucsqw0KFxJSPl3WkqPKZ+ii5PrdmF J0Ss25kU1Xt4XOVVc13n6X1Yi3BBSc3772ZE1Sj/7dY1oIIqib7FeZ3mh1ekQmINFw l1r29rr6TWvEVMhSuGU0teBgVnXkCG4XPj2qGlV4HyRyir1wQwrZ8vgk9bWoUHXv7p 5EfZHNzOJdhnA== Date: Thu, 21 Jul 2022 11:56:18 +0000 From: Gregory Heytings To: Lars Ingebrigtsen Subject: Re: bug#56393: Actually fix the long lines display bug In-Reply-To: <878rom6cyh.fsf@gnus.org> Message-ID: References: <38c1a31040d2d2bc47ae@heytings.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> <83bktioq4p.fsf@gnu.org> <838romon9x.fsf@gnu.org> <878rom6cyh.fsf@gnus.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56393-done Cc: gerd.moellmann@gmail.com, 56393-done@debbugs.gnu.org, Eli Zaretskii X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) >> Okay. Should I wait for Lars' feedback? > > Merging into master is fine by me. > Thanks, now done. Should I delete the feature branch? I don't remember what the policy is. From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 21 08:22:28 2022 Received: (at 56393-done) by debbugs.gnu.org; 21 Jul 2022 12:22:28 +0000 Received: from localhost ([127.0.0.1]:36835 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEVCG-0000iy-G6 for submit@debbugs.gnu.org; Thu, 21 Jul 2022 08:22:28 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49430) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEVCE-0000im-KP for 56393-done@debbugs.gnu.org; Thu, 21 Jul 2022 08:22:27 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50990) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oEVC9-0003X9-7m; Thu, 21 Jul 2022 08:22:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=nkW5H8vdig8ddfIG2W9L71YOQY6XbSLpsXHz/+xWTHc=; b=ABc1WTRslJsZ NKgHAt0RlHWjtdy+3kBU7Is3oCClDicYpFy8xrzOyW/sbabkiMwrnkqmvQvXdIRd0jqQ02oGdv9aS TaJWHBqjwJnVsiAxP0CM5PBpicPOXBfxCGfoxH94FqzAeoF2lC+W9B9oDDbq9+k2G7Lj4wYhFYbV2 uE9/p2O/TnfYlMZyOe8r/QIF3kpoAxG50CJh98122CrhYAir6YN1p1WfJ2xNjE2ifOo3mrtt7J072 PXh9lDPgb4cETQA5Xn/IiDXgMbhrQT+g1N/d5qQ6dFFXrslkTDtEkMUC4+2PWxhnYuhRwhMUB8TkE 0+Uhmjld42ENRO6PEMWadw==; Received: from [87.69.77.57] (port=2230 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oEVC8-0000bj-DN; Thu, 21 Jul 2022 08:22:20 -0400 Date: Thu, 21 Jul 2022 15:22:13 +0300 Message-Id: <8335euodu2.fsf@gnu.org> From: Eli Zaretskii To: Gregory Heytings In-Reply-To: (message from Gregory Heytings on Thu, 21 Jul 2022 11:56:18 +0000) Subject: Re: bug#56393: Actually fix the long lines display bug References: <38c1a31040d2d2bc47ae@heytings.org> <834jzdnsxw.fsf@gnu.org> <83y1wpmciw.fsf@gnu.org> <83wnc9mbg4.fsf@gnu.org> <83o7xlm64k.fsf@gnu.org> <83zgh4kmxi.fsf@gnu.org> <7d422ac79b437a119a4d@heytings.org> <83r12flxyz.fsf@gnu.org> <7d422ac79b59898ded81@heytings.org> <83pmhzlqym.fsf@gnu.org> <7d422ac79b7b726cda9f@heytings.org> <83k087nffo.fsf@gnu.org> <83bktioq4p.fsf@gnu.org> <838romon9x.fsf@gnu.org> <878rom6cyh.fsf@gnus.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 56393-done Cc: gerd.moellmann@gmail.com, 56393-done@debbugs.gnu.org, larsi@gnus.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Thu, 21 Jul 2022 11:56:18 +0000 > From: Gregory Heytings > cc: gerd.moellmann@gmail.com, Eli Zaretskii , > 56393-done@debbugs.gnu.org > > > >> Okay. Should I wait for Lars' feedback? > > > > Merging into master is fine by me. > > Thanks, now done. Thanks. > Should I delete the feature branch? I don't remember what the policy is. The general policy is to delete them. My suggestion is to wait for a few days before actually deleting the branch, just so the dust settles. From unknown Sat Sep 20 11:29:47 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Fri, 19 Aug 2022 11:24:06 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator