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 1kChtL-0000Bo-OB for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Aug 2020 11:22:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kChtK-0006vW-Ga for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Aug 2020 11:22:26 +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 1kChtK-0006vP-0R for pgsql-hackers@lists.postgresql.org; Mon, 31 Aug 2020 11:22:26 +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 1kChtG-0002fg-I6 for pgsql-hackers@postgresql.org; Mon, 31 Aug 2020 11:22:25 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id A80486031F for ; Mon, 31 Aug 2020 20:22: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="=_35f63dca7ff929c17aff1408cc895d9f" Date: Mon, 31 Aug 2020 20:22:18 +0900 From: torikoshia To: pgsql-hackers@postgresql.org Subject: Get memory contexts of an arbitrary backend process Message-ID: <0271f440ac77f2a4180e0e56ebd944d1@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 --=_35f63dca7ff929c17aff1408cc895d9f Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi, After commit 3e98c0bafb28de, we can display the usage of the memory contexts using pg_backend_memory_contexts system view. However, its target is limited to the process attached to the current session. As discussed in the thread[1], it'll be useful to make it possible to get the memory contexts of an arbitrary backend process. Attached PoC patch makes pg_get_backend_memory_contexts() display meory contexts of the specified PID of the process. =# -- PID of the target process is 17051 =# SELECT * FROM pg_get_backend_memory_contexts(17051) ; name | ident | parent | level | total_bytes | total_nblocks | free_bytes | free_chunks | used_bytes -----------------------+-------+------------------+-------+-------------+---------------+------------+-------------+------------ TopMemoryContext | | | 0 | 68720 | 5 | 16816 | 16 | 51904 RowDescriptionContext | | TopMemoryContext | 1 | 8192 | 1 | 6880 | 0 | 1312 MessageContext | | TopMemoryContext | 1 | 65536 | 4 | 19912 | 1 | 45624 ... It doesn't display contexts of all the backends but only the contexts of specified process. I think it would be enough because I suppose this function is used after investigations using ps command or other OS level utilities. The rough idea of implementation is like below: 1. send a signal to the specified process 2. signaled process dumps its memory contexts to a file 3. read the dumped file and display it to the user Any thoughts? [1] https://www.postgresql.org/message-id/72a656e0f71d0860161e0b3f67e4d771%40oss.nttdata.com Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_35f63dca7ff929c17aff1408cc895d9f Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-Enabled-pg_get_backend_memory_contexts-to-collect-ar.patch Content-Disposition: attachment; filename=0001-Enabled-pg_get_backend_memory_contexts-to-collect-ar.patch; size=21392 RnJvbSA3ZGVjZmRhMzM3YmJjNDIyZmVjZTRjNzM2YTcxOWI2ZmNmZGM1Y2YzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgMzEgQXVnIDIwMjAgMTg6MjA6MzQgKzA5MDAKU3ViamVjdDog W1BBVENIXSBFbmFibGVkIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpIHRvIGNvbGxl Y3QgYXJiaXRyYXJ5CiBiYWNrZW5kIHByb2Nlc3MncyBtZW1vcnkgY29udGV4dHMuCgpQcmV2aW91 c2x5LCBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBjb3VsZCBvbmx5IGdldCB0aGUK bWVtb3J5IGNvbnRleHRzIG9mIHRoZSBwcm9jZXNzIHdoaWNoIGtpY2tlZCBpdC4gVGhpcyBwYXRj aCBlbmFibGVzCnRvIGdldCBtZW1vcnkgY29udGV4dHMgb2YgdGhlIGFyYml0cmFyeSBwcm9jZXNz IHdoaWNoIFBJRCBpcwpzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50LgotLS0KIGRvYy9zcmMvc2dt bC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICsKIHNyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9iYXNlYmFja3VwLmMgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jc2lnbmFsLmMgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbWN4 dGZ1bmNzLmMgICAgICAgICAgICB8IDMxNSArKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL2luaXRk Yi9pbml0ZGIuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2Jpbi9wZ19iYXNl YmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwgfCAgIDIgKy0KIHNyYy9iaW4vcGdfcmV3aW5k L2ZpbGVtYXAuYyAgICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4u aCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9tY3h0ZnVuY3Mu aCAgICAgICAgICAgICAgICB8ICAyMSArKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxl cy5vdXQgICAgICAgICAgfCAgIDIgKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDM2NCBpbnNlcnRpb25z KCspLCAyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS91dGls cy9tY3h0ZnVuY3MuaAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mv c3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4IGI5ZjU5MTI5NmEuLmNjOWE0NTgzMzQgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApA QCAtMjEwNjIsNiArMjEwNjIsMTkgQEAgU0VMRUNUICogRlJPTSBwZ19sc19kaXIoJy4nKSBXSVRI IE9SRElOQUxJVFkgQVMgdChscyxuKTsKICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwv cm93PgogCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5 Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAg ICAgICA8cHJpbWFyeT5wZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHM8L3ByaW1hcnk+Cisg ICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzPC9mdW5jdGlvbj4gKCA8dHlwZT5pbnRlZ2VyPC90eXBlPiApCisgICAgICAg IDxyZXR1cm52YWx1ZT5zZXRvZiByZWNvcmRzPC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFJldHVybnMgYWxsIHRoZSBtZW1vcnkgY29udGV4dHMg b2YgdGhlIHNwZWNpZmllZCBwcm9jZXNzIElELgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAg ICAgPC9yb3c+CisKICAgICAgIDxyb3c+CiAgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVf ZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCBhMmQ2MTMwMmY5Li44OGZiODM3 ZWNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKKysr IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC01NTUsMTAgKzU1NSwx MCBAQCBSRVZPS0UgQUxMIE9OIHBnX3NobWVtX2FsbG9jYXRpb25zIEZST00gUFVCTElDOwogUkVW T0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zKCkgRlJPTSBQ VUJMSUM7CiAKIENSRUFURSBWSUVXIHBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIEFTCi0gICAg U0VMRUNUICogRlJPTSBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKTsKKyAgICBTRUxF Q1QgKiBGUk9NIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygtMSk7CiAKIFJFVk9LRSBB TEwgT04gcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgRlJPTSBQVUJMSUM7Ci1SRVZPS0UgRVhF Q1VURSBPTiBGVU5DVElPTiBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBGUk9NIFBV QkxJQzsKK1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF9iYWNrZW5kX21lbW9yeV9j b250ZXh0cyBGUk9NIFBVQkxJQzsKIAogLS0gU3RhdGlzdGljcyB2aWV3cwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9iYXNlYmFja3VwLmMKaW5kZXggNjA2NDM4NGUzMi4uZjY5ZDg1MWI2YiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXAuYwpAQCAtMTg0LDYgKzE4NCw5IEBAIHN0YXRpYyBj b25zdCBjaGFyICpjb25zdCBleGNsdWRlRGlyQ29udGVudHNbXSA9CiAJLyogQ29udGVudHMgemVy b2VkIG9uIHN0YXJ0dXAsIHNlZSBTdGFydHVwU1VCVFJBTlMoKS4gKi8KIAkicGdfc3VidHJhbnMi LAogCisJLyogU2tpcCBtZW1vcnkgY29udGV4dCBkdW1wZWQgZmlsZXMuICovCisJInBnX21lbXVz YWdlIiwKKwogCS8qIGVuZCBvZiBsaXN0ICovCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NzaWduYWwuYwppbmRleCA0ZmEzODViMGVjLi41OTY2NzI5ODk3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAic3RvcmFn ZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL21jeHRmdW5jcy5oIgogCiAvKgogICogVGhlIFNJ R1VTUjEgc2lnbmFsIGlzIG11bHRpcGxleGVkIHRvIHN1cHBvcnQgc2lnbmFsaW5nIG11bHRpcGxl IGV2ZW50CkBAIC01NjcsNiArNTY4LDkgQEAgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIoU0lH TkFMX0FSR1MpCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX0JBUlJJRVIpKQogCQlIYW5k bGVQcm9jU2lnbmFsQmFycmllckludGVycnVwdCgpOwogCisJaWYgKENoZWNrUHJvY1NpZ25hbChQ Uk9DU0lHX0RVTVBfTUVNT1JZKSkKKwkJSGFuZGxlUHJvY1NpZ25hbER1bXBNZW1vcnkoKTsKKwog CWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSkp CiAJCVJlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9E QVRBQkFTRSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCBjOTQyNGYxNjdjLi5kMzA0MjZjZjBmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAidGNvcC91dGlsaXR5 LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0ZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9wc19z dGF0dXMuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvdGlt ZW91dC5oIgpAQCAtNTM5LDYgKzU0MCwxMCBAQCBQcm9jZXNzQ2xpZW50UmVhZEludGVycnVwdChi b29sIGJsb2NrZWQpCiAJCS8qIFByb2Nlc3Mgbm90aWZ5IGludGVycnVwdHMsIGlmIGFueSAqLwog CQlpZiAobm90aWZ5SW50ZXJydXB0UGVuZGluZykKIAkJCVByb2Nlc3NOb3RpZnlJbnRlcnJ1cHQo KTsKKworCQkvKiBQcm9jZXNzIG1lbW9yeSBjb250ZXh0cyBkdW1wIGludGVycnVwdHMsIGlmIGFu eSAqLworCQlpZiAoUHJvY1NpZ25hbER1bXBNZW1vcnlQZW5kaW5nKQorCQkJUHJvY2Vzc0R1bXBN ZW1vcnlJbnRlcnJ1cHQoKTsKIAl9CiAJZWxzZSBpZiAoUHJvY0RpZVBlbmRpbmcpCiAJewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L21jeHRmdW5jcy5jCmluZGV4IDUwZTFiMDdmZjAuLjEyZjdlY2MxMTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKQEAgLTE1LDM0ICsxNSw0NCBAQAogCiAjaW5jbHVkZSAi cG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCiAjaW5jbHVkZSAiZnVuY2FwaS5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5j bHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbWN4dGZ1bmNzLmgi CiAKIC8qIC0tLS0tLS0tLS0KICAqIFRoZSBtYXggYnl0ZXMgZm9yIHNob3dpbmcgaWRlbnRpZmll cnMgb2YgTWVtb3J5Q29udGV4dC4KICAqIC0tLS0tLS0tLS0KICAqLwotI2RlZmluZSBNRU1PUllf Q09OVEVYVF9JREVOVF9ESVNQTEFZX1NJWkUJMTAyNAorI2RlZmluZSBNRU1PUllfQ09OVEVYVF9E SVNQTEFZX1NJWkUJMTAyNAorCisjZGVmaW5lIFBHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhU U19DT0xTCTkKIAogLyoKICAqIFB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlCiAgKgkJ T25lIHJlY3Vyc2lvbiBsZXZlbCBmb3IgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzLgor ICoKKyAqIE5vdGU6IFdoZW4gZnBvdXQgaXMgbm90IE5VTEwsIGZlcnJvcigpIGNoZWNrIG11c3Qg YmUgZG9uZQorICogYnkgdGhlIGNhbGxlci4KICAqLwogc3RhdGljIHZvaWQKIFB1dE1lbW9yeUNv bnRleHRzU3RhdHNUdXBsZVN0b3JlKFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmUsCiAJCQkJCQkJ CVR1cGxlRGVzYyB0dXBkZXNjLCBNZW1vcnlDb250ZXh0IGNvbnRleHQsCi0JCQkJCQkJCWNvbnN0 IGNoYXIgKnBhcmVudCwgaW50IGxldmVsKQorCQkJCQkJCQljb25zdCBjaGFyICpwYXJlbnQsIGlu dCBsZXZlbCwgRklMRSAqZnBvdXQpCiB7Ci0jZGVmaW5lIFBHX0dFVF9CQUNLRU5EX01FTU9SWV9D T05URVhUU19DT0xTCTkKLQogCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0JBQ0tFTkRfTUVNT1JZX0NP TlRFWFRTX0NPTFNdOwogCWJvb2wJCW51bGxzW1BHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhU U19DT0xTXTsKKwljaGFyCQljbGlwcGVkX2lkZW50W01FTU9SWV9DT05URVhUX0RJU1BMQVlfU0la RV07CiAJTWVtb3J5Q29udGV4dENvdW50ZXJzIHN0YXQ7CiAJTWVtb3J5Q29udGV4dCBjaGlsZDsK IAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKmlkZW50OworCWludAkJaWRsZW47CiAK IAlBc3NlcnRBcmcoTWVtb3J5Q29udGV4dElzVmFsaWQoY29udGV4dCkpOwogCkBAIC03MywyMiAr ODMsMjMgQEAgUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUoVHVwbGVzdG9yZXN0YXRl ICp0dXBzdG9yZSwKIAogCWlmIChpZGVudCkKIAl7Ci0JCWludAkJaWRsZW4gPSBzdHJsZW4oaWRl bnQpOwotCQljaGFyCQljbGlwcGVkX2lkZW50W01FTU9SWV9DT05URVhUX0lERU5UX0RJU1BMQVlf U0laRV07Ci0KKwkJaWRsZW4gPSBzdHJsZW4oaWRlbnQpOwogCQkvKgogCQkgKiBTb21lIGlkZW50 aWZpZXJzIHN1Y2ggYXMgU1FMIHF1ZXJ5IHN0cmluZyBjYW4gYmUgdmVyeSBsb25nLAogCQkgKiB0 cnVuY2F0ZSBvdmVyc2l6ZSBpZGVudGlmaWVycy4KIAkJICovCi0JCWlmIChpZGxlbiA+PSBNRU1P UllfQ09OVEVYVF9JREVOVF9ESVNQTEFZX1NJWkUpCi0JCQlpZGxlbiA9IHBnX21iY2xpcGxlbihp ZGVudCwgaWRsZW4sIE1FTU9SWV9DT05URVhUX0lERU5UX0RJU1BMQVlfU0laRSAtIDEpOworCQlp ZiAoaWRsZW4gPj0gTUVNT1JZX0NPTlRFWFRfRElTUExBWV9TSVpFKQorCQkJaWRsZW4gPSBwZ19t YmNsaXBsZW4oaWRlbnQsIGlkbGVuLCBNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkUgLSAxKTsK IAogCQltZW1jcHkoY2xpcHBlZF9pZGVudCwgaWRlbnQsIGlkbGVuKTsKIAkJY2xpcHBlZF9pZGVu dFtpZGxlbl0gPSAnXDAnOwogCQl2YWx1ZXNbMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNsaXBw ZWRfaWRlbnQpOwogCX0KIAllbHNlCisJeworCQlpZGxlbiA9IDA7CiAJCW51bGxzWzFdID0gdHJ1 ZTsKKwl9CiAKIAlpZiAocGFyZW50KQogCQl2YWx1ZXNbMl0gPSBDU3RyaW5nR2V0VGV4dERhdHVt KHBhcmVudCk7CkBAIC0xMDEsMTIgKzExMiw0MSBAQCBQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVw bGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAogCXZhbHVlc1s2XSA9IEludDY0R2V0 RGF0dW0oc3RhdC5mcmVlc3BhY2UpOwogCXZhbHVlc1s3XSA9IEludDY0R2V0RGF0dW0oc3RhdC5m cmVlY2h1bmtzKTsKIAl2YWx1ZXNbOF0gPSBJbnQ2NEdldERhdHVtKHN0YXQudG90YWxzcGFjZSAt IHN0YXQuZnJlZXNwYWNlKTsKLQl0dXBsZXN0b3JlX3B1dHZhbHVlcyh0dXBzdG9yZSwgdHVwZGVz YywgdmFsdWVzLCBudWxscyk7CisKKwlpZihmcG91dCA9PSBOVUxMKQorCQkvKiBwZ19nZXRfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMoKSBpcyBjYWxsZWQgZnJvbSBsb2NhbCBwcm9jZXNzICovCisJ CXR1cGxlc3RvcmVfcHV0dmFsdWVzKHR1cHN0b3JlLCB0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsK KworCWVsc2UKKwl7CisJCWludAkJCXJjOworCQlpbnQgcGFyZW50X2xlbiA9IHN0cmxlbihwYXJl bnQpOworCQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisKKwkJLyoKKwkJICogd3JpdGUg b3V0IHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0IGluZm9ybWF0aW9uLgorCQkgKiBTaW5jZSBz b21lIGVsZW1lbnRzIG9mIHZhbHVlcyBhcmUgcmV1c2FibGUsIHdlIHdyaXRlIGl0IG91dC4KKwkJ ICovCisJCWZwdXRjKCdEJywgZnBvdXQpOworCQlyYyA9IGZ3cml0ZSh2YWx1ZXMsIHNpemVvZih2 YWx1ZXMpLCAxLCBmcG91dCk7CisJCXJjID0gZndyaXRlKG51bGxzLCBzaXplb2YobnVsbHMpLCAx LCBmcG91dCk7CisKKwkJLyogd3JpdGUgb3V0IGluZm9ybWF0aW9uIHdoaWNoIGlzIG5vdCByZXN1 YWJsZSBmcm9tIHNlcmlhbGl6ZWQgdmFsdWVzICovCisJCXJjID0gZndyaXRlKCZuYW1lX2xlbiwg c2l6ZW9mKGludCksIDEsIGZwb3V0KTsKKwkJcmMgPSBmd3JpdGUobmFtZSwgbmFtZV9sZW4sIDEs IGZwb3V0KTsKKwkJcmMgPSBmd3JpdGUoJmlkbGVuLCBzaXplb2YoaW50KSwgMSwgZnBvdXQpOwor CQlyYyA9IGZ3cml0ZShjbGlwcGVkX2lkZW50LCBpZGxlbiwgMSwgZnBvdXQpOworCQlyYyA9IGZ3 cml0ZSgmbGV2ZWwsIHNpemVvZihpbnQpLCAxLCBmcG91dCk7CisJCXJjID0gZndyaXRlKCZwYXJl bnRfbGVuLCBzaXplb2YoaW50KSwgMSwgZnBvdXQpOworCQlyYyA9IGZ3cml0ZShwYXJlbnQsIHBh cmVudF9sZW4sIDEsIGZwb3V0KTsKKwkJKHZvaWQpIHJjOwkJCQkvKiB3ZSdsbCBjaGVjayBmb3Ig ZXJyb3Igd2l0aCBmZXJyb3IgKi8KKworCX0KIAogCWZvciAoY2hpbGQgPSBjb250ZXh0LT5maXJz dGNoaWxkOyBjaGlsZCAhPSBOVUxMOyBjaGlsZCA9IGNoaWxkLT5uZXh0Y2hpbGQpCiAJewogCQlQ dXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9yZSh0dXBzdG9yZSwgdHVwZGVzYywKLQkJCQkJ CQkJICBjaGlsZCwgbmFtZSwgbGV2ZWwgKyAxKTsKKwkJCQkJCQkJICBjaGlsZCwgbmFtZSwgbGV2 ZWwgKyAxLCBmcG91dCk7CiAJfQogfQogCkBAIC0xMTcsNiArMTU3LDggQEAgUHV0TWVtb3J5Q29u dGV4dHNTdGF0c1R1cGxlU3RvcmUoVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKIERhdHVtCiBw Z19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKKwlpbnQJ CQlwaWQgPSAgUEdfR0VUQVJHX0lOVDMyKDApOworCiAJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0g KFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCVR1cGxlRGVzYwl0dXBkZXNj OwogCVR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmU7CkBAIC0xNDcsMTEgKzE4OSwyNTggQEAgcGdf Z2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKLQlQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVw bGVTdG9yZSh0dXBzdG9yZSwgdHVwZGVzYywKLQkJCQkJCQkJVG9wTWVtb3J5Q29udGV4dCwgTlVM TCwgMCk7CisJaWYgKHBpZCA9PSAtMSkKKwl7CisJCS8qCisJCSAqIFNpbmNlIHBpZCAtMSBpbmRp Y2F0ZXMgdGFyZ2V0IGlzIHRoZSBsb2NhbCBwcm9jZXNzLCBzaW1wbHkKKwkJICogdHJhdmVyc2Ug bWVtb3J5IGNvbnRleHRzLgorCQkgKi8KKwkJUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3Rv cmUodHVwc3RvcmUsIHR1cGRlc2MsCisJCQkJCQkJCVRvcE1lbW9yeUNvbnRleHQsICIiLCAwLCBO VUxMKTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogU2VuZCBzaWduYWwgZm9yIGR1bXBpbmcg bWVtb3J5IGNvbnRleHRzIHRvIHRoZSB0YXJnZXQgcHJvY2VzcywKKwkJICogYW5kIHJlYWQgdGhl IGR1bXBlZCBmaWxlLgorCQkgKi8KKwkJRklMRQkgICAqZnBpbjsKKwkJY2hhcgkJZHVtcGZpbGVb TUFYUEdQQVRIXTsKKworCQlTZW5kUHJvY1NpZ25hbChwaWQsIFBST0NTSUdfRFVNUF9NRU1PUlks IEludmFsaWRCYWNrZW5kSWQpOworCisJCXNucHJpbnRmKGR1bXBmaWxlLCBzaXplb2YoZHVtcGZp bGUpLCAicGdfbWVtdXNhZ2UvJWQiLCBwaWQpOworCisJCXdoaWxlICh0cnVlKQorCQl7CisJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCQlwZ191c2xlZXAoMTAwMDBMKTsKKworCQkJaWYg KChmcGluID0gQWxsb2NhdGVGaWxlKGR1bXBmaWxlLCBQR19CSU5BUllfUikpID09IE5VTEwpCisJ CQl7CisJCQkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCQkJZXJlcG9ydChMT0csIChlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gdGVtcG9y YXJ5IG1lbW9yeSBkdW1wIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJZHVtcGZpbGUpKSk7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJZWxvZyhERUJVRzEsICJTdWNjZWVkZWQgb3BlbmluZyB0 ZW1wb3JhcnkgbWVtb3J5IGR1bXAgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCWR1bXBmaWxlKTsK KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIHJlYWQgZHVtcGVkIGZpbGVzICovCisJCXdo aWxlICh0cnVlKQorCQl7CisJCQlEYXR1bQkJdmFsdWVzW1BHX0dFVF9CQUNLRU5EX01FTU9SWV9D T05URVhUU19DT0xTXTsKKwkJCWJvb2wJCW51bGxzW1BHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05U RVhUU19DT0xTXTsKKwkJCWNoYXIgCQluYW1lW01FTU9SWV9DT05URVhUX0RJU1BMQVlfU0laRV07 CisJCQljaGFyIAkJcGFyZW50W01FTU9SWV9DT05URVhUX0RJU1BMQVlfU0laRV07CisJCQljaGFy IAkJY2xpcHBlZF9pZGVudFtNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkVdOworCQkJaW50IGxl dmVsOworCQkJaW50IG5hbWVfbGVuOworCQkJaW50IHBhcmVudF9sZW47CisJCQlpbnQgaWRsZW47 CisKKwkJCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKKwkJCW1lbXNldChudWxs cywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwkJCXN3aXRjaCAoZmdldGMoZnBpbikpCisJCQl7CisJ CQkJLyogJ0QnCUEgbWVtb3J5IGNvbnRleHQgaW5mb3JtYXRpb24gZm9sbG93cy4gKi8KKwkJCQlj YXNlICdEJzoKKwkJCQkJaWYgKGZyZWFkKHZhbHVlcywgMSwgc2l6ZW9mKHZhbHVlcyksIGZwaW4p ICE9IHNpemVvZih2YWx1ZXMpKQorCQkJCQl7CisJCQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJ CQkJKGVycm1zZygiY29ycnVwdGVkIG1lbW9yeSBkdW1wIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQkJ CWR1bXBmaWxlKSkpOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CisJCQkJCWlmIChmcmVhZChu dWxscywgMSwgc2l6ZW9mKG51bGxzKSwgZnBpbikgIT0gc2l6ZW9mKG51bGxzKSkKKwkJCQkJewor CQkJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJCShlcnJtc2coImNvcnJ1cHRlZCBtZW1vcnkg ZHVtcCBmaWxlIFwiJXNcIiIsCisJCQkJCQkJCQlkdW1wZmlsZSkpKTsKKwkJCQkJCWdvdG8gZG9u ZTsKKwkJCQkJfQorCQkJCQlpZiAoZnJlYWQoJm5hbWVfbGVuLCAxLCBzaXplb2YoaW50KSwgZnBp bikgIT0gc2l6ZW9mKGludCkpCisJCQkJCXsKKwkJCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJ CQkoZXJybXNnKCJjb3JydXB0ZWQgbWVtb3J5IGR1bXAgZmlsZSBcIiVzXCIiLAorCQkJCQkJCQkJ ZHVtcGZpbGUpKSk7CisJCQkJCQlnb3RvIGRvbmU7CisJCQkJCX0KKwkJCQkJaWYgKGZyZWFkKG5h bWUsIDEsIG5hbWVfbGVuLCBmcGluKSAhPSBuYW1lX2xlbikKKwkJCQkJeworCQkJCQkJZXJlcG9y dChXQVJOSU5HLAorCQkJCQkJCShlcnJtc2coImNvcnJ1cHRlZCBtZW1vcnkgZHVtcCBmaWxlIFwi JXNcIiIsCisJCQkJCQkJCQlkdW1wZmlsZSkpKTsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJfQor CQkJCQluYW1lW25hbWVfbGVuXSA9ICdcMCc7CisJCQkJCWlmIChmcmVhZCgmaWRsZW4sIDEsIHNp emVvZihpbnQpLCBmcGluKSAhPSBzaXplb2YoaW50KSkKKwkJCQkJeworCQkJCQkJZXJlcG9ydChX QVJOSU5HLAorCQkJCQkJCShlcnJtc2coImNvcnJ1cHRlZCBtZW1vcnkgZHVtcCBmaWxlIFwiJXNc IiIsCisJCQkJCQkJCQlkdW1wZmlsZSkpKTsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJfQorCQkJ CQlpZiAoZnJlYWQoY2xpcHBlZF9pZGVudCwgMSwgaWRsZW4sIGZwaW4pICE9IGlkbGVuKQorCQkJ CQl7CisJCQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJKGVycm1zZygiY29ycnVwdGVkIG1l bW9yeSBkdW1wIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQkJCWR1bXBmaWxlKSkpOworCQkJCQkJZ290 byBkb25lOworCQkJCQl9CisJCQkJCWNsaXBwZWRfaWRlbnRbaWRsZW5dID0gJ1wwJzsKKwkJCQkJ aWYgKGZyZWFkKCZsZXZlbCwgMSwgc2l6ZW9mKGludCksIGZwaW4pICE9IHNpemVvZihpbnQpKQor CQkJCQl7CisJCQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJKGVycm1zZygiY29ycnVwdGVk IG1lbW9yeSBkdW1wIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQkJCWR1bXBmaWxlKSkpOworCQkJCQkJ Z290byBkb25lOworCQkJCQl9CisJCQkJCWlmIChmcmVhZCgmcGFyZW50X2xlbiwgMSwgc2l6ZW9m KGludCksIGZwaW4pICE9IHNpemVvZihpbnQpKQorCQkJCQl7CisJCQkJCQllcmVwb3J0KFdBUk5J TkcsCisJCQkJCQkJKGVycm1zZygiY29ycnVwdGVkIG1lbW9yeSBkdW1wIGZpbGUgXCIlc1wiIiwK KwkJCQkJCQkJCWR1bXBmaWxlKSkpOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CisJCQkJCWlm IChmcmVhZChwYXJlbnQsIDEsIHBhcmVudF9sZW4sIGZwaW4pICE9IHBhcmVudF9sZW4pCisJCQkJ CXsKKwkJCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCQkoZXJybXNnKCJjb3JydXB0ZWQgbWVt b3J5IGR1bXAgZmlsZSBcIiVzXCIiLAorCQkJCQkJCQkJZHVtcGZpbGUpKSk7CisJCQkJCQlnb3Rv IGRvbmU7CisJCQkJCX0KKwkJCQkJcGFyZW50W3BhcmVudF9sZW5dID0gJ1wwJzsKKworCQkJCQkv KgorCQkJCQkgKiBPdmVyd3JpdGUgc29tZSBlbGVtZW50cyBvZiB2YWx1ZXMgd2hpY2ggYXJlIG5v dCBhdmFpbGFibGUKKwkJCQkJICogZnJvbSBzZXJpYWxpemVkIHZhbHVlcy4KKwkJCQkJICovCisJ CQkJCWlmICghbnVsbHNbMF0pCisJCQkJCQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVt KG5hbWUpOworCisJCQkJCWlmICghbnVsbHNbMV0pCisJCQkJCQl2YWx1ZXNbMV0gPSBDU3RyaW5n R2V0VGV4dERhdHVtKGNsaXBwZWRfaWRlbnQpOworCisJCQkJCWlmICghbnVsbHNbMl0pCisJCQkJ CQl2YWx1ZXNbMl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHBhcmVudCk7CisKKwkJCQkJdHVwbGVz dG9yZV9wdXR2YWx1ZXModHVwc3RvcmUsIHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpOworCQkJCQli cmVhazsKKworCQkJCWNhc2UgJ0UnOgorCQkJCQlnb3RvIGRvbmU7CisKKwkJCQlkZWZhdWx0Ogor CQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJKGVycm1zZygiY29ycnVwdGVkIG1lbW9yeSBk dW1wIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQkJZHVtcGZpbGUpKSk7CisJCQkJCWdvdG8gZG9uZTsK KwkJCX0KKwkJfQorZG9uZToKKwkJRnJlZUZpbGUoZnBpbik7CisJCXVubGluayhkdW1wZmlsZSk7 CisJfQogCiAJLyogY2xlYW4gdXAgYW5kIHJldHVybiB0aGUgdHVwbGVzdG9yZSAqLwogCXR1cGxl c3RvcmVfZG9uZXN0b3JpbmcodHVwc3RvcmUpOwogCiAJcmV0dXJuIChEYXR1bSkgMDsKIH0KKwor LyoKKyAqIGR1bXBfbWVtb3J5X2NvbnRleHRzCisgKiAJRHVtcGluZyBsb2NhbCBtZW1vcnkgY29u dGV4dHMgdG8gYSBmaWxlLgorICogCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZGVsZXRlIHRoZSBm aWxlIGFzIGl0IGlzIGludGVuZGVkIHRvIGJlIHJlYWQgYnkKKyAqIAlhbm90aGVyIHByb2Nlc3Mu CisgKi8KK3N0YXRpYyB2b2lkCitkdW1wX21lbW9yeV9jb250ZXh0cyh2b2lkKQoreworCUZJTEUJ ICAgKmZwb3V0OworCWNoYXIJCXRtcGZpbGVbTUFYUEdQQVRIXTsKKwljaGFyCQlkdW1wZmlsZVtN QVhQR1BBVEhdOworCisJc25wcmludGYodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLCAicGdfbWVt dXNhZ2UvJWQudG1wIiwgTXlQcm9jUGlkKTsKKwlzbnByaW50ZihkdW1wZmlsZSwgc2l6ZW9mKGR1 bXBmaWxlKSwgInBnX21lbXVzYWdlLyVkIiwgTXlQcm9jUGlkKTsKKworCS8qCisJICogT3BlbiBh IHRlbXAgZmlsZSB0byBkdW1wIHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0LgorCSAqLworCWZw b3V0ID0gQWxsb2NhdGVGaWxlKHRtcGZpbGUsIFBHX0JJTkFSWV9XKTsKKwlpZiAoZnBvdXQgPT0g TlVMTCkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgbWVtb3J5IGNvbnRleHQg ZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCXRtcGZpbGUpKSk7CisJCXJldHVybjsKKwl9CisKKwlQ dXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9yZShOVUxMLCBOVUxMLAorCQkJCQkJCVRvcE1l bW9yeUNvbnRleHQsICIiLCAwLCBmcG91dCk7CisKKwkvKiBObyBtb3JlIG91dHB1dCB0byBiZSBk b25lLiAqLworCWZwdXRjKCdFJywgZnBvdXQpOworCisJaWYgKGZlcnJvcihmcG91dCkpCisJewor CQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJy bXNnKCJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IG1lbW9yeSBjb250ZXh0IGR1bXAgZmlsZSBc IiVzXCI6ICVtIiwKKwkJCQkJCXRtcGZpbGUpKSk7CisJCUZyZWVGaWxlKGZwb3V0KTsKKwkJdW5s aW5rKHRtcGZpbGUpOworCX0KKwllbHNlIGlmIChGcmVlRmlsZShmcG91dCkgPCAwKQorCXsKKwkJ ZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1z ZygiY291bGQgbm90IGNsb3NlIHRlbXBvcmFyeSBtZW1vcnkgY29udGV4dCBmaWxlIFwiJXNcIjog JW0iLAorCQkJCQkJdG1wZmlsZSkpKTsKKwkJdW5saW5rKHRtcGZpbGUpOworCX0KKwllbHNlIGlm IChyZW5hbWUodG1wZmlsZSwgZHVtcGZpbGUpIDwgMCkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJ CShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZW5h bWUgZHVtcCBmaWxlIFwiJXNcIiB0byBcIiVzXCI6ICVtIiwKKwkJCQkJCXRtcGZpbGUsIGR1bXBm aWxlKSkpOworCQl1bmxpbmsodG1wZmlsZSk7CisJfQorfQorCisvKgorICogUHJvY2Vzc0R1bXBN ZW1vcnlJbnRlcnJ1cHQKKyAqCisgKgkJVGhlIHBvcnRpb24gb2YgbWVtb3J5IGR1bXAgaW50ZXJy dXB0IGhhbmRsaW5nIHRoYXQgcnVucworICoJCW91dHNpZGUgb2YgdGhlIHNpZ25hbCBoYW5kbGVy LgorICovCit2b2lkCitQcm9jZXNzRHVtcE1lbW9yeUludGVycnVwdCh2b2lkKQoreworCVByb2NT aWduYWxEdW1wTWVtb3J5UGVuZGluZyA9IGZhbHNlOworCWR1bXBfbWVtb3J5X2NvbnRleHRzKCk7 Cit9CisKKy8qCisgKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGluZyBh IGR1bXAgbWVtb3J5IGNvbnRleHQuCisgKgorICoJCVNpZ25hbCBoYW5kbGVyIHBvcnRpb24gb2Yg aW50ZXJydXB0IGhhbmRsaW5nLgorICovCit2b2lkCitIYW5kbGVQcm9jU2lnbmFsRHVtcE1lbW9y eSh2b2lkKQoreworCVByb2NTaWduYWxEdW1wTWVtb3J5UGVuZGluZyA9IHRydWU7CisKKwkvKiBt YWtlIHN1cmUgdGhlIGV2ZW50IGlzIHByb2Nlc3NlZCBpbiBkdWUgY291cnNlICovCisJU2V0TGF0 Y2goTXlMYXRjaCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2Jh bHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IDZhYjgyMTY4Mzku LjQ2MzMzN2Y2NjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0zMyw2ICszMyw3IEBA IHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jRGllUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUg c2lnX2F0b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0ID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdf YXRvbWljX3QgSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsK IHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxzZTsK K3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsRHVtcE1lbW9yeVBlbmRpbmcgPSBmYWxz ZTsKIHZvbGF0aWxlIHVpbnQzMiBJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUg dWludDMyIFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVpbnQzMiBDcml0 U2VjdGlvbkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jIGIv c3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKaW5kZXggNzg2NjcyYjFiNi4uYzMxMzBkYzZmOSAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKKysrIGIvc3JjL2Jpbi9pbml0ZGIvaW5p dGRiLmMKQEAgLTIyMCw3ICsyMjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3ViZGly c1tdID0gewogCSJwZ194YWN0IiwKIAkicGdfbG9naWNhbCIsCiAJInBnX2xvZ2ljYWwvc25hcHNo b3RzIiwKLQkicGdfbG9naWNhbC9tYXBwaW5ncyIKKwkicGdfbG9naWNhbC9tYXBwaW5ncyIsCisJ InBnX21lbXVzYWdlIgogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAv dC8wMTBfcGdfYmFzZWJhY2t1cC5wbCBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19i YXNlYmFja3VwLnBsCmluZGV4IGY2NzRhN2M5NGUuLjY4M2MyZDU0MDggMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsCisrKyBiL3NyYy9iaW4v cGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsCkBAIC0xMjQsNyArMTI0LDcgQEAg aXNfZGVlcGx5KAogCiAjIENvbnRlbnRzIG9mIHRoZXNlIGRpcmVjdG9yaWVzIHNob3VsZCBub3Qg YmUgY29waWVkLgogZm9yZWFjaCBteSAkZGlybmFtZSAoCi0JcXcocGdfZHluc2htZW0gcGdfbm90 aWZ5IHBnX3JlcGxzbG90IHBnX3NlcmlhbCBwZ19zbmFwc2hvdHMgcGdfc3RhdF90bXAgcGdfc3Vi dHJhbnMpCisJcXcocGdfZHluc2htZW0gcGdfbm90aWZ5IHBnX3JlcGxzbG90IHBnX3NlcmlhbCBw Z19zbmFwc2hvdHMgcGdfc3RhdF90bXAgcGdfc3VidHJhbnMgcGdfbWVtdXNhZ2UpCiAgICkKIHsK IAlpc19kZWVwbHkoCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMgYi9z cmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMKaW5kZXggMTg3OTI1N2I2Ni4uMjM0NzEwMDdkOCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQvZmlsZW1hcC5jCisrKyBiL3NyYy9iaW4vcGdf cmV3aW5kL2ZpbGVtYXAuYwpAQCAtODUsNiArODUsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqZXhj bHVkZURpckNvbnRlbnRzW10gPQogCS8qIENvbnRlbnRzIHplcm9lZCBvbiBzdGFydHVwLCBzZWUg U3RhcnR1cFNVQlRSQU5TKCkuICovCiAJInBnX3N1YnRyYW5zIiwKIAorCS8qIFNraXAgbWVtb3J5 IGNvbnRleHQgZHVtcGVkIGZpbGVzLiAqLworCSJwZ19tZW11c2FnZSIsCisKIAkvKiBlbmQgb2Yg bGlzdCAqLwogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAxZGQzMjVlMGU2 Li5iNjg1OWIyM2U4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTc4MTIsOSArNzgxMiwx MCBAQAogeyBvaWQgPT4gJzIyODInLCBkZXNjciA9PiAnaW5mb3JtYXRpb24gYWJvdXQgYWxsIG1l bW9yeSBjb250ZXh0cyBvZiBsb2NhbCBiYWNrZW5kJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2Jh Y2tlbmRfbWVtb3J5X2NvbnRleHRzJywgcHJvcm93cyA9PiAnMTAwJywgcHJvcmV0c2V0ID0+ICd0 JywKICAgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAncicsIHByb3JldHR5cGUg PT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICcnLAotICBwcm9hbGxhcmd0eXBlcyA9PiAne3Rl eHQsdGV4dCx0ZXh0LGludDQsaW50OCxpbnQ4LGludDgsaW50OCxpbnQ4fScsCi0gIHByb2FyZ21v ZGVzID0+ICd7byxvLG8sbyxvLG8sbyxvLG99JywKLSAgcHJvYXJnbmFtZXMgPT4gJ3tuYW1lLCBp ZGVudCwgcGFyZW50LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFsX25ibG9ja3MsIGZyZWVfYnl0 ZXMsIGZyZWVfY2h1bmtzLCB1c2VkX2J5dGVzfScsCisgIHByb3ZvbGF0aWxlID0+ICd2JywgcHJv cGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAn aW50NCcsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7aW50NCx0ZXh0LHRleHQsdGV4dCxpbnQ0LGlu dDgsaW50OCxpbnQ4LGludDgsaW50OH0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ksbyxvLG8sbyxv LG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3twaWQsIG5hbWUsIGlkZW50LCBwYXJlbnQs IGxldmVsLCB0b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVu a3MsIHVzZWRfYnl0ZXN9JywKICAgcHJvc3JjID0+ICdwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29u dGV4dHMnIH0sCiAKICMgbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRl eCA3MmUzMzUyMzk4Li44MTIwMzJiYjE1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRt aW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtODMsNiArODMsNyBAQCBleHRl cm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFF1ZXJ5Q2FuY2VsUGVuZGluZzsK IGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY0RpZVBlbmRpbmc7 CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVJblRyYW5zYWN0 aW9uU2Vzc2lvblRpbWVvdXRQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmc7CitleHRlcm4gUEdETExJTVBPUlQg dm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxEdW1wTWVtb3J5UGVuZGluZzsKIAogZXh0 ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDbGllbnRDb25uZWN0aW9uTG9z dDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCA1Y2IzOTY5N2YzLi41ZGI5MmE5YTUy IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApAQCAtMzQsNiArMzQsNyBAQCB0eXBlZGVmIGVu dW0KIAlQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0UsCS8qIG1lc3NhZ2UgZnJvbSBjb29wZXJhdGlu ZyBwYXJhbGxlbCBiYWNrZW5kICovCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORywJLyog YXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCiAJUFJPQ1NJR19CQVJS SUVSLAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KKwlQUk9DU0lHX0RVTVBfTUVN T1JZLAkJLyogcmVxdWVzdCBkdW1waW5nIG1lbW9yeSBjb250ZXh0IGludGVycnVwdCAqLwogCiAJ LyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfREFUQUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9tY3h0ZnVuY3MuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL21jeHRmdW5jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLmNkNzRiYjY3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9tY3h0ZnVuY3MuaApAQCAtMCwwICsxLDIxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBtY3h0ZnVuY3MuaAorICoJICBEZWNsYXJhdGlvbnMgZm9yIHNob3dpbmcgYmFja2VuZCBt ZW1vcnkgY29udGV4dC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMCwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVu Y3MuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIE1DWFRfSAorI2RlZmlu ZSBNQ1hUX0gKKworZXh0ZXJuIHZvaWQgUHJvY2Vzc0R1bXBNZW1vcnlJbnRlcnJ1cHQodm9pZCk7 CitleHRlcm4gdm9pZCBIYW5kbGVQcm9jU2lnbmFsRHVtcE1lbW9yeSh2b2lkKTsKKworI2VuZGlm CQkJCQkJCS8qIE1DWFRfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ydWxlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCAy YTE4ZGM0MjNlLi45OTBiNTRkNzc3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApA QCAtMTMzMyw3ICsxMzMzLDcgQEAgcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHN8IFNFTEVDVCBw Z19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMubmFtZSwKICAgICBwZ19nZXRfYmFja2VuZF9t ZW1vcnlfY29udGV4dHMuZnJlZV9ieXRlcywKICAgICBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29u dGV4dHMuZnJlZV9jaHVua3MsCiAgICAgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzLnVz ZWRfYnl0ZXMKLSAgIEZST00gcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkgcGdfZ2V0 X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKG5hbWUsIGlkZW50LCBwYXJlbnQsIGxldmVsLCB0b3Rh bF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3MsIHVzZWRfYnl0 ZXMpOworICAgRlJPTSBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoJy0xJzo6aW50ZWdl cikgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKG5hbWUsIGlkZW50LCBwYXJlbnQsIGxl dmVsLCB0b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3Ms IHVzZWRfYnl0ZXMpOwogcGdfY29uZmlnfCBTRUxFQ1QgcGdfY29uZmlnLm5hbWUsCiAgICAgcGdf Y29uZmlnLnNldHRpbmcKICAgIEZST00gcGdfY29uZmlnKCkgcGdfY29uZmlnKG5hbWUsIHNldHRp bmcpOwotLSAKMi4xOC4xCgo= --=_35f63dca7ff929c17aff1408cc895d9f--