From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: David Ponce via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#69992: Minor improvement to image map transformation logic Date: Wed, 27 Mar 2024 12:16:11 +0100 Message-ID: <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> References: <87o7b3m8ee.fsf@ushin.org> Reply-To: David Ponce Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------F5wOMzPjOTH0QyUOlqIsL036" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34644"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird To: 69992@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Mar 27 12:17:28 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rpRHb-0008qX-Pa for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 27 Mar 2024 12:17:27 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rpRHI-0007L8-MF; Wed, 27 Mar 2024 07:17:08 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rpRHD-0007KV-7t for bug-gnu-emacs@gnu.org; Wed, 27 Mar 2024 07:17:03 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rpRHC-00059V-Ea for bug-gnu-emacs@gnu.org; Wed, 27 Mar 2024 07:17:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rpRHC-0004Lr-DM for bug-gnu-emacs@gnu.org; Wed, 27 Mar 2024 07:17:02 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: <87o7b3m8ee.fsf@ushin.org> Resent-From: David Ponce Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 27 Mar 2024 11:17:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 69992 X-GNU-PR-Package: emacs Original-Received: via spool by 69992-submit@debbugs.gnu.org id=B69992.171153817916609 (code B ref 69992); Wed, 27 Mar 2024 11:17:02 +0000 Original-Received: (at 69992) by debbugs.gnu.org; 27 Mar 2024 11:16:19 +0000 Original-Received: from localhost ([127.0.0.1]:35899 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpRGU-0004Jo-ON for submit@debbugs.gnu.org; Wed, 27 Mar 2024 07:16:19 -0400 Original-Received: from smtp-75.smtpout.orange.fr ([80.12.242.75]:63492 helo=msa.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpRGP-0004Jb-Vz for 69992@debbugs.gnu.org; Wed, 27 Mar 2024 07:16:17 -0400 Original-Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id pRGOrIRNHh5dIpRGOrTTdw; Wed, 27 Mar 2024 12:16:12 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711538172; bh=fpJUJIxLzT1ABxtRE6lwiOzZQbxv8f8SZ19exXzBM1U=; h=Message-ID:Date:MIME-Version:To:From:Subject; b=f5VZ8eOEDAFClgrglv+ByNQvm4/g4sh65A7aq123/JelvajZeXrs9E2KPXoNVuOmx hyDf2ndbKdjYcGaOOemmzzCdvG/ZKjJ3bic6O+Wt1mD50ed7Ccg8QS0QyCH5UGLI4e xLNgSAiOJhVsl85ymk9x9vkoa4ZHWCPC9YZ3OUT52xKskaZyQy31hfDdggG442aIvg zBm2iig9dV/up/k9P9w/QCisDkmZGm/5/KTrFaJcMbDESSeZZhL55Q6g4SIQyvwElf 9KsGgtcSXwPLnYCuWOxrsoq0sOcHnRc2HYXU4fSVz0+fBCXsjx9fElpIl8COVP09mM RhWq75evQ34Bw== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Wed, 27 Mar 2024 12:16:12 +0100 X-ME-IP: 2.7.71.181 Content-Language: fr, en-US X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:282132 Archived-At: This is a multi-part message in MIME format. --------------F5wOMzPjOTH0QyUOlqIsL036 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Many thanks for this feature, which is particularly useful to automatically recalculate the map of computed images like SVG. To make the code faster, by avoiding multiple scans of the map for copy and parsing, I propose the following patch which factors most of the code into the functions `image--compute-map' and `image--compute -original-map'. I have done some tests on my side which are conclusive. Furthermore, I wonder if the term :base-map would not be more descriptive than :original-map? Thanks again for this valuable feature! --------------F5wOMzPjOTH0QyUOlqIsL036 Content-Type: text/x-patch; charset=UTF-8; name="image.el.patch" Content-Disposition: attachment; filename="image.el.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IDU1MzQw ZWEwM2RjLi4yZTM5Mjg0NzhjYSAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDI3LDEwNyArMTQyNywxNzAgQEAgaW1hZ2UtLWNvbXB1dGUt bWFwCiAgICJDb21wdXRlIG1hcCBmb3IgSU1BR0Ugc3VpdGFibGUgdG8gYmUgdXNlZCBhcyBp dHMgOm1hcCBwcm9wZXJ0eS4KIFJldHVybiBhIGNvcHkgb2YgOm9yaWdpbmFsLWltYWdlIHRy YW5zZm9ybWVkIGJhc2VkIG9uIElNQUdFJ3MgOnNjYWxlLAogOnJvdGF0aW9uLCBhbmQgOmZs aXAuICBXaGVuIElNQUdFJ3MgOm9yaWdpbmFsLW1hcCBpcyBuaWwsIHJldHVybiBuaWwuCi1X aGVuIDpyb3RhdGlvbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA5MCwgcmV0dXJuIGNvcHkgb2Yg Om9yaWdpbmFsLW1hcC4iCi0gIChwY2FzZS1sZXQqICgob3JpZ2luYWwtbWFwIChpbWFnZS1w cm9wZXJ0eSBpbWFnZSA6b3JpZ2luYWwtbWFwKSkKLSAgICAgICAgICAgICAgIChtYXAgKGNv cHktdHJlZSBvcmlnaW5hbC1tYXAgdCkpCi0gICAgICAgICAgICAgICAoc2NhbGUgKG9yIChp bWFnZS1wcm9wZXJ0eSBpbWFnZSA6c2NhbGUpIDEpKQotICAgICAgICAgICAgICAgKHJvdGF0 aW9uIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSAwKSkKLSAgICAgICAg ICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6ZmxpcCkpCi0gICAgICAgICAg ICAgICAoKGFuZCBzaXplIGAoLHdpZHRoIC4gLGhlaWdodCkpIChpbWFnZS1zaXplIGltYWdl IHQpKSkKLSAgICAod2hlbiAoYW5kIDsgSGFuZGxlIG9ubHkgOTAtZGVncmVlIHJvdGF0aW9u cwotICAgICAgICAgICAoemVyb3AgKG1vZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgKHpl cm9wICglICh0cnVuY2F0ZSByb3RhdGlvbikgOTApKSkKLSAgICAgIDs7IFNJWkUgZml0cyBN QVAgYWZ0ZXIgdHJhbnNmb3JtYXRpb25zLiAgU2NhbGUgTUFQIGJlZm9yZQotICAgICAgOzsg ZmxpcCBhbmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlIGJvdGggbmVlZCBNQVAgdG8gZml0 IFNJWkUuCi0gICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBtYXAgc2NhbGUpCi0gICAgICA7OyBJ biByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGJlZm9yZSBm bGlwLgotICAgICAgKGltYWdlLS1yb3RhdGUtbWFwCi0gICAgICAgbWFwIHJvdGF0aW9uIChp ZiAob3IgKD0gOTAgcm90YXRpb24pICg9IDI3MCByb3RhdGlvbikpCi0gICAgICAgICAgICAg ICAgICAgICAgICA7OyBJZiByb3RhdGVkIMKxOTDCsCwgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0 LgotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgaGVpZ2h0IHdpZHRoKQotICAgICAg ICAgICAgICAgICAgICAgIHNpemUpKQotICAgICAgOzsgQWZ0ZXIgcm90YXRpb24sIHRoZXJl J3Mgbm8gbmVlZCB0byBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgICAoaW1hZ2UtLWZs aXAtbWFwIG1hcCBmbGlwIHNpemUpKQotICAgIG1hcCkpCitXaGVuIHRoZXJlIGlzIG5vIHRy YW5zZm9ybWF0aW9uLCByZXR1cm4gOm9yaWdpbmFsLW1hcC4iCisgICh3aGVuLWxldCAoKG9t YXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpvcmlnaW5hbC1tYXApKSkKKyAgICAobGV0KiAo KHNjYWxlIChsZXQgKChzIChpbWFnZS0tY3VycmVudC1zY2FsaW5nCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1h Z2UtLWltYWdlLXdpdGhvdXQtcGFyYW1ldGVycyBpbWFnZSkpKSkKKyAgICAgICAgICAgICAg ICAgICAgKHVubGVzcyAoPSBzIDEpIHMpKSkKKyAgICAgICAgICAgKHJvdGF0ZSAobGV0ICgo ZCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSkpCisgICAgICAgICAgICAgICAg ICAgICA7OyBIYW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCisgICAgICAgICAgICAg ICAgICAgICAoYW5kIGQgKD0gMCAobW9kIGQgMSkpICg9IDAgKCUgZCA5MCkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICh0cnVuY2F0ZSAobW9kIGQgMzYwKSkpKSkKKyAgICAgICAg ICAgKGZsaXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkKKyAgICAgICAgICAgKG1h cCBvbWFwKQorICAgICAgICAgICBzaXplIGZsaXAtdykKKyAgICAgICh3aGVuIChvciBzY2Fs ZSByb3RhdGUgZmxpcCkKKyAgICAgICAgKHNldHEgbWFwIG5pbAorICAgICAgICAgICAgICBz aXplIChpbWFnZS1zaXplIGltYWdlIHQpCisgICAgICAgICAgICAgIGZsaXAtdyAoY2FyIHNp emUpKQorICAgICAgICAoaWYgKG1lbXFsIHJvdGF0ZSAnKDkwIDI3MCkpCisgICAgICAgICAg ICA7OyBJZiByb3RhdGVkIMKxOTDCsCwgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0LgorICAgICAg ICAgICAgKHNldHEgc2l6ZSAoY29ucyAoY2RyIHNpemUpIChjYXIgc2l6ZSkpKSkKKyAgICAg ICAgOzsgU0laRSBmaXRzIE1BUCBhZnRlciB0cmFuc2Zvcm1hdGlvbnMuICBTY2FsZSBNQVAg YmVmb3JlIGZsaXAKKyAgICAgICAgOzsgYW5kIHJvdGF0ZSBvcGVyYXRpb25zLCBzaW5jZSBi b3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgICAocGNhc2UtZG9saXN0IChgKCxh cmVhICxpZCAscGxpc3QpIG9tYXApCisgICAgICAgICAgKHBjYXNlLWV4aGF1c3RpdmUgYXJl YQorICAgICAgICAgICAgOzsgUmVjdGFuZ2xlIGhvdCBzcG90LgorICAgICAgICAgICAgKGAo cmVjdCAuICgoLHgwIC4gLHkwKSAuICgseDEgLiAseTEpKSkKKyAgICAgICAgICAgICAoaWYg c2NhbGUKKyAgICAgICAgICAgICAgICAgKHNldHEgeDAgKHJvdW5kICgqIHgwIHNjYWxlKSkg eTAgKHJvdW5kICgqIHkwIHNjYWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgeDEgKHJv dW5kICgqIHgxIHNjYWxlKSkgeTEgKHJvdW5kICgqIHkxIHNjYWxlKSkpKQorICAgICAgICAg ICAgIChpZiByb3RhdGUgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgKGxldCAo KHAwIChpbWFnZS0tcm90YXRlLWNvb3JkIHgwIHkwIHJvdGF0ZSBzaXplKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgKHAxIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJvdGF0ZSBz aXplKSkpCisgICAgICAgICAgICAgICAgICAgKHNldHEgeDAgKGNhciBwMCkgeTAgKGNkciBw MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB4MSAoY2FyIHAxKSB5MSAoY2RyIHAxKSkp KQorICAgICAgICAgICAgIChpZiBmbGlwCisgICAgICAgICAgICAgICAgIChsZXQgKCh4YSB4 MCkgKHhiIHgxKSkKKyAgICAgICAgICAgICAgICAgICAoc2V0cSB4MCAoLSBmbGlwLXcgeGIp CisgICAgICAgICAgICAgICAgICAgICAgICAgeDEgKC0gZmxpcC13IHhhKSkpKQorICAgICAg ICAgICAgIDs7IE5vcm1hbGl6ZSByZWN0IGNvb3JkcyB0byBiZSB0b3AvbGVmdCBib3R0b20v cmlnaHQuCisgICAgICAgICAgICAgKGlmICg+IHgwIHgxKQorICAgICAgICAgICAgICAgICAo bGV0ICgocncgKGFicyAoLSB4MCB4MSkpKSkKKyAgICAgICAgICAgICAgICAgICAoc2V0cSB4 MCAoLSB4MCBydykgeDEgKCsgeDEgcncpKSkpCisgICAgICAgICAgICAgKGlmICg+IHkwIHkx KQorICAgICAgICAgICAgICAgICAobGV0ICgocmggKGFicyAoLSB5MCB5MSkpKSkKKyAgICAg ICAgICAgICAgICAgICAoc2V0cSB5MCAoLSB5MCByaCkgeTEgKCsgeTEgcmgpKSkpCisgICAg ICAgICAgICAgKHB1c2ggYCgocmVjdCAuICgoLHgwIC4gLHkwKSAuICgseDEgLiAseTEpKSkg LGlkICxwbGlzdCkKKyAgICAgICAgICAgICAgICAgICBtYXApKQorICAgICAgICAgICAgOzsg Q2lyY2xlIGhvdCBzcG90LgorICAgICAgICAgICAgKGAoY2lyY2xlIC4gKCgseDAgLiAseTAp IC4gLHIpKQorICAgICAgICAgICAgIChpZiBzY2FsZQorICAgICAgICAgICAgICAgICAoc2V0 cSB4MCAocm91bmQgKCogeDAgc2NhbGUpKSB5MCAocm91bmQgKCogeTAgc2NhbGUpKQorICAg ICAgICAgICAgICAgICAgICAgICByICAocm91bmQgKCogciBzY2FsZSkpKSkKKyAgICAgICAg ICAgICAoaWYgcm90YXRlCisgICAgICAgICAgICAgICAgIChsZXQgKChwMCAoaW1hZ2UtLXJv dGF0ZS1jb29yZCB4MCB5MCByb3RhdGUgc2l6ZSkpKQorICAgICAgICAgICAgICAgICAgIChz ZXRxIHgwIChjYXIgcDApIHkwIChjZHIgcDApKSkpCisgICAgICAgICAgICAgKGlmIGZsaXAK KyAgICAgICAgICAgICAgICAgKHNldHEgeDAgKC0gZmxpcC13IHgwKSkpCisgICAgICAgICAg ICAgKHB1c2ggYCgoY2lyY2xlIC4gKCgseDAgLiAseTApIC4gLHIpKSAsaWQgLHBsaXN0KSBt YXApKQorICAgICAgICAgICAgOzsgUG9seSBob3Qgc3BvdC4KKyAgICAgICAgICAgIChgKHBv bHkgLiAsY29vcmRzKQorICAgICAgICAgICAgIChzZXRxIGNvb3JkcyAoY29weS1zZXF1ZW5j ZSBjb29yZHMpKQorICAgICAgICAgICAgIChsZXQgKChpIDApIChuICgxLSAobGVuZ3RoIGNv b3JkcykpKSkKKyAgICAgICAgICAgICAgICh3aGlsZSAoPCBpIG4pCisgICAgICAgICAgICAg ICAgIChsZXQqICgoaiAoMSsgaSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoeCAoYXJl ZiBjb29yZHMgaSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoeSAoYXJlZiBjb29yZHMg aikpKQorICAgICAgICAgICAgICAgICAgIChpZiBzY2FsZQorICAgICAgICAgICAgICAgICAg ICAgICAoc2V0cSB4IChyb3VuZCAoKiB4IHNjYWxlKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeSAocm91bmQgKCogeSBzY2FsZSkpKSkKKyAgICAgICAgICAgICAgICAgICAo aWYgcm90YXRlCisgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChwIChpbWFnZS0tcm90 YXRlLWNvb3JkIHggeSByb3RhdGUgc2l6ZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg IChzZXRxIHggKGNhciBwKSB5IChjZHIgcCkpKSkKKyAgICAgICAgICAgICAgICAgICAoaWYg ZmxpcAorICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB4ICgtIGZsaXAtdyB4KSkpCisg ICAgICAgICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgeCkKKyAgICAgICAgICAgICAgICAg ICAoYXNldCBjb29yZHMgaiB5KSkKKyAgICAgICAgICAgICAgICAgKHNldHEgaSAoKyBpIDIp KSkpCisgICAgICAgICAgICAgKHB1c2ggYCgocG9seSAuICxjb29yZHMpICxpZCAscGxpc3Qp IG1hcCkpCisgICAgICAgICAgICApKSkKKyAgICAgIG1hcCkpKQogCiAoZGVmdW4gaW1hZ2Ut LWNvbXB1dGUtb3JpZ2luYWwtbWFwIChpbWFnZSkKICAgIlJldHVybiBvcmlnaW5hbCBtYXAg Zm9yIElNQUdFLgogSWYgSU1BR0UgbGFja3MgOm1hcCBwcm9wZXJ0eSwgcmV0dXJuIG5pbC4K LVdoZW4gOnJvdGF0aW9uIGlzIG5vdCBhIG11bHRpcGxlIG9mIDkwLCByZXR1cm4gY29weSBv ZiA6bWFwLiIKLSAgKHdoZW4gKGltYWdlLXByb3BlcnR5IGltYWdlIDptYXApCi0gICAgKGxl dCogKChpbWFnZS1jb3B5IChjb3B5LXRyZWUgaW1hZ2UgdCkpCi0gICAgICAgICAgIChtYXAg KGltYWdlLXByb3BlcnR5IGltYWdlLWNvcHkgOm1hcCkpCi0gICAgICAgICAgIChzY2FsZSAo b3IgKGltYWdlLXByb3BlcnR5IGltYWdlLWNvcHkgOnNjYWxlKSAxKSkKLSAgICAgICAgICAg KHJvdGF0aW9uIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UtY29weSA6cm90YXRpb24pIDAp KQotICAgICAgICAgICAoZmxpcCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UtY29weSA6ZmxpcCkp Ci0gICAgICAgICAgIChzaXplIChpbWFnZS1zaXplIGltYWdlLWNvcHkgdCkpKQotICAgICAg KHdoZW4gKGFuZCA7IEhhbmRsZSBvbmx5IDkwLWRlZ3JlZSByb3RhdGlvbnMKLSAgICAgICAg ICAgICAoemVyb3AgKG1vZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgICAoemVyb3AgKCUg KHRydW5jYXRlIHJvdGF0aW9uKSA5MCkpKQorV2hlbiB0aGVyZSBpcyBubyB0cmFuc2Zvcm1h dGlvbiwgcmV0dXJuIDptYXAuIgorICAod2hlbi1sZXQgKChtYXAgKGltYWdlLXByb3BlcnR5 IGltYWdlIDptYXApKSkKKyAgICAobGV0KiAoKHNjYWxlIChsZXQgKChzIChpbWFnZS0tY3Vy cmVudC1zY2FsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2UtLWltYWdlLXdpdGhvdXQtcGFyYW1ldGVy cyBpbWFnZSkpKSkKKyAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoPSBzIDEpIHMpKSkK KyAgICAgICAgICAgKHJvdGF0ZSAobGV0ICgoZCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJv dGF0aW9uKSkpCisgICAgICAgICAgICAgICAgICAgICA7OyBIYW5kbGUgb25seSA5MC1kZWdy ZWUgcm90YXRpb25zCisgICAgICAgICAgICAgICAgICAgICAoYW5kIGQgKD0gMCAobW9kIGQg MSkpICg9IDAgKCUgZCA5MCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICh0cnVuY2F0 ZSAobW9kICgtIGQpIDM2MCkpKSkpCisgICAgICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0 eSBpbWFnZSA6ZmxpcCkpCisgICAgICAgICAgIChvbWFwIG1hcCkKKyAgICAgICAgICAgc2l6 ZSBmbGlwLXcpCisgICAgICAod2hlbiAob3Igc2NhbGUgcm90YXRlIGZsaXApCisgICAgICAg IChzZXRxIG9tYXAgbmlsCisgICAgICAgICAgICAgIHNpemUgKGltYWdlLXNpemUgaW1hZ2Ug dCkKKyAgICAgICAgICAgICAgZmxpcC13IChjYXIgc2l6ZSkpCiAgICAgICAgIDs7IEluIHJl bmRlcmVkIGltYWdlcywgcm90YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgYmVmb3JlIGZsaXAu CiAgICAgICAgIDs7IFRvIHVuZG8gdGhlIHRyYW5zZm9ybWF0aW9uLCBmbGlwIGJlZm9yZSBy b3RhdGluZy4KLSAgICAgICAgOzsgU0laRSBmaXRzIE1BUCBiZWZvcmUgaXQgaXMgdHJhbnNm b3JtZWQgYmFjayB0byBPUklHSU5BTC1NQVAuCi0gICAgICAgIDs7IFRoZXJlZm9yZSwgc2Nh bGUgTUFQIGFmdGVyIGZsaXAgYW5kIHJvdGF0ZSBvcGVyYXRpb25zLCBzaW5jZQotICAgICAg ICA7OyBib3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgotICAgICAgICAoaW1hZ2UtLWZsaXAt bWFwIG1hcCBmbGlwIHNpemUpCi0gICAgICAgIChpbWFnZS0tcm90YXRlLW1hcCBtYXAgKC0g cm90YXRpb24pIHNpemUpCi0gICAgICAgIChpbWFnZS0tc2NhbGUtbWFwIG1hcCAoLyAxLjAg c2NhbGUpKSkKLSAgICAgIG1hcCkpKQotCi0oZGVmdW4gaW1hZ2UtLXNjYWxlLW1hcCAobWFw IHNjYWxlKQotICAiU2NhbGUgTUFQIGFjY29yZGluZyB0byBTQ0FMRS4KLURlc3RydWN0aXZl bHkgbW9kaWZpZXMgYW5kIHJldHVybnMgTUFQLiIKLSAgKHVubGVzcyAoPSAxIHNjYWxlKQot ICAgIChwY2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3Qp IG1hcCkKLSAgICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKLSAgICAgICAgKCdyZWN0Ci0g ICAgICAgICAoc2V0ZiAoY2FhciBjb29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNj YWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAoY2RhciBj b29yZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2FkciBjb29yZHMpIChyb3VuZCAo KiAoY2FkciBjb29yZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2RkciBjb29yZHMp IChyb3VuZCAoKiAoY2RkciBjb29yZHMpIHNjYWxlKSkpKQotICAgICAgICAoJ2NpcmNsZQot ICAgICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBz Y2FsZSkpKQotICAgICAgICAgKHNldGYgKGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIg Y29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNldGNkciBjb29yZHMgKHJvdW5kICgqIChj ZHIgY29vcmRzKSBzY2FsZSkpKSkKLSAgICAgICAgKCdwb2x5Ci0gICAgICAgICAoZG90aW1l cyAoaSAobGVuZ3RoIGNvb3JkcykpCi0gICAgICAgICAgIChhc2V0IGNvb3JkcyBpCi0gICAg ICAgICAgICAgICAgIChyb3VuZCAoKiAoYXJlZiBjb29yZHMgaSkgc2NhbGUpKSkpKSkpKQot ICBtYXApCi0KLShkZWZ1biBpbWFnZS0tcm90YXRlLW1hcCAobWFwIHJvdGF0aW9uIHNpemUp Ci0gICJSb3RhdGUgTUFQIGFjY29yZGluZyB0byBST1RBVElPTiBhbmQgU0laRS4KLURlc3Ry dWN0aXZlbHkgbW9kaWZpZXMgYW5kIHJldHVybnMgTUFQLiIKLSAgKHVubGVzcyAoemVyb3Ag cm90YXRpb24pCi0gICAgKHBjYXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxf aWQgLF9wbGlzdCkgbWFwKQotICAgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlwZQotICAgICAg ICAoJ3JlY3QKLSAgICAgICAgIChsZXQgKCB4MCB5MCAgOyBOZXcgdXBwZXIgbGVmdCBjb3Ju ZXIKLSAgICAgICAgICAgICAgICB4MSB5MSkgOyBOZXcgYm90dG9tIHJpZ2h0IGNvcm5lcgot ICAgICAgICAgICAocGNhc2UgKHRydW5jYXRlIChtb2Qgcm90YXRpb24gMzYwKSkgOyBTZXQg bmV3IGNvcm5lcnMgdG8uLi4KLSAgICAgICAgICAgICAoOTAgOyAuLi5vbGQgYm90dG9tIGxl ZnQgYW5kIHVwcGVyIHJpZ2h0Ci0gICAgICAgICAgICAgIChzZXRxIHgwIChjYWFyIGNvb3Jk cykgeTAgKGNkZHIgY29vcmRzKQotICAgICAgICAgICAgICAgICAgICB4MSAoY2FkciBjb29y ZHMpIHkxIChjZGFyIGNvb3JkcykpKQotICAgICAgICAgICAgICgxODAgOyAuLi5vbGQgYm90 dG9tIHJpZ2h0IGFuZCB1cHBlciBsZWZ0Ci0gICAgICAgICAgICAgIChzZXRxIHgwIChjYWRy IGNvb3JkcykgeTAgKGNkZHIgY29vcmRzKQotICAgICAgICAgICAgICAgICAgICB4MSAoY2Fh ciBjb29yZHMpIHkxIChjZGFyIGNvb3JkcykpKQotICAgICAgICAgICAgICgyNzAgOyAuLi5v bGQgdXBwZXIgcmlnaHQgYW5kIGJvdHRvbSBsZWZ0Ci0gICAgICAgICAgICAgIChzZXRxIHgw IChjYWRyIGNvb3JkcykgeTAgKGNkYXIgY29vcmRzKQotICAgICAgICAgICAgICAgICAgICB4 MSAoY2FhciBjb29yZHMpIHkxIChjZGRyIGNvb3JkcykpKSkKLSAgICAgICAgICAgKHNldGNh ciBjb29yZHMgKGltYWdlLS1yb3RhdGUtY29vcmQgeDAgeTAgcm90YXRpb24gc2l6ZSkpCi0g ICAgICAgICAgIChzZXRjZHIgY29vcmRzIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJv dGF0aW9uIHNpemUpKSkpCi0gICAgICAgICgnY2lyY2xlCi0gICAgICAgICAoc2V0Y2FyIGNv b3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZAotICAgICAgICAgICAgICAgICAgICAgICAgIChj YWFyIGNvb3JkcykgKGNkYXIgY29vcmRzKSByb3RhdGlvbiBzaXplKSkpCi0gICAgICAgICgn cG9seQotICAgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAg ICAod2hlbiAoPSAwICglIGkgMikpCi0gICAgICAgICAgICAgKHBjYXNlLWxldCAoKGAoLHgg LiAseSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlLS1yb3RhdGUtY29vcmQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmVmIGNvb3JkcyBpKSAoYXJlZiBjb29y ZHMgKDErIGkpKSByb3RhdGlvbiBzaXplKSkpCi0gICAgICAgICAgICAgICAoYXNldCBjb29y ZHMgaSB4KQotICAgICAgICAgICAgICAgKGFzZXQgY29vcmRzICgxKyBpKSB5KSkpKSkpKSkK LSAgbWFwKQorICAgICAgICA7OyBTSVpFIGZpdHMgTUFQIGJlZm9yZSBpdCBpcyB0cmFuc2Zv cm1lZCBiYWNrIHRvCisgICAgICAgIDs7IE9SSUdJTkFMLU1BUC4gIFRoZXJlZm9yZSwgc2Nh bGUgTUFQIGFmdGVyIGZsaXAgYW5kIHJvdGF0ZQorICAgICAgICA7OyBvcGVyYXRpb25zLCBz aW5jZSBib3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgICAocGNhc2UtZG9saXN0 IChgKCxhcmVhICxpZCAscGxpc3QpIG1hcCkKKyAgICAgICAgICAocGNhc2UtZXhoYXVzdGl2 ZSBhcmVhCisgICAgICAgICAgICA7OyBSZWN0YW5nbGUgaG90IHNwb3QuCisgICAgICAgICAg ICAoYChyZWN0IC4gKCgseDAgLiAseTApIC4gKCx4MSAuICx5MSkpKQorICAgICAgICAgICAg IChpZiBmbGlwCisgICAgICAgICAgICAgICAgIChsZXQgKCh4YSB4MCkgKHhiIHgxKSkKKyAg ICAgICAgICAgICAgICAgICAoc2V0cSB4MCAoLSBmbGlwLXcgeGIpCisgICAgICAgICAgICAg ICAgICAgICAgICAgeDEgKC0gZmxpcC13IHhhKSkpKQorICAgICAgICAgICAgIChpZiByb3Rh dGUgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgKGxldCAoKHAwIChpbWFnZS0t cm90YXRlLWNvb3JkIHgwIHkwIHJvdGF0ZSBzaXplKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgKHAxIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJvdGF0ZSBzaXplKSkpCisgICAg ICAgICAgICAgICAgICAgKHNldHEgeDAgKGNhciBwMCkgeTAgKGNkciBwMCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICB4MSAoY2FyIHAxKSB5MSAoY2RyIHAxKSkpKQorICAgICAgICAg ICAgIChpZiBzY2FsZQorICAgICAgICAgICAgICAgICAoc2V0cSB4MCAocm91bmQgKC8geDAg c2NhbGUpKSB5MCAocm91bmQgKC8geTAgc2NhbGUpKQorICAgICAgICAgICAgICAgICAgICAg ICB4MSAocm91bmQgKC8geDEgc2NhbGUpKSB5MSAocm91bmQgKC8geTEgc2NhbGUpKSkpCisg ICAgICAgICAgICAgOzsgTm9ybWFsaXplIHJlY3QgY29vcmRzIHRvIGJlIHRvcC9sZWZ0IGJv dHRvbS9yaWdodC4KKyAgICAgICAgICAgICAoaWYgKD4geDAgeDEpCisgICAgICAgICAgICAg ICAgIChsZXQgKChydyAoYWJzICgtIHgwIHgxKSkpKQorICAgICAgICAgICAgICAgICAgIChz ZXRxIHgwICgtIHgwIHJ3KSB4MSAoKyB4MSBydykpKSkKKyAgICAgICAgICAgICAoaWYgKD4g eTAgeTEpCisgICAgICAgICAgICAgICAgIChsZXQgKChyaCAoYWJzICgtIHkwIHkxKSkpKQor ICAgICAgICAgICAgICAgICAgIChzZXRxIHkwICgtIHkwIHJoKSB5MSAoKyB5MSByaCkpKSkK KyAgICAgICAgICAgICAocHVzaCBgKChyZWN0IC4gKCgseDAgLiAseTApIC4gKCx4MSAuICx5 MSkpKSAsaWQgLHBsaXN0KQorICAgICAgICAgICAgICAgICAgIG9tYXApKQorICAgICAgICAg ICAgOzsgQ2lyY2xlIGhvdCBzcG90LgorICAgICAgICAgICAgKGAoY2lyY2xlIC4gKCgseDAg LiAseTApIC4gLHIpKQorICAgICAgICAgICAgIChpZiBmbGlwCisgICAgICAgICAgICAgICAg IChzZXRxIHgwICgtIGZsaXAtdyB4MCkpKQorICAgICAgICAgICAgIChpZiByb3RhdGUKKyAg ICAgICAgICAgICAgICAgKGxldCAoKHAwIChpbWFnZS0tcm90YXRlLWNvb3JkIHgwIHkwIHJv dGF0ZSBzaXplKSkpCisgICAgICAgICAgICAgICAgICAgKHNldHEgeDAgKGNhciBwMCkgeTAg KGNkciBwMCkpKSkKKyAgICAgICAgICAgICAoaWYgc2NhbGUKKyAgICAgICAgICAgICAgICAg KHNldHEgeDAgKHJvdW5kICgvIHgwIHNjYWxlKSkgeTAgKHJvdW5kICgvIHkwIHNjYWxlKSkK KyAgICAgICAgICAgICAgICAgICAgICAgciAgKHJvdW5kICgvIHIgc2NhbGUpKSkpCisgICAg ICAgICAgICAgKHB1c2ggYCgoY2lyY2xlIC4gKCgseDAgLiAseTApIC4gLHIpKSAsaWQgLHBs aXN0KSBvbWFwKSkKKyAgICAgICAgICAgIDs7IFBvbHkgaG90IHNwb3QuCisgICAgICAgICAg ICAoYChwb2x5IC4gLGNvb3JkcykKKyAgICAgICAgICAgICAoc2V0cSBjb29yZHMgKGNvcHkt c2VxdWVuY2UgY29vcmRzKSkKKyAgICAgICAgICAgICAobGV0ICgoaSAwKSAobiAoMS0gKGxl bmd0aCBjb29yZHMpKSkpCisgICAgICAgICAgICAgICAod2hpbGUgKDwgaSBuKQorICAgICAg ICAgICAgICAgICAobGV0KiAoKGogKDErIGkpKQorICAgICAgICAgICAgICAgICAgICAgICAg KHggKGFyZWYgY29vcmRzIGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgKHkgKGFyZWYg Y29vcmRzIGopKSkKKyAgICAgICAgICAgICAgICAgICAoaWYgZmxpcAorICAgICAgICAgICAg ICAgICAgICAgICAoc2V0cSB4ICgtIGZsaXAtdyB4KSkpCisgICAgICAgICAgICAgICAgICAg KGlmIHJvdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgocCAoaW1hZ2UtLXJv dGF0ZS1jb29yZCB4IHkgcm90YXRlIHNpemUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAoc2V0cSB4IChjYXIgcCkgeSAoY2RyIHApKSkpCisgICAgICAgICAgICAgICAgICAgKGlm IHNjYWxlCisgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHggKHJvdW5kICgvIHggc2Nh bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IChyb3VuZCAoLyB5IHNjYWxl KSkpKQorICAgICAgICAgICAgICAgICAgIChhc2V0IGNvb3JkcyBpIHgpCisgICAgICAgICAg ICAgICAgICAgKGFzZXQgY29vcmRzIGogeSkpCisgICAgICAgICAgICAgICAgIChzZXRxIGkg KCsgaSAyKSkpKQorICAgICAgICAgICAgIChwdXNoIGAoKHBvbHkgLiAsY29vcmRzKSAsaWQg LHBsaXN0KSBvbWFwKSkKKyAgICAgICAgICAgICkpKQorICAgICAgb21hcCkpKQogCiAoZGVm dW4gaW1hZ2UtLXJvdGF0ZS1jb29yZCAoeCB5IGFuZ2xlIHNpemUpCiAgICJSb3RhdGUgY29v cmRpbmF0ZXMgWCBhbmQgWSBieSBBTkdMRSBpbiBpbWFnZSBvZiBTSVpFLgpAQCAtMTU1Mywy NyArMTYxNiw2IEBAIGltYWdlLS1yb3RhdGUtY29vcmQKICAgICAgICAgICAgICAgICh5MSAo LSB5MSkpKQogICAgIChjb25zIChyb3VuZCB4MSkgKHJvdW5kIHkxKSkpKQogCi0oZGVmdW4g aW1hZ2UtLWZsaXAtbWFwIChtYXAgZmxpcCBzaXplKQotICAiSG9yaXpvbnRhbGx5IGZsaXAg TUFQIGFjY29yZGluZyB0byBGTElQIGFuZCBTSVpFLgotRGVzdHJ1Y3RpdmVseSBtb2RpZmll cyBhbmQgcmV0dXJucyBNQVAuIgotICAod2hlbiBmbGlwCi0gICAgKHBjYXNlLWRvbGlzdCAo YCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQotICAgICAgKHBjYXNl LWV4aGF1c3RpdmUgdHlwZQotICAgICAgICAoJ3JlY3QKLSAgICAgICAgIChsZXQgKCh4MCAo LSAoY2FyIHNpemUpIChjYWRyIGNvb3JkcykpKQotICAgICAgICAgICAgICAgKHkwIChjZGFy IGNvb3JkcykpCi0gICAgICAgICAgICAgICAoeDEgKC0gKGNhciBzaXplKSAoY2FhciBjb29y ZHMpKSkKLSAgICAgICAgICAgICAgICh5MSAoY2RkciBjb29yZHMpKSkKLSAgICAgICAgICAg KHNldGNhciBjb29yZHMgKGNvbnMgeDAgeTApKQotICAgICAgICAgICAoc2V0Y2RyIGNvb3Jk cyAoY29ucyB4MSB5MSkpKSkKLSAgICAgICAgKCdjaXJjbGUKLSAgICAgICAgIChzZXRmIChj YWFyIGNvb3JkcykgKC0gKGNhciBzaXplKSAoY2FhciBjb29yZHMpKSkpCi0gICAgICAgICgn cG9seQotICAgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAg ICAod2hlbiAoPSAwICglIGkgMikpCi0gICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgKC0g KGNhciBzaXplKSAoYXJlZiBjb29yZHMgaSkpKSkpKSkpKQotICBtYXApCi0KIChwcm92aWRl ICdpbWFnZSkKIAogOzs7IGltYWdlLmVsIGVuZHMgaGVyZQo= --------------F5wOMzPjOTH0QyUOlqIsL036--