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 1lMWAA-0005bh-D8 for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Mar 2021 13:24:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lMWA9-0002T4-1B for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Mar 2021 13:24:37 +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 1lMWA8-0002Sx-O1 for pgsql-hackers@lists.postgresql.org; Wed, 17 Mar 2021 13:24:36 +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 1lMWA4-0004Xc-KJ for pgsql-hackers@postgresql.org; Wed, 17 Mar 2021 13:24:36 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 8F0DB625DB; Wed, 17 Mar 2021 22:24:27 +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="=_b996b4b1c54b83e76a30764401d3f095" Date: Wed, 17 Mar 2021 22:24:27 +0900 From: torikoshia To: PostgreSQL-development , Fujii Masao Cc: Tom Lane , Georgios Kokolatos , Kasahara Tatsuhito , craig@2ndquadrant.com Subject: Re: Get memory contexts of an arbitrary backend process In-Reply-To: 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> <4ae7b086a5b49fdfec7c1154d6fc7a40@oss.nttdata.com> <40c1a4b19ad03beacee2642a3cd61c14@oss.nttdata.com> <9a50371e15e741e295accabc72a41df1@oss.nttdata.com> Message-ID: <70ae4b79eb8b0dcf42161c80a00e3f22@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: Archived-At: Precedence: bulk --=_b996b4b1c54b83e76a30764401d3f095 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2021-03-05 14:22, Fujii Masao wrote: > On 2021/03/04 18:32, torikoshia wrote: >> On 2021-01-14 19:11, torikoshia wrote: >>> Since pg_get_target_backend_memory_contexts() waits to dump memory >>> and >>> it could lead dead lock as below. >>> >>>   - session1 >>>   BEGIN; TRUNCATE t; >>> >>>   - session2 >>>   BEGIN; TRUNCATE t; -- wait >>> >>>   - session1 >>>   SELECT * FROM pg_get_target_backend_memory_contexts(>> 2>); --wait >>> >>> >>> Thanks for notifying me, Fujii-san. >>> >>> >>> Attached v8 patch that prohibited calling the function inside >>> transactions. >> >> Regrettably, this modification could not cope with the advisory lock >> and >> I haven't come up with a good way to deal with it. >> >> It seems to me that the architecture of the requestor waiting for the >> dumper leads to this problem and complicates things. >> >> >> Considering the discussion printing backtrace discussion[1], it seems >> reasonable that the requestor just sends a signal and dumper dumps to >> the log file. > > +1 Thanks! I remade the patch and introduced a function pg_print_backend_memory_contexts(PID) which prints the memory contexts of the specified PID to elog. =# SELECT pg_print_backend_memory_contexts(450855); ** log output ** 2021-03-17 15:21:01.942 JST [450855] LOG: Printing memory contexts of PID 450855 2021-03-17 15:21:01.942 JST [450855] LOG: level: 0 TopMemoryContext: 68720 total in 5 blocks; 16312 free (15 chunks); 52408 used 2021-03-17 15:21:01.942 JST [450855] LOG: level: 1 Prepared Queries: 65536 total in 4 blocks; 35088 free (14 chunks); 30448 used 2021-03-17 15:21:01.942 JST [450855] LOG: level: 1 pgstat TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 chunks); 6784 used ..(snip).. 2021-03-17 15:21:01.942 JST [450855] LOG: level: 2 CachedPlanSource: 4096 total in 3 blocks; 680 free (0 chunks); 3416 used: PREPARE hoge_200 AS SELECT * FROM pgbench_accounts WHERE aid = 1111111111111111111111111111111111111... 2021-03-17 15:21:01.942 JST [450855] LOG: level: 3 CachedPlanQuery: 4096 total in 3 blocks; 464 free (0 chunks); 3632 used ..(snip).. 2021-03-17 15:21:01.945 JST [450855] LOG: level: 1 Timezones: 104128 total in 2 blocks; 2584 free (0 chunks); 101544 used 2021-03-17 15:21:01.945 JST [450855] LOG: level: 1 ErrorContext: 8192 total in 1 blocks; 7928 free (5 chunks); 264 used 2021-03-17 15:21:01.945 JST [450855] LOG: Grand total: 2802080 bytes in 1399 blocks; 480568 free (178 chunks); 2321512 used As above, the output is almost the same as MemoryContextStatsPrint() except for the way of expression of the level. MemoryContextStatsPrint() uses indents, but pg_print_backend_memory_contexts() writes it as "level: %d". Since there was discussion about enlarging StringInfo may cause errors on OOM[1], this patch calls elog for each context. As with MemoryContextStatsPrint(), each context shows 100 children at most. I once thought it should be configurable, but something like pg_print_backend_memory_contexts(PID, num_children) needs to send the 'num_children' from requestor to dumper and it seems to require another infrastructure. Creating a new GUC for this seems overkill. If MemoryContextStatsPrint(), i.e. showing 100 children at most is enough, this hard limit may be acceptable. Only superusers can call pg_print_backend_memory_contexts(). I'm going to add documentation and regression tests. Any thoughts? [1] https://www.postgresql.org/message-id/CAMsr%2BYGh%2Bsso5N6Q%2BFmYHLWC%3DBPCzA%2B5GbhYZSGruj2d0c7Vvg%40mail.gmail.com "r_d/strengthen_perf/print_memcon.md" 110L, 5642C written Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_b996b4b1c54b83e76a30764401d3f095 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v1-0001-Add-memorycontext-elog-print.patch Content-Disposition: attachment; filename=v1-0001-Add-memorycontext-elog-print.patch; size=21203 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwppbmRleCBjNmE4ZDQ2MTFlLi5lMTE2ZjRh MWJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0zMCw2ICszMCw3IEBA CiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgi CiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CiAKIC8qCiAgKiBUaGUgU0lHVVNSMSBzaWduYWwgaXMgbXVsdGlwbGV4ZWQgdG8gc3VwcG9ydCBz aWduYWxpbmcgbXVsdGlwbGUgZXZlbnQKQEAgLTQ0MCw2ICs0NDEsMjAgQEAgSGFuZGxlUHJvY1Np Z25hbEJhcnJpZXJJbnRlcnJ1cHQodm9pZCkKIAkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9j c2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAqLwogfQogCisvKgorICogSGFuZGxlUHJvY1NpZ25hbFBy aW50TWVtb3J5Q29udGV4dAorICoKKyAqIEhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVycnVwdCBp bmRpY2F0aW5nIHByaW50IG1lbW9yeSBjb250ZXh0LgorICogU2lnbmFsIGhhbmRsZXIgcG9ydGlv biBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitIYW5kbGVQcm9jU2ln bmFsUHJpbnRNZW1vcnlDb250ZXh0KHZvaWQpCit7CisJSW50ZXJydXB0UGVuZGluZyA9IHRydWU7 CisJUHJpbnRNZW1vcnlDb250ZXh0UGVuZGluZyA9IHRydWU7CisJLyogbGF0Y2ggd2lsbCBiZSBz ZXQgYnkgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIgKi8KK30KKwogLyoKICAqIFBlcmZvcm0g Z2xvYmFsIGJhcnJpZXIgcmVsYXRlZCBpbnRlcnJ1cHQgY2hlY2tpbmcuCiAgKgpAQCAtNTgwLDYg KzU5NSwyNSBAQCBQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIodm9pZCkKIAlDb25kaXRpb25WYXJp YWJsZUJyb2FkY2FzdCgmTXlQcm9jU2lnbmFsU2xvdC0+cHNzX2JhcnJpZXJDVik7CiB9CiAKKy8q CisgKiBQcm9jZXNzUHJpbnRNZW1vcnlDb250ZXh0SW50ZXJydXB0CisgKgkJVGhlIHBvcnRpb24g b2YgcHJpbnQgbWVtb3J5IGNvbnRleHQgaW50ZXJydXB0IGhhbmRsaW5nIHRoYXQgcnVucworICoJ CW91dHNpZGUgb2YgdGhlIHNpZ25hbCBoYW5kbGVyLgorICovCit2b2lkCitQcm9jZXNzUHJpbnRN ZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpCit7CisJUHJpbnRNZW1vcnlDb250ZXh0UGVuZGlu ZyA9IGZhbHNlOworCisJZXJlcG9ydChMT0csCisJCShlcnJtc2coIlByaW50aW5nIG1lbW9yeSBj b250ZXh0cyBvZiBQSUQgJWQiLCBNeVByb2NQaWQpKSk7CisKKwkvKiBBIGhhcmQtd2lyZWQgbGlt aXQgb24gdGhlIG51bWJlciBvZiBjaGlsZHJlbiBpcyB1c3VhbGx5IGdvb2QgZW5vdWdoICovCisJ TWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKFRvcE1lbW9yeUNvbnRleHQsIDEwMCwgZmFsc2UpOwor Cit9CisKKwogLyoKICAqIElmIGl0IHR1cm5zIG91dCB0aGF0IHdlIGNvdWxkbid0IGFic29yYiBv bmUgb3IgbW9yZSBiYXJyaWVyIHR5cGVzLCBlaXRoZXIKICAqIGJlY2F1c2UgdGhlIGJhcnJpZXIt cHJvY2Vzc2luZyBmdW5jdGlvbnMgcmV0dXJuZWQgZmFsc2Ugb3IgZHVlIHRvIGFuIGVycm9yLApA QCAtNjc1LDYgKzcwOSw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdT KQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9CVUZGRVJQ SU4pKQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfQlVGRkVSUElOKTsKIAorCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19QUklOVF9NRU1P UllfQ09OVEVYVCkpCisJCUhhbmRsZVByb2NTaWduYWxQcmludE1lbW9yeUNvbnRleHQoKTsKKwog CVNldExhdGNoKE15TGF0Y2gpOwogCiAJZXJybm8gPSBzYXZlX2Vycm5vOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CmluZGV4IDJiMWI2ODEwOWYuLjZmZTQ3ZDEyMjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTMyOTUs NiArMzI5NSw5IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAKIAlpZiAoUGFyYWxsZWxNZXNz YWdlUGVuZGluZykKIAkJSGFuZGxlUGFyYWxsZWxNZXNzYWdlcygpOworCisJaWYgKFByaW50TWVt b3J5Q29udGV4dFBlbmRpbmcpCisJCVByb2Nlc3NQcmludE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQo KTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKaW5kZXggYzAyZmE0NzU1MC4uMDdh OTVkZDExNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwpAQCAtNjEsNyArNjEsNyBAQCBQ dXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3Jl LAogCiAJLyogRXhhbWluZSB0aGUgY29udGV4dCBpdHNlbGYgKi8KIAltZW1zZXQoJnN0YXQsIDAs IHNpemVvZihzdGF0KSk7Ci0JKCpjb250ZXh0LT5tZXRob2RzLT5zdGF0cykgKGNvbnRleHQsIE5V TEwsICh2b2lkICopICZsZXZlbCwgJnN0YXQpOworCSgqY29udGV4dC0+bWV0aG9kcy0+c3RhdHMp IChjb250ZXh0LCBOVUxMLCAodm9pZCAqKSAmbGV2ZWwsICZzdGF0LCB0cnVlKTsKIAogCW1lbXNl dCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKIAltZW1zZXQobnVsbHMsIDAsIHNpemVvZihu dWxscykpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9z cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCA3M2UwYTY3MmFlLi4zMmZlOTcx Mzg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwpAQCAtMzQsNiArMzQsNyBAQCB2b2xhdGls ZSBzaWdfYXRvbWljX3QgQ2xpZW50Q29ubmVjdGlvbkxvc3QgPSBmYWxzZTsKIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNl Owogdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxz ZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxz ZTsKK3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcmludE1lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFs c2U7CiB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxl IHVpbnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgQ3Jp dFNlY3Rpb25Db3VudCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2Fz ZXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCmluZGV4IGVjNmMxMzBkMGYuLjhl N2ZlMDlhMGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCkBAIC0yNzIsNyArMjcyLDggQEAgc3RhdGlj IFNpemUgQWxsb2NTZXRHZXRDaHVua1NwYWNlKE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAq cG9pbnRlcik7CiBzdGF0aWMgYm9vbCBBbGxvY1NldElzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250 ZXh0KTsKIHN0YXRpYyB2b2lkIEFsbG9jU2V0U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAog CQkJCQkJICBNZW1vcnlTdGF0c1ByaW50RnVuYyBwcmludGZ1bmMsIHZvaWQgKnBhc3N0aHJ1LAot CQkJCQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscyk7CisJCQkJCQkgIE1lbW9yeUNv bnRleHRDb3VudGVycyAqdG90YWxzLAorCQkJCQkJICBib29sIGlzX2RzdF9zdGRlcnIpOwogCiAj aWZkZWYgTUVNT1JZX0NPTlRFWFRfQ0hFQ0tJTkcKIHN0YXRpYyB2b2lkIEFsbG9jU2V0Q2hlY2so TWVtb3J5Q29udGV4dCBjb250ZXh0KTsKQEAgLTEzMzYsMTEgKzEzMzcsMTIgQEAgQWxsb2NTZXRJ c0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCkKICAqIHByaW50ZnVuYzogaWYgbm90IE5VTEws IHBhc3MgYSBodW1hbi1yZWFkYWJsZSBzdGF0cyBzdHJpbmcgdG8gdGhpcy4KICAqIHBhc3N0aHJ1 OiBwYXNzIHRoaXMgcG9pbnRlciB0aHJvdWdoIHRvIHByaW50ZnVuYy4KICAqIHRvdGFsczogaWYg bm90IE5VTEwsIGFkZCBzdGF0cyBhYm91dCB0aGlzIGNvbnRleHQgaW50byAqdG90YWxzLgorICog aXNfZHN0X3N0ZGVycjogaXMgdGhlIG91dHB1dCBzaG91bGQgYmUgc3RkZXJyIG9yIGVsb2cuCiAg Ki8KIHN0YXRpYyB2b2lkCiBBbGxvY1NldFN0YXRzKE1lbW9yeUNvbnRleHQgY29udGV4dCwKIAkJ CSAgTWVtb3J5U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJCSAg TWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpCisJCQkgIE1lbW9yeUNvbnRleHRDb3VudGVy cyAqdG90YWxzLCBib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJQWxsb2NTZXQJc2V0ID0gKEFsbG9j U2V0KSBjb250ZXh0OwogCVNpemUJCW5ibG9ja3MgPSAwOwpAQCAtMTM3OSw3ICsxMzgxLDcgQEAg QWxsb2NTZXRTdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJICIlenUgdG90YWwgaW4g JXpkIGJsb2NrczsgJXp1IGZyZWUgKCV6ZCBjaHVua3MpOyAlenUgdXNlZCIsCiAJCQkJIHRvdGFs c3BhY2UsIG5ibG9ja3MsIGZyZWVzcGFjZSwgZnJlZWNodW5rcywKIAkJCQkgdG90YWxzcGFjZSAt IGZyZWVzcGFjZSk7Ci0JCXByaW50ZnVuYyhjb250ZXh0LCBwYXNzdGhydSwgc3RhdHNfc3RyaW5n KTsKKwkJcHJpbnRmdW5jKGNvbnRleHQsIHBhc3N0aHJ1LCBzdGF0c19zdHJpbmcsIGlzX2RzdF9z dGRlcnIpOwogCX0KIAogCWlmICh0b3RhbHMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9tbWdyL2dlbmVyYXRpb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5j CmluZGV4IDJiOTAwMzQ3NjQuLmIyODYzMDhhYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21tZ3IvZ2VuZXJhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJh dGlvbi5jCkBAIC0xNTUsNyArMTU1LDggQEAgc3RhdGljIFNpemUgR2VuZXJhdGlvbkdldENodW5r U3BhY2UoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwb2ludGVyKTsKIHN0YXRpYyBib29s IEdlbmVyYXRpb25Jc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBzdGF0aWMgdm9pZCBH ZW5lcmF0aW9uU3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkJCU1lbW9yeVN0YXRz UHJpbnRGdW5jIHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQkJTWVtb3J5Q29udGV4 dENvdW50ZXJzICp0b3RhbHMpOworCQkJCQkJCU1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxz LAorCQkJCQkJCWJvb2wgaXNfZHN0X3N0ZGVycik7CiAKICNpZmRlZiBNRU1PUllfQ09OVEVYVF9D SEVDS0lORwogc3RhdGljIHZvaWQgR2VuZXJhdGlvbkNoZWNrKE1lbW9yeUNvbnRleHQgY29udGV4 dCk7CkBAIC02NjUsNiArNjY2LDcgQEAgR2VuZXJhdGlvbklzRW1wdHkoTWVtb3J5Q29udGV4dCBj b250ZXh0KQogICogcHJpbnRmdW5jOiBpZiBub3QgTlVMTCwgcGFzcyBhIGh1bWFuLXJlYWRhYmxl IHN0YXRzIHN0cmluZyB0byB0aGlzLgogICogcGFzc3RocnU6IHBhc3MgdGhpcyBwb2ludGVyIHRo cm91Z2ggdG8gcHJpbnRmdW5jLgogICogdG90YWxzOiBpZiBub3QgTlVMTCwgYWRkIHN0YXRzIGFi b3V0IHRoaXMgY29udGV4dCBpbnRvICp0b3RhbHMuCisgKiBpc19kc3Rfc3RkZXJyOiBpcyB0aGUg b3V0cHV0IHNob3VsZCBiZSBzdGRlcnIgb3IgZWxvZy4KICAqCiAgKiBYWFggZnJlZXNwYWNlIG9u bHkgYWNjb3VudHMgZm9yIGVtcHR5IHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLCBub3QK ICAqIHNwYWNlIG9mIGZyZWVkIGNodW5rcyAod2hpY2ggaXMgdW5rbm93bikuCkBAIC02NzIsNyAr Njc0LDcgQEAgR2VuZXJhdGlvbklzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogc3RhdGlj IHZvaWQKIEdlbmVyYXRpb25TdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJTWVtb3J5 U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJCQlNZW1vcnlDb250 ZXh0Q291bnRlcnMgKnRvdGFscykKKwkJCQlNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscywg Ym9vbCBpc19kc3Rfc3RkZXJyKQogewogCUdlbmVyYXRpb25Db250ZXh0ICpzZXQgPSAoR2VuZXJh dGlvbkNvbnRleHQgKikgY29udGV4dDsKIAlTaXplCQluYmxvY2tzID0gMDsKQEAgLTcwNCw3ICs3 MDYsNyBAQCBHZW5lcmF0aW9uU3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCSAiJXp1 IHRvdGFsIGluICV6ZCBibG9ja3MgKCV6ZCBjaHVua3MpOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7 ICV6dSB1c2VkIiwKIAkJCQkgdG90YWxzcGFjZSwgbmJsb2NrcywgbmNodW5rcywgZnJlZXNwYWNl LAogCQkJCSBuZnJlZWNodW5rcywgdG90YWxzcGFjZSAtIGZyZWVzcGFjZSk7Ci0JCXByaW50ZnVu Yyhjb250ZXh0LCBwYXNzdGhydSwgc3RhdHNfc3RyaW5nKTsKKwkJcHJpbnRmdW5jKGNvbnRleHQs IHBhc3N0aHJ1LCBzdGF0c19zdHJpbmcsIGlzX2RzdF9zdGRlcnIpOwogCX0KIAogCWlmICh0b3Rh bHMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21tZ3IvbWN4dC5jCmluZGV4IDg0NDcyYjkxNTguLjllYzBjMDUwOWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21tZ3IvbWN4dC5jCkBAIC0yMyw2ICsyMywxMCBAQAogCiAjaW5jbHVkZSAibWIvcGdfd2No YXIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3Np Z25hbC5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9t ZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKQEAgLTU1LDkgKzU5LDEx IEBAIE1lbW9yeUNvbnRleHQgUG9ydGFsQ29udGV4dCA9IE5VTEw7CiBzdGF0aWMgdm9pZCBNZW1v cnlDb250ZXh0Q2FsbFJlc2V0Q2FsbGJhY2tzKE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBzdGF0 aWMgdm9pZCBNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQs IGludCBsZXZlbCwKIAkJCQkJCQkJCSAgIGJvb2wgcHJpbnQsIGludCBtYXhfY2hpbGRyZW4sCi0J CQkJCQkJCQkgICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscyk7CisJCQkJCQkJCQkgICBN ZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscywKKwkJCQkJCQkJCSAgIGJvb2wgaXNfZHN0X3N0 ZGVycik7CiBzdGF0aWMgdm9pZCBNZW1vcnlDb250ZXh0U3RhdHNQcmludChNZW1vcnlDb250ZXh0 IGNvbnRleHQsIHZvaWQgKnBhc3N0aHJ1LAotCQkJCQkJCQkJY29uc3QgY2hhciAqc3RhdHNfc3Ry aW5nKTsKKwkJCQkJCQkJCWNvbnN0IGNoYXIgKnN0YXRzX3N0cmluZywKKwkJCQkJCQkJCWJvb2wg aXNfZHN0X3N0ZGVycik7CiAKIC8qCiAgKiBZb3Ugc2hvdWxkIG5vdCBkbyBtZW1vcnkgYWxsb2Nh dGlvbnMgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiwgYmVjYXVzZQpAQCAtNDg3LDYgKzQ5Myw1 NSBAQCBNZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVkKE1lbW9yeUNvbnRleHQgY29udGV4dCwgYm9v bCByZWN1cnNlKQogCXJldHVybiB0b3RhbDsKIH0KIAorLyoKKyAqIHBnX3ByaW50X2JhY2tlbmRf bWVtb3J5X2NvbnRleHRzCisgKgkJUHJpbnQgbWVtb3J5IGNvbnRleHQgb2YgdGhlIHNwZWNpZmll ZCBiYWNrZW5kIHByb2Nlc3MuCisgKi8KK0RhdHVtCitwZ19wcmludF9iYWNrZW5kX21lbW9yeV9j b250ZXh0cyhQR19GVU5DVElPTl9BUkdTKQoreworCWludAkJcGlkID0gUEdfR0VUQVJHX0lOVDMy KDApOworCVBHUFJPQwkJKnByb2MgPSBCYWNrZW5kUGlkR2V0UHJvYyhwaWQpOworCisJLyoKKwkg KiBDaGVjayB3aGV0aGVyIHRoZSB0YXJnZXQgcHJvY2VzcyBpcyBQb3N0Z3JlU1FMIGJhY2tlbmQg cHJvY2Vzcy4KKwkgKi8KKwlpZiAocHJvYyA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogQWNjb3Jk aW5nIHRvIHRoZSB0aHJlYWQgYmVsb3csIGl0IG1pZ2h0IGJlIGJldHRlciB0bworCQkgKiBjaGFu Z2UgdGhpcyBtZXNzYWdlLgorCQkgKgorCQkgKiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkL0NBTGoyQUNXN1JyLVI3bUJjQlFpWFdQcCUzREpWNWNoYWpqVGR1ZExpRjVZY3BX LUJtSGhnJTQwbWFpbC5nbWFpbC5jb20KKwkJICoKKwkJICogVW50aWwgdGhlIGNvbmNsdXNpb24g b2YgdGhlIGRpc2N1c3Npb24sIG91dHB1dCB0aGUgc2FtZQorCQkgKiBtZXNzYWdlIGFzIHBnX2Nh bmNlbF9iYWNrZW5kKCkuCisJCSAqLworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygi UElEICVkIGlzIG5vdCBhIFBvc3RncmVTUUwgc2VydmVyIHByb2Nlc3MiLCBwaWQpKSk7CisKKwkJ UEdfUkVUVVJOX0JPT0woZmFsc2UpOworCX0KKworCS8qIE9ubHkgYWxsb3cgc3VwZXJ1c2VycyB0 byBzaWduYWwgc3VwZXJ1c2VyLW93bmVkIGJhY2tlbmRzLiAqLworCWlmIChzdXBlcnVzZXJfYXJn KHByb2MtPnJvbGVJZCkgJiYgIXN1cGVydXNlcigpKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAor CQkJCShlcnJtc2coIm11c3QgYmUgYSBzdXBlcnVzZXIgdG8gcHJpbnQgbWVtb3J5IGNvbnRleHRz IikpKTsKKwkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOworCX0KKworCWlmKCFTZW5kUHJvY1NpZ25h bChwaWQsIFBST0NTSUdfUFJJTlRfTUVNT1JZX0NPTlRFWFQsIEludmFsaWRCYWNrZW5kSWQpKQor CQlQR19SRVRVUk5fQk9PTCh0cnVlKTsKKwllbHNlCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJ CQkJKGVycm1zZygiZmFpbGVkIHRvIHNlbmQgc2lnbmFsOiAlbSIpKSk7CisKKwkJUEdfUkVUVVJO X0JPT0woZmFsc2UpOworCX0KK30KKwogLyoKICAqIE1lbW9yeUNvbnRleHRTdGF0cwogICoJCVBy aW50IHN0YXRpc3RpY3MgYWJvdXQgdGhlIG5hbWVkIGNvbnRleHQgYW5kIGFsbCBpdHMgZGVzY2Vu ZGFudHMuCkBAIC00OTksNyArNTU0LDcgQEAgdm9pZAogTWVtb3J5Q29udGV4dFN0YXRzKE1lbW9y eUNvbnRleHQgY29udGV4dCkKIHsKIAkvKiBBIGhhcmQtd2lyZWQgbGltaXQgb24gdGhlIG51bWJl ciBvZiBjaGlsZHJlbiBpcyB1c3VhbGx5IGdvb2QgZW5vdWdoICovCi0JTWVtb3J5Q29udGV4dFN0 YXRzRGV0YWlsKGNvbnRleHQsIDEwMCk7CisJTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKGNvbnRl eHQsIDEwMCwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC01MDgsMTkgKzU2MywyOCBAQCBNZW1vcnlDb250 ZXh0U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogICogRW50cnkgcG9pbnQgZm9yIHVzZSBp ZiB5b3Ugd2FudCB0byB2YXJ5IHRoZSBudW1iZXIgb2YgY2hpbGQgY29udGV4dHMgc2hvd24uCiAg Ki8KIHZvaWQKLU1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChNZW1vcnlDb250ZXh0IGNvbnRleHQs IGludCBtYXhfY2hpbGRyZW4pCitNZW1vcnlDb250ZXh0U3RhdHNEZXRhaWwoTWVtb3J5Q29udGV4 dCBjb250ZXh0LCBpbnQgbWF4X2NoaWxkcmVuLCBib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJTWVt b3J5Q29udGV4dENvdW50ZXJzIGdyYW5kX3RvdGFsczsKIAogCW1lbXNldCgmZ3JhbmRfdG90YWxz LCAwLCBzaXplb2YoZ3JhbmRfdG90YWxzKSk7CiAKLQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5h bChjb250ZXh0LCAwLCB0cnVlLCBtYXhfY2hpbGRyZW4sICZncmFuZF90b3RhbHMpOworCU1lbW9y eUNvbnRleHRTdGF0c0ludGVybmFsKGNvbnRleHQsIDAsIHRydWUsIG1heF9jaGlsZHJlbiwgJmdy YW5kX3RvdGFscywgaXNfZHN0X3N0ZGVycik7CiAKLQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJHcmFu ZCB0b3RhbDogJXp1IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsg JXp1IHVzZWRcbiIsCi0JCQlncmFuZF90b3RhbHMudG90YWxzcGFjZSwgZ3JhbmRfdG90YWxzLm5i bG9ja3MsCi0JCQlncmFuZF90b3RhbHMuZnJlZXNwYWNlLCBncmFuZF90b3RhbHMuZnJlZWNodW5r cywKLQkJCWdyYW5kX3RvdGFscy50b3RhbHNwYWNlIC0gZ3JhbmRfdG90YWxzLmZyZWVzcGFjZSk7 CisJaWYgKGlzX2RzdF9zdGRlcnIpCisJCWZwcmludGYoc3RkZXJyLAorCQkJCSJHcmFuZCB0b3Rh bDogJXp1IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVz ZWRcbiIsCisJCQkJZ3JhbmRfdG90YWxzLnRvdGFsc3BhY2UsIGdyYW5kX3RvdGFscy5uYmxvY2tz LAorCQkJCWdyYW5kX3RvdGFscy5mcmVlc3BhY2UsIGdyYW5kX3RvdGFscy5mcmVlY2h1bmtzLAor CQkJCWdyYW5kX3RvdGFscy50b3RhbHNwYWNlIC0gZ3JhbmRfdG90YWxzLmZyZWVzcGFjZSk7CisJ ZWxzZQorCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCQkoZXJyaGlkZXN0bXQodHJ1ZSks CisJCQkJZXJyaGlkZWNvbnRleHQodHJ1ZSksCisJCQkJZXJybXNnX2ludGVybmFsKCJHcmFuZCB0 b3RhbDogJXp1IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1 IHVzZWQiLAorCQkJCWdyYW5kX3RvdGFscy50b3RhbHNwYWNlLCBncmFuZF90b3RhbHMubmJsb2Nr cywKKwkJCQlncmFuZF90b3RhbHMuZnJlZXNwYWNlLCBncmFuZF90b3RhbHMuZnJlZWNodW5rcywK KwkJCQlncmFuZF90b3RhbHMudG90YWxzcGFjZSAtIGdyYW5kX3RvdGFscy5mcmVlc3BhY2UpKSk7 CiB9CiAKIC8qCkBAIC01MzMsNyArNTk3LDggQEAgTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKE1l bW9yeUNvbnRleHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJlbikKIHN0YXRpYyB2b2lkCiBNZW1v cnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBsZXZlbCwK IAkJCQkJCSAgIGJvb2wgcHJpbnQsIGludCBtYXhfY2hpbGRyZW4sCi0JCQkJCQkgICBNZW1vcnlD b250ZXh0Q291bnRlcnMgKnRvdGFscykKKwkJCQkJCSAgIE1lbW9yeUNvbnRleHRDb3VudGVycyAq dG90YWxzLAorCQkJCQkJICAgYm9vbCBpc19kc3Rfc3RkZXJyKQogewogCU1lbW9yeUNvbnRleHRD b3VudGVycyBsb2NhbF90b3RhbHM7CiAJTWVtb3J5Q29udGV4dCBjaGlsZDsKQEAgLTU0NSw3ICs2 MTAsNyBAQCBNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQs IGludCBsZXZlbCwKIAljb250ZXh0LT5tZXRob2RzLT5zdGF0cyhjb250ZXh0LAogCQkJCQkJCXBy aW50ID8gTWVtb3J5Q29udGV4dFN0YXRzUHJpbnQgOiBOVUxMLAogCQkJCQkJCSh2b2lkICopICZs ZXZlbCwKLQkJCQkJCQl0b3RhbHMpOworCQkJCQkJCXRvdGFscywgaXNfZHN0X3N0ZGVycik7CiAK IAkvKgogCSAqIEV4YW1pbmUgY2hpbGRyZW4uICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG1heF9j aGlsZHJlbiBvZiB0aGVtLCB3ZSBkbwpAQCAtNTYwLDExICs2MjUsMTMgQEAgTWVtb3J5Q29udGV4 dFN0YXRzSW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAJCWlmIChp Y2hpbGQgPCBtYXhfY2hpbGRyZW4pCiAJCQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChjaGls ZCwgbGV2ZWwgKyAxLAogCQkJCQkJCQkJICAgcHJpbnQsIG1heF9jaGlsZHJlbiwKLQkJCQkJCQkJ CSAgIHRvdGFscyk7CisJCQkJCQkJCQkgICB0b3RhbHMsCisJCQkJCQkJCQkgICBpc19kc3Rfc3Rk ZXJyKTsKIAkJZWxzZQogCQkJTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoY2hpbGQsIGxldmVs ICsgMSwKIAkJCQkJCQkJCSAgIGZhbHNlLCBtYXhfY2hpbGRyZW4sCi0JCQkJCQkJCQkgICAmbG9j YWxfdG90YWxzKTsKKwkJCQkJCQkJCSAgICZsb2NhbF90b3RhbHMsCisJCQkJCQkJCQkgICBpc19k c3Rfc3RkZXJyKTsKIAl9CiAKIAkvKiBEZWFsIHdpdGggZXhjZXNzIGNoaWxkcmVuICovCkBAIC01 NzQsMTYgKzY0MSwzMSBAQCBNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0 IGNvbnRleHQsIGludCBsZXZlbCwKIAkJewogCQkJaW50CQkJaTsKIAotCQkJZm9yIChpID0gMDsg aSA8PSBsZXZlbDsgaSsrKQotCQkJCWZwcmludGYoc3RkZXJyLCAiICAiKTsKLQkJCWZwcmludGYo c3RkZXJyLAotCQkJCQkiJWQgbW9yZSBjaGlsZCBjb250ZXh0cyBjb250YWluaW5nICV6dSB0b3Rh bCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkXG4iLAotCQkJ CQlpY2hpbGQgLSBtYXhfY2hpbGRyZW4sCi0JCQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNlLAot CQkJCQlsb2NhbF90b3RhbHMubmJsb2NrcywKLQkJCQkJbG9jYWxfdG90YWxzLmZyZWVzcGFjZSwK LQkJCQkJbG9jYWxfdG90YWxzLmZyZWVjaHVua3MsCi0JCQkJCWxvY2FsX3RvdGFscy50b3RhbHNw YWNlIC0gbG9jYWxfdG90YWxzLmZyZWVzcGFjZSk7CisJCQlpZiAoaXNfZHN0X3N0ZGVycikKKwkJ CXsKKwkJCQlmb3IgKGkgPSAwOyBpIDw9IGxldmVsOyBpKyspCisJCQkJCWZwcmludGYoc3RkZXJy LCAiICAiKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSIlZCBtb3JlIGNoaWxkIGNvbnRl eHRzIGNvbnRhaW5pbmcgJXp1IHRvdGFsIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1 bmtzKTsgJXp1IHVzZWRcbiIsCisJCQkJCQlpY2hpbGQgLSBtYXhfY2hpbGRyZW4sCisJCQkJCQls b2NhbF90b3RhbHMudG90YWxzcGFjZSwKKwkJCQkJCWxvY2FsX3RvdGFscy5uYmxvY2tzLAorCQkJ CQkJbG9jYWxfdG90YWxzLmZyZWVzcGFjZSwKKwkJCQkJCWxvY2FsX3RvdGFscy5mcmVlY2h1bmtz LAorCQkJCQkJbG9jYWxfdG90YWxzLnRvdGFsc3BhY2UgLSBsb2NhbF90b3RhbHMuZnJlZXNwYWNl KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCQkJCShl cnJoaWRlc3RtdCh0cnVlKSwKKwkJCQkJCWVycmhpZGVjb250ZXh0KHRydWUpLAorCQkJCQkJZXJy bXNnX2ludGVybmFsKCJsZXZlbDogJWQgJWQgbW9yZSBjaGlsZCBjb250ZXh0cyBjb250YWluaW5n ICV6dSB0b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2Vk IiwKKwkJCQkJCWxldmVsLAorCQkJCQkJaWNoaWxkIC0gbWF4X2NoaWxkcmVuLAorCQkJCQkJbG9j YWxfdG90YWxzLnRvdGFsc3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMubmJsb2NrcywKKwkJCQkJ CWxvY2FsX3RvdGFscy5mcmVlc3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMuZnJlZWNodW5rcywK KwkJCQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNlIC0gbG9jYWxfdG90YWxzLmZyZWVzcGFjZSkp KTsKIAkJfQogCiAJCWlmICh0b3RhbHMpCkBAIC02MDUsMTIgKzY4NywxNCBAQCBNZW1vcnlDb250 ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBsZXZlbCwKICAqLwog c3RhdGljIHZvaWQKIE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4 dCwgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQljb25zdCBjaGFyICpzdGF0c19zdHJpbmcpCisJCQkJ CQljb25zdCBjaGFyICpzdGF0c19zdHJpbmcsCisJCQkJCQlib29sIGlzX2RzdF9zdGRlcnIpCiB7 CiAJaW50CQkJbGV2ZWwgPSAqKGludCAqKSBwYXNzdGhydTsKIAljb25zdCBjaGFyICpuYW1lID0g Y29udGV4dC0+bmFtZTsKIAljb25zdCBjaGFyICppZGVudCA9IGNvbnRleHQtPmlkZW50OwogCWlu dAkJCWk7CisJY2hhcgkJdHJ1bmNhdGVkX2lkZW50WzExMF07CiAKIAkvKgogCSAqIEl0IHNlZW1z IHByZWZlcmFibGUgdG8gbGFiZWwgZHluYWhhc2ggY29udGV4dHMgd2l0aCBqdXN0IHRoZSBoYXNo IHRhYmxlCkBAIC02MjMsMTEgKzcwNywxMSBAQCBNZW1vcnlDb250ZXh0U3RhdHNQcmludChNZW1v cnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBhc3N0aHJ1LAogCQlpZGVudCA9IE5VTEw7CiAJfQog Ci0JZm9yIChpID0gMDsgaSA8IGxldmVsOyBpKyspCi0JCWZwcmludGYoc3RkZXJyLCAiICAiKTsK LQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlcyIsIG5hbWUsIHN0YXRzX3N0cmluZyk7CisJdHJ1bmNh dGVkX2lkZW50WzBdID0gJ1wwJzsKKwogCWlmIChpZGVudCkKIAl7CisJCWNoYXIJZGVsaW1pdGVy W10gPSAiOiAiOwogCQkvKgogCQkgKiBTb21lIGNvbnRleHRzIG1heSBoYXZlIHZlcnkgbG9uZyBp ZGVudGlmaWVycyAoZS5nLiwgU1FMIHF1ZXJpZXMpLgogCQkgKiBBcmJpdHJhcmlseSB0cnVuY2F0 ZSBhdCAxMDAgYnl0ZXMsIGJ1dCBiZSBjYXJlZnVsIG5vdCB0byBicmVhawpAQCAtNjM3LDI0ICs3 MjEsNDIgQEAgTWVtb3J5Q29udGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2 b2lkICpwYXNzdGhydSwKIAkJaW50CQkJaWRsZW4gPSBzdHJsZW4oaWRlbnQpOwogCQlib29sCQl0 cnVuY2F0ZWQgPSBmYWxzZTsKIAorCQlzdHJjYXQodHJ1bmNhdGVkX2lkZW50LCBkZWxpbWl0ZXIp OworCiAJCWlmIChpZGxlbiA+IDEwMCkKIAkJewogCQkJaWRsZW4gPSBwZ19tYmNsaXBsZW4oaWRl bnQsIGlkbGVuLCAxMDApOwogCQkJdHJ1bmNhdGVkID0gdHJ1ZTsKIAkJfQotCQlmcHJpbnRmKHN0 ZGVyciwgIjogIik7CisKKwkJaSA9IHN0cmxlbihkZWxpbWl0ZXIpOworCiAJCXdoaWxlIChpZGxl bi0tID4gMCkKIAkJewogCQkJdW5zaWduZWQgY2hhciBjID0gKmlkZW50Kys7CiAKIAkJCWlmIChj IDwgJyAnKQogCQkJCWMgPSAnICc7Ci0JCQlmcHV0YyhjLCBzdGRlcnIpOworCQkJdHJ1bmNhdGVk X2lkZW50W2krK10gPSBjOwogCQl9CisJCXRydW5jYXRlZF9pZGVudFtpXSA9ICdcMCc7CisKIAkJ aWYgKHRydW5jYXRlZCkKLQkJCWZwcmludGYoc3RkZXJyLCAiLi4uIik7CisJCQlzdHJjYXQodHJ1 bmNhdGVkX2lkZW50LCAiLi4uIik7CiAJfQotCWZwdXRjKCdcbicsIHN0ZGVycik7CisKKwlpZiAo aXNfZHN0X3N0ZGVycikKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBsZXZlbDsgaSsrKQorCQkJZnBy aW50ZihzdGRlcnIsICIgICIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlcyVzXG4iLCBuYW1l LCBzdGF0c19zdHJpbmcsIHRydW5jYXRlZF9pZGVudCk7CisJfQorCWVsc2UKKwkJZXJlcG9ydChM T0dfU0VSVkVSX09OTFksCisJCQkJKGVycmhpZGVzdG10KHRydWUpLAorCQkJCSBlcnJoaWRlY29u dGV4dCh0cnVlKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJsZXZlbDogJWQgJXM6ICVzJXMiLAor CQkJCQkJCQkJIGxldmVsLCBuYW1lLCBzdGF0c19zdHJpbmcsIHRydW5jYXRlZF9pZGVudCkpKTsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbW1nci9zbGFiLmMKaW5kZXggOTIxM2JlN2M5NS4uNDc5YjA4YmVkZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9zbGFiLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9zbGFiLmMKQEAgLTEzNSw3ICsxMzUsOCBAQCBzdGF0aWMgU2l6ZSBTbGFi R2V0Q2h1bmtTcGFjZShNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBvaW50ZXIpOwogc3Rh dGljIGJvb2wgU2xhYklzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIHN0YXRpYyB2b2lk IFNsYWJTdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJCSAgTWVtb3J5U3RhdHNQcmlu dEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJCQkJICBNZW1vcnlDb250ZXh0Q291 bnRlcnMgKnRvdGFscyk7CisJCQkJCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJ CQkJCSAgYm9vbCBpc19kc3Rfc3RkZXJyKTsKICNpZmRlZiBNRU1PUllfQ09OVEVYVF9DSEVDS0lO Rwogc3RhdGljIHZvaWQgU2xhYkNoZWNrKE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAjZW5kaWYK QEAgLTYzMiwxMSArNjMzLDEzIEBAIFNsYWJJc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCkK ICAqIHByaW50ZnVuYzogaWYgbm90IE5VTEwsIHBhc3MgYSBodW1hbi1yZWFkYWJsZSBzdGF0cyBz dHJpbmcgdG8gdGhpcy4KICAqIHBhc3N0aHJ1OiBwYXNzIHRoaXMgcG9pbnRlciB0aHJvdWdoIHRv IHByaW50ZnVuYy4KICAqIHRvdGFsczogaWYgbm90IE5VTEwsIGFkZCBzdGF0cyBhYm91dCB0aGlz IGNvbnRleHQgaW50byAqdG90YWxzLgorICogaXNfZHN0X3N0ZGVycjogaXMgdGhlIG91dHB1dCBz aG91bGQgYmUgc3RkZXJyIG9yIGVsb2cuCiAgKi8KIHN0YXRpYyB2b2lkCiBTbGFiU3RhdHMoTWVt b3J5Q29udGV4dCBjb250ZXh0LAogCQkgIE1lbW9yeVN0YXRzUHJpbnRGdW5jIHByaW50ZnVuYywg dm9pZCAqcGFzc3RocnUsCi0JCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpCisJCSAg TWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCSAgYm9vbCBpc19kc3Rfc3RkZXJyKQog ewogCVNsYWJDb250ZXh0ICpzbGFiID0gY2FzdE5vZGUoU2xhYkNvbnRleHQsIGNvbnRleHQpOwog CVNpemUJCW5ibG9ja3MgPSAwOwpAQCAtNjcxLDcgKzY3NCw3IEBAIFNsYWJTdGF0cyhNZW1vcnlD b250ZXh0IGNvbnRleHQsCiAJCQkJICIlenUgdG90YWwgaW4gJXpkIGJsb2NrczsgJXp1IGZyZWUg KCV6ZCBjaHVua3MpOyAlenUgdXNlZCIsCiAJCQkJIHRvdGFsc3BhY2UsIG5ibG9ja3MsIGZyZWVz cGFjZSwgZnJlZWNodW5rcywKIAkJCQkgdG90YWxzcGFjZSAtIGZyZWVzcGFjZSk7Ci0JCXByaW50 ZnVuYyhjb250ZXh0LCBwYXNzdGhydSwgc3RhdHNfc3RyaW5nKTsKKwkJcHJpbnRmdW5jKGNvbnRl eHQsIHBhc3N0aHJ1LCBzdGF0c19zdHJpbmcsIGlzX2RzdF9zdGRlcnIpOwogCX0KIAogCWlmICh0 b3RhbHMpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA5MzM5M2ZjZmQ0Li4wMDkxODA2ODA5 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTc5MTcsNiArNzkxNywxMiBAQAogICBwcm9h cmduYW1lcyA9PiAne25hbWUsIGlkZW50LCBwYXJlbnQsIGxldmVsLCB0b3RhbF9ieXRlcywgdG90 YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3MsIHVzZWRfYnl0ZXN9JywKICAgcHJv c3JjID0+ICdwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnIH0sCiAKKyMgcHJpbnQgbWVt b3J5IGNvbnRleHQgb2Ygc3BlY2lmaWVkIGJhY2tlbmQKK3sgb2lkID0+ICc0NTQzJywgZGVzY3Ig PT4gJ3ByaW50IG1lbW9yeSBjb250ZXh0cyBvZiBzcGVjaWZpZWQgYmFja2VuZCcsCisgIHByb25h bWUgPT4gJ3BnX3ByaW50X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJywKKyAgcHJvdm9sYXRpbGUg PT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludDQnLCBw cm9zcmMgPT4gJ3BnX3ByaW50X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAorCiAjIG5vbi1w ZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0b3IKIHsgb2lkID0+ICcxMDY2JywgZGVzY3IgPT4gJ25v bi1wZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0b3InLAogICBwcm9uYW1lID0+ICdnZW5lcmF0ZV9z ZXJpZXMnLCBwcm9yb3dzID0+ICcxMDAwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2Nh ZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggMDEzODUwYWMyOC4uNzExZDZj MjA4OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1 ZGUvbWlzY2FkbWluLmgKQEAgLTg0LDYgKzg0LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBQcm9jRGllUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xh dGlsZSBzaWdfYXRvbWljX3QgSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dFBlbmRpbmc7 CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGlt ZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFBy b2NTaWduYWxCYXJyaWVyUGVuZGluZzsKK2V4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdf YXRvbWljX3QgUHJpbnRNZW1vcnlDb250ZXh0UGVuZGluZzsKIAogZXh0ZXJuIFBHRExMSU1QT1JU IHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDbGllbnRDb25uZWN0aW9uTG9zdDsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWVtbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL21lbW5v ZGVzLmgKaW5kZXggOTMzMWVmODBmZC4uODdhODUwMWMzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvbWVtbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oCkBA IC01Miw3ICs1Miw4IEBAIHR5cGVkZWYgc3RydWN0IE1lbW9yeUNvbnRleHRDb3VudGVycwogICov CiAKIHR5cGVkZWYgdm9pZCAoKk1lbW9yeVN0YXRzUHJpbnRGdW5jKSAoTWVtb3J5Q29udGV4dCBj b250ZXh0LCB2b2lkICpwYXNzdGhydSwKLQkJCQkJCQkJCSAgY29uc3QgY2hhciAqc3RhdHNfc3Ry aW5nKTsKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqc3RhdHNfc3RyaW5nLAorCQkJCQkJCQkJICBi b29sIGlzX2RzdF9zdGRlcnIpOwogCiB0eXBlZGVmIHN0cnVjdCBNZW1vcnlDb250ZXh0TWV0aG9k cwogewpAQCAtNjYsNyArNjcsOCBAQCB0eXBlZGVmIHN0cnVjdCBNZW1vcnlDb250ZXh0TWV0aG9k cwogCWJvb2wJCSgqaXNfZW1wdHkpIChNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogCXZvaWQJCSgq c3RhdHMpIChNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJCQkgIE1lbW9yeVN0YXRzUHJpbnRG dW5jIHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQkgIE1lbW9yeUNvbnRleHRDb3Vu dGVycyAqdG90YWxzKTsKKwkJCQkJCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJ CQkJCQkgIGJvb2wgaXNfZHN0X3N0ZGVycik7CiAjaWZkZWYgTUVNT1JZX0NPTlRFWFRfQ0hFQ0tJ TkcKIAl2b2lkCQkoKmNoZWNrKSAoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKICNlbmRpZgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCA0YWU3ZGMzM2I4Li4wYmZlMjkwNDc3IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3Byb2NzaWduYWwuaApAQCAtMzQsNiArMzQsOCBAQCB0eXBlZGVmIGVudW0KIAlQUk9D U0lHX1BBUkFMTEVMX01FU1NBR0UsCS8qIG1lc3NhZ2UgZnJvbSBjb29wZXJhdGluZyBwYXJhbGxl bCBiYWNrZW5kICovCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORywJLyogYXNrIHdhbHNl bmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCiAJUFJPQ1NJR19CQVJSSUVSLAkJCS8q IGdsb2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KKwlQUk9DU0lHX1BSSU5UX01FTU9SWV9DT05U RVhULAkJLyogYXNrIHNwZWNpZmllZCBiYWNrZW5kIHRvIHByaW50IHRoZQorCQkJCQkJCW1lbW9y eSBjb250ZXh0ICovCiAKIAkvKiBSZWNvdmVyeSBjb25mbGljdCByZWFzb25zICovCiAJUFJPQ1NJ R19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSwKQEAgLTY5LDYgKzcxLDcgQEAgZXh0ZXJuIGlu dAlTZW5kUHJvY1NpZ25hbChwaWRfdCBwaWQsIFByb2NTaWduYWxSZWFzb24gcmVhc29uLAogZXh0 ZXJuIHVpbnQ2NCBFbWl0UHJvY1NpZ25hbEJhcnJpZXIoUHJvY1NpZ25hbEJhcnJpZXJUeXBlIHR5 cGUpOwogZXh0ZXJuIHZvaWQgV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKHVpbnQ2NCBnZW5lcmF0 aW9uKTsKIGV4dGVybiB2b2lkIFByb2Nlc3NQcm9jU2lnbmFsQmFycmllcih2b2lkKTsKK2V4dGVy biB2b2lkIFByb2Nlc3NQcmludE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQodm9pZCk7CiAKIGV4dGVy biB2b2lkIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL21l bXV0aWxzLmgKaW5kZXggMzZhYWU0ZTUxYy4uZmQxMGY4MGVkYSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvbWVtdXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9tZW11dGlscy5o CkBAIC04NCw3ICs4NCw4IEBAIGV4dGVybiBNZW1vcnlDb250ZXh0IE1lbW9yeUNvbnRleHRHZXRQ YXJlbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIGV4dGVybiBib29sIE1lbW9yeUNvbnRleHRJ c0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gU2l6ZSBNZW1vcnlDb250ZXh0 TWVtQWxsb2NhdGVkKE1lbW9yeUNvbnRleHQgY29udGV4dCwgYm9vbCByZWN1cnNlKTsKIGV4dGVy biB2b2lkIE1lbW9yeUNvbnRleHRTdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQpOwotZXh0ZXJu IHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKE1lbW9yeUNvbnRleHQgY29udGV4dCwgaW50 IG1heF9jaGlsZHJlbik7CitleHRlcm4gdm9pZCBNZW1vcnlDb250ZXh0U3RhdHNEZXRhaWwoTWVt b3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbWF4X2NoaWxkcmVuLAorCQkJCQkJCQkJCWJvb2wgaXNf ZHN0X3N0ZGVycik7CiBleHRlcm4gdm9pZCBNZW1vcnlDb250ZXh0QWxsb3dJbkNyaXRpY2FsU2Vj dGlvbihNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJCQkJCQkJCQlib29sIGFsbG93KTsKIAo= --=_b996b4b1c54b83e76a30764401d3f095--