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 1jpk3b-0006i8-9X for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2020 03:02:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jpk3Y-0002sO-TO for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2020 03:02:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jpk3Y-0002sH-Ja for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2020 03:02:04 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jpk3U-0007Tp-My for pgsql-hackers@postgresql.org; Mon, 29 Jun 2020 03:02:03 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id CE7EE60163; Mon, 29 Jun 2020 12:01:55 +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="=_f25f77068b9d5ad19ce6311280d621b7" Date: Mon, 29 Jun 2020 12:01:55 +0900 From: torikoshia To: "Robert Haas Fujii Masao" Cc: pgsql-hackers@postgresql.org Subject: Re: Creating a function for exposing memory usage of backend process In-Reply-To: References: <72a656e0f71d0860161e0b3f67e4d771@oss.nttdata.com> <398eb7cd-5f75-be1c-3897-36865b7bfabf@oss.nttdata.com> Message-ID: <3193c7d590f3212e543b63df977da758@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 --=_f25f77068b9d5ad19ce6311280d621b7 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-06-20 03:11, Robert Haas wrote: > On Wed, Jun 17, 2020 at 11:56 PM Fujii Masao > wrote: >> > As a first step, to deal with (3) I'd like to add >> > pg_stat_get_backend_memory_context() which target is limited to the >> > local backend process. >> >> +1 > > +1 from me, too. Attached a patch that adds a function exposing memory usage of local backend. It's almost same as pg_cheat_funcs's pg_stat_get_memory_context(). I've also added MemoryContexts identifier because it seems useful to distinguish the same kind of memory contexts. For example, when there are many prepared statements we can distinguish them using identifiers, which shows the cached query. =# SELECT name, ident FROM pg_stat_get_memory_contexts() WHERE name = 'CachedPlanSource'; name | ident ------------------+-------------------------------- CachedPlanSource | PREPARE q1(text) AS SELECT ..; CachedPlanSource | PREPARE q2(text) AS SELECT ..; (2 rows) > Something that exposed this via shared memory would > be quite useful, and there are other things we'd like to expose > similarly, such as the plan(s) from the running queries, or even just > the untruncated query string(s). I'd like to have a good > infrastructure for that sort of thing, but I think it's quite tricky > to do properly. You need a variable-size chunk of shared memory, so > probably it has to use DSM somehow, and you need to update it as > things change, but if you update it too frequently performance will > stink. If you ping processes to do the updates, how do you know when > they've completed them, and what happens if they don't respond in a > timely fashion? These are probably all solvable problems, but I don't > think they are very easy ones. Thanks for your comments! It seems hard as you pointed out. I'm going to consider it along with the advice of Fujii and Kasahara. Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_f25f77068b9d5ad19ce6311280d621b7 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-Adding-a-function-exposing-memory-usage-of-local-backend.patch Content-Disposition: attachment; filename*0*=UTF-8''0001-Adding-a-function-exposing-memory-usage-of-local-; filename*1*=backend.patch; size=8883 RnJvbSAwNTVhZjkwM2EzZGJmMTQ2ZDk3ZGQzZmIwMWE2YTdkM2QzYmQyYWUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgMjkgSnVuIDIwMjAgMDc6NDg6NDkgKzA5MDAKU3ViamVjdDog W1BBVENIXSBBZGQgYSBmdW5jdGlvbiBleHBvc2luZyBtZW1vcnkgdXNhZ2Ugb2YgbG9jYWwgYmFj a2VuZC4KCkJhY2tlbmQgcHJvY2Vzc2VzIHNvbWV0aW1lcyB1c2UgYSBsb3Qgb2YgbWVtb3J5IGJl Y2F1c2Ugb2YgdmFyaW91cwpyZWFzb25zIGxpa2UgY2FjaGVzLCBwcmVwYXJlZCBzdGF0ZW1lbnRz IGFuZCBjdXJzb3JzLgoKUHJldmlvdXNseSwgdGhlIG9ubHkgd2F5IHRvIGV4YW1pbmUgdGhlIHVz YWdlIG9mIGJhY2tlbmQgcHJvY2Vzc2VzCndhcyBhdHRhY2hpbmcgYSBkZWJ1Z2dlciBhbmQgY2Fs bCBNZW1vcnlDb250ZXh0U3RhdHMoKSBhbmQgaXQgd2FzCm5vdCBzbyBjb252ZW5pZW50IGluIHNv bWUgY2FzZXMuCgpUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBuZXcgU1FMLWNhbGxhYmxlIGZ1bmN0 aW9uCnBnX3N0YXRfZ2V0X21lbW9yeV9jb250ZXh0cygpIHdoaWNoIGV4cG9zZXMgbWVtb3J5IHVz YWdlIG9mIHRoZQpsb2NhbCBiYWNrZW5kLgotLS0KIGRvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNn bWwgICAgICAgIHwgMTQgKysrKysKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMgICAg IHwgODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ3N0YXRmdW5jcy5jIHwgNDUgKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdCAgICAgfCAgOSArKysrCiBzcmMvaW5jbHVkZS9wZ3N0YXQuaCAgICAgICAg ICAgICAgICB8ICA2ICsrLQogNSBmaWxlcyBjaGFuZ2VkLCAxNTMgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgYi9k b2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCmluZGV4IGRmYTlkMGQ2NDEuLjc0Yzg2NjM5ODEg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL21vbml0b3Jpbmcuc2dtbApAQCAtNDYxNyw2ICs0NjE3LDIwIEBAIFNFTEVDVCBwaWQsIHdh aXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2Fp dF9ldmVudCBpCiAgICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KIAorICAgICAg PHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0i ZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+ cGdfc3RhdF9nZXRfbWVtb3J5X2NvbnRleHRzPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVy bT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX3N0YXRfZ2V0X21lbW9yeV9jb250ZXh0czwvZnVuY3Rp b24+ICgpCisgICAgICAgIDxyZXR1cm52YWx1ZT5zZXRvZiByZWNvcmQ8L3JldHVybnZhbHVlPgor ICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmV0dXJucyByZWNvcmRzIG9m IGluZm9ybWF0aW9uIGFib3V0IGFsbCBtZW1vcnkgY29udGV4dHMgb2YgdGhlCisgICAgICAgIGxv Y2FsIGJhY2tlbmQuCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKwogICAg ICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9s ZT0iZnVuY19zaWduYXR1cmUiPgogICAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdz dGF0LmMKaW5kZXggYzAyMjU5N2JjMC4uMTQwZjExMTY1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wZ3N0YXQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bnc3Rh dC5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKICNpbmNsdWRlICJ1dGlscy9hc2NpaS5oIgor I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKQEAg LTE2Nyw2ICsxNjgsMTMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNscnVfbmFtZXNbXSA9 IHsKICAqLwogc3RhdGljIFBnU3RhdF9Nc2dTTFJVIFNMUlVTdGF0c1tTTFJVX05VTV9FTEVNRU5U U107CiAKKy8qIC0tLS0tLS0tLS0KKyAqIFRoZSBtYXggYnl0ZXMgZm9yIHNob3dpbmcgaWRlbnRp ZmllcnMgb2YgTWVtb3J5Q29udGV4dC4KKyAqIC0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBNRU1P UllfQ09OVEVYVF9JREVOVF9TSVpFCTEwMjQKKworCiAvKiAtLS0tLS0tLS0tCiAgKiBMb2NhbCBk YXRhCiAgKiAtLS0tLS0tLS0tCkBAIC0yNjkxLDYgKzI2OTksNzggQEAgcGdzdGF0X2ZldGNoX3Ns cnUodm9pZCkKIAlyZXR1cm4gc2xydVN0YXRzOwogfQogCit2b2lkCitwZ3N0YXRfcHV0X21lbW9y eV9jb250ZXh0c190dXBsZXN0b3JlKFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmUsCisJCQkJCQkJ CSAgVHVwbGVEZXNjIHR1cGRlc2MsIE1lbW9yeUNvbnRleHQgY29udGV4dCwKKwkJCQkJCQkJICBN ZW1vcnlDb250ZXh0IHBhcmVudCwgaW50IGxldmVsKQoreworI2RlZmluZSBQR19TVEFUX0dFVF9N RU1PUllfQ09OVEVYVF9DT0xTCTkKKwlEYXR1bQkJdmFsdWVzW1BHX1NUQVRfR0VUX01FTU9SWV9D T05URVhUX0NPTFNdOworCWJvb2wJCW51bGxzW1BHX1NUQVRfR0VUX01FTU9SWV9DT05URVhUX0NP TFNdOworCU1lbW9yeUNvbnRleHRDb3VudGVycyBzdGF0OworCU1lbW9yeUNvbnRleHQgY2hpbGQ7 CisJY29uc3QgY2hhciAqbmFtZSA9IGNvbnRleHQtPm5hbWU7CisJY29uc3QgY2hhciAqaWRlbnQg PSBjb250ZXh0LT5pZGVudDsKKworCWlmIChjb250ZXh0ID09IE5VTEwpCisJCXJldHVybjsKKwor CS8qCisJICogSXQgc2VlbXMgcHJlZmVyYWJsZSB0byBsYWJlbCBkeW5haGFzaCBjb250ZXh0cyB3 aXRoIGp1c3QgdGhlIGhhc2ggdGFibGUKKwkgKiBuYW1lLiAgVGhvc2UgYXJlIGFscmVhZHkgdW5p cXVlIGVub3VnaCwgc28gdGhlICJkeW5haGFzaCIgcGFydCBpc24ndAorCSAqIHZlcnkgaGVscGZ1 bCwgYW5kIHRoaXMgd2F5IGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIHByZS12MTEgcHJhY3RpY2Uu CisJICovCisJaWYgKGlkZW50ICYmIHN0cmNtcChuYW1lLCAiZHluYWhhc2giKSA9PSAwKQorCXsK KwkJbmFtZSA9IGlkZW50OworCQlpZGVudCA9IE5VTEw7CisJfQorCisJLyogRXhhbWluZSB0aGUg Y29udGV4dCBpdHNlbGYgKi8KKwltZW1zZXQoJnN0YXQsIDAsIHNpemVvZihzdGF0KSk7CisJKCpj b250ZXh0LT5tZXRob2RzLT5zdGF0cykgKGNvbnRleHQsIE5VTEwsICh2b2lkICopICZsZXZlbCwg JnN0YXQpOworCisJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKKwl2YWx1ZXNbMF0g PSBDU3RyaW5nR2V0VGV4dERhdHVtKG5hbWUpOworCisJaWYgKGlkZW50KQorCXsKKwkJaW50CQlp ZGxlbiA9IHN0cmxlbihpZGVudCk7CisJCWNoYXIJCWNsaXBwZWRfaWRlbnRbTUVNT1JZX0NPTlRF WFRfSURFTlRfU0laRV07CisKKwkJLyoKKwkJICogU29tZSBpZGVudGlmaWVycyBzdWNoIGFzIFNR TCBxdWVyeSBzdHJpbmcgY2FuIGJlIHZlcnkgbG9uZywKKwkJICogdHJ1bmNhdGUgb3ZlcnNpemUg aWRlbnRpZmllcnMuCisJCSAqLworCQlpZiAoaWRsZW4gPj0gTUVNT1JZX0NPTlRFWFRfSURFTlRf U0laRSkKKwkJCWlkbGVuID0gcGdfbWJjbGlwbGVuKGlkZW50LCBpZGxlbiwgTUVNT1JZX0NPTlRF WFRfSURFTlRfU0laRSAtIDEpOworCisJCW1lbWNweShjbGlwcGVkX2lkZW50LCBpZGVudCwgaWRs ZW4pOworCQljbGlwcGVkX2lkZW50W2lkbGVuXSA9ICdcMCc7CisJCXZhbHVlc1sxXSA9IENTdHJp bmdHZXRUZXh0RGF0dW0oY2xpcHBlZF9pZGVudCk7CisJfQorCWVsc2UKKwkJbnVsbHNbMV0gPSB0 cnVlOworCisJaWYgKHBhcmVudCA9PSBOVUxMKQorCQludWxsc1syXSA9IHRydWU7CisJZWxzZQor CQl2YWx1ZXNbMl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHBhcmVudC0+bmFtZSk7CisJdmFsdWVz WzNdID0gSW50MzJHZXREYXR1bShsZXZlbCk7CisJdmFsdWVzWzRdID0gSW50NjRHZXREYXR1bShz dGF0LnRvdGFsc3BhY2UpOworCXZhbHVlc1s1XSA9IEludDY0R2V0RGF0dW0oc3RhdC5uYmxvY2tz KTsKKwl2YWx1ZXNbNl0gPSBJbnQ2NEdldERhdHVtKHN0YXQuZnJlZXNwYWNlKTsKKwl2YWx1ZXNb N10gPSBJbnQ2NEdldERhdHVtKHN0YXQuZnJlZWNodW5rcyk7CisJdmFsdWVzWzhdID0gSW50NjRH ZXREYXR1bShzdGF0LnRvdGFsc3BhY2UgLSBzdGF0LmZyZWVzcGFjZSk7CisJdHVwbGVzdG9yZV9w dXR2YWx1ZXModHVwc3RvcmUsIHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpOworCisJZm9yIChjaGls ZCA9IGNvbnRleHQtPmZpcnN0Y2hpbGQ7IGNoaWxkICE9IE5VTEw7IGNoaWxkID0gY2hpbGQtPm5l eHRjaGlsZCkKKwl7CisJCXBnc3RhdF9wdXRfbWVtb3J5X2NvbnRleHRzX3R1cGxlc3RvcmUodHVw c3RvcmUsIHR1cGRlc2MsCisJCQkJCQkJCQkgIGNoaWxkLCBjb250ZXh0LCBsZXZlbCArIDEpOwor CX0KK30KKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9ucyBmb3IgbWFuYWdlbWVudCBvZiB0aGUgc2hh cmVkLW1lbW9yeSBQZ0JhY2tlbmRTdGF0dXMgYXJyYXkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1 bmNzLmMKaW5kZXggMmFmZjczOTQ2Ni4uM2UyMWI0N2I2MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bn c3RhdGZ1bmNzLmMKQEAgLTExODIsNiArMTE4Miw1MSBAQCBwZ19zdGF0X2dldF9iYWNrZW5kX2Ns aWVudF9hZGRyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkJCQkJIENTdHJpbmdHZXREYXR1bShy ZW1vdGVfaG9zdCkpKTsKIH0KIAorRGF0dW0KK3BnX3N0YXRfZ2V0X21lbW9yeV9jb250ZXh0cyhQ R19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJ bmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlUdXBsZXN0 b3Jlc3RhdGUgKnR1cHN0b3JlOworCU1lbW9yeUNvbnRleHQgcGVyX3F1ZXJ5X2N0eDsKKwlNZW1v cnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgY2FsbGVyIHN1cHBv cnRzIHVzIHJldHVybmluZyBhIHR1cGxlc3RvcmUgKi8KKwlpZiAocnNpbmZvID09IE5VTEwgfHwg IUlzQShyc2luZm8sIFJldHVyblNldEluZm8pKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJzZXQtdmFs dWVkIGZ1bmN0aW9uIGNhbGxlZCBpbiBjb250ZXh0IHRoYXQgY2Fubm90IGFjY2VwdCBhIHNldCIp KSk7CisJaWYgKCEocnNpbmZvLT5hbGxvd2VkTW9kZXMgJiBTRlJNX01hdGVyaWFsaXplKSkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCisJCQkJIGVycm1zZygibWF0ZXJpYWxpemUgbW9kZSByZXF1aXJlZCwgYnV0IGl0IGlzIG5v dCBhbGxvd2VkIGluIHRoaXMgY29udGV4dCIpKSk7CisKKwkvKiBCdWlsZCBhIHR1cGxlIGRlc2Ny aXB0b3IgZm9yIG91ciByZXN1bHQgdHlwZSAqLworCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShm Y2luZm8sIE5VTEwsICZ0dXBkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCWVsb2coRVJS T1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKworCXBlcl9xdWVyeV9jdHgg PSByc2luZm8tPmVjb250ZXh0LT5lY3h0X3Blcl9xdWVyeV9tZW1vcnk7CisJb2xkY29udGV4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZXJfcXVlcnlfY3R4KTsKKworCXR1cHN0b3JlID0gdHVw bGVzdG9yZV9iZWdpbl9oZWFwKHRydWUsIGZhbHNlLCB3b3JrX21lbSk7CisJcnNpbmZvLT5yZXR1 cm5Nb2RlID0gU0ZSTV9NYXRlcmlhbGl6ZTsKKwlyc2luZm8tPnNldFJlc3VsdCA9IHR1cHN0b3Jl OworCXJzaW5mby0+c2V0RGVzYyA9IHR1cGRlc2M7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7CisKKwl0dXBkZXNjID0gcnNpbmZvLT5zZXREZXNjOworCXR1cHN0b3JlID0g cnNpbmZvLT5zZXRSZXN1bHQ7CisKKwlwZ3N0YXRfcHV0X21lbW9yeV9jb250ZXh0c190dXBsZXN0 b3JlKHR1cHN0b3JlLCB0dXBkZXNjLAorCQkJCQkJCQkJCSAgVG9wTWVtb3J5Q29udGV4dCwgTlVM TCwgMCk7CisKKwkvKiBjbGVhbiB1cCBhbmQgcmV0dXJuIHRoZSB0dXBsZXN0b3JlICovCisJdHVw bGVzdG9yZV9kb25lc3RvcmluZyh0dXBzdG9yZSk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQor CiBEYXR1bQogcGdfc3RhdF9nZXRfYmFja2VuZF9jbGllbnRfcG9ydChQR19GVU5DVElPTl9BUkdT KQogewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNjFmMmMyZjViNC4uOGQxZTYzZmJjYSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC01MzI5LDYgKzUzMjksMTUgQEAKICAgcHJvbmFt ZSA9PiAncGdfc3RhdF9nZXRfZGJfYmxvY2tzX2hpdCcsIHByb3ZvbGF0aWxlID0+ICdzJywKICAg cHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4g J29pZCcsCiAgIHByb3NyYyA9PiAncGdfc3RhdF9nZXRfZGJfYmxvY2tzX2hpdCcgfSwKK3sgb2lk ID0+ICcyMjgyJywgcHJvcm93cyA9PiAnMTAwJywgcHJvcmV0c2V0ID0+ICd0JywKKyAgZGVzY3Ig PT4gJ3N0YXRpc3RpY3M6IGluZm9ybWF0aW9uIGFib3V0IGFsbCBtZW1vcnkgY29udGV4dHMgb2Yg bG9jYWwgYmFja2VuZCcsCisgIHByb25hbWUgPT4gJ3BnX3N0YXRfZ2V0X21lbW9yeV9jb250ZXh0 cycsIHByb3ZvbGF0aWxlID0+ICd2JywKKyAgcHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBl ID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnJywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3t0 ZXh0LHRleHQsdGV4dCxpbnQ0LGludDgsaW50OCxpbnQ4LGludDgsaW50OH0nLAorICBwcm9hcmdt b2RlcyA9PiAne28sbyxvLG8sbyxvLG8sbyxvfScsCisgIHByb2FyZ25hbWVzID0+ICd7bmFtZSwg aWRlbnQsIHBhcmVudCwgbGV2ZWwsIHRvdGFsX2J5dGVzLCB0b3RhbF9uYmxvY2tzLCBmcmVlX2J5 dGVzLCBmcmVlX2NodW5rcywgdXNlZF9ieXRlc30nLAorICBwcm9zcmMgPT4gJ3BnX3N0YXRfZ2V0 X21lbW9yeV9jb250ZXh0cycgfSwKKyAgcHJvc3JjID0+ICdwZ19zdGF0X2dldF9iYWNrZW5kX21l bW9yeV9jb250ZXh0cycgfSwKIHsgb2lkID0+ICcyNzU4JywgZGVzY3IgPT4gJ3N0YXRpc3RpY3M6 IHR1cGxlcyByZXR1cm5lZCBmb3IgZGF0YWJhc2UnLAogICBwcm9uYW1lID0+ICdwZ19zdGF0X2dl dF9kYl90dXBsZXNfcmV0dXJuZWQnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3BhcmFsbGVs ID0+ICdyJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICdvaWQnLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRl eCAxMzg3MjAxMzgyLi42YTQzYmQ4ZTYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wZ3N0YXQu aAorKysgYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUg InN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1 dGlscy9yZWxjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKIAogCiAvKiAt LS0tLS0tLS0tCkBAIC0xNDc0LDcgKzE0NzUsMTAgQEAgZXh0ZXJuIGludAlwZ3N0YXRfZmV0Y2hf c3RhdF9udW1iYWNrZW5kcyh2b2lkKTsKIGV4dGVybiBQZ1N0YXRfQXJjaGl2ZXJTdGF0cyAqcGdz dGF0X2ZldGNoX3N0YXRfYXJjaGl2ZXIodm9pZCk7CiBleHRlcm4gUGdTdGF0X0dsb2JhbFN0YXRz ICpwZ3N0YXRfZmV0Y2hfZ2xvYmFsKHZvaWQpOwogZXh0ZXJuIFBnU3RhdF9TTFJVU3RhdHMgKnBn c3RhdF9mZXRjaF9zbHJ1KHZvaWQpOwotCitleHRlcm4gdm9pZCBwZ3N0YXRfcHV0X21lbW9yeV9j b250ZXh0c190dXBsZXN0b3JlKFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmUsCisJCQkJCQkJCQlU dXBsZURlc2MgdHVwZGVzYywKKwkJCQkJCQkJCU1lbW9yeUNvbnRleHQgY29udGV4dCwKKwkJCQkJ CQkJCU1lbW9yeUNvbnRleHQgcGFyZW50LCBpbnQgbGV2ZWwpOwogZXh0ZXJuIHZvaWQgcGdzdGF0 X2NvdW50X3NscnVfcGFnZV96ZXJvZWQoaW50IHNscnVfaWR4KTsKIGV4dGVybiB2b2lkIHBnc3Rh dF9jb3VudF9zbHJ1X3BhZ2VfaGl0KGludCBzbHJ1X2lkeCk7CiBleHRlcm4gdm9pZCBwZ3N0YXRf Y291bnRfc2xydV9wYWdlX3JlYWQoaW50IHNscnVfaWR4KTsKLS0gCjIuMTguMQoK --=_f25f77068b9d5ad19ce6311280d621b7--