<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>161913</bug_id>
          
          <creation_ts>2007-01-13 17:34 0000</creation_ts>
          <short_desc>media-video/xine-ui-0.99.5_pre20060716 - crash if I double click the video window in xine (xine-ui)</short_desc>
          <delta_ts>2007-06-10 10:11:16 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Applications</component>
          <version>unspecified</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>173952</dependson>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>putidjcinthesubjectline@bethere.co.uk</reporter>
          <assigned_to>media-video@gentoo.org</assigned_to>
          <cc>deadhead@goodfellow.it</cc>
    
    <cc>garwin@gmx.de</cc>
    
    <cc>GNUtoo@no-log.org</cc>
    
    <cc>hlieberman@gentoo.org</cc>
    
    <cc>jakub@gentoo.org</cc>
    
    <cc>pacho@condmat1.ciencias.uniovi.es</cc>
    
    <cc>petr.uzel@centrum.cz</cc>
    
    <cc>putidjcinthesubjectline@bethere.co.uk</cc>
    
    <cc>rfink@web.de</cc>
    
    <cc>sawk.ita@gmail.com</cc>

      

      
          <long_desc isprivate="0">
            <who>putidjcinthesubjectline@bethere.co.uk</who>
            <bug_when>2007-01-13 17:34:08 0000</bug_when>
            <thetext>Double clicking the movie playback window in xine to toggle fullscreen mode results in a crash. Terminal dump follows...

This is xine (X11 gui) - a free video player v0.99.5.
(c) 2000-2004 The xine Team.
X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  3 (X_GetWindowAttributes)
  Resource id in failed request:  0x2a002c3
  Serial number of failed request:  2420
  Current serial number in output stream:  2421



Reproducible: Always

Steps to Reproduce:
1. launch xine
2. double click the movie window
3. crash

Actual Results:  
It crashed.

Expected Results:  
In all previous versions fullscreen mode would be toggled. Equivalent of the &apos;F&apos; hotkey.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2007-01-13 19:21:08 0000</bug_when>
            <thetext>Reopen with a backtrace http://www.gentoo.org/proj/en/qa/backtraces.xml and emerge --info </thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>putidjcinthesubjectline@bethere.co.uk</who>
            <bug_when>2007-01-14 00:15:23 0000</bug_when>
            <thetext>themainbox stephen # emerge --info
Portage 2.1.1-r2 (default-linux/x86/2006.0, gcc-4.1.1, glibc-2.4-r4, 2.6.18-gentoo-r2 i686)
=================================================================
System uname: 2.6.18-gentoo-r2 i686 AMD Athlon(tm) XP 3200+
Gentoo Base System version 1.12.6
Last Sync: Sat, 13 Jan 2007 06:00:04 +0000
app-admin/eselect-compiler: [Not Present]
dev-java/java-config: 1.3.7, 2.0.30
dev-lang/python:     2.3.5-r2, 2.4.3-r4
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache:     [Not Present]
dev-util/confcache:  [Not Present]
sys-apps/sandbox:    1.2.17
sys-devel/autoconf:  2.13, 2.61
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10
sys-devel/binutils:  2.16.1-r3
sys-devel/gcc-config: 1.3.14
sys-devel/libtool:   1.5.22
virtual/os-headers:  2.6.17-r2
ACCEPT_KEYWORDS=&quot;x86&quot;
AUTOCLEAN=&quot;yes&quot;
CBUILD=&quot;i686-pc-linux-gnu&quot;
CFLAGS=&quot;-O1 -march=athlon-xp -ggdb&quot;
CHOST=&quot;i686-pc-linux-gnu&quot;
CONFIG_PROTECT=&quot;/etc /usr/kde/3.3/env /usr/kde/3.3/share/config /usr/kde/3.3/shutdown /usr/kde/3.4/env /usr/kde/3.4/share/config /usr/kde/3.4/shutdown /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/X11/xkb /usr/share/config&quot;
CONFIG_PROTECT_MASK=&quot;/etc/env.d /etc/env.d/java/ /etc/gconf /etc/java-config/vms/ /etc/revdep-rebuild /etc/terminfo /etc/texmf/web2c&quot;
CXXFLAGS=&quot;-O1 -march=athlon-xp -ggdb&quot;
DISTDIR=&quot;/usr/portage/distfiles&quot;
FEATURES=&quot;autoconfig distlocks metadata-transfer sandbox sfperms splitdebug strict&quot;
GENTOO_MIRRORS=&quot;http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo&quot;
LINGUAS=&quot;en_GB&quot;
MAKEOPTS=&quot;-j2&quot;
PKGDIR=&quot;/usr/portage/packages&quot;
PORTAGE_RSYNC_OPTS=&quot;--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=&apos;/distfiles&apos; --exclude=&apos;/local&apos; --exclude=&apos;/packages&apos;&quot;
PORTAGE_TMPDIR=&quot;/var/tmp&quot;
PORTDIR=&quot;/usr/portage&quot;
PORTDIR_OVERLAY=&quot;/usr/local/portage&quot;
SYNC=&quot;rsync://rsync.gentoo.org/gentoo-portage&quot;
USE=&quot;x86 16bit 3dnow 3dnowext X aac alsa alsa_cards_intel8x0 alsa_pcm_plugins_adpcm alsa_pcm_plugins_alaw alsa_pcm_plugins_asym alsa_pcm_plugins_copy alsa_pcm_plugins_dmix alsa_pcm_plugins_dshare alsa_pcm_plugins_dsnoop alsa_pcm_plugins_empty alsa_pcm_plugins_extplug alsa_pcm_plugins_file alsa_pcm_plugins_hooks alsa_pcm_plugins_iec958 alsa_pcm_plugins_ioplug alsa_pcm_plugins_ladspa alsa_pcm_plugins_lfloat alsa_pcm_plugins_linear alsa_pcm_plugins_meter alsa_pcm_plugins_mulaw alsa_pcm_plugins_multi alsa_pcm_plugins_null alsa_pcm_plugins_plug alsa_pcm_plugins_rate alsa_pcm_plugins_route alsa_pcm_plugins_share alsa_pcm_plugins_shm alsa_pcm_plugins_softvol apache2 apm arts asf berkdb bitmap-fonts cairo caps cli cpudetection cracklib crypt cups divx divx4linux dlloader doc dri dvdread eds elibc_glibc emboss encode esd fbdev flac foomaticdb fortran gdbm gif gmedia gnome gpm gstreamer gtk gtk2 iconv imlib input_devices_evdev input_devices_keyboard input_devices_mouse ipv6 isdnlog jack jack-tmpfs java jpeg kde kernel_linux libg++ libwww linguas_en_GB live mad mikmod mmx mmxext motif mp3 mpeg mplayer ncurses netjack network nls nptl nptlonly nsplugin ogg opengl oss pam pcre pdf perl pic png pppd python qt3 qt4 quicktime readline real realmedia reflection sdl session spell spl sse ssl tcpd truetype truetype-fonts type1-fonts udev userland_GNU video_cards_fbdev video_cards_nv video_cards_nvidia video_cards_vesa vorbis win32codecs wma wmp wxwindows xine xml xorg xv xvid zlib&quot;
Unset:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, LDFLAGS, PORTAGE_RSYNC_EXTRA_OPTS



gdb /usr/bin/xine
GNU gdb 6.4
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type &quot;show copying&quot; to see the conditions.
There is absolutely no warranty for GDB.  Type &quot;show warranty&quot; for details.
This GDB was configured as &quot;i686-pc-linux-gnu&quot;...Using host libthread_db library &quot;/lib/libthread_db.so.1&quot;.
(gdb) handle SIG33 nostop noprint noignore pass
Signal        Stop      Print   Pass to program Description
SIG33         No        No      Yes             Real-time event 33
(gdb) run
Starting program: /usr/bin/xine
[Thread debugging using libthread_db enabled]
[New Thread -1212921664 (LWP 6623)]
This is xine (X11 gui) - a free video player v0.99.5.
(c) 2000-2004 The xine Team.
[New Thread -1213039712 (LWP 6624)]
[New Thread -1221723232 (LWP 6625)]
[New Thread -1239819360 (LWP 6626)]
[New Thread -1252451424 (LWP 6627)]
[New Thread -1261790304 (LWP 6628)]
[New Thread -1270318176 (LWP 6629)]
[New Thread -1282810976 (LWP 6630)]
[New Thread -1293091936 (LWP 6631)]
[New Thread -1305724000 (LWP 6632)]
[New Thread -1314387040 (LWP 6633)]
[New Thread -1322988640 (LWP 6634)]
[New Thread -1335481440 (LWP 6635)]
[New Thread -1343874144 (LWP 6636)]
[New Thread -1356366944 (LWP 6637)]
[New Thread -1369719904 (LWP 6638)]
[New Thread -1378112608 (LWP 6639)]
[New Thread -1388954720 (LWP 6640)]
[Thread -1388954720 (LWP 6640) exited]
X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  3 (X_GetWindowAttributes)
  Resource id in failed request:  0x2e00377
  Serial number of failed request:  3275
  Current serial number in output stream:  3276

Program exited with code 01.
(gdb) bt
No stack.
(gdb) quit


=============================================================
Looks like a well handled exit rather than an outright crash.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>garwin@gmx.de</who>
            <bug_when>2007-01-14 17:24:09 0000</bug_when>
            <thetext>Same happens here. 

ron@garw ~ $ gdb /usr/bin/xine
GNU gdb 6.4
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type &quot;show copying&quot; to see the conditions.
There is absolutely no warranty for GDB.  Type &quot;show warranty&quot; for details.
This GDB was configured as &quot;x86_64-pc-linux-gnu&quot;...Using host libthread_db library &quot;/lib/libthread_db.so.1&quot;.

(gdb) run
Starting program: /usr/bin/xine
[Thread debugging using libthread_db enabled]
[New Thread 47237126646464 (LWP 29254)]
This is xine (X11 gui) - a free video player v0.99.5-[DEBUG].
(c) 2000-2004 The xine Team.
[New Thread 1082132816 (LWP 29257)]
[New Thread 1090525520 (LWP 29258)]
[New Thread 1098918224 (LWP 29259)]
pixel_aspect: 0.990506
[New Thread 1107310928 (LWP 29260)]
[New Thread 1115703632 (LWP 29261)]
[New Thread 1124096336 (LWP 29262)]
[New Thread 1132489040 (LWP 29263)]
[New Thread 1140881744 (LWP 29264)]
[New Thread 1149274448 (LWP 29265)]
[New Thread 1157667152 (LWP 29266)]
[New Thread 1166059856 (LWP 29267)]
[New Thread 1174452560 (LWP 29268)]
[New Thread 1182845264 (LWP 29269)]
[New Thread 1191237968 (LWP 29270)]

Program received signal SIG33, Real-time event 33.
[Switching to Thread 1191237968 (LWP 29270)]
0x00002af63e577536 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
(gdb) handle SIG33 nostop noprint noignore pass
Signal        Stop      Print   Pass to program Description
SIG33         No        No      Yes             Real-time event 33
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb) run
Starting program: /usr/bin/xine
[Thread debugging using libthread_db enabled]
[New Thread 47883984747200 (LWP 29324)]
This is xine (X11 gui) - a free video player v0.99.5-[DEBUG].
(c) 2000-2004 The xine Team.
[New Thread 1082132816 (LWP 29325)]
[New Thread 1090525520 (LWP 29326)]
[New Thread 1098918224 (LWP 29327)]
pixel_aspect: 0.990506
[New Thread 1107310928 (LWP 29328)]
[New Thread 1115703632 (LWP 29329)]
[New Thread 1124096336 (LWP 29330)]
[New Thread 1132489040 (LWP 29331)]
[New Thread 1140881744 (LWP 29332)]
[New Thread 1149274448 (LWP 29333)]
[New Thread 1157667152 (LWP 29334)]
[New Thread 1166059856 (LWP 29335)]
[New Thread 1174452560 (LWP 29336)]
[New Thread 1182845264 (LWP 29337)]
[New Thread 1191237968 (LWP 29338)]
[New Thread 1199630672 (LWP 29339)]
[New Thread 1208023376 (LWP 29340)]
[New Thread 1216416080 (LWP 29343)]
[Thread 1216416080 (LWP 29343) exited]
X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  3 (X_GetWindowAttributes)
  Resource id in failed request:  0x340032e
  Serial number of failed request:  2323
  Current serial number in output stream:  2324

Program exited with code 01.
(gdb)  


garw ~ # emerge --info
Portage 2.1.1-r2 (default-linux/amd64/2006.1/desktop, gcc-4.1.1, glibc-2.4-r4, 2.6.18-gentoo x86_64)
=================================================================
System uname: 2.6.18-gentoo x86_64 AMD Athlon(tm) 64 Processor 3200+
Gentoo Base System version 1.12.6
Last Sync: Sat, 13 Jan 2007 17:30:01 +0000
distcc 2.18.3 x86_64-pc-linux-gnu (protocols 1 and 2) (default port 3632) [disabled]
ccache version 2.3 [disabled]
app-admin/eselect-compiler: [Not Present]
dev-java/java-config: 1.3.7, 2.0.30
dev-lang/python:     2.4.3-r4
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache:     2.3
dev-util/confcache:  [Not Present]
sys-apps/sandbox:    1.2.17
sys-devel/autoconf:  2.13, 2.61
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10
sys-devel/binutils:  2.16.1-r3
sys-devel/gcc-config: 1.3.14
sys-devel/libtool:   1.5.22
virtual/os-headers:  2.6.11-r2
ACCEPT_KEYWORDS=&quot;amd64&quot;
AUTOCLEAN=&quot;yes&quot;
CBUILD=&quot;x86_64-pc-linux-gnu&quot;
CFLAGS=&quot;-O2 -march=k8 -pipe -ggdb&quot;
CHOST=&quot;x86_64-pc-linux-gnu&quot;
CONFIG_PROTECT=&quot;/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/X11/xkb /usr/share/config&quot;
CONFIG_PROTECT_MASK=&quot;/etc/env.d /etc/env.d/java/ /etc/gconf /etc/java-config/vms/ /etc/revdep-rebuild /etc/splash /etc/terminfo&quot;
CXXFLAGS=&quot;-O2 -march=k8 -pipe -ggdb&quot;
DISTDIR=&quot;/usr/portage/distfiles&quot;
FEATURES=&quot;autoconfig distlocks metadata-transfer parallel-fetch sandbox sfperms splitdebug strict&quot;
GENTOO_MIRRORS=&quot;http://distfiles.gentoo.org http://distro.ibiblio.org/pub/linux/distributions/gentoo&quot;
LANG=&quot;de_DE@euro&quot;
LC_ALL=&quot;de_DE@euro&quot;
LINGUAS=&quot;de&quot;
MAKEOPTS=&quot;-j2&quot;
PKGDIR=&quot;/usr/portage/packages&quot;
PORTAGE_RSYNC_OPTS=&quot;--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=&apos;/distfiles&apos; --exclude=&apos;/local&apos; --exclude=&apos;/packages&apos;&quot;
PORTAGE_TMPDIR=&quot;/var/tmp&quot;
PORTDIR=&quot;/usr/portage&quot;
PORTDIR_OVERLAY=&quot;/usr/local/portage /usr/portage/local/layman/gentoo-de /usr/portage/local/layman/liquidx&quot;
SYNC=&quot;rsync://rsync.gentoo.org/gentoo-portage&quot;
USE=&quot;amd64 X Xaw3d aac alsa alsa_cards_ali5451 alsa_cards_als4000 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_hda-intel alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_maestro3 alsa_cards_trident alsa_cards_usb-audio alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_ymfpci alsa_pcm_plugins_adpcm alsa_pcm_plugins_alaw alsa_pcm_plugins_asym alsa_pcm_plugins_copy alsa_pcm_plugins_dmix alsa_pcm_plugins_dshare alsa_pcm_plugins_dsnoop alsa_pcm_plugins_empty alsa_pcm_plugins_extplug alsa_pcm_plugins_file alsa_pcm_plugins_hooks alsa_pcm_plugins_iec958 alsa_pcm_plugins_ioplug alsa_pcm_plugins_ladspa alsa_pcm_plugins_lfloat alsa_pcm_plugins_linear alsa_pcm_plugins_meter alsa_pcm_plugins_mulaw alsa_pcm_plugins_multi alsa_pcm_plugins_null alsa_pcm_plugins_plug alsa_pcm_plugins_rate alsa_pcm_plugins_route alsa_pcm_plugins_share alsa_pcm_plugins_shm alsa_pcm_plugins_softvol bash-completion berkdb bitmap-fonts bzip2 cairo cddb cdr cli cracklib crypt cups curl dbus dlloader dri dts dvd dvdr elibc_glibc emboss encode fam fbcon ffmpeg firefox flac fortran gdbm gif gpm gtk2 hal iconv imagemagick imlib input_devices_evdev input_devices_keyboard input_devices_mouse ipv6 isdnlog ivman java jpeg kde kdeenablefinal kernel_linux lcms libg++ linguas_de mad mikmod mng mp3 mpeg ncurses nls nptl nptlonly ogg oggvorbis opengl pam pcre perl png ppds pppd python qt qt3 qt4 quicktime readline reflection samba sdl session speex spell spl ssl svg tcpd tiff truetype truetype-fonts type1-fonts udev unicode usb userland_GNU userlocales video_cards_fbdev video_cards_nvidia video_cards_vesa videos vorbis xml xml2 xorg xv xvid zlib&quot;
Unset:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LDFLAGS, PORTAGE_RSYNC_EXTRA_OPTS</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>petr.uzel@centrum.cz</who>
            <bug_when>2007-01-16 22:46:46 0000</bug_when>
            <thetext>Same problem here.

