gh-154934: Remove ncurses assumptions from curses and its tests (GH-154940)

serhiy-storchaka <[email protected]> Thu, 30 Jul 2026 14:12:45 -0400 (EDT)
Newsgroups gmane.comp.python.cvs
Message-ID <[email protected]>
aHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbi9jcHl0aG9uL2NvbW1pdC85ZWY5NWQxYjBkNzdhYjYw
NzEwMTJiNjFmMDc2Njc1NTVhMTNjOWE3DQpjb21taXQ6IDllZjk1ZDFiMGQ3N2FiNjA3MTAxMmI2
MWYwNzY2NzU1NWExM2M5YTcNCmJyYW5jaDogbWFpbg0KYXV0aG9yOiBTZXJoaXkgU3RvcmNoYWth
IDxzdG9yY2hha2FAZ21haWwuY29tPg0KY29tbWl0dGVyOiBzZXJoaXktc3RvcmNoYWthIDxzdG9y
Y2hha2FAZ21haWwuY29tPg0KZGF0ZTogMjAyNi0wNy0zMFQyMToxMjoyOSswMzowMA0Kc3VtbWFy
eToNCg0KZ2gtMTU0OTM0OiBSZW1vdmUgbmN1cnNlcyBhc3N1bXB0aW9ucyBmcm9tIGN1cnNlcyBh
bmQgaXRzIHRlc3RzIChHSC0xNTQ5NDApDQoNClBhcnNlIHRoZSBpbnRlZ2VyIGZvcm1zIG9mIGFk
ZGNoKCkgYW5kIGZyaWVuZHMgYXMgdW5zaWduZWQgbG9uZyBsb25nOiB0aGUNCndpZHRoIG9mIGEg
Y2h0eXBlIGlzIHVwIHRvIHRoZSBsaWJyYXJ5Lg0KDQpFeHBvc2UgX2N1cnNlcy5fd2lkZV9jaGFy
YWN0ZXJfc3VwcG9ydCBzbyB0aGF0IHRoZSB0ZXN0cyBjYW4gYXNrIHdoYXQgYQ0KY2VsbCBob2xk
cyBpbnN0ZWFkIG9mIHByb2JpbmcgZm9yIGEgZnVuY3Rpb24uDQoNCk1hc2sgYW4gaW50ZWdlciBr
ZXlzdHJva2UgaW4gdGV4dHBhZCBhcyB0aGUgYnl0ZSBpdCBpcywgYW5kIGtlZXAgdGhlIGtleQ0K
Y29kZXMgb3V0IG9mIHRoZSBwcmludGFibGUgcmFuZ2UuDQoNCmZpbGVzOg0KTSBMaWIvY3Vyc2Vz
L3RleHRwYWQucHkNCk0gTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkNCk0gTW9kdWxlcy9fY3Vyc2Vz
bW9kdWxlLmMNCk0gTW9kdWxlcy9jbGluaWMvX2N1cnNlc21vZHVsZS5jLmgNCg0KZGlmZiAtLWdp
dCBhL0xpYi9jdXJzZXMvdGV4dHBhZC5weSBiL0xpYi9jdXJzZXMvdGV4dHBhZC5weQ0KaW5kZXgg
NzBmYTJjMjVmNjQ2MzI4Li5mNmRmYzk5MDkwMWQ5OTUgMTAwNjQ0DQotLS0gYS9MaWIvY3Vyc2Vz
L3RleHRwYWQucHkNCisrKyBiL0xpYi9jdXJzZXMvdGV4dHBhZC5weQ0KQEAgLTU3LDE0ICs1Nywx
NyBAQCBkZWYgX3VwZGF0ZV9tYXhfeXgoc2VsZik6DQogICAgICAgICBzZWxmLm1heHggPSBtYXh4
IC0gMQ0KIA0KICAgICBkZWYgX2RlY29kZShzZWxmLCBjaCk6DQotICAgICAgICAjIERlY29kZSBh
biBpbnRlZ2VyIGtleXN0cm9rZSBvciBieXRlIHRvIHRleHQgd2l0aCB0aGUgd2luZG93J3MgZW5j
b2RpbmcuDQotICAgICAgICAjIEFfQ0hBUlRFWFQgZHJvcHMgYW55IGF0dHJpYnV0ZSBiaXRzLg0K
LSAgICAgICAgcmV0dXJuIGJ5dGVzKFtjaCAmIGN1cnNlcy5BX0NIQVJURVhUXSkuZGVjb2RlKHNl
bGYud2luLmVuY29kaW5nLCAncmVwbGFjZScpDQorICAgICAgICAjIEFuIGludGVnZXIga2V5c3Ry
b2tlIGlzIGEgYnl0ZTogZ2V0X3djaCgpIHBhc3NlcyBhIGNoYXJhY3RlciBhcyBhDQorICAgICAg
ICAjIHN0cmluZywgYW5kIGdldGNoKCkgcmVwb3J0cyBvbmUgYXMgaXRzIGJ5dGVzIGluIHRoZSBl
bmNvZGluZy4NCisgICAgICAgIHJldHVybiBieXRlcyhbY2ggJiAweGZmXSkuZGVjb2RlKHNlbGYu
d2luLmVuY29kaW5nLCAncmVwbGFjZScpDQogDQogICAgIGRlZiBfcHJpbnRhYmxlX2tleShzZWxm
LCBjaCk6DQotICAgICAgICAjIFdoZXRoZXIgdGhlIGludGVnZXIga2V5c3Ryb2tlIGlzIGEgcHJp
bnRhYmxlIGNoYXJhY3Rlciwgbm90IGEga2V5IGNvZGU6DQotICAgICAgICAjIDAuLjI1NSBhcmUg
Y2hhcmFjdGVyIGJ5dGVzLCBsYXJnZXIgdmFsdWVzIGFyZSBmdW5jdGlvbiBrZXlzLg0KLSAgICAg
ICAgcmV0dXJuIGNoIDw9IDB4ZmYgYW5kIHNlbGYuX2RlY29kZShjaCkuaXNwcmludGFibGUoKQ0K
KyAgICAgICAgIyBXaGV0aGVyIHRoZSBpbnRlZ2VyIGtleXN0cm9rZSBpcyBhIHByaW50YWJsZSBj
aGFyYWN0ZXIgcmF0aGVyIHRoYW4gYQ0KKyAgICAgICAgIyBrZXkgY29kZS4gIEtleSBjb2RlcyBv
Y2N1cHkgW2N1cnNlcy5LRVlfTUlOLCBjdXJzZXMuS0VZX01BWF0sIHdoaWNoDQorICAgICAgICAj
IG1heSBzdGFydCBhYm92ZSBhIGJ5dGUuDQorICAgICAgICByZXR1cm4gKGNoIDw9IDB4ZmYNCisg
ICAgICAgICAgICAgICAgYW5kIG5vdCBjdXJzZXMuS0VZX01JTiA8PSBjaCA8PSBjdXJzZXMuS0VZ
X01BWA0KKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5fZGVjb2RlKGNoKS5pc3ByaW50YWJsZSgp
KQ0KIA0KICAgICBkZWYgX2VuZF9vZl9saW5lKHNlbGYsIHkpOg0KICAgICAgICAgIiIiR28gdG8g
dGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBibGFuayBvbiB0aGUgZ2l2ZW4gbGluZSwNCkBAIC05
MywxNCArOTYsMTggQEAgZGVmIF9pbnNlcnRfcHJpbnRhYmxlX2NoYXIoc2VsZiwgY2gpOg0KICAg
ICAgICAgICAgIGlmIHkgPj0gc2VsZi5tYXh5IGFuZCB4ID49IHNlbGYubWF4eDoNCiAgICAgICAg
ICAgICAgICAgIyBVc2UgaW5zY2goKSBpbiB0aGUgbG93ZXItcmlnaHQgY2VsbDsgYWRkY2goKSB0
aGVyZSB3b3VsZCBwdXNoDQogICAgICAgICAgICAgICAgICMgdGhlIGN1cnNvciBvdXQgb2YgdGhl
IHdpbmRvdyAoYW4gZXJyb3IsIGFuZCBpdCBzY3JvbGxzIGENCi0gICAgICAgICAgICAgICAgIyBz
Y3JvbGxhYmxlIHdpbmRvdykuICBpbnNjaCgpIGRvZXMgbm90IGRlY29kZSBhbiBpbnQgYnl0ZQ0K
LSAgICAgICAgICAgICAgICAjIHRocm91Z2ggdGhlIGxvY2FsZSBvbiBhIHdpZGUgYnVpbGQsIHNv
IHBhc3MgaXQgYXMgdGV4dC4NCisgICAgICAgICAgICAgICAgIyBzY3JvbGxhYmxlIHdpbmRvdyku
DQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2gsIGludCk6DQogICAgICAgICAgICAg
ICAgICAgICBzZWxmLndpbi5pbnNjaChzZWxmLl9kZWNvZGUoY2gpLCBjaCAmIGN1cnNlcy5BX0FU
VFJJQlVURVMpDQogICAgICAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgICAgICBz
ZWxmLndpbi5pbnNjaChjaCkNCiAgICAgICAgICAgICAgICAgYnJlYWsNCi0gICAgICAgICAgICBz
ZWxmLndpbi5hZGRjaChjaCkNCisgICAgICAgICAgICAjIFBhc3MgdGhlIGNoYXJhY3RlciBhcyB0
ZXh0OiBhbiBpbnRlZ2VyIGlzIGEgYnl0ZSwgd2hpY2ggYWRkY2goKQ0KKyAgICAgICAgICAgICMg
dGFrZXMgYXMgYSBjb2RlIHBvaW50IG9uIGEgd2lkZSBidWlsZC4NCisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKGNoLCBpbnQpOg0KKyAgICAgICAgICAgICAgICBzZWxmLndpbi5hZGRjaChzZWxm
Ll9kZWNvZGUoY2gpLCBjaCAmIGN1cnNlcy5BX0FUVFJJQlVURVMpDQorICAgICAgICAgICAgZWxz
ZToNCisgICAgICAgICAgICAgICAgc2VsZi53aW4uYWRkY2goY2gpDQogICAgICAgICAgICAgIyBJ
biBpbnNlcnQgbW9kZSBrZWVwIHNoaWZ0aW5nIGNlbGxzIHJpZ2h0IHVudGlsIGEgYmxhbmsgb25l
Lg0KICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmluc2VydF9tb2RlIG9yIG5vdCBzdHIob2xkY2gp
LmlzcHJpbnRhYmxlKCk6DQogICAgICAgICAgICAgICAgIGJyZWFrDQpkaWZmIC0tZ2l0IGEvTGli
L3Rlc3QvdGVzdF9jdXJzZXMucHkgYi9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weQ0KaW5kZXggNGJh
MjEwYzE2MmQwZjZkLi44NDViOWExMzVhMjQyNDMgMTAwNjQ0DQotLS0gYS9MaWIvdGVzdC90ZXN0
X2N1cnNlcy5weQ0KKysrIGIvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkNCkBAIC00NiwyMiArNDYs
NyBAQCBkZWYgd3JhcHBlZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOg0KICAgICAgICAgcmV0dXJu
IHdyYXBwZWQNCiAgICAgcmV0dXJuIGRlY28NCiANCi1kZWYgX3dpZGVfYnVpbGQoKToNCi0gICAg
IyBUcnVlIG9uIGEgYnVpbGQgdGhhdCBzdG9yZXMgd2lkZS1jaGFyYWN0ZXIgY2VsbHMgKGJ1aWx0
IGFnYWluc3QgbmN1cnNlc3cpLg0KLSAgICAjIEEgd2lkZSBidWlsZCBhY2NlcHRzIGEgc3BhY2lu
ZyBjaGFyYWN0ZXIgcGx1cyBhIGNvbWJpbmluZyBtYXJrIGluIGEgc2luZ2xlDQotICAgICMgY2Vs
bDsgYSBuYXJyb3cgYnVpbGQgYWNjZXB0cyBvbmx5IG9uZSBjaGFyYWN0ZXIgcGVyIGNlbGwuICBU
aGlzIHN0YXlzIGENCi0gICAgIyByZWxpYWJsZSB3aWRlL25hcnJvdyBzaWduYWwgZXZlbiBhcyB0
aGUgd2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb25zIChnZXRfd2NoKCkNCi0gICAgIyBhbmQgZnJpZW5k
cykgYmVjb21lIGF2YWlsYWJsZSBvbiBuYXJyb3cgYnVpbGRzIHRvbywgYmVjYXVzZSB0aGUNCi0g
ICAgIyBtdWx0aS1jb2RlcG9pbnQgY2VsbCBjYXBhY2l0eSBpdHNlbGYgaXMgYnVpbGQtc3BlY2lm
aWMuDQotICAgIGlmIG5vdCBoYXNhdHRyKGN1cnNlcywgJ2NvbXBsZXhjaGFyJyk6DQotICAgICAg
ICByZXR1cm4gaGFzYXR0cihjdXJzZXMud2luZG93LCAnZ2V0X3djaCcpDQotICAgIHRyeToNCi0g
ICAgICAgIGN1cnNlcy5jb21wbGV4Y2hhcignZVx1MDMwMScpICAjICdlJyArIGNvbWJpbmluZyBh
Y3V0ZTogdHdvIGNvZGUgcG9pbnRzDQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KLSAgICAgICAg
cmV0dXJuIEZhbHNlDQotICAgIHJldHVybiBUcnVlDQotDQotV0lERV9CVUlMRCA9IF93aWRlX2J1
aWxkKCkNCitXSURFX0JVSUxEID0gaW1wb3J0X21vZHVsZSgnX2N1cnNlcycpLl93aWRlX2NoYXJh
Y3Rlcl9zdXBwb3J0DQogDQogZGVmIHJlcXVpcmVzX3dpZGVfYnVpbGQodGVzdCk6DQogICAgIEBm
dW5jdG9vbHMud3JhcHModGVzdCkNCkBAIC00MDQsNiArMzg5LDE1IEBAIGRlZiBfc3RvcmFibGUo
c2VsZiwgcyk6DQogICAgICAgICAgICAgcmV0dXJuIFRydWUNCiAgICAgICAgIHJldHVybiBsZW4o
cy5lbmNvZGUoc2VsZi5zdGRzY3IuZW5jb2RpbmcpKSA9PSBsZW4ocykNCiANCisgICAgZGVmIF9j
aGFyX2NvZGUoc2VsZiwgY2gpOg0KKyAgICAgICAgIyBUaGUgaW50ZWdlciB0aGUgaW50LWlucHV0
IEFQSSAoYWRkY2goaW50KSwgZG9fY29tbWFuZCgpKSB1c2VzIGZvciBhDQorICAgICAgICAjIGNo
YXJhY3Rlciwgb3IgTm9uZSBpZiBpdCBoYXMgbm9uZTogYSBjZWxsIGhvbGRzIGEgc2luZ2xlIGxv
Y2FsZSBieXRlLg0KKyAgICAgICAgdHJ5Og0KKyAgICAgICAgICAgIGIgPSBjaC5lbmNvZGUoc2Vs
Zi5zdGRzY3IuZW5jb2RpbmcpDQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOg0K
KyAgICAgICAgICAgIHJldHVybiBOb25lDQorICAgICAgICByZXR1cm4gYlswXSBpZiBsZW4oYikg
PT0gMSBlbHNlIE5vbmUNCisNCiAgICAgZGVmIF9yZWFkX2NoYXIoc2VsZiwgeSwgeCk6DQogICAg
ICAgICAjIFRoZSBjaGFyYWN0ZXIgd3JpdHRlbiB0byBhIGNlbGwsIHJlYWQgYmFjayBmb3Igb3V0
cHV0IGNoZWNrcy4gIGluY2goKQ0KICAgICAgICAgIyBpcyB1bnVzYWJsZSBoZXJlOiBvbiBhIHdp
ZGUgYnVpbGQgaXQgcmV0dXJucyB0aGUgbG93IDggYml0cyBvZiB0aGUNCkBAIC03ODMsMTggKzc3
NywxNSBAQCBkZWYgdGVzdF9vdXRwdXRfY2hhcmFjdGVyKHNlbGYpOg0KICAgICAgICAgc3Rkc2Ny
LmFkZGNoKDIsIDMsICdBJywgY3Vyc2VzLkFfQk9MRCkNCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMo
c3Rkc2NyLmlzX3dpbnRvdWNoZWQoKSwgVHJ1ZSkNCiANCi0gICAgICAgICMgVGhlIHNhbWUgY2hh
cmFjdGVycyBzdXBwbGllZCBhcyBhbiBpbnQgY2h0eXBlIChhIGJ5dGUgPiAxMjcpLiAgVGhlDQot
ICAgICAgICAjIGNlbGwgaXMgcmVhZCBiYWNrIHdpdGggX3JlYWRfY2hhcigpLCBub3QgaW5jaCgp
OiBvbiBhIHdpZGUgYnVpbGQgdGhlDQotICAgICAgICAjIGludCBpcyBzdG9yZWQgdGhyb3VnaCB0
aGUgbG9jYWxlIGFzIGEgd2lkZSBjaGFyYWN0ZXIgdGhhdCBpbmNoKCkNCi0gICAgICAgICMgY2Fu
bm90IHJlcHJlc2VudCBmb3IgYSBjaGFyYWN0ZXIgb3V0c2lkZSBMYXRpbi0xLg0KKyAgICAgICAg
IyBUaGUgc2FtZSBjaGFyYWN0ZXJzIHN1cHBsaWVkIGFzIGFuIGludCBjaHR5cGUuICBUaGUgY2Vs
bCBpcyByZWFkIGJhY2sNCisgICAgICAgICMgd2l0aCBfcmVhZF9jaGFyKCksIG5vdCBpbmNoKCk6
IG9uIGEgd2lkZSBidWlsZCB0aGUgaW50IGlzIHN0b3JlZCBhcyBhDQorICAgICAgICAjIHdpZGUg
Y2hhcmFjdGVyIHRoYXQgaW5jaCgpIGNhbm5vdCByZXByZXNlbnQgZm9yIGEgY2hhcmFjdGVyIG91
dHNpZGUNCisgICAgICAgICMgTGF0aW4tMS4gIFRoZSBpbnQgaXMgZGVjb2RlZCBhcyBhIGxvY2Fs
ZSBieXRlLCBzbyBvbmx5IGEgc2luZ2xlLWJ5dGUNCisgICAgICAgICMgY2hhcmFjdGVyIHJvdW5k
LXRyaXBzLg0KICAgICAgICAgZm9yIGMgaW4gKCfDqScsICfCpCcsICfigqwnLCAn0ZQnKToNCi0g
ICAgICAgICAgICB0cnk6DQotICAgICAgICAgICAgICAgIGIgPSBjLmVuY29kZShlbmNvZGluZykN
Ci0gICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOg0KLSAgICAgICAgICAgICAg
ICBjb250aW51ZQ0KLSAgICAgICAgICAgIGlmIGxlbihiKSAhPSAxOg0KKyAgICAgICAgICAgIHYg
PSBzZWxmLl9jaGFyX2NvZGUoYykNCisgICAgICAgICAgICBpZiB2IGlzIE5vbmU6DQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlDQotICAgICAgICAgICAgdiA9IGJbMF0NCiAgICAgICAgICAgICB3
aXRoIHNlbGYuc3ViVGVzdChjPWMpOg0KICAgICAgICAgICAgICAgICBzdGRzY3IuYWRkY2goMCwg
MCwgdikNCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9yZWFkX2NoYXIo
MCwgMCksIGMpDQpAQCAtOTczLDIyICs5NjQsMjEgQEAgZGVmIHRlc3RfcmVhZF9mcm9tX3dpbmRv
dyhzZWxmKToNCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkc2NyLmluc3RyKDAsIDIsIDQp
LCBiJ0JDRCAnKQ0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Rkc2Ny
Lmluc3RyLCAtMikNCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ZHNj
ci5pbnN0ciwgMCwgMiwgLTIpDQotICAgICAgICAjIEEgbm9uLUFTQ0lJIGNoYXJhY3RlciBvZiBh
biA4LWJpdCBsb2NhbGUgcmVhZHMgYmFjayBhcyBpdHMgZW5jb2RlZA0KLSAgICAgICAgIyBieXRl
IChzZWUgX2VuY29kYWJsZSBmb3IgdGhlIHNldCkuICBCb3RoIGluc3RyKCkgYW5kIGluY2goKSBy
ZXR1cm4gdGhlDQotICAgICAgICAjIGxvY2FsZSBieXRlIGZvciBhbnkgY2hhcmFjdGVyIHRoYXQg
Zml0cyB0aGUgbG9jYWxlJ3Mgc2luZ2xlLWJ5dGUNCi0gICAgICAgICMgZW5jb2RpbmcuDQotICAg
ICAgICBlbmNvZGluZyA9IHN0ZHNjci5lbmNvZGluZw0KKyAgICAgICAgIyBpbnN0cih5LCB4LCAx
KSByZWFkcyBhIHNpbmdsZSBjZWxsIGJ5dGUsIHNvIG9ubHkgYSBjaGFyYWN0ZXIgdGhhdCB0aGUN
CisgICAgICAgICMgd2luZG93IGVuY29kaW5nIG1hcHMgdG8gb25lIGJ5dGUgaXMgY2hlY2tlZC4g
IGluY2goKSByZXR1cm5zIHRoZSBjZWxsDQorICAgICAgICAjIHZhbHVlLCB3aGljaCBpcyB0aGUg
bG9jYWxlIGJ5dGUuDQogICAgICAgICBmb3IgY2ggaW4gKCdBJywgJ8OpJywgJ8KkJywgJ+KCrCcs
ICfRlCcpOg0KICAgICAgICAgICAgIHRyeToNCi0gICAgICAgICAgICAgICAgYiA9IGNoLmVuY29k
ZShlbmNvZGluZykNCisgICAgICAgICAgICAgICAgYiA9IGNoLmVuY29kZShzdGRzY3IuZW5jb2Rp
bmcpDQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoNCiAgICAgICAgICAg
ICAgICAgY29udGludWUNCiAgICAgICAgICAgICBpZiBsZW4oYikgIT0gMToNCiAgICAgICAgICAg
ICAgICAgY29udGludWUNCisgICAgICAgICAgICB2ID0gc2VsZi5fY2hhcl9jb2RlKGNoKQ0KICAg
ICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNoPWNoKToNCiAgICAgICAgICAgICAgICAgc3Rk
c2NyLmFkZHN0cigyLCAwLCBjaCkNCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
dGRzY3IuaW5zdHIoMiwgMCwgMSksIGIpDQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc3Rkc2NyLmluY2goMiwgMCksIGJbMF0pDQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc3Rkc2NyLmluY2goMiwgMCksIHYpDQogDQogICAgIGRlZiB0ZXN0X2Nvb3JkaW5hdGVf
ZXJyb3JzKHNlbGYpOg0KICAgICAgICAgIyBBZGRyZXNzaW5nIGEgY2VsbCBvdXRzaWRlIHRoZSB3
aW5kb3cgcmFpc2VzIGN1cnNlcy5lcnJvci4NCkBAIC0xMDMwLDkgKzEwMjAsMjMgQEAgZGVmIHRl
c3RfZ2V0Y2goc2VsZik6DQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbi5nZXRjaCgpLCBi
J20nWzBdKQ0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uZ2V0Y2goKSwgYidcbidbMF0p
DQogDQotICAgICAgICAjIEEga2V5IHZhbHVlID4gMTI3IGlzIGRlbGl2ZXJlZCB1bmNoYW5nZWQg
KGl0IGlzIG5vdCBsb2NhbGUgdGV4dCkuDQotICAgICAgICBjdXJzZXMudW5nZXRjaCgweEU5KQ0K
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uZ2V0Y2goKSwgMHhFOSkNCisgICAgICAgICMg
QSBub24tQVNDSUkgY2hhcmFjdGVyIGVuY29kYWJsZSBhcyBhIHNpbmdsZSBieXRlIGluIHRoZSBs
b2NhbGUNCisgICAgICAgICMgcm91bmQtdHJpcHMgYXMgdGhhdCBieXRlLg0KKyAgICAgICAgZW5j
b2RpbmcgPSBzZWxmLnN0ZHNjci5lbmNvZGluZw0KKyAgICAgICAgZm9yIGNoIGluICgnw6knLCAn
wqQnLCAn4oKsJywgJ9GUJyk6DQorICAgICAgICAgICAgdHJ5Og0KKyAgICAgICAgICAgICAgICBi
ID0gY2guZW5jb2RlKGVuY29kaW5nKQ0KKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2Rl
RXJyb3I6DQorICAgICAgICAgICAgICAgIGNvbnRpbnVlDQorICAgICAgICAgICAgaWYgbGVuKGIp
ICE9IDE6DQorICAgICAgICAgICAgICAgIGNvbnRpbnVlDQorICAgICAgICAgICAgd2l0aCBzZWxm
LnN1YlRlc3QoY2g9Y2gpOg0KKyAgICAgICAgICAgICAgICBjdXJzZXMudW5nZXRjaChzZWxmLl9j
aGFyX2NvZGUoY2gpKQ0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbi5nZXRj
aCgpLCBiWzBdKQ0KKw0KKyAgICAgICAgIyBBIGtleSBjb2RlIGlzIGRlbGl2ZXJlZCB1bmNoYW5n
ZWQuDQorICAgICAgICBjdXJzZXMudW5nZXRjaChjdXJzZXMuS0VZX0xFRlQpDQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHdpbi5nZXRjaCgpLCBjdXJzZXMuS0VZX0xFRlQpDQogDQogICAgIGRl
ZiB0ZXN0X2dldHN0cihzZWxmKToNCiAgICAgICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSwgMTIs
IDUsIDIpDQpAQCAtMTI3NywyOCArMTI4MSwyNCBAQCBkZWYgdGVzdF9iYWNrZ3JvdW5kKHNlbGYp
Og0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uaW5jaCgwLCAwKSwgYidMJ1swXSB8IGN1
cnNlcy5BX1JFVkVSU0UpDQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbi5pbmNoKDAsIDUp
LCBiJyMnWzBdIHwgY3Vyc2VzLkFfUkVWRVJTRSkNCiANCi0gICAgICAgICMgQSBub24tQVNDSUkg
YmFja2dyb3VuZCBjaGFyYWN0ZXIgb2YgYW4gOC1iaXQgbG9jYWxlIHJlYWRzIGJhY2sgYXMgaXRz
DQotICAgICAgICAjIGVuY29kZWQgYnl0ZS4gIFNlZSBfZW5jb2RhYmxlIGZvciB0aGUgY2hhcmFj
dGVyIHNldC4NCisgICAgICAgICMgQSBub24tQVNDSUkgYmFja2dyb3VuZCBjaGFyYWN0ZXIgcmVh
ZHMgYmFjayBhcyBpdHMgY2VsbCB2YWx1ZSwgdGhlDQorICAgICAgICAjIGxvY2FsZSBieXRlLg0K
ICAgICAgICAgd2luLmJrZ2QoJyAnKQ0KLSAgICAgICAgZW5jb2RpbmcgPSB3aW4uZW5jb2RpbmcN
CiAgICAgICAgIGZvciBjaCBpbiAoJ8OpJywgJ8KkJywgJ+KCrCcsICfRlCcpOg0KLSAgICAgICAg
ICAgIHRyeToNCi0gICAgICAgICAgICAgICAgYiA9IGNoLmVuY29kZShlbmNvZGluZykNCi0gICAg
ICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOg0KLSAgICAgICAgICAgICAgICBjb250
aW51ZQ0KLSAgICAgICAgICAgIGlmIGxlbihiKSAhPSAxOg0KKyAgICAgICAgICAgIHYgPSBzZWxm
Ll9jaGFyX2NvZGUoY2gpDQorICAgICAgICAgICAgaWYgdiBpcyBOb25lOg0KICAgICAgICAgICAg
ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNoPWNoKToNCiAg
ICAgICAgICAgICAgICAgd2luLmJrZ2QoY2gpDQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwod2luLmdldGJrZ2QoKSwgYlswXSkNCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh3aW4uZ2V0YmtnZCgpLCB2KQ0KICAgICAgICAgICAgICAgICBpZiBvcmQoY2gpIDwgMHgx
MDA6DQogICAgICAgICAgICAgICAgICAgICAjIFRoZSBzYW1lIGJ5dGUgZ2l2ZW4gYXMgYW4gaW50
LiAgQSB3aWRlIGJ1aWxkIHN0b3JlcyBpdA0KICAgICAgICAgICAgICAgICAgICAgIyB0aHJvdWdo
IHRoZSBsb2NhbGUsIHNvIG9ubHkgYSBMYXRpbi0xIGJ5dGUgcm91bmQtdHJpcHMuDQogICAgICAg
ICAgICAgICAgICAgICB3aW4uYmtnZCgnICcpDQotICAgICAgICAgICAgICAgICAgICB3aW4uYmtn
ZHNldChiWzBdKQ0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uZ2V0
YmtnZCgpLCBiWzBdKQ0KLSAgICAgICAgICAgICAgICAgICAgd2luLmJrZ2QoYlswXSkNCi0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2luLmdldGJrZ2QoKSwgYlswXSkNCisg
ICAgICAgICAgICAgICAgICAgIHdpbi5ia2dkc2V0KHYpDQorICAgICAgICAgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHdpbi5nZXRia2dkKCksIHYpDQorICAgICAgICAgICAgICAgICAgICB3
aW4uYmtnZCh2KQ0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uZ2V0
YmtnZCgpLCB2KQ0KIA0KICAgICBkZWYgdGVzdF9vdmVybGF5KHNlbGYpOg0KICAgICAgICAgc3Jj
d2luID0gY3Vyc2VzLm5ld3dpbig1LCAxOCwgMywgNCkNCkBAIC0xNDg4LDIwICsxNDg4LDIxIEBA
IGRlZiB0ZXN0X2JvcmRlcnNfYW5kX2xpbmVzKHNlbGYpOg0KICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh3aW4uaW5jaCgyLCAxKSwgYic7J1swXSB8IGN1cnNlcy5BX1NUQU5ET1VUKQ0KICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uaW5jaCgzLCAxKSwgYidhJ1swXSkNCiANCi0gICAgICAg
ICMgQSBib3JkZXIgb3IgbGluZSBjaGFyYWN0ZXIgb2YgYW4gOC1iaXQgbG9jYWxlIHJvdW5kLXRy
aXBzIGFzIGl0cw0KLSAgICAgICAgIyBlbmNvZGVkIGJ5dGUuICBTZWUgX2VuY29kYWJsZSBmb3Ig
dGhlIGNoYXJhY3RlciBzZXQuDQotICAgICAgICBlbmNvZGluZyA9IHdpbi5lbmNvZGluZw0KKyAg
ICAgICAgIyBBIGJvcmRlciBvciBsaW5lIGNoYXJhY3RlciB0aGF0IGZpdHMgYSBzaW5nbGUgY2Vs
bCBieXRlIHJlYWRzIGJhY2sNCisgICAgICAgICMgdmlhIGluc3RyKCkgYXMgdGhhdCBieXRlIGFu
ZCB2aWEgaW5jaCgpIGFzIHRoZSBjZWxsIHZhbHVlLg0KICAgICAgICAgZm9yIGNoIGluICgnw6kn
LCAnwqQnLCAn4oKsJywgJ9GUJyk6DQogICAgICAgICAgICAgdHJ5Og0KLSAgICAgICAgICAgICAg
ICBiID0gY2guZW5jb2RlKGVuY29kaW5nKQ0KKyAgICAgICAgICAgICAgICBiID0gY2guZW5jb2Rl
KHdpbi5lbmNvZGluZykNCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOg0K
ICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgIGlmIGxlbihiKSAhPSAxOg0K
ICAgICAgICAgICAgICAgICBjb250aW51ZQ0KKyAgICAgICAgICAgIHYgPSBzZWxmLl9jaGFyX2Nv
ZGUoY2gpDQogICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY2g9Y2gpOg0KICAgICAgICAg
ICAgICAgICB3aW4uZXJhc2UoKQ0KICAgICAgICAgICAgICAgICB3aW4uaGxpbmUoMiwgMCwgY2gs
IDUpDQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2luLmluc3RyKDIsIDAsIDUp
LCBiICogNSkNCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uaW5jaCgyLCAw
KSAmIGN1cnNlcy5BX0NIQVJURVhULCB2KQ0KICAgICAgICAgICAgICAgICB3aW4udmxpbmUoMCwg
MCwgY2gsIDMpDQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2luLmluc3RyKDAs
IDAsIDEpLCBiKQ0KICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbi5pbnN0cigx
LCAwLCAxKSwgYikNCkBAIC0xNTEwLDcgKzE1MTEsNiBAQCBkZWYgdGVzdF9ib3JkZXJzX2FuZF9s
aW5lcyhzZWxmKToNCiAgICAgICAgICAgICAgICAgaWYgb3JkKGNoKSA8IDB4MTAwOg0KICAgICAg
ICAgICAgICAgICAgICAgIyBUaGUgc2FtZSBieXRlIGdpdmVuIGFzIGFuIGludC4gIEEgd2lkZSBi
dWlsZCBzdG9yZXMgaXQNCiAgICAgICAgICAgICAgICAgICAgICMgdGhyb3VnaCB0aGUgbG9jYWxl
LCBzbyBvbmx5IGEgTGF0aW4tMSBieXRlIHJvdW5kLXRyaXBzLg0KLSAgICAgICAgICAgICAgICAg
ICAgdiA9IGJbMF0NCiAgICAgICAgICAgICAgICAgICAgIHdpbi5lcmFzZSgpDQogICAgICAgICAg
ICAgICAgICAgICB3aW4uaGxpbmUoMiwgMCwgdiwgNSkNCiAgICAgICAgICAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwod2luLmluc3RyKDIsIDAsIDUpLCBiICogNSkNCkBAIC0yODk0LDEyICsy
ODk0LDExIEBAIGRlZiB0ZXN0X2luaXQoc2VsZik6DQogICAgIGRlZiB0ZXN0X2luc2VydChzZWxm
KToNCiAgICAgICAgICIiIlRlc3QgaW5zZXJ0aW5nIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci4iIiIN
CiAgICAgICAgIHNlbGYubW9ja193aW4ucmVzZXRfbW9jaygpDQotICAgICAgICBzZWxmLnRleHRi
b3guZG9fY29tbWFuZChvcmQoJ2EnKSkNCi0gICAgICAgIHNlbGYubW9ja193aW4uYWRkY2guYXNz
ZXJ0X2NhbGxlZF93aXRoKG9yZCgnYScpKQ0KLSAgICAgICAgc2VsZi50ZXh0Ym94LmRvX2NvbW1h
bmQob3JkKCdiJykpDQotICAgICAgICBzZWxmLm1vY2tfd2luLmFkZGNoLmFzc2VydF9jYWxsZWRf
d2l0aChvcmQoJ2InKSkNCi0gICAgICAgIHNlbGYudGV4dGJveC5kb19jb21tYW5kKG9yZCgnYycp
KQ0KLSAgICAgICAgc2VsZi5tb2NrX3dpbi5hZGRjaC5hc3NlcnRfY2FsbGVkX3dpdGgob3JkKCdj
JykpDQorICAgICAgICAjIEFuIGludGVnZXIga2V5c3Ryb2tlIGlzIGRlY29kZWQgdG8gdGV4dDog
YWRkY2goKSB3b3VsZCB0YWtlIGl0IGFzIGENCisgICAgICAgICMgY29kZSBwb2ludCBvbiBhIHdp
ZGUgYnVpbGQuDQorICAgICAgICBmb3IgY2ggaW4gJ2FiYyc6DQorICAgICAgICAgICAgc2VsZi50
ZXh0Ym94LmRvX2NvbW1hbmQob3JkKGNoKSkNCisgICAgICAgICAgICBzZWxmLm1vY2tfd2luLmFk
ZGNoLmFzc2VydF9jYWxsZWRfd2l0aChjaCwgMCkNCiAgICAgICAgIHNlbGYubW9ja193aW4ucmVz
ZXRfbW9jaygpDQogDQogICAgIGRlZiB0ZXN0X2RlbGV0ZShzZWxmKToNCmRpZmYgLS1naXQgYS9N
b2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jDQppbmRleCAx
MzJiNTVjMGE1MDBmYjYuLmY5YWM1ZjA2NTRmNWU5ZSAxMDA2NDQNCi0tLSBhL01vZHVsZXMvX2N1
cnNlc21vZHVsZS5jDQorKysgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYw0KQEAgLTQ2Myw3ICs0
NjMsNyBAQCBjdXJzZXNfd2luZG93X2NoZWNrX2VycihQeUN1cnNlc1dpbmRvd09iamVjdCAqd2lu
LCBpbnQgY29kZSwNCiBzdGF0aWMgaW50DQogUHlDdXJzZXNfQ29udmVydFRvQ2h0eXBlKFB5Q3Vy
c2VzV2luZG93T2JqZWN0ICp3aW4sIFB5T2JqZWN0ICpvYmosIGNodHlwZSAqY2gpDQogew0KLSAg
ICBsb25nIHZhbHVlOw0KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7DQogICAgIGlmIChQ
eUJ5dGVzX0NoZWNrKG9iaikpIHsNCiAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKG9iaikg
IT0gMSkgew0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsDQpAQCAt
NDkzLDIwICs0OTMsMTggQEAgUHlDdXJzZXNfQ29udmVydFRvQ2h0eXBlKFB5Q3Vyc2VzV2luZG93
T2JqZWN0ICp3aW4sIFB5T2JqZWN0ICpvYmosIGNodHlwZSAqY2gpDQogICAgICAgICAgICAgYnl0
ZXMgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG9iaiwgZW5jb2RpbmcsIE5VTEwpOw0KICAg
ICAgICAgICAgIGlmIChieXRlcyA9PSBOVUxMKQ0KICAgICAgICAgICAgICAgICByZXR1cm4gMDsN
Ci0gICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShieXRlcykgPT0gMSkNCi0gICAgICAg
ICAgICAgICAgdmFsdWUgPSAodW5zaWduZWQgY2hhcilQeUJ5dGVzX0FTX1NUUklORyhieXRlcylb
MF07DQotICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IC0xOw0KLSAg
ICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7DQotICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkN
CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShieXRlcykgIT0gMSkgew0KKyAgICAg
ICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOw0KICAgICAgICAgICAgICAgICBnb3RvIG92ZXJm
bG93Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICB2YWx1ZSA9ICh1bnNpZ25lZCBjaGFy
KVB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKVswXTsNCisgICAgICAgICAgICBQeV9ERUNSRUYoYnl0
ZXMpOw0KICAgICAgICAgfQ0KICAgICB9DQogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVja0V4YWN0
KG9iaikpIHsNCi0gICAgICAgIGludCBsb25nX292ZXJmbG93Ow0KLSAgICAgICAgdmFsdWUgPSBQ
eUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cob2JqLCAmbG9uZ19vdmVyZmxvdyk7DQotICAgICAgICBp
ZiAobG9uZ19vdmVyZmxvdykNCi0gICAgICAgICAgICBnb3RvIG92ZXJmbG93Ow0KKyAgICAgICAg
dmFsdWUgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG9iaik7DQorICAgICAgICBpZiAodmFs
dWUgPT0gKHVuc2lnbmVkIGxvbmcgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQ0KKyAgICAg
ICAgICAgIHJldHVybiAwOw0KICAgICB9DQogICAgIGVsc2Ugew0KICAgICAgICAgUHlFcnJfRm9y
bWF0KFB5RXhjX1R5cGVFcnJvciwNCkBAIC01MTUsNyArNTEzLDcgQEAgUHlDdXJzZXNfQ29udmVy
dFRvQ2h0eXBlKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICp3aW4sIFB5T2JqZWN0ICpvYmosIGNodHlw
ZSAqY2gpDQogICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KICAgICAqY2ggPSAoY2h0eXBlKXZh
bHVlOw0KLSAgICBpZiAoKGxvbmcpKmNoICE9IHZhbHVlKQ0KKyAgICBpZiAoKHVuc2lnbmVkIGxv
bmcgbG9uZykqY2ggIT0gdmFsdWUpDQogICAgICAgICBnb3RvIG92ZXJmbG93Ow0KICAgICByZXR1
cm4gMTsNCiANCkBAIC01ODcsNyArNTg1LDcgQEAgUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChQ
eUN1cnNlc1dpbmRvd09iamVjdCAqd2luLCBQeU9iamVjdCAqb2JqLA0KICNlbmRpZg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKQ0KIHsNCi0gICAgbG9uZyB2YWx1ZTsNCisgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIHZhbHVlOw0KIA0KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG9iaikpIHsN
CiAjaWZkZWYgSEFWRV9OQ1VSU0VTVw0KQEAgLTYxMCwxMSArNjA4LDggQEAgUHlDdXJzZXNfQ29u
dmVydFRvQ2NoYXJfdChQeUN1cnNlc1dpbmRvd09iamVjdCAqd2luLCBQeU9iamVjdCAqb2JqLA0K
ICAgICAgICAgdmFsdWUgPSAodW5zaWduZWQgY2hhcilQeUJ5dGVzX0FzU3RyaW5nKG9iailbMF07
DQogICAgIH0NCiAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrRXhhY3Qob2JqKSkgew0KLSAgICAg
ICAgaW50IG92ZXJmbG93Ow0KLSAgICAgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZs
b3cob2JqLCAmb3ZlcmZsb3cpOw0KLSAgICAgICAgaWYgKG92ZXJmbG93KSB7DQotICAgICAgICAg
ICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbnQgZG9lc24ndCBmaXQgaW4gbG9uZyIpOw0KKyAgICAgICAgdmFsdWUg
PSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG9iaik7DQorICAgICAgICBpZiAodmFsdWUgPT0g
KHVuc2lnbmVkIGxvbmcgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7DQogICAgICAgICAg
ICAgcmV0dXJuIDA7DQogICAgICAgICB9DQogICAgIH0NCkBAIC02MjYsNyArNjIxLDcgQEAgUHlD
dXJzZXNfQ29udmVydFRvQ2NoYXJfdChQeUN1cnNlc1dpbmRvd09iamVjdCAqd2luLCBQeU9iamVj
dCAqb2JqLA0KICAgICB9DQogDQogICAgICpjaCA9IChjaHR5cGUpdmFsdWU7DQotICAgIGlmICgo
bG9uZykqY2ggIT0gdmFsdWUpIHsNCisgICAgaWYgKCh1bnNpZ25lZCBsb25nIGxvbmcpKmNoICE9
IHZhbHVlKSB7DQogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwNCiAg
ICAgICAgICAgICAgICAgICAgICAiYnl0ZSBkb2Vzbid0IGZpdCBpbiBjaHR5cGUiKTsNCiAgICAg
ICAgIHJldHVybiAwOw0KQEAgLTEwODIsMTQgKzEwNzcsMTQgQEAgYXR0cl9jb252ZXJ0ZXIoUHlP
YmplY3QgKmFyZywgdm9pZCAqcHRyKQ0KIHsNCiAgICAgLyogYXR0cl90IGlzIHVuc2lnbmVkIGFu
ZCBhdCBsZWFzdCBhcyB3aWRlIGFzIGNodHlwZSwgc28gYW4gYXR0cmlidXRlDQogICAgICAgIHZh
bHVlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciB0aGF0IGZpdHMgaW4gYXR0cl90LiAq
Lw0KLSAgICB1bnNpZ25lZCBsb25nIGF0dHIgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoYXJnKTsN
Ci0gICAgaWYgKGF0dHIgPT0gKHVuc2lnbmVkIGxvbmcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkg
ew0KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgYXR0ciA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xv
bmcoYXJnKTsNCisgICAgaWYgKGF0dHIgPT0gKHVuc2lnbmVkIGxvbmcgbG9uZyktMSAmJiBQeUVy
cl9PY2N1cnJlZCgpKSB7DQogICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KLSAgICBpZiAoYXR0
ciA+ICh1bnNpZ25lZCBsb25nKShhdHRyX3QpLTEpIHsNCisgICAgaWYgKGF0dHIgPiAodW5zaWdu
ZWQgbG9uZyBsb25nKShhdHRyX3QpLTEpIHsNCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19P
dmVyZmxvd0Vycm9yLA0KLSAgICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGUgdmFsdWUgaXMg
Z3JlYXRlciB0aGFuIG1heGltdW0gKCVsdSkiLA0KLSAgICAgICAgICAgICAgICAgICAgICh1bnNp
Z25lZCBsb25nKShhdHRyX3QpLTEpOw0KKyAgICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGUg
dmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0gKCVsbHUpIiwNCisgICAgICAgICAgICAgICAg
ICAgICAodW5zaWduZWQgbG9uZyBsb25nKShhdHRyX3QpLTEpOw0KICAgICAgICAgcmV0dXJuIDA7
DQogICAgIH0NCiAgICAgKihhdHRyX3QgKilwdHIgPSAoYXR0cl90KWF0dHI7DQpAQCAtMTIyNCw3
ICsxMjE5LDcgQEAgY29tcGxleGNoYXJfZ2V0X2F0dHIoUHlPYmplY3QgKnNlbGYsIHZvaWQgKlB5
X1VOVVNFRChjbG9zdXJlKSkNCiAgICAgICAgICAgICAmX1B5Q3Vyc2VzQ29tcGxleENoYXJPYmpl
Y3RfQ0FTVChzZWxmKS0+Y3ZhbCwgJmF0dHJzLCAmcGFpcikgPCAwKSB7DQogICAgICAgICByZXR1
cm4gTlVMTDsNCiAgICAgfQ0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVu
c2lnbmVkIGxvbmcpYXR0cnMpOw0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdM
b25nKCh1bnNpZ25lZCBsb25nIGxvbmcpYXR0cnMpOw0KIH0NCiANCiBzdGF0aWMgUHlPYmplY3Qg
Kg0KQEAgLTI2MDMsNyArMjU5OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqDQogX2N1cnNlc193aW5k
b3dfZ2V0YXR0cnNfaW1wbChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZikNCiAvKltjbGluaWMg
ZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODM1ZjQ5OTIwNTIwNGVjNCBpbnB1dD1iZjU2YTBh
ZjViNzMwYmQxXSovDQogew0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVu
c2lnbmVkIGxvbmcpKGF0dHJfdClnZXRhdHRycyhzZWxmLT53aW4pKTsNCisgICAgcmV0dXJuIFB5
TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgbG9uZyBsb25nKShhdHRyX3QpZ2V0
YXR0cnMoc2VsZi0+d2luKSk7DQogfQ0KIA0KIC8qW2NsaW5pYyBpbnB1dF0NCkBAIC0zMTQyLDcg
KzMxMzcsNyBAQCBfY3Vyc2VzX3dpbmRvd19nZXRia2dkX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmpl
Y3QgKnNlbGYpDQogICAgICAgICBjdXJzZXNfd2luZG93X3NldF9lcnJvcihzZWxmLCAiZ2V0Ymtn
ZCIsIE5VTEwpOw0KICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgIH0NCi0gICAgcmV0dXJuIFB5
TG9uZ19Gcm9tTG9uZyhydG4pOw0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdM
b25nKHJ0bik7DQogfQ0KIA0KIC8qW2NsaW5pYyBpbnB1dF0NCkBAIC0zNzEzLDkgKzM3MDgsOCBA
QCBfY3Vyc2VzX3dpbmRvd19pbmNoX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIGlu
dCBncm91cF9yaWdodF8xLA0KICAgICBjaHR5cGUgcnRuOw0KICAgICBjb25zdCBjaGFyICpmdW5j
bmFtZTsNCiAjaWZkZWYgSEFWRV9OQ1VSU0VTVw0KLSAgICAvKiBuY3Vyc2VzdydzIHdpbmNoKCkg
cmV0dXJucyB0aGUgY2hhcmFjdGVyJ3Mgd2hvbGUgY29kZSBwb2ludCBpbnN0ZWFkIG9mDQotICAg
ICAgIGl0cyBsb2NhbGUgYnl0ZSwgb3ZlcmZsb3dpbmcgdGhlIGNodHlwZSdzIDgtYml0IGNoYXJh
Y3RlciBmaWVsZCBpbnRvIHRoZQ0KLSAgICAgICBjb2xvciBhbmQgYXR0cmlidXRlIGJpdHM7IHJl
YWQgdGhlIHdpZGUgY2VsbCBhbmQgcmVidWlsZCBpdCBpbnN0ZWFkLiAqLw0KKyAgICAvKiBuY3Vy
c2VzdydzIHdpbmNoKCkgcmV0dXJucyB0aGUgd2hvbGUgY29kZSBwb2ludCwgd2hpY2ggb3ZlcmZs
b3dzIHRoZQ0KKyAgICAgICBjaHR5cGUncyA4LWJpdCBjaGFyYWN0ZXIgZmllbGQgaW50byB0aGUg
Y29sb3IgYW5kIGF0dHJpYnV0ZSBiaXRzLiAqLw0KICAgICBjY2hhcl90IGNlbGwgPSB7MH07DQog
ICAgIGludCByYzsNCiAgICAgaWYgKCFncm91cF9yaWdodF8xKSB7DQpAQCAtMzc1OSw3ICszNzUz
LDcgQEAgX2N1cnNlc193aW5kb3dfaW5jaF9pbXBsKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxm
LCBpbnQgZ3JvdXBfcmlnaHRfMSwNCiAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICB9DQogI2Vu
ZGlmDQotICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhydG4pOw0KKyAgICByZXR1
cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKHJ0bik7DQogfQ0KIA0KIFB5RG9jX1NUUlZB
UihfY3Vyc2VzX3dpbmRvd19pbnN0cl9fZG9jX18sDQpAQCAtNTc3Niw3ICs1NzcwLDcgQEAgX2N1
cnNlc19jb2xvcl9wYWlyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHBhaXJfbnVtYmVyKQ0K
ICAgICAgICAgICAgICAgICAgICAgIHBhaXJfbnVtYmVyLCAoaW50KVBBSVJfTlVNQkVSKEFfQ09M
T1IpKTsNCiAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICB9DQotICAgIHJldHVybiBQeUxvbmdf
RnJvbUxvbmcoYXR0cik7DQorICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmco
YXR0cik7DQogfQ0KIA0KIC8qW2NsaW5pYyBpbnB1dF0NCkBAIC02NTYyLDkgKzY1NTYsMTQgQEAg
Y3Vyc2VzX2luaXRfZGljdChQeU9iamVjdCAqbW9kdWxlKQ0KICAgICB9DQogICAgIC8qIFRoaXMg
d2FzIG1vdmVkIGZyb20gaW5pdGN1cnNlcygpIGJlY2F1c2UgaXQgY29yZSBkdW1wZWQgb24gU0dJ
LA0KICAgICAgICB3aGVyZSB0aGV5J3JlIG5vdCBkZWZpbmVkIHVudGlsIHlvdSd2ZSBjYWxsZWQg
aW5pdHNjcigpICovDQorICAgIC8qIFVzZSBsb25nIGxvbmcsIG5vdCBsb25nOiBhIGNodHlwZSBj
b25zdGFudCAodGhlIEFfKiBhdHRyaWJ1dGVzLCBBQ1NfKg0KKyAgICAgICBhbmQga2V5IGNvZGVz
KSBjYW4gc2V0IGJpdHMgYmV5b25kIGEgMzItYml0IGxvbmcsIHdoaWNoIGlzIHdoYXQgbG9uZyBp
cw0KKyAgICAgICBvbiBMTFA2NCBwbGF0Zm9ybXMgc3VjaCBhcyBXaW5kb3dzIC0tIEFfRElNICgw
eDgwMDAwMDAwKSB3b3VsZCBvdGhlcndpc2UNCisgICAgICAgYmUgc2lnbi1leHRlbmRlZCB0byBh
IG5lZ2F0aXZlIG51bWJlci4gIGxvbmcgbG9uZyBpcyBhdCBsZWFzdCA2NCBiaXRzDQorICAgICAg
IGV2ZXJ5d2hlcmUgYW5kIHN0aWxsIHJlcHJlc2VudHMgdGhlIG5lZ2F0aXZlIEVSUiAoLTEpLiAq
Lw0KICNkZWZpbmUgU2V0RGljdEludChOQU1FLCBWQUxVRSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXA0KICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgUHlPYmplY3QgKnZhbHVl
ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKShWQUxVRSkpOyAgICAgICAgICAgXA0KKyAgICAgICAg
UHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBs
b25nIGxvbmcpKFZBTFVFKSk7ICBcDQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICAgICAgcmV0dXJu
IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcDQpAQCAtNzUzMSw3ICs3NTMwLDcgQEAgX2N1cnNlc19wYWlyX2NvbnRlbnRfaW1w
bChQeU9iamVjdCAqbW9kdWxlLCBpbnQgcGFpcl9udW1iZXIpDQogQHBlcm1pdF9sb25nX3N1bW1h
cnkNCiBfY3Vyc2VzLnBhaXJfbnVtYmVyDQogDQotICAgIGF0dHI6IGludA0KKyAgICBhdHRyOiBh
dHRyDQogICAgIC8NCiANCiBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgY29sb3ItcGFpciBzZXQg
YnkgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgdmFsdWUuDQpAQCAtNzU0MCw4ICs3NTM5LDggQEAg
Y29sb3JfcGFpcigpIGlzIHRoZSBjb3VudGVycGFydCB0byB0aGlzIGZ1bmN0aW9uLg0KIFtjbGlu
aWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8NCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJz
ZXNfcGFpcl9udW1iZXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgYXR0cikNCi0vKltjbGlu
aWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODViY2U3ZDY1YzBhYTNmNCBpbnB1dD1iMTEx
NTJhNzhjMmY5YWJmXSovDQorX2N1cnNlc19wYWlyX251bWJlcl9pbXBsKFB5T2JqZWN0ICptb2R1
bGUsIGF0dHJfdCBhdHRyKQ0KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0w
NGNhZmM5MDgzMzI5MTk3IGlucHV0PTU2MjI3M2IxYTEyYTA2ZDJdKi8NCiB7DQogICAgIFB5Q3Vy
c2VzU3RhdGVmdWxJbml0aWFsaXNlZChtb2R1bGUpOw0KICAgICBQeUN1cnNlc1N0YXRlZnVsSW5p
dGlhbGlzZWRDb2xvcihtb2R1bGUpOw0KQEAgLTc4NzIsNyArNzg3MSw3IEBAIF9jdXJzZXNfc3Rh
cnRfY29sb3JfaW1wbChQeU9iamVjdCAqbW9kdWxlKQ0KICAgICB9DQogI2RlZmluZSBESUNUX0FE
RF9JTlRfVkFMVUUoTkFNRSwgVkFMVUUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQog
ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcDQotICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmco
KGxvbmcpKFZBTFVFKSk7ICAgICAgICAgICBcDQorICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQ
eUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIGxvbmcgbG9uZykoVkFMVUUpKTsg
IFwNCiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCkBAIC03OTE3
LDcgKzc5MTYsNyBAQCBfY3Vyc2VzX3Rlcm1fYXR0cnNfaW1wbChQeU9iamVjdCAqbW9kdWxlKQ0K
IHsNCiAgICAgUHlDdXJzZXNTdGF0ZWZ1bEluaXRpYWxpc2VkKG1vZHVsZSk7DQogDQotICAgIHJl
dHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyh0ZXJtX2F0dHJzKCkpOw0KKyAgICByZXR1cm4g
UHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKHRlcm1fYXR0cnMoKSk7DQogfQ0KICNlbmRpZiAv
KiBIQVZFX0NVUlNFU19URVJNX0FUVFJTICovDQogDQpAQCAtODQzNywxNSArODQzNiwxNSBAQCBO
b0FyZ05vUmV0dXJuRnVuY3Rpb25Cb2R5KHNsa190b3VjaCkNCiAvKltjbGluaWMgaW5wdXRdDQog
X2N1cnNlcy5zbGtfYXR0cm9uDQogDQotICAgIGF0dHI6IGxvbmcNCisgICAgYXR0cjogYXR0cg0K
ICAgICAvDQogDQogQWRkIHRoZSBnaXZlbiBjaHR5cGUgYXR0cmlidXRlcyB0byB0aGUgc29mdCBs
YWJlbHMuDQogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLw0KIA0KIHN0YXRpYyBQeU9i
amVjdCAqDQotX2N1cnNlc19zbGtfYXR0cm9uX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgbG9uZyBh
dHRyKQ0KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wMWFhMjk4NDhhNThh
YjUwIGlucHV0PWZhMTk4YTYwNGUzZWVjMDRdKi8NCitfY3Vyc2VzX3Nsa19hdHRyb25faW1wbChQ
eU9iamVjdCAqbW9kdWxlLCBhdHRyX3QgYXR0cikNCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBj
b2RlOiBvdXRwdXQ9YzJhNGJmYWM4ZGRiYmYyMCBpbnB1dD1jMmNmZmZlYjdjZTZhODZlXSovDQog
ew0KICAgICBQeUN1cnNlc1N0YXRlZnVsSW5pdGlhbGlzZWQobW9kdWxlKTsNCiAgICAgcmV0dXJu
IGN1cnNlc19jaGVja19lcnIobW9kdWxlLCBzbGtfYXR0cm9uKChjaHR5cGUpYXR0ciksDQpAQCAt
ODQ1NSwxNSArODQ1NCwxNSBAQCBfY3Vyc2VzX3Nsa19hdHRyb25faW1wbChQeU9iamVjdCAqbW9k
dWxlLCBsb25nIGF0dHIpDQogLypbY2xpbmljIGlucHV0XQ0KIF9jdXJzZXMuc2xrX2F0dHJvZmYN
CiANCi0gICAgYXR0cjogbG9uZw0KKyAgICBhdHRyOiBhdHRyDQogICAgIC8NCiANCiBSZW1vdmUg
dGhlIGdpdmVuIGNodHlwZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHNvZnQgbGFiZWxzLg0KIFtjbGlu
aWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8NCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJz
ZXNfc2xrX2F0dHJvZmZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBsb25nIGF0dHIpDQotLypbY2xp
bmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdiMTcyY2MzN2ExNzgxMWYgaW5wdXQ9MjFk
YWI1NWQ0M2QzMGI4Zl0qLw0KK19jdXJzZXNfc2xrX2F0dHJvZmZfaW1wbChQeU9iamVjdCAqbW9k
dWxlLCBhdHRyX3QgYXR0cikNCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9
MzIxYTNiNGRjNjExMTliYiBpbnB1dD0yNTkzMDI3ZTAzY2JkMzAyXSovDQogew0KICAgICBQeUN1
cnNlc1N0YXRlZnVsSW5pdGlhbGlzZWQobW9kdWxlKTsNCiAgICAgcmV0dXJuIGN1cnNlc19jaGVj
a19lcnIobW9kdWxlLCBzbGtfYXR0cm9mZigoY2h0eXBlKWF0dHIpLA0KQEAgLTg0NzMsMTUgKzg0
NzIsMTUgQEAgX2N1cnNlc19zbGtfYXR0cm9mZl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGxvbmcg
YXR0cikNCiAvKltjbGluaWMgaW5wdXRdDQogX2N1cnNlcy5zbGtfYXR0cnNldA0KIA0KLSAgICBh
dHRyOiBsb25nDQorICAgIGF0dHI6IGF0dHINCiAgICAgLw0KIA0KIFNldCB0aGUgY2h0eXBlIGF0
dHJpYnV0ZXMgb2YgdGhlIHNvZnQgbGFiZWxzLg0KIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNv
ZGVdKi8NCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJzZXNfc2xrX2F0dHJzZXRfaW1wbChQ
eU9iamVjdCAqbW9kdWxlLCBsb25nIGF0dHIpDQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29k
ZTogb3V0cHV0PTExMzllMmIwZjc1N2VkZmQgaW5wdXQ9ZDVjNzk4OTU2YTVmMDQ2YV0qLw0KK19j
dXJzZXNfc2xrX2F0dHJzZXRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBhdHRyX3QgYXR0cikNCisv
KltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjM5NmI3NDVjYjIzZmMwMSBpbnB1
dD01ZmFhZmRhNDQ1YjJiMTU4XSovDQogew0KICAgICBQeUN1cnNlc1N0YXRlZnVsSW5pdGlhbGlz
ZWQobW9kdWxlKTsNCiAgICAgcmV0dXJuIGN1cnNlc19jaGVja19lcnIobW9kdWxlLCBzbGtfYXR0
cnNldCgoY2h0eXBlKWF0dHIpLA0KQEAgLTg1MDAsNyArODQ5OSw3IEBAIF9jdXJzZXNfc2xrX2F0
dHJfaW1wbChQeU9iamVjdCAqbW9kdWxlKQ0KIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6
IG91dHB1dD02ZDQ3NzUyZjgyYmRjMjlmIGlucHV0PWJlMzg4MDVmZGVjNTIxNDldKi8NCiB7DQog
ICAgIFB5Q3Vyc2VzU3RhdGVmdWxJbml0aWFsaXNlZChtb2R1bGUpOw0KLSAgICByZXR1cm4gUHlM
b25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpc2xrX2F0dHIoKSk7DQorICAgIHJl
dHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIGxvbmcgbG9uZylzbGtf
YXR0cigpKTsNCiB9DQogI2VuZGlmDQogDQpAQCAtOTA4MCw2ICs5MDc5LDE3IEBAIGN1cnNlc21v
ZHVsZV9leGVjKFB5T2JqZWN0ICptb2R1bGUpDQogICAgICAgICByZXR1cm4gLTE7DQogICAgIH0N
CiANCisgICAgLyogV2hldGhlciBhIGNlbGwgaG9sZHMgYSBjaGFyYWN0ZXIgb3IgYSBzaW5nbGUg
Ynl0ZSBvZiB0aGUgbG9jYWxlDQorICAgICAgIGVuY29kaW5nLCBkZWNpZGVkIHdoZW4gdGhlIG1v
ZHVsZSBpcyBidWlsdC4gKi8NCisjaWZkZWYgSEFWRV9OQ1VSU0VTVw0KKyAgICByYyA9IFB5RGlj
dF9TZXRJdGVtU3RyaW5nKG1vZHVsZV9kaWN0LCAiX3dpZGVfY2hhcmFjdGVyX3N1cHBvcnQiLCBQ
eV9UcnVlKTsNCisjZWxzZQ0KKyAgICByYyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZV9k
aWN0LCAiX3dpZGVfY2hhcmFjdGVyX3N1cHBvcnQiLCBQeV9GYWxzZSk7DQorI2VuZGlmDQorICAg
IGlmIChyYyA8IDApIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KICAgICAvKiBN
YWtlIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSAqLw0KICAgICBQeU9iamVjdCAqY3Vyc2VzX3ZlcnNp
b24gPSBQeUJ5dGVzX0Zyb21TdHJpbmcoUHlDdXJzZXNWZXJzaW9uKTsNCiAgICAgaWYgKGN1cnNl
c192ZXJzaW9uID09IE5VTEwpIHsNCkBAIC05MTE4LDcgKzkxMjgsNyBAQCBjdXJzZXNtb2R1bGVf
ZXhlYyhQeU9iamVjdCAqbW9kdWxlKQ0KIA0KICNkZWZpbmUgU2V0RGljdEludChOQU1FLCBWQUxV
RSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K
LSAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKShWQUxVRSkp
OyAgICAgICAgICAgXA0KKyAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21VbnNp
Z25lZExvbmdMb25nKCh1bnNpZ25lZCBsb25nIGxvbmcpKFZBTFVFKSk7ICBcDQogICAgICAgICBp
ZiAodmFsdWUgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcDQogICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcDQogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9j
bGluaWMvX2N1cnNlc21vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fY3Vyc2VzbW9kdWxlLmMu
aA0KaW5kZXggNzBkOTliNGJmMzUxYTIxLi5kZmQ1ODliYTQ1MDg5ZTcgMTAwNjQ0DQotLS0gYS9N
b2R1bGVzL2NsaW5pYy9fY3Vyc2VzbW9kdWxlLmMuaA0KKysrIGIvTW9kdWxlcy9jbGluaWMvX2N1
cnNlc21vZHVsZS5jLmgNCkBAIC00Njg0LDE2ICs0Njg0LDE1IEBAIFB5RG9jX1NUUlZBUihfY3Vy
c2VzX3BhaXJfbnVtYmVyX19kb2NfXywNCiAgICAgeyJwYWlyX251bWJlciIsIChQeUNGdW5jdGlv
bilfY3Vyc2VzX3BhaXJfbnVtYmVyLCBNRVRIX08sIF9jdXJzZXNfcGFpcl9udW1iZXJfX2RvY19f
fSwNCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJzZXNfcGFpcl9udW1iZXJfaW1wbChQeU9i
amVjdCAqbW9kdWxlLCBpbnQgYXR0cik7DQorX2N1cnNlc19wYWlyX251bWJlcl9pbXBsKFB5T2Jq
ZWN0ICptb2R1bGUsIGF0dHJfdCBhdHRyKTsNCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KIF9jdXJz
ZXNfcGFpcl9udW1iZXIoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykNCiB7DQogICAg
IFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOw0KLSAgICBpbnQgYXR0cjsNCisgICAgYXR0
cl90IGF0dHI7DQogDQotICAgIGF0dHIgPSBQeUxvbmdfQXNJbnQoYXJnKTsNCi0gICAgaWYgKGF0
dHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgew0KKyAgICBpZiAoIWF0dHJfY29udmVydGVy
KGFyZywgJmF0dHIpKSB7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgIH0NCiAgICAgcmV0dXJu
X3ZhbHVlID0gX2N1cnNlc19wYWlyX251bWJlcl9pbXBsKG1vZHVsZSwgYXR0cik7DQpAQCAtNTY3
NSwxNiArNTY3NCwxNSBAQCBQeURvY19TVFJWQVIoX2N1cnNlc19zbGtfYXR0cm9uX19kb2NfXywN
CiAgICAgeyJzbGtfYXR0cm9uIiwgKFB5Q0Z1bmN0aW9uKV9jdXJzZXNfc2xrX2F0dHJvbiwgTUVU
SF9PLCBfY3Vyc2VzX3Nsa19hdHRyb25fX2RvY19ffSwNCiANCiBzdGF0aWMgUHlPYmplY3QgKg0K
LV9jdXJzZXNfc2xrX2F0dHJvbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGxvbmcgYXR0cik7DQor
X2N1cnNlc19zbGtfYXR0cm9uX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgYXR0cl90IGF0dHIpOw0K
IA0KIHN0YXRpYyBQeU9iamVjdCAqDQogX2N1cnNlc19zbGtfYXR0cm9uKFB5T2JqZWN0ICptb2R1
bGUsIFB5T2JqZWN0ICphcmcpDQogew0KICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVM
TDsNCi0gICAgbG9uZyBhdHRyOw0KKyAgICBhdHRyX3QgYXR0cjsNCiANCi0gICAgYXR0ciA9IFB5
TG9uZ19Bc0xvbmcoYXJnKTsNCi0gICAgaWYgKGF0dHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQo
KSkgew0KKyAgICBpZiAoIWF0dHJfY29udmVydGVyKGFyZywgJmF0dHIpKSB7DQogICAgICAgICBn
b3RvIGV4aXQ7DQogICAgIH0NCiAgICAgcmV0dXJuX3ZhbHVlID0gX2N1cnNlc19zbGtfYXR0cm9u
X2ltcGwobW9kdWxlLCBhdHRyKTsNCkBAIC01NzAzLDE2ICs1NzAxLDE1IEBAIFB5RG9jX1NUUlZB
UihfY3Vyc2VzX3Nsa19hdHRyb2ZmX19kb2NfXywNCiAgICAgeyJzbGtfYXR0cm9mZiIsIChQeUNG
dW5jdGlvbilfY3Vyc2VzX3Nsa19hdHRyb2ZmLCBNRVRIX08sIF9jdXJzZXNfc2xrX2F0dHJvZmZf
X2RvY19ffSwNCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJzZXNfc2xrX2F0dHJvZmZfaW1w
bChQeU9iamVjdCAqbW9kdWxlLCBsb25nIGF0dHIpOw0KK19jdXJzZXNfc2xrX2F0dHJvZmZfaW1w
bChQeU9iamVjdCAqbW9kdWxlLCBhdHRyX3QgYXR0cik7DQogDQogc3RhdGljIFB5T2JqZWN0ICoN
CiBfY3Vyc2VzX3Nsa19hdHRyb2ZmKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpDQog
ew0KICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsNCi0gICAgbG9uZyBhdHRyOw0K
KyAgICBhdHRyX3QgYXR0cjsNCiANCi0gICAgYXR0ciA9IFB5TG9uZ19Bc0xvbmcoYXJnKTsNCi0g
ICAgaWYgKGF0dHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgew0KKyAgICBpZiAoIWF0dHJf
Y29udmVydGVyKGFyZywgJmF0dHIpKSB7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgIH0NCiAg
ICAgcmV0dXJuX3ZhbHVlID0gX2N1cnNlc19zbGtfYXR0cm9mZl9pbXBsKG1vZHVsZSwgYXR0cik7
DQpAQCAtNTczMSwxNiArNTcyOCwxNSBAQCBQeURvY19TVFJWQVIoX2N1cnNlc19zbGtfYXR0cnNl
dF9fZG9jX18sDQogICAgIHsic2xrX2F0dHJzZXQiLCAoUHlDRnVuY3Rpb24pX2N1cnNlc19zbGtf
YXR0cnNldCwgTUVUSF9PLCBfY3Vyc2VzX3Nsa19hdHRyc2V0X19kb2NfX30sDQogDQogc3RhdGlj
IFB5T2JqZWN0ICoNCi1fY3Vyc2VzX3Nsa19hdHRyc2V0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwg
bG9uZyBhdHRyKTsNCitfY3Vyc2VzX3Nsa19hdHRyc2V0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwg
YXR0cl90IGF0dHIpOw0KIA0KIHN0YXRpYyBQeU9iamVjdCAqDQogX2N1cnNlc19zbGtfYXR0cnNl
dChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQ0KIHsNCiAgICAgUHlPYmplY3QgKnJl
dHVybl92YWx1ZSA9IE5VTEw7DQotICAgIGxvbmcgYXR0cjsNCisgICAgYXR0cl90IGF0dHI7DQog
DQotICAgIGF0dHIgPSBQeUxvbmdfQXNMb25nKGFyZyk7DQotICAgIGlmIChhdHRyID09IC0xICYm
IFB5RXJyX09jY3VycmVkKCkpIHsNCisgICAgaWYgKCFhdHRyX2NvbnZlcnRlcihhcmcsICZhdHRy
KSkgew0KICAgICAgICAgZ290byBleGl0Ow0KICAgICB9DQogICAgIHJldHVybl92YWx1ZSA9IF9j
dXJzZXNfc2xrX2F0dHJzZXRfaW1wbChtb2R1bGUsIGF0dHIpOw0KQEAgLTYyMzgsNCArNjIzNCw0
IEBAIF9jdXJzZXNfaGFzX2V4dGVuZGVkX2NvbG9yX3N1cHBvcnQoUHlPYmplY3QgKm1vZHVsZSwg
UHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkDQogI2lmbmRlZiBfQ1VSU0VTX0FTU1VNRV9ERUZB
VUxUX0NPTE9SU19NRVRIT0RERUYNCiAgICAgI2RlZmluZSBfQ1VSU0VTX0FTU1VNRV9ERUZBVUxU
X0NPTE9SU19NRVRIT0RERUYNCiAjZW5kaWYgLyogIWRlZmluZWQoX0NVUlNFU19BU1NVTUVfREVG
QVVMVF9DT0xPUlNfTUVUSE9EREVGKSAqLw0KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6
IG91dHB1dD1hZTEzNTk5NjRmZWVmZDY0IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8NCisvKltj
bGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Y2I1NTI1Yzg4YWU1YzQ0MCBpbnB1dD1h
OTA0OTA1NDAxM2ExYjc3XSovDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fClB5dGhvbi1jaGVja2lucyBtYWlsaW5nIGxpc3QgLS0gcHl0aG9uLWNoZWNr
aW5zQHB5dGhvbi5vcmcKVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byBweXRob24tY2hl
Y2tpbnMtbGVhdmVAcHl0aG9uLm9yZwpodHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuMy8v
bGlzdHMvcHl0aG9uLWNoZWNraW5zLnB5dGhvbi5vcmcKTWVtYmVyIGFkZHJlc3M6IHB5dGhvbi1w
eXRob24tY2hlY2tpbnNAbS5nbWFuZS1teC5vcmcK