[OpenAFS-devel] Patch to make openafs-1.3.79+ work on AIX5

Niklas Edmundsson Niklas.Edmundsson@hpc2n.umu.se
Thu, 24 Mar 2005 10:58:57 +0100 (MET)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---559023410-758783491-1111658337=:22795
Content-Type: TEXT/PLAIN; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8BIT


This patch makes the kernel module for OpenAFS work properly on AIX.

Client (1.3.79) tested by me on:
AIX 5.1, 32bit, both UP and MP.

and (1.3.80) by Michael Niksch on:
    rs_aix42 (as rs_aix43) on AIX 4330-11 bos.up   4.3.3.93
    rs_aix51               on AIX 5100-07 bos.mp   5.1.0.64
    rs_aix52               on AIX 5200-05 bos.mp   5.2.0.54
    rs_aix52               on AIX 5200-05 bos.mp64 5.2.0.54

Horst Birthelmer has tested the server-stuff and found it still 
working.

Executive summary of the patch:
* Removed memory allocation functions only used on AIX and ancient
    HPUX. If the performance penalty is noticeable, implement a wrapper
    at the osi-level in the same manner as LINUX/FBSD (ie not sprayed
    throughout the code).
* Removed all remnants of splnet()-style locking, it was not
    sufficient for MP anyway which the real locks are. Affects only AIX
    and HPUX.
* Drop the global locking in rxi_Alloc since the real locks do their
    jobs, affects only AIX41 and up (ie. MP capable OS).
* Fix the non-kernel wrapper for osi_Alloc/Free on AIX to take void *
    in the same manner as the rest of the functions. IMO this wrapper
    shouldn't be necessary since you should never ever malloc() 0 bytes,
    but since it's there I'd guess someone made stupid assumptions
    somewhere...
* Restores MAXKTCTICKETLEN to 12000 on AIX
* Restores AFS_LWP_MINSTACKSIZE to 48k on AIX (might affect
    server-stuff)

This should be commited to the openafs-tree as soon as possible so we 
can get a bit wider testing and find out if there are more remaining 
problems on AIX than the following:

* -afsdb -dynroot doesn't seem to work (returns ENOENT immediately)
* klog dumps core
* login configured to use afs_dynamic_auth fails
* Horst has problems with mysterious hangs

/Nikke
-- 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  Niklas Edmundsson, Admin @ {acc,hpc2n}.umu.se     |    nikke@hpc2n.umu.se
---------------------------------------------------------------------------
  *Ù *Ù   <- Tribbles Snorkelling
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
---559023410-758783491-1111658337=:22795
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=openafs-1.3.79-aix5-alloc.patch
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.62.0503241058570.22795@khan.acc.umu.se>
Content-Description: 
Content-Disposition: attachment; filename=openafs-1.3.79-aix5-alloc.patch

