all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
@ 2024-02-25 16:23 Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-25 17:06 ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-25 16:23 UTC (permalink / raw)
  To: 69385

Displaying a buffer that contains a long line with bidirectional text
greatly slows down Emacs.  A simple reproduction is to copy the the
Arabic example from etc/HELLO (`C-h h'), yank it into a buffer
(fundamental-mode suffices), add " Hello ", and then create a single
line consisting of a large number of copies of these strings; on my
machine 500 copies clearly shows the slowdown, and with 800 copies it is
much worse.

There is no slowdown with a line of the same length consisting only of
RTL or only of LTR text, nor with the above test line when
bidi-display-reordering is set to nil in the buffer (but then, of
course, the Arabic is not displayed correctly).  It seems that the long
line optimizations added to Emacs 29 do not work with bidirectional
text.

(FTR, I encountered this issue with a program of mine that generates
Emacs Lisp files containing such long lines with bidirectional text.
These files are not intended for display but I was examining one and
experienced the slowdown.)


In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.38, cairo version 1.18.0) of 2024-02-20 built on strobelfs2
Repository revision: d9afa1f30fdf9d00b447fea0a8343397333e172f
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101009
System Description: Linux From Scratch r12.0-112

Configured using:
 'configure -C --with-xwidgets 'CFLAGS=-Og -g3'
 PKG_CONFIG_PATH=/opt/qt5/lib/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER
PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-25 16:23 bug#69385: 30.0.50; Long lines with bidi text slow down Emacs Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-25 17:06 ` Eli Zaretskii
  2024-02-25 18:03   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-25 17:06 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> Date: Sun, 25 Feb 2024 17:23:11 +0100
> From:  Stephen Berman via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
> 
> Displaying a buffer that contains a long line with bidirectional text
> greatly slows down Emacs.  A simple reproduction is to copy the the
> Arabic example from etc/HELLO (`C-h h'), yank it into a buffer
> (fundamental-mode suffices), add " Hello ", and then create a single
> line consisting of a large number of copies of these strings; on my
> machine 500 copies clearly shows the slowdown, and with 800 copies it is
> much worse.

It is not clear what exactly constitutes a slow-down in this recipe.
You describe how to create a test buffer, but not what you do
afterwards to demonstrate slow-down.  Please fill the gaps.

FTR, I tried C-f/C-b (no perceptible slow-down), C-v/M-v (likewise),
and C-n/C-p (no slow-down at the beginning of buffer, considerable
slow-down near the end: about 0.5 to 0.8 sec response time -- but this
is a non-optimized build; your optimized build should see about 0.1
sec to 0.2 sec).  Is this what you see?  If not, please tell what did
you do and what did you see, and please describe it in detail and with
timings if possible.

> There is no slowdown with a line of the same length consisting only of
> RTL or only of LTR text, nor with the above test line when
> bidi-display-reordering is set to nil in the buffer (but then, of
> course, the Arabic is not displayed correctly).

That's not what I see: setting bidi-display-reordering to nil doesn't
affect the slow-down on my system in any perceptible way.

> It seems that the long line optimizations added to Emacs 29 do not
> work with bidirectional text.

Long line optimizations don't kick in until the lines are longer than
the value of long-line-threshold, by default 50000 characters.  Since
800 copies of the Arabic greeting don't reach that threshold, the
optimizations are not in effect at all in this case.

> (FTR, I encountered this issue with a program of mine that generates
> Emacs Lisp files containing such long lines with bidirectional text.
> These files are not intended for display but I was examining one and
> experienced the slowdown.)

If your real-life cases are all with Arabic text, then the reason is
likely not bidirectional reordering of RTL text by itself (although it
does slow down redisplay to some degree), but the fact that all of the
Arabic text gets shaped by HarfBuzz via composition-function-table,
which involves calls from the C code of the display engine into Lisp,
which then turns and calls back into C.  This is relatively slow, but
we have no choice: Arabic shaping requires that all Arabic characters
be handed to the shaping engine for rendering, otherwise the display
will either be illegible for Arabic speakers or at least look ugly in
their eyes.

For now, I see no bugs here.  Maybe if you tell more we will arrive at
something that is a real problem, but what I've read and saw until now
is what I would expect in these cases.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-25 17:06 ` Eli Zaretskii
@ 2024-02-25 18:03   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-25 19:31     ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-25 18:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Sun, 25 Feb 2024 19:06:55 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> Date: Sun, 25 Feb 2024 17:23:11 +0100
>> From:  Stephen Berman via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
>>
>> Displaying a buffer that contains a long line with bidirectional text
>> greatly slows down Emacs.  A simple reproduction is to copy the the
>> Arabic example from etc/HELLO (`C-h h'), yank it into a buffer
>> (fundamental-mode suffices), add " Hello ", and then create a single
>> line consisting of a large number of copies of these strings; on my
>> machine 500 copies clearly shows the slowdown, and with 800 copies it is
>> much worse.
>
> It is not clear what exactly constitutes a slow-down in this recipe.
> You describe how to create a test buffer, but not what you do
> afterwards to demonstrate slow-down.  Please fill the gaps.
>
> FTR, I tried C-f/C-b (no perceptible slow-down), C-v/M-v (likewise),
> and C-n/C-p (no slow-down at the beginning of buffer, considerable
> slow-down near the end: about 0.5 to 0.8 sec response time -- but this
> is a non-optimized build; your optimized build should see about 0.1
> sec to 0.2 sec).  Is this what you see?  If not, please tell what did
> you do and what did you see, and please describe it in detail and with
> timings if possible.

The first thing I tried, with both 500 and 800 copies, is M-> from
point-min: with 500 it took ~4 seconds, with 800 ~10 seconds, and each
time Emacs used 100% of one core for the duration (my machine has an
i7-8700 processor with 6 cores/12 threads).  After that even just
invoking commands like `C-x 1' or `M-x' and entering something in the
minibuffer shows a noticeable delay (several seconds) and 100% CPU.
When I typed `C-n' at point-min in the 500 copy buffer and held down the
key till the cursor froze, it took about a minute until it moved again
(to point-max), during which the core used by Emacs stayed at 100%.

>> There is no slowdown with a line of the same length consisting only of
>> RTL or only of LTR text, nor with the above test line when
>> bidi-display-reordering is set to nil in the buffer (but then, of
>> course, the Arabic is not displayed correctly).
>
> That's not what I see: setting bidi-display-reordering to nil doesn't
> affect the slow-down on my system in any perceptible way.

Very strange: here, after setting bidi-display-reordering to nil, M->
and M-< are practically instantaneous and even holding down C-n or C-p
traverses the entire buffer in a couple of seconds, with just a bit of
stuttering.

>> It seems that the long line optimizations added to Emacs 29 do not
>> work with bidirectional text.
>
> Long line optimizations don't kick in until the lines are longer than
> the value of long-line-threshold, by default 50000 characters.  Since
> 800 copies of the Arabic greeting don't reach that threshold, the
> optimizations are not in effect at all in this case.

Ah, ok.  Then this is a different long-line issue.

>> (FTR, I encountered this issue with a program of mine that generates
>> Emacs Lisp files containing such long lines with bidirectional text.
>> These files are not intended for display but I was examining one and
>> experienced the slowdown.)
>
> If your real-life cases are all with Arabic text, then the reason is
> likely not bidirectional reordering of RTL text by itself (although it
> does slow down redisplay to some degree), but the fact that all of the
> Arabic text gets shaped by HarfBuzz via composition-function-table,
> which involves calls from the C code of the display engine into Lisp,
> which then turns and calls back into C.  This is relatively slow, but
> we have no choice: Arabic shaping requires that all Arabic characters
> be handed to the shaping engine for rendering, otherwise the display
> will either be illegible for Arabic speakers or at least look ugly in
> their eyes.

I created a test buffer with 800 copies of the Hebrew HELLO text
concatenated with " Hello " and found similar slowdowns with M-> and C-n
as with the Arabic text.  IIUC displaying the Hebrew script does not
involve text shaping, or does it?

> For now, I see no bugs here.  Maybe if you tell more we will arrive at
> something that is a real problem, but what I've read and saw until now
> is what I would expect in these cases.

I can try other tests if you can suggest any you think will help.

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-25 18:03   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-25 19:31     ` Eli Zaretskii
  2024-02-25 20:36       ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-25 19:31 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Sun, 25 Feb 2024 19:03:24 +0100
> 
> The first thing I tried, with both 500 and 800 copies, is M-> from
> point-min: with 500 it took ~4 seconds, with 800 ~10 seconds, and each
> time Emacs used 100% of one core for the duration (my machine has an
> i7-8700 processor with 6 cores/12 threads).  After that even just
> invoking commands like `C-x 1' or `M-x' and entering something in the
> minibuffer shows a noticeable delay (several seconds) and 100% CPU.
> When I typed `C-n' at point-min in the 500 copy buffer and held down the
> key till the cursor froze, it took about a minute until it moved again
> (to point-max), during which the core used by Emacs stayed at 100%.

To make sure we are testing the same: what is the value of point-max
in that buffer?  I see something around 30k characters after making
800 copies.

> >> There is no slowdown with a line of the same length consisting only of
> >> RTL or only of LTR text, nor with the above test line when
> >> bidi-display-reordering is set to nil in the buffer (but then, of
> >> course, the Arabic is not displayed correctly).
> >
> > That's not what I see: setting bidi-display-reordering to nil doesn't
> > affect the slow-down on my system in any perceptible way.
> 
> Very strange: here, after setting bidi-display-reordering to nil, M->
> and M-< are practically instantaneous and even holding down C-n or C-p
> traverses the entire buffer in a couple of seconds, with just a bit of
> stuttering.

Then I don't know what is going on.  Maybe you have a very weak CPU or
something?  Or maybe your version of HarfBuzz is somehow much slower?

Just to be sure: this is in "emacs -Q", and you see the same with many
different fonts used for Arabic, not just with a few of them?

> > If your real-life cases are all with Arabic text, then the reason is
> > likely not bidirectional reordering of RTL text by itself (although it
> > does slow down redisplay to some degree), but the fact that all of the
> > Arabic text gets shaped by HarfBuzz via composition-function-table,
> > which involves calls from the C code of the display engine into Lisp,
> > which then turns and calls back into C.  This is relatively slow, but
> > we have no choice: Arabic shaping requires that all Arabic characters
> > be handed to the shaping engine for rendering, otherwise the display
> > will either be illegible for Arabic speakers or at least look ugly in
> > their eyes.
> 
> I created a test buffer with 800 copies of the Hebrew HELLO text
> concatenated with " Hello " and found similar slowdowns with M-> and C-n
> as with the Arabic text.  IIUC displaying the Hebrew script does not
> involve text shaping, or does it?

For the text in HELLO yes, it does: there are diacriticals (so-called
"niqqud") there.  But not all of the Hebrew text goes through the
shaper, only the combinations with diacriticals, so it should be
somewhat faster.  And if you remove the diacriticals, Emacs will not
use HarfBuzz at all for Hebrew.

> > For now, I see no bugs here.  Maybe if you tell more we will arrive at
> > something that is a real problem, but what I've read and saw until now
> > is what I would expect in these cases.
> 
> I can try other tests if you can suggest any you think will help.

I don't know what to suggest, because I see something very different,
and have never seen what you describe.  The only idea I have is to run
this under perf, but interpreting the results is not easy.

Can someone else reproduce Stephen's results?  I'm quite surprised by
what he describes, TBH.  That's not the performance of the Emacs
bidirectional display I'm used to see.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-25 19:31     ` Eli Zaretskii
@ 2024-02-25 20:36       ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-26 12:33         ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-25 20:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Sun, 25 Feb 2024 21:31:19 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69385@debbugs.gnu.org
>> Date: Sun, 25 Feb 2024 19:03:24 +0100
>> 
>> The first thing I tried, with both 500 and 800 copies, is M-> from
>> point-min: with 500 it took ~4 seconds, with 800 ~10 seconds, and each
>> time Emacs used 100% of one core for the duration (my machine has an
>> i7-8700 processor with 6 cores/12 threads).  After that even just
>> invoking commands like `C-x 1' or `M-x' and entering something in the
>> minibuffer shows a noticeable delay (several seconds) and 100% CPU.
>> When I typed `C-n' at point-min in the 500 copy buffer and held down the
>> key till the cursor froze, it took about a minute until it moved again
>> (to point-max), during which the core used by Emacs stayed at 100%.
>
> To make sure we are testing the same: what is the value of point-max
> in that buffer?  I see something around 30k characters after making
> 800 copies.

With 800 repetitions of the Arabic text from etc/HELLO ("السّلام عليكم")
concatenated with " Hello " with no newlines, point-max is 16001.  So
the length of the whole line is 16000 characters, and for the initial
string " Hello السّلام عليكم", M-= returns 20, so for 800 copies
point-max is what I would expect.  Do the Arabic characters in your font
occupy two columns each?  If the string I've tested is indeed that much
shorter than what you've test, it's even more mysterious that I see such
a slowdown and you don't...

>> >> There is no slowdown with a line of the same length consisting only of
>> >> RTL or only of LTR text, nor with the above test line when
>> >> bidi-display-reordering is set to nil in the buffer (but then, of
>> >> course, the Arabic is not displayed correctly).
>> >
>> > That's not what I see: setting bidi-display-reordering to nil doesn't
>> > affect the slow-down on my system in any perceptible way.
>> 
>> Very strange: here, after setting bidi-display-reordering to nil, M->
>> and M-< are practically instantaneous and even holding down C-n or C-p
>> traverses the entire buffer in a couple of seconds, with just a bit of
>> stuttering.
>
> Then I don't know what is going on.  Maybe you have a very weak CPU or
> something?  Or maybe your version of HarfBuzz is somehow much slower?

My CPU is Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz, certainly not
superfast but not superslow either, e.g. bootstrapping Emacs (without
native compilation) takes just a few minutes (with native compilation
it's a couple of minutes longer).  My HarfBuzz is version 8.3.0.

> Just to be sure: this is in "emacs -Q", and you see the same with many
> different fonts used for Arabic, not just with a few of them?

Yes, this is with -Q.  The only fonts I've tried are Noto Naskh Arabic,
DejaVu Sans, and Amiri.  I'm not sure whether any other fonts I have
installed support Arabic (I only have 294 fonts installed).

>> > If your real-life cases are all with Arabic text, then the reason is
>> > likely not bidirectional reordering of RTL text by itself (although it
>> > does slow down redisplay to some degree), but the fact that all of the
>> > Arabic text gets shaped by HarfBuzz via composition-function-table,
>> > which involves calls from the C code of the display engine into Lisp,
>> > which then turns and calls back into C.  This is relatively slow, but
>> > we have no choice: Arabic shaping requires that all Arabic characters
>> > be handed to the shaping engine for rendering, otherwise the display
>> > will either be illegible for Arabic speakers or at least look ugly in
>> > their eyes.
>> 
>> I created a test buffer with 800 copies of the Hebrew HELLO text
>> concatenated with " Hello " and found similar slowdowns with M-> and C-n
>> as with the Arabic text.  IIUC displaying the Hebrew script does not
>> involve text shaping, or does it?
>
> For the text in HELLO yes, it does: there are diacriticals (so-called
> "niqqud") there.  But not all of the Hebrew text goes through the
> shaper, only the combinations with diacriticals, so it should be
> somewhat faster.  And if you remove the diacriticals, Emacs will not
> use HarfBuzz at all for Hebrew.

Ok, I repeated the test with Hebrew without niqqud ("שלום") and indeed,
M-> and M-< are much quicker and even holding down C-n and C-p is
quicker (it does freeze, but unfreezes more quickly).  So it seems the
bottleneck really is the shaping.

>> > For now, I see no bugs here.  Maybe if you tell more we will arrive at
>> > something that is a real problem, but what I've read and saw until now
>> > is what I would expect in these cases.
>> 
>> I can try other tests if you can suggest any you think will help.
>
> I don't know what to suggest, because I see something very different,
> and have never seen what you describe.  The only idea I have is to run
> this under perf, but interpreting the results is not easy.

I've never used perf, and don't even have it installed (I build the
kernel myself but I haven't built perf, but I could do that -- though
probably not in the very short term -- if it might be helpful).

> Can someone else reproduce Stephen's results?  I'm quite surprised by
> what he describes, TBH.  That's not the performance of the Emacs
> bidirectional display I'm used to see.

I also hope others chime in.

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-25 20:36       ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-26 12:33         ` Eli Zaretskii
  2024-02-26 14:13           ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-26 12:33 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Sun, 25 Feb 2024 21:36:46 +0100
> 
> > To make sure we are testing the same: what is the value of point-max
> > in that buffer?  I see something around 30k characters after making
> > 800 copies.
> 
> With 800 repetitions of the Arabic text from etc/HELLO ("السّلام عليكم")
> concatenated with " Hello " with no newlines, point-max is 16001.  So
> the length of the whole line is 16000 characters, and for the initial
> string " Hello السّلام عليكم", M-= returns 20, so for 800 copies
> point-max is what I would expect.  Do the Arabic characters in your font
> occupy two columns each?

No (and it doesn't matter, since I measured characters, not columns).
It's just that I copied more from the Arabic line than you did:
everything starting from the beginning of line.  Never mind, that.

> If the string I've tested is indeed that much shorter than what
> you've test, it's even more mysterious that I see such a slowdown
> and you don't...

Yes.

> > Then I don't know what is going on.  Maybe you have a very weak CPU or
> > something?  Or maybe your version of HarfBuzz is somehow much slower?
> 
> My CPU is Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz, certainly not
> superfast but not superslow either, e.g. bootstrapping Emacs (without
> native compilation) takes just a few minutes (with native compilation
> it's a couple of minutes longer).  My HarfBuzz is version 8.3.0.

The CPU is fast.  My HarfBuzz version is much older, but I doubt that
HarfBuzz became so much slower for Arabic.  So it's very strange.  But
maybe it's worth to try downgrading to an earlier version, just to be
sure this is not the culprit?

> > Just to be sure: this is in "emacs -Q", and you see the same with many
> > different fonts used for Arabic, not just with a few of them?
> 
> Yes, this is with -Q.  The only fonts I've tried are Noto Naskh Arabic,
> DejaVu Sans, and Amiri.

Should be enough to draw conclusions, I think.

> Ok, I repeated the test with Hebrew without niqqud ("שלום") and indeed,
> M-> and M-< are much quicker and even holding down C-n and C-p is
> quicker (it does freeze, but unfreezes more quickly).  So it seems the
> bottleneck really is the shaping.

If, after starting Emacs, you set all the entries of Arabic characters
in composition-function-table to nil (e.g., using
set-char-table-range), do you see significant speedup?





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 12:33         ` Eli Zaretskii
@ 2024-02-26 14:13           ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-26 14:19             ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-26 14:13 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Mon, 26 Feb 2024 14:33:18 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69385@debbugs.gnu.org
>> Date: Sun, 25 Feb 2024 21:36:46 +0100
[...] 
>> My CPU is Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz, certainly not
>> superfast but not superslow either, e.g. bootstrapping Emacs (without
>> native compilation) takes just a few minutes (with native compilation
>> it's a couple of minutes longer).  My HarfBuzz is version 8.3.0.
>
> The CPU is fast.  My HarfBuzz version is much older, but I doubt that
> HarfBuzz became so much slower for Arabic.  So it's very strange.  But
> maybe it's worth to try downgrading to an earlier version, just to be
> sure this is not the culprit?

That's not so straightforward on this system, where I build system
packages from source, so downgrading HarfBuzz may require also
rebuilding packages that depend on it.  I have a somewhat older system
on this machine with HarfBuzz 7.1.0, so I can easily try that.  What
version of HarfBuzz are you using?

[...]
>> Ok, I repeated the test with Hebrew without niqqud ("שלום") and indeed,
>> M-> and M-< are much quicker and even holding down C-n and C-p is
>> quicker (it does freeze, but unfreezes more quickly).  So it seems the
>> bottleneck really is the shaping.
>
> If, after starting Emacs, you set all the entries of Arabic characters
> in composition-function-table to nil (e.g., using
> set-char-table-range), do you see significant speedup?

Yes, there is a noticeable speedup when M-> and C-v, M-v, and even
holding down C-n and C-p is faster, though they still freeze after a few
seconds, but the freeze doesn't last as long as when it happens with the
shaped Arabic script.  Also, probably unsurprisingly, the speed after
disabling shaping is still much slower than keeping shaping enabled but
setting bidi-display-reordering to nil.

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 14:13           ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-26 14:19             ` Eli Zaretskii
  2024-02-26 14:22               ` Eli Zaretskii
  2024-02-26 15:17               ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 2 replies; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-26 14:19 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Mon, 26 Feb 2024 15:13:38 +0100
> 
> On Mon, 26 Feb 2024 14:33:18 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> 
> > The CPU is fast.  My HarfBuzz version is much older, but I doubt that
> > HarfBuzz became so much slower for Arabic.  So it's very strange.  But
> > maybe it's worth to try downgrading to an earlier version, just to be
> > sure this is not the culprit?
> 
> That's not so straightforward on this system, where I build system
> packages from source, so downgrading HarfBuzz may require also
> rebuilding packages that depend on it.  I have a somewhat older system
> on this machine with HarfBuzz 7.1.0, so I can easily try that.  What
> version of HarfBuzz are you using?

I have 2.4.0 here.

> > If, after starting Emacs, you set all the entries of Arabic characters
> > in composition-function-table to nil (e.g., using
> > set-char-table-range), do you see significant speedup?
> 
> Yes, there is a noticeable speedup when M-> and C-v, M-v, and even
> holding down C-n and C-p is faster, though they still freeze after a few
> seconds, but the freeze doesn't last as long as when it happens with the
> shaped Arabic script.  Also, probably unsurprisingly, the speed after
> disabling shaping is still much slower than keeping shaping enabled but
> setting bidi-display-reordering to nil.

Is this with text from HELLO, or with some other Arabic text?  The
prominent effect of bidi-display-reordering is actually surprising,
and not what I see here, with or without shaping.  Very strange.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 14:19             ` Eli Zaretskii
@ 2024-02-26 14:22               ` Eli Zaretskii
  2024-02-26 15:17                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-26 15:17               ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-26 14:22 UTC (permalink / raw)
  To: stephen.berman; +Cc: 69385

> Cc: 69385@debbugs.gnu.org
> Date: Mon, 26 Feb 2024 16:19:15 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> 
> > From: Stephen Berman <stephen.berman@gmx.net>
> > Cc: 69385@debbugs.gnu.org
> > Date: Mon, 26 Feb 2024 15:13:38 +0100
> > 
> > On Mon, 26 Feb 2024 14:33:18 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> > 
> > > The CPU is fast.  My HarfBuzz version is much older, but I doubt that
> > > HarfBuzz became so much slower for Arabic.  So it's very strange.  But
> > > maybe it's worth to try downgrading to an earlier version, just to be
> > > sure this is not the culprit?
> > 
> > That's not so straightforward on this system, where I build system
> > packages from source, so downgrading HarfBuzz may require also
> > rebuilding packages that depend on it.  I have a somewhat older system
> > on this machine with HarfBuzz 7.1.0, so I can easily try that.  What
> > version of HarfBuzz are you using?
> 
> I have 2.4.0 here.

Btw, another possibility could be that this is specific to the Cairo
build.  So maybe try a build without Cairo.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 14:19             ` Eli Zaretskii
  2024-02-26 14:22               ` Eli Zaretskii
@ 2024-02-26 15:17               ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 0 replies; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-26 15:17 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Mon, 26 Feb 2024 16:19:15 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69385@debbugs.gnu.org
>> Date: Mon, 26 Feb 2024 15:13:38 +0100
>>
>> On Mon, 26 Feb 2024 14:33:18 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
[...]
>> > If, after starting Emacs, you set all the entries of Arabic characters
>> > in composition-function-table to nil (e.g., using
>> > set-char-table-range), do you see significant speedup?
>>
>> Yes, there is a noticeable speedup when M-> and C-v, M-v, and even
>> holding down C-n and C-p is faster, though they still freeze after a few
>> seconds, but the freeze doesn't last as long as when it happens with the
>> shaped Arabic script.  Also, probably unsurprisingly, the speed after
>> disabling shaping is still much slower than keeping shaping enabled but
>> setting bidi-display-reordering to nil.
>
> Is this with text from HELLO, or with some other Arabic text?  The
> prominent effect of bidi-display-reordering is actually surprising,
> and not what I see here, with or without shaping.  Very strange.

All my tests in this thread have been with the Arabic example text in
HELLO, though the file with which I first noticed the slowdown contains
much more and different Arabic text, as well as ASCII and non-ASCII
characters without shaping.  Here, the speed difference, when executing
movement and other commands in a buffer with a long line of
bidirectional text containing shaped Arabic, between
bidi-display-reordering t and nil is like night and day.  If it's not
that way for you I can only assume it's due to another factor
distinguishing our systems that hasn't yet been identified.

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 14:22               ` Eli Zaretskii
@ 2024-02-26 15:17                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-26 15:52                   ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-26 15:17 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Mon, 26 Feb 2024 16:22:59 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> Cc: 69385@debbugs.gnu.org
>> Date: Mon, 26 Feb 2024 16:19:15 +0200
>> From: Eli Zaretskii <eliz@gnu.org>
>>
>> > From: Stephen Berman <stephen.berman@gmx.net>
>> > Cc: 69385@debbugs.gnu.org
>> > Date: Mon, 26 Feb 2024 15:13:38 +0100
>> >
>> > On Mon, 26 Feb 2024 14:33:18 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
>> >
>> > > The CPU is fast.  My HarfBuzz version is much older, but I doubt that
>> > > HarfBuzz became so much slower for Arabic.  So it's very strange.  But
>> > > maybe it's worth to try downgrading to an earlier version, just to be
>> > > sure this is not the culprit?
>> >
>> > That's not so straightforward on this system, where I build system
>> > packages from source, so downgrading HarfBuzz may require also
>> > rebuilding packages that depend on it.  I have a somewhat older system
>> > on this machine with HarfBuzz 7.1.0, so I can easily try that.  What
>> > version of HarfBuzz are you using?
>>
>> I have 2.4.0 here.
>
> Btw, another possibility could be that this is specific to the Cairo
> build.  So maybe try a build without Cairo.

I did, and the slowdown seems just as bad as in the build with Cairo.

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 15:17                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-26 15:52                   ` Eli Zaretskii
  2024-02-26 15:59                     ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-26 15:52 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Mon, 26 Feb 2024 16:17:53 +0100
> 
> On Mon, 26 Feb 2024 16:22:59 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> 
> >> Cc: 69385@debbugs.gnu.org
> >> Date: Mon, 26 Feb 2024 16:19:15 +0200
> >> From: Eli Zaretskii <eliz@gnu.org>
> >>
> >> > From: Stephen Berman <stephen.berman@gmx.net>
> >> > Cc: 69385@debbugs.gnu.org
> >> > Date: Mon, 26 Feb 2024 15:13:38 +0100
> >> >
> >> > On Mon, 26 Feb 2024 14:33:18 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> >> >
> >> > > The CPU is fast.  My HarfBuzz version is much older, but I doubt that
> >> > > HarfBuzz became so much slower for Arabic.  So it's very strange.  But
> >> > > maybe it's worth to try downgrading to an earlier version, just to be
> >> > > sure this is not the culprit?
> >> >
> >> > That's not so straightforward on this system, where I build system
> >> > packages from source, so downgrading HarfBuzz may require also
> >> > rebuilding packages that depend on it.  I have a somewhat older system
> >> > on this machine with HarfBuzz 7.1.0, so I can easily try that.  What
> >> > version of HarfBuzz are you using?
> >>
> >> I have 2.4.0 here.
> >
> > Btw, another possibility could be that this is specific to the Cairo
> > build.  So maybe try a build without Cairo.
> 
> I did, and the slowdown seems just as bad as in the build with Cairo.

Can you try the emacs-29 branch?





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 15:52                   ` Eli Zaretskii
@ 2024-02-26 15:59                     ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-26 16:36                       ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-26 15:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Mon, 26 Feb 2024 17:52:50 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69385@debbugs.gnu.org
>> Date: Mon, 26 Feb 2024 16:17:53 +0100
>>
>> On Mon, 26 Feb 2024 16:22:59 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
>>
>> >> Cc: 69385@debbugs.gnu.org
>> >> Date: Mon, 26 Feb 2024 16:19:15 +0200
>> >> From: Eli Zaretskii <eliz@gnu.org>
>> >>
>> >> > From: Stephen Berman <stephen.berman@gmx.net>
>> >> > Cc: 69385@debbugs.gnu.org
>> >> > Date: Mon, 26 Feb 2024 15:13:38 +0100
>> >> >
>> >> > On Mon, 26 Feb 2024 14:33:18 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
>> >> >
>> >> > > The CPU is fast.  My HarfBuzz version is much older, but I doubt that
>> >> > > HarfBuzz became so much slower for Arabic.  So it's very strange.  But
>> >> > > maybe it's worth to try downgrading to an earlier version, just to be
>> >> > > sure this is not the culprit?
>> >> >
>> >> > That's not so straightforward on this system, where I build system
>> >> > packages from source, so downgrading HarfBuzz may require also
>> >> > rebuilding packages that depend on it.  I have a somewhat older system
>> >> > on this machine with HarfBuzz 7.1.0, so I can easily try that.  What
>> >> > version of HarfBuzz are you using?
>> >>
>> >> I have 2.4.0 here.
>> >
>> > Btw, another possibility could be that this is specific to the Cairo
>> > build.  So maybe try a build without Cairo.
>>
>> I did, and the slowdown seems just as bad as in the build with Cairo.
>
> Can you try the emacs-29 branch?

I already did and see the same slowdown with it as with master.  (Or did
you mean try emacs-29 without Cairo?  That I haven't done, but given I
saw no noticeable difference on master, I wouldn't expect to see one on
emacs-29 either.)

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 15:59                     ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-26 16:36                       ` Eli Zaretskii
  2024-02-26 17:12                         ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-26 16:36 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Mon, 26 Feb 2024 16:59:46 +0100
> 
> On Mon, 26 Feb 2024 17:52:50 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> 
> >> From: Stephen Berman <stephen.berman@gmx.net>
> >> Cc: 69385@debbugs.gnu.org
> >> Date: Mon, 26 Feb 2024 16:17:53 +0100
> >>
> >> On Mon, 26 Feb 2024 16:22:59 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> >>
> >> >> Cc: 69385@debbugs.gnu.org
> >> >> Date: Mon, 26 Feb 2024 16:19:15 +0200
> >> >> From: Eli Zaretskii <eliz@gnu.org>
> >> >>
> >> >> > From: Stephen Berman <stephen.berman@gmx.net>
> >> >> > Cc: 69385@debbugs.gnu.org
> >> >> > Date: Mon, 26 Feb 2024 15:13:38 +0100
> >> >> >
> >> >> > On Mon, 26 Feb 2024 14:33:18 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> >> >> >
> >> >> > > The CPU is fast.  My HarfBuzz version is much older, but I doubt that
> >> >> > > HarfBuzz became so much slower for Arabic.  So it's very strange.  But
> >> >> > > maybe it's worth to try downgrading to an earlier version, just to be
> >> >> > > sure this is not the culprit?
> >> >> >
> >> >> > That's not so straightforward on this system, where I build system
> >> >> > packages from source, so downgrading HarfBuzz may require also
> >> >> > rebuilding packages that depend on it.  I have a somewhat older system
> >> >> > on this machine with HarfBuzz 7.1.0, so I can easily try that.  What
> >> >> > version of HarfBuzz are you using?
> >> >>
> >> >> I have 2.4.0 here.
> >> >
> >> > Btw, another possibility could be that this is specific to the Cairo
> >> > build.  So maybe try a build without Cairo.
> >>
> >> I did, and the slowdown seems just as bad as in the build with Cairo.
> >
> > Can you try the emacs-29 branch?
> 
> I already did and see the same slowdown with it as with master.  (Or did
> you mean try emacs-29 without Cairo?  That I haven't done, but given I
> saw no noticeable difference on master, I wouldn't expect to see one on
> emacs-29 either.)

I meant the emacs-29 branch in general, regardless of the exact
configuration.

I'm out of ideas, sorry.  The prominent effect of
bidi-display-reordering is especially puzzling.

Can you measure the time it takes to redraw the window after M->, with
and without bidi-display-reordering?  I'd like to have numbers here,
not just impressions.  For example, measure it with benchmark-run or
something similar.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 16:36                       ` Eli Zaretskii
@ 2024-02-26 17:12                         ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-26 19:18                           ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-26 17:12 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Mon, 26 Feb 2024 18:36:42 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

[...]
> Can you measure the time it takes to redraw the window after M->, with
> and without bidi-display-reordering?  I'd like to have numbers here,
> not just impressions.  For example, measure it with benchmark-run or
> something similar.

On master started with -Q in a buffer containing a single line
consisting of 800 repetitions of "السّلام عليكم Hello " (in the buffer
the string " Hello " was to the left of the Arabic string because I
yanked the latter first), with bidi-display-reordering at its default
value t and with point at point-min, running (benchmark-run nil
(end-of-buffer)) returned:

(5.249231941 1 0.014300497000000023)

After moving point back to point-min and setting bidi-display-reordering
to nil, running (benchmark-run nil (end-of-buffer)) again now returned:

(0.034058467 0 0.0)

Steve Berman 





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 17:12                         ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-26 19:18                           ` Eli Zaretskii
  2024-02-26 21:47                             ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-03-03 15:18                             ` Eli Zaretskii
  0 siblings, 2 replies; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-26 19:18 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Mon, 26 Feb 2024 18:12:04 +0100
> 
> On Mon, 26 Feb 2024 18:36:42 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> 
> [...]
> > Can you measure the time it takes to redraw the window after M->, with
> > and without bidi-display-reordering?  I'd like to have numbers here,
> > not just impressions.  For example, measure it with benchmark-run or
> > something similar.
> 
> On master started with -Q in a buffer containing a single line
> consisting of 800 repetitions of "السّلام عليكم Hello "

Oh, I think I see what's going on.  The buffer you create this way is
rendered as a paragraph with right-to-left base direction, right?
That is, it starts at the right side of the window, and C-f generally
moves to the left, yes?  By contrast, I thought you were doing this in
a buffer whose bidi-paragraph-direction is set to left-to-right, or
the text begins with Latin characters (as in "Arabic", the string the
begins the Arabic line in HELLO).

So now try your recipe, but set bidi-paragraph-direction to
left-to-right, or prepend a single ASCII character to the long line
(which will have the same effect on the base paragraph direction), and
then repeat your experiment, including the timings.  I think you will
see a big difference.

The reason is that, when a paragraph's direction is right-to-left,
inserting a new glyph into glyph matrices pushes all the previous
glyphs, thus reversing them on the fly.  Whereas in LTR paragraphs a
glyph is inserted by adding it to the end of the previous glyphs.  And
pushing is more expensive.  So now I understand why resetting
bidi-display-reordering had such a dramatic effect in your case: it
makes the paragraph render LTR as its side effect, which avoids the
costly pushing of glyphs.  In a very long line, this cost is very
high.

I will see if we can do better in this matter.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 19:18                           ` Eli Zaretskii
@ 2024-02-26 21:47                             ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-27  8:52                               ` Eli Zaretskii
  2024-03-03 15:18                             ` Eli Zaretskii
  1 sibling, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-26 21:47 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Mon, 26 Feb 2024 21:18:25 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69385@debbugs.gnu.org
>> Date: Mon, 26 Feb 2024 18:12:04 +0100
>> 
>> On Mon, 26 Feb 2024 18:36:42 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
>> 
>> [...]
>> > Can you measure the time it takes to redraw the window after M->, with
>> > and without bidi-display-reordering?  I'd like to have numbers here,
>> > not just impressions.  For example, measure it with benchmark-run or
>> > something similar.
>> 
>> On master started with -Q in a buffer containing a single line
>> consisting of 800 repetitions of "السّلام عليكم Hello "
>
> Oh, I think I see what's going on.  The buffer you create this way is
> rendered as a paragraph with right-to-left base direction, right?
> That is, it starts at the right side of the window, and C-f generally
> moves to the left, yes?

Correct.

>                          By contrast, I thought you were doing this in
> a buffer whose bidi-paragraph-direction is set to left-to-right, or
> the text begins with Latin characters (as in "Arabic", the string the
> begins the Arabic line in HELLO).
>
> So now try your recipe, but set bidi-paragraph-direction to
> left-to-right, or prepend a single ASCII character to the long line
> (which will have the same effect on the base paragraph direction), and
> then repeat your experiment, including the timings.  I think you will
> see a big difference.

I created the test buffer now by first typing "Hello" and the inserting
" السّلام عليكم " on the right, so the base paragraph direction was LTR.
Then I ran the benchmarks, and there is indeed a big difference, but one
that I think will surprise you.  First, the timing for the LTR run with
bidi-display-reordering set to nil was:

(0.035104007 0 0.0)

This is, unsurprisingly, almost the same as the corresponding test run
with RTL base paragraph direction, which was (0.034058467 0 0.0).

In contrast, recall that with bidi-display-reordering at the default
value t, the RTL test run was (5.249231941 1 0.014300497000000023), but
now the LTR test run gave this:

(10.613699099 1 0.012965359999999981)

Again, the only difference between the buffers is the order of the
strings and, consequently, the base paragraph direction.  Both buffers
consist of 800 copies of the strings and in both point-max is 16001.

The -- in view of your below explanation -- unexpectedly large timing
for the LTR buffer reminded me of the file in which I first encountered
the slowdown, which consists of a number of Emacs Lisp sexps.  The first
group are all ASCII characters, so the base paragraph direction is LTR.
Then there is a vector of 827 lists in a single line (remember, it's a
generated file), each list containing three strings, one in Arabic
script, one in English, one a transliteration of the Arabic which in
many cases uses non-ASCII characters.  The benchmark run for M-> in the
buffer visiting this file was:

(9.308704995000001 4 0.054923504999999984)

The buffer size here is considerably larger than the buffers for my test
runs; I couldn't remember it exactly, so I typed `M-: (point)' in the
buffer, with the result 43901.  It took a number of seconds for the
result to be displayed, during which Emacs was unresponsive, so I then
ran (benchmark-run nil (point)) in that buffer, with this result:

(9.030000000000001e-07 0 0.0)

I don't know what this result means, but the reported execution time
bears no relation to actual elapsed time until the value of point was
displayed.  So I reran the benchmark and also manually timed it with a
stopwatch.  This is the result of the second benchmark:

(3.1120000000000004e-06 0 0.0)

However, the stopwatch showed fully 15 seconds.  Maybe benchmark-run
doesn't work for point for some reason.  Given my doubts, I reran the
benchmark on the test LTR buffer, but the reported execution time was
only slightly different from before:

(10.317616279000001 0 0.0)

What do you make of these results?

> The reason is that, when a paragraph's direction is right-to-left,
> inserting a new glyph into glyph matrices pushes all the previous
> glyphs, thus reversing them on the fly.  Whereas in LTR paragraphs a
> glyph is inserted by adding it to the end of the previous glyphs.  And
> pushing is more expensive.  So now I understand why resetting
> bidi-display-reordering had such a dramatic effect in your case: it
> makes the paragraph render LTR as its side effect, which avoids the
> costly pushing of glyphs.  In a very long line, this cost is very
> high.

This sounds plausible, but my results seem to indicate there something
else (or more) going on.

> I will see if we can do better in this matter.

I appreciate whatever you can do.

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 21:47                             ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-27  8:52                               ` Eli Zaretskii
  2024-02-27 10:13                                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-02-27  8:52 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Mon, 26 Feb 2024 22:47:21 +0100
> 
> I created the test buffer now by first typing "Hello" and the inserting
> " السّلام عليكم " on the right, so the base paragraph direction was LTR.
> Then I ran the benchmarks, and there is indeed a big difference, but one
> that I think will surprise you.

It doesn't, see below.

> First, the timing for the LTR run with bidi-display-reordering set
> to nil was:
> 
> (0.035104007 0 0.0)
> 
> This is, unsurprisingly, almost the same as the corresponding test run
> with RTL base paragraph direction, which was (0.034058467 0 0.0).
> 
> In contrast, recall that with bidi-display-reordering at the default
> value t, the RTL test run was (5.249231941 1 0.014300497000000023), but
> now the LTR test run gave this:
> 
> (10.613699099 1 0.012965359999999981)

Yes, that's the result of the fix I installed yesterday: it makes the
display correct, but it costs more CPU, sometimes much more.

To see why this is so costly, disable auto-composition-mode in the
buffer, and compare the times with bidi-display-reordering nil and
non-nil.  With auto-composition-mode disabled, you see the effect of
the reordering alone (because characters are still reordered for
display, just not shaped correctly, as C-f will show you), and it
should be quite small; at least, that's what I see here.  The
(mandatory) shaping of Arabic text is what takes most of the redisplay
time in these cases.  In particular, M-> does a recenter to show EOB
nicely, and that is very expensive in this case; disable that
recentering by using "(goto-char (point-max))" instead to see the
difference.

> The buffer size here is considerably larger than the buffers for my test
> runs; I couldn't remember it exactly, so I typed `M-: (point)' in the
> buffer, with the result 43901.  It took a number of seconds for the
> result to be displayed, during which Emacs was unresponsive, so I then
> ran (benchmark-run nil (point)) in that buffer, with this result:
> 
> (9.030000000000001e-07 0 0.0)
> 
> I don't know what this result means, but the reported execution time
> bears no relation to actual elapsed time until the value of point was
> displayed.  So I reran the benchmark and also manually timed it with a
> stopwatch.  This is the result of the second benchmark:
> 
> (3.1120000000000004e-06 0 0.0)
> 
> However, the stopwatch showed fully 15 seconds.  Maybe benchmark-run
> doesn't work for point for some reason.

A Lisp program that just calls '(point)' doesn't include the redisplay
caused by "M-:", which enters the minibuffer, and therefore triggers a
fairly thorough redisplay of the window, and by display of the result.
That's Emacs's MVC design in action for you.

> This sounds plausible, but my results seem to indicate there something
> else (or more) going on.

Yes: that something is character composition, which in the case of
Arabic text is quite expensive, because every chunk of Arabic text
between SPACEs goes through the shaping engine.

(This explains well why Emacs tries so hard to call the shaper only
when absolutely necessary, contrary to HarfBuzz folks' opinions that
we should pass all the text through the shaping engine, to get correct
display with ligatures, kerning, and other niceties.  They are right,
of course, but with the way character composition was designed in
Emacs, doing so would be prohibitive from the performance POV.)

> > I will see if we can do better in this matter.
> 
> I appreciate whatever you can do.

From what I've seen so far, it won't be easy, because it requires
changes to some key logic in the display code.  Hmm...





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-27  8:52                               ` Eli Zaretskii
@ 2024-02-27 10:13                                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-27 10:13 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Tue, 27 Feb 2024 10:52:23 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69385@debbugs.gnu.org
>> Date: Mon, 26 Feb 2024 22:47:21 +0100
>> 
>> I created the test buffer now by first typing "Hello" and the inserting
>> " السّلام عليكم " on the right, so the base paragraph direction was LTR.
>> Then I ran the benchmarks, and there is indeed a big difference, but one
>> that I think will surprise you.
>
> It doesn't, see below.
>
>> First, the timing for the LTR run with bidi-display-reordering set
>> to nil was:
>> 
>> (0.035104007 0 0.0)
>> 
>> This is, unsurprisingly, almost the same as the corresponding test run
>> with RTL base paragraph direction, which was (0.034058467 0 0.0).
>> 
>> In contrast, recall that with bidi-display-reordering at the default
>> value t, the RTL test run was (5.249231941 1 0.014300497000000023), but
>> now the LTR test run gave this:
>> 
>> (10.613699099 1 0.012965359999999981)
>
> Yes, that's the result of the fix I installed yesterday: it makes the
> display correct, but it costs more CPU, sometimes much more.

My recollection is that I ran the benchmarks before updating master with
your fix, but perhaps I misremember.  So I just now ran the benchmarks
for the default value of bidi-display-reordering again on emacs-29,
which does not have your fix.  Here is the result for the buffer with
RTL base paragraph direction:

(5.334990188 0 0.0)

And for the buffer with LTR base paragraph direction:

(10.537410334999999 1 0.011070665000000035)

And I ran them again on master now, to be sure I'm testing with your
fix; here are the respective results:

(5.350407252 1 0.013722977000000025)
(10.55348192 1 0.014691314999999983)

So practically the same difference without and with your fix.

> To see why this is so costly, disable auto-composition-mode in the
> buffer, and compare the times with bidi-display-reordering nil and
> non-nil.  With auto-composition-mode disabled, you see the effect of
> the reordering alone (because characters are still reordered for
> display, just not shaped correctly, as C-f will show you), and it
> should be quite small; at least, that's what I see here.  The

This I can confirm (on master with your fix); in the RTL buffer with
bidi-display-reordering first t and then nil:

(0.049796204999999996 0 0.0)
(0.033475448 0 0.0)

and likewise in the LRT buffer:

(0.049654598 0 0.0)
(0.033401513 0 0.0)

> (mandatory) shaping of Arabic text is what takes most of the redisplay
> time in these cases.  In particular, M-> does a recenter to show EOB
> nicely, and that is very expensive in this case; disable that
> recentering by using "(goto-char (point-max))" instead to see the
> difference.

I guess by "does a recenter to show EOB nicely" you mean the call of
(recenter -3) at the end of the code in end-of-buffer, because after
calling (goto-char (point-max)) the last line is vertically centered in
the window?

>> The buffer size here is considerably larger than the buffers for my test
>> runs; I couldn't remember it exactly, so I typed `M-: (point)' in the
>> buffer, with the result 43901.  It took a number of seconds for the
>> result to be displayed, during which Emacs was unresponsive, so I then
>> ran (benchmark-run nil (point)) in that buffer, with this result:
>> 
>> (9.030000000000001e-07 0 0.0)
>> 
>> I don't know what this result means, but the reported execution time
>> bears no relation to actual elapsed time until the value of point was
>> displayed.  So I reran the benchmark and also manually timed it with a
>> stopwatch.  This is the result of the second benchmark:
>> 
>> (3.1120000000000004e-06 0 0.0)
>> 
>> However, the stopwatch showed fully 15 seconds.  Maybe benchmark-run
>> doesn't work for point for some reason.
>
> A Lisp program that just calls '(point)' doesn't include the redisplay
> caused by "M-:", which enters the minibuffer, and therefore triggers a
> fairly thorough redisplay of the window, and by display of the result.
> That's Emacs's MVC design in action for you.

Ah, ok; thanks for the explanation.

>> This sounds plausible, but my results seem to indicate there something
>> else (or more) going on.
>
> Yes: that something is character composition, which in the case of
> Arabic text is quite expensive, because every chunk of Arabic text
> between SPACEs goes through the shaping engine.
>
> (This explains well why Emacs tries so hard to call the shaper only
> when absolutely necessary, contrary to HarfBuzz folks' opinions that
> we should pass all the text through the shaping engine, to get correct
> display with ligatures, kerning, and other niceties.  They are right,
> of course, but with the way character composition was designed in
> Emacs, doing so would be prohibitive from the performance POV.)
>
>> > I will see if we can do better in this matter.
>> 
>> I appreciate whatever you can do.
>
>>From what I've seen so far, it won't be easy, because it requires
> changes to some key logic in the display code.  Hmm...

I'm afraid I can't help with the display code logic, but I'm happy to
test any ideas you have.

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-02-26 19:18                           ` Eli Zaretskii
  2024-02-26 21:47                             ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-03-03 15:18                             ` Eli Zaretskii
  2024-03-04 13:28                               ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-03-03 15:18 UTC (permalink / raw)
  To: stephen.berman; +Cc: 69385

> Cc: 69385@debbugs.gnu.org
> Date: Mon, 26 Feb 2024 21:18:25 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> 
> The reason is that, when a paragraph's direction is right-to-left,
> inserting a new glyph into glyph matrices pushes all the previous
> glyphs, thus reversing them on the fly.  Whereas in LTR paragraphs a
> glyph is inserted by adding it to the end of the previous glyphs.  And
> pushing is more expensive.  So now I understand why resetting
> bidi-display-reordering had such a dramatic effect in your case: it
> makes the paragraph render LTR as its side effect, which avoids the
> costly pushing of glyphs.  In a very long line, this cost is very
> high.
> 
> I will see if we can do better in this matter.

Actually, the fact that glyphs are pushed is not the culprit here,
since we only push as many glyphs as fit in a screen line, and that
cannot be too many.

The real culprit is the way we look for the next (actually, previous)
composition that includes the given buffer position, when we scan
characters backward (due to reordering).  The current code causes us
to scan all the way to BOB, which is especially painful with long
lines without newlines.

I've coded an optimization for that, see the patch below.  Could you
please try running with this patch for a week or two, and see if you
can spot any problems?  I hope you are editing those files with
embedded Arabic frequently enough for these changes to be exercised.

If you see no problems after a week or two, I will install this.

Thanks.

diff --git a/src/bidi.c b/src/bidi.c
index 36d1a04..306b44a 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -754,6 +754,16 @@ bidi_cache_find_level_change (int level, int dir, bool before)
   return -1;
 }
 
+ptrdiff_t
+bidi_level_start (int level)
+{
+  ptrdiff_t slot = bidi_cache_find_level_change (level, -1, true);
+
+  if (slot >= 0)
+    return bidi_cache[slot].charpos;
+  return -1;
+}
+
 static void
 bidi_cache_ensure_space (ptrdiff_t idx)
 {
diff --git a/src/dispextern.h b/src/dispextern.h
index 5387cb4..1c3232f 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3438,6 +3438,7 @@ #define TTY_CAP_STRIKE_THROUGH	0x20
 extern void *bidi_shelve_cache (void);
 extern void bidi_unshelve_cache (void *, bool);
 extern ptrdiff_t bidi_find_first_overridden (struct bidi_it *);
+extern ptrdiff_t bidi_level_start (int);
 
 /* Defined in xdisp.c */
 
diff --git a/src/xdisp.c b/src/xdisp.c
index d03769e..140d711 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -4353,7 +4353,7 @@ compute_stop_pos (struct it *it)
          an automatic composition, limit the search of composable
          characters to that position.  */
       if (it->bidi_p && it->bidi_it.scan_dir < 0)
-	stoppos = -1;
+	stoppos = bidi_level_start (it->bidi_it.resolved_level) - 1;
       else if (!STRINGP (it->string)
 	       && it->cmp_it.stop_pos <= IT_CHARPOS (*it)
 	       && cmp_limit_pos > 0)
@@ -8712,9 +8712,8 @@ set_iterator_to_next (struct it *it, bool reseat_p)
 	      ptrdiff_t stop = it->end_charpos;
 
 	      if (it->bidi_it.scan_dir < 0)
-		/* Now we are scanning backward and don't know
-		   where to stop.  */
-		stop = -1;
+		/* Now we are scanning backward; figure out where to stop.  */
+		stop = bidi_level_start (it->bidi_it.resolved_level) - 1;
 	      composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
 					    IT_BYTEPOS (*it), stop, Qnil, true);
 	    }
@@ -8745,7 +8744,7 @@ set_iterator_to_next (struct it *it, bool reseat_p)
 		     re-compute the stop position for composition.  */
 		  ptrdiff_t stop = it->end_charpos;
 		  if (it->bidi_it.scan_dir < 0)
-		    stop = -1;
+		    stop = bidi_level_start (it->bidi_it.resolved_level) - 1;
 		  composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
 						IT_BYTEPOS (*it), stop, Qnil,
 						true);
@@ -9190,7 +9189,9 @@ get_visually_first_element (struct it *it)
 	  bytepos = IT_BYTEPOS (*it);
 	}
       if (it->bidi_it.scan_dir < 0)
-	stop = -1;
+	stop = STRINGP (it->string)
+	       ? -1
+	       : bidi_level_start (it->bidi_it.resolved_level) - 1;
       composition_compute_stop_pos (&it->cmp_it, charpos, bytepos, stop,
 				    it->string, true);
     }
