[tpop3d-discuss] tpop3d w/TLS

Ben Schumacher ben at blahr.com
Fri, 2 Nov 2001 11:49:10 -0700 (MST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--0-1312331796-1004726950=:54412
Content-Type: TEXT/PLAIN; charset=US-ASCII

Chris-

Here is the patch. I tried to cleanup the code a little bit, but it could
probably use some more work. I tried to make sure that everything that
was necessary only for use with SSL/TLS is wrapped in #ifdef's, but I
might have missed something.

The only gotcha is that since OpenSSL has builtin MD5 support, I had to
disable the bundled md5 code in tpop3d.

Let me know if you have any questions.

Ben

On Thu, 1 Nov 2001, Chris Lightfoot wrote:

> On Thu, Nov 01, 2001 at 10:57:50AM -0700, Ben Schumacher wrote:
> > After a couple late nights of hacking and a lot of beating my head against
> > the wall, I got TLS working with tpop3d. Right now, it only support STLS
> > -- starting TLS after an unencrypted connection has already been
> > established on 110 -- but I think it would be pretty simple to get it to
> > support pop3s, or SSL to start with over port 995.
> > 
> > The code probably needs some cleanup and sanity checking, but I used
> > OpenSSL, so it should be fairly portable. I don't know a lot about setting
> > up autoconf scripts, so I haven't modified configure.in to have a
> > --with-openssl option, or the like.
> > 
> > So far the code has only been configured to mbox, and not mdir. The
> > reason for this is that the send_message function expects a socket, so I
> > had to add a special tls_send_message function to mbox that accepts an
> > SSL type. If anybody's interested, I could diff what I have and post it to
> > the list for you.
> > 
> > Just wanted to give everybody a heads up that it is possible and not all
> > that difficult to get TLS working with tpop3d!
> 
> Wow. This is on the TODO list, but I didn't think I'd get
> around to it any time soon. I'd welcome a copy of the
> patch if you're happy to have your code in the
> distribution and I'll see what needs to be done to clean
> the interface up a bit.
> 
> -- 
>  In view of the fact that God limited man's intelligence,
>  it is a pity that He did not also limit his stupidity (Adenauer)
> 
> _______________________________________________
> tpop3d-discuss mailing list
> tpop3d-discuss@lists.beasts.org
> http://lists.beasts.org/mailman/listinfo/tpop3d-discuss
> 

--0-1312331796-1004726950=:54412
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="tpop3d-1.3.5-ssl.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.4.21.0111021149100.54412@hiro.blahr.com>
Content-Description: 
Content-Disposition: attachment; filename="tpop3d-1.3.5-ssl.patch"

ZGlmZiAtdSAtLW5ldy1maWxlIHRwb3AzZC0xLjMuNS5vcmlnL01ha2VmaWxl
LmFtIHRwb3AzZC0xLjMuNS9NYWtlZmlsZS5hbQ0KLS0tIHRwb3AzZC0xLjMu
NS5vcmlnL01ha2VmaWxlLmFtCVNhdCBPY3QgMjcgMTA6Mzc6MzAgMjAwMQ0K
KysrIHRwb3AzZC0xLjMuNS9NYWtlZmlsZS5hbQlXZWQgT2N0IDMxIDAxOjEx
OjI0IDIwMDENCkBAIC0zMyw2ICszMyw3IEBADQogICAgICAgICAgICAgICAg
ICBzdHJ0b2tfci5jIFwNCiAgICAgICAgICAgICAgICAgIHN1YnN0dmFycy5j
IFwNCiAgICAgICAgICAgICAgICAgIHRva2VuaXNlLmMgXA0KKyAgICAgICAg
ICAgICAgICAgdHB0bHMuYyBcDQogICAgICAgICAgICAgICAgICB1dGlsLmMg
XA0KICAgICAgICAgICAgICAgICAgdmVjdG9yLmMNCiANCkBAIC01NSw2ICs1
Niw3IEBADQogICAgICAgICAgICAgICAgICBzaWduYWxzLmggXA0KICAgICAg
ICAgICAgICAgICAgc3RyaW5nbWFwLmggXA0KICAgICAgICAgICAgICAgICAg
dG9rZW5pc2UuaCBcDQorICAgICAgICAgICAgICAgICB0cHRscy5oIFwNCiAg
ICAgICAgICAgICAgICAgIHZlY3Rvci5oIFwNCiAgICAgICAgICAgICAgICAg
IHV0aWwuaA0KIA0KZGlmZiAtdSAtLW5ldy1maWxlIHRwb3AzZC0xLjMuNS5v
cmlnL2NmZ2RpcmVjdGl2ZXMuYyB0cG9wM2QtMS4zLjUvY2ZnZGlyZWN0aXZl
cy5jDQotLS0gdHBvcDNkLTEuMy41Lm9yaWcvY2ZnZGlyZWN0aXZlcy5jCVNh
dCBPY3QgMTMgMTk6NTU6NDEgMjAwMQ0KKysrIHRwb3AzZC0xLjMuNS9jZmdk
aXJlY3RpdmVzLmMJRnJpIE5vdiAgMiAxMDozNzoxMiAyMDAxDQpAQCAtNzYs
NiArNzYsMTEgQEANCiAjaWZkZWYgVVNFX1RDUF9XUkFQUEVSUw0KICAgICAi
dGNwLXdyYXBwZXJzLW5hbWUiLA0KICNlbmRpZg0KKw0KKyNpZmRlZiBVU0Vf
T1BFTlNTTF9UTFMNCisgICAgInRscy1jZXJ0aWZpY2F0ZS1maWxlIiwNCisg
ICAgInRscy1wcml2YXRla2V5LWZpbGUiLA0KKyNlbmRpZg0KICAgICANCiAg
ICAgLyogZmluYWwgZW50cnkgbXVzdCBiZSBOVUxMICovDQogICAgIE5VTEx9
Ow0KZGlmZiAtdSAtLW5ldy1maWxlIHRwb3AzZC0xLjMuNS5vcmlnL2Nvbm5l
Y3Rpb24uYyB0cG9wM2QtMS4zLjUvY29ubmVjdGlvbi5jDQotLS0gdHBvcDNk
LTEuMy41Lm9yaWcvY29ubmVjdGlvbi5jCVNhdCBPY3QgMjAgMTk6MzA6NDAg
MjAwMQ0KKysrIHRwb3AzZC0xLjMuNS9jb25uZWN0aW9uLmMJRnJpIE5vdiAg
MiAxMDozNzoxMiAyMDAxDQpAQCAtMzEsNiArMzEsNyBAQA0KIA0KICNpbmNs
dWRlICJjb25uZWN0aW9uLmgiDQogI2luY2x1ZGUgInV0aWwuaCINCisjaW5j
bHVkZSAidHB0bHMuaCINCiANCiBleHRlcm4gaW50IHZlcmJvc2U7DQogDQpA
QCAtMTIwLDYgKzEyMSwxMCBAQA0KICAgICAgICAgZ290byBmYWlsOw0KICAg
ICB9DQogDQorI2lmZGVmIFVTRV9PUEVOU1NMX1RMUw0KKyAgICBjLT50bHNf
ZW5hYmxlZCA9IDA7DQorI2VuZGlmDQorDQogICAgIHJldHVybiBjOw0KIA0K
ICAgICBmYWlsOg0KQEAgLTEzOCw2ICsxNDMsMTAgQEANCiAgICAgICAgIGNs
b3NlKGMtPnMpOw0KICAgICB9DQogDQorI2lmZGVmIFVTRV9PUEVOU1NMX1RM
Uw0KKyAgICBpZiAoYy0+dGxzX2VuYWJsZWQpIHRsc19zdG9wX3NlcnZlcnRs
cyhjKTsNCisjZW5kaWYNCisNCiAgICAgaWYgKGMtPmEpIGF1dGhjb250ZXh0
X2RlbGV0ZShjLT5hKTsNCiAgICAgaWYgKGMtPm0pIChjLT5tKS0+ZGVsZXRl
KGMtPm0pOw0KIA0KQEAgLTE2Myw3ICsxNzIsMTMgQEANCiAgICAgICAgIHJl
dHVybiAtMTsNCiAgICAgfQ0KICAgICBkbyB7DQotICAgICAgICBuID0gcmVh
ZChjLT5zLCBjLT5wLCBjLT5idWZmZXIgKyBjLT5idWZmZXJsZW4gLSBjLT5w
KTsNCisjaWZkZWYgVVNFX09QRU5TU0xfVExTDQorICAgICAgICBpZiAoYy0+
dGxzX2VuYWJsZWQpDQorICAgICAgICAgICAgbiA9IFNTTF9yZWFkKGMtPnRs
c19jb25uZWN0aW9uLCBjLT5wLA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjLT5idWZmZXIgKyBjLT5idWZmZXJsZW4gLSBjLT5wKTsNCisgICAgICAg
IGVsc2UgDQorI2VuZGlmDQorICAgICAgICAgICAgbiA9IHJlYWQoYy0+cywg
Yy0+cCwgYy0+YnVmZmVyICsgYy0+YnVmZmVybGVuIC0gYy0+cCk7DQogICAg
IH0gd2hpbGUgKG4gPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOw0KICAgICBp
ZiAobiA+IDApIGMtPnAgKz0gbjsNCiAgICAgcmV0dXJuIG47DQpAQCAtMjA2
LDYgKzIyMSwxMCBAQA0KICAgICAgeyJVSURMIiwgVUlETH0sDQogICAgICB7
IlVTRVIiLCBVU0VSfSwNCiAgICAgIHsiTEFTVCIsIExBU1R9LA0KKyAgICAg
eyJDQVBBIiwgQ0FQQX0sDQorI2lmZGVmIFVTRV9PUEVOU1NMX1RMUw0KKyAg
ICAgeyJTVExTIiwgU1RMU30sDQorI2VuZGlmDQogICAgICB7TlVMTCwgICBV
TktOT1dOfX07IC8qIGxhc3QgY29tbWFuZCBNVVNUIGhhdmUgcyA9IE5VTEwg
Ki8NCiANCiBwb3AzY29tbWFuZCBjb25uZWN0aW9uX3BhcnNlY29tbWFuZChj
b25uZWN0aW9uIGMpIHsNCkBAIC0yOTQsNyArMzEzLDE0IEBADQogICAgIHgg
PSB4bWFsbG9jKGwgPSAoNCArIHN0cmxlbihzKSArIDMgKyAxKSk7DQogICAg
IGlmICgheCkgcmV0dXJuIDA7DQogICAgIHNucHJpbnRmKHgsIGwsICIlcyAl
c1xyXG4iLCBzdWNjZXNzID8gIitPSyIgOiAiLUVSUiIsIHMpOw0KLSAgICBt
ID0geHdyaXRlKGMtPnMsIHgsIGwgPSBzdHJsZW4oeCkpOw0KKw0KKyNpZmRl
ZiBVU0VfT1BFTlNTTF9UTFMNCisgICAgaWYgKGMtPnRsc19lbmFibGVkKQ0K
KyAgICAgICAgbSA9IFNTTF93cml0ZShjLT50bHNfY29ubmVjdGlvbiwgeCwg
bCA9IHN0cmxlbih4KSk7DQorICAgIGVsc2UNCisjZW5kaWYNCisNCisgICAg
ICAgIG0gPSB4d3JpdGUoYy0+cywgeCwgbCA9IHN0cmxlbih4KSk7DQogICAg
IHhmcmVlKHgpOw0KICAgICBpZiAodmVyYm9zZSkNCiAgICAgICAgIHByaW50
X2xvZyhMT0dfREVCVUcsIF8oImNvbm5lY3Rpb25fc2VuZHJlc3BvbnNlOiBj
bGllbnQgJXM6IHNlbnQgYCVzICVzJyIpLCBjLT5pZHN0ciwgc3VjY2Vzcz8g
IitPSyIgOiAiLUVSUiIsIHMpOw0KQEAgLTMxMSw3ICszMzcsMTQgQEANCiAg
ICAgeCA9IHhtYWxsb2MobCA9ICgzICsgc3RybGVuKHMpKSk7DQogICAgIGlm
ICgheCkgcmV0dXJuIDA7DQogICAgIHNucHJpbnRmKHgsIGwsICIlc1xyXG4i
LCBzKTsNCi0gICAgbSA9IHh3cml0ZShjLT5zLCB4LCBsID0gc3RybGVuKHgp
KTsNCisNCisjaWZkZWYgVVNFX09QRU5TU0xfVExTDQorICAgIGlmIChjLT50
bHNfZW5hYmxlZCkNCisgICAgICAgIG0gPSBTU0xfd3JpdGUoYy0+dGxzX2Nv
bm5lY3Rpb24sIHgsIGwgPSBzdHJsZW4oeCkpOw0KKyAgICBlbHNlDQorI2Vu
ZGlmDQorDQorICAgICAgICBtID0geHdyaXRlKGMtPnMsIHgsIGwgPSBzdHJs
ZW4oeCkpOw0KICAgICB4ZnJlZSh4KTsNCiAgICAgcmV0dXJuIChtID09IGwp
Ow0KIH0NCmRpZmYgLXUgLS1uZXctZmlsZSB0cG9wM2QtMS4zLjUub3JpZy9j
b25uZWN0aW9uLmggdHBvcDNkLTEuMy41L2Nvbm5lY3Rpb24uaA0KLS0tIHRw
b3AzZC0xLjMuNS5vcmlnL2Nvbm5lY3Rpb24uaAlUaHUgSnVuICA3IDE0OjEz
OjE3IDIwMDENCisrKyB0cG9wM2QtMS4zLjUvY29ubmVjdGlvbi5oCUZyaSBO
b3YgIDIgMTA6Mzc6MTIgMjAwMQ0KQEAgLTExLDYgKzExLDEzIEBADQogI2lm
bmRlZiBfX0NPTk5FQ1RJT05fSF8gLyogaW5jbHVkZSBndWFyZCAqLw0KICNk
ZWZpbmUgX19DT05ORUNUSU9OX0hfDQogDQorI2lmZGVmIFVTRV9PUEVOU1NM
X1RMUw0KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPg0KKyNkZWZpbmUgTUQ1
SW5pdCAgIE1ENV9Jbml0DQorI2RlZmluZSBNRDVVcGRhdGUgTUQ1X1VwZGF0
ZQ0KKyNkZWZpbmUgTUQ1RmluYWwgIE1ENV9GaW5hbA0KKyNlbmRpZg0KKw0K
ICNpbmNsdWRlIDxwd2QuaD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPg0K
ICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQpAQCAtNDQsNiArNTEsMTEgQEAN
CiANCiAgICAgdGltZV90IGlkbGVzaW5jZTsgICAgICAgLyogdXNlZCB0byBp
bXBsZW1lbnQgdGltZW91dHMgKi8NCiANCisjaWZkZWYgVVNFX09QRU5TU0xf
VExTDQorICAgIGludCB0bHNfZW5hYmxlZDsgICAgICAgIC8qIFRMUyBlbmFi
bGVkIG9uIHRoaXMgY29ubmVjdGlvbj8gICovDQorICAgIFNTTCAqdGxzX2Nv
bm5lY3Rpb247ICAgIC8qIHRoZSBPcGVuU1NMIFRMUyBjb25uZWN0aW9uICAg
ICAgICovDQorI2VuZGlmDQorDQogICAgIGludCBuX2F1dGhfdHJpZXMsIG5f
ZXJyb3JzOw0KICAgICBjaGFyICp1c2VyLCAqcGFzczsgICAgICAvKiBzdGF0
ZSBhY2N1bXVsYXRlZCAqLw0KICAgICBhdXRoY29udGV4dCBhOw0KQEAgLTU2
LDcgKzY4LDExIEBADQogICAgICAgICAgICAgICAgICAgICAgICAgTk9PUCwg
UEFTUywgUVVJVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBSRVRSLCBS
U0VULCBTVEFULA0KICAgICAgICAgICAgICAgICAgICAgICAgIFRPUCwgIFVJ
REwsIFVTRVIsDQotICAgICAgICAgICAgICAgICAgICAgICAgTEFTVH07DQor
ICAgICAgICAgICAgICAgICAgICAgICAgTEFTVCwgQ0FQQSwNCisjaWZkZWYg
VVNFX09QRU5TU0xfVExTDQorICAgICAgICAgICAgICAgICAgICAgICAgU1RM
UywNCisjZW5kaWYNCisgICAgICAgICAgICAgICAgICAgICAgIH07DQogICAg
IA0KIHR5cGVkZWYgc3RydWN0IF9wb3AzY29tbWFuZCB7DQogICAgIGVudW0g
cG9wM19jb21tYW5kX2NvZGUgY21kOw0KZGlmZiAtdSAtLW5ldy1maWxlIHRw
b3AzZC0xLjMuNS5vcmlnL21haWxib3guaCB0cG9wM2QtMS4zLjUvbWFpbGJv
eC5oDQotLS0gdHBvcDNkLTEuMy41Lm9yaWcvbWFpbGJveC5oCVN1biBKdWwg
IDggMTA6NTc6MDkgMjAwMQ0KKysrIHRwb3AzZC0xLjMuNS9tYWlsYm94LmgJ
RnJpIE5vdiAgMiAxMDozODo1MyAyMDAxDQpAQCAtNDMsNiArNDMsMTAgQEAN
CiANCiAjaW5jbHVkZSA8c3RkaW8uaD4NCiANCisjaWZkZWYgVVNFX09QRU5T
U0xfVExTDQorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+DQorI2VuZGlmDQor
DQogLyogc3RydWN0IGluZGV4cG9pbnQ6DQogICogSW5kaXZpZHVhbCBtZXNz
YWdlcyB3aGljaCBhcHBlYXIgYXMgZmlsZXMgb24gRlMgZm9yIG1haWxkaXIg
b3Igc2VjdGlvbnMgb2YNCiAgKiBhIGZpbGUgaW4gYSBCU0QgbWFpbHNwb29s
Lg0KQEAgLTczLDYgKzc3LDEwIEBADQogICAgIHZvaWQgICAgKCpkZWxldGUp
KG1haWxib3ggbSk7DQogICAgIGludCAgICAgKCpzZW5kX21lc3NhZ2UpKG1h
aWxib3ggbSwgaW50IHNjaywgY29uc3QgaW50IGksIGludCBuKTsNCiAgICAg
aW50ICAgICAoKmFwcGx5X2NoYW5nZXMpKG1haWxib3ggbSk7DQorDQorI2lm
ZGVmIFVTRV9PUEVOU1NMX1RMUw0KKyAgICBpbnQgICAgICgqdGxzX3NlbmRf
bWVzc2FnZSkobWFpbGJveCBtLCBTU0wgKnRscywgY29uc3QgaW50IGksIGlu
dCBuKTsNCisjZW5kaWYNCiB9Ow0KIA0KIC8qIFJldHVybiBjb2RlIGZyb20g
YSBtYWlsYm94IGNvbnN0cnVjdG9yIHVzZWQgdG8gaW5kaWNhdGUgbm9uLXBy
ZXNlbmNlIG9mIHRoZQ0KQEAgLTEwNyw2ICsxMTUsMTAgQEANCiBpbnQgICAg
IG1haWxzcG9vbF9idWlsZF9pbmRleChtYWlsYm94IG0sIGNoYXIgKmZpbGVt
ZW0pOw0KIGludCAgICAgbWFpbHNwb29sX3NlbmRfbWVzc2FnZShtYWlsYm94
IG0sIGludCBzY2ssIGNvbnN0IGludCBpLCBpbnQgbik7DQogaW50ICAgICBt
YWlsc3Bvb2xfYXBwbHlfY2hhbmdlcyhtYWlsYm94IG0pOw0KKw0KKyNpZmRl
ZiBVU0VfT1BFTlNTTF9UTFMNCitpbnQgICAgIG1haWxzcG9vbF90bHNfc2Vu
ZF9tZXNzYWdlKG1haWxib3ggTSwgU1NMICp0bHMsIGNvbnN0IGludCBpLCBp
bnQgbik7DQorI2VuZGlmDQogDQogLyogSG93IGxvbmcgd2Ugd2FpdCBiZXR3
ZWVuIHRyeWluZyB0byBsb2NrIHRoZSBtYWlsc3Bvb2wgKi8NCiAjZGVmaW5l
IE1BSUxTUE9PTF9MT0NLX1dBSVQgICAgICAgICAgIDINCmRpZmYgLXUgLS1u
ZXctZmlsZSB0cG9wM2QtMS4zLjUub3JpZy9tYWlsc3Bvb2wuYyB0cG9wM2Qt
MS4zLjUvbWFpbHNwb29sLmMNCi0tLSB0cG9wM2QtMS4zLjUub3JpZy9tYWls
c3Bvb2wuYwlTYXQgT2N0IDEzIDE5OjU1OjQyIDIwMDENCisrKyB0cG9wM2Qt
MS4zLjUvbWFpbHNwb29sLmMJRnJpIE5vdiAgMiAxMDo0MDoxOCAyMDAxDQpA
QCAtMSwzICsxLDQgQEANCitCDQogLyoNCiAgKiBtYWlsc3Bvb2wuYzoNCiAg
KiBCZXJrZWxleSBtYWlsc3Bvb2wgaGFuZGxpbmcuDQpAQCAtNDksNiArNTAs
NyBAQA0KICNpbmNsdWRlICJtYWlsYm94LmgiDQogI2luY2x1ZGUgIm1kNS5o
Ig0KICNpbmNsdWRlICJzdHJpbmdtYXAuaCINCisjaW5jbHVkZSAidHB0bHMu
aCINCiAjaW5jbHVkZSAidXRpbC5oIg0KIA0KICNpZmRlZiBNQk9YX0JTRF9T
QVZFX0lORElDRVMNCkBAIC0xNDksNiArMTUxLDEwIEBADQogICAgIE0tPmFw
cGx5X2NoYW5nZXMgPSBtYWlsc3Bvb2xfYXBwbHlfY2hhbmdlczsNCiAgICAg
TS0+c2VuZF9tZXNzYWdlID0gbWFpbHNwb29sX3NlbmRfbWVzc2FnZTsNCiAN
CisjaWZkZWYgVVNFX09QRU5TU0xfVExTDQorICAgIE0tPnRsc19zZW5kX21l
c3NhZ2UgPSBtYWlsc3Bvb2xfdGxzX3NlbmRfbWVzc2FnZTsNCisjZW5kaWYN
CisNCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBpbmRleC4gKi8N
CiAgICAgTS0+aW5kZXggPSAoc3RydWN0IGluZGV4cG9pbnQqKXhjYWxsb2Mo
MzIsIHNpemVvZihzdHJ1Y3QgaW5kZXhwb2ludCkpOw0KICAgICBNLT5zaXpl
ID0gMzI7DQpAQCAtMzY2LDggKzM3MiwyMiBAQA0KICAgICBpZiAoIU0pIHJl
dHVybiAwOw0KICAgICBpZiAoaSA8IDAgfHwgaSA+PSBNLT5udW0pIHJldHVy
biAwOw0KICAgICB4ID0gTS0+aW5kZXggKyBpOw0KKw0KICAgICByZXR1cm4g
d3JpdGVfZmlsZShNLT5mZCwgc2NrLCB4LT5vZmZzZXQsIHgtPmxlbmd0aCAr
IDEsIHgtPm1zZ2xlbmd0aCwgbik7DQogfQ0KKw0KKyNpZmRlZiBVU0VfT1BF
TlNTTF9UTFMNCitpbnQgbWFpbHNwb29sX3Rsc19zZW5kX21lc3NhZ2UoY29u
c3QgbWFpbGJveCBNLCBTU0wgKnRscywgY29uc3QgaW50IGksIGludCBuKSB7
DQorICAgIHN0cnVjdCBpbmRleHBvaW50ICp4Ow0KKw0KKyAgICBpZiAoIU0p
IHJldHVybiAwOw0KKyAgICBpZiAoaSA8IDAgfHwgaSA+PSBNLT5udW0pIHJl
dHVybiAwOw0KKyAgICB4ID0gTS0+aW5kZXggKyBpOw0KKw0KKyAgICByZXR1
cm4gdGxzX3dyaXRlX2ZpbGUoTS0+ZmQsIHRscywgeC0+b2Zmc2V0LCB4LT5s
ZW5ndGggKyAxLCB4LT5tc2dsZW5ndGgsIG4pOw0KK30NCisjZW5kaWYNCisN
CiANCiAvKiBtYWlsc3Bvb2xfYXBwbHlfY2hhbmdlczoNCiAgKiBBcHBseSBk
ZWxldGlvbnMgdG8gYSBtYWlsc3Bvb2wgYnkgbWFwcGluZyBpdCBhbmQgY29w
eWluZyBpdCBpbiBibG9ja3MuDQpkaWZmIC11IC0tbmV3LWZpbGUgdHBvcDNk
LTEuMy41Lm9yaWcvbWFpbi5jIHRwb3AzZC0xLjMuNS9tYWluLmMNCi0tLSB0
cG9wM2QtMS4zLjUub3JpZy9tYWluLmMJRnJpIE9jdCAyNiAxNjozMjoxMSAy
MDAxDQorKysgdHBvcDNkLTEuMy41L21haW4uYwlGcmkgTm92ICAyIDEwOjM3
OjEyIDIwMDENCkBAIC00Nyw2ICs0Nyw4IEBADQogI2luY2x1ZGUgInZlY3Rv
ci5oIg0KICNpbmNsdWRlICJ1dGlsLmgiDQogDQorI2luY2x1ZGUgInRwdGxz
LmgiDQorDQogLyogVGhlIHNvY2tldCBzZW5kIGJ1ZmZlciBpcyBzZXQgdG8g
dGhpcywgc28gdGhhdCB3ZSBkb24ndCBlbmQgdXAgaW4gYQ0KICAqIHBvc2l0
aW9uIHRoYXQgd2Ugc2VuZCBzbyBtdWNoIGRhdGEgdGhhdCB0aGUgY2xpZW50
IHdpbGwgbm90IGhhdmUgcmVjZWl2ZWQNCiAgKiBhbGwgb2YgaXQgYmVmb3Jl
IHdlIHRpbWUgdGhlbSBvdXQuDQpAQCAtNzksNiArODEsMTAgQEANCiBjb25u
ZWN0aW9uICpjb25uZWN0aW9uczsgICAgICAgICAgICAvKiBBY3RpdmUgY29u
bmVjdGlvbnMuICovDQogc2l6ZV90IG1heF9jb25uZWN0aW9uczsgICAgICAg
ICAgICAgLyogTnVtYmVyIG9mIGNvbm5lY3Rpb24gc2xvdHMgYWxsb2NhdGVk
LiAqLw0KIA0KKyNpZmRlZiBVU0VfT1BFTlNTTF9UTFMNCitpbnQgdGxzX2Vu
Z2luZV9zdGFydGVkID0gMDsgICAgICAgICAvKiBJcyB0aGUgU1NML1RMUyBl
bmdpbmUgaXMgcnVubmluZz8gKi8NCisjZW5kaWYNCisNCiAvKiBUaGVvcnkg
b2Ygb3BlcmF0aW9uOg0KICAqIFRoZSBtYWluIGxvb3AgaXMgaW4gbmV0X2xv
b3AsIGJlbG93OyBpdCBjYWxscyBsaXN0ZW5lcnNfIGFuZA0KICAqIGNvbm5l
Y3Rpb25zX3ByZV9zZWxlY3QsIHRoZW4gY2FsbHMgc2VsZWN0LCB0aGVuIGNh
bGxzIGxpc3RlbmVyc18gYW5kDQpAQCAtNjkyLDYgKzY5OCwxMyBAQA0KICAg
ICAgICAgcHJpbnRfbG9nKExPR19FUlIsIF8oIiVzOiBubyBsaXN0ZW4gYWRk
cmVzc2VzIG9idGFpbmVkOyBleGl0aW5nIiksIGNvbmZpZ2ZpbGUpOw0KICAg
ICAgICAgRVhJVF9SRU1PVklOR19QSURGSUxFKDEpOw0KICAgICB9DQorDQor
I2lmZGVmIFVTRV9PUEVOU1NMX1RMUw0KKyAgICBpZiAoISh0bHNfZW5naW5l
X3N0YXJ0ZWQgPSB0bHNfaW5pdF9lbmdpbmUoKSkpIHsNCisgICAgICAgIHBy
aW50X2xvZyhMT0dfRVJSLCBfKCJjYW4ndCBpbml0aWFsaXplIFRMUyBlbmdp
bmUiKSk7DQorICAgICAgICB0bHNfc3RvcF9lbmdpbmUoKTsNCisgICAgfQ0K
KyNlbmRpZg0KIA0KICAgICAvKiBGaW5kIG91dCB0aGUgbWF4aW11bSBudW1i
ZXIgb2YgY2hpbGRyZW4gd2UgbWF5IHNwYXduIGF0IG9uY2UuICovDQogICAg
IHN3aXRjaChjb25maWdfZ2V0X2ludCgibWF4LWNoaWxkcmVuIiwgJm1heF9y
dW5uaW5nX2NoaWxkcmVuKSkgew0KZGlmZiAtdSAtLW5ldy1maWxlIHRwb3Az
ZC0xLjMuNS5vcmlnL21kNS5oIHRwb3AzZC0xLjMuNS9tZDUuaA0KLS0tIHRw
b3AzZC0xLjMuNS5vcmlnL21kNS5oCVRodSBKdW4gIDcgMTQ6MTM6MTcgMjAw
MQ0KKysrIHRwb3AzZC0xLjMuNS9tZDUuaAlGcmkgTm92ICAyIDEwOjM3OjEy
IDIwMDENCkBAIC0yMyw2ICsyMyw4IEBADQogZG9jdW1lbnRhdGlvbiBhbmQv
b3Igc29mdHdhcmUuDQogICovDQogDQorI2lmbmRlZiBVU0VfT1BFTlNTTF9U
TFMNCisNCiAjaW5jbHVkZSAiZ2xvYmFsLmgiDQogDQogLyogTUQ1IGNvbnRl
eHQuICovDQpAQCAtMzYsMyArMzgsNSBAQA0KIHZvaWQgTUQ1VXBkYXRlIFBS
T1RPX0xJU1QNCiAgICgoTUQ1X0NUWCAqLCB1bnNpZ25lZCBjaGFyICosIHVu
c2lnbmVkIGludCkpOw0KIHZvaWQgTUQ1RmluYWwgUFJPVE9fTElTVCAoKHVu
c2lnbmVkIGNoYXIgWzE2XSwgTUQ1X0NUWCAqKSk7DQorDQorI2VuZGlmDQpk
aWZmIC11IC0tbmV3LWZpbGUgdHBvcDNkLTEuMy41Lm9yaWcvbWQ1Yy5jIHRw
b3AzZC0xLjMuNS9tZDVjLmMNCi0tLSB0cG9wM2QtMS4zLjUub3JpZy9tZDVj
LmMJU2F0IE9jdCAxMyAxOTo1NTo0MiAyMDAxDQorKysgdHBvcDNkLTEuMy41
L21kNWMuYwlGcmkgTm92ICAyIDEwOjM3OjEyIDIwMDENCkBAIC0yMyw2ICsy
Myw4IEBADQogZG9jdW1lbnRhdGlvbiBhbmQvb3Igc29mdHdhcmUuDQogICov
DQogDQorI2lmbmRlZiBVU0VfT1BFTlNTTF9UTFMNCisNCiAjaW5jbHVkZSAi
bWQ1LmgiDQogDQogI2luY2x1ZGUgPG1lbW9yeS5oPg0KQEAgLTMzOCwzICsz
NDAsNSBAQA0KICovDQogICBtZW1zZXQob3V0cHV0LHZhbHVlLGxlbik7DQog
fQ0KKw0KKyNlbmRpZg0KZGlmZiAtdSAtLW5ldy1maWxlIHRwb3AzZC0xLjMu
NS5vcmlnL3BvcDMuYyB0cG9wM2QtMS4zLjUvcG9wMy5jDQotLS0gdHBvcDNk
LTEuMy41Lm9yaWcvcG9wMy5jCVNhdCBPY3QgMTMgMTk6NTU6NDMgMjAwMQ0K
KysrIHRwb3AzZC0xLjMuNS9wb3AzLmMJRnJpIE5vdiAgMiAxMDozNzoxMiAy
MDAxDQpAQCAtMjYsOSArMjYsMTQgQEANCiAjaW5jbHVkZSAiYXV0aHN3aXRj
aC5oIg0KICNpbmNsdWRlICJjb25uZWN0aW9uLmgiDQogI2luY2x1ZGUgInV0
aWwuaCINCisjaW5jbHVkZSAidHB0bHMuaCINCiANCiBleHRlcm4gaW50IHZl
cmJvc2U7DQogDQorI2lmZGVmIFVTRV9PUEVOU1NMX1RMUw0KK2V4dGVybiBp
bnQgdGxzX2VuZ2luZV9zdGFydGVkOw0KKyNlbmRpZg0KKw0KIC8qIGNvbm5l
Y3Rpb25fZG86DQogICogTWFrZXMgYSBjb21tYW5kIGRvIHNvbWV0aGluZyBv
biBhIGNvbm5lY3Rpb24sIHJldHVybmluZyBhIGNvZGUgaW5kaWNhdGluZw0K
ICAqIHdoYXQgdGhlIGNhbGxlciBzaG91bGQgZG8uDQpAQCAtMzksOSArNDQs
NDQgQEANCiAgICAgLyogVGhpcyBicmVha3MgdGhlIFJGQywgYnV0IGlzIHNl
bnNpYmxlLiAqLw0KICAgICBpZiAocC0+Y21kICE9IE5PT1AgJiYgcC0+Y21k
ICE9IFVOS05PV04pIGMtPmlkbGVzaW5jZSA9IHRpbWUoTlVMTCk7DQogDQor
ICAgIGlmIChwLT5jbWQgPT0gQ0FQQSkgew0KKyAgICAgICAgY29ubmVjdGlv
bl9zZW5kcmVzcG9uc2UoYywgMSwgXygiSSBjYW4gaGFuZGxlIHRoZSBmb2xs
b3dpbmciKSk7DQorICAgICAgICBjb25uZWN0aW9uX3NlbmRsaW5lKGMsICJU
T1AiKTsNCisgICAgICAgIGNvbm5lY3Rpb25fc2VuZGxpbmUoYywgIlVTRVIi
KTsNCisgICAgICAgIGNvbm5lY3Rpb25fc2VuZGxpbmUoYywgIlVJREwiKTsN
CisNCisjaWZkZWYgVVNFX09QRU5TU0xfVExTDQorICAgICAgICBpZiAodGxz
X2VuZ2luZV9zdGFydGVkICYmICFjLT50bHNfZW5hYmxlZCkNCisgICAgICAg
ICAgICBjb25uZWN0aW9uX3NlbmRsaW5lKGMsICJTVExTIik7DQorI2VuZGlm
DQorDQorICAgICAgICBjb25uZWN0aW9uX3NlbmRsaW5lKGMsICIuIik7DQor
ICAgICAgICBjLT5pZGxlc2luY2UgPSB0aW1lKE5VTEwpOw0KKw0KKyAgICAg
ICAgcmV0dXJuIGRvX25vdGhpbmc7DQorICAgIH0NCisNCiAgICAgaWYgKGMt
PnN0YXRlID09IGF1dGhvcmlzYXRpb24pIHsNCiAgICAgICAgIC8qIEF1dGhv
cmlzYXRpb24gc3RhdGU6IGdhdGhlciB1c2VybmFtZSBhbmQgcGFzc3dvcmQu
ICovDQogICAgICAgICBzd2l0Y2ggKHAtPmNtZCkgew0KKyNpZmRlZiBVU0Vf
T1BFTlNTTF9UTFMNCisgICAgICAgIGNhc2UgU1RMUzoNCisgICAgICAgICAg
ICBpZiAoYy0+dGxzX2VuYWJsZWQpIHsNCisgICAgICAgICAgICAgICAgY29u
bmVjdGlvbl9zZW5kcmVzcG9uc2UoYywgMCwgXygiU1NML1RMUyBhbHJlYWR5
IHJ1bm5pbmchIikpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gZG9fbm90
aGluZzsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHRs
c19zdGFydF9zZXJ2ZXJ0bHMoYykpIHsNCisgICAgICAgICAgICAgICAgY29u
bmVjdGlvbl9zZW5kcmVzcG9uc2UoYywgMSwgXygiTGV0J3MgZW5jcnlwdCB5
b3VyIGNvbm5jZXRpb24gd2l0aCBUTFMiKSk7DQorICAgICAgICAgICAgICAg
IGMtPnRsc19lbmFibGVkID0gdGxzX2hhbmRzaGFrZShjKTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICBj
b25uZWN0aW9uX3NlbmRyZXNwb25zZShjLCAwLCBfKCJDYW4ndCBzdGFydCBT
U0wvVExTIG9uIHRoaXMgY29ubmVjdGlvbiIpKTsNCisNCisgICAgICAgICAg
ICByZXR1cm4gZG9fbm90aGluZzsNCisgICAgICAgICAgICBicmVhazsNCisj
ZW5kaWYNCisNCiAgICAgICAgIGNhc2UgVVNFUjoNCiAgICAgICAgICAgICBp
ZiAocC0+dG9rcy0+bnVtICE9IDIpIHsNCiAgICAgICAgICAgICAgICAgY29u
bmVjdGlvbl9zZW5kcmVzcG9uc2UoYywgMCwgXygiTm8sIHRoYXQncyBub3Qg
cmlnaHQuIikpOw0KQEAgLTM5MCwxMCArNDMwLDIxIEBADQogICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpbnRfbG9nKExPR19ERUJVRywgXygiY29ubmVj
dGlvbl9kbzogY2xpZW50ICVzOiBzZW5kaW5nIG1lc3NhZ2UgJWQgKCVkIGJ5
dGVzKSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGMtPmlkc3RyLCBtc2dfbnVtICsgMSwgKGludCljdXJtc2ctPm1zZ2xlbmd0
aCk7DQogICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX3NlbmRyZXNw
b25zZShjLCAxLCBfKCJNZXNzYWdlIGZvbGxvd3M6IikpOw0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCEoY3VybWJveCktPnNlbmRfbWVzc2FnZShjdXJt
Ym94LCBjLT5zLCBtc2dfbnVtLCAtMSkpIHsNCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25uZWN0aW9uX3NlbmRyZXNwb25zZShjLCAwLCBfKCJPb3Bz
IikpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9zZV9j
b25uZWN0aW9uOw0KKw0KKyNpZmRlZiBVU0VfT1BFTlNTTF9UTFMNCisgICAg
ICAgICAgICAgICAgICAgIGlmIChjLT50bHNfZW5hYmxlZCkgew0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghKGN1cm1ib3gpLT50bHNfc2VuZF9t
ZXNzYWdlKGN1cm1ib3gsIGMtPnRsc19jb25uZWN0aW9uLCBtc2dfbnVtLCAt
MSkpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlv
bl9zZW5kcmVzcG9uc2UoYywgMCwgXygiT29wcyIpKTsNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb3NlX2Nvbm5lY3Rpb247DQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyNlbmRpZg0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghKGN1cm1ib3gpLT5zZW5kX21l
c3NhZ2UoY3VybWJveCwgYy0+cywgbXNnX251bSwgLTEpKSB7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25fc2VuZHJlc3BvbnNl
KGMsIDAsIF8oIk9vcHMiKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjbG9zZV9jb25uZWN0aW9uOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0NCisNCiAgICAgICAgICAgICAgICAgICAgIC8qIFRoYXQg
bWlnaHQgaGF2ZSB0YWtlbiBhIGxvbmcgdGltZS4gKi8NCiAgICAgICAgICAg
ICAgICAgICAgIGMtPmlkbGVzaW5jZSA9IHRpbWUoTlVMTCk7DQogICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkNCmRpZmYgLXUgLS1uZXctZmls
ZSB0cG9wM2QtMS4zLjUub3JpZy90cHRscy5jIHRwb3AzZC0xLjMuNS90cHRs
cy5jDQotLS0gdHBvcDNkLTEuMy41Lm9yaWcvdHB0bHMuYwlXZWQgRGVjIDMx
IDE3OjAwOjAwIDE5NjkNCisrKyB0cG9wM2QtMS4zLjUvdHB0bHMuYwlGcmkg
Tm92ICAyIDExOjMzOjU5IDIwMDENCkBAIC0wLDAgKzEsMzcxIEBADQorLyoN
CisgKiB0cHRscy5jOg0KKyAqIEVuYWJsZXMgU1NML1RMUyBjb25uZWN0aW9u
cyBmb3IgdHBvcDNkLg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDAxIEJl
biBTY2h1bWFjaGVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICov
DQorDQorI2lmZGVmIFVTRV9PUEVOU1NMX1RMUw0KKw0KKyNpZmRlZiBIQVZF
X0NPTkZJR19IDQorI2luY2x1ZGUgImNvbmZpZ3VyYXRpb24uaCINCisjZW5k
aWYgLyogSEFWRV9DT05GSUdfSCAqLw0KKw0KKyNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4NCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4NCisjaW5jbHVkZSA8c3lz
L3Jlc291cmNlLmg+DQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQorDQorI2lu
Y2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxzeXNsb2cuaD4NCisjaW5j
bHVkZSA8dW5pc3RkLmg+DQorDQorI2luY2x1ZGUgPG9wZW5zc2wvbGhhc2gu
aD4NCisjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPg0KKyNpbmNsdWRlIDxvcGVu
c3NsL2Vyci5oPg0KKyNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPg0KKyNpbmNs
dWRlIDxvcGVuc3NsL3g1MDkuaD4NCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wu
aD4NCisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+DQorI2luY2x1ZGUgPG9w
ZW5zc2wvZGguaD4NCisNCisjaW5jbHVkZSAic3RyaW5nbWFwLmgiDQorI2lu
Y2x1ZGUgInRwdGxzLmgiDQorI2luY2x1ZGUgInV0aWwuaCINCisNCitleHRl
cm4gc3RyaW5nbWFwIGNvbmZpZzsNCisNCitpbnQgdGxzX3ZlcmJvc2UgPSAw
Ow0KK1NTTF9DVFggKnRsc19jdHggPSBOVUxMOw0KK2NoYXIgKmNlcnRfZmls
ZSA9IE5VTEwsICprZXlfZmlsZSA9IE5VTEw7DQorDQorLyogdGxzX3ByaW50
X2Vycm9yczoNCisgKiB1bS4uLiBwcmludHMgb3VyIGVycm9ycyByZWxhdGVk
IHRvIFNTTC9UTFMNCisgKi8NCit2b2lkIHRsc19wcmludF9lcnJvcnModm9p
ZCkgew0KKyAgICB1bnNpZ25lZCBsb25nIGw7DQorICAgIGNvbnN0IGNoYXIg
KmZpbGU7DQorICAgIGNvbnN0IGNoYXIgKmRhdGE7DQorICAgIGludCBsaW5l
Ow0KKyAgICBpbnQgZmxhZ3M7DQorICAgIHVuc2lnbmVkIGxvbmcgZXM7DQor
DQorICAgIGVzID0gQ1JZUFRPX3RocmVhZF9pZCgpOw0KKyAgICB3aGlsZSAo
KGwgPSBFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZk
YXRhLCAmZmxhZ3MpKSAhPSAwKSB7DQorICAgICAgICBpZiAoZmxhZ3MgJiBF
UlJfVFhUX1NUUklORykNCisgICAgICAgICAgICBwcmludF9sb2coTE9HX0VS
UiwNCisgICAgICAgICAgICAgICAgICAgICAgIiVzOiAlbHU6JS4yNTZzOiUu
MjU2czolZDolLjI1NnMiLCBfX0ZJTEVfXywNCisgICAgICAgICAgICAgICAg
ICAgICAgZXMsIEVSUl9lcnJvcl9zdHJpbmcobCwgTlVMTCksIGZpbGUsIGxp
bmUsDQorICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOw0KKyAgICAgICAg
ZWxzZQ0KKyAgICAgICAgICAgIHByaW50X2xvZyhMT0dfRVJSLCAiJXM6ICVs
dTolLjI1NnM6JS4yNTZzOiVkIiwgX19GSUxFX18sDQorICAgICAgICAgICAg
ICAgICAgICAgIGVzLCBFUlJfZXJyb3Jfc3RyaW5nKGwsIE5VTEwpLCBmaWxl
LCBsaW5lKTsNCisgICAgfQ0KK30NCisNCisvKiB0bHNfcmFuZF9zZWVkOg0K
KyAqIHNlZWRzIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIHNv
bWUgKkhPUEVGVUxMWSogc2VtaS1yYW5kb20NCisgKiBpbmZvcm1hdGlvbi4N
CisgKg0KKyAqIHRoZSBpZGVhIGlzIHRoaXMsIG9uIGJ1c3kgc3lzdGVtcywg
dGltZXN0YW1wcyBhcmVuJ3QgZ29pbmcgdG8gY2hhbmdlDQorICogdGhhdCBv
ZnRlbiwgYnV0ICpob3BlZnVsbHkqIHJ1c2FnZSB3aWxsLiBvbiBub24tYnVz
eSBzeXN0ZW1zIHRoZQ0KKyAqIHRpbWVzdGFtcHMgKnNob3VsZCogbW92ZSBt
b3JlLiAqc2hydWcqIHdlIGNvdWxkIGltcGxlbWVudCBhIHJhbmRvbQ0KKyAq
IGZpbGUgcmVhZCB0aGluZ3ksIGkganVzdCB3YXNuJ3QgY29udmluY2VkIGl0
IHdhcyBuZWNlc3NhcnkuIG9uIHN5c3RlbXMNCisgKiB3aXRoIC9kZXYvdXJh
bmRvbSwgaSdtIG5vdCBzdXJlIHRoaXMgY29kZSBoYXMgYW55IHVzZS4NCisg
Ki8NCit2b2lkIHRsc19yYW5kX3NlZWQodm9pZCkgew0KKyAgICBzdHJ1Y3Qg
ew0KKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7DQorICAgICAgICBwaWRf
dCBwaWQ7DQorICAgICAgICBwaWRfdCBwcGlkOw0KKyAgICAgICAgc3RydWN0
IHJ1c2FnZSBydTsNCisgICAgfSByYW5kc2VlZDsNCisNCisjaWZkZWYgR0VU
VElNRU9GREFZX1RaDQorICAgIGdldHRpbWVvZmRheSgmcmFuZHNlZWQudHYs
IE5VTEwpOw0KKyNlbHNlDQorICAgIGdldHRpbWVvZmRheSgmcmFuZHNlZWQu
dHYpOw0KKyNlbmRpZg0KKyAgICByYW5kc2VlZC5waWQgPSBnZXRwaWQoKTsN
CisgICAgcmFuZHNlZWQucHBpZCA9IGdldHBwaWQoKTsNCisgICAgZ2V0cnVz
YWdlKFJVU0FHRV9TRUxGLCAmcmFuZHNlZWQucnUpOw0KKw0KKyAgICBpZiAo
dGxzX3ZlcmJvc2UpDQorICAgICAgIHByaW50X2xvZyhMT0dfSU5GTywgIiVz
OiBBZGRpbmcgJWQgYnl0ZXMgb2YgcHNldWRvIHJhbmRvbSBkYXRhIiwNCisg
ICAgICAgICAgICAgICAgIF9fRklMRV9fLCBzaXplb2YocmFuZHNlZWQpKTsN
CisNCisgICAgUkFORF9hZGQoJnJhbmRzZWVkLCBzaXplb2YocmFuZHNlZWQp
LCAwLjUpOw0KK30NCisNCisvKiB0bHNfaW5mb19jYWxsYmFjazoNCisgKiBE
dW1wIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIFNTTC9UTFMgY29ubmVj
dGlvbiB3aGVuIE9wZW5TU0wNCisgKiBjYWxsIHRoaXMgZnVuY3Rpb24uDQor
ICovDQordm9pZCB0bHNfaW5mb19jYWxsYmFjayhTU0wgKnMsIGludCB3aGVy
ZSwgaW50IHJldCkgew0KKyAgICBjaGFyICpzdHI7DQorICAgIGludCB3ID0g
KHdoZXJlICYgKH5TU0xfU1RfTUFTSykpOw0KKw0KKyAgICBpZiAodyAmIFNT
TF9TVF9DT05ORUNUKQ0KKyAgICAgICAgc3RyID0gIlNTTF9jb25uZWN0IjsN
CisgICAgZWxzZSBpZiAodyAmIFNTTF9TVF9BQ0NFUFQpDQorICAgICAgICBz
dHIgPSAiU1NMX2FjY2VwdCI7DQorICAgIGVsc2UNCisgICAgICAgIHN0ciA9
ICJ1bmRlZmluZWQiOw0KKyAgICBpZiAod2hlcmUgJiBTU0xfQ0JfTE9PUCkg
ew0KKyAgICAgICAgaWYgKHRsc192ZXJib3NlKQ0KKyAgICAgICAgICAgIHBy
aW50X2xvZyhMT0dfRVJSLCAiJXM6ICUuMjBzOiAlLjUxMnMiLCBfX0ZJTEVf
Xywgc3RyLA0KKyAgICAgICAgICAgICAgICAgICAgICBTU0xfc3RhdGVfc3Ry
aW5nX2xvbmcocykpOw0KKyAgICB9IGVsc2UgaWYgKHdoZXJlICYgU1NMX0NC
X0FMRVJUKSB7DQorICAgICAgICBzdHIgPSAoKHdoZXJlICYgU1NMX0NCX1JF
QUQpID8gInJlYWQiIDogIndyaXRlIik7DQorICAgICAgICBpZiAoKHRsc192
ZXJib3NlKSB8fCAoKHJldCAmIDB4ZmYpICE9DQorICAgICAgICAgICAgICAg
IFNTTDNfQURfQ0xPU0VfTk9USUZZKSkNCisgICAgICAgICAgICBwcmludF9s
b2coTE9HX0VSUiwgIiVzOiBTU0wzIGFsZXJ0OiAlLjIwczogJS41MTJzICUu
NTEycyIsDQorICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBzdHIs
IFNTTF9hbGVydF90eXBlX3N0cmluZ19sb25nKHJldCksDQorICAgICAgICAg
ICAgICAgICAgICAgIFNTTF9hbGVydF9kZXNjX3N0cmluZ19sb25nKHJldCkp
Ow0KKyAgICB9IGVsc2UgaWYgKHdoZXJlICYgU1NMX0NCX0VYSVQpIHsNCisg
ICAgICAgIGlmIChyZXQgPT0gMCkNCisgICAgICAgICAgICBwcmludF9sb2co
TE9HX0VSUiwgIiVzOiAlLjIwczogZmFpbGVkIGluICUuNTEycyIsDQorICAg
ICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBzdHIsIFNTTF9zdGF0ZV9z
dHJpbmdfbG9uZyhzKSk7DQorICAgICAgICBlbHNlIGlmIChyZXQgPCAwKQ0K
KyAgICAgICAgICAgIHByaW50X2xvZyhMT0dfRVJSLCAiJXM6ICUuMjBzOiBl
cnJvciBpbiAlLjUxMnMiLA0KKyAgICAgICAgICAgICAgICAgICAgICBfX0ZJ
TEVfXywgc3RyLCBTU0xfc3RhdGVfc3RyaW5nX2xvbmcocykpOw0KKyAgICB9
DQorfQ0KKw0KKy8qIHRsc19zZXRfY2VydF9maWxlOg0KKyAqIHNldHMgdGhl
IGNlcnRpZmljYXRlIGFuZCBrZXkgZmlsZSB0byB3aGF0IGlzIHNwZWNpZmll
ZCBpbiB0aGUNCisgKiBjb25maWcgZmlsZS4NCisgKi8NCitpbnQgdGxzX3Nl
dF9jZXJ0X2ZpbGUoKSB7DQorICAgIGl0ZW0gKkk7DQorDQorICAgIEkgPSBz
dHJpbmdtYXBfZmluZChjb25maWcsICJ0bHMtY2VydGlmaWNhdGUtZmlsZSIp
Ow0KKyAgICBpZiAoSSA9PSBOVUxMKSB7DQorICAgICAgICBwcmludF9sb2co
TE9HX0VSUiwgIiVzOiBjZXJ0aWZpY2F0ZSBmaWxlIG5vdCBzZXQiLCBfX0ZJ
TEVfXyk7DQorICAgICAgICB0bHNfcHJpbnRfZXJyb3JzKCk7DQorICAgICAg
ICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICBjZXJ0X2ZpbGUgPSAoY2hh
ciAqKSB4bWFsbG9jKHNpemVvZihjaGFyKSAqIEktPmwpOw0KKyAgICBzdHJu
Y3B5KGNlcnRfZmlsZSwgSS0+diwgSS0+bCk7DQorDQorICAgIEkgPSBzdHJp
bmdtYXBfZmluZChjb25maWcsICJ0bHMtcHJpdmF0ZWtleS1maWxlIik7DQor
ICAgIGlmIChJID09IE5VTEwpIHsNCisgICAgICAgIHByaW50X2xvZyhMT0df
SU5GTywgIiVzOiBwcml2YXRlIGtleSBmaWxlIG5vdCBzZXQsIGFzc3VtaW5n
ICINCisgICAgICAgICAgICAgICAgICAicHJpdmF0ZSBrZXkgaXMgaW4gY2Vy
dGlmaWNhdGUgZmlsZSIsIF9fRklMRV9fKTsNCisgICAgICAgIGtleV9maWxl
ID0gY2VydF9maWxlOw0KKyAgICB9DQorICAgIGVsc2Ugew0KKyAgICAgICAg
a2V5X2ZpbGUgPSAoY2hhciAqKSB4bWFsbG9jKHNpemVvZihjaGFyKSAqIEkt
PmwpOw0KKyAgICAgICAgc3RybmNweShrZXlfZmlsZSwgSS0+diwgSS0+bCk7
DQorICAgIH0NCisNCisgICAgcmV0dXJuIDE7DQorfQ0KKw0KKy8qIHRsc19z
dG9wX2VuZ2luZToNCisgKiBTdG9wcyB0aGUgVExTIGVuZ2luZS4NCisgKi8N
Cit2b2lkIHRsc19zdG9wX2VuZ2luZSh2b2lkKSB7DQorICAgIGlmICh0bHNf
Y3R4ICE9IE5VTEwpDQorICAgICAgICBTU0xfQ1RYX2ZyZWUodGxzX2N0eCk7
DQorICAgIHRsc19jdHggPSBOVUxMOw0KKw0KKyAgICBpZiAoY2VydF9maWxl
ICE9IGtleV9maWxlKSB4ZnJlZShrZXlfZmlsZSk7DQorICAgIHhmcmVlKGNl
cnRfZmlsZSk7DQorfQ0KKw0KKy8qIHRsc19pbml0X2VuZ2luZToNCisgKiBJ
bml0aWFsaXplIHRoZSBlbmdpbmUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgcnVu
IG9uY2UgaW5zdGFuY2UNCisgKiBvZiB0cG9wM2QuDQorICovDQoraW50IHRs
c19pbml0X2VuZ2luZSh2b2lkKSB7DQorICAgIFNTTF9sb2FkX2Vycm9yX3N0
cmluZ3MoKTsNCisgICAgU1NMX2xpYnJhcnlfaW5pdCgpOw0KKyAgICBpZiAo
KHRsc19jdHggPSBTU0xfQ1RYX25ldyhTU0x2MjNfc2VydmVyX21ldGhvZCgp
KSkgPT0gTlVMTCkgew0KKyAgICAgICAgcHJpbnRfbG9nKExPR19FUlIsICIl
czogU1NMX0NUWF9uZXcgZmFpbGVkIiwgX19GSUxFX18pOw0KKyAgICAgICAg
dGxzX3ByaW50X2Vycm9ycygpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAg
IH0NCisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyh0bHNfY3R4LCBTU0xfT1Bf
QUxMKTsNCisgICAgU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjayh0bHNfY3R4
LCB0bHNfaW5mb19jYWxsYmFjayk7DQorICAgIFNTTF9DVFhfc2Vzc19zZXRf
Y2FjaGVfc2l6ZSh0bHNfY3R4LCAxKTsNCisNCisgICAgaWYgKCF0bHNfc2V0
X2NlcnRfZmlsZSgpKSB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0K
Kw0KKyAgICByZXR1cm4gMTsNCit9DQorDQorLyogdGxzX3N0b3Bfc2VydmVy
dGxzOg0KKyAqIENsb3NlIHRoZSBTU0wvVExTIGNvbm5lY3Rpb24gYW5kIGZy
ZWUgdXAgc29tZSByZXNvdXJjZXMuDQorICovDQordm9pZCB0bHNfc3RvcF9z
ZXJ2ZXJ0bHMoY29ubmVjdGlvbiBjKSB7DQorICAgIGlmIChjLT50bHNfY29u
bmVjdGlvbiAhPSBOVUxMKQ0KKyAgICAgICAgICAgIFNTTF9mcmVlKGMtPnRs
c19jb25uZWN0aW9uKTsNCisgICAgYy0+dGxzX2Nvbm5lY3Rpb24gPSBOVUxM
Ow0KK30NCisNCisvKiB0bHNfc3RhcnRfc2VydmVydGxzOg0KKyAqIFN0YXJ0
IHRoZSBzZXJ2ZXIncyBTU0wvVExTIGNvbm5lY3Rpb24uDQorICovDQoraW50
IHRsc19zdGFydF9zZXJ2ZXJ0bHMoY29ubmVjdGlvbiBjKSB7DQorDQorICAg
IHRsc19yYW5kX3NlZWQoKTsNCisgICAgaWYgKFJBTkRfc3RhdHVzKCkgIT0g
MSkgew0KKyAgICAgICAgcHJpbnRfbG9nKExPR19FUlIsICIlczogaW5zdWZm
aWNpZW50IHJhbmRvbSBzZWVkaW5nIiwgX19GSUxFX18pOw0KKyAgICAgICAg
dGxzX3ByaW50X2Vycm9ycygpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAg
IH0NCisNCisgICAgaWYgKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUo
dGxzX2N0eCwgY2VydF9maWxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTU0xfRklMRVRZUEVfUEVNKSA8IDApIHsNCisgICAg
ICAgIHByaW50X2xvZyhMT0dfRVJSLCAiJXM6IGNhbid0IGxvYWQgY2VydGlm
aWNhdGUgZmlsZTogJXMiLA0KKyAgICAgICAgICAgICAgICAgIF9fRklMRV9f
LCBjZXJ0X2ZpbGUpOw0KKyAgICAgICAgdGxzX3ByaW50X2Vycm9ycygpOw0K
KyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgaWYgKFNTTF9D
VFhfdXNlX1ByaXZhdGVLZXlfZmlsZSh0bHNfY3R4LCBrZXlfZmlsZSwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0ZJTEVU
WVBFX1BFTSkgPCAwKSB7DQorICAgICAgICBwcmludF9sb2coTE9HX0VSUiwg
IiVzOiBjYW4ndCBsb2FkIGNlcnRpZmljYXRlIGZpbGU6ICVzIiwNCisgICAg
ICAgICAgICAgICAgICBfX0ZJTEVfXywgY2VydF9maWxlKTsNCisgICAgICAg
IHRsc19wcmludF9lcnJvcnMoKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAg
ICB9DQorDQorICAgIGlmICghU1NMX0NUWF9jaGVja19wcml2YXRlX2tleSh0
bHNfY3R4KSkgew0KKyAgICAgICAgcHJpbnRfbG9nKExPR19FUlIsICIlczog
Y2FuJ3QgdmVyaWZ5IHByaXZhdGUga2V5IiwgX19GSUxFX18pOw0KKyAgICAg
ICAgdGxzX3ByaW50X2Vycm9ycygpOw0KKyAgICAgICAgcmV0dXJuIDA7DQor
ICAgIH0NCisNCisgICAgYy0+dGxzX2Nvbm5lY3Rpb24gPSBTU0xfbmV3KHRs
c19jdHgpOw0KKyAgICBpZiAoYy0+dGxzX2Nvbm5lY3Rpb24gPT0gTlVMTCkg
ew0KKyAgICAgICAgcHJpbnRfbG9nKExPR19FUlIsICIlczogY2FuJ3QgY3Jl
YXRlIFRMUyBjb25uZWN0aW9uIiwgX19GSUxFX18pOw0KKyAgICAgICAgdGxz
X3ByaW50X2Vycm9ycygpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0N
CisNCisgICAgaWYgKFNTTF9zZXRfZmQoYy0+dGxzX2Nvbm5lY3Rpb24sIGMt
PnMpID09IDApIHsNCisgICAgICAgIHByaW50X2xvZyhMT0dfRVJSLCAiJXM6
IGNhbid0IHNldCBzb2NrZXQgZm9yIFRMUyBjb25uY2V0aW9uIiwNCisgICAg
ICAgICAgICAgICAgICBfX0ZJTEVfXyk7DQorICAgICAgICB0bHNfcHJpbnRf
ZXJyb3JzKCk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKw0K
KyAgICByZXR1cm4gMTsNCit9DQorDQorLyogdGxzX2hhbmRzaGFrZToNCisg
KiBEbyB0aGUgU1NML1RMUyBoYW5kc2hha2Ugd2l0aCB0aGUgY2xpZW50Lg0K
KyAqLw0KK2ludCB0bHNfaGFuZHNoYWtlKGNvbm5lY3Rpb24gYykgew0KKyAg
ICBpbnQgcmV0Ow0KKw0KKyAgICBpZiAoKHJldCA9IFNTTF9hY2NlcHQoYy0+
dGxzX2Nvbm5lY3Rpb24pKSA8PSAwKSB7DQorICAgICAgICBwcmludF9sb2co
TE9HX0VSUiwgIiVzOiBmYWlsZWQgdG8gYWNjZXB0IFRMUyBjb25uZWN0aW9u
OiAlZCIsDQorICAgICAgICAgICAgICAgICAgX19GSUxFX18sIHJldCk7DQor
ICAgICAgICB0bHNfcHJpbnRfZXJyb3JzKCk7DQorICAgICAgICB0bHNfc3Rv
cF9zZXJ2ZXJ0bHMoYyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0K
Kw0KKyAgICBpZiAodGxzX3ZlcmJvc2UpIHsNCisgICAgICAgIFNTTF9DSVBI
RVIgKmNpcGhlcjsNCisNCisgICAgICAgIGNpcGhlciA9IFNTTF9nZXRfY3Vy
cmVudF9jaXBoZXIoYy0+dGxzX2Nvbm5lY3Rpb24pOw0KKyAgICAgICAgaWYg
KGNpcGhlciAhPSBOVUxMKSB7DQorICAgICAgICAgICAgY29uc3QgY2hhciAq
Y2lwaGVyX25hbWUgPSBTU0xfQ0lQSEVSX2dldF9uYW1lKGNpcGhlcik7DQor
ICAgICAgICAgICAgaW50IGNpcGhlcl9iaXRzOw0KKw0KKyAgICAgICAgICAg
IHByaW50X2xvZyhMT0dfSU5GTywgIiVzOiBUTFMgZXN0YWJsaXNoZWQgd2l0
aCAlcyAoJWRiaXRzKSIsDQorICAgICAgICAgICAgICAgICAgICAgIF9fRklM
RV9fLCBjaXBoZXJfbmFtZSwNCisgICAgICAgICAgICAgICAgICAgICAgU1NM
X0NJUEhFUl9nZXRfYml0cyhjaXBoZXIsICZjaXBoZXJfYml0cykpOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAxOw0KK30NCisNCisv
KiB0bHNfd3JpdGVfZmlsZToNCisgKiBzYW1lIGNvZGUgdGhhdCBpcyBpbiB3
cml0ZV9maWxlIGluIHV0aWwuYywgZXhjZXB0IGluc3RlYWQNCisgKiBvZiBh
IHNvY2tldCwgaXQgZXhwZWN0cyBhIHBvaW50ZXIgdG8gdGhlIFNTTCBjb25u
ZWN0aW9uLg0KKyAqLw0KK2ludCB0bHNfd3JpdGVfZmlsZShpbnQgZmQsIFNT
TCAqcywgc2l6ZV90IG1zZ29mZnNldCwgc2l6ZV90IHNraXAsIHNpemVfdCBt
c2dsZW5ndGgsIGludCBuKSB7DQorICAgIGNoYXIgKmZpbGVtZW07DQorICAg
IGNoYXIgKnAsICpxLCAqcjsNCisgICAgc2l6ZV90IGxlbmd0aCwgb2Zmc2V0
Ow0KKw0KKyAgICBvZmZzZXQgPSBtc2dvZmZzZXQgLSAobXNnb2Zmc2V0ICUg
UEFHRVNJWkUpOw0KKyAgICBsZW5ndGggPSAobXNnb2Zmc2V0ICsgbXNnbGVu
Z3RoICsgUEFHRVNJWkUpIDsNCisgICAgbGVuZ3RoIC09IGxlbmd0aCAlIFBB
R0VTSVpFOw0KKw0KKyAgICBmaWxlbWVtID0gbW1hcCgwLCBsZW5ndGgsIFBS
T1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOw0KKyAgICBpZiAo
ZmlsZW1lbSA9PSBNQVBfRkFJTEVEKSB7DQorICAgICAgICBwcmludF9sb2co
TE9HX0VSUiwgIndyaXRlX2ZpbGU6IG1tYXA6ICVtIik7DQorICAgICAgICBy
ZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICAvKiBGaW5kIHRoZSBiZWdpbm5p
bmcgb2YgdGhlIG1lc3NhZ2UgaGVhZGVycyAqLw0KKyAgICBwID0gZmlsZW1l
bSArIChtc2dvZmZzZXQgJSBQQUdFU0laRSk7DQorICAgIHIgPSBwICsgbXNn
bGVuZ3RoOw0KKyAgICBwICs9IHNraXA7DQorDQorICAgIC8qIFNlbmQgdGhl
IG1lc3NhZ2UgaGVhZGVycyAqLw0KKyAgICBkbyB7DQorICAgICAgICBxID0g
bWVtY2hyKHAsICdcbicsIHIgLSBwKTsNCisgICAgICAgIGlmICghcSkgcSA9
IHI7DQorICAgICAgICBlcnJubyA9IDA7DQorICAgICAgICAvKiBFc2NhcGUg
YSBsZWFkaW5nIC4sIGlmIHByZXNlbnQuICovDQorICAgICAgICBpZiAoKnAg
PT0gJy4nICYmICF0bHNfdHJ5X3dyaXRlKHMsICIuIiwgMSkpIGdvdG8gd3Jp
dGVfZmFpbHVyZTsNCisgICAgICAgIC8qIFNlbmQgbGluZSBpdHNlbGYuICov
DQorICAgICAgICBpZiAoIXRsc190cnlfd3JpdGUocywgcCwgcSAtIHApIHx8
ICF0bHNfdHJ5X3dyaXRlKHMsICJcclxuIiwgMikpDQorICAgICAgICAgICAg
Z290byB3cml0ZV9mYWlsdXJlOw0KKyAgICAgICAgcCA9IHEgKyAxOw0KKyAg
ICB9IHdoaWxlIChwIDwgciAmJiAqcCAhPSAnXG4nKTsNCisNCisgICAgKytw
Ow0KKw0KKyAgICBlcnJubyA9IDA7DQorICAgIGlmICghdGxzX3RyeV93cml0
ZShzLCAiXHJcbiIsIDIpKSB7DQorICAgICAgICBwcmludF9sb2coTE9HX0VS
UiwgIndyaXRlX2ZpbGU6IHdyaXRlOiAlbSIpOw0KKyAgICAgICAgbXVubWFw
KGZpbGVtZW0sIGxlbmd0aCk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAg
fQ0KKw0KKyAgICAvKiBOb3cgc2VuZCB0aGUgbWVzc2FnZSBpdHNlbGYgKi8N
CisgICAgd2hpbGUgKHAgPCByICYmIG4pIHsNCisgICAgICAgIGlmIChuID4g
MCkgLS1uOw0KKw0KKyAgICAgICAgcSA9IG1lbWNocihwLCAnXG4nLCByIC0g
cCk7DQorICAgICAgICBpZiAoIXEpIHEgPSByOw0KKyAgICAgICAgZXJybm8g
PSAwOw0KKw0KKyAgICAgICAgLyogRXNjYXBlIGEgbGVhZGluZyAuLCBpZiBw
cmVzZW50LiAqLw0KKyAgICAgICAgaWYgKCpwID09ICcuJyAmJiAhdGxzX3Ry
eV93cml0ZShzLCAiLiIsIDEpKSBnb3RvIHdyaXRlX2ZhaWx1cmU7DQorICAg
ICAgICAvKiBTZW5kIGxpbmUgaXRzZWxmLiAqLw0KKyAgICAgICAgaWYgKCF0
bHNfdHJ5X3dyaXRlKHMsIHAsIHEgLSBwKSB8fCAhdGxzX3RyeV93cml0ZShz
LCAiXHJcbiIsIDIpKQ0KKyAgICAgICAgICAgIGdvdG8gd3JpdGVfZmFpbHVy
ZTsNCisNCisgICAgICAgIHAgPSBxICsgMTsNCisgICAgfQ0KKyAgICBpZiAo
bXVubWFwKGZpbGVtZW0sIGxlbmd0aCkgPT0gLTEpDQorICAgICAgICBwcmlu
dF9sb2coTE9HX0VSUiwgIndyaXRlX2ZpbGU6IG11bm1hcDogJW0iKTsNCisN
CisgICAgZXJybm8gPSAwOw0KKyAgICBpZiAoIXRsc190cnlfd3JpdGUocywg
Ii5cclxuIiwgMykpIHsNCisgICAgICAgIHByaW50X2xvZyhMT0dfRVJSLCAi
d3JpdGVfZmlsZTogd3JpdGU6ICVtIik7DQorICAgICAgICByZXR1cm4gMDsN
CisgICAgfSBlbHNlIHJldHVybiAxOw0KKw0KK3dyaXRlX2ZhaWx1cmU6DQor
ICAgIHByaW50X2xvZyhMT0dfRVJSLCAid3JpdGVfZmlsZTogd3JpdGU6ICVt
Iik7DQorICAgIG11bm1hcChmaWxlbWVtLCBsZW5ndGgpOw0KKyAgICByZXR1
cm4gMDsNCit9DQorDQorI2VuZGlmDQpkaWZmIC11IC0tbmV3LWZpbGUgdHBv
cDNkLTEuMy41Lm9yaWcvdHB0bHMuaCB0cG9wM2QtMS4zLjUvdHB0bHMuaA0K
LS0tIHRwb3AzZC0xLjMuNS5vcmlnL3RwdGxzLmgJV2VkIERlYyAzMSAxNzow
MDowMCAxOTY5DQorKysgdHBvcDNkLTEuMy41L3RwdGxzLmgJRnJpIE5vdiAg
MiAxMDozNzoxMiAyMDAxDQpAQCAtMCwwICsxLDIxIEBADQorI2lmZGVmIFVT
RV9PUEVOU1NMX1RMUw0KKw0KKyNpZm5kZWYgX19UUFRMU19IXyAvKiBpbmNs
dWRlIGd1YXJkICovDQorI2RlZmluZSBfX1RQVExTX0hfDQorDQorI2luY2x1
ZGUgImNvbm5lY3Rpb24uaCINCisNCisjZGVmaW5lIHRsc190cnlfd3JpdGUo
YSwgYiwgYykgIChTU0xfd3JpdGUoKGEpLCAoYiksIChjKSkgPT0gKGMpKQ0K
Kw0KK2ludCB0bHNfaW5pdF9lbmdpbmUodm9pZCk7DQoraW50IHRsc19zdGFy
dF9zZXJ2ZXJ0bHMoY29ubmVjdGlvbiBjKTsNCitpbnQgdGxzX2hhbmRzaGFr
ZShjb25uZWN0aW9uIGMpOw0KKw0KK2ludCB0bHNfd3JpdGVfZmlsZShpbnQg
ZmQsIFNTTCAqcywgc2l6ZV90IG1zZ29mZnNldCwgc2l6ZV90IHNraXAsIHNp
emVfdCBtc2dsZW5ndGgsIGludCBuKTsNCisNCit2b2lkIHRsc19zdG9wX3Nl
cnZlcnRscyhjb25uZWN0aW9uIGMpOw0KK3ZvaWQgdGxzX3N0b3BfZW5naW5l
KHZvaWQpOw0KKw0KKyNlbmRpZiAvKiBfX1RQVExTX0hfICovDQorDQorI2Vu
ZGlmIC8qIFVTRV9PUEVOU1NMX1RMUyAqLw0K
--0-1312331796-1004726950=:54412--