[PHP-users 3163] pg_last_notice() patach (Was Re: セッション管理について)

Yasuo Ohgaki php-users@php.gr.jp
Mon, 29 Oct 2001 13:14:15 +0900


This is a multi-part message in MIME format.
--------------060007020409050406000707
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

大垣です。

Tatsuo Ishii wrote:
> 石井です.
>
>
>> 大垣です。書いてしまう方が簡単なので書いてしまいます。
>>
>> PostgreSQLのNoticeメッセージの処理の不具合により、
pg_last_notice() (4.0.6から追
>> 加)を使っていなくても、ランダムにクラッシュします。
>>
>
> これって修正パッチとかはないのですか.
>
> もしなければしょうがないから PHP-DEVから pg_last_notice が追加さ
れたと きのパッチ拾ってきて,
> back out しますけど.

4.0.6用のパッチは無いです。(本家PHP開発者の人達は基本的にリリース
版のパッチを作らないです。。。)

と言うことで、適当に4.2.0とのdiffから即席パッチを作成してみました。
TSRM関連の変更はばっさり切っています。

CGI SAPI版のビルドと簡単なテストスクリプトしか試していません。
多分使えると思います。

良くテストしていないので、どなたかテストして頂けると助かります。

# 動作しなかったりして、、、

--
Yasuo Ohgaki

--------------060007020409050406000707
Content-Type: text/plain;
 name="php_pgsql.h.diff"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="php_pgsql.h.diff"

LS0tIHBocF9wZ3NxbC5oLm9yaWcJTW9uIE9jdCAyOSAxMjoyNzo0NyAyMDAxCisrKyBwaHBf
cGdzcWwuaAlNb24gT2N0IDI5IDEyOjI4OjI4IDIwMDEKQEAgLTEyLDEyICsxMiwxMSBAQAog
ICAgfCBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5k
IGEgbm90ZSB0byAgICAgICAgICB8CiAgICB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4g
bWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKwotICAgfCBBdXRob3JzOiBaZWV2IFN1cmFza2kgPHplZXZAemVuZC5j
b20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgIEpv
dW5pIEFodG8gPGpvdW5pLmFodG9AZXhkZWMuZmk+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKKyAgIHwgQXV0aG9yczogWmVldiBTdXJhc2tpIDx6ZWV2QHplbmQuY29tPiB8Cisg
ICB8ICAgICAgICAgIEpvdW5pIEFodG8gPGpvdW5pLmFodG9AZXhkZWMuZmk+IHwKICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKwogICovCi0gCi0vKiAkSWQ6IHBocF9wZ3NxbC5oLHYgMS4zMCAy
MDAxLzA1LzA2IDAxOjM0OjU2IHJhc211cyBFeHAgJCAqLworLyogJElkOiBwaHBfcGdzcWwu
aCx2IDEuMzMgMjAwMS8wOS8yNiAyMTo0NDo0OCB6ZWV2IEV4cCAkICovCiAKICNpZm5kZWYg
UEhQX1BHU1FMX0gKICNkZWZpbmUgUEhQX1BHU1FMX0gKQEAgLTMyLDggKzMxLDggQEAKICNp
bmNsdWRlIDxsaWJwcS1mZS5oPgogCiAjaWZkZWYgUEhQX1dJTjMyCi0jZGVmaW5lIElOVl9X
UklURSAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgSU5WX1JFQUQgICAgICAgICAg
ICAgMHgwMDA0MDAwMAorI2RlZmluZSBJTlZfV1JJVEUgMHgwMDAyMDAwMAorI2RlZmluZSBJ
TlZfUkVBRCAweDAwMDQwMDAwCiAjZWxzZQogI2luY2x1ZGUgPGxpYnBxL2xpYnBxLWZzLmg+
CiAjZW5kaWYKQEAgLTExMiw2ICsxMTEsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX3BocF9wZ3Nx
bF9yZXN1bHRfaGFuZGxlIHsKIAlQR2Nvbm4gKmNvbm47CiAJUEdyZXN1bHQgKnJlc3VsdDsK
KwlpbnQgcm93OwogfSBwZ3NxbF9yZXN1bHRfaGFuZGxlOwogCiB0eXBlZGVmIHN0cnVjdCB7
CkBAIC0xMjIsMjUgKzEyMiwxNyBAQAogCWludCBsZV9sb2ZwLGxlX3N0cmluZzsKIAlpbnQg
aWdub3JlX25vdGljZXM7CiAJY2hhciAqbGFzdF9ub3RpY2U7CisJdWludCBsYXN0X25vdGlj
ZV9sZW47CiB9IHBocF9wZ3NxbF9nbG9iYWxzOwogCiAKICNpZmRlZiBaVFMKLSMgZGVmaW5l
IFBHTFNfRAlwaHBfcGdzcWxfZ2xvYmFscyAqcGdzcWxfZ2xvYmFscwotIyBkZWZpbmUgUEdM
U19EQwksIFBHTFNfRAotIyBkZWZpbmUgUEdMU19DCXBnc3FsX2dsb2JhbHMKLSMgZGVmaW5l
IFBHTFNfQ0MgLCBQR0xTX0MKLSMgZGVmaW5lIFBHRyh2KSAocGdzcWxfZ2xvYmFscy0+dikK
LSMgZGVmaW5lIFBHTFNfRkVUQ0goKQlwaHBfcGdzcWxfZ2xvYmFscyAqcGdzcWxfZ2xvYmFs
cyA9IHRzX3Jlc291cmNlKHBnc3FsX2dsb2JhbHNfaWQpCisjIGRlZmluZSBQR0codikgVFNS
TUcocGdzcWxfZ2xvYmFsc19pZCwgcGhwX3Bnc3FsX2dsb2JhbHMgKiwgdikKICNlbHNlCi0j
IGRlZmluZSBQR0xTX0QKLSMgZGVmaW5lIFBHTFNfREMKLSMgZGVmaW5lIFBHTFNfQwotIyBk
ZWZpbmUgUEdMU19DQwogIyBkZWZpbmUgUEdHKHYpIChwZ3NxbF9nbG9iYWxzLnYpCi0jIGRl
ZmluZSBQR0xTX0ZFVENIKCkKIGV4dGVybiBQSFBfUEdTUUxfQVBJIHBocF9wZ3NxbF9nbG9i
YWxzIHBnc3FsX2dsb2JhbHM7CiAjZW5kaWYKKwogI2VuZGlmCiAKICNlbHNlCkBAIC0xNTIs
MyArMTQ0LDQgQEAKICNkZWZpbmUgcGhwZXh0X3Bnc3FsX3B0ciBwZ3NxbF9tb2R1bGVfcHRy
CiAKICNlbmRpZiAvKiBQSFBfUEdTUUxfSCAqLworCg==
--------------060007020409050406000707
Content-Type: text/plain;
 name="pgsql.c.diff"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="pgsql.c.diff"