petr@knot ~ $ emerge --info
Portage 2.1.1-r2 (default-linux/x86/2006.1/desktop, gcc-4.1.1, glibc-2.4-r4, 2.6.18-gentoo-r6 i686)
=================================================================
System uname: 2.6.18-gentoo-r6 i686 Intel(R) Pentium(R) 4 CPU 2.80GHz
Gentoo Base System version 1.12.6
Last Sync: Tue, 16 Jan 2007 16:50:01 +0000
app-admin/eselect-compiler: [Not Present]
dev-java/java-config: 1.3.7, 2.0.31-r2
dev-lang/python:     2.3.5, 2.4.3-r4
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache:     [Not Present]
dev-util/confcache:  [Not Present]
sys-apps/sandbox:    1.2.17
sys-devel/autoconf:  2.13, 2.61
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10
sys-devel/binutils:  2.16.1-r3
sys-devel/gcc-config: 1.3.14
sys-devel/libtool:   1.5.22
virtual/os-headers:  2.6.17-r2
ACCEPT_KEYWORDS=&quot;x86&quot;
AUTOCLEAN=&quot;yes&quot;
CBUILD=&quot;i686-pc-linux-gnu&quot;
CFLAGS=&quot;-O2 -march=pentium4 -pipe -fomit-frame-pointer&quot;
CHOST=&quot;i686-pc-linux-gnu&quot;
CONFIG_PROTECT=&quot;/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/X11/xkb /usr/share/config&quot;
CONFIG_PROTECT_MASK=&quot;/etc/env.d /etc/env.d/java/ /etc/gconf /etc/java-config/vms/ /etc/revdep-rebuild /etc/terminfo /etc/texmf/web2c&quot;
CXXFLAGS=&quot;-O2 -march=pentium4 -pipe -fomit-frame-pointer&quot;
DISTDIR=&quot;/usr/portage/distfiles&quot;
FEATURES=&quot;autoconfig distlocks metadata-transfer sandbox sfperms strict&quot;
GENTOO_MIRRORS=&quot;http://distfiles.gentoo.org http://distro.ibiblio.org/pub/linux/distributions/gentoo&quot;
LANG=&quot;cs_CZ&quot;
LC_ALL=&quot;cs_CZ&quot;
LINGUAS=&quot;cs en&quot;
MAKEOPTS=&quot;-j3&quot;
PKGDIR=&quot;/usr/portage/packages&quot;
PORTAGE_RSYNC_OPTS=&quot;--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=&apos;/distfiles&apos; --exclude=&apos;/local&apos; --exclude=&apos;/packages&apos;&quot;
PORTAGE_TMPDIR=&quot;/var/tmp&quot;
PORTDIR=&quot;/usr/portage&quot;
PORTDIR_OVERLAY=&quot;/usr/local/portage&quot;
SYNC=&quot;rsync://rsync.europe.gentoo.org/gentoo-portage&quot;
USE=&quot;x86 X acl alsa alsa_cards_ali5451 alsa_cards_als4000 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_hda-intel alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_maestro3 alsa_cards_trident alsa_cards_usb-audio alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_ymfpci alsa_pcm_plugins_adpcm alsa_pcm_plugins_alaw alsa_pcm_plugins_asym alsa_pcm_plugins_copy alsa_pcm_plugins_dmix alsa_pcm_plugins_dshare alsa_pcm_plugins_dsnoop alsa_pcm_plugins_empty alsa_pcm_plugins_extplug alsa_pcm_plugins_file alsa_pcm_plugins_hooks alsa_pcm_plugins_iec958 alsa_pcm_plugins_ioplug alsa_pcm_plugins_ladspa alsa_pcm_plugins_lfloat alsa_pcm_plugins_linear alsa_pcm_plugins_meter alsa_pcm_plugins_mulaw alsa_pcm_plugins_multi alsa_pcm_plugins_null alsa_pcm_plugins_plug alsa_pcm_plugins_rate alsa_pcm_plugins_route alsa_pcm_plugins_share alsa_pcm_plugins_shm alsa_pcm_plugins_softvol apache2 arts bash-completion bitmap-fonts bzip2 cairo cdr cli cracklib crypt cups dbus dga dlloader doc dri dvd dvdr eds elibc_glibc emboss encode fam firefox flac gdbm gif gpm gstreamer hal iconv input_devices_keyboard input_devices_mouse isdnlog jpeg kde kernel_linux kipi libg++ linguas_cs linguas_en lirc_devices_animax mad media-gfx/showimg mikmod mmx mp3 mpeg ncurses nls nptl nptlonly nvidia ogg opengl pam pcre perl png postgres ppds pppd python qt3 qt4 quicktime readline reflection scanner sdl session speex spell spl sse sse2 ssl svga tcpd tetex threads tiff truetype truetype-fonts type1-fonts udev unicode usb userland_GNU video_cards_nvidia video_cards_vesa video_cards_vga vorbis win32codecs xine xinetd xml xorg xv zlib&quot;
Unset:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LDFLAGS, PORTAGE_RSYNC_EXTRA_OPTS
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2007-02-04 08:44:23 0000</bug_when>
            <thetext>*** Bug 165222 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rfink@web.de</who>
            <bug_when>2007-02-11 15:11:35 0000</bug_when>
            <thetext>(In reply to comment #0)
&gt; Double clicking the movie playback window in xine to toggle fullscreen mode
&gt; results in a crash. Terminal dump follows...
&gt; 
&gt; This is xine (X11 gui) - a free video player v0.99.5.
&gt; (c) 2000-2004 The xine Team.
&gt; X Error of failed request:  BadWindow (invalid Window parameter)
&gt;   Major opcode of failed request:  3 (X_GetWindowAttributes)
&gt;   Resource id in failed request:  0x2a002c3
&gt;   Serial number of failed request:  2420
&gt;   Current serial number in output stream:  2421
&gt; 
&gt; 
&gt; 
&gt; Reproducible: Always
&gt; 
&gt; Steps to Reproduce:
&gt; 1. launch xine
&gt; 2. double click the movie window
&gt; 3. crash
&gt; 
&gt; Actual Results:  
&gt; It crashed.
&gt; 
&gt; Expected Results:  
&gt; In all previous versions fullscreen mode would be toggled. Equivalent of the
&gt; &apos;F&apos; hotkey.
&gt; 

I had the same problem with the BadWindow error message. I did not find out the  reason for this bug, but I thing it is gtk-lib related. I solved it by using the CVS version from the xine-ui developer. According to the xine mailing list at sourceforge http://sourceforge.net/mailarchive/message.php?msg_id=37500860 you can read that the bug is solved in the CVS version.

I spent several hours for fixing it until I found the entry in the xine mailing list. I hope that the patch is integrated very fast into the ebuild of xine-ui.

Robin

BTW: I use Genoo on the AMD64 architecture, consequently I think the bug is also relevant for AMD64 and not only for x86.

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rfink@web.de</who>
            <bug_when>2007-02-11 15:19:21 0000</bug_when>
            <thetext>Created an attachment (id=109852)
This is the replacement for the non-working xitk.c causing the bug

For me a replacement of the file in the xine-ui version 0.99.5_pre20060716 source directory
src/xitk/xine-toolkit/xitk.c
with the one attached here fixed the bug.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pacho@condmat1.ciencias.uniovi.es</who>
            <bug_when>2007-03-03 23:01:13 0000</bug_when>
            <thetext>Seems fixed in media-video/xine-ui-0.99.5_pre20070303</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2007-03-14 21:01:31 0000</bug_when>
            <thetext>*** Bug 170949 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2007-03-16 19:11:38 0000</bug_when>
            <thetext>*** Bug 140896 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>ssuominen@gentoo.org</who>
            <bug_when>2007-05-11 08:24:56 0000</bug_when>
            <thetext>(In reply to comment #8)
&gt; Seems fixed in media-video/xine-ui-0.99.5_pre20070303
&gt; 

xine-ui-0.99.5.ebuild:KEYWORDS=&quot;~alpha ~amd64 ~hppa ppc ppc64 sparc x86 ~x86-fbsd&quot;
xine-ui-0.99.5_pre20070303.ebuild:KEYWORDS=&quot;alpha amd64&quot;

So this is fixed then?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2007-05-13 05:18:45 0000</bug_when>
            <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; Seems fixed in media-video/xine-ui-0.99.5_pre20070303

Not really, now it doesn&apos;t even start: 

[ebuild   R   ] media-video/xine-ui-0.99.5  USE=&quot;X aalib curl -debug libcaca lirc ncurses nls readline -vdr xinerama&quot; 0 kB 

$ xine
This is xine (X11 gui) - a free video player v0.99.5.
(c) 2000-2007 The xine Team.
xiTK WARNING(_x_error_handler:258): X error received: &apos;BadWindow (invalid Window parameter)&apos;
X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  20 (X_GetProperty)
  Resource id in failed request:  0x1400045
  Serial number of failed request:  42
  Current serial number in output stream:  42
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2007-06-10 10:11:16 0000</bug_when>
            <thetext>(In reply to comment #12)

This only happens w/ libX11-1.1.2; different issue, I&apos;ll file a new bug. Closing this again.
</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>109852</attachid>
            <date>2007-02-11 15:19 0000</date>
            <desc>This is the replacement for the non-working xitk.c causing the bug</desc>
            <filename>xitk.c</filename>
            <type>text/plain</type>
            <data encoding="base64">LyogCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA2IHRoZSB4aW5lIHByb2plY3QKICogCiAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHhpbmUsIGEgdW5peCB2aWRlbyBwbGF5ZXIuCiAqIAogKiB4aW5l
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KICogCiAqIHhpbmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKiAKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0x
MzA3LCBVU0EKICoKICogJElkOiB4aXRrLmMsdiAxLjE1OSAyMDA2LzEyLzE4IDIzOjQ3OjQyIGZz
Y2stcCBFeHAgJAogKgogKi8KI2RlZmluZSBfWElUS19DXwoKLyogcmVxdWlyZWQgdG8gZW5hYmxl
IFBPU0lYIHZhcmlhbnQgb2YgZ2V0cHd1aWRfciBvbiBzb2xhcmlzICovCiNkZWZpbmUgX1BPU0lY
X1BUSFJFQURfU0VNQU5USUNTIDEKCgojaWZkZWYgSEFWRV9DT05GSUdfSAojaW5jbHVkZSAiY29u
ZmlnLmgiCiNlbmRpZgoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2lu
Y2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8cHdkLmg+CiNp
bmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8aW50dHlwZXMuaD4KI2luY2x1ZGUgPHVuaXN0ZC5o
PgojaW5jbHVkZSA8c2lnbmFsLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiNpbmNsdWRlIDxzeXMvdGltZS5oPgoKI2lmZGVm
IEhBVkVfU0VUTE9DQUxFCiNpbmNsdWRlIDxsb2NhbGUuaD4KI2VuZGlmCgojaWZkZWYgSEFWRV9F
WEVDSU5GT19ICiNpbmNsdWRlIDxleGVjaW5mby5oPgojZW5kaWYKCiNpbmNsdWRlIDxYMTEvWGxp
Yi5oPgojaW5jbHVkZSA8WDExL1hhdG9tLmg+CiNpbmNsdWRlIDxYMTEva2V5c3ltLmg+CgojaW5j
bHVkZSAidXRpbHMuaCIKI2luY2x1ZGUgIl94aXRrLmgiCgpleHRlcm4gY2hhciAqKmVudmlyb247
CiN1bmRlZiBUUkFDRV9MT0NLUwoKI2lmZGVmIFRSQUNFX0xPQ0tTCnN0YXRpYyBpbnQgbWwgPSAw
OwojZGVmaW5lIE1VVExPQ0soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGludCBp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgbWwrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBmb3IoaT0wOyBpPG1sOyBp
KyspIHByaW50ZigiLiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgIHByaW50ZigiTE9DS1xuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgcHRocmVhZF9tdXRleF9sb2NrKCZnWGl0ay0+
bXV0ZXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgfQoKI2Rl
ZmluZSBNVVRVTkxPQ0soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBpbnQgaTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgIGZvcihpPTA7IGk8bWw7IGkrKykgcHJpbnRmKCIuIik7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgcHJpbnRmKCJVTkxPQ0tcbiIpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICBtbC0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnWGl0ay0+bXV0
ZXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0KCiNlbHNlCiNk
ZWZpbmUgTVVUTE9DSygpICAgeyBwdGhyZWFkX211dGV4X2xvY2soJmdYaXRrLT5tdXRleCk7IH0K
I2RlZmluZSBNVVRVTkxPQ0soKSB7IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnWGl0ay0+bXV0ZXgp
OyB9CiNlbmRpZgoKI2RlZmluZSBGWExPQ0soX2Z4KSB7IHB0aHJlYWRfbXV0ZXhfbG9jaygmX2Z4
LT5tdXRleCk7IH0KI2RlZmluZSBGWFVOTE9DSyhfZngpIHsgcHRocmVhZF9tdXRleF91bmxvY2so
Jl9meC0+bXV0ZXgpOyB9CgoKdHlwZWRlZiBzdHJ1Y3QgewogIFdpbmRvdyAgICAgICAgICAgICAg
ICAgICAgICB3aW5kb3c7CiAgQXRvbSAgICAgICAgICAgICAgICAgICAgICAgIFhBX1hJVEs7Cgog
IHhpdGtfbW92ZV90ICAgICAgICAgICAgICAgICBtb3ZlOwoKICBzdHJ1Y3QgewogICAgaW50ICAg
ICAgICAgICAgICAgICAgICAgICB4OwogICAgaW50ICAgICAgICAgICAgICAgICAgICAgICB5Owog
IH0gb2xkX3BvczsKCiAgc3RydWN0IHsKICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgeDsK
ICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgeTsKICB9IG5ld19wb3M7CgogIGludCAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aDsKICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0OwoKICBYRXZlbnQgICAgICAgICAgICAgICAgICAgICAqb2xkX2V2ZW50OwoKICB4aXRr
X3dpZGdldF9saXN0X3QgICAgICAgICAqd2lkZ2V0X2xpc3Q7CiAgY2hhciAgICAgICAgICAgICAg
ICAgICAgICAgKm5hbWU7CiAgd2lkZ2V0X2V2ZW50X2NhbGxiYWNrX3QgICAgIHhldmVudF9jYWxs
YmFjazsKICB3aWRnZXRfbmV3cG9zX2NhbGxiYWNrX3QgICAgbmV3cG9zX2NhbGxiYWNrOwogIHhp
dGtfcmVnaXN0ZXJfa2V5X3QgICAgICAgICBrZXk7CiAgeGl0a19kbmRfdCAgICAgICAgICAgICAg
ICAgKnhkbmQ7CiAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgKnVzZXJfZGF0YTsKCiAgcHRo
cmVhZF9tdXRleF90ICAgICAgICAgICAgIG11dGV4OwogIGludCAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0cm95Owp9IF9fZ2Z4X3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgRGlzcGxheSAgICAg
ICAgICAgICAgICAgICAgKmRpc3BsYXk7CiAgWENvbG9yICAgICAgICAgICAgICAgICAgICAgIGJs
YWNrOwogIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X3dpZHRoOwogIGludCAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2hlaWdodDsKICBpbnQgICAgICAgICAgICAg
ICAgICAgICAgICAgdmVyYm9zaXR5OwogIHhpdGtfbGlzdF90ICAgICAgICAgICAgICAgICpsaXN0
OwogIHhpdGtfbGlzdF90ICAgICAgICAgICAgICAgICpnZng7CiAgaW50ICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZV94c2htOwoKICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgd21fdHlw
ZTsKCiAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCp4X2Vycm9yX2hhbmRsZXIpKERpc3Bs
YXkgKiwgWEVycm9yRXZlbnQgKik7CgogIHB0aHJlYWRfbXV0ZXhfdCAgICAgICAgICAgICBtdXRl
eDsKICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZzsKICB4aXRrX3JlZ2lzdGVy
X2tleV90ICAgICAgICAga2V5OwogIHhpdGtfY29uZmlnX3QgICAgICAgICAgICAgICpjb25maWc7
CiAgeGl0a19zaWduYWxfY2FsbGJhY2tfdCAgICAgIHNpZ19jYWxsYmFjazsKICB2b2lkICAgICAg
ICAgICAgICAgICAgICAgICAqc2lnX2RhdGE7CgogIFdpbmRvdyAgICAgICAgICAgICAgICAgICAg
ICBtb2RhbHc7CiAgeGl0a193aWRnZXRfdCAgICAgICAgICAgICAgKm1lbnU7CiAgCiAgc3RydWN0
IHRpbWV2YWwgICAgICAgICAgICAgIGtleXByZXNzOwoKICBLZXlDb2RlICAgICAgICAgICAgICAg
ICAgICAgaWdub3JlX2tleXNbMl07CgogIHB0aHJlYWRfdCAgICAgICAgICAgICAgICAgICp0aXBz
X3RocmVhZDsKICB1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgdGlwc190aW1lb3V0OwoKICBz
dHJ1Y3QgewogICAgV2luZG93ICAgICAgICAgICAgICAgICAgICB3aW5kb3c7CiAgICBpbnQgICAg
ICAgICAgICAgICAgICAgICAgIGZvY3VzOwogIH0gcGFyZW50OwogIAp9IF9feGl0a190OwoKc3Rh
dGljIF9feGl0a190ICAgICpnWGl0azsKc3RhdGljIHBpZF90ICAgICAgICB4aXRrX3BpZDsKc3Rh
dGljIEF0b20gWEFfV0lOX0xBWUVSID0gTm9uZSwgWEFfU1RBWVNfT05fVE9QID0gTm9uZTsKc3Rh
dGljIEF0b20gWEFfTkVUX1dNX1NUQVRFID0gTm9uZSwgWEFfTkVUX1dNX1NUQVRFX0FCT1ZFID0g
Tm9uZTsKc3RhdGljIEF0b20gWEFfTkVUX1dNX1NUQVRFX0ZVTExTQ1JFRU4gPSBOb25lOwoKc3Rh
dGljIEF0b20gWEFfV01fV0lORE9XX1RZUEUgPSBOb25lOwpzdGF0aWMgQXRvbSBYQV9XTV9XSU5E
T1dfVFlQRV9ERVNLVE9QID0gTm9uZTsKc3RhdGljIEF0b20gWEFfV01fV0lORE9XX1RZUEVfRE9D
SyA9IE5vbmU7CnN0YXRpYyBBdG9tIFhBX1dNX1dJTkRPV19UWVBFX1RPT0xCQVIgPSBOb25lOwpz
dGF0aWMgQXRvbSBYQV9XTV9XSU5ET1dfVFlQRV9NRU5VID0gTm9uZTsKc3RhdGljIEF0b20gWEFf
V01fV0lORE9XX1RZUEVfVVRJTElUWSA9IE5vbmU7CnN0YXRpYyBBdG9tIFhBX1dNX1dJTkRPV19U
WVBFX1NQTEFTSCA9IE5vbmU7CnN0YXRpYyBBdG9tIFhBX1dNX1dJTkRPV19UWVBFX0RJQUxPRyA9
IE5vbmU7CnN0YXRpYyBBdG9tIFhBX1dNX1dJTkRPV19UWVBFX05PUk1BTCA9IE5vbmU7Cgp2b2lk
IHdpZGdldF9zdG9wKHZvaWQpOwoKdm9pZCB4aXRrX21vZGFsX3dpbmRvdyhXaW5kb3cgdykgewog
IGdYaXRrLT5tb2RhbHcgPSB3Owp9CnZvaWQgeGl0a191bm1vZGFsX3dpbmRvdyhXaW5kb3cgdykg
ewogIGlmKHcgPT0gZ1hpdGstPm1vZGFsdykKICAgIGdYaXRrLT5tb2RhbHcgPSBOb25lOwp9Cgov
KgogKiBFeGVjdXRlIGEgc2hlbGwgY29tbWFuZC4KICovCmludCB4aXRrX3N5c3RlbShpbnQgZG9u
dF9ydW5fYXNfcm9vdCwgY2hhciAqY29tbWFuZCkgewogIGludCBwaWQsIHN0YXR1czsKICAKICAv
KiAKICAgKiBEb24ndCBwZXJtaXQgcnVuIGFzIHJvb3QKICAgKi8KICBpZihkb250X3J1bl9hc19y
b290KSB7CiAgICBpZihnZXR1aWQoKSA9PSAwKQogICAgICByZXR1cm4gLTE7CiAgfQogIAogIGlm
KGNvbW1hbmQgPT0gMCkKICAgIHJldHVybiAxOwogIAogIHBpZCA9IGZvcmsoKTsKICAKICBpZihw
aWQgPT0gLTEpCiAgICByZXR1cm4gLTE7CiAgCiAgaWYocGlkID09IDApIHsKICAgIGNoYXIgKmFy
Z3ZbNF07CiAgICBhcmd2WzBdID0gInNoIjsKICAgIGFyZ3ZbMV0gPSAiLWMiOwogICAgYXJndlsy
XSA9IGNvbW1hbmQ7CiAgICBhcmd2WzNdID0gMDsKICAgIGV4ZWN2ZSgiL2Jpbi9zaCIsIGFyZ3Ys
IGVudmlyb24pOwogICAgZXhpdCgxMjcpOwogIH0KICAKICBkbyB7CiAgICBpZih3YWl0cGlkKHBp
ZCwgJnN0YXR1cywgMCkgPT0gLTEpIHsKICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQoJcmV0dXJu
IC0xOwogICAgfSAKICAgIGVsc2UgewogICAgICByZXR1cm4gV0VYSVRTVEFUVVMoc3RhdHVzKTsK
ICAgIH0KICB9IHdoaWxlKDEpOwogIAogIHJldHVybiAtMTsKfQoKLyoKICogQSB0aHJlYWQtc2Fm
ZSB1c2Vjb25kIHNsZWVwCiAqLwp2b2lkIHhpdGtfdXNlY19zbGVlcCh1bnNpZ25lZCBsb25nIHVz
ZWMpIHsKI2lmZGVmIEhBVkVfTkFOT1NMRUVQCiAgLyogbmFub3NsZWVwIGlzIHByZWZlcmVkIG9u
IHNvbGFyaXMsIGJlY2F1c2UgaXQncyBtdC1zYWZlICovCiAgc3RydWN0IHRpbWVzcGVjIHRzLCBy
ZW1haW5pbmc7CiAgCiAgdHMudHZfc2VjID0gICB1c2VjIC8gMTAwMDAwMDsKICB0cy50dl9uc2Vj
ID0gKHVzZWMgJSAxMDAwMDAwKSAqIDEwMDA7CiAgd2hpbGUgKG5hbm9zbGVlcCAoJnRzLCAmcmVt
YWluaW5nKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikKICAgIHRzID0gcmVtYWluaW5nOwojZWxz
ZQogIHVzbGVlcCh1c2VjKTsKI2VuZGlmCn0KCnN0YXRpYyBpbnQgX3hfZXJyb3JfaGFuZGxlcihE
aXNwbGF5ICpkaXNwbGF5LCBYRXJyb3JFdmVudCAqeGV2ZW50KSB7CiAgY2hhciBidWZmZXJbMjA0
OF07CiAgCiAgWEdldEVycm9yVGV4dChkaXNwbGF5LCB4ZXZlbnQtPmVycm9yX2NvZGUsICZidWZm
ZXJbMF0sIDEwMjMpOwogIAogIFhJVEtfV0FSTklORygiWCBlcnJvciByZWNlaXZlZDogJyVzJ1xu
IiwgYnVmZmVyKTsKICAKICB4aXRrX3hfZXJyb3IgPSAxOwogIHJldHVybiAwOwogIAp9Cgp2b2lk
IHhpdGtfc2V0X2N1cnJlbnRfbWVudSh4aXRrX3dpZGdldF90ICptZW51KSB7CiAgaWYoZ1hpdGst
Pm1lbnUpCiAgICB4aXRrX21lbnVfZGVzdHJveShnWGl0ay0+bWVudSk7CgogIGdYaXRrLT5tZW51
ID0gbWVudTsKfQp2b2lkIHhpdGtfdW5zZXRfY3VycmVudF9tZW51KHZvaWQpIHsKICBnWGl0ay0+
bWVudSA9IE5VTEw7Cn0KCmludCB4aXRrX2luc3RhbGxfeF9lcnJvcl9oYW5kbGVyKHZvaWQpIHsK
ICBpZihnWGl0ay0+eF9lcnJvcl9oYW5kbGVyID09IE5VTEwpIHsKICAgIGdYaXRrLT54X2Vycm9y
X2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKF94X2Vycm9yX2hhbmRsZXIpOwogICAgWFN5bmMo
Z1hpdGstPmRpc3BsYXksIEZhbHNlKTsKICAgIHJldHVybiAxOwogIH0KICByZXR1cm4gMDsKfQoK
aW50IHhpdGtfdW5pbnN0YWxsX3hfZXJyb3JfaGFuZGxlcih2b2lkKSB7CiAgaWYoZ1hpdGstPnhf
ZXJyb3JfaGFuZGxlciAhPSBOVUxMKSB7CiAgICBYU2V0RXJyb3JIYW5kbGVyKGdYaXRrLT54X2Vy
cm9yX2hhbmRsZXIpOwogICAgZ1hpdGstPnhfZXJyb3JfaGFuZGxlciA9IE5VTEw7CiAgICBYU3lu
YyhnWGl0ay0+ZGlzcGxheSwgRmFsc2UpOwogICAgcmV0dXJuIDE7CiAgfQogIHJldHVybiAwOwp9
CgovKgogKgogKi8Kc3RhdGljIHZvaWQgeGl0a19zaWduYWxfaGFuZGxlcihpbnQgc2lnKSB7CiAg
cGlkX3QgY3VyX3BpZCA9IGdldHBwaWQoKTsKCiAgLyogRmlyc3QsIGNhbGwgcmVnaXN0ZXJlZCBo
YW5kbGVyICovCiAgaWYoY3VyX3BpZCA9PSB4aXRrX3BpZCkgewogICAgaWYoZ1hpdGstPnNpZ19j
YWxsYmFjaykKICAgICAgZ1hpdGstPnNpZ19jYWxsYmFjayhzaWcsIGdYaXRrLT5zaWdfZGF0YSk7
CiAgfQogIAogIGdYaXRrLT5ydW5uaW5nID0gMDsKICAKICBzd2l0Y2ggKHNpZykgewogICAgCiAg
Y2FzZSBTSUdJTlQ6CiAgY2FzZSBTSUdURVJNOgogIGNhc2UgU0lHUVVJVDoKICAgIGlmKGN1cl9w
aWQgPT0geGl0a19waWQpIHsKICAgICAgCiAgICAgIHhpdGtfbGlzdF9mcmVlKGdYaXRrLT5saXN0
KTsKICAgICAgeGl0a19saXN0X2ZyZWUoZ1hpdGstPmdmeCk7CiAgICAgIHhpdGtfY29uZmlnX2Rl
aW5pdChnWGl0ay0+Y29uZmlnKTsKICAgICAgCiAgICAgIFhJVEtfRlJFRShnWGl0ayk7CiAgICAg
IGV4aXQoMSk7CiAgICB9CiAgICBicmVhazsKCiAgY2FzZSBTSUdTRUdWOgogICAgewogICAgICBm
cHJpbnRmKHN0ZGVyciwgInhpVEsgcmVjZWl2ZWQgU0lHU0VHViBzaWduYWwsIFJJUC5cbiIpOwoj
aWZuZGVmIERFQlVHCiAgICAgIGFib3J0KCk7CiNlbGlmIGRlZmluZWQoSEFWRV9FWEVDSU5GT19I
KQogICAgICB2b2lkICAgICpiYWNrdHJhY2VfYXJyYXlbMjU1XTsKICAgICAgY2hhciAgICoqYmFj
a3RyYWNlX3N0cmluZ3M7CiAgICAgIGludCAgICAgIGVudHJpZXMsIGk7CiAgICAgIAogICAgICBp
ZigoZW50cmllcyA9IGJhY2t0cmFjZShiYWNrdHJhY2VfYXJyYXksIDI1NSkpKSB7CglpZigoYmFj
a3RyYWNlX3N0cmluZ3MgPSBiYWNrdHJhY2Vfc3ltYm9scyhiYWNrdHJhY2VfYXJyYXksIGVudHJp
ZXMpKSkgewoJICBwcmludGYoIkJhY2t0cmFjZTpcbiIpOwoJICAKCSAgZm9yKGkgPSAwOyBpIDwg
ZW50cmllczsgaSsrKSB7CgkgICAgcHJpbnRmKCIgIFslZF0gJXNcbiIsIGksIGJhY2t0cmFjZV9z
dHJpbmdzW2ldKTsKCSAgfQoJICAKCSAgZnJlZShiYWNrdHJhY2Vfc3RyaW5ncyk7CgkgIHByaW50
ZigiLS1cbiIpOwoJfQogICAgICB9CiNlbmRpZgogICAgfQogICAgYnJlYWs7CgoKICB9Cn0KCi8q
IAogKiBEZXNjOiBxdWVyeSB0aGUgc2VydmVyIGZvciBzdXBwb3J0IGZvciB0aGUgTUlUX1NITSBl
eHRlbnNpb24KICogUmV0dXJuOiAgMCA9IG5vdCBhdmFpbGFibGUKICogICAgICAgICAgMSA9IHNo
YXJlZCBYSW1hZ2Ugc3VwcG9ydCBhdmFpbGFibGUKICogICAgICAgICAgMiA9IHNoYXJlZCBQaXht
YXAgc3VwcG9ydCBhdmFpbGFibGUgYWxzbwogKiBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBnZGss
IGFuZCBzbGlnaHRseSB0dW5lZCBmb3IgeGl0ay4KICovCnN0YXRpYyBpbnQgeGl0a19jaGVja194
c2htKERpc3BsYXkgKmRpc3BsYXkpIHsKI2lmZGVmIEhBVkVfU0hNCiAgaWYoWFNobVF1ZXJ5RXh0
ZW5zaW9uKGRpc3BsYXkpKSB7CiAgICBpbnQgbWFqb3IsIG1pbm9yLCBpZ25vcmU7CiAgICBCb29s
IHBpeG1hcHM7CiAgICAKICAgIGlmKFhRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAiTUlULVNITSIs
ICZpZ25vcmUsICZpZ25vcmUsICZpZ25vcmUpKSB7CiAgICAgIGlmKFhTaG1RdWVyeVZlcnNpb24o
ZGlzcGxheSwgJm1ham9yLCAmbWlub3IsICZwaXhtYXBzICkgPT0gVHJ1ZSkgewoJaWYoKHBpeG1h
cHMgPT0gVHJ1ZSkgJiYgKChYU2htUGl4bWFwRm9ybWF0KGRpc3BsYXkpKSA9PSBaUGl4bWFwKSkK
CSAgcmV0dXJuIDI7CgllbHNlIGlmKHBpeG1hcHMgPT0gVHJ1ZSkKCSAgcmV0dXJuIDE7CiAgICAg
IH0KICAgIH0KICB9CiNlbmRpZgogIHJldHVybiAwOwp9CmludCB4aXRrX2lzX3VzZV94c2htKHZv
aWQpIHsKICByZXR1cm4gZ1hpdGstPnVzZV94c2htOwp9CgpzdGF0aWMgY2hhciAqZ2V0X3dtX25h
bWUoRGlzcGxheSAqZGlzcGxheSwgV2luZG93IHdpbiwgY2hhciAqYXRvbV9uYW1lKSB7CiAgY2hh
ciAqd21fbmFtZSA9IE5VTEw7CiAgQXRvbSAgYXRvbTsKCiAgLyogRXh0cmFjdCBXTSBOYW1lICov
CQogIGlmKChhdG9tID0gWEludGVybkF0b20oZGlzcGxheSwgYXRvbV9uYW1lLCBUcnVlKSkgIT0g
Tm9uZSkgewogICAgdW5zaWduZWQgY2hhciAgICpwcm9wX3JldHVybiA9IE5VTEw7CiAgICB1bnNp
Z25lZCBsb25nICAgIG5pdGVtc19yZXR1cm47CiAgICB1bnNpZ25lZCBsb25nICAgIGJ5dGVzX2Fm
dGVyX3JldHVybjsKICAgIEF0b20gICAgICAgICAgICAgdHlwZV9yZXR1cm4sIHR5cGVfdXRmODsK
ICAgIGludCAgICAgICAgICAgICAgZm9ybWF0X3JldHVybjsKICAgIAogICAgaWYoKFhHZXRXaW5k
b3dQcm9wZXJ0eShkaXNwbGF5LCB3aW4sIGF0b20sIDAsIDQsIEZhbHNlLCBYQV9TVFJJTkcsCgkJ
CSAgICZ0eXBlX3JldHVybiwgJmZvcm1hdF9yZXR1cm4sICZuaXRlbXNfcmV0dXJuLAoJCQkgICAm
Ynl0ZXNfYWZ0ZXJfcmV0dXJuLCAmcHJvcF9yZXR1cm4pKSA9PSBTdWNjZXNzKSB7CiAgICAgIAog
ICAgICBpZih0eXBlX3JldHVybiAhPSBOb25lKSB7CglpZih0eXBlX3JldHVybiAhPSBYQV9TVFJJ
TkcpIHsKCSAgdHlwZV91dGY4ID0gWEludGVybkF0b20oZGlzcGxheSwgIlVURjhfU1RSSU5HIiwg
VHJ1ZSk7CgkgIGlmKHR5cGVfdXRmOCAhPSBOb25lKSB7CgkgICAgCgkgICAgaWYodHlwZV9yZXR1
cm4gPT0gdHlwZV91dGY4KSB7CgkgICAgICAKCSAgICAgIGlmKHByb3BfcmV0dXJuKQoJCVhGcmVl
KHByb3BfcmV0dXJuKTsKCSAgICAgIHByb3BfcmV0dXJuID0gTlVMTDsKCSAgICAgIAoJICAgICAg
aWYoKFhHZXRXaW5kb3dQcm9wZXJ0eShkaXNwbGF5LCB3aW4sIGF0b20sIDAsIDQsIEZhbHNlLCB0
eXBlX3V0ZjgsCgkJCQkgICAgICZ0eXBlX3JldHVybiwgJmZvcm1hdF9yZXR1cm4sICZuaXRlbXNf
cmV0dXJuLAoJCQkJICAgICAmYnl0ZXNfYWZ0ZXJfcmV0dXJuLCAmcHJvcF9yZXR1cm4pKSA9PSBT
dWNjZXNzKSB7CgkJCgkJaWYoZm9ybWF0X3JldHVybiA9PSA4KQoJCSAgd21fbmFtZSA9IHN0cmR1
cCgoY2hhciAqKXByb3BfcmV0dXJuKTsKCgkgICAgICB9CgkgICAgfQoJICAgIGVsc2UgaWYoZm9y
bWF0X3JldHVybiA9PSA4KQoJICAgICAgd21fbmFtZSA9IHN0cmR1cCgoY2hhciAqKXByb3BfcmV0
dXJuKTsKCgkgIH0KCX0KCWVsc2UKCSAgd21fbmFtZSA9IHN0cmR1cCgoY2hhciAqKXByb3BfcmV0
dXJuKTsKCiAgICAgIH0KICAgICAgCiAgICAgIGlmKHByb3BfcmV0dXJuKQoJWEZyZWUocHJvcF9y
ZXR1cm4pOwogICAgfQogIH0KICAKICByZXR1cm4gd21fbmFtZTsKfQpzdGF0aWMgdWludDMyX3Qg
eGl0a19jaGVja193bShEaXNwbGF5ICpkaXNwbGF5KSB7CiAgQXRvbSAgICAgIGF0b207CiAgdWlu
dDMyX3QgIHR5cGUgPSBXTV9UWVBFX1VOS05PV047CiAgY2hhciAgICAgKndtX25hbWUgPSBOVUxM
OwogIAogIFhMb2NrRGlzcGxheShkaXNwbGF5KTsKCiAgaWYoKGF0b20gPSBYSW50ZXJuQXRvbShk
aXNwbGF5LCAiWEZXTV9GTEFHUyIsIFRydWUpKSAhPSBOb25lKSB7CiAgICB0eXBlIHw9IFdNX1RZ
UEVfWEZDRTsKICB9CiAgZWxzZSBpZigoYXRvbSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfV0lO
RE9XTUFLRVJfV01fUFJPVE9DT0xTIiwgVHJ1ZSkpICE9IE5vbmUpIHsKICAgIHR5cGUgfD0gV01f
VFlQRV9XSU5ET1dNQUtFUjsKICB9CiAgZWxzZSBpZigoYXRvbSA9IFhJbnRlcm5BdG9tKGRpc3Bs
YXksICJfU0FXTUlMTF9USU1FU1RBTVAiLCBUcnVlKSkgIT0gTm9uZSkgewogICAgdHlwZSB8PSBX
TV9UWVBFX1NBV0ZJU0g7CiAgfQogIGVsc2UgaWYoKGF0b20gPSBYSW50ZXJuQXRvbShkaXNwbGF5
LCAiRU5MSUdIVEVOTUVOVF9DT01NUyIsIFRydWUpKSAhPSBOb25lKSB7CiAgICB0eXBlIHw9IFdN
X1RZUEVfRTsKICB9CiAgZWxzZSBpZigoYXRvbSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTUVU
QUNJVFlfUkVTVEFSVF9NRVNTQUdFIiwgVHJ1ZSkpICE9IE5vbmUpIHsKICAgIHR5cGUgfD0gV01f
VFlQRV9NRVRBQ0lUWTsKICB9CiAgZWxzZSBpZigoYXRvbSA9IFhJbnRlcm5BdG9tKGRpc3BsYXks
ICJfQVNfU1RZTEUiLCBUcnVlKSkgIT0gTm9uZSkgewogICAgdHlwZSB8PSBXTV9UWVBFX0FGVEVS
U1RFUDsKICB9CiAgZWxzZSBpZigoYXRvbSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfSUNFV01f
V0lOT1BUSElOVCIsIFRydWUpKSAhPSBOb25lKSB7CiAgICB0eXBlIHw9IFdNX1RZUEVfSUNFOwog
IH0KICBlbHNlIGlmKChhdG9tID0gWEludGVybkF0b20oZGlzcGxheSwgIl9CTEFDS0JPWF9ISU5U
UyIsIFRydWUpKSAhPSBOb25lKSB7CiAgICB0eXBlIHw9IFdNX1RZUEVfQkxBQ0tCT1g7CiAgfQog
IGVsc2UgaWYoKGF0b20gPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiTEFSU1dNX0VYSVQiLCBUcnVl
KSkgIT0gTm9uZSkgewogICAgdHlwZSB8PSBXTV9UWVBFX0xBUlNXTTsKICB9CiAgZWxzZSBpZigo
KGF0b20gPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiS1dJTl9SVU5OSU5HIiwgVHJ1ZSkpICE9IE5v
bmUpICYmCgkgICgoYXRvbSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfRFRfU01fV0lORE9XX0lO
Rk8iLCBUcnVlKSkgIT0gTm9uZSkpIHsKICAgIHR5cGUgfD0gV01fVFlQRV9LV0lOOwogIH0KICBl
bHNlIGlmKChhdG9tID0gWEludGVybkF0b20oZGlzcGxheSwgIkRUV01fSVNfUlVOTklORyIsIFRy
dWUpKSAhPSBOb25lKSB7CiAgICB0eXBlIHw9IFdNX1RZUEVfRFRXTTsKICB9CgogIGlmKChhdG9t
ID0gWEludGVybkF0b20oZGlzcGxheSwgIl9XSU5fU1VQUE9SVElOR19XTV9DSEVDSyIsIFRydWUp
KSAhPSBOb25lKSB7CiAgICB1bnNpZ25lZCBjaGFyICAgKnByb3BfcmV0dXJuID0gTlVMTDsKICAg
IHVuc2lnbmVkIGxvbmcgICAgbml0ZW1zX3JldHVybjsKICAgIHVuc2lnbmVkIGxvbmcgICAgYnl0
ZXNfYWZ0ZXJfcmV0dXJuOwogICAgQXRvbSAgICAgICAgICAgICB0eXBlX3JldHVybjsKICAgIGlu
dCAgICAgICAgICAgICAgZm9ybWF0X3JldHVybjsKICAgIFN0YXR1cyAgICAgICAgICAgc3RhdHVz
OwogICAgCiAgICAvKiBDaGVjayBmb3IgR25vbWUgQ29tcGxpYW50IFdNICovCiAgICBpZigoWEdl
dFdpbmRvd1Byb3BlcnR5KGRpc3BsYXksIChYRGVmYXVsdFJvb3RXaW5kb3coZGlzcGxheSkpLCBh
dG9tLCAwLAoJCQkgICAxLCBGYWxzZSwgWEFfQ0FSRElOQUwsCgkJCSAgICZ0eXBlX3JldHVybiwg
JmZvcm1hdF9yZXR1cm4sICZuaXRlbXNfcmV0dXJuLAoJCQkgICAmYnl0ZXNfYWZ0ZXJfcmV0dXJu
LCAmcHJvcF9yZXR1cm4pKSA9PSBTdWNjZXNzKSB7CgogICAgICBpZigodHlwZV9yZXR1cm4gIT0g
Tm9uZSkgJiYgKHR5cGVfcmV0dXJuID09IFhBX0NBUkRJTkFMKSAmJgoJICgoZm9ybWF0X3JldHVy
biA9PSAzMikgJiYgKG5pdGVtc19yZXR1cm4gPT0gMSkgJiYgKGJ5dGVzX2FmdGVyX3JldHVybiA9
PSAwKSkpIHsKCXVuc2lnbmVkIGNoYXIgICAqcHJvcF9yZXR1cm4yID0gTlVMTDsKCVdpbmRvdyAg
ICAgICAgICAgd2luX2lkOwoJCgl3aW5faWQgPSAqKHVuc2lnbmVkIGxvbmcgKilwcm9wX3JldHVy
bjsKCQoJeGl0a19pbnN0YWxsX3hfZXJyb3JfaGFuZGxlcigpOwoJCglzdGF0dXMgPSBYR2V0V2lu
ZG93UHJvcGVydHkoZGlzcGxheSwgd2luX2lkLCBhdG9tLCAwLAoJCQkJICAgIDEsIEZhbHNlLCBY
QV9DQVJESU5BTCwKCQkJCSAgICAmdHlwZV9yZXR1cm4sICZmb3JtYXRfcmV0dXJuLCAmbml0ZW1z
X3JldHVybiwKCQkJCSAgICAmYnl0ZXNfYWZ0ZXJfcmV0dXJuLCAmcHJvcF9yZXR1cm4yKTsKCQoJ
eGl0a191bmluc3RhbGxfeF9lcnJvcl9oYW5kbGVyKCk7CgkKCWlmKChzdGF0dXMgPT0gU3VjY2Vz
cykgJiYgKHR5cGVfcmV0dXJuICE9IE5vbmUpICYmICh0eXBlX3JldHVybiA9PSBYQV9DQVJESU5B
TCkpIHsKCSAgCgkgIGlmKChmb3JtYXRfcmV0dXJuID09IDMyKSAmJiAobml0ZW1zX3JldHVybiA9
PSAxKSAKCSAgICAgJiYgKGJ5dGVzX2FmdGVyX3JldHVybiA9PSAwKSAmJiAod2luX2lkID09ICoo
dW5zaWduZWQgbG9uZyAqKXByb3BfcmV0dXJuMikpIHsKCSAgICB0eXBlIHw9IFdNX1RZUEVfR05P
TUVfQ09NUDsKCSAgfQoJfQoKCWlmKHByb3BfcmV0dXJuMikKCSAgWEZyZWUocHJvcF9yZXR1cm4y
KTsKCglpZigod21fbmFtZSA9IGdldF93bV9uYW1lKGRpc3BsYXksIHdpbl9pZCwgIl9ORVRfV01f
TkFNRSIpKSA9PSBOVUxMKSB7CgkgIC8qCgkgICAqIEVubGlnaHRlbm1lbnQgaXMgR25vbWUgY29t
cGxpYW50LCBidXQgZG9uJ3Qgc2V0IAoJICAgKiB0aGUgX05FVF9XTV9OQU1FIGF0b20gcHJvcGVy
dHkgCgkgICAqLwoJICB3bV9uYW1lID0gZ2V0X3dtX25hbWUoZGlzcGxheSwgKFhEZWZhdWx0Um9v
dFdpbmRvdyhkaXNwbGF5KSksICJfV0lOX1dNX05BTUUiKTsKCX0KICAgICAgfQogICAgICAKICAg
ICAgaWYocHJvcF9yZXR1cm4pCglYRnJlZShwcm9wX3JldHVybik7CiAgICB9CiAgfQogIAogIC8q
IENoZWNrIGZvciBFeHRlbmRlZCBXaW5kb3cgTWFuYWdlciBIaW50cyAoRVdNSCkgQ29tcGxpYW50
ICovCiAgaWYoKChhdG9tID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfU1VQUE9SVElOR19X
TV9DSEVDSyIsIFRydWUpKSAhPSBOb25lKSAmJiAKICAgICAoWEludGVybkF0b20oZGlzcGxheSwg
Il9ORVRfV09SS0FSRUEiLCBUcnVlKSAhPSBOb25lKSkgewogICAgdW5zaWduZWQgY2hhciAgICpw
cm9wX3JldHVybiA9IE5VTEw7CiAgICB1bnNpZ25lZCBsb25nICAgIG5pdGVtc19yZXR1cm47CiAg
ICB1bnNpZ25lZCBsb25nICAgIGJ5dGVzX2FmdGVyX3JldHVybjsKICAgIEF0b20gICAgICAgICAg
ICAgdHlwZV9yZXR1cm47CiAgICBpbnQgICAgICAgICAgICAgIGZvcm1hdF9yZXR1cm47CiAgICBT
dGF0dXMgICAgICAgICAgIHN0YXR1czsKICAgIAogICAgaWYoKFhHZXRXaW5kb3dQcm9wZXJ0eShk
aXNwbGF5LCAoWERlZmF1bHRSb290V2luZG93KGRpc3BsYXkpKSwgYXRvbSwgMCwgMSwgRmFsc2Us
IFhBX1dJTkRPVywKCQkJICAgJnR5cGVfcmV0dXJuLCAmZm9ybWF0X3JldHVybiwgJm5pdGVtc19y
ZXR1cm4sCgkJCSAgICZieXRlc19hZnRlcl9yZXR1cm4sICZwcm9wX3JldHVybikpID09IFN1Y2Nl
c3MpIHsKICAgICAgCiAgICAgIGlmKCh0eXBlX3JldHVybiAhPSBOb25lKSAmJiAodHlwZV9yZXR1
cm4gPT0gWEFfV0lORE9XKSAmJiAKCSAoZm9ybWF0X3JldHVybiA9PSAzMikgJiYgKG5pdGVtc19y
ZXR1cm4gPT0gMSkgJiYgKGJ5dGVzX2FmdGVyX3JldHVybiA9PSAwKSkgewoJdW5zaWduZWQgY2hh
ciAgICpwcm9wX3JldHVybjIgPSBOVUxMOwoJV2luZG93ICAgICAgICAgICB3aW5faWQ7CgkKCXdp
bl9pZCA9ICoodW5zaWduZWQgbG9uZyAqKXByb3BfcmV0dXJuOwoJCgl4aXRrX2luc3RhbGxfeF9l
cnJvcl9oYW5kbGVyKCk7CgkKCXN0YXR1cyA9IFhHZXRXaW5kb3dQcm9wZXJ0eShkaXNwbGF5LCB3
aW5faWQsIGF0b20sIDAsCgkJCQkgICAgMSwgRmFsc2UsIFhBX1dJTkRPVywKCQkJCSAgICAmdHlw
ZV9yZXR1cm4sICZmb3JtYXRfcmV0dXJuLCAmbml0ZW1zX3JldHVybiwKCQkJCSAgICAmYnl0ZXNf
YWZ0ZXJfcmV0dXJuLCAmcHJvcF9yZXR1cm4yKTsKCQoJeGl0a191bmluc3RhbGxfeF9lcnJvcl9o
YW5kbGVyKCk7CgkKCQoJaWYoKHN0YXR1cyA9PSBTdWNjZXNzKSAmJiAodHlwZV9yZXR1cm4gIT0g
Tm9uZSkgJiYgKHR5cGVfcmV0dXJuID09IFhBX1dJTkRPVykgJiYKCSAgIChmb3JtYXRfcmV0dXJu
ID09IDMyKSAmJiAobml0ZW1zX3JldHVybiA9PSAxKSAmJiAoYnl0ZXNfYWZ0ZXJfcmV0dXJuID09
IDApKSB7CgkgIAoJICBpZih3aW5faWQgPT0gKih1bnNpZ25lZCBsb25nICopcHJvcF9yZXR1cm4p
IHsKCSAgICBpZiAod21fbmFtZSkgZnJlZSh3bV9uYW1lKTsKCSAgICB3bV9uYW1lID0gZ2V0X3dt
X25hbWUoZGlzcGxheSwgd2luX2lkLCAiX05FVF9XTV9OQU1FIik7CgkgICAgdHlwZSB8PSBXTV9U
WVBFX0VXTUhfQ09NUDsKCSAgfQoJfQoJaWYocHJvcF9yZXR1cm4yKQoJICBYRnJlZShwcm9wX3Jl
dHVybjIpOwogICAgICB9CiAgICAgIGlmKHByb3BfcmV0dXJuKQoJWEZyZWUocHJvcF9yZXR1cm4p
OwogICAgfQogIH0KCiAgaWYodHlwZSAmIFdNX1RZUEVfRVdNSF9DT01QKSB7CiAgICBYQV9XSU5f
TEFZRVIgICAgICAgICAgICAgICA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVUX1dNX1NUQVRF
IiwgRmFsc2UpOwogICAgWEFfU1RBWVNfT05fVE9QICAgICAgICAgICAgPSBYSW50ZXJuQXRvbShk
aXNwbGF5LCAiX05FVF9XTV9TVEFURV9TVEFZU19PTl9UT1AiLCBGYWxzZSk7CiAgICBYQV9ORVRf
V01fU1RBVEUgICAgICAgICAgICA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVUX1dNX1NUQVRF
IiwgRmFsc2UpOwogICAgWEFfTkVUX1dNX1NUQVRFX0FCT1ZFICAgICAgPSBYSW50ZXJuQXRvbShk
aXNwbGF5LCAiX05FVF9XTV9TVEFURV9BQk9WRSIsIEZhbHNlKTsKICAgIFhBX05FVF9XTV9TVEFU
RV9GVUxMU0NSRUVOID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfV01fU1RBVEVfRlVMTFND
UkVFTiIsIEZhbHNlKTsKCiAgICBYQV9XTV9XSU5ET1dfVFlQRSAgICAgICAgICA9IFhJbnRlcm5B
dG9tKGRpc3BsYXksICJfTkVUX1dNX1dJTkRPV19UWVBFIiwgRmFsc2UpOwogICAgWEFfV01fV0lO
RE9XX1RZUEVfREVTS1RPUCAgPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiX05FVF9XTV9XSU5ET1df
VFlQRV9ERVNLVE9QIiwgRmFsc2UpOwogICAgWEFfV01fV0lORE9XX1RZUEVfRE9DSyAgICAgPSBY
SW50ZXJuQXRvbShkaXNwbGF5LCAiX05FVF9XTV9XSU5ET1dfVFlQRV9ET0NLIiwgRmFsc2UpOwog
ICAgWEFfV01fV0lORE9XX1RZUEVfVE9PTEJBUiAgPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiX05F
VF9XTV9XSU5ET1dfVFlQRV9UT09MQkFSIiwgRmFsc2UpOwogICAgWEFfV01fV0lORE9XX1RZUEVf
TUVOVSAgICAgPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiX05FVF9XTV9XSU5ET1dfVFlQRV9NRU5V
IiwgRmFsc2UpOwogICAgWEFfV01fV0lORE9XX1RZUEVfVVRJTElUWSAgPSBYSW50ZXJuQXRvbShk
aXNwbGF5LCAiX05FVF9XTV9XSU5ET1dfVFlQRV9VVElMSVRZIiwgRmFsc2UpOwogICAgWEFfV01f
V0lORE9XX1RZUEVfU1BMQVNIICAgPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiX05FVF9XTV9XSU5E
T1dfVFlQRV9TUExBU0giLCBGYWxzZSk7CiAgICBYQV9XTV9XSU5ET1dfVFlQRV9ESUFMT0cgICA9
IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVUX1dNX1dJTkRPV19UWVBFX0RJQUxPRyIsIEZhbHNl
KTsKICAgIFhBX1dNX1dJTkRPV19UWVBFX05PUk1BTCAgID0gWEludGVybkF0b20oZGlzcGxheSwg
Il9ORVRfV01fV0lORE9XX1RZUEVfTk9STUFMIiwgRmFsc2UpOwogIH0KICAKICBzd2l0Y2godHlw
ZSAmIFdNX1RZUEVfQ09NUF9NQVNLKSB7CiAgY2FzZSBXTV9UWVBFX0tXSU46CiAgICBpZihYQV9O
RVRfV01fU1RBVEUgPT0gTm9uZSkKICAgICAgWEFfTkVUX1dNX1NUQVRFICAgID0gWEludGVybkF0
b20oZGlzcGxheSwgIl9ORVRfV01fU1RBVEUiLCBGYWxzZSk7CiAgICBpZihYQV9TVEFZU19PTl9U
T1AgPT0gTm9uZSkKICAgICAgWEFfU1RBWVNfT05fVE9QID0gWEludGVybkF0b20oZGlzcGxheSwg
Il9ORVRfV01fU1RBVEVfU1RBWVNfT05fVE9QIiwgRmFsc2UpOwogICAgYnJlYWs7CgogIGNhc2Ug
V01fVFlQRV9NT1RJRjoKICBjYXNlIFdNX1RZUEVfTEFSU1dNOgogICAgYnJlYWs7CgogIGNhc2Ug
V01fVFlQRV9VTktOT1dOOgogIGNhc2UgV01fVFlQRV9FOgogIGNhc2UgV01fVFlQRV9JQ0U6CiAg
Y2FzZSBXTV9UWVBFX1dJTkRPV01BS0VSOgogIGNhc2UgV01fVFlQRV9YRkNFOgogIGNhc2UgV01f
VFlQRV9TQVdGSVNIOgogIGNhc2UgV01fVFlQRV9NRVRBQ0lUWTogLyogVW50ZXN0ZWQgKi8KICBj
YXNlIFdNX1RZUEVfQUZURVJTVEVQOgogIGNhc2UgV01fVFlQRV9CTEFDS0JPWDoKICBjYXNlIFdN
X1RZUEVfRFRXTToKICAgIFhBX1dJTl9MQVlFUiA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfV0lO
X0xBWUVSIiwgRmFsc2UpOwogICAgYnJlYWs7CiAgfQoKICBYVW5sb2NrRGlzcGxheShkaXNwbGF5
KTsKICAKICBpZihnWGl0ay0+dmVyYm9zaXR5KSB7CiAgICBwcmludGYoIlsgV00gdHlwZTogIik7
CiAgICAKICAgIGlmKHR5cGUgJiBXTV9UWVBFX0dOT01FX0NPTVApCiAgICAgIHByaW50ZigiKEdu
b21lQ29tcGxpYW50KSAiKTsKICAgIGlmKHR5cGUgJiBXTV9UWVBFX0VXTUhfQ09NUCkKICAgICAg
cHJpbnRmKCIoRVdNSCkgIik7CiAgICAKICAgIHN3aXRjaCh0eXBlICYgV01fVFlQRV9DT01QX01B
U0spIHsKICAgIGNhc2UgV01fVFlQRV9VTktOT1dOOgogICAgICBwcmludGYoIlVua25vd24iKTsK
ICAgICAgYnJlYWs7CiAgICBjYXNlIFdNX1RZUEVfS1dJTjoKICAgICAgcHJpbnRmKCJLV0lOIik7
CiAgICAgIGJyZWFrOwogICAgY2FzZSBXTV9UWVBFX0U6CiAgICAgIHByaW50ZigiRW5saWdodGVu
bWVudCIpOwogICAgICBicmVhazsKICAgIGNhc2UgV01fVFlQRV9JQ0U6CiAgICAgIHByaW50Zigi
SWNlIik7CiAgICAgIGJyZWFrOwogICAgY2FzZSBXTV9UWVBFX1dJTkRPV01BS0VSOgogICAgICBw
cmludGYoIldpbmRvd01ha2VyIik7CiAgICAgIGJyZWFrOwogICAgY2FzZSBXTV9UWVBFX01PVElG
OgogICAgICBwcmludGYoIk1vdGlmKGxpa2U/KSIpOwogICAgICBicmVhazsKICAgIGNhc2UgV01f
VFlQRV9YRkNFOgogICAgICBwcmludGYoIlhGY2UiKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFdN
X1RZUEVfU0FXRklTSDoKICAgICAgcHJpbnRmKCJTYXdmaXNoIik7CiAgICAgIGJyZWFrOwogICAg
Y2FzZSBXTV9UWVBFX01FVEFDSVRZOgogICAgICBwcmludGYoIk1ldGFjaXR5Iik7CiAgICAgIGJy
ZWFrOwogICAgY2FzZSBXTV9UWVBFX0FGVEVSU1RFUDoKICAgICAgcHJpbnRmKCJBZnRlcnN0ZXAi
KTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFdNX1RZUEVfQkxBQ0tCT1g6CiAgICAgIHByaW50Zigi
QmxhY2tib3giKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFdNX1RZUEVfTEFSU1dNOgogICAgICBw
cmludGYoIkxhcnNXTSIpOwogICAgICBicmVhazsKICAgIGNhc2UgV01fVFlQRV9EVFdNOgogICAg
ICBwcmludGYoImR0d20iKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICAKICAgIGlmKHdtX25hbWUp
CiAgICAgIHByaW50ZigiIHslc30iLCB3bV9uYW1lKTsKICAgIAogICAgcHJpbnRmKCIgXS1cbiIp
OwogIH0KICAKICBpZih3bV9uYW1lKQogICAgZnJlZSh3bV9uYW1lKTsKICAKICByZXR1cm4gdHlw
ZTsKfQp1aW50MzJfdCB4aXRrX2dldF93bV90eXBlKHZvaWQpIHsKICByZXR1cm4gZ1hpdGstPndt
X3R5cGU7Cn0KCmludCB4aXRrX2dldF9sYXllcl9sZXZlbCh2b2lkKSB7CiAgaW50IGxldmVsID0g
MTA7CiAgCiAgaWYoKGdYaXRrLT53bV90eXBlICYgV01fVFlQRV9HTk9NRV9DT01QKSB8fCAoZ1hp
dGstPndtX3R5cGUgJiBXTV9UWVBFX0VXTUhfQ09NUCkpCiAgICBsZXZlbCA9IDEwOwogIAogIHN3
aXRjaChnWGl0ay0+d21fdHlwZSAmIFdNX1RZUEVfQ09NUF9NQVNLKSB7CiAgY2FzZSBXTV9UWVBF
X1VOS05PV046CiAgY2FzZSBXTV9UWVBFX0tXSU46CiAgY2FzZSBXTV9UWVBFX1NBV0ZJU0g6CiAg
Y2FzZSBXTV9UWVBFX01FVEFDSVRZOiAvKiBVbnRlc3RlZCAqLwogIGNhc2UgV01fVFlQRV9JQ0U6
CiAgY2FzZSBXTV9UWVBFX0FGVEVSU1RFUDoKICBjYXNlIFdNX1RZUEVfQkxBQ0tCT1g6CiAgY2Fz
ZSBXTV9UWVBFX1dJTkRPV01BS0VSOgogICAgbGV2ZWwgPSAxMDsgLyogV3JvbmcsIGJ1dCB3ZSBu
ZWVkIHRvIHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlICovCiAgICBicmVhazsKICBjYXNlIFdNX1RZ
UEVfWEZDRToKICAgIGxldmVsID0gODsKICAgIGJyZWFrOwogIGNhc2UgV01fVFlQRV9FOgogICAg
bGV2ZWwgPSA2OwogICAgYnJlYWs7CiAgY2FzZSBXTV9UWVBFX01PVElGOgogIGNhc2UgV01fVFlQ
RV9MQVJTV006CiAgICBsZXZlbCA9IDA7CiAgICBicmVhazsKICB9CiAgcmV0dXJuIGxldmVsOyAg
ICAgCn0KCnZvaWQgeGl0a19zZXRfbGF5ZXJfYWJvdmUoV2luZG93IHdpbmRvdykgewoKICBpZigo
Z1hpdGstPndtX3R5cGUgJiBXTV9UWVBFX0dOT01FX0NPTVApICYmICEoZ1hpdGstPndtX3R5cGUg
JiBXTV9UWVBFX0VXTUhfQ09NUCkpIHsKICAgIGxvbmcgcHJvcHZhbHVlWzFdOwogICAgCiAgICBw
cm9wdmFsdWVbMF0gPSB4aXRrX2dldF9sYXllcl9sZXZlbCgpOwoKICAgIFhMb2NrRGlzcGxheShn
WGl0ay0+ZGlzcGxheSk7CiAgICBYQ2hhbmdlUHJvcGVydHkoZ1hpdGstPmRpc3BsYXksIHdpbmRv
dywgWEFfV0lOX0xBWUVSLAoJCSAgICBYQV9DQVJESU5BTCwgMzIsIFByb3BNb2RlUmVwbGFjZSwg
KHVuc2lnbmVkIGNoYXIgKilwcm9wdmFsdWUsCgkJICAgIDEpOwogICAgWFVubG9ja0Rpc3BsYXko
Z1hpdGstPmRpc3BsYXkpOwogICAgcmV0dXJuOwogIH0KICAKCiAgaWYoZ1hpdGstPndtX3R5cGUg
JiBXTV9UWVBFX0VXTUhfQ09NUCkgewogICAgWEV2ZW50IHhldjsKCiAgICBtZW1zZXQoJnhldiwg
MCwgc2l6ZW9mIHhldik7CiAgICBYTG9ja0Rpc3BsYXkoZ1hpdGstPmRpc3BsYXkpOwogICAgaWYo
Z1hpdGstPndtX3R5cGUgJiBXTV9UWVBFX0tXSU4pIHsKICAgICAgeGV2LnhjbGllbnQudHlwZSAg
ICAgICAgID0gQ2xpZW50TWVzc2FnZTsKICAgICAgeGV2LnhjbGllbnQuZGlzcGxheSAgICAgID0g
Z1hpdGstPmRpc3BsYXk7CiAgICAgIHhldi54Y2xpZW50LndpbmRvdyAgICAgICA9IHdpbmRvdzsK
ICAgICAgeGV2LnhjbGllbnQubWVzc2FnZV90eXBlID0gWEFfTkVUX1dNX1NUQVRFOwogICAgICB4
ZXYueGNsaWVudC5mb3JtYXQgICAgICAgPSAzMjsKICAgICAgeGV2LnhjbGllbnQuZGF0YS5sWzBd
ICAgID0gMTsKICAgICAgeGV2LnhjbGllbnQuZGF0YS5sWzFdICAgID0gWEFfU1RBWVNfT05fVE9Q
OwogICAgICB4ZXYueGNsaWVudC5kYXRhLmxbMl0gICAgPSAwbDsKICAgICAgeGV2LnhjbGllbnQu
ZGF0YS5sWzNdICAgID0gMGw7CiAgICAgIHhldi54Y2xpZW50LmRhdGEubFs0XSAgICA9IDBsOwog
ICAgICAKICAgICAgWFNlbmRFdmVudChnWGl0ay0+ZGlzcGxheSwgRGVmYXVsdFJvb3RXaW5kb3co
Z1hpdGstPmRpc3BsYXkpLCBUcnVlLCBTdWJzdHJ1Y3R1cmVSZWRpcmVjdE1hc2ssICZ4ZXYpOwog
ICAgfQogICAgZWxzZSB7CiAgICAgIHhldi54Y2xpZW50LnR5cGUgICAgICAgICA9IENsaWVudE1l
c3NhZ2U7CiAgICAgIHhldi54Y2xpZW50LnNlcmlhbCAgICAgICA9IDA7CiAgICAgIHhldi54Y2xp
ZW50LnNlbmRfZXZlbnQgICA9IFRydWU7CiAgICAgIHhldi54Y2xpZW50LmRpc3BsYXkgICAgICA9
IGdYaXRrLT5kaXNwbGF5OwogICAgICB4ZXYueGNsaWVudC53aW5kb3cgICAgICAgPSB3aW5kb3c7
CiAgICAgIHhldi54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IFhBX05FVF9XTV9TVEFURTsKICAgICAg
eGV2LnhjbGllbnQuZm9ybWF0ICAgICAgID0gMzI7CiAgICAgIHhldi54Y2xpZW50LmRhdGEubFsw
XSAgICA9IChsb25nKSAxOwogICAgICB4ZXYueGNsaWVudC5kYXRhLmxbMV0gICAgPSAobG9uZykg
WEFfTkVUX1dNX1NUQVRFX0FCT1ZFOwogICAgICB4ZXYueGNsaWVudC5kYXRhLmxbMl0gICAgPSAo
bG9uZykgTm9uZTsKICAgICAgCiAgICAgIFhTZW5kRXZlbnQoZ1hpdGstPmRpc3BsYXksIERlZmF1
bHRSb290V2luZG93KGdYaXRrLT5kaXNwbGF5KSwgCgkJIEZhbHNlLCBTdWJzdHJ1Y3R1cmVSZWRp
cmVjdE1hc2sgfCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrLCAoWEV2ZW50KikgJnhldik7CiAgICAg
IAogICAgfQogICAgWFVubG9ja0Rpc3BsYXkoZ1hpdGstPmRpc3BsYXkpOwogICAgCiAgICByZXR1
cm47CiAgfQogIAogIHN3aXRjaChnWGl0ay0+d21fdHlwZSAmIFdNX1RZUEVfQ09NUF9NQVNLKSB7
CiAgY2FzZSBXTV9UWVBFX01PVElGOgogIGNhc2UgV01fVFlQRV9MQVJTV006CiAgICBicmVhazsK
ICAgIAogIGNhc2UgV01fVFlQRV9LV0lOOgogICAgWExvY2tEaXNwbGF5KGdYaXRrLT5kaXNwbGF5
KTsKICAgIFhDaGFuZ2VQcm9wZXJ0eShnWGl0ay0+ZGlzcGxheSwgd2luZG93LCBYQV9XSU5fTEFZ
RVIsCgkJICAgIFhBX0FUT00sIDMyLCBQcm9wTW9kZVJlcGxhY2UsICh1bnNpZ25lZCBjaGFyICop
JlhBX1NUQVlTX09OX1RPUCwgMSk7CiAgICBYVW5sb2NrRGlzcGxheShnWGl0ay0+ZGlzcGxheSk7
CiAgICBicmVhazsKICAgIAogIGNhc2UgV01fVFlQRV9VTktOT1dOOgogIGNhc2UgV01fVFlQRV9X
SU5ET1dNQUtFUjoKICBjYXNlIFdNX1RZUEVfSUNFOgogIGNhc2UgV01fVFlQRV9FOgogIGNhc2Ug
V01fVFlQRV9YRkNFOgogIGNhc2UgV01fVFlQRV9TQVdGSVNIOgogIGNhc2UgV01fVFlQRV9NRVRB
Q0lUWTogLyogVW50ZXN0ZWQgKi8KICBjYXNlIFdNX1RZUEVfQUZURVJTVEVQOgogIGNhc2UgV01f
VFlQRV9CTEFDS0JPWDoKICBjYXNlIFdNX1RZUEVfRFRXTToKICAgIHsKICAgICAgbG9uZyBwcm9w
dmFsdWVbMV07CiAgICAgIAogICAgICBwcm9wdmFsdWVbMF0gPSB4aXRrX2dldF9sYXllcl9sZXZl
bCgpOwogICAgICAKICAgICAgWExvY2tEaXNwbGF5KGdYaXRrLT5kaXNwbGF5KTsKICAgICAgWENo
YW5nZVByb3BlcnR5KGdYaXRrLT5kaXNwbGF5LCB3aW5kb3csIFhBX1dJTl9MQVlFUiwKCQkgICAg
ICBYQV9DQVJESU5BTCwgMzIsIFByb3BNb2RlUmVwbGFjZSwgKHVuc2lnbmVkIGNoYXIgKilwcm9w
dmFsdWUsCgkJICAgICAgMSk7CiAgICAgIFhVbmxvY2tEaXNwbGF5KGdYaXRrLT5kaXNwbGF5KTsK
ICAgIH0KICAgIGJyZWFrOwogIH0KfQoKdm9pZCB4aXRrX3NldF93aW5kb3dfbGF5ZXIoV2luZG93
IHdpbmRvdywgaW50IGxheWVyKSB7CiAgWEV2ZW50IHhldjsKCiAgaWYoKChnWGl0ay0+d21fdHlw
ZSAmIFdNX1RZUEVfQ09NUF9NQVNLKSA9PSBXTV9UWVBFX0tXSU4pIHx8CiAgICAgKChnWGl0ay0+
d21fdHlwZSAmIFdNX1RZUEVfRVdNSF9DT01QKSAmJiAhKGdYaXRrLT53bV90eXBlICYgV01fVFlQ
RV9HTk9NRV9DT01QKSkpIHsKICAgIHJldHVybjsKICB9CgogIG1lbXNldCgmeGV2LCAwLCBzaXpl
b2YgeGV2KTsKICB4ZXYudHlwZSAgICAgICAgICAgICAgICAgPSBDbGllbnRNZXNzYWdlOwogIHhl
di54Y2xpZW50LnR5cGUgICAgICAgICA9IENsaWVudE1lc3NhZ2U7CiAgeGV2LnhjbGllbnQud2lu
ZG93ICAgICAgID0gd2luZG93OwogIHhldi54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IFhBX1dJTl9M
QVlFUjsKICB4ZXYueGNsaWVudC5mb3JtYXQgICAgICAgPSAzMjsKICB4ZXYueGNsaWVudC5kYXRh
LmxbMF0gICAgPSAobG9uZykgbGF5ZXI7CiAgeGV2LnhjbGllbnQuZGF0YS5sWzFdICAgID0gKGxv
bmcpIDA7CiAgeGV2LnhjbGllbnQuZGF0YS5sWzJdICAgID0gKGxvbmcpIDA7CiAgeGV2LnhjbGll
bnQuZGF0YS5sWzNdICAgID0gKGxvbmcpIDA7CgogIFhMb2NrRGlzcGxheShnWGl0ay0+ZGlzcGxh
eSk7CiAgWFNlbmRFdmVudChnWGl0ay0+ZGlzcGxheSwgUm9vdFdpbmRvdyhnWGl0ay0+ZGlzcGxh
eSwgKFhEZWZhdWx0U2NyZWVuKGdYaXRrLT5kaXNwbGF5KSkpLCAKCSAgICAgRmFsc2UsIFN1YnN0
cnVjdHVyZU5vdGlmeU1hc2ssIChYRXZlbnQqKSAmeGV2KTsKICBYVW5sb2NrRGlzcGxheShnWGl0
ay0+ZGlzcGxheSk7Cn0KCnN0YXRpYyB2b2lkIF9zZXRfZXdtaF9zdGF0ZShXaW5kb3cgd2luZG93
LCBBdG9tIGF0b20sIGludCBlbmFibGUpIHsKICBYRXZlbnQgeGV2OwogIAogIGlmKCh3aW5kb3cg
PT0gTm9uZSkgfHwgKGF0b20gPT0gTm9uZSkpCiAgICByZXR1cm47CgogIG1lbXNldCgmeGV2LCAw
LCBzaXplb2YoeGV2KSk7CiAgeGV2LnhjbGllbnQudHlwZSAgICAgICAgID0gQ2xpZW50TWVzc2Fn
ZTsKICB4ZXYueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYQV9ORVRfV01fU1RBVEU7CiAgeGV2Lnhj
bGllbnQuZGlzcGxheSAgICAgID0gZ1hpdGstPmRpc3BsYXk7CiAgeGV2LnhjbGllbnQud2luZG93
ICAgICAgID0gd2luZG93OwogIHhldi54Y2xpZW50LmZvcm1hdCAgICAgICA9IDMyOwogIHhldi54
Y2xpZW50LmRhdGEubFswXSAgICA9IChlbmFibGUgPT0gMSkgPyAxIDogMDsKICB4ZXYueGNsaWVu
dC5kYXRhLmxbMV0gICAgPSBhdG9tOwogIHhldi54Y2xpZW50LmRhdGEubFsyXSAgICA9IDBsOwog
IHhldi54Y2xpZW50LmRhdGEubFszXSAgICA9IDBsOwogIHhldi54Y2xpZW50LmRhdGEubFs0XSAg
ICA9IDBsOwoKICBYTG9ja0Rpc3BsYXkoZ1hpdGstPmRpc3BsYXkpOwogIFhTZW5kRXZlbnQoZ1hp
dGstPmRpc3BsYXksIERlZmF1bHRSb290V2luZG93KGdYaXRrLT5kaXNwbGF5KSwgVHJ1ZSwgU3Vi
c3RydWN0dXJlUmVkaXJlY3RNYXNrLCAmeGV2KTsKICBYVW5sb2NrRGlzcGxheShnWGl0ay0+ZGlz
cGxheSk7Cn0KCnZvaWQgeGl0a19zZXRfZXdtaF9mdWxsc2NyZWVuKFdpbmRvdyB3aW5kb3cpIHsK
ICAKICBpZighKGdYaXRrLT53bV90eXBlICYgV01fVFlQRV9FV01IX0NPTVApIHx8ICh3aW5kb3cg
PT0gTm9uZSkpCiAgICByZXR1cm47CiAgCiAgX3NldF9ld21oX3N0YXRlKHdpbmRvdywgWEFfTkVU
X1dNX1NUQVRFX0ZVTExTQ1JFRU4sIDEpOwogIF9zZXRfZXdtaF9zdGF0ZSh3aW5kb3csIFhBX1NU
QVlTX09OX1RPUCwgMSk7Cn0KCnZvaWQgeGl0a191bnNldF9ld21oX2Z1bGxzY3JlZW4oV2luZG93
IHdpbmRvdykgewogIAogIGlmKCEoZ1hpdGstPndtX3R5cGUgJiBXTV9UWVBFX0VXTUhfQ09NUCkg
fHwgKHdpbmRvdyA9PSBOb25lKSkKICAgIHJldHVybjsKICAKICBfc2V0X2V3bWhfc3RhdGUod2lu
ZG93LCBYQV9ORVRfV01fU1RBVEVfRlVMTFNDUkVFTiwgMCk7CiAgX3NldF9ld21oX3N0YXRlKHdp
bmRvdywgWEFfU1RBWVNfT05fVE9QLCAwKTsKfQoKc3RhdGljIHZvaWQgX3NldF93bV93aW5kb3df
dHlwZShXaW5kb3cgd2luZG93LCB4aXRrX3dtX3dpbmRvd190eXBlX3QgdHlwZSwgaW50IHZhbHVl
KSB7CiAgaWYod2luZG93ICYmIChnWGl0ay0+d21fdHlwZSAmIFdNX1RZUEVfRVdNSF9DT01QKSkg
ewogICAgQXRvbSAqYXRvbSA9IE5VTEw7CiAgICAKICAgIHN3aXRjaCh0eXBlKSB7CiAgICBjYXNl
IFdJTkRPV19UWVBFX0RFU0tUT1A6CiAgICAgIGF0b20gPSAmWEFfV01fV0lORE9XX1RZUEVfREVT
S1RPUDsKICAgICAgYnJlYWs7CiAgICBjYXNlIFdJTkRPV19UWVBFX0RPQ0s6CiAgICAgIGF0b20g
PSAmWEFfV01fV0lORE9XX1RZUEVfRE9DSzsKICAgICAgYnJlYWs7CiAgICBjYXNlIFdJTkRPV19U
WVBFX1RPT0xCQVI6CiAgICAgIGF0b20gPSAmWEFfV01fV0lORE9XX1RZUEVfVE9PTEJBUjsKICAg
ICAgYnJlYWs7CiAgICBjYXNlIFdJTkRPV19UWVBFX01FTlU6CiAgICAgIGF0b20gPSAmWEFfV01f
V0lORE9XX1RZUEVfTUVOVTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFdJTkRPV19UWVBFX1VUSUxJ
VFk6CiAgICAgIGF0b20gPSAmWEFfV01fV0lORE9XX1RZUEVfVVRJTElUWTsKICAgICAgYnJlYWs7
CiAgICBjYXNlIFdJTkRPV19UWVBFX1NQTEFTSDoKICAgICAgYXRvbSA9ICZYQV9XTV9XSU5ET1df
VFlQRV9TUExBU0g7CiAgICAgIGJyZWFrOwogICAgY2FzZSBXSU5ET1dfVFlQRV9ESUFMT0c6CiAg
ICAgIGF0b20gPSAmWEFfV01fV0lORE9XX1RZUEVfRElBTE9HOwogICAgICBicmVhazsKICAgIGNh
c2UgV0lORE9XX1RZUEVfTk9STUFMOgogICAgICBhdG9tID0gJlhBX1dNX1dJTkRPV19UWVBFX05P
Uk1BTDsKICAgICAgYnJlYWs7CiAgICB9CiAgICAKICAgIGlmKGF0b20pIHsKICAgICAgWExPQ0so
Z1hpdGstPmRpc3BsYXkpOwogICAgICBYQ2hhbmdlUHJvcGVydHkoZ1hpdGstPmRpc3BsYXksIHdp
bmRvdywgWEFfV01fV0lORE9XX1RZUEUsIFhBX0FUT00sIDMyLCBQcm9wTW9kZVJlcGxhY2UsICh1
bnNpZ25lZCBjaGFyICopYXRvbSwgMSk7CiAgICAgIFhSYWlzZVdpbmRvdyhnWGl0ay0+ZGlzcGxh
eSwgd2luZG93KTsKICAgICAgWFVOTE9DSyhnWGl0ay0+ZGlzcGxheSk7CiAgICB9CiAgfQp9Cgp2
b2lkIHhpdGtfdW5zZXRfd21fd2luZG93X3R5cGUoV2luZG93IHdpbmRvdywgeGl0a193bV93aW5k
b3dfdHlwZV90IHR5cGUpIHsKICBfc2V0X3dtX3dpbmRvd190eXBlKHdpbmRvdywgdHlwZSwgMCk7
Cn0KCnZvaWQgeGl0a19zZXRfd21fd2luZG93X3R5cGUoV2luZG93IHdpbmRvdywgeGl0a193bV93
aW5kb3dfdHlwZV90IHR5cGUpIHsKICBfc2V0X3dtX3dpbmRvd190eXBlKHdpbmRvdywgdHlwZSwg
MSk7Cn0KCi8qCiAqIENyZWF0ZSBhIG5ldyB3aWRnZXRfbGlzdCwgc3RvcmUgdGhlIHBvaW50ZXIg
aW4gcHJpdmF0ZQogKiBsaXN0IG9mIHhpdGtfd2lkZ2V0X2xpc3RfdCwgdGhlbiByZXR1cm4gdGhl
IHdpZGdldF9saXN0IHBvaW50ZXIuCiAqLwp4aXRrX3dpZGdldF9saXN0X3QgKnhpdGtfd2lkZ2V0
X2xpc3RfbmV3ICh2b2lkKSB7CiAgeGl0a193aWRnZXRfbGlzdF90ICpsOwoKICBsID0gKHhpdGtf
d2lkZ2V0X2xpc3RfdCAqKSB4aXRrX3htYWxsb2Moc2l6ZW9mKHhpdGtfd2lkZ2V0X2xpc3RfdCkp
OwoKICBsLT53aWRnZXRfZm9jdXNlZCAgICAgPSBOVUxMOwogIGwtPndpZGdldF91bmRlcl9tb3Vz
ZSA9IE5VTEw7CiAgbC0+d2lkZ2V0X3ByZXNzZWQgICAgID0gTlVMTDsKCiAgTVVUTE9DSygpOwoK
ICB4aXRrX2xpc3RfYXBwZW5kX2NvbnRlbnQoZ1hpdGstPmxpc3QsIGwpOwoKICBNVVRVTkxPQ0so
KTsKCiAgcmV0dXJuIGw7Cn0KCi8qCiAqIENoYW5nZSB0aGUgd2luZG93IGZvciB0aGUgeGV2ZW50
X2hhbmRsZXIgcHJldmlvdXNseSBpbml0aWFsaXplZAogKiBhdCB3aWRnZXRfcmVnaXN0ZXJfZXZl
bnRfaGFuZGxlcigpIHRpbWUuIEl0IGFsc28gcmVtYWRlIGl0CiAqIERORCBhd2FyZSwgb25seSBp
ZiBETkQgc3R1ZmYgd2FzIGluaXRpYWxpemVkIGF0IHJlZ2lzdGVyIHRpbWUgdG9vLgogKi8Kdm9p
ZCB4aXRrX2NoYW5nZV93aW5kb3dfZm9yX2V2ZW50X2hhbmRsZXIgKHhpdGtfcmVnaXN0ZXJfa2V5
X3Qga2V5LCBXaW5kb3cgd2luZG93KSB7CiAgX19nZnhfdCAgKmZ4OwogIAogIE1VVExPQ0soKTsK
ICAgICAgCiAgZnggPSAoX19nZnhfdCAqKSB4aXRrX2xpc3RfZmlyc3RfY29udGVudChnWGl0ay0+
Z2Z4KTsKICAKICB3aGlsZShmeCkgewoKICAgIEZYTE9DSyhmeCk7CiAgICBpZihmeC0+a2V5ID09
IGtleSkgewoKICAgICAgZngtPndpbmRvdyA9IHdpbmRvdzsKCiAgICAgIGlmKGZ4LT54ZG5kICYm
ICh3aW5kb3cgIT0gTm9uZSkpIHsKCWlmKCF4aXRrX21ha2Vfd2luZG93X2RuZF9hd2FyZShmeC0+
eGRuZCwgd2luZG93KSkKCSAgeGl0a191bnNldF9kbmRfY2FsbGJhY2soZngtPnhkbmQpOwogICAg
ICB9CiAgICAgIAogICAgICBGWFVOTE9DSyhmeCk7CiAgICAgIE1VVFVOTE9DSygpOwogICAgICBy
ZXR1cm47CiAgICB9CiAgICAKICAgIEZYVU5MT0NLKGZ4KTsKICAgIGZ4ID0gKF9fZ2Z4X3QgKikg
eGl0a19saXN0X25leHRfY29udGVudChnWGl0ay0+Z2Z4KTsKICB9CgogIE1VVFVOTE9DSygpOwp9
CgovKgogKiBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgc2lnbmFs
IGhhcHBlbi4KICovCnZvaWQgeGl0a19yZWdpc3Rlcl9zaWduYWxfaGFuZGxlcih4aXRrX3NpZ25h
bF9jYWxsYmFja190IHNpZ2NiLCB2b2lkICp1c2VyX2RhdGEpIHsKICBpZihzaWdjYikgewogICAg
Z1hpdGstPnNpZ19jYWxsYmFjayA9IHNpZ2NiOwogICAgZ1hpdGstPnNpZ19kYXRhICAgICA9IHVz
ZXJfZGF0YTsKICB9Cn0KCi8qCiAqIFJlZ2lzdGVyIGEgd2luZG93LCB3aXRoIGhpcyBvd24gZXZl
bnQgaGFuZGxlciwgY2FsbGJhY2sKICogZm9yIERORCBldmVudHMsIGFuZCB3aWRnZXQgbGlzdC4K
ICovCnhpdGtfcmVnaXN0ZXJfa2V5X3QgeGl0a19yZWdpc3Rlcl9ldmVudF9oYW5kbGVyKGNoYXIg
Km5hbWUsIFdpbmRvdyB3aW5kb3csCgkJCQkJCXdpZGdldF9ldmVudF9jYWxsYmFja190IGNiLAoJ
CQkJCQl3aWRnZXRfbmV3cG9zX2NhbGxiYWNrX3QgcG9zX2NiLAoJCQkJCQl4aXRrX2RuZF9jYWxs
YmFja190IGRuZF9jYiwKCQkJCQkJeGl0a193aWRnZXRfbGlzdF90ICp3bCwgdm9pZCAqdXNlcl9k
YXRhKSB7CiAgX19nZnhfdCAgICpmeDsKICAKICAvLyAgcHJpbnRmKCIlcygpXG4iLCBfX0ZVTkNU
SU9OX18pOwoKICBmeCA9IChfX2dmeF90ICopIHhpdGtfeG1hbGxvYyhzaXplb2YoX19nZnhfdCkp
OwoKICBmeC0+bmFtZSA9IG5hbWUgPyBzdHJkdXAobmFtZSkgOiBzdHJkdXAoIk5PX1NFVCIpOwoK
ICBmeC0+d2luZG93ICAgID0gd2luZG93OwogIGZ4LT5uZXdfcG9zLnggPSAwOwogIGZ4LT5uZXdf
cG9zLnkgPSAwOwogIGZ4LT53aWR0aCAgICAgPSAwOwogIGZ4LT5oZWlnaHQgICAgPSAwOwogIGZ4
LT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CiAgcHRocmVhZF9tdXRleF9pbml0KCZmeC0+bXV0ZXgs
IE5VTEwpOwogIAogIGlmKHdpbmRvdyAhPSBOb25lKSB7CiAgICBYV2luZG93QXR0cmlidXRlcyB3
YXR0cjsKICAgIFN0YXR1cyAgICAgICAgICAgIGVycjsKICAgIAogICAgWExPQ0soZ1hpdGstPmRp
c3BsYXkpOwogICAgZXJyID0gWEdldFdpbmRvd0F0dHJpYnV0ZXMoZ1hpdGstPmRpc3BsYXksIGZ4
LT53aW5kb3csICZ3YXR0cik7CiAgICBYVU5MT0NLKGdYaXRrLT5kaXNwbGF5KTsKICAgIAogICAg
aWYoZXJyICE9IEJhZERyYXdhYmxlICYmIGVyciAhPSBCYWRXaW5kb3cpIHsKICAgICAgV2luZG93
IGM7CiAgICAgIAogICAgICBYTE9DSyhnWGl0ay0+ZGlzcGxheSk7CiAgICAgIFhUcmFuc2xhdGVD
b29yZGluYXRlcyhnWGl0ay0+ZGlzcGxheSwgZngtPndpbmRvdywgd2F0dHIucm9vdCwgCgkJCSAg
ICAwLCAwLCAmKGZ4LT5uZXdfcG9zLngpLCAmKGZ4LT5uZXdfcG9zLnkpLCAmYyk7CiAgICAgIFhV
TkxPQ0soZ1hpdGstPmRpc3BsYXkpOwogICAgICAKICAgICAgLyoKCWZ4LT5uZXdfcG9zLnggPSB3
YXR0ci54OwoJZngtPm5ld19wb3MueSA9IHdhdHRyLnk7CiAgICAgICovCiAgICAgIGZ4LT53aWR0
aCAgICAgPSB3YXR0ci53aWR0aDsKICAgICAgZngtPmhlaWdodCAgICA9IHdhdHRyLmhlaWdodDsK
ICAgIH0KICB9CgogIGlmKGNiKQogICAgZngtPnhldmVudF9jYWxsYmFjayA9IGNiOwojaWYgMAog
IGVsc2UgewogICAgWElUS19ESUUoIiVzKClAJWQ6IENhbGxiYWNrIHNob3VsZCBiZSBub24gTlVM
TFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CiAgfQojZW5kaWYKCiAgaWYocG9zX2NiICYm
ICh3aW5kb3cgIT0gTm9uZSkpCiAgICBmeC0+bmV3cG9zX2NhbGxiYWNrID0gcG9zX2NiOwogIGVs
c2UKICAgIGZ4LT5uZXdwb3NfY2FsbGJhY2sgPSBOVUxMOwogIAogIGlmKHdsKQogICAgZngtPndp
ZGdldF9saXN0ID0gd2w7CiAgZWxzZQogICAgZngtPndpZGdldF9saXN0ID0gTlVMTDsKCiAgaWYo
ZG5kX2NiICYmICh3aW5kb3cgIT0gTm9uZSkpIHsKICAgIGZ4LT54ZG5kID0gKHhpdGtfZG5kX3Qg
KikgeGl0a194bWFsbG9jKHNpemVvZih4aXRrX2RuZF90KSk7CiAgICAKICAgIHhpdGtfaW5pdF9k
bmQoZ1hpdGstPmRpc3BsYXksIGZ4LT54ZG5kKTsKICAgIGlmKHhpdGtfbWFrZV93aW5kb3dfZG5k
X2F3YXJlKGZ4LT54ZG5kLCBmeC0+d2luZG93KSkKICAgICAgeGl0a19zZXRfZG5kX2NhbGxiYWNr
KGZ4LT54ZG5kLCBkbmRfY2IpOwogIH0KICBlbHNlCiAgICBmeC0+eGRuZCA9IE5VTEw7CgogIGZ4
LT5rZXkgPSArK2dYaXRrLT5rZXk7CgogIGlmKGZ4LT53aW5kb3cpIHsKCiAgICBYTE9DSyhnWGl0
ay0+ZGlzcGxheSk7CiAgICBmeC0+WEFfWElUSyA9IFhJbnRlcm5BdG9tKGdYaXRrLT5kaXNwbGF5
LCAiX1hJVEtfRVZFTlQiLCBGYWxzZSk7CiAgICBYQ2hhbmdlUHJvcGVydHkgKGdYaXRrLT5kaXNw
bGF5LCBmeC0+d2luZG93LCBmeC0+WEFfWElUSywgWEFfQVRPTSwKCQkgICAgIDMyLCBQcm9wTW9k
ZUFwcGVuZCwgKHVuc2lnbmVkIGNoYXIgKikmWElUS19WRVJTSU9OLCAxKTsKICAgIFhVTkxPQ0so
Z1hpdGstPmRpc3BsYXkpOwoKICB9CiAgZWxzZQogICAgZngtPlhBX1hJVEsgPSBOb25lOwoKICBN
VVRMT0NLKCk7CgogIHhpdGtfbGlzdF9hcHBlbmRfY29udGVudChnWGl0ay0+Z2Z4LCBmeCk7Cgog
IE1VVFVOTE9DSygpOwoKICByZXR1cm4gZngtPmtleTsKfQoKc3RhdGljIHZvaWQgX19meF9kZXN0
cm95KF9fZ2Z4X3QgKmZ4LCBpbnQgbG9ja2VkKSB7CiAgX19nZnhfdCAqY3VyOwogIAogIGlmKCFm
eCkKICAgIHJldHVybjsKICAKICBpZighbG9ja2VkKQogICAgTVVUTE9DSygpOwogIAogIGN1ciA9
IChfX2dmeF90ICopIHhpdGtfbGlzdF9nZXRfY3VycmVudChnWGl0ay0+Z2Z4KTsKICAKICBpZihm
eC0+eGRuZCkgewogICAgeGl0a191bnNldF9kbmRfY2FsbGJhY2soZngtPnhkbmQpOwogICAgZnJl
ZShmeC0+eGRuZCk7CiAgfQogIAogIGZ4LT54ZXZlbnRfY2FsbGJhY2sgPSBOVUxMOwogIGZ4LT5u
ZXdwb3NfY2FsbGJhY2sgPSBOVUxMOwogIGZ4LT51c2VyX2RhdGEgICAgICAgPSBOVUxMOwoKICBm
cmVlKGZ4LT5uYW1lKTsKICAKICBpZihjdXIpIHsKICAgIGlmKGN1ciA9PSBmeCkKICAgICAgeGl0
a19saXN0X2RlbGV0ZV9jdXJyZW50KGdYaXRrLT5nZngpOyAKICAgIGVsc2UgewogICAgICBfX2dm
eF90ICpjZng7CiAgICAgIAogICAgICBjZnggPSAoX19nZnhfdCAqKSB4aXRrX2xpc3RfZmlyc3Rf
Y29udGVudChnWGl0ay0+Z2Z4KTsKICAgICAgd2hpbGUoY2Z4KSB7CglpZihjZnggPT0gZngpIHsK
CSAgeGl0a19saXN0X2RlbGV0ZV9jdXJyZW50KGdYaXRrLT5nZngpOyAKCSAgYnJlYWs7Cgl9CgkK
CWNmeCA9IChfX2dmeF90ICopIHhpdGtfbGlzdF9uZXh0X2NvbnRlbnQoZ1hpdGstPmdmeCk7CiAg
ICAgIH0KICAgICAgCiAgICAgIC8qIHNldCBjdXJyZW50IGJhY2sgKi8KICAgICAgY2Z4ID0gKF9f
Z2Z4X3QgKikgeGl0a19saXN0X2ZpcnN0X2NvbnRlbnQoZ1hpdGstPmdmeCk7CiAgICAgIHdoaWxl
KGNmeCkgewoJCglpZihjZnggPT0gY3VyKQoJICBicmVhazsKCQoJY2Z4ID0gKF9fZ2Z4X3QgKikg
eGl0a19saXN0X25leHRfY29udGVudChnWGl0ay0+Z2Z4KTsKICAgICAgfQogICAgfQogIH0KICAK
ICBGWFVOTE9DSyhmeCk7CiAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZmeC0+bXV0ZXgpOwoKICBm
cmVlKGZ4KTsKICAKICBpZighbG9ja2VkKQogICAgTVVUVU5MT0NLKCk7Cn0KCi8qCiAqIFJlbW92
ZSBmcm9tIHRoZSBsaXN0IHRoZSB3aW5kb3cvZXZlbnRfaGFuZGxlcgogKiBzcGVjaWZpZWQgYnkg
dGhlIGtleS4KICovCnZvaWQgeGl0a191bnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXIoeGl0a19yZWdp
c3Rlcl9rZXlfdCAqa2V5KSB7CiAgX19nZnhfdCAgKmZ4OwoKICAvLyAgcHJpbnRmKCIlcygpXG4i
LCBfX0ZVTkNUSU9OX18pOwoKICBNVVRMT0NLKCk7CiAgCiAgZnggPSAoX19nZnhfdCAqKSB4aXRr
X2xpc3RfZmlyc3RfY29udGVudChnWGl0ay0+Z2Z4KTsKICAKICB3aGlsZShmeCkgewoKICAgIGlm
KHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmZngtPm11dGV4KSkgewogICAgICBpZihmeC0+a2V5ID09
ICprZXkpIHsKCSprZXkgICAgICAgID0gMDsgCglmeC0+ZGVzdHJveSA9IDE7CglNVVRVTkxPQ0so
KTsKCXJldHVybjsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGlmKGZ4LT5rZXkgPT0g
KmtleSkgewoJKmtleSA9IDA7IAoJCglfX2Z4X2Rlc3Ryb3koZngsIDEpOwoJTVVUVU5MT0NLKCk7
CglyZXR1cm47CiAgICAgIH0KICAgICAgRlhVTkxPQ0soZngpOwogICAgfQoKICAgIGZ4ID0gKF9f
Z2Z4X3QgKikgeGl0a19saXN0X25leHRfY29udGVudChnWGl0ay0+Z2Z4KTsKICB9CgogIE1VVFVO
TE9DSygpOwp9CgovKgogKiBDb3B5IHdpbmRvdyBpbmZvcm1hdGlvbiBtYXRjaGluZyB3aXRoIGtl
eSBpbiBwYXNzZWQgd2luZG93X2luZm9fdCBzdHJ1Y3QuCiAqLwppbnQgeGl0a19nZXRfd2luZG93
X2luZm8oeGl0a19yZWdpc3Rlcl9rZXlfdCBrZXksIHdpbmRvd19pbmZvX3QgKndpbmYpIHsKICBf
X2dmeF90ICAqZng7CgogIE1VVExPQ0soKTsKCiAgZnggPSAoX19nZnhfdCAqKSB4aXRrX2xpc3Rf
Zmlyc3RfY29udGVudChnWGl0ay0+Z2Z4KTsKICAgIAogIHdoaWxlKGZ4KSB7CiAgICBpbnQgIGFs
cmVhZHlfbG9ja2VkID0gMDsKICAgIAogICAgaWYocHRocmVhZF9tdXRleF90cnlsb2NrKCZmeC0+
bXV0ZXgpKQogICAgICBhbHJlYWR5X2xvY2tlZCA9IDE7CgogICAgaWYoKGZ4LT5rZXkgPT0ga2V5
KSAmJiAoZngtPndpbmRvdyAhPSBOb25lKSkgewogICAgICBXaW5kb3cgYzsKICAgICAgCiAgICAg
IHdpbmYtPndpbmRvdyA9IGZ4LT53aW5kb3c7CiAgICAgIAogICAgICBpZihmeC0+bmFtZSkKCXdp
bmYtPm5hbWUgPSBzdHJkdXAoZngtPm5hbWUpOwogICAgICAKICAgICAgWExPQ0soZ1hpdGstPmRp
c3BsYXkpOwogICAgICBYVHJhbnNsYXRlQ29vcmRpbmF0ZXMoZ1hpdGstPmRpc3BsYXksIGZ4LT53
aW5kb3csIERlZmF1bHRSb290V2luZG93KGdYaXRrLT5kaXNwbGF5KSwgCgkJCSAgICAwLCAwLCAm
KGZ4LT5uZXdfcG9zLngpLCAmKGZ4LT5uZXdfcG9zLnkpLCAmYyk7CiAgICAgIFhVTkxPQ0soZ1hp
dGstPmRpc3BsYXkpOwogICAgICAKICAgICAgCiAgICAgIHdpbmYtPnggICAgICA9IGZ4LT5uZXdf
cG9zLng7CiAgICAgIHdpbmYtPnkgICAgICA9IGZ4LT5uZXdfcG9zLnk7CiAgICAgIHdpbmYtPmhl
aWdodCA9IGZ4LT5oZWlnaHQ7CiAgICAgIHdpbmYtPndpZHRoICA9IGZ4LT53aWR0aDsKICAgICAg
CiAgICAgIGlmKCFhbHJlYWR5X2xvY2tlZCkKCUZYVU5MT0NLKGZ4KTsKCiAgICAgIE1VVFVOTE9D
SygpOwogICAgICByZXR1cm4gMTsKCiAgICB9CiAgICAKICAgIGlmKCFhbHJlYWR5X2xvY2tlZCkK
ICAgICAgRlhVTkxPQ0soZngpOwogICAgCiAgICBmeCA9IChfX2dmeF90ICopIHhpdGtfbGlzdF9u
ZXh0X2NvbnRlbnQoZ1hpdGstPmdmeCk7CiAgfQoKICBNVVRVTkxPQ0soKTsKICByZXR1cm4gMDsK
fQoKLyoKICogSGVyZSBldmVudHMgYXJlIGhhbmRsZWQuIEFsbCB3aWRnZXQgYXJlIGxvY2FsbHkK
ICogaGFuZGxlZCwgdGhlbiBpZiBhIGV2ZW50IGhhbmRsZXIgY2FsbGJhY2sgd2FzIHBhc3NlZAog
KiBhdCByZWdpc3RlciB0aW1lLCBpdCB3aWxsIGJlIGNhbGxlZC4KICovCnZvaWQgeGl0a194ZXZl
bnRfbm90aWZ5KFhFdmVudCAqZXZlbnQpIHsKICBfX2dmeF90ICAqZngsICpmeGQ7CiAgICAgCiAg
aWYoIShmeCA9IChfX2dmeF90ICopIHhpdGtfbGlzdF9maXJzdF9jb250ZW50KGdYaXRrLT5nZngp
KSkKICAgIHJldHVybjsKCiAgaWYoZXZlbnQtPnR5cGUgPT0gS2V5UHJlc3MgfHwgZXZlbnQtPnR5
cGUgPT0gS2V5UmVsZWFzZSkgewoKICAgIC8qIEZpbHRlciBrZXlzIHRoYXQgZG9udCd0IG5lZWQg
dG8gYmUgaGFuZGxlZCBieSB4aW5lICAqLwogICAgLyogYW5kIGNvdWxkIGJlIHVzZWQgYnkgb3Vy
IHNjcmVlbiBzYXZlciByZXNldCAicGluZyIuICovCiAgICAvKiBTbyB0aGV5IHdpbGwgbm90IGtp
bGwgdGlwcyBhbmQgbWVudXMuICAgICAgICAgICAgICAgKi8KCiAgICBzaXplX3QgaTsKCiAgICBm
b3IoaSA9IDA7IGkgPCBzaXplb2YoZ1hpdGstPmlnbm9yZV9rZXlzKS9zaXplb2YoZ1hpdGstPmln
bm9yZV9rZXlzWzBdKTsgKytpKQogICAgICBpZihldmVudC0+eGtleS5rZXljb2RlID09IGdYaXRr
LT5pZ25vcmVfa2V5c1tpXSkKCXJldHVybjsKICB9CiAgCiAgRlhMT0NLKGZ4KTsKICAKICBpZihn
WGl0ay0+bW9kYWx3ICE9IE5vbmUpIHsKICAgIHdoaWxlKGZ4ICYmIChmeC0+d2luZG93ICE9IGdY
aXRrLT5tb2RhbHcpKSB7CiAgICAgIAogICAgICBpZihmeC0+eGV2ZW50X2NhbGxiYWNrICYmIChm
eC0+d2luZG93ICE9IE5vbmUgJiYgZXZlbnQtPnR5cGUgIT0gS2V5UmVsZWFzZSkpCglmeC0+eGV2
ZW50X2NhbGxiYWNrKGV2ZW50LCBmeC0+dXNlcl9kYXRhKTsKICAgICAgCiAgICAgIGZ4ID0gKF9f
Z2Z4X3QgKikgeGl0a19saXN0X25leHRfY29udGVudChnWGl0ay0+Z2Z4KTsKICAgIH0KICB9CiAg
CiAgd2hpbGUoZngpIHsKCiAgICBpZihldmVudC0+dHlwZSA9PSBLZXlSZWxlYXNlKQogICAgICBn
ZXR0aW1lb2ZkYXkoJmdYaXRrLT5rZXlwcmVzcywgMCk7CiAgICAKICAgIGlmKGZ4LT53aW5kb3cg
IT0gTm9uZSkgewogICAgICAKICAgICAgLy9wcmludGYoImV2ZW50ICVkXG4iLCBldmVudC0+dHlw
ZSk7CgogICAgICBpZihmeC0+d2luZG93ID09IGV2ZW50LT54YW55LndpbmRvdykgewoJCglzd2l0
Y2goZXZlbnQtPnR5cGUpIHsKCgljYXNlIE1hcHBpbmdOb3RpZnk6CgkgIFhMT0NLKGdYaXRrLT5k
aXNwbGF5KTsKCSAgWFJlZnJlc2hLZXlib2FyZE1hcHBpbmcoKFhNYXBwaW5nRXZlbnQgKikgZXZl
bnQpOwoJICBYVU5MT0NLKGdYaXRrLT5kaXNwbGF5KTsKCSAgYnJlYWs7CgoJY2FzZSBLZXlQcmVz
czogewoJICBYS2V5RXZlbnQgICAgICBteWtleWV2ZW50OwoJICBLZXlTeW0gICAgICAgICBteWtl
eTsKCSAgY2hhciAgICAgICAgICAga2J1ZlsyNTZdOwoJICBpbnQgICAgICAgICAgICBsZW47Cgkg
IGludCAgICAgICAgICAgIG1vZGlmaWVyOwoJICBpbnQgICAgICAgICAgICBoYW5kbGVkID0gMDsK
CSAgeGl0a193aWRnZXRfdCAqdyA9IE5VTEw7CgkgIAoJICBteWtleWV2ZW50ID0gZXZlbnQtPnhr
ZXk7CgoJICB4aXRrX2dldF9rZXlfbW9kaWZpZXIoZXZlbnQsICZtb2RpZmllcik7CgoJICBYTE9D
SyhnWGl0ay0+ZGlzcGxheSk7CgkgIGxlbiA9IFhMb29rdXBTdHJpbmcoJm15a2V5ZXZlbnQsIGti
dWYsIHNpemVvZihrYnVmKSwgJm15a2V5LCBOVUxMKTsKCSAgWFVOTE9DSyhnWGl0ay0+ZGlzcGxh
eSk7CgoJICB4aXRrX3RpcHNfaGlkZV90aXBzKCk7CgkgIAoJICBpZihmeC0+d2lkZ2V0X2xpc3Qg
JiYgZngtPndpZGdldF9saXN0LT53aWRnZXRfZm9jdXNlZCkgewoJICAgIHcgPSBmeC0+d2lkZ2V0
X2xpc3QtPndpZGdldF9mb2N1c2VkOwoJICB9CgoJICBpZih3ICYmICgoKHctPnR5cGUgJiBXSURH
RVRfVFlQRV9NQVNLKSA9PSBXSURHRVRfVFlQRV9JTlBVVFRFWFQpICYmCgkJICAgKG15a2V5ICE9
IFhLX1RhYikgJiYgKG15a2V5ICE9IFhLX0tQX1RhYikgJiYgKG15a2V5ICE9IFhLX0lTT19MZWZ0
X1RhYikpKSB7CgkgICAgCgkgICAgeGl0a19zZW5kX2tleV9ldmVudCh3LCBldmVudCk7CgkgICAg
CgkgICAgaWYoKG15a2V5ID09IFhLX1JldHVybikgfHwgKG15a2V5ID09IFhLX0tQX0VudGVyKSB8
fCAobXlrZXkgPT0gWEtfSVNPX0VudGVyKSkgewoJICAgICAgd2lkZ2V0X2V2ZW50X3QgIGV2ZW50
OwoJICAgICAgCgkgICAgICBldmVudC50eXBlID0gV0lER0VUX0VWRU5UX1BBSU5UOwoJICAgICAg
KHZvaWQpIHctPmV2ZW50KHcsICZldmVudCwgTlVMTCk7CgkgICAgICAKCSAgICAgIHhpdGtfc2V0
X2ZvY3VzX3RvX25leHRfd2lkZ2V0KGZ4LT53aWRnZXRfbGlzdCwgMCk7CgkgICAgfQoKCSAgICBG
WFVOTE9DSyhmeCk7CgkgICAgcmV0dXJuOwoJICB9CgkgIAoJICAvKiBjbG9zZSBtZW51ICovCgkg
IGlmKG15a2V5ID09IFhLX0VzY2FwZSkgewoJICAgIGlmKHcgJiYgKCh3LT50eXBlICYgV0lER0VU
X0dST1VQX01BU0spICYgV0lER0VUX0dST1VQX01FTlUpKSB7CgkgICAgICB4aXRrX3dpZGdldF90
ICptID0geGl0a19tZW51X2dldF9tZW51KHcpOwoJICAgICAgCgkgICAgICB4aXRrX21lbnVfZGVz
dHJveShtKTsKCSAgICAgIEZYVU5MT0NLKGZ4KTsKCSAgICAgIHJldHVybjsKCSAgICB9CgkgIH0K
CSAgLyogc2V0IGZvY3VzIHRvIG5leHQgd2lkZ2V0ICovCgkgIGVsc2UgaWYoKG15a2V5ID09IFhL
X1RhYikgfHwgKG15a2V5ID09IFhLX0tQX1RhYikgfHwgKG15a2V5ID09IFhLX0lTT19MZWZ0X1Rh
YikpIHsKCSAgICBpZihmeC0+d2lkZ2V0X2xpc3QpIHsKCSAgICAgIGhhbmRsZWQgPSAxOwoJICAg
ICAgeGl0a19zZXRfZm9jdXNfdG9fbmV4dF93aWRnZXQoZngtPndpZGdldF9saXN0LCAobW9kaWZp
ZXIgJiBNT0RJRklFUl9TSElGVCkpOwoJICAgIH0KCSAgfQoJICAvKiBzaW11bGF0ZSBjbGljayBl
dmVudCBvbiBzcGFjZS9yZXR1cm4vZW50ZXIga2V5IGV2ZW50ICovCgkgIGVsc2UgaWYoKG15a2V5
ID09IFhLX3NwYWNlKSB8fCAobXlrZXkgPT0gWEtfUmV0dXJuKSB8fCAKCQkgIChteWtleSA9PSBY
S19LUF9FbnRlcikgfHwgKG15a2V5ID09IFhLX0lTT19FbnRlcikpIHsKCSAgICBpZih3ICYmICgo
KHctPnR5cGUgJiBXSURHRVRfQ0xJQ0tBQkxFKSAmJiAody0+dHlwZSAmIFdJREdFVF9LRVlBQkxF
KSkKCQkgICAgICYmIHctPnZpc2libGUgJiYgdy0+ZW5hYmxlKSkgewoKCSAgICBfX21lbnVfc2lt
X2NsaWNrOgoKCSAgICAgIGlmKHcgJiYgKCgody0+dHlwZSAmIFdJREdFVF9UWVBFX01BU0spID09
IFdJREdFVF9UWVBFX0JVVFRPTikgfHwKCQkgICAgICAgKCh3LT50eXBlICYgV0lER0VUX1RZUEVf
TUFTSykgPT0gV0lER0VUX1RZUEVfTEFCRUxCVVRUT04pIHx8CgkJICAgICAgICgody0+dHlwZSAm
IFdJREdFVF9UWVBFX01BU0spID09IFdJREdFVF9UWVBFX0NIRUNLQk9YKSkpIHsKCQl3aWRnZXRf
ZXZlbnRfdCAgICAgICAgIGV2ZW50OwoJCXdpZGdldF9ldmVudF9yZXN1bHRfdCAgcmVzdWx0OwoK
CQloYW5kbGVkID0gMTsKCgkJZXZlbnQudHlwZSAgICAgICAgICAgPSBXSURHRVRfRVZFTlRfQ0xJ
Q0s7CgkJZXZlbnQueCAgICAgICAgICAgICAgPSB3LT54OwoJCWV2ZW50LnkgICAgICAgICAgICAg
ID0gdy0+eTsKCQlldmVudC5idXR0b25fcHJlc3NlZCA9IExCVVRUT05fRE9XTjsKCQlldmVudC5i
dXR0b24gICAgICAgICA9IEJ1dHRvbjE7CgoJCSh2b2lkKSB3LT5ldmVudCh3LCAmZXZlbnQsICZy
ZXN1bHQpOwoKCQlldmVudC5idXR0b25fcHJlc3NlZCA9IExCVVRUT05fVVA7CgoJCSh2b2lkKSB3
LT5ldmVudCh3LCAmZXZlbnQsICZyZXN1bHQpOwoKCQkvLwkJaWYoZngtPnhldmVudF9jYWxsYmFj
aykKCQkvLwkJICBmeC0+eGV2ZW50X2NhbGxiYWNrKGV2ZW50LCBmeC0+dXNlcl9kYXRhKTsKCSAg
ICAgIH0KCSAgICB9CgkgIH0KCSAgLyogbW92ZSBzbGlkZXJzLCBoYW5kbGUgbWVudSBpdGVtcyAq
LwoJICBlbHNlIGlmKCgobXlrZXkgPT0gWEtfTGVmdCkgfHwgKG15a2V5ID09IFhLX1JpZ2h0KSAK
CQkgICB8fCAobXlrZXkgPT0gWEtfVXApIHx8IChteWtleSA9PSBYS19Eb3duKQoJCSAgIHx8ICht
eWtleSA9PSBYS19QcmlvcikgfHwgKG15a2V5ID09IFhLX05leHQpKSAKCQkgICYmICgobW9kaWZp
ZXIgJiAweEZGRkZGRkVGKSA9PSBNT0RJRklFUl9OT01PRCkpIHsKCSAgICAKCSAgICBpZih3ICYm
ICgody0+dHlwZSAmIFdJREdFVF9HUk9VUF9NQVNLKSAmIFdJREdFVF9HUk9VUF9CUk9XU0VSKSkg
ewoJICAgICAgeGl0a193aWRnZXRfdCAqYiA9IHhpdGtfYnJvd3Nlcl9nZXRfYnJvd3Nlcih3KTsK
CSAgICAgIAoJICAgICAgaWYoYikgewoJCWhhbmRsZWQgPSAxOwoJCWlmKG15a2V5ID09IFhLX1Vw
KQoJCSAgeGl0a19icm93c2VyX3N0ZXBfZG93bihiLCBOVUxMKTsKCQllbHNlIGlmKG15a2V5ID09
IFhLX0Rvd24pCgkJICB4aXRrX2Jyb3dzZXJfc3RlcF91cChiLCBOVUxMKTsKCQllbHNlIGlmKG15
a2V5ID09IFhLX0xlZnQpCgkJICB4aXRrX2Jyb3dzZXJfc3RlcF9sZWZ0KGIsIE5VTEwpOwoJCWVs
c2UgaWYobXlrZXkgPT0gWEtfUmlnaHQpCgkJICB4aXRrX2Jyb3dzZXJfc3RlcF9yaWdodChiLCBO
VUxMKTsKCQllbHNlIGlmKG15a2V5ID09IFhLX1ByaW9yKQoJCSAgeGl0a19icm93c2VyX3BhZ2Vf
ZG93bihiLCBOVUxMKTsKCQllbHNlIGlmKG15a2V5ID09IFhLX05leHQpCgkJICB4aXRrX2Jyb3dz
ZXJfcGFnZV91cChiLCBOVUxMKTsKCSAgICAgIH0KCSAgICB9CgkgICAgZWxzZSBpZih3ICYmICgo
KHctPnR5cGUgJiBXSURHRVRfVFlQRV9NQVNLKSA9PSBXSURHRVRfVFlQRV9TTElERVIpIAoJCQkg
ICYmICh3LT50eXBlICYgV0lER0VUX0tFWUFCTEUpKSkgewoJICAgICAgaGFuZGxlZCA9IDE7Cgkg
ICAgICBpZigobXlrZXkgPT0gWEtfTGVmdCkgfHwgKG15a2V5ID09IFhLX0Rvd24pIHx8IChteWtl
eSA9PSBYS19OZXh0KSkgewoJCXhpdGtfc2xpZGVyX21ha2VfYmFja3N0ZXAodyk7CgkgICAgICB9
CgkgICAgICBlbHNlIHsKCQl4aXRrX3NsaWRlcl9tYWtlX3N0ZXAodyk7CgkgICAgICB9CgkgICAg
ICB4aXRrX3NsaWRlcl9jYWxsYmFja19leGVjKHcpOwoJICAgIH0KCSAgICBlbHNlIGlmKHcgJiYg
KCh3LT50eXBlICYgV0lER0VUX0dST1VQX01BU0spICYgV0lER0VUX0dST1VQX01FTlUpKSB7Cgkg
ICAgICBoYW5kbGVkID0gMTsKCSAgICAgIGlmKG15a2V5ID09IFhLX0xlZnQpIHsKCQkvKiBjbG9z
ZSBtZW51IGJyYW5jaCAqLwoJCXhpdGtfbWVudV9kZXN0cm95X2JyYW5jaCh3KTsKCSAgICAgIH0K
CSAgICAgIGVsc2UgaWYobXlrZXkgPT0gWEtfUmlnaHQpIHsKCQkvKiBzaW11bGF0ZSBjbGljayBl
dmVudDogdHJpZ2dlciBhY3Rpb24gb2YgbWVudSBpdGVtIChlLmcuIG9wZW4gc3VibWVudSkgKi8K
CQlnb3RvIF9fbWVudV9zaW1fY2xpY2s7IC8vIChnb3RvIGlzIGJhZCBidXQgc2ltcGxlIC4uLikK
CSAgICAgIH0KCSAgICAgIGVsc2UgewoJCS8qIG5leHQvcHJldmlvdXMgbWVudSBpdGVtICovCgkJ
aWYoZngtPndpZGdldF9saXN0KQoJCSAgeGl0a19zZXRfZm9jdXNfdG9fbmV4dF93aWRnZXQoZngt
PndpZGdldF9saXN0LAoJCQkJCQkoKG15a2V5ID09IFhLX1VwKSB8fCAobXlrZXkgPT0gWEtfUHJp
b3IpKSk7CgkgICAgICB9CgkgICAgfQoJICB9CgkgIGVsc2UgaWYoKG15a2V5ID09IFhLXzApIHx8
IChteWtleSA9PSBYS18xKSB8fCAobXlrZXkgPT0gWEtfMikgfHwgKG15a2V5ID09IFhLXzMpIHx8
IAoJCSAgKG15a2V5ID09IFhLXzQpIHx8IChteWtleSA9PSBYS181KSB8fCAobXlrZXkgPT0gWEtf
NikgfHwgKG15a2V5ID09IFhLXzcpIHx8IAoJCSAgKG15a2V5ID09IFhLXzgpIHx8IChteWtleSA9
PSBYS185KSB8fCAKCQkgIChteWtleSA9PSBYS191bmRlcnNjb3JlKSB8fAoJCSAgKG15a2V5ID09
IFhLX2EpIHx8IChteWtleSA9PSBYS19BKSB8fCAobXlrZXkgPT0gWEtfYikgfHwgKG15a2V5ID09
IFhLX0IpIHx8CgkJICAobXlrZXkgPT0gWEtfYykgfHwgKG15a2V5ID09IFhLX0MpIHx8IChteWtl
eSA9PSBYS19kKSB8fCAobXlrZXkgPT0gWEtfRCkgfHwKCQkgIChteWtleSA9PSBYS19lKSB8fCAo
bXlrZXkgPT0gWEtfRSkgfHwgKG15a2V5ID09IFhLX2YpIHx8IChteWtleSA9PSBYS19GKSB8fAoJ
CSAgKG15a2V5ID09IFhLX2cpIHx8IChteWtleSA9PSBYS19HKSB8fCAobXlrZXkgPT0gWEtfaCkg
fHwgKG15a2V5ID09IFhLX0gpIHx8CgkJICAobXlrZXkgPT0gWEtfaSkgfHwgKG15a2V5ID09IFhL
X0kpIHx8IChteWtleSA9PSBYS19qKSB8fCAobXlrZXkgPT0gWEtfSikgfHwKCQkgIChteWtleSA9
PSBYS19rKSB8fCAobXlrZXkgPT0gWEtfSykgfHwgKG15a2V5ID09IFhLX2wpIHx8IChteWtleSA9
PSBYS19MKSB8fAoJCSAgKG15a2V5ID09IFhLX20pIHx8IChteWtleSA9PSBYS19NKSB8fCAobXlr
ZXkgPT0gWEtfbikgfHwgKG15a2V5ID09IFhLX04pIHx8CgkJICAobXlrZXkgPT0gWEtfbykgfHwg
KG15a2V5ID09IFhLX08pIHx8IChteWtleSA9PSBYS19wKSB8fCAobXlrZXkgPT0gWEtfUCkgfHwK
CQkgIChteWtleSA9PSBYS19xKSB8fCAobXlrZXkgPT0gWEtfUSkgfHwgKG15a2V5ID09IFhLX3Ip
IHx8IChteWtleSA9PSBYS19SKSB8fAoJCSAgKG15a2V5ID09IFhLX3MpIHx8IChteWtleSA9PSBY
S19TKSB8fCAobXlrZXkgPT0gWEtfdCkgfHwgKG15a2V5ID09IFhLX1QpIHx8CgkJICAobXlrZXkg
PT0gWEtfdSkgfHwgKG15a2V5ID09IFhLX1UpIHx8IChteWtleSA9PSBYS192KSB8fCAobXlrZXkg
PT0gWEtfVikgfHwKCQkgIChteWtleSA9PSBYS193KSB8fCAobXlrZXkgPT0gWEtfVykgfHwgKG15
a2V5ID09IFhLX3gpIHx8IChteWtleSA9PSBYS19YKSB8fAoJCSAgKG15a2V5ID09IFhLX3kpIHx8
IChteWtleSA9PSBYS19ZKSB8fCAobXlrZXkgPT0gWEtfeikgfHwgKG15a2V5ID09IFhLX1opKSB7
CgoJICAgIAoJICAgIGlmKHcgJiYgKCh3LT50eXBlICYgV0lER0VUX0dST1VQX01BU0spICYgV0lE
R0VUX0dST1VQX0JST1dTRVIpKSB7CgkgICAgICB4aXRrX3dpZGdldF90ICpiID0geGl0a19icm93
c2VyX2dldF9icm93c2VyKHcpOwoJICAgICAgCgkgICAgICBpZihiKSB7CgkJaGFuZGxlZCA9IDE7
CgkJeGl0a19icm93c2VyX3dhcnBfanVtcChiLCBrYnVmLCBtb2RpZmllcik7CgkgICAgICB9CgoJ
ICAgIH0KCSAgfQoKCSAgaWYoIWhhbmRsZWQpIHsKCgkgICAgaWYoZ1hpdGstPm1lbnUgJiYgCgkg
ICAgICAgKChmeC0+d2lkZ2V0X2xpc3QgJiYgCgkJICgoIWZ4LT53aWRnZXRfbGlzdC0+d2lkZ2V0
X2ZvY3VzZWQpIHx8IAoJCSAgKCEoZngtPndpZGdldF9saXN0LT53aWRnZXRfZm9jdXNlZC0+dHlw
ZSAmIFdJREdFVF9HUk9VUF9NRU5VKSkpKSB8fAoJCSghZngtPndpZGdldF9saXN0KSkpICB7Cgkg
ICAgICAKCSAgICAgIHhpdGtfc2V0X2N1cnJlbnRfbWVudShOVUxMKTsKCSAgICB9CgkgICAgCgkg
ICAgaWYoKHcgPT0gTlVMTCkgfHwgKHcgJiYgKCgody0+dHlwZSAmIFdJREdFVF9UWVBFX01BU0sp
ID09IFdJREdFVF9UWVBFX0lOUFVUVEVYVCkgPT0gMCkpKSB7CgkgICAgICBpZihmeC0+eGV2ZW50
X2NhbGxiYWNrKSB7CgkJZngtPnhldmVudF9jYWxsYmFjayhldmVudCwgZngtPnVzZXJfZGF0YSk7
CgkgICAgICB9CgkgICAgfQoJICAgIAoJICAgIGlmKHcgJiYgKCh3LT50eXBlICYgV0lER0VUX1RZ
UEVfTUFTSykgPT0gV0lER0VUX1RZUEVfSU5QVVRURVhUKSAmJiAKCSAgICAgICAoKG15a2V5ID09
IFhLX1JldHVybikgfHwgKG15a2V5ID09IFhLX0tQX0VudGVyKSB8fCAobXlrZXkgPT0gWEtfSVNP
X0VudGVyKSkpIHsKCSAgICAgIHdpZGdldF9ldmVudF90ICBldmVudDsKCSAgICAgIAoJICAgICAg
ZXZlbnQudHlwZSA9IFdJREdFVF9FVkVOVF9QQUlOVDsKCSAgICAgICh2b2lkKSB3LT5ldmVudCh3
LCAmZXZlbnQsIE5VTEwpOwoJICAgICAgCgkgICAgICB4aXRrX3NldF9mb2N1c190b19uZXh0X3dp
ZGdldChmeC0+d2lkZ2V0X2xpc3QsIDApOwoJICAgICAgCgkgICAgfQoJICB9CgkgIAoJICBpZihm
eC0+ZGVzdHJveSkKCSAgICBfX2Z4X2Rlc3Ryb3koZngsIDApOwoJICBlbHNlCgkgICAgRlhVTkxP
Q0soZngpOwoKCSAgcmV0dXJuOwoJfQoJYnJlYWs7CgoJY2FzZSBFeHBvc2U6CgkgIGlmIChmeC0+
d2lkZ2V0X2xpc3QpIHsKCSAgICBYRXZlbnQgeGV2ID0gKmV2ZW50OwoKCSAgICBYTE9DSyhnWGl0
ay0+ZGlzcGxheSk7CgkgICAgd2hpbGUoWENoZWNrVHlwZWRXaW5kb3dFdmVudChnWGl0ay0+ZGlz
cGxheSwgZngtPndpbmRvdywgCgkJCQkJIEV4cG9zZSwgJnhldikgPT0gVHJ1ZSk7CgkgICAgWFVO
TE9DSyhnWGl0ay0+ZGlzcGxheSk7CgoJICAgIGlmKHhldi54ZXhwb3NlLmNvdW50ID09IDApCgkg
ICAgICB4aXRrX3BhaW50X3dpZGdldF9saXN0KGZ4LT53aWRnZXRfbGlzdCk7CgkgIH0KCSAgYnJl
YWs7CgkgIAoJY2FzZSBNb3Rpb25Ob3RpZnk6IHsKCSAgWFdpbmRvd0F0dHJpYnV0ZXMgd2F0dHI7
CgkgIFN0YXR1cyAgICAgICAgICAgIGVycjsKCSAgCgkgIFhMT0NLKGdYaXRrLT5kaXNwbGF5KTsK
CSAgd2hpbGUoWENoZWNrTWFza0V2ZW50KGdYaXRrLT5kaXNwbGF5LCBCdXR0b25Nb3Rpb25NYXNr
LCBldmVudCkgPT0gVHJ1ZSk7CgkgIFhVTkxPQ0soZ1hpdGstPmRpc3BsYXkpOwoKCSAgZngtPm9s
ZF9ldmVudCA9IGV2ZW50OwoJICBpZihmeC0+bW92ZS5lbmFibGVkKSB7CgoJICAgIGlmKGZ4LT53
aWRnZXRfbGlzdC0+d2lkZ2V0X2ZvY3VzZWQgJiYgCgkgICAgICAgKGZ4LT53aWRnZXRfbGlzdC0+
d2lkZ2V0X2ZvY3VzZWQtPnR5cGUgJiBXSURHRVRfR1JPVVBfTUVOVSkpIHsKCSAgICAgIHhpdGtf
d2lkZ2V0X3QgKm1lbnUgPSB4aXRrX21lbnVfZ2V0X21lbnUoZngtPndpZGdldF9saXN0LT53aWRn
ZXRfZm9jdXNlZCk7CgoJICAgICAgaWYoeGl0a19tZW51X3Nob3dfc3ViX2JyYW5jaHMobWVudSkp
CgkJeGl0a19tZW51X2Rlc3Ryb3lfc3ViX2JyYW5jaHMobWVudSk7CgoJICAgIH0KCgkgICAgZngt
Pm9sZF9wb3MueCA9IGZ4LT5uZXdfcG9zLng7CgkgICAgZngtPm9sZF9wb3MueSA9IGZ4LT5uZXdf
cG9zLnk7CgoJICAgIGZ4LT5uZXdfcG9zLnggPSAoZXZlbnQtPnhtb3Rpb24ueF9yb290KSAKCSAg
ICAgICsgKGV2ZW50LT54bW90aW9uLnhfcm9vdCAtIGZ4LT5vbGRfZXZlbnQtPnhtb3Rpb24ueF9y
b290KSAKCSAgICAgIC0gZngtPm1vdmUub2Zmc2V0X3g7CgkgICAgZngtPm5ld19wb3MueSA9IChl
dmVudC0+eG1vdGlvbi55X3Jvb3QpIAoJICAgICAgKyAoZXZlbnQtPnhtb3Rpb24ueV9yb290IC0g
ZngtPm9sZF9ldmVudC0+eG1vdGlvbi55X3Jvb3QpIAoJICAgICAgLSBmeC0+bW92ZS5vZmZzZXRf
eTsKCSAgICAKCSAgICBYTE9DSyhnWGl0ay0+ZGlzcGxheSk7CgoJICAgIFhNb3ZlV2luZG93KGdY
aXRrLT5kaXNwbGF5LCBmeC0+d2luZG93LAoJCQlmeC0+bmV3X3Bvcy54LCBmeC0+bmV3X3Bvcy55
KTsKCSAgICBlcnIgPSBYR2V0V2luZG93QXR0cmlidXRlcyhnWGl0ay0+ZGlzcGxheSwgZngtPndp
bmRvdywgJndhdHRyKTsKCgkgICAgWFVOTE9DSyhnWGl0ay0+ZGlzcGxheSk7CgoJICB9CgkgIGVs
c2UgewoJICAgIGlmKGZ4LT53aWRnZXRfbGlzdCkgewoJICAgICAgeGl0a19tb3Rpb25fbm90aWZ5
X3dpZGdldF9saXN0IChmeC0+d2lkZ2V0X2xpc3QsCgkJCQkJICAgICAgZXZlbnQtPnhtb3Rpb24u
eCwgCgkJCQkJICAgICAgZXZlbnQtPnhtb3Rpb24ueSwgZXZlbnQtPnhtb3Rpb24uc3RhdGUpOwoJ
ICAgIH0KCSAgfQoJfQoJICBicmVhazsKCSAgCgljYXNlIExlYXZlTm90aWZ5OgoJICBpZighKGZ4
LT53aWRnZXRfbGlzdCAmJiBmeC0+d2lkZ2V0X2xpc3QtPndpZGdldF9wcmVzc2VkICYmCgkgICAg
ICAgKGZ4LT53aWRnZXRfbGlzdC0+d2lkZ2V0X3ByZXNzZWQtPnR5cGUgJiBXSURHRVRfVFlQRV9N
QVNLKSA9PSBXSURHRVRfVFlQRV9TTElERVIpKQoJICAgIGV2ZW50LT54Y3Jvc3NpbmcueCA9IGV2
ZW50LT54Y3Jvc3NpbmcueSA9IC0xOyAvKiBTaW11bGF0ZSBtb3Zpbmcgb3V0IG9mIGFueSB3aWRn
ZXQgKi8KCSAgICAvKiBidXQgbGVhdmUgdGhlIGFjdHVhbCBjb29yZHMgZm9yIGFuIGFjdGl2ZSBz
bGlkZXIsIG90aGVyd2lzZSB0aGUgc2xpZGVyIG1heSBqdW1wICovCgkgIC8qIGZhbGwgdGhyb3Vn
aCAqLwoJY2FzZSBFbnRlck5vdGlmeToKCSAgaWYoZngtPndpZGdldF9saXN0KQoJICAgIGlmKGV2
ZW50LT54Y3Jvc3NpbmcubW9kZSA9PSBOb3RpZnlOb3JtYWwpIC8qIFB0ci4gbW92ZWQgcmVsLiB0
byB3aW4uLCBub3QgKHVuKWdyYWIgKi8KCSAgICAgIHhpdGtfbW90aW9uX25vdGlmeV93aWRnZXRf
bGlzdCAoZngtPndpZGdldF9saXN0LAoJCQkJCSAgICAgIGV2ZW50LT54Y3Jvc3NpbmcueCwKCQkJ
CQkgICAgICBldmVudC0+eGNyb3NzaW5nLnksIGV2ZW50LT54Y3Jvc3Npbmcuc3RhdGUpOwoJICBi
cmVhazsKCSAgCgljYXNlIEJ1dHRvblByZXNzOiB7CgkgIFhXaW5kb3dBdHRyaWJ1dGVzICAgd2F0
dHI7CgkgIFN0YXR1cyAgICAgICAgICAgICAgc3RhdHVzOwoKCSAgeGl0a190aXBzX2hpZGVfdGlw
cygpOwoJICAKCSAgWExPQ0soZ1hpdGstPmRpc3BsYXkpOwoJICBzdGF0dXMgPSBYR2V0V2luZG93
QXR0cmlidXRlcyhnWGl0ay0+ZGlzcGxheSwgZngtPndpbmRvdywgJndhdHRyKTsKCSAgLyogCgkg
ICAqIEdpdmUgZm9jdXMgKGFuZCByYWlzZSkgdG8gd2luZG93IGFmdGVyIGNsaWNrCgkgICAqIGlm
IGl0J3Mgdmlld2FibGUgKGUuZy4gbm90IGljb25pZmllZCkuCgkgICAqLwoJICBpZigoc3RhdHVz
ICE9IEJhZERyYXdhYmxlKSAmJiAoc3RhdHVzICE9IEJhZFdpbmRvdykgCgkgICAgICYmICh3YXR0
ci5tYXBfc3RhdGUgPT0gSXNWaWV3YWJsZSkpIHsKCSAgICBYUmFpc2VXaW5kb3coZ1hpdGstPmRp
c3BsYXksIGZ4LT53aW5kb3cpOwoJICAgIFhTZXRJbnB1dEZvY3VzKGdYaXRrLT5kaXNwbGF5LCBm
eC0+d2luZG93LCBSZXZlcnRUb1BhcmVudCwgQ3VycmVudFRpbWUpOwoJICB9CgkgIFhVTkxPQ0so
Z1hpdGstPmRpc3BsYXkpOwoJICAKCSAgaWYoZ1hpdGstPm1lbnUgJiYgCgkgICAgICgoZngtPndp
ZGdldF9saXN0ICYmIAoJICAgICAgICgoIWZ4LT53aWRnZXRfbGlzdC0+d2lkZ2V0X2ZvY3VzZWQp
IHx8IAoJCSghKGZ4LT53aWRnZXRfbGlzdC0+d2lkZ2V0X2ZvY3VzZWQtPnR5cGUgJiBXSURHRVRf
R1JPVVBfTUVOVSkpKSkgfHwKCSAgICAgICghZngtPndpZGdldF9saXN0KSkpICB7CgoJICAgIHhp
dGtfc2V0X2N1cnJlbnRfbWVudShOVUxMKTsKCgkgICAgRlhVTkxPQ0soZngpOwoJICAgIHJldHVy
bjsKCSAgfQoJICAKCSAgaWYoZngtPndpZGdldF9saXN0KSB7CgoJICAgIGZ4LT5tb3ZlLmVuYWJs
ZWQgPSAheGl0a19jbGlja19ub3RpZnlfd2lkZ2V0X2xpc3QgKGZ4LT53aWRnZXRfbGlzdCwgCgkJ
CQkJCQkgICAgICAgZXZlbnQtPnhidXR0b24ueCwgCgkJCQkJCQkgICAgICAgZXZlbnQtPnhidXR0
b24ueSwgCgkJCQkJCQkgICAgICAgZXZlbnQtPnhidXR0b24uYnV0dG9uLCAwKTsKCSAgICBpZihl
dmVudC0+eGJ1dHRvbi5idXR0b24gIT0gQnV0dG9uMSkgewoJICAgICAgeGl0a193aWRnZXRfdCAq
dyA9IGZ4LT53aWRnZXRfbGlzdC0+d2lkZ2V0X2ZvY3VzZWQ7CgoJICAgICAgZngtPm1vdmUuZW5h
YmxlZCA9IDA7CgkgICAgICAKCSAgICAgIGlmKHcgJiYgKCh3LT50eXBlICYgV0lER0VUX0dST1VQ
X01BU0spICYgV0lER0VUX0dST1VQX0JST1dTRVIpKSB7CgkJeGl0a193aWRnZXRfdCAqYiA9IHhp
dGtfYnJvd3Nlcl9nZXRfYnJvd3Nlcih3KTsKCQkKCQlpZihiKSB7CgkJICAKCQkgIGlmKGV2ZW50
LT54YnV0dG9uLmJ1dHRvbiA9PSBCdXR0b240KSB7CgkJICAgIHhpdGtfYnJvd3Nlcl9zdGVwX2Rv
d24oYiwgTlVMTCk7CgkJICB9CgkJICBlbHNlIGlmKGV2ZW50LT54YnV0dG9uLmJ1dHRvbiA9PSBC
dXR0b241KSB7CgkJICAgIHhpdGtfYnJvd3Nlcl9zdGVwX3VwKGIsIE5VTEwpOwoJCSAgfQoJCSAg
CgkJfQoJICAgICAgfQoJICAgIH0KCgkgICAgaWYoZngtPm1vdmUuZW5hYmxlZCkgewoJICAgICAg
WFdpbmRvd0F0dHJpYnV0ZXMgd2F0dHI7CgkgICAgICBTdGF0dXMgICAgICAgICAgICBlcnI7CgoJ
ICAgICAgWExPQ0soZ1hpdGstPmRpc3BsYXkpOwoJICAgICAgZXJyID0gWEdldFdpbmRvd0F0dHJp
YnV0ZXMoZ1hpdGstPmRpc3BsYXksIGZ4LT53aW5kb3csICZ3YXR0cik7CgkgICAgICBYVU5MT0NL
KGdYaXRrLT5kaXNwbGF5KTsKCgkgICAgICBpZihlcnIgIT0gQmFkRHJhd2FibGUgJiYgZXJyICE9
IEJhZFdpbmRvdykgewoJCQoJCWZ4LT5vbGRfcG9zLnggPSBldmVudC0+eG1vdGlvbi54X3Jvb3Qg
LSBldmVudC0+eGJ1dHRvbi54OwoJCWZ4LT5vbGRfcG9zLnkgPSBldmVudC0+eG1vdGlvbi55X3Jv
b3QgLSBldmVudC0+eGJ1dHRvbi55OwoKCSAgICAgIH0KCSAgICAgIAoJICAgICAgZngtPm1vdmUu
b2Zmc2V0X3ggPSBldmVudC0+eGJ1dHRvbi54OwoJICAgICAgZngtPm1vdmUub2Zmc2V0X3kgPSBl
dmVudC0+eGJ1dHRvbi55OwoKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoJICAKCWNhc2UgQnV0dG9u
UmVsZWFzZToKCgkgIHhpdGtfdGlwc19oaWRlX3RpcHMoKTsKCSAgCgkgIGlmKGZ4LT5tb3ZlLmVu
YWJsZWQpIHsKCgkgICAgZngtPm1vdmUuZW5hYmxlZCA9IDA7CgkgICAgLyogSW5mb3JtIGFwcGxp
Y2F0aW9uIGFib3V0IHdpbmRvdyBtb3ZlbWVudC4gKi8KCgkgICAgaWYoZngtPm5ld3Bvc19jYWxs
YmFjaykKCSAgICAgIGZ4LT5uZXdwb3NfY2FsbGJhY2soZngtPm5ld19wb3MueCwgZngtPm5ld19w
b3MueSwgCgkJCQkgIGZ4LT53aWR0aCwgZngtPmhlaWdodCk7CgkgIH0KCSAgZWxzZSB7CgkgICAg
aWYoZngtPndpZGdldF9saXN0KSB7CgkgICAgICB4aXRrX2NsaWNrX25vdGlmeV93aWRnZXRfbGlz
dCAoZngtPndpZGdldF9saXN0LCAKCQkJCQkgICAgIGV2ZW50LT54YnV0dG9uLngsIGV2ZW50LT54
YnV0dG9uLnksCgkJCQkJICAgICBldmVudC0+eGJ1dHRvbi5idXR0b24sIDEpOwoJICAgIH0KCSAg
fQoJICBicmVhazsKCSAgCgljYXNlIENvbmZpZ3VyZU5vdGlmeTogewoJICBYV2luZG93QXR0cmli
dXRlcyB3YXR0cjsKCSAgU3RhdHVzICAgICAgICAgICAgZXJyOwoKCSAgaWYoZngtPndpZGdldF9s
aXN0ICYmIGZ4LT53aWRnZXRfbGlzdC0+bCkgewoJICAgIHhpdGtfd2lkZ2V0X3QgKncgPSAoeGl0
a193aWRnZXRfdCAqKSB4aXRrX2xpc3RfZmlyc3RfY29udGVudChmeC0+d2lkZ2V0X2xpc3QtPmwp
OwoJICAgIHdoaWxlICh3KSB7CgkgICAgICBpZigoKHctPnR5cGUgJiBXSURHRVRfR1JPVVBfTUFT
SykgJiBXSURHRVRfR1JPVVBfQ09NQk8pICYmCgkJICh3LT50eXBlICYgV0lER0VUX0dST1VQX1dJ
REdFVCkpIHsKCQl4aXRrX2NvbWJvX3VwZGF0ZV9wb3Modyk7CgkgICAgICB9CgkgICAgICB3ID0g
KHhpdGtfd2lkZ2V0X3QgKikgeGl0a19saXN0X25leHRfY29udGVudCAoZngtPndpZGdldF9saXN0
LT5sKTsKCSAgICB9CgkgIH0KCgkgIC8qIEluZm9ybSBhcHBsaWNhdGlvbiBhYm91dCB3aW5kb3cg
bW92ZW1lbnQuICovCgkgIGlmKGZ4LT5uZXdwb3NfY2FsbGJhY2spIHsKCgkgICAgWExPQ0soZ1hp
dGstPmRpc3BsYXkpOwoJICAgIGVyciA9IFhHZXRXaW5kb3dBdHRyaWJ1dGVzKGdYaXRrLT5kaXNw
bGF5LCBmeC0+d2luZG93LCAmd2F0dHIpOwoJICAgIFhVTkxPQ0soZ1hpdGstPmRpc3BsYXkpOwoK
CSAgICBpZihlcnIgIT0gQmFkRHJhd2FibGUgJiYgZXJyICE9IEJhZFdpbmRvdykgewoJICAgICAg
ZngtPndpZHRoID0gd2F0dHIud2lkdGg7CgkgICAgICBmeC0+aGVpZ2h0ID0gd2F0dHIuaGVpZ2h0
OwoJICAgIH0KCSAgICBmeC0+bmV3cG9zX2NhbGxiYWNrKGV2ZW50LT54Y29uZmlndXJlLngsCgkJ
CQlldmVudC0+eGNvbmZpZ3VyZS55LAoJCQkJZngtPndpZHRoLCBmeC0+aGVpZ2h0KTsKCSAgfQoJ
fQoJYnJlYWs7CgoJY2FzZSBTZWxlY3Rpb25Ob3RpZnk6CgljYXNlIENsaWVudE1lc3NhZ2U6Cgkg
IGlmKGZ4LT54ZG5kKQoJICAgIHhpdGtfcHJvY2Vzc19jbGllbnRfZG5kX21lc3NhZ2UoZngtPnhk
bmQsIGV2ZW50KTsKCSAgYnJlYWs7Cgl9CgkKCWlmKGZ4LT54ZXZlbnRfY2FsbGJhY2spIHsKCSAg
ZngtPnhldmVudF9jYWxsYmFjayhldmVudCwgZngtPnVzZXJfZGF0YSk7Cgl9CiAgICAgIH0KICAg
IH0KICAgIAogICAgZnhkID0gZng7CiAgICBmeCA9IChfX2dmeF90ICopIHhpdGtfbGlzdF9uZXh0
X2NvbnRlbnQoZ1hpdGstPmdmeCk7CgogICAgaWYoZnhkLT5kZXN0cm95KQogICAgICBfX2Z4X2Rl
c3Ryb3koZnhkLCAwKTsKICAgIGVsc2UKICAgICAgRlhVTkxPQ0soZnhkKTsKICAgIAojd2Fybmlu
ZyBGSVhNRQogICAgaWYoZ1hpdGstPm1vZGFsdyAhPSBOb25lKSB7CgogICAgICAvKiBGbHVzaCBy
ZW1haW4gZnhzICovCiAgICAgIHdoaWxlKGZ4ICYmIChmeC0+d2luZG93ICE9IGdYaXRrLT5tb2Rh
bHcpKSB7CglGWExPQ0soZngpOwoJCglpZihmeC0+eGV2ZW50X2NhbGxiYWNrICYmIChmeC0+d2lu
ZG93ICE9IE5vbmUgJiYgZXZlbnQtPnR5cGUgIT0gS2V5UmVsZWFzZSkpCgkgIGZ4LT54ZXZlbnRf
Y2FsbGJhY2soZXZlbnQsIGZ4LT51c2VyX2RhdGEpOwoJCglmeGQgPSBmeDsKCWZ4ID0gKF9fZ2Z4
X3QgKikgeGl0a19saXN0X25leHRfY29udGVudChnWGl0ay0+Z2Z4KTsKCglpZihmeGQtPmRlc3Ry
b3kpCgkgIF9fZnhfZGVzdHJveShmeGQsIDApOwoJZWxzZQoJICBGWFVOTE9DSyhmeGQpOwogICAg
ICB9CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZihmeCkKICAgICAgRlhMT0NLKGZ4KTsKICB9
Cn0KCi8qCiAqIEluaXRpYXRpemF0aW9uIG9mIHdpZGdldCBpbnRlcm5hbHMuCiAqLwp2b2lkIHhp
dGtfaW5pdChEaXNwbGF5ICpkaXNwbGF5LCBYQ29sb3IgYmxhY2ssIGludCB2ZXJib3NpdHkpIHsK
ICBjaGFyIGJ1ZmZlclsyNTZdOwogIAogIHhpdGtfcGlkID0gZ2V0cHBpZCgpOwoKI2lmZGVmIEVO
QUJMRV9OTFMKICBiaW5kdGV4dGRvbWFpbigieGl0ayIsIFhJVEtfTE9DQUxFKTsKI2VuZGlmICAK
CiAgZ1hpdGsgPSAoX194aXRrX3QgKikgeGl0a194bWFsbG9jKHNpemVvZihfX3hpdGtfdCkpOwoK
ICBnWGl0ay0+YmxhY2sgICAgICAgICAgID0gYmxhY2s7CiAgZ1hpdGstPmRpc3BsYXlfd2lkdGgg
ICA9IERpc3BsYXlXaWR0aChkaXNwbGF5LCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpKTsKICBnWGl0
ay0+ZGlzcGxheV9oZWlnaHQgID0gRGlzcGxheUhlaWdodChkaXNwbGF5LCBEZWZhdWx0U2NyZWVu
KGRpc3BsYXkpKTsKICBnWGl0ay0+dmVyYm9zaXR5ICAgICAgID0gdmVyYm9zaXR5OwogIGdYaXRr
LT5saXN0ICAgICAgICAgICAgPSB4aXRrX2xpc3RfbmV3KCk7CiAgZ1hpdGstPmdmeCAgICAgICAg
ICAgICA9IHhpdGtfbGlzdF9uZXcoKTsKICBnWGl0ay0+ZGlzcGxheSAgICAgICAgID0gZGlzcGxh
eTsKICBnWGl0ay0+a2V5ICAgICAgICAgICAgID0gMDsKICBnWGl0ay0+c2lnX2NhbGxiYWNrICAg
ID0gTlVMTDsKICBnWGl0ay0+c2lnX2RhdGEgICAgICAgID0gTlVMTDsKICBnWGl0ay0+Y29uZmln
ICAgICAgICAgID0geGl0a19jb25maWdfaW5pdCgpOwogIGdYaXRrLT51c2VfeHNobSAgICAgICAg
PSAoeGl0a19jb25maWdfZ2V0X3NobV9mZWF0dXJlKGdYaXRrLT5jb25maWcpKSA/ICh4aXRrX2No
ZWNrX3hzaG0oZGlzcGxheSkpIDogMDsKICB4aXRrX3hfZXJyb3IgICAgICAgICAgID0gMDsKICBn
WGl0ay0+eF9lcnJvcl9oYW5kbGVyID0gTlVMTDsKICBnWGl0ay0+bW9kYWx3ICAgICAgICAgID0g
Tm9uZTsKICBnWGl0ay0+aWdub3JlX2tleXNbMF0gID0gWEtleXN5bVRvS2V5Y29kZShkaXNwbGF5
LCBYS19TaGlmdF9MKTsKICBnWGl0ay0+aWdub3JlX2tleXNbMV0gID0gWEtleXN5bVRvS2V5Y29k
ZShkaXNwbGF5LCBYS19Db250cm9sX0wpOwogIGdYaXRrLT50aXBzX3RpbWVvdXQgICAgPSBUSVBT
X1RJTUVPVVQ7CiAgWEdldElucHV0Rm9jdXMoZGlzcGxheSwgJihnWGl0ay0+cGFyZW50LndpbmRv
dyksICYoZ1hpdGstPnBhcmVudC5mb2N1cykpOwoKICBtZW1zZXQoJmdYaXRrLT5rZXlwcmVzcywg
MCwgc2l6ZW9mKGdYaXRrLT5rZXlwcmVzcykpOwoKICBwdGhyZWFkX211dGV4X2luaXQgKCZnWGl0
ay0+bXV0ZXgsIE5VTEwpOwogIAogIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIt
WyB4aVRLIHZlcnNpb24gJWQuJWQuJWQgIiwgWElUS19NQUpPUl9WRVJTSU9OLCBYSVRLX01JTk9S
X1ZFUlNJT04sIFhJVEtfU1VCX1ZFUlNJT04pOwogIAogIC8qIENoZWNrIGlmIFNITSBpcyB3b3Jr
aW5nICovCiNpZmRlZiBIQVZFX1NITQogIGlmKGdYaXRrLT51c2VfeHNobSkgewogICAgWEltYWdl
ICAgICAgICAgICAgICp4aW07CiAgICBYU2htU2VnbWVudEluZm8gICAgIHNobWluZm87CiAgICAK
ICAgIHhpbSA9IFhTaG1DcmVhdGVJbWFnZShkaXNwbGF5LCAKCQkJICAoRGVmYXVsdFZpc3VhbChk
aXNwbGF5LCAoRGVmYXVsdFNjcmVlbihkaXNwbGF5KSkpKSwgCgkJCSAgKERlZmF1bHREZXB0aChk
aXNwbGF5LCAoRGVmYXVsdFNjcmVlbihkaXNwbGF5KSkpKSwKCQkJICBaUGl4bWFwLCBOVUxMLCAm
c2htaW5mbywgMTAsIDEwKTsKICAgIGlmKCF4aW0pCiAgICAgIGdYaXRrLT51c2VfeHNobSA9IDA7
CiAgICBlbHNlIHsKICAgICAgc2htaW5mby5zaG1pZCA9IHNobWdldChJUENfUFJJVkFURSwgeGlt
LT5ieXRlc19wZXJfbGluZSAqIHhpbS0+aGVpZ2h0LCBJUENfQ1JFQVQgfCAwNzc3KTsKICAgICAg
aWYoc2htaW5mby5zaG1pZCA8IDApIHsKCVhEZXN0cm95SW1hZ2UoeGltKTsKCWdYaXRrLT51c2Vf
eHNobSA9IDA7CiAgICAgIH0KICAgICAgZWxzZSB7CglzaG1pbmZvLnNobWFkZHIgPSB4aW0tPmRh
dGEgPSAgc2htYXQoc2htaW5mby5zaG1pZCwgMCwgMCk7CglpZihzaG1pbmZvLnNobWFkZHIgPT0g
KGNoYXIgKikgLTEpIHsKCSAgWERlc3Ryb3lJbWFnZSh4aW0pOwoJICBnWGl0ay0+dXNlX3hzaG0g
PSAwOwoJfQoJZWxzZSB7CgkgIHNobWluZm8ucmVhZE9ubHkgPSBGYWxzZTsKCSAgCgkgIHhpdGtf
eF9lcnJvciA9IDA7CgkgIHhpdGtfaW5zdGFsbF94X2Vycm9yX2hhbmRsZXIoKTsKCSAgCgkgIFhT
aG1BdHRhY2goZGlzcGxheSwgJnNobWluZm8pOwoJICBYU3luYyhkaXNwbGF5LCBGYWxzZSk7Cgkg
IGlmKHhpdGtfeF9lcnJvcikKCSAgICBnWGl0ay0+dXNlX3hzaG0gPSAwOwoJICBlbHNlIHsKCSAg
ICBYU2htRGV0YWNoKGRpc3BsYXksICZzaG1pbmZvKTsKCSAgICBzdHJsY2F0KGJ1ZmZlciwgIltY
U2htXSIsIHNpemVvZihidWZmZXIpKTsKCSAgfQoJICAKCSAgWERlc3Ryb3lJbWFnZSh4aW0pOwoJ
ICBzaG1kdChzaG1pbmZvLnNobWFkZHIpOwoKCSAgeGl0a191bmluc3RhbGxfeF9lcnJvcl9oYW5k
bGVyKCk7CgkgIHhpdGtfeF9lcnJvciA9IDA7Cgl9CglzaG1jdGwoc2htaW5mby5zaG1pZCwgSVBD
X1JNSUQsIDApOwogICAgICB9CiAgICB9CiAgfQojZW5kaWYKCiNpZmRlZiBXSVRIX1hGVAogIHN0
cmxjYXQoYnVmZmVyLCAiW1hGVF0iLCBzaXplb2YoYnVmZmVyKSk7CiNlbGlmIGRlZmluZWQoV0lU
SF9YTUIpCiAgc3RybGNhdChidWZmZXIsICJbWE1CXSIsIHNpemVvZihidWZmZXIpKTsKI2VuZGlm
CiAgCiAgc3RybGNhdChidWZmZXIsICIgXS0iLCBzaXplb2YoYnVmZmVyKSk7CgogIGlmKHZlcmJv
c2l0eSkKICAgIHByaW50ZigiJXMiLCBidWZmZXIpOwoKICBnWGl0ay0+d21fdHlwZSA9IHhpdGtf
Y2hlY2tfd20oZGlzcGxheSk7CiAgCiAgLyogaW5pdCBmb250IGNhY2hpbmcgKi8KICB4aXRrX2Zv
bnRfY2FjaGVfaW5pdCgpOwogIAogIHhpdGtfY3Vyc29yc19pbml0KGRpc3BsYXkpOwogIHhpdGtf
dGlwc19pbml0KGRpc3BsYXkpOwp9CgovKgogKiBTdGFydCB3aWRnZXQgZXZlbnQgaGFuZGxpbmcu
CiAqIEl0IHdpbGwgYmxvY2sgdGlsbCB3aWRnZXRfc3RvcCgpIGNhbGwKICovCnZvaWQgeGl0a19y
dW4oeGl0a19zdGFydHVwX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmRhdGEpIHsKICBYRXZlbnQgICAg
ICAgICAgICBteWV2ZW50OwogIHN0cnVjdCBzaWdhY3Rpb24gIGFjdGlvbjsKICBmZF9zZXQgICAg
ICAgICAgICByOwogIEJvb2wgICAgICAgICAgICAgIGdvdF9ldmVudDsKICBfX2dmeF90ICAgICAg
ICAgICpmeDsKICBzdHJ1Y3QgdGltZXZhbCAgICB0djsKICBpbnQgICAgICAgICAgICAgICB4Y29u
bmVjdGlvbjsKCiAgYWN0aW9uLnNhX2hhbmRsZXIgPSB4aXRrX3NpZ25hbF9oYW5kbGVyOwogIHNp
Z2VtcHR5c2V0KCYoYWN0aW9uLnNhX21hc2spKTsKICBhY3Rpb24uc2FfZmxhZ3MgPSAwOwogIGlm
KHNpZ2FjdGlvbihTSUdIVVAsICZhY3Rpb24sIE5VTEwpICE9IDApIHsKICAgIFhJVEtfV0FSTklO
Rygic2lnYWN0aW9uKFNJR0hVUCkgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKICB9
CiAgYWN0aW9uLnNhX2hhbmRsZXIgPSB4aXRrX3NpZ25hbF9oYW5kbGVyOwogIHNpZ2VtcHR5c2V0
KCYoYWN0aW9uLnNhX21hc2spKTsKICBhY3Rpb24uc2FfZmxhZ3MgPSAwOwogIGlmKHNpZ2FjdGlv
bihTSUdVU1IxLCAmYWN0aW9uLCBOVUxMKSAhPSAwKSB7CiAgICBYSVRLX1dBUk5JTkcoInNpZ2Fj
dGlvbihTSUdVU1IxKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwogIH0KICBhY3Rp
b24uc2FfaGFuZGxlciA9IHhpdGtfc2lnbmFsX2hhbmRsZXI7CiAgc2lnZW1wdHlzZXQoJihhY3Rp
b24uc2FfbWFzaykpOwogIGFjdGlvbi5zYV9mbGFncyA9IDA7CiAgaWYoc2lnYWN0aW9uKFNJR1VT
UjIsICZhY3Rpb24sIE5VTEwpICE9IDApIHsKICAgIFhJVEtfV0FSTklORygic2lnYWN0aW9uKFNJ
R1VTUjIpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CiAgfQogIGFjdGlvbi5zYV9o
YW5kbGVyID0geGl0a19zaWduYWxfaGFuZGxlcjsKICBzaWdlbXB0eXNldCgmKGFjdGlvbi5zYV9t
YXNrKSk7CiAgYWN0aW9uLnNhX2ZsYWdzID0gMDsKICBpZihzaWdhY3Rpb24oU0lHSU5ULCAmYWN0
aW9uLCBOVUxMKSAhPSAwKSB7CiAgICBYSVRLX1dBUk5JTkcoInNpZ2FjdGlvbihTSUdJTlQpIGZh
aWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CiAgfQogIGFjdGlvbi5zYV9oYW5kbGVyID0g
eGl0a19zaWduYWxfaGFuZGxlcjsKICBzaWdlbXB0eXNldCgmKGFjdGlvbi5zYV9tYXNrKSk7CiAg
YWN0aW9uLnNhX2ZsYWdzID0gMDsKICBpZihzaWdhY3Rpb24oU0lHVEVSTSwgJmFjdGlvbiwgTlVM
TCkgIT0gMCkgewogICAgWElUS19XQVJOSU5HKCJzaWdhY3Rpb24oU0lHVEVSTSkgZmFpbGVkOiAl
c1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKICB9CiAgYWN0aW9uLnNhX2hhbmRsZXIgPSB4aXRrX3Np
Z25hbF9oYW5kbGVyOwogIHNpZ2VtcHR5c2V0KCYoYWN0aW9uLnNhX21hc2spKTsKICBhY3Rpb24u
c2FfZmxhZ3MgPSAwOwogIGlmKHNpZ2FjdGlvbihTSUdRVUlULCAmYWN0aW9uLCBOVUxMKSAhPSAw
KSB7CiAgICBYSVRLX1dBUk5JTkcoInNpZ2FjdGlvbihTSUdRVUlUKSBmYWlsZWQ6ICVzXG4iLCBz
dHJlcnJvcihlcnJubykpOwogIH0KI2lmbmRlZiBERUJVRwogIGFjdGlvbi5zYV9oYW5kbGVyID0g
eGl0a19zaWduYWxfaGFuZGxlcjsKICBzaWdlbXB0eXNldCgmKGFjdGlvbi5zYV9tYXNrKSk7CiAg
YWN0aW9uLnNhX2ZsYWdzID0gMDsKICBpZihzaWdhY3Rpb24oU0lHU0VHViwgJmFjdGlvbiwgTlVM
TCkgIT0gMCkgewogICAgWElUS19XQVJOSU5HKCJzaWdhY3Rpb24oU0lHU0VHVikgZmFpbGVkOiAl
c1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKICB9CiNlbmRpZiAgCiAgZ1hpdGstPnJ1bm5pbmcgPSAx
OwogIAogIFhMT0NLKGdYaXRrLT5kaXNwbGF5KTsKICBYU3luYyhnWGl0ay0+ZGlzcGxheSwgVHJ1
ZSk7IC8qIEZsdXNoaW5nIHRoZSB0b2lsZXRzICovCiAgWFVOTE9DSyhnWGl0ay0+ZGlzcGxheSk7
CgogIC8qCiAgICogRm9yY2UgdG8gcmVwYWluIHRoZSB3aWRnZXQgbGlzdCBpZiBpdCBleGlzdAog
ICAqLwogIE1VVExPQ0soKTsKICAKICBmeCA9IChfX2dmeF90ICopIHhpdGtfbGlzdF9maXJzdF9j
b250ZW50KGdYaXRrLT5nZngpOwogIAogIHdoaWxlKGZ4KSB7CiAgICBGWExPQ0soZngpOwogICAK
ICAgIGlmKGZ4LT53aW5kb3cgIT0gTm9uZSAmJiBmeC0+d2lkZ2V0X2xpc3QpIHsKICAgICAgWEV2
ZW50IHhleHA7CgogICAgICBtZW1zZXQoJnhleHAsIDAsIHNpemVvZiB4ZXhwKTsKICAgICAgeGV4
cC54YW55LnR5cGUgICAgICAgICAgPSBFeHBvc2U7CiAgICAgIHhleHAueGV4cG9zZS50eXBlICAg
ICAgID0gRXhwb3NlOwogICAgICB4ZXhwLnhleHBvc2Uuc2VuZF9ldmVudCA9IFRydWU7CiAgICAg
IHhleHAueGV4cG9zZS5kaXNwbGF5ICAgID0gZ1hpdGstPmRpc3BsYXk7CiAgICAgIHhleHAueGV4
cG9zZS53aW5kb3cgICAgID0gZngtPndpbmRvdzsKICAgICAgeGV4cC54ZXhwb3NlLmNvdW50ICAg
ICAgPSAwOwogICAgICAKICAgICAgWExPQ0soZ1hpdGstPmRpc3BsYXkpOwogICAgICBpZighWFNl
bmRFdmVudChnWGl0ay0+ZGlzcGxheSwgZngtPndpbmRvdywgRmFsc2UsIEV4cG9zdXJlTWFzaywg
JnhleHApKSB7CglYSVRLX1dBUk5JTkcoIlhTZW5kRXZlbnQoZGlzcGxheSwgMHgleCAuLi4pIGZh
aWxlZC5cbiIsICh1bnNpZ25lZCBpbnQpIGZ4LT53aW5kb3cpOwogICAgICB9CiAgICAgIFhVTkxP
Q0soZ1hpdGstPmRpc3BsYXkpOwogICAgfQoKICAgIEZYVU5MT0NLKGZ4KTsKICAgIGZ4ID0gKF9f
Z2Z4X3QgKikgeGl0a19saXN0X25leHRfY29udGVudChnWGl0ay0+Z2Z4KTsKICB9CgogIE1VVFVO
TE9DSygpOwoKICAvKiBXZSdyZSByZWFkeSB0byBoYW5kbGUgYW55dGhpbmcgKi8KICBpZihjYikK
ICAgIGNiKGRhdGEpOwoKICBYTE9DSyhnWGl0ay0+ZGlzcGxheSk7CiAgeGNvbm5lY3Rpb24gPSBD
b25uZWN0aW9uTnVtYmVyKGdYaXRrLT5kaXNwbGF5KTsKICBYVU5MT0NLKGdYaXRrLT5kaXNwbGF5
KTsKICAKICAvKgogICAqIE5vdywgd2FpdCBmb3IgYSBuZXcgeGV2ZW50CiAgICovCiAgd2hpbGUo
Z1hpdGstPnJ1bm5pbmcpIHsKICAgIAogICAgRkRfWkVSTygmcik7CiAgICBGRF9TRVQoeGNvbm5l
Y3Rpb24sICZyKTsKCiAgICB0di50dl9zZWMgID0gMDsKICAgIHR2LnR2X3VzZWMgPSAzMzAwMDsK
CiAgICBzZWxlY3QoeGNvbm5lY3Rpb24gKyAxLCAmciwgMCwgMCwgJnR2KTsKICAgIAogICAgWExP
Q0soZ1hpdGstPmRpc3BsYXkpOwogICAgZ290X2V2ZW50ID0gKFhQZW5kaW5nKGdYaXRrLT5kaXNw
bGF5KSAhPSAwKTsKICAgIGlmKCBnb3RfZXZlbnQgKQogICAgICBYTmV4dEV2ZW50KGdYaXRrLT5k
aXNwbGF5LCAmbXlldmVudCk7CiAgICBYVU5MT0NLKGdYaXRrLT5kaXNwbGF5KTsKICAgICAgCiAg
ICB3aGlsZShnb3RfZXZlbnQgPT0gVHJ1ZSkgewoKICAgICAgeGl0a194ZXZlbnRfbm90aWZ5KCZt
eWV2ZW50KTsKCiAgICAgIFhMT0NLKGdYaXRrLT5kaXNwbGF5KTsKICAgICAgZ290X2V2ZW50ID0g
KFhQZW5kaW5nKGdYaXRrLT5kaXNwbGF5KSAhPSAwKTsKICAgICAgaWYoIGdvdF9ldmVudCApCiAg
ICAgICAgWE5leHRFdmVudChnWGl0ay0+ZGlzcGxheSwgJm15ZXZlbnQpOwogICAgICBYVU5MT0NL
KGdYaXRrLT5kaXNwbGF5KTsKICAgIH0KCiAgfQoKICAvKiBkZXN0cm95IGZvbnQgY2FjaGluZyAq
LwogIHhpdGtfZm9udF9jYWNoZV9kb25lKCk7CiAgCiAgeGl0a19saXN0X2ZyZWUoZ1hpdGstPmxp
c3QpOwogIHhpdGtfbGlzdF9mcmVlKGdYaXRrLT5nZngpOwogIHhpdGtfY29uZmlnX2RlaW5pdChn
WGl0ay0+Y29uZmlnKTsKICAKICBYSVRLX0ZSRUUoZ1hpdGspOwoKfQoKLyoKICogU3RvcCB0aGUg
d2FpdCB4ZXZlbnQgbG9vcAogKi8Kdm9pZCB4aXRrX3N0b3Aodm9pZCkgewogIHhpdGtfdGlwc19k
ZWluaXQoKTsKICB4aXRrX2N1cnNvcnNfZGVpbml0KGdYaXRrLT5kaXNwbGF5KTsKICBnWGl0ay0+
cnVubmluZyA9IDA7CgogIGlmKGdYaXRrLT5wYXJlbnQud2luZG93ICE9IE5vbmUpCiAgICBYU2V0
SW5wdXRGb2N1cyhnWGl0ay0+ZGlzcGxheSwgZ1hpdGstPnBhcmVudC53aW5kb3csIGdYaXRrLT5w
YXJlbnQuZm9jdXMsIEN1cnJlbnRUaW1lKTsKfQogCmNoYXIgKnhpdGtfZ2V0X3N5c3RlbV9mb250
KHZvaWQpIHsKICByZXR1cm4geGl0a19jb25maWdfZ2V0X3N5c3RlbV9mb250KGdYaXRrLT5jb25m
aWcpOwp9CmNoYXIgKnhpdGtfZ2V0X2RlZmF1bHRfZm9udCh2b2lkKSB7CiAgcmV0dXJuIHhpdGtf
Y29uZmlnX2dldF9kZWZhdWx0X2ZvbnQoZ1hpdGstPmNvbmZpZyk7Cn0KaW50IHhpdGtfZ2V0X3ht
Yl9lbmFiaWxpdHkodm9pZCkgewogIHJldHVybiB4aXRrX2NvbmZpZ19nZXRfeG1iX2VuYWJpbGl0
eShnWGl0ay0+Y29uZmlnKTsKfQp2b2lkIHhpdGtfc2V0X3htYl9lbmFiaWxpdHkoaW50IHZhbHVl
KSB7CiAgeGl0a19jb25maWdfc2V0X3htYl9lbmFiaWxpdHkoZ1hpdGstPmNvbmZpZywgdmFsdWUp
Owp9CmludCB4aXRrX2dldF9ibGFja19jb2xvcih2b2lkKSB7CiAgcmV0dXJuIHhpdGtfY29uZmln
X2dldF9ibGFja19jb2xvcihnWGl0ay0+Y29uZmlnKTsKfQppbnQgeGl0a19nZXRfd2hpdGVfY29s
b3Iodm9pZCkgewogIHJldHVybiB4aXRrX2NvbmZpZ19nZXRfd2hpdGVfY29sb3IoZ1hpdGstPmNv
bmZpZyk7Cn0KaW50IHhpdGtfZ2V0X2JhY2tncm91bmRfY29sb3Iodm9pZCkgewogIHJldHVybiB4
aXRrX2NvbmZpZ19nZXRfYmFja2dyb3VuZF9jb2xvcihnWGl0ay0+Y29uZmlnKTsKfQppbnQgeGl0
a19nZXRfZm9jdXNfY29sb3Iodm9pZCkgewogIHJldHVybiB4aXRrX2NvbmZpZ19nZXRfZm9jdXNf
Y29sb3IoZ1hpdGstPmNvbmZpZyk7Cn0KaW50IHhpdGtfZ2V0X3NlbGVjdF9jb2xvcih2b2lkKSB7
CiAgcmV0dXJuIHhpdGtfY29uZmlnX2dldF9zZWxlY3RfY29sb3IoZ1hpdGstPmNvbmZpZyk7Cn0K
dW5zaWduZWQgbG9uZyB4aXRrX2dldF90aW1lcl9sYWJlbF9hbmltYXRpb24odm9pZCkgewogIHJl
dHVybiB4aXRrX2NvbmZpZ19nZXRfdGltZXJfbGFiZWxfYW5pbWF0aW9uKGdYaXRrLT5jb25maWcp
Owp9CnVuc2lnbmVkIGxvbmcgeGl0a19nZXRfd2FybmluZ19mb3JlZ3JvdW5kKHZvaWQpIHsKICBy
ZXR1cm4geGl0a19jb25maWdfZ2V0X3dhcm5pbmdfZm9yZWdyb3VuZChnWGl0ay0+Y29uZmlnKTsK
fQp1bnNpZ25lZCBsb25nIHhpdGtfZ2V0X3dhcm5pbmdfYmFja2dyb3VuZCh2b2lkKSB7CiAgcmV0
dXJuIHhpdGtfY29uZmlnX2dldF93YXJuaW5nX2JhY2tncm91bmQoZ1hpdGstPmNvbmZpZyk7Cn0K
bG9uZyBpbnQgeGl0a19nZXRfdGltZXJfZGJsX2NsaWNrKHZvaWQpIHsKICByZXR1cm4geGl0a19j
b25maWdfZ2V0X3RpbWVyX2RibF9jbGljayhnWGl0ay0+Y29uZmlnKTsKfQppbnQgeGl0a19nZXRf
YmFyc3R5bGVfZmVhdHVyZSh2b2lkKSB7CiAgcmV0dXJuIHhpdGtfY29uZmlnX2dldF9iYXJzdHls
ZV9mZWF0dXJlKGdYaXRrLT5jb25maWcpOwp9CmludCB4aXRrX2dldF9jaGVja3N0eWxlX2ZlYXR1
cmUodm9pZCkgewogIHJldHVybiB4aXRrX2NvbmZpZ19nZXRfY2hlY2tzdHlsZV9mZWF0dXJlKGdY
aXRrLT5jb25maWcpOwp9CmludCB4aXRrX2dldF9jdXJzb3JzX2ZlYXR1cmUodm9pZCkgewogIHJl
dHVybiB4aXRrX2NvbmZpZ19nZXRfY3Vyc29yc19mZWF0dXJlKGdYaXRrLT5jb25maWcpOwp9Cgpp
bnQgeGl0a19nZXRfbWVudV9zaG9ydGN1dHNfZW5hYmlsaXR5KHZvaWQpIHsKICByZXR1cm4geGl0
a19jb25maWdfZ2V0X21lbnVfc2hvcnRjdXRzX2VuYWJpbGl0eShnWGl0ay0+Y29uZmlnKTsKfQoK
aW50IHhpdGtfZ2V0X2Rpc3BsYXlfd2lkdGgodm9pZCkgewogIHJldHVybiBnWGl0ay0+ZGlzcGxh
eV93aWR0aDsKfQppbnQgeGl0a19nZXRfZGlzcGxheV9oZWlnaHQodm9pZCkgewogIHJldHVybiBn
WGl0ay0+ZGlzcGxheV9oZWlnaHQ7Cn0KWENvbG9yIHhpdGtfZ2V0X2JsYWNrX3BpeGVsX2NvbG9y
KHZvaWQpIHsKICByZXR1cm4gZ1hpdGstPmJsYWNrOwp9Cgp1bnNpZ25lZCBsb25nIHhpdGtfZ2V0
X3RpcHNfdGltZW91dCh2b2lkKSB7CiAgcmV0dXJuIGdYaXRrLT50aXBzX3RpbWVvdXQ7Cn0Kdm9p
ZCB4aXRrX3NldF90aXBzX3RpbWVvdXQodW5zaWduZWQgbG9uZyB0aW1lb3V0KSB7CiAgZ1hpdGst
PnRpcHNfdGltZW91dCA9IHRpbWVvdXQ7Cn0KCi8qCiAqIGNvcHkgc3JjIHRvIGRlc3QgYW5kIHN1
YnN0aXR1dGUgc3BlY2lhbCBjaGFycy4gZGVzdCBzaG91bGQgaGF2ZSAKICogZW5vdWdodCBzcGFj
ZSB0byBzdG9yZSBjaGFycy4KICovCnZvaWQgeGl0a19zdWJzdF9zcGVjaWFsX2NoYXJzKGNoYXIg
KnNyYywgY2hhciAqZGVzdCkgewogIGNoYXIgKnMsICpkOwogIAogIGlmKChzcmMgPT0gTlVMTCkg
fHwgKGRlc3QgPT0gTlVMTCkpIHsKICAgIFhJVEtfV0FSTklORygicGFzcyBOVUxMIGFyZ3VtZW50
KHMpXG4iKTsKICAgIHJldHVybjsKICB9CiAgCiAgaWYoIXN0cmxlbihzcmMpKQogICAgcmV0dXJu
OwoKICBtZW1zZXQoZGVzdCwgMCwgc2l6ZW9mKGRlc3QpKTsKICBzID0gc3JjOwogIGQgPSBkZXN0
OwogIHdoaWxlKCpzICE9ICdcMCcpIHsKICAgIAogICAgc3dpdGNoKCpzKSB7CiAgICBjYXNlICcl
JzoKICAgICAgaWYoKCoocykgPT0gJyUnKSAmJiAoKihzICsgMSkgIT0gJyUnKSkgewoJY2hhciAg
ICBidWZmZXJbNV0gPSB7ICcwJywgJ3gnLCAqKHMgKyAxKSAsICoocyArIDIpLCAwIH07CgljaGFy
ICAgKnAgICAgICAgICA9IGJ1ZmZlcjsKCWludCAgICAgY2hhcmFjdGVyID0gc3RydG9sKHAsICZw
LCAxNik7CgkKCSpkID0gY2hhcmFjdGVyOwoJcyArPSAyOwogICAgICB9CiAgICAgIGVsc2UgewoJ
KmQrKyA9ICclJzsKCSpkID0gJyUnOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgICAKICAgIGNh
c2UgJ34nOgogICAgICBpZigqKHMgKyAxKSA9PSAnLycpIHsKCXN0cmNhdChkLCB4aXRrX2dldF9o
b21lZGlyKCkpOwoJZCArPSAoc3RybGVuKHhpdGtfZ2V0X2hvbWVkaXIoKSkgLSAxKTsKICAgICAg
fSBlbHNlCiAgICAgICAgKmQgPSAqczsKICAgICAgYnJlYWs7CiAgICAgIAogICAgZGVmYXVsdDoK
ICAgICAgKmQgPSAqczsKICAgICAgYnJlYWs7CiAgICB9CiAgICBzKys7CiAgICBkKys7CiAgfQog
ICpkID0gJ1wwJzsKfQoKLyoKICoKICovCmNoYXIgKnhpdGtfc2V0X2xvY2FsZSh2b2lkKSB7CiAg
Y2hhciAqY3VyX2xvY2FsZSA9IE5VTEw7CiAgCiNpZmRlZiBIQVZFX1NFVExPQ0FMRQogIGlmKHNl
dGxvY2FsZSAoTENfQUxMLCIiKSA9PSBOVUxMKSB7CiAgICBYSVRLX1dBUk5JTkcoImxvY2FsZSBu
b3Qgc3VwcG9ydGVkIGJ5IEMgbGlicmFyeVxuIik7CiAgICByZXR1cm4gTlVMTDsKICB9CiAgCiAg
Y3VyX2xvY2FsZSA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwojZW5kaWYKICAKICByZXR1cm4g
Y3VyX2xvY2FsZTsKfQoKCi8qCiAqCiAqLwpsb25nIGludCB4aXRrX2dldF9sYXN0X2tleXByZXNz
ZWRfdGltZSh2b2lkKSB7CiAgc3RydWN0IHRpbWV2YWwgdG0sIHRtX2RpZmY7CiAgCiAgZ2V0dGlt
ZW9mZGF5KCZ0bSwgTlVMTCk7CiAgdGltZXJzdWIoJnRtLCAmZ1hpdGstPmtleXByZXNzLCAmdG1f
ZGlmZik7CiAgcmV0dXJuIHRtX2RpZmYudHZfc2VjOwp9CgovKgogKiBSZXR1cm4gaG9tZSBkaXJl
Y3RvcnkuCiAqLwpjb25zdCBjaGFyICp4aXRrX2dldF9ob21lZGlyKHZvaWQpIHsKI2lmZGVmIEhB
VkVfR0VUUFdVSURfUgogIHN0cnVjdCBwYXNzd2QgIHB3ZDsKI2VuZGlmCiAgc3RydWN0IHBhc3N3
ZCAqcHcgPSBOVUxMOwogIHN0YXRpYyBjaGFyICAgIGhvbWVkaXJbQlVGU0laXSA9IHswLH07Cgog
IGlmKGhvbWVkaXJbMF0pCiAgICByZXR1cm4gaG9tZWRpcjsKCiNpZmRlZiBIQVZFX0dFVFBXVUlE
X1IKICBpZihnZXRwd3VpZF9yKGdldHVpZCgpLCAmcHdkLCBob21lZGlyLCBzaXplb2YoaG9tZWRp
ciksICZwdykgIT0gMCB8fCBwdyA9PSBOVUxMKSB7CiNlbHNlCiAgaWYoKHB3ID0gZ2V0cHd1aWQo
Z2V0dWlkKCkpKSA9PSBOVUxMKSB7CiNlbmRpZgogICAgY2hhciAqdG1wID0gZ2V0ZW52KCJIT01F
Iik7CiAgICBpZih0bXApIHsKICAgICAgc3RybmNweShob21lZGlyLCB0bXAsIHNpemVvZihob21l
ZGlyKSk7CiAgICAgIGhvbWVkaXJbc2l6ZW9mKGhvbWVkaXIpIC0gMV0gPSAnXDAnOwogICAgfQog
IH0gZWxzZSB7CiAgICBjaGFyICpzID0gc3RyZHVwKHB3LT5wd19kaXIpOwogICAgc3RybmNweSho
b21lZGlyLCBzLCBzaXplb2YoaG9tZWRpcikpOwogICAgaG9tZWRpcltzaXplb2YoaG9tZWRpcikg
LSAxXSA9ICdcMCc7CiAgICBmcmVlKHMpOwogIH0KCiAgaWYoIWhvbWVkaXJbMF0pIHsKICAgIFhJ
VEtfV0FSTklORygiVW5hYmxlIHRvIGdldCBob21lIGRpcmVjdG9yeSwgc2V0IGl0IHRvIC90bXAu
XG4iKTsKICAgIHN0cmNweShob21lZGlyLCAiL3RtcCIpOwogIH0KCiAgcmV0dXJuIGhvbWVkaXI7
Cn0KCi8qCiAqIFJldHVybiAwLzEgZnJvbSBjaGFyIHZhbHVlICh2YWxpZHMgYXJlIDEvMCwgdHJ1
ZS9mYWxzZSwgCiAqIHllcy9ubywgb24vb2ZmLiBDYXNlIGlzbid0IGNoZWNrZWQuCiAqLwppbnQg
eGl0a19nZXRfYm9vbF92YWx1ZShjb25zdCBjaGFyICp2YWwpIHsKICBzdGF0aWMgc3RydWN0IHsK
ICAgIGNvbnN0IGNoYXIgKnN0cjsKICAgIGludCB2YWx1ZTsKICB9IGJvb2xzW10gPSB7CiAgICB7
ICIxIiwgICAgIDEgfSwgeyAidHJ1ZSIsICAxIH0sIHsgInllcyIsICAgMSB9LCB7ICJvbiIsICAg
IDEgfSwKICAgIHsgIjAiLCAgICAgMCB9LCB7ICJmYWxzZSIsIDAgfSwgeyAibm8iLCAgICAwIH0s
IHsgIm9mZiIsICAgMCB9LAogICAgeyBOVUxMLCAgICAwIH0KICB9OwogIGludCBpOwogIAogIEFC
T1JUX0lGX05VTEwodmFsKTsKCiAgZm9yKGkgPSAwOyBib29sc1tpXS5zdHIgIT0gTlVMTDsgaSsr
KSB7CiAgICBpZighKHN0cmNhc2VjbXAoYm9vbHNbaV0uc3RyLCB2YWwpKSkKICAgICAgcmV0dXJu
IGJvb2xzW2ldLnZhbHVlOwogIH0KCiAgcmV0dXJuIDA7Cn0K
</data>        

          </attachment>
    </bug>

</bugzilla>