Received: (at 78621) by debbugs.gnu.org; 30 May 2025 20:16:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri May 30 16:16:27 2025 Received: from localhost ([127.0.0.1]:51092 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uL69T-0001BB-GK for submit <at> debbugs.gnu.org; Fri, 30 May 2025 16:16:27 -0400 Received: from mail-vk1-xa35.google.com ([2607:f8b0:4864:20::a35]:45178) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uL69Q-0001An-Fn for 78621 <at> debbugs.gnu.org; Fri, 30 May 2025 16:16:24 -0400 Received: by mail-vk1-xa35.google.com with SMTP id 71dfb90a1353d-5240764f7c1so742701e0c.2 for <78621 <at> debbugs.gnu.org>; Fri, 30 May 2025 13:16:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748636178; x=1749240978; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=qno/NcbQE2WUCK0f4cChFrwfoZGIusekF44BxcDqQXM=; b=krd2Gq3LHz4ADBUj3gfmvJw5IdUIXD+XGkcUyAE0SzUDukwkbnOLT7CESHTnZDcmrX uK80KYT2RRX6MrzOFbVRWj/7C0v0HErTIcxw5N/0yJsw59GQfhArXtXd3fKygT1+BUYt 3wWED9SZV7723s288euTTqR5q5jx4OWfqTYhGUsEYAj+q5Lk4qIoBH/vcY9q/VWfvvg6 H+osch669a5CTFIUmGLbMjyFEjSez8nKLsFbvoqLFClPxBN3VyOOthuHXYtSvoL9YPIM 0vWZdyKuE7XdicvB78YQ1q1krA15WiklJBhB25igWiyWwZm5XOk3KVzQdYUhyZVvhodE 9KLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748636178; x=1749240978; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qno/NcbQE2WUCK0f4cChFrwfoZGIusekF44BxcDqQXM=; b=MN+SaNIP1reC0XRUGmK/EBNrfg90uqshbiJKqzEtmNqXXsTgHhDzanj1f7awoAemIO Ak1fOJFNn7AFviy5bkRj7pgt3Ni9rq0Xfv2do7hv5AC7SVvfRbZJwgZfEERUeVXp50Lz cWWV0smg7O+AiloQPbT7qUtcYj6V2L4/cUusaha/HfIYiYIrDJJRFG2MbeiEXwEetty8 J1Wc63TDnuKu+NJxifrEwSWWJZa8Ar+ZyOx4WBEnaVFcOpuvsnqmMU1HkxtjHlRJQ9iz H0RUZ0ujRpigGUugbvNXCwP2kHE/9O7b+6vsbgiybAkwVO+u9tNSvNsf6tEkhO9hLpxA ux0g== X-Forwarded-Encrypted: i=1; AJvYcCV3qhobE08PfrTvW30TY7DCtVdVhmj3h/tVheoAQNU7IwjHpjDO1jmmUfY8HWpmx/54MqwGfA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyWG8wci5AylFBzp+9DnvWlb0zGblXniUtX7OLAbtfGNZIHnPi9 /egKRfMEQVyaORgmytFHBX4VuaxQ4xkbP7KQkxVD+muhmcM7x2A7rOEStIAb6ztYZwpJURSWPzJ DFhABI5hle197LbsYYAbfSWlF3famNNQ= X-Gm-Gg: ASbGncugG7YZA03eW7AwXuh9i8v5IueuXtqltW/PLVVxS7QZypscKW9Yhx10avN+HRH iUu2KQY3+sRDFLFG5Jo4mEuK7kdXa3vR0IRNjmUdL7A5EI0eVKdQrGrEWmA0KX9nBOlefB6xthE 4Ino1q7A5dpDeGtksSx7UT33S5aME4I944mdKFq06j3ii54w== X-Google-Smtp-Source: AGHT+IE56+RLPSfML+Xd0OaWFjUO9QjXgrL84sBVogETXzi9i5s0kx465Pjhs3KgfqHNk0vWoOfpmdrTi6t6K1DU6Q4= X-Received: by 2002:a05:6122:1d94:b0:52f:2a3:4bd6 with SMTP id 71dfb90a1353d-53080f8b443mr4860758e0c.3.1748636178553; Fri, 30 May 2025 13:16:18 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN> <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> <8634cmvhil.fsf@HIDDEN> <7489261d-c328-29dd-d611-42c7bf27b60a@HIDDEN> In-Reply-To: <7489261d-c328-29dd-d611-42c7bf27b60a@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Fri, 30 May 2025 16:16:07 -0400 X-Gm-Features: AX0GCFs90R-wrMSy_sz3hwWkuc8a0dYsWrMibBV3iWiqr0B1oqolqe6n5XsXg1I Message-ID: <CAN+1HboFq=Kciky+sGXsOCMy-p6xgfj3KScMS_4jhmMAKPdFkw@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width To: Jim Porter <jporterbugs@HIDDEN> Content-Type: multipart/alternative; boundary="00000000000043a0b50636601662" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: Eli Zaretskii <eliz@HIDDEN>, 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --00000000000043a0b50636601662 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, May 30, 2025 at 4:01=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN> = wrote: > On 5/29/2025 9:39 PM, Eli Zaretskii wrote: > > If the string's text is already in a buffer, we have > > buffer-text-pixel-size and window-text-pixel-size for that purpose. > > If the text is not in any buffer, then string-pixel-width should do > > the job, and do it well. In particular, it strives to turn on/off all > > the features that affect display as they are in the original buffer > > (which can be passed to it as an optional argument), and applies all > > the buffer-local settings that could matter. This includes face > > remapping (which is how text-scaling is implemented). > > > > So I still don't understand the nature of the problem. > > The problem was simply that the original script to reproduce the issue > didn't pass the optional buffer argument to 'string-pixel-width', so the > relevant buffer-local settings (face remapping) weren't used. Instead, > the original script tried to approximate the remapping using its own > calculations which weren't quite the same as the display engine. > Indeed. To be fair, I was trying to make this work for Emacs < 31 but I won't bother anymore. The new features and all the bug fixes in vtable (a lot of them), will be Emacs 31, IMO. --00000000000043a0b50636601662 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Fri, May 30, 2025 at 4:01=E2=80=AFPM Jim Porter <<a href=3D"mailto:jp= orterbugs@HIDDEN">jporterbugs@HIDDEN</a>> wrote:</span></div></div= ><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmai= l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20= 4,204);padding-left:1ex">On 5/29/2025 9:39 PM, Eli Zaretskii wrote:<br> > If the string's text is already in a buffer, we have<br> > buffer-text-pixel-size and window-text-pixel-size for that purpose.<br= > > If the text is not in any buffer, then string-pixel-width should do<br= > > the job, and do it well.=C2=A0 In particular, it strives to turn on/of= f all<br> > the features that affect display as they are in the original buffer<br= > > (which can be passed to it as an optional argument), and applies all<b= r> > the buffer-local settings that could matter.=C2=A0 This includes face<= br> > remapping (which is how text-scaling is implemented).<br> > <br> > So I still don't understand the nature of the problem.<br> <br> The problem was simply that the original script to reproduce the issue <br> didn't pass the optional buffer argument to 'string-pixel-width'= ;, so the <br> relevant buffer-local settings (face remapping) weren't used. Instead, = <br> the original script tried to approximate the remapping using its own <br> calculations which weren't quite the same as the display engine.<br></b= lockquote><div><br></div><div class=3D"gmail_default" style=3D"font-family:= monospace">Indeed.=C2=A0 To be fair, I was trying to make this work for Ema= cs < 31 but I won't bother anymore.=C2=A0 The new features and all t= he bug fixes in vtable (a lot of them), will be Emacs 31, IMO.</div></div><= /div> --00000000000043a0b50636601662--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 30 May 2025 20:01:40 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri May 30 16:01:40 2025 Received: from localhost ([127.0.0.1]:51020 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uL5vA-00007l-19 for submit <at> debbugs.gnu.org; Fri, 30 May 2025 16:01:40 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:45536) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>) id 1uL5v8-00007H-0j for 78621 <at> debbugs.gnu.org; Fri, 30 May 2025 16:01:38 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-312116d75a6so2159262a91.3 for <78621 <at> debbugs.gnu.org>; Fri, 30 May 2025 13:01:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748635292; x=1749240092; darn=debbugs.gnu.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=RhF6IPaWXHvm323YvW/FBO7dbFCLhQGwBqqpqmL4u1I=; b=ixHYKirz78Nsv3EyBFFnwyaLzgnBkP92HuyTUiia955UHvrHu+2PmnobS2JrVNpI8q TEofLN9rVx9K8qQ4xvbRmLoqpAXD01MYnBsCUWZzWlbiCLDhyS4r7R0GsktZgdqUE657 9omELGHpxPCacZOz7R+04bTfR3y+tfOtnmDN09yicLQwp6gTmRc8Z/ptVI00ZuZYApGv 24pZOmZcJWu1kqdFNOfHx1CNupD7A8onaN903OA8TWRC4g/azyr1kX9d0cUokTFQeWTU 6ofR6ibHFEWPzFaa7leD7iSey4NydtXwRE8IIvkd54+b0QKDyefwnK2Dl8EiW24AlOCP 5AYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748635292; x=1749240092; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RhF6IPaWXHvm323YvW/FBO7dbFCLhQGwBqqpqmL4u1I=; b=kpNF6OVF5C8DKeO4lmhtoiAqSQPMQoD87uhAG8GLqGg34TgyG8PotHHX9LwYt+2G3M GVeHfvsDNpITjFhZyKuSljyKfRtjnW/TLTbKkHhdNzVF1S+fEp2BLI1iPBRZE0Ac/75T kyiOpMqsqHQQsnjknBBV5Xu2PYzpeE5/6GLw5urTa5uuhtjunUcBRWKUP2Pc+t3VppvW Ykl16G12k3P3ZcAa5NH1ogS0CyoE9ipMubhirKWzMxFf5h49PKk9CbokFbmK4T2WGxg0 a0yoB6Kmf3TxhsFGu6AqWyQbAMYhf/0j1rNaUNvbpGSt+BZHBS2/RUgQ38kGWF+2rkop HiyA== X-Forwarded-Encrypted: i=1; AJvYcCWZm053gg3fZSIS3nYKoOlbVAUUruMY4VAhiwuPBHVwsQawRNnGoIUk3q+NrRWGb1bQiOlJ1A==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yx6pURpngTCA14xEp31yRu2UBOh1nQhpvVTVixI8zJt2/7Xjrxr gbDAjRwgLR/pJRmuyoF8fWspv3vOFlbf/DGbjRsWSdH5qaHXDENv3M53 X-Gm-Gg: ASbGncv2vTMDiWAGXi6LQfT5MemLsFCEBNWIMhWEs0F+jLECqxxAX88Qpq/ycQzdaqU dR9+RsGvJLbCFsVRP40NuQYCs/POeRPrvEED/eVli+obKG8reLPVJaoJd2QLKxZjsK5exPxyHqD v4Jex0a5E/aGLVApG2cNtn8PB2HlKZesC7NTG7j4c9lofUwNrDoYUKzfr+jb86qKHQ0Sz7eahoQ CfuTqytz+laIDLTI2/Au5kTR6XyBGsqg8YXo9JfwlVm5aeTtLF2GbZBUqhYpi+k1XTi64ARdyrj cXgG7Mvj92ZxEjb/aruJBiRN5uPEj7+iwxyupevv/Q+VTUG2Tvdwd+6SkC9BOp62KqNmcX85aQF iMuIEIeNqItigfjevLkfhY1SlHmLzTuo= X-Google-Smtp-Source: AGHT+IFaXycUfGE4P2dxjCKgLJYKTQUr5R6Ys5rCbPWj4CHxlmRzolIo5JdC75fcktmpfOayLcmrsQ== X-Received: by 2002:a17:90b:558c:b0:311:c93b:3ca2 with SMTP id 98e67ed59e1d1-3124150cd9bmr6274351a91.6.1748635291671; Fri, 30 May 2025 13:01:31 -0700 (PDT) Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com. [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-3124e29f8aasm1737706a91.8.2025.05.30.13.01.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 May 2025 13:01:31 -0700 (PDT) Message-ID: <7489261d-c328-29dd-d611-42c7bf27b60a@HIDDEN> Date: Fri, 30 May 2025 13:01:30 -0700 MIME-Version: 1.0 Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width Content-Language: en-US To: Eli Zaretskii <eliz@HIDDEN> References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN> <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> <8634cmvhil.fsf@HIDDEN> From: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <8634cmvhil.fsf@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: shipmints@HIDDEN, 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On 5/29/2025 9:39 PM, Eli Zaretskii wrote: > If the string's text is already in a buffer, we have > buffer-text-pixel-size and window-text-pixel-size for that purpose. > If the text is not in any buffer, then string-pixel-width should do > the job, and do it well. In particular, it strives to turn on/off all > the features that affect display as they are in the original buffer > (which can be passed to it as an optional argument), and applies all > the buffer-local settings that could matter. This includes face > remapping (which is how text-scaling is implemented). > > So I still don't understand the nature of the problem. The problem was simply that the original script to reproduce the issue didn't pass the optional buffer argument to 'string-pixel-width', so the relevant buffer-local settings (face remapping) weren't used. Instead, the original script tried to approximate the remapping using its own calculations which weren't quite the same as the display engine.
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 30 May 2025 04:39:57 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri May 30 00:39:57 2025 Received: from localhost ([127.0.0.1]:43184 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKrXA-0003eD-MQ for submit <at> debbugs.gnu.org; Fri, 30 May 2025 00:39:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45112) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uKrX7-0003dj-Vm for 78621 <at> debbugs.gnu.org; Fri, 30 May 2025 00:39:54 -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 1uKrX2-0006tC-La; Fri, 30 May 2025 00:39:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=RYWpIRCNlMFZzjmFOR1x0QKu+hyLWUWG29reZMRqJHI=; b=eu5YvSqySJAP 6ZyPiGJaZsfbLCnUasXNFySHYQz8kyvf9JeCNG6KrQAlJCPG6BIcvNbk+mlEaDisznYTHOsrD4SBX geY3xko5U7kTk83LlQpesuuyqUGq0AYNdrgUNLLpRJzrY/n12BozTanPCCQ+RI95yKwKJmz72afRp vjdn4lpgIGjvCcS0IlMbC5hRLxaJjc+hTJUgP3GNLHDPKGKL/4GrvM2HYoGwxc8VF5E76C9Tg6o8g 0S3tYvewBpBDm2c/IKv1B/glOHSxTd8csFfG/7l4qqqptE2hJSGRi8zdVx/QPWAoHQ/k83LpoXFrz 100F7WM+sopFydou04dHHg==; Date: Fri, 30 May 2025 07:39:46 +0300 Message-Id: <8634cmvhil.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> (message from Jim Porter on Thu, 29 May 2025 09:38:15 -0700) Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN> <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78621 Cc: shipmints@HIDDEN, 78621 <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 (---) > Date: Thu, 29 May 2025 09:38:15 -0700 > Cc: shipmints@HIDDEN, 78621 <at> debbugs.gnu.org > From: Jim Porter <jporterbugs@HIDDEN> > > On 5/28/2025 11:18 PM, Eli Zaretskii wrote: > > I don't follow this argument. string-pixel-width uses the display > > code, so it should return the exact same value in pixels as what the > > actual display produces when the same characters are shown on the > > screen. So whatever rounding happens (which I don't think it does, > > since font glyphs have integer advance width), it happens the same in > > both cases and should yield the same values. Or what am I missing? > > The short version is that we should pass the current buffer to > 'string-pixel-width' so that we can just use the display code to compute > the string's width with all the remappings applied, rather than having > the display code compute it without remappings and then trying to guess > what the remapping would do to the width. If the string's text is already in a buffer, we have buffer-text-pixel-size and window-text-pixel-size for that purpose. If the text is not in any buffer, then string-pixel-width should do the job, and do it well. In particular, it strives to turn on/off all the features that affect display as they are in the original buffer (which can be passed to it as an optional argument), and applies all the buffer-local settings that could matter. This includes face remapping (which is how text-scaling is implemented). So I still don't understand the nature of the problem. It is possible that string-pixel-width should take some additional settings into consideration, but in that case, we need to identify which settings it currently ignores, and add that to the function to fix it. However, your argument is not specific to some setting that isn't taken into consideration, it is a general one, and that I don't understand, for the simple reason that string-pixel-width uses the exact code used for displaying text. > The problem is that 'text-scale-increase' modifies the text size by a > particular ratio; when zooming out by one step, that defaults to 1 / > text-scale-mode-step, or 5/6. text-scale-increase does that by using face-remapping-alist, which string-pixel-width accounts for (at least is supposed to). > My fixed-pitch font is 8 pixels wide at the default size, so zooming out > one step means the pixel width per char is 8 * 5/6 = 6.666. I don't think this is true. What face-remapping-alist does is it asks Emacs to find a variant of the font with smaller or larger size. Emacs then asks the font back-end to find a font that best fits that size, and uses that. The size of the font is not necessarily what you compute above, it is the best fit for that number. But this is a tangent, see below. > Since the advance width is an integer, we round up to 7 pixels. The > original code works for fixed-pitch fonts since > '(default-font-width)' returns 7 in this case, so the original > expression: > > (ceiling (* (string-pixel-width str) > (/ (float (default-font-width)) (frame-char-width)))) > > is equivalent (only in this simple case) to: > > (* (string-width str) (default-font-width)) > > Hopefully that all makes sense. > > For variable-pitch fonts, this is more complex. Our zoom ratio is still > 5/6, but we apply that ratio per-character, rounding each time. For the > string "hi there", the pixel widths of each character are: > > Scale h i _ t h e r e Total > 0 8 4 4 5 8 8 5 8 50 > -1 7 3 4 4 7 7 5 7 44 > > Since the error introduced by rounding each character is a bit > different, we get a different result between the width from the display > engine compared to the approximation in the first expression above where > we round only once at the very end. Why do you say that the result is different from the actual display? Do you perhaps assume that string-pixel-width adds the character widths "by hand", and thus accrues those round-off errors? If so, that's not what string-pixel-width does. It actually computes the layout of the string's text as it would be shown on display, using the exact same code from the display engine used for actual display. IOW, the pixel-width of the text is measured by the display layout code, including asking the (scaled-up or scaled-down) font for the metrics of the glyph of each character in the string, and computing the sum of those metrics exactly like we do for displaying them. So any round-off, such as it is, should be identical both on display and in the results of string-pixel-width. Take a look at window-text-pixel-size (the primitive which string-pixel-width calls) to see how it does its job by calling the display-engine functions. The only way I can understand your argument is that the original recipe didn't pass the buffer to string-pixel-width (that additional argument is new in Emacs 31), which might be the reason why it attempted to account for text-scaling "by hand". But that's not how this issue should be solved, which is why we added that argument in Emacs 31. If I'm missing something in the above reasoning, please point that out, because I still think string-pixel-width should do its job in this situation (barring any bugs in it that we should identify and fix).
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Ship Mints <shipmints@HIDDEN>
to control <at> debbugs.gnu.org
.
Full text available.Ship Mints <shipmints@HIDDEN>
to control <at> debbugs.gnu.org
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 17:23:27 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 13:23:27 2025 Received: from localhost ([127.0.0.1]:38371 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKgyV-0003sr-5m for submit <at> debbugs.gnu.org; Thu, 29 May 2025 13:23:27 -0400 Received: from mail-ua1-x92c.google.com ([2607:f8b0:4864:20::92c]:56686) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKgyQ-0003sD-3o for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 13:23:23 -0400 Received: by mail-ua1-x92c.google.com with SMTP id a1e0cc1a2514c-87dfd390745so574168241.1 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 10:23:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748539396; x=1749144196; darn=debbugs.gnu.org; h=cc:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=IL7h9pqcTvxt0rbrc83IS8W80hbsRv1ZL+9V4nFWbs4=; b=XffMXUhPkdyWandAOoVBhfqtwwZzibrZZUG+CSzHzNNeDGQfeQJuAciPllBLDLO7SH jFc1+fzVmAYXmgicTFthrWN+uGAKlbCUD8kXABKT6Iqyl9bO+6fJXW19GWB1r0r6zY6J p3j+djOI7S7JSBlYh7pK3X7BO6AvhL4Nga0kREy7KkoHni/0qmnMLtztwxRAVi4DW1ft DiUtHOdzlVwNUt0ZhJqKOGnRCJdoyuBrxcQB1cDV1ziEES1dn5Opl6rThfsGopOir3Fw uJqgT0IBQu95KWy8BUbL8P9lVXzfECe7z1F6ACWsO7WaqoWE0Ch6+59EEa9s6i5/mukY wc1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748539396; x=1749144196; h=cc:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IL7h9pqcTvxt0rbrc83IS8W80hbsRv1ZL+9V4nFWbs4=; b=BOvrmpBhtUh4Z/hu32wwafrk4ZSeanmVYMC1aJD7MFXAN2eurB9DNb8d/57UCVdkJv fzl3u6usu6qygZMVH95yE/wc7+28fV+zBQzsEA5mRFsf+5GYm09hjjTvJ/zOSMhOeIvw d5HSVOzcKQEcdsuRd5xGkglQE3wny5XqWSb8JZTb0aDw6bJ20ZYVcO4d8JVxoid4HLn6 QxJVvE7ex4DoSL6gUMuy+gGuEg3G8nZisbbtHea7EzvT+VwfbUt7HeE+CDKD4lrguzMw wjlvCsMcq1q2B2cayy+4ALmEwdKtkjFxb33Lf0PkRqIVKCAeqAKRgmX9jC69wFI54mg/ CaRQ== X-Gm-Message-State: AOJu0YyWZMxdcWwjmm9c5b8a47EyWeUYRjq6L6MtCDzmNIYnRVVfDqQK V9OU+daJtbaHnDy9qRNFt4Y1YVyuQ1IpHmmz+qvhwblwFqWELF00vQIP+V3/13LTCyADQHC+YKB EZl4qI6irlDCVebvT1MyTAcKi4LMxXTm1vrc5 X-Gm-Gg: ASbGnctqX73YN4YPrKgnHNR5RHX98+2JHVwlqjSGNyoX7czWPkgSchsnYhOW+lS1il4 ukS2eljEJqnwxZvId0ATE0bD0aobr2g3k0zg7BSSH6taAdawOHCDw/Y/Hr1WfgiPhtlTucGbcEQ zhADKOG6tDLEiuRw+PG71wEoWhddfpCwYUvcc= X-Received: by 2002:a05:6102:8028:b0:4db:154e:ad1d with SMTP id ada2fe7eead31-4e6e40d5e5amt769721137.2.1748539396134; Thu, 29 May 2025 10:23:16 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN> <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN> <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN> In-Reply-To: <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Thu, 29 May 2025 13:23:04 -0400 X-Gm-Features: AX0GCFuWBBnPWVBnueQk32hBqnaEDJbEd45a_mm2bF2iFCuHG_19LG_9JI9W9ds Message-ID: <CAN+1HbqQaCU3TqdTGMDzLyB7A944BhU39ak6Ha12XHchLhk3sA@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width Content-Type: multipart/alternative; boundary="0000000000009675890636498d6b" X-Spam-Score: 2.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: tags 78621 notabug close 78621 On Thu, May 29, 2025 at 12:50 PM Ship Mints wrote: > tags 78621 notabug > close 78621 > > On Thu, May 29, 2025 at 12:41 PM Ship Mints wrote: > >> On Thu, May 29, 2025 at 12:38 PM Jim Porter >> wrote: >> >>> On 5/28/2025 11:18 PM, Eli Zaretskii [...] Content analysis details: (2.2 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.0 FORGED_GMAIL_RCVD 'From' gmail.com does not match 'Received' headers 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shipmints[at]gmail.com) 1.2 MISSING_HEADERS Missing To: header 0.0 HTML_MESSAGE BODY: HTML included in message -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:92c listed in] [list.dnswl.org] X-Debbugs-Envelope-To: 78621 Cc: 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: 1.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: tags 78621 notabug close 78621 On Thu, May 29, 2025 at 12:50 PM Ship Mints wrote: > tags 78621 notabug > close 78621 > > On Thu, May 29, 2025 at 12:41 PM Ship Mints wrote: > >> On Thu, May 29, 2025 at 12:38 PM Jim Porter >> wrote: >> >>> On 5/28/2025 11:18 PM, Eli Zaretskii [...] Content analysis details: (1.2 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:92c listed in] [list.dnswl.org] 1.0 FORGED_GMAIL_RCVD 'From' gmail.com does not match 'Received' headers 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shipmints[at]gmail.com) 1.2 MISSING_HEADERS Missing To: header 0.0 HTML_MESSAGE BODY: HTML included in message -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager --0000000000009675890636498d6b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable tags 78621 notabug close 78621 On Thu, May 29, 2025 at 12:50=E2=80=AFPM Ship Mints <shipmints@HIDDEN> w= rote: > tags 78621 notabug > close 78621 > > On Thu, May 29, 2025 at 12:41=E2=80=AFPM Ship Mints <shipmints@HIDDEN>= wrote: > >> On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN= om> >> wrote: >> >>> On 5/28/2025 11:18 PM, Eli Zaretskii wrote: >>> > I don't follow this argument. string-pixel-width uses the display >>> > code, so it should return the exact same value in pixels as what the >>> > actual display produces when the same characters are shown on the >>> > screen. So whatever rounding happens (which I don't think it does, >>> > since font glyphs have integer advance width), it happens the same in >>> > both cases and should yield the same values. Or what am I missing? >>> >>> The short version is that we should pass the current buffer to >>> 'string-pixel-width' so that we can just use the display code to comput= e >>> the string's width with all the remappings applied, rather than having >>> the display code compute it without remappings and then trying to guess >>> what the remapping would do to the width. >>> >>> Here's a longer version if it helps: >>> >>> The problem is that 'text-scale-increase' modifies the text size by a >>> particular ratio; when zooming out by one step, that defaults to 1 / >>> text-scale-mode-step, or 5/6. >>> >>> My fixed-pitch font is 8 pixels wide at the default size, so zooming ou= t >>> one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the >>> advance width is an integer, we round up to 7 pixels. The original code >>> works for fixed-pitch fonts since '(default-font-width)' returns 7 in >>> this case, so the original expression: >>> >>> (ceiling (* (string-pixel-width str) >>> (/ (float (default-font-width)) (frame-char-width)))) >>> >>> is equivalent (only in this simple case) to: >>> >>> (* (string-width str) (default-font-width)) >>> >>> Hopefully that all makes sense. >>> >>> For variable-pitch fonts, this is more complex. Our zoom ratio is still >>> 5/6, but we apply that ratio per-character, rounding each time. For the >>> string "hi there", the pixel widths of each character are: >>> >>> Scale h i _ t h e r e Total >>> 0 8 4 4 5 8 8 5 8 50 >>> -1 7 3 4 4 7 7 5 7 44 >>> >>> Since the error introduced by rounding each character is a bit >>> different, we get a different result between the width from the display >>> engine compared to the approximation in the first expression above wher= e >>> we round only once at the very end. >>> >> >> Yes, indeed. No more estimation. Just use the display engine directly. >> > --0000000000009675890636498d6b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace">tags 78621 notabug<br>close 78621<br></div></div><br><d= iv class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gm= ail_attr">On Thu, May 29, 2025 at 12:50=E2=80=AFPM Ship Mints <<a href= =3D"mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:<br></div= ><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border= -left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div st= yle=3D"font-family:monospace">tags=C2=A078621 notabug</div><div style=3D"fo= nt-family:monospace">close 78621</div></div><br><div class=3D"gmail_quote">= <div dir=3D"ltr" class=3D"gmail_attr">On Thu, May 29, 2025 at 12:41=E2=80= =AFPM Ship Mints <<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blan= k">shipmints@HIDDEN</a>> wrote:<br></div><blockquote class=3D"gmail_q= uote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,2= 04);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-= family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">On= Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter <<a href=3D"mailto:jpo= rterbugs@HIDDEN" target=3D"_blank">jporterbugs@HIDDEN</a>> wrote:<= /span></div></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quo= te" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204= );padding-left:1ex">On 5/28/2025 11:18 PM, Eli Zaretskii wrote:<br> > I don't follow this argument.=C2=A0 string-pixel-width uses the di= splay<br> > code, so it should return the exact same value in pixels as what the<b= r> > actual display produces when the same characters are shown on the<br> > screen.=C2=A0 So whatever rounding happens (which I don't think it= does,<br> > since font glyphs have integer advance width), it happens the same in<= br> > both cases and should yield the same values.=C2=A0 Or what am I missin= g?<br> <br> The short version is that we should pass the current buffer to <br> 'string-pixel-width' so that we can just use the display code to co= mpute <br> the string's width with all the remappings applied, rather than having = <br> the display code compute it without remappings and then trying to guess <br= > what the remapping would do to the width.<br> <br> Here's a longer version if it helps:<br> <br> The problem is that 'text-scale-increase' modifies the text size by= a <br> particular ratio; when zooming out by one step, that defaults to 1 / <br> text-scale-mode-step, or 5/6.<br> <br> My fixed-pitch font is 8 pixels wide at the default size, so zooming out <b= r> one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the <br= > advance width is an integer, we round up to 7 pixels. The original code <br= > works for fixed-pitch fonts since '(default-font-width)' returns 7 = in <br> this case, so the original expression:<br> <br> =C2=A0 =C2=A0(ceiling (* (string-pixel-width str)<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(/ (float (default-f= ont-width)) (frame-char-width))))<br> <br> is equivalent (only in this simple case) to:<br> <br> =C2=A0 =C2=A0(* (string-width str) (default-font-width))<br> <br> Hopefully that all makes sense.<br> <br> For variable-pitch fonts, this is more complex. Our zoom ratio is still <br= > 5/6, but we apply that ratio per-character, rounding each time. For the <br= > string "hi there", the pixel widths of each character are:<br> <br> =C2=A0 =C2=A0Scale=C2=A0 =C2=A0h=C2=A0 i=C2=A0 _=C2=A0 t=C2=A0 h=C2=A0 e=C2= =A0 r=C2=A0 e=C2=A0 =C2=A0Total<br> =C2=A0 =C2=A0 =C2=A0 =C2=A00=C2=A0 =C2=A08=C2=A0 4=C2=A0 4=C2=A0 5=C2=A0 8= =C2=A0 8=C2=A0 5=C2=A0 8=C2=A0 =C2=A0 =C2=A0 50<br> =C2=A0 =C2=A0 =C2=A0 -1=C2=A0 =C2=A07=C2=A0 3=C2=A0 4=C2=A0 4=C2=A0 7=C2=A0= 7=C2=A0 5=C2=A0 7=C2=A0 =C2=A0 =C2=A0 44<br> <br> Since the error introduced by rounding each character is a bit <br> different, we get a different result between the width from the display <br= > engine compared to the approximation in the first expression above where <b= r> we round only once at the very end.<br></blockquote><div><br></div><div sty= le=3D"font-family:monospace">Yes, indeed.=C2=A0 No more estimation.=C2=A0 J= ust use the display engine directly.</div></div></div> </blockquote></div> </blockquote></div></div> --0000000000009675890636498d6b--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 17:14:47 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 13:14:47 2025 Received: from localhost ([127.0.0.1]:38304 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKgq6-0003CE-O4 for submit <at> debbugs.gnu.org; Thu, 29 May 2025 13:14:46 -0400 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]:34667) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <juri@HIDDEN>) id 1uKgq3-0003Bk-Ks for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 13:14:44 -0400 Received: by mail.gandi.net (Postfix) with ESMTPSA id 0169041DF1; Thu, 29 May 2025 17:14:34 +0000 (UTC) From: Juri Linkov <juri@HIDDEN> To: Ship Mints <shipmints@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width In-Reply-To: <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN> Organization: LINKOV.NET References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN> <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN> <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN> Date: Thu, 29 May 2025 20:13:40 +0300 Message-ID: <87frgn9w6k.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvieejtdculddtuddrgeefvddrtddtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefujghofhffkfgfgggtsehttdertddtredtnecuhfhrohhmpefluhhrihcunfhinhhkohhvuceojhhurhhisehlihhnkhhovhdrnhgvtheqnecuggftrfgrthhtvghrnhepffegteefveelhfeljeefueehieduiedtfffhuddtkeeffffghfevheetgeeukeehnecukfhppeeluddruddvledruddtfedrvdejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledurdduvdelrddutdefrddvjedphhgvlhhopehmrghilhdrghgrnhguihdrnhgvthdpmhgrihhlfhhrohhmpehjuhhriheslhhinhhkohhvrdhnvghtpdhnsggprhgtphhtthhopedvpdhrtghpthhtohepjeekiedvudesuggvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtthhopehshhhiphhmihhnthhssehgmhgrihhlrdgtohhm X-GND-Sasl: juri@HIDDEN X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 78621 Cc: 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) > tags 78621 notabug > close 78621 This works only when you add Bcc: control <at> debbugs.gnu.org
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 16:50:43 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 12:50:43 2025 Received: from localhost ([127.0.0.1]:38157 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKgSo-0001UD-PL for submit <at> debbugs.gnu.org; Thu, 29 May 2025 12:50:43 -0400 Received: from mail-vk1-xa2a.google.com ([2607:f8b0:4864:20::a2a]:59648) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKgSm-0001Ta-Nz for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 12:50:41 -0400 Received: by mail-vk1-xa2a.google.com with SMTP id 71dfb90a1353d-527b70bd90dso376812e0c.3 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 09:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748537435; x=1749142235; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Jm0v9Gi4FG896CHXG7b4Wk0+3rY2qnj+kgRAKl9nYJA=; b=ag3In9sJm2w7OKEFVpQzP1QCukCOpqOMuprlB8niDVcnxeX2oCgUPWYsDD3TUuxUeI u4GkQcCKM3nXpBna2Yt9h1OHQ9oNactdxtPPLiFPJ/IR9RamOCkJyMRxnOOT48tY9aBT EkCsxsJFVE4qrpYNVDHJf/JjaB2IpzAmLGJvQpk2Zw2I2v7OOaGLLR2TAZJcTfbfhvJ0 A3RUc1/6RANs4VVn61qGEN3/nG44jTX1ceUQ/9bleNxaElsEuvdJDs6G25Gu9Y9hIOOk P3J0bpQQHT7a74j2ITe4I8meCTcxXRKxd5v9OuvQ0vDYvctk+WSY31POGhwm32cji+nq q7tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748537435; x=1749142235; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Jm0v9Gi4FG896CHXG7b4Wk0+3rY2qnj+kgRAKl9nYJA=; b=Dz8fL8gfTkszeOW6onY8dfElk9qfhoXD6uvaOO1mVKpU+43nck9XJsnAjPJBcRsDzL Dqt7rAo6D9bHy/Tb/qAfEc+pMXhAgev7CXdSaztUxY9JgT8ELpqUTCy8I3GB56dvXO2H d4vgO0mgUn2nRBEdlPNB1Pe8M9s+k/Mbp4e4AUusRITfGaSvidF82vL8pC90sosWn9tp k+Il5NVlsHXrhZTLUGY0bKbFEhXCzO21IRPz05Qs1sx3AjP5DpdfBx6Y6kEmaUim2h70 iBy438KxYIT4ecROdYu809K7jOvztJHGtCP2+vW77H+3qncSMC3izZVEcZ7XHZgrTSXC aqRQ== X-Forwarded-Encrypted: i=1; AJvYcCVfL4Y5ZJxsnxZZX8Uqoc3U4OpYW6cuGJgm6m3eQUP7Nyoi+etudiNV5YwYkS9pqztr3i8RJg==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yx6hbnNNBx3n1Q796EBA2Is/V/2kbWhiZiMtKkQmp6Mht+tJPCP +xctICnoDjNO88KQgvOqtuEvNA4azS8/FnSGbc6Q7pJbxPzTJg1YHAVeq/48+DAdWeqoEK42Qfz kvKR6CgKC/tdxl+K/4Oajc0B1W4tRPrI= X-Gm-Gg: ASbGncvIGDBTltkVoVXHnGWW4lh0iuoor8O106o5DMbvkFrm9wQKhf4RyhgAIRH49xZ 2OJowbdbXx+0S141z4hygecAa4LrMmmKesy/6tehiEa1hbcVesl3VMyjudVqkEJvuLBm/OA0eVR PcaN6PswklNrCVGWlCMKJJ8sjJfmKGYfSgFvE= X-Google-Smtp-Source: AGHT+IF2cTg/M3COo7h3U70iH5Ld1f9uhlWMtXrLf9Q5mLQETe14WDXLSLdUBYj/j0v/gZrFm1PS95ZoWF9Hje5uGH0= X-Received: by 2002:a05:6122:2a50:b0:518:6286:87a4 with SMTP id 71dfb90a1353d-53080f9ff0amr192591e0c.4.1748537434826; Thu, 29 May 2025 09:50:34 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN> <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN> In-Reply-To: <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Thu, 29 May 2025 12:50:22 -0400 X-Gm-Features: AX0GCFsEbEQAWc5BqsaUXxn5xsF4kxLKCFHapmtahSsuI5-SkfTzci43t0rCPnM Message-ID: <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width To: Jim Porter <jporterbugs@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000adee3e0636491869" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: Eli Zaretskii <eliz@HIDDEN>, 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000adee3e0636491869 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable tags 78621 notabug close 78621 On Thu, May 29, 2025 at 12:41=E2=80=AFPM Ship Mints <shipmints@HIDDEN> w= rote: > On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN= m> wrote: > >> On 5/28/2025 11:18 PM, Eli Zaretskii wrote: >> > I don't follow this argument. string-pixel-width uses the display >> > code, so it should return the exact same value in pixels as what the >> > actual display produces when the same characters are shown on the >> > screen. So whatever rounding happens (which I don't think it does, >> > since font glyphs have integer advance width), it happens the same in >> > both cases and should yield the same values. Or what am I missing? >> >> The short version is that we should pass the current buffer to >> 'string-pixel-width' so that we can just use the display code to compute >> the string's width with all the remappings applied, rather than having >> the display code compute it without remappings and then trying to guess >> what the remapping would do to the width. >> >> Here's a longer version if it helps: >> >> The problem is that 'text-scale-increase' modifies the text size by a >> particular ratio; when zooming out by one step, that defaults to 1 / >> text-scale-mode-step, or 5/6. >> >> My fixed-pitch font is 8 pixels wide at the default size, so zooming out >> one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the >> advance width is an integer, we round up to 7 pixels. The original code >> works for fixed-pitch fonts since '(default-font-width)' returns 7 in >> this case, so the original expression: >> >> (ceiling (* (string-pixel-width str) >> (/ (float (default-font-width)) (frame-char-width)))) >> >> is equivalent (only in this simple case) to: >> >> (* (string-width str) (default-font-width)) >> >> Hopefully that all makes sense. >> >> For variable-pitch fonts, this is more complex. Our zoom ratio is still >> 5/6, but we apply that ratio per-character, rounding each time. For the >> string "hi there", the pixel widths of each character are: >> >> Scale h i _ t h e r e Total >> 0 8 4 4 5 8 8 5 8 50 >> -1 7 3 4 4 7 7 5 7 44 >> >> Since the error introduced by rounding each character is a bit >> different, we get a different result between the width from the display >> engine compared to the approximation in the first expression above where >> we round only once at the very end. >> > > Yes, indeed. No more estimation. Just use the display engine directly. > --000000000000adee3e0636491869 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac= e">tags=C2=A078621 notabug</div><div class=3D"gmail_default" style=3D"font-= family:monospace">close 78621</div></div><br><div class=3D"gmail_quote gmai= l_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, May 29, 20= 25 at 12:41=E2=80=AFPM Ship Mints <<a href=3D"mailto:shipmints@HIDDEN= ">shipmints@HIDDEN</a>> wrote:<br></div><blockquote class=3D"gmail_qu= ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20= 4);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_= default" style=3D"font-family:monospace"><span style=3D"font-family:Arial,H= elvetica,sans-serif">On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter &l= t;<a href=3D"mailto:jporterbugs@HIDDEN" target=3D"_blank">jporterbugs@gm= ail.com</a>> wrote:</span></div></div><div class=3D"gmail_quote"><blockq= uote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1p= x solid rgb(204,204,204);padding-left:1ex">On 5/28/2025 11:18 PM, Eli Zaret= skii wrote:<br> > I don't follow this argument.=C2=A0 string-pixel-width uses the di= splay<br> > code, so it should return the exact same value in pixels as what the<b= r> > actual display produces when the same characters are shown on the<br> > screen.=C2=A0 So whatever rounding happens (which I don't think it= does,<br> > since font glyphs have integer advance width), it happens the same in<= br> > both cases and should yield the same values.=C2=A0 Or what am I missin= g?<br> <br> The short version is that we should pass the current buffer to <br> 'string-pixel-width' so that we can just use the display code to co= mpute <br> the string's width with all the remappings applied, rather than having = <br> the display code compute it without remappings and then trying to guess <br= > what the remapping would do to the width.<br> <br> Here's a longer version if it helps:<br> <br> The problem is that 'text-scale-increase' modifies the text size by= a <br> particular ratio; when zooming out by one step, that defaults to 1 / <br> text-scale-mode-step, or 5/6.<br> <br> My fixed-pitch font is 8 pixels wide at the default size, so zooming out <b= r> one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the <br= > advance width is an integer, we round up to 7 pixels. The original code <br= > works for fixed-pitch fonts since '(default-font-width)' returns 7 = in <br> this case, so the original expression:<br> <br> =C2=A0 =C2=A0(ceiling (* (string-pixel-width str)<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(/ (float (default-f= ont-width)) (frame-char-width))))<br> <br> is equivalent (only in this simple case) to:<br> <br> =C2=A0 =C2=A0(* (string-width str) (default-font-width))<br> <br> Hopefully that all makes sense.<br> <br> For variable-pitch fonts, this is more complex. Our zoom ratio is still <br= > 5/6, but we apply that ratio per-character, rounding each time. For the <br= > string "hi there", the pixel widths of each character are:<br> <br> =C2=A0 =C2=A0Scale=C2=A0 =C2=A0h=C2=A0 i=C2=A0 _=C2=A0 t=C2=A0 h=C2=A0 e=C2= =A0 r=C2=A0 e=C2=A0 =C2=A0Total<br> =C2=A0 =C2=A0 =C2=A0 =C2=A00=C2=A0 =C2=A08=C2=A0 4=C2=A0 4=C2=A0 5=C2=A0 8= =C2=A0 8=C2=A0 5=C2=A0 8=C2=A0 =C2=A0 =C2=A0 50<br> =C2=A0 =C2=A0 =C2=A0 -1=C2=A0 =C2=A07=C2=A0 3=C2=A0 4=C2=A0 4=C2=A0 7=C2=A0= 7=C2=A0 5=C2=A0 7=C2=A0 =C2=A0 =C2=A0 44<br> <br> Since the error introduced by rounding each character is a bit <br> different, we get a different result between the width from the display <br= > engine compared to the approximation in the first expression above where <b= r> we round only once at the very end.<br></blockquote><div><br></div><div cla= ss=3D"gmail_default" style=3D"font-family:monospace">Yes, indeed.=C2=A0 No = more estimation.=C2=A0 Just use the display engine directly.</div></div></d= iv> </blockquote></div> --000000000000adee3e0636491869--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 16:42:04 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 12:42:04 2025 Received: from localhost ([127.0.0.1]:38080 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKgKS-0006J5-5M for submit <at> debbugs.gnu.org; Thu, 29 May 2025 12:42:04 -0400 Received: from mail-vk1-xa2f.google.com ([2607:f8b0:4864:20::a2f]:47423) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKgKP-0006IF-T4 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 12:42:02 -0400 Received: by mail-vk1-xa2f.google.com with SMTP id 71dfb90a1353d-51eb1a714bfso695737e0c.3 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 09:42:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748536916; x=1749141716; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ng+rLGgv0qIQLPZuDPaOUBow0EEny9qbEjBYQiDmHC0=; b=eWdhT4dQQmbQmnUCPSHlkeJ4LwiyeZOujJW6KF0xz0fqqFibd52XIQykzL+fvgyI2a 5hmt1pohT/R8kl8UTr0l7wo/0WblD3MqYRQlnSrzvPQnb5NiBKF7EzgLD0CDsWqPPlSX tFCNDhDD/KlQbohT8fqCJ8lMMT5WL15ZtUFThgIAIRRo3RdWJUJwvJMMmh1lHDkPPtIs 9wrt46xbAFon3eY3UwbwHG0QFzldJdRs/LBB1E13pN6WD6fZp6IKJtwSyGzZf/VVb1n5 wPEMMTEJ3t+KZ8MK76EvhJtKwIMYgN8ClUsVL01O3STQGhsG0I1Md+6K+VMn79RiJx7p c2wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748536916; x=1749141716; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ng+rLGgv0qIQLPZuDPaOUBow0EEny9qbEjBYQiDmHC0=; b=WuGYSYjF0uqNQ5A/Bs8N9GxUhyhi9tbTQJkXrmv/BEwYeghNPHihUWSQyTNi0814hg DWtXndmIlDVJKC9yRvTBPJCZf2eke2qb8oA5EbnrBGFYwfFeoqppKGMivTFavbcwdVv+ nHiZiI9t5hpQ1nPosi7mYgCQLYZ4bUcK4rc2GpUfDXJLkQiCSlrqhpuTZ0OCXse/jz2j uIbxiyZXrgDzvI7pFzCTXUhonsmCU6Idl1QpbSrBjwhxltUatlMYshhhJnqGXHEe6uWx dem4PRnTkBfTqBuT3/YCPgNzj37YzvE/lCsq2CljHsL8/5a2Iizb+ZCx6AX4Hq49WGtj e3XA== X-Forwarded-Encrypted: i=1; AJvYcCV7mMOHARcH+yJvdhYo7mnKBMmTZYBmMlybicAqlmciqBD7KuCH6FUFkgxvedrmWG1g+ZhWIA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YznHYMhlGInT65PGXN75nOUQU42g1OcY7LvMTybc3F2tNybTw99 uY7SNPadXmv7uKFbd49ztSekSXDADxqzTFsQhJJVQf5YvV5yhp/Pj1UW8EtHK0Y1VQ3GKgIPDqY Q3AztqFc9MyaB+Ek+YsCtYp3fsyTiXNJxtw== X-Gm-Gg: ASbGnct65xB4vwQepoxyqVt8b/mpTlbI6jG20yrDF3nc3W3g12aWTGh0oehqDI4fIgV BMbny11yRWLQpbtwGdrWWpBAWIyAvC2e0MgneE3MC1d+9oBLcXuKmId8aeQMeeLprVJ15bLKlie JEJ+DvBaZ8JYNkEw7ok7V+PVrDhVvDfIIPF6U= X-Google-Smtp-Source: AGHT+IFcfW+tOwv6VT3Xi3+A8ej2IxSM4SHgIMjt2X1hvMV/xAABSfclB/zBd4yQZmyFqDgAfx7jy7XAAjqRl1z8HfA= X-Received: by 2002:a05:6122:17a1:b0:530:65f0:7fd4 with SMTP id 71dfb90a1353d-53080f57ffamr192637e0c.2.1748536916158; Thu, 29 May 2025 09:41:56 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN> <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> In-Reply-To: <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Thu, 29 May 2025 12:41:45 -0400 X-Gm-Features: AX0GCFsv8XrkjyjxhCa2p167SWyGPUhjzMKOagGBKLMcNvjTTjJOtfyPQhkepWo Message-ID: <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width To: Jim Porter <jporterbugs@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000c3acbb063648f9dc" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: Eli Zaretskii <eliz@HIDDEN>, 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000c3acbb063648f9dc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN>= wrote: > On 5/28/2025 11:18 PM, Eli Zaretskii wrote: > > I don't follow this argument. string-pixel-width uses the display > > code, so it should return the exact same value in pixels as what the > > actual display produces when the same characters are shown on the > > screen. So whatever rounding happens (which I don't think it does, > > since font glyphs have integer advance width), it happens the same in > > both cases and should yield the same values. Or what am I missing? > > The short version is that we should pass the current buffer to > 'string-pixel-width' so that we can just use the display code to compute > the string's width with all the remappings applied, rather than having > the display code compute it without remappings and then trying to guess > what the remapping would do to the width. > > Here's a longer version if it helps: > > The problem is that 'text-scale-increase' modifies the text size by a > particular ratio; when zooming out by one step, that defaults to 1 / > text-scale-mode-step, or 5/6. > > My fixed-pitch font is 8 pixels wide at the default size, so zooming out > one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the > advance width is an integer, we round up to 7 pixels. The original code > works for fixed-pitch fonts since '(default-font-width)' returns 7 in > this case, so the original expression: > > (ceiling (* (string-pixel-width str) > (/ (float (default-font-width)) (frame-char-width)))) > > is equivalent (only in this simple case) to: > > (* (string-width str) (default-font-width)) > > Hopefully that all makes sense. > > For variable-pitch fonts, this is more complex. Our zoom ratio is still > 5/6, but we apply that ratio per-character, rounding each time. For the > string "hi there", the pixel widths of each character are: > > Scale h i _ t h e r e Total > 0 8 4 4 5 8 8 5 8 50 > -1 7 3 4 4 7 7 5 7 44 > > Since the error introduced by rounding each character is a bit > different, we get a different result between the width from the display > engine compared to the approximation in the first expression above where > we round only once at the very end. > Yes, indeed. No more estimation. Just use the display engine directly. --000000000000c3acbb063648f9dc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter <<a href=3D"mailto:j= porterbugs@HIDDEN">jporterbugs@HIDDEN</a>> wrote:</span></div></di= v><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gma= il_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,2= 04,204);padding-left:1ex">On 5/28/2025 11:18 PM, Eli Zaretskii wrote:<br> > I don't follow this argument.=C2=A0 string-pixel-width uses the di= splay<br> > code, so it should return the exact same value in pixels as what the<b= r> > actual display produces when the same characters are shown on the<br> > screen.=C2=A0 So whatever rounding happens (which I don't think it= does,<br> > since font glyphs have integer advance width), it happens the same in<= br> > both cases and should yield the same values.=C2=A0 Or what am I missin= g?<br> <br> The short version is that we should pass the current buffer to <br> 'string-pixel-width' so that we can just use the display code to co= mpute <br> the string's width with all the remappings applied, rather than having = <br> the display code compute it without remappings and then trying to guess <br= > what the remapping would do to the width.<br> <br> Here's a longer version if it helps:<br> <br> The problem is that 'text-scale-increase' modifies the text size by= a <br> particular ratio; when zooming out by one step, that defaults to 1 / <br> text-scale-mode-step, or 5/6.<br> <br> My fixed-pitch font is 8 pixels wide at the default size, so zooming out <b= r> one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the <br= > advance width is an integer, we round up to 7 pixels. The original code <br= > works for fixed-pitch fonts since '(default-font-width)' returns 7 = in <br> this case, so the original expression:<br> <br> =C2=A0 =C2=A0(ceiling (* (string-pixel-width str)<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(/ (float (default-f= ont-width)) (frame-char-width))))<br> <br> is equivalent (only in this simple case) to:<br> <br> =C2=A0 =C2=A0(* (string-width str) (default-font-width))<br> <br> Hopefully that all makes sense.<br> <br> For variable-pitch fonts, this is more complex. Our zoom ratio is still <br= > 5/6, but we apply that ratio per-character, rounding each time. For the <br= > string "hi there", the pixel widths of each character are:<br> <br> =C2=A0 =C2=A0Scale=C2=A0 =C2=A0h=C2=A0 i=C2=A0 _=C2=A0 t=C2=A0 h=C2=A0 e=C2= =A0 r=C2=A0 e=C2=A0 =C2=A0Total<br> =C2=A0 =C2=A0 =C2=A0 =C2=A00=C2=A0 =C2=A08=C2=A0 4=C2=A0 4=C2=A0 5=C2=A0 8= =C2=A0 8=C2=A0 5=C2=A0 8=C2=A0 =C2=A0 =C2=A0 50<br> =C2=A0 =C2=A0 =C2=A0 -1=C2=A0 =C2=A07=C2=A0 3=C2=A0 4=C2=A0 4=C2=A0 7=C2=A0= 7=C2=A0 5=C2=A0 7=C2=A0 =C2=A0 =C2=A0 44<br> <br> Since the error introduced by rounding each character is a bit <br> different, we get a different result between the width from the display <br= > engine compared to the approximation in the first expression above where <b= r> we round only once at the very end.<br></blockquote><div><br></div><div cla= ss=3D"gmail_default" style=3D"font-family:monospace">Yes, indeed.=C2=A0 No = more estimation.=C2=A0 Just use the display engine directly.</div></div></d= iv> --000000000000c3acbb063648f9dc--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 16:41:32 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 12:41:32 2025 Received: from localhost ([127.0.0.1]:38074 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKgJv-0006HM-8g for submit <at> debbugs.gnu.org; Thu, 29 May 2025 12:41:31 -0400 Received: from mail-ua1-x930.google.com ([2607:f8b0:4864:20::930]:58767) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKgJt-0006Gy-2i for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 12:41:29 -0400 Received: by mail-ua1-x930.google.com with SMTP id a1e0cc1a2514c-87de8a14cd7so335437241.1 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 09:41:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748536883; x=1749141683; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=GUejABqQd6/OQYLBXK6lMbjpXT8IrqDt3GQ1PXt0Rg8=; b=TxYcesxT9Ck1CpZK92k6CWvhCQqN4Y154nhO0edTvFnBGJJlp9RuFFtgEcxVAgDIDz /Fcc6LH1JOPGFDOowKcS6fIfy9m0gsczKpBo7EYC3b9pwpl6bOLTRISfQnHdp9XMxA7/ rWn76X5Iqwwf6L9PV0R3UHGyWGBjMyrhsRZOuqSsOYbuCnELWW03SI8vNLx0wpTrVQpu tyw+udZ7eZj1nyRsRdkHNRSeoS2NCJdXH3i7cP/zv4a/MsbzWhBjrbxBwDrgLvzifI9a oqhMEjOE/bjHZDjLgyzVM8c9acEN5J2jErusERdleXgQWSatbi7rvYPI9J0AtrcOBlVD SVLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748536883; x=1749141683; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GUejABqQd6/OQYLBXK6lMbjpXT8IrqDt3GQ1PXt0Rg8=; b=SRBETF7AsXZ1GA15zgTluT4jwBrDTuJuEkhdwLTmqwbvf/psPMPiANnq1Uyauzv4Cu DNu/4ornTSJgdwc7wTAZfkYbfF/VmdlxuhbmwFpWu/dSX2krbb6/A9bUjAlf85F6KFB0 k555lvXBdtUsdtqGM2u9JOR6YPWPWLBE7FaLy17PZCOyIsoLvDgNfSoNagV8O7CEhS82 eiRK87Hqw14X4uNDChm7w0vPMsyHZEk+E2aNQevPjvMUxoDQXGV9UuU5NJLNs/ToKvBs nk6AxIxSgpyxcnrq5f2RXDr3fooYIF3q+fhlpuQAyCC1Oi0ABz92zoW0luXVkdFk1tYW gpZA== X-Forwarded-Encrypted: i=1; AJvYcCX1Bp90UB//rhz9izhUZMkXkVHcfZlhUYTO91v9vS2d0yj61KkmEJO4pwLsdW/P6mkXy/F5Bw==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzhtfpXrur/1GHO7LEwyfG5v9k0P/aW4uQqw+VvbV6/ObwBRnFp OlFCJ3Bh7V0RWX/nnWkJc1m4qg6sne3mXn/LKDNSaL79kz++43CYt0cZZ3G7m3yU++XxqDW1d6A 1hhmzO2esbOcHw0cvY8iVaRqdwq9e8oc= X-Gm-Gg: ASbGncuUDli5pJZX7aYeVf5pH8V84P8+zsOBpYdIzOlkBrfT/hDN/lBcRsSalrRMMJ1 Mv33dPxlJXnspP5vvI54tUWtQDKbmknBkJ7NeyopwNDy3lndU7SnHpHYOK4S6Sl1Jn72a6nti9T hKRsF+0SBHRDVMAUCYudTb0K/w9Un+yY/h43U= X-Google-Smtp-Source: AGHT+IHnu0UufZ1bT7kcLdQQ5p6/vSaZLfReXH51XvxuOe+oJE3HsVsaYG6HHfBVP9YkklktM02C0ZPFzupliWfdn0I= X-Received: by 2002:a05:6122:2a50:b0:518:6286:87a4 with SMTP id 71dfb90a1353d-53080f9ff0amr154331e0c.4.1748536883241; Thu, 29 May 2025 09:41:23 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <861ps8vtk4.fsf@HIDDEN> In-Reply-To: <861ps8vtk4.fsf@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Thu, 29 May 2025 12:41:11 -0400 X-Gm-Features: AX0GCFurYGJSv1mdn0bjXNu9yPutXL40VNPqkrmUh-BxkkRxIFML42FfVDQuZck Message-ID: <CAN+1HboELLQROFQetHav-Y2WYjKS=t=M-94H9YRv+On=SakS7g@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width To: Eli Zaretskii <eliz@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000cd66e4063648f7ea" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: jporterbugs@HIDDEN, 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000cd66e4063648f7ea Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, May 29, 2025 at 2:07=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote: > > Cc: 78621 <at> debbugs.gnu.org > > From: Ship Mints <shipmints@HIDDEN> > > Date: Wed, 28 May 2025 16:40:26 -0400 > > > > On Wed, May 28, 2025 at 4:14=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN= om> > wrote: > > > > On 5/28/2025 12:44 PM, Ship Mints wrote: > > > You can see this in text-scaled buffers when attempting to pad a > string > > > to a specific pixel boundary. If a pixelwise specified-width space > is > > > inserted after a string with variable-pitch glyphs, it doesn't honor > the > > > net pixel width. That same string padded using min-width with the > same > > > number of pixels works fine. > > > > Are you sure that your implementation of 'string-pixel-width-scaled' i= s > > correct? From a brief look, I'd expect that you get some jitter when > > dividing '(default-font-width)' by '(frame-char-width)', since both ar= e > > rounded to the nearest whole number. > > > > If I instead replace that call with: > > > > (string-pixel-width str (current-buffer)) > > > > then everything looks ok to me. As of Emacs 31, passing a buffer does > this: > > > > If BUFFER is non-nil, use the face remappings, alternative and > default > > properties from that buffer when determining the width. > > > > That should handle all the necessary work to get the string width afte= r > > applying text-scale remappings. I added that argument so I could use i= t > > in 'visual-wrap-prefix-mode' for a very similar issue you're seeing. > See > > commit f70a6ea0ea86ef461e40d20664a75a92d02679ea. > > > > Thanks for that. I think I'm using that in other places. > > > > But... Did you run the repro in question and it worked for you, or are > you saying that this worked for your > > case? > > > > AFAICT, the repro demonstrates a different issue. With the identical > string-pixel-width, padding using > > specified-width spaces vs. min-width behave differently, so this isn't > due to jitter as the widths used are the > > same for both cases. > > I tried your recipe in Emacs 31. The variable-pitch text indeed > doesn't align, but the reason seems to be that the WIDTH value of > '(space :width WIDTH)' display property is miscalculated. In my case > the :min-width spec has the value (150), i.e. 150 pixels, as expected, > whereas in the '(space :width WIDTH)' spec WIDTH is (66) while the > width of the text "f:0123456789" on display is 72 pixels (measured > with posn-at-point). So the sum is 72 + 66 =3D 138 pixels, not 150. > > The question is why is the value miscalculated. Perhaps > string-pixel-width-scaled doesn't do its job reliably with > variable-pitch fonts? I didn't have time to explore deeper, since you > guys seem to be looking into that already. Let me know if you find > something unexpected or need my further help. > Indeed the two methods used in core Emacs to adjust widths in text-scaled buffers do not work reliably with variable-pitch fonts. (/ (float (default-font-width)) (frame-char-width)) (expt text-scale-mode-step text-scale-mode-amount) I will now rely solely on 'string-pixel-width' specifying the reference buffer from which the display engine can derive the text scale. In the end, this was an experiment gone wonky, a nonbug, and now solved. Thanks, all, -Stephane --000000000000cd66e4063648f7ea Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Thu, May 29, 2025 at 2:07=E2=80=AFAM Eli Zaretskii <<a href=3D"mailto= :eliz@HIDDEN">eliz@HIDDEN</a>> wrote:</span></div></div><div class=3D"= gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style= =3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding= -left:1ex">> Cc: <a href=3D"mailto:78621 <at> debbugs.gnu.org" target=3D"_bla= nk">78621 <at> debbugs.gnu.org</a><br> > From: Ship Mints <<a href=3D"mailto:shipmints@HIDDEN" target=3D"= _blank">shipmints@HIDDEN</a>><br> > Date: Wed, 28 May 2025 16:40:26 -0400<br> > <br> > On Wed, May 28, 2025 at 4:14=E2=80=AFPM Jim Porter <<a href=3D"mail= to:jporterbugs@HIDDEN" target=3D"_blank">jporterbugs@HIDDEN</a>> w= rote:<br> > <br> >=C2=A0 On 5/28/2025 12:44 PM, Ship Mints wrote:<br> >=C2=A0 > You can see this in text-scaled buffers when attempting to = pad a string <br> >=C2=A0 > to a specific pixel boundary.=C2=A0 If a pixelwise specifie= d-width space is <br> >=C2=A0 > inserted after a string with variable-pitch glyphs, it does= n't honor the <br> >=C2=A0 > net pixel width.=C2=A0 That same string padded using min-wi= dth with the same <br> >=C2=A0 > number of pixels works fine.<br> > <br> >=C2=A0 Are you sure that your implementation of 'string-pixel-width= -scaled' is <br> >=C2=A0 correct? From a brief look, I'd expect that you get some jit= ter when <br> >=C2=A0 dividing '(default-font-width)' by '(frame-char-widt= h)', since both are <br> >=C2=A0 rounded to the nearest whole number.<br> > <br> >=C2=A0 If I instead replace that call with:<br> > <br> >=C2=A0 =C2=A0 =C2=A0(string-pixel-width str (current-buffer))<br> > <br> >=C2=A0 then everything looks ok to me. As of Emacs 31, passing a buffer= does this:<br> > <br> >=C2=A0 =C2=A0 =C2=A0If BUFFER is non-nil, use the face remappings, alte= rnative and default<br> >=C2=A0 =C2=A0 =C2=A0properties from that buffer when determining the wi= dth.<br> > <br> >=C2=A0 That should handle all the necessary work to get the string widt= h after <br> >=C2=A0 applying text-scale remappings. I added that argument so I could= use it <br> >=C2=A0 in 'visual-wrap-prefix-mode' for a very similar issue yo= u're seeing. See <br> >=C2=A0 commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.<br> > <br> > Thanks for that.=C2=A0 I think I'm using that in other places.<br> > <br> > But... Did you run the repro in question and it worked for you, or are= you saying that this worked for your<br> > case?<br> > <br> > AFAICT, the repro demonstrates a different issue.=C2=A0 With the ident= ical string-pixel-width, padding using<br> > specified-width spaces vs. min-width behave differently, so this isn&#= 39;t due to jitter as the widths used are the<br> > same for both cases.<br> <br> I tried your recipe in Emacs 31.=C2=A0 The variable-pitch text indeed<br> doesn't align, but the reason seems to be that the WIDTH value of<br> '(space :width WIDTH)' display property is miscalculated.=C2=A0 In = my case<br> the :min-width spec has the value (150), i.e. 150 pixels, as expected,<br> whereas in the '(space :width WIDTH)' spec WIDTH is (66) while the<= br> width of the text "f:0123456789" on display is 72 pixels (measure= d<br> with posn-at-point).=C2=A0 So the sum is 72 + 66 =3D 138 pixels, not 150.<b= r> <br> The question is why is the value miscalculated.=C2=A0 Perhaps<br> string-pixel-width-scaled doesn't do its job reliably with<br> variable-pitch fonts?=C2=A0 I didn't have time to explore deeper, since= you<br> guys seem to be looking into that already.=C2=A0 Let me know if you find<br= > something unexpected or need my further help.<br></blockquote><div><br></di= v><div class=3D"gmail_default" style=3D"font-family:monospace">Indeed the t= wo methods used in core Emacs to adjust widths in text-scaled buffers do no= t work reliably with variable-pitch fonts.</div><div class=3D"gmail_default= " style=3D"font-family:monospace"><br></div><div class=3D"gmail_default" st= yle=3D"font-family:monospace">=C2=A0 (/ (float (default-font-width)) (frame= -char-width))<br>=C2=A0 (expt text-scale-mode-step text-scale-mode-amount)<= br></div><div class=3D"gmail_default" style=3D"font-family:monospace"><br><= /div><div class=3D"gmail_default" style=3D"font-family:monospace">I will no= w rely solely on 'string-pixel-width' specifying the reference buff= er from which the display engine can derive the text scale.</div><div class= =3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"= gmail_default" style=3D""><font face=3D"monospace">In the end, this was an = experiment gone wonky, a nonbug, and now solved.</font></div><div class=3D"= gmail_default" style=3D""><font face=3D"monospace"><br></font></div><div cl= ass=3D"gmail_default" style=3D""><font face=3D"monospace">Thanks, all,</fon= t></div><div class=3D"gmail_default" style=3D""><font face=3D"monospace"><b= r></font></div><div class=3D"gmail_default" style=3D""><font face=3D"monosp= ace">-Stephane</font></div></div></div> --000000000000cd66e4063648f7ea--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 16:38:23 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 12:38:23 2025 Received: from localhost ([127.0.0.1]:38049 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKgGt-00061M-2f for submit <at> debbugs.gnu.org; Thu, 29 May 2025 12:38:23 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:42255) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>) id 1uKgGq-000610-8Y for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 12:38:20 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-7398d65476eso850483b3a.1 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 09:38:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748536694; x=1749141494; darn=debbugs.gnu.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=k972F9Ij0xkB+WyrG0kch7H6Of+mCH74jfXkLZW2/s4=; b=lKxF6Ff/WpcfEsOEaOKTybT1uvY5qgYA1wASc80Aqdl8MngciopTkp0B8dtI5YhIqp Q4vB1PV12DvJfNmvrcPV2fiTs4f3W4LDWssQ8o1sR6mFZ/VXBObRsYL1E0n7XbDZYdcw I33NOuKKDTxCe/pIVNAcUTh+V2JFh0BvhpDJzkS+Ua4DUAuy4WdbB09fLxl1lAhW6iUn wWdSpSon56Dh6TJZr4sAUeouNIkJt+5kp8+mhH0S1kAmfSB7W+XYHiFw71V3O908TWJZ Qf2sH6e0JFGuoLyD80U3RNQI+cFix6iv2nvagqYyrvwV/lg+sClkonzqz40nthEQv2id WG8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748536694; x=1749141494; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=k972F9Ij0xkB+WyrG0kch7H6Of+mCH74jfXkLZW2/s4=; b=nNkCXbt2WuTEtFXcEpw2Av6C9VAy1PFNSP/6Uc96dXSOt0wOmpaf/jW9W3P3i8Wdf9 veXhB+wT/tIbfA3SaBli6Y7isnIxfNVI/gpLA5hEO3nATI61tHkTyT80yEuPk2Nwqh2y rncQTCzvgPRCt5uuKkddqcDaB76okHGw3+lLb/L9UPYs9hRvButD5yQsMLYyvdnInZEU IATnDcJ+xdTP6nTdiOLMgQgNhh5+0ouozQwLZtIGng7x4o+d48dcBSEJuEI57CXtQTUd VfIuUiOzYNinK6CsRvaEZoCP9784Tcj74lCT8NxzT5k01JI5zUyrFvaDRlAaUjgWxCxg 8IZA== X-Forwarded-Encrypted: i=1; AJvYcCXExRi739UOEbFcVPMAPu5qB/XBCJeWp+6ega0i/8eI23AqtVRsWTwkq0kzJG7Qm54ioepzbw==@debbugs.gnu.org X-Gm-Message-State: AOJu0YykT4cVizWMDo8ow9rKMlcq25VPK7SNnmqRSydv6NNloGvLJta3 Elvayvw19wsV4xIgnCoc2XshwrWkNdw6UqLknEO95/WLwMw976VFlFK/ X-Gm-Gg: ASbGncu80hO5IHjwrGp+qGSLvS21m6iCFdqH9GD5iJef49KPeF9amxq6oaGSGsYoJD6 EzlHSNJj5/YNmy81gxv9g7/y7dRFiMeTmeJE0LSnSFz3h9U6FmLxcshDk7w/j1MiMU57wPe0Ez5 0SGOaZxJFmdneiTKk0suiXDpNc4pZXKBOhrQxLb7F9ZfAW9pFSrg0WTqHjoWdBq/JpBRMSotXzf 60oXOZy8qrSnhFk/gLs+j1pFUm33LLdodwpRfGupfKQG0qX3GlC3leoEDZe4JshM4YS33CSbDak XAenH9lTmZh6Z9K0vL0qOXLMY400xFdhdYuxC3vwH4/dONC0jlHAFNmOBCf3YdhoESlRXVbcuuV J2bkYyyY4uz5N+ZzmY7+yEQFQLh5aj7s= X-Google-Smtp-Source: AGHT+IFo4l13PizInIPI+icBSli+/2SmnX9JzpAsVOOBEuGC7iXJQZNdr6KQUGI3TWwzJkA16Z6BOQ== X-Received: by 2002:a05:6a00:3d14:b0:742:b9d2:dc8f with SMTP id d2e1a72fcca58-747ad443aaemr5283875b3a.1.1748536694075; Thu, 29 May 2025 09:38:14 -0700 (PDT) Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com. [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id d2e1a72fcca58-747affafb5dsm1588951b3a.94.2025.05.29.09.38.13 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 29 May 2025 09:38:13 -0700 (PDT) Message-ID: <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> Date: Thu, 29 May 2025 09:38:15 -0700 MIME-Version: 1.0 Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width Content-Language: en-US To: Eli Zaretskii <eliz@HIDDEN> References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN> From: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <86wma0uegn.fsf@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: shipmints@HIDDEN, 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On 5/28/2025 11:18 PM, Eli Zaretskii wrote: > I don't follow this argument. string-pixel-width uses the display > code, so it should return the exact same value in pixels as what the > actual display produces when the same characters are shown on the > screen. So whatever rounding happens (which I don't think it does, > since font glyphs have integer advance width), it happens the same in > both cases and should yield the same values. Or what am I missing? The short version is that we should pass the current buffer to 'string-pixel-width' so that we can just use the display code to compute the string's width with all the remappings applied, rather than having the display code compute it without remappings and then trying to guess what the remapping would do to the width. Here's a longer version if it helps: The problem is that 'text-scale-increase' modifies the text size by a particular ratio; when zooming out by one step, that defaults to 1 / text-scale-mode-step, or 5/6. My fixed-pitch font is 8 pixels wide at the default size, so zooming out one step means the pixel width per char is 8 * 5/6 = 6.666. Since the advance width is an integer, we round up to 7 pixels. The original code works for fixed-pitch fonts since '(default-font-width)' returns 7 in this case, so the original expression: (ceiling (* (string-pixel-width str) (/ (float (default-font-width)) (frame-char-width)))) is equivalent (only in this simple case) to: (* (string-width str) (default-font-width)) Hopefully that all makes sense. For variable-pitch fonts, this is more complex. Our zoom ratio is still 5/6, but we apply that ratio per-character, rounding each time. For the string "hi there", the pixel widths of each character are: Scale h i _ t h e r e Total 0 8 4 4 5 8 8 5 8 50 -1 7 3 4 4 7 7 5 7 44 Since the error introduced by rounding each character is a bit different, we get a different result between the width from the display engine compared to the approximation in the first expression above where we round only once at the very end.
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 06:19:02 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 02:19:02 2025 Received: from localhost ([127.0.0.1]:32828 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKWbW-00053B-AK for submit <at> debbugs.gnu.org; Thu, 29 May 2025 02:19:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50286) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uKWbR-00052Q-EE for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 02:19:01 -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 1uKWbL-0006mP-Hs; Thu, 29 May 2025 02:18:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=mw3Q8jZdswr15tJAmu2L64kBwk5lbo/PHtK4fgu32ek=; b=TscjB14lKD0I VzAZuALB9p8qwR+ssU01PViCWJGjJ7ttFV3NsdJkA1vhnCfRc48OKZO6lrfWjPIDvLCY3GZiRaqx1 fCUSYAdcOEeu2wAI2bVWPrEgHgET8DulUzHO9KnzwT8OuvhzOXHf9OIpl/0iVpuM5R9UUyAWs2Xjh 5ItgGgrIMMpKxyTRwH1bBPE0mb/VU+BRtJmXgk9MNmJ/5LinT/TK7APty+HCsR/B2trKxD33JQsrf u4r15iV86KFqh/jvLQNUSqCOaqfZmm67QEjLdK63aW1zPtcKEf9hBMNllXqoZP9bj1wBV84hVxtKP aE3hBG8nOUaIz06A5Coc0A==; Date: Thu, 29 May 2025 09:18:48 +0300 Message-Id: <86wma0uegn.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> (message from Jim Porter on Wed, 28 May 2025 16:07:48 -0700) Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78621 Cc: shipmints@HIDDEN, 78621 <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: 78621 <at> debbugs.gnu.org > Date: Wed, 28 May 2025 16:07:48 -0700 > From: Jim Porter <jporterbugs@HIDDEN> > > From my read of this bug, the issue was originally that these snippets > should have the same display width: > > (concat "some text" > (propertize " " 'display > `(space :width (,(- width width-of-some-text))))) > > (propertize "some text" 'display `(min-width ((,width)))) > > I agree with that, but only if 'width-of-some-text' is computed correctly. > > For variable-pitch text, each character cell (I hope I'm using the right > term here) in the display is a different width, rounded to the nearest > integer, which means that computing the pixel-width as in your original > reproducer accumulates small rounding errors for every character. I don't follow this argument. string-pixel-width uses the display code, so it should return the exact same value in pixels as what the actual display produces when the same characters are shown on the screen. So whatever rounding happens (which I don't think it does, since font glyphs have integer advance width), it happens the same in both cases and should yield the same values. Or what am I missing?
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 06:11:03 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 02:11:03 2025 Received: from localhost ([127.0.0.1]:60997 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKWTn-0004VW-FI for submit <at> debbugs.gnu.org; Thu, 29 May 2025 02:11:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46060) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uKWTl-0004Uq-N1 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 02:11:02 -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 1uKWTg-0005lI-Dz; Thu, 29 May 2025 02:10:56 -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=+uKGAycjk34O24OX2c+0VoeWA7SO1uOe6hFgiuvv/D8=; b=eQPfSiT8kTvIBh7Zlv6a dFVmvmWA/t8kZeRsFk+uUGFejgBC83BL4bkukKxh0Q0eAC6jR51aAoEuhHLGEEUgY84a3lCbSiZR4 sTblrFNZhbfj9kr9S4ZKXjAMuB6IwxgSjNhjv72d0+WBnxHFs5N7qUE7MMLgt5MVvSyL9XZ1UPxAi t4ifh2as02cVS1fCyRbh6vbzva+9aKtKx9hLU4OEXt+iC9O9/ibgToHuiLpZD55frwB21LVT4jAhD VH6REyJT/1tzoXsx3YJpD4j57Yx1qaqirPcr2zX8mET/HZKmi9Tg7AusHznBZCENX+nvb7akhFUkt YbqyOyrAwRUM4w==; Date: Thu, 29 May 2025 09:10:53 +0300 Message-Id: <86zfewuetu.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <e6cebcc0-249d-3a78-f5ee-061bbb99b529@HIDDEN> (message from Jim Porter on Wed, 28 May 2025 15:42:56 -0700) Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <e6cebcc0-249d-3a78-f5ee-061bbb99b529@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78621 Cc: shipmints@HIDDEN, 78621 <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: 78621 <at> debbugs.gnu.org > Date: Wed, 28 May 2025 15:42:56 -0700 > From: Jim Porter <jporterbugs@HIDDEN> > > On 5/28/2025 3:15 PM, Ship Mints wrote: > > Interesting. The results got worse for me, not better. > > > > What platform did you test on? > > GNU/Linux. I tested on MS-Windows, but I don't think the platform matters. The only platform-dependent part is which font is used for the variable-pitch face; the rest of the code involved in this is platform-independent. Once again, the problem is not in :width vs :min-width, the problem is in the pixel-width values given to these display specs; see my other message in this thread.
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 29 May 2025 06:07:36 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 02:07:36 2025 Received: from localhost ([127.0.0.1]:60971 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKWQR-0004Dc-HV for submit <at> debbugs.gnu.org; Thu, 29 May 2025 02:07:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55902) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uKWQO-0004D7-PV for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 02:07:33 -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 1uKWQJ-0005LT-0V; Thu, 29 May 2025 02:07: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=vMKexLo6BWZhP9OsQxzpPKWnjqIzu2R0fH+MQHL4F+4=; b=R6+9g3y6zLIGJ2v8/FAq 9tSku7/VbOAN5ML8J+MmvHoxxmeanYNldi1K44MMameONfewX+15wMX7p+A5To7XRXpTwkpWDi1SN q2gfk37ePcGkbrNiEoOQ4JJDcGyxfGczOCfWe17QjdBRVj+rCMY9yyHXpD/SWCc3er52jLLSuae4e NOYYxKczceo7HXZvTx4vFTHge7gxtIJs3zbZG5mn8t9AZBG7ORvhybJ2d5bJtNqel1ez1REeOwbwE gCFtCVIw4Y2r3ukO1qIc0Py4ApdiZENh8pTq9oNKzZM2Ra0fWXBp/ljxOfwu52lMb3dibIpiWiygm v4B0YYsEEaEOyg==; Date: Thu, 29 May 2025 09:07:23 +0300 Message-Id: <861ps8vtk4.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Ship Mints <shipmints@HIDDEN> In-Reply-To: <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> (message from Ship Mints on Wed, 28 May 2025 16:40:26 -0400) Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78621 Cc: jporterbugs@HIDDEN, 78621 <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: 78621 <at> debbugs.gnu.org > From: Ship Mints <shipmints@HIDDEN> > Date: Wed, 28 May 2025 16:40:26 -0400 > > On Wed, May 28, 2025 at 4:14 PM Jim Porter <jporterbugs@HIDDEN> wrote: > > On 5/28/2025 12:44 PM, Ship Mints wrote: > > You can see this in text-scaled buffers when attempting to pad a string > > to a specific pixel boundary. If a pixelwise specified-width space is > > inserted after a string with variable-pitch glyphs, it doesn't honor the > > net pixel width. That same string padded using min-width with the same > > number of pixels works fine. > > Are you sure that your implementation of 'string-pixel-width-scaled' is > correct? From a brief look, I'd expect that you get some jitter when > dividing '(default-font-width)' by '(frame-char-width)', since both are > rounded to the nearest whole number. > > If I instead replace that call with: > > (string-pixel-width str (current-buffer)) > > then everything looks ok to me. As of Emacs 31, passing a buffer does this: > > If BUFFER is non-nil, use the face remappings, alternative and default > properties from that buffer when determining the width. > > That should handle all the necessary work to get the string width after > applying text-scale remappings. I added that argument so I could use it > in 'visual-wrap-prefix-mode' for a very similar issue you're seeing. See > commit f70a6ea0ea86ef461e40d20664a75a92d02679ea. > > Thanks for that. I think I'm using that in other places. > > But... Did you run the repro in question and it worked for you, or are you saying that this worked for your > case? > > AFAICT, the repro demonstrates a different issue. With the identical string-pixel-width, padding using > specified-width spaces vs. min-width behave differently, so this isn't due to jitter as the widths used are the > same for both cases. I tried your recipe in Emacs 31. The variable-pitch text indeed doesn't align, but the reason seems to be that the WIDTH value of '(space :width WIDTH)' display property is miscalculated. In my case the :min-width spec has the value (150), i.e. 150 pixels, as expected, whereas in the '(space :width WIDTH)' spec WIDTH is (66) while the width of the text "f:0123456789" on display is 72 pixels (measured with posn-at-point). So the sum is 72 + 66 = 138 pixels, not 150. The question is why is the value miscalculated. Perhaps string-pixel-width-scaled doesn't do its job reliably with variable-pitch fonts? I didn't have time to explore deeper, since you guys seem to be looking into that already. Let me know if you find something unexpected or need my further help.
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 28 May 2025 23:08:00 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 19:08:00 2025 Received: from localhost ([127.0.0.1]:58230 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKPsN-0001WD-M1 for submit <at> debbugs.gnu.org; Wed, 28 May 2025 19:08:00 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:55483) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>) id 1uKPsJ-0001V3-Uv for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 19:07:57 -0400 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-7399a2dc13fso283826b3a.2 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 16:07:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748473669; x=1749078469; darn=debbugs.gnu.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=BSTwbaQ596SiNlO54YQcivM6QflWDq58g2sZwp4V9sE=; b=Tmw/eDI+GYCiJXcHta9oESlLM44Ekqx/WvqIk8ZgTIdLfE1ywJHtU6rV8w/VGM+V11 dUVot/jz1EGdb0HsHAB2lkp26HN4lavDcpkMopvSEsYytPeKnq1y0cTO2Rl1v22k24a5 K8CnwiBP0TDj4+YrGL1REEKRMPY8vYcq6UNc8a257P+VKXO/P/kJ0PYDMqKr+4RwBg4C caf85edb/uMERinNmgOcKbkaQBKVdUE1yY/bjaRw/E/njiavv4njamThbllgpZbzrrnq H11C6xH+JutOkWsS2AlZM9T7O/S9TJjOA17CxBK+PRxvJRX/aOzyQT8zUSlIokrlN1eP ykGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748473669; x=1749078469; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BSTwbaQ596SiNlO54YQcivM6QflWDq58g2sZwp4V9sE=; b=ATP+ITXt1POyARHC1plW0CRuqMkUAvIvMpgrBJp/1qVtGRDxIGMHG+OTnYtHit27Fc VZhetrXT5EiZ+B+4VuIpz6jfpng+82dZX0qUkZyLR+TxQ9Z2pHPxSFpm4dDplAJr548a +xlMzl3QN62HOtY8+VHnkuTcAEFxiJToAt/FGd60RzcOrQ7TQUHZzdADAJ4pia+2wool 2SLBy9Hk2lpohkGeSYDqJb8Mj8iYcMo/QEE1iwC/VqmQo56IfA5SyBPptUZFVmOVvmyL g/myEF02t5U/H6eizyFPdgwSxYgJUDcnd+/8J/B/R/4RO2YcnC+TIuLoD91VG7WoyyWk l0gg== X-Gm-Message-State: AOJu0YxhWp7mdX67dQkBQBtxz3Y5njfW4SB/DLhO6e8mrdxuKp+6d5/0 8blntb2xfOSdwCVG03r4Txb/UETijXWSOtL3ocTKId61n0KcwaihoVZA X-Gm-Gg: ASbGncvPJIzRR+5ojm+JsHah9GMr+RO38aAmSBHZUa6SIWXORiTkmqjavJRRaoFRgt9 YolxlrtSwH/9pcrXbL9DTNAH5ue1wyAM0VhE4m/Tif6y5ZijlZRwIaBGEpwyM1e2JHsVbuU9QYx g+TBQih+QXn3KQih4qv5sK5IlDCPMp3w21JZ/N/aCNF62duA//4DXPtxJ+xXkY4VNjLwp32mion vur8Go/Avx7dNrPtGdI53Qn/bbLIETGGuFw9UDk0L8x/BXsp85v3R2k0uh4ydr+/+Sn6LM+CNR3 seAjySiEuVYUo9zyzlKHHJAXuGjrYmveRkkpbeLmcFR7OmsHB3614TvyvISKzysQnW3VjmtPOSl xKXJ4zsJBQ5CeM1ZAWJM56nszqGK0ypE= X-Google-Smtp-Source: AGHT+IEjdBLf161LhAeH63b9n8BV6VRPjG+C4/AZKH8XAWcfGBTqALU6lViBH9YT0NHE8Uu4xRrzVA== X-Received: by 2002:a05:6a00:1822:b0:736:31cf:2590 with SMTP id d2e1a72fcca58-745fe064383mr27375153b3a.16.1748473669051; Wed, 28 May 2025 16:07:49 -0700 (PDT) Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com. [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id d2e1a72fcca58-747affadf70sm127991b3a.91.2025.05.28.16.07.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 28 May 2025 16:07:48 -0700 (PDT) Message-ID: <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> Date: Wed, 28 May 2025 16:07:48 -0700 MIME-Version: 1.0 Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width Content-Language: en-US To: Ship Mints <shipmints@HIDDEN> References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> From: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On 5/28/2025 3:40 PM, Ship Mints wrote: > Okay I applied the one-liner correctly this time and now I see good > results on my mac laptop. > > My contention still stands, though, that with identical inputs, 'display > 'space :width and 'display 'min-width should produce identical results. > Does that make sense? From my read of this bug, the issue was originally that these snippets should have the same display width: (concat "some text" (propertize " " 'display `(space :width (,(- width width-of-some-text))))) (propertize "some text" 'display `(min-width ((,width)))) I agree with that, but only if 'width-of-some-text' is computed correctly. For variable-pitch text, each character cell (I hope I'm using the right term here) in the display is a different width, rounded to the nearest integer, which means that computing the pixel-width as in your original reproducer accumulates small rounding errors for every character. That's not an issue for fixed-pitch text, since in that case you can reduce this expression as follows: (* (string-pixel-width str) (/ (float (default-font-width)) (frame-char-width))) ;; For simple cases, the pixel width is just the length times the ;; frame's char width. (* (length str) (frame-char-width) (/ (float (default-font-width)) (frame-char-width))) ;; Cancel out (frame-char-width). (* (length str) (float (default-font-width))) ;; Remove unnecessary float call. (* (length str) (default-font-width)) Thanks to '(frame-char-width)' canceling out, that expression doesn't accumulate rounding errors like it would for variable-pitch text.
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:43:07 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:43:07 2025 Received: from localhost ([127.0.0.1]:58143 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKPUJ-0005s1-0i for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:43:07 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:58493) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>) id 1uKPUF-0005qY-VV for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:43:04 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-74264d1832eso233506b3a.0 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:43:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748472177; x=1749076977; darn=debbugs.gnu.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=OFcWnkLwXZ2EIF+Ir+MOTN6ztUxfTa3y7U9/585lF4E=; b=Tj6teetc/oHA9QJ0/CYMSdDxNTijPxZ32NsnRjqC1dEPwswQxpwrcm2Y1brjtGU18U ER5YCEUYYguf1YSKWd7ApaocFtU9euX8VW/3pJrM19sa0vYH+0jH1xB4g0CIkUddxjAU EzjThEdvq852vHRxP+iBRTr2Db5YcT3OpRki271mIw/Z2xyeY95TnpgdZ/dho0Zz5ABx RNPXZPwnSJPlVrxtds4G8vb0YiSbzY4t7zp+XOyo62DuaktmXVBbdwrD2rUVhSCaSibm jsAo55wey321RTpv9XsBmsIiuY1tINodE3M59tgsqWJNId4kGNG6nfKmHO4hnsAGfkrJ 7/yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748472177; x=1749076977; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OFcWnkLwXZ2EIF+Ir+MOTN6ztUxfTa3y7U9/585lF4E=; b=ZBBDzb/inCeswzgRCiK9cbNnNXngv3Bt2Zn2cxq0/Ctud3lDBFeW6lzhTFBEi3jlXc OlRweJKggaI7YrTKM7tG2U5+8SE6pz1vwvdMZ0r68ZwOnU91dvxVEueTWwsOTVxNzikd NWFhJQU4DhV8HYTjlarB6xa6yf8sFX81TdQm1PFnQzrh7QFO/5CT4gEy9yHV7z1GNf93 uCkTaNDgbibqizkzf0DC6eDoqquodvFnOobLx3f/iZCp5njMLsNuflNEz9WhouMi5Tvf ZtLbjm0ex6mEjjhf+P8bsTuiIOtt3paxshAjlmkbdJ+tL8zh3ddivUjljB1bWOuiH87o 6wbw== X-Gm-Message-State: AOJu0Yx3aqwQlpGrWfZ2KVogjSqmrMS2Qu5AqmdVZ/ge2HsFhDmQEQWt vuDpCIv9wYqLXLsJJZP8nRq5i82CNe3DFtyMOeQY1MgvP59741ZHpuIv X-Gm-Gg: ASbGncvvx6sv77Fi5wsbTGcAi+NbinjoJl7c8ditC3vOlHLi1LyLE6B+JPW7IDUap21 o4JrzpO938IpiKNMEDofgNcGKxMZDHa69h1avlc8WDK7xCzMav1otZY7XDWepDDZkoL8hFfX5oy 1IoCtiUwx543CKoCGn647gkOvBPxEYRSda7om+mcJ0Ib5Gqt0ssDS0EdF27CpHc3xco8ERmmb9t KOLx4jXHPYM6rxeIUA4TdAqws6IjdYahmjiXeO/SzEUnEd7V4XaO2zFJ26mSyDgOpWTBOfnfvkf NyqSeebDkW5549YpVtZXR/1/VX+K60158SQ7O9cFko5fBID1CVQJ5LClZiNBx3mN7l5f3fvBxYV QDCehG0i/2vJiMjzIdcwo3KtPLov+UlY= X-Google-Smtp-Source: AGHT+IGNVaE97uy1vvt8vcknMbSqzLY5QHX/pi8DI4CFC+MKZelNTJ4pOHWoAai4ul/+vwxeIZgnzw== X-Received: by 2002:aa7:888d:0:b0:742:a82c:d832 with SMTP id d2e1a72fcca58-745fe05d238mr31213575b3a.24.1748472176971; Wed, 28 May 2025 15:42:56 -0700 (PDT) Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com. [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id d2e1a72fcca58-747afff71fbsm101258b3a.165.2025.05.28.15.42.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 28 May 2025 15:42:56 -0700 (PDT) Message-ID: <e6cebcc0-249d-3a78-f5ee-061bbb99b529@HIDDEN> Date: Wed, 28 May 2025 15:42:56 -0700 MIME-Version: 1.0 Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width Content-Language: en-US To: Ship Mints <shipmints@HIDDEN> References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> From: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On 5/28/2025 3:15 PM, Ship Mints wrote: > Interesting. The results got worse for me, not better. > > What platform did you test on? GNU/Linux.
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:41:08 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:41:08 2025 Received: from localhost ([127.0.0.1]:58129 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKPSJ-0005e8-LK for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:41:08 -0400 Received: from mail-vs1-xe2d.google.com ([2607:f8b0:4864:20::e2d]:48619) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKPSG-0005d1-Mj for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:41:01 -0400 Received: by mail-vs1-xe2d.google.com with SMTP id ada2fe7eead31-4e58ad70536so97735137.1 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:41:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748472054; x=1749076854; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6kL9NcDOg3E/VueeDRR5pbIC0rsPUc+XGAmRMT1rmTI=; b=k6Fyww2T63EVevjnwrFnlDMCRgFwymajJIDzp5fOG2YtSgKPD9bA0D3AlI326XjwIk OIY8FDVxduFh6HxJkVv0qTbWI9CyVLaUiVTCUDLkMGOkbP0kzc/9T9ZUFukpCTWQD6cn cVgPZ6Ckcpv7L0jc61fEkXek5daK9/TJ4VfI0evY/rb741vaXVioHOhqipLO/twupR6j xcQ8gQ7ZSAU0Y+iG9S6sA/cTq6wsGPEAizYBMh0xT9ICsNwtI17HRiRGHJ1hxPIRSpPc QyEznYnXFkX9w7/m8lTc/Ef+LKIK1YwZmIeRcHSAC38Y+nZDeEiGVFTcZKTKvFe0Gc0X DhbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748472054; x=1749076854; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6kL9NcDOg3E/VueeDRR5pbIC0rsPUc+XGAmRMT1rmTI=; b=ZIMSQGyA2yzvENDaIS36pbqdL2cofPFojhXHPF5iBWftscAMoT83v8l5xxBqtsLldI IAyvYouTjkJ1YpT/Dw5pR2UuO5oOoKoVdKXE95dUJ0CB65ibxHiFe6/oVoQj44zUIJQv FSi1Xsh7OPRxIHcPBKsUMfPEMamCAFLSIrpvfIidrj2NW0LkwzR07IMuNdkGKPrlClHK VnUU1d9DIe2cFr2TwsP9o/J6KwcPx0cediq9Fe07LAx7e6xO7H0uKqVr+oBrom7mVqRf mkFtxQD1KMPOe2ZeNOZO9JkvPLTm/M6VEomYpsVFW6fgVIfAPthqHL9a+GYIlnLKdT3x dfWA== X-Gm-Message-State: AOJu0YxBpap1/iGTMKa0kRZNxD3LavkaOT9yBgCCi3MwskgQmZ/yTrB+ Is/ry7/G1LkgN+Xt+uG2SK9EbevDwDvIzY+e1AsVjzdCaEu0hdNG7TrH5qm98yCtsJ6qAXCUFt5 JGCHBfcsC+g7jzrLsQvVaHXZPHBPw0YE= X-Gm-Gg: ASbGncsllXA1k6ebjGd+Bgu9Qj8D7tP4YvblGo35OWa3ub1rRPEX7QAhaFWZwQrnMcy xgoVRD4bVcQv14hqudENVVdtfD/Fwop16XHt0dhHijN4ShaERUnt+s7+XeYkXMFWwjTPkDR40x3 Utq9G1CviQw4afMsz+HzL4Vmo/CwB+ZIyxlQh5TxouZAzPvg== X-Google-Smtp-Source: AGHT+IFkFMa4jmVta0sNAItfwpCaSVQY6lBKe2c7Yi4hOseu/8/4X2QBVRzMWeRIuQNXpwcZf/75mQD/Mhvvr+mJGJg= X-Received: by 2002:a05:6102:3ec8:b0:4de:ed14:da6d with SMTP id ada2fe7eead31-4e42405fd7cmr17068211137.2.1748472054496; Wed, 28 May 2025 15:40:54 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> In-Reply-To: <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Wed, 28 May 2025 18:40:43 -0400 X-Gm-Features: AX0GCFti6E7CEgJ4KK1-qftWlU1OH7BVg9WVc-L3gGd71jVhSRxFdEe1V6XSM5w Message-ID: <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width To: Jim Porter <jporterbugs@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000b54402063639df94" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000b54402063639df94 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, May 28, 2025 at 6:17=E2=80=AFPM Ship Mints <shipmints@HIDDEN> wr= ote: > On Wed, May 28, 2025 at 6:15=E2=80=AFPM Ship Mints <shipmints@HIDDEN> = wrote: > >> On Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN= m> wrote: >> >>> On 5/28/2025 1:40 PM, Ship Mints wrote: >>> > But... Did you run the repro in question and it worked for you, or ar= e >>> > you saying that this worked for your case? >>> >>> I edited your repro to use that call (see the diff below), and it all >>> looks good to me, as shown in the attached screenshots. >>> >>> --- before.el 2025-05-28 14:58:33.646686778 -0700 >>> +++ after.el 2025-05-28 14:58:42.551136757 -0700 >>> @@ -12,8 +12,7 @@ >>> (let ((pad-to-width 150)) >>> (cl-labels >>> ((string-pixel-width-scaled (str) >>> - (ceiling (* (string-pixel-width str) >>> - (/ (float (default-font-width)) >>> (frame-char-width))))) >>> + (string-pixel-width str (current-buffer))) >>> (insert-pad-to-width (str face) >>> (let* ((s (propertize str 'face face)) >>> (pad-width (- pad-to-width >>> >> >> Interesting. The results got worse for me, not better. >> >> What platform did you test on? >> > > In any case, it still doesn't explain the root of the potential bug with > :width being different than :min-width despite the inputs being identical= . > Okay I applied the one-liner correctly this time and now I see good results on my mac laptop. My contention still stands, though, that with identical inputs, 'display 'space :width and 'display 'min-width should produce identical results. Does that make sense? --000000000000b54402063639df94 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Wed, May 28, 2025 at 6:17=E2=80=AFPM Ship Mints <<a href=3D"mailto:sh= ipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:</span></div></div><di= v class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmail_qu= ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20= 4);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-f= amily:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">On = Wed, May 28, 2025 at 6:15=E2=80=AFPM Ship Mints <<a href=3D"mailto:shipm= ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> wrote:</span>= </div></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" st= yle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padd= ing-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-family:m= onospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">On Wed, Ma= y 28, 2025 at 6:12=E2=80=AFPM Jim Porter <<a href=3D"mailto:jporterbugs@= gmail.com" target=3D"_blank">jporterbugs@HIDDEN</a>> wrote:</span></d= iv></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style= =3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding= -left:1ex">On 5/28/2025 1:40 PM, Ship Mints wrote:<br> > But... Did you run the repro in question and it worked for you, or are= <br> > you saying that this worked for your case?<br> <br> I edited your repro to use that call (see the diff below), and it all <br> looks good to me, as shown in the attached screenshots.<br> <br> --- before.el=C2=A0 =C2=A02025-05-28 14:58:33.646686778 -0700<br> +++ after.el=C2=A0 2025-05-28 14:58:42.551136757 -0700<br> @@ -12,8 +12,7 @@<br> =C2=A0 =C2=A0 =C2=A0 (let ((pad-to-width 150))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-labels<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((string-pixel-width-scaled (str)= <br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ceiling (* (string-pixel-= width str)<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0(/ (float (default-font-width)) <br> (frame-char-width)))))<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(string-pixel-width str (c= urrent-buffer)))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert-pad-to-width (str f= ace)<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let* ((s (propertiz= e str 'face face))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (pad-width (- pad-to-width<br></blockquote><div><br></div><div style=3D= "font-family:monospace">Interesting.=C2=A0 The results got worse for me, no= t better.</div><div style=3D"font-family:monospace"><br></div><div style=3D= "font-family:monospace">What platform did you test on?</div></div></div></b= lockquote><div><br></div><div style=3D"font-family:monospace">In any case, = it still doesn't explain the root of the potential bug with :width bein= g different than :min-width despite the inputs being identical.</div></div>= </div></blockquote><div><br></div><div class=3D"gmail_default" style=3D"fon= t-family:monospace">Okay I applied the one-liner correctly this time and no= w I see good results on my mac laptop.</div><div class=3D"gmail_default" st= yle=3D"font-family:monospace"><br></div><div class=3D"gmail_default" style= =3D"font-family:monospace">My contention still stands, though, that with id= entical inputs, 'display 'space :width and 'display 'min-wi= dth should produce identical results.=C2=A0 Does that make sense?</div></di= v></div> --000000000000b54402063639df94--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:17:27 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:17:27 2025 Received: from localhost ([127.0.0.1]:57950 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKP5R-0003Mo-8H for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:17:26 -0400 Received: from mail-vk1-xa2e.google.com ([2607:f8b0:4864:20::a2e]:46220) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKP5N-0003LQ-8k for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:17:23 -0400 Received: by mail-vk1-xa2e.google.com with SMTP id 71dfb90a1353d-52f4327a0c8so120101e0c.0 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:17:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748470633; x=1749075433; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=rDqrvOUklHeOMI8cCF7A1m7S9zXaRGDsRmjKowQzNFA=; b=guZqKdInp3vVzBHmrPrZokmfkcWPhpfsgJZSDjVrddx4iXS5C5gqY1gJI62a4e/5jF ZuHQE2B8VhaGkeP35r2d9mkrXOISxz1GgBWEnlEmrtAPTWSs9B3/RdZ6eEX/RmuDH2VY zXj/I0Q0jFdfmLnV3NbnGziAM6O75aeGmNnZCP2FMnRkvZ6O5H5/Ggwe9yz+bO5oM4py osDVC0cWuzIRfqw7gh8X7mg2l/7plaDFDbgxx/v/0Y/KzfWKlEzdYcG7IOjdUZ/LxMrA 3A3GePKpQ9+MslNflMxUdxaUmLkMBSiIb384zsoNiMX/Y31maPOivccOcUsB6xv7i88l POHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748470633; x=1749075433; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rDqrvOUklHeOMI8cCF7A1m7S9zXaRGDsRmjKowQzNFA=; b=evlLkjrjl19lA7fsKl6W/k47y4yZj6CgzMUsL82bckedCpzdCifJaPZiB2tGSFs/Z7 f5puENioQUQF7hTPr7pp4+DAwTKYrfmqhisTvioaTVrhaLKPWu+KE0YAnMrJ/74ul6y4 RxCOVxbBCz412TiXh/4VvsgjSosVA+TE1pM+1wR22PamUMduEQ9MvFa4d25xTJK9zKvx yTdcpMqsFWxgy79QkgelG8hfD1fqIVTU1KnwaTi6OavgjohSS3SqAi6oJjuD6FaZ4wL3 oW1+h20U9hCVRdSauABAbzpFgSkB8cSRNzVVaQlNjGFOtk3taMBXMWRPDxS1zWaBqetH wHag== X-Gm-Message-State: AOJu0Yw609bmNiKqTMDs02SD8sWtwUhPHA14kcA5yqHoQkwkLnOLOuyO ZzYQJ26upnopmpSSso5WhvqsYSkaYUPiNi+xjj8WvrBCsE0tDMWqO+026jQTRYwRSS5UwpesiK3 J3z2ueKxrQ+tn/6tSNdfmR17o5kG0wFY= X-Gm-Gg: ASbGncvF9kjbdvnCeyAcrt1NWjroYLvgGcGLGpcthB4U041rtlCkilrJzKGYPVzMbGy lvB3wDXRgfOfNeXcuGgLe0qFbLvzeRAX4wwfD7KD0oyN8rU8xQMT+js+mgktivVqVoYs9fJXOHG iZ4GzhTqLO4Wu+j2t/bsq8t2zGU4csUGJtWsvrmjReDe+0xQ== X-Google-Smtp-Source: AGHT+IENNDqlgX44C29SW/20uDvAxSgJswoO6GBz+/U7u+uON0+utfcT6djp6mdQuQGmiHENS15RW7c0XfufhOvkVhQ= X-Received: by 2002:a05:6122:430c:b0:529:1a6a:cc2f with SMTP id 71dfb90a1353d-52f2c577188mr15798489e0c.7.1748470632668; Wed, 28 May 2025 15:17:12 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> In-Reply-To: <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Wed, 28 May 2025 18:17:00 -0400 X-Gm-Features: AX0GCFue5NjzPUeXWdweIz06sHKlamPSVklcqK_GY8vOnLS6TKSGyImctGibk0o Message-ID: <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width To: Jim Porter <jporterbugs@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000f5e1140636398a50" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000f5e1140636398a50 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, May 28, 2025 at 6:15=E2=80=AFPM Ship Mints <shipmints@HIDDEN> wr= ote: > On Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN= > wrote: > >> On 5/28/2025 1:40 PM, Ship Mints wrote: >> > But... Did you run the repro in question and it worked for you, or are >> > you saying that this worked for your case? >> >> I edited your repro to use that call (see the diff below), and it all >> looks good to me, as shown in the attached screenshots. >> >> --- before.el 2025-05-28 14:58:33.646686778 -0700 >> +++ after.el 2025-05-28 14:58:42.551136757 -0700 >> @@ -12,8 +12,7 @@ >> (let ((pad-to-width 150)) >> (cl-labels >> ((string-pixel-width-scaled (str) >> - (ceiling (* (string-pixel-width str) >> - (/ (float (default-font-width)) >> (frame-char-width))))) >> + (string-pixel-width str (current-buffer))) >> (insert-pad-to-width (str face) >> (let* ((s (propertize str 'face face)) >> (pad-width (- pad-to-width >> > > Interesting. The results got worse for me, not better. > > What platform did you test on? > In any case, it still doesn't explain the root of the potential bug with :width being different than :min-width despite the inputs being identical. --000000000000f5e1140636398a50 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Wed, May 28, 2025 at 6:15=E2=80=AFPM Ship Mints <<a href=3D"mailto:sh= ipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:</span></div></div><di= v class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmail_qu= ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20= 4);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-f= amily:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">On = Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter <<a href=3D"mailto:jport= erbugs@HIDDEN" target=3D"_blank">jporterbugs@HIDDEN</a>> wrote:</s= pan></div></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote= " style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);= padding-left:1ex">On 5/28/2025 1:40 PM, Ship Mints wrote:<br> > But... Did you run the repro in question and it worked for you, or are= <br> > you saying that this worked for your case?<br> <br> I edited your repro to use that call (see the diff below), and it all <br> looks good to me, as shown in the attached screenshots.<br> <br> --- before.el=C2=A0 =C2=A02025-05-28 14:58:33.646686778 -0700<br> +++ after.el=C2=A0 2025-05-28 14:58:42.551136757 -0700<br> @@ -12,8 +12,7 @@<br> =C2=A0 =C2=A0 =C2=A0 (let ((pad-to-width 150))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-labels<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((string-pixel-width-scaled (str)= <br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ceiling (* (string-pixel-= width str)<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0(/ (float (default-font-width)) <br> (frame-char-width)))))<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(string-pixel-width str (c= urrent-buffer)))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert-pad-to-width (str f= ace)<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let* ((s (propertiz= e str 'face face))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (pad-width (- pad-to-width<br></blockquote><div><br></div><div style=3D= "font-family:monospace">Interesting.=C2=A0 The results got worse for me, no= t better.</div><div style=3D"font-family:monospace"><br></div><div style=3D= "font-family:monospace">What platform did you test on?</div></div></div></b= lockquote><div><br></div><div class=3D"gmail_default" style=3D"font-family:= monospace">In any case, it still doesn't explain the root of the potent= ial bug with :width being different than :min-width despite the inputs bein= g identical.</div></div></div> --000000000000f5e1140636398a50--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:16:15 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:16:15 2025 Received: from localhost ([127.0.0.1]:57940 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKP4I-0003GD-K1 for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:16:14 -0400 Received: from mail-vk1-xa29.google.com ([2607:f8b0:4864:20::a29]:59447) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKP4G-0003Ff-6e for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:16:12 -0400 Received: by mail-vk1-xa29.google.com with SMTP id 71dfb90a1353d-5259327a93bso78522e0c.2 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:16:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748470565; x=1749075365; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=77tv7u1HQEUgM7LZyS210423SFwfn1hfLryaI7PHdnA=; b=mixItbvwV/cjvO/2q8gE3QdoY3nr/o9xsu3zixNG8tI2QbB1T7/uXKywYpZupUpDET IyUYPyBTPqV6uKpPCUbvGEKBz4+YyoOR3Vh9D1fANm2MKedMOwIH3KCzTTL3lF+qwCS7 PlO1WX/dZncMwjp6aFEZoudxb6kiEjFNBcwSS37GYpYwBZ/u0oiNDd46/PEkY2xUKwvn WmT+nKwNq3siVBjQufKkMZjeth9rXQ3ltspuygcWXVxX2w74/ffbuI3o/nVYx36W+LsN RP5VFzfRcBP5YmlqhW8CErW2XO3l1sAVIugukOqBB0OcJamqxMDV5Ft/JcWhAplQfZM9 hfgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748470565; x=1749075365; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=77tv7u1HQEUgM7LZyS210423SFwfn1hfLryaI7PHdnA=; b=Sak9a+hxe04UTgoqNRMMgk1S6LqxX6rm20725DJJvZkRR6cyTkTGRq5PZK6PQdw6Tr BHRoaEXrCVE949TiccEdLwiMPa0z4oBcxhnSUE+j9DursHRCgJHt6RIB5DzLVeLVrVTE ycyihdBt8NjXB1XuUN6ppiEXMzD5JPnIVqQr22qWUREwTJDwdZKrkmVflCUJSrLoRXsp XvuFdgIM2Jlm495cZNQgDFygL9aoEf71u+ALHP6pIUMe7TndcRThPAjFD5aWXP98L9gr YPyGcVTT32eZl1CtyxtVsWLVv6MoSxF7f8UdrkgKqbTYTafNdNHqwHUDN14I5dDzhL86 9Kew== X-Gm-Message-State: AOJu0Yxf/GckS9ml0tkIkrkOdPoYnJA4zlRWvrEP7S7zEIAVg/x6hMgD O8W8uhkmgpf+HXbTkqvEYU5N9bg1pC+I/VBg03uzkCskfPprBdDtgQD5Lz3BGpXlzjfw3pD7sD5 KYPcwSgDzc5sSpH1EUmZCoYbn1vdr+bE= X-Gm-Gg: ASbGncuCBe6OFUu0p77sa1hmZEbsCqsfTDSHOnhy1b9SXdn//ExTw2v3IaW8uSi/AGF lFIftIkH9Bz6mJn9nk38XE+9j6KL2Gm7uhJmpO7zgdRHi0xH4uLzotXs48KqWaG4h0KJzsF0tWg peRwUFfQQ8X+kRitkOmDepnmffLwKVKHnYgqU0whI3d176WQ== X-Google-Smtp-Source: AGHT+IGsX4r/5fbCmeruv24XivjEt2dE0Yg2A0rBjZpo6zze13fEmD7NKBLA2EKmCZM+lqSKGAOQgRwryKWvOZ1RMoU= X-Received: by 2002:a05:6122:82a6:b0:518:7ab7:afbb with SMTP id 71dfb90a1353d-52f2c583c8bmr14018907e0c.8.1748470564590; Wed, 28 May 2025 15:16:04 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> In-Reply-To: <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Wed, 28 May 2025 18:15:53 -0400 X-Gm-Features: AX0GCFt6u__dMCAyk-U28IJwXxcZWIHV8fY12RYGnaFtxOJaSRZlFV2ln7p9XCQ Message-ID: <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width To: Jim Porter <jporterbugs@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000e7199306363986a1" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000e7199306363986a1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN> = wrote: > On 5/28/2025 1:40 PM, Ship Mints wrote: > > But... Did you run the repro in question and it worked for you, or are > > you saying that this worked for your case? > > I edited your repro to use that call (see the diff below), and it all > looks good to me, as shown in the attached screenshots. > > --- before.el 2025-05-28 14:58:33.646686778 -0700 > +++ after.el 2025-05-28 14:58:42.551136757 -0700 > @@ -12,8 +12,7 @@ > (let ((pad-to-width 150)) > (cl-labels > ((string-pixel-width-scaled (str) > - (ceiling (* (string-pixel-width str) > - (/ (float (default-font-width)) > (frame-char-width))))) > + (string-pixel-width str (current-buffer))) > (insert-pad-to-width (str face) > (let* ((s (propertize str 'face face)) > (pad-width (- pad-to-width > Interesting. The results got worse for me, not better. What platform did you test on? --000000000000e7199306363986a1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter <<a href=3D"mailto:jp= orterbugs@HIDDEN">jporterbugs@HIDDEN</a>> wrote:</span></div></div= ><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmai= l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20= 4,204);padding-left:1ex">On 5/28/2025 1:40 PM, Ship Mints wrote:<br> > But... Did you run the repro in question and it worked for you, or are= <br> > you saying that this worked for your case?<br> <br> I edited your repro to use that call (see the diff below), and it all <br> looks good to me, as shown in the attached screenshots.<br> <br> --- before.el=C2=A0 =C2=A02025-05-28 14:58:33.646686778 -0700<br> +++ after.el=C2=A0 2025-05-28 14:58:42.551136757 -0700<br> @@ -12,8 +12,7 @@<br> =C2=A0 =C2=A0 =C2=A0 (let ((pad-to-width 150))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-labels<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((string-pixel-width-scaled (str)= <br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ceiling (* (string-pixel-= width str)<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0(/ (float (default-font-width)) <br> (frame-char-width)))))<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(string-pixel-width str (c= urrent-buffer)))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert-pad-to-width (str f= ace)<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let* ((s (propertiz= e str 'face face))<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (pad-width (- pad-to-width<br></blockquote><div><br></div><div class=3D= "gmail_default" style=3D"font-family:monospace">Interesting.=C2=A0 The resu= lts got worse for me, not better.</div><div class=3D"gmail_default" style= =3D"font-family:monospace"><br></div><div class=3D"gmail_default" style=3D"= font-family:monospace">What platform did you test on?</div></div></div> --000000000000e7199306363986a1--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:12:26 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:12:26 2025 Received: from localhost ([127.0.0.1]:57916 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKP0c-0002w4-0u for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:12:26 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:43181) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>) id 1uKP0Y-0002vS-Pn for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:12:23 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-22e09f57ed4so13051335ad.0 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:12:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748470336; x=1749075136; darn=debbugs.gnu.org; h=in-reply-to:from:references:cc:to:content-language:subject :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=MB1d39o2VVzc1lWqaYXyAyVke4GvXon7MAZolIaUT8w=; b=IHDoCSGAG+cKUiDz3WV3pwhc3526XSyZSYsJ+Cs9UX5xbHNB2T5wYsp0btxxoGHVee 2IQTjy8N4Cs8a6d77bOQGvW5wBEU7isCOz3Vv04iLcBxTurfAEYRLy1q5oBJQ2dsNXRt Ddc0jHHGbTjfFWnQEjfdRiw88RNBZ411ag74J/bvZ8jhEf/DzKM+1xRH+wbR19wLiCii sN8wi5Iyyl+ZbsgDxJi45EsMq11HBdA89RluTmzPDC6rXmB3BgysN5yRwA156C7ysXhj z9l+ro8CCLvqCp0Rn1m+4LpJVMXOvlvU+IKOgB3j1WhHBhES5h9nBa8ZVj7aip5GLEuN UujQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748470336; x=1749075136; h=in-reply-to:from:references:cc:to:content-language:subject :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=MB1d39o2VVzc1lWqaYXyAyVke4GvXon7MAZolIaUT8w=; b=l1tZrfNOkslpZyVGIVXEXCOjEqkPSyAHp1JQeWFbbJwDbyWUdFOzxwgVxJGIxlc2T6 vXw+nyW0rpTSyYMEt7U7cKUnGZC4m/CLOjcHX88x0of24Uun1K2gLnmYAkjP6tCc+0pX hsht+0m64qlHWJgFZBn1ocO27FTqx49dxO4kKR4monyP3AIQ+8Pmfys8XvTFOcLnJNVI 9ROsen9WNMF4eoXbZeQqgfmrVUyqz2Au9A7kKV72HYcMB+pBQY11c0mNTz+5LeaaQwSy vhXK3FBdd7wjg7Covg7LHojIhnCJbi63Rm9ueT3+d7tuNEm8QL0Le9lPUdACaER9bv0C E6sQ== X-Gm-Message-State: AOJu0YzZ5j8iop1FPqi+5wRdmwqkgx7NGSGbPDm+TLfHfK+8mS63h3MW bLHpYTPvF4RoSRIaeWRKNnrSJyPTXmWAJz2fN0J/qAnb2mYMZ8sT3hXB X-Gm-Gg: ASbGncthexN+BOpVwVlPLZDS+p5Mf+DyWtE4bLQ+6GlpkE4vWfe/fdy7n3x8BpMdK2x 6dwczqj0y6Zn7TJv9uen8kfnf7HcqoQ021CPs3PUXZ2I0TmlpRZpVUeM9bYjS4jOF8kM7unHysz Ptk0cVULbsaLOcioizba+bnM8QWwxPa+2Yj0CcxDts0eF13aniVVKPV53o29pae/zsoQetBMn9E Imm/TJy5/aj0i2fOAfb9aNZi3ypseVYEfz+3fQhtyIMg4Cdys5r/4SxHjHD9dxKfshAor6Me+NK OH4xgKbhYFeRr45eL5fV9wiawmy9ZNv80L8I/45WDthxFNb32mWou/NSM2WpZfLzGiyb8AO9/oN seCEQQv6Db7FUQ5G1Bs4nV29tKpbeiNJtkaSEGnobV+6SMqEzwb+m X-Google-Smtp-Source: AGHT+IGuwdIAOg3DcIFDhgk546Ff+tnsqGqpw8bLtsaHN/zh0RYY8IZI4eLbqZyYy0MZxibVvParkg== X-Received: by 2002:a17:90b:4a0d:b0:310:b602:bc52 with SMTP id 98e67ed59e1d1-31214e11d96mr1698175a91.2.1748470336118; Wed, 28 May 2025 15:12:16 -0700 (PDT) Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com. [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-3121b202763sm140816a91.0.2025.05.28.15.12.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 28 May 2025 15:12:15 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------U4LDQgR0uj7riKGeJtFS2Esd" Message-ID: <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN> Date: Wed, 28 May 2025 15:12:14 -0700 MIME-Version: 1.0 Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width Content-Language: en-US To: Ship Mints <shipmints@HIDDEN> References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> From: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> X-Debbugs-Envelope-To: 78621 Cc: 78621 <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> This is a multi-part message in MIME format. --------------U4LDQgR0uj7riKGeJtFS2Esd Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 5/28/2025 1:40 PM, Ship Mints wrote: > But... Did you run the repro in question and it worked for you, or are > you saying that this worked for your case? I edited your repro to use that call (see the diff below), and it all looks good to me, as shown in the attached screenshots. --- before.el 2025-05-28 14:58:33.646686778 -0700 +++ after.el 2025-05-28 14:58:42.551136757 -0700 @@ -12,8 +12,7 @@ (let ((pad-to-width 150)) (cl-labels ((string-pixel-width-scaled (str) - (ceiling (* (string-pixel-width str) - (/ (float (default-font-width)) (frame-char-width))))) + (string-pixel-width str (current-buffer))) (insert-pad-to-width (str face) (let* ((s (propertize str 'face face)) (pad-width (- pad-to-width --------------U4LDQgR0uj7riKGeJtFS2Esd Content-Type: image/png; name="before.png" Content-Disposition: attachment; filename="before.png" Content-Transfer-Encoding: base64 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 --------------U4LDQgR0uj7riKGeJtFS2Esd Content-Type: image/png; name="after.png" Content-Disposition: attachment; filename="after.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAaYAAAOKCAYAAADQgPRnAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH6QUcFgQdMHHxogAAABl0RVh0Q29tbWVudABD cmVhdGVkIHdpdGggR0lNUFeBDhcAACAASURBVHja7J15WFXV+oDfMzKPMgvOU445FSpOEZKW 5jynqTctLUtvDleztNJStH7m1dJS08ShHHEKtboppqJlhUPOE8ogDgjCgcM5+/cHiKAMB0FB +d7n0Ufk7LPX3met/a1vrXXWq9q6daui0+nQaDRoNBq0Wm32v9VqdfYflUqV698AKpUq178F QRAEobio5RYIgiAIEpgEQRAEQQKTIAiCIIFJEARBEIqI9sqVK7kWPOS38OHO4oc7/8658AFk 8YMgCIJQQoGpUaNG6HS67OCk1WpzBSpfX98C38BsNktgEgRBEEouMFnyouTk5DwzKK1WK3dQ EARBKFGKNMdkPLWCIc18sLfSYxv0ZcmUwHyWzwIc6Lj4KkqJvKGRfeNq4f1aOOlFPfLkMgY9 7Y61Ro1V4AIum6WCPHzSCHvFjVZzziC3+2FgaXsoYrsxX+SLtg4ELYwtoXYrCEXMmLLyJsI/ ncTBVsu5GBlEBa0KrfatJ+hWJLN9+gQiA1Zy5fcgXDVSOYQnAR0tQk4SIzdCeCIzJtMloo6l 0ah9wAM9tJXrK+nupEZXfwqHM4p6tIGTayfStbEfTrZO+Dbpzaf/i8NkUc/uMgsCre5btKGt NZ79xpzXd4G/jxh4+rnW919fxmV2fjKAltUrYGvvQZ3n3+K7o8nSU5SM64knfecIKtYYy16j 3AuhLAYmJZVUgxYr3YMsclC4uWM9uys2pcGVzWw6mlGkY+PWv0bQa7uo9J/tnLkex5/Le5G8 eQtnTJa+h5baEyMxKgpK1p+Mk7Pw1+W+vhSDDiu96r5Mas+kF+i5FF5dGcXVuKOEvdeIPzbu JkXqjyAIQukEpi+DXbF1DGDW8Wus6OaATqe7f47JuJex1bTYdFnOzfveIZGdG37Fo8tUXm9x jrCwf+7Ldm4fnk+fBu7Y2rpTt/OH/BSf1f81/cOST9Zi89p/CeldHzdra9zq9+LjOcOolZXZ GP5ZwesBlXG0caBSmzFsumSy/A6YL/JFWytUuuZ8ciyB5Z2tUalU2XNMStwPzFx4lZdDFjD8 WR/s7Nyp1e5ffD65E3ZSf8o05rhdTOvaCB8Haxz9mtJrxs/E3ukTmU4yy9+edqOn0bO+G7a2 HjToMZOI63fzYMP57Uzv5081VzvsPevRcdx6zqbnzuTPbJhEtyaZmbxf836ERCRkZ9JK4u8s HN6Omm62WNv70KTvbPZeL2KenVe7Mu7j3Vp+vL4z7d4r5vzcNjh3XkaConBjWWesVSpUKg0e ecwdFdRuMv76gIY6FVYdFnHlzOcE6FWoVFpqjttHzuQp49wPvNWmSuZ7tJ1AeLyMIwiPKDC9 EX6dlFsRjK9TgYEbkjAajaTsfMPys9z6iY0/29C+w3MEBz/NyU2bOJErdqSzb9tpOv9wmusX tzIkbR4Dx2zgugLKzQPsPWqLf9vGWOX13qajfD5oJL/W/Zw/r8YT+ZEre7ZfwOLQpK7E6F/T UIwH+c9TbgzabEBRFNJ+GklFNRgP7yUyvTFtWzpKbXmsMBI5ZySf3+xL2LmbxB5cSn/jFjad NOWqd3u3naX7+rNcvxDGgJsh9J8QTlLW7/YsXYGx50L2Xb5BzP6Z1No5jMHzT2XXreRfJtDx 1S14vLuF09fjiQodSHpEBAkKYL7CyqEvMfVCB746FMuNSzsYrf6SPu9s4kZxn926hgQ8k86h yDP31PMU/th/nDoB/rioVLgM3oxBSee3d6ujKWK70Taaxt9GhbQdw/GpPoaIdAVFyeBUSAt0 Oe7x/s1RtFkcRfzFrfRPns/Er45gksonPLKhvEIbSys+O5tBatggnO/5VdLPG9hFWzo8Y4Nv YBC1j20i7JQp11BbvcHj6VfHCWu3Z3hr7Mso4WHsTQPl1k0SFUecHfMuquncdsKO1mfY+K5U s7fBq+14xnZyIPeAXAYnPn0GXY45JptuK0m24LIyEm+SpHbC2VEFpLPrDR80KhUqmx6svi0V qPSxost3Cez9d/V7KrMKnU6HSq1Bq9Fi69WQbh98xoi6OR/ROhoOmUCfWo5Yu/szesxLpG3b yIF0AD1B00KZ2qMRnjZ6HKp2ZHivakT9dhhDVhDYtTiUpB6f8Fn/RrhbW+Fc60UmT+yKuwrM l9fzTbg3I+dMILCKIzYu9Rk4fgCu29exx1DcdmXLMwENOXvgEInmGBYFO1Bz3H6MxiPsP+xE i1bVKGwa2LJ2Uxha6g8cQ4+aDli7t6TXC5U5d/w0GVIphTITmPIlmV827MDQMogAO9DUDiLQ 9wgbN+fs7anx8PbMbkxaDy/cDNe4lqKgcnTGUXWLm7fyntpWrl/lusoDb0919oPK09v1ngu7 f44pdUN/7C1pek7O2JtvkZikAHqe//IKhr1jqS6r9so4WppMXM38FlFMfNGfxk3b0GPcKo6l 5K7+nt4e2XVF7+mFS+JVEoyZGdPpdRPo0rgSLjZa1Got9d/7A0PKbQwKoNwkJtaAT/WqWOc1 jBgTTUzaYd5voM3uDOkaf0RUUgJXk4ubMqnwaNGSSn/v53DCr/x8qwHukTs5Gn2Ig9ebE/C0 rtB3sKzdFF4OZ1eX7GN0eh2mDKMsQhEeg8B0+1c2hl8jKWwwbmoVKp0/IacMHN64mfPZNdhM fExcdoXOiI/lmo0b7rYqVM7NaflUCvt3H87z+xXqCh64EU/snTkp0oiLuVFijUP3dAua6/4k 4oCkR48bKocG9J/+HT/+doiD4TOo+csIRiw6m6NumImPic/+2RgXy3WHCrjqQIlfyTvDNuD6 7y2cuJaGyWzkr6mN0CpK5hySyhlvL2uunDlPXgmQ2ssHT+sgvooxZ3eGFEVBMWxnmHvxd0nR 1gngWfPv/O+7HSQEf8wIr71sWb+X4w0CeNbWgoZvabtRqVApZgk2wmMamPJZ/JCyewM/Jrdn wSVTduNM2TkCj8Mb2XwhOxRxdPlsVp+4heHaIRb832bUnbrTygrQPMXQCV1JXvgm7/5whITU ZK78uY6p45dwygTqKp14ucFRFoeEce52KrF75jB3+60SW8qt8urFuGHOrBs/mmV/xGEw3ubi iQskyxxvGSedne/3Y8rqSC4kpmG4nUiywYxGkzPVNfLXtyGsPZWEISGSeXO3YtXxZfz1oKSn kJqhx6GCC/a6dGL3L2T68pyLdmwJHNIP+3WTGLfmCAlp6dw6s4OQ2WFcVUDt252hgUeYM3YR +6KTSUuK5s/Nsxk6ckmODtmDtyv0TQlofJLFc4/TJLgVwUE6lnz+K54tW+JlQau2tN2o3T2p cPV3Io4lSXASnpSMKZWIjdtJatWblyvePZVNQB+6evzBhs2Xsiq7nhYvVGF996q4+HZksdVo Qud0xlmVWUTv3ovZ+VV7zn0cTDVXH5oPWY2+YyeqaTID19vfLqDtkdE0quBO8//E0+KFyveM sd8/x6Sy6c3aNEuuwZH2s35kdZ/bzO9WG2c7d/w/vU6Xme/yvK1UoLKLnoBBfVCvf4u2lZ1w b/IOUa2+YN7QyjkqvZ5Wwb6s7FwZF79OLLMbw4pZnXAE1BUH8un0euwZUhtnRz/afxhN665P 5/pGukPgLLYuDib6k2CqOVWgbt/l6FsH4KYC1L4MWrqJsQ5reLWxJ06+LRjydRyBI7pTqSRa ncoJ/4DaXDc/TYcmVngEBeF3zcwzAU9lltG4n/G1tKhUelrOPkXsNy9gpVKh8RrOjnRL2w1o 6w/lvYEmvmxdAZ36/lV5gvBQRjsiIyOVwjZxLWivPNnEVSgeaYS9UpGZTx9gz30LGB4ippPM atWUPW9cJGywC1J7BaHcZEyCIAiCUDRke3ChlMlc7t1FboQgCFlYNJRXEDKUJwiCIDzSjOnW rVu55pfutdgKgiAIQkkic0yCIAjC4xuY7hUFlohIT0SB5ZyHra148PrwaM8voj5BuEOxRIFP 1kieiAKfTEpblCeiPkF4eBmTiAJFFCg8ckTUJ0hgKjCyiChQRIGCIAhlITCZo/MVBeaagxFR oPAISds4AJdabQiu64ZLzd5MmdyFqg6O1BgQykVzZoemQFFe1hxN+4nzeLOoojsR9QlCKQcm tW++osCKluZbIgoUHgKKoQajfopgstdmFpzoxe6jc6m3Ywmbr5iBQkR5mRHmwUR3IuoThFIO TJYiokDhEaOp0pCGntVoUMeVKo0a4+P9FLXdE4iJt3R934OK7kTUJwiPR2DKFxEFCg8HlU6P DtBotej1OlBp0WoyyLD4yVyI6E6JY1GwdVZnRkvVMRFZw2gi6hOExzswiShQeMSU2CyLypPh 4YaszkwG5z4PyB5GE1GfIDwOgUlEgUJ5QkR9gvC4ZkwiChRKicJEecXusYioTxAeFoXuLu7o 6FjgJq53NnKVDV2FB6OURIGCIJTXjEkQBEEQioaIAoVSRkSBgiBIxiQIgiBIYBIEQRAECUyC IAiCBCYLMR1nRjMHuoYmlejbmi/9l/YOz/PVFQu/ZGQ4wsJ+DXG30aBv/CFRsslYKfCwRYHl HREVCo8f5Xjxg8K1de8z6VhHNsf+SUsnSR6FJxERFQqSMeVMizg2oxl6tRNdlsU9QK/KTELk N4zt9izV3e2xsrLDo1Zr+n+wluOWbLugJLCkk/V937lSabwZsTMdMHH672NomrSlWa6gZOba wSW826MFNT0dsNZb4+xbn8BB0/g+KlF6h5JxlStEVCg8WYEpPZKl392g6+BniFyyinNFemoo XN32Jq0DP+R4w3F8/8dlbiVf458fQ+iq38yyHYkWvo+GKu/sIT3H5q2KKYaFQXpAITXFgN5a f895RxEQOJUjdccQGnmRm7dvEX1oLZPb3Wb1F+uJlqefIAhC6Qam6EUv4d0mhOM55l9Mp+bQ yjmAOadMgIkTM/2xrTuJQzl2dU7+aTFrnV5j6tyJdL+8jGV/Z9wXfBIPzmNgcz8crW1xr9eF aTtjM3u96QcIGbME9RurWTetJ039nLDSWeNazZ/ek5fxafdMsYbx/EbeDaqJq40NLlVbM+Lb IxZaZW+yvIsj7f97gctfBWGl0lF/yh9kpB8gZMxSNG98z/qPevNMZResdXrsverw3NBZrP96 CH4y4vfYYI7bxbSujfBxsMbRrym9ZvxM7J1qaDrJLH972o2eRs/6btjaetCgx0wirt/NiQ3n tzO9nz/VXO2w96xHx3HrOZtrAsbAmQ2T6NbEDydbJ/ya9yMkIiE7q1YSf2fh8HbUdLPF2t6H Jn1ns/d6EXPuvPagFFGhUN4DU8Wu/Wl9dg1r/r5THTM4uiqU48++Qp/83A9KAmGLf+LpUUN4 yrEdo4boWb10L4bcKRW7V++h0dxI4m6cY/O/zCzq+yrfXDBjOrGDnRdr0K3vM+S7HZ3pGJ/1 G8xGz8n87/INLv3vfbx2rOGQRUMOzgwKu8Uvb1ai4us7SVOMHPmoCap/wtlxsQZd+zRDtsF7 3DESOWckn9/sS9i5m8QeXEp/4xY2nTTlqoN7t52l+/qzXL8QxoCbIfSfEE5S1u/2LF2BsedC 9l2+Qcz+mdTaOYzB809l61qSf5lAx1e34PHuFk5fjycqdCDpEREkKID5CiuHvsTUCx346lAs Ny7tYLT6S/q8s4kbxX12i6hQKO+BSeXeif7PJ/DDygOkAaQfInT1ZdoP6pFlsNVQe8J+Uo7N oFnWUgrzxTUsPdqJN7t7okJD3WGjqLt9CeG5RuC01H/9U8a09MbGxhP/0bMYWXUPoZsukXEt ngTc8XLPv3gZR79n1RF/JsweTENXa+wrB/He9EFUynWIifP/1xp9zjkm6/xX7ZmvX+XaPedN Cu2KTZE3fhUeHZk7R+y9b589FTqdDpVag1ajxdarId0++IwRdXM+onU0HDKBPrUcsXb3Z/SY l0jbtpED6QB6gqaFMrVHIzxt9DhU7cjwXtWI+u1wVgcrhV2LQ0nq8Qmf9W+Eu7UVzrVeZPLE rrirwHx5Pd+EezNyzgQCqzhi41KfgeMH4Lp9HXsMRQlCeQk4RVQolPPAhMqZoP4vkrZhJb/e htSIUNYldWRQZ7d8KrGJ498t4dcTC3jePvOBrvYezMbTG/lmQ86lpRoqVa10d1mgphJV/VTE x8RDBQ8qcJXYq+YChmliuepQmcqud0uh86uKb64Wmccck2EXr/vkXXK1qzsVuEpcjvM6DNhI qpLZc/SSYbzHCC1NJq5mfosoJr7oT+OmbegxbhXHUnJXf09vj+xGoPf0wiXxKgnGzIzp9LoJ dGlcCRcbLWq1lvrv/YEh5TYGBVBuEhNrwKd6Vazzqp8x0cSkHeb9BtrsTpGu8UdEJSVwtdjO FBEVCuU9MAF2bfvTzWoroeGX2LViE0qXVwhyzOfFaftZEqow6U/j3WCgKKTu6MfRpas4a74b wC6eu3S3d2W6xPlLCh7eHuhqd6BDpdNs/P4QqfkV3NML96QLXMgxZp9x6TzRxRhH0NTpQJDf aTb88Hu+5xUeH1QODeg//Tt+/O0QB8NnUPOXEYxYdDbHg9NMfEx89s/GuFiuO1TAVQdK/Ere GbYB139v4cS1NExmI39NbYRWUTI7VypnvL2suXLmPHklQGovHzytg/gqxpyrHSiG7QxzL/5O /CIqFMp9YMLqGfr3ciN83pv83zYHer7SOsccTO7FD0m7FvO9OZDgp3J/Rcra/wVa/fNtjkUQ GRxZ+B/m7Y/DYIgncsFEFpwNoF8XP9T6Zxn32RBMC/rQ68MNHL6chDEjjRvnDvDDjFeZuOEm 2ro96VN3PyETVnD0Rjopl35m+pTlXCxOC9L7M+7zIZjm96bn1HUcuphIusmE4dpp9u47SYrM 6z5GpLPz/X5MWR3JhcQ0DLcTSTaY0WhyptRG/vo2hLWnkjAkRDJv7lasOr6Mvx6U9BRSM/Q4 VHDBXpdO7P6FTF/+T475E1sCh/TDft0kxq05QkJaOrfO7CBkdhhXFVD7dmdo4BHmjF3Evuhk 0pKi+XPzbIaOXJLD3GwB+Qg4RVQoSGBCR8O+fan++w72+fZlYHN9PuMDVwlbvAmlfTCN7x1N sGvDCy0v8N3iPVnZiJ42vVty6K2muDtVptMCE0NWLuW1KmpAhfuL89mz8z1q/D6D7g09sbN1 pXbweLbp+vBasDNo6/PvVUt4KXoaAd6O+LR+n8uBvWmmyz2seN8ck8qazstu5PN9JBUeL84n Ytf71Pk7hL7NKuJgbYt73U5MOtyQjzeH8JKVVJrHAz0Bg/qgXv8WbSs74d7kHaJafcG8oZVz VHo9rYJ9Wdm5Mi5+nVhmN4YVszrhCKgrDuTT6fXYM6Q2zo5+tP8wmtZdn871jXSHwFlsXRxM 9CfBVHOqQN2+y9G3DsBNBah9GbR0E2Md1vBqY0+cfFsw5Os4Akd0v2ce9EHTQREVCk/waIeI AoXSpZREgaaTzGrVlD1vXCRssAtSewXhscuYBEEQBOHRIKJAoZQRUaAgCLmRoTxBEAShTCFD eYIgCIIEJkEQBEEoW4FJRIFCNg9bW1FEAV6pnV9EfYJwBxEFiijwCae0RXki6hOEMpQxiShQ EIqLiPoECUwl2qJEFCgIgiA8hMAkokARBZZF0jYOwKVWG4LruuFSszdTJnehqoMjNQaEZu2X WIgoL2uOpv3EebxZVNGdiPoEoXQDk4gChbKKYqjBqJ8imOy1mQUnerH76Fzq7VjC5itmoBBR XmaEeTDRnYj6BKF0A5OIAkUUWFbRVGlIQ89qNKjjSpVGjfHxfora7gnExFs63vqgojsR9QlC qQYmEQWKKLCsotLp0QEarRa9XgcqLVpNBhkWP5kLEd0pcSwKvrOARkvVMRFZw2gi6hOE0g1M iChQeMyG+Eos8nkyPNyQVYczOPd5QPYwmoj6BKGUA5OIAkUUKNxbV0TUJwilG5hEFCiiwMeN wkR5xc6mRNQnCA8L2V1cKGVKSRQoCMLjnjEJgiAIwqNBRIFCKSOiQEEQJGMSBEEQJDAJgiAI ggQmQRAE4UkPTMZTKxjSzAd7Kz22QV9yWb5YIRSbhy0KLO+IqFB4/CjC4odkwj+dxMFWy7kY GUQFrQpZIS4IZR0RFQpPcsZkukTUsTQatQ/AVVP0EynXV9LdSY2u/hQOF2WXyfRtDHXTZH5n Sq3BytmPpj2mEX753r2HzJz5rAuv/5hXf8/AybUT6drYDydbJ3yb9ObT/8VZtAuz6fRsWuhV qNVarJ18eKrdIGb8eOH+XqWSwJJOdjn2U7tTrMssCLS677tf2lrj2W/RNyUz+GNKfXT3Cg+t X+AbSxUHGZfZ+ckAWlavgK29B3Wef4vvjiY/IT1dybgeJiIqFMp2YFJSSTVosdI9SJqkcHPH enZXbEqDK5vZdLSo+x9b0WP1bRSzkVsnNzAwdT7931xFvAKYL/Htaz35YMu5TK2G6RoHFw6n 90e/Ze6GjkLc+tcIem0Xlf6znTPX4/hzeS+SN2/hjKX76ukaM+3vFBLP7+XrAWpCewfydviN IjzYtdSeGIkxx96BGSdn4a+z/A7o28zlginnZrQ/8i8PSz6LZPZMeoGeS+HVlVFcjTtK2HuN +GPjbgvdVYIgCGUtMJmj+TLYFVvHAGYdv8aKbg7odLr755iMexlbTYtNl+XcvO9NEtm54Vc8 ukzl9RbnCAv75wGdMWqsPJrQs1M9Uo9Fcd4EqP0Y/PnHNDwwmZGLDrL9/REsNb/KvP+0xArA 9A9LPlmLzWv/JaR3fdysrXGr34uP5wyjVhEyPxUarFyqEvDaAj7ra2DFZz8QU5IpR4H378GP V+J+YObCq7wcsoDhz/pgZ+dOrXb/4vPJnbB7wiu3OW4X07o2wsfBGke/pvSa8TOxd/pEppPM 8ren3ehp9Kzvhq2tBw16zCQix6bAhvPbmd7Pn2qudth71qPjuPWcTc+diZ/ZMIluTTIzcb/m /QiJSMjusCiJv7NweDtqutlibe9Dk76z2XtdKf7nKqJCodwHJrUvb4RfJ+VWBOPrVGDghiSM RiMpO9/I8jFZwK2f2PizDe07PEdw8NOc3LSJEw8UmRTS4g+ycuPfOD/jTw3N3bCRc75LpVJl KzmUmwfYe9QW/7aNKZlt7mxo8mwDMv48SJQxd+hSAWVt2s14eC+R6Y1p29KxnFVtI5FzRvL5 zb6EnbtJ7MGl9DduYdPJnBUvnb3bztJ9/VmuXwhjwM0Q+k8IJynrd3uWrsDYcyH7Lt8gZv9M au0cxuD5p7I7Vcm/TKDjq1vweHcLp6/HExU6kPSICBIUwHyFlUNfYuqFDnx1KJYbl3YwWv0l fd7ZxI3iPrtFVCjIUJ6ljaUVn53NIDVsEM73/Crp5w3soi0dnrHBNzCI2sc2EXaqKNU3jXV9 7VCp1Fh7tWR6zMt89lFnXFWZQ3nLxkzmz+YfM394czp+uJBXWcKoTzKH8pRbN0lUHHF2LKlL VWHvYA9JidzKmTGqrLGxUWNtY51HcMrgxKfP5Jonsum2kmQL7x9A+u63qay5c7wa+37rSbPg +IzEmySpnXB2VAHp7HrDB41KhcqmB6tvPwlVOHPniL337bOnQqfToVJr0Gq02Ho1pNsHnzGi bs5HtI6GQybQp5Yj1u7+jB7zEmnbNnIgHUBP0LRQpvZohKeNHoeqHRneqxpRvx3OMjGnsGtx KEk9PuGz/o1wt7bCudaLTJ7YFXcVmC+v55twb0bOmUBgFUdsXOozcPwAXLevY4+huO1KRIWC BKZikswvG3ZgaBlEgB1oagcR6HuEjZtz9PbyFbLdffj0WH0bRTGTfuMkP7x8grdemkRESuZQ 3qtfr+XDztWwAdBUoPnrX/PDlMyhPJWjM46qW9y8VVJT4wrJSclg70TuWKfDwdEOR2fHPBr3 /XNMqRv6Y1+Es+aeYzKTvKq7RRmg1skZe/MtEpMUQM/zX17BsHcs1TVPetXW0mTiaua3iGLi i/40btqGHuNWcSwld/X39PbIbgR6Ty9cEq+SYMzMmE6vm0CXxpVwsdGiVmup/94fGFJuY1AA 5SYxsQZ8qlfFOq9hxJhoYtIO834DbXZnRNf4I6KSEriaXNyUSUSFggSm4nH7VzaGXyMpbDBu ahUqnT8hpwwc3riZ83dqcAFCtnsbgs6pOkEjevPU2S1sP56R61Kqjw3jqxdyKzlUzs1p+VQK +3cfJr1ELiiVw5FH0DZuToNci+31vLg0lv3ja1GWnvm6p1vQXPcnEQdul7vKrXJoQP/p3/Hj b4c4GD6Dmr+MYMSiszkenGbiY+KzfzbGxXLdoQKuOlDiV/LOsA24/nsLJ66lYTIb+WtqI7SK kjmHpHLG28uaK2fOk1cCpPbywdM6iK9izLmEmYphO8Pciz/gK6JCQQKTJeQz+Z6yewM/Jrdn wSVTduNM2TkCj8Mb2Xyh6NU9Izma31Zu5qiuGtV9LAgBmqcYOqEryQvf5N0fjpCQmsyVP9cx dfwSco0mFrL4QMFE+s0L/LbkLd5dbcWAMb3wznn38lsubimm48xopscq4LMclt/i33+VVy/G DXNm3fjRLPsjDoPxNhdPXCD5iZ+jTmfn+/2YsjqSC4lpGG4nkmwwo9HkrDNG/vo2hLWnkjAk RDJv7lasOr6Mvx6U9BRSM/Q4VHDBXpdO7P6FTF+ec9GOLYFD+mG/bhLj1hwhIS2dW2d2EDI7 jKsKqH27MzTwCHPGLmJfdDJpSdH8uXk2Q0cuudshK8bnKqJCQQJTMbKLiI3bSWrVm5dzrJSw CehDV48/2LD5koWVPWuOSa3GxqMRgza68ObK+bzirbLoEr17L2bnV+0593Ew1Vx9aD5kNfqO nahmaWpjPMz7DW1wqPQsQ5el02fVLr54waUI4/H3zzGpbHqzNuckkZLC7VSwdnPHoURXUDjS ftaPrO5zm/ndauNs547/p9fpMvNdnrd9kqu2noBBfVCvf4u2lZ1wb/IOUa2+YN7QyjkqvZ5W wb6s7FwZF79OLLMb2UPc+gAAIABJREFUw4pZnXAE1BUH8un0euwZUhtnRz/afxhN665P5/pG ukPgLLYuDib6k2CqOVWgbt/l6FsH4KYC1L4MWrqJsQ5reLWxJ06+LRjydRyBI7pTqSRanYgK hSd5tENEgWUD5cpXdKg5k1phR5gfaFeOrryURIGmk8xq1ZQ9b1wkbLALUnsFoewgPqYywu0D ezjW7G2+bGcnN0MQBAlMQulj3y2Uy93K45WLKFAQhNzIUJ4gCIJQphAfkyAIgiCBSRAEQRBK JDCJKFAoeR62tqKIArxSO7+I+gThDiIKFJ5wSluUJ6I+QXh4GZOIAkUUKDxyRNQnSGAqMLKI KFBEgYIgCGUhMIkoEBBRYFkjbeMAXGq1IbiuGy41ezNlcheqOjhSY0AoF82ZHZICRXlZczTt J87jzaKK7kTUJwilHJhEFHgPIgosKyiGGoz6KYLJXptZcKIXu4/Opd6OJWy+YgYKEeVl3p0H E92JqE8QyshQXqGNVUSBIgp8tGiqNKShZzUa1HGlSqPG+Hg/RW33BGLiLV3f96CiOxH1CcLj EZjyRUSBIgp8OKh0enSARqtFr9eBSotWk0GGxU/mQkR3+dZLEfUJwuMdmEQUWKqUR1Fgic2y FFAvRdQnCI9DYBJRoIgCyxMi6hOExzVjElFgVjgVUeCjpjBRXrGzKRH1CcLDQnYXLyvDTyIK fLSiQEEQyiziYyojiChQEARBMiZBEAShDCIjJ4IgCIIEJkEQBEGQwCQIgiBIYBKEwnnYosDy jogKhccPWZUnCE80IioUJGPKgYljM5qhVzvRZVlc4b0qJYElnayzV/qpNXocKzbipQnrOXNP F858bi7dR+bVszOTEPkNY7s9S3V3e6ys7PCo1Zr+H6zleF5bHeQ8p1qN1soe9yqNeK7/RJbs j8+9S3PiCl6282XUL+l5ljf7j8abETvTC72+O3+sOy0hIc+bY+bawSW826MFNT0dsNZb4+xb n8BB0/g+KlF6qZJxPRJEVCg8WYEpPZKl392g6+BniFyyinMWPTU0VHlnD+mKgtl4i5PrXsG0 dDD/WngOM2ailw2n1wdbOGdQABPXDy1iRK9pRBgAFK5ue5PWgR9yvOE4vv/jMreSr/HPjyF0 1W9m2Y7Egs9pNpOeFEPUj3MZXDGS955rwZC1lwt52N0tb7bAzxTDwiC9xa83bBuK230r7RWu bhtFQOBUjtQdQ2jkRW7evkX0obVMbneb1V+sJ1qewoIglNfAFL3oJbzbhHA8R/pgOjWHVs4B zDllAkycmOmPbd1JHMqxp2ryT4tZ6/QaU+dOpPvlZSz7u4ib8aut8Xp2KH2eMXHq+DkyUOM7 6DM+bnSQ995YyIGtUxi+JINB/51MgDWQfoCQMUtQv7GaddN60tTPCSudNa7V/Ok9eRmfdncu /JR6B7zqtGNwyGbWvK5jzfgQ9j7w9jUmTsx89r77YtFr0w8QMmYpmje+Z/1HvXmmsgvWOj32 XnV4bugs1n89BD+ZHSwUc9wupnVthI+DNY5+Tek142di73wWppPM8ren3ehp9Kzvhq2tBw16 zCTi+t1c1HB+O9P7+VPN1Q57z3p0HLees7nqg4EzGybRrYkfTrZO+DXvR0hEQnY2qyT+zsLh 7ajpZou1vQ9N+s5m7/Ui5rp57YEookKhvAemil370/rsGtb8fac6ZnB0VSjHn32FPvm5E5QE whb/xNOjhvCUYztGDdGzeuneTPW5pSgG4g4u44dDDrRoXS9zV+fsIbCs1+QQAppO7GDnxRp0 6/sMxd8Czg7/3p2pdOVX/ncyq7GqMv9SPQIVoOmfcHZcrEHXPs2wlTr6gBiJnDOSz2/2Jezc TWIPLqW/cQubTuYcoE1n77azdF9/lusXwhhwM4T+E8JJyvrdnqUrMPZcyL7LN4jZP5NaO4cx eP6p7CHe5F8m0PHVLXi8u4XT1+OJCh1IekRE5tCs+Qorh77E1Asd+OpQLDcu7WC0+kv6vLOJ G8V9douoUCjvgUnl3on+zyfww8oDmWK69EOErr5M+0E9sgy2GmpP2E/KsRk0y1pKYb64hqVH O/Fmd09UaKg7bBR1ty8hPLHwzOH8/7VGr1KhUtvg5T+Zf9p8zLRunqgwE71sDJMON+XDBSN4 9sWPWPiqmm9HTSfCAOZr8STgjpd7yaQS6goeuKlucu1G1piZ3gZrjTU21vmU984f6+f56oqS dV8O5Lov971e7ciAjWn3vdZ8/SrX7rmWpNCu2OS3AWy5xoou3yWw97599lTodDpUag1ajRZb r4Z0++AzRtTN+YjW0XDIBPrUcsTa3Z/RY14ibdtGDqQD6AmaFsrUHo3wtNHjULUjw3tVI+q3 w1kdrBR2LQ4lqccnfNa/Ee7WVjjXepHJE7virgLz5fV8E+7NyDkTCKziiI1LfQaOH4Dr9nXs KUoPLU8BpIgKhXIemFA5E9T/RdI2rOTX25AaEcq6pI4M6uyWTyU2cfy7Jfx6YgHP22ctZPAe zMbTG/lmQ+bS0lwPWesX+CY7/c8xB2M2cuv8NoZef4/gYWuJU9T4Dl7E2g87U81aBWio0HwE i9Z+QIB1ZiCpwFVir5bM5Is5IZ4EXHBzybpFagecHJ1wymUHzGOOybCL133ya973vN58i9Cu 9+v+1K7uVOAqcTmuxWHARlKVzB6slwzjWfTQbDJxNfNbRDHxRX8aN21Dj3GrOJaSu/p7entk NwK9pxcuiVdJMGZmTKfXTaBL40q42GhRq7XUf+8PDCm3MSiAcpOYWAM+1atinVf9iYkmJu0w 7zfQZndadI0/IiopgavFdo6IqFAo74EJsGvbn25WWwkNv8SuFZtQurxCkGM+L07bz5JQhUl/ Gu8+rBWF1B39OLp0FWfNdx+ymQ/yH/mXRx4PcpUWh0ptGdG/KQlbN2X1YrMKXfVt1i8IJucS A03tDnSodJqN3x8itdi35Tb7f9jMRZ92tKuV1ffUd2BR9CHeq/fwNYCaOh0I8jvNhh9+L4Fr Kb+oHBrQf/p3/PjbIQ6Gz6DmLyMYsehsjgenmfiY+OyfjXGxXHeogKsOlPiVvDNsA67/3sKJ a2mYzEb+mtoIraJkziGpnPH2subKmfN5DlGrvXzwtA7iqxhzrnagGLYzzL34w8EiKhTKfWDC 6hn693IjfN6b/N82B3q+0jrH3EfuxQ9JuxbzvTmQ4Kdyf0XK2v8FWv3zbREWQZi4Hb2XxasP oqpdjxqFfeNK/yzjPhuCaUEfen24gcOXkzBmpHHj3AF+mPEqEzfcBNIJf80Dm+BFxOXRaTUb bxN/YjfLJ7xM36+M9J31Li3vRL97l4tbUP4HXvyg92fc50Mwze9Nz6nrOHQxkXSTCcO10+zd d5IUmV+2gHR2vt+PKasjuZCYhuF2IskGMxpNzo6Fkb++DWHtqSQMCZHMm7sVq44v468HJT2F 1Aw9DhVcsNelE7t/IdOX/5Nj/sSWwCH9sF83iXFrjpCQls6tMzsImR3GVQXUvt0ZGniEOWMX sS86mbSkaP7cPJuhI5fcNTdbQn4CSxEVCuU+MKGjYd++VP99B/t8+zKweT7LoZWrhC3ehNI+ mMb3jibYteGFlhf4bvGeArKAu3MwarWeCvX7873tML4LHUPdQhMVFe4vzmfPzveo8fsMujf0 xM7WldrB49mm68Nrwc6FnFONzs6Dpzq8ybeXmvHhz/tY0sOnkBuUxxyTyprOy26gkEH0+Rjc W7SiRpGTLBUeL84nYtf71Pk7hL7NKuJgbYt73U5MOtyQjzeH8JKVVN5CeioEDOqDev1btK3s hHuTd4hq9QXzhlbO8ZnqaRXsy8rOlXHx68QyuzGsmNUJR0BdcSCfTq/HniG1cXb0o/2H0bTu +nSub6Q7BM5i6+Jgoj8JpppTBer2XY6+dUDm8n+1L4OWbmKswxpebeyJk28LhnwdR+CI7lQq iaFYERUKT/Joh2gvHhIZB/mP/yR8vg/nrWoyKZQ/pSQKNJ1kVqum7HnjImGDXZDaKwhlB9mS 6KHd2eZ8cmin3AdBEAQJTMLjReZy7y5yIwRByEKG8gRBEIQyhUx+CIIgCBKYBEEQBEECk1BG edjaiiIK8Ert/CLqE4Q7yOIH4QmntEV5IuoThDKUMYkosKDrE1GgYAki6hMkMJVoixJRoCWv F1GgIAhCEQOTiAIfPGMUUeDDI23jAFxqtSG4rhsuNXszZXIXqjo4UmNAKBfNmcG9QFFe1hxN +4nzeLOoojsR9QlC6QYmEQWKKLCsohhqMOqnCCZ7bWbBiV7sPjqXejuWsPmKGShElJcZYR5M dCeiPkEo3cAkokARBZZVNFUa0tCzGg3quFKlUWN8vJ+itnsCMfGWjnM+qOhORH2CUKqBSUSB Igosq6h0enSARqtFr9eBSotWk0GGxU/mQkR3ShyLgu8sWNFSdUxE1jCaiPoEoXQDEyIKzMyY RBT42AzxlVjk82R4uCGrDmdw7vOA7GE0EfUJQikHJhEFIqJA4Z76JqI+QSjdwCSiwELLK6LA MkZhorxiZ1Mi6hOEh4XsLv6wEFGghZSSKFAQhDKLbEn00O6siAIFQRAkMAmPISIKFAQhNzJy IgiCIEhgEgRBEAQJTIIgCMKTF5iMp1YwpJkP9lZ6bIO+5PKj+GKF+SyfBTjQcfHVMqJ6KD3x nPHkMgY97Y61Ro1V4IJHc/8fOg9bFFjeEVGh8PhRhMUPyYR/OomDrZZzMTKICtocm6kKj4Bk tk+fQGTASq78HoSrRu6IYAkiKhSe5IzJdImoY2k0ah8gD8XSwHSBv48YePq51nL/JeN6ZIio UCjbgUlJJdWgxUonaVKpoKSSYtBhpZf7LwhCeQ9M5mi+DHbF1jGAWcevsaKbAzqd7v45JuNe xlbTYtNlOTfveQvD+e1M7+dPNVc77D3r0XHces4WcYLm9uH59Gngjq2tO3U7f8hP8UXpHxs4 s2ES3Zr44WTrhF/zfoREJFg8Nl6Q0M2imJL4OwuHt6Ommy3W9j406TubvdctPLv5Il+0tUKl a84nxxJY3jlzt+uizDGlnVrFqNaVcbRxpHLbt5k8oEapzJE9asxxu5jWtRE+DtY4+jWl14yf ib2zb6HpJLP87Wk3eho967tha+tBgx4zicjxuRRebwuuV8X63AtqVyIqFMp9YFL78kb4dVJu RTC+TgUGbkjCaDSSsvONLB9ToYMB7Fm6AmPPhey7fIOY/TOptXMYg+efKoLQLJ19207T+YfT XL+4lSFp8xg4ZgOWtvHkXybQ8dUteLy7hdPX44kKHUh6RAQJlhxfiNCt8KfjFVYOfYmpFzrw 1aFYblzawWj1l/R5ZxM3LDm/uhKjf01DMR7kP0+5MWhz5m7XaT+NtOz+m04w79UR7Kj+KQfj 4jg4w4292y6Ug2EvI5FzRvL5zb6EnbtJ7MGl9DduYdNJU656tXfbWbqvP8v1C2EMuBlC/wnh JFlYbwusV8X93AtCRIXCk05kZKRy+PBhJSoqSjl27Jhy8uRJ5ezZs8qFCxeU6Oho5datW0py crKScitCGV+ngjJwQ5JiNBqVjIwMxWQyKWazWTGbzYrlZChHPm6iOPVcoyRb8nLTGWVOK1ul 0dS/FGPWf6VuH6Z4VhikhKVa8ga3lQ0DKiheQ7ZYdr57S3sqRPG3baGEnDJl/U+Ssravs+Lx rx+VNEuKf3Ge0s6usfJhVEb2/xkPT1EauA1UNqUUoSDGg8p/nnJTBm02FKn8ptNzlJZ2zyqz TmZkl39dXxeLy//wMSibBlZQWs4+rZhK9H2NyqFJdRXn9jOVw9eNeXywJ5SZz9oqTT4+qty5 M7c3D1Y8fEYoO9MsqbcF16sS+9zzxKxc/vJ5xaXzMuWa6YqysIO9UuPdfUp6+j5lXO3qyjt7 0nO8Nl357d2aitc9n7el9Tptx3DFp/oYJSL93gu8oMxtY6c0m3Es6/5l3m+nvusVgyIIxeMR fI8pndPrJtClcSVcbLSo1Vrqv/cHhpTbGLLHPPITst1N7Dy8PbN7fVoPL9wM17h2x/9Q0PHK TWJiDfhUr4p1vmNt+R9vkdCtgOPNMdHEpB3m/Qba7E1vdY0/IiopgavJioXXX9hYYQHnvxZH Al74eGqyy+/h7VIOvsCmpcnE1cxvEcXEF/1p3LQNPcat4lhK7nrl6e2RfS/0nl64JF4lwWhB vS2kXln0uT8wIioUyvtQXjFR4lfyzrANuP57CyeupWEyG/lraiO0inJ3jqcAIdudsfP4mLjs Cp8RH8s1GzfcbVWFH69yxtvLmitnzmPIt33lf7xFQreCjvfywdM6iK9izLnEiYphO8PcVRZe f2HPh4LK74mbEsvlWFP+5X9CUTk0oP/07/jxt0McDJ9BzV9GMGLR2RzXbiY+Jj77Z2NcLNcd KuCqs6DeFlKvLPrcixN2RVQoSGCyZEg/78UPSnoKqRl6HCq4YK9LJ3b/QqYv/6eI49AZHF0+ m9UnbmG4dogF/7cZdafutLLISWRL4JB+2K+bxLg1R0hIS+fWmR2EzA7jqgUdV0uFbvlP0XVn aOAR5oxdxL7oZNKSovlz82yGjlzC+UfQ2tVVOtHt6WN8M+MHTiYZuPrb5/w3PLkcVO10dr7f jymrI7mQmIbhdiLJBjMajSbXPNRf34aw9lQShoRI5s3dilXHl/HXW1JvC65XJfa557eoSESF ggSmYpyg4kA+nV6PPUNq4+zoR/sPo2nd9ekibmuup8ULVVjfvSouvh1ZbDWa0Dmdcbaw4+kQ OIuti4OJ/iSYak4VqNt3OfrWAbhZcryFQrcCIhODlm5irMMaXm3siZNvC4Z8HUfgiO5UehTj aZo6vPXtQp4/PZ6m7u40n5xImxcroVU/6YN5egIG9UG9/i3aVnbCvck7RLX6gnlDK+eo9Hpa BfuysnNlXPw6scxuDCtmdcLRwnpbYL162J+7iAqFJ3m0Q0SB5Y1Utrxalf/4befwR43LgPek lESBppPMatWUPW9cJGywC1J7BaEcZUxCaWMmZvUk3l12kNhUA1cjF/DfcFc6vVhPZFyCIJRJ 5NlUDvoenh26UfXdt3n27T+56fQ0PT9cyRR/fRkpn4gCBUHIjQzlCYIgCGWsOy0IgiAIEpgE QRAEoQQCk4gCQUSBJc3D1laU3udVtPOLqE8Q7iCiwMcGEQU+GKUtyhNRnyA8vIxJRIGli4gC yyUi6hMkMBWEiAJLFxEFCoIggSkLEQWKKLAMkrZxAC612hBc1w2Xmr2ZMrkLVR0cqTEglItm gEJEeVlzNO0nzuPNooruRNQnCKUcmEQUKKLAsppEGmow6qcIJnttZsGJXuw+Opd6O5aw+YoZ KESUlxlhHkx0J6I+QSjlwGQpulZ8djaD1LBBOOf6hZ6gaaFM7dEITxs9DlU7MrxXNaJ+O5y/ huI+tNQbPJ5+dZywdnuGt8a+jBIext40S45NYdfiUJJ6fMJn/Rvhbm2Fc60XmTyxK5bYB0zn thN2tD7Dxnelmr0NXm3HM7aTg8V7q5kvr+ebcG9GzplAYBVHbFzqM3D8AFy3r2OP4eF/wObz W9nwV12GT+5NbUcbPFqNYfQLDk9E5dVUaUhDz2o0qONKlUaN8fF+itruCcRYnE1rqT9wDD1q OmDt3pJeL1Tm3PHTZBR6nC3PBDTk7IFDJJpjWBTsQM1x+zEaj7D/sBMtWlUrdJPf4tar4pVf EMpLYCog2xFRoIgCHwYqnR4doNFq0et1oNKi1WSQYfGTuRDRXb73VUR9gvAweeh75d0Rrrn9 dwsnutfD3VYhalozWh64XxQ4PP9+f5YoMDM45ScKzPP4XEK3utjl+Zr8j88Uqu3JFKo5qMkW qtlbeHyWMG7MqXBGeOXTHy70+gt7PhVUfk/clF8zRYGOmrzL/4RRYrMsBdzXTFHfe/zvO0Om qO/4LLasdymiqK+QegUi6hMkYyoWIgrM+3gRBT6ZiKhPEB7foTwRBYoosFQoTJRX7GxKRH2C 8LCQ3cXLHSIKFAShnGdMQmkjokBBEB4v5NlUDvoeIgoUBOFxQobyBEEQhDLWnRYEQRAECUyC IAiCUJYDk+k4M5o50DU06ZGe1nzpv7R3eJ6vrpTwxpeGIyzs1xB3Gw36xh8SJZuXFcDDFgWW d0RUKDx+yOKHEkfh2rr3mXSsI5tj/6SlkySlQmkiokJBMiYBE6f/PoamSVuaSVCSjOsxR0SF ggSmJyRjSk0xoLfWy60QBEF4GIEpetFLeLcJ4XiOeRLTqTm0cg5gzikTYOLETH9s607iUAbA TZZ3sUGlUqFW67Dzqs9Lk7ZwqdAdnxUSD85jYHM/HK1tca/XhWk7YwvsBSs3DrBgeCB1PO2w da1O29eXEpWc/4i38fxG3g2qiauNDS5VWzPi2yOkFFaqm4dYOOI5anvYYWXrTp0OY1hzMj9f xU2Wd3Gk/X8vcPmrIKxUOupP+SNfDUH62XWMDayBi7UNzlVaMWzaCJ55GHNe5RRz3C6mdW2E j4M1jn5N6TXjZ2LvfBimk8zyt6fd6Gn0rO+Gra0HDXrMJCKH5KtwwWXBAspiCSKzK20ee1CK qFAo74GpYtf+tD67hjV/36mOGRxdFcrxZ1+hT/W8doxzZlBYKoqiYDYlc2HnZLzDhjJ8yaVC hlrS2b16D43mRhJ34xyb/2VmUd9X+eZCPkeZz7Kw74t8dL4dc/de5tq5n5je5BDrd+cTNEzH +KzfYDZ6TuZ/l29w6X/v47VjDYcKGqIwn2fJgBf5JL4L3/weR9LV35n37CHe6vEhB/J0QTkz KOwWv7xZiYqv7yRNMXLkoyZ5T+RlHGF236Fs9ZvKnpibXN7zEX6//MDvMmRSQhiJnDOSz2/2 JezcTWIPLqW/cQubTppy1bm9287Sff1Zrl8IY8DNEPpPCCcp63eFCS4LFFAWVxBZECIqFJ50 IiMjlcOHDytRUVHKsWPHlJMnTypnz55VLly4oERHRyu3Ei8qK3q6KVVH7VASDQYlPXm3Mram q/Lyslglw2RSzGazYjablfwxKdHzn1OcX16h3MjvJRnHlOlNbZSGH/ypGLP/76jycVNbpc3c 84opr0OOfKQ0tm2pzD5tUizB+NcHSiP7DsqimLtlNfw6WqliE6h8edmcT7FmKM3snlPmX8px jtRwZXjFmsq/f0vP50zpyi9vVlIqvr5TSSuoPH9+oDR0eEH5OvbuudN2v11geZ5MDMqmgRWU lrNPK6YSfV+jcmhSXcW5/Uzl8HVjHh/uCWXms7ZKk4+PKhlZ/3V782DFw2eEsjPPDy5DOfJx E8Wp5xolOfPVyoYBFRSvIVuyfr6n1l+cp7Sza6x8GJVxt0SHpygN3AYqm1KKe21m5fKXzysu nZcp10xXlIUd7JUa7+5T0tP3KeNqV1fe2ZOeqz7+9m5NxetfP+aqjxmnQhR/2xZKyKk7dz1J WdvXWfG453VpO4YrPtXHKBH3VnfTBWVuGzul2YxjWfcv83479V2vGBRBKB6FzzGpnAnq/yJp G1by621IjQhlXVJHBnV2y8e2mcLR796mY0NfnK21qNUafEf9TMr1q9w0Q1JoV2zu7Bph/QLf ZKf+GipVrXQ3u9BUoqqfiviYeBLzOMYUE02sVXVq+t5/CXmdwxwXy1WHylR2vVtqnV9VfDX5 H2O6fIHLqT8zyk9zd6cLm2AWXYkj7qq5gGuxoDzxsSTY+1HJ5W55tL5VsssjFBctTSauZn6L KCa+6E/jpm3oMW4Vx1JyDxh4entkDxvoPb1wSbxKgjEzYypQcFmIgNIiQeQDI6JCoZwP5QHY te1PN6uthIZfYteKTShdXiHIMb8RtkW8MepXak3fxclrqWSYTVyc1w6dOVN25jBgI6mKgqIo KIYf+ZfHnQeziYvnLt2djzFd4vwlBQ9vD5zyOEbj7Yt32hlORd/fDPI6h9rTC/ekC1zIMcaf cek80ab8j9F4VcTLvhNL4s2Z/3/njzmR77pYFXAtFpTHwwu35EtcyjGukxF9tzxC8VE5NKD/ 9O/48bdDHAyfQc1fRjBi0dkcD04z8THx2T8b42K57lABV91dwaXrv7dw4loaJrORv6Y2Qqtk CS5zCSjzaFhZgsivYu6pO4btDHMv/vZdmaLC3/nfdzsyRYVee9myfm8RRYXxmaJCIFtUeN9N FFGhUEYDE1bP0L+XG+Hz3uT/tjnQ85XW3K37uRc/KGkppJp1WNvbY6/PIP7QUiZ98ZsFDpkM jiz8D/P2x2EwxBO5YCILzgbQr4tfnoXUPNWPf7X6h9lvzGDHmUQMty6w9+tRfLg9Ne+GXLcn feruJ2TCCo7eSCfl0s9Mn7KciwW0OE3dAbze8hAfj5zHr+cSSTdc59zBdXzcfzwbi/ldYG29 HvSuvZeQiSs5djOdlOhf+PT97wosj1AU0tn5fj+mrI7kQmIahtuJJBvMaDSaXPNQf30bwtpT SRgSIpk3dytWHV/GX2+J4LJgAWWJCSLzEXCKqFCQwISOhn37Uv33Hezz7cvA5vkvhdbUGcHs /3izpXdNnBx8aPF2BPU6+lP44mk9bXq35NBbTXF3qkynBSaGrFzKa1XyKaK6Oq+v2sIkv52M etYb16qBTP6jGd0CrPOJBPX596olvBQ9jQBvR3xav8/lwN40K2jUQ12N11ZtY6LnVka19MWx Qm06jP4BU5/XCHIobpe3Ae+u+obg81No4emIT8B7nA/oytM6PXpZaV4C6AkY1Af1+rdoW9kJ 9ybvENXqC+YNrZyj0utpFezLys6VcfHrxDK7MayY1QlHLBNcFiigfNiCSBEVCk/yaIfsLl52 SN35OrVfVVh8biFB5SY4lZIo0HSSWa2asueNi4QNdkFqryA8dhmTUPKYiflhGlPXHuZKsoEb /2xg0qTVaF7uTUvJmARBKMfIXnml2CfwbPccdm+PJGD4X8SovGnebSbrPn0Ou3J1H0QUKAhC bmQoTxAEQSiNml7SAAAgAElEQVRj3XZBEARBkMAkCIIgCGU5MIkosBzzsLUVRRTgldr5RdQn CHeQxQ8ljogCyxalLcoTUZ8gPJ4Z0xOFiAKFkkNEfYIEJqFEMiYRBQqCIDzEwCSiQBEFlkXS Ng7ApVYbguu64VKzN1Mmd6GqgyM1BoRm7TdYiCgva46m/cR5vFlU0Z2I+gShdAOTiAJFFFhm c1NDDUb9FMFkr80sONGL3UfnUm/HEjZfMQOFiPIyI8yDie5E1CcIpRuYVO6d6P98Aj+sPEAa QPohQldfpv2gHlRUA2ioPWE/Kcdm0OzeJ7DKCrcGfZg6sgH7t+3mVoFn0lL/9U8Z09IbGxtP /EfPYmTVPYRuyjugmY6vZFFEbd79cjLBNZyxcapCwPD5fNDJJs93zzj6PauO+DNh9mAaulpj XzmI96YPKnBDTdOJVXz1a33GzxtNaz979HaVCJo8hW431vLDH8WLIBlH17Lmn5aMmzmA+i5W 2Pk9x6SPBpXMBp/lBE2VhjT0rEaDOq5UadQYH++nqO2eQEy8pev7tNQfOIYeNR2wdm9Jrxcq c+74aQpN7rHlmYCGnD1wiERzDIuCHag5bj9G4xH2H3aiRatqFKbVMp3bTtjR+gwb35Vq9jZ4 tR3P2E4ORdyz70HLLwiPeWASUaCIAssqKp0eHaDRatHrdaDSotVkkGHxk7kQ0Z0Sx6Jg66zP XkvVMRFZw2gi6hOEh4lFy8UzRYEDCQ2/hHHbJpQu3xYqCmwcuotlz1XHzU7D5f8G8tTqHKLA Afd2HzP/yhQFumQW6o4osH2WKPCeY0zevninbc8UBVbP3ZzzOkeGpxfuSfsyRYFemcHgPlHg vefIEgVOP72FIXnK3fK4ljzIszweXrglH8gUBXpmlUdEgSUzxFdikc+T4eEGhufVcOoE8Kz5 Pf73nSFT1Hd8FlvWuxRR1LcnU9TnoCZb1Gd/bxlE1CdIxpQ3IgoUUaCQGxH1CUIpByYRBYoo 8HGjMFFesbMpEfUJwsNCdhcvQ4gosLp8sU4QBHkOlB4iChQEQcgL2SuvFPsEIgoEEQUKgnAv MpQnCIIglLFuuyAIgiBIYBIEQRCEEghMxlMrGNLMB3srPbZBX3JZvlghFJuHLQos74ioUHj8 KMLih2TCP53EwVbLuRgZRAWtCplWEoSyjogKhSc5YzJdIupYGo3aB+Ba1P3ckv9k0RB/Kjna YOdZjy4f7CAmu3ucqQqwylpIoXboz4a03D3qS7tmM6RtHTztbXDya0avj3ZwOXvrHhNXD3zD 2x3r4mZjjZNfM3pP30VMXlv73P6NCQ2s7vmSZTIru9nkXtBh1Zr/O5ej/26OZ/fsV2hZzRVb W0+av7aMY7ezzn56Ni30qvsWhOj9Z3Eyqwxpp75nbPBTeNjpsXaujP8rc9l/424/M/mvxQxv Uw1XGyvsfRrRdWrO+yNIxlV6iKhQKNuBSUkl1aDFSlfUNCmF3VN68++/Alh8PIHonW+i/qYf /1oanfUgUVPl7d2kKQqGzYNwvvft0/fy9cLLtJq6gb/jrnFiTS8Sv+jF4IXnM4/POM6ab/6k zr/XcuTqDU5veJW0Bb0Ylv3+d8txYMY49jr+P3tnGV3V0YXh52pu3AUITnCHQtDiWoJboHjx thQKpZRSirVYKR9Q3N21eLEiIUjQAEGDxkiIEJJr8/1ICAmEJsFp51mLxYJz5dxzZmbP3jPn fQujSSdxLDvmIkYhEEIgEv9mQF5lSuC78r82NJ9tpNOK84RFXmJBjUB2nEiKbKoC33JMn/w+ IRDGq0yqYkeF1i3IrwLM15nVoxurrb9h3704Ii/MperFYbT78QAJAHo/RrcbwPEy/+N0eAx3 dn6JdpEvXyy+JwdaiUQiA1O6mO8ys74TVnZVmXDpIcua26LRaF5cYzIcYWA+NZY+S3j0XGBZ sTqEWt98T50c1jiW7MH3HV04sHxz5taotLUYtXYKPWoWwd3aCo/K/ehS1cBp/4tJ0izq4vSf O50+dYriYWOJa/nudKxi4PSJS2nk/5+c+JUBB+oxoW/hrD28ZfBn7h+Xqf/rTHp558BG50SJ DuMZVCP9p2ANAQtYcLEq3XyTPXiMt7h8VVCxdQeKO2ix8qxF+4a5CQ8K4pEA0/X97Ltdii5f NyKPjQWOJbswuL0rB1dvR3q+vR7m0L383KwU2W112OUsR+tx+wh52ihMQUzwtqHGVz/TqrgL VlZulGg5nsORzy56wq0djG3vTT4na2zci9Fw8AZupFmASeD6xmE0L5sTeyt7cn7SnomHI1LW XET0KWb3rIGXixU6m+yUbTeJI5FZvKnp9StpVCj5zwcmpSd9dkUSH3OYIYWd6bgxFoPBQPye Psl+TBkMDiGXufzIk2JF7JNtMjQULlEYrlwk6FWMY+JP4X9BQ9mKxV/MfMwJPPCbxeLDdlSv WeLZ8YRTTPjqT6qO/5ay6UrpmQicVB0HCx0OuSvQ7tf9hJqfVvECCHhQAI+b31Elly2WNh6U bDqS3enW2h6zb84yHjbqTotkBXM0ZWnyWTZOb1hFYLSBhPuHWLPnEZWa1sJVAUkXRcHzHiKG a1e4KY11XgMD/pP7MuVRO7bcfETIiYX4GraxOSh1jVfPke03aLHhBpHBW+jwaCK+3+0iNvnY 3wuXYWg1m2P3onjgN56Ce7rTecbVFCO+uP3f0bDLNty+3ca1yDDOL++I/vBhIgRgvs+Kbp8x Mrges06GEHVnN18pZ9J2wGaiXnfslkaFElnKy2xnqcJvN4w82dIJh9QVwMdxPMYKG4trzKiX naLf7MNoZYXycSyPs9pBRTg7B/dltecIfuuaO9XJGzn3c2k0KktyVBlFSPuFTG/rkTzWJxIw sT9rS//C8CrW6XhI2eC7MZ4nURHExN7Hb3pt7k5sweezb2IGREw0MfqTLN/lyfjjYUTd2ESH +Ol0+Go14eL509vMnA0qWnVv+KwkqXCkwdiZtLszhJKOWiw9P2N93lFM6+6FClDlq0HNnGdY Mm03t+P1PDq/mN/WBiOePCZeTj4zQZJyxJEXdPYUaDQaFEoVapUaK4+SNP/pN3oVTT1EayjZ 9TvaFrRD5+rNV998RuL2TRzXA2ip+/NyRrYshbulFtu8DenZOh/njwYklWCJZ+/85cS2/IXf fEvhqrPAoWBjfhjaDFcFmO9tYN6ubPSd/B2189hh6VicjkM64LRjPX8nvG6/kkaFEhmYXguF tQ3WxBOXWIB+u+8TOKUW6vh4TNY2WGelF4goDv3YlB7+jVi+diAldWk7SMmfzmAwPSE0YBYV 9n1Ok7Gn0QPGC7/Tf2kBRo2qi30G36fQOlG4yc+M7WDHkc1/ESFAYWmFpcKKev0HUS2bJTo3 b/r3qo3+0D7SmtiaubVyDrs9OtCteioX3cRTjG7Ynr1VlnI1Ws+TkEN8k/gzdbusJkQAWm9+ XDGBUkd7UtzRHq8OuynjWw8bOwfs5FNmr4GaskNXMaPSeYY29qZMueq0HLySwPi0zd89m1tK J9C6e+AYHU6EISljurb+O3zK5MLRUo1Sqab48NMkxD8mQQDiEQ9CEsiePy/pJeHmB3d5kBjA iBLqlA0xmjKjOR8bQXjc6844pFGhRAam1/sC98IUcrhL4OWnXjNGrly4gqJQcQpmdrFHRHJo xGd02FmJhX+Op5bLSyKMUodrydYM6liAC5t2cs0ET84e4/TVZbR0S5JS0rVaw+PQudS3LsR3 /saXdrine+GVHgXxej6iCZIM3FL/n/EcC+edpGTXLpRK9btMN3axNTA3zbvXJ6+tBp1bebp3 qkr0zm3465O+y7ZsHxb53SYm8Qnh55ZSPfEKylJlM399JOnfRdsS+I5dys6jJzmxaxxe+3vR a86NVAOnmbAHYSn/NoSGEGnrjJMGRNgKBnTfiNOgbVx5mIjJbODsyFKohUhqxwoHsnnouH/9 FuklQEqP7Ljr6jLrgfnZxhghEAk76O76+s9ZJBkVnuLA0t1JRoUeR9i24UgWjQrDkowKkysL oQ+iXgwq0qhQ8lEHppdtfrCoQoc2Huz7/Vf+evCE6Avz+XVZODU6+GRqjQoRycHhn9FhVxUW 7ZhIXbe0bzLfmE/fL6bw59m7xOoTiLiwgd+Xn8e+eAk8VcnusakGhoR1bbB2/4Jdj68wvoIa 871lfNN7OnsCQ3mcGM21XWMZuTKG6s3r4KIAdFVp3dSGHb//xuGQBBLDjzN9zl/oatSlXKqJ afzBuSy5/emzTQ9PL3C2whSyucKG+bu5FWckMfw0C5YewuRVhPxJVr1cWjiSaQeDiY5/yMW1 g/lynoJO/RphL9vna6Bnz4j2/LjKn+DoRBIeRxOXYEalSn13DJxdNJF1V2NJiPBn2tQ/sWjY FG8tCH08T4xabJ0dsdHoCfGbzdgll1Otn1hRu2t7bNYPY/DqC0Qk6om5vpuJk7YQLkDp2YJu tS8weeAcjt2NIzH2Lme2TqJb3wXcMr+BfiWNCiX/Zvz9/UVAQIA4f/68CAwMFEFBQeLGjRsi ODhY3L17V8TExIi4uDgRH3NYDCnsLDpujBUGg0EYjUZhMpmE2WwWZrNZCP1h8U1eldA1WSyi xHPEnhazOlcQnjYWQudSRDT+cae4Z3p2OHFHN+GiRCTnIgIQSvcvxK5EIcSjpcJHl/YYICwa zhfhZiGEKUqcWTZENCufVzjptMLarbCo1fMPcTzSLNIjYV0bYf30s4UQwhQu/p7SWVTO4yAs NDrhlL+q6Pzb3yIs1fmZo/zE1I4VRE47rdBYe4jSLcaIv0JTfb75oVjdxkW4+a4XUS98rUmE 7h8v2lfMIxws1EJj4yGKN/hGrLz8JOUVhjvbxND6BYSjpY3IVqKJGLrxukgU/xUSxOaOzqLy pGvC9IY/Of7qRjGidQWR295C6JwKiOo954tzcckHjVfE+IrW4tN+w4VPIUeh0zmLok3HigPh yTfQHC38f28jSrlbCo3OWRRqOFRMG1hR2Dxtd0nfIK6sHSKalMoubC1sRI7yHcTvfg/F08Pm SH8xs2dNUdDFSljYeYrSTb4Vy85EZe13vrRfGUXQhIrCIkdvsSdBCNOtqaK6zl302JncrvTH xGAv1Qv9Rpmq7SdcXiZ6V8kpbC2shWeVvmJI23zCo8fOtG3PeEus6VNJ5LTVCKVCJQp8e1To hRDCFCymVrcRdWY9SP69BnF2ZClh02q1iBcSyesh1cUl75n3ZBRoCmJClXL83ec2Wzo7Iluv RPIfWmOSSCQSiSQryOV1yXtGGgVKJJK0yFKeRCKRSD4oZClPIpFIJDIwSSQSiUTyRgKTNAqU vHnetm1FFg3w3tv3S6M+ieQp0ihQ8i/nfRvlSaM+ieTtZUzSKFAaBUreOdKoTyID0z8hjQKl UaBEIpF8EIFJGgVKo8APkMRNHXAsWJ36RV1w9GrDjz/4kNfWjgIdlnPbDJCBUV7yGk3NodPo n1WjO2nUJ5G858AkjQKlUeAHikgoQL+/DvODx1b+uNKaQxenUmz3ArbeNwMZGOUlXeVXM7qT Rn0SyQdSysuws0qjQGkU+G5R5SlJSfd8lCjsRJ5SZcierQiFXCN4EJbZIuirGt1Joz6J5OMI TC9BGgVKo8C31rY0WjSASq1Gq9WAQo1aZcSY6ZE5A6M7Ecqc+rrkDS1q8n5zOLmMJo36JJKP OjBJo0BpFPjOS3xvLPK503NXQvLGFiM3p1RNKaNJoz6J5GMITNIoUBoF/peQRn0SycebMYEV 1cesZmLxg3Qt6IhHzanou61gbtecKV+u39kdV5UCXZMlRMWupIVO8exZo5jt/PbbMe6emEgd N1XKc0K6RguIEKDM05JeNUKY16M6eeztyVP7RwI/mcCmKZ9hl5kLkK0BLQufZGTjwjjbelCx 3z5yD9vCkh5P17BsqT9hDSM8t+JbyB7bvM1YZfcNK//XCmfFs+C5bc4anjTuTkuPtNmVwqEZ U9aMoNCRvpRxscQ2X2NmJrRlwbKBFFMBqPCq+wn3f6lDXpc81B19kzrzt/FLNWvZOl9rouTH kIJqFAotlSddJWReAywUiueeYXudbMoe76qFiDSXpl5ZC9zq1iXnQzMVqhZJ2vWZ0ferivD1 oj/49MJXlHJ25ZPvw6jUIPcLa1Pq4t0Y3tHEzGrOaJQv7sqTSP6NSHVxyXvmPRkFSiSS/3LG JJFIJBJJ5pHL65L3jDQKlEgkMmOSSCQSiQxMEolEIpHIwCSRSCQSGZgkkqzyto0C/+tIo0LJ x4fc/CCR/KuRRoUSmTElT75usXloI4q6WaOzyU7plqPZG2JOmZkd+DIX6pcaAyZwa/dvfFGn CK5WFli5FqRGjxkcj3w6LxPEXVrHT+2qUtDVGkuHnJRtPpzNN9OZ5xmDmFbbAZWmGD+ceio/ pGdvn+yo0jyLZUH1qbdSzdhNhB78ja7VvXCxtiVb6VaM/etBkjimfjc9PVQvPMulTGUuaLq/ m9Gty5PLQYfW0ol8lTsx5cjDlJml8c4ORrYoi6edDp1DHip1/h/Ho+S8U2ZcHx7SqFDyLwlM Bs6Nb83nG90Zfug+UcF/0pu5tO44kxvmpBlcjWm3Mb7UGPAAc+eGUGnoGgIeRHJ731iKnR6K T9+1RAhARLFz4TYs20xh99WHRASupSuL8W03hUBT2vO4PK0PM5UVKKJ+8Wd79t+PPkWqKJFD X+dJuRhxh3+gQctFqLou52xoOJfXdsH852YumwBtPeaEmJ4ZA4p49vfPg3XltjTPrQQRyvK+ 7fg9oinLAqN4HH6K6ZUvMaLVILbFAsYLTGrVhgX0YNP1R0RdWUWbiPE0/WIlD2RskkgkkowD 0905n5Gt+kQupRr0TVcnU8WhKpOvmgATV8Z7Y1V0GCeNgMGfRQsvU2nQONoXtsfSuQxf/NKP gkfns+JSJpxitA0Yu3YC3eqUwNPeGpcSrfihZ0Vijx/jshFQONFqwiKGtviEPA46rLN707NH bXSBZ7icalZnCPwfvefmZMyvn+GalfBrvsPSn2eS0G0OM7pWIIeNDnuvz/jxt94UT8fLQDza wdw1MdT7oh25lIDpNpeuJFK+fU+qZbdEY5OX+l+0omjMFS6HmDDd2M7G83npMqIn5V11WLp7 0//HDtjtmM3aYDnnf5OYQ/fyc7NSZLfVYZezHK3H7SPkaeJsCmKCtw01vvqZVsVdsLJyo0TL 8RyOfDY7SLi1g7HtvcnnZI2NezEaDt7ADX3a7P76xmE0L5sTeyt7cn7SnomHI1IyYxF9itk9 a+DlYoXOJjtl203iSGQWZx/paVBKo0LJfz0w5WjmS7Ubq1l97mlzNHJx5XIuVfyctvlfHKlF xHnOh+SgTBnXFPVtVZ6ylLa7ytmLCVk/Q/GQo4cuoitZBq8XMh8zCaGnWLT4ILoGTfB+aiqr v8CU3nPJOWYCPm7p/UQzIYtb4KqzwNqtEDV7TOPYw+QOFe/Hfn9LCmt24FvSHSudLdlLN2fk znvpGLCZebBuLts0zenh45L0e9XF+MwnP+fXzOdoSALGx8H8tWADwaWaUT+PCoT5qTh5CgqF AoXhAgEXpZPOm8zc/Sf3Zcqjdmy5+YiQEwvxNWxjc1Dqu6jnyPYbtNhwg8jgLXR4NBHf73YR m3zs74XLMLSazbF7UTzwG0/BPd3pPONqSjuI2/8dDbtsw+3bbVyLDOP88o7oDx9OyuzN91nR 7TNGBtdj1skQou7s5ivlTNoO2MxrV22lUaHk346/v78ICAgQ58+fF4GBgSIoKEjcuHFDBAcH i7t374qY6NtiWSsXkbffbhGdkCD0cYfEQC8n0XRxiDCaTMJsNguz2SyeYgyaILytyokxF40p /yf0R8Sg/Fai/tww8eyVQiRs7SQcbduLDQniJcSLC9MbCg/3BuKPy/pU/28WkYs+ExYgQCFs i30hVt9MfPqp4szYysLLd60IMQthuj1N1LAqKoadNLz48aYnIvTsWjHQ21E41pspbpiEMN+b KWpbKIQmbzsx/0yEeBJ/XxyZUF+4230qpl41pn2/8bIYX9FKFBriJxJTn13k32JUDTehViSd nzbnZ2JqQFzytTgtRpSyFLlazRanIxJEQuhxMbVJdqFW6ETLVY/Ff48Esbmjs6g86ZowvdHP NYiTw4oKh5rjRUBkOvfeeEWMr2glyo65KJ7e1cdbOwu37L3EnsT0Ps8oLowpK+xbrRZJd/Kx 2NjBWXh03Zb87+ea1u1pooZ1GTHq/LM2Ywj4UZRw6Sg2x7/ubzOLezPrCMcmi8VD030xu56N KPDtMaHXHxODC+UXA/5O3Vf04ui3XsKjx840bdR4daLwtqokJl59etVjxbp2DsLtudcl7u4p suf/RhzWP/8Dg8XU6tai/LjA5OuXdL3t220QCUIieT0yLnIpHKjr25jEjSs4+BieHF7O+tiG dGrikq7bptLGFhviiE1tTyseExunxNbOKgsOnY85N70NDcYaGLhtDb0LpTZfezobNPEk9CwL 652ld60v2fFIYDg3md4LcjF6ckvcM/oypQ63kq34ZWIXHP9ey44HZhTWttgo1ZToPpzOpZzR WWaj8tff08bBn237ItJsjdWfWsjC88Xp0rU82pTaxjnGN/Jhee6JnAh9guHxXQ4O0TC5fhvm 3TKDpgzD1i6iZcwU6uW0xbFkL45WaEdNawecneQmyTeHmrJDVzGj0nmGNvamTLnqtBy8ksD4 tAUD92xuKWUDrbsHjtHhRBiSMqZr67/Dp0wuHC3VKJVqig8/TUL8YxIEIB7xICSB7Pnzoksv J39wlweJAYwooU7ZIKMpM5rzsRGEx71uyiSNCiX/8VIegPWnvjS3+JPlu+6wd9lmhM/n1H2J p4TCpQQlPO4REBCeMoibbp3mTIwXpYrpMlm+i+b4+KY0mKBg6M5NDC7/MstpJTq3ErT4tgtl Qvaz/7KRhPP+nLm+inbZklTQVbm+5EB8IOPK615uGZD6w62LU9pLna7bXFoB9cfsm7ece1W7 83nBZ4US870D7DjrRrO+vpR21aG2yo53z97UVxxg+7GkUdHCqw2/7bpEeLye+JAA5n0Sy2WL KtQoq5Et8g2isC2B79il7Dx6khO7xuG1vxe95txINXCaCXsQlvJvQ2gIkbbOOGlAhK1gQPeN OA3axpWHiZjMBs6OLIVaiKSmoXAgm4eO+9dvkV6BWumRHXddXWY9MKfaKCMQCTvo7vr6SvzS qFDynw9MWFTAt7ULu6b15/fttrT6vBrP2v5zmx80FejctTDHJg9j1eVoEiLPMO/7GQRV7k77 IqpMrSkd/LERPnOcGbtnDf1KPudLFL+d0X2nseNMMI8SDcTdP82qsXM54VCJKoXULxgDmm5P o4ZVUYadTEiqjydu5wffcWw6HcyjxCdEXNzID4MXEVm5JfWzKUFdnI5feHNzwRgWn4tEnxDC sam/sCamKs3rPFs3ExFbmLc+kcZftCZ7qquodC9JSfdgNs1azfmHekwJIZxYMJdd0QUpXUyX VJf//Rt+33uNqIQ47hydRa+vNpDjmx9o7iytQ94cevaMaM+Pq/wJjk4k4XE0cQlmVCpVmnWo s4smsu5qLAkR/kyb+icWDZvirQWhj+eJUYutsyM2Gj0hfrMZu+RyqvUTK2p3bY/N+mEMXn2B iEQ9Mdd3M3HSFsIFKD1b0K32BSYPnMOxu3Ekxt7lzNZJdOu7gFtZGeVfZsApjQol/+k1ppgY ERcXJ2JP/yzKaRVCXfJHcTrBIIxGozCZTMJsNohLv1QQlkW+FyeelvL1N8XGIQ1EYRdLobVy FyWb/yx23zem1MfD5jVIXh9K9ceitph5zyzMDxeKRhbPHQOhsP9cbElIqu1f2zpatK+UXzjr NMLSKY8o5zNQLD4Tk2b9Kk2tP80aU7y4vi3p/U6WWmHjXkTU6jFVHA5PtcJheiD+GtNalM1h I7RaO+FZvq34ZV9IqjUQk7g1vaawyd1X7I1/sf4ffWqO6FWrsHCz1giV1lZkL9lYDFp1WTx5 uqpyc7P4vlER4WJlJVwK1hBfTDsqIsz/1Wry21pjEiL+6kYxonUFkdveQuicCojqPeeLc3Gp 15isxaf9hgufQo5Cp3MWRZuOFQfCk2+EOVr4/95GlHK3FBqdsyjUcKiYNrCisGk4X4Sbn62B Xlk7RDQplV3YWtiIHOU7iN/9Hqa0Q3Okv5jZs6Yo6GIlLOw8Rekm34plZ6Ky9jv1h8U3eVVC 12SxiHpuzStoQkVhkaO32JMghOnWVFFd5y567ExuZfpjYrCX6oV+pHT/QuxKXkRKuLxM9K6S U9haWAvPKn3FkLb5XliLEsZbYk2fSiKnrUYoFSpR4NujQp+yxmQj6sx6kPx7DeLsyFLCptVq ES+XSCSviTQKlLxn3pNRoCmICVXK8Xef22zp7IhsvRLJx1bKk0gkEonkHSG3gUneM9IoUCKR pEWW8iQSiUTyQSFLeRKJRCKRgUkikUgkEhmYJB8ob9u2IosGeO/t+6VRn0TyFLn5QfIv530b 5UmjPonkw8iYpFGgNAqUvBGkUZ9EBqY3VLqQRoHSKFAikUjeWmCSRoHSKPBDJHFTBxwLVqd+ URccvdrw4w8+5LW1o0CH5dw2J2XW/2iUl7xGU3PoNPpn1ehOGvVJJO83MEmjQGkU+KEiEgrQ 76/D/OCxlT+utObQxakU272ArffNPLNGeYlRXnJW/UpGd9KoTyJ5v4FJ4doI3zoRrF1xnEQA /UmWr7pHzU4tyaEEUFHoOz/iA8dRXg3muFjisMHWOvXIa42tjZnYmPgs7iB6wsU/OvHlvtKM ndA+lb/S09moCkuPTxgcWJcpE1slq3wncnZSL+blHMOk5m7p/EAtdWbeJzEmkkfx0dzcO5ay F3+ise9sbppBxDwkMjGMP1cG0XhpIJFRQazr8IRZbTsw49pzXd50lWXzDpGtwxfUtnn6n1ZU HvoHfQX3MvMAACAASURBVExTqZGcMTVZ6cawP/pTUgOqfPVpWPAai8YsIOBhIolh/vwxdhk3 jPHExsnAlBVUeUpS0j0fJQo7kadUGbJnK0Ih1wgehGU281RTvOM3tPSyRedamdYNcnPz0jUy vgtWVKhakhvHTxJtfsCc+rZ4DfbDYLiAX4A9larkIyMdfdPNHWy5WJzuQ5qRz8YSj0+HMLCR bRY1+171/CWSjzwwSaNAaRT4oaLQaNEAKrUarVYDCjVqlRFjpkfmDIzuRChz6uuSN7ioyfvN 4eQymjTqk0jeb2BCGgU+K7mlDZzSKPADLfG9scjnTs9dCcmbXIzcnFI1pYwmjfokkvccmKRR oDQKlDyHNOqTSN5zYEJDyXbtyH9qN8c829HxE+0/vrbUd2tZ0iyEUdWyYZ+zAX+IHqxZ2pv8 yqT5bPj8hugUCnRNlhAVu5IWOgUKXR1m3ReIqK1MmHSUsBtr6FbY8tlzQg6d2JoIWNXAt1E0 S/vWpoCDNW4lWjL5bk2m75iOj2MmBnaLmnTvYGZN/9rkd3Qgb+0fOF1sJNtWPT0/FQX6rmBd dxMzGuXG1r4QbdY4MGDDUnrmfXq5zNxePZddtq3p0fg5Lx/dp4xd/z9qBI+hTm4bLOwL0mzm E1ovWsWQkmpAQ5lmNQmb4kNBZ3fKdl2N9Zdb2TasDDrZHt8cBj+GFFSjUGipPOkqIfMaYKFQ oPLoye43IQGhsMe7aiEizaWpV9YCt7p1yfnQTIWqRZKeWs/o+1VF+HrRH3x64StKObvyyfdh VGqQ+4W1KXXxbgzvaGJmNWc0SvXLs36J5F+EVBeXvGfek1GgRCL52DMmiUQikUjeDXIbmOQ9 I40CJRKJzJgkEolEIgOTRCKRSCQyMEkkEolEBiaJRCKRSGRgkkgkEokMTBKJRCKRyMAkkUgk EhmYJBKJRCJ5t6gDAwNT5Iee//NUfuj5v5+XIwIpSSSRSCSSNxSYAPLmzZuuTp5KpUoJSKn/ PA1EUitPIpFIJG8aWcpLQwLXt03g685taN6sKc16L+KK9Kn+92M4xqS2TfHx8cGn5Uh2PxJZ Oy55c4goDv7ah1/2R/H+rrKJywt703n66X+HG3Cm2q+BoMVfM2jFtQ9CvV4GptQ8PsHaZUe4 bdeECWs2s2lWFwqp5GX516OpxLerN7NpbneKql/huOTNjaFBm1kbXJ6mVR2RNZh31L6TXkSB zxphu2c1h6Pe/8QrU4FJRP/FmA79WJiSPgii946mbc/5XMpSRmEmZPMYZpwyvuLxt4v5YQih iQKluyc5tO94ohh3hS2TBtK1bUtadejNiAXHCJXZ2hu+xgf5pV1Tmvdfxo2P6toa8J/SjjYT j75kNmsmdMv3tPDxwcfHh6ZtJ3HsozRtekLAjgMoKtegkCZtBnN9WX+aJ/++lD//sezVeOYP uvScl8UxNwvBwKkyNbwusWP/g/duSvluMiZzBH9N/5UVJ8LQA4hYru6awfjVl5M6WkbH39XA ZTIkpe5K5budrYk4Tsz/lQXHBLVGL2BG9zzc2vIbkzffla6lb+4i8zjgGBecC5A78gTHb/+b or4Sd59f2LBlC+t/rIn1x/oz9IH4BWgoWSYP6RUq1MW/YP6mLWzZkvxn/UjqOci86o2hsKFk 2bwEHz9J2HseeN5sYcJ0iXm9v2dH7q9ZMjxVB1G6UKt7R46tX8qsI1cJ1c1AWa8VvVoVRpOZ 42+b5PPeEpp8N/wm09ZnMsrsLRg/I6mcZww9zsq5y9h77j5xame8vJvTvXsDvKyTOkZGx/+R hHMcPBaJwrMe1fLb4+5ZlaKzj3H80FHuNGtDbllwfQPEc+bYBRwqDKDBrUns9L9L27y5ZS37 A8J8P4jrTzxpktUGbw5n6/D++H86i1H1HVFg4tbKgXwX3JqlQ6uiTT5+rNDn5L68iX1BsVgX akj/IZ0pmxzYDHf3M2faMg5di8O6YC0+dTKDZaqcNfQUm5asZHdAMNFqd4rV9KXX55XxUIPB bzKdFkVQUHWbIGNJGlczcHDreRQV+jD2mxq4KkHEX2P3wgVsOBpEhMGanJ80o1efZhSxUaSc /8vOz3RzBQMGriI4eS71XfMtgJJszX/lj66FUWVwflmITNjnzo397Svc0IPHe7TUfof9UkHq NOTFTXwZHX+LqIrQY+4mNk5tR24VaLwHsXrLlmdrTIYgVo2ZwPqrHrSfuIDZ31bk8cHZjJ52 kEhzJo5n1K/CbnM3UaB0VHJmfHe+XhOOo50C84Ng7sly3huKS2fxO6elRJmSlC2bj/vH/bkr 09EPKzBFPiRK64Cj5dvo/EaunAim2JfTWLbgRz59sp3FO28nVSTMt9k0ZRYXc3Vn6rKlTO5g w8VTYamqFUYu/nUAY5V+TFy0ksUTO5P9zDR+334/5TVCn43GY8bTxtGf7Xer8Mv0L8gVsBf/ KDOYIzn4v9GsCCtN39+WsHLBKJoodjBh7nHiRMbnp8rry7SNW9gwqgFOHj6M37iFLVs2MTs5 KGXm/DI9Sts7YWeK4mHM++0cbzYwJQ/w64c/V04wR7Bv/lJuenWkVwMvynboR232Mmvds1Le Px5/zxgv/cVfd0w4VmpCndz2uJRuSoNCSqJP7OV4lDnD40k/8U+GtXhWH2/WZSbnkpfSRGIC iQLQaNAIM2ahRatVIIyJJBrkgPUmeHLOj7OUoIyXFpdSpclx2w//+zIyfUwYL8yle7Onfajp P6y5pTs4kedTHypnt0RjX4Qq5dwIvXMfE2AOPYX/7dzUbeGNh6UWx+ItaFbOMtU8WU1p30G0 r5wXB60aS/dy1K/qwa3AG0lLD4DSPTe57T3I7WmLe958ODnlxNM+hshHAnPkMXafdqRRt1aU crdCa5ObGi0/xebUMQINGZ9fZgpfGZ3fx0bmEj2lIv01F0Um12KULtTuP5SkzQ2AwhavBv0Z mtnjAOIRO0d2548AA6DEvek4ZnUvyrvYNGeIiiLGrMDTwT4pkivtcbBXgvkREY9EhsdxzmCW YqHDQgEY7ag2YiGNzYHMOypQqC2w0MgB6Q2EJc4fC0BfuBtFdaDMUZpSLmvw8w+hhWd2Wc77 QFA6OeOoDyLqiQDbF0cWdfEvmDOmCa6vdMMUWNnZpIxXapUKYTIhABEXTazCHkeHpx+sxcHR FkXCs2zmwdFlzF99iIt3I4k3mhECNOUSMAhQAQqVBjWgUiY9DwpKVEozZjOIqAiiDDdY/mUz lqc+JU05op8IsP3n88tMNvhP56fLQgIqHkUSo3LE2e799opMBSaFxhILpRlzqs1ywmREobPE IosJmkfT4fR7leMKBxr8vJ4G7+EiaRwdsVUKYh5FYwaU5mgeRZtB6YCzgwLN438+nhR7GzNu Q+P0f7VbLjwtFNyOjCBKgJ0+kocxAmW23OSQ29Vfn4SL+AXE8uTRFDo0nZIyUKn9/Alr1gyP p31QrUaJHoNJQHpTroyOS14vMGUvSH7LfdwMNkPxLDR8hQq1EkyGpIFcAcTFPc70c1AKWwfs CEzqs5ZKQM+jqDiE5dPB+iBz/+eHXa8RzKycC3sLQfDKgQwJIsPvEIDCwQlHbWmazfqZ+o7p tJvMJu4KgSKdl2f6/DJsv4Lo4GCic5Ynn/Y9t4VMvUqbh0K54jj7tz/3400YooPYe+QGlgUK 4pG6/ZguMe+LZrQcs5/H/6IOoy5Si1qeKqKO/clft2N5eG4zu6+YsS1fG29HZYbHM0RXkk8r OSHunuDw9VhC/Q4TmKjFq3plcsrp/GuTePEYpxJK0GfhppQdXetG18f+hh/Hw591c6VdLnLb 3ObUiRD06Yw4GR2XvCbaoniXMXAu4BZZWlpV2JI9mxW3/I9yJ97I4+A9bD8elenxXulWDu/c t9mz3p/QBD1RFzex9VR8yqAuTInozWos7WywVBt5dGUna/bfzfQ5Kp0rU6dkMBvn7+bywycY njzkpv9G/jdzL6FZqCYr7Byxjb5G4O0naX5bZs8vw/YrYjl7+ga5vMvj9p7Hncx9vTIbDb7s R9nwVQzr2hbfvpPxd2rD0K5lUm9c+feiKUT74YNolu8eywd1oud4P3TVezDiyxo4KTNxPMMW Z8Mn3b+jWyUze4Z3pu/cW+Rq8g0Dm3rKMtNrE0ng8VMkFKlCxVQ3Q1u0Ot4O1znuH/Gsk2uK 0bJHNWJXfkWbZs34Yn5g2s6d0fG3HWD//pWWqZ/jadaDuReSzsB46n90bOZDy9H7iXtyiF9a +tCs0wwCPirpAkvKNKqBOHqAy1laW9VQvGVnvGPWMujzTgxaFEGhctkzX+ZX5qTJgN4Uuz2H rzp0ZOCSaAqVc0vpe0qnGnTumIvAqb1p16Yrw1Y9pFjFvJnf0qx0pubXw2lmdYjfv+5Eu67f 8vvuR5RsUClLZUlV7jq0rWFmx1BfWjRtRq+FlzFl5fwyaL/mh0c5cK0IDWu+//K2YtGiRaJA gQJSK08ikbx/RBQHxw/jaMVxDK0p1R/eHQaCFn/LLPWXjO9QgPe9tC0Dk0QikUg+KGSlSCKR SCQfFGqAmzdvSj8miUQikXwYgalo0aJoNJqUEt7z5TxPT8+XvtlkMslSnkQikUjefMaUEXFx cWnWmBQKBRqNfPJTIpFIJG+ezK8x6S8xp20xXKwssG2+9PW+NXErnTyasSz6dT5EED6/MXn7 7M287Ib+IjNbeGGvUWLps4RH8v6/d0wXxuBd53/clupAmW/592dRz+srDhreQN/Qb6dbjtft ixLJewpMBr+5THngy77wBGI3fp7ZYYfzo0qjtajM5GuZH3lE9En+6FqZPA7WOBdsxE97QzN+ WE6/m54eqjTrX9ry49J4lxiOzmLSg8859MjEky2dcHj61mvr+bZBEdxs7PCs0JU5Z+OQz0/K gPahosjem91X/8enWSpaxLGiRTY6b0uUjUfy7wlMxvBQYvOXpJB1FtaSTNfYvktFw/ox7NiZ SW8hEcb6Ps35LaE7m65FELz7ayyOHOBBZt6sLs8vl4wIIRBCoD85jCKpnrIzhoUQm78UhVP/ hoTjjGzRjxMVp3PiwT38ZzXg9n5/pHaqRCKRfMCBqU8uO5w/30jEytbYarXPlfIEUYt9sLT1 ZeNzkzFz8HZ2RNdhUP8a3PlzJyGp0xBzJAd+qkFOG2s8yndnaVBS0UGEbmHejkIMmtSV0i6W 2OSpz7Cf2pJDCZDAxfmdKONmhW3uuow9Gp25zEa/nW4uKqzariN8eTN0CkVKKS/x74UsfeLL uB9qk9vWluxl2zJmQC20sm18hJgJ3TWMel5OWKiUKNQFGHQ0eYqRuBFf55r0GlgDTxtrslXo ycrryceMZxhRQoNCoUStc8arzkA23HommSCi/Jj6eUVy2WtRKRWpysBmwvaNpUVJD6wtrMlW 1pfpJ2MzmW0LohY3SdtvDMf4tmgdZqTx4zARNKEK5X46i5FE/uzqjFKhQJ37+VLey/tG4rbO OClt6bAxhCVNdCgUarwGH3s2+RKPOT21GYUcrXAs2pGlN6TXiuQjCEwzb8cQsaQZru3XEavX Z7KUZ+b+zu3crVaXClXq4X1pG3siUnVZw1mCXCdwJvwW6xsGMvjblYQKMN64xA3HYhRLR6zJ fHshA364QdMNN3lwYiS2F8+mzWyMJ/m+iDq5lKfEpv0GEgG0jVgQYeLxqpa4ddxMghDJpTwz 4UFBRBcsQWG5l+OjQlV8OH57vyJX6mZivsnyMctxGXWOaKMZYbzG5MqpbqwhgCuuEzkXfos1 dc8xaMhaIgSgLs2o8waEMGOICWJV9eMM/PVA8vpMDNu/bcs0U2+2Xo/DaBYpZWARvpovvz5J zXkBhMeG4fezPXP6T3t162tNSaqUvYn/6dQzvMecPhlGucqFUWNB44UPMd2bSS1t5vuGxWeL iTTHsry5B522JiCEkasTKz17ut8QwDmL7zl8O4j53sf5de5pjLKJST70wPTPKHDsvIUnsSto bpG2JLdr22Uq1fdGZ1WN+uVOs3Xvo2ezSW1FOnT7BGdLVyp1b0uhs8c4l0H9zHDmKGeLd6Bn FXds3CrTw7dcWumMNKU8M3ErW2RC/VyAIsnWQ7+nF9lUClQePdmtl43jo0PhQuHCKv6e+h3D xkxn9ZHbPEkz8FeiY4/yOFm6UqVba/IFHOWCMamt7hvdjFLZbLGwdKX8T0cJDY9IGtgNAew6 4EaXHzpRykWbRiJHf3wXey5u4quK2bG2sCGPzywuBAVxw5jZfrP1uX5jSYUqBbhw4hJxf/Uj T+HB+MWfwz+wGFXLa1+vb/wT2gq071YBV1tP6tYpwcN7IcicSfKRB6aXDPcP97D18D2WNbdF oXSiw4YH7N+6n9i0fZPn/6nOW4i8URe5mK7pvOINW9sqcfUqiN21QK4aQVt3NveuTaGKzJ4+ 0sBkT6OZJ9g5qiG5Ek8xvZ03nVeFpSmtpWk9QiAEGE9PZcByJ4YduMNjo5mYFc2xFOZMlOQE 2tozuW8WKeua5shFfGbx6u3R3bsCigA/9u6OoNond9i5+zhnHSpR0SGjdp9x33j5US0W2qSj KpUSIeTWH8lHH5jSX2OK3reNY+WmEmxK6rDGi6PJd3Arh576Yej9WbnwFFEJDzm+cA1BpStT QgMKDx+61L3E5MGLOBMRT9S1nYwfs4Z7ZtCUrkSp8yuY7xfO4wg/Fqw6/dqbFCyqd8ZXtYwf Jx/m/hMDcWFhqeyOJR8dameK1evIV8NG0r+GjuCbD59tujEcY/n8pDbnt3gdN8pUorgm2UFY bYWDvQ7DgwP8NvtAkqMwgKY09T4NZdG4JZx7qE8TrLQVGlAtcCaj1l/mkfFV+k2TF/qNukgV yt5YxMRbZRjU14vzE1cTWr4S+TKQys64b2iwtjFx/cJ14mX7lvw3M6ZYDm49RN769ZI3LYCq YAPqO+1j29FkW0hNKQqEDqK4c06abSvMhIntcFcACg/azV5Hf9VsfPK7kr/RVB57f0o2JShz dWHK6Jys88mNe5kfiS5cMm25Is0akwJVjr7sy6gkp6vMqA2TKbK3GyWcHcj/+WFKD+tJRZk1 fXwYTzKsaNImBo1TWUaE+zK6W+Fn9gea0uS7P4CiTjlpvr04kya0xVUBmgr9GOl9jE55HfCs NRVtlapYpaQX9jSevJr+zKRxXps0mx8Ubm2ZvrQt4eNq4WmpRKlQoKs/h9DXGfgtylM532Vi CtanePkG5Am9RtHKpdEAInIRjXUKlDn6sOfaNGpoFWiKDuOkMRN9Ay2fdu+N+o8K2Kue2/wg kXxoxQ9/f3+RkSTRy5QfpCSR5HUxXRhDlQF2rNn93EaGN03iRnxzLMMneD3trOV1l0j+gxmT RCKRSCRvMWN66WxXZkwSiUQiecNkKOIaExPzglHg85YXEolEIpG8KWQpTyKRSCQfaWB6Tl38 tZS5pbq4JJm3Icaasfr2m0WqfUsk7ykwPa8u7pC5YUeqi0veOa+mvv2uv0+qfUskrx2YpLq4 RCKRSD6MwKTfna66+KNUZQqpLi55N5i5O6MO+T+pRiHXXDQZNIDa2ezI0345SYLc/6C+rd9O t+x1GTgqCyraUu1bIvlAA5O2Xrrq4g6ZGESkurjkzSMwFPmGPcs/I3BDPIP8V1Dn5EYOxQH/ oL6d1OayqKIt1b4lkg80MGWIVBeXvEtUeBTwwiN/fjxzeuHlnoc8zrE8is1ErfcfVLTNd6ZT 0yJpbfLZxhip9i2RfKSB6SXDvVQXl7yt0KRSgTLpAXAVKpRKM+ZMLWC+XEVbmbM/+xOT1iaf bYyRat8SyUcamKS6uOTfi1T7lkj+NRmTVBeXvHv+SX371WcuUu1bInnXZKiVZ2dn91JJotTS RFKiSPIqvDN1cYlE8l/PmCQSiUQieTXU8hJI3ieq4sPx2yuvg0QikRmTRCKRSGRgkkgkEonk QwtMieto49iGdYlv5rPaur4og/QiguhDI6mVywa1rg6z7su9uR8Sb0Nd/N+OVDOXyMD0Kh0n ZAGNbTXk/+ZvshSDEm+w5ac2VMznjJXOCtfCDRi47DwxGcUS/T765kirLK7QlmXMBROIR2yd Mh/7UVd4krCX3tkVkHiTbaPaU6WAC9Y6W7IV8qbZoEUEPJJBSwa0Dx+pZi6RgSnLmAles4xL n/qQY+sS9j3ObDQLZWPP2vQ6kI8hGy8SHhPFlW2DyXtoEX+GZiJgqEsw4owhRVlc6E8zvLgK zA8JiXCiaAn3pOdIRCgbvqjFF3/lZsCac4REh3Luz2l0z+XHqt3h0u5CIpFIPvTAdGlCDcoM PZaS+YiQxTTL34F1UQJ4xJKm9tSekcrSwnSFFSse0Py7qfQosZcl26PSDvYigv0jG+LlaIlt jkr0XnkNPWC6spBftxVh9MpxtCzlgbXWAqcCtflyzmTaeygAPVdX9KZSDlssHb1oOHI/ERnN ls33+KNeMQYfPse48hq05cdx4eICfv2zCGNW/kLrstmxtbDCtcAnNPl6FuPbuCGfxvqYMRO6 axj1vJywUClRqAsw6GhyvStxI77ONek1sAaeNtZkq9CTldeTjxnPMKKEBoVCiVrnjFedgWy4 9eypXBHlx9TPK5LLXotKmVpLz0zYvrG0KOmBtYU12cr6Mv1kbCYnN4KoxU3SKqZINXOJJHOB qVCb1rj9uYrD8Ukd8c6GFVys1ZEGjgrAgU6bo/mrn2fKBxkClrEqoTUdK+XAp2Mlji3ZRJqE R3+c44Yv2X07givLanNuYD8W3jGTeP40V/JXp6p7+qdkvjWPPoPOUXPRBUJu7qRfgh9+qQvo xvOMKq1JKeUpbX3ZaMhB393nGV+lFMNOGtCfHEa+SwEE5a9OVXcZgj5mkraZP/dQrvkmy8cs x2XUOaKNZoTxGpMrp6p3GQK44jqRc+G3WFP3HIOGrCVCAOrSjDpvQAgzhpggVlU/zsBfDySv z8Sw/du2TDP1Zuv1OIzmZ1p6Inw1X359kprzAgiPDcPvZ3vm9J+WxpwyS0g1c4kkc4FJmas5 bfPvZdX+GDBdY82qOzTuWBObdF+dwNEla7Fu50tJtQKH+h2pfWEpa4JTzQC11ekztCF5ba3J XvNb+lQ4xb7jCZA8v3tZuIj328fZyl8ytG5u7B3y03hYX6prX17KMz+vdp5qppoaw9FBFFAn 2WQ4d/0TWYH/iFG4ULiwir+nfsewMdNZfeQ2T9IM/JXo2KM8TpauVOnWmnwBR7lgBEQY+0Y3 o1Q2WywsXSn/01FCwyOSBnZDALsOuNHlh06UctGmaZ/647vYc3ETX1XMjrWFDXl8ZnEhKIgb mRrVFTh23vqcKr9UM5dIMhWYUGbDp10p/l6xi7ALq1kT24KOlXXpvzZuH0vWXcfv+yKoFQoU to1ZEHyEpSsuZ9jQLYqXpeD1vzkcJl5S+Hgzqz9J33OYI8nfo6k8mWtGE9cmVULK433sgcme RjNPsHNUQ3IlnmJ6O286rwpL03LSTHyEQAgwnp7KgOVODDtwh8dGMzErmmMpzJlocQJt7Znc N4tnE6LIRXxm8erdUaqZSySZ2vygwKVROyqdWsKIKWtRtWpPGU36nTRy+2J2eE3mhulZR03Y 35tHK5YR8LSuoP+bWb/u5FZcPA8OTGLmiXLUqqBDVbgrQxpe4McOw9l4LpQnxkSiru9jeq9B rAwRWHvXotSx6Yzfc5uY6Bts/+UPDr2CZ5KqcFeGNDjP8A7DWX/mAXFGM4aYu1y9E4P4x84r +ShQO1OsXke+GjaS/jV0BN98+Gz903CM5fOTFO39Fq/jRplKFNeASEwgUW2Fg70Ow4MD/Db7 AIlPx2ZNaep9GsqicUs491CfJlhpKzSgWuBMRq2/zKMs177SWWNCqplLJJkMTIBdbXxrB7J0 owvt2hfhWR9JtflBhLJ5yX6KtmtJ7lSfalHZlxbmNSw+kpBSNvhEPZU6nk4U8N1Lyckz6JpL CQoPWs37ixlVrvCLT2GcbD0o3XIyN6t1obG7AmWeL/hjYjH2di6CW+56TLOoiHfq6sZza0wK lSf99qcTuRQetJq/j5nVrjGpRXHcrCxxLFif8dEdWfRTHWmp/jFjPMmwokmbGDROZRkR7svo boWftVdNafLdH0BRp5w0316cSRPa4qoATYV+jPQ+Rqe8DnjWmoq2SlWsUmYo9jSevJr+zKRx Xps0mx8Ubm2ZvrQt4eNq4WmpRKlQoKs/h9DXGfilmrlEItXFJe+Xd6YunrgR3xzL8AleTztr ed0lko8/Y5JIJBKJRGZMEolEIpEZk0QikUgkMjBJJBKJRPK+ApNUF5c8x9sQY81YffvNItW+ JZKPIDBJdXHJ++TV1Lff9fdJtW+J5B0GJqkuLpFIJJK3GJikurjkw8HM3Rl1yP9JNQq55qLJ oAHUzmZHnvbLSRLk/gf1bf12umWvy8BRWVDRlmrfEsmHGZikurjkw0JgKPINe5Z/RuCGeAb5 r6DOyY0cigP+QX07uXFmTUVbqn1LJB9mYJLq4pIPCxUeBbzwyJ8fz5xeeLnnIY9zLI9iM7F7 4h9UtM13plPTImlS88xvSap9SyQfZGCS6uKSDy40qVSgTHoAXIUKpdKMOVO7+l6uoq3M2Z/9 iUmTmqd+S1LtWyL5UAOTVBeX/IeRat8SyQcZmJDq4pKPgn9S3371FFuqfUsk7xqplSd5r7wz dXGJRPIvy5gkEolEInlHqOUlkLxPVMWH47dXXgeJRCIzJolEIpHIwCSRSCQSyZsMTPpLzGlb DBcrC2ybL01+AFEieT3ehrr4vx2pZi6RgSkZg99cpjzwZV94ArEbP09+ADHDYYfzo0qjtajM 5GuZG3nMN3+nmkWSEoNKa4dn+fb8fjw67eO1ievp1edFlQYRfZI/ulYmj4M1zgUb8dPeUDL6 Vv2eXmRTKVFqrHH1qk6XKYcJf+5NhkNfk7/4c9uO9bvp6ZFW0VxbfhyXMnqS2HyPP2pbpHmf KsgIAAAAIABJREFU0qETWzMhOaG/tp5vGxTBzcYOzwpdmXM27j8rOvtfDmhSzVwiA1MyxvBQ YvOXpJB1FraFm66xfZeKhvVj2LHzLpkeQ6zbsyHBjCn+NtvbhDBq6BLumIEn+xnZaSR77htB 6Lm97Xu6/OqXNCsUYazv05zfErqz6VoEwbu/xuLIAR5k4kvVpUZyJi6Mc6t6oJzXii4Lbmfu XNXl+eWSMeVhYv3JYRRRZeaNOlquevxMPunREppYZPCWhOOMbNGPExWnc+LBPfxnNeD2fn/5 7ItEIvkPBib9bvrkssP5841ErGyNrVb7XClPELXYB0vbF037zMHb2RFdh0H9a3Dnz52EZHV6 L8zoEw1o7OzQKQDLmnz3Ywn+GvwrO7ePZbh/FUZ+440WEKFbmLejEIMmdaW0iyU2eeoz7Ke2 5Mhk6FWorclW7nMmDP6Eo0s3JQXC1yu4ELW4SbrX5VXel/j3QpY+8WXcD7XJbWtL9rJtGTOg lnwgOG2LI3TXMOp5OWGhUqJQF2DQ0eTQnbgRX+ea9BpYA08ba7JV6MnK68nHjGcYUUKDQqFE rXPGq85ANtx6lh6LKD+mfl6RXPZaVMrUWnpmwvaNpUVJD6wtrMlW1pfpJ2MzmcWmc5+lmrlE ksnApK3HzNsxRCxphmv7dcTq9Zks5Zm5v3M7d6vVpUKVenhf2saeiExGpscraaFToNC6UPkP K4aOaotbqkRNQbIUa6qHeo03LnHDsRjF3F5nP4cC+wIFcL59jVup+6ZCkb5UkfEk3xdRJ5fk lNi035BJEdgE1rezTnmf/edbMnifmfCgIKILlqCwFPQDnm4zf+6hXPNNlo9Zjsuoc0QbzQjj NSZXTnXBDAFccZ3IufBbrKl7jkFD1hIhAHVpRp03IIQZQ0wQq6ofZ+CvB5LXZ2LY/m1bppl6 s/V6HEbzMy09Eb6aL78+Sc15AYTHhuH3sz1z+k/LuJz7MqSauUSStVLePw3mjp238OR5NW8R xq5tl6lU3xudVTXqlzvN1r2PUmZx6as5py7lCcyJEZwaZc+MLyZx1gg8OcD40eeoOWEoDRv9 wJhP/uan3/zQv/HLkjaAKnQ6dDrLpKztpaU8M3ErW2CR5rpsffG6vFDKMxO91CcT7xMpATJp XUyByqMnu/WyET+7dC4ULqzi76nfMWzMdFYfuc2TNAN/JTr2KI+TpStVurUmX8BRLhiT2uq+ 0c0olc0WC0tXyv90lNDwiKSB3RDArgNudPmhE6VctGkmKPrju9hzcRNfVcyOtYUNeXxmcSEo iBvGzPab5++zVDOXSN5QYHrJ0P5wD1sP32NZc1sUSic6bHjA/q37iX36xemqOT/XdbVOlOjQ mjJB+zkSagbLGoxc8jP1cqhBoSXXZ7+y+PukUp46byHyRl3kYtjr1OAEMdevEZEzP7lTrRUp bB2wt7PFRvH+bpOrV0HsrgVy1QjaurO5d20KVWT29FyDsafRzBPsHNWQXImnmN7Om86rwtJM M9LcQiEQAoynpzJguRPDDtzhsdFMzIrmWApzJkpyAm3tmdw3PxMtNkcu4jOLV7/PUs1cInkj gSn9Nabofds4Vm4qwclK48aLo8l3cCuHHmfho40xBG3+k9OWOcnpkFoZtiWzZzYmdf9XePjQ pe4lJg9exJmIeKKu7WT8mDXcM6c+z5ev+QhjPCFnVjB00gm8OzZLUyJSFR7KkX0DyJPFq5W4 rTNOlo1ZFCmyeD1fPE+L6p3xVS3jx8mHuf/EQFxYGHFy/HgRtTPF6nXkq2Ej6V9DR/DNh882 shiOsXz+KaISHuK3eB03ylSiuAZEYgKJaisc7HUYHhzgt9kHSHx6bTWlqfdpKIvGLeHcQ32a YKWt0IBqgTMZtf4yj4yv0m9evM9SzVwieWsZUywHtx4ib/16KZsPVAUbUN9pH9uOJmT89scr aaFTorTMRvWxEbSZO5pG1hlNGD1oN3sd/VWz8cnvSv5GU3ns/SnZMvELjWdHUtrGheItZ5LQ eTVLeuRJc2HS3S4Oz60xKVDl6Mu+lNKamfDgu4jS1alg9wZSLV1lRm2YTJG93Sjh7ED+zw9T elhPKsqsKc39GFY0aRODxqksI8J9Gd2t8DM1fE1p8t0fQFGnnDTfXpxJE9riqgBNhX6M9D5G p7wOeNaairZKVaxSbpk9jSevpj8zaZzXJs3mB4VbW6YvbUv4uFp4WipRKhTo6s9J69icVaSa uUQi1cXfGiKS5a1rcLTPEWbUtpXX4yW8M3XxxI345liGT/B62lnL6y6RfNCFD3kJ3lbId6LD unN0kFdCIpFIZMYkkUgkko8XKeIqkUgkEhmYJBKJRCJ5/cAk1cUlb4G3Icaasfr2m0WqfUsk 7ykwSXVxqS7+sfBq6tvv+vuk2rdE8tqBSaqLp/dGqS4ukUgk7z4wSXXxVy3wSHXxN46ZuzPq kP+TahRyzUWTQf9n777Do6jWOI5/t6X3BEggCYEQeu9FpCNIB6UZqoggVaKgiA1QQEQvAqJY 6L1XaQJSQw2GHnoRCAmkQspudu4fG0ghZQNJCPp+nifPvTK72cnsOfPOOTPzm5E083DAp8di TIHcWaRvJ26hf9EWjBqfgxRtSfsWooAWJkkXl3TxAkVBX+59dixuy9k1jwg4soTmx9ayNxbI In3bVGhymKItad9CFNDCZMbOXNLFJV08/2hwL+WHu68vnl5++BXxwcc1hsgYM4a4WaRoZ9we Je1biJe0MGWya5d08Vz9miRdPFVp0mhAbboBXIMGtdqI0ayvPfMU7Yzbo6R9C/GSFiZJF8+M pIu//CTtW4h/zYhJ0sUlXTz/ZZW+/cwk7VuIfCdZeXm3l5R0cTPkW7q4EOLlmamQTZBXJV/S xYUQQgqTeOloKo4jcKdsByFECpk8EUIIIYVJCCGEkMIkCqS8SBf/t5M0cyGF6Vk6zt3faWOv w/f9fVlH7STu4r1iyQndag2WTsWp2+cngmJTv0jP/jHv8vu9dDd7JFxhw+ddqVPSFRsrGwqV bcWoRaeIVrL6HDUanQ1ORcvQ4I0PmHvswZOw1kfL38Cx2Y+m+55Sr9fjH4vqTDydlPXfkPxj 3WkJsRn9vQlX2TS+Bw1KuWFrZY9Hmbp0DJhHUKTcyCIFzXySZi6kMOWYkesrFnGuUXuKbVzA ruxuqNVW4rOTehSjnsgzv9Pg7zF8uiochSTO/DCAkSsuEgcYww8wtc8YNkYqoISydmAz3t1T ktFrzxAWHcGFTR9SYu88NocqWXxOIkkJkdw4upwx1S8yvmVrJgUlZL1eyQngSuIJxlXUmPXa uLU9sXuqWoey5p2mvPNncUauCOZuVCjBm2fwtncgy7aHyeMrhBDC3MJ07pvGVPvo0JORj3J3 Ph1932JVhAJEsqCDI81mpXqkRdIFliy5Q6cx0xlQaScLtkSYvdNVqQCVHW6ulqjQUGHweNpd /prPVm7jfx+upMiH42jrpCLpwlwmbyrHhKVf06WKO7YWlriUasawOdPo4Z7N/VRqCxyKVaX9 2MXM7nKHmTP+JC5HmyySBe0daDoru8d4pH1d0vnfmby5HBOXTuLN6kWxt7ShUKlatBvxE1O6 FkbuAsudg6LQbWNp6eeCpUaNSluKgIPJ810Ja+np2oR3RzXG084Wj9oDWXo5eZnhJJ9V0qFS qdFaueLXfBRrrqXclatEBDK9Vx28HS3QqFNn6Rm5t+srOld2x9bSFo/qPZl5LMbM9p5Bwoek mQthXmEq0/VNCm9exv5Hpo54c80SzjT1p5WzCnCi9/oo/hzi+eQX6YMWsSz+TfzrFaO9fz0O LVhHaFY91XCK8VV1qFQarD3bsLrURMa1Tr4h9XHcmEKahO+EUye44PsqrxR5ngGfHXVfrcrD c2f550k/VKXEmz1Zr+SH+T3ZgTjRe0M0u1L9zWlfa80byx899bqE00GE+L7KK0WkBOUG02Xm 6W7KNV5l8cTFuI0PJspgRDFcYlr9VPNd+iAuFJpKcNg1VrQIJmD0SsIVQFuV8af0KIoRfXQI y149zKjJe5LPz0Sz5YNuzEgaxMbLsRiMKVl6Sthyho04RpNfgwiLuUfgl47MGToj+4dFZkbS zIUwrzCpvTvRzXcny3ZHQ9IlViy7SRv/Jk9PVSUftR1csBLb7j2prFXh9Jo/zU4vZMV1I5DE hSl1sFCpUKkseXX6NdOI48k0mJH40P2MePQF/lNPk0QSZ2Z/xvoSHzO+62uMnNKFO1MnsilS 4XH6d67s4lWmH42VFRZWVin5e+mm54wZpoRn9No4VnWzyfAIOTX9wQBKaU2PvXDttxmZ+c+N 79KNsmU17Js+hrETZ7L8wI20o2FdPfwH1MTFuhAN+r9JyaCDnDYAyj12TehIFQ97LK0LUfPz g4SGhZt27Pogtu0pTN9PelPFzSJNm0s8vI0dZ9YxvE5RbC3t8Gn/E6dDQrhiMK/hPZ0iL2nm QphVmFB70L57FfYt2ca908tZEdMZ//pWGb82dhcLVl0m8ONyaFUqVPZt+P36ARYuOU8SGsqM OUyioqAoCewd4ZPuw1VYFqrBWx3LcnbXAe4pGioM+5Xp3UpjDagLvcLo+VNo56TCsmJ1Sl/e x/57z3NmJoZDe09iW648xdSgsrXHwd4emzwa0JjWeT8HktdZV38alwxJXPq2HhJ3l1uFyZHX Zx9l6/jWeCccZ2b3uvRZdi/NIUGar1dRUBQwnJjOyMUujN1zk4cGI9FLOmGtGM2YklOwaDab 20Yl5QDmwTzaWj57d5Q0cyHMuvhBhdvr3al3fAGffb8SzRs9qKbLuJM+2DKfP/ymcSUppaPG 7x5E5JJFBOmz7+SJ90+ybP3fOJYsQUo/1PHKlJ/pn+pJgZqy/Rjd+jSfvjWOtcGhxBkSiLi8 i5nvBrA0u8fkKnpibgezaXIv3lvtwZChzbAGLJrP5vKyN7DOq6mnsv0Y3eoU494ax+qTd4g1 GNFH3+LizWjTTKW0xdyhdaVCS3+Gj/2CoY2tuH71fsq5QP0hFv92nIj4+wTOX8WVavWoqAMl IZ4ErQ1Ojlbo7+zhu5/3kPC4Gemq0rJRKPO+XkDw/cQ0xcqidisanp3N+NXniczx3FfGKfKS Zi6EuVflOTSjZ7OzLFzrRvce5UjpI6kuflBCWb9gN+W7d6F46idU1O9JZ+MK5h/IJFX88fkZ tQbb4m343WII88Y3z7pAqNx549c/mdXgApPal8XF3p2qXaZxtWFf2hRRQdIpxldz4a11Cek+ xwK1zp5i1d/g66O+fLptC2OrmQ5v01wunnq9Hl8GrvFkyO5EUO4zt40zrX8NzeaIOt1FEip3 3vhtF7MbXuLbzhUpbGONc+nXmBLlz7zPm//HHpGeRwzHGFvedBGDzqU6n4X1ZEL/sintVVeV krdHUt7Fi05bKvLtN90opAJd7SF8UfcQvUs44dl0OhYNXkk1cnakzbTlDGU2bUrYpbn4QVW4 GzMXdiPs66Z4WqtRq1RYvTYn63Oq2Q6tJc1cCEkXz6nodfRvd4B+m6bSUELDn1u+pYsnrKVn sUW0v76a7ray3YUo0BMfsglyyKEjv//VUbaDEELIiEkIIcR/gWTlCSGEkMIkhBBCSGESBVJe hLFmn76duyTtW4iXoDBJuriki79Iz5a+nd+fJ2nfQuRjYZJ0cUkXF0KIPCxMki6enqSLvzhG bs1qjm+thpQp5E27gJE083DAp8diTIHcWaRvJ26hf9EWjBqfgxRtSfsWomAWJkkXl3TxgkVB X+59dixuy9k1jwg4soTmx9ayNxbIIn07uXHmLEVb0r6FKJiFSdLFJV28YNHgXsoPd19fPL38 8Cvig49rDJExZlw9kUWKtvHmTJpYJp8jfPK8JUn7FqJAFiZJF88dki6ei6VJowG16QZwDRrU aiNGs67qyzxFW+01lN0JyecIk5+3JGnfQhTUwiTp4rmzM5V08ZeSpH0LUSALE5IuLuniL4Ws 0reffagrad9C5DfJysspSRfPVfmWLi6EeHlmKmQT5JCkiwshhBQm8e+lqTiOwJ2yHYQQKWTy RAghhBQmIYQQ4vkLU+I55nSrgJuNJfadFibfgJgHEjbS2/1FpSvnIAX6eSWeYXZnPxx16lQ3 dP735EW6+L+dpJkLKUzJ9IG/8P2dnuwKiydmba/kGxDFs9If/Ilv7/Rib2RSqhs6hRS07Ema uZDClMwQFkqMb2XK2MqtoLnBcO8uMb5VKCvbUwghcliYErcz2NsB115rCV/6JvYWFumm8hQi 5rfH+knI6eM970k+q6RDpVKjtXLFr/ko1lwz805H4wP2fN4YLztb3Gu+zcIQ8ybWlIhApveq g7ejBRq1yswpssxToLNZSe7t+orOld2xtbTFo3pPZh6Lyf69iVvo76bBptsqwhZ3xEpl/nqe /b03VQvZYO/dnPffbohPfkw5vlSMhG4bS0s/Fyw1alTaUgQcTJ7vSlhLT9cmvDuqMZ52tnjU HsjSy3qz2mrm7eoZ28CTftMubb+RNHMhzCxMFi2ZfSOa8AUdKdRjFTGJieZN5WmrMv6UKZxV Hx3CslcPM2ryHvN2pPq/CSn0DSfDrrG69Vk+/GBp1gnlAESz5YNuzEgaxMbLsRiMillTZFml QGe5WwlbzrARx2jyaxBhMfcI/NKROUNncC67Pm3xOr+HJ/FwWRcK+68nXjFzPW/O5/2PL9J2 5WXunJiI0/m//9NJAabLzNPdlGu8yuKJi3EbH0yUwYhiuMS0+qnmu/RBXCg0leCwa6xoEUzA 6JWEK9m11czb1TO3gcxImrkQZhambKlw7rOBuPTp28o9dk3oSBUPeyytC1Hz84OEhoU/6SwZ pzk/3nnX4a3+tXC1LkS9t7tR5u9DBOuzeZ8+iG17CtP3k95UcbN4Knsus/dllwKd2fsSD29j x5l1DK9TFFtLO3za/8TpkBCuGMz4+7IsQJmsZ9ABgir15r1GHti51aZvtxoS/vpUU3SjbFkN +6aPYezEmSw/cCPts7Z09fAfUBMX60I06P8mJYMOctqQTVvNol1l1way7zcb0/UbSTMXIpcK U8YMJ6YzcrELY/fc5KHBSPSSTlgrxifTCxmnOafptxn+Z7bvy+wPzfR9WadAZ/4+BYtms7lt TAmsNT6YR1vLvFrPp6eCRPo248jrs4+ydXxrvBOOM7N7Xfosu5dmS6X5phUFRcm+rWY1HZdV G3iW7ihp5kLkSmHK+ByTkhBPgtYGJ0cr9Hf28N3Pe0gwt70nHmHp3ONExN/n8NwVhFStT6Xs Dv90VWnZKJR5Xy8g+H6i2bvt7FOgMzvIbEXDs7MZv/o8kfkw76Gr1oBqpxYx51AYD+8d4Pfl QRL6mRGtKxVa+jN87BcMbWzF9av3U540rD/E4t9M7Spw/iquVKtHRV02bTWLdvV8bSCDc0xI mrkQeTpi0tUewhd1D9G7hBOeTadj0eAV8591pKtCqdAAKrp60XFTWb6Z2p3sH/zqSJtpyxnK bNqUsDP74ofsU6AzOfos3I2ZC7sR9nVTPK3VqFUqrF6bY8a5sGf8orz68P0kX9Z1KE6RmuOJ rVAFS7VGWnCaYfoxxpY3XcSgc6nOZ2E9mdC/bEoavq4qJW+PpLyLF522VOTbb7pRSJVdW828 XeVJG5A0cyEkXfxllBR7kUUDWrOgwU52DPN5qeM78i1dPGEtPYstov311XS3lTYkxH9yxCRy Wxwr3rRGpVZjVeRVftAE8G1/H/kChRAyYpIRkxBCCBkxCSGEkMIkhBBCFOzCJOniuUvSxYG8 CWPNPn07l1uNpH0LkavMfoJtSrr4OKrYqZEzSs8nJV38U6pIkGuuMqVvF/TPi2VJZz+29b/G /Ge/I1eI//aISdLFc5ekiwshxLMWJkkXz2wlJV083xm5Nas5vrUaUqaQN+0CRtLMwwGfHosx BXJnkb6duIX+RVswanwOUrQl7VuIAlqYJF084yIo6eIviIK+3PvsWNyWs2seEXBkCc2PrWVv LJBF+rapXeUwRVvSvoUooIUpW5IuLuni+UmDeyk/3H198fTyw6+IDz6uMUTGmHH1RBYp2hlv d0n7FuJF0ObVL36c2PzJnpt0Lu1E/LLOFF+ZPl18aFb1LsP/zPZ9mVXgTN9nTrr40AyP3C2a zeb29kF4qHLyvmddz6c//79Ko9GAWoNGo0KDBrXaiNGsq/oyT9HOeLsnp31/GsjOxHAa1lI9 Sft+V9K+hSjIIyZJF5d08X/xkZukfQvxMhamTDqmpIvn7hcl6eLZHyJlkb79zCTtW4h8J1l5 LyFJFxdCyIhJFACSLi6EkBGTjJiEEELIiEkIIYQUJiGEEEIKEwmr6OrclVUJefsZ3Qqli0p6 JgpRe7+gqbcdWqvm/HRbru/NLXmRLv5vJ2nmQgqTACWSjd//huP4C8TF72RQUTmfJgXtxTGl mf9AoxxFf8SypLMHfTYlSOMRUpj+FYz3uRvuQvlKRf6jMUBCCFGACtO5bxpT7aNDPD7OUu7O p6PvW6yKUIBIFnRwpNmsWxgB9H8xvLgWlVqN1tqNMq+NYdM/WRzSKuHs/qI1fs7W2Berx6Cl lzKZejBy98+veKN6Mewt1KhV1nRcHJPRvAQXlwyiXjF7rJ39aP3FbsIz/Xgjobu+4o1qRbGz tMa1TEs+WHf96bBM4z/82LICH+4P5uuaOixqfp1BUGsCFxYNpE5RO9PnfjyEZq65MYUocngE Qei2sbT0c8FSo0alLUXAweT5roS19HRtwrujGuNpZ4tH7YEsvZy8LJsk/MxT658xYd70W4mY 3y5tYoqkmQthXmEq0/VNCm9exv5Hpo54c80SzjT1p5WzCnCi9/oo/hziafpFukb8cN2AYjSS +OAUcxsE8sGkvzKf5048zGH9MLbfCOfComYEjxrC3JtPVxLjP/N5x38ZLqO3cz02CaMSx7q3 7J9+3bVfGRwQTJN5p7l7dStD4gMJzOTDjbcXMvjDs7T+7Tj3Yh5wZuFrnP0ggBX30+1W1MV4 b/sppjSowthjehKPjaVcusAF49U5DB59ntbLLvLgn92MSjrC4URpXHlJU3EcgTvT3ZRrvMri iYtxGx9MlMGIYrjEtPqpxrj6IC4Umkpw2DVWtAgmYPRKwhWyScLPPLX+mRPmMyNp5kKYV5jU 3p3o5ruTZbujIekSK5bdpI1/E+wyenHSLTZ9/DoV3O2wsitGg8/3cu3SZaKUJC5MqYOFSoVK Zcmr06+ZRlgWrzL4o9aUsLelaJMPGFz7OLsOP3zqtbH7N3Og2ki+7lYBFwvVkyPJp14XuIu/ 6w/joxbFcXTypc3Y93jVIuPXPjywmR1BSxhQoyi2ljZ41PmAP66f59yNxIzXNdURbPrlMYf3 cKr+ewS86oG1jSfNRw9K/lyRr1RulC2rYd/0MYydOJPlB24Ql2bHXw//ATVxsS5Eg/5vUjLo IKcNZJ2En0VqfXYJ89msLM59NqZL5Zc0cyHMKkyoPWjfvQr7lmzj3unlrIjpjH99q4wHQHsn MfSPUkw9eIsYvZG4TX1xxYgRDWXGHCZRUVCUBPaOyCqxILPXqrJ9nSrTSZQMXms0omsxh7tG BUVJ/tGfZkI1y2zWNSd/i8jfwuTI67OPsnV8a7wTjjOze136LLuXplWkaUWKgqKkJOGP3XOT hwYj0Us6Ya0YzZiSS06YT9WGjA/m8exPSk9OMw8KZOf2cBrWuvkkzbyOpJkLKUxpm7Pb692p d3wBn32/Es0bPaiW2aFYQgKJaitsba0whu7n++838iCrNp64j58mb+Va7CPu7PmW2Udr0LT2 00XP5pU2NAiazqerzhGhz/wX2tZtSpVDM5my4wbRUVfYMulH9mYypWbzSlte+fs7xiw4SVjC 83VE29qNqHjwJ/63P5T4uNvsmjYn088VeUzrSoWW/gwf+wVDG1tx/er9lBGv/hCLfzOl1gfO X8WVavWoqMsmCT+L1PrnS5jP4BwTkmYuhJmFCXBoRs9mZ1m41o3uPcqR0kfSXvxg0eR9viyz hc7FHXGv/yl3KjXIOhXcoja1tNNp7ulCqZ47qTxtFv0ySPJUF+vDLwu7EDqxKZ42mkwvflD7 vMOPUyuws085ChdvyQzLOtTNZAZEXaw3vy3vT+Ks9pSy16JWqdC49WfLMxQUdcl3mT3Jlw1v lsTJ41WmJlaimp0VlnJVef4yHGNsedNFDDqX6nwW1pMJ/cumtFddVUreHkl5Fy86banIt990 o5AquyT8zFPr8yRhXtLMhZCsvNxmfHSLfdN689a+rhzaOggvmefLUr6liyespWexRbS/vpru trLdhXj5R0wiG8nJ3yo1OudK9N1emkk/9JOiJIQQMmISQgghIyYhhBBCCpMQQggpTLlN0sUF eRPGmn36du6StG8hcpdWNoE5e55U6eJ9i0mQawFnSt8u6J8Xy5LOfmzrf435z35HrhAyYvrP knRxIYQoOIVJ0sUlXbwAHSFwa1ZzfGs1pEwhb9oFjKSZhwM+PRZjCuTOIn07cQv9i7Zg1Pgc pGhL2rcQBbMwSbq4pIsXLAr6cu+zY3Fbzq55RMCRJTQ/tpa9sUAW6dumQpPDFG1J+xaiYBYm SReXdPGCRYN7KT/cfX3x9PLDr4gPPq4xRMaYcfVEFinaxpszaWJpui8v5XlLkvYtxIuQ/cUP yeni3y7Zxj3vEFbEdGZ2NuniPx5cQjMfJ5Q/+uE7I1W6+JjUs1/HMt3xpH9t7HLINF081eti lik5+J3J6eJb33k6z69aunVNCsnmc6Uh5Wtp0mhArUGjUaFBg1ptxGjWVX2Zp2irvYayO2Ho U8dtRerWRvVpIDsTw2lYS/Uk7ftdSfsW4sWNmCRdPHuSLv4vPnKTtG8hCmJhQtLFs9uIki5e IGSVvv3MJO1biHwnWXm5TNLFcybf0sWFEP+yEZPIhqSLCyGEjJiEEELIiEkIIYSQwiRg5Wxj AAAgAElEQVSEEEIKU4YSzzGnWwXcbCyx77Qw+QZEIZ5PXqSL/9tJmrmQwpRMH/gL39/pya6w eGLW9sIp++5D9JHv6FLBDRvbIlTp8SMnHz5e9vhiARUqbSkCDqbqYcZwAmf0o0EJZ2wcvKjT ZzYnYpJv9FBiObPkfVr4OmJlV5Rqb0xmb3j6m0Bi2RdQHkvrDimdTX+AUSW1KefFdJX5/O+U a4gNNzbyUetyFLLWolbb0G21KYImcfcQPDWpz6epsW75M6anXsQSNNufmsXssbB0wLve28w9 E5e8ntEcnd6Nqu62WNp6UP2t2QQ9lMYmBS13mNLMf6BRjhKFY1nS2YM+myTAUfyLCpMhLJQY 38qUsTXzIgdDEN8M+JbEIXu5c2sbvcK+5N0fziZHq1jTdWUciv4oH5dNe6ei8dpGll5qwOQ/ rxB6fjGvXRpL/2nBpqywuD0s212Sj7dd5f6N7bybNIP3vjueJkfs0aFJTLldkRrpO61FI2bc SEJRFBR9MF9WSQ69SLrEj30GsLPsFALvJWA0PmJ5F9NjCCyazOJWkmJ6jxLL1oF+NHmzLe4q UMJWMu7jC7RYdomoiPP8VucoAV9uJBpIOj+TIZMi6b31FpG3tjEoYSrvzTgnsTJCCJErhSlx O4O9HXDttZbwpW9ib2GRbipPIWJ+e6zt06ZpJ13cyrbwVgzuVx5H56q8O6gJV7bu4GY2R7jq kv2YPn0ADUs6Y1+0Ph0aexIRdt+UV2fTlgm/DKNpKRcs1SrUKh32jrYp0S5xR5ky8S59P2uF s5kl13htPSsuteHLie3xtc/8dn7lwSZ+31kJ/85FUQMqm2J4uWnRaExXKmrUWop4FcUSMFwJ 4UaZ1+lS2Rlr58r06laTczt2c1emq/KYkdBtY2np54KlRp12NJ6wlp6uTXh3VGM87WzxqD2Q pZeTlxlO8lklHSqVGq2VK37NR7HmWsrhjhIRyPRedfB2tECjTp2lZ+Terq/oXNkdW0tbPKr3 ZOaxGMwLclCImN8ubb+RNHMhzCxMFi2ZfSOa8AUdKdRjFTGJiWZN5SXdvsk99+J4JicvWHt5 43b3Jndy0OaV6AMs2qylZ696PAlw0AcyurQWnUtVPn8UwJyRj5MoEgia9jkXu4+nU5EM/iz9 EcZVtsPKwYvavWZyLNrUbQ3XL/OPl5YDfcrjYm1H0Zp9+PV03FM7vH9W/M7Rhr1p55pcBm1b MHFWPTa3dsfKphhdDrTmp08bYAloS5bGO2Qb689EER95hiWrDpN49zahUphyjabiOAJ3prsp 13iVxRMX4zY+mCiDEcVwiWn1Uw2d9UFcKDSV4LBrrGgRTMDolYQrgLYq40/pURQj+ugQlr16 mFGT9ySfn4lmywfdmJE0iI2XYzEYFeI29MYJUMKWM2zEMZr8GkRYzD0Cv3RkztAZGTwWxUyS Zi5EzqbyMqfCuc8G4mKW0Mky/TEhxO16nyq1Ps308ROZij/HnN4jCBmwiM/rWqfqvHX5JkRP /N1DjLP+gbe/CUIPJJ76H2NPdOCrnsWe/qN0DfjucgyRETHcP72Adv+Mp9fXR00d16iQELSP sG7rufbgGqvbXuTjUQtIe9AawqL5l2ndqwWPH7ahhC7jvUFHaL/5No9irrKswTb6jVjPAwU0 ZYfwwwfW/NLUHWc/f/b6NMJPp0Lu9MpjKjfKltWwb/oYxk6cyfIDN0hziKGrh/+AmrhYF6JB /zcpGXSQ0wZAuceuCR2p4mGPpXUhan5+kNCwcFP70AexbU9h+n7SmypuFmm+w8TD29hxZh3D 6xTF1tIOn/Y/cTokhCsGc/vNxnT9RtLMhcilwpTJEW1RL9xDb3C/4ff8fXQCVUNvEO7uhYfG jDcnXGRen56srDOHpUMqYJVBp7YsXJMBfetwdcde/jEaubl9PbvWDqKkVoXatR9bojbQq3AT ZqaZO9Rg692EYX3rcPv0WWIU0LgXxaNQI7p18MPB2o1aHZtT7HoIN1L1TP2xeSyM7kLvhtap dgS7OODamq71imBt602zHi2wPrCHMwZA5UjdgNWcCosjLuwE0ypGc9ezJF4aaXB5W5gceX32 UbaOb413wnFmdq9Ln2X30kytpTk4UBQUBQwnpjNysQtj99zkocFI9JJOWCtGM6bkFCyazea2 8fF5SAXjg3k8+5PSk9PMgwLZuT2chrVuPkkzryNp5kIKU05kfI5J4/caLV228tO8c8RE/c2c OXso0apF9jE9iZdY0LcrCyr8yOqPauOQqjfp909h0ORNnA59RHzYCX5fsBdLPz8KqdX4Bhwk 4fHO4f5cXndsz8J7uxma5gONxP2zn58XHcOrckUcVKAp3ZTGNntZvvEysfHhHF27k9slylJc kzKVsvv35Vh18yf1QavGuyTFLm9i6b7bPIq7w96VO7jt5Zuu+BiIPLuU0ZMOU79bK1xlyJT3 tK5UaOnP8LFfMLSxFdev3k95npb+EIt/O05E/H0C56/iSrV6VNSBkhBPgtYGJ0cr9Hf28N3P e3gSOK+rSstGocz7egHB9xPTFCuL2q1oeHY241efJ9LwLP2m3VP9RtLMhcjLG2y11Rn96yi0 P7xCYY8WzHP5lJ+Hl08+H6Tn0Id+aHW1mHQmhO8aWKAtPZpAPRhOzWXKqpPs/rw+TurkB7d1 WkIsoKvVjXbxc+ld0wOnkm2ZoxrEwkmtsM1mVfR7R+CjVaFS63Cq0IuN3hNYPLam6WFUFvUZ +/NbhH5aBzcHH97cWo5vvutFseQtozzYzG8bvfB/qwKp9w2askOZ/VUptvmXwcmpDP32V+O7 mQPwUQNKKHNes0KltqJok0k86L6Q2W95yFReXjMcY2x500UMOpfqfBbWkwn9y6Z8b7qqlLw9 kvIuXnTaUpFvv+lGIRXoag/hi7qH6F3CCc+m07Fo8Ao2T74sR9pMW85QZtOmhF2aix9Uhbsx c2E3wr5uiqe1GrVKhdVrcwh9nh2/pJkLIVl54sXKt3TxhLX0LLaI9tdX091WtrsQ/80RkxBC CCEjJiGEEDJiEkIIIaQwCSGEkMIk6eIiD+RFGGv26du5S9K+hXhBhUnSxSVd/GXxbOnb+f15 kvYtxHMXJkkXl3RxIYQoGIVJ0sVNf6WkixcARm7Nao5vrYaUKeRNu4CRNPNwwKfH4uRswyzS txO30L9oC0aNz0GKtqR9C1FAC5OkiyPp4gWJgr7c++xY3Jazax4RcGQJzY+tZW8skEX6tqkN 5DBFW9K+hSjYU3mZk3RxSRfPTxrcS/nh7uuLp5cffkV88HGNITLGjKqfRYq28eZMmlgmR2A9 ed6SpH0L8ZIWpkx2H5IuLuniedW2NBpQm24A16BBrTZiNGs0mnmKttprKLsTTOcTHz9vSdK+ hXhpC5Oki0u6+L+XpH0L8S8aMUm6uKSL57es0refmaR9C5HvJCtPvFD5li4uhJARkxBCCPEs tLIJxIukqTiOwJ2yHYQQMmISQgghhUkIIYSQwiQKuLxIF/+3kzRzIYUph+LPzmVAXS/sre3x qjeQhReSb25KCuGbuhYZJ4onhXHox4E0KumIlU0hyrUezdqrj5cncHXT57xR0wsHa0e8anZl 8l9hpL31I5EzUxvioPNhxN7k9yWd4+uaFqmuHrSk/rTLPNn/xZ1nyYgWlHGzRqtWYfnKd1wx pk0AePyjduzKimjTupxf/B6NS7lgZWGFi28jBi86T0LyeoYsHUpjX2esrJwp1eJD1t+QIBkp aLlP0syFFKYc7S3O8F3fj7jcfhVX719lZduLjO7/AxeSAE1pRgcmZpgonnRlHYvOVOOzPy4R dmsPnxZZz9vDFnFXAfTHWbPVht6/H+POg4useyuW/w3+Ls29KYmn/seHu0vzeul013JoyzH2 mD45HTyBgwG+pj9YiWJ7QDs+ON+Un4PCSTAqJOwfRUl12gQARUni0rRX8GjTjZb2QMxGvhj+ F+W/P0F4TBjHvy/PX8M/Z0MMGC/P5p1hR6nz00nC759lXuMTjBj0e7ahtUIIIXJYmM5905hq Hx3i8XGWcnc+HX3fYlWEAkSyoIMjzWbdwggkXd7EhhstGTmiDm42btQdOZLml9ez+XrWe2eN 3zvMmjWYZmUKYe9SgS49XsX63h0ijICuPgEzx9C+chFsNFp0Flps3D1wfnzbVGIw33+4n9e/ HURpM48glQcb+XGZCyN+GE1jL1syvYnfcJqFC2/Stm9rnFSAZVG83bWmpJnk0ZTOozjFLEF/ /iTnfTvRr2lx7Gw9aPB2V/wOrGbrPbmtP/8YCd02lpZ+Llhq1GlH5glr6enahHdHNcbTzhaP 2gNZejl5meEkn1XSoVKp0Vq54td8FGuupRz5KBGBTO9VB29HCzTq1Fl6Ru7t+orOld2xtbTF o3pPZh6LwbxvXCFifru0iSmSZi6EeYWpTNc3Kbx5GfsfmTrizTVLONPUn1bOKsCJ3uuj+HOI J2og6eZ17nj4UuJxmKulD74ed7h2MwcN3XCVxbN3U7pHZ0o/rhjGK3z3iiVqSzdqfp3EqOkD KaUxTZ/9PW00B9p+y6CMqlLSZWY0c8LSphBlmg9nyfm45H8+TYidB3emN8LLzgqH4vV5Z94Z 0meKJwTOY2n8m/RtbGP6B4t6fDK7Hcd7++Jg6YBvnxO0n/0J9SxAW7oipS6tZ8Gemzx8dJfA easIir/J1VvSyfOC6TLzdDflGq+yeOJi3MYHE2UwohguMa1+qnahD+JCoakEh11jRYtgAkav JFwBtFUZf0qPohjRR4ew7NXDjJq8J/n8TDRbPujGjKRBbLwci8GYkqWnhC1n2IhjNPk1iLCY ewR+6cicoTM496xfuaSZC2FeYVJ7d6Kb706W7Y6GpEusWHaTNv5NsMv0Hc+RAJF0m43D32Rm oaksHF42ZSSjLsmo/QkkPfqHvR+qmdr9cw4lQMLJaYw+1JZvB5V++oYsTTnGHo0lOjKGmH/2 823VIwzv9R2nk0AxGjHc3cdpz8kcvhvGqV8acirgXX68mHqPEsuueauw7dGb2sk7AeX+Oob1 3kDVX87y4OEDzsypwrrew1h3X0HjN4Sfv63A7n7lcS1ckw9vlqOemxa1XF6Sf1RulC2rYd/0 MYydOJPlB26kPdjQ1cN/QE1crAvRoP+blAw6yGkDoNxj14SOVPGwx9K6EDU/P0hoWLhpx64P YtuewvT9pDdV3CzStO7Ew9vYcWYdw+sUxdbSDp/2P3E6JIQrZu3VVTj32ZgulV/SzIUwqzCh 9qB99yrsW7KNe6eXsyKmM/71rTI+ivUsjsedS1x9fMCXcI3Ldzzw8TQjVlt/jZUD2/CZfizr Z3cio7eorT2o+24f6t4O5MhdPde2rWf3xmGU0alQ6aox4e/L/NDInnbzI1JNp6iwcC5D21F9 qHoxiDMJoPHywcuqBm/2b0BRO3uKN+tHx1KXOB2SlGq6bzNzt5Sgt39KRp7h3F4O2rxO/w5l cLJxomzHt3nd5iB7zxkAayr2+5VDN2KIj73FX+8V4U58aSqWlHuY868wOfL67KNsHd8a74Tj zOxelz7L7qWZWktz2KQoKAoYTkxn5GIXxu65yUODkeglnbBWjGZMySlYNJvNbePjc5IKxgfz aGv57N1R0syFMOviBxVur3en3vEFfPb9SjRv9KBaJodimlJtaOe1nf9NP0x4XDiHp/+PHSXa 09onm49JvMTCvm35SvM5G3/qjFeqfXnShd8YPWEtwXcekhhzg79++JV9rlWpWkRHmTGHSUze ISj6ID6t4svwv2LY2Mc5TSfUR4aw6fv5nCxVjQqWoPZoTefa51k59yB3HsZy48+5rL1Slqrl Hn+wkdur5rK3Wm+6lUhZd41PWUre3cK8TReJiosiZOM8ttz1paxP6ipq5OGNXUwaMZPoHoNp 4ySNLF9pXanQ0p/hY79gaGMrrl+9n3Ilpv4Qi387TkT8fQLnr+JKtXpU1IGSEE+C1gYnRyv0 d/bw3c97SHi8b9ZVpWWjUOZ9vYDg+4lpipVF7VY0PDub8avPE5njua8MzjEhaeZCAHDkyBEl KChIOXXqlHL27FklJCREuXLlinL9+nXl1q1bSnR0tBIbG6qs7+ehaCzrK1PPxyt6vV4xGAxK UtJ9ZV47e6XJjBtKkmLy6NSvSt9aRRVbC1ulaO3+ytwzcclL4pX1/g6KyvT8QAVQVHY9lDXx iqI/NlYpr035d0DRlHhf2Z+oKIohVNk3zV+p4+2gWFq7KaUbv6P8fDxKMSrp6IOUT6v4KsP/ SlQURVEMpyYo1XQoqFSK1qawUr7lCGXJuUdPXp54ZZUyokkJxdHCQnEs0UgZujREiX+80BCi TK3voXRd/iDd58Qr5xe/pzTydVYstZaKs29jZciSC6b3GS4oU+roFFRqxdK1tNJs+GIl1ceJ TBhOTVDqNJuuXE/KhV+mP6p8XE6rgEpRW7oopV/7RNl2N/kbjF+j9HBppLw9rIHibm2tFK4x QFl8MTH5fZeVJW9XVwpbWSrOZToqX49tp7h1WqzEJP9a44ODyvc9ayme9jpFpUKxajdfiVAU RVGSlLt/fqV0qeah2GpVigoUy5Y/K3eN5qysUXkwr61ildwHUv45TJnbxl6pOO6Eok/cr4zy dVbeXB5lWnR/rvK6Zdp+oi33sXJUryiK8kg5NaenUtnNWrH1bKqM6NdAKT5oh5KQ6vMi93yq NPKyVbQqjVLqg4NKoqIoSsJmpV/RDsrCSNOrHi7rohT2X6/ES9MUL5Cki4sXKt/SxRPW0rPY ItpfX013W9nuQrzkU3lCCCFE/pERkxBCCBkxCSGEEFKYhBBCSGESIjt5Ecaaffp27pK0byEK eGGSdHFJF3/Rni19O78/T9K+hcifwiTp4pIuLoQQeV2YJF1c0sULDiO3ZjXHt1ZDyhTypl3A SJp5OODTYzGmQO4s0rcTt9C/aAtGjc9BirakfQtRMAuTpItLunjBoqAv9z47Frfl7JpHBBxZ QvNja9kbC2SRvm0qNDlM0Za0byEKZmGSdHFJFy9YNLiX8sPd1xdPLz/8ivjg4xpDZIwZc6ZZ pGinPreY8rwlSfsWokAWJkkXl3TxAleaNBpQm24A16BBrTZiNOtcXuYp2qnPLT5+3pKkfQtR UAuTpIun/H2SLv6fI2nfQhTIwgQ4NKNns7MsXOtG9x7lUl0skPbiBzQVGTX3a3zWdcbHyYfO 60sy+bfhlEs+H7ShlyNqXS0mnQnhuwYWqJMj/w2n5jJ5xRn+/qUTXlrTdIq25CgO6EFTqh3t bdcwsG5RHIrUYOBWb75YMYFXrbKZFTw9keoWKlRqNTbFGvJRcF1mLBpFRQ2gLsHAX76n4o5e lHNxpfKgw9Se8QuDSiZvjqTLLJ0fTKM+nXFPVeHUnn2ZMbMhZz+oQxGHItT98ByNZs2gr6c6 5XJ4tQ7X6oPZU2EaG6Y2w17aWL5RHsyjjZUKdbHB7Lg0g8YWKnTlx6a5gjPHLGtSv+R5oku/ RsWarfAJvUT5+lXRZfN5au++fD/Bi1Xti1Ok2qdEla2cbirPgkZvD0L7Y20cNekufhDiP06y 8sQLlW/p4kKIf9mISQghhMgncmZevFCaiuMI3CnbQQghIyYhhBBSmIQQQggpTEIIIaQwCSGE EFKYhBBCSGESQgghpDAJIYSQwiSEEEJIYRJCCCGFSQghhJDCJIQQQkhhEkIIIYVJCCGEkMIk hBBCCpMQQgghhUkIIYQUJiGEEEIKkxBCCClMQgghhBQmIYQQUpiEEEIIKUxCCCGEFCYhhBBS mIQQQggpTEIIIaQwCSGEEFKYhBBCSGESQgghpDAJIYSQwiSEEEJIYRJCCCGFSQghhJDCJIQQ QkhhEkIIIYVJCCGEkMIkhBBCCpMQQgghhUkIIYQUJiGEEEIKkxBCCClMQgghhBQmIYQQUpiE EEIIKUxCCCGEFCYhhBBSmIQQQggpTEIIIaQwCSGEEFKYhBBCSGESQgghpDAJIYSQwiSEEEJI YRJCCCHQnj17Fo1Gk+GPWq1GpVI99b+pfx5L/f+FEEKIZy5MACVKlECj0aDVatFqtWmK0+OC lPrncSFKXZykMAkhhMgNMpWXRjyXN33DiD5d6dSxAx0HzeNCkmyVfz39Ib7t1oH27dvTvssX bI9UcrZc5B4lgr8mD2bS7ghe3FZO4vzcQfSZeQLDf6F9589KEDJ/BAFLLqGXwpRDD4+yctEB bji045sV61n3U1/KaGSz/Ovp6vHB8vWs++VtymufYbnIvd1XyHpWXq9Jh1eckTmYfGrf+bMS lGr7OvY7lrM/IvvCaFZhUqL+ZOJbQ5j7ZPigELVzAt0G/sa5HI0ojNxdP5FZxw3PuDxvGe/f JTRBQV3Ek2IW+Xs0cXBqVzq0b286qun8EetDjdKhcvtgPPYvJnXvQKehi7jyUo2E9Rz5vjtd px7M5GjTSOiGj+mc3H46dPuWQ/qX8RuKI+iPPajqN6aMLu0I5vKioXR63D8e//zHRq+Gkz/S d+CvOdzn5sue06z2p3apT2O/c/yx+w7Z7d3yZ8RkDOfPmZNZcvQeiQBKDBe3zWLK8vOmjpbd 8vzacSXpTUN3tTqfj9Z01P9wBevXL2J4DZ1UkLz5dnkYdIjTrqUo/uAoh2/8m+Zo1RRpP4k1 Gzaw+tMm2L6sf0biWQKDdFSu5kNGExXaiu/w27oNbNiQ/LP6C1o6ybjqpWl/KjsqVy/B9cPH uJdNZcrdgV3SOX4d9DF/FB/BgnGpVlDtRtO3/Tm0eiE/HbhIqNUs1C3f4N03yqIzZ3leS17v DY9HKYHT6NZ+GuqinZkyyzSdZwg9zNJfFrEz+DaxWlf86nbi7bdb4Wdr6hjZLRcv2iNOHjqN U+2RtLr2LVuP3KJbieIyl12Qjrtvh3A5zpN2xXP4rRjD2DhuKEca/cT415xRkcS1paMYc/1N Fn70ChbJyw+V6UXx8+vYFRKDbZnWDB3dh+rJhU1/azdzZixi76VYbEs3pZGLEaxTjVlDj7Nu wVK2B10nSluECk168m6v+rhrQR84jd7zwimtuUGIoTJtGur5a+MpVLUH89X7jSmkBuXRJbbP /Z01B0MI19viVasj7w7uSDk71ZP1z2z9kq4uYeSoZVxPPpYa02kDoMaj02R+7FcWTTbrV3Co cCxeHMcbF7iSCO5WL3rElLxSqYchT1/El93yPKQpx4Bf1rF2eneKa0BXN4DlGzaknGPSh7Bs 4jesvuhOj6m/8/MHdXj4189MmPEXD4xmLBcFoC79TWCwBZWqVaZ69ZLcPnyEW/LdFKzC9OA+ ERZOOFvnRec3cOHodSoMm8Gi3z+lUdwW5m+9YZpSMt5g3fc/ccb7baYvWsi0t+w4c/xequkm A2f+3IOhwRCmzlvK/Kl9KHpyBv/bcvvJa5RED9pMnEJX5yNsudWASTPfwTtoJ0cijGB8wF8/ TGDJvaq8990Clv4+nnaqP/jml8PEKtmvn6ZET2as3cCa8a1wcW/PlLUb2LBhHT8nFyVz1q/A lCZHFxySIrgfbczHqbzkHfzqcemGc8Zwdv22kKt+/rzbyo/qbw2hGTv5aVXKVF6Wy18ww7k/ +fNmEs712tG8uCNuVTvQqoyaqKM7ORxhzHa56U/czNjOKfPjHfvOJtggO6P8EhccyN9Uopqf BW5VqlLsRiBHbktlepkYTv/C2x0f96EOWZxzy3DnhE+j9tQvao3OsRwNahQm9OZtkgBj6HGO 3ChOi851cbe2wLliZzrWsE51nKylas8AetQvgZOFFusiNXjtFXeunb1iOvUAqIsUp7ijO8U9 7SlSoiQuLl54OkbzIFLB+OAQ208483r/N6hSxAYLu+I07tIIu+OHOKvPfv2yl/36vWzMG+ip VRmfc1GZeS5G7UazoR9hurgBUNnj12ooH5m7HECJZOsXb/NjkN40p9nha356uzz5cdGcPiKC aKMKTydHUyVXO+LkqAZjJOGRSrbLcZWdygsuS5w6FERi2f6UtwJ1sapUcVtB4JG7dPYsKtN5 BYTaxRXnxBAi4hSwf3rPoq34DnMmtqPQM31hKmwc7J7sr7QaDUpSEgqgxEYRo3LE2enxL7bA ydkeVXzKaObOwUX8tnwvZ2494JHBiKKArkY8egU0gEqjQwto1Kb7QUGNRm3EaAQlIpwI/RUW D+vI4tSrpKtBVJwC9lmvnzmjwazWzyo3BqC5tP9VIh8QrXHG1UH9/IVJpbPGUm3EmOoIX0ky oLKyxjJnTQ/3DuMY8izLVU60+nI1rV5Ah9E5O2OvVoiOjMIIqI1RREYZQe2Eq5MK3cOsl5tq bxu+XtNG9j4vQvwZAoNiiIv8nrc6fP9kR6UNPMK9jh1xf9xHtFrUJKJPUiCjQ67slovnK0xF S+NrvYur141QMQe7PJUGrRqS9KYduQqIjX1o9n1QKnsnHDhr6rPWaiCRyIhYFOvHO9O/+OWH QBze/YzZ9b1xtFS4vnQUo0PI9jMUQOXkgrNFVTr+9CWvOWfQbswduKsUVBm83Oz1e572myv7 X4Wo69eJ8qpJSYvsKoU5LHwo4x3L3/uOcPtREvqoEHYeuIJ1qdK4p24/Sef49Z2OdJm4m4f/ og6jLdeUpp4aIg5t5s8bMdwPXs/2C0bsazajrrM62+XixUo4c4jj8ZUYPHfdkyu6Vk14Dccr gRwOS+nmagdvitvd4PjRuyRmsMfJbrl4ThblqVtNT3DQNXJ0zaTKnqIeNlw7cpCbjww8vL6D LYcjzN7fqwvXoG7xG+xYfYTQ+EQizqxj4/FHT3bqSlICiUYt1g52WGsNRF7Yyordt8xeR7Vr fZpXvs7a37Zz/n4c+rj7XD2ylh9m7yQnd4WoHJyxj7rE2Rtxaf42c9fvhbdfJYa/T1zBu25N CqtzozCpPWg1bAjVw5Yxtl83er43jSMuXfmoX7XUF678e+nK0GNcAB1L/sPigMh0GQUAACAA SURBVN4MnBKI1asD+GxYY1zUZizPjvEmK0Z1on0Hf344rgfDWX57pyPtOw1i3kWJnng+Dzh7 +Djx5RpQJ9WXYVH+Veo6XebwkfCUTq6rQJcBDYlZOpyuHTvyzm9n03bu7JbndYHdN5kuqe/j 6TiAX06b1sBw/Af8O7any4TdxMbtZVKX9nTsPYugl+o8pjXVXm+McnAP53N0cllHxS59qBu9 koBevQmYF06ZGkXNn2ZSe9Fu5CAq3JjD8Lf8GbUgijI1Cj/ZOapdGtPH35uz0wfRvWs/xi67 T4U6Jcy/pFntSpMR4+hos5f/jehN934f8L/tkVRuVS9H05Ka4s3p1tjIHx/1pHOHjrw79zxJ OVm/PGy/5rQ/4/2D7LlUjtZNsp8+V82bN08pVaqUZOUJIV48JYK/pozlYJ2v+aiJpD/8e+gJ mf8BP2mHMeWtUtneBiSFSQghRIEiJ0CEEEIUKFqAq1evyvOYhBBCFIzCVL58eXQ63ZMpvPTT eZ6enmb9IkWRy5SEEELk0ogpO7GxsWnOMaUfNT0+7ySEEEI8L6koQgghXubCpOfyypE0L+uO naUOrdYJ/3UJz/zhjzb3p4hGhcZzMDvj0y9N4uxXNbB0688WcwKflAhO/D6K9jWK42Jjha17 Rdp9tJxzsVlPMSZs6oOLZW0mn398Rb+Ry9PqY5luVGj6saDOlAsZXPuv59LyYTTxc8Naq0at duCtdNtFiQpm4ZjO1C7php2tM8WrtGTQrP3c1UsjxHCMseWtqfFVLt1XoQ9kdOlc/H0iY8Z/ +LGZJdadlhBr5lue7m/mSuLClDpYOvVmY4JseilMqUVv5POhv/Kg40quxSZiMESyqKPlM350 AoFbdvDAzgm7e9vZcvw59tBKFHvHNqfxh4coNXo9Z8MecG3rWIr/OYyA5eHP9ohmXV2mXjSg KEqqn0QOjynz9I170ev5dPAcHnRaw824JIzGaBan3i6xh5nQqhFDthfivWUnuRt+jV3TWnB3 Wj8mH5LKJAQksKGXI5Z1vyFEjib+83L0tI6k0KtcfWhNlVdq46Z7zqvw9CfYsv0eXj3H0Hj9 FLZtCcbQoMYzPSAq8dg3vPfdZV6ZdZpvu3maqm3VnszY7MKK4LyPeU26e4UrD62p0rBOBtvF wKn/vcek4Ip8FfQjfUub1seu+Ycs31ScjYlyNaN4WQ9ri/Henwm8J1tCvIgR08XvGuNoY4Nt pU84mhjFok52piv3nmMqz3B6C1uv2/NKq0G0rG/Fxa1buZDRkZISzfEf+1KvuCNW1i6UajyY eadSJ/ElcmjhIs5bNaf3G55p/iBV4VZ0a+6S6u7xh5yaO5jGpVywtnKkeN0+/Hg8+tlGVMlT CxYqFdoyYziSGMXC9lamKb/UU3mG4yxaGAwNetHDL22RtCzflTeqaqUV5jsjd3d/g38DX9xs rLAvWp7G/abx563ENAcUJz6tiGXhbkz81p/aXg5Y2bhRuvlwlpyLS3ewf5v9vwbQqU5pithZ YetWktpdPmbl+bgM2vN9jswZTttq3jjb2OLmW4c3PllDSLqXxp5ZyuiO1fF2ssbKzoNKbcew +lIezWHpDxLga0X5sccwZLa8VKrlCavoap0yxZ35VJ4Z/S1hI72d1KhUVnRYFE3i4TGU0Sb/ bqtW/Hovfe/Uc33jJ7SvXBR7KxsKV+jAV38946yIeLkLk9+oPUQ9esTDvydQ08KZXutiMRgM JGUylWf4+3Mq61RYZDosT+Li1q2E6OrQpH4RXmlaA/XpLWy79nSioRKxjmkrPPjir1tE3NjO +86bGNhmKBvvJzdF402OHbuLumRlKthn9VcohK8fQptBm3H7YCc3I26x5/MiLP9uA1HP1Ko1 lBlzmERFwXBuErUsnOm9Md405ZdqKs8Yepxj1xQ8K1fCTQZH+UNXl29C4jj+Scax/MZ/5jGg 83hC6s/k8J0oQoPX81WzcH6fe/Cp59cYw1czbZ0PXx24TcS1Pxhut4b+7T5gR3RKo0ncPZ3J J3wY+OtfXH4Qw72/l9JPvQT/liP4IzrtQda+j5vTdMxhSo1ex9mwCG4dXsDAwrtYF5jyyfpz M+jU6G02Og5l7YUHRF7fxujCG+jTaiTbIp99F5xpv9RVpn5tK64eD+J+Br/eePcEJ27ZUate BdOMhuUbrIhTUJJuMaupxfP1N8t2LIg0oijxrPd3wKLOFC4YkqfO47cyoHDaTqPEbmDqfAc+ /OMSYTd3E1B0P1/0m8g+Oe/03ytMuX/AeoNtfwRD5ca84qLBo2Fjyikn2LL9ztOJwGpv+kz+ gtd87LEuVJPB3wVQ595yfliZ/HTGpDDuhiWhcnbFOasdv/EWK35Yzr16HzBtYHXcrO0p0Xo8 X/fyzHgj6AP50E+b9uIHrQ8j9ubsnJAxLJQwoxpnN2e5BLKAMJw+xNGHxWnRvQW+jpbYuPnR wH8Siz9tzFO7WXUJ+k/5jBbedlgXrsV7346k+s2FzFyXcpRu0WoKm34cRutKHthZ6LAtVocB AV3xDt3JjuCU9mK88htjf7hA9c+XMK1HdTxsLbByK0PLETMZ3ST5k5UHrPvyS/5yHsjPP/Wn RhFrrFwr4//deNpELGTa8rx4KqkNtepVgb+P8ncGFxolnDxKsKoa9Wta5aDh57C/mUvlR/+v PqBhMRusCtVh6HuvYfvPPvZdlhNTUpiyoa3yJcF6hcTA0ZTO4JBVubudLceMlHj1VUpoQFO2 Ma8W1RO4ZcfTR2wWValbLWVUpvasSc2iek4ePZVu2kGVdeCjPpgjQQa8atWi6JO/2ooadatm HCiY0cUPhmtMf1WXw62hPFm/x1MRe4Z5o1WpUKnUuPbbjBzs5S9NyXL4aS4wb8zH/LLlONei sjjYsKpG3aop5UpdvBY13eMJOnompf3pb7J9ch+alC+Ko5UWtVqFRb1vuWSIJebhk4cnELl/ F8cNlWjT2ifz5Gv9cXbuicKtWVvqporuV9lXo1ZpAycOB2PI9X6ppmidunhHneDYlSSI38bA ohaUGLmPRAxcOBbEo1L1qFMoB0P+nPY3c+uSZTkqpVp5C9dCOBJNRJQ8jVgK03NRuL9zC4cS XHilcWXT1ICuOk1ecSRu32Z2RaVriFYO2Kc+jFXZ42AHsdHRpkuB1W4UcVOjRNwnIqtZDkM0 0XEq7Bzs0/zRVg4OWOThFJvarQhuaiORDx4/H0ZH4xk3MCQe4kM/jbTAF1GY/IYwf8kY6kYu Y1T7WpR0ccKzTi9+OBz51LkKlbUD9qn3pCo77O0gKjI6+fuM59CnrenwzSVqTviDC/fjSTIq 6I+Po4JGwaiktPuI+w9IUjvjmtWzUAz3CY8ycOfnFmlvWdD68WFgAg+josiL6zi1lepT2+YC R4NiSDy+jT0WxVD+3MopfSRBxy7jULseZXNyOjSv+ptWR/rri1QoSPCMFKbnFM3uLXt5aLzH 76/bJHc8ezotfoAxZg+b96Y9jarERxOTenpBiSEmFuydHE1HnRpvqlcvgvHK35yOyeJjdY44 2SrERsekmQqJj47O04dmqYvUoIa3ilunz2ZdOEU+ssS301esPnaTqKhbHF89jlphKwh4ayLp r95X4qKJSf1vSqyp/T1+DLb+BKtWXcS91yS+6lIFd1stKiAp7C7hxrS7TydXZzTGB4Tfz+Lo XuuCq6MFlT4LQp/mVgXTT9zq7tjmxSaxqkm9qkmcPBrEyW17+D975x1e8/k+4PucrJPkZMeI vam9EhFUEKv2+Nptv3zb/lrULlrVao2iaHUYHdqqvapFlNq0hMQsitijQfY+OSfn/f0h5IiE JBIJnvu6crmuI/mcz3je93nX5709X/uE/jY72HrqMIeOQX2/BjmzVRdQeRMkMeWOhL0E7oyj yH83kmBZ6GJW09s5iu2B+7nvXduUoxw4kj7YZb4eQvANW+p510obErClyYA+VEzazpJ11+83 O97ewqrtkXdawda18alnw7XgEP6990vJhBw4Sr6+SWTTkH79a2Deu5y1V2S4odAVAMcS1Os6 jjlv+6C9fp5LGV/0Tj7CgaPpLSPzlWBCwuyo510zLf4MGAxgZ6+zKEyJ7N+0g3B1f2Jya9qK BlYn2BR4MesXf20a0OpFPed37+HqkwwXbTEa+Zbn5sE1/PiHljadutC5dTy/f7ueQ5FVaOzj kTM3Uo7LmwYbW1tISSFFwlLKZX4c9GGr8gwHAtkW4ciL7ZrgYPkfTs1p10THza2BBFtGpvky P737EVsvJ5AcfphvxswmqHhfhvX0uldQ7Hzf5avBJdk1thdjVx/jZmIS4cdXMrzDK/x4Ke0E tCX5z9u9KfLXp4z57igRyfFc+v1D3vv5Gvlb/q2pO+pLRlUJYkLv0aw8GkaSMZlbxw9wUrpQ BYJh0xjavzWXDcEXiEhKISY0kHkrjqHza4Vvxu6I+SKLxk9m29UEksNDWPDO5wSXGsDQbkXu xJ91Pdq08uDCitn8dDwSQ/ItQn4YwrCVEegy1OTaCoOYPKQyhyf3Y+TyI4QlmTBEnWfn/JHM 2pUW9BoPuk6cgM+JSfQduZTg6/GkJN4m9NBG5o3syqj18flSLsGa6n4+6A//wOLoAF6qYU+9 Dq24/uOPnHD1oXGVHA4757i8WVOt1gtoz2xi1f5bGKRoSGJ6chgJCdzKv7aNadPcJUODyYOW 7byxvrqFwOPp07sat26M6nGN95t64VI6gFkRHflm41w6uFuUeo07refsYtuU+pye2pGqHq6U bT2ZCy3mMquXZ1oC0+DR+Ss2LWjPzRktKOVaghc/DKPPqC64ZNYUzGxVnsaKoq9vyXGLTuPc jKnbdvJp41BmdH4Bd0cXKnVcSHybCcwf8yK2EodPdiCv5VBGVTvLwjdbU9XDiRJ+ozn4wgf8 tmwwFTKUCK1nd0Z2Os/4xsVxKd2Gz2O6smjjHNreDRqNK53mrGVGkwt82MQL5yJ1GbiuKO/P f4sKGetyjQv+M3ewbZo356Z3opq7M14N+jH/VgA9fNOjwK7WSDbs/hr/61/Qq3ZRnIvW5KWh 33G26ghGtNXn233RNWhMPVLwbPMSda3B1qcDAS4pWDXwo/6900thy+tFsdJo0FiVYsiOFJLX 98dJo0GjsaHau4fSFmfksLyhpdz/PmNWd8XPncrgaKXN4j0m4XlAc/DgQfUo7UV2dhcX7YWQ +6Z8MO/VbsaW/iEczOLdowI4KQ5PrEvjb/3YcOUb2kjrQRCe1R6TIAiCIEhiEgRBEJ4isvVm gl6vlzslPHdFo/7kvzFMljshCE+aR84xOTs73ze/lNkcE3DvX0EQBEF4HGQoTxAEQZDEJAiC IAh5lJhErS5q9Xwgr9Xq2SUXanAK+fmJulx4/hKTqNVFrS48pYi6XHh6ELV6HiBq9ae1WVbI 1eCiLhekx5R1F1/U6lkPfYhavXCQ+s90fOzL0aJLE0rpHSja4P+YNX0AdTwd0JcJYNoBi8Gw bKnB7w5t9eWrNY+p8hZ1uSDkdWKyErV6FvdF1OqFLTvdwuS3kBPHZlH/3LdMWF+VxefPMq/h UT79bDP3LOfZUoOnRU1eqLxFXS4IeZ2Y8gFRqwv5gVVp/Pyr4VbWD59ytnj5+lPdxQvvhuUw hJ7lam7mVvJE5S3qckEo8MQkavX7W7Z3z+/uUImo1fMJjQN6Rw1o7HG01+Lo6IAGDToHe0iI IzEXPeO8UXmLulwQCnmPSdTqolbPt8x0T3Gi0YBGa7EridlMam6GbLOp8jb+NZpK1um9a5vq 7xFs0XISdbkgFOrEJGp14dnDxm82oab03rXx1DQaWiYaUZcLQiFOTKJWF57LkibqckEo0MQk avX7ahBRqwuIulwQCm2PSdTqolYvaLKrBs97RF0uCNmsM0V7IRQ4hVKtLgjCc9JjEgRBEARJ TIIgCIIkJkEQBEHIHTLHJAiCIEiPSRAEQRAkMQmCIAiSmNJJZMsbJbHSWFNp1L5MNi01sv+d ytiVHcbubG3DYOJW0CLG9/WnRil3HO3scHQvQ60WfRn3zW6uPWxXVHWTb9rqsO+8mGgAzFz7 umUWKnUNVvep3eM5snAgfuXdsbfWYlX8DbampJ/T7eDFTBjQitplPXHS2aJzKkL5uq3oO/pL As/GidMmy8eZx2p14wHGVikAVfvzhqjfhac6McVsZcn6m9ja23BpzVL2Jj3OwRI4+mVXGjQf zx6Pfnyx9RQ3Y2O4fnQtkwJM/DqqM+M25yJybeox+URGlboiNXwRL6W9/Gi++D0jRqxDP3wf tw1mUsO+oY3t3XPqRv2mo9nh3IOZG45yNTqOiIv7WTq+OabN79F90LdclB2JBCGrlCXqd+Ee T0CfqojY9DMbo6vw1uSmrHn/F5Zsm0lAJ6fcpaU9E+kzegfF393NHx9543j3P8p402PCKgJa fc7S5PxZiJF6JZSL5pIMaFoFvcVboPG7J9B79A5KTNjNtg8bpp+TrhJ+fT7Ar1M3vv3qFOKq FZ6tZq2o34UC6jFFr/svpd18+PhYho1a1E1+7OSKruFUTj6shaPCWL9kKwmVu9N/SD+6lIxg w5LNWe60bbq6ifc71KCo3gGXco159fO/0h1N6ja/zPmeULeeTBxtkZTuocHFdySD/W3vtcJC 146lQ41i6B1cKdt4IAtzpVI3sGmgB3b+X3E15TSfeNug0VhTfuQ+jOoW6+b8wHn3Xkwc1TCT cwIca/H6uN6UkRm9QoKZsJ0zGdCkIp4OOpxKVMd/4Gy2X7PcbMrE4Yk1sSvamymzBuBT2hmd gydVAoax7HSGLr/hBvu+G023RlUoptfh6FkBnx7vsvqfTIYGVAQHvxlGx3plcHNwxLNiI3pO WMfZDL8af3I5Y7vWp4yrPTq9F7U6jmNtaD6NYYn6XXjaEpNrm160dz3H2lWH79u12Hx9Pct2 pdCwb2+qWUFq6Cwa2z6415j5ylqW7EqmSvce1NE35j9dShG7eQm/3X4wlJTxJF9O+JVyH+3g cvgV9kypSciEDvSce/rOdxsOsn1fPHaNWtPskR0uReTm4bTrvxhjv2X8fTOME0t6cWP2h2wI z+mYmh0dfoggecdgStpW571gI0qZuPhZU2wMh9jxZzx2jVrSRC8BVSiw8WXm2SRCstjeyHz9 R17r/jFn/b4i6N8Ybh7/lamtwln0w18P7INoDl/L7PXlmPrnDaIubWaYfh2DOo3hj9j0+E3Z OZfph8vxxne7OR8Zx61jyxmoXcaANsPZHGsZkrHsfTeAluOCqDR2PaduR3EtaDFvFN3B+gPp 32w8/SXdmv+PDS5D+eVMJNGXtzC26G+82m4EW6JzXwVnubmyqN+FwsbBgwfVkSNH1IkTJ9Sp U6fU2bNn1YULF9Tly5fVtWvXVGzsTbV+YAllU3aw2haTrFJSUpTRaFDn5jRTOnt/9eUlkzKb zcp07lPla2Otqo4/qIzqLiZ1ZkYjZWtdS31w5M6nhj0jVAUrBxUw/6pKvfd7KeqvMZWUlVUp 9drmWJVOgto1rIKy8fqfCoxXyvzvAtXaTqtKvLlNGdQjSA1Vc5rqlGPr+epKqsXH5z9TzXQa pev0k4q684m6+lULZXtHNfvAT/rvKWXYMViVtK2u3gtOv0LzvwtUgJ1WlXgrG+ckZI7xkHr3 BZ2qP+WkMj2BrzP8/poqanP/c8zkpFTI+zWUtVUlNWpf+pNNPfepamzrpDr/dEuZH/LXKfvH qEq25dXIvSkWITlHNbW3V80+C836Os0RalVvD2VTabjanWjxcdQq1cvdUbVecM2i3OTwNh/9 QNWyRtk0mqHO3HcCqery3BeVrtjrakvyg3+X+Nsryl0XoBbcyHDFqdfU1y1tla7rUhX3QPm7 or5uqVN2zeeqS/dOOEltH1JGWdl4q09OZ7wDyerXAc7K9oFzS69L/pnuo2ys66hJx9J/IX5d X+ViW19NOWmScvQMkY3BJXua9e5MiRvrWb43MW2yJZTVK4KwerEf3UvfOYRVpTHsTzHyzyfe 6XMpppMsXxaCuXp3ute886lto//QtZyBvUtXcylDx0Xj2JR293WFHPBt2xyX8L/Ye9qU1g6D bIlr4oLYc9hMrdatLNTToC3bmjbVM5ntyWLxQ9Jvr+Cam5m1yB/poLNY4WfXgq+uyuqHwoBV hReobHWGH8e9y7eBIVyKechSUF09fOvaWsSPNw2LJ3Pk0Mn0kQHjVbZOf5UW1UvgorNGq9Vg 23gWoaZ44hLujUMTvW8HIaZadGhfLuuNao0hbNsVg2erjvjaW5QNp3p4VzFxOOh4rnc/t67z EceNipQDY7nfsiHqd+EpG8oDsGvUi+7lbrNhxU7igNTTq1h5xJ6A/l0o/pBYNYYsZflJqNG9 OzXv5gJbb/7TrQKmoKUsz7BkVOPkjluGqNW6ueNCFJFRZjSupSilh+hrN0h4xIiGOTaSaJMG Nw+3+y9S64aHW95N9mhcS1FSD9E3/iXB8nP3/7IpWaGUiX+m+zxWYRTyODFVHsJPy8bhG72C UZ29qeDuSqlGL/NFUPQDcxUae2ecLB+eRo+THmKiY9O8R8nsn9ieLjNDaTh5M2cikkk1K4wh 71PDSmFW6UNbURGRpGrd8HB/SPyZIgiPMfHvwtb3v8JgXZl3DhhIiInJF7GlqN+Fpy4xYVOf 3j0rExW4km3RRo6tXMUp53b07/Aw62Yyfy5dRajJxLFJdbC+V8hsaTzrHKnGYyxfduy+1p+K iyQ6Q3PQHBVJDK64u2nBzoeWTfUYgrax9xEvTmid3XG1VkRFRt8vTjNHERGVh60rOx9aNtFj CNrOn/ESUE8HdlTsNpW1wVeJiblGyNr38b69itH9p7A/Q62vkmKJM943yUFcPDg56+/EvvEw a9aco/jLnzC1Rx2KO1qjAVJvh3H/VKYGVw83rMyRhEc8JP6s3fFwsaXWB0cwZui9K6VIWtsn 8wU2j4uo34WnLjFhTY2evagVv4Vlv25h+epQ3Dv0pY3rQ5o+CTtZsuYqTj2WEW7OUMDMYSzq oOPMymUctJhtVgl/8vt9GSeJoK17iPHwo+kL1qApQveRg6gYtYapn4WQ+OAAGjEHPmP+rhRw 8qFZPS0n/thuoZ4G85Xt/HEqD1VwmiJ0HzmQChGrmTr3CEkSU09XAXAsQb2u45jztg/a6+e5 lJyxfXWEA0dTLOInmJAwO+p510zrBRswGMDOXmdRmBLZv2kH4er+xOTWtBUNrE6wKfBi1i/+ 2jSg1Yt6zu/ewxMd+RX1u/D0JSawqtqT3g2S2fLB2yy9Uowu/VphORuUcVVezJYl/HrLhXZ9 2uORMaI1RenUJwCHi6tYYvG2rbZoJW79OIYfDt8i2RDJieUjGPpdOL5jRtE6rZno2HwKKz71 5/q0l2g7/Dt2/HOLxBQDMVeCWTetN76tJ7EvWoG2Iq++O4Ciuybx2sydXElIIe7iFqa8H4RT 9bx9o0jvP5WVnzbn6uR2BAxdwNYT14k1pGJKiuBC0C8s3X5ZdiAoRBg2jaH9W3PZEHyBiKQU YkIDmbfiGDq/Vvhm7I6YL7Jo/GS2XU0gOTyEBe98TnCpAQztVuRORW1djzatPLiwYjY/HY/E kHyLkB+GMGxlBLoMca+tMIjJQypzeHI/Ri4/QliSCUPUeXbOH8msXWnVscaDrhMn4HNiEn1H LiX4ejwpibcJPbSReSO7Mmp97rvlWa7KS2t8ivpdeOoSE9py9OjTGE3YdSJLdqNvM/usf1eF s3HJJqLcO9CnrWumrSOPDn1o63yDdUu233sHQmNTk7cnv8SZ95pT2r0kTcYdpfZHG1k7sobF HI0j9Yb/SsjOaTQOW8yQllXw1DvhVbc7H26zpsucDcxob5f2HV/y+8/90CzuRTUPT6r3WYrH 8A/p5JnJZRuPMLGW9YPbEmVr0cKdczq8ZwbNo1Yx+qXaeDnpcPCsRLNXPyW41Oss/P0HBpWW F5kKxUBey6GMqnaWhW+2pqqHEyX8RnPwhQ/4bdlgKmR4RFrP7ozsdJ7xjYvjUroNn8d0ZdHG ObS96y/XuNJpzlpmNLnAh028cC5Sl4HrivL+/LeokLEu17jgP3MH26Z5c256J6q5O+PVoB/z bwXQwzd9gYVdrZFs2P01/te/oFftojgXrclLQ7/jbNURjGibf+8kiPpdKCyI9kIoeAqlWt3E 4Yl1afytHxuu3N16ShCEwtVjEgRBEARJTIIgCMLzhuwrKghZFI36k//GMFnuhCA8aWSOSRAE QShUyFCeIAiCIIlJEARBEAo4MYlaXdTqD3uceaxWzy65UINTyM9P1OWCJKbsImp1UasLBYyo y4WnB1Gr56RNKWr1Z6xZVsjV4KIuF6THlDmiVr9zHFGrF25S/5mOj305WnRpQim9A0Ub/B+z pg+gjqcD+jIBTDtgMRiWLTX43aGtvny15jFV3qIuF4S8TUyiVgdRqz8t2ekWJr+FnDg2i/rn vmXC+qosPn+WeQ2P8ulnm7lnOc+WGjwtivJC5S3qckHI28SEvgW9Ohbh0rpVBN0LTjOX163g T9WYvv+p8JC9zVIJXbmEv4wv0KNHLayxw7dnV8okbmfJuusP7DJsvnWWIq/O5rWGxbDXeVJn wFy+fs2dP2fOZlsCqOhrXI8H15IlcHzUaJ35Aj9N+4mwFyfx/butKOekw7liez6c6kNsZtqL LDZxTV8kkUX1kJNzEvIXq9L4+VfDrawfPuVs8fL1p7qLF94Ny2EIPcvV3MytaCozaOoYmpV0 QFekEUMHt8Xx+l72ns/JwRzwblwHjh3iWCZOB8PRQxzX1MOvoS77hzRfY9UXK7nVeAyz36iP p70T5dt/zLSXSz3exHGeXK8g5HdiErW6qNWfFjQO6B01oLHH0V6Lo6MDGjToHOwhIY7EXIxH 5Y3KW9TlgpDHiUnU6g8tyKJWL0yZKa3NokGjAY3WYlcSs5nU3EyUZFPl0nYaXgAAIABJREFU bfxrNJWs0xsiNtXfI9iiYy7qckHI48QkavWHZW1Rqwtg4zebUFN6T9t4ahoNLRONqMsFIY8T k6jVH9JIF7W6kJ2SJupyQcjjxCRq9YchanUhO407UZcLQh4nJlGrPwxRqz89ZFcNnveIulwQ sjkQJdoLocAplGp1QRAKf49JEARBECQxCYIgCJKYBEEQBKEAkTkmQRAEQXpMgiAIgiCJSRAE QXgWE5OR86tHEFCtOHo7G6ytXRmwPvf74SduGkQxKw1Wpd5iW3JujxLN4s7294YVtVprdK6l qN32Lebtz8ojY2DToOq8+cdD3oFXURxeNIrODcri7qDDsXhNOo1fyen4HL73kbKDwSWt0Gi0 aK1s0RepiHenoXyx8zpZWuQNG3jF1QqPgZsy0dCbOT/bLwsVvC2NZpzJ8cu8pmMfUtsmc7V8 brXjKuY4P4/rjk8FT/SObpSt04Y3v95HWGYXnddqdeMBxlYpAFX784ao34VCkZhiN/Dh0O+I 7LqaS/EpmEzRLOlql8uvNnAg8A8i9a7ob20lMMT4WBdiVX4k+1IUZrOBqDMbeafEDka2683X obmomlQMe94LwP+d/VQa+yunbkdy6ff3KLv9bUavzI00TYNjnzUkpsRw5dBy3ql3jpntG9Fn 8aXcV5w2vnx6LuNu6CkEjauay/eA7AhY8C/mjLur/9KPHGum4oOY3K45Q7YWYfCKo4SFX2LH 7NaEzR7I9P1GKXVCpvWBqN+FXCWm1JsXuZhgT52mPnjaPOZiB+NhArfeonS/t+nheY0tgcfz 6I17K+yL1aXfmFeombSPNZtvpG3Rksq5eX1o++ZX7L52t8mVzJXtc3mtTX++vZi+u0NK8EwG zzlP0xmrmdW7LsUdHShStx9fblrMq2Vz//qnxsoe93I+9Pp4LT8MsuG3Me/xS+Sz9ua9iROf D+aT4zWZtHIe//Uphd7ehYoB77By41SaOssimWen9rijfs9V40UQHi8xpXJujj8uDg441prA oZQYlnTT31m59xhDeaa/A/n9shNN271JGz8d537/nTN52FJSRgMpCtS9/fqtqDz4R77rZ8Ov w7vz/rbrbB7fg9G/6xn44yJeL3/3VqSw/+cl/KML4JWe90vXNEXb0TvAncevWvU07/kSxSM3 smJr7DOWl0JY8vNxaPIyfSvfn8TtqveiZ13rQnCSZsJ2zmRAk4p4OuhwKlEd/4Gz2X4t5b4E e3hiTeyK9mbKrAH4lHZG5+BJlYBhLDudYateww32fTeabo2qUEyvw9GzAj493mX1P5ls6asi OPjNMDrWK4ObgyOeFRvRc8I6zmb41fiTyxnbtT5lXO3R6b2o1XEca0PzaQxL1O/C05eYrKg8 ahcxiYkkHJtMQ1s3Xl4fj8lkIjWLoby7cxa2WXbLUzn3+++ctWlEC79iNG3ZAO3fgWy5lBc6 ilQS/z3E958s5oxLS/p3zJBcNHdcPXcqCfXgMnfzVYKDw9BWqE0Np/y78daVqlHRKom/j57J t73Zsv888u545pshBF9SlKpdC8+C6hzZ+DLzbBIhWWxvZL7+I691/5izfl8R9G8MN4//ytRW 4Sz64a8Hdt42h69l9vpyTP3zBlGXNjNMv45BncbwR2x6VZiycy7TD5fjje92cz4yjlvHljNQ u4wBbYaz2bLdoWLZ+24ALccFUWnsek7djuJa0GLeKLqD9QfSv9l4+ku6Nf8fG1yG8suZSKIv b2Fs0d94td0ItkSrvH9uon4XnuahvLxrsF5hy+bjUNufpu5WeDXz5wV1mMCt/5Lb1JR68TOa 2mrQaKxxLNGIt3eWYMTSn3i9gjY9Gc57lUFLDHT6bB1TAkrSfvpaPm0Ty6L/DuK7u0N5qbcJ u52Kxs0Dt3ysWLXOrjhrzUSGRz54zRobbGw02NjYZN07Mx7gncoZNp21LsfwPbmdwzGw7U0v tJbHs6nKuIM5S5vm2ze5bdbi5ulWaJd8mv7ez6GEsrTu05qKLnY4eFamyYBPWDrRnweqWW15 Bs34gNZl9NgX9WbwrBHUv/ozX61Pb6XbtpvBxnlv076WF3pbGxxLNuK10b0oc3MbfxxPfx7m C9/z3hdnqP/hMmb3rY+Xoy06z6q0Gf4VY1ukfbOKZP1HH7Hb7Q0WLhhEg2L26DxqM2DOx3SI +pnZK2+Q9y5ZUb8Lz0Fisq7zEceNipQDY8lsN38VtpXAYDPlX3yR8lZgVc2fF0sYORD4R6Yt tuxwd/GDUiYSb51g1SArvu/Zjgn74iyG8laydeHb+JdO6+Vp7CkbMILvty7ltfIZb4WGfG3w a+62KzP7Pydcna1wdnXO+hwyW/xgusTcF21y/DzSmq4PLn4wnmGGj3UOj6fuv0CM7Hq7TJoo UpvFSsMni1WFF6hsdYYfx73Lt4EhXIp5SDLX1cO3bnq60pb1pmHxZI4cOpne0zVeZev0V2lR vQQuOmu0Wg22jWcRaoon7p5qWRG9bwchplp0aF8u6wUqxhC27YrBs1VHfO0tQ6Ie3lVMHA7K /Vxs1s9N1O/Cc99jUkRsC2S/wZ2m/rXvDA3Y1KdFUxeS9m5iR0yG+H6EsjqzoUf7IjXoOmUO b5Q6wRefrOFmTpKd1pNinlpUVARR+ThwbY6NJtasxd3D/cGHoHW5k5hcnJ+6F820nsXw1JqJ joxKa9nb4P/lFUwp+3mncuHYN9yq8hB+WjYO3+gVjOrsTQV3V0o1epkvgqIfaCho7J1xsqxJ NXqc9BATHZt2fcnsn9ieLjNDaTh5M2cikkk1K4wh71PDSmFW6XEfFRFJqtYND/eHPFVTBOEx Jv5d2Pr+VwKsK/POAQMJMTHkx7pGUb8Lz3liimVn4B4SzLdY9JJDWsFzotvSSMxxu9i05/5p 1Ecqq7PuQlG5vBWG0H+4nPpg76DDolMsaJ3J+LhVGerXL4b5wjH+jsvH4aRz/3A+1Z6adavw wOVY1WTikUSCn0IFhLZYAxqU0XDt71P5mtgfDzsqdpvK2uCrxMRcI2Tt+3jfXsXo/lPIuJpd JcUSZ/mZiicuHpyc9Xf6hMbDrFlzjuIvf8LUHnUo7miNBki9HUa4+f7q09XDDStzJOERD2nd W7vj4WJLrQ+OYMywdF8pRdLaPjjmxy0R9bvwXCemhL0E7oyjyH83kmBZ6GJW09s5iu2B+0nO i+8x3+TGTTNaj6J45OgqbWkyoA8Vk7azZN31+wqVur2FVdsj82AFUDx71gQS5vYSfdq6PFsR ZdOQfv1rYN67nLVXCv/witaxBPW6jmPO2z5or5/nUsbgSz7CgaPpEy/mK8GEhNlRz7tm2pCU AYMB7Ox1FoUpkf2bdhCu7k9Mbk1b0cDqBJsCL2b9/ppNA1q9qOf87j1cfZK3T9TvwrOemB62 astwIJBtEY682K4JDpb/4dScdk103NwaSPBjRaYZQ1Qo2+eMY/5xZwIG9aB8Dq/Szvddvhpc kl1jezF29TFuJiYRfnwlwzu8wo+XUnN0vfe1vs0Goi8Hs+bDngxcZKDDzGl0d8+kuD9054ec o24sIECnwbrCKP405u/zBWvqjvqSUVWCmNB7NCuPhpFkTObW8QOcLCRdKMOmMbR/ay4bgi8Q kZRCTGgg81YcQ+fXCt+M3RHzRRaNn8y2qwkkh4ew4J3PCS41gKHditypqK3r0aaVBxdWzOan 45EYkm8R8sMQhq2MQJfh0WorDGLykMocntyPkcuPEJZkwhB1np3zRzJrV1rQazzoOnECPicm 0XfkUoKvx5OSeJvQQxuZN7Iro9bH59tzE/W78Jz2mIyEBG7lX9vGtGmeoaeg8aBlO2+sr24h 8HjOp3fvrsrTam1wKu3H/62zo/+iHSz/X7mcX6TGndZzdrFtSn1OT+1IVQ9XyraezIUWc5nV yzMXiyIUCSt64GCtp0SD/zA9uAKjNwaxamCF3A/VZbYqT2NF0de3PNDiVMp8Zwze2vqJDA1q nJsxddtOPm0cyozOL+Du6EKljguJbzOB+WNexLagB/JaDmVUtbMsfLM1VT2cKOE3moMvfMBv ywZTIUOwaD27M7LTecY3Lo5L6TZ8HtOVRRvn0Pauv1zjSqc5a5nR5AIfNvHCuUhdBq4ryvvz 36JCxputccF/5g62TfPm3PROVHN3xqtBP+bfCqCHb/pdsas1kg27v8b/+hf0ql0U56I1eWno d5ytOoIRbfPvVVZRvwuFBdFePAek7BhMhdbf4jRmH0dnNMKusJ1goVSrmzg8sS6Nv/Vjw5Vv aGMrcSQIz2iPSXjypHL2zwPccmzFyKHehS8pCYIgSGJ6zlDhHPjrLCX6j6F/aXncgiAUfqzl FjzjaIrx2uZ4XpM7keOiUX/y3xgmy50QhCdebckckyAIglCYkLEdQRAEQRKTIAiCIORRYhK1 uqjVs0eBqtWzSy7U4BTy8xN1ufD8JSZRq4taPTuIWr0QIupy4RlNTKJWF7V6NvpfT49avbCr wUVdLkhiyrqLL2r1tMQiavVsPNiCUaun/jMdH/tytOjShFJ6B4o2+D9mTR9AHU8H9GUCmHbA YjAsW2rwu0NbfflqzWOqvEVdLgh5nZhErZ4fiFo9P7LTLUx+CzlxbBb1z33LhPVVWXz+LPMa HuXTzzZzrwmQLTV4Wojkhcpb1OWCkH9DeXmGqNVFrZ4fWJXGz78abmX98Clni5evP9VdvPBu WA5D6Fmu5iYp54nKW9TlglDgiUnU6tmpAO62ezP7P1Gr5+6eOqB31IDGHkd7LY6ODmjQoHOw h4Q4EnMRW3mj8hZ1uSAU8h6TqNVB1Or5le01d//VgEZrsSuJ2Uxqbp5nNlXej4pTUZcLQqFO TKJWB1GrP2s8Mk5FXS4IhTgxiVodUas/jyVN1OWCUKCJSdTqmSNq9ee5KS/qckEopD0mUauL Wr2g1erZVYPnPaIuF4Rs1iGivXj2EbW6IAjSYxIKEaJWFwRBEpNQmBC1uiAITxmiVn/WEbW6 IAhPW7Ulc0yCIAhCYULGdgRBEARJTIIgCIJQwIkpkS1vlMRKY02lUfty8NKomWtft7xPI661 ssXRswI+3cez4lRCpn9zaW4r/Gefz+JFQxO3ghYxvq8/NUq542hnh6N7GWq16Mu4b3ZzzZDN c9FqsbZzwrNsTZp2fZOpKw4T/sDLpmkbmNr3Yo0h62uy/LHyHERgSvbvx70fqyL87/dHvZls 4nbwYiYMaEXtsp446WzRORWhfN1W9B39JYFn4wrGu5PXanXjAcZWKQBV+/OGqN+FpzoxxWxl yfqb2NrbcGnNUvYm5fDvbeox+cSdnbTNpjiu7ptLy5sLebn1m6wLz0lVmsDRL7vSoPl49nj0 44utp7gZG8P1o2uZFGDi11GdGbfZkL1zMZsxxFznxNaFDPONY9WbvtRsO4OgWJXja7L8SQ1f xEu2ufjb1Nt83872EdfejfpNR7PDuQczNxzlanQcERf3s3R8c0yb36P7oG+5KLsICQWCqN+F J5qYFBGbfmZjdBXe+vBlSvz7C0u2PcbuqBo73Kt1YtKE7riF/ca6P+8kkvgd42nXfQIrjkfd U6lH/b2KiT3bMfaPO4q4hD0T6TN6B8XHbeKPr96gVfXi6O10uJbxpseEVQRtm0QT1+wv4rDS OeNVtQm9xi9h36ZRFP/zffqO305cIXzQ8bsn0Hv0Dkq8u5lt8wbTrnYpXHV2OHpWwq/PB6w+ 9BdfdiopyzSFHNQeon4XCigxRa/7L6XdfPj4WIaNWtRNfuzkiq7hVE4+rIWjwli/ZCsJlbvT f0g/upSMYMOSzY+/87QGNBorrKzuJBJ9y2msnOLNpbkv88qCvzn17SBennOe+h+tYHprZ1C3 +WXO94S69WTiaG8cMzmgi+9IBvvb5upknPzG8l5nZy4v/ZpfIwrZNi/qFuvm/MB5915MHNUw k2sHHGvx+rjelHkuZh3NhO2cyYAmFfF00OFUojr+A2ez/ZrlUKiJwxNrYle0N1NmDcCntDM6 B0+qBAxj2ekMXX7DDfZ9N5pujapQTK+7M9Tc411W/5PJ0ICK4OA3w+hYrwxuDo54VmxEzwnr OJvhV+NPLmds1/qUcbVHp/eiVsdxrA3NpzEsUb8LT1ticm3Ti/au51i76vB9uxabr69n2a4U GvbtTTUrSA2dRWPbB/caM19Zy5JdyVTp3oM6+sb8p0spYjcv4bfbuQwllULUuUCmfPILMRX6 MaCZRSK5t3xdocigUTccZPu+eOwataZZfijTNW40bVEPm/iD/HXMmCeHzOqe5vjvDIfY8Wc8 do1a0uR5aNra+DLzbBIhWWxvZL7+I691/5izfl8R9G8MN4//ytRW4Sz64a8H9hk0h69l9vpy TP3zBlGXNjNMv45Bncbwh8WQbcrOuUw/XI43vtvN+cg4bh1bzkDtMga0Gc7mWMvYjWXvuwG0 HBdEpbHrOXU7imtBi3mj6A7WH0j/ZuPpL+nW/H9scBnKL2ciib68hbFFf+PVdiPYEp37KjjL zXdF/S48dUN5+hb06liES+tWEWQxgX953Qr+VI3p+5+HbUSaSujKJfxlfIEePWphjR2+PbtS JvFBpcTDW3RHmFgrbcNSrR3uVToy66IvU5d9Quu0HSvjd7xH7/eCKPP2Tyx+sxY1Xl/E4hHl CZ7Ym3F/xKKir3E9HlxLlsAxX1650uDhVRw7Fcm/YemlxNrGGmxsHhwis7wmix/7zouJzsn9 SPuxazqHC1nc0Py/9qcL09/7OZRQltZ9WlPRxQ4Hz8o0GfAJSyf6P7jBrLY8g2Z8QOsyeuyL ejN41gjqX/2Zr9ant9Jt281g47y3aV/LC72tDY4lG/Ha6F6UubmNP46nN1LMF77nvS/OUP/D ZczuWx8vR1t0nlVpM/wrxrZI+2YVyfqPPmK32xssXDCIBsXs0XnUZsCcj+kQ9TOzV94g76cB Rf0uPG2JCXua9e5MiRvrWb438W6TnNUrgrB6sR/d07a5sao0hv0pRv75xDu9EjadZPmyEMzV u9O95p1PbRv9h67lDOxduppL2S1h9032m4i/Ecz3HW4wqc1LTD+cnDaUN53ff5lG3zp3jbBW uNXqzZS1W/i0tXNaGw54IhWzJn2Iz0mPld4ZJ83Drin9J+m3V3BN+5VM72kWf2vYN4oK2kf8 XcaEFfkjHXQWidGuBV9dffZXP1hVeIHKVmf4cdy7fBsYwqWYh/RwdfXwrZuerrRlvWlYPJkj h06m92KNV9k6/VVaVC+Bi84arVaDbeNZhJriiUtQ93oQ0ft2EGKqRYf25bJuzBlD2LYrBs9W HfG1t4gop3p4VzFxOOh4rnc/t67zEceNipQDY7nfsiHqd+GpS0xg16gX3cvdZsOKncQBqadX sfKIPQH9u1D8IbFqDFnK8pNQo3t3at6tIW29+U+3CpiClrI8bcloRi215r7l1Q9UKzh61af/ 7Kn0tNnPjOm/PbqHAWhcS1FKD9HXbpCQLwPSiogbYRg0HngVt713e51cnLByckZfgHM3GtdS lNRD9I1/sVxgr3H/L5uS7yT7f6b7PFaF8VQlpspD+GnZOHyjVzCqszcV3F0p1ehlvgiKfmCu QmPvjJPljdHocdJDTHRsWs8lmf0T29NlZigNJ2/mTEQyqWaFMeR9algpzCo9PqIiIknVuuHh /pBgMEUQHmPi34Wt738twLoy7xwwkBATgzEf7omo34WnLjFhU5/ePSsTFbiSbdFGjq1cxSnn dvTv8DDrZjJ/Ll1FqMnEsUl1sL5XyGxpPOscqcZjLF92DBMPaqlV0ip6PmobbF0ZypfQkhB6 hmup919SueHb2TW64v0XZ+dDy6Z6DEHb2BufD3dSRbF35xGMeh+a1LG5dy4VRv1J4pkZNCrI 5W52PrRsoscQtJ0/4yXowY6K3aayNvgqMTHXCFn7Pt63VzG6/xT2Z6j1VVIscZafqXji4sHJ WX8n9o2HWbPmHMVf/oSpPepQ3NEaDZB6O4xw8/3Vp6uHG1bmSMIjHtK6t3bHw8WWWh8cwZih N62UImltn8wXrzwuon4XnrrEhDU1evaiVvwWlv26heWrQ3Hv0Jc2D1tanbCTJWuu4tRjGeHm DAXMHMaiDjrOrFzGwdzaapOvcPFGKtbFSlAkO1ehKUL3kYOoGLWGqZ+FkJhJjyfmwGfM35Wb E1LE/TWT6RtiKTdgMJ09CtlEjqYI3UcOpELEaqbOPUKSxH16AXAsQb2u45jztg/a6+e5lJwx zo5w4Gh6TJivBBMSZkc975ppPUwDBgPY2essClMi+zft4P5X7DS4NW1FA6sTbAq8mPWLvzYN aPWinvO79/BER1VF/S48fYkJrKr2pHeDZLZ88DZLrxSjS79WWC5uy7gSLGbLEn695UK7Pu15 oJ7WFKVTnwAcLq5iSY7ftk0lMewIy8ZMYHVUGfoO7krRbJYYx+ZTWPGpP9envUTb4d+x459b JKYYiLkSzLppvfFtPYl9aaueUn7/H0Ws7Om6NOu3kswpcdw8+xerZ7xCsw5z+LfJFJZ9Ynlf Mtv5IQdXmler8gC9/1RWftqcq5PbETB0AVtPXCfWkIopKYILQb+wdPvl52aXBMOmMbR/ay4b gi8QkZRCTGgg81YcQ+fXCt+M3RHzRRaNn8y2qwkkh4ew4J3PCS41gKHditypqK3r0aaVBxdW zOan45EYkm8R8sMQhq2MQJchLrUVBjF5SGUOT+7HyOVHCEsyYYg6z875I5l1t0Gk8aDrxAn4 nJhE35FLCb4eT0ribUIPbWTeyK6MWp/7Lm+Wq/LSGp+ifheeusSEthw9+jRGE3adyJLd6NvM /iEdiHA2LtlElHsH+rR1zbR15NGhD22db7BuyfZHb2disQpNq7XDrcpLTD5dm/fW72Rep5y0 5BypN/xXQnZOo3HYYoa0rIKn3gmvut35cJs1XeZsYEZ7u+ydi1aLjb441Vu9zuf7HfnPggP8 vWUcjZyzeTZZrMqzXICgEuJJxJoixTzy4E3oO9d+eM8MmketYvRLtfFy0uHgWYlmr35KcKnX Wfj7Dwx6DpxNdi2HMqraWRa+2ZqqHk6U8BvNwRc+4Ldlg+8tILkX9p7dGdnpPOMbF8eldBs+ j+nKoo1zaHvXX65xpdOctcxocoEPm3jhXKQuA9cV5f35b1EhY12uccF/5g62TfPm3PROVHN3 xqtBP+bfCqCHb/oCC7taI9mw+2v8r39Br9pFcS5ak5eGfsfZqiMY0Tb/1vuL+l0oNIM8or0o rCjCvm1PxYkeLD61hB7uz/D9LZRqdROHJ9al8bd+bLjyDW1sJSIF4UkhO9AUWhIJ2nOUaoO3 0Nldkr4gCJKYhALHkS4/h9FFboQgCJKYBEEAa+pP/hvDZLkTgvCkkTkmQRAEoVAhBltBEARB EpMgCIIgFHBiErW6qNUfdlp5rFbPdnjlXA1OIT8/UZcLkpiyi6jVH3pNolYX8h9RlwuSmCwQ tXphQNTqmUV/IVeDi7pckMSUOaJWz97JiFq9YEn9Zzo+9uVo0aUJpfQOFG3wf8yaPoA6ng7o ywQw7YDFYFi21OB3h7b68tWax1R5i7pcEPI2MYlaPbu5SdTqBZ+dbmHyW8iJY7Oof+5bJqyv yuLzZ5nX8CiffraZe5bzbKnB08ItL1Teoi4XhDweyhO1erZ7TaJWL2CsSuPnXw23sn74lLPF y9ef6i5eeDcshyH0LFdzM7eSJypvUZcLQt4mJlGr526c8e4Qn6jVnxwaB/SOGtDY42ivxdHR AQ0adA72kBBHYi466Xmj8hZ1uSDkcWIStXo2xxhFrV7wmSmtSXBnCFejtdiVxGwmNTfPPZsq 74wxbFP9PYItxl9FXS4IeZyYRK2enbwkavXnmYwxbDw1jYaWz1zU5YKQx4lJ1OqP7C2JWl14 eEkTdbkg5HFiErV6ZohaXchBJhF1uSDkdWIStXqGcxG1+lNKdtXgeY+oywUhm4M8or0orIha XRCE53V8QSikiFpdEARJTEKhQtTqgiA8n4iPSRAEQShUyByTIAiCID0mQRAEQZDEJAiCIDyL icnI+dUjCKhWHL2dDdbWrgxYX9D74adyamoD7B6qJC985F6BnZ8YCV35Ni0qe2JvrUWrdab/ k3i+ea1WNx5gbJUCULU/b4j6XSgUiSl2Ax8O/Y7Irqu5FJ+CyRTNkq52chefFWJ/ZeJb3xDZ bR1Xk1Ixm2NZKs9XeDJNNVG/C/fI0XLx1JsXuZhgT52mPnjayGKHZ43UsAtcSLCnTrNG8nyF bDRr76jfB8udEJ58jymVc3P8cXFwwLHWBA6lxLCkm/7Oyr3cDuUZbrDvu9F0a1SFYnodjp4V 8OnxLqv/eYztRVUsIfP+S+OyLujs3ank/xY/nkh4jONFcPCbYXSsVwY3B0c8Kzai54R1nM3V KWZDgZ1D4k8uZ2zX+pRxtUen96JWx3GsDc3NGMedIRJbjQbrquM4mBLDz511aVLG3A7lJXLq 56G0qOSOg70r5Zq8xrxpPXErNEOXZsJ2zmRAk4p4OuhwKlEd/4Gz2X7NcizYxOGJNbEr2psp swbgU9oZnYMnVQKGsex0Uu7jOZtxlXfPNxuI+l0obBw8eFAdOXJEnThxQp06dUqdPXtWXbhw QV2+fFldu3ZNxcbGqvj4eJWYmKgSjk1WDW3d1Mvr45XJZFKpqanKbDYrs9msLDEe/UDVskbZ NJqhzpjUAxg2j1Ud3vpCBR6/oeIMKSr+2gE1r2cZZVv6dRUYo3KISZ2cUl/ZaKyUS+Px6veL sSrx1iH1VddSyqb0f9Vv4WaVY8wxas+4usrR1UcNXxaibsQbVNLtf9SWz4eoGTsMOT2Yur3+ VVXatrTqMT9E3U6MVRcC31GNnLVKY+OtPjltyvHppZz6QgV42Ktqr3yvgsMSVVL4MbV4YDXl WPFN9XtULq737p08/YnytnVTr2xIVrnHrKI2/58qb1tCdfr8gAqER80JAAAgAElEQVRLiFdX /nhPNXGzVtqsrtd4SL37gk7Vn3JSmVT+k3rte9XB1VF5jwlUodHJKuH2WbXv5/Gq38c7VfrT NaqQ92soa42Vcm0yQW29HKcSbx5UX3YpqewqDlZbY8w5j+dsxlV+Pd+sy2WcWtPHRenafKPC Mjl86pUvlb+dh3rlt8SMN1J93dJW6bouVXGPHffJ6tcBzso2izpDKZP6Z7qPsrFyUGU6Tld7 riWopFsH1PQAd2VdfrjanayEZ4gCSUyZVrb7x6hKtuXVyL0puUtMVuXVMIvoTL3wmWpqZ68C 5l9TqTmtuELnqKb29qrZZ6GPX1GmXlFft9Qpu+Zz1aV7J5Kktg8po6xyk5jMEWpVbw9lU2m4 2m1RT5ijVqle7o6q9YKcX2+eJibzdbWwjYOya/qZOm9xvTvfLpf19T7hxGT4/TVV1Ka6ei/Y +LBq/E5isqqkRu1LTxqp5z5VjW2dVOefbilzDuM5W3GVj88363KZqi7PfVHpir2utmTy6BN/ e0W56wLUghvm7CemHMd9NhOTdR016Vj6L8Sv66tcbOurKSdNUps/Q+TLcnHrOh9x3KhIOTCW THfzN15l6/RXaVG9BC46a7RaDbaNZxFqiicut3pZ27r41kufqNeWakjDEkaOHjqRw92iFdH7 dhBiqkWH9uUef0PRvFZgG0PYtisGz1Yd8bXY4F3jVA/vKiYOBx3Pt92xs3d+RzkQkkKpRo0o bXG99XzqFBpDrlWFF6hsdYYfx73Lt4EhXIoxZv3Lunr41rVNj6uy3jQsnsyRQyfT73O24jmb cZWPzzfrcinqd+Gpm2PKa5LZP7E9XWaG0nDyZs5EJJNqVhhD3qeGlcKcQ2X1vYDVOeNka/mB E856iI+NvW/J8KOPp4iKiCRV64aH+6NvzyOPl0MF9qOPF0F4jIl/F7bGznIHDuvKvHPAQEJM zH2iuOzev+xPRzzieMYYohM0OLlkvF6nx1N+52ViqjyEn5aNwzd6BaM6e1PB3ZVSjV7mi6Do B+YqNPbOOFnWpBo9TnqIiY5N8x5lN56zGVc5fL551pgU9btQiHjym7gaD7NmzTmKv/wHU3vU 4W4uSb0dRngmjZ47yurZj+7nJMcSlwL3/NQqjrh4cHJ1ua91+ujjaXD1cMPKfIvwCDMUeXif 6ZHHy6DAvnu0rBTYjzyetTseLrbUGhvE4Y/qPvIBZvf+ZZfsXm9cWsX9qOstGOyo2G0qa7tN xZxwg2N//MTHoyYxun8xGp6ehZ9FIlJJscQZ4V6gqvg7ceWsv+MBy3Y8ZzOucvh884w09fun h45w9J876vcW6+ay9VRzrh6D+t0fT/1eOONAkB7TPQwYDGBnr7P48kT2b9pB+OMEbMpRDhxJ X7Vkvh5C8A1b6nnXyuHQgQa3pq1oYHWCTYEXH/8FzRwrsB9V4BvQ6kU953fv4WphHL2wrotv A1uuBQVZnF8yR4KO5UtL/7ELgGMJ6nUdx5y3fdBeP8+l5Iwd/CMcOJq+Ws98JZiQMDvqeddM i6vsxnM246qgnq+o34VnPTGZjn1IbRsNtpm9LGddjzatPLiwYjY/HY/EkHyLkB+GMGxlBLrH 6eKbL/PTux+x9XICyeGH+WbMbIKK92VYTy9yelhthUFMHlKZw5P7MXL5EcKSTBiizrNz/khm 7cphscmxAvtRedODrhMn4HNiEn1HLiX4ejwpibcJPbSReSO7Mmp9fAFHlBf/Gd4Pr0OzGPFl EDeTErm2fSqTVoYVmqA3bBpD+7fmsiH4AhFJKcSEBjJvxTF0fq3wdcwYVxdZNH4y264mkBwe woJ3Pie41ACGdityJ65yEM/Ziqt8fL4PLZeifhee6x6TxpVOc9Yyo8kFPmzihXORugxcV5T3 579FhcdYaaBx68aoHtd4v6kXLqUDmBXRkW82zqVDbiR7Ghf8Z+5g2zRvzk3vRDV3Z7wa9GP+ rQB6+Nrm9GA5VGBnYyCq1kg27P4a/+tf0Kt2UZyL1uSlod9xtuoIRrTVF3BIaXB76XM2fNOZ mC/aUdatBM0m3WbAO13Qa7RoC8HujHYthzKq2lkWvtmaqh5OlPAbzcEXPuC3ZYOpkOH8tJ7d GdnpPOMbF8eldBs+j+nKoo1zaHv34eUknrMZVwX1fEX9LhQWRHshPAEUN79tR7mRDnx37Rf6 u2ZsyhdGtbqJwxPr0vhbPzZc+YY2tvIUBeHZ7TEJz34aCl/F6Femse7IDRKMydw+vpwJn+/F vdsrtHWR+yMIgiQm4Ul3wz1e4vUuySx/symlXVyp1H4GN1ovYPO8rnhKx1oQhEdgLbdAyPvM pKdaj49Z3ePjp7po1J/8N4bJ8jgF4YlXITLHJAiCIBQmZChPEARBkMQkCIIgCHmUmEStnleI Wt2CvFarZ5dcqMEp5Ocn6nLh+UtMolZ/thG1+jOMqMuFpwdRqwvpz/d5U6sXdjW4qMsF6TFl 3cUXtbqo1XPGk1erp/4zHR/7crTo0oRSegeKNvg/Zk0fQB1PB/RlAph2wGIwLFtq8LtDW335 as1jqrxFXS4IOUPU6qJWfxbU6qbTnyhvG3vVdPoJFRn6tWrrpFG2jT5WR6Ovqp+6eSjXXqtU zIOO9YeowfNS5S3qckEocIPto7BtN4ON896mfS0v9LY2OJZsxGuje1Hm5jb+OJ5LOYK2DK9O n0Tbck7YF2nIW3NG0+jWSr5YfSPHu3ibL3zPe1+cof6Hy5jdtz5ejrboPKvSZvhXjG2Rw03T zNdY9cVKbjUew+w36uNp70T59h8z7eVSuVsSqSJZ/9FH7HZ7g4ULBtGgmD06j9oMmPMxHaJ+ ZvbKGxSoDUP9y6rPfuaGzzt8/nYjijk4UjpgIlMGlCLfBwetSuPnXw23sn74lLPFy9ef6i5e eDcshyH0LFdz01nTVGbQ1DE0K+mArkgjhg5ui+P1vew9n5ODOeDduA4cO8SxTBboGI4e4rim Hn4NdQUXV3l6vYKQ70N5OUfU6pbXKmr1J6ZW1zigd9SAxh5Hey2Ojg5o0KBzsIeEOBJzEVp5 o/IWdbkgFHhiejiiVgdRq+dTZkrrlWnQaECjtdiVxGwmNTdtnmyqvB91X0RdLgg5CMMn36IW tTqIWv1Z45H3RdTlglCYe0yiVhe1+vNY0kRdLggFmphErW55MFGrFza1ekENToi6XBAKa49J 1OqiVi9QsqsGz3tEXS4I2axFRHsh5D9Po1pdEITnp8ckPPtpSNTqgiBIYhIKVTdc1OqCIDwG olYX8iEzPQtqdUEQCqwKkTkmQRAEoTAhQ3mCIAiCJCZBEARBeAoTk5H971TGruwwdheWLQPU Tb5pq8O+82Ki8/3L4jmycCB+5d2xt9ZiVfwNtj6rr+zntVrdeICxVQpA1f68Iep3QXpMz1mZ v/g9I0asQz98H7cNZlLDvqGNrdwX4VlF1O9COrIqr5CSeiWUi+aSDGhaBb28cSoUymatqN+F AuoxRa/7L6XdfPj4WIaNWtRNfuzkiq7hVE5m2sJR3P6+Pbq0lXtaK1v0RSrRuPeH/HohZ31x 09VNvN+hBkX1DriUa8yrn/9FRLZ2UlHEnljKuB6NqOjpiINLKWq3e5vvgyOzsU+dgdC1Y+lQ oxh6B1fKNh7Iwhzp0BWxx5cwtltDyrk7oHPwoGLTV5i1K+wR321g00AP7Py/4mrKaT7xtkGj sab8yH2P2AQ1mbMrR9P+3vn+lwXB51j4xIYen6r+KGE7ZzKgSUU8HXQ4laiO/8DZbL9mOVZq 4vDEmtgV7c2UWQPwKe2MzsGTKgHDWHY6KcMju8G+70bTrVEViul1OHpWwKfHu6z+JymTsIjg 4DfD6FivDG4OjnhWbETPCes4m+FX408uZ2zX+pRxtUen96JWx3GsDc2nMSxRvwuFjUeq1W+s UP2K2KjKI3epuORklZKSooxGo0q59LVq5WCn/D49q4xmszKd+1T52lirquMPKmNmrtzUJBV+ Zoua0bGU0lUbrfYmPFIgrv4aU0nZeLVUXfq8rr49FKYSk26roz+/pmo4uCr/z06plEccISF4 imrs4qBeGPC12nUhSiXG3lB/b/1avfXmgiz00una6ojA/1MV7Yqp1lO2qYuxSSomNFB90Kev 6lDfRuk6/aSiHvHdiYc/UU1dHVXNgd+pA1fjVHLcZbVjejvlpa+n3j/wyItXhh2DVUnb6uq9 YGO2dObhG/6nytkWV+2m71CX4pJVzIWtasqA/uqletk73wIlD9TqOSH12veqg6uj8h4TqEKj k1XC7bNq38/jVb+PdypD+kmpkPdrKGuNlXJtMkFtvRynEm8eVF92KansKg5WW2PSHemGzWNV h7e+UIHHb6g4Q4qKv3ZAzetZRtmWfl0FWvrczTFqz7i6ytHVRw1fFqJuxBtU0u1/1JbPh6gZ O9K/OeXUFyrAw15Ve+V7FRyWqJLCj6nFA6spx4pvqt+jzLm/zUc/ULWsUTYP6NVF/S4ULh6d mGJvqvUDSyibsoPVtpi7icmgzs1ppnT2/urLSyZlzk5iuhteZ2aoRnYl1eDthmwlJiurUuq1 zbGW6UbtGlZB2Xj9TwXGP6z2uaIWtNYr23qT1FFDTmuuUDWnqU45tp6vrqRafHz+M9VMp3l0 RZ96XX3X3knZ1v9IHUu5//Nv2uqVS9ef1S1zHiYm0zk1y89O6dt+o65Znu+lL5W/vUYSU8Z7 +/trqqjNo+5tWmKyqqRG7UsPoNRzn6rGtk6q80+31MMeYcr+MaqSbXk1cm+KRVjNUU3t7VWz z0Kzvk5zhFrV20PZVBqudlvkAXPUKtXL3VG1XnBNpeZ5YkpVl+e+qHTFXldbMqngE397Rbnr AtSCG+bsJ6bUK+rrljpl13yuunTvhJPU9iFllNXjJCbrOmrSsfRfiF/XV7nY1ldTTpqkNn+G yMbiB3ua9e5MiRvrWb43MW0CJJTVK4KwerEf3dP82VaVxrA/xcg/n3inT1wlnmHtxN40qVIc Z7s7CnXrquMIMkTw783sLTHTODalXTMni08c8G3bHJfwv9h7+iH7QMf/yR9/GajaqSs1crpo IC6IPYfN1GrdykJbDdqyrWlTPRvTcgl/smVfMpVf6kR1SxmUthhNXqxKctCfHM/LlYbxQew7 qqgV0AIvy/Mt1ZKA6jKNmBGrCi9Q2eoMP457l28DQ7gU85CHoauHb11bixjwpmHxZI4cOpk+ 7GW8ytbpr9KieglcdHfi3LbxLEJN8cQlqHtDu9H7dhBiqkWH9uWy3qjWGMK2XTF4tuqIr71F OXCqh3cVE4eDjud693PrOh9x3KhIOTCW+y0bon4XnrI5JgC7Rr3oXu42G1bsJA5IPb2KlUfs CejfheJZxaqKYtOwNvT7IZ6On23l9K0EjKmK1Ctf4m8L5jSHekYltca+F2sMlgXSHbcMkax1 c8eFKCKjzFn+vTkmnAijBs+iHlleZJZ/GxtJtEmDm4fb/X+rdcPDTfvov4+5xW2DkZNT6mNz 3y4Z1tSYEEJKdCTR6tHXnv3zjSLapMHV3fV+95TWFXdXWXj5QGKqPISflo3DN3oFozp7U8Hd lVKNXuaLoOgH5io09s44WcafRo+THmLSDL2QzP6J7ekyM5SGkzdzJiKZVLPCGPI+NawUZpU+ 5xgVEUmq1g0P94c8E1ME4TEm/l3YGjvL2LGuzDsHDCTExOSLcFHU78JTl5iwqU/vnpWJClzJ tmgjx1au4pRzO/p3eIh1M+VPVq0Lo9bgTxnboTYlXeyw0oD53/9v77yjojy6OPxsZelVxY7Y e+8looK9a2I3GhMTNfYaY9TPEnvsidHYu7HEXkFjj2KNHTtY6SBty3x/gLIgIBiMGOc5Z49H 3i3zzsw7d+6dmfvzN1PcfClJLRAi4RW9kXZmGtMiIpjQZFNEU0gwYTjg5KhM9fNKexectYLA Z0GpbjZI9bN2TjioBSHBoUk/awohKMSUrs87arRUnXYTgzC7nvAyRW2grcWb7z395XXEQS0I DU42sJpCCQmVM8kUploUbD2JzWcfEhbmj+/m76n8fCNDOk/kZLJRX0SHE2H+NxFJRCTY2tnE 9339OX7//RauXX9kUtuyuFqrUQDG508INCUdPh2cHVGZggkMSqNN1E4422sp/cN59Cn0nejN HbB+F1WSIP1+4cx5LuyLl37vrPFm/9VznLkIFWr8M+n3V1t0pPS7JNMME2pKtvuU0pH7WPvH PtZt8sOpaUe8HNKY+phiidWDWm0+zYrl3NYd3M5ALEK8OM7eo+Z7fqI5vf9PwpxrUKt4GlM4 m5p41rDgxo5tXMnowVTbKtQur+TygUNJjKjpwSEOXE1H4W1q0bCGlkvbd3Dn3ziTYVOVWuUU XD50mCdmD70p4DCHrhpkL0/rAbDORflWI5j1bRWUAbe5F5PsDTHnOXUhzqwPnMX3iQXlK5dK CEnFEhsLFpY6s4cpipO7vAkUSQ2TY636VFRdZtfuu6kf/NVUpH4dG24f+dNMmv7fqAgp/S75 4AwTqIq247OKMez74VvWPMhBy071MV/5MfrNoLrWTGHTohoN61pxfvFE1v4dQmz0U3yX9eOH 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 AAAASUVORK5CYII= --------------U4LDQgR0uj7riKGeJtFS2Esd--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 28 May 2025 20:40:49 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 16:40:49 2025 Received: from localhost ([127.0.0.1]:57329 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKNZx-0001VB-BW for submit <at> debbugs.gnu.org; Wed, 28 May 2025 16:40:49 -0400 Received: from mail-vk1-xa2b.google.com ([2607:f8b0:4864:20::a2b]:60440) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKNZt-0001UT-DI for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 16:40:46 -0400 Received: by mail-vk1-xa2b.google.com with SMTP id 71dfb90a1353d-5259331b31eso76053e0c.0 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 13:40:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748464839; x=1749069639; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MhyHJ0Fcyccmt55+zpUS/446x5C5YezEf2M0gaLLHSE=; b=ZvQGk4YBxZD3TQJoTKUqoSDVibmXuvIoQ6KFNjUlb5aGB+O3SjtNth1oCQvD66fudl sOXElsKqJjOwUGZ173UtoqTbFh4qs7elX1qYrDbFlCEIsTGuRp5NA8CJD8fOn0BKK3wg cGbAMApOIUWqNJK11KLuKTNZ/kjgyFcwVKMboGql1uYmw0AoavnbZMsYFt84vpLLwt32 8JbJEUIMR9p950XbNarn3JcsKNKvfrec+IMu6z+g5xd6ru0AoI6+MNcuhbyOYn36xuTp mjLlHBo9kJAMltobfD6G8kiJ1TJSweXkELd87vaGbSKBr9xUvJY1vKoeN09274mSFaNE xjFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748464839; x=1749069639; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MhyHJ0Fcyccmt55+zpUS/446x5C5YezEf2M0gaLLHSE=; b=dCWlE5/L8iOG1s7k+sLU7tiTHo+owX/mDS56xv8qcWvI0F5ly1aejSbpMqyK/B9hIg DLOj81oSCjxv0yu0EdLSU43JodAwa6RzzRHIkeY0tm1+z/InPxB2GH1qiHr0JAXhsXXo L7crMEazqe6MBiOsJ7vvA3HX1Urvf6BK2/VJzpcca6PAg73w0DctmvIMP7Mxp5+RlrNI wmWtxUwK5IdURfJ5vR8Rw2+nbPfbIPKLqtxEd2XtGx+5PewT4Okzud5fslGrK8559JAJ pPcB3aTcvQjNKn8FuWm3a+LtDJnS9D2K5AftCiSeQg0v73Zespfv9KsF9ucEGkC2jjSS 91DQ== X-Gm-Message-State: AOJu0YwGvuVbMzP5jQgCXH2XlxG2AHcMY6SrP74OaTPVFacQKtML4pOO YxC+psVMGyh5dB6of7/l/Ll6ohrNaFflat96WqPeQKVPCFhurk2GFrbgL9zFs0vZlotRffRN+LC GyK6zfK7HAT6JhSdwh5n0VXjNR+x5nawCNQ== X-Gm-Gg: ASbGncsgCnJbiUzpy86f57+O47WTqFDDylJXcF0fF4ifOACriEEdSinVvLiKevLC3mo +tuVAvBPfgDm01t+LqWqXXLkSgzl6+WvgRY6ynTrNo7efNuW4MATHqn0ys4TjKgMUhL6xxYv5/j 0hIs12i4DEf4B2i+asi0cx5FXzD4MyqNfYpR4= X-Google-Smtp-Source: AGHT+IFxUcQbrtkkQ3bp2H2nKXhcP48Xr3AS5T6Eygu/MmaLp9IESOyjT5tht0rEHgt0/YB5WoeYYOi70mayAJz4XN4= X-Received: by 2002:a05:6122:8b01:b0:530:6dc2:ba90 with SMTP id 71dfb90a1353d-5306dc2bbe9mr3078555e0c.2.1748464839101; Wed, 28 May 2025 13:40:39 -0700 (PDT) MIME-Version: 1.0 References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> In-Reply-To: <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> From: Ship Mints <shipmints@HIDDEN> Date: Wed, 28 May 2025 16:40:26 -0400 X-Gm-Features: AX0GCFu9fRcOKCQ2NTDh8mAH-fqkmZXrfdNILozCoBtbisiPrdyLCCUfDlRZja0 Message-ID: <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN> Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width To: Jim Porter <jporterbugs@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000a311fe0636383114" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 Cc: 78621 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000a311fe0636383114 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, May 28, 2025 at 4:14=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN> = wrote: > On 5/28/2025 12:44 PM, Ship Mints wrote: > > You can see this in text-scaled buffers when attempting to pad a string > > to a specific pixel boundary. If a pixelwise specified-width space is > > inserted after a string with variable-pitch glyphs, it doesn't honor th= e > > net pixel width. That same string padded using min-width with the same > > number of pixels works fine. > > Are you sure that your implementation of 'string-pixel-width-scaled' is > correct? From a brief look, I'd expect that you get some jitter when > dividing '(default-font-width)' by '(frame-char-width)', since both are > rounded to the nearest whole number. > > If I instead replace that call with: > > (string-pixel-width str (current-buffer)) > > then everything looks ok to me. As of Emacs 31, passing a buffer does thi= s: > > If BUFFER is non-nil, use the face remappings, alternative and default > properties from that buffer when determining the width. > > That should handle all the necessary work to get the string width after > applying text-scale remappings. I added that argument so I could use it > in 'visual-wrap-prefix-mode' for a very similar issue you're seeing. See > commit f70a6ea0ea86ef461e40d20664a75a92d02679ea. > Thanks for that. I think I'm using that in other places. But... Did you run the repro in question and it worked for you, or are you saying that this worked for your case? AFAICT, the repro demonstrates a different issue. With the identical string-pixel-width, padding using specified-width spaces vs. min-width behave differently, so this isn't due to jitter as the widths used are the same for both cases. -Stephane --000000000000a311fe0636383114 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Wed, May 28, 2025 at 4:14=E2=80=AFPM Jim Porter <<a href=3D"mailto:jp= orterbugs@HIDDEN">jporterbugs@HIDDEN</a>> wrote:</span></div></div= ><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmai= l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20= 4,204);padding-left:1ex">On 5/28/2025 12:44 PM, Ship Mints wrote:<br> > You can see this in text-scaled buffers when attempting to pad a strin= g <br> > to a specific pixel boundary.=C2=A0 If a pixelwise specified-width spa= ce is <br> > inserted after a string with variable-pitch glyphs, it doesn't hon= or the <br> > net pixel width.=C2=A0 That same string padded using min-width with th= e same <br> > number of pixels works fine.<br> <br> Are you sure that your implementation of 'string-pixel-width-scaled'= ; is <br> correct? From a brief look, I'd expect that you get some jitter when <b= r> dividing '(default-font-width)' by '(frame-char-width)', si= nce both are <br> rounded to the nearest whole number.<br> <br> If I instead replace that call with:<br> <br> =C2=A0 =C2=A0(string-pixel-width str (current-buffer))<br> <br> then everything looks ok to me. As of Emacs 31, passing a buffer does this:= <br> <br> =C2=A0 =C2=A0If BUFFER is non-nil, use the face remappings, alternative and= default<br> =C2=A0 =C2=A0properties from that buffer when determining the width.<br> <br> That should handle all the necessary work to get the string width after <br= > applying text-scale remappings. I added that argument so I could use it <br= > in 'visual-wrap-prefix-mode' for a very similar issue you're se= eing. See <br> commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.<br></blockquote><div><br><= /div><div class=3D"gmail_default" style=3D"font-family:monospace">Thanks fo= r that.=C2=A0 I think I'm using that in other places.</div><div class= =3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"= gmail_default" style=3D"font-family:monospace">But... Did you run the repro= in question and it worked for you, or are you saying that this worked for = your case?</div><div class=3D"gmail_default" style=3D"font-family:monospace= "><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">AF= AICT, the repro demonstrates a different issue.=C2=A0 With the identical st= ring-pixel-width, padding using specified-width spaces vs. min-width behave= differently, so this isn't due to jitter as the widths used are the sa= me for both cases.</div><div class=3D"gmail_default" style=3D"font-family:m= onospace"><br></div><div class=3D"gmail_default" style=3D"font-family:monos= pace">-Stephane</div></div></div> --000000000000a311fe0636383114--
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at 78621) by debbugs.gnu.org; 28 May 2025 20:14:46 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 16:14:46 2025 Received: from localhost ([127.0.0.1]:57135 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKNAk-0007sG-FQ for submit <at> debbugs.gnu.org; Wed, 28 May 2025 16:14:46 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:52399) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>) id 1uKNAh-0007rp-2y for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 16:14:43 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-311e993f49aso138297a91.0 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 13:14:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748463276; x=1749068076; darn=debbugs.gnu.org; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=3f8QFRKXLNTwpO6erFqCXBByj5CpvAYU2xxamkzaGpQ=; b=eg8dclZ/GcVjBVbXcmIlsLu8JV6Wa/IIRMjsMsqaNmSS9fZktGN1VFRfcPYxvnNw8X Sz0WVTYpfSEin09ja5zcxongv0BshREPO3EjcP5+7mgIiyLdCNtYDUgBxA+iVSlqF/Im uPyOh3Jy9W8E84kgqzp9FlQZlL0zYjnrbpnQB/4ibv8HlNuFJxFXsJW5CigR79960D4j Ff7LLrIm/fAaRPtoajuUQSVyOaBvOMsECSLVkXrNUwrJGwVjFEg8wrVKFsiWejLW5+Um KHyRVPAPKPazshrRZ22UmYixMElvU/4aJaxmjTqaP4nFASYUscgCUvPeHY/ujUiGrfqh pokQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748463276; x=1749068076; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=3f8QFRKXLNTwpO6erFqCXBByj5CpvAYU2xxamkzaGpQ=; b=KRY1A0801MCjwivUkSocg3BfQSD23GGmIOJHBt0QXy4HiQ2a6uB6DCR0rdXsjVUXnd pDqzM0qrjPkmKb5t9jmwI0UFLH49rIW48UXbIG1PBRgoOsuCijdBmtnSyMQJQCsAAgcc XLNbLw1BQv577hI7OBt2f0bwQuVU0R89196DiEFATjObH5wSpxPM0bRhdFSrDHwZAFW2 dS29VKIuizehdPWt0Tp5kirkPhu2cLGPcE/rC6V2ToDsgJFSB1rmkKAVXOp50xIY/dT8 4OnlVesU5wT7XKcR0ng4psMp1yTV42mcOExPdVjGdzYqBfbroJmgyFsweC/vLoHloVkl fbBw== X-Forwarded-Encrypted: i=1; AJvYcCXRhNGU4ajbPFhNGszqnVeQQHJHjwKiBILPFn/pByQaVwDqGiVT1MXiwXOOiuat4N2x0L2W8g==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yzn9cyZp3x3buOPKfXNDUch6Hne2euiZYHyHaSRndRk3HDwoUvS uVjytACcOD81iXBvHN9JCzRhEb9kgJEZRYJ9jDEdJPWVsO6WPvkFBP33+gG+eQ== X-Gm-Gg: ASbGncujUWo6n6CWjAFeXf5GUupYtIbexTDkRDW/SbQoFvIcIAT/UDhXyuGCJQs54rz V9UKuEFECimekDJKi1hQqTdURyIfPMT+KuLIDMuKpbF834JaKCWQ5leaQpnalh4atNir3uYVkTf h82ngWzz/YlBeEJIYPLjImtPwHa7vMt+qr31c9MqfYySwOyEGvnVraGosnTwTxE++Elnqu1sXQt FiEU1YDEhTpv3jkoMsETHfHZWK47Qj0Jl06ZwWFVEMOviMPUaJyJCsuzGyXPnIPdmfVFGu9zBRj HDSYazudO5HoPE9hW1OnQMqxxFX8ArJ/5aHwp4ldkTldMZMrfDkNLQreyL5FP5X+kAvF/7nNKo8 Jz0GrzWez0VZT+3BSY9QGu40KZFyrWiFuieeYmrmnkLhv51tQZNSJ X-Google-Smtp-Source: AGHT+IFN5MNGxFNd9dalcLz/zP9jaVAfuI0dvmq0r4wJt7KkaPfzV6CvuWsnCNrLMBar6AvMZglCRg== X-Received: by 2002:a17:90b:2882:b0:312:ec:4128 with SMTP id 98e67ed59e1d1-31200ec4521mr2355547a91.34.1748463276560; Wed, 28 May 2025 13:14:36 -0700 (PDT) Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com. [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-3121b71c5c5sm39634a91.17.2025.05.28.13.14.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 28 May 2025 13:14:36 -0700 (PDT) Message-ID: <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN> Date: Wed, 28 May 2025 13:14:35 -0700 MIME-Version: 1.0 Subject: Re: bug#78621: Pixelwise display specified spaces less precise than min-width Content-Language: en-US To: Ship Mints <shipmints@HIDDEN>, 78621 <at> debbugs.gnu.org References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> From: Jim Porter <jporterbugs@HIDDEN> In-Reply-To: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78621 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On 5/28/2025 12:44 PM, Ship Mints wrote: > You can see this in text-scaled buffers when attempting to pad a string > to a specific pixel boundary. If a pixelwise specified-width space is > inserted after a string with variable-pitch glyphs, it doesn't honor the > net pixel width. That same string padded using min-width with the same > number of pixels works fine. Are you sure that your implementation of 'string-pixel-width-scaled' is correct? From a brief look, I'd expect that you get some jitter when dividing '(default-font-width)' by '(frame-char-width)', since both are rounded to the nearest whole number. If I instead replace that call with: (string-pixel-width str (current-buffer)) then everything looks ok to me. As of Emacs 31, passing a buffer does this: If BUFFER is non-nil, use the face remappings, alternative and default properties from that buffer when determining the width. That should handle all the necessary work to get the string width after applying text-scale remappings. I added that argument so I could use it in 'visual-wrap-prefix-mode' for a very similar issue you're seeing. See commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.
bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.Received: (at submit) by debbugs.gnu.org; 28 May 2025 19:45:13 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 15:45:13 2025 Received: from localhost ([127.0.0.1]:56962 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uKMi8-0005tL-Kq for submit <at> debbugs.gnu.org; Wed, 28 May 2025 15:45:13 -0400 Received: from lists.gnu.org ([2001:470:142::17]:56686) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1uKMi5-0005mU-Hb for submit <at> debbugs.gnu.org; Wed, 28 May 2025 15:45:10 -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 <shipmints@HIDDEN>) id 1uKMhv-0000dO-Jq for bug-gnu-emacs@HIDDEN; Wed, 28 May 2025 15:44:59 -0400 Received: from mail-vk1-xa32.google.com ([2607:f8b0:4864:20::a32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <shipmints@HIDDEN>) id 1uKMhq-0002Ht-A3 for bug-gnu-emacs@HIDDEN; Wed, 28 May 2025 15:44:57 -0400 Received: by mail-vk1-xa32.google.com with SMTP id 71dfb90a1353d-52eea8111easo41641e0c.2 for <bug-gnu-emacs@HIDDEN>; Wed, 28 May 2025 12:44:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748461490; x=1749066290; darn=gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ZxR34e63qesbuq9s7ioZG99JmOhcd+cY28/F1uzEi/M=; b=ND0uaip8YRrNMpy9rZg2fSDcbKMtojQ/amAfvJAwbJPIEWYUdRnVi6ICr1esMdyucD bFk73TvmIsQoho3693XZ93FIdl2Ais+3wG1QLUwnywQ24f9p/gFbWWdKx8AKnZgDnwR4 6Lu+YXFNnfjrWLtkqEb0Nr8E7UTBEdsniifAFY4p0bMFi59XjDP24T0or9K3jkcyoaI3 1w3ZUOpizC5PtfRKOTkKPm8HXgqddZEJAza2St1LSnkrWY9RbzYLZ+blGSjoRm9BVLH+ eiFC/IHVPKclMDLTsvm7M/yKgz1qLLhlcSSsQpceSzgPNFKLIPIpNHsOrpH9n+AMRlXs G9Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748461490; x=1749066290; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ZxR34e63qesbuq9s7ioZG99JmOhcd+cY28/F1uzEi/M=; b=Bg8ZqsL7gQICkM9qM6/turJu/YFoccGORzJKq7KLdmEOJmypiVbQFfnT1u9dOAD5rh nftlsu6fxjzNICJEBUowN226FDsOc1kfCnLGWQlQt8apSXBTmj1+2t8v5CLMbIcPaMFF PLkdnSxJLRGW67O/cYD7luasLIfXCrVsCl8SiOKl97n2C0wdRn03aG77wwF6au1ImfB0 a1al3W8V3h4nvIJpP6nnY0spuHZBXBQLtXUq07SpP2MFv0yaJ7TN3SRuUpsK2i26LFGl qTgvI51Ly3cIFGz3HZd0ciOZDQKkZgaUcw6gLuYb0tqxSU2V9OWBEadcdjc2j6+k6p39 hHog== X-Gm-Message-State: AOJu0Yxhu9sdfMJrZZm/AMNq6MGIXoP+R/DGUwbyKziaL2H99Y57jUmi uaIX8uLuriW6iCNAz7fBqZ5P81GAjwGvhGUt9Dj5WCBREruvWETrT6SjrrtXWWWw50LNzkOtvxo vhrPT/sD9GI7rtPgGEHOU2KKroxOibT1akdW/ X-Gm-Gg: ASbGnctDWpTM6x89jKZR5novuNgdhW1h2dXH8DqErxI0ZC5yrZz61DsBXySc7y+ollN DaJ2uOQEYSdgqZR8VJJKDcIgQTKRftgD2FDCd/JThr+4316F5yIJRTCtRX4vUgoBiIcuTQ72Vet E0FrAiEV/evcphq3x3FIXRl2NBPXR3HPPtrzFZMlDoKZdR0A== X-Google-Smtp-Source: AGHT+IGGqiVwKZ+O9rrau18H273elkAi3reK9YY56GT85deu+WleLGR5/PcflD7s3dkzjd150Y0CtBH44ux7HYMvj1M= X-Received: by 2002:a05:6122:2a13:b0:530:720b:abe9 with SMTP id 71dfb90a1353d-530720bc03bmr903073e0c.7.1748461490132; Wed, 28 May 2025 12:44:50 -0700 (PDT) MIME-Version: 1.0 From: Ship Mints <shipmints@HIDDEN> Date: Wed, 28 May 2025 15:44:38 -0400 X-Gm-Features: AX0GCFt5DfAmJkXzc0UKk4NYh1tz-X_Pw0vJDShZekdCMh8hcQCPrQotVtueI2c Message-ID: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN> Subject: Pixelwise display specified spaces less precise than min-width To: bug-gnu-emacs@HIDDEN Content-Type: multipart/mixed; boundary="00000000000005f9330636376a89" Received-SPF: pass client-ip=2607:f8b0:4864:20::a32; envelope-from=shipmints@HIDDEN; helo=mail-vk1-xa32.google.com X-Spam_score_int: -1 X-Spam_score: -0.2 X-Spam_bar: / X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) 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.0 (/) --00000000000005f9330636376a89 Content-Type: multipart/alternative; boundary="00000000000005f9320636376a87" --00000000000005f9320636376a87 Content-Type: text/plain; charset="UTF-8" This came up as I've been working on improving vtable to operate well in text-scaled buffers and getting things to align on pixel boundaries is impacted by this rendering issue. You can see this in text-scaled buffers when attempting to pad a string to a specific pixel boundary. If a pixelwise specified-width space is inserted after a string with variable-pitch glyphs, it doesn't honor the net pixel width. That same string padded using min-width with the same number of pixels works fine. I've attached a -Q reproducer which I've run on 30.1 and a recent master with the same results on macOS. On master, I run as "src/emacs -Q -l repro-variable-pitch-pixels.el". The reproducer shows that a variable-pitch string padded to a specific pixel width using string+specified space is unreliable vs. string with a min-width display property. Fixed-pitch glyphs seem fine and everything works at scale 0. There are three buffers created: scale 0, scale -1, scale +1. I tried to find where in xdisp.c or in ns*.m this would manifest, but it wasn't immediately obvious. I don't have access to another platform this week, so I do not know if this is NS specific or also manifests with other toolkits. -Stephane --00000000000005f9320636376a87 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><span style=3D"font-family:monospace">This came up as I= 9;ve been working on improving vtable to operate well in text-scaled buffer= s and getting things to align on pixel boundaries is impacted by this rende= ring issue.</span><br class=3D"gmail-Apple-interchange-newline"><div class= =3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"= gmail_default" style=3D"font-family:monospace">You can see this in text-sca= led buffers when attempting to pad a string to a specific pixel boundary.= =C2=A0 If a pixelwise specified-width space is inserted after a string with= variable-pitch glyphs, it doesn't honor the net pixel width.=C2=A0 Tha= t same string padded using min-width with the same number of pixels works f= ine.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br>= </div><div class=3D"gmail_default" style=3D"font-family:monospace">I've= attached a -Q reproducer which I've run on 30.1 and a recent master wi= th the same results on macOS.=C2=A0 On master, I run as "src/emacs -Q = -l repro-variable-pitch-pixels.el".</div><div class=3D"gmail_default" = style=3D"font-family:monospace"><br></div><div class=3D"gmail_default" styl= e=3D"font-family:monospace">The reproducer shows that a variable-pitch stri= ng padded to a specific pixel width using string+specified space is unrelia= ble vs. string with a min-width display property.=C2=A0 Fixed-pitch glyphs = seem fine and everything works at scale 0.=C2=A0 There are three buffers cr= eated: scale 0, scale -1, scale=C2=A0+1.<br><br></div><div class=3D"gmail_d= efault" style=3D"font-family:monospace">I tried to find where in xdisp.c or= in ns*.m this would manifest, but it wasn't immediately obvious.=C2=A0= I don't have access to another platform this week, so I do not know if= this is NS specific or also manifests with other toolkits.<br></div><div c= lass=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class= =3D"gmail_default" style=3D"font-family:monospace">-Stephane</div></div> --00000000000005f9320636376a87-- --00000000000005f9330636376a89 Content-Type: application/octet-stream; name="repro-variable-pitch-pixels.el" Content-Disposition: attachment; filename="repro-variable-pitch-pixels.el" Content-Transfer-Encoding: base64 Content-ID: <f_mb8ch83j0> X-Attachment-Id: f_mb8ch83j0 Ozs7IHJlcHJvLXZhcmlhYmxlLXBpdGNoLXBpeGVscy5lbCAtLS0gLSotIGxleGljYWwtYmluZGlu ZzogdDsgLSotCgooc2V0LWZyYW1lLXNpemUgbmlsIDEwMCA2MCkKKHNlbGVjdC1mcmFtZS1zZXQt aW5wdXQtZm9jdXMgKHNlbGVjdGVkLWZyYW1lKSkgOyBtYWNvcyBzdGlsbCBoYXMgdGhpcyBpc3N1 ZSBvbiBtYXN0ZXIKKHJlcXVpcmUgJ2NsLWxpYikKKGRvbGlzdCAoYnVmLXNjYWxlICcoKCJmb28t MCIgIC4gMCkKICAgICAgICAgICAgICAgICAgICAgKCJmb28tMSIgLiAtMSkKICAgICAgICAgICAg ICAgICAgICAgKCJmb28rMSIgLiAgMSkpKQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVm ZmVyLWNyZWF0ZSAoY2FyIGJ1Zi1zY2FsZSkpCiAgICAoZXJhc2UtYnVmZmVyKQogICAgKHRleHQt c2NhbGUtaW5jcmVhc2UgMCkKICAgIChsZXQgKChwYWQtdG8td2lkdGggMTUwKSkKICAgICAgKGNs LWxhYmVscwogICAgICAgICAgKChzdHJpbmctcGl4ZWwtd2lkdGgtc2NhbGVkIChzdHIpCiAgICAg ICAgICAgICAoY2VpbGluZyAoKiAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cikKICAgICAgICAgICAg ICAgICAgICAgICAgICgvIChmbG9hdCAoZGVmYXVsdC1mb250LXdpZHRoKSkgKGZyYW1lLWNoYXIt d2lkdGgpKSkpKQogICAgICAgICAgIChpbnNlcnQtcGFkLXRvLXdpZHRoIChzdHIgZmFjZSkKICAg ICAgICAgICAgIChsZXQqICgocyAocHJvcGVydGl6ZSBzdHIgJ2ZhY2UgZmFjZSkpCiAgICAgICAg ICAgICAgICAgICAgKHBhZC13aWR0aCAoLSBwYWQtdG8td2lkdGgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGgtc2NhbGVkIHMpKSkpCiAgICAgICAg ICAgICAgIChpbnNlcnQKICAgICAgICAgICAgICAgIHMKICAgICAgICAgICAgICAgIChwcm9wZXJ0 aXplICIgIiAnZGlzcGxheSAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0IHBhZC13aWR0aCkpKQog ICAgICAgICAgICAgICAgInwgJ3NwYWNlIDp3aWR0aFxuIikKICAgICAgICAgICAgICAgKGluc2Vy dAogICAgICAgICAgICAgICAgKHByb3BlcnRpemUgcyAnZGlzcGxheSAobGlzdCAnbWluLXdpZHRo IChsaXN0IChsaXN0IHBhZC10by13aWR0aCkpKSkKICAgICAgICAgICAgICAgICJ8IG1pbi13aWR0 aFxuIikpKSkKICAgICAgICAodGV4dC1zY2FsZS1pbmNyZWFzZSAoY2RyIGJ1Zi1zY2FsZSkpCiAg ICAgICAgKGRvbGlzdCAoc3RyICcoIkFiQ2RFZkciCiAgICAgICAgICAgICAgICAgICAgICAgIkEt QipDLkQhRTtGOkciCiAgICAgICAgICAgICAgICAgICAgICAgImEtYi1jLWQtZS1mLWciCiAgICAg ICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODkiKSkKICAgICAgICAgIChpbnNlcnQtcGFkLXRv LXdpZHRoIChjb25jYXQgImY6IiBzdHIpICdmaXhlZC1waXRjaCkKICAgICAgICAgIChpbnNlcnQt cGFkLXRvLXdpZHRoIChjb25jYXQgInY6IiBzdHIpICd2YXJpYWJsZS1waXRjaCkpCiAgICAgICAg KHBvcC10by1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKICAgICAgICAoc3BsaXQtd2luZG93LWJl bG93KSkpKSkKKGRlbGV0ZS13aW5kb3cpCihiYWxhbmNlLXdpbmRvd3MpCgo7OzsgcmVwcm8tdmFy aWFibGUtcGl0Y2gtcGl4ZWxzLmVsIGVuZHMgaGVyZQo= --00000000000005f9330636376a89--
Ship Mints <shipmints@HIDDEN>
:bug-gnu-emacs@HIDDEN
.
Full text available.bug-gnu-emacs@HIDDEN
:bug#78621
; Package emacs
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.