[3.12] gh-149079: Fix O(n^2) canonical ordering in unicodedata.normalize() (GH-149080) (#150843)
Yhg1s <[email protected]> Tue, 04 Aug 2026 05:25:56 -0400 (EDT)
| Newsgroups | gmane.comp.python.cvs |
|---|---|
| Message-ID | <[email protected]> |
aHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbi9jcHl0aG9uL2NvbW1pdC9kM2FiOTQ1YWYyNWIyOGRm ZTEzYWM2Y2I0MGMxMjRhMDFiMzNjZTFmDQpjb21taXQ6IGQzYWI5NDVhZjI1YjI4ZGZlMTNhYzZj YjQwYzEyNGEwMWIzM2NlMWYNCmJyYW5jaDogMy4xMg0KYXV0aG9yOiBQZXRyIFZpa3RvcmluIDxl bmN1a291QGdtYWlsLmNvbT4NCmNvbW1pdHRlcjogWWhnMXMgPHRob21hc0BweXRob24ub3JnPg0K ZGF0ZTogMjAyNi0wOC0wNFQxMToyMjoxMSswMjowMA0Kc3VtbWFyeToNCg0KWzMuMTJdIGdoLTE0 OTA3OTogRml4IE8obl4yKSBjYW5vbmljYWwgb3JkZXJpbmcgaW4gdW5pY29kZWRhdGEubm9ybWFs aXplKCkgKEdILTE0OTA4MCkgKCMxNTA4NDMpDQoNClJlcGxhY2UgdGhlIGluc2VydGlvbiBzb3J0 IHVzZWQgZm9yIGNhbm9uaWNhbCBvcmRlcmluZyBvZiBjb21iaW5pbmcNCmNoYXJhY3RlcnMgd2l0 aCBhIGh5YnJpZCBhcHByb2FjaDogaW5zZXJ0aW9uIHNvcnQgZm9yIHNob3J0IHJ1bnMgKDwgMjAp DQphbmQgY291bnRpbmcgc29ydCBmb3IgbG9uZ2VyIHJ1bnMsIHJlZHVjaW5nIHdvcnN0LWNhc2Ug Y29tcGxleGl0eSBmcm9tDQpPKG5eMikgdG8gTyhuKS4gVGhpcyBwcmV2ZW50cyBkZW5pYWwgb2Yg c2VydmljZSB2aWEgY3JhZnRlZCBVbmljb2RlDQpzdHJpbmdzIHdpdGggbWFueSBjb21iaW5pbmcg Y2hhcmFjdGVycyBpbiBhbHRlcm5hdGluZyBDQ0Mgb3JkZXIuDQoNCihjaGVycnkgcGlja2VkIGZy b20gY29tbWl0IDk5MTIyNGIxZTgzMTFjODVmMTk4ZjZkZDgyMDhiZjhjZmY3ZmMyNmYpDQoNCkNv LWF1dGhvcmVkLWJ5OiBTZXRoIExhcnNvbiA8c2V0aEBweXRob24ub3JnPg0KQ28tYXV0aG9yZWQt Ynk6IGNoNG4zLXlvb24gPGNoNG4zLnlvb25AZ21haWwuY29tPg0KQ28tYXV0aG9yZWQtYnk6IFNl b2tjaGFuIFlvb24gPDEzODUyOTI1K2NoNG4zLXlvb25AdXNlcnMubm9yZXBseS5naXRodWIuY29t Pg0KQ28tYXV0aG9yZWQtYnk6IFN0YW4gVWxicnljaCA8c3RhbkBweXRob24ub3JnPg0KQ28tYXV0 aG9yZWQtYnk6IELDqW7DqWRpa3QgVHJhbiA8MTA3OTY2MDArcGljbml4ekB1c2Vycy5ub3JlcGx5 LmdpdGh1Yi5jb20+DQpDby1hdXRob3JlZC1ieTogU2VyaGl5IFN0b3JjaGFrYSA8c3RvcmNoYWth QGdtYWlsLmNvbT4NCkNvLWF1dGhvcmVkLWJ5OiBNYXVyeWN5IFBhd8WCb3dza2ktV2llcm/FhHNr aSA8bWF1cnljeUBtYXVyeWN5LmNvbT4NCg0KZmlsZXM6DQpBIE1pc2MvTkVXUy5kL25leHQvU2Vj dXJpdHkvMjAyNi0wNC0yNy0xNi0zNi0xMS5naC1pc3N1ZS0xNDkwNzkudktsLUxNLnJzdA0KTSBM aWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5DQpNIE1vZHVsZXMvdW5pY29kZWRhdGEuYw0KDQpk aWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weSBiL0xpYi90ZXN0L3Rlc3Rf dW5pY29kZWRhdGEucHkNCmluZGV4IDUxNWMzODQwY2IzNjQ3Li42YjRiZmYxOTRlYjRiNSAxMDA2 NDQNCi0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkNCisrKyBiL0xpYi90ZXN0L3Rl c3RfdW5pY29kZWRhdGEucHkNCkBAIC0yMDMsNiArMjAzLDM0IEBAIGRlZiB0ZXN0X2lzc3VlMTAy NTQoc2VsZik6DQogICAgICAgICBiID0gJ0NcdTAzMzgnICogMjAgICsgJ1x4QzcnDQogICAgICAg ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubm9ybWFsaXplKCdORkMnLCBhKSwgYikNCiANCisg ICAgZGVmIHRlc3RfbG9uZ19jb21iaW5pbmdfbWFya19ydW4oc2VsZik6DQorICAgICAgICAjIGdo LTE0OTA3OTogYXZvaWQgcXVhZHJhdGljIGNhbm9uaWNhbCBvcmRlcmluZy4NCisgICAgICAgIHBh eWxvYWQgPSAiYSIgKyAoIlx1MDMwMFx1MDMyNyIgKiAzMikNCisgICAgICAgIG5mZCA9ICJhIiAr ICgiXHUwMzI3IiAqIDMyKSArICgiXHUwMzAwIiAqIDMyKQ0KKyAgICAgICAgbmZjID0gIlx1MDBl MCIgKyAoIlx1MDMyNyIgKiAzMikgKyAoIlx1MDMwMCIgKiAzMSkNCisNCisgICAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoc2VsZi5kYi5ub3JtYWxpemUoIk5GRCIsIHBheWxvYWQpLCBuZmQpDQorICAg ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubm9ybWFsaXplKCJORktEIiwgcGF5bG9hZCks IG5mZCkNCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5ub3JtYWxpemUoIk5GQyIs IHBheWxvYWQpLCBuZmMpDQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubm9ybWFs aXplKCJORktDIiwgcGF5bG9hZCksIG5mYykNCisNCisgICAgZGVmIHRlc3RfY29tYmluaW5nX21h cmtfcnVuX2Zhc3RfcGF0aHMoc2VsZik6DQorICAgICAgICAjIGdoLTE0OTA3OTogY292ZXIgc2hv cnQgcnVucyBhbmQgYWxyZWFkeS1zb3J0ZWQgbG9uZyBydW5zLg0KKyAgICAgICAgc2hvcnRfcGF5 bG9hZCA9ICJhIiArICgiXHUwMzAwXHUwMzI3IiAqIDkpICsgIlx1MDMwMCINCisgICAgICAgIHNo b3J0X25mZCA9ICJhIiArICgiXHUwMzI3IiAqIDkpICsgKCJcdTAzMDAiICogMTApDQorICAgICAg ICBzaG9ydF9uZmMgPSAiXHUwMGUwIiArICgiXHUwMzI3IiAqIDkpICsgKCJcdTAzMDAiICogOSkN CisgICAgICAgIGxvbmdfc29ydGVkID0gImEiICsgKCJcdTAzMjciICogMzApICsgKCJcdTAzMDAi ICogMzApDQorICAgICAgICBsb25nX3NvcnRlZF9uZmMgPSAiXHUwMGUwIiArICgiXHUwMzI3IiAq IDMwKSArICgiXHUwMzAwIiAqIDI5KQ0KKw0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm LmRiLm5vcm1hbGl6ZSgiTkZEIiwgc2hvcnRfcGF5bG9hZCksIHNob3J0X25mZCkNCisgICAgICAg IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5ub3JtYWxpemUoIk5GS0QiLCBzaG9ydF9wYXlsb2Fk KSwgc2hvcnRfbmZkKQ0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm5vcm1hbGl6 ZSgiTkZDIiwgc2hvcnRfcGF5bG9hZCksIHNob3J0X25mYykNCisgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwoc2VsZi5kYi5ub3JtYWxpemUoIk5GS0MiLCBzaG9ydF9wYXlsb2FkKSwgc2hvcnRfbmZj KQ0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm5vcm1hbGl6ZSgiTkZEIiwgbG9u Z19zb3J0ZWQpLCBsb25nX3NvcnRlZCkNCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5k Yi5ub3JtYWxpemUoIk5GS0QiLCBsb25nX3NvcnRlZCksIGxvbmdfc29ydGVkKQ0KKyAgICAgICAg c2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm5vcm1hbGl6ZSgiTkZDIiwgbG9uZ19zb3J0ZWQpLCBs b25nX3NvcnRlZF9uZmMpDQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubm9ybWFs aXplKCJORktDIiwgbG9uZ19zb3J0ZWQpLCBsb25nX3NvcnRlZF9uZmMpDQorDQogICAgIGRlZiB0 ZXN0X2lzc3VlMjk0NTYoc2VsZik6DQogICAgICAgICAjIEZpeCAjMjk0NTYNCiAgICAgICAgIHUx MTc2X3N0cl9hID0gJ1x1MTEwMFx1MTE3Nlx1MTFhOCcNCmRpZmYgLS1naXQgYS9NaXNjL05FV1Mu ZC9uZXh0L1NlY3VyaXR5LzIwMjYtMDQtMjctMTYtMzYtMTEuZ2gtaXNzdWUtMTQ5MDc5LnZLbC1M TS5yc3QgYi9NaXNjL05FV1MuZC9uZXh0L1NlY3VyaXR5LzIwMjYtMDQtMjctMTYtMzYtMTEuZ2gt aXNzdWUtMTQ5MDc5LnZLbC1MTS5yc3QNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwMDAwMDAwMC4uNGVkMjJiNThmNzQwNWYNCi0tLSAvZGV2L251bGwNCisrKyBiL01pc2MvTkVX Uy5kL25leHQvU2VjdXJpdHkvMjAyNi0wNC0yNy0xNi0zNi0xMS5naC1pc3N1ZS0xNDkwNzkudkts LUxNLnJzdA0KQEAgLTAsMCArMSw1IEBADQorRml4IGEgcG90ZW50aWFsIGRlbmlhbCBvZiBzZXJ2 aWNlIGluIDpmdW5jOmB1bmljb2RlZGF0YS5ub3JtYWxpemVgLiBUaGUNCitjYW5vbmljYWwgb3Jk ZXJpbmcgc3RlcCBvZiBVbmljb2RlIG5vcm1hbGl6YXRpb24gdXNlZCBhIHF1YWRyYXRpYy10aW1l IGluc2VydGlvbg0KK3NvcnQgZm9yIHJlb3JkZXJpbmcgY29tYmluaW5nIGNoYXJhY3RlcnMsIHdo aWNoIGNvdWxkIGJlIGV4cGxvaXRlZCB3aXRoDQorY3JhZnRlZCBpbnB1dCBjb250YWluaW5nIG1h bnkgY29tYmluaW5nIGNoYXJhY3RlcnMgaW4gbm9uLWNhbm9uaWNhbCBvcmRlci4NCitSZXBsYWNl ZCB3aXRoIGEgbGluZWFyLXRpbWUgY291bnRpbmcgc29ydCBmb3IgbG9uZyBydW5zLg0KZGlmZiAt LWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGEuYyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYw0KaW5k ZXggNDFkY2Q1ZjhmODgzZjIuLmRlMzQ1MTYyOGM2ZWY5IDEwMDY0NA0KLS0tIGEvTW9kdWxlcy91 bmljb2RlZGF0YS5jDQorKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMNCkBAIC00OTAsMTkgKzQ5 MCw4MCBAQCBnZXRfZGVjb21wX3JlY29yZChQeU9iamVjdCAqc2VsZiwgUHlfVUNTNCBjb2RlLA0K ICNkZWZpbmUgTkNvdW50ICAoVkNvdW50KlRDb3VudCkNCiAjZGVmaW5lIFNDb3VudCAgKExDb3Vu dCpOQ291bnQpDQogDQorLyogU21hbGwgY29tYmluaW5nIHJ1bnMgYXJlIHVzdWFsbHkgY2hlYXBl ciB3aXRoIGluc2VydGlvbiBzb3J0LiAqLw0KKyNkZWZpbmUgQ0FOT05JQ0FMX09SREVSSU5HX0NP VU5USU5HX1NPUlRfVEhSRVNIT0xEIDIwDQorDQorc3RhdGljIHZvaWQNCitjYW5vbmljYWxfb3Jk ZXJpbmdfc29ydF9pbnNlcnRpb24oaW50IGtpbmQsIHZvaWQgKmRhdGEsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQ0K K3sNCisgICAgZm9yIChQeV9zc2l6ZV90IGkgPSBzdGFydCArIDE7IGkgPCBlbmQ7IGkrKykgew0K KyAgICAgICAgUHlfVUNTNCBjb2RlID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7DQor ICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbWJpbmluZyA9IF9nZXRyZWNvcmRfZXgoY29kZSktPmNv bWJpbmluZzsNCisgICAgICAgIFB5X3NzaXplX3QgaiA9IGk7DQorDQorICAgICAgICB3aGlsZSAo aiA+IHN0YXJ0KSB7DQorICAgICAgICAgICAgUHlfVUNTNCBwcmV2aW91cyA9IFB5VW5pY29kZV9S RUFEKGtpbmQsIGRhdGEsIGogLSAxKTsNCisgICAgICAgICAgICBpZiAoX2dldHJlY29yZF9leChw cmV2aW91cyktPmNvbWJpbmluZyA8PSBjb21iaW5pbmcpIHsNCisgICAgICAgICAgICAgICAgYnJl YWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBk YXRhLCBqLCBwcmV2aW91cyk7DQorICAgICAgICAgICAgai0tOw0KKyAgICAgICAgfQ0KKyAgICAg ICAgaWYgKGogIT0gaSkgew0KKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRh LCBqLCBjb2RlKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK2Nh bm9uaWNhbF9vcmRlcmluZ19zb3J0X2NvdW50aW5nKGludCBraW5kLCB2b2lkICpkYXRhLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXpl X3QgZW5kLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgKnNvcnRi dWYpDQorew0KKyAgICBQeV9zc2l6ZV90IGNvdW50c1syNTZdID0gezB9Ow0KKyAgICBQeV9zc2l6 ZV90IHJ1bl9sZW5ndGggPSBlbmQgLSBzdGFydDsNCisgICAgUHlfc3NpemVfdCB0b3RhbCA9IDA7 DQorDQorICAgIGZvciAoUHlfc3NpemVfdCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgew0KKyAg ICAgICAgUHlfVUNTNCBjb2RlID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7DQorICAg ICAgICB1bnNpZ25lZCBjaGFyIGNvbWJpbmluZyA9IF9nZXRyZWNvcmRfZXgoY29kZSktPmNvbWJp bmluZzsNCisgICAgICAgIGNvdW50c1tjb21iaW5pbmddKys7DQorICAgIH0NCisNCisgICAgZm9y IChzaXplX3QgaSA9IDA7IGkgPCBQeV9BUlJBWV9MRU5HVEgoY291bnRzKTsgaSsrKSB7DQorICAg ICAgICBQeV9zc2l6ZV90IGNvdW50ID0gY291bnRzW2ldOw0KKyAgICAgICAgY291bnRzW2ldID0g dG90YWw7DQorICAgICAgICB0b3RhbCArPSBjb3VudDsNCisgICAgfQ0KKw0KKyAgICAvKiBSZXVz ZSBjb3VudHNbXSBhcyB0aGUgbmV4dCBvdXRwdXQgc2xvdCBmb3IgZWFjaCBDQ0MuICovDQorICAg IGZvciAoUHlfc3NpemVfdCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgew0KKyAgICAgICAgUHlf VUNTNCBjb2RlID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7DQorICAgICAgICB1bnNp Z25lZCBjaGFyIGNvbWJpbmluZyA9IF9nZXRyZWNvcmRfZXgoY29kZSktPmNvbWJpbmluZzsNCisg ICAgICAgIHNvcnRidWZbY291bnRzW2NvbWJpbmluZ10rK10gPSBjb2RlOw0KKyAgICB9DQorICAg IGZvciAoUHlfc3NpemVfdCBpID0gMDsgaSA8IHJ1bl9sZW5ndGg7IGkrKykgew0KKyAgICAgICAg UHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIHN0YXJ0ICsgaSwgc29ydGJ1ZltpXSk7DQorICAg IH0NCit9DQorDQogc3RhdGljIFB5T2JqZWN0Kg0KIG5mZF9uZmtkKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqaW5wdXQsIGludCBrKQ0KIHsNCiAgICAgUHlPYmplY3QgKnJlc3VsdDsNCiAgICAg UHlfVUNTNCAqb3V0cHV0Ow0KICAgICBQeV9zc2l6ZV90IGksIG8sIG9zaXplOw0KLSAgICBpbnQg a2luZDsNCi0gICAgY29uc3Qgdm9pZCAqZGF0YTsNCisgICAgaW50IGlucHV0X2tpbmQsIHJlc3Vs dF9raW5kOw0KKyAgICBjb25zdCB2b2lkICppbnB1dF9kYXRhOw0KKyAgICB2b2lkICpyZXN1bHRf ZGF0YTsNCiAgICAgLyogTG9uZ2VzdCBkZWNvbXBvc2l0aW9uIGluIFVuaWNvZGUgMy4yOiBVK0ZE RkEgKi8NCiAgICAgUHlfVUNTNCBzdGFja1syMF07DQogICAgIFB5X3NzaXplX3Qgc3BhY2UsIGlz aXplOw0KICAgICBpbnQgaW5kZXgsIHByZWZpeCwgY291bnQsIHN0YWNrcHRyOw0KICAgICB1bnNp Z25lZCBjaGFyIHByZXYsIGN1cjsNCisgICAgUHlfVUNTNCAqc29ydGJ1ZiA9IE5VTEw7DQorICAg IFB5X3NzaXplX3Qgc29ydGJ1ZmxlbiA9IDA7DQogDQogICAgIHN0YWNrcHRyID0gMDsNCiAgICAg aXNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbnB1dCk7DQpAQCAtNTIyLDExICs1ODMsMTEg QEAgbmZkX25ma2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbnB1dCwgaW50IGspDQogICAg ICAgICByZXR1cm4gTlVMTDsNCiAgICAgfQ0KICAgICBpID0gbyA9IDA7DQotICAgIGtpbmQgPSBQ eVVuaWNvZGVfS0lORChpbnB1dCk7DQotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShpbnB1dCk7 DQorICAgIGlucHV0X2tpbmQgPSBQeVVuaWNvZGVfS0lORChpbnB1dCk7DQorICAgIGlucHV0X2Rh dGEgPSBQeVVuaWNvZGVfREFUQShpbnB1dCk7DQogDQogICAgIHdoaWxlIChpIDwgaXNpemUpIHsN Ci0gICAgICAgIHN0YWNrW3N0YWNrcHRyKytdID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwg aSsrKTsNCisgICAgICAgIHN0YWNrW3N0YWNrcHRyKytdID0gUHlVbmljb2RlX1JFQUQoaW5wdXRf a2luZCwgaW5wdXRfZGF0YSwgaSsrKTsNCiAgICAgICAgIHdoaWxlKHN0YWNrcHRyKSB7DQogICAg ICAgICAgICAgUHlfVUNTNCBjb2RlID0gc3RhY2tbLS1zdGFja3B0cl07DQogICAgICAgICAgICAg LyogSGFuZ3VsIERlY29tcG9zaXRpb24gYWRkcyB0aHJlZSBjaGFyYWN0ZXJzIGluDQpAQCAtNTkx LDM1ICs2NTIsNjYgQEAgbmZkX25ma2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbnB1dCwg aW50IGspDQogICAgIFB5TWVtX0ZyZWUob3V0cHV0KTsNCiAgICAgaWYgKCFyZXN1bHQpDQogICAg ICAgICByZXR1cm4gTlVMTDsNCisNCiAgICAgLyogcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUg cmVhZHksIGFzIGl0IGlzIGNvbXBhY3QuICovDQotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChy ZXN1bHQpOw0KLSAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEocmVzdWx0KTsNCisgICAgcmVzdWx0 X2tpbmQgPSBQeVVuaWNvZGVfS0lORChyZXN1bHQpOw0KKyAgICByZXN1bHRfZGF0YSA9IFB5VW5p Y29kZV9EQVRBKHJlc3VsdCk7DQogDQotICAgIC8qIFNvcnQgY2Fub25pY2FsbHkuICovDQorICAg IC8qIFNvcnQgZWFjaCBjb25zZWN1dGl2ZSBjb21iaW5pbmctY2hhcmFjdGVyIHJ1biBjYW5vbmlj YWxseS4gKi8NCiAgICAgaSA9IDA7DQotICAgIHByZXYgPSBfZ2V0cmVjb3JkX2V4KFB5VW5pY29k ZV9SRUFEKGtpbmQsIGRhdGEsIGkpKS0+Y29tYmluaW5nOw0KLSAgICBmb3IgKGkrKzsgaSA8IFB5 VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCk7IGkrKykgew0KLSAgICAgICAgY3VyID0gX2dldHJl Y29yZF9leChQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSktPmNvbWJpbmluZzsNCi0gICAg ICAgIGlmIChwcmV2ID09IDAgfHwgY3VyID09IDAgfHwgcHJldiA8PSBjdXIpIHsNCi0gICAgICAg ICAgICBwcmV2ID0gY3VyOw0KKyAgICB3aGlsZSAoaSA8IG8pIHsNCisgICAgICAgIFB5X3NzaXpl X3QgcnVuX2xlbmd0aCwgcnVuX3N0YXJ0Ow0KKyAgICAgICAgaW50IG5lZWRzX3NvcnQgPSAwOw0K Kw0KKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKHJlc3VsdF9raW5kLCByZXN1 bHRfZGF0YSwgaSk7DQorICAgICAgICBwcmV2ID0gX2dldHJlY29yZF9leChjaCktPmNvbWJpbmlu ZzsNCisgICAgICAgIGlmIChwcmV2ID09IDApIHsNCisgICAgICAgICAgICBpKys7DQogICAgICAg ICAgICAgY29udGludWU7DQogICAgICAgICB9DQotICAgICAgICAvKiBOb24tY2Fub25pY2FsIG9y ZGVyLiBOZWVkIHRvIHN3aXRjaCAqaSB3aXRoIHByZXZpb3VzLiAqLw0KLSAgICAgICAgbyA9IGkg LSAxOw0KLSAgICAgICAgd2hpbGUgKDEpIHsNCi0gICAgICAgICAgICBQeV9VQ1M0IHRtcCA9IFB5 VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIG8rMSk7DQotICAgICAgICAgICAgUHlVbmljb2RlX1dS SVRFKGtpbmQsIGRhdGEsIG8rMSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmlj b2RlX1JFQUQoa2luZCwgZGF0YSwgbykpOw0KLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShr aW5kLCBkYXRhLCBvLCB0bXApOw0KLSAgICAgICAgICAgIG8tLTsNCi0gICAgICAgICAgICBpZiAo byA8IDApDQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIHByZXYgPSBfZ2V0 cmVjb3JkX2V4KFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIG8pKS0+Y29tYmluaW5nOw0KLSAg ICAgICAgICAgIGlmIChwcmV2ID09IDAgfHwgcHJldiA8PSBjdXIpDQorDQorICAgICAgICBydW5f c3RhcnQgPSBpKys7DQorICAgICAgICB3aGlsZSAoaSA8IG8pIHsNCisgICAgICAgICAgICBQeV9V Q1M0IGNoID0gUHlVbmljb2RlX1JFQUQocmVzdWx0X2tpbmQsIHJlc3VsdF9kYXRhLCBpKTsNCisg ICAgICAgICAgICBjdXIgPSBfZ2V0cmVjb3JkX2V4KGNoKS0+Y29tYmluaW5nOw0KKyAgICAgICAg ICAgIGlmIChjdXIgPT0gMCkgew0KICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg ICB9DQorICAgICAgICAgICAgaWYgKHByZXYgPiBjdXIpIHsNCisgICAgICAgICAgICAgICAgbmVl ZHNfc29ydCA9IDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHByZXYgPSBjdXI7DQor ICAgICAgICAgICAgaSsrOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKCFuZWVkc19zb3J0KSB7 DQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICB9DQorDQorICAgICAgICBydW5fbGVu Z3RoID0gaSAtIHJ1bl9zdGFydDsNCisgICAgICAgIGlmIChydW5fbGVuZ3RoIDwgQ0FOT05JQ0FM X09SREVSSU5HX0NPVU5USU5HX1NPUlRfVEhSRVNIT0xEKSB7DQorICAgICAgICAgICAgY2Fub25p Y2FsX29yZGVyaW5nX3NvcnRfaW5zZXJ0aW9uKHJlc3VsdF9raW5kLCByZXN1bHRfZGF0YSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3N0YXJ0LCBp KTsNCisgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgIH0NCi0gICAgICAgIHByZXYgPSBf Z2V0cmVjb3JkX2V4KFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKS0+Y29tYmluaW5nOw0K Kw0KKyAgICAgICAgaWYgKHJ1bl9sZW5ndGggPiBzb3J0YnVmbGVuKSB7DQorICAgICAgICAgICAg UHlfVUNTNCAqbmV3X3NvcnRidWYgPSBQeU1lbV9SZXNpemUoc29ydGJ1ZiwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0LA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9sZW5ndGgpOw0KKyAg ICAgICAgICAgIGlmIChuZXdfc29ydGJ1ZiA9PSBOVUxMKSB7DQorICAgICAgICAgICAgICAgIFB5 RXJyX05vTWVtb3J5KCk7DQorICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoc29ydGJ1Zik7DQor ICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOw0KKyAgICAgICAgICAgICAgICByZXR1 cm4gTlVMTDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgc29ydGJ1ZiA9IG5ld19zb3J0 YnVmOw0KKyAgICAgICAgICAgIHNvcnRidWZsZW4gPSBydW5fbGVuZ3RoOw0KKyAgICAgICAgfQ0K Kw0KKyAgICAgICAgY2Fub25pY2FsX29yZGVyaW5nX3NvcnRfY291bnRpbmcocmVzdWx0X2tpbmQs IHJlc3VsdF9kYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cnVuX3N0YXJ0LCBpLCBzb3J0YnVmKTsNCiAgICAgfQ0KKyAgICBQeU1lbV9GcmVlKHNvcnRidWYp Ow0KICAgICByZXR1cm4gcmVzdWx0Ow0KIH0NCiANCg0KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KUHl0aG9uLWNoZWNraW5zIG1haWxpbmcgbGlzdCAtLSBw eXRob24tY2hlY2tpbnNAcHl0aG9uLm9yZwpUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRv IHB5dGhvbi1jaGVja2lucy1sZWF2ZUBweXRob24ub3JnCmh0dHBzOi8vbWFpbC5weXRob24ub3Jn L21haWxtYW4zLy9saXN0cy9weXRob24tY2hlY2tpbnMucHl0aG9uLm9yZwpNZW1iZXIgYWRkcmVz czogcHl0aG9uLXB5dGhvbi1jaGVja2luc0BtLmdtYW5lLW14Lm9yZwo=