Return-Path: <shadow@dementia.org>
Received: from fort-point-station.mit.edu by po10.mit.edu (8.9.2/4.7) id XAA12635; Sat, 23 Dec 2000 23:32:00 -0500 (EST)
Received: from alycia.dementia.org (ALYCIA.DEMENTIA.ORG [128.2.35.149])
	by fort-point-station.mit.edu (8.9.2/8.9.2) with ESMTP id XAA23087
	for <hartmans@mit.edu>; Sat, 23 Dec 2000 23:32:29 -0500 (EST)
Received: from skittlebrau.trafford.dementia.org (VPN-100-227.CC.CMU.EDU [128.2.100.227])
	by alycia.dementia.org (8.9.1a/8.9.0) with ESMTP id XAA15300
	for <hartmans@mit.edu>; Sat, 23 Dec 2000 23:32:07 -0500 (EST)
Date: Sat, 23 Dec 2000 23:32:27 -0500
From: Derrick J Brashear <shadow@dementia.org>
To: hartmans@mit.edu
Subject: errors on sparc64linux openafs (fwd)
Message-ID: <81050000.977632347@skittlebrau.trafford.dementia.org>
X-Mailer: Mulberry/2.0.6b2 (Linux/x86)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==========1885349384=========="
Lines: 1137
Xref: sweet-transvestite.mit.edu mail.personal:1339 mail.openafs:617

--==========1885349384==========
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline



---------- Forwarded Message ----------
Date: Friday, December 22, 2000 04:43:18 PM +0100
From: Pavel Semerad <semerad@ss1000.ms.mff.cuni.cz>
To: Derrick J Brashear <shadow@dementia.org>
Subject: errors on sparc64linux openafs


Hi,
I have found an error in sparc64linux version of openafs (in my patch
:-)). Timeouts in rx does not work. This is because of bad clock_GetTime
macro. Here is patch:

*** src/rx/rx_clock.h 09:50:47  1.1.1.2
--- src/rx/rx_clock.h 10:32:48
***************
*** 83,89 ****
   #else /* KERNEL */
   #include "../afs/afs_osi.h"
   #define clock_Init()
! #if defined(AFS_SGI61_ENV) || defined(AFS_HPUX_ENV)
   #define clock_GetTime(cv) osi_GetTime((osi_timeval_t *)cv)
   #else
   #define clock_GetTime(cv) osi_GetTime((struct timeval *)cv)
--- 83,89 ----
   #else /* KERNEL */
   #include "../afs/afs_osi.h"
   #define clock_Init()
! #if defined(AFS_SGI61_ENV) || defined(AFS_HPUX_ENV) ||
defined(AFS_LINUX_64BIT_KERNEL) #define clock_GetTime(cv)
   osi_GetTime((osi_timeval_t *)cv)
   #else
   #define clock_GetTime(cv) osi_GetTime((struct timeval *)cv)

But I think it will be better to define it always with cast to
osi_timeval_t to avoid problems (osi_timeval_t is typedef to struct
timeval on 32bit systems).

I have also moved my hack from usd/usd_file.c to config/param.sparc*, so
sending new version of patch.

Pavel Semerad

---------- End Forwarded Message ----------


--==========1885349384==========
Content-Type: message/rfc822; name="errors on sparc64linux openafs"

Return-Path: <semerad@ss1000.ms.mff.cuni.cz>
Received: from ps.ms.mff.cuni.cz (ps.ms.mff.cuni.cz [195.113.19.50])
	by alycia.dementia.org (8.9.1a/8.9.0) with ESMTP id KAA00736
	for <shadow@dementia.org>; Fri, 22 Dec 2000 10:43:38 -0500 (EST)
Received: from localhost (semerad@localhost)
	by ps.ms.mff.cuni.cz (8.8.8/8.8.8) with SMTP id QAA13417
	for <shadow@dementia.org>; Fri, 22 Dec 2000 16:43:18 +0100
X-Authentication-Warning: ps.ms.mff.cuni.cz: semerad owned process doing -bs
Date: Fri, 22 Dec 2000 16:43:18 +0100 (CET)
From: Pavel Semerad <semerad@ss1000.ms.mff.cuni.cz>
X-Sender: semerad@ps.ms.mff.cuni.cz
To: Derrick J Brashear <shadow@dementia.org>
Subject: errors on sparc64linux openafs
In-Reply-To: <4012000000.976808572@skittlebrau.trafford.dementia.org>
Message-ID: <Pine.LNX.3.96.1001222143453.22184A-200000@ps.ms.mff.cuni.cz>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==========928000889=========="

--==========928000889==========
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit


Hi,
I have found an error in sparc64linux version of openafs (in my patch
:-)). Timeouts in rx does not work. This is because of bad clock_GetTime
macro. Here is patch:

*** src/rx/rx_clock.h 09:50:47  1.1.1.2
--- src/rx/rx_clock.h 10:32:48
***************
*** 83,89 ****
  #else /* KERNEL */                         
  #include "../afs/afs_osi.h"
  #define clock_Init()
! #if defined(AFS_SGI61_ENV) || defined(AFS_HPUX_ENV)
  #define clock_GetTime(cv) osi_GetTime((osi_timeval_t *)cv)
  #else   
  #define clock_GetTime(cv) osi_GetTime((struct timeval *)cv)
--- 83,89 ----
  #else /* KERNEL */              
  #include "../afs/afs_osi.h"
  #define clock_Init()
! #if defined(AFS_SGI61_ENV) || defined(AFS_HPUX_ENV) || defined(AFS_LINUX_64BIT_KERNEL)
  #define clock_GetTime(cv) osi_GetTime((osi_timeval_t *)cv)
  #else 
  #define clock_GetTime(cv) osi_GetTime((struct timeval *)cv)

But I think it will be better to define it always with cast to
osi_timeval_t to avoid problems (osi_timeval_t is typedef to struct
timeval on 32bit systems).

I have also moved my hack from usd/usd_file.c to config/param.sparc*, so
sending new version of patch.

Pavel Semerad

--==========928000889==========
Content-Type: text/plain; charset=us-ascii;
 name="openafs-1.0.1-sparclinux.patch"
Content-Transfer-Encoding: base64
Content-Description: "openafs-1.0.1-sparclinux.patch"

