X-Original-To: alpine-aports@lists.alpinelinux.org Received: from mail.bitmessage.ch (mail.bitmessage.ch [146.228.112.252]) by lists.alpinelinux.org (Postfix) with ESMTP id 683865C4AF9 for ; Wed, 7 Jun 2017 18:38:13 +0000 (GMT) dkim-signature: v=1; a=rsa-sha256; d=bitmessage.ch; s=mail; c=relaxed/relaxed; q=dns/txt; h=From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=lExVd510Q3A3BT/i5uUdhzwlQmhSN/PdLPNrLn/oUPs=; b=rqkMYjBD/IWOkcTN0kegowjBh9rz1r5dckTlVdcVZ9nQG6kr5V84t8OUFEfIshWP0FswRoxoMcq76QJgq3KCEyTW0n4tjqle+tRJbPzUsAJ6lJIog0ZuzFwoS7681N2KfrBmeXljEV7rKuzscQuJFijjMATj9ieBwfu2zvx7y0M= Received: from localhost.localdomain (95-55-117-223.dynamic.avangarddsl.ru [95.55.117.223]) by mail.bitmessage.ch with ESMTPSA (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128) ; Wed, 7 Jun 2017 20:37:25 +0200 From: =?UTF-8?q?C=C3=A1g?= To: alpine-aports@lists.alpinelinux.org Subject: [alpine-aports] [PATCH] main/mg: upgrade to 20170401 and add unicode support Date: Wed, 7 Jun 2017 19:35:44 +0100 Message-Id: <20170607183544.31695-1-ca6c@bitmessage.ch> X-Mailer: git-send-email 2.13.0 X-Mailinglist: alpine-aports Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 LS0tDQogbWFpbi9tZy9BUEtCVUlMRCAgICAgICAgICAgICAgfCAgIDIwICstDQogbWFpbi9tZy9t aXNzaW5nLWRlZmluZXMucGF0Y2ggfCAgIDM0ICsrDQogbWFpbi9tZy9tdXNsLWZpeGVzLnBhdGNo ICAgICAgfCAgIDc1IC0tLQ0KIG1haW4vbWcvdW5pY29kZS5wYXRjaCAgICAgICAgIHwgMTM0NyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDQgZmlsZXMgY2hhbmdl ZCwgMTM5MCBpbnNlcnRpb25zKCspLCA4NiBkZWxldGlvbnMoLSkNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgbWFpbi9tZy9taXNzaW5nLWRlZmluZXMucGF0Y2gNCiBkZWxldGUgbW9kZSAxMDA2NDQgbWFp bi9tZy9tdXNsLWZpeGVzLnBhdGNoDQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1haW4vbWcvdW5pY29k ZS5wYXRjaA0KDQpkaWZmIC0tZ2l0IGEvbWFpbi9tZy9BUEtCVUlMRCBiL21haW4vbWcvQVBLQlVJ TEQNCmluZGV4IDRkM2YzNmVhZGMuLjNlNjE4YzM1NTIgMTAwNjQ0DQotLS0gYS9tYWluL21nL0FQ S0JVSUxEDQorKysgYi9tYWluL21nL0FQS0JVSUxEDQpAQCAtMSw4ICsxLDggQEANCiAjIENvbnRy aWJ1dG9yOiBMZWUgSGlubWFuIDxoaW5tYW5AZ21haWwuY29tPg0KLSMgTWFpbnRhaW5lcjogTmF0 YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPg0KKyMgTWFpbnRhaW5lcjogQ8OhZyA8 Y2E2Y0BiaXRtZXNzYWdlLmNoPg0KIHBrZ25hbWU9bWcNCi1wa2d2ZXI9MjAxNDA0MTQNCi1wa2dy ZWw9Mw0KK3BrZ3Zlcj0yMDE3MDQwMQ0KK3BrZ3JlbD0wDQogcGtnZGVzYz0ibWcgaXMgTWljcm8g R05VL2VtYWNzLCB0aGlzIGlzIGEgcG9ydGFibGUgdmVyc2lvbiBvZiB0aGUgbWcgbWFpbnRhaW5l ZCBieSB0aGUgT3BlbkJTRCB0ZWFtLiINCiB1cmw9Imh0dHA6Ly9ob21lcGFnZS5ib2V0ZXMub3Jn L3NvZnR3YXJlL21nIg0KIGFyY2g9Ing4NiB4ODZfNjQiDQpAQCAtMTEsOCArMTEsOSBAQCBkZXBl bmRzPQ0KIG1ha2VkZXBlbmRzPSJuY3Vyc2VzLWRldiBsaWJic2QtZGV2IGJzZC1jb21wYXQtaGVh ZGVycyINCiBpbnN0YWxsPQ0KIHN1YnBhY2thZ2VzPSIkcGtnbmFtZS1kb2MiDQotc291cmNlPSJo dHRwOi8vZGV2LmFscGluZWxpbnV4Lm9yZy9hcmNoaXZlLyRwa2duYW1lLSRwa2d2ZXIudGFyLmd6 DQotCW11c2wtZml4ZXMucGF0Y2gNCitzb3VyY2U9Imh0dHA6Ly9ob21lcGFnZS5ib2V0ZXMub3Jn L3NvZnR3YXJlL21nLyRwa2duYW1lLSRwa2d2ZXIudGFyLmd6DQorCW1pc3NpbmctZGVmaW5lcy5w YXRjaA0KKwl1bmljb2RlLnBhdGNoDQogCSINCiANCiBfYnVpbGRkaXI9IiRzcmNkaXIiLyRwa2du YW1lLSRwa2d2ZXINCkBAIC0zOCw5ICszOSw2IEBAIHBhY2thZ2UoKSB7DQogCWluc3RhbGwgLURt NjQ0IHR1dG9yaWFsICIkcGtnZGlyIi91c3Ivc2hhcmUvZG9jLyRwa2duYW1lL3R1dG9yaWFsDQog fQ0KIA0KLW1kNXN1bXM9ImFkNGE5OWE1ZTI2ZDI1ZGI3NWFmNzkzNmM2NjU3ZmJlICBtZy0yMDE0 MDQxNC50YXIuZ3oNCi1iMDliNzcwMGRlZDgxMWRmOGY2Y2YzNWY5YThkZjFmZiAgbXVzbC1maXhl cy5wYXRjaCINCi1zaGEyNTZzdW1zPSI4OWNlMjVlZTEzY2VkYzE0YzNjNWM3Yjc2ZDdhOWUwZWEz OGEwNjBhZDYxZTkwYWM0MzI1OGQ4ZGFkZjBkMDY1ICBtZy0yMDE0MDQxNC50YXIuZ3oNCi1mMDVh ZTRmMGNkOTQ3NTkzMmViZTUxZTMyY2UwNTIxN2U3ZmI1OWE1YTA2MTRlZmQyYjMzYWY0Y2M4ODgz MjNjICBtdXNsLWZpeGVzLnBhdGNoIg0KLXNoYTUxMnN1bXM9ImIwODBiMjRjNjAxNTIyNWVlMTY3 MGViNmYwNjJhMjFmNDBkMzRiMDJjNjk5Njg3ZDkyODQyOTgzNTA2NDk3YzkzZTE1Y2NlYjc5ZDA1 YjZjYmJlYmZhODQ2NmY3MjYxY2I3ZGRlOGJjYzQ4ODg0ODkyMzZjZjY0MTA0MjE1MTYxICBtZy0y MDE0MDQxNC50YXIuZ3oNCi00N2NlZDg1ZTIyMTk1MWMwMjY1NDUzM2EwMTViZTY3MDE4YzA0NWFk MzM2YTk5OTdiNzBkY2M4NjlmMTA1NDYzMThhZWFlOGQxZmJkNDMyNDhkNDg1ZTRmOWMxYzk1MGRl YjkzNzg5YjdhYThkZWY0OTNiYTAzNmFmMWJlYWFhMSAgbXVzbC1maXhlcy5wYXRjaCINCitzaGE1 MTJzdW1zPSI3MjliMmQ5YmE3ZWIyMzZjYzhiY2JjZjNhYzc2MDQ0OTQ5ODBjYmYyZmQyMWRjNWEz ODU2MDExYmM4MzBlZWU3NWJlMjlhMjQ2YjBiZjNkZmE2YzdhMDNmY2Y2OWE5MDJhZTUwZDA1ZWEz NzFhYzRkMDIyNWE0ZGE2MDg5ZDdjZSAgbWctMjAxNzA0MDEudGFyLmd6DQorZjE5NjdkZDMzYTAy NWUxMWZmNjNiYTc5N2MyZmI2NGFjMDY3OWNkNmMwOWEzMzIyNDFhMjhlMDk3NmI5NmRiNDY3ODk0 ZTFlMzU3M2M1YmM4OGI3ZmVhZWNkYjQzMDY5NWFhNGY4ZmEyNzEyYjIyN2QwOTQ3YjNkOGIwNWM5 N2MgIG1pc3NpbmctZGVmaW5lcy5wYXRjaA0KKzU4NmE2MjJiNjgzOGJiNWI0ZjJlOTU4MzUyY2Vj NmJkNGNhOWM3ZGI5M2JjYzBkZmViNmQ4ZTU4OGZiMTE5MWJjNWYwMWFmZDE3YTM4NWMxMGRkYmQ2 Y2ViNjMxZDJkOWNhY2NkNGUwODAyOTRkMWZjZWI1ZGI2NzZhYjZhNGZjICB1bmljb2RlLnBhdGNo Ig0KZGlmZiAtLWdpdCBhL21haW4vbWcvbWlzc2luZy1kZWZpbmVzLnBhdGNoIGIvbWFpbi9tZy9t aXNzaW5nLWRlZmluZXMucGF0Y2gNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwLi41OGY1ZTEwOWZhDQotLS0gL2Rldi9udWxsDQorKysgYi9tYWluL21nL21pc3NpbmctZGVm aW5lcy5wYXRjaA0KQEAgLTAsMCArMSwzNCBAQA0KK2RpZmYgLS1naXQgYS9maWxlaW8uYyBiL2Zp bGVpby5jDQoraW5kZXggNGJiMWY0Ni4uYzkzN2ViMCAxMDA2NDQNCistLS0gYS9maWxlaW8uYw0K KysrKyBiL2ZpbGVpby5jDQorQEAgLTI3LDYgKzI3LDE0IEBADQorICNpbmNsdWRlICJrYmQuaCIN CisgI2luY2x1ZGUgInBhdGhuYW1lcy5oIg0KKyANCisrI2lmbmRlZiBNQVhOQU1MRU4NCisrI2Rl ZmluZSBNQVhOQU1MRU4gMjU1DQorKyNlbmRpZg0KKysNCisrI2lmbmRlZiBERUZGSUxFTU9ERQ0K KysjZGVmaW5lIERFRkZJTEVNT0RFIDA2NjYNCisrI2VuZGlmDQorKw0KKyBzdGF0aWMgY2hhciAq Ymt1cGxvY2F0aW9uKGNvbnN0IGNoYXIgKik7DQorIHN0YXRpYyBpbnQgICBia3VwbGVhdmV0bXAo Y29uc3QgY2hhciAqKTsNCisgDQorZGlmZiAtLWdpdCBhL3JlX3NlYXJjaC5jIGIvcmVfc2VhcmNo LmMNCitpbmRleCAyODcwMzBhLi5kYTQ0ZjAwIDEwMDY0NA0KKy0tLSBhL3JlX3NlYXJjaC5jDQor KysrIGIvcmVfc2VhcmNoLmMNCitAQCAtMzQsNiArMzQsMTAgQEANCisgI2RlZmluZSBSRV9OTUFU Q0gJMTAJCS8qIG1heCBudW1iZXIgb2YgbWF0Y2hlcwkgICAgKi8NCisgI2RlZmluZSBSRVBMRU4J CTI1NgkJLyogbWF4IGxlbmd0aCBvZiByZXBsYWNlbWVudCBzdHJpbmcgKi8NCisgDQorKyNpZm5k ZWYgUkVHX1NUQVJURU5EDQorKyNkZWZpbmUgUkVHX1NUQVJURU5EIDQNCisrI2VuZGlmDQorKw0K KyBjaGFyCXJlX3BhdFtOUEFUXTsJCQkvKiByZWdleCBwYXR0ZXJuCQkgICAgKi8NCisgaW50CXJl X3NyY2hfbGFzdGRpciA9IFNSQ0hfTk9QUjsJLyogbGFzdCBzZWFyY2ggZmxhZ3MJCSAgICAqLw0K KyBpbnQJY2FzZWZvbGRzZWFyY2ggPSBUUlVFOwkJLyogZG9lcyBzZWFyY2ggaWdub3JlIGNhc2U/ CSAgICAqLw0KZGlmZiAtLWdpdCBhL21haW4vbWcvbXVzbC1maXhlcy5wYXRjaCBiL21haW4vbWcv bXVzbC1maXhlcy5wYXRjaA0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAzMWYzZmJj YzZiLi4wMDAwMDAwMDAwDQotLS0gYS9tYWluL21nL211c2wtZml4ZXMucGF0Y2gNCisrKyAvZGV2 L251bGwNCkBAIC0xLDc1ICswLDAgQEANCi1kaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUgYi9HTlVt YWtlZmlsZQ0KLWluZGV4IGE4OWM2OTcuLmVjZTU5NDQgMTAwNjQ0DQotLS0tIGEvR05VbWFrZWZp bGUNCi0rKysgYi9HTlVtYWtlZmlsZQ0KLUBAIC0zMSw3ICszMSw3IEBAIENVUlNFU19MSUJTPQkt bGN1cnNlcw0KLSBDQz0JCWdjYw0KLSBDRkxBR1M/PQktTzIgLXBpcGUNCi0gQ0ZMQUdTKz0JLWcg LVdhbGwNCi0tQ1BQRkxBR1M9CS1ERktFWVMgLURSRUdFWCAtRFhLRVlTDQotK0NQUEZMQUdTPQkt REZLRVlTIC1EWEtFWVMNCi0gQ1BQRkxBR1MrPQkkKEJTRF9DUFBGTEFHUykgLURfX2RlYWQ9X19k ZWFkMg0KLSBMSUJTPQkJJChDVVJTRVNfTElCUykgJChCU0RfTElCUykNCi0gDQotZGlmZiAtLWdp dCBhL01ha2VmaWxlIGIvTWFrZWZpbGUNCi1pbmRleCAwMjNlZDE3Li4wYzkyNzkwIDEwMDY0NA0K LS0tLSBhL01ha2VmaWxlDQotKysrIGIvTWFrZWZpbGUNCi1AQCAtMTMsNyArMTMsNyBAQCBEUEFE RCs9CSR7TElCQ1VSU0VTfSAke0xJQlVUSUx9DQotICMJWEtFWVMJCS0tIHVzZSB0ZXJtY2FwIGZ1 bmN0aW9uIGtleSBkZWZpbml0aW9ucy4NCi0gIwkJCQlub3RlOiBYS0VZUyBhbmQgYnNtYXAgbW9k ZSBkbyBfbm90XyBnZXQgYWxvbmcuDQotICMNCi0tQ0ZMQUdTKz0tV2FsbCAtREZLRVlTIC1EUkVH RVggLURYS0VZUw0KLStDRkxBR1MrPS1XYWxsIC1ERktFWVMgLURYS0VZUw0KLSANCi0gU1JDUz0J YXV0b2V4ZWMuYyBiYXNpYy5jIGJlbGwuYyBidWZmZXIuYyBjaW5mby5jIGRpci5jIGRpc3BsYXku YyBcDQotIAllY2hvLmMgZXh0ZW5kLmMgZmlsZS5jIGZpbGVpby5jIGZ1bm1hcC5jIGhlbHAuYyBr YmQuYyBrZXltYXAuYyBcDQotZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYw0KLWluZGV4IDky MDRkNjMuLmRmZDRhNmEgMTAwNjQ0DQotLS0tIGEvbWFpbi5jDQotKysrIGIvbWFpbi5jDQotQEAg LTE0LDYgKzE0LDEwIEBADQotICNpbmNsdWRlIDxlcnIuaD4NCi0gI2luY2x1ZGUgPGxvY2FsZS5o Pg0KLSANCi0rI2lmbmRlZiBfX2RlYWQyDQotKyNkZWZpbmUgX19kZWFkMg0KLSsjZW5kaWYNCi0r DQotIGludAkJIHRoaXNmbGFnOwkJCS8qIGZsYWdzLCB0aGlzIGNvbW1hbmQJKi8NCi0gaW50CQkg bGFzdGZsYWc7CQkJLyogZmxhZ3MsIGxhc3QgY29tbWFuZAkqLw0KLSBpbnQJCSBjdXJnb2FsOwkJ CS8qIGdvYWwgY29sdW1uCQkqLw0KLWRpZmYgLS1naXQgYS9zeXNkZWYuaCBiL3N5c2RlZi5oDQot aW5kZXggOGQzZDNhMi4uZWE4MmQ3MyAxMDA2NDQNCi0tLS0gYS9zeXNkZWYuaA0KLSsrKyBiL3N5 c2RlZi5oDQotQEAgLTgsMTIgKzgsNyBAQA0KLSAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQotICNp bmNsdWRlIDxzeXMvcXVldWUuaD4NCi0gDQotLS8qIG5lY2VzYXJyeSB0byBnZXQgYXNwcmludGYg JiBmcmllbmRzIHdpdGggZ2xpYmMgWFhYIGRvZXNuJ3Qgd29yayBmb3Igc29tZQ0KLS0gKiBteXN0 ZXJpb3VzIHJlYXNvbiEgKi8NCi0tI2lmZGVmIF9fR0xJQkNfXw0KLS0jICBkZWZpbmUgX0dOVV9T T1VSQ0UNCi0tIyAgZGVmaW5lIF9fVVNFX0dOVQ0KLS0jZW5kaWYNCi0rI2RlZmluZSBfR05VX1NP VVJDRQ0KLSANCi0gI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9f KQ0KLSAjICBkZWZpbmUgTE9HSU5fTkFNRV9NQVggX1BPU0lYX0xPR0lOX05BTUVfTUFYDQotQEAg LTI1LDEwICsyMCwxNSBAQA0KLSAjaW5jbHVkZSA8c3RyaW5nLmg+DQotICNpbmNsdWRlIDxlcnJu by5oPg0KLSAjaW5jbHVkZSA8c2lnbmFsLmg+DQotKyNpbmNsdWRlIDxmY250bC5oPg0KLSANCi0g I2RlZmluZQlLQkxPQ0sJCTgxOTIJLyogS2lsbCBncm93LgkJCSAqLw0KLSAjZGVmaW5lCUdPT0QJ CTAJLyogR29vZCBleGl0IHN0YXR1cy4JCSAqLw0KLSANCi0rI2lmbmRlZiBERUZGSUxFTU9ERQkJ CS8qIDQuNEJTRCBleHRlbnNpb24uICovDQotKyNkZWZpbmUJREVGRklMRU1PREUJKFNfSVJVU1J8 U19JV1VTUnxTX0lSR1JQfFNfSVdHUlB8U19JUk9USHxTX0lXT1RIKQ0KLSsjZW5kaWYNCi0rDQot IHR5cGVkZWYgaW50CVJTSVpFOwkJLyogVHlwZSBmb3IgZmlsZS9yZWdpb24gc2l6ZXMJICovDQot IHR5cGVkZWYgc2hvcnQJS0NIQVI7CQkvKiBUeXBlIGZvciBpbnRlcm5hbCBrZXlzdHJva2VzCSAq Lw0KLSANCmRpZmYgLS1naXQgYS9tYWluL21nL3VuaWNvZGUucGF0Y2ggYi9tYWluL21nL3VuaWNv ZGUucGF0Y2gNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi4zOWQ4ODMx ZjY4DQotLS0gL2Rldi9udWxsDQorKysgYi9tYWluL21nL3VuaWNvZGUucGF0Y2gNCkBAIC0wLDAg KzEsMTM0NyBAQA0KK2RpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQNCitpbmRleCA5 OTRkNmJlLi4yZjVkMmMxIDEwMDY0NA0KKy0tLSBhL1JFQURNRS5tZA0KKysrKyBiL1JFQURNRS5t ZA0KK0BAIC0xLDQ5ICsxLDUwIEBADQorLSMgUE9SVElORyBNRyBBTkQgVVNJTkcgTElCQlNEDQor KyMgbWcgd2l0aCB3aWRlIGRpc3BsYXkgc3VwcG9ydC4NCisgDQorLUkndmUgbWFpbnRhaW5lZCBh bmQgcG9ydGVkIG1nIGZvciBxdWl0ZSBzb21lIHRpbWUgbm93IGFuZCBhdCBmaXJzdCBpdA0KKy13 YXMgZWFzeSByZWNlbnRseSBpdCBnb3QgaGFyZGVyIGFuZCBoYXJkZXIgc2luY2UgaXQgd2FzIGEg bW92aW5nDQorLXRhcmdldC4gRXNwZWNpYWxseSB0aGUgaW5jbHVzaW9uIG9mIHNvbWUgc3lzdGVt IHNwZWNpZmljIGxpYnJhcmllcyBzaW5jZQ0KKy1hYm91dCAyIHllYXJzIGFnbyBtYWRlIGl0IHRv byBtdWNoIG9mIGFuIGVmZm9ydCBmb3IgbXkgaHVtYmxlIGNvZGluZw0KKy1za2lsbHMuDQorLQ0K Ky1TbyByZWNlbnRseSBKYXNwZXIgTGlldmlzc2UgQWRyaWFhbnNlIGFza2VkIG1lIHRvIHRyeSBp dCBhZ2FpbiBhbmQgSQ0KKy1yZXN0YXJ0ZWQgd29ya2luZyBvbiB0aGUgcHJvamVjdCBhbmQgcmFu IGludG8gZXhhY3RseSB0aGUgc2FtZSBwcm9ibGVtcw0KKy1hZ2Fpbi4gV2hpbGUgZ29vZ2xpbmcg Zm9yIHNvbHV0aW9ucyBJIHJhbiBpbnRvIGxpYmJzZDoNCistDQorLSAgaHR0cDovL2xpYmJzZC5m cmVlZGVza3RvcC5vcmcvd2lraS8NCistDQorLUl0J3MgYSBwb3J0aW5nIGxpYnJhcnkgZm9yIE9w ZW5CU0QgY29kZSEgQW5kIGFmdGVyIGluc3RhbGxpbmcgdGhhdCBpdA0KKy13YXMgYSBwaWVjZSBv ZiBwaWUgdG8gZ2V0IG1nIHBvcnRlZCBhZ2Fpbi4NCistDQorLSMjIFBPUlRJTkcgVE8gQUxMIE9U SEVSIFBMQVRGT1JNUw0KKy0NCistT2theSwgdGhhdCB3YXMgZGViaWFuLiBOb3cgSSBoYXZlIHRv IGdldCB0aGUgcmVzdCBvZiBhbGwgdGhlIHByZXZpb3VzbHkNCistc3Vwb3J0ZWQgcGxhdGZvcm1z IHdvcmtpbmcgYWdhaW4uIEFsbCBoZWxwIGlzIHdlbGNvbWUgYW5kIGFzIGFsd2F5czoNCistUGxl YXNlIHByb3ZpZGUgcGF0Y2hlcyB0aGF0IGRvIG5vdCBicmVhayBzdHVmZiBmb3Igb3RoZXIgcGxh dGZvcm1zLg0KKy0NCistIyMgQlVJTERJTkcgTUcNCistDQorLVNvLCBiYXNpYyBpbnN0cnVjdGlv bnMgZm9yIGJ1aWxkaW5nIG1nOg0KKy0NCistIC0gR2V0IGxpYmJzZCBpbnN0YWxsZWQuDQorLSAt IFJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOg0KKytJIGp1c3QgcmVjZWl2ZWQgdGhpcyBhbWF6 aW5nIHBhdGNoIGZyb20gUy4gR2lsZXMuIEZvciB0aG9zZSBpbXBhdGllbnQNCisrcGVvcGxlOiBj aGVjayBpdCBvdXQgKHRpaGloaSkgYW5kIGFkZCB0aGlzIGxpbmUgdG8geW91ciBgLm1nYA0KKyAN CisgYGBgDQorLW1ha2UNCistc3VkbyBtYWtlIGluc3RhbGwNCisrc2V0LWRlZmF1bHQtbW9kZSAi d2lkZSINCisgYGBgDQorIA0KKy0jIyBVU0lORyBDVlMNCistDQorLVRoaXMgY29kZSBpcyB0aGUg Y3ZzIGNoZWNrb3V0IGZyb20gdGhlIE9wZW5CU0QgcHJvamVjdCBzbyBpZiB5b3UgaW5zdGFsbA0K Ky1jdnMgeW91IGNhbiBzZWUgd2hhdCBJIGNoYW5nZWQgdG8gcG9ydCBtZy4gTGlrZSB0aGlzOg0K Ky0NCistYGBgDQorLWN2cyBkaWZmIC11dw0KKy1gYGANCistDQorLSMjIEFCT1VUIGZnZXRsbigp DQorLQ0KKy1JbmNhc2UgeW91IGFyZSB3b25kZXJpbmcgYWJvdXQgdGhhdCBkZXByZWNhdGlvbiB3 YXJuaW5nLCBoZXJlIGlzIGEgbmljZSBleHBsYW5hdGlvbiBhYm91dCB3aHkgaXQgaXMgaGFyZCB0 byBmaXg6DQorLQ0KKy0gIGh0dHA6Ly9uaWFsbG9oaWdnaW5zLmNvbS8yMDA5LzEwLzAzL3JlYWQt YS1maWxlLWxpbmUtYnktbGluZS1pbi1jLXNlY3VyZS1mZ2V0cy1pZGlvbS8NCisrIyMgSW50cm9k dWN0aW9uIGJ5IFMuIEdpbGVzDQorKw0KKytIaSwNCisrDQorK0kndmUgZ290IGEgcGF0Y2ggdGhh dCBhbGxvd3MgbWcgdG8gZGlzcGxheSB3aWRlIGNoYXJhY3RlcnMsIGlmIHlvdSdyZQ0KKytpbnRl cmVzdGVkLg0KKysNCisrSXQgY2FuIGJlIHR1cm5lZCBvbiBieSBzaG93LXdpZGUtbW9kZSAoYmV0 dGVyIG5hbWUgd2VsY29tZSksIGFuZCBpcw0KKytmYWlybHkgbGltaXRlZCBpbiByZWdhcmQgdG8g d2hhdCB0eXBlcyBvZiB3aWRlIGNoYXJhY3RlcnMgYXJlDQorK2Rpc3BsYXllZC4gRXZlcnl0aGlu ZyBnb2VzIHRocm91Z2ggbWJydG93YygzKSwgc28geW91IGdldCBleGFjdGx5IG9uZQ0KKytzdXBw b3J0ZWQgZW5jb2Rpbmc6IHdoYXRldmVyIExDXyogc2F5cy4gRXZlcnl0aGluZyBlbHNlIGlzIGRp c3BsYXllZA0KKythcyBvY3RhbCBlc2NhcGUgc2VxdWVuY2VzIChhcyBub3JtYWwgY3VycmVudCBi ZWhhdmlvcikuIE1vdGlvbiBpcw0KKytzdGlsbCBvbiBhIGJ5dGUgbGV2ZWwsIHNvIG11bHRpYnl0 ZSBjaGFyYWN0ZXJzIGFyZSBzbG93IHRvIHRyYXZlbA0KKyt0aHJvdWdoLCBhbmQgeW91IGNhbiBp bnNlcnQgYnl0ZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGVtICh3aGljaCB3b3Jrcw0KKytmaW5lKS4g QSBsaW1pdGVkIHZlcnNpb24gb2YgaW5zZXJ0LWNoYXIgaXMgYWxzbyBpbmNsdWRlZCwgd2hpY2gg d29ya3MNCisrdGhyb3VnaCB3Y2hhcl90LCBzbyB0aGF0IG9uIGFueSBzeXN0ZW0gd2l0aCBfX1NU RENfSVNPXzEwNjQ2X18gc2V0LA0KKytpbnNlcnRpbmcgdW5pY29kZSBjb2RlcG9pbnRzIGJ5IG51 bWJlciBpcyBwb3NzaWJsZS4NCisrDQorK0l0IGFsc28gZml4ZXMgc29tZSBvZGQgYnVncyByZWxh dGVkIHRvIHdpZGUgY2hhcmFjdGVyIGRpc3BsYXkgYW5kDQorK2V4dGVuZGVkIGxpbmVzLiBGb3Ig ZXhhbXBsZTogaW4gYSBmaWxlIHdpdGggZW5vdWdoIHdpZGUgY2hhcmFjdGVycw0KKysoc3VjaCBh cyDvvKHvvKLvvKMpIHRvIG1ha2UgYSBsaW5lIGV4dGVuZCBmYXIgKHNheSwgMjAwIGNoYXJhY3Rl cnMgb24gYW4NCisrODAtd2lkZSBkaXNwbGF5KSwgbW92aW5nIHRvIHRoZSByaWdodCBvbmUgY2hh cmFjdGVyIGF0IGEgdGltZSB3aWxsIChpbg0KKysyMDE2MDExOCkgY29ycnVwdCB0aGUgZGlzcGxh eSwgdGhlbiBldmVudHVhbGx5IHNlZ2ZhdWx0LCBiZWNhdXNlDQorK3Z0cHV0ZSBkb2Vzbid0IHBl cmZvcm0gdGhlIHNhbWUgb2N0YWwgZXhwYW5zaW9uIGFzIHZ0cHV0YyBhbmQgdGhlDQorK2NvbHVt bnMgZ2V0IG91dCBvZiBzeW5jLiBUaGlzIHBhdGNoIG1ha2VzIGRpc3BsYXkuYyBhd2FyZSBvZiB0 aGUNCisrcG9zc2liaWxpdHkgdGhhdCB0aGUgYnl0ZXMgYW5kIGdseXBocyBvZiB0aGUgYnVmZmVy cyBhcmVuJ3QgMToxLCBzbw0KKytwcm90ZWN0cyBhZ2FpbnN0IHRoYXQuDQorKw0KKytUaGF0IHNh aWQsIHdpZGUgY2hhcmFjdGVyIHN1cHBvcnQgY29tcGxpY2F0ZXMgYSBsb3Qgb2YgYWxyZWFkeQ0K Kytjb21wbGljYXRlZCBsb2dpYyAoZm9yIGV4YW1wbGUsIHZ0cHV0cykgYW5kIHJlbGllcyBvbiB3 Y2hhcl90IGZvcg0KKythbG1vc3QgZXZlcnl0aGluZywgYWRkaW5nIHNvbWUgdW5lc2NhcGFibGUg b3ZlcmhlYWQuDQorKw0KKytJZiB5b3Ugd2FudCB0byB0YWtlIHRoaXMgcGF0Y2gsIHBsZWFzZSBk byBzby4gSWYgeW91IHRoaW5rIGl0J3MgdG9vDQorK3VnbHkgb3Igbm90IHVzZWZ1bCwgdGhhdCdz IGFsc28gZmluZS4gIExldCBtZSBrbm93IGlmIHlvdSB3YW50IG1lIHRvDQorK3Jld3JpdGUgcGFy dHMgb2YgaXQgKG9yIGlmIHlvdSBzZWUgYW55IGJ1Z3MpIG9yIGlmIHRoZXJlIGFyZSBzdHlsZQ0K Kytjb252ZW50aW9ucyBJIGRpZG4ndCBmb2xsb3cuIEl0IGFwcGxpZXMgY2xlYW5seSB3aXRoIHBh dGNoIC1pLCBwbGVhc2UNCisrZm9yZ2l2ZSB0aGUgZ2l0LWlzbXMuDQorKw0KKysoQW5kLCBvZiBj b3Vyc2UsIG1hbnkgdGhhbmtzIGZvciB5b3VyIHdvcmsgaW4gbWFpbnRhaW5pbmcgdGhlIHBvcnQu KQ0KKysNCisrUy4gR2lsbGVzDQorZGlmZiAtLWdpdCBhL2Jhc2ljLmMgYi9iYXNpYy5jDQoraW5k ZXggODVkOWY3MC4uMTIzZTExNSAxMDA2NDQNCistLS0gYS9iYXNpYy5jDQorKysrIGIvYmFzaWMu Yw0KK0BAIC0xOCw2ICsxOCw3IEBADQorICNpbmNsdWRlIDxzaWduYWwuaD4NCisgI2luY2x1ZGUg PHN0ZGlvLmg+DQorICNpbmNsdWRlIDxzdGRsaWIuaD4NCisrI2luY2x1ZGUgPHdjaGFyLmg+DQor IA0KKyAjaW5jbHVkZSAiZGVmLmgiDQorIA0KK0BAIC0yNjksMTIgKzI3MCwyNSBAQCBzZXRnb2Fs KHZvaWQpDQorIGludA0KKyBnZXRnb2FsKHN0cnVjdCBsaW5lICpkbHApDQorIHsNCistCWludCBj LCBpLCBjb2wgPSAwOw0KKy0JY2hhciB0bXBbNV07DQorKwlyZXR1cm4gZ2V0Ynl0ZW9mY29sKGRs cCwgMCwgY3VyZ29hbCk7DQorK30NCisgDQorKy8qDQorKyAqIFJldHVybiB0aGUgYnl0ZSBvZmZz ZXQgd2l0aGluIGxwIHRoYXQgaXMgdGFyZ2V0Y29sIGNvbHVtbnMgYmV5b25kDQorKyAqIHN0YXJ0 Ynl0ZQ0KKysgKi8NCisrc2l6ZV90DQorK2dldGJ5dGVvZmNvbChjb25zdCBzdHJ1Y3QgbGluZSAq bHAsIGNvbnN0IHNpemVfdCBzdGFydGJ5dGUsDQorKyAgICAgICAgICAgICBjb25zdCBzaXplX3Qg dGFyZ2V0Y29sKQ0KKyt7DQorKwlpbnQgYzsNCisrCXNpemVfdCBpLCBjb2wgPSAwOw0KKysJY2hh ciB0bXBbNV07DQorKwlzaXplX3QgYWR2YW5jZV9ieSA9IDE7DQorIA0KKy0JZm9yIChpID0gMDsg aSA8IGxsZW5ndGgoZGxwKTsgaSsrKSB7DQorLQkJYyA9IGxnZXRjKGRscCwgaSk7DQorKwlmb3Ig KGkgPSBzdGFydGJ5dGU7IGkgPCBsbGVuZ3RoKGxwKTsgaSArPSBhZHZhbmNlX2J5KSB7DQorKwkJ YWR2YW5jZV9ieSA9IDE7DQorKwkJYyA9IGxnZXRjKGxwLCBpKTsNCisgCQlpZiAoYyA9PSAnXHQn DQorICNpZmRlZglOT1RBQg0KKyAJCSAgICAmJiAhKGN1cmJwLT5iX2ZsYWcgJiBCRk5PVEFCKQ0K K0BAIC0yODQsMTggKzI5OCw4NiBAQCBnZXRnb2FsKHN0cnVjdCBsaW5lICpkbHApDQorIAkJCWNv bCsrOw0KKyAJCX0gZWxzZSBpZiAoSVNDVFJMKGMpICE9IEZBTFNFKSB7DQorIAkJCWNvbCArPSAy Ow0KKy0JCX0gZWxzZSBpZiAoaXNwcmludChjKSkNCisrCQl9IGVsc2UgaWYgKGlzcHJpbnQoYykp IHsNCisgCQkJY29sKys7DQorLQkJZWxzZSB7DQorKwkJfSBlbHNlIGlmICghKGN1cmJwLT5iX2Zs YWcgJiBCRlNIT1dSQVcpKSB7DQorKwkJCW1ic3RhdGVfdCBtYnMgPSB7IDAgfTsNCisrCQkJd2No YXJfdCB3YyA9IDA7DQorKwkJCXNpemVfdCBjb25zdW1lZCA9IG1icnRvd2MoJndjLCAmbHAtPmxf dGV4dFtpXSwNCisrCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBsbGVuZ3RoKGxwKSAtIGks ICZtYnMpOw0KKysJCQlpbnQgd2lkdGggPSAtMTsNCisrCQkJaWYgKGNvbnN1bWVkIDwgKHNpemVf dCkgLTIpIHsNCisrCQkJCXdpZHRoID0gd2N3aWR0aCh3Yyk7DQorKwkJCX0NCisrCQkJaWYgKHdp ZHRoID49IDApIHsNCisrCQkJCWNvbCArPSB3aWR0aDsNCisrCQkJCWFkdmFuY2VfYnkgPSBjb25z dW1lZDsNCisrCQkJfSBlbHNlIHsNCisrCQkJCWNvbCArPSBzbnByaW50Zih0bXAsIHNpemVvZih0 bXApLCAiXFwlbyIsIGMpOw0KKysJCQl9DQorKwkJfSBlbHNlIHsNCisgCQkJY29sICs9IHNucHJp bnRmKHRtcCwgc2l6ZW9mKHRtcCksICJcXCVvIiwgYyk7DQorIAkJfQ0KKy0JCWlmIChjb2wgPiBj dXJnb2FsKQ0KKysJCWlmIChjb2wgPiB0YXJnZXRjb2wpDQorIAkJCWJyZWFrOw0KKyAJfQ0KKyAJ cmV0dXJuIChpKTsNCisgfQ0KKyANCisgLyoNCisrICogUmV0dXJuIHRoZSBjb2x1bW4gYXQgd2hp Y2ggc3BlY2lmaWVkIG9mZnNldCBieXRlIHdvdWxkIGFwcGVhciwgaWYNCisrICogdGhpcyB3ZXJl IHBhcnQgb2YgYSBsb25nZXIgc3RyaW5nIHByaW50ZWQgYnkgdnRwdXRzLCBzdGFydGluZyBhdA0K KysgKiBpbnRpYWxfY29sDQorKyAqLw0KKytzaXplX3QNCisrZ2V0Y29sb2ZieXRlKGNvbnN0IHN0 cnVjdCBsaW5lICpscCwgY29uc3Qgc2l6ZV90IHN0YXJ0Ynl0ZSwNCisrICAgICAgICAgICAgIGNv bnN0IHNpemVfdCBpbml0aWFsX2NvbCwgY29uc3Qgc2l6ZV90IHRhcmdldG9mZnNldCkNCisrew0K KysJaW50IGM7DQorKwlzaXplX3QgaSwgY29sID0gaW5pdGlhbF9jb2w7DQorKwljaGFyIHRtcFs1 XTsNCisrCXNpemVfdCBhZHZhbmNlX2J5ID0gMTsNCisrDQorKwlmb3IgKGkgPSBzdGFydGJ5dGU7 IGkgPCBsbGVuZ3RoKGxwKTsgaSArPSBhZHZhbmNlX2J5KSB7DQorKwkJaWYgKGkgPj0gdGFyZ2V0 b2Zmc2V0KQ0KKysJCQlicmVhazsNCisrCQlhZHZhbmNlX2J5ID0gMTsNCisrCQljID0gbGdldGMo bHAsIGkpOw0KKysJCWlmIChjID09ICdcdCcNCisrI2lmZGVmCU5PVEFCDQorKwkJICAgICYmICEo Y3VyYnAtPmJfZmxhZyAmIEJGTk9UQUIpDQorKyNlbmRpZg0KKysJCQkpIHsNCisrCQkJY29sIHw9 IDB4MDc7DQorKwkJCWNvbCsrOw0KKysJCX0gZWxzZSBpZiAoSVNDVFJMKGMpICE9IEZBTFNFKSB7 DQorKwkJCWNvbCArPSAyOw0KKysJCX0gZWxzZSBpZiAoaXNwcmludChjKSkgew0KKysJCQljb2wr KzsNCisrCQl9IGVsc2UgaWYgKCEoY3VyYnAtPmJfZmxhZyAmIEJGU0hPV1JBVykpIHsNCisrCQkJ bWJzdGF0ZV90IG1icyA9IHsgMCB9Ow0KKysJCQl3Y2hhcl90IHdjID0gMDsNCisrCQkJc2l6ZV90 IGNvbnN1bWVkID0gbWJydG93Yygmd2MsICZscC0+bF90ZXh0W2ldLA0KKysJCQkgICAgICAgICAg ICAgICAgICAgICAgICAgIGxsZW5ndGgobHApIC0gaSwgJm1icyk7DQorKwkJCWludCB3aWR0aCA9 IC0xOw0KKysJCQlpZiAoY29uc3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKysJCQkJd2lkdGggPSB3 Y3dpZHRoKHdjKTsNCisrCQkJfQ0KKysJCQlpZiAod2lkdGggPj0gMCkgew0KKysJCQkJY29sICs9 IHdpZHRoOw0KKysJCQkJYWR2YW5jZV9ieSA9IGNvbnN1bWVkOw0KKysJCQl9IGVsc2Ugew0KKysJ CQkJY29sICs9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICJcXCVvIiwgYyk7DQorKwkJCX0N CisrCQl9IGVsc2Ugew0KKysJCQljb2wgKz0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIlxc JW8iLCBjKTsNCisrCQl9DQorKwl9DQorKwlyZXR1cm4gKGNvbCk7DQorK30NCisrDQorKw0KKysv Kg0KKyAgKiBTY3JvbGwgZm9yd2FyZCBieSBhIHNwZWNpZmllZCBudW1iZXINCisgICogb2YgbGlu ZXMsIG9yIGJ5IGEgZnVsbCBwYWdlIGlmIG5vIGFyZ3VtZW50Lg0KKyAgKiBUaGUgIjIiIGlzIHRo ZSB3aW5kb3cgb3ZlcmxhcCAodGhpcyBpcyB0aGUgZGVmYXVsdA0KK2RpZmYgLS1naXQgYS9jbW9k ZS5jIGIvY21vZGUuYw0KK2luZGV4IGEyMzgyODUuLjlkNGNhYzMgMTAwNjQ0DQorLS0tIGEvY21v ZGUuYw0KKysrKyBiL2Ntb2RlLmMNCitAQCAtMTQsNiArMTQsNyBAQA0KKyAjaW5jbHVkZSA8Y3R5 cGUuaD4NCisgI2luY2x1ZGUgPHNpZ25hbC5oPg0KKyAjaW5jbHVkZSA8c3RkaW8uaD4NCisrI2lu Y2x1ZGUgPHdjaGFyLmg+DQorIA0KKyAjaW5jbHVkZSAiZGVmLmgiDQorICNpbmNsdWRlICJmdW5t YXAuaCINCitAQCAtNDE5LDEwICs0MjAsMjUgQEAgZmluZGNvbHBvcyhjb25zdCBzdHJ1Y3QgYnVm ZmVyICpicCwgY29uc3Qgc3RydWN0IGxpbmUgKmxwLCBpbnQgbG8pDQorIAkJCSkgew0KKyAJCQlj b2wgfD0gMHgwNzsNCisgCQkJY29sKys7DQorLQkJfSBlbHNlIGlmIChJU0NUUkwoYykgIT0gRkFM U0UpDQorKwkJfSBlbHNlIGlmIChJU0NUUkwoYykgIT0gRkFMU0UpIHsNCisgCQkJY29sICs9IDI7 DQorLQkJZWxzZSBpZiAoaXNwcmludChjKSkgew0KKysJCX0gZWxzZSBpZiAoaXNwcmludChjKSkg ew0KKyAJCQljb2wrKzsNCisrCQl9IGVsc2UgaWYgKCEoYnAtPmJfZmxhZyAmIEJGU0hPV1JBVykp IHsNCisrCQkJbWJzdGF0ZV90IG1icyA9IHsgMCB9Ow0KKysJCQl3Y2hhcl90IHdjID0gMDsNCisr CQkJc2l6ZV90IGNvbnN1bWVkID0gbWJydG93Yygmd2MsICZscC0+bF90ZXh0W2ldLA0KKysJCQkg ICAgICAgICAgICAgICAgICAgICAgICAgIGxsZW5ndGgobHApIC0gaSwgJm1icyk7DQorKwkJCWlu dCB3aWR0aCA9IC0xOw0KKysJCQlpZiAoY29uc3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKysJCQkJ d2lkdGggPSB3Y3dpZHRoKHdjKTsNCisrCQkJfQ0KKysJCQlpZiAod2lkdGggPj0gMCkgew0KKysJ CQkJY29sICs9IHdpZHRoOw0KKysJCQkJaSArPSAoY29uc3VtZWQgLSAxKTsNCisrCQkJfSBlbHNl IHsNCisrCQkJCWNvbCArPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiXFwlbyIsIGMpOw0K KysJCQl9DQorIAkJfSBlbHNlIHsNCisgCQkJY29sICs9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRt cCksICJcXCVvIiwgYyk7DQorIAkJfQ0KK2RpZmYgLS1naXQgYS9kZWYuaCBiL2RlZi5oDQoraW5k ZXggNTRiNzRjZS4uMmZiMjg5ZCAxMDA2NDQNCistLS0gYS9kZWYuaA0KKysrKyBiL2RlZi5oDQor QEAgLTI3MCw3ICsyNzAsNyBAQCBzdHJ1Y3QgYnVmZmVyIHsNCisgCWludAkJIGJfbWFya287CS8q IGRpdHRvIGZvciB0aGUgIm1hcmsiCQkgKi8NCisgCXNob3J0CQkgYl9ubW9kZXM7CS8qIG51bWJl ciBvZiBub24tZnVuZGFtZW50YWwgbW9kZXMgKi8NCisgCWNoYXIJCSBiX253bmQ7CS8qIENvdW50 IG9mIHdpbmRvd3Mgb24gYnVmZmVyCSAqLw0KKy0JY2hhcgkJIGJfZmxhZzsJLyogRmxhZ3MJCQkg Ki8NCisrCXNob3J0CQkgYl9mbGFnOwkvKiBGbGFncwkJCSAqLw0KKyAJY2hhcgkJIGJfZm5hbWVb TkZJTEVOXTsgLyogRmlsZSBuYW1lCQkJICovDQorIAljaGFyCQkgYl9jd2RbTkZJTEVOXTsgLyog d29ya2luZyBkaXJlY3RvcnkJCSAqLw0KKyAJc3RydWN0IGZpbGVpbmZvCSBiX2ZpOwkJLyogRmls ZSBhdHRyaWJ1dGVzCQkgKi8NCitAQCAtMjk3LDYgKzI5Nyw3IEBAIHN0cnVjdCBidWZmZXIgew0K KyAjZGVmaW5lIEJGRElSVFkgICAgIDB4MjAJCS8qIEJ1ZmZlciB3YXMgbW9kaWZpZWQgZWxzZXdo ZXJlICovDQorICNkZWZpbmUgQkZJR05ESVJUWSAgMHg0MAkJLyogSWdub3JlIG1vZGlmaWNhdGlv bnMgCSAqLw0KKyAjZGVmaW5lIEJGRElSRURERUwgIDB4ODAJCS8qIERpcmVkIGhhcyBhIGRlbGV0 ZWQgJ0QnIGZpbGUJICovDQorKyNkZWZpbmUgQkZTSE9XUkFXICAgMHgxMDAJCS8qIFNob3cgdW5w cmludGFibGUgYXMgb2N0YWwJICovDQorIC8qDQorICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGlu Zm9ybWF0aW9uIGFib3V0IHJlY2VudCBhY3Rpb25zIGZvciB0aGUgVW5kbyBjb21tYW5kLg0KKyAg Ki8NCitAQCAtNDk3LDYgKzQ5OCw3IEBAIGludAkJIGRpZ2l0X2FyZ3VtZW50KGludCwgaW50KTsN CisgaW50CQkgbmVnYXRpdmVfYXJndW1lbnQoaW50LCBpbnQpOw0KKyBpbnQJCSBzZWxmaW5zZXJ0 KGludCwgaW50KTsNCisgaW50CQkgcXVvdGUoaW50LCBpbnQpOw0KKytpbnQJCSBpbnNlcnRfY2hh cihpbnQsIGludCk7DQorIA0KKyAvKiBtYWluLmMgKi8NCisgaW50CQkgY3RybGcoaW50LCBpbnQp Ow0KK0BAIC01MTksNiArNTIxLDggQEAgaW50CQkgZm9yd2xpbmUoaW50LCBpbnQpOw0KKyBpbnQJ CSBiYWNrbGluZShpbnQsIGludCk7DQorIHZvaWQJCSBzZXRnb2FsKHZvaWQpOw0KKyBpbnQJCSBn ZXRnb2FsKHN0cnVjdCBsaW5lICopOw0KKytzaXplX3QJCSBnZXRieXRlb2Zjb2woY29uc3Qgc3Ry dWN0IGxpbmUgKiwgc2l6ZV90LCBzaXplX3QpOw0KKytzaXplX3QJCSBnZXRjb2xvZmJ5dGUoY29u c3Qgc3RydWN0IGxpbmUgKiwgc2l6ZV90LCBzaXplX3QsIHNpemVfdCk7DQorIGludAkJIGZvcndw YWdlKGludCwgaW50KTsNCisgaW50CQkgYmFja3BhZ2UoaW50LCBpbnQpOw0KKyBpbnQJCSBmb3J3 MXBhZ2UoaW50LCBpbnQpOw0KK0BAIC02NjUsNiArNjY5LDcgQEAgaW50CQkgbm90YWJtb2RlKGlu dCwgaW50KTsNCisgI2VuZGlmCS8qIE5PVEFCICovDQorIGludAkJIG92ZXJ3cml0ZV9tb2RlKGlu dCwgaW50KTsNCisgaW50CQkgc2V0X2RlZmF1bHRfbW9kZShpbnQsaW50KTsNCisraW50CQkgc2hv d19yYXdfbW9kZShpbnQsIGludCk7DQorIA0KKyAjaWZkZWYgUkVHRVgNCisgLyogcmVfc2VhcmNo LmMgWCAqLw0KK2RpZmYgLS1naXQgYS9kaXNwbGF5LmMgYi9kaXNwbGF5LmMNCitpbmRleCA3YWY3 MjNjLi4xMDRmODczIDEwMDY0NA0KKy0tLSBhL2Rpc3BsYXkuYw0KKysrKyBiL2Rpc3BsYXkuYw0K K0BAIC03LDcgKzcsNyBAQA0KKyAgKiByZWRpc3BsYXkgc3lzdGVtIGtub3dzIGFsbW9zdCBub3Ro aW5nIGFib3V0IHRoZSBlZGl0aW5nDQorICAqIHByb2Nlc3M7IHRoZSBlZGl0aW5nIGZ1bmN0aW9u cyBkbywgaG93ZXZlciwgc2V0IHNvbWUNCisgICogaGludHMgdG8gZWxpbWluYXRlIGEgbG90IG9m IHRoZSBncmluZGluZy4gVGhlcmUgaXMgbW9yZQ0KKy0gKiB0aGF0IGNhbiBiZSBkb25lOyB0aGUg InZ0cHV0YyIgaW50ZXJmYWNlIGlzIGEgcmVhbA0KKysgKiB0aGF0IGNhbiBiZSBkb25lOyB0aGUg InZ0cHV0cyIgaW50ZXJmYWNlIGlzIGEgcmVhbA0KKyAgKiBwaWcuDQorICAqLw0KKyANCitAQCAt MTgsNiArMTgsNyBAQA0KKyAjaW5jbHVkZSA8c3RkbGliLmg+DQorICNpbmNsdWRlIDxzdHJpbmcu aD4NCisgI2luY2x1ZGUgPHRlcm0uaD4NCisrI2luY2x1ZGUgPHdjaGFyLmg+DQorIA0KKyAjaW5j bHVkZSAiZGVmLmgiDQorICNpbmNsdWRlICJrYmQuaCINCitAQCAtNTIsMTEgKzUzLDEwIEBAIHN0 cnVjdCBzY29yZSB7DQorIH07DQorIA0KKyB2b2lkCXZ0bW92ZShpbnQsIGludCk7DQorLXZvaWQJ dnRwdXRjKGludCk7DQorIHZvaWQJdnRwdXRlKGludCk7DQorLWludAl2dHB1dHMoY29uc3QgY2hh ciAqKTsNCisraW50CXZ0cHV0cyhjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90KTsNCisgdm9p ZAl2dGVlb2wodm9pZCk7DQorLXZvaWQJdXBkZXh0KGludCwgaW50KTsNCisraW50CXVwZGV4dChp bnQsIGludCk7DQorIHZvaWQJbW9kZWxpbmUoc3RydWN0IG1nd2luICosIGludCk7DQorIHZvaWQJ c2V0c2NvcmVzKGludCwgaW50KTsNCisgdm9pZAl0cmFjZWJhY2soaW50LCBpbnQsIGludCwgaW50 KTsNCitAQCAtMjE2LDggKzIxNiw4IEBAIHZ0cmVzaXplKGludCBmb3JjZSwgaW50IG5ld3Jvdywg aW50IG5ld2NvbCkNCisgCX0NCisgCWlmIChyb3djaGFuZ2VkIHx8IGNvbGNoYW5nZWQgfHwgZmly c3RfcnVuKSB7DQorIAkJZm9yIChpID0gMDsgaSA8IDIgKiAobmV3cm93IC0gMSk7IGkrKykNCist CQkJVFJZUkVBTExPQyh2aWRlb1tpXS52X3RleHQsIG5ld2NvbCk7DQorLQkJVFJZUkVBTExPQyhi bGFua3Mudl90ZXh0LCBuZXdjb2wpOw0KKysJCQlUUllSRUFMTE9DKHZpZGVvW2ldLnZfdGV4dCwg bmV3Y29sICogTUJfQ1VSX01BWCk7DQorKwkJVFJZUkVBTExPQyhibGFua3Mudl90ZXh0LCBuZXdj b2wgKiBNQl9DVVJfTUFYKTsNCisgCX0NCisgDQorIAlucm93ID0gbmV3cm93Ow0KK0BAIC0yNjAs NyArMjYwLDcgQEAgdnRpbml0KHZvaWQpDQorIAkgKi8NCisgDQorIAlibGFua3Mudl9jb2xvciA9 IENURVhUOw0KKy0JZm9yIChpID0gMDsgaSA8IG5jb2w7ICsraSkNCisrCWZvciAoaSA9IDA7IGkg PCBuY29sICogTUJfQ1VSX01BWDsgKytpKQ0KKyAJCWJsYW5rcy52X3RleHRbaV0gPSAnICc7DQor IH0NCisgDQorQEAgLTI4Nyw3ICsyODcsNyBAQCB2dHRpZHkodm9pZCkNCisgICogTW92ZSB0aGUg dmlydHVhbCBjdXJzb3IgdG8gYW4gb3JpZ2luDQorICAqIDAgc3BvdCBvbiB0aGUgdmlydHVhbCBk aXNwbGF5IHNjcmVlbi4gSSBjb3VsZA0KKyAgKiBzdG9yZSB0aGUgY29sdW1uIGFzIGEgY2hhcmFj dGVyIHBvaW50ZXIgdG8gdGhlIHNwb3QNCistICogb24gdGhlIGxpbmUsIHdoaWNoIHdvdWxkIG1h a2UgInZ0cHV0YyIgYSBsaXR0bGUgYml0DQorKyAqIG9uIHRoZSBsaW5lLCB3aGljaCB3b3VsZCBt YWtlICJ2dHB1dHMiIGEgbGl0dGxlIGJpdA0KKyAgKiBtb3JlIGVmZmljaWVudC4gTm8gY2hlY2tp bmcgZm9yIGVycm9ycy4NCisgICovDQorIHZvaWQNCitAQCAtMjk4LDgyICsyOTgsNiBAQCB2dG1v dmUoaW50IHJvdywgaW50IGNvbCkNCisgfQ0KKyANCisgLyoNCistICogV3JpdGUgYSBjaGFyYWN0 ZXIgdG8gdGhlIHZpcnR1YWwgZGlzcGxheSwNCistICogZGVhbGluZyB3aXRoIGxvbmcgbGluZXMg YW5kIHRoZSBkaXNwbGF5IG9mIHVucHJpbnRhYmxlDQorLSAqIHRoaW5ncyBsaWtlIGNvbnRyb2wg Y2hhcmFjdGVycy4gQWxzbyBleHBhbmQgdGFicyBldmVyeSA4DQorLSAqIGNvbHVtbnMuIFRoaXMg Y29kZSBvbmx5IHB1dHMgcHJpbnRpbmcgY2hhcmFjdGVycyBpbnRvDQorLSAqIHRoZSB2aXJ0dWFs IGRpc3BsYXkgaW1hZ2UuIFNwZWNpYWwgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4NCistICogZXhw YW5kaW5nIHRhYnMuIE9uIGEgc2NyZWVuIHdob3NlIHdpZHRoIGlzIG5vdCBhIG11bHRpcGxlDQor LSAqIG9mIDgsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgdmlydHVhbCBjdXJzb3IgdG8gaGl0IHRo ZQ0KKy0gKiByaWdodCBtYXJnaW4gYmVmb3JlIHRoZSBuZXh0IHRhYiBzdG9wIGlzIHJlYWNoZWQu IFRoaXMNCistICogbWFrZXMgdGhlIHRhYiBjb2RlIGxvb3AgaWYgeW91IGFyZSBub3QgY2FyZWZ1 bC4NCistICogVGhyZWUgZ3Vlc3NlcyBob3cgd2UgZm91bmQgdGhpcy4NCistICovDQorLXZvaWQN CistdnRwdXRjKGludCBjKQ0KKy17DQorLQlzdHJ1Y3QgdmlkZW8JKnZwOw0KKy0NCistCWMgJj0g MHhmZjsNCistDQorLQl2cCA9IHZzY3JlZW5bdnRyb3ddOw0KKy0JaWYgKHZ0Y29sID49IG5jb2wp DQorLQkJdnAtPnZfdGV4dFtuY29sIC0gMV0gPSAnJCc7DQorLQllbHNlIGlmIChjID09ICdcdCcN CistI2lmZGVmCU5PVEFCDQorLQkgICAgJiYgIShjdXJicC0+Yl9mbGFnICYgQkZOT1RBQikNCist I2VuZGlmDQorLQkgICAgKSB7DQorLQkJZG8gew0KKy0JCQl2dHB1dGMoJyAnKTsNCistCQl9IHdo aWxlICh2dGNvbCA8IG5jb2wgJiYgKHZ0Y29sICYgMHgwNykgIT0gMCk7DQorLQl9IGVsc2UgaWYg KElTQ1RSTChjKSkgew0KKy0JCXZ0cHV0YygnXicpOw0KKy0JCXZ0cHV0YyhDQ0hSKGMpKTsNCist CX0gZWxzZSBpZiAoaXNwcmludChjKSkNCistCQl2cC0+dl90ZXh0W3Z0Y29sKytdID0gYzsNCist CWVsc2Ugew0KKy0JCWNoYXIgYmZbNV07DQorLQ0KKy0JCXNucHJpbnRmKGJmLCBzaXplb2YoYmYp LCAiXFwlbyIsIGMpOw0KKy0JCXZ0cHV0cyhiZik7DQorLQl9DQorLX0NCistDQorLS8qDQorLSAq IFB1dCBhIGNoYXJhY3RlciB0byB0aGUgdmlydHVhbCBzY3JlZW4gaW4gYW4gZXh0ZW5kZWQgbGlu ZS4gIElmIHdlIGFyZSBub3QNCistICogeWV0IG9uIGxlZnQgZWRnZSwgZG9uJ3QgcHJpbnQgaXQg eWV0LiAgQ2hlY2sgZm9yIG92ZXJmbG93IG9uIHRoZSByaWdodA0KKy0gKiBtYXJnaW4uDQorLSAq Lw0KKy12b2lkDQorLXZ0cHV0ZShpbnQgYykNCistew0KKy0Jc3RydWN0IHZpZGVvICp2cDsNCist DQorLQljICY9IDB4ZmY7DQorLQ0KKy0JdnAgPSB2c2NyZWVuW3Z0cm93XTsNCistCWlmICh2dGNv bCA+PSBuY29sKQ0KKy0JCXZwLT52X3RleHRbbmNvbCAtIDFdID0gJyQnOw0KKy0JZWxzZSBpZiAo YyA9PSAnXHQnDQorLSNpZmRlZglOT1RBQg0KKy0JICAgICYmICEoY3VyYnAtPmJfZmxhZyAmIEJG Tk9UQUIpDQorLSNlbmRpZg0KKy0JICAgICkgew0KKy0JCWRvIHsNCistCQkJdnRwdXRlKCcgJyk7 DQorLQkJfSB3aGlsZSAoKCh2dGNvbCArIGxib3VuZCkgJiAweDA3KSAhPSAwICYmIHZ0Y29sIDwg bmNvbCk7DQorLQl9IGVsc2UgaWYgKElTQ1RSTChjKSAhPSBGQUxTRSkgew0KKy0JCXZ0cHV0ZSgn XicpOw0KKy0JCXZ0cHV0ZShDQ0hSKGMpKTsNCistCX0gZWxzZSB7DQorLQkJaWYgKHZ0Y29sID49 IDApDQorLQkJCXZwLT52X3RleHRbdnRjb2xdID0gYzsNCistCQkrK3Z0Y29sOw0KKy0JfQ0KKy19 DQorLQ0KKy0vKg0KKyAgKiBFcmFzZSBmcm9tIHRoZSBlbmQgb2YgdGhlIHNvZnR3YXJlIGN1cnNv ciB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIG9uIHdoaWNoDQorICAqIHRoZSBzb2Z0d2FyZSBjdXJz b3IgaXMgbG9jYXRlZC4gVGhlIGRpc3BsYXkgcm91dGluZXMgd2lsbCBkZWNpZGUgaWYgYQ0KKyAg KiBoYXJkd2FyZSBlcmFzZSB0byBlbmQgb2YgbGluZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIHRv IGRpc3BsYXkgdGhpcy4NCitAQCAtMzg0LDcgKzMwOCw3IEBAIHZ0ZWVvbCh2b2lkKQ0KKyAJc3Ry dWN0IHZpZGVvICp2cDsNCisgDQorIAl2cCA9IHZzY3JlZW5bdnRyb3ddOw0KKy0Jd2hpbGUgKHZ0 Y29sIDwgbmNvbCkNCisrCXdoaWxlICh2dGNvbCA8IG5jb2wgKiBNQl9DVVJfTUFYKQ0KKyAJCXZw LT52X3RleHRbdnRjb2wrK10gPSAnICc7DQorIH0NCisgDQorQEAgLTQwNCw3ICszMjgsNyBAQCB1 cGRhdGUoaW50IG1vZGVsaW5lY29sb3IpDQorIAlzdHJ1Y3QgbWd3aW4JKndwOw0KKyAJc3RydWN0 IHZpZGVvCSp2cDE7DQorIAlzdHJ1Y3QgdmlkZW8JKnZwMjsNCistCWludAkgYywgaSwgajsNCisr CWludAkgYywgaTsNCisgCWludAkgaGZsYWc7DQorIAlpbnQJIGN1cnJvdywgY3VyY29sOw0KKyAJ aW50CSBvZmZzLCBzaXplOw0KK0BAIC00NzksOCArNDAzLDkgQEAgdXBkYXRlKGludCBtb2RlbGlu ZWNvbG9yKQ0KKyAJCQl2c2NyZWVuW2ldLT52X2NvbG9yID0gQ1RFWFQ7DQorIAkJCXZzY3JlZW5b aV0tPnZfZmxhZyB8PSAoVkZDSEcgfCBWRkhCQUQpOw0KKyAJCQl2dG1vdmUoaSwgMCk7DQorLQkJ CWZvciAoaiA9IDA7IGogPCBsbGVuZ3RoKGxwKTsgKytqKQ0KKy0JCQkJdnRwdXRjKGxnZXRjKGxw LCBqKSk7DQorKwkJCWlmIChsbGVuZ3RoKGxwKSkgew0KKysJCQkJdnRwdXRzKGxwLT5sX3RleHQs IGxsZW5ndGgobHApLCAwKTsNCisrCQkJfQ0KKyAJCQl2dGVlb2woKTsNCisgCQl9IGVsc2UgaWYg KCh3cC0+d19yZmxhZyAmIChXRkVESVQgfCBXRkZVTEwpKSAhPSAwKSB7DQorIAkJCWhmbGFnID0g VFJVRTsNCitAQCAtNDg5LDggKzQxNCwxMCBAQCB1cGRhdGUoaW50IG1vZGVsaW5lY29sb3IpDQor IAkJCQl2c2NyZWVuW2ldLT52X2ZsYWcgfD0gKFZGQ0hHIHwgVkZIQkFEKTsNCisgCQkJCXZ0bW92 ZShpLCAwKTsNCisgCQkJCWlmIChscCAhPSB3cC0+d19idWZwLT5iX2hlYWRwKSB7DQorLQkJCQkJ Zm9yIChqID0gMDsgaiA8IGxsZW5ndGgobHApOyArK2opDQorLQkJCQkJCXZ0cHV0YyhsZ2V0Yyhs cCwgaikpOw0KKysJCQkJCWlmIChsbGVuZ3RoKGxwKSkgew0KKysJCQkJCQl2dHB1dHMobHAtPmxf dGV4dCwgbGxlbmd0aChscCksDQorKwkJCQkJCSAgICAwKTsNCisrCQkJCQl9DQorIAkJCQkJbHAg PSBsZm9ydyhscCk7DQorIAkJCQl9DQorIAkJCQl2dGVlb2woKTsNCitAQCAtNTA4LDMyICs0MzUs NTMgQEAgdXBkYXRlKGludCBtb2RlbGluZWNvbG9yKQ0KKyAJCSsrY3Vycm93Ow0KKyAJCWxwID0g bGZvcncobHApOw0KKyAJfQ0KKysNCisgCWN1cmNvbCA9IDA7DQorIAlpID0gMDsNCisgCXdoaWxl IChpIDwgY3Vyd3AtPndfZG90bykgew0KKy0JCWMgPSBsZ2V0YyhscCwgaSsrKTsNCisrCQljaGFy IHRtcFs1XTsNCisrCQljID0gbGdldGMobHAsIGkpOw0KKyAJCWlmIChjID09ICdcdCcNCisgI2lm ZGVmCU5PVEFCDQorIAkJICAgICYmICEoY3VyYnAtPmJfZmxhZyAmIEJGTk9UQUIpDQorICNlbmRp Zg0KKyAJCQkpIHsNCistCQkJY3VyY29sIHw9IDB4MDc7DQorIAkJCWN1cmNvbCsrOw0KKysJCQl3 aGlsZSAoKGN1cmNvbCAtIGxib3VuZCkgJiAweDA3KSB7DQorKwkJCQljdXJjb2wrKzsNCisrCQkJ fQ0KKyAJCX0gZWxzZSBpZiAoSVNDVFJMKGMpICE9IEZBTFNFKQ0KKyAJCQljdXJjb2wgKz0gMjsN CistCQllbHNlIGlmIChpc3ByaW50KGMpKQ0KKysJCWVsc2UgaWYgKGlzcHJpbnQoYykpIHsNCisg CQkJY3VyY29sKys7DQorLQkJZWxzZSB7DQorLQkJCWNoYXIgYmZbNV07DQorLQ0KKy0JCQlzbnBy aW50ZihiZiwgc2l6ZW9mKGJmKSwgIlxcJW8iLCBjKTsNCistCQkJY3VyY29sICs9IHN0cmxlbihi Zik7DQorKwkJfSBlbHNlIGlmICghKGN1cmJwLT5iX2ZsYWcgJiBCRlNIT1dSQVcpKSB7DQorKwkJ CW1ic3RhdGVfdCBtYnMgPSB7IDAgfTsNCisrCQkJd2NoYXJfdCB3YyA9IDA7DQorKwkJCXNpemVf dCBjb25zdW1lZCA9IG1icnRvd2MoJndjLCAmbHAtPmxfdGV4dFtpXSwNCisrCQkJICAgICAgICAg ICAgICAgICAgICAgICAgICBsbGVuZ3RoKGxwKSAtIGksICZtYnMpOw0KKysJCQlpbnQgd2lkdGgg PSAtMTsNCisrCQkJaWYgKGNvbnN1bWVkIDwgKHNpemVfdCkgLTIpIHsNCisrCQkJCXdpZHRoID0g d2N3aWR0aCh3Yyk7DQorKwkJCX0gZWxzZSB7DQorKwkJCQltZW1zZXQoJm1icywgMCwgc2l6ZW9m IG1icyk7DQorKwkJCX0NCisrCQkJaWYgKHdpZHRoID49IDApIHsNCisrCQkJCWN1cmNvbCArPSB3 aWR0aDsNCisrCQkJCWkgKz0gKGNvbnN1bWVkIC0gMSk7DQorKwkJCX0gZWxzZSB7DQorKwkJCQlz bnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiXFwlbyIsIGMpOw0KKysJCQkJY3VyY29sICs9IHN0 cmxlbih0bXApOw0KKysJCQl9DQorKwkJfSBlbHNlIHsNCisrCQkJc25wcmludGYodG1wLCBzaXpl b2YodG1wKSwgIlxcJW8iLCBjKTsNCisrCQkJY3VyY29sICs9IHN0cmxlbih0bXApOw0KKyAJCX0N CisrCQlpKys7DQorIAl9DQorIAlpZiAoY3VyY29sID49IG5jb2wgLSAxKSB7CS8qIGV4dGVuZGVk IGxpbmUuICovDQorIAkJLyogZmxhZyB3ZSBhcmUgZXh0ZW5kZWQgYW5kIGNoYW5nZWQgKi8NCisg CQl2c2NyZWVuW2N1cnJvd10tPnZfZmxhZyB8PSBWRkVYVCB8IFZGQ0hHOw0KKy0JCXVwZGV4dChj dXJyb3csIGN1cmNvbCk7CS8qIGFuZCBvdXRwdXQgZXh0ZW5kZWQgbGluZSAqLw0KKysJCWN1cmNv bCA9IHVwZGV4dChjdXJyb3csIGN1cmNvbCk7DQorIAl9IGVsc2UNCisgCQlsYm91bmQgPSAwOwkv KiBub3QgZXh0ZW5kZWQgbGluZSAqLw0KKyANCitAQCAtNTUyLDggKzUwMCwxMCBAQCB1cGRhdGUo aW50IG1vZGVsaW5lY29sb3IpDQorIAkJCQlpZiAoKHdwICE9IGN1cndwKSB8fCAobHAgIT0gd3At PndfZG90cCkgfHwNCisgCQkJCSAgICAoY3VyY29sIDwgbmNvbCAtIDEpKSB7DQorIAkJCQkJdnRt b3ZlKGksIDApOw0KKy0JCQkJCWZvciAoaiA9IDA7IGogPCBsbGVuZ3RoKGxwKTsgKytqKQ0KKy0J CQkJCQl2dHB1dGMobGdldGMobHAsIGopKTsNCisrCQkJCQlpZiAobGxlbmd0aChscCkpIHsNCisr CQkJCQkJdnRwdXRzKGxwLT5sX3RleHQsIGxsZW5ndGgobHApLA0KKysJCQkJCQkgICAgMCk7DQor KwkJCQkJfQ0KKyAJCQkJCXZ0ZWVvbCgpOw0KKyAJCQkJCS8qIHRoaXMgbGluZSBubyBsb25nZXIg aXMgZXh0ZW5kZWQgKi8NCisgCQkJCQl2c2NyZWVuW2ldLT52X2ZsYWcgJj0gflZGRVhUOw0KK0BA IC02NTUsMzkgKzYwNSw0NCBAQCB1Y29weShzdHJ1Y3QgdmlkZW8gKnZ2cCwgc3RydWN0IHZpZGVv ICpwdnApDQorIAlwdnAtPnZfaGFzaCA9IHZ2cC0+dl9oYXNoOw0KKyAJcHZwLT52X2Nvc3QgPSB2 dnAtPnZfY29zdDsNCisgCXB2cC0+dl9jb2xvciA9IHZ2cC0+dl9jb2xvcjsNCistCWJjb3B5KHZ2 cC0+dl90ZXh0LCBwdnAtPnZfdGV4dCwgbmNvbCk7DQorKwliY29weSh2dnAtPnZfdGV4dCwgcHZw LT52X3RleHQsIG5jb2wgKiBNQl9DVVJfTUFYKTsNCisgfQ0KKyANCisgLyoNCistICogdXBkZXh0 OiB1cGRhdGUgdGhlIGV4dGVuZGVkIGxpbmUgd2hpY2ggdGhlIGN1cnNvciBpcyBjdXJyZW50bHkg b24gYXQgYQ0KKy0gKiBjb2x1bW4gZ3JlYXRlciB0aGFuIHRoZSB0ZXJtaW5hbCB3aWR0aC4gVGhl IGxpbmUgd2lsbCBiZSBzY3JvbGxlZCByaWdodCBvcg0KKy0gKiBsZWZ0IHRvIGxldCB0aGUgdXNl ciBzZWUgd2hlcmUgdGhlIGN1cnNvciBpcy4NCisrICogdXBkZXh0OiB1cGRhdGUgdGhlIGV4dGVu ZGVkIGxpbmUgd2hpY2ggdGhlIGN1cnNvciBpcyBjdXJyZW50bHkgb24NCisrICogYXQgYSBjb2x1 bW4gZ3JlYXRlciB0aGFuIHRoZSB0ZXJtaW5hbCB3aWR0aC4gVGhlIGxpbmUgd2lsbCBiZQ0KKysg KiBzY3JvbGxlZCByaWdodCBvciBsZWZ0IHRvIGxldCB0aGUgdXNlciBzZWUgd2hlcmUgdGhlIGN1 cnNvcg0KKysgKiBpcy4gY3VyY29sIG1heSBuZWVkIHRvIGJlIGFkanVzdGVkLCBkZXBlbmRpbmcg b24gaG93IHdpZGUNCisrICogY2hhcmFjdGVycyBhbmQgbGJvdW5kIGludGVyYWN0LCB0aGF0IGFk anVzdGVkIHBvc2l0aW9uIGlzIHJldHVybmVkLg0KKyAgKi8NCistdm9pZA0KKytpbnQNCisgdXBk ZXh0KGludCBjdXJyb3csIGludCBjdXJjb2wpDQorIHsNCistCXN0cnVjdCBsaW5lCSpscDsJCQkv KiBwb2ludGVyIHRvIGN1cnJlbnQgbGluZSAqLw0KKy0JaW50CSBqOwkJCS8qIGluZGV4IGludG8g bGluZSAqLw0KKysJc3RydWN0IGxpbmUgKmxwID0gY3Vyd3AtPndfZG90cDsJLyogcG9pbnRlciB0 byBjdXJyZW50IGxpbmUgKi8NCisrCXNpemVfdCBzdGFydGJ5dGU7DQorKwlpbnQgYmV0dGVyY29s ID0gY3VyY29sOw0KKysJc2l6ZV90IGZ1bGxleHRlbnQ7DQorIA0KKyAJaWYgKG5jb2wgPCAyKQ0K Ky0JCXJldHVybjsNCisrCQlyZXR1cm4gY3VyY29sOw0KKyANCisgCS8qDQorLQkgKiBjYWxjdWxh dGUgd2hhdCBjb2x1bW4gdGhlIGxlZnQgYm91bmQgc2hvdWxkIGJlDQorLQkgKiAoZm9yY2UgY3Vy c29yIGludG8gbWlkZGxlIGhhbGYgb2Ygc2NyZWVuKQ0KKysJICogY2FsY3VsYXRlIHdoYXQgY29s dW1uIHRoZSBsZWZ0IGJvdW5kIHNob3VsZCBiZSAoZm9yY2UNCisrCSAqIGN1cnNvciBpbnRvIG1p ZGRsZSBoYWxmIG9mIHNjcmVlbikuIEVuc3VyaW5nIHRoYXQgaXQgaXMgYXQNCisrCSAqIGEgdGFi c3RvcCBhbGxvd3MgdXBkYXRlKCkgdG8gY2FsY3VsYXRlIGN1cmNvbCB3aXRob3V0DQorKwkgKiB3 b25kZXJpbmcgaG93IHRhYnN0b3BzIGFyZSBjYWxjdWxhdGVkIGJlZm9yZSB0aGUgZmlyc3QgJyQn Lg0KKyAJICovDQorIAlsYm91bmQgPSBjdXJjb2wgLSAoY3VyY29sICUgKG5jb2wgPj4gMSkpIC0g KG5jb2wgPj4gMik7DQorLQ0KKy0JLyoNCistCSAqIHNjYW4gdGhyb3VnaCB0aGUgbGluZSBvdXRw dXRpbmcgY2hhcmFjdGVycyB0byB0aGUgdmlydHVhbCBzY3JlZW4NCistCSAqIG9uY2Ugd2UgcmVh Y2ggdGhlIGxlZnQgZWRnZQ0KKy0JICovDQorLQl2dG1vdmUoY3Vycm93LCAtbGJvdW5kKTsJCS8q IHN0YXJ0IHNjYW5uaW5nIG9mZnNjcmVlbiAqLw0KKy0JbHAgPSBjdXJ3cC0+d19kb3RwOwkJCS8q IGxpbmUgdG8gb3V0cHV0ICovDQorLQlmb3IgKGogPSAwOyBqIDwgbGxlbmd0aChscCk7ICsraikJ LyogdW50aWwgdGhlIGVuZC1vZi1saW5lICovDQorLQkJdnRwdXRlKGxnZXRjKGxwLCBqKSk7DQor LQl2dGVlb2woKTsJCQkJLyogdHJ1bmNhdGUgdGhlIHZpcnR1YWwgbGluZSAqLw0KKy0JdnNjcmVl bltjdXJyb3ddLT52X3RleHRbMF0gPSAnJCc7CS8qIGFuZCBwdXQgYSAnJCcgaW4gY29sdW1uIDEg Ki8NCisrCWxib3VuZCA9IChsYm91bmQgfCAweDA3KSArIDE7DQorKwl2c2NyZWVuW2N1cnJvd10t PnZfdGV4dFswXSA9ICckJzsNCisrCXZ0bW92ZShjdXJyb3csIDEpOw0KKysJc3RhcnRieXRlID0g Z2V0Ynl0ZW9mY29sKGxwLCAwLCBsYm91bmQgKyAxKTsNCisrCWZ1bGxleHRlbnQgPSBnZXRieXRl b2Zjb2wobHAsIHN0YXJ0Ynl0ZSwgbmNvbCArIDEpOw0KKysJdnRwdXRzKGxwLT5sX3RleHQgKyBz dGFydGJ5dGUsIGZ1bGxleHRlbnQgLSBzdGFydGJ5dGUsIDEpOw0KKysJdnRlZW9sKCk7DQorKw0K KysJYmV0dGVyY29sID0gbGJvdW5kICsgZ2V0Y29sb2ZieXRlKGxwLCBzdGFydGJ5dGUsIDEsIGN1 cndwLT53X2RvdG8pOw0KKysJcmV0dXJuIChiZXR0ZXJjb2wpOw0KKyB9DQorIA0KKyAvKg0KK0BA IC03MDIsMTIgKzY1NywzNSBAQCB1cGRleHQoaW50IGN1cnJvdywgaW50IGN1cmNvbCkNCisgdm9p ZA0KKyB1bGluZShpbnQgcm93LCBzdHJ1Y3QgdmlkZW8gKnZ2cCwgc3RydWN0IHZpZGVvICpwdnAp DQorIHsNCistCWNoYXIgICpjcDE7DQorLQljaGFyICAqY3AyOw0KKy0JY2hhciAgKmNwMzsNCist CWNoYXIgICpjcDQ7DQorLQljaGFyICAqY3A1Ow0KKysJY2hhciAgKmNwMTsgLyogUG9pbnRlciB0 byB0aGUgc3RhcnQgb2YgZGlydHkgcmVnaW9uICovDQorKwljaGFyICAqY3AyOyAvKiBwdnAncyBj b3VudGVycGFydCBmb3IgY3AxICovDQorKwljaGFyICAqY3AzOyAvKiBQb2ludGVyIHRvIGVuZCBv ZiBkaXJ0eSByZWdpb24gKi8NCisrCWNoYXIgICpjcDQ7IC8qIHB2cCdzIGNvdW50ZXJwYXJ0IGZv ciBjcDMgKi8NCisrCWNoYXIgICpjcDU7IC8qIEFmdGVyIHRoaXMsIHdpdGhpbiBkaXJ0eSByZWdp b24sIGFsbCBpcyAnICcgKi8NCisrCWNoYXIgICptYmNvdW50ZXI7DQorIAlpbnQgICAgbmJmbGFn Ow0KKysJaW50ICAgIHN0YXJ0Y29sOyAvKiBvbnNjcmVlbiBjb2x1bW4gbWF0Y2hpbmcgY3AxICov DQorKwljaGFyICAqbGFzdGJ5dGU7IC8qIGJ5dGUgd2hpY2ggaGFuZGxlcyBsYXN0IG9uc2NyZWVu IGNvbHVtbiAgKi8NCisrCWludCAgICBzZWVuY29scyA9IDA7DQorKwltYnN0YXRlX3QgbWJzID0g eyAwIH07DQorKwl3Y2hhcl90IHdjID0gMDsNCisrDQorKwlsYXN0Ynl0ZSA9IHZ2cC0+dl90ZXh0 Ow0KKysJd2hpbGUgKHNlZW5jb2xzIDwgbmNvbCAmJiAqbGFzdGJ5dGUpIHsNCisrCQlzaXplX3Qg Y29uc3VtZWQgPSBtYnJ0b3djKCZ3YywgbGFzdGJ5dGUsDQorKwkJICAgICh2dnAtPnZfdGV4dCAr IG5jb2wgKiBNQl9DVVJfTUFYIC0gbGFzdGJ5dGUpLCAmbWJzKTsNCisrCQlpZiAoY29uc3VtZWQg PCAoc2l6ZV90KSAtMikgew0KKysJCQlsYXN0Ynl0ZSArPSBjb25zdW1lZDsNCisrCQkJc2VlbmNv bHMgKz0gd2N3aWR0aCh3Yyk7DQorKwkJfSBlbHNlIHsNCisrCQkJbGFzdGJ5dGUrKzsNCisrCQkJ c2VlbmNvbHMrKzsNCisrCQkJbWVtc2V0KCZtYnMsIDAsIHNpemVvZiBtYnMpOw0KKysJCX0NCisr CX0NCisrCWlmIChsYXN0Ynl0ZSAtIHZ2cC0+dl90ZXh0IDwgbmNvbCkgew0KKysJCWxhc3RieXRl ID0gJnZ2cC0+dl90ZXh0W25jb2xdOw0KKysJfQ0KKyANCisgCWlmICh2dnAtPnZfY29sb3IgIT0g cHZwLT52X2NvbG9yKSB7CS8qIFdyb25nIGNvbG9yLCBkbyBhCSAqLw0KKyAJCXR0bW92ZShyb3cs IDApOwkJCS8qIGZ1bGwgcmVkcmF3LgkJICovDQorQEAgLTcyMywxMSArNzAxLDEyIEBAIHVsaW5l KGludCByb3csIHN0cnVjdCB2aWRlbyAqdnZwLCBzdHJ1Y3QgdmlkZW8gKnB2cCkNCisgCQkgKiBw dXR0aW5nIHRoZSBpbnZpc2libGUgZ2xpdGNoIGNoYXJhY3RlciBvbiB0aGUgbmV4dCBsaW5lLg0K KyAJCSAqIChIYXplbHRpbmUgZXhlY3V0aXZlIDgwIG1vZGVsIDMwKQ0KKyAJCSAqLw0KKy0JCWNw MiA9ICZ2dnAtPnZfdGV4dFtuY29sIC0gKG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggPj0gMCA/DQorLQkJ ICAgIChtYWdpY19jb29raWVfZ2xpdGNoICE9IDAgPyBtYWdpY19jb29raWVfZ2xpdGNoIDogMSkg OiAwKV07DQorKwkJY3AyID0gbGFzdGJ5dGUgLQ0KKysJCSAgICAobWFnaWNfY29va2llX2dsaXRj aCA+PSAwID8gKG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggIT0gMCA/DQorKwkJICAgIG1hZ2ljX2Nvb2tp ZV9nbGl0Y2ggOiAxKSA6IDApOw0KKyAjZWxzZQ0KKyAJCWNwMSA9ICZ2dnAtPnZfdGV4dFswXTsN CistCQljcDIgPSAmdnZwLT52X3RleHRbbmNvbF07DQorKwkJY3AyID0gbGFzdGJ5dGU7DQorICNl bmRpZg0KKyAJCXdoaWxlIChjcDEgIT0gY3AyKSB7DQorIAkJCXR0cHV0YygqY3AxKyspOw0KK0BA IC03MzgsMjEgKzcxNywzMSBAQCB1bGluZShpbnQgcm93LCBzdHJ1Y3QgdmlkZW8gKnZ2cCwgc3Ry dWN0IHZpZGVvICpwdnApDQorIAl9DQorIAljcDEgPSAmdnZwLT52X3RleHRbMF07CQkvKiBDb21w dXRlIGxlZnQgbWF0Y2guCSAqLw0KKyAJY3AyID0gJnB2cC0+dl90ZXh0WzBdOw0KKy0Jd2hpbGUg KGNwMSAhPSAmdnZwLT52X3RleHRbbmNvbF0gJiYgY3AxWzBdID09IGNwMlswXSkgew0KKysJd2hp bGUgKGNwMSAhPSBsYXN0Ynl0ZSAmJiBjcDFbMF0gPT0gY3AyWzBdKSB7DQorIAkJKytjcDE7DQor IAkJKytjcDI7DQorIAl9DQorLQlpZiAoY3AxID09ICZ2dnAtPnZfdGV4dFtuY29sXSkJLyogQWxs IGVxdWFsLgkJICovDQorKwlpZiAoY3AxID09IGxhc3RieXRlKQkvKiBBbGwgZXF1YWwuCQkgKi8N CisgCQlyZXR1cm47DQorKwl3aGlsZSAoY3AxICE9IHZ2cC0+dl90ZXh0ICYmICFpc3ByaW50KCpj cDEpICYmDQorKwkgICAgICAgbWJydG93Yygmd2MsIGNwMSwgKGxhc3RieXRlIC0gY3AxKSwgJm1i cykgPj0gKHNpemVfdCkgLTIpIHsNCisrCQktLWNwMTsNCisrCQktLWNwMjsNCisrCX0NCisgCW5i ZmxhZyA9IEZBTFNFOw0KKy0JY3AzID0gJnZ2cC0+dl90ZXh0W25jb2xdOwkvKiBDb21wdXRlIHJp Z2h0IG1hdGNoLiAgKi8NCistCWNwNCA9ICZwdnAtPnZfdGV4dFtuY29sXTsNCisrCWNwMyA9IGxh c3RieXRlOwkvKiBDb21wdXRlIHJpZ2h0IG1hdGNoLiAgKi8NCisrCWNwNCA9ICZwdnAtPnZfdGV4 dFtsYXN0Ynl0ZSAtIHZ2cC0+dl90ZXh0XTsNCisgCXdoaWxlIChjcDNbLTFdID09IGNwNFstMV0p IHsNCisgCQktLWNwMzsNCisgCQktLWNwNDsNCisgCQlpZiAoY3AzWzBdICE9ICcgJykJLyogTm90 ZSBub24tYmxhbmtzIGluCSAqLw0KKyAJCQluYmZsYWcgPSBUUlVFOwkvKiB0aGUgcmlnaHQgbWF0 Y2guCSAqLw0KKyAJfQ0KKysJd2hpbGUgKGNwMyAhPSBsYXN0Ynl0ZSAmJiAhaXNwcmludCgqY3Az KSAmJg0KKysJICAgICAgICBtYnJ0b3djKCZ3YywgY3AzLCAobGFzdGJ5dGUgLSBjcDMpLCAmbWJz KSA+PSAoc2l6ZV90KSAtMikgew0KKysJCSsrY3AzOw0KKysJCSsrY3A0Ow0KKysJfQ0KKyAJY3A1 ID0gY3AzOwkJCS8qIElzIGVyYXNlIGdvb2Q/CSAqLw0KKyAJaWYgKG5iZmxhZyA9PSBGQUxTRSAm JiB2dnAtPnZfY29sb3IgPT0gQ1RFWFQpIHsNCisgCQl3aGlsZSAoY3A1ICE9IGNwMSAmJiBjcDVb LTFdID09ICcgJykNCitAQCAtNzYyLDEzICs3NTEsMjcgQEAgdWxpbmUoaW50IHJvdywgc3RydWN0 IHZpZGVvICp2dnAsIHN0cnVjdCB2aWRlbyAqcHZwKQ0KKyAJCQljcDUgPSBjcDM7DQorIAl9DQor IAkvKiBBbGN5b24gaGFjayAqLw0KKy0JdHRtb3ZlKHJvdywgKGludCkgKGNwMSAtICZ2dnAtPnZf dGV4dFswXSkpOw0KKysJc3RhcnRjb2wgPSAwOw0KKysJbWJjb3VudGVyID0gdnZwLT52X3RleHQ7 DQorKwl3aGlsZSAoKGNwMSAtIG1iY291bnRlcikgPiAwKSB7DQorKwkJc2l6ZV90IGNvbnN1bWVk ID0gbWJydG93Yygmd2MsIG1iY291bnRlciwgKGNwMSAtIG1iY291bnRlciksDQorKwkJICAgICAg ICAgICAgICAgICAgICAgICAgICAmbWJzKTsNCisrCQlpZiAoY29uc3VtZWQgPCAoc2l6ZV90KSAt Mikgew0KKysJCQltYmNvdW50ZXIgKz0gY29uc3VtZWQ7DQorKwkJCXN0YXJ0Y29sICs9IHdjd2lk dGgod2MpOw0KKysJCX0gZWxzZSB7DQorKwkJCW1iY291bnRlcisrOw0KKysJCQlzdGFydGNvbCsr Ow0KKysJCQltZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7DQorKwkJfQ0KKysJfQ0KKysJdHRt b3ZlKHJvdywgc3RhcnRjb2wpOw0KKyAjaWZkZWYJU1RBTkRPVVRfR0xJVENIDQorIAlpZiAodnZw LT52X2NvbG9yICE9IENURVhUICYmIG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggPiAwKSB7DQorIAkJaWYg KGNwMSA8ICZ2dnAtPnZfdGV4dFttYWdpY19jb29raWVfZ2xpdGNoXSkNCisgCQkJY3AxID0gJnZ2 cC0+dl90ZXh0W21hZ2ljX2Nvb2tpZV9nbGl0Y2hdOw0KKy0JCWlmIChjcDUgPiAmdnZwLT52X3Rl eHRbbmNvbCAtIG1hZ2ljX2Nvb2tpZV9nbGl0Y2hdKQ0KKy0JCQljcDUgPSAmdnZwLT52X3RleHRb bmNvbCAtIG1hZ2ljX2Nvb2tpZV9nbGl0Y2hdOw0KKysJCWlmIChjcDUgPiBsYXN0Ynl0ZSAtIG1h Z2ljX2Nvb2tpZV9nbGl0Y2gpDQorKwkJCWNwNSA9IGxhc3RieXRlIC0gbWFnaWNfY29va2llX2ds aXRjaDsNCisgCX0gZWxzZSBpZiAobWFnaWNfY29va2llX2dsaXRjaCA8IDApDQorICNlbmRpZg0K KyAJCXR0Y29sb3IodnZwLT52X2NvbG9yKTsNCitAQCAtODAxLDQ2ICs4MDQsMzkgQEAgbW9kZWxp bmUoc3RydWN0IG1nd2luICp3cCwgaW50IG1vZGVsaW5lY29sb3IpDQorIAl2c2NyZWVuW25dLT52 X2ZsYWcgfD0gKFZGQ0hHIHwgVkZIQkFEKTsJLyogUmVjb21wdXRlLCBkaXNwbGF5LgkgKi8NCisg CXZ0bW92ZShuLCAwKTsJCQkJLyogU2VlayB0byByaWdodCBsaW5lLgkgKi8NCisgCWJwID0gd3At PndfYnVmcDsNCistCXZ0cHV0YygnLScpOw0KKy0JdnRwdXRjKCctJyk7DQorKwluID0gdnRwdXRz KCItLSIsIDAsIDApOw0KKyAJaWYgKChicC0+Yl9mbGFnICYgQkZSRUFET05MWSkgIT0gMCkgew0K Ky0JCXZ0cHV0YygnJScpOw0KKysJCW4gKz0gdnRwdXRzKCIlIiwgMCwgbik7DQorIAkJaWYgKChi cC0+Yl9mbGFnICYgQkZDSEcpICE9IDApDQorLQkJCXZ0cHV0YygnKicpOw0KKysJCQluICs9IHZ0 cHV0cygiKiIsIDAsIG4pOw0KKyAJCWVsc2UNCistCQkJdnRwdXRjKCclJyk7DQorKwkJCW4gKz0g dnRwdXRzKCIlIiwgMCwgbik7DQorIAl9IGVsc2UgaWYgKChicC0+Yl9mbGFnICYgQkZDSEcpICE9 IDApIHsJLyogIioiIGlmIGNoYW5nZWQuCSAqLw0KKy0JCXZ0cHV0YygnKicpOw0KKy0JCXZ0cHV0 YygnKicpOw0KKysJCW4gKz0gdnRwdXRzKCIqKiIsIDAsIG4pOw0KKyAJfSBlbHNlIHsNCistCQl2 dHB1dGMoJy0nKTsNCistCQl2dHB1dGMoJy0nKTsNCisrCQluICs9IHZ0cHV0cygiLS0iLCAwLCBu KTsNCisgCX0NCistCXZ0cHV0YygnLScpOw0KKysJbiArPSB2dHB1dHMoIi0iLCAwLCBuKTsNCisg CW4gPSA1Ow0KKy0JbiArPSB2dHB1dHMoIk1nOiAiKTsNCisrCW4gKz0gdnRwdXRzKCJNZzogIiwg MCwgbik7DQorIAlpZiAoYnAtPmJfYm5hbWVbMF0gIT0gJ1wwJykNCistCQluICs9IHZ0cHV0cygm KGJwLT5iX2JuYW1lWzBdKSk7DQorKwkJbiArPSB2dHB1dHMoJihicC0+Yl9ibmFtZVswXSksIDAs IG4pOw0KKyAJd2hpbGUgKG4gPCA0MikgewkJCS8qIFBhZCBvdXQgd2l0aCBibGFua3MuCSAqLw0K Ky0JCXZ0cHV0YygnICcpOw0KKy0JCSsrbjsNCisrCQluICs9IHZ0cHV0cygiICIsIDAsIG4pOw0K KyAJfQ0KKy0JdnRwdXRjKCcoJyk7DQorLQkrK247DQorKwluICs9IHZ0cHV0cygiKCIsIDAsIG4p Ow0KKyAJZm9yIChtZCA9IDA7IDsgKSB7DQorLQkJbiArPSB2dHB1dHMoYnAtPmJfbW9kZXNbbWRd LT5wX25hbWUpOw0KKysJCW4gKz0gdnRwdXRzKGJwLT5iX21vZGVzW21kXS0+cF9uYW1lLCAwLCBu KTsNCisgCQlpZiAoKyttZCA+IGJwLT5iX25tb2RlcykNCisgCQkJYnJlYWs7DQorLQkJdnRwdXRj KCctJyk7DQorLQkJKytuOw0KKysJCW4gKz0gdnRwdXRzKCItIiwgMCwgbik7DQorIAl9DQorIAkv KiBYWFggVGhlc2Ugc2hvdWxkIGV2ZW50dWFsbHkgbW92ZSB0byBhIHJlYWwgbW9kZSAqLw0KKyAJ aWYgKG1hY3JvZGVmID09IFRSVUUpDQorLQkJbiArPSB2dHB1dHMoIi1kZWYiKTsNCisrCQluICs9 IHZ0cHV0cygiLWRlZiIsIDAsIG4pOw0KKyAJaWYgKGdsb2JhbHdkID09IFRSVUUpDQorLQkJbiAr PSB2dHB1dHMoIi1nd2QiKTsNCistCXZ0cHV0YygnKScpOw0KKy0JKytuOw0KKysJCW4gKz0gdnRw dXRzKCItZ3dkIiwgMCwgbik7DQorKwluICs9IHZ0cHV0cygiKSIsIDAsIG4pOw0KKyANCisgCWlm IChsaW5lbm9zICYmIGNvbG5vcykNCisgCQlsZW4gPSBzbnByaW50ZihzbCwgc2l6ZW9mKHNsKSwg Ii0tTCVkLS1DJWQiLCB3cC0+d19kb3RsaW5lLA0KK0BAIC04NTAsMjcgKzg0NiwxMzIgQEAgbW9k ZWxpbmUoc3RydWN0IG1nd2luICp3cCwgaW50IG1vZGVsaW5lY29sb3IpDQorIAllbHNlIGlmIChj b2xub3MpDQorIAkJbGVuID0gc25wcmludGYoc2wsIHNpemVvZihzbCksICItLUMlZCIsIGdldGNv bHBvcyh3cCkpOw0KKyAJaWYgKChsaW5lbm9zIHx8IGNvbG5vcykgJiYgbGVuIDwgc2l6ZW9mKHNs KSAmJiBsZW4gIT0gLTEpDQorLQkJbiArPSB2dHB1dHMoc2wpOw0KKysJCW4gKz0gdnRwdXRzKHNs LCAwLCBuKTsNCisgDQorIAl3aGlsZSAobiA8IG5jb2wpIHsJCQkvKiBQYWQgb3V0LgkJICovDQor LQkJdnRwdXRjKCctJyk7DQorLQkJKytuOw0KKysJCW4gKz0gdnRwdXRzKCItIiwgMCwgbik7DQor IAl9DQorIH0NCisgDQorIC8qDQorLSAqIE91dHB1dCBhIHN0cmluZyB0byB0aGUgbW9kZSBsaW5l LCByZXBvcnQgaG93IGxvbmcgaXQgd2FzLg0KKysgKiBPdXRwdXQgYSBzdHJpbmcgdG8gdGhlIG1v ZGUgbGluZSwgcmVwb3J0IGhvdyBsb25nIGl0IHdhcywNCisrICogZGVhbGluZyB3aXRoIGxvbmcg bGluZXMgYW5kIHRoZSBkaXNwbGF5IG9mIHVucHJpbnRhYmxlDQorKyAqIHRoaW5ncyBsaWtlIGNv bnRyb2wgY2hhcmFjdGVycy4gQWxzbyBleHBhbmQgdGFicyBldmVyeSA4DQorKyAqIGNvbHVtbnMu IFRoaXMgY29kZSBvbmx5IHB1dHMgcHJpbnRpbmcgY2hhcmFjdGVycyBpbnRvDQorKyAqIHRoZSB2 aXJ0dWFsIGRpc3BsYXkgaW1hZ2UuIFNwZWNpYWwgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4NCisr ICogZXhwYW5kaW5nIHRhYnMuIE9uIGEgc2NyZWVuIHdob3NlIHdpZHRoIGlzIG5vdCBhIG11bHRp cGxlDQorKyAqIG9mIDgsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgdmlydHVhbCBjdXJzb3IgdG8g aGl0IHRoZQ0KKysgKiByaWdodCBtYXJnaW4gYmVmb3JlIHRoZSBuZXh0IHRhYiBzdG9wIGlzIHJl YWNoZWQuIFRoaXMNCisrICogbWFrZXMgdGhlIHRhYiBjb2RlIGxvb3AgaWYgeW91IGFyZSBub3Qg Y2FyZWZ1bC4NCisrICogVGhyZWUgZ3Vlc3NlcyBob3cgd2UgZm91bmQgdGhpcy4NCisgICovDQor IGludA0KKy12dHB1dHMoY29uc3QgY2hhciAqcykNCisrdnRwdXRzKGNvbnN0IGNoYXIgKnMsIGNv bnN0IHNpemVfdCBtYXhfYnl0ZXMsIGNvbnN0IHNpemVfdCBpbml0aWFsX2NvbCkNCisgew0KKy0J aW50IG4gPSAwOw0KKysJY29uc3QgdW5zaWduZWQgY2hhciAqdXMgPSAoY29uc3QgdW5zaWduZWQg Y2hhciAqKSBzOw0KKysJc3RydWN0IHZpZGVvICp2cCA9IHZzY3JlZW5bdnRyb3ddOw0KKysJc2l6 ZV90IGJ5dGVzX2hhbmRsZWQgPSAwOw0KKysJc2l6ZV90IGxhc3RfZnVsbF9ieXRlX3N0YXJ0ID0g dnRjb2w7DQorKwlzaXplX3Qgc3BhY2VfcHJpbnRlZCA9IDA7DQorKw0KKysJaWYgKCFzKSB7DQor KwkJcmV0dXJuICgwKTsNCisrCX0NCisrDQorKwl3aGlsZSAoKnVzICYmICghbWF4X2J5dGVzIHx8 IGJ5dGVzX2hhbmRsZWQgPCBtYXhfYnl0ZXMpKSB7DQorKwkJaWYgKHNwYWNlX3ByaW50ZWQgKyBp bml0aWFsX2NvbCA+PSBuY29sKSB7DQorKwkJCWJyZWFrOw0KKysJCX0gZWxzZSBpZiAoKnVzID09 ICdcdCcNCisrI2lmZGVmCU5PVEFCDQorKwkJICAgICAgICAgICAmJiAhKGN1cmJwLT5iX2ZsYWcg JiBCRk5PVEFCKQ0KKysjZW5kaWYNCisrCQkgICAgICAgICAgICkgew0KKysJCQlsYXN0X2Z1bGxf Ynl0ZV9zdGFydCA9IHZ0Y29sOw0KKysJCQlkbyB7DQorKwkJCQlpZiAodnRjb2wgPj0gMCkgew0K KysJCQkJCWxhc3RfZnVsbF9ieXRlX3N0YXJ0ID0gdnRjb2w7DQorKwkJCQkJdnAtPnZfdGV4dFt2 dGNvbF0gPSAnICc7DQorKwkJCQl9DQorKwkJCQl2dGNvbCsrOw0KKysJCQkJc3BhY2VfcHJpbnRl ZCsrOw0KKysJCQl9IHdoaWxlIChzcGFjZV9wcmludGVkICsgaW5pdGlhbF9jb2wgPCBuY29sICYm DQorKwkJCSAgICAgICAgICgoc3BhY2VfcHJpbnRlZCArIGluaXRpYWxfY29sKSAmIDB4MDcpKTsN CisrCQkJdXMrKzsNCisrCQkJYnl0ZXNfaGFuZGxlZCsrOw0KKysJCX0gZWxzZSBpZiAoSVNDVFJM KCp1cykpIHsNCisrCQkJbGFzdF9mdWxsX2J5dGVfc3RhcnQgPSB2dGNvbDsNCisrCQkJaWYgKHZ0 Y29sID49IDApIHsNCisrCQkJCXZwLT52X3RleHRbdnRjb2xdID0gJ14nOw0KKysJCQl9DQorKwkJ CXZ0Y29sKys7DQorKwkJCWlmICh2dGNvbCA+PSAwKSB7DQorKwkJCQl2cC0+dl90ZXh0W3Z0Y29s XSA9IENDSFIoKnVzKTsNCisrCQkJfQ0KKysJCQl2dGNvbCsrOw0KKysJCQlieXRlc19oYW5kbGVk Kys7DQorKwkJCXNwYWNlX3ByaW50ZWQgKz0gMjsNCisrCQkJdXMrKzsNCisrCQl9IGVsc2UgaWYg KGlzcHJpbnQoKnVzKSkgew0KKysJCQlsYXN0X2Z1bGxfYnl0ZV9zdGFydCA9IHZ0Y29sOw0KKysJ CQlpZiAodnRjb2wgPj0gMCkgew0KKysJCQkJdnAtPnZfdGV4dFt2dGNvbF0gPSAqdXMrKzsNCisr CQkJfQ0KKysJCQl2dGNvbCsrOw0KKysJCQlieXRlc19oYW5kbGVkKys7DQorKwkJCXNwYWNlX3By aW50ZWQrKzsNCisrCQl9IGVsc2UgaWYgKCEoY3VyYnAtPmJfZmxhZyAmIEJGU0hPV1JBVykpIHsN CisrCQkJbWJzdGF0ZV90IG1icyA9IHsgMCB9Ow0KKysJCQl3Y2hhcl90IHdjID0gMDsNCisrCQkJ c2l6ZV90IGNvbnN1bWFibGUgPSBtYXhfYnl0ZXMgPw0KKysJCQkgICAgICAgIChtYXhfYnl0ZXMg LSBieXRlc19oYW5kbGVkKSA6IC0xOw0KKysJCQlzaXplX3QgY29uc3VtZWQgPSBtYnJ0b3djKCZ3 YywgKGNvbnN0IGNoYXIgKil1cywNCisrCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dW1hYmxlLCAmbWJzKTsNCisrCQkJaW50IHdpZHRoID0gLTE7DQorKwkJCWxhc3RfZnVsbF9ieXRl X3N0YXJ0ID0gdnRjb2w7DQorKwkJCWlmIChjb25zdW1lZCA8IChzaXplX3QpIC0yKSB7DQorKwkJ CQl3aWR0aCA9IHdjd2lkdGgod2MpOw0KKysJCQl9DQorKwkJCWlmICh3aWR0aCA+PSAwKSB7DQor KwkJCQlieXRlc19oYW5kbGVkICs9IGNvbnN1bWVkOw0KKysJCQkJc3BhY2VfcHJpbnRlZCArPSB3 aWR0aDsNCisrCQkJCWRvIHsNCisrCQkJCQlpZiAodnRjb2wgPj0gMCkgew0KKysJCQkJCQl2cC0+ dl90ZXh0W3Z0Y29sXSA9ICp1cysrOw0KKysJCQkJCX0NCisrCQkJCQl2dGNvbCsrOw0KKysJCQkJ fSB3aGlsZSAoLS1jb25zdW1lZCk7DQorKwkJCX0gZWxzZSB7DQorKwkJCQljaGFyIGJmWzVdOw0K KysJCQkJc25wcmludGYoYmYsIHNpemVvZihiZiksICJcXCVvIiwgKnVzKTsNCisrCQkJCWJ5dGVz X2hhbmRsZWQrKzsNCisrCQkJCXNwYWNlX3ByaW50ZWQgKz0gdnRwdXRzKGJmLCAwLA0KKysJCQkJ ICAgIHNwYWNlX3ByaW50ZWQgKyBpbml0aWFsX2NvbCk7DQorKwkJCQl1cysrOw0KKysJCQl9DQor KwkJfSBlbHNlIHsNCisrCQkJY2hhciBiZls1XTsNCisrCQkJbGFzdF9mdWxsX2J5dGVfc3RhcnQg PSB2dGNvbDsNCisrCQkJc25wcmludGYoYmYsIHNpemVvZihiZiksICJcXCVvIiwgKnVzKTsNCisr CQkJYnl0ZXNfaGFuZGxlZCsrOw0KKysJCQlzcGFjZV9wcmludGVkICs9IHZ0cHV0cyhiZiwgMCwN CisrCQkJICAgIHNwYWNlX3ByaW50ZWQgKyBpbml0aWFsX2NvbCk7DQorKwkJCXVzKys7DQorKwkJ fQ0KKysJfQ0KKyANCistCXdoaWxlICgqcyAhPSAnXDAnKSB7DQorLQkJdnRwdXRjKCpzKyspOw0K Ky0JCSsrbjsNCisrCWlmICgoc3BhY2VfcHJpbnRlZCArIGluaXRpYWxfY29sID4gbmNvbCkgfHwN CisrCSAgICAoc3BhY2VfcHJpbnRlZCArIGluaXRpYWxfY29sID09IG5jb2wgJiYNCisrCSAgICAo KnVzICYmICghbWF4X2J5dGVzIHx8IGJ5dGVzX2hhbmRsZWQgPCBtYXhfYnl0ZXMpKSkpIHsNCisr CQl2cC0+dl90ZXh0W2xhc3RfZnVsbF9ieXRlX3N0YXJ0XSA9ICckJzsNCisrCQl3aGlsZSAoKyts YXN0X2Z1bGxfYnl0ZV9zdGFydCA8PSB2dGNvbCkgew0KKysJCQl2cC0+dl90ZXh0W2xhc3RfZnVs bF9ieXRlX3N0YXJ0XSA9ICcgJzsNCisrCQl9DQorKwkJYnl0ZXNfaGFuZGxlZCsrOw0KKysJCXNw YWNlX3ByaW50ZWQrKzsNCisrCQl1cysrOw0KKyAJfQ0KKy0JcmV0dXJuIChuKTsNCisrDQorKwly ZXR1cm4gKHNwYWNlX3ByaW50ZWQpOw0KKyB9DQorIA0KKyAvKg0KK0BAIC04ODgsMTEgKzk4OSwx MSBAQCBoYXNoKHN0cnVjdCB2aWRlbyAqdnApDQorIAljaGFyICAgKnM7DQorIA0KKyAJaWYgKCh2 cC0+dl9mbGFnICYgVkZIQkFEKSAhPSAwKSB7CS8qIEhhc2ggYmFkLgkJICovDQorLQkJcyA9ICZ2 cC0+dl90ZXh0W25jb2wgLSAxXTsNCistCQlmb3IgKGkgPSBuY29sOyBpICE9IDA7IC0taSwgLS1z KQ0KKysJCXMgPSAmdnAtPnZfdGV4dFtuY29sICogTUJfQ1VSX01BWCAtIDFdOw0KKysJCWZvciAo aSA9IG5jb2wgKiBNQl9DVVJfTUFYOyBpICE9IDA7IC0taSwgLS1zKQ0KKyAJCQlpZiAoKnMgIT0g JyAnKQ0KKyAJCQkJYnJlYWs7DQorLQkJbiA9IG5jb2wgLSBpOwkJCS8qIEVyYXNlIGNoZWFwZXI/ CSAqLw0KKysJCW4gPSBuY29sICogTUJfQ1VSX01BWCAtIGk7CQkJLyogRXJhc2UgY2hlYXBlcj8J ICovDQorIAkJaWYgKG4gPiB0Y2Vlb2wpDQorIAkJCW4gPSB0Y2Vlb2w7DQorIAkJdnAtPnZfY29z dCA9IGkgKyBuOwkJLyogQnl0ZXMgKyBibGFua3MuCSAqLw0KK2RpZmYgLS1naXQgYS9lY2hvLmMg Yi9lY2hvLmMNCitpbmRleCA2OTY2YzAwLi4yMmI4MzMzIDEwMDY0NA0KKy0tLSBhL2VjaG8uYw0K KysrKyBiL2VjaG8uYw0KK0BAIC04NDQsOSArODQ0LDExIEBAIGV3cHJpbnRmKGNvbnN0IGNoYXIg KmZtdCwgLi4uKQ0KKyAgKiAlayBwcmludHMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQga2V5IChh bmQgdGFrZXMgbm8gYXJndW1lbnRzKS4NCisgICogJWQgcHJpbnRzIGEgZGVjaW1hbCBpbnRlZ2Vy DQorICAqICVvIHByaW50cyBhbiBvY3RhbCBpbnRlZ2VyDQorKyAqICV4IHByaW50cyBhIGhleGFk ZWNpbWFsIGludGVnZXINCisgICogJXAgcHJpbnRzIGEgcG9pbnRlcg0KKyAgKiAlcyBwcmludHMg YSBzdHJpbmcNCisgICogJWxkIHByaW50cyBhIGxvbmcgd29yZA0KKysgKiAlbHggcHJpbnRzIGEg aGV4YWRlY2ltYWwgbG9uZyB3b3JkDQorICAqIEFueXRoaW5nIGVsc2UgaXMgZWNob2VkIHZlcmJh dGltDQorICAqLw0KKyBzdGF0aWMgdm9pZA0KK0BAIC04ODUsNiArODg3LDEwIEBAIGVmb3JtYXQo Y29uc3QgY2hhciAqZnAsIHZhX2xpc3QgYXApDQorIAkJCQllcHV0aSh2YV9hcmcoYXAsIGludCks IDgpOw0KKyAJCQkJYnJlYWs7DQorIA0KKysJCQljYXNlICd4JzoNCisrCQkJCWVwdXRpKHZhX2Fy ZyhhcCwgaW50KSwgMTYpOw0KKysJCQkJYnJlYWs7DQorKw0KKyAJCQljYXNlICdwJzoNCisgCQkJ CXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlcCIsDQorIAkJCQkgICAgdmFfYXJnKGFwLCB2 b2lkICopKTsNCitAQCAtOTAyLDYgKzkwOCw5IEBAIGVmb3JtYXQoY29uc3QgY2hhciAqZnAsIHZh X2xpc3QgYXApDQorIAkJCQljYXNlICdkJzoNCisgCQkJCQllcHV0bCh2YV9hcmcoYXAsIGxvbmcp LCAxMCk7DQorIAkJCQkJYnJlYWs7DQorKwkJCQljYXNlICd4JzoNCisrCQkJCQllcHV0bCh2YV9h cmcoYXAsIGxvbmcpLCAxNik7DQorKwkJCQkJYnJlYWs7DQorIAkJCQlkZWZhdWx0Og0KKyAJCQkJ CWVwdXRjKGMpOw0KKyAJCQkJCWJyZWFrOw0KK0BAIC05MzksNiArOTQ4LDcgQEAgc3RhdGljIHZv aWQNCisgZXB1dGwobG9uZyBsLCBpbnQgcikNCisgew0KKyAJbG9uZwkgcTsNCisrCWludAkgYzsN CisgDQorIAlpZiAobCA8IDApIHsNCisgCQllcHV0YygnLScpOw0KK0BAIC05NDYsNyArOTU2LDEw IEBAIGVwdXRsKGxvbmcgbCwgaW50IHIpDQorIAl9DQorIAlpZiAoKHEgPSBsIC8gcikgIT0gMCkN CisgCQllcHV0bChxLCByKTsNCistCWVwdXRjKChpbnQpKGwgJSByKSArICcwJyk7DQorKwljID0g KGludCkobCAlIHIpICsgJzAnOw0KKysJaWYgKGMgPiAnOScpDQorKwkJYyArPSAnYScgLSAnOScg LSAxOw0KKysJZXB1dGMoYyk7DQorIH0NCisgDQorIC8qDQorZGlmZiAtLWdpdCBhL2Z1bm1hcC5j IGIvZnVubWFwLmMNCitpbmRleCBiZDU1NWQ2Li43ZDg4Yjc1IDEwMDY0NA0KKy0tLSBhL2Z1bm1h cC5jDQorKysrIGIvZnVubWFwLmMNCitAQCAtMTE0LDYgKzExNCw3IEBAIHN0YXRpYyBzdHJ1Y3Qg ZnVubWFwIGZ1bmN0bmFtZXNbXSA9IHsNCisgCXtidWZmZXJpbnNlcnQsICJpbnNlcnQtYnVmZmVy Iix9LA0KKyAJe2ZpbGVpbnNlcnQsICJpbnNlcnQtZmlsZSIsfSwNCisgCXtmaWxsd29yZCwgImlu c2VydC13aXRoLXdyYXAiLH0sDQorKwl7aW5zZXJ0X2NoYXIsICJpbnNlcnQtY2hhciIsfSwNCisg CXtiYWNraXNlYXJjaCwgImlzZWFyY2gtYmFja3dhcmQiLH0sDQorIAl7Zm9yd2lzZWFyY2gsICJp c2VhcmNoLWZvcndhcmQiLH0sDQorIAl7am9pbmxpbmUsICJqb2luLWxpbmUiLH0sDQorQEAgLTE5 MSw2ICsxOTIsNyBAQCBzdGF0aWMgc3RydWN0IGZ1bm1hcCBmdW5jdG5hbWVzW10gPSB7DQorIAl7 c2hlbGxjb21tYW5kLCAic2hlbGwtY29tbWFuZCIsfSwNCisgCXtwaXBlcmVnaW9uLCAic2hlbGwt Y29tbWFuZC1vbi1yZWdpb24iLH0sDQorIAl7c2hyaW5rd2luZCwgInNocmluay13aW5kb3ciLH0s DQorKwl7c2hvd19yYXdfbW9kZSwgInNob3ctcmF3LW1vZGUiLH0sDQorICNpZmRlZiBOT1RBQg0K KyAJe3NwYWNlX3RvX3RhYnN0b3AsICJzcGFjZS10by10YWJzdG9wIix9LA0KKyAjZW5kaWYgLyog Tk9UQUIgKi8NCitkaWZmIC0tZ2l0IGEva2JkLmMgYi9rYmQuYw0KK2luZGV4IDFkN2ExYTIuLmY2 MTNiMTAgMTAwNjQ0DQorLS0tIGEva2JkLmMNCisrKysgYi9rYmQuYw0KK0BAIC05LDYgKzksOCBA QA0KKyAjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+DQorICNpbmNsdWRlIDxzaWduYWwuaD4NCisgI2lu Y2x1ZGUgPHN0ZGlvLmg+DQorKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisrI2luY2x1ZGUgPHdjaGFy Lmg+DQorIA0KKyAjaW5jbHVkZSAiZGVmLmgiDQorICNpbmNsdWRlICJrYmQuaCINCitAQCAtNDA2 LDYgKzQwOCw0MyBAQCBxdW90ZShpbnQgZiwgaW50IG4pDQorIH0NCisgDQorIC8qDQorKyAqIFBy b21wdCBmb3IgYSBjb2RlcG9pbnQgaW4gd2hhdGV2ZXIgdGhlIG5hdGl2ZSBzeXN0ZW0ncyBlbmNv ZGluZyBpcywNCisrICogaW5zZXJ0IGl0IGludG8gdGhlIGZpbGUNCisrICovDQorK2ludA0KKytp bnNlcnRfY2hhcihpbnQgZiwgaW50IG4pDQorK3sNCisrCWNoYXIgKmJ1ZnA7DQorKwljaGFyIGlu cGJ1ZlszMl07DQorKwl3Y2hhcl90IHdjOw0KKysJY2hhciBtYltNQl9DVVJfTUFYICsgMV07DQor KwltYnN0YXRlX3QgbWJzID0geyAwIH07DQorKwlzaXplX3QgbWJzbGVuOw0KKysJc2l6ZV90IGk7 DQorKw0KKysJaWYgKChidWZwID0gZXJlYWQoIkluc2VydCBjaGFyYWN0ZXIgKGhleCk6ICIsIGlu cGJ1Ziwgc2l6ZW9mIGlucGJ1ZiwNCisrCSAgICAgRUZORVcpKSA9PSBOVUxMKSB7DQorKwkJcmV0 dXJuIChBQk9SVCk7DQorKwl9IGVsc2UgaWYgKGJ1ZnBbMF0gPT0gJ1wwJykgew0KKysJCXJldHVy biAoRkFMU0UpOw0KKysJfQ0KKysNCisrCXdjID0gKHdjaGFyX3QpIHN0cnRvbGwoYnVmcCwgTlVM TCwgMTYpOw0KKysJbWJzbGVuID0gd2NydG9tYihtYiwgd2MsICZtYnMpOw0KKysJaWYgKG1ic2xl biA9PSAoc2l6ZV90KSAtMSkgew0KKysJCXJldHVybiAoRkFMU0UpOw0KKysJfQ0KKysNCisrCWZv ciAoaSA9IDA7IGkgPCBtYnNsZW47ICsraSkgew0KKysJCWlmIChsaW5zZXJ0KDEsIG1iW2ldKSA9 PSBGQUxTRSkgew0KKysJCQlyZXR1cm4gKEZBTFNFKTsNCisrCQl9DQorKwl9DQorKw0KKysJcmV0 dXJuIChUUlVFKTsNCisrfQ0KKysNCisrLyoNCisgICogV3JhcGVyIGZ1bmN0aW9uIHRvIGNvdW50 IGludm9jYXRpb24gcmVwZWF0cy4NCisgICogV2UgaWdub3JlIGFueSBmdW5jdGlvbiB3aG9zZSBz b2xlIHB1cnBvc2UgaXMgdG8gZ2V0IHVzDQorICAqIHRvIHRoZSBpbnRlbmRlZCBmdW5jdGlvbi4N CitkaWZmIC0tZ2l0IGEva2V5bWFwLmMgYi9rZXltYXAuYw0KK2luZGV4IGVmNzFmODQuLmFiMjMx ODIgMTAwNjQ0DQorLS0tIGEva2V5bWFwLmMNCisrKysgYi9rZXltYXAuYw0KK0BAIC0xMjAsNiAr MTIwLDIxIEBAIHN0YXRpYyBzdHJ1Y3QgS0VZTUFQRSAoMikgY1g0bWFwID0gew0KKyAJfQ0KKyB9 Ow0KKyANCisrc3RhdGljIFBGIGNYOEpbXSA9IHsNCisrCWluc2VydF9jaGFyCQkvKiBeTSAqLw0K Kyt9Ow0KKysNCisrc3RhdGljIHN0cnVjdCBLRVlNQVBFICgxKSBjWDhtYXAgPSB7DQorKwkxLA0K KysJMSwNCisrCXJlc2NhbiwNCisrCXsNCisrCQl7DQorKwkJCUNDSFIoJ00nKSwgQ0NIUignTScp LCBjWDhKLCBOVUxMDQorKwkJfQ0KKysJfQ0KKyt9Ow0KKysNCisgc3RhdGljIFBGIGNYY0JbXSA9 IHsNCisgCWxpc3RidWZmZXJzLAkJLyogXkIgKi8NCisgCXF1aXQsCQkJLyogXkMgKi8NCitAQCAt MTU4LDYgKzE3MywxMCBAQCBzdGF0aWMgUEYgY1gwW10gPSB7DQorIAlOVUxMCQkJLyogNCAqLw0K KyB9Ow0KKyANCisrc3RhdGljIFBGIGNYOFtdID0gew0KKysJTlVMTAkJCS8qIDQgKi8NCisrfTsN CisrDQorIHN0YXRpYyBQRiBjWGVxW10gPSB7DQorIAlzaG93Y3BvcwkJLyogPSAqLw0KKyB9Ow0K K0BAIC0xODksOSArMjA4LDkgQEAgc3RhdGljIFBGIGNYY2FyW10gPSB7DQorIAl1bmRvCQkJLyog dSAqLw0KKyB9Ow0KKyANCistc3RydWN0IEtFWU1BUEUgKDYpIGNYbWFwID0gew0KKy0JNiwNCist CTYsDQorK3N0cnVjdCBLRVlNQVBFICg3KSBjWG1hcCA9IHsNCisrCTcsDQorKwk3LA0KKyAJcmVz Y2FuLA0KKyAJew0KKyAJCXsNCitAQCAtMjA3LDYgKzIyNiw5IEBAIHN0cnVjdCBLRVlNQVBFICg2 KSBjWG1hcCA9IHsNCisgCQkJJzAnLCAnNCcsIGNYMCwgKEtFWU1BUCAqKSAmIGNYNG1hcA0KKyAJ CX0sDQorIAkJew0KKysJCQknOCcsICc4JywgY1g4LCAoS0VZTUFQICopICYgY1g4bWFwDQorKwkJ fSwNCisrCQl7DQorIAkJCSc9JywgJz0nLCBjWGVxLCBOVUxMDQorIAkJfSwNCisgCQl7DQorQEAg LTQ5MSw2ICs1MTMsMTggQEAgc3RhdGljIHN0cnVjdCBLRVlNQVBFICgxKSBvdmVyd21hcCA9IHsN CisgCX0NCisgfTsNCisgDQorK3N0YXRpYyBzdHJ1Y3QgS0VZTUFQRSAoMSkgcmF3bWFwID0gew0K KysJMCwNCisrCTEsCQkvKiAxIHRvIGF2b2lkIDAgc2l6ZWQgYXJyYXkgKi8NCisrCXJlc2NhbiwN CisrCXsNCisrCQkvKiB1bnVzZWQgZHVtbXkgZW50cnkgZm9yIFZNUyBDICovDQorKwkJew0KKysJ CQkoS0NIQVIpMCwgKEtDSEFSKTAsIE5VTEwsIE5VTEwNCisrCQl9DQorKwl9DQorK307DQorKw0K KyANCisgLyoNCisgICogVGhlIGJhc2ljIChyb290KSBrZXlib2FyZCBtYXANCitAQCAtNTEzLDYg KzU0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWFwc19zIG1hcF90YWJsZVtdID0gew0KKyAJeyhLRVlN QVAgKikgJm5vdGFibWFwLCAibm90YWIiLH0sDQorICNlbmRpZiAvKiBOT1RBQiAqLw0KKyAJeyhL RVlNQVAgKikgJm92ZXJ3bWFwLCAib3ZlcndyaXRlIix9LA0KKysJeyhLRVlNQVAgKikgJnJhd21h cCwgInJhdyIsfSwNCisgCXsoS0VZTUFQICopICZtZXRhbWFwLCAiZXNjIHByZWZpeCIsfSwNCisg CXsoS0VZTUFQICopICZjWG1hcCwgImMteCBwcmVmaXgiLH0sDQorIAl7KEtFWU1BUCAqKSAmY1g0 bWFwLCAiYy14IDQgcHJlZml4Iix9LA0KK2RpZmYgLS1naXQgYS9tb2Rlcy5jIGIvbW9kZXMuYw0K K2luZGV4IDAyN2E1Y2QuLjIwMTNiY2IgMTAwNjQ0DQorLS0tIGEvbW9kZXMuYw0KKysrKyBiL21v ZGVzLmMNCitAQCAtMTExLDYgKzExMSwyMyBAQCBvdmVyd3JpdGVfbW9kZShpbnQgZiwgaW50IG4p DQorIH0NCisgDQorIGludA0KKytzaG93X3Jhd19tb2RlKGludCBmLCBpbnQgbikNCisrew0KKysJ aWYgKGNoYW5nZW1vZGUoZiwgbiwgInJhdyIpID09IEZBTFNFKQ0KKysJCXJldHVybiAoRkFMU0Up Ow0KKysJaWYgKGYgJiBGRkFSRykgew0KKysJCWlmIChuIDw9IDApDQorKwkJCWN1cmJwLT5iX2Zs YWcgJj0gfkJGU0hPV1JBVzsNCisrCQllbHNlDQorKwkJCWN1cmJwLT5iX2ZsYWcgfD0gQkZTSE9X UkFXOw0KKysJfSBlbHNlDQorKwkJY3VyYnAtPmJfZmxhZyBePSBCRlNIT1dSQVc7DQorKw0KKysJ c2dhcmJmID0gVFJVRTsNCisrCXJldHVybiAoVFJVRSk7DQorK30NCisrDQorK2ludA0KKyBzZXRf ZGVmYXVsdF9tb2RlKGludCBmLCBpbnQgbikNCisgew0KKyAJaW50CSBpOw0KK0BAIC0xNzAsNSAr MTg3LDExIEBAIHNldF9kZWZhdWx0X21vZGUoaW50IGYsIGludCBuKQ0KKyAJCQlkZWZiX2ZsYWcg fD0gQkZOT1RBQjsNCisgCX0NCisgI2VuZGlmCS8qIE5PVEFCICovDQorKwlpZiAoc3RyY21wKG1v ZGVidWYsICJyYXciKSA9PSAwKSB7DQorKwkJaWYgKG4gPD0gMCkNCisrCQkJZGVmYl9mbGFnICY9 IH5CRlNIT1dSQVc7DQorKwkJZWxzZQ0KKysJCQlkZWZiX2ZsYWcgfD0gQkZTSE9XUkFXOw0KKysJ fQ0KKyAJcmV0dXJuIChUUlVFKTsNCisgfQ0KK2RpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMN CitpbmRleCA5MzU3ZDRkLi5kYmZjMDU4IDEwMDY0NA0KKy0tLSBhL3V0aWwuYw0KKysrKyBiL3V0 aWwuYw0KK0BAIC0xMyw2ICsxMyw4IEBADQorICNpbmNsdWRlIDxjdHlwZS5oPg0KKyAjaW5jbHVk ZSA8c2lnbmFsLmg+DQorICNpbmNsdWRlIDxzdGRpby5oPg0KKysjaW5jbHVkZSA8c3RkbGliLmg+ DQorKyNpbmNsdWRlIDx3Y2hhci5oPg0KKyANCisgI2luY2x1ZGUgImRlZi5oIg0KKyANCitAQCAt MzMsNiArMzUsOSBAQCBzaG93Y3BvcyhpbnQgZiwgaW50IG4pDQorIAlpbnQJIG5saW5lLCByb3c7 DQorIAlpbnQJIGNsaW5lLCBjYnl0ZTsJCS8qIEN1cnJlbnQgbGluZS9jaGFyL2J5dGUgKi8NCisg CWludAkgcmF0aW87DQorKwljaGFyCSBpc21iID0gMDsNCisrCXdjaGFyX3QJIHdjID0gMDsNCisr CWNoYXIJIG1iY1tNQl9DVVJfTUFYICsgMV07DQorIA0KKyAJLyogY29sbGVjdCB0aGUgZGF0YSAq Lw0KKyAJY2xwID0gYmZpcnN0bHAoY3VyYnApOw0KK0BAIC02OSw4ICs3NCw0MyBAQCBzaG93Y3Bv cyhpbnQgZiwgaW50IG4pDQorIAkJY2xwID0gbGZvcncoY2xwKTsNCisgCX0NCisgCXJhdGlvID0g bmNoYXIgPyAoMTAwTCAqIGNjaGFyKSAvIG5jaGFyIDogMTAwOw0KKy0JZXdwcmludGYoIkNoYXI6 ICVjICgwJW8pICBwb2ludD0lbGQoJWQlJSkgIGxpbmU9JWQgIHJvdz0lZCAgY29sPSVkIiwNCist CSAgICBjYnl0ZSwgY2J5dGUsIGNjaGFyLCByYXRpbywgY2xpbmUsIHJvdywgZ2V0Y29scG9zKGN1 cndwKSk7DQorKw0KKysJaWYgKCEoY3VyYnAtPmJfZmxhZyAmIEJGU0hPV1JBVykpIHsNCisrCQlt YnN0YXRlX3QgbWJzID0geyAwIH07DQorKwkJc2l6ZV90IGNvbnN1bWVkID0gMDsNCisrCQlzaXpl X3Qgb2Zmc2V0ID0gMDsNCisrCQl3aGlsZSAoY2J5dGUgIT0gJ1xuJyAmJiBvZmZzZXQgPD0gY3Vy d3AtPndfZG90bykgew0KKysJCQlpbnQgYyA9IGxnZXRjKGNscCwgY3Vyd3AtPndfZG90byAtIG9m ZnNldCk7DQorKwkJCWlmIChpc3ByaW50KGMpIHx8IChJU0NUUkwoYykgIT0gRkFMU0UpKSB7DQor KwkJCQlicmVhazsNCisrCQkJfQ0KKysJCQljb25zdW1lZCA9IG1icnRvd2MoJndjLA0KKysJCQkg ICAgICAgICAgICAgICAgICAgJmNscC0+bF90ZXh0W2N1cndwLT53X2RvdG8gLSBvZmZzZXRdLA0K KysJCQkgICAgICAgICAgICAgICAgICAgbGxlbmd0aChjbHApIC0gY3Vyd3AtPndfZG90byArIG9m ZnNldCwNCisrCQkJICAgICAgICAgICAgICAgICAgICZtYnMpOw0KKysJCQlpZiAoY29uc3VtZWQg PCAoc2l6ZV90KSAtMikgew0KKysJCQkJaXNtYiA9IChvZmZzZXQgPCBjb25zdW1lZCk7DQorKwkJ CQlzbnByaW50ZihtYmMsIGNvbnN1bWVkICsgMSwgIiVzIiwNCisrCQkJCSAgICAgICAgICZjbHAt PmxfdGV4dFtjdXJ3cC0+d19kb3RvIC0gb2Zmc2V0XSk7DQorKwkJCQltYmNbY29uc3VtZWQgKyAx XSA9ICdcMCc7DQorKwkJCQlicmVhazsNCisrCQkJfSBlbHNlIHsNCisrCQkJCW1lbXNldCgmbWJz LCAwLCBzaXplb2YgbWJzKTsNCisrCQkJfQ0KKysJCQlvZmZzZXQrKzsNCisrCQl9DQorKwl9DQor Kw0KKysJaWYgKGlzbWIpIHsNCisrCQlld3ByaW50ZigiQ2hhcjogJXMgKGNvZGVwb2ludCAweCVs eCkgQnl0ZTogJWMgKDAlbykgICINCisrCQkgICAgICAgICAicG9pbnQ9JWxkKCVkJSUpICBsaW5l PSVkICByb3c9JWQgY29sPSVkIiwgbWJjLA0KKysJCSAgICAgICAgIChsb25nKSB3YywgY2J5dGUs IGNieXRlLCBjY2hhciwgcmF0aW8sIGNsaW5lLCByb3csDQorKwkJICAgICAgICAgZ2V0Y29scG9z KGN1cndwKSk7DQorKwl9IGVsc2Ugew0KKysJCWV3cHJpbnRmKCJDaGFyOiAlYyAoMCVvKSAgcG9p bnQ9JWxkKCVkJSUpICBsaW5lPSVkICByb3c9JWQiDQorKwkJICAgICAgICAgImNvbD0lZCIsIGNi eXRlLCBjYnl0ZSwgY2NoYXIsIHJhdGlvLCBjbGluZSwgcm93LA0KKysJCSAgICAgICAgIGdldGNv bHBvcyhjdXJ3cCkpOw0KKysJfQ0KKyAJcmV0dXJuIChUUlVFKTsNCisgfQ0KKyANCitAQCAtOTYs NiArMTM2LDIyIEBAIGdldGNvbHBvcyhzdHJ1Y3QgbWd3aW4gKndwKQ0KKyAJCQljb2wgKz0gMjsN CisgCQllbHNlIGlmIChpc3ByaW50KGMpKSB7DQorIAkJCWNvbCsrOw0KKysJCX0gZWxzZSBpZiAo ISh3cC0+d19idWZwLT5iX2ZsYWcgJiBCRlNIT1dSQVcpKSB7DQorKwkJCW1ic3RhdGVfdCBtYnMg PSB7IDAgfTsNCisrCQkJd2NoYXJfdCB3YyA9IDA7DQorKwkJCXNpemVfdCBjb25zdW1lZCA9IG1i cnRvd2MoJndjLCAmd3AtPndfZG90cC0+bF90ZXh0W2ldLA0KKysJCQkgICAgICAgICAgICAgICAg ICAgICAgICAgIGxsZW5ndGgod3AtPndfZG90cCkgLSBpLA0KKysJCQkgICAgICAgICAgICAgICAg ICAgICAgICAgICZtYnMpOw0KKysJCQlpbnQgd2lkdGggPSAtMTsNCisrCQkJaWYgKGNvbnN1bWVk IDwgKHNpemVfdCkgLTIpIHsNCisrCQkJCXdpZHRoID0gd2N3aWR0aCh3Yyk7DQorKwkJCX0NCisr CQkJaWYgKHdpZHRoID49IDApIHsNCisrCQkJCWNvbCArPSB3aWR0aDsNCisrCQkJCWkgKz0gKGNv bnN1bWVkIC0gMSk7DQorKwkJCX0gZWxzZSB7DQorKwkJCQljb2wgKz0gc25wcmludGYodG1wLCBz aXplb2YodG1wKSwgIlxcJW8iLCBjKTsNCisrCQkJfQ0KKyAJCX0gZWxzZSB7DQorIAkJCWNvbCAr PSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiXFwlbyIsIGMpOw0KKyAJCX0NCi0tIA0KMi4x My4wDQoNCg0KDQoNCi0tLQ0KVW5zdWJzY3JpYmU6ICBhbHBpbmUtYXBvcnRzK3Vuc3Vic2NyaWJl QGxpc3RzLmFscGluZWxpbnV4Lm9yZw0KSGVscDogICAgICAgICBhbHBpbmUtYXBvcnRzK2hlbHBA bGlzdHMuYWxwaW5lbGludXgub3JnDQotLS0NCg==