Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jAIrq-00076y-FA for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2020 19:42:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jAIrp-00045o-BG for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2020 19:42:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jAIro-00045g-Sj for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2020 19:42:41 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jAIrl-0006QS-Cz for pgsql-hackers@postgresql.org; Fri, 06 Mar 2020 19:42:40 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 1454421C1F8E for ; Fri, 6 Mar 2020 22:42:36 +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 D8C4521C08BB for ; Fri, 6 Mar 2020 22:42:35 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1583523755; bh=bJsgJHN5lFNGztc9IMeuMwss3v4yABVisYFbezma9UU=; h=Date:From:To:Subject:In-Reply-To:References; b=Vrm582MPwaT4eWKPQmLc9hxbU8H2hJJyfXGIRYRVEDFGZXPpAqgc8FY+UBRJrK50P 5bi3RvFbcsnr3DJlWljLGNox8CG/ph7SXfHqNYyBoFL5bV8ZL6MMUFtz7YM9o+wVij Ftb8G62efsYzCC0PPkcIjX/UkMo+rAxhXVRgD3Cc= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_25ea92fe5556ab68557625cf7b75fe64" Content-Transfer-Encoding: 8bit Date: Fri, 06 Mar 2020 22:42:35 +0300 From: Kartyshov Ivan To: pgsql-hackers@postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: <195e2d07ead315b1620f1a053313f490@postgrespro.ru> References: <195e2d07ead315b1620f1a053313f490@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: X-Sender: i.kartyshov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_25ea92fe5556ab68557625cf7b75fe64 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Sorry, I have some troubles on email sending. On 2020-03-06 08:54, Kyotaro Horiguchi wrote: > The syntax seems getting confused. What happens if we typed in the > command "WAIT FOR TIMESTAMP '...' UNTIL TIMESTAMP '....'"? It seems > to me the options is useles. Couldn't the TIMEOUT option be a part of > event? I know gram.y doesn't accept that syntax but it is not > apparent from the description above. I`ll fix the doc file. Synopsis ========== WAIT FOR [ANY | SOME | ALL] event [, event ...] and event is: LSN value [options] TIMESTAMP value and options is: TIMEOUT delay UNTIL TIMESTAMP timestamp > As I read through the previous thread, one of the reason for this > feature implemented as a syntax is it was inteded to be combined into > BEGIN statement. If there is not any use case for the feature midst > of a transaction, why don't you turn it into a part of BEGIN command? It`s seem to have some limitations on hot standbys. I`ll take few days to make a prototype. >> Description >> ========== >> WAIT FOR - make to wait statements (that are beneath) on sleep until >> event happens (Don’t process new queries until an event happens). > ... >> Notice: WAIT FOR will release on PostmasterDeath or Interruption >> events >> if they come earlier then LSN or timeout. > > I think interrupts ought to result in ERROR. > > wait.c adds a fair amount of code and uses proc-array based > approach. But Thomas suggested queue-based approach and I also think > it is better. We already have a queue-based mechanism that behaves > almost the same with this feature in the comit code on master-side. It > avoids spurious backend wakeups. Couldn't we extend SyncRepWaitForLSN > or share a part of the code/infrastructures so that this feature can > share the code? I`ll take a look on. Thank you for your review. Rebased patch is attached. -- Ivan Kartyshov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_25ea92fe5556ab68557625cf7b75fe64 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=wait_for_v2.patch Content-Disposition: attachment; filename=wait_for_v2.patch; size=29755 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCA4ZDkxZjM1MjllLi4xYTJiYzdkZmE5IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9hbGxmaWxlcy5zZ21sCkBAIC0xODcsNiArMTg3LDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2Fi bGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVOVElUWSB1cGRhdGUg ICAgICAgICAgICAgU1lTVEVNICJ1cGRhdGUuc2dtbCI+CiA8IUVOVElUWSB2YWN1dW0gICAgICAg ICAgICAgU1lTVEVNICJ2YWN1dW0uc2dtbCI+CiA8IUVOVElUWSB2YWx1ZXMgICAgICAgICAgICAg U1lTVEVNICJ2YWx1ZXMuc2dtbCI+Cis8IUVOVElUWSB3YWl0Zm9yICAgICAgICAgICAgU1lTVEVN ICJ3YWl0Zm9yLnNnbWwiPgogCiA8IS0tIGFwcGxpY2F0aW9ucyBhbmQgdXRpbGl0aWVzIC0tPgog PCFFTlRJVFkgY2x1c3RlcmRiICAgICAgICAgIFNZU1RFTSAiY2x1c3RlcmRiLnNnbWwiPgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi93YWl0Zm9yLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVm L3dhaXRmb3Iuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44ZmEy ZGRiNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi93YWl0Zm9yLnNnbWwK QEAgLTAsMCArMSwxMzYgQEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvd2FpdGxzbi5zZ21sCitQ b3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9InNxbC13YWl0bHNu Ij4KKyA8aW5kZXh0ZXJtIHpvbmU9InNxbC13YWl0bHNuIj4KKyAgPHByaW1hcnk+V0FJVCBGT1I8 L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0bGU+ V0FJVCBGT1I8L3JlZmVudHJ5dGl0bGU+CisgIDxtYW52b2xudW0+NzwvbWFudm9sbnVtPgorICA8 cmVmbWlzY2luZm8+U1FMIC0gTGFuZ3VhZ2UgU3RhdGVtZW50czwvcmVmbWlzY2luZm8+CisgPC9y ZWZtZXRhPgorCisgPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPldBSVQgRk9SPC9yZWZuYW1lPgor ICA8cmVmcHVycG9zZT53YWl0IGZvciB0aGUgdGFyZ2V0IDxhY3JvbnltPkxTTjwvYWNyb255bT4g dG8gYmUgcmVwbGF5ZWQ8L3JlZnB1cnBvc2U+CisgPC9yZWZuYW1lZGl2PgorCisgPHJlZnN5bm9w c2lzZGl2PgorPHN5bm9wc2lzPgorV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JyAKK1dBSVQgRk9SIExTTiAnPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxzbl9udW1iZXI8L3JlcGxhY2VhYmxlPicgVElNRU9V VCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lb3V0PC9yZXBsYWNlYWJs ZT4KK1dBSVQgRk9SIExTTiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxzbl9udW1i ZXI8L3JlcGxhY2VhYmxlPicgVU5USUwgVElNRVNUQU1QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj53YWl0X3RpbWU8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1IgVElNRVNUQU1QIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWU8L3JlcGxhY2VhYmxlPiAKKzwvc3lu b3BzaXM+CisgPC9yZWZzeW5vcHNpc2Rpdj4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkRlc2Ny aXB0aW9uPC90aXRsZT4KKworICA8cGFyYT4KKyAgIDxjb21tYW5kPldBSVQgRk9SPC9jb21tYW5k PiBwcm92aWRlcyBhIHNpbXBsZQorICAgaW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24gbWVjaGFu aXNtIHRvIHdhaXQgZm9yIHRpbWVzdGFtcCBvciB0aGUgdGFyZ2V0IGxvZyBzZXF1ZW5jZQorICAg bnVtYmVyICg8YWNyb255bT5MU048L2Fjcm9ueW0+KSBvbiBzdGFuZGJ5IGluIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4KKyAgIGRhdGFiYXNlcyB3aXRoIG1hc3Rlci1zdGFu ZGJ5IGFzeW5jaHJvbm91cyByZXBsaWNhdGlvbi4gV2hlbiBydW4gd2l0aCB0aGUKKyAgIDxyZXBs YWNlYWJsZT5MU048L3JlcGxhY2VhYmxlPiBvcHRpb24sIHRoZSA8Y29tbWFuZD5XQUlUIEZPUjwv Y29tbWFuZD4gY29tbWFuZAorICAgd2FpdHMgZm9yIHRoZSBzcGVjaWZpZWQgPGFjcm9ueW0+TFNO PC9hY3JvbnltPiB0byBiZSByZXBsYXllZC4gQnkgZGVmYXVsdCwgd2FpdAorICAgdGltZSBpcyB1 bmxpbWl0ZWQuIFdhaXRpbmcgY2FuIGJlIGludGVycnVwdGVkIHVzaW5nIDxsaXRlcmFsPkN0cmwr QzwvbGl0ZXJhbD4sIG9yCisgICBieSBzaHV0dGluZyBkb3duIHRoZSA8bGl0ZXJhbD5wb3N0Z3Jl czwvbGl0ZXJhbD4gc2VydmVyLiBZb3UgY2FuIGFsc28gbGltaXQgdGhlIHdhaXQKKyAgIHRpbWUg dXNpbmcgdGhlIDxvcHRpb24+VElNRU9VVDwvb3B0aW9uPiBvcHRpb24uCisgIDwvcGFyYT4KKwor IDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT4K KworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+TFNOPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZnkgdGhlIHRhcmdldCBsb2cgc2VxdWVu Y2UgbnVtYmVyIHRvIHdhaXQgZm9yLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPlRJTUVPVVQg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZW91dDwvcmVwbGFjZWFibGU+ PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBMaW1pdCB0aGUgdGlt ZSBpbnRlcnZhbCB0byB3YWl0IGZvciB0aGUgTFNOIHRvIGJlIHJlcGxheWVkLgorICAgICAgVGhl IHNwZWNpZmllZCA8cmVwbGFjZWFibGU+d2FpdF90aW1lb3V0PC9yZXBsYWNlYWJsZT4gbXVzdCBi ZSBhbiBpbnRlZ2VyCisgICAgICBhbmQgaXMgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPlVOVElMIFRJTUVTVEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIExpbWl0IHRoZSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBMU04g dG8gYmUgcmVwbGF5ZWQuCisgICAgICBUaGUgc3BlY2lmaWVkIDxyZXBsYWNlYWJsZT53YWl0X3Rp bWU8L3JlcGxhY2VhYmxlPiBtdXN0IGJlIHRpbWVzdGFtcC4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKyA8L3Jl ZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgIDxw YXJhPgorICAgUnVuIDxsaXRlcmFsPldBSVQgRk9SPC9saXRlcmFsPiBmcm9tIDxhcHBsaWNhdGlv bj5wc3FsPC9hcHBsaWNhdGlvbj4sCisgICBsaW1pdGluZyB3YWl0IHRpbWUgdG8gMTAwMDAgbWls bGlzZWNvbmRzOgorCis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMDdBNkIxJyBUSU1FT1VU IDEwMDAwOworTk9USUNFOiAgTFNOIGlzIG5vdCByZWFjaGVkLiBUcnkgdG8gaW5jcmVhc2Ugd2Fp dCB0aW1lLgorTFNOIHJlYWNoZWQKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCis8L3NjcmVl bj4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2FpdCB1bnRpbCB0aGUgc3BlY2lmaWVkIDxh Y3JvbnltPkxTTjwvYWNyb255bT4gaXMgcmVwbGF5ZWQ6Cis8c2NyZWVuPgorV0FJVCBGT1IgTFNO ICcwLzNGMDdBNjExJzsKK0xTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQor PC9zY3JlZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIExpbWl0IDxhY3JvbnltPkxTTjwv YWNyb255bT4gd2FpdCB0aW1lIHRvIDUwMDAwMCBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbmNl bCB0aGUgY29tbWFuZDoKKzxzY3JlZW4+CitXQUlUIEZPUiBMU04gJzAvM0YwRkY3OTEnIFRJTUVP VVQgNTAwMDAwOworXkNDYW5jZWwgcmVxdWVzdCBzZW50CitOT1RJQ0U6ICBMU04gaXMgbm90IHJl YWNoZWQuIFRyeSB0byBpbmNyZWFzZSB3YWl0IHRpbWUuCitFUlJPUjogIGNhbmNlbGluZyBzdGF0 ZW1lbnQgZHVlIHRvIHVzZXIgcmVxdWVzdAorIExTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisg ZgorKDEgcm93KQorPC9zY3JlZW4+Cis8L3BhcmE+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0 MT4KKyAgPHRpdGxlPkNvbXBhdGliaWxpdHk8L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhlcmUg aXMgbm8gPGNvbW1hbmQ+V0FJVCBGT1I8L2NvbW1hbmQ+IHN0YXRlbWVudCBpbiB0aGUgU1FMCisg ICBzdGFuZGFyZC4KKyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5j ZS5zZ21sCmluZGV4IGNlZjA5ZGQzOGIuLmJmZTYyZWUzNTEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9yZWZlcmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAg LTIxNSw2ICsyMTUsNyBAQAogICAgJnVwZGF0ZTsKICAgICZ2YWN1dW07CiAgICAmdmFsdWVzOwor ICAgJndhaXRmb3I7CiAKICA8L3JlZmVyZW5jZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CmluZGV4IDQzNjE1Njg4ODIuLmQxOTYzYjE3MjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNw YWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgImNvbW1vbi9jb250 cm9sZGF0YV91dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3Ry YWNlLmgiCkBAIC03Mjg1LDYgKzcyODYsMTUgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJCQkJYnJl YWs7CiAJCQkJfQogCisJCQkJLyoKKwkJCQkgKiBBZnRlciB1cGRhdGUgbGFzdFJlcGxheWVkRW5k UmVjUHRyIHNldCBMYXRjaGVzIGluIFNITUVNIGFycmF5CisJCQkJICovCisJCQkJaWYgKFhMb2dD dGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0ciA+PSBHZXRNaW5XYWl0KCkpCisJCQkJeworCisJCQkJ CVdhaXRTZXRMYXRjaChYTG9nQ3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIpOworCQkJCX0KKwog CQkJCS8qIEVsc2UsIHRyeSB0byBmZXRjaCB0aGUgbmV4dCBXQUwgcmVjb3JkICovCiAJCQkJcmVj b3JkID0gUmVhZFJlY29yZCh4bG9ncmVhZGVyLCBMT0csIGZhbHNlKTsKIAkJCX0gd2hpbGUgKHJl Y29yZCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxl IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggZDQ4MTVkM2NlNi4uOWIzMTA5 MjZjMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTU3LDYgKzU3LDcgQEAgT0JKUyA9IFwKIAl1 c2VyLm8gXAogCXZhY3V1bS5vIFwKIAl2YXJpYWJsZS5vIFwKLQl2aWV3Lm8KKwl2aWV3Lm8gXAor CXdhaXQubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy93YWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmNlZmZl YjYwMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwpAQCAt MCwwICsxLDI2NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogd2FpdC5jCisgKgkgIHdh aXQgc3RhdG1lbnQ6IHdhaXQKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAx OSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMjAxOSwgUmVnZW50cyBvZiBQb3N0Z3Jlc1BybworICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXYWl0IGZvciBMU04gYmVl biByZXBsYXllZCBvbiByZXBsaWNhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisj aW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2lu Y2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgorI2lu Y2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9y YWdlL2JhY2tlbmRpZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKKyNpbmNsdWRlICJz dG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9zcGluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKKyNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgorI2luY2x1ZGUgInV0 aWxzL3RpbWVzdGFtcC5oIgorCisvKiBBZGQvZGVsZXRlIHRvIHNobWVtIGFycmF5ICovCitzdGF0 aWMgdm9pZCBBZGRFdmVudChYTG9nUmVjUHRyIHRyZ19sc24pOworc3RhdGljIHZvaWQgRGVsZXRl RXZlbnQodm9pZCk7CisKKy8qIFNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyAqLwordHlwZWRlZiBz dHJ1Y3QKK3sKKwlYTG9nUmVjUHRyCXRyZ19sc247CisJLyogTGVmdCBoZXJlIHN0cnVjdCBCSURT dGF0ZSBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KK30gQklEU3RhdGU7CisKK3R5cGVkZWYg c3RydWN0Cit7CisJaW50CQkJYmFja2VuZF9tYXhpZDsKKwlYTG9nUmVjUHRyCW1pbl9sc247CisJ c2xvY2tfdAkJbXV0ZXg7CisJQklEU3RhdGUJZXZlbnRfYXJyW0ZMRVhJQkxFX0FSUkFZX01FTUJF Ul07Cit9IEdsb2JTdGF0ZTsKKworc3RhdGljIHZvbGF0aWxlIEdsb2JTdGF0ZSAqc3RhdGU7CisK Ky8qIEFkZCBldmVudCBmb3IgY3VycmVudCBiYWNrZW5kIHRvIHNobWVtIGFycmF5ICovCitzdGF0 aWMgdm9pZAorQWRkRXZlbnQoWExvZ1JlY1B0ciB0cmdfbHNuKQoreworCVNwaW5Mb2NrQWNxdWly ZSgmc3RhdGUtPm11dGV4KTsKKwlpZiAoc3RhdGUtPmJhY2tlbmRfbWF4aWQgPCBNeUJhY2tlbmRJ ZCkKKwkJc3RhdGUtPmJhY2tlbmRfbWF4aWQgPSBNeUJhY2tlbmRJZDsKKworCXN0YXRlLT5ldmVu dF9hcnJbTXlCYWNrZW5kSWRdLnRyZ19sc24gPSB0cmdfbHNuOworCisJaWYgKHRyZ19sc24gPCBz dGF0ZS0+bWluX2xzbikKKwkJc3RhdGUtPm1pbl9sc24gPSB0cmdfbHNuOworCVNwaW5Mb2NrUmVs ZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKworLyoKKyAqIERlbGV0ZSBldmVudCBmb3IgY3VycmVu dCBiYWNrZW5kIHRvIHNoYXJlZCBhcnJheS4KKyAqCisgKiBUT0RPOiBDb25zaWRlciBzdGF0ZSBj bGVhbnVwIG9uIGJhY2tlbmQgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK0RlbGV0ZUV2ZW50 KHZvaWQpCit7CisJaW50IGk7CisJWExvZ1JlY1B0ciB0cmdfbHNuID0gc3RhdGUtPmV2ZW50X2Fy cltNeUJhY2tlbmRJZF0udHJnX2xzbjsKKworCXN0YXRlLT5ldmVudF9hcnJbTXlCYWNrZW5kSWRd LnRyZ19sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUt Pm11dGV4KTsKKwkvKiBVcGRhdGUgc3RhdGUtPm1pbl9sc24gaWZmIGl0IGlzIG5lc3Nlc2FyeSBj aG9vc2luZyBuZXh0IG1pbl9sc24gKi8KKwlpZiAoc3RhdGUtPm1pbl9sc24gPT0gdHJnX2xzbikK Kwl7CisJCXN0YXRlLT5taW5fbHNuID0gUEdfVUlOVDY0X01BWDsKKwkJZm9yIChpID0gMjsgaSA8 PSBzdGF0ZS0+YmFja2VuZF9tYXhpZDsgaSsrKQorCQkJaWYgKHN0YXRlLT5ldmVudF9hcnJbaV0u dHJnX2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciAmJgorCQkJCXN0YXRlLT5ldmVudF9hcnJbaV0u dHJnX2xzbiA8IHN0YXRlLT5taW5fbHNuKQorCQkJCXN0YXRlLT5taW5fbHNuID0gc3RhdGUtPmV2 ZW50X2FycltpXS50cmdfbHNuOworCX0KKworCWlmIChzdGF0ZS0+YmFja2VuZF9tYXhpZCA9PSBN eUJhY2tlbmRJZCkKKwkJZm9yIChpID0gKE15QmFja2VuZElkKTsgaSA+PTI7IGktLSkKKwkJCWlm IChzdGF0ZS0+ZXZlbnRfYXJyW2ldLnRyZ19sc24gIT0gSW52YWxpZFhMb2dSZWNQdHIpCisJCQl7 CisJCQkJc3RhdGUtPmJhY2tlbmRfbWF4aWQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCisJU3Bp bkxvY2tSZWxlYXNlKCZzdGF0ZS0+bXV0ZXgpOworfQorCisvKiBHZXQgc2l6ZSBvZiBzaGFyZWQg bWVtb3J5IGZvciBHbG9iU3RhdGUgKi8KK1NpemUKK1dhaXRTaG1lbVNpemUodm9pZCkKK3sKKwly ZXR1cm4gb2Zmc2V0b2YoR2xvYlN0YXRlLCBldmVudF9hcnIpICsgc2l6ZW9mKEJJRFN0YXRlKSAq IChNYXhCYWNrZW5kcysxKTsKK30KKworLyogSW5pdCBhcnJheSBvZiBldmVudHMgaW4gc2hhcmVk IG1lbW9yeSAqLwordm9pZAorV2FpdFNobWVtSW5pdCh2b2lkKQoreworCWJvb2wJZm91bmQ7CisJ dWludDMyCWk7CisKKwlzdGF0ZSA9IChHbG9iU3RhdGUgKikgU2htZW1Jbml0U3RydWN0KCJwZ193 YWl0X2xzbiIsCisJCQkJCQkJCQkJICBXYWl0U2htZW1TaXplKCksCisJCQkJCQkJCQkJICAmZm91 bmQpOworCWlmICghZm91bmQpCisJeworCQlTcGluTG9ja0luaXQoJnN0YXRlLT5tdXRleCk7CisK KwkJZm9yIChpID0gMDsgaSA8IChNYXhCYWNrZW5kcysxKTsgaSsrKQorCQkJc3RhdGUtPmV2ZW50 X2FycltpXS50cmdfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisKKwkJc3RhdGUtPmJhY2tlbmRf bWF4aWQgPSAwOworCQlzdGF0ZS0+bWluX2xzbiA9IFBHX1VJTlQ2NF9NQVg7CisJfQorfQorCisv KiBTZXQgYWxsIExhdGNoZXMgaW4gc2hhcmVkIG1lbW9yeSBjYXVzZSBuZXcgTFNOIGJlaW5nIHJl cGxheWVkICovCit2b2lkCitXYWl0U2V0TGF0Y2goWExvZ1JlY1B0ciBjdXJfbHNuKQoreworCXVp bnQzMgkJaTsKKwlpbnQgCQliYWNrZW5kX21heGlkOworCVBHUFJPQwkgICAqYmFja2VuZDsKKwor CVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUtPm11dGV4KTsKKwliYWNrZW5kX21heGlkID0gc3RhdGUt PmJhY2tlbmRfbWF4aWQ7CisJU3BpbkxvY2tSZWxlYXNlKCZzdGF0ZS0+bXV0ZXgpOworCisJZm9y IChpID0gMjsgaSA8PSBiYWNrZW5kX21heGlkOyBpKyspCisJeworCQliYWNrZW5kID0gQmFja2Vu ZElkR2V0UHJvYyhpKTsKKwkJaWYgKHN0YXRlLT5ldmVudF9hcnJbaV0udHJnX2xzbiAhPSAwKQor CQl7CisJCQlpZiAoc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuIDw9IGN1cl9sc24pCisJCQkJ U2V0TGF0Y2goJmJhY2tlbmQtPnByb2NMYXRjaCk7CisJCX0KKwl9Cit9CisKKy8qIEdldCBtaW5p bWFsIExTTiB0aGF0IHdpbGwgYmUgbmV4dCAqLworWExvZ1JlY1B0cgorR2V0TWluV2FpdCh2b2lk KQoreworCXJldHVybiBzdGF0ZS0+bWluX2xzbjsKK30KKworLyoKKyAqIE9uIFdBSVQgb3duIE15 TGF0Y2ggYW5kIHdhaXQgdGlsbCBMU04gaXMgcmVwbGF5ZWQsIFBvc3RtYXN0ZXIgZGVhdGggaW50 ZXJydXB0aW9uCisgKiBvciB0aW1lb3V0LgorICovCit2b2lkCitXYWl0VXRpbGl0eShjb25zdCBj aGFyICpsc24sIGNvbnN0IGludCBkZWxheSwgRGVzdFJlY2VpdmVyICpkZXN0KQoreworCVhMb2dS ZWNQdHIJCXRyZ19sc24gPSBEYXR1bUdldExTTihEaXJlY3RGdW5jdGlvbkNhbGwxKHBnX2xzbl9p biwgQ1N0cmluZ0dldERhdHVtKGxzbikpKTsKKwlYTG9nUmVjUHRyCQljdXJfbHNuOworCWludAkJ CQlsYXRjaF9ldmVudHM7CisJdWludDY0CQkJdGRlbGF5ID0gZGVsYXk7CisJbG9uZwkJCXNlY3M7 CisJaW50CQkJCW1pY3Jvc2VjczsKKwlUaW1lc3RhbXBUegkJdGltZXIgPSBHZXRDdXJyZW50VGlt ZXN0YW1wKCk7CisJVHVwT3V0cHV0U3RhdGUgKnRzdGF0ZTsKKwlUdXBsZURlc2MJCXR1cGRlc2M7 CisJY2hhcgkJICAgKnZhbHVlID0gImYiOworCisJaWYgKGRlbGF5ID4gMCkKKwkJbGF0Y2hfZXZl bnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEg7CisJ ZWxzZQorCQlsYXRjaF9ldmVudHMgPSBXTF9MQVRDSF9TRVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRI OworCisJQWRkRXZlbnQodHJnX2xzbik7CisKKwlmb3IgKDs7KQorCXsKKwkJY3VyX2xzbiA9IEdl dFhMb2dSZXBsYXlSZWNQdHIoTlVMTCk7CisKKwkJLyogSWYgTFNOIGhhcyBiZWVuIFJlcGxheWVk ICovCisJCWlmICh0cmdfbHNuIDw9IGN1cl9sc24pCisJCQlicmVhazsKKworCQkvKiBJZiB0aGUg cG9zdG1hc3RlciBkaWVzLCBmaW5pc2ggaW1tZWRpYXRlbHkgKi8KKwkJaWYgKCFQb3N0bWFzdGVy SXNBbGl2ZSgpKQorCQkJYnJlYWs7CisKKwkJLyogSWYgZGVsYXkgdGltZSBpcyBvdmVyICovCisJ CWlmIChsYXRjaF9ldmVudHMgJiBXTF9USU1FT1VUKQorCQl7CisJCQlpZiAoVGltZXN0YW1wRGlm ZmVyZW5jZUV4Y2VlZHModGltZXIsR2V0Q3VycmVudFRpbWVzdGFtcCgpLGRlbGF5KSkKKwkJCQli cmVhazsKKwkJCVRpbWVzdGFtcERpZmZlcmVuY2UodGltZXIsR2V0Q3VycmVudFRpbWVzdGFtcCgp LCZzZWNzLCAmbWljcm9zZWNzKTsKKwkJCXRkZWxheSA9IGRlbGF5IC0gKHNlY3MqMTAwMCArIG1p Y3Jvc2Vjcy8xMDAwKTsKKwkJfQorCisJCS8qIExpdHRsZSBoYWNrIGJlaGF2aW91ciBsaWtlIFNu YXBzaG90UmVzZXRYbWluIHRvIHdvcmsgb3V0b2ZmIHNuYXBzaG90Ki8KKwkJTXlQZ1hhY3QtPnht aW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwkJV2FpdExhdGNoKE15TGF0Y2gsIGxhdGNoX2V2 ZW50cywgdGRlbGF5LCBXQUlUX0VWRU5UX0NMSUVOVF9SRUFEKTsKKwkJUmVzZXRMYXRjaChNeUxh dGNoKTsKKworCQkvKiBDSEVDS19GT1JfSU5URVJSVVBUUyBpZiB0aGV5IGNvbWUgdGhlbiBEZWxl dGUgY3VycmVudCBldmVudCBmcm9tIGFycmF5ICovCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKQor CQl7CisJCQlEZWxldGVFdmVudCgpOworCQkJUHJvY2Vzc0ludGVycnVwdHMoKTsKKwkJfQorCisJ fQorCisJRGVsZXRlRXZlbnQoKTsKKworCWlmICh0cmdfbHNuID4gY3VyX2xzbikKKwkJZWxvZyhO T1RJQ0UsIkxTTiBpcyBub3QgcmVhY2hlZC4gVHJ5IHRvIGluY3JlYXNlIHdhaXQgdGltZS4iKTsK KwllbHNlCisJCXZhbHVlID0gInQiOworCisJLyogTmVlZCBhIHR1cGxlIGRlc2NyaXB0b3IgcmVw cmVzZW50aW5nIGEgc2luZ2xlIFRFWFQgY29sdW1uICovCisJdHVwZGVzYyA9IENyZWF0ZVRlbXBs YXRlVHVwbGVEZXNjKDEpOworCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJl cikgMSwgIkxTTiByZWFjaGVkIiwgVEVYVE9JRCwgLTEsIDApOworCS8qIFByZXBhcmUgZm9yIHBy b2plY3Rpb24gb2YgdHVwbGVzICovCisJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNj KGRlc3QsIHR1cGRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCisJLyogU2VuZCBpdCAqLwor CWRvX3RleHRfb3V0cHV0X29uZWxpbmUodHN0YXRlLCB2YWx1ZSk7CisJZW5kX3R1cF9vdXRwdXQo dHN0YXRlKTsKK30KKwordm9pZAorV2FpdFRpbWVVdGlsaXR5KGNvbnN0IGludCBkZWxheSkKK3sK KwlpbnQJCQkJbGF0Y2hfZXZlbnRzOworCisJaWYgKGRlbGF5IDwgMCkKKwkJcmV0dXJuIDsKKwor CWxhdGNoX2V2ZW50cyA9IFdMX1RJTUVPVVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRIOworCisJTXlQ Z1hhY3QtPnhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlXYWl0TGF0Y2goTXlMYXRjaCwg bGF0Y2hfZXZlbnRzLCBkZWxheSwgV0FJVF9FVkVOVF9DTElFTlRfUkVBRCk7CisJUmVzZXRMYXRj aChNeUxhdGNoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMg Yi9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jCmluZGV4IDY2NzY0MTI4NDIuLjU2ZDJmMTVm OTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL2FuYWx5emUuYwpAQCAtNzgsNiArNzgsNyBAQCBzdGF0aWMgUXVlcnkgKnRy YW5zZm9ybUNyZWF0ZVRhYmxlQXNTdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQkg Q3JlYXRlVGFibGVBc1N0bXQgKnN0bXQpOwogc3RhdGljIFF1ZXJ5ICp0cmFuc2Zvcm1DYWxsU3Rt dChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCUNhbGxTdG10ICpzdG10KTsKK3N0YXRpYyBR dWVyeSAqdHJhbnNmb3JtV2FpdEZvclN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBXYWl0U3RtdCAq c3RtdCk7CiBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Mb2NraW5nQ2xhdXNlKFBhcnNlU3RhdGUgKnBz dGF0ZSwgUXVlcnkgKnFyeSwKIAkJCQkJCQkJICAgTG9ja2luZ0NsYXVzZSAqbGMsIGJvb2wgcHVz aGVkRG93bik7CiAjaWZkZWYgUkFXX0VYUFJFU1NJT05fQ09WRVJBR0VfVEVTVApAQCAtMzI2LDYg KzMyNyw5IEBAIHRyYW5zZm9ybVN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpwYXJzZVRy ZWUpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1DYWxsU3RtdChwc3RhdGUsCiAJCQkJCQkJCQkgICAo Q2FsbFN0bXQgKikgcGFyc2VUcmVlKTsKIAkJCWJyZWFrOworCQljYXNlIFRfV2FpdFN0bXQ6CisJ CQlyZXN1bHQgPSB0cmFuc2Zvcm1XYWl0Rm9yU3RtdChwc3RhdGUsIChXYWl0U3RtdCAqKSBwYXJz ZVRyZWUpOworCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIApAQCAtMjk4MSw2ICsyOTg1LDIwIEBA IGFwcGx5TG9ja2luZ0NsYXVzZShRdWVyeSAqcXJ5LCBJbmRleCBydGluZGV4LAogCXFyeS0+cm93 TWFya3MgPSBsYXBwZW5kKHFyeS0+cm93TWFya3MsIHJjKTsKIH0KIAorc3RhdGljIFF1ZXJ5ICoK K3RyYW5zZm9ybVdhaXRGb3JTdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwgV2FpdFN0bXQgKnN0bXQp Cit7CisJUXVlcnkgKnJlc3VsdDsKKworCXN0bXQtPnRpbWUgPSB0cmFuc2Zvcm1FeHByKHBzdGF0 ZSwgc3RtdC0+dGltZSwgRVhQUl9LSU5EX09USEVSKTsKKworCXJlc3VsdCA9IG1ha2VOb2RlKFF1 ZXJ5KTsKKwlyZXN1bHQtPmNvbW1hbmRUeXBlID0gQ01EX1VUSUxJVFk7CisJcmVzdWx0LT51dGls aXR5U3RtdCA9IChOb2RlICopIHN0bXQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICog Q292ZXJhZ2UgdGVzdGluZyBmb3IgcmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXIoKS4KICAqCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueQppbmRleCA5NmU3ZmRiY2ZlLi5iODAxOTVhODVmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTI3 Niw3ICsyNzYsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAq cmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQlTZWNMYWJlbFN0bXQgU2Vs ZWN0U3RtdCBUcmFuc2FjdGlvblN0bXQgVHJ1bmNhdGVTdG10CiAJCVVubGlzdGVuU3RtdCBVcGRh dGVTdG10IFZhY3V1bVN0bXQKIAkJVmFyaWFibGVSZXNldFN0bXQgVmFyaWFibGVTZXRTdG10IFZh cmlhYmxlU2hvd1N0bXQKLQkJVmlld1N0bXQgQ2hlY2tQb2ludFN0bXQgQ3JlYXRlQ29udmVyc2lv blN0bXQKKwkJVmlld1N0bXQgV2FpdFN0bXQgQ2hlY2tQb2ludFN0bXQgQ3JlYXRlQ29udmVyc2lv blN0bXQKIAkJRGVhbGxvY2F0ZVN0bXQgUHJlcGFyZVN0bXQgRXhlY3V0ZVN0bXQKIAkJRHJvcE93 bmVkU3RtdCBSZWFzc2lnbk93bmVkU3RtdAogCQlBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgQWx0 ZXJUU0RpY3Rpb25hcnlTdG10CkBAIC00ODcsNyArNDg3LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VS ZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1 ZXJ5KTsKICV0eXBlIDxsaXN0Pglyb3cgZXhwbGljaXRfcm93IGltcGxpY2l0X3JvdyB0eXBlX2xp c3QgYXJyYXlfZXhwcl9saXN0CiAldHlwZSA8bm9kZT4JY2FzZV9leHByIGNhc2VfYXJnIHdoZW5f Y2xhdXNlIGNhc2VfZGVmYXVsdAogJXR5cGUgPGxpc3Q+CXdoZW5fY2xhdXNlX2xpc3QKLSV0eXBl IDxpdmFsPglzdWJfdHlwZSBvcHRfbWF0ZXJpYWxpemVkCisldHlwZSA8aXZhbD4Jc3ViX3R5cGUg d2FpdF9zdHJhdGVneSBvcHRfbWF0ZXJpYWxpemVkCiAldHlwZSA8dmFsdWU+CU51bWVyaWNPbmx5 CiAldHlwZSA8bGlzdD4JTnVtZXJpY09ubHlfbGlzdAogJXR5cGUgPGFsaWFzPglhbGlhc19jbGF1 c2Ugb3B0X2FsaWFzX2NsYXVzZQpAQCAtNjYwLDcgKzY2MCw3IEBAIHN0YXRpYyBOb2RlICptYWtl UmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpx dWVyeSk7CiAKIAlMQUJFTCBMQU5HVUFHRSBMQVJHRV9QIExBU1RfUCBMQVRFUkFMX1AKIAlMRUFE SU5HIExFQUtQUk9PRiBMRUFTVCBMRUZUIExFVkVMIExJS0UgTElNSVQgTElTVEVOIExPQUQgTE9D QUwKLQlMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tFRCBMT0dH RUQKKwlMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tFRCBMT0dH RUQgTFNOCiAKIAlNQVBQSU5HIE1BVENIIE1BVEVSSUFMSVpFRCBNQVhWQUxVRSBNRVRIT0QgTUlO VVRFX1AgTUlOVkFMVUUgTU9ERSBNT05USF9QIE1PVkUKIApAQCAtNjkwLDcgKzY5MCw3IEBAIHN0 YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICph bGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJU1VCU0NSSVBUSU9OIFNVQlNUUklORyBTVVBQT1JUIFNZ TU1FVFJJQyBTWVNJRCBTWVNURU1fUAogCiAJVEFCTEUgVEFCTEVTIFRBQkxFU0FNUExFIFRBQkxF U1BBQ0UgVEVNUCBURU1QTEFURSBURU1QT1JBUlkgVEVYVF9QIFRIRU4KLQlUSUVTIFRJTUUgVElN RVNUQU1QIFRPIFRSQUlMSU5HIFRSQU5TQUNUSU9OIFRSQU5TRk9STQorCVRJRVMgVElNRSBUSU1F T1VUIFRJTUVTVEFNUCBUTyBUUkFJTElORyBUUkFOU0FDVElPTiBUUkFOU0ZPUk0KIAlUUkVBVCBU UklHR0VSIFRSSU0gVFJVRV9QCiAJVFJVTkNBVEUgVFJVU1RFRCBUWVBFX1AgVFlQRVNfUAogCkBA IC03MDAsNyArNzAwLDggQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNo YXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlWQUNVVU0gVkFMSUQg VkFMSURBVEUgVkFMSURBVE9SIFZBTFVFX1AgVkFMVUVTIFZBUkNIQVIgVkFSSUFESUMgVkFSWUlO RwogCVZFUkJPU0UgVkVSU0lPTl9QIFZJRVcgVklFV1MgVk9MQVRJTEUKIAotCVdIRU4gV0hFUkUg V0hJVEVTUEFDRV9QIFdJTkRPVyBXSVRIIFdJVEhJTiBXSVRIT1VUIFdPUksgV1JBUFBFUiBXUklU RQorCVdBSVQgV0hFTiBXSEVSRSBXSElURVNQQUNFX1AgV0lORE9XCisJV0lUSCBXSVRISU4gV0lU SE9VVCBXT1JLIFdSQVBQRVIgV1JJVEUKIAogCVhNTF9QIFhNTEFUVFJJQlVURVMgWE1MQ09OQ0FU IFhNTEVMRU1FTlQgWE1MRVhJU1RTIFhNTEZPUkVTVCBYTUxOQU1FU1BBQ0VTCiAJWE1MUEFSU0Ug WE1MUEkgWE1MUk9PVCBYTUxTRVJJQUxJWkUgWE1MVEFCTEUKQEAgLTk1Myw2ICs5NTQsNyBAQCBz dG10IDoKIAkJCXwgVmFyaWFibGVTZXRTdG10CiAJCQl8IFZhcmlhYmxlU2hvd1N0bXQKIAkJCXwg Vmlld1N0bXQKKwkJCXwgV2FpdFN0bXQKIAkJCXwgLypFTVBUWSovCiAJCQkJeyAkJCA9IE5VTEw7 IH0KIAkJOwpAQCAtMTQxMjgsNiArMTQxMzAsODggQEAgeG1sX3Bhc3NpbmdfbWVjaDoKIAkJCXwg QlkgVkFMVUVfUAogCQk7CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQlRVUVSWToK KyAqCQkJCVdBSVQgRk9SIDxldmVudD4gWywgPGV2ZW50PiAuLi5dIFtvcHRpb25dCisgKgkJCQll dmVudDoKKyAqCQkJCQlMU04gdmFsdWUKKyAqCQkJCQlUSU1FT1VUIHZhbHVlCisgKgkJCQkJVElN RVNUQU1QIHRpbWVzdGFtcAorICoJCQkJb3B0aW9uOgorICoJCQkJCVRJTUVPVVQgZGVsYXkKKyAq CQkJCQlVTlRJTCBUSU1FU1RBTVAgdGltZXN0YW1wCisgKgorICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworCitXYWl0U3RtdDoKKwkJCVdBSVQgRk9SIHdhaXRfc3RyYXRlZ3kgTFNOIFNjb25zdAorCQkJ CXsKKwkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCW4tPmtpbmQg PSBXQUlUX0ZPUl9MU047CisJCQkJCW4tPmxzbiA9ICQ1OworCQkJCQluLT5kZWxheSA9IDA7CisJ CQkJCW4tPnRpbWUgPSAwOworCQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQl9CisJCQl8IFdBSVQg Rk9SICB3YWl0X3N0cmF0ZWd5IExTTiBTY29uc3QgVElNRU9VVCBJY29uc3QKKwkJCQl7CisJCQkJ CVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2FpdFN0bXQpOworCQkJCQluLT5raW5kID0gV0FJVF9G T1JfTUlYOworCQkJCQluLT5sc24gPSAkNTsKKwkJCQkJbi0+ZGVsYXkgPSAkNzsKKwkJCQkJbi0+ dGltZSA9IDA7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKwkJCXwgV0FJVCBGT1IgIHdh aXRfc3RyYXRlZ3kgTFNOIFNjb25zdCBVTlRJTCBDb25zdERhdGV0aW1lIFNjb25zdAorCQkJCXsK KwkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCW4tPmtpbmQgPSBX QUlUX0ZPUl9NSVg7CisJCQkJCW4tPmxzbiA9ICQ1OworCQkJCQluLT5kZWxheSA9IDA7CisJCQkJ CW4tPnRpbWUgPSBtYWtlU3RyaW5nQ29uc3RDYXN0KCQ4LCBAOCwgJDcpOworCQkJCQkkJCA9IChO b2RlICopbjsKKwkJCQl9CisJCQl8IFdBSVQgRk9SIHdhaXRfc3RyYXRlZ3kgQ29uc3REYXRldGlt ZSBTY29uc3QKKwkJCQl7CisJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2FpdFN0bXQpOwor CQkJCQluLT5raW5kID0gV0FJVF9GT1JfVElNRTsKKwkJCQkJbi0+bHNuID0gTlVMTDsKKwkJCQkJ bi0+ZGVsYXkgPSAwOworCQkJCQluLT50aW1lID0gbWFrZVN0cmluZ0NvbnN0Q2FzdCgkNSwgQDUs ICQ0KTsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJfQorCQk7CisKK3dhaXRfc3RyYXRlZ3k6 CisJCQlBTEwJCQkJCXsgJCQgPSBXQUlUX0ZPUl9BTEw7IH0KKwkJCXwgQU5ZCQkJCXsgJCQgPSBX QUlUX0ZPUl9BTlk7IH0KKwkJCXwgU09NRQkJCQl7ICQkID0gV0FJVF9GT1JfQU5ZOyB9CisJCQl8 IC8qIEVNUFRZICovCQl7ICQkID0gV0FJVF9GT1JfQU5ZOyB9CisJCTsKKy8qCitXYWl0RXZlbnQ6 CisJCQlMU04gU2NvbnN0IFdhaXRPcHRpb24KKwkJCQl7CisJCQkJCVR5cGVOYW1lICp0ID0gbWFr ZVR5cGVOYW1lRnJvbU5hbWVMaXN0KCJwZ19sc24iKTsKKwkJCQkJdC0+bG9jYXRpb24gPSBAMTsK KwkJCQkJJCQgPSBtYWtlU3RyaW5nQ29uc3RDYXN0KCQyLCBAMiwgdCk7CisJCQkJfQorCQkJfCBX YWl0T3B0aW9uCisJCQkJeworCQkJCQkkJCA9ICQxOworCQkJCX0KKwkJOworCitXYWl0T3B0aW9u OgorCQkJQ29uc3REYXRldGltZSBTY29uc3QKKwkJCQl7CisJCQkJJCQgPSBtYWtlU3RyaW5nQ29u c3RDYXN0KCQyLCBAMiwgJDEpOworCQkJCX0KKwkJCXwKKwkJCQl7ICQkIC0gTklMOyB9CisJCTsK KyovCiAKIC8qCiAgKiBBZ2dyZWdhdGUgZGVjb3JhdGlvbiBjbGF1c2VzCkBAIC0xNTI3Miw2ICsx NTM1Niw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgTE9DS19QCiAJCQl8IExPQ0tFRAog CQkJfCBMT0dHRUQKKwkJCXwgTFNOCiAJCQl8IE1BUFBJTkcKIAkJCXwgTUFUQ0gKIAkJCXwgTUFU RVJJQUxJWkVECkBAIC0xNTM5NCw2ICsxNTQ3OSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJ CXwgVEVNUE9SQVJZCiAJCQl8IFRFWFRfUAogCQkJfCBUSUVTCisJCQl8IFRJTUVPVVQKIAkJCXwg VFJBTlNBQ1RJT04KIAkJCXwgVFJBTlNGT1JNCiAJCQl8IFRSSUdHRVIKQEAgLTE1NDIwLDYgKzE1 NTA2LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBWSUVXCiAJCQl8IFZJRVdTCiAJCQl8 IFZPTEFUSUxFCisJCQl8IFdBSVQKIAkJCXwgV0hJVEVTUEFDRV9QCiAJCQl8IFdJVEhJTgogCQkJ fCBXSVRIT1VUCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggNDI3YjBkNTljZC4uOGMzZDE5NmE5 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImFj Y2Vzcy9zdWJ0cmFucy5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIv YXV0b3ZhY3V1bS5oIgpAQCAtMTQ3LDYgKzE0OCw3IEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNl bWFwaG9yZXModm9pZCkKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJUcmVlU2htZW1TaXplKCkp OwogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU3luY1NjYW5TaG1lbVNpemUoKSk7CiAJCXNpemUg PSBhZGRfc2l6ZShzaXplLCBBc3luY1NobWVtU2l6ZSgpKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNp emUsIFdhaXRTaG1lbVNpemUoKSk7CiAjaWZkZWYgRVhFQ19CQUNLRU5ECiAJCXNpemUgPSBhZGRf c2l6ZShzaXplLCBTaG1lbUJhY2tlbmRBcnJheVNpemUoKSk7CiAjZW5kaWYKQEAgLTI2NCw2ICsy NjYsMTEgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCVN5bmNTY2Fu U2htZW1Jbml0KCk7CiAJQXN5bmNTaG1lbUluaXQoKTsKIAorCS8qCisJICogSW5pdCBhcnJheSBv ZiBMYXRjaGVzIGluIFNITUVNIGZvciBXYWl0CisJICovCisJV2FpdFNobWVtSW5pdCgpOworCiAj aWZkZWYgRVhFQ19CQUNLRU5ECiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAxYjQ2MGEyNjEyLi5i ODA2MTg2M2Q3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9z cmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtNSw3ICs1LDcgQEAKICAqCSAgY29tbWFuZHMu ICBBdCBvbmUgdGltZSBhY3RlZCBhcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgTGlzcCBhbmQg QwogICoJICBzeXN0ZW1zLgogICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIw LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorZCAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDIwLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAog ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKICAqCiAgKgpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImNvbW1h bmRzL3VzZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRlICJjb21t YW5kcy92aWV3LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV91dGlsY21kLmgiCiAjaW5jbHVkZSAicG9z dG1hc3Rlci9iZ3dyaXRlci5oIgpAQCAtNzAsNiArNzEsNyBAQAogI2luY2x1ZGUgInV0aWxzL2xz eXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2Nh Y2hlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAKIC8qIEhvb2sgZm9yIHBsdWdpbnMg dG8gZ2V0IGNvbnRyb2wgaW4gUHJvY2Vzc1V0aWxpdHkoKSAqLwogUHJvY2Vzc1V0aWxpdHlfaG9v a190eXBlIFByb2Nlc3NVdGlsaXR5X2hvb2sgPSBOVUxMOwpAQCAtMjY3LDYgKzI2OSw3IEBAIENs YXNzaWZ5VXRpbGl0eUNvbW1hbmRBc1JlYWRPbmx5KE5vZGUgKnBhcnNldHJlZSkKIAkJY2FzZSBU X0xvYWRTdG10OgogCQljYXNlIFRfUHJlcGFyZVN0bXQ6CiAJCWNhc2UgVF9Vbmxpc3RlblN0bXQ6 CisJCWNhc2UgVF9XYWl0U3RtdDoKIAkJY2FzZSBUX1ZhcmlhYmxlU2V0U3RtdDoKIAkJCXsKIAkJ CQkvKgpAQCAtMTA2MSw2ICsxMDY0LDYxIEBAIHN0YW5kYXJkX1Byb2Nlc3NVdGlsaXR5KFBsYW5u ZWRTdG10ICpwc3RtdCwKIAkJCQlicmVhazsKIAkJCX0KIAorCQljYXNlIFRfV2FpdFN0bXQ6CisJ CQl7CisJCQkJV2FpdFN0bXQgKnN0bXQgPSAoV2FpdFN0bXQgKikgcGFyc2V0cmVlOworCQkJCWZs b2F0OCB0aW1lX3ZhbDsKKworCQkJCWlmIChzdG10LT50aW1lKQorCQkJCXsKKwkJCQkJQ29uc3Qg KnRpbWUgPSAoQ29uc3QgKikgc3RtdC0+dGltZTsKKwkJCQkJaW50IHJldDsKKworCQkJCQlPaWQJ CXR5cGVzW10gPSB7IHRpbWUtPmNvbnN0dHlwZSB9OworCQkJCQlEYXR1bQl2YWx1ZXNbXSA9IHsg dGltZS0+Y29uc3R2YWx1ZSB9OworCQkJCQljaGFyCW51bGxzW10gPSB7ICIgIiB9OworCisJCQkJ CURhdHVtIHJlc3VsdDsKKwkJCQkJYm9vbCBpc251bGw7CisKKwkJCQkJU1BJX2Nvbm5lY3QoKTsK KworCQkJCQlpZiAodGltZS0+Y29uc3R0eXBlID09IDEwODMpCisJCQkJCQlyZXQgPSBTUElfZXhl Y3V0ZV93aXRoX2FyZ3MoInNlbGVjdCBleHRyYWN0IChlcG9jaCBmcm9tICgkMSAtIG5vdygpOjp0 aW1lKSkiLAorCQkJCQkJCQkJCQkJCTEsIHR5cGVzLCB2YWx1ZXMsIG51bGxzLCB0cnVlLCAwKTsK KwkJCQkJZWxzZSBpZiAodGltZS0+Y29uc3R0eXBlID09IDEyNjYpCisJCQkJCQlyZXQgPSBTUElf ZXhlY3V0ZV93aXRoX2FyZ3MoInNlbGVjdCBleHRyYWN0IChlcG9jaCBmcm9tICh0aW1lem9uZSgn VVRDJywkMSk6OnRpbWUgLSB0aW1lem9uZSgnVVRDJywgbm93KCk6OnRpbWV0eik6OnRpbWUpKSIs CisJCQkJCQkJCQkJCQkJMSwgdHlwZXMsIHZhbHVlcywgbnVsbHMsIHRydWUsIDApOworCQkJCQll bHNlCisJCQkJCQlyZXQgPSBTUElfZXhlY3V0ZV93aXRoX2FyZ3MoInNlbGVjdCBleHRyYWN0IChl cG9jaCBmcm9tICgkMSAtIG5vdygpKSkiLAorCQkJCQkJCQkJCQkJCTEsIHR5cGVzLCB2YWx1ZXMs IG51bGxzLCB0cnVlLCAwKTsKKworCQkJCQlBc3NlcnQocmV0ID49IDApOworCQkJCQlyZXN1bHQg PSBTUElfZ2V0YmludmFsKFNQSV90dXB0YWJsZS0+dmFsc1swXSwKKwkJCQkJCQkJCQkgICBTUElf dHVwdGFibGUtPnR1cGRlc2MsCisJCQkJCQkJCQkJICAgMSwgJmlzbnVsbCk7CisKKwkJCQkJQXNz ZXJ0KCFpc251bGwpOworCQkJCQl0aW1lX3ZhbCA9IERhdHVtR2V0RmxvYXQ4KHJlc3VsdCk7CisK KwkJCQkJZWxvZyhJTkZPLCAidGltZTogJWYiLCB0aW1lX3ZhbCk7CisKKwkJCQkJU1BJX2Zpbmlz aCgpOworCQkJCX0KKworCQkJCWlmICh0aW1lX3ZhbCA8PSAwKQorCQkJCQl0aW1lX3ZhbCA9IDA7 CisKKwkJCQlpZiAoIXN0bXQtPmRlbGF5KQorCQkJCQlzdG10LT5kZWxheSA9IChpbnQpKHRpbWVf dmFsICogMTAwMCk7CisKKwkJCQlpZiAoc3RtdC0+a2luZCA9PSBXQUlUX0ZPUl9USU1FKQorCQkJ CQlXYWl0VGltZVV0aWxpdHkodGltZV92YWwgKiAxMDAwKTsKKwkJCQllbHNlCisJCQkJCVdhaXRV dGlsaXR5KHN0bXQtPmxzbiwgc3RtdC0+ZGVsYXksIGRlc3QpOworCQkJfQorCQkJYnJlYWs7CisK IAkJZGVmYXVsdDoKIAkJCS8qIEFsbCBvdGhlciBzdGF0ZW1lbnQgdHlwZXMgaGF2ZSBldmVudCB0 cmlnZ2VyIHN1cHBvcnQgKi8KIAkJCVByb2Nlc3NVdGlsaXR5U2xvdyhwc3RhdGUsIHBzdG10LCBx dWVyeVN0cmluZywKQEAgLTI3MTMsNiArMjc3MSwxMCBAQCBDcmVhdGVDb21tYW5kVGFnKE5vZGUg KnBhcnNldHJlZSkKIAkJCXRhZyA9IENNRFRBR19OT1RJRlk7CiAJCQlicmVhazsKIAorCQljYXNl IFRfV2FpdFN0bXQ6CisJCQl0YWcgPSBDTURUQUdfV0FJVDsKKwkJCWJyZWFrOworCiAJCWNhc2Ug VF9MaXN0ZW5TdG10OgogCQkJdGFnID0gQ01EVEFHX0xJU1RFTjsKIAkJCWJyZWFrOwpAQCAtMzM0 NCw2ICszNDA2LDEwIEBAIEdldENvbW1hbmRMb2dMZXZlbChOb2RlICpwYXJzZXRyZWUpCiAJCQls ZXYgPSBMT0dTVE1UX0FMTDsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCWxl diA9IExPR1NUTVRfQUxMOworCQkJYnJlYWs7CisKIAkJY2FzZSBUX0xpc3RlblN0bXQ6CiAJCQls ZXYgPSBMT0dTVE1UX0FMTDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvd2FpdC5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjgxNWFhYTJmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKQEAgLTAsMCArMSwyNSBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogd2FpdC5oCisgKgkgIHdhaXQgbm90aWZpY2F0aW9uOiB3YWl0CisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTYsIFJlZ2VudHMg b2YgUG9zdGdyZXNQUk8KKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBXQUlUX0gKKyNkZWZpbmUgV0FJVF9ICisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2Rlc3QuaCIKKworZXh0ZXJuIHZv aWQgV2FpdFV0aWxpdHkoY29uc3QgY2hhciAqbHNuLCBjb25zdCBpbnQgZGVsYXksIERlc3RSZWNl aXZlciAqZGVzdCk7CitleHRlcm4gdm9pZCBXYWl0VGltZVV0aWxpdHkoY29uc3QgaW50IGRlbGF5 KTsKK2V4dGVybiBTaXplIFdhaXRTaG1lbVNpemUodm9pZCk7CitleHRlcm4gdm9pZCBXYWl0U2ht ZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgV2FpdFNldExhdGNoKFhMb2dSZWNQdHIgY3VyX2xz bik7CitleHRlcm4gWExvZ1JlY1B0ciBHZXRNaW5XYWl0KHZvaWQpOworCisjZW5kaWYgICAvKiBX QUlUX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IGJhY2VkN2VlYzAuLmEzY2ZhOTJhYjIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9k ZXMuaApAQCAtNDg3LDYgKzQ4Nyw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9Ecm9wUmVw bGljYXRpb25TbG90Q21kLAogCVRfU3RhcnRSZXBsaWNhdGlvbkNtZCwKIAlUX1RpbWVMaW5lSGlz dG9yeUNtZCwKKwlUX1dhaXRTdG10LAogCVRfU1FMQ21kLAogCiAJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9k ZXMuaAppbmRleCBkYTA3MDZhZGQ1Li40NjNhZmRjODE3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5o CkBAIC0zNTU0LDQgKzM1NTQsMzIgQEAgdHlwZWRlZiBzdHJ1Y3QgRHJvcFN1YnNjcmlwdGlvblN0 bXQKIAlEcm9wQmVoYXZpb3IgYmVoYXZpb3I7CQkvKiBSRVNUUklDVCBvciBDQVNDQURFIGJlaGF2 aW9yICovCiB9IERyb3BTdWJzY3JpcHRpb25TdG10OwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgkJV2FpdCBTdGF0ZW1lbnQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor Cit0eXBlZGVmIGVudW0gV2FpdEZvclR5cGUKK3sKKwlXQUlUX0ZPUl9MU04gPSAwLAorCVdBSVRf Rk9SX1RJTUUsCisJV0FJVF9GT1JfTUlYCit9IFdhaXRGb3JUeXBlOworCit0eXBlZGVmIGVudW0g V2FpdEZvclN0cmF0ZWd5Cit7CisJV0FJVF9GT1JfQU5ZID0gMCwKKwlXQUlUX0ZPUl9BTEwKK30g V2FpdEZvclN0cmF0ZWd5OworCit0eXBlZGVmIHN0cnVjdCBXYWl0U3RtdAoreworCU5vZGVUYWcJ CQl0eXBlOworCVdhaXRGb3JUeXBlCQlraW5kOworCVdhaXRGb3JTdHJhdGVneQlzdHJhdGVneTsK KwljaGFyCQkgICAqbHNuOwkJLyogVGFyYWdldCBMU04gdG8gd2FpdCBmb3IgKi8KKwlpbnQJCQkJ ZGVsYXk7CQkvKiBEZWxheSB0byB3YWl0IGZvciBMU04gKi8KKwlOb2RlCQkgICAqdGltZTsJCS8q IFdhaXQgZm9yIHRpbWVzdGFtcCAqLworfSBXYWl0U3RtdDsKKwogI2VuZGlmCQkJCQkJCS8qIFBB UlNFTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIv c3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4IGIxMTg0YzJkMTUuLmRkMjJlMzU4Yjkg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVk ZS9wYXJzZXIva3dsaXN0LmgKQEAgLTI0Myw2ICsyNDMsNyBAQCBQR19LRVlXT1JEKCJsb2NhdGlv biIsIExPQ0FUSU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJsb2NrIiwgTE9D S19QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJsb2NrZWQiLCBMT0NLRUQsIFVO UkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImxvZ2dlZCIsIExPR0dFRCwgVU5SRVNFUlZF RF9LRVlXT1JEKQorUEdfS0VZV09SRCgibHNuIiwgTFNOLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQ R19LRVlXT1JEKCJtYXBwaW5nIiwgTUFQUElORywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZ V09SRCgibWF0Y2giLCBNQVRDSCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0 ZXJpYWxpemVkIiwgTUFURVJJQUxJWkVELCBVTlJFU0VSVkVEX0tFWVdPUkQpCkBAIC00MDQsNiAr NDA1LDcgQEAgUEdfS0VZV09SRCgidGV4dCIsIFRFWFRfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQog UEdfS0VZV09SRCgidGhlbiIsIFRIRU4sIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0 aWVzIiwgVElFUywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGltZSIsIFRJTUUs IENPTF9OQU1FX0tFWVdPUkQpCitQR19LRVlXT1JEKCJ0aW1lb3V0IiwgVElNRU9VVCwgVU5SRVNF UlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGltZXN0YW1wIiwgVElNRVNUQU1QLCBDT0xfTkFN RV9LRVlXT1JEKQogUEdfS0VZV09SRCgidG8iLCBUTywgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tF WVdPUkQoInRyYWlsaW5nIiwgVFJBSUxJTkcsIFJFU0VSVkVEX0tFWVdPUkQpCkBAIC00NDQsNiAr NDQ2LDcgQEAgUEdfS0VZV09SRCgidmVyc2lvbiIsIFZFUlNJT05fUCwgVU5SRVNFUlZFRF9LRVlX T1JEKQogUEdfS0VZV09SRCgidmlldyIsIFZJRVcsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tF WVdPUkQoInZpZXdzIiwgVklFV1MsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZv bGF0aWxlIiwgVk9MQVRJTEUsIFVOUkVTRVJWRURfS0VZV09SRCkKK1BHX0tFWVdPUkQoIndhaXQi LCBXQUlULCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGVuIiwgV0hFTiwgUkVT RVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoIndoZXJlIiwgV0hFUkUsIFJFU0VSVkVEX0tFWVdP UkQpCiBQR19LRVlXT1JEKCJ3aGl0ZXNwYWNlIiwgV0hJVEVTUEFDRV9QLCBVTlJFU0VSVkVEX0tF WVdPUkQpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaCBiL3NyYy9p bmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCmluZGV4IGQyODE0NWE1MGQuLjI4ZjVhMmZmNjcgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRl L3Rjb3AvY21kdGFnbGlzdC5oCkBAIC0yMTYsMyArMjE2LDQgQEAgUEdfQ01EVEFHKENNRFRBR19U UlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIFBH X0NNRFRBRyhDTURUQUdfVU5MSVNURU4sICJVTkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CiBQR19DTURUQUcoQ01EVEFHX1VQREFURSwgIlVQREFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK IFBHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAiVkFDVVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfV0FJVCwgIldBSVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMThfd2FpdGZvci5wbCBiL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDE4X3dhaXRmb3IucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uNjgxNzQzMWU5YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3Qv MDE4X3dhaXRmb3IucGwKQEAgLTAsMCArMSw2NCBAQAorIyBDaGVja3MgV0FJVCBGT1IKK3VzZSBz dHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3Jlc05vZGU7Cit1c2UgVGVzdExpYjsK K3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE7CisKKyMgSW5pdGlhbGl6ZSBtYXN0ZXIgbm9kZQor bXkgJG5vZGVfbWFzdGVyID0gZ2V0X25ld19ub2RlKCdtYXN0ZXInKTsKKyRub2RlX21hc3Rlci0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfbWFzdGVyLT5zdGFydDsKKworIyBB bmQgc29tZSBjb250ZW50Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgVEFCTEUgdGFiX2ludCBBUyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSBBUyBh Iik7CisKKyMgVGFrZSBiYWNrdXAKK215ICRiYWNrdXBfbmFtZSA9ICdteV9iYWNrdXAnOworJG5v ZGVfbWFzdGVyLT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBDcmVhdGUgc3RyZWFtaW5nIHN0 YW5kYnkgZnJvbSBiYWNrdXAKK215ICRub2RlX3N0YW5kYnkgPSBnZXRfbmV3X25vZGUoJ3N0YW5k YnknKTsKK215ICRkZWxheSAgICAgICAgPSA0OworJG5vZGVfc3RhbmRieS0+aW5pdF9mcm9tX2Jh Y2t1cCgkbm9kZV9tYXN0ZXIsICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+IDEpOwor JG5vZGVfc3RhbmRieS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAorcmVj b3ZlcnlfbWluX2FwcGx5X2RlbGF5ID0gJyR7ZGVsYXl9cycKKykpOworJG5vZGVfc3RhbmRieS0+ c3RhcnQ7CisKKyMgTWFrZSBuZXcgY29udGVudCBvbiBtYXN0ZXIgYW5kIGNoZWNrIGl0cyBwcmVz ZW5jZSBpbiBzdGFuZGJ5IGRlcGVuZGluZworIyBvbiB0aGUgZGVsYXkgYXBwbGllZCBhYm92ZS4g QmVmb3JlIGRvaW5nIHRoZSBpbnNlcnRpb24sIGdldCB0aGUKKyMgY3VycmVudCB0aW1lc3RhbXAg dGhhdCB3aWxsIGJlIHVzZWQgYXMgYSBjb21wYXJpc29uIGJhc2UuIEV2ZW4gb24gc2xvdworIyBt YWNoaW5lcywgdGhpcyBhbGxvd3MgdG8gaGF2ZSBhIHByZWRpY3RhYmxlIGJlaGF2aW9yIHdoZW4g Y29tcGFyaW5nIHRoZQorIyBkZWxheSBiZXR3ZWVuIGRhdGEgaW5zZXJ0aW9uIG1vbWVudCBvbiBt YXN0ZXIgYW5kIHJlcGxheSB0aW1lIG9uIHN0YW5kYnkuCitteSAkbWFzdGVyX2luc2VydF90aW1l ID0gdGltZSgpOworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJU IElOVE8gdGFiX2ludCBWQUxVRVMgKGdlbmVyYXRlX3NlcmllcygxMSwgMjApKSIpOworCisjIE5v dyB3YWl0IGZvciByZXBsYXkgdG8gY29tcGxldGUgb24gc3RhbmRieS4gV2UncmUgZG9uZSB3YWl0 aW5nIHdoZW4gdGhlCisjIHN0YW5kYnkgaGFzIHJlcGxheWVkIHVwIHRvIHRoZSBwcmV2aW91c2x5 IHNhdmVkIG1hc3RlciBMU04uCitteSAkdW50aWxfbHNuID0KKyAgJG5vZGVfbWFzdGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworCiskbm9k ZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfaW50IFZB TFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDIxLCAzMCkpIik7CisKKyMgQ2hlY2sgdGhhdCB3YWl0bHNu IGlzIGFibGUgdG8gc2V0dXAgaW5maW5pdGUgd2FpdGluZyBsb29wIGFuZCBleGl0CisjIGl0IHdp dGhvdXQgdGltZW91dHMuCiskbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAg ICAiV0FJVCBGT1IgTFNOICckdW50aWxfbHNuJyIsICd0JykKKyAgb3IgZGllICJzdGFuZGJ5IG5l dmVyIGNhdWdodCB1cCI7CisKKyMgQ2hlY2sgdGhhdCB3YWl0bHNuIGNhbiByZXR1cm4gcmVzdWx0 IGltbWVkaWF0ZWx5IHdpdGggTk9XQUlULgorJG5vZGVfc3RhbmRieS0+cG9sbF9xdWVyeV91bnRp bCgncG9zdGdyZXMnLAorICAgICJXQUlUIEZPUiBMU04gJyR1bnRpbF9sc24nIFRJTUVPVVQgMSIs ICd0JykKKyAgb3IgZGllICJzdGFuZGJ5IG5ldmVyIGNhdWdodCB1cCI7CisKKyMgVGhpcyB0ZXN0 IGlzIHN1Y2Nlc3NmdWwgaWYgYW5kIG9ubHkgaWYgdGhlIExTTiBoYXMgYmVlbiBhcHBsaWVkIHdp dGggYXQgbGVhc3QKKyMgdGhlIGNvbmZpZ3VyZWQgYXBwbHkgZGVsYXkuCitteSAkdGltZV93YWl0 ZWQgPSB0aW1lKCkgLSAkbWFzdGVyX2luc2VydF90aW1lOworb2soJHRpbWVfd2FpdGVkID49ICRk ZWxheSwic3RhbmRieSBhcHBsaWVzIFdBTCBvbmx5IGFmdGVyIHJlcGxpY2F0aW9uIGRlbGF5Iik7 Cg== --=_25ea92fe5556ab68557625cf7b75fe64--