@@ -9694,9 +9695,10 @@ next_element_from_buffer (struct it *it)
 		    && PT < it->end_charpos) ? PT : it->end_charpos;
 	}
       else
-	stop = it->bidi_it.scan_dir < 0 ? -1 : it->end_charpos;
-      if (CHAR_COMPOSED_P (it, IT_CHARPOS (*it), IT_BYTEPOS (*it),
-			   stop)
+	stop = it->bidi_it.scan_dir < 0
+	       ? bidi_level_start (it->bidi_it.resolved_level) - 1
+	       : it->end_charpos;
+      if (CHAR_COMPOSED_P (it, IT_CHARPOS (*it), IT_BYTEPOS (*it), stop)
 	  && next_element_from_composition (it))
 	{
 	  return true;





^ permalink raw reply related	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-03-03 15:18                             ` Eli Zaretskii
@ 2024-03-04 13:28                               ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-03-04 14:43                                 ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-03-04 13:28 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

On Sun, 03 Mar 2024 17:18:31 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> Cc: 69385@debbugs.gnu.org
>> Date: Mon, 26 Feb 2024 21:18:25 +0200
>> From: Eli Zaretskii <eliz@gnu.org>
>>
>> The reason is that, when a paragraph's direction is right-to-left,
>> inserting a new glyph into glyph matrices pushes all the previous
>> glyphs, thus reversing them on the fly.  Whereas in LTR paragraphs a
>> glyph is inserted by adding it to the end of the previous glyphs.  And
>> pushing is more expensive.  So now I understand why resetting
>> bidi-display-reordering had such a dramatic effect in your case: it
>> makes the paragraph render LTR as its side effect, which avoids the
>> costly pushing of glyphs.  In a very long line, this cost is very
>> high.
>>
>> I will see if we can do better in this matter.
>
> Actually, the fact that glyphs are pushed is not the culprit here,
> since we only push as many glyphs as fit in a screen line, and that
> cannot be too many.
>
> The real culprit is the way we look for the next (actually, previous)
> composition that includes the given buffer position, when we scan
> characters backward (due to reordering).  The current code causes us
> to scan all the way to BOB, which is especially painful with long
> lines without newlines.
>
> I've coded an optimization for that, see the patch below.  Could you
> please try running with this patch for a week or two, and see if you
> can spot any problems?

I applied the patch, rebuilt, started with -Q, made two test buffers
using 800 concatenated copies of a bidirectional Arabic + English
string, one with base paragraph direction RTL, one with LTR, and ran the
end-of-buffer benchmark; here are the results:

RTL with patch: (0.099171108 0 0.0)
LTR with patch: (0.143149541 1 0.01330051900000001)

Here for comparison my previous results without your patch:

RTL without patch: (5.249231941 1 0.014300497000000023)
LTR without patch: (10.613699099 1 0.012965359999999981)

That's more than 50 times faster for the RTL test and more than 70 times
faster for the LTR test -- impressive!

>                         I hope you are editing those files with
> embedded Arabic frequently enough for these changes to be exercised.

As I mentioned previously, my real files are programmatically generated
elisp files (so base paragraph direction LTR) not meant to be manually
edited or even just viewed by users of the program, and I haven't edited
them manually, and normally wouldn't.  But I just now ran the
end-of-buffer benchmark on one of them (the one I described previous,
containing a vector of 827 lists of bidirectional strings in a single
line), with this result:

(0.849369497 4 0.05337466599999996)

This was the timing without your patch:

(9.308704995000001 4 0.054923504999999984)

So for this file your patch yields "only" an almost 11 times faster
benchmark.  For navigation besides M-> and M-<, I find C-v, M-v, C-n,
C-p in the buffer visiting this file still very slow (noticeably more
than in the test buffers) and holding them down still freezes Emacs
(with C-n and C-p for many seconds) and uses 100% of a CPU core; though,
while I haven't tried timing these yet, my impression is that the
freezes are not as long as the ones I observed without your patch.
Also, there is still a marked delay when entering the minibuffer with
M-x or M-: or when switching to another buffer with C-x b, though
impressionistically no worse than the delays without your patch.  I'll
try to do more testing.

> If you see no problems after a week or two, I will install this.

Thanks.

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-03-04 13:28                               ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-03-04 14:43                                 ` Eli Zaretskii
  2024-03-07 11:12                                   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-03-04 14:43 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Mon, 04 Mar 2024 14:28:50 +0100
> 
> On Sun, 03 Mar 2024 17:18:31 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
> 
> I applied the patch, rebuilt, started with -Q, made two test buffers
> using 800 concatenated copies of a bidirectional Arabic + English
> string, one with base paragraph direction RTL, one with LTR, and ran the
> end-of-buffer benchmark; here are the results:
> 
> RTL with patch: (0.099171108 0 0.0)
> LTR with patch: (0.143149541 1 0.01330051900000001)
> 
> Here for comparison my previous results without your patch:
> 
> RTL without patch: (5.249231941 1 0.014300497000000023)
> LTR without patch: (10.613699099 1 0.012965359999999981)
> 
> That's more than 50 times faster for the RTL test and more than 70 times
> faster for the LTR test -- impressive!
> 
> >                         I hope you are editing those files with
> > embedded Arabic frequently enough for these changes to be exercised.
> 
> As I mentioned previously, my real files are programmatically generated
> elisp files (so base paragraph direction LTR) not meant to be manually
> edited or even just viewed by users of the program, and I haven't edited
> them manually, and normally wouldn't.  But I just now ran the
> end-of-buffer benchmark on one of them (the one I described previous,
> containing a vector of 827 lists of bidirectional strings in a single
> line), with this result:
> 
> (0.849369497 4 0.05337466599999996)
> 
> This was the timing without your patch:
> 
> (9.308704995000001 4 0.054923504999999984)
> 
> So for this file your patch yields "only" an almost 11 times faster
> benchmark.  For navigation besides M-> and M-<, I find C-v, M-v, C-n,
> C-p in the buffer visiting this file still very slow (noticeably more
> than in the test buffers) and holding them down still freezes Emacs
> (with C-n and C-p for many seconds) and uses 100% of a CPU core; though,
> while I haven't tried timing these yet, my impression is that the
> freezes are not as long as the ones I observed without your patch.
> Also, there is still a marked delay when entering the minibuffer with
> M-x or M-: or when switching to another buffer with C-x b, though
> impressionistically no worse than the delays without your patch.  I'll
> try to do more testing.

Thanks for testing.  The above matches what I see on my system.  C-n
and C-p is known to be problematic in long lines, but these changes
speed them up as well, although perhaps not as well as the other
commands.

> > If you see no problems after a week or two, I will install this.
> 
> Thanks.

So I will wait for you to report any problems, and if no problems are
seen, will install in a week or so.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-03-04 14:43                                 ` Eli Zaretskii
@ 2024-03-07 11:12                                   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-03-07 11:25                                     ` Eli Zaretskii
  2024-03-21  8:29                                     ` Eli Zaretskii
  0 siblings, 2 replies; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-03-07 11:12 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385

[-- Attachment #1: Type: text/plain, Size: 5086 bytes --]

On Mon, 04 Mar 2024 16:43:26 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69385@debbugs.gnu.org
>> Date: Mon, 04 Mar 2024 14:28:50 +0100
>>
>> On Sun, 03 Mar 2024 17:18:31 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
[...]
>> >                         I hope you are editing those files with
>> > embedded Arabic frequently enough for these changes to be exercised.
>>
>> As I mentioned previously, my real files are programmatically generated
>> elisp files (so base paragraph direction LTR) not meant to be manually
>> edited or even just viewed by users of the program, and I haven't edited
>> them manually, and normally wouldn't.  But I just now ran the
>> end-of-buffer benchmark on one of them (the one I described previous,
>> containing a vector of 827 lists of bidirectional strings in a single
>> line), with this result:
>>
>> (0.849369497 4 0.05337466599999996)
>>
>> This was the timing without your patch:
>>
>> (9.308704995000001 4 0.054923504999999984)
>>
>> So for this file your patch yields "only" an almost 11 times faster
>> benchmark.  For navigation besides M-> and M-<, I find C-v, M-v, C-n,
>> C-p in the buffer visiting this file still very slow (noticeably more
>> than in the test buffers) and holding them down still freezes Emacs
>> (with C-n and C-p for many seconds) and uses 100% of a CPU core; though,
>> while I haven't tried timing these yet, my impression is that the
>> freezes are not as long as the ones I observed without your patch.
>> Also, there is still a marked delay when entering the minibuffer with
>> M-x or M-: or when switching to another buffer with C-x b, though
>> impressionistically no worse than the delays without your patch.  I'll
>> try to do more testing.
>
> Thanks for testing.  The above matches what I see on my system.  C-n
> and C-p is known to be problematic in long lines, but these changes
> speed them up as well, although perhaps not as well as the other
> commands.
>
>> > If you see no problems after a week or two, I will install this.
>>
>> Thanks.
>
> So I will wait for you to report any problems, and if no problems are
> seen, will install in a week or so.

I haven't yet run into any issues concerning your patch, but I have
encountered a problem with another one of my generated files, which,
though independent of your patch (the problem also happens in emacs-29),
is an issue for bidirectional text in Emacs, so might be worth trying to
handle better.  If you want, I can open a separate bug to pursue this
issue, but for now I'll summarize what I've observed so far.

Most of the Arabic words in the problematic file are enclosed in the
bidirectional control characters POP DIRECTIONAL FORMATTING (#x202c) and
RIGHT-TO-LEFT EMBEDDING (#x202b).  I did not add these characters, but I
had copy-&-pasted most of the Arabic from a PDF file I did not create.
I don't know if PDFs of Arabic text normally contain these control
characters, but the consequences for Emacs were dramatic.  When I simply
visited this file in Emacs (started with -Q) there was an immediate
slowdown, and in top I could see Emacs using 100% of a CPU thread.  When
I ran the end-of-buffer benchmark on this file, the result (with your
patch) was:

(27.962602113 2 0.0226042269999999977)

However, the display of that result only appeared in the echo area after
more than a minute (I timed it with a stopwatch).  At that point the
mode line showed the buffer at 4% from the top, and the display remained
frozen afterwards.  After several minutes during which Emacs consumed
100% CPU, and I had switched the focus away from the Emacs frame, the
CPU consumption stopped, but as soon as I switch focus back to that
frame, it went back to 100%.  The display never changed from showing the
buffer at 4%, apparently being in some kind of infinite loop.  After
about 15 minutes I started gdb, attached the Emacs process and produced
a backtrace, which I've attached, in the hope it helps to diagnose the
problem.

The problem seems to be certainly related the the bidirectional control
characters, because I made a copy of the file and removed all
occurrences of these control characters from it, and then ran the
end-of-buffer benchmark, getting this result (with your patch):

(0.716104165 4 0.04223660400000001)

And the display updated normally and CPU consumption was normal.

Nevertheless, there seems to be something else besides the control
characters involved in this issue, because as a futher test, I created a
buffer consisting of more than 1000 copies of the test string
concatenating the Arabic example in etc/HELLO and "Hello", and manually
enclosed each Arabic word in the above control characters, but the
benchmark result in this buffer was not significantly different from the
result without the control characters (and similar to the above result
for the copy of the problematic file without the control characters),
and the display did not freeze.

Steve Berman


[-- Attachment #2: gdb backtrace --]
[-- Type: text/plain, Size: 335356 bytes --]

steve [ ~ ]$ cd ~/build/emacs-master/
steve [ ~/build/emacs-master ]$ cd src/
steve [ ~/build/emacs-master/src ]$ gdb attach 5190
GNU gdb (GDB) 14.1
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
attach: No such file or directory.
Attaching to process 5190
[New LWP 5191]
[New LWP 5192]
[New LWP 5193]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
0x0000555dfeecedd0 in string_char_and_length (
    p=0x555e01ec19f5 "a\" \"Wasser\") (\"‫ماشي‬ ‫صحيح‬\" \"ma-šī ṣḥīḥ\" \"falsch\") (\"مقانة\" \"magāna\" \"Armbanduhr (sg)\") (\"‫المدينة‬\" \"mdīna\" \"Stadt\") (\"‫المراة‬\" \"mṛa\" \"Frau\")"..., length=length@entry=0x7ffdd653c914)
    at /home/steve/src/emacs/emacs-master/src/character.h:375
375	  int c = p[0];
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) [answered Y; input not from terminal]
DISPLAY = :0.0
TERM = dumb
Breakpoint 1 at 0x555dfedf62b5: file /home/steve/src/emacs/emacs-master/src/emacs.c, line 441.
Breakpoint 2 at 0x555dfedba401: file /home/steve/src/emacs/emacs-master/src/xterm.c, line 26955.
(gdb) bt full
#0  0x0000555dfeecedd0 in string_char_and_length
    (p=0x555e01ec19f5 "a\" \"Wasser\") (\"‫ماشي‬ ‫صحيح‬\" \"ma-šī ṣḥīḥ\" \"falsch\") (\"مقانة\" \"magāna\" \"Armbanduhr (sg)\") (\"‫المدينة‬\" \"mdīna\" \"Stadt\") (\"‫المراة‬\" \"mṛa\" \"Frau\")"..., length=length@entry=0x7ffdd653c914)
    at /home/steve/src/emacs/emacs-master/src/character.h:375
        c = <optimized out>
        d = <optimized out>
#1  0x0000555dfeecef2c in fetch_char_advance
    (charidx=charidx@entry=0x7ffdd653c998, byteidx=byteidx@entry=0x7ffdd653c990)
    at /home/steve/src/emacs/emacs-master/src/buffer.h:1652
        chlen = 1
        output = <optimized out>
        c = 715
        b = 853
        chp = <optimized out>
#2  0x0000555dfeed1646 in composition_compute_stop_pos
    (cmp_it=cmp_it@entry=0x7ffdd6548610, charpos=<optimized out>, 
    charpos@entry=712, bytepos=<optimized out>, 
    bytepos@entry=851, endpos=1212, string=XIL(0), include_static=include_static@entry=false) at /home/steve/src/emacs/emacs-master/src/composite.c:1111
        start = 712
        end = 93862197235720
        c = <optimized out>
        prop = XIL(0x15b0840)
        val = <optimized out>
#3  0x0000555dfed1a823 in compute_stop_pos (it=it@entry=0x7ffdd6547d50)
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:4364
        stoppos = <optimized out>
        iv = 0x555e01417370
        next_iv = <optimized out>
        object = <optimized out>
        limit = <optimized out>
        position = make_fixnum(712)
        charpos = 712
        bytepos = 851
        cmp_limit_pos = 816
#4  0x0000555dfed29110 in handle_stop_backwards
    (it=it@entry=0x7ffdd6547d50, charpos=712)
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:9547
        bufp = <optimized out>
        where_we_are = 40034
        save_current = {
          pos = {
            charpos = 40034,
            bytepos = 53054
          },
          overlay_string_index = -1,
          string_pos = {
            charpos = -1,
            bytepos = -1
          },
          dpvec_index = -1
        }
        save_position = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        save_cmp_it = {
          stop_pos = 40036,
          id = -1,
          ch = -2,
          rule_idx = 0,
          lookback = 3,
          nglyphs = 4,
          reversed_p = false,
          parent_it = 0x7ffdd6547d50,
          charpos = 40037,
          nchars = 1,
          nbytes = 2,
          from = 0,
          to = 1,
          width = 1
        }
        pos1 = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        next_stop = <optimized out>
#5  0x0000555dfed30888 in next_element_from_buffer (it=0x7ffdd6547d50)
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:9671
        success_p = true
#6  0x0000555dfed2f04d in get_next_display_element (it=it@entry=0x7ffdd6547d50)
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:8209
        success_p = <optimized out>
#7  0x0000555dfed31001 in move_it_in_display_line_to
    (it=it@entry=0x7ffdd6547d50, to_charpos=to_charpos@entry=-1, to_x=to_x@entry=-1, op=op@entry=0) at /home/steve/src/emacs/emacs-master/src/xdisp.c:10000
        x = <optimized out>
        i = <optimized out>
        ascent = 0
        descent = 0
        result = MOVE_UNDEFINED
        saved_glyph_row = <optimized out>
        wrap_it = {
          window = XIL(0x7fffffff),
          w = 0x7f4fe8869d9c <g_main_context_iterate_unlocked.isra+348>,
          f = 0x7ffdd653cc90,
          method = GET_FROM_BUFFER,
          stop_charpos = 2147483647,
          prev_stop = 3129692744534274048,
          base_level_stop = 140728199269584,
          end_charpos = 93862224957552,
          medium_narrowing_begv = 140728199269696,
          medium_narrowing_zv = 93862227212832,
          large_narrowing_begv = 0,
          large_narrowing_zv = 0,
          s = 0x0,
          string_nchars = 139981180282385,
          multibyte_p = false,
          tab_line_p = false,
          header_line_p = false,
          string_from_display_prop_p = false,
          string_from_prefix_prop_p = false,
          from_disp_prop_p = false,
          ellipsis_p = true,
          avoid_cursor_p = false,
          dp = 0x0,
          dpvec = 0x7ffdd653cd40,
          dpend = 0x555dfee031fc <unblock_input+18>,
          dpvec_char_len = 0,
          dpvec_face_id = 0,
          saved_face_id = -19160126,
          ctl_chars = {XIL(0x140), XIL(0x555e009cf588), XIL(0x7f4fd92963a0), make_fixnum(23465549106254), XIL(0), XIL(0), XIL(0x1e5b), XIL(0x555dfed8e64b), XIL(0), XIL(0), XIL(0x1e5b), XIL(0x555dfee6d1e3), XIL(0x555dfee4209c), XIL(0x120), XIL(0), XIL(0)},
          start = {
            pos = {
              charpos = 0,
              bytepos = 93862196864775
            },
            overlay_string_index = 2,
            string_pos = {
              charpos = 93862196683681,
              bytepos = 93862238029888
            },
            dpvec_index = 0
          },
          current = {
            pos = {
              charpos = 140728199273472,
              bytepos = 3129692744534274048
            },
            overlay_string_index = 10,
            string_pos = {
              charpos = 140728199273472,
              bytepos = 10
            },
            dpvec_index = -18595865
          },
          n_overlay_strings = 0,
          overlay_strings_charpos = 0,
          overlay_strings = {XIL(0x555e01742f88), XIL(0), XIL(0x1e5b), XIL(0x555dfee6d1e3), make_fixnum(192), XIL(0x140), XIL(0), XIL(0), XIL(0), XIL(0x555dfee6d1e3), XIL(0x555dfee4209c), XIL(0x140), XIL(0), XIL(0), XIL(0), XIL(0x555dfee6e707)},
          string_overlays = {make_fixnum(0), XIL(0x555dfee423a1), XIL(0x555e015b0840), XIL(0), XIL(0x7ffdd653dce0), XIL(0x2b6ee6f826153000), make_fixnum(2), XIL(0x7ffdd653dce0), make_fixnum(2), XIL(0x555dfee43fe7), XIL(0), XIL(0), XIL(0x555e01742f88), XIL(0x7ffdd653dd10), XIL(0xc), XIL(0x555dfee43fe7)},
          string = XIL(0),
          from_overlay = XIL(0),
          stack = {{
              string = XIL(0x555e01742f88),
              string_nchars = -699150560,
              end_charpos = 4294967296,
              stop_charpos = 3,
              prev_stop = 4294967296,
              base_level_stop = 4607182418800017408,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 770,
                rule_idx = 93862195947083,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x302,
                charpos = 93862196859363,
                nchars = -18603876,
                nbytes = 21853,
                from = 288,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0x555dfee6e707),
                    y = make_fixnum(0),
                    width = XIL(0x555dfee423a1),
                    height = XIL(0x555e015b0840)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 140728199274000,
                bytepos = 3129692744534274048
              },
              current = {
                pos = {
                  charpos = 10,
                  bytepos = 140728199274000
                },
                overlay_string_index = 10,
                string_pos = {
                  charpos = 93862196690919,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0x555e01742f88),
              area = RIGHT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = (unknown: 0xd653d050),
              multibyte_p = true,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = true,
              display_ellipsis_p = true,
              avoid_cursor_p = true,
              bidi_p = true,
              from_disp_prop_p = true,
              line_wrap = (unknown: 0xd653d290),
              voffset = 32765,
              space_width = XIL(0x4020000000000000),
              font_height = make_fixnum(34995296073782)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 4607182418800017432,
              stop_charpos = 0,
              prev_stop = 140728199270512,
              base_level_stop = 140728199270512,
              cmp_it = {
                stop_pos = 4294967296,
                id = 3,
                ch = 0,
                rule_idx = 4607182418800017408,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x3ff0000000000000,
                charpos = -4602678819172646912,
                nchars = 0,
                nbytes = -1068433408,
                from = 0,
                to = 1072693248,
                width = 0
              },
              face_id = 638922752,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0x555e008eba30),
                    y = XIL(0x555e008eba30),
                    width = XIL(0x7f4fe86c8b00),
                    height = XIL(0x555e008eba30)
                  },
                  image_id = 60824584
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 93862224640560,
                bytepos = 139981178528230
              },
              current = {
                pos = {
                  charpos = 93862236179456,
                  bytepos = 93862236179456
                },
                overlay_string_index = -632,
                string_pos = {
                  charpos = 11,
                  bytepos = 93862236383136
                },
                dpvec_index = -699149680
              },
              from_overlay = XIL(0x7ffdd653d260),
              area = -562206449,
              method = 32591,
              paragraph_embedding = (unknown: 0x13ecc00),
              multibyte_p = false,
              string_from_display_prop_p = true,
              string_from_prefix_prop_p = true,
              display_ellipsis_p = true,
              avoid_cursor_p = true,
              bidi_p = false,
              from_disp_prop_p = true,
              line_wrap = (unknown: 0x26153000),
              voffset = -6408,
              space_width = XIL(0x555e013ecc00),
              font_height = XIL(0x555e00a18400)
            }, {
              string = XIL(0x1),
              string_nchars = -389616844,
              end_charpos = 93862236383136,
              stop_charpos = 93862247499248,
              prev_stop = 93862247499248,
              base_level_stop = 139981184293487,
              cmp_it = {
                stop_pos = 93862228119120,
                id = 139981184293732,
                ch = 0,
                rule_idx = 93862228985664,
                lookback = 0,
                nglyphs = -389358438,
                reversed_p = 79,
                parent_it = 0x0,
                charpos = 93862228985664,
                nchars = 0,
                nbytes = 0,
                from = -382242417,
                to = 32591,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0x4020000000000000),
                  slice = {
                    x = XIL(0x4044000000000000),
                    y = XIL(0x7f4fe98f61c0),
                    width = XIL(0x4034000000000000),
                    height = XIL(0x3ff0000000000000)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0x4020000000000000)
                },
                xwidget = {
                  object = XIL(0x4020000000000000)
                }
              },
              position = {
                charpos = 0,
                bytepos = 4607182418800017408
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 4607182418800017408,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0x3ff0000000000000)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 3129692744534274048,
              prev_stop = 0,
              base_level_stop = 93862228985664,
              cmp_it = {
                stop_pos = 0,
                id = 93862228985664,
                ch = 16,
                rule_idx = 0,
                lookback = 30,
                nglyphs = -384065531,
                reversed_p = 79,
                parent_it = 0x4010000000000000,
                charpos = 4629981891913580544,
                nchars = 0,
                nbytes = 1075838976,
                from = 0,
                to = 1078198272,
                width = 16
              },
              face_id = 17749344,
              u = {
                image = {
                  object = XIL(0x555e012ecc90),
                  slice = {
                    x = make_fixnum(34995297597800),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0x4082100000000000)
                  },
                  image_id = 93862228985664
                },
                stretch = {
                  object = XIL(0x555e012ecc90)
                },
                xwidget = {
                  object = XIL(0x555e012ecc90)
                }
              },
              position = {
                charpos = 4629137466983448576,
                bytepos = 4625196817309499392
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 1125917086973956
                },
                overlay_string_index = 4631952216750555136,
                string_pos = {
                  charpos = 206158430208,
                  bytepos = 133143986177
                },
                dpvec_index = 14
              },
              from_overlay = XIL(0xffffffffffffffff),
              area = 16,
              method = 578,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0x26153000),
              voffset = -6408,
              space_width = XIL(0),
              font_height = XIL(0x555e00d10740)
            }, {
              string = XIL(0x555e00f1a1c0),
              string_nchars = 13698880,
              end_charpos = 16,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 139981191755885,
              cmp_it = {
                stop_pos = 93862234902688,
                id = 93862247595984,
                ch = 0,
                rule_idx = 0,
                lookback = 93862203327856,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x140,
                charpos = 0,
                nchars = 32303200,
                nbytes = 21854,
                from = 1,
                to = 0,
                width = 32249505
              },
              face_id = 1856,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = make_fixnum(13423),
                    y = XIL(0),
                    width = XIL(0x555e01ece860),
                    height = XIL(0xd1bf)
                  },
                  image_id = 6398880
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 93862247536289
              },
              current = {
                pos = {
                  charpos = 93862247589984,
                  bytepos = 0
                },
                overlay_string_index = 93862247536289,
                string_pos = {
                  charpos = 93862196800205,
                  bytepos = 93862247536289
                },
                dpvec_index = 32303199
              },
              from_overlay = XIL(0x100000000),
              area = 24510832,
              method = 21854,
              paragraph_embedding = (unknown: 0xd653c750),
              multibyte_p = true,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = true,
              display_ellipsis_p = true,
              avoid_cursor_p = true,
              bidi_p = true,
              from_disp_prop_p = true,
              line_wrap = (unknown: 0x26153000),
              voffset = -6408,
              space_width = XIL(0x555dff4aa2a0),
              font_height = XIL(0)
            }},
          sp = -1,
          selective = 2,
          what = 39552,
          face_id = 0,
          selective_display_ellipsis_p = false,
          ctl_arrow_p = false,
          face_box_p = false,
          start_of_box_run_p = false,
          end_of_box_run_p = false,
          overlay_strings_at_end_processed_p = false,
          ignore_overlay_strings_at_pos_p = false,
          glyph_not_available_p = false,
          starts_in_middle_of_char_p = true,
          face_before_selective_p = true,
          constrain_row_ascent_descent_p = true,
          line_number_produced_p = false,
          line_wrap = (WORD_WRAP | unknown: 0x555c),
          base_face_id = 32249505,
          c = 21854,
          len = 288,
          cmp_it = {
            stop_pos = 0,
            id = 93862203400864,
            ch = 39552,
            rule_idx = 0,
            lookback = 2,
            nglyphs = 11873716,
            reversed_p = 94,
            parent_it = 0x7ffdd6545590,
            charpos = 93862196802928,
            nchars = 53695,
            nbytes = 0,
            from = -699148832,
            to = 32765,
            width = 2
          },
          char_to_display = 0,
          glyphless_method = GLYPHLESS_DISPLAY_THIN_SPACE,
          image_id = 93862203400864,
          xwidget = 0x555dfee6d2a3 <do_one_unbind+288>,
          slice = {
            x = XIL(0),
            y = XIL(0x100),
            width = XIL(0),
            height = XIL(0)
          },
          space_width = XIL(0x100),
          voffset = -6393,
          tab_width = -282,
          font_height = XIL(0xb),
          object = XIL(0x9a80),
          position = {
            charpos = 0,
            bytepos = 93862238029893
          },
          truncation_pixel_width = -25006,
          continuation_pixel_width = 0,
          first_visible_x = 0,
          last_visible_x = 638922752,
          last_visible_y = 728688376,
          extra_line_spacing = 0,
          max_extra_line_spacing = 0,
          override_ascent = 40530,
          override_descent = 0,
          override_boff = 53695,
          glyph_row = 0x555dfed91191 <bidi_cache_iterator_state+51>,
          area = -699113528,
          nglyphs = 32765,
          pixel_width = -699113528,
          ascent = 32765,
          descent = 1,
          max_ascent = 0,
          max_descent = 0,
          phys_ascent = 0,
          phys_descent = -1,
          max_phys_ascent = 0,
          max_phys_descent = -19313843,
          current_x = 21853,
          wrap_prefix_width = -699113904,
          continuation_lines_width = 32765,
          eol_pos = {
            charpos = 93862196398651,
            bytepos = 0
          },
          current_y = 638922752,
          first_vpos = 728688376,
          vpos = 7,
          hpos = 0,
          lnum = 2748,
          lnum_bytepos = 2749,
          lnum_width = 22743109,
          lnum_pixel_width = 21854,
          pt_lnum = 93862238029888,
          stretch_adjust = -18795734,
          left_user_fringe_bitmap = 21853,
          right_user_fringe_bitmap = 0,
          left_user_fringe_face_id = 0,
          right_user_fringe_face_id = 0,
          bidi_p = false,
          bidi_it = {
            bytepos = 3129692744534274048,
            charpos = 7,
            ch = -699146776,
            nchars = 140728199273952,
            ch_len = 3339,
            type = 4252,
            type_after_wn = UNKNOWN_BT,
            orig_type = 4276079163,
            resolved_level = 93 ']',
            isolate_level = 85 'U',
            invalid_levels = 0,
            invalid_isolates = 139981011526752,
            prev = {
              charpos = 7,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            last_strong = {
              charpos = 93862203244384,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            next_for_neutral = {
              charpos = 65536,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            prev_for_neutral = {
              charpos = 0,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            next_for_ws = {
              charpos = 0,
              type = 3339,
              orig_type = UNKNOWN_BT
            },
            bracket_pairing_pos = 4252,
            bracket_enclosed_type = UNKNOWN_BT,
            next_en_pos = 3237,
            next_en_type = 32253756,
            sos = (R2L | unknown: 0x555c),
            scan_dir = -699146860,
            disp_pos = 140728199273952,
            disp_prop = -699146776,
            stack_idx = 32765,
            level_stack = {{
                next_for_neutral_pos = 97,
                next_for_neutral_type = 1,
                last_strong_type = 4,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 150,
                next_for_neutral_type = 0,
                last_strong_type = 1,
                prev_for_neutral_type = 6,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862195442126,
                next_for_neutral_type = 2,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196888121,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227032888,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 46118720091616,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 2,
                level = 186 '\272',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227512104,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 93862196920518,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 7,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196920557,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196013788,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 4,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199272720,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196013904,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 4,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862196021611,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199272688,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 5,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196888121,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196021182,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 20,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 218 '\332',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227511472,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 4,
                level = 186 '\272',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196022527,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 3,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199272688,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196013788,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 3,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139980923453572,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 7,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 46118720091616,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 46118720091616,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 12225320,
                next_for_neutral_type = 4,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862236158512,
                next_for_neutral_type = 6,
                last_strong_type = 4,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 34,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139980289868980,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139980923453572,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862236158512,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1575,
                next_for_neutral_type = 2,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1575,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 3,
                level = 9 '\t',
                flags = 225 '\341'
              }, {
                next_for_neutral_pos = 139981055056485,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 1,
                level = 155 '\233',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981054792652,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 0,
                level = 62 '>',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 139981054502179,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 7,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862225451088,
                next_for_neutral_type = 7,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184593290,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 3,
                level = 65 'A',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 7,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 4,
                last_strong_type = 0,
                prev_for_neutral_type = 7,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862236350160,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184603390,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 3,
                last_strong_type = 6,
                prev_for_neutral_type = 7,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199273344,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 2,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 40531,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196515812,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 6,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 5,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 91 '[',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 140728199273424,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 3,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199304592,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862195526737,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40529,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 256,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 20,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199273472,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 2,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199273424,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40528,
                next_for_neutral_type = 2,
                last_strong_type = 2,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199273904,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196052035,
                next_for_neutral_type = 0,
                last_strong_type = 1,
                prev_for_neutral_type = 5,
                level = 172 '\254',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 93862196921941,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 6,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 5,
                level = 147 '\223',
                flags = 150 '\226'
              }, {
                next_for_neutral_pos = 6,
                next_for_neutral_type = 7,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196926894,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862236154704,
                next_for_neutral_type = 6,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 1,
                prev_for_neutral_type = 5,
                level = 172 '\254',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 93862196890866,
                next_for_neutral_type = 3,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 229 '\345',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862196916060,
                next_for_neutral_type = 3,
                last_strong_type = 4,
                prev_for_neutral_type = 6,
                level = 87 'W',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 2,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 28896,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862197235720,
                next_for_neutral_type = 5,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 91 '[',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862197229629,
                next_for_neutral_type = 6,
                last_strong_type = 1,
                prev_for_neutral_type = 5,
                level = 2 '\002',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196890866,
                next_for_neutral_type = 3,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 229 '\345',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 2,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199217153,
                next_for_neutral_type = 0,
                last_strong_type = 3,
                prev_for_neutral_type = 4,
                level = 238 '\356',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 41472,
                next_for_neutral_type = 5,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 91 '[',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862197229629,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196890866,
                next_for_neutral_type = 3,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 229 '\345',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 2,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199217153,
                next_for_neutral_type = 0,
                last_strong_type = 3,
                prev_for_neutral_type = 4,
                level = 238 '\356',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 44928,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862237823907,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862197235693,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 44928,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40529,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 44928,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 91 '[',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862197235806,
                next_for_neutral_type = 6,
                last_strong_type = 0,
                prev_for_neutral_type = 5,
                level = 2 '\002',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862197246296,
                next_for_neutral_type = 5,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 91 '[',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862197252756,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 6,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 4,
                level = 186 '\272',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862197235693,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40529,
                next_for_neutral_type = 2,
                last_strong_type = 2,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 162518,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862247360216,
                next_for_neutral_type = 1,
                last_strong_type = 2,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195472419,
                next_for_neutral_type = 6,
                last_strong_type = 7,
                prev_for_neutral_type = 6,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = -1,
                next_for_neutral_type = 5,
                last_strong_type = 6,
                prev_for_neutral_type = 2,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 162118,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 638922752,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227613808,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862227613808,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195645371,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199304592,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195474434,
                next_for_neutral_type = 0,
                last_strong_type = 1,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199304592,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227511472,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227047680,
                next_for_neutral_type = 2,
                last_strong_type = 1,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195558096,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199304592,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 7,
                level = 255 '\377',
                flags = 255 '\377'
              }},
            string = {
              lstring = XIL(0x2b6ee6f826153000),
              s = 0x8 <error: Cannot access memory at address 0x8>,
              schars = 2,
              bufpos = 1,
              from_disp_str = false,
              unibyte = false
            },
            w = 0x8,
            paragraph_dir = (R2L | unknown: 0xe0),
            separator_limit = 140728199304592,
            first_elt = false,
            new_paragraph = true,
            frame_window_p = true
          },
          paragraph_embedding = (unknown: 0x8),
          min_width_property = XIL(0),
          min_width_start = 40530
        }
        atpos_it = {
          window = XIL(0xe200000009),
          w = 0x0,
          f = 0x1c2,
          method = GET_FROM_DISPLAY_VECTOR,
          stop_charpos = 0,
          prev_stop = 40531,
          base_level_stop = 128849084672,
          end_charpos = 0,
          medium_narrowing_begv = 0,
          medium_narrowing_zv = 0,
          large_narrowing_begv = 4607182418800017408,
          large_narrowing_zv = 0,
          s = 0x0,
          string_nchars = 4607182418800017408,
          multibyte_p = false,
          tab_line_p = false,
          header_line_p = false,
          string_from_display_prop_p = false,
          string_from_prefix_prop_p = false,
          from_disp_prop_p = false,
          ellipsis_p = false,
          avoid_cursor_p = false,
          dp = 0x0,
          dpvec = 0x0,
          dpend = 0x555dfee6d1e3 <do_one_unbind+96>,
          dpvec_char_len = -18603876,
          dpvec_face_id = 21853,
          saved_face_id = 352,
          ctl_chars = {XIL(0), XIL(0), XIL(0), XIL(0x555dfee6e707), make_fixnum(0), XIL(0x555dfee423a1), XIL(0x555e015b0840), XIL(0), XIL(0x7ffdd653ef00), XIL(0x2b6ee6f826153000), make_fixnum(2), XIL(0x555dfee6d1e3), XIL(0x555dfee4209c), XIL(0x120), XIL(0), XIL(0)},
          start = {
            pos = {
              charpos = 0,
              bytepos = 93862196864775
            },
            overlay_string_index = 2,
            string_pos = {
              charpos = 93862196683681,
              bytepos = 93862238029888
            },
            dpvec_index = 0
          },
          current = {
            pos = {
              charpos = 140728199278448,
              bytepos = 3129692744534274048
            },
            overlay_string_index = 10,
            string_pos = {
              charpos = 140728199278448,
              bytepos = 10
            },
            dpvec_index = -18595865
          },
          n_overlay_strings = 0,
          overlay_strings_charpos = 0,
          overlay_strings = {XIL(0x555e01742f88), XIL(0x555dfee6e707), make_fixnum(0), XIL(0x555dfee423a1), XIL(0x555e015b0840), XIL(0), XIL(0x7ffdd653efe0), XIL(0x2b6ee6f826153000), make_fixnum(2), XIL(0x555dfee6d1e3), XIL(0x555dfee4209c), XIL(0x140), XIL(0), XIL(0), XIL(0), XIL(0x555dfee6e707)},
          string_overlays = {make_fixnum(0), XIL(0x555dfee423a1), XIL(0x555e015b0840), XIL(0), XIL(0x7ffdd653f050), XIL(0x2b6ee6f826153000), make_fixnum(2), XIL(0x7ffdd653f050), make_fixnum(2), XIL(0x555dfee43fe7), XIL(0), XIL(0), XIL(0x555e01742f88), XIL(0x7ffdd653f080), make_fixnum(2), XIL(0x555dfee43fe7)},
          string = XIL(0),
          from_overlay = XIL(0),
          stack = {{
              string = XIL(0x555e01742f88),
              string_nchars = 352,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 93862196864775,
              cmp_it = {
                stop_pos = 2,
                id = 93862196683681,
                ch = 22743104,
                rule_idx = 0,
                lookback = 140728199278864,
                nglyphs = 638922752,
                reversed_p = 248,
                parent_it = 0xa,
                charpos = 93862196859363,
                nchars = -18603876,
                nbytes = 21853,
                from = 288,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0x555dfee6e707),
                    y = make_fixnum(0),
                    width = XIL(0x555dfee423a1),
                    height = XIL(0x555e015b0840)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 140728199278976,
                bytepos = 3129692744534274048
              },
              current = {
                pos = {
                  charpos = 10,
                  bytepos = 140728199278976
                },
                overlay_string_index = 10,
                string_pos = {
                  charpos = 93862196690919,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0x555e01742f88),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = (unknown: 0xd1ff50),
              multibyte_p = false,
              string_from_display_prop_p = true,
              string_from_prefix_prop_p = true,
              display_ellipsis_p = true,
              avoid_cursor_p = true,
              bidi_p = false,
              from_disp_prop_p = true,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0x555e00d10740),
              font_height = XIL(0x7f4fe8c6ea4d)
            }, {
              string = XIL(0x555e01ef6390),
              string_nchars = 11664480,
              end_charpos = 93862226951264,
              stop_charpos = 139981184289605,
              prev_stop = 93862228986624,
              base_level_stop = 139981184290291,
              cmp_it = {
                stop_pos = 93862226475744,
                id = 93862228985664,
                ch = 0,
                rule_idx = 139981184750359,
                lookback = 93862228985664,
                nglyphs = 32465808,
                reversed_p = 94,
                parent_it = 0x0,
                charpos = 139981191864745,
                nchars = 0,
                nbytes = 1074790400,
                from = 0,
                to = 1074790400,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0x4030000000000000),
                  slice = {
                    x = XIL(0x4048000000000000),
                    y = XIL(0),
                    width = XIL(0x403c000000000000),
                    height = XIL(0x555e00b1fc60)
                  },
                  image_id = 139981190607116
                },
                stretch = {
                  object = XIL(0x4030000000000000)
                },
                xwidget = {
                  object = XIL(0x4030000000000000)
                }
              },
              position = {
                charpos = 93862228986624,
                bytepos = 139981184290291
              },
              current = {
                pos = {
                  charpos = 93862225937520,
                  bytepos = 93862228985664
                },
                overlay_string_index = 1,
                string_pos = {
                  charpos = 139981184750359,
                  bytepos = 4294967295
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0x1),
              area = 638922752,
              method = 728688376,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0xe8c3d878),
              voffset = 32591,
              space_width = XIL(0x7ffdd653e510),
              font_height = XIL(0x555e010cc210)
            }, {
              string = XIL(0x7ffdd653e600),
              string_nchars = 0,
              end_charpos = 140728199275984,
              stop_charpos = 139981184375602,
              prev_stop = 4607182418800017408,
              base_level_stop = 139981184293487,
              cmp_it = {
                stop_pos = 93862239763792,
                id = 139981184293732,
                ch = 0,
                rule_idx = 93862228985664,
                lookback = 0,
                nglyphs = -389358438,
                reversed_p = 79,
                parent_it = 0x7ffdd653e600,
                charpos = 93862228985664,
                nchars = 0,
                nbytes = 0,
                from = -382242417,
                to = 32591,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0x4020000000000000),
                  slice = {
                    x = XIL(0x4044000000000000),
                    y = XIL(0x7f4fe98f61c0),
                    width = XIL(0x4034000000000000),
                    height = XIL(0x3ff0000000000000)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0x4020000000000000)
                },
                xwidget = {
                  object = XIL(0x4020000000000000)
                }
              },
              position = {
                charpos = 0,
                bytepos = 4607182418800017408
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 4607182418800017408,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0x3ff0000000000000)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 3129692744534274048,
              prev_stop = 0,
              base_level_stop = 93862228985664,
              cmp_it = {
                stop_pos = 0,
                id = 93862228985664,
                ch = -19793941,
                rule_idx = 93862227512104,
                lookback = 8,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x5,
                charpos = 0,
                nchars = -19789744,
                nbytes = 21853,
                from = -19793941,
                to = 21853,
                width = 12225320
              },
              face_id = 12224688,
              u = {
                image = {
                  object = XIL(0x28f),
                  slice = {
                    x = XIL(0x8),
                    y = XIL(0),
                    width = XIL(0x555dfed60e39),
                    height = XIL(0x555dfed1f7eb)
                  },
                  image_id = 93862227512104
                },
                stretch = {
                  object = XIL(0x28f)
                },
                xwidget = {
                  object = XIL(0x28f)
                }
              },
              position = {
                charpos = 8,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 5,
                  bytepos = 0
                },
                overlay_string_index = 93862195497040,
                string_pos = {
                  charpos = 93862195492843,
                  bytepos = 93862227512104
                },
                dpvec_index = 12224688
              },
              from_overlay = XIL(0x28f),
              area = 8,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (WORD_WRAP | unknown: 0xfed60e38),
              voffset = 21853,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0x65),
              string_nchars = 672,
              end_charpos = 34359739040,
              stop_charpos = 48,
              prev_stop = 48,
              base_level_stop = 93862227511472,
              cmp_it = {
                stop_pos = 101,
                id = 140728199276576,
                ch = -632,
                rule_idx = 11,
                lookback = 8,
                nglyphs = -392806152,
                reversed_p = 79,
                parent_it = 0x555e00ba88b0,
                charpos = 139981011904783,
                nchars = 0,
                nbytes = 0,
                from = -393797650,
                to = 32591,
                width = 9911168
              },
              face_id = -393918965,
              u = {
                image = {
                  object = XIL(0x3a0007900000010),
                  slice = {
                    x = XIL(0x7ffdd653e838),
                    y = XIL(0xffffffff),
                    width = XIL(0x555e00902180),
                    height = XIL(0x3a00079)
                  },
                  image_id = 93862227212832
                },
                stretch = {
                  object = XIL(0x3a0007900000010)
                },
                xwidget = {
                  object = XIL(0x3a0007900000010)
                }
              },
              position = {
                charpos = 139981574111231,
                bytepos = 93862227511472
              },
              current = {
                pos = {
                  charpos = 4294967295,
                  bytepos = 139981191351200
                },
                overlay_string_index = 93866510254079,
                string_pos = {
                  charpos = 93862196425212,
                  bytepos = 93862228070080
                },
                dpvec_index = -18963733
              },
              from_overlay = XIL(0xffffffff),
              area = 12783296,
              method = 21854,
              paragraph_embedding = (L2R | R2L | unknown: 0xfffffffc),
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0xb5fa20),
              voffset = 21854,
              space_width = XIL(0),
              font_height = make_fixnum(23465549230129)
            }},
          sp = -1,
          selective = 93862195957896,
          what = 4294967295,
          face_id = 32591,
          selective_display_ellipsis_p = true,
          ctl_arrow_p = false,
          face_box_p = false,
          start_of_box_run_p = false,
          end_of_box_run_p = false,
          overlay_strings_at_end_processed_p = false,
          ignore_overlay_strings_at_pos_p = true,
          glyph_not_available_p = false,
          starts_in_middle_of_char_p = true,
          face_before_selective_p = false,
          constrain_row_ascent_descent_p = false,
          line_number_produced_p = false,
          line_wrap = (WORD_WRAP | unknown: 0x555c),
          base_face_id = -1,
          c = 32765,
          len = 1,
          cmp_it = {
            stop_pos = 0,
            id = 93862195968988,
            ch = 12224688,
            rule_idx = 93857920319596,
            lookback = 93866510254079,
            nglyphs = 60817529,
            reversed_p = false,
            parent_it = 0x0,
            charpos = 0,
            nchars = 11926048,
            nbytes = 21854,
            from = -19328888,
            to = 21853,
            width = 12224688
          },
          char_to_display = -19328703,
          glyphless_method = 21853,
          image_id = 140728199312184,
          xwidget = 0x1,
          slice = {
            x = XIL(0),
            y = XIL(0x555dfed93bdc),
            width = XIL(0x100000001),
            height = XIL(0x7ffd0000006c)
          },
          space_width = XIL(0x1),
          voffset = 0,
          tab_width = 0,
          font_height = XIL(0x1),
          object = XIL(0x555dfed94b4d),
          position = {
            charpos = 9218868437227405311,
            bytepos = 93862195957896
          },
          truncation_pixel_width = 0,
          continuation_pixel_width = 0,
          first_visible_x = 0,
          last_visible_x = -19328826,
          last_visible_y = 21853,
          extra_line_spacing = 0,
          max_extra_line_spacing = 0,
          override_ascent = 638922752,
          override_descent = 728688376,
          override_boff = 108,
          glyph_row = 0x555dfed91191 <bidi_cache_iterator_state+51>,
          area = TEXT_AREA,
          nglyphs = 0,
          pixel_width = -699108552,
          ascent = 32765,
          descent = 1,
          max_ascent = 0,
          max_descent = 0,
          phys_ascent = 0,
          phys_descent = 1,
          max_phys_ascent = 0,
          max_phys_descent = -19313843,
          current_x = 21853,
          wrap_prefix_width = -699143208,
          continuation_lines_width = 32765,
          eol_pos = {
            charpos = 93862224752384,
            bytepos = 93862225051904
          },
          current_y = 638922752,
          first_vpos = 728688376,
          vpos = 11797024,
          hpos = 21854,
          lnum = 139981192813558,
          lnum_bytepos = 93862227083808,
          lnum_width = -380622904,
          lnum_pixel_width = 32591,
          pt_lnum = 0,
          stretch_adjust = 638922752,
          left_user_fringe_bitmap = 59128,
          right_user_fringe_bitmap = 11118,
          left_user_fringe_face_id = 256944,
          right_user_fringe_face_id = 32765,
          bidi_p = false,
          bidi_it = {
            bytepos = 1,
            charpos = 140728199277488,
            ch = 1,
            nchars = 140728199277328,
            ch_len = 139981181500455,
            type = 3595823872,
            type_after_wn = 32765,
            orig_type = 12245696,
            resolved_level = 94 '^',
            isolate_level = 85 'U',
            invalid_levels = 93862227887760,
            invalid_isolates = 139981180192118,
            prev = {
              charpos = 0,
              type = 3902286121,
              orig_type = 59
            },
            last_strong = {
              charpos = 0,
              type = 3595823989,
              orig_type = 32765
            },
            next_for_neutral = {
              charpos = 0,
              type = 27976,
              orig_type = UNKNOWN_BT
            },
            prev_for_neutral = {
              charpos = 0,
              type = 11797024,
              orig_type = 21854
            },
            next_for_ws = {
              charpos = 8589934592,
              type = 4276568633,
              orig_type = 21853
            },
            bracket_pairing_pos = 140728199277744,
            bracket_enclosed_type = 11746104,
            next_en_pos = 46118720091616,
            next_en_type = 3656234464,
            sos = (L2R | unknown: 0x29f0),
            scan_dir = 12224688,
            disp_pos = 93862227512104,
            disp_prop = -638732832,
            stack_idx = 10737,
            level_stack = {{
                next_for_neutral_pos = 93862196920518,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 7,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196920557,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 93862196888121,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227032888,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 46118720091616,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 2,
                level = 186 '\272',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227512104,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 93862196920518,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 7,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196920557,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196013788,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199277696,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196013904,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862196021611,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 7,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199277664,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 93862196888121,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196021182,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 20,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 218 '\332',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227511472,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 4,
                level = 186 '\272',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196022527,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 1,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199277664,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196013788,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 3,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139980923453572,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 71712,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 237 '\355',
                flags = 217 '\331'
              }, {
                next_for_neutral_pos = 46118720091616,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 46118720091616,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227512104,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196020828,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 1,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862227511472,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139977279143937,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139980923453572,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 103273794941300736,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199278112,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 5,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 38207,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196515812,
                next_for_neutral_type = 3,
                last_strong_type = 2,
                prev_for_neutral_type = 3,
                level = 81 'Q',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199278192,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199309568,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862195526737,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196529611,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 256,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 20,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199278240,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 3,
                level = 210 '\322',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199278192,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 38190,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196052536,
                next_for_neutral_type = 3,
                last_strong_type = 4,
                prev_for_neutral_type = 2,
                level = 74 'J',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 2,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139980936314882,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 5,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862196021182,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 207 '\317',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 12,
                next_for_neutral_type = 5,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 137 '\211',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196890866,
                next_for_neutral_type = 3,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 229 '\345',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862196916060,
                next_for_neutral_type = 3,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 227 '\343',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 2,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 28896,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862197235720,
                next_for_neutral_type = 5,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 91 '[',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862197229629,
                next_for_neutral_type = 6,
                last_strong_type = 1,
                prev_for_neutral_type = 1,
                level = 2 '\002',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196890866,
                next_for_neutral_type = 3,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 229 '\345',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 2,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199217153,
                next_for_neutral_type = 0,
                last_strong_type = 3,
                prev_for_neutral_type = 4,
                level = 238 '\356',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 5,
                level = 201 '\311',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 3,
                last_strong_type = 5,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981055058084,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 4,
                level = 168 '\250',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981054792652,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 5,
                level = 201 '\311',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981054502179,
                next_for_neutral_type = 5,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862226348320,
                next_for_neutral_type = 3,
                last_strong_type = 5,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184593290,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 192 '\300',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 5,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 4,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862227874272,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184603390,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 3,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199278912,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 5,
                level = 201 '\311',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981055058084,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 4,
                level = 168 '\250',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981054792652,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 5,
                level = 201 '\311',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981054502179,
                next_for_neutral_type = 3,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 229 '\345',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862226348320,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184593290,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 192 '\300',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 4,
                last_strong_type = 2,
                prev_for_neutral_type = 0,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862227874272,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184603390,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 3,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199279136,
                next_for_neutral_type = 5,
                last_strong_type = 1,
                prev_for_neutral_type = 5,
                level = 61 '=',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862196962906,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 7,
                level = 255 '\377',
                flags = 255 '\377'
              }, {
                next_for_neutral_pos = 93862236156845,
                next_for_neutral_type = 5,
                last_strong_type = 1,
                prev_for_neutral_type = 5,
                level = 61 '=',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 446676598785,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 6,
                level = 62 '>',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 3,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 83 'S',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862202890184,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 3,
                level = 210 '\322',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 188 '\274',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196425212,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862197382906,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 2,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199279136,
                next_for_neutral_type = 3,
                last_strong_type = 1,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862202890184,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 3,
                level = 210 '\322',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 637,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195434718,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 188 '\274',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195644137,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862236343821,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 2,
                level = 186 '\272',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195474434,
                next_for_neutral_type = 3,
                last_strong_type = 5,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199309568,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862227511472,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862229077232,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195558096,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }},
            string = {
              lstring = XIL(0x2b6ee6f826153000),
              s = 0x0,
              schars = 2,
              bufpos = 1,
              from_disp_str = false,
              unibyte = false
            },
            w = 0x1,
            paragraph_dir = (L2R | unknown: 0x27c),
            separator_limit = 140728199309568,
            first_elt = false,
            new_paragraph = true,
            frame_window_p = true
          },
          paragraph_embedding = L2R,
          min_width_property = XIL(0x1),
          min_width_start = -1
        }
        atx_it = {
          window = XIL(0x27d00000009),
          w = 0x0,
          f = 0x953c,
          method = GET_FROM_DISPLAY_VECTOR,
          stop_charpos = 0,
          prev_stop = 40531,
          base_level_stop = 373662155008,
          end_charpos = 0,
          medium_narrowing_begv = 0,
          medium_narrowing_zv = 93862225467760,
          large_narrowing_begv = 157330,
          large_narrowing_zv = 93862247617240,
          s = 0x555e015b0845 "",
          string_nchars = 157330,
          multibyte_p = false,
          tab_line_p = false,
          header_line_p = true,
          string_from_display_prop_p = false,
          string_from_prefix_prop_p = false,
          from_disp_prop_p = true,
          ellipsis_p = false,
          avoid_cursor_p = true,
          dp = 0x555dfeec8601 <intervals_equal+14>,
          dpvec = 0x99a4,
          dpend = 0x555dfeecba63 <Fnext_property_change+265>,
          dpvec_char_len = 0,
          dpvec_face_id = 2,
          saved_face_id = 157322,
          ctl_chars = {XIL(0x9e53), make_fixnum(39330), make_fixnum(39332), make_fixnum(39332), XIL(0x60f0), XIL(0x2b6ee6f826153000), make_fixnum(39332), XIL(0x7f4fde7d29c0), XIL(0x99a4), XIL(0x7f4fde96bce0), XIL(0), XIL(0x7f4fde7d2a95), XIL(0x555e012da190), XIL(0xb50), XIL(0x7f4fde96bc80), XIL(0xb50)},
          start = {
            pos = {
              charpos = 93862247338784,
              bytepos = 139981011893720
            },
            overlay_string_index = 139981013564544,
            string_pos = {
              charpos = 0,
              bytepos = 0
            },
            dpvec_index = 18410
          },
          current = {
            pos = {
              charpos = 0,
              bytepos = 139981011894601
            },
            overlay_string_index = 4294967296,
            string_pos = {
              charpos = 30064771072,
              bytepos = 39332
            },
            dpvec_index = 2888
          },
          n_overlay_strings = -632,
          overlay_strings_charpos = 11,
          overlay_strings = {XIL(0), make_fixnum(4602), XIL(0), XIL(0x7f4fde7d690f), XIL(0x7ffdd6542770), XIL(0), XIL(0x7ffdd65404a0), XIL(0x7ffdd65404a0), XIL(0), make_fixnum(34995296045335), XIL(0xffffffff00004800), XIL(0x7ffdd6542770), XIL(0xffffff33), XIL(0x100000001), XIL(0x555e00004800), XIL(0)},
          string_overlays = {XIL(0x555e000000cf), XIL(0x7ffdd65400a8), XIL(0), XIL(0xffffffffffffc739), XIL(0x555e01e907e0), XIL(0x7ffdd65404a0), XIL(0x7ffdd6540070), XIL(0x7ffdd653f880), XIL(0), XIL(0x555dfed90f01), XIL(0x1), XIL(0x555dfed90f21), XIL(0x7ffdd6547328), XIL(0x555dfed91fe7), XIL(0xc), XIL(0x7f4fd9bc7995)},
          string = XIL(0x645),
          from_overlay = make_fixnum(23465548987433),
          stack = {{
              string = XIL(0),
              string_nchars = 638922752,
              end_charpos = 7,
              stop_charpos = 140728199312168,
              prev_stop = 1,
              base_level_stop = 3,
              cmp_it = {
                stop_pos = 107,
                id = 54,
                ch = 107,
                rule_idx = 93862195963232,
                lookback = 0,
                nglyphs = 40482,
                reversed_p = false,
                parent_it = 0xb9ad,
                charpos = 35964,
                nchars = 8235,
                nbytes = 0,
                from = 1,
                to = 0,
                width = 32049912
              },
              face_id = 32050000,
              u = {
                image = {
                  object = XIL(0x555e01e90ba8),
                  slice = {
                    x = XIL(0x555e01e90c00),
                    y = XIL(0x555e01e911d8),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0x555e01e90ba8)
                },
                xwidget = {
                  object = XIL(0x555e01e90ba8)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 32051584,
                nbytes = 21854,
                from = 32051408,
                to = 21854,
                width = 32051320
              },
              face_id = 32051144,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0x110000),
                    y = XIL(0),
                    width = XIL(0x130000),
                    height = XIL(0)
                  },
                  image_id = 1376256
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 1507328
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 1638400
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 1769472,
                  bytepos = 0
                },
                dpvec_index = 1900544
              },
              from_overlay = XIL(0),
              area = 2031616,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0x210000),
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0x230000)
            }, {
              string = XIL(0),
              string_nchars = 2424832,
              end_charpos = 0,
              stop_charpos = 2,
              prev_stop = 0,
              base_level_stop = 2686978,
              cmp_it = {
                stop_pos = 0,
                id = 24816,
                ch = 0,
                rule_idx = 0,
                lookback = 1,
                nglyphs = -19329279,
                reversed_p = 93,
                parent_it = 0x6,
                charpos = 93862195957647,
                nchars = 6,
                nbytes = 0,
                from = -19321410,
                to = 21853,
                width = 0
              },
              face_id = 24816,
              u = {
                image = {
                  object = XIL(0x555e00000001),
                  slice = {
                    x = make_fixnum(23465549308951),
                    y = XIL(0x1),
                    width = XIL(0x555dfeecb958),
                    height = XIL(0x555e00d56da5)
                  },
                  image_id = 93862197252756
                },
                stretch = {
                  object = XIL(0x555e00000001)
                },
                xwidget = {
                  object = XIL(0x555e00000001)
                }
              },
              position = {
                charpos = 6,
                bytepos = 93862195957505
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 93862195957647
                },
                overlay_string_index = 93862229274016,
                string_pos = {
                  charpos = 93862195965374,
                  bytepos = 1
                },
                dpvec_index = -18040488
              },
              from_overlay = XIL(0x555e00000001),
              area = -18034028,
              method = 21853,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0xfeecb850),
              voffset = 21853,
              space_width = XIL(0xba8d40),
              font_height = make_fixnum(1)
            }, {
              string = XIL(0),
              string_nchars = -19329279,
              end_charpos = 154,
              stop_charpos = 93862195957647,
              prev_stop = 93862229274021,
              base_level_stop = 93862195965374,
              cmp_it = {
                stop_pos = 38,
                id = 93862197246383,
                ch = 1,
                rule_idx = 6,
                lookback = 0,
                nglyphs = 6,
                reversed_p = false,
                parent_it = 0x9a,
                charpos = 154,
                nchars = 24816,
                nbytes = 0,
                from = -19329279,
                to = 21853,
                width = 154
              },
              face_id = -19329137,
              u = {
                image = {
                  object = make_fixnum(9),
                  slice = {
                    x = make_fixnum(23465548991343),
                    y = XIL(0),
                    width = XIL(0x180),
                    height = XIL(0x555e00000001)
                  },
                  image_id = 6
                },
                stretch = {
                  object = make_fixnum(9)
                },
                xwidget = {
                  object = make_fixnum(9)
                }
              },
              position = {
                charpos = 93862227512645,
                bytepos = 1
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 38
                },
                overlay_string_index = 154,
                string_pos = {
                  charpos = 93862195549963,
                  bytepos = 143274
                },
                dpvec_index = 1
              },
              from_overlay = XIL(0x7ffdd6549b20),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = (R2L | unknown: 0x1008be8),
              multibyte_p = true,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = make_fixnum(9),
              font_height = XIL(0x1)
            }, {
              string = XIL(0x1),
              string_nchars = 638922752,
              end_charpos = 93862227047680,
              stop_charpos = 1,
              prev_stop = 140728199324456,
              base_level_stop = 140728199322392,
              cmp_it = {
                stop_pos = 38,
                id = 140728199322224,
                ch = -699098504,
                rule_idx = 93862195960317,
                lookback = 1,
                nglyphs = -699098336,
                reversed_p = 253,
                parent_it = 0x555e00ba8d40,
                charpos = 4294967336,
                nchars = 12225325,
                nbytes = 21854,
                from = 142274,
                to = 1,
                width = 1
              },
              face_id = 1,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0x2b6ee6f826153000),
                    y = XIL(0xffffffff),
                    width = XIL(0x7ffdd6549a58),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 4294967295,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 4294967295,
                  bytepos = 93862195957505
                },
                overlay_string_index = 4294967295,
                string_pos = {
                  charpos = 93862195957537,
                  bytepos = 140728199322200
                },
                dpvec_index = -19324953
              },
              from_overlay = XIL(0),
              area = -19326467,
              method = 21853,
              paragraph_embedding = (L2R | R2L | unknown: 0xfffffffc),
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0xd6549b20),
              voffset = 32765,
              space_width = XIL(0x555e00ba8d40),
              font_height = XIL(0x100000029)
            }},
          sp = -1,
          selective = 7890836056,
          what = 4294967295,
          face_id = 32765,
          selective_display_ellipsis_p = true,
          ctl_arrow_p = false,
          face_box_p = false,
          start_of_box_run_p = false,
          end_of_box_run_p = false,
          overlay_strings_at_end_processed_p = false,
          ignore_overlay_strings_at_pos_p = false,
          glyph_not_available_p = false,
          starts_in_middle_of_char_p = false,
          face_before_selective_p = false,
          constrain_row_ascent_descent_p = false,
          line_number_produced_p = false,
          line_wrap = TRUNCATE,
          base_face_id = -1,
          c = 0,
          len = 638922752,
          cmp_it = {
            stop_pos = 0,
            id = 93862195957896,
            ch = 1,
            rule_idx = 93862195957505,
            lookback = 140728898420735,
            nglyphs = -19329137,
            reversed_p = 93,
            parent_it = 0x1,
            charpos = 93862195965374,
            nchars = 1,
            nbytes = 0,
            from = 0,
            to = 21853,
            width = 3
          },
          char_to_display = 1,
          glyphless_method = GLYPHLESS_DISPLAY_THIN_SPACE,
          image_id = 1,
          xwidget = 0x2b6ee6f826153000,
          slice = {
            x = XIL(0),
            y = XIL(0x555dfed91088),
            width = XIL(0x1),
            height = XIL(0x555dfed90f01)
          },
          space_width = XIL(0x7ffdd6545b88),
          voffset = 3983,
          tab_width = -295,
          font_height = XIL(0x1),
          object = make_fixnum(23465548991343),
          position = {
            charpos = 0,
            bytepos = 0
          },
          truncation_pixel_width = 3,
          continuation_pixel_width = 0,
          first_visible_x = 6,
          last_visible_x = 1,
          last_visible_y = 0,
          extra_line_spacing = 1,
          max_extra_line_spacing = 0,
          override_ascent = 1,
          override_descent = 0,
          override_boff = 0,
          glyph_row = 0x0,
          area = 40,
          nglyphs = 0,
          pixel_width = 1,
          ascent = 0,
          descent = 1,
          max_ascent = 0,
          max_descent = 23,
          phys_ascent = 23,
          phys_descent = 23,
          max_phys_ascent = 0,
          max_phys_descent = 0,
          current_x = 0,
          wrap_prefix_width = 0,
          continuation_lines_width = 0,
          eol_pos = {
            charpos = 0,
            bytepos = 25769803782
          },
          current_y = 1,
          first_vpos = 0,
          vpos = 0,
          hpos = 0,
          lnum = -1,
          lnum_bytepos = 0,
          lnum_width = -1,
          lnum_pixel_width = -1,
          pt_lnum = 0,
          stretch_adjust = -1,
          left_user_fringe_bitmap = 65535,
          right_user_fringe_bitmap = 65535,
          left_user_fringe_face_id = 0,
          right_user_fringe_face_id = 0,
          bidi_p = false,
          bidi_it = {
            bytepos = -1,
            charpos = 0,
            ch = 0,
            nchars = 4294967296,
            ch_len = 1,
            type = STRONG_L,
            type_after_wn = UNKNOWN_BT,
            orig_type = UNKNOWN_BT,
            resolved_level = 0 '\000',
            isolate_level = 0 '\000',
            invalid_levels = 0,
            invalid_isolates = 0,
            prev = {
              charpos = 4294967297,
              type = 450,
              orig_type = UNKNOWN_BT
            },
            last_strong = {
              charpos = 1,
              type = 448,
              orig_type = UNKNOWN_BT
            },
            next_for_neutral = {
              charpos = 98784247809,
              type = 447,
              orig_type = UNKNOWN_BT
            },
            prev_for_neutral = {
              charpos = 23,
              type = 40531,
              orig_type = UNKNOWN_BT
            },
            next_for_ws = {
              charpos = 1,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            bracket_pairing_pos = 4294967296,
            bracket_enclosed_type = STRONG_L,
            next_en_pos = 678,
            next_en_type = UNKNOWN_BT,
            sos = NEUTRAL_DIR,
            scan_dir = 0,
            disp_pos = 0,
            disp_prop = 40531,
            stack_idx = 0,
            level_stack = {{
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 65536,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 7,
                level = 161 '\241',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 196608,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981011906116,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 10604528,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4095,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 242 '\362',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = -4096,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139979967905808,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 242 '\362',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 1,
                last_strong_type = 1,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196726590,
                next_for_neutral_type = 6,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 6832,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 242 '\362',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 4,
                last_strong_type = 1,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195947083,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 5,
                level = 68 'D',
                flags = 255 '\377'
              }, {
                next_for_neutral_pos = 139980932366077,
                next_for_neutral_type = 4,
                last_strong_type = 1,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195949734,
                next_for_neutral_type = 3,
                last_strong_type = 1,
                prev_for_neutral_type = 7,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195957896,
                next_for_neutral_type = 7,
                last_strong_type = 2,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195957896,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195957505,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862195957647,
                next_for_neutral_type = 4,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195965374,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4294967295,
                next_for_neutral_type = 3,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40050,
                next_for_neutral_type = 2,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40482,
                next_for_neutral_type = 6,
                last_strong_type = 3,
                prev_for_neutral_type = 6,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40499,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 98784247831,
                next_for_neutral_type = 7,
                last_strong_type = 2,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40498,
                next_for_neutral_type = 6,
                last_strong_type = 2,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40497,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40492,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 40497,
                next_for_neutral_type = 0,
                last_strong_type = 1,
                prev_for_neutral_type = 3,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199282832,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = -4294967264,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4020089390056,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 3,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862247337768,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199282856,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862247337856,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 196608,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 327680,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 458752,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 589824,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 720896,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 851968,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 983040,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1114112,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1245184,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1376256,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1507328,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1638400,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1769472,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1900544,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 2031616,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 2162688,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 2293760,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 2424832,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 2555904,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 2686976,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 2818048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 2949120,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3080192,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3211264,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3342336,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3473408,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3604480,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3735552,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3866624,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3997696,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4128768,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4259840,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4390912,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4521984,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4653056,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4784128,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4915200,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 5046272,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 5177344,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 5308416,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 5439488,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 5570560,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 5701632,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 5832704,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 5963776,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 6094848,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 6225920,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 6356992,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 6488064,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 6619136,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981011888508,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981013564640,
                next_for_neutral_type = 1,
                last_strong_type = 2,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981011888789,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 239 '\357',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 2896,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 150 '\226',
                flags = 222 '\336'
              }, {
                next_for_neutral_pos = 2896,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 239 '\357',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 139981011893720,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 150 '\226',
                flags = 222 '\336'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 14058,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981011894601,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199283872,
                next_for_neutral_type = 2,
                last_strong_type = 4,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 1,
                prev_for_neutral_type = 3,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 11,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 14058,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981013564640,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 5,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 139981011888789,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 2896,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 150 '\226',
                flags = 222 '\336'
              }, {
                next_for_neutral_pos = 2896,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 239 '\357',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 139981011893720,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 150 '\226',
                flags = 222 '\336'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 14058,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981011894601,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 239 '\357',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 140728199322200,
                next_for_neutral_type = 7,
                last_strong_type = 2,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 38,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195963154,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 7,
                level = 255 '\377',
                flags = 255 '\377'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199311992,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195963154,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 239 '\357',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 140728199322200,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199312104,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }},
            string = {
              lstring = XIL(0),
              s = 0x0,
              schars = 93862195963533,
              bufpos = -1,
              from_disp_str = true,
              unibyte = false
            },
            w = 0x0,
            paragraph_dir = (unknown: 0x26153000),
            separator_limit = 0,
            first_elt = false,
            new_paragraph = false,
            frame_window_p = false
          },
          paragraph_embedding = L2R,
          min_width_property = XIL(0x8),
          min_width_start = 8
        }
        ppos_it = {
          window = XIL(0x7ffdd6549020),
          w = 0x555d00000001,
          f = 0x0,
          method = GET_FROM_BUFFER,
          stop_charpos = 0,
          prev_stop = 0,
          base_level_stop = 0,
          end_charpos = 0,
          medium_narrowing_begv = 93862247772984,
          medium_narrowing_zv = 93862247773072,
          large_narrowing_begv = 93862247773160,
          large_narrowing_zv = 93862247773248,
          s = 0x555e01efba18 "",
          string_nchars = 0,
          multibyte_p = false,
          tab_line_p = false,
          header_line_p = false,
          string_from_display_prop_p = false,
          string_from_prefix_prop_p = false,
          from_disp_prop_p = false,
          ellipsis_p = false,
          avoid_cursor_p = false,
          dp = 0x0,
          dpvec = 0x0,
          dpend = 0x0,
          dpvec_char_len = 0,
          dpvec_face_id = 0,
          saved_face_id = 0,
          ctl_chars = {XIL(0) <repeats 16 times>},
          start = {
            pos = {
              charpos = 0,
              bytepos = 0
            },
            overlay_string_index = 0,
            string_pos = {
              charpos = 0,
              bytepos = 0
            },
            dpvec_index = 0
          },
          current = {
            pos = {
              charpos = 0,
              bytepos = 0
            },
            overlay_string_index = 93862247774656,
            string_pos = {
              charpos = 93862247774480,
              bytepos = 93862247774392
            },
            dpvec_index = 32487432
          },
          n_overlay_strings = 0,
          overlay_strings_charpos = 3129692744534274048,
          overlay_strings = {XIL(0x8), XIL(0x555dfed91191), XIL(0x1), XIL(0x7ffdd654a5f8), XIL(0x1), XIL(0), XIL(0), XIL(0x555dfed94b4d), make_fixnum(169), XIL(0), XIL(0), XIL(0), XIL(0x700000007), XIL(0x9aef), XIL(0x700000007), XIL(0x9aed)},
          string_overlays = {XIL(0x700000000), XIL(0x9aef), make_fixnum(7516192768), XIL(0x2b6ee6f826153000), XIL(0x1), XIL(0x2b6ee6f826153000), XIL(0x555e00c267f0), XIL(0x7ffdd6540a30), XIL(0x555e00c267f0), XIL(0x7f4fe86c8b00), XIL(0x555e00c267f0), XIL(0), XIL(0x4), make_fixnum(34995294530116), XIL(0x3a014cf), XIL(0x3d6540a50)},
          string = XIL(0x7ffdd6540a50),
          from_overlay = XIL(0x7ffdd6540970),
          stack = {{
              string = XIL(0x3a000ad),
              string_nchars = 638922752,
              end_charpos = 4294967296,
              stop_charpos = 140728199285296,
              prev_stop = 4,
              base_level_stop = 140728199290160,
              cmp_it = {
                stop_pos = 93862232842992,
                id = 1,
                ch = 24386496,
                rule_idx = 139981184998947,
                lookback = 17,
                nglyphs = 355,
                reversed_p = false,
                parent_it = 0x11,
                charpos = 140728199285296,
                nchars = 1,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = -395991472,
              u = {
                image = {
                  object = XIL(0x555e00c10d60),
                  slice = {
                    x = XIL(0x555e013775f0),
                    y = XIL(0),
                    width = XIL(0x3),
                    height = XIL(0)
                  },
                  image_id = 458752
                },
                stretch = {
                  object = XIL(0x555e00c10d60)
                },
                xwidget = {
                  object = XIL(0x555e00c10d60)
                }
              },
              position = {
                charpos = 60817581,
                bytepos = 140728199290160
              },
              current = {
                pos = {
                  charpos = 1524713390084,
                  bytepos = 17
                },
                overlay_string_index = 60817581,
                string_pos = {
                  charpos = 140728199290161,
                  bytepos = -8589934588
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = 1114112,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0x130000),
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0x150000)
            }, {
              string = XIL(0),
              string_nchars = 1507328,
              end_charpos = 0,
              stop_charpos = 1638400,
              prev_stop = 0,
              base_level_stop = 1769472,
              cmp_it = {
                stop_pos = 0,
                id = 1900544,
                ch = 0,
                rule_idx = 2031616,
                lookback = 0,
                nglyphs = 2162688,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 2293760,
                nchars = 0,
                nbytes = 0,
                from = 2424832,
                to = 0,
                width = 0
              },
              face_id = 2555904,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0x290000),
                    y = XIL(0),
                    width = XIL(0x2b0000),
                    height = XIL(0)
                  },
                  image_id = 2949120
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 3080192
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 3211264
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 3342336,
                  bytepos = 0
                },
                dpvec_index = 3473408
              },
              from_overlay = XIL(0),
              area = 3604480,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0x390000),
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0x3b0000)
            }, {
              string = XIL(0),
              string_nchars = -19329279,
              end_charpos = 0,
              stop_charpos = 93862195957647,
              prev_stop = 0,
              base_level_stop = 93862195965374,
              cmp_it = {
                stop_pos = 0,
                id = 4390912,
                ch = 1,
                rule_idx = 4521984,
                lookback = 0,
                nglyphs = 4653056,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 93862195957505,
                nchars = 0,
                nbytes = 0,
                from = -19329279,
                to = 21853,
                width = 0
              },
              face_id = -19329137,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = make_fixnum(23465548991343),
                    y = XIL(0x1),
                    width = XIL(0x510000),
                    height = XIL(0x1)
                  },
                  image_id = 5439488
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 5570560
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 5701632
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 93862195957505,
                  bytepos = 0
                },
                dpvec_index = -19329137
              },
              from_overlay = XIL(0),
              area = -19321410,
              method = 21853,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0x5f0000),
              voffset = 0,
              space_width = XIL(0x1),
              font_height = XIL(0x610000)
            }, {
              string = XIL(0),
              string_nchars = 6488064,
              end_charpos = 0,
              stop_charpos = 93862195957505,
              prev_stop = 0,
              base_level_stop = 93862195957505,
              cmp_it = {
                stop_pos = 0,
                id = 93862195957647,
                ch = 0,
                rule_idx = 93862195965374,
                lookback = 1,
                nglyphs = -699134528,
                reversed_p = 253,
                parent_it = 0x7ffd00000001,
                charpos = 2327,
                nchars = 0,
                nbytes = 0,
                from = -18770972,
                to = 21853,
                width = 21641891
              },
              face_id = 638922752,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0x7ffdd6540e10),
                    y = XIL(0x7ffdd6541100),
                    width = XIL(0x7ffdd6549bc0),
                    height = XIL(0x7ffdd6549bc0)
                  },
                  image_id = 93862195526737
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 93862195957505
              },
              current = {
                pos = {
                  charpos = 16384,
                  bytepos = 93862195957647
                },
                overlay_string_index = 140728199322560,
                string_pos = {
                  charpos = 93862195965374,
                  bytepos = 0
                },
                dpvec_index = -699134400
              },
              from_overlay = XIL(0x555e00000001),
              area = -699134448,
              method = 32765,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (WORD_WRAP | unknown: 0x8f4),
              voffset = 0,
              space_width = XIL(0x8f7),
              font_height = XIL(0x555dfed90f01)
            }, {
              string = XIL(0x7ffd00000001),
              string_nchars = -19329279,
              end_charpos = 0,
              stop_charpos = 93862195957647,
              prev_stop = 9558,
              base_level_stop = 93862195965374,
              cmp_it = {
                stop_pos = 140724603453441,
                id = 18,
                ch = 1,
                rule_idx = 140728199289384,
                lookback = 93862232925424,
                nglyphs = -699134112,
                reversed_p = 253,
                parent_it = 0x52,
                charpos = 139981184304819,
                nchars = -388763520,
                nbytes = 32591,
                from = 82,
                to = 0,
                width = -699134176
              },
              face_id = 18,
              u = {
                image = {
                  object = XIL(0x555e01e51533),
                  slice = {
                    x = XIL(0x7ffdd6541a28),
                    y = XIL(0x100000029),
                    width = XIL(0),
                    height = XIL(0x555e010d24f0)
                  },
                  image_id = 3129692744534274048
                },
                stretch = {
                  object = XIL(0x555e01e51533)
                },
                xwidget = {
                  object = XIL(0x555e01e51533)
                }
              },
              position = {
                charpos = 0,
                bytepos = 4
              },
              current = {
                pos = {
                  charpos = 93866510254079,
                  bytepos = 1
                },
                overlay_string_index = 93866510254079,
                string_pos = {
                  charpos = 93862232928928,
                  bytepos = 4
                },
                dpvec_index = -389106070
              },
              from_overlay = XIL(0x100000029),
              area = 638922752,
              method = 728688376,
              paragraph_embedding = (L2R | unknown: 0x28),
              multibyte_p = true,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = (unknown: 0xfed91088),
              voffset = 21853,
              space_width = XIL(0x1),
              font_height = XIL(0x555dfed90f01)
            }},
          sp = -699108744,
          selective = 93862195957647,
          what = 4294967295,
          face_id = 0,
          selective_display_ellipsis_p = false,
          ctl_arrow_p = true,
          face_box_p = true,
          start_of_box_run_p = true,
          end_of_box_run_p = true,
          overlay_strings_at_end_processed_p = true,
          ignore_overlay_strings_at_pos_p = false,
          glyph_not_available_p = true,
          starts_in_middle_of_char_p = true,
          face_before_selective_p = false,
          constrain_row_ascent_descent_p = true,
          line_number_produced_p = true,
          line_wrap = (WORD_WRAP | unknown: 0x555c),
          base_face_id = -1,
          c = 0,
          len = 0,
          cmp_it = {
            stop_pos = 4294967299,
            id = 1,
            ch = 1,
            rule_idx = 3129692744534274048,
            lookback = 4294967295,
            nglyphs = -19328888,
            reversed_p = 93,
            parent_it = 0x1,
            charpos = 93862195957505,
            nchars = -699108632,
            nbytes = 32765,
            from = -19329137,
            to = 21853,
            width = 1
          },
          char_to_display = -19321410,
          glyphless_method = 21853,
          image_id = 0,
          xwidget = 0x0,
          slice = {
            x = XIL(0x600000003),
            y = XIL(0x1),
            width = XIL(0x1),
            height = XIL(0x555dfed919fd)
          },
          space_width = XIL(0xd1bf),
          voffset = 24720,
          tab_width = -10668,
          font_height = XIL(0x555e00ba8b28),
          object = make_fixnum(1073741826),
          position = {
            charpos = 1,
            bytepos = 4294967319
          },
          truncation_pixel_width = 23,
          continuation_pixel_width = 0,
          first_visible_x = 0,
          last_visible_x = 0,
          last_visible_y = 0,
          extra_line_spacing = 0,
          max_extra_line_spacing = 0,
          override_ascent = 638922752,
          override_descent = 728688376,
          override_boff = 6,
          glyph_row = 0x7ffdd6545fc8,
          area = LEFT_MARGIN_AREA,
          nglyphs = 0,
          pixel_width = 0,
          ascent = 0,
          descent = 40531,
          max_ascent = 0,
          max_descent = 0,
          phys_ascent = 0,
          phys_descent = 0,
          max_phys_ascent = 0,
          max_phys_descent = -19329279,
          current_x = 21853,
          wrap_prefix_width = 1,
          continuation_lines_width = 0,
          eol_pos = {
            charpos = 93862195957537,
            bytepos = 140728199307208
          },
          current_y = -19323630,
          first_vpos = 21853,
          vpos = 0,
          hpos = 1,
          lnum = 1,
          lnum_bytepos = 1,
          lnum_width = 0,
          lnum_pixel_width = 0,
          pt_lnum = 0,
          stretch_adjust = 638922752,
          left_user_fringe_bitmap = 59128,
          right_user_fringe_bitmap = 11118,
          left_user_fringe_face_id = 41,
          right_user_fringe_face_id = 0,
          bidi_p = false,
          bidi_it = {
            bytepos = 140728199307208,
            charpos = 0,
            ch = 0,
            nchars = 0,
            ch_len = 40531,
            type = UNKNOWN_BT,
            type_after_wn = UNKNOWN_BT,
            orig_type = 4275644045,
            resolved_level = 93 ']',
            isolate_level = 85 'U',
            invalid_levels = 12884901891,
            invalid_isolates = 0,
            prev = {
              charpos = 0,
              type = 37,
              orig_type = UNKNOWN_BT
            },
            last_strong = {
              charpos = 1,
              type = 36,
              orig_type = UNKNOWN_BT
            },
            next_for_neutral = {
              charpos = 12884901889,
              type = WEAK_ES,
              orig_type = UNKNOWN_BT
            },
            prev_for_neutral = {
              charpos = 3,
              type = 38,
              orig_type = UNKNOWN_BT
            },
            next_for_ws = {
              charpos = 1,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            bracket_pairing_pos = 4294967296,
            bracket_enclosed_type = STRONG_L,
            next_en_pos = 38,
            next_en_type = UNKNOWN_BT,
            sos = NEUTRAL_DIR,
            scan_dir = 0,
            disp_pos = 0,
            disp_prop = 17638640,
            stack_idx = 21854,
            level_stack = {{
                next_for_neutral_pos = 140728199287472,
                next_for_neutral_type = 3,
                last_strong_type = 2,
                prev_for_neutral_type = 1,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184304819,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 211 '\323',
                flags = 232 '\350'
              }, {
                next_for_neutral_pos = 83,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 19,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199290232,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 211 '\323',
                flags = 232 '\350'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 3,
                level = 13 '\r',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 7,
                level = 55 '7',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 193 '\301',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862232928688,
                next_for_neutral_type = 4,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981185005162,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 7,
                level = 116 't',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862232842992,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 193 '\301',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862232842992,
                next_for_neutral_type = 4,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199288096,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 83,
                next_for_neutral_type = 1,
                last_strong_type = 7,
                prev_for_neutral_type = 5,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1653562408961,
                next_for_neutral_type = 4,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199287648,
                next_for_neutral_type = 1,
                last_strong_type = 2,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862235698672,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 7,
                level = 116 't',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 3,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862232927248,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862232928688,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 6,
                level = 13 '\r',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981012373914,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 4,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 3,
                level = 146 '\222',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981178222676,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862224901008,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = -1,
                next_for_neutral_type = 4,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 146 '\222',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 4096,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 0,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 1,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 80,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199288096,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981180192118,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 6,
                level = 215 '\327',
                flags = 232 '\350'
              }, {
                next_for_neutral_pos = 140728199288008,
                next_for_neutral_type = 0,
                last_strong_type = 3,
                prev_for_neutral_type = 2,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862224732544,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 7,
                level = 160 '\240',
                flags = 3 '\003'
              }, {
                next_for_neutral_pos = 140728199288320,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 65 'A',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 60823551,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 65 'A',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862224896704,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 3,
                prev_for_neutral_type = 3,
                level = 146 '\222',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981178224532,
                next_for_neutral_type = 2,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862224640560,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 3,
                level = 148 '\224',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 7,
                level = 147 '\223',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981178645310,
                next_for_neutral_type = 4,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196859363,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 6,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 384,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196864775,
                next_for_neutral_type = 2,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196683681,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 91 '[',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196859363,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 320,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196864775,
                next_for_neutral_type = 2,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196683681,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 1,
                level = 91 '[',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 150 '\226',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199291952,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196690919,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 1,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 118 'v',
                flags = 1 '\001'
              }, {
                next_for_neutral_pos = 93862195526737,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 2,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862225174992,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 7,
                level = 6 '\006',
                flags = 233 '\351'
              }, {
                next_for_neutral_pos = 9888368,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 2,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 139981057938996,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 2,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199288528,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 3,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199288560,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 3,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 139981057969343,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 3,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 140728199288560,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 3,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 139981057800206,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862225168288,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 147 '\223',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862232823648,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981012130025,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 5,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 139981180277953,
                next_for_neutral_type = 6,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 77996718,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 147 '\223',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862224957552,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862247320656,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 7,
                level = 255 '\377',
                flags = 127 '\177'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981180278524,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 147 '\223',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862197246032,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 142,
                next_for_neutral_type = 7,
                last_strong_type = 7,
                prev_for_neutral_type = 7,
                level = 255 '\377',
                flags = 127 '\177'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 5,
                level = 201 '\311',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 1,
                last_strong_type = 5,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981055058084,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 4,
                level = 168 '\250',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981054792652,
                next_for_neutral_type = 0,
                last_strong_type = 2,
                prev_for_neutral_type = 5,
                level = 201 '\311',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981054502179,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862226348320,
                next_for_neutral_type = 1,
                last_strong_type = 5,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184593290,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 7,
                level = 192 '\300',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 5,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 4,
                last_strong_type = 6,
                prev_for_neutral_type = 4,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862227874272,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 139981184603390,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 3,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199289152,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862197260939,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 3,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862197270107,
                next_for_neutral_type = 6,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 176093659137,
                next_for_neutral_type = 4,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 3,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 3,
                last_strong_type = 4,
                prev_for_neutral_type = 5,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862202890184,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 6,
                prev_for_neutral_type = 1,
                level = 188 '\274',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862196425212,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862197382906,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199289152,
                next_for_neutral_type = 4,
                last_strong_type = 1,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 3129692744534274048,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 4,
                level = 179 '\263',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140728199319584,
                next_for_neutral_type = 1,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 8,
                next_for_neutral_type = 0,
                last_strong_type = 5,
                prev_for_neutral_type = 4,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 140724603453441,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195526801,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 1,
                next_for_neutral_type = 0,
                last_strong_type = 1,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 93862195527283,
                next_for_neutral_type = 0,
                last_strong_type = 4,
                prev_for_neutral_type = 0,
                level = 84 'T',
                flags = 214 '\326'
              }, {
                next_for_neutral_pos = 93862195562312,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }},
            string = {
              lstring = XIL(0x7ffdd6549020),
              s = 0x1 <error: Cannot access memory at address 0x1>,
              schars = 8,
              bufpos = 8,
              from_disp_str = true,
              unibyte = false
            },
            w = 0xcd6549020,
            paragraph_dir = (unknown: 0xd6545f58),
            separator_limit = 0,
            first_elt = false,
            new_paragraph = false,
            frame_window_p = false
          },
          paragraph_embedding = NEUTRAL_DIR,
          min_width_property = XIL(0x9e53),
          min_width_start = 0
        }
        wrap_data = 0x0
        atpos_data = 0x0
        atx_data = 0x0
        ppos_data = <optimized out>
        may_wrap = false
        prev_method = GET_FROM_BUFFER
        closest_pos = 40531
        prev_pos = 40035
        saw_smaller_pos = false
        line_number_pending = false
        this_line_subject_to_line_prefix = 0
#8  0x0000555dfed330b5 in move_it_to
    (it=it@entry=0x7ffdd6547d50, to_charpos=to_charpos@entry=-1, to_x=to_x@entry=-1, to_y=to_y@entry=-1, to_vpos=-452, op=op@entry=4)
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:10661
        skip = <optimized out>
        skip2 = <optimized out>
        line_height = <optimized out>
        line_start_x = 0
        reached = 0
        max_current_x = 0
        backup_data = 0x0
#9  0x0000555dfed2de3d in move_it_by_lines
    (it=it@entry=0x7ffdd6547d50, dvpos=dvpos@entry=1)
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:11234
#10 0x0000555dfed2e8ad in move_it_vertically_backward
    (it=it@entry=0x7ffdd6547d50, dy=<optimized out>, dy@entry=289)
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:11143
        last_pos = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        last_y = -9841
        last_vpos = -453
        target_y = 289
        y0 = <optimized out>
        y1 = <optimized out>
        line_height = <optimized out>
        nlines = <optimized out>
        h = <optimized out>
        it2 = {
          window = XIL(0x555e00ba8b2d),
          w = 0x555e00ba8b28,
          f = 0x555e00ba88b0,
          method = GET_FROM_BUFFER,
          stop_charpos = 40531,
          prev_stop = 457,
          base_level_stop = 457,
          end_charpos = 40531,
          medium_narrowing_begv = 0,
          medium_narrowing_zv = 0,
          large_narrowing_begv = 0,
          large_narrowing_zv = 0,
          s = 0x0,
          string_nchars = 0,
          multibyte_p = true,
          tab_line_p = false,
          header_line_p = false,
          string_from_display_prop_p = false,
          string_from_prefix_prop_p = false,
          from_disp_prop_p = false,
          ellipsis_p = false,
          avoid_cursor_p = false,
          dp = 0x555e016965f0,
          dpvec = 0x0,
          dpend = 0x0,
          dpvec_char_len = 0,
          dpvec_face_id = 0,
          saved_face_id = 26,
          ctl_chars = {XIL(0) <repeats 16 times>},
          start = {
            pos = {
              charpos = 40530,
              bytepos = 53695
            },
            overlay_string_index = -1,
            string_pos = {
              charpos = -1,
              bytepos = -1
            },
            dpvec_index = -1
          },
          current = {
            pos = {
              charpos = 40530,
              bytepos = 53695
            },
            overlay_string_index = -1,
            string_pos = {
              charpos = -1,
              bytepos = -1
            },
            dpvec_index = -1
          },
          n_overlay_strings = 0,
          overlay_strings_charpos = 40529,
          overlay_strings = {XIL(0) <repeats 16 times>},
          string_overlays = {XIL(0) <repeats 16 times>},
          string = XIL(0),
          from_overlay = XIL(0),
          stack = {{
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }},
          sp = 0,
          selective = 0,
          what = IT_CHARACTER,
          face_id = 0,
          selective_display_ellipsis_p = true,
          ctl_arrow_p = true,
          face_box_p = false,
          start_of_box_run_p = false,
          end_of_box_run_p = false,
          overlay_strings_at_end_processed_p = false,
          ignore_overlay_strings_at_pos_p = false,
          glyph_not_available_p = false,
          starts_in_middle_of_char_p = false,
          face_before_selective_p = false,
          constrain_row_ascent_descent_p = false,
          line_number_produced_p = false,
          line_wrap = WINDOW_WRAP,
          base_face_id = 0,
          c = 0,
          len = 1,
          cmp_it = {
            stop_pos = 40530,
            id = -1,
            ch = -2,
            rule_idx = 0,
            lookback = 4,
            nglyphs = 5,
            reversed_p = false,
            parent_it = 0x7ffdd6547d50,
            charpos = 451,
            nchars = 1,
            nbytes = 2,
            from = 0,
            to = 1,
            width = 1
          },
          char_to_display = 10,
          glyphless_method = GLYPHLESS_DISPLAY_THIN_SPACE,
          image_id = 0,
          xwidget = 0x0,
          slice = {
            x = XIL(0),
            y = XIL(0),
            width = XIL(0),
            height = XIL(0)
          },
          space_width = XIL(0),
          voffset = 0,
          tab_width = 8,
          font_height = XIL(0),
          object = XIL(0x555e015b0845),
          position = {
            charpos = 40529,
            bytepos = 53694
          },
          truncation_pixel_width = 0,
          continuation_pixel_width = 8,
          first_visible_x = 0,
          last_visible_x = 640,
          last_visible_y = 578,
          extra_line_spacing = 0,
          max_extra_line_spacing = 0,
          override_ascent = -1,
          override_descent = 0,
          override_boff = 0,
          glyph_row = 0x0,
          area = TEXT_AREA,
          nglyphs = 0,
          pixel_width = 0,
          ascent = 13,
          descent = 4,
          max_ascent = 0,
          max_descent = 0,
          phys_ascent = 13,
          phys_descent = 4,
          max_phys_ascent = 14,
          max_phys_descent = 9,
          current_x = 0,
          wrap_prefix_width = 0,
          continuation_lines_width = 0,
          eol_pos = {
            charpos = 0,
            bytepos = 0
          },
          current_y = 11112,
          first_vpos = 0,
          vpos = 458,
          hpos = 0,
          lnum = 0,
          lnum_bytepos = 0,
          lnum_width = 0,
          lnum_pixel_width = 0,
          pt_lnum = 0,
          stretch_adjust = 0,
          left_user_fringe_bitmap = 0,
          right_user_fringe_bitmap = 0,
          left_user_fringe_face_id = 0,
          right_user_fringe_face_id = 0,
          bidi_p = true,
          bidi_it = {
            bytepos = 53695,
            charpos = 40530,
            ch = 10,
            nchars = 1,
            ch_len = 1,
            type = NEUTRAL_B,
            type_after_wn = NEUTRAL_B,
            orig_type = NEUTRAL_B,
            resolved_level = 0 '\000',
            isolate_level = 0 '\000',
            invalid_levels = 0,
            invalid_isolates = 0,
            prev = {
              charpos = 40529,
              type = UNKNOWN_BT,
              orig_type = NEUTRAL_B
            },
            last_strong = {
              charpos = 40524,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            next_for_neutral = {
              charpos = 40529,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            prev_for_neutral = {
              charpos = 40530,
              type = STRONG_L,
              orig_type = NEUTRAL_ON
            },
            next_for_ws = {
              charpos = -1,
              type = UNKNOWN_BT,
              orig_type = UNKNOWN_BT
            },
            bracket_pairing_pos = -1,
            bracket_enclosed_type = UNKNOWN_BT,
            next_en_pos = 0,
            next_en_type = UNKNOWN_BT,
            sos = L2R,
            scan_dir = 1,
            disp_pos = 40531,
            disp_prop = 0,
            stack_idx = 0,
            level_stack = {{
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 3 '\003',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 5 '\005',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 7 '\a',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 9 '\t',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 11 '\v',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 13 '\r',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 15 '\017',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 17 '\021',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 19 '\023',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 21 '\025',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 23 '\027',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 25 '\031',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 27 '\033',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 29 '\035',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 31 '\037',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 33 '!',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 35 '#',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 37 '%',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 39 '\'',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 41 ')',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 43 '+',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 45 '-',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 47 '/',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 49 '1',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 51 '3',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 53 '5',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 55 '7',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 57 '9',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 59 ';',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 61 '=',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 63 '?',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 65 'A',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 67 'C',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 69 'E',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 71 'G',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 73 'I',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 75 'K',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 77 'M',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 79 'O',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 81 'Q',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 83 'S',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 85 'U',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 87 'W',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 89 'Y',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 91 '[',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 93 ']',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 95 '_',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 97 'a',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 99 'c',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 101 'e',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 103 'g',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 105 'i',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 107 'k',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 109 'm',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 111 'o',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              } <repeats 71 times>},
            string = {
              lstring = XIL(0),
              s = 0x0,
              schars = 0,
              bufpos = 0,
              from_disp_str = false,
              unibyte = false
            },
            w = 0x555e00ba8b28,
            paragraph_dir = L2R,
            separator_limit = 40530,
            first_elt = false,
            new_paragraph = true,
            frame_window_p = true
          },
          paragraph_embedding = L2R,
          min_width_property = XIL(0),
          min_width_start = 0
        }
        it3 = {
          window = XIL(0x555e00ba8b2d),
          w = 0x555e00ba8b28,
          f = 0x555e00ba88b0,
          method = GET_FROM_BUFFER,
          stop_charpos = 40456,
          prev_stop = 40441,
          base_level_stop = 449,
          end_charpos = 40531,
          medium_narrowing_begv = 0,
          medium_narrowing_zv = 0,
          large_narrowing_begv = 0,
          large_narrowing_zv = 0,
          s = 0x0,
          string_nchars = 0,
          multibyte_p = true,
          tab_line_p = false,
          header_line_p = false,
          string_from_display_prop_p = false,
          string_from_prefix_prop_p = false,
          from_disp_prop_p = false,
          ellipsis_p = false,
          avoid_cursor_p = false,
          dp = 0x555e016965f0,
          dpvec = 0x0,
          dpend = 0x0,
          dpvec_char_len = 0,
          dpvec_face_id = 0,
          saved_face_id = 25,
          ctl_chars = {XIL(0) <repeats 16 times>},
          start = {
            pos = {
              charpos = 40530,
              bytepos = 53695
            },
            overlay_string_index = -1,
            string_pos = {
              charpos = -1,
              bytepos = -1
            },
            dpvec_index = -1
          },
          current = {
            pos = {
              charpos = 40449,
              bytepos = 53600
            },
            overlay_string_index = -1,
            string_pos = {
              charpos = -1,
              bytepos = -1
            },
            dpvec_index = -1
          },
          n_overlay_strings = 0,
          overlay_strings_charpos = 40442,
          overlay_strings = {XIL(0) <repeats 16 times>},
          string_overlays = {XIL(0) <repeats 16 times>},
          string = XIL(0),
          from_overlay = XIL(0),
          stack = {{
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }},
          sp = 0,
          selective = 0,
          what = IT_CHARACTER,
          face_id = 25,
          selective_display_ellipsis_p = true,
          ctl_arrow_p = true,
          face_box_p = false,
          start_of_box_run_p = false,
          end_of_box_run_p = false,
          overlay_strings_at_end_processed_p = false,
          ignore_overlay_strings_at_pos_p = false,
          glyph_not_available_p = false,
          starts_in_middle_of_char_p = false,
          face_before_selective_p = false,
          constrain_row_ascent_descent_p = false,
          line_number_produced_p = false,
          line_wrap = WINDOW_WRAP,
          base_face_id = 0,
          c = 120,
          len = 1,
          cmp_it = {
            stop_pos = 40483,
            id = -1,
            ch = 1605,
            rule_idx = 0,
            lookback = 0,
            nglyphs = 5,
            reversed_p = false,
            parent_it = 0x7ffdd6547d50,
            charpos = 40483,
            nchars = 1,
            nbytes = 2,
            from = 0,
            to = 1,
            width = 1
          },
          char_to_display = 120,
          glyphless_method = GLYPHLESS_DISPLAY_THIN_SPACE,
          image_id = 0,
          xwidget = 0x0,
          slice = {
            x = XIL(0),
            y = XIL(0),
            width = XIL(0),
            height = XIL(0)
          },
          space_width = XIL(0),
          voffset = 0,
          tab_width = 8,
          font_height = XIL(0),
          object = XIL(0x555e015b0845),
          position = {
            charpos = 40449,
            bytepos = 53600
          },
          truncation_pixel_width = 0,
          continuation_pixel_width = 8,
          first_visible_x = 0,
          last_visible_x = 640,
          last_visible_y = 578,
          extra_line_spacing = 0,
          max_extra_line_spacing = 0,
          override_ascent = -1,
          override_descent = 0,
          override_boff = 0,
          glyph_row = 0x0,
          area = TEXT_AREA,
          nglyphs = 1,
          pixel_width = 8,
          ascent = 13,
          descent = 4,
          max_ascent = 0,
          max_descent = 0,
          phys_ascent = 7,
          phys_descent = 0,
          max_phys_ascent = 14,
          max_phys_descent = 9,
          current_x = 0,
          wrap_prefix_width = 0,
          continuation_lines_width = 636,
          eol_pos = {
            charpos = 0,
            bytepos = 0
          },
          current_y = 601,
          first_vpos = 0,
          vpos = 1,
          hpos = 0,
          lnum = 0,
          lnum_bytepos = 0,
          lnum_width = 0,
          lnum_pixel_width = 0,
          pt_lnum = 0,
          stretch_adjust = 0,
          left_user_fringe_bitmap = 0,
          right_user_fringe_bitmap = 0,
          left_user_fringe_face_id = 0,
          right_user_fringe_face_id = 0,
          bidi_p = true,
          bidi_it = {
            bytepos = 53600,
            charpos = 40449,
            ch = 120,
            nchars = 1,
            ch_len = 1,
            type = STRONG_L,
            type_after_wn = STRONG_L,
            orig_type = STRONG_L,
            resolved_level = 108 'l',
            isolate_level = 0 '\000',
            invalid_levels = 0,
            invalid_isolates = 0,
            prev = {
              charpos = 40448,
              type = STRONG_L,
              orig_type = STRONG_L
            },
            last_strong = {
              charpos = 40448,
              type = STRONG_L,
              orig_type = STRONG_L
            },
            next_for_neutral = {
              charpos = 40447,
              type = UNKNOWN_BT,
              orig_type = STRONG_L
            },
            prev_for_neutral = {
              charpos = 40448,
              type = STRONG_L,
              orig_type = STRONG_L
            },
            next_for_ws = {
              charpos = 40447,
              type = STRONG_L,
              orig_type = UNKNOWN_BT
            },
            bracket_pairing_pos = -1,
            bracket_enclosed_type = UNKNOWN_BT,
            next_en_pos = 0,
            next_en_type = UNKNOWN_BT,
            sos = R2L,
            scan_dir = 1,
            disp_pos = 40531,
            disp_prop = 0,
            stack_idx = 54,
            level_stack = {{
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 3 '\003',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 5 '\005',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 7 '\a',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 9 '\t',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 11 '\v',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 13 '\r',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 15 '\017',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 17 '\021',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 19 '\023',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 21 '\025',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 23 '\027',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 25 '\031',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 27 '\033',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 29 '\035',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 31 '\037',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 33 '!',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 35 '#',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 37 '%',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 39 '\'',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 41 ')',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 43 '+',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 45 '-',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 47 '/',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 49 '1',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 51 '3',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 53 '5',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 55 '7',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 57 '9',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 59 ';',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 61 '=',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 63 '?',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 65 'A',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 67 'C',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 69 'E',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 71 'G',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 73 'I',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 75 'K',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 77 'M',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 79 'O',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 81 'Q',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 83 'S',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 85 'U',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 87 'W',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 89 'Y',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 91 '[',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 93 ']',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 95 '_',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 97 'a',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 99 'c',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 101 'e',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 103 'g',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 105 'i',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 107 'k',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 109 'm',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 111 'o',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              } <repeats 71 times>},
            string = {
              lstring = XIL(0),
              s = 0x0,
              schars = 0,
              bufpos = 0,
              from_disp_str = false,
              unibyte = false
            },
            w = 0x555e00ba8b28,
            paragraph_dir = L2R,
            separator_limit = -1,
            first_elt = false,
            new_paragraph = false,
            frame_window_p = true
          },
          paragraph_embedding = L2R,
          min_width_property = XIL(0),
          min_width_start = 0
        }
        it2data = 0x0
        it3data = 0x0
        start_pos = <optimized out>
        nchars_per_row = <optimized out>
        pos_limit = <optimized out>
#11 0x0000555dfed50f77 in redisplay_window
    (window=XIL(0x555e00ba8b2d), just_this_one_p=just_this_one_p@entry=true)
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:20698
        w = 0x555e00ba8b28
        f = <optimized out>
        buffer = <optimized out>
        old = <optimized out>
        lpoint = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        opoint = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        startp = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        update_mode_line = true
        tem = <optimized out>
        it = {
          window = XIL(0x555e00ba8b2d),
          w = 0x555e00ba8b28,
          f = 0x555e00ba88b0,
          method = GET_FROM_BUFFER,
          stop_charpos = 716,
          prev_stop = 712,
          base_level_stop = 449,
          end_charpos = 40531,
          medium_narrowing_begv = 0,
          medium_narrowing_zv = 0,
          large_narrowing_begv = 0,
          large_narrowing_zv = 0,
          s = 0x0,
          string_nchars = 0,
          multibyte_p = true,
          tab_line_p = false,
          header_line_p = false,
          string_from_display_prop_p = false,
          string_from_prefix_prop_p = false,
          from_disp_prop_p = false,
          ellipsis_p = false,
          avoid_cursor_p = false,
          dp = 0x555e016965f0,
          dpvec = 0x0,
          dpend = 0x0,
          dpvec_char_len = 0,
          dpvec_face_id = 0,
          saved_face_id = 0,
          ctl_chars = {XIL(0) <repeats 16 times>},
          start = {
            pos = {
              charpos = 40530,
              bytepos = 53695
            },
            overlay_string_index = -1,
            string_pos = {
              charpos = -1,
              bytepos = -1
            },
            dpvec_index = -1
          },
          current = {
            pos = {
              charpos = 712,
              bytepos = 851
            },
            overlay_string_index = -1,
            string_pos = {
              charpos = -1,
              bytepos = -1
            },
            dpvec_index = -1
          },
          n_overlay_strings = 0,
          overlay_strings_charpos = 40042,
          overlay_strings = {XIL(0) <repeats 16 times>},
          string_overlays = {XIL(0) <repeats 16 times>},
          string = XIL(0),
          from_overlay = XIL(0),
          stack = {{
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }, {
              string = XIL(0),
              string_nchars = 0,
              end_charpos = 0,
              stop_charpos = 0,
              prev_stop = 0,
              base_level_stop = 0,
              cmp_it = {
                stop_pos = 0,
                id = 0,
                ch = 0,
                rule_idx = 0,
                lookback = 0,
                nglyphs = 0,
                reversed_p = false,
                parent_it = 0x0,
                charpos = 0,
                nchars = 0,
                nbytes = 0,
                from = 0,
                to = 0,
                width = 0
              },
              face_id = 0,
              u = {
                image = {
                  object = XIL(0),
                  slice = {
                    x = XIL(0),
                    y = XIL(0),
                    width = XIL(0),
                    height = XIL(0)
                  },
                  image_id = 0
                },
                stretch = {
                  object = XIL(0)
                },
                xwidget = {
                  object = XIL(0)
                }
              },
              position = {
                charpos = 0,
                bytepos = 0
              },
              current = {
                pos = {
                  charpos = 0,
                  bytepos = 0
                },
                overlay_string_index = 0,
                string_pos = {
                  charpos = 0,
                  bytepos = 0
                },
                dpvec_index = 0
              },
              from_overlay = XIL(0),
              area = LEFT_MARGIN_AREA,
              method = GET_FROM_BUFFER,
              paragraph_embedding = NEUTRAL_DIR,
              multibyte_p = false,
              string_from_display_prop_p = false,
              string_from_prefix_prop_p = false,
              display_ellipsis_p = false,
              avoid_cursor_p = false,
              bidi_p = false,
              from_disp_prop_p = false,
              line_wrap = TRUNCATE,
              voffset = 0,
              space_width = XIL(0),
              font_height = XIL(0)
            }},
          sp = 0,
          selective = 0,
          what = IT_CHARACTER,
          face_id = 25,
          selective_display_ellipsis_p = true,
          ctl_arrow_p = true,
          face_box_p = false,
          start_of_box_run_p = false,
          end_of_box_run_p = false,
          overlay_strings_at_end_processed_p = false,
          ignore_overlay_strings_at_pos_p = false,
          glyph_not_available_p = false,
          starts_in_middle_of_char_p = false,
          face_before_selective_p = false,
          constrain_row_ascent_descent_p = false,
          line_number_produced_p = false,
          line_wrap = WINDOW_WRAP,
          base_face_id = 0,
          c = 34,
          len = 1,
          cmp_it = {
            stop_pos = 1212,
            id = -1,
            ch = -2,
            rule_idx = 0,
            lookback = 0,
            nglyphs = 4,
            reversed_p = false,
            parent_it = 0x7ffdd6547d50,
            charpos = 40037,
            nchars = 1,
            nbytes = 2,
            from = 0,
            to = 1,
            width = 1
          },
          char_to_display = 34,
          glyphless_method = GLYPHLESS_DISPLAY_THIN_SPACE,
          image_id = 0,
          xwidget = 0x0,
          slice = {
            x = XIL(0),
            y = XIL(0),
            width = XIL(0),
            height = XIL(0)
          },
          space_width = XIL(0),
          voffset = 0,
          tab_width = 8,
          font_height = XIL(0),
          object = XIL(0x555e015b0845),
          position = {
            charpos = 712,
            bytepos = 851
          },
          truncation_pixel_width = 0,
          continuation_pixel_width = 8,
          first_visible_x = 0,
          last_visible_x = 640,
          last_visible_y = 578,
          extra_line_spacing = 0,
          max_extra_line_spacing = 0,
          override_ascent = -1,
          override_descent = 0,
          override_boff = 0,
          glyph_row = 0x0,
          area = TEXT_AREA,
          nglyphs = 1,
          pixel_width = 8,
          ascent = 13,
          descent = 4,
          max_ascent = 14,
          max_descent = 9,
          phys_ascent = 9,
          phys_descent = -5,
          max_phys_ascent = 14,
          max_phys_descent = 9,
          current_x = 568,
          wrap_prefix_width = 0,
          continuation_lines_width = 3185,
          eol_pos = {
            charpos = 0,
            bytepos = 0
          },
          current_y = -9841,
          first_vpos = 0,
          vpos = -453,
          hpos = 77,
          lnum = 0,
          lnum_bytepos = 0,
          lnum_width = 0,
          lnum_pixel_width = 0,
          pt_lnum = 0,
          stretch_adjust = 0,
          left_user_fringe_bitmap = 0,
          right_user_fringe_bitmap = 0,
          left_user_fringe_face_id = 0,
          right_user_fringe_face_id = 0,
          bidi_p = false,
          bidi_it = {
            bytepos = 53054,
            charpos = 40034,
            ch = 40,
            nchars = 1,
            ch_len = 1,
            type = STRONG_R,
            type_after_wn = NEUTRAL_ON,
            orig_type = NEUTRAL_ON,
            resolved_level = 107 'k',
            isolate_level = 0 '\000',
            invalid_levels = 0,
            invalid_isolates = 0,
            prev = {
              charpos = 40033,
              type = NEUTRAL_WS,
              orig_type = NEUTRAL_WS
            },
            last_strong = {
              charpos = 40030,
              type = STRONG_L,
              orig_type = STRONG_L
            },
            next_for_neutral = {
              charpos = 40036,
              type = STRONG_R,
              orig_type = RLE
            },
            prev_for_neutral = {
              charpos = 40030,
              type = STRONG_L,
              orig_type = STRONG_L
            },
            next_for_ws = {
              charpos = 39983,
              type = STRONG_L,
              orig_type = UNKNOWN_BT
            },
            bracket_pairing_pos = 40034,
            bracket_enclosed_type = UNKNOWN_BT,
            next_en_pos = 0,
            next_en_type = UNKNOWN_BT,
            sos = R2L,
            scan_dir = -1,
            disp_pos = 40085,
            disp_prop = 0,
            stack_idx = 54,
            level_stack = {{
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 1 '\001',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 3 '\003',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 5 '\005',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 7 '\a',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 9 '\t',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 11 '\v',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 13 '\r',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 15 '\017',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 17 '\021',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 19 '\023',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 21 '\025',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 23 '\027',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 25 '\031',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 27 '\033',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 29 '\035',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 31 '\037',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 33 '!',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 35 '#',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 37 '%',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 39 '\'',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 41 ')',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 43 '+',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 45 '-',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 47 '/',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 49 '1',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 51 '3',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 53 '5',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 55 '7',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 57 '9',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 59 ';',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 61 '=',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 63 '?',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 65 'A',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 67 'C',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 69 'E',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 71 'G',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 73 'I',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 75 'K',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 77 'M',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 79 'O',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 81 'Q',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 83 'S',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 85 'U',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 87 'W',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 89 'Y',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 91 '[',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 93 ']',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 95 '_',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 97 'a',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 99 'c',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 101 'e',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 103 'g',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 105 'i',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 107 'k',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 109 'm',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 111 'o',
                flags = 0 '\000'
              }, {
                next_for_neutral_pos = 0,
                next_for_neutral_type = 0,
                last_strong_type = 0,
                prev_for_neutral_type = 0,
                level = 0 '\000',
                flags = 0 '\000'
              } <repeats 71 times>},
            string = {
              lstring = XIL(0),
              s = 0x0,
              schars = 0,
              bufpos = 0,
              from_disp_str = false,
              unibyte = false
            },
            w = 0x555e00ba8b28,
            paragraph_dir = L2R,
            separator_limit = -1,
            first_elt = false,
            new_paragraph = false,
            frame_window_p = true
          },
          paragraph_embedding = L2R,
          min_width_property = XIL(0),
          min_width_start = 0
        }
        current_matrix_up_to_date_p = <optimized out>
        used_current_matrix_p = false
        temp_scroll_step = false
        count = {
          bytes = <optimized out>
        }
        rc = <optimized out>
        centering_position = 289
        last_line_misfit = false
        beg_unchanged = <optimized out>
        end_unchanged = <optimized out>
        frame_line_height = <optimized out>
        margin = 0
        use_desired_matrix = <optimized out>
        itdata = <optimized out>
        force_start = <optimized out>
#12 0x0000555dfed51a11 in redisplay_window_1
    (window=window@entry=XIL(0x555e00ba8b2d))
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:18020
#13 0x0000555dfee6d9d9 in internal_condition_case_1
    (bfun=bfun@entry=0x555dfed519e2 <redisplay_window_1>, arg=XIL(0x555e00ba8b2d), handlers=<optimized out>, hfun=hfun@entry=0x555dfed16ccc <redisplay_window_error>)
    at /home/steve/src/emacs/emacs-master/src/eval.c:1561
        val = <optimized out>
        c = 0x555e0098b1e0
#14 0x0000555dfed41f6c in redisplay_internal ()
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:17509
        mini_window = <optimized out>
        mini_frame = <optimized out>
        w = 0x555e00ba8b28
        sw = <optimized out>
        fr = <optimized out>
        pending = false
        must_finish = <optimized out>
        match_p = <optimized out>
        tlbufpos = {
          charpos = 0,
          bytepos = 93862238029888
        }
        tlendpos = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        number_of_visible_frames = 1
        sf = 0x555e00ba88b0
        polling_stopped_here = <optimized out>
        tail = <optimized out>
        frame = <optimized out>
        hscroll_retries = <optimized out>
        garbaged_frame_retries = <optimized out>
        consider_all_windows_p = <optimized out>
        update_miniwindow_p = <optimized out>
        count = {
          bytes = <optimized out>
        }
        retry_frame = <optimized out>
#15 0x0000555dfed423b5 in redisplay ()
    at /home/steve/src/emacs/emacs-master/src/xdisp.c:16562
#16 0x0000555dfee05740 in read_char
    (commandflag=1, map=map@entry=XIL(0x555e01519413), prev_event=XIL(0), used_mouse_menu=used_mouse_menu@entry=0x7ffdd654bc0b, end_time=end_time@entry=0x0)
    at /home/steve/src/emacs/emacs-master/src/keyboard.c:2686
        echo_current = true
        c = <optimized out>
        local_getcjmp = {{
            __jmpbuf = {1, 27636981458258969, 93862238029888, 0, 46118721390016, 93862247222787, -28850258421494759, -6135642403306222567},
            __mask_was_saved = 0,
            __saved_mask = {
              __val = {0, 93862203400864, 93862196859555, 93862235650832, 128, 0, 139980926107192, 46118722745832, 93862196801135, 139980932887488, 93862196471598, 4294967296, 93862238029888, 0, 42960, 0}
            }
          }}
        save_jump = {{
            __jmpbuf = {0, 0, 0, 0, 0, 0, 0, 0},
            __mask_was_saved = 0,
            __saved_mask = {
              __val = {0 <repeats 16 times>}
            }
          }}
        tem = <optimized out>
        save = <optimized out>
        previous_echo_area_message = XIL(0)
        also_record = XIL(0)
        reread = false
        recorded = false
        polling_stopped_here = false
        orig_kboard = 0x555e00a22280
        jmpcount = {
          bytes = <optimized out>
        }
#17 0x0000555dfee07009 in read_key_sequence
    (keybuf=keybuf@entry=0x7ffdd654bd30, prompt=prompt@entry=XIL(0), dont_downcase_last=dont_downcase_last@entry=false, can_return_switch_frame=can_return_switch_frame@entry=true, fix_current_buffer=fix_current_buffer@entry=true, prevent_redisplay=prevent_redisplay@entry=false, disable_text_conversion_p=false)
    at /home/steve/src/emacs/emacs-master/src/keyboard.c:10707
        interrupted_kboard = 0x555e00a22280
        interrupted_frame = 0x555e00ba88b0
        key = <optimized out>
        used_mouse_menu = false
        echo_local_start = 0
        last_real_key_start = 0
        keys_local_start = 0
        new_binding = <optimized out>
        count = {
          bytes = <optimized out>
        }
        t = 0
        echo_start = 0
        keys_start = 0
        current_binding = XIL(0x555e01519413)
        first_unbound = 31
        mock_input = 0
        used_mouse_menu_history = {false <repeats 30 times>}
        fkey = {
          parent = XIL(0x7f4fd9297ae3),
          map = XIL(0x7f4fd9297ae3),
          start = 0,
          end = 0
        }
        keytran = {
          parent = XIL(0x7f4fd9c70133),
          map = XIL(0x7f4fd9c70133),
          start = 0,
          end = 0
        }
        indec = {
          parent = XIL(0x7f4fd9297ad3),
          map = XIL(0x7f4fd9297ad3),
          start = 0,
          end = 0
        }
        shift_translated = false
        delayed_switch_frame = XIL(0)
        original_uppercase = XIL(0)
        original_uppercase_position = -1
        dummyflag = false
        disabled_conversion = false
        starting_buffer = 0x555e015b0840
        fake_prefixed_keys = XIL(0)
        first_event = XIL(0)
        second_event = <optimized out>
#18 0x0000555dfee08590 in command_loop_1 ()
    at /home/steve/src/emacs/emacs-master/src/keyboard.c:1428
        cmd = <optimized out>
        keybuf = {XIL(0xab90), make_fixnum(6), XIL(0xa0), XIL(0x7ffdd654bda0), make_fixnum(0), XIL(0x30), XIL(0x555dff4b0120), XIL(0x555dfee6d2a3), XIL(0x7ffdd654bdf0), XIL(0x60), XIL(0), XIL(0), XIL(0), XIL(0x555dfee6e707), XIL(0xb), XIL(0xf900), XIL(0x30), XIL(0x555e0173d01d), XIL(0x6bd0), XIL(0x2b6ee6f826153000), XIL(0x555e0143d7d3), XIL(0x60), XIL(0), XIL(0x555dfedfdaa5), XIL(0), XIL(0x2b6ee6f826153000), XIL(0x60), XIL(0x7f4fd96b68f3), XIL(0), XIL(0x555dfee72300)}
        i = <optimized out>
        last_pt = <optimized out>
        prev_modiff = 2889
        prev_buffer = 0x555e015b0840
#19 0x0000555dfee6d963 in internal_condition_case
    (bfun=bfun@entry=0x555dfee083bd <command_loop_1>, handlers=handlers@entry=XIL(0x90), hfun=hfun@entry=0x555dfedfd963 <cmd_error>)
    at /home/steve/src/emacs/emacs-master/src/eval.c:1537
        val = <optimized out>
        c = 0x555e0098b0a0
#20 0x0000555dfedf803d in command_loop_2 (handlers=handlers@entry=XIL(0x90))
    at /home/steve/src/emacs/emacs-master/src/keyboard.c:1167
        val = <optimized out>
#21 0x0000555dfee6d8a1 in internal_catch
    (tag=tag@entry=XIL(0x108f0), func=func@entry=0x555dfedf8023 <command_loop_2>, arg=arg@entry=XIL(0x90)) at /home/steve/src/emacs/emacs-master/src/eval.c:1217
        val = <optimized out>
        c = 0x555e0098af60
#22 0x0000555dfedf8000 in command_loop ()
    at /home/steve/src/emacs/emacs-master/src/keyboard.c:1145
#23 0x0000555dfedfd57a in recursive_edit_1 ()
    at /home/steve/src/emacs/emacs-master/src/keyboard.c:753
        count = {
          bytes = <optimized out>
        }
        val = <optimized out>
#24 0x0000555dfedfd888 in Frecursive_edit ()
    at /home/steve/src/emacs/emacs-master/src/keyboard.c:836
        count = {
          bytes = <optimized out>
        }
        buffer = <optimized out>
#25 0x0000555dfedf762a in main (argc=2, argv=0x7ffdd654c0d8)
    at /home/steve/src/emacs/emacs-master/src/emacs.c:2624
        stack_bottom_variable = 0x7f4fde8d03ea <_nl_C_name>
        old_argc = <optimized out>
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = 0x0
        dump_mode = <optimized out>
        skip_args = 0
        temacs = 0x0
        attempt_load_pdump = <optimized out>
        only_version = false
        rlim = {
          rlim_cur = 10022912,
          rlim_max = 18446744073709551615
        }
        lc_all = <optimized out>
        sockfd = -1
        module_assertions = <optimized out>

Lisp Backtrace:
"redisplay_internal (C function)" (0x0)
(gdb) kill
Kill the program being debugged? (y or n) y
[Inferior 1 (process 5190) killed]
(gdb) 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-03-07 11:12                                   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-03-07 11:25                                     ` Eli Zaretskii
  2024-03-21  8:29                                     ` Eli Zaretskii
  1 sibling, 0 replies; 26+ messages in thread
From: Eli Zaretskii @ 2024-03-07 11:25 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Thu, 07 Mar 2024 12:12:51 +0100
> 
> Most of the Arabic words in the problematic file are enclosed in the
> bidirectional control characters POP DIRECTIONAL FORMATTING (#x202c) and
> RIGHT-TO-LEFT EMBEDDING (#x202b).  I did not add these characters, but I
> had copy-&-pasted most of the Arabic from a PDF file I did not create.
> I don't know if PDFs of Arabic text normally contain these control
> characters, but the consequences for Emacs were dramatic.  When I simply
> visited this file in Emacs (started with -Q) there was an immediate
> slowdown, and in top I could see Emacs using 100% of a CPU thread.  When
> I ran the end-of-buffer benchmark on this file, the result (with your
> patch) was:
> 
> (27.962602113 2 0.0226042269999999977)
> 
> However, the display of that result only appeared in the echo area after
> more than a minute (I timed it with a stopwatch).  At that point the
> mode line showed the buffer at 4% from the top, and the display remained
> frozen afterwards.  After several minutes during which Emacs consumed
> 100% CPU, and I had switched the focus away from the Emacs frame, the
> CPU consumption stopped, but as soon as I switch focus back to that
> frame, it went back to 100%.  The display never changed from showing the
> buffer at 4%, apparently being in some kind of infinite loop.  After
> about 15 minutes I started gdb, attached the Emacs process and produced
> a backtrace, which I've attached, in the hope it helps to diagnose the
> problem.
> 
> The problem seems to be certainly related the the bidirectional control
> characters, because I made a copy of the file and removed all
> occurrences of these control characters from it, and then ran the
> end-of-buffer benchmark, getting this result (with your patch):
> 
> (0.716104165 4 0.04223660400000001)
> 
> And the display updated normally and CPU consumption was normal.
> 
> Nevertheless, there seems to be something else besides the control
> characters involved in this issue, because as a futher test, I created a
> buffer consisting of more than 1000 copies of the test string
> concatenating the Arabic example in etc/HELLO and "Hello", and manually
> enclosed each Arabic word in the above control characters, but the
> benchmark result in this buffer was not significantly different from the
> result without the control characters (and similar to the above result
> for the copy of the problematic file without the control characters),
> and the display did not freeze.

Please submit a separate bug report, and please post an example of a
problematic file with the report.

Thanks.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-03-07 11:12                                   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-03-07 11:25                                     ` Eli Zaretskii
@ 2024-03-21  8:29                                     ` Eli Zaretskii
  2024-03-21 15:08                                       ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2024-03-21  8:29 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 69385-done

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: 69385@debbugs.gnu.org
> Date: Thu, 07 Mar 2024 12:12:51 +0100
> 
> > So I will wait for you to report any problems, and if no problems are
> > seen, will install in a week or so.
> 
> I haven't yet run into any issues concerning your patch

No further comments, so I assume the patch is indeed safe, and I have
now installed it on the master branch.

I'm therefore closing this bug.  Thanks for testing the patch.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#69385: 30.0.50; Long lines with bidi text slow down Emacs
  2024-03-21  8:29                                     ` Eli Zaretskii
@ 2024-03-21 15:08                                       ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 26+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-03-21 15:08 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 69385-done

On Thu, 21 Mar 2024 10:29:12 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69385@debbugs.gnu.org
>> Date: Thu, 07 Mar 2024 12:12:51 +0100
>>
>> > So I will wait for you to report any problems, and if no problems are
>> > seen, will install in a week or so.
>>
>> I haven't yet run into any issues concerning your patch
>
> No further comments, so I assume the patch is indeed safe, and I have
> now installed it on the master branch.
>
> I'm therefore closing this bug.  Thanks for testing the patch.

Thanks for the optimization!

Steve Berman





^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2024-03-21 15:08 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-25 16:23 bug#69385: 30.0.50; Long lines with bidi text slow down Emacs Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-25 17:06 ` Eli Zaretskii
2024-02-25 18:03   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-25 19:31     ` Eli Zaretskii
2024-02-25 20:36       ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-26 12:33         ` Eli Zaretskii
2024-02-26 14:13           ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-26 14:19             ` Eli Zaretskii
2024-02-26 14:22               ` Eli Zaretskii
2024-02-26 15:17                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-26 15:52                   ` Eli Zaretskii
2024-02-26 15:59                     ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-26 16:36                       ` Eli Zaretskii
2024-02-26 17:12                         ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-26 19:18                           ` Eli Zaretskii
2024-02-26 21:47                             ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-27  8:52                               ` Eli Zaretskii
2024-02-27 10:13                                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-03 15:18                             ` Eli Zaretskii
2024-03-04 13:28                               ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-04 14:43                                 ` Eli Zaretskii
2024-03-07 11:12                                   ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-07 11:25                                     ` Eli Zaretskii
2024-03-21  8:29                                     ` Eli Zaretskii
2024-03-21 15:08                                       ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-26 15:17               ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.