ZGlmZiAtd3J1IC4uL29wZW5hZnMtMS4zLjc5Lm9yaWcvc3JjL2Fmcy9hZnNf
ZGFlbW9ucy5jIC4vc3JjL2Fmcy9hZnNfZGFlbW9ucy5jDQotLS0gLi4vb3Bl
bmFmcy0xLjMuNzkub3JpZy9zcmMvYWZzL2Fmc19kYWVtb25zLmMJVHVlIERl
YyAgNyAwNzoxMjoxMSAyMDA0DQorKysgLi9zcmMvYWZzL2Fmc19kYWVtb25z
LmMJTW9uIE1hciAxNCAxMDoyODoyOSAyMDA1DQpAQCAtMTQ1LDIyICsxNDUs
NiBAQA0KIAlhZnNfRmx1c2hWQ0JzKDEpOwkvKiBmbHVzaCBxdWV1ZWQgY2Fs
bGJhY2tzICovDQogCWFmc19NYXliZVdha2V1cFRydW5jYXRlRGFlbW9uKCk7
CS8qIGZyZWUgY2FjaGUgc3BhY2UgaWYgaGF2ZSB0b28gKi8NCiAJcnhfQ2hl
Y2tQYWNrZXRzKCk7CS8qIERvZXMgUlggbmVlZCBtb3JlIHBhY2tldHM/ICov
DQotI2lmCWRlZmluZWQoQUZTX0FJWDMyX0VOVikgfHwgZGVmaW5lZChBRlNf
SFBVWF9FTlYpDQotCS8qIA0KLQkgKiBIYWNrOiBXZSBhbHdheXMgd2FudCB0
byBtYWtlIHN1cmUgdGhlcmUgYXJlIHBsZW50eSBmcmVlDQotCSAqIGVudHJp
ZXMgaW4gdGhlIHNtYWxsIGZyZWUgcG9vbCBzbyB0aGF0IHdlIGRvbid0IGhh
dmUgdG8NCi0JICogd29ycnkgYWJvdXQgcnggKHdpdGggZGlzYWJsZWQgaW50
ZXJydXB0cykgdG8gaGF2ZSB0byBjYWxsDQotCSAqIG1hbGxvYykuIFNvIHdl
IGRvIHRoZSBkdW1teSBjYWxsIGJlbG93Li4uDQotCSAqLw0KLQlpZiAoKChh
ZnNfc3RhdHNfY21wZXJmLlNtYWxsQmxvY2tzQWxsb2NlZCAtDQotCSAgICAg
IGFmc19zdGF0c19jbXBlcmYuU21hbGxCbG9ja3NBY3RpdmUpDQotCSAgICAg
PD0gQUZTX1NBTExPQ19MT1dfV0FURVIpKQ0KLQkgICAgb3NpX0ZyZWVTbWFs
bFNwYWNlKG9zaV9BbGxvY1NtYWxsU3BhY2UoQUZTX1NNQUxMT0NTSVopKTsN
Ci0JaWYgKCgoYWZzX3N0YXRzX2NtcGVyZi5NZWRpdW1CbG9ja3NBbGxvY2Vk
IC0NCi0JICAgICAgYWZzX3N0YXRzX2NtcGVyZi5NZWRpdW1CbG9ja3NBY3Rp
dmUpDQotCSAgICAgPD0gQUZTX01BTExPQ19MT1dfV0FURVIgKyA1MCkpDQot
CSAgICBvc2lfQWxsb2NNb3JlTVNwYWNlKEFGU19NQUxMT0NfTE9XX1dBVEVS
ICogMik7DQotI2VuZGlmDQogDQogCW5vdyA9IG9zaV9UaW1lKCk7DQogCWlm
IChsYXN0Q0JTbG90QnVtcCArIENCSFRTTE9UTEVOIDwgbm93KSB7CS8qIHBy
ZXR0eSB0aW1lLWRlcGVuZGFudCAqLw0KZGlmZiAtd3J1IC4uL29wZW5hZnMt
MS4zLjc5Lm9yaWcvc3JjL2Fmcy9hZnNfaW5pdC5jIC4vc3JjL2Fmcy9hZnNf
aW5pdC5jDQotLS0gLi4vb3BlbmFmcy0xLjMuNzkub3JpZy9zcmMvYWZzL2Fm
c19pbml0LmMJVHVlIERlYyAgNyAwNzoxMjoxMSAyMDA0DQorKysgLi9zcmMv
YWZzL2Fmc19pbml0LmMJTW9uIE1hciAxNCAxNTo0NDo1NCAyMDA1DQpAQCAt
MTExLDI2ICsxMTEsNiBAQA0KICAgICBSV0xPQ0tfSU5JVCgmYWZzX3hheHMs
ICJhZnNfeGF4cyIpOw0KICAgICBvc2lfZG5sY19pbml0KCk7DQogDQotDQot
I2lmCWRlZmluZWQoQUZTX0FJWDMyX0VOVikgfHwgZGVmaW5lZChBRlNfSFBV
WF9FTlYpDQotICAgIHsNCi0JYWZzX2ludDMyIHByZWFsbG9jczsNCi0NCi0J
LyoNCi0JICogV2Ugd2FudCB0byBhbHNvIHJlc2VydmUgc3BhY2UgZm9yIHRo
ZSBnbm9kZSBzdHJ1Y3Qgd2hpY2ggaXMgYXNzb2NpYXRlZA0KLQkgKiB3aXRo
IGVhY2ggdm5vZGUgKHZjYWNoZSkgb25lOyB3ZSB3YW50IHRvIHVzZSB0aGUg
cGlubmVkIHBvb2wgZm9yIHRoZW0gICANCi0JICogc2luY2UgdGhleSdyZSBy
ZWZlcmVuY2VkIGF0IGludGVycnVwdCBsZXZlbC4NCi0JICovDQotCWlmIChh
ZnNfc3RhdHNfY21wZXJmLlNtYWxsQmxvY2tzQWxsb2NlZCArIGFzdGF0U2l6
ZSA8IDM2MDApDQotCSAgICBwcmVhbGxvY3MgPSBhc3RhdFNpemU7DQotCWVs
c2Ugew0KLQkgICAgcHJlYWxsb2NzID0gMzYwMCAtIGFmc19zdGF0c19jbXBl
cmYuU21hbGxCbG9ja3NBbGxvY2VkOw0KLQkgICAgaWYgKHByZWFsbG9jcyA8
PSAwKQ0KLQkJcHJlYWxsb2NzID0gMTA7DQotCX0NCi0Jb3NpX0FsbG9jTW9y
ZVNTcGFjZShwcmVhbGxvY3MpOw0KLSAgICB9DQotI2VuZGlmDQogICAgIC8q
IA0KICAgICAgKiBjcmVhdGUgdm9sdW1lIGxpc3Qgc3RydWN0dXJlIA0KICAg
ICAgKi8NCkBAIC00OTIsOSArNDcyLDcgQEANCiAgICAgUldMT0NLX0lOSVQo
JmFmc194aW50ZXJmYWNlLCAiYWZzX3hpbnRlcmZhY2UiKTsNCiAgICAgTE9D
S19JTklUKCZhZnNfcHV0dG9maWxlTG9jaywgImFmc19wdXR0b2ZpbGVMb2Nr
Iik7DQogI2lmbmRlZiBBRlNfRkJTRF9FTlYNCi0jaWZuZGVmCUFGU19BSVgz
Ml9FTlYNCiAgICAgTE9DS19JTklUKCZvc2lfZnNwbG9jaywgIm9zaV9mc3Bs
b2NrIik7DQotI2VuZGlmDQogICAgIExPQ0tfSU5JVCgmb3NpX2ZscGxvY2ss
ICJvc2lfZmxwbG9jayIpOw0KICNlbmRpZg0KICAgICBSV0xPQ0tfSU5JVCgm
YWZzX3hjb25uLCAiYWZzX3hjb25uIik7DQpAQCAtNTExLDE1ICs0ODksNiBA
QA0KIAlhZnNfc3lzbmFtZSA9IGFmc19zeXNuYW1lbGlzdFswXTsNCiAJc3Ry
Y3B5KGFmc19zeXNuYW1lLCBTWVNfTkFNRSk7DQogCWFmc19zeXNuYW1lY291
bnQgPSAxOw0KLSNpZglkZWZpbmVkKEFGU19BSVgzMl9FTlYpIHx8IGRlZmlu
ZWQoQUZTX0hQVVhfRU5WKQ0KLQl7DQotDQotCSAgICBpZiAoKHByZWFsbG9j
cyA+IDI1NikgJiYgKHByZWFsbG9jcyA8IDM2MDApKQ0KLQkJYWZzX3ByZWFs
bG9jcyA9IHByZWFsbG9jczsNCi0JICAgIG9zaV9BbGxvY01vcmVTU3BhY2Uo
YWZzX3ByZWFsbG9jcyk7DQotCSAgICBvc2lfQWxsb2NNb3JlTVNwYWNlKDEw
MCk7DQotCX0NCi0jZW5kaWYNCiAgICAgfQ0KIA0KICAgICBzZWNvYmogPSBy
eG51bGxfTmV3U2VydmVyU2VjdXJpdHlPYmplY3QoKTsNCmRpZmYgLXdydSAu
Li9vcGVuYWZzLTEuMy43OS5vcmlnL3NyYy9hZnMvYWZzX29zaV9hbGxvYy5j
IC4vc3JjL2Fmcy9hZnNfb3NpX2FsbG9jLmMNCi0tLSAuLi9vcGVuYWZzLTEu
My43OS5vcmlnL3NyYy9hZnMvYWZzX29zaV9hbGxvYy5jCVRodSBNYXIgMTEg
MDA6MDE6NTEgMjAwNA0KKysrIC4vc3JjL2Fmcy9hZnNfb3NpX2FsbG9jLmMJ
TW9uIE1hciAxNCAxNTo0NToxOSAyMDA1DQpAQCAtMjAsMTYgKzIwLDE3IEBA
DQogI2luY2x1ZGUgImFmcy9hZnNfc3RhdHMuaCIJLyogYWZzIHN0YXRpc3Rp
Y3MgKi8NCiANCiAjaWZuZGVmIEFGU19GQlNEX0VOVg0KKw0KICNpZmRlZiBB
RlNfQUlYNDFfRU5WDQogI2luY2x1ZGUgInN5cy9sb2NrbC5oIg0KICNpbmNs
dWRlICJzeXMvc2xlZXAuaCINCiAjaW5jbHVkZSAic3lzL3N5c3Blc3QuaCIN
CiAjaW5jbHVkZSAic3lzL2xvY2tfZGVmLmgiDQogLypsb2NrX3Qgb3NpX2Zz
cGxvY2sgPSBMT0NLX0FWQUlMOyovDQotI2Vsc2UNCi1hZnNfbG9ja190IG9z
aV9mc3Bsb2NrOw0KICNlbmRpZg0KIA0KK2Fmc19sb2NrX3Qgb3NpX2ZzcGxv
Y2s7DQorDQogDQogDQogc3RhdGljIHN0cnVjdCBvc2lfcGFja2V0IHsNCkBA
IC0zOCwyOSArMzksNiBAQA0KIGFmc19sb2NrX3Qgb3NpX2ZscGxvY2s7DQog
DQogDQotYWZzX2ludDMyIGFmc19wcmVhbGxvY3MgPSA1MTI7CS8qIFJlc2Vy
dmUgc3BhY2UgZm9yIGFsbCBzbWFsbCBhbGxvY3MhICovDQotdm9pZA0KLW9z
aV9BbGxvY01vcmVTU3BhY2UocmVnaXN0ZXIgYWZzX2ludDMyIHByZWFsbG9j
cykNCi17DQotICAgIHJlZ2lzdGVyIGludCBpOw0KLSAgICBjaGFyICpwOw0K
LQ0KLSAgICBwID0gKGNoYXIgKilhZnNfb3NpX0FsbG9jKEFGU19TTUFMTE9D
U0laICogcHJlYWxsb2NzKTsNCi0jaWZkZWYgIEtFUk5FTF9IQVZFX1BJTg0K
LSAgICBwaW4ocCwgQUZTX1NNQUxMT0NTSVogKiBwcmVhbGxvY3MpOwkvKiBY
WFhYICovDQotI2VuZGlmDQotICAgIGZvciAoaSA9IDA7IGkgPCBwcmVhbGxv
Y3M7IGkrKywgcCArPSBBRlNfU01BTExPQ1NJWikgew0KLSNpZmRlZiBBRlNf
QUlYMzJfRU5WDQotCSpwID0gJ1wwJzsJCS8qIHBhZ2UgZmF1bHQgaXQgaW4u
ICovDQotI2VuZGlmDQotCW9zaV9GcmVlU21hbGxTcGFjZSgoY2hhciAqKXAp
Ow0KLSAgICB9DQotICAgIGFmc19zdGF0c19jbXBlcmYuU21hbGxCbG9ja3NB
bGxvY2VkICs9IHByZWFsbG9jczsNCi0gICAgYWZzX3N0YXRzX2NtcGVyZi5T
bWFsbEJsb2Nrc0FjdGl2ZSArPSBwcmVhbGxvY3M7DQotfQ0KLQ0KLQ0KLQ0K
IC8qIGZyZWUgc3BhY2UgYWxsb2NhdGVkIGJ5IEFsbG9jTGFyZ2VTcGFjZS4g
IEFsc28gY2FsbGVkIGJ5IG1jbHB1dCB3aGVuIGZyZWVpbmcNCiAgKiBhIHBh
Y2tldCBhbGxvY2F0ZWQgYnkgb3NpX05ldFJlY2VpdmUuICovDQogDQpAQCAt
ODIsOTggKzYwLDE2IEBADQogb3NpX0ZyZWVTbWFsbFNwYWNlKHZvaWQgKmFk
YXRhKQ0KIHsNCiANCi0jaWYJZGVmaW5lZChBRlNfQUlYMzJfRU5WKQ0KLSAg
ICBpbnQgeDsNCi0jZW5kaWYNCi0jaWYJZGVmaW5lZChBRlNfSFBVWF9FTlYp
DQotICAgIHVsb25nX3QgeDsNCi0jZW5kaWYNCi0NCiAgICAgQUZTX0FTU0VS
VF9HTE9DSygpOw0KIA0KICAgICBBRlNfU1RBVENOVChvc2lfRnJlZVNtYWxs
U3BhY2UpOw0KICAgICBhZnNfc3RhdHNfY21wZXJmLlNtYWxsQmxvY2tzQWN0
aXZlLS07DQotI2lmCWRlZmluZWQoQUZTX0FJWDMyX0VOVikgfHwgZGVmaW5l
ZChBRlNfSFBVWF9FTlYpDQotICAgIHggPSBzcGxuZXQoKTsJCS8qbG9ja2wo
Jm9zaV9mc3Bsb2NrLCBMT0NLX1NIT1JUKTsgKi8NCi0jZWxzZQ0KICAgICBN
T2J0YWluV3JpdGVMb2NrKCZvc2lfZnNwbG9jaywgMzIzKTsNCi0jZW5kaWYN
CiAgICAgKChzdHJ1Y3Qgb3NpX3BhY2tldCAqKWFkYXRhKS0+bmV4dCA9IGZy
ZWVTbWFsbExpc3Q7DQogICAgIGZyZWVTbWFsbExpc3QgPSBhZGF0YTsNCi0j
aWYJZGVmaW5lZChBRlNfQUlYMzJfRU5WKSB8fCBkZWZpbmVkKEFGU19IUFVY
X0VOVikNCi0gICAgc3BseCh4KTsJCQkvKnVubG9ja2woJm9zaV9mc3Bsb2Nr
KTsgKi8NCi0jZWxzZQ0KICAgICBNUmVsZWFzZVdyaXRlTG9jaygmb3NpX2Zz
cGxvY2spOw0KLSNlbmRpZg0KIH0NCiANCi0jaWYJZGVmaW5lZChBRlNfQUlY
MzJfRU5WKSB8fCBkZWZpbmVkKEFGU19IUFVYX0VOVikNCi1zdGF0aWMgc3Ry
dWN0IG9zaV9wYWNrZXQgKmZyZWVNZWRpdW1MaXN0Ow0KLQ0KLW9zaV9BbGxv
Y01vcmVNU3BhY2UocmVnaXN0ZXIgYWZzX2ludDMyIHByZWFsbG9jcykNCi17
DQotICAgIHJlZ2lzdGVyIGludCBpOw0KLSAgICBjaGFyICpwOw0KLQ0KLSAg
ICBwID0gKGNoYXIgKilhZnNfb3NpX0FsbG9jKEFGU19NREFMTE9DU0laICog
cHJlYWxsb2NzKTsNCi0jaWZkZWYgIEtFUk5FTF9IQVZFX1BJTg0KLSAgICBw
aW4ocCwgQUZTX01EQUxMT0NTSVogKiBwcmVhbGxvY3MpOwkvKiBYWFhYICov
DQotI2VuZGlmDQotICAgIGZvciAoaSA9IDA7IGkgPCBwcmVhbGxvY3M7IGkr
KywgcCArPSBBRlNfTURBTExPQ1NJWikgew0KLSNpZmRlZiBBRlNfQUlYMzJf
RU5WDQotCSpwID0gJ1wwJzsJCS8qIHBhZ2UgZmF1bHQgaXQgaW4uICovDQot
I2VuZGlmDQotCW9zaV9GcmVlTWVkaXVtU3BhY2UoKGNoYXIgKilwKTsNCi0g
ICAgfQ0KLSAgICBhZnNfc3RhdHNfY21wZXJmLk1lZGl1bUJsb2Nrc0FsbG9j
ZWQgKz0gcHJlYWxsb2NzOw0KLSAgICBhZnNfc3RhdHNfY21wZXJmLk1lZGl1
bUJsb2Nrc0FjdGl2ZSArPSBwcmVhbGxvY3M7DQotfQ0KLQ0KLQ0KLXZvaWQg
Kg0KLW9zaV9BbGxvY01lZGl1bVNwYWNlKHNpemVfdCBzaXplKQ0KLXsNCi0g
ICAgcmVnaXN0ZXIgc3RydWN0IG9zaV9wYWNrZXQgKnRwOw0KLSNpZglkZWZp
bmVkKEFGU19BSVgzMl9FTlYpDQotICAgIGludCB4Ow0KLSNlbmRpZg0KLSNp
ZglkZWZpbmVkKEFGU19IUFVYX0VOVikNCi0gICAgdWxvbmdfdCB4Ow0KLSNl
bmRpZg0KLQ0KLSAgICBhZnNfc3RhdHNfY21wZXJmLk1lZGl1bUJsb2Nrc0Fj
dGl2ZSsrOw0KLSAgcmV0cnk6DQotICAgIHggPSBzcGxuZXQoKTsNCi0gICAg
dHAgPSBmcmVlTWVkaXVtTGlzdDsNCi0gICAgaWYgKHRwKQ0KLQlmcmVlTWVk
aXVtTGlzdCA9IHRwLT5uZXh0Ow0KLSAgICBzcGx4KHgpOw0KLSAgICBpZiAo
IXRwKSB7DQotCW9zaV9BbGxvY01vcmVNU3BhY2UoQUZTX01BTExPQ19MT1df
V0FURVIpOw0KLQlnb3RvIHJldHJ5Ow0KLSAgICB9DQotICAgIHJldHVybiB0
cDsNCi19DQotDQotdm9pZA0KLW9zaV9GcmVlTWVkaXVtU3BhY2Uodm9pZCAq
YWRhdGEpDQotew0KLQ0KLSNpZglkZWZpbmVkKEFGU19BSVgzMl9FTlYpDQot
ICAgIGludCB4Ow0KLSNlbmRpZg0KLSNpZglkZWZpbmVkKEFGU19IUFVYX0VO
VikNCi0gICAgdWxvbmdfdCB4Ow0KLSNlbmRpZg0KLQ0KLSAgICBhZnNfc3Rh
dHNfY21wZXJmLk1lZGl1bUJsb2Nrc0FjdGl2ZS0tOw0KLSAgICB4ID0gc3Bs
bmV0KCk7DQotICAgICgoc3RydWN0IG9zaV9wYWNrZXQgKilhZGF0YSktPm5l
eHQgPSBmcmVlTWVkaXVtTGlzdDsNCi0gICAgZnJlZU1lZGl1bUxpc3QgPSBh
ZGF0YTsNCi0gICAgc3BseCh4KTsNCi19DQotI2VuZGlmIC8qIGRlZmluZWQo
QUZTX0FJWDMyX0VOVikgfHwgZGVmaW5lZChBRlNfSFBVWF9FTlYpICovDQot
DQogDQogLyogYWxsb2NhdGUgc3BhY2UgZm9yIHNlbmRlciAqLw0KIHZvaWQg
Kg0KQEAgLTIxMCwxMjkgKzEwNiwyOCBAQA0KICAgICByZXR1cm4gKGNoYXIg
Kil0cDsNCiB9DQogDQotI2lmCWRlZmluZWQoQUZTX0FJWDMyX0VOVikgfHwg
ZGVmaW5lZChBRlNfSFBVWF9FTlYpDQotLyoNCi0gKiBYWFggV2UgY291bGQg
aGF2ZSB1c2VkIGEgbWFjcm8gYXJvdW5kIG9zaV9BbGxvY1NtYWxsU3BhY2Ug
YnV0IGl0J3MNCi0gKiBwcm9iYWJseSBiZXR0ZXIgbGlrZSB0aGlzIHNvIHRo
YXQgd2UgY2FuIHJlbW92ZSB0aGlzIGF0IHNvbWUgcG9pbnQuDQotICovDQot
LyogbW9yZXNwYWNlIDEgLSBtZWFucyB3ZSBjYWxsZWQgYXQgc3BsbmV0IGxl
dmVsICovDQotY2hhciAqDQotb3NpX0FsbG9jU21hbGwocmVnaXN0ZXIgYWZz
X2ludDMyIHNpemUsIHJlZ2lzdGVyIGFmc19pbnQzMiBtb3Jlc3BhY2UpDQot
ew0KLSAgICByZWdpc3RlciBzdHJ1Y3Qgb3NpX3BhY2tldCAqdHA7DQotI2lm
CWRlZmluZWQoQUZTX0FJWDMyX0VOVikNCi0gICAgaW50IHg7DQotI2VuZGlm
DQotI2lmCWRlZmluZWQoQUZTX0hQVVhfRU5WKQ0KLSAgICB1bG9uZ190IHg7
DQotI2VuZGlmDQotDQotICAgIEFGU19BU1NFUlRfR0xPQ0soKTsNCi0NCi0g
ICAgQUZTX1NUQVRDTlQob3NpX0FsbG9jU21hbGxTcGFjZSk7DQotICAgIGlm
IChzaXplID4gQUZTX1NNQUxMT0NTSVopDQotCW9zaV9QYW5pYygib3NpX0Fs
bG9jU21hbGwsIHNpemU9JWQiLCBzaXplKTsNCi0gICAgaWYgKCghbW9yZXNw
YWNlDQotCSAmJg0KLQkgKChhZnNfc3RhdHNfY21wZXJmLlNtYWxsQmxvY2tz
QWxsb2NlZCAtDQotCSAgIGFmc19zdGF0c19jbXBlcmYuU21hbGxCbG9ja3NB
Y3RpdmUpDQotCSAgPD0gQUZTX1NBTExPQ19MT1dfV0FURVIpKQ0KLQl8fCAh
ZnJlZVNtYWxsTGlzdCkgew0KLQlvc2lfQWxsb2NNb3JlU1NwYWNlKEFGU19T
QUxMT0NfTE9XX1dBVEVSICogMik7DQotICAgIH0NCi0gICAgYWZzX3N0YXRz
X2NtcGVyZi5TbWFsbEJsb2Nrc0FjdGl2ZSsrOw0KLSNpZglkZWZpbmVkKEFG
U19BSVgzMl9FTlYpIHx8IGRlZmluZWQoQUZTX0hQVVhfRU5WKQ0KLSAgICB4
ID0gc3BsbmV0KCk7CQkvKmxvY2tsKCZvc2lfZnNwbG9jaywgTE9DS19TSE9S
VCk7ICovDQotI2Vsc2UNCi0gICAgTU9idGFpbldyaXRlTG9jaygmb3NpX2Zz
cGxvY2ssIDMyNSk7DQotI2VuZGlmDQotICAgIHRwID0gZnJlZVNtYWxsTGlz
dDsNCi0gICAgaWYgKHRwKQ0KLQlmcmVlU21hbGxMaXN0ID0gdHAtPm5leHQ7
DQotI2lmCWRlZmluZWQoQUZTX0FJWDMyX0VOVikgfHwgZGVmaW5lZChBRlNf
SFBVWF9FTlYpDQotICAgIHNwbHgoeCk7CQkJLyp1bmxvY2tsKCZvc2lfZnNw
bG9jayk7ICovDQotI2Vsc2UNCi0gICAgTVJlbGVhc2VXcml0ZUxvY2soJm9z
aV9mc3Bsb2NrKTsNCi0jZW5kaWYNCi0NCi0gICAgcmV0dXJuIChjaGFyICop
dHA7DQotfQ0KLQ0KLWludA0KLW9zaV9GcmVlU21hbGwocmVnaXN0ZXIgc3Ry
dWN0IG9zaV9wYWNrZXQgKmFkYXRhKQ0KLXsNCi0jaWYJZGVmaW5lZChBRlNf
QUlYMzJfRU5WKQ0KLSAgICBpbnQgeDsNCi0jZW5kaWYNCi0jaWYJZGVmaW5l
ZChBRlNfSFBVWF9FTlYpDQotICAgIHVsb25nX3QgeDsNCi0jZW5kaWYNCi0N
Ci0gICAgQUZTX1NUQVRDTlQob3NpX0ZyZWVTbWFsbFNwYWNlKTsNCi0gICAg
YWZzX3N0YXRzX2NtcGVyZi5TbWFsbEJsb2Nrc0FjdGl2ZS0tOw0KLSNpZglk
ZWZpbmVkKEFGU19BSVgzMl9FTlYpIHx8IGRlZmluZWQoQUZTX0hQVVhfRU5W
KQ0KLSAgICB4ID0gc3BsbmV0KCk7CQkvKmxvY2tsKCZvc2lfZnNwbG9jaywg
TE9DS19TSE9SVCk7ICovDQotI2Vsc2UNCi0gICAgTU9idGFpbldyaXRlTG9j
aygmb3NpX2ZzcGxvY2ssIDMyNik7DQotI2VuZGlmDQotICAgIGFkYXRhLT5u
ZXh0ID0gZnJlZVNtYWxsTGlzdDsNCi0gICAgZnJlZVNtYWxsTGlzdCA9IGFk
YXRhOw0KLSNpZglkZWZpbmVkKEFGU19BSVgzMl9FTlYpIHx8IGRlZmluZWQo
QUZTX0hQVVhfRU5WKQ0KLSAgICBzcGx4KHgpOwkJCS8qdW5sb2NrbCgmb3Np
X2ZzcGxvY2spOyAqLw0KLSNlbHNlDQotICAgIE1SZWxlYXNlV3JpdGVMb2Nr
KCZvc2lfZnNwbG9jayk7DQotI2VuZGlmDQotICAgIHJldHVybiAwOw0KLX0N
Ci0jZW5kaWYgLyogQUZTX0FJWDMyX0VOViB8fCBBRlNfSFBVWF9FTlYgKi8N
CiANCiAvKiBhbGxvY2F0ZSBzcGFjZSBmb3Igc2VuZGVyICovDQogdm9pZCAq
DQogb3NpX0FsbG9jU21hbGxTcGFjZShzaXplX3Qgc2l6ZSkNCiB7DQogICAg
IHJlZ2lzdGVyIHN0cnVjdCBvc2lfcGFja2V0ICp0cDsNCi0jaWYJZGVmaW5l
ZChBRlNfQUlYMzJfRU5WKQ0KLSAgICBpbnQgeDsNCi0jZW5kaWYNCi0jaWYJ
ZGVmaW5lZChBRlNfSFBVWF9FTlYpDQotICAgIHVsb25nX3QgeDsNCi0jZW5k
aWYNCiANCiAgICAgQUZTX1NUQVRDTlQob3NpX0FsbG9jU21hbGxTcGFjZSk7
DQogICAgIGlmIChzaXplID4gQUZTX1NNQUxMT0NTSVopDQogCW9zaV9QYW5p
Yygib3NpX0FsbG9jU21hbGxTOiBzaXplPSVkXG4iLCBzaXplKTsNCiANCi0j
aWYJZGVmaW5lZChBRlNfQUlYMzJfRU5WKSB8fCBkZWZpbmVkKEFGU19IUFVY
X0VOVikNCi0gICAgLyogDQotICAgICAqIFdlJ3JlIHJ1bm5pbmcgb3V0IG9m
IGZyZWUgYmxvY2tzICg8IDUwKTsgZ2V0IHNvbWUgbW9yZSBvdXJzZWx2ZXMg
c28gdGhhdA0KLSAgICAgKiB3aGVuIHdlIGRvbid0IHJ1biBvdXQgb2YgdGhl
bSB3aGVuIGNhbGxlZCB1bmRlciBzcGxuZXQoKSAoZnJvbSByeCk7DQotICAg
ICAqLw0KLSAgICBpZiAoKChhZnNfc3RhdHNfY21wZXJmLlNtYWxsQmxvY2tz
QWxsb2NlZCAtDQotCSAgYWZzX3N0YXRzX2NtcGVyZi5TbWFsbEJsb2Nrc0Fj
dGl2ZSkNCi0JIDw9IEFGU19TQUxMT0NfTE9XX1dBVEVSKSB8fCAhZnJlZVNt
YWxsTGlzdCkgew0KLQlvc2lfQWxsb2NNb3JlU1NwYWNlKEFGU19TQUxMT0Nf
TE9XX1dBVEVSICogMik7DQotICAgIH0NCi0jZWxzZQ0KICAgICBpZiAoIWZy
ZWVTbWFsbExpc3QpIHsNCiAJYWZzX3N0YXRzX2NtcGVyZi5TbWFsbEJsb2Nr
c0FsbG9jZWQrKzsNCiAJYWZzX3N0YXRzX2NtcGVyZi5TbWFsbEJsb2Nrc0Fj
dGl2ZSsrOw0KIAlyZXR1cm4gYWZzX29zaV9BbGxvYyhBRlNfU01BTExPQ1NJ
Wik7DQogICAgIH0NCi0jZW5kaWYNCiAgICAgYWZzX3N0YXRzX2NtcGVyZi5T
bWFsbEJsb2Nrc0FjdGl2ZSsrOw0KLSNpZglkZWZpbmVkKEFGU19BSVgzMl9F
TlYpIHx8IGRlZmluZWQoQUZTX0hQVVhfRU5WKQ0KLSAgICB4ID0gc3BsbmV0
KCk7CQkvKmxvY2tsKCZvc2lfZnNwbG9jaywgTE9DS19TSE9SVCk7ICovDQot
I2Vsc2UNCiAgICAgTU9idGFpbldyaXRlTG9jaygmb3NpX2ZzcGxvY2ssIDMy
Nyk7DQotI2VuZGlmDQogICAgIHRwID0gZnJlZVNtYWxsTGlzdDsNCiAgICAg
aWYgKHRwKQ0KIAlmcmVlU21hbGxMaXN0ID0gdHAtPm5leHQ7DQotI2lmCWRl
ZmluZWQoQUZTX0FJWDMyX0VOVikgfHwgZGVmaW5lZChBRlNfSFBVWF9FTlYp
DQotICAgIHNwbHgoeCk7CQkJLyp1bmxvY2tsKCZvc2lfZnNwbG9jayk7ICov
DQotI2Vsc2UNCiAgICAgTVJlbGVhc2VXcml0ZUxvY2soJm9zaV9mc3Bsb2Nr
KTsNCi0jZW5kaWYNCiAgICAgcmV0dXJuIChjaGFyICopdHA7DQogfQ0KIA0K
QEAgLTM2MiwxMCArMTU3LDcgQEANCiAJICAgIHVucGluKHRwLCBBRlNfU01B
TExPQ1NJWik7DQogI2VuZGlmDQogCX0NCi0JYWZzX3ByZWFsbG9jcyA9IDUx
MjsNCi0jaWZuZGVmCUFGU19BSVgzMl9FTlYNCiAJTE9DS19JTklUKCZvc2lf
ZnNwbG9jaywgIm9zaV9mc3Bsb2NrIik7DQotI2VuZGlmDQogCUxPQ0tfSU5J
VCgmb3NpX2ZscGxvY2ssICJvc2lfZmxwbG9jayIpOw0KICAgICB9DQogfQ0K
ZGlmZiAtd3J1IC4uL29wZW5hZnMtMS4zLjc5Lm9yaWcvc3JjL2Fmcy9hZnNf
cHJvdG90eXBlcy5oIC4vc3JjL2Fmcy9hZnNfcHJvdG90eXBlcy5oDQotLS0g
Li4vb3BlbmFmcy0xLjMuNzkub3JpZy9zcmMvYWZzL2Fmc19wcm90b3R5cGVz
LmgJVHVlIERlYyAgNyAwNzoxMjoxMiAyMDA0DQorKysgLi9zcmMvYWZzL2Fm
c19wcm90b3R5cGVzLmgJTW9uIE1hciAxNCAxMDoyODoyOSAyMDA1DQpAQCAt
NTE0LDIwICs1MTQsMTMgQEANCiANCiAvKiBhZnNfb3NpX2FsbG9jLmMgKi8N
CiAjaWZuZGVmIEFGU19GQlNEX0VOVg0KLWV4dGVybiBhZnNfaW50MzIgYWZz
X3ByZWFsbG9jczsNCiBleHRlcm4gYWZzX2xvY2tfdCBvc2lfZnNwbG9jazsN
CiBleHRlcm4gYWZzX2xvY2tfdCBvc2lfZmxwbG9jazsNCiAjZW5kaWYNCiBl
eHRlcm4gdm9pZCBvc2lfRnJlZUxhcmdlU3BhY2Uodm9pZCAqYWRhdGEpOw0K
LWV4dGVybiB2b2lkIG9zaV9GcmVlTWVkaXVtU3BhY2Uodm9pZCAqYWRhdGEp
Ow0KIGV4dGVybiB2b2lkIG9zaV9GcmVlU21hbGxTcGFjZSh2b2lkICphZGF0
YSk7DQogZXh0ZXJuIHZvaWQgKm9zaV9BbGxvY0xhcmdlU3BhY2Uoc2l6ZV90
IHNpemUpOw0KLWV4dGVybiB2b2lkICpvc2lfQWxsb2NNZWRpdW1TcGFjZShz
aXplX3Qgc2l6ZSk7DQogZXh0ZXJuIHZvaWQgKm9zaV9BbGxvY1NtYWxsU3Bh
Y2Uoc2l6ZV90IHNpemUpOw0KLSNpZm5kZWYgb3NpX0FsbG9jU21hbGwNCi1l
eHRlcm4gY2hhciAqb3NpX0FsbG9jU21hbGwocmVnaXN0ZXIgYWZzX2ludDMy
IHNpemUsDQotCQkJICAgIHJlZ2lzdGVyIGFmc19pbnQzMiBtb3Jlc3BhY2Up
Ow0KLSNlbmRpZg0KIA0KIC8qIGFmc19vc2lfdWlvLmMgKi8NCiBleHRlcm4g
aW50IGFmc2lvX2NvcHkoc3RydWN0IHVpbyAqYWludWlvLCBzdHJ1Y3QgdWlv
ICphb3V0dWlvLA0KZGlmZiAtd3J1IC4uL29wZW5hZnMtMS4zLjc5Lm9yaWcv
c3JjL2Fmcy9zeXNpbmNsdWRlcy5oIC4vc3JjL2Fmcy9zeXNpbmNsdWRlcy5o
DQotLS0gLi4vb3BlbmFmcy0xLjMuNzkub3JpZy9zcmMvYWZzL3N5c2luY2x1
ZGVzLmgJTW9uIEZlYiAyMSAwMjoxMzo1OCAyMDA1DQorKysgLi9zcmMvYWZz
L3N5c2luY2x1ZGVzLmgJVHVlIE1hciAxNSAwODo1NDowNiAyMDA1DQpAQCAt
MzI4LDEwICszMjgsNiBAQA0KICNpbmNsdWRlICJycGMvdHlwZXMuaCINCiAj
aW5jbHVkZSAicngveGRyLmgiDQogDQotI2lmZGVmIEFGU19BSVgzMl9FTlYN
Ci0jICBpbmNsdWRlICJuZXQvc3BsLmgiDQotI2VuZGlmDQotDQogLyogTWlz
Y2VsbGFuZW91cyBoZWFkZXJzICovDQogI2luY2x1ZGUgImgvcHJvYy5oIg0K
ICNpZiAhZGVmaW5lZChBRlNfRkJTRF9FTlYpDQpkaWZmIC13cnUgLi4vb3Bl
bmFmcy0xLjMuNzkub3JpZy9zcmMvbHdwL2x3cC5oIC4vc3JjL2x3cC9sd3Au
aA0KLS0tIC4uL29wZW5hZnMtMS4zLjc5Lm9yaWcvc3JjL2x3cC9sd3AuaAlN
b24gRmViIDIxIDAyOjEzOjUwIDIwMDUNCisrKyAuL3NyYy9sd3AvbHdwLmgJ
TW9uIE1hciAxNCAxNjoyMjowMyAyMDA1DQpAQCAtMjk4LDE2ICsyOTgsMTAg
QEANCiAgKi8NCiAjaWYgZGVmaW5lZChVU0VfVUNPTlRFWFQpICYmIGRlZmlu
ZWQoSEFWRV9VQ09OVEVYVF9IKQ0KICNkZWZpbmUgQUZTX0xXUF9NSU5TVEFD
S1NJWkUgICgyODggKiAxMDI0KQ0KLSNlbHNlDQotI2lmIGRlZmluZWQoQUZT
X0xJTlVYMjJfRU5WKQ0KKyNlbGlmIGRlZmluZWQoQUZTX0xJTlVYMjJfRU5W
KQ0KICNkZWZpbmUgQUZTX0xXUF9NSU5TVEFDS1NJWkUJKDE5MiAqIDEwMjQp
DQogI2Vsc2UNCi0jaWYgZGVmaW5lZChBRlNfQUlYNTJfRU5WKQ0KLSNkZWZp
bmUgQUZTX0xXUF9NSU5TVEFDS1NJWkUJKDEyOCAqIDEwMjQpDQotI2Vsc2UN
CiAjZGVmaW5lIEFGU19MV1BfTUlOU1RBQ0tTSVpFCSg0OCAqIDEwMjQpDQot
I2VuZGlmDQotI2VuZGlmDQogI2VuZGlmDQogDQogLyogQWN0aW9uIHRvIHRh
a2Ugb24gc3RhY2sgb3ZlcmZsb3cuICovDQpkaWZmIC13cnUgLi4vb3BlbmFm
cy0xLjMuNzkub3JpZy9zcmMvcngvcnguYyAuL3NyYy9yeC9yeC5jDQotLS0g
Li4vb3BlbmFmcy0xLjMuNzkub3JpZy9zcmMvcngvcnguYwlNb24gSmFuIDMx
IDA1OjE0OjQ1IDIwMDUNCisrKyAuL3NyYy9yeC9yeC5jCU1vbiBNYXIgMTQg
MTU6NDQ6MTQgMjAwNQ0KQEAgLTIxOTQsMzAgKzIxOTQsMTMgQEANCiB7DQog
ICAgIHJlZ2lzdGVyIGNoYXIgKnA7DQogDQotI2lmIGRlZmluZWQoQUZTX0FJ
WDQxX0VOVikgJiYgZGVmaW5lZChLRVJORUwpDQotICAgIC8qIEdyYWIgdGhl
IEFGUyBmaWxlc3lzdGVtIGxvY2suIFNlZSBhZnMvb3NpLmggZm9yIHRoZSBs
b2NrDQotICAgICAqIGltcGxlbWVudGF0aW9uLg0KLSAgICAgKi8NCi0gICAg
aW50IGdsb2NrT3duZXIgPSBJU0FGU19HTE9DSygpOw0KLSAgICBpZiAoIWds
b2NrT3duZXIpDQotCUFGU19HTE9DSygpOw0KLSNlbmRpZg0KICAgICBNVVRF
WF9FTlRFUigmcnhfc3RhdHNfbXV0ZXgpOw0KICAgICByeGlfQWxsb2NjbnQr
KzsNCiAgICAgcnhpX0FsbG9jc2l6ZSArPSBzaXplOw0KICAgICBNVVRFWF9F
WElUKCZyeF9zdGF0c19tdXRleCk7DQotI2lmCShkZWZpbmVkKEFGU19BSVgz
Ml9FTlYpIHx8IGRlZmluZWQoQUZTX0hQVVhfRU5WKSkgJiYgIWRlZmluZWQo
QUZTX0hQVVgxMDBfRU5WKSAmJiBkZWZpbmVkKEtFUk5FTCkNCi0gICAgaWYg
KHNpemUgPiBBRlNfU01BTExPQ1NJWikgew0KLQlwID0gKGNoYXIgKilvc2lf
QWxsb2NNZWRpdW1TcGFjZShzaXplKTsNCi0gICAgfSBlbHNlDQotCXAgPSAo
Y2hhciAqKW9zaV9BbGxvY1NtYWxsKHNpemUsIDEpOw0KLSNpZiBkZWZpbmVk
KEFGU19BSVg0MV9FTlYpICYmIGRlZmluZWQoS0VSTkVMKQ0KLSAgICBpZiAo
IWdsb2NrT3duZXIpDQotCUFGU19HVU5MT0NLKCk7DQotI2VuZGlmDQotI2Vs
c2UNCisNCiAgICAgcCA9IChjaGFyICopb3NpX0FsbG9jKHNpemUpOw0KLSNl
bmRpZg0KKw0KICAgICBpZiAoIXApDQogCW9zaV9QYW5pYygicnhpX0FsbG9j
IGVycm9yIik7DQogICAgIG1lbXNldChwLCAwLCBzaXplKTsNCkBAIC0yMjI3
LDMwICsyMjEwLDEyIEBADQogdm9pZA0KIHJ4aV9GcmVlKHZvaWQgKmFkZHIs
IHJlZ2lzdGVyIHNpemVfdCBzaXplKQ0KIHsNCi0jaWYgZGVmaW5lZChBRlNf
QUlYNDFfRU5WKSAmJiBkZWZpbmVkKEtFUk5FTCkNCi0gICAgLyogR3JhYiB0
aGUgQUZTIGZpbGVzeXN0ZW0gbG9jay4gU2VlIGFmcy9vc2kuaCBmb3IgdGhl
IGxvY2sNCi0gICAgICogaW1wbGVtZW50YXRpb24uDQotICAgICAqLw0KLSAg
ICBpbnQgZ2xvY2tPd25lciA9IElTQUZTX0dMT0NLKCk7DQotICAgIGlmICgh
Z2xvY2tPd25lcikNCi0JQUZTX0dMT0NLKCk7DQotI2VuZGlmDQogICAgIE1V
VEVYX0VOVEVSKCZyeF9zdGF0c19tdXRleCk7DQogICAgIHJ4aV9BbGxvY2Nu
dC0tOw0KICAgICByeGlfQWxsb2NzaXplIC09IHNpemU7DQogICAgIE1VVEVY
X0VYSVQoJnJ4X3N0YXRzX211dGV4KTsNCi0jaWYJKGRlZmluZWQoQUZTX0FJ
WDMyX0VOVikgfHwgZGVmaW5lZChBRlNfSFBVWF9FTlYpKSAmJiAhZGVmaW5l
ZChBRlNfSFBVWDEwMF9FTlYpICYmIGRlZmluZWQoS0VSTkVMKQ0KLSAgICBp
ZiAoc2l6ZSA+IEFGU19TTUFMTE9DU0laKQ0KLQlvc2lfRnJlZU1lZGl1bVNw
YWNlKGFkZHIpOw0KLSAgICBlbHNlDQotCW9zaV9GcmVlU21hbGwoYWRkcik7
DQotI2lmIGRlZmluZWQoQUZTX0FJWDQxX0VOVikgJiYgZGVmaW5lZChLRVJO
RUwpDQotICAgIGlmICghZ2xvY2tPd25lcikNCi0JQUZTX0dVTkxPQ0soKTsN
Ci0jZW5kaWYNCi0jZWxzZQ0KKw0KICAgICBvc2lfRnJlZShhZGRyLCBzaXpl
KTsNCi0jZW5kaWYNCiB9DQogDQogLyogRmluZCB0aGUgcGVlciBwcm9jZXNz
IHJlcHJlc2VudGVkIGJ5IHRoZSBzdXBwbGllZCAoaG9zdCxwb3J0KQ0KZGlm
ZiAtd3J1IC4uL29wZW5hZnMtMS4zLjc5Lm9yaWcvc3JjL3J4L3J4X3Byb3Rv
dHlwZXMuaCAuL3NyYy9yeC9yeF9wcm90b3R5cGVzLmgNCi0tLSAuLi9vcGVu
YWZzLTEuMy43OS5vcmlnL3NyYy9yeC9yeF9wcm90b3R5cGVzLmgJTW9uIEph
biAzMSAwNTozNDo0NiAyMDA1DQorKysgLi9zcmMvcngvcnhfcHJvdG90eXBl
cy5oCVR1ZSBNYXIgMTUgMTA6Mzg6MjMgMjAwNQ0KQEAgLTU1MSwxMiArNTUx
LDEyIEBADQogZXh0ZXJuIGludCByeF9nZXRBbGxBZGRyKGFmc19pbnQzMiAq
IGJ1ZmZlciwgaW50IG1heFNpemUpOw0KIGV4dGVybiB2b2lkIG9zaV9QYW5p
YygpOwkvKiBsZWF2ZSB3aXRob3V0IGFyZ3MgdGlsbCBzdGRhcmcgcmV3cml0
ZSAqLw0KIGV4dGVybiB2b2lkIHJ4aV9Jbml0UGVlclBhcmFtcyhzdHJ1Y3Qg
cnhfcGVlciAqcHApOw0KLSNpZmRlZiAgQUZTX0FJWDMyX0VOVg0KLSNpZm5k
ZWYgb3NpX0FsbG9jDQotZXh0ZXJuIGNoYXIgKm9zaV9BbGxvYyhhZnNfaW50
MzIgeCk7DQotZXh0ZXJuIHZvaWQgb3NpX0ZyZWUoY2hhciAqeCwgYWZzX2lu
dDMyIHNpemUpOw0KLSNlbmRpZg0KLSNlbmRpZiAvKiBBRlNfQUlYMzJfRU5W
ICovDQorDQorI2lmIGRlZmluZWQoQUZTX0FJWDMyX0VOVikgJiYgIWRlZmlu
ZWQoS0VSTkVMKQ0KK2V4dGVybiB2b2lkICpvc2lfQWxsb2MoYWZzX2ludDMy
IHgpOw0KK2V4dGVybiB2b2lkIG9zaV9GcmVlKHZvaWQgKngsIGFmc19pbnQz
MiBzaXplKTsNCisjZW5kaWYgLyogZGVmaW5lZChBRlNfQUlYMzJfRU5WKSAm
JiAhZGVmaW5lZChLRVJORUwpICovDQorDQogZXh0ZXJuIHZvaWQgcnhfR2V0
SUZJbmZvKHZvaWQpOw0KIGV4dGVybiB2b2lkIHJ4X1NldE5vSnVtYm8odm9p
ZCk7DQogDQpkaWZmIC13cnUgLi4vb3BlbmFmcy0xLjMuNzkub3JpZy9zcmMv
cngvcnhfdXNlci5jIC4vc3JjL3J4L3J4X3VzZXIuYw0KLS0tIC4uL29wZW5h
ZnMtMS4zLjc5Lm9yaWcvc3JjL3J4L3J4X3VzZXIuYwlNb24gT2N0IDE4IDE5
OjQzOjU4IDIwMDQNCisrKyAuL3NyYy9yeC9yeF91c2VyLmMJVHVlIE1hciAx
NSAxMjowNDowMyAyMDA1DQpAQCAtMjMzLDMwICsyMzMsMzAgQEANCiAJICAg
ICAgKGludClmaWxlLCBsaW5lKTsNCiB9DQogDQotI2lmZGVmCUFGU19BSVgz
Ml9FTlYNCisjaWYgZGVmaW5lZChBRlNfQUlYMzJfRU5WKSAmJiAhZGVmaW5l
ZChLRVJORUwpDQogI2lmbmRlZiBvc2lfQWxsb2MNCiBzdGF0aWMgY29uc3Qg
Y2hhciBtZW1aZXJvOw0KLWNoYXIgKg0KK3ZvaWQgKg0KIG9zaV9BbGxvYyhh
ZnNfaW50MzIgeCkNCiB7DQogICAgIC8qIA0KLSAgICAgKiAwLWxlbmd0aCBh
bGxvY3MgbWF5IHJldHVybiBOVUxMIHB0ciBmcm9tIG9zaV9rYWxsb2MsIHNv
IHdlIHNwZWNpYWwtY2FzZQ0KKyAgICAgKiAwLWxlbmd0aCBhbGxvY3MgbWF5
IHJldHVybiBOVUxMIHB0ciBmcm9tIG1hbGxvYywgc28gd2Ugc3BlY2lhbC1j
YXNlDQogICAgICAqIHRoaW5ncyBzbyB0aGF0IE5VTEwgcmV0dXJuZWQgaWZm
IGFuIGVycm9yIG9jY3VycmVkIA0KICAgICAgKi8NCiAgICAgaWYgKHggPT0g
MCkNCi0JcmV0dXJuICZtZW1aZXJvOw0KLSAgICByZXR1cm4gKChjaGFyICop
bWFsbG9jKHgpKTsNCisJcmV0dXJuICh2b2lkICopJm1lbVplcm87DQorICAg
IHJldHVybihtYWxsb2MoeCkpOw0KIH0NCiANCiB2b2lkDQotb3NpX0ZyZWUo
Y2hhciAqeCwgYWZzX2ludDMyIHNpemUpDQorb3NpX0ZyZWUodm9pZCAqeCwg
YWZzX2ludDMyIHNpemUpDQogew0KICAgICBpZiAoeCA9PSAmbWVtWmVybykN
CiAJcmV0dXJuOw0KLSAgICBmcmVlKChjaGFyICopeCk7DQorICAgIGZyZWUo
eCk7DQogfQ0KICNlbmRpZg0KLSNlbmRpZiAvKiBBRlNfQUlYMzJfRU5WICov
DQorI2VuZGlmIC8qIGRlZmluZWQoQUZTX0FJWDMyX0VOVikgJiYgIWRlZmlu
ZWQoS0VSTkVMKSAqLw0KIA0KICNkZWZpbmUJQUREUlNQRVJTSVRFCTE2DQog
DQpkaWZmIC13cnUgLi4vb3BlbmFmcy0xLjMuNzkub3JpZy9zcmMvcnhrYWQv
cnhrYWQucC5oIC4vc3JjL3J4a2FkL3J4a2FkLnAuaA0KLS0tIC4uL29wZW5h
ZnMtMS4zLjc5Lm9yaWcvc3JjL3J4a2FkL3J4a2FkLnAuaAlUdWUgRGVjICA3
IDE3OjQ4OjQzIDIwMDQNCisrKyAuL3NyYy9yeGthZC9yeGthZC5wLmgJTW9u
IE1hciAxNCAxNTo0NjowOSAyMDA1DQpAQCAtMTYsMTYgKzE2LDcgQEANCiAJ
CS8qIG5vIHRpY2tldCBnb29kIGZvciBsb25nZXIgdGhhbiAzMCBkYXlzICov
DQogI2RlZmluZSBNQVhLVENUSUNLRVRMSUZFVElNRSAoMzAqMjQqMzYwMCkN
CiAjZGVmaW5lIE1JTktUQ1RJQ0tFVExFTgkgICAgICAzMg0KLQ0KLSNpZiBk
ZWZpbmVkKEFGU19BSVg1Ml9FTlYpDQotI2lmZGVmIF9fWENPRkY2NF9fDQog
I2RlZmluZQlNQVhLVENUSUNLRVRMRU4JICAgICAgMTIwMDAJLyogd2FzIDM0
NCAqLw0KLSNlbHNlDQotI2RlZmluZSBNQVhLVENUSUNLRVRMRU4JCTM0NA0K
LSNlbmRpZg0KLSNlbHNlDQotI2RlZmluZQlNQVhLVENUSUNLRVRMRU4JICAg
ICAgMTIwMDAJLyogd2FzIDM0NCAqLw0KLSNlbmRpZg0KIA0KICNkZWZpbmUJ
TUFYS1RDTkFNRUxFTgkgICAgICA2NAkvKiBuYW1lICYgaW5zdCBzaG91bGQg
YmUgMjU2ICovDQogI2RlZmluZSBNQVhLVENSRUFMTUxFTgkgICAgICA2NAkv
KiBzaG91bGQgYmUgMjU2ICovDQo=

---559023410-758783491-1111658337=:22795--