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 1jLdwC-0007hE-8L for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2020 02:26:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jLdwA-0004G6-W0 for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2020 02:26:02 +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 1jLdwA-0004Fx-1c for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2020 02:26:02 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jLdw5-00062j-El for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2020 02:26:01 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 1BC1121C5856; Tue, 7 Apr 2020 05:25:55 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 2EFCA21C583C; Tue, 7 Apr 2020 05:25:54 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1586226354; bh=+AFK/pJIP76lqYGjmaeqVtzMpGsGnifHRl8i++9Sbhw=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=HLpa7++TnfySouWle8MKA8e3nwCwAnvklU5MyZ/FkZd7KRFrncZjshH+hFfa4By+V PhJ6ffAXhf/HvF3Bl2Em5yd2dcz1WL93W+G3bw0UGt9p9N90Wtn34q3TzzpTh0SuWQ wZ4c8V7IfWNLEkISwkHXZUYNwMRyoBaChwA37aUQ= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_eaaaed69011fe4ba080b8f70b9b7e1b2" Content-Transfer-Encoding: 7bit Date: Tue, 07 Apr 2020 05:25:53 +0300 From: Anna Akenteva To: Kartyshov Ivan Cc: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: <9d112e474c311b6b4c20566314283638@postgrespro.ru> References: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> <3cc883048264c2e9af022033925ff8db@postgrespro.ru> <674ad239b725a11d89c21574e44e376b@postgrespro.ru> <69a363498b76cd079ae19c4ee93bced0@postgrespro.ru> <06bfb1e542a25c3ebfc4232be4d49555@postgrespro.ru> <9d112e474c311b6b4c20566314283638@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: X-Sender: a.akenteva@postgrespro.ru Organization: Postgres Professional List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_eaaaed69011fe4ba080b8f70b9b7e1b2 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-04-07 00:58, Kartyshov Ivan wrote: > Ok, here is a new version of patch with single LSN and TIMEOUT. I had a look at the code and did some more code cleanup, with Ivan's permission. This is what I did: - Removed "WAIT FOR" command tag from cmdtaglist.h and renamed WaitStmt to WaitClause (since there's no standalone WAIT FOR command anymore) - Added _copyWaitClause() and _equalWaitClause() - Removed unused #include-s from utility.c - Adjusted tests and documentation - Fixed/added some code comments I have a couple of questions about WaitUtility() though: - When waiting forever (due to not specifying a timeout), isn't 60 seconds too long of an interval to check for interrupts? - If we did specify a timeout, it might be a very long one. In this case, shouldn't we also make sure to wake up sometimes to check for interrupts? - Is it OK that specifying timeout = 0 (BEGIN WAIT FOR LSN ... TIMEOUT 0) is the same as not specifying timeout at all? -- Anna Akenteva Postgres Professional: The Russian Postgres Company http://www.postgrespro.com --=_eaaaed69011fe4ba080b8f70b9b7e1b2 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=begin_waitfor_v7.patch Content-Disposition: attachment; filename=begin_waitfor_v7.patch; size=26585 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYmVnaW4uc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvYmVnaW4uc2dtbAppbmRleCBjMjNiYmZiNGU3MS4uMTlhMzNkN2Q4ZmIgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvYmVnaW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2JlZ2lu LnNnbWwKQEAgLTIxLDcgKzIxLDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVm c3lub3BzaXNkaXY+CiA8c3lub3BzaXM+Ci1CRUdJTiBbIFdPUksgfCBUUkFOU0FDVElPTiBdIFsg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2Vh YmxlPiBbLCAuLi5dIF0KK0JFR0lOIFsgV09SSyB8IFRSQU5TQUNUSU9OIF0gWyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFssIC4u Ll0gXSBbIFdBSVQgRk9SIExTTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX3Zh bHVlPC9yZXBsYWNlYWJsZT4gW1RJTUVPVVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm51bWJlcl9vZl9taWxsaXNlY29uZHM8L3JlcGxhY2VhYmxlPiBdIF0KIAogPHBocmFzZT53aGVy ZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFj ZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KIApAQCAtNjMsNiArNjMsMTcgQEAgQkVHSU4gWyBX T1JLIHwgVFJBTlNBQ1RJT04gXSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFu c2FjdGlvbl9tb2RlPC8KICAgIDx4cmVmIGxpbmtlbmQ9InNxbC1zZXQtdHJhbnNhY3Rpb24iLz4K ICAgIHdhcyBleGVjdXRlZC4KICAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxsaXRlcmFs PldBSVQgRk9SPC9saXRlcmFsPiBjbGF1c2UgYWxsb3dzIHRvIHdhaXQgZm9yIHRoZSB0YXJnZXQg bG9nCisgICBzZXF1ZW5jZSBudW1iZXIgKDxhY3JvbnltPkxTTjwvYWNyb255bT4pIHRvIGJlIHJl cGxheWVkIG9uIHN0YW5kYnkgYmVmb3JlCisgICBzdGFydGluZyB0aGUgdHJhbnNhY3Rpb24gaW4g PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMKKyAgIHdpdGgg bWFzdGVyLXN0YW5kYnkgYXN5bmNocm9ub3VzIHJlcGxpY2F0aW9uLiBXYWl0IHRpbWUgY2FuIGJl IGxpbWl0ZWQgYnkKKyAgIHNwZWNpZnlpbmcgYSB0aW1lb3V0LCB3aGljaCBpcyBtZWFzdXJlZCBp biBtaWxsaXNlY29uZHMgYW5kIG11c3QgYmUgYSBwb3NpdGl2ZQorICAgaW50ZWdlci4gSWYgPGFj cm9ueW0+TFNOPC9hY3JvbnltPiB3YXMgbm90IHJlYWNoZWQgYmVmb3JlIHRpbWVvdXQsIHRyYW5z YWN0aW9uCisgICBkb2Vzbid0IGJlZ2luLiBXYWl0aW5nIGNhbiBiZSBpbnRlcnJ1cHRlZCB1c2lu ZyA8bGl0ZXJhbD5DdHJsK0M8L2xpdGVyYWw+LCBvcgorICAgYnkgc2h1dHRpbmcgZG93biB0aGUg PGxpdGVyYWw+cG9zdGdyZXM8L2xpdGVyYWw+IHNlcnZlci4KKyAgPC9wYXJhPgogIDwvcmVmc2Vj dDE+CiAKICA8cmVmc2VjdDE+CkBAIC0xNDYsNiArMTU3LDEwIEBAIEJFR0lOOwogICAgZGlmZmVy ZW50IHB1cnBvc2UgaW4gZW1iZWRkZWQgU1FMLiBZb3UgYXJlIGFkdmlzZWQgdG8gYmUgY2FyZWZ1 bAogICAgYWJvdXQgdGhlIHRyYW5zYWN0aW9uIHNlbWFudGljcyB3aGVuIHBvcnRpbmcgZGF0YWJh c2UgYXBwbGljYXRpb25zLgogICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGVyZSBpcyBubyA8 Y29tbWFuZD5XQUlUIEZPUjwvY29tbWFuZD4gY2xhdXNlIGluIHRoZSBTUUwgc3RhbmRhcmQuCisg IDwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9zdGFy dF90cmFuc2FjdGlvbi5zZ21sCmluZGV4IGQ2Y2QxZDQxNzc5Li5jOWY3MGQyNzA5YSAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvc3RhcnRfdHJhbnNhY3Rpb24uc2dtbApAQCAtMjEsNyArMjEsNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZzeW5vcHNpc2Rpdj4KIDxzeW5vcHNpcz4KLVNU QVJUIFRSQU5TQUNUSU9OIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0 aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dIF0KK1NUQVJUIFRSQU5TQUNUSU9OIFsgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2VhYmxl PiBbLCAuLi5dIF0gWyBXQUlUIEZPUiBMU04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pmxzbl92YWx1ZTwvcmVwbGFjZWFibGU+IFtUSU1FT1VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5udW1iZXJfb2ZfbWlsbGlzZWNvbmRzPC9yZXBsYWNlYWJsZT4gXSBdCiAKIDxwaHJh c2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8 L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKQEAgLTQwLDYgKzQwLDE3IEBAIFNU QVJUIFRSQU5TQUNUSU9OIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0 aW9uX21vZGU8L3JlcGxhY2VhYmxlCiAgICBjaGFyYWN0ZXJpc3RpY3MsIGFzIGlmIDx4cmVmIGxp bmtlbmQ9InNxbC1zZXQtdHJhbnNhY3Rpb24iLz4gd2FzIGV4ZWN1dGVkLiBUaGlzIGlzIHRoZSBz YW1lCiAgICBhcyB0aGUgPHhyZWYgbGlua2VuZD0ic3FsLWJlZ2luIi8+IGNvbW1hbmQuCiAgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8bGl0ZXJhbD5XQUlUIEZPUjwvbGl0ZXJhbD4gY2xh dXNlIGFsbG93cyB0byB3YWl0IGZvciB0aGUgdGFyZ2V0IGxvZworICAgc2VxdWVuY2UgbnVtYmVy ICg8YWNyb255bT5MU048L2Fjcm9ueW0+KSB0byBiZSByZXBsYXllZCBvbiBzdGFuZGJ5IGJlZm9y ZQorICAgc3RhcnRpbmcgdGhlIHRyYW5zYWN0aW9uIGluIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FM PC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzCisgICB3aXRoIG1hc3Rlci1zdGFuZGJ5IGFzeW5jaHJv bm91cyByZXBsaWNhdGlvbi4gV2FpdCB0aW1lIGNhbiBiZSBsaW1pdGVkIGJ5CisgICBzcGVjaWZ5 aW5nIGEgdGltZW91dCwgd2hpY2ggaXMgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzIGFuZCBtdXN0 IGJlIGEgcG9zaXRpdmUKKyAgIGludGVnZXIuIElmIDxhY3JvbnltPkxTTjwvYWNyb255bT4gd2Fz IG5vdCByZWFjaGVkIGJlZm9yZSB0aW1lb3V0LCB0cmFuc2FjdGlvbgorICAgZG9lc24ndCBiZWdp bi4gV2FpdGluZyBjYW4gYmUgaW50ZXJydXB0ZWQgdXNpbmcgPGxpdGVyYWw+Q3RybCtDPC9saXRl cmFsPiwgb3IKKyAgIGJ5IHNodXR0aW5nIGRvd24gdGhlIDxsaXRlcmFsPnBvc3RncmVzPC9saXRl cmFsPiBzZXJ2ZXIuCisgIDwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpAQCAt NzgsNiArODksMTAgQEAgU1RBUlQgVFJBTlNBQ1RJT04gWyA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGUKICAgIG9taXR0ZWQuCiAgIDwv cGFyYT4KIAorICA8cGFyYT4KKyAgIFRoZXJlIGlzIG5vIDxjb21tYW5kPldBSVQgRk9SPC9jb21t YW5kPiBjbGF1c2UgaW4gdGhlIFNRTCBzdGFuZGFyZC4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgog ICAgU2VlIGFsc28gdGhlIGNvbXBhdGliaWxpdHkgc2VjdGlvbiBvZiA8eHJlZiBsaW5rZW5kPSJz cWwtc2V0LXRyYW5zYWN0aW9uIi8+LgogICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMKaW5kZXggYWJmOTU0YmEzOTIuLmQyODU2Yzg4OTQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFi bGVzcGFjZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNsdWRlICJjb21tb24v Y29udHJvbGRhdGFfdXRpbHMuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC03MzMyLDYgKzczMzMsMTUgQEAgU3RhcnR1cFhMT0co dm9pZCkKIAkJCQkJYnJlYWs7CiAJCQkJfQogCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSByZXBsYXll ZCBhbiBMU04gdGhhdCBzb21lb25lIHdhcyB3YWl0aW5nIGZvciwKKwkJCQkgKiBzZXQgbGF0Y2hl cyBpbiBzaGFyZWQgbWVtb3J5IGFycmF5IHRvIG5vdGlmeSB0aGUgd2FpdGVyLgorCQkJCSAqLwor CQkJCWlmIChYTG9nQ3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIgPj0gR2V0TWluV2FpdCgpKQor CQkJCXsKKwkJCQkJV2FpdFNldExhdGNoKFhMb2dDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0cik7 CisJCQkJfQorCiAJCQkJLyogRWxzZSwgdHJ5IHRvIGZldGNoIHRoZSBuZXh0IFdBTCByZWNvcmQg Ki8KIAkJCQlyZWNvcmQgPSBSZWFkUmVjb3JkKHhsb2dyZWFkZXIsIExPRywgZmFsc2UpOwogCQkJ fSB3aGlsZSAocmVjb3JkICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCBkNDgxNWQz Y2U2NS4uOWIzMTA5MjZjMTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2Vm aWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC01Nyw2ICs1Nyw3IEBA IE9CSlMgPSBcCiAJdXNlci5vIFwKIAl2YWN1dW0ubyBcCiAJdmFyaWFibGUubyBcCi0Jdmlldy5v CisJdmlldy5vIFwKKwl3YWl0Lm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5k L2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5kN2RiZjNiNzI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3dhaXQuYwpAQCAtMCwwICsxLDI5MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog d2FpdC5jCisgKgkgIEltcGxlbWVudHMgV0FJVCBGT1IsIHdoaWNoIGFsbG93cyB3YWl0aW5nIGZv ciBldmVudHMgc3VjaCBhcworICoJICBMU04gaGF2aW5nIGJlZW4gcmVwbGF5ZWQgb24gcmVwbGlj YS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMCwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyMCwg UmVnZW50cyBvZiBQb3N0Z3Jlc1BybworICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9i YWNrZW5kL2NvbW1hbmRzL3dhaXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJhY2Nl c3MvdHJhbnNhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNz L3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCisjaW5jbHVkZSAiZnVuY2Fw aS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYmFja2VuZGlk LmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgi CisjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5o IgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIK KyNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1w LmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rv cy5oIgorCisvKiBBZGQgdG8gLyBkZWxldGUgZnJvbSBzaGFyZWQgbWVtb3J5IGFycmF5ICovCitz dGF0aWMgdm9pZCBBZGRFdmVudChYTG9nUmVjUHRyIGxzbl90b193YWl0KTsKK3N0YXRpYyB2b2lk IERlbGV0ZUV2ZW50KHZvaWQpOworCisvKiBTaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLwordHlw ZWRlZiBzdHJ1Y3QKK3sKKwlpbnQJCQliYWNrZW5kX21heGlkOworCVhMb2dSZWNQdHIJbWluX2xz bjsKKwlzbG9ja190CQltdXRleDsKKwkvKiBMU05zIHRoYXQgZGlmZmVyZW50IGJhY2tlbmRzIGFy ZSB3YWl0aW5nICovCisJWExvZ1JlY1B0cglsc25bRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30g V2FpdFN0YXRlOworCitzdGF0aWMgdm9sYXRpbGUgV2FpdFN0YXRlICpzdGF0ZTsKKworLyoKKyAq IEFkZCB0aGUgd2FpdCBldmVudCBvZiB0aGUgY3VycmVudCBiYWNrZW5kIHRvIHNoYXJlZCBtZW1v cnkgYXJyYXkKKyAqLworc3RhdGljIHZvaWQKK0FkZEV2ZW50KFhMb2dSZWNQdHIgbHNuX3RvX3dh aXQpCit7CisJU3BpbkxvY2tBY3F1aXJlKCZzdGF0ZS0+bXV0ZXgpOworCWlmIChzdGF0ZS0+YmFj a2VuZF9tYXhpZCA8IE15QmFja2VuZElkKQorCQlzdGF0ZS0+YmFja2VuZF9tYXhpZCA9IE15QmFj a2VuZElkOworCisJc3RhdGUtPmxzbltNeUJhY2tlbmRJZF0gPSBsc25fdG9fd2FpdDsKKworCWlm IChsc25fdG9fd2FpdCA8IHN0YXRlLT5taW5fbHNuKQorCQlzdGF0ZS0+bWluX2xzbiA9IGxzbl90 b193YWl0OworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKworLyoKKyAqIERl bGV0ZSB3YWl0IGV2ZW50IG9mIHRoZSBjdXJyZW50IGJhY2tlbmQgZnJvbSB0aGUgc2hhcmVkIG1l bW9yeSBhcnJheS4KKyAqCisgKiBUT0RPOiBDb25zaWRlciBzdGF0ZSBjbGVhbnVwIG9uIGJhY2tl bmQgZmFpbHVyZS4KKyAqIENoZWNrOgorICogMSkgbm9tYWx8c21hcnR8ZmFzdHxpbW1lZGlhdGUg c3RvcAorICogMikgU0lHS0lMTCBhbmQgU0lHVEVSTQorICovCitzdGF0aWMgdm9pZAorRGVsZXRl RXZlbnQodm9pZCkKK3sKKwlpbnQJCQlpOworCVhMb2dSZWNQdHIJbHNuX3RvX2RlbGV0ZSA9IHN0 YXRlLT5sc25bTXlCYWNrZW5kSWRdOworCisJc3RhdGUtPmxzbltNeUJhY2tlbmRJZF0gPSBJbnZh bGlkWExvZ1JlY1B0cjsKKworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUtPm11dGV4KTsKKworCS8q IElmIHdlIGFyZSBkZWxldGluZyB0aGUgbWluaW1hbCBMU04sIHRoZW4gY2hvb3NlIHRoZSBuZXh0 IG1pbl9sc24gKi8KKwlpZiAoc3RhdGUtPm1pbl9sc24gPT0gbHNuX3RvX2RlbGV0ZSkKKwl7CisJ CXN0YXRlLT5taW5fbHNuID0gUEdfVUlOVDY0X01BWDsKKwkJZm9yIChpID0gMjsgaSA8PSBzdGF0 ZS0+YmFja2VuZF9tYXhpZDsgaSsrKQorCQkJaWYgKHN0YXRlLT5sc25baV0gIT0gSW52YWxpZFhM b2dSZWNQdHIgJiYKKwkJCQlzdGF0ZS0+bHNuW2ldIDwgc3RhdGUtPm1pbl9sc24pCisJCQkJc3Rh dGUtPm1pbl9sc24gPSBzdGF0ZS0+bHNuW2ldOworCX0KKworCS8qIElmIGRlbGV0aW5nIGZyb20g dGhlIGVuZCBvZiB0aGUgYXJyYXksIHNob3J0ZW4gdGhlIGFycmF5J3MgdXNlZCBwYXJ0ICovCisJ aWYgKHN0YXRlLT5iYWNrZW5kX21heGlkID09IE15QmFja2VuZElkKQorCQlmb3IgKGkgPSAoTXlC YWNrZW5kSWQpOyBpID49IDI7IGktLSkKKwkJCWlmIChzdGF0ZS0+bHNuW2ldICE9IEludmFsaWRY TG9nUmVjUHRyKQorCQkJeworCQkJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gaTsKKwkJCQlicmVh azsKKwkJCX0KKworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKworLyoKKyAq IFJlcG9ydCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgZm9yIFdhaXRTdGF0 ZQorICovCitTaXplCitXYWl0U2htZW1TaXplKHZvaWQpCit7CisJU2l6ZQkJc2l6ZTsKKworCXNp emUgPSBvZmZzZXRvZihXYWl0U3RhdGUsIGxzbik7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11 bF9zaXplKE1heEJhY2tlbmRzICsgMSwgc2l6ZW9mKFhMb2dSZWNQdHIpKSk7CisJcmV0dXJuIHNp emU7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGFuIGFycmF5IG9mIGV2ZW50cyB0byB3YWl0IGZv ciBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3ZvaWQKK1dhaXRTaG1lbUluaXQodm9pZCkKK3sKKwli b29sCQlmb3VuZDsKKwl1aW50MzIJCWk7CisKKwlzdGF0ZSA9IChXYWl0U3RhdGUgKikgU2htZW1J bml0U3RydWN0KCJwZ193YWl0X2xzbiIsCisJCQkJCQkJCQkJICBXYWl0U2htZW1TaXplKCksCisJ CQkJCQkJCQkJICAmZm91bmQpOworCWlmICghZm91bmQpCisJeworCQlTcGluTG9ja0luaXQoJnN0 YXRlLT5tdXRleCk7CisKKwkJZm9yIChpID0gMDsgaSA8IChNYXhCYWNrZW5kcyArIDEpOyBpKysp CisJCQlzdGF0ZS0+bHNuW2ldID0gSW52YWxpZFhMb2dSZWNQdHI7CisKKwkJc3RhdGUtPmJhY2tl bmRfbWF4aWQgPSAwOworCQlzdGF0ZS0+bWluX2xzbiA9IFBHX1VJTlQ2NF9NQVg7CisJfQorfQor CisvKgorICogU2V0IGxhdGNoZXMgaW4gc2hhcmVkIG1lbW9yeSB0byBzaWduYWwgdGhhdCBuZXcg TFNOIGhhcyBiZWVuIHJlcGxheWVkCisgKi8KK3ZvaWQKK1dhaXRTZXRMYXRjaChYTG9nUmVjUHRy IGN1cl9sc24pCit7CisJdWludDMyCQlpOworCWludAkJCWJhY2tlbmRfbWF4aWQ7CisJUEdQUk9D CSAgICpiYWNrZW5kOworCisJU3BpbkxvY2tBY3F1aXJlKCZzdGF0ZS0+bXV0ZXgpOworCWJhY2tl bmRfbWF4aWQgPSBzdGF0ZS0+YmFja2VuZF9tYXhpZDsKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRl LT5tdXRleCk7CisKKwlmb3IgKGkgPSAyOyBpIDw9IGJhY2tlbmRfbWF4aWQ7IGkrKykKKwl7CisJ CWJhY2tlbmQgPSBCYWNrZW5kSWRHZXRQcm9jKGkpOworCisJCWlmIChiYWNrZW5kICYmIHN0YXRl LT5sc25baV0gIT0gMCAmJgorCQkJc3RhdGUtPmxzbltpXSA8PSBjdXJfbHNuKQorCQl7CisJCQlT ZXRMYXRjaCgmYmFja2VuZC0+cHJvY0xhdGNoKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEdldCBt aW5pbWFsIExTTiB0aGF0IHNvbWVvbmUgd2FpdHMgZm9yCisgKi8KK1hMb2dSZWNQdHIKK0dldE1p bldhaXQodm9pZCkKK3sKKwlyZXR1cm4gc3RhdGUtPm1pbl9sc247Cit9CisKKy8qCisgKiBPbiBX QUlUIHVzZSBhIGxhdGNoIHRvIHdhaXQgdGlsbCBMU04gaXMgcmVwbGF5ZWQsCisgKiBwb3N0bWFz dGVyIGRpZXMgb3IgdGltZW91dCBoYXBwZW5zLgorICogUmV0dXJucyAxIGlmIExTTiB3YXMgcmVh Y2hlZCBhbmQgMCBvdGhlcndpc2UuCisgKi8KK2ludAorV2FpdFV0aWxpdHkoWExvZ1JlY1B0ciB0 YXJnZXRfbHNuLCBjb25zdCBmbG9hdDggc2VjcykKK3sKKwlYTG9nUmVjUHRyCWN1cl9sc24gPSBH ZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCWludAkJCWxhdGNoX2V2ZW50czsKKwlmbG9hdDgJ CWVuZHRpbWU7CisJaW50CQkJcmVzID0gMDsKKworI2RlZmluZSBHZXROb3dGbG9hdCgpICgoZmxv YXQ4KSBHZXRDdXJyZW50VGltZXN0YW1wKCkgLyAxMDAwMDAwLjApCisJZW5kdGltZSA9IEdldE5v d0Zsb2F0KCkgKyBzZWNzOworCisJbGF0Y2hfZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfVElN RU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEg7CisKKwkvKiBDaGVjayBpZiB3ZSBhbHJlYWR5IHJl YWNoZWQgdGhlIG5lZWRlZCBMU04gKi8KKwlpZiAoY3VyX2xzbiA+PSB0YXJnZXRfbHNuKQorCQly ZXR1cm4gMTsKKworCUFkZEV2ZW50KHRhcmdldF9sc24pOworCisJZm9yICg7OykKKwl7CisJCWlu dAkJCXJjOworCQlmbG9hdDgJCWRlbGF5ID0gMDsKKwkJbG9uZwkJZGVsYXlfbXM7CisKKwkJaWYg KHNlY3MgPiAwLjApCisJCQlkZWxheSA9IGVuZHRpbWUgLSBHZXROb3dGbG9hdCgpOworCQllbHNl CisJCQkvKiBJZiB3ZSB3YWl0IGZvcmV2ZXIsIHVzZSAxIG1pbiB0aW1lb3V0IHRvIGNoZWNrIGZv ciBpbnRlcnJ1cHRzICovCisJCQlkZWxheSA9IDYwOworCisJCWlmIChkZWxheSA+IDAuMCkKKwkJ CWRlbGF5X21zID0gKGxvbmcpIGNlaWwoZGVsYXkgKiAxMDAwLjApOworCQllbHNlCisJCQlicmVh azsKKworCQkvKgorCQkgKiBJZiByZWNlaXZlZCBhbiBpbnRlcnJ1cHRpb24gZnJvbSBDSEVDS19G T1JfSU5URVJSVVBUUywKKwkJICogdGhlbiBkZWxldGUgdGhlIGN1cnJlbnQgZXZlbnQgZnJvbSBh cnJheS4KKwkJICovCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKQorCQl7CisJCQlEZWxldGVFdmVu dCgpOworCQkJUHJvY2Vzc0ludGVycnVwdHMoKTsKKwkJfQorCisJCS8qIElmIHBvc3RtYXN0ZXIg ZGllcywgZmluaXNoIGltbWVkaWF0ZWx5ICovCisJCWlmICghUG9zdG1hc3RlcklzQWxpdmUoKSkK KwkJCWJyZWFrOworCisJCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsIGxhdGNoX2V2ZW50cywgZGVs YXlfbXMsCisJCQkJCSAgIFdBSVRfRVZFTlRfQ0xJRU5UX1JFQUQpOworCisJCVJlc2V0TGF0Y2go TXlMYXRjaCk7CisKKwkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQkJY3VyX2xzbiA9IEdldFhM b2dSZXBsYXlSZWNQdHIoTlVMTCk7CisKKwkJLyogSWYgTFNOIGhhcyBiZWVuIHJlcGxheWVkICov CisJCWlmICh0YXJnZXRfbHNuIDw9IGN1cl9sc24pCisJCQlicmVhazsKKwl9CisKKwlEZWxldGVF dmVudCgpOworCisJaWYgKGN1cl9sc24gPCB0YXJnZXRfbHNuKQorCQllbG9nKE5PVElDRSwiTFNO IGlzIG5vdCByZWFjaGVkLiBUcnkgdG8gaW5jcmVhc2Ugd2FpdCB0aW1lLiIpOworCWVsc2UKKwkJ cmVzID0gMTsKKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBX QUlUIEZPUgorICovCitpbnQKK1dhaXRNYWluKFdhaXRDbGF1c2UgKnN0bXQsIERlc3RSZWNlaXZl ciAqZGVzdCkKK3sKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlUdXBPdXRwdXRTdGF0ZSAqdHN0YXRl OworCWludAkJCXJlcyA9IDA7CisKKwlyZXMgPSBXYWl0VXRpbGl0eShEYXR1bUdldExTTigKKwkJ CQkgIERpcmVjdEZ1bmN0aW9uQ2FsbDEocGdfbHNuX2luLENTdHJpbmdHZXREYXR1bShzdG10LT5s c24pKSksCisJCQkJICBzdG10LT50aW1lb3V0IC8gMTAwMC4wKTsKKworCS8qIE5lZWQgYSB0dXBs ZSBkZXNjcmlwdG9yIHJlcHJlc2VudGluZyBhIHNpbmdsZSBURVhUIGNvbHVtbiAqLworCXR1cGRl c2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygxKTsKKwlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDEsICJMU04gcmVhY2hlZCIsIFRFWFRPSUQsIC0xLCAwKTsKKwor CS8qIFByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCisJdHN0YXRlID0gYmVnaW5f dHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOwor CisJLyogU2VuZCB0aGUgcmVzdWx0ICovCisJZG9fdGV4dF9vdXRwdXRfb25lbGluZSh0c3RhdGUs IHJlcyA/ICJ0IiA6ICJmIik7CisJZW5kX3R1cF9vdXRwdXQodHN0YXRlKTsKKwlyZXR1cm4gcmVz OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFj a2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCBmOWQ4Njg1OWVlNy4uYjAwYzc3MmI3MWUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL2NvcHlmdW5jcy5jCkBAIC0zNzQxLDEwICszNzQxLDIyIEBAIF9jb3B5VHJhbnNhY3Rp b25TdG10KGNvbnN0IFRyYW5zYWN0aW9uU3RtdCAqZnJvbSkKIAlDT1BZX1NUUklOR19GSUVMRChz YXZlcG9pbnRfbmFtZSk7CiAJQ09QWV9TVFJJTkdfRklFTEQoZ2lkKTsKIAlDT1BZX1NDQUxBUl9G SUVMRChjaGFpbik7CisJQ09QWV9OT0RFX0ZJRUxEKHdhaXQpOwogCiAJcmV0dXJuIG5ld25vZGU7 CiB9CiAKK3N0YXRpYyBXYWl0Q2xhdXNlICoKK19jb3B5V2FpdENsYXVzZShjb25zdCBXYWl0Q2xh dXNlICpmcm9tKQoreworCVdhaXRDbGF1c2UgKm5ld25vZGUgPSBtYWtlTm9kZShXYWl0Q2xhdXNl KTsKKworCUNPUFlfU1RSSU5HX0ZJRUxEKGxzbik7CisJQ09QWV9TQ0FMQVJfRklFTEQodGltZW91 dCk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK307CisKIHN0YXRpYyBDb21wb3NpdGVUeXBlU3RtdCAq CiBfY29weUNvbXBvc2l0ZVR5cGVTdG10KGNvbnN0IENvbXBvc2l0ZVR5cGVTdG10ICpmcm9tKQog ewpAQCAtNTMzMiw2ICs1MzQ0LDkgQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkK IAkJY2FzZSBUX1RyYW5zYWN0aW9uU3RtdDoKIAkJCXJldHZhbCA9IF9jb3B5VHJhbnNhY3Rpb25T dG10KGZyb20pOwogCQkJYnJlYWs7CisJCWNhc2UgVF9XYWl0Q2xhdXNlOgorCQkJcmV0dmFsID0g X2NvcHlXYWl0Q2xhdXNlKGZyb20pOworCQkJYnJlYWs7CiAJCWNhc2UgVF9Db21wb3NpdGVUeXBl U3RtdDoKIAkJCXJldHZhbCA9IF9jb3B5Q29tcG9zaXRlVHlwZVN0bXQoZnJvbSk7CiAJCQlicmVh azsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYyBiL3NyYy9iYWNr ZW5kL25vZGVzL2VxdWFsZnVuY3MuYwppbmRleCBlOGU3ODE4MzRhNS4uYzFiNjIyZWEzMDEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKQEAgLTE1MzksNiArMTUzOSwxNiBAQCBfZXF1YWxUcmFuc2Fj dGlvblN0bXQoY29uc3QgVHJhbnNhY3Rpb25TdG10ICphLCBjb25zdCBUcmFuc2FjdGlvblN0bXQg KmIpCiAJQ09NUEFSRV9TVFJJTkdfRklFTEQoc2F2ZXBvaW50X25hbWUpOwogCUNPTVBBUkVfU1RS SU5HX0ZJRUxEKGdpZCk7CiAJQ09NUEFSRV9TQ0FMQVJfRklFTEQoY2hhaW4pOworCUNPTVBBUkVf Tk9ERV9GSUVMRCh3YWl0KTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorX2Vx dWFsV2FpdENsYXVzZShjb25zdCBXYWl0Q2xhdXNlICphLCBjb25zdCBXYWl0Q2xhdXNlICpiKQor eworCUNPTVBBUkVfU1RSSU5HX0ZJRUxEKGxzbik7CisJQ09NUEFSRV9TQ0FMQVJfRklFTEQodGlt ZW91dCk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTMzODksNiArMzM5OSw5IEBAIGVxdWFsKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJCWNhc2UgVF9UcmFuc2FjdGlvblN0bXQ6CiAJ CQlyZXR2YWwgPSBfZXF1YWxUcmFuc2FjdGlvblN0bXQoYSwgYik7CiAJCQlicmVhazsKKwkJY2Fz ZSBUX1dhaXRDbGF1c2U6CisJCQlyZXR2YWwgPSBfZXF1YWxXYWl0Q2xhdXNlKGEsIGIpOworCQkJ YnJlYWs7CiAJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKIAkJCXJldHZhbCA9IF9lcXVhbENv bXBvc2l0ZVR5cGVTdG10KGEsIGIpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCAz NWVkOGMwZDUzOC4uOGViNTRkNGFiMDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMjc3OCw2ICsy Nzc4LDI4IEBAIF9vdXREZWZFbGVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBEZWZFbGVtICpub2Rl KQogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQKK19v dXRUcmFuc2FjdGlvblN0bXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFRyYW5zYWN0aW9uU3RtdCAq bm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUoIlRSQU5TQUNUSU9OU1RNVCIpOworCisJV1JJVEVf U1RSSU5HX0ZJRUxEKHNhdmVwb2ludF9uYW1lKTsKKwlXUklURV9TVFJJTkdfRklFTEQoZ2lkKTsK KwlXUklURV9OT0RFX0ZJRUxEKG9wdGlvbnMpOworCVdSSVRFX0JPT0xfRklFTEQoY2hhaW4pOwor CVdSSVRFX0VOVU1fRklFTEQoa2luZCwgVHJhbnNhY3Rpb25TdG10S2luZCk7CisJV1JJVEVfTk9E RV9GSUVMRCh3YWl0KTsKK30KKworc3RhdGljIHZvaWQKK19vdXRXYWl0Q2xhdXNlKFN0cmluZ0lu Zm8gc3RyLCBjb25zdCBXYWl0Q2xhdXNlICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiV0FJ VENMQVVTRSIpOworCisJV1JJVEVfU1RSSU5HX0ZJRUxEKGxzbik7CisJV1JJVEVfVUlOVF9GSUVM RCh0aW1lb3V0KTsKK30KKwogc3RhdGljIHZvaWQKIF9vdXRUYWJsZUxpa2VDbGF1c2UoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IFRhYmxlTGlrZUNsYXVzZSAqbm9kZSkKIHsKQEAgLTQzMjcsNiArNDM0 OSwxMiBAQCBvdXROb2RlKFN0cmluZ0luZm8gc3RyLCBjb25zdCB2b2lkICpvYmopCiAJCQljYXNl IFRfUGFydGl0aW9uUmFuZ2VEYXR1bToKIAkJCQlfb3V0UGFydGl0aW9uUmFuZ2VEYXR1bShzdHIs IG9iaik7CiAJCQkJYnJlYWs7CisJCQljYXNlIFRfVHJhbnNhY3Rpb25TdG10OgorCQkJCV9vdXRU cmFuc2FjdGlvblN0bXQoc3RyLCBvYmopOworCQkJCWJyZWFrOworCQkJY2FzZSBUX1dhaXRDbGF1 c2U6CisJCQkJX291dFdhaXRDbGF1c2Uoc3RyLCBvYmopOworCQkJCWJyZWFrOwogCiAJCQlkZWZh dWx0OgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueQppbmRleCAzNDQ5YzI2YmQxMS4uYTJmNDAyODVjNmUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQpAQCAtNTkyLDYgKzU5Miw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1Nl bGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8 cGFydGJvdW5kc3BlYz4gUGFydGl0aW9uQm91bmRTcGVjCiAldHlwZSA8bGlzdD4JCWhhc2hfcGFy dGJvdW5kCiAldHlwZSA8ZGVmZWx0PgkJaGFzaF9wYXJ0Ym91bmRfZWxlbQorJXR5cGUgPGl2YWw+ CQl3YWl0X3RpbWUKKyV0eXBlIDxub2RlPgkJd2FpdF9mb3IKIAogLyoKICAqIE5vbi1rZXl3b3Jk IHRva2VuIHR5cGVzLiAgVGhlc2UgYXJlIGhhcmQtd2lyZWQgaW50byB0aGUgImZsZXgiIGxleGVy LgpAQCAtNjYxLDcgKzY2Myw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVj dChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAKIAlMQUJFTCBM QU5HVUFHRSBMQVJHRV9QIExBU1RfUCBMQVRFUkFMX1AKIAlMRUFESU5HIExFQUtQUk9PRiBMRUFT VCBMRUZUIExFVkVMIExJS0UgTElNSVQgTElTVEVOIExPQUQgTE9DQUwKLQlMT0NBTFRJTUUgTE9D QUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tFRCBMT0dHRUQKKwlMT0NBTFRJTUUgTE9D QUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tFRCBMT0dHRUQgTFNOCiAKIAlNQVBQSU5H IE1BVENIIE1BVEVSSUFMSVpFRCBNQVhWQUxVRSBNRVRIT0QgTUlOVVRFX1AgTUlOVkFMVUUgTU9E RSBNT05USF9QIE1PVkUKIApAQCAtNjkyLDcgKzY5NCw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJU1VCU0NSSVBUSU9OIFNVQlNUUklORyBTVVBQT1JUIFNZTU1FVFJJQyBTWVNJRCBTWVNU RU1fUAogCiAJVEFCTEUgVEFCTEVTIFRBQkxFU0FNUExFIFRBQkxFU1BBQ0UgVEVNUCBURU1QTEFU RSBURU1QT1JBUlkgVEVYVF9QIFRIRU4KLQlUSUVTIFRJTUUgVElNRVNUQU1QIFRPIFRSQUlMSU5H IFRSQU5TQUNUSU9OIFRSQU5TRk9STQorCVRJRVMgVElNRSBUSU1FT1VUIFRJTUVTVEFNUCBUTyBU UkFJTElORyBUUkFOU0FDVElPTiBUUkFOU0ZPUk0KIAlUUkVBVCBUUklHR0VSIFRSSU0gVFJVRV9Q CiAJVFJVTkNBVEUgVFJVU1RFRCBUWVBFX1AgVFlQRVNfUAogCkBAIC03MDIsNyArNzA0LDggQEAg c3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3Qg KmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlWQUNVVU0gVkFMSUQgVkFMSURBVEUgVkFMSURBVE9S IFZBTFVFX1AgVkFMVUVTIFZBUkNIQVIgVkFSSUFESUMgVkFSWUlORwogCVZFUkJPU0UgVkVSU0lP Tl9QIFZJRVcgVklFV1MgVk9MQVRJTEUKIAotCVdIRU4gV0hFUkUgV0hJVEVTUEFDRV9QIFdJTkRP VyBXSVRIIFdJVEhJTiBXSVRIT1VUIFdPUksgV1JBUFBFUiBXUklURQorCVdBSVQgV0hFTiBXSEVS RSBXSElURVNQQUNFX1AgV0lORE9XCisJV0lUSCBXSVRISU4gV0lUSE9VVCBXT1JLIFdSQVBQRVIg V1JJVEUKIAogCVhNTF9QIFhNTEFUVFJJQlVURVMgWE1MQ09OQ0FUIFhNTEVMRU1FTlQgWE1MRVhJ U1RTIFhNTEZPUkVTVCBYTUxOQU1FU1BBQ0VTCiAJWE1MUEFSU0UgWE1MUEkgWE1MUk9PVCBYTUxT RVJJQUxJWkUgWE1MVEFCTEUKQEAgLTk5NDYsMTggKzk5NDksMjAgQEAgVHJhbnNhY3Rpb25TdG10 OgogCQkJCQluLT5jaGFpbiA9ICQzOwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9Ci0JCQl8 IEJFR0lOX1Agb3B0X3RyYW5zYWN0aW9uIHRyYW5zYWN0aW9uX21vZGVfbGlzdF9vcl9lbXB0eQor CQkJfCBCRUdJTl9QIG9wdF90cmFuc2FjdGlvbiB0cmFuc2FjdGlvbl9tb2RlX2xpc3Rfb3JfZW1w dHkgd2FpdF9mb3IKIAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uU3RtdCAqbiA9IG1ha2VOb2RlKFRy YW5zYWN0aW9uU3RtdCk7CiAJCQkJCW4tPmtpbmQgPSBUUkFOU19TVE1UX0JFR0lOOwogCQkJCQlu LT5vcHRpb25zID0gJDM7CisJCQkJCW4tPndhaXQgPSAkNDsKIAkJCQkJJCQgPSAoTm9kZSAqKW47 CiAJCQkJfQotCQkJfCBTVEFSVCBUUkFOU0FDVElPTiB0cmFuc2FjdGlvbl9tb2RlX2xpc3Rfb3Jf ZW1wdHkKKwkJCXwgU1RBUlQgVFJBTlNBQ1RJT04gdHJhbnNhY3Rpb25fbW9kZV9saXN0X29yX2Vt cHR5IHdhaXRfZm9yCiAJCQkJewogCQkJCQlUcmFuc2FjdGlvblN0bXQgKm4gPSBtYWtlTm9kZShU cmFuc2FjdGlvblN0bXQpOwogCQkJCQluLT5raW5kID0gVFJBTlNfU1RNVF9TVEFSVDsKIAkJCQkJ bi0+b3B0aW9ucyA9ICQzOworCQkJCQluLT53YWl0ID0gJDQ7CiAJCQkJCSQkID0gKE5vZGUgKilu OwogCQkJCX0KIAkJCXwgQ09NTUlUIG9wdF90cmFuc2FjdGlvbiBvcHRfdHJhbnNhY3Rpb25fY2hh aW4KQEAgLTE0MTg3LDYgKzE0MTkyLDI1IEBAIHhtbF9wYXNzaW5nX21lY2g6CiAJCQl8IEJZIFZB TFVFX1AKIAkJOwogCisvKgorICogV0FJVCBGT1IgY2xhdXNlIG9mIEJFR0lOIGFuZCBTVEFSVCBU UkFOU0FDVElPTiBzdGF0ZW1lbnRzCisgKi8KK3dhaXRfZm9yOgorCQkJV0FJVCBGT1IgTFNOIFNj b25zdCB3YWl0X3RpbWUKKwkJCQl7CisJCQkJCVdhaXRDbGF1c2UgKm4gPSBtYWtlTm9kZShXYWl0 Q2xhdXNlKTsKKwkJCQkJbi0+bHNuID0gJDQ7CisJCQkJCW4tPnRpbWVvdXQgPSAkNTsKKwkJCQkJ JCQgPSAoTm9kZSAqKW47CisJCQkJfQorCQkJfCAvKiBFTVBUWSAqLwkJeyAkJCA9IE5VTEw7IH0K KwkJOworCit3YWl0X3RpbWU6CisJCQlUSU1FT1VUIEljb25zdAkJeyAkJCA9ICQyOyB9CisJCQl8 IC8qIEVNUFRZICovCQl7ICQkID0gMDsgfQorCQk7CisKIAogLyoKICAqIEFnZ3JlZ2F0ZSBkZWNv cmF0aW9uIGNsYXVzZXMKQEAgLTE1MzM4LDYgKzE1MzYyLDcgQEAgdW5yZXNlcnZlZF9rZXl3b3Jk OgogCQkJfCBMT0NLX1AKIAkJCXwgTE9DS0VECiAJCQl8IExPR0dFRAorCQkJfCBMU04KIAkJCXwg TUFQUElORwogCQkJfCBNQVRDSAogCQkJfCBNQVRFUklBTElaRUQKQEAgLTE1NDY1LDYgKzE1NDkw LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBURU1QT1JBUlkKIAkJCXwgVEVYVF9QCiAJ CQl8IFRJRVMKKwkJCXwgVElNRU9VVAogCQkJfCBUUkFOU0FDVElPTgogCQkJfCBUUkFOU0ZPUk0K IAkJCXwgVFJJR0dFUgpAQCAtMTU0OTEsNiArMTU1MTcsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6 CiAJCQl8IFZJRVcKIAkJCXwgVklFV1MKIAkJCXwgVk9MQVRJTEUKKwkJCXwgV0FJVAogCQkJfCBX SElURVNQQUNFX1AKIAkJCXwgV0lUSElOCiAJCQl8IFdJVEhPVVQKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2ku YwppbmRleCA0MjdiMGQ1OWNkZS4uYmI4YWYzNDk4MDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMK QEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRl ICJhY2Nlc3MvdHdvcGhhc2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw Z3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKQEAgLTE0Nyw2ICsx NDgsNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6ZSgpKTsKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUs IFN5bmNTY2FuU2htZW1TaXplKCkpOwogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQXN5bmNTaG1l bVNpemUoKSk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWl0U2htZW1TaXplKCkpOwogI2lm ZGVmIEVYRUNfQkFDS0VORAogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1CYWNrZW5kQXJy YXlTaXplKCkpOwogI2VuZGlmCkBAIC0yNjQsNiArMjY2LDExIEBAIENyZWF0ZVNoYXJlZE1lbW9y eUFuZFNlbWFwaG9yZXModm9pZCkKIAlTeW5jU2NhblNobWVtSW5pdCgpOwogCUFzeW5jU2htZW1J bml0KCk7CiAKKwkvKgorCSAqIEluaXQgYXJyYXkgb2YgTGF0Y2hlcyBpbiBzaGFyZWQgbWVtb3J5 IGZvciBXQUlUCisJICovCisJV2FpdFNobWVtSW5pdCgpOworCiAjaWZkZWYgRVhFQ19CQUNLRU5E CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCBiMWY3ZjZlMmQwMS4uZTBjYTM4MTA2ZDQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdXNlci5oIgog I2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZpZXcuaCIK KyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicGFyc2VyL3BhcnNlX3V0aWxjbWQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3Jp dGVyLmgiCkBAIC01OTEsNiArNTkyLDExIEBAIHN0YW5kYXJkX1Byb2Nlc3NVdGlsaXR5KFBsYW5u ZWRTdG10ICpwc3RtdCwKIAkJCQkJY2FzZSBUUkFOU19TVE1UX1NUQVJUOgogCQkJCQkJewogCQkJ CQkJCUxpc3RDZWxsICAgKmxjOworCQkJCQkJCVdhaXRDbGF1c2UgICAqd2FpdHN0bXQgPSAoV2Fp dENsYXVzZSAqKSBzdG10LT53YWl0OworCisJCQkJCQkJLyogSWYgbmVlZGVkIHRvIFdBSVQgRk9S IHNvbWV0aGluZyBidXQgZmFpbGVkICovCisJCQkJCQkJaWYgKHN0bXQtPndhaXQgJiYgV2FpdE1h aW4od2FpdHN0bXQsIGRlc3QpID09IDApCisJCQkJCQkJCWJyZWFrOwogCiAJCQkJCQkJQmVnaW5U cmFuc2FjdGlvbkJsb2NrKCk7CiAJCQkJCQkJZm9yZWFjaChsYywgc3RtdC0+b3B0aW9ucykKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQuaCBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGRmNWVk NTYzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKQEAg LTAsMCArMSwyNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogd2FpdC5oCisgKgkgIHBy b3RvdHlwZXMgZm9yIGNvbW1hbmRzL3dhaXQuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDIwLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAyMDIwLCBSZWdlbnRzIG9mIFBvc3RncmVzUHJvCisgKgorICog c3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgV0FJVF9ICisjZGVmaW5lIFdBSVRfSAorI2luY2x1ZGUgInBvc3RncmVzLmgiCisj aW5jbHVkZSAidGNvcC9kZXN0LmgiCisKK2V4dGVybiBpbnQgV2FpdFV0aWxpdHkoWExvZ1JlY1B0 ciBsc24sIGNvbnN0IGZsb2F0OCBkZWxheSk7CitleHRlcm4gU2l6ZSBXYWl0U2htZW1TaXplKHZv aWQpOworZXh0ZXJuIHZvaWQgV2FpdFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRT ZXRMYXRjaChYTG9nUmVjUHRyIGN1cl9sc24pOworZXh0ZXJuIFhMb2dSZWNQdHIgR2V0TWluV2Fp dCh2b2lkKTsKK2V4dGVybiBpbnQgV2FpdE1haW4oV2FpdENsYXVzZSAqc3RtdCwgRGVzdFJlY2Vp dmVyICpkZXN0KTsKKworI2VuZGlmICAgLyogV0FJVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCA1MGIx YmE1MTg2My4uYzM3NjYzYTI4YmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtNDkyLDYgKzQ5Miw3IEBAIHR5 cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9TdGFydFJlcGxpY2F0aW9uQ21kLAogCVRfVGltZUxpbmVI aXN0b3J5Q21kLAogCVRfU1FMQ21kLAorCVRfV2FpdENsYXVzZSwKIAogCS8qCiAJICogVEFHUyBG T1IgUkFORE9NIE9USEVSIFNUVUZGCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggY2Q2ZjFiZTY0 MzUuLjMwZjVkN2MwOTE2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xNDMwLDYgKzE0MzAs MTcgQEAgdHlwZWRlZiBzdHJ1Y3QgT25Db25mbGljdENsYXVzZQogCWludAkJCWxvY2F0aW9uOwkJ LyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KIH0gT25Db25mbGljdENsYXVz ZTsKIAorLyoKKyAqIFdhaXRDbGF1c2UgLQorICoJCXJlcHJlc2VudGF0aW9uIG9mIFdBSVQgRk9S IGNsYXVzZSBmb3IgQkVHSU4gYW5kIFNUQVJUIFRSQU5TQUNUSU9OLgorICovCit0eXBlZGVmIHN0 cnVjdCBXYWl0Q2xhdXNlCit7CisJTm9kZVRhZwkJdHlwZTsKKwljaGFyCSAgICpsc247CQkJLyog TFNOIHRvIHdhaXQgZm9yICovCisJaW50CQkJdGltZW91dDsJCS8qIE51bWJlciBvZiBtaWxsaXNl Y29uZHMgdG8gbGltaXQgd2FpdCB0aW1lICovCit9IFdhaXRDbGF1c2U7CisKIC8qCiAgKiBDb21t b25UYWJsZUV4cHIgLQogICoJICAgcmVwcmVzZW50YXRpb24gb2YgV0lUSCBsaXN0IGVsZW1lbnQK QEAgLTMwNTgsNiArMzA2OSw3IEBAIHR5cGVkZWYgc3RydWN0IFRyYW5zYWN0aW9uU3RtdAogCWNo YXIJICAgKnNhdmVwb2ludF9uYW1lOyAvKiBmb3Igc2F2ZXBvaW50IGNvbW1hbmRzICovCiAJY2hh cgkgICAqZ2lkOwkJCS8qIGZvciB0d28tcGhhc2UtY29tbWl0IHJlbGF0ZWQgY29tbWFuZHMgKi8K IAlib29sCQljaGFpbjsJCQkvKiBBTkQgQ0hBSU4gb3B0aW9uICovCisJTm9kZQkJKndhaXQ7CQkJ LyogV0FJVCBGT1IgY2xhdXNlICovCiB9IFRyYW5zYWN0aW9uU3RtdDsKIAogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIv c3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4IDA4ZjIyY2UyMTFkLi42ZTE4NDhmZTRj YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCisrKyBiL3NyYy9pbmNs dWRlL3BhcnNlci9rd2xpc3QuaApAQCAtMjQzLDYgKzI0Myw3IEBAIFBHX0tFWVdPUkQoImxvY2F0 aW9uIiwgTE9DQVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImxvY2siLCBM T0NLX1AsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImxvY2tlZCIsIExPQ0tFRCwg VU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibG9nZ2VkIiwgTE9HR0VELCBVTlJFU0VS VkVEX0tFWVdPUkQpCitQR19LRVlXT1JEKCJsc24iLCBMU04sIFVOUkVTRVJWRURfS0VZV09SRCkK IFBHX0tFWVdPUkQoIm1hcHBpbmciLCBNQVBQSU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19L RVlXT1JEKCJtYXRjaCIsIE1BVENILCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJt YXRlcmlhbGl6ZWQiLCBNQVRFUklBTElaRUQsIFVOUkVTRVJWRURfS0VZV09SRCkKQEAgLTQxMCw2 ICs0MTEsNyBAQCBQR19LRVlXT1JEKCJ0ZXh0IiwgVEVYVF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQp CiBQR19LRVlXT1JEKCJ0aGVuIiwgVEhFTiwgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQo InRpZXMiLCBUSUVTLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0aW1lIiwgVElN RSwgQ09MX05BTUVfS0VZV09SRCkKK1BHX0tFWVdPUkQoInRpbWVvdXQiLCBUSU1FT1VULCBVTlJF U0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0aW1lc3RhbXAiLCBUSU1FU1RBTVAsIENPTF9O QU1FX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0byIsIFRPLCBSRVNFUlZFRF9LRVlXT1JEKQogUEdf S0VZV09SRCgidHJhaWxpbmciLCBUUkFJTElORywgUkVTRVJWRURfS0VZV09SRCkKQEAgLTQ1MCw2 ICs0NTIsNyBAQCBQR19LRVlXT1JEKCJ2ZXJzaW9uIiwgVkVSU0lPTl9QLCBVTlJFU0VSVkVEX0tF WVdPUkQpCiBQR19LRVlXT1JEKCJ2aWV3IiwgVklFVywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdf S0VZV09SRCgidmlld3MiLCBWSUVXUywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgi dm9sYXRpbGUiLCBWT0xBVElMRSwgVU5SRVNFUlZFRF9LRVlXT1JEKQorUEdfS0VZV09SRCgid2Fp dCIsIFdBSVQsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoIndoZW4iLCBXSEVOLCBS RVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgid2hlcmUiLCBXSEVSRSwgUkVTRVJWRURfS0VZ V09SRCkKIFBHX0tFWVdPUkQoIndoaXRlc3BhY2UiLCBXSElURVNQQUNFX1AsIFVOUkVTRVJWRURf S0VZV09SRCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDIwX2JlZ2luX3dhaXQu cGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAyMF9iZWdpbl93YWl0LnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYTE4YWMzNzYxYwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L3JlY292ZXJ5L3QvMDIwX2JlZ2luX3dhaXQucGwKQEAgLTAsMCArMSw3MSBAQAor IyBDaGVja3MgV0FJVCBGT1IKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0 Z3Jlc05vZGU7Cit1c2UgVGVzdExpYjsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDM7CisKKyMg SW5pdGlhbGl6ZSBtYXN0ZXIgbm9kZQorbXkgJG5vZGVfbWFzdGVyID0gZ2V0X25ld19ub2RlKCdt YXN0ZXInKTsKKyRub2RlX21hc3Rlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5v ZGVfbWFzdGVyLT5zdGFydDsKKworIyBBbmQgc29tZSBjb250ZW50IGFuZCB0YWtlIGEgYmFja3Vw Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgd2Fp dF90ZXN0IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMgYSIpOworbXkgJGJhY2t1 cF9uYW1lID0gJ215X2JhY2t1cCc7Ciskbm9kZV9tYXN0ZXItPmJhY2t1cCgkYmFja3VwX25hbWUp OworCisjIFVzaW5nIHRoZSBiYWNrdXAsIGNyZWF0ZSBhIHN0cmVhbWluZyBzdGFuZGJ5IHdpdGgg YSAxIHNlY29uZCBkZWxheQorbXkgJG5vZGVfc3RhbmRieSA9IGdldF9uZXdfbm9kZSgnc3RhbmRi eScpOworbXkgJGRlbGF5ICAgICAgICA9IDE7Ciskbm9kZV9zdGFuZGJ5LT5pbml0X2Zyb21fYmFj a3VwKCRub2RlX21hc3RlciwgJGJhY2t1cF9uYW1lLAorCWhhc19zdHJlYW1pbmcgPT4gMSk7Cisk bm9kZV9zdGFuZGJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXFbCisJcmVjb3Zl cnlfbWluX2FwcGx5X2RlbGF5ID0gJyR7ZGVsYXl9cycKK10pOworJG5vZGVfc3RhbmRieS0+c3Rh cnQ7CisKKworIyBDaGVjayB0aGF0IHRpbWVvdXRzIG1ha2UgdXMgd2FpdCBmb3IgdGhlIHNwZWNp ZmllZCB0aW1lICgxcyBoZXJlKQorbXkgJGN1cnJlbnRfdGltZSA9ICRub2RlX3N0YW5kYnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIG5vdygpIik7CitteSAkb25lX3NlY29uZCA9IDEw MDA7ICMgaW4gbWlsbGlzZWNvbmRzCitteSAkc3RhcnRfdGltZSA9IHRpbWUoKTsKKyRub2RlX3N0 YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJCRUdJTiBXQUlUIEZPUiBMU04gJzAvRkZG RkZGRkYnIFRJTUVPVVQgJG9uZV9zZWNvbmQiKTsKK215ICR0aW1lX3dhaXRlZCA9ICh0aW1lKCkg LSAkc3RhcnRfdGltZSkgKiAxMDAwOyAjIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzCitvaygkdGlt ZV93YWl0ZWQgPj0gJG9uZV9zZWNvbmQsICJXQUlUIEZPUiBUSU1FT1VUIHdhaXRzIGZvciBlbm91 Z2ggdGltZSIpOworCisKKyMgQ2hlY2sgdGhhdCB0aW1lb3V0cyBsZXQgdXMgc3RvcCB3YWl0aW5n IHJpZ2h0IGF3YXksIGJlZm9yZSByZWFjaGluZyB0YXJnZXQgTFNOCiskbm9kZV9tYXN0ZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5l cmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0gJG5vZGVfbWFzdGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworbXkgJHJlYWNo ZWRfbHNuID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkJFR0lOIFdB SVQgRk9SIExTTiAnJGxzbjEnIFRJTUVPVVQgMSIpOworb2soJHJlYWNoZWRfbHNuIGVxICJmIiwg IldBSVQgZG9lc24ndCByZWFjaCBMU04gaWYgZ2l2ZW4gdG9vIGxpdHRsZSB3YWl0IHRpbWUiKTsK KworCisjIENoZWNrIHRoYXQgV0FJVCBGT1Igd29ya3MgZmluZSBhbmQgcmVhY2hlcyB0YXJnZXQg TFNOIGlmIGdpdmVuIG5vIHRpbWVvdXQKKworIyBBZGQgZGF0YSBvbiBtYXN0ZXIsIG1lbW9yaXpl IG1hc3RlcidzIGxhc3QgTFNOCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMjEsIDMwKSki KTsKK215ICRsc24yID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworCisjIFdhaXQgZm9yIGl0IHRvIGFwcGVhciBvbiBy ZXBsaWNhLCBtZW1vcml6ZSByZXBsaWNhJ3MgbGFzdCBMU04KKyRub2RlX3N0YW5kYnktPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJCRUdJTiBXQUlUIEZPUiBMU04gJyRsc24yJyIpOworJHJlYWNo ZWRfbHNuID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBw Z19sYXN0X3dhbF9yZXBsYXlfbHNuKCkiKTsKKworIyBNYWtlIHN1cmUgdGhhdCBtYXN0ZXIncyBh bmQgcmVwbGljYSdzIExTTnMgYXJlIHRoZSBzYW1lIGFmdGVyIFdBSVQKK215ICRjb21wYXJlX2xz bnMgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xz bl9jbXAoJyRyZWFjaGVkX2xzbic6OnBnX2xzbiwgJyRsc24yJzo6cGdfbHNuKSIpOworb2soJGNv bXBhcmVfbHNucyBlcSAwLAorCSJzdGFuZGJ5IHJlYWNoZWQgdGhlIHNhbWUgTFNOIGFzIG1hc3Rl ciBiZWZvcmUgc3RhcnRpbmcgdHJhbnNhY3Rpb24iKTsKKworCiskbm9kZV9zdGFuZGJ5LT5zdG9w OworJG5vZGVfbWFzdGVyLT5zdG9wOwo= --=_eaaaed69011fe4ba080b8f70b9b7e1b2--