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 1pEhIO-0004WM-OX for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Jan 2023 01:49:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pEhIN-0001p8-Je for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Jan 2023 01:49:51 +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 1pEhIN-0001oz-1z for pgsql-hackers@lists.postgresql.org; Mon, 09 Jan 2023 01:49:51 +0000 Received: from mail-vk1-xa30.google.com ([2607:f8b0:4864:20::a30]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pEhIJ-0006Lo-HJ for pgsql-hackers@lists.postgresql.org; Mon, 09 Jan 2023 01:49:49 +0000 Received: by mail-vk1-xa30.google.com with SMTP id i32so3281970vkr.12 for ; Sun, 08 Jan 2023 17:49:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20210112.gappssmtp.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=h3oaiSJho8AHxJQkIYBxgYik6AfjSb7WA8u/5pP9Mbk=; b=Mzl9mCoTBOSi6HujbAmSbDOKHJfUP8QQNb32dcnkPj7azYIW4bQ+al4Wx3ax/IZvfu mXo1QGPPNInK01C1lPzJgaBoOhvmhnYCuWQmSMWR0YG3ZcP9Ol6zvc0CLg+LGEe4GlTZ vapeou0AfCqV3D2W92o5b+4yt1CTEvP6jGrxwbBR1NBKV5rpxDL1TLsYICP6Sa4iDtCk NLhy7Wu2wwerDoDoXFfgwXimzoKchkQBzuKnQMT7qI2uzpRjT86SuV9KMIQG/9sGWNQW JDIarq3H4sPSt9ZUlFzTY72eX+zEhANRfaKLFMEHN9ThxNv+puNqB8zL1HBURltODGlN Ux7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=h3oaiSJho8AHxJQkIYBxgYik6AfjSb7WA8u/5pP9Mbk=; b=z2cLCAY6xOiSBUHTq82YMDL/dFHML86GbWp5FMhGmEvfi5LRMPs+heDOX8xzf04HgH XpBD06BSWaQPhIqOHGDFr3rEM8RI1mMDNtH1Hz3afL0FYWUoiFFG2FT+hi5b2L0hvNEa zPelaX7qiPAuC8IqcbaMfcl/GZ40Vlfd5ywn67a0SkmIRsbk3tzFyQxsR/69baAhURX/ QjW9Dy2GqGIJLqW1g8Y+UJzLAzkBuyI8HxRU/za8dK6ZMDDNGUMUQyrLwpxlbhvYGg12 E5ayIKjaAxACnbYg0QG+/lkGMoHrpRsYMHota9cnHbOi0L+t0DOOdKJxBx8Yhui8X6s1 McdA== X-Gm-Message-State: AFqh2krDmpxKlRujJmBtoh2kMYvRu1+cG8Nb0cMWnjdijxtTB0tNMV2X 5QrAtCHf/IrOALkZCTNV9EjFTjGzi2KxGKENpcQ2E5bBh2KYoujGFYE= X-Google-Smtp-Source: AMrXdXvGt1dkJcjn64W9CjN62478G6gOlF6jFX+U/QkvqdCT1urgKJWeIl/3dmOE6p5jIX+PNHwh9HzPtDo406/EZ5I= X-Received: by 2002:a05:6122:153:b0:3da:4b40:be54 with SMTP id r19-20020a056122015300b003da4b40be54mr1206038vko.1.1673228986368; Sun, 08 Jan 2023 17:49:46 -0800 (PST) MIME-Version: 1.0 References: <5308f8fdd85fea4cd3c3e5cab2e64e164c46c6d9.camel@j-davis.com> In-Reply-To: From: Peter Geoghegan Date: Sun, 8 Jan 2023 17:49:20 -0800 Message-ID: Subject: Re: Decoupling antiwraparound autovacuum from special rules around auto cancellation To: Jeff Davis Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000005cc88905f1cafbf7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005cc88905f1cafbf7 Content-Type: text/plain; charset="UTF-8" On Thu, Dec 29, 2022 at 7:01 PM Peter Geoghegan wrote: > Attached is v2, which is just to fix bitrot. Attached is v3. We no longer apply vacuum_failsafe_age when determining the cutoff for antiwraparound autovacuuming -- the new approach is a bit simpler. This is a fairly small change overall. Now any "table age driven" autovacuum will also be antiwraparound when its relfrozenxid/relminmxid attains an age that's either double the relevant setting (either autovacuum_freeze_max_age or effective_multixact_freeze_max_age), or 1 billion XIDs/MXIDs -- whichever is less. That makes it completely impossible to disable antiwraparound protections (the special antiwrap autocancellation behavior) for table-age-driven autovacuums once table age exceeds 1 billion XIDs/MXIDs. It's still possible to increase autovacuum_freeze_max_age to well over a billion, of course. It just won't be possible to do that while also avoiding the no-auto-cancellation behavior for those autovacuums that are triggered due to table age crossing the autovacuum_freeze_max_age/effective_multixact_freeze_max_age threshold. -- Peter Geoghegan --0000000000005cc88905f1cafbf7 Content-Type: application/x-patch; name="v3-0001-Add-table-age-trigger-concept-to-autovacuum.patch" Content-Disposition: attachment; filename="v3-0001-Add-table-age-trigger-concept-to-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lco4niht0 RnJvbSA2ZDc4ZTYyMjI2NjA4NjgzZDk4ODJiNDUwN2QzNzQ0MjE2NDI2N2ExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IEZy aSwgMjUgTm92IDIwMjIgMTE6MjM6MjAgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzXSBBZGQgInRh YmxlIGFnZSIgdHJpZ2dlciBjb25jZXB0IHRvIGF1dG92YWN1dW0uCgpUZWFjaCBhdXRvdmFjdXVt LmMgdG8gbGF1bmNoICJ0YWJsZSBhZ2UiIGF1dG92YWN1dW1zIGF0IHRoZSBzYW1lIHBvaW50CnRo YXQgaXQgcHJldmlvdXNseSB0cmlnZ2VyZWQgYW50aXdyYXBhcm91bmQgYXV0b3ZhY3V1bXMuICBB bnRpd3JhcGFyb3VuZAphdXRvdmFjdXVtcyBhcmUgcmV0YWluZWQsIGJ1dCBhcmUgb25seSB1c2Vk IGFzIGEgdHJ1ZSBvcHRpb24gb2YgbGFzdApyZXNvcnQsIHdoZW4gcmVndWxhciBhdXRvdmFjdXVt IGhhcyBwcmVzdW1hYmx5IHRyaWVkIGFuZCBmYWlsZWQgdG8KYWR2YW5jZSByZWxmcm96ZW54aWQg KGxpa2VseSBiZWNhdXNlIHRoZSBhdXRvLWNhbmNlbCBiZWhhdmlvciBrZXB0CmNhbmNlbGxpbmcg cmVndWxhciBhdXRvdmFjdXVtcyB0cmlnZ2VyZWQgYmFzZWQgb24gdGFibGUgYWdlKS4KClRoZSBz cGVjaWFsIGF1dG8tY2FuY2VsbGF0aW9uIGJlaGF2aW9yIGFwcGxpZWQgYnkgYW50aXdyYXBhcm91 bmQKYXV0b3ZhY3V1bXMgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgaW4gdGhlIGZpZWxkLCBz byBpdCBtYWtlcyBzZW5zZQp0byBhdm9pZCBpdCwgYXQgbGVhc3QgdW50aWwgdGhlIHBvaW50IHdo ZXJlIGl0IHN0YXJ0cyB0byBsb29rIGxpa2UgYQpwcm9wb3J0aW9uYXRlIHJlc3BvbnNlLiAgQmVz aWRlcywgdGhlIHJpc2sgb2YgdGhlIHN5c3RlbSBldmVudHVhbGx5CnRyaWdnZXJpbmcgeGlkU3Rv cExpbWl0IGJlY2F1c2Ugb2YgY2FuY2VsbGF0aW9ucyBpcyBhIGxvdCBsb3dlciB0aGFuIGl0Cndh cyBiYWNrIHdoZW4gdGhlIGN1cnJlbnQgYXV0by1jYW5jZWxsYXRpb24gYmVoYXZpb3Igd2FzIGFk ZGVkIGJ5IGNvbW1pdAphY2FjNjhiMi4gIEZvciBleGFtcGxlLCB0aGVyZSB3YXMgbm8gdmlzaWJp bGl0eSBtYXAsIHNvIHJlc3RhcnRpbmcKYW50aXdyYXBhcm91bmQgYXV0b3ZhY3V1bSBtZWFudCB0 aGF0IHRoZSBuZXh0IGF1dG92YWN1dW0gd291bGQgZ2V0IHZlcnkKbGl0dGxlIGJlbmVmaXQgZnJv bSB0aGUgd29yayBwZXJmb3JtZWQgYnkgZWFybGllciBjYW5jZWxsZWQgYXV0b3ZhY3V1bXMuCgpB bHNvIGFkZCBuZXcgaW5zdHJ1bWVudGF0aW9uIHRoYXQgbGlzdHMgYSB0cmlnZ2VyaW5nIGNvbmRp dGlvbiBpbiB0aGUKc2VydmVyIGxvZyB3aGVuZXZlciBhbiBhdXRvdmFjdXVtIGlzIGxvZ2dlZC4g IFRoaXMgcmVwb3J0cyAidGFibGUgYWdlIgphcyB0aGUgdHJpZ2dlcmluZyBjcml0ZXJpYSB3aGVu IHJlZ3VsYXIgKG5vdCBhbnRpd3JhcGFyb3VuZCkgYXV0b3ZhY3V1bQpydW5zIGJlY2F1c2Ugd2Ug bmVlZCB0byBhZHZhbmNlIHRoZSB0YWJsZSdzIGFnZS4gIEluIG90aGVyIGNhc2VzIGl0IHdpbGwK cmVwb3J0IGFuIGF1dG92YWN1dW0gd2FzIGxhdW5jaGVkIGR1ZSB0byB0aGUgdHVwbGUgaW5zZXJ0 IHRocmVzaG9sZHMgb3IKdGhlIGRlYWQgdHVwbGUgdGhyZXNob2xkcy4gIE5vdGUgdGhhdCBwZ19z dGF0X2FjdGl2aXR5IGRvZXNuJ3QgaGF2ZSBhbnkKc3BlY2lhbCBpbnN0cnVtZW50YXRpb24gZm9y IHJlZ3VsYXIgYXV0b3ZhY3V1bXMgdGhhdCBoYXBwZW4gdG8gaGF2ZSBiZWVuCnRyaWdnZXJlZCBi YXNlZCBvbiB0YWJsZSBhZ2UgKHNpbmNlIGl0IHJlYWxseSBpcyBqdXN0IGFub3RoZXIgZm9ybSBv ZgphdXRvdmFjdXVtLCBhbmQgZm9sbG93cyBleGFjdGx5IHRoZSBzYW1lIHJ1bGVzIGluIHZhY3V1 bWxhenkuYyBhbmQgaW4KcHJvYy5jKS4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0 LmllPgpSZXZpZXdlZC1CeTogSmVmZiBEYXZpcyA8cGdzcWxAai1kYXZpcy5jb20+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1TLVJfMnJPNDlIbTk0TnV2aHU5X3R3Ukdi VG02dXdEUm1SdS1TcW5fdDN3QG1haWwuZ21haWwuY29tCi0tLQogc3JjL2luY2x1ZGUvY29tbWFu ZHMvdmFjdXVtLmggICAgICAgICAgIHwgIDE4ICsrLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9j LmggICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1s YXp5LmMgICAgfCAgMTQgKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAu YyB8ICAgNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgfCAgMTggKystCiBz cmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyAgICAgfCAyMDcgKysrKysrKysrKysr KysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAgICAgfCAg IDQgKy0KIDggZmlsZXMgY2hhbmdlZCwgMTk3IGluc2VydGlvbnMoKyksIDc1IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvdmFjdXVtLmgKaW5kZXggNjg5ZGJiNzcwLi5iNzBmNjlmZDkgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3ZhY3V1bS5oCkBAIC0xOTEsNiArMTkxLDIxIEBAIHR5cGVkZWYgc3RydWN0IFZhY0F0dHJT dGF0cwogI2RlZmluZSBWQUNPUFRfU0tJUF9EQVRBQkFTRV9TVEFUUyAweDEwMAkvKiBza2lwIHZh Y191cGRhdGVfZGF0ZnJvemVueGlkKCkgKi8KICNkZWZpbmUgVkFDT1BUX09OTFlfREFUQUJBU0Vf U1RBVFMgMHgyMDAJLyogb25seSB2YWNfdXBkYXRlX2RhdGZyb3plbnhpZCgpICovCiAKKy8qCisg KiBWYWx1ZXMgdXNlZCBieSBhdXRvdmFjdXVtLmMgdG8gdGVsbCB2YWN1dW1sYXp5LmMgYWJvdXQg dGhlIHNwZWNpZmljCisgKiB0aHJlc2hvbGQgdHlwZSB0aGF0IHRyaWdnZXJlZCBhbiBhdXRvdmFj dXVtIHdvcmtlci4KKyAqCisgKiBBVVRPVkFDVVVNX05PTkUgaXMgdXNlZCB3aGVuIFZBQ1VVTSBp c24ndCBydW5uaW5nIGluIGFuIGF1dG92YWN1dW0gd29ya2VyLgorICovCit0eXBlZGVmIGVudW0g QXV0b1ZhY1R5cGUKK3sKKwlBVVRPVkFDVVVNX05PTkUgPSAwLAorCUFVVE9WQUNVVU1fVEFCTEVf WElEX0FHRSwKKwlBVVRPVkFDVVVNX1RBQkxFX01YSURfQUdFLAorCUFVVE9WQUNVVU1fREVBRF9U VVBMRVMsCisJQVVUT1ZBQ1VVTV9JTlNFUlRFRF9UVVBMRVMsCit9IEF1dG9WYWNUeXBlOworCiAv KgogICogVmFsdWVzIHVzZWQgYnkgaW5kZXhfY2xlYW51cCBhbmQgdHJ1bmNhdGUgcGFyYW1zLgog ICoKQEAgLTIyMiw3ICsyMzcsOCBAQCB0eXBlZGVmIHN0cnVjdCBWYWN1dW1QYXJhbXMKIAkJCQkJ CQkJCQkJICogdXNlIGRlZmF1bHQgKi8KIAlpbnQJCQltdWx0aXhhY3RfZnJlZXplX3RhYmxlX2Fn ZTsgLyogbXVsdGl4YWN0IGFnZSBhdCB3aGljaCB0byBzY2FuCiAJCQkJCQkJCQkJCSAqIHdob2xl IHRhYmxlICovCi0JYm9vbAkJaXNfd3JhcGFyb3VuZDsJLyogZm9yY2UgYSBmb3Itd3JhcGFyb3Vu ZCB2YWN1dW0gKi8KKwlib29sCQlpc193cmFwYXJvdW5kOwkvKiBhbnRpd3JhcGFyb3VuZCBhdXRv dmFjdXVtPyAqLworCUF1dG9WYWNUeXBlCXRyaWdnZXI7CQkvKiBBdXRvdmFjdXVtIHRyaWdnZXIg Y29uZGl0aW9uLCBpZiBhbnkgKi8KIAlpbnQJCQlsb2dfbWluX2R1cmF0aW9uOwkvKiBtaW5pbXVt IGV4ZWN1dGlvbiB0aHJlc2hvbGQgaW4gbXMgYXQKIAkJCQkJCQkJCSAqIHdoaWNoIGF1dG92YWN1 dW0gaXMgbG9nZ2VkLCAtMSB0byB1c2UKIAkJCQkJCQkJCSAqIGRlZmF1bHQgKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9j LmgKaW5kZXggYjVjNmY0NmQwLi44YTkyYTlmZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC01OSw3ICs1 OSw3IEBAIHN0cnVjdCBYaWRDYWNoZQogCQkJCQkJCQkJCSAqIENPTkNVUlJFTlRMWSBvciBSRUlO REVYCiAJCQkJCQkJCQkJICogQ09OQ1VSUkVOVExZIG9uIG5vbi1leHByZXNzaW9uYWwsCiAJCQkJ CQkJCQkJICogbm9uLXBhcnRpYWwgaW5kZXggKi8KLSNkZWZpbmUJCVBST0NfVkFDVVVNX0ZPUl9X UkFQQVJPVU5ECTB4MDgJLyogc2V0IGJ5IGF1dG92YWMgb25seSAqLworI2RlZmluZQkJUFJPQ19W QUNVVU1fRk9SX1dSQVBBUk9VTkQJMHgwOAkvKiBlbWVyZ2VuY3kgYXV0b3ZhYyAqLwogI2RlZmlu ZQkJUFJPQ19JTl9MT0dJQ0FMX0RFQ09ESU5HCTB4MTAJLyogY3VycmVudGx5IGRvaW5nIGxvZ2lj YWwKIAkJCQkJCQkJCQkJCSAqIGRlY29kaW5nIG91dHNpZGUgeGFjdCAqLwogI2RlZmluZQkJUFJP Q19BRkZFQ1RTX0FMTF9IT1JJWk9OUwkweDIwCS8qIHRoaXMgcHJvYydzIHhtaW4gbXVzdCBiZQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IGE0MmU4ODFkYS4uMzFjNjhlOTVl IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCkBAIC02MzksNiArNjM5LDggQEAg aGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCQkJ ICogaW1wbGllcyBhZ2dyZXNzaXZlLiAgUHJvZHVjZSBkaXN0aW5jdCBvdXRwdXQgZm9yIHRoZSBj b3JuZXIKIAkJCQkgKiBjYXNlIGFsbCB0aGUgc2FtZSwganVzdCBpbiBjYXNlLgogCQkJCSAqLwor CQkJCUFzc2VydChwYXJhbXMtPnRyaWdnZXIgPT0gQVVUT1ZBQ1VVTV9UQUJMRV9YSURfQUdFIHx8 CisJCQkJCSAgIHBhcmFtcy0+dHJpZ2dlciA9PSBBVVRPVkFDVVVNX1RBQkxFX01YSURfQUdFKTsK IAkJCQlpZiAodmFjcmVsLT5hZ2dyZXNzaXZlKQogCQkJCQltc2dmbXQgPSBfKCJhdXRvbWF0aWMg YWdncmVzc2l2ZSB2YWN1dW0gdG8gcHJldmVudCB3cmFwYXJvdW5kIG9mIHRhYmxlIFwiJXMuJXMu JXNcIjogaW5kZXggc2NhbnM6ICVkXG4iKTsKIAkJCQllbHNlCkBAIC02NTYsNiArNjU4LDE4IEBA IGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJ CQkJCSB2YWNyZWwtPnJlbG5hbWVzcGFjZSwKIAkJCQkJCQkgdmFjcmVsLT5yZWxuYW1lLAogCQkJ CQkJCSB2YWNyZWwtPm51bV9pbmRleF9zY2Fucyk7CisJCQlpZiAoIXZlcmJvc2UpCisJCQl7CisJ CQkJQXNzZXJ0KHBhcmFtcy0+dHJpZ2dlciAhPSBBVVRPVkFDVVVNX05PTkUpOworCQkJCWlmIChw YXJhbXMtPnRyaWdnZXIgPT0gQVVUT1ZBQ1VVTV9UQUJMRV9YSURfQUdFKQorCQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZidWYsIF8oImF1dG92YWN1dW0gdHJpZ2dlcjogdGFibGUgWElEIGFnZSB0aHJl c2hvbGRcbiIpKTsKKwkJCQllbHNlIGlmIChwYXJhbXMtPnRyaWdnZXIgPT0gQVVUT1ZBQ1VVTV9U QUJMRV9NWElEX0FHRSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCBfKCJhdXRvdmFjdXVt IHRyaWdnZXI6IHRhYmxlIE11bHRpWGFjdElkIGFnZSB0aHJlc2hvbGRcbiIpKTsKKwkJCQllbHNl IGlmIChwYXJhbXMtPnRyaWdnZXIgPT0gQVVUT1ZBQ1VVTV9ERUFEX1RVUExFUykKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCBfKCJhdXRvdmFjdXVtIHRyaWdnZXI6IGRlYWQgdHVwbGVzIHRo cmVzaG9sZFxuIikpOworCQkJCWVsc2UgaWYgKHBhcmFtcy0+dHJpZ2dlciA9PSBBVVRPVkFDVVVN X0lOU0VSVEVEX1RVUExFUykKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCBfKCJhdXRvdmFj dXVtIHRyaWdnZXI6IGluc2VydGVkIHR1cGxlcyB0aHJlc2hvbGRcbiIpKTsKKwkJCX0KIAkJCWFw cGVuZFN0cmluZ0luZm8oJmJ1ZiwgXygicGFnZXM6ICV1IHJlbW92ZWQsICV1IHJlbWFpbiwgJXUg c2Nhbm5lZCAoJS4yZiUlIG9mIHRvdGFsKVxuIiksCiAJCQkJCQkJIHZhY3JlbC0+cmVtb3ZlZF9w YWdlcywKIAkJCQkJCQkgbmV3X3JlbF9wYWdlcywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2li aWxpdHltYXAuYwppbmRleCAxZDFjYTQyM2EuLjhhMGVkNWEwNiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL3Zpc2liaWxpdHltYXAuYwpAQCAtMjYsOCArMjYsOSBAQAogICogcGVyIGhlYXAgcGFn ZS4gQSBzZXQgYWxsLXZpc2libGUgYml0IG1lYW5zIHRoYXQgYWxsIHR1cGxlcyBvbiB0aGUgcGFn ZSBhcmUKICAqIGtub3duIHZpc2libGUgdG8gYWxsIHRyYW5zYWN0aW9ucywgYW5kIHRoZXJlZm9y ZSB0aGUgcGFnZSBkb2Vzbid0IG5lZWQgdG8KICAqIGJlIHZhY3V1bWVkLiBBIHNldCBhbGwtZnJv emVuIGJpdCBtZWFucyB0aGF0IGFsbCB0dXBsZXMgb24gdGhlIHBhZ2UgYXJlCi0gKiBjb21wbGV0 ZWx5IGZyb3plbiwgYW5kIHRoZXJlZm9yZSB0aGUgcGFnZSBkb2Vzbid0IG5lZWQgdG8gYmUgdmFj dXVtZWQgZXZlbgotICogaWYgd2hvbGUgdGFibGUgc2Nhbm5pbmcgdmFjdXVtIGlzIHJlcXVpcmVk IChlLmcuIGFudGktd3JhcGFyb3VuZCB2YWN1dW0pLgorICogY29tcGxldGVseSBmcm96ZW4uICBW QUNVVU0gZG9lc24ndCBnaXZlIHVwIHRoZSByaWdodCB0byBhZHZhbmNlIHRoZSByZWwncworICog cmVsZnJvemVueGlkL3JlbG1pbm14aWQganVzdCBieSBza2lwcGluZyBpdHMgYWxsLWZyb3plbiBw YWdlczsgaXQgbmVlZCBvbmx5CisgKiBzY2FuIHRob3NlIHBhZ2VzIHRoYXQgbWlnaHQgaGF2ZSBy ZW1haW5pbmcgdW5mcm96ZW4gWElEcyBvciBNdWx0aVhhY3RJZHMuCiAgKiBUaGUgYWxsLWZyb3pl biBiaXQgbXVzdCBiZSBzZXQgb25seSB3aGVuIHRoZSBwYWdlIGlzIGFscmVhZHkgYWxsLXZpc2li bGUuCiAgKgogICogVGhlIG1hcCBpcyBjb25zZXJ2YXRpdmUgaW4gdGhlIHNlbnNlIHRoYXQgd2Ug bWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgYSBiaXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVs dGl4YWN0LmMKaW5kZXggZTc1ZTFmZGY3Li5jMGVlMzg3NmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL211bHRpeGFjdC5jCkBAIC0yNTUzLDggKzI1NTMsOCBAQCBHZXRPbGRlc3RNdWx0aVhh Y3RJZCh2b2lkKQogICogaW5mbyBpbiBNdWx0aVhhY3RTdGF0ZSwgd2hlcmUgaXQgY2FuIGJlIHVz ZWQgdG8gcHJldmVudCBvdmVycnVuIG9mIG9sZCBkYXRhCiAgKiBpbiB0aGUgbWVtYmVycyBTTFJV IGFyZWEuCiAgKgotICogVGhlIHJldHVybiB2YWx1ZSBpcyB0cnVlIGlmIGVtZXJnZW5jeSBhdXRv dmFjdXVtIGlzIHJlcXVpcmVkIGFuZCBmYWxzZQotICogb3RoZXJ3aXNlLgorICogVGhlIHJldHVy biB2YWx1ZSBpcyB0cnVlIGlmIGVtZXJnZW5jeSBvZmZzZXQgYXV0b3ZhY3V1bSAod2hpY2ggYXBw ZWFycyBhcyBhCisgKiB0YWJsZSBNWElEIGFnZSBhdXRvdmFjdXVtIHRvIHVzZXJzKSBpcyByZXF1 aXJlZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGJvb2wKIFNldE9mZnNldFZh Y3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5kZXggYzRlZDdl ZmNlLi4yYTQ5NTBkZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0yNzEsOCArMjcxLDkgQEAg RXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wg aXNUb3BMZXZlbCkKIAkJcGFyYW1zLm11bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlID0gLTE7CiAJ fQogCi0JLyogdXNlci1pbnZva2VkIHZhY3V1bSBpcyBuZXZlciAiZm9yIHdyYXBhcm91bmQiICov CisJLyogdXNlci1pbnZva2VkIHZhY3V1bSBuZXZlciB1c2VzIHRoZXNlIGF1dG92YWN1dW0tb25s eSBmbGFncyAqLwogCXBhcmFtcy5pc193cmFwYXJvdW5kID0gZmFsc2U7CisJcGFyYW1zLnRyaWdn ZXIgPSBBVVRPVkFDVVVNX05PTkU7CiAKIAkvKiB1c2VyLWludm9rZWQgdmFjdXVtIHVzZXMgVkFD T1BUX1ZFUkJPU0UgaW5zdGVhZCBvZiBsb2dfbWluX2R1cmF0aW9uICovCiAJcGFyYW1zLmxvZ19t aW5fZHVyYXRpb24gPSAtMTsKQEAgLTEwNDksOCArMTA1MCw4IEBAIHZhY3V1bV9nZXRfY3V0b2Zm cyhSZWxhdGlvbiByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCS8qCiAJICogRGV0 ZXJtaW5lIHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgdG8gdXNlOiBhcyBzcGVjaWZpZWQgYnkgdGhl IGNhbGxlciwgb3IKIAkgKiB2YWN1dW1fZnJlZXplX21pbl9hZ2UsIGJ1dCBpbiBhbnkgY2FzZSBu b3QgbW9yZSB0aGFuIGhhbGYKLQkgKiBhdXRvdmFjdXVtX2ZyZWV6ZV9tYXhfYWdlLCBzbyB0aGF0 IGF1dG92YWN1dW1zIHRvIHByZXZlbnQgWElECi0JICogd3JhcGFyb3VuZCB3b24ndCBvY2N1ciB0 b28gZnJlcXVlbnRseS4KKwkgKiBhdXRvdmFjdXVtX2ZyZWV6ZV9tYXhfYWdlLCBzbyB0aGF0IHRh YmxlIFhJRCBhZ2UgYXV0b3ZhY3V1bXMgd29uJ3QKKwkgKiBvY2N1ciB0b28gZnJlcXVlbnRseS4K IAkgKi8KIAlpZiAoZnJlZXplX21pbl9hZ2UgPCAwKQogCQlmcmVlemVfbWluX2FnZSA9IHZhY3V1 bV9mcmVlemVfbWluX2FnZTsKQEAgLTEwNjgsOCArMTA2OSw4IEBAIHZhY3V1bV9nZXRfY3V0b2Zm cyhSZWxhdGlvbiByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCS8qCiAJICogRGV0 ZXJtaW5lIHRoZSBtaW5pbXVtIG11bHRpeGFjdCBmcmVlemUgYWdlIHRvIHVzZTogYXMgc3BlY2lm aWVkIGJ5CiAJICogY2FsbGVyLCBvciB2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlLCBi dXQgaW4gYW55IGNhc2Ugbm90IG1vcmUKLQkgKiB0aGFuIGhhbGYgZWZmZWN0aXZlX211bHRpeGFj dF9mcmVlemVfbWF4X2FnZSwgc28gdGhhdCBhdXRvdmFjdXVtcyB0bwotCSAqIHByZXZlbnQgTXVs dGlYYWN0IHdyYXBhcm91bmQgd29uJ3Qgb2NjdXIgdG9vIGZyZXF1ZW50bHkuCisJICogdGhhbiBo YWxmIGVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIHNvIHRoYXQgdGFibGUgTVhJ RCBhZ2UKKwkgKiBhdXRvdmFjdXVtcyB3b24ndCBvY2N1ciB0b28gZnJlcXVlbnRseS4KIAkgKi8K IAlpZiAobXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlIDwgMCkKIAkJbXVsdGl4YWN0X2ZyZWV6ZV9t aW5fYWdlID0gdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZTsKQEAgLTE4NTgsNyArMTg1 OSw4IEBAIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBh cmFtcyAqcGFyYW1zKQogCQkgKgogCQkgKiBXZSBhbHNvIHNldCB0aGUgVkFDVVVNX0ZPUl9XUkFQ QVJPVU5EIGZsYWcsIHdoaWNoIGlzIHBhc3NlZCBkb3duIGJ5CiAJCSAqIGF1dG92YWN1dW07IGl0 J3MgdXNlZCB0byBhdm9pZCBjYW5jZWxpbmcgYSB2YWN1dW0gdGhhdCB3YXMgaW52b2tlZAotCQkg KiBpbiBhbiBlbWVyZ2VuY3kuCisJCSAqIGJlY2F1c2Ugbm8gZWFybGllciB2YWN1dW0gKGluIHBh cnRpY3VsYXIgbm8gZWFybGllciAidGFibGUgYWdlIgorCQkgKiBhdXRvdmFjdXVtKSByYW4gYW5k IGFkdmFuY2VkIHJlbGZyb3plbnhpZC9yZWxtaW5teGlkLgogCQkgKgogCQkgKiBOb3RlOiB0aGVz ZSBmbGFncyByZW1haW4gc2V0IHVudGlsIENvbW1pdFRyYW5zYWN0aW9uIG9yCiAJCSAqIEFib3J0 VHJhbnNhY3Rpb24uICBXZSBkb24ndCB3YW50IHRvIGNsZWFyIHRoZW0gdW50aWwgd2UgcmVzZXQK QEAgLTE4NzAsNyArMTg3MiwxMSBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJl bGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBhcmFtcykKIAkJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlM b2NrLCBMV19FWENMVVNJVkUpOwogCQlNeVByb2MtPnN0YXR1c0ZsYWdzIHw9IFBST0NfSU5fVkFD VVVNOwogCQlpZiAocGFyYW1zLT5pc193cmFwYXJvdW5kKQorCQl7CisJCQlBc3NlcnQocGFyYW1z LT50cmlnZ2VyID09IEFVVE9WQUNVVU1fVEFCTEVfWElEX0FHRSB8fAorCQkJCSAgIHBhcmFtcy0+ dHJpZ2dlciA9PSBBVVRPVkFDVVVNX1RBQkxFX01YSURfQUdFKTsKIAkJCU15UHJvYy0+c3RhdHVz RmxhZ3MgfD0gUFJPQ19WQUNVVU1fRk9SX1dSQVBBUk9VTkQ7CisJCX0KIAkJUHJvY0dsb2JhbC0+ c3RhdHVzRmxhZ3NbTXlQcm9jLT5wZ3hhY3RvZmZdID0gTXlQcm9jLT5zdGF0dXNGbGFnczsKIAkJ TFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3Zh Y3V1bS5jCmluZGV4IGY1ZWEzODFjNS4uMDE2MjYxZjdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1 dG92YWN1dW0uYwpAQCAtMTM1LDYgKzEzNSw4IEBAIGludAkJCUxvZ19hdXRvdmFjdXVtX21pbl9k dXJhdGlvbiA9IDYwMDAwMDsKICNkZWZpbmUgTUlOX0FVVE9WQUNfU0xFRVBUSU1FIDEwMC4wIC8q IG1pbGxpc2Vjb25kcyAqLwogI2RlZmluZSBNQVhfQVVUT1ZBQ19TTEVFUFRJTUUgMzAwCS8qIHNl Y29uZHMgKi8KIAorI2RlZmluZSBBTlRJV1JBUEFST1VORF9NQVhfQUdFIDEwMDAwMDAwMDAJLyog b25lIGJpbGxpb24gWElEcy9NWElEcyAqLworCiAvKiBGbGFncyB0byB0ZWxsIGlmIHdlIGFyZSBp biBhbiBhdXRvdmFjdXVtIHByb2Nlc3MgKi8KIHN0YXRpYyBib29sIGFtX2F1dG92YWN1dW1fbGF1 bmNoZXIgPSBmYWxzZTsKIHN0YXRpYyBib29sIGFtX2F1dG92YWN1dW1fd29ya2VyID0gZmFsc2U7 CkBAIC0zMjcsMTUgKzMyOSwxNyBAQCBzdGF0aWMgdm9pZCBGcmVlV29ya2VySW5mbyhpbnQgY29k ZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyBhdXRvdmFjX3RhYmxlICp0YWJsZV9yZWNoZWNrX2F1dG92 YWMoT2lkIHJlbGlkLCBIVEFCICp0YWJsZV90b2FzdF9tYXAsCiAJCQkJCQkJCQkJCVR1cGxlRGVz YyBwZ19jbGFzc19kZXNjLAogCQkJCQkJCQkJCQlpbnQgZWZmZWN0aXZlX211bHRpeGFjdF9mcmVl emVfbWF4X2FnZSk7Ci1zdGF0aWMgdm9pZCByZWNoZWNrX3JlbGF0aW9uX25lZWRzX3ZhY2FuYWx5 emUoT2lkIHJlbGlkLCBBdXRvVmFjT3B0cyAqYXZvcHRzLAotCQkJCQkJCQkJCQkgIEZvcm1fcGdf Y2xhc3MgY2xhc3NGb3JtLAotCQkJCQkJCQkJCQkgIGludCBlZmZlY3RpdmVfbXVsdGl4YWN0X2Zy ZWV6ZV9tYXhfYWdlLAotCQkJCQkJCQkJCQkgIGJvb2wgKmRvdmFjdXVtLCBib29sICpkb2FuYWx5 emUsIGJvb2wgKndyYXBhcm91bmQpOwotc3RhdGljIHZvaWQgcmVsYXRpb25fbmVlZHNfdmFjYW5h bHl6ZShPaWQgcmVsaWQsIEF1dG9WYWNPcHRzICpyZWxvcHRzLAotCQkJCQkJCQkJICBGb3JtX3Bn X2NsYXNzIGNsYXNzRm9ybSwKLQkJCQkJCQkJCSAgUGdTdGF0X1N0YXRUYWJFbnRyeSAqdGFiZW50 cnksCi0JCQkJCQkJCQkgIGludCBlZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLAot CQkJCQkJCQkJICBib29sICpkb3ZhY3V1bSwgYm9vbCAqZG9hbmFseXplLCBib29sICp3cmFwYXJv dW5kKTsKK3N0YXRpYyBBdXRvVmFjVHlwZSByZWNoZWNrX3JlbGF0aW9uX25lZWRzX3ZhY2FuYWx5 emUoT2lkIHJlbGlkLCBBdXRvVmFjT3B0cyAqYXZvcHRzLAorCQkJCQkJCQkJCQkJCSBGb3JtX3Bn X2NsYXNzIGNsYXNzRm9ybSwKKwkJCQkJCQkJCQkJCQkgaW50IGVmZmVjdGl2ZV9tdWx0aXhhY3Rf ZnJlZXplX21heF9hZ2UsCisJCQkJCQkJCQkJCQkJIGJvb2wgKmRvdmFjdXVtLCBib29sICpkb2Fu YWx5emUsCisJCQkJCQkJCQkJCQkJIGJvb2wgKndyYXBhcm91bmQpOworc3RhdGljIEF1dG9WYWNU eXBlIHJlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUoT2lkIHJlbGlkLCBBdXRvVmFjT3B0cyAqcmVs b3B0cywKKwkJCQkJCQkJCQkJIEZvcm1fcGdfY2xhc3MgY2xhc3NGb3JtLAorCQkJCQkJCQkJCQkg UGdTdGF0X1N0YXRUYWJFbnRyeSAqdGFiZW50cnksCisJCQkJCQkJCQkJCSBpbnQgZWZmZWN0aXZl X211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwKKwkJCQkJCQkJCQkJIGJvb2wgKmRvdmFjdXVtLCBi b29sICpkb2FuYWx5emUsCisJCQkJCQkJCQkJCSBib29sICp3cmFwYXJvdW5kKTsKIAogc3RhdGlj IHZvaWQgYXV0b3ZhY3V1bV9kb192YWNfYW5hbHl6ZShhdXRvdmFjX3RhYmxlICp0YWIsCiAJCQkJ CQkJCQkgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CkBAIC0xMTQ4LDggKzExNTIs OCBAQCBkb19zdGFydF93b3JrZXIodm9pZCkKIHsKIAlMaXN0CSAgICpkYmxpc3Q7CiAJTGlzdENl bGwgICAqY2VsbDsKLQlUcmFuc2FjdGlvbklkIHhpZEZvcmNlTGltaXQ7Ci0JTXVsdGlYYWN0SWQg bXVsdGlGb3JjZUxpbWl0OworCVRyYW5zYWN0aW9uSWQgeGlkQWdlTGltaXQ7CisJTXVsdGlYYWN0 SWQgbXVsdGlBZ2VMaW1pdDsKIAlib29sCQlmb3JfeGlkX3dyYXA7CiAJYm9vbAkJZm9yX211bHRp X3dyYXA7CiAJYXZ3X2RiYXNlICAqYXZkYjsKQEAgLTExODYsMTcgKzExOTAsMTcgQEAgZG9fc3Rh cnRfd29ya2VyKHZvaWQpCiAJICogcGFydGljdWxhciB0YWJsZXMsIGJ1dCBub3QgbG9vc2VuZWQu KQogCSAqLwogCXJlY2VudFhpZCA9IFJlYWROZXh0VHJhbnNhY3Rpb25JZCgpOwotCXhpZEZvcmNl TGltaXQgPSByZWNlbnRYaWQgLSBhdXRvdmFjdXVtX2ZyZWV6ZV9tYXhfYWdlOworCXhpZEFnZUxp bWl0ID0gcmVjZW50WGlkIC0gYXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZTsKIAkvKiBlbnN1cmUg aXQncyBhICJub3JtYWwiIFhJRCwgZWxzZSBUcmFuc2FjdGlvbklkUHJlY2VkZXMgbWlzYmVoYXZl cyAqLwogCS8qIHRoaXMgY2FuIGNhdXNlIHRoZSBsaW1pdCB0byBnbyBiYWNrd2FyZHMgYnkgMywg YnV0IHRoYXQncyBPSyAqLwotCWlmICh4aWRGb3JjZUxpbWl0IDwgRmlyc3ROb3JtYWxUcmFuc2Fj dGlvbklkKQotCQl4aWRGb3JjZUxpbWl0IC09IEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZDsKKwlp ZiAoeGlkQWdlTGltaXQgPCBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpCisJCXhpZEFnZUxpbWl0 IC09IEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZDsKIAogCS8qIEFsc28gZGV0ZXJtaW5lIHRoZSBv bGRlc3QgZGF0bWlubXhpZCB3ZSB3aWxsIGNvbnNpZGVyLiAqLwogCXJlY2VudE11bHRpID0gUmVh ZE5leHRNdWx0aVhhY3RJZCgpOwotCW11bHRpRm9yY2VMaW1pdCA9IHJlY2VudE11bHRpIC0gTXVs dGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7Ci0JaWYgKG11bHRpRm9yY2VMaW1pdCA8IEZp cnN0TXVsdGlYYWN0SWQpCi0JCW11bHRpRm9yY2VMaW1pdCAtPSBGaXJzdE11bHRpWGFjdElkOwor CW11bHRpQWdlTGltaXQgPSByZWNlbnRNdWx0aSAtIE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVz aG9sZCgpOworCWlmIChtdWx0aUFnZUxpbWl0IDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJbXVsdGlB Z2VMaW1pdCAtPSBGaXJzdE11bHRpWGFjdElkOwogCiAJLyoKIAkgKiBDaG9vc2UgYSBkYXRhYmFz ZSB0byBjb25uZWN0IHRvLiAgV2UgcGljayB0aGUgZGF0YWJhc2UgdGhhdCB3YXMgbGVhc3QKQEAg LTEyMjksNyArMTIzMyw3IEBAIGRvX3N0YXJ0X3dvcmtlcih2b2lkKQogCQlkbGlzdF9pdGVyCWl0 ZXI7CiAKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgb25lIGlzIGF0IHJpc2sgb2Ygd3JhcGFy b3VuZCAqLwotCQlpZiAoVHJhbnNhY3Rpb25JZFByZWNlZGVzKHRtcC0+YWR3X2Zyb3plbnhpZCwg eGlkRm9yY2VMaW1pdCkpCisJCWlmIChUcmFuc2FjdGlvbklkUHJlY2VkZXModG1wLT5hZHdfZnJv emVueGlkLCB4aWRBZ2VMaW1pdCkpCiAJCXsKIAkJCWlmIChhdmRiID09IE5VTEwgfHwKIAkJCQlU cmFuc2FjdGlvbklkUHJlY2VkZXModG1wLT5hZHdfZnJvemVueGlkLApAQCAtMTI0MCw3ICsxMjQ0 LDcgQEAgZG9fc3RhcnRfd29ya2VyKHZvaWQpCiAJCX0KIAkJZWxzZSBpZiAoZm9yX3hpZF93cmFw KQogCQkJY29udGludWU7CQkJLyogaWdub3JlIG5vdC1hdC1yaXNrIERCcyAqLwotCQllbHNlIGlm IChNdWx0aVhhY3RJZFByZWNlZGVzKHRtcC0+YWR3X21pbm11bHRpLCBtdWx0aUZvcmNlTGltaXQp KQorCQllbHNlIGlmIChNdWx0aVhhY3RJZFByZWNlZGVzKHRtcC0+YWR3X21pbm11bHRpLCBtdWx0 aUFnZUxpbWl0KSkKIAkJewogCQkJaWYgKGF2ZGIgPT0gTlVMTCB8fAogCQkJCU11bHRpWGFjdElk UHJlY2VkZXModG1wLT5hZHdfbWlubXVsdGksIGF2ZGItPmFkd19taW5tdWx0aSkpCkBAIC0xNjI2 LDcgKzE2MzAsNyBAQCBBdXRvVmFjV29ya2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CS8qCiAJICogRm9yY2Ugc3luY2hyb25vdXMgcmVwbGljYXRpb24gb2ZmIHRvIGFsbG93IHJlZ3Vs YXIgbWFpbnRlbmFuY2UgZXZlbiBpZgogCSAqIHdlIGFyZSB3YWl0aW5nIGZvciBzdGFuZGJ5cyB0 byBjb25uZWN0LiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgd2UKLQkgKiBhcmVuJ3QgYmxv Y2tlZCBmcm9tIHBlcmZvcm1pbmcgYW50aS13cmFwYXJvdW5kIHRhc2tzLgorCSAqIGFyZW4ndCBi bG9ja2VkIGZyb20gcGVyZm9ybWluZyB0YWJsZSBhZ2UgdGFza3MuCiAJICovCiAJaWYgKHN5bmNo cm9ub3VzX2NvbW1pdCA+IFNZTkNIUk9OT1VTX0NPTU1JVF9MT0NBTF9GTFVTSCkKIAkJU2V0Q29u ZmlnT3B0aW9uKCJzeW5jaHJvbm91c19jb21taXQiLCAibG9jYWwiLApAQCAtMjc2Nyw2ICsyNzcx LDcgQEAgdGFibGVfcmVjaGVja19hdXRvdmFjKE9pZCByZWxpZCwgSFRBQiAqdGFibGVfdG9hc3Rf bWFwLAogCWF1dG92YWNfdGFibGUgKnRhYiA9IE5VTEw7CiAJYm9vbAkJd3JhcGFyb3VuZDsKIAlB dXRvVmFjT3B0cyAqYXZvcHRzOworCUF1dG9WYWNUeXBlIHRyaWdnZXI7CiAKIAkvKiBmZXRjaCB0 aGUgcmVsYXRpb24ncyByZWxjYWNoZSBlbnRyeSAqLwogCWNsYXNzVHVwID0gU2VhcmNoU3lzQ2Fj aGVDb3B5MShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKQEAgLTI3OTAsOSArMjc5 NSwxMCBAQCB0YWJsZV9yZWNoZWNrX2F1dG92YWMoT2lkIHJlbGlkLCBIVEFCICp0YWJsZV90b2Fz dF9tYXAsCiAJCQlhdm9wdHMgPSAmaGVudHJ5LT5hcl9yZWxvcHRpb25zOwogCX0KIAotCXJlY2hl Y2tfcmVsYXRpb25fbmVlZHNfdmFjYW5hbHl6ZShyZWxpZCwgYXZvcHRzLCBjbGFzc0Zvcm0sCi0J CQkJCQkJCQkgIGVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsCi0JCQkJCQkJCQkg ICZkb3ZhY3V1bSwgJmRvYW5hbHl6ZSwgJndyYXBhcm91bmQpOworCXRyaWdnZXIgPSByZWNoZWNr X3JlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUocmVsaWQsIGF2b3B0cywgY2xhc3NGb3JtLAorCQkJ CQkJCQkJCQkJZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwKKwkJCQkJCQkJCQkJ CSZkb3ZhY3V1bSwgJmRvYW5hbHl6ZSwKKwkJCQkJCQkJCQkJCSZ3cmFwYXJvdW5kKTsKIAogCS8q IE9LLCBpdCBuZWVkcyBzb21ldGhpbmcgZG9uZSAqLwogCWlmIChkb2FuYWx5emUgfHwgZG92YWN1 dW0pCkBAIC0yODc4LDYgKzI4ODQsNyBAQCB0YWJsZV9yZWNoZWNrX2F1dG92YWMoT2lkIHJlbGlk LCBIVEFCICp0YWJsZV90b2FzdF9tYXAsCiAJCXRhYi0+YXRfcGFyYW1zLm11bHRpeGFjdF9mcmVl emVfbWluX2FnZSA9IG11bHRpeGFjdF9mcmVlemVfbWluX2FnZTsKIAkJdGFiLT5hdF9wYXJhbXMu bXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2UgPSBtdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZTsK IAkJdGFiLT5hdF9wYXJhbXMuaXNfd3JhcGFyb3VuZCA9IHdyYXBhcm91bmQ7CisJCXRhYi0+YXRf cGFyYW1zLnRyaWdnZXIgPSB0cmlnZ2VyOwogCQl0YWItPmF0X3BhcmFtcy5sb2dfbWluX2R1cmF0 aW9uID0gbG9nX21pbl9kdXJhdGlvbjsKIAkJdGFiLT5hdF92YWN1dW1fY29zdF9saW1pdCA9IHZh Y19jb3N0X2xpbWl0OwogCQl0YWItPmF0X3ZhY3V1bV9jb3N0X2RlbGF5ID0gdmFjX2Nvc3RfZGVs YXk7CkBAIC0yOTA2LDcgKzI5MTMsNyBAQCB0YWJsZV9yZWNoZWNrX2F1dG92YWMoT2lkIHJlbGlk LCBIVEFCICp0YWJsZV90b2FzdF9tYXAsCiAgKiBGZXRjaCB0aGUgcGdzdGF0IG9mIGEgcmVsYXRp b24gYW5kIHJlY2hlY2sgd2hldGhlciBhIHJlbGF0aW9uCiAgKiBuZWVkcyB0byBiZSB2YWN1dW1l ZCBvciBhbmFseXplZC4KICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBBdXRvVmFjVHlwZQogcmVj aGVja19yZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9pZCByZWxpZCwKIAkJCQkJCQkJICBBdXRv VmFjT3B0cyAqYXZvcHRzLAogCQkJCQkJCQkgIEZvcm1fcGdfY2xhc3MgY2xhc3NGb3JtLApAQCAt MjkxNiwyNiArMjkyMywyOSBAQCByZWNoZWNrX3JlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUoT2lk IHJlbGlkLAogCQkJCQkJCQkgIGJvb2wgKndyYXBhcm91bmQpCiB7CiAJUGdTdGF0X1N0YXRUYWJF bnRyeSAqdGFiZW50cnk7CisJQXV0b1ZhY1R5cGUgdHJpZ2dlcjsKIAogCS8qIGZldGNoIHRoZSBw Z3N0YXQgdGFibGUgZW50cnkgKi8KIAl0YWJlbnRyeSA9IHBnc3RhdF9mZXRjaF9zdGF0X3RhYmVu dHJ5X2V4dChjbGFzc0Zvcm0tPnJlbGlzc2hhcmVkLAogCQkJCQkJCQkJCQkgIHJlbGlkKTsKIAot CXJlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUocmVsaWQsIGF2b3B0cywgY2xhc3NGb3JtLCB0YWJl bnRyeSwKLQkJCQkJCQkgIGVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsCi0JCQkJ CQkJICBkb3ZhY3V1bSwgZG9hbmFseXplLCB3cmFwYXJvdW5kKTsKKwl0cmlnZ2VyID0gcmVsYXRp b25fbmVlZHNfdmFjYW5hbHl6ZShyZWxpZCwgYXZvcHRzLCBjbGFzc0Zvcm0sIHRhYmVudHJ5LAor CQkJCQkJCQkJCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsCisJCQkJCQkJCQkJ ZG92YWN1dW0sIGRvYW5hbHl6ZSwgd3JhcGFyb3VuZCk7CiAKIAkvKiBpZ25vcmUgQU5BTFlaRSBm b3IgdG9hc3QgdGFibGVzICovCiAJaWYgKGNsYXNzRm9ybS0+cmVsa2luZCA9PSBSRUxLSU5EX1RP QVNUVkFMVUUpCiAJCSpkb2FuYWx5emUgPSBmYWxzZTsKKworCXJldHVybiB0cmlnZ2VyOwogfQog CiAvKgogICogcmVsYXRpb25fbmVlZHNfdmFjYW5hbHl6ZQogICoKLSAqIENoZWNrIHdoZXRoZXIg YSByZWxhdGlvbiBuZWVkcyB0byBiZSB2YWN1dW1lZCBvciBhbmFseXplZDsgcmV0dXJuIGVhY2gg aW50bwotICogImRvdmFjdXVtIiBhbmQgImRvYW5hbHl6ZSIsIHJlc3BlY3RpdmVseS4gIEFsc28g cmV0dXJuIHdoZXRoZXIgdGhlIHZhY3V1bSBpcwotICogYmVpbmcgZm9yY2VkIGJlY2F1c2Ugb2Yg WGlkIG9yIG11bHRpeGFjdCB3cmFwYXJvdW5kLgorICogQ2hlY2sgd2hldGhlciBhIHJlbGF0aW9u IG5lZWRzIHRvIGJlIHZhY3V1bWVkIG9yIGFuYWx5emVkOyBzZXQgZWFjaCB1c2luZworICogImRv dmFjdXVtIiBhbmQgImRvYW5hbHl6ZSIsIHJlc3BlY3RpdmVseS4gIEFsc28gaW5kaWNhdGUgd2hl dGhlciB0aGUgdmFjdXVtCisgKiBtdXN0IHVzZSBzcGVjaWFsIGFudGl3cmFwYXJvdW5kIHByb3Rl Y3Rpb25zIGJ5IHNldHRpbmcgIndyYXBhcm91bmQiLgogICoKICAqIHJlbG9wdHMgaXMgYSBwb2lu dGVyIHRvIHRoZSBBdXRvVmFjT3B0cyBvcHRpb25zIChlaXRoZXIgZm9yIGl0c2VsZiBpbiB0aGUK ICAqIGNhc2Ugb2YgYSBwbGFpbiB0YWJsZSwgb3IgZm9yIGVpdGhlciBpdHNlbGYgb3IgaXRzIHBh cmVudCB0YWJsZSBpbiB0aGUgY2FzZQpAQCAtMjk1Myw5ICsyOTYzLDkgQEAgcmVjaGVja19yZWxh dGlvbl9uZWVkc192YWNhbmFseXplKE9pZCByZWxpZCwKICAqIHRoZSBudW1iZXIgb2YgdHVwbGVz IChib3RoIGxpdmUgYW5kIGRlYWQpIHRoYXQgdGhlcmUgd2VyZSBhcyBvZiB0aGUgbGFzdAogICog YW5hbHl6ZS4gIFRoaXMgaXMgYXN5bW1ldHJpYyB0byB0aGUgVkFDVVVNIGNhc2UuCiAgKgotICog V2UgYWxzbyBmb3JjZSB2YWN1dW0gaWYgdGhlIHRhYmxlJ3MgcmVsZnJvemVueGlkIGlzIG1vcmUg dGhhbiBmcmVlemVfbWF4X2FnZQotICogdHJhbnNhY3Rpb25zIGJhY2ssIGFuZCBpZiBpdHMgcmVs bWlubXhpZCBpcyBtb3JlIHRoYW4KLSAqIG11bHRpeGFjdF9mcmVlemVfbWF4X2FnZSBtdWx0aXhh Y3RzIGJhY2suCisgKiBXZSBhbHNvIGZvcmNlIHRhYmxlIGFnZSB2YWN1dW0gaWYgdGhlIHRhYmxl J3MgcmVsZnJvemVueGlkIGlzIG1vcmUgdGhhbgorICogZnJlZXplX21heF9hZ2UgdHJhbnNhY3Rp b25zIGJhY2ssIGFuZCBpZiBpdHMgcmVsbWlubXhpZCBpcyBtb3JlIHRoYW4KKyAqIG11bHRpeGFj dF9mcmVlemVfbWF4X2FnZSBtdWx0aXhhY3RzIGJhY2suICBUaGlzIGNhbm5vdCBiZSBkaXNhYmxl ZC4KICAqCiAgKiBBIHRhYmxlIHdob3NlIGF1dG92YWN1dW1fZW5hYmxlZCBvcHRpb24gaXMgZmFs c2UgaXMKICAqIGF1dG9tYXRpY2FsbHkgc2tpcHBlZCAodW5sZXNzIHdlIGhhdmUgdG8gdmFjdXVt IGl0IGR1ZSB0byBmcmVlemVfbWF4X2FnZSkuCkBAIC0yOTY2LDggKzI5NzYsMTcgQEAgcmVjaGVj a19yZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9pZCByZWxpZCwKICAqIGF1dG92YWN1dW1fdmFj dXVtX3RocmVzaG9sZCBHVUMgdmFyaWFibGUuICBTaW1pbGFybHksIGEgdmFjX3NjYWxlX2ZhY3Rv cgogICogdmFsdWUgPCAwIGlzIHN1YnN0aXR1dGVkIHdpdGggdGhlIHZhbHVlIG9mCiAgKiBhdXRv dmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3IgR1VDIHZhcmlhYmxlLiAgRGl0dG8gZm9yIGFuYWx5 emUuCisgKgorICogUmV0dXJuIHZhbHVlIGlzIHRoZSBjb25kaXRpb24gdGhhdCB0cmlnZ2VyZWQg YXV0b3ZhY3V1bSB0byBydW4gVkFDVVVNCisgKiAodXNlZnVsIG9ubHkgd2hlbiAqZG92YWN1dW0g aXMgc2V0KS4gIFRoZXJlIGNhbiBvbmx5IGJlIGV4YWN0bHkgb25lCisgKiB0cmlnZ2VyaW5nIGNv bmRpdGlvbiwgZXZlbiB3aGVuIG11bHRpcGxlIHRocmVzaG9sZHMgaGFwcGVuZWQgdG8gYmUgY3Jv c3NlZAorICogYXQgdGhlIHNhbWUgdGltZS4gIFdlIHByZWZlciB0byByZXR1cm4gInRhYmxlIFhJ RCBhZ2UiIGluIHRoZSBldmVudCBvZiBzdWNoCisgKiBhIGNvbmZsaWN0LCBhZnRlciB3aGljaCB3 ZSBwcmVmZXIgInRhYmxlIE1YSUQgYWdlIiBhcyB0aGUgY3JpdGVyaWEsIHRoZW4KKyAqICJkZWFk IHR1cGxlcyIsIHdpdGggImluc2VydGVkIHR1cGxlcyIgcGxhY2VkIGxhc3QuICBUaGVzZSBwcmVk ZWNlbmNlIHJ1bGVzCisgKiBhcmUgbGFyZ2VseSBhcmJpdHJhcnkuICBXZSBtdXN0IGF0IGxlYXN0 IGVuc3VyZSB0aGF0IGFsbCBhbnRpd3JhcGFyb3VuZAorICogYXV0b3ZhY3V1bXMgYXJlIGFkdmVy dGlzZWQgYXMgdHJpZ2dlcmVkIGJ5IHRhYmxlIFhJRC9NWElEIGFnZSBjcml0ZXJpYS4KICAqLwot c3RhdGljIHZvaWQKK3N0YXRpYyBBdXRvVmFjVHlwZQogcmVsYXRpb25fbmVlZHNfdmFjYW5hbHl6 ZShPaWQgcmVsaWQsCiAJCQkJCQkgIEF1dG9WYWNPcHRzICpyZWxvcHRzLAogCQkJCQkJICBGb3Jt X3BnX2NsYXNzIGNsYXNzRm9ybSwKQEAgLTI5NzgsNyArMjk5NywxMCBAQCByZWxhdGlvbl9uZWVk c192YWNhbmFseXplKE9pZCByZWxpZCwKIAkJCQkJCSAgYm9vbCAqZG9hbmFseXplLAogCQkJCQkJ ICBib29sICp3cmFwYXJvdW5kKQogewotCWJvb2wJCWZvcmNlX3ZhY3V1bTsKKwlUcmFuc2FjdGlv bklkIHJlbGZyb3plbnhpZCA9IGNsYXNzRm9ybS0+cmVsZnJvemVueGlkOworCU11bHRpWGFjdElk IHJlbG1pbm14aWQgPSBjbGFzc0Zvcm0tPnJlbG1pbm14aWQ7CisJQXV0b1ZhY1R5cGUgdHJpZ2dl ciA9IEFVVE9WQUNVVU1fTk9ORTsKKwlib29sCQl0YWJsZWFnZXZhYzsKIAlib29sCQlhdl9lbmFi bGVkOwogCWZsb2F0NAkJcmVsdHVwbGVzOwkJLyogcGdfY2xhc3MucmVsdHVwbGVzICovCiAKQEAg LTMwMDMsOCArMzAyNSw4IEBAIHJlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUoT2lkIHJlbGlkLAog CS8qIGZyZWV6ZSBwYXJhbWV0ZXJzICovCiAJaW50CQkJZnJlZXplX21heF9hZ2U7CiAJaW50CQkJ bXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwotCVRyYW5zYWN0aW9uSWQgeGlkRm9yY2VMaW1pdDsK LQlNdWx0aVhhY3RJZCBtdWx0aUZvcmNlTGltaXQ7CisJVHJhbnNhY3Rpb25JZCB4aWRBZ2VMaW1p dDsKKwlNdWx0aVhhY3RJZCBtdWx0aUFnZUxpbWl0OwogCiAJQXNzZXJ0KGNsYXNzRm9ybSAhPSBO VUxMKTsKIAlBc3NlcnQoT2lkSXNWYWxpZChyZWxpZCkpOwpAQCAtMzA1MSw0MCArMzA3Myw4OSBA QCByZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9pZCByZWxpZCwKIAogCWF2X2VuYWJsZWQgPSAo cmVsb3B0cyA/IHJlbG9wdHMtPmVuYWJsZWQgOiB0cnVlKTsKIAotCS8qIEZvcmNlIHZhY3V1bSBp ZiB0YWJsZSBpcyBhdCByaXNrIG9mIHdyYXBhcm91bmQgKi8KLQl4aWRGb3JjZUxpbWl0ID0gcmVj ZW50WGlkIC0gZnJlZXplX21heF9hZ2U7Ci0JaWYgKHhpZEZvcmNlTGltaXQgPCBGaXJzdE5vcm1h bFRyYW5zYWN0aW9uSWQpCi0JCXhpZEZvcmNlTGltaXQgLT0gRmlyc3ROb3JtYWxUcmFuc2FjdGlv bklkOwotCWZvcmNlX3ZhY3V1bSA9IChUcmFuc2FjdGlvbklkSXNOb3JtYWwoY2xhc3NGb3JtLT5y ZWxmcm96ZW54aWQpICYmCi0JCQkJCVRyYW5zYWN0aW9uSWRQcmVjZWRlcyhjbGFzc0Zvcm0tPnJl bGZyb3plbnhpZCwKLQkJCQkJCQkJCQkgIHhpZEZvcmNlTGltaXQpKTsKLQlpZiAoIWZvcmNlX3Zh Y3V1bSkKLQl7Ci0JCW11bHRpRm9yY2VMaW1pdCA9IHJlY2VudE11bHRpIC0gbXVsdGl4YWN0X2Zy ZWV6ZV9tYXhfYWdlOwotCQlpZiAobXVsdGlGb3JjZUxpbWl0IDwgRmlyc3RNdWx0aVhhY3RJZCkK LQkJCW11bHRpRm9yY2VMaW1pdCAtPSBGaXJzdE11bHRpWGFjdElkOwotCQlmb3JjZV92YWN1dW0g PSBNdWx0aVhhY3RJZElzVmFsaWQoY2xhc3NGb3JtLT5yZWxtaW5teGlkKSAmJgotCQkJTXVsdGlY YWN0SWRQcmVjZWRlcyhjbGFzc0Zvcm0tPnJlbG1pbm14aWQsIG11bHRpRm9yY2VMaW1pdCk7Ci0J fQotCSp3cmFwYXJvdW5kID0gZm9yY2VfdmFjdXVtOworCS8qIEZvcmNlIHZhY3V1bSBpZiB0YWJs ZSBhZ2UgZXhjZWVkcyBjdXRvZmYgKi8KKwl4aWRBZ2VMaW1pdCA9IHJlY2VudFhpZCAtIGZyZWV6 ZV9tYXhfYWdlOworCWlmICh4aWRBZ2VMaW1pdCA8IEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZCkK KwkJeGlkQWdlTGltaXQgLT0gRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkOworCW11bHRpQWdlTGlt aXQgPSByZWNlbnRNdWx0aSAtIG11bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKKwlpZiAobXVsdGlB Z2VMaW1pdCA8IEZpcnN0TXVsdGlYYWN0SWQpCisJCW11bHRpQWdlTGltaXQgLT0gRmlyc3RNdWx0 aVhhY3RJZDsKIAotCS8qIFVzZXIgZGlzYWJsZWQgaXQgaW4gcGdfY2xhc3MucmVsb3B0aW9ucz8g IChCdXQgaWdub3JlIGlmIGF0IHJpc2spICovCi0JaWYgKCFhdl9lbmFibGVkICYmICFmb3JjZV92 YWN1dW0pCisJdGFibGVhZ2V2YWMgPSB0cnVlOworCSp3cmFwYXJvdW5kID0gZmFsc2U7CisJLyog U2VlIGhlYWRlciBjb21tZW50cyBhYm91dCB0cmlnZ2VyIHByZWNlZGVuY2UgKi8KKwlpZiAoVHJh bnNhY3Rpb25JZElzTm9ybWFsKHJlbGZyb3plbnhpZCkgJiYKKwkJVHJhbnNhY3Rpb25JZFByZWNl ZGVzKHJlbGZyb3plbnhpZCwgeGlkQWdlTGltaXQpKQorCQl0cmlnZ2VyID0gQVVUT1ZBQ1VVTV9U QUJMRV9YSURfQUdFOworCWVsc2UgaWYgKE11bHRpWGFjdElkSXNWYWxpZChyZWxtaW5teGlkKSAm JgorCQkJIE11bHRpWGFjdElkUHJlY2VkZXMocmVsbWlubXhpZCwgbXVsdGlBZ2VMaW1pdCkpCisJ CXRyaWdnZXIgPSBBVVRPVkFDVVVNX1RBQkxFX01YSURfQUdFOworCWVsc2UKKwkJdGFibGVhZ2V2 YWMgPSBmYWxzZTsKKworCS8qIFVzZXIgZGlzYWJsZWQgbm9uLXRhYmxlLWFnZSBhdXRvdmFjdXVt cyBpbiBwZ19jbGFzcy5yZWxvcHRpb25zPyAqLworCWlmICghYXZfZW5hYmxlZCAmJiAhdGFibGVh Z2V2YWMpCiAJewogCQkqZG9hbmFseXplID0gZmFsc2U7CiAJCSpkb3ZhY3V1bSA9IGZhbHNlOwot CQlyZXR1cm47CisJCXJldHVybiBBVVRPVkFDVVVNX05PTkU7CisJfQorCisJLyoKKwkgKiBJZiB3 ZSdyZSBmb3JjaW5nIHRhYmxlIGFnZSBhdXRvdmFjdXVtLCBhcmUgd2UgYXQgdGhlIHBvaW50IHdo ZXJlIGl0IGhhcworCSAqIHRvIGJlIGFuIGFudGl3cmFwYXJvdW5kIGF1dG92YWN1dW0/CisJICoK KwkgKiBBbnRpd3JhcGFyb3VuZCBhdXRvdmFjdXVtcyBhcmUgZGlmZmVyZW50IHRvIG90aGVyIGF1 dG92YWN1dW1zIGluIHRoYXQKKwkgKiB0aGV5IGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNhbmNl bGVkLCBhbmQgYXJlIGRlc2NyaWJlZCBkaXJlY3RseSBpbgorCSAqIHBnX3N0YXRfYWN0aXZpdHku ICBUaGV5J3JlIHVzZWQgb25seSBpbiBlbWVyZ2VuY2llcywgd2hlbiBubyBlYXJsaWVyCisJICog c3RhbmRhcmQgdGFibGUgYWdlIGF1dG92YWN1dW0gY291bGQgY29tcGxldGUgYW5kIGFkdmFuY2Ug dGhlIHRhYmxlJ3MKKwkgKiByZWxmcm96ZW54aWQvcmVsbWlubXhpZCwgZGVzcGl0ZSBhbiBhbXBs ZSB0YWJsZSBhZ2UgYXV0b3ZhY3V1bSB3aW5kb3cuCisJICovCisJaWYgKHRhYmxlYWdldmFjKQor CXsKKwkJLyoKKwkJICogRG91YmxlIHRoZSB0YWJsZSBhZ2UgdG8gZGV0ZXJtaW5lIHRoZSBjdXRv ZmYgZm9yIGFudGl3cmFwYXJvdW5kLgorCQkgKiBUaGlzIGdpdmVzIHN0YW5kYXJkIGF1dG92YWN1 dW1pbmcgcGxlbnR5IG9mIHNwYWNlIHRvIHN1Y2NlZWQsIHNvIHdlCisJCSAqIGNhbiBiZSByZWxh dGl2ZWx5IGNvbmZpZGVudCB0aGF0IHRoYXQgaGFzbid0IGFuZCB3b24ndCB3b3JrIG91dCBieQor CQkgKiB0aGUgdGltZSBhbnRpd3JhcGFyb3VuZCBtb2RlIGZpbmFsbHkgc3RhcnRzIHRvIHRyaWdn ZXIuCisJCSAqCisJCSAqIERvbid0IGV2ZXIgcHV0IG9mZiBhbnRpd3JhcGFyb3VuZCBhdXRvdmFj dXVtaW5nIHBhc3QgdGhlIHBvaW50CisJCSAqIHdoZXJlIHJlbGZyb3plbnhpZCBoYXMgYWxyZWFk eSBhdHRhaW5lZCBhbiBhZ2UgPj0gMSBiaWxsaW9uIFhJRHMsCisJCSAqIG9yIHdoZXJlIHJlbG1p bm14aWQgaGFzIGFscmVhZHkgYXR0YWluZWQgYW4gYWdlID49IDEgYmlsbGlvbiBNWElEcy4KKwkJ ICovCisJCWlmIChmcmVlemVfbWF4X2FnZSA8IEFOVElXUkFQQVJPVU5EX01BWF9BR0UpCisJCQlm cmVlemVfbWF4X2FnZSAqPSAyOworCQlmcmVlemVfbWF4X2FnZSA9IE1pbihmcmVlemVfbWF4X2Fn ZSwgQU5USVdSQVBBUk9VTkRfTUFYX0FHRSk7CisJCWlmIChtdWx0aXhhY3RfZnJlZXplX21heF9h Z2UgPCBBTlRJV1JBUEFST1VORF9NQVhfQUdFKQorCQkJbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdl ICo9IDI7CisJCW11bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IE1pbihtdWx0aXhhY3RfZnJlZXpl X21heF9hZ2UsCisJCQkJCQkJCQkgICBBTlRJV1JBUEFST1VORF9NQVhfQUdFKTsKKworCQkvKiBT aW1pbGFyIHRlc3QgdG8gYmVmb3JlLCBidXQgd2l0aCBkb3VibGUgdGhlIG1heCBhZ2UgKi8KKwkJ eGlkQWdlTGltaXQgPSByZWNlbnRYaWQgLSBmcmVlemVfbWF4X2FnZTsKKwkJaWYgKHhpZEFnZUxp bWl0IDwgRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkKQorCQkJeGlkQWdlTGltaXQgLT0gRmlyc3RO b3JtYWxUcmFuc2FjdGlvbklkOworCQltdWx0aUFnZUxpbWl0ID0gcmVjZW50TXVsdGkgLSBtdWx0 aXhhY3RfZnJlZXplX21heF9hZ2U7CisJCWlmIChtdWx0aUFnZUxpbWl0IDwgRmlyc3RNdWx0aVhh Y3RJZCkKKwkJCW11bHRpQWdlTGltaXQgLT0gRmlyc3RNdWx0aVhhY3RJZDsKKwkJKndyYXBhcm91 bmQgPSAoKFRyYW5zYWN0aW9uSWRJc05vcm1hbChyZWxmcm96ZW54aWQpICYmCisJCQkJCQlUcmFu c2FjdGlvbklkUHJlY2VkZXMocmVsZnJvemVueGlkLCB4aWRBZ2VMaW1pdCkpIHx8CisJCQkJCSAg IChNdWx0aVhhY3RJZElzVmFsaWQocmVsbWlubXhpZCkgJiYKKwkJCQkJCU11bHRpWGFjdElkUHJl Y2VkZXMocmVsbWlubXhpZCwgbXVsdGlBZ2VMaW1pdCkpKTsKIAl9CiAKIAkvKgogCSAqIElmIHdl IGZvdW5kIHN0YXRzIGZvciB0aGUgdGFibGUsIGFuZCBhdXRvdmFjdXVtIGlzIGN1cnJlbnRseSBl bmFibGVkLAogCSAqIG1ha2UgYSB0aHJlc2hvbGQtYmFzZWQgZGVjaXNpb24gd2hldGhlciB0byB2 YWN1dW0gYW5kL29yIGFuYWx5emUuICBJZgotCSAqIGF1dG92YWN1dW0gaXMgY3VycmVudGx5IGRp c2FibGVkLCB3ZSBtdXN0IGJlIGhlcmUgZm9yIGFudGktd3JhcGFyb3VuZAorCSAqIGF1dG92YWN1 dW0gaXMgY3VycmVudGx5IGRpc2FibGVkLCB3ZSBtdXN0IGJlIGhlcmUgZm9yIGZvcmNlZCB0YWJs ZSBhZ2UKIAkgKiB2YWN1dW1pbmcgb25seSwgc28gZG9uJ3QgdmFjdXVtIChvciBhbmFseXplKSBh bnl0aGluZyB0aGF0J3Mgbm90IGJlaW5nCiAJICogZm9yY2VkLgogCSAqLwogCWlmIChQb2ludGVy SXNWYWxpZCh0YWJlbnRyeSkgJiYgQXV0b1ZhY3V1bWluZ0FjdGl2ZSgpKQogCXsKKwkJYm9vbAkJ ZGVhZHR1cHZhYywKKwkJCQkJaW5zZXJ0dHVwdmFjOworCiAJCXJlbHR1cGxlcyA9IGNsYXNzRm9y bS0+cmVsdHVwbGVzOwogCQl2YWN0dXBsZXMgPSB0YWJlbnRyeS0+ZGVhZF90dXBsZXM7CiAJCWlu c3R1cGxlcyA9IHRhYmVudHJ5LT5pbnNfc2luY2VfdmFjdXVtOwpAQCAtMzExMiwyNSArMzE4Mywz OSBAQCByZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9pZCByZWxpZCwKIAkJCQkgTmFtZVN0cihj bGFzc0Zvcm0tPnJlbG5hbWUpLAogCQkJCSB2YWN0dXBsZXMsIHZhY3RocmVzaCwgYW5sdHVwbGVz LCBhbmx0aHJlc2gpOwogCisJCWRlYWR0dXB2YWMgPSAodmFjdHVwbGVzID4gdmFjdGhyZXNoKTsK KwkJaW5zZXJ0dHVwdmFjID0gKHZhY19pbnNfYmFzZV90aHJlc2ggPj0gMCAmJiBpbnN0dXBsZXMg PiB2YWNpbnN0aHJlc2gpOworCQkvKiBTZWUgaGVhZGVyIGNvbW1lbnRzIGFib3V0IHRyaWdnZXIg cHJlY2VkZW5jZSAqLworCQlpZiAoIXRhYmxlYWdldmFjKQorCQl7CisJCQlpZiAoZGVhZHR1cHZh YykKKwkJCQl0cmlnZ2VyID0gQVVUT1ZBQ1VVTV9ERUFEX1RVUExFUzsKKwkJCWVsc2UgaWYgKGlu c2VydHR1cHZhYykKKwkJCQl0cmlnZ2VyID0gQVVUT1ZBQ1VVTV9JTlNFUlRFRF9UVVBMRVM7CisJ CX0KKwogCQkvKiBEZXRlcm1pbmUgaWYgdGhpcyB0YWJsZSBuZWVkcyB2YWN1dW0gb3IgYW5hbHl6 ZS4gKi8KLQkJKmRvdmFjdXVtID0gZm9yY2VfdmFjdXVtIHx8ICh2YWN0dXBsZXMgPiB2YWN0aHJl c2gpIHx8Ci0JCQkodmFjX2luc19iYXNlX3RocmVzaCA+PSAwICYmIGluc3R1cGxlcyA+IHZhY2lu c3RocmVzaCk7CisJCSpkb3ZhY3V1bSA9ICh0YWJsZWFnZXZhYyB8fCBkZWFkdHVwdmFjIHx8IGlu c2VydHR1cHZhYyk7CiAJCSpkb2FuYWx5emUgPSAoYW5sdHVwbGVzID4gYW5sdGhyZXNoKTsKIAl9 CiAJZWxzZQogCXsKIAkJLyoKIAkJICogU2tpcCBhIHRhYmxlIG5vdCBmb3VuZCBpbiBzdGF0IGhh c2gsIHVubGVzcyB3ZSBoYXZlIHRvIGZvcmNlIHZhY3V1bQotCQkgKiBmb3IgYW50aS13cmFwIHB1 cnBvc2VzLiAgSWYgaXQncyBub3QgYWN0ZWQgdXBvbiwgdGhlcmUncyBubyBuZWVkIHRvCisJCSAq IGZvciB0YWJsZSBhZ2UgcHVycG9zZXMuICBJZiBpdCdzIG5vdCBhY3RlZCB1cG9uLCB0aGVyZSdz IG5vIG5lZWQgdG8KIAkJICogdmFjdXVtIGl0LgogCQkgKi8KLQkJKmRvdmFjdXVtID0gZm9yY2Vf dmFjdXVtOworCQkqZG92YWN1dW0gPSB0YWJsZWFnZXZhYzsKIAkJKmRvYW5hbHl6ZSA9IGZhbHNl OwogCX0KIAogCS8qIEFOQUxZWkUgcmVmdXNlcyB0byB3b3JrIHdpdGggcGdfc3RhdGlzdGljICov CiAJaWYgKHJlbGlkID09IFN0YXRpc3RpY1JlbGF0aW9uSWQpCiAJCSpkb2FuYWx5emUgPSBmYWxz ZTsKKworCUFzc2VydCgodHJpZ2dlciAhPSBBVVRPVkFDVVVNX05PTkUpID09ICpkb3ZhY3V1bSk7 CisKKwlyZXR1cm4gdHJpZ2dlcjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9wcm9jLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4 IDAwZDI2ZGMwZi4uZGM2NmI5YWYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTEzODQs OCArMTM4NCw4IEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBs b2NrTWV0aG9kVGFibGUpCiAJCQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwogCiAJCQkv KgotCQkJICogT25seSBkbyBpdCBpZiB0aGUgd29ya2VyIGlzIG5vdCB3b3JraW5nIHRvIHByb3Rl Y3QgYWdhaW5zdCBYaWQKLQkJCSAqIHdyYXBhcm91bmQuCisJCQkgKiBPbmx5IGRvIGl0IGlmIHRo ZSB3b3JrZXIgaXMgbm90IGFuIGFudGl3cmFwYXJvdW5kIGF1dG92YWN1dW0sIGEKKwkJCSAqIHNw ZWNpYWwgdHlwZSBvZiBhdXRvdmFjdXVtIHRoYXQgaXMgb25seSB1c2VkIGluIGVtZXJnZW5jaWVz CiAJCQkgKi8KIAkJCWlmICgoc3RhdHVzRmxhZ3MgJiBQUk9DX0lTX0FVVE9WQUNVVU0pICYmCiAJ CQkJIShzdGF0dXNGbGFncyAmIFBST0NfVkFDVVVNX0ZPUl9XUkFQQVJPVU5EKSkKLS0gCjIuMzgu MQoK --0000000000005cc88905f1cafbf7--