public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c/6278: Internal compiler error
@ 2002-04-12 10:56 pierre
  0 siblings, 0 replies; 2+ messages in thread
From: pierre @ 2002-04-12 10:56 UTC (permalink / raw)
  To: gcc-gnats


>Number:         6278
>Category:       c
>Synopsis:       Internal compiler error
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Apr 12 10:56:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     pierre@epinetworx.com
>Release:        gcc 3.0.4
>Organization:
>Environment:
Linux Slackware 8.0 glibc 2.2.5
>Description:
I try to compile kdemultimedia-3.0 and i got this :

[...]
Making all in TIMIDITY
gmake[3]: Entering directory `/tmp/kdemultimedia-3.0/kmidi/TIMIDITY'
source='resample.c' object='resample.o' libtool=no \
depfile='.deps/resample.Po' tmpdepfile='.deps/resample.TPo' \
depmode=gcc3 /bin/sh ../../admin/depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I/usr/X11R6/include `/usr/local/kde/bin/artsc-config --cflags`  -DQT_THREAD_SUPPORT  -D_REENTRANT -DDEFAULT_PATH=\"//usr/local/kde/share/apps/kmidi/config\" -DAU_OSS  -DIA_XAW -DQT_THREAD_SUPPORT  -D_REENTRANT  -fasm -O2  -O3 -march=i686 -c `test -f resample.c || echo './'`resample.c
resample.c: In function `pre_resample':
resample.c:1298: Internal compiler error in print_rtl_and_abort, at flow.c:6458
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
gmake[3]: *** [resample.o] Error 1
gmake[3]: Leaving directory `/tmp/kdemultimedia-3.0/kmidi/TIMIDITY'
gmake[2]: *** [all-recursive] Error 1
gmake[2]: Leaving directory `/tmp/kdemultimedia-3.0/kmidi'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/tmp/kdemultimedia-3.0'
gmake: *** [all] Error 2

I attach you the file resample.c

>How-To-Repeat:
Compile kdemultimedia with gcc-3.0.4
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="resample.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="resample.c"

