This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c++/6972: libgcc2.c GCC 3.1 Cross-compiler Compilation Errors


>Number:         6972
>Category:       c++
>Synopsis:       libgcc2.c GCC 3.1 Cross-compiler Compilation Errors
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 08 14:56:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Jonathan H. Roberts
>Release:        gcc-3.1
>Organization:
>Environment:
WindowsXP, Sony VAIO, 650 MHz Celeron, Cygwin Utilities, 
GCC-2.95.3 Native, binutils-2.12 compiled for arm-elf,
$target=arm-elf, $prefix=d:/usr/local/arm
cd d:/usr/local/arm
CC=gcc ../gcc-3.1/configure --target=$target --prefix=$prefix --with-local-prefix=d:/usr/local/arm -v
make
>Description:
After successfully compiling binutils-2.12 for arm-elf in
the same d:/usr/local/arm directory, I attempted to compile
gcc-3.1 for arm-elf target, using above command-line.
Compilation progressed merrily for one hour and 5 minutes, 
when it terminated with the following error message:
../../gcc-3.1/gcc/libgcc2.c: In function '__ffsdi2':
../../gcc-3.1/gcc/libgcc2.c:349:internal error: Arithmetic exception
Please submit a full bug report
..
I then commented out the offending routine and recompiled
but it terminated with the following error message:
../../gcc-3.1/gcc/libgcc2.c: In function '__cmpdi2':
../../gcc-3.1/gcc/libgcc2.c:816:internal error: Arithmetic exception
Please submit a full bug report
..
I then commented out the offending routine and recompiled
but it terminated with the following error message:
../../gcc-3.1/gcc/libgcc2.c: In function '__ucmpdi2':
../../gcc-3.1/gcc/libgcc2.c:837:internal error: Arithmetic exception
Please submit a full bug report
..
I then commented out the offending routine and recompiled
but it terminated with the following error message:
../../gcc-3.1/gcc/libgcc2.c: In function '__absvsi2':
../../gcc-3.1/gcc/libgcc2.c:193: warning: implicit declaration of function 'abort'
../../gcc-3.1/gcc/libgcc2.c:197:internal error: Arithmetic exception
Please submit a full bug report
>How-To-Repeat:
As above..
>Fix:
I tried #undef-ing these routines but it appeared to me that
I perhaps am lacking some arm math header file, but I am not
sure which ones I need.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="libgcc2.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="libgcc2.c"

