From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08AEEC433E3 for ; Wed, 1 Jul 2020 08:41:30 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DC29220747 for ; Wed, 1 Jul 2020 08:41:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DC29220747 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2E8EF6E880; Wed, 1 Jul 2020 08:41:17 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id A62196E83B for ; Wed, 1 Jul 2020 08:41:13 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from build.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 21671951-1500050 for multiple; Wed, 01 Jul 2020 09:41:02 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Wed, 1 Jul 2020 09:40:43 +0100 Message-Id: <20200701084053.6086-23-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200701084053.6086-1-chris@chris-wilson.co.uk> References: <20200701084053.6086-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 23/33] drm/i915: Fair low-latency scheduling X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGhlIGZpcnN0ICJzY2hlZHVsZXIiIHdhcyBhIHRvcG9ncmFwaGljYWwgc29ydGluZyBvZiByZXF1 ZXN0cyBpbnRvCnByaW9yaXR5IG9yZGVyLiBUaGUgZXhlY3V0aW9uIG9yZGVyIHdhcyBkZXRlcm1p bmlzdGljLCB0aGUgZWFybGllc3QKc3VibWl0dGVkLCBoaWdoZXN0IHByaW9yaXR5IHJlcXVlc3Qg d291bGQgYmUgZXhlY3V0ZWQgZmlyc3QuIFByaW9yaXR5CmluaGVyaXRlZCBlbnN1cmVkIHRoYXQg aW52ZXJzaW9ucyB3ZXJlIGtlcHQgYXQgYmF5LCBhbmQgYWxsb3dlZCB1cyB0bwpkeW5hbWljYWxs eSBib29zdCBwcmlvcml0aWVzIChlLmcuIGZvciBpbnRlcmFjdGl2ZSBwYWdlZmxpcHMpLgoKVGhl IG1pbmltYWxpc3RpYyB0aW1lc2xpY2luZyBzY2hlbWUgd2FzIGFuIGF0dGVtcHQgdG8gaW50cm9k dWNlIGZhaXJuZXNzCmJldHdlZW4gbG9uZyBydW5uaW5nIHJlcXVlc3RzLCBieSBldmljdGluZyB0 aGUgYWN0aXZlIHJlcXVlc3QgYXQgdGhlIGVuZApvZiBhIHRpbWVzbGljZSBhbmQgbW92aW5nIGl0 IHRvIHRoZSBiYWNrIG9mIGl0cyBwcmlvcml0eSBxdWV1ZSAod2hpbGUKZW5zdXJpbmcgdGhhdCBk ZXBlbmRlbmNpZXMgd2VyZSBrZXB0IGluIG9yZGVyKS4gRm9yIHNob3J0IHJ1bm5pbmcKcmVxdWVz dHMgZnJvbSBtYW55IGNsaWVudHMgb2YgZXF1YWwgcHJpb3JpdHksIHRoZSBzY2hlbWUgaXMgc3Rp bGwgdmVyeQptdWNoIEZJRk8gc3VibWlzc2lvbiBvcmRlcmluZywgYW5kIGFzIHVuZmFpciBhcyBi ZWZvcmUuCgpUbyBpbXBvc2UgZmFpcm5lc3MsIHdlIG5lZWQgYW4gZXh0ZXJuYWwgbWV0cmljIHRo YXQgZW5zdXJlcyB0aGF0IGNsaWVudHMKYXJlIGludGVycGVyc2VkLCB3ZSBkb24ndCBleGVjdXRl IG9uZSBsb25nIGNoYWluIGZyb20gY2xpZW50IEEgYmVmb3JlCmV4ZWN1dGluZyBhbnkgb2YgY2xp ZW50IEIuIFRoaXMgY291bGQgYmUgaW1wb3NlZCBieSB0aGUgY2xpZW50cyBieSB1c2luZwphIGZl bmNlcyBiYXNlZCBvbiBhbiBleHRlcm5hbCBjbG9jaywgdGhhdCBpcyB0aGV5IG9ubHkgc3VibWl0 IHdvcmsgZm9yIGEKImZyYW1lIiBhdCBmcmFtZS1pbnRlcnZhbCwgaW5zdGVhZCBvZiBzdWJtaXR0 aW5nIGFzIG11Y2ggd29yayBhcyB0aGV5CmFyZSBhYmxlIHRvLiBUaGUgc3RhbmRhcmQgU3dhcEJ1 ZmZlcnMgYXBwcm9hY2ggaXMgYWtpbiB0byBkb3VibGUKYnVmZmVycmluZywgd2hlcmUgYXMgb25l IGZyYW1lIGlzIGJlaW5nIGV4ZWN1dGVkLCB0aGUgbmV4dCBpcyBiZWluZwpzdWJtaXR0ZWQsIHN1 Y2ggdGhhdCB0aGVyZSBpcyBhbHdheXMgYSBtYXhpbXVtIG9mIHR3byBmcmFtZXMgcGVyIGNsaWVu dAppbiB0aGUgcGlwZWxpbmUuIEV2ZW4gdGhpcyBzY2hlbWUgZXhoaWJpdHMgdW5mYWlybmVzcyB1 bmRlciBsb2FkIGFzIGEKc2luZ2xlIGNsaWVudCB3aWxsIGV4ZWN1dGUgdHdvIGZyYW1lcyBiYWNr IHRvIGJhY2sgYmVmb3JlIHRoZSBuZXh0LCBhbmQKd2l0aCBlbm91Z2ggY2xpZW50cywgZGVhZGxp bmVzIHdpbGwgYmUgbWlzc2VkLgoKVGhlIGlkZWEgaW50cm9kdWNlZCBieSBCRlMvTXVRU1MgaXMg dGhhdCBmYWlybmVzcyBpcyBpbnRyb2R1Y2VkIGJ5Cm1ldGVyaW5nIHdpdGggYW4gZXh0ZXJuYWwg Y2xvY2suIEV2ZXJ5IHJlcXVlc3QsIHdoZW4gaXQgYmVjb21lcyByZWFkeSB0bwpleGVjdXRlIGlz IGFzc2lnbmVkIGEgdmlydHVhbCBkZWFkbGluZSwgYW5kIGV4ZWN1dGlvbiBvcmRlciBpcyB0aGVu CmRldGVybWluZWQgYnkgZWFybGllc3QgZGVhZGxpbmUuIFByaW9yaXR5IGlzIHVzZWQgYXMgYSBo aW50LCByYXRoZXIgdGhhbgpzdHJpY3Qgb3JkZXJpbmcsIHdoZXJlIGhpZ2ggcHJpb3JpdHkgcmVx dWVzdHMgaGF2ZSBlYXJsaWVyIGRlYWRsaW5lcywKYnV0IG5vdCBuZWNlc3NhcmlseSBlYXJsaWVy IHRoYW4gb3V0c3RhbmRpbmcgd29yay4gVGh1cyB3b3JrIGlzIGV4ZWN1dGVkCmluIG9yZGVyIG9m ICdyZWFkaW5lc3MnLCB3aXRoIHRpbWVzbGljaW5nIHRvIGRlbW90ZSBsb25nIHJ1bm5pbmcgd29y ay4KClRoZSBBY2hpbGxlJ3MgaGVlbCBvZiB0aGlzIHNjaGVkdWxlciBpcyBpdHMgc3Ryb25nIHBy ZWZlcmVuY2UgZm9yCmxvdy1sYXRlbmN5IGFuZCBmYXZvdXJpbmcgb2YgbmV3IHF1ZXVlcy4gV2hl cmVhcyBpdCB3YXMgZWFzeSB0byBkb21pbmF0ZQp0aGUgb2xkIHNjaGVkdWxlciBieSBmbG9vZGlu ZyBpdCB3aXRoIG1hbnkgcmVxdWVzdHMgb3ZlciBhIHNob3J0IHBlcmlvZApvZiB0aW1lLCB0aGUg bmV3IHNjaGVkdWxlciBjYW4gYmUgZG9taW5hdGVkIGJ5IGEgJ3N5bmNocm9ub3VzJyBjbGllbnQK dGhhdCB3YWl0cyBmb3IgZWFjaCBvZiBpdHMgcmVxdWVzdHMgdG8gY29tcGxldGUgYmVmb3JlIHN1 Ym1pdHRpbmcgdGhlCm5leHQuIEFzIHN1Y2ggYSBjbGllbnQgaGFzIG5vIGhpc3RvcnksIGl0IGlz IGFsd2F5cyBjb25zaWRlcmVkCnJlYWR5LXRvLXJ1biBhbmQgcmVjZWl2ZXMgYW4gZWFybGllciBk ZWFkbGluZSB0aGFuIHRoZSBsb25nIHJ1bm5pbmcKcmVxdWVzdHMuCgpUbyBjaGVjayB0aGUgaW1w YWN0IG9uIHRocm91Z2hwdXQgKG9mdGVuIHRoZSBkb3duZmFsbCBvZiBsYXRlbmN5CnNlbnNpdGl2 ZSBzY2hlZHVsZXJzKSwgd2UgdXNlZCBnZW1fd3NpbSB0byBzaW11bGF0ZSB2YXJpb3VzIHRyYW5z Y29kZQp3b3JrbG9hZHMgd2l0aCBkaWZmZXJlbnQgbG9hZCBiYWxhbmNlcnMsIGFuZCB2YXJ5aW5n IHRoZSBudW1iZXIgb2YKY29tcGV0aW5nIFtoZXRlcm9nZW5vdXNdIGNsaWVudHMuCgorbUItLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNk YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjLmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi5hYSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi0tLS4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLS4tLSstLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAg ICAgICAgICAgICAgICAgIC5jLi0uLSsrKy4gIGIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8CnwgICAgICAgICAgICAgICBiICAgIGJiLmQtYy0rLS0rKysuYWFiIGFhICAgIGIgYiAg ICAgICAgICAgICAgICAgICAgICAgfAp8YiAgYiAgIGIgICBiICBiLiAgYiAuLi0tLSsrKy0rKysr Ky4uLi5hLiBiLiBiIGIgICBiICAgICAgIGIgICAgYiAgICAgYnwKMSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CjIg ICAgICAgICAgICAgICAgICAgICAgICAgfF9fX0FNX19fX3wgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAozICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxBX198ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKNCAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8TUFffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwpDbGllbnRzICAgTWluICAgICAgIE1heCAgICAgTWVkaWFuICAgICAgICAgICBBdmcgICAg ICAgIFN0ZGRldgoxICAgICAgIC04LjIwICAgICAgIDUuNCAgICAgLTAuMDQ1ICAgICAgLTAuMDIz NzUgICAwLjA5NDcyMjEzNAoyICAgICAgLTE1Ljk2ICAgICAxOS4yOCAgICAgIC0wLjY0ICAgICAg ICAgLTEuMDUgICAgIDIuMjQyODA3Ngo0ICAgICAgIC01LjExICAgICAgMi45NSAgICAgIC0xLjE1 ICAgIC0xLjA2ODMzMzMgICAgMC43MjM4MjY1MQo4ICAgICAgIC01LjYzICAgICAgMS44NSAgICAg LTAuOTA1ICAgLTAuODcxMjI0NDkgICAgMC43MzM5MDk3MQoKVGhlIGltcGFjdCB3YXMgb24gYXZl cmFnZSAxJSB1bmRlciBjb250ZW50aW9uIGR1ZSB0byB0aGUgY2hhbmdlIGluIGNvbnRleHQKZXhl Y3V0aW9uIG9yZGVyIGFuZCBudW1iZXIgb2YgY29udGV4dCBzd2l0Y2hlcy4KClNpZ25lZC1vZmYt Ynk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jICAgICB8ICAxMiArLQogLi4uL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfaGVhcnRiZWF0LmMgIHwgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9wbS5jICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmggIHwgIDE0IC0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2xyYy5jICAgICAgICAgICB8IDIwNCArKysrKy0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYyAgfCAgIDUgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jICAgICAgICB8ICA0MSArLQogLi4uL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIHwgICA2ICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3ByaW9saXN0X3R5cGVzLmggICAgfCAgIDcgKy0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jICAgICAgICAgfCAzNDkgKysrKysrKysrKysrKy0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oICAgICAgICAgfCAgMjQgKy0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyX3R5cGVzLmggICB8ICAxNyArCiAu Li4vZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCAgfCAgIDEgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jIHwgICAxICsKIC4uLi9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfc2NoZWR1bGVyLmMgICB8ICA0OSArKysKIDE2IGZp bGVzIGNoYW5nZWQsIDQ3OCBpbnNlcnRpb25zKCspLCAyNTggZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfc2NoZWR1bGVy LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3Mu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCmluZGV4IDQwMjM3 YTllMTM5Yi4uNDEzZDgzOTNiOTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9l bmdpbmVfY3MuYwpAQCAtNTEzLDcgKzUxMyw2IEBAIHZvaWQgaW50ZWxfZW5naW5lX2luaXRfZXhl Y2xpc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlleGVjbGlzdHMtPmFjdGl2 ZSA9CiAJCW1lbXNldChleGVjbGlzdHMtPmluZmxpZ2h0LCAwLCBzaXplb2YoZXhlY2xpc3RzLT5p bmZsaWdodCkpOwogCi0JZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gSU5UX01JTjsK IAlleGVjbGlzdHMtPnF1ZXVlID0gUkJfUk9PVF9DQUNIRUQ7CiB9CiAKQEAgLTExOTksMTQgKzEx OTgsMTUgQEAgYm9vbCBpbnRlbF9lbmdpbmVfY2FuX3N0b3JlX2R3b3JkKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfc2NoZWRfYXR0cihj b25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyICphdHRyLAotCQkJICAgIGNoYXIgKmJ1ZiwgaW50 IHgsIGludCBsZW4pCitzdGF0aWMgaW50IHByaW50X3NjaGVkKGNvbnN0IHN0cnVjdCBpOTE1X3Nj aGVkX25vZGUgKm5vZGUsCisJCSAgICAgICBjaGFyICpidWYsIGludCB4LCBpbnQgbGVuKQogewot CWlmIChhdHRyLT5wcmlvcml0eSA9PSBJOTE1X1BSSU9SSVRZX0lOVkFMSUQpCisJaWYgKG5vZGUt PmF0dHIucHJpb3JpdHkgPT0gSTkxNV9QUklPUklUWV9JTlZBTElEKQogCQlyZXR1cm4geDsKIAog CXggKz0gc25wcmludGYoYnVmICsgeCwgbGVuIC0geCwKLQkJICAgICAgIiBwcmlvPSVkIiwgYXR0 ci0+cHJpb3JpdHkpOworCQkgICAgICAiIHByaW89JWQsIGRsPSVsbHUiLAorCQkgICAgICBub2Rl LT5hdHRyLnByaW9yaXR5LCBub2RlLT5kZWFkbGluZSk7CiAKIAlyZXR1cm4geDsKIH0KQEAgLTEy MTksNyArMTIxOSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3JlcXVlc3Qoc3RydWN0IGRybV9wcmlu dGVyICptLAogCWNoYXIgYnVmWzgwXSA9ICIiOwogCWludCB4ID0gMDsKIAotCXggPSBwcmludF9z Y2hlZF9hdHRyKCZycS0+c2NoZWQuYXR0ciwgYnVmLCB4LCBzaXplb2YoYnVmKSk7CisJeCA9IHBy aW50X3NjaGVkKCZycS0+c2NoZWQsIGJ1ZiwgeCwgc2l6ZW9mKGJ1ZikpOwogCiAJZHJtX3ByaW50 ZihtLCAiJXMgJWxseDolbGx4JXMlcyAlcyBAICVkbXM6ICVzXG4iLAogCQkgICBwcmVmaXgsCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfaGVhcnRiZWF0 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfaGVhcnRiZWF0LmMKaW5k ZXggZDExOWU0ZTEyNzU1Li5kNjZiZmEyMWUwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2VuZ2luZV9oZWFydGJlYXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9lbmdpbmVfaGVhcnRiZWF0LmMKQEAgLTIzNSw2ICsyMzUsNyBAQCBpbnQg aW50ZWxfZW5naW5lX3B1bHNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJZ290 byBvdXRfdW5sb2NrOwogCX0KIAorCXJxLT5zY2hlZC5kZWFkbGluZSA9IDA7CiAJX19zZXRfYml0 KEk5MTVfRkVOQ0VfRkxBR19TRU5USU5FTCwgJnJxLT5mZW5jZS5mbGFncyk7CiAJaGVhcnRiZWF0 X2NvbW1pdChycSwgJmF0dHIpOwogCUdFTV9CVUdfT04ocnEtPnNjaGVkLmF0dHIucHJpb3JpdHkg PCBJOTE1X1BSSU9SSVRZX0JBUlJJRVIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZW5naW5lX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9l bmdpbmVfcG0uYwppbmRleCBkMGExMDc4ZWY2MzIuLmFjOWM3NzdhNjU5MiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3BtLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3BtLmMKQEAgLTE4OCw2ICsxODgsNyBAQCBzdGF0 aWMgYm9vbCBzd2l0Y2hfdG9fa2VybmVsX2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQogCWk5MTVfcmVxdWVzdF9hZGRfYWN0aXZlX2JhcnJpZXJzKHJxKTsKIAogCS8qIElu c3RhbGwgb3Vyc2VsdmVzIGFzIGEgcHJlZW1wdGlvbiBiYXJyaWVyICovCisJcnEtPnNjaGVkLmRl YWRsaW5lID0gMDsKIAlycS0+c2NoZWQuYXR0ci5wcmlvcml0eSA9IEk5MTVfUFJJT1JJVFlfQkFS UklFUjsKIAlpZiAobGlrZWx5KCFfX2k5MTVfcmVxdWVzdF9jb21taXQocnEpKSkgeyAvKiBlbmdp bmUgc2hvdWxkIGJlIGlkbGUhICovCiAJCS8qCkBAIC0yNDgsOSArMjQ5LDYgQEAgc3RhdGljIGlu dCBfX2VuZ2luZV9wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZikKIAlpbnRlbF9lbmdpbmVf cGFya19oZWFydGJlYXQoZW5naW5lKTsKIAlpbnRlbF9lbmdpbmVfZGlzYXJtX2JyZWFkY3J1bWJz KGVuZ2luZSk7CiAKLQkvKiBNdXN0IGJlIHJlc2V0IHVwb24gaWRsaW5nLCBvciB3ZSBtYXkgbWlz cyB0aGUgYnVzeSB3YWtldXAuICovCi0JR0VNX0JVR19PTihlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1 ZV9wcmlvcml0eV9oaW50ICE9IElOVF9NSU4pOwotCiAJaWYgKGVuZ2luZS0+cGFyaykKIAkJZW5n aW5lLT5wYXJrKGVuZ2luZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2VuZ2luZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5n aW5lX3R5cGVzLmgKaW5kZXggNzU2ZTRlMTNhMWI1Li5hM2I5ZGE0YjM3MjEgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCkBAIC0yMzEsMjAgKzIzMSw2 IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzIHsKIAkgKi8KIAl1bnNpZ25lZCBpbnQg cG9ydF9tYXNrOwogCi0JLyoqCi0JICogQHF1ZXVlX3ByaW9yaXR5X2hpbnQ6IEhpZ2hlc3QgcGVu ZGluZyBwcmlvcml0eS4KLQkgKgotCSAqIFdoZW4gd2UgYWRkIHJlcXVlc3RzIGludG8gdGhlIHF1 ZXVlLCBvciBhZGp1c3QgdGhlIHByaW9yaXR5IG9mCi0JICogZXhlY3V0aW5nIHJlcXVlc3RzLCB3 ZSBjb21wdXRlIHRoZSBtYXhpbXVtIHByaW9yaXR5IG9mIHRob3NlCi0JICogcGVuZGluZyByZXF1 ZXN0cy4gV2UgY2FuIHRoZW4gdXNlIHRoaXMgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmCi0JICogd2Ug bmVlZCB0byBwcmVlbXB0IHRoZSBleGVjdXRpbmcgcmVxdWVzdHMgdG8gc2VydmljZSB0aGUgcXVl dWUuCi0JICogSG93ZXZlciwgc2luY2UgdGhlIHdlIG1heSBoYXZlIHJlY29yZGVkIHRoZSBwcmlv cml0eSBvZiBhbiBpbmZsaWdodAotCSAqIHJlcXVlc3Qgd2Ugd2FudGVkIHRvIHByZWVtcHQgYnV0 IHNpbmNlIGNvbXBsZXRlZCwgYXQgdGhlIHRpbWUgb2YKLQkgKiBkZXF1ZXVpbmcgdGhlIHByaW9y aXR5IGhpbnQgbWF5IG5vIGxvbmdlciBtYXkgbWF0Y2ggdGhlIGhpZ2hlc3QKLQkgKiBhdmFpbGFi bGUgcmVxdWVzdCBwcmlvcml0eS4KLQkgKi8KLQlpbnQgcXVldWVfcHJpb3JpdHlfaGludDsKLQog CS8qKgogCSAqIEBxdWV1ZTogcXVldWUgb2YgcmVxdWVzdHMsIGluIHByaW9yaXR5IGxpc3RzCiAJ ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCmluZGV4IDQzZmFmYWYyN2NmNi4uMWMz YWZhYThmOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwpAQCAtMjAxLDcgKzIw MSw3IEBAIHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSB7CiAJICovCiAJc3RydWN0IHZlX25vZGUgewog CQlzdHJ1Y3QgcmJfbm9kZSByYjsKLQkJaW50IHByaW87CisJCXU2NCBkZWFkbGluZTsKIAl9IG5v ZGVzW0k5MTVfTlVNX0VOR0lORVNdOwogCiAJLyoKQEAgLTQxMiwxMiArNDEyLDE3IEBAIHN0YXRp YyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRvX3ByaW9saXN0KHN0cnVjdCByYl9ub2Rl ICpyYikKIAogc3RhdGljIGlubGluZSBpbnQgcnFfcHJpbyhjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSkKIHsKLQlyZXR1cm4gUkVBRF9PTkNFKHJxLT5zY2hlZC5hdHRyLnByaW9yaXR5KTsK KwlyZXR1cm4gcnEtPnNjaGVkLmF0dHIucHJpb3JpdHk7CiB9CiAKLXN0YXRpYyBpbnQgZWZmZWN0 aXZlX3ByaW8oY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCitzdGF0aWMgaW5saW5lIHU2 NCBycV9kZWFkbGluZShjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIHsKLQlpbnQgcHJp byA9IHJxX3ByaW8ocnEpOworCXJldHVybiBycS0+c2NoZWQuZGVhZGxpbmU7Cit9CisKK3N0YXRp YyB1NjQgZWZmZWN0aXZlX2RlYWRsaW5lKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQor eworCXU2NCBkZWFkbGluZSA9IHJxX2RlYWRsaW5lKHJxKTsKIAogCS8qCiAJICogSWYgdGhpcyBy ZXF1ZXN0IGlzIHNwZWNpYWwgYW5kIG11c3Qgbm90IGJlIGludGVycnVwdGVkIGF0IGFueQpAQCAt NDI4LDI3ICs0MzMsMjcgQEAgc3RhdGljIGludCBlZmZlY3RpdmVfcHJpbyhjb25zdCBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSkKIAkgKiBub3ByZWVtcHQgZm9yIGFzIGxvbmcgYXMgZGVzaXJlZCku CiAJICovCiAJaWYgKGk5MTVfcmVxdWVzdF9oYXNfbm9wcmVlbXB0KHJxKSkKLQkJcHJpbyA9IEk5 MTVfUFJJT1JJVFlfVU5QUkVFTVBUQUJMRTsKKwkJZGVhZGxpbmUgPSAwOwogCi0JcmV0dXJuIHBy aW87CisJcmV0dXJuIGRlYWRsaW5lOwogfQogCi1zdGF0aWMgaW50IHF1ZXVlX3ByaW8oY29uc3Qg c3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cykKK3N0YXRpYyB1NjQgcXVl dWVfZGVhZGxpbmUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0 cykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmI7CiAKIAlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhl Y2xpc3RzLT5xdWV1ZSk7CiAJaWYgKCFyYikKLQkJcmV0dXJuIElOVF9NSU47CisJCXJldHVybiBJ OTE1X0RFQURMSU5FX05FVkVSOwogCi0JcmV0dXJuIHRvX3ByaW9saXN0KHJiKS0+cHJpb3JpdHk7 CisJcmV0dXJuIHRvX3ByaW9saXN0KHJiKS0+ZGVhZGxpbmU7CiB9CiAKIHN0YXRpYyBpbmxpbmUg Ym9vbCBuZWVkX3ByZWVtcHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAog CQkJCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAogCQkJCWNvbnN0IHN0cnVjdCB2aXJ0 dWFsX2VuZ2luZSAqdmUpCiB7Ci0JaW50IGxhc3RfcHJpbzsKKwl1NjQgbGFzdF9kZWFkbGluZTsK IAogCWlmICghaW50ZWxfZW5naW5lX2hhc19zZW1hcGhvcmVzKGVuZ2luZSkpCiAJCXJldHVybiBm YWxzZTsKQEAgLTQ3MSwxNiArNDc2LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3ByZWVt cHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCSAqIHByaW9yaXR5IGxl dmVsOiB0aGUgdGFzayB0aGF0IGlzIHJ1bm5pbmcgc2hvdWxkIHJlbWFpbiBydW5uaW5nCiAJICog dG8gcHJlc2VydmUgRklGTyBvcmRlcmluZyBvZiBkZXBlbmRlbmNpZXMuCiAJICovCi0JbGFzdF9w cmlvID0gbWF4KGVmZmVjdGl2ZV9wcmlvKHJxKSwgSTkxNV9QUklPUklUWV9OT1JNQUwgLSAxKTsK LQlpZiAoZW5naW5lLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA8PSBsYXN0X3ByaW8p Ci0JCXJldHVybiBmYWxzZTsKKwlsYXN0X2RlYWRsaW5lID0gZWZmZWN0aXZlX2RlYWRsaW5lKHJx KTsKIAogCS8qCiAJICogQ2hlY2sgYWdhaW5zdCB0aGUgZmlyc3QgcmVxdWVzdCBpbiBFTFNQWzFd LCBpdCB3aWxsLCB0aGFua3MgdG8gdGhlCiAJICogcG93ZXIgb2YgUEksIGJlIHRoZSBoaWdoZXN0 IHByaW9yaXR5IG9mIHRoYXQgY29udGV4dC4KIAkgKi8KIAlpZiAoIWxpc3RfaXNfbGFzdCgmcnEt PnNjaGVkLmxpbmssICZlbmdpbmUtPmFjdGl2ZS5yZXF1ZXN0cykgJiYKLQkgICAgcnFfcHJpbyhs aXN0X25leHRfZW50cnkocnEsIHNjaGVkLmxpbmspKSA+IGxhc3RfcHJpbykKKwkgICAgcnFfZGVh ZGxpbmUobGlzdF9uZXh0X2VudHJ5KHJxLCBzY2hlZC5saW5rKSkgPCBsYXN0X2RlYWRsaW5lKQog CQlyZXR1cm4gdHJ1ZTsKIAogCWlmICh2ZSkgewpAQCAtNDkyLDcgKzQ5NSw3IEBAIHN0YXRpYyBp bmxpbmUgYm9vbCBuZWVkX3ByZWVtcHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAogCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbmV4dCA9IFJFQURfT05DRSh2ZS0+cmVxdWVz dCk7CiAJCQlpZiAobmV4dCkKLQkJCQlwcmVlbXB0ID0gcnFfcHJpbyhuZXh0KSA+IGxhc3RfcHJp bzsKKwkJCQlwcmVlbXB0ID0gcnFfZGVhZGxpbmUobmV4dCkgPCBsYXN0X2RlYWRsaW5lOwogCQkJ cmN1X3JlYWRfdW5sb2NrKCk7CiAJCX0KIApAQCAtNTEwLDcgKzUxMyw3IEBAIHN0YXRpYyBpbmxp bmUgYm9vbCBuZWVkX3ByZWVtcHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAogCSAqIEVMU1BbMF0gb3IgRUxTUFsxXSBhcywgdGhhbmtzIGFnYWluIHRvIFBJLCBpZiBpdCB3 YXMgdGhlIHNhbWUKIAkgKiBjb250ZXh0LCBpdCdzIHByaW9yaXR5IHdvdWxkIG5vdCBleGNlZWQg RUxTUFswXSBha2EgbGFzdF9wcmlvLgogCSAqLwotCXJldHVybiBxdWV1ZV9wcmlvKCZlbmdpbmUt PmV4ZWNsaXN0cykgPiBsYXN0X3ByaW87CisJcmV0dXJuIHF1ZXVlX2RlYWRsaW5lKCZlbmdpbmUt PmV4ZWNsaXN0cykgPCBsYXN0X2RlYWRsaW5lOwogfQogCiBfX21heWJlX3VudXNlZCBzdGF0aWMg aW5saW5lIGJvb2wKQEAgLTUyNyw3ICs1MzAsNyBAQCBhc3NlcnRfcHJpb3JpdHlfcXVldWUoY29u c3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcHJldiwKIAlpZiAoaTkxNV9yZXF1ZXN0X2lzX2FjdGl2 ZShwcmV2KSkKIAkJcmV0dXJuIHRydWU7CiAKLQlyZXR1cm4gcnFfcHJpbyhwcmV2KSA+PSBycV9w cmlvKG5leHQpOworCXJldHVybiBycV9kZWFkbGluZShwcmV2KSA8PSBycV9kZWFkbGluZShuZXh0 KTsKIH0KIAogLyoKQEAgLTEwOTcsNyArMTEwMCw3IEBAIF9fdW53aW5kX2luY29tcGxldGVfcmVx dWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLCAqcm4sICphY3RpdmUgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKnVuaW5p dGlhbGl6ZWRfdmFyKHBsKTsKLQlpbnQgcHJpbyA9IEk5MTVfUFJJT1JJVFlfSU5WQUxJRDsKKwl1 NjQgZGVhZGxpbmUgPSBJOTE1X0RFQURMSU5FX05FVkVSOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVs ZCgmZW5naW5lLT5hY3RpdmUubG9jayk7CiAKQEAgLTExMTEsMTAgKzExMTQsMTUgQEAgX191bndp bmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAK IAkJX19pOTE1X3JlcXVlc3RfdW5zdWJtaXQocnEpOwogCi0JCUdFTV9CVUdfT04ocnFfcHJpbyhy cSkgPT0gSTkxNV9QUklPUklUWV9JTlZBTElEKTsKLQkJaWYgKHJxX3ByaW8ocnEpICE9IHByaW8p IHsKLQkJCXByaW8gPSBycV9wcmlvKHJxKTsKLQkJCXBsID0gaTkxNV9zY2hlZF9sb29rdXBfcHJp b2xpc3QoZW5naW5lLCBwcmlvKTsKKwkJaWYgKGk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSkgewor CQkJdTY0IGRlYWRsaW5lID0KKwkJCQlpOTE1X3NjaGVkdWxlcl9uZXh0X3ZpcnR1YWxfZGVhZGxp bmUocnFfcHJpbyhycSkpOworCQkJcnEtPnNjaGVkLmRlYWRsaW5lID0gbWluKHJxX2RlYWRsaW5l KHJxKSwgZGVhZGxpbmUpOworCQl9CisKKwkJaWYgKHJxX2RlYWRsaW5lKHJxKSAhPSBkZWFkbGlu ZSkgeworCQkJZGVhZGxpbmUgPSBycV9kZWFkbGluZShycSk7CisJCQlwbCA9IGk5MTVfc2NoZWRf bG9va3VwX3ByaW9saXN0KGVuZ2luZSwgZGVhZGxpbmUpOwogCQl9CiAJCUdFTV9CVUdfT04oUkJf RU1QVFlfUk9PVCgmZW5naW5lLT5leGVjbGlzdHMucXVldWUucmJfcm9vdCkpOwogCkBAIC0xMzk4 LDkgKzE0MDYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZXhlY2xpc3RzX3NjaGVkdWxlX291 dChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIAkgKiBJZiB3ZSBoYXZlIGp1c3QgY29tcGxldGVk IHRoaXMgY29udGV4dCwgdGhlIGVuZ2luZSBtYXkgbm93IGJlCiAJICogaWRsZSBhbmQgd2Ugd2Fu dCB0byByZS1lbnRlciBwb3dlcnNhdmluZy4KIAkgKi8KLQlpZiAobGlzdF9pc19sYXN0X3JjdSgm cnEtPmxpbmssICZjZS0+dGltZWxpbmUtPnJlcXVlc3RzKSAmJgotCSAgICBpOTE1X3JlcXVlc3Rf Y29tcGxldGVkKHJxKSkKLQkJaW50ZWxfZW5naW5lX2FkZF9yZXRpcmUoZW5naW5lLCBjZS0+dGlt ZWxpbmUpOworCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkgeworCQlpZiAoIWxpc3Rf aXNfbGFzdF9yY3UoJnJxLT5saW5rLCAmY2UtPnRpbWVsaW5lLT5yZXF1ZXN0cykpCisJCQlpOTE1 X3JlcXVlc3RfdXBkYXRlX2RlYWRsaW5lKGxpc3RfbmV4dF9lbnRyeShycSwgbGluaykpOworCQll bHNlCisJCQlpbnRlbF9lbmdpbmVfYWRkX3JldGlyZShlbmdpbmUsIGNlLT50aW1lbGluZSk7CisJ fQogCiAJY2NpZCA9IGNlLT5scmMuY2NpZDsKIAljY2lkID4+PSBHRU4xMV9TV19DVFhfSURfU0hJ RlQgLSAzMjsKQEAgLTE1MTQsMTQgKzE1MjUsMTQgQEAgZHVtcF9wb3J0KGNoYXIgKmJ1ZiwgaW50 IGJ1ZmxlbiwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIAlp ZiAoIXJxKQogCQlyZXR1cm4gIiI7CiAKLQlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzY2NpZDol eCAlbGx4OiVsbGQlcyBwcmlvICVkIiwKKwlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzY2NpZDol eCAlbGx4OiVsbGQlcyBkbDolbGx1IiwKIAkJIHByZWZpeCwKIAkJIHJxLT5jb250ZXh0LT5scmMu Y2NpZCwKIAkJIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8sCiAJCSBpOTE1X3Jl cXVlc3RfY29tcGxldGVkKHJxKSA/ICIhIiA6CiAJCSBpOTE1X3JlcXVlc3Rfc3RhcnRlZChycSkg PyAiKiIgOgogCQkgIiIsCi0JCSBycV9wcmlvKHJxKSk7CisJCSBycV9kZWFkbGluZShycSkpOwog CiAJcmV0dXJuIGJ1ZjsKIH0KQEAgLTE4MzEsNyArMTg0Miw5IEBAIHN0YXRpYyB2b2lkIHZpcnR1 YWxfeGZlcl9icmVhZGNydW1icyhzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlKQogCWludGVsX2Vu Z2luZV90cmFuc2Zlcl9zdGFsZV9icmVhZGNydW1icyh2ZS0+c2libGluZ3NbMF0sICZ2ZS0+Y29u dGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRlZmVyX3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsIHN0cnVjdCBsaXN0X2hlYWQgKiBjb25zdCBwbCkKK3N0YXRpYyB2b2lkIGRlZmVyX3Jl cXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCisJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKiBj b25zdCBwbCwKKwkJCSAgdTY0IGRlYWRsaW5lKQogewogCUxJU1RfSEVBRChsaXN0KTsKIApAQCAt MTg0Niw2ICsxODU5LDcgQEAgc3RhdGljIHZvaWQgZGVmZXJfcmVxdWVzdChzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwgc3RydWN0IGxpc3RfaGVhZCAqIGNvbnN0IHBsKQogCQlzdHJ1Y3QgaTkxNV9k ZXBlbmRlbmN5ICpwOwogCiAJCUdFTV9CVUdfT04oaTkxNV9yZXF1ZXN0X2lzX2FjdGl2ZShycSkp OworCQlycS0+c2NoZWQuZGVhZGxpbmUgPSBkZWFkbGluZTsKIAkJbGlzdF9tb3ZlX3RhaWwoJnJx LT5zY2hlZC5saW5rLCBwbCk7CiAKIAkJZm9yX2VhY2hfd2FpdGVyKHAsIHJxKSB7CkBAIC0xODY4 LDEwICsxODgyLDkgQEAgc3RhdGljIHZvaWQgZGVmZXJfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSwgc3RydWN0IGxpc3RfaGVhZCAqIGNvbnN0IHBsKQogCQkJaWYgKCFpOTE1X3JlcXVl c3RfaXNfcmVhZHkodykpCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChycV9wcmlvKHcpIDwgcnFf cHJpbyhycSkpCisJCQlpZiAocnFfZGVhZGxpbmUodykgPiBkZWFkbGluZSkKIAkJCQljb250aW51 ZTsKIAotCQkJR0VNX0JVR19PTihycV9wcmlvKHcpID4gcnFfcHJpbyhycSkpOwogCQkJbGlzdF9t b3ZlX3RhaWwoJnctPnNjaGVkLmxpbmssICZsaXN0KTsKIAkJfQogCkBAIC0xODgyLDEyICsxODk1 LDIxIEBAIHN0YXRpYyB2b2lkIGRlZmVyX3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs IHN0cnVjdCBsaXN0X2hlYWQgKiBjb25zdCBwbCkKIHN0YXRpYyB2b2lkIGRlZmVyX2FjdGl2ZShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGk5MTVfcmVxdWVzdCAq cnE7CisJdTY0IGRlYWRsaW5lOwogCiAJcnEgPSBfX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3Rz KGVuZ2luZSk7CiAJaWYgKCFycSkKIAkJcmV0dXJuOwogCi0JZGVmZXJfcmVxdWVzdChycSwgaTkx NV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBycV9wcmlvKHJxKSkpOworCWRlYWRsaW5l ID0gbWF4KHJxX2RlYWRsaW5lKHJxKSwKKwkJICAgICAgIGk5MTVfc2NoZWR1bGVyX25leHRfdmly dHVhbF9kZWFkbGluZShycV9wcmlvKHJxKSkpOworCUVOR0lORV9UUkFDRShlbmdpbmUsICJkZWZl ciAlbGx4OiVsbGQsIGRsOiVsbHUgLT4gJWxsdVxuIiwKKwkJICAgICBycS0+ZmVuY2UuY29udGV4 dCwgcnEtPmZlbmNlLnNlcW5vLAorCQkgICAgIHJxX2RlYWRsaW5lKHJxKSwgZGVhZGxpbmUpOwor CisJZGVmZXJfcmVxdWVzdChycSwKKwkJICAgICAgaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3Qo ZW5naW5lLCBkZWFkbGluZSksCisJCSAgICAgIGRlYWRsaW5lKTsKIH0KIAogc3RhdGljIGJvb2wK QEAgLTIwNjEsMTEgKzIwODMsMTAgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiAJCWlmIChuZWVkX3ByZWVtcHQoZW5naW5l LCBsYXN0LCB2ZSkpIHsKIAkJCUVOR0lORV9UUkFDRShlbmdpbmUsCi0JCQkJICAgICAicHJlZW1w dGluZyBsYXN0PSVsbHg6JWxsZCwgcHJpbz0lZCwgaGludD0lZFxuIiwKKwkJCQkgICAgICJwcmVl bXB0aW5nIGxhc3Q9JWxseDolbGx1LCBkbD0lbGx1XG4iLAogCQkJCSAgICAgbGFzdC0+ZmVuY2Uu Y29udGV4dCwKIAkJCQkgICAgIGxhc3QtPmZlbmNlLnNlcW5vLAotCQkJCSAgICAgbGFzdC0+c2No ZWQuYXR0ci5wcmlvcml0eSwKLQkJCQkgICAgIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGlu dCk7CisJCQkJICAgICBycV9kZWFkbGluZShsYXN0KSk7CiAJCQlyZWNvcmRfcHJlZW1wdGlvbihl eGVjbGlzdHMpOwogCiAJCQkvKgpAQCAtMjA4NywxMSArMjEwOCwxMSBAQCBzdGF0aWMgdm9pZCBl eGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCQlsYXN0 ID0gTlVMTDsKIAkJfSBlbHNlIGlmICh0aW1lc2xpY2VfZXhwaXJlZChlbmdpbmUsIGxhc3QpKSB7 CiAJCQlFTkdJTkVfVFJBQ0UoZW5naW5lLAotCQkJCSAgICAgImV4cGlyZWQ6JXMgbGFzdD0lbGx4 OiVsbGQsIHByaW89JWQsIGhpbnQ9JWQsIHlpZWxkPz0lc1xuIiwKKwkJCQkgICAgICJleHBpcmVk OiVzIGxhc3Q9JWxseDolbGx1LCBkZWFkbGluZT0lbGx1LCBub3c9JWxsdSwgeWllbGQ/PSVzXG4i LAogCQkJCSAgICAgeWVzbm8odGltZXJfZXhwaXJlZCgmZXhlY2xpc3RzLT50aW1lcikpLAogCQkJ CSAgICAgbGFzdC0+ZmVuY2UuY29udGV4dCwgbGFzdC0+ZmVuY2Uuc2Vxbm8sCi0JCQkJICAgICBy cV9wcmlvKGxhc3QpLAotCQkJCSAgICAgZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50LAor CQkJCSAgICAgcnFfZGVhZGxpbmUobGFzdCksCisJCQkJICAgICBpOTE1X3NjaGVkX3RvX3RpY2tz KGt0aW1lX2dldCgpKSwKIAkJCQkgICAgIHllc25vKHRpbWVzbGljZV95aWVsZChleGVjbGlzdHMs IGxhc3QpKSk7CiAKIAkJCXJpbmdfc2V0X3BhdXNlZChlbmdpbmUsIDEpOwpAQCAtMjE0Niw3ICsy MTY3LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogCQlHRU1fQlVHX09OKHJxLT5lbmdpbmUgIT0gJnZlLT5iYXNlKTsKIAkJ R0VNX0JVR19PTihycS0+Y29udGV4dCAhPSAmdmUtPmNvbnRleHQpOwogCi0JCWlmICh1bmxpa2Vs eShycV9wcmlvKHJxKSA8IHF1ZXVlX3ByaW8oZXhlY2xpc3RzKSkpIHsKKwkJaWYgKHVubGlrZWx5 KHJxX2RlYWRsaW5lKHJxKSA+IHF1ZXVlX2RlYWRsaW5lKGV4ZWNsaXN0cykpKSB7CiAJCQlzcGlu X3VubG9jaygmdmUtPmJhc2UuYWN0aXZlLmxvY2spOwogCQkJYnJlYWs7CiAJCX0KQEAgLTIxNjcs OSArMjE4OCw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKIAkJCSAgICAgaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQocnEpID8gIioi IDoKIAkJCSAgICAgIiIsCiAJCQkgICAgIHllc25vKGVuZ2luZSAhPSB2ZS0+c2libGluZ3NbMF0p KTsKLQogCQlXUklURV9PTkNFKHZlLT5yZXF1ZXN0LCBOVUxMKTsKLQkJV1JJVEVfT05DRSh2ZS0+ YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCwgSU5UX01JTik7CiAKIAkJcmIgPSAm dmUtPm5vZGVzW2VuZ2luZS0+aWRdLnJiOwogCQlyYl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlz dHMtPnZpcnR1YWwpOwpAQCAtMjMwOSwyNCArMjMyOCw2IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0 c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAl9CiBkb25lOgogCSpw b3J0KysgPSBpOTE1X3JlcXVlc3RfZ2V0KGxhc3QpOwotCi0JLyoKLQkgKiBIZXJlIGJlIGEgYml0 IG9mIG1hZ2ljISBPciBzbGVpZ2h0LW9mLWhhbmQsIHdoaWNoZXZlciB5b3UgcHJlZmVyLgotCSAq Ci0JICogV2UgY2hvb3NlIHRoZSBwcmlvcml0eSBoaW50IHN1Y2ggdGhhdCBpZiB3ZSBhZGQgYSBy ZXF1ZXN0IG9mIGdyZWF0ZXIKLQkgKiBwcmlvcml0eSB0aGFuIHRoaXMsIHdlIGtpY2sgdGhlIHN1 Ym1pc3Npb24gdGFza2xldCB0byBkZWNpZGUgb24KLQkgKiB0aGUgcmlnaHQgb3JkZXIgb2Ygc3Vi bWl0dGluZyB0aGUgcmVxdWVzdHMgdG8gaGFyZHdhcmUuIFdlIG11c3QKLQkgKiBhbHNvIGJlIHBy ZXBhcmVkIHRvIHJlb3JkZXIgcmVxdWVzdHMgYXMgdGhleSBhcmUgaW4tZmxpZ2h0IG9uIHRoZQot CSAqIEhXLiBXZSBkZXJpdmUgdGhlIHByaW9yaXR5IGhpbnQgdGhlbiBhcyB0aGUgZmlyc3QgImhv bGUiIGluCi0JICogdGhlIEhXIHN1Ym1pc3Npb24gcG9ydHMgYW5kIGlmIHRoZXJlIGFyZSBubyBh dmFpbGFibGUgc2xvdHMsCi0JICogdGhlIHByaW9yaXR5IG9mIHRoZSBsb3dlc3QgZXhlY3V0aW5n IHJlcXVlc3QsIGkuZS4gbGFzdC4KLQkgKgotCSAqIFdoZW4gd2UgZG8gcmVjZWl2ZSBhIGhpZ2hl ciBwcmlvcml0eSByZXF1ZXN0IHJlYWR5IHRvIHJ1biBmcm9tIHRoZQotCSAqIHVzZXIsIHNlZSBx dWV1ZV9yZXF1ZXN0KCksIHRoZSBwcmlvcml0eSBoaW50IGlzIGJ1bXBlZCB0byB0aGF0Ci0JICog cmVxdWVzdCB0cmlnZ2VyaW5nIHByZWVtcHRpb24gb24gdGhlIG5leHQgZGVxdWV1ZSAob3Igc3Vi c2VxdWVudAotCSAqIGludGVycnVwdCBmb3Igc2Vjb25kYXJ5IHBvcnRzKS4KLQkgKi8KLQlleGVj bGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBxdWV1ZV9wcmlvKGV4ZWNsaXN0cyk7CiAJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwogCiAJLyoK QEAgLTI3MTYsOSArMjcxNywxMCBAQCBzdGF0aWMgYm9vbCBob2xkX3JlcXVlc3QoY29uc3Qgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQg X19leGVjbGlzdHNfdW5ob2xkKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQorc3RhdGljIGJvb2wg X19leGVjbGlzdHNfdW5ob2xkKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogewogCUxJU1RfSEVB RChsaXN0KTsKKwlib29sIHN1Ym1pdCA9IGZhbHNlOwogCiAJZG8gewogCQlzdHJ1Y3QgaTkxNV9k ZXBlbmRlbmN5ICpwOwpAQCAtMjcyOSwxMCArMjczMSw3IEBAIHN0YXRpYyB2b2lkIF9fZXhlY2xp c3RzX3VuaG9sZChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIAkJR0VNX0JVR19PTighaTkxNV9z d19mZW5jZV9zaWduYWxlZCgmcnEtPnN1Ym1pdCkpOwogCiAJCWk5MTVfcmVxdWVzdF9jbGVhcl9o b2xkKHJxKTsKLQkJbGlzdF9tb3ZlX3RhaWwoJnJxLT5zY2hlZC5saW5rLAotCQkJICAgICAgIGk5 MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KHJxLT5lbmdpbmUsCi0JCQkJCQkJICBycV9wcmlvKHJx KSkpOwotCQlzZXRfYml0KEk5MTVfRkVOQ0VfRkxBR19QUVVFVUUsICZycS0+ZmVuY2UuZmxhZ3Mp OworCQlzdWJtaXQgfD0gaW50ZWxfZW5naW5lX3F1ZXVlX3JlcXVlc3QocnEtPmVuZ2luZSwgcnEp OwogCiAJCS8qIEFsc28gcmVsZWFzZSBhbnkgY2hpbGRyZW4gb24gdGhpcyBlbmdpbmUgdGhhdCBh cmUgcmVhZHkgKi8KIAkJZm9yX2VhY2hfd2FpdGVyKHAsIHJxKSB7CkBAIC0yNzYxLDYgKzI3NjAs OCBAQCBzdGF0aWMgdm9pZCBfX2V4ZWNsaXN0c191bmhvbGQoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEpCiAKIAkJcnEgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmxpc3QsIHR5cGVvZigqcnEp LCBzY2hlZC5saW5rKTsKIAl9IHdoaWxlIChycSk7CisKKwlyZXR1cm4gc3VibWl0OwogfQogCiBz dGF0aWMgdm9pZCBleGVjbGlzdHNfdW5ob2xkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKQEAgLTI3NzIsMTIgKzI3NzMsOCBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfdW5ob2xkKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkgKiBNb3ZlIHRoaXMgcmVxdWVzdCBiYWNr IHRvIHRoZSBwcmlvcml0eSBxdWV1ZSwgYW5kIGFsbCBvZiBpdHMKIAkgKiBjaGlsZHJlbiBhbmQg Z3JhbmRjaGlsZHJlbiB0aGF0IHdlcmUgc3VzcGVuZGVkIGFsb25nIHdpdGggaXQuCiAJICovCi0J X19leGVjbGlzdHNfdW5ob2xkKHJxKTsKLQotCWlmIChycV9wcmlvKHJxKSA+IGVuZ2luZS0+ZXhl Y2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQpIHsKLQkJZW5naW5lLT5leGVjbGlzdHMucXVldWVf cHJpb3JpdHlfaGludCA9IHJxX3ByaW8ocnEpOworCWlmIChfX2V4ZWNsaXN0c191bmhvbGQocnEp KQogCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0KTsKLQl9 CiAKIAlzcGluX3VubG9ja19pcnEoJmVuZ2luZS0+YWN0aXZlLmxvY2spOwogfQpAQCAtMzAzOSwy NyArMzAzNiw2IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19wcmVlbXB0KHN0cnVjdCB0aW1lcl9s aXN0ICp0aW1lcikKIAlleGVjbGlzdHNfa2ljayh0aW1lciwgcHJlZW1wdCk7CiB9CiAKLXN0YXRp YyB2b2lkIHF1ZXVlX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJ ICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKLXsKLQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZy cS0+c2NoZWQubGluaykpOwotCWxpc3RfYWRkX3RhaWwoJnJxLT5zY2hlZC5saW5rLAotCQkgICAg ICBpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChlbmdpbmUsIHJxX3ByaW8ocnEpKSk7Ci0Jc2V0 X2JpdChJOTE1X0ZFTkNFX0ZMQUdfUFFVRVVFLCAmcnEtPmZlbmNlLmZsYWdzKTsKLX0KLQotc3Rh dGljIGJvb2wgc3VibWl0X3F1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJ CSBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2V4ZWNsaXN0cyAqZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwotCi0JaWYgKHJxX3By aW8ocnEpIDw9IGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCkKLQkJcmV0dXJuIGZhbHNl OwotCi0JZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcnFfcHJpbyhycSk7Ci0JcmV0 dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBib29sIGFuY2VzdG9yX29uX2hvbGQoY29uc3Qgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSkKIHsKQEAgLTMwODAsMTIgKzMwNTYsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNf c3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKIAkJbGlzdF9hZGRf dGFpbCgmcmVxdWVzdC0+c2NoZWQubGluaywgJmVuZ2luZS0+YWN0aXZlLmhvbGQpOwogCQlpOTE1 X3JlcXVlc3Rfc2V0X2hvbGQocmVxdWVzdCk7CiAJfSBlbHNlIHsKLQkJcXVldWVfcmVxdWVzdChl bmdpbmUsIHJlcXVlc3QpOwotCi0JCUdFTV9CVUdfT04oUkJfRU1QVFlfUk9PVCgmZW5naW5lLT5l eGVjbGlzdHMucXVldWUucmJfcm9vdCkpOwotCQlHRU1fQlVHX09OKGxpc3RfZW1wdHkoJnJlcXVl c3QtPnNjaGVkLmxpbmspKTsKLQotCQlpZiAoc3VibWl0X3F1ZXVlKGVuZ2luZSwgcmVxdWVzdCkp CisJCWlmIChpbnRlbF9lbmdpbmVfcXVldWVfcmVxdWVzdChlbmdpbmUsIHJlcXVlc3QpKQogCQkJ X19leGVjbGlzdHNfa2ljaygmZW5naW5lLT5leGVjbGlzdHMpOwogCX0KIApAQCAtNDE1NSwxMCAr NDEyNiw2IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19yZXNldF9yZXdpbmQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLCBib29sIHN0YWxsZWQpCiAKIHN0YXRpYyB2b2lkIG5vcF9zdWJt aXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKiBjb25zdCBlbmdpbmUgPSAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKWRhdGE7Ci0K LQkvKiBUaGUgZHJpdmVyIGlzIHdlZGdlZDsgZG9uJ3QgcHJvY2VzcyBhbnkgbW9yZSBldmVudHMu ICovCi0JV1JJVEVfT05DRShlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50LCBJ TlRfTUlOKTsKIH0KIAogc3RhdGljIHZvaWQgZXhlY2xpc3RzX3Jlc2V0X2NhbmNlbChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCkBAIC00MjA0LDYgKzQxNzEsNyBAQCBzdGF0aWMgdm9p ZCBleGVjbGlzdHNfcmVzZXRfY2FuY2VsKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK IAkJcmJfZXJhc2VfY2FjaGVkKCZwLT5ub2RlLCAmZXhlY2xpc3RzLT5xdWV1ZSk7CiAJCWk5MTVf cHJpb2xpc3RfZnJlZShwKTsKIAl9CisJR0VNX0JVR19PTighUkJfRU1QVFlfUk9PVCgmZXhlY2xp c3RzLT5xdWV1ZS5yYl9yb290KSk7CiAKIAkvKiBPbi1ob2xkIHJlcXVlc3RzIHdpbGwgYmUgZmx1 c2hlZCB0byB0aW1lbGluZSB1cG9uIHRoZWlyIHJlbGVhc2UgKi8KIAlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHJxLCAmZW5naW5lLT5hY3RpdmUuaG9sZCwgc2NoZWQubGluaykKQEAgLTQyMjUsMTcgKzQx OTMsMTIgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3Jlc2V0X2NhbmNlbChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCiAJCQlycS0+ZW5naW5lID0gZW5naW5lOwogCQkJX19pOTE1X3Jl cXVlc3Rfc3VibWl0KHJxKTsKIAkJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwotCi0JCQl2ZS0+YmFz ZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47CiAJCX0KIAkJc3Bpbl91 bmxvY2soJnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKIAl9CiAKIAkvKiBSZW1haW5pbmcgX3VucmVh ZHlfIHJlcXVlc3RzIHdpbGwgYmUgbm9wJ2VkIHdoZW4gc3VibWl0dGVkICovCiAKLQlleGVjbGlz dHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwotCWV4ZWNsaXN0cy0+cXVldWUgPSBS Ql9ST09UX0NBQ0hFRDsKLQogCUdFTV9CVUdfT04oX190YXNrbGV0X2lzX2VuYWJsZWQoJmV4ZWNs aXN0cy0+dGFza2xldCkpOwogCWV4ZWNsaXN0cy0+dGFza2xldC5mdW5jID0gbm9wX3N1Ym1pc3Np b25fdGFza2xldDsKIApAQCAtNTM0Myw3ICs1MzA2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9jb250ZXh0X29wcyB2aXJ0dWFsX2NvbnRleHRfb3BzID0gewogCS5kZXN0cm95ID0gdmly dHVhbF9jb250ZXh0X2Rlc3Ryb3ksCiB9OwogCi1zdGF0aWMgaW50ZWxfZW5naW5lX21hc2tfdCB2 aXJ0dWFsX3N1Ym1pc3Npb25fbWFzayhzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlKQorc3RhdGlj IGludGVsX2VuZ2luZV9tYXNrX3QKK3ZpcnR1YWxfc3VibWlzc2lvbl9tYXNrKHN0cnVjdCB2aXJ0 dWFsX2VuZ2luZSAqdmUsIHU2NCAqZGVhZGxpbmUpCiB7CiAJc3RydWN0IGk5MTVfcmVxdWVzdCAq cnE7CiAJaW50ZWxfZW5naW5lX21hc2tfdCBtYXNrOwpAQCAtNTM2MCw5ICs1MzI0LDExIEBAIHN0 YXRpYyBpbnRlbF9lbmdpbmVfbWFza190IHZpcnR1YWxfc3VibWlzc2lvbl9tYXNrKHN0cnVjdCB2 aXJ0dWFsX2VuZ2luZSAqdmUpCiAJCW1hc2sgPSB2ZS0+c2libGluZ3NbMF0tPm1hc2s7CiAJfQog Ci0JRU5HSU5FX1RSQUNFKCZ2ZS0+YmFzZSwgInJxPSVsbHg6JWxsZCwgbWFzaz0leCwgcHJpbz0l ZFxuIiwKKwkqZGVhZGxpbmUgPSBycV9kZWFkbGluZShycSk7CisKKwlFTkdJTkVfVFJBQ0UoJnZl LT5iYXNlLCAicnE9JWxseDolbGx1LCBtYXNrPSV4LCBkbD0lbGx1XG4iLAogCQkgICAgIHJxLT5m ZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8sCi0JCSAgICAgbWFzaywgdmUtPmJhc2UuZXhl Y2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQpOworCQkgICAgIG1hc2ssICpkZWFkbGluZSk7CiAK IAlyZXR1cm4gbWFzazsKIH0KQEAgLTUzNzAsMTIgKzUzMzYsMTIgQEAgc3RhdGljIGludGVsX2Vu Z2luZV9tYXNrX3QgdmlydHVhbF9zdWJtaXNzaW9uX21hc2soc3RydWN0IHZpcnR1YWxfZW5naW5l ICp2ZSkKIHN0YXRpYyB2b2lkIHZpcnR1YWxfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxv bmcgZGF0YSkKIHsKIAlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKiBjb25zdCB2ZSA9IChzdHJ1Y3Qg dmlydHVhbF9lbmdpbmUgKilkYXRhOwotCWNvbnN0IGludCBwcmlvID0gUkVBRF9PTkNFKHZlLT5i YXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50KTsKIAlpbnRlbF9lbmdpbmVfbWFza190 IG1hc2s7CisJdTY0IGRlYWRsaW5lOwogCXVuc2lnbmVkIGludCBuOwogCiAJcmN1X3JlYWRfbG9j aygpOwotCW1hc2sgPSB2aXJ0dWFsX3N1Ym1pc3Npb25fbWFzayh2ZSk7CisJbWFzayA9IHZpcnR1 YWxfc3VibWlzc2lvbl9tYXNrKHZlLCAmZGVhZGxpbmUpOwogCXJjdV9yZWFkX3VubG9jaygpOwog CWlmICh1bmxpa2VseSghbWFzaykpCiAJCXJldHVybjsKQEAgLTU0MDgsNyArNTM3NCw4IEBAIHN0 YXRpYyB2b2lkIHZpcnR1YWxfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkK IAkJCSAqLwogCQkJZmlyc3QgPSByYl9maXJzdF9jYWNoZWQoJnNpYmxpbmctPmV4ZWNsaXN0cy52 aXJ0dWFsKSA9PQogCQkJCSZub2RlLT5yYjsKLQkJCWlmIChwcmlvID09IG5vZGUtPnByaW8gfHwg KHByaW8gPiBub2RlLT5wcmlvICYmIGZpcnN0KSkKKwkJCWlmIChkZWFkbGluZSA9PSBub2RlLT5k ZWFkbGluZSB8fAorCQkJICAgIChkZWFkbGluZSA8IG5vZGUtPmRlYWRsaW5lICYmIGZpcnN0KSkK IAkJCQlnb3RvIHN1Ym1pdF9lbmdpbmU7CiAKIAkJCXJiX2VyYXNlX2NhY2hlZCgmbm9kZS0+cmIs ICZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVhbCk7CkBAIC01NDIyLDcgKzUzODksNyBAQCBzdGF0 aWMgdm9pZCB2aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiAK IAkJCXJiID0gKnBhcmVudDsKIAkJCW90aGVyID0gcmJfZW50cnkocmIsIHR5cGVvZigqb3RoZXIp LCByYik7Ci0JCQlpZiAocHJpbyA+IG90aGVyLT5wcmlvKSB7CisJCQlpZiAoZGVhZGxpbmUgPCBv dGhlci0+ZGVhZGxpbmUpIHsKIAkJCQlwYXJlbnQgPSAmcmItPnJiX2xlZnQ7CiAJCQl9IGVsc2Ug ewogCQkJCXBhcmVudCA9ICZyYi0+cmJfcmlnaHQ7CkBAIC01NDM3LDggKzU0MDQsOCBAQCBzdGF0 aWMgdm9pZCB2aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiAK IHN1Ym1pdF9lbmdpbmU6CiAJCUdFTV9CVUdfT04oUkJfRU1QVFlfTk9ERSgmbm9kZS0+cmIpKTsK LQkJbm9kZS0+cHJpbyA9IHByaW87Ci0JCWlmIChmaXJzdCAmJiBwcmlvID4gc2libGluZy0+ZXhl Y2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQpCisJCW5vZGUtPmRlYWRsaW5lID0gZGVhZGxpbmU7 CisJCWlmIChmaXJzdCkKIAkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNpYmxpbmctPmV4ZWNsaXN0 cy50YXNrbGV0KTsKIAogdW5sb2NrX2VuZ2luZToKQEAgLTU0NzIsMTEgKzU0MzksMTEgQEAgc3Rh dGljIHZvaWQgdmlydHVhbF9zdWJtaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkK IAogCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkgewogCQlfX2k5MTVfcmVxdWVzdF9z dWJtaXQocnEpOwotCi0JCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0g SU5UX01JTjsKIAkJdmUtPnJlcXVlc3QgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCXZlLT5iYXNlLmV4 ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcnFfcHJpbyhycSk7CisJCXJxLT5zY2hlZC5k ZWFkbGluZSA9CisJCQltaW4ocnEtPnNjaGVkLmRlYWRsaW5lLAorCQkJICAgIGk5MTVfc2NoZWR1 bGVyX25leHRfdmlydHVhbF9kZWFkbGluZShycV9wcmlvKHJxKSkpOwogCQl2ZS0+cmVxdWVzdCA9 IGk5MTVfcmVxdWVzdF9nZXQocnEpOwogCiAJCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkodmlydHVh bF9xdWV1ZSh2ZSkpKTsKQEAgLTU1ODAsNyArNTU0Nyw2IEBAIGludGVsX2V4ZWNsaXN0c19jcmVh dGVfdmlydHVhbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqc2libGluZ3MsCiAJdmUtPmJhc2Uu Ym9uZF9leGVjdXRlID0gdmlydHVhbF9ib25kX2V4ZWN1dGU7CiAKIAlJTklUX0xJU1RfSEVBRCh2 aXJ0dWFsX3F1ZXVlKHZlKSk7Ci0JdmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hp bnQgPSBJTlRfTUlOOwogCXRhc2tsZXRfaW5pdCgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQs CiAJCSAgICAgdmlydHVhbF9zdWJtaXNzaW9uX3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxv bmcpdmUpOwpAQCAtNTc2NywxMCArNTczMyw2IEBAIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3df cmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCQlzaG93X3JlcXVlc3Qo bSwgbGFzdCwgIlx0XHRFICIpOwogCX0KIAotCWlmIChleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5 X2hpbnQgIT0gSU5UX01JTikKLQkJZHJtX3ByaW50ZihtLCAiXHRcdFF1ZXVlIHByaW9yaXR5IGhp bnQ6ICVkXG4iLAotCQkJICAgUkVBRF9PTkNFKGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGlu dCkpOwotCiAJbGFzdCA9IE5VTEw7CiAJY291bnQgPSAwOwogCWZvciAocmIgPSByYl9maXJzdF9j YWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUpOyByYjsgcmIgPSByYl9uZXh0KHJiKSkgewpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwppbmRleCA5MjdkNTRjNzAy ZjQuLmIwZWI0MjZkMjZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2Vs ZnRlc3RfaGFuZ2NoZWNrLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf aGFuZ2NoZWNrLmMKQEAgLTg3OCw3ICs4NzgsMTAgQEAgc3RhdGljIGludCBfX2lndF9yZXNldF9l bmdpbmVzKHN0cnVjdCBpbnRlbF9ndCAqZ3QsCiAJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCWlm IChpOTE1X3JlcXVlc3Rfd2FpdChycSwgMCwgSFogLyA1KSA8IDApIHsKKwkJCQkvKiBXaXRoIGRl YWRsaW5lcywgbm8gc3RyaWN0IHByaW9yaXR5ICovCisJCQkJaTkxNV9yZXF1ZXN0X3NldF9kZWFk bGluZShycSwgMCk7CisKKwkJCQlpZiAoaTkxNV9yZXF1ZXN0X3dhaXQocnEsIDAsIEhaIC8gMikg PCAwKSB7CiAJCQkJCXN0cnVjdCBkcm1fcHJpbnRlciBwID0KIAkJCQkJCWRybV9pbmZvX3ByaW50 ZXIoZ3QtPmk5MTUtPmRybS5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xy Yy5jCmluZGV4IDQxOGMxYzJlNTRhMS4uZGY2ZjZhZTg4MDZmIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9scmMuYwpAQCAtNzAsNiArNzAsOSBAQCBzdGF0aWMgaW50IHdhaXRfZm9y X3N1Ym1pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkgICBzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKKwkvKiBJZ25v cmUgb3VyIG93biBhdHRlbXB0cyB0byBzdXBwcmVzcyBleGNlc3MgdGFza2xldHMgKi8KKwl0YXNr bGV0X2hpX3NjaGVkdWxlKCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0KTsKKwogCXRpbWVvdXQg Kz0gamlmZmllczsKIAlkbyB7CiAJCWJvb2wgZG9uZSA9IHRpbWVfYWZ0ZXIoamlmZmllcywgdGlt ZW91dCk7CkBAIC04OTIsNyArODk1LDcgQEAgc2VtYXBob3JlX3F1ZXVlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfdm1hICp2bWEsIGludCBpZHgpCiBzdGF0aWMg aW50CiByZWxlYXNlX3F1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkgICAg ICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKLQkgICAgICBpbnQgaWR4LCBpbnQgcHJpbykKKwkgICAg ICBpbnQgaWR4LCB1NjQgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7CiAJ dTMyICpjczsKQEAgLTkxNywxMCArOTIwLDcgQEAgcmVsZWFzZV9xdWV1ZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCiAJaTkxNV9yZXF1ZXN0X2dldChycSk7CiAJaTkxNV9yZXF1ZXN0 X2FkZChycSk7CiAKLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaTkxNV9yZXF1ZXN0X3NldF9wcmlv cml0eShycSwgcHJpbyk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7IC8qIGtpY2sgdGFza2xldCAqLwot CisJaTkxNV9yZXF1ZXN0X3NldF9kZWFkbGluZShycSwgZGVhZGxpbmUpOwogCWk5MTVfcmVxdWVz dF9wdXQocnEpOwogCiAJcmV0dXJuIDA7CkBAIC05MzQsNiArOTM0LDcgQEAgc2xpY2Vfc2VtYXBo b3JlX3F1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm91dGVyLAogCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKIAlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpoZWFkOwogCWVudW0gaW50 ZWxfZW5naW5lX2lkIGlkOworCWxvbmcgdGltZW91dDsKIAlpbnQgZXJyLCBpLCBuID0gMDsKIAog CWhlYWQgPSBzZW1hcGhvcmVfcXVldWUob3V0ZXIsIHZtYSwgbisrKTsKQEAgLTk1NCwxMiArOTU1 LDE2IEBAIHNsaWNlX3NlbWFwaG9yZV9xdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpvdXRl ciwKIAkJfQogCX0KIAotCWVyciA9IHJlbGVhc2VfcXVldWUob3V0ZXIsIHZtYSwgbiwgSTkxNV9Q UklPUklUWV9CQVJSSUVSKTsKKwllcnIgPSByZWxlYXNlX3F1ZXVlKG91dGVyLCB2bWEsIG4sIDAp OwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGk5MTVfcmVxdWVzdF93YWl0KGhlYWQs IDAsCi0JCQkgICAgICAyICogUlVOVElNRV9JTkZPKG91dGVyLT5pOTE1KS0+bnVtX2VuZ2luZXMg KiAoY291bnQgKyAyKSAqIChjb3VudCArIDMpKSA8IDApIHsKKwkvKiBFeHBlY3RlZCBudW1iZXIg b2YgcGVzc2ltYWwgc2xpY2VzIHJlcXVpcmVkICovCisJdGltZW91dCA9IFJVTlRJTUVfSU5GTyhv dXRlci0+aTkxNSktPm51bV9lbmdpbmVzICogKGNvdW50ICsgMikgKiAoY291bnQgKyAzKTsKKwl0 aW1lb3V0ICo9IDQ7IC8qIHNhZmV0eSBmYWN0b3IsIGluY2x1ZGluZyBidWNrZXRpbmcgKi8KKwl0 aW1lb3V0ICs9IEhaIC8gMjsgLyogYW5kIGluY2x1ZGUgdGhlIHJlcXVlc3QgY29tcGxldGlvbiAq LworCisJaWYgKGk5MTVfcmVxdWVzdF93YWl0KGhlYWQsIDAsIHRpbWVvdXQpIDwgMCkgewogCQlw cl9lcnIoIkZhaWxlZCB0byBzbGljZSBhbG9uZyBzZW1hcGhvcmUgY2hhaW4gb2YgbGVuZ3RoICgl ZCwgJWQpIVxuIiwKIAkJICAgICAgIGNvdW50LCBuKTsKIAkJR0VNX1RSQUNFX0RVTVAoKTsKQEAg LTEwNjQsNiArMTA2OSw4IEBAIGNyZWF0ZV9yZXdpbmRlcihzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2UsCiAJCWVyciA9IGk5MTVfcmVxdWVzdF9hd2FpdF9kbWFfZmVuY2UocnEsICZ3YWl0LT5mZW5j ZSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycjsKKworCQlpOTE1X3JlcXVlc3Rfc2V0X2RlYWRs aW5lKHJxLCBycV9kZWFkbGluZSh3YWl0KSk7CiAJfQogCiAJY3MgPSBpbnRlbF9yaW5nX2JlZ2lu KHJxLCAxNCk7CkBAIC0xMzM5LDcgKzEzNDYsNyBAQCBzdGF0aWMgaW50IGxpdmVfdGltZXNsaWNl X3F1ZXVlKHZvaWQgKmFyZykKIAkJCWVyciA9IFBUUl9FUlIocnEpOwogCQkJZ290byBlcnJfaGVh cnRiZWF0OwogCQl9Ci0JCWk5MTVfcmVxdWVzdF9zZXRfcHJpb3JpdHkocnEsIEk5MTVfUFJJT1JJ VFlfTUFYKTsKKwkJaTkxNV9yZXF1ZXN0X3NldF9kZWFkbGluZShycSwgMCk7CiAJCWVyciA9IHdh aXRfZm9yX3N1Ym1pdChlbmdpbmUsIHJxLCBIWiAvIDIpOwogCQlpZiAoZXJyKSB7CiAJCQlwcl9l cnIoIiVzOiBUaW1lZCBvdXQgdHJ5aW5nIHRvIHN1Ym1pdCBzZW1hcGhvcmVzXG4iLApAQCAtMTM2 MiwxMCArMTM2OSw5IEBAIHN0YXRpYyBpbnQgbGl2ZV90aW1lc2xpY2VfcXVldWUodm9pZCAqYXJn KQogCQl9CiAKIAkJR0VNX0JVR19PTihpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSk7Ci0JCUdF TV9CVUdfT04oZXhlY2xpc3RzX2FjdGl2ZSgmZW5naW5lLT5leGVjbGlzdHMpICE9IHJxKTsKIAog CQkvKiBRdWV1ZTogc2VtYXBob3JlIHNpZ25hbCwgbWF0Y2hpbmcgcHJpb3JpdHkgYXMgc2VtYXBo b3JlICovCi0JCWVyciA9IHJlbGVhc2VfcXVldWUoZW5naW5lLCB2bWEsIDEsIGVmZmVjdGl2ZV9w cmlvKHJxKSk7CisJCWVyciA9IHJlbGVhc2VfcXVldWUoZW5naW5lLCB2bWEsIDEsIGVmZmVjdGl2 ZV9kZWFkbGluZShycSkpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfcnE7CiAKQEAgLTE0NzYs NiArMTQ4Miw3IEBAIHN0YXRpYyBpbnQgbGl2ZV90aW1lc2xpY2Vfbm9wcmVlbXB0KHZvaWQgKmFy ZykKIAkJCWdvdG8gb3V0X3NwaW47CiAJCX0KIAorCQlycS0+c2NoZWQuZGVhZGxpbmUgPSAwOwog CQlycS0+c2NoZWQuYXR0ci5wcmlvcml0eSA9IEk5MTVfUFJJT1JJVFlfQkFSUklFUjsKIAkJaTkx NV9yZXF1ZXN0X2dldChycSk7CiAJCWk5MTVfcmVxdWVzdF9hZGQocnEpOwpAQCAtMTg0OCw2ICsx ODU1LDcgQEAgc3RhdGljIGludCBsaXZlX2xhdGVfcHJlZW1wdCh2b2lkICphcmcpCiAKIAkvKiBN YWtlIHN1cmUgY3R4X2xvIHN0YXlzIGJlZm9yZSBjdHhfaGkgdW50aWwgd2UgdHJpZ2dlciBwcmVl bXB0aW9uLiAqLwogCWN0eF9sby0+c2NoZWQucHJpb3JpdHkgPSAxOworCWN0eF9oaS0+c2NoZWQu cHJpb3JpdHkgPSBJOTE1X1BSSU9SSVRZX01JTjsKIAogCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUs IGd0LCBpZCkgewogCQlzdHJ1Y3QgaWd0X2xpdmVfdGVzdCB0OwpAQCAtMjk0OSw2ICsyOTU3LDkg QEAgc3RhdGljIGludCBsaXZlX3ByZWVtcHRfZ2FuZyh2b2lkICphcmcpCiAJCQlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpuID0KIAkJCQlsaXN0X25leHRfZW50cnkocnEsIGNsaWVudF9saW5rKTsKIAor CQkJLyogV2l0aCBkZWFkbGluZXMsIG5vIHN0cmljdCBwcmlvcml0eSBvcmRlcmluZyAqLworCQkJ aTkxNV9yZXF1ZXN0X3NldF9kZWFkbGluZShycSwgMCk7CisKIAkJCWlmIChlcnIgPT0gMCAmJiBp OTE1X3JlcXVlc3Rfd2FpdChycSwgMCwgSFogLyA1KSA8IDApIHsKIAkJCQlzdHJ1Y3QgZHJtX3By aW50ZXIgcCA9CiAJCQkJCWRybV9pbmZvX3ByaW50ZXIoZW5naW5lLT5pOTE1LT5kcm0uZGV2KTsK QEAgLTMxNzAsNyArMzE4MSw3IEBAIHN0YXRpYyBpbnQgcHJlZW1wdF91c2VyKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKIAlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKIAlpOTE1X3JlcXVl c3RfYWRkKHJxKTsKIAotCWk5MTVfcmVxdWVzdF9zZXRfcHJpb3JpdHkocnEsIEk5MTVfUFJJT1JJ VFlfTUFYKTsKKwlpOTE1X3JlcXVlc3Rfc2V0X2RlYWRsaW5lKHJxLCAwKTsKIAogCWlmIChpOTE1 X3JlcXVlc3Rfd2FpdChycSwgMCwgSFogLyAyKSA8IDApCiAJCWVyciA9IC1FVElNRTsKQEAgLTQ3 MDgsNiArNDcxOSw3IEBAIHN0YXRpYyBpbnQgZW1pdF9zZW1hcGhvcmVfc2lnbmFsKHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSwgdm9pZCAqc2xvdCkKIAogCWludGVsX3JpbmdfYWR2YW5jZShycSwg Y3MpOwogCisJcnEtPnNjaGVkLmRlYWRsaW5lID0gMDsKIAlycS0+c2NoZWQuYXR0ci5wcmlvcml0 eSA9IEk5MTVfUFJJT1JJVFlfQkFSUklFUjsKIAlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKIAlyZXR1 cm4gMDsKQEAgLTUyMTcsNiArNTIyOSwxMCBAQCBzdGF0aWMgaW50IF9fbGl2ZV9scmNfZ3ByKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJZXJyID0gZW1pdF9zZW1hcGhvcmVfc2ln bmFsKGVuZ2luZS0+a2VybmVsX2NvbnRleHQsIHNsb3QpOwogCQlpZiAoZXJyKQogCQkJZ290byBl cnJfcnE7CisKKwkJZXJyID0gd2FpdF9mb3Jfc3VibWl0KGVuZ2luZSwgcnEsIEhaIC8gMik7CisJ CWlmIChlcnIpCisJCQlnb3RvIGVycl9ycTsKIAl9IGVsc2UgewogCQlzbG90WzBdID0gMTsKIAkJ d21iKCk7CkBAIC01Nzc0LDYgKzU3OTAsNyBAQCBzdGF0aWMgaW50IHBvaXNvbl9yZWdpc3RlcnMo c3RydWN0IGludGVsX2NvbnRleHQgKmNlLCB1MzIgcG9pc29uLCB1MzIgKnNlbWEpCiAKIAlpbnRl bF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKIAorCXJxLT5zY2hlZC5kZWFkbGluZSA9IDA7CiAJcnEt PnNjaGVkLmF0dHIucHJpb3JpdHkgPSBJOTE1X1BSSU9SSVRZX0JBUlJJRVI7CiBlcnJfcnE6CiAJ aTkxNV9yZXF1ZXN0X2FkZChycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv aW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwppbmRleCA4YjU2Y2YwZDk3MGUuLmUzMWY5YjJjMTJjYyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Np b24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lv bi5jCkBAIC0zMzMsOCArMzMzLDYgQEAgc3RhdGljIHZvaWQgX19ndWNfZGVxdWV1ZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCWk5MTVfcHJpb2xpc3RfZnJlZShwKTsKIAl9CiBk b25lOgotCWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCA9Ci0JCXJiID8gdG9fcHJpb2xp c3QocmIpLT5wcmlvcml0eSA6IElOVF9NSU47CiAJaWYgKHN1Ym1pdCkgewogCQkqcG9ydCA9IHNj aGVkdWxlX2luKGxhc3QsIHBvcnQgLSBleGVjbGlzdHMtPmluZmxpZ2h0KTsKIAkJKisrcG9ydCA9 IE5VTEw7CkBAIC00NzMsMTIgKzQ3MSwxMCBAQCBzdGF0aWMgdm9pZCBndWNfcmVzZXRfY2FuY2Vs KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJcmJfZXJhc2VfY2FjaGVkKCZwLT5u b2RlLCAmZXhlY2xpc3RzLT5xdWV1ZSk7CiAJCWk5MTVfcHJpb2xpc3RfZnJlZShwKTsKIAl9CisJ R0VNX0JVR19PTighUkJfRU1QVFlfUk9PVCgmZXhlY2xpc3RzLT5xdWV1ZS5yYl9yb290KSk7CiAK IAkvKiBSZW1haW5pbmcgX3VucmVhZHlfIHJlcXVlc3RzIHdpbGwgYmUgbm9wJ2VkIHdoZW4gc3Vi bWl0dGVkICovCiAKLQlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwot CWV4ZWNsaXN0cy0+cXVldWUgPSBSQl9ST09UX0NBQ0hFRDsKLQogCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCmluZGV4IGJjMmZhODRmOThhOC4uNDNhMGFjNDUy OTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ByaW9saXN0X3R5cGVz LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCkBAIC0y Miw2ICsyMiw4IEBAIGVudW0gewogCiAJLyogSW50ZXJhY3RpdmUgd29ya2xvYWQsIHNjaGVkdWxl ZCBmb3IgaW1tZWRpYXRlIHBhZ2VmbGlwcGluZyAqLwogCUk5MTVfUFJJT1JJVFlfRElTUExBWSwK KworCV9fSTkxNV9QUklPUklUWV9LRVJORUxfXwogfTsKIAogLyogU21hbGxlc3QgcHJpb3JpdHkg dmFsdWUgdGhhdCBjYW5ub3QgYmUgYnVtcGVkLiAqLwpAQCAtMzUsMTMgKzM3LDEyIEBAIGVudW0g ewogICogaS5lLiBub3RoaW5nIGNhbiBoYXZlIGhpZ2hlciBwcmlvcml0eSBhbmQgZm9yY2UgdXMg dG8gdXN1cnAgdGhlCiAgKiBhY3RpdmUgcmVxdWVzdC4KICAqLwotI2RlZmluZSBJOTE1X1BSSU9S SVRZX1VOUFJFRU1QVEFCTEUgSU5UX01BWAotI2RlZmluZSBJOTE1X1BSSU9SSVRZX0JBUlJJRVIg KEk5MTVfUFJJT1JJVFlfVU5QUkVFTVBUQUJMRSAtIDEpCisjZGVmaW5lIEk5MTVfUFJJT1JJVFlf QkFSUklFUiBJTlRfTUFYCiAKIHN0cnVjdCBpOTE1X3ByaW9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9o ZWFkIHJlcXVlc3RzOwogCXN0cnVjdCByYl9ub2RlIG5vZGU7Ci0JaW50IHByaW9yaXR5OworCXU2 NCBkZWFkbGluZTsKIH07CiAKICNlbmRpZiAvKiBfSTkxNV9QUklPTElTVF9UWVBFU19IXyAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwppbmRleCA4YTkzOTk2MDhjZjIuLmE4MGRjNWVh ZTU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKQEAgLTY4NSw2ICs2ODUsNyBA QCBzZW1hcGhvcmVfbm90aWZ5KHN0cnVjdCBpOTE1X3N3X2ZlbmNlICpmZW5jZSwgZW51bSBpOTE1 X3N3X2ZlbmNlX25vdGlmeSBzdGF0ZSkKIAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIEZFTkNF X0NPTVBMRVRFOgorCQlpOTE1X3JlcXVlc3RfdXBkYXRlX2RlYWRsaW5lKHJxKTsKIAkJYnJlYWs7 CiAKIAljYXNlIEZFTkNFX0ZSRUU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3NjaGVkdWxlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwpp bmRleCA2NTAwZjA0YzVmMzkuLmM3NmMwYTFhOGZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3NjaGVkdWxlci5jCkBAIC0yMCw2ICsyMCwxMSBAQCBzdGF0aWMgc3RydWN0IGk5MTVfZ2xvYmFs X3NjaGVkdWxlciB7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwaV9sb2NrKTsKIHN0YXRpYyBM SVNUX0hFQUQoaXBpX2xpc3QpOwogCitzdGF0aWMgaW5saW5lIHU2NCBycV9kZWFkbGluZShjb25z dCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKK3sKKwlyZXR1cm4gUkVBRF9PTkNFKHJxLT5zY2hl ZC5kZWFkbGluZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHJxX3ByaW8oY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCiB7CiAJcmV0dXJuIFJFQURfT05DRShycS0+c2NoZWQuYXR0ci5w cmlvcml0eSk7CkBAIC0zMiw2ICszNyw3IEBAIHN0YXRpYyB2b2lkIGlwaV9zY2hlZHVsZShzdHJ1 Y3QgaXJxX3dvcmsgKndyaykKIAkJc3RydWN0IGk5MTVfZGVwZW5kZW5jeSAqcDsKIAkJc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnE7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXU2NCBkZWFkbGlu ZTsKIAkJaW50IHByaW87CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwaV9sb2NrLCBmbGFncyk7 CkBAIC00MCw3ICs0NiwxMCBAQCBzdGF0aWMgdm9pZCBpcGlfc2NoZWR1bGUoc3RydWN0IGlycV93 b3JrICp3cmspCiAJCQlycSA9IGNvbnRhaW5lcl9vZihwLT5zaWduYWxlciwgdHlwZW9mKCpycSks IHNjaGVkKTsKIAkJCWxpc3RfZGVsX2luaXQoJnAtPmlwaV9saW5rKTsKIAorCQkJZGVhZGxpbmUg PSBwLT5pcGlfZGVhZGxpbmU7CiAJCQlwcmlvID0gcC0+aXBpX3ByaW9yaXR5OworCisJCQlwLT5p cGlfZGVhZGxpbmUgPSBJOTE1X0RFQURMSU5FX05FVkVSOwogCQkJcC0+aXBpX3ByaW9yaXR5ID0g STkxNV9QUklPUklUWV9JTlZBTElEOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlw aV9sb2NrLCBmbGFncyk7CkBAIC01Miw2ICs2MSw4IEBAIHN0YXRpYyB2b2lkIGlwaV9zY2hlZHVs ZShzdHJ1Y3QgaXJxX3dvcmsgKndyaykKIAogCQlpZiAocHJpbyA+IHJxX3ByaW8ocnEpKQogCQkJ aTkxNV9yZXF1ZXN0X3NldF9wcmlvcml0eShycSwgcHJpbyk7CisJCWlmIChkZWFkbGluZSA8IHJx X2RlYWRsaW5lKHJxKSkKKwkJCWk5MTVfcmVxdWVzdF9zZXRfZGVhZGxpbmUocnEsIGRlYWRsaW5l KTsKIAl9IHdoaWxlICgxKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTk5LDI4ICsxMTAs OCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X3ByaW9saXN0ICp0b19wcmlvbGlzdChzdHJ1 Y3QgcmJfbm9kZSAqcmIpCiAJcmV0dXJuIHJiX2VudHJ5KHJiLCBzdHJ1Y3QgaTkxNV9wcmlvbGlz dCwgbm9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFzc2VydF9wcmlvbGlzdHMoc3RydWN0IGludGVs X2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMpCi17Ci0Jc3RydWN0IHJiX25vZGUg KnJiOwotCWxvbmcgbGFzdF9wcmlvOwotCi0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19EUk1fSTkx NV9ERUJVR19HRU0pKQotCQlyZXR1cm47Ci0KLQlHRU1fQlVHX09OKHJiX2ZpcnN0X2NhY2hlZCgm ZXhlY2xpc3RzLT5xdWV1ZSkgIT0KLQkJICAgcmJfZmlyc3QoJmV4ZWNsaXN0cy0+cXVldWUucmJf cm9vdCkpOwotCi0JbGFzdF9wcmlvID0gSU5UX01BWDsKLQlmb3IgKHJiID0gcmJfZmlyc3RfY2Fj aGVkKCZleGVjbGlzdHMtPnF1ZXVlKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKLQkJY29uc3Qg c3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSB0b19wcmlvbGlzdChyYik7Ci0KLQkJR0VNX0JVR19P TihwLT5wcmlvcml0eSA+IGxhc3RfcHJpbyk7Ci0JCWxhc3RfcHJpbyA9IHAtPnByaW9yaXR5Owot CX0KLX0KLQogc3RydWN0IGxpc3RfaGVhZCAqCi1pOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGludCBwcmlvKQoraTkxNV9zY2hlZF9sb29r dXBfcHJpb2xpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1NjQgZGVhZGxpbmUp CiB7CiAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAm ZW5naW5lLT5leGVjbGlzdHM7CiAJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnA7CkBAIC0xMjgsMTAg KzExOSw5IEBAIGk5MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwgaW50IHByaW8pCiAJYm9vbCBmaXJzdCA9IHRydWU7CiAKIAlsb2NrZGVwX2Fz c2VydF9oZWxkKCZlbmdpbmUtPmFjdGl2ZS5sb2NrKTsKLQlhc3NlcnRfcHJpb2xpc3RzKGV4ZWNs aXN0cyk7CiAKIAlpZiAodW5saWtlbHkoZXhlY2xpc3RzLT5ub19wcmlvbGlzdCkpCi0JCXByaW8g PSBJOTE1X1BSSU9SSVRZX05PUk1BTDsKKwkJZGVhZGxpbmUgPSAwOwogCiBmaW5kX3ByaW9saXN0 OgogCS8qIG1vc3QgcG9zaXRpdmUgcHJpb3JpdHkgaXMgc2NoZWR1bGVkIGZpcnN0LCBlcXVhbCBw cmlvcml0aWVzIGZpZm8gKi8KQEAgLTE0MCw5ICsxMzAsOSBAQCBpOTE1X3NjaGVkX2xvb2t1cF9w cmlvbGlzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGludCBwcmlvKQogCXdoaWxl ICgqcGFyZW50KSB7CiAJCXJiID0gKnBhcmVudDsKIAkJcCA9IHRvX3ByaW9saXN0KHJiKTsKLQkJ aWYgKHByaW8gPiBwLT5wcmlvcml0eSkgeworCQlpZiAoZGVhZGxpbmUgPCBwLT5kZWFkbGluZSkg ewogCQkJcGFyZW50ID0gJnJiLT5yYl9sZWZ0OwotCQl9IGVsc2UgaWYgKHByaW8gPCBwLT5wcmlv cml0eSkgeworCQl9IGVsc2UgaWYgKGRlYWRsaW5lID4gcC0+ZGVhZGxpbmUpIHsKIAkJCXBhcmVu dCA9ICZyYi0+cmJfcmlnaHQ7CiAJCQlmaXJzdCA9IGZhbHNlOwogCQl9IGVsc2UgewpAQCAtMTUw LDEzICsxNDAsMTMgQEAgaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3Qoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLCBpbnQgcHJpbykKIAkJfQogCX0KIAotCWlmIChwcmlvID09IEk5MTVf UFJJT1JJVFlfTk9STUFMKSB7CisJaWYgKCFkZWFkbGluZSkgewogCQlwID0gJmV4ZWNsaXN0cy0+ ZGVmYXVsdF9wcmlvbGlzdDsKIAl9IGVsc2UgewogCQlwID0ga21lbV9jYWNoZV9hbGxvYyhnbG9i YWwuc2xhYl9wcmlvcml0aWVzLCBHRlBfQVRPTUlDKTsKIAkJLyogQ29udmVydCBhbiBhbGxvY2F0 aW9uIGZhaWx1cmUgdG8gYSBwcmlvcml0eSBidW1wICovCiAJCWlmICh1bmxpa2VseSghcCkpIHsK LQkJCXByaW8gPSBJOTE1X1BSSU9SSVRZX05PUk1BTDsgLyogcmVjdXJzZXMganVzdCBvbmNlICov CisJCQlkZWFkbGluZSA9IDA7IC8qIHJlY3Vyc2VzIGp1c3Qgb25jZSAqLwogCiAJCQkvKiBUbyBt YWludGFpbiBvcmRlcmluZyB3aXRoIGFsbCByZW5kZXJpbmcsIGFmdGVyIGFuCiAJCQkgKiBhbGxv Y2F0aW9uIGZhaWx1cmUgd2UgaGF2ZSB0byBkaXNhYmxlIGFsbCBzY2hlZHVsaW5nLgpAQCAtMTcx LDcgKzE2MSw3IEBAIGk5MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwgaW50IHByaW8pCiAJCX0KIAl9CiAKLQlwLT5wcmlvcml0eSA9IHByaW87 CisJcC0+ZGVhZGxpbmUgPSBkZWFkbGluZTsKIAlJTklUX0xJU1RfSEVBRCgmcC0+cmVxdWVzdHMp OwogCiAJcmJfbGlua19ub2RlKCZwLT5ub2RlLCByYiwgcGFyZW50KTsKQEAgLTE4MCw3MCArMTcw LDIyOCBAQCBpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIGludCBwcmlvKQogCXJldHVybiAmcC0+cmVxdWVzdHM7CiB9CiAKLXZvaWQgX19p OTE1X3ByaW9saXN0X2ZyZWUoc3RydWN0IGk5MTVfcHJpb2xpc3QgKnApCit2b2lkIGk5MTVfcHJp b2xpc3RfZnJlZShzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUo Z2xvYmFsLnNsYWJfcHJpb3JpdGllcywgcCk7CisJaWYgKHAtPmRlYWRsaW5lKQorCQlrbWVtX2Nh Y2hlX2ZyZWUoZ2xvYmFsLnNsYWJfcHJpb3JpdGllcywgcCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg Ym9vbCBuZWVkX3ByZWVtcHQoaW50IHByaW8sIGludCBhY3RpdmUpCitzdGF0aWMgYm9vbCBraWNr X3N1Ym1pc3Npb24oY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1NjQgZGVh ZGxpbmUpCiB7Ci0JLyoKLQkgKiBBbGxvdyBwcmVlbXB0aW9uIG9mIGxvdyAtPiBub3JtYWwgLT4g aGlnaCwgYnV0IHdlIGRvCi0JICogbm90IGFsbG93IGxvdyBwcmlvcml0eSB0YXNrcyB0byBwcmVl bXB0IG90aGVyIGxvdyBwcmlvcml0eQotCSAqIHRhc2tzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRo YXQgbGF0ZW5jeSBmb3IgbG93IHByaW9yaXR5Ci0JICogdGFza3MgZG9lcyBub3QgbWF0dGVyIChh cyBtdWNoIGFzIGJhY2tncm91bmQgdGhyb3VnaHB1dCksCi0JICogc28ga2lzcy4KLQkgKi8KLQly ZXR1cm4gcHJpbyA+PSBtYXgoSTkxNV9QUklPUklUWV9OT1JNQUwsIGFjdGl2ZSk7CisJY29uc3Qg c3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmVsID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwor CWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKmluZmxpZ2h0OworCWJvb2wga2ljayA9IHRydWU7 CisKKwlpZiAodG9fcHJpb2xpc3QocmJfZmlyc3RfY2FjaGVkKCZlbC0+cXVldWUpKS0+ZGVhZGxp bmUgPCBkZWFkbGluZSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmN1X3JlYWRfbG9jaygpOworCWlu ZmxpZ2h0ID0gZXhlY2xpc3RzX2FjdGl2ZShlbCk7CisJaWYgKGluZmxpZ2h0KQorCQlraWNrID0g ZGVhZGxpbmUgPCBycV9kZWFkbGluZShpbmZsaWdodCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisK KwlyZXR1cm4ga2ljazsKIH0KIAotc3RhdGljIHZvaWQga2lja19zdWJtaXNzaW9uKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSwKLQkJCSAgICBpbnQgcHJpbykKK3N0YXRpYyBib29sIF9faTkxNV9yZXF1ZXN0X3NldF9k ZWFkbGluZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTY0IGRlYWRsaW5lKQogewotCWNvbnN0 IHN0cnVjdCBpOTE1X3JlcXVlc3QgKmluZmxpZ2h0OworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSA9IHJxLT5lbmdpbmU7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqcm47CisJc3RydWN0 IGxpc3RfaGVhZCAqcGxpc3Q7CisJTElTVF9IRUFEKGRmcyk7CiAKLQkvKgotCSAqIFdlIG9ubHkg bmVlZCB0byBraWNrIHRoZSB0YXNrbGV0IG9uY2UgZm9yIHRoZSBoaWdoIHByaW9yaXR5Ci0JICog bmV3IGNvbnRleHQgd2UgYWRkIGludG8gdGhlIHF1ZXVlLgotCSAqLwotCWlmIChwcmlvIDw9IGVu Z2luZS0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQpCi0JCXJldHVybjsKKwlsb2NrZGVw X2Fzc2VydF9oZWxkKCZlbmdpbmUtPmFjdGl2ZS5sb2NrKTsKKwlsaXN0X2FkZCgmcnEtPnNjaGVk LmRmcywgJmRmcyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShy cSwgJmRmcywgc2NoZWQuZGZzKSB7CisJCXN0cnVjdCBpOTE1X2RlcGVuZGVuY3kgKnA7CiAKLQkv KiBOb3RoaW5nIGN1cnJlbnRseSBhY3RpdmU/IFdlJ3JlIG92ZXJkdWUgZm9yIGEgc3VibWlzc2lv biEgKi8KLQlpbmZsaWdodCA9IGV4ZWNsaXN0c19hY3RpdmUoJmVuZ2luZS0+ZXhlY2xpc3RzKTsK LQlpZiAoIWluZmxpZ2h0KQorCQlHRU1fQlVHX09OKHJxLT5lbmdpbmUgIT0gZW5naW5lKTsKKwor CQlmb3JfZWFjaF9zaWduYWxlcihwLCBycSkgeworCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcyA9 CisJCQkJY29udGFpbmVyX29mKHAtPnNpZ25hbGVyLCB0eXBlb2YoKnMpLCBzY2hlZCk7CisKKwkJ CUdFTV9CVUdfT04ocyA9PSBycSk7CisKKwkJCWlmIChycV9kZWFkbGluZShzKSA8PSBkZWFkbGlu ZSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocykpCisJ CQkJY29udGludWU7CisKKwkJCWlmIChzLT5lbmdpbmUgIT0gcnEtPmVuZ2luZSkgeworCQkJCXNw aW5fbG9jaygmaXBpX2xvY2spOworCQkJCWlmIChkZWFkbGluZSA8IHAtPmlwaV9kZWFkbGluZSkg eworCQkJCQlwLT5pcGlfZGVhZGxpbmUgPSBkZWFkbGluZTsKKwkJCQkJbGlzdF9tb3ZlKCZwLT5p cGlfbGluaywgJmlwaV9saXN0KTsKKwkJCQkJaXJxX3dvcmtfcXVldWUoJmlwaV93b3JrKTsKKwkJ CQl9CisJCQkJc3Bpbl91bmxvY2soJmlwaV9sb2NrKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwor CQkJbGlzdF9tb3ZlX3RhaWwoJnMtPnNjaGVkLmRmcywgJmRmcyk7CisJCX0KKwl9CisKKwlwbGlz dCA9IGk5MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgZGVhZGxpbmUpOworCisJLyog RmlmbyBhbmQgZGVwdGgtZmlyc3QgcmVwbGFjZW1lbnQgZW5zdXJlIG91ciBkZXBzIGV4ZWN1dGUg Zmlyc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShycSwgcm4sICZkZnMs IHNjaGVkLmRmcykgeworCQlHRU1fQlVHX09OKHJxLT5lbmdpbmUgIT0gZW5naW5lKTsKKwkJR0VN X0JVR19PTihkZWFkbGluZSA+IHJxX2RlYWRsaW5lKHJxKSk7CisKKwkJSU5JVF9MSVNUX0hFQUQo JnJxLT5zY2hlZC5kZnMpOworCQlXUklURV9PTkNFKHJxLT5zY2hlZC5kZWFkbGluZSwgZGVhZGxp bmUpOworCQlSUV9UUkFDRShycSwgInNldC1kZWFkbGluZTolbGx1XG4iLCBkZWFkbGluZSk7CisK KwkJLyoKKwkJICogT25jZSB0aGUgcmVxdWVzdCBpcyByZWFkeSwgaXQgd2lsbCBiZSBwbGFjZWQg aW50byB0aGUKKwkJICogcHJpb3JpdHkgbGlzdHMgYW5kIHRoZW4gb250byB0aGUgSFcgcnVubGlz dC4gQmVmb3JlIHRoZQorCQkgKiByZXF1ZXN0IGlzIHJlYWR5LCBpdCBkb2VzIG5vdCBjb250cmli dXRlIHRvIG91ciBwcmVlbXB0aW9uCisJCSAqIGRlY2lzaW9ucyBhbmQgd2UgY2FuIHNhZmVseSBp Z25vcmUgaXQsIGFzIGl0IHdpbGwsIGFuZAorCQkgKiBhbnkgcHJlZW1wdGlvbiByZXF1aXJlZCwg YmUgZGVhbHQgd2l0aCB1cG9uIHN1Ym1pc3Npb24uCisJCSAqIFNlZSBlbmdpbmUtPnN1Ym1pdF9y ZXF1ZXN0KCkKKwkJICovCisKKwkJaWYgKGk5MTVfcmVxdWVzdF9pbl9wcmlvcml0eV9xdWV1ZShy cSkpCisJCQlsaXN0X21vdmVfdGFpbCgmcnEtPnNjaGVkLmxpbmssIHBsaXN0KTsKKwl9CisKKwly ZXR1cm4ga2lja19zdWJtaXNzaW9uKGVuZ2luZSwgZGVhZGxpbmUpOworfQorCit2b2lkIGk5MTVf cmVxdWVzdF9zZXRfZGVhZGxpbmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHU2NCBkZWFkbGlu ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKworCWVuZ2luZSA9IGxvY2tfZW5naW5lX2lycXNhdmUocnEsIGZsYWdzKTsKKwlpZiAo IWludGVsX2VuZ2luZV9oYXNfc2NoZWR1bGVyKGVuZ2luZSkpCiAJCWdvdG8gdW5sb2NrOwogCi0J LyoKLQkgKiBJZiB3ZSBhcmUgYWxyZWFkeSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb250ZXh0 LCBkb24ndAotCSAqIGJvdGhlciBldmFsdWF0aW5nIGlmIHdlIHNob3VsZCBwcmVlbXB0IG91cnNl bHZlcy4KLQkgKi8KLQlpZiAoaW5mbGlnaHQtPmNvbnRleHQgPT0gcnEtPmNvbnRleHQpCisJaWYg KGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQogCQlnb3RvIHVubG9jazsKIAotCUVOR0lORV9U UkFDRShlbmdpbmUsCi0JCSAgICAgImJ1bXBpbmcgcXVldWUtcHJpb3JpdHktaGludDolZCBmb3Ig cnE6JWxseDolbGxkLCBpbmZsaWdodDolbGx4OiVsbGQgcHJpbyAlZFxuIiwKLQkJICAgICBwcmlv LAotCQkgICAgIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8sCi0JCSAgICAgaW5m bGlnaHQtPmZlbmNlLmNvbnRleHQsIGluZmxpZ2h0LT5mZW5jZS5zZXFubywKLQkJICAgICBpbmZs aWdodC0+c2NoZWQuYXR0ci5wcmlvcml0eSk7CisJaWYgKGRlYWRsaW5lID49IHJxX2RlYWRsaW5l KHJxKSkKKwkJZ290byB1bmxvY2s7CiAKLQllbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0 eV9oaW50ID0gcHJpbzsKLQlpZiAobmVlZF9wcmVlbXB0KHByaW8sIHJxX3ByaW8oaW5mbGlnaHQp KSkKKwlpZiAoX19pOTE1X3JlcXVlc3Rfc2V0X2RlYWRsaW5lKHJxLCBkZWFkbGluZSkpCiAJCXRh c2tsZXRfaGlfc2NoZWR1bGUoJmVuZ2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQpOwogCiB1bmxvY2s6 CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwor fQorCitzdGF0aWMgdTY0IHByaW9fc2xpY2UoaW50IHByaW8pCit7CisJdTY0IHNsaWNlOworCWlu dCBzZjsKKworCS8qCisJICogVGhpcyBpcyB0aGUgY2VudHJhbCBoZXVyaXN0aWMgdG8gdGhlIHZp cnR1YWwgZGVhZGxpbmVzLiBCeQorCSAqIGltcG9zaW5nIHRoYXQgZWFjaCB0YXNrIHRha2VzIGFu IGVxdWFsIGFtb3VudCBvZiB0aW1lLCB3ZQorCSAqIGxldCBlYWNoIGNsaWVudCBoYXZlIGFuIGVx dWFsIHNsaWNlIG9mIHRoZSBHUFUgdGltZS4gQnkKKwkgKiBicmluZ2luZyB0aGUgdmlydHVhbCBk ZWFkbGluZSBmb3J3YXJkLCB0aGF0IGNsaWVudCB3aWxsIHRoZW4KKwkgKiBoYXZlIG1vcmUgR1BV IHRpbWUsIGFuZCB2aWNlIHZlcnNhIGEgbG93ZXIgcHJpb3JpdHkgY2xpZW50IHdpbGwKKwkgKiBo YXZlIGEgbGF0ZXIgZGVhZGxpbmUgYW5kIHJlY2VpdmUgbGVzcyBHUFUgdGltZS4KKwkgKgorCSAq IEluIEJGUy9NdVFTUywgdGhlIHByaW9fcmF0aW9zW10gYXJlIGJhc2VkIG9uIHRoZSB0YXNrIG5p Y2UgcmFuZ2Ugb2YKKwkgKiBbLTIwLCAyMF0sIHdpdGggZWFjaCBsb3dlciBwcmlvcml0eSBoYXZp bmcgYSB+MTAlIGxvbmdlciBkZWFkbGluZSwKKwkgKiB3aXRoIHRoZSBub3RlIHRoYXQgdGhlIHBy b3BvcnRpb24gb2YgQ1BVIHRpbWUgYmV0d2VlbiB0d28gY2xpZW50cworCSAqIG9mIGRpZmZlcmVu dCBwcmlvcml0eSB3aWxsIGJlIHRoZSBzcXVhcmUgb2YgdGhlIHJlbGF0aXZlIHByaW9fc2xpY2Uu CisJICoKKwkgKiBJbiBjb250cmFzdCwgdGhpcyBwcmlvX3NsaWNlKCkgY3VydmUgd2FzIGNob3Nl biBiZWNhdXNlIGl0IGdhdmUgZ29vZAorCSAqIHJlc3VsdHMgd2l0aCBpZ3QvZ2VtX2V4ZWNfc2No ZWR1bGUuIEl0IG1heSBub3QgYmUgdGhlIGJlc3QgY2hvaWNlIQorCSAqCisJICogV2l0aCBhIDFt cyBzY2hlZHVsaW5nIHF1YW50dW06CisJICoKKwkgKiAgIE1BWCBVU0VSOiAgfjMydXMgZGVhZGxp bmUKKwkgKiAgIDA6ICAgICAgICAgfjE2bXMgZGVhZGxpbmUKKwkgKiAgIE1JTl9VU0VSOiAxMDAw bXMgZGVhZGxpbmUKKwkgKi8KKworCWlmIChwcmlvID49IF9fSTkxNV9QUklPUklUWV9LRVJORUxf XykKKwkJcmV0dXJuIElOVF9NQVggLSBwcmlvOworCisJc2xpY2UgPSBfX0k5MTVfUFJJT1JJVFlf S0VSTkVMX18gLSBwcmlvOworCWlmIChwcmlvID49IDApCisJCXNmID0gMjAgLSA2OworCWVsc2UK KwkJc2YgPSAyMCAtIDE7CisKKwlyZXR1cm4gc2xpY2UgPDwgc2Y7Cit9CisKK3U2NCBpOTE1X3Nj aGVkdWxlcl92aXJ0dWFsX2RlYWRsaW5lKHU2NCBrdCwgaW50IHByaW9yaXR5KQoreworCXJldHVy biBpOTE1X3NjaGVkX3RvX3RpY2tzKGt0ICsgcHJpb19zbGljZShwcmlvcml0eSkpOworfQorCit1 NjQgaTkxNV9zY2hlZHVsZXJfbmV4dF92aXJ0dWFsX2RlYWRsaW5lKGludCBwcmlvcml0eSkKK3sK KwlyZXR1cm4gaTkxNV9zY2hlZHVsZXJfdmlydHVhbF9kZWFkbGluZShrdGltZV9nZXQoKSwgcHJp b3JpdHkpOworfQorCitzdGF0aWMgdTY0IHNpZ25hbF9kZWFkbGluZShjb25zdCBzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSkKK3sKKwl1NjQgbGFzdCA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsK Kwljb25zdCBzdHJ1Y3QgaTkxNV9kZXBlbmRlbmN5ICpwOworCisJLyoKKwkgKiBGaW5kIHRoZSBl YXJsaWVzdCBwb2ludCBhdCB3aGljaCB3ZSB3aWxsIGJlY29tZSAncmVhZHknLAorCSAqIHdoaWNo IHdlIGluZmVyIGZyb20gdGhlIGRlYWRsaW5lIG9mIGFsbCBhY3RpdmUgc2lnbmFsZXJzLgorCSAq IFdlIHdpbGwgcG9zaXRpb24gb3Vyc2VsdmVzIGF0IHRoZSBlbmQgb2YgdGhhdCBjaGFpbiBvZiB3 b3JrLgorCSAqLworCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX3NpZ25hbGVyKHAsIHJx KSB7CisJCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnMgPQorCQkJY29udGFpbmVyX29mKHAt PnNpZ25hbGVyLCB0eXBlb2YoKnMpLCBzY2hlZCk7CisJCXU2NCBkZWFkbGluZTsKKworCQlpZiAo aTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChycV9wcmlv KHMpIDwgcnFfcHJpbyhycSkpCisJCQljb250aW51ZTsKKworCQlkZWFkbGluZSA9IGk5MTVfc2No ZWRfdG9fbnMocnFfZGVhZGxpbmUocykpOworCQlpZiAocC0+ZmxhZ3MgJiBJOTE1X0RFUEVOREVO Q1lfV0VBSykKKwkJCWRlYWRsaW5lIC09IHByaW9fc2xpY2UocnFfcHJpbyhzKSk7CisKKwkJbGFz dCA9IG1heChsYXN0LCBkZWFkbGluZSk7CisJfQogCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0 dXJuIGxhc3Q7CiB9CiAKLXN0YXRpYyB2b2lkIF9faTkxNV9yZXF1ZXN0X3NldF9wcmlvcml0eShz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgaW50IHByaW8pCitzdGF0aWMgdTY0IGVhcmxpZXN0X2Rl YWRsaW5lKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQoreworCXJldHVybiBpOTE1X3Nj aGVkdWxlcl92aXJ0dWFsX2RlYWRsaW5lKHNpZ25hbF9kZWFkbGluZShycSksCisJCQkJCSAgICAg ICBycV9wcmlvKHJxKSk7Cit9CisKK3N0YXRpYyBib29sIHNldF9lYXJsaWVzdF9kZWFkbGluZShz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTY0IG9sZCkKK3sKKwl1NjQgZGw7CisKKwkvKiBSZWNv bXB1dGUgb3VyIGRlYWRsaW5lcyBhbmQgcHJvbW90ZSBhZnRlciBhIHByaW9yaXR5IGNoYW5nZSAq LworCWRsID0gbWluKGVhcmxpZXN0X2RlYWRsaW5lKHJxKSwgcnFfZGVhZGxpbmUocnEpKTsKKwlp ZiAoZGwgPj0gb2xkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gX19pOTE1X3JlcXVlc3Rf c2V0X2RlYWRsaW5lKHJxLCBkbCk7Cit9CisKK3N0YXRpYyBib29sIF9faTkxNV9yZXF1ZXN0X3Nl dF9wcmlvcml0eShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgaW50IHByaW8pCiB7CiAJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcnEtPmVuZ2luZTsKIAlzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpybjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdDsKKwlib29sIGtpY2sgPSBmYWxzZTsK IAlMSVNUX0hFQUQoZGZzKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmVuZ2luZS0+YWN0aXZl LmxvY2spOwpAQCAtMzAwLDMyICs0NDgsMjAgQEAgc3RhdGljIHZvaWQgX19pOTE1X3JlcXVlc3Rf c2V0X3ByaW9yaXR5KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBpbnQgcHJpbykKIAkJfQogCX0K IAotCXBsaXN0ID0gaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKTsKLQot CS8qIEZpZm8gYW5kIGRlcHRoLWZpcnN0IHJlcGxhY2VtZW50IGVuc3VyZSBvdXIgZGVwcyBleGVj dXRlIGZpcnN0ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UocnEsIHJuLCAm ZGZzLCBzY2hlZC5kZnMpIHsKIAkJR0VNX0JVR19PTihycS0+ZW5naW5lICE9IGVuZ2luZSk7CisJ CUdFTV9CVUdfT04ocHJpbyA8IHJxX3ByaW8ocnEpKTsKIAogCQlJTklUX0xJU1RfSEVBRCgmcnEt PnNjaGVkLmRmcyk7CiAJCVdSSVRFX09OQ0UocnEtPnNjaGVkLmF0dHIucHJpb3JpdHksIHByaW8p OworCQlSUV9UUkFDRShycSwgInNldC1wcmlvcml0eTolZFxuIiwgcHJpbyk7CiAKLQkJLyoKLQkJ ICogT25jZSB0aGUgcmVxdWVzdCBpcyByZWFkeSwgaXQgd2lsbCBiZSBwbGFjZWQgaW50byB0aGUK LQkJICogcHJpb3JpdHkgbGlzdHMgYW5kIHRoZW4gb250byB0aGUgSFcgcnVubGlzdC4gQmVmb3Jl IHRoZQotCQkgKiByZXF1ZXN0IGlzIHJlYWR5LCBpdCBkb2VzIG5vdCBjb250cmlidXRlIHRvIG91 ciBwcmVlbXB0aW9uCi0JCSAqIGRlY2lzaW9ucyBhbmQgd2UgY2FuIHNhZmVseSBpZ25vcmUgaXQs IGFzIGl0IHdpbGwsIGFuZAotCQkgKiBhbnkgcHJlZW1wdGlvbiByZXF1aXJlZCwgYmUgZGVhbHQg d2l0aCB1cG9uIHN1Ym1pc3Npb24uCi0JCSAqIFNlZSBlbmdpbmUtPnN1Ym1pdF9yZXF1ZXN0KCkK LQkJICovCi0JCWlmICghaTkxNV9yZXF1ZXN0X2lzX3JlYWR5KHJxKSkKLQkJCWNvbnRpbnVlOwot Ci0JCWlmIChpOTE1X3JlcXVlc3RfaW5fcHJpb3JpdHlfcXVldWUocnEpKQotCQkJbGlzdF9tb3Zl X3RhaWwoJnJxLT5zY2hlZC5saW5rLCBwbGlzdCk7Ci0KLQkJLyogRGVmZXIgKHRhc2tsZXQpIHN1 Ym1pc3Npb24gdW50aWwgYWZ0ZXIgYWxsIHVwZGF0ZXMuICovCi0JCWtpY2tfc3VibWlzc2lvbihl bmdpbmUsIHJxLCBwcmlvKTsKKwkJaWYgKGk5MTVfcmVxdWVzdF9pc19yZWFkeShycSkgJiYKKwkJ ICAgIHNldF9lYXJsaWVzdF9kZWFkbGluZShycSwgcnFfZGVhZGxpbmUocnEpKSkKKwkJCWtpY2sg PSB0cnVlOwogCX0KKworCXJldHVybiBraWNrOwogfQogCiB2b2lkIGk5MTVfcmVxdWVzdF9zZXRf cHJpb3JpdHkoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIGludCBwcmlvKQpAQCAtMzQzLDcgKzQ3 OSwzOCBAQCB2b2lkIGk5MTVfcmVxdWVzdF9zZXRfcHJpb3JpdHkoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsIGludCBwcmlvKQogCWlmIChwcmlvIDw9IHJxX3ByaW8ocnEpKQogCQlnb3RvIHVubG9j azsKIAotCV9faTkxNV9yZXF1ZXN0X3NldF9wcmlvcml0eShycSwgcHJpbyk7CisJaWYgKF9faTkx NV9yZXF1ZXN0X3NldF9wcmlvcml0eShycSwgcHJpbykpCisJCXRhc2tsZXRfaGlfc2NoZWR1bGUo JmVuZ2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQpOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOworfQorCitib29sIGludGVsX2Vu Z2luZV9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQlz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKK3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZlbmdpbmUt PmFjdGl2ZS5sb2NrKTsKKwlzZXRfYml0KEk5MTVfRkVOQ0VfRkxBR19QUVVFVUUsICZycS0+ZmVu Y2UuZmxhZ3MpOworCXJldHVybiBzZXRfZWFybGllc3RfZGVhZGxpbmUocnEsIEk5MTVfREVBRExJ TkVfTkVWRVIpOworfQorCit2b2lkIGk5MTVfcmVxdWVzdF91cGRhdGVfZGVhZGxpbmUoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWk5MTVfcmVxdWVzdF9pc19yZWFkeShycSkp CisJCXJldHVybjsKKworCWVuZ2luZSA9IGxvY2tfZW5naW5lX2lycXNhdmUocnEsIGZsYWdzKTsK KwlpZiAoIWludGVsX2VuZ2luZV9oYXNfc2NoZWR1bGVyKGVuZ2luZSkpCisJCWdvdG8gdW5sb2Nr OworCisJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQorCQlnb3RvIHVubG9jazsKKwor CWlmIChzZXRfZWFybGllc3RfZGVhZGxpbmUocnEsIHJxX2RlYWRsaW5lKHJxKSkpCisJCXRhc2ts ZXRfaGlfc2NoZWR1bGUoJmVuZ2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQpOwogCiB1bmxvY2s6CiAJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwpAQCAt MzY0LDYgKzUzMSw3IEBAIHZvaWQgaTkxNV9zY2hlZF9ub2RlX2luaXQoc3RydWN0IGk5MTVfc2No ZWRfbm9kZSAqbm9kZSkKIHZvaWQgaTkxNV9zY2hlZF9ub2RlX3JlaW5pdChzdHJ1Y3QgaTkxNV9z Y2hlZF9ub2RlICpub2RlKQogewogCW5vZGUtPmF0dHIucHJpb3JpdHkgPSBJOTE1X1BSSU9SSVRZ X0lOVkFMSUQ7CisJbm9kZS0+ZGVhZGxpbmUgPSBJOTE1X0RFQURMSU5FX05FVkVSOwogCW5vZGUt PnNlbWFwaG9yZXMgPSAwOwogCW5vZGUtPmZsYWdzID0gMDsKIApAQCAtMzk2LDYgKzU2NCw3IEBA IGJvb2wgX19pOTE1X3NjaGVkX25vZGVfYWRkX2RlcGVuZGVuY3koc3RydWN0IGk5MTVfc2NoZWRf bm9kZSAqbm9kZSwKIAogCWlmICghbm9kZV9zaWduYWxlZChzaWduYWwpKSB7CiAJCUlOSVRfTElT VF9IRUFEKCZkZXAtPmlwaV9saW5rKTsKKwkJZGVwLT5pcGlfZGVhZGxpbmUgPSBJOTE1X0RFQURM SU5FX05FVkVSOwogCQlkZXAtPmlwaV9wcmlvcml0eSA9IEk5MTVfUFJJT1JJVFlfSU5WQUxJRDsK IAkJZGVwLT5zaWduYWxlciA9IHNpZ25hbDsKIAkJZGVwLT53YWl0ZXIgPSBub2RlOwpAQCAtNDg2 LDYgKzY1NSwxMCBAQCB2b2lkIGk5MTVfc2NoZWRfbm9kZV9yZXRpcmUoc3RydWN0IGk5MTVfc2No ZWRfbm9kZSAqbm9kZSkKIAlzcGluX3VubG9ja19pcnEoJm5vZGUtPmxvY2spOwogfQogCisjaWYg SVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCisjaW5jbHVkZSAic2VsZnRlc3Rz L2k5MTVfc2NoZWR1bGVyLmMiCisjZW5kaWYKKwogc3RhdGljIHZvaWQgaTkxNV9nbG9iYWxfc2No ZWR1bGVyX3Nocmluayh2b2lkKQogewogCWttZW1fY2FjaGVfc2hyaW5rKGdsb2JhbC5zbGFiX2Rl cGVuZGVuY2llcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVk dWxlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaAppbmRleCA1M2Fj ODE5Y2M3ODYuLjg5ODc1ZWEzZmIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zY2hlZHVsZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxl ci5oCkBAIC0zNCwxNSArMzQsMjkgQEAgaW50IGk5MTVfc2NoZWRfbm9kZV9hZGRfZGVwZW5kZW5j eShzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlLAogdm9pZCBpOTE1X3NjaGVkX25vZGVfcmV0 aXJlKHN0cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUpOwogCiB2b2lkIGk5MTVfcmVxdWVzdF9z ZXRfcHJpb3JpdHkoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgaW50IHByaW8pOwordm9p ZCBpOTE1X3JlcXVlc3Rfc2V0X2RlYWRsaW5lKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3Qs IHU2NCBkZWFkbGluZSk7CisKK3ZvaWQgaTkxNV9yZXF1ZXN0X3VwZGF0ZV9kZWFkbGluZShzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KTsKKwordTY0IGk5MTVfc2NoZWR1bGVyX3ZpcnR1YWxf ZGVhZGxpbmUodTY0IGt0LCBpbnQgcHJpb3JpdHkpOwordTY0IGk5MTVfc2NoZWR1bGVyX25leHRf dmlydHVhbF9kZWFkbGluZShpbnQgcHJpb3JpdHkpOworCitib29sIGludGVsX2VuZ2luZV9xdWV1 ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSk7CiAKIHN0cnVjdCBsaXN0X2hlYWQgKgotaTkxNV9zY2hlZF9sb29rdXBf cHJpb2xpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgcHJpbyk7CitpOTE1 X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHU2 NCBkZWFkbGluZSk7CisKK3ZvaWQgaTkxNV9wcmlvbGlzdF9mcmVlKHN0cnVjdCBpOTE1X3ByaW9s aXN0ICpwKTsKKworc3RhdGljIGlubGluZSB1NjQgaTkxNV9zY2hlZF90b190aWNrcyhrdGltZV90 IGt0KQoreworCXJldHVybiBrdGltZV90b19ucyhrdCkgPj4gSTkxNV9TQ0hFRF9ERUFETElORV9T SElGVDsKK30KIAotdm9pZCBfX2k5MTVfcHJpb2xpc3RfZnJlZShzdHJ1Y3QgaTkxNV9wcmlvbGlz dCAqcCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wcmlvbGlzdF9mcmVlKHN0cnVjdCBpOTE1 X3ByaW9saXN0ICpwKQorc3RhdGljIGlubGluZSB1NjQgaTkxNV9zY2hlZF90b19ucyh1NjQgZGVh ZGxpbmUpCiB7Ci0JaWYgKHAtPnByaW9yaXR5ICE9IEk5MTVfUFJJT1JJVFlfTk9STUFMKQotCQlf X2k5MTVfcHJpb2xpc3RfZnJlZShwKTsKKwlyZXR1cm4gZGVhZGxpbmUgPDwgSTkxNV9TQ0hFRF9E RUFETElORV9TSElGVDsKIH0KIAogI2VuZGlmIC8qIF9JOTE1X1NDSEVEVUxFUl9IXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXJfdHlwZXMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyX3R5cGVzLmgKaW5kZXggY2U2MDU3N2Rm MmJmLi5hZTdjYTc4YTg4YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf c2NoZWR1bGVyX3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVs ZXJfdHlwZXMuaApAQCAtNjksNiArNjksMjIgQEAgc3RydWN0IGk5MTVfc2NoZWRfbm9kZSB7CiAJ dW5zaWduZWQgaW50IGZsYWdzOwogI2RlZmluZSBJOTE1X1NDSEVEX0hBU19FWFRFUk5BTF9DSEFJ TglCSVQoMCkKIAlpbnRlbF9lbmdpbmVfbWFza190IHNlbWFwaG9yZXM7CisKKwkvKioKKwkgKiBA ZGVhZGxpbmU6IFt2aXJ0dWFsXSBkZWFkbGluZQorCSAqCisJICogV2hlbiB0aGUgcmVxdWVzdCBp cyByZWFkeSBmb3IgZXhlY3V0aW9uLCBpdCBpcyBnaXZlbiBhIHF1b3RhCisJICogKHRoZSBlbmdp bmUncyB0aW1lc2xpY2UpIGFuZCBhIHZpcnR1YWwgZGVhZGxpbmUuIFRoZSB2aXJ0dWFsCisJICog ZGVhZGxpbmUgaXMgZGVyaXZlZCBmcm9tIHRoZSBjdXJyZW50IHRpbWU6CisJICogICAgIGt0aW1l X2dldCgpICsgKHByaW9fcmF0aW8gKiB0aW1lc2xpY2UpCisJICoKKwkgKiBSZXF1ZXN0cyBhcmUg dGhlbiBleGVjdXRlZCBpbiBvcmRlciBvZiBkZWFkbGluZSBjb21wbGV0aW9uLgorCSAqIFJlcXVl c3RzIHdpdGggZWFybGllciBkZWFkbGluZXMgdGhhbiBjdXJyZW50bHkgZXhlY3V0aW5nIG9uCisJ ICogdGhlIGVuZ2luZSB3aWxsIHByZWVtcHQgdGhlIGFjdGl2ZSByZXF1ZXN0cy4KKwkgKi8KKwl1 NjQgZGVhZGxpbmU7CisjZGVmaW5lIEk5MTVfU0NIRURfREVBRExJTkVfU0hJRlQgMTkgLyogaS5l LiByb3VnaGx5IDUwMHVzIGJ1Y2tldHMgKi8KKyNkZWZpbmUgSTkxNV9ERUFETElORV9ORVZFUiBV NjRfTUFYCiB9OwogCiBzdHJ1Y3QgaTkxNV9kZXBlbmRlbmN5IHsKQEAgLTgxLDYgKzk3LDcgQEAg c3RydWN0IGk5MTVfZGVwZW5kZW5jeSB7CiAjZGVmaW5lIEk5MTVfREVQRU5ERU5DWV9BTExPQwkJ QklUKDApCiAjZGVmaW5lIEk5MTVfREVQRU5ERU5DWV9FWFRFUk5BTAlCSVQoMSkKICNkZWZpbmUg STkxNV9ERVBFTkRFTkNZX1dFQUsJCUJJVCgyKQorCXU2NCBpcGlfZGVhZGxpbmU7CiAJaW50IGlw aV9wcmlvcml0eTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCmluZGV4IDNkYjM0ZDNlZWE1OC4uOTQ2YzkzNDQxYzFm IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3Nl bGZ0ZXN0cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tf c2VsZnRlc3RzLmgKQEAgLTI1LDYgKzI1LDcgQEAgc2VsZnRlc3QocmluZywgaW50ZWxfcmluZ19t b2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGVuZ2luZSwgaW50ZWxfZW5naW5lX2NzX21vY2tfc2Vs ZnRlc3RzKQogc2VsZnRlc3QodGltZWxpbmVzLCBpbnRlbF90aW1lbGluZV9tb2NrX3NlbGZ0ZXN0 cykKIHNlbGZ0ZXN0KHJlcXVlc3RzLCBpOTE1X3JlcXVlc3RfbW9ja19zZWxmdGVzdHMpCitzZWxm dGVzdChzY2hlZHVsZXIsIGk5MTVfc2NoZWR1bGVyX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3Qo b2JqZWN0cywgaTkxNV9nZW1fb2JqZWN0X21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QocGh5cywg aTkxNV9nZW1fcGh5c19tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1f ZG1hYnVmX21vY2tfc2VsZnRlc3RzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfcmVxdWVzdC5jCmluZGV4IDY2NTY0ZjM3ZmQwNi4uYWRhOWNlYzBmM2MzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jCkBAIC0yMTIzLDYg KzIxMjMsNyBAQCBzdGF0aWMgaW50IG1lYXN1cmVfcHJlZW1wdGlvbihzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2UpCiAKIAkJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7CiAJCXJxLT5zY2hlZC5h dHRyLnByaW9yaXR5ID0gSTkxNV9QUklPUklUWV9CQVJSSUVSOworCQlycS0+c2NoZWQuZGVhZGxp bmUgPSAwOwogCiAJCWVsYXBzZWRbaSAtIDFdID0gRU5HSU5FX1JFQURfRlcoY2UtPmVuZ2luZSwg UklOR19USU1FU1RBTVApOwogCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3NjaGVkdWxlci5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfc2NoZWR1bGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45Y2E1MGRiODEwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9zY2hlZHVsZXIuYwpAQCAtMCwwICsx LDQ5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0 IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSAiaTkxNV9zZWxmdGVz dC5oIgorCitzdGF0aWMgaW50IG1vY2tfc2NoZWR1bGVyX3NsaWNlcyh2b2lkICpkdW1teSkKK3sK Kwl1NjQgbWluLCBtYXgsIG5vcm1hbCwga2VybmVsOworCisJbWluID0gcHJpb19zbGljZShJOTE1 X1BSSU9SSVRZX01JTik7CisJcHJfaW5mbygiJThzIHNsaWNlOiAlbGx1dXNcbiIsICJtaW4iLCBt aW4gPj4gMTApOworCisJbm9ybWFsID0gcHJpb19zbGljZSgwKTsKKwlwcl9pbmZvKCIlOHMgc2xp Y2U6ICVsbHV1c1xuIiwgIm5vcm1hbCIsIG5vcm1hbCA+PiAxMCk7CisKKwltYXggPSBwcmlvX3Ns aWNlKEk5MTVfUFJJT1JJVFlfTUFYKTsKKwlwcl9pbmZvKCIlOHMgc2xpY2U6ICVsbHV1c1xuIiwg Im1heCIsIG1heCA+PiAxMCk7CisKKwlrZXJuZWwgPSBwcmlvX3NsaWNlKEk5MTVfUFJJT1JJVFlf QkFSUklFUik7CisJcHJfaW5mbygiJThzIHNsaWNlOiAlbGx1dXNcbiIsICJrZXJuZWwiLCBrZXJu ZWwgPj4gMTApOworCisJaWYgKGtlcm5lbCAhPSAwKSB7CisJCXByX2Vycigia2VybmVsIHByaW8g c2xpY2Ugc2hvdWxkIGJlIDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobWF4 ID49IG5vcm1hbCkgeworCQlwcl9lcnIoIm1heGltdW0gcHJpbyBzbGljZSBzaG91bGQgYmUgc2hv cnRlciB0aGFuIG5vcm1hbFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChtaW4g PD0gbm9ybWFsKSB7CisJCXByX2VycigibWluaW11bSBwcmlvIHNsaWNlIHNob3VsZCBiZSBsb25n ZXIgdGhhbiBub3JtYWxcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworaW50IGk5MTVfc2NoZWR1bGVyX21vY2tfc2VsZnRlc3RzKHZvaWQpCit7CisJc3RhdGlj IGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVTVChtb2NrX3Nj aGVkdWxlcl9zbGljZXMpLAorCX07CisKKwlyZXR1cm4gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgTlVM TCk7Cit9Ci0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=