LyoKCSRJZDogcmVzYW1wbGUuY3BwLHYgMS4zIDIwMDEvMDQvMTIgMDk6MDk6MjMgZ2FyYmFuem8g
RXhwICQKCiAgICBUaU1pZGl0eSsrIC0tIE1JREkgdG8gV0FWRSBjb252ZXJ0ZXIgYW5kIHBsYXll
cgogICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hc2FuYW8gSXp1bW8gPG1vQGdvaWNlLmNvLmpwPgog
ICAgQ29weXJpZ2h0IChDKSAxOTk1IFR1dWtrYSBUb2l2b25lbiA8dHRAY2dzLmZpPgoKICAgIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBN
QSAwMjEzOSwgVVNBLgoKKi8KCiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRpby5oPgoj
aW5jbHVkZSA8c3RkbGliLmg+CgojaW5jbHVkZSAiY29uZmlnLmgiCiNpbmNsdWRlICJjb21tb24u
aCIKI2luY2x1ZGUgImluc3RydW0uaCIKI2luY2x1ZGUgInBsYXltaWRpLmgiCiNpbmNsdWRlICJv
dXRwdXQuaCIKI2luY2x1ZGUgImNvbnRyb2xzLmgiCiNpbmNsdWRlICJ0YWJsZXMuaCIKI2luY2x1
ZGUgInJlc2FtcGxlLmgiCgoKI2RlZmluZSBMSU5FQVJfSU5URVJQT0xBVElPTgojZGVmaW5lIENT
UExJTkVfSU5URVJQT0xBVElPTgojZGVmaW5lIEVOVkVMT1BFX1BJVENIX01PRFVMQVRJT04KCgoj
aWZkZWYgTE9PS1VQX0hBQ0sKI2RlZmluZSBNQVhfREFUQVZBTCAxMjcKI2RlZmluZSBNSU5fREFU
QVZBTCAtMTI4CiNlbHNlCiNkZWZpbmUgTUFYX0RBVEFWQUwgMzI3NjcKI2RlZmluZSBNSU5fREFU
QVZBTCAtMzI3NjgKI2VuZGlmCgojZGVmaW5lIE9WRVJTSE9PVF9TVEVQIDUwCgoKc2FtcGxlX3Qg
cmVzYW1wbGVfYnVmZmVyW0FVRElPX0JVRkZFUl9TSVpFKzEwMF07CnVpbnQzMiByZXNhbXBsZV9i
dWZmZXJfb2Zmc2V0ID0gMDsKCnN0YXRpYyBzYW1wbGVfdCAqdmliX3Jlc2FtcGxlX3ZvaWNlKGlu
dCwgdWludDMyICosIGludCk7CnN0YXRpYyBzYW1wbGVfdCAqbm9ybWFsX3Jlc2FtcGxlX3ZvaWNl
KGludCwgdWludDMyICosIGludCk7CgovKiBSZXR1cm5zIDEgaWYgZW52ZWxvcGUgcnVucyBvdXQg
Ki8KaW50IHJlY29tcHV0ZV9tb2R1bGF0aW9uKGludCB2KQp7CiAgaW50IHN0YWdlOwoKICBzdGFn
ZSA9IHZvaWNlW3ZdLm1vZHVsYXRpb25fc3RhZ2U7CgogIGlmIChzdGFnZT41KQogICAgewogICAg
ICAvKiBFbnZlbG9wZSByYW4gb3V0LiAqLwogICAgICB2b2ljZVt2XS5tb2R1bGF0aW9uX2luY3Jl
bWVudCA9IDA7CiAgICAgIHJldHVybiAxOwogICAgfQoKICBpZiAoKHZvaWNlW3ZdLnNhbXBsZS0+
bW9kZXMgJiBNT0RFU19FTlZFTE9QRSkgJiYgKHZvaWNlW3ZdLnNhbXBsZS0+bW9kZXMgJiBNT0RF
U19TVVNUQUlOKSkKICAgIHsKICAgICAgaWYgKHZvaWNlW3ZdLnN0YXR1cyAmIChWT0lDRV9PTiB8
IFZPSUNFX1NVU1RBSU5FRCkpCgl7CgkgIGlmIChzdGFnZT4yKQoJICAgIHsKCSAgICAgIC8qIEZy
ZWV6ZSBtb2R1bGF0aW9uIHVudGlsIG5vdGUgdHVybnMgb2ZmLiBUcnVtcGV0cyB3YW50IHRoaXMu
ICovCgkgICAgICB2b2ljZVt2XS5tb2R1bGF0aW9uX2luY3JlbWVudD0wOwoJICAgICAgcmV0dXJu
IDA7CgkgICAgfQoJfQogICAgfQogIHZvaWNlW3ZdLm1vZHVsYXRpb25fc3RhZ2U9c3RhZ2UrMTsK
CiNpZmRlZiB0cGx1cwogIGlmICh2b2ljZVt2XS5tb2R1bGF0aW9uX3ZvbHVtZT09KGludCl2b2lj
ZVt2XS5zYW1wbGUtPm1vZHVsYXRpb25fb2Zmc2V0W3N0YWdlXSB8fAogICAgICAoc3RhZ2UgPiAy
ICYmIHZvaWNlW3ZdLm1vZHVsYXRpb25fdm9sdW1lIDwgKGludCl2b2ljZVt2XS5zYW1wbGUtPm1v
ZHVsYXRpb25fb2Zmc2V0W3N0YWdlXSkpCiNlbHNlCiAgaWYgKHZvaWNlW3ZdLm1vZHVsYXRpb25f
dm9sdW1lPT12b2ljZVt2XS5zYW1wbGUtPm1vZHVsYXRpb25fb2Zmc2V0W3N0YWdlXSkKI2VuZGlm
CiAgICByZXR1cm4gcmVjb21wdXRlX21vZHVsYXRpb24odik7CiAgdm9pY2Vbdl0ubW9kdWxhdGlv
bl90YXJnZXQ9dm9pY2Vbdl0uc2FtcGxlLT5tb2R1bGF0aW9uX29mZnNldFtzdGFnZV07CiAgdm9p
Y2Vbdl0ubW9kdWxhdGlvbl9pbmNyZW1lbnQgPSB2b2ljZVt2XS5zYW1wbGUtPm1vZHVsYXRpb25f
cmF0ZVtzdGFnZV07CiAgaWYgKChpbnQpdm9pY2Vbdl0ubW9kdWxhdGlvbl90YXJnZXQ8dm9pY2Vb
dl0ubW9kdWxhdGlvbl92b2x1bWUpCiAgICB2b2ljZVt2XS5tb2R1bGF0aW9uX2luY3JlbWVudCA9
IC12b2ljZVt2XS5tb2R1bGF0aW9uX2luY3JlbWVudDsKICByZXR1cm4gMDsKfQoKaW50IHVwZGF0
ZV9tb2R1bGF0aW9uKGludCB2KQp7CgogIGlmKHZvaWNlW3ZdLm1vZHVsYXRpb25fZGVsYXkgPiAw
KQogIHsKICAgICAgLyogdm9pY2Vbdl0ubW9kdWxhdGlvbl9kZWxheSAtPSBjb250cm9sX3JhdGlv
OyBJIHRoaW5rIHVuaXRzIGFyZSBhbHJlYWR5CgkgaW4gdGVybXMgb2YgY29udHJvbF9yYXRpbyAq
LwogICAgICB2b2ljZVt2XS5tb2R1bGF0aW9uX2RlbGF5IC09IDE7CiAgICAgIGlmKHZvaWNlW3Zd
Lm1vZHVsYXRpb25fZGVsYXkgPiAwKQoJICByZXR1cm4gMDsKICB9CgoKICB2b2ljZVt2XS5tb2R1
bGF0aW9uX3ZvbHVtZSArPSB2b2ljZVt2XS5tb2R1bGF0aW9uX2luY3JlbWVudDsKICBpZiAodm9p
Y2Vbdl0ubW9kdWxhdGlvbl92b2x1bWUgPCAwKSB2b2ljZVt2XS5tb2R1bGF0aW9uX3ZvbHVtZSA9
IDA7CiAgLyogV2h5IGlzIHRoZXJlIG5vIF5eIG9wZXJhdG9yPz8gKi8KICBpZiAoKCh2b2ljZVt2
XS5tb2R1bGF0aW9uX2luY3JlbWVudCA8IDApICYmCiAgICAgICAodm9pY2Vbdl0ubW9kdWxhdGlv
bl92b2x1bWUgPD0gKGludCl2b2ljZVt2XS5tb2R1bGF0aW9uX3RhcmdldCkpIHx8CiAgICAgICgo
dm9pY2Vbdl0ubW9kdWxhdGlvbl9pbmNyZW1lbnQgPiAwKSAmJgoJICAgKHZvaWNlW3ZdLm1vZHVs
YXRpb25fdm9sdW1lID49IChpbnQpdm9pY2Vbdl0ubW9kdWxhdGlvbl90YXJnZXQpKSkKICAgIHsK
ICAgICAgdm9pY2Vbdl0ubW9kdWxhdGlvbl92b2x1bWUgPSB2b2ljZVt2XS5tb2R1bGF0aW9uX3Rh
cmdldDsKICAgICAgaWYgKHJlY29tcHV0ZV9tb2R1bGF0aW9uKHYpKQoJcmV0dXJuIDE7CiAgICB9
CiAgcmV0dXJuIDA7Cn0KCi8qIFJldHVybnMgMSBpZiB0aGUgbm90ZSBkaWVkICovCmludCB1cGRh
dGVfbW9kdWxhdGlvbl9zaWduYWwoaW50IHYpCnsKICBpZiAodm9pY2Vbdl0ubW9kdWxhdGlvbl9p
bmNyZW1lbnQgJiYgdXBkYXRlX21vZHVsYXRpb24odikpCiAgICByZXR1cm4gMTsKICByZXR1cm4g
MDsKfQoKCgovKiBtb2R1bGF0aW9uX3ZvbHVtZSBoYXMgYmVlbiBzZXQgYnkgYWJvdmUgcm91dGlu
ZSAqLwppbnQzMiBjYWxjX21vZF9mcmVxKGludCB2LCBpbnQzMiBpbmNyKQp7CiAgRkxPQVRfVCBt
b2RfYW1vdW50OwogIGludDMyIGZyZXE7CiAgLyogYWxyZWFkeSBkb25lIGluIHVwZGF0ZV92aWJy
YXRvID8gKi8KICBpZiAodm9pY2Vbdl0udmlicmF0b19jb250cm9sX3JhdGlvKSByZXR1cm4gaW5j
cjsKICBpZiAoKG1vZF9hbW91bnQ9dm9pY2Vbdl0uc2FtcGxlLT5tb2RFbnZUb1BpdGNoKTwwLjAy
KSByZXR1cm4gaW5jcjsKICBpZiAoaW5jciA8IDApIHJldHVybiBpbmNyOwogIGZyZXEgPSB2b2lj
ZVt2XS5mcmVxdWVuY3k7CiAgZnJlcSA9IChpbnQzMikoIChkb3VibGUpZnJlcSooMS4wICsgKG1v
ZF9hbW91bnQgLSAxLjApICogKHZvaWNlW3ZdLm1vZHVsYXRpb25fdm9sdW1lPj4yMikgLyAyNTUu
MCkgKTsKCiAgcmV0dXJuIChpbnQzMikgRlJTQ0FMRSgoKGRvdWJsZSkodm9pY2Vbdl0uc2FtcGxl
LT5zYW1wbGVfcmF0ZSkgKgoJCSAgKGRvdWJsZSkoZnJlcSkpIC8KCQkgKChkb3VibGUpKHZvaWNl
W3ZdLnNhbXBsZS0+cm9vdF9mcmVxKSAqCgkJICAoZG91YmxlKShwbGF5X21vZGUtPnJhdGUpKSwK
CQkgRlJBQ1RJT05fQklUUyk7Cn0KCi8qKioqKioqKioqKioqKiogcmVzYW1wbGluZyB3aXRoIGZp
eGVkIGluY3JlbWVudCAqKioqKioqKioqKioqKioqKi8KCnN0YXRpYyBzYW1wbGVfdCAqcnNfcGxh
aW4oaW50IHYsIHVpbnQzMiAqY291bnRwdHIpCnsKICAvKiBQbGF5IHNhbXBsZSB1bnRpbCBlbmQs
IHRoZW4gZnJlZSB0aGUgdm9pY2UuICovCiAgVm9pY2UKICAgICp2cD0mdm9pY2Vbdl07CiAgaW50
MzIgICBvZnNkLCB2MCwgdjEsIHYyLCB2MywgdGVtcCwgb3ZlcnNob290OwogIGludCBvZmZzZXQ7
CiAgdWludDMyIGNjX2NvdW50PXZwLT5tb2R1bGF0aW9uX2NvdW50ZXI7CiAgc2FtcGxlX3QKICAg
ICpkZXN0PXJlc2FtcGxlX2J1ZmZlcityZXNhbXBsZV9idWZmZXJfb2Zmc2V0LAogICAgKnNyYz12
cC0+c2FtcGxlLT5kYXRhOwogIGludDMyCiAgICBpbmNyPXZwLT5zYW1wbGVfaW5jcmVtZW50Owog
IHVpbnQzMgogICAgb2ZzPXZwLT5zYW1wbGVfb2Zmc2V0OwojaWYgZGVmaW5lZChMQUdSQU5HRV9J
TlRFUlBPTEFUSU9OKSB8fCBkZWZpbmVkKENTUExJTkVfSU5URVJQT0xBVElPTikKICB1aW50MzIK
ICAgIGxzPTAsCiAgICBsZT12cC0+c2FtcGxlLT5kYXRhX2xlbmd0aDsKI2VuZGlmIC8qIExBR1JB
TkdFX0lOVEVSUE9MQVRJT04gKi8KICB1aW50MzIKICAgIHNlPXZwLT5zYW1wbGUtPmRhdGFfbGVu
Z3RoOwogIHVpbnQzMgogICAgY291bnQ9KmNvdW50cHRyOwoKICBpZiAoIWluY3IpIHJldHVybiBy
ZXNhbXBsZV9idWZmZXIrcmVzYW1wbGVfYnVmZmVyX29mZnNldDsgLyogLS1nbCAqLwoKICBvdmVy
c2hvb3QgPSBzcmNbKHNlPj5GUkFDVElPTl9CSVRTKS0xXSAvIE9WRVJTSE9PVF9TVEVQOwogIGlm
IChvdmVyc2hvb3QgPCAwKSBvdmVyc2hvb3QgPSAtb3ZlcnNob290OwoKICAgIHdoaWxlIChjb3Vu
dC0tKQogICAgewoKCW9mZnNldCA9IG9mcyA+PiBGUkFDVElPTl9CSVRTOwoKCWlmIChvZnMgPj0g
c2UpIHsKCQlpbnQzMiBkZWx0YSA9IChpbnQzMikoKG9mcyAtIHNlKT4+RlJBQ1RJT05fQklUUykg
OwogICAgICAgIAl2MSA9IChpbnQzMilzcmNbKGludCkoc2U+PkZSQUNUSU9OX0JJVFMpLTFdOwoJ
CXYxIC09ICAoZGVsdGErMSkgKiB2MSAvIG92ZXJzaG9vdDsKICAgICAgICB9ZWxzZSAgdjEgPSAo
aW50MzIpc3JjW29mZnNldF07CglpZiAob2ZzICsgKDFMPDxGUkFDVElPTl9CSVRTKSA+PSBzZSkg
ewoJCXYyID0gdjE7CiAgICAgICAgfWVsc2UgIHYyID0gKGludDMyKXNyY1tvZmZzZXQrMV07Cglp
Zihkb250X2NzcGxpbmUgfHwKCSAgICgob2ZzLSgxTDw8RlJBQ1RJT05fQklUUykpPGxzKXx8KChv
ZnMrKDJMPDxGUkFDVElPTl9CSVRTKSk+bGUpKXsKICAgICAgICAgICAgICAgICpkZXN0KysgPSAo
c2FtcGxlX3QpKHYxICsgKChpbnQzMikoKHYyLXYxKSAqIChpbnQzMikob2ZzICYgRlJBQ1RJT05f
TUFTSykpID4+IEZSQUNUSU9OX0JJVFMpKTsKCX1lbHNlewoJCW9mc2Q9b2ZzOwogICAgICAgICAg
ICAgICAgdjAgPSAoaW50MzIpc3JjW29mZnNldC0xXTsKICAgICAgICAgICAgICAgIHYzID0gKGlu
dDMyKXNyY1tvZmZzZXQrMl07CiAgICAgICAgICAgICAgICBvZnMgJj0gRlJBQ1RJT05fTUFTSzsK
ICAgICAgICAgICAgICAgIHRlbXA9djI7CgkJdjIgPSAoNip2MiArCgkJICAgICAgKCgoKCAoICg1
KnYzIC0gMTEqdjIgKyA3KnYxIC0gdjApKgoJCSAgICAgICAoaW50MzIpb2ZzKSA+PkZSQUNUSU9O
X0JJVFMpKihpbnQzMilvZnMpPj4oRlJBQ1RJT05fQklUUysyKSktMSkpKihpbnQzMilvZnM7CiAg
ICAgICAgICAgICAgICBvZnMgPSAoMUwgPDwgRlJBQ1RJT05fQklUUykgLSBvZnM7CgkJdjEgPSAo
Nip2MSArCgkJICAgICAgKCgoKCgoNSp2MCAtIDExKnYxICsgNyp0ZW1wIC0gdjMpKgoJCSAgICAg
ICAoaW50MzIpb2ZzKT4+RlJBQ1RJT05fQklUUykqKGludDMyKW9mcyk+PihGUkFDVElPTl9CSVRT
KzIpKS0xKSkqKGludDMyKW9mczsKCQl2MSA9ICh2MSArIHYyKS8oNkw8PEZSQUNUSU9OX0JJVFMp
OwoJCSpkZXN0KysgPSAoc2FtcGxlX3QpKCh2MSA+IE1BWF9EQVRBVkFMKT8gTUFYX0RBVEFWQUw6
ICgodjEgPCBNSU5fREFUQVZBTCk/IE1JTl9EQVRBVkFMOiB2MSkpOwoJCW9mcz1vZnNkOwoJfQoJ
CWlmICghY2NfY291bnQtLSkgewoJCSAgICBjY19jb3VudCA9IGNvbnRyb2xfcmF0aW8gLSAxOwoJ
CSAgICBpZiAoIXVwZGF0ZV9tb2R1bGF0aW9uX3NpZ25hbCh2KSkKCQkgICAgICAgIGluY3IgPSBj
YWxjX21vZF9mcmVxKHYsIGluY3IpOwoJCX0KICAgICAgb2ZzICs9IGluY3I7CiAgICAgIGlmIChv
ZnMgPj0gc2UgKyAob3ZlcnNob290IDw8IEZSQUNUSU9OX0JJVFMpKQoJewoJICBpZiAoISh2cC0+
c3RhdHVzJlZPSUNFX0ZSRUUpKQoJICAgIHsKCSAgICAgIHZwLT5zdGF0dXM9Vk9JQ0VfRlJFRTsK
IAkgICAgICBjdGwtPm5vdGUodik7CgkgICAgfQoJICAqY291bnRwdHItPWNvdW50KzE7CgkgIGJy
ZWFrOwoJfQogICAgfQoKICB2cC0+c2FtcGxlX29mZnNldD1vZnM7IC8qIFVwZGF0ZSBvZmZzZXQg
Ki8KICB2cC0+bW9kdWxhdGlvbl9jb3VudGVyPWNjX2NvdW50OwogIHJldHVybiByZXNhbXBsZV9i
dWZmZXIrcmVzYW1wbGVfYnVmZmVyX29mZnNldDsKfQoKc3RhdGljIHNhbXBsZV90ICpyc19sb29w
KGludCB2LCBWb2ljZSAqdnAsIHVpbnQzMiAqY291bnRwdHIpCnsKICAvKiBQbGF5IHNhbXBsZSB1
bnRpbCBlbmQtb2YtbG9vcCwgc2tpcCBiYWNrIGFuZCBjb250aW51ZS4gKi8KICBpbnQzMiAgIG9m
c2QsIHYwLCB2MSwgdjIsIHYzLCB0ZW1wLCBvdmVyc2hvb3Q7CiAgaW50IG9mZnNldDsKICB1aW50
MzIgY2NfY291bnQ9dnAtPm1vZHVsYXRpb25fY291bnRlcjsKICBpbnQzMgogICAgaW5jcj12cC0+
c2FtcGxlX2luY3JlbWVudDsKICB1aW50MzIKICAgIG9mcz12cC0+c2FtcGxlX29mZnNldDsKICB1
aW50MzIKICAgIGxlPXZwLT5sb29wX2VuZCwKI2lmIGRlZmluZWQoTEFHUkFOR0VfSU5URVJQT0xB
VElPTikgfHwgZGVmaW5lZChDU1BMSU5FX0lOVEVSUE9MQVRJT04pCiAgICBscz12cC0+bG9vcF9z
dGFydCwKI2VuZGlmIC8qIExBR1JBTkdFX0lOVEVSUE9MQVRJT04gKi8KICAgIGxsPWxlIC0gdnAt
Pmxvb3Bfc3RhcnQ7CiAgc2FtcGxlX3QKICAgICpkZXN0PXJlc2FtcGxlX2J1ZmZlcityZXNhbXBs
ZV9idWZmZXJfb2Zmc2V0LAogICAgKnNyYz12cC0+c2FtcGxlLT5kYXRhOwogIHVpbnQzMgogICAg
c2U9dnAtPnNhbXBsZS0+ZGF0YV9sZW5ndGgsCiAgICBjb3VudCA9ICpjb3VudHB0cjsKICBpbnQK
ICAgIGZsYWdfZXhpdF9sb29wOwoKCiAgZmxhZ19leGl0X2xvb3AgPQoJKHZwLT5zdGF0dXMgJiAo
Vk9JQ0VfRlJFRSB8IFZPSUNFX0RJRSkpIHx8CgkoKHZwLT5zdGF0dXMgJiBWT0lDRV9PRkYpICYm
ICh2cC0+c2FtcGxlLT5tb2RlcyAmIE1PREVTX0ZBU1RfUkVMRUFTRSkgKSB8fAoJKCh2cC0+c3Rh
dHVzICYgVk9JQ0VfT0ZGKSAmJiBkb250X2tlZXBfbG9vcGluZyApIDsKCiAgb3ZlcnNob290ID0g
c3JjWyhzZT4+RlJBQ1RJT05fQklUUyktMV0gLyBPVkVSU0hPT1RfU1RFUDsKICBpZiAob3ZlcnNo
b290IDwgMCkgb3ZlcnNob290ID0gLW92ZXJzaG9vdDsKCiAgd2hpbGUgKGNvdW50LS0pCiAgICB7
CgoJb2Zmc2V0ID0gb2ZzID4+IEZSQUNUSU9OX0JJVFM7CgoJaWYgKG9mcyA+PSBzZSkgewoJCWlu
dDMyIGRlbHRhID0gKGludDMyKSgob2ZzIC0gc2UpPj5GUkFDVElPTl9CSVRTKSA7CiAgICAgICAg
CXYxID0gKGludDMyKXNyY1soaW50KShzZT4+RlJBQ1RJT05fQklUUyktMV07CgkJdjEgLT0gIChk
ZWx0YSsxKSAqIHYxIC8gb3ZlcnNob290OwogICAgICAgIH1lbHNlICB2MSA9IChpbnQzMilzcmNb
b2Zmc2V0XTsKCWlmIChvZnMgKyAoMUw8PEZSQUNUSU9OX0JJVFMpID49IHNlKSB7CgkJdjIgPSB2
MTsKICAgICAgICB9ZWxzZSAgdjIgPSAoaW50MzIpc3JjW29mZnNldCsxXTsKCWlmKGRvbnRfY3Nw
bGluZSB8fAoJICAgKChvZnMtKDFMPDxGUkFDVElPTl9CSVRTKSk8bHMpfHwoKG9mcysoMkw8PEZS
QUNUSU9OX0JJVFMpKT5sZSkpewogICAgICAgICAgICAgICAgKmRlc3QrKyA9IChzYW1wbGVfdCko
djEgKyAoKGludDMyKSgodjItdjEpICogKGludDMyKShvZnMgJiBGUkFDVElPTl9NQVNLKSkgPj4g
RlJBQ1RJT05fQklUUykpOwoJfWVsc2V7CgkJb2ZzZD1vZnM7CiAgICAgICAgICAgICAgICB2MCA9
IChpbnQzMilzcmNbb2Zmc2V0LTFdOwogICAgICAgICAgICAgICAgdjMgPSAoaW50MzIpc3JjW29m
ZnNldCsyXTsKICAgICAgICAgICAgICAgIG9mcyAmPSBGUkFDVElPTl9NQVNLOwogICAgICAgICAg
ICAgICAgdGVtcD12MjsKCQl2MiA9ICg2KnYyICsKCQkgICAgICAoKCgoICggKDUqdjMgLSAxMSp2
MiArIDcqdjEgLSB2MCkqCgkJICAgICAgIChpbnQzMilvZnMpID4+RlJBQ1RJT05fQklUUykqKGlu
dDMyKW9mcyk+PihGUkFDVElPTl9CSVRTKzIpKS0xKSkqKGludDMyKW9mczsKICAgICAgICAgICAg
ICAgIG9mcyA9ICgxTCA8PCBGUkFDVElPTl9CSVRTKSAtIG9mczsKCQl2MSA9ICg2KnYxICsKCQkg
ICAgICAoKCgoKCg1KnYwIC0gMTEqdjEgKyA3KnRlbXAgLSB2MykqCgkJICAgICAgIChpbnQzMilv
ZnMpPj5GUkFDVElPTl9CSVRTKSooaW50MzIpb2ZzKT4+KEZSQUNUSU9OX0JJVFMrMikpLTEpKSoo
aW50MzIpb2ZzOwoJCXYxID0gKHYxICsgdjIpLyg2TDw8RlJBQ1RJT05fQklUUyk7CgkJKmRlc3Qr
KyA9IChzYW1wbGVfdCkoKHYxID4gTUFYX0RBVEFWQUwpPyBNQVhfREFUQVZBTDogKCh2MSA8IE1J
Tl9EQVRBVkFMKT8gTUlOX0RBVEFWQUw6IHYxKSk7CgkJb2ZzPW9mc2Q7Cgl9CgkJaWYgKCFjY19j
b3VudC0tKSB7CgkJICAgIGNjX2NvdW50ID0gY29udHJvbF9yYXRpbyAtIDE7CgkJICAgIGlmICgh
dXBkYXRlX21vZHVsYXRpb25fc2lnbmFsKHYpKQoJCSAgICAgICAgaW5jciA9IGNhbGNfbW9kX2Zy
ZXEodiwgaW5jcik7CgkJfQogICAgICBvZnMgKz0gaW5jcjsKICAgICAgaWYgKG9mcz49bGUpCgl7
CgkgIGlmIChmbGFnX2V4aXRfbG9vcCkKCSAgICB7CgkgICAgCXZwLT5lY2hvX2RlbGF5IC09IGxs
ID4+IEZSQUNUSU9OX0JJVFM7CgkgIAlpZiAodnAtPmVjaG9fZGVsYXkgPj0gMCkgb2ZzIC09IGxs
OwoJICAgIH0KCSAgZWxzZSBvZnMgLT0gbGw7IC8qIEhvcGVmdWxseSB0aGUgbG9vcCBpcyBsb25n
ZXIgdGhhbiBhbiBpbmNyZW1lbnQuICovCgl9CiAgICAgIGlmIChvZnMgPj0gc2UgKyAob3ZlcnNo
b290IDw8IEZSQUNUSU9OX0JJVFMpKQoJewoJICBpZiAoISh2cC0+c3RhdHVzJlZPSUNFX0ZSRUUp
KQoJICAgIHsKCSAgICAgIHZwLT5zdGF0dXM9Vk9JQ0VfRlJFRTsKIAkgICAgICBjdGwtPm5vdGUo
dik7CgkgICAgfQoJICAqY291bnRwdHItPWNvdW50KzE7CgkgIGJyZWFrOwoJfQogICAgfQoKICB2
cC0+c2FtcGxlX29mZnNldD1vZnM7IC8qIFVwZGF0ZSBvZmZzZXQgKi8KICB2cC0+bW9kdWxhdGlv
bl9jb3VudGVyPWNjX2NvdW50OwogIHJldHVybiByZXNhbXBsZV9idWZmZXIrcmVzYW1wbGVfYnVm
ZmVyX29mZnNldDsKfQoKc3RhdGljIHNhbXBsZV90ICpyc19iaWRpcihpbnQgdiwgVm9pY2UgKnZw
LCB1aW50MzIgY291bnQpCnsKICBpbnQzMiAgIG9mc2QsIHYwLCB2MSwgdjIsIHYzLCB0ZW1wLCBv
dmVyc2hvb3Q7CiAgaW50IG9mZnNldDsKICBpbnQzMgogICAgaW5jcj12cC0+c2FtcGxlX2luY3Jl
bWVudDsKICB1aW50MzIKICAgIGxlPXZwLT5sb29wX2VuZCwKICAgIGxzPXZwLT5sb29wX3N0YXJ0
OwogIHVpbnQzMgogICAgb2ZzPXZwLT5zYW1wbGVfb2Zmc2V0LAogICAgc2U9dnAtPnNhbXBsZS0+
ZGF0YV9sZW5ndGg7CiAgc2FtcGxlX3QKICAgICpkZXN0PXJlc2FtcGxlX2J1ZmZlcityZXNhbXBs
ZV9idWZmZXJfb2Zmc2V0LAogICAgKnNyYz12cC0+c2FtcGxlLT5kYXRhOwoKCiNpZmRlZiBVU0Vf
QklESVJfT1ZFUlNIT09UCiAgaW50MzIKICAgIGxlMiA9IGxlPDwxLAogICAgbHMyID0gbHM8PDE7
CiNlbmRpZgogIHVpbnQzMgogICAgaSwgajsKICAvKiBQbGF5IG5vcm1hbGx5IHVudGlsIGluc2lk
ZSB0aGUgbG9vcCByZWdpb24gKi8KCiAgb3ZlcnNob290ID0gc3JjWyhzZT4+RlJBQ1RJT05fQklU
UyktMV0gLyBPVkVSU0hPT1RfU1RFUDsKICBpZiAob3ZlcnNob290IDwgMCkgb3ZlcnNob290ID0g
LW92ZXJzaG9vdDsKCiAgaWYgKG9mcyA8PSBscykKICAgIHsKICAgICAgLyogTk9URTogQXNzdW1l
cyB0aGF0IGluY3IgPiAwLCB3aGljaCBpcyBOT1QgYWx3YXlzIHRoZSBjYXNlCgkgd2hlbiBkb2lu
ZyBiaWRpcmVjdGlvbmFsIGxvb3BpbmcuICBJIGhhdmUgeWV0IHRvIHNlZSBhIGNhc2UKCSB3aGVy
ZSBib3RoIG9mcyA8PSBscyBBTkQgaW5jciA8IDAsIGhvd2V2ZXIuICovCiAgICAgIGlmIChpbmNy
IDwgMCkgaSA9IGxzIC0gb2ZzOwoJZWxzZQogICAgICBpID0gKGxzIC0gb2ZzKSAvIGluY3IgKyAx
OwogICAgICBpZiAoaSA+IGNvdW50KQoJewoJICBpID0gY291bnQ7CgkgIGNvdW50ID0gMDsKCX0K
ICAgICAgZWxzZSBjb3VudCAtPSBpOwogICAgICBmb3IoaiA9IDA7IGogPCBpOyBqKyspCgl7CgoJ
b2Zmc2V0ID0gb2ZzID4+IEZSQUNUSU9OX0JJVFM7CgoJaWYgKG9mcyA+PSBzZSkgewoJCWludDMy
IGRlbHRhID0gKGludDMyKSgob2ZzIC0gc2UpPj5GUkFDVElPTl9CSVRTKSA7CiAgICAgICAgCXYx
ID0gKGludDMyKXNyY1soaW50KShzZT4+RlJBQ1RJT05fQklUUyktMV07CgkJdjEgLT0gIChkZWx0
YSsxKSAqIHYxIC8gb3ZlcnNob290OwogICAgICAgIH1lbHNlICB2MSA9IChpbnQzMilzcmNbb2Zm
c2V0XTsKCWlmIChvZnMgKyAoMUw8PEZSQUNUSU9OX0JJVFMpID49IHNlKSB7CgkJdjIgPSB2MTsK
ICAgICAgICB9ZWxzZSAgdjIgPSAoaW50MzIpc3JjW29mZnNldCsxXTsKCWlmKGRvbnRfY3NwbGlu
ZSB8fAoJICAgKChvZnMtKDFMPDxGUkFDVElPTl9CSVRTKSk8bHMpfHwoKG9mcysoMkw8PEZSQUNU
SU9OX0JJVFMpKT5sZSkpewogICAgICAgICAgICAgICAgKmRlc3QrKyA9IChzYW1wbGVfdCkodjEg
KyAoKGludDMyKSgodjItdjEpICogKGludDMyKShvZnMgJiBGUkFDVElPTl9NQVNLKSkgPj4gRlJB
Q1RJT05fQklUUykpOwoJfWVsc2V7CgkJb2ZzZD1vZnM7CiAgICAgICAgICAgICAgICB2MCA9IChp
bnQzMilzcmNbb2Zmc2V0LTFdOwogICAgICAgICAgICAgICAgdjMgPSAoaW50MzIpc3JjW29mZnNl
dCsyXTsKICAgICAgICAgICAgICAgIG9mcyAmPSBGUkFDVElPTl9NQVNLOwogICAgICAgICAgICAg
ICAgdGVtcD12MjsKCQl2MiA9ICg2KnYyICsKCQkgICAgICAoKCgoICggKDUqdjMgLSAxMSp2MiAr
IDcqdjEgLSB2MCkqCgkJICAgICAgIChpbnQzMilvZnMpID4+RlJBQ1RJT05fQklUUykqKGludDMy
KW9mcyk+PihGUkFDVElPTl9CSVRTKzIpKS0xKSkqKGludDMyKW9mczsKICAgICAgICAgICAgICAg
IG9mcyA9ICgxTCA8PCBGUkFDVElPTl9CSVRTKSAtIG9mczsKCQl2MSA9ICg2KnYxICsKCQkgICAg
ICAoKCgoKCg1KnYwIC0gMTEqdjEgKyA3KnRlbXAgLSB2MykqCgkJICAgICAgIChpbnQzMilvZnMp
Pj5GUkFDVElPTl9CSVRTKSooaW50MzIpb2ZzKT4+KEZSQUNUSU9OX0JJVFMrMikpLTEpKSooaW50
MzIpb2ZzOwoJCXYxID0gKHYxICsgdjIpLyg2TDw8RlJBQ1RJT05fQklUUyk7CgkJKmRlc3QrKyA9
IChzYW1wbGVfdCkoKHYxID4gTUFYX0RBVEFWQUwpPyBNQVhfREFUQVZBTDogKCh2MSA8IE1JTl9E
QVRBVkFMKT8gTUlOX0RBVEFWQUw6IHYxKSk7CgkJb2ZzPW9mc2Q7Cgl9CgkgIG9mcyArPSBpbmNy
OwoJfQogICAgfQoKICAvKiBUaGVuIGRvIHRoZSBiaWRpcmVjdGlvbmFsIGxvb3BpbmcgKi8KCiAg
d2hpbGUoY291bnQpCiAgICB7CiAgICAgIC8qIFByZWNhbGMgaG93IG1hbnkgdGltZXMgd2Ugc2hv
dWxkIGdvIHRocm91Z2ggdGhlIGxvb3AgKi8KI2lmIDEKICAgICAgaSA9ICgoaW5jciA+IDAgPyBs
ZSA6IGxzKSAtIG9mcykgLyBpbmNyICsgMTsKI2Vsc2UKLyogZml4IGZyb20gTS4gSXp1bW8gKi8K
ICAgICAgaSA9ICgoaW5jciA+IDAgPyBsZSA6IGxzKSAtIG9mcyArIGluY3IgLSAxKSAvIGluY3I7
CiNlbmRpZgogICAgICBpZiAoaSA+IGNvdW50KQoJewoJICBpID0gY291bnQ7CgkgIGNvdW50ID0g
MDsKCX0KICAgICAgZWxzZSBjb3VudCAtPSBpOwogICAgICBmb3IoaiA9IDA7IGogPCBpICYmIG9m
cyA8IHNlOyBqKyspCgl7CgoJb2Zmc2V0ID0gb2ZzID4+IEZSQUNUSU9OX0JJVFM7CgoJaWYgKG9m
cyA+PSBzZSkgewoJCWludDMyIGRlbHRhID0gKGludDMyKSgob2ZzIC0gc2UpPj5GUkFDVElPTl9C
SVRTKSA7CiAgICAgICAgCXYxID0gKGludDMyKXNyY1soaW50KShzZT4+RlJBQ1RJT05fQklUUykt
MV07CgkJdjEgLT0gIChkZWx0YSsxKSAqIHYxIC8gb3ZlcnNob290OwogICAgICAgIH1lbHNlICB2
MSA9IChpbnQzMilzcmNbb2Zmc2V0XTsKCWlmIChvZnMgKyAoMUw8PEZSQUNUSU9OX0JJVFMpID49
IHNlKSB7CgkJdjIgPSB2MTsKICAgICAgICB9ZWxzZSAgdjIgPSAoaW50MzIpc3JjW29mZnNldCsx
XTsKCWlmKGRvbnRfY3NwbGluZSB8fAoJICAgKChvZnMtKDFMPDxGUkFDVElPTl9CSVRTKSk8bHMp
fHwoKG9mcysoMkw8PEZSQUNUSU9OX0JJVFMpKT5sZSkpewogICAgICAgICAgICAgICAgKmRlc3Qr
KyA9IChzYW1wbGVfdCkodjEgKyAoKGludDMyKSgodjItdjEpICogKGludDMyKShvZnMgJiBGUkFD
VElPTl9NQVNLKSkgPj4gRlJBQ1RJT05fQklUUykpOwoJfWVsc2V7CgkJb2ZzZD1vZnM7CiAgICAg
ICAgICAgICAgICB2MCA9IChpbnQzMilzcmNbb2Zmc2V0LTFdOwogICAgICAgICAgICAgICAgdjMg
PSAoaW50MzIpc3JjW29mZnNldCsyXTsKICAgICAgICAgICAgICAgIG9mcyAmPSBGUkFDVElPTl9N
QVNLOwogICAgICAgICAgICAgICAgdGVtcD12MjsKCQl2MiA9ICg2KnYyICsKCQkgICAgICAoKCgo
ICggKDUqdjMgLSAxMSp2MiArIDcqdjEgLSB2MCkqCgkJICAgICAgIChpbnQzMilvZnMpID4+RlJB
Q1RJT05fQklUUykqKGludDMyKW9mcyk+PihGUkFDVElPTl9CSVRTKzIpKS0xKSkqKGludDMyKW9m
czsKICAgICAgICAgICAgICAgIG9mcyA9ICgxTCA8PCBGUkFDVElPTl9CSVRTKSAtIG9mczsKCQl2
MSA9ICg2KnYxICsKCQkgICAgICAoKCgoKCg1KnYwIC0gMTEqdjEgKyA3KnRlbXAgLSB2MykqCgkJ
ICAgICAgIChpbnQzMilvZnMpPj5GUkFDVElPTl9CSVRTKSooaW50MzIpb2ZzKT4+KEZSQUNUSU9O
X0JJVFMrMikpLTEpKSooaW50MzIpb2ZzOwoJCXYxID0gKHYxICsgdjIpLyg2TDw8RlJBQ1RJT05f
QklUUyk7CgkJKmRlc3QrKyA9IChzYW1wbGVfdCkoKHYxID4gTUFYX0RBVEFWQUwpPyBNQVhfREFU
QVZBTDogKCh2MSA8IE1JTl9EQVRBVkFMKT8gTUlOX0RBVEFWQUw6IHYxKSk7CgkJb2ZzPW9mc2Q7
Cgl9CgkgIG9mcyArPSBpbmNyOwoJfQojaWZkZWYgVVNFX0JJRElSX09WRVJTSE9PVAogICAgICBp
ZiAob2ZzPj1sZSkKCXsKCSAgLyogZm9sZCB0aGUgb3ZlcnNob290IGJhY2sgaW4gKi8KCSAgb2Zz
ID0gbGUyIC0gb2ZzOwoJICBpbmNyICo9IC0xOwoJfQogICAgICBlbHNlIGlmIChvZnMgPD0gbHMp
Cgl7CgkgIG9mcyA9IGxzMiAtIG9mczsKCSAgaW5jciAqPSAtMTsKCX0KI2Vsc2UKCSAgaW5jciAq
PSAtMTsKI2VuZGlmCiAgICB9CgogIHZwLT5zYW1wbGVfaW5jcmVtZW50PWluY3I7CiAgdnAtPnNh
bXBsZV9vZmZzZXQ9b2ZzOyAvKiBVcGRhdGUgb2Zmc2V0ICovCiAgcmV0dXJuIHJlc2FtcGxlX2J1
ZmZlcityZXNhbXBsZV9idWZmZXJfb2Zmc2V0Owp9CgovKioqKioqKioqKioqKioqKioqKioqKiog
dmlicmF0byB2ZXJzaW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBXZSBvbmx5
IG5lZWQgdG8gY29tcHV0ZSBvbmUgaGFsZiBvZiB0aGUgdmlicmF0byBzaW5lIGN5Y2xlICovCnN0
YXRpYyB1aW50MzIgdmliX3BoYXNlX3RvX2luY19wdHIodWludDMyIHBoYXNlKQp7CiAgaWYgKHBo
YXNlIDwgVklCUkFUT19TQU1QTEVfSU5DUkVNRU5UUy8yKQogICAgcmV0dXJuIFZJQlJBVE9fU0FN
UExFX0lOQ1JFTUVOVFMvMi0xLXBoYXNlOwogIGVsc2UgaWYgKHBoYXNlID49IDMqVklCUkFUT19T
QU1QTEVfSU5DUkVNRU5UUy8yKQogICAgcmV0dXJuIDUqVklCUkFUT19TQU1QTEVfSU5DUkVNRU5U
Uy8yLTEtcGhhc2U7CiAgZWxzZQogICAgcmV0dXJuIHBoYXNlLVZJQlJBVE9fU0FNUExFX0lOQ1JF
TUVOVFMvMjsKfQoKc3RhdGljIGludDMyIHVwZGF0ZV92aWJyYXRvKFZvaWNlICp2cCwgaW50IHNp
Z24pCnsKICB1aW50MzIgZGVwdGgsIGZyZXE9dnAtPmZyZXF1ZW5jeTsKI2lmZGVmIEVOVkVMT1BF
X1BJVENIX01PRFVMQVRJT04KICBGTE9BVF9UIG1vZF9hbW91bnQ9dnAtPnNhbXBsZS0+bW9kRW52
VG9QaXRjaDsKI2VuZGlmCiAgdWludDMyIHBoYXNlOwogIGludCBwYjsKICBkb3VibGUgYTsKCiAg
aWYodnAtPnZpYnJhdG9fZGVsYXkgPiAwKQogIHsKICAgICAgdnAtPnZpYnJhdG9fZGVsYXkgLT0g
dnAtPnZpYnJhdG9fY29udHJvbF9yYXRpbzsKICAgICAgaWYodnAtPnZpYnJhdG9fZGVsYXkgPiAw
KQoJICByZXR1cm4gdnAtPnNhbXBsZV9pbmNyZW1lbnQ7CiAgfQoKICBpZiAodnAtPnZpYnJhdG9f
cGhhc2UrKyA+PSAyKlZJQlJBVE9fU0FNUExFX0lOQ1JFTUVOVFMtMSkKICAgIHZwLT52aWJyYXRv
X3BoYXNlPTA7CiAgcGhhc2U9dmliX3BoYXNlX3RvX2luY19wdHIodnAtPnZpYnJhdG9fcGhhc2Up
OwoKICBpZiAodnAtPnZpYnJhdG9fc2FtcGxlX2luY3JlbWVudFtwaGFzZV0pCiAgICB7CiAgICAg
IGlmIChzaWduKQoJcmV0dXJuIC12cC0+dmlicmF0b19zYW1wbGVfaW5jcmVtZW50W3BoYXNlXTsK
ICAgICAgZWxzZQoJcmV0dXJuIHZwLT52aWJyYXRvX3NhbXBsZV9pbmNyZW1lbnRbcGhhc2VdOwog
ICAgfQoKICAvKiBOZWVkIHRvIGNvbXB1dGUgdGhpcyBzYW1wbGUgaW5jcmVtZW50LiAqLwoKICBk
ZXB0aCA9IHZwLT52aWJyYXRvX2RlcHRoOwogIGlmKGRlcHRoIDwgdnAtPm1vZHVsYXRpb25fd2hl
ZWwpCiAgICAgIGRlcHRoID0gdnAtPm1vZHVsYXRpb25fd2hlZWw7CiAgZGVwdGggPDw9IDc7Cgog
IGlmICh2cC0+dmlicmF0b19zd2VlcCAmJiAhdnAtPm1vZHVsYXRpb25fd2hlZWwpCiAgICB7CiAg
ICAgIC8qIE5lZWQgdG8gdXBkYXRlIHN3ZWVwICovCiAgICAgIHZwLT52aWJyYXRvX3N3ZWVwX3Bv
c2l0aW9uICs9IHZwLT52aWJyYXRvX3N3ZWVwOwogICAgICBpZiAodnAtPnZpYnJhdG9fc3dlZXBf
cG9zaXRpb24gPj0gKDE8PFNXRUVQX1NISUZUKSkKCXZwLT52aWJyYXRvX3N3ZWVwPTA7CiAgICAg
IGVsc2UKCXsKCSAgLyogQWRqdXN0IGRlcHRoICovCgkgIGRlcHRoICo9IHZwLT52aWJyYXRvX3N3
ZWVwX3Bvc2l0aW9uOwoJICBkZXB0aCA+Pj0gU1dFRVBfU0hJRlQ7Cgl9CiAgICB9CgojaWZkZWYg
RU5WRUxPUEVfUElUQ0hfTU9EVUxBVElPTgojaWZuZGVmIEZJTFRFUl9JTlRFUlBPTEFUSU9OCiAg
aWYgKHVwZGF0ZV9tb2R1bGF0aW9uX3NpZ25hbCgwKSkgbW9kX2Ftb3VudCA9IDA7CiAgZWxzZQoj
ZW5kaWYKICBpZiAobW9kX2Ftb3VudD4wLjAyKQogICBmcmVxID0gKGludDMyKSggKGRvdWJsZSlm
cmVxKigxLjAgKyAobW9kX2Ftb3VudCAtIDEuMCkgKiAodnAtPm1vZHVsYXRpb25fdm9sdW1lPj4y
MikgLyAyNTUuMCkgKTsKI2VuZGlmCgogIHBiPShpbnQpKChzaW5lKHZwLT52aWJyYXRvX3BoYXNl
ICoKCQkJKFNJTkVfQ1lDTEVfTEVOR1RILygyKlZJQlJBVE9fU0FNUExFX0lOQ1JFTUVOVFMpKSkK
CSAgICAqIChkb3VibGUpKGRlcHRoKSAqIFZJQlJBVE9fQU1QTElUVURFX1RVTklORykpOwoKICBh
ID0gRlJTQ0FMRSgoKGRvdWJsZSkodnAtPnNhbXBsZS0+c2FtcGxlX3JhdGUpICoKCQkgIChkb3Vi
bGUpKGZyZXEpKSAvCgkJICgoZG91YmxlKSh2cC0+c2FtcGxlLT5yb290X2ZyZXEpICoKCQkgIChk
b3VibGUpKHBsYXlfbW9kZS0+cmF0ZSkpLAoJCSBGUkFDVElPTl9CSVRTKTsKICBpZihwYjwwKQog
IHsKICAgICAgcGIgPSAtcGI7CiAgICAgIGEgLz0gYmVuZF9maW5lWyhwYj4+NSkgJiAweEZGXSAq
IGJlbmRfY29hcnNlW3BiPj4xM107CiAgfQogIGVsc2UKICAgICAgYSAqPSBiZW5kX2ZpbmVbKHBi
Pj41KSAmIDB4RkZdICogYmVuZF9jb2Fyc2VbcGI+PjEzXTsKICBhICs9IDAuNTsKCiAgLyogSWYg
dGhlIHN3ZWVwJ3Mgb3Zlciwgd2UgY2FuIHN0b3JlIHRoZSBuZXdseSBjb21wdXRlZCBzYW1wbGVf
aW5jcmVtZW50ICovCiAgaWYgKCF2cC0+dmlicmF0b19zd2VlcCB8fCB2cC0+bW9kdWxhdGlvbl93
aGVlbCkKICAgIHZwLT52aWJyYXRvX3NhbXBsZV9pbmNyZW1lbnRbcGhhc2VdPShpbnQzMikgYTsK
CiAgaWYgKHNpZ24pCiAgICBhID0gLWE7IC8qIG5lZWQgdG8gcHJlc2VydmUgdGhlIGxvb3AgZGly
ZWN0aW9uICovCgogIHJldHVybiAoaW50MzIpIGE7Cn0KCnN0YXRpYyBzYW1wbGVfdCAqcnNfdmli
X3BsYWluKGludCB2LCB1aW50MzIgKmNvdW50cHRyKQp7CgogIC8qIFBsYXkgc2FtcGxlIHVudGls
IGVuZCwgdGhlbiBmcmVlIHRoZSB2b2ljZS4gKi8KCiAgVm9pY2UgKnZwPSZ2b2ljZVt2XTsKICBp
bnQzMiAgIG9mc2QsIHYwLCB2MSwgdjIsIHYzLCB0ZW1wLCBvdmVyc2hvb3Q7CiAgaW50IG9mZnNl
dDsKICBzYW1wbGVfdAogICAgKmRlc3Q9cmVzYW1wbGVfYnVmZmVyK3Jlc2FtcGxlX2J1ZmZlcl9v
ZmZzZXQsCiAgICAqc3JjPXZwLT5zYW1wbGUtPmRhdGE7CiAgaW50MzIKICAgIGluY3I9dnAtPnNh
bXBsZV9pbmNyZW1lbnQ7Ci8qV0hZIGludDMyPz8qLwojaWYgZGVmaW5lZChMQUdSQU5HRV9JTlRF
UlBPTEFUSU9OKSB8fCBkZWZpbmVkKENTUExJTkVfSU5URVJQT0xBVElPTikKICB1aW50MzIKICAg
IGxzPTAsCiAgICBsZT12cC0+c2FtcGxlLT5kYXRhX2xlbmd0aDsKI2VuZGlmIC8qIExBR1JBTkdF
X0lOVEVSUE9MQVRJT04gKi8KICB1aW50MzIKICAgIG9mcz12cC0+c2FtcGxlX29mZnNldCwKICAg
IHNlPXZwLT5zYW1wbGUtPmRhdGFfbGVuZ3RoLAogICAgY291bnQ9KmNvdW50cHRyOwogIHVpbnQz
MgogICAgY2M9dnAtPnZpYnJhdG9fY29udHJvbF9jb3VudGVyOwoKICAvKiBUaGlzIGhhcyBuZXZl
ciBiZWVuIHRlc3RlZCAqLwoKICBpZiAoaW5jcjwwKSBpbmNyID0gLWluY3I7IC8qIEluIGNhc2Ug
d2UncmUgY29taW5nIG91dCBvZiBhIGJpZGlyIGxvb3AgKi8KCiAgb3ZlcnNob290ID0gc3JjWyhz
ZT4+RlJBQ1RJT05fQklUUyktMV0gLyBPVkVSU0hPT1RfU1RFUDsKICBpZiAob3ZlcnNob290IDwg
MCkgb3ZlcnNob290ID0gLW92ZXJzaG9vdDsKICB3aGlsZSAoY291bnQtLSkKICAgIHsKICAgICAg
aWYgKCFjYy0tKQoJewoJICBjYz12cC0+dmlicmF0b19jb250cm9sX3JhdGlvOwoJICBpbmNyPXVw
ZGF0ZV92aWJyYXRvKHZwLCAwKTsKCX0KCglvZmZzZXQgPSBvZnMgPj4gRlJBQ1RJT05fQklUUzsK
CglpZiAob2ZzID49IHNlKSB7CgkJaW50MzIgZGVsdGEgPSAoaW50MzIpKChvZnMgLSBzZSk+PkZS
QUNUSU9OX0JJVFMpIDsKICAgICAgICAJdjEgPSAoaW50MzIpc3JjWyhpbnQpKHNlPj5GUkFDVElP
Tl9CSVRTKS0xXTsKCQl2MSAtPSAgKGRlbHRhKzEpICogdjEgLyBvdmVyc2hvb3Q7CiAgICAgICAg
fWVsc2UgIHYxID0gKGludDMyKXNyY1tvZmZzZXRdOwoJaWYgKG9mcyArICgxTDw8RlJBQ1RJT05f
QklUUykgPj0gc2UpIHsKCQl2MiA9IHYxOwogICAgICAgIH1lbHNlICB2MiA9IChpbnQzMilzcmNb
b2Zmc2V0KzFdOwoJaWYoZG9udF9jc3BsaW5lIHx8CgkgICAoKG9mcy0oMUw8PEZSQUNUSU9OX0JJ
VFMpKTxscyl8fCgob2ZzKygyTDw8RlJBQ1RJT05fQklUUykpPmxlKSl7CiAgICAgICAgICAgICAg
ICAqZGVzdCsrID0gKHNhbXBsZV90KSh2MSArICgoaW50MzIpKCh2Mi12MSkgKiAoaW50MzIpKG9m
cyAmIEZSQUNUSU9OX01BU0spKSA+PiBGUkFDVElPTl9CSVRTKSk7Cgl9ZWxzZXsKCQlvZnNkPW9m
czsKICAgICAgICAgICAgICAgIHYwID0gKGludDMyKXNyY1tvZmZzZXQtMV07CiAgICAgICAgICAg
ICAgICB2MyA9IChpbnQzMilzcmNbb2Zmc2V0KzJdOwogICAgICAgICAgICAgICAgb2ZzICY9IEZS
QUNUSU9OX01BU0s7CiAgICAgICAgICAgICAgICB0ZW1wPXYyOwoJCXYyID0gKDYqdjIgKwoJCSAg
ICAgICgoKCggKCAoNSp2MyAtIDExKnYyICsgNyp2MSAtIHYwKSoKCQkgICAgICAgKGludDMyKW9m
cykgPj5GUkFDVElPTl9CSVRTKSooaW50MzIpb2ZzKT4+KEZSQUNUSU9OX0JJVFMrMikpLTEpKSoo
aW50MzIpb2ZzOwogICAgICAgICAgICAgICAgb2ZzID0gKDFMIDw8IEZSQUNUSU9OX0JJVFMpIC0g
b2ZzOwoJCXYxID0gKDYqdjEgKwoJCSAgICAgICgoKCgoKDUqdjAgLSAxMSp2MSArIDcqdGVtcCAt
IHYzKSoKCQkgICAgICAgKGludDMyKW9mcyk+PkZSQUNUSU9OX0JJVFMpKihpbnQzMilvZnMpPj4o
RlJBQ1RJT05fQklUUysyKSktMSkpKihpbnQzMilvZnM7CgkJdjEgPSAodjEgKyB2MikvKDZMPDxG
UkFDVElPTl9CSVRTKTsKCQkqZGVzdCsrID0gKHNhbXBsZV90KSgodjEgPiBNQVhfREFUQVZBTCk/
IE1BWF9EQVRBVkFMOiAoKHYxIDwgTUlOX0RBVEFWQUwpPyBNSU5fREFUQVZBTDogdjEpKTsKCQlv
ZnM9b2ZzZDsKCX0KICAgICAgb2ZzICs9IGluY3I7CiAgICAgIGlmIChvZnMgPj0gc2UgKyAob3Zl
cnNob290IDw8IEZSQUNUSU9OX0JJVFMpKQoJewoJICBpZiAoISh2cC0+c3RhdHVzJlZPSUNFX0ZS
RUUpKQoJICAgIHsKCSAgICAgIHZwLT5zdGF0dXM9Vk9JQ0VfRlJFRTsKIAkgICAgICBjdGwtPm5v
dGUodik7CgkgICAgfQoJICAqY291bnRwdHItPWNvdW50KzE7CgkgIGJyZWFrOwoJfQogICAgfQoK
ICB2cC0+dmlicmF0b19jb250cm9sX2NvdW50ZXI9Y2M7CiAgdnAtPnNhbXBsZV9pbmNyZW1lbnQ9
aW5jcjsKICB2cC0+c2FtcGxlX29mZnNldD1vZnM7IC8qIFVwZGF0ZSBvZmZzZXQgKi8KICByZXR1
cm4gcmVzYW1wbGVfYnVmZmVyK3Jlc2FtcGxlX2J1ZmZlcl9vZmZzZXQ7Cn0KCnN0YXRpYyBzYW1w
bGVfdCAqcnNfdmliX2xvb3AoaW50IHYsIFZvaWNlICp2cCwgdWludDMyICpjb3VudHB0cikKewog
IC8qIFBsYXkgc2FtcGxlIHVudGlsIGVuZC1vZi1sb29wLCBza2lwIGJhY2sgYW5kIGNvbnRpbnVl
LiAqLwogIGludDMyICAgb2ZzZCwgdjAsIHYxLCB2MiwgdjMsIHRlbXAsIG92ZXJzaG9vdDsKICBp
bnQgb2Zmc2V0OwogIGludDMyCiAgICBpbmNyPXZwLT5zYW1wbGVfaW5jcmVtZW50OwovKldIWSBp
bnQzMj8/Ki8KICB1aW50MzIKI2lmIGRlZmluZWQoTEFHUkFOR0VfSU5URVJQT0xBVElPTikgfHwg
ZGVmaW5lZChDU1BMSU5FX0lOVEVSUE9MQVRJT04pCiAgICBscz12cC0+bG9vcF9zdGFydCwKI2Vu
ZGlmIC8qIExBR1JBTkdFX0lOVEVSUE9MQVRJT04gKi8KICAgIGxlPXZwLT5sb29wX2VuZCwKICAg
IGxsPWxlIC0gdnAtPmxvb3Bfc3RhcnQ7CiAgc2FtcGxlX3QKICAgICpkZXN0PXJlc2FtcGxlX2J1
ZmZlcityZXNhbXBsZV9idWZmZXJfb2Zmc2V0LAogICAgKnNyYz12cC0+c2FtcGxlLT5kYXRhOwog
IHVpbnQzMgogICAgb2ZzPXZwLT5zYW1wbGVfb2Zmc2V0LAogICAgc2U9dnAtPnNhbXBsZS0+ZGF0
YV9sZW5ndGgsCiAgICBjb3VudCA9ICpjb3VudHB0cjsKICB1aW50MzIKICAgIGNjPXZwLT52aWJy
YXRvX2NvbnRyb2xfY291bnRlcjsKICBpbnQKICAgIGZsYWdfZXhpdF9sb29wOwoKCiAgZmxhZ19l
eGl0X2xvb3AgPQoJKHZwLT5zdGF0dXMgJiAoVk9JQ0VfRlJFRSB8IFZPSUNFX0RJRSkpIHx8Cgko
KHZwLT5zdGF0dXMgJiBWT0lDRV9PRkYpICYmICh2cC0+c2FtcGxlLT5tb2RlcyAmIE1PREVTX0ZB
U1RfUkVMRUFTRSkgKSB8fAoJKCh2cC0+c3RhdHVzICYgVk9JQ0VfT0ZGKSAmJiBkb250X2tlZXBf
bG9vcGluZyApIDsKCiAgb3ZlcnNob290ID0gc3JjWyhzZT4+RlJBQ1RJT05fQklUUyktMV0gLyBP
VkVSU0hPT1RfU1RFUDsKICBpZiAob3ZlcnNob290IDwgMCkgb3ZlcnNob290ID0gLW92ZXJzaG9v
dDsKICB3aGlsZSAoY291bnQtLSkKICAgIHsKICAgICAgaWYgKCFjYy0tKQoJewoJICBjYz12cC0+
dmlicmF0b19jb250cm9sX3JhdGlvOwoJICBpbmNyPXVwZGF0ZV92aWJyYXRvKHZwLCAwKTsKCX0K
CglvZmZzZXQgPSBvZnMgPj4gRlJBQ1RJT05fQklUUzsKCglpZiAob2ZzID49IHNlKSB7CgkJaW50
MzIgZGVsdGEgPSAoaW50MzIpKChvZnMgLSBzZSk+PkZSQUNUSU9OX0JJVFMpIDsKICAgICAgICAJ
djEgPSAoaW50MzIpc3JjWyhpbnQpKHNlPj5GUkFDVElPTl9CSVRTKS0xXTsKCQl2MSAtPSAgKGRl
bHRhKzEpICogdjEgLyBvdmVyc2hvb3Q7CiAgICAgICAgfWVsc2UgIHYxID0gKGludDMyKXNyY1tv
ZmZzZXRdOwoJaWYgKG9mcyArICgxTDw8RlJBQ1RJT05fQklUUykgPj0gc2UpIHsKCQl2MiA9IHYx
OwogICAgICAgIH1lbHNlICB2MiA9IChpbnQzMilzcmNbb2Zmc2V0KzFdOwoJaWYoZG9udF9jc3Bs
aW5lIHx8CgkgICAoKG9mcy0oMUw8PEZSQUNUSU9OX0JJVFMpKTxscyl8fCgob2ZzKygyTDw8RlJB
Q1RJT05fQklUUykpPmxlKSl7CiAgICAgICAgICAgICAgICAqZGVzdCsrID0gKHNhbXBsZV90KSh2
MSArICgoaW50MzIpKCh2Mi12MSkgKiAoaW50MzIpKG9mcyAmIEZSQUNUSU9OX01BU0spKSA+PiBG
UkFDVElPTl9CSVRTKSk7Cgl9ZWxzZXsKCQlvZnNkPW9mczsKICAgICAgICAgICAgICAgIHYwID0g
KGludDMyKXNyY1tvZmZzZXQtMV07CiAgICAgICAgICAgICAgICB2MyA9IChpbnQzMilzcmNbb2Zm
c2V0KzJdOwogICAgICAgICAgICAgICAgb2ZzICY9IEZSQUNUSU9OX01BU0s7CiAgICAgICAgICAg
ICAgICB0ZW1wPXYyOwoJCXYyID0gKDYqdjIgKwoJCSAgICAgICgoKCggKCAoNSp2MyAtIDExKnYy
ICsgNyp2MSAtIHYwKSoKCQkgICAgICAgKGludDMyKW9mcykgPj5GUkFDVElPTl9CSVRTKSooaW50
MzIpb2ZzKT4+KEZSQUNUSU9OX0JJVFMrMikpLTEpKSooaW50MzIpb2ZzOwogICAgICAgICAgICAg
ICAgb2ZzID0gKDFMIDw8IEZSQUNUSU9OX0JJVFMpIC0gb2ZzOwoJCXYxID0gKDYqdjEgKwoJCSAg
ICAgICgoKCgoKDUqdjAgLSAxMSp2MSArIDcqdGVtcCAtIHYzKSoKCQkgICAgICAgKGludDMyKW9m
cyk+PkZSQUNUSU9OX0JJVFMpKihpbnQzMilvZnMpPj4oRlJBQ1RJT05fQklUUysyKSktMSkpKihp
bnQzMilvZnM7CgkJdjEgPSAodjEgKyB2MikvKDZMPDxGUkFDVElPTl9CSVRTKTsKCQkqZGVzdCsr
ID0gKHNhbXBsZV90KSgodjEgPiBNQVhfREFUQVZBTCk/IE1BWF9EQVRBVkFMOiAoKHYxIDwgTUlO
X0RBVEFWQUwpPyBNSU5fREFUQVZBTDogdjEpKTsKCQlvZnM9b2ZzZDsKCX0KICAgICAgb2ZzICs9
IGluY3I7CiAgICAgIGlmIChvZnM+PWxlKQoJewoJICBpZiAoZmxhZ19leGl0X2xvb3ApCgkgICAg
ewoJICAgIAl2cC0+ZWNob19kZWxheSAtPSBsbCA+PiBGUkFDVElPTl9CSVRTOwoJICAJaWYgKHZw
LT5lY2hvX2RlbGF5ID49IDApIG9mcyAtPSBsbDsKCSAgICB9CgkgIGVsc2Ugb2ZzIC09IGxsOyAv
KiBIb3BlZnVsbHkgdGhlIGxvb3AgaXMgbG9uZ2VyIHRoYW4gYW4gaW5jcmVtZW50LiAqLwoJfQog
ICAgICBpZiAob2ZzID49IHNlICsgKG92ZXJzaG9vdCA8PCBGUkFDVElPTl9CSVRTKSkKCXsKCSAg
aWYgKCEodnAtPnN0YXR1cyZWT0lDRV9GUkVFKSkKCSAgICB7CgkgICAgICB2cC0+c3RhdHVzPVZP
SUNFX0ZSRUU7CiAJICAgICAgY3RsLT5ub3RlKHYpOwoJICAgIH0KCSAgKmNvdW50cHRyLT1jb3Vu
dCsxOwoJICBicmVhazsKCX0KICAgIH0KCiAgdnAtPnZpYnJhdG9fY29udHJvbF9jb3VudGVyPWNj
OwogIHZwLT5zYW1wbGVfaW5jcmVtZW50PWluY3I7CiAgdnAtPnNhbXBsZV9vZmZzZXQ9b2ZzOyAv
KiBVcGRhdGUgb2Zmc2V0ICovCiAgcmV0dXJuIHJlc2FtcGxlX2J1ZmZlcityZXNhbXBsZV9idWZm
ZXJfb2Zmc2V0Owp9CgpzdGF0aWMgc2FtcGxlX3QgKnJzX3ZpYl9iaWRpcihpbnQgdiwgVm9pY2Ug
KnZwLCB1aW50MzIgY291bnQpCnsKICBpbnQzMiAgIG9mc2QsIHYwLCB2MSwgdjIsIHYzLCB0ZW1w
LCBvdmVyc2hvb3Q7CiAgaW50IG9mZnNldDsKICBpbnQzMgogICAgaW5jcj12cC0+c2FtcGxlX2lu
Y3JlbWVudDsKLypXSFkgaW50MzI/PyovCiAgdWludDMyCiAgICBsZT12cC0+bG9vcF9lbmQsCiAg
ICBscz12cC0+bG9vcF9zdGFydDsKICB1aW50MzIKICAgIG9mcz12cC0+c2FtcGxlX29mZnNldCwK
ICAgIHNlPXZwLT5zYW1wbGUtPmRhdGFfbGVuZ3RoOwogIHNhbXBsZV90CiAgICAqZGVzdD1yZXNh
bXBsZV9idWZmZXIrcmVzYW1wbGVfYnVmZmVyX29mZnNldCwKICAgICpzcmM9dnAtPnNhbXBsZS0+
ZGF0YTsKICB1aW50MzIKICAgIGNjPXZwLT52aWJyYXRvX2NvbnRyb2xfY291bnRlcjsKCgojaWZk
ZWYgVVNFX0JJRElSX09WRVJTSE9PVAogIHVpbnQzMgogICAgbGUyPWxlPDwxLAogICAgbHMyPWxz
PDwxOwojZW5kaWYKICB1aW50MzIKICAgIGksIGo7CiAgaW50CiAgICB2aWJmbGFnID0gMDsKCgog
IG92ZXJzaG9vdCA9IHNyY1soc2U+PkZSQUNUSU9OX0JJVFMpLTFdIC8gT1ZFUlNIT09UX1NURVA7
CiAgaWYgKG92ZXJzaG9vdCA8IDApIG92ZXJzaG9vdCA9IC1vdmVyc2hvb3Q7CiAgLyogUGxheSBu
b3JtYWxseSB1bnRpbCBpbnNpZGUgdGhlIGxvb3AgcmVnaW9uICovCiAgd2hpbGUgKGNvdW50ICYm
IChvZnMgPD0gbHMpKQogICAgewogICAgICBpID0gKGxzIC0gb2ZzKSAvIGluY3IgKyAxOwogICAg
ICBpZiAoaSA+IGNvdW50KSBpID0gY291bnQ7CiAgICAgIGlmIChpID4gY2MpCgl7CgkgIGkgPSBj
YzsKCSAgdmliZmxhZyA9IDE7Cgl9CiAgICAgIGVsc2UgY2MgLT0gaTsKICAgICAgY291bnQgLT0g
aTsKICAgICAgZm9yKGogPSAwOyBqIDwgaTsgaisrKQoJewoKCW9mZnNldCA9IG9mcyA+PiBGUkFD
VElPTl9CSVRTOwoKCWlmIChvZnMgPj0gc2UpIHsKCQlpbnQzMiBkZWx0YSA9IChpbnQzMikoKG9m
cyAtIHNlKT4+RlJBQ1RJT05fQklUUykgOwogICAgICAgIAl2MSA9IChpbnQzMilzcmNbKGludCko
c2U+PkZSQUNUSU9OX0JJVFMpLTFdOwoJCXYxIC09ICAoZGVsdGErMSkgKiB2MSAvIG92ZXJzaG9v
dDsKICAgICAgICB9ZWxzZSAgdjEgPSAoaW50MzIpc3JjW29mZnNldF07CglpZiAob2ZzICsgKDFM
PDxGUkFDVElPTl9CSVRTKSA+PSBzZSkgewoJCXYyID0gdjE7CiAgICAgICAgfWVsc2UgIHYyID0g
KGludDMyKXNyY1tvZmZzZXQrMV07CglpZihkb250X2NzcGxpbmUgfHwKCSAgICgob2ZzLSgxTDw8
RlJBQ1RJT05fQklUUykpPGxzKXx8KChvZnMrKDJMPDxGUkFDVElPTl9CSVRTKSk+bGUpKXsKICAg
ICAgICAgICAgICAgICpkZXN0KysgPSAoc2FtcGxlX3QpKHYxICsgKChpbnQzMikoKHYyLXYxKSAq
IChpbnQzMikob2ZzICYgRlJBQ1RJT05fTUFTSykpID4+IEZSQUNUSU9OX0JJVFMpKTsKCX1lbHNl
ewoJCW9mc2Q9b2ZzOwogICAgICAgICAgICAgICAgdjAgPSAoaW50MzIpc3JjW29mZnNldC0xXTsK
ICAgICAgICAgICAgICAgIHYzID0gKGludDMyKXNyY1tvZmZzZXQrMl07CiAgICAgICAgICAgICAg
ICBvZnMgJj0gRlJBQ1RJT05fTUFTSzsKICAgICAgICAgICAgICAgIHRlbXA9djI7CgkJdjIgPSAo
Nip2MiArCgkJICAgICAgKCgoKCAoICg1KnYzIC0gMTEqdjIgKyA3KnYxIC0gdjApKgoJCSAgICAg
ICAoaW50MzIpb2ZzKSA+PkZSQUNUSU9OX0JJVFMpKihpbnQzMilvZnMpPj4oRlJBQ1RJT05fQklU
UysyKSktMSkpKihpbnQzMilvZnM7CiAgICAgICAgICAgICAgICBvZnMgPSAoMUwgPDwgRlJBQ1RJ
T05fQklUUykgLSBvZnM7CgkJdjEgPSAoNip2MSArCgkJICAgICAgKCgoKCgoNSp2MCAtIDExKnYx
ICsgNyp0ZW1wIC0gdjMpKgoJCSAgICAgICAoaW50MzIpb2ZzKT4+RlJBQ1RJT05fQklUUykqKGlu
dDMyKW9mcyk+PihGUkFDVElPTl9CSVRTKzIpKS0xKSkqKGludDMyKW9mczsKCQl2MSA9ICh2MSAr
IHYyKS8oNkw8PEZSQUNUSU9OX0JJVFMpOwoJCSpkZXN0KysgPSAoc2FtcGxlX3QpKCh2MSA+IE1B
WF9EQVRBVkFMKT8gTUFYX0RBVEFWQUw6ICgodjEgPCBNSU5fREFUQVZBTCk/IE1JTl9EQVRBVkFM
OiB2MSkpOwoJCW9mcz1vZnNkOwoJfQoJICBvZnMgKz0gaW5jcjsKCX0KICAgICAgaWYgKHZpYmZs
YWcpCgl7CgkgIGNjID0gdnAtPnZpYnJhdG9fY29udHJvbF9yYXRpbzsKCSAgaW5jciA9IHVwZGF0
ZV92aWJyYXRvKHZwLCAwKTsKCSAgdmliZmxhZyA9IDA7Cgl9CiAgICB9CgogIC8qIFRoZW4gZG8g
dGhlIGJpZGlyZWN0aW9uYWwgbG9vcGluZyAqLwoKICB3aGlsZSAoY291bnQpCiAgICB7CiAgICAg
IC8qIFByZWNhbGMgaG93IG1hbnkgdGltZXMgd2Ugc2hvdWxkIGdvIHRocm91Z2ggdGhlIGxvb3Ag
Ki8KI2lmIDEKICAgICAgaSA9ICgoaW5jciA+IDAgPyBsZSA6IGxzKSAtIG9mcykgLyBpbmNyICsg
MTsKI2Vsc2UKLyogZml4IGZyb20gTS4gSXp1bW8gKi8KICAgICAgaSA9ICgoaW5jciA+IDAgPyBs
ZSA6IGxzKSAtIG9mcyArIGluY3IgLSAxKSAvIGluY3I7CiNlbmRpZgogICAgICBpZihpID4gY291
bnQpIGkgPSBjb3VudDsKICAgICAgaWYoaSA+IGNjKQoJewoJICBpID0gY2M7CgkgIHZpYmZsYWcg
PSAxOwoJfQogICAgICBlbHNlIGNjIC09IGk7CiAgICAgIGNvdW50IC09IGk7CiAgICAgIHdoaWxl
IChpLS0gJiYgb2ZzIDwgc2UpCgl7CgoJb2Zmc2V0ID0gb2ZzID4+IEZSQUNUSU9OX0JJVFM7CgoJ
aWYgKG9mcyA+PSBzZSkgewoJCWludDMyIGRlbHRhID0gKGludDMyKSgob2ZzIC0gc2UpPj5GUkFD
VElPTl9CSVRTKSA7CiAgICAgICAgCXYxID0gKGludDMyKXNyY1soaW50KShzZT4+RlJBQ1RJT05f
QklUUyktMV07CgkJdjEgLT0gIChkZWx0YSsxKSAqIHYxIC8gb3ZlcnNob290OwogICAgICAgIH1l
bHNlICB2MSA9IChpbnQzMilzcmNbb2Zmc2V0XTsKCWlmIChvZnMgKyAoMUw8PEZSQUNUSU9OX0JJ
VFMpID49IHNlKSB7CgkJdjIgPSB2MTsKICAgICAgICB9ZWxzZSAgdjIgPSAoaW50MzIpc3JjW29m
ZnNldCsxXTsKCWlmKGRvbnRfY3NwbGluZSB8fAoJICAgKChvZnMtKDFMPDxGUkFDVElPTl9CSVRT
KSk8bHMpfHwoKG9mcysoMkw8PEZSQUNUSU9OX0JJVFMpKT5sZSkpewogICAgICAgICAgICAgICAg
KmRlc3QrKyA9IChzYW1wbGVfdCkodjEgKyAoKGludDMyKSgodjItdjEpICogKGludDMyKShvZnMg
JiBGUkFDVElPTl9NQVNLKSkgPj4gRlJBQ1RJT05fQklUUykpOwoJfWVsc2V7CgkJb2ZzZD1vZnM7
CiAgICAgICAgICAgICAgICB2MCA9IChpbnQzMilzcmNbb2Zmc2V0LTFdOwogICAgICAgICAgICAg
ICAgdjMgPSAoaW50MzIpc3JjW29mZnNldCsyXTsKICAgICAgICAgICAgICAgIG9mcyAmPSBGUkFD
VElPTl9NQVNLOwogICAgICAgICAgICAgICAgdGVtcD12MjsKCQl2MiA9ICg2KnYyICsKCQkgICAg
ICAoKCgoICggKDUqdjMgLSAxMSp2MiArIDcqdjEgLSB2MCkqCgkJICAgICAgIChpbnQzMilvZnMp
ID4+RlJBQ1RJT05fQklUUykqKGludDMyKW9mcyk+PihGUkFDVElPTl9CSVRTKzIpKS0xKSkqKGlu
dDMyKW9mczsKICAgICAgICAgICAgICAgIG9mcyA9ICgxTCA8PCBGUkFDVElPTl9CSVRTKSAtIG9m
czsKCQl2MSA9ICg2KnYxICsKCQkgICAgICAoKCgoKCg1KnYwIC0gMTEqdjEgKyA3KnRlbXAgLSB2
MykqCgkJICAgICAgIChpbnQzMilvZnMpPj5GUkFDVElPTl9CSVRTKSooaW50MzIpb2ZzKT4+KEZS
QUNUSU9OX0JJVFMrMikpLTEpKSooaW50MzIpb2ZzOwoJCXYxID0gKHYxICsgdjIpLyg2TDw8RlJB
Q1RJT05fQklUUyk7CgkJKmRlc3QrKyA9IChzYW1wbGVfdCkoKHYxID4gTUFYX0RBVEFWQUwpPyBN
QVhfREFUQVZBTDogKCh2MSA8IE1JTl9EQVRBVkFMKT8gTUlOX0RBVEFWQUw6IHYxKSk7CgkJb2Zz
PW9mc2Q7Cgl9CgkgIG9mcyArPSBpbmNyOwoJfQogICAgICBpZiAodmliZmxhZykKCXsKCSAgY2Mg
PSB2cC0+dmlicmF0b19jb250cm9sX3JhdGlvOwoJICBpbmNyID0gdXBkYXRlX3ZpYnJhdG8odnAs
IChpbmNyIDwgMCkpOwoJICB2aWJmbGFnID0gMDsKCX0KICAgICAgaWYgKG9mcyA+PSBsZSkKCXsK
I2lmZGVmIFVTRV9CSURJUl9PVkVSU0hPT1QKCSAgLyogZm9sZCB0aGUgb3ZlcnNob290IGJhY2sg
aW4gKi8KCSAgb2ZzID0gbGUyIC0gb2ZzOwojZW5kaWYKCSAgaW5jciAqPSAtMTsKCX0KICAgICAg
ZWxzZSBpZiAob2ZzIDw9IGxzKQoJewojaWZkZWYgVVNFX0JJRElSX09WRVJTSE9PVAoJICBvZnMg
PSBsczIgLSBvZnM7CiNlbmRpZgoJICBpbmNyICo9IC0xOwoJfQogICAgfQoKCiAgdnAtPnZpYnJh
dG9fY29udHJvbF9jb3VudGVyPWNjOwogIHZwLT5zYW1wbGVfaW5jcmVtZW50PWluY3I7CiAgdnAt
PnNhbXBsZV9vZmZzZXQ9b2ZzOyAvKiBVcGRhdGUgb2Zmc2V0ICovCiAgcmV0dXJuIHJlc2FtcGxl
X2J1ZmZlcityZXNhbXBsZV9idWZmZXJfb2Zmc2V0Owp9CgpzdGF0aWMgaW50IHJzX3VwZGF0ZV9w
b3J0YShpbnQgdikKewogICAgVm9pY2UgKnZwPSZ2b2ljZVt2XTsKICAgIGludDMyIGQ7CgogICAg
ZCA9IHZwLT5wb3J0YV9kcGI7CiAgICBpZih2cC0+cG9ydGFfcGIgPCAwKQogICAgewoJaWYoZCA+
IC12cC0+cG9ydGFfcGIpCgkgICAgZCA9IC12cC0+cG9ydGFfcGI7CiAgICB9CiAgICBlbHNlCiAg
ICB7CglpZihkID4gdnAtPnBvcnRhX3BiKQoJICAgIGQgPSAtdnAtPnBvcnRhX3BiOwoJZWxzZQoJ
ICAgIGQgPSAtZDsKICAgIH0KCiAgICB2cC0+cG9ydGFfcGIgKz0gZDsKICAgIGlmKHZwLT5wb3J0
YV9wYiA9PSAwKQogICAgewoJdnAtPnBvcnRhX2NvbnRyb2xfcmF0aW8gPSAwOwoJdnAtPnBvcnRh
X3BiID0gMDsKICAgIH0KICAgIHJlY29tcHV0ZV9mcmVxKHYpOwogICAgcmV0dXJuIHZwLT5wb3J0
YV9jb250cm9sX3JhdGlvOwp9CgpzdGF0aWMgc2FtcGxlX3QgKnBvcnRhX3Jlc2FtcGxlX3ZvaWNl
KGludCB2LCB1aW50MzIgKmNvdW50cHRyLCBpbnQgbW9kZSkKewogICAgVm9pY2UgKnZwPSZ2b2lj
ZVt2XTsKICAgIHVpbnQzMiBuID0gKmNvdW50cHRyOwogICAgdWludDMyIGk7CiAgICBzYW1wbGVf
dCAqKCogcmVzYW1wbGVyKShpbnQsIHVpbnQzMiAqLCBpbnQpOwogICAgaW50IGNjID0gdnAtPnBv
cnRhX2NvbnRyb2xfY291bnRlcjsKICAgIGludCBsb29wOwoKICAgIGlmKHZwLT52aWJyYXRvX2Nv
bnRyb2xfcmF0aW8pCglyZXNhbXBsZXIgPSB2aWJfcmVzYW1wbGVfdm9pY2U7CiAgICBlbHNlCgly
ZXNhbXBsZXIgPSBub3JtYWxfcmVzYW1wbGVfdm9pY2U7CiAgICBpZihtb2RlICE9IDEpCglsb29w
ID0gMTsKICAgIGVsc2UKCWxvb3AgPSAwOwoKICAgIC8qIHZwLT5jYWNoZSA9IE5VTEw7ICovCiAg
ICByZXNhbXBsZV9idWZmZXJfb2Zmc2V0ID0gMDsKICAgIHdoaWxlKHJlc2FtcGxlX2J1ZmZlcl9v
ZmZzZXQgPCBuKQogICAgewoJaWYoY2MgPT0gMCkKCXsKCSAgICBpZigoY2MgPSByc191cGRhdGVf
cG9ydGEodikpID09IDApCgkgICAgewoJCWkgPSBuIC0gcmVzYW1wbGVfYnVmZmVyX29mZnNldDsK
CQlyZXNhbXBsZXIodiwgJmksIG1vZGUpOwoJCXJlc2FtcGxlX2J1ZmZlcl9vZmZzZXQgKz0gaTsK
CQlicmVhazsKCSAgICB9Cgl9CgoJaSA9IG4gLSByZXNhbXBsZV9idWZmZXJfb2Zmc2V0OwoJaWYo
aSA+ICh1aW50MzIpY2MpCgkgICAgaSA9ICh1aW50MzIpY2M7CglyZXNhbXBsZXIodiwgJmksIG1v
ZGUpOwoJcmVzYW1wbGVfYnVmZmVyX29mZnNldCArPSBpOwoKCS8qIGlmKCFsb29wICYmIHZwLT5z
dGF0dXMgPT0gVk9JQ0VfRlJFRSkgKi8KCWlmKHZwLT5zdGF0dXMgPT0gVk9JQ0VfRlJFRSkKCSAg
ICBicmVhazsKCWNjIC09IChpbnQpaTsKICAgIH0KICAgICpjb3VudHB0ciA9IHJlc2FtcGxlX2J1
ZmZlcl9vZmZzZXQ7CiAgICByZXNhbXBsZV9idWZmZXJfb2Zmc2V0ID0gMDsKICAgIHZwLT5wb3J0
YV9jb250cm9sX2NvdW50ZXIgPSBjYzsKICAgIHJldHVybiByZXNhbXBsZV9idWZmZXI7Cn0KCnN0
YXRpYyBzYW1wbGVfdCAqdmliX3Jlc2FtcGxlX3ZvaWNlKGludCB2LCB1aW50MzIgKmNvdW50cHRy
LCBpbnQgbW9kZSkKewogICAgVm9pY2UgKnZwID0gJnZvaWNlW3ZdOwoKICAgIC8qIHZwLT5jYWNo
ZSA9IE5VTEw7ICovCiAgICBpZihtb2RlID09IDApCglyZXR1cm4gcnNfdmliX2xvb3AodiwgdnAs
IGNvdW50cHRyKTsKICAgIGlmKG1vZGUgPT0gMSkKCXJldHVybiByc192aWJfcGxhaW4odiwgY291
bnRwdHIpOwogICAgcmV0dXJuIHJzX3ZpYl9iaWRpcih2LCB2cCwgKmNvdW50cHRyKTsKfQoKc3Rh
dGljIHNhbXBsZV90ICpub3JtYWxfcmVzYW1wbGVfdm9pY2UoaW50IHYsIHVpbnQzMiAqY291bnRw
dHIsIGludCBtb2RlKQp7CiAgICBWb2ljZSAqdnAgPSAmdm9pY2Vbdl07CiAgICBpZihtb2RlID09
IDApCglyZXR1cm4gcnNfbG9vcCh2LCB2cCwgY291bnRwdHIpOwogICAgaWYobW9kZSA9PSAxKQoJ
cmV0dXJuIHJzX3BsYWluKHYsIGNvdW50cHRyKTsKICAgIHJldHVybiByc19iaWRpcih2LCB2cCwg
KmNvdW50cHRyKTsKfQoKc2FtcGxlX3QgKnJlc2FtcGxlX3ZvaWNlKGludCB2LCB1aW50MzIgKmNv
dW50cHRyKQp7CiAgICBWb2ljZSAqdnA9JnZvaWNlW3ZdOwogICAgaW50IG1vZGU7CgogICAgaWYo
ISh2cC0+c2FtcGxlLT5zYW1wbGVfcmF0ZSkpCiAgICB7Cgl1aW50MzIgb2ZzOwoKCS8qIFByZS1y
ZXNhbXBsZWQgZGF0YSAtLSBqdXN0IHVwZGF0ZSB0aGUgb2Zmc2V0IGFuZCBjaGVjayBpZgoJICAg
d2UncmUgb3V0IG9mIGRhdGEuICovCglvZnM9dnAtPnNhbXBsZV9vZmZzZXQgPj4gRlJBQ1RJT05f
QklUUzsgLyogS2luZCBvZiBzaWxseSB0byB1c2UKCQkJCQkJICAgRlJBQ1RJT05fQklUUyBoZXJl
Li4uICovCglpZigqY291bnRwdHIgPj0gKHZwLT5zYW1wbGUtPmRhdGFfbGVuZ3RoPj5GUkFDVElP
Tl9CSVRTKSAtIG9mcykKCXsKCSAgICAvKiBOb3RlIGZpbmlzaGVkLiBGcmVlIHRoZSB2b2ljZS4g
Ki8KCSAgaWYgKCEodnAtPnN0YXR1cyZWT0lDRV9GUkVFKSkKCSAgICB7CgkgICAgICB2cC0+c3Rh
dHVzPVZPSUNFX0ZSRUU7CiAJICAgICAgY3RsLT5ub3RlKHYpOwoJICAgIH0KCgkgICAgLyogTGV0
IHRoZSBjYWxsZXIga25vdyBob3cgbXVjaCBkYXRhIHdlIGhhZCBsZWZ0ICovCgkgICAgKmNvdW50
cHRyID0gKHZwLT5zYW1wbGUtPmRhdGFfbGVuZ3RoPj5GUkFDVElPTl9CSVRTKSAtIG9mczsKCX0K
CWVsc2UKCSAgICB2cC0+c2FtcGxlX29mZnNldCArPSAqY291bnRwdHIgPDwgRlJBQ1RJT05fQklU
UzsKCXJldHVybiB2cC0+c2FtcGxlLT5kYXRhK29mczsKICAgIH0KCiAgICBpZiAoY3VycmVudF9p
bnRlcnBvbGF0aW9uID09IDIpCgkgcmV0dXJuIHJlc2FtcGxlX3ZvaWNlX2xhZ3JhbmdlKHYsIGNv
dW50cHRyKTsKICAgIGVsc2UgaWYgKGN1cnJlbnRfaW50ZXJwb2xhdGlvbiA9PSAzKQoJIHJldHVy
biByZXNhbXBsZV92b2ljZV9maWx0ZXIodiwgY291bnRwdHIpOwoKICAgIG1vZGUgPSB2cC0+c2Ft
cGxlLT5tb2RlczsKICAgIGlmKChtb2RlICYgTU9ERVNfTE9PUElORykgJiYKICAgICAgICgobW9k
ZSAmIE1PREVTX0VOVkVMT1BFKSB8fAoJKHZwLT5zdGF0dXMgJiAoVk9JQ0VfT04gfCBWT0lDRV9T
VVNUQUlORUQpKSkpCiAgICB7CglpZihtb2RlICYgTU9ERVNfUElOR1BPTkcpCgl7CgkgICAgLyog
dnAtPmNhY2hlID0gTlVMTDsgKi8KCSAgICBtb2RlID0gMjsKCX0KCWVsc2UKCSAgICBtb2RlID0g
MDsKICAgIH0KICAgIGVsc2UKCW1vZGUgPSAxOwoKICAgIGlmKHZwLT5wb3J0YV9jb250cm9sX3Jh
dGlvKQoJcmV0dXJuIHBvcnRhX3Jlc2FtcGxlX3ZvaWNlKHYsIGNvdW50cHRyLCBtb2RlKTsKCiAg
ICBpZih2cC0+dmlicmF0b19jb250cm9sX3JhdGlvKQoJcmV0dXJuIHZpYl9yZXNhbXBsZV92b2lj
ZSh2LCBjb3VudHB0ciwgbW9kZSk7CgogICAgcmV0dXJuIG5vcm1hbF9yZXNhbXBsZV92b2ljZSh2
LCBjb3VudHB0ciwgbW9kZSk7Cn0KCgp2b2lkIGRvX2xvd3Bhc3MoU2FtcGxlICpzYW1wbGUsIHVp
bnQzMiBzcmF0ZSwgc2FtcGxlX3QgKmJ1ZiwgdWludDMyIGNvdW50LCB1aW50MzIgZnJlcSwgRkxP
QVRfVCByZXNvbmFuY2UpCnsKICAgIGRvdWJsZSBhMD0wLCBhMT0wLCBhMj0wLCBiMD0wLCBiMT0w
OwogICAgZG91YmxlIHgwPTAsIHgxPTAsIHkwPTAsIHkxPTA7CiAgICBzYW1wbGVfdCBzYW1wOwog
ICAgZG91YmxlIG91dHNhbXAsIGluc2FtcCwgbW9kX2Ftb3VudD0wOwogICAgdWludDMyIGZpbmRl
eCwgY2M7CiAgICB1aW50MzIgY3VycmVudF9mcmVxOwoKICAgIGlmIChmcmVxIDwgMjApIHJldHVy
bjsKCiAgICBpZiAoZnJlcSA+IHNyYXRlICogMikgewogICAgCWN0bC0+Y21zZyhDTVNHX0VSUk9S
LCBWRVJCX05PUk1BTCwKICAgIAkJICAiTG93cGFzczogY2VudGVyIG11c3QgYmUgPCBkYXRhIHJh
dGUqMiIpOwogICAgCXJldHVybjsKICAgIH0KCiAgICBjdXJyZW50X2ZyZXEgPSBmcmVxOwoKICAg
IGlmIChzYW1wbGUtPm1vZEVudlRvRmlsdGVyRmMpCgltb2RfYW1vdW50ID0gc2FtcGxlLT5tb2RF
bnZUb0ZpbHRlckZjOwoKICAgIGlmIChtb2RfYW1vdW50IDwgMC4wMiAmJiBmcmVxID49IDEzNTAw
KSByZXR1cm47CgogICAgdm9pY2VbMF0uc2FtcGxlID0gc2FtcGxlOwoKICAgICAgLyogUmFtcCB1
cCBmcm9tIDAgKi8KICAgIHZvaWNlWzBdLm1vZHVsYXRpb25fc3RhZ2U9QVRUQUNLOwogICAgdm9p
Y2VbMF0ubW9kdWxhdGlvbl92b2x1bWU9MDsKICAgIHZvaWNlWzBdLm1vZHVsYXRpb25fZGVsYXk9
c2FtcGxlLT5tb2R1bGF0aW9uX3JhdGVbREVMQVldOwogICAgY2MgPSB2b2ljZVswXS5tb2R1bGF0
aW9uX2NvdW50ZXI9MDsKICAgIHJlY29tcHV0ZV9tb2R1bGF0aW9uKDApOwoKLyogc3RhcnQgbW9k
dWxhdGlvbiBsb29wIGhlcmUgKi8KICAgIHdoaWxlIChjb3VudC0tKSB7CgoJaWYgKCFjYykgewoJ
ICAgIGlmIChtb2RfYW1vdW50PjAuMDIpIHsKCQlpZiAodXBkYXRlX21vZHVsYXRpb25fc2lnbmFs
KDApKSBtb2RfYW1vdW50ID0gMDsKCQllbHNlCgkJY3VycmVudF9mcmVxID0gKHVpbnQzMikoIChk
b3VibGUpZnJlcSooMS4wICsgKG1vZF9hbW91bnQgLSAxLjApICoKCQkJICh2b2ljZVswXS5tb2R1
bGF0aW9uX3ZvbHVtZT4+MjIpIC8gMjU1LjApICk7CgkgICAgfQoJICAgIGNjID0gY29udHJvbF9y
YXRpbzsKCSAgICBmaW5kZXggPSAxICsgKGN1cnJlbnRfZnJlcSs1MCkgLyAxMDA7CgkgICAgaWYg
KGZpbmRleCA+IDEwMCkgZmluZGV4ID0gMTAwOwoJICAgIGEwID0gYnV0dGVyd29ydGhbZmluZGV4
XVswXTsKCSAgICBhMSA9IGJ1dHRlcndvcnRoW2ZpbmRleF1bMV07CgkgICAgYTIgPSBidXR0ZXJ3
b3J0aFtmaW5kZXhdWzJdOwoJICAgIGIwID0gYnV0dGVyd29ydGhbZmluZGV4XVszXTsKCSAgICBi
MSA9IGJ1dHRlcndvcnRoW2ZpbmRleF1bNF07Cgl9CgoJaWYgKG1vZF9hbW91bnQ+MC4wMikgY2Mt
LTsKCiAgICAJc2FtcCA9ICpidWY7CgogICAgCWluc2FtcCA9IChkb3VibGUpc2FtcDsKICAgIAlv
dXRzYW1wID0gYTAgKiBpbnNhbXAgKyBhMSAqIHgwICsgYTIgKiB4MSAtIGIwICogeTAgLSBiMSAq
IHkxOwogICAgCXgxID0geDA7CiAgICAJeDAgPSBpbnNhbXA7CiAgICAJeTEgPSB5MDsKICAgIAl5
MCA9IG91dHNhbXA7CiAgICAJaWYgKG91dHNhbXAgPiBNQVhfREFUQVZBTCkgewogICAgCQlvdXRz
YW1wID0gTUFYX0RBVEFWQUw7CiAgICAJfQogICAgCWVsc2UgaWYgKG91dHNhbXAgPCBNSU5fREFU
QVZBTCkgewogICAgCQlvdXRzYW1wID0gTUlOX0RBVEFWQUw7CiAgICAJfQogICAgCSpidWYrKyA9
IChzYW1wbGVfdClvdXRzYW1wOwogICAgfQp9CgoKdm9pZCBwcmVfcmVzYW1wbGUoU2FtcGxlICog
c3ApCnsKICBkb3VibGUgYSwgeGRpZmY7CiAgdWludDMyIGksIGluY3IsIG9mcywgbmV3bGVuLCBj
b3VudCwgb3ZlcnNob290OwogIGludDE2ICpuZXdkYXRhLCAqZGVzdCwgKnNyYyA9IChpbnQxNiAq
KXNwLT5kYXRhLCAqdnB0ciwgKmVuZHB0cjsKICBpbnQzMiB2MSwgdjIsIHYzLCB2NDsKICBzdGF0
aWMgY29uc3QgY2hhciBub3RlX25hbWVbMTJdWzNdID0KICB7CiAgICAiQyIsICJDIyIsICJEIiwg
IkQjIiwgIkUiLCAiRiIsICJGIyIsICJHIiwgIkcjIiwgIkEiLCAiQSMiLCAiQiIKICB9OwoKICBj
dGwtPmNtc2coQ01TR19JTkZPLCBWRVJCX0RFQlVHLCAiICogcHJlLXJlc2FtcGxpbmcgZm9yIG5v
dGUgJWQgKCVzJWQpIiwKCSAgICBzcC0+bm90ZV90b191c2UsCgkgICAgbm90ZV9uYW1lW3NwLT5u
b3RlX3RvX3VzZSAlIDEyXSwgKHNwLT5ub3RlX3RvX3VzZSAmIDB4N0YpIC8gMTIpOwoKICBpZiAo
c3AtPnNhbXBsZV9yYXRlID09IHBsYXlfbW9kZS0+cmF0ZSAmJiBzcC0+cm9vdF9mcmVxID09IGZy
ZXFfdGFibGVbKGludCkoc3AtPm5vdGVfdG9fdXNlKV0pIHsKCWEgPSAxOwogIH0KICBlbHNlIGEg
PSAoKGRvdWJsZSkgKHNwLT5zYW1wbGVfcmF0ZSkgKiBmcmVxX3RhYmxlWyhpbnQpIChzcC0+bm90
ZV90b191c2UpXSkgLwogICAgKChkb3VibGUpIChzcC0+cm9vdF9mcmVxKSAqIHBsYXlfbW9kZS0+
cmF0ZSk7CgogIC8qIGlmIChhPDEuMCkgcmV0dXJuOyAqLwogIGlmKHNwLT5kYXRhX2xlbmd0aCAv
IGEgPj0gMHg3ZmZmZmZmZkwpCiAgewogICAgICAvKiBUb28gbGFyZ2UgdG8gY29tcHV0ZSAqLwog
ICAgICBjdGwtPmNtc2coQ01TR19JTkZPLCBWRVJCX0RFQlVHLCAiICoqKiBDYW4ndCBwcmUtcmVz
YW1wbGluZyBmb3Igbm90ZSAlZCIsCgkJc3AtPm5vdGVfdG9fdXNlKTsKICAgICAgcmV0dXJuOwog
IH0KCiAgZW5kcHRyID0gc3JjICsgKHNwLT5kYXRhX2xlbmd0aCA+PiBGUkFDVElPTl9CSVRTKSAt
IDE7CiAgaWYgKCplbmRwdHIgPCAwKSBvdmVyc2hvb3QgPSAodWludDMyKSgtKCplbmRwdHIgLyBP
VkVSU0hPT1RfU1RFUCkpOwogIGVsc2Ugb3ZlcnNob290ID0gKHVpbnQzMikoKmVuZHB0ciAvIE9W
RVJTSE9PVF9TVEVQKTsKICBpZiAob3ZlcnNob290IDwgMikgb3ZlcnNob290ID0gMDsKCiAgbmV3
bGVuID0gKGludDMyKShzcC0+ZGF0YV9sZW5ndGggLyBhKTsKICBjb3VudCA9IChuZXdsZW4gPj4g
RlJBQ1RJT05fQklUUykgLSAxOwogIG9mcyA9IGluY3IgPSAoc3AtPmRhdGFfbGVuZ3RoIC0gKDEg
PDwgRlJBQ1RJT05fQklUUykpIC8gY291bnQ7CgogIGlmKChkb3VibGUpbmV3bGVuICsgaW5jciA+
PSAweDdmZmZmZmZmTCkKICB7CiAgICAgIC8qIFRvbyBsYXJnZSB0byBjb21wdXRlICovCiAgICAg
IGN0bC0+Y21zZyhDTVNHX0lORk8sIFZFUkJfREVCVUcsICIgKioqIENhbid0IHByZS1yZXNhbXBs
aW5nIGZvciBub3RlICVkIiwKCQlzcC0+bm90ZV90b191c2UpOwogICAgICByZXR1cm47CiAgfQoK
ICBkZXN0ID0gbmV3ZGF0YSA9IChpbnQxNiAqKXNhZmVfbWFsbG9jKChuZXdsZW4gPj4gKEZSQUNU
SU9OX0JJVFMgLSAxKSkgKyAyICsgMipvdmVyc2hvb3QpOwoKICBpZiAoLS1jb3VudCkKICAgICpk
ZXN0KysgPSBzcmNbMF07CgogIC8qIFNpbmNlIHdlJ3JlIHByZS1wcm9jZXNzaW5nIGFuZCB0aGlz
IGRvZXNuJ3QgaGF2ZSB0byBiZSBkb25lIGluCiAgICAgcmVhbC10aW1lLCB3ZSBnbyBhaGVhZCBh
bmQgZG8gdGhlIGZ1bGwgc2xpZGluZyBjdWJpYyBpbnRlcnBvbGF0aW9uLiAqLwogIGNvdW50LS07
CiAgZm9yKGkgPSAwOyBpIDwgY291bnQgKyBvdmVyc2hvb3Q7IGkrKykKICAgIHsKICAgICAgdnB0
ciA9IHNyYyArIChvZnMgPj4gRlJBQ1RJT05fQklUUyk7CiAgICAgIGlmIChpIDwgY291bnQgLSAy
IHx8ICFvdmVyc2hvb3QpCgl7CiAgICAgICAgICB2MSA9ICoodnB0ciAtIDEpOwogICAgICAgICAg
djIgPSAqdnB0cjsKICAgICAgICAgIHYzID0gKih2cHRyICsgMSk7CiAgICAgICAgICB2NCA9ICoo
dnB0ciArIDIpOwoJfQogICAgICBlbHNlCgl7CgkgIGlmIChpIDwgY291bnQgKyAxKSB2MSA9ICoo
dnB0ciAtIDEpOwoJICBlbHNlIHYxID0gKmVuZHB0ciAtIChjb3VudC1pKzIpICogKmVuZHB0ciAv
IG92ZXJzaG9vdDsKCSAgaWYgKGkgPCBjb3VudCkgdjIgPSAqdnB0cjsKCSAgZWxzZSB2MiA9ICpl
bmRwdHIgLSAoY291bnQtaSsxKSAqICplbmRwdHIgLyBvdmVyc2hvb3Q7CgkgIGlmIChpIDwgY291
bnQgLSAxKSB2MyA9ICoodnB0ciArIDEpOwoJICBlbHNlIHYzID0gKmVuZHB0ciAtIChjb3VudC1p
KSAqICplbmRwdHIgLyBvdmVyc2hvb3Q7CgkgIHY0ID0gKmVuZHB0ciAtIChjb3VudC1pLTEpICog
KmVuZHB0ciAvIG92ZXJzaG9vdDsKCX0KICAgICAgeGRpZmYgPSBGUlNDQUxFTkVHKChpbnQzMiko
b2ZzICYgRlJBQ1RJT05fTUFTSyksIEZSQUNUSU9OX0JJVFMpOwogICAgICAqZGVzdCsrID0gdjIg
KyAoeGRpZmYgLyA2LjApICogKC0yICogdjEgLSAzICogdjIgKyA2ICogdjMgLSB2NCArCiAgICAg
IHhkaWZmICogKDMgKiAodjEgLSAyICogdjIgKyB2MykgKyB4ZGlmZiAqICgtdjEgKyAzICogKHYy
IC0gdjMpICsgdjQpKSk7CiAgICAgIG9mcyArPSBpbmNyOwogICAgfQoKIGlmICghb3ZlcnNob290
KQogIHsKICBpZiAoKGludDMyKShvZnMgJiBGUkFDVElPTl9NQVNLKSkKICAgIHsKICAgICAgdjEg
PSBzcmNbb2ZzID4+IEZSQUNUSU9OX0JJVFNdOwogICAgICB2MiA9IHNyY1sob2ZzID4+IEZSQUNU
SU9OX0JJVFMpICsgMV07CiAgICAgICpkZXN0KysgPSAoaW50MTYpKHYxICsgKChpbnQzMikoKHYy
IC0gdjEpICogKG9mcyAmIEZSQUNUSU9OX01BU0spKSA+PiBGUkFDVElPTl9CSVRTKSk7CiAgICB9
CiAgZWxzZQogICAgKmRlc3QrKyA9IHNyY1tvZnMgPj4gRlJBQ1RJT05fQklUU107CiAgKmRlc3Qr
KyA9ICooZGVzdCAtIDEpIC8gMjsKICAqZGVzdCsrID0gKihkZXN0IC0gMSkgLyAyOwogIH0KCiAg
c3AtPmRhdGFfbGVuZ3RoID0gbmV3bGVuICsgKG92ZXJzaG9vdCA8PCBGUkFDVElPTl9CSVRTKTsK
ICBzcC0+bG9vcF9zdGFydCA9IChpbnQzMikoc3AtPmxvb3Bfc3RhcnQgLyBhKTsKICBzcC0+bG9v
cF9lbmQgPSAoaW50MzIpKHNwLT5sb29wX2VuZCAvIGEpOwogIGZyZWUoc3AtPmRhdGEpOwogIHNw
LT5kYXRhID0gKHNhbXBsZV90ICopIG5ld2RhdGE7CiAgc3AtPnNhbXBsZV9yYXRlID0gMDsKfQo=


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

* Re: c/6278: Internal compiler error
@ 2002-04-12 18:51 rodrigc
  0 siblings, 0 replies; 2+ messages in thread
From: rodrigc @ 2002-04-12 18:51 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, pierre

Synopsis: Internal compiler error

State-Changed-From-To: open->closed
State-Changed-By: rodrigc
State-Changed-When: Fri Apr 12 18:51:42 2002
State-Changed-Why:
    Duplicate of PR 5250
    http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=5250

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6278


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

end of thread, other threads:[~2002-04-13  1:51 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-12 10:56 c/6278: Internal compiler error pierre
2002-04-12 18:51 rodrigc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).