LS0tIHBnc3FsLmMub3JpZwlNb24gT2N0IDI5IDEyOjI3OjMwIDIwMDEKKysrIHBnc3FsLmMJ
TW9uIE9jdCAyOSAxMjoyODowOSAyMDAxCkBAIC0xMiwxMiArMTIsMTEgQEAKICAgIHwgb2J0
YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhIG5vdGUg
dG8gICAgICAgICAgfAogICAgfCBsaWNlbnNlQHBocC5uZXQgc28gd2UgY2FuIG1haWwgeW91
IGEgY29weSBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKLSAgIHwgQXV0aG9yczogWmVldiBTdXJhc2tpIDx6ZWV2QHplbmQuY29tPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCBBdXRob3JzOiBaZWV2IFN1cmFz
a2kgPHplZXZAemVuZC5jb20+IHwKICAgIHwgICAgICAgICAgSm91bmkgQWh0byA8am91bmku
YWh0b0BleGRlYy5maT4gKGxhcmdlIG9iamVjdCBpbnRlcmZhY2UpICAgfAogICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0rCiAgKi8KLSAKLS8qICRJZDogcGdzcWwuYyx2IDEuMTAyLjIuMyAyMDAx
LzA2LzA0IDA4OjA2OjMwIHNuaXBlciBFeHAgJCAqLworLyogJElkOiBwZ3NxbC5jLHYgMS4x
MjkgMjAwMS8wOS8yNiAyMTo0NDo0OCB6ZWV2IEV4cCAkICovCiAKICNpbmNsdWRlIDxzdGRs
aWIuaD4KIApAQCAtMzIsNiArMzEsNyBAQAogI2luY2x1ZGUgImV4dC9zdGFuZGFyZC9waHBf
c3RhbmRhcmQuaCIKICNpbmNsdWRlICJwaHBfcGdzcWwuaCIKICNpbmNsdWRlICJwaHBfZ2xv
YmFscy5oIgorI2luY2x1ZGUgInplbmRfbGlzdC5oIgogCiAjaWYgSEFWRV9QR1NRTAogCkBA
IC0zOSwxMiArMzksMTQgQEAKICNkZWZpbmUgSW52YWxpZE9pZCAoKE9pZCkgMCkKICNlbmRp
ZgogCi0jZGVmaW5lIFBHU1FMX0FTU09DCQkxPDwwCi0jZGVmaW5lIFBHU1FMX05VTQkJMTw8
MQotI2RlZmluZSBQR1NRTF9CT1RICQkoUEdTUUxfQVNTT0N8UEdTUUxfTlVNKQorI2RlZmlu
ZSBQR1NRTF9BU1NPQyAxPDwwCisjZGVmaW5lIFBHU1FMX05VTSAxPDwxCisjZGVmaW5lIFBH
U1FMX0JPVEggKFBHU1FMX0FTU09DfFBHU1FMX05VTSkKIAogI2RlZmluZSBDSEVDS19ERUZB
VUxUX0xJTksoeCkgaWYgKHggPT0gLTEpIHsgcGhwX2Vycm9yKEVfV0FSTklORywgIiVzOiBu
byBQb3N0Z3JlU1FMIGxpbmsgb3BlbmVkIHlldCIsIGdldF9hY3RpdmVfZnVuY3Rpb25fbmFt
ZSgpKTsgfQogCisvKiB7e3sgcGdzcWxfZnVuY3Rpb25zW10KKyAqLwogZnVuY3Rpb25fZW50
cnkgcGdzcWxfZnVuY3Rpb25zW10gPSB7CiAJUEhQX0ZFKHBnX2Nvbm5lY3QsCQlOVUxMKQog
CVBIUF9GRShwZ19wY29ubmVjdCwJCU5VTEwpCkBAIC04NiwxNSArODgsMTggQEAKIAlQSFBf
RkUocGdfcHV0X2xpbmUsCQlOVUxMKQogCVBIUF9GRShwZ19lbmRfY29weSwJCU5VTEwpCiAj
aWYgSEFWRV9QUUNMSUVOVEVOQ09ESU5HCi0JUEhQX0ZFKHBnX2NsaWVudF9lbmNvZGluZywJ
CU5VTEwpCitQSFBfRkUocGdfY2xpZW50X2VuY29kaW5nLAkJTlVMTCkKIAlQSFBfRkUocGdf
c2V0X2NsaWVudF9lbmNvZGluZywJTlVMTCkKIAkvKiBmb3IgZG93bndhcmRzIGNvbXBhdGli
aWxpdHkgKi8KLQlQSFBfRkFMSUFTKHBnX2NsaWVudGVuY29kaW5nLAkJcGdfY2xpZW50X2Vu
Y29kaW5nLAkJCU5VTEwpCitQSFBfRkFMSUFTKHBnX2NsaWVudGVuY29kaW5nLAkJcGdfY2xp
ZW50X2VuY29kaW5nLAkJCU5VTEwpCiAJUEhQX0ZBTElBUyhwZ19zZXRjbGllbnRlbmNvZGlu
ZywJcGdfc2V0X2NsaWVudF9lbmNvZGluZywJTlVMTCkKICNlbmRpZgotCXtOVUxMLCBOVUxM
LCBOVUxMfQore05VTEwsIE5VTEwsIE5VTEx9CiB9OworLyogfX19ICovCiAKKy8qIHt7eyBw
Z3NxbF9tb2R1bGVfZW50cnkKKyAqLwogemVuZF9tb2R1bGVfZW50cnkgcGdzcWxfbW9kdWxl
X2VudHJ5ID0gewogCSJwZ3NxbCIsCiAJcGdzcWxfZnVuY3Rpb25zLApAQCAtMTA1LDYgKzEx
MCw3IEBACiAJUEhQX01JTkZPKHBnc3FsKSwKIAlTVEFOREFSRF9NT0RVTEVfUFJPUEVSVElF
UwogfTsKKy8qIH19fSAqLwogCiAjaWZkZWYgQ09NUElMRV9ETF9QR1NRTAogWkVORF9HRVRf
TU9EVUxFKHBnc3FsKQpAQCAtMTE4LDEwICsxMjQsMTAgQEAKIFBIUF9QR1NRTF9BUEkgcGhw
X3Bnc3FsX2dsb2JhbHMgcGdzcWxfZ2xvYmFsczsKICNlbmRpZgogCisvKiB7e3sgcGhwX3Bn
c3FsX3NldF9kZWZhdWx0X2xpbmsKKyAqLwogc3RhdGljIHZvaWQgcGhwX3Bnc3FsX3NldF9k
ZWZhdWx0X2xpbmsoaW50IGlkKQogeyAgIAotCVBHTFNfRkVUQ0goKTsKLQogCXplbmRfbGlz
dF9hZGRyZWYoaWQpOwogCiAJaWYgKFBHRyhkZWZhdWx0X2xpbmspICE9IC0xKSB7CkBAIC0x
MzAsMTA2ICsxMzYsMTE5IEBACiAKIAlQR0coZGVmYXVsdF9saW5rKSA9IGlkOwogfQorLyog
fX19ICovCiAKLQorLyoge3t7IF9jbG9zZV9wZ3NxbF9saW5rCisgKi8KIHN0YXRpYyB2b2lk
IF9jbG9zZV9wZ3NxbF9saW5rKHplbmRfcnNyY19saXN0X2VudHJ5ICpyc3JjKQogewogCVBH
Y29ubiAqbGluayA9IChQR2Nvbm4gKilyc3JjLT5wdHI7Ci0JUEdMU19GRVRDSCgpOwogCiAJ
UFFmaW5pc2gobGluayk7CiAJUEdHKG51bV9saW5rcyktLTsKIH0KKy8qIH19fSAqLwogCi0K
Ky8qIHt7eyBfY2xvc2VfcGdzcWxfcGxpbmsKKyAqLwogc3RhdGljIHZvaWQgX2Nsb3NlX3Bn
c3FsX3BsaW5rKHplbmRfcnNyY19saXN0X2VudHJ5ICpyc3JjKQogewogCVBHY29ubiAqbGlu
ayA9IChQR2Nvbm4gKilyc3JjLT5wdHI7Ci0JUEdMU19GRVRDSCgpOwogCiAJUFFmaW5pc2go
bGluayk7CiAJUEdHKG51bV9wZXJzaXN0ZW50KS0tOwogCVBHRyhudW1fbGlua3MpLS07Ci0J
aWYoUEdHKGxhc3Rfbm90aWNlKSAhPSBOVUxMKSB7Ci0JCWVmcmVlKFBHRyhsYXN0X25vdGlj
ZSkpOwotCX0KIH0KKy8qIH19fSAqLwogCi0KLXN0YXRpYyB2b2lkCi1fbm90aWNlX2hhbmRs
ZXIodm9pZCAqYXJnLCBjb25zdCBjaGFyICptZXNzYWdlKQorLyoge3t7IF9ub3RpY2VfaGFu
ZGxlcgorICovCitzdGF0aWMgdm9pZCBfbm90aWNlX2hhbmRsZXIodm9pZCAqYXJnLCBjb25z
dCBjaGFyICptZXNzYWdlKQogewotCVBHTFNfRkVUQ0goKTsKLQogCWlmICghIFBHRyhpZ25v
cmVfbm90aWNlcykpIHsKIAkJcGhwX2xvZ19lcnIoKGNoYXIgKikgbWVzc2FnZSk7Ci0JCWlm
IChQR0cobGFzdF9ub3RpY2UpICE9IE5VTEwpIHsKKwkJaWYgKFBHRyhsYXN0X25vdGljZSkp
IHsKIAkJCWVmcmVlKFBHRyhsYXN0X25vdGljZSkpOwogCQl9Ci0JCVBHRyhsYXN0X25vdGlj
ZSkgPSBlc3RyZHVwKG1lc3NhZ2UpOworCQlQR0cobGFzdF9ub3RpY2VfbGVuKSA9IHN0cmxl
bihtZXNzYWdlKTsKKwkJUEdHKGxhc3Rfbm90aWNlKSA9IGVzdHJuZHVwKG1lc3NhZ2UsIFBH
RyhsYXN0X25vdGljZV9sZW4pKTsKIAl9CiB9CisvKiB9fX0gKi8KIAotCisvKiB7e3sgX3Jv
bGxiYWNrX3RyYW5zYWN0aW9ucworICovCiBzdGF0aWMgaW50IF9yb2xsYmFja190cmFuc2Fj
dGlvbnMoemVuZF9yc3JjX2xpc3RfZW50cnkgKnJzcmMpCiB7CiAJUEdjb25uICpsaW5rOwot
CVBHTFNfRkVUQ0goKTsKLQkKLQlpZiAocnNyYy0+dHlwZSAhPSBsZV9wbGluaykgcmV0dXJu
IDA7CiAKLQlsaW5rID0gKFBHY29ubiAqKSByc3JjLT5wdHI7CisJaWYgKFpfVFlQRV9QKHJz
cmMpICE9IGxlX3BsaW5rKSAKKwkJcmV0dXJuIDA7CiAKKwlsaW5rID0gKFBHY29ubiAqKSBy
c3JjLT5wdHI7CisJCiAJUEdHKGlnbm9yZV9ub3RpY2VzKSA9IDE7CiAJUFFleGVjKGxpbmss
IkJFR0lOO1JPTExCQUNLOyIpOwogCVBHRyhpZ25vcmVfbm90aWNlcykgPSAwOwogCiAJcmV0
dXJuIDA7CiB9CisvKiB9fX0gKi8KIAotCisvKiB7e3sgX2ZyZWVfcHRyCisgKi8KIHN0YXRp
YyB2b2lkIF9mcmVlX3B0cih6ZW5kX3JzcmNfbGlzdF9lbnRyeSAqcnNyYykKIHsKIAlwZ0xv
ZnAgKmxvZnAgPSAocGdMb2ZwICopcnNyYy0+cHRyOwogCWVmcmVlKGxvZnApOwogfQorLyog
fX19ICovCiAKLQorLyoge3t7IF9mcmVlX3Jlc3VsdAorICovCiBzdGF0aWMgdm9pZCBfZnJl
ZV9yZXN1bHQoemVuZF9yc3JjX2xpc3RfZW50cnkgKnJzcmMpCiB7CiAJcGdzcWxfcmVzdWx0
X2hhbmRsZSAqcGdfcmVzdWx0ID0gKHBnc3FsX3Jlc3VsdF9oYW5kbGUgKilyc3JjLT5wdHI7
CisKIAlQUWNsZWFyKHBnX3Jlc3VsdC0+cmVzdWx0KTsKIAllZnJlZShwZ19yZXN1bHQpOwog
fQorLyogfX19ICovCiAKKy8qIHt7eyBQSFBfSU5JCisgKi8KIFBIUF9JTklfQkVHSU4oKQog
CVNURF9QSFBfSU5JX0JPT0xFQU4oInBnc3FsLmFsbG93X3BlcnNpc3RlbnQiLAkiMSIsCVBI
UF9JTklfU1lTVEVNLAkJT25VcGRhdGVJbnQsCQlhbGxvd19wZXJzaXN0ZW50LAlwaHBfcGdz
cWxfZ2xvYmFscywJCXBnc3FsX2dsb2JhbHMpCiAJU1REX1BIUF9JTklfRU5UUllfRVgoInBn
c3FsLm1heF9wZXJzaXN0ZW50IiwJIi0xIiwJUEhQX0lOSV9TWVNURU0sCQlPblVwZGF0ZUlu
dCwJCW1heF9wZXJzaXN0ZW50LAkJcGhwX3Bnc3FsX2dsb2JhbHMsCQlwZ3NxbF9nbG9iYWxz
LAlkaXNwbGF5X2xpbmtfbnVtYmVycykKIAlTVERfUEhQX0lOSV9FTlRSWV9FWCgicGdzcWwu
bWF4X2xpbmtzIiwJCSItMSIsCVBIUF9JTklfU1lTVEVNLAkJCU9uVXBkYXRlSW50LAkJbWF4
X2xpbmtzLAkJCXBocF9wZ3NxbF9nbG9iYWxzLAkJcGdzcWxfZ2xvYmFscywJZGlzcGxheV9s
aW5rX251bWJlcnMpCiBQSFBfSU5JX0VORCgpCisvKiB9fX0gKi8KIAotCi1zdGF0aWMgdm9p
ZCBwaHBfcGdzcWxfaW5pdF9nbG9iYWxzKFBHTFNfRCkKKy8qIHt7eyBwaHBfcGdzcWxfaW5p
dF9nbG9iYWxzCisgKi8KK3N0YXRpYyB2b2lkIHBocF9wZ3NxbF9pbml0X2dsb2JhbHMocGhw
X3Bnc3FsX2dsb2JhbHMgKnBnc3FsX2dsb2JhbHNfcCkKIHsKIAlQR0cobnVtX3BlcnNpc3Rl
bnQpID0gMDsKIAlQR0coaWdub3JlX25vdGljZXMpID0gMDsKLQlQR0cobGFzdF9ub3RpY2Up
ID0gTlVMTDsKIH0KKy8qIH19fSAqLwogCisvKiB7e3sgUEhQX01JTklUX0ZVTkNUSU9OCisg
Ki8KIFBIUF9NSU5JVF9GVU5DVElPTihwZ3NxbCkKIHsKICNpZmRlZiBaVFMKLQlwZ3NxbF9n
bG9iYWxzX2lkID0gdHNfYWxsb2NhdGVfaWQoc2l6ZW9mKHBocF9wZ3NxbF9nbG9iYWxzKSwg
KHRzX2FsbG9jYXRlX2N0b3IpIHBocF9wZ3NxbF9pbml0X2dsb2JhbHMsIE5VTEwpOwordHNf
YWxsb2NhdGVfaWQoJnBnc3FsX2dsb2JhbHNfaWQsIHNpemVvZihwaHBfcGdzcWxfZ2xvYmFs
cyksICh0c19hbGxvY2F0ZV9jdG9yKSBwaHBfcGdzcWxfaW5pdF9nbG9iYWxzLCBOVUxMKTsK
ICNlbHNlCi0JcGhwX3Bnc3FsX2luaXRfZ2xvYmFscyhQR0xTX0MpOworcGhwX3Bnc3FsX2lu
aXRfZ2xvYmFscygmcGdzcWxfZ2xvYmFscyk7CiAjZW5kaWYKIAotCVJFR0lTVEVSX0lOSV9F
TlRSSUVTKCk7CitSRUdJU1RFUl9JTklfRU5UUklFUygpOwogCQogCWxlX2xpbmsgPSB6ZW5k
X3JlZ2lzdGVyX2xpc3RfZGVzdHJ1Y3RvcnNfZXgoX2Nsb3NlX3Bnc3FsX2xpbmssIE5VTEws
ICJwZ3NxbCBsaW5rIiwgbW9kdWxlX251bWJlcik7CiAJbGVfcGxpbmsgPSB6ZW5kX3JlZ2lz
dGVyX2xpc3RfZGVzdHJ1Y3RvcnNfZXgoTlVMTCwgX2Nsb3NlX3Bnc3FsX3BsaW5rLCAicGdz
cWwgbGluayBwZXJzaXN0ZW50IiwgbW9kdWxlX251bWJlcik7CiAJLyoJUEdHKGxlX3Jlc3Vs
dCA9IHJlZ2lzdGVyX2xpc3RfZGVzdHJ1Y3RvcnMoUFFjbGVhcixOVUxMKTsgKi8KLQlsZV9y
ZXN1bHQgPSB6ZW5kX3JlZ2lzdGVyX2xpc3RfZGVzdHJ1Y3RvcnNfZXgoX2ZyZWVfcmVzdWx0
LCBOVUxMLCAicGdzcWwgcmVzdWx0IiwgbW9kdWxlX251bWJlcik7CitsZV9yZXN1bHQgPSB6
ZW5kX3JlZ2lzdGVyX2xpc3RfZGVzdHJ1Y3RvcnNfZXgoX2ZyZWVfcmVzdWx0LCBOVUxMLCAi
cGdzcWwgcmVzdWx0IiwgbW9kdWxlX251bWJlcik7CiAJbGVfbG9mcCA9IHplbmRfcmVnaXN0
ZXJfbGlzdF9kZXN0cnVjdG9yc19leChfZnJlZV9wdHIsIE5VTEwsICJwZ3NxbCBsYXJnZSBv
YmplY3QiLCBtb2R1bGVfbnVtYmVyKTsKIAlsZV9zdHJpbmcgPSB6ZW5kX3JlZ2lzdGVyX2xp
c3RfZGVzdHJ1Y3RvcnNfZXgoX2ZyZWVfcHRyLCBOVUxMLCAicGdzcWwgc3RyaW5nIiwgbW9k
dWxlX251bWJlcik7CiAKQEAgLTIzOSwzNyArMjU4LDQ1IEBACiAKIAlyZXR1cm4gU1VDQ0VT
UzsKIH0KKy8qIH19fSAqLwogCi0KKy8qIHt7eyBQSFBfTVNIVVRET1dOX0ZVTkNUSU9OCisg
Ki8KIFBIUF9NU0hVVERPV05fRlVOQ1RJT04ocGdzcWwpCiB7CiAJVU5SRUdJU1RFUl9JTklf
RU5UUklFUygpOwogCXJldHVybiBTVUNDRVNTOwogfQorLyogfX19ICovCiAKLQorLyoge3t7
IFBIUF9SSU5JVF9GVU5DVElPTgorICovCiBQSFBfUklOSVRfRlVOQ1RJT04ocGdzcWwpCiB7
Ci0JUEdMU19GRVRDSCgpOwotCiAJUEdHKGRlZmF1bHRfbGluayk9LTE7CiAJUEdHKG51bV9s
aW5rcykgPSBQR0cobnVtX3BlcnNpc3RlbnQpOworCVBHRyhsYXN0X25vdGljZSkgPSBOVUxM
OwogCXJldHVybiBTVUNDRVNTOwogfQorLyogfX19ICovCiAKKy8qIHt7eyBQSFBfUlNIVVRE
T1dOX0ZVTkNUSU9OCisgKi8KIFBIUF9SU0hVVERPV05fRlVOQ1RJT04ocGdzcWwpCiB7Ci0J
RUxTX0ZFVENIKCk7CisJaWYgKFBHRyhsYXN0X25vdGljZSkpIHsKKwkJZWZyZWUoUEdHKGxh
c3Rfbm90aWNlKSk7CisJfQogCXplbmRfaGFzaF9hcHBseSgmRUcocGVyc2lzdGVudF9saXN0
KSwgKGFwcGx5X2Z1bmNfdCkgX3JvbGxiYWNrX3RyYW5zYWN0aW9ucyk7CiAJcmV0dXJuIFNV
Q0NFU1M7CiB9CisvKiB9fX0gKi8KIAotCi0KKy8qIHt7eyBQSFBfTUlORk9fRlVOQ1RJT04K
KyAqLwogUEhQX01JTkZPX0ZVTkNUSU9OKHBnc3FsKQogewogCWNoYXIgYnVmWzMyXTsKLQlQ
R0xTX0ZFVENIKCk7CiAKIAlwaHBfaW5mb19wcmludF90YWJsZV9zdGFydCgpOwogCXBocF9p
bmZvX3ByaW50X3RhYmxlX2hlYWRlcigyLCAiUG9zdGdyZVNRTCBTdXBwb3J0IiwgImVuYWJs
ZWQiKTsKQEAgLTI4MiwxOSArMzA5LDIxIEBACiAJRElTUExBWV9JTklfRU5UUklFUygpOwog
CiB9CisvKiB9fX0gKi8KIAogCisvKiB7e3sgcGhwX3Bnc3FsX2RvX2Nvbm5lY3QKKyAqLwog
dm9pZCBwaHBfcGdzcWxfZG9fY29ubmVjdChJTlRFUk5BTF9GVU5DVElPTl9QQVJBTUVURVJT
LGludCBwZXJzaXN0ZW50KQogewogCWNoYXIgKmhvc3Q9TlVMTCwqcG9ydD1OVUxMLCpvcHRp
b25zPU5VTEwsKnR0eT1OVUxMLCpkYm5hbWU9TlVMTCwqY29ubnN0cmluZz1OVUxMOwogCWNo
YXIgKmhhc2hlZF9kZXRhaWxzOwogCWludCBoYXNoZWRfZGV0YWlsc19sZW5ndGg7CiAJUEdj
b25uICpwZ3NxbDsKLQlQR0xTX0ZFVENIKCk7CiAJCiAJc3dpdGNoKFpFTkRfTlVNX0FSR1Mo
KSkgewogCQljYXNlIDE6IHsgLyogbmV3IHN0eWxlLCB1c2luZyBjb25uZWN0aW9uIHN0cmlu
ZyAqLwotCQkJCXp2YWwgKip5eWNvbm5zdHJpbmc7Cit6dmFsICoqeXljb25uc3RyaW5nOwog
CQkJCWlmICh6ZW5kX2dldF9wYXJhbWV0ZXJzX2V4KDEsICZ5eWNvbm5zdHJpbmcpID09IEZB
SUxVUkUpIHsKIAkJCQkJUkVUVVJOX0ZBTFNFOwogCQkJCX0KQEAgLTMwMywxMCArMzMyLDEw
IEBACiAJCQkJaGFzaGVkX2RldGFpbHNfbGVuZ3RoID0gWl9TVFJMRU5fUFAoeXljb25uc3Ry
aW5nKSs1KzE7CiAJCQkJaGFzaGVkX2RldGFpbHMgPSAoY2hhciAqKSBlbWFsbG9jKGhhc2hl
ZF9kZXRhaWxzX2xlbmd0aCsxKTsKIAkJCQlzcHJpbnRmKGhhc2hlZF9kZXRhaWxzLCAicGdz
cWxfJXMiLCBjb25uc3RyaW5nKTsgLyogU0FGRSAqLwotCQkJfQorfQogCQkJYnJlYWs7CiAJ
CWNhc2UgMzogeyAvKiBob3N0LCBwb3J0LCBkYm5hbWUgKi8KLQkJCQl6dmFsICoqeXlob3N0
LCAqKnl5cG9ydCwgKip5eWRibmFtZTsKK3p2YWwgKip5eWhvc3QsICoqeXlwb3J0LCAqKnl5
ZGJuYW1lOwogCQkJCQogCQkJCWlmICh6ZW5kX2dldF9wYXJhbWV0ZXJzX2V4KDMsICZ5eWhv
c3QsICZ5eXBvcnQsICZ5eWRibmFtZSkgPT0gRkFJTFVSRSkgewogCQkJCQlSRVRVUk5fRkFM
U0U7CkBAIC0zMjEsMTAgKzM1MCwxMCBAQAogCQkJCWhhc2hlZF9kZXRhaWxzX2xlbmd0aCA9
IFpfU1RSTEVOX1BQKHl5aG9zdCkgKyBaX1NUUkxFTl9QUCh5eXBvcnQpICsgWl9TVFJMRU5f
UFAoeXlkYm5hbWUpICsgNSArIDU7CiAJCQkJaGFzaGVkX2RldGFpbHMgPSAoY2hhciAqKSBl
bWFsbG9jKGhhc2hlZF9kZXRhaWxzX2xlbmd0aCsxKTsKIAkJCQlzcHJpbnRmKGhhc2hlZF9k
ZXRhaWxzLCAicGdzcWxfJXNfJXNfX18lcyIsIGhvc3QsIHBvcnQsIGRibmFtZSk7ICAvKiBT
QUZFICovCi0JCQl9Cit9CiAJCQlicmVhazsKIAkJY2FzZSA0OiB7IC8qIGhvc3QsIHBvcnQs
IG9wdGlvbnMsIGRibmFtZSAqLwotCQkJCXp2YWwgKip5eWhvc3QsICoqeXlwb3J0LCAqKnl5
b3B0aW9ucywgKip5eWRibmFtZTsKK3p2YWwgKip5eWhvc3QsICoqeXlwb3J0LCAqKnl5b3B0
aW9ucywgKip5eWRibmFtZTsKIAkJCQkKIAkJCQlpZiAoemVuZF9nZXRfcGFyYW1ldGVyc19l
eCg0LCAmeXlob3N0LCAmeXlwb3J0LCAmeXlvcHRpb25zLCAmeXlkYm5hbWUpID09IEZBSUxV
UkUpIHsKIAkJCQkJUkVUVVJOX0ZBTFNFOwpAQCAtMzQxLDEwICszNzAsMTAgQEAKIAkJCQlo
YXNoZWRfZGV0YWlsc19sZW5ndGggPSBaX1NUUkxFTl9QUCh5eWhvc3QpICsgWl9TVFJMRU5f
UFAoeXlwb3J0KSArIFpfU1RSTEVOX1BQKHl5b3B0aW9ucykgKyBaX1NUUkxFTl9QUCh5eWRi
bmFtZSkgKyA1ICsgNTsKIAkJCQloYXNoZWRfZGV0YWlscyA9IChjaGFyICopIGVtYWxsb2Mo
aGFzaGVkX2RldGFpbHNfbGVuZ3RoKzEpOwogCQkJCXNwcmludGYoaGFzaGVkX2RldGFpbHMs
ICJwZ3NxbF8lc18lc18lc19fJXMiLCBob3N0LCBwb3J0LCBvcHRpb25zLCBkYm5hbWUpOyAg
LyogU0FGRSAqLwotCQkJfQorfQogCQkJYnJlYWs7CiAJCWNhc2UgNTogeyAvKiBob3N0LCBw
b3J0LCBvcHRpb25zLCB0dHksIGRibmFtZSAqLwotCQkJCXp2YWwgKip5eWhvc3QsICoqeXlw
b3J0LCAqKnl5b3B0aW9ucywgKip5eXR0eSwgKip5eWRibmFtZTsKK3p2YWwgKip5eWhvc3Qs
ICoqeXlwb3J0LCAqKnl5b3B0aW9ucywgKip5eXR0eSwgKip5eWRibmFtZTsKIAkJCQkKIAkJ
CQlpZiAoemVuZF9nZXRfcGFyYW1ldGVyc19leCg1LCAmeXlob3N0LCAmeXlwb3J0LCAmeXlv
cHRpb25zLCAmeXl0dHksICZ5eWRibmFtZSkgPT0gRkFJTFVSRSkgewogCQkJCQlSRVRVUk5f
RkFMU0U7CkBAIC0zNjIsMTkgKzM5MSwxOSBAQAogCQkJCWhhc2hlZF9kZXRhaWxzX2xlbmd0
aCA9IFpfU1RSTEVOX1BQKHl5aG9zdCkgKyBaX1NUUkxFTl9QUCh5eXBvcnQpICsgWl9TVFJM
RU5fUFAoeXlvcHRpb25zKSArIFpfU1RSTEVOX1BQKHl5dHR5KSArIFpfU1RSTEVOX1BQKHl5
ZGJuYW1lKSArIDUgKyA1OwogCQkJCWhhc2hlZF9kZXRhaWxzID0gKGNoYXIgKikgZW1hbGxv
YyhoYXNoZWRfZGV0YWlsc19sZW5ndGgrMSk7CiAJCQkJc3ByaW50ZihoYXNoZWRfZGV0YWls
cywgInBnc3FsXyVzXyVzXyVzXyVzXyVzIiwgaG9zdCwgcG9ydCwgb3B0aW9ucywgdHR5LCBk
Ym5hbWUpOyAgLyogU0FGRSAqLwotCQkJfQorfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJ
CQlXUk9OR19QQVJBTV9DT1VOVDsKIAkJCWJyZWFrOwogCX0KIAkKLQlpZiAocGVyc2lzdGVu
dCkgeworCWlmIChwZXJzaXN0ZW50ICYmIFBHRyhhbGxvd19wZXJzaXN0ZW50KSkgewogCQls
aXN0X2VudHJ5ICpsZTsKIAkJCiAJCS8qIHRyeSB0byBmaW5kIGlmIHdlIGFscmVhZHkgaGF2
ZSB0aGlzIGxpbmsgaW4gb3VyIHBlcnNpc3RlbnQgbGlzdCAqLwotCQlpZiAoemVuZF9oYXNo
X2ZpbmQoJkVHKHBlcnNpc3RlbnRfbGlzdCksIGhhc2hlZF9kZXRhaWxzLCBoYXNoZWRfZGV0
YWlsc19sZW5ndGgrMSwgKHZvaWQgKiopICZsZSk9PUZBSUxVUkUpIHsgIC8qIHdlIGRvbid0
ICovCi0JCQlsaXN0X2VudHJ5IG5ld19sZTsKK2lmICh6ZW5kX2hhc2hfZmluZCgmRUcocGVy
c2lzdGVudF9saXN0KSwgaGFzaGVkX2RldGFpbHMsIGhhc2hlZF9kZXRhaWxzX2xlbmd0aCsx
LCAodm9pZCAqKikgJmxlKT09RkFJTFVSRSkgeyAgLyogd2UgZG9uJ3QgKi8KK2xpc3RfZW50
cnkgbmV3X2xlOwogCQkJCiAJCQlpZiAoUEdHKG1heF9saW5rcykhPS0xICYmIFBHRyhudW1f
bGlua3MpPj1QR0cobWF4X2xpbmtzKSkgewogCQkJCXBocF9lcnJvcihFX1dBUk5JTkcsIlBv
c3RncmVTUUw6ICBUb28gbWFueSBvcGVuIGxpbmtzICglZCkiLFBHRyhudW1fbGlua3MpKTsK
QEAgLTM4OCwxNiArNDE3LDE2IEBACiAJCQl9CiAKIAkJCS8qIGNyZWF0ZSB0aGUgbGluayAq
LwotCQkJaWYgKGNvbm5zdHJpbmcpIHsKK2lmIChjb25uc3RyaW5nKSB7CiAJCQkJcGdzcWw9
UFFjb25uZWN0ZGIoY29ubnN0cmluZyk7CiAJCQl9IGVsc2UgewogCQkJCXBnc3FsPVBRc2V0
ZGIoaG9zdCxwb3J0LG9wdGlvbnMsdHR5LGRibmFtZSk7CiAJCQl9CiAJCQlpZiAocGdzcWw9
PU5VTEwgfHwgUFFzdGF0dXMocGdzcWwpPT1DT05ORUNUSU9OX0JBRCkgeworCQkJCXBocF9l
cnJvcihFX1dBUk5JTkcsIlVuYWJsZSB0byBjb25uZWN0IHRvIFBvc3RncmVTUUwgc2VydmVy
OiAgJXMiLFBRZXJyb3JNZXNzYWdlKHBnc3FsKSk7CiAJCQkJaWYgKHBnc3FsKSB7CiAJCQkJ
CVBRZmluaXNoKHBnc3FsKTsKIAkJCQl9Ci0JCQkJcGhwX2Vycm9yKEVfV0FSTklORywiVW5h
YmxlIHRvIGNvbm5lY3QgdG8gUG9zdGdyZVNRTCBzZXJ2ZXI6ICAlcyIsUFFlcnJvck1lc3Nh
Z2UocGdzcWwpKTsKIAkJCQllZnJlZShoYXNoZWRfZGV0YWlscyk7CiAJCQkJUkVUVVJOX0ZB
TFNFOwogCQkJfQpAQCAtNDA1LDcgKzQzNCw3IEBACiAgCQkJUFFzZXROb3RpY2VQcm9jZXNz
b3IocGdzcWwsIF9ub3RpY2VfaGFuZGxlciwgTlVMTCk7CiAKIAkJCS8qIGhhc2ggaXQgdXAg
Ki8KLQkJCW5ld19sZS50eXBlID0gbGVfcGxpbms7CitaX1RZUEUobmV3X2xlKSA9IGxlX3Bs
aW5rOwogCQkJbmV3X2xlLnB0ciA9IHBnc3FsOwogCQkJaWYgKHplbmRfaGFzaF91cGRhdGUo
JkVHKHBlcnNpc3RlbnRfbGlzdCksIGhhc2hlZF9kZXRhaWxzLCBoYXNoZWRfZGV0YWlsc19s
ZW5ndGgrMSwgKHZvaWQgKikgJm5ld19sZSwgc2l6ZW9mKGxpc3RfZW50cnkpLCBOVUxMKT09
RkFJTFVSRSkgewogCQkJCWVmcmVlKGhhc2hlZF9kZXRhaWxzKTsKQEAgLTQxNCwxMiArNDQz
LDEyIEBACiAJCQlQR0cobnVtX2xpbmtzKSsrOwogCQkJUEdHKG51bV9wZXJzaXN0ZW50KSsr
OwogCQl9IGVsc2UgeyAgLyogd2UgZG8gKi8KLQkJCWlmIChsZS0+dHlwZSAhPSBsZV9wbGlu
aykgeworaWYgKFpfVFlQRV9QKGxlKSAhPSBsZV9wbGluaykgewogCQkJCVJFVFVSTl9GQUxT
RTsKIAkJCX0KIAkJCS8qIGVuc3VyZSB0aGF0IHRoZSBsaW5rIGRpZCBub3QgZGllICovCi0J
CQlpZiAoUFFzdGF0dXMobGUtPnB0cik9PUNPTk5FQ1RJT05fQkFEKSB7IC8qIHRoZSBsaW5r
IGRpZWQgKi8KLQkJCQlpZiAoY29ubnN0cmluZykgeworaWYgKFBRc3RhdHVzKGxlLT5wdHIp
PT1DT05ORUNUSU9OX0JBRCkgeyAvKiB0aGUgbGluayBkaWVkICovCitpZiAoY29ubnN0cmlu
ZykgewogCQkJCQlsZS0+cHRyPVBRY29ubmVjdGRiKGNvbm5zdHJpbmcpOwogCQkJCX0gZWxz
ZSB7CiAJCQkJCWxlLT5wdHI9UFFzZXRkYihob3N0LHBvcnQsb3B0aW9ucyx0dHksZGJuYW1l
KTsKQEAgLTQ0NCwyMCArNDczLDIwIEBACiAJCSAqIGlmIGl0IGRvZXNuJ3QsIG9wZW4gYSBu
ZXcgcGdzcWwgbGluaywgYWRkIGl0IHRvIHRoZSByZXNvdXJjZSBsaXN0LAogCQkgKiBhbmQg
YWRkIGEgcG9pbnRlciB0byBpdCB3aXRoIGhhc2hlZF9kZXRhaWxzIGFzIHRoZSBrZXkuCiAJ
CSAqLwotCQlpZiAoemVuZF9oYXNoX2ZpbmQoJkVHKHJlZ3VsYXJfbGlzdCksaGFzaGVkX2Rl
dGFpbHMsaGFzaGVkX2RldGFpbHNfbGVuZ3RoKzEsKHZvaWQgKiopICZpbmRleF9wdHIpPT1T
VUNDRVNTKSB7CitpZiAoemVuZF9oYXNoX2ZpbmQoJkVHKHJlZ3VsYXJfbGlzdCksaGFzaGVk
X2RldGFpbHMsaGFzaGVkX2RldGFpbHNfbGVuZ3RoKzEsKHZvaWQgKiopICZpbmRleF9wdHIp
PT1TVUNDRVNTKSB7CiAJCQlpbnQgdHlwZSxsaW5rOwogCQkJdm9pZCAqcHRyOwogCi0JCQlp
ZiAoaW5kZXhfcHRyLT50eXBlICE9IGxlX2luZGV4X3B0cikgeworCQkJaWYgKFpfVFlQRV9Q
KGluZGV4X3B0cikgIT0gbGVfaW5kZXhfcHRyKSB7CiAJCQkJUkVUVVJOX0ZBTFNFOwogCQkJ
fQogCQkJbGluayA9IChpbnQpIChsb25nKSBpbmRleF9wdHItPnB0cjsKIAkJCXB0ciA9IHpl
bmRfbGlzdF9maW5kKGxpbmssJnR5cGUpOyAgIC8qIGNoZWNrIGlmIHRoZSBsaW5rIGlzIHN0
aWxsIHRoZXJlICovCi0JCQlpZiAocHRyICYmICh0eXBlPT1sZV9saW5rIHx8IHR5cGU9PWxl
X3BsaW5rKSkgewotCQkJCXJldHVybl92YWx1ZS0+dmFsdWUubHZhbCA9IGxpbms7CitpZiAo
cHRyICYmICh0eXBlPT1sZV9saW5rIHx8IHR5cGU9PWxlX3BsaW5rKSkgeworCQkJCVpfTFZB
TF9QKHJldHVybl92YWx1ZSkgPSBsaW5rOwogCQkJCXplbmRfbGlzdF9hZGRyZWYobGluayk7
CiAJCQkJcGhwX3Bnc3FsX3NldF9kZWZhdWx0X2xpbmsobGluayk7Ci0JCQkJcmV0dXJuX3Zh
bHVlLT50eXBlID0gSVNfUkVTT1VSQ0U7CisJCQkJWl9UWVBFX1AocmV0dXJuX3ZhbHVlKSA9
IElTX1JFU09VUkNFOwogCQkJCWVmcmVlKGhhc2hlZF9kZXRhaWxzKTsKIAkJCQlyZXR1cm47
CiAJCQl9IGVsc2UgewpAQCAtNDgzLDExICs1MTIsMTEgQEAKIAkJUFFzZXROb3RpY2VQcm9j
ZXNzb3IocGdzcWwsIF9ub3RpY2VfaGFuZGxlciwgTlVMTCk7CiAKIAkJLyogYWRkIGl0IHRv
IHRoZSBsaXN0ICovCi0JCVpFTkRfUkVHSVNURVJfUkVTT1VSQ0UocmV0dXJuX3ZhbHVlLCBw
Z3NxbCwgbGVfbGluayk7CitaRU5EX1JFR0lTVEVSX1JFU09VUkNFKHJldHVybl92YWx1ZSwg
cGdzcWwsIGxlX2xpbmspOwogCiAJCS8qIGFkZCBpdCB0byB0aGUgaGFzaCAqLwotCQluZXdf
aW5kZXhfcHRyLnB0ciA9ICh2b2lkICopIHJldHVybl92YWx1ZS0+dmFsdWUubHZhbDsKLQkJ
bmV3X2luZGV4X3B0ci50eXBlID0gbGVfaW5kZXhfcHRyOworbmV3X2luZGV4X3B0ci5wdHIg
PSAodm9pZCAqKSBaX0xWQUxfUChyZXR1cm5fdmFsdWUpOworCQlaX1RZUEUobmV3X2luZGV4
X3B0cikgPSBsZV9pbmRleF9wdHI7CiAJCWlmICh6ZW5kX2hhc2hfdXBkYXRlKCZFRyhyZWd1
bGFyX2xpc3QpLGhhc2hlZF9kZXRhaWxzLGhhc2hlZF9kZXRhaWxzX2xlbmd0aCsxLCh2b2lk
ICopICZuZXdfaW5kZXhfcHRyLCBzaXplb2YobGlzdF9lbnRyeSksIE5VTEwpPT1GQUlMVVJF
KSB7CiAJCQllZnJlZShoYXNoZWRfZGV0YWlscyk7CiAJCQlSRVRVUk5fRkFMU0U7CkBAIC00
OTUsMjEgKzUyNCwyMSBAQAogCQlQR0cobnVtX2xpbmtzKSsrOwogCX0KIAllZnJlZShoYXNo
ZWRfZGV0YWlscyk7Ci0JcGhwX3Bnc3FsX3NldF9kZWZhdWx0X2xpbmsocmV0dXJuX3ZhbHVl
LT52YWx1ZS5sdmFsKTsKKwlwaHBfcGdzcWxfc2V0X2RlZmF1bHRfbGluayhaX0xWQUxfUChy
ZXR1cm5fdmFsdWUpKTsKIH0KKy8qIH19fSAqLwogCi0KKy8qIHt7eyBwaHBfcGdzcWxfZ2V0
X2RlZmF1bHRfbGluaworICovCiBpbnQgcGhwX3Bnc3FsX2dldF9kZWZhdWx0X2xpbmsoSU5U
RVJOQUxfRlVOQ1RJT05fUEFSQU1FVEVSUykKIHsKLQlQR0xTX0ZFVENIKCk7Ci0KIAlpZiAo
UEdHKGRlZmF1bHRfbGluayk9PS0xKSB7IC8qIG5vIGxpbmsgb3BlbmVkIHlldCwgaW1wbGlj
aXRseSBvcGVuIG9uZSAqLwotCQlodCA9IDA7CitodCA9IDA7CiAJCXBocF9wZ3NxbF9kb19j
b25uZWN0KElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNX1BBU1NUSFJVLDApOwogCX0KIAlyZXR1
cm4gUEdHKGRlZmF1bHRfbGluayk7CiB9Ci0KKy8qIH19fSAqLwogCiAvKiB7e3sgcHJvdG8g
aW50IHBnX2Nvbm5lY3QoW3N0cmluZyBjb25uZWN0aW9uX3N0cmluZ10gfCBbc3RyaW5nIGhv
c3QsIHN0cmluZyBwb3J0IFssIHN0cmluZyBvcHRpb25zIFssIHN0cmluZyB0dHksXV0gc3Ry
aW5nIGRhdGFiYXNlKQogICAgT3BlbiBhIFBvc3RncmVTUUwgY29ubmVjdGlvbiAqLwpAQCAt
NTI4LDEzICs1NTcsMTEgQEAKIC8qIH19fSAqLwogCiAvKiB7e3sgcHJvdG8gYm9vbCBwZ19j
bG9zZShbaW50IGNvbm5lY3Rpb25dKQotICAgQ2xvc2UgYSBQb3N0Z3JlU1FMIGNvbm5lY3Rp
b24gKi8gCi1QSFBfRlVOQ1RJT04ocGdfY2xvc2UpCisgICBDbG9zZSBhIFBvc3RncmVTUUwg
Y29ubmVjdGlvbiAqLyBQSFBfRlVOQ1RJT04ocGdfY2xvc2UpCiB7CiAJenZhbCAqKnBnc3Fs
X2xpbmsgPSBOVUxMOwogCWludCBpZDsKIAlQR2Nvbm4gKnBnc3FsOwotCVBHTFNfRkVUQ0go
KTsKIAkKIAlzd2l0Y2ggKFpFTkRfTlVNX0FSR1MoKSkgewogCQljYXNlIDA6CkBAIC01NTUs
NyArNTgyLDcgQEAKIAlaRU5EX0ZFVENIX1JFU09VUkNFMihwZ3NxbCwgUEdjb25uICosIHBn
c3FsX2xpbmssIGlkLCAiUG9zdGdyZVNRTCBsaW5rIiwgbGVfbGluaywgbGVfcGxpbmspOwog
CiAJaWYgKGlkPT0tMSkgeyAvKiBleHBsaWNpdCByZXNvdXJjZSBudW1iZXIgKi8KLQkJemVu
ZF9saXN0X2RlbGV0ZShaX1JFU1ZBTF9QUChwZ3NxbF9saW5rKSk7Cit6ZW5kX2xpc3RfZGVs
ZXRlKFpfUkVTVkFMX1BQKHBnc3FsX2xpbmspKTsKIAl9CiAKIAlpZiAoaWQhPS0xIApAQCAt
NTc2LDEyICs2MDMsMTMgQEAKICNkZWZpbmUgUEhQX1BHX1RUWSA1CiAjZGVmaW5lIFBIUF9Q
R19IT1NUIDYKIAorLyoge3t7IHBocF9wZ3NxbF9nZXRfbGlua19pbmZvCisgKi8KIHZvaWQg
cGhwX3Bnc3FsX2dldF9saW5rX2luZm8oSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1FVEVSUywg
aW50IGVudHJ5X3R5cGUpCiB7CiAJenZhbCAqKnBnc3FsX2xpbmsgPSBOVUxMOwogCWludCBp
ZCA9IC0xOwogCVBHY29ubiAqcGdzcWw7Ci0JUEdMU19GRVRDSCgpOwogCiAJc3dpdGNoKFpF
TkRfTlVNX0FSR1MoKSkgewogCQljYXNlIDA6CkBAIC02MDIsMzQgKzYzMCwzNCBAQAogCiAJ
c3dpdGNoKGVudHJ5X3R5cGUpIHsKIAkJY2FzZSBQSFBfUEdfREJOQU1FOgotCQkJcmV0dXJu
X3ZhbHVlLT52YWx1ZS5zdHIudmFsID0gUFFkYihwZ3NxbCk7CisJCQlaX1NUUlZBTF9QKHJl
dHVybl92YWx1ZSkgPSBQUWRiKHBnc3FsKTsKIAkJCWJyZWFrOwogCQljYXNlIFBIUF9QR19F
UlJPUl9NRVNTQUdFOgotCQkJcmV0dXJuX3ZhbHVlLT52YWx1ZS5zdHIudmFsID0gUFFlcnJv
ck1lc3NhZ2UocGdzcWwpOworCQkJWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpID0gUFFlcnJv
ck1lc3NhZ2UocGdzcWwpOwogCQkJYnJlYWs7CiAJCWNhc2UgUEhQX1BHX09QVElPTlM6Ci0J
CQlyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwgPSBQUW9wdGlvbnMocGdzcWwpOworCQkJ
Wl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpID0gUFFvcHRpb25zKHBnc3FsKTsKIAkJCWJyZWFr
OwogCQljYXNlIFBIUF9QR19QT1JUOgotCQkJcmV0dXJuX3ZhbHVlLT52YWx1ZS5zdHIudmFs
ID0gUFFwb3J0KHBnc3FsKTsKKwkJCVpfU1RSVkFMX1AocmV0dXJuX3ZhbHVlKSA9IFBRcG9y
dChwZ3NxbCk7CiAJCQlicmVhazsKIAkJY2FzZSBQSFBfUEdfVFRZOgotCQkJcmV0dXJuX3Zh
bHVlLT52YWx1ZS5zdHIudmFsID0gUFF0dHkocGdzcWwpOworCQkJWl9TVFJWQUxfUChyZXR1
cm5fdmFsdWUpID0gUFF0dHkocGdzcWwpOwogCQkJYnJlYWs7CiAJCWNhc2UgUEhQX1BHX0hP
U1Q6Ci0JCQlyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwgPSBQUWhvc3QocGdzcWwpOwor
CQkJWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpID0gUFFob3N0KHBnc3FsKTsKIAkJCWJyZWFr
OwogCQlkZWZhdWx0OgogCQkJUkVUVVJOX0ZBTFNFOwogCX0KLQlyZXR1cm5fdmFsdWUtPnZh
bHVlLnN0ci5sZW4gPSBzdHJsZW4ocmV0dXJuX3ZhbHVlLT52YWx1ZS5zdHIudmFsKTsKLQly
ZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwgPSAoY2hhciAqKSBlc3RyZHVwKHJldHVybl92
YWx1ZS0+dmFsdWUuc3RyLnZhbCk7Ci0JcmV0dXJuX3ZhbHVlLT50eXBlID0gSVNfU1RSSU5H
OworCVpfU1RSTEVOX1AocmV0dXJuX3ZhbHVlKSA9IHN0cmxlbihaX1NUUlZBTF9QKHJldHVy
bl92YWx1ZSkpOworCVpfU1RSVkFMX1AocmV0dXJuX3ZhbHVlKSA9IChjaGFyICopIGVzdHJk
dXAoWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpKTsKKwlaX1RZUEVfUChyZXR1cm5fdmFsdWUp
ID0gSVNfU1RSSU5HOwogfQorLyogfX19ICovCiAKIC8qIHt7eyBwcm90byBzdHJpbmcgcGdf
ZGJuYW1lKFtpbnQgY29ubmVjdGlvbl0pCi0gICBHZXQgdGhlIGRhdGFiYXNlIG5hbWUgKi8g
Ci1QSFBfRlVOQ1RJT04ocGdfZGJuYW1lKQorICAgR2V0IHRoZSBkYXRhYmFzZSBuYW1lICov
IFBIUF9GVU5DVElPTihwZ19kYm5hbWUpCiB7CiAJcGhwX3Bnc3FsX2dldF9saW5rX2luZm8o
SU5URVJOQUxfRlVOQ1RJT05fUEFSQU1fUEFTU1RIUlUsUEhQX1BHX0RCTkFNRSk7CiB9CkBA
IC02ODUsNyArNzEzLDYgQEAKIAlQR3Jlc3VsdCAqcGdzcWxfcmVzdWx0OwogCUV4ZWNTdGF0
dXNUeXBlIHN0YXR1czsKIAlwZ3NxbF9yZXN1bHRfaGFuZGxlICpwZ19yZXN1bHQ7Ci0JUEdM
U19GRVRDSCgpOwogCiAJc3dpdGNoKFpFTkRfTlVNX0FSR1MoKSkgewogCQljYXNlIDE6CkBA
IC03MjYsMjMgKzc1MywyNSBAQAogCQkJUkVUVVJOX0ZBTFNFOwogCQkJYnJlYWs7CiAJCWNh
c2UgUEdSRVNfQ09NTUFORF9PSzogLyogc3VjY2Vzc2Z1bCBjb21tYW5kIHRoYXQgZGlkIG5v
dCByZXR1cm4gcm93cyAqLwotCQlkZWZhdWx0OgorZGVmYXVsdDoKIAkJCWlmIChwZ3NxbF9y
ZXN1bHQpIHsKIAkJCQlwZ19yZXN1bHQgPSAocGdzcWxfcmVzdWx0X2hhbmRsZSAqKSBlbWFs
bG9jKHNpemVvZihwZ3NxbF9yZXN1bHRfaGFuZGxlKSk7CiAJCQkJcGdfcmVzdWx0LT5jb25u
ID0gcGdzcWw7CiAJCQkJcGdfcmVzdWx0LT5yZXN1bHQgPSBwZ3NxbF9yZXN1bHQ7CisJCQkJ
cGdfcmVzdWx0LT5yb3cgPSAtMTsKIAkJCQlaRU5EX1JFR0lTVEVSX1JFU09VUkNFKHJldHVy
bl92YWx1ZSwgcGdfcmVzdWx0LCBsZV9yZXN1bHQpOwogCQkJCS8qCi0JCQkJcmV0dXJuX3Zh
bHVlLT52YWx1ZS5sdmFsID0gemVuZF9saXN0X2luc2VydChwZ19yZXN1bHQsbGVfcmVzdWx0
KTsKLQkJCQlyZXR1cm5fdmFsdWUtPnR5cGUgPSBJU19MT05HOworCQkJCVpfTFZBTF9QKHJl
dHVybl92YWx1ZSkgPSB6ZW5kX2xpc3RfaW5zZXJ0KHBnX3Jlc3VsdCxsZV9yZXN1bHQpOwor
CQkJCVpfVFlQRV9QKHJldHVybl92YWx1ZSkgPSBJU19MT05HOwogCQkJCSovCi0JCQl9IGVs
c2UgeworfSBlbHNlIHsKIAkJCQlSRVRVUk5fRkFMU0U7CiAJCQl9CiAJCQlicmVhazsKIAl9
CiB9CiAvKiB9fX0gKi8KKwogLyoge3t7IHByb3RvIGludCBwZ19lbmRfY29weShbaW50IGNv
bm5lY3Rpb25dKQogICAgU3luYyB3aXRoIGJhY2tlbmQuIENvbXBsZXRlcyB0aGUgQ29weSBj
b21tYW5kICovCiBQSFBfRlVOQ1RJT04ocGdfZW5kX2NvcHkpCkBAIC03NTEsNyArNzgwLDYg
QEAKIAlpbnQgaWQgPSAtMTsKIAlQR2Nvbm4gKnBnc3FsOwogCWludCByZXN1bHQgPSAwOwot
CVBHTFNfRkVUQ0goKTsKIAogCXN3aXRjaChaRU5EX05VTV9BUkdTKCkpIHsKIAkJY2FzZSAw
OgpAQCAtNzg4LDcgKzgxNiw2IEBACiAJaW50IGlkID0gLTE7CiAJUEdjb25uICpwZ3NxbDsK
IAlpbnQgcmVzdWx0ID0gMDsKLQlQR0xTX0ZFVENIKCk7CiAKIAlzd2l0Y2goWkVORF9OVU1f
QVJHUygpKSB7CiAJCWNhc2UgMToKQEAgLTgyNCw2ICs4NTEsOCBAQAogI2RlZmluZSBQSFBf
UEdfTlVNX0ZJRUxEUyAyCiAjZGVmaW5lIFBIUF9QR19DTURfVFVQTEVTIDMKIAorLyoge3t7
IHBocF9wZ3NxbF9nZXRfcmVzdWx0X2luZm8KKyAqLwogdm9pZCBwaHBfcGdzcWxfZ2V0X3Jl
c3VsdF9pbmZvKElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNRVRFUlMsIGludCBlbnRyeV90eXBl
KQogewogCXp2YWwgKipyZXN1bHQ7CkBAIC04NDAsMjQgKzg2OSwyNSBAQAogCQogCXN3aXRj
aCAoZW50cnlfdHlwZSkgewogCQljYXNlIFBIUF9QR19OVU1fUk9XUzoKLQkJCXJldHVybl92
YWx1ZS0+dmFsdWUubHZhbCA9IFBRbnR1cGxlcyhwZ3NxbF9yZXN1bHQpOworCQkJWl9MVkFM
X1AocmV0dXJuX3ZhbHVlKSA9IFBRbnR1cGxlcyhwZ3NxbF9yZXN1bHQpOwogCQkJYnJlYWs7
CiAJCWNhc2UgUEhQX1BHX05VTV9GSUVMRFM6Ci0JCQlyZXR1cm5fdmFsdWUtPnZhbHVlLmx2
YWwgPSBQUW5maWVsZHMocGdzcWxfcmVzdWx0KTsKKwkJCVpfTFZBTF9QKHJldHVybl92YWx1
ZSkgPSBQUW5maWVsZHMocGdzcWxfcmVzdWx0KTsKIAkJCWJyZWFrOwogCQljYXNlIFBIUF9Q
R19DTURfVFVQTEVTOgogI2lmIEhBVkVfUFFDTURUVVBMRVMKLQkJCXJldHVybl92YWx1ZS0+
dmFsdWUubHZhbCA9IGF0b2koUFFjbWRUdXBsZXMocGdzcWxfcmVzdWx0KSk7CitaX0xWQUxf
UChyZXR1cm5fdmFsdWUpID0gYXRvaShQUWNtZFR1cGxlcyhwZ3NxbF9yZXN1bHQpKTsKICNl
bHNlCi0JCQlwaHBfZXJyb3IoRV9XQVJOSU5HLCJUaGlzIGNvbXBpbGF0aW9uIGRvZXMgbm90
IHN1cHBvcnQgcGdfY21kdHVwbGVzKCkiKTsKLQkJCXJldHVybl92YWx1ZS0+dmFsdWUubHZh
bCA9IDA7CitwaHBfZXJyb3IoRV9XQVJOSU5HLCJUaGlzIGNvbXBpbGF0aW9uIGRvZXMgbm90
IHN1cHBvcnQgcGdfY21kdHVwbGVzKCkiKTsKKwkJCVpfTFZBTF9QKHJldHVybl92YWx1ZSkg
PSAwOwogI2VuZGlmCi0JCQlicmVhazsKK2JyZWFrOwogCQlkZWZhdWx0OgogCQkJUkVUVVJO
X0ZBTFNFOwogCX0KLQlyZXR1cm5fdmFsdWUtPnR5cGUgPSBJU19MT05HOworCVpfVFlQRV9Q
KHJldHVybl92YWx1ZSkgPSBJU19MT05HOwogfQorLyogfX19ICovCiAKIC8qIHt7eyBwcm90
byBpbnQgcGdfbnVtcm93cyhpbnQgcmVzdWx0KQogICAgUmV0dXJuIHRoZSBudW1iZXIgb2Yg
cm93cyBpbiB0aGUgcmVzdWx0ICovCkBAIC04ODcsMTYgKzkxNywxNiBAQAogICAgUmV0dXJu
cyB0aGUgbGFzdCBub3RpY2Ugc2V0IGJ5IHRoZSBiYWNrZW5kICovCiBQSFBfRlVOQ1RJT04o
cGdfbGFzdF9ub3RpY2UpIAogewotCVBHTFNfRkVUQ0goKTsKLQotCWlmIChQR0cobGFzdF9u
b3RpY2UpID09IE5VTEwpIHsKLQkJUkVUVVJOX0ZBTFNFOworCWlmIChQR0cobGFzdF9ub3Rp
Y2UpKSB7CisJCVJFVFVSTl9TVFJJTkdMKFBHRyhsYXN0X25vdGljZSksIFBHRyhsYXN0X25v
dGljZV9sZW4pLCAwKTsKIAl9IGVsc2UgeyAgICAgICAKLQkJUkVUVVJOX1NUUklORyhQR0co
bGFzdF9ub3RpY2UpLDApOworCQlSRVRVUk5fRkFMU0U7CiAJfQogfQogLyogfX19ICovCiAK
Ky8qIHt7eyBnZXRfZmllbGRfbmFtZQorICovCiBjaGFyICpnZXRfZmllbGRfbmFtZShQR2Nv
bm4gKnBnc3FsLCBPaWQgb2lkLCBIYXNoVGFibGUgKmxpc3QpCiB7CiAJUEdyZXN1bHQgKnJl
c3VsdDsKQEAgLTkwNSwxMyArOTM1LDEzIEBACiAJY2hhciAqcmV0PU5VTEw7CiAKIAkvKiB0
cnkgdG8gbG9va3VwIHRoZSB0eXBlIGluIHRoZSByZXNvdXJjZSBsaXN0ICovCi0Jc25wcmlu
dGYoaGFzaGVkX29pZF9rZXksMzEsInBnc3FsX29pZF8lZCIsKGludCkgb2lkKTsKK3NucHJp
bnRmKGhhc2hlZF9vaWRfa2V5LDMxLCJwZ3NxbF9vaWRfJWQiLChpbnQpIG9pZCk7CiAJaGFz
aGVkX29pZF9rZXlbMzFdPTA7CiAKIAlpZiAoemVuZF9oYXNoX2ZpbmQobGlzdCxoYXNoZWRf
b2lkX2tleSxzdHJsZW4oaGFzaGVkX29pZF9rZXkpKzEsKHZvaWQgKiopICZmaWVsZF90eXBl
KT09U1VDQ0VTUykgewogCQlyZXQgPSBlc3RyZHVwKChjaGFyICopZmllbGRfdHlwZS0+cHRy
KTsKIAl9IGVsc2UgeyAvKiBoYXNoIGFsbCBvaWQncyAqLwotCQlpbnQgaSxudW1fcm93czsK
K2ludCBpLG51bV9yb3dzOwogCQlpbnQgb2lkX29mZnNldCxuYW1lX29mZnNldDsKIAkJY2hh
ciAqdG1wX29pZCwgKnRtcF9uYW1lOwogCQlsaXN0X2VudHJ5IG5ld19vaWRfZW50cnk7CkBA
IC05MzEsNyArOTYxLDcgQEAKIAkJCWlmICgodG1wX25hbWUgPSBQUWdldHZhbHVlKHJlc3Vs
dCxpLG5hbWVfb2Zmc2V0KSk9PU5VTEwpIHsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCW5l
d19vaWRfZW50cnkudHlwZSA9IGxlX3N0cmluZzsKKwkJCVpfVFlQRShuZXdfb2lkX2VudHJ5
KSA9IGxlX3N0cmluZzsKIAkJCW5ld19vaWRfZW50cnkucHRyID0gZXN0cmR1cCh0bXBfbmFt
ZSk7CiAJCQl6ZW5kX2hhc2hfdXBkYXRlKGxpc3QsaGFzaGVkX29pZF9rZXksc3RybGVuKGhh
c2hlZF9vaWRfa2V5KSsxLCh2b2lkICopICZuZXdfb2lkX2VudHJ5LCBzaXplb2YobGlzdF9l
bnRyeSksIE5VTEwpOwogCQkJaWYgKCFyZXQgJiYgYXRvaSh0bXBfb2lkKT09b2lkKSB7CkBA
IC05NDEsMTIgKzk3MSwxMiBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQotCQkJCi0KLSNkZWZp
bmUgUEhQX1BHX0ZJRUxEX05BTUUgMQorLyogfX19ICovICNkZWZpbmUgUEhQX1BHX0ZJRUxE
X05BTUUgMQogI2RlZmluZSBQSFBfUEdfRklFTERfU0laRSAyCiAjZGVmaW5lIFBIUF9QR19G
SUVMRF9UWVBFIDMKIAorLyoge3t7IHBocF9wZ3NxbF9nZXRfZmllbGRfaW5mbworICovCiB2
b2lkIHBocF9wZ3NxbF9nZXRfZmllbGRfaW5mbyhJTlRFUk5BTF9GVU5DVElPTl9QQVJBTUVU
RVJTLCBpbnQgZW50cnlfdHlwZSkKIHsKIAl6dmFsICoqcmVzdWx0LCAqKmZpZWxkOwpAQCAt
OTY5LDI0ICs5OTksMjUgQEAKIAkKIAlzd2l0Y2ggKGVudHJ5X3R5cGUpIHsKIAkJY2FzZSBQ
SFBfUEdfRklFTERfTkFNRToKLQkJCXJldHVybl92YWx1ZS0+dmFsdWUuc3RyLnZhbCA9IFBR
Zm5hbWUocGdzcWxfcmVzdWx0LCBaX0xWQUxfUFAoZmllbGQpKTsKLQkJCXJldHVybl92YWx1
ZS0+dmFsdWUuc3RyLmxlbiA9IHN0cmxlbihyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwp
OwotCQkJcmV0dXJuX3ZhbHVlLT52YWx1ZS5zdHIudmFsID0gZXN0cm5kdXAocmV0dXJuX3Zh
bHVlLT52YWx1ZS5zdHIudmFsLHJldHVybl92YWx1ZS0+dmFsdWUuc3RyLmxlbik7Ci0JCQly
ZXR1cm5fdmFsdWUtPnR5cGUgPSBJU19TVFJJTkc7CisJCQlaX1NUUlZBTF9QKHJldHVybl92
YWx1ZSkgPSBQUWZuYW1lKHBnc3FsX3Jlc3VsdCwgWl9MVkFMX1BQKGZpZWxkKSk7CisJCQla
X1NUUkxFTl9QKHJldHVybl92YWx1ZSkgPSBzdHJsZW4oWl9TVFJWQUxfUChyZXR1cm5fdmFs
dWUpKTsKKwkJCVpfU1RSVkFMX1AocmV0dXJuX3ZhbHVlKSA9IGVzdHJuZHVwKFpfU1RSVkFM
X1AocmV0dXJuX3ZhbHVlKSxaX1NUUkxFTl9QKHJldHVybl92YWx1ZSkpOworCQkJWl9UWVBF
X1AocmV0dXJuX3ZhbHVlKSA9IElTX1NUUklORzsKIAkJCWJyZWFrOwogCQljYXNlIFBIUF9Q
R19GSUVMRF9TSVpFOgotCQkJcmV0dXJuX3ZhbHVlLT52YWx1ZS5sdmFsID0gUFFmc2l6ZShw
Z3NxbF9yZXN1bHQsIFpfTFZBTF9QUChmaWVsZCkpOwotCQkJcmV0dXJuX3ZhbHVlLT50eXBl
ID0gSVNfTE9ORzsKKwkJCVpfTFZBTF9QKHJldHVybl92YWx1ZSkgPSBQUWZzaXplKHBnc3Fs
X3Jlc3VsdCwgWl9MVkFMX1BQKGZpZWxkKSk7CisJCQlaX1RZUEVfUChyZXR1cm5fdmFsdWUp
ID0gSVNfTE9ORzsKIAkJCWJyZWFrOwogCQljYXNlIFBIUF9QR19GSUVMRF9UWVBFOgotCQkJ
cmV0dXJuX3ZhbHVlLT52YWx1ZS5zdHIudmFsID0gZ2V0X2ZpZWxkX25hbWUocGdfcmVzdWx0
LT5jb25uLCBQUWZ0eXBlKHBnc3FsX3Jlc3VsdCwgWl9MVkFMX1BQKGZpZWxkKSksICZFRyhy
ZWd1bGFyX2xpc3QpKTsKLQkJCXJldHVybl92YWx1ZS0+dmFsdWUuc3RyLmxlbiA9IHN0cmxl
bihyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwpOwotCQkJcmV0dXJuX3ZhbHVlLT50eXBl
ID0gSVNfU1RSSU5HOworCQkJWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpID0gZ2V0X2ZpZWxk
X25hbWUocGdfcmVzdWx0LT5jb25uLCBQUWZ0eXBlKHBnc3FsX3Jlc3VsdCwgWl9MVkFMX1BQ
KGZpZWxkKSksICZFRyhyZWd1bGFyX2xpc3QpKTsKKwkJCVpfU1RSTEVOX1AocmV0dXJuX3Zh
bHVlKSA9IHN0cmxlbihaX1NUUlZBTF9QKHJldHVybl92YWx1ZSkpOworCQkJWl9UWVBFX1Ao
cmV0dXJuX3ZhbHVlKSA9IElTX1NUUklORzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJ
UkVUVVJOX0ZBTFNFOwogCX0KIH0KKy8qIH19fSAqLwogCiAvKiB7e3sgcHJvdG8gc3RyaW5n
IHBnX2ZpZWxkbmFtZShpbnQgcmVzdWx0LCBpbnQgZmllbGRfbnVtYmVyKQogICAgUmV0dXJu
cyB0aGUgbmFtZSBvZiB0aGUgZmllbGQgKi8KQEAgLTk5Nyw4ICsxMDI4LDcgQEAKIC8qIH19
fSAqLwogCiAvKiB7e3sgcHJvdG8gaW50IHBnX2ZpZWxkc2l6ZShpbnQgcmVzdWx0LCBpbnQg
ZmllbGRfbnVtYmVyKQotICAgUmV0dXJucyB0aGUgaW50ZXJuYWwgc2l6ZSBvZiB0aGUgZmll
bGQgKi8gCi1QSFBfRlVOQ1RJT04ocGdfZmllbGRzaXplKQorICAgUmV0dXJucyB0aGUgaW50
ZXJuYWwgc2l6ZSBvZiB0aGUgZmllbGQgKi8gUEhQX0ZVTkNUSU9OKHBnX2ZpZWxkc2l6ZSkK
IHsKIAlwaHBfcGdzcWxfZ2V0X2ZpZWxkX2luZm8oSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1f
UEFTU1RIUlUsUEhQX1BHX0ZJRUxEX1NJWkUpOwogfQpAQCAtMTAyOSwzMiArMTA1OSw0MiBA
QAogCXBnc3FsX3Jlc3VsdCA9IHBnX3Jlc3VsdC0+cmVzdWx0OwogCQogCWNvbnZlcnRfdG9f
c3RyaW5nX2V4KGZpZWxkKTsKLQlyZXR1cm5fdmFsdWUtPnZhbHVlLmx2YWwgPSBQUWZudW1i
ZXIocGdzcWxfcmVzdWx0LCBaX1NUUlZBTF9QUChmaWVsZCkpOwotCXJldHVybl92YWx1ZS0+
dHlwZSA9IElTX0xPTkc7CisJWl9MVkFMX1AocmV0dXJuX3ZhbHVlKSA9IFBRZm51bWJlcihw
Z3NxbF9yZXN1bHQsIFpfU1RSVkFMX1BQKGZpZWxkKSk7CisJWl9UWVBFX1AocmV0dXJuX3Zh
bHVlKSA9IElTX0xPTkc7CiB9CiAvKiB9fX0gKi8KIAotLyoge3t7IHByb3RvIG1peGVkIHBn
X3Jlc3VsdChpbnQgcmVzdWx0LCBpbnQgcm93X251bWJlciwgbWl4ZWQgZmllbGRfbmFtZSkK
Ky8qIHt7eyBwcm90byBtaXhlZCBwZ19yZXN1bHQoaW50IHJlc3VsdCwgW2ludCByb3dfbnVt
YmVyLF0gbWl4ZWQgZmllbGRfbmFtZSkKICAgIFJldHVybnMgdmFsdWVzIGZyb20gYSByZXN1
bHQgaWRlbnRpZmllciAqLwogUEhQX0ZVTkNUSU9OKHBnX3Jlc3VsdCkKIHsKIAl6dmFsICoq
cmVzdWx0LCAqKnJvdywgKipmaWVsZD1OVUxMOwogCVBHcmVzdWx0ICpwZ3NxbF9yZXN1bHQ7
CiAJcGdzcWxfcmVzdWx0X2hhbmRsZSAqcGdfcmVzdWx0OwotCWludCBmaWVsZF9vZmZzZXQ7
CisJaW50IGZpZWxkX29mZnNldCwgcGdzcWxfcm93OwogCQotCWlmIChaRU5EX05VTV9BUkdT
KCkgIT0gMyB8fCB6ZW5kX2dldF9wYXJhbWV0ZXJzX2V4KDMsICZyZXN1bHQsICZyb3csICZm
aWVsZCk9PUZBSUxVUkUpIHsKKwlpZiAoKFpFTkRfTlVNX0FSR1MoKSAhPSAzIHx8IHplbmRf
Z2V0X3BhcmFtZXRlcnNfZXgoMywgJnJlc3VsdCwgJnJvdywgJmZpZWxkKT09RkFJTFVSRSkg
JiYKKyhaRU5EX05VTV9BUkdTKCkgIT0gMiB8fCB6ZW5kX2dldF9wYXJhbWV0ZXJzX2V4KDIs
ICZyZXN1bHQsICZmaWVsZCk9PUZBSUxVUkUpKSB7CiAJCVdST05HX1BBUkFNX0NPVU5UOwog
CX0KIAkKIAlaRU5EX0ZFVENIX1JFU09VUkNFKHBnX3Jlc3VsdCwgcGdzcWxfcmVzdWx0X2hh
bmRsZSAqLCByZXN1bHQsIC0xLCAiUG9zdGdyZVNRTCByZXN1bHQiLCBsZV9yZXN1bHQpOwog
CiAJcGdzcWxfcmVzdWx0ID0gcGdfcmVzdWx0LT5yZXN1bHQ7Ci0JCi0JY29udmVydF90b19s
b25nX2V4KHJvdyk7Ci0JaWYgKFpfTFZBTF9QUChyb3cpIDwgMCB8fCBaX0xWQUxfUFAocm93
KSA+PSBQUW50dXBsZXMocGdzcWxfcmVzdWx0KSkgewotCQlwaHBfZXJyb3IoRV9XQVJOSU5H
LCJVbmFibGUgdG8ganVtcCB0byByb3cgJWQgb24gUG9zdGdyZVNRTCByZXN1bHQgaW5kZXgg
JWQiLCBaX0xWQUxfUFAocm93KSwgWl9MVkFMX1BQKHJlc3VsdCkpOwotCQlSRVRVUk5fRkFM
U0U7CisJaWYgKFpFTkRfTlVNX0FSR1MoKSA9PSAyKSB7CisJCWlmIChwZ19yZXN1bHQtPnJv
dyA8IDApCisJCQlwZ19yZXN1bHQtPnJvdyA9IDA7CisJCXBnc3FsX3JvdyA9IHBnX3Jlc3Vs
dC0+cm93OworCQlpZiAocGdzcWxfcm93ID49IFBRbnR1cGxlcyhwZ3NxbF9yZXN1bHQpKSB7
CisJCQlSRVRVUk5fRkFMU0U7CisJCX0KKwl9IGVsc2UgeworCQljb252ZXJ0X3RvX2xvbmdf
ZXgocm93KTsKKwkJcGdzcWxfcm93ID0gWl9MVkFMX1BQKHJvdyk7CisJCWlmIChwZ3NxbF9y
b3cgPCAwIHx8IHBnc3FsX3JvdyA+PSBQUW50dXBsZXMocGdzcWxfcmVzdWx0KSkgeworCQkJ
cGhwX2Vycm9yKEVfV0FSTklORywiVW5hYmxlIHRvIGp1bXAgdG8gcm93ICVkIG9uIFBvc3Rn
cmVTUUwgcmVzdWx0IGluZGV4ICVkIiwgWl9MVkFMX1BQKHJvdyksIFpfTFZBTF9QUChyZXN1
bHQpKTsKKwkJCVJFVFVSTl9GQUxTRTsKKwkJfQogCX0KIAlzd2l0Y2goWl9UWVBFX1BQKGZp
ZWxkKSkgewogCQljYXNlIElTX1NUUklORzoKQEAgLTEwNzAsMjkgKzExMTAsMzcgQEAKIAkJ
UkVUVVJOX0ZBTFNFOwogCX0KIAkKLQlpZiAoUFFnZXRpc251bGwocGdzcWxfcmVzdWx0LCBa
X0xWQUxfUFAocm93KSwgZmllbGRfb2Zmc2V0KSkgewotCQlyZXR1cm5fdmFsdWUtPnR5cGUg
PSBJU19OVUxMOworCWlmIChQUWdldGlzbnVsbChwZ3NxbF9yZXN1bHQsIHBnc3FsX3Jvdywg
ZmllbGRfb2Zmc2V0KSkgeworCQlaX1RZUEVfUChyZXR1cm5fdmFsdWUpID0gSVNfTlVMTDsK
IAl9IGVsc2UgewotCQlyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwgPSBQUWdldHZhbHVl
KHBnc3FsX3Jlc3VsdCwgWl9MVkFMX1BQKHJvdyksIGZpZWxkX29mZnNldCk7Ci0JCXJldHVy
bl92YWx1ZS0+dmFsdWUuc3RyLmxlbiA9IChyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwg
PyBzdHJsZW4ocmV0dXJuX3ZhbHVlLT52YWx1ZS5zdHIudmFsKSA6IDApOwotCQlyZXR1cm5f
dmFsdWUtPnZhbHVlLnN0ci52YWwgPSBzYWZlX2VzdHJuZHVwKHJldHVybl92YWx1ZS0+dmFs
dWUuc3RyLnZhbCxyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci5sZW4pOwotCQlyZXR1cm5fdmFs
dWUtPnR5cGUgPSBJU19TVFJJTkc7CisJCVpfU1RSVkFMX1AocmV0dXJuX3ZhbHVlKSA9IFBR
Z2V0dmFsdWUocGdzcWxfcmVzdWx0LCBwZ3NxbF9yb3csIGZpZWxkX29mZnNldCk7CisJCVpf
U1RSTEVOX1AocmV0dXJuX3ZhbHVlKSA9IChaX1NUUlZBTF9QKHJldHVybl92YWx1ZSkgPyBz
dHJsZW4oWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpKSA6IDApOworCQlaX1NUUlZBTF9QKHJl
dHVybl92YWx1ZSkgPSBzYWZlX2VzdHJuZHVwKFpfU1RSVkFMX1AocmV0dXJuX3ZhbHVlKSxa
X1NUUkxFTl9QKHJldHVybl92YWx1ZSkpOworCQlaX1RZUEVfUChyZXR1cm5fdmFsdWUpID0g
SVNfU1RSSU5HOwogCX0KIH0KIC8qIH19fSAqLwogCi0KKy8qIHt7eyB2b2lkIHBocF9wZ3Nx
bF9mZXRjaF9oYXNoCisgKi8KIHN0YXRpYyB2b2lkIHBocF9wZ3NxbF9mZXRjaF9oYXNoKElO
VEVSTkFMX0ZVTkNUSU9OX1BBUkFNRVRFUlMsIGludCByZXN1bHRfdHlwZSkKIHsKIAl6dmFs
ICoqcmVzdWx0LCAqKnJvdywgKiphcmczOwogCVBHcmVzdWx0ICpwZ3NxbF9yZXN1bHQ7CiAJ
cGdzcWxfcmVzdWx0X2hhbmRsZSAqcGdfcmVzdWx0OwotCWludCBpLCBudW1fZmllbGRzOwor
CWludCBpLCBudW1fZmllbGRzLCBwZ3NxbF9yb3c7CiAJY2hhciAqZWxlbWVudCwgKmZpZWxk
X25hbWU7CiAJdWludCBlbGVtZW50X2xlbjsKLQlQTFNfRkVUQ0goKTsKIAogCXN3aXRjaCAo
WkVORF9OVU1fQVJHUygpKSB7CisJCWNhc2UgMToKKwkJCWlmICh6ZW5kX2dldF9wYXJhbWV0
ZXJzX2V4KDEsICZyZXN1bHQpPT1GQUlMVVJFKSB7CisJCQkJUkVUVVJOX0ZBTFNFOworCQkJ
fQorCQkJaWYgKCFyZXN1bHRfdHlwZSkgeworCQkJCXJlc3VsdF90eXBlID0gUEdTUUxfQk9U
SDsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQlpZiAoemVuZF9nZXRfcGFyYW1l
dGVyc19leCgyLCAmcmVzdWx0LCAmcm93KT09RkFJTFVSRSkgewogCQkJCVJFVFVSTl9GQUxT
RTsKQEAgLTExMTYsMTUgKzExNjQsMjUgQEAKIAlaRU5EX0ZFVENIX1JFU09VUkNFKHBnX3Jl
c3VsdCwgcGdzcWxfcmVzdWx0X2hhbmRsZSAqLCByZXN1bHQsIC0xLCAiUG9zdGdyZVNRTCBy
ZXN1bHQiLCBsZV9yZXN1bHQpOwogCiAJcGdzcWxfcmVzdWx0ID0gcGdfcmVzdWx0LT5yZXN1
bHQ7Ci0JCi0JY29udmVydF90b19sb25nX2V4KHJvdyk7Ci0JaWYgKFpfTFZBTF9QUChyb3cp
IDwgMCB8fCBaX0xWQUxfUFAocm93KSA+PSBQUW50dXBsZXMocGdzcWxfcmVzdWx0KSkgewot
CQlwaHBfZXJyb3IoRV9XQVJOSU5HLCJVbmFibGUgdG8ganVtcCB0byByb3cgJWQgb24gUG9z
dGdyZVNRTCByZXN1bHQgaW5kZXggJWQiLCBaX0xWQUxfUFAocm93KSwgWl9MVkFMX1BQKHJl
c3VsdCkpOwotCQlSRVRVUk5fRkFMU0U7CisKKwlpZiAoWkVORF9OVU1fQVJHUygpID09IDEp
IHsKKwkJcGdfcmVzdWx0LT5yb3crKzsKKwkJcGdzcWxfcm93ID0gcGdfcmVzdWx0LT5yb3c7
CisJCWlmIChwZ3NxbF9yb3cgPCAwIHx8IHBnc3FsX3JvdyA+PSBQUW50dXBsZXMocGdzcWxf
cmVzdWx0KSkgeworCQkJUkVUVVJOX0ZBTFNFOworCQl9CisJfSBlbHNlIHsKKwkJY29udmVy
dF90b19sb25nX2V4KHJvdyk7CisJCXBnc3FsX3JvdyA9IFpfTFZBTF9QUChyb3cpOworCQlw
Z19yZXN1bHQtPnJvdyA9IHBnc3FsX3JvdzsKKwkJaWYgKHBnc3FsX3JvdyA8IDAgfHwgcGdz
cWxfcm93ID49IFBRbnR1cGxlcyhwZ3NxbF9yZXN1bHQpKSB7CisJCQlwaHBfZXJyb3IoRV9X
QVJOSU5HLCJVbmFibGUgdG8ganVtcCB0byByb3cgJWQgb24gUG9zdGdyZVNRTCByZXN1bHQg
aW5kZXggJWQiLCBaX0xWQUxfUFAocm93KSwgWl9MVkFMX1BQKHJlc3VsdCkpOworCQkJUkVU
VVJOX0ZBTFNFOworCQl9CiAJfQogCWFycmF5X2luaXQocmV0dXJuX3ZhbHVlKTsKIAlmb3Ig
KGkgPSAwLCBudW1fZmllbGRzID0gUFFuZmllbGRzKHBnc3FsX3Jlc3VsdCk7IGk8bnVtX2Zp
ZWxkczsgaSsrKSB7Ci0JCWlmIChQUWdldGlzbnVsbChwZ3NxbF9yZXN1bHQsIFpfTFZBTF9Q
UChyb3cpLCBpKSkgeworCQlpZiAoUFFnZXRpc251bGwocGdzcWxfcmVzdWx0LCBwZ3NxbF9y
b3csIGkpKSB7CiAJCQlpZiAocmVzdWx0X3R5cGUgJiBQR1NRTF9OVU0pIHsKIAkJCQlhZGRf
aW5kZXhfbnVsbChyZXR1cm5fdmFsdWUsIGkpOwogCQkJfQpAQCAtMTEzMyw3ICsxMTkxLDcg
QEAKIAkJCQlhZGRfYXNzb2NfbnVsbChyZXR1cm5fdmFsdWUsIGZpZWxkX25hbWUpOwogCQkJ
fQogCQl9IGVsc2UgewotCQkJZWxlbWVudCA9IFBRZ2V0dmFsdWUocGdzcWxfcmVzdWx0LCBa
X0xWQUxfUFAocm93KSwgaSk7CisJCQllbGVtZW50ID0gUFFnZXR2YWx1ZShwZ3NxbF9yZXN1
bHQsIHBnc3FsX3JvdywgaSk7CiAJCQllbGVtZW50X2xlbiA9IChlbGVtZW50ID8gc3RybGVu
KGVsZW1lbnQpIDogMCk7CiAJCQlpZiAoZWxlbWVudCkgewogCQkJCWNoYXIgKmRhdGE7CkBA
IC0xMTYwLDE4ICsxMjE4LDE3IEBACiAJCX0KIAl9CiB9CisvKiB9fX0gKi8KIAotCi0vKiB7
e3sgcHJvdG8gYXJyYXkgcGdfZmV0Y2hfcm93KGludCByZXN1bHQsIGludCByb3cpCi0gICBH
ZXQgYSByb3cgYXMgYW4gZW51bWVyYXRlZCBhcnJheSAqLyAKLVBIUF9GVU5DVElPTihwZ19m
ZXRjaF9yb3cpCisvKiB7e3sgcHJvdG8gYXJyYXkgcGdfZmV0Y2hfcm93KGludCByZXN1bHQs
IFtpbnQgcm93XSkKKyAgIEdldCBhIHJvdyBhcyBhbiBlbnVtZXJhdGVkIGFycmF5ICovIFBI
UF9GVU5DVElPTihwZ19mZXRjaF9yb3cpCiB7CiAJcGhwX3Bnc3FsX2ZldGNoX2hhc2goSU5U
RVJOQUxfRlVOQ1RJT05fUEFSQU1fUEFTU1RIUlUsIFBHU1FMX05VTSk7CiB9CiAvKiB9fX0g
Ki8KIAogLyogPz8gIFRoaXMgaXMgYSByYXRoZXIgb2RkIGZ1bmN0aW9uIC0gd2h5IG5vdCBq
dXN0IHBvaW50IHBnX2ZldGNoYXJyYXkoKSBkaXJlY3RseSBhdCBmZXRjaF9oYXNoID8gLVJM
ICovCi0vKiB7e3sgcHJvdG8gYXJyYXkgcGdfZmV0Y2hfYXJyYXkoaW50IHJlc3VsdCwgaW50
IHJvdyBbLCBpbnQgcmVzdWx0X3R5cGVdKQorLyoge3t7IHByb3RvIGFycmF5IHBnX2ZldGNo
X2FycmF5KGludCByZXN1bHQsIFtpbnQgcm93IFssIGludCByZXN1bHRfdHlwZV1dKQogICAg
RmV0Y2ggYSByb3cgYXMgYW4gYXJyYXkgKi8KIFBIUF9GVU5DVElPTihwZ19mZXRjaF9hcnJh
eSkKIHsKQEAgLTExNzksMTIgKzEyMzYsMTIgQEAKIH0KIC8qIH19fSAqLwogCi0vKiB7e3sg
cHJvdG8gb2JqZWN0IHBnX2ZldGNoX29iamVjdChpbnQgcmVzdWx0LCBpbnQgcm93IFssIGlu
dCByZXN1bHRfdHlwZV0pCisvKiB7e3sgcHJvdG8gb2JqZWN0IHBnX2ZldGNoX29iamVjdChp
bnQgcmVzdWx0LCBbaW50IHJvdyBbLCBpbnQgcmVzdWx0X3R5cGVdXSkKICAgIEZldGNoIGEg
cm93IGFzIGFuIG9iamVjdCAqLwogUEhQX0ZVTkNUSU9OKHBnX2ZldGNoX29iamVjdCkKIHsK
IAlwaHBfcGdzcWxfZmV0Y2hfaGFzaChJTlRFUk5BTF9GVU5DVElPTl9QQVJBTV9QQVNTVEhS
VSwgMCk7Ci0JaWYgKHJldHVybl92YWx1ZS0+dHlwZT09SVNfQVJSQVkpIHsKKwlpZiAoWl9U
WVBFX1AocmV0dXJuX3ZhbHVlKT09SVNfQVJSQVkpIHsKIAkJcmV0dXJuX3ZhbHVlLT50eXBl
PUlTX09CSkVDVDsKIAkJcmV0dXJuX3ZhbHVlLT52YWx1ZS5vYmoucHJvcGVydGllcyA9IHJl
dHVybl92YWx1ZS0+dmFsdWUuaHQ7CiAJCXJldHVybl92YWx1ZS0+dmFsdWUub2JqLmNlID0g
JnplbmRfc3RhbmRhcmRfY2xhc3NfZGVmOwpAQCAtMTE5NSwyNiArMTI1MiwzOSBAQAogI2Rl
ZmluZSBQSFBfUEdfREFUQV9MRU5HVEggMQogI2RlZmluZSBQSFBfUEdfREFUQV9JU05VTEwg
MgogCisvKiB7e3sgcGhwX3Bnc3FsX2RhdGFfaW5mbworICovCiB2b2lkIHBocF9wZ3NxbF9k
YXRhX2luZm8oSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1FVEVSUywgaW50IGVudHJ5X3R5cGUp
CiB7CiAJenZhbCAqKnJlc3VsdCwgKipyb3csICoqZmllbGQ7CiAJUEdyZXN1bHQgKnBnc3Fs
X3Jlc3VsdDsKIAlwZ3NxbF9yZXN1bHRfaGFuZGxlICpwZ19yZXN1bHQ7Ci0JaW50IGZpZWxk
X29mZnNldDsKKwlpbnQgZmllbGRfb2Zmc2V0LCBwZ3NxbF9yb3c7CiAJCi0JaWYgKFpFTkRf
TlVNX0FSR1MoKSAhPSAzIHx8IHplbmRfZ2V0X3BhcmFtZXRlcnNfZXgoMywgJnJlc3VsdCwg
JnJvdywgJmZpZWxkKT09RkFJTFVSRSkgeworCWlmICgoWkVORF9OVU1fQVJHUygpICE9IDMg
fHwgemVuZF9nZXRfcGFyYW1ldGVyc19leCgzLCAmcmVzdWx0LCAmcm93LCAmZmllbGQpPT1G
QUlMVVJFKSAmJgorKFpFTkRfTlVNX0FSR1MoKSAhPSAyIHx8IHplbmRfZ2V0X3BhcmFtZXRl
cnNfZXgoMiwgJnJlc3VsdCwgJmZpZWxkKT09RkFJTFVSRSkpIHsKIAkJV1JPTkdfUEFSQU1f
Q09VTlQ7CiAJfQogCQogCVpFTkRfRkVUQ0hfUkVTT1VSQ0UocGdfcmVzdWx0LCBwZ3NxbF9y
ZXN1bHRfaGFuZGxlICosIHJlc3VsdCwgLTEsICJQb3N0Z3JlU1FMIHJlc3VsdCIsIGxlX3Jl
c3VsdCk7CiAKIAlwZ3NxbF9yZXN1bHQgPSBwZ19yZXN1bHQtPnJlc3VsdDsKLQkKLQljb252
ZXJ0X3RvX2xvbmdfZXgocm93KTsKLQlpZiAoWl9MVkFMX1BQKHJvdykgPCAwIHx8IFpfTFZB
TF9QUChyb3cpID49IFBRbnR1cGxlcyhwZ3NxbF9yZXN1bHQpKSB7Ci0JCXBocF9lcnJvcihF
X1dBUk5JTkcsIlVuYWJsZSB0byBqdW1wIHRvIHJvdyAlZCBvbiBQb3N0Z3JlU1FMIHJlc3Vs
dCBpbmRleCAlZCIsIFpfTFZBTF9QUChyb3cpLCBaX0xWQUxfUFAocmVzdWx0KSk7Ci0JCVJF
VFVSTl9GQUxTRTsKKwlpZiAoWkVORF9OVU1fQVJHUygpID09IDIpIHsKKwkJaWYgKHBnX3Jl
c3VsdC0+cm93IDwgMCkKKwkJCXBnX3Jlc3VsdC0+cm93ID0gMDsKKwkJcGdzcWxfcm93ID0g
cGdfcmVzdWx0LT5yb3c7CisJCWlmIChwZ3NxbF9yb3cgPCAwIHx8IHBnc3FsX3JvdyA+PSBQ
UW50dXBsZXMocGdzcWxfcmVzdWx0KSkgeworCQkJUkVUVVJOX0ZBTFNFOworCQl9CisJfSBl
bHNlIHsKKwkJY29udmVydF90b19sb25nX2V4KHJvdyk7CisJCXBnc3FsX3JvdyA9IFpfTFZB
TF9QUChyb3cpOworCQlpZiAocGdzcWxfcm93IDwgMCB8fCBwZ3NxbF9yb3cgPj0gUFFudHVw
bGVzKHBnc3FsX3Jlc3VsdCkpIHsKKwkJCXBocF9lcnJvcihFX1dBUk5JTkcsIlVuYWJsZSB0
byBqdW1wIHRvIHJvdyAlZCBvbiBQb3N0Z3JlU1FMIHJlc3VsdCBpbmRleCAlZCIsIFpfTFZB
TF9QUChyb3cpLCBaX0xWQUxfUFAocmVzdWx0KSk7CisJCQlSRVRVUk5fRkFMU0U7CisJCX0K
IAl9CisJCiAJc3dpdGNoKFpfVFlQRV9QUChmaWVsZCkpIHsKIAkJY2FzZSBJU19TVFJJTkc6
CiAJCQljb252ZXJ0X3RvX3N0cmluZ19leChmaWVsZCk7CkBAIC0xMjMyLDE2ICsxMzAyLDE3
IEBACiAJCiAJc3dpdGNoIChlbnRyeV90eXBlKSB7CiAJCWNhc2UgUEhQX1BHX0RBVEFfTEVO
R1RIOgotCQkJcmV0dXJuX3ZhbHVlLT52YWx1ZS5sdmFsID0gUFFnZXRsZW5ndGgocGdzcWxf
cmVzdWx0LCBaX0xWQUxfUFAocm93KSwgZmllbGRfb2Zmc2V0KTsKKwkJCVpfTFZBTF9QKHJl
dHVybl92YWx1ZSkgPSBQUWdldGxlbmd0aChwZ3NxbF9yZXN1bHQsIHBnc3FsX3JvdywgZmll
bGRfb2Zmc2V0KTsKIAkJCWJyZWFrOwogCQljYXNlIFBIUF9QR19EQVRBX0lTTlVMTDoKLQkJ
CXJldHVybl92YWx1ZS0+dmFsdWUubHZhbCA9IFBRZ2V0aXNudWxsKHBnc3FsX3Jlc3VsdCwg
Wl9MVkFMX1BQKHJvdyksIGZpZWxkX29mZnNldCk7CisJCQlaX0xWQUxfUChyZXR1cm5fdmFs
dWUpID0gUFFnZXRpc251bGwocGdzcWxfcmVzdWx0LCBwZ3NxbF9yb3csIGZpZWxkX29mZnNl
dCk7CiAJCQlicmVhazsKIAl9Ci0JcmV0dXJuX3ZhbHVlLT50eXBlID0gSVNfTE9ORzsKKwla
X1RZUEVfUChyZXR1cm5fdmFsdWUpID0gSVNfTE9ORzsKIH0KKy8qIH19fSAqLwogCi0vKiB7
e3sgcHJvdG8gaW50IHBnX2ZpZWxkcHJ0bGVuKGludCByZXN1bHQsIGludCByb3csIG1peGVk
IGZpZWxkX25hbWVfb3JfbnVtYmVyKQorLyoge3t7IHByb3RvIGludCBwZ19maWVsZHBydGxl
bihpbnQgcmVzdWx0LCBbaW50IHJvdyxdIG1peGVkIGZpZWxkX25hbWVfb3JfbnVtYmVyKQog
ICAgUmV0dXJucyB0aGUgcHJpbnRlZCBsZW5ndGggKi8KIFBIUF9GVU5DVElPTihwZ19maWVs
ZHBydGxlbikKIHsKQEAgLTEyNDksNyArMTMyMCw3IEBACiB9CiAvKiB9fX0gKi8KIAotLyog
e3t7IHByb3RvIGludCBwZ19maWVsZGlzbnVsbChpbnQgcmVzdWx0LCBpbnQgcm93LCBtaXhl
ZCBmaWVsZF9uYW1lX29yX251bWJlcikKKy8qIHt7eyBwcm90byBpbnQgcGdfZmllbGRpc251
bGwoaW50IHJlc3VsdCwgW2ludCByb3csXSBtaXhlZCBmaWVsZF9uYW1lX29yX251bWJlcikK
ICAgIFRlc3QgaWYgYSBmaWVsZCBpcyBOVUxMICovCiBQSFBfRlVOQ1RJT04ocGdfZmllbGRp
c251bGwpCiB7CkBAIC0xMjkyLDI2ICsxMzYzLDI1IEBACiAJWkVORF9GRVRDSF9SRVNPVVJD
RShwZ19yZXN1bHQsIHBnc3FsX3Jlc3VsdF9oYW5kbGUgKiwgcmVzdWx0LCAtMSwgIlBvc3Rn
cmVTUUwgcmVzdWx0IiwgbGVfcmVzdWx0KTsKIAlwZ3NxbF9yZXN1bHQgPSBwZ19yZXN1bHQt
PnJlc3VsdDsKICNpZm5kZWYgSEFWRV9QUU9JRFZBTFVFCi0JcmV0dXJuX3ZhbHVlLT52YWx1
ZS5zdHIudmFsID0gKGNoYXIgKikgUFFvaWRTdGF0dXMocGdzcWxfcmVzdWx0KTsKLQlpZiAo
cmV0dXJuX3ZhbHVlLT52YWx1ZS5zdHIudmFsKSB7Ci0JCXJldHVybl92YWx1ZS0+dmFsdWUu
c3RyLmxlbiA9IHN0cmxlbihyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwpOwotCQlyZXR1
cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwgPSBlc3RybmR1cChyZXR1cm5fdmFsdWUtPnZhbHVl
LnN0ci52YWwsIHJldHVybl92YWx1ZS0+dmFsdWUuc3RyLmxlbik7Ci0JCXJldHVybl92YWx1
ZS0+dHlwZSA9IElTX1NUUklORzsKK1pfU1RSVkFMX1AocmV0dXJuX3ZhbHVlKSA9IChjaGFy
ICopIFBRb2lkU3RhdHVzKHBnc3FsX3Jlc3VsdCk7CisJaWYgKFpfU1RSVkFMX1AocmV0dXJu
X3ZhbHVlKSkgeworCQlaX1NUUkxFTl9QKHJldHVybl92YWx1ZSkgPSBzdHJsZW4oWl9TVFJW
QUxfUChyZXR1cm5fdmFsdWUpKTsKKwkJWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpID0gZXN0
cm5kdXAoWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpLCBaX1NUUkxFTl9QKHJldHVybl92YWx1
ZSkpOworCQlaX1RZUEVfUChyZXR1cm5fdmFsdWUpID0gSVNfU1RSSU5HOwogCX0gZWxzZSB7
Ci0JCXJldHVybl92YWx1ZS0+dmFsdWUuc3RyLnZhbCA9IGVtcHR5X3N0cmluZzsKKwkJWl9T
VFJWQUxfUChyZXR1cm5fdmFsdWUpID0gZW1wdHlfc3RyaW5nOwogCX0KICNlbHNlCi0JcmV0
dXJuX3ZhbHVlLT52YWx1ZS5sdmFsID0gKGludCkgUFFvaWRWYWx1ZShwZ3NxbF9yZXN1bHQp
OwotCWlmIChyZXR1cm5fdmFsdWUtPnZhbHVlLmx2YWwgPT0gSW52YWxpZE9pZCkgeworWl9M
VkFMX1AocmV0dXJuX3ZhbHVlKSA9IChpbnQpIFBRb2lkVmFsdWUocGdzcWxfcmVzdWx0KTsK
KwlpZiAoWl9MVkFMX1AocmV0dXJuX3ZhbHVlKSA9PSBJbnZhbGlkT2lkKSB7CiAJCVJFVFVS
Tl9GQUxTRTsKIAl9IGVsc2UgewotCQlyZXR1cm5fdmFsdWUtPnR5cGUgPSBJU19MT05HOwor
CQlaX1RZUEVfUChyZXR1cm5fdmFsdWUpID0gSVNfTE9ORzsKIAl9CiAjZW5kaWYKIH0KIC8q
IH19fSAqLwogCi0KIC8qIHt7eyBwcm90byBib29sIHBnX3RyYWNlKHN0cmluZyBmaWxlbmFt
ZSBbLCBzdHJpbmcgbW9kZSBbLCByZXNvdXJjZSBjb25uZWN0aW9uXV0pCiAgICBFbmFibGUg
dHJhY2luZyBhIFBvc3RncmVTUUwgY29ubmVjdGlvbiAqLwogUEhQX0ZVTkNUSU9OKHBnX3Ry
YWNlKQpAQCAtMTMyMiw3ICsxMzkyLDYgQEAKIAljaGFyICptb2RlID0gInciOwogCWludCBp
c3NvY2ssIHNvY2tldGQ7CiAJRklMRSAqZnA7Ci0JUEdMU19GRVRDSCgpOwogCiAJaWQgPSBQ
R0coZGVmYXVsdF9saW5rKTsKIApAQCAtMTM2Nyw3ICsxNDM2LDcgQEAKIAlaRU5EX1JFR0lT
VEVSX1JFU09VUkNFKE5VTEwsIGZwLCBwaHBfZmlsZV9sZV9mb3BlbigpKTsKIAlSRVRVUk5f
VFJVRTsKIH0KLQorLyogfX19ICovCiAKIC8qIHt7eyBwcm90byBib29sIHBnX3VudHJhY2Uo
W2ludCBjb25uZWN0aW9uXSkKICAgIERpc2FibGUgdHJhY2luZyBvZiBhIFBvc3RncmVTUUwg
Y29ubmVjdGlvbiAqLwpAQCAtMTM3Niw3ICsxNDQ1LDYgQEAKIAl6dmFsICoqcGdzcWxfbGlu
ayA9IE5VTEw7CiAJaW50IGlkID0gLTE7CiAJUEdjb25uICpwZ3NxbDsKLQlQR0xTX0ZFVENI
KCk7CiAKIAlzd2l0Y2ggKFpFTkRfTlVNX0FSR1MoKSkgewogCQljYXNlIDA6CkBAIC0xMzk3
LDcgKzE0NjUsNyBAQAogCVBRdW50cmFjZShwZ3NxbCk7CiAJUkVUVVJOX1RSVUU7CiB9Ci0K
Ky8qIH19fSAqLwogCiAvKiB7e3sgcHJvdG8gaW50IHBnX2xvY3JlYXRlKGludCBjb25uZWN0
aW9uKQogICAgQ3JlYXRlIGEgbGFyZ2Ugb2JqZWN0ICovCkBAIC0xNDA3LDcgKzE0NzUsNiBA
QAogCVBHY29ubiAqcGdzcWw7CiAJT2lkIHBnc3FsX29pZDsKIAlpbnQgaWQgPSAtMTsKLQlQ
R0xTX0ZFVENIKCk7CiAKIAlzd2l0Y2goWkVORF9OVU1fQVJHUygpKSB7CiAJCWNhc2UgMDoK
QEAgLTE0MzQsMTMgKzE1MDEsMTMgQEAKIAkgICB0aGUgb2JqZWN0LCBwcm9iYWJseSAoPykg
b3ZlcnJpZGVzIHRoaXMuIChKb3VuaSkgCiAJICovCiAKLQlpZiAoKHBnc3FsX29pZCA9IGxv
X2NyZWF0KHBnc3FsLCBJTlZfUkVBRHxJTlZfV1JJVEUpKT09MCkgeworaWYgKChwZ3NxbF9v
aWQgPSBsb19jcmVhdChwZ3NxbCwgSU5WX1JFQUR8SU5WX1dSSVRFKSk9PTApIHsKIAkJcGhw
X2Vycm9yKEVfV0FSTklORywiVW5hYmxlIHRvIGNyZWF0ZSBQb3N0Z3JlU1FMIGxhcmdlIG9i
amVjdCIpOwogCQlSRVRVUk5fRkFMU0U7CiAJfQogCi0JcmV0dXJuX3ZhbHVlLT52YWx1ZS5s
dmFsID0gcGdzcWxfb2lkOwotCXJldHVybl92YWx1ZS0+dHlwZSA9IElTX0xPTkc7CisJWl9M
VkFMX1AocmV0dXJuX3ZhbHVlKSA9IHBnc3FsX29pZDsKKwlaX1RZUEVfUChyZXR1cm5fdmFs
dWUpID0gSVNfTE9ORzsKIH0KIC8qIH19fSAqLwogCkBAIC0xNDUyLDcgKzE1MTksNiBAQAog
CVBHY29ubiAqcGdzcWw7CiAJT2lkIHBnc3FsX29pZDsKIAlpbnQgaWQgPSAtMTsKLQlQR0xT
X0ZFVENIKCk7CiAKIAlzd2l0Y2goWkVORF9OVU1fQVJHUygpKSB7CiAJCWNhc2UgMToKQEAg
LTE0OTcsNyArMTU2Myw2IEBACiAJaW50IGNyZWF0ZT0wOwogCWNoYXIgKm1vZGVfc3RyaW5n
PU5VTEw7CiAJcGdMb2ZwICpwZ3NxbF9sb2ZwOwotCVBHTFNfRkVUQ0goKTsKIAogCXN3aXRj
aChaRU5EX05VTV9BUkdTKCkpIHsKIAkJY2FzZSAyOgpAQCAtMTUzMiw3ICsxNTk3LDcgQEAK
IAkgICAoSm91bmkpCiAJICovCiAKLQlpZiAoc3RyY2hyKG1vZGVfc3RyaW5nLCAncicpID09
IG1vZGVfc3RyaW5nKSB7CitpZiAoc3RyY2hyKG1vZGVfc3RyaW5nLCAncicpID09IG1vZGVf
c3RyaW5nKSB7CiAJCXBnc3FsX21vZGUgfD0gSU5WX1JFQUQ7CiAJCWlmIChzdHJjaHIobW9k
ZV9zdHJpbmcsICcrJykgPT0gbW9kZV9zdHJpbmcrMSkgewogCQkJcGdzcWxfbW9kZSB8PSBJ
TlZfV1JJVEU7CkBAIC0xNTY4LDggKzE2MzMsOCBAQAogCQkJCX0gZWxzZSB7CiAJCQkJCXBn
c3FsX2xvZnAtPmNvbm4gPSBwZ3NxbDsKIAkJCQkJcGdzcWxfbG9mcC0+bG9mZCA9IHBnc3Fs
X2xvZmQ7Ci0JCQkJCXJldHVybl92YWx1ZS0+dmFsdWUubHZhbCA9IHplbmRfbGlzdF9pbnNl
cnQocGdzcWxfbG9mcCwgbGVfbG9mcCk7Ci0JCQkJCXJldHVybl92YWx1ZS0+dHlwZSA9IElT
X0xPTkc7CisJCQkJCVpfTFZBTF9QKHJldHVybl92YWx1ZSkgPSB6ZW5kX2xpc3RfaW5zZXJ0
KHBnc3FsX2xvZnAsIGxlX2xvZnApOworCQkJCQlaX1RZUEVfUChyZXR1cm5fdmFsdWUpID0g
SVNfTE9ORzsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0xNTgyLDEwICsxNjQ3LDEw
IEBACiAJCXBnc3FsX2xvZnAtPmxvZmQgPSBwZ3NxbF9sb2ZkOwogCQlaRU5EX1JFR0lTVEVS
X1JFU09VUkNFKHJldHVybl92YWx1ZSwgcGdzcWxfbG9mcCwgbGVfbG9mcCk7CiAJCS8qCi0J
CXJldHVybl92YWx1ZS0+dmFsdWUubHZhbCA9IHplbmRfbGlzdF9pbnNlcnQocGdzcWxfbG9m
cCwgbGVfbG9mcCk7Ci0JCXJldHVybl92YWx1ZS0+dHlwZSA9IElTX0xPTkc7CisJCVpfTFZB
TF9QKHJldHVybl92YWx1ZSkgPSB6ZW5kX2xpc3RfaW5zZXJ0KHBnc3FsX2xvZnAsIGxlX2xv
ZnApOworCQlaX1RZUEVfUChyZXR1cm5fdmFsdWUpID0gSVNfTE9ORzsKIAkJKi8KLQl9Cit9
CiB9CiAvKiB9fX0gKi8KIApAQCAtMTYyMSw2OSArMTY4Niw3MCBAQAogfQogLyogfX19ICov
CiAKLS8qIHt7eyBwcm90byBzdHJpbmcgcGdfbG9yZWFkKGludCBmZCwgaW50IGxlbikKKy8q
IHt7eyBwcm90byBzdHJpbmcgcGdfbG9yZWFkKGludCBmZCBbLCBpbnQgbGVuXSkKICAgIFJl
YWQgYSBsYXJnZSBvYmplY3QgKi8KIFBIUF9GVU5DVElPTihwZ19sb3JlYWQpCiB7CiAgIAl6
dmFsICoqcGdzcWxfaWQsICoqbGVuOwotCWludCBidWZfbGVuLCBuYnl0ZXM7CisJaW50IGJ1
Zl9sZW4gPSAxMDI0LCBuYnl0ZXM7CiAJY2hhciAqYnVmOwogCXBnTG9mcCAqcGdzcWw7CiAK
LQlzd2l0Y2goWkVORF9OVU1fQVJHUygpKSB7Ci0JCWNhc2UgMjoKLQkJCWlmICh6ZW5kX2dl
dF9wYXJhbWV0ZXJzX2V4KDIsICZwZ3NxbF9pZCwgJmxlbik9PUZBSUxVUkUpIHsKLQkJCQlS
RVRVUk5fRkFMU0U7Ci0JCQl9Ci0JCQljb252ZXJ0X3RvX2xvbmdfZXgobGVuKTsKLQkJCWJ1
Zl9sZW4gPSBaX0xWQUxfUFAobGVuKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJV1JP
TkdfUEFSQU1fQ09VTlQ7Ci0JCQlicmVhazsKKwlpZiAoWkVORF9OVU1fQVJHUygpIDwgMSB8
fCBaRU5EX05VTV9BUkdTKCkgPiAyIHx8CisJICAgIHplbmRfZ2V0X3BhcmFtZXRlcnNfZXgo
WkVORF9OVU1fQVJHUygpLCAmcGdzcWxfaWQsICZsZW4pID09IEZBSUxVUkUpIHsKKwkJV1JP
TkdfUEFSQU1fQ09VTlQ7CiAJfQogCiAJWkVORF9GRVRDSF9SRVNPVVJDRShwZ3NxbCwgcGdM
b2ZwICosIHBnc3FsX2lkLCAtMSwgIlBvc3RncmVTUUwgbGFyZ2Ugb2JqZWN0IiwgbGVfbG9m
cCk7CiAKKwlpZiAoWkVORF9OVU1fQVJHUygpID4gMSkgeworCQljb252ZXJ0X3RvX2xvbmdf
ZXgobGVuKTsKKwkJYnVmX2xlbiA9IFpfTFZBTF9QUChsZW4pOworCX0KKwkKIAlidWYgPSAo
Y2hhciAqKSBlbWFsbG9jKHNpemVvZihjaGFyKSooYnVmX2xlbisxKSk7CiAJaWYgKChuYnl0
ZXMgPSBsb19yZWFkKChQR2Nvbm4gKilwZ3NxbC0+Y29ubiwgcGdzcWwtPmxvZmQsIGJ1Ziwg
YnVmX2xlbikpPDApIHsKIAkJZWZyZWUoYnVmKTsKIAkJUkVUVVJOX0ZBTFNFOwogCX0KLQly
ZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52YWwgPSBidWY7Ci0JcmV0dXJuX3ZhbHVlLT52YWx1
ZS5zdHIubGVuID0gbmJ5dGVzOwotCXJldHVybl92YWx1ZS0+dmFsdWUuc3RyLnZhbFtuYnl0
ZXNdID0gMDsKLQlyZXR1cm5fdmFsdWUtPnR5cGUgPSBJU19TVFJJTkc7CisKKwlidWZbbmJ5
dGVzXSA9IDA7CisJUkVUVVJOX1NUUklOR0woYnVmLCBuYnl0ZXMsIDApOwogfQogLyogfX19
ICovCiAKLS8qIHt7eyBwcm90byBpbnQgcGdfbG93cml0ZShpbnQgZmQsIHN0cmluZyBidWYp
CisvKiB7e3sgcHJvdG8gaW50IHBnX2xvd3JpdGUoaW50IGZkLCBzdHJpbmcgYnVmIFssIGlu
dCBsZW5dKQogICAgV3JpdGUgYSBsYXJnZSBvYmplY3QgKi8KIFBIUF9GVU5DVElPTihwZ19s
b3dyaXRlKQogewotICAJenZhbCAqKnBnc3FsX2lkLCAqKnN0cjsKKyAgCXp2YWwgKipwZ3Nx
bF9pZCwgKipzdHIsICoqel9sZW47CiAJaW50IG5ieXRlczsKKwlpbnQgbGVuOwogCXBnTG9m
cCAqcGdzcWw7CisJaW50IGFyZ2MgPSBaRU5EX05VTV9BUkdTKCk7CiAKLQlzd2l0Y2goWkVO
RF9OVU1fQVJHUygpKSB7Ci0JCWNhc2UgMjoKLQkJCWlmICh6ZW5kX2dldF9wYXJhbWV0ZXJz
X2V4KDIsICZwZ3NxbF9pZCwgJnN0cik9PUZBSUxVUkUpIHsKLQkJCQlSRVRVUk5fRkFMU0U7
Ci0JCQl9Ci0JCQljb252ZXJ0X3RvX3N0cmluZ19leChzdHIpOwotCQkJYnJlYWs7Ci0JCWRl
ZmF1bHQ6Ci0JCQlXUk9OR19QQVJBTV9DT1VOVDsKLQkJCWJyZWFrOworCWlmIChhcmdjIDwg
MiB8fCBhcmdjID4gMyB8fAorCSAgICB6ZW5kX2dldF9wYXJhbWV0ZXJzX2V4KGFyZ2MsICZw
Z3NxbF9pZCwgJnN0ciwgJnpfbGVuKSA9PSBGQUlMVVJFKSB7CisJCVdST05HX1BBUkFNX0NP
VU5UOworCX0KKworCWNvbnZlcnRfdG9fc3RyaW5nX2V4KHN0cik7CisKKwlpZiAoYXJnYyA+
IDIpIHsKKwkJY29udmVydF90b19sb25nX2V4KHpfbGVuKTsKKwkJbGVuID0gWl9MVkFMX1BQ
KHpfbGVuKTsKKwl9CisJZWxzZSB7CisJCWxlbiA9IFpfU1RSTEVOX1BQKHN0cik7CiAJfQog
CiAJWkVORF9GRVRDSF9SRVNPVVJDRShwZ3NxbCwgcGdMb2ZwICosIHBnc3FsX2lkLCAtMSwg
IlBvc3RncmVTUUwgbGFyZ2Ugb2JqZWN0IiwgbGVfbG9mcCk7CiAKLQlpZiAoKG5ieXRlcyA9
IGxvX3dyaXRlKChQR2Nvbm4gKilwZ3NxbC0+Y29ubiwgcGdzcWwtPmxvZmQsIFpfU1RSVkFM
X1BQKHN0ciksIFpfU1RSTEVOX1BQKHN0cikpKSA9PSAtMSkgeworCWlmICgobmJ5dGVzID0g
bG9fd3JpdGUoKFBHY29ubiAqKXBnc3FsLT5jb25uLCBwZ3NxbC0+bG9mZCwgWl9TVFJWQUxf
UFAoc3RyKSwgbGVuKSkgPT0gLTEpIHsKIAkJUkVUVVJOX0ZBTFNFOwogCX0KLQlyZXR1cm5f
dmFsdWUtPnZhbHVlLmx2YWwgPSBuYnl0ZXM7Ci0JcmV0dXJuX3ZhbHVlLT50eXBlID0gSVNf
TE9ORzsKKworCVJFVFVSTl9MT05HKG5ieXRlcyk7CiB9CiAvKiB9fX0gKi8KIApAQCAtMTcx
OCw4ICsxNzg0LDggQEAKIAkJfQogCQl0Ynl0ZXMgKz0gaTsKIAl9Ci0JcmV0dXJuX3ZhbHVl
LT52YWx1ZS5sdmFsID0gdGJ5dGVzOwotCXJldHVybl92YWx1ZS0+dHlwZSA9IElTX0xPTkc7
CisJWl9MVkFMX1AocmV0dXJuX3ZhbHVlKSA9IHRieXRlczsKKwlaX1RZUEVfUChyZXR1cm5f
dmFsdWUpID0gSVNfTE9ORzsKIH0KIC8qIH19fSAqLwogCkBAIC0xNzMxLDggKzE3OTcsNiBA
QAogCWludCBpZCA9IC0xOwogCVBHY29ubiAqcGdzcWw7CiAJT2lkIG9pZDsKLQlQTFNfRkVU
Q0goKTsKLQlQR0xTX0ZFVENIKCk7CiAJCiAJc3dpdGNoIChaRU5EX05VTV9BUkdTKCkpIHsK
IAkJY2FzZSAxOgpAQCAtMTc3Nyw3ICsxODQxLDYgQEAKIAlpbnQgaWQgPSAtMTsKIAlPaWQg
b2lkOwogCVBHY29ubiAqcGdzcWw7Ci0JUEdMU19GRVRDSCgpOwogCQogCXN3aXRjaCAoWkVO
RF9OVU1fQVJHUygpKSB7CiAJCWNhc2UgMjoKQEAgLTE4MjIsNyArMTg4NSw2IEBACiAJenZh
bCAqKmVuY29kaW5nLCAqKnBnc3FsX2xpbmsgPSBOVUxMOwogCWludCBpZCA9IC0xOwogCVBH
Y29ubiAqcGdzcWw7Ci0JUEdMU19GRVRDSCgpOwogCiAJc3dpdGNoKFpFTkRfTlVNX0FSR1Mo
KSkgewogCQljYXNlIDE6CkBAIC0xODQ1LDggKzE5MDcsOCBAQAogCVpFTkRfRkVUQ0hfUkVT
T1VSQ0UyKHBnc3FsLCBQR2Nvbm4gKiwgcGdzcWxfbGluaywgaWQsICJQb3N0Z3JlU1FMIGxp
bmsiLCBsZV9saW5rLCBsZV9wbGluayk7CiAKIAljb252ZXJ0X3RvX3N0cmluZ19leChlbmNv
ZGluZyk7Ci0JcmV0dXJuX3ZhbHVlLT52YWx1ZS5sdmFsID0gUFFzZXRDbGllbnRFbmNvZGlu
ZyhwZ3NxbCwgWl9TVFJWQUxfUFAoZW5jb2RpbmcpKTsKLQlyZXR1cm5fdmFsdWUtPnR5cGUg
PSBJU19MT05HOworCVpfTFZBTF9QKHJldHVybl92YWx1ZSkgPSBQUXNldENsaWVudEVuY29k
aW5nKHBnc3FsLCBaX1NUUlZBTF9QUChlbmNvZGluZykpOworCVpfVFlQRV9QKHJldHVybl92
YWx1ZSkgPSBJU19MT05HOwogCiB9CiAvKiB9fX0gKi8KQEAgLTE4NTgsNyArMTkyMCw2IEBA
CiAJenZhbCAqKnBnc3FsX2xpbmsgPSBOVUxMOwogCWludCBpZCA9IC0xOwogCVBHY29ubiAq
cGdzcWw7Ci0JUEdMU19GRVRDSCgpOwogCiAJc3dpdGNoKFpFTkRfTlVNX0FSR1MoKSkgewog
CQljYXNlIDA6CkBAIC0xODgzLDE1ICsxOTQ0LDE0IEBACiAjZGVmaW5lIHBnX2VuY29kaW5n
X3RvX2NoYXIoeCkgIlNRTF9BU0NJSSIKICNlbmRpZgogCi0JcmV0dXJuX3ZhbHVlLT52YWx1
ZS5zdHIudmFsIAorWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpIAogCQk9IChjaGFyICopIHBn
X2VuY29kaW5nX3RvX2NoYXIoUFFjbGllbnRFbmNvZGluZyhwZ3NxbCkpOwotCXJldHVybl92
YWx1ZS0+dmFsdWUuc3RyLmxlbiA9IHN0cmxlbihyZXR1cm5fdmFsdWUtPnZhbHVlLnN0ci52
YWwpOwotCXJldHVybl92YWx1ZS0+dmFsdWUuc3RyLnZhbCA9IChjaGFyICopIGVzdHJkdXAo
cmV0dXJuX3ZhbHVlLT52YWx1ZS5zdHIudmFsKTsKLQlyZXR1cm5fdmFsdWUtPnR5cGUgPSBJ
U19TVFJJTkc7CisJWl9TVFJMRU5fUChyZXR1cm5fdmFsdWUpID0gc3RybGVuKFpfU1RSVkFM
X1AocmV0dXJuX3ZhbHVlKSk7CisJWl9TVFJWQUxfUChyZXR1cm5fdmFsdWUpID0gKGNoYXIg
KikgZXN0cmR1cChaX1NUUlZBTF9QKHJldHVybl92YWx1ZSkpOworCVpfVFlQRV9QKHJldHVy
bl92YWx1ZSkgPSBJU19TVFJJTkc7CiB9CiAvKiB9fX0gKi8KICNlbmRpZgotCQogI2VuZGlm
CiAKIC8qCkBAIC0xODk5LDUgKzE5NTksNyBAQAogICogdGFiLXdpZHRoOiA0CiAgKiBjLWJh
c2ljLW9mZnNldDogNAogICogRW5kOgorICogdmltNjAwOiBzdz00IHRzPTQgZmRtPW1hcmtl
cgorICogdmltPDYwMDogc3c9NCB0cz00CiAgKi8KIAo=
--------------060007020409050406000707--

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/