Received: (at 70122) by debbugs.gnu.org; 12 Apr 2024 09:42:39 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 12 05:42:39 2024 Received: from localhost ([127.0.0.1]:57907 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rvDQc-0003zb-ND for submit <at> debbugs.gnu.org; Fri, 12 Apr 2024 05:42:39 -0400 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]:52702) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <braungb88@HIDDEN>) id 1rvDQa-0003z4-1s for 70122 <at> debbugs.gnu.org; Fri, 12 Apr 2024 05:42:38 -0400 Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-56e32b439c5so263608a12.1 for <70122 <at> debbugs.gnu.org>; Fri, 12 Apr 2024 02:42:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712914940; x=1713519740; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=F+qMoeKMaOpY+HLufrnHv3R8C3tdj5l1OztXSWXTaTE=; b=TskiJqD6aV/byoGDQQuqzTTsgbAeoIJDvJ0I0Y0DM9+eERx5VSJ3A/iJDeMuYpt0Rp dZqjmz/BSXnAUY22Dbl6F+6D3NDjQPSkox1aaU8lSDMKRxGpK+vjyDNv+gpsDBXu3SFQ h8T3WUpqZ/hNkhV8DLnBMocNwHUDgKD+6bmmY6ea8lVluNLo6xKQqvjEySpS28aeYfYy 6iKTEvn6j0QKClT5ZY4d1cXk5erq2SAl0p3s0YsQ5t2BZWuh/oiHlza/Fty1T0X6zEMl Ee3O/uuyf6dR+x7PZFZths6z2tBcniIcJBhx4u1Wqms5/AZcARSz3nwaA+2zv8vAnNPY w4/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712914940; x=1713519740; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=F+qMoeKMaOpY+HLufrnHv3R8C3tdj5l1OztXSWXTaTE=; b=GA2E6Cjftvz7rWn4rPakHp8Dy6AHXdNlgCiByTBf/FqrfychZEXHX+S5ZeIV4oXCBH 06HCf5psNrYNZY5MZ0VTPdPBjcT1jWM5SALs2flsmP4yIrS7rTB37r5/jLEez+hnNRnB 7jUTHNF77C3stQbifNve0Kd5x/hkgPLLKqKbP9N5jt/IcDflXyUOg/rNTq7yzT8nSUhM izDKjJ5cn0qKmB+h8iAX1UthADdFO60MZBtmiwuZ+9ErLqfV4PDkgbypcMSRhiz44MpA m5O1JLdckf+hY+9eOy5dlSkmEWZrLIN6lffDe4XiFlHidqYsnWp4QHBjNPzilZWQKEeU xOwA== X-Gm-Message-State: AOJu0YzDLG2w3xzyIZxND4FHGO8JKBfoGh4RtjlkF/wmLT14zVX8PUa4 SkSlK6S3jvVGPzyoe+nl1yAceVV9anT8MGBslINqK8SaS14FSJwb80NUIw== X-Google-Smtp-Source: AGHT+IGul3OIEQVf8rL0wqw4a9lMpC5i3RgvJg/mvs5oFFO8u28LjgFe7uBrnD3XdjMPsPbiZNlbJg== X-Received: by 2002:a50:ab15:0:b0:56e:2bf4:fe02 with SMTP id s21-20020a50ab15000000b0056e2bf4fe02mr1695401edc.11.1712914939986; Fri, 12 Apr 2024 02:42:19 -0700 (PDT) Received: from gabor.localnet ([2001:9e8:1565:7c00:3935:88e7:95c6:1e91]) by smtp.gmail.com with ESMTPSA id qh27-20020a170906ecbb00b00a519054d7ddsm1618611ejb.61.2024.04.12.02.42.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 02:42:18 -0700 (PDT) From: Braun =?ISO-8859-1?Q?G=E1bor?= <braungb88@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs Date: Fri, 12 Apr 2024 11:42:17 +0200 Message-ID: <3478329.QJadu78ljV@gabor> In-Reply-To: <8400498.NyiUUSuA9g@gabor> References: <2318820.ElGaqSPkdT@gabor> <86frw191ht.fsf@HIDDEN> <8400498.NyiUUSuA9g@gabor> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart1888251.CQOukoFCf9" Content-Transfer-Encoding: 7Bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 70122 Cc: 70122 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.7 (/) This is a multi-part message in MIME format. --nextPart1888251.CQOukoFCf9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hi, Sorry, I've forgotten to attach the new version of the patch in the previous email. Best wishes, G=C3=A1bor --nextPart1888251.CQOukoFCf9 Content-Disposition: attachment; filename="0001-transpose-regions-fix-wrong-lengths-and-case-of-equa.patch" Content-Transfer-Encoding: quoted-printable Content-Type: text/x-patch; charset="unicode-2-0-utf-8"; name="0001-transpose-regions-fix-wrong-lengths-and-case-of-equa.patch" =46rom fd7f6b9c63f3989863dc789e76fc1dd85f0ab630 Mon Sep 17 00:00:00 2001 =46rom: =3D?UTF-8?q?G=3DC3=3DA1bor=3D20Braun?=3D <gabor.braun@uni-duisburg-= essen.de> Date: Wed, 3 Apr 2024 20:03:40 +0200 Subject: [PATCH] transpose-regions: fix wrong lengths and case of equal length. Case len1_byte =3D=3D len2_byte: Adjust everything assuming len1 =3D=3D len2: 1. Adjust intervals even between the two regions, as positions may change. 2. undo entries: make a simple replacement change as in the other branches instead of separately on the two regions. This is to work around set_text_properties_1 and graft_intervals_into_buffer recording text property changes in undo history (which is unwanted here). 3. Adjust positions and position differences which rely on len1 =3D=3D len2. Replace len_mid with end1 - start2 where number of characters is expected instead of number of bytes. =2D-- src/editfns.c | 35 ++++++++++------- test/src/editfns-tests.el | 79 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 14 deletions(-) diff --git a/src/editfns.c b/src/editfns.c index 85f7739df07..dd174e8dfcd 100644 =2D-- a/src/editfns.c +++ b/src/editfns.c @@ -4661,18 +4661,18 @@ DEFUN ("transpose-regions", Ftranspose_regions, Str= anspose_regions, 4, 5, USE_SAFE_ALLOCA; =20 modify_text (start1, end2); =2D record_change (start1, len1); =2D record_change (start2, len2); + record_change (start1, (end2 - start1)); + tmp_interval1 =3D copy_intervals (cur_intv, start1, len1); =2D tmp_interval2 =3D copy_intervals (cur_intv, start2, len2); + /* Intervals in-between need adjustment unless len1 =3D=3D len2. + */ + tmp_interval_mid =3D copy_intervals (cur_intv, end1, + start2 - end1); + tmp_interval2 =3D copy_intervals (cur_intv, start2, len2); =20 =2D tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr1, 0); + tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0); if (tmp_interval3) =2D set_text_properties_1 (startr1, endr1, Qnil, buf, tmp_interval3); =2D =2D tmp_interval3 =3D validate_interval_range (buf, &startr2, &endr2, 0); =2D if (tmp_interval3) =2D set_text_properties_1 (startr2, endr2, Qnil, buf, tmp_interval3); + set_text_properties_1 (startr1, endr2, Qnil, buf, tmp_interval3); =20 temp =3D SAFE_ALLOCA (len1_byte); start1_addr =3D BYTE_POS_ADDR (start1_byte); @@ -4682,8 +4682,11 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stra= nspose_regions, 4, 5, memcpy (start2_addr, temp, len1_byte); SAFE_FREE (); =20 =2D graft_intervals_into_buffer (tmp_interval1, start2, + graft_intervals_into_buffer (tmp_interval1, end2 - len1, len1, current_buffer, 0); + graft_intervals_into_buffer (tmp_interval_mid, start1 + len2, + start2 - end1, + current_buffer, 0); graft_intervals_into_buffer (tmp_interval2, start1, len2, current_buffer, 0); } @@ -4696,7 +4699,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran= spose_regions, 4, 5, modify_text (start1, end2); record_change (start1, (end2 - start1)); tmp_interval1 =3D copy_intervals (cur_intv, start1, len1); =2D tmp_interval_mid =3D copy_intervals (cur_intv, end1, len_mid); + tmp_interval_mid =3D copy_intervals (cur_intv, end1, + start2 - end1); tmp_interval2 =3D copy_intervals (cur_intv, start2, len2); =20 tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0); @@ -4716,7 +4720,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran= spose_regions, 4, 5, graft_intervals_into_buffer (tmp_interval1, end2 - len1, len1, current_buffer, 0); graft_intervals_into_buffer (tmp_interval_mid, start1 + len2, =2D len_mid, current_buffer, 0); + start2 - end1, + current_buffer, 0); graft_intervals_into_buffer (tmp_interval2, start1, len2, current_buffer, 0); } @@ -4729,7 +4734,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran= spose_regions, 4, 5, modify_text (start1, end2); =20 tmp_interval1 =3D copy_intervals (cur_intv, start1, len1); =2D tmp_interval_mid =3D copy_intervals (cur_intv, end1, len_mid); + tmp_interval_mid =3D copy_intervals (cur_intv, end1, + start2 - end1); tmp_interval2 =3D copy_intervals (cur_intv, start2, len2); =20 tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0); @@ -4749,7 +4755,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran= spose_regions, 4, 5, graft_intervals_into_buffer (tmp_interval1, end2 - len1, len1, current_buffer, 0); graft_intervals_into_buffer (tmp_interval_mid, start1 + len2, =2D len_mid, current_buffer, 0); + start2 - end1, + current_buffer, 0); graft_intervals_into_buffer (tmp_interval2, start1, len2, current_buffer, 0); } diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el index b3b7da65ad3..7c3e3837c8c 100644 =2D-- a/test/src/editfns-tests.el +++ b/test/src/editfns-tests.el @@ -132,6 +132,85 @@ propertize/error-even-number-of-args "Number of args for `propertize' must be odd." (should-error (propertize "foo" 'bar) :type 'wrong-number-of-arguments)) =20 +;; Tests for `transpose-region' + +(ert-deftest transpose-regions-text-properties-2 () + "Test `transpose-regions' thoroughly with text properties." + (let* ((string1pre (propertize "a\x2013" :test 1)) + (middle (propertize "c\x00e9h" :test 0)) + (string2 (propertize "\x25cf\x25cb" :test 2)) + (bytes1 (string-bytes string1pre)) + (bytes2 (string-bytes string2))) + ;; (cl-assert (< bytes1 bytes2)) + (dotimes (i (+ 3 (- bytes2 bytes1))) + (let ((string1 (concat string1pre + (propertize (make-string i ?X) + :test t)))) + (with-temp-buffer + (insert string1 middle string2) + (buffer-enable-undo) + (transpose-regions + 1 (1+ (length string1)) + (- (point) (length string2)) (point)) + (should (equal-including-properties + (buffer-string) + (concat string2 middle string1))) + (undo-boundary) + (let ((this-command #'undo) + (last-command #'ert)) ; anything but undo + (undo)) + (should (equal-including-properties + (buffer-string) + (concat string1 middle string2)))))))) + +(ert-deftest transpose-regions-text-properties () + "Test `transpose-regions' with text properties. +This test is known to crash Emacs 28.2, 29.2, 29.3." + (with-temp-buffer + (insert (propertize "a" 'face 'font-lock-variable-name-face)) + (insert ":\n") + (insert (propertize "b" 'face 'font-lock-variable-name-face)) + (insert ": \x2113\x2080\n") + (insert (propertize "v" 'face 'font-lock-variable-name-face)) + (insert ": scaling\n") + ;; Move last line to the beginning + (transpose-regions 1 1 10 21) + (should (equal-including-properties + (buffer-string) + (concat + (propertize "v" 'face 'font-lock-variable-name-face) + ": scaling\n" + (propertize "a" 'face 'font-lock-variable-name-face) + ":\n" + (propertize "b" 'face 'font-lock-variable-name-face) + ": \x2113\x2080\n"))))) + +(ert-deftest transpose-regions-equal-size () + "Test `transpose-regions' on regions equal-size regions. +Both the number of characters and bytes are equal of the transposed +regions." + (let* ((string1 (propertize "a\x2013\ bc" :test 1)) + (middle (propertize "R=C5=90T" :test 0)) + (string2 (propertize "f\x2013nd" :test 2))) + (cl-assert (=3D (length string1) (length string2))) + (cl-assert (=3D (string-bytes string1) (string-bytes string2))) + (with-temp-buffer + (insert string1 middle string2) + (buffer-enable-undo) + (transpose-regions + 1 (1+ (length string1)) + (- (point) (length string2)) (point)) + (should (equal-including-properties + (buffer-string) + (concat string2 middle string1))) + (undo-boundary) + (let ((this-command #'undo) + (last-command #'ert)) ; anything but undo + (undo)) + (should (equal-including-properties + (buffer-string) + (concat string1 middle string2)))))) + ;; Tests for bug#5131. (defun transpose-test-reverse-word (start end) "Reverse characters in a word by transposing pairs of characters." =2D-=20 2.39.2 --nextPart1888251.CQOukoFCf9--
bug-gnu-emacs@HIDDEN
:bug#70122
; Package emacs
.
Full text available.Received: (at 70122) by debbugs.gnu.org; 12 Apr 2024 09:39:56 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 12 05:39:56 2024 Received: from localhost ([127.0.0.1]:57902 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rvDNz-0003aw-1R for submit <at> debbugs.gnu.org; Fri, 12 Apr 2024 05:39:56 -0400 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]:60621) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <braungb88@HIDDEN>) id 1rvDNv-0003ZI-KV for 70122 <at> debbugs.gnu.org; Fri, 12 Apr 2024 05:39:53 -0400 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-56c5d05128dso713064a12.0 for <70122 <at> debbugs.gnu.org>; Fri, 12 Apr 2024 02:39:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712914776; x=1713519576; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bjbytr0Aqb2kd/e1leOlUz6+pbXTwMpenuFau/eQhjs=; b=fQS+XNzw1ZN5h8PmFVLt0aUfJ+qUKIc8O9mnBwNGunWkkWOQZkFaDKSzL2ERBKgvry clkFBjBIqn3nBQqfburYn7MidBvVjQj2v1P2zAD0xQecnO9PbbS/WXmeBm3IlOOxMZNw 6/UA9mUPNehgTjj3Nzf7WxhvDl8DMwa0I1lalWFx/u0LFZNnk7rmNOPK8mqg4QaIdMOH wkfm7SN2KDcXRwCRhhDZwGdRpn8Zt47sqIC58acrGXFlowfLJeHYIe246EE24zaC/YTD Fp5vjUEVvllnvIQw5nqS4dCaQ1NRdzw3OetGqSynu9JNs+geFCREmqTiAEinFZcAlVod +M2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712914776; x=1713519576; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bjbytr0Aqb2kd/e1leOlUz6+pbXTwMpenuFau/eQhjs=; b=updx879Y/6r6u6G7oC46r2Zebzi5LY2AmDumEPKuhrvfaCv3ksCKiUaU3DrwsS9BHA 0aV7QdfK3lxlCkxWeq67S9B0gMU+7IV0oMwvKNlCoUsC7jdJ90ls8Eg+TXIPlbP91VqY 6j8xSxpG9zex9dnhZfnauE0n+FMKDUgnx9YuwuIpcK+SSOyNBUeVp7L3O6g6gBIu9pWp j/z1/rSrnzmaHsOfsqg1eI6ZoYe5XPvdYWtRGkWagPMCiMu2qZ+lWjN1K8Xjz+bnWed1 XyZv4PEoT4F1RY6ua6FKwIUGLbyOmGg2PLajllmaI4ZDnuGV+ljIGFel57+lUa40nKtu ftJg== X-Gm-Message-State: AOJu0Yw1XQbX33kHqg7YDvRN3zyQb92EC/qOCFs964TeqO/GnUGHoxWy WaFJll7tV6EyCM6brfrcCCAazcR+57yk4sTgGcKZ0m19BJos2hQQ X-Google-Smtp-Source: AGHT+IHIy98NNwvuTjNQ0piHallIqOJtLOcsDHE5+8Eqc+LTwtqBEnG7Ly3UAvNX5b9j0EHAR0Pxsw== X-Received: by 2002:a50:d611:0:b0:56f:e609:743 with SMTP id x17-20020a50d611000000b0056fe6090743mr1435889edi.35.1712914775810; Fri, 12 Apr 2024 02:39:35 -0700 (PDT) Received: from gabor.localnet ([2001:9e8:1565:7c00:3935:88e7:95c6:1e91]) by smtp.gmail.com with ESMTPSA id n16-20020a05640205d000b0056fea963056sm1317964edx.7.2024.04.12.02.39.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 02:39:35 -0700 (PDT) From: Braun =?ISO-8859-1?Q?G=E1bor?= <braungb88@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs Date: Fri, 12 Apr 2024 11:39:34 +0200 Message-ID: <8400498.NyiUUSuA9g@gabor> In-Reply-To: <86frw191ht.fsf@HIDDEN> References: <2318820.ElGaqSPkdT@gabor> <3216728.5fSG56mABF@gabor> <86frw191ht.fsf@HIDDEN> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 70122 Cc: 70122 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.7 (/) Hi Eli, Sorry for answering late. > Can we lift that restriction by augmenting the len1_byte =3D=3D=20 len2_byte > branch so that the len1 =3D=3D len2 condition is not needed? I could only come up with one that has minimal difference to to the other branches. I've attached it. I've tried to preserve the undo entries as changes in the two=20 regions, but I couldn't make it (one of my tests failed), so now it is a change in the large region as in the other=20 branches, and the tests pass. The issue I was unable to solve is that the functions set_text_properties_1 and graft_intervals_into_buffer record text property changes in undo history, but this is unwanted=20 here as transpose-regions handles undo history itself. These entries don't cause trouble because they happen to be=20 followed by a deletion of the text where properties change, and this applies to all branches of transpose-regions. I'd really like to use a version of these functions with: "change=20 text properties, but leave it to us to record it in undo history". =20 > This says the test that crashed was the one of the two new ones=20 you > added, and it is different from the one you presented at the=20 beginning > of this bug report. OK, sorry for that. > > With the tests I intended to test all the branches in the code > > where the regions don't touch each other, catching mistakes > > where the wrong length is used. >=20 > Can we also have a test where the byte lengths are equal, but=20 the > character lengths aren't? There is already one there: the test which loops over examples and adds characters is meant to cover various cases for the byte lengths, including when they are equal. As mentioned above,=20 I had this test failing in this case during patch development. > > I hoped that byte length is not system dependent, >=20 > It isn't, not if you consider the internal representation of > characters in Emacs buffers and strings. OK, maybe the issue was that I've sent a different test, as you mentioned. > Last, but not least: with the added tests your patch becomes=20 larger > than what we can accept without your assigning the copyright to=20 the > FSF. Would you like to start the legal paperwork of copyright > assignment at this time Let's start the paperwork. Best wishes, G=C3=A1bor Braun
bug-gnu-emacs@HIDDEN
:bug#70122
; Package emacs
.
Full text available.Received: (at 70122) by debbugs.gnu.org; 4 Apr 2024 04:49:08 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 04 00:49:08 2024 Received: from localhost ([127.0.0.1]:60138 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rsF2B-0001Nv-RI for submit <at> debbugs.gnu.org; Thu, 04 Apr 2024 00:49:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51064) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rsF29-0001Mp-DG for 70122 <at> debbugs.gnu.org; Thu, 04 Apr 2024 00:49:06 -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 1rsF1w-0001IW-Ip; Thu, 04 Apr 2024 00:48:53 -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=VWHZqM2AomXn8HU+AiRR9OP4JLjrf5G43pACF64wURY=; b=KoR/FUplntYBw6/519V8 NP1egiI1XlzvoXjd/nROECjbRjoP99lMBhqimviRLw9s1YbGnXAZ1b4qkCs9pdoQXveuYjiuE4YgZ /xGOybkcZsTIKzP8C6jadRH9FnL0u8+bEguROBJV6FKUqxIjoT8WIdE+AqhQC07tCXQp0vCVtZmUR VLgTUyv8JTU8EOeMbqcgkJqfiQYFpw4/u0gJ4E5Ka5vhlRsAJwVnyYfkkKggMSGTTGYQA8yY3Ondl i3H0Piv8GLQzBwN/El8X9MpuKA1CYMwzqk+WkJXusO2SLIRQROtZZOQz72MVd147Jrj3HpI/2dlRp 6WZEcjt55RS+EQ==; Date: Thu, 04 Apr 2024 07:48:46 +0300 Message-Id: <86frw191ht.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Braun =?utf-8?Q?G=C3=A1bor?= <braungb88@HIDDEN> In-Reply-To: <3216728.5fSG56mABF@gabor> (message from Braun =?utf-8?Q?G?= =?utf-8?Q?=C3=A1bor?= on Wed, 03 Apr 2024 20:52:47 +0200) Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs References: <2318820.ElGaqSPkdT@gabor> <86wmph9u1i.fsf@HIDDEN> <86ttkl9q9b.fsf@HIDDEN> <3216728.5fSG56mABF@gabor> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70122 Cc: 70122 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: Braun Gábor <braungb88@HIDDEN> > Cc: 70122 <at> debbugs.gnu.org > Date: Wed, 03 Apr 2024 20:52:47 +0200 > > I've attached a new self-contained patch based on yours, > thank you for coming up with it. > > In my opinion, one of the problems is really as you said > that len_mid (length in bytes) > is uses where length of characters is expected. > The patch contains an additional such case, > and replaces (start1 + len1) in your patch with the equivalent > but shorter end1. > > The other problem is that the branch len1_byte == len2_byte > assumes len1 == len2 in several places: > undo records, positions after the transposition, > and the least obvious one is that even intervals between the > region seem to need adjustment of positions. Can we lift that restriction by augmenting the len1_byte == len2_byte branch so that the len1 == len2 condition is not needed? > (I don't know enough of intervals to understand it, but had failed > tests with text properties at wrong places.) Intervals work with character positions, that's all. Any call to functions that examine or modify intervals should use character positions, not byte positions, and accordingly length in terms of characters, not bytes. Is this sufficient for you to come up with changes to remove the len1 == len2 restriction from that branch? > Anyway, I've just added len1 == len2 as a condition to that branch > with comments where I think the assumption is used. If we cannot easily lift that restriction, that is the right fallback, yes. > I've also added a new test for this case. Thanks. > > The patch > > below passes both your test and the already-existing tests in > > test/src/editfns-tests.el. > > For me after applying your patch, the tests crashed. > The crash message was hidden in the end of the output: > > passed 21/24 transpose-nonascii-regions-test-1 (0.000067 sec) > passed 22/24 transpose-nonascii-regions-test-2 (0.000068 sec) > passed 23/24 transpose-regions-text-properties (0.000074 sec) > Undo > Undo > make[1]: *** [Makefile:181: src/editfns-tests.log] segmentation > fault > make[1]: Leaving directory "/home/gabor/src/build/emacs-29.3/test" > make: *** [Makefile:247: src/editfns-tests] Error 2 This says the test that crashed was the one of the two new ones you added, and it is different from the one you presented at the beginning of this bug report. So it is a small wonder I didn't see any crash in my testing. > With the tests I intended to test all the branches in the code > where the regions don't touch each other, catching mistakes > where the wrong length is used. Can we also have a test where the byte lengths are equal, but the character lengths aren't? > I hoped that byte length is not system dependent, It isn't, not if you consider the internal representation of characters in Emacs buffers and strings. > So what differences exist or byte length? I don't think there are differences, but if you show an example where you see such a difference, we can discuss the example and see what happens there. Last, but not least: with the added tests your patch becomes larger than what we can accept without your assigning the copyright to the FSF. Would you like to start the legal paperwork of copyright assignment at this time, so that we could accept all of your contributions without limitations, including any future contributions? If yes, I will send you the form to fill and instructions to email the filled form, to start the process. Thanks.
bug-gnu-emacs@HIDDEN
:bug#70122
; Package emacs
.
Full text available.Received: (at 70122) by debbugs.gnu.org; 3 Apr 2024 18:53:33 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Apr 03 14:53:32 2024 Received: from localhost ([127.0.0.1]:59607 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rs5jn-00062V-Mp for submit <at> debbugs.gnu.org; Wed, 03 Apr 2024 14:53:32 -0400 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]:59434) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <braungb88@HIDDEN>) id 1rs5jk-00061g-J9 for 70122 <at> debbugs.gnu.org; Wed, 03 Apr 2024 14:53:30 -0400 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-513e134f73aso228627e87.2 for <70122 <at> debbugs.gnu.org>; Wed, 03 Apr 2024 11:53:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712170398; x=1712775198; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KjZxb+0xElzjjLkd5UZMZvv8cqW/f/uhi8hcNqudcnA=; b=R2CS3dXFrMQ/9+pjmR7Z0WfvxmLN3EtR6MiQFwauTDsLmhnALz9rJLQ1GVFL6H/TJf GP5+FECBC6QhO7sO/b4huaHdTAldTcdpojLU5nxnFYiNjrBMlDoA3aLKgmjsj1HCyMgc f/xoVmkj8t/K/v8BEYvQY9fENBTGhdFHpqIHcmzvHtjPMZU2C7gh3cLN1QMjJcpjpcHU 8mwOZtDNMl4P9CtXyyNNBS5OVeXg+xisPhGnhYGLgr3WsBgkME1CJ1L0EZQnjJ6RCpc6 bxBG4w+BajehbfWXJniK/Yiy1biTUzFBaxlvYmXjKUXDzTdhFgI3uzsM4oRuSuRtPEdu SBYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712170398; x=1712775198; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KjZxb+0xElzjjLkd5UZMZvv8cqW/f/uhi8hcNqudcnA=; b=TLIsw0EJienlfSja8+2HG0RQIkpiWqz6e2ezqEdi2tNOBuhd3h12Ieut6tnHhfFuwK iWIX3ndMINymhSkVYRKT5X3fGScsvTlRT2AKyGuIbt+nVuMOp/sJUu9ZH6AJC4V9P9/u Ih2eyASqW3O5zH9mj6FaA1H7QengNxxMfrTFmRdaolQKXWSxcD5CoWUHum1loUVNvjkB Af2dz6zlXLFquJj4NTg3eD09yqI7QbdkQ9I9ppoXE0TvHT8Equb5mQiok7OoZghEtpYN QsWYmXDzLIXwM/7LY13DVU2glGaX6ajYVn6pbZ4QjXcHJLcPMbgzD60XznEY12DeZGyU bbcA== X-Gm-Message-State: AOJu0YwbcL4ysJlFpVhG1OavxyVPtT6i5AzuCBqKnXhrX0uJvL86k2cZ 0V9L+ObZqoUQkis4a5SbVKAwV67ipwUgG08v+L3Rsi4726HAnsyt X-Google-Smtp-Source: AGHT+IH3866bkJ6Vl2SUGBXGCbUC3iCYVuRqQSMafI1hC1bcl7jh2C0oJPxpWx7yKNACSWVwyjeiLw== X-Received: by 2002:ac2:5b5d:0:b0:513:c2e4:9daf with SMTP id i29-20020ac25b5d000000b00513c2e49dafmr284288lfp.52.1712170397706; Wed, 03 Apr 2024 11:53:17 -0700 (PDT) Received: from gabor.localnet ([2001:9e8:1548:b200:c5ff:2148:8b70:b48f]) by smtp.gmail.com with ESMTPSA id u17-20020a17090626d100b00a4e1aa345f6sm8010610ejc.115.2024.04.03.11.53.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Apr 2024 11:53:17 -0700 (PDT) From: Braun =?ISO-8859-1?Q?G=E1bor?= <braungb88@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs Date: Wed, 03 Apr 2024 20:52:47 +0200 Message-ID: <3216728.5fSG56mABF@gabor> In-Reply-To: <86ttkl9q9b.fsf@HIDDEN> References: <2318820.ElGaqSPkdT@gabor> <86wmph9u1i.fsf@HIDDEN> <86ttkl9q9b.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart5928865.MhkbZ0Pkbq" Content-Transfer-Encoding: 7Bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 70122 Cc: 70122 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.7 (/) This is a multi-part message in MIME format. --nextPart5928865.MhkbZ0Pkbq Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hi Eli, > Thanks, but could you please show the minimal change required to=20 fix > just the particular problem with this scenario I've attached a new self-contained patch based on yours, thank you for coming up with it. In my opinion, one of the problems is really as you said that len_mid (length in bytes) is uses where length of characters is expected. The patch contains an additional such case, and replaces (start1 + len1) in your patch with the equivalent but shorter end1. The other problem is that the branch len1_byte =3D=3D len2_byte assumes len1 =3D=3D len2 in several places: undo records, positions after the transposition, and the least obvious one is that even intervals between the=20 region seem to need adjustment of positions. (I don't know enough of intervals to understand it, but had failed=20 tests with text properties at wrong places.) Anyway, I've just added len1 =3D=3D len2 as a condition to that branch with comments where I think the assumption is used. I've also added a new test for this case. > The patch > below passes both your test and the already-existing tests in > test/src/editfns-tests.el. =46or me after applying your patch, the tests crashed. The crash message was hidden in the end of the output: passed 21/24 transpose-nonascii-regions-test-1 (0.000067 sec) passed 22/24 transpose-nonascii-regions-test-2 (0.000068 sec) passed 23/24 transpose-regions-text-properties (0.000074 sec) Undo Undo make[1]: *** [Makefile:181: src/editfns-tests.log] segmentation=20 fault make[1]: Leaving directory "/home/gabor/src/build/emacs-29.3/test" make: *** [Makefile:247: src/editfns-tests] Error 2 With the tests I intended to test all the branches in the code where the regions don't touch each other, catching mistakes where the wrong length is used. I hoped that byte length is not system dependent, it seems I have been mistaken, and the tests still need improvement to be thorough on all systems. So what differences exist or byte length? Best wishes, G=C3=A1bor --nextPart5928865.MhkbZ0Pkbq Content-Disposition: attachment; filename="0001-transpose-regions-fix-wrong-lengths-add-missing-cond.patch" Content-Transfer-Encoding: quoted-printable Content-Type: text/x-patch; charset="utf-8"; name="0001-transpose-regions-fix-wrong-lengths-add-missing-cond.patch" =46rom 5a0cf2542388104cde444b2130d994ee36ce5392 Mon Sep 17 00:00:00 2001 =46rom: =3D?UTF-8?q?G=3DC3=3DA1bor=3D20Braun?=3D <gabor.braun@uni-duisburg-= essen.de> Date: Wed, 3 Apr 2024 20:03:40 +0200 Subject: [PATCH] transpose-regions: fix wrong lengths; add missing conditio= n. Case len1_byte =3D=3D len2_byte: The code assumes len1 =3D=3D len2 at several places, see comments. As a fix, add that condition to the case. (This case is not strictly necessary, as the other cases cover it, so restricting the case should be no problem.) Replace len_mid with end1 - start2 where number of characters is expected instead of number of bytes. =2D-- src/editfns.c | 19 +++++++--- test/src/editfns-tests.el | 79 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/src/editfns.c b/src/editfns.c index 85f7739df07..65570a84472 100644 =2D-- a/src/editfns.c +++ b/src/editfns.c @@ -4655,12 +4655,13 @@ DEFUN ("transpose-regions", Ftranspose_regions, Str= anspose_regions, 4, 5, { len_mid =3D start2_byte - (start1_byte + len1_byte); =20 =2D if (len1_byte =3D=3D len2_byte) + if (len1_byte =3D=3D len2_byte && len1 =3D=3D len2) /* Regions are same size, though, how nice. */ { USE_SAFE_ALLOCA; =20 modify_text (start1, end2); + /* The undo records are only correct for len1 =3D=3D len2. */ record_change (start1, len1); record_change (start2, len2); tmp_interval1 =3D copy_intervals (cur_intv, start1, len1); @@ -4682,10 +4683,14 @@ DEFUN ("transpose-regions", Ftranspose_regions, Str= anspose_regions, 4, 5, memcpy (start2_addr, temp, len1_byte); SAFE_FREE (); =20 + /* In the following line start2 is only correct for + len1 =3D=3D len2. Otherwise it should be end2 - len1. */ graft_intervals_into_buffer (tmp_interval1, start2, len1, current_buffer, 0); graft_intervals_into_buffer (tmp_interval2, start1, len2, current_buffer, 0); + /* The intervals between end1 and start2 need no adjustment + only because len1 =3D=3D len2. */ } =20 else if (len1_byte < len2_byte) /* Second region larger than first */ @@ -4696,7 +4701,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran= spose_regions, 4, 5, modify_text (start1, end2); record_change (start1, (end2 - start1)); tmp_interval1 =3D copy_intervals (cur_intv, start1, len1); =2D tmp_interval_mid =3D copy_intervals (cur_intv, end1, len_mid); + tmp_interval_mid =3D copy_intervals (cur_intv, end1, + start2 - end1); tmp_interval2 =3D copy_intervals (cur_intv, start2, len2); =20 tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0); @@ -4716,7 +4722,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran= spose_regions, 4, 5, graft_intervals_into_buffer (tmp_interval1, end2 - len1, len1, current_buffer, 0); graft_intervals_into_buffer (tmp_interval_mid, start1 + len2, =2D len_mid, current_buffer, 0); + start2 - end1, + current_buffer, 0); graft_intervals_into_buffer (tmp_interval2, start1, len2, current_buffer, 0); } @@ -4729,7 +4736,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran= spose_regions, 4, 5, modify_text (start1, end2); =20 tmp_interval1 =3D copy_intervals (cur_intv, start1, len1); =2D tmp_interval_mid =3D copy_intervals (cur_intv, end1, len_mid); + tmp_interval_mid =3D copy_intervals (cur_intv, end1, + start2 - end1); tmp_interval2 =3D copy_intervals (cur_intv, start2, len2); =20 tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0); @@ -4749,7 +4757,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran= spose_regions, 4, 5, graft_intervals_into_buffer (tmp_interval1, end2 - len1, len1, current_buffer, 0); graft_intervals_into_buffer (tmp_interval_mid, start1 + len2, =2D len_mid, current_buffer, 0); + start2 - end1, + current_buffer, 0); graft_intervals_into_buffer (tmp_interval2, start1, len2, current_buffer, 0); } diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el index b3b7da65ad3..7c3e3837c8c 100644 =2D-- a/test/src/editfns-tests.el +++ b/test/src/editfns-tests.el @@ -132,6 +132,85 @@ propertize/error-even-number-of-args "Number of args for `propertize' must be odd." (should-error (propertize "foo" 'bar) :type 'wrong-number-of-arguments)) =20 +;; Tests for `transpose-region' + +(ert-deftest transpose-regions-text-properties-2 () + "Test `transpose-regions' thoroughly with text properties." + (let* ((string1pre (propertize "a\x2013" :test 1)) + (middle (propertize "c\x00e9h" :test 0)) + (string2 (propertize "\x25cf\x25cb" :test 2)) + (bytes1 (string-bytes string1pre)) + (bytes2 (string-bytes string2))) + ;; (cl-assert (< bytes1 bytes2)) + (dotimes (i (+ 3 (- bytes2 bytes1))) + (let ((string1 (concat string1pre + (propertize (make-string i ?X) + :test t)))) + (with-temp-buffer + (insert string1 middle string2) + (buffer-enable-undo) + (transpose-regions + 1 (1+ (length string1)) + (- (point) (length string2)) (point)) + (should (equal-including-properties + (buffer-string) + (concat string2 middle string1))) + (undo-boundary) + (let ((this-command #'undo) + (last-command #'ert)) ; anything but undo + (undo)) + (should (equal-including-properties + (buffer-string) + (concat string1 middle string2)))))))) + +(ert-deftest transpose-regions-text-properties () + "Test `transpose-regions' with text properties. +This test is known to crash Emacs 28.2, 29.2, 29.3." + (with-temp-buffer + (insert (propertize "a" 'face 'font-lock-variable-name-face)) + (insert ":\n") + (insert (propertize "b" 'face 'font-lock-variable-name-face)) + (insert ": \x2113\x2080\n") + (insert (propertize "v" 'face 'font-lock-variable-name-face)) + (insert ": scaling\n") + ;; Move last line to the beginning + (transpose-regions 1 1 10 21) + (should (equal-including-properties + (buffer-string) + (concat + (propertize "v" 'face 'font-lock-variable-name-face) + ": scaling\n" + (propertize "a" 'face 'font-lock-variable-name-face) + ":\n" + (propertize "b" 'face 'font-lock-variable-name-face) + ": \x2113\x2080\n"))))) + +(ert-deftest transpose-regions-equal-size () + "Test `transpose-regions' on regions equal-size regions. +Both the number of characters and bytes are equal of the transposed +regions." + (let* ((string1 (propertize "a\x2013\ bc" :test 1)) + (middle (propertize "R=C5=90T" :test 0)) + (string2 (propertize "f\x2013nd" :test 2))) + (cl-assert (=3D (length string1) (length string2))) + (cl-assert (=3D (string-bytes string1) (string-bytes string2))) + (with-temp-buffer + (insert string1 middle string2) + (buffer-enable-undo) + (transpose-regions + 1 (1+ (length string1)) + (- (point) (length string2)) (point)) + (should (equal-including-properties + (buffer-string) + (concat string2 middle string1))) + (undo-boundary) + (let ((this-command #'undo) + (last-command #'ert)) ; anything but undo + (undo)) + (should (equal-including-properties + (buffer-string) + (concat string1 middle string2)))))) + ;; Tests for bug#5131. (defun transpose-test-reverse-word (start end) "Reverse characters in a word by transposing pairs of characters." =2D-=20 2.39.2 --nextPart5928865.MhkbZ0Pkbq--
bug-gnu-emacs@HIDDEN
:bug#70122
; Package emacs
.
Full text available.Received: (at 70122) by debbugs.gnu.org; 1 Apr 2024 13:17:22 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 01 09:17:22 2024 Received: from localhost ([127.0.0.1]:49826 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rrHXN-0007o2-Nd for submit <at> debbugs.gnu.org; Mon, 01 Apr 2024 09:17:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36442) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rrHXI-0007nh-Tv for 70122 <at> debbugs.gnu.org; Mon, 01 Apr 2024 09:17:19 -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 1rrHXA-0001AH-E5; Mon, 01 Apr 2024 09:17:08 -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=+qJtfMICxq6uUNqhE6Ah06zhdO82+ugU/hC8xMPjRG0=; b=PMGg802MWpcZ u6ekqm6UoKzupKaYtKEG8KvpqvHcvF6HIeOQSq2rfMeKf/Dd6AKeN71YIc0ILqc+C5h1tmTQ5sC5/ aAZsyvTY4/3U7bd1i1GJyI5xvHvca/Lu4twl08rbPnwihVues3GmSrhuqrfP+v6paljCm5ugR0eee fUD3Uqoi0e8ieSw3LZ8ET6eAMNVc5NUSHoDsCh2GKuNll3VFZ9Ivsz/xZpPT5Gs4Dnh2xZ1lrzwVe YzSkuqMkao6KmmRv8deHT7BTrZwhvNRrAfA6MvtGkr8I8IDSBsw8tERKATOHLV9VpneJ4rnSfQA8q 4PI6bSxixeGs8RE1Lsh9Bg==; Date: Mon, 01 Apr 2024 16:17:04 +0300 Message-Id: <86ttkl9q9b.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: braungb88@HIDDEN In-Reply-To: <86wmph9u1i.fsf@HIDDEN> (message from Eli Zaretskii on Mon, 01 Apr 2024 14:55:21 +0300) Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs References: <2318820.ElGaqSPkdT@gabor> <86wmph9u1i.fsf@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70122 Cc: 70122 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > Cc: 70122 <at> debbugs.gnu.org > Date: Mon, 01 Apr 2024 14:55:21 +0300 > From: Eli Zaretskii <eliz@HIDDEN> > > > Please find attached a patch to transpose-regions > > with added tests. (The patch intends to fix typos: > > makes sure lengths in bytes and characters are not confused. > > Thanks, but could you please show the minimal change required to fix > just the particular problem with this scenario (and perhaps explain > the reason for the crash in words), without any cleanup and > typo/confusion fixes? That would make it easier to review the patch, > whereas with what you sent, it is hard to understand what exactly is > being fixed. I came up with the patch below. The problem is that len_mid, which is a difference between byte positions, was sometimes used in calls that expect differences between character positions instead. The patch below passes both your test and the already-existing tests in test/src/editfns-tests.el. WDYT? > > One case (likely for optimization only) has been removed, > > seemed too much trouble to get it right.) > > If you explain the reason for the crash, perhaps we could leave the > optimization alone. I found that len_mid was not used in that branch, so we can leave it alone. Here's the patch: diff --git a/src/editfns.c b/src/editfns.c index 4ccf765..124fd47 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -4677,7 +4677,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, modify_text (start1, end2); record_change (start1, (end2 - start1)); tmp_interval1 = copy_intervals (cur_intv, start1, len1); - tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid); + tmp_interval_mid = copy_intervals (cur_intv, end1, + start2 - (start1 + len1)); tmp_interval2 = copy_intervals (cur_intv, start2, len2); tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0); @@ -4697,7 +4698,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, graft_intervals_into_buffer (tmp_interval1, end2 - len1, len1, current_buffer, 0); graft_intervals_into_buffer (tmp_interval_mid, start1 + len2, - len_mid, current_buffer, 0); + start2 - (start1 + len1), + current_buffer, 0); graft_intervals_into_buffer (tmp_interval2, start1, len2, current_buffer, 0); } @@ -4710,7 +4712,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, modify_text (start1, end2); tmp_interval1 = copy_intervals (cur_intv, start1, len1); - tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid); + tmp_interval_mid = copy_intervals (cur_intv, end1, + start2 - (start1 + len1)); tmp_interval2 = copy_intervals (cur_intv, start2, len2); tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0); @@ -4730,7 +4733,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, graft_intervals_into_buffer (tmp_interval1, end2 - len1, len1, current_buffer, 0); graft_intervals_into_buffer (tmp_interval_mid, start1 + len2, - len_mid, current_buffer, 0); + start2 - (start1 + len1), + current_buffer, 0); graft_intervals_into_buffer (tmp_interval2, start1, len2, current_buffer, 0); }
bug-gnu-emacs@HIDDEN
:bug#70122
; Package emacs
.
Full text available.Received: (at 70122) by debbugs.gnu.org; 1 Apr 2024 11:55:39 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 01 07:55:39 2024 Received: from localhost ([127.0.0.1]:49758 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rrGGI-0002Zc-Qh for submit <at> debbugs.gnu.org; Mon, 01 Apr 2024 07:55:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60646) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rrGGG-0002ZP-2n for 70122 <at> debbugs.gnu.org; Mon, 01 Apr 2024 07:55:37 -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 1rrGG7-0000tD-Fi; Mon, 01 Apr 2024 07:55: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=t1CcODlV/5iT0fU8eZBy9p2Q04mWBFFim7qWuoafubE=; b=SCj8Rduv1MUR8RRW8osw ScBclKEaHCntkA4GvVBTGtkagBqQbuul6u+LcnVj6sgGVSgWIT9Y7N8g554zD9JqMFpzI8PjfRbc2 uJ2y5zn4Zloy6sfSHdQTjIGtRQUGQmQre6SIebLiqP7ZBcLxvXGNHEA+Pe4A3rgVWw50aZgsMD8oe ixzziOX9XZPzOxrIvJA3ljGMqamcup8VahGzPrnj2GkM75Ny1Dpl61iZKy/kZEF1d/4/I24Lb4SAS nCeDHNHrHPYRCYzPQJqGakioIH31Qi+k/78A04rI7OFMxDt4FK8+aU8u6WLRcMO2+diH0+e/iE8RI VoFqN3ByUbJatg==; Date: Mon, 01 Apr 2024 14:55:21 +0300 Message-Id: <86wmph9u1i.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Braun =?utf-8?Q?G=C3=A1bor?= <braungb88@HIDDEN> In-Reply-To: <2318820.ElGaqSPkdT@gabor> (message from Braun =?utf-8?Q?G?= =?utf-8?Q?=C3=A1bor?= on Mon, 01 Apr 2024 12:02:35 +0200) Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs References: <2318820.ElGaqSPkdT@gabor> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70122 Cc: 70122 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: Braun Gábor <braungb88@HIDDEN> > Date: Mon, 01 Apr 2024 12:02:35 +0200 > > I have the following file: > > File ~/.emacs.d/trans-regions-bug.el: > > (with-temp-buffer > (insert (propertize "a" 'face 'font-lock-variable-name-face)) > (insert ":\n") > (insert (propertize "b" 'face 'font-lock-variable-name-face)) > (insert ": \x2113\x2080\n") > (insert (propertize "v" 'face 'font-lock-variable-name-face)) > (insert ": scaling\n") > ;; Move last line to the beginning > (transpose-regions 1 1 10 21)) > > End of file ~/.emacs.d/trans-regions-bug.el: > > > After building Emacs as described in the INSTALL file, the following > command crashes Emacs: > > src/emacs -Q --batch -l ~/.emacs.d/trans-regions-bug.el > > The following appears: > > Fatal error 11: Segmentation fault > > > See below for debugging information. > > Please find attached a patch to transpose-regions > with added tests. (The patch intends to fix typos: > makes sure lengths in bytes and characters are not confused. Thanks, but could you please show the minimal change required to fix just the particular problem with this scenario (and perhaps explain the reason for the crash in words), without any cleanup and typo/confusion fixes? That would make it easier to review the patch, whereas with what you sent, it is hard to understand what exactly is being fixed. > One case (likely for optimization only) has been removed, > seemed too much trouble to get it right.) If you explain the reason for the crash, perhaps we could leave the optimization alone.
bug-gnu-emacs@HIDDEN
:bug#70122
; Package emacs
.
Full text available.Received: (at submit) by debbugs.gnu.org; 1 Apr 2024 10:03:31 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 01 06:03:31 2024 Received: from localhost ([127.0.0.1]:49597 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rrEVl-0004b2-OW for submit <at> debbugs.gnu.org; Mon, 01 Apr 2024 06:03:31 -0400 Received: from lists.gnu.org ([2001:470:142::17]:45518) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <braungb88@HIDDEN>) id 1rrEVh-0004al-So for submit <at> debbugs.gnu.org; Mon, 01 Apr 2024 06:03:27 -0400 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 <braungb88@HIDDEN>) id 1rrEVX-000771-Jb for bug-gnu-emacs@HIDDEN; Mon, 01 Apr 2024 06:03:16 -0400 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <braungb88@HIDDEN>) id 1rrEVS-0002o3-9w for bug-gnu-emacs@HIDDEN; Mon, 01 Apr 2024 06:03:14 -0400 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-a4715d4c2cbso503324366b.1 for <bug-gnu-emacs@HIDDEN>; Mon, 01 Apr 2024 03:03:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711965788; x=1712570588; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=LVQ8zYiM5gyw4Zi0IATmg3sD1TLWzRA204wrKMKxExE=; b=UiUWkk8eMjP1qRIxITc/dwCfIaP0Ihs7MkxoMv53A++YML/5tovw5SyFexd0MrbYvF BImkEoumhcFUgYyXwGJC6jDOZFN+lXexvYLBnNo5sb0sWW08FJfgK4EsiFnbueTMrDBF 3s5pV7F52HgCF/n+h3SRTK8lfu477BlRpJ0WmRbaDHI518WEo0oG1IVPZFOYuOu5zjEJ oDeg1Awr6LNQHoMTaMEdg7UdOus3GxYyonEwVuRSlzsu+J/PqGJZXo/tMzzdCjboMrxx akDGReVmBihdA3DHE6hsNHXk4EQ6fQ4S3xF8mIZ5Nt5Uo+8sOPWAeeopRexDiUuGO2/B Xrcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711965788; x=1712570588; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LVQ8zYiM5gyw4Zi0IATmg3sD1TLWzRA204wrKMKxExE=; b=BlSSVCHccWp1jLBD7z28a+iud+1C/g6ISHoDJ4xhfuBa60/0nKseV1Gr/0z8DBFxAf Ir0zalBA9KpoOSbodNhtiniWf1sfcT3scnfeU4R6mgW5CxX8yVaz9h9SU5iB26EGf3yK K06SqLAsz7WAJZ2H3hvCA+psIpGs6gGjOOh4yNLiAToXTOJMcSdiRRW+gA4osE6Nnzj3 3nGRcEtryjfi6FhPAhJx+TdOEG7m67S736nqmsbZA58t3oiVKBa2+yio7RFcP8YR7AIN oXEatLCUkO3eFyg1TFG6pZWwuSiUxOZ/kBRLt7SaK5TTWxETO8c4jDh1fkazp1kSSrZ/ cFjw== X-Gm-Message-State: AOJu0YzX9KmMoLypNp5u5xdaWiQO/ao+BBOq8UZPML3piLRVTwR92I9F TIbFvj9WOORt+Wue8hIJu9N2n7juhGVHIe+W5yieoK+pmir+OU05Z3IpTpfA X-Google-Smtp-Source: AGHT+IG4/hqpJ5Y7diVNpff3AjGxSd2YGXmzHk9MXkdgkhp8nHZxeetFyYyUYg0RA+K5pelxfUpp7w== X-Received: by 2002:a17:907:8686:b0:a4e:5b16:e2dc with SMTP id qa6-20020a170907868600b00a4e5b16e2dcmr2918800ejc.4.1711965788250; Mon, 01 Apr 2024 03:03:08 -0700 (PDT) Received: from gabor.localnet ([2001:9e8:1577:be00:e9eb:aba6:d290:d015]) by smtp.gmail.com with ESMTPSA id bn25-20020a170906c0d900b00a4e23400982sm4994570ejb.95.2024.04.01.03.03.06 for <bug-gnu-emacs@HIDDEN> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Apr 2024 03:03:07 -0700 (PDT) From: Braun =?ISO-8859-1?Q?G=E1bor?= <braungb88@HIDDEN> To: bug-gnu-emacs@HIDDEN Subject: 29.3.50; transpose-regions can crash Emacs Date: Mon, 01 Apr 2024 12:02:35 +0200 Message-ID: <2318820.ElGaqSPkdT@gabor> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart4879618.GXAFRqVoOG" Content-Transfer-Encoding: 7Bit Received-SPF: pass client-ip=2a00:1450:4864:20::62f; envelope-from=braungb88@HIDDEN; helo=mail-ej1-x62f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.2 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.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 the administrator of that system for details. Content preview: Hi, I have the following file: File ~/.emacs.d/trans-regions-bug.el: Content analysis details: (1.2 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (braungb88[at]gmail.com) 0.2 FREEMAIL_ENVFROM_END_DIGIT Envelope-from freemail username ends in digit (braungb88[at]gmail.com) 1.0 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) -0.0 SPF_HELO_PASS SPF: HELO matches SPF record X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: 0.2 (/) This is a multi-part message in MIME format. --nextPart4879618.GXAFRqVoOG Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8" SGksCgpJIGhhdmUgdGhlIGZvbGxvd2luZyBmaWxlOgoKRmlsZSB+Ly5lbWFjcy5kL3RyYW5zLXJl Z2lvbnMtYnVnLmVsOgoKKHdpdGgtdGVtcC1idWZmZXIKICAoaW5zZXJ0IChwcm9wZXJ0aXplICJh IiAnZmFjZSAnZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkpCiAgKGluc2VydCAiOlxuIikK ICAoaW5zZXJ0IChwcm9wZXJ0aXplICJiIiAnZmFjZSAnZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUt ZmFjZSkpCiAgKGluc2VydCAiOiBceDIxMTNceDIwODBcbiIpCiAgKGluc2VydCAocHJvcGVydGl6 ZSAidiIgJ2ZhY2UgJ2ZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpKQogIChpbnNlcnQgIjog c2NhbGluZ1xuIikKICA7OyBNb3ZlIGxhc3QgbGluZSB0byB0aGUgYmVnaW5uaW5nCiAgKHRyYW5z cG9zZS1yZWdpb25zIDEgMSAxMCAyMSkpCgpFbmQgb2YgZmlsZSB+Ly5lbWFjcy5kL3RyYW5zLXJl Z2lvbnMtYnVnLmVsOgoKCkFmdGVyIGJ1aWxkaW5nIEVtYWNzIGFzIGRlc2NyaWJlZCBpbiB0aGUg SU5TVEFMTCBmaWxlLCB0aGUgZm9sbG93aW5nCmNvbW1hbmQgY3Jhc2hlcyBFbWFjczoKCiAgc3Jj L2VtYWNzIC1RIC0tYmF0Y2ggLWwgfi8uZW1hY3MuZC90cmFucy1yZWdpb25zLWJ1Zy5lbAoKVGhl IGZvbGxvd2luZyBhcHBlYXJzOgoKRmF0YWwgZXJyb3IgMTE6IFNlZ21lbnRhdGlvbiBmYXVsdAoK ClNlZSBiZWxvdyBmb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uLgoKUGxlYXNlIGZpbmQgYXR0YWNo ZWQgYSBwYXRjaCB0byB0cmFuc3Bvc2UtcmVnaW9ucwp3aXRoIGFkZGVkIHRlc3RzLiAgKFRoZSBw YXRjaCBpbnRlbmRzIHRvIGZpeCB0eXBvczoKbWFrZXMgc3VyZSBsZW5ndGhzIGluIGJ5dGVzIGFu ZCBjaGFyYWN0ZXJzIGFyZSBub3QgY29uZnVzZWQuCk9uZSBjYXNlIChsaWtlbHkgZm9yIG9wdGlt aXphdGlvbiBvbmx5KSBoYXMgYmVlbiByZW1vdmVkLApzZWVtZWQgdG9vIG11Y2ggdHJvdWJsZSB0 byBnZXQgaXQgcmlnaHQuKQoKCmdkYiBzZXNzaW9uIHdpdGggbm9uLXNlc3Npb24gc3BlY2lmaWMg bWF0ZXJpYWwgKGhlbHAsIGNvcHlyaWdodC4uLikgcmVtb3ZlZDoKCkN1cnJlbnQgZGlyZWN0b3J5 IGlzIC9ob21lL2dhYm9yL3NyYy9idWlsZC9lbWFjcy0yOS4zL3NyYy8KR05VIGdkYiAoRGViaWFu IDEzLjEtMykgMTMuMQpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvaG9tZS9nYWJvci9zcmMvYnVpbGQv ZW1hY3MtMjkuMy9zcmMvZW1hY3MuLi4KU0lHSU5UIGlzIHVzZWQgYnkgdGhlIGRlYnVnZ2VyLgpB cmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIGl0PyAoeSBvciBuKSBbYW5zd2VyZWQgWTsg aW5wdXQgbm90IGZyb20gdGVybWluYWxdCkRJU1BMQVkgPSA6MApURVJNID0gZHVtYgpCcmVha3Bv aW50IDIgYXQgMHgxM2E0ODA6IGZpbGUgLi4vLi4vLi4vZW1hY3Mvc3JjL3h0ZXJtLmMsIGxpbmUg MjYxMzYuCi5nZGJpbml0OjE6IEVycm9yIGluIHNvdXJjZWQgY29tbWFuZCBmaWxlOgovaG9tZS9n YWJvci9zcmMvYnVpbGQvZW1hY3MtMjkuMy8uLi8uLi9lbWFjcy9zcmMvLmdkYmluaXQ6MTM3NTog RXJyb3IgaW4gc291cmNlZCBjb21tYW5kIGZpbGU6ClNjcmlwdGluZyBpbiB0aGUgIlB5dGhvbiIg bGFuZ3VhZ2UgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGNvcHkgb2YgR0RCLgpEb3dubG9hZGlu ZyBzb3VyY2UgZmlsZSAvaG9tZS9nYWJvci9zcmMvYnVpbGQvZW1hY3MtMjkuMy9zcmMvPGJ1aWx0 LWluPi4uLgooZ2RiKSBydW4KU3RhcnRpbmcgcHJvZ3JhbTogL2hvbWUvZ2Fib3Ivc3JjL2J1aWxk L2VtYWNzLTI5LjMvc3JjL2VtYWNzIC1RIC0tYmF0Y2ggLWwgXH4vLmVtYWNzLmQvdHJhbnMtcmVn aW9ucy1idWcuZWwKRG93bmxvYWRpbmcgc2VwYXJhdGUgZGVidWcgaW5mbyBmb3IgL2xpYjY0L2xk LWxpbnV4LXg4Ni02NC5zby4yLi4uCkRvd25sb2FkaW5nIHNlcGFyYXRlIGRlYnVnIGluZm8gZm9y IHN5c3RlbS1zdXBwbGllZCBEU08gYXQgMHg3ZmZmZjdmYzkwMDAuLi4KRG93bmxvYWRpbmcgc2Vw YXJhdGUgZGVidWcgaW5mbyBmb3IgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmRidXMtMS5zby4z Li4uCkRvd25sb2FkaW5nIHNlcGFyYXRlIGRlYnVnIGluZm8gZm9yIC9saWIveDg2XzY0LWxpbnV4 LWdudS9saWJjLnNvLjYuLi4KW1RocmVhZCBkZWJ1Z2dpbmcgdXNpbmcgbGlidGhyZWFkX2RiIGVu YWJsZWRdClVzaW5nIGhvc3QgbGlidGhyZWFkX2RiIGxpYnJhcnkgIi9saWIveDg2XzY0LWxpbnV4 LWdudS9saWJ0aHJlYWRfZGIuc28uMSIuCkRvd25sb2FkaW5nIHNlcGFyYXRlIGRlYnVnIGluZm8g Zm9yIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvbGliZnJpYmlkaS5zby4wLi4uCgpQcm9ncmFt IHJlY2VpdmVkIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHQuCjB4MDAwMDU1NTU1 NTdjNDdiMyBpbiBncmFmdF9pbnRlcnZhbHNfaW50b19idWZmZXIgKHNvdXJjZT1zb3VyY2VAZW50 cnk9MHg1NTU1NTVlMmI1NjgsIHBvc2l0aW9uPXBvc2l0aW9uQGVudHJ5PTEyLCBsZW5ndGg9bGVu Z3RoQGVudHJ5PTEzLCBidWZmZXI9MHg1NTU1NTVlZDExNzAsIGluaGVyaXQ9aW5oZXJpdEBlbnRy eT1mYWxzZSkgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2ludGVydmFscy5jOjE2NjkKMTY2OQkgICAg ICBpZiAoTEVOR1RIIChvdmVyKSAtIG92ZXJfdXNlZCA8IExFTkdUSCAodW5kZXIpKQooZ2RiKSBi dCBmdWxsCiMwICAweDAwMDA1NTU1NTU3YzQ3YjMgaW4gZ3JhZnRfaW50ZXJ2YWxzX2ludG9fYnVm ZmVyIChzb3VyY2U9c291cmNlQGVudHJ5PTB4NTU1NTU1ZTJiNTY4LCBwb3NpdGlvbj1wb3NpdGlv bkBlbnRyeT0xMiwgbGVuZ3RoPWxlbmd0aEBlbnRyeT0xMywgYnVmZmVyPTB4NTU1NTU1ZWQxMTcw LCBpbmhlcml0PWluaGVyaXRAZW50cnk9ZmFsc2UpIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9pbnRl cnZhbHMuYzoxNjY5CiAgICAgICAgdHJlZSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHVuZGVy ID0gMHgwCiAgICAgICAgb3ZlciA9IDB4NTU1NTU1ZTJiNWEwCiAgICAgICAgdGhpcyA9IDxvcHRp bWl6ZWQgb3V0PgogICAgICAgIG92ZXJfdXNlZCA9IDAKIzEgIDB4MDAwMDU1NTU1NTc1MTk0YiBp biBGdHJhbnNwb3NlX3JlZ2lvbnMgKHN0YXJ0cjE9PG9wdGltaXplZCBvdXQ+LCBlbmRyMT08b3B0 aW1pemVkIG91dD4sIHN0YXJ0cjI9PG9wdGltaXplZCBvdXQ+LCBlbmRyMj08b3B0aW1pemVkIG91 dD4sIGxlYXZlX21hcmtlcnM9MHgwKSBhdCAuLi8uLi8uLi9lbWFjcy9zcmMvZWRpdGZucy5jOjQ3 NTEKICAgICAgICBzYV9hdmFpbCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHNhX2NvdW50ID0g PG9wdGltaXplZCBvdXQ+CiAgICAgICAgc3RhcnQxID0gMQogICAgICAgIGVuZDEgPSAxCiAgICAg ICAgc3RhcnQyID0gMTAKICAgICAgICBlbmQyID0gMjEKICAgICAgICBzdGFydDFfYnl0ZSA9IDxv cHRpbWl6ZWQgb3V0PgogICAgICAgIHN0YXJ0Ml9ieXRlID0gMTQKICAgICAgICBsZW4xX2J5dGUg PSAwCiAgICAgICAgbGVuMl9ieXRlID0gMTEKICAgICAgICBlbmQyX2J5dGUgPSAyNQogICAgICAg IGdhcCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGxlbjEgPSAwCiAgICAgICAgbGVuX21pZCA9 IDEzCiAgICAgICAgbGVuMiA9IDExCiAgICAgICAgc3RhcnQxX2FkZHIgPSA8b3B0aW1pemVkIG91 dD4KICAgICAgICBzdGFydDJfYWRkciA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHRlbXAgPSAw eDdmZmZmZmZmZDgzMCAidjogc2NhbGluZ1xuVVVVIgogICAgICAgIGN1cl9pbnR2ID0gPG9wdGlt aXplZCBvdXQ+CiAgICAgICAgdG1wX2ludGVydmFsMSA9IDB4MAogICAgICAgIHRtcF9pbnRlcnZh bF9taWQgPSAweDU1NTU1NWUyYjU2OAogICAgICAgIHRtcF9pbnRlcnZhbDIgPSAweDU1NTU1NWUy YjY0OAogICAgICAgIHRtcF9pbnRlcnZhbDMgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBidWYg PSA8b3B0aW1pemVkIG91dD4KIzIgIDB4MDAwMDU1NTU1NTc2MDE0NyBpbiBldmFsX3N1YiAoZm9y bT08b3B0aW1pemVkIG91dD4pIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MjUxNgogICAg ICAgIGkgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBtYXhhcmdzID0gNQogICAgICAgIGFyZ3Nf bGVmdCA9IDB4MAogICAgICAgIG51bWFyZ3MgPSA0CiAgICAgICAgb3JpZ2luYWxfZnVuID0gPG9w dGltaXplZCBvdXQ+CiAgICAgICAgb3JpZ2luYWxfYXJncyA9IDB4NTU1NTU1ZWI0OGYzCiAgICAg ICAgY291bnQgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmdW4gPSA8b3B0aW1pemVkIG91dD4K ICAgICAgICB2YWwgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmdW5jYXIgPSA8b3B0aW1pemVk IG91dD4KICAgICAgICBhcmd2YWxzID0gezB4NiwgMHg2LCAweDJhLCAweDU2LCAweDAsIDB4MTAw MDAwMDAxMCwgMHgxMDAwMDAwMDAzLCAweGUwMDAwMDAxMH0KICAgICAgICByZXRyeSA9IDxvcHRp bWl6ZWQgb3V0PgojMyAgMHgwMDAwNTU1NTU1NzYwNDNkIGluIEZwcm9nbiAoYm9keT0weDApIGF0 IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6NDM2CiAgICAgICAgZm9ybSA9IDxvcHRpbWl6ZWQg b3V0PgogICAgICAgIHZhbCA9IDB4MAojNCAgMHgwMDAwNTU1NTU1NzVmZWY3IGluIGV2YWxfc3Vi IChmb3JtPTxvcHRpbWl6ZWQgb3V0PikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoyNDUz CiAgICAgICAgYXJnc19sZWZ0ID0gMHg1NTU1NTVlYjQ5YjMKICAgICAgICBudW1hcmdzID0gNwog ICAgICAgIG9yaWdpbmFsX2Z1biA9IDB4ZDY1MAogICAgICAgIG9yaWdpbmFsX2FyZ3MgPSAweDU1 NTU1NWViNDliMwogICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuID0g PG9wdGltaXplZCBvdXQ+CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVu Y2FyID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYXJndmFscyA9IHsweDU1NTU1NWVhZTQ0MCwg MHg3ZmZmZjFhN2U3MDgsIDB4N2ZmZmYxYTdlNzA4LCAweDU1NTU1NWQ3ZTc4MCA8bGlzcHN5bT4s IDB4MSwgMHg1NTU1NTU3NDg3MzkgPGZpbmRfc3ltYm9sX3ZhbHVlKzE4NT4sIDB4MmFhYTliZGMy YjUwLCAweDU1NTU1NTc0ODc3OSA8RnN5bWJvbF92YWx1ZSs5Pn0KICAgICAgICByZXRyeSA9IDxv cHRpbWl6ZWQgb3V0PgojNSAgMHgwMDAwNTU1NTU1NzYyMTY3IGluIEZ1bndpbmRfcHJvdGVjdCAo YXJncz0weDU1NTU1NWViNGE3MykgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2xpc3AuaDoxNTIzCiAg ICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgY291bnQgPSA8b3B0aW1pemVkIG91 dD4KIzYgIDB4MDAwMDU1NTU1NTc1ZmVmNyBpbiBldmFsX3N1YiAoZm9ybT08b3B0aW1pemVkIG91 dD4pIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MjQ1MwogICAgICAgIGFyZ3NfbGVmdCA9 IDB4NTU1NTU1ZWI0YTczCiAgICAgICAgbnVtYXJncyA9IDIKICAgICAgICBvcmlnaW5hbF9mdW4g PSAweDJhYWE5YmQyNTY4MAogICAgICAgIG9yaWdpbmFsX2FyZ3MgPSAweDU1NTU1NWViNGE3Mwog ICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuID0gPG9wdGltaXplZCBv dXQ+CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuY2FyID0gPG9wdGlt aXplZCBvdXQ+CiAgICAgICAgYXJndmFscyA9IHsweDU1NTU1NWVkMTE3NSwgMHgwLCAweDdmZmZm ZmZmZGJjMCwgMHgzMCwgMHgyLCAweDdmZmZmZmZmZGI1MCwgMHg0NjAsIDB4NTU1NTU1NzYxNjRj IDxhcHBseV9sYW1iZGErMjA0Pn0KICAgICAgICByZXRyeSA9IDxvcHRpbWl6ZWQgb3V0PgojNyAg MHgwMDAwNTU1NTU1NzYwNDNkIGluIEZwcm9nbiAoYm9keT0weDAsIGJvZHlAZW50cnk9MHg1NTU1 NTVlYjRiZDMpIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6NDM2CiAgICAgICAgZm9ybSA9 IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHZhbCA9IDB4NTU1NTU1ZWQxMTc1CiM4ICAweDAwMDA1 NTU1NTU3NGNhZTcgaW4gRnNhdmVfY3VycmVudF9idWZmZXIgKGFyZ3M9MHg1NTU1NTVlYjRiZDMp IGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9lZGl0Zm5zLmM6ODc1CiAgICAgICAgY291bnQgPSA8b3B0 aW1pemVkIG91dD4KIzkgIDB4MDAwMDU1NTU1NTc1ZmVmNyBpbiBldmFsX3N1YiAoZm9ybT08b3B0 aW1pemVkIG91dD4pIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MjQ1MwogICAgICAgIGFy Z3NfbGVmdCA9IDB4NTU1NTU1ZWI0YmQzCiAgICAgICAgbnVtYXJncyA9IDIKICAgICAgICBvcmln aW5hbF9mdW4gPSAweDJhYWE5YmQyNTVjMAogICAgICAgIG9yaWdpbmFsX2FyZ3MgPSAweDU1NTU1 NWViNGJkMwogICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuID0gPG9w dGltaXplZCBvdXQ+CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuY2Fy ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYXJndmFscyA9IHsweDdmZmZmMWE3ZTcwZCwgMHg1 NTU1NTU3NWMxZjIgPHVuYmluZF90bys1OTQ+LCAweDU1NTU1NWViNDAwMCwgMHg1NTU1NTU3NmEz YTQgPEZuY29uYysyNDQ+LCAweGIsIDB4ZDUwMCwgMHgwLCAweDdmZmZmMWE3ZTcwZH0KICAgICAg ICByZXRyeSA9IDxvcHRpbWl6ZWQgb3V0PgojMTAgMHgwMDAwNTU1NTU1NzYxYmU1IGluIEZwcm9n biAoYm9keT0weDApIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6NDM2CiAgICAgICAgZm9y bSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHZhbCA9IDB4MAogICAgICAgIHZhbCA9IDxvcHRp bWl6ZWQgb3V0PgogICAgICAgIGZvcm0gPSA8b3B0aW1pemVkIG91dD4KIzExIEZsZXQgKGFyZ3M9 MHg1NTU1NTVlYjQwYTMpIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MTAyNgogICAgICAg IHRlbXBzID0gMHg3ZmZmZmZmZmRjODAKICAgICAgICB0ZW0gPSA8b3B0aW1pemVkIG91dD4KICAg ICAgICBsZXhlbnYgPSAweDAKICAgICAgICBlbHQgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBj b3VudCA9IHsKICAgICAgICAgIGJ5dGVzID0gMTEyMAogICAgICAgIH0KICAgICAgICBhcmdudW0g PSA8b3B0aW1pemVkIG91dD4KICAgICAgICBzYV9hdmFpbCA9IDxvcHRpbWl6ZWQgb3V0PgogICAg ICAgIHNhX2NvdW50ID0gewogICAgICAgICAgYnl0ZXMgPSAxMTIwCiAgICAgICAgfQogICAgICAg IHZhcmxpc3QgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB2YXJsaXN0X2xlbiA9IDxvcHRpbWl6 ZWQgb3V0PgogICAgICAgIG52YXJzID0gPG9wdGltaXplZCBvdXQ+CiMxMiAweDAwMDA1NTU1NTU3 NWZlZjcgaW4gZXZhbF9zdWIgKGZvcm09PG9wdGltaXplZCBvdXQ+KSBhdCAuLi8uLi8uLi9lbWFj cy9zcmMvZXZhbC5jOjI0NTMKICAgICAgICBhcmdzX2xlZnQgPSAweDU1NTU1NWViNDBhMwogICAg ICAgIG51bWFyZ3MgPSAyCiAgICAgICAgb3JpZ2luYWxfZnVuID0gMHhhNTYwCiAgICAgICAgb3Jp Z2luYWxfYXJncyA9IDB4NTU1NTU1ZWI0MGEzCiAgICAgICAgY291bnQgPSA8b3B0aW1pemVkIG91 dD4KICAgICAgICBmdW4gPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB2YWwgPSA8b3B0aW1pemVk IG91dD4KICAgICAgICBmdW5jYXIgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBhcmd2YWxzID0g ezB4MCwgMHg1NTU1NTU3ODY5NTQgPHJlYWRldmFsbG9vcF9lYWdlcl9leHBhbmRfZXZhbCszNDA+ LCAweDI5LCAweDEsIDB4MmFhYTljMGQ3NjkwLCAweDU1NTU1NWViNGFlMywgMHgzMCwgMHg3ZmZm ZmZmZmRlMDB9CiAgICAgICAgcmV0cnkgPSA8b3B0aW1pemVkIG91dD4KIzEzIDB4MDAwMDU1NTU1 NTc4ZTg2OSBpbiByZWFkZXZhbGxvb3AgKHJlYWRjaGFyZnVuPXJlYWRjaGFyZnVuQGVudHJ5PTB4 NTU1NTU1ZWM2ZjhkLCBpbmZpbGUwPWluZmlsZTBAZW50cnk9MHgwLCBzb3VyY2VuYW1lPXNvdXJj ZW5hbWVAZW50cnk9MHg1NTU1NTVlY2ZkMTQsIHByaW50ZmxhZz1wcmludGZsYWdAZW50cnk9ZmFs c2UsIHVuaWJ5dGU9dW5pYnl0ZUBlbnRyeT0weDAsIHJlYWRmdW49cmVhZGZ1bkBlbnRyeT0weDAs IHN0YXJ0PTB4MCwgZW5kPTxvcHRpbWl6ZWQgb3V0PikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2xy ZWFkLmM6MjM0OAogICAgICAgIGNvdW50MSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGMgPSA8 b3B0aW1pemVkIG91dD4KICAgICAgICB2YWwgPSAweDU1NTU1NWViNGUxMwogICAgICAgIGNvdW50 ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYiA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGNv bnRpbnVlX3JlYWRpbmdfcCA9IHRydWUKICAgICAgICBsZXhfYm91bmQgPSA8b3B0aW1pemVkIG91 dD4KICAgICAgICB3aG9sZV9idWZmZXIgPSB0cnVlCiAgICAgICAgZmlyc3Rfc2V4cCA9IDxvcHRp bWl6ZWQgb3V0PgogICAgICAgIG1hY3JvZXhwYW5kID0gMHgyYWFhOWMwZDc2OTAKIzE0IDB4MDAw MDU1NTU1NTc4Zjk2NyBpbiBGZXZhbF9idWZmZXIgKGJ1ZmZlcj08b3B0aW1pemVkIG91dD4sIHBy aW50ZmxhZz0weDAsIGZpbGVuYW1lPTB4NTU1NTU1ZWNmZDE0LCB1bmlieXRlPTB4MCwgZG9fYWxs b3dfcHJpbnQ9PG9wdGltaXplZCBvdXQ+KSBhdCAuLi8uLi8uLi9lbWFjcy9zcmMvbHJlYWQuYzoy NDIxCiAgICAgICAgY291bnQgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB0ZW0gPSA8b3B0aW1p emVkIG91dD4KICAgICAgICBidWYgPSAweDU1NTU1NWVjNmY4ZAojMTUgMHgwMDAwNTU1NTU1N2E0 ZTkyIGluIGV4ZWNfYnl0ZV9jb2RlIChmdW49PG9wdGltaXplZCBvdXQ+LCBhcmdzX3RlbXBsYXRl PTxvcHRpbWl6ZWQgb3V0PiwgbmFyZ3M9PG9wdGltaXplZCBvdXQ+LCBhcmdzPTxvcHRpbWl6ZWQg b3V0PikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2J5dGVjb2RlLmM6ODA5CiAgICAgICAgY2FsbF9u YXJncyA9IDUKICAgICAgICBjYWxsX2Z1biA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGNvdW50 MSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHRlbXBsYXRlID0gPG9wdGltaXplZCBvdXQ+CiAg ICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgY2FsbF9hcmdzID0gMHg3ZmZmZjEx ZmYyOTAKICAgICAgICBvcmlnaW5hbF9mdW4gPSAweDJhYWE5YmZlOWQ0MAogICAgICAgIGJ5dGVj b2RlID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgb3AgPSA1CiAgICAgICAgdHlwZSA9IDxvcHRp bWl6ZWQgb3V0PgogICAgICAgIHRhcmdldHMgPSB7MHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9j b2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNTI3ZCA8ZXhlY19ieXRlX2NvZGUrMTk4MT4sIDB4NTU1 NTU1N2E1Mjc4IDxleGVjX2J5dGVfY29kZSsxOTc2PiwgMHg1NTU1NTU3YTUyNzMgPGV4ZWNfYnl0 ZV9jb2RlKzE5NzE+LCAweDU1NTU1NTdhNGM4ZSA8ZXhlY19ieXRlX2NvZGUrNDYyPiwgMHg1NTU1 NTU3YTRjOGUgPGV4ZWNfYnl0ZV9jb2RlKzQ2Mj4sIDB4NTU1NTU1N2E1MjNmIDxleGVjX2J5dGVf Y29kZSsxOTE5PiwgMHg1NTU1NTU3YTUyMGIgPGV4ZWNfYnl0ZV9jb2RlKzE4Njc+LCAweDU1NTU1 NTdhNTllMSA8ZXhlY19ieXRlX2NvZGUrMzg3Mz4sIDB4NTU1NTU1N2E1OWRjIDxleGVjX2J5dGVf Y29kZSszODY4PiwgMHg1NTU1NTU3YTU5ZDcgPGV4ZWNfYnl0ZV9jb2RlKzM4NjM+LCAweDU1NTU1 NTdhNTlkMiA8ZXhlY19ieXRlX2NvZGUrMzg1OD4sIDB4NTU1NTU1N2E0Y2JkIDxleGVjX2J5dGVf Y29kZSs1MDk+LCAweDU1NTU1NTdhNGNjMCA8ZXhlY19ieXRlX2NvZGUrNTEyPiwgMHg1NTU1NTU3 YTU5YzQgPGV4ZWNfYnl0ZV9jb2RlKzM4NDQ+LCAweDU1NTU1NTdhNTllNiA8ZXhlY19ieXRlX2Nv ZGUrMzg3OD4sIDB4NTU1NTU1N2E1YTcxIDxleGVjX2J5dGVfY29kZSs0MDE3PiwgMHg1NTU1NTU3 YTVhNmMgPGV4ZWNfYnl0ZV9jb2RlKzQwMTI+LCAweDU1NTU1NTdhNWE2NyA8ZXhlY19ieXRlX2Nv ZGUrNDAwNz4sIDB4NTU1NTU1N2E1YTYyIDxleGVjX2J5dGVfY29kZSs0MDAyPiwgMHg1NTU1NTU3 YTRjMWEgPGV4ZWNfYnl0ZV9jb2RlKzM0Nj4sIDB4NTU1NTU1N2E0YzIwIDxleGVjX2J5dGVfY29k ZSszNTI+LCAweDU1NTU1NTdhNWE0NiA8ZXhlY19ieXRlX2NvZGUrMzk3ND4sIDB4NTU1NTU1N2E1 YTU0IDxleGVjX2J5dGVfY29kZSszOTg4PiwgMHg1NTU1NTU3YTU5ZjkgPGV4ZWNfYnl0ZV9jb2Rl KzM4OTc+LCAweDU1NTU1NTdhNTlmNCA8ZXhlY19ieXRlX2NvZGUrMzg5Mj4sIDB4NTU1NTU1N2E1 ZmI1IDxleGVjX2J5dGVfY29kZSs1MzY1PiwgMHg1NTU1NTU3YTVmYjAgPGV4ZWNfYnl0ZV9jb2Rl KzUzNjA+LCAweDU1NTU1NTdhNGYxYSA8ZXhlY19ieXRlX2NvZGUrMTExND4sIDB4NTU1NTU1N2E0 ZjIwIDxleGVjX2J5dGVfY29kZSsxMTIwPiwgMHg1NTU1NTU3YTVhMGMgPGV4ZWNfYnl0ZV9jb2Rl KzM5MTY+LCAweDU1NTU1NTdhNTlmZSA8ZXhlY19ieXRlX2NvZGUrMzkwMj4sIDB4NTU1NTU1N2E1 ZjhmIDxleGVjX2J5dGVfY29kZSs1MzI3PiwgMHg1NTU1NTU3YTVmOGEgPGV4ZWNfYnl0ZV9jb2Rl KzUzMjI+LCAweDU1NTU1NTdhNWY4NSA8ZXhlY19ieXRlX2NvZGUrNTMxNz4sIDB4NTU1NTU1N2E1 ZjgwIDxleGVjX2J5dGVfY29kZSs1MzEyPiwgMHg1NTU1NTU3YTRkMmIgPGV4ZWNfYnl0ZV9jb2Rl KzYxOT4sIDB4NTU1NTU1N2E0ZDMwIDxleGVjX2J5dGVfY29kZSs2MjQ+LCAweDU1NTU1NTdhNWZh MiA8ZXhlY19ieXRlX2NvZGUrNTM0Nj4sIDB4NTU1NTU1N2E1Zjk0IDxleGVjX2J5dGVfY29kZSs1 MzMyPiwgMHg1NTU1NTU3YTVmNWYgPGV4ZWNfYnl0ZV9jb2RlKzUyNzk+LCAweDU1NTU1NTdhNWY1 YSA8ZXhlY19ieXRlX2NvZGUrNTI3ND4sIDB4NTU1NTU1N2E1ZjU1IDxleGVjX2J5dGVfY29kZSs1 MjY5PiwgMHg1NTU1NTU3YTVmNTAgPGV4ZWNfYnl0ZV9jb2RlKzUyNjQ+LCAweDU1NTU1NTdhNGY2 MyA8ZXhlY19ieXRlX2NvZGUrMTE4Nz4sIDB4NTU1NTU1N2E0ZjY4IDxleGVjX2J5dGVfY29kZSsx MTkyPiwgMHg1NTU1NTU3YTVmNzIgPGV4ZWNfYnl0ZV9jb2RlKzUyOTg+LCAweDU1NTU1NTdhNWY2 NCA8ZXhlY19ieXRlX2NvZGUrNTI4ND4sIDB4NTU1NTU1N2E1YmM5IDxleGVjX2J5dGVfY29kZSs0 MzYxPiwgMHg1NTU1NTU3YTViZjYgPGV4ZWNfYnl0ZV9jb2RlKzQ0MDY+LCAweDU1NTU1NTdhNWM2 MCA8ZXhlY19ieXRlX2NvZGUrNDUxMj4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0y MDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1 NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5 dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+ LCAweDU1NTU1NTdhNmRkZiA8ZXhlY19ieXRlX2NvZGUrODk5MT4sIDB4NTU1NTU1N2E2ZDczIDxl eGVjX2J5dGVfY29kZSs4ODgzPiwgMHg1NTU1NTU3YTZkMzcgPGV4ZWNfYnl0ZV9jb2RlKzg4MjM+ LCAweDU1NTU1NTdhNmNmYiA8ZXhlY19ieXRlX2NvZGUrODc2Mz4sIDB4NTU1NTU1N2E2Y2JkIDxl eGVjX2J5dGVfY29kZSs4NzAxPiwgMHg1NTU1NTU3YTVhZTMgPGV4ZWNfYnl0ZV9jb2RlKzQxMzE+ LCAweDU1NTU1NTdhNWFhYSA8ZXhlY19ieXRlX2NvZGUrNDA3ND4sIDB4NTU1NTU1N2E2YzkyIDxl eGVjX2J5dGVfY29kZSs4NjU4PiwgMHg1NTU1NTU3YTViOTUgPGV4ZWNfYnl0ZV9jb2RlKzQzMDk+ LCAweDU1NTU1NTdhNWE3NiA8ZXhlY19ieXRlX2NvZGUrNDAyMj4sIDB4NTU1NTU1N2E2YzU5IDxl eGVjX2J5dGVfY29kZSs4NjAxPiwgMHg1NTU1NTU3YTZjMzAgPGV4ZWNfYnl0ZV9jb2RlKzg1NjA+ LCAweDU1NTU1NTdhNmJmNyA8ZXhlY19ieXRlX2NvZGUrODUwMz4sIDB4NTU1NTU1N2E2YmMxIDxl eGVjX2J5dGVfY29kZSs4NDQ5PiwgMHg1NTU1NTU3YTZiODcgPGV4ZWNfYnl0ZV9jb2RlKzgzOTE+ LCAweDU1NTU1NTdhNmIyMiA8ZXhlY19ieXRlX2NvZGUrODI5MD4sIDB4NTU1NTU1N2E2YWI0IDxl eGVjX2J5dGVfY29kZSs4MTgwPiwgMHg1NTU1NTU3YTZhM2YgPGV4ZWNfYnl0ZV9jb2RlKzgwNjM+ LCAweDU1NTU1NTdhNmExNiA8ZXhlY19ieXRlX2NvZGUrODAyMj4sIDB4NTU1NTU1N2E2OWVkIDxl eGVjX2J5dGVfY29kZSs3OTgxPiwgMHg1NTU1NTU3YTY5YjQgPGV4ZWNfYnl0ZV9jb2RlKzc5MjQ+ LCAweDU1NTU1NTdhNjk3YiA8ZXhlY19ieXRlX2NvZGUrNzg2Nz4sIDB4NTU1NTU1N2E2OTQyIDxl eGVjX2J5dGVfY29kZSs3ODEwPiwgMHg1NTU1NTU3YTY5MDUgPGV4ZWNfYnl0ZV9jb2RlKzc3NDk+ LCAweDU1NTU1NTdhNjhkMiA8ZXhlY19ieXRlX2NvZGUrNzY5OD4sIDB4NTU1NTU1N2E2ODlmIDxl eGVjX2J5dGVfY29kZSs3NjQ3PiwgMHg1NTU1NTU3YTY4NmMgPGV4ZWNfYnl0ZV9jb2RlKzc1OTY+ LCAweDU1NTU1NTdhNjdkYiA8ZXhlY19ieXRlX2NvZGUrNzQ1MT4sIDB4NTU1NTU1N2E2Nzg2IDxl eGVjX2J5dGVfY29kZSs3MzY2PiwgMHg1NTU1NTU3YTY3M2MgPGV4ZWNfYnl0ZV9jb2RlKzcyOTI+ LCAweDU1NTU1NTdhNjZlZiA8ZXhlY19ieXRlX2NvZGUrNzIxNT4sIDB4NTU1NTU1N2E2NmEyIDxl eGVjX2J5dGVfY29kZSs3MTM4PiwgMHg1NTU1NTU3YTY2NTUgPGV4ZWNfYnl0ZV9jb2RlKzcwNjE+ LCAweDU1NTU1NTdhNjYwOCA8ZXhlY19ieXRlX2NvZGUrNjk4ND4sIDB4NTU1NTU1N2E2NWI3IDxl eGVjX2J5dGVfY29kZSs2OTAzPiwgMHg1NTU1NTU3YTY1NjEgPGV4ZWNfYnl0ZV9jb2RlKzY4MTc+ LCAweDU1NTU1NTdhNjUxMCA8ZXhlY19ieXRlX2NvZGUrNjczNj4sIDB4NTU1NTU1N2E2NGJmIDxl eGVjX2J5dGVfY29kZSs2NjU1PiwgMHg1NTU1NTU3YTY0NmUgPGV4ZWNfYnl0ZV9jb2RlKzY1NzQ+ LCAweDU1NTU1NTdhNjQxYyA8ZXhlY19ieXRlX2NvZGUrNjQ5Mj4sIDB4NTU1NTU1N2E2MzQwIDxl eGVjX2J5dGVfY29kZSs2MjcyPiwgMHg1NTU1NTU3YTRmYTkgPGV4ZWNfYnl0ZV9jb2RlKzEyNTc+ LCAweDU1NTU1NTdhNjMxNyA8ZXhlY19ieXRlX2NvZGUrNjIzMT4sIDB4NTU1NTU1N2E2MmU5IDxl eGVjX2J5dGVfY29kZSs2MTg1PiwgMHg1NTU1NTU3YTYyNmEgPGV4ZWNfYnl0ZV9jb2RlKzYwNTg+ LCAweDU1NTU1NTdhNjIyNyA8ZXhlY19ieXRlX2NvZGUrNTk5MT4sIDB4NTU1NTU1N2E2MWZlIDxl eGVjX2J5dGVfY29kZSs1OTUwPiwgMHg1NTU1NTU3YTYxZDMgPGV4ZWNfYnl0ZV9jb2RlKzU5MDc+ LCAweDU1NTU1NTdhNjFhOCA8ZXhlY19ieXRlX2NvZGUrNTg2ND4sIDB4NTU1NTU1N2E2MTc1IDxl eGVjX2J5dGVfY29kZSs1ODEzPiwgMHg1NTU1NTU3YTYxNGEgPGV4ZWNfYnl0ZV9jb2RlKzU3NzA+ LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E2MTFm IDxleGVjX2J5dGVfY29kZSs1NzI3PiwgMHg1NTU1NTU3YTYwZjQgPGV4ZWNfYnl0ZV9jb2RlKzU2 ODQ+LCAweDU1NTU1NTdhNjBjOSA8ZXhlY19ieXRlX2NvZGUrNTY0MT4sIDB4NTU1NTU1N2E2MDll IDxleGVjX2J5dGVfY29kZSs1NTk4PiwgMHg1NTU1NTU3YTYwNzMgPGV4ZWNfYnl0ZV9jb2RlKzU1 NTU+LCAweDU1NTU1NTdhNjA0YSA8ZXhlY19ieXRlX2NvZGUrNTUxND4sIDB4NTU1NTU1N2E0ZmE5 IDxleGVjX2J5dGVfY29kZSsxMjU3PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIw OTYyMTQ+LCAweDU1NTU1NTdhNjAwYyA8ZXhlY19ieXRlX2NvZGUrNTQ1Mj4sIDB4NTU1NTU1N2E1 ZmUzIDxleGVjX2J5dGVfY29kZSs1NDExPiwgMHg1NTU1NTU3YTVmYmEgPGV4ZWNfYnl0ZV9jb2Rl KzUzNzA+LCAweDU1NTU1NTdhNThjYiA8ZXhlY19ieXRlX2NvZGUrMzU5NT4sIDB4NTU1NTU1N2E1 ODkyIDxleGVjX2J5dGVfY29kZSszNTM4PiwgMHg1NTU1NTU3YTU4NjkgPGV4ZWNfYnl0ZV9jb2Rl KzM0OTc+LCAweDU1NTU1NTdhNTg0MCA8ZXhlY19ieXRlX2NvZGUrMzQ1Nj4sIDB4NTU1NTU1N2E1 ODA3IDxleGVjX2J5dGVfY29kZSszMzk5PiwgMHg1NTU1NTU3YTU3Y2UgPGV4ZWNfYnl0ZV9jb2Rl KzMzNDI+LCAweDU1NTU1NTdhNTc5NSA8ZXhlY19ieXRlX2NvZGUrMzI4NT4sIDB4NTU1NTU1N2E1 NzZhIDxleGVjX2J5dGVfY29kZSszMjQyPiwgMHg1NTU1NTU3YTU3NDEgPGV4ZWNfYnl0ZV9jb2Rl KzMyMDE+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1 N2E1ZDUwIDxleGVjX2J5dGVfY29kZSs0NzUyPiwgMHg1NTU1NTU3YTVlZTEgPGV4ZWNfYnl0ZV9j b2RlKzUxNTM+LCAweDU1NTU1NTdhNTk4YSA8ZXhlY19ieXRlX2NvZGUrMzc4Nj4sIDB4NTU1NTU1 N2E1ZWE3IDxleGVjX2J5dGVfY29kZSs1MDk1PiwgMHg1NTU1NTU3YTVlNzAgPGV4ZWNfYnl0ZV9j b2RlKzUwNDA+LCAweDU1NTU1NTdhNWUzOSA8ZXhlY19ieXRlX2NvZGUrNDk4NT4sIDB4NTU1NTU1 N2E1ZGEyIDxleGVjX2J5dGVfY29kZSs0ODM0PiwgMHg1NTU1NTU3YTVkODQgPGV4ZWNfYnl0ZV9j b2RlKzQ4MDQ+LCAweDU1NTU1NTdhNWExYSA8ZXhlY19ieXRlX2NvZGUrMzkzMD4sIDB4NTU1NTU1 N2E1ZDMyIDxleGVjX2J5dGVfY29kZSs0NzIyPiwgMHg1NTU1NTU3YTVjZDYgPGV4ZWNfYnl0ZV9j b2RlKzQ2MzA+LCAweDU1NTU1NTdhNWNhOCA8ZXhlY19ieXRlX2NvZGUrNDU4ND4sIDB4NTU1NTU1 N2E1YzY4IDxleGVjX2J5dGVfY29kZSs0NTIwPiwgMHg1NTU1NTU3YTZlZmIgPGV4ZWNfYnl0ZV9j b2RlKzkyNzU+LCAweDU1NTU1NTdhNmViZSA8ZXhlY19ieXRlX2NvZGUrOTIxND4sIDB4NTU1NTU1 N2E2ZTdiIDxleGVjX2J5dGVfY29kZSs5MTQ3PiwgMHg1NTU1NTU3YTZlMjUgPGV4ZWNfYnl0ZV9j b2RlKzkwNjE+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1 NTU1N2E1NzA0IDxleGVjX2J5dGVfY29kZSszMTQwPiwgMHg1NTU1NTU3YTU2ZGIgPGV4ZWNfYnl0 ZV9jb2RlKzMwOTk+LCAweDU1NTU1NTdhNTZiMiA8ZXhlY19ieXRlX2NvZGUrMzA1OD4sIDB4NTU1 NTU1N2E1Njg5IDxleGVjX2J5dGVfY29kZSszMDE3PiwgMHg1NTU1NTU3YTU2NjAgPGV4ZWNfYnl0 ZV9jb2RlKzI5NzY+LCAweDU1NTU1NTdhNTYyNyA8ZXhlY19ieXRlX2NvZGUrMjkxOT4sIDB4NTU1 NTU1N2E1NWVlIDxleGVjX2J5dGVfY29kZSsyODYyPiwgMHg1NTU1NTU3YTU1YjUgPGV4ZWNfYnl0 ZV9jb2RlKzI4MDU+LCAweDU1NTU1NTdhNTU3YyA8ZXhlY19ieXRlX2NvZGUrMjc0OD4sIDB4NTU1 NTU1N2E1NTJmIDxleGVjX2J5dGVfY29kZSsyNjcxPiwgMHg1NTU1NTU3YTU0ZjYgPGV4ZWNfYnl0 ZV9jb2RlKzI2MTQ+LCAweDU1NTU1NTdhNTRiZCA8ZXhlY19ieXRlX2NvZGUrMjU1Nz4sIDB4NTU1 NTU1N2E1NDk3IDxleGVjX2J5dGVfY29kZSsyNTE5PiwgMHg1NTU1NTU3YTU0M2MgPGV4ZWNfYnl0 ZV9jb2RlKzI0Mjg+LCAweDU1NTU1NTdhNTNlMSA8ZXhlY19ieXRlX2NvZGUrMjMzNz4sIDB4NTU1 NTU1N2E1M2FlIDxleGVjX2J5dGVfY29kZSsyMjg2PiwgMHg1NTU1NTU3YTUzN2IgPGV4ZWNfYnl0 ZV9jb2RlKzIyMzU+LCAweDU1NTU1NTdhNTM0YiA8ZXhlY19ieXRlX2NvZGUrMjE4Nz4sIDB4NTU1 NTU1N2E2M2NiIDxleGVjX2J5dGVfY29kZSs2NDExPiwgMHg1NTU1NTU3YTYzODMgPGV4ZWNfYnl0 ZV9jb2RlKzYzMzk+LCAweDU1NTU1NTdhNTJlNSA8ZXhlY19ieXRlX2NvZGUrMjA4NT4sIDB4NTU1 NTU1N2E1MjgyIDxleGVjX2J5dGVfY29kZSsxOTg2PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0 ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4s IDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEg PGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUt MjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1 NTU3YTZiNGIgPGV4ZWNfYnl0ZV9jb2RlKzgzMzE+LCAweDU1NTU1NTdhNjgzMCA8ZXhlY19ieXRl X2NvZGUrNzUzNj4sIDB4NTU1NTU1N2E2MmFkIDxleGVjX2J5dGVfY29kZSs2MTI1PiwgMHg1NTU1 NTU3YTUxY2YgPGV4ZWNfYnl0ZV9jb2RlKzE4MDc+LCAweDU1NTU1NTdhNTE5MyA8ZXhlY19ieXRl X2NvZGUrMTc0Nz4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1 NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNTE2NCA8ZXhl Y19ieXRlX2NvZGUrMTcwMD4sIDB4NTU1NTU1N2E1OTM0IDxleGVjX2J5dGVfY29kZSszNzAwPiwg MHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8 ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0y MDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1 NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5 dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+ LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E1OTA0 IDxleGVjX2J5dGVfY29kZSszNjUyPiA8cmVwZWF0cyA2NCB0aW1lcz59CiAgICAgICAgcXVpdGNv dW50ZXIgPSAxICdcMDAxJwogICAgICAgIGJjID0gMHg1NTU1NTVjZjNlNzAgPG1haW5fdGhyZWFk KzQ5Nj4KICAgICAgICB0b3AgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBwYyA9IDxvcHRpbWl6 ZWQgb3V0PgogICAgICAgIGJ5dGVzdHIgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB2ZWN0b3Ig PSA8b3B0aW1pemVkIG91dD4KICAgICAgICBtYXhkZXB0aCA9IDxvcHRpbWl6ZWQgb3V0PgogICAg ICAgIGNvbnN0X2xlbmd0aCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGJ5dGVzdHJfbGVuZ3Ro ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgdmVjdG9ycCA9IDB4N2ZmZmYxZDY4NWM4CiAgICAg ICAgbWF4X3N0YWNrID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnJhbWVfYmFzZSA9IDxvcHRp bWl6ZWQgb3V0PgogICAgICAgIGZwID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYnl0ZXN0cl9k YXRhID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgcmVzdCA9IDxvcHRpbWl6ZWQgb3V0PgogICAg ICAgIG1hbmRhdG9yeSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIG5vbnJlc3QgPSA8b3B0aW1p emVkIG91dD4KICAgICAgICBwdXNoZWRhcmdzID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgcmVz dWx0ID0gPG9wdGltaXplZCBvdXQ+CiMxNiAweDAwMDA1NTU1NTU3NWM2MjYgaW4gRmZ1bmNhbGwg KG5hcmdzPW5hcmdzQGVudHJ5PTUsIGFyZ3M9YXJnc0BlbnRyeT0weDdmZmZmZmZmZTA0MCkgYXQg Li4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoyOTk5CiAgICAgICAgY291bnQgPSA8b3B0aW1pemVk IG91dD4KICAgICAgICB2YWwgPSA8b3B0aW1pemVkIG91dD4KIzE3IDB4MDAwMDU1NTU1NTc4ZjVl ZCBpbiBjYWxsNCAoYXJnND0weDMwLCBhcmczPTxvcHRpbWl6ZWQgb3V0PiwgYXJnMj0weDU1NTU1 NWVjZmQxNCwgYXJnMT08b3B0aW1pemVkIG91dD4sIGZuPTxvcHRpbWl6ZWQgb3V0PikgYXQgLi4v Li4vLi4vZW1hY3Mvc3JjL2xpc3AuaDozMjcwCk5vIGxvY2Fscy4KIzE4IEZsb2FkIChmaWxlPTB4 NTU1NTU1ZWNmYTM0LCBub2Vycm9yPTxvcHRpbWl6ZWQgb3V0Piwgbm9tZXNzYWdlPTxvcHRpbWl6 ZWQgb3V0Piwgbm9zdWZmaXg9PG9wdGltaXplZCBvdXQ+LCBtdXN0X3N1ZmZpeD08b3B0aW1pemVk IG91dD4pIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9scmVhZC5jOjE0ODQKICAgICAgICB2YWwgPSA8 b3B0aW1pemVkIG91dD4KICAgICAgICBzdHJlYW0gPSAweDAKICAgICAgICBmZCA9IDQKICAgICAg ICBmZF9pbmRleCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBv dXQ+CiAgICAgICAgZm91bmQgPSAweDU1NTU1NWVjZmQxNAogICAgICAgIGVmb3VuZCA9IDxvcHRp bWl6ZWQgb3V0PgogICAgICAgIGhpc3RfZmlsZV9uYW1lID0gMHg1NTU1NTVlY2ZkMTQKICAgICAg ICBuZXdlciA9IGZhbHNlCiAgICAgICAgY29tcGlsZWQgPSBmYWxzZQogICAgICAgIGhhbmRsZXIg PSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmbW9kZSA9IDB4NTU1NTU1ODM0YTliICJyIgogICAg ICAgIHZlcnNpb24gPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBub19uYXRpdmUgPSA8b3B0aW1p emVkIG91dD4KICAgICAgICBpc19tb2R1bGUgPSBmYWxzZQogICAgICAgIGlzX25hdGl2ZV9lbGlz cCA9IGZhbHNlCiAgICAgICAgZm91bmRfZWZmID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgaXNf ZWxjID0gZmFsc2UKICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgIHN0cmVhbSA9IDB4NTU1NTU1 ZWNmYTM0LAogICAgICAgICAgbG9va2FoZWFkID0gOTYgJ2AnLAogICAgICAgICAgYnVmID0gIlww MDFcMDAwXDAwMCIKICAgICAgICB9CiMxOSAweDAwMDA1NTU1NTU3YTRlOTIgaW4gZXhlY19ieXRl X2NvZGUgKGZ1bj08b3B0aW1pemVkIG91dD4sIGFyZ3NfdGVtcGxhdGU9PG9wdGltaXplZCBvdXQ+ LCBuYXJncz08b3B0aW1pemVkIG91dD4sIGFyZ3M9PG9wdGltaXplZCBvdXQ+KSBhdCAuLi8uLi8u Li9lbWFjcy9zcmMvYnl0ZWNvZGUuYzo4MDkKICAgICAgICBjYWxsX25hcmdzID0gMwogICAgICAg IGNhbGxfZnVuID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgY291bnQxID0gPG9wdGltaXplZCBv dXQ+CiAgICAgICAgdGVtcGxhdGUgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB2YWwgPSA8b3B0 aW1pemVkIG91dD4KICAgICAgICBjYWxsX2FyZ3MgPSAweDdmZmZmMTFmZjFiMAogICAgICAgIG9y aWdpbmFsX2Z1biA9IDB4YTliMAogICAgICAgIGJ5dGVjb2RlID0gPG9wdGltaXplZCBvdXQ+CiAg ICAgICAgb3AgPSAzCiAgICAgICAgdHlwZSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHRhcmdl dHMgPSB7MHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdh NTI3ZCA8ZXhlY19ieXRlX2NvZGUrMTk4MT4sIDB4NTU1NTU1N2E1Mjc4IDxleGVjX2J5dGVfY29k ZSsxOTc2PiwgMHg1NTU1NTU3YTUyNzMgPGV4ZWNfYnl0ZV9jb2RlKzE5NzE+LCAweDU1NTU1NTdh NGM4ZSA8ZXhlY19ieXRlX2NvZGUrNDYyPiwgMHg1NTU1NTU3YTRjOGUgPGV4ZWNfYnl0ZV9jb2Rl KzQ2Mj4sIDB4NTU1NTU1N2E1MjNmIDxleGVjX2J5dGVfY29kZSsxOTE5PiwgMHg1NTU1NTU3YTUy MGIgPGV4ZWNfYnl0ZV9jb2RlKzE4Njc+LCAweDU1NTU1NTdhNTllMSA8ZXhlY19ieXRlX2NvZGUr Mzg3Mz4sIDB4NTU1NTU1N2E1OWRjIDxleGVjX2J5dGVfY29kZSszODY4PiwgMHg1NTU1NTU3YTU5 ZDcgPGV4ZWNfYnl0ZV9jb2RlKzM4NjM+LCAweDU1NTU1NTdhNTlkMiA8ZXhlY19ieXRlX2NvZGUr Mzg1OD4sIDB4NTU1NTU1N2E0Y2JkIDxleGVjX2J5dGVfY29kZSs1MDk+LCAweDU1NTU1NTdhNGNj MCA8ZXhlY19ieXRlX2NvZGUrNTEyPiwgMHg1NTU1NTU3YTU5YzQgPGV4ZWNfYnl0ZV9jb2RlKzM4 NDQ+LCAweDU1NTU1NTdhNTllNiA8ZXhlY19ieXRlX2NvZGUrMzg3OD4sIDB4NTU1NTU1N2E1YTcx IDxleGVjX2J5dGVfY29kZSs0MDE3PiwgMHg1NTU1NTU3YTVhNmMgPGV4ZWNfYnl0ZV9jb2RlKzQw MTI+LCAweDU1NTU1NTdhNWE2NyA8ZXhlY19ieXRlX2NvZGUrNDAwNz4sIDB4NTU1NTU1N2E1YTYy IDxleGVjX2J5dGVfY29kZSs0MDAyPiwgMHg1NTU1NTU3YTRjMWEgPGV4ZWNfYnl0ZV9jb2RlKzM0 Nj4sIDB4NTU1NTU1N2E0YzIwIDxleGVjX2J5dGVfY29kZSszNTI+LCAweDU1NTU1NTdhNWE0NiA8 ZXhlY19ieXRlX2NvZGUrMzk3ND4sIDB4NTU1NTU1N2E1YTU0IDxleGVjX2J5dGVfY29kZSszOTg4 PiwgMHg1NTU1NTU3YTU5ZjkgPGV4ZWNfYnl0ZV9jb2RlKzM4OTc+LCAweDU1NTU1NTdhNTlmNCA8 ZXhlY19ieXRlX2NvZGUrMzg5Mj4sIDB4NTU1NTU1N2E1ZmI1IDxleGVjX2J5dGVfY29kZSs1MzY1 PiwgMHg1NTU1NTU3YTVmYjAgPGV4ZWNfYnl0ZV9jb2RlKzUzNjA+LCAweDU1NTU1NTdhNGYxYSA8 ZXhlY19ieXRlX2NvZGUrMTExND4sIDB4NTU1NTU1N2E0ZjIwIDxleGVjX2J5dGVfY29kZSsxMTIw PiwgMHg1NTU1NTU3YTVhMGMgPGV4ZWNfYnl0ZV9jb2RlKzM5MTY+LCAweDU1NTU1NTdhNTlmZSA8 ZXhlY19ieXRlX2NvZGUrMzkwMj4sIDB4NTU1NTU1N2E1ZjhmIDxleGVjX2J5dGVfY29kZSs1MzI3 PiwgMHg1NTU1NTU3YTVmOGEgPGV4ZWNfYnl0ZV9jb2RlKzUzMjI+LCAweDU1NTU1NTdhNWY4NSA8 ZXhlY19ieXRlX2NvZGUrNTMxNz4sIDB4NTU1NTU1N2E1ZjgwIDxleGVjX2J5dGVfY29kZSs1MzEy PiwgMHg1NTU1NTU3YTRkMmIgPGV4ZWNfYnl0ZV9jb2RlKzYxOT4sIDB4NTU1NTU1N2E0ZDMwIDxl eGVjX2J5dGVfY29kZSs2MjQ+LCAweDU1NTU1NTdhNWZhMiA8ZXhlY19ieXRlX2NvZGUrNTM0Nj4s IDB4NTU1NTU1N2E1Zjk0IDxleGVjX2J5dGVfY29kZSs1MzMyPiwgMHg1NTU1NTU3YTVmNWYgPGV4 ZWNfYnl0ZV9jb2RlKzUyNzk+LCAweDU1NTU1NTdhNWY1YSA8ZXhlY19ieXRlX2NvZGUrNTI3ND4s IDB4NTU1NTU1N2E1ZjU1IDxleGVjX2J5dGVfY29kZSs1MjY5PiwgMHg1NTU1NTU3YTVmNTAgPGV4 ZWNfYnl0ZV9jb2RlKzUyNjQ+LCAweDU1NTU1NTdhNGY2MyA8ZXhlY19ieXRlX2NvZGUrMTE4Nz4s IDB4NTU1NTU1N2E0ZjY4IDxleGVjX2J5dGVfY29kZSsxMTkyPiwgMHg1NTU1NTU3YTVmNzIgPGV4 ZWNfYnl0ZV9jb2RlKzUyOTg+LCAweDU1NTU1NTdhNWY2NCA8ZXhlY19ieXRlX2NvZGUrNTI4ND4s IDB4NTU1NTU1N2E1YmM5IDxleGVjX2J5dGVfY29kZSs0MzYxPiwgMHg1NTU1NTU3YTViZjYgPGV4 ZWNfYnl0ZV9jb2RlKzQ0MDY+LCAweDU1NTU1NTdhNWM2MCA8ZXhlY19ieXRlX2NvZGUrNDUxMj4s IDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEg PGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUt MjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1 NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNmRkZiA8ZXhlY19i eXRlX2NvZGUrODk5MT4sIDB4NTU1NTU1N2E2ZDczIDxleGVjX2J5dGVfY29kZSs4ODgzPiwgMHg1 NTU1NTU3YTZkMzcgPGV4ZWNfYnl0ZV9jb2RlKzg4MjM+LCAweDU1NTU1NTdhNmNmYiA8ZXhlY19i eXRlX2NvZGUrODc2Mz4sIDB4NTU1NTU1N2E2Y2JkIDxleGVjX2J5dGVfY29kZSs4NzAxPiwgMHg1 NTU1NTU3YTVhZTMgPGV4ZWNfYnl0ZV9jb2RlKzQxMzE+LCAweDU1NTU1NTdhNWFhYSA8ZXhlY19i eXRlX2NvZGUrNDA3ND4sIDB4NTU1NTU1N2E2YzkyIDxleGVjX2J5dGVfY29kZSs4NjU4PiwgMHg1 NTU1NTU3YTViOTUgPGV4ZWNfYnl0ZV9jb2RlKzQzMDk+LCAweDU1NTU1NTdhNWE3NiA8ZXhlY19i eXRlX2NvZGUrNDAyMj4sIDB4NTU1NTU1N2E2YzU5IDxleGVjX2J5dGVfY29kZSs4NjAxPiwgMHg1 NTU1NTU3YTZjMzAgPGV4ZWNfYnl0ZV9jb2RlKzg1NjA+LCAweDU1NTU1NTdhNmJmNyA8ZXhlY19i eXRlX2NvZGUrODUwMz4sIDB4NTU1NTU1N2E2YmMxIDxleGVjX2J5dGVfY29kZSs4NDQ5PiwgMHg1 NTU1NTU3YTZiODcgPGV4ZWNfYnl0ZV9jb2RlKzgzOTE+LCAweDU1NTU1NTdhNmIyMiA8ZXhlY19i eXRlX2NvZGUrODI5MD4sIDB4NTU1NTU1N2E2YWI0IDxleGVjX2J5dGVfY29kZSs4MTgwPiwgMHg1 NTU1NTU3YTZhM2YgPGV4ZWNfYnl0ZV9jb2RlKzgwNjM+LCAweDU1NTU1NTdhNmExNiA8ZXhlY19i eXRlX2NvZGUrODAyMj4sIDB4NTU1NTU1N2E2OWVkIDxleGVjX2J5dGVfY29kZSs3OTgxPiwgMHg1 NTU1NTU3YTY5YjQgPGV4ZWNfYnl0ZV9jb2RlKzc5MjQ+LCAweDU1NTU1NTdhNjk3YiA8ZXhlY19i eXRlX2NvZGUrNzg2Nz4sIDB4NTU1NTU1N2E2OTQyIDxleGVjX2J5dGVfY29kZSs3ODEwPiwgMHg1 NTU1NTU3YTY5MDUgPGV4ZWNfYnl0ZV9jb2RlKzc3NDk+LCAweDU1NTU1NTdhNjhkMiA8ZXhlY19i eXRlX2NvZGUrNzY5OD4sIDB4NTU1NTU1N2E2ODlmIDxleGVjX2J5dGVfY29kZSs3NjQ3PiwgMHg1 NTU1NTU3YTY4NmMgPGV4ZWNfYnl0ZV9jb2RlKzc1OTY+LCAweDU1NTU1NTdhNjdkYiA8ZXhlY19i eXRlX2NvZGUrNzQ1MT4sIDB4NTU1NTU1N2E2Nzg2IDxleGVjX2J5dGVfY29kZSs3MzY2PiwgMHg1 NTU1NTU3YTY3M2MgPGV4ZWNfYnl0ZV9jb2RlKzcyOTI+LCAweDU1NTU1NTdhNjZlZiA8ZXhlY19i eXRlX2NvZGUrNzIxNT4sIDB4NTU1NTU1N2E2NmEyIDxleGVjX2J5dGVfY29kZSs3MTM4PiwgMHg1 NTU1NTU3YTY2NTUgPGV4ZWNfYnl0ZV9jb2RlKzcwNjE+LCAweDU1NTU1NTdhNjYwOCA8ZXhlY19i eXRlX2NvZGUrNjk4ND4sIDB4NTU1NTU1N2E2NWI3IDxleGVjX2J5dGVfY29kZSs2OTAzPiwgMHg1 NTU1NTU3YTY1NjEgPGV4ZWNfYnl0ZV9jb2RlKzY4MTc+LCAweDU1NTU1NTdhNjUxMCA8ZXhlY19i eXRlX2NvZGUrNjczNj4sIDB4NTU1NTU1N2E2NGJmIDxleGVjX2J5dGVfY29kZSs2NjU1PiwgMHg1 NTU1NTU3YTY0NmUgPGV4ZWNfYnl0ZV9jb2RlKzY1NzQ+LCAweDU1NTU1NTdhNjQxYyA8ZXhlY19i eXRlX2NvZGUrNjQ5Mj4sIDB4NTU1NTU1N2E2MzQwIDxleGVjX2J5dGVfY29kZSs2MjcyPiwgMHg1 NTU1NTU3YTRmYTkgPGV4ZWNfYnl0ZV9jb2RlKzEyNTc+LCAweDU1NTU1NTdhNjMxNyA8ZXhlY19i eXRlX2NvZGUrNjIzMT4sIDB4NTU1NTU1N2E2MmU5IDxleGVjX2J5dGVfY29kZSs2MTg1PiwgMHg1 NTU1NTU3YTYyNmEgPGV4ZWNfYnl0ZV9jb2RlKzYwNTg+LCAweDU1NTU1NTdhNjIyNyA8ZXhlY19i eXRlX2NvZGUrNTk5MT4sIDB4NTU1NTU1N2E2MWZlIDxleGVjX2J5dGVfY29kZSs1OTUwPiwgMHg1 NTU1NTU3YTYxZDMgPGV4ZWNfYnl0ZV9jb2RlKzU5MDc+LCAweDU1NTU1NTdhNjFhOCA8ZXhlY19i eXRlX2NvZGUrNTg2ND4sIDB4NTU1NTU1N2E2MTc1IDxleGVjX2J5dGVfY29kZSs1ODEzPiwgMHg1 NTU1NTU3YTYxNGEgPGV4ZWNfYnl0ZV9jb2RlKzU3NzA+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19i eXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E2MTFmIDxleGVjX2J5dGVfY29kZSs1NzI3Piwg MHg1NTU1NTU3YTYwZjQgPGV4ZWNfYnl0ZV9jb2RlKzU2ODQ+LCAweDU1NTU1NTdhNjBjOSA8ZXhl Y19ieXRlX2NvZGUrNTY0MT4sIDB4NTU1NTU1N2E2MDllIDxleGVjX2J5dGVfY29kZSs1NTk4Piwg MHg1NTU1NTU3YTYwNzMgPGV4ZWNfYnl0ZV9jb2RlKzU1NTU+LCAweDU1NTU1NTdhNjA0YSA8ZXhl Y19ieXRlX2NvZGUrNTUxND4sIDB4NTU1NTU1N2E0ZmE5IDxleGVjX2J5dGVfY29kZSsxMjU3Piwg MHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNjAwYyA8 ZXhlY19ieXRlX2NvZGUrNTQ1Mj4sIDB4NTU1NTU1N2E1ZmUzIDxleGVjX2J5dGVfY29kZSs1NDEx PiwgMHg1NTU1NTU3YTVmYmEgPGV4ZWNfYnl0ZV9jb2RlKzUzNzA+LCAweDU1NTU1NTdhNThjYiA8 ZXhlY19ieXRlX2NvZGUrMzU5NT4sIDB4NTU1NTU1N2E1ODkyIDxleGVjX2J5dGVfY29kZSszNTM4 PiwgMHg1NTU1NTU3YTU4NjkgPGV4ZWNfYnl0ZV9jb2RlKzM0OTc+LCAweDU1NTU1NTdhNTg0MCA8 ZXhlY19ieXRlX2NvZGUrMzQ1Nj4sIDB4NTU1NTU1N2E1ODA3IDxleGVjX2J5dGVfY29kZSszMzk5 PiwgMHg1NTU1NTU3YTU3Y2UgPGV4ZWNfYnl0ZV9jb2RlKzMzNDI+LCAweDU1NTU1NTdhNTc5NSA8 ZXhlY19ieXRlX2NvZGUrMzI4NT4sIDB4NTU1NTU1N2E1NzZhIDxleGVjX2J5dGVfY29kZSszMjQy PiwgMHg1NTU1NTU3YTU3NDEgPGV4ZWNfYnl0ZV9jb2RlKzMyMDE+LCAweDU1NTU1NTVhNGU2YSA8 ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E1ZDUwIDxleGVjX2J5dGVfY29kZSs0 NzUyPiwgMHg1NTU1NTU3YTVlZTEgPGV4ZWNfYnl0ZV9jb2RlKzUxNTM+LCAweDU1NTU1NTdhNTk4 YSA8ZXhlY19ieXRlX2NvZGUrMzc4Nj4sIDB4NTU1NTU1N2E1ZWE3IDxleGVjX2J5dGVfY29kZSs1 MDk1PiwgMHg1NTU1NTU3YTVlNzAgPGV4ZWNfYnl0ZV9jb2RlKzUwNDA+LCAweDU1NTU1NTdhNWUz OSA8ZXhlY19ieXRlX2NvZGUrNDk4NT4sIDB4NTU1NTU1N2E1ZGEyIDxleGVjX2J5dGVfY29kZSs0 ODM0PiwgMHg1NTU1NTU3YTVkODQgPGV4ZWNfYnl0ZV9jb2RlKzQ4MDQ+LCAweDU1NTU1NTdhNWEx YSA8ZXhlY19ieXRlX2NvZGUrMzkzMD4sIDB4NTU1NTU1N2E1ZDMyIDxleGVjX2J5dGVfY29kZSs0 NzIyPiwgMHg1NTU1NTU3YTVjZDYgPGV4ZWNfYnl0ZV9jb2RlKzQ2MzA+LCAweDU1NTU1NTdhNWNh OCA8ZXhlY19ieXRlX2NvZGUrNDU4ND4sIDB4NTU1NTU1N2E1YzY4IDxleGVjX2J5dGVfY29kZSs0 NTIwPiwgMHg1NTU1NTU3YTZlZmIgPGV4ZWNfYnl0ZV9jb2RlKzkyNzU+LCAweDU1NTU1NTdhNmVi ZSA8ZXhlY19ieXRlX2NvZGUrOTIxND4sIDB4NTU1NTU1N2E2ZTdiIDxleGVjX2J5dGVfY29kZSs5 MTQ3PiwgMHg1NTU1NTU3YTZlMjUgPGV4ZWNfYnl0ZV9jb2RlKzkwNjE+LCAweDU1NTU1NTVhNGU2 YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E1NzA0IDxleGVjX2J5dGVfY29k ZSszMTQwPiwgMHg1NTU1NTU3YTU2ZGIgPGV4ZWNfYnl0ZV9jb2RlKzMwOTk+LCAweDU1NTU1NTdh NTZiMiA8ZXhlY19ieXRlX2NvZGUrMzA1OD4sIDB4NTU1NTU1N2E1Njg5IDxleGVjX2J5dGVfY29k ZSszMDE3PiwgMHg1NTU1NTU3YTU2NjAgPGV4ZWNfYnl0ZV9jb2RlKzI5NzY+LCAweDU1NTU1NTdh NTYyNyA8ZXhlY19ieXRlX2NvZGUrMjkxOT4sIDB4NTU1NTU1N2E1NWVlIDxleGVjX2J5dGVfY29k ZSsyODYyPiwgMHg1NTU1NTU3YTU1YjUgPGV4ZWNfYnl0ZV9jb2RlKzI4MDU+LCAweDU1NTU1NTdh NTU3YyA8ZXhlY19ieXRlX2NvZGUrMjc0OD4sIDB4NTU1NTU1N2E1NTJmIDxleGVjX2J5dGVfY29k ZSsyNjcxPiwgMHg1NTU1NTU3YTU0ZjYgPGV4ZWNfYnl0ZV9jb2RlKzI2MTQ+LCAweDU1NTU1NTdh NTRiZCA8ZXhlY19ieXRlX2NvZGUrMjU1Nz4sIDB4NTU1NTU1N2E1NDk3IDxleGVjX2J5dGVfY29k ZSsyNTE5PiwgMHg1NTU1NTU3YTU0M2MgPGV4ZWNfYnl0ZV9jb2RlKzI0Mjg+LCAweDU1NTU1NTdh NTNlMSA8ZXhlY19ieXRlX2NvZGUrMjMzNz4sIDB4NTU1NTU1N2E1M2FlIDxleGVjX2J5dGVfY29k ZSsyMjg2PiwgMHg1NTU1NTU3YTUzN2IgPGV4ZWNfYnl0ZV9jb2RlKzIyMzU+LCAweDU1NTU1NTdh NTM0YiA8ZXhlY19ieXRlX2NvZGUrMjE4Nz4sIDB4NTU1NTU1N2E2M2NiIDxleGVjX2J5dGVfY29k ZSs2NDExPiwgMHg1NTU1NTU3YTYzODMgPGV4ZWNfYnl0ZV9jb2RlKzYzMzk+LCAweDU1NTU1NTdh NTJlNSA8ZXhlY19ieXRlX2NvZGUrMjA4NT4sIDB4NTU1NTU1N2E1MjgyIDxleGVjX2J5dGVfY29k ZSsxOTg2PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1 NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5 dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+ LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZh IDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU3YTZiNGIgPGV4ZWNfYnl0ZV9jb2Rl KzgzMzE+LCAweDU1NTU1NTdhNjgzMCA8ZXhlY19ieXRlX2NvZGUrNzUzNj4sIDB4NTU1NTU1N2E2 MmFkIDxleGVjX2J5dGVfY29kZSs2MTI1PiwgMHg1NTU1NTU3YTUxY2YgPGV4ZWNfYnl0ZV9jb2Rl KzE4MDc+LCAweDU1NTU1NTdhNTE5MyA8ZXhlY19ieXRlX2NvZGUrMTc0Nz4sIDB4NTU1NTU1NWE0 ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9j b2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNTE2NCA8ZXhlY19ieXRlX2NvZGUrMTcwMD4sIDB4NTU1 NTU1N2E1OTM0IDxleGVjX2J5dGVfY29kZSszNzAwPiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0 ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4s IDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEg PGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUt MjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1 NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19i eXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E1OTA0IDxleGVjX2J5dGVfY29kZSszNjUyPiA8 cmVwZWF0cyA2NCB0aW1lcz59CiAgICAgICAgcXVpdGNvdW50ZXIgPSAzOCAnJicKICAgICAgICBi YyA9IDB4NTU1NTU1Y2YzZTcwIDxtYWluX3RocmVhZCs0OTY+CiAgICAgICAgdG9wID0gPG9wdGlt aXplZCBvdXQ+CiAgICAgICAgcGMgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBieXRlc3RyID0g PG9wdGltaXplZCBvdXQ+CiAgICAgICAgdmVjdG9yID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAg bWF4ZGVwdGggPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBjb25zdF9sZW5ndGggPSA8b3B0aW1p emVkIG91dD4KICAgICAgICBieXRlc3RyX2xlbmd0aCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAg IHZlY3RvcnAgPSAweDdmZmZmMWQ1YmFjMAogICAgICAgIG1heF9zdGFjayA9IDxvcHRpbWl6ZWQg b3V0PgogICAgICAgIGZyYW1lX2Jhc2UgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmcCA9IDxv cHRpbWl6ZWQgb3V0PgogICAgICAgIGJ5dGVzdHJfZGF0YSA9IDxvcHRpbWl6ZWQgb3V0PgogICAg ICAgIHJlc3QgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBtYW5kYXRvcnkgPSA8b3B0aW1pemVk IG91dD4KICAgICAgICBub25yZXN0ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgcHVzaGVkYXJn cyA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHJlc3VsdCA9IDxvcHRpbWl6ZWQgb3V0PgojMjAg MHgwMDAwNTU1NTU1NzYxNjRjIGluIGFwcGx5X2xhbWJkYSAoZnVuPWZ1bkBlbnRyeT0weDdmZmZm MWQ0Mzg0ZCwgYXJncz08b3B0aW1pemVkIG91dD4sIGNvdW50PWNvdW50QGVudHJ5PS4uLikgYXQg Li4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzozMTA3CiAgICAgICAgYXJnX3ZlY3RvciA9IDB4N2Zm ZmZmZmZlMWEwCiAgICAgICAgdGVtID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgc2FfYXZhaWwg PSA8b3B0aW1pemVkIG91dD4KICAgICAgICBzYV9jb3VudCA9IHsKICAgICAgICAgIGJ5dGVzID0g MTYwCiAgICAgICAgfQogICAgICAgIG51bWFyZ3MgPSAwCiAgICAgICAgYXJnc19sZWZ0ID0gMHgw CiMyMSAweDAwMDA1NTU1NTU3NWZjMDMgaW4gZXZhbF9zdWIgKGZvcm09Zm9ybUBlbnRyeT0weDdm ZmZmMjIwNmVmYikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoyNTkyCiAgICAgICAgb3Jp Z2luYWxfZnVuID0gMHgyYWFhOWJmYzUwOTgKICAgICAgICBvcmlnaW5hbF9hcmdzID0gMHgwCiAg ICAgICAgY291bnQgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmdW4gPSA8b3B0aW1pemVkIG91 dD4KICAgICAgICB2YWwgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmdW5jYXIgPSA8b3B0aW1p emVkIG91dD4KICAgICAgICBhcmd2YWxzID0gezB4MTIsIDB4ZmZmZmZmZmZmZmZmZmI5MCwgMHg5 MCwgMHg1LCAweDdmZmZmZmZmZTk2MCwgMHg3ZmZmZjU3NTg5ZmEgPG1hbGxvYys0MTA+LCAweDYw LCAweDU1NTU1NWU4ZTYyM30KICAgICAgICByZXRyeSA9IDxvcHRpbWl6ZWQgb3V0PgojMjIgMHgw MDAwNTU1NTU1NzYyNzA2IGluIEZldmFsIChmb3JtPTB4N2ZmZmYyMjA2ZWZiLCBsZXhpY2FsPTxv cHRpbWl6ZWQgb3V0PikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoyMzY1CiAgICAgICAg Y291bnQgPSA8b3B0aW1pemVkIG91dD4KIzIzIDB4MDAwMDU1NTU1NTc1YWQzNyBpbiBpbnRlcm5h bF9jb25kaXRpb25fY2FzZSAoYmZ1bj1iZnVuQGVudHJ5PTB4NTU1NTU1NmNlZDQwIDx0b3BfbGV2 ZWxfMj4sIGhhbmRsZXJzPWhhbmRsZXJzQGVudHJ5PTB4OTAsIGhmdW49aGZ1bkBlbnRyeT0weDU1 NTU1NTZkNWY5MCA8Y21kX2Vycm9yPikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoxNDc0 CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYyA9IDB4NTU1NTU1ZTkzMWQw CiMyNCAweDAwMDA1NTU1NTU2Y2Y2ODYgaW4gdG9wX2xldmVsXzEgKGlnbm9yZT1pZ25vcmVAZW50 cnk9MHgwKSBhdCAuLi8uLi8uLi9lbWFjcy9zcmMva2V5Ym9hcmQuYzoxMTUwCk5vIGxvY2Fscy4K IzI1IDB4MDAwMDU1NTU1NTc1YWM5MSBpbiBpbnRlcm5hbF9jYXRjaCAodGFnPXRhZ0BlbnRyeT0w eDEwMDgwLCBmdW5jPWZ1bmNAZW50cnk9MHg1NTU1NTU2Y2Y2NjAgPHRvcF9sZXZlbF8xPiwgYXJn PWFyZ0BlbnRyeT0weDApIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MTE5NwogICAgICAg IHZhbCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGMgPSAweDU1NTU1NWU3NDQ0MAojMjYgMHgw MDAwNTU1NTU1NmNlY2JmIGluIGNvbW1hbmRfbG9vcCAoKSBhdCAuLi8uLi8uLi9lbWFjcy9zcmMv a2V5Ym9hcmQuYzoxMTEwCk5vIGxvY2Fscy4KIzI3IDB4MDAwMDU1NTU1NTZkNWI0MSBpbiByZWN1 cnNpdmVfZWRpdF8xICgpIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9rZXlib2FyZC5jOjcyMAogICAg ICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+ CiMyOCAweDAwMDA1NTU1NTU2ZDVlYzAgaW4gRnJlY3Vyc2l2ZV9lZGl0ICgpIGF0IC4uLy4uLy4u L2VtYWNzL3NyYy9rZXlib2FyZC5jOjgwMwogICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+ CiAgICAgICAgYnVmZmVyID0gPG9wdGltaXplZCBvdXQ+CiMyOSAweDAwMDA1NTU1NTU1YTg5Nzcg aW4gbWFpbiAoYXJnYz01LCBhcmd2PTB4N2ZmZmZmZmZlNjI4KSBhdCAuLi8uLi8uLi9lbWFjcy9z cmMvZW1hY3MuYzoyNTIxCiAgICAgICAgc3RhY2tfYm90dG9tX3ZhcmlhYmxlID0gMHgwCiAgICAg ICAgbm9fbG9hZHVwID0gZmFsc2UKICAgICAgICBqdW5rID0gMHgwCiAgICAgICAgZG5hbWVfYXJn ID0gMHgwCiAgICAgICAgY2hfdG9fZGlyID0gMHgwCiAgICAgICAgb3JpZ2luYWxfcHdkID0gPG9w dGltaXplZCBvdXQ+CiAgICAgICAgZHVtcF9tb2RlID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAg c2tpcF9hcmdzID0gMQogICAgICAgIHRlbWFjcyA9IDB4MAogICAgICAgIGF0dGVtcHRfbG9hZF9w ZHVtcCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIG9ubHlfdmVyc2lvbiA9IGZhbHNlCiAgICAg ICAgcmxpbSA9IHsKICAgICAgICAgIHJsaW1fY3VyID0gMTAwMjI5MTIsCiAgICAgICAgICBybGlt X21heCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1CiAgICAgICAgfQogICAgICAgIGxjX2FsbCA9IDxv cHRpbWl6ZWQgb3V0PgogICAgICAgIHNvY2tmZCA9IC0xCiAgICAgICAgbW9kdWxlX2Fzc2VydGlv bnMgPSA8b3B0aW1pemVkIG91dD4KCkxpc3AgQmFja3RyYWNlOgoidHJhbnNwb3NlLXJlZ2lvbnMi ICgweGZmZmZkOTcwKQoicHJvZ24iICgweGZmZmZkYTMwKQoidW53aW5kLXByb3RlY3QiICgweGZm ZmZkYjAwKQoic2F2ZS1jdXJyZW50LWJ1ZmZlciIgKDB4ZmZmZmRiZjApCiJsZXQiICgweGZmZmZk ZDIwKQoiZXZhbC1idWZmZXIiICgweGYxMWZmMjkwKQoibG9hZC13aXRoLWNvZGUtY29udmVyc2lv biIgKDB4ZmZmZmUwNDgpCiJsb2FkIiAoMHhmMTFmZjFiMCkKImNvbW1hbmQtbGluZS0xIiAoMHhm MTFmZjBiOCkKImNvbW1hbmQtbGluZSIgKDB4ZjExZmYwNDApCiJub3JtYWwtdG9wLWxldmVsIiAo MHhmZmZmZTFhMCkKKGdkYikgcXVpdApEZWJ1Z2dlciBmaW5pc2hlZAoKRW5kIG9mIGdkYiBzZXNz aW9uLgoKSW4gR05VIEVtYWNzIDI5LjMuNTAgKGJ1aWxkIDUsIHg4Nl82NC1wYy1saW51eC1nbnUs IEdUSysgVmVyc2lvbgogMy4yNC4zOCwgY2Fpcm8gdmVyc2lvbiAxLjE2LjApIG9mIDIwMjQtMDQt MDEgYnVpbHQgb24gZ2Fib3IKUmVwb3NpdG9yeSByZXZpc2lvbjogOTQ2ZDRhYWQxZGZiMjQ0MzUy ZGZkMDg0NWE4YmMzMDc4ZmU5YmNhNApSZXBvc2l0b3J5IGJyYW5jaDogZW1hY3MtMjkKV2luZG93 aW5nIHN5c3RlbSBkaXN0cmlidXRvciAnVGhlIFguT3JnIEZvdW5kYXRpb24nLCB2ZXJzaW9uIDEx LjAuMTIxMDEwMDcKU3lzdGVtIERlc2NyaXB0aW9uOiBEZXZ1YW4gR05VL0xpbnV4IDUgKGRhZWRh bHVzKQoKQ29uZmlndXJlZCB1c2luZzoKICdjb25maWd1cmUgLS13aXRob3V0LWxpYnN5c3RlbWQg LS13aXRob3V0LXBvcCAtLXdpdGhvdXQtc291bmQKIC0td2l0aG91dC1nY29uZiAtLXdpdGhvdXQt bWFpbHV0aWxzIC0td2l0aG91dC1uYXRpdmUtY29tcGlsYXRpb24KIC0td2l0aC1jYWlybyAtLXdp dGgteD15ZXMgLS13aXRoLXgtdG9vbGtpdD1ndGszCiAtLXdpdGgtdG9vbGtpdC1zY3JvbGwtYmFy cycKCkNvbmZpZ3VyZWQgZmVhdHVyZXM6CkNBSVJPIERCVVMgRlJFRVRZUEUgR0lGIEdMSUIgR01Q IEdOVVRMUyBHU0VUVElOR1MgSEFSRkJVWlogSlBFRyBKU09OCkxJQlNFTElOVVggTElCWE1MMiBN T0RVTEVTIE5PVElGWSBJTk9USUZZIFBEVU1QRVIgUE5HIFJTVkcgU0VDQ09NUApTUUxJVEUzIFRI UkVBRFMgVElGRiBUT09MS0lUX1NDUk9MTF9CQVJTIFRSRUVfU0lUVEVSIFdFQlAgWDExIFhEQkUg WElNClhJTlBVVDIgWFBNIEdUSzMgWkxJQgoKSW1wb3J0YW50IHNldHRpbmdzOgogIHZhbHVlIG9m ICRMQU5HOiBodV9IVS5VVEYtOAogIGxvY2FsZS1jb2Rpbmctc3lzdGVtOiB1dGYtOC11bml4CgpC ZXN0IHdpc2hlcywKCiAgICAgR8OhYm9yCg== --nextPart4879618.GXAFRqVoOG Content-Disposition: attachment; filename="0001-transpose-regions-fix-crash-add-tests-for-text-prope.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="unicode-2-0-utf-8"; name="0001-transpose-regions-fix-crash-add-tests-for-text-prope.patch" From 4f27eb41c638270a2c421126382cbb5073986288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Braun?= <gabor.braun@HIDDEN> Date: Sun, 31 Mar 2024 12:54:33 +0200 Subject: [PATCH] transpose-regions: fix crash, add tests for text properties. The tests contain non-ASCII characters and text properties, and crash previous Emacs versions. No longer confuse lengths in bytes and characters: 1. For consistent naming split len_mid into len_mid and len_mid_byte. 2. Remove the case len1_byte == len2_byte: only one memmove() could be optimized out compared to the other cases. Even tmp_interval_mid is necessary, as the intervals need position adjustments. Don't bother with different undo records in this case. --- src/editfns.c | 52 +++++++++----------------------------- test/src/editfns-tests.el | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 40 deletions(-) diff --git a/src/editfns.c b/src/editfns.c index 85f7739df07..ba589ee497e 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -4495,6 +4495,7 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, { register ptrdiff_t start1, end1, start2, end2; ptrdiff_t start1_byte, start2_byte, len1_byte, len2_byte, end2_byte; + ptrdiff_t len_mid_byte; ptrdiff_t gap, len1, len_mid, len2; unsigned char *start1_addr, *start2_addr, *temp; @@ -4653,42 +4654,10 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, /* Non-adjacent regions, because end1 != start2, bleagh... */ else { - len_mid = start2_byte - (start1_byte + len1_byte); + len_mid_byte = start2_byte - (start1_byte + len1_byte); + len_mid = start2 - end1; - if (len1_byte == len2_byte) - /* Regions are same size, though, how nice. */ - { - USE_SAFE_ALLOCA; - - modify_text (start1, end2); - record_change (start1, len1); - record_change (start2, len2); - tmp_interval1 = copy_intervals (cur_intv, start1, len1); - tmp_interval2 = copy_intervals (cur_intv, start2, len2); - - tmp_interval3 = validate_interval_range (buf, &startr1, &endr1, 0); - if (tmp_interval3) - set_text_properties_1 (startr1, endr1, Qnil, buf, tmp_interval3); - - tmp_interval3 = validate_interval_range (buf, &startr2, &endr2, 0); - if (tmp_interval3) - set_text_properties_1 (startr2, endr2, Qnil, buf, tmp_interval3); - - temp = SAFE_ALLOCA (len1_byte); - start1_addr = BYTE_POS_ADDR (start1_byte); - start2_addr = BYTE_POS_ADDR (start2_byte); - memcpy (temp, start1_addr, len1_byte); - memcpy (start1_addr, start2_addr, len2_byte); - memcpy (start2_addr, temp, len1_byte); - SAFE_FREE (); - - graft_intervals_into_buffer (tmp_interval1, start2, - len1, current_buffer, 0); - graft_intervals_into_buffer (tmp_interval2, start1, - len2, current_buffer, 0); - } - - else if (len1_byte < len2_byte) /* Second region larger than first */ + if (len1_byte < len2_byte) /* Second region larger than first */ /* Non-adjacent & unequal size, area between must also be shifted. */ { USE_SAFE_ALLOCA; @@ -4708,8 +4677,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, start1_addr = BYTE_POS_ADDR (start1_byte); start2_addr = BYTE_POS_ADDR (start2_byte); memcpy (temp, start2_addr, len2_byte); - memcpy (start1_addr + len_mid + len2_byte, start1_addr, len1_byte); - memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid); + memcpy (start1_addr + len_mid_byte + len2_byte, start1_addr, len1_byte); + memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid_byte); memcpy (start1_addr, temp, len2_byte); SAFE_FREE (); @@ -4721,7 +4690,10 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, len2, current_buffer, 0); } else - /* Second region smaller than first. */ + /* Second region not larger than first. */ + /* The equal-length case is not simpler, + the position stored in intervals for the text inbetween + still needs adjustment. */ { USE_SAFE_ALLOCA; @@ -4742,8 +4714,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, start2_addr = BYTE_POS_ADDR (start2_byte); memcpy (temp, start1_addr, len1_byte); memcpy (start1_addr, start2_addr, len2_byte); - memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid); - memcpy (start1_addr + len2_byte + len_mid, temp, len1_byte); + memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid_byte); + memcpy (start1_addr + len2_byte + len_mid_byte, temp, len1_byte); SAFE_FREE (); graft_intervals_into_buffer (tmp_interval1, end2 - len1, diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el index b3b7da65ad3..82f0bcd1e71 100644 --- a/test/src/editfns-tests.el +++ b/test/src/editfns-tests.el @@ -132,6 +132,59 @@ propertize/error-even-number-of-args "Number of args for `propertize' must be odd." (should-error (propertize "foo" 'bar) :type 'wrong-number-of-arguments)) +;; Tests for `transpose-region' + +(ert-deftest transpose-regions-text-properties2 () + "Test `transpose-regions' thoroughly with text properties." + (let* ((string1pre (propertize "a\x2013" :test 1)) + (middle (propertize "c\x00e9h" :test 0)) + (string2 (propertize "\x25cf\x25cb" :test 2)) + (bytes1 (string-bytes string1pre)) + (bytes2 (string-bytes string2))) + ;; (cl-assert (< bytes1 bytes2)) + (dotimes (i (+ 3 (- bytes2 bytes1))) + (let ((string1 (concat string1pre + (propertize (make-string i ?X) + :test t)))) + (with-temp-buffer + (insert string1 middle string2) + (buffer-enable-undo) + (transpose-regions + 1 (1+ (length string1)) + (- (point) (length string2)) (point)) + (should (equal-including-properties + (buffer-string) + (concat string2 middle string1))) + (undo-boundary) + (let ((this-command #'undo) + (last-command #'ert)) ; anything but undo + (undo)) + (should (equal-including-properties + (buffer-string) + (concat string1 middle string2)))))))) + +(ert-deftest transpose-regions-text-properties () + "Test `transpose-regions' with text properties. +This test is known to crash Emacs 28.2, 29.2, 29.3." + (with-temp-buffer + (insert (propertize "a" 'face 'font-lock-variable-name-face)) + (insert ":\n") + (insert (propertize "b" 'face 'font-lock-variable-name-face)) + (insert ": \x2113\x2080\n") + (insert (propertize "v" 'face 'font-lock-variable-name-face)) + (insert ": scaling\n") + ;; Move last line to the beginning + (transpose-regions 1 1 10 21) + (should (equal-including-properties + (buffer-string) + (concat + (propertize "v" 'face 'font-lock-variable-name-face) + ": scaling\n" + (propertize "a" 'face 'font-lock-variable-name-face) + ":\n" + (propertize "b" 'face 'font-lock-variable-name-face) + ": \x2113\x2080\n"))))) + ;; Tests for bug#5131. (defun transpose-test-reverse-word (start end) "Reverse characters in a word by transposing pairs of characters." -- 2.39.2 --nextPart4879618.GXAFRqVoOG--
Braun Gábor <braungb88@HIDDEN>
:bug-gnu-emacs@HIDDEN
.
Full text available.bug-gnu-emacs@HIDDEN
:bug#70122
; Package emacs
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.