Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kzIfu-0007V8-KZ for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Jan 2021 12:21:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kzIfs-00048w-W4 for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Jan 2021 12:21:24 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kzIfs-00048p-By for pgsql-hackers@lists.postgresql.org; Tue, 12 Jan 2021 12:21:24 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kzIfo-0007sU-RC for pgsql-hackers@postgresql.org; Tue, 12 Jan 2021 12:21:23 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 04D21601C0; Tue, 12 Jan 2021 21:21:18 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_58309c0496e5e00fc7e70f7ad8e85a9e" Date: Tue, 12 Jan 2021 21:21:18 +0900 From: torikoshia To: Kasahara Tatsuhito Cc: Tom Lane , Fujii Masao , Georgios Kokolatos , PostgreSQL-development Subject: Re: Get memory contexts of an arbitrary backend process In-Reply-To: <9a59401241e9269254e70c8e0ef1cc7a@oss.nttdata.com> References: <0271f440ac77f2a4180e0e56ebd944d1@oss.nttdata.com> <270ec80dbbebfb5c6f2b9fdd7a7858b5@oss.nttdata.com> <160502083340.7362.4386116585349115146.pgcf@coridan.postgresql.org> <064d510f2d33edc37dfd6b8f3b6bd30e@oss.nttdata.com> <1685539.1606959410@sss.pgh.pa.us> <83ff0aff04fffc95cbd1fc1637a0fccc@oss.nttdata.com> <28e1feb71b94ac9918830bc4a0c1844f@oss.nttdata.com> <9a59401241e9269254e70c8e0ef1cc7a@oss.nttdata.com> Message-ID: <4ae7b086a5b49fdfec7c1154d6fc7a40@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com User-Agent: Roundcube Webmail/1.1.9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_58309c0496e5e00fc7e70f7ad8e85a9e Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed v7 that fixes recent conflicts. It also changed the behavior of requestor when another requestor is already working for simplicity. In this case, v6 patch makes the requestor wait. v7 patch makes the requestor quit. Regards, -- Atsushi Torikoshi --=_58309c0496e5e00fc7e70f7ad8e85a9e Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v7-0001-Add-pg_get_target_backend_memory_contexts-to-coll.patch Content-Disposition: attachment; filename=v7-0001-Add-pg_get_target_backend_memory_contexts-to-coll.patch; size=34516 RnJvbSBmMjBlNDhkOTlmMjc3MGJmZWMyNzU4MDUxODVhYTVjZTA4NjYxZmNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMTIgSmFuIDIwMjEgMjA6NTU6NDMgKzA5MDAKU3ViamVjdDog W1BBVENIIHY3XSBBZnRlciBjb21taXQgM2U5OGMwYmFmYjI4ZGUsIHdlIGNhbiBkaXNwbGF5IHRo ZSB1c2FnZSBvZgogdGhlIG1lbW9yeSBjb250ZXh0cyB1c2luZyBwZ19iYWNrZW5kX21lbW9yeV9j b250ZXh0cyBzeXN0ZW0gdmlldy4gSG93ZXZlciwKIGl0cyB0YXJnZXQgaXMgbGltaXRlZCB0byB0 aGUgcHJvY2VzcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uLiBUaGlzCiBwYXRjaCBp bnRyb2R1Y2VzIHBnX2dldF90YXJnZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBhbmQgbWFr ZXMgaXQKIHBvc3NpYmxlIHRvIGNvbGxlY3QgbWVtb3J5IGNvbnRleHRzIG9mIHRoZSBzcGVjaWZp ZWQgcHJvY2Vzcy4KCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAg ICAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAg ICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMgICAgICAgICAgICAg IHwgICAzICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXAuYyAgICAgICAgIHwg ICAzICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgICAgICAgIHwgICAy ICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAgIHwgICA0ICsK IHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50eHQgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyAgICAgICAgICAgIHwgNzMxICsrKysrKysrKysr KysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iaW4vaW5pdGRiL2luaXRkYi5jICAgICAgICAgICAgICAgICAgICAgIHwgICAz ICstCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5wbCB8ICAgNCAr LQogc3JjL2Jpbi9wZ19yZXdpbmQvZmlsZW1hcC5jICAgICAgICAgICAgICAgICAgfCAgIDMgKwog c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgfCAgMTIgKy0KIHNy Yy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3Bnc3RhdC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS91dGlscy9tY3h0ZnVuY3MuaCAgICAgICAgICAgICAgICB8ICA0NCArKwogMTggZmlsZXMgY2hh bmdlZCwgODEwIGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL3V0aWxzL21jeHRmdW5jcy5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Zy5jCmluZGV4IGVkZTkzYWQ3ZmQuLjRjYWI0N2E2MWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3N5bmMuaCIKICNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUg InV0aWxzL21jeHRmdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsbWFwcGVyLmgiCkBAIC02 OTkzLDYgKzY5OTQsMTIgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJICovCiAJCXBnc3RhdF9yZXNl dF9hbGwoKTsKIAorCQkvKgorCQkgKiBSZXNldCBkdW1wIGZpbGVzIGluIHBnX21lbXVzYWdlLCBi ZWNhdXNlIHRhcmdldCBwcm9jZXNzZXMgZG8KKwkJICogbm90IGV4aXN0IGFueSBtb3JlLgorCQkg Ki8KKwkJUmVtb3ZlTWVtY3h0RmlsZSgwKTsKKwogCQkvKgogCQkgKiBJZiB0aGVyZSB3YXMgYSBi YWNrdXAgbGFiZWwgZmlsZSwgaXQncyBkb25lIGl0cyBqb2IgYW5kIHRoZSBpbmZvCiAJCSAqIGhh cyBub3cgYmVlbiBwcm9wYWdhdGVkIGludG8gcGdfY29udHJvbC4gIFdlIG11c3QgZ2V0IHJpZCBv ZiB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCA1ZDg5ZTc3ZGJlLi43 NDE5YzQ5NmIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5z cWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC01NTgsNyAr NTU4LDggQEAgQ1JFQVRFIFZJRVcgcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgQVMKICAgICBT RUxFQ1QgKiBGUk9NIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpOwogCiBSRVZPS0Ug QUxMIE9OIHBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIEZST00gUFVCTElDOwotUkVWT0tFIEVY RUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkgRlJPTSBQ VUJMSUM7CitSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19nZXRfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMgRlJPTSBQVUJMSUM7CitSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19nZXRf dGFyZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIEZST00gUFVCTElDOwogCiAtLSBTdGF0aXN0 aWNzIHZpZXdzCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jCmluZGV4IDNmMjRhMzNlZjEuLjhlYjJk MDYyYjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMKKysrIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQuYwpAQCAtNDA0NSw2ICs0MDQ1LDkgQEAgcGdz dGF0X2dldF93YWl0X2lwYyhXYWl0RXZlbnRJUEMgdykKIAkJY2FzZSBXQUlUX0VWRU5UX1hBQ1Rf R1JPVVBfVVBEQVRFOgogCQkJZXZlbnRfbmFtZSA9ICJYYWN0R3JvdXBVcGRhdGUiOwogCQkJYnJl YWs7CisJCWNhc2UgV0FJVF9FVkVOVF9EVU1QX01FTU9SWV9DT05URVhUOgorCQkJZXZlbnRfbmFt ZSA9ICJEdW1wTWVtb3J5Q29udGV4dCI7CisJCQlicmVhazsKIAkJCS8qIG5vIGRlZmF1bHQgY2Fz ZSwgc28gdGhhdCBjb21waWxlciB3aWxsIHdhcm4gKi8KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXAuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2Jhc2ViYWNrdXAuYwppbmRleCAwZjU0NjM1NTUwLi5jNjdlNzFkNzliIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vYmFzZWJhY2t1cC5jCkBAIC0xODQsNiArMTg0LDkgQEAgc3RhdGljIGNvbnN0IGNo YXIgKmNvbnN0IGV4Y2x1ZGVEaXJDb250ZW50c1tdID0KIAkvKiBDb250ZW50cyB6ZXJvZWQgb24g c3RhcnR1cCwgc2VlIFN0YXJ0dXBTVUJUUkFOUygpLiAqLwogCSJwZ19zdWJ0cmFucyIsCiAKKwkv KiBTa2lwIG1lbW9yeSBjb250ZXh0IGR1bXAgZmlsZXMuICovCisJInBnX21lbXVzYWdlIiwKKwog CS8qIGVuZCBvZiBsaXN0ICovCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCBm OWJiZTk3YjUwLi4xOGExZGQ1YTc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC00NSw2ICs0 NSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zaW52YWxhZHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJ1dGls cy9tY3h0ZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKIC8qIEdVQ3MgKi8K QEAgLTI2Nyw2ICsyNjgsNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQp CiAJQlRyZWVTaG1lbUluaXQoKTsKIAlTeW5jU2NhblNobWVtSW5pdCgpOwogCUFzeW5jU2htZW1J bml0KCk7CisJTWN4dER1bXBTaG1lbUluaXQoKTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggNTgzZWZhZWNmZi4uMTA2ZTEyNWNj MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMjgsNiArMjgsNyBAQAog I2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbC5oIgog I2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0ZnVuY3MuaCIK IAogLyoKICAqIFRoZSBTSUdVU1IxIHNpZ25hbCBpcyBtdWx0aXBsZXhlZCB0byBzdXBwb3J0IHNp Z25hbGluZyBtdWx0aXBsZSBldmVudApAQCAtNTY3LDYgKzU2OCw5IEBAIHByb2NzaWduYWxfc2ln dXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19C QVJSSUVSKSkKIAkJSGFuZGxlUHJvY1NpZ25hbEJhcnJpZXJJbnRlcnJ1cHQoKTsKIAorCWlmIChD aGVja1Byb2NTaWduYWwoUFJPQ1NJR19EVU1QX01FTUNYVCkpCisJCUhhbmRsZVByb2NTaWduYWxE dW1wTWVtb3J5Q29udGV4dCgpOworCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JFQ09W RVJZX0NPTkZMSUNUX0RBVEFCQVNFKSkKIAkJUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQUk9D U0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9sd2xvY2tuYW1lcy50eHQKaW5kZXggNzc0MjkyZmQ5NC4uNmI0ZmY2ZjA4YiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dAorKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0CkBAIC01MywzICs1Myw0IEBAIFhhY3RU cnVuY2F0aW9uTG9jawkJCQkJNDQKICMgNDUgd2FzIFhhY3RUcnVuY2F0aW9uTG9jayB1bnRpbCBy ZW1vdmFsIG9mIEJhY2tlbmRSYW5kb21Mb2NrCiBXcmFwTGltaXRzVmFjdXVtTG9jawkJCQk0Ngog Tm90aWZ5UXVldWVUYWlsTG9jawkJCQkJNDcKK01jeHREdW1wTG9jawkJCQkJNDgKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwppbmRleCAyODA1NTY4MGFhLi45ODYyMjVlODAyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC03 Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInRjb3Av dXRpbGl0eS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxz L21jeHRmdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgpAQCAtNTQwLDYgKzU0 MSwxMCBAQCBQcm9jZXNzQ2xpZW50UmVhZEludGVycnVwdChib29sIGJsb2NrZWQpCiAJCS8qIFBy b2Nlc3Mgbm90aWZ5IGludGVycnVwdHMsIGlmIGFueSAqLwogCQlpZiAobm90aWZ5SW50ZXJydXB0 UGVuZGluZykKIAkJCVByb2Nlc3NOb3RpZnlJbnRlcnJ1cHQoKTsKKworCQkvKiBQcm9jZXNzIG1l bW9yeSBjb250ZXh0cyBkdW1wIGludGVycnVwdHMsIGlmIGFueSAqLworCQlpZiAoUHJvY1NpZ25h bER1bXBNZW1vcnlDb250ZXh0UGVuZGluZykKKwkJCVByb2Nlc3NEdW1wTWVtb3J5Q29udGV4dElu dGVycnVwdCgpOwogCX0KIAllbHNlIGlmIChQcm9jRGllUGVuZGluZykKIAl7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbWN4dGZ1bmNzLmMKaW5kZXggYzAyZmE0NzU1MC4uNzFhZmVmMDkwNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9tY3h0ZnVuY3MuYwpAQCAtMTUsMzAgKzE1LDEwMCBAQAogCiAjaW5jbHVkZSAicG9zdGdy ZXMuaCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNp bmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgInBnc3Rh dC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5o IgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5 LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9z aG1lbS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbWN4 dGZ1bmNzLmgiCisKKy8qIFRoZSBtYXggYnl0ZXMgZm9yIHNob3dpbmcgbmFtZXMgYW5kIGlkZW50 aWZpZXJzIG9mIE1lbW9yeUNvbnRleHQuICovCisjZGVmaW5lIE1FTU9SWV9DT05URVhUX0RJU1BM QVlfU0laRQkxMDI0CisKKy8qIE51bWJlciBvZiBjb2x1bW5zIGluIHBnX2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzIHZpZXcgKi8KKyNkZWZpbmUgUEdfR0VUX0JBQ0tFTkRfTUVNT1JZX0NPTlRFWFRT X0NPTFMJOQorCisvKiBTaGFyZWQgbWVtb3J5IHN0cnVjdCBmb3IgbWFuYWdpbmcgdGhlIHN0YXR1 cyBvZiBtZW1vcnkgY29udGV4dCBkdW1wLiAqLworc3RhdGljIG1jeHRkdW1wU2htZW1TdHJ1Y3Qg Km1jeHRkdW1wU2htZW0gPSAgTlVMTDsKIAotLyogLS0tLS0tLS0tLQotICogVGhlIG1heCBieXRl cyBmb3Igc2hvd2luZyBpZGVudGlmaWVycyBvZiBNZW1vcnlDb250ZXh0LgotICogLS0tLS0tLS0t LQorLyoKKyAqIE1jeHRSZXFDbGVhbnVwCisgKgkJRXJyb3IgY2xlYW51cCBjYWxsYmFjayBmb3Ig bWVtb3J5IGNvbnRleHQgcmVxdWVzdG9yLgogICovCi0jZGVmaW5lIE1FTU9SWV9DT05URVhUX0lE RU5UX0RJU1BMQVlfU0laRQkxMDI0CitzdGF0aWMgdm9pZAorTWN4dFJlcUNsZWFudXAoaW50IGNv ZGUsIERhdHVtIGFyZykKK3sKKwlpbnQJCWRzdF9waWQgPSBEYXR1bUdldEludDMyKGFyZyk7CisK KwlMV0xvY2tBY3F1aXJlKE1jeHREdW1wTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWlmIChtY3h0 ZHVtcFNobWVtLT5zcmNfcGlkICE9IE15UHJvY1BpZCkKKwl7CisJCS8qCisJCSAqIElmIHRoZSBy ZXF1ZXN0b3IgaXMgbm90IG1lLCBzaW1wbHkgZXhpdC4KKwkJICovCisJCUxXTG9ja1JlbGVhc2Uo TWN4dER1bXBMb2NrKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChtY3h0ZHVtcFNobWVtLT5kdW1w X3N0YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19SRVFVRVNUSU5HKQorCXsKKwkJLyoKKwkJICogU2lu Y2UgdGhlIGR1bXBlciBoYXMgbm90IHJlY2VpdmVkIHRoZSBkdW1wIG9yZGVyIHlldCwgY2xlYW4g dXAKKwkJICogdGhpbmdzIGJ5IG15c2VsZi4KKwkJICovCisJCW1jeHRkdW1wU2htZW0tPmRzdF9w aWQgPSAwOworCQltY3h0ZHVtcFNobWVtLT5zcmNfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+ ZHVtcF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRVU19BQ0NFUFRBQkxFOworCX0KKwllbHNlIGlmICht Y3h0ZHVtcFNobWVtLT5kdW1wX3N0YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19EVU1QSU5HKQorCXsK KwkJLyoKKwkJICogU2luY2UgdGhlIGR1bXBlciBoYXMgcmVjZWl2ZWQgdGhlIHJlcXVlc3QgYWxy ZWFkeSwKKwkJICogcmVxdWVzdG9yIGp1c3QgY2hhbmdlIHRoZSBzdGF0dXMgYW5kIHRoZSBkdW1w ZXIgY2xlYW5zIHVwCisJCSAqIHRoaW5ncyBsYXRlci4KKwkJICovCisJCW1jeHRkdW1wU2htZW0t PmR1bXBfc3RhdHVzID0gTUNYVERVTVBTVEFUVVNfQ0FOQ0VMSU5HOworCX0KKwllbHNlIGlmICht Y3h0ZHVtcFNobWVtLT5kdW1wX3N0YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19ET05FKQorCXsKKwkJ LyoKKwkJICogU2luY2UgdGhlIGR1bXBlciBoYXMgYWxyZWFkeSBmaW5pc2hlZCBkdW1waW5nLCBj bGVhbiB1cCB0aGluZ3MKKwkJICogYnkgbXlzZWxmLgorCQkgKi8KKwkJbWN4dGR1bXBTaG1lbS0+ ZHN0X3BpZCA9IDA7CisJCW1jeHRkdW1wU2htZW0tPnNyY19waWQgPSAwOworCQltY3h0ZHVtcFNo bWVtLT5kdW1wX3N0YXR1cyA9IE1DWFREVU1QU1RBVFVTX0FDQ0VQVEFCTEU7CisKKwkJUmVtb3Zl TWVtY3h0RmlsZShkc3RfcGlkKTsKKwl9CisJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExvY2spOwor fQogCiAvKgogICogUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUKICAqCQlPbmUgcmVj dXJzaW9uIGxldmVsIGZvciBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMuCisgKgorICog Tm90ZTogV2hlbiBmcG91dCBpcyBub3QgTlVMTCwgZmVycm9yKCkgY2hlY2sgbXVzdCBiZSBkb25l IGJ5IHRoZSBjYWxsZXIuCiAgKi8KIHN0YXRpYyB2b2lkCiBQdXRNZW1vcnlDb250ZXh0c1N0YXRz VHVwbGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAogCQkJCQkJCQlUdXBsZURlc2Mg dHVwZGVzYywgTWVtb3J5Q29udGV4dCBjb250ZXh0LAotCQkJCQkJCQljb25zdCBjaGFyICpwYXJl bnQsIGludCBsZXZlbCkKKwkJCQkJCQkJY29uc3QgY2hhciAqcGFyZW50LCBpbnQgbGV2ZWwsIEZJ TEUgKmZwb3V0KQogewotI2RlZmluZSBQR19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09M Uwk5Ci0KIAlEYXR1bQkJdmFsdWVzW1BHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhUU19DT0xT XTsKIAlib29sCQludWxsc1tQR19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MU107CisJ Y2hhcgkJY2xpcHBlZF9pZGVudFtNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkVdOwogCU1lbW9y eUNvbnRleHRDb3VudGVycyBzdGF0OwogCU1lbW9yeUNvbnRleHQgY2hpbGQ7CiAJY29uc3QgY2hh ciAqbmFtZTsKQEAgLTc0LDE0ICsxNDQsMTIgQEAgUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxl U3RvcmUoVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKIAlpZiAoaWRlbnQpCiAJewogCQlpbnQJ CWlkbGVuID0gc3RybGVuKGlkZW50KTsKLQkJY2hhcgkJY2xpcHBlZF9pZGVudFtNRU1PUllfQ09O VEVYVF9JREVOVF9ESVNQTEFZX1NJWkVdOwotCiAJCS8qCiAJCSAqIFNvbWUgaWRlbnRpZmllcnMg c3VjaCBhcyBTUUwgcXVlcnkgc3RyaW5nIGNhbiBiZSB2ZXJ5IGxvbmcsCiAJCSAqIHRydW5jYXRl IG92ZXJzaXplIGlkZW50aWZpZXJzLgogCQkgKi8KLQkJaWYgKGlkbGVuID49IE1FTU9SWV9DT05U RVhUX0lERU5UX0RJU1BMQVlfU0laRSkKLQkJCWlkbGVuID0gcGdfbWJjbGlwbGVuKGlkZW50LCBp ZGxlbiwgTUVNT1JZX0NPTlRFWFRfSURFTlRfRElTUExBWV9TSVpFIC0gMSk7CisJCWlmIChpZGxl biA+PSBNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkUpCisJCQlpZGxlbiA9IHBnX21iY2xpcGxl bihpZGVudCwgaWRsZW4sIE1FTU9SWV9DT05URVhUX0RJU1BMQVlfU0laRSAtIDEpOwogCiAJCW1l bWNweShjbGlwcGVkX2lkZW50LCBpZGVudCwgaWRsZW4pOwogCQljbGlwcGVkX2lkZW50W2lkbGVu XSA9ICdcMCc7CkBAIC0xMDEsMTggKzE2OSwyMDMgQEAgUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1 cGxlU3RvcmUoVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKIAl2YWx1ZXNbNl0gPSBJbnQ2NEdl dERhdHVtKHN0YXQuZnJlZXNwYWNlKTsKIAl2YWx1ZXNbN10gPSBJbnQ2NEdldERhdHVtKHN0YXQu ZnJlZWNodW5rcyk7CiAJdmFsdWVzWzhdID0gSW50NjRHZXREYXR1bShzdGF0LnRvdGFsc3BhY2Ug LSBzdGF0LmZyZWVzcGFjZSk7Ci0JdHVwbGVzdG9yZV9wdXR2YWx1ZXModHVwc3RvcmUsIHR1cGRl c2MsIHZhbHVlcywgbnVsbHMpOworCisJLyoKKwkgKiBTaW5jZSBwZ19nZXRfYmFja2VuZF9tZW1v cnlfY29udGV4dHMoKSBpcyBjYWxsZWQgZnJvbSBsb2NhbCBwcm9jZXNzLAorCSAqIHNpbXBseSBw dXQgdHVwbGVzLgorCSAqLworCWlmKGZwb3V0ID09IE5VTEwpCisJCXR1cGxlc3RvcmVfcHV0dmFs dWVzKHR1cHN0b3JlLCB0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsKKworCS8qCisJICogV3JpdGUg b3V0IHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0IGluZm9ybWF0aW9uIGluIHRoZSBmb3JtIG9m CisJICogImtleTogdmFsdWUiIHBhaXJzIHRvIHRoZSBmaWxlIHNwZWNpZmllZCBieSB0aGUgcmVx dWVzdG9yLgorCSAqLworCWVsc2UKKwl7CisJCS8qCisJCSAqIE1ha2UgZWFjaCBtZW1vcnkgY29u dGV4dCBpbmZvcm1hdGlvbiBzdGFydHMgd2l0aCAnRCcuCisJCSAqIFRoaXMgaXMgY2hlY2tlZCBi eSB0aGUgcmVxdWVzdG9yIHdoZW4gcmVhZGluZyB0aGUgZmlsZS4KKwkJICovCisJCWZwdXRjKCdE JywgZnBvdXQpOworCisJCWZwcmludGYoZnBvdXQsCisJCQkibmFtZTogJXMsIGlkZW50OiAlcywg cGFyZW50OiAlcywgbGV2ZWw6ICVkLCB0b3RhbF9ieXRlczogJWx1LCBcCisJCQl0b3RhbF9uYmxv Y2tzOiAlbHUsIGZyZWVfYnl0ZXM6ICVsdSwgZnJlZV9jaHVua3M6ICVsdSwgdXNlZF9ieXRlczog JWx1LFxuIiwKKwkJCW5hbWUsCisJCQlpZGVudCA/IGNsaXBwZWRfaWRlbnQgOiAibm9uZSIsCisJ CQlwYXJlbnQgPyBwYXJlbnQgOiAibm9uZSIsIGxldmVsLAorCQkJc3RhdC50b3RhbHNwYWNlLAor CQkJc3RhdC5uYmxvY2tzLAorCQkJc3RhdC5mcmVlc3BhY2UsCisJCQlzdGF0LmZyZWVjaHVua3Ms CisJCQlzdGF0LnRvdGFsc3BhY2UgLSBzdGF0LmZyZWVzcGFjZSk7CisJfQogCiAJZm9yIChjaGls ZCA9IGNvbnRleHQtPmZpcnN0Y2hpbGQ7IGNoaWxkICE9IE5VTEw7IGNoaWxkID0gY2hpbGQtPm5l eHRjaGlsZCkKIAl7CiAJCVB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKHR1cHN0b3Jl LCB0dXBkZXNjLAotCQkJCQkJCQkgIGNoaWxkLCBuYW1lLCBsZXZlbCArIDEpOworCQkJCQkJCQkg IGNoaWxkLCBuYW1lLCBsZXZlbCArIDEsIGZwb3V0KTsKIAl9CiB9CiAKKy8qCisgKiBTZXR1cE1j eHRkdW1wU2hlbQorICogCQlTZXR1cCBzaGFyZWQgbWVtb3J5IHN0cnVjdCBmb3IgZHVtcGluZyBz cGVjaWZpZWQgUElELgorICovCitzdGF0aWMgYm9vbAorU2V0dXBNY3h0ZHVtcFNobWVtKGludCBw aWQpCit7CisJLyoKKwkgKiBXZSBvbmx5IGFsbG93IG9uZSBzZXNzaW9uIHBlciB0YXJnZXQgcHJv Y2VzcyB0byByZXF1ZXN0IG1lbW9yeQorCSAqIGNvbnRleHRzIGR1bXAgYXQgYSB0aW1lLgorCSAq LworCUxXTG9ja0FjcXVpcmUoTWN4dER1bXBMb2NrLCBMV19FWENMVVNJVkUpOworCisJaWYgKG1j eHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID09IE1DWFREVU1QU1RBVFVTX0FDQ0VQVEFCTEUpCisJ eworCQltY3h0ZHVtcFNobWVtLT5kdW1wX3N0YXR1cyA9IE1DWFREVU1QU1RBVFVTX1JFUVVFU1RJ Tkc7CisJCW1jeHRkdW1wU2htZW0tPnNyY19waWQgPSBNeVByb2NQaWQ7CisJCW1jeHRkdW1wU2ht ZW0tPmRzdF9waWQgPSBwaWQ7CisKKwkJLyoKKwkJICogRHVtcCBmaWxlcyBzaG91bGQgbm90IGV4 aXN0IG5vdywgYnV0IGRlbGV0ZSBhbnkgb2YKKwkJICogdGhlbSBqdXN0IGluIGNhc2UuCisJCSAq CisJCSAqIE5vdGU6IFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBvbmx5IG9uZSBzZXNzaW9uIGNh bgorCQkgKiByZXF1ZXN0IG1lbW9yeSBjb250ZXh0cyBwZXIgaW5zdGFuY2UuCisJCSAqLworCQlS ZW1vdmVNZW1jeHRGaWxlKDApOworCisJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBMb2NrKTsKKwor CQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExv Y2spOworCisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJPbmx5IG9uZSBzZXNzaW9u IGNhbiBkdW1wIGF0IGEgdGltZSBhbmQgYW5vdGhlciBzZXNzaW9uIGlzIGR1bXBpbmcgY3VycmVu dGx5LiIpKSk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyoKKyAqIFB1dER1bXBlZFZh bHVlc09uVHVwbGVzdG9yZQorICoJCVJlYWQgc3BlY2lmaWVkIG1lbW9yeSBjb250ZXh0IGR1bXAg ZmlsZSBhbmQgcHV0IGl0cyB2YWx1ZXMKKyAqCQlvbiB0aGUgdHVwbGVzdG9yZS4KKyAqLworc3Rh dGljIHZvaWQKK1B1dER1bXBlZFZhbHVlc09uVHVwbGVzdG9yZShjaGFyICpkdW1wZmlsZSwgVHVw bGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKKwkJCQkJCQkJVHVwbGVEZXNjIHR1cGRlc2MsIGludCBw aWQpCit7CisJRklMRQkgCSpmcGluOworCWludAkJZm9ybWF0X2lkOworCisJaWYgKChmcGluID0g QWxsb2NhdGVGaWxlKGR1bXBmaWxlLCAiciIpKSA9PSBOVUxMKQorCXsKKwkJaWYgKGVycm5vICE9 IEVOT0VOVCkKKwkJCWVyZXBvcnQoTE9HLCAoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJ CQllcnJtc2coImNvdWxkIG5vdCBvcGVuIG1lbW9yeSBjb250ZXh0IGR1bXAgZmlsZSBcIiVzXCI6 ICVtIiwKKwkJCQkJZHVtcGZpbGUpKSk7CisJfQorCisJLyogVmVyaWZ5IGl0J3Mgb2YgdGhlIGV4 cGVjdGVkIGZvcm1hdC4gKi8KKwlpZiAoZnJlYWQoJmZvcm1hdF9pZCwgMSwgc2l6ZW9mKGZvcm1h dF9pZCksIGZwaW4pICE9IHNpemVvZihmb3JtYXRfaWQpIHx8CisJCWZvcm1hdF9pZCAhPSBQR19N Q1hUX0ZJTEVfRk9STUFUX0lEKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2co ImNvcnJ1cHRlZCBtZW1vcnkgY29udGV4dCBkdW1wIGZpbGUgXCIlc1wiIiwgZHVtcGZpbGUpKSk7 CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBSZWFkIGR1bXAgZmlsZSBhbmQgcHV0IHZhbHVlcyBv biB0dXBsZSBzdG9yZS4gKi8KKwl3aGlsZSAodHJ1ZSkKKwl7CisJCURhdHVtCQl2YWx1ZXNbUEdf R0VUX0JBQ0tFTkRfTUVNT1JZX0NPTlRFWFRTX0NPTFNdOworCQlib29sCQludWxsc1tQR19HRVRf QkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MU107CisJCWNoYXIgCQluYW1lW01FTU9SWV9DT05U RVhUX0RJU1BMQVlfU0laRV07CisJCWNoYXIgCQlwYXJlbnRbTUVNT1JZX0NPTlRFWFRfRElTUExB WV9TSVpFXTsKKwkJY2hhciAJCWNsaXBwZWRfaWRlbnRbTUVNT1JZX0NPTlRFWFRfRElTUExBWV9T SVpFXTsKKwkJaW50IAkJbGV2ZWw7CisJCVNpemUJdG90YWxfYnl0ZXM7CisJCVNpemUJdG90YWxf bmJsb2NrczsKKwkJU2l6ZQlmcmVlX2J5dGVzOworCQlTaXplCWZyZWVfY2h1bmtzOworCQlTaXpl CXVzZWRfYnl0ZXM7CisKKwkJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOworCQlt ZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOworCisJCXN3aXRjaCAoZmdldGMoZnBpbikp CisJCXsKKwkJCS8qICdEJwlBIG1lbW9yeSBjb250ZXh0IGluZm9ybWF0aW9uIGZvbGxvd3MgKi8K KwkJCWNhc2UgJ0QnOgorCQkJCWlmIChmc2NhbmYoZnBpbiwgIm5hbWU6ICUxMDIzW14sXSwgaWRl bnQ6ICUxMDIzW14sXSwgcGFyZW50OiAlMTAyM1teLF0sIFwKKwkJCQkJbGV2ZWw6ICVkLCB0b3Rh bF9ieXRlczogJWx1LCB0b3RhbF9uYmxvY2tzOiAlbHUsIFwKKwkJCQkJZnJlZV9ieXRlczogJWx1 LCBmcmVlX2NodW5rczogJWx1LCB1c2VkX2J5dGVzOiAlbHUsXG4iLAorCQkJCQluYW1lLCBjbGlw cGVkX2lkZW50LCBwYXJlbnQsICZsZXZlbCwgJnRvdGFsX2J5dGVzLCAmdG90YWxfbmJsb2NrcywK KwkJCQkJCSZmcmVlX2J5dGVzLCAmZnJlZV9jaHVua3MsICZ1c2VkX2J5dGVzKQorCQkJCQkhPSBQ R19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MUykKKwkJCQl7CisJCQkJCWVyZXBvcnQo V0FSTklORywKKwkJCQkJCShlcnJtc2coImNvcnJ1cHRlZCBtZW1vcnkgY29udGV4dCBkdW1wIGZp bGUgXCIlc1wiIiwKKwkJCQkJCQlkdW1wZmlsZSkpKTsKKwkJCQkJZ290byBkb25lOworCQkJCX0K KworCQkJCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0obmFtZSk7CisKKwkJCQlpZiAo c3RyY21wKGNsaXBwZWRfaWRlbnQsICJub25lIikpCisJCQkJCXZhbHVlc1sxXSA9IENTdHJpbmdH ZXRUZXh0RGF0dW0oY2xpcHBlZF9pZGVudCk7CisJCQkJZWxzZQorCQkJCQludWxsc1sxXSA9IHRy dWU7CisKKwkJCQlpZiAoc3RyY21wKHBhcmVudCwgIm5vbmUiKSkKKwkJCQkJdmFsdWVzWzJdID0g Q1N0cmluZ0dldFRleHREYXR1bShwYXJlbnQpOworCQkJCWVsc2UKKwkJCQkJbnVsbHNbMl0gPSB0 cnVlOworCisJCQkJdmFsdWVzWzNdID0gSW50MzJHZXREYXR1bShsZXZlbCk7CisJCQkJdmFsdWVz WzRdID0gSW50NjRHZXREYXR1bSh0b3RhbF9ieXRlcyk7CisJCQkJdmFsdWVzWzVdID0gSW50NjRH ZXREYXR1bSh0b3RhbF9uYmxvY2tzKTsKKwkJCQl2YWx1ZXNbNl0gPSBJbnQ2NEdldERhdHVtKGZy ZWVfYnl0ZXMpOworCQkJCXZhbHVlc1s3XSA9IEludDY0R2V0RGF0dW0oZnJlZV9jaHVua3MpOwor CQkJCXZhbHVlc1s4XSA9IEludDY0R2V0RGF0dW0odXNlZF9ieXRlcyk7CisKKwkJCQl0dXBsZXN0 b3JlX3B1dHZhbHVlcyh0dXBzdG9yZSwgdHVwZGVzYywgdmFsdWVzLCBudWxscyk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgJ0UnOgorCQkJCWdvdG8gZG9uZTsKKworCQkJZGVmYXVsdDoKKwkJCQll cmVwb3J0KFdBUk5JTkcsCisJCQkJCQkoZXJybXNnKCJjb3JydXB0ZWQgbWVtb3J5IGNvbnRleHQg ZHVtcCBmaWxlIFwiJXNcIiIsCisJCQkJCQkJZHVtcGZpbGUpKSk7CisJCQkJZ290byBkb25lOwor CQl9CisJfQorZG9uZToKKwlGcmVlRmlsZShmcGluKTsKKwl1bmxpbmsoZHVtcGZpbGUpOworCisJ TFdMb2NrQWNxdWlyZShNY3h0RHVtcExvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwlBc3NlcnQobWN4 dGR1bXBTaG1lbS0+c3JjX3BpZCA9PSBNeVByb2NQaWQpOworCisJbWN4dGR1bXBTaG1lbS0+ZHN0 X3BpZCA9IDA7CisJbWN4dGR1bXBTaG1lbS0+c3JjX3BpZCA9IDA7CisJbWN4dGR1bXBTaG1lbS0+ ZHVtcF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRVU19BQ0NFUFRBQkxFOworCisJTFdMb2NrUmVsZWFz ZShNY3h0RHVtcExvY2spOworfQorCiAvKgogICogcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzCi0gKgkJU1FMIFNSRiBzaG93aW5nIGJhY2tlbmQgbWVtb3J5IGNvbnRleHQuCisgKgkJU1FM IFNSRiBzaG93aW5nIGxvY2FsIGJhY2tlbmQgbWVtb3J5IGNvbnRleHQuCiAgKi8KIERhdHVtCiBw Z19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKQEAgLTE0OCwx MCArNDAxLDQ1OCBAQCBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05f QVJHUykKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKIAlQdXRNZW1vcnlD b250ZXh0c1N0YXRzVHVwbGVTdG9yZSh0dXBzdG9yZSwgdHVwZGVzYywKLQkJCQkJCQkJVG9wTWVt b3J5Q29udGV4dCwgTlVMTCwgMCk7CisJCQkJCQkJVG9wTWVtb3J5Q29udGV4dCwgIiIsIDAsIE5V TEwpOworCisJLyogY2xlYW4gdXAgYW5kIHJldHVybiB0aGUgdHVwbGVzdG9yZSAqLworCXR1cGxl c3RvcmVfZG9uZXN0b3JpbmcodHVwc3RvcmUpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKwor LyoKKyAqIHBnX2dldF90YXJnZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMKKyAqCQlTUUwgU1JG IHNob3dpbmcgc3BlY2lmaWVkIHByb2Nlc3MncyBiYWNrZW5kIG1lbW9yeSBjb250ZXh0LgorICov CitEYXR1bQorcGdfZ2V0X3RhcmdldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElP Tl9BUkdTKQoreworCWludAkJZHN0X3BpZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKKworCVJldHVy blNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsK KwlUdXBsZURlc2MJdHVwZGVzYzsKKwlUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlOworCU1lbW9y eUNvbnRleHQgcGVyX3F1ZXJ5X2N0eDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY2hh cgkJZHVtcGZpbGVbTUFYUEdQQVRIXTsKKwlQR1BST0MJIAkqcHJvYzsKKwlQZ0JhY2tlbmRTdGF0 dXMgKmJlZW50cnk7CisKKwlpZiAoZHN0X3BpZCA9PSBNeVByb2NQaWQpCisJeworCQlwZ19nZXRf YmFja2VuZF9tZW1vcnlfY29udGV4dHMoZmNpbmZvKTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9 CisKKwlzbnByaW50ZihkdW1wZmlsZSwgc2l6ZW9mKGR1bXBmaWxlKSwgIiVzLyVkIiwgUEdfTUVN VVNBR0VfRElSLCBkc3RfcGlkKTsKKworCS8qIGNoZWNrIHRvIHNlZSBpZiBjYWxsZXIgc3VwcG9y dHMgdXMgcmV0dXJuaW5nIGEgdHVwbGVzdG9yZSAqLworCWlmIChyc2luZm8gPT0gTlVMTCB8fCAh SXNBKHJzaW5mbywgUmV0dXJuU2V0SW5mbykpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coInNldC12YWx1 ZWQgZnVuY3Rpb24gY2FsbGVkIGluIGNvbnRleHQgdGhhdCBjYW5ub3QgYWNjZXB0IGEgc2V0Iikp KTsKKwlpZiAoIShyc2luZm8tPmFsbG93ZWRNb2RlcyAmIFNGUk1fTWF0ZXJpYWxpemUpKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKKwkJCQkgZXJybXNnKCJtYXRlcmlhbGl6ZSBtb2RlIHJlcXVpcmVkLCBidXQgaXQgaXMgbm90 IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0IikpKTsKKworCS8qIEJ1aWxkIGEgdHVwbGUgZGVzY3Jp cHRvciBmb3Igb3VyIHJlc3VsdCB0eXBlICovCisJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBlKGZj aW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKKwkJZWxvZyhFUlJP UiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOworCisJcGVyX3F1ZXJ5X2N0eCA9 IHJzaW5mby0+ZWNvbnRleHQtPmVjeHRfcGVyX3F1ZXJ5X21lbW9yeTsKKwlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9xdWVyeV9jdHgpOworCisJdHVwc3RvcmUgPSB0dXBs ZXN0b3JlX2JlZ2luX2hlYXAodHJ1ZSwgZmFsc2UsIHdvcmtfbWVtKTsKKwlyc2luZm8tPnJldHVy bk1vZGUgPSBTRlJNX01hdGVyaWFsaXplOworCXJzaW5mby0+c2V0UmVzdWx0ID0gdHVwc3RvcmU7 CisJcnNpbmZvLT5zZXREZXNjID0gdHVwZGVzYzsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgdGFyZ2V0IHByb2Nlc3Mg aXMgUG9zdGdyZVNRTCBiYWNrZW5kIHByb2Nlc3MuCisJICovCisJcHJvYyA9IEJhY2tlbmRQaWRH ZXRQcm9jKGRzdF9waWQpOworCisJaWYgKHByb2MgPT0gTlVMTCkKKwl7CisJCXByb2MgPSBBdXhp bGlhcnlQaWRHZXRQcm9jKGRzdF9waWQpOworCisJCWlmIChwcm9jID09IE5VTEwpCisJCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygiUElEICVkIGlzIG5vdCBhIFBvc3RncmVTUUwgc2Vy dmVyIHByb2Nlc3MuIiwgZHN0X3BpZCkpKTsKKwkJZWxzZQorCQkJZXJlcG9ydChXQVJOSU5HLAor CQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIGJhY2tlbmQgcHJvY2VzcyBi dXQgYW4gYXV4aWxpYXJ5IHByb2Nlc3MuIiwgZHN0X3BpZCkpKTsKKworCQl0dXBsZXN0b3JlX2Rv bmVzdG9yaW5nKHR1cHN0b3JlKTsKKwkJcmV0dXJuIChEYXR1bSkgMTsKKwl9CisKKwliZWVudHJ5 ID0gcGdzdGF0X2ZldGNoX3N0YXRfYmVlbnRyeShwcm9jLT5iYWNrZW5kSWQpOworCisJaWYgKGJl ZW50cnktPnN0X2JhY2tlbmRUeXBlICE9IEJfQkFDS0VORCkKKwl7CisJCWVyZXBvcnQoV0FSTklO RywKKwkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdyZVNRTCBiYWNrZW5kIHByb2Nl c3MiLCBkc3RfcGlkKSkpOworCisJCXR1cGxlc3RvcmVfZG9uZXN0b3JpbmcodHVwc3RvcmUpOwor CQlyZXR1cm4gKERhdHVtKSAxOworCX0KKworCS8qCisJICogVGhlIEVOU1VSRSBzdHVmZiBlbnN1 cmVzIHdlIGNsZWFuIHVwIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdCBhbmQgZmlsZXMKKwkgKiBv biBmYWlsdXJlLgorCSAqLworCVBHX0VOU1VSRV9FUlJPUl9DTEVBTlVQKE1jeHRSZXFDbGVhbnVw LCAoRGF0dW0pIEludDMyR2V0RGF0dW0oZHN0X3BpZCkpOworCXsKKwkJaWYoIVNldHVwTWN4dGR1 bXBTaG1lbShkc3RfcGlkKSkKKwkJeworCQkJLyogU29tZW9uZSB1c2VzIG1jeHRkdW1wU2htZW0s IHNpbXBseSBleGl0LiAqLworCQkJdHVwbGVzdG9yZV9kb25lc3RvcmluZyh0dXBzdG9yZSk7CisJ CQlyZXR1cm4gKERhdHVtKSAxOworCQl9CisKKwkJU2VuZFByb2NTaWduYWwoZHN0X3BpZCwgUFJP Q1NJR19EVU1QX01FTUNYVCwgSW52YWxpZEJhY2tlbmRJZCk7CisKKwkJLyogV2FpdCB1bnRpbCB0 YXJnZXQgcHJvY2VzcyBmaW5pc2hlcyBkdW1waW5nIGZpbGUuICovCisJCWZvciAoOzspCisJCXsK KwkJCS8qIENoZWNrIGZvciBkdW1wIGNhbmNlbCByZXF1ZXN0LiAqLworCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKKworCQkJLyogTXVzdCByZXNldCB0aGUgbGF0Y2ggYmVmb3JlIHRlc3Rpbmcg c3RhdGUuICovCisJCQlSZXNldExhdGNoKE15TGF0Y2gpOworCisJCQlMV0xvY2tBY3F1aXJlKE1j eHREdW1wTG9jaywgTFdfU0hBUkVEKTsKKworCQkJaWYgKG1jeHRkdW1wU2htZW0tPnNyY19waWQg IT0gTXlQcm9jUGlkKQorCQkJeworCQkJCS8qCisJCQkJICogSXQgc2VlbXMgdGhlIGR1bXBlciBl eGl0ZWQgYW5kIHN1YnNlcXVlbnRseSBhbm90aGVyCisJCQkJICogcHJvY2VzcyBpcyByZXF1ZXN0 aW5nIGR1bXBpbmcuCisJCQkJICovCisJCQkJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExvY2spOwor CisJCQkJZXJlcG9ydChJTkZPLAorCQkJCQkoZXJybXNnKCJUaGUgcmVxdWVzdCBoYXMgZmFpbGVk IGFuZCBub3cgUElEICVkIGlzIHJlcXVzdGluZyBkdW1waW5nLiIsCisJCQkJCQltY3h0ZHVtcFNo bWVtLT5zcmNfcGlkKSkpOworCisJCQkJdHVwbGVzdG9yZV9kb25lc3RvcmluZyh0dXBzdG9yZSk7 CisKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJfQorCQkJZWxzZSBpZiAobWN4dGR1bXBTaG1l bS0+ZHVtcF9zdGF0dXMgPT0gTUNYVERVTVBTVEFUVVNfQUNDRVBUQUJMRSkKKwkJCXsKKwkJCQkv KgorCQkJCSAqIER1bXBlciBzZWVtcyB0byBoYXZlIGNsZWFuZWQgdXAgdGhpbmdzIGFscmVhZHkg YmVjYXVzZQorCQkJCSAqIG9mIGZhaWx1cmVzIG9yIGNhbmNlbGxhdGlvbi4KKwkJCQkgKiBTaW5j ZSB0aGUgZHVtcGVyIGhhcyBhbHJlYWR5IHJlbW92ZWQgdGhlIGR1bXAgZmlsZSwKKwkJCQkgKiBz aW1wbHkgZXhpdC4KKwkJCQkgKi8KKwkJCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wTG9jayk7CisJ CQkJdHVwbGVzdG9yZV9kb25lc3RvcmluZyh0dXBzdG9yZSk7CisKKwkJCQlyZXR1cm4gKERhdHVt KSAwOworCQkJfQorCQkJZWxzZSBpZiAobWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPT0gTUNY VERVTVBTVEFUVVNfQ0FOQ0VMSU5HKQorCQkJeworCQkJCS8qCisJCQkJICogUmVxdWVzdCBoYXMg YmVlbiBjYW5jZWxlZC4gRXhpdCB3aXRob3V0IGR1bXBpbmcuCisJCQkJICovCisJCQkJTFdMb2Nr UmVsZWFzZShNY3h0RHVtcExvY2spOworCQkJCXR1cGxlc3RvcmVfZG9uZXN0b3JpbmcodHVwc3Rv cmUpOworCisJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCX0KKworCQkJZWxzZSBpZiAobWN4dGR1 bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPT0gTUNYVERVTVBTVEFUVVNfRE9ORSkKKwkJCXsKKwkJCQkv KiBEdW1waW5nIGhhcyBjb21wbGV0ZWQuICovCisJCQkJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExv Y2spOworCQkJCWJyZWFrOworCQkJfQorCQkJLyoKKwkJCSAqIFRoZSBkdW1wZXIgbXVzdCBiZSBp biB0aGUgbWlkZGxlIG9mIGEgZHVtcGluZyBvciB0aGUgcmVxdWVzdAorCQkJICogaGFzbid0IGJl ZW4gcmVhY2hlZCB5ZXQuCisJCQkgKi8KKwkJCUFzc2VydChtY3h0ZHVtcFNobWVtLT5kdW1wX3N0 YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19SRVFVRVNUSU5HIHx8CisJCQkJbWN4dGR1bXBTaG1lbS0+ ZHVtcF9zdGF0dXMgPT0gTUNYVERVTVBTVEFUVVNfRFVNUElORyk7CisKKwkJCS8qCisJCQkgKiBB bHRob3VnaCB3ZSBoYXZlIGNoZWNrZWQgdGhlIHRhcmdldCBwcm9jZXNzLAorCQkJICogaXQgbWln aHQgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYWZ0ZXIgdGhlIGNoZWNrLgorCQkJICogRW5zdXJlIGl0 IGFnYWluLgorCQkJICovCisJCQlwcm9jID0gQmFja2VuZFBpZEdldFByb2MoZHN0X3BpZCk7CisK KwkJCWlmIChwcm9jID09IE5VTEwpCisJCQl7CisJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJ KGVycm1zZygiUElEICVkIHNlZW1zIHRvIGV4aXQgYmVmb3JlIGR1bXBpbmcuIiwgZHN0X3BpZCkp KTsKKworCQkJCS8qIEluaXRpYWxpemUgdGhlIHNoYXJlZCBtZW1vcnkgYW5kIGV4aXQuICovCisJ CQkJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExvY2spOworCQkJCUxXTG9ja0FjcXVpcmUoTWN4dER1 bXBMb2NrLCBMV19FWENMVVNJVkUpOworCisJCQkJbWN4dGR1bXBTaG1lbS0+ZHN0X3BpZCA9IDA7 CisJCQkJbWN4dGR1bXBTaG1lbS0+c3JjX3BpZCA9IDA7CisJCQkJbWN4dGR1bXBTaG1lbS0+ZHVt cF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRVU19BQ0NFUFRBQkxFOworCisJCQkJTFdMb2NrUmVsZWFz ZShNY3h0RHVtcExvY2spOworCisJCQkJdHVwbGVzdG9yZV9kb25lc3RvcmluZyh0dXBzdG9yZSk7 CisJCQkJcmV0dXJuIChEYXR1bSkgMTsKKwkJCX0KKwkJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBM b2NrKTsKKworCQkJLyoKKwkJCSAqIFdhaXQuIFdlIGV4cGVjdCB0byBnZXQgYSBsYXRjaCBzaWdu YWwgYmFjayBmcm9tIHRoZSBkdW1wZXIuCisJCQkgKiBVc2UgYSB0aW1lb3V0IHRvIGVuYWJsZSBj YW5jZWxsYXRpb24uCisJCQkgKi8KKwkJCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJ V0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCTEw MDBMLCBXQUlUX0VWRU5UX0RVTVBfTUVNT1JZX0NPTlRFWFQpOworCQl9CisJfQorCVBHX0VORF9F TlNVUkVfRVJST1JfQ0xFQU5VUChNY3h0UmVxQ2xlYW51cCwgKERhdHVtKSBJbnQzMkdldERhdHVt KGRzdF9waWQpKTsKKworCS8qIFJlYWQgdmFsdWVzIGZyb20gdGhlIGR1bXAgZmlsZSBhbmQgcHV0 IHRoZW0gb24gdHVwbGVzdG9yZS4gKi8KKwlQdXREdW1wZWRWYWx1ZXNPblR1cGxlc3RvcmUoZHVt cGZpbGUsIHR1cHN0b3JlLCB0dXBkZXNjLCBkc3RfcGlkKTsKIAogCS8qIGNsZWFuIHVwIGFuZCBy ZXR1cm4gdGhlIHR1cGxlc3RvcmUgKi8KIAl0dXBsZXN0b3JlX2RvbmVzdG9yaW5nKHR1cHN0b3Jl KTsKIAogCXJldHVybiAoRGF0dW0pIDA7CiB9CisKKy8qCisgKiBkdW1wX21lbW9yeV9jb250ZXh0 cworICogCQlEdW1wIGxvY2FsIG1lbW9yeSBjb250ZXh0cyB0byBhIGZpbGUuCisgKi8KK3N0YXRp YyB2b2lkCitkdW1wX21lbW9yeV9jb250ZXh0cyh2b2lkKQoreworCUZJTEUJCSpmcG91dDsKKwlj aGFyCQlkdW1wZmlsZVtNQVhQR1BBVEhdOworCWludAkJZm9ybWF0X2lkOworCXBpZF90CQlzcmNf cGlkOworCVBHUFJPQwkgCSpzcmNfcHJvYzsKKworCXNucHJpbnRmKGR1bXBmaWxlLCBzaXplb2Yo ZHVtcGZpbGUpLCAiJXMvJWQiLCBQR19NRU1VU0FHRV9ESVIsIE15UHJvY1BpZCk7CisKKwlMV0xv Y2tBY3F1aXJlKE1jeHREdW1wTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWlmIChtY3h0ZHVtcFNo bWVtLT5kdW1wX3N0YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19BQ0NFUFRBQkxFKQorCXsKKwkJLyoK KwkJICogVGhlIHJlcXVlc3RvciBjYW5jZWxlZCB0aGUgcmVxdWVzdCBhbmQgaW5pdGlhbGl6ZWQK KwkJICogdGhlIHNoYXJlZCBtZW1vcnkuIFNpbXBseSBleGl0LgorCQkgKi8KKwkJTFdMb2NrUmVs ZWFzZShNY3h0RHVtcExvY2spOworCisJCXJldHVybjsKKwl9CisKKwlpZiAobWN4dGR1bXBTaG1l bS0+ZHVtcF9zdGF0dXMgPT0gTUNYVERVTVBTVEFUVVNfQ0FOQ0VMSU5HKQorCXsKKwkJLyoKKwkJ ICogVGhlIHJlcXVlc3RvciBjYW5jZWxlZCB0aGUgcmVxdWVzdC4KKwkJICogSW5pdGlhbGl6ZSB0 aGUgc2hhcmVkIG1lbW9yeSBhbmQgZXhpdC4KKwkJICovCisJCW1jeHRkdW1wU2htZW0tPmRzdF9w aWQgPSAwOworCQltY3h0ZHVtcFNobWVtLT5zcmNfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+ ZHVtcF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRVU19BQ0NFUFRBQkxFOworCisJCUxXTG9ja1JlbGVh c2UoTWN4dER1bXBMb2NrKTsKKworCQlyZXR1cm47CisJfQorCisJQXNzZXJ0KG1jeHRkdW1wU2ht ZW0tPmR1bXBfc3RhdHVzID09IE1DWFREVU1QU1RBVFVTX1JFUVVFU1RJTkcpOworCisJbWN4dGR1 bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRVU19EVU1QSU5HOworCXNyY19waWQg PSBtY3h0ZHVtcFNobWVtLT5zcmNfcGlkOworCisJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExvY2sp OworCisJZnBvdXQgPSBBbGxvY2F0ZUZpbGUoZHVtcGZpbGUsICJ3Iik7CisKKwlpZiAoZnBvdXQg PT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vz cygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBkdW1wIGZpbGUgXCIlc1wiOiAlbSIs CisJCQkJCQlkdW1wZmlsZSkpKTsKKwkJRnJlZUZpbGUoZnBvdXQpOworCisJCUxXTG9ja0FjcXVp cmUoTWN4dER1bXBMb2NrLCBMV19FWENMVVNJVkUpOworCisJCW1jeHRkdW1wU2htZW0tPmRzdF9w aWQgPSAwOworCQltY3h0ZHVtcFNobWVtLT5zcmNfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+ ZHVtcF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRVU19BQ0NFUFRBQkxFOworCisJCUxXTG9ja1JlbGVh c2UoTWN4dER1bXBMb2NrKTsKKworCQlyZXR1cm47CisJfQorCWZvcm1hdF9pZCA9IFBHX01DWFRf RklMRV9GT1JNQVRfSUQ7CisJZndyaXRlKCZmb3JtYXRfaWQsIHNpemVvZihmb3JtYXRfaWQpLCAx LCBmcG91dCk7CisKKwkvKiBMb29rIGludG8gZWFjaCBtZW1vcnkgY29udGV4dCBmcm9tIFRvcE1l bW9yeUNvbnRleHQgcmVjdXJzaXZlbHkuICovCisJUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxl U3RvcmUoTlVMTCwgTlVMTCwKKwkJCQkJCQlUb3BNZW1vcnlDb250ZXh0LCBOVUxMLCAwLCBmcG91 dCk7CisKKwkvKgorCSAqIE1ha2UgZHVtcCBmaWxlIGVuZHMgd2l0aCAnRScuCisJICogVGhpcyBp cyBjaGVja2VkIGJ5IHRoZSByZXF1ZXN0b3IgbGF0ZXIuCisJICovCisJZnB1dGMoJ0UnLCBmcG91 dCk7CisKKwlpZiAoZmVycm9yKGZwb3V0KSkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBkdW1w IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQlkdW1wZmlsZSkpKTsKKwkJRnJlZUZpbGUoZnBvdXQp OworCQl1bmxpbmsoZHVtcGZpbGUpOworCisJCUxXTG9ja0FjcXVpcmUoTWN4dER1bXBMb2NrLCBM V19FWENMVVNJVkUpOworCisJCW1jeHRkdW1wU2htZW0tPmRzdF9waWQgPSAwOworCQltY3h0ZHVt cFNobWVtLT5zcmNfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPSBNQ1hU RFVNUFNUQVRVU19BQ0NFUFRBQkxFOworCisJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBMb2NrKTsK KworCQlyZXR1cm47CisJfQorCisJLyogTm8gbW9yZSBvdXRwdXQgdG8gYmUgZG9uZS4gQ2xvc2Ug ZmlsZS4gKi8KKwllbHNlIGlmIChGcmVlRmlsZShmcG91dCkgPCAwKQorCXsKKwkJZXJlcG9ydChM T0csCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQg bm90IGNsb3NlIGR1bXAgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCWR1bXBmaWxlKSkpOworCX0K KworCUxXTG9ja0FjcXVpcmUoTWN4dER1bXBMb2NrLCBMV19FWENMVVNJVkUpOworCisJaWYgKG1j eHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID09IE1DWFREVU1QU1RBVFVTX0NBTkNFTElORykKKwl7 CisJCS8qIER1cmluZyBkdW1waW5nLCB0aGUgcmVxdWVzdG9yIGNhbmNlbGVkIHRoZSByZXF1ZXN0 LiAqLworCQl1bmxpbmsoZHVtcGZpbGUpOworCisJCW1jeHRkdW1wU2htZW0tPmRzdF9waWQgPSAw OworCQltY3h0ZHVtcFNobWVtLT5zcmNfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+ZHVtcF9z dGF0dXMgPSBNQ1hURFVNUFNUQVRVU19BQ0NFUFRBQkxFOworCisJCUxXTG9ja1JlbGVhc2UoTWN4 dER1bXBMb2NrKTsKKworCQlyZXR1cm47CisJfQorCisJLyogRHVtcGluZyBoYXMgc3VjY2VlZGVk LCBub3RpZnkgaXQgdG8gdGhlIHJlcXVlc3Rvci4gKi8KKwltY3h0ZHVtcFNobWVtLT5kdW1wX3N0 YXR1cyA9IE1DWFREVU1QU1RBVFVTX0RPTkU7CisJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExvY2sp OworCXNyY19wcm9jID0gQmFja2VuZFBpZEdldFByb2Moc3JjX3BpZCk7CisJU2V0TGF0Y2goJihz cmNfcHJvYy0+cHJvY0xhdGNoKSk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBQcm9jZXNzRHVt cE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQKKyAqCQlUaGUgcG9ydGlvbiBvZiBtZW1vcnkgY29udGV4 dCBkdW1wIGludGVycnVwdCBoYW5kbGluZyB0aGF0IHJ1bnMKKyAqCQlvdXRzaWRlIG9mIHRoZSBz aWduYWwgaGFuZGxlci4KKyAqLwordm9pZAorUHJvY2Vzc0R1bXBNZW1vcnlDb250ZXh0SW50ZXJy dXB0KHZvaWQpCit7CisJUHJvY1NpZ25hbER1bXBNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNl OworCWR1bXBfbWVtb3J5X2NvbnRleHRzKCk7Cit9CisKKy8qCisgKiBIYW5kbGVQcm9jU2lnbmFs RHVtcE1lbW9yeUNvbnRleHQKKyAqIAkJSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJydXB0IGlu ZGljYXRpbmcgYSBtZW1vcnkgY29udGV4dCBkdW1wLgorICoJCVNpZ25hbCBoYW5kbGVyIHBvcnRp b24gb2YgaW50ZXJydXB0IGhhbmRsaW5nLgorICovCit2b2lkCitIYW5kbGVQcm9jU2lnbmFsRHVt cE1lbW9yeUNvbnRleHQodm9pZCkKK3sKKwlQcm9jU2lnbmFsRHVtcE1lbW9yeUNvbnRleHRQZW5k aW5nID0gdHJ1ZTsKK30KKworLyoKKyAqIE1jeHREdW1wU2htZW1Jbml0CisgKiAJCUluaXRpYWxp emUgbWN4dGR1bXAgc2hhcmVkIG1lbW9yeSBzdHJ1Y3QuCisgKi8KK3ZvaWQKK01jeHREdW1wU2ht ZW1Jbml0KHZvaWQpCit7CisJYm9vbAkJZm91bmQ7CisKKwltY3h0ZHVtcFNobWVtID0gKG1jeHRk dW1wU2htZW1TdHJ1Y3QgKikKKwkJU2htZW1Jbml0U3RydWN0KCJNZW1vcnkgQ29udGV4dCBEdW1w IERhdGEiLAorCQkJCQkJc2l6ZW9mKG1jeHRkdW1wU2htZW1TdHJ1Y3QpLAorCQkJCQkJJmZvdW5k KTsKKwlpZiAoIWZvdW5kKQorCXsKKwkJbWN4dGR1bXBTaG1lbS0+ZHN0X3BpZCA9IDA7CisJCW1j eHRkdW1wU2htZW0tPnNyY19waWQgPSAwOworCQltY3h0ZHVtcFNobWVtLT5kdW1wX3N0YXR1cyA9 IE1DWFREVU1QU1RBVFVTX0FDQ0VQVEFCTEU7CisJfQorfQorCisvKgorICogUmVtb3ZlTWVtY3h0 RmlsZQorICoJIAlSZW1vdmUgZHVtcCBmaWxlcy4KKyAqLwordm9pZAorUmVtb3ZlTWVtY3h0Rmls ZShpbnQgcGlkKQoreworCURJUgkJKmRpcjsKKwlzdHJ1Y3QgCWRpcmVudCAqZHVtcGZpbGU7CisK KwlpZiAocGlkID09IDApCisJeworCQkvKiBkZWxldGUgYWxsIGR1bXAgZmlsZXMgKi8KKwkJZGly ID0gQWxsb2NhdGVEaXIoUEdfTUVNVVNBR0VfRElSKTsKKwkJd2hpbGUgKChkdW1wZmlsZSA9IFJl YWREaXIoZGlyLCBQR19NRU1VU0FHRV9ESVIpKSAhPSBOVUxMKQorCQl7CisJCQljaGFyCQlkdW1w ZmlsZXBhdGhbMzJdOworCisJCQlpZiAoc3RyY21wKGR1bXBmaWxlLT5kX25hbWUsICIuIikgPT0g MCB8fCBzdHJjbXAoZHVtcGZpbGUtPmRfbmFtZSwgIi4uIikgPT0gMCkKKwkJCQljb250aW51ZTsK KworCQkJc3ByaW50ZihkdW1wZmlsZXBhdGgsICIlcy8lcyIsIFBHX01FTVVTQUdFX0RJUiwgZHVt cGZpbGUtPmRfbmFtZSk7CisKKwkJCWVyZXBvcnQoREVCVUcyLAorCQkJCQkoZXJybXNnKCJyZW1v dmluZyBmaWxlIFwiJXNcIiIsIGR1bXBmaWxlcGF0aCkpKTsKKworCQkJaWYgKHVubGluayhkdW1w ZmlsZXBhdGgpIDwgMCkKKwkJCXsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IHJlbW92ZSBmaWxlIFwi JXNcIjogJW0iLCBkdW1wZmlsZXBhdGgpKSk7CisJCQl9CisJCX0KKwkJRnJlZURpcihkaXIpOwor CX0KKwllbHNlCisJeworCQkvKiBkZWxldGUgc3BlY2lmaWVkIGR1bXAgZmlsZSAqLworCQljaGFy CQlzdHJfcGlkWzEyXTsKKwkJY2hhcgkJZHVtcGZpbGVwYXRoWzMyXTsKKwkJc3RydWN0IAkJc3Rh dCBzdGF0X3RtcDsKKworCQlwZ19sdG9hKHBpZCwgc3RyX3BpZCk7CisJCXNwcmludGYoZHVtcGZp bGVwYXRoLCAiJXMvJXMiLCBQR19NRU1VU0FHRV9ESVIsIHN0cl9waWQpOworCisJCWVyZXBvcnQo REVCVUcyLAorCQkJCShlcnJtc2coInJlbW92aW5nIGZpbGUgXCIlc1wiIiwgZHVtcGZpbGVwYXRo KSkpOworCisJCWlmIChzdGF0KGR1bXBmaWxlcGF0aCwgJnN0YXRfdG1wKSA9PSAwKQorCQl7CisJ CQlpZiAodW5saW5rKGR1bXBmaWxlcGF0aCkgPCAwKQorCQkJeworCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBu b3QgcmVtb3ZlIGZpbGUgXCIlc1wiOiAlbSIsIGR1bXBmaWxlcGF0aCkpKTsKKwkJCX0KKwkJfQor CX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggZWEyODc2OWQ2YS4uNDM3YWUyMjEz YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTMyLDYgKzMyLDcgQEAgdm9sYXRpbGUg c2lnX2F0b21pY190IFF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0 b21pY190IFByb2NEaWVQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2xp ZW50Q29ubmVjdGlvbkxvc3QgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5U cmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwordm9sYXRpbGUgc2lnX2F0 b21pY190IFByb2NTaWduYWxEdW1wTWVtb3J5Q29udGV4dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xh dGlsZSBzaWdfYXRvbWljX3QgUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nID0gZmFsc2U7CiB2b2xh dGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vaW5pdGRiL2luaXRkYi5jIGIvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKaW5kZXggYzg1NDIy MWEzMC4uOGNlYmEyZmU0MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKKysr IGIvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKQEAgLTIyMSw3ICsyMjEsOCBAQCBzdGF0aWMgY29u c3QgY2hhciAqY29uc3Qgc3ViZGlyc1tdID0gewogCSJwZ194YWN0IiwKIAkicGdfbG9naWNhbCIs CiAJInBnX2xvZ2ljYWwvc25hcHNob3RzIiwKLQkicGdfbG9naWNhbC9tYXBwaW5ncyIKKwkicGdf bG9naWNhbC9tYXBwaW5ncyIsCisJInBnX21lbXVzYWdlIgogfTsKIAogCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5wbCBiL3NyYy9iaW4vcGdf YmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsCmluZGV4IGY2NzRhN2M5NGUuLjM0MGE4 MGZjMTEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFj a3VwLnBsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBs CkBAIC02LDcgKzYsNyBAQCB1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7 CiB1c2UgRmlsZTo6UGF0aCBxdyhybXRyZWUpOwogdXNlIFBvc3RncmVzTm9kZTsKIHVzZSBUZXN0 TGliOwotdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTA5OwordXNlIFRlc3Q6Ok1vcmUgdGVzdHMg PT4gMTEwOwogCiBwcm9ncmFtX2hlbHBfb2soJ3BnX2Jhc2ViYWNrdXAnKTsKIHByb2dyYW1fdmVy c2lvbl9vaygncGdfYmFzZWJhY2t1cCcpOwpAQCAtMTI0LDcgKzEyNCw3IEBAIGlzX2RlZXBseSgK IAogIyBDb250ZW50cyBvZiB0aGVzZSBkaXJlY3RvcmllcyBzaG91bGQgbm90IGJlIGNvcGllZC4K IGZvcmVhY2ggbXkgJGRpcm5hbWUgKAotCXF3KHBnX2R5bnNobWVtIHBnX25vdGlmeSBwZ19yZXBs c2xvdCBwZ19zZXJpYWwgcGdfc25hcHNob3RzIHBnX3N0YXRfdG1wIHBnX3N1YnRyYW5zKQorCXF3 KHBnX2R5bnNobWVtIHBnX25vdGlmeSBwZ19yZXBsc2xvdCBwZ19zZXJpYWwgcGdfc25hcHNob3Rz IHBnX3N0YXRfdG1wIHBnX3N1YnRyYW5zIHBnX21lbXVzYWdlKQogICApCiB7CiAJaXNfZGVlcGx5 KApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXdpbmQvZmlsZW1hcC5jIGIvc3JjL2Jpbi9wZ19y ZXdpbmQvZmlsZW1hcC5jCmluZGV4IDI2MThiNGM5NTcuLjMzZGE1NzA1OTggMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfcmV3aW5kL2ZpbGVtYXAuYworKysgYi9zcmMvYmluL3BnX3Jld2luZC9maWxl bWFwLmMKQEAgLTExOSw2ICsxMTksOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqZXhjbHVkZURpckNv bnRlbnRzW10gPQogCS8qIENvbnRlbnRzIHplcm9lZCBvbiBzdGFydHVwLCBzZWUgU3RhcnR1cFNV QlRSQU5TKCkuICovCiAJInBnX3N1YnRyYW5zIiwKIAorCS8qIFNraXAgbWVtb3J5IGNvbnRleHQg ZHVtcGVkIGZpbGVzLiAqLworCSJwZ19tZW11c2FnZSIsCisKIAkvKiBlbmQgb2YgbGlzdCAqLwog CU5VTEwKIH07CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBkN2I1NWY1N2VhLi40ZThhYTQ2 ZTQ4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTc4NTIsMTUgKzc4NTIsMjUgQEAKIAog IyBtZW1vcnkgY29udGV4dCBvZiBsb2NhbCBiYWNrZW5kCiB7IG9pZCA9PiAnMjI4MicsCi0gIGRl c2NyID0+ICdpbmZvcm1hdGlvbiBhYm91dCBhbGwgbWVtb3J5IGNvbnRleHRzIG9mIGxvY2FsIGJh Y2tlbmQnLAogICBwcm9uYW1lID0+ICdwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnLCBw cm9yb3dzID0+ICcxMDAnLAogICBwcm9yZXRzZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAndics IHByb3BhcmFsbGVsID0+ICdyJywKICAgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlw ZXMgPT4gJycsCiAgIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4dCx0ZXh0LHRleHQsaW50NCxpbnQ4 LGludDgsaW50OCxpbnQ4LGludDh9JywKICAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxvLG8sbyxv LG8sb30nLAogICBwcm9hcmduYW1lcyA9PiAne25hbWUsIGlkZW50LCBwYXJlbnQsIGxldmVsLCB0 b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3MsIHVzZWRf Ynl0ZXN9JywKKyAgZGVzY3IgPT4gJ2luZm9ybWF0aW9uIGFib3V0IGFsbCBtZW1vcnkgY29udGV4 dHMgb2YgbG9jYWwgYmFja2VuZCcsCiAgIHByb3NyYyA9PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzJyB9LAogCisjIG1lbW9yeSBjb250ZXh0IG9mIHNwZWNpZmllZCBiYWNrZW5kCit7 IG9pZCA9PiAnNDU0MycsCisgIGRlc2NyID0+ICdpbmZvcm1hdGlvbiBhYm91dCBhbGwgbWVtb3J5 IGNvbnRleHRzIG9mIHNwZWNpZmllZCBiYWNrZW5kJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X3Rh cmdldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cycsIHByb3Jvd3MgPT4gJzEwMCcsIHByb2lzc3Ry aWN0ID0+ICdmJywKKyAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9w YXJhbGxlbCA9PiAncicsIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsCisgIHByb2FyZ3R5cGVzID0+ ICdpbnQ0JywgcHJvYWxsYXJndHlwZXMgPT4gJ3tpbnQ0LHRleHQsdGV4dCx0ZXh0LGludDQsaW50 OCxpbnQ4LGludDgsaW50OCxpbnQ4fScsCisgIHByb2FyZ21vZGVzID0+ICd7aSxvLG8sbyxvLG8s byxvLG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAne3BpZCwgbmFtZSwgaWRlbnQsIHBhcmVudCwg bGV2ZWwsIHRvdGFsX2J5dGVzLCB0b3RhbF9uYmxvY2tzLCBmcmVlX2J5dGVzLCBmcmVlX2NodW5r cywgdXNlZF9ieXRlc30nLAorICBwcm9zcmMgPT4gJ3BnX2dldF90YXJnZXRfYmFja2VuZF9tZW1v cnlfY29udGV4dHMnIH0sCisKICMgbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgogeyBv aWQgPT4gJzEwNjYnLCBkZXNjciA9PiAnbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcics CiAgIHByb25hbWUgPT4gJ2dlbmVyYXRlX3NlcmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4u aAppbmRleCAxYmRjOTdlMzA4Li5kMDU4NDIyYmVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9t aXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtODIsNiArODIsNyBA QCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IEludGVycnVwdFBlbmRp bmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFF1ZXJ5Q2FuY2Vs UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY0Rp ZVBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVJ blRyYW5zYWN0aW9uU2Vzc2lvblRpbWVvdXRQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsRHVtcE1lbW9yeUNvbnRleHRQZW5kaW5nOwog ZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlU2Vzc2lvblRpbWVv dXRQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9j U2lnbmFsQmFycmllclBlbmRpbmc7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5o IGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKaW5kZXggYzM4YjY4OTcxMC4uZmQzODQxODNmNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdzdGF0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgK QEAgLTk2NCw3ICs5NjQsOCBAQCB0eXBlZGVmIGVudW0KIAlXQUlUX0VWRU5UX1JFUExJQ0FUSU9O X1NMT1RfRFJPUCwKIAlXQUlUX0VWRU5UX1NBRkVfU05BUFNIT1QsCiAJV0FJVF9FVkVOVF9TWU5D X1JFUCwKLQlXQUlUX0VWRU5UX1hBQ1RfR1JPVVBfVVBEQVRFCisJV0FJVF9FVkVOVF9YQUNUX0dS T1VQX1VQREFURSwKKwlXQUlUX0VWRU5UX0RVTVBfTUVNT1JZX0NPTlRFWFQKIH0gV2FpdEV2ZW50 SVBDOwogCiAvKiAtLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3By b2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDRhZTdk YzMzYjguLmQwMjUzODFhZTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3Np Z25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNCw2ICsz NCw3IEBAIHR5cGVkZWYgZW51bQogCVBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSwJLyogbWVzc2Fn ZSBmcm9tIGNvb3BlcmF0aW5nIHBhcmFsbGVsIGJhY2tlbmQgKi8KIAlQUk9DU0lHX1dBTFNORF9J TklUX1NUT1BQSU5HLAkvKiBhc2sgd2Fsc2VuZGVycyB0byBwcmVwYXJlIGZvciBzaHV0ZG93biAg Ki8KIAlQUk9DU0lHX0JBUlJJRVIsCQkJLyogZ2xvYmFsIGJhcnJpZXIgaW50ZXJydXB0ICAqLwor CVBST0NTSUdfRFVNUF9NRU1DWFQsCQkvKiByZXF1ZXN0IGR1bXBpbmcgbWVtb3J5IGNvbnRleHQg aW50ZXJydXB0ICovCiAKIAkvKiBSZWNvdmVyeSBjb25mbGljdCByZWFzb25zICovCiAJUFJPQ1NJ R19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0 aWxzL21jeHRmdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbWN4dGZ1bmNzLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZWZmMmM2MmNiYgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL21jeHRmdW5jcy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIG1jeHRmdW5jcy5oCisgKgkgIERlY2xhcmF0aW9ucyBmb3Ig c2hvd2luZyBiYWNrZW5kIG1lbW9yeSBjb250ZXh0LgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDIwLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQv dXRpbHMvbWN4dGZ1bmNzLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBN Q1hUX0gKKyNkZWZpbmUgTUNYVF9ICisKKy8qIERpcmVjdG9yeSB0byBzdG9yZSBkdW1wZWQgbWVt b3J5IGZpbGVzICovCisjZGVmaW5lIFBHX01FTVVTQUdFX0RJUgkJInBnX21lbXVzYWdlIgorCisj ZGVmaW5lIFBHX01DWFRfRklMRV9GT1JNQVRfSUQJMHgwMUI1QkM5RQorCit0eXBlZGVmIGVudW0g TWN4dER1bXBTdGF0dXMKK3sKKwlNQ1hURFVNUFNUQVRVU19BQ0NFUFRBQkxFLAkJLyogbm8gb25l IGlzIHJlcXVlc3RpbmcgZHVtcGluZyAqLworCU1DWFREVU1QU1RBVFVTX1JFUVVFU1RJTkcsCQkv KiByZXF1ZXN0IGhhcyBiZWVuIGlzc3VlZCwgYnV0IGR1bXBlciBoYXMgbm90IHJlY2VpdmVkIGl0 IHlldCAqLworCU1DWFREVU1QU1RBVFVTX0RVTVBJTkcsCQkJLyogZHVtcGVyIGlzIGR1bXBpbmcg ZmlsZXMgKi8KKwlNQ1hURFVNUFNUQVRVU19ET05FLAkJCS8qIGR1bXBlciBoYXMgZmluaXNoZWQg ZHVtcGluZyBhbmQgdGhlIHJlcXVlc3RvciBpcyB3b3JraW5nICovCisJTUNYVERVTVBTVEFUVVNf Q0FOQ0VMSU5HCQkvKiByZXF1ZXN0b3IgY2FuY2VsZWQgdGhlIGR1bXBpbmcgKi8KK30gTWN4dER1 bXBTdGF0dXM7CisKK3R5cGVkZWYgc3RydWN0IG1jeHRkdW1wU2htZW1TdHJ1Y3QKK3sKKwlwaWRf dAkJZHN0X3BpZDsJCS8qIHBpZCBvZiB0aGUgc2lnbmFsIHJlY2VpdmVyICovCisJcGlkX3QJCXNy Y19waWQ7CQkvKiBwaWQgb2YgdGhlIHNpZ25hbCBzZW5kZXIgKi8KKwlNY3h0RHVtcFN0YXR1cwlk dW1wX3N0YXR1czsJCS8qIGR1bXAgc3RhdHVzICovCit9IG1jeHRkdW1wU2htZW1TdHJ1Y3Q7CisK K2V4dGVybiB2b2lkIFByb2Nlc3NEdW1wTWVtb3J5Q29udGV4dEludGVycnVwdCh2b2lkKTsKK2V4 dGVybiB2b2lkIEhhbmRsZVByb2NTaWduYWxEdW1wTWVtb3J5Q29udGV4dCh2b2lkKTsKK2V4dGVy biB2b2lkIE1jeHREdW1wU2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgUmVtb3ZlTWN4dER1 bXBGaWxlKGludCk7CitleHRlcm4gdm9pZCBSZW1vdmVNZW1jeHRGaWxlKGludCk7CisjZW5kaWYJ CQkJCQkJLyogTUNYVF9IICovCi0tIAoyLjE4LjEKCg== --=_58309c0496e5e00fc7e70f7ad8e85a9e--