KioqIHNyYy9NYWtlZmlsZSAwOTo1MDoxNQkxLjEuMS4yDQotLS0gc3JjL01h
a2VmaWxlIDEwOjQ4OjE0CTEuMw0KKioqKioqKioqKioqKioqDQoqKiogNjks
NzUgKioqKg0KICBjbWQ6IGJhc2ljcyBjb21lcnINCiAgCSR7Q09NUElMRV9Q
QVJUMX0gY21kICR7Q09NUElMRV9QQVJUMn0NCiAgCUBjYXNlICR7U1lTX05B
TUV9IGluIFwNCiEgCXNnaV82KiB8IHN1bjR4XzU3IHwgc3VuNHhfNTggfCBo
cF91eDExKiApIFwNCiAgCQkke0NPTVBJTEVfUEFSVDF9IGNtZCAke0NPTVBJ
TEVfUEFSVDJ9IGluc3RhbGw2NCA7OyBcDQogIAllc2FjDQogIA0KLS0tIDY5
LDc1IC0tLS0NCiAgY21kOiBiYXNpY3MgY29tZXJyDQogIAkke0NPTVBJTEVf
UEFSVDF9IGNtZCAke0NPTVBJTEVfUEFSVDJ9DQogIAlAY2FzZSAke1NZU19O
QU1FfSBpbiBcDQohIAlzZ2lfNiogfCBzdW40eF81NyB8IHN1bjR4XzU4IHwg
aHBfdXgxMSogfCBzcGFyYzY0X2xpbnV4KiApIFwNCiAgCQkke0NPTVBJTEVf
UEFSVDF9IGNtZCAke0NPTVBJTEVfUEFSVDJ9IGluc3RhbGw2NCA7OyBcDQog
IAllc2FjDQogIA0KKioqIHNyYy9hZnMvYWZzLmggMDk6NTA6MzQJMS4xLjEu
Mg0KLS0tIHNyYy9hZnMvYWZzLmggMTA6MDY6NTkJMS40DQoqKioqKioqKioq
KioqKioNCioqKiA4MDksODE1ICoqKioNCi0tLSA4MDksODE5IC0tLS0NCiAg
ICAgICAqLw0KICAgICAgaW5vNjRfdCBpbm9kZTsJCQkvKiBVbml4IGlub2Rl
IGZvciB0aGlzIGNodW5rICovDQogICNlbHNlDQorICNpZiBkZWZpbmVkKEFG
U19MSU5VWF82NEJJVF9LRVJORUwpDQorICAgICBsb25nIGlub2RlOwkgCQkJ
LyogVW5peCBpbm9kZSBmb3IgdGhpcyBjaHVuayAqLw0KKyAjZWxzZQ0KICAg
ICAgYWZzX2ludDMyIGlub2RlOwkJCS8qIFVuaXggaW5vZGUgZm9yIHRoaXMg
Y2h1bmsgKi8NCisgI2VuZGlmDQogICNlbmRpZg0KICAgICAgYWZzX2ludDMy
IGNodW5rQnl0ZXM7CQkvKiBOdW0gYnl0ZXMgaW4gdGhpcyBjaHVuayAqLw0K
ICAgICAgY2hhciBzdGF0ZXM7CQkvKiBIYXMgdGhpcyBjaHVuayBiZWVuIG1v
ZGlmaWVkPyAqLw0KKioqIHNyYy9hZnMvYWZzX2NhbGwuYyAwOTo1MDozNAkx
LjEuMS4yDQotLS0gc3JjL2Fmcy9hZnNfY2FsbC5jIDE2OjM3OjE4CTEuOQ0K
KioqKioqKioqKioqKioqDQoqKiogODE2LDgyMSAqKioqDQotLS0gODE2LDgz
NiAtLS0tDQogIAl9DQogICNlbmRpZiAvKiBBRlNfU1VONTdfNjRCSVRfRU5W
ICovDQogIA0KKyAjaWYgZGVmaW5lZChBRlNfTElOVVhfNjRCSVRfS0VSTkVM
KQ0KKyAJc3RydWN0IGlwYXJhbTMyIGRzdDMyOw0KKyANCisgI2lmZGVmIEFG
U19TUEFSQzY0X0xJTlVYMjBfRU5WDQorIAlpZiAoY3VycmVudC0+dHNzLmZs
YWdzICYgU1BBUkNfRkxBR18zMkJJVCkgew0KKyAjZWxzZQ0KKyAjZXJyb3Ig
Tm90IGRvbmUgZm9yIHRoaXMgbGludXggdmVyc2lvbg0KKyAjZW5kaWYNCisg
CQlBRlNfQ09QWUlOKGNtYXJnLCAoY2FkZHJfdCkgJmRzdDMyLCBzaXplb2Yg
ZHN0MzIsIGNvZGUpOw0KKyAJCWlmICghY29kZSkNCisgCQkJaXBhcmFtMzJf
dG9faXBhcmFtKCZkc3QzMiwgZHN0KTsNCisgCQlyZXR1cm4gY29kZTsNCisg
CX0NCisgI2VuZGlmIC8qIEFGU19MSU5VWF82NEJJVF9LRVJORUwgKi8NCisg
DQogIAlBRlNfQ09QWUlOKGNtYXJnLCAoY2FkZHJfdCkgZHN0LCBzaXplb2Yg
KmRzdCwgY29kZSk7DQogIAlyZXR1cm4gY29kZTsNCiAgfQ0KKioqKioqKioq
KioqKioqDQoqKiogODg4LDg5NiAqKioqDQogIAkJCSAgIGxvbmcgcGFybTQp
DQogIHsNCiAgICAgIHN0cnVjdCBhZnNzeXNhcmdzIGFyZ3MsICp1YXAgPSAm
YXJnczsNCiEgICAgIGludCBsaW51eF9yZXQ9MDsNCiEgICAgIGludCAqcmV0
dmFsID0gJmxpbnV4X3JldDsNCiEgICAgIGludCBlcGFybVs0XTsgLyogbWF0
Y2hlcyBBRlNDQUxMX0lDTCBpbiBmc3RyYWNlLmMgKi8NCiAgI2Vsc2UNCiAg
I2lmIGRlZmluZWQoVUtFUk5FTCkNCiAgQWZzX3N5c2NhbGwgKCkNCi0tLSA5
MDMsOTExIC0tLS0NCiAgCQkJICAgbG9uZyBwYXJtNCkNCiAgew0KICAgICAg
c3RydWN0IGFmc3N5c2FyZ3MgYXJncywgKnVhcCA9ICZhcmdzOw0KISAgICAg
bG9uZyBsaW51eF9yZXQ9MDsNCiEgICAgIGxvbmcgKnJldHZhbCA9ICZsaW51
eF9yZXQ7DQohICAgICBsb25nIGVwYXJtWzRdOyAvKiBtYXRjaGVzIEFGU0NB
TExfSUNMIGluIGZzdHJhY2UuYyAqLw0KICAjZWxzZQ0KICAjaWYgZGVmaW5l
ZChVS0VSTkVMKQ0KICBBZnNfc3lzY2FsbCAoKQ0KKioqKioqKioqKioqKioq
DQoqKiogMTExNCwxMTIwICoqKioNCiAgew0KICAgICAgZXh0ZXJuIHNob3J0
IGFmc19icnNEYWVtb25zOw0KICAgICAgZXh0ZXJuIGFmc19pbnQzMiBhZnNf
Q2hlY2tTZXJ2ZXJEYWVtb25TdGFydGVkOw0KISAgICAgZXh0ZXJuIHN0cnVj
dCBvc2lfV2FpdEhhbmRsZSBBRlNfV2FpdEhhbmRsZXIsIEFGU19DU1dhaXRI
YW5kbGVyOw0KICAgICAgZXh0ZXJuIHN0cnVjdCBvc2lfZmlsZSAqYWZzX2Nh
Y2hlSW5vZGVwOw0KICANCiAgICAgIEFGU19TVEFUQ05UKGFmc19zaHV0ZG93
bik7DQotLS0gMTEyOSwxMTM1IC0tLS0NCiAgew0KICAgICAgZXh0ZXJuIHNo
b3J0IGFmc19icnNEYWVtb25zOw0KICAgICAgZXh0ZXJuIGFmc19pbnQzMiBh
ZnNfQ2hlY2tTZXJ2ZXJEYWVtb25TdGFydGVkOw0KISAgICAgZXh0ZXJuIHN0
cnVjdCBhZnNfb3NpX1dhaXRIYW5kbGUgQUZTX1dhaXRIYW5kbGVyLCBBRlNf
Q1NXYWl0SGFuZGxlcjsNCiAgICAgIGV4dGVybiBzdHJ1Y3Qgb3NpX2ZpbGUg
KmFmc19jYWNoZUlub2RlcDsNCiAgDQogICAgICBBRlNfU1RBVENOVChhZnNf
c2h1dGRvd24pOw0KKioqIHNyYy9hZnMvYWZzX2RhZW1vbnMuYyAwOTo1MDoz
NQkxLjEuMS4yDQotLS0gc3JjL2Fmcy9hZnNfZGFlbW9ucy5jIDEwOjQ4OjE0
CTEuMw0KKioqKioqKioqKioqKioqDQoqKiogMzUzLDM1OSAqKioqDQogICNp
ZmRlZiBBRlNfTElOVVgyMl9FTlYNCiAgICAgIGNvZGUgPSBnb3BfbG9va3Vw
bmFtZSgoY2hhciAqKWFiLT5wYXJtWzBdLCBBRlNfVUlPU1lTLCAxLCAgKHN0
cnVjdCB2bm9kZSAqKikgMCwgJmRwKTsNCiAgICAgIGlmIChkcCkNCiEgCXR2
biA9IChzdHJ1Y3QgdmNhY2hlKilkcC0+ZF9pbm9kZTsNCiAgI2Vsc2UNCiAg
ICAgIGNvZGUgPSBnb3BfbG9va3VwbmFtZSgoY2hhciAqKWFiLT5wYXJtWzBd
LCBBRlNfVUlPU1lTLCAxLCAgKHN0cnVjdCB2bm9kZSAqKikgMCwgKHN0cnVj
dCB2bm9kZSAqKikmdHZuKTsNCiAgI2VuZGlmDQotLS0gMzUzLDM1OSAtLS0t
DQogICNpZmRlZiBBRlNfTElOVVgyMl9FTlYNCiAgICAgIGNvZGUgPSBnb3Bf
bG9va3VwbmFtZSgoY2hhciAqKWFiLT5wYXJtWzBdLCBBRlNfVUlPU1lTLCAx
LCAgKHN0cnVjdCB2bm9kZSAqKikgMCwgJmRwKTsNCiAgICAgIGlmIChkcCkN
CiEgCXR2biA9IChzdHJ1Y3Qgdm5vZGUqKWRwLT5kX2lub2RlOw0KICAjZWxz
ZQ0KICAgICAgY29kZSA9IGdvcF9sb29rdXBuYW1lKChjaGFyICopYWItPnBh
cm1bMF0sIEFGU19VSU9TWVMsIDEsICAoc3RydWN0IHZub2RlICoqKSAwLCAo
c3RydWN0IHZub2RlICoqKSZ0dm4pOw0KICAjZW5kaWYNCioqKiBzcmMvYWZz
L2Fmc19vc2kuaCAwOTo1MDozNQkxLjEuMS4yDQotLS0gc3JjL2Fmcy9hZnNf
b3NpLmggMTA6MDY6NTkJMS40DQoqKioqKioqKioqKioqKioNCioqKiAxNTQs
MTYwICoqKioNCiAgICAqLw0KICANCiAgDQohICNpZiBkZWZpbmVkKEFGU19I
UFVYX0VOVikgfHwgZGVmaW5lZChBRlNfU1VONTdfRU5WKSB8fCAoZGVmaW5l
ZChBRlNfU0dJNjFfRU5WKSAmJiBkZWZpbmVkKEtFUk5FTCkgJiYgZGVmaW5l
ZChfSzY0VTY0KSkNCiAgdHlwZWRlZiBzdHJ1Y3Qgew0KICAgICAgYWZzX2lu
dDMyIHR2X3NlYzsNCiAgICAgIGFmc19pbnQzMiB0dl91c2VjOw0KLS0tIDE1
NCwxNjAgLS0tLQ0KICAgICovDQogIA0KICANCiEgI2lmIGRlZmluZWQoQUZT
X0hQVVhfRU5WKSB8fCBkZWZpbmVkKEFGU19TVU41N19FTlYpIHx8IGRlZmlu
ZWQoQUZTX0xJTlVYXzY0QklUX0tFUk5FTCkgfHwgKGRlZmluZWQoQUZTX1NH
STYxX0VOVikgJiYgZGVmaW5lZChLRVJORUwpICYmIGRlZmluZWQoX0s2NFU2
NCkpDQogIHR5cGVkZWYgc3RydWN0IHsNCiAgICAgIGFmc19pbnQzMiB0dl9z
ZWM7DQogICAgICBhZnNfaW50MzIgdHZfdXNlYzsNCioqKiBzcmMvYWZzL2Fm
c19waW9jdGwuYyAwOTo1MDozNQkxLjEuMS4yDQotLS0gc3JjL2Fmcy9hZnNf
cGlvY3RsLmMgMTA6MDY6NTkJMS42DQoqKioqKioqKioqKioqKioNCioqKiAx
ODAsMTg1ICoqKioNCi0tLSAxODAsMjAwIC0tLS0NCiAgCX0NCiAgI2VuZGlm
IC8qIGRlZmluZWQoQUZTX1NHSV9FTlYpICYmIChfTUlQU19TWkxPTkc9PTY0
KSAqLw0KICANCisgI2lmIGRlZmluZWQoQUZTX0xJTlVYXzY0QklUX0tFUk5F
TCkNCisgCXN0cnVjdCBhZnNfaW9jdGwzMiBkc3QzMjsNCisgDQorICNpZmRl
ZiBBRlNfU1BBUkM2NF9MSU5VWDIwX0VOVg0KKyAJaWYgKGN1cnJlbnQtPnRz
cy5mbGFncyAmIFNQQVJDX0ZMQUdfMzJCSVQpIHsNCisgI2Vsc2UNCisgI2Vy
cm9yIE5vdCBkb25lIGZvciB0aGlzIGxpbnV4IHR5cGUNCisgI2VuZGlmDQor
IAkJQUZTX0NPUFlJTihjbWFyZywgKGNhZGRyX3QpICZkc3QzMiwgc2l6ZW9m
IGRzdDMyLCBjb2RlKTsNCisgCQlpZiAoIWNvZGUpDQorIAkJCWFmc19pb2N0
bDMyX3RvX2Fmc19pb2N0bCgmZHN0MzIsIGRzdCk7DQorIAkJcmV0dXJuIGNv
ZGU7DQorIAl9DQorICNlbmRpZiAvKiBkZWZpbmVkKEFGU19MSU5VWF82NEJJ
VF9LRVJORUwpICovDQorIA0KICAJQUZTX0NPUFlJTihjbWFyZywgKGNhZGRy
X3QpIGRzdCwgc2l6ZW9mICpkc3QsIGNvZGUpOw0KICAJcmV0dXJuIGNvZGU7
DQogIH0NCioqKioqKioqKioqKioqKg0KKioqIDc5Miw3OTggKioqKg0KICAj
aWZkZWYgQUZTX0xJTlVYMjJfRU5WDQogIAljb2RlID0gZ29wX2xvb2t1cG5h
bWUocGF0aCwgQUZTX1VJT1VTRVIsIGZvbGxvdywgIChzdHJ1Y3Qgdm5vZGUg
KiopIDAsICZkcCk7DQogIAlpZiAoIWNvZGUpDQohIAkgICAgdnAgPSAoc3Ry
dWN0IHZjYWNoZSAqKWRwLT5kX2lub2RlOw0KICAjZWxzZQ0KICAJY29kZSA9
IGdvcF9sb29rdXBuYW1lKHBhdGgsIEFGU19VSU9VU0VSLCBmb2xsb3csICAo
c3RydWN0IHZub2RlICoqKSAwLCAmdnApOw0KICAjZW5kaWYgLyogQUZTX0xJ
TlVYMjJfRU5WICovDQotLS0gODA3LDgxMyAtLS0tDQogICNpZmRlZiBBRlNf
TElOVVgyMl9FTlYNCiAgCWNvZGUgPSBnb3BfbG9va3VwbmFtZShwYXRoLCBB
RlNfVUlPVVNFUiwgZm9sbG93LCAgKHN0cnVjdCB2bm9kZSAqKikgMCwgJmRw
KTsNCiAgCWlmICghY29kZSkNCiEgCSAgICB2cCA9IChzdHJ1Y3Qgdm5vZGUg
KilkcC0+ZF9pbm9kZTsNCiAgI2Vsc2UNCiAgCWNvZGUgPSBnb3BfbG9va3Vw
bmFtZShwYXRoLCBBRlNfVUlPVVNFUiwgZm9sbG93LCAgKHN0cnVjdCB2bm9k
ZSAqKikgMCwgJnZwKTsNCiAgI2VuZGlmIC8qIEFGU19MSU5VWDIyX0VOViAq
Lw0KKioqKioqKioqKioqKioqDQoqKiogMjc1MywyNzU5ICoqKioNCiAgICAg
ICAgLyogTm90ZSB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBhIGNlbGwgeWV0Li4u
ICAgICAqLw0KICAgICAgICBpZiAoIW1hdGNoZXMpIHsNCiAgCSBhZnNfdWlu
dDMyIHRlbXAgPSBzcC0+aG9zdC5zX2FkZHI7DQohIAkgc3J2ciA9IGFmc19H
ZXRTZXJ2ZXIoJnRlbXAsIDEsIE5VTEwsICh2bG9ubHkgPyBBRlNfVkxQT1JU
IDogQUZTX0ZTUE9SVCksIA0KICAJCQkgICAgICBXUklURV9MT0NLLCAoYWZz
VVVJRCAqKTAsMCk7DQogIAkgc3J2ci0+YWRkci0+c2FfaXByYW5rID0gc3At
PnJhbmsgKyBhZnNfcmFuZG9tTW9kMTUoKTsNCiAgCSBhZnNfUHV0U2VydmVy
KHNydnIsIFdSSVRFX0xPQ0spOw0KLS0tIDI3NjgsMjc3NCAtLS0tDQogICAg
ICAgIC8qIE5vdGUgdGhhdCBpdCBkb2Vzbid0IGhhdmUgYSBjZWxsIHlldC4u
LiAgICAgKi8NCiAgICAgICAgaWYgKCFtYXRjaGVzKSB7DQogIAkgYWZzX3Vp
bnQzMiB0ZW1wID0gc3AtPmhvc3Quc19hZGRyOw0KISAJIHNydnIgPSBhZnNf
R2V0U2VydmVyKCZ0ZW1wLCAxLCAwLCAodmxvbmx5ID8gQUZTX1ZMUE9SVCA6
IEFGU19GU1BPUlQpLCANCiAgCQkJICAgICAgV1JJVEVfTE9DSywgKGFmc1VV
SUQgKikwLDApOw0KICAJIHNydnItPmFkZHItPnNhX2lwcmFuayA9IHNwLT5y
YW5rICsgYWZzX3JhbmRvbU1vZDE1KCk7DQogIAkgYWZzX1B1dFNlcnZlcihz
cnZyLCBXUklURV9MT0NLKTsNCioqKioqKioqKioqKioqKg0KKioqIDMzMTgs
MzMyNSAqKioqDQotLS0gMzMzMywzMzQyIC0tLS0NCiAgDQogIAlpZiAoIGFp
blNpemUgPCBzaXplb2Yoc3RydWN0IHNldHNwcmVmKSApDQogIAkJcmV0dXJu
IEVJTlZBTDsNCisgI2lmIDAJLyogbnVtX3NlcnZlcnMgaXMgdW5zaWduZWQg
Ki8NCiAgCWlmICggc2luLT5udW1fc2VydmVycyA8IDAgKQ0KICAJCXJldHVy
biBFSU5WQUw7DQorICNlbmRpZg0KICAJaWYgKCBzaW4tPm51bV9zZXJ2ZXJz
ID4gQUZTX01BWF9JTlRFUkZBQ0VfQUREUikNCiAgCQlyZXR1cm4gRU5PTUVN
Ow0KICANCioqKiBzcmMvYWZzL2V4cG9ydGVyLmggMDk6NTA6MzUJMS4xLjEu
Mg0KLS0tIHNyYy9hZnMvZXhwb3J0ZXIuaCAxMDowNjo1OQkxLjQNCioqKioq
KioqKioqKioqKg0KKioqIDMzLDM5ICoqKioNCiAgICAqIHVwIDIgYnl0ZXMN
CiAgICAqLw0KICANCiEgI2lmIGRlZmluZWQoQUZTX1NVTjU3XzY0QklUX0VO
VikgfHwgZGVmaW5lZChBRlNfT1NGX0VOVikgfHwgKGRlZmluZWQoQUZTX1NH
STYxX0VOVikgJiYgKF9NSVBTX1NaUFRSPT02NCkpDQogICNkZWZpbmUJQUZT
X1hMQVRPUl9NQUdJQwkweDg3NjUJCS8qIFhYWCAqLw0KICAjZWxzZQ0KICAj
ZGVmaW5lCUFGU19YTEFUT1JfTUFHSUMJMHg4NzY1NDMyMQ0KLS0tIDMzLDM5
IC0tLS0NCiAgICAqIHVwIDIgYnl0ZXMNCiAgICAqLw0KICANCiEgI2lmIGRl
ZmluZWQoQUZTX1NVTjU3XzY0QklUX0VOVikgfHwgZGVmaW5lZChBRlNfT1NG
X0VOVikgfHwgKGRlZmluZWQoQUZTX1NHSTYxX0VOVikgJiYgKF9NSVBTX1Na
UFRSPT02NCkpIHx8IGRlZmluZWQoQUZTX0xJTlVYXzY0QklUX0tFUk5FTCkN
CiAgI2RlZmluZQlBRlNfWExBVE9SX01BR0lDCTB4ODc2NQkJLyogWFhYICov
DQogICNlbHNlDQogICNkZWZpbmUJQUZTX1hMQVRPUl9NQUdJQwkweDg3NjU0
MzIxDQoqKiogc3JjL2Fmcy9MSU5VWC9vc2lfYWxsb2MuYyAwOTo1MDozNQkx
LjEuMS4yDQotLS0gc3JjL2Fmcy9MSU5VWC9vc2lfYWxsb2MuYyAxMDowNjo1
OQkxLjYNCioqKioqKioqKioqKioqKg0KKioqIDMyLDM5ICoqKioNCiAgfTsN
CiAgDQogIC8qIFRoZXNlIGFzc3VtZSAzMi1iaXQgcG9pbnRlcnMgKi8NCiEg
I2RlZmluZSBNRU1UWVBFKEEpICgoKHVuc2lnbmVkIGludClBKSAmIDB4MykN
CiEgI2RlZmluZSBNRU1BRERSKEEpICh2b2lkICopKCh1bnNpZ25lZCBpbnQp
KEEpICYgKH4weDMpKQ0KICANCiAgLyogZ2xvYmFscyAqLw0KICBhZnNfYXRv
bWxpc3QgKmFsX21lbV9wb29sOyAvKiBwb29sIG9mIG9zaV9saW51eF9tZW0g
c3RydWN0dXJlcyAqLw0KLS0tIDMyLDM5IC0tLS0NCiAgfTsNCiAgDQogIC8q
IFRoZXNlIGFzc3VtZSAzMi1iaXQgcG9pbnRlcnMgKi8NCiEgI2RlZmluZSBN
RU1UWVBFKEEpICgoKHVuc2lnbmVkIGxvbmcpQSkgJiAweDMpDQohICNkZWZp
bmUgTUVNQUREUihBKSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykoQSkgJiAo
fjB4MykpDQogIA0KICAvKiBnbG9iYWxzICovDQogIGFmc19hdG9tbGlzdCAq
YWxfbWVtX3Bvb2w7IC8qIHBvb2wgb2Ygb3NpX2xpbnV4X21lbSBzdHJ1Y3R1
cmVzICovDQoqKioqKioqKioqKioqKioNCioqKiA4Miw5MCAqKioqDQogIA0K
ICAgICAgLyogIGlmIHdlIGNhbiB1c2Uga21hbGxvYyB1c2UgaXQgdG8gYWxs
b2NhdGUgdGhlIHJlcXVpcmVkIG1lbW9yeS4gKi8NCiAgICAgIGlmIChhc2l6
ZSA8ICBNQVhfS01BTExPQ19TSVpFKSB7DQohICAgICAgICAgbmV3ID0gKHZv
aWQgKilrbWFsbG9jKGFzaXplLCBHRlBfS0VSTkVMKTsNCiAgICAgICAgICBp
ZiAobmV3KSAvKiBwaWdneSBiYWNrIGFsbG9jIHR5cGUgKi8NCiEgICAgICAg
ICAgICAgKHVuc2lnbmVkIGludCluZXcgfD0gS01fVFlQRTsNCiAgICAgIH0N
CiAgICAgIGlmICghbmV3KSB7IC8qIG90aGVyd2lzZSB1c2Ugdm1hbGxvYyAg
Ki8NCiAgCWludCBtYXhfd2FpdCA9IDEwOw0KLS0tIDgyLDkwIC0tLS0NCiAg
DQogICAgICAvKiAgaWYgd2UgY2FuIHVzZSBrbWFsbG9jIHVzZSBpdCB0byBh
bGxvY2F0ZSB0aGUgcmVxdWlyZWQgbWVtb3J5LiAqLw0KICAgICAgaWYgKGFz
aXplIDwgIE1BWF9LTUFMTE9DX1NJWkUpIHsNCiEgICAgICAgICBuZXcgPSAo
dm9pZCAqKShsb25nKWttYWxsb2MoYXNpemUsIEdGUF9LRVJORUwpOw0KICAg
ICAgICAgIGlmIChuZXcpIC8qIHBpZ2d5IGJhY2sgYWxsb2MgdHlwZSAqLw0K
ISAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyluZXcgfD0gS01fVFlQRTsN
CiAgICAgIH0NCiAgICAgIGlmICghbmV3KSB7IC8qIG90aGVyd2lzZSB1c2Ug
dm1hbGxvYyAgKi8NCiAgCWludCBtYXhfd2FpdCA9IDEwOw0KKioqKioqKioq
KioqKioqDQoqKiogOTUsMTAxICoqKioNCiAgCSAgICBzY2hlZHVsZSgpOw0K
ICAgICAgICAgIH0NCiAgCWlmIChuZXcpIC8qIHBpZ2d5IGJhY2sgYWxsb2Mg
dHlwZSAqLw0KISAJICAgICh1bnNpZ25lZCBpbnQpbmV3IHw9IFZNX1RZUEU7
DQogICAgICB9DQogICAgICBpZiAobmV3KQ0KICAJbWVtc2V0KE1FTUFERFIo
bmV3KSwgMCwgYXNpemUpOw0KLS0tIDk1LDEwMSAtLS0tDQogIAkgICAgc2No
ZWR1bGUoKTsNCiAgICAgICAgICB9DQogIAlpZiAobmV3KSAvKiBwaWdneSBi
YWNrIGFsbG9jIHR5cGUgKi8NCiEgCSAgICAodW5zaWduZWQgbG9uZyluZXcg
fD0gVk1fVFlQRTsNCiAgICAgIH0NCiAgICAgIGlmIChuZXcpDQogIAltZW1z
ZXQoTUVNQUREUihuZXcpLCAwLCBhc2l6ZSk7DQoqKioqKioqKioqKioqKioN
CioqKiAxMzksMTQ1ICoqKioNCiAgew0KICAgICAgdW5zaWduZWQgaW50IGtl
eTsNCiAgDQohICAgICBrZXkgPSAodW5zaWduZWQgaW50KXAgPj4gMjsNCiAg
ICAgIGtleSA9IChrZXkgKiBIQVNIX0NPTlNUKSVIQVNIX1BSSU1FOw0KICAN
CiAgICAgIHJldHVybiBrZXk7DQotLS0gMTM5LDE0NSAtLS0tDQogIHsNCiAg
ICAgIHVuc2lnbmVkIGludCBrZXk7DQogIA0KISAgICAga2V5ID0gKHVuc2ln
bmVkIGludCkobG9uZylwID4+IDI7DQogICAgICBrZXkgPSAoa2V5ICogSEFT
SF9DT05TVCklSEFTSF9QUklNRTsNCiAgDQogICAgICByZXR1cm4ga2V5Ow0K
KioqIHNyYy9hZnMvTElOVVgvb3NpX2NyZWQuYyAwOTo1MDozNQkxLjEuMS4y
DQotLS0gc3JjL2Fmcy9MSU5VWC9vc2lfY3JlZC5jIDEwOjA2OjU5CTEuNA0K
KioqKioqKioqKioqKioqDQoqKiogNDgsNTQgKioqKg0KICAJICAgIG9zaV9Q
YW5pYygiY3JnZXQ6IE5vIG1vcmUgbWVtb3J5IGZvciBjcmVkcyFcbiIpOw0K
ICAJDQogIAlmb3IgKGk9MDsgaSA8IENSRURfQUxMT0NfU1RFUC0xOyBpKysp
DQohIAkgICAgY3JlZF9wb29sW2ldLmNyX3JlZiA9IChpbnQpJmNyZWRfcG9v
bFtpKzFdOw0KICAJY3JlZF9wb29sW2ldLmNyX3JlZiA9IDA7DQogICAgICB9
DQogICAgICB0bXAgPSBjcmVkX3Bvb2w7DQotLS0gNDgsNTQgLS0tLQ0KICAJ
ICAgIG9zaV9QYW5pYygiY3JnZXQ6IE5vIG1vcmUgbWVtb3J5IGZvciBjcmVk
cyFcbiIpOw0KICAJDQogIAlmb3IgKGk9MDsgaSA8IENSRURfQUxMT0NfU1RF
UC0xOyBpKyspDQohIAkgICAgY3JlZF9wb29sW2ldLmNyX3JlZiA9IChsb25n
KSZjcmVkX3Bvb2xbaSsxXTsNCiAgCWNyZWRfcG9vbFtpXS5jcl9yZWYgPSAw
Ow0KICAgICAgfQ0KICAgICAgdG1wID0gY3JlZF9wb29sOw0KKioqKioqKioq
KioqKioqDQoqKiogNjksNzUgKioqKg0KICAgICAgfQ0KICANCiAgICAgIENS
RURfTE9DSygpOw0KISAgICAgY3ItPmNyX3JlZiA9IChpbnQpY3JlZF9wb29s
Ow0KICAgICAgY3JlZF9wb29sID0gY3I7DQogICAgICBDUkVEX1VOTE9DSygp
Ow0KICAgICAgbmNyZWRzX2ludXNlIC0tOw0KLS0tIDY5LDc1IC0tLS0NCiAg
ICAgIH0NCiAgDQogICAgICBDUkVEX0xPQ0soKTsNCiEgICAgIGNyLT5jcl9y
ZWYgPSAobG9uZyljcmVkX3Bvb2w7DQogICAgICBjcmVkX3Bvb2wgPSBjcjsN
CiAgICAgIENSRURfVU5MT0NLKCk7DQogICAgICBuY3JlZHNfaW51c2UgLS07
DQoqKiogc3JjL2Fmcy9MSU5VWC9vc2lfZmlsZS5jIDA5OjUwOjM1CTEuMS4x
LjINCi0tLSBzcmMvYWZzL0xJTlVYL29zaV9maWxlLmMgMTA6NDg6MTQJMS4z
DQoqKioqKioqKioqKioqKioNCioqKiAxODEsMTg3ICoqKioNCiAgICAgIGNo
YXIgKmFwdHI7DQogICAgICBhZnNfaW50MzIgYXNpemU7IHsNCiAgICAgIHN0
cnVjdCBBRlNfVUNSRUQgKm9sZENyZWQ7DQohICAgICB1bnNpZ25lZCBpbnQg
cmVzaWQ7DQogICAgICByZWdpc3RlciBhZnNfaW50MzIgY29kZTsNCiAgICAg
IHJlZ2lzdGVyIGFmc19pbnQzMiBjbnQxPTA7DQogICAgICBBRlNfU1RBVENO
VChvc2lfUmVhZCk7DQotLS0gMTgxLDE4NyAtLS0tDQogICAgICBjaGFyICph
cHRyOw0KICAgICAgYWZzX2ludDMyIGFzaXplOyB7DQogICAgICBzdHJ1Y3Qg
QUZTX1VDUkVEICpvbGRDcmVkOw0KISAgICAgc2l6ZV90IHJlc2lkOw0KICAg
ICAgcmVnaXN0ZXIgYWZzX2ludDMyIGNvZGU7DQogICAgICByZWdpc3RlciBh
ZnNfaW50MzIgY250MT0wOw0KICAgICAgQUZTX1NUQVRDTlQob3NpX1JlYWQp
Ow0KKioqKioqKioqKioqKioqDQoqKiogMjIwLDIyNiAqKioqDQogICAgICBh
ZnNfaW50MzIgb2Zmc2V0Ow0KICAgICAgYWZzX2ludDMyIGFzaXplOyB7DQog
ICAgICBzdHJ1Y3QgQUZTX1VDUkVEICpvbGRDcmVkOw0KISAgICAgdW5zaWdu
ZWQgaW50IHJlc2lkOw0KICAgICAgcmVnaXN0ZXIgYWZzX2ludDMyIGNvZGU7
DQogICAgICBBRlNfU1RBVENOVChvc2lfV3JpdGUpOw0KICAgICAgaWYgKCAh
YWZpbGUgKQ0KLS0tIDIyMCwyMjYgLS0tLQ0KICAgICAgYWZzX2ludDMyIG9m
ZnNldDsNCiAgICAgIGFmc19pbnQzMiBhc2l6ZTsgew0KICAgICAgc3RydWN0
IEFGU19VQ1JFRCAqb2xkQ3JlZDsNCiEgICAgIHNpemVfdCByZXNpZDsNCiAg
ICAgIHJlZ2lzdGVyIGFmc19pbnQzMiBjb2RlOw0KICAgICAgQUZTX1NUQVRD
TlQob3NpX1dyaXRlKTsNCiAgICAgIGlmICggIWFmaWxlICkNCioqKiBzcmMv
YWZzL0xJTlVYL29zaV9ncm91cHMuYyAwOTo1MDozNQkxLjEuMS4yDQotLS0g
c3JjL2Fmcy9MSU5VWC9vc2lfZ3JvdXBzLmMgMTA6MDY6NTkJMS41DQoqKioq
KioqKioqKioqKioNCioqKiAxMDEsMTA3ICoqKioNCiAgew0KICAgICAgaW50
IGNvZGU7DQogICAgICBjcmVkX3QgKmNyID0gY3JyZWYoKTsNCiEgICAgIGlu
dCBqdW5rOw0KICAgICAgaW50IG9sZF9wYWc7DQogIA0KICAgICAgbG9ja19r
ZXJuZWwoKTsNCi0tLSAxMDEsMTA3IC0tLS0NCiAgew0KICAgICAgaW50IGNv
ZGU7DQogICAgICBjcmVkX3QgKmNyID0gY3JyZWYoKTsNCiEgICAgIGFmc191
aW50MzIganVuazsNCiAgICAgIGludCBvbGRfcGFnOw0KICANCiAgICAgIGxv
Y2tfa2VybmVsKCk7DQoqKioqKioqKioqKioqKioNCioqKiAxMjUsMTMwICoq
KioNCi0tLSAxMjUsMTQ5IC0tLS0NCiAgDQogICAgICByZXR1cm4gY29kZTsN
CiAgfQ0KKyANCisgI2lmZGVmIEFGU19TUEFSQzY0X0xJTlVYMjBfRU5WDQor
IGFzbWxpbmthZ2UgaW50IGFmc194c2V0Z3JvdXBzMzIoaW50IGdpZHNldHNp
emUsIF9fa2VybmVsX2dpZF90MzIgKmdyb3VwbGlzdCkNCisgew0KKyAJZ2lk
X3QgZ2xbTkdST1VQU107DQorIAlpbnQgcmV0LCBpOw0KKyAJbW1fc2VnbWVu
dF90IG9sZF9mcyA9IGdldF9mcyAoKTsNCisgCQ0KKyAJaWYgKCh1bnNpZ25l
ZCkgZ2lkc2V0c2l6ZSA+IE5HUk9VUFMpDQorIAkJcmV0dXJuIC1FSU5WQUw7
DQorIAlmb3IgKGkgPSAwOyBpIDwgZ2lkc2V0c2l6ZTsgaSsrLCBncm91cGxp
c3QrKykNCisgCQlpZiAoX19nZXRfdXNlciAoZ2xbaV0sIGdyb3VwbGlzdCkp
DQorIAkJCXJldHVybiAtRUZBVUxUOw0KKyAgICAgICAgIHNldF9mcyAoS0VS
TkVMX0RTKTsNCisgCXJldCA9IGFmc194c2V0Z3JvdXBzKGdpZHNldHNpemUs
IGdsKTsNCisgCXNldF9mcyAob2xkX2ZzKTsNCisgCXJldHVybiByZXQ7DQor
IH0NCisgI2VuZGlmDQogIA0KICBzdGF0aWMgaW50IGFmc19zZXRncm91cHMo
Y3JlZF90ICoqY3IsIGludCBuZ3JvdXBzLCBnaWRfdCAqZ2lkc2V0LCBpbnQg
Y2hhbmdlX3BhcmVudCkNCiAgew0KKioqIHNyYy9hZnMvTElOVVgvb3NpX21h
Y2hkZXAuaCAwOTo1MDozNgkxLjEuMS4yDQotLS0gc3JjL2Fmcy9MSU5VWC9v
c2lfbWFjaGRlcC5oIDEwOjQ4OjE0CTEuMw0KKioqKioqKioqKioqKioqDQoq
KiogMzAsMzYgKioqKg0KLS0tIDMwLDQwIC0tLS0NCiAgI2RlZmluZSBhZnNf
aHogSFoNCiAgI2luY2x1ZGUgIi4uL2gvc2NoZWQuaCINCiAgI2RlZmluZSBv
c2lfVGltZSgpICh4dGltZS50dl9zZWMpDQorICNpZiAgKENQVSA9PSBzcGFy
YzY0KQ0KKyAjZGVmaW5lIG9zaV9HZXRUaW1lKFYpIGRvIHsgKCojI1YjIyku
dHZfc2VjID0geHRpbWUudHZfc2VjOyAoKiMjViMjKS50dl91c2VjID0geHRp
bWUudHZfdXNlYzsgfSB3aGlsZSAoMCkNCisgI2Vsc2UNCiAgI2RlZmluZSBv
c2lfR2V0VGltZShWKSAoKihWKT14dGltZSkNCisgI2VuZGlmDQogIA0KICAj
dW5kZWYgZ29wX2xvb2t1cG5hbWUNCiAgI2RlZmluZSBnb3BfbG9va3VwbmFt
ZSBvc2lfbG9va3VwbmFtZQ0KKioqKioqKioqKioqKioqDQoqKiogODksOTUg
KioqKg0KLS0tIDkzLDEwMyAtLS0tDQogIA0KICAvKiBjcmVkIHN0cnVjdCAq
Lw0KICB0eXBlZGVmIHN0cnVjdCBjcmVkIHsJCS8qIG1hcHMgdG8gdGFzayBm
aWVsZDogKi8NCisgI2lmIChDUFUgPT0gc3BhcmM2NCkNCisgICAgIGxvbmcg
Y3JfcmVmOw0KKyAjZWxzZQ0KICAgICAgaW50IGNyX3JlZjsNCisgI2VuZGlm
DQogICAgICB1bnNpZ25lZCBzaG9ydCBjcl91aWQ7CS8qIGV1aWQgKi8NCiAg
ICAgIHVuc2lnbmVkIHNob3J0IGNyX3J1aWQ7CS8qIHVpZCAqLw0KICAgICAg
dW5zaWduZWQgc2hvcnQgY3JfZ2lkOwkvKiBlZ2lkICovDQoqKiogc3JjL2Fm
cy9MSU5VWC9vc2lfbWlzYy5jIDA5OjUwOjM2CTEuMS4xLjINCi0tLSBzcmMv
YWZzL0xJTlVYL29zaV9taXNjLmMgMTA6MDY6NTkJMS40DQoqKioqKioqKioq
KioqKioNCioqKiAyNjQsMjY5ICoqKioNCi0tLSAyNjQsMjc2IC0tLS0NCiAg
dm9pZCBhZnNfb3NpX1NldFRpbWUob3NpX3RpbWV2YWxfdCAqdHZwKQ0KICB7
DQogICAgICBleHRlcm4gaW50ICgqc3lzX3NldHRpbWVvZmRheXApKHN0cnVj
dCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eik7DQorICNpZmRl
ZiBBRlNfTElOVVhfNjRCSVRfS0VSTkVMDQorICAgICBzdHJ1Y3QgdGltZXZh
bCB0djsNCisgICAgIEFGU19TVEFUQ05UKG9zaV9TZXRUaW1lKTsNCisgICAg
IHR2LnR2X3NlYyA9IHR2cC0+dHZfc2VjOw0KKyAgICAgdHYudHZfdXNlYyA9
IHR2cC0+dHZfdXNlYzsNCisgICAgICh2b2lkKSAoKnN5c19zZXR0aW1lb2Zk
YXlwKSgmdHYsIE5VTEwpOw0KKyAjZWxzZQ0KICAgICAgS0VSTkVMX1NQQUNF
X0RFQ0w7DQogIA0KICAgICAgQUZTX1NUQVRDTlQob3NpX1NldFRpbWUpOw0K
KioqKioqKioqKioqKioqDQoqKiogMjcxLDI3NiAqKioqDQotLS0gMjc4LDI4
NCAtLS0tDQogICAgICBUT19VU0VSX1NQQUNFKCk7DQogICAgICAodm9pZCkg
KCpzeXNfc2V0dGltZW9mZGF5cCkodHZwLCBOVUxMKTsNCiAgICAgIFRPX0tF
Uk5FTF9TUEFDRSgpOw0KKyAjZW5kaWYNCiAgfQ0KICANCiAgLyogRnJlZSBh
bGwgdGhlIHBhZ2VzIG9uIGFueSBvZiB0aGUgdm5vZGVzIGluIHRoZSB2bHJ1
LiBNdXN0IGJlIGRvbmUgYmVmb3JlDQoqKiogc3JjL2Fmcy9MSU5VWC9vc2lf
bW9kdWxlLmMgMDk6NTA6MzYJMS4xLjEuMg0KLS0tIHNyYy9hZnMvTElOVVgv
b3NpX21vZHVsZS5jIDEwOjA2OjU5CTEuOA0KKioqKioqKioqKioqKioqDQoq
KiogMjYsMzIgKioqKg0KICBhc21saW5rYWdlIGludCAoKnN5c19raWxscCko
aW50IHBpZCwgaW50IHNpZ25hbCk7DQogIGFzbWxpbmthZ2UgaW50ICgqc3lz
X3NldGdyb3Vwc3ApKGludCBnaWRzZXRzaXplLCBnaWRfdCAqZ3JvdXBsaXN0
KTsNCiAgDQohIGV4dGVybiB2b2lkICpzeXNfY2FsbF90YWJsZVtdOw0KICBl
eHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYWZzX2ZpbGVfc3lzdGVt
Ow0KICANCiAgc3RhdGljIGxvbmcgZ2V0X3BhZ2Vfb2Zmc2V0KHZvaWQpOw0K
LS0tIDI2LDMyIC0tLS0NCiAgYXNtbGlua2FnZSBpbnQgKCpzeXNfa2lsbHAp
KGludCBwaWQsIGludCBzaWduYWwpOw0KICBhc21saW5rYWdlIGludCAoKnN5
c19zZXRncm91cHNwKShpbnQgZ2lkc2V0c2l6ZSwgZ2lkX3QgKmdyb3VwbGlz
dCk7DQogIA0KISBleHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxl
W107ICAvKiBjaGFuZ2VkIHRvIHVpbnQgYmVjYXVzZSBTUEFSQzY0IGhhcyBz
eXNjYWx0YWJsZSBvZiAzMmJpdCBpdGVtcyAqLw0KICBleHRlcm4gc3RydWN0
IGZpbGVfc3lzdGVtX3R5cGUgYWZzX2ZpbGVfc3lzdGVtOw0KICANCiAgc3Rh
dGljIGxvbmcgZ2V0X3BhZ2Vfb2Zmc2V0KHZvaWQpOw0KKioqKioqKioqKioq
KioqDQoqKiogNDIsNTMgKioqKg0KICAvKiBTaW5jZSBzeXNfbmlfc3lzY2Fs
bCBpcyBub3QgZXhwb3J0ZWQsIEkgbmVlZCB0byBjYWNoZSBpdCBpbiBvcmRl
ciB0byByZXN0b3JlDQogICAqIGl0Lg0KICAgKi8NCiEgc3RhdGljIHZvaWQg
KmFmc19uaV9zeXNjYWxsID0gTlVMTDsNCiAgDQogIGludCBpbml0X21vZHVs
ZSh2b2lkKQ0KICB7DQogICAgICBleHRlcm4gaW50IGFmc19zeXNjYWxsKCk7
DQogICAgICBleHRlcm4gaW50IGFmc194c2V0Z3JvdXBzKCk7DQogIA0KICAg
ICAgLyogb2J0YWluIFBBR0VfT0ZGU0VUIHZhbHVlICovDQogICAgICBhZnNf
bGludXhfcGFnZV9vZmZzZXQgPSBnZXRfcGFnZV9vZmZzZXQoKTsNCi0tLSA0
Miw3OCAtLS0tDQogIC8qIFNpbmNlIHN5c19uaV9zeXNjYWxsIGlzIG5vdCBl
eHBvcnRlZCwgSSBuZWVkIHRvIGNhY2hlIGl0IGluIG9yZGVyIHRvIHJlc3Rv
cmUNCiAgICogaXQuDQogICAqLw0KISBzdGF0aWMgdW5zaWduZWQgaW50IGFm
c19uaV9zeXNjYWxsID0gMDsNCiAgDQorICNpZmRlZiBBRlNfU1BBUkM2NF9M
SU5VWDIwX0VOVg0KKyBzdGF0aWMgdW5zaWduZWQgaW50IGFmc19uaV9zeXNj
YWxsMzIgPSAwOw0KKyBhc21saW5rYWdlIGludCAoKnN5c19zZXRncm91cHNw
MzIpKGludCBnaWRzZXRzaXplLCBfX2tlcm5lbF9naWRfdDMyICpncm91cGxp
c3QpOw0KKyBleHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlMzJb
XTsNCisgDQorIGFzbWxpbmthZ2UgaW50IGFmc19zeXNjYWxsMzIobG9uZyBz
eXNjYWxsLCBsb25nIHBhcm0xLCBsb25nIHBhcm0yLCBsb25nIHBhcm0zLA0K
KyAJCQkgICAgIGxvbmcgcGFybTQsIGxvbmcgcGFybTUpDQorIHsNCisgX19h
c21fXyBfX3ZvbGF0aWxlX18gKCINCisgCXNybCAlbzQsIDAsICVvNA0KKyAJ
bW92ICVvNywgJWk3DQorIAljYWxsIGFmc19zeXNjYWxsDQorIAlzcmwgJW81
LCAwLCAlbzUNCisgCXJldA0KKyAJbm9wDQorICIpOw0KKyB9DQorICNlbmRp
Zg0KKyANCisgI2RlZmluZSBQT0lOVEVSMlNZU0NBTEwgKHVuc2lnbmVkIGlu
dCkodW5zaWduZWQgbG9uZykNCisgI2RlZmluZSBTWVNDQUxMMlBPSU5URVIg
KHZvaWQgKikobG9uZykNCisgDQogIGludCBpbml0X21vZHVsZSh2b2lkKQ0K
ICB7DQogICAgICBleHRlcm4gaW50IGFmc19zeXNjYWxsKCk7DQogICAgICBl
eHRlcm4gaW50IGFmc194c2V0Z3JvdXBzKCk7DQorICNpZmRlZiBBRlNfU1BB
UkM2NF9MSU5VWDIwX0VOVg0KKyAgICAgZXh0ZXJuIGludCBhZnNfeHNldGdy
b3VwczMyKCk7DQorICNlbmRpZg0KICANCiAgICAgIC8qIG9idGFpbiBQQUdF
X09GRlNFVCB2YWx1ZSAqLw0KICAgICAgYWZzX2xpbnV4X3BhZ2Vfb2Zmc2V0
ID0gZ2V0X3BhZ2Vfb2Zmc2V0KCk7DQoqKioqKioqKioqKioqKioNCioqKiA1
OSw4NCAqKioqDQogICAgICB9DQogIA0KICAgICAgLyogSW5pdGlhbGl6ZSBw
b2ludGVycyB0byBrZXJuZWwgc3lzY2FsbHMuICovDQohICAgICBzeXNfc2V0
dGltZW9mZGF5cCA9IHN5c19jYWxsX3RhYmxlW19fTlJfc2V0dGltZW9mZGF5
XTsNCiEgICAgIHN5c19zb2NrZXRjYWxscCA9IHN5c19jYWxsX3RhYmxlW19f
TlJfc29ja2V0Y2FsbF07DQohICAgICBzeXNfa2lsbHAgPSBzeXNfY2FsbF90
YWJsZVtfX05SX2tpbGxdOw0KICANCiAgICAgIC8qIHNldHVwIEFGUyBlbnRy
eSBwb2ludC4gKi8NCiEgICAgIGlmIChzeXNfY2FsbF90YWJsZVtfX05SX2Fm
c19zeXNjYWxsXSA9PSBhZnNfc3lzY2FsbCkgew0KICAJcHJpbnRmKCJBRlMg
c3lzY2FsbCBlbnRyeSBwb2ludCBhbHJlYWR5IGluIHVzZSFcbiIpOw0KICAJ
cmV0dXJuIC1FQlVTWTsNCiAgICAgIH0NCiAgDQogIA0KICAgICAgYWZzX25p
X3N5c2NhbGwgPSBzeXNfY2FsbF90YWJsZVtfX05SX2Fmc19zeXNjYWxsXTsN
CiEgICAgIHN5c19jYWxsX3RhYmxlW19fTlJfYWZzX3N5c2NhbGxdID0gYWZz
X3N5c2NhbGw7DQogIA0KICAgICAgb3NpX0luaXQoKTsNCiAgICAgIHJlZ2lz
dGVyX2ZpbGVzeXN0ZW0oJmFmc19maWxlX3N5c3RlbSk7DQogIA0KICAgICAg
LyogSW50ZXJjZXB0IHNldGdyb3VwcyBjYWxscyAqLw0KISAgICAgc3lzX3Nl
dGdyb3Vwc3AgPSBzeXNfY2FsbF90YWJsZVtfX05SX3NldGdyb3Vwc107DQoh
ICAgICBzeXNfY2FsbF90YWJsZVtfX05SX3NldGdyb3Vwc10gPSBhZnNfeHNl
dGdyb3VwczsNCiAgDQogICAgICByZXR1cm4gMDsNCiAgfQ0KLS0tIDg0LDEx
NyAtLS0tDQogICAgICB9DQogIA0KICAgICAgLyogSW5pdGlhbGl6ZSBwb2lu
dGVycyB0byBrZXJuZWwgc3lzY2FsbHMuICovDQohICAgICBzeXNfc2V0dGlt
ZW9mZGF5cCA9IFNZU0NBTEwyUE9JTlRFUiBzeXNfY2FsbF90YWJsZVtfX05S
X3NldHRpbWVvZmRheV07DQohICAgICBzeXNfc29ja2V0Y2FsbHAgPSBTWVND
QUxMMlBPSU5URVIgc3lzX2NhbGxfdGFibGVbX19OUl9zb2NrZXRjYWxsXTsN
CiEgICAgIHN5c19raWxscCA9IFNZU0NBTEwyUE9JTlRFUiBzeXNfY2FsbF90
YWJsZVtfX05SX2tpbGxdOw0KICANCiAgICAgIC8qIHNldHVwIEFGUyBlbnRy
eSBwb2ludC4gKi8NCiEgICAgIGlmIChTWVNDQUxMMlBPSU5URVIgc3lzX2Nh
bGxfdGFibGVbX19OUl9hZnNfc3lzY2FsbF0gPT0gYWZzX3N5c2NhbGwpIHsN
CiAgCXByaW50ZigiQUZTIHN5c2NhbGwgZW50cnkgcG9pbnQgYWxyZWFkeSBp
biB1c2UhXG4iKTsNCiAgCXJldHVybiAtRUJVU1k7DQogICAgICB9DQogIA0K
ICANCiAgICAgIGFmc19uaV9zeXNjYWxsID0gc3lzX2NhbGxfdGFibGVbX19O
Ul9hZnNfc3lzY2FsbF07DQohICAgICBzeXNfY2FsbF90YWJsZVtfX05SX2Fm
c19zeXNjYWxsXSA9IFBPSU5URVIyU1lTQ0FMTCBhZnNfc3lzY2FsbDsNCiEg
I2lmZGVmIEFGU19TUEFSQzY0X0xJTlVYMjBfRU5WDQohICAgICBhZnNfbmlf
c3lzY2FsbDMyID0gc3lzX2NhbGxfdGFibGUzMltfX05SX2Fmc19zeXNjYWxs
XTsNCiEgICAgIHN5c19jYWxsX3RhYmxlMzJbX19OUl9hZnNfc3lzY2FsbF0g
PSBQT0lOVEVSMlNZU0NBTEwgYWZzX3N5c2NhbGwzMjsNCiEgI2VuZGlmDQog
IA0KICAgICAgb3NpX0luaXQoKTsNCiAgICAgIHJlZ2lzdGVyX2ZpbGVzeXN0
ZW0oJmFmc19maWxlX3N5c3RlbSk7DQogIA0KICAgICAgLyogSW50ZXJjZXB0
IHNldGdyb3VwcyBjYWxscyAqLw0KISAgICAgc3lzX3NldGdyb3Vwc3AgPSBT
WVNDQUxMMlBPSU5URVIgc3lzX2NhbGxfdGFibGVbX19OUl9zZXRncm91cHNd
Ow0KISAgICAgc3lzX2NhbGxfdGFibGVbX19OUl9zZXRncm91cHNdID0gUE9J
TlRFUjJTWVNDQUxMIGFmc194c2V0Z3JvdXBzOw0KISAjaWZkZWYgQUZTX1NQ
QVJDNjRfTElOVVgyMF9FTlYNCiEgICAgIHN5c19zZXRncm91cHNwMzIgPSBT
WVNDQUxMMlBPSU5URVIgc3lzX2NhbGxfdGFibGUzMltfX05SX3NldGdyb3Vw
c107DQohICAgICBzeXNfY2FsbF90YWJsZTMyW19fTlJfc2V0Z3JvdXBzXSA9
IFBPSU5URVIyU1lTQ0FMTCBhZnNfeHNldGdyb3VwczMyOw0KISAjZW5kaWYN
CiAgDQogICAgICByZXR1cm4gMDsNCiAgfQ0KKioqKioqKioqKioqKioqDQoq
KiogODcsOTQgKioqKg0KICB7DQogICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3Qg
KnQ7DQogIA0KISAgICAgc3lzX2NhbGxfdGFibGVbX19OUl9zZXRncm91cHNd
ID0gc3lzX3NldGdyb3Vwc3A7DQogICAgICBzeXNfY2FsbF90YWJsZVtfX05S
X2Fmc19zeXNjYWxsXSA9IGFmc19uaV9zeXNjYWxsOw0KICANCiAgICAgIHVu
cmVnaXN0ZXJfZmlsZXN5c3RlbSgmYWZzX2ZpbGVfc3lzdGVtKTsNCiAgDQot
LS0gMTIwLDEzMSAtLS0tDQogIHsNCiAgICAgIHN0cnVjdCB0YXNrX3N0cnVj
dCAqdDsNCiAgDQohICAgICBzeXNfY2FsbF90YWJsZVtfX05SX3NldGdyb3Vw
c10gPSBQT0lOVEVSMlNZU0NBTEwgc3lzX3NldGdyb3Vwc3A7DQogICAgICBz
eXNfY2FsbF90YWJsZVtfX05SX2Fmc19zeXNjYWxsXSA9IGFmc19uaV9zeXNj
YWxsOw0KKyAjaWZkZWYgQUZTX1NQQVJDNjRfTElOVVgyMF9FTlYNCisgICAg
IHN5c19jYWxsX3RhYmxlMzJbX19OUl9zZXRncm91cHNdID0gUE9JTlRFUjJT
WVNDQUxMIHN5c19zZXRncm91cHNwMzI7DQorICAgICBzeXNfY2FsbF90YWJs
ZTMyW19fTlJfYWZzX3N5c2NhbGxdID0gYWZzX25pX3N5c2NhbGwzMjsNCisg
I2VuZGlmDQogIA0KICAgICAgdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhZnNf
ZmlsZV9zeXN0ZW0pOw0KICANCioqKioqKioqKioqKioqKg0KKioqIDEwMCwx
MDYgKioqKg0KICANCiAgc3RhdGljIGxvbmcgZ2V0X3BhZ2Vfb2Zmc2V0KHZv
aWQpDQogIHsNCiEgI2lmIGRlZmluZWQoQUZTX1BQQ19MSU5VWDIyX0VOVikN
CiAgICAgIHJldHVybiBQQUdFX09GRlNFVDsNCiAgI2Vsc2UNCiAgICAgIHN0
cnVjdCB0YXNrX3N0cnVjdCAqcDsNCi0tLSAxMzcsMTQzIC0tLS0NCiAgDQog
IHN0YXRpYyBsb25nIGdldF9wYWdlX29mZnNldCh2b2lkKQ0KICB7DQohICNp
ZiBkZWZpbmVkKEFGU19QUENfTElOVVgyMl9FTlYpIHx8IGRlZmluZWQoQUZT
X1NQQVJDNjRfTElOVVgyMF9FTlYpIHx8IGRlZmluZWQoQUZTX1NQQVJDX0xJ
TlVYMjBfRU5WKQ0KICAgICAgcmV0dXJuIFBBR0VfT0ZGU0VUOw0KICAjZWxz
ZQ0KICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwOw0KKioqIHNyYy9hZnMv
TElOVVgvb3NpX3NsZWVwLmMgMDk6NTA6MzYJMS4xLjEuMg0KLS0tIHNyYy9h
ZnMvTElOVVgvb3NpX3NsZWVwLmMgMTI6MzM6MTYNCioqKioqKioqKioqKioq
Kg0KKioqIDE2LDI0ICoqKioNCiAgDQogICNpZiBkZWZpbmVkKEFGU19HTE9C
QUxfU1VOTE9DSykNCiAgc3RhdGljIGludCBvc2lfVGltZWRTbGVlcChjaGFy
ICpldmVudCwgYWZzX2ludDMyIGFtcywgaW50IGFpbnRvayk7DQogIHZvaWQg
YWZzX29zaV9XYWtldXAoY2hhciAqZXZlbnQpOw0KICB2b2lkIGFmc19vc2lf
U2xlZXAoY2hhciAqZXZlbnQpOw0KLSAjZW5kaWYNCiAgDQogIHN0YXRpYyBj
aGFyIHdhaXRWOw0KICANCi0tLSAxNiwyNCAtLS0tDQogIA0KICAjaWYgZGVm
aW5lZChBRlNfR0xPQkFMX1NVTkxPQ0spDQogIHN0YXRpYyBpbnQgb3NpX1Rp
bWVkU2xlZXAoY2hhciAqZXZlbnQsIGFmc19pbnQzMiBhbXMsIGludCBhaW50
b2spOw0KKyAjZW5kaWYNCiAgdm9pZCBhZnNfb3NpX1dha2V1cChjaGFyICpl
dmVudCk7DQogIHZvaWQgYWZzX29zaV9TbGVlcChjaGFyICpldmVudCk7DQog
IA0KICBzdGF0aWMgY2hhciB3YWl0VjsNCiAgDQoqKiogc3JjL2Fmcy9MSU5V
WC9vc2lfdm5vZGVvcHMuYyAwOTo1MDozNgkxLjEuMS4yDQotLS0gc3JjL2Fm
cy9MSU5VWC9vc2lfdm5vZGVvcHMuYyAxMDo0ODoxNAkxLjMNCioqKioqKioq
KioqKioqKg0KKioqIDE0NiwxNTEgKioqKg0KLS0tIDE0NiwxNTIgLS0tLQ0K
ICBzdGF0aWMgaW50IGFmc19saW51eF9yZWFkZGlyKHN0cnVjdCBmaWxlICpm
cCwNCiAgCQkJICAgICB2b2lkICpkaXJidWYsIGZpbGxkaXJfdCBmaWxsZGly
KQ0KICB7DQorICAgICBleHRlcm4gc3RydWN0IERpckVudHJ5ICogYWZzX2Rp
cl9HZXRCbG9iKCk7DQogICAgICBzdHJ1Y3QgdmNhY2hlICphdmMgPSAoc3Ry
dWN0IHZjYWNoZSopRklMRV9JTk9ERShmcCk7DQogICAgICBzdHJ1Y3QgdnJl
cXVlc3QgdHJlcTsNCiAgICAgIHJlZ2lzdGVyIHN0cnVjdCBkY2FjaGUgKnRk
YzsNCioqKioqKioqKioqKioqKg0KKioqIDUyNSw1MzEgKioqKg0KICB9DQog
IA0KICAvKiBOb3QgYWxsb3dlZCB0byBkaXJlY3RseSByZWFkIGEgZGlyZWN0
b3J5LiAqLw0KISBpbnQgYWZzX2xpbnV4X2Rpcl9yZWFkKHN0cnVjdCBmaWxl
ICpmcCwgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykN
CiAgew0KICAgICAgcmV0dXJuIC1FSVNESVI7DQogIH0NCi0tLSA1MjYsNTMy
IC0tLS0NCiAgfQ0KICANCiAgLyogTm90IGFsbG93ZWQgdG8gZGlyZWN0bHkg
cmVhZCBhIGRpcmVjdG9yeS4gKi8NCiEgc3NpemVfdCBhZnNfbGludXhfZGly
X3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyICpidWYsIHNpemVfdCBjb3Vu
dCwgbG9mZl90ICpwcG9zKQ0KICB7DQogICAgICByZXR1cm4gLUVJU0RJUjsN
CiAgfQ0KKioqIHNyYy9hZnMvVk5PUFMvYWZzX3Zub3BfbG9va3VwLmMgMDk6
NTA6MzYJMS4xLjEuMg0KLS0tIHNyYy9hZnMvVk5PUFMvYWZzX3Zub3BfbG9v
a3VwLmMgMTA6MDY6NTkJMS40DQoqKioqKioqKioqKioqKioNCioqKiAzMjUs
MzMxICoqKioNCi0tLSAzMjUsMzM1IC0tLS0NCiAgI2lmIChkZWZpbmVkKEFG
U19TR0k2Ml9FTlYpIHx8IGRlZmluZWQoQUZTX1NVTjU3XzY0QklUX0VOVikp
DQogIGV4dGVybiBpbnQgQmxvYlNjYW4oaW5vNjRfdCAqYWZpbGUsIGFmc19p
bnQzMiBhYmxvYik7DQogICNlbHNlDQorICNpZiBkZWZpbmVkIEFGU19MSU5V
WF82NEJJVF9LRVJORUwNCisgZXh0ZXJuIGludCBCbG9iU2Nhbihsb25nICph
ZmlsZSwgYWZzX2ludDMyIGFibG9iKTsNCisgI2Vsc2UNCiAgZXh0ZXJuIGlu
dCBCbG9iU2NhbihhZnNfaW50MzIgKmFmaWxlLCBhZnNfaW50MzIgYWJsb2Ip
Ow0KKyAjZW5kaWYNCiAgI2VuZGlmDQogIA0KICANCioqKiBzcmMvYWZzL1ZO
T1BTL2Fmc192bm9wX3JlYWRkaXIuYyAwOTo1MDozNgkxLjEuMS4yDQotLS0g
c3JjL2Fmcy9WTk9QUy9hZnNfdm5vcF9yZWFkZGlyLmMgMTA6MDY6NTkJMS40
DQoqKioqKioqKioqKioqKioNCioqKiA1OSw2NSAqKioqDQotLS0gNTksNjkg
LS0tLQ0KICAjaWYgZGVmaW5lZChBRlNfU0dJNjJfRU5WKSB8fCBkZWZpbmVk
KEFGU19TVU41N182NEJJVF9FTlYpDQogIGludCBCbG9iU2Nhbihpbm82NF90
ICphZmlsZSwgYWZzX2ludDMyIGFibG9iKQ0KICAjZWxzZQ0KKyAjaWZkZWYg
QUZTX0xJTlVYXzY0QklUX0tFUk5FTA0KKyBpbnQgQmxvYlNjYW4obG9uZyAq
YWZpbGUsIGFmc19pbnQzMiBhYmxvYikNCisgI2Vsc2UNCiAgaW50IEJsb2JT
Y2FuKGFmc19pbnQzMiAqYWZpbGUsIGFmc19pbnQzMiBhYmxvYikNCisgI2Vu
ZGlmDQogICNlbmRpZg0KICB7DQogICAgICByZWdpc3RlciBhZnNfaW50MzIg
cmVsYXRpdmVCbG9iOw0KKioqIHNyYy9jb25maWcvTWFrZWZpbGUuc3BhcmM2
NF9saW51eDIyIE1heSAgNSAyMjozMjoyNyAxOTk4DQotLS0gc3JjL2NvbmZp
Zy9NYWtlZmlsZS5zcGFyYzY0X2xpbnV4MjIgRGVjIDIyIDE0OjM3OjUxIDIw
MDANCioqKioqKioqKioqKioqKg0KKioqIDAgKioqKg0KLS0tIDEsNTAgLS0t
LQ0KKyAjIENvcHlyaWdodCAxOTk4IFRyYW5zYXJjIENvcnBvcmF0aW9uIA0K
KyAjDQorICMgS2VlcCBtYWNyb3Mgd2l0aGluIGVhY2ggc2VjdGlvbiBpbiBz
b3J0ZWQgb3JkZXIgZm9yIGNsZWFuIGRpZmYgZGlzcGxheXMuDQorICMNCisg
IyBBRlNfT1NUWVBFIHVzZWQgdG8gaW5kaWNhdGUgc3VmZml4ZXMgYW5kIG9z
IHNwZWNpZmljIHN1YmRpcmVjdG9yaWVzLg0KKyBBRlNfT1NUWVBFID0gTElO
VVgNCisgDQorICMgQmFzZSBkaXJlY3RvcnkgZm9yIGxpbnV4IGtlcm5lbCBz
b3VyY2UuIEFjdHVhbGx5IGEgcHJlZml4IHdoaWNoIGlzIGNvbXBsZXRlDQor
ICMgd2hlbiBMSU5VWF9WRVJTIGlzIGFwcGVuZGVkIHRvIGl0Lg0KKyBMSU5V
WF9TUkNESVIgPSAvdXNyL3NyYy9saW51eC0NCisgIyBEZWZhdWx0IGxpc3Qg
b2YgTGludXgga2VybmVscyB0byBidWlsZC4gQnVpbGQgd2lsbCBydW4gb25s
eSBpZiBhbGwNCisgIyBjYW4gYmUgYnVpbHQuIFRvIGJ1aWxkIGEgZGlmZmVy
ZW50IHNldCwgc3BlY2lmeSBMSU5VWF9WRVJTIHRvIG1ha2UuDQorIExJTlVY
X1ZFUlMgPSAyLjIuMTQNCisgDQorICMNCisgIyBjb21waWxhdGlvbiBhbmQg
bGluayBlZGl0b3IgZmxhZ3MNCisgREJHPS1nDQorIE9QVE1aPS1PMg0KKyBQ
QU1fQ0ZMQUdTID0gLU8yIC1EbGludXggLURMSU5VWF9QQU0gLWZQSUMNCisg
IyBQdXQgLU8yIGhlcmUgdG8gX2Vuc3VyZV8gYWxsIE1ha2VmaWxlcyBwaWNr
IGl0IHVwLg0KKyBYQ0ZMQUdTPSAtTzINCisgTVRfQ0ZMQUdTPS1EQUZTX1BU
SFJFQURfRU5WIC1wdGhyZWFkIC1EX1JFRU5UUkFOVCAke1hDRkxBR1N9DQor
IFhMREZMQUdTPQ0KKyBTSEFSRV9MREZMQUdTID0gLXNoYXJlZCAtWGxpbmtl
ciAteA0KKyBTSExJQl9TVUZGSVg9c28NCisgU0hMSUJfQ0ZMQUdTPQ0KKyAj
DQorICMgbGlicmFyaWVzDQorIE1UTElCUz0tbHB0aHJlYWQNCisgVFhMSUJT
PSAvdXNyL2xpYi9saWJuY3Vyc2VzLnNvDQorIFhMSUJTPQ0KKyAjDQorICMg
cHJvZ3JhbXMNCisgQVI9YXINCisgQVM9YXMNCisgQ1A9Y3ANCisgSU5TVEFM
TD0ke1NSQ0RJUn1iaW4vaW5zdGFsbA0KKyBMRD1sZCAgIA0KKyBNVF9DQz1j
Yw0KKyBNVj1tdg0KKyBSQU5MSUI9cmFubGliDQorIFJNPXJtDQorIFdBU0hU
T09MPSR7U1JDRElSfWJpbi93YXNodG9vbA0KKyAjDQorICMgT3RoZXIgT1Mg
c3BlY2lmaWMgcmVxdWlyZW1lbnRzDQorICMNCisgWUFDQyA9IGJpc29uIC15
DQorIExFWCA9IGZsZXggLWwNCisgIyBVc2VkIGluIGRlcyBsaWJyYXJ5Lg0K
KyBDUllQVF9PQkogPSBjcnlwdC5vDQoqKiogc3JjL2NvbmZpZy9NYWtlZmls
ZS5zcGFyY19saW51eDIyIE1heSAgNSAyMjozMjoyNyAxOTk4DQotLS0gc3Jj
L2NvbmZpZy9NYWtlZmlsZS5zcGFyY19saW51eDIyIERlYyAyMiAxNDozNzo1
MSAyMDAwDQoqKioqKioqKioqKioqKioNCioqKiAwICoqKioNCi0tLSAxLDUw
IC0tLS0NCisgIyBDb3B5cmlnaHQgMTk5OCBUcmFuc2FyYyBDb3Jwb3JhdGlv
biANCisgIw0KKyAjIEtlZXAgbWFjcm9zIHdpdGhpbiBlYWNoIHNlY3Rpb24g
aW4gc29ydGVkIG9yZGVyIGZvciBjbGVhbiBkaWZmIGRpc3BsYXlzLg0KKyAj
DQorICMgQUZTX09TVFlQRSB1c2VkIHRvIGluZGljYXRlIHN1ZmZpeGVzIGFu
ZCBvcyBzcGVjaWZpYyBzdWJkaXJlY3Rvcmllcy4NCisgQUZTX09TVFlQRSA9
IExJTlVYDQorIA0KKyAjIEJhc2UgZGlyZWN0b3J5IGZvciBsaW51eCBrZXJu
ZWwgc291cmNlLiBBY3R1YWxseSBhIHByZWZpeCB3aGljaCBpcyBjb21wbGV0
ZQ0KKyAjIHdoZW4gTElOVVhfVkVSUyBpcyBhcHBlbmRlZCB0byBpdC4NCisg
TElOVVhfU1JDRElSID0gL3Vzci9zcmMvbGludXgtDQorICMgRGVmYXVsdCBs
aXN0IG9mIExpbnV4IGtlcm5lbHMgdG8gYnVpbGQuIEJ1aWxkIHdpbGwgcnVu
IG9ubHkgaWYgYWxsDQorICMgY2FuIGJlIGJ1aWx0LiBUbyBidWlsZCBhIGRp
ZmZlcmVudCBzZXQsIHNwZWNpZnkgTElOVVhfVkVSUyB0byBtYWtlLg0KKyBM
SU5VWF9WRVJTID0gMi4yLjE0DQorIA0KKyAjDQorICMgY29tcGlsYXRpb24g
YW5kIGxpbmsgZWRpdG9yIGZsYWdzDQorIERCRz0tZw0KKyBPUFRNWj0tTzIN
CisgUEFNX0NGTEFHUyA9IC1PMiAtRGxpbnV4IC1ETElOVVhfUEFNIC1mUElD
DQorICMgUHV0IC1PMiBoZXJlIHRvIF9lbnN1cmVfIGFsbCBNYWtlZmlsZXMg
cGljayBpdCB1cC4NCisgWENGTEFHUz0gLU8yDQorIE1UX0NGTEFHUz0tREFG
U19QVEhSRUFEX0VOViAtcHRocmVhZCAtRF9SRUVOVFJBTlQgJHtYQ0ZMQUdT
fQ0KKyBYTERGTEFHUz0NCisgU0hBUkVfTERGTEFHUyA9IC1zaGFyZWQgLVhs
aW5rZXIgLXgNCisgU0hMSUJfU1VGRklYPXNvDQorIFNITElCX0NGTEFHUz0N
CisgIw0KKyAjIGxpYnJhcmllcw0KKyBNVExJQlM9LWxwdGhyZWFkDQorIFRY
TElCUz0gL3Vzci9saWIvbGlibmN1cnNlcy5zbw0KKyBYTElCUz0NCisgIw0K
KyAjIHByb2dyYW1zDQorIEFSPWFyDQorIEFTPWFzDQorIENQPWNwDQorIElO
U1RBTEw9JHtTUkNESVJ9YmluL2luc3RhbGwNCisgTEQ9bGQgICANCisgTVRf
Q0M9Y2MNCisgTVY9bXYNCisgUkFOTElCPXJhbmxpYg0KKyBSTT1ybQ0KKyBX
QVNIVE9PTD0ke1NSQ0RJUn1iaW4vd2FzaHRvb2wNCisgIw0KKyAjIE90aGVy
IE9TIHNwZWNpZmljIHJlcXVpcmVtZW50cw0KKyAjDQorIFlBQ0MgPSBiaXNv
biAteQ0KKyBMRVggPSBmbGV4IC1sDQorICMgVXNlZCBpbiBkZXMgbGlicmFy
eS4NCisgQ1JZUFRfT0JKID0gY3J5cHQubw0KKioqIHNyYy9jb25maWcvYWZz
X3N5c25hbWVzLmggMDk6NTA6NDEJMS4xLjEuMg0KLS0tIHNyYy9jb25maWcv
YWZzX3N5c25hbWVzLmggMTA6NDg6MTQJMS4zDQoqKioqKioqKioqKioqKioN
CioqKiAxMTQsMTE5ICoqKioNCi0tLSAxMTQsMTI0IC0tLS0NCiAgI2RlZmlu
ZSBTWVNfTkFNRV9JRF9wcGNfbGludXgyMiAgICAgICAgIDE2MDENCiAgI2Rl
ZmluZSBTWVNfTkFNRV9JRF9wcGNfbGludXgyNCAgICAgICAgIDE2MDINCiAg
DQorICNkZWZpbmUgU1lTX05BTUVfSURfc3BhcmNfbGludXgyCTE3MDANCisg
I2RlZmluZSBTWVNfTkFNRV9JRF9zcGFyY19saW51eDIyCTE3MDENCisgDQor
ICNkZWZpbmUgU1lTX05BTUVfSURfc3BhcmM2NF9saW51eDIJMTgwMA0KKyAj
ZGVmaW5lIFNZU19OQU1FX0lEX3NwYXJjNjRfbGludXgyMgkxODAxDQogIA0K
ICANCiAgLyoNCioqKiBzcmMvY29uZmlnL3BhcmFtLnNwYXJjNjRfbGludXgy
Mi5oIE1heSAgNSAyMjozMjoyNyAxOTk4DQotLS0gc3JjL2NvbmZpZy9wYXJh
bS5zcGFyYzY0X2xpbnV4MjIuaCBEZWMgMjIgMTI6NTg6MzcgMjAwMA0KKioq
KioqKioqKioqKioqDQoqKiogMCAqKioqDQotLS0gMSw3OSAtLS0tDQorIC8q
IENvcHlyaWdodCAoQykgMTk5OCBieSBUcmFuc2FyYyBDb3Jwb3JhdGlvbiAq
Lw0KKyANCisgDQorICNpZm5kZWYgX1BBUkFNX1NQQVJDNjRfTElOVVgyMl9I
Xw0KKyAjZGVmaW5lIF9QQVJBTV9TUEFSQzY0X0xJTlVYMjJfSF8NCisgDQor
IC8qIEluIHVzZXIgc3BhY2UgdGhlIEFGU19MSU5VWDIwX0VOViBzaG91bGQg
YmUgc3VmZmljaWVudC4gSW4gdGhlIGtlcm5lbCwNCisgICogaXQncyBhIGp1
ZGdtZW50IGNhbGwuIElmIHNvbWV0aGluZyBpcyBvYnZpb3VzbHkgc3BhcmM2
NCBzcGVjaWZpYywgdXNlIHRoYXQNCisgICogI2RlZmluZSBpbnN0ZWFkLiBO
b3RlIHRoYXQgIjIwIiByZWZlcnMgdG8gdGhlIGxpbnV4IDIuMCBrZXJuZWwu
IFRoZSAiMiINCisgICogaW4gdGhlIHN5c25hbWUgaXMgdGhlIGN1cnJlbnQg
dmVyc2lvbiBvZiB0aGUgY2xpZW50LiBUaGlzIHRha2VzIGludG8NCisgICog
YWNjb3VudCB0aGUgcGVyZmVycmVkIE9TIHVzZXIgc3BhY2UgY29uZmlndXJh
dGlvbiBhcyB3ZWxsIGFzIHRoZSBrZXJuZWwuDQorICAqLw0KKyANCisgI2Rl
ZmluZSBBRlNfTElOVVgyMF9FTlYJMQ0KKyAjZGVmaW5lIEFGU19MSU5VWDIy
X0VOVgkxDQorICNkZWZpbmUgQUZTX1NQQVJDNjRfTElOVVgyMF9FTlYJMQ0K
KyAjZGVmaW5lIEFGU19TUEFSQzY0X0xJTlVYMjJfRU5WCTENCisgI2RlZmlu
ZSBBRlNfTElOVVhfNjRCSVRfS0VSTkVMIDENCisgI2RlZmluZSBBRlNfTk9O
RlNUUkFOUyAxDQorIA0KKyAjZGVmaW5lIEFGU19NT1VOVF9BRlMgImFmcyIJ
LyogVGhlIG5hbWUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZS4gKi8NCisgI2Rl
ZmluZSBBRlNfU1lTQ0FMTCAyMjcNCisgI2RlZmluZSBBRlNfNjRCSVRfSU9Q
U19FTlYgIDENCisgI2RlZmluZSBBRlNfTkFNRUlfRU5WICAgICAxICAgLyog
VXNlciBzcGFjZSBpbnRlcmZhY2UgdG8gZmlsZSBzeXN0ZW0gKi8NCisgDQor
ICNkZWZpbmUgQUZTXzY0QklUX0VOVgkJMQkvKiBEZWZpbmVzIGFmc19pbnQz
MiBhcyBpbnQsIG5vdCBsb25nLiAqLw0KKyAjZGVmaW5lIEFGU18zMkJJVF9V
U1JfRU5WCTEJLyogdXNlciBsZXZlbCBwcm9jZXNzZXMgYXJlIDMyYml0ICov
DQorICNkZWZpbmUgQUZTXzY0QklUUE9JTlRFUl9FTlYJMQkvKiBwb2ludGVy
cyBhcmUgNjQgYml0cy4gKi8NCisgDQorICNpbmNsdWRlIDxhZnMvYWZzX3N5
c25hbWVzLmg+DQorIA0KKyAjZGVmaW5lIEFGU19VU0VSU1BBQ0VfSVBfQURE
UiAxDQorICNkZWZpbmUgUlhLX0xJU1RFTkVSX0VOViAxDQorICNkZWZpbmUg
QUZTX0dDUEFHUwkJMCAgICAgICAvKiBpZiBub256ZXJvLCBnYXJiYWdlIGNv
bGxlY3QgUEFHcyAqLw0KKyANCisgLyogTWFjaGluZSAvIE9wZXJhdGluZyBz
eXN0ZW0gaW5mb3JtYXRpb24gKi8NCisgI2RlZmluZSBTWVNfTkFNRQkic3Bh
cmM2NF9saW51eDIyIg0KKyAjZGVmaW5lIFNZU19OQU1FX0lECVNZU19OQU1F
X0lEX3NwYXJjNjRfbGludXgyMg0KKyAjZGVmaW5lIEFGU0JJR19FTkRJQU4g
ICAgMQ0KKyAjZGVmaW5lIEFGU19IQVZFX0ZGUyAgICAgICAgMSAgICAgICAv
KiBVc2Ugc3lzdGVtJ3MgZmZzLiAqLw0KKyAjZGVmaW5lIEFGU19IQVZFX1NU
QVRWRlMgICAgMAkvKiBTeXN0ZW0gZG9lc24ndCBzdXBwb3J0IHN0YXR2ZnMg
Ki8NCisgI2RlZmluZSBBRlNfVk1fUkRXUl9FTlYJICAgIDEJLyogcmVhZC93
cml0ZSBpbXBsZW1lbnRlZCB2aWEgVk0gKi8NCisgDQorICNpZiBkZWZpbmVk
KF9fS0VSTkVMX18pICYmICFkZWZpbmVkKEtEVU1QX0tFUk5FTCkNCisgI2lu
Y2x1ZGUgPGxpbnV4L2NvbmZpZy5oPg0KKyAjaWZkZWYgQ09ORklHX1NNUA0K
KyAjdW5kZWYgQ09ORklHX1NNUA0KKyAjZW5kaWYNCisgLyogVXNpbmcgIkFG
U19TTVAiIHRvIG1hcCB0byBob3dldmVyIG1hbnkgI2RlZmluZSdzIGFyZSBy
ZXF1aXJlZCB0byBnZXQNCisgICogTVAgdG8gY29tcGlsZSBmb3IgTGludXgN
CisgICovDQorICNpZmRlZiBBRlNfU01QDQorICNkZWZpbmUgQ09ORklHX1NN
UA0KKyAjZGVmaW5lIF9fU01QX18NCisgI2RlZmluZSBBRlNfR0xPQkFMX1NV
TkxPQ0sNCisgI2VuZGlmDQorIA0KKyAjZW5kaWYgLyogX19LRVJORUxfXyAg
JiYgIURVTVBfS0VSTkVMKi8NCisgDQorICNpZmRlZiBLRVJORUwNCisgI2lm
bmRlZiBNSU4NCisgI2RlZmluZSBNSU4oQSxCKSAoKEEpIDwgKEIpID8gKEEp
IDogKEIpKQ0KKyAjZW5kaWYNCisgI2lmbmRlZiBNQVgNCisgI2RlZmluZSBN
QVgoQSxCKSAoKEEpID4gKEIpID8gKEEpIDogKEIpKQ0KKyAjZW5kaWYNCisg
I2VuZGlmIC8qIEtFUk5FTCAqLw0KKyANCisgLyogb24gc3BhcmNsaW51eCBp
cyBPX0xBUkdFRklMRSBkZWZpbmVkIGJ1dCB0aGVyZSBpcyBub3Qgb2ZmNjRf
dCwNCisgICAgc28gc21hbGwgaGFjayB0byBnZXQgdXNkX2ZpbGUuYyB3b3Jr
ICovDQorICNpZm5kZWYgS0VSTkVMDQorICNkZWZpbmUgX19VU0VfRklMRV9P
RkZTRVQ2NCAxDQorICNkZWZpbmUgX19VU0VfTEFSR0VGSUxFNjQgMQ0KKyAj
aWYgIWRlZmluZWQgb2ZmNjRfdA0KKyAjZGVmaW5lIG9mZjY0X3QgX19vZmY2
NF90DQorICNlbmRpZg0KKyAjZW5kaWYNCisgDQorICNlbmRpZiAvKiBfUEFS
QU1fU1BBUkM2NF9MSU5VWDIwX0hfICovDQoqKiogc3JjL2NvbmZpZy9wYXJh
bS5zcGFyYzY0X2xpbnV4MjJfdXNyLmggTWF5ICA1IDIyOjMyOjI3IDE5OTgN
Ci0tLSBzcmMvY29uZmlnL3BhcmFtLnNwYXJjNjRfbGludXgyMl91c3IuaCBE
ZWMgMjIgMTI6MTA6NTMgMjAwMA0KKioqKioqKioqKioqKioqDQoqKiogMCAq
KioqDQotLS0gMSw1NiAtLS0tDQorIC8qIENvcHlyaWdodCAoQykgMTk5OCBi
eSBUcmFuc2FyYyBDb3Jwb3JhdGlvbiAqLw0KKyANCisgDQorICNpZm5kZWYg
X1BBUkFNX1VTUl9TUEFSQzY0X0xJTlVYMjJfSF8NCisgI2RlZmluZSBfUEFS
QU1fVVNSX1NQQVJDNjRfTElOVVgyMl9IXw0KKyANCisgLyogSW4gdXNlciBz
cGFjZSB0aGUgQUZTX0xJTlVYMjBfRU5WIHNob3VsZCBiZSBzdWZmaWNpZW50
LiBJbiB0aGUga2VybmVsLA0KKyAgKiBpdCdzIGEganVkZ21lbnQgY2FsbC4g
SWYgc29tZXRoaW5nIGlzIG9idmlvdXNseSBzcGFyYzY0IHNwZWNpZmljLCB1
c2UgdGhhdA0KKyAgKiAjZGVmaW5lIGluc3RlYWQuIE5vdGUgdGhhdCAiMjAi
IHJlZmVycyB0byB0aGUgbGludXggMi4wIGtlcm5lbC4gVGhlICIyIg0KKyAg
KiBpbiB0aGUgc3lzbmFtZSBpcyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRo
ZSBjbGllbnQuIFRoaXMgdGFrZXMgaW50bw0KKyAgKiBhY2NvdW50IHRoZSBw
ZXJmZXJyZWQgT1MgdXNlciBzcGFjZSBjb25maWd1cmF0aW9uIGFzIHdlbGwg
YXMgdGhlIGtlcm5lbC4NCisgICovDQorIA0KKyAjZGVmaW5lIFVLRVJORUwJ
CQkxCS8qIHVzZXIgc3BhY2Uga2VybmVsICovDQorICNkZWZpbmUgQUZTX0VO
VgkJCTENCisgI2RlZmluZSBBRlNfVVNSX0xJTlVYMjBfRU5WCTENCisgI2Rl
ZmluZSBBRlNfVVNSX0xJTlVYMjJfRU5WCTENCisgI2RlZmluZSBBRlNfTk9O
RlNUUkFOUyAxDQorIA0KKyAjZGVmaW5lIEFGU19NT1VOVF9BRlMgImFmcyIJ
LyogVGhlIG5hbWUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZS4gKi8NCisgI2Rl
ZmluZSBBRlNfU1lTQ0FMTCAyMjcNCisgI2RlZmluZSBBRlNfNjRCSVRfSU9Q
U19FTlYgIDENCisgI2RlZmluZSBBRlNfTkFNRUlfRU5WICAgICAxICAgLyog
VXNlciBzcGFjZSBpbnRlcmZhY2UgdG8gZmlsZSBzeXN0ZW0gKi8NCisgI2lu
Y2x1ZGUgPGFmcy9hZnNfc3lzbmFtZXMuaD4NCisgDQorICNkZWZpbmUgQUZT
X1VTRVJTUEFDRV9JUF9BRERSIDENCisgI2RlZmluZSBSWEtfTElTVEVORVJf
RU5WIDENCisgI2RlZmluZSBBRlNfR0NQQUdTCQkwICAgICAgIC8qIGlmIG5v
bnplcm8sIGdhcmJhZ2UgY29sbGVjdCBQQUdzICovDQorIA0KKyANCisgLyog
TWFjaGluZSAvIE9wZXJhdGluZyBzeXN0ZW0gaW5mb3JtYXRpb24gKi8NCisg
I2RlZmluZSBTWVNfTkFNRQkic3BhcmM2NF9saW51eDIyIg0KKyAjZGVmaW5l
IFNZU19OQU1FX0lECVNZU19OQU1FX0lEX3NwYXJjNjRfbGludXgyMg0KKyAj
ZGVmaW5lIEFGU0JJR19FTkRJQU4gICAgMQ0KKyAjZGVmaW5lIEFGU19IQVZF
X0ZGUyAgICAgICAgMSAgICAgICAvKiBVc2Ugc3lzdGVtJ3MgZmZzLiAqLw0K
KyAjZGVmaW5lIEFGU19IQVZFX1NUQVRWRlMgICAgMAkvKiBTeXN0ZW0gZG9l
c24ndCBzdXBwb3J0IHN0YXR2ZnMgKi8NCisgI2RlZmluZSBBRlNfVk1fUkRX
Ul9FTlYJICAgIDEJLyogcmVhZC93cml0ZSBpbXBsZW1lbnRlZCB2aWEgVk0g
Ki8NCisgDQorICNkZWZpbmUJYWZzaW9faW92CXVpb19pb3YNCisgI2RlZmlu
ZQlhZnNpb19pb3ZjbnQJdWlvX2lvdmNudA0KKyAjZGVmaW5lCWFmc2lvX29m
ZnNldAl1aW9fb2Zmc2V0DQorICNkZWZpbmUJYWZzaW9fc2VnCXVpb19zZWdm
bGcNCisgI2RlZmluZQlhZnNpb19mbW9kZQl1aW9fZm1vZGUNCisgI2RlZmlu
ZQlhZnNpb19yZXNpZAl1aW9fcmVzaWQNCisgI2RlZmluZQlBRlNfVUlPU1lT
CTENCisgI2RlZmluZQlBRlNfVUlPVVNFUglVSU9fVVNFUlNQQUNFDQorICNk
ZWZpbmUJQUZTX0NMQllURVMJTUNMQllURVMNCisgI2RlZmluZQlBRlNfTUlO
Q0hBTkdFCTINCisgI2RlZmluZQlWQVRUUl9OVUxMCXVzcl92YXR0cl9udWxs
DQorIA0KKyAjZGVmaW5lIEFGU19ESVJFTlQNCisgI2lmbmRlZiBDTVNFUlZF
UlBSRUYNCisgI2RlZmluZSBDTVNFUlZFUlBSRUYNCisgI2VuZGlmDQorIA0K
KyAjZW5kaWYgLyogX1BBUkFNX1VTUl9TUEFSQzY0X0xJTlVYMjJfSF8gKi8N
CioqKiBzcmMvY29uZmlnL3BhcmFtLnNwYXJjX2xpbnV4MjIuaCBNYXkgIDUg
MjI6MzI6MjcgMTk5OA0KLS0tIHNyYy9jb25maWcvcGFyYW0uc3BhcmNfbGlu
dXgyMi5oIERlYyAyMiAxMjo1ODoyNiAyMDAwDQoqKioqKioqKioqKioqKioN
CioqKiAwICoqKioNCi0tLSAxLDgxIC0tLS0NCisgLyogQ29weXJpZ2h0IChD
KSAxOTk4IGJ5IFRyYW5zYXJjIENvcnBvcmF0aW9uICovDQorIA0KKyANCisg
I2lmbmRlZiBfUEFSQU1fU1BBUkNfTElOVVgyMl9IXw0KKyAjZGVmaW5lIF9Q
QVJBTV9TUEFSQ19MSU5VWDIyX0hfDQorIA0KKyAvKiBJbiB1c2VyIHNwYWNl
IHRoZSBBRlNfTElOVVgyMF9FTlYgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIElu
IHRoZSBrZXJuZWwsDQorICAqIGl0J3MgYSBqdWRnbWVudCBjYWxsLiBJZiBz
b21ldGhpbmcgaXMgb2J2aW91c2x5IHNwYXJjIHNwZWNpZmljLCB1c2UgdGhh
dA0KKyAgKiAjZGVmaW5lIGluc3RlYWQuIE5vdGUgdGhhdCAiMjAiIHJlZmVy
cyB0byB0aGUgbGludXggMi4wIGtlcm5lbC4gVGhlICIyIg0KKyAgKiBpbiB0
aGUgc3lzbmFtZSBpcyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBjbGll
bnQuIFRoaXMgdGFrZXMgaW50bw0KKyAgKiBhY2NvdW50IHRoZSBwZXJmZXJy
ZWQgT1MgdXNlciBzcGFjZSBjb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgdGhl
IGtlcm5lbC4NCisgICovDQorIA0KKyAjZGVmaW5lIEFGU19MSU5VWDIwX0VO
VgkxDQorICNkZWZpbmUgQUZTX0xJTlVYMjJfRU5WCTENCisgI2RlZmluZSBB
RlNfU1BBUkNfTElOVVgyMF9FTlYJMQ0KKyAjZGVmaW5lIEFGU19TUEFSQ19M
SU5VWDIyX0VOVgkxDQorICNkZWZpbmUgQUZTX05PTkZTVFJBTlMgMQ0KKyAN
CisgI2RlZmluZSBBRlNfTU9VTlRfQUZTICJhZnMiCS8qIFRoZSBuYW1lIG9m
IHRoZSBmaWxlc3lzdGVtIHR5cGUuICovDQorICNkZWZpbmUgQUZTX1NZU0NB
TEwgMjI3DQorICNkZWZpbmUgQUZTXzY0QklUX0lPUFNfRU5WICAxDQorICNk
ZWZpbmUgQUZTX05BTUVJX0VOViAgICAgMSAgIC8qIFVzZXIgc3BhY2UgaW50
ZXJmYWNlIHRvIGZpbGUgc3lzdGVtICovDQorICNpbmNsdWRlIDxhZnMvYWZz
X3N5c25hbWVzLmg+DQorIA0KKyAjZGVmaW5lIEFGU19VU0VSU1BBQ0VfSVBf
QUREUiAxDQorICNkZWZpbmUgUlhLX0xJU1RFTkVSX0VOViAxDQorICNkZWZp
bmUgQUZTX0dDUEFHUwkJMCAgICAgICAvKiBpZiBub256ZXJvLCBnYXJiYWdl
IGNvbGxlY3QgUEFHcyAqLw0KKyANCisgDQorIC8qIE1hY2hpbmUgLyBPcGVy
YXRpbmcgc3lzdGVtIGluZm9ybWF0aW9uICovDQorICNkZWZpbmUgU1lTX05B
TUUJInNwYXJjX2xpbnV4MjIiDQorICNkZWZpbmUgU1lTX05BTUVfSUQJU1lT
X05BTUVfSURfc3BhcmNfbGludXgyMg0KKyAjZGVmaW5lIEFGU0JJR19FTkRJ
QU4gICAgMQ0KKyAjZGVmaW5lIEFGU19IQVZFX0ZGUyAgICAgICAgMSAgICAg
ICAvKiBVc2Ugc3lzdGVtJ3MgZmZzLiAqLw0KKyAjZGVmaW5lIEFGU19IQVZF
X1NUQVRWRlMgICAgMAkvKiBTeXN0ZW0gZG9lc24ndCBzdXBwb3J0IHN0YXR2
ZnMgKi8NCisgI2RlZmluZSBBRlNfVk1fUkRXUl9FTlYJICAgIDEJLyogcmVh
ZC93cml0ZSBpbXBsZW1lbnRlZCB2aWEgVk0gKi8NCisgDQorICNpZiBkZWZp
bmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKEtEVU1QX0tFUk5FTCkNCisg
I2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPg0KKyAjaWZkZWYgQ09ORklHX1NN
UA0KKyAjdW5kZWYgQ09ORklHX1NNUA0KKyAjZW5kaWYNCisgLyogVXNpbmcg
IkFGU19TTVAiIHRvIG1hcCB0byBob3dldmVyIG1hbnkgI2RlZmluZSdzIGFy
ZSByZXF1aXJlZCB0byBnZXQNCisgICogTVAgdG8gY29tcGlsZSBmb3IgTGlu
dXgNCisgICovDQorICNpZmRlZiBBRlNfU01QDQorICNkZWZpbmUgQ09ORklH
X1NNUA0KKyAjZGVmaW5lIF9fU01QX18NCisgI2RlZmluZSBBRlNfR0xPQkFM
X1NVTkxPQ0sNCisgI2VuZGlmDQorIA0KKyAjZW5kaWYgLyogX19LRVJORUxf
XyAgJiYgIURVTVBfS0VSTkVMKi8NCisgDQorICNpZmRlZiBLRVJORUwNCisg
I2lmbmRlZiBNSU4NCisgI2RlZmluZSBNSU4oQSxCKSAoKEEpIDwgKEIpID8g
KEEpIDogKEIpKQ0KKyAjZW5kaWYNCisgI2lmbmRlZiBNQVgNCisgI2RlZmlu
ZSBNQVgoQSxCKSAoKEEpID4gKEIpID8gKEEpIDogKEIpKQ0KKyAjZW5kaWYN
CisgI2VuZGlmIC8qIEtFUk5FTCAqLw0KKyANCisgI2lmIGRlZmluZWQoQUZT
X1NNUCkgJiYgZGVmaW5lZChDT05GSUdfTU9EVkVSU0lPTlMpDQorIC8qIGhh
Y2ssIEkgZG9uJ3Qga25vdyB3aGF0IGVsc2Ugd2l0aCB0aGVlc2Ugc3ltYm9s
cyAqLw0KKyAjZGVmaW5lIF9kb19zcGluX2xvY2sgX2RvX3NwaW5fbG9ja19S
X192ZXJfX2RvX3NwaW5fbG9jaw0KKyAjZGVmaW5lIF9kb19zcGluX3VubG9j
ayBfZG9fc3Bpbl91bmxvY2tfUl9fdmVyX19kb19zcGluX3VubG9jaw0KKyAj
ZGVmaW5lIGtlcm5lbF9mbGFnIGtlcm5lbF9mbGFnX1JfX3Zlcl9rZXJuZWxf
ZmxhZw0KKyAjZW5kaWYNCisgDQorIC8qIG9uIHNwYXJjbGludXggaXMgT19M
QVJHRUZJTEUgZGVmaW5lZCBidXQgdGhlcmUgaXMgbm90IG9mZjY0X3QsDQor
ICAgIHNvIHNtYWxsIGhhY2sgdG8gZ2V0IHVzZF9maWxlLmMgd29yayAqLw0K
KyAjaWZuZGVmIEtFUk5FTA0KKyAjZGVmaW5lIF9fVVNFX0ZJTEVfT0ZGU0VU
NjQgMQ0KKyAjZGVmaW5lIF9fVVNFX0xBUkdFRklMRTY0IDENCisgI2lmICFk
ZWZpbmVkIG9mZjY0X3QNCisgI2RlZmluZSBvZmY2NF90IF9fb2ZmNjRfdA0K
KyAjZW5kaWYNCisgI2VuZGlmDQorIA0KKyAjZW5kaWYgLyogX1BBUkFNX1NQ
QVJDX0xJTlVYMjBfSF8gKi8NCioqKiBzcmMvY29uZmlnL3BhcmFtLnNwYXJj
X2xpbnV4MjJfdXNyLmggTWF5ICA1IDIyOjMyOjI3IDE5OTgNCi0tLSBzcmMv
Y29uZmlnL3BhcmFtLnNwYXJjX2xpbnV4MjJfdXNyLmggRGVjIDIyIDEyOjEw
OjM0IDIwMDANCioqKioqKioqKioqKioqKg0KKioqIDAgKioqKg0KLS0tIDEs
NTYgLS0tLQ0KKyAvKiBDb3B5cmlnaHQgKEMpIDE5OTggYnkgVHJhbnNhcmMg
Q29ycG9yYXRpb24gKi8NCisgDQorIA0KKyAjaWZuZGVmIF9QQVJBTV9VU1Jf
U1BBUkNfTElOVVgyMl9IXw0KKyAjZGVmaW5lIF9QQVJBTV9VU1JfU1BBUkNf
TElOVVgyMl9IXw0KKyANCisgLyogSW4gdXNlciBzcGFjZSB0aGUgQUZTX0xJ
TlVYMjBfRU5WIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJbiB0aGUga2VybmVs
LA0KKyAgKiBpdCdzIGEganVkZ21lbnQgY2FsbC4gSWYgc29tZXRoaW5nIGlz
IG9idmlvdXNseSBzcGFyYyBzcGVjaWZpYywgdXNlIHRoYXQNCisgICogI2Rl
ZmluZSBpbnN0ZWFkLiBOb3RlIHRoYXQgIjIwIiByZWZlcnMgdG8gdGhlIGxp
bnV4IDIuMCBrZXJuZWwuIFRoZSAiMiINCisgICogaW4gdGhlIHN5c25hbWUg
aXMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgY2xpZW50LiBUaGlzIHRh
a2VzIGludG8NCisgICogYWNjb3VudCB0aGUgcGVyZmVycmVkIE9TIHVzZXIg
c3BhY2UgY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIHRoZSBrZXJuZWwuDQor
ICAqLw0KKyANCisgI2RlZmluZSBVS0VSTkVMCQkJMQkvKiB1c2VyIHNwYWNl
IGtlcm5lbCAqLw0KKyAjZGVmaW5lIEFGU19FTlYJCQkxDQorICNkZWZpbmUg
QUZTX1VTUl9MSU5VWDIwX0VOVgkxDQorICNkZWZpbmUgQUZTX1VTUl9MSU5V
WDIyX0VOVgkxDQorICNkZWZpbmUgQUZTX05PTkZTVFJBTlMgMQ0KKyANCisg
I2RlZmluZSBBRlNfTU9VTlRfQUZTICJhZnMiCS8qIFRoZSBuYW1lIG9mIHRo
ZSBmaWxlc3lzdGVtIHR5cGUuICovDQorICNkZWZpbmUgQUZTX1NZU0NBTEwg
MjI3DQorICNkZWZpbmUgQUZTXzY0QklUX0lPUFNfRU5WICAxDQorICNkZWZp
bmUgQUZTX05BTUVJX0VOViAgICAgMSAgIC8qIFVzZXIgc3BhY2UgaW50ZXJm
YWNlIHRvIGZpbGUgc3lzdGVtICovDQorICNpbmNsdWRlIDxhZnMvYWZzX3N5
c25hbWVzLmg+DQorIA0KKyAjZGVmaW5lIEFGU19VU0VSU1BBQ0VfSVBfQURE
UiAxDQorICNkZWZpbmUgUlhLX0xJU1RFTkVSX0VOViAxDQorICNkZWZpbmUg
QUZTX0dDUEFHUwkJMCAgICAgICAvKiBpZiBub256ZXJvLCBnYXJiYWdlIGNv
bGxlY3QgUEFHcyAqLw0KKyANCisgDQorIC8qIE1hY2hpbmUgLyBPcGVyYXRp
bmcgc3lzdGVtIGluZm9ybWF0aW9uICovDQorICNkZWZpbmUgU1lTX05BTUUJ
InNwYXJjX2xpbnV4MjIiDQorICNkZWZpbmUgU1lTX05BTUVfSUQJU1lTX05B
TUVfSURfc3BhcmNfbGludXgyMg0KKyAjZGVmaW5lIEFGU0JJR19FTkRJQU4g
ICAgMQ0KKyAjZGVmaW5lIEFGU19IQVZFX0ZGUyAgICAgICAgMSAgICAgICAv
KiBVc2Ugc3lzdGVtJ3MgZmZzLiAqLw0KKyAjZGVmaW5lIEFGU19IQVZFX1NU
QVRWRlMgICAgMAkvKiBTeXN0ZW0gZG9lc24ndCBzdXBwb3J0IHN0YXR2ZnMg
Ki8NCisgI2RlZmluZSBBRlNfVk1fUkRXUl9FTlYJICAgIDEJLyogcmVhZC93
cml0ZSBpbXBsZW1lbnRlZCB2aWEgVk0gKi8NCisgDQorICNkZWZpbmUJYWZz
aW9faW92CXVpb19pb3YNCisgI2RlZmluZQlhZnNpb19pb3ZjbnQJdWlvX2lv
dmNudA0KKyAjZGVmaW5lCWFmc2lvX29mZnNldAl1aW9fb2Zmc2V0DQorICNk
ZWZpbmUJYWZzaW9fc2VnCXVpb19zZWdmbGcNCisgI2RlZmluZQlhZnNpb19m
bW9kZQl1aW9fZm1vZGUNCisgI2RlZmluZQlhZnNpb19yZXNpZAl1aW9fcmVz
aWQNCisgI2RlZmluZQlBRlNfVUlPU1lTCTENCisgI2RlZmluZQlBRlNfVUlP
VVNFUglVSU9fVVNFUlNQQUNFDQorICNkZWZpbmUJQUZTX0NMQllURVMJTUNM
QllURVMNCisgI2RlZmluZQlBRlNfTUlOQ0hBTkdFCTINCisgI2RlZmluZQlW
QVRUUl9OVUxMCXVzcl92YXR0cl9udWxsDQorIA0KKyAjZGVmaW5lIEFGU19E
SVJFTlQNCisgI2lmbmRlZiBDTVNFUlZFUlBSRUYNCisgI2RlZmluZSBDTVNF
UlZFUlBSRUYNCisgI2VuZGlmDQorIA0KKyAjZW5kaWYgLyogX1BBUkFNX1VT
Ul9TUEFSQ19MSU5VWDIyX0hfICovDQoqKiogc3JjL2Rlcy9hbmRyZXctY29u
Zi5oIDA5OjUwOjQxCTEuMS4xLjINCi0tLSBzcmMvZGVzL2FuZHJldy1jb25m
LmggMTA6NDg6MTQJMS4zDQoqKioqKioqKioqKioqKioNCioqKiA0NCw1MCAq
KioqDQotLS0gNDQsNTggLS0tLQ0KICAjaWZkZWYgQUZTX1BQQ19MSU5VWDIw
X0VOVg0KICAjaW5jbHVkZSAiY29uZi1wcGMtbGludXguaCINCiAgI2Vsc2UN
CisgI2lmZGVmIEFGU19TUEFSQ19MSU5VWDIwX0VOVg0KKyAjaW5jbHVkZSAi
Y29uZi1zcGFyYy1saW51eC5oIg0KKyAjZWxzZQ0KKyAjaWZkZWYgQUZTX1NQ
QVJDNjRfTElOVVgyMF9FTlYNCisgI2luY2x1ZGUgImNvbmYtc3BhcmM2NC1s
aW51eC5oIg0KKyAjZWxzZQ0KICAjaW5jbHVkZSAiY29uZi1pMzg2LWxpbnV4
LmgiDQorICNlbmRpZiAvKiBBRlNfU1BBUkM2NF9MSU5VWDIwX0VOViAqLw0K
KyAjZW5kaWYgLyogQUZTX1NQQVJDX0xJTlVYMjBfRU5WICovDQogICNlbmRp
Zg0KICAjZWxzZQ0KICBTb3JyeSwgeW91IGxvc2UuDQoqKiogc3JjL2Rlcy9j
b25mLXNwYXJjLWxpbnV4LmggTWF5ICA1IDIyOjMyOjI3IDE5OTgNCi0tLSBz
cmMvZGVzL2NvbmYtc3BhcmMtbGludXguaCBEZWMgMjIgMTQ6Mzc6NTIgMjAw
MA0KKioqKioqKioqKioqKioqDQoqKiogMCAqKioqDQotLS0gMSwxNSAtLS0t
DQorIC8qDQorICAqIENvcHlyaWdodCAxOTg4IGJ5IHRoZSBNYXNzYWNodXNl
dHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5Lg0KKyAgKg0KKyAgKiBGb3Ig
Y29weWluZyBhbmQgZGlzdHJpYnV0aW9uIGluZm9ybWF0aW9uLCBwbGVhc2Ug
c2VlIHRoZSBmaWxlDQorICAqIDxtaXQtY29weXJpZ2h0Lmg+Lg0KKyAgKg0K
KyAgKiBNYWNoaW5lLXR5cGUgZGVmaW5pdGlvbnM6IExpbnV4IG9uIEludGVs
DQorICAqLw0KKyANCisgI2luY2x1ZGUgPG1pdC1jcHlyaWdodC5oPg0KKyAN
CisgI2RlZmluZSBCSVRTMzINCisgI2RlZmluZSBCSUcNCisgI2RlZmluZSBN
U0JGSVJTVA0KKyAjZGVmaW5lIE1VU1RBTElHTg0KKioqIHNyYy9kZXMvY29u
Zi1zcGFyYzY0LWxpbnV4LmggTWF5ICA1IDIyOjMyOjI3IDE5OTgNCi0tLSBz
cmMvZGVzL2NvbmYtc3BhcmM2NC1saW51eC5oIERlYyAyMiAxNDozNzo1MiAy
MDAwDQoqKioqKioqKioqKioqKioNCioqKiAwICoqKioNCi0tLSAxLDE1IC0t
LS0NCisgLyoNCisgICogQ29weXJpZ2h0IDE5ODggYnkgdGhlIE1hc3NhY2h1
c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuDQorICAqDQorICAqIEZv
ciBjb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24sIHBsZWFz
ZSBzZWUgdGhlIGZpbGUNCisgICogPG1pdC1jb3B5cmlnaHQuaD4uDQorICAq
DQorICAqIE1hY2hpbmUtdHlwZSBkZWZpbml0aW9uczogTGludXggb24gSW50
ZWwNCisgICovDQorIA0KKyAjaW5jbHVkZSA8bWl0LWNweXJpZ2h0Lmg+DQor
IA0KKyAjZGVmaW5lIEJJVFMzMg0KKyAjZGVmaW5lIEJJRw0KKyAjZGVmaW5l
IE1TQkZJUlNUDQorICNkZWZpbmUgTVVTVEFMSUdODQoqKiogc3JjL2xpYmFm
cy9NYWtlZmlsZVByb3RvLkxJTlVYIDA5OjUwOjQzCTEuMS4xLjINCi0tLSBz
cmMvbGliYWZzL01ha2VmaWxlUHJvdG8uTElOVVggMTU6MjQ6MTkJMS41DQoq
KioqKioqKioqKioqKioNCioqKiA0MSw0NiAqKioqDQotLS0gNDEsNTcgLS0t
LQ0KICAJLWZuby1zdHJlbmd0aC1yZWR1Y2UgLXBpcGUgLW00ODYgLW1hbGln
bi1sb29wcz0yIC1tYWxpZ24tanVtcHM9MiBcDQogIAktbWFsaWduLWZ1bmN0
aW9ucz0yDQogIERFRklORVMgPSAtRF9fS0VSTkVMX18gIC1EQ1BVPTU4NiAt
REtFUk5FTCAtRF9LRVJORUwgLURNT0RVTEUgJHtTTVBfREVGfQ0KKyA8c3Bh
cmNfbGludXgyMiBzcGFyY19saW51eDI0Pg0KKyBMRCA9IGxkIC1tIGVsZjMy
X3NwYXJjDQorIENDRkxBR1MgPSAgIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRl
ciBcDQorIAktZm5vLXN0cmVuZ3RoLXJlZHVjZSAtcGlwZSAtbWNwdT12OCAt
bW5vLWZwdSAtZmNhbGwtdXNlZC1nNSAtZmNhbGwtdXNlZC1nNw0KKyBERUZJ
TkVTID0gLURfX0tFUk5FTF9fICAtRENQVT1zcGFyYyAtREtFUk5FTCAtRF9L
RVJORUwgLURNT0RVTEUgJHtTTVBfREVGfQ0KKyA8c3BhcmM2NF9saW51eDIy
IHNwYXJjNjRfbGludXgyND4NCisgQ0MgPSBzcGFyYzY0LWxpbnV4LWdjYw0K
KyBMRCA9IGxkIC1tIGVsZjY0X3NwYXJjDQorIENDRkxBR1MgPSAgIC1PMiAt
Zm9taXQtZnJhbWUtcG9pbnRlciBcDQorIAktZm5vLXN0cmVuZ3RoLXJlZHVj
ZSAtcGlwZSAtbWNwdT11bHRyYXNwYXJjIC1tNjQgLW1uby1mcHUgLW1jbW9k
ZWw9bWVkbG93IC1mZml4ZWQtZzQgLWZjYWxsLXVzZWQtZzUgLWZjYWxsLXVz
ZWQtZzcgLVduby1zaWduLWNvbXBhcmUNCisgREVGSU5FUyA9IC1EX19LRVJO
RUxfXyAgLURDUFU9c3BhcmM2NCAtREtFUk5FTCAtRF9LRVJORUwgLURNT0RV
TEUgJHtTTVBfREVGfQ0KICA8cHBjX2xpbnV4MjIgcHBjX2xpbnV4MjQ+DQog
IENDRkxBR1MgPSAgIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0
cmVuZ3RoLXJlZHVjZSBcDQogIAktZm5vLXN0cmljdC1hbGlhc2luZyAtZnNp
Z25lZC1jaGFyIC1tc29mdC1mbG9hdCAtcGlwZSBcDQoqKioqKioqKioqKioq
KioNCioqKiA5NSwxMDAgKioqKg0KLS0tIDEwNiwxMTUgLS0tLQ0KICAJCWxu
IC1zICR7TElOVVhfU1JDRElSfSQkdi9pbmNsdWRlL2FzbS1pMzg2IGFzbSA7
IFwNCiAgPHBwY19saW51eDIyIHBwY19saW51eDI0Pg0KICAJCWxuIC1zICR7
TElOVVhfU1JDRElSfSQkdi9pbmNsdWRlL2FzbS1wcGMgYXNtIDsgXA0KKyA8
c3BhcmNfbGludXgyMiBzcGFyY19saW51eDI0Pg0KKyAJCWxuIC1zICR7TElO
VVhfU1JDRElSfSQkdi9pbmNsdWRlL2FzbS1zcGFyYyBhc20gOyBcDQorIDxz
cGFyYzY0X2xpbnV4MjIgc3BhcmM2NF9saW51eDI0Pg0KKyAJCWxuIC1zICR7
TElOVVhfU1JDRElSfSQkdi9pbmNsdWRlL2FzbS1zcGFyYzY0IGFzbSA7IFwN
CiAgPGFsbD4NCiAgCQlmb3IgbSBpbiAke01QU30gOyBkbyBcDQogIAkJCUtE
SVI9JHtLT0JKfS0kJHYtJCRtIDsgXA0KKioqIHNyYy9sd3AvbHdwLmMgMDk6
NTA6NDQJMS4xLjEuMg0KLS0tIHNyYy9sd3AvbHdwLmMgMTA6NDg6MTQJMS4z
DQoqKioqKioqKioqKioqKioNCioqKiAzNDIsMzUxICoqKioNCi0tLSAzNDIs
MzU3IC0tLS0NCiAgCXNhdmVjb250ZXh0KENyZWF0ZV9Qcm9jZXNzX1BhcnQy
LCAmdGVtcDItPmNvbnRleHQsDQogIAkJICAgIHN0YWNrcHRyK3N0YWNrc2l6
ZS0xNik7IC8qIDE2ID0gMiAqIGptcF9idWZfdHlwZSovDQogICNlbHNlDQor
ICNpZiBkZWZpbmVkKEFGU19TUEFSQzY0X0xJTlVYMjBfRU5WKSB8fCBkZWZp
bmVkKEFGU19TUEFSQ19MSU5VWDIwX0VOVikNCiAgCXNhdmVjb250ZXh0KENy
ZWF0ZV9Qcm9jZXNzX1BhcnQyLCAmdGVtcDItPmNvbnRleHQsDQorIAkJICAg
IHN0YWNrcHRyK3N0YWNrc2l6ZS0weDQwKTsgLyogbG9tZ2ptcCBkb2VzIHNv
bWV0aGluZw0KKyAJCQkJCQkgd2l0aCAlZnAgKyAweDM4ICovDQorICNlbHNl
DQorIAlzYXZlY29udGV4dChDcmVhdGVfUHJvY2Vzc19QYXJ0MiwgJnRlbXAy
LT5jb250ZXh0LA0KICAJCSAgICBzdGFja3B0citzdGFja3NpemUtc2l6ZW9m
KHZvaWQgKikpOw0KICAjZW5kaWYNCiAgI2VuZGlmDQorICNlbmRpZg0KICAJ
LyogRW5kIG9mIGdyb3NzIGhhY2sgKi8NCiAgDQogIAlTZXRfTFdQX1JDKCk7
DQoqKioqKioqKioqKioqKioNCioqKiA0NjMsNDcwICoqKioNCi0tLSA0Njks
NDgxIC0tLS0NCiAgCSAgICBzYXZlY29udGV4dChEaXNwYXRjaGVyLCAmKHRl
bXAgLT4gY29udGV4dCksDQogIAkJCSYoTFdQQU5DSE9SLmRzcHRjaHN0YWNr
WyhzaXplb2YgTFdQQU5DSE9SLmRzcHRjaHN0YWNrKS04XSkpOw0KICAjZWxz
ZQ0KKyAjaWYgZGVmaW5lZChBRlNfU1BBUkM2NF9MSU5VWDIwX0VOVikgfHwg
ZGVmaW5lZChBRlNfU1BBUkNfTElOVVgyMF9FTlYpDQogIAkgICAgc2F2ZWNv
bnRleHQoRGlzcGF0Y2hlciwgJih0ZW1wIC0+IGNvbnRleHQpLA0KKyAJCQkm
KExXUEFOQ0hPUi5kc3B0Y2hzdGFja1soc2l6ZW9mIExXUEFOQ0hPUi5kc3B0
Y2hzdGFjayktMHg0MF0pKTsNCisgI2Vsc2UNCisgCSAgICBzYXZlY29udGV4
dChEaXNwYXRjaGVyLCAmKHRlbXAgLT4gY29udGV4dCksDQogIAkJCSYoTFdQ
QU5DSE9SLmRzcHRjaHN0YWNrWyhzaXplb2YgTFdQQU5DSE9SLmRzcHRjaHN0
YWNrKS1zaXplb2Yodm9pZCAqKV0pKTsNCisgI2VuZGlmDQogICNlbmRpZg0K
ICAjZW5kaWYNCiAgCX0NCioqKiBzcmMvbHdwL2x3cC5oIDA5OjUwOjQ0CTEu
MS4xLjINCi0tLSBzcmMvbHdwL2x3cC5oIDEwOjQ4OjE0CTEuMw0KKioqKioq
KioqKioqKioqDQoqKiogMTkzLDE5OSAqKioqDQogICNlbHNlDQogIHN0cnVj
dCBsd3BfY29udGV4dCB7CS8qIHNhdmVkIGNvbnRleHQgZm9yIGRpc3BhdGNo
ZXIgKi8NCiAgICAgIGNoYXIgKnRvcHN0YWNrOwkvKiBwdHIgdG8gdG9wIG9m
IHByb2Nlc3Mgc3RhY2sgKi8NCiEgI2lmZGVmIHNwYXJjDQogICNpZmRlZglz
YXZlX2FsbHJlZ3MNCiAgICAgIGludCBnbG9iYWxzWzcrMSszMisyKzMyKzJd
OyAgICAvKiBnMS1nNywgeSByZWcsIGYwLWYzMSwgZnNyLCBmcSwgYzAtYzMx
LCBjc3IsIGNxLiAqLw0KICAjZWxzZQ0KLS0tIDE5MywxOTkgLS0tLQ0KICAj
ZWxzZQ0KICBzdHJ1Y3QgbHdwX2NvbnRleHQgewkvKiBzYXZlZCBjb250ZXh0
IGZvciBkaXNwYXRjaGVyICovDQogICAgICBjaGFyICp0b3BzdGFjazsJLyog
cHRyIHRvIHRvcCBvZiBwcm9jZXNzIHN0YWNrICovDQohICNpZiBkZWZpbmVk
KHNwYXJjKSAmJiAhZGVmaW5lZChfX2xpbnV4X18pDQogICNpZmRlZglzYXZl
X2FsbHJlZ3MNCiAgICAgIGludCBnbG9iYWxzWzcrMSszMisyKzMyKzJdOyAg
ICAvKiBnMS1nNywgeSByZWcsIGYwLWYzMSwgZnNyLCBmcSwgYzAtYzMxLCBj
c3IsIGNxLiAqLw0KICAjZWxzZQ0KKioqIHNyYy9sd3AvcHJlZW1wdC5jIDA5
OjUwOjQ0CTEuMS4xLjINCi0tLSBzcmMvbHdwL3ByZWVtcHQuYyAxMDo0ODox
NAkxLjMNCioqKioqKioqKioqKioqKg0KKioqIDk1LDk4ICoqKioNCiAgICAg
IHJldHVybihMV1BfU1VDQ0VTUyk7DQogICAgICB9DQogIA0KISAjZW5kaWYg
LyogQUZTX0kzODZfTElOVVgyMF9FTlYgKi8NCi0tLSA5NSw5OCAtLS0tDQog
ICAgICByZXR1cm4oTFdQX1NVQ0NFU1MpOw0KICAgICAgfQ0KICANCiEgI2Vu
ZGlmIC8qIEFGU19MSU5VWDIwX0VOViAqLw0KKioqIHNyYy9sd3AvcHJvY2Vz
cy5jIDA5OjUwOjQ0CTEuMS4xLjINCi0tLSBzcmMvbHdwL3Byb2Nlc3MuYyAx
NToyNDoxOQkxLjUNCioqKioqKioqKioqKioqKg0KKioqIDMzLDQwICoqKioN
CiAgI2VsaWYJZGVmaW5lZChBRlNfTElOVVgyMF9FTlYpDQogICNpZiBkZWZp
bmVkKEFGU19QUENfTElOVVgyMF9FTlYpDQogICNkZWZpbmUgTFdQX1NQIDAN
CiEgI2Vsc2UNCiAgI2RlZmluZSBMV1BfU1AgNA0KICAjZW5kaWYNCiAgI2Vs
c2UNCiAgICAgICBOZWVkIG9mZnNldCB0byBTUCBpbiBqbXBfYnVmIGZvciB0
aGlzIHBsYXRmb3JtLg0KLS0tIDMzLDQ4IC0tLS0NCiAgI2VsaWYJZGVmaW5l
ZChBRlNfTElOVVgyMF9FTlYpDQogICNpZiBkZWZpbmVkKEFGU19QUENfTElO
VVgyMF9FTlYpDQogICNkZWZpbmUgTFdQX1NQIDANCiEgI2VsaWYgICBkZWZp
bmVkKEFGU19JMzg2X0xJTlVYMjBfRU5WKQ0KICAjZGVmaW5lIExXUF9TUCA0
DQorICNlbGlmICAgZGVmaW5lZChBRlNfU1BBUkNfTElOVVgyMF9FTlYpDQor
ICNkZWZpbmUgTFdQX1NQIDANCisgI2RlZmluZSBMV1BfRlAgMQ0KKyAjZWxp
ZiAgIGRlZmluZWQoQUZTX1NQQVJDNjRfTElOVVgyMF9FTlYpICYmIGRlZmlu
ZWQoQUZTXzMyQklUX1VTUl9FTlYpDQorICNkZWZpbmUgTFdQX1NQIDANCisg
I2RlZmluZSBMV1BfRlAgMQ0KKyAjZWxzZQ0KKyAjZXJyb3IgVW5zdXBwb3J0
ZWQgbGludXggTFdQIHN5c3RlbSB0eXBlLg0KICAjZW5kaWYNCiAgI2Vsc2UN
CiAgICAgICBOZWVkIG9mZnNldCB0byBTUCBpbiBqbXBfYnVmIGZvciB0aGlz
IHBsYXRmb3JtLg0KKioqKioqKioqKioqKioqDQoqKiogOTcsMTAyICoqKioN
Ci0tLSAxMDUsMTEzIC0tLS0NCiAgCQkJCXsNCiAgCQkJCWNhc2UgMDogam1w
QnVmZmVyID0gKGptcF9idWZfdHlwZSAqKWptcF90bXA7DQogIAkJCQkJam1w
QnVmZmVyW0xXUF9TUF0gPSAoam1wX2J1Zl90eXBlKXNwOyANCisgI2lmIGRl
ZmluZWQoQUZTX1NQQVJDX0xJTlVYMjBfRU5WKSB8fCAoZGVmaW5lZChBRlNf
U1BBUkM2NF9MSU5VWDIwX0VOVikgJiYgZGVmaW5lZChBRlNfMzJCSVRfVVNS
X0VOVikpDQorIAkJCQkJam1wQnVmZmVyW0xXUF9GUF0gPSAoam1wX2J1Zl90
eXBlKXNwOyANCisgI2VuZGlmDQogIAkJCQkgICAJbG9uZ2ptcChqbXBfdG1w
LDEpOw0KICAJCQkJICAgCWJyZWFrOw0KICAJCQkJY2FzZSAxOiAoKkVQKSgp
Ow0KKioqIHNyYy9yeC9yeC5jIDA5OjUwOjQ3CTEuMS4xLjINCi0tLSBzcmMv
cngvcnguYyAxMDowNzowMAkxLjQNCioqKioqKioqKioqKioqKg0KKioqIDQ5
MjcsNDkzMyAqKioqDQogIAkJCQkJICAgICAoY2hhciAqKWNhbGwsIGlzdGFj
ayk7DQogICNlbHNlIC8qIFJYX0VOQUJMRV9MT0NLUyAqLw0KICAJICAgIGNh
bGwtPnJlc2VuZEV2ZW50ID0gcnhldmVudF9Qb3N0KCZyZXRyeVRpbWUsIHJ4
aV9TdGFydCwNCiEgCQkJCQkgICAgIChjaGFyICopY2FsbCwgKHZvaWQqKWlz
dGFjayk7DQogICNlbmRpZiAvKiBSWF9FTkFCTEVfTE9DS1MgKi8NCiAgCSAg
fQ0KICAJfQ0KLS0tIDQ5MjcsNDkzMyAtLS0tDQogIAkJCQkJICAgICAoY2hh
ciAqKWNhbGwsIGlzdGFjayk7DQogICNlbHNlIC8qIFJYX0VOQUJMRV9MT0NL
UyAqLw0KICAJICAgIGNhbGwtPnJlc2VuZEV2ZW50ID0gcnhldmVudF9Qb3N0
KCZyZXRyeVRpbWUsIHJ4aV9TdGFydCwNCiEgCQkJCQkgICAgIChjaGFyICop
Y2FsbCwgKHZvaWQqKShsb25nKWlzdGFjayk7DQogICNlbmRpZiAvKiBSWF9F
TkFCTEVfTE9DS1MgKi8NCiAgCSAgfQ0KICAJfQ0KKioqIHNyYy9yeC9yeF9j
bG9jay5oIDA5OjUwOjQ3CTEuMS4xLjINCi0tLSBzcmMvcngvcnhfY2xvY2su
aCAxMDozMjo0OA0KKioqKioqKioqKioqKioqDQoqKiogODMsODkgKioqKg0K
ICAjZWxzZSAvKiBLRVJORUwgKi8NCiAgI2luY2x1ZGUgIi4uL2Fmcy9hZnNf
b3NpLmgiDQogICNkZWZpbmUgY2xvY2tfSW5pdCgpDQohICNpZiBkZWZpbmVk
KEFGU19TR0k2MV9FTlYpIHx8IGRlZmluZWQoQUZTX0hQVVhfRU5WKQ0KICAj
ZGVmaW5lIGNsb2NrX0dldFRpbWUoY3YpIG9zaV9HZXRUaW1lKChvc2lfdGlt
ZXZhbF90ICopY3YpDQogICNlbHNlDQogICNkZWZpbmUgY2xvY2tfR2V0VGlt
ZShjdikgb3NpX0dldFRpbWUoKHN0cnVjdCB0aW1ldmFsICopY3YpDQotLS0g
ODMsODkgLS0tLQ0KICAjZWxzZSAvKiBLRVJORUwgKi8NCiAgI2luY2x1ZGUg
Ii4uL2Fmcy9hZnNfb3NpLmgiDQogICNkZWZpbmUgY2xvY2tfSW5pdCgpDQoh
ICNpZiBkZWZpbmVkKEFGU19TR0k2MV9FTlYpIHx8IGRlZmluZWQoQUZTX0hQ
VVhfRU5WKSB8fCBkZWZpbmVkKEFGU19MSU5VWF82NEJJVF9LRVJORUwpDQog
ICNkZWZpbmUgY2xvY2tfR2V0VGltZShjdikgb3NpX0dldFRpbWUoKG9zaV90
aW1ldmFsX3QgKiljdikNCiAgI2Vsc2UNCiAgI2RlZmluZSBjbG9ja19HZXRU
aW1lKGN2KSBvc2lfR2V0VGltZSgoc3RydWN0IHRpbWV2YWwgKiljdikNCioq
KiBzcmMvdmVudXMvZnN0cmFjZS5jIDA5OjUwOjQ5CTEuMS4xLjINCi0tLSBz
cmMvdmVudXMvZnN0cmFjZS5jIDE2OjM3OjE4CTEuNg0KKioqKioqKioqKioq
KioqDQoqKiogMjA3MiwyMDgyICoqKioNCi0tLSAyMDcyLDIwOTEgLS0tLQ0K
ICB7DQogICAgICBpbnQgY29kZTsNCiAgI2lmZGVmIEFGU19MSU5VWDIwX0VO
Vg0KKyAjaWYgZGVmaW5lZCBBRlNfTElOVVhfNjRCSVRfS0VSTkVMDQorICAg
ICBsb25nIGxvbmcgZXBhcm1bNF07DQorICAgICAvKiBkb24ndCB3YW50IHRv
IHNpZ24gZXh0ZW5kIGl0IHRvIDY0Yml0LCBzbyB1c2luZyB1bG9uZyAqLw0K
KyAgICAgZXBhcm1bMF0gPSAodW5zaWduZWQgbG9uZylwYXJtMzsNCisgICAg
IGVwYXJtWzFdID0gKHVuc2lnbmVkIGxvbmcpcGFybTQ7DQorICAgICBlcGFy
bVsyXSA9ICh1bnNpZ25lZCBsb25nKXBhcm01Ow0KKyAgICAgZXBhcm1bM10g
PSAodW5zaWduZWQgbG9uZylwYXJtNjsNCisgI2Vsc2UNCiAgICAgIGludCBl
cGFybVs0XTsNCiAgICAgIGVwYXJtWzBdID0gcGFybTM7DQogICAgICBlcGFy
bVsxXSA9IHBhcm00Ow0KICAgICAgZXBhcm1bMl0gPSBwYXJtNTsNCiAgICAg
IGVwYXJtWzNdID0gcGFybTY7DQorICNlbmRpZg0KICAgICAgLyogTGludXgg
Y2FuIG9ubHkgaGFuZGxlIDUgYXJndW1lbnRzIGluIHRoZSBhY3R1YWwgc3lz
Y2FsbC4gKi8NCiAgICAgIGlmIChjYWxsID09IEFGU0NBTExfSUNMKSB7DQog
IAljb2RlID0gc3lzY2FsbChBRlNfU1lTQ0FMTCwgY2FsbCwgcGFybTAsIHBh
cm0xLCBwYXJtMiwgZXBhcm0pOw0KKioqKioqKioqKioqKioqDQoqKiogMjA4
NCwyMDg5ICoqKioNCi0tLSAyMDkzLDIxMDYgLS0tLQ0KICAgICAgZWxzZSB7
DQogIAljb2RlID0gc3lzY2FsbChBRlNfU1lTQ0FMTCwgY2FsbCwgcGFybTAs
IHBhcm0xLCBwYXJtMiwgcGFybTMpOw0KICAgICAgfQ0KKyAjaWYgZGVmaW5l
ZChBRlNfU1BBUkM2NF9MSU5VWDIwX0VOVikgfHwgZGVmaW5lZChBRlNfU1BB
UkNfTElOVVgyMF9FTlYpDQorICAgICAvKiBvbiBzcGFyYyB0aGlzIGZ1bmN0
aW9uIHJldHVybnMgbm9uZSB2YWx1ZSwgc28gZG8gaXQgbXlzZWxmICovDQor
ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIg0KKyAJbW92CSVvMCwgJWkw
DQorIAlyZXQNCisgCXJlc3RvcmUNCisgIik7DQorICNlbmRpZg0KICAjZWxz
ZQ0KICAjaWYgIWRlZmluZWQoQUZTX1NHSV9FTlYpICYmICFkZWZpbmVkKEFG
U19BSVgzMl9FTlYpDQogICAgICBjb2RlID0gIHN5c2NhbGwoQUZTX1NZU0NB
TEwsIGNhbGwsIHBhcm0wLCBwYXJtMSwgcGFybTIsIHBhcm0zLCBwYXJtNCk7
DQoqKiogc3JjL3ZlbnVzL2tkdW1wLmMgMDk6NTA6NDkJMS4xLjEuMg0KLS0t
IHNyYy92ZW51cy9rZHVtcC5jIDEwOjQ4OjE0CTEuNA0KKioqKioqKioqKioq
KioqDQoqKiogMjExLDIxNiAqKioqDQotLS0gMjExLDIxOCAtLS0tDQogICNk
ZWZpbmUgX0xJTlVYX1RJTUVfSA0KICAjZGVmaW5lIF9MSU5VWF9GQ05UTF9I
DQogICNkZWZpbmUgX0kzODZfU1RBVEZTX0gNCisgI2RlZmluZSBfU1BBUkNf
U1RBVEZTX0gNCisgI2RlZmluZSBfU1BBUkM2NF9TVEFURlNfSA0KICBzdHJ1
Y3QgdGltZXpvbmUgew0KICAgICAgaW50IGEsYjsNCiAgfTsNCioqKioqKioq
KioqKioqKg0KKioqIDIxOSwyMjQgKioqKg0KLS0tIDIyMSwyMjcgLS0tLQ0K
ICAgICAgaW50IHR2X3VzZWM7DQogIH0gdGltZXZhbF90OyAvKiBOZWVkZWQg
aGVyZSBzaW5jZSBLRVJORUwgZGVmaW5lZC4gKi8NCiAgI2RlZmluZSBfTElO
VVhfQllURU9SREVSX0xJVFRMRV9FTkRJQU5fSA0KKyAjZGVmaW5lIF9MSU5V
WF9CWVRFT1JERVJfQklHX0VORElBTl9IDQogICNpbmNsdWRlIDxsaW51eC92
ZXJzaW9uLmg+DQogICNpbmNsdWRlIDxsaW51eC9mcy5oPg0KICAjaW5jbHVk
ZSA8YWZzL29zaV92ZnMuaD4NCioqKioqKioqKioqKioqKg0KKioqIDE4OTIs
MTg5OCAqKioqDQogICNlbmRpZg0KICB9DQogIA0KISAjaWYJZGVmaW5lZChz
cGFyYykNCiAgaW50IHJlYWRtZW0oa21lbSwgYnVmLCB2YWQsIGxlbikNCiAg
ICAgIGludCBrbWVtLCBsZW47DQogICNpZmRlZiBBRlNfU1VONTdfRU5WDQot
LS0gMTg5NSwxOTAxIC0tLS0NCiAgI2VuZGlmDQogIH0NCiAgDQohICNpZglk
ZWZpbmVkKHNwYXJjKSAmJiAhZGVmaW5lZChfX2xpbnV4X18pDQogIGludCBy
ZWFkbWVtKGttZW0sIGJ1ZiwgdmFkLCBsZW4pDQogICAgICBpbnQga21lbSwg
bGVuOw0KICAjaWZkZWYgQUZTX1NVTjU3X0VOVg0KKioqKioqKioqKioqKioq
DQoqKiogMTk5MCwxOTk2ICoqKioNCiAgCX0NCiAgICAgIH0NCiAgI2Vsc2UN
CiEgI2lmCWRlZmluZWQoc3BhcmMpDQogICNpZm5kZWYgQUZTX1NVTjVfRU5W
DQogICAgICBpZiAobWVtKSB7DQogICNlbmRpZg0KLS0tIDE5OTMsMTk5OSAt
LS0tDQogIAl9DQogICAgICB9DQogICNlbHNlDQohICNpZglkZWZpbmVkKHNw
YXJjKSAmJiAhZGVmaW5lZChfX2xpbnV4X18pDQogICNpZm5kZWYgQUZTX1NV
TjVfRU5WDQogICAgICBpZiAobWVtKSB7DQogICNlbmRpZg0KKioqKioqKioq
KioqKioqDQoqKiogMjEwMywyMTA5ICoqKioNCiAgI2Vsc2UgLyogQUZTX0tE
VU1QX0xJQiAqLw0KICAgICAgaW50IGZkOw0KICANCiEgI2lmCWRlZmluZWQo
c3BhcmMpDQogICNpZm5kZWYJQUZTX1NVTjVfRU5WDQogICAgICBpZiAobWVt
KSB7DQogICNlbmRpZg0KLS0tIDIxMDYsMjExMiAtLS0tDQogICNlbHNlIC8q
IEFGU19LRFVNUF9MSUIgKi8NCiAgICAgIGludCBmZDsNCiAgDQohICNpZglk
ZWZpbmVkKHNwYXJjKSAmJiAhZGVmaW5lZChfX2xpbnV4X18pDQogICNpZm5k
ZWYJQUZTX1NVTjVfRU5WDQogICAgICBpZiAobWVtKSB7DQogICNlbmRpZg0K
KioqIHNyYy92b2xzZXIvdm9sbWFpbi5jIDA5OjUwOjUxCTEuMS4xLjINCi0t
LSBzcmMvdm9sc2VyL3ZvbG1haW4uYyAxMDo0ODoxNAkxLjMNCioqKioqKioq
KioqKioqKg0KKioqIDE2MywxNjkgKioqKg0KICAjaWZuZGVmIEFGU19MSU5V
WDIwX0VOVg0KICAgIG9sZCA9IHNpZ25hbChTSUdTWVMsIFNJR19JR04pOwkN
CiAgI2VuZGlmDQohICAgcmNvZGUgPSBzeXNjYWxsICgzMSAvKiBBRlNfU1lT
Q0FMTCAqLywgMjggLyogQUZTQ0FMTF9DQUxMICovLCBhMywgYTQsIGE1KTsN
CiAgI2lmbmRlZiBBRlNfTElOVVgyMF9FTlYNCiAgICBzaWduYWwoU0lHU1lT
LCBvbGQpOwkNCiAgI2VuZGlmDQotLS0gMTYzLDE2OSAtLS0tDQogICNpZm5k
ZWYgQUZTX0xJTlVYMjBfRU5WDQogICAgb2xkID0gc2lnbmFsKFNJR1NZUywg
U0lHX0lHTik7CQ0KICAjZW5kaWYNCiEgICByY29kZSA9IHN5c2NhbGwgKEFG
U19TWVNDQUxMIC8qIEFGU19TWVNDQUxMICovLCAyOCAvKiBBRlNDQUxMX0NB
TEwgKi8sIGEzLCBhNCwgYTUpOw0KICAjaWZuZGVmIEFGU19MSU5VWDIwX0VO
Vg0KICAgIHNpZ25hbChTSUdTWVMsIG9sZCk7CQ0KICAjZW5kaWYNCg==
--==========928000889==========--

--==========1885349384==========--

