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 1kiZjk-0006re-K2 for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Nov 2020 09:08:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kiZjj-0006GJ-JV for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Nov 2020 09:08:15 +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 1kiZjj-0006G6-1w for pgsql-hackers@lists.postgresql.org; Fri, 27 Nov 2020 09:08:15 +0000 Received: from smtp-fw-9102.amazon.com ([207.171.184.29]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kiZjg-0000YL-7U for pgsql-hackers@postgresql.org; Fri, 27 Nov 2020 09:08:14 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1606468093; x=1638004093; h=to:cc:references:from:message-id:date:mime-version: in-reply-to:subject; bh=osLlot4jnlhcc93IcSBGWOrLAUY9wXAyW7jTmtHLKwk=; b=GKmMX8rmZGc3tCajbBUa9sQAnzYTMCX03nE1a9sm7NYruAf65sEkYcmj 1o1g0AjCL6DqH8SwjI90LlDx6MLODAdIPpFyWzdRLBxMEECiD3V/C/pmb ZMezfwegPafTxf/jV5jQlrKcYXpdWva+wyxmZFcg4VapHms45HS1w4aJl E=; X-Amazon-filename: v9-0004-Log-the-standby-recovery-conflict-waits.patch X-IronPort-AV: E=Sophos;i="5.78,373,1599523200"; d="scan'208";a="99652930" Subject: Re: Add Information during standby recovery conflicts Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-2c-2225282c.us-west-2.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9102.sea19.amazon.com with ESMTP; 27 Nov 2020 09:07:50 +0000 Received: from EX13D03EUC003.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan3.pdx.amazon.com [10.236.137.198]) by email-inbound-relay-2c-2225282c.us-west-2.amazon.com (Postfix) with ESMTPS id 79CE1A2219; Fri, 27 Nov 2020 09:07:48 +0000 (UTC) Received: from 38f9d36c4abb.ant.amazon.com (10.43.162.53) by EX13D03EUC003.ant.amazon.com (10.43.164.192) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 27 Nov 2020 09:07:44 +0000 To: Masahiko Sawada CC: Fujii Masao , Masahiko Sawada , Kyotaro Horiguchi , Alvaro Herrera , PostgreSQL-development References: <9493cda6-ac77-6aff-28ea-4ff7774ba78c@oss.nttdata.com> <6416172a-8c7d-84da-2600-f5f41c61db18@amazon.com> <9682a167-af46-2e58-7f77-c87edaf80fde@amazon.com> <0c8a89ae-27bf-2c31-e74a-cf04033d7daf@oss.nttdata.com> <9e66cab4-dda4-50c8-6c0a-d41468338fa5@amazon.com> <48a1c817-cbde-33c4-2672-13ef37e1d946@amazon.com> From: "Drouvot, Bertrand" Message-ID: <61a9ad81-9436-dbf2-22a5-044843aa6ba3@amazon.com> Date: Fri, 27 Nov 2020 10:07:40 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------6D2B6DA8CEBBF4B0CA003036" Content-Language: en-US X-Originating-IP: [10.43.162.53] X-ClientProxiedBy: EX13D31UWC001.ant.amazon.com (10.43.162.152) To EX13D03EUC003.ant.amazon.com (10.43.164.192) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --------------6D2B6DA8CEBBF4B0CA003036 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Hi, On 11/27/20 6:04 AM, Masahiko Sawada wrote: > Thank you for updating the patch! The patch works fine and looks good > to me except for the following small comments: > > +/* > + * Log the recovery conflict. > + * > + * waitStart is the timestamp when the caller started to wait. This > function also > + * reports the details about the conflicting process ids if *waitlist > is not NULL. > + */ > +void > +LogRecoveryConflict(ProcSignalReason reason, TimestampTz waitStart, > + TimestampTz cur_ts, > VirtualTransactionId *waitlist) > > I think it's better to explain cur_ts as well in the function comment. > > Regarding the function arguments, 'waitStart' is camel case whereas > 'cur_ts' is snake case and 'waitlist' is using only lower cases. I > think we should unify them. > > --- > -ResolveRecoveryConflictWithLock(LOCKTAG locktag) > +ResolveRecoveryConflictWithLock(LOCKTAG locktag, bool logged_recovery_conflict) > > The function argument name 'logged_recovery_conflict' sounds a bit > redundant to me as this function is used only for recovery conflict > resolution. How about 'need_log' or something? Also it’s better to > explain it in the function comment. Thanks for reviewing! I have addressed your comments in the new attached version. Thanks Bertrand --------------6D2B6DA8CEBBF4B0CA003036 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v9-0004-Log-the-standby-recovery-conflict-waits.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v9-0004-Log-the-standby-recovery-conflict-waits.patch" IGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAyMiAr KysKIGRvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5zZ21sICAgICAgICAgICB8ICAg NiArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAg MTggKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICAg fCAyMjEgKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMgICAgICAgICAgICAgICB8ICAzNSArKystCiBzcmMvYmFja2VuZC91dGls cy9taXNjL2d1Yy5jICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMiArCiBzcmMvaW5jbHVkZS9z dG9yYWdlL3N0YW5kYnkuaCAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIDggZmlsZXMgY2hh bmdlZCwgMjgwIGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmlu ZGV4IGVlOTE0NzQwY2MuLjNhYTg5MmMwZjMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9j b25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTY4MzksNiAr NjgzOSwyOCBAQCBsb2dfbGluZV9wcmVmaXggPSAnJW0gWyVwXSAlcSV1QCVkLyVhICcKICAg ICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9Imd1Yy1sb2ctcmVjb3ZlcnktY29uZmxpY3Qtd2FpdHMiIHhyZWZsYWJlbD0i bG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmxv Z19yZWNvdmVyeV9jb25mbGljdF93YWl0czwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5 cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5sb2df cmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIENvbnRyb2xzIHdoZXRoZXIg YSBsb2cgbWVzc2FnZSBpcyBwcm9kdWNlZCB3aGVuIHRoZSBzdGFydHVwIHByb2Nlc3MKKyAg ICAgICAgaXMgd2FpdGluZyBsb25nZXIgdGhhbiA8dmFybmFtZT5kZWFkbG9ja190aW1lb3V0 PC92YXJuYW1lPgorICAgICAgICBmb3IgcmVjb3ZlcnkgY29uZmxpY3RzLiAgVGhpcyBpcyB1 c2VmdWwgaW4gZGV0ZXJtaW5pbmcgaWYgcmVjb3ZlcnkKKyAgICAgICAgY29uZmxpY3RzIHBy ZXZlbnQgdGhlIHJlY292ZXJ5IGZyb20gYXBwbHlpbmcgV0FMLgorICAgICAgIDwvcGFyYT4K KworICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5vZmY8 L2xpdGVyYWw+LiAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0CisgICAgICAgIGlu IHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0 aGUgc2VydmVyCisgICAgICAgIGNvbW1hbmQgbGluZS4KKyAgICAgICA8L3BhcmE+CisgICAg ICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVu dHJ5IGlkPSJndWMtbG9nLXBhcmFtZXRlci1tYXgtbGVuZ3RoIiB4cmVmbGFiZWw9ImxvZ19w YXJhbWV0ZXJfbWF4X2xlbmd0aCI+CiAgICAgICA8dGVybT48dmFybmFtZT5sb2dfcGFyYW1l dGVyX21heF9sZW5ndGg8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKICAgICAg IDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaGlnaC1hdmFpbGFiaWxp dHkuc2dtbCBiL2RvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5zZ21sCmluZGV4IDg2 ZGE4NGZjZTcuLjNkY2IzNDE0M2EgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9oaWdoLWF2 YWlsYWJpbGl0eS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5z Z21sCkBAIC0yMTA0LDYgKzIxMDQsMTIgQEAgaWYgKCF0cmlnZ2VyZWQpCiAgICAgc2VydmVy LiBUaGUgPHN0cnVjdG5hbWU+cGdfc3RhdF9kYXRhYmFzZTwvc3RydWN0bmFtZT4gc3lzdGVt IHZpZXcgYWxzbyBjb250YWlucwogICAgIHN1bW1hcnkgaW5mb3JtYXRpb24uCiAgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIFVzZXJzIGNhbiBjb250cm9sIHdoZXRoZXIgYSBsb2cg bWVzc2FnZSBpcyBwcm9kdWNlZCB3aGVuIFdBTCByZXBsYXkgaXMgd2FpdGluZworICAgIGxv bmdlciB0aGFuIDx2YXJuYW1lPmRlYWRsb2NrX3RpbWVvdXQ8L3Zhcm5hbWU+IGZvciBjb25m bGljdHMuIFRoaXMKKyAgICBpcyBjb250cm9sbGVkIGJ5IHRoZSA8eHJlZiBsaW5rZW5kPSJn dWMtbG9nLXJlY292ZXJ5LWNvbmZsaWN0LXdhaXRzIi8+IHBhcmFtZXRlci4KKyAgIDwvcGFy YT4KICAgPC9zZWN0Mj4KIAogICA8c2VjdDIgaWQ9ImhvdC1zdGFuZGJ5LWFkbWluIj4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggZTU0OWZhMWQzMC4uNWE5NzQw YWI2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTM4MDgsNiAr MzgwOCw4IEBAIExvY2tCdWZmZXJGb3JDbGVhbnVwKEJ1ZmZlciBidWZmZXIpCiB7CiAJQnVm ZmVyRGVzYyAqYnVmSGRyOwogCWNoYXIJICAgKm5ld19zdGF0dXMgPSBOVUxMOworCVRpbWVz dGFtcFR6IHdhaXRTdGFydCA9IDA7CisJYm9vbCAgICAgICAgbG9nZ2VkX3JlY292ZXJ5X2Nv bmZsaWN0ID0gZmFsc2U7CiAKIAlBc3NlcnQoQnVmZmVySXNQaW5uZWQoYnVmZmVyKSk7CiAJ QXNzZXJ0KFBpbkNvdW50V2FpdEJ1ZiA9PSBOVUxMKTsKQEAgLTM4MjksNiArMzgzMSwxMCBA QCBMb2NrQnVmZmVyRm9yQ2xlYW51cChCdWZmZXIgYnVmZmVyKQogCiAJYnVmSGRyID0gR2V0 QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKIAorCS8qIFNldCB3YWl0IHN0YXJ0IHRp bWVzdGFtcCBpZiBsb2dnaW5nIGlzIGVuYWJsZWQgKi8KKwlpZiAobG9nX3JlY292ZXJ5X2Nv bmZsaWN0X3dhaXRzKQorCQl3YWl0U3RhcnQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisK IAlmb3IgKDs7KQogCXsKIAkJdWludDMyCQlidWZfc3RhdGU7CkBAIC0zODgxLDYgKzM4ODcs MTggQEAgTG9ja0J1ZmZlckZvckNsZWFudXAoQnVmZmVyIGJ1ZmZlcikKIAkJCQluZXdfc3Rh dHVzW2xlbl0gPSAnXDAnOyAvKiB0cnVuY2F0ZSBvZmYgIiB3YWl0aW5nIiAqLwogCQkJfQog CisJCQlpZiAod2FpdFN0YXJ0ID4gMCAmJiAhbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0KQor CQkJeworCQkJCVRpbWVzdGFtcFR6IGN1cl90cyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsK KwkJCQlpZiAoVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMod2FpdFN0YXJ0LCBjdXJfdHMs CisJCQkJCQkJCQkJICAgRGVhZGxvY2tUaW1lb3V0KSkKKwkJCQl7CisJCQkJCUFzc2VydChs b2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMpOworCQkJCQlMb2dSZWNvdmVyeUNvbmZsaWN0 KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOLAorCQkJCQkJCQkJCXdhaXRT dGFydCwgY3VyX3RzLCBOVUxMKTsKKwkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0g dHJ1ZTsKKwkJCQl9CisJCQl9CiAJCQkvKiBQdWJsaXNoIHRoZSBidWZpZCB0aGF0IFN0YXJ0 dXAgcHJvY2VzcyB3YWl0cyBvbiAqLwogCQkJU2V0U3RhcnR1cEJ1ZmZlclBpbldhaXRCdWZJ ZChidWZmZXIgLSAxKTsKIAkJCS8qIFNldCBhbGFybSBhbmQgdGhlbiB3YWl0IHRvIGJlIHNp Z25hbGVkIGJ5IFVucGluQnVmZmVyKCkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnku YwppbmRleCA1MmIyODA5ZGFjLi41OWI4ZjI5ZGYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c3RhbmRieS5jCkBAIC0zOSw2ICszOSw3IEBACiBpbnQJCQl2YWN1dW1fZGVmZXJfY2xlYW51 cF9hZ2U7CiBpbnQJCQltYXhfc3RhbmRieV9hcmNoaXZlX2RlbGF5ID0gMzAgKiAxMDAwOwog aW50CQkJbWF4X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5ID0gMzAgKiAxMDAwOworYm9vbAkJ bG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzID0gZmFsc2U7CiAKIHN0YXRpYyBIVEFCICpS ZWNvdmVyeUxvY2tMaXN0czsKIApAQCAtNDksNiArNTAsNyBAQCBzdGF0aWMgdm9pZCBSZXNv bHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25J ZCAqd2FpdGxpcwogc3RhdGljIHZvaWQgU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVy UGluKFByb2NTaWduYWxSZWFzb24gcmVhc29uKTsKIHN0YXRpYyBYTG9nUmVjUHRyIExvZ0N1 cnJlbnRSdW5uaW5nWGFjdHMoUnVubmluZ1RyYW5zYWN0aW9ucyBDdXJyUnVubmluZ1hhY3Rz KTsKIHN0YXRpYyB2b2lkIExvZ0FjY2Vzc0V4Y2x1c2l2ZUxvY2tzKGludCBubG9ja3MsIHhs X3N0YW5kYnlfbG9jayAqbG9ja3MpOworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZWNvdmVy eV9jb25mbGljdF9kZXNjKFByb2NTaWduYWxSZWFzb24gcmVhc29uKTsKIAogLyoKICAqIEtl ZXAgdHJhY2sgb2YgYWxsIHRoZSBsb2NrcyBvd25lZCBieSBhIGdpdmVuIHRyYW5zYWN0aW9u LgpAQCAtMjE1LDE1ICsyMTcsODcgQEAgV2FpdEV4Y2VlZHNNYXhTdGFuZGJ5RGVsYXkodWlu dDMyIHdhaXRfZXZlbnRfaW5mbykKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBMb2cg dGhlIHJlY292ZXJ5IGNvbmZsaWN0LgorICoKKyAqIHdhaXRfc3RhcnQgaXMgdGhlIHRpbWVz dGFtcCB3aGVuIHRoZSBjYWxsZXIgc3RhcnRlZCB0byB3YWl0LgorICogY3VyX3RzIGlzIHRo ZSB0aW1lc3RhbXAgd2hlbiB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZC4KKyAqIFRo aXMgZnVuY3Rpb24gYWxzbyByZXBvcnRzIHRoZSBkZXRhaWxzIGFib3V0IHRoZSBjb25mbGlj dGluZworICogcHJvY2VzcyBpZHMgaWYgKndhaXRfbGlzdCBpcyBub3QgTlVMTC4KKyAqLwor dm9pZAorTG9nUmVjb3ZlcnlDb25mbGljdChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbiwgVGlt ZXN0YW1wVHogd2FpdF9zdGFydCwKKwkJCQkJVGltZXN0YW1wVHogY3VyX3RzLCBWaXJ0dWFs VHJhbnNhY3Rpb25JZCAqd2FpdF9saXN0KQoreworCWxvbmcJCXNlY3M7CisJaW50CQkJdXNl Y3M7CisJbG9uZwkJbXNlY3M7CisKKwlUaW1lc3RhbXBEaWZmZXJlbmNlKHdhaXRfc3RhcnQs IGN1cl90cywgJnNlY3MsICZ1c2Vjcyk7CisJbXNlY3MgPSBzZWNzICogMTAwMCArIHVzZWNz IC8gMTAwMDsKKwl1c2VjcyA9IHVzZWNzICUgMTAwMDsKKworCWlmICh3YWl0X2xpc3QpCisJ eworCQlWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhpZHM7CisJCVN0cmluZ0luZm9EYXRhIGJ1 ZjsKKwkJaW50CW5wcm9jcyA9IDA7CisKKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwkJ LyogY29uc3RydWN0IGEgc3RyaW5nIG9mIGxpc3Qgb2YgdGhlIGNvbmZsaWN0ZWQgcHJvY2Vz c2VzICovCisJCXZ4aWRzID0gd2FpdF9saXN0OworCQl3aGlsZSAoVmlydHVhbFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKCp2eGlkcykpCisJCXsKKwkJCVBHUFJPQyAqcHJvYyA9IEJhY2tlbmRJ ZEdldFByb2ModnhpZHMtPmJhY2tlbmRJZCk7CisKKwkJCWlmIChwcm9jKQorCQkJeworCQkJ CWlmIChucHJvY3MgPT0gMCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCBw cm9jLT5waWQpOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAl ZCIsIHByb2MtPnBpZCk7CisKKwkJCQlucHJvY3MrKzsKKwkJCX0KKworCQkJdnhpZHMrKzsK KwkJfQorCisJCWlmIChucHJvY3MgPiAwKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJ KGVycm1zZygiJXMgYWZ0ZXIgJWxkLiUwM2QgbXMiLAorCQkJCQkJCWdldF9yZWNvdmVyeV9j b25mbGljdF9kZXNjKHJlYXNvbiksIG1zZWNzLCB1c2VjcyksCisJCQkJCSAoZXJyZGV0YWls X2xvZ19wbHVyYWwoIkNvbmZsaWN0aW5nIHByb2Nlc3M6ICVzLiIsCisJCQkJCQkJCQkJICAg IkNvbmZsaWN0aW5nIHByb2Nlc3NlczogJXMuIiwKKwkJCQkJCQkJCQkgICBucHJvY3MsIGJ1 Zi5kYXRhKSkpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQko ZXJybXNnKCIlcyBhZnRlciAlbGQuJTAzZCBtcyIsCisJCQkJCQkJZ2V0X3JlY292ZXJ5X2Nv bmZsaWN0X2Rlc2MocmVhc29uKSwgbXNlY3MsIHVzZWNzKSkpOworCQl9CisKKwkJcGZyZWUo YnVmLmRhdGEpOworCX0KKwllbHNlCisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coIiVz IGFmdGVyICVsZC4lMDNkIG1zIiwKKwkJCQkJCWdldF9yZWNvdmVyeV9jb25mbGljdF9kZXNj KHJlYXNvbiksIG1zZWNzLCB1c2VjcykpKTsKK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIG1h aW4gZXhlY3V0aW9uZXIgZm9yIGFueSBxdWVyeSBiYWNrZW5kIHRoYXQgY29uZmxpY3RzIHdp dGgKICAqIHJlY292ZXJ5IHByb2Nlc3NpbmcuIEp1ZGdlbWVudCBoYXMgYWxyZWFkeSBiZWVu IHBhc3NlZCBvbiBpdCB3aXRoaW4KICAqIGEgc3BlY2lmaWMgcm1nci4gSGVyZSB3ZSBqdXN0 IGlzc3VlIHRoZSBvcmRlcnMgdG8gdGhlIHByb2NzLiBUaGUgcHJvY3MKICAqIHRoZW4gdGhy b3cgdGhlIHJlcXVpcmVkIGVycm9yIGFzIGluc3RydWN0ZWQuCiAgKgotICogSWYgcmVwb3J0 X3dhaXRpbmcgaXMgdHJ1ZSwgIndhaXRpbmciIGlzIHJlcG9ydGVkIGluIFBTIGRpc3BsYXkg aWYgbmVjZXNzYXJ5LgotICogSWYgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSByZXBvcnRlZCB0 aGF0LCByZXBvcnRfd2FpdGluZyBzaG91bGQgYmUgZmFsc2UuCi0gKiBPdGhlcndpc2UsICJ3 YWl0aW5nIiBpcyByZXBvcnRlZCB0d2ljZSB1bmV4cGVjdGVkbHkuCisgKiBJZiByZXBvcnRf d2FpdGluZyBpcyB0cnVlLCAid2FpdGluZyIgaXMgcmVwb3J0ZWQgaW4gUFMgZGlzcGxheSBh bmQgbG9nCisgKiB0aGUgd2FpdHMgZm9yIHRoZSByZWNvdmVyeSBjb25mbGljdCBpZiBuZWNl c3NhcnkuICBJZiB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5CisgKiByZXBvcnRlZCB0aGF0LCBy ZXBvcnRfd2FpdGluZyBzaG91bGQgYmUgZmFsc2UuICBPdGhlcndpc2UsIGJvdGggYXJlIHJl cG9ydGVkCisgKiB0d2ljZSB1bmV4cGVjdGVkbHkuCiAgKi8KIHN0YXRpYyB2b2lkCiBSZXNv bHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25J ZCAqd2FpdGxpc3QsCkBAIC0yMzIsMTIgKzMwNiwxNCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25m bGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCiB7 CiAJVGltZXN0YW1wVHogd2FpdFN0YXJ0ID0gMDsKIAljaGFyCSAgICpuZXdfc3RhdHVzOwor CWJvb2wgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gZmFsc2U7CiAKIAkvKiBGYXN0IGV4 aXQsIHRvIGF2b2lkIGEga2VybmVsIGNhbGwgaWYgdGhlcmUncyBubyB3b3JrIHRvIGJlIGRv bmUuICovCiAJaWYgKCFWaXJ0dWFsVHJhbnNhY3Rpb25JZElzVmFsaWQoKndhaXRsaXN0KSkK IAkJcmV0dXJuOwogCi0JaWYgKHJlcG9ydF93YWl0aW5nKQorCS8qIFNldCB0aGUgd2FpdCBz dGFydCB0aW1lc3RhbXAgZm9yIHJlcG9ydGluZyAqLworCWlmIChyZXBvcnRfd2FpdGluZyAm JiAobG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0IHx8IHVwZGF0ZV9wcm9jZXNzX3RpdGxlKSkK IAkJd2FpdFN0YXJ0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCW5ld19zdGF0dXMgPSBO VUxMOwkJCS8qIHdlIGhhdmVuJ3QgY2hhbmdlZCB0aGUgcHMgZGlzcGxheSAqLwogCkBAIC0y NDksMjMgKzMyNSw0MyBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElE cyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCiAJCS8qIHdhaXQgdW50aWwgdGhl IHZpcnR1YWwgeGlkIGlzIGdvbmUgKi8KIAkJd2hpbGUgKCFWaXJ0dWFsWGFjdExvY2soKndh aXRsaXN0LCBmYWxzZSkpCiAJCXsKLQkJCS8qCi0JCQkgKiBSZXBvcnQgdmlhIHBzIGlmIHdl IGhhdmUgYmVlbiB3YWl0aW5nIGZvciBtb3JlIHRoYW4gNTAwIG1zZWMKLQkJCSAqIChzaG91 bGQgdGhhdCBiZSBjb25maWd1cmFibGU/KQotCQkJICovCi0JCQlpZiAodXBkYXRlX3Byb2Nl c3NfdGl0bGUgJiYgbmV3X3N0YXR1cyA9PSBOVUxMICYmIHJlcG9ydF93YWl0aW5nICYmCi0J CQkJVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMod2FpdFN0YXJ0LCBHZXRDdXJyZW50VGlt ZXN0YW1wKCksCi0JCQkJCQkJCQkJICAgNTAwKSkKKwkJCWlmICh3YWl0U3RhcnQgPiAwKQog CQkJewotCQkJCWNvbnN0IGNoYXIgKm9sZF9zdGF0dXM7Ci0JCQkJaW50CQkJbGVuOwotCi0J CQkJb2xkX3N0YXR1cyA9IGdldF9wc19kaXNwbGF5KCZsZW4pOwotCQkJCW5ld19zdGF0dXMg PSAoY2hhciAqKSBwYWxsb2MobGVuICsgOCArIDEpOwotCQkJCW1lbWNweShuZXdfc3RhdHVz LCBvbGRfc3RhdHVzLCBsZW4pOwotCQkJCXN0cmNweShuZXdfc3RhdHVzICsgbGVuLCAiIHdh aXRpbmciKTsKLQkJCQlzZXRfcHNfZGlzcGxheShuZXdfc3RhdHVzKTsKLQkJCQluZXdfc3Rh dHVzW2xlbl0gPSAnXDAnOyAvKiB0cnVuY2F0ZSBvZmYgIiB3YWl0aW5nIiAqLworCQkJCVRp bWVzdGFtcFR6IGN1cl90cyA9IDA7CisJCQkJYm9vbCBtYXliZV9sb2dfY29uZmxpY3QgPQor CQkJCQkobG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzICYmICFsb2dnZWRfcmVjb3Zlcnlf Y29uZmxpY3QpOworCQkJCWJvb2wgbWF5YmVfdXBkYXRlX3BzdGl0bGUgPQorCQkJCQkodXBk YXRlX3Byb2Nlc3NfdGl0bGUgJiYgbmV3X3N0YXR1cyA9PSBOVUxMKTsKKworCQkJCS8qIEdl dCB0aGUgY3VycmVudCB0aW1lc3RhbXAgaWYgbm90IHJlcG9ydCB5ZXQgKi8KKwkJCQlpZiAo bWF5YmVfbG9nX2NvbmZsaWN0IHx8IG1heWJlX3VwZGF0ZV9wc3RpdGxlKQorCQkJCQljdXJf dHMgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkJCQkvKiBMb2cgdGhlIHJlY292ZXJ5 IGNvbmZsaWN0IGlmIG5lY2Vzc2FyeSAqLworCQkJCWlmIChtYXliZV9sb2dfY29uZmxpY3Qg JiYKKwkJCQkJVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMod2FpdFN0YXJ0LCBjdXJfdHMs IERlYWRsb2NrVGltZW91dCkpCisJCQkJeworCQkJCQlMb2dSZWNvdmVyeUNvbmZsaWN0KHJl YXNvbiwgd2FpdFN0YXJ0LCBjdXJfdHMsIHdhaXRsaXN0KTsKKwkJCQkJbG9nZ2VkX3JlY292 ZXJ5X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIFJlcG9ydCB2 aWEgcHMgaWYgd2UgaGF2ZSBiZWVuIHdhaXRpbmcgZm9yIG1vcmUgdGhhbiA1MDAgbXNlYwor CQkJCSAqIChzaG91bGQgdGhhdCBiZSBjb25maWd1cmFibGU/KQorCQkJCSAqLworCQkJCWlm IChtYXliZV91cGRhdGVfcHN0aXRsZSAmJgorCQkJCQlUaW1lc3RhbXBEaWZmZXJlbmNlRXhj ZWVkcyh3YWl0U3RhcnQsIGN1cl90cywgNTAwKSkKKwkJCQl7CisJCQkJCWNvbnN0IGNoYXIg Km9sZF9zdGF0dXM7CisJCQkJCWludAkJCWxlbjsKKworCQkJCQlvbGRfc3RhdHVzID0gZ2V0 X3BzX2Rpc3BsYXkoJmxlbik7CisJCQkJCW5ld19zdGF0dXMgPSAoY2hhciAqKSBwYWxsb2Mo bGVuICsgOCArIDEpOworCQkJCQltZW1jcHkobmV3X3N0YXR1cywgb2xkX3N0YXR1cywgbGVu KTsKKwkJCQkJc3RyY3B5KG5ld19zdGF0dXMgKyBsZW4sICIgd2FpdGluZyIpOworCQkJCQlz ZXRfcHNfZGlzcGxheShuZXdfc3RhdHVzKTsKKwkJCQkJbmV3X3N0YXR1c1tsZW5dID0gJ1ww JzsgLyogdHJ1bmNhdGUgb2ZmICIgd2FpdGluZyIgKi8KKwkJCQl9CiAJCQl9CiAKIAkJCS8q IElzIGl0IHRpbWUgdG8ga2lsbCBpdD8gKi8KQEAgLTM5OCw5ICs0OTQsMTIgQEAgUmVzb2x2 ZVJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2UoT2lkIGRiaWQpCiAgKgogICogRGVhZGxv Y2tzIGludm9sdmluZyB0aGUgU3RhcnR1cCBwcm9jZXNzIGFuZCBhbiBvcmRpbmFyeSBiYWNr ZW5kIHByb2Nlc3MKICAqIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgdGhlIGRlYWRsb2NrIGRldGVj dG9yIHdpdGhpbiB0aGUgb3JkaW5hcnkgYmFja2VuZC4KKyAqCisgKiBuZWVkX2xvZyBpcyB1 c2VkIHRvIHNldCB0aGUgZGVhZGxvY2sgdGltZW91dCBmb3IgbG9nZ2luZyBwdXJwb3NlCisg KiBvbmx5IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIG5vdCBiZWVuIGxvZ2dlZCB5ZXQuCiAgKi8K IHZvaWQKLVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aExvY2soTE9DS1RBRyBsb2NrdGFn KQorUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcsIGJv b2wgbmVlZF9sb2cpCiB7CiAJVGltZXN0YW1wVHogbHRpbWU7CiAKQEAgLTQwOCw3ICs1MDcs MzUgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcp CiAKIAlsdGltZSA9IEdldFN0YW5kYnlMaW1pdFRpbWUoKTsKIAotCWlmIChHZXRDdXJyZW50 VGltZXN0YW1wKCkgPj0gbHRpbWUpCisJaWYgKGx0aW1lID09IDAgfHwgR2V0Q3VycmVudFRp bWVzdGFtcCgpIDwgbHRpbWUpCisJeworCQlFbmFibGVUaW1lb3V0UGFyYW1zIHRpbWVvdXRz WzJdOworCQlpbnQgY250ID0gMDsKKworCQkvKgorCQkgKiBXYWl0IChvciB3YWl0IGFnYWlu KSB1bnRpbCBsdGltZQorCQkgKi8KKwkJaWYgKGx0aW1lICE9IDApCisJCXsKKwkJCXRpbWVv dXRzW2NudF0uaWQgPSBTVEFOREJZX0xPQ0tfVElNRU9VVDsKKwkJCXRpbWVvdXRzW2NudF0u dHlwZSA9IFRNUEFSQU1fQVQ7CisJCQl0aW1lb3V0c1tjbnRdLmZpbl90aW1lID0gbHRpbWU7 CisJCQljbnQrKzsKKwkJfQorCisJCS8qIEFsc28sIHNldCBkZWFkbG9jayB0aW1lb3V0IGZv ciBsb2dnaW5nIHB1cnBvc2UgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChsb2dfcmVjb3Zlcnlf Y29uZmxpY3Rfd2FpdHMgJiYgIW5lZWRfbG9nKQorCQl7CisJCQl0aW1lb3V0c1tjbnRdLmlk ID0gU1RBTkRCWV9USU1FT1VUOworCQkJdGltZW91dHNbY250XS50eXBlID0gVE1QQVJBTV9B RlRFUjsKKwkJCXRpbWVvdXRzW2NudF0uZGVsYXlfbXMgPSBEZWFkbG9ja1RpbWVvdXQ7CisJ CQljbnQrKzsKKwkJfQorCisJCWlmIChjbnQgPiAwKQorCQkJZW5hYmxlX3RpbWVvdXRzKHRp bWVvdXRzLCBjbnQpOworCX0KKwllbHNlCiAJewogCQkvKgogCQkgKiBXZSdyZSBhbHJlYWR5 IGJlaGluZCwgc28gY2xlYXIgYSBwYXRoIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCkBAIC00 MTksMjYgKzU0NiwxNSBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhMb2NrKExPQ0tU QUcgbG9ja3RhZykKIAogCQkvKgogCQkgKiBQcmV2ZW50IFJlc29sdmVSZWNvdmVyeUNvbmZs aWN0V2l0aFZpcnR1YWxYSURzKCkgZnJvbSByZXBvcnRpbmcKLQkJICogIndhaXRpbmciIGlu IFBTIGRpc3BsYXkgYnkgZGlzYWJsaW5nIGl0cyBhcmd1bWVudCByZXBvcnRfd2FpdGluZwot CQkgKiBiZWNhdXNlIHRoZSBjYWxsZXIsIFdhaXRPbkxvY2soKSwgaGFzIGFscmVhZHkgcmVw b3J0ZWQgdGhhdC4KKwkJICogIndhaXRpbmciIGluIFBTIGRpc3BsYXkgYW5kIGxvZ2dpbmcg cmVjb3ZlcnkgY29uZmxpY3QgYnkgZGlzYWJsaW5nCisJCSAqIGl0cyBhcmd1bWVudCByZXBv cnRfd2FpdGluZyBiZWNhdXNlIHRoZSBjYWxsZXJzIG1heSBoYXZlIGFscmVhZHkKKwkJICog cmVwb3J0ZWQgdGhhdC4KIAkJICovCiAJCVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZp cnR1YWxYSURzKGJhY2tlbmRzLAogCQkJCQkJCQkJCQkgICBQUk9DU0lHX1JFQ09WRVJZX0NP TkZMSUNUX0xPQ0ssCiAJCQkJCQkJCQkJCSAgIFBHX1dBSVRfTE9DSyB8IGxvY2t0YWcubG9j a3RhZ190eXBlLAogCQkJCQkJCQkJCQkgICBmYWxzZSk7CiAJfQotCWVsc2UKLQl7Ci0JCS8q Ci0JCSAqIFdhaXQgKG9yIHdhaXQgYWdhaW4pIHVudGlsIGx0aW1lCi0JCSAqLwotCQlFbmFi bGVUaW1lb3V0UGFyYW1zIHRpbWVvdXRzWzFdOwotCi0JCXRpbWVvdXRzWzBdLmlkID0gU1RB TkRCWV9MT0NLX1RJTUVPVVQ7Ci0JCXRpbWVvdXRzWzBdLnR5cGUgPSBUTVBBUkFNX0FUOwot CQl0aW1lb3V0c1swXS5maW5fdGltZSA9IGx0aW1lOwotCQllbmFibGVfdGltZW91dHModGlt ZW91dHMsIDEpOwotCX0KIAogCS8qIFdhaXQgdG8gYmUgc2lnbmFsZWQgYnkgdGhlIHJlbGVh c2Ugb2YgdGhlIFJlbGF0aW9uIExvY2sgKi8KIAlQcm9jV2FpdEZvclNpZ25hbChQR19XQUlU X0xPQ0sgfCBsb2NrdGFnLmxvY2t0YWdfdHlwZSk7CkBAIC0xMTE2LDMgKzEyMzIsMzYgQEAg TG9nU3RhbmRieUludmFsaWRhdGlvbnMoaW50IG5tc2dzLCBTaGFyZWRJbnZhbGlkYXRpb25N ZXNzYWdlICptc2dzLAogCQkJCQkgbm1zZ3MgKiBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9u TWVzc2FnZSkpOwogCVhMb2dJbnNlcnQoUk1fU1RBTkRCWV9JRCwgWExPR19JTlZBTElEQVRJ T05TKTsKIH0KKworLyogUmV0dXJuIHRoZSBkZXNjcmlwdGlvbiBvZiByZWNvdmVyeSBjb25m bGljdCAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X3JlY292ZXJ5X2NvbmZsaWN0X2Rl c2MoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pCit7CisJY29uc3QgY2hhciAqcmVhc29uRGVz YyA9IGdldHRleHRfbm9vcCgidW5rbm93biByZWFzb24iKTsKKworCXN3aXRjaCAocmVhc29u KQorCXsKKwkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTjoKKwkJ CXJlYXNvbkRlc2MgPSBnZXR0ZXh0X25vb3AoInJlY292ZXJ5IGlzIHN0aWxsIHdhaXRpbmcg Zm9yIHJlY292ZXJ5IGNvbmZsaWN0IG9uIGJ1ZmZlciBwaW4iKTsKKwkJCWJyZWFrOworCQlj YXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9DSzoKKwkJCXJlYXNvbkRlc2MgPSBn ZXR0ZXh0X25vb3AoInJlY292ZXJ5IGlzIHN0aWxsIHdhaXRpbmcgZm9yIHJlY292ZXJ5IGNv bmZsaWN0IG9uIGxvY2siKTsKKwkJCWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllf Q09ORkxJQ1RfVEFCTEVTUEFDRToKKwkJCXJlYXNvbkRlc2MgPSBnZXR0ZXh0X25vb3AoInJl Y292ZXJ5IGlzIHN0aWxsIHdhaXRpbmcgZm9yIHJlY292ZXJ5IGNvbmZsaWN0IG9uIHRhYmxl c3BhY2UiKTsKKwkJCWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1Rf U05BUFNIT1Q6CisJCQlyZWFzb25EZXNjID0gZ2V0dGV4dF9ub29wKCJyZWNvdmVyeSBpcyBz dGlsbCB3YWl0aW5nIGZvciByZWNvdmVyeSBjb25mbGljdCBvbiBzbmFwc2hvdCIpOworCQkJ YnJlYWs7CisJCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURM T0NLOgorCQkJcmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgicmVjb3ZlcnkgaXMgc3RpbGwg d2FpdGluZyBmb3IgcmVjb3ZlcnkgY29uZmxpY3Qgb24gYnVmZmVyIGRlYWRsb2NrIik7CisJ CQlicmVhazsKKwkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFOgor CQkJcmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgicmVjb3ZlcnkgaXMgc3RpbGwgd2FpdGlu ZyBmb3IgcmVjb3ZlcnkgY29uZmxpY3Qgb24gZGF0YWJhc2UiKTsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlYXNvbkRlc2M7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCA4ODU2NmJkOWZhLi42ZDA4NzI2YmU5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTEwNjMsOCArMTA2MywxMCBAQCBQcm9jU2xl ZXAoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlKQog CUxXTG9jawkgICAqcGFydGl0aW9uTG9jayA9IExvY2tIYXNoUGFydGl0aW9uTG9jayhoYXNo Y29kZSk7CiAJUFJPQ19RVUVVRSAqd2FpdFF1ZXVlID0gJihsb2NrLT53YWl0UHJvY3MpOwog CUxPQ0tNQVNLCW15SGVsZExvY2tzID0gTXlQcm9jLT5oZWxkTG9ja3M7CisJVGltZXN0YW1w VHogc3RhbmRieVdhaXRTdGFydCA9IDA7CiAJYm9vbAkJZWFybHlfZGVhZGxvY2sgPSBmYWxz ZTsKIAlib29sCQlhbGxvd19hdXRvdmFjdXVtX2NhbmNlbCA9IHRydWU7CisJYm9vbCAgICAg ICAgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gZmFsc2U7CiAJUHJvY1dhaXRTdGF0dXMg bXlXYWl0U3RhdHVzOwogCVBHUFJPQwkgICAqcHJvYzsKIAlQR1BST0MJICAgKmxlYWRlciA9 IE15UHJvYy0+bG9ja0dyb3VwTGVhZGVyOwpAQCAtMTI2MCw2ICsxMjYyLDExIEBAIFByb2NT bGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUp CiAJCWVsc2UKIAkJCWVuYWJsZV90aW1lb3V0X2FmdGVyKERFQURMT0NLX1RJTUVPVVQsIERl YWRsb2NrVGltZW91dCk7CiAJfQorCWVsc2UgaWYgKGxvZ19yZWNvdmVyeV9jb25mbGljdF93 YWl0cykKKwl7CisJCS8qIFNldCB3YWl0IHN0YXJ0IHRpbWVzdGFtcCBpZiBsb2dnaW5nIGlz IGVuYWJsZWQgKi8KKwkJc3RhbmRieVdhaXRTdGFydCA9IEdldEN1cnJlbnRUaW1lc3RhbXAo KTsKKwl9CiAKIAkvKgogCSAqIElmIHNvbWVib2R5IHdha2VzIHVzIGJldHdlZW4gTFdMb2Nr UmVsZWFzZSBhbmQgV2FpdExhdGNoLCB0aGUgbGF0Y2gKQEAgLTEyODAsNyArMTI4NywzMyBA QCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9ja01ldGhv ZFRhYmxlKQogCQlpZiAoSW5Ib3RTdGFuZGJ5KQogCQl7CiAJCQkvKiBTZXQgYSB0aW1lciBh bmQgd2FpdCBmb3IgdGhhdCBvciBmb3IgdGhlIExvY2sgdG8gYmUgZ3JhbnRlZCAqLwotCQkJ UmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhsb2NhbGxvY2stPnRhZy5sb2NrKTsK KwkJCVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aExvY2sobG9jYWxsb2NrLT50YWcubG9j aywgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0KTsKKworCQkJaWYgKHN0YW5kYnlXYWl0U3Rh cnQgPiAwICYmICFsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpCisJCQl7CisJCQkJVGltZXN0 YW1wVHogY3VyX3RzID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQkJCWlmIChUaW1lc3Rh bXBEaWZmZXJlbmNlRXhjZWVkcyhzdGFuZGJ5V2FpdFN0YXJ0LCBjdXJfdHMsCisJCQkJCQkJ CQkJICAgRGVhZGxvY2tUaW1lb3V0KSkKKwkJCQl7CisJCQkJCVZpcnR1YWxUcmFuc2FjdGlv bklkICp2eGlkczsKKwkJCQkJaW50CWNudDsKKworCQkJCQlBc3NlcnQobG9nX3JlY292ZXJ5 X2NvbmZsaWN0X3dhaXRzKTsKKwkJCQkJdnhpZHMgPQlHZXRMb2NrQ29uZmxpY3RzKCZsb2Nh bGxvY2stPnRhZy5sb2NrLAorCQkJCQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywgJmNu dCk7CisKKwkJCQkJLyoKKwkJCQkJICogTG9nIHRoZSByZWNvdmVyeSBjb25mbGljdCBpZiB0 aGVyZSBpcyBzdGlsbCB2aXJ0dWFsIHRyYW5zYWN0aW9uCisJCQkJCSAqIGNvbmZsaWN0aW5n IHdpdGggdGhlIGxvY2suCisJCQkJCSAqLworCQkJCQlpZiAoY250ID4gMCkKKwkJCQkJewor CQkJCQkJTG9nUmVjb3ZlcnlDb25mbGljdChQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xP Q0ssCisJCQkJCQkJCQkJCXN0YW5kYnlXYWl0U3RhcnQsIGN1cl90cywgdnhpZHMpOworCQkJ CQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJ CX0KIAkJfQogCQllbHNlCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCmluZGV4IDU5NmJjYjdi ODQuLmU1NWEyOGIxY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtMTU3MCw3ICsxNTcw LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10g PQogCQlmYWxzZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCi0KKwl7CisJCXsibG9nX3Jl Y292ZXJ5X2NvbmZsaWN0X3dhaXRzIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEFULAorCQkJ Z2V0dGV4dF9ub29wKCJMb2dzIHN0YW5kYnkgcmVjb3ZlcnkgY29uZmxpY3Qgd2FpdHMuIiks CisJCQlOVUxMCisJCX0sCisJCSZsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMsCisJCWZh bHNlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKIAl7CiAJCXsibG9nX2hvc3RuYW1lIiwg UEdDX1NJR0hVUCwgTE9HR0lOR19XSEFULAogCQkJZ2V0dGV4dF9ub29wKCJMb2dzIHRoZSBo b3N0IG5hbWUgaW4gdGhlIGNvbm5lY3Rpb24gbG9ncy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCA5Y2I1NzFmN2NjLi41 NjI1NjgxZThhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlCkBAIC01NTMsNiArNTUzLDggQEAKIAkJCQkJIyAgICUlID0gJyUnCiAJ CQkJCSMgZS5nLiAnPCV1JSUlZD4gJwogI2xvZ19sb2NrX3dhaXRzID0gb2ZmCQkJIyBsb2cg bG9jayB3YWl0cyA+PSBkZWFkbG9ja190aW1lb3V0CisjbG9nX3JlY292ZXJ5X2NvbmZsaWN0 X3dhaXRzID0gb2ZmCSMgbG9nIHN0YW5kYnkgcmVjb3ZlcnkgY29uZmxpY3Qgd2FpdHMKKwkJ CQkJIyA+PSBkZWFkbG9ja190aW1lb3V0CiAjbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoID0g LTEJCSMgd2hlbiBsb2dnaW5nIHN0YXRlbWVudHMsIGxpbWl0IGxvZ2dlZAogCQkJCQkjIGJp bmQtcGFyYW1ldGVyIHZhbHVlcyB0byBOIGJ5dGVzOwogCQkJCQkjIC0xIG1lYW5zIHByaW50 IGluIGZ1bGwsIDAgZGlzYWJsZXMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c3RhbmRieS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKaW5kZXggZmFhZjFk MzgxNy4uZDI0OTQ1OWFhNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFu ZGJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKQEAgLTIzLDYgKzIz LDcgQEAKIGV4dGVybiBpbnQJdmFjdXVtX2RlZmVyX2NsZWFudXBfYWdlOwogZXh0ZXJuIGlu dAltYXhfc3RhbmRieV9hcmNoaXZlX2RlbGF5OwogZXh0ZXJuIGludAltYXhfc3RhbmRieV9z dHJlYW1pbmdfZGVsYXk7CitleHRlcm4gYm9vbAlsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2Fp dHM7CiAKIGV4dGVybiB2b2lkIEluaXRSZWNvdmVyeVRyYW5zYWN0aW9uRW52aXJvbm1lbnQo dm9pZCk7CiBleHRlcm4gdm9pZCBTaHV0ZG93blJlY292ZXJ5VHJhbnNhY3Rpb25FbnZpcm9u bWVudCh2b2lkKTsKQEAgLTMyLDEyICszMywxNCBAQCBleHRlcm4gdm9pZCBSZXNvbHZlUmVj b3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdChUcmFuc2FjdGlvbklkIGxhdGVzdFJlbW92ZWRY aWQsCiBleHRlcm4gdm9pZCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhUYWJsZXNwYWNl KE9pZCB0c2lkKTsKIGV4dGVybiB2b2lkIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aERh dGFiYXNlKE9pZCBkYmlkKTsKIAotZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxp Y3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcpOworZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292 ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgbmVlZF9sb2cpOwog ZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKHZvaWQp OwogZXh0ZXJuIHZvaWQgQ2hlY2tSZWNvdmVyeUNvbmZsaWN0RGVhZGxvY2sodm9pZCk7CiBl eHRlcm4gdm9pZCBTdGFuZGJ5RGVhZExvY2tIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQg U3RhbmRieVRpbWVvdXRIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRieUxvY2tU aW1lb3V0SGFuZGxlcih2b2lkKTsKK2V4dGVybiB2b2lkIExvZ1JlY292ZXJ5Q29uZmxpY3Qo UHJvY1NpZ25hbFJlYXNvbiByZWFzb24sIFRpbWVzdGFtcFR6IHdhaXRfc3RhcnQsCisJCQkJ CQkJCVRpbWVzdGFtcFR6IGN1cl90cywgVmlydHVhbFRyYW5zYWN0aW9uSWQgKndhaXRfbGlz dCk7CiAKIC8qCiAgKiBTdGFuZGJ5IFJtZ3IgKFJNX1NUQU5EQllfSUQpCg== --------------6D2B6DA8CEBBF4B0CA003036--