LyogTW9yZSBzdWJyb3V0aW5lcyBuZWVkZWQgYnkgR0NDIG91dHB1dCBjb2RlIG9uIHNvbWUgbWFj
aGluZXMuICAqLwovKiBDb21waWxlIHRoaXMgb25lIHdpdGggZ2NjLiAgKi8KLyogQ29weXJpZ2h0
IChDKSAxOTg5LCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5
LAogICAyMDAwLCAyMDAxICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KClRoaXMgZmls
ZSBpcyBwYXJ0IG9mIEdDQy4KCkdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCnRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlClNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCnZl
cnNpb24uCgpJbiBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlLCB0aGUKRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHlvdSB1
bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZQpjb21waWxlZCB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSBpbnRvIGNvbWJpbmF0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zLAphbmQgdG8gZGlzdHJp
YnV0ZSB0aG9zZSBjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb24gY29taW5nCmZy
b20gdGhlIHVzZSBvZiB0aGlzIGZpbGUuICAoVGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcmVz
dHJpY3Rpb25zCmRvIGFwcGx5IGluIG90aGVyIHJlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBj
b3ZlciBtb2RpZmljYXRpb24gb2YKdGhlIGZpbGUsIGFuZCBkaXN0cmlidXRpb24gd2hlbiBub3Qg
bGlua2VkIGludG8gYSBjb21iaW5lCmV4ZWN1dGFibGUuKQoKR0NDIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQpXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv
cgpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggR0ND
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKU29mdHdh
cmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCjAy
MTExLTEzMDcsIFVTQS4gICovCgovKiBJdCBpcyBpbmNvcnJlY3QgdG8gaW5jbHVkZSBjb25maWcu
aCBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBpcyBiZWluZwogICBjb21waWxlZCBmb3IgdGhlIHRh
cmdldCwgYW5kIGhlbmNlIGRlZmluaXRpb25zIGNvbmNlcm5pbmcgb25seSB0aGUgaG9zdAogICBk
byBub3QgYXBwbHkuICAqLwoKI2luY2x1ZGUgInRjb25maWcuaCIKI2luY2x1ZGUgInRzeXN0ZW0u
aCIKCiNpbmNsdWRlICJtYWNobW9kZS5oIgoKLyogRG9uJ3QgdXNlIGBmYW5jeV9hYm9ydCcgaGVy
ZSBldmVuIGlmIGNvbmZpZy5oIHNheXMgdG8gdXNlIGl0LiAgKi8KI2lmZGVmIGFib3J0CiN1bmRl
ZiBhYm9ydAojZW5kaWYKCiNpbmNsdWRlICJsaWJnY2MyLmgiCgwKI2lmIGRlZmluZWQgKExfbmVn
ZGkyKSB8fCBkZWZpbmVkIChMX2RpdmRpMykgfHwgZGVmaW5lZCAoTF9tb2RkaTMpCiNpZiBkZWZp
bmVkIChMX2RpdmRpMykgfHwgZGVmaW5lZCAoTF9tb2RkaTMpCnN0YXRpYyBpbmxpbmUKI2VuZGlm
CkRXdHlwZQpfX25lZ2RpMiAoRFd0eXBlIHUpCnsKICBEV3VuaW9uIHc7CiAgRFd1bmlvbiB1dTsK
CiAgdXUubGwgPSB1OwoKICB3LnMubG93ID0gLXV1LnMubG93OwogIHcucy5oaWdoID0gLXV1LnMu
aGlnaCAtICgoVVd0eXBlKSB3LnMubG93ID4gMCk7CgogIHJldHVybiB3LmxsOwp9CiNlbmRpZgoK
I2lmZGVmIExfYWRkdnNpMwpXdHlwZQpfX2FkZHZzaTMgKFd0eXBlIGEsIFd0eXBlIGIpCnsKICBX
dHlwZSB3OwoKICB3ID0gYSArIGI7CgogIGlmIChiID49IDAgPyB3IDwgYSA6IHcgPiBhKQogICAg
YWJvcnQgKCk7CgogIHJldHVybiB3Owp9CiNlbmRpZgoMCiNpZmRlZiBMX2FkZHZkaTMKRFd0eXBl
Cl9fYWRkdmRpMyAoRFd0eXBlIGEsIERXdHlwZSBiKQp7CiAgRFd0eXBlIHc7CgogIHcgPSBhICsg
YjsKCiAgaWYgKGIgPj0gMCA/IHcgPCBhIDogdyA+IGEpCiAgICBhYm9ydCAoKTsKCiAgcmV0dXJu
IHc7Cn0KI2VuZGlmCgwKI2lmZGVmIExfc3VidnNpMwpXdHlwZQpfX3N1YnZzaTMgKFd0eXBlIGEs
IFd0eXBlIGIpCnsKI2lmZGVmIExfYWRkdnNpMwogIHJldHVybiBfX2FkZHZzaTMgKGEsICgtYikp
OwojZWxzZQogIERXdHlwZSB3OwoKICB3ID0gYSAtIGI7CgogIGlmIChiID49IDAgPyB3ID4gYSA6
IHcgPCBhKQogICAgYWJvcnQgKCk7CgogIHJldHVybiB3OwojZW5kaWYKfQojZW5kaWYKDAojaWZk
ZWYgTF9zdWJ2ZGkzCkRXdHlwZQpfX3N1YnZkaTMgKERXdHlwZSBhLCBEV3R5cGUgYikKewojaWZk
ZWYgTF9hZGR2ZGkzCiAgcmV0dXJuIChhLCAoLWIpKTsKI2Vsc2UKICBEV3R5cGUgdzsKCiAgdyA9
IGEgLSBiOwoKICBpZiAoYiA+PSAwID8gdyA+IGEgOiB3IDwgYSkKICAgIGFib3J0ICgpOwoKICBy
ZXR1cm4gdzsKI2VuZGlmCn0KI2VuZGlmCgwKI2lmZGVmIExfbXVsdnNpMwpXdHlwZQpfX211bHZz
aTMgKFd0eXBlIGEsIFd0eXBlIGIpCnsKICBEV3R5cGUgdzsKCiAgdyA9IGEgKiBiOwoKICBpZiAo
KChhID49IDApID09IChiID49IDApKSA/IHcgPCAwIDogdyA+IDApCiAgICBhYm9ydCAoKTsKCiAg
cmV0dXJuIHc7Cn0KI2VuZGlmCgwKI2lmZGVmIExfbmVndnNpMgpXdHlwZQpfX25lZ3ZzaTIgKFd0
eXBlIGEpCnsKICAgV3R5cGUgdzsKCiAgIHcgID0gLWE7CgogIGlmIChhID49IDAgPyB3ID4gMCA6
IHcgPCAwKQogICAgYWJvcnQgKCk7CgogICByZXR1cm4gdzsKfQojZW5kaWYKDAojaWZkZWYgTF9u
ZWd2ZGkyCkRXdHlwZQpfX25lZ3ZkaTIgKERXdHlwZSBhKQp7CiAgIERXdHlwZSB3OwoKICAgdyAg
PSAtYTsKCiAgaWYgKGEgPj0gMCA/IHcgPiAwIDogdyA8IDApCiAgICBhYm9ydCAoKTsKCiAgIHJl
dHVybiB3Owp9CiNlbmRpZgoMCiN1bmRlZiBMX2Fic3ZzaTIgLy8gSm9uYSAwOWp1bjAyIDA2OjQx
CiNpZmRlZiBMX2Fic3ZzaTIKV3R5cGUKX19hYnN2c2kyIChXdHlwZSBhKQp7CiAgIFd0eXBlIHcg
PSBhOwoKICAgaWYgKGEgPCAwKQojaWZkZWYgTF9uZWd2c2kyCiAgICAgdyA9IF9fbmVndnNpMiAo
YSk7CiNlbHNlCiAgICAgdyA9IC1hOwoKICAgaWYgKHcgPCAwKQogICAgIGFib3J0ICgpOwojZW5k
aWYKCiAgIHJldHVybiB3Owp9CiNlbmRpZgoMCiNpZmRlZiBMX2Fic3ZkaTIKRFd0eXBlCl9fYWJz
dmRpMiAoRFd0eXBlIGEpCnsKICAgRFd0eXBlIHcgPSBhOwoKICAgaWYgKGEgPCAwKQojaWZkZWYg
TF9uZWd2c2kyCiAgICAgdyA9IF9fbmVndnNpMiAoYSk7CiNlbHNlCiAgICAgdyA9IC1hOwoKICAg
aWYgKHcgPCAwKQogICAgIGFib3J0ICgpOwojZW5kaWYKCiAgIHJldHVybiB3Owp9CiNlbmRpZgoM
CiNpZmRlZiBMX211bHZkaTMKRFd0eXBlCl9fbXVsdmRpMyAoRFd0eXBlIHUsIERXdHlwZSB2KQp7
CiAgIERXdHlwZSB3OwoKICB3ID0gdSAqIHY7CgogIGlmICgoKHUgPj0gMCkgPT0gKHYgPj0gMCkp
ID8gdyA8IDAgOiB3ID4gMCkKICAgIGFib3J0ICgpOwoKICByZXR1cm4gdzsKfQojZW5kaWYKDAoK
LyogVW5sZXNzIHNoaWZ0IGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aGl0aCBmdWxsIEFOU0kgcHJv
dG90eXBlcywKICAgcGFyYW1ldGVyIGIgd2lsbCBiZSBwcm9tb3RlZCB0byBpbnQgaWYgd29yZF90
eXBlIGlzIHNtYWxsZXIgdGhhbiBhbiBpbnQuICAqLwojaWZkZWYgTF9sc2hyZGkzCkRXdHlwZQpf
X2xzaHJkaTMgKERXdHlwZSB1LCB3b3JkX3R5cGUgYikKewogIERXdW5pb24gdzsKICB3b3JkX3R5
cGUgYm07CiAgRFd1bmlvbiB1dTsKCiAgaWYgKGIgPT0gMCkKICAgIHJldHVybiB1OwoKICB1dS5s
bCA9IHU7CgogIGJtID0gKHNpemVvZiAoV3R5cGUpICogQklUU19QRVJfVU5JVCkgLSBiOwogIGlm
IChibSA8PSAwKQogICAgewogICAgICB3LnMuaGlnaCA9IDA7CiAgICAgIHcucy5sb3cgPSAoVVd0
eXBlKSB1dS5zLmhpZ2ggPj4gLWJtOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgVVd0eXBlIGNh
cnJpZXMgPSAoVVd0eXBlKSB1dS5zLmhpZ2ggPDwgYm07CgogICAgICB3LnMuaGlnaCA9IChVV3R5
cGUpIHV1LnMuaGlnaCA+PiBiOwogICAgICB3LnMubG93ID0gKChVV3R5cGUpIHV1LnMubG93ID4+
IGIpIHwgY2FycmllczsKICAgIH0KCiAgcmV0dXJuIHcubGw7Cn0KI2VuZGlmCgojaWZkZWYgTF9h
c2hsZGkzCkRXdHlwZQpfX2FzaGxkaTMgKERXdHlwZSB1LCB3b3JkX3R5cGUgYikKewogIERXdW5p
b24gdzsKICB3b3JkX3R5cGUgYm07CiAgRFd1bmlvbiB1dTsKCiAgaWYgKGIgPT0gMCkKICAgIHJl
dHVybiB1OwoKICB1dS5sbCA9IHU7CgogIGJtID0gKHNpemVvZiAoV3R5cGUpICogQklUU19QRVJf
VU5JVCkgLSBiOwogIGlmIChibSA8PSAwKQogICAgewogICAgICB3LnMubG93ID0gMDsKICAgICAg
dy5zLmhpZ2ggPSAoVVd0eXBlKSB1dS5zLmxvdyA8PCAtYm07CiAgICB9CiAgZWxzZQogICAgewog
ICAgICBVV3R5cGUgY2FycmllcyA9IChVV3R5cGUpIHV1LnMubG93ID4+IGJtOwoKICAgICAgdy5z
LmxvdyA9IChVV3R5cGUpIHV1LnMubG93IDw8IGI7CiAgICAgIHcucy5oaWdoID0gKChVV3R5cGUp
IHV1LnMuaGlnaCA8PCBiKSB8IGNhcnJpZXM7CiAgICB9CgogIHJldHVybiB3LmxsOwp9CiNlbmRp
ZgoKI2lmZGVmIExfYXNocmRpMwpEV3R5cGUKX19hc2hyZGkzIChEV3R5cGUgdSwgd29yZF90eXBl
IGIpCnsKICBEV3VuaW9uIHc7CiAgd29yZF90eXBlIGJtOwogIERXdW5pb24gdXU7CgogIGlmIChi
ID09IDApCiAgICByZXR1cm4gdTsKCiAgdXUubGwgPSB1OwoKICBibSA9IChzaXplb2YgKFd0eXBl
KSAqIEJJVFNfUEVSX1VOSVQpIC0gYjsKICBpZiAoYm0gPD0gMCkKICAgIHsKICAgICAgLyogdy5z
LmhpZ2ggPSAxLi4xIG9yIDAuLjAgKi8KICAgICAgdy5zLmhpZ2ggPSB1dS5zLmhpZ2ggPj4gKHNp
emVvZiAoV3R5cGUpICogQklUU19QRVJfVU5JVCAtIDEpOwogICAgICB3LnMubG93ID0gdXUucy5o
aWdoID4+IC1ibTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIFVXdHlwZSBjYXJyaWVzID0gKFVX
dHlwZSkgdXUucy5oaWdoIDw8IGJtOwoKICAgICAgdy5zLmhpZ2ggPSB1dS5zLmhpZ2ggPj4gYjsK
ICAgICAgdy5zLmxvdyA9ICgoVVd0eXBlKSB1dS5zLmxvdyA+PiBiKSB8IGNhcnJpZXM7CiAgICB9
CgogIHJldHVybiB3LmxsOwp9CiNlbmRpZgoMCiN1bmRlZiBMX2Zmc2RpMiAvLyBKb25hIDA5anVu
MDIgMDY6MzEKI2lmZGVmIExfZmZzZGkyCkRXdHlwZQpfX2Zmc2RpMiAoRFd0eXBlIHUpCnsKICBE
V3VuaW9uIHV1OwogIFVXdHlwZSB3b3JkLCBjb3VudCwgYWRkOwoKICB1dS5sbCA9IHU7CiAgaWYg
KHV1LnMubG93ICE9IDApCiAgICB3b3JkID0gdXUucy5sb3csIGFkZCA9IDA7CiAgZWxzZSBpZiAo
dXUucy5oaWdoICE9IDApCiAgICB3b3JkID0gdXUucy5oaWdoLCBhZGQgPSBCSVRTX1BFUl9VTklU
ICogc2l6ZW9mIChXdHlwZSk7CiAgZWxzZQogICAgcmV0dXJuIDA7CgogIGNvdW50X3RyYWlsaW5n
X3plcm9zIChjb3VudCwgd29yZCk7CiAgcmV0dXJuIGNvdW50ICsgYWRkICsgMTsKfQojZW5kaWYK
DAojaWZkZWYgTF9tdWxkaTMKRFd0eXBlCl9fbXVsZGkzIChEV3R5cGUgdSwgRFd0eXBlIHYpCnsK
ICBEV3VuaW9uIHc7CiAgRFd1bmlvbiB1dSwgdnY7CgogIHV1LmxsID0gdSwKICB2di5sbCA9IHY7
CgogIHcubGwgPSBfX3VtdWxzaWRpMyAodXUucy5sb3csIHZ2LnMubG93KTsKICB3LnMuaGlnaCAr
PSAoKFVXdHlwZSkgdXUucy5sb3cgKiAoVVd0eXBlKSB2di5zLmhpZ2gKCSAgICAgICArIChVV3R5
cGUpIHV1LnMuaGlnaCAqIChVV3R5cGUpIHZ2LnMubG93KTsKCiAgcmV0dXJuIHcubGw7Cn0KI2Vu
ZGlmCgwKI2lmZGVmIExfdWRpdl93X3NkaXYKI2lmIGRlZmluZWQgKHNkaXZfcXJubmQpClVXdHlw
ZQpfX3VkaXZfd19zZGl2IChVV3R5cGUgKnJwLCBVV3R5cGUgYTEsIFVXdHlwZSBhMCwgVVd0eXBl
IGQpCnsKICBVV3R5cGUgcSwgcjsKICBVV3R5cGUgYzAsIGMxLCBiMTsKCiAgaWYgKChXdHlwZSkg
ZCA+PSAwKQogICAgewogICAgICBpZiAoYTEgPCBkIC0gYTEgLSAoYTAgPj4gKFdfVFlQRV9TSVpF
IC0gMSkpKQoJewoJICAvKiBkaXZpZGVuZCwgZGl2aXNvciwgYW5kIHF1b3RpZW50IGFyZSBub25u
ZWdhdGl2ZSAqLwoJICBzZGl2X3Fybm5kIChxLCByLCBhMSwgYTAsIGQpOwoJfQogICAgICBlbHNl
Cgl7CgkgIC8qIENvbXB1dGUgYzEqMl4zMiArIGMwID0gYTEqMl4zMiArIGEwIC0gMl4zMSpkICov
CgkgIHN1Yl9kZG1tc3MgKGMxLCBjMCwgYTEsIGEwLCBkID4+IDEsIGQgPDwgKFdfVFlQRV9TSVpF
IC0gMSkpOwoJICAvKiBEaXZpZGUgKGMxKjJeMzIgKyBjMCkgYnkgZCAqLwoJICBzZGl2X3Fybm5k
IChxLCByLCBjMSwgYzAsIGQpOwoJICAvKiBBZGQgMl4zMSB0byBxdW90aWVudCAqLwoJICBxICs9
IChVV3R5cGUpIDEgPDwgKFdfVFlQRV9TSVpFIC0gMSk7Cgl9CiAgICB9CiAgZWxzZQogICAgewog
ICAgICBiMSA9IGQgPj4gMTsJCQkvKiBkLzIsIGJldHdlZW4gMl4zMCBhbmQgMl4zMSAtIDEgKi8K
ICAgICAgYzEgPSBhMSA+PiAxOwkJCS8qIEEvMiAqLwogICAgICBjMCA9IChhMSA8PCAoV19UWVBF
X1NJWkUgLSAxKSkgKyAoYTAgPj4gMSk7CgogICAgICBpZiAoYTEgPCBiMSkJCQkvKiBBIDwgMl4z
MipiMSwgc28gQS8yIDwgMl4zMSpiMSAqLwoJewoJICBzZGl2X3Fybm5kIChxLCByLCBjMSwgYzAs
IGIxKTsgLyogKEEvMikgLyAoZC8yKSAqLwoKCSAgciA9IDIqciArIChhMCAmIDEpOwkJLyogUmVt
YWluZGVyIGZyb20gQS8oMipiMSkgKi8KCSAgaWYgKChkICYgMSkgIT0gMCkKCSAgICB7CgkgICAg
ICBpZiAociA+PSBxKQoJCXIgPSByIC0gcTsKCSAgICAgIGVsc2UgaWYgKHEgLSByIDw9IGQpCgkJ
ewoJCSAgciA9IHIgLSBxICsgZDsKCQkgIHEtLTsKCQl9CgkgICAgICBlbHNlCgkJewoJCSAgciA9
IHIgLSBxICsgMipkOwoJCSAgcSAtPSAyOwoJCX0KCSAgICB9Cgl9CiAgICAgIGVsc2UgaWYgKGMx
IDwgYjEpCQkJLyogU28gMl4zMSA8PSAoQS8yKS9iMSA8IDJeMzIgKi8KCXsKCSAgYzEgPSAoYjEg
LSAxKSAtIGMxOwoJICBjMCA9IH5jMDsJCQkvKiBsb2dpY2FsIE5PVCAqLwoKCSAgc2Rpdl9xcm5u
ZCAocSwgciwgYzEsIGMwLCBiMSk7IC8qIChBLzIpIC8gKGQvMikgKi8KCgkgIHEgPSB+cTsJCQkv
KiAoQS8yKS9iMSAqLwoJICByID0gKGIxIC0gMSkgLSByOwoKCSAgciA9IDIqciArIChhMCAmIDEp
OwkJLyogQS8oMipiMSkgKi8KCgkgIGlmICgoZCAmIDEpICE9IDApCgkgICAgewoJICAgICAgaWYg
KHIgPj0gcSkKCQlyID0gciAtIHE7CgkgICAgICBlbHNlIGlmIChxIC0gciA8PSBkKQoJCXsKCQkg
IHIgPSByIC0gcSArIGQ7CgkJICBxLS07CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgIHIgPSByIC0g
cSArIDIqZDsKCQkgIHEgLT0gMjsKCQl9CgkgICAgfQoJfQogICAgICBlbHNlCQkJCS8qIEltcGxp
ZXMgYzEgPSBiMSAqLwoJewkJCQkvKiBIZW5jZSBhMSA9IGQgLSAxID0gMipiMSAtIDEgKi8KCSAg
aWYgKGEwID49IC1kKQoJICAgIHsKCSAgICAgIHEgPSAtMTsKCSAgICAgIHIgPSBhMCArIGQ7Cgkg
ICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgcSA9IC0yOwoJICAgICAgciA9IGEwICsgMipkOwoJ
ICAgIH0KCX0KICAgIH0KCiAgKnJwID0gcjsKICByZXR1cm4gcTsKfQojZWxzZQovKiBJZiBzZGl2
X3Fybm5kIGRvZXNuJ3QgZXhpc3QsIGRlZmluZSBkdW1teSBfX3VkaXZfd19zZGl2LiAgKi8KVVd0
eXBlCl9fdWRpdl93X3NkaXYgKFVXdHlwZSAqcnAgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18p
KSwKCSAgICAgICBVV3R5cGUgYTEgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKCSAgICAg
ICBVV3R5cGUgYTAgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKCSAgICAgICBVV3R5cGUg
ZCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpKQp7CiAgcmV0dXJuIDA7Cn0KI2VuZGlmCiNl
bmRpZgoMCiNpZiAoZGVmaW5lZCAoTF91ZGl2ZGkzKSB8fCBkZWZpbmVkIChMX2RpdmRpMykgfHwg
XAogICAgIGRlZmluZWQgKExfdW1vZGRpMykgfHwgZGVmaW5lZCAoTF9tb2RkaTMpKQojZGVmaW5l
IExfdWRpdm1vZGRpNAojZW5kaWYKCiNpZmRlZiBMX2Nsegpjb25zdCBVUUl0eXBlIF9fY2x6X3Rh
YltdID0KewogIDAsMSwyLDIsMywzLDMsMyw0LDQsNCw0LDQsNCw0LDQsNSw1LDUsNSw1LDUsNSw1
LDUsNSw1LDUsNSw1LDUsNSwKICA2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2
LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsCiAgNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3
LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LAogIDcsNyw3LDcsNyw3LDcsNyw3
LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNywKICA4LDgsOCw4
LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgs
CiAgOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgs
OCw4LDgsOCw4LAogIDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgs
OCw4LDgsOCw4LDgsOCw4LDgsOCwKICA4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgs
OCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsCn07CiNlbmRpZgoKI2lmZGVmIExfdWRpdm1v
ZGRpNAoKI2lmIChkZWZpbmVkIChMX3VkaXZkaTMpIHx8IGRlZmluZWQgKExfZGl2ZGkzKSB8fCBc
CiAgICAgZGVmaW5lZCAoTF91bW9kZGkzKSB8fCBkZWZpbmVkIChMX21vZGRpMykpCnN0YXRpYyBp
bmxpbmUKI2VuZGlmClVEV3R5cGUKX191ZGl2bW9kZGk0IChVRFd0eXBlIG4sIFVEV3R5cGUgZCwg
VURXdHlwZSAqcnApCnsKICBEV3VuaW9uIHd3OwogIERXdW5pb24gbm4sIGRkOwogIERXdW5pb24g
cnI7CiAgVVd0eXBlIGQwLCBkMSwgbjAsIG4xLCBuMjsKICBVV3R5cGUgcTAsIHExOwogIFVXdHlw
ZSBiLCBibTsKCiAgbm4ubGwgPSBuOwogIGRkLmxsID0gZDsKCiAgZDAgPSBkZC5zLmxvdzsKICBk
MSA9IGRkLnMuaGlnaDsKICBuMCA9IG5uLnMubG93OwogIG4xID0gbm4ucy5oaWdoOwoKI2lmICFV
RElWX05FRURTX05PUk1BTElaQVRJT04KICBpZiAoZDEgPT0gMCkKICAgIHsKICAgICAgaWYgKGQw
ID4gbjEpCgl7CgkgIC8qIDBxID0gbm4gLyAwRCAqLwoKCSAgdWRpdl9xcm5uZCAocTAsIG4wLCBu
MSwgbjAsIGQwKTsKCSAgcTEgPSAwOwoKCSAgLyogUmVtYWluZGVyIGluIG4wLiAgKi8KCX0KICAg
ICAgZWxzZQoJewoJICAvKiBxcSA9IE5OIC8gMGQgKi8KCgkgIGlmIChkMCA9PSAwKQoJICAgIGQw
ID0gMSAvIGQwOwkvKiBEaXZpZGUgaW50ZW50aW9uYWxseSBieSB6ZXJvLiAgKi8KCgkgIHVkaXZf
cXJubmQgKHExLCBuMSwgMCwgbjEsIGQwKTsKCSAgdWRpdl9xcm5uZCAocTAsIG4wLCBuMSwgbjAs
IGQwKTsKCgkgIC8qIFJlbWFpbmRlciBpbiBuMC4gICovCgl9CgogICAgICBpZiAocnAgIT0gMCkK
CXsKCSAgcnIucy5sb3cgPSBuMDsKCSAgcnIucy5oaWdoID0gMDsKCSAgKnJwID0gcnIubGw7Cgl9
CiAgICB9CgojZWxzZSAvKiBVRElWX05FRURTX05PUk1BTElaQVRJT04gKi8KCiAgaWYgKGQxID09
IDApCiAgICB7CiAgICAgIGlmIChkMCA+IG4xKQoJewoJICAvKiAwcSA9IG5uIC8gMEQgKi8KCgkg
IGNvdW50X2xlYWRpbmdfemVyb3MgKGJtLCBkMCk7CgoJICBpZiAoYm0gIT0gMCkKCSAgICB7Cgkg
ICAgICAvKiBOb3JtYWxpemUsIGkuZS4gbWFrZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2Yg
dGhlCgkJIGRlbm9taW5hdG9yIHNldC4gICovCgoJICAgICAgZDAgPSBkMCA8PCBibTsKCSAgICAg
IG4xID0gKG4xIDw8IGJtKSB8IChuMCA+PiAoV19UWVBFX1NJWkUgLSBibSkpOwoJICAgICAgbjAg
PSBuMCA8PCBibTsKCSAgICB9CgoJICB1ZGl2X3Fybm5kIChxMCwgbjAsIG4xLCBuMCwgZDApOwoJ
ICBxMSA9IDA7CgoJICAvKiBSZW1haW5kZXIgaW4gbjAgPj4gYm0uICAqLwoJfQogICAgICBlbHNl
Cgl7CgkgIC8qIHFxID0gTk4gLyAwZCAqLwoKCSAgaWYgKGQwID09IDApCgkgICAgZDAgPSAxIC8g
ZDA7CS8qIERpdmlkZSBpbnRlbnRpb25hbGx5IGJ5IHplcm8uICAqLwoKCSAgY291bnRfbGVhZGlu
Z196ZXJvcyAoYm0sIGQwKTsKCgkgIGlmIChibSA9PSAwKQoJICAgIHsKCSAgICAgIC8qIEZyb20g
KG4xID49IGQwKSAvXCAodGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGQwIGlzIHNldCksCgkJ
IGNvbmNsdWRlICh0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgbjEgaXMgc2V0KSAvXCAodGhl
CgkJIGxlYWRpbmcgcXVvdGllbnQgZGlnaXQgcTEgPSAxKS4KCgkJIFRoaXMgc3BlY2lhbCBjYXNl
IGlzIG5lY2Vzc2FyeSwgbm90IGFuIG9wdGltaXphdGlvbi4KCQkgKFNoaWZ0cyBjb3VudHMgb2Yg
V19UWVBFX1NJWkUgYXJlIHVuZGVmaW5lZC4pICAqLwoKCSAgICAgIG4xIC09IGQwOwoJICAgICAg
cTEgPSAxOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgIC8qIE5vcm1hbGl6ZS4gICovCgoJ
ICAgICAgYiA9IFdfVFlQRV9TSVpFIC0gYm07CgoJICAgICAgZDAgPSBkMCA8PCBibTsKCSAgICAg
IG4yID0gbjEgPj4gYjsKCSAgICAgIG4xID0gKG4xIDw8IGJtKSB8IChuMCA+PiBiKTsKCSAgICAg
IG4wID0gbjAgPDwgYm07CgoJICAgICAgdWRpdl9xcm5uZCAocTEsIG4xLCBuMiwgbjEsIGQwKTsK
CSAgICB9CgoJICAvKiBuMSAhPSBkMC4uLiAgKi8KCgkgIHVkaXZfcXJubmQgKHEwLCBuMCwgbjEs
IG4wLCBkMCk7CgoJICAvKiBSZW1haW5kZXIgaW4gbjAgPj4gYm0uICAqLwoJfQoKICAgICAgaWYg
KHJwICE9IDApCgl7CgkgIHJyLnMubG93ID0gbjAgPj4gYm07CgkgIHJyLnMuaGlnaCA9IDA7Cgkg
ICpycCA9IHJyLmxsOwoJfQogICAgfQojZW5kaWYgLyogVURJVl9ORUVEU19OT1JNQUxJWkFUSU9O
ICovCgogIGVsc2UKICAgIHsKICAgICAgaWYgKGQxID4gbjEpCgl7CgkgIC8qIDAwID0gbm4gLyBE
RCAqLwoKCSAgcTAgPSAwOwoJICBxMSA9IDA7CgoJICAvKiBSZW1haW5kZXIgaW4gbjFuMC4gICov
CgkgIGlmIChycCAhPSAwKQoJICAgIHsKCSAgICAgIHJyLnMubG93ID0gbjA7CgkgICAgICByci5z
LmhpZ2ggPSBuMTsKCSAgICAgICpycCA9IHJyLmxsOwoJICAgIH0KCX0KICAgICAgZWxzZQoJewoJ
ICAvKiAwcSA9IE5OIC8gZGQgKi8KCgkgIGNvdW50X2xlYWRpbmdfemVyb3MgKGJtLCBkMSk7Cgkg
IGlmIChibSA9PSAwKQoJICAgIHsKCSAgICAgIC8qIEZyb20gKG4xID49IGQxKSAvXCAodGhlIG1v
c3Qgc2lnbmlmaWNhbnQgYml0IG9mIGQxIGlzIHNldCksCgkJIGNvbmNsdWRlICh0aGUgbW9zdCBz
aWduaWZpY2FudCBiaXQgb2YgbjEgaXMgc2V0KSAvXCAodGhlCgkJIHF1b3RpZW50IGRpZ2l0IHEw
ID0gMCBvciAxKS4KCgkJIFRoaXMgc3BlY2lhbCBjYXNlIGlzIG5lY2Vzc2FyeSwgbm90IGFuIG9w
dGltaXphdGlvbi4gICovCgoJICAgICAgLyogVGhlIGNvbmRpdGlvbiBvbiB0aGUgbmV4dCBsaW5l
IHRha2VzIGFkdmFudGFnZSBvZiB0aGF0CgkJIG4xID49IGQxICh0cnVlIGR1ZSB0byBwcm9ncmFt
IGZsb3cpLiAgKi8KCSAgICAgIGlmIChuMSA+IGQxIHx8IG4wID49IGQwKQoJCXsKCQkgIHEwID0g
MTsKCQkgIHN1Yl9kZG1tc3MgKG4xLCBuMCwgbjEsIG4wLCBkMSwgZDApOwoJCX0KCSAgICAgIGVs
c2UKCQlxMCA9IDA7CgoJICAgICAgcTEgPSAwOwoKCSAgICAgIGlmIChycCAhPSAwKQoJCXsKCQkg
IHJyLnMubG93ID0gbjA7CgkJICByci5zLmhpZ2ggPSBuMTsKCQkgICpycCA9IHJyLmxsOwoJCX0K
CSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICBVV3R5cGUgbTEsIG0wOwoJICAgICAgLyogTm9y
bWFsaXplLiAgKi8KCgkgICAgICBiID0gV19UWVBFX1NJWkUgLSBibTsKCgkgICAgICBkMSA9IChk
MSA8PCBibSkgfCAoZDAgPj4gYik7CgkgICAgICBkMCA9IGQwIDw8IGJtOwoJICAgICAgbjIgPSBu
MSA+PiBiOwoJICAgICAgbjEgPSAobjEgPDwgYm0pIHwgKG4wID4+IGIpOwoJICAgICAgbjAgPSBu
MCA8PCBibTsKCgkgICAgICB1ZGl2X3Fybm5kIChxMCwgbjEsIG4yLCBuMSwgZDEpOwoJICAgICAg
dW11bF9wcG1tIChtMSwgbTAsIHEwLCBkMCk7CgoJICAgICAgaWYgKG0xID4gbjEgfHwgKG0xID09
IG4xICYmIG0wID4gbjApKQoJCXsKCQkgIHEwLS07CgkJICBzdWJfZGRtbXNzIChtMSwgbTAsIG0x
LCBtMCwgZDEsIGQwKTsKCQl9CgoJICAgICAgcTEgPSAwOwoKCSAgICAgIC8qIFJlbWFpbmRlciBp
biAobjFuMCAtIG0xbTApID4+IGJtLiAgKi8KCSAgICAgIGlmIChycCAhPSAwKQoJCXsKCQkgIHN1
Yl9kZG1tc3MgKG4xLCBuMCwgbjEsIG4wLCBtMSwgbTApOwoJCSAgcnIucy5sb3cgPSAobjEgPDwg
YikgfCAobjAgPj4gYm0pOwoJCSAgcnIucy5oaWdoID0gbjEgPj4gYm07CgkJICAqcnAgPSByci5s
bDsKCQl9CgkgICAgfQoJfQogICAgfQoKICB3dy5zLmxvdyA9IHEwOwogIHd3LnMuaGlnaCA9IHEx
OwogIHJldHVybiB3dy5sbDsKfQojZW5kaWYKCiNpZmRlZiBMX2RpdmRpMwpEV3R5cGUKX19kaXZk
aTMgKERXdHlwZSB1LCBEV3R5cGUgdikKewogIHdvcmRfdHlwZSBjID0gMDsKICBEV3VuaW9uIHV1
LCB2djsKICBEV3R5cGUgdzsKCiAgdXUubGwgPSB1OwogIHZ2LmxsID0gdjsKCiAgaWYgKHV1LnMu
aGlnaCA8IDApCiAgICBjID0gfmMsCiAgICB1dS5sbCA9IF9fbmVnZGkyICh1dS5sbCk7CiAgaWYg
KHZ2LnMuaGlnaCA8IDApCiAgICBjID0gfmMsCiAgICB2di5sbCA9IF9fbmVnZGkyICh2di5sbCk7
CgogIHcgPSBfX3VkaXZtb2RkaTQgKHV1LmxsLCB2di5sbCwgKFVEV3R5cGUgKikgMCk7CiAgaWYg
KGMpCiAgICB3ID0gX19uZWdkaTIgKHcpOwoKICByZXR1cm4gdzsKfQojZW5kaWYKCiNpZmRlZiBM
X21vZGRpMwpEV3R5cGUKX19tb2RkaTMgKERXdHlwZSB1LCBEV3R5cGUgdikKewogIHdvcmRfdHlw
ZSBjID0gMDsKICBEV3VuaW9uIHV1LCB2djsKICBEV3R5cGUgdzsKCiAgdXUubGwgPSB1OwogIHZ2
LmxsID0gdjsKCiAgaWYgKHV1LnMuaGlnaCA8IDApCiAgICBjID0gfmMsCiAgICB1dS5sbCA9IF9f
bmVnZGkyICh1dS5sbCk7CiAgaWYgKHZ2LnMuaGlnaCA8IDApCiAgICB2di5sbCA9IF9fbmVnZGky
ICh2di5sbCk7CgogICh2b2lkKSBfX3VkaXZtb2RkaTQgKHV1LmxsLCB2di5sbCwgJncpOwogIGlm
IChjKQogICAgdyA9IF9fbmVnZGkyICh3KTsKCiAgcmV0dXJuIHc7Cn0KI2VuZGlmCgojaWZkZWYg
TF91bW9kZGkzClVEV3R5cGUKX191bW9kZGkzIChVRFd0eXBlIHUsIFVEV3R5cGUgdikKewogIFVE
V3R5cGUgdzsKCiAgKHZvaWQpIF9fdWRpdm1vZGRpNCAodSwgdiwgJncpOwoKICByZXR1cm4gdzsK
fQojZW5kaWYKCiNpZmRlZiBMX3VkaXZkaTMKVURXdHlwZQpfX3VkaXZkaTMgKFVEV3R5cGUgbiwg
VURXdHlwZSBkKQp7CiAgcmV0dXJuIF9fdWRpdm1vZGRpNCAobiwgZCwgKFVEV3R5cGUgKikgMCk7
Cn0KI2VuZGlmCgwKI3VuZGVmIExfY21wZGkyIC8vIEpvbmEgMDlqdW4wMiAwNjozMQojaWZkZWYg
TF9jbXBkaTIKd29yZF90eXBlCl9fY21wZGkyIChEV3R5cGUgYSwgRFd0eXBlIGIpCnsKICBEV3Vu
aW9uIGF1LCBidTsKCiAgYXUubGwgPSBhLCBidS5sbCA9IGI7CgogIGlmIChhdS5zLmhpZ2ggPCBi
dS5zLmhpZ2gpCiAgICByZXR1cm4gMDsKICBlbHNlIGlmIChhdS5zLmhpZ2ggPiBidS5zLmhpZ2gp
CiAgICByZXR1cm4gMjsKICBpZiAoKFVXdHlwZSkgYXUucy5sb3cgPCAoVVd0eXBlKSBidS5zLmxv
dykKICAgIHJldHVybiAwOwogIGVsc2UgaWYgKChVV3R5cGUpIGF1LnMubG93ID4gKFVXdHlwZSkg
YnUucy5sb3cpCiAgICByZXR1cm4gMjsKICByZXR1cm4gMTsKfQojZW5kaWYKI3VuZGVmIExfdWNt
cGRpMiAvLyBKb25hIDA5anVuMDIgMDY6MzEKI2lmZGVmIExfdWNtcGRpMgp3b3JkX3R5cGUKX191
Y21wZGkyIChEV3R5cGUgYSwgRFd0eXBlIGIpCnsKICBEV3VuaW9uIGF1LCBidTsKCiAgYXUubGwg
PSBhLCBidS5sbCA9IGI7CgogIGlmICgoVVd0eXBlKSBhdS5zLmhpZ2ggPCAoVVd0eXBlKSBidS5z
LmhpZ2gpCiAgICByZXR1cm4gMDsKICBlbHNlIGlmICgoVVd0eXBlKSBhdS5zLmhpZ2ggPiAoVVd0
eXBlKSBidS5zLmhpZ2gpCiAgICByZXR1cm4gMjsKICBpZiAoKFVXdHlwZSkgYXUucy5sb3cgPCAo
VVd0eXBlKSBidS5zLmxvdykKICAgIHJldHVybiAwOwogIGVsc2UgaWYgKChVV3R5cGUpIGF1LnMu
bG93ID4gKFVXdHlwZSkgYnUucy5sb3cpCiAgICByZXR1cm4gMjsKICByZXR1cm4gMTsKfQojZW5k
aWYKDAojaWYgZGVmaW5lZChMX2ZpeHVuc3RmZGkpICYmIChMSUJHQ0MyX0xPTkdfRE9VQkxFX1RZ
UEVfU0laRSA9PSAxMjgpCiNkZWZpbmUgV09SRF9TSVpFIChzaXplb2YgKFd0eXBlKSAqIEJJVFNf
UEVSX1VOSVQpCiNkZWZpbmUgSElHSF9XT1JEX0NPRUZGICgoKFVEV3R5cGUpIDEpIDw8IFdPUkRf
U0laRSkKCkRXdHlwZQpfX2ZpeHVuc3RmREkgKFRGdHlwZSBhKQp7CiAgVEZ0eXBlIGI7CiAgVURX
dHlwZSB2OwoKICBpZiAoYSA8IDApCiAgICByZXR1cm4gMDsKCiAgLyogQ29tcHV0ZSBoaWdoIHdv
cmQgb2YgcmVzdWx0LCBhcyBhIGZsb251bS4gICovCiAgYiA9IChhIC8gSElHSF9XT1JEX0NPRUZG
KTsKICAvKiBDb252ZXJ0IHRoYXQgdG8gZml4ZWQgKGJ1dCBub3QgdG8gRFd0eXBlISksCiAgICAg
YW5kIHNoaWZ0IGl0IGludG8gdGhlIGhpZ2ggd29yZC4gICovCiAgdiA9IChVV3R5cGUpIGI7CiAg
diA8PD0gV09SRF9TSVpFOwogIC8qIFJlbW92ZSBoaWdoIHBhcnQgZnJvbSB0aGUgVEZ0eXBlLCBs
ZWF2aW5nIHRoZSBsb3cgcGFydCBhcyBmbG9udW0uICAqLwogIGEgLT0gKFRGdHlwZSl2OwogIC8q
IENvbnZlcnQgdGhhdCB0byBmaXhlZCAoYnV0IG5vdCB0byBEV3R5cGUhKSBhbmQgYWRkIGl0IGlu
LgogICAgIFNvbWV0aW1lcyBBIGNvbWVzIG91dCBuZWdhdGl2ZS4gIFRoaXMgaXMgc2lnbmlmaWNh
bnQsIHNpbmNlCiAgICAgQSBoYXMgbW9yZSBiaXRzIHRoYW4gYSBsb25nIGludCBkb2VzLiAgKi8K
ICBpZiAoYSA8IDApCiAgICB2IC09IChVV3R5cGUpICgtIGEpOwogIGVsc2UKICAgIHYgKz0gKFVX
dHlwZSkgYTsKICByZXR1cm4gdjsKfQojZW5kaWYKCiNpZiBkZWZpbmVkKExfZml4dGZkaSkgJiYg
KExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFID09IDEyOCkKRFd0eXBlCl9fZml4dGZkaSAo
VEZ0eXBlIGEpCnsKICBpZiAoYSA8IDApCiAgICByZXR1cm4gLSBfX2ZpeHVuc3RmREkgKC1hKTsK
ICByZXR1cm4gX19maXh1bnN0ZkRJIChhKTsKfQojZW5kaWYKCiNpZiBkZWZpbmVkKExfZml4dW5z
eGZkaSkgJiYgKExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFID09IDk2KQojZGVmaW5lIFdP
UkRfU0laRSAoc2l6ZW9mIChXdHlwZSkgKiBCSVRTX1BFUl9VTklUKQojZGVmaW5lIEhJR0hfV09S
RF9DT0VGRiAoKChVRFd0eXBlKSAxKSA8PCBXT1JEX1NJWkUpCgpEV3R5cGUKX19maXh1bnN4ZkRJ
IChYRnR5cGUgYSkKewogIFhGdHlwZSBiOwogIFVEV3R5cGUgdjsKCiAgaWYgKGEgPCAwKQogICAg
cmV0dXJuIDA7CgogIC8qIENvbXB1dGUgaGlnaCB3b3JkIG9mIHJlc3VsdCwgYXMgYSBmbG9udW0u
ICAqLwogIGIgPSAoYSAvIEhJR0hfV09SRF9DT0VGRik7CiAgLyogQ29udmVydCB0aGF0IHRvIGZp
eGVkIChidXQgbm90IHRvIERXdHlwZSEpLAogICAgIGFuZCBzaGlmdCBpdCBpbnRvIHRoZSBoaWdo
IHdvcmQuICAqLwogIHYgPSAoVVd0eXBlKSBiOwogIHYgPDw9IFdPUkRfU0laRTsKICAvKiBSZW1v
dmUgaGlnaCBwYXJ0IGZyb20gdGhlIFhGdHlwZSwgbGVhdmluZyB0aGUgbG93IHBhcnQgYXMgZmxv
bnVtLiAgKi8KICBhIC09IChYRnR5cGUpdjsKICAvKiBDb252ZXJ0IHRoYXQgdG8gZml4ZWQgKGJ1
dCBub3QgdG8gRFd0eXBlISkgYW5kIGFkZCBpdCBpbi4KICAgICBTb21ldGltZXMgQSBjb21lcyBv
dXQgbmVnYXRpdmUuICBUaGlzIGlzIHNpZ25pZmljYW50LCBzaW5jZQogICAgIEEgaGFzIG1vcmUg
Yml0cyB0aGFuIGEgbG9uZyBpbnQgZG9lcy4gICovCiAgaWYgKGEgPCAwKQogICAgdiAtPSAoVVd0
eXBlKSAoLSBhKTsKICBlbHNlCiAgICB2ICs9IChVV3R5cGUpIGE7CiAgcmV0dXJuIHY7Cn0KI2Vu
ZGlmCgojaWYgZGVmaW5lZChMX2ZpeHhmZGkpICYmIChMSUJHQ0MyX0xPTkdfRE9VQkxFX1RZUEVf
U0laRSA9PSA5NikKRFd0eXBlCl9fZml4eGZkaSAoWEZ0eXBlIGEpCnsKICBpZiAoYSA8IDApCiAg
ICByZXR1cm4gLSBfX2ZpeHVuc3hmREkgKC1hKTsKICByZXR1cm4gX19maXh1bnN4ZkRJIChhKTsK
fQojZW5kaWYKCiNpZmRlZiBMX2ZpeHVuc2RmZGkKI2RlZmluZSBXT1JEX1NJWkUgKHNpemVvZiAo
V3R5cGUpICogQklUU19QRVJfVU5JVCkKI2RlZmluZSBISUdIX1dPUkRfQ09FRkYgKCgoVURXdHlw
ZSkgMSkgPDwgV09SRF9TSVpFKQoKRFd0eXBlCl9fZml4dW5zZGZESSAoREZ0eXBlIGEpCnsKICBE
RnR5cGUgYjsKICBVRFd0eXBlIHY7CgogIGlmIChhIDwgMCkKICAgIHJldHVybiAwOwoKICAvKiBD
b21wdXRlIGhpZ2ggd29yZCBvZiByZXN1bHQsIGFzIGEgZmxvbnVtLiAgKi8KICBiID0gKGEgLyBI
SUdIX1dPUkRfQ09FRkYpOwogIC8qIENvbnZlcnQgdGhhdCB0byBmaXhlZCAoYnV0IG5vdCB0byBE
V3R5cGUhKSwKICAgICBhbmQgc2hpZnQgaXQgaW50byB0aGUgaGlnaCB3b3JkLiAgKi8KICB2ID0g
KFVXdHlwZSkgYjsKICB2IDw8PSBXT1JEX1NJWkU7CiAgLyogUmVtb3ZlIGhpZ2ggcGFydCBmcm9t
IHRoZSBERnR5cGUsIGxlYXZpbmcgdGhlIGxvdyBwYXJ0IGFzIGZsb251bS4gICovCiAgYSAtPSAo
REZ0eXBlKXY7CiAgLyogQ29udmVydCB0aGF0IHRvIGZpeGVkIChidXQgbm90IHRvIERXdHlwZSEp
IGFuZCBhZGQgaXQgaW4uCiAgICAgU29tZXRpbWVzIEEgY29tZXMgb3V0IG5lZ2F0aXZlLiAgVGhp
cyBpcyBzaWduaWZpY2FudCwgc2luY2UKICAgICBBIGhhcyBtb3JlIGJpdHMgdGhhbiBhIGxvbmcg
aW50IGRvZXMuICAqLwogIGlmIChhIDwgMCkKICAgIHYgLT0gKFVXdHlwZSkgKC0gYSk7CiAgZWxz
ZQogICAgdiArPSAoVVd0eXBlKSBhOwogIHJldHVybiB2Owp9CiNlbmRpZgoKI2lmZGVmIExfZml4
ZGZkaQpEV3R5cGUKX19maXhkZmRpIChERnR5cGUgYSkKewogIGlmIChhIDwgMCkKICAgIHJldHVy
biAtIF9fZml4dW5zZGZESSAoLWEpOwogIHJldHVybiBfX2ZpeHVuc2RmREkgKGEpOwp9CiNlbmRp
ZgoKI2lmZGVmIExfZml4dW5zc2ZkaQojZGVmaW5lIFdPUkRfU0laRSAoc2l6ZW9mIChXdHlwZSkg
KiBCSVRTX1BFUl9VTklUKQojZGVmaW5lIEhJR0hfV09SRF9DT0VGRiAoKChVRFd0eXBlKSAxKSA8
PCBXT1JEX1NJWkUpCgpEV3R5cGUKX19maXh1bnNzZkRJIChTRnR5cGUgb3JpZ2luYWxfYSkKewog
IC8qIENvbnZlcnQgdGhlIFNGdHlwZSB0byBhIERGdHlwZSwgYmVjYXVzZSB0aGF0IGlzIHN1cmVs
eSBub3QgZ29pbmcKICAgICB0byBsb3NlIGFueSBiaXRzLiAgU29tZSBkYXkgc29tZW9uZSBlbHNl
IGNhbiB3cml0ZSBhIGZhc3RlciB2ZXJzaW9uCiAgICAgdGhhdCBhdm9pZHMgY29udmVydGluZyB0
byBERnR5cGUsIGFuZCB2ZXJpZnkgaXQgcmVhbGx5IHdvcmtzIHJpZ2h0LiAgKi8KICBERnR5cGUg
YSA9IG9yaWdpbmFsX2E7CiAgREZ0eXBlIGI7CiAgVURXdHlwZSB2OwoKICBpZiAoYSA8IDApCiAg
ICByZXR1cm4gMDsKCiAgLyogQ29tcHV0ZSBoaWdoIHdvcmQgb2YgcmVzdWx0LCBhcyBhIGZsb251
bS4gICovCiAgYiA9IChhIC8gSElHSF9XT1JEX0NPRUZGKTsKICAvKiBDb252ZXJ0IHRoYXQgdG8g
Zml4ZWQgKGJ1dCBub3QgdG8gRFd0eXBlISksCiAgICAgYW5kIHNoaWZ0IGl0IGludG8gdGhlIGhp
Z2ggd29yZC4gICovCiAgdiA9IChVV3R5cGUpIGI7CiAgdiA8PD0gV09SRF9TSVpFOwogIC8qIFJl
bW92ZSBoaWdoIHBhcnQgZnJvbSB0aGUgREZ0eXBlLCBsZWF2aW5nIHRoZSBsb3cgcGFydCBhcyBm
bG9udW0uICAqLwogIGEgLT0gKERGdHlwZSkgdjsKICAvKiBDb252ZXJ0IHRoYXQgdG8gZml4ZWQg
KGJ1dCBub3QgdG8gRFd0eXBlISkgYW5kIGFkZCBpdCBpbi4KICAgICBTb21ldGltZXMgQSBjb21l
cyBvdXQgbmVnYXRpdmUuICBUaGlzIGlzIHNpZ25pZmljYW50LCBzaW5jZQogICAgIEEgaGFzIG1v
cmUgYml0cyB0aGFuIGEgbG9uZyBpbnQgZG9lcy4gICovCiAgaWYgKGEgPCAwKQogICAgdiAtPSAo
VVd0eXBlKSAoLSBhKTsKICBlbHNlCiAgICB2ICs9IChVV3R5cGUpIGE7CiAgcmV0dXJuIHY7Cn0K
I2VuZGlmCgojaWZkZWYgTF9maXhzZmRpCkRXdHlwZQpfX2ZpeHNmZGkgKFNGdHlwZSBhKQp7CiAg
aWYgKGEgPCAwKQogICAgcmV0dXJuIC0gX19maXh1bnNzZkRJICgtYSk7CiAgcmV0dXJuIF9fZml4
dW5zc2ZESSAoYSk7Cn0KI2VuZGlmCgojaWYgZGVmaW5lZChMX2Zsb2F0ZGl4ZikgJiYgKExJQkdD
QzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFID09IDk2KQojZGVmaW5lIFdPUkRfU0laRSAoc2l6ZW9m
IChXdHlwZSkgKiBCSVRTX1BFUl9VTklUKQojZGVmaW5lIEhJR0hfSEFMRldPUkRfQ09FRkYgKCgo
VURXdHlwZSkgMSkgPDwgKFdPUkRfU0laRSAvIDIpKQojZGVmaW5lIEhJR0hfV09SRF9DT0VGRiAo
KChVRFd0eXBlKSAxKSA8PCBXT1JEX1NJWkUpCgpYRnR5cGUKX19mbG9hdGRpeGYgKERXdHlwZSB1
KQp7CiAgWEZ0eXBlIGQ7CgogIGQgPSAoV3R5cGUpICh1ID4+IFdPUkRfU0laRSk7CiAgZCAqPSBI
SUdIX0hBTEZXT1JEX0NPRUZGOwogIGQgKj0gSElHSF9IQUxGV09SRF9DT0VGRjsKICBkICs9IChV
V3R5cGUpICh1ICYgKEhJR0hfV09SRF9DT0VGRiAtIDEpKTsKCiAgcmV0dXJuIGQ7Cn0KI2VuZGlm
CgojaWYgZGVmaW5lZChMX2Zsb2F0ZGl0ZikgJiYgKExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9T
SVpFID09IDEyOCkKI2RlZmluZSBXT1JEX1NJWkUgKHNpemVvZiAoV3R5cGUpICogQklUU19QRVJf
VU5JVCkKI2RlZmluZSBISUdIX0hBTEZXT1JEX0NPRUZGICgoKFVEV3R5cGUpIDEpIDw8IChXT1JE
X1NJWkUgLyAyKSkKI2RlZmluZSBISUdIX1dPUkRfQ09FRkYgKCgoVURXdHlwZSkgMSkgPDwgV09S
RF9TSVpFKQoKVEZ0eXBlCl9fZmxvYXRkaXRmIChEV3R5cGUgdSkKewogIFRGdHlwZSBkOwoKICBk
ID0gKFd0eXBlKSAodSA+PiBXT1JEX1NJWkUpOwogIGQgKj0gSElHSF9IQUxGV09SRF9DT0VGRjsK
ICBkICo9IEhJR0hfSEFMRldPUkRfQ09FRkY7CiAgZCArPSAoVVd0eXBlKSAodSAmIChISUdIX1dP
UkRfQ09FRkYgLSAxKSk7CgogIHJldHVybiBkOwp9CiNlbmRpZgoKI2lmZGVmIExfZmxvYXRkaWRm
CiNkZWZpbmUgV09SRF9TSVpFIChzaXplb2YgKFd0eXBlKSAqIEJJVFNfUEVSX1VOSVQpCiNkZWZp
bmUgSElHSF9IQUxGV09SRF9DT0VGRiAoKChVRFd0eXBlKSAxKSA8PCAoV09SRF9TSVpFIC8gMikp
CiNkZWZpbmUgSElHSF9XT1JEX0NPRUZGICgoKFVEV3R5cGUpIDEpIDw8IFdPUkRfU0laRSkKCkRG
dHlwZQpfX2Zsb2F0ZGlkZiAoRFd0eXBlIHUpCnsKICBERnR5cGUgZDsKCiAgZCA9IChXdHlwZSkg
KHUgPj4gV09SRF9TSVpFKTsKICBkICo9IEhJR0hfSEFMRldPUkRfQ09FRkY7CiAgZCAqPSBISUdI
X0hBTEZXT1JEX0NPRUZGOwogIGQgKz0gKFVXdHlwZSkgKHUgJiAoSElHSF9XT1JEX0NPRUZGIC0g
MSkpOwoKICByZXR1cm4gZDsKfQojZW5kaWYKCiNpZmRlZiBMX2Zsb2F0ZGlzZgojZGVmaW5lIFdP
UkRfU0laRSAoc2l6ZW9mIChXdHlwZSkgKiBCSVRTX1BFUl9VTklUKQojZGVmaW5lIEhJR0hfSEFM
RldPUkRfQ09FRkYgKCgoVURXdHlwZSkgMSkgPDwgKFdPUkRfU0laRSAvIDIpKQojZGVmaW5lIEhJ
R0hfV09SRF9DT0VGRiAoKChVRFd0eXBlKSAxKSA8PCBXT1JEX1NJWkUpCiNkZWZpbmUgRElfU0la
RSAoc2l6ZW9mIChEV3R5cGUpICogQklUU19QRVJfVU5JVCkKCi8qIERlZmluZSBjb2RlcyBmb3Ig
YWxsIHRoZSBmbG9hdCBmb3JtYXRzIHRoYXQgd2Uga25vdyBvZi4gIE5vdGUKICAgdGhhdCB0aGlz
IGlzIGNvcGllZCBmcm9tIHJlYWwuaC4gICovCgojZGVmaW5lIFVOS05PV05fRkxPQVRfRk9STUFU
IDAKI2RlZmluZSBJRUVFX0ZMT0FUX0ZPUk1BVCAxCiNkZWZpbmUgVkFYX0ZMT0FUX0ZPUk1BVCAy
CiNkZWZpbmUgSUJNX0ZMT0FUX0ZPUk1BVCAzCgovKiBEZWZhdWx0IHRvIElFRUUgZmxvYXQgaWYg
bm90IHNwZWNpZmllZC4gIE5lYXJseSBhbGwgbWFjaGluZXMgdXNlIGl0LiAgKi8KI2lmbmRlZiBI
T1NUX0ZMT0FUX0ZPUk1BVAojZGVmaW5lCUhPU1RfRkxPQVRfRk9STUFUCUlFRUVfRkxPQVRfRk9S
TUFUCiNlbmRpZgoKI2lmIEhPU1RfRkxPQVRfRk9STUFUID09IElFRUVfRkxPQVRfRk9STUFUCiNk
ZWZpbmUgREZfU0laRSA1MwojZGVmaW5lIFNGX1NJWkUgMjQKI2VuZGlmCgojaWYgSE9TVF9GTE9B
VF9GT1JNQVQgPT0gSUJNX0ZMT0FUX0ZPUk1BVAojZGVmaW5lIERGX1NJWkUgNTYKI2RlZmluZSBT
Rl9TSVpFIDI0CiNlbmRpZgoKI2lmIEhPU1RfRkxPQVRfRk9STUFUID09IFZBWF9GTE9BVF9GT1JN
QVQKI2RlZmluZSBERl9TSVpFIDU2CiNkZWZpbmUgU0ZfU0laRSAyNAojZW5kaWYKClNGdHlwZQpf
X2Zsb2F0ZGlzZiAoRFd0eXBlIHUpCnsKICAvKiBEbyB0aGUgY2FsY3VsYXRpb24gaW4gREZtb2Rl
CiAgICAgc28gdGhhdCB3ZSBkb24ndCBsb3NlIGFueSBvZiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBo
aWdoIHdvcmQKICAgICB3aGlsZSBtdWx0aXBseWluZyBpdC4gICovCiAgREZ0eXBlIGY7CgogIC8q
IFByb3RlY3QgYWdhaW5zdCBkb3VibGUtcm91bmRpbmcgZXJyb3IuCiAgICAgUmVwcmVzZW50IGFu
eSBsb3ctb3JkZXIgYml0cywgdGhhdCBtaWdodCBiZSB0cnVuY2F0ZWQgaW4gREZtb2RlLAogICAg
IGJ5IGEgYml0IHRoYXQgd29uJ3QgYmUgbG9zdC4gIFRoZSBiaXQgY2FuIGdvIGluIGFueXdoZXJl
IGJlbG93IHRoZQogICAgIHJvdW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBTRm1vZGUuICBBIGZpeGVk
IG1hc2sgYW5kIGJpdCBwb3NpdGlvbgogICAgIGhhbmRsZXMgYWxsIHVzdWFsIGNvbmZpZ3VyYXRp
b25zLiAgSXQgZG9lc24ndCBoYW5kbGUgdGhlIGNhc2UKICAgICBvZiAxMjgtYml0IERJbW9kZSwg
aG93ZXZlci4gICovCiAgaWYgKERGX1NJWkUgPCBESV9TSVpFCiAgICAgICYmIERGX1NJWkUgPiAo
RElfU0laRSAtIERGX1NJWkUgKyBTRl9TSVpFKSkKICAgIHsKI2RlZmluZSBSRVBfQklUICgoVURX
dHlwZSkgMSA8PCAoRElfU0laRSAtIERGX1NJWkUpKQogICAgICBpZiAoISAoLSAoKERXdHlwZSkg
MSA8PCBERl9TSVpFKSA8IHUKCSAgICAgJiYgdSA8ICgoRFd0eXBlKSAxIDw8IERGX1NJWkUpKSkK
CXsKCSAgaWYgKChVRFd0eXBlKSB1ICYgKFJFUF9CSVQgLSAxKSkKCSAgICB1IHw9IFJFUF9CSVQ7
Cgl9CiAgICB9CiAgZiA9IChXdHlwZSkgKHUgPj4gV09SRF9TSVpFKTsKICBmICo9IEhJR0hfSEFM
RldPUkRfQ09FRkY7CiAgZiAqPSBISUdIX0hBTEZXT1JEX0NPRUZGOwogIGYgKz0gKFVXdHlwZSkg
KHUgJiAoSElHSF9XT1JEX0NPRUZGIC0gMSkpOwoKICByZXR1cm4gKFNGdHlwZSkgZjsKfQojZW5k
aWYKCiNpZiBkZWZpbmVkKExfZml4dW5zeGZzaSkgJiYgTElCR0NDMl9MT05HX0RPVUJMRV9UWVBF
X1NJWkUgPT0gOTYKLyogUmVlbmFibGUgdGhlIG5vcm1hbCB0eXBlcywgaW4gY2FzZSBsaW1pdHMu
aCBuZWVkcyB0aGVtLiAgKi8KI3VuZGVmIGNoYXIKI3VuZGVmIHNob3J0CiN1bmRlZiBpbnQKI3Vu
ZGVmIGxvbmcKI3VuZGVmIHVuc2lnbmVkCiN1bmRlZiBmbG9hdAojdW5kZWYgZG91YmxlCiN1bmRl
ZiBNSU4KI3VuZGVmIE1BWAojaW5jbHVkZSA8bGltaXRzLmg+CgpVV3R5cGUKX19maXh1bnN4ZlNJ
IChYRnR5cGUgYSkKewogIGlmIChhID49IC0gKERGdHlwZSkgV3R5cGVfTUlOKQogICAgcmV0dXJu
IChXdHlwZSkgKGEgKyBXdHlwZV9NSU4pIC0gV3R5cGVfTUlOOwogIHJldHVybiAoV3R5cGUpIGE7
Cn0KI2VuZGlmCgojaWZkZWYgTF9maXh1bnNkZnNpCi8qIFJlZW5hYmxlIHRoZSBub3JtYWwgdHlw
ZXMsIGluIGNhc2UgbGltaXRzLmggbmVlZHMgdGhlbS4gICovCiN1bmRlZiBjaGFyCiN1bmRlZiBz
aG9ydAojdW5kZWYgaW50CiN1bmRlZiBsb25nCiN1bmRlZiB1bnNpZ25lZAojdW5kZWYgZmxvYXQK
I3VuZGVmIGRvdWJsZQojdW5kZWYgTUlOCiN1bmRlZiBNQVgKI2luY2x1ZGUgPGxpbWl0cy5oPgoK
VVd0eXBlCl9fZml4dW5zZGZTSSAoREZ0eXBlIGEpCnsKICBpZiAoYSA+PSAtIChERnR5cGUpIFd0
eXBlX01JTikKICAgIHJldHVybiAoV3R5cGUpIChhICsgV3R5cGVfTUlOKSAtIFd0eXBlX01JTjsK
ICByZXR1cm4gKFd0eXBlKSBhOwp9CiNlbmRpZgoKI2lmZGVmIExfZml4dW5zc2ZzaQovKiBSZWVu
YWJsZSB0aGUgbm9ybWFsIHR5cGVzLCBpbiBjYXNlIGxpbWl0cy5oIG5lZWRzIHRoZW0uICAqLwoj
dW5kZWYgY2hhcgojdW5kZWYgc2hvcnQKI3VuZGVmIGludAojdW5kZWYgbG9uZwojdW5kZWYgdW5z
aWduZWQKI3VuZGVmIGZsb2F0CiN1bmRlZiBkb3VibGUKI3VuZGVmIE1JTgojdW5kZWYgTUFYCiNp
bmNsdWRlIDxsaW1pdHMuaD4KClVXdHlwZQpfX2ZpeHVuc3NmU0kgKFNGdHlwZSBhKQp7CiAgaWYg
KGEgPj0gLSAoU0Z0eXBlKSBXdHlwZV9NSU4pCiAgICByZXR1cm4gKFd0eXBlKSAoYSArIFd0eXBl
X01JTikgLSBXdHlwZV9NSU47CiAgcmV0dXJuIChXdHlwZSkgYTsKfQojZW5kaWYKDAovKiBGcm9t
IGhlcmUgb24gZG93biwgdGhlIHJvdXRpbmVzIHVzZSBub3JtYWwgZGF0YSB0eXBlcy4gICovCgoj
ZGVmaW5lIFNJdHlwZSBib2d1c190eXBlCiNkZWZpbmUgVVNJdHlwZSBib2d1c190eXBlCiNkZWZp
bmUgREl0eXBlIGJvZ3VzX3R5cGUKI2RlZmluZSBVREl0eXBlIGJvZ3VzX3R5cGUKI2RlZmluZSBT
RnR5cGUgYm9ndXNfdHlwZQojZGVmaW5lIERGdHlwZSBib2d1c190eXBlCiN1bmRlZiBXdHlwZQoj
dW5kZWYgVVd0eXBlCiN1bmRlZiBIV3R5cGUKI3VuZGVmIFVIV3R5cGUKI3VuZGVmIERXdHlwZQoj
dW5kZWYgVURXdHlwZQoKI3VuZGVmIGNoYXIKI3VuZGVmIHNob3J0CiN1bmRlZiBpbnQKI3VuZGVm
IGxvbmcKI3VuZGVmIHVuc2lnbmVkCiN1bmRlZiBmbG9hdAojdW5kZWYgZG91YmxlCgwKI2lmZGVm
IExfX2djY19iY21wCgovKiBMaWtlIGJjbXAgZXhjZXB0IHRoZSBzaWduIGlzIG1lYW5pbmdmdWwu
CiAgIFJlc3VsdCBpcyBuZWdhdGl2ZSBpZiBTMSBpcyBsZXNzIHRoYW4gUzIsCiAgIHBvc2l0aXZl
IGlmIFMxIGlzIGdyZWF0ZXIsIDAgaWYgUzEgYW5kIFMyIGFyZSBlcXVhbC4gICovCgppbnQKX19n
Y2NfYmNtcCAoY29uc3QgdW5zaWduZWQgY2hhciAqczEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMy
LCBzaXplX3Qgc2l6ZSkKewogIHdoaWxlIChzaXplID4gMCkKICAgIHsKICAgICAgdW5zaWduZWQg
Y2hhciBjMSA9ICpzMSsrLCBjMiA9ICpzMisrOwogICAgICBpZiAoYzEgIT0gYzIpCglyZXR1cm4g
YzEgLSBjMjsKICAgICAgc2l6ZS0tOwogICAgfQogIHJldHVybiAwOwp9CgojZW5kaWYKDAovKiBf
X2VwcmludGYgdXNlZCB0byBiZSB1c2VkIGJ5IEdDQydzIHByaXZhdGUgdmVyc2lvbiBvZiA8YXNz
ZXJ0Lmg+LgogICBXZSBubyBsb25nZXIgcHJvdmlkZSB0aGF0IGhlYWRlciwgYnV0IHRoaXMgcm91
dGluZSByZW1haW5zIGluIGxpYmdjYy5hCiAgIGZvciBiaW5hcnkgYmFja3dhcmQgY29tcGF0aWJp
bGl0eS4gIE5vdGUgdGhhdCBpdCBpcyBub3QgaW5jbHVkZWQgaW4KICAgdGhlIHNoYXJlZCB2ZXJz
aW9uIG9mIGxpYmdjYy4gICovCiNpZmRlZiBMX2VwcmludGYKI2lmbmRlZiBpbmhpYml0X2xpYmMK
CiN1bmRlZiBOVUxMIC8qIEF2b2lkIGVycm9ycyBpZiBzdGRpby5oIGFuZCBvdXIgc3RkZGVmLmgg
bWlzbWF0Y2guICAqLwojaW5jbHVkZSA8c3RkaW8uaD4KCnZvaWQKX19lcHJpbnRmIChjb25zdCBj
aGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmV4cHJlc3Npb24sCgkgICB1bnNpZ25lZCBpbnQgbGlu
ZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCnsKICBmcHJpbnRmIChzdGRlcnIsIHN0cmluZywgZXhw
cmVzc2lvbiwgbGluZSwgZmlsZW5hbWUpOwogIGZmbHVzaCAoc3RkZXJyKTsKICBhYm9ydCAoKTsK
fQoKI2VuZGlmCiNlbmRpZgoKI2lmZGVmIExfYmIKCiNpZiBMT05HX1RZUEVfU0laRSA9PSBHQ09W
X1RZUEVfU0laRQp0eXBlZGVmIGxvbmcgZ2Nvdl90eXBlOwojZWxzZQp0eXBlZGVmIGxvbmcgbG9u
ZyBnY292X3R5cGU7CiNlbmRpZgoKCi8qIFN0cnVjdHVyZSBlbWl0dGVkIGJ5IC1hICAqLwpzdHJ1
Y3QgYmIKewogIGxvbmcgemVyb193b3JkOwogIGNvbnN0IGNoYXIgKmZpbGVuYW1lOwogIGdjb3Zf
dHlwZSAqY291bnRzOwogIGxvbmcgbmNvdW50czsKICBzdHJ1Y3QgYmIgKm5leHQ7CiAgY29uc3Qg
dW5zaWduZWQgbG9uZyAqYWRkcmVzc2VzOwoKICAvKiBPbGRlciBHQ0MncyBkaWQgbm90IGVtaXQg
dGhlc2UgZmllbGRzLiAgKi8KICBsb25nIG53b3JkczsKICBjb25zdCBjaGFyICoqZnVuY3Rpb25z
OwogIGNvbnN0IGxvbmcgKmxpbmVfbnVtczsKICBjb25zdCBjaGFyICoqZmlsZW5hbWVzOwogIGNo
YXIgKmZsYWdzOwp9OwoKI2lmZGVmIEJMT0NLX1BST0ZJTEVSX0NPREUKQkxPQ0tfUFJPRklMRVJf
Q09ERQojZWxzZQojaWZuZGVmIGluaGliaXRfbGliYwoKLyogU2ltcGxlIG1pbmRlZCBiYXNpYyBi
bG9jayBwcm9maWxpbmcgb3V0cHV0IGR1bXBlciBmb3IKICAgc3lzdGVtcyB0aGF0IGRvbid0IHBy
b3ZpZGUgdGNvdiBzdXBwb3J0LiAgQXQgcHJlc2VudCwKICAgaXQgcmVxdWlyZXMgYXRleGl0IGFu
ZCBzdGRpby4gICovCgojdW5kZWYgTlVMTCAvKiBBdm9pZCBlcnJvcnMgaWYgc3RkaW8uaCBhbmQg
b3VyIHN0ZGRlZi5oIG1pc21hdGNoLiAgKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CgojaW5jbHVkZSAi
Z2JsLWN0b3JzLmgiCiNpbmNsdWRlICJnY292LWlvLmgiCiNpbmNsdWRlIDxzdHJpbmcuaD4KI2lm
ZGVmIFRBUkdFVF9IQVNfRl9TRVRMS1cKI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxlcnJu
by5oPgojZW5kaWYKCnN0YXRpYyBzdHJ1Y3QgYmIgKmJiX2hlYWQ7Cgp2b2lkCl9fYmJfZXhpdF9m
dW5jICh2b2lkKQp7CiAgRklMRSAqZGFfZmlsZTsKICBpbnQgaTsKICBzdHJ1Y3QgYmIgKnB0cjsK
CiAgaWYgKGJiX2hlYWQgPT0gMCkKICAgIHJldHVybjsKCiAgaSA9IHN0cmxlbiAoYmJfaGVhZC0+
ZmlsZW5hbWUpIC0gMzsKCgogIGZvciAocHRyID0gYmJfaGVhZDsgcHRyICE9IChzdHJ1Y3QgYmIg
KikgMDsgcHRyID0gcHRyLT5uZXh0KQogICAgewogICAgICBpbnQgZmlyc3RjaGFyOwoKICAgICAg
LyogTWFrZSBzdXJlIHRoZSBvdXRwdXQgZmlsZSBleGlzdHMgLQogICAgICAgICBidXQgZG9uJ3Qg
Y2xvYmJlciBleGl0aW5nIGRhdGEuICAqLwogICAgICBpZiAoKGRhX2ZpbGUgPSBmb3BlbiAocHRy
LT5maWxlbmFtZSwgImEiKSkgIT0gMCkKCWZjbG9zZSAoZGFfZmlsZSk7CgogICAgICAvKiBOZWVk
IHRvIHJlLW9wZW4gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB3cml0ZSBmcm9tIHRoZSBzdGFydC4g
ICovCiAgICAgIGRhX2ZpbGUgPSBmb3BlbiAocHRyLT5maWxlbmFtZSwgInIrYiIpOwogICAgICAv
KiBTb21lIG9sZCBzeXN0ZW1zIG1pZ2h0IG5vdCBhbGxvdyB0aGUgJ2InIG1vZGUgbW9kaWZpZXIu
CiAgICAgICAgIFRoZXJlZm9yZSwgdHJ5IHRvIG9wZW4gd2l0aG91dCBpdC4gIFRoaXMgY2FuIGxl
YWQgdG8gYSByYWNlCiAgICAgICAgIGNvbmRpdGlvbiBzbyB0aGF0IHdoZW4geW91IGRlbGV0ZSBh
bmQgcmUtY3JlYXRlIHRoZSBmaWxlLCB0aGUKICAgICAgICAgZmlsZSBtaWdodCBiZSBvcGVuZWQg
aW4gdGV4dCBtb2RlLCBidXQgdGhlbiwgeW91IHNob3VsZG4ndAogICAgICAgICBkZWxldGUgdGhl
IGZpbGUgaW4gdGhlIGZpcnN0IHBsYWNlLiAgKi8KICAgICAgaWYgKGRhX2ZpbGUgPT0gMCkKCWRh
X2ZpbGUgPSBmb3BlbiAocHRyLT5maWxlbmFtZSwgInIrIik7CiAgICAgIGlmIChkYV9maWxlID09
IDApCgl7CgkgIGZwcmludGYgKHN0ZGVyciwgImFyYyBwcm9maWxpbmc6IENhbid0IG9wZW4gb3V0
cHV0IGZpbGUgJXMuXG4iLAoJCSAgIHB0ci0+ZmlsZW5hbWUpOwoJICBjb250aW51ZTsKCX0KCiAg
ICAgIC8qIEFmdGVyIGEgZm9yaywgYW5vdGhlciBwcm9jZXNzIG1pZ2h0IHRyeSB0byByZWFkIGFu
ZC9vciB3cml0ZQogICAgICAgICB0aGUgc2FtZSBmaWxlIHNpbXVsdGFub3VzbHkuICBTbyBpZiB3
ZSBjYW4sIGxvY2sgdGhlIGZpbGUgdG8KICAgICAgICAgYXZvaWQgcmFjZSBjb25kaXRpb25zLiAg
Ki8KI2lmIGRlZmluZWQgKFRBUkdFVF9IQVNfRl9TRVRMS1cpCiAgICAgIHsKCXN0cnVjdCBmbG9j
ayBzX2Zsb2NrOwoKCXNfZmxvY2subF90eXBlID0gRl9XUkxDSzsKCXNfZmxvY2subF93aGVuY2Ug
PSBTRUVLX1NFVDsKCXNfZmxvY2subF9zdGFydCA9IDA7CglzX2Zsb2NrLmxfbGVuID0gMTsKCXNf
ZmxvY2subF9waWQgPSBnZXRwaWQgKCk7CgoJd2hpbGUgKGZjbnRsIChmaWxlbm8gKGRhX2ZpbGUp
LCBGX1NFVExLVywgJnNfZmxvY2spCgkgICAgICAgJiYgZXJybm8gPT0gRUlOVFIpOwogICAgICB9
CiNlbmRpZgoKICAgICAgLyogSWYgdGhlIGZpbGUgaXMgbm90IGVtcHR5LCBhbmQgdGhlIG51bWJl
ciBvZiBjb3VudHMgaW4gaXQgaXMgdGhlCiAgICAgICAgIHNhbWUsIHRoZW4gbWVyZ2UgdGhlbSBp
bi4gICovCiAgICAgIGZpcnN0Y2hhciA9IGZnZXRjIChkYV9maWxlKTsKICAgICAgaWYgKGZpcnN0
Y2hhciA9PSBFT0YpCgl7CgkgIGlmIChmZXJyb3IgKGRhX2ZpbGUpKQoJICAgIHsKCSAgICAgIGZw
cmludGYgKHN0ZGVyciwgImFyYyBwcm9maWxpbmc6IENhbid0IHJlYWQgb3V0cHV0IGZpbGUgIik7
CgkgICAgICBwZXJyb3IgKHB0ci0+ZmlsZW5hbWUpOwoJICAgIH0KCX0KICAgICAgZWxzZQoJewoJ
ICBsb25nIG5fY291bnRzID0gMDsKCgkgIGlmICh1bmdldGMgKGZpcnN0Y2hhciwgZGFfZmlsZSkg
PT0gRU9GKQoJICAgIHJld2luZCAoZGFfZmlsZSk7CgkgIGlmIChfX3JlYWRfbG9uZyAoJm5fY291
bnRzLCBkYV9maWxlLCA4KSAhPSAwKQoJICAgIHsKCSAgICAgIGZwcmludGYgKHN0ZGVyciwgImFy
YyBwcm9maWxpbmc6IENhbid0IHJlYWQgb3V0cHV0IGZpbGUgJXMuXG4iLAoJCSAgICAgICBwdHIt
PmZpbGVuYW1lKTsKCSAgICAgIGNvbnRpbnVlOwoJICAgIH0KCgkgIGlmIChuX2NvdW50cyA9PSBw
dHItPm5jb3VudHMpCgkgICAgewoJICAgICAgaW50IGk7CgoJICAgICAgZm9yIChpID0gMDsgaSA8
IG5fY291bnRzOyBpKyspCgkJewoJCSAgZ2Nvdl90eXBlIHYgPSAwOwoKCQkgIGlmIChfX3JlYWRf
Z2Nvdl90eXBlICgmdiwgZGFfZmlsZSwgOCkgIT0gMCkKCQkgICAgewoJCSAgICAgIGZwcmludGYg
KHN0ZGVyciwKCQkJICAgICAgICJhcmMgcHJvZmlsaW5nOiBDYW4ndCByZWFkIG91dHB1dCBmaWxl
ICVzLlxuIiwKCQkJICAgICAgIHB0ci0+ZmlsZW5hbWUpOwoJCSAgICAgIGJyZWFrOwoJCSAgICB9
CgkJICBwdHItPmNvdW50c1tpXSArPSB2OwoJCX0KCSAgICB9CgoJfQoKICAgICAgcmV3aW5kIChk
YV9maWxlKTsKCiAgICAgIC8qID8/PyBTaG91bGQgZmlyc3Qgd3JpdGUgYSBoZWFkZXIgdG8gdGhl
IGZpbGUuICBQcmVmZXJhYmx5LCBhIDQgYnl0ZQogICAgICAgICBtYWdpYyBudW1iZXIsIDQgYnl0
ZXMgY29udGFpbmluZyB0aGUgdGltZSB0aGUgcHJvZ3JhbSB3YXMKICAgICAgICAgY29tcGlsZWQs
IDQgYnl0ZXMgY29udGFpbmluZyB0aGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUKICAg
ICAgICAgc291cmNlIGZpbGUsIGFuZCA0IGJ5dGVzIGluZGljYXRpbmcgdGhlIGNvbXBpbGVyIG9w
dGlvbnMgdXNlZC4KCiAgICAgICAgIFRoYXQgd2F5IHdlIGNhbiBlYXNpbHkgdmVyaWZ5IHRoYXQg
dGhlIHByb3BlciBzb3VyY2UvZXhlY3V0YWJsZS8KICAgICAgICAgZGF0YSBmaWxlIGNvbWJpbmF0
aW9uIGlzIGJlaW5nIHVzZWQgZnJvbSBnY292LiAgKi8KCiAgICAgIGlmIChfX3dyaXRlX2djb3Zf
dHlwZSAocHRyLT5uY291bnRzLCBkYV9maWxlLCA4KSAhPSAwKQoJewoKCSAgZnByaW50ZiAoc3Rk
ZXJyLCAiYXJjIHByb2ZpbGluZzogRXJyb3Igd3JpdGluZyBvdXRwdXQgZmlsZSAlcy5cbiIsCgkJ
ICAgcHRyLT5maWxlbmFtZSk7Cgl9CiAgICAgIGVsc2UKCXsKCSAgaW50IGo7CgkgIGdjb3ZfdHlw
ZSAqY291bnRfcHRyID0gcHRyLT5jb3VudHM7CgkgIGludCByZXQgPSAwOwoJICBmb3IgKGogPSBw
dHItPm5jb3VudHM7IGogPiAwOyBqLS0pCgkgICAgewoJICAgICAgaWYgKF9fd3JpdGVfZ2Nvdl90
eXBlICgqY291bnRfcHRyLCBkYV9maWxlLCA4KSAhPSAwKQoJCXsKCQkgIHJldCA9IDE7CgkJICBi
cmVhazsKCQl9CgkgICAgICBjb3VudF9wdHIrKzsKCSAgICB9CgkgIGlmIChyZXQpCgkgICAgZnBy
aW50ZiAoc3RkZXJyLCAiYXJjIHByb2ZpbGluZzogRXJyb3Igd3JpdGluZyBvdXRwdXQgZmlsZSAl
cy5cbiIsCgkJICAgICBwdHItPmZpbGVuYW1lKTsKCX0KCiAgICAgIGlmIChmY2xvc2UgKGRhX2Zp
bGUpID09IEVPRikKCWZwcmludGYgKHN0ZGVyciwgImFyYyBwcm9maWxpbmc6IEVycm9yIGNsb3Np
bmcgb3V0cHV0IGZpbGUgJXMuXG4iLAoJCSBwdHItPmZpbGVuYW1lKTsKICAgIH0KCiAgcmV0dXJu
Owp9Cgp2b2lkCl9fYmJfaW5pdF9mdW5jIChzdHJ1Y3QgYmIgKmJsb2NrcykKewogIC8qIFVzZXIg
aXMgc3VwcG9zZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlyc3Qgd29yZCBpcyBub24tMCwKICAg
ICBidXQganVzdCBpbiBjYXNlLi4uLiAgKi8KCiAgaWYgKGJsb2Nrcy0+emVyb193b3JkKQogICAg
cmV0dXJuOwoKICAvKiBJbml0aWFsaXplIGRlc3RydWN0b3IuICAqLwogIGlmICghYmJfaGVhZCkK
ICAgIGF0ZXhpdCAoX19iYl9leGl0X2Z1bmMpOwoKICAvKiBTZXQgdXAgbGlua2VkIGxpc3QuICAq
LwogIGJsb2Nrcy0+emVyb193b3JkID0gMTsKICBibG9ja3MtPm5leHQgPSBiYl9oZWFkOwogIGJi
X2hlYWQgPSBibG9ja3M7Cn0KCi8qIENhbGxlZCBiZWZvcmUgZm9yayBvciBleGVjIC0gd3JpdGUg
b3V0IHByb2ZpbGUgaW5mb3JtYXRpb24gZ2F0aGVyZWQgc28KICAgZmFyIGFuZCByZXNldCBpdCB0
byB6ZXJvLiAgVGhpcyBhdm9pZHMgZHVwbGljYXRpb24gb3IgbG9zcyBvZiB0aGUKICAgcHJvZmls
ZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCBzbyBmYXIuICAqLwp2b2lkCl9fYmJfZm9ya19mdW5jICh2
b2lkKQp7CiAgc3RydWN0IGJiICpwdHI7CgogIF9fYmJfZXhpdF9mdW5jICgpOwogIGZvciAocHRy
ID0gYmJfaGVhZDsgcHRyICE9IChzdHJ1Y3QgYmIgKikgMDsgcHRyID0gcHRyLT5uZXh0KQogICAg
ewogICAgICBsb25nIGk7CiAgICAgIGZvciAoaSA9IHB0ci0+bmNvdW50cyAtIDE7IGkgPj0gMDsg
aS0tKQoJcHRyLT5jb3VudHNbaV0gPSAwOwogICAgfQp9CgojZW5kaWYgLyogbm90IGluaGliaXRf
bGliYyAqLwojZW5kaWYgLyogbm90IEJMT0NLX1BST0ZJTEVSX0NPREUgKi8KI2VuZGlmIC8qIExf
YmIgKi8KDAojaWZkZWYgTF9jbGVhcl9jYWNoZQovKiBDbGVhciBwYXJ0IG9mIGFuIGluc3RydWN0
aW9uIGNhY2hlLiAgKi8KCiNkZWZpbmUgSU5TTl9DQUNIRV9QTEFORV9TSVpFIChJTlNOX0NBQ0hF
X1NJWkUgLyBJTlNOX0NBQ0hFX0RFUFRIKQoKdm9pZApfX2NsZWFyX2NhY2hlIChjaGFyICpiZWcg
X19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLAoJICAgICAgIGNoYXIgKmVuZCBfX2F0dHJpYnV0
ZV9fKChfX3VudXNlZF9fKSkpCnsKI2lmZGVmIENMRUFSX0lOU05fQ0FDSEUKICBDTEVBUl9JTlNO
X0NBQ0hFIChiZWcsIGVuZCk7CiNlbHNlCiNpZmRlZiBJTlNOX0NBQ0hFX1NJWkUKICBzdGF0aWMg
Y2hhciBhcnJheVtJTlNOX0NBQ0hFX1NJWkUgKyBJTlNOX0NBQ0hFX1BMQU5FX1NJWkUgKyBJTlNO
X0NBQ0hFX0xJTkVfV0lEVEhdOwogIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAgaW50IG9mZnNl
dDsKICB2b2lkICpzdGFydF9hZGRyCiAgdm9pZCAqZW5kX2FkZHI7CiAgdHlwZWRlZiAoKmZ1bmN0
aW9uX3B0cikgKHZvaWQpOwoKI2lmIChJTlNOX0NBQ0hFX1NJWkUgLyBJTlNOX0NBQ0hFX0xJTkVf
V0lEVEgpIDwgMTYKICAvKiBJdCdzIGNoZWFwZXIgdG8gY2xlYXIgdGhlIHdob2xlIGNhY2hlLgog
ICAgIFB1dCBpbiBhIHNlcmllcyBvZiBqdW1wIGluc3RydWN0aW9ucyBzbyB0aGF0IGNhbGxpbmcg
dGhlIGJlZ2lubmluZwogICAgIG9mIHRoZSBjYWNoZSB3aWxsIGNsZWFyIHRoZSB3aG9sZSB0aGlu
Zy4gICovCgogIGlmICghIGluaXRpYWxpemVkKQogICAgewogICAgICBpbnQgcHRyID0gKCgoaW50
KSBhcnJheSArIElOU05fQ0FDSEVfTElORV9XSURUSCAtIDEpCgkJICYgLUlOU05fQ0FDSEVfTElO
RV9XSURUSCk7CiAgICAgIGludCBlbmRfcHRyID0gcHRyICsgSU5TTl9DQUNIRV9TSVpFOwoKICAg
ICAgd2hpbGUgKHB0ciA8IGVuZF9wdHIpCgl7CgkgICooSU5TVFJVQ1RJT05fVFlQRSAqKXB0cgoJ
ICAgID0gSlVNUF9BSEVBRF9JTlNUUlVDVElPTiArIElOU05fQ0FDSEVfTElORV9XSURUSDsKCSAg
cHRyICs9IElOU05fQ0FDSEVfTElORV9XSURUSDsKCX0KICAgICAgKihJTlNUUlVDVElPTl9UWVBF
ICopIChwdHIgLSBJTlNOX0NBQ0hFX0xJTkVfV0lEVEgpID0gUkVUVVJOX0lOU1RSVUNUSU9OOwoK
ICAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgfQoKICAvKiBDYWxsIHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIHNlcXVlbmNlLiAgKi8KICAoKChmdW5jdGlvbl9wdHIpICgoKGludCkgYXJyYXkgKyBJTlNO
X0NBQ0hFX0xJTkVfV0lEVEggLSAxKQoJCSAgICAmIC1JTlNOX0NBQ0hFX0xJTkVfV0lEVEgpKQog
ICAoKSk7CgojZWxzZSAvKiBDYWNoZSBpcyBsYXJnZS4gICovCgogIGlmICghIGluaXRpYWxpemVk
KQogICAgewogICAgICBpbnQgcHRyID0gKCgoaW50KSBhcnJheSArIElOU05fQ0FDSEVfTElORV9X
SURUSCAtIDEpCgkJICYgLUlOU05fQ0FDSEVfTElORV9XSURUSCk7CgogICAgICB3aGlsZSAocHRy
IDwgKGludCkgYXJyYXkgKyBzaXplb2YgYXJyYXkpCgl7CgkgICooSU5TVFJVQ1RJT05fVFlQRSAq
KXB0ciA9IFJFVFVSTl9JTlNUUlVDVElPTjsKCSAgcHRyICs9IElOU05fQ0FDSEVfTElORV9XSURU
SDsKCX0KCiAgICAgIGluaXRpYWxpemVkID0gMTsKICAgIH0KCiAgLyogRmluZCB0aGUgbG9jYXRp
b24gaW4gYXJyYXkgdGhhdCBvY2N1cGllcyB0aGUgc2FtZSBjYWNoZSBsaW5lIGFzIEJFRy4gICov
CgogIG9mZnNldCA9ICgoaW50KSBiZWcgJiAtSU5TTl9DQUNIRV9MSU5FX1dJRFRIKSAmIChJTlNO
X0NBQ0hFX1BMQU5FX1NJWkUgLSAxKTsKICBzdGFydF9hZGRyID0gKCgoaW50KSAoYXJyYXkgKyBJ
TlNOX0NBQ0hFX1BMQU5FX1NJWkUgLSAxKQoJCSAmIC1JTlNOX0NBQ0hFX1BMQU5FX1NJWkUpCgkJ
KyBvZmZzZXQpOwoKICAvKiBDb21wdXRlIHRoZSBjYWNoZSBhbGlnbm1lbnQgb2YgdGhlIHBsYWNl
IHRvIHN0b3AgY2xlYXJpbmcuICAqLwojaWYgMCAgLyogVGhpcyBpcyBub3QgbmVlZGVkIGZvciBn
Y2MncyBwdXJwb3Nlcy4gICovCiAgLyogSWYgdGhlIGJsb2NrIHRvIGNsZWFyIGlzIGJpZ2dlciB0
aGFuIGEgY2FjaGUgcGxhbmUsCiAgICAgd2UgY2xlYXIgdGhlIGVudGlyZSBjYWNoZSwgYW5kIE9G
RlNFVCBpcyBhbHJlYWR5IGNvcnJlY3QuICAqLwogIGlmIChlbmQgPCBiZWcgKyBJTlNOX0NBQ0hF
X1BMQU5FX1NJWkUpCiNlbmRpZgogICAgb2Zmc2V0ID0gKCgoaW50KSAoZW5kICsgSU5TTl9DQUNI
RV9MSU5FX1dJRFRIIC0gMSkKCSAgICAgICAmIC1JTlNOX0NBQ0hFX0xJTkVfV0lEVEgpCgkgICAg
ICAmIChJTlNOX0NBQ0hFX1BMQU5FX1NJWkUgLSAxKSk7CgojaWYgSU5TTl9DQUNIRV9ERVBUSCA+
IDEKICBlbmRfYWRkciA9IChzdGFydF9hZGRyICYgLUlOU05fQ0FDSEVfUExBTkVfU0laRSkgKyBv
ZmZzZXQ7CiAgaWYgKGVuZF9hZGRyIDw9IHN0YXJ0X2FkZHIpCiAgICBlbmRfYWRkciArPSBJTlNO
X0NBQ0hFX1BMQU5FX1NJWkU7CgogIGZvciAocGxhbmUgPSAwOyBwbGFuZSA8IElOU05fQ0FDSEVf
REVQVEg7IHBsYW5lKyspCiAgICB7CiAgICAgIGludCBhZGRyID0gc3RhcnRfYWRkciArIHBsYW5l
ICogSU5TTl9DQUNIRV9QTEFORV9TSVpFOwogICAgICBpbnQgc3RvcCA9IGVuZF9hZGRyICsgcGxh
bmUgKiBJTlNOX0NBQ0hFX1BMQU5FX1NJWkU7CgogICAgICB3aGlsZSAoYWRkciAhPSBzdG9wKQoJ
ewoJICAvKiBDYWxsIHRoZSByZXR1cm4gaW5zdHJ1Y3Rpb24gYXQgQUREUi4gICovCgkgICgoZnVu
Y3Rpb25fcHRyKSBhZGRyKSAoKTsKCgkgIGFkZHIgKz0gSU5TTl9DQUNIRV9MSU5FX1dJRFRIOwoJ
fQogICAgfQojZWxzZSAvKiBqdXN0IG9uZSBwbGFuZSAqLwogIGRvCiAgICB7CiAgICAgIC8qIENh
bGwgdGhlIHJldHVybiBpbnN0cnVjdGlvbiBhdCBTVEFSVF9BRERSLiAgKi8KICAgICAgKChmdW5j
dGlvbl9wdHIpIHN0YXJ0X2FkZHIpICgpOwoKICAgICAgc3RhcnRfYWRkciArPSBJTlNOX0NBQ0hF
X0xJTkVfV0lEVEg7CiAgICB9CiAgd2hpbGUgKChzdGFydF9hZGRyICUgSU5TTl9DQUNIRV9TSVpF
KSAhPSBvZmZzZXQpOwojZW5kaWYgLyoganVzdCBvbmUgcGxhbmUgKi8KI2VuZGlmIC8qIENhY2hl
IGlzIGxhcmdlICovCiNlbmRpZiAvKiBDYWNoZSBleGlzdHMgKi8KI2VuZGlmIC8qIENMRUFSX0lO
U05fQ0FDSEUgKi8KfQoKI2VuZGlmIC8qIExfY2xlYXJfY2FjaGUgKi8KDAojaWZkZWYgTF90cmFt
cG9saW5lCgovKiBKdW1wIHRvIGEgdHJhbXBvbGluZSwgbG9hZGluZyB0aGUgc3RhdGljIGNoYWlu
IGFkZHJlc3MuICAqLwoKI2lmIGRlZmluZWQoV0lOTlQpICYmICEgZGVmaW5lZChfX0NZR1dJTl9f
KSAmJiAhIGRlZmluZWQgKF9VV0lOKQoKbG9uZwpnZXRwYWdlc2l6ZSAodm9pZCkKewojaWZkZWYg
X0FMUEhBXwogIHJldHVybiA4MTkyOwojZWxzZQogIHJldHVybiA0MDk2OwojZW5kaWYKfQoKI2lm
ZGVmIF9faTM4Nl9fCmV4dGVybiBpbnQgVmlydHVhbFByb3RlY3QgKGNoYXIgKiwgaW50LCBpbnQs
IGludCAqKSBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSk7CiNlbmRpZgoKaW50Cm1wcm90ZWN0IChj
aGFyICphZGRyLCBpbnQgbGVuLCBpbnQgcHJvdCkKewogIGludCBucCwgb3A7CgogIGlmIChwcm90
ID09IDcpCiAgICBucCA9IDB4NDA7CiAgZWxzZSBpZiAocHJvdCA9PSA1KQogICAgbnAgPSAweDIw
OwogIGVsc2UgaWYgKHByb3QgPT0gNCkKICAgIG5wID0gMHgxMDsKICBlbHNlIGlmIChwcm90ID09
IDMpCiAgICBucCA9IDB4MDQ7CiAgZWxzZSBpZiAocHJvdCA9PSAxKQogICAgbnAgPSAweDAyOwog
IGVsc2UgaWYgKHByb3QgPT0gMCkKICAgIG5wID0gMHgwMTsKCiAgaWYgKFZpcnR1YWxQcm90ZWN0
IChhZGRyLCBsZW4sIG5wLCAmb3ApKQogICAgcmV0dXJuIDA7CiAgZWxzZQogICAgcmV0dXJuIC0x
Owp9CgojZW5kaWYgLyogV0lOTlQgJiYgISBfX0NZR1dJTl9fICYmICEgX1VXSU4gKi8KCiNpZmRl
ZiBUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUKVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FCiNlbmRp
ZgoKI2lmIGRlZmluZWQgKE5lWFQpICYmIGRlZmluZWQgKF9fTUFDSF9fKQoKLyogTWFrZSBzdGFj
ayBleGVjdXRhYmxlIHNvIHdlIGNhbiBjYWxsIHRyYW1wb2xpbmVzIG9uIHN0YWNrLgogICBUaGlz
IGlzIGNhbGxlZCBmcm9tIElOSVRJQUxJWkVfVFJBTVBPTElORSBpbiBuZXh0LmguICAqLwojaWZk
ZWYgTmVYVFN0ZXAyMQogI2luY2x1ZGUgPG1hY2guaD4KI2Vsc2UKICNpbmNsdWRlIDxtYWNoL21h
Y2guaD4KI2VuZGlmCgp2b2lkCl9fZW5hYmxlX2V4ZWN1dGVfc3RhY2sgKGNoYXIgKmFkZHIpCnsK
ICBrZXJuX3JldHVybl90IHI7CiAgY2hhciAqZWFkZHIgPSBhZGRyICsgVFJBTVBPTElORV9TSVpF
OwogIHZtX2FkZHJlc3NfdCBhID0gKHZtX2FkZHJlc3NfdCkgYWRkcjsKCiAgLyogdHVybiBvbiBl
eGVjdXRlIGFjY2VzcyBvbiBzdGFjayAqLwogIHIgPSB2bV9wcm90ZWN0ICh0YXNrX3NlbGYgKCks
IGEsIFRSQU1QT0xJTkVfU0laRSwgRkFMU0UsIFZNX1BST1RfQUxMKTsKICBpZiAociAhPSBLRVJO
X1NVQ0NFU1MpCiAgICB7CiAgICAgIG1hY2hfZXJyb3IoInZtX3Byb3RlY3QgVk1fUFJPVF9BTEwi
LCByKTsKICAgICAgZXhpdCgxKTsKICAgIH0KCiAgLyogV2UgaW5saW5lIHRoZSBpLWNhY2hlIGlu
dmFsaWRhdGlvbiBmb3Igc3BlZWQgKi8KCiNpZmRlZiBDTEVBUl9JTlNOX0NBQ0hFCiAgQ0xFQVJf
SU5TTl9DQUNIRSAoYWRkciwgZWFkZHIpOwojZWxzZQogIF9fY2xlYXJfY2FjaGUgKChpbnQpIGFk
ZHIsIChpbnQpIGVhZGRyKTsKI2VuZGlmCn0KCiNlbmRpZiAvKiBkZWZpbmVkIChOZVhUKSAmJiBk
ZWZpbmVkIChfX01BQ0hfXykgKi8KCiNpZmRlZiBfX2NvbnZleF9fCgovKiBNYWtlIHN0YWNrIGV4
ZWN1dGFibGUgc28gd2UgY2FuIGNhbGwgdHJhbXBvbGluZXMgb24gc3RhY2suCiAgIFRoaXMgaXMg
Y2FsbGVkIGZyb20gSU5JVElBTElaRV9UUkFNUE9MSU5FIGluIGNvbnZleC5oLiAgKi8KCiNpbmNs
dWRlIDxzeXMvbW1hbi5oPgojaW5jbHVkZSA8c3lzL3ZtcGFyYW0uaD4KI2luY2x1ZGUgPG1hY2hp
bmUvbWFjaHBhcmFtLmg+Cgp2b2lkCl9fZW5hYmxlX2V4ZWN1dGVfc3RhY2sgKHZvaWQpCnsKICBp
bnQgZnA7CiAgc3RhdGljIHVuc2lnbmVkIGxvd2VzdCA9IFVTUlNUQUNLOwogIHVuc2lnbmVkIGN1
cnJlbnQgPSAodW5zaWduZWQpICZmcCAmIC1OQlBHOwoKICBpZiAobG93ZXN0ID4gY3VycmVudCkK
ICAgIHsKICAgICAgdW5zaWduZWQgbGVuID0gbG93ZXN0IC0gY3VycmVudDsKICAgICAgbXJlbWFw
IChjdXJyZW50LCAmbGVuLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLCBNQVBf
UFJJVkFURSk7CiAgICAgIGxvd2VzdCA9IGN1cnJlbnQ7CiAgICB9CgogIC8qIENsZWFyIGluc3Ry
dWN0aW9uIGNhY2hlIGluIGNhc2UgYW4gb2xkIHRyYW1wb2xpbmUgaXMgaW4gaXQuICAqLwogIGFz
bSAoInBpY2giKTsKfQojZW5kaWYgLyogX19jb252ZXhfXyAqLwoKI2lmZGVmIF9fc3lzVjg4X18K
Ci8qIE1vZGlmaWVkIGZyb20gdGhlIGNvbnZleCAtY29kZSBhYm92ZS4gICovCgojaW5jbHVkZSA8
c3lzL3BhcmFtLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3lzL204OGtiY3MuaD4K
CnZvaWQKX19lbmFibGVfZXhlY3V0ZV9zdGFjayAodm9pZCkKewogIGludCBzYXZlX2Vycm5vOwog
IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvd2VzdCA9IFVTUlNUQUNLOwogIHVuc2lnbmVkIGxvbmcg
Y3VycmVudCA9ICh1bnNpZ25lZCBsb25nKSAmc2F2ZV9lcnJubyAmIC1OQlBDOwoKICAvKiBJZ25v
cmUgZXJybm8gYmVpbmcgc2V0LiBtZW1jdGwgc2V0cyBlcnJubyB0byBFSU5WQUwgd2hlbmV2ZXIg
dGhlCiAgICAgYWRkcmVzcyBpcyBzZWVuIGFzICduZWdhdGl2ZScuIFRoYXQgaXMgdGhlIGNhc2Ug
d2l0aCB0aGUgc3RhY2suICAqLwoKICBzYXZlX2Vycm5vPWVycm5vOwogIGlmIChsb3dlc3QgPiBj
dXJyZW50KQogICAgewogICAgICB1bnNpZ25lZCBsZW49bG93ZXN0LWN1cnJlbnQ7CiAgICAgIG1l
bWN0bChjdXJyZW50LGxlbixNQ1RfVEVYVCk7CiAgICAgIGxvd2VzdCA9IGN1cnJlbnQ7CiAgICB9
CiAgZWxzZQogICAgbWVtY3RsKGN1cnJlbnQsTkJQQyxNQ1RfVEVYVCk7CiAgZXJybm89c2F2ZV9l
cnJubzsKfQoKI2VuZGlmIC8qIF9fc3lzVjg4X18gKi8KCiNpZmRlZiBfX3N5c1Y2OF9fCgojaW5j
bHVkZSA8c3lzL3NpZ25hbC5oPgojaW5jbHVkZSA8ZXJybm8uaD4KCi8qIE1vdG9yb2xhIGZvcmdv
dCB0byBwdXQgbWVtY3RsLm8gaW4gdGhlIGxpYnAgdmVyc2lvbiBvZiBsaWJjODgxLmEsCiAgIHNv
IGRlZmluZSBpdCBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaXQgaW4gX19jbGVhcl9pbnNuX2NhY2hl
IGJlbG93ICovCi8qIE9uIG9sZGVyIHZlcnNpb25zIG9mIHRoaXMgT1MsIG5vIG1lbWN0bCBvciBN
Q1RfVEVYVCBhcmUgZGVmaW5lZDsKICAgaGVuY2Ugd2UgZW5hYmxlIHRoaXMgc3R1ZmYgb25seSBp
ZiBNQ1RfVEVYVCBpcyAjZGVmaW5lJ2QuICAqLwoKI2lmZGVmIE1DVF9URVhUCmFzbSgiXG5cCgln
bG9iYWwgbWVtY3RsXG5cCm1lbWN0bDpcblwKCW1vdnEgJjc1LCVkMFxuXAoJdHJhcCAmMFxuXAoJ
YmNjLmIgbm9lcnJvclxuXAoJam1wIGNlcnJvciVcblwKbm9lcnJvcjpcblwKCW1vdnEgJjAsJWQw
XG5cCglydHMiKTsKI2VuZGlmCgovKiBDbGVhciBpbnN0cnVjdGlvbiBjYWNoZSBzbyB3ZSBjYW4g
Y2FsbCB0cmFtcG9saW5lcyBvbiBzdGFjay4KICAgVGhpcyBpcyBjYWxsZWQgZnJvbSBGSU5BTEla
RV9UUkFNUE9MSU5FIGluIG1vdDMzMDAuaC4gICovCgp2b2lkCl9fY2xlYXJfaW5zbl9jYWNoZSAo
dm9pZCkKewojaWZkZWYgTUNUX1RFWFQKICBpbnQgc2F2ZV9lcnJubzsKCiAgLyogUHJlc2VydmUg
ZXJybm8sIGJlY2F1c2UgdXNlcnMgd291bGQgYmUgc3VycHJpc2VkIHRvIGhhdmUKICBlcnJubyBj
aGFuZ2luZyB3aXRob3V0IGV4cGxpY2l0bHkgY2FsbGluZyBhbnkgc3lzdGVtLWNhbGwuICAqLwog
IHNhdmVfZXJybm8gPSBlcnJubzsKCiAgLyogS2VlcCBpdCBzaW1wbGUgOiBtZW1jdGwgKE1DVF9U
RVhUKSBhbHdheXMgZnVsbHkgY2xlYXJzIHRoZSBpbnNuIGNhY2hlLgogICAgIE5vIG5lZWQgdG8g
dXNlIGFuIGFkZHJlc3MgZGVyaXZlZCBmcm9tIF9zdGFydCBvciAlc3AsIGFzIDAgd29ya3MgYWxz
by4gICovCiAgbWVtY3RsKDAsIDQwOTYsIE1DVF9URVhUKTsKICBlcnJubyA9IHNhdmVfZXJybm87
CiNlbmRpZgp9CgojZW5kaWYgLyogX19zeXNWNjhfXyAqLwoKI2lmZGVmIF9fcHlyX18KCiN1bmRl
ZiBOVUxMIC8qIEF2b2lkIGVycm9ycyBpZiBzdGRpby5oIGFuZCBvdXIgc3RkZGVmLmggbWlzbWF0
Y2guICAqLwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgojaW5jbHVkZSA8c3lzL3ZtbWFj
Lmg+CgovKiBNb2RpZmllZCBmcm9tIHRoZSBjb252ZXggLWNvZGUgYWJvdmUuCiAgIG1yZW1hcCBw
cm9taXNlcyB0byBjbGVhciB0aGUgaS1jYWNoZS4gICovCgp2b2lkCl9fZW5hYmxlX2V4ZWN1dGVf
c3RhY2sgKHZvaWQpCnsKICBpbnQgZnA7CiAgaWYgKG1wcm90ZWN0ICgoKHVuc2lnbmVkIGludCkm
ZnAvUEFHU0laKSpQQUdTSVosIFBBR1NJWiwKCQlQUk9UX1JFQUR8UFJPVF9XUklURXxQUk9UX0VY
RUMpKQogICAgewogICAgICBwZXJyb3IgKCJtcHJvdGVjdCBpbiBfX2VuYWJsZV9leGVjdXRlX3N0
YWNrIik7CiAgICAgIGZmbHVzaCAoc3RkZXJyKTsKICAgICAgYWJvcnQgKCk7CiAgICB9Cn0KI2Vu
ZGlmIC8qIF9fcHlyX18gKi8KCiNpZiBkZWZpbmVkIChzb255X25ld3MpICYmIGRlZmluZWQgKFNZ
U1RZUEVfQlNEKQoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2lu
Y2x1ZGUgPHN5cy9wYXJhbS5oPgojaW5jbHVkZSA8c3lzY2FsbC5oPgojaW5jbHVkZSA8bWFjaGlu
ZS9zeXNuZXdzLmg+CgovKiBjYWNoZWZsdXNoIGZ1bmN0aW9uIGZvciBORVdTLU9TIDQuMi4KICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0cmFtcG9saW5lLWluaXRpYWxpemUgY29kZQog
ICBkZWZpbmVkIGluIGNvbmZpZy9taXBzL21pcHMuaC4gICovCgp2b2lkCmNhY2hlZmx1c2ggKGNo
YXIgKmJlZywgaW50IHNpemUsIGludCBmbGFnKQp7CiAgaWYgKHN5c2NhbGwgKFNZU19zeXNuZXdz
LCBORVdTX0NBQ0hFRkxVU0gsIGJlZywgc2l6ZSwgRkxVU0hfQkNBQ0hFKSkKICAgIHsKICAgICAg
cGVycm9yICgiY2FjaGVfZmx1c2giKTsKICAgICAgZmZsdXNoIChzdGRlcnIpOwogICAgICBhYm9y
dCAoKTsKICAgIH0KfQoKI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwojZW5kaWYgLyogTF90cmFtcG9s
aW5lICovCgwKI2lmbmRlZiBfX0NZR1dJTl9fCiNpZmRlZiBMX19tYWluCgojaW5jbHVkZSAiZ2Js
LWN0b3JzLmgiCi8qIFNvbWUgc3lzdGVtcyB1c2UgX19tYWluIGluIGEgd2F5IGluY29tcGF0aWJs
ZSB3aXRoIGl0cyB1c2UgaW4gZ2NjLCBpbiB0aGVzZQogICBjYXNlcyB1c2UgdGhlIG1hY3JvcyBO
QU1FX19NQUlOIHRvIGdpdmUgYSBxdW90ZWQgc3ltYm9sIGFuZCBTWU1CT0xfX01BSU4gdG8KICAg
Z2l2ZSB0aGUgc2FtZSBzeW1ib2wgd2l0aG91dCBxdW90ZXMgZm9yIGFuIGFsdGVybmF0aXZlIGVu
dHJ5IHBvaW50LiAgWW91CiAgIG11c3QgZGVmaW5lIGJvdGgsIG9yIG5laXRoZXIuICAqLwojaWZu
ZGVmIE5BTUVfX01BSU4KI2RlZmluZSBOQU1FX19NQUlOICJfX21haW4iCiNkZWZpbmUgU1lNQk9M
X19NQUlOIF9fbWFpbgojZW5kaWYKCiNpZmRlZiBJTklUX1NFQ1RJT05fQVNNX09QCiN1bmRlZiBI
QVNfSU5JVF9TRUNUSU9OCiNkZWZpbmUgSEFTX0lOSVRfU0VDVElPTgojZW5kaWYKCiNpZiAhZGVm
aW5lZCAoSEFTX0lOSVRfU0VDVElPTikgfHwgIWRlZmluZWQgKE9CSkVDVF9GT1JNQVRfRUxGKQoK
LyogU29tZSBFTEYgY3Jvc3NlcyB1c2UgY3J0c3R1ZmYuYyB0byBwcm92aWRlIF9fQ1RPUl9MSVNU
X18sIGJ1dCB1c2UgdGhpcwogICBjb2RlIHRvIHJ1biBjb25zdHJ1Y3RvcnMuICBJbiB0aGF0IGNh
c2UsIHdlIG5lZWQgdG8gaGFuZGxlIEVIIGhlcmUsIHRvby4gICovCgojaWZkZWYgRUhfRlJBTUVf
U0VDVElPTl9OQU1FCiNpbmNsdWRlICJ1bndpbmQtZHcyLWZkZS5oIgpleHRlcm4gdW5zaWduZWQg
Y2hhciBfX0VIX0ZSQU1FX0JFR0lOX19bXTsKI2VuZGlmCgovKiBSdW4gYWxsIHRoZSBnbG9iYWwg
ZGVzdHJ1Y3RvcnMgb24gZXhpdCBmcm9tIHRoZSBwcm9ncmFtLiAgKi8KCnZvaWQKX19kb19nbG9i
YWxfZHRvcnMgKHZvaWQpCnsKI2lmZGVmIERPX0dMT0JBTF9EVE9SU19CT0RZCiAgRE9fR0xPQkFM
X0RUT1JTX0JPRFk7CiNlbHNlCiAgc3RhdGljIGZ1bmNfcHRyICpwID0gX19EVE9SX0xJU1RfXyAr
IDE7CiAgd2hpbGUgKCpwKQogICAgewogICAgICBwKys7CiAgICAgICgqKHAtMSkpICgpOwogICAg
fQojZW5kaWYKI2lmIGRlZmluZWQgKEVIX0ZSQU1FX1NFQ1RJT05fTkFNRSkgJiYgIWRlZmluZWQg
KEhBU19JTklUX1NFQ1RJT04pCiAgewogICAgc3RhdGljIGludCBjb21wbGV0ZWQgPSAwOwogICAg
aWYgKCEgY29tcGxldGVkKQogICAgICB7Cgljb21wbGV0ZWQgPSAxOwoJX19kZXJlZ2lzdGVyX2Zy
YW1lX2luZm8gKF9fRUhfRlJBTUVfQkVHSU5fXyk7CiAgICAgIH0KICB9CiNlbmRpZgp9CiNlbmRp
ZgoKI2lmbmRlZiBIQVNfSU5JVF9TRUNUSU9OCi8qIFJ1biBhbGwgdGhlIGdsb2JhbCBjb25zdHJ1
Y3RvcnMgb24gZW50cnkgdG8gdGhlIHByb2dyYW0uICAqLwoKdm9pZApfX2RvX2dsb2JhbF9jdG9y
cyAodm9pZCkKewojaWZkZWYgRUhfRlJBTUVfU0VDVElPTl9OQU1FCiAgewogICAgc3RhdGljIHN0
cnVjdCBvYmplY3Qgb2JqZWN0OwogICAgX19yZWdpc3Rlcl9mcmFtZV9pbmZvIChfX0VIX0ZSQU1F
X0JFR0lOX18sICZvYmplY3QpOwogIH0KI2VuZGlmCiAgRE9fR0xPQkFMX0NUT1JTX0JPRFk7CiAg
YXRleGl0IChfX2RvX2dsb2JhbF9kdG9ycyk7Cn0KI2VuZGlmIC8qIG5vIEhBU19JTklUX1NFQ1RJ
T04gKi8KCiNpZiAhZGVmaW5lZCAoSEFTX0lOSVRfU0VDVElPTikgfHwgZGVmaW5lZCAoSU5WT0tF
X19tYWluKQovKiBTdWJyb3V0aW5lIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGBtYWluJy4KICAg
Q29tcGlsaW5nIGEgZ2xvYmFsIGZ1bmN0aW9uIG5hbWVkIGBtYWluJwogICBwcm9kdWNlcyBhbiBh
dXRvbWF0aWMgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBiZWdpbm5pbmcuCgogICBGb3Ig
bWFueSBzeXN0ZW1zLCB0aGlzIHJvdXRpbmUgY2FsbHMgX19kb19nbG9iYWxfY3RvcnMuCiAgIEZv
ciBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgYSAuaW5pdCBzZWN0aW9uIHdlIHVzZSB0aGUgLmluaXQg
c2VjdGlvbgogICB0byBydW4gX19kb19nbG9iYWxfY3RvcnMsIHNvIHdlIG5lZWQgbm90IGRvIGFu
eXRoaW5nIGhlcmUuICAqLwoKdm9pZApTWU1CT0xfX01BSU4gKCkKewogIC8qIFN1cHBvcnQgcmVj
dXJzaXZlIGNhbGxzIHRvIGBtYWluJzogcnVuIGluaXRpYWxpemVycyBqdXN0IG9uY2UuICAqLwog
IHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAgaWYgKCEgaW5pdGlhbGl6ZWQpCiAgICB7CiAgICAg
IGluaXRpYWxpemVkID0gMTsKICAgICAgX19kb19nbG9iYWxfY3RvcnMgKCk7CiAgICB9Cn0KI2Vu
ZGlmIC8qIG5vIEhBU19JTklUX1NFQ1RJT04gb3IgSU5WT0tFX19tYWluICovCgojZW5kaWYgLyog
TF9fbWFpbiAqLwojZW5kaWYgLyogX19DWUdXSU5fXyAqLwoMCiNpZmRlZiBMX2N0b3JzCgojaW5j
bHVkZSAiZ2JsLWN0b3JzLmgiCgovKiBQcm92aWRlIGRlZmF1bHQgZGVmaW5pdGlvbnMgZm9yIHRo
ZSBsaXN0cyBvZiBjb25zdHJ1Y3RvcnMgYW5kCiAgIGRlc3RydWN0b3JzLCBzbyB0aGF0IHdlIGRv
bid0IGdldCBsaW5rZXIgZXJyb3JzLiAgVGhlc2Ugc3ltYm9scyBhcmUKICAgaW50ZW50aW9uYWxs
eSBic3Mgc3ltYm9scywgc28gdGhhdCBnbGQgYW5kL29yIGNvbGxlY3Qgd2lsbCBwcm92aWRlCiAg
IHRoZSByaWdodCB2YWx1ZXMuICAqLwoKLyogV2UgZGVjbGFyZSB0aGUgbGlzdHMgaGVyZSB3aXRo
IHR3byBlbGVtZW50cyBlYWNoLAogICBzbyB0aGF0IHRoZXkgYXJlIHZhbGlkIGVtcHR5IGxpc3Rz
IGlmIG5vIG90aGVyIGRlZmluaXRpb24gaXMgbG9hZGVkLgoKICAgSWYgd2UgYXJlIHVzaW5nIHRo
ZSBvbGQgInNldCIgZXh0ZW5zaW9ucyB0byBoYXZlIHRoZSBnbnUgbGlua2VyCiAgIGNvbGxlY3Qg
Y3RvcnMgYW5kIGR0b3JzLCB0aGVuIHdlIF9fQ1RPUl9MSVNUX18gYW5kIF9fRFRPUl9MSVNUX18K
ICAgbXVzdCBiZSBpbiB0aGUgYnNzL2NvbW1vbiBzZWN0aW9uLgoKICAgTG9uZyB0ZXJtIG5vIHBv
cnQgc2hvdWxkIHVzZSB0aG9zZSBleHRlbnNpb25zLiAgQnV0IG1hbnkgc3RpbGwgZG8uICAqLwoj
aWYgIWRlZmluZWQoSU5JVF9TRUNUSU9OX0FTTV9PUCkgJiYgIWRlZmluZWQoQ1RPUl9MSVNUU19E
RUZJTkVEX0VYVEVSTkFMTFkpCiNpZiBkZWZpbmVkIChUQVJHRVRfQVNNX0NPTlNUUlVDVE9SKSB8
fCBkZWZpbmVkIChVU0VfQ09MTEVDVDIpCmZ1bmNfcHRyIF9fQ1RPUl9MSVNUX19bMl0gPSB7MCwg
MH07CmZ1bmNfcHRyIF9fRFRPUl9MSVNUX19bMl0gPSB7MCwgMH07CiNlbHNlCmZ1bmNfcHRyIF9f
Q1RPUl9MSVNUX19bMl07CmZ1bmNfcHRyIF9fRFRPUl9MSVNUX19bMl07CiNlbmRpZgojZW5kaWYg
Lyogbm8gSU5JVF9TRUNUSU9OX0FTTV9PUCBhbmQgbm90IENUT1JfTElTVFNfREVGSU5FRF9FWFRF
Uk5BTExZICovCiNlbmRpZiAvKiBMX2N0b3JzICovCgwKI2lmZGVmIExfZXhpdAoKI2luY2x1ZGUg
ImdibC1jdG9ycy5oIgoKI2lmZGVmIE5FRURfQVRFWElUCgojaWZuZGVmIE9OX0VYSVQKCiMgaW5j
bHVkZSA8ZXJybm8uaD4KCnN0YXRpYyBmdW5jX3B0ciAqYXRleGl0X2NoYWluID0gMDsKc3RhdGlj
IGxvbmcgYXRleGl0X2NoYWluX2xlbmd0aCA9IDA7CnN0YXRpYyB2b2xhdGlsZSBsb25nIGxhc3Rf
YXRleGl0X2NoYWluX3Nsb3QgPSAtMTsKCmludAphdGV4aXQgKGZ1bmNfcHRyIGZ1bmMpCnsKICBp
ZiAoKytsYXN0X2F0ZXhpdF9jaGFpbl9zbG90ID09IGF0ZXhpdF9jaGFpbl9sZW5ndGgpCiAgICB7
CiAgICAgIGF0ZXhpdF9jaGFpbl9sZW5ndGggKz0gMzI7CiAgICAgIGlmIChhdGV4aXRfY2hhaW4p
CglhdGV4aXRfY2hhaW4gPSAoZnVuY19wdHIgKikgcmVhbGxvYyAoYXRleGl0X2NoYWluLCBhdGV4
aXRfY2hhaW5fbGVuZ3RoCgkJCQkJICAgICAqIHNpemVvZiAoZnVuY19wdHIpKTsKICAgICAgZWxz
ZQoJYXRleGl0X2NoYWluID0gKGZ1bmNfcHRyICopIG1hbGxvYyAoYXRleGl0X2NoYWluX2xlbmd0
aAoJCQkJCSAgICAqIHNpemVvZiAoZnVuY19wdHIpKTsKICAgICAgaWYgKCEgYXRleGl0X2NoYWlu
KQoJewoJICBhdGV4aXRfY2hhaW5fbGVuZ3RoID0gMDsKCSAgbGFzdF9hdGV4aXRfY2hhaW5fc2xv
dCA9IC0xOwoJICBlcnJubyA9IEVOT01FTTsKCSAgcmV0dXJuICgtMSk7Cgl9CiAgICB9CiAgYXRl
eGl0X2NoYWluW2xhc3RfYXRleGl0X2NoYWluX3Nsb3RdID0gZnVuYzsKICByZXR1cm4gKDApOwp9
CgpleHRlcm4gdm9pZCBfY2xlYW51cCAodm9pZCk7CmV4dGVybiB2b2lkIF9leGl0IChpbnQpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCnZvaWQKZXhpdCAoaW50IHN0YXR1cykKewog
IGlmIChhdGV4aXRfY2hhaW4pCiAgICB7CiAgICAgIGZvciAoIDsgbGFzdF9hdGV4aXRfY2hhaW5f
c2xvdC0tID49IDA7ICkKCXsKCSAgKCphdGV4aXRfY2hhaW5bbGFzdF9hdGV4aXRfY2hhaW5fc2xv
dCArIDFdKSAoKTsKCSAgYXRleGl0X2NoYWluW2xhc3RfYXRleGl0X2NoYWluX3Nsb3QgKyAxXSA9
IDA7Cgl9CiAgICAgIGZyZWUgKGF0ZXhpdF9jaGFpbik7CiAgICAgIGF0ZXhpdF9jaGFpbiA9IDA7
CiAgICB9CiNpZmRlZiBFWElUX0JPRFkKICBFWElUX0JPRFk7CiNlbHNlCiAgX2NsZWFudXAgKCk7
CiNlbmRpZgogIF9leGl0IChzdGF0dXMpOwp9CgojZWxzZSAvKiBPTl9FWElUICovCgovKiBTaW1w
bGU7IHdlIGp1c3QgbmVlZCBhIHdyYXBwZXIgZm9yIE9OX0VYSVQuICAqLwppbnQKYXRleGl0IChm
dW5jX3B0ciBmdW5jKQp7CiAgcmV0dXJuIE9OX0VYSVQgKGZ1bmMpOwp9CgojZW5kaWYgLyogT05f
RVhJVCAqLwojZW5kaWYgLyogTkVFRF9BVEVYSVQgKi8KCiNlbmRpZiAvKiBMX2V4aXQgKi8K


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]