X-Loop: help-debbugs@HIDDEN Subject: bug#73563: [Ben Simms] Performance bottleneck in ns_draw_fringe_bitmap Resent-From: Stefan Kangas <stefankangas@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: ben@HIDDEN, bug-gnu-emacs@HIDDEN Resent-Date: Mon, 30 Sep 2024 08:03:02 +0000 Resent-Message-ID: <handler.73563.B.17276833795514 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 73563 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 73563 <at> debbugs.gnu.org Cc: Ben Simms <ben@HIDDEN> X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN X-Debbugs-Original-Xcc: Ben Simms <ben@HIDDEN> Received: via spool by submit <at> debbugs.gnu.org id=B.17276833795514 (code B ref -1); Mon, 30 Sep 2024 08:03:02 +0000 Received: (at submit) by debbugs.gnu.org; 30 Sep 2024 08:02:59 +0000 Received: from localhost ([127.0.0.1]:44622 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1svBMw-0001Qs-MH for submit <at> debbugs.gnu.org; Mon, 30 Sep 2024 04:02:59 -0400 Received: from lists.gnu.org ([209.51.188.17]:50282) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <stefankangas@HIDDEN>) id 1svBMu-0001Qi-Bt for submit <at> debbugs.gnu.org; Mon, 30 Sep 2024 04:02:57 -0400 Received: from [2001:470:142:3::10] (helo=eggs.gnu.org) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <stefankangas@HIDDEN>) id 1svAqT-00015S-DX for bug-gnu-emacs@HIDDEN; Mon, 30 Sep 2024 03:29:25 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <stefankangas@HIDDEN>) id 1svApn-0007ve-HO for bug-gnu-emacs@HIDDEN; Mon, 30 Sep 2024 03:29:19 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-37ce14ab7eeso1335559f8f.2 for <bug-gnu-emacs@HIDDEN>; Mon, 30 Sep 2024 00:27:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727681265; x=1728286065; darn=gnu.org; h=to:subject:message-id:date:mime-version:references:from:from:to:cc :subject:date:message-id:reply-to; bh=nca+oUsU+ZdAgNPc7kYpDTpQ1SKouoAfbK4g/qjl0Ec=; b=Z84zTd+Cju5fGWCLcHCPiTKUFospdrvzAhUgyk6UmLXkRTVLeIJcpOtgLQD7SPDr2u 8XkkNwgcOYLs8u+kvrwYbcHmRGOhil41gkFbnOHrb6JvN04I52g99tVRx7YrgI8EZ9ce iZ7dBrE8SSeE2ZcFxCJQZf1Ow5E5amAkc96WWhJpZesaTdQo8+8OqgOcriiG+agKL4+b zF6QF4we1MDAEAHz1JO5khbTImZ4iLNufUKu7wyxH34MvlnIoOPp31hoSpKBSSaMuWqc fJ95jaiSHiSh4BWjEuJ8A8MWjaQoyyeoZncY9h9qErJHxqvH8ut3tKbONHflhtVEnFC/ 1KuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727681265; x=1728286065; h=to:subject:message-id:date:mime-version:references:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=nca+oUsU+ZdAgNPc7kYpDTpQ1SKouoAfbK4g/qjl0Ec=; b=BGjlPYZXL9IOalWH+eI3PwUXZz9WdjZ/hhl1J1r9NogTFITS5ErO8Ox5Vc9S8SoF96 6MHeFSJ4+I/wMtgfKdOsXyHfS+/+Gr6/fxAB7g2eFeJkEFZTeVa/OBnsVsp85C+vlExx AcUn9whGseSS+N1XE2ceHjTZXhen1umtuGNdDAPlT5sf7pFQeTaVFIJf/OFav+JNcrY4 d4XcLFNeTSaEKAiGWW9IPE0SE8ccskWhY3sm7Im97U61EoANdYo8cZjJO8WKIYktFfSR yjaa0yGv2wWaLy095Sn0kpcko21JmtkavGe7/XsQPfIVqCkR6VRK7DSOmlin16FdHLez vYhw== X-Gm-Message-State: AOJu0YzwW0jiHSDmQZQZ+VAI9Miy8MtXVYaSIQoadSwBeWsG/oQ6/OTJ wEXmX/L9BO1BvINCz7wdPyveEl/SvO5VCR0gBbVK1qpnTywwnvIilijju45VXPCeO5r2AKCr7T6 Gtf+a7SvLvPENTFF57rq188SLJykDdw== X-Google-Smtp-Source: AGHT+IEgCABam4U7Nkv5XlRhtMOIgzcBqaOm8+hdRVB1FoXngnil0ijfzOxdvxCGdMzLpmcLY5ybtfNTabRa/RrBu8c= X-Received: by 2002:a05:6402:909:b0:5c5:b6ee:e95b with SMTP id 4fb4d7f45d1cf-5c8824d3c0cmr20532107a12.8.1727680863699; Mon, 30 Sep 2024 00:21:03 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Mon, 30 Sep 2024 07:21:03 +0000 From: Stefan Kangas <stefankangas@HIDDEN> References: <CALNBX0aNy78GFVTfR_4O6hdeOcBiFLiKUJSi+kVbciXqLOd+jw@HIDDEN> MIME-Version: 1.0 Date: Mon, 30 Sep 2024 07:21:03 +0000 Message-ID: <CADwFkmn9fhiU7XfXu5Ku+ouuxH=J+cx73n-APP7Gkq4FdywD0g@HIDDEN> Content-Type: multipart/mixed; boundary="0000000000002a887a0623510c8e" Received-SPF: pass client-ip=2a00:1450:4864:20::42d; envelope-from=stefankangas@HIDDEN; helo=mail-wr1-x42d.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, T_SPF_HELO_TEMPERROR=0.01, T_SPF_TEMPERROR=0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.0 (/) --0000000000002a887a0623510c8e Content-Type: text/plain; charset="UTF-8" I'm forwarding this to the bug tracker so that we don't lose track of it. Original message: https://lists.gnu.org/r/emacs-devel/2024-06/msg00900.html -------------------- Start of forwarded message -------------------- From: Ben Simms <ben@HIDDEN> Date: Wed, 26 Jun 2024 13:56:43 +0200 Subject: Performance bottleneck in ns_draw_fringe_bitmap To: emacs-devel@HIDDEN --0000000000002a887a0623510c8e Content-Type: text/plain; charset="US-ASCII" Content-Disposition: attachment Content-Transfer-Encoding: base64 X-Attachment-Id: 583748d02080dd75_0.2 LS0tLS0tLS0tLS0tLS0tLS0tLS0gRW5kIG9mIGZvcndhcmRlZCBtZXNzYWdlIC0tLS0tLS0tLS0t LS0tLS0tLS0tCg== --0000000000002a887a0623510c8e Content-Type: text/html; charset="utf-8" Content-Disposition: attachment Content-Transfer-Encoding: base64 X-Attachment-Id: 583748d02080dd75_0.1.1 PGRpdiBkaXI9Imx0ciI+SGkgYWxsLCBJIHJlY2VudGx5IHN0YXJ0ZWQgdXNpbmcgRW1hY3MgKG5z KSBIRUFEIG9uIGFuIEFSTSBtYWNvcyBzb25vbWEgc3lzdGVtLjxkaXY+PGJyPjwvZGl2PjxkaXY+ SSYjMzk7dmUgbm90aWNlZCB0aGF0IG5zX2RyYXdfZnJpbmdlX2JpdG1hcCBpcyBhIGZhaXJseSBs YXJnZSBwZXJmb3JtYW5jZSBzaW5rIHdoZW4gdXNpbmcgcGl4ZWwgc2Nyb2xsaW5nICh0byB0aGUg cG9pbnQgb2YgOTklIG9mIGNwdSB0aW1lIGJlaW5nIGluc2lkZSB0aGlzIGZ1bmN0aW9uLCB3aXRo IEVtYWNzIGRyYXdpbmcgYXQgYXBwcm94IDVIeikuIFRoZSBzbG93bmVzcyBoZXJlIGlzbiYjMzk7 dCBhcyBvYnZpb3VzIHdoZW4gbm90IHBpeGVsIHNjcm9sbGluZywgcHJlc3VtYWJseSBiZWNhdXNl IEVtYWNzIG5ldmVyIHRyaWVzIHRvIHJlZHJhdyBhdCA2MCtIeiBvdGhlcndpc2UuPC9kaXY+PGRp dj48YnI+PC9kaXY+PGRpdj5JIGhhdmUgcGVyZm9ybWVkIHNvbWUgcHJvZmlsaW5nIGFuZCBkaXNj b3ZlcmVkIHRoYXQgaW4gbXkgb2JzZXJ2ZWQgd29yc2UgY2FzZSBzaXR1YXRpb24sIG9mIHRoZSA5 OSUgb2YgY3B1IHRpbWUgc3BlbnQgaW4gbnNfZHJhd19mcmluZ2VfYml0bWFwLCBhcHByb3ggNTAl IGlzIHNwZW50IGluIFtOU0JlemllclBhdGggY29weV0sIGFuZCBhcHByb3ggMzAlIGluIFtOU0Jl emllclBhdGggZmlsbF0uPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JIGhhdmUgdXNlZCB0aGUg Zm9sbG93aW5nIGJlbmNobWFyayB3aXRoIGVtYWNzIC1RIHRvIGF0dGVtcHQgdG8gcmVwcm9kdWNl IG15IGVuY291bnRlcmVkIHBlcmZvcm1hbmNlIGlzc3VlLCBob3dldmVyIEkgY2Fubm90IHJlcHJv ZHVjZSBleGFjdGx5IHRoZSBleHRyZW1lIGNhc2UgSSBleHBlcmllbmNlIGluIG15IGNvbmZpZywg YnV0IEkgaGF2ZSB1c2VkIHRoaXMgYmVuY2htYXJrIHRvIHZhbGlkYXRlIGEgcGF0Y2ggdGhhdCBz b2x2ZXMgdGhlIHNsb3dkb3duIEkmIzM5O20gZXhwZXJpZW5jaW5nOjwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+KGRlZnVuIHNjcm9sbC11cC1iZW5jaG1hcmsgKCk8YnI+wqAgKGludGVyYWN0aXZl KTxicj7CoCAobGV0ICgob2xkZ2MgZ2NzLWRvbmUpPGJyPsKgIMKgIMKgIMKgIChvbGR0aW1lIChm bG9hdC10aW1lKSkpPGJyPsKgIMKgIMKgIChkb3RpbWVzIChfIDEwKSAocGl4ZWwtLXdoaXN0bGVz dG9wLXBpeGVsLXVwICgqIDUgKHBpeGVsLWxpbmUtaGVpZ2h0KSkpIMKgKHBpeGVsLXNjcm9sbC1w aXhlbC1kb3duICgqIDUgKHBpeGVsLWxpbmUtaGVpZ2h0KSkpKTxicj7CoCDCoCDCoCAocHJpbmMg KGZvcm1hdCAmcXVvdDtHQ3M6ICVkIEVsYXBzZWQgdGltZTogJWYgc2Vjb25kc1xuJnF1b3Q7PGJy PsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgtIGdjcy1kb25lIG9sZGdjKSAo LSAoZmxvYXQtdGltZSkgb2xkdGltZSkpICMmIzM5O2V4dGVybmFsLWRlYnVnZ2luZy1vdXRwdXQp KSk8YnI+PGJyPihkZWZ1biBhZGQtZnJpbmdlcyAoKTxicj7CoCAoaW50ZXJhY3RpdmUpPGJyPsKg IChkb3RpbWVzIChfIDIwKTxicj7CoCDCoCAobmV3bGluZS1hbmQtaW5kZW50KTxicj7CoCDCoCAo aW5zZXJ0ICZxdW90O0EmcXVvdDspPGJyPsKgIMKgIChnb3RvLWNoYXIgKGxpbmUtYmVnaW5uaW5n LXBvc2l0aW9uKSk8YnI+wqAgwqAgKGxldCAoKHMgJnF1b3Q7eCZxdW90Oyk8YnI+wqAgwqAgwqAg wqAgwqAgKGZyaW5nZS1vdmVybGF5IChtYWtlLW92ZXJsYXkgKHBvaW50KSAoMSsgKHBvaW50KSkp KSk8YnI+wqAgwqAgwqAgKHB1dC10ZXh0LXByb3BlcnR5IDAgMSAmIzM5O2Rpc3BsYXkgKGxpc3Qg JiMzOTtsZWZ0LWZyaW5nZSAmIzM5O2xlZnQtdHJpYW5nbGUpIHMpPGJyPsKgIMKgIMKgIChvdmVy bGF5LXB1dCBmcmluZ2Utb3ZlcmxheSAmIzM5O2JlZm9yZS1zdHJpbmcgcykpPGJyPsKgIMKgIChn b3RvLWNoYXIgKGxpbmUtZW5kLXBvc2l0aW9uKSkpKTxicj48YnI+KHNjcm9sbC1iYXItbW9kZSAt MSk8YnI+KG1lbnUtYmFyLW1vZGUgLTEpPGJyPihwaXhlbC1zY3JvbGwtbW9kZSk8YnI+KHBpeGVs LXNjcm9sbC1wcmVjaXNpb24tbW9kZSk8YnI+KHNldHE8YnI+wqAgwqAgwqAgcGl4ZWwtc2Nyb2xs LXByZWNpc2lvbi11c2UtbW9tZW50dW0gdCk8YnI+PGJyPihkb3RpbWVzIChfIDIwKTxicj7CoCAo YWRkLWZyaW5nZXMpKTxicj4oZG90aW1lcyAoXyA1KTxicj7CoCAoZW5kLW9mLWJ1ZmZlcik8YnI+ wqAgKGNvbmRpdGlvbi1jYXNlIG5pbCAod2hpbGUgdCAoc2Nyb2xsLWRvd24pKTxicj7CoCDCoCAo ZXJyb3IgbmlsKSk8YnI+wqAgKHNjcm9sbC11cC1iZW5jaG1hcmspKTxicj48ZGl2Pjxicj48L2Rp dj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk9uIEVtYWNzIChlNGUxZDBjZDApIHRoaXMgcmVwb3J0cyB0 aGUgZm9sbG93aW5nOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+R0NzOiAxNCBFbGFwc2VkIHRp bWU6IDUuNDQ5MDMyIHNlY29uZHM8YnI+R0NzOiAxNCBFbGFwc2VkIHRpbWU6IDUuMjA5MDA2IHNl Y29uZHM8YnI+R0NzOiAxMyBFbGFwc2VkIHRpbWU6IDUuMTg3Nzc5IHNlY29uZHM8YnI+R0NzOiAx MyBFbGFwc2VkIHRpbWU6IDUuMTc4NDcyIHNlY29uZHM8YnI+R0NzOiAxMyBFbGFwc2VkIHRpbWU6 IDUuMTg0NzQxIHNlY29uZHM8YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGUgcHJvZmls ZXIgb3V0cHV0IGZvciB0aGlzIGlzIHRoZSBmb2xsb3dpbmc6PC9kaXY+PGRpdj48YnI+PC9kaXY+ PGRpdj5XZWlnaHQgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU2VsZiBXZWlnaHQgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU3ltYm9sIE5hbWU8YnI+MTEu MzAgR2MgwqAxMDAuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMS4wMCBNYyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBGcmVkaXNwbGF5PGJyPjExLjMw IEdjIMKgIDk5LjklIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJl YTxicj4xMS4xMiBHYyDCoCA5OC4zJSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAxLjAwIE1jIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmVkaXNwbGF5 X2ludGVybmFsPGJyPjYuOTcgR2MgwqAgNjEuNiUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnRlcm5h bF9jb25kaXRpb25fY2FzZV8xPGJyPjYuOTcgR2MgwqAgNjEuNiUgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHJlZGlzcGxheV93aW5kb3dfMTxicj42Ljk3IEdjIMKgIDYxLjYlIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgcmVkaXNwbGF5X3dpbmRvdzxicj41LjYwIEdjIMKgIDQ5LjUlIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqB0cnlfd2luZG93PGJyPjEuMjUgR2MgwqAgMTEuMCUgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGRpc3BsYXlfbW9kZV9saW5lczxicj4xMTEuNjggTWMgwqAgwqAw LjklIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB1cGRhdGVfZnJhbWVfdG9vbF9iYXI8YnI+Ni4w MCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGd1aV9jb25zaWRlcl9mcmFt ZV90aXRsZTxicj4yLjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAxLjAw IE1jIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgdXBkYXRlX3dpbmRvd19mcmluZ2VzPGJyPjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqByZWNvbnNpZGVyX2NsaXBfY2hhbmdlczxicj4xLjAwIE1jIMKg IMKgMC4wJSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3Vyc29yX3Jvd19mdWxseV92aXNpYmxl X3A8YnI+MS4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMS4wMCBNYyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoF9f X2Noa3N0a19kYXJ3aW48YnI+MS4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoHJlZGlzcGxheV90YWJfYmFyPGJyPjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0cnlfd2luZG93X2lkPGJyPjMuNjQgR2MgwqAgMzIuMiUg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCB1cGRhdGVfZnJhbWU8YnI+My40NyBHYyDCoCAzMC42JSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgdXBkYXRlX3dpbmRvd190cmVlPGJyPjMuNDcgR2MgwqAgMzAuNiUg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1cGRhdGVfd2luZG93PGJyPjIuMTUgR2MgwqAg MTkuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGd1aV91cGRhdGVfd2luZG93X2VuZDxicj4y LjExIEdjIMKgIDE4LjYlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZHJhd193aW5kb3dfZnJp bmdlczxicj4yLjA5IEdjIMKgIDE4LjQlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDEuMDAgTWMg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBkcmF3X3Jvd19mcmluZ2VfYml0bWFwczxicj4yMC4wMCBNYyDCoCDCoDAuMSUgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHNldF9idWZmZXJfaW50ZXJuYWxfMTxicj40MC4wMCBNYyDCoCDC oDAuMyUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkaXNwbGF5X2FuZF9zZXRfY3Vyc29yPGJy PjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDEuMDAgTWMgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ3VpX2Ry YXdfdmVydGljYWxfYm9yZGVyPGJyPjU4Ni4xOCBLYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCB1bmJsb2NrX2lucHV0PGJyPjEuMjggR2MgwqAgMTEuMyUgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgMy4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHVwZGF0ZV93aW5kb3dfbGluZTxicj4yNS4wMCBNYyDCoCDCoDAu MiUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMy4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHNjcm9sbGluZ193aW5kb3c8YnI+OS4z OSBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMy4wMCBNYyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVwZGF0ZV93aW5k b3dfZnJpbmdlczxicj4xLjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAx LjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgcmVkcmF3X292ZXJsYXBwZWRfcm93czxicj4xLjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCAxLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmVkcmF3X292ZXJsYXBwaW5nX3Jvd3M8YnI+MTUyLjUz IE1jIMKgIMKgMS4zJSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdXBkYXRlX2JlZ2luPGJyPjE4Ljcy IE1jIMKgIMKgMC4xJSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdXBkYXRlX2VuZDxicj4zOTcuMDUg TWMgwqAgwqAzLjUlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJlcGFyZV9tZW51X2JhcnM8YnI+OTEu NDEgTWMgwqAgwqAwLjglIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZWNob19hcmVhX2Rpc3BsYXk8YnI+ NS4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBuc19mcmFtZV91cF90b19kYXRl PGJyPjQuMDEgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3RhcnRfcG9sbGluZzxi cj40LjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAxLjAwIE1jIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVuYmluZF90bzxi cj4zLjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAyLjAwIE1jIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJ1bl93aW5kb3df Y2hhbmdlX2Z1bmN0aW9uczxicj4yLjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGhzY3JvbGxfd2luZG93czxicj4xLjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAxLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIFhDT05TPGJyPjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgRmdl dGhhc2g8YnI+MS4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbGVhcl9kZXNp cmVkX21hdHJpY2VzPGJyPjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgbWFya193aW5kb3dfZGlzcGxheV9hY2N1cmF0ZV8xPGJyPjEuMDAgTWMgwqAgwqAwLjAlIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgbnNfc2V0X2RvY19lZGl0ZWQ8YnI+MS4wMCBNYyDCoCDCoDAuMCUg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbGVhcl9nYXJiYWdlZF9mcmFtZXM8YnI+MTgxLjI5 IE1jIMKgIMKgMS42JSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZmx1c2hfZnJhbWU8YnI+MS4wMCBNYyDC oCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVuYmluZF90bzxicj48YnI+PGJyPjExLjkwIEdj IMKgMTAwLjAlIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg RnJlZGlzcGxheTxicj4xMS45MCBHYyDCoCA5OS45JSDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWE8YnI+MTEu NjYgR2MgwqAgOTcuOSUgwqAgwqAgwqAgwqAgwqAgMi4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHJlZGlzcGxheV9pbnRlcm5hbDxicj43LjQ4IEdjIMKgIDYyLjglIMKgIMKg IMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50ZXJuYWxfY29u ZGl0aW9uX2Nhc2VfMTxicj43LjQ4IEdjIMKgIDYyLjglIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZWRpc3BsYXlfd2luZG93XzE8YnI+Ny40OCBH YyDCoCA2Mi44JSDCoCDCoCDCoCDCoCDCoCAzLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHJlZGlzcGxheV93aW5kb3c8YnI+Ni4zNSBHYyDCoCA1My4zJSDCoCDCoCDC oCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdHJ5X3dpbmRv dzxicj42LjIzIEdjIMKgIDUyLjMlIMKgIMKgIMKgIMKgIMKgIDM3LjAzIE1jIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRpc3BsYXlfbGluZTxicj43My43MCBNYyDCoCDC oDAuNiUgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBzdGFydF9kaXNwbGF5PGJyPjQ0LjAxIE1jIMKgIMKgMC4zJSDCoCDCoCDCoCDCoCDCoCAt IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBhcnRpYWxfbGluZV9oZWln aHQ8YnI+MS4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgMS4wMCBNYyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhcHBlbmRfc3BhY2VfZm9yX25ld2xpbmU8YnI+ MS4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBndWlfcHJvZHVjZV9nbHlwaHM8YnI+OTc3LjQ4IE1jIMKg IMKgOC4yJSDCoCDCoCDCoCDCoCDCoCAxLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgZGlzcGxheV9tb2RlX2xpbmVzPGJyPjEyNS44MCBNYyDCoCDCoDEuMCUgwqAg wqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVwZGF0 ZV9mcmFtZV90b29sX2Jhcjxicj4xMC4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGd1aV9jb25zaWRlcl9mcmFtZV90 aXRsZTxicj43LjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCAzLjAwIE1jIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdXBkYXRlX3dpbmRvd19mcmluZ2VzPGJyPjEu MDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBjdXJzb3Jfcm93X2Z1bGx5X3Zpc2libGVfcDxicj4xLjAwIE1jIMKgIMKg MC4wJSDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgdW5iaW5kX3RvPGJyPjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBXSU5ET1dQPGJyPjEuMDAgTWMgwqAgwqAw LjAlIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqB3aW5kb3dfd2FudHNfbW9kZV9saW5lPGJyPjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKg IMKgIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB3aW5kb3df c2Nyb2xsX21hcmdpbjxicj4zLjI0IEdjIMKgIDI3LjIlIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdXBkYXRlX2ZyYW1lPGJyPjMuMDYgR2MgwqAgMjUu NyUgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVw ZGF0ZV93aW5kb3dfdHJlZTxicj4zLjA2IEdjIMKgIDI1LjclIMKgIMKgIMKgIMKgIMKgIDEuMDAg TWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdXBkYXRlX3dpbmRvdzxicj4x LjU4IEdjIMKgIDEzLjIlIMKgIMKgIMKgIMKgIMKgIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBndWlfdXBkYXRlX3dpbmRvd19lbmQ8YnI+MS41NCBHYyDCoCAx Mi45JSDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGRyYXdfd2luZG93X2ZyaW5nZXM8YnI+MS41MCBHYyDCoCAxMi42JSDCoCDCoCDCoCDCoCDC oCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZHJhd19yb3dfZnJp bmdlX2JpdG1hcHM8YnI+MS41MCBHYyDCoCAxMi42JSDCoCDCoCDCoCDCoCDCoCAyLjAwIE1jIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRyYXdfZnJpbmdlX2JpdG1h cDxicj42MDguMzUgS2MgwqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIDYwOC4zNSBLYyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBGUkFNRV9SSUdIVF9GUklOR0VfV0lE VEg8YnI+MzQuMDEgTWMgwqAgwqAwLjIlIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzZXRfYnVmZmVyX2ludGVybmFsXzE8YnI+MzguMDAg TWMgwqAgwqAwLjMlIMKgIMKgIMKgIMKgIMKgIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgZGlzcGxheV9hbmRfc2V0X2N1cnNvcjxicj4xLjQ0IEdjIMKgIDEy LjAlIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqB1cGRhdGVfd2luZG93X2xpbmU8YnI+MzEuMDAgTWMgwqAgwqAwLjIlIMKgIMKgIMKgIMKgIMKg IDIuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzY3JvbGxpbmdf d2luZG93PGJyPjEyLjAwIE1jIMKgIMKgMC4xJSDCoCDCoCDCoCDCoCDCoCA2LjAwIE1jIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdXBkYXRlX3dpbmRvd19mcmluZ2VzPGJy PjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB3aW5kb3dfd2FudHNfbW9kZV9saW5lPGJyPjEuMDAgTWMg wqAgwqAwLjAlIMKgIMKgIMKgIMKgIMKgIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqB3aW5kb3dfdGV4dF9ib3R0b21feTxicj4xLjAwIE1jIMKgIMKgMC4wJSDC oCDCoCDCoCDCoCDCoCAxLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgcmVkcmF3X292ZXJsYXBwZWRfcm93czxicj4yMTQuNDkgS2MgwqAgwqAwLjAlIMKgIMKgIMKg IMKgIMKgIDIxNC40OSBLYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNs aXBfdG9fYm91bmRzPGJyPjE1OS43NCBNYyDCoCDCoDEuMyUgwqAgwqAgwqAgwqAgwqAgLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVwZGF0ZV9iZWdpbjxicj4yMC4wMCBNYyDC oCDCoDAuMSUgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHVwZGF0ZV9lbmQ8YnI+MjAuMDAgTWMgwqAgwqAwLjElIMKgIMKgIMKgIMKgIMKgIC0gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbnNfdXBkYXRlX2VuZDxicj44MTUuMTUg TWMgwqAgwqA2LjglIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcHJlcGFyZV9tZW51X2JhcnM8YnI+MTA2LjE3IE1jIMKgIMKgMC44JSDCoCDCoCDCoCDC oCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVjaG9fYXJlYV9kaXNwbGF5 PGJyPjEwLjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIG5zX2ZyYW1lX3VwX3RvX2RhdGU8YnI+My4wMCBNYyDCoCDCoDAuMCUg wqAgwqAgwqAgwqAgwqAgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBy dW5fd2luZG93X2NoYW5nZV9mdW5jdGlvbnM8YnI+My4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAg wqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBuc19zZXRfZG9jX2VkaXRl ZDxicj4xLjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHNwZWNiaW5kPGJyPjEuMDAgTWMgwqAgwqAwLjAlIMKgIMKgIMKgIMKg IMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3RhcnRfcG9sbGluZzxicj4x LjAwIE1jIMKgIMKgMC4wJSDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHVwZGF0ZV9vdmVybGF5X2Fycm93czxicj4xLjAwIE1jIMKgIMKgMC4wJSDCoCDC oCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGhzY3JvbGxfd2lu ZG93czxicj4yMzcuNzIgTWMgwqAgwqAxLjklIMKgIMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBmbHVzaF9mcmFtZTxicj4xODguOTcgS2MgwqAgwqAwLjAlIMKg IMKgIMKgIMKgIMKgIC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB1bmJpbmRfdG88 YnI+Mi4wMCBNYyDCoCDCoDAuMCUgwqAgwqAgwqAgwqAgwqAgLSDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBzd2FsbG93X2V2ZW50czxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkFu ZCB3aXRoIGEgcGF0Y2ggSSBoYXZlIGRldmVsb3BlZCB0aGF0IHVzZXMgbWFza2VkIGJpdG1hcHMg aW5zdGVhZCBvZiBiZXppZXJzIGZvciBkcmF3aW5nIGZyaW5nZXM6PC9kaXY+PGRpdj48YnI+PC9k aXY+PGRpdj5HQ3M6IDE0IEVsYXBzZWQgdGltZTogNS4wOTExNjIgc2Vjb25kczxicj5HQ3M6IDE0 IEVsYXBzZWQgdGltZTogNC44MjU5NjYgc2Vjb25kczxicj5HQ3M6IDEzIEVsYXBzZWQgdGltZTog NC43OTMzNjQgc2Vjb25kczxicj5HQ3M6IDEzIEVsYXBzZWQgdGltZTogNC43ODU5NjAgc2Vjb25k czxicj5HQ3M6IDEzIEVsYXBzZWQgdGltZTogNC43ODI0NzAgc2Vjb25kczxicj48L2Rpdj48ZGl2 Pjxicj48L2Rpdj48ZGl2PldpdGggdGhlIGZvbGxvd2luZyBwcm9maWxlciBvdXRwdXQ6PC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj44LjU1IEdjIMKgMTAwLjAlIC0gRnJlZGlzcGxheTxicj44LjQ1 IEdjIMKgIDk4LjklIC0gcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYTxicj44LjI4IEdjIMKg IDk2LjklIDEuMDAgTWMgwqByZWRpc3BsYXlfaW50ZXJuYWw8YnI+NS4zNSBHYyDCoCA2Mi41JSAt IMKgIGludGVybmFsX2NvbmRpdGlvbl9jYXNlXzE8YnI+NS4zNSBHYyDCoCA2Mi41JSAtIMKgIMKg cmVkaXNwbGF5X3dpbmRvd18xPGJyPjUuMzUgR2MgwqAgNjIuNSUgMS4wMCBNYyDCoCDCoCByZWRp c3BsYXlfd2luZG93PGJyPjQuNjEgR2MgwqAgNTMuOCUgMS4xMSBNYyDCoCDCoCDCoHRyeV93aW5k b3c8YnI+NjM5LjM3IE1jIMKgIMKgNy40JSAtIMKgIMKgIMKgZGlzcGxheV9tb2RlX2xpbmVzPGJy Pjg2Ljg1IE1jIMKgIMKgMS4wJSAtIMKgIMKgIMKgdXBkYXRlX2ZyYW1lX3Rvb2xfYmFyPGJyPjgu MDAgTWMgwqAgwqAwLjAlIDEuMDAgTWMgwqAgwqAgwqBndWlfY29uc2lkZXJfZnJhbWVfdGl0bGU8 YnI+Mi4wMCBNYyDCoCDCoDAuMCUgMi4wMCBNYyDCoCDCoCDCoHVwZGF0ZV93aW5kb3dfZnJpbmdl czxicj4yLjAwIE1jIMKgIMKgMC4wJSAyLjAwIE1jIMKgIMKgIMKgdHJ5X3dpbmRvd19pZDxicj4x LjAwIE1jIMKgIMKgMC4wJSAtIMKgIMKgIMKgd2luZG93X3dhbnRzX21vZGVfbGluZTxicj4xLjAw IE1jIMKgIMKgMC4wJSAxLjAwIE1jIMKgIMKgcHVzaF9oYW5kbGVyPGJyPjIuMzcgR2MgwqAgMjcu NyUgLSDCoCB1cGRhdGVfZnJhbWU8YnI+Mi4yMiBHYyDCoCAyNS45JSAtIMKgIMKgdXBkYXRlX3dp bmRvd190cmVlPGJyPjIuMjIgR2MgwqAgMjUuOSUgMy4wMCBNYyDCoCDCoCB1cGRhdGVfd2luZG93 PGJyPjEuMTIgR2MgwqAgMTMuMCUgLSDCoCDCoCDCoGd1aV91cGRhdGVfd2luZG93X2VuZDxicj4x LjEwIEdjIMKgIDEyLjglIDEuMDAgTWMgwqAgwqAgwqAgZHJhd193aW5kb3dfZnJpbmdlczxicj4x LjA4IEdjIMKgIDEyLjYlIC0gwqAgwqAgwqAgwqBkcmF3X3Jvd19mcmluZ2VfYml0bWFwczxicj4x LjA4IEdjIMKgIDEyLjYlIDEuMDAgTWMgwqAgwqAgwqAgwqAgZHJhd19mcmluZ2VfYml0bWFwPGJy PjEuMDggR2MgwqAgMTIuNSUgMTIuNDggTWMgwqAgwqAgwqAgwqAgwqBkcmF3X2ZyaW5nZV9iaXRt YXBfMTxicj45MDUuMTIgTWMgwqAgMTAuNSUgMS4wMyBNYyDCoCDCoCDCoCDCoCDCoCBuc19kcmF3 X2ZyaW5nZV9iaXRtYXA8YnI+NjY3LjkyIE1jIMKgIMKgNy44JSAtIMKgIMKgIMKgIMKgIMKgIMKg Q0dDb250ZXh0RHJhd0ltYWdlV2l0aE9wdGlvbnM8YnI+ODEuOTEgTWMgwqAgwqAwLjklIDEuMDAg TWMgwqAgwqAgwqAgwqAgwqAgwqBOU1JlY3RGaWxsPGJyPjQ1LjY1IE1jIMKgIMKgMC41JSAtIMKg IMKgIMKgIMKgIMKgIMKgTlNDb2xvclNldFdpdGhGaWxsQW5kU3Ryb2tlPGJyPjI5LjA3IE1jIMKg IMKgMC4zJSAyLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgbnNfcm93X3JlY3Q8YnI+MjIuNTMgTWMg wqAgwqAwLjIlIC0gwqAgwqAgwqAgwqAgwqAgwqBuc19mb2N1czxicj4xMS4wMCBNYyDCoCDCoDAu MSUgMi4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoCtbTlNDb2xvcihFbWFjc0NvbG9yKSBjb2xvcldp dGhVbnNpZ25lZExvbmc6XTxicj44LjAwIE1jIMKgIMKgMC4wJSAxLjAwIE1jIMKgIMKgIMKgIMKg IMKgIMKgbnNfdW5mb2N1czxicj44LjAwIE1jIMKgIMKgMC4wJSAtIMKgIMKgIMKgIMKgIMKgIMKg LVtfTlNUYWdnZWRQb2ludGVyQ29sb3IgQ0dDb2xvcl08YnI+OC4wMCBNYyDCoCDCoDAuMCUgMi4w MCBNYyDCoCDCoCDCoCDCoCDCoCDCoC1bX19OU0RpY3Rpb25hcnlNIG9iamVjdEZvcktleTpdPGJy PjQuMDAgTWMgwqAgwqAwLjAlIDQuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqBOU1VuaW9uUmVjdDxi cj4zLjAwIE1jIMKgIMKgMC4wJSAzLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgb2JqY19tc2dTZW5k PGJyPjIuMDAgTWMgwqAgwqAwLjAlIDIuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqBndWlfZGVmaW5l X2ZyaW5nZV9iaXRtYXA8YnI+Mi4wMCBNYyDCoCDCoDAuMCUgMi4wMCBNYyDCoCDCoCDCoCDCoCDC oCDCoENHQ29udGV4dFNldENvbXBvc2l0ZU9wZXJhdGlvbjxicj4xLjAwIE1jIMKgIMKgMC4wJSAt IMKgIMKgIMKgIMKgIMKgIMKgb2JqY19hdXRvcmVsZWFzZTxicj4xLjAwIE1jIMKgIMKgMC4wJSAx LjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgQ0dDb250ZXh0Q2xpcFRvUmVjdDxicj4xLjAwIE1jIMKg IMKgMC4wJSAtIMKgIMKgIMKgIMKgIMKgIMKgQ0dHU3RhdGVTZXRGaWxsQ29sb3I8YnI+MS4wMCBN YyDCoCDCoDAuMCUgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCDCoF9vYmpjX3Jvb3RBdXRvcmVsZWFz ZTxicj4xLjAwIE1jIMKgIMKgMC4wJSAxLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgTlNJbnRlcnNl Y3Rpb25SZWN0PGJyPjEuMDAgTWMgwqAgwqAwLjAlIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqBD R0NvbnRleHRTYXZlR1N0YXRlPGJyPjEuMDAgTWMgwqAgwqAwLjAlIDEuMDAgTWMgwqAgwqAgwqAg wqAgwqAgwqBOU01ha2VSZWN0PGJyPjEuMDAgTWMgwqAgwqAwLjAlIDEuMDAgTWMgwqAgwqAgwqAg wqAgwqAgwqAtW05TT2JqZWN0IGF1dG9yZWxlYXNlXTxicj4xLjAwIE1jIMKgIMKgMC4wJSAxLjAw IE1jIMKgIMKgIMKgIMKgIMKgIMKgQ0dEYXRhUHJvdmlkZXJJc1pvbWJpZTxicj4xLjAwIE1jIMKg IMKgMC4wJSAxLjAwIE1jIMKgIMKgIMKgIMKgIMKgIMKgRFlMRC1TVFVCJCROU1JlY3RGaWxsPGJy PjEuMDAgTWMgwqAgwqAwLjAlIDEuMDAgTWMgwqAgwqAgwqAgwqAgwqAgwqBvYmpjX21zZ1NlbmQk Y29sb3JXaXRoVW5zaWduZWRMb25nOjxicj4xMjkuMzggTWMgwqAgwqAxLjUlIDExLjM0IE1jIMKg IMKgIMKgIMKgIMKgIGxvb2t1cF9uYW1lZF9mYWNlPGJyPjguMDAgTWMgwqAgwqAwLjAlIC0gwqAg wqAgwqAgwqAgwqAgd2luZG93X2JveF9yaWdodDxicj40LjMxIE1jIMKgIMKgMC4wJSAxLjAwIE1j IMKgIMKgIMKgIMKgIMKgIHdpbmRvd193YW50c190YWJfbGluZTxicj41LjAwIE1jIMKgIMKgMC4w JSAxLjAwIE1jIMKgIMKgIMKgIMKgIMKgIHdpbmRvd193YW50c19oZWFkZXJfbGluZTxicj4zLjA5 IE1jIMKgIMKgMC4wJSAzLjAwIE1jIMKgIMKgIMKgIMKgIMKgIGJ1aWx0aW5fbGlzcF9zeW1ib2w8 YnI+Mi4wMCBNYyDCoCDCoDAuMCUgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCB3aW5kb3dfYm94X2xl ZnQ8YnI+Mi4wMCBNYyDCoCDCoDAuMCUgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoCBGUkFNRV9JTlRF Uk5BTF9CT1JERVJfV0lEVEg8YnI+MS41NSBNYyDCoCDCoDAuMCUgMS41NSBNYyDCoCDCoCDCoCDC oCDCoCBGQUNFX0ZST01fSURfT1JfTlVMTDxicj4xLjAwIE1jIMKgIMKgMC4wJSAtIMKgIMKgIMKg IMKgIMKgIFdJTkRPV1A8YnI+MS4wMCBNYyDCoCDCoDAuMCUgMS4wMCBNYyDCoCDCoCDCoCDCoCDC oCBFUTxicj4yNjAuODMgS2MgwqAgwqAwLjAlIDI2MC44MyBLYyDCoCDCoCDCoCDCoCDCoCBFUTxi cj4xLjAwIE1jIMKgIMKgMC4wJSAxLjAwIE1jIMKgIMKgIMKgIMKgIMKgIGdldF9mcmluZ2VfYml0 bWFwX2RhdGE8YnI+MS4wMCBNYyDCoCDCoDAuMCUgMS4wMCBNYyDCoCDCoCDCoCDCoCDCoG5zX2Ry YXdfZnJpbmdlX2JpdG1hcDxicj4xLjAwIE1jIMKgIMKgMC4wJSAxLjAwIE1jIMKgIMKgIMKgIMKg IEZSQU1FX1JJR0hUX0ZSSU5HRV9XSURUSDxicj4yMC4wMCBNYyDCoCDCoDAuMiUgMS4wMCBNYyDC oCDCoCDCoCDCoHNldF9idWZmZXJfaW50ZXJuYWxfMTxicj4xOS4wMCBNYyDCoCDCoDAuMiUgMS4w MCBNYyDCoCDCoCDCoCBkaXNwbGF5X2FuZF9zZXRfY3Vyc29yPGJyPjEuMDcgR2MgwqAgMTIuNCUg Mi4wMCBNYyDCoCDCoCDCoHVwZGF0ZV93aW5kb3dfbGluZTxicj4yMS4yNSBNYyDCoCDCoDAuMiUg Ni4wMCBNYyDCoCDCoCDCoHNjcm9sbGluZ193aW5kb3c8YnI+Ny4wMCBNYyDCoCDCoDAuMCUgMi4w MCBNYyDCoCDCoCDCoHVwZGF0ZV93aW5kb3dfZnJpbmdlczxicj42NDYuMzggS2MgwqAgwqAwLjAl IC0gwqAgwqAgwqB3aW5kb3dfdGV4dF9ib3R0b21feTxicj4xMzkuODcgTWMgwqAgwqAxLjYlIC0g wqAgwqB1cGRhdGVfYmVnaW48YnI+MTYuMDEgTWMgwqAgwqAwLjElIC0gwqAgwqB1cGRhdGVfZW5k PGJyPjQ4NC41OSBNYyDCoCDCoDUuNiUgLSDCoCBwcmVwYXJlX21lbnVfYmFyczxicj42My4xMiBN YyDCoCDCoDAuNyUgMzY1LjI0IEtjIMKgIGVjaG9fYXJlYV9kaXNwbGF5PGJyPjMuMTMgTWMgwqAg wqAwLjAlIC0gwqAgaHNjcm9sbF93aW5kb3dzPGJyPjIuNTEgTWMgwqAgwqAwLjAlIC0gwqAgbnNf c2V0X2RvY19lZGl0ZWQ8YnI+Mi4wMCBNYyDCoCDCoDAuMCUgMi4wMCBNYyDCoCBvdmVybGF5X2Fy cm93c19jaGFuZ2VkX3A8YnI+Mi4wMCBNYyDCoCDCoDAuMCUgMS4wMCBNYyDCoCBydW5fd2luZG93 X2NoYW5nZV9mdW5jdGlvbnM8YnI+MS4wMCBNYyDCoCDCoDAuMCUgMS4wMCBNYyDCoCByZXNldF9v dXRlcm1vc3RfcmVzdHJpY3Rpb25zPGJyPjY1MS43OSBLYyDCoCDCoDAuMCUgNjUxLjc5IEtjIMKg IF9fX2Noa3N0a19kYXJ3aW48YnI+MS4wMCBNYyDCoCDCoDAuMCUgMS4wMCBNYyDCoCBtYXJrX3dp bmRvd19kaXNwbGF5X2FjY3VyYXRlXzE8YnI+MS4wMCBNYyDCoCDCoDAuMCUgLSDCoCB1bmJpbmRf dG88YnI+MS4wMCBNYyDCoCDCoDAuMCUgLSDCoCBzdGFydF9wb2xsaW5nPGJyPjE2OS4zNSBNYyDC oCDCoDEuOSUgLSDCoGZsdXNoX2ZyYW1lPGJyPjEuMDAgTWMgwqAgwqAwLjAlIC0gwqB1bmJpbmRf dG88YnI+NTEuMDEgTWMgwqAgwqAwLjUlIC0gZGV0ZWN0X2lucHV0X3BlbmRpbmdfcnVuX3RpbWVy czxicj40MS4xMyBNYyDCoCDCoDAuNCUgLSBzd2FsbG93X2V2ZW50czxicj48L2Rpdj48ZGl2Pjxi cj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkkmIzM5O3ZlIHB1dCB0b2dldGhlciBhIHBhdGNo IHRoYXQgZHJhd3MgdXNpbmcgYSBtYXNrZWQgQ0dJbWFnZSBpbnN0ZWFkIG9mIGFuIE5TQmV6aWVy LiBIb3dldmVyIEkmIzM5O20gbm90IHN1cmUgaWYgaXQmIzM5O3MgYW55IGdvb2QgYXMgSSYjMzk7 bSBjb21wbGV0ZWx5IHVuZmFtaWxpYXIgd2l0aCB0aGUgRW1hY3MgY29kZWJhc2UgYW5kIG1hY29z L05TIGdyYXBoaWNzIEFQSXMuIEFsc28gSSBiZWxpZXZlIE5TIGVtYWNzIHdhbnRzIHRvIGJlIGNv bXBhdGlibGUgd2l0aCBHTlVTdGVwIGFuZCBJIGhhdmUgbm8gaWRlYSBpZiB0aGlzIHJlbWFpbnMg Y29tcGF0aWJsZTo8YnI+PGJyPjxwcmUgc3R5bGU9ImNvbG9yOnJnYigwLDAsMCkiPkZyb20gZDU0 YzA5MTAwMmFmZjhmNzRmODE2NWRkMjFkNjUwNzVmMDI4ZTcyOCBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKRnJvbTogQmVuIFNpbW1zICZsdDtiZW5AYmVuc2ltbXMubW9lJmd0OwpEYXRlOiBNb24s IDI0IEp1biAyMDI0IDIzOjM1OjI5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRHJhdyBmcmluZ2Ug dXNpbmcgYml0bWFwcywgbm90IGh1Z2UgYmV6aWVycwoKLS0tCiBzcmMvbnN0ZXJtLm0gfCA1NSAr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL25zdGVybS5tIGIvc3JjL25zdGVybS5tCmluZGV4IDc5NDYzMGRlMWMuLjljNzgxZTNi ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9uc3Rlcm0ubQorKysgYi9zcmMvbnN0ZXJtLm0KQEAgLTI5MDMs MjIgKzI5MDMsMjQgQEAgSGlkZSB0aGUgd2luZG93IChYMTEgc2VtYW50aWNzKQogc3RhdGljIHZv aWQKIG5zX2RlZmluZV9mcmluZ2VfYml0bWFwIChpbnQgd2hpY2gsIHVuc2lnbmVkIHNob3J0ICpi aXRzLCBpbnQgaCwgaW50IHcpCiB7Ci0gIE5TQmV6aWVyUGF0aCAqcCA9IFtOU0JlemllclBhdGgg YmV6aWVyUGF0aF07Ci0KICAgaWYgKCFmcmluZ2VfYm1wKQogICAgIGZyaW5nZV9ibXAgPSBbW05T TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MjVdOwogCi0gIFtwIG1v dmVUb1BvaW50Ok5TTWFrZVBvaW50ICgwLCAwKV07CiAKLSAgZm9yIChpbnQgeSA9IDAgOyB5ICZs dDsgaCA7IHkrKykKLSAgICBmb3IgKGludCB4ID0gMCA7IHggJmx0OyB3IDsgeCsrKQotICAgICAg ewotICAgICAgICBib29sIGJpdCA9IGJpdHNbeV0gJmFtcDsgKDEgJmx0OyZsdDsgKHcgLSB4IC0g MSkpOwotICAgICAgICBpZiAoYml0KQotICAgICAgICAgIFtwIGFwcGVuZEJlemllclBhdGhXaXRo UmVjdDpOU01ha2VSZWN0ICh4LCB5LCAxLCAxKV07Ci0gICAgICB9CisgIGZvciAoaW50IGkgPSAw OyBpICZsdDsgaDsgaSsrKQorICAgIGJpdHNbaV0gPSB+Yml0c1tpXTsKKworICBDR0RhdGFQcm92 aWRlclJlZiBwcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEgKE5VTEwsIGJp dHMsCisJCQkJCSAgIHNpemVvZiAodW5zaWduZWQgc2hvcnQpICogaCwgTlVMTCk7CisgIGlmIChw cm92aWRlcikgeworICAgIGlkIHAgPSAoaWQpQ0dJbWFnZU1hc2tDcmVhdGUgKHcsIGgsIDEsIDEs CisgICAgICAgICAgICAgICAgIHNpemVvZiAodW5zaWduZWQgc2hvcnQpLAorICAgICAgICAgICAg ICAgICBwcm92aWRlciwgTlVMTCwgMCk7CisgICAgQ0dEYXRhUHJvdmlkZXJSZWxlYXNlIChwcm92 aWRlcik7CisKKyAgICBbZnJpbmdlX2JtcCBzZXRPYmplY3Q6cCBmb3JLZXk6W05TTnVtYmVyIG51 bWJlcldpdGhJbnQ6d2hpY2hdXTsKKyAgfQogCi0gIFtmcmluZ2VfYm1wIHNldE9iamVjdDpwIGZv cktleTpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDp3aGljaF1dOwogfQogCiAKQEAgLTI5ODEsMzcg KzI5ODMsMzAgQEAgSGlkZSB0aGUgd2luZG93IChYMTEgc2VtYW50aWNzKQogICAgICAgTlNSZWN0 RmlsbCAoY2xlYXJSZWN0KTsKICAgICB9CiAKLSAgTlNCZXppZXJQYXRoICpibXAgPSBbZnJpbmdl X2JtcCBvYmplY3RGb3JLZXk6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cC0mZ3Q7d2hpY2hdXTsK KyAgQ0dJbWFnZVJlZiBibXAgPSAoQ0dJbWFnZVJlZilbZnJpbmdlX2JtcCBvYmplY3RGb3JLZXk6 W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cC0mZ3Q7d2hpY2hdXTsKIAogICBpZiAoYm1wID09IG5p bAogICAgICAgJmFtcDsmYW1wOyBwLSZndDt3aGljaCAmbHQ7IG1heF91c2VkX2ZyaW5nZV9iaXRt YXApCiAgICAgewogICAgICAgZ3VpX2RlZmluZV9mcmluZ2VfYml0bWFwIChmLCBwLSZndDt3aGlj aCk7Ci0gICAgICBibXAgPSBbZnJpbmdlX2JtcCBvYmplY3RGb3JLZXk6IFtOU051bWJlciBudW1i ZXJXaXRoSW50OiBwLSZndDt3aGljaF1dOworICAgICAgYm1wID0gKENHSW1hZ2VSZWYpW2ZyaW5n ZV9ibXAgb2JqZWN0Rm9yS2V5OiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDogcC0mZ3Q7d2hpY2hd XTsKICAgICB9CiAKICAgaWYgKGJtcCkKICAgICB7Ci0gICAgICBOU0FmZmluZVRyYW5zZm9ybSAq dHJhbnNmb3JtID0gW05TQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybV07Ci0gICAgICBOU0NvbG9y ICpibV9jb2xvcjsKKyAgICAgIENHUmVjdCBib3VuZHMgPSBDR1JlY3RNYWtlIChwLSZndDt4LCBw LSZndDt5IC0gcC0mZ3Q7ZGgsCisJCQkgICBDR0ltYWdlR2V0V2lkdGggKGJtcCksIENHSW1hZ2VH ZXRIZWlnaHQgKGJtcCkpOwogCi0gICAgICAvKiBCZWNhdXNlIHRoZSBpbWFnZSBpcyBkZWZpbmVk IGF0ICgwLCAwKSB3ZSBuZWVkIHRvIHRha2UgYSBjb3B5Ci0gICAgICAgICBhbmQgdGhlbiB0cmFu c2Zvcm0gdGhhdCBjb3B5IHRvIHRoZSBuZXcgb3JpZ2luLiAgKi8KLSAgICAgIGJtcCA9IFtibXAg Y29weV07Ci0gICAgICBbdHJhbnNmb3JtIHRyYW5zbGF0ZVhCeTpwLSZndDt4IHlCeTpwLSZndDt5 IC0gcC0mZ3Q7ZGhdOwotICAgICAgW2JtcCB0cmFuc2Zvcm1Vc2luZ0FmZmluZVRyYW5zZm9ybTp0 cmFuc2Zvcm1dOworICAgICAgTlNHcmFwaGljc0NvbnRleHQgKmN0eCA9IFtOU0dyYXBoaWNzQ29u dGV4dCBjdXJyZW50Q29udGV4dF07CisgICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IFtjdHgg Q0dDb250ZXh0XTsKIAotICAgICAgaWYgKCFwLSZndDtjdXJzb3JfcCkKLSAgICAgICAgYm1fY29s b3IgPSBbTlNDb2xvciBjb2xvcldpdGhVbnNpZ25lZExvbmc6ZmFjZS0mZ3Q7Zm9yZWdyb3VuZF07 Ci0gICAgICBlbHNlIGlmIChwLSZndDtvdmVybGF5X3ApCi0gICAgICAgIGJtX2NvbG9yID0gW05T Q29sb3IgY29sb3JXaXRoVW5zaWduZWRMb25nOmZhY2UtJmd0O2JhY2tncm91bmRdOwotICAgICAg ZWxzZQotICAgICAgICBibV9jb2xvciA9IGYtJmd0O291dHB1dF9kYXRhLm5zLSZndDtjdXJzb3Jf Y29sb3I7CisgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0gKGNvbnRleHQsCisJCQkgICAgIENH UmVjdEdldE1pblggKGJvdW5kcyksIENHUmVjdEdldE1heFkgKGJvdW5kcykpOworICAgICAgQ0dD b250ZXh0U2NhbGVDVE0gKGNvbnRleHQsIDEsIC0xKTsKIAotICAgICAgW2JtX2NvbG9yIHNldF07 Ci0gICAgICBbYm1wIGZpbGxdOwotCi0gICAgICBbYm1wIHJlbGVhc2VdOworICAgICAgQ0dDb250 ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yIChjb250ZXh0LCBbW05TQ29sb3IgY29sb3JXaXRoVW5z aWduZWRMb25nOmZhY2UtJmd0O2ZvcmVncm91bmRdIENHQ29sb3JdKTsKKyAgICAgIGJvdW5kcy5v cmlnaW4gPSBDR1BvaW50WmVybzsKKyAgICAgIENHQ29udGV4dERyYXdJbWFnZSAoY29udGV4dCwg Ym91bmRzLCBibXApOwogICAgIH0KICAgbnNfdW5mb2N1cyAoZik7CiB9Ci0tIAoyLjQ1LjE8L3By ZT48L2Rpdj48L2Rpdj48YnIgY2xlYXI9ImFsbCI+PGRpdj48YnI+PC9kaXY+PHNwYW4gY2xhc3M9 ImdtYWlsX3NpZ25hdHVyZV9wcmVmaXgiPi0tIDwvc3Bhbj48YnI+PGRpdiBkaXI9Imx0ciIgY2xh c3M9ImdtYWlsX3NpZ25hdHVyZSIgZGF0YS1zbWFydG1haWw9ImdtYWlsX3NpZ25hdHVyZSI+PGRp diBkaXI9Imx0ciI+PGRpdj48ZGl2IGRpcj0ibHRyIj48ZGl2PjxkaXYgZGlyPSJsdHIiPjxzcGFu IHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiI+PGRpdj48ZGl2 IGRpcj0ibHRyIj5CZW4gU2ltbXM8L2Rpdj48L2Rpdj48L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+ PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+Cg== --0000000000002a887a0623510c8e--
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: Stefan Kangas <stefankangas@HIDDEN> Subject: bug#73563: Acknowledgement ([Ben Simms] Performance bottleneck in ns_draw_fringe_bitmap) Message-ID: <handler.73563.B.17276833795514.ack <at> debbugs.gnu.org> References: <CADwFkmn9fhiU7XfXu5Ku+ouuxH=J+cx73n-APP7Gkq4FdywD0g@HIDDEN> X-Gnu-PR-Message: ack 73563 X-Gnu-PR-Package: emacs Reply-To: 73563 <at> debbugs.gnu.org Date: Mon, 30 Sep 2024 08:03:03 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. As you requested using X-Debbugs-CC, your message was also forwarded to Ben Simms <ben@HIDDEN> (after having been given a bug report number, if it did not have one). Your message has been sent to the package maintainer(s): bug-gnu-emacs@HIDDEN If you wish to submit further information on this problem, please send it to 73563 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 73563: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D73563 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
X-Loop: help-debbugs@HIDDEN Subject: bug#73563: [Ben Simms] Performance bottleneck in ns_draw_fringe_bitmap Resent-From: Eli Zaretskii <eliz@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Mon, 30 Sep 2024 12:28:02 +0000 Resent-Message-ID: <handler.73563.B73563.172769923729746 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 73563 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Kangas <stefankangas@HIDDEN> Cc: ben@HIDDEN, 73563 <at> debbugs.gnu.org Received: via spool by 73563-submit <at> debbugs.gnu.org id=B73563.172769923729746 (code B ref 73563); Mon, 30 Sep 2024 12:28:02 +0000 Received: (at 73563) by debbugs.gnu.org; 30 Sep 2024 12:27:17 +0000 Received: from localhost ([127.0.0.1]:44931 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1svFUi-0007jh-JB for submit <at> debbugs.gnu.org; Mon, 30 Sep 2024 08:27:16 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41966) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1svFUg-0007jB-JQ for 73563 <at> debbugs.gnu.org; Mon, 30 Sep 2024 08:27:15 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1svFU3-0002rx-K5; Mon, 30 Sep 2024 08:26:35 -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=sgpgEVTf7WdE1Nl18d8mqVd6+UV3/Hl+BxkoNBW23GM=; b=lCnMA+IuibSp S12j3lTimeBAZKSIy4XBj99Cp37SCkMxfiZzkXoxDZawJ/yhHW9RLplEzuPU79rCER0SNHCm3XEsC qxVYJ8qkB/mzedk404dhI7zQHJkadK942uRsyJkaRCVl92RNGs1hHBdmESeT5Fe74FxHNs27L6EuY 4WbENr0pLyLYlUu+q0HERvyhk/tZ55O+6IRavr514I7cO+lREEGzBVoi4Ej6GUasZZaz3jEspjtZ4 AQ+hzFltD2ab1o5bbDIAUS1Y1S842XZfALIoFj2HEUFhU+sobwjlhyOoeZaH2vUpuVIeUoQqEGibe kNbME89h/vTu5BYx876zbQ==; Date: Mon, 30 Sep 2024 15:26:31 +0300 Message-Id: <86plol2uq0.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> In-Reply-To: <CADwFkmn9fhiU7XfXu5Ku+ouuxH=J+cx73n-APP7Gkq4FdywD0g@HIDDEN> (message from Stefan Kangas on Mon, 30 Sep 2024 07:21:03 +0000) References: <CALNBX0aNy78GFVTfR_4O6hdeOcBiFLiKUJSi+kVbciXqLOd+jw@HIDDEN> <CADwFkmn9fhiU7XfXu5Ku+ouuxH=J+cx73n-APP7Gkq4FdywD0g@HIDDEN> X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) > Cc: Ben Simms <ben@HIDDEN> > From: Stefan Kangas <stefankangas@HIDDEN> > Date: Mon, 30 Sep 2024 07:21:03 +0000 > > Hi all, I recently started using Emacs (ns) HEAD on an ARM macos sonoma > system. > > I've noticed that ns_draw_fringe_bitmap is a fairly large performance sink > when using pixel scrolling (to the point of 99% of cpu time being inside this > function, with Emacs drawing at approx 5Hz). The slowness here isn't as > obvious when not pixel scrolling, presumably because Emacs never tries to > redraw at 60+Hz otherwise. > > I have performed some profiling and discovered that in my observed worse case > situation, of the 99% of cpu time spent in ns_draw_fringe_bitmap, approx 50% > is spent in [NSBezierPath copy], and approx 30% in [NSBezierPath fill]. According to the posted profile, ns_draw_fringe_bitmap takes much less than 99% of CPU time, somewhere around 10%. What am I missing?
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.