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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 8B30BC47080 for ; Tue, 1 Jun 2021 17:15:26 +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 354B7613C1 for ; Tue, 1 Jun 2021 17:15:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 354B7613C1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com 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 AC21A6E079; Tue, 1 Jun 2021 17:15:25 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id A9F056E079 for ; Tue, 1 Jun 2021 17:15:23 +0000 (UTC) IronPort-SDR: nt6zSu5D23ZditBFKixqKgpuX+E7cZdueYR71I2GnuxFiu85BXTMkI4j3av2vFgoxRe9BlY22G Oc2ArPGbHVRQ== X-IronPort-AV: E=McAfee;i="6200,9189,10002"; a="183953136" X-IronPort-AV: E=Sophos;i="5.83,240,1616482800"; d="scan'208";a="183953136" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2021 10:15:22 -0700 IronPort-SDR: L3BSGcPhbL3OwCoJOKoadX79lmFXHL1Z8E75OKx5RPF/5D2rL7XEutbl4uKrsWewLAZu4uyYa3 cuVZlob4OquA== X-IronPort-AV: E=Sophos;i="5.83,240,1616482800"; d="scan'208";a="438098451" Received: from nawaskex-mobl.ger.corp.intel.com (HELO ldmartin-desk2) ([10.254.3.30]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2021 10:15:20 -0700 Date: Tue, 1 Jun 2021 10:15:14 -0700 From: Lucas De Marchi To: Matt Roper Message-ID: <20210601171514.63lh3lqb2yprri73@ldmartin-desk2> References: <20210527181700.1676790-1-lucas.demarchi@intel.com> <20210527181700.1676790-2-lucas.demarchi@intel.com> <20210601165834.GA6936@mdroper-desk1.amr.corp.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20210601165834.GA6936@mdroper-desk1.amr.corp.intel.com> Subject: Re: [Intel-gfx] [PATCH 1/7] drm/i915/gt: replace IS_GEN and friends with IS_GRAPHICS_VER 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: intel-gfx@lists.freedesktop.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVHVlLCBKdW4gMDEsIDIwMjEgYXQgMDk6NTg6MzRBTSAtMDcwMCwgTWF0dCBSb3BlciB3cm90 ZToKPk9uIFRodSwgTWF5IDI3LCAyMDIxIGF0IDExOjE2OjU0QU0gLTA3MDAsIEx1Y2FzIERlIE1h cmNoaSB3cm90ZToKPj4gVGhpcyB3YXMgZG9uZSBieSB0aGUgZm9sbG93aW5nIHNlbWFudGljIHBh dGNoOgo+Cj5JcyB0aGUgY29tbWl0IG1lc3NhZ2UgaGVyZSBvdXQtb2YtZGF0ZT8gIFRoZSBjb2Nj aSBkb2Vzbid0IGFwcGVhciB0bwo+bWF0Y2ggdGhlIGRpZmYgYW55bW9yZS4gIElTX0dSQVBISUNT X1ZFUigpIGlzIHRoZSByYW5nZSBtYWNybyBub3cgYW5kCj5JU19HRU4gaXMgYmVpbmcgcmVwbGFj ZWQgd2l0aCBhIGRpcmVjdCAiPT0iIGNvbXBhcmlzb24uCgpub3QgbmVjZXNzYXJpbHksIGl0J3Mg aW5jbHVkZWQgaW4gImFuZCBmcmllbmRzLi4uIi4gTWF5YmUgcmV3b3JkaW5nIHRvCnNvbWV0aGlu ZyBsaWtlICJyZXBsYWNlIGdlbi1iYXNlZCBtYWNyb3Mgd2l0aCBuZXcgdmVyLWJhc2VkIG9uZXMi IHdvdWxkCm1ha2UgaXQgY2xlYXJlcj8KCkx1Y2FzIERlIE1hcmNoaQoKPgo+Cj5NYXR0Cj4KPj4K Pj4gCUBAIGV4cHJlc3Npb24gZGV2X3ByaXYsIEU7IEBACj4+IAktIElOVEVMX0dFTihkZXZfcHJp dikgPT0gRQo+PiAJKyBJU19HUkFQSElDU19WRVIoZGV2X3ByaXYsIEUpCj4+Cj4+IAlAQCBleHBy ZXNzaW9uIGRldl9wcml2OyBAQAo+PiAJLSBJTlRFTF9HRU4oZGV2X3ByaXYpCj4+IAkrIEdSQVBI SUNTX1ZFUihkZXZfcHJpdikKPj4KPj4gCUBAIGV4cHJlc3Npb24gZGV2X3ByaXY7IGV4cHJlc3Np b24gRTsgQEAKPj4gCS0gSVNfR0VOKGRldl9wcml2LCBFKQo+PiAJKyBJU19HUkFQSElDU19WRVIo ZGV2X3ByaXYsIEUpCj4+Cj4+IAlAQAo+PiAJZXhwcmVzc2lvbiBkZXZfcHJpdjsKPj4gCWV4cHJl c3Npb24gZnJvbSwgdW50aWw7Cj4+IAlAQAo+PiAJLSBJU19HRU5fUkFOR0UoZGV2X3ByaXYsIGZy b20sIHVudGlsKQo+PiAJKyBJU19HUkFQSElDU19SQU5HRShkZXZfcHJpdiwgZnJvbSwgdW50aWwp Cj4+Cj4+IAlAZGVmQAo+PiAJZXhwcmVzc2lvbiBFOwo+PiAJaWRlbnRpZmllciBpZCA9fiAiXmdl biQiOwo+PiAJQEAKPj4gCS0gaWQgPSBHUkFQSElDU19WRVIoRSkKPj4gCSsgdmVyID0gR1JBUEhJ Q1NfVkVSKEUpCj4+Cj4+IAlAQAo+PiAJaWRlbnRpZmllciBkZWYuaWQ7Cj4+IAlAQAo+PiAJLSBp ZAo+PiAJKyB2ZXIKPj4KPj4gSXQgYWxzbyB0YWtlcyBjYXJlIG9mIHJlbmFtaW5nIHRoZSB2YXJp YWJsZSB3ZSBhc3NpZ24gdG8gR1JBUEhJQ1NfVkVSKCkKPj4gc28gdG8gdXNlICJ2ZXIiIHJhdGhl ciB0aGFuICJnZW4iLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBMdWNhcyBEZSBNYXJjaGkgPGx1Y2Fz LmRlbWFyY2hpQGludGVsLmNvbT4KPj4gLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9k ZWJ1Z2ZzX2d0X3BtLmMgICAgICAgfCAzOCArKysrKy0tLS0tLQo+PiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuYyAgICAgIHwgIDIgKy0KPj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2dlbjhfZW5naW5lX2NzLmMgICAgICB8ICAyICstCj4+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9nZW44X3BwZ3R0LmMgICAgICAgICAgfCAgMiArLQo+PiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF9zc2V1LmMgIHwgIDIgKy0KPj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jICAgICB8IDU0ICsrKysrKystLS0tLS0tLQo+ PiAgLi4uL2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMgIHwgMTggKyst LS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHQuYyAgICAgICAgICB8IDE4 ICsrLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0X2ZlbmNpbmcuYyAg fCAzNCArKysrKy0tLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jICAg ICAgICAgICAgfCAyNyArKysrLS0tLQo+PiAgLi4uL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9j bG9ja191dGlscy5jICAgIHwgMTIgKystLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3RfaXJxLmMgICAgICAgIHwgIDYgKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2d0X3BtX2lycS5jICAgICB8IDEwICstLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfZ3R0LmMgICAgICAgICAgIHwgMTQgKystLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfbGxjLmMgICAgICAgICAgIHwgIDYgKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2xyYy5jICAgICAgICAgICB8IDQ2ICsrKysrKy0tLS0tLS0KPj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX21vY3MuYyAgICAgICAgICB8ICA4ICstLQo+PiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcHBndHQuYyAgICAgICAgIHwgIDYgKy0KPj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JjNi5jICAgICAgICAgICB8IDE2ICsrLS0tCj4+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZW5kZXJzdGF0ZS5jICAgfCAgMiArLQo+PiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYyAgICAgICAgIHwgMTIgKystLQo+ PiAgLi4uL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYyAgIHwgNjQgKysr KysrKysrLS0tLS0tLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYyAg ICAgICAgICAgfCA2MCArKysrKysrKy0tLS0tLS0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfc3NldS5jICAgICAgICAgIHwgMTQgKystLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfd29ya2Fyb3VuZHMuYyAgIHwgNjYgKysrKysrKysrLS0tLS0tLS0tLQo+PiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX2NzLmMgIHwgIDYgKy0KPj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jICB8ICAyICstCj4+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYyAgfCAgNCArLQo+ PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZ3RfcG0uYyAgICAgIHwgIDggKy0t Cj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYyAgfCAgOCAr LS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jICAgICAgICB8ICA0 ICstCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYyAgICAgICAgfCAg OCArLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X21vY3MuYyAgICAgICB8 ICAyICstCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yYzYuYyAgICAgICAg fCAgNCArLQo+PiAgLi4uL2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jpbmdfc3VibWlzc2lvbi5jICAg IHwgIDYgKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jwcy5jICAgICAg ICB8IDE2ICsrLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGlu ZS5jICAgfCAgNiArLQo+PiAgLi4uL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF93b3JrYXJvdW5k cy5jICAgIHwgIDggKy0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMu YyAgICAgICAgfCAgNCArLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3Vj X2Fkcy5jICAgIHwgIDIgKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1 Y19mdy5jICAgICB8ICAyICstCj4+ICAuLi4vZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19z dWJtaXNzaW9uLmMgfCAxMCArLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVs X2h1Yy5jICAgICAgICB8ICAyICstCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF91Yy5jICAgICAgICAgfCAgNCArLQo+PiAgNDQgZmlsZXMgY2hhbmdlZCwgMzIzIGluc2VydGlv bnMoKyksIDMyMiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2RlYnVnZnNfZ3RfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2RlYnVn ZnNfZ3RfcG0uYwo+PiBpbmRleCBkNGY0NDUyY2U1ZWQuLjAzODliY2VlYmQwNiAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9wbS5jCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2RlYnVnZnNfZ3RfcG0uYwo+PiBAQCAtODUsMTQgKzg1LDE0 IEBAIHN0YXRpYyBpbnQgZ2VuNl9kcnBjKHN0cnVjdCBzZXFfZmlsZSAqbSkKPj4gIAlndF9jb3Jl X3N0YXR1cyA9IGludGVsX3VuY29yZV9yZWFkX2Z3KHVuY29yZSwgR0VONl9HVF9DT1JFX1NUQVRV Uyk7Cj4+Cj4+ICAJcmNjdGwxID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU42X1JDX0NP TlRST0wpOwo+PiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkgewo+PiArCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPj0gOSkgewo+PiAgCQlnZW45X3Bvd2VyZ2F0ZV9lbmFibGUgPQo+PiAgCQkJ aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU45X1BHX0VOQUJMRSk7Cj4+ICAJCWdlbjlfcG93 ZXJnYXRlX3N0YXR1cyA9Cj4+ICAJCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjlfUFdS R1RfRE9NQUlOX1NUQVRVUyk7Cj4+ICAJfQo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPD0g NykKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDw9IDcpCj4+ICAJCXNhbmR5YnJpZGdlX3Bj b2RlX3JlYWQoaTkxNSwgR0VONl9QQ09ERV9SRUFEX1JDNlZJRFMsCj4+ICAJCQkJICAgICAgICZy YzZ2aWRzLCBOVUxMKTsKPj4KPj4gQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgaW50IGdlbjZf ZHJwYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4+ICAJCSAgIHllc25vKHJjY3RsMSAmIEdFTjZfUkNf Q1RMX1JDMWVfRU5BQkxFKSk7Cj4+ICAJc2VxX3ByaW50ZihtLCAiUkM2IEVuYWJsZWQ6ICVzXG4i LAo+PiAgCQkgICB5ZXNubyhyY2N0bDEgJiBHRU42X1JDX0NUTF9SQzZfRU5BQkxFKSk7Cj4+IC0J aWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+ PSA5KSB7Cj4+ICAJCXNlcV9wcmludGYobSwgIlJlbmRlciBXZWxsIEdhdGluZyBFbmFibGVkOiAl c1xuIiwKPj4gIAkJCSAgIHllc25vKGdlbjlfcG93ZXJnYXRlX2VuYWJsZSAmIEdFTjlfUkVOREVS X1BHX0VOQUJMRSkpOwo+PiAgCQlzZXFfcHJpbnRmKG0sICJNZWRpYSBXZWxsIEdhdGluZyBFbmFi bGVkOiAlc1xuIiwKPj4gQEAgLTEzNCw3ICsxMzQsNyBAQCBzdGF0aWMgaW50IGdlbjZfZHJwYyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4+Cj4+ICAJc2VxX3ByaW50ZihtLCAiQ29yZSBQb3dlciBEb3du OiAlc1xuIiwKPj4gIAkJICAgeWVzbm8oZ3RfY29yZV9zdGF0dXMgJiBHRU42X0NPUkVfQ1BEX1NU QVRFX01BU0spKTsKPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpIHsKPj4gKwlpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID49IDkpIHsKPj4gIAkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIFBvd2Vy IFdlbGw6ICVzXG4iLAo+PiAgCQkJICAgKGdlbjlfcG93ZXJnYXRlX3N0YXR1cyAmCj4+ICAJCQkg ICAgR0VOOV9QV1JHVF9SRU5ERVJfU1RBVFVTX01BU0spID8gIlVwIiA6ICJEb3duIik7Cj4+IEBA IC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIGludCBnZW42X2RycGMoc3RydWN0IHNlcV9maWxlICpt KQo+PiAgCXByaW50X3JjNl9yZXMobSwgIlJDNisgcmVzaWRlbmN5IHNpbmNlIGJvb3Q6IiwgR0VO Nl9HVF9HRlhfUkM2cCk7Cj4+ICAJcHJpbnRfcmM2X3JlcyhtLCAiUkM2KysgcmVzaWRlbmN5IHNp bmNlIGJvb3Q6IiwgR0VONl9HVF9HRlhfUkM2cHApOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oaTkx NSkgPD0gNykgewo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPD0gNykgewo+PiAgCQlzZXFf cHJpbnRmKG0sICJSQzYgICB2b2x0YWdlOiAlZG1WXG4iLAo+PiAgCQkJICAgR0VONl9ERUNPREVf UkM2X1ZJRCgoKHJjNnZpZHMgPj4gMCkgJiAweGZmKSkpOwo+PiAgCQlzZXFfcHJpbnRmKG0sICJS QzYrICB2b2x0YWdlOiAlZG1WXG4iLAo+PiBAQCAtMjUwLDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQg ZnJlcXVlbmN5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4+Cj4+ICAJ d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KHVuY29yZS0+cnBtKTsKPj4KPj4gLQlpZiAo SVNfR0VOKGk5MTUsIDUpKSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA1KSB7Cj4+ ICAJCXUxNiByZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFkMTYodW5jb3JlLCBNRU1TV0NUTCk7 Cj4+ICAJCXUxNiByZ3ZzdGF0ID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUsIE1FTVNUQVRf SUxLKTsKPj4KPj4gQEAgLTI5Niw3ICsyOTYsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93 KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+Pgo+PiAgCQlzZXFfcHJpbnRmKG0s ICJlZmZpY2llbnQgKFJQZSkgZnJlcXVlbmN5OiAlZCBNSHpcbiIsCj4+ICAJCQkgICBpbnRlbF9n cHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpKTsKPj4gLQl9IGVsc2UgaWYgKElOVEVM X0dFTihpOTE1KSA+PSA2KSB7Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0g Nikgewo+PiAgCQl1MzIgcnBfc3RhdGVfbGltaXRzOwo+PiAgCQl1MzIgZ3RfcGVyZl9zdGF0dXM7 Cj4+ICAJCXUzMiBycF9zdGF0ZV9jYXA7Cj4+IEBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGlu dCBmcmVxdWVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPj4gIAkJ aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPj4KPj4g IAkJcmVxZiA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VONl9SUE5TV1JFUSk7Cj4+IC0J CWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkgewo+PiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDkpIHsKPj4gIAkJCXJlcWYgPj49IDIzOwo+PiAgCQl9IGVsc2Ugewo+PiAgCQkJcmVxZiAm PSB+R0VONl9UVVJCT19ESVNBQkxFOwo+PiBAQCAtMzU0LDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQg ZnJlcXVlbmN5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4+Cj4+ICAJ CWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4+Cj4+ IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpIHsKPj4gKwkJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSAxMSkgewo+PiAgCQkJcG1faWVyID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBH RU4xMV9HUE1fV0dCT1hQRVJGX0lOVFJfRU5BQkxFKTsKPj4gIAkJCXBtX2ltciA9IGludGVsX3Vu Y29yZV9yZWFkKHVuY29yZSwgR0VOMTFfR1BNX1dHQk9YUEVSRl9JTlRSX01BU0spOwo+PiAgCQkJ LyoKPj4gQEAgLTM2Myw3ICszNjMsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93KHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+PiAgCQkJICovCj4+ICAJCQlwbV9pc3IgPSAw Owo+PiAgCQkJcG1faWlyID0gMDsKPj4gLQkJfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0g OCkgewo+PiArCQl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KSB7Cj4+ICAJCQlw bV9pZXIgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjhfR1RfSUVSKDIpKTsKPj4gIAkJ CXBtX2ltciA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VOOF9HVF9JTVIoMikpOwo+PiAg CQkJcG1faXNyID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU44X0dUX0lTUigyKSk7Cj4+ IEBAIC0zODYsMTQgKzM4NiwxNCBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93KHN0cnVjdCBz ZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+Pgo+PiAgCQlzZXFfcHJpbnRmKG0sICJQTSBJRVI9 MHglMDh4IElNUj0weCUwOHgsIE1BU0s9MHglMDh4XG4iLAo+PiAgCQkJICAgcG1faWVyLCBwbV9p bXIsIHBtX21hc2spOwo+PiAtCQlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDEwKQo+PiArCQlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpIDw9IDEwKQo+PiAgCQkJc2VxX3ByaW50ZihtLCAiUE0gSVNSPTB4 JTA4eCBJSVI9MHglMDh4XG4iLAo+PiAgCQkJCSAgIHBtX2lzciwgcG1faWlyKTsKPj4gIAkJc2Vx X3ByaW50ZihtLCAicG1faW50cm1za19tYno6IDB4JTA4eFxuIiwKPj4gIAkJCSAgIHJwcy0+cG1f aW50cm1za19tYnopOwo+PiAgCQlzZXFfcHJpbnRmKG0sICJHVF9QRVJGX1NUQVRVUzogMHglMDh4 XG4iLCBndF9wZXJmX3N0YXR1cyk7Cj4+ICAJCXNlcV9wcmludGYobSwgIlJlbmRlciBwLXN0YXRl IHJhdGlvOiAlZFxuIiwKPj4gLQkJCSAgIChndF9wZXJmX3N0YXR1cyAmIChJTlRFTF9HRU4oaTkx NSkgPj0gOSA/IDB4MWZmMDAgOiAweGZmMDApKSA+PiA4KTsKPj4gKwkJCSAgIChndF9wZXJmX3N0 YXR1cyAmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSA/IDB4MWZmMDAgOiAweGZmMDApKSA+PiA4 KTsKPj4gIAkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIHAtc3RhdGUgVklEOiAlZFxuIiwKPj4gIAkJ CSAgIGd0X3BlcmZfc3RhdHVzICYgMHhmZik7Cj4+ICAJCXNlcV9wcmludGYobSwgIlJlbmRlciBw LXN0YXRlIGxpbWl0OiAlZFxuIiwKPj4gQEAgLTQzNywyMCArNDM3LDIwIEBAIHN0YXRpYyBpbnQg ZnJlcXVlbmN5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4+ICAJCW1h eF9mcmVxID0gKElTX0dFTjlfTFAoaTkxNSkgPyBycF9zdGF0ZV9jYXAgPj4gMCA6Cj4+ICAJCQkg ICAgcnBfc3RhdGVfY2FwID4+IDE2KSAmIDB4ZmY7Cj4+ICAJCW1heF9mcmVxICo9IChJU19HRU45 X0JDKGk5MTUpIHx8Cj4+IC0JCQkgICAgIElOVEVMX0dFTihpOTE1KSA+PSAxMCA/IEdFTjlfRlJF UV9TQ0FMRVIgOiAxKTsKPj4gKwkJCSAgICAgR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEwID8gR0VO OV9GUkVRX1NDQUxFUiA6IDEpOwo+PiAgCQlzZXFfcHJpbnRmKG0sICJMb3dlc3QgKFJQTikgZnJl cXVlbmN5OiAlZE1IelxuIiwKPj4gIAkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEp KTsKPj4KPj4gIAkJbWF4X2ZyZXEgPSAocnBfc3RhdGVfY2FwICYgMHhmZjAwKSA+PiA4Owo+PiAg CQltYXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhpOTE1KSB8fAo+PiAtCQkJICAgICBJTlRFTF9HRU4o aTkxNSkgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7Cj4+ICsJCQkgICAgIEdSQVBISUNT X1ZFUihpOTE1KSA+PSAxMCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKTsKPj4gIAkJc2VxX3ByaW50 ZihtLCAiTm9taW5hbCAoUlAxKSBmcmVxdWVuY3k6ICVkTUh6XG4iLAo+PiAgCQkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBtYXhfZnJlcSkpOwo+Pgo+PiAgCQltYXhfZnJlcSA9IChJU19HRU45X0xQ KGk5MTUpID8gcnBfc3RhdGVfY2FwID4+IDE2IDoKPj4gIAkJCSAgICBycF9zdGF0ZV9jYXAgPj4g MCkgJiAweGZmOwo+PiAgCQltYXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhpOTE1KSB8fAo+PiAtCQkJ ICAgICBJTlRFTF9HRU4oaTkxNSkgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7Cj4+ICsJ CQkgICAgIEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKTsK Pj4gIAkJc2VxX3ByaW50ZihtLCAiTWF4IG5vbi1vdmVyY2xvY2tlZCAoUlAwKSBmcmVxdWVuY3k6 ICVkTUh6XG4iLAo+PiAgCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBtYXhfZnJlcSkpOwo+PiAg CQlzZXFfcHJpbnRmKG0sICJNYXggb3ZlcmNsb2NrZWQgZnJlcXVlbmN5OiAlZE1IelxuIiwKPj4g QEAgLTQ4OCw3ICs0ODgsNyBAQCBzdGF0aWMgaW50IGxsY19zaG93KHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkKPj4gIHsKPj4gIAlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gbS0+cHJpdmF0 ZTsKPj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5pOTE1Owo+PiAtCWNv bnN0IGJvb2wgZWRyYW0gPSBJTlRFTF9HRU4oaTkxNSkgPiA4Owo+PiArCWNvbnN0IGJvb2wgZWRy YW0gPSBHUkFQSElDU19WRVIoaTkxNSkgPiA4Owo+PiAgCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9 ICZndC0+cnBzOwo+PiAgCXVuc2lnbmVkIGludCBtYXhfZ3B1X2ZyZXEsIG1pbl9ncHVfZnJlcTsK Pj4gIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPj4gQEAgLTUwMCw3ICs1MDAsNyBAQCBzdGF0 aWMgaW50IGxsY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPj4KPj4gIAlt aW5fZ3B1X2ZyZXEgPSBycHMtPm1pbl9mcmVxOwo+PiAgCW1heF9ncHVfZnJlcSA9IHJwcy0+bWF4 X2ZyZXE7Cj4+IC0JaWYgKElTX0dFTjlfQkMoaTkxNSkgfHwgSU5URUxfR0VOKGk5MTUpID49IDEw KSB7Cj4+ICsJaWYgKElTX0dFTjlfQkMoaTkxNSkgfHwgR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEw KSB7Cj4+ICAJCS8qIENvbnZlcnQgR1QgZnJlcXVlbmN5IHRvIDUwIEhaIHVuaXRzICovCj4+ICAJ CW1pbl9ncHVfZnJlcSAvPSBHRU45X0ZSRVFfU0NBTEVSOwo+PiAgCQltYXhfZ3B1X2ZyZXEgLz0g R0VOOV9GUkVRX1NDQUxFUjsKPj4gQEAgLTUxOCw3ICs1MTgsNyBAQCBzdGF0aWMgaW50IGxsY19z aG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPj4gIAkJCSAgIGludGVsX2dwdV9m cmVxKHJwcywKPj4gIAkJCQkJICAoZ3B1X2ZyZXEgKgo+PiAgCQkJCQkgICAoSVNfR0VOOV9CQyhp OTE1KSB8fAo+PiAtCQkJCQkgICAgSU5URUxfR0VOKGk5MTUpID49IDEwID8KPj4gKwkJCQkJICAg IEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMCA/Cj4+ICAJCQkJCSAgICBHRU45X0ZSRVFfU0NBTEVS IDogMSkpKSwKPj4gIAkJCSAgICgoaWFfZnJlcSA+PiAwKSAmIDB4ZmYpICogMTAwLAo+PiAgCQkJ ICAgKChpYV9mcmVxID4+IDgpICYgMHhmZikgKiAxMDApOwo+PiBAQCAtNTgwLDcgKzU4MCw3IEBA IHN0YXRpYyBpbnQgcnBzX2Jvb3N0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRh KQo+Pgo+PiAgCXNlcV9wcmludGYobSwgIldhaXQgYm9vc3RzOiAlZFxuIiwgUkVBRF9PTkNFKHJw cy0+Ym9vc3RzKSk7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2ICYmIGludGVsX3Jw c19pc19hY3RpdmUocnBzKSkgewo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNiAmJiBp bnRlbF9ycHNfaXNfYWN0aXZlKHJwcykpIHsKPj4gIAkJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gZ3QtPnVuY29yZTsKPj4gIAkJdTMyIHJwdXAsIHJwdXBlaTsKPj4gIAkJdTMyIHJwZG93 biwgcnBkb3duZWk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW4y X2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuYwo+ PiBpbmRleCA5NjQ2MjAwZDI3OTIuLjYxMzgzODMwNTA1ZSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9nZW4yX2VuZ2luZV9jcy5jCj4+IEBAIC03NCw3ICs3NCw3IEBAIGludCBnZW40 X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKPj4gIAlj bWQgPSBNSV9GTFVTSDsKPj4gIAlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewo+PiAgCQlj bWQgfD0gTUlfRVhFX0ZMVVNIOwo+PiAtCQlpZiAoSVNfRzRYKHJxLT5lbmdpbmUtPmk5MTUpIHx8 IElTX0dFTihycS0+ZW5naW5lLT5pOTE1LCA1KSkKPj4gKwkJaWYgKElTX0c0WChycS0+ZW5naW5l LT5pOTE1KSB8fCBHUkFQSElDU19WRVIocnEtPmVuZ2luZS0+aTkxNSkgPT0gNSkKPj4gIAkJCWNt ZCB8PSBNSV9JTlZBTElEQVRFX0lTUDsKPj4gIAl9Cj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvZ2VuOF9lbmdpbmVfY3MuYwo+PiBpbmRleCA3MzJjMmVkMWQ5MzMuLjk0ZTBhNTY2OWY5MCAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuYwo+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5jCj4+IEBAIC0z OCw3ICszOCw3IEBAIGludCBnZW44X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxLCB1MzIgbW9kZSkKPj4gIAkJICogT24gR0VOOTogYmVmb3JlIFZGX0NBQ0hFX0lOVkFMSURB VEUgd2UgbmVlZCB0byBlbWl0IGEgTlVMTAo+PiAgCQkgKiBwaXBlIGNvbnRyb2wuCj4+ICAJCSAq Lwo+PiAtCQlpZiAoSVNfR0VOKHJxLT5lbmdpbmUtPmk5MTUsIDkpKQo+PiArCQlpZiAoR1JBUEhJ Q1NfVkVSKHJxLT5lbmdpbmUtPmk5MTUpID09IDkpCj4+ICAJCQl2Zl9mbHVzaF93YSA9IHRydWU7 Cj4+Cj4+ICAJCS8qIFdhRm9yR0FNSGFuZzprYmwgKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2dlbjhfcHBndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dl bjhfcHBndHQuYwo+PiBpbmRleCBlM2E4OTI0ZDIyODYuLjIxYzhiNzM1MGI3YSAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9wcGd0dC5jCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfcHBndHQuYwo+PiBAQCAtNzA5LDcgKzcwOSw3IEBAIHN0 cnVjdCBpOTE1X3BwZ3R0ICpnZW44X3BwZ3R0X2NyZWF0ZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ PiAgCSAqCj4+ICAJICogR2VuMTIgaGFzIGluaGVyaXRlZCB0aGUgc2FtZSByZWFkLW9ubHkgZmF1 bHQgaXNzdWUgZnJvbSBnZW4xMS4KPj4gIAkgKi8KPj4gLQlwcGd0dC0+dm0uaGFzX3JlYWRfb25s eSA9ICFJU19HRU5fUkFOR0UoZ3QtPmk5MTUsIDExLCAxMik7Cj4+ICsJcHBndHQtPnZtLmhhc19y ZWFkX29ubHkgPSAhSVNfR1JBUEhJQ1NfVkVSKGd0LT5pOTE1LCAxMSwgMTIpOwo+Pgo+PiAgCWlm IChIQVNfTE1FTShndC0+aTkxNSkpCj4+ICAJCXBwZ3R0LT52bS5hbGxvY19wdF9kbWEgPSBhbGxv Y19wdF9sbWVtOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf Y29udGV4dF9zc2V1LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3Nz ZXUuYwo+PiBpbmRleCA4ZGZkOGY2NTZhYWEuLmU4NmQ4MjU1ZmVlYyAxMDA2NDQKPj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF9zc2V1LmMKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF9zc2V1LmMKPj4gQEAgLTc2LDcgKzc2 LDcgQEAgaW50ZWxfY29udGV4dF9yZWNvbmZpZ3VyZV9zc2V1KHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZSwKPj4gIHsKPj4gIAlpbnQgcmV0Owo+Pgo+PiAtCUdFTV9CVUdfT04oSU5URUxfR0VOKGNl LT5lbmdpbmUtPmk5MTUpIDwgOCk7Cj4+ICsJR0VNX0JVR19PTihHUkFQSElDU19WRVIoY2UtPmVu Z2luZS0+aTkxNSkgPCA4KTsKPj4KPj4gIAlyZXQgPSBpbnRlbF9jb250ZXh0X2xvY2tfcGlubmVk KGNlKTsKPj4gIAlpZiAocmV0KQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdp bmVfY3MuYwo+PiBpbmRleCAzZjlhODExZWIwMmIuLjU0YmFmMTdiODFiNiAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmMKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmMKPj4gQEAgLTI0MCwxMCArMjQw LDEwIEBAIHZvaWQgaW50ZWxfZW5naW5lX3NldF9od3NwX3dyaXRlbWFzayhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsIHUzMiBtYXNrKQo+PiAgCSAqIFRob3VnaCB0aGV5IGFkZGVkIG1v cmUgcmluZ3Mgb24gZzR4L2lsaywgdGhleSBkaWQgbm90IGFkZAo+PiAgCSAqIHBlci1lbmdpbmUg SFdTVEFNIHVudGlsIGdlbjYuCj4+ICAJICovCj4+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5 MTUpIDwgNiAmJiBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPj4gKwlpZiAoR1JBUEhJ Q1NfVkVSKGVuZ2luZS0+aTkxNSkgPCA2ICYmIGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNT KQo+PiAgCQlyZXR1cm47Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDMp Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDMpCj4+ICAJCUVOR0lORV9X UklURShlbmdpbmUsIFJJTkdfSFdTVEFNLCBtYXNrKTsKPj4gIAllbHNlCj4+ICAJCUVOR0lORV9X UklURTE2KGVuZ2luZSwgUklOR19IV1NUQU0sIG1hc2spOwo+PiBAQCAtMzE1LDcgKzMxNSw3IEBA IHN0YXRpYyBpbnQgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIGVudW0g aW50ZWxfZW5naW5lX2lkIGlkKQo+PiAgCQlDT05GSUdfRFJNX0k5MTVfVElNRVNMSUNFX0RVUkFU SU9OOwo+Pgo+PiAgCS8qIE92ZXJyaWRlIHRvIHVuaW50ZXJydXB0aWJsZSBmb3IgT3BlbkNMIHdv cmtsb2Fkcy4gKi8KPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID09IDEyICYmIGVuZ2luZS0+Y2xh c3MgPT0gUkVOREVSX0NMQVNTKQo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gMTIgJiYg ZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpCj4+ICAJCWVuZ2luZS0+cHJvcHMucHJlZW1w dF90aW1lb3V0X21zID0gMDsKPj4KPj4gIAllbmdpbmUtPmRlZmF1bHRzID0gZW5naW5lLT5wcm9w czsgLyogbmV2ZXIgdG8gY2hhbmdlIGFnYWluICovCj4+IEBAIC0zNTIsOCArMzUyLDggQEAgc3Rh dGljIHZvaWQgX19zZXR1cF9lbmdpbmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPj4gIAkJICogSEVWQyBzdXBwb3J0IGlzIHByZXNlbnQgb24gZmlyc3QgZW5n aW5lIGluc3RhbmNlCj4+ICAJCSAqIGJlZm9yZSBHZW4xMSBhbmQgb24gYWxsIGluc3RhbmNlcyBh ZnRlcndhcmRzLgo+PiAgCQkgKi8KPj4gLQkJaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSB8fAo+ PiAtCQkgICAgKElOVEVMX0dFTihpOTE1KSA+PSA5ICYmIGVuZ2luZS0+aW5zdGFuY2UgPT0gMCkp Cj4+ICsJCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTEgfHwKPj4gKwkJICAgIChHUkFQSElD U19WRVIoaTkxNSkgPj0gOSAmJiBlbmdpbmUtPmluc3RhbmNlID09IDApKQo+PiAgCQkJZW5naW5l LT51YWJpX2NhcGFiaWxpdGllcyB8PQo+PiAgCQkJCUk5MTVfVklERU9fQ0xBU1NfQ0FQQUJJTElU WV9IRVZDOwo+Pgo+PiBAQCAtMzYxLDE0ICszNjEsMTQgQEAgc3RhdGljIHZvaWQgX19zZXR1cF9l bmdpbmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIAkJ ICogU0ZDIGJsb2NrIGlzIHByZXNlbnQgb25seSBvbiBldmVuIGxvZ2ljYWwgZW5naW5lCj4+ICAJ CSAqIGluc3RhbmNlcy4KPj4gIAkJICovCj4+IC0JCWlmICgoSU5URUxfR0VOKGk5MTUpID49IDEx ICYmCj4+ICsJCWlmICgoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExICYmCj4+ICAJCSAgICAgKGVu Z2luZS0+Z3QtPmluZm8udmRib3hfc2ZjX2FjY2VzcyAmCj4+ICAJCSAgICAgIEJJVChlbmdpbmUt Pmluc3RhbmNlKSkpIHx8Cj4+IC0JCSAgICAoSU5URUxfR0VOKGk5MTUpID49IDkgJiYgZW5naW5l LT5pbnN0YW5jZSA9PSAwKSkKPj4gKwkJICAgIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSAmJiBl bmdpbmUtPmluc3RhbmNlID09IDApKQo+PiAgCQkJZW5naW5lLT51YWJpX2NhcGFiaWxpdGllcyB8 PQo+PiAgCQkJCUk5MTVfVklERU9fQU5EX0VOSEFOQ0VfQ0xBU1NfQ0FQQUJJTElUWV9TRkM7Cj4+ ICAJfSBlbHNlIGlmIChlbmdpbmUtPmNsYXNzID09IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTKSB7 Cj4+IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKPj4gKwkJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA5KQo+PiAgCQkJZW5naW5lLT51YWJpX2NhcGFiaWxpdGllcyB8PQo+PiAgCQkJCUk5 MTVfVklERU9fQU5EX0VOSEFOQ0VfQ0xBU1NfQ0FQQUJJTElUWV9TRkM7Cj4+ICAJfQo+PiBAQCAt NDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyBpbnRlbF9lbmdpbmVfbWFza190IGluaXRfZW5naW5lX21h c2soc3RydWN0IGludGVsX2d0ICpndCkKPj4KPj4gIAlpbmZvLT5lbmdpbmVfbWFzayA9IElOVEVM X0lORk8oaTkxNSktPnBsYXRmb3JtX2VuZ2luZV9tYXNrOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4o aTkxNSkgPCAxMSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgMTEpCj4+ICAJCXJldHVy biBpbmZvLT5lbmdpbmVfbWFzazsKPj4KPj4gIAltZWRpYV9mdXNlID0gfmludGVsX3VuY29yZV9y ZWFkKHVuY29yZSwgR0VOMTFfR1RfVkVCT1hfVkRCT1hfRElTQUJMRSk7Cj4+IEBAIC00OTIsNyAr NDkyLDcgQEAgc3RhdGljIGludGVsX2VuZ2luZV9tYXNrX3QgaW5pdF9lbmdpbmVfbWFzayhzdHJ1 Y3QgaW50ZWxfZ3QgKmd0KQo+PiAgCQkgKiBob29rZWQgdXAgdG8gYW4gU0ZDIChTY2FsZXIgJiBG b3JtYXQgQ29udmVydGVyKSB1bml0Lgo+PiAgCQkgKiBJbiBUR0wgZWFjaCBWREJPWCBoYXMgYWNj ZXNzIHRvIGFuIFNGQy4KPj4gIAkJICovCj4+IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTIg fHwgbG9naWNhbF92ZGJveCsrICUgMiA9PSAwKQo+PiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDEyIHx8IGxvZ2ljYWxfdmRib3grKyAlIDIgPT0gMCkKPj4gIAkJCWd0LT5pbmZvLnZkYm94 X3NmY19hY2Nlc3MgfD0gQklUKGkpOwo+PiAgCX0KPj4gIAlkcm1fZGJnKCZpOTE1LT5kcm0sICJ2 ZGJveCBlbmFibGU6ICUwNHgsIGluc3RhbmNlczogJTA0bHhcbiIsCj4+IEBAIC03MjksNyArNzI5 LDcgQEAgc3RhdGljIGludCBlbmdpbmVfc2V0dXBfY29tbW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPj4gIAlpbnRlbF9lbmdpbmVfaW5pdF93aGl0ZWxpc3QoZW5naW5lKTsKPj4g IAlpbnRlbF9lbmdpbmVfaW5pdF9jdHhfd2EoZW5naW5lKTsKPj4KPj4gLQlpZiAoSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUp ID49IDEyKQo+PiAgCQllbmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX0hBU19SRUxBVElWRV9N TUlPOwo+Pgo+PiAgCXJldHVybiAwOwo+PiBAQCAtOTk3LDkgKzk5Nyw5IEBAIHU2NCBpbnRlbF9l bmdpbmVfZ2V0X2FjdGl2ZV9oZWFkKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKPj4KPj4gIAl1NjQgYWN0aGQ7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQo+ PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkKPj4gIAkJYWN0aGQgPSBFTkdJTkVfUkVB RDY0KGVuZ2luZSwgUklOR19BQ1RIRCwgUklOR19BQ1RIRF9VRFcpOwo+PiAtCWVsc2UgaWYgKElO VEVMX0dFTihpOTE1KSA+PSA0KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA0 KQo+PiAgCQlhY3RoZCA9IEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19BQ1RIRCk7Cj4+ICAJZWxz ZQo+PiAgCQlhY3RoZCA9IEVOR0lORV9SRUFEKGVuZ2luZSwgQUNUSEQpOwo+PiBAQCAtMTAxMSw3 ICsxMDExLDcgQEAgdTY0IGludGVsX2VuZ2luZV9nZXRfbGFzdF9iYXRjaF9oZWFkKGNvbnN0IHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIHsKPj4gIAl1NjQgYmJhZGRyOwo+Pgo+ PiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA4KQo+PiArCWlmIChHUkFQSElDU19W RVIoZW5naW5lLT5pOTE1KSA+PSA4KQo+PiAgCQliYmFkZHIgPSBFTkdJTkVfUkVBRDY0KGVuZ2lu ZSwgUklOR19CQkFERFIsIFJJTkdfQkJBRERSX1VEVyk7Cj4+ICAJZWxzZQo+PiAgCQliYmFkZHIg PSBFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfQkJBRERSKTsKPj4gQEAgLTEwNTgsNyArMTA1OCw3 IEBAIGludCBpbnRlbF9lbmdpbmVfc3RvcF9jcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4+ICB7Cj4+ICAJaW50IGVyciA9IDA7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUt Pmk5MTUpIDwgMykKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCAzKQo+PiAg CQlyZXR1cm4gLUVOT0RFVjsKPj4KPj4gIAlFTkdJTkVfVFJBQ0UoZW5naW5lLCAiXG4iKTsKPj4g QEAgLTExMDgsNyArMTEwOCw3IEBAIHJlYWRfc3Vic2xpY2VfcmVnKGNvbnN0IHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPj4gIAl1MzIgbWNyX21hc2ssIG1jcl9zcywgbWNyLCBvbGRf bWNyLCB2YWw7Cj4+ICAJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21haW5zOwo+Pgo+PiAt CWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDExKSB7Cj4+ICAJCW1jcl9tYXNrID0gR0VOMTFfTUNSX1NMSUNFX01BU0sgfCBHRU4xMV9N Q1JfU1VCU0xJQ0VfTUFTSzsKPj4gIAkJbWNyX3NzID0gR0VOMTFfTUNSX1NMSUNFKHNsaWNlKSB8 IEdFTjExX01DUl9TVUJTTElDRShzdWJzbGljZSk7Cj4+ICAJfSBlbHNlIHsKPj4gQEAgLTExNTcs NyArMTE1Nyw3IEBAIHZvaWQgaW50ZWxfZW5naW5lX2dldF9pbnN0ZG9uZShjb25zdCBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4+Cj4+ICAJbWVtc2V0KGluc3Rkb25lLCAwLCBzaXpl b2YoKmluc3Rkb25lKSk7Cj4+Cj4+IC0Jc3dpdGNoIChJTlRFTF9HRU4oaTkxNSkpIHsKPj4gKwlz d2l0Y2ggKEdSQVBISUNTX1ZFUihpOTE1KSkgewo+PiAgCWRlZmF1bHQ6Cj4+ICAJCWluc3Rkb25l LT5pbnN0ZG9uZSA9Cj4+ICAJCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJJTkdfSU5TVERP TkUobW1pb19iYXNlKSk7Cj4+IEBAIC0xMTY3LDcgKzExNjcsNyBAQCB2b2lkIGludGVsX2VuZ2lu ZV9nZXRfaW5zdGRvbmUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+Pgo+ PiAgCQlpbnN0ZG9uZS0+c2xpY2VfY29tbW9uID0KPj4gIAkJCWludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgR0VON19TQ19JTlNURE9ORSk7Cj4+IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTIp IHsKPj4gKwkJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikgewo+PiAgCQkJaW5zdGRvbmUt PnNsaWNlX2NvbW1vbl9leHRyYVswXSA9Cj4+ICAJCQkJaW50ZWxfdW5jb3JlX3JlYWQodW5jb3Jl LCBHRU4xMl9TQ19JTlNURE9ORV9FWFRSQSk7Cj4+ICAJCQlpbnN0ZG9uZS0+c2xpY2VfY29tbW9u X2V4dHJhWzFdID0KPj4gQEAgLTEyMzAsNyArMTIzMCw3IEBAIHN0YXRpYyBib29sIHJpbmdfaXNf aWRsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ICAJCWlkbGUgPSBmYWxzZTsK Pj4KPj4gIAkvKiBObyBiaXQgZm9yIGdlbjIsIHNvIGFzc3VtZSB0aGUgQ1MgcGFyc2VyIGlzIGlk bGUgKi8KPj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPiAyICYmCj4+ICsJaWYgKEdS QVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID4gMiAmJgo+PiAgCSAgICAhKEVOR0lORV9SRUFEKGVu Z2luZSwgUklOR19NSV9NT0RFKSAmIE1PREVfSURMRSkpCj4+ICAJCWlkbGUgPSBmYWxzZTsKPj4K Pj4gQEAgLTEzMjcsNyArMTMyNyw3IEBAIHZvaWQgaW50ZWxfZW5naW5lc19yZXNldF9kZWZhdWx0 X3N1Ym1pc3Npb24oc3RydWN0IGludGVsX2d0ICpndCkKPj4KPj4gIGJvb2wgaW50ZWxfZW5naW5l X2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ICB7Cj4+ IC0Jc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgewo+PiArCXN3aXRjaCAoR1JBUEhJ Q1NfVkVSKGVuZ2luZS0+aTkxNSkpIHsKPj4gIAljYXNlIDI6Cj4+ICAJCXJldHVybiBmYWxzZTsg LyogdXNlcyBwaHlzaWNhbCBub3QgdmlydHVhbCBhZGRyZXNzZXMgKi8KPj4gIAljYXNlIDM6Cj4+ IEBAIC0xNDMyLDcgKzE0MzIsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfcHJpbnRfcmVn aXN0ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPj4gIAlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsK Pj4gIAl1NjQgYWRkcjsKPj4KPj4gLQlpZiAoZW5naW5lLT5pZCA9PSBSRU5ERVJfQ0xBU1MgJiYg SVNfR0VOX1JBTkdFKGRldl9wcml2LCA0LCA3KSkKPj4gKwlpZiAoZW5naW5lLT5pZCA9PSBSRU5E RVJfQ0xBU1MgJiYgSVNfR1JBUEhJQ1NfVkVSKGRldl9wcml2LCA0LCA3KSkKPj4gIAkJZHJtX3By aW50ZihtLCAiXHRDQ0lEOiAweCUwOHhcbiIsIEVOR0lORV9SRUFEKGVuZ2luZSwgQ0NJRCkpOwo+ PiAgCWlmIChIQVNfRVhFQ0xJU1RTKGRldl9wcml2KSkgewo+PiAgCQlkcm1fcHJpbnRmKG0sICJc dEVMX1NUQVRfSEk6IDB4JTA4eFxuIiwKPj4gQEAgLTE0NDksMTMgKzE0NDksMTMgQEAgc3RhdGlj IHZvaWQgaW50ZWxfZW5naW5lX3ByaW50X3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4+ICAJZHJtX3ByaW50ZihtLCAiXHRSSU5HX0NUTDogICAweCUwOHglc1xuIiwK Pj4gIAkJICAgRU5HSU5FX1JFQUQoZW5naW5lLCBSSU5HX0NUTCksCj4+ICAJCSAgIEVOR0lORV9S RUFEKGVuZ2luZSwgUklOR19DVEwpICYgKFJJTkdfV0FJVCB8IFJJTkdfV0FJVF9TRU1BUEhPUkUp ID8gIiBbd2FpdGluZ10iIDogIiIpOwo+PiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+ IDIpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPiAyKSB7Cj4+ICAJCWRy bV9wcmludGYobSwgIlx0UklOR19NT0RFOiAgMHglMDh4JXNcbiIsCj4+ICAJCQkgICBFTkdJTkVf UkVBRChlbmdpbmUsIFJJTkdfTUlfTU9ERSksCj4+ICAJCQkgICBFTkdJTkVfUkVBRChlbmdpbmUs IFJJTkdfTUlfTU9ERSkgJiAoTU9ERV9JRExFKSA/ICIgW2lkbGVdIiA6ICIiKTsKPj4gIAl9Cj4+ Cj4+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikgewo+PiArCWlmIChHUkFQSElDU19W RVIoZGV2X3ByaXYpID49IDYpIHsKPj4gIAkJZHJtX3ByaW50ZihtLCAiXHRSSU5HX0lNUjogICAw eCUwOHhcbiIsCj4+ICAJCQkgICBFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfSU1SKSk7Cj4+ICAJ CWRybV9wcmludGYobSwgIlx0UklOR19FU1I6ICAgMHglMDh4XG4iLAo+PiBAQCAtMTQ3MiwxNSAr MTQ3MiwxNSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfcHJpbnRfcmVnaXN0ZXJzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPj4gIAlhZGRyID0gaW50ZWxfZW5naW5lX2dldF9s YXN0X2JhdGNoX2hlYWQoZW5naW5lKTsKPj4gIAlkcm1fcHJpbnRmKG0sICJcdEJCQUREUjogMHgl MDh4XyUwOHhcbiIsCj4+ICAJCSAgIHVwcGVyXzMyX2JpdHMoYWRkciksIGxvd2VyXzMyX2JpdHMo YWRkcikpOwo+PiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCj4+ICsJaWYgKEdSQVBI SUNTX1ZFUihkZXZfcHJpdikgPj0gOCkKPj4gIAkJYWRkciA9IEVOR0lORV9SRUFENjQoZW5naW5l LCBSSU5HX0RNQV9GQURELCBSSU5HX0RNQV9GQUREX1VEVyk7Cj4+IC0JZWxzZSBpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA0KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihkZXZfcHJpdikg Pj0gNCkKPj4gIAkJYWRkciA9IEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19ETUFfRkFERCk7Cj4+ ICAJZWxzZQo+PiAgCQlhZGRyID0gRU5HSU5FX1JFQUQoZW5naW5lLCBETUFfRkFERF9JOFhYKTsK Pj4gIAlkcm1fcHJpbnRmKG0sICJcdERNQV9GQUREUjogMHglMDh4XyUwOHhcbiIsCj4+ICAJCSAg IHVwcGVyXzMyX2JpdHMoYWRkciksIGxvd2VyXzMyX2JpdHMoYWRkcikpOwo+PiAtCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDQpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGRldl9wcml2KSA+ PSA0KSB7Cj4+ICAJCWRybV9wcmludGYobSwgIlx0SVBFSVI6IDB4JTA4eFxuIiwKPj4gIAkJCSAg IEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19JUEVJUikpOwo+PiAgCQlkcm1fcHJpbnRmKG0sICJc dElQRUhSOiAweCUwOHhcbiIsCj4+IEBAIC0xNTU5LDcgKzE1NTksNyBAQCBzdGF0aWMgdm9pZCBp bnRlbF9lbmdpbmVfcHJpbnRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKPj4gIAkJfQo+PiAgCQlyY3VfcmVhZF91bmxvY2soKTsKPj4gIAkJZXhlY2xpc3RzX2FjdGl2 ZV91bmxvY2tfYmgoZXhlY2xpc3RzKTsKPj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPiA2KSB7Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoZGV2X3ByaXYpID4gNikgewo+ PiAgCQlkcm1fcHJpbnRmKG0sICJcdFBQX0RJUl9CQVNFOiAweCUwOHhcbiIsCj4+ICAJCQkgICBF TkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfUFBfRElSX0JBU0UpKTsKPj4gIAkJZHJtX3ByaW50Ziht LCAiXHRQUF9ESVJfQkFTRV9SRUFEOiAweCUwOHhcbiIsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwo+PiBpbmRleCA4ZGIy MDA0MjI5NTAuLmZjNzc1OTJkODhhOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jCj4+IEBAIC0xODQ3LDcgKzE4 NDcsNyBAQCBwcm9jZXNzX2NzYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVj dCBpOTE1X3JlcXVlc3QgKippbmFjdGl2ZSkKPj4gIAkJRU5HSU5FX1RSQUNFKGVuZ2luZSwgImNz YlslZF06IHN0YXR1cz0weCUwOHg6MHglMDh4XG4iLAo+PiAgCQkJICAgICBoZWFkLCB1cHBlcl8z Ml9iaXRzKGNzYiksIGxvd2VyXzMyX2JpdHMoY3NiKSk7Cj4+Cj4+IC0JCWlmIChJTlRFTF9HRU4o ZW5naW5lLT5pOTE1KSA+PSAxMikKPj4gKwkJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUp ID49IDEyKQo+PiAgCQkJcHJvbW90ZSA9IGdlbjEyX2NzYl9wYXJzZShjc2IpOwo+PiAgCQllbHNl Cj4+ICAJCQlwcm9tb3RlID0gZ2VuOF9jc2JfcGFyc2UoY3NiKTsKPj4gQEAgLTI3NzIsNyArMjc3 Miw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9leGVjbGlzdHMoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+Pgo+PiAgCWludGVsX2VuZ2luZV9zZXRfaHdzcF93cml0ZW1hc2soZW5naW5l LCB+MHUpOyAvKiBIV1NUQU0gKi8KPj4KPj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkg Pj0gMTEpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDExKQo+PiAgCQlt b2RlID0gX01BU0tFRF9CSVRfRU5BQkxFKEdFTjExX0dGWF9ESVNBQkxFX0xFR0FDWV9NT0RFKTsK Pj4gIAllbHNlCj4+ICAJCW1vZGUgPSBfTUFTS0VEX0JJVF9FTkFCTEUoR0ZYX1JVTl9MSVNUX0VO QUJMRSk7Cj4+IEBAIC0zMTAzLDcgKzMxMDMsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfcGFy ayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+Cj4+ICBzdGF0aWMgYm9vbCBjYW5f cHJlZW1wdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ICB7Cj4+IC0JaWYgKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpID4gOCkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkgPiA4KQo+PiAgCQlyZXR1cm4gdHJ1ZTsKPj4KPj4gIAkvKiBHUEdQVSBvbiBiZHcgcmVx dWlyZXMgZXh0cmEgdy9hOyBub3QgaW1wbGVtZW50ZWQgKi8KPj4gQEAgLTMxNTYsMTMgKzMxNTYs MTMgQEAgbG9naWNhbF9yaW5nX2RlZmF1bHRfdmZ1bmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKPj4gIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X2VtaXRfZmx1c2hfeGNzOwo+ PiAgCWVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIgPSBnZW44X2VtaXRfaW5pdF9icmVhZGNy dW1iOwo+PiAgCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW44X2VtaXRfZmluaV9i cmVhZGNydW1iX3hjczsKPj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpIHsK Pj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTIpIHsKPj4gIAkJZW5naW5l LT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjEyX2VtaXRfZmluaV9icmVhZGNydW1iX3hjczsK Pj4gIAkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuMTJfZW1pdF9mbHVzaF94Y3M7Cj4+ICAJfQo+ PiAgCWVuZ2luZS0+c2V0X2RlZmF1bHRfc3VibWlzc2lvbiA9IGV4ZWNsaXN0c19zZXRfZGVmYXVs dF9zdWJtaXNzaW9uOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDExKSB7 Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpIDwgMTEpIHsKPj4gIAkJZW5naW5l LT5pcnFfZW5hYmxlID0gZ2VuOF9sb2dpY2FsX3JpbmdfZW5hYmxlX2lycTsKPj4gIAkJZW5naW5l LT5pcnFfZGlzYWJsZSA9IGdlbjhfbG9naWNhbF9yaW5nX2Rpc2FibGVfaXJxOwo+PiAgCX0gZWxz ZSB7Cj4+IEBAIC0zMTk1LDcgKzMxOTUsNyBAQCBzdGF0aWMgdm9pZCBsb2dpY2FsX3JpbmdfZGVm YXVsdF9pcnFzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIHsKPj4gIAl1bnNp Z25lZCBpbnQgc2hpZnQgPSAwOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8 IDExKSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpIDwgMTEpIHsKPj4gIAkJ Y29uc3QgdTggaXJxX3NoaWZ0c1tdID0gewo+PiAgCQkJW1JDUzBdICA9IEdFTjhfUkNTX0lSUV9T SElGVCwKPj4gIAkJCVtCQ1MwXSAgPSBHRU44X0JDU19JUlFfU0hJRlQsCj4+IEBAIC0zMjE1LDcg KzMyMTUsNyBAQCBzdGF0aWMgdm9pZCBsb2dpY2FsX3JpbmdfZGVmYXVsdF9pcnFzKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4KPj4gIHN0YXRpYyB2b2lkIHJjc19zdWJtaXNzaW9u X292ZXJyaWRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIHsKPj4gLQlzd2l0 Y2ggKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7Cj4+ICsJc3dpdGNoIChHUkFQSElDU19WRVIo ZW5naW5lLT5pOTE1KSkgewo+PiAgCWNhc2UgMTI6Cj4+ICAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9 IGdlbjEyX2VtaXRfZmx1c2hfcmNzOwo+PiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1i ID0gZ2VuMTJfZW1pdF9maW5pX2JyZWFkY3J1bWJfcmNzOwo+PiBAQCAtMzI2NiwxMyArMzI2Niwx MyBAQCBpbnQgaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb25fc2V0dXAoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+PiAgCWV4ZWNsaXN0cy0+Y3NiX3dyaXRlID0KPj4gIAkJJmVuZ2lu ZS0+c3RhdHVzX3BhZ2UuYWRkcltpbnRlbF9od3NfY3NiX3dyaXRlX2luZGV4KGk5MTUpXTsKPj4K Pj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTEpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA8IDExKQo+PiAgCQlleGVjbGlzdHMtPmNzYl9zaXplID0gR0VOOF9DU0JfRU5UUklFUzsKPj4g IAllbHNlCj4+ICAJCWV4ZWNsaXN0cy0+Y3NiX3NpemUgPSBHRU4xMV9DU0JfRU5UUklFUzsKPj4K Pj4gIAllbmdpbmUtPmNvbnRleHRfdGFnID0gR0VOTUFTSyhCSVRTX1BFUl9MT05HIC0gMiwgMCk7 Cj4+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDExKSB7Cj4+ICsJaWYgKEdSQVBI SUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDExKSB7Cj4+ICAJCWV4ZWNsaXN0cy0+Y2NpZCB8PSBl bmdpbmUtPmluc3RhbmNlIDw8IChHRU4xMV9FTkdJTkVfSU5TVEFOQ0VfU0hJRlQgLSAzMik7Cj4+ ICAJCWV4ZWNsaXN0cy0+Y2NpZCB8PSBlbmdpbmUtPmNsYXNzIDw8IChHRU4xMV9FTkdJTkVfQ0xB U1NfU0hJRlQgLSAzMik7Cj4+ICAJfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dC5j Cj4+IGluZGV4IDM1MDY5Y2E1ZDdkZS4uMTliZDg4NTZjZTg0IDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ2d0dC5jCj4+IEBAIC0xMDcsMTAgKzEwNywxMCBAQCBzdGF0aWMgYm9v bCBuZWVkc19pZGxlX21hcHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+ICAJaWYg KCFpbnRlbF92dGRfYWN0aXZlKCkpCj4+ICAJCXJldHVybiBmYWxzZTsKPj4KPj4gLQlpZiAoSVNf R0VOKGk5MTUsIDUpICYmIElTX01PQklMRShpOTE1KSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpID09IDUgJiYgSVNfTU9CSUxFKGk5MTUpKQo+PiAgCQlyZXR1cm4gdHJ1ZTsKPj4KPj4gLQlp ZiAoSVNfR0VOKGk5MTUsIDEyKSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDEyKQo+ PiAgCQlyZXR1cm4gdHJ1ZTsgLyogWFhYIERNQVIgZmF1bHQgcmVhc29uIDcgKi8KPj4KPj4gIAly ZXR1cm4gZmFsc2U7Cj4+IEBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIHZvaWQgZ3VjX2dndHRf aW52YWxpZGF0ZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+Pgo+PiAgCWdlbjhfZ2d0dF9pbnZh bGlkYXRlKGdndHQpOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTIpCj4+ICsJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikKPj4gIAkJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVu Y29yZSwgR0VOMTJfR1VDX1RMQl9JTlZfQ1IsCj4+ICAJCQkJICAgICAgR0VOMTJfR1VDX1RMQl9J TlZfQ1JfSU5WQUxJREFURSk7Cj4+ICAJZWxzZQo+PiBAQCAtODIwLDcgKzgyMCw3IEBAIHN0YXRp YyBpbnQgZ2d0dF9wcm9iZV9jb21tb24oc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwgdTY0IHNpemUp Cj4+ICAJICogcmVzb3J0IHRvIGFuIHVuY2FjaGVkIG1hcHBpbmcuIFRoZSBXQyBpc3N1ZSBpcyBl YXNpbHkgY2F1Z2h0IGJ5IHRoZQo+PiAgCSAqIHJlYWRiYWNrIGNoZWNrIHdoZW4gd3JpdGluZyBH VFQgUFRFIGVudHJpZXMuCj4+ICAJICovCj4+IC0JaWYgKElTX0dFTjlfTFAoaTkxNSkgfHwgSU5U RUxfR0VOKGk5MTUpID49IDEwKQo+PiArCWlmIChJU19HRU45X0xQKGk5MTUpIHx8IEdSQVBISUNT X1ZFUihpOTE1KSA+PSAxMCkKPj4gIAkJZ2d0dC0+Z3NtID0gaW9yZW1hcChwaHlzX2FkZHIsIHNp emUpOwo+PiAgCWVsc2UKPj4gIAkJZ2d0dC0+Z3NtID0gaW9yZW1hcF93YyhwaHlzX2FkZHIsIHNp emUpOwo+PiBAQCAtMTA2NSw3ICsxMDY1LDcgQEAgc3RhdGljIGludCBnZW42X2dtY2hfcHJvYmUo c3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPj4gIAkJZ2d0dC0+dm0ucHRlX2VuY29kZSA9IGhzd19w dGVfZW5jb2RlOwo+PiAgCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCj4+ICAJCWdndHQt PnZtLnB0ZV9lbmNvZGUgPSBieXRfcHRlX2VuY29kZTsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4o aTkxNSkgPj0gNykKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNykKPj4gIAkJ Z2d0dC0+dm0ucHRlX2VuY29kZSA9IGl2Yl9wdGVfZW5jb2RlOwo+PiAgCWVsc2UKPj4gIAkJZ2d0 dC0+dm0ucHRlX2VuY29kZSA9IHNuYl9wdGVfZW5jb2RlOwo+PiBAQCAtMTEzNyw5ICsxMTM3LDkg QEAgc3RhdGljIGludCBnZ3R0X3Byb2JlX2h3KHN0cnVjdCBpOTE1X2dndHQgKmdndHQsIHN0cnVj dCBpbnRlbF9ndCAqZ3QpCj4+ICAJZ2d0dC0+dm0uZG1hID0gaTkxNS0+ZHJtLmRldjsKPj4gIAlk bWFfcmVzdl9pbml0KCZnZ3R0LT52bS5yZXN2KTsKPj4KPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUp IDw9IDUpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8PSA1KQo+PiAgCQlyZXQgPSBpOTE1 X2dtY2hfcHJvYmUoZ2d0dCk7Cj4+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpIDwgOCkKPj4g KwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPCA4KQo+PiAgCQlyZXQgPSBnZW42X2dtY2hf cHJvYmUoZ2d0dCk7Cj4+ICAJZWxzZQo+PiAgCQlyZXQgPSBnZW44X2dtY2hfcHJvYmUoZ2d0dCk7 Cj4+IEBAIC0xMTk2LDcgKzExOTYsNyBAQCBpbnQgaTkxNV9nZ3R0X3Byb2JlX2h3KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KQo+Pgo+PiAgaW50IGk5MTVfZ2d0dF9lbmFibGVfaHcoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+ICB7Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1 KSA8IDYgJiYgIWludGVsX2VuYWJsZV9ndHQoKSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp IDwgNiAmJiAhaW50ZWxfZW5hYmxlX2d0dCgpKQo+PiAgCQlyZXR1cm4gLUVJTzsKPj4KPj4gIAly ZXR1cm4gMDsKPj4gQEAgLTEyNjEsNyArMTI2MSw3IEBAIHZvaWQgaTkxNV9nZ3R0X3Jlc3VtZShz dHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+PiAgCWlmIChmbHVzaCkKPj4gIAkJd2JpbnZkX29uX2Fs bF9jcHVzKCk7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihnZ3R0LT52bS5pOTE1KSA+PSA4KQo+PiAr CWlmIChHUkFQSElDU19WRVIoZ2d0dC0+dm0uaTkxNSkgPj0gOCkKPj4gIAkJc2V0dXBfcHJpdmF0 ZV9wYXQoZ2d0dC0+dm0uZ3QtPnVuY29yZSk7Cj4+Cj4+ICAJaW50ZWxfZ2d0dF9yZXN0b3JlX2Zl bmNlcyhnZ3R0KTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2dndHRfZmVuY2luZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dF9mZW5j aW5nLmMKPj4gaW5kZXggN2JmODRjZDIxNTQzLi5jYWM3ZjNmNDQ2NDIgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHRfZmVuY2luZy5jCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHRfZmVuY2luZy5jCj4+IEBAIC01Niw3ICs1 Niw3IEBAIHN0YXRpYyB2b2lkIGk5NjVfd3JpdGVfZmVuY2VfcmVnKHN0cnVjdCBpOTE1X2ZlbmNl X3JlZyAqZmVuY2UpCj4+ICAJaW50IGZlbmNlX3BpdGNoX3NoaWZ0Owo+PiAgCXU2NCB2YWw7Cj4+ Cj4+IC0JaWYgKElOVEVMX0dFTihmZW5jZV90b19pOTE1KGZlbmNlKSkgPj0gNikgewo+PiArCWlm IChHUkFQSElDU19WRVIoZmVuY2VfdG9faTkxNShmZW5jZSkpID49IDYpIHsKPj4gIAkJZmVuY2Vf cmVnX2xvID0gRkVOQ0VfUkVHX0dFTjZfTE8oZmVuY2UtPmlkKTsKPj4gIAkJZmVuY2VfcmVnX2hp ID0gRkVOQ0VfUkVHX0dFTjZfSEkoZmVuY2UtPmlkKTsKPj4gIAkJZmVuY2VfcGl0Y2hfc2hpZnQg PSBHRU42X0ZFTkNFX1BJVENIX1NISUZUOwo+PiBAQCAtMTczLDkgKzE3Myw5IEBAIHN0YXRpYyB2 b2lkIGZlbmNlX3dyaXRlKHN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UpCj4+ICAJICogYW5k IGV4cGxpY2l0bHkgbWFuYWdlZCBmb3IgaW50ZXJuYWwgdXNlcnMuCj4+ICAJICovCj4+Cj4+IC0J aWYgKElTX0dFTihpOTE1LCAyKSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDIpCj4+ ICAJCWk4MzBfd3JpdGVfZmVuY2VfcmVnKGZlbmNlKTsKPj4gLQllbHNlIGlmIChJU19HRU4oaTkx NSwgMykpCj4+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDMpCj4+ICAJCWk5MTVf d3JpdGVfZmVuY2VfcmVnKGZlbmNlKTsKPj4gIAllbHNlCj4+ICAJCWk5NjVfd3JpdGVfZmVuY2Vf cmVnKGZlbmNlKTsKPj4gQEAgLTE4OCw3ICsxODgsNyBAQCBzdGF0aWMgdm9pZCBmZW5jZV93cml0 ZShzdHJ1Y3QgaTkxNV9mZW5jZV9yZWcgKmZlbmNlKQo+Pgo+PiAgc3RhdGljIGJvb2wgZ3B1X3Vz ZXNfZmVuY2VfcmVnaXN0ZXJzKHN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UpCj4+ICB7Cj4+ IC0JcmV0dXJuIElOVEVMX0dFTihmZW5jZV90b19pOTE1KGZlbmNlKSkgPCA0Owo+PiArCXJldHVy biBHUkFQSElDU19WRVIoZmVuY2VfdG9faTkxNShmZW5jZSkpIDwgNDsKPj4gIH0KPj4KPj4gIHN0 YXRpYyBpbnQgZmVuY2VfdXBkYXRlKHN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UsCj4+IEBA IC01NjksNyArNTY5LDcgQEAgc3RhdGljIHZvaWQgZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0 IGk5MTVfZ2d0dCAqZ2d0dCkKPj4gIAl1MzIgc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxF X1VOS05PV047Cj4+ICAJdTMyIHN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dO Owo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCB8fCBJU19WQUxMRVlWSUVXKGk5MTUp KSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4IHx8IElTX1ZBTExFWVZJRVcoaTkx NSkpIHsKPj4gIAkJLyoKPj4gIAkJICogT24gQkRXKywgc3dpenpsaW5nIGlzIG5vdCB1c2VkLiBX ZSBsZWF2ZSB0aGUgQ1BVIG1lbW9yeQo+PiAgCQkgKiBjb250cm9sbGVyIGluIGNoYXJnZSBvZiBv cHRpbWl6aW5nIG1lbW9yeSBhY2Nlc3NlcyB3aXRob3V0Cj4+IEBAIC01NzksNyArNTc5LDcgQEAg c3RhdGljIHZvaWQgZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkK Pj4gIAkJICovCj4+ICAJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOwo+PiAg CQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKPj4gLQl9IGVsc2UgaWYgKElO VEVMX0dFTihpOTE1KSA+PSA2KSB7Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkg Pj0gNikgewo+PiAgCQlpZiAoaTkxNS0+cHJlc2VydmVfYmlvc19zd2l6emxlKSB7Cj4+ICAJCQlp ZiAoaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBESVNQX0FSQl9DVEwpICYKPj4gIAkJCSAgICBE SVNQX1RJTEVfU1VSRkFDRV9TV0laWkxJTkcpIHsKPj4gQEAgLTYxMSwxNCArNjExLDE0IEBAIHN0 YXRpYyB2b2lkIGRldGVjdF9iaXRfNl9zd2l6emxlKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4+ ICAJCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7Cj4+ICAJCQl9Cj4+ICAJ CX0KPj4gLQl9IGVsc2UgaWYgKElTX0dFTihpOTE1LCA1KSkgewo+PiArCX0gZWxzZSBpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID09IDUpIHsKPj4gIAkJLyoKPj4gIAkJICogT24gSXJvbmxha2Ugd2hh dGV2ZXIgRFJBTSBjb25maWcsIEdQVSBhbHdheXMgZG8KPj4gIAkJICogc2FtZSBzd2l6emxpbmcg c2V0dXAuCj4+ICAJCSAqLwo+PiAgCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8x MDsKPj4gIAkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzk7Cj4+IC0JfSBlbHNlIGlm IChJU19HRU4oaTkxNSwgMikpIHsKPj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9 PSAyKSB7Cj4+ICAJCS8qCj4+ICAJCSAqIEFzIGZhciBhcyB3ZSBrbm93LCB0aGUgODY1IGRvZXNu J3QgaGF2ZSB0aGVzZSBiaXQgNgo+PiAgCQkgKiBzd2l6emxpbmcgaXNzdWVzLgo+PiBAQCAtNjk3 LDcgKzY5Nyw3IEBAIHN0YXRpYyB2b2lkIGRldGVjdF9iaXRfNl9zd2l6emxlKHN0cnVjdCBpOTE1 X2dndHQgKmdndHQpCj4+ICAJCX0KPj4KPj4gIAkJLyogY2hlY2sgZm9yIEwtc2hhcGVkIG1lbW9y eSBha2EgbW9kaWZpZWQgZW5oYW5jZWQgYWRkcmVzc2luZyAqLwo+PiAtCQlpZiAoSVNfR0VOKGk5 MTUsIDQpICYmCj4+ICsJCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNCAmJgo+PiAgCQkgICAg IShpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERDQzIpICYgRENDMl9NT0RJRklFRF9FTkhBTkNF RF9ESVNBQkxFKSkgewo+PiAgCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05P V047Cj4+ICAJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKPj4gQEAg LTg0NCwxMCArODQ0LDEwIEBAIHZvaWQgaW50ZWxfZ2d0dF9pbml0X2ZlbmNlcyhzdHJ1Y3QgaTkx NV9nZ3R0ICpnZ3R0KQo+Pgo+PiAgCWlmICghaTkxNV9nZ3R0X2hhc19hcGVydHVyZShnZ3R0KSkK Pj4gIAkJbnVtX2ZlbmNlcyA9IDA7Cj4+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDcg JiYKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNyAmJgo+PiAgCQkgIShJU19W QUxMRVlWSUVXKGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpKQo+PiAgCQludW1fZmVuY2Vz ID0gMzI7Cj4+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDQgfHwKPj4gKwllbHNlIGlm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gNCB8fAo+PiAgCQkgSVNfSTk0NUcoaTkxNSkgfHwgSVNf STk0NUdNKGk5MTUpIHx8Cj4+ICAJCSBJU19HMzMoaTkxNSkgfHwgSVNfUElORVZJRVcoaTkxNSkp Cj4+ICAJCW51bV9mZW5jZXMgPSAxNjsKPj4gQEAgLTg5NSwyOSArODk1LDI5IEBAIHZvaWQgaW50 ZWxfZ3RfaW5pdF9zd2l6emxpbmcoc3RydWN0IGludGVsX2d0ICpndCkKPj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5pOTE1Owo+PiAgCXN0cnVjdCBpbnRlbF91bmNvcmUg KnVuY29yZSA9IGd0LT51bmNvcmU7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDUgfHwK Pj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgNSB8fAo+PiAgCSAgICBpOTE1LT5nZ3R0LmJp dF82X3N3aXp6bGVfeCA9PSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORSkKPj4gIAkJcmV0dXJuOwo+ Pgo+PiAgCWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBESVNQX0FSQl9DVEwsIDAsIERJU1BfVElM RV9TVVJGQUNFX1NXSVpaTElORyk7Cj4+Cj4+IC0JaWYgKElTX0dFTihpOTE1LCA1KSkKPj4gKwlp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpCj4+ICAJCXJldHVybjsKPj4KPj4gIAlpbnRlbF91 bmNvcmVfcm13KHVuY29yZSwgVElMRUNUTCwgMCwgVElMRUNUTF9TV1pDVEwpOwo+Pgo+PiAtCWlm IChJU19HRU4oaTkxNSwgNikpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+PiAg CQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAo+PiAgCQkJCSAgIEFSQl9NT0RFLAo+PiAgCQkJ CSAgIF9NQVNLRURfQklUX0VOQUJMRShBUkJfTU9ERV9TV0laWkxFX1NOQikpOwo+PiAtCWVsc2Ug aWYgKElTX0dFTihpOTE1LCA3KSkKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0g NykKPj4gIAkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKPj4gIAkJCQkgICBBUkJfTU9ERSwK Pj4gIAkJCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoQVJCX01PREVfU1dJWlpMRV9JVkIpKTsKPj4g LQllbHNlIGlmIChJU19HRU4oaTkxNSwgOCkpCj4+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpID09IDgpCj4+ICAJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCj4+ICAJCQkJICAgR0FN VEFSQk1PREUsCj4+ICAJCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEFSQl9NT0RFX1NXSVpaTEVf QkRXKSk7Cj4+ICAJZWxzZQo+PiAtCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGk5MTUpKTsKPj4g KwkJTUlTU0lOR19DQVNFKEdSQVBISUNTX1ZFUihpOTE1KSk7Cj4+ICB9Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3QuYwo+PiBpbmRleCA4ZDc3ZGNiYWQwNTkuLjdmMjQzMDFjZWYxOCAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3QuYwo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCj4+IEBAIC0xMTUsMTAgKzExNSwxMCBA QCBzdGF0aWMgdm9pZCBpbml0X3VudXNlZF9yaW5ncyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+PiAg CQlpbml0X3VudXNlZF9yaW5nKGd0LCBTUkIxX0JBU0UpOwo+PiAgCQlpbml0X3VudXNlZF9yaW5n KGd0LCBTUkIyX0JBU0UpOwo+PiAgCQlpbml0X3VudXNlZF9yaW5nKGd0LCBTUkIzX0JBU0UpOwo+ PiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDIpKSB7Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElD U19WRVIoaTkxNSkgPT0gMikgewo+PiAgCQlpbml0X3VudXNlZF9yaW5nKGd0LCBTUkIwX0JBU0Up Owo+PiAgCQlpbml0X3VudXNlZF9yaW5nKGd0LCBTUkIxX0JBU0UpOwo+PiAtCX0gZWxzZSBpZiAo SVNfR0VOKGk5MTUsIDMpKSB7Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0g Mykgewo+PiAgCQlpbml0X3VudXNlZF9yaW5nKGd0LCBQUkIxX0JBU0UpOwo+PiAgCQlpbml0X3Vu dXNlZF9yaW5nKGd0LCBQUkIyX0JBU0UpOwo+PiAgCX0KPj4gQEAgLTEzNSw3ICsxMzUsNyBAQCBp bnQgaW50ZWxfZ3RfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+PiAgCS8qIERvdWJsZSBs YXllciBzZWN1cml0eSBibGFua2V0LCBzZWUgaTkxNV9nZW1faW5pdCgpICovCj4+ICAJaW50ZWxf dW5jb3JlX2ZvcmNld2FrZV9nZXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPj4KPj4gLQlpZiAo SEFTX0VEUkFNKGk5MTUpICYmIElOVEVMX0dFTihpOTE1KSA8IDkpCj4+ICsJaWYgKEhBU19FRFJB TShpOTE1KSAmJiBHUkFQSElDU19WRVIoaTkxNSkgPCA5KQo+PiAgCQlpbnRlbF91bmNvcmVfcm13 KHVuY29yZSwgSFNXX0lESUNSLCAwLCBJRElIQVNITVNLKDB4ZikpOwo+Pgo+PiAgCWlmIChJU19I QVNXRUxMKGk5MTUpKQo+PiBAQCAtMjA4LDEwICsyMDgsMTAgQEAgaW50ZWxfZ3RfY2xlYXJfZXJy b3JfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9ndCAqZ3QsCj4+ICAJc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKPj4gIAl1MzIgZWlyOwo+Pgo+PiAtCWlmICghSVNfR0VO KGk5MTUsIDIpKQo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgIT0gMikKPj4gIAkJY2xlYXJf cmVnaXN0ZXIodW5jb3JlLCBQR1RCTF9FUik7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA8 IDQpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDQpCj4+ICAJCWNsZWFyX3JlZ2lzdGVy KHVuY29yZSwgSVBFSVIoUkVOREVSX1JJTkdfQkFTRSkpOwo+PiAgCWVsc2UKPj4gIAkJY2xlYXJf cmVnaXN0ZXIodW5jb3JlLCBJUEVJUl9JOTY1KTsKPj4gQEAgLTIyOSwxMyArMjI5LDEzIEBAIGlu dGVsX2d0X2NsZWFyX2Vycm9yX3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAo+PiAgCQkJ CSAgIEk5MTVfTUFTVEVSX0VSUk9SX0lOVEVSUlVQVCk7Cj4+ICAJfQo+Pgo+PiAtCWlmIChJTlRF TF9HRU4oaTkxNSkgPj0gMTIpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEyKSB7 Cj4+ICAJCXJtd19jbGVhcih1bmNvcmUsIEdFTjEyX1JJTkdfRkFVTFRfUkVHLCBSSU5HX0ZBVUxU X1ZBTElEKTsKPj4gIAkJaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZCh1bmNvcmUsIEdFTjEyX1JJ TkdfRkFVTFRfUkVHKTsKPj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KSB7Cj4+ ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkgewo+PiAgCQlybXdfY2xlYXIo dW5jb3JlLCBHRU44X1JJTkdfRkFVTFRfUkVHLCBSSU5HX0ZBVUxUX1ZBTElEKTsKPj4gIAkJaW50 ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZCh1bmNvcmUsIEdFTjhfUklOR19GQVVMVF9SRUcpOwo+PiAt CX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpIHsKPj4gKwl9IGVsc2UgaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA+PSA2KSB7Cj4+ICAJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKPj4gIAkJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4+Cj4+IEBAIC0yNzMsNyArMjczLDcg QEAgc3RhdGljIHZvaWQgZ2VuOF9jaGVja19mYXVsdHMoc3RydWN0IGludGVsX2d0ICpndCkKPj4g IAlpOTE1X3JlZ190IGZhdWx0X3JlZywgZmF1bHRfZGF0YTBfcmVnLCBmYXVsdF9kYXRhMV9yZWc7 Cj4+ICAJdTMyIGZhdWx0Owo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDEyKSB7 Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gMTIpIHsKPj4gIAkJZmF1bHRfcmVn ID0gR0VOMTJfUklOR19GQVVMVF9SRUc7Cj4+ICAJCWZhdWx0X2RhdGEwX3JlZyA9IEdFTjEyX0ZB VUxUX1RMQl9EQVRBMDsKPj4gIAkJZmF1bHRfZGF0YTFfcmVnID0gR0VOMTJfRkFVTFRfVExCX0RB VEExOwo+PiBAQCAtMzEzLDkgKzMxMyw5IEBAIHZvaWQgaW50ZWxfZ3RfY2hlY2tfYW5kX2NsZWFy X2ZhdWx0cyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gZ3QtPmk5MTU7Cj4+Cj4+ICAJLyogRnJvbSBHRU44IG9ud2FyZHMgd2Ugb25seSBo YXZlIG9uZSAnQWxsIEVuZ2luZSBGYXVsdCBSZWdpc3RlcicgKi8KPj4gLQlpZiAoSU5URUxfR0VO KGk5MTUpID49IDgpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KQo+PiAgCQlnZW44 X2NoZWNrX2ZhdWx0cyhndCk7Cj4+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4+ ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4+ICAJCWdlbjZfY2hlY2tfZmF1 bHRzKGd0KTsKPj4gIAllbHNlCj4+ICAJCXJldHVybjsKPj4gQEAgLTM2Nyw3ICszNjcsNyBAQCB2 b2lkIGludGVsX2d0X2ZsdXNoX2dndHRfd3JpdGVzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4+ICB2 b2lkIGludGVsX2d0X2NoaXBzZXRfZmx1c2goc3RydWN0IGludGVsX2d0ICpndCkKPj4gIHsKPj4g IAl3bWIoKTsKPj4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDYpCj4+ICsJaWYgKEdSQVBI SUNTX1ZFUihndC0+aTkxNSkgPCA2KQo+PiAgCQlpbnRlbF9ndHRfY2hpcHNldF9mbHVzaCgpOwo+ PiAgfQo+Pgo+PiBAQCAtNTkxLDcgKzU5MSw4IEBAIGludCBpbnRlbF9ndF9pbml0KHN0cnVjdCBp bnRlbF9ndCAqZ3QpCj4+ICAJICovCj4+ICAJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZ3Qt PnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4+Cj4+IC0JZXJyID0gaW50ZWxfZ3RfaW5pdF9zY3Jh dGNoKGd0LCBJU19HRU4oZ3QtPmk5MTUsIDIpID8gU1pfMjU2SyA6IFNaXzRLKTsKPj4gKwllcnIg PSBpbnRlbF9ndF9pbml0X3NjcmF0Y2goZ3QsCj4+ICsJCQkJICAgIEdSQVBISUNTX1ZFUihndC0+ aTkxNSkgPT0gMiA/IFNaXzI1NksgOiBTWl80Syk7Cj4+ICAJaWYgKGVycikKPj4gIAkJZ290byBv dXRfZnc7Cj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9n dF9jbG9ja191dGlscy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfY2xvY2tf dXRpbHMuYwo+PiBpbmRleCA1ODJmY2FlZTExYWEuLjlmMGU3MjlkMmQxNSAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfY2xvY2tfdXRpbHMuYwo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9jbG9ja191dGlscy5jCj4+IEBAIC03 Niw3ICs3Niw3IEBAIHN0YXRpYyB1MzIgcmVhZF9jbG9ja19mcmVxdWVuY3koc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlKQo+PiAgCXUzMiBmMTlfMl9taHogPSAxOTIwMDAwMDsKPj4gIAl1MzIg ZjI0X21oeiA9IDI0MDAwMDAwOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4odW5jb3JlLT5pOTE1KSA8 PSA0KSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUih1bmNvcmUtPmk5MTUpIDw9IDQpIHsKPj4gIAkJ LyoKPj4gIAkJICogUFJNcyBzYXk6Cj4+ICAJCSAqCj4+IEBAIC04NSw3ICs4NSw3IEBAIHN0YXRp YyB1MzIgcmVhZF9jbG9ja19mcmVxdWVuY3koc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQo+ PiAgCQkgKiAgICAgICjigJxDTEtDRkfigJ0pIE1DSEJBUiByZWdpc3RlcikKPj4gIAkJICovCj4+ ICAJCXJldHVybiBSVU5USU1FX0lORk8odW5jb3JlLT5pOTE1KS0+cmF3Y2xrX2ZyZXEgKiAxMDAw IC8gMTY7Cj4+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4odW5jb3JlLT5pOTE1KSA8PSA4KSB7Cj4+ ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIodW5jb3JlLT5pOTE1KSA8PSA4KSB7Cj4+ICAJCS8q Cj4+ICAJCSAqIFBSTXMgc2F5Ogo+PiAgCQkgKgo+PiBAQCAtOTQsNyArOTQsNyBAQCBzdGF0aWMg dTMyIHJlYWRfY2xvY2tfZnJlcXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPj4g IAkJICogICAgICByb2xsaW5nIG92ZXIgZXZlcnkgMS41IGhvdXJzKS4KPj4gIAkJICovCj4+ICAJ CXJldHVybiBmMTJfNV9taHo7Cj4+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4odW5jb3JlLT5pOTE1 KSA8PSA5KSB7Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIodW5jb3JlLT5pOTE1KSA8PSA5 KSB7Cj4+ICAJCXUzMiBjdGNfcmVnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBDVENfTU9E RSk7Cj4+ICAJCXUzMiBmcmVxID0gMDsKPj4KPj4gQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMg dTMyIHJlYWRfY2xvY2tfZnJlcXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPj4g IAkJfQo+Pgo+PiAgCQlyZXR1cm4gZnJlcTsKPj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTih1bmNv cmUtPmk5MTUpIDw9IDEyKSB7Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIodW5jb3JlLT5p OTE1KSA8PSAxMikgewo+PiAgCQl1MzIgY3RjX3JlZyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29y ZSwgQ1RDX01PREUpOwo+PiAgCQl1MzIgZnJlcSA9IDA7Cj4+Cj4+IEBAIC0xMjgsNyArMTI4LDcg QEAgc3RhdGljIHUzMiByZWFkX2Nsb2NrX2ZyZXF1ZW5jeShzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1 bmNvcmUpCj4+ICAJCX0gZWxzZSB7Cj4+ICAJCQl1MzIgYzAgPSBpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIFJQTV9DT05GSUcwKTsKPj4KPj4gLQkJCWlmIChJTlRFTF9HRU4odW5jb3JlLT5pOTE1 KSA8PSAxMCkKPj4gKwkJCWlmIChHUkFQSElDU19WRVIodW5jb3JlLT5pOTE1KSA8PSAxMCkKPj4g IAkJCQlmcmVxID0gZ2VuMTBfZ2V0X2NyeXN0YWxfY2xvY2tfZnJlcSh1bmNvcmUsIGMwKTsKPj4g IAkJCWVsc2UKPj4gIAkJCQlmcmVxID0gZ2VuMTFfZ2V0X2NyeXN0YWxfY2xvY2tfZnJlcSh1bmNv cmUsIGMwKTsKPj4gQEAgLTIxMSw3ICsyMTEsNyBAQCB1NjQgaW50ZWxfZ3RfbnNfdG9fcG1faW50 ZXJ2YWwoY29uc3Qgc3RydWN0IGludGVsX2d0ICpndCwgdTY0IG5zKQo+PiAgCSAqIGZyb3plbiBt YWNoaW5lLgo+PiAgCSAqLwo+PiAgCXZhbCA9IGRpdl91NjRfcm91bmR1cChpbnRlbF9ndF9uc190 b19jbG9ja19pbnRlcnZhbChndCwgbnMpLCAxNik7Cj4+IC0JaWYgKElTX0dFTihndC0+aTkxNSwg NikpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0gNikKPj4gIAkJdmFsID0gZGl2 X3U2NF9yb3VuZHVwKHZhbCwgMjUpICogMjU7Cj4+Cj4+ICAJcmV0dXJuIHZhbDsKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfaXJxLmMKPj4gaW5kZXggZDI5MTI2YzQ1OGJhLi4xZWM2 M2NjZWFiZjYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0 X2lycS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jCj4+ IEBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBnZW41X2d0X2lycV9yZXNldChzdHJ1Y3QgaW50ZWxf Z3QgKmd0KQo+PiAgCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7Cj4+ Cj4+ICAJR0VOM19JUlFfUkVTRVQodW5jb3JlLCBHVCk7Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+ aTkxNSkgPj0gNikKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSA2KQo+PiAgCQlH RU4zX0lSUV9SRVNFVCh1bmNvcmUsIEdFTjZfUE0pOwo+PiAgfQo+Pgo+PiBAQCAtNDEzLDE0ICs0 MTMsMTQgQEAgdm9pZCBnZW41X2d0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgaW50ZWxfZ3QgKmd0 KQo+PiAgCX0KPj4KPj4gIAlndF9pcnFzIHw9IEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVDsKPj4g LQlpZiAoSVNfR0VOKGd0LT5pOTE1LCA1KSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1 KSA9PSA1KQo+PiAgCQlndF9pcnFzIHw9IElMS19CU0RfVVNFUl9JTlRFUlJVUFQ7Cj4+ICAJZWxz ZQo+PiAgCQlndF9pcnFzIHw9IEdUX0JMVF9VU0VSX0lOVEVSUlVQVCB8IEdUX0JTRF9VU0VSX0lO VEVSUlVQVDsKPj4KPj4gIAlHRU4zX0lSUV9JTklUKHVuY29yZSwgR1QsIGd0LT5ndF9pbXIsIGd0 X2lycXMpOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDYpIHsKPj4gKwlpZiAo R1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSA2KSB7Cj4+ICAJCS8qCj4+ICAJCSAqIFJQUyBpbnRl cnJ1cHRzIHdpbGwgZ2V0IGVuYWJsZWQvZGlzYWJsZWQgb24gZGVtYW5kIHdoZW4gUlBTCj4+ICAJ CSAqIGl0c2VsZiBpcyBlbmFibGVkL2Rpc2FibGVkLgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9ndF9wbV9pcnEuYwo+PiBpbmRleCA4MTFhMTFlZDE4MWMuLmZlNTFmODk0YjA3MyAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMK Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMKPj4gQEAg LTE2LDEwICsxNiwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9wbV9pbXIoc3RydWN0IGludGVsX2d0 ICpndCkKPj4gIAl1MzIgbWFzayA9IGd0LT5wbV9pbXI7Cj4+ICAJaTkxNV9yZWdfdCByZWc7Cj4+ Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgewo+PiArCWlmIChHUkFQSElDU19WRVIo aTkxNSkgPj0gMTEpIHsKPj4gIAkJcmVnID0gR0VOMTFfR1BNX1dHQk9YUEVSRl9JTlRSX01BU0s7 Cj4+ICAJCW1hc2sgPDw9IDE2OyAvKiBwbSBpcyBpbiB1cHBlciBoYWxmICovCj4+IC0JfSBlbHNl IGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkgewo+PiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVS KGk5MTUpID49IDgpIHsKPj4gIAkJcmVnID0gR0VOOF9HVF9JTVIoMik7Cj4+ICAJfSBlbHNlIHsK Pj4gIAkJcmVnID0gR0VONl9QTUlNUjsKPj4gQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBnZW42X2d0 X3BtX21hc2tfaXJxKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBtYXNrKQo+PiAgdm9pZCBnZW42 X2d0X3BtX3Jlc2V0X2lpcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgcmVzZXRfbWFzaykKPj4g IHsKPj4gIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwo+PiAtCWk5 MTVfcmVnX3QgcmVnID0gSU5URUxfR0VOKGd0LT5pOTE1KSA+PSA4ID8gR0VOOF9HVF9JSVIoMikg OiBHRU42X1BNSUlSOwo+PiArCWk5MTVfcmVnX3QgcmVnID0gR1JBUEhJQ1NfVkVSKGd0LT5pOTE1 KSA+PSA4ID8gR0VOOF9HVF9JSVIoMikgOiBHRU42X1BNSUlSOwo+Pgo+PiAgCWxvY2tkZXBfYXNz ZXJ0X2hlbGQoJmd0LT5pcnFfbG9jayk7Cj4+Cj4+IEBAIC03NywxMCArNzcsMTAgQEAgc3RhdGlj IHZvaWQgd3JpdGVfcG1faWVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4+ICAJdTMyIG1hc2sgPSBn dC0+cG1faWVyOwo+PiAgCWk5MTVfcmVnX3QgcmVnOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oaTkx NSkgPj0gMTEpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKSB7Cj4+ICAJCXJl ZyA9IEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9FTkFCTEU7Cj4+ICAJCW1hc2sgPDw9IDE2OyAv KiBwbSBpcyBpbiB1cHBlciBoYWxmICovCj4+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gOCkgewo+PiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpIHsKPj4gIAkJ cmVnID0gR0VOOF9HVF9JRVIoMik7Cj4+ICAJfSBlbHNlIHsKPj4gIAkJcmVnID0gR0VONl9QTUlF UjsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3R0LmMKPj4gaW5kZXggOWI5OGY5ZDlmYWEz Li5iOWM5OTkzNTczZWMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2d0dC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5jCj4+ IEBAIC0zMjcsNyArMzI3LDcgQEAgdm9pZCBndHRfd3JpdGVfd29ya2Fyb3VuZHMoc3RydWN0IGlu dGVsX2d0ICpndCkKPj4gIAkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKPj4gIAkJCQkgICBH RU44X0wzX0xSQV8xX0dQR1BVLAo+PiAgCQkJCSAgIEdFTjlfTDNfTFJBXzFfR1BHUFVfREVGQVVM VF9WQUxVRV9CWFQpOwo+PiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5ICYmIElOVEVM X0dFTihpOTE1KSA8PSAxMSkKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSAm JiBHUkFQSElDU19WRVIoaTkxNSkgPD0gMTEpCj4+ICAJCWludGVsX3VuY29yZV93cml0ZSh1bmNv cmUsCj4+ICAJCQkJICAgR0VOOF9MM19MUkFfMV9HUEdQVSwKPj4gIAkJCQkgICBHRU45X0wzX0xS QV8xX0dQR1BVX0RFRkFVTFRfVkFMVUVfU0tMKTsKPj4gQEAgLTM0NCwxMyArMzQ0LDEzIEBAIHZv aWQgZ3R0X3dyaXRlX3dvcmthcm91bmRzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4+ICAJICogZHJp dmVyLgo+PiAgCSAqLwo+PiAgCWlmIChIQVNfUEFHRV9TSVpFUyhpOTE1LCBJOTE1X0dUVF9QQUdF X1NJWkVfNjRLKSAmJgo+PiAtCSAgICBJTlRFTF9HRU4oaTkxNSkgPD0gMTApCj4+ICsJICAgIEdS QVBISUNTX1ZFUihpOTE1KSA8PSAxMCkKPj4gIAkJaW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsCj4+ ICAJCQkJIEdFTjhfR0FNV19FQ09fREVWX1JXX0lBLAo+PiAgCQkJCSAwLAo+PiAgCQkJCSBHQU1X X0VDT19FTkFCTEVfNjRLX0lQU19GSUVMRCk7Cj4+Cj4+IC0JaWYgKElTX0dFTl9SQU5HRShpOTE1 LCA4LCAxMSkpIHsKPj4gKwlpZiAoSVNfR1JBUEhJQ1NfVkVSKGk5MTUsIDgsIDExKSkgewo+PiAg CQlib29sIGNhbl91c2VfZ3R0X2NhY2hlID0gdHJ1ZTsKPj4KPj4gIAkJLyoKPj4gQEAgLTQzMiw3 ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSkKPj4gIAkgICAgICBHRU44X1BQQVQoNywgR0VOOF9QUEFUX1dCIHwg R0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDMpKTsKPj4KPj4gIAkvKiBmb3Igc2Nh bm91dCB3aXRoIGVMTEMgKi8KPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4+ICsJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQo+PiAgCQlwYXQgfD0gR0VOOF9QUEFUKDIsIEdFTjhf UFBBVF9XQiB8IEdFTjhfUFBBVF9FTExDX09WRVJSSURFKTsKPj4gIAllbHNlCj4+ICAJCXBhdCB8 PSBHRU44X1BQQVQoMiwgR0VOOF9QUEFUX1dUIHwgR0VOOF9QUEFUX0xMQ0VMTEMpOwo+PiBAQCAt NDgxLDExICs0ODEsMTEgQEAgdm9pZCBzZXR1cF9wcml2YXRlX3BhdChzdHJ1Y3QgaW50ZWxfdW5j b3JlICp1bmNvcmUpCj4+ICB7Cj4+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB1 bmNvcmUtPmk5MTU7Cj4+Cj4+IC0JR0VNX0JVR19PTihJTlRFTF9HRU4oaTkxNSkgPCA4KTsKPj4g KwlHRU1fQlVHX09OKEdSQVBISUNTX1ZFUihpOTE1KSA8IDgpOwo+Pgo+PiAtCWlmIChJTlRFTF9H RU4oaTkxNSkgPj0gMTIpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikKPj4gIAkJ dGdsX3NldHVwX3ByaXZhdGVfcHBhdCh1bmNvcmUpOwo+PiAtCWVsc2UgaWYgKElOVEVMX0dFTihp OTE1KSA+PSAxMCkKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTApCj4+ICAJ CWNubF9zZXR1cF9wcml2YXRlX3BwYXQodW5jb3JlKTsKPj4gIAllbHNlIGlmIChJU19DSEVSUllW SUVXKGk5MTUpIHx8IElTX0dFTjlfTFAoaTkxNSkpCj4+ICAJCWNodl9zZXR1cF9wcml2YXRlX3Bw YXQodW5jb3JlKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2xsYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMKPj4gaW5kZXggMDc1 ZDc0MTY0NGFlLi5lYjFhMTVkZWVkMjIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2xsYy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2xsYy5jCj4+IEBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBib29sIGdldF9pYV9jb25zdGFudHMo c3RydWN0IGludGVsX2xsYyAqbGxjLAo+Pgo+PiAgCWNvbnN0cy0+bWluX2dwdV9mcmVxID0gcnBz LT5taW5fZnJlcTsKPj4gIAljb25zdHMtPm1heF9ncHVfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Cj4+ IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA+PSA5KSB7Cj4+ICAJCS8qIENvbnZlcnQgR1QgZnJlcXVlbmN5IHRvIDUwIEhaIHVuaXRzICov Cj4+ICAJCWNvbnN0cy0+bWluX2dwdV9mcmVxIC89IEdFTjlfRlJFUV9TQ0FMRVI7Cj4+ICAJCWNv bnN0cy0+bWF4X2dwdV9mcmVxIC89IEdFTjlfRlJFUV9TQ0FMRVI7Cj4+IEBAIC04MywxMyArODMs MTMgQEAgc3RhdGljIHZvaWQgY2FsY19pYV9mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxsYywKPj4g IAljb25zdCBpbnQgZGlmZiA9IGNvbnN0cy0+bWF4X2dwdV9mcmVxIC0gZ3B1X2ZyZXE7Cj4+ICAJ dW5zaWduZWQgaW50IGlhX2ZyZXEgPSAwLCByaW5nX2ZyZXEgPSAwOwo+Pgo+PiAtCWlmIChJTlRF TF9HRU4oaTkxNSkgPj0gOSkgewo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkgewo+ PiAgCQkvKgo+PiAgCQkgKiByaW5nX2ZyZXEgPSAyICogR1QuIHJpbmdfZnJlcSBpcyBpbiAxMDBN SHogdW5pdHMKPj4gIAkJICogTm8gZmxvb3IgcmVxdWlyZWQgZm9yIHJpbmcgZnJlcXVlbmN5IG9u IFNLTC4KPj4gIAkJICovCj4+ICAJCXJpbmdfZnJlcSA9IGdwdV9mcmVxOwo+PiAtCX0gZWxzZSBp ZiAoSU5URUxfR0VOKGk5MTUpID49IDgpIHsKPj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA4KSB7Cj4+ICAJCS8qIG1heCgyICogR1QsIEREUikuIE5COiBHVCBpcyA1ME1IeiB1 bml0cyAqLwo+PiAgCQlyaW5nX2ZyZXEgPSBtYXgoY29uc3RzLT5taW5fcmluZ19mcmVxLCBncHVf ZnJlcSk7Cj4+ICAJfSBlbHNlIGlmIChJU19IQVNXRUxMKGk5MTUpKSB7Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2xyYy5jCj4+IGluZGV4IGFhZmUyYTRkZjQ5Ni4uYTI3YmFjMGE0YmZiIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+PiBAQCAtNDcsNyArNDcsNyBA QCBzdGF0aWMgdm9pZCBzZXRfb2Zmc2V0cyh1MzIgKnJlZ3MsCj4+ICAJCSpyZWdzID0gTUlfTE9B RF9SRUdJU1RFUl9JTU0oY291bnQpOwo+PiAgCQlpZiAoZmxhZ3MgJiBQT1NURUQpCj4+ICAJCQkq cmVncyB8PSBNSV9MUklfRk9SQ0VfUE9TVEVEOwo+PiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkgPj0gMTEpCj4+ICsJCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMSkK Pj4gIAkJCSpyZWdzIHw9IE1JX0xSSV9MUk1fQ1NfTU1JTzsKPj4gIAkJcmVncysrOwo+Pgo+PiBA QCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgdm9pZCBzZXRfb2Zmc2V0cyh1MzIgKnJlZ3MsCj4+ICAJ aWYgKGNsb3NlKSB7Cj4+ICAJCS8qIENsb3NlIHRoZSBiYXRjaDsgdXNlZCBtYWlubHkgYnkgbGl2 ZV9scmNfbGF5b3V0KCkgKi8KPj4gIAkJKnJlZ3MgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+PiAt CQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTApCj4+ICsJCWlmIChHUkFQSElDU19W RVIoZW5naW5lLT5pOTE1KSA+PSAxMCkKPj4gIAkJCSpyZWdzIHw9IEJJVCgwKTsKPj4gIAl9Cj4+ ICB9Cj4+IEBAIC00OTgsMjIgKzQ5OCwyMiBAQCBzdGF0aWMgY29uc3QgdTggKnJlZ19vZmZzZXRz KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIAkgKiBhZGRyZXNzaW5n IHRvIGF1dG9tYXRpYyBmaXh1cCB0aGUgcmVnaXN0ZXIgc3RhdGUgYmV0d2VlbiB0aGUKPj4gIAkg KiBwaHlzaWNhbCBlbmdpbmVzIGZvciB2aXJ0dWFsIGVuZ2luZS4KPj4gIAkgKi8KPj4gLQlHRU1f QlVHX09OKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyICYmCj4+ICsJR0VNX0JVR19PTihH UkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMiAmJgo+PiAgCQkgICAhaW50ZWxfZW5naW5l X2hhc19yZWxhdGl2ZV9tbWlvKGVuZ2luZSkpOwo+Pgo+PiAgCWlmIChlbmdpbmUtPmNsYXNzID09 IFJFTkRFUl9DTEFTUykgewo+PiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIp Cj4+ICsJCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMikKPj4gIAkJCXJldHVy biBnZW4xMl9yY3Nfb2Zmc2V0czsKPj4gLQkJZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkgPj0gMTEpCj4+ICsJCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDEx KQo+PiAgCQkJcmV0dXJuIGdlbjExX3Jjc19vZmZzZXRzOwo+PiAtCQllbHNlIGlmIChJTlRFTF9H RU4oZW5naW5lLT5pOTE1KSA+PSA5KQo+PiArCQllbHNlIGlmIChHUkFQSElDU19WRVIoZW5naW5l LT5pOTE1KSA+PSA5KQo+PiAgCQkJcmV0dXJuIGdlbjlfcmNzX29mZnNldHM7Cj4+ICAJCWVsc2UK Pj4gIAkJCXJldHVybiBnZW44X3Jjc19vZmZzZXRzOwo+PiAgCX0gZWxzZSB7Cj4+IC0JCWlmIChJ TlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPj4gKwkJaWYgKEdSQVBISUNTX1ZFUihlbmdp bmUtPmk5MTUpID49IDEyKQo+PiAgCQkJcmV0dXJuIGdlbjEyX3hjc19vZmZzZXRzOwo+PiAtCQll bHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5KQo+PiArCQllbHNlIGlmIChHUkFQ SElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA5KQo+PiAgCQkJcmV0dXJuIGdlbjlfeGNzX29mZnNl dHM7Cj4+ICAJCWVsc2UKPj4gIAkJCXJldHVybiBnZW44X3hjc19vZmZzZXRzOwo+PiBAQCAtNTIy LDkgKzUyMiw5IEBAIHN0YXRpYyBjb25zdCB1OCAqcmVnX29mZnNldHMoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+Pgo+PiAgc3RhdGljIGludCBscmNfcmluZ19taV9tb2Rl KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIHsKPj4gLQlpZiAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUt Pmk5MTUpID49IDEyKQo+PiAgCQlyZXR1cm4gMHg2MDsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4o ZW5naW5lLT5pOTE1KSA+PSA5KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5 MTUpID49IDkpCj4+ICAJCXJldHVybiAweDU0Owo+PiAgCWVsc2UgaWYgKGVuZ2luZS0+Y2xhc3Mg PT0gUkVOREVSX0NMQVNTKQo+PiAgCQlyZXR1cm4gMHg1ODsKPj4gQEAgLTUzNCw5ICs1MzQsOSBA QCBzdGF0aWMgaW50IGxyY19yaW5nX21pX21vZGUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+Pgo+PiAgc3RhdGljIGludCBscmNfcmluZ19ncHIwKGNvbnN0IHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIHsKPj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkgPj0gMTIpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDEyKQo+ PiAgCQlyZXR1cm4gMHg3NDsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+ PSA5KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDkpCj4+ICAJ CXJldHVybiAweDY4Owo+PiAgCWVsc2UgaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNT KQo+PiAgCQlyZXR1cm4gMHhkODsKPj4gQEAgLTU0Niw5ICs1NDYsOSBAQCBzdGF0aWMgaW50IGxy Y19yaW5nX2dwcjAoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+Pgo+PiAg c3RhdGljIGludCBscmNfcmluZ193YV9iYl9wZXJfY3R4KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPj4gIHsKPj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0g MTIpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDEyKQo+PiAgCQlyZXR1 cm4gMHgxMjsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5IHx8IGVu Z2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihl bmdpbmUtPmk5MTUpID49IDkgfHwgZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpCj4+ICAJ CXJldHVybiAweDE4Owo+PiAgCWVsc2UKPj4gIAkJcmV0dXJuIC0xOwo+PiBAQCAtNTgxLDkgKzU4 MSw5IEBAIHN0YXRpYyBpbnQgbHJjX3JpbmdfY21kX2J1Zl9jY3RsKGNvbnN0IHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIAlpZiAoZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xB U1MpCj4+ICAJCXJldHVybiAtMTsKPj4KPj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkg Pj0gMTIpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDEyKQo+PiAgCQly ZXR1cm4gMHhiNjsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMSkK Pj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMSkKPj4gIAkJcmV0 dXJuIDB4YWE7Cj4+ICAJZWxzZQo+PiAgCQlyZXR1cm4gLTE7Cj4+IEBAIC01OTIsOSArNTkyLDkg QEAgc3RhdGljIGludCBscmNfcmluZ19jbWRfYnVmX2NjdGwoY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+PiAgc3RhdGljIHUzMgo+PiAgbHJjX3JpbmdfaW5kaXJlY3Rfb2Zm c2V0X2RlZmF1bHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiAgewo+ PiAtCXN3aXRjaCAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKPj4gKwlzd2l0Y2ggKEdSQVBI SUNTX1ZFUihlbmdpbmUtPmk5MTUpKSB7Cj4+ICAJZGVmYXVsdDoKPj4gLQkJTUlTU0lOR19DQVNF KElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKTsKPj4gKwkJTUlTU0lOR19DQVNFKEdSQVBISUNTX1ZF UihlbmdpbmUtPmk5MTUpKTsKPj4gIAkJZmFsbHRocm91Z2g7Cj4+ICAJY2FzZSAxMjoKPj4gIAkJ cmV0dXJuIEdFTjEyX0NUWF9SQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVF9ERUZBVUxUOwo+PiBAQCAt NjM3LDcgKzYzNyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfY29tbW9uX3JlZ3ModTMyICogY29uc3Qg cmVncywKPj4gIAljdGwgfD0gX01BU0tFRF9CSVRfRElTQUJMRShDVFhfQ1RSTF9FTkdJTkVfQ1RY X1JFU1RPUkVfSU5ISUJJVCk7Cj4+ICAJaWYgKGluaGliaXQpCj4+ICAJCWN0bCB8PSBDVFhfQ1RS TF9FTkdJTkVfQ1RYX1JFU1RPUkVfSU5ISUJJVDsKPj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkgPCAxMSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCAxMSkKPj4g IAkJY3RsIHw9IF9NQVNLRURfQklUX0RJU0FCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9TQVZFX0lO SElCSVQgfAo+PiAgCQkJCQkgICBDVFhfQ1RSTF9SU19DVFhfRU5BQkxFKTsKPj4gIAlyZWdzW0NU WF9DT05URVhUX0NPTlRST0xdID0gY3RsOwo+PiBAQCAtODA1LDcgKzgwNSw3IEBAIF9fbHJjX2Fs bG9jX3N0YXRlKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwgc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+PiAgCWlmIChJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19HRU0p KQo+PiAgCQljb250ZXh0X3NpemUgKz0gSTkxNV9HVFRfUEFHRV9TSVpFOyAvKiBmb3IgcmVkem9u ZSAqLwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA9PSAxMikgewo+PiArCWlm IChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA9PSAxMikgewo+PiAgCQljZS0+d2FfYmJfcGFn ZSA9IGNvbnRleHRfc2l6ZSAvIFBBR0VfU0laRTsKPj4gIAkJY29udGV4dF9zaXplICs9IFBBR0Vf U0laRTsKPj4gIAl9Cj4+IEBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgdTMyIGxyY19kZXNj cmlwdG9yKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPj4gIAlkZXNjIDw8PSBHRU44 X0NUWF9BRERSRVNTSU5HX01PREVfU0hJRlQ7Cj4+Cj4+ICAJZGVzYyB8PSBHRU44X0NUWF9WQUxJ RCB8IEdFTjhfQ1RYX1BSSVZJTEVHRTsKPj4gLQlpZiAoSVNfR0VOKGNlLT52bS0+aTkxNSwgOCkp Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihjZS0+dm0tPmk5MTUpID09IDgpCj4+ICAJCWRlc2MgfD0g R0VOOF9DVFhfTDNMTENfQ09IRVJFTlQ7Cj4+Cj4+ICAJcmV0dXJuIGk5MTVfZ2d0dF9vZmZzZXQo Y2UtPnN0YXRlKSB8IGRlc2M7Cj4+IEBAIC0xNDY5LDcgKzE0NjksNyBAQCB2b2lkIGxyY19pbml0 X3dhX2N0eChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ICAJaWYgKGVuZ2luZS0+ Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQo+PiAgCQlyZXR1cm47Cj4+Cj4+IC0Jc3dpdGNoIChJTlRF TF9HRU4oZW5naW5lLT5pOTE1KSkgewo+PiArCXN3aXRjaCAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkpIHsKPj4gIAljYXNlIDEyOgo+PiAgCWNhc2UgMTE6Cj4+ICAJCXJldHVybjsKPj4gQEAg LTE0ODYsNyArMTQ4Niw3IEBAIHZvaWQgbHJjX2luaXRfd2FfY3R4KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPj4gIAkJd2FfYmJfZm5bMV0gPSBOVUxMOwo+PiAgCQlicmVhazsKPj4g IAlkZWZhdWx0Ogo+PiAtCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpOwo+ PiArCQlNSVNTSU5HX0NBU0UoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpOwo+PiAgCQlyZXR1 cm47Cj4+ICAJfQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfbW9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbW9jcy5jCj4+IGluZGV4 IGIxNDEzOGZkNTA1Yy4uMTc4NDg4MDdmMTExIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9tb2NzLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfbW9jcy5jCj4+IEBAIC0zNDQsMTEgKzM0NCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50 IGdldF9tb2NzX3NldHRpbmdzKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ PiAgCQl0YWJsZS0+c2l6ZSA9IEFSUkFZX1NJWkUoZGcxX21vY3NfdGFibGUpOwo+PiAgCQl0YWJs ZS0+dGFibGUgPSBkZzFfbW9jc190YWJsZTsKPj4gIAkJdGFibGUtPm5fZW50cmllcyA9IEdFTjlf TlVNX01PQ1NfRU5UUklFUzsKPj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMikg ewo+PiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEyKSB7Cj4+ICAJCXRhYmxl LT5zaXplICA9IEFSUkFZX1NJWkUodGdsX21vY3NfdGFibGUpOwo+PiAgCQl0YWJsZS0+dGFibGUg PSB0Z2xfbW9jc190YWJsZTsKPj4gIAkJdGFibGUtPm5fZW50cmllcyA9IEdFTjlfTlVNX01PQ1Nf RU5UUklFUzsKPj4gLQl9IGVsc2UgaWYgKElTX0dFTihpOTE1LCAxMSkpIHsKPj4gKwl9IGVsc2Ug aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMSkgewo+PiAgCQl0YWJsZS0+c2l6ZSAgPSBBUlJB WV9TSVpFKGljbF9tb2NzX3RhYmxlKTsKPj4gIAkJdGFibGUtPnRhYmxlID0gaWNsX21vY3NfdGFi bGU7Cj4+ICAJCXRhYmxlLT5uX2VudHJpZXMgPSBHRU45X05VTV9NT0NTX0VOVFJJRVM7Cj4+IEBA IC0zNjEsNyArMzYxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbW9jc19zZXR0aW5ncyhj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPj4gIAkJdGFibGUtPm5fZW50cmll cyA9IEdFTjlfTlVNX01PQ1NfRU5UUklFUzsKPj4gIAkJdGFibGUtPnRhYmxlID0gYnJveHRvbl9t b2NzX3RhYmxlOwo+PiAgCX0gZWxzZSB7Cj4+IC0JCWRybV9XQVJOX09OQ0UoJmk5MTUtPmRybSwg SU5URUxfR0VOKGk5MTUpID49IDksCj4+ICsJCWRybV9XQVJOX09OQ0UoJmk5MTUtPmRybSwgR1JB UEhJQ1NfVkVSKGk5MTUpID49IDksCj4+ICAJCQkgICAgICAiUGxhdGZvcm0gdGhhdCBzaG91bGQg aGF2ZSBhIE1PQ1MgdGFibGUgZG9lcyBub3QuXG4iKTsKPj4gIAkJcmV0dXJuIDA7Cj4+ICAJfQo+ PiBAQCAtMzcwLDcgKzM3MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X21vY3Nfc2V0dGlu Z3MoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4+ICAJCXJldHVybiAwOwo+ Pgo+PiAgCS8qIFdhRGlzYWJsZVNraXBDYWNoaW5nOnNrbCxieHQsa2JsLGdsayAqLwo+PiAtCWlm IChJU19HRU4oaTkxNSwgOSkpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDkpIHsK Pj4gIAkJaW50IGk7Cj4+Cj4+ICAJCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgaSsrKQo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcHBndHQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3BwZ3R0LmMKPj4gaW5kZXggNGUzZDgwYzIyOTVj Li4zODkxYzA3ODkwNmUgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3BwZ3R0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcHBndHQu Ywo+PiBAQCAtMTQ2LDkgKzE0Niw5IEBAIGludCBpOTE1X3BwZ3R0X2luaXRfaHcoc3RydWN0IGlu dGVsX2d0ICpndCkKPj4KPj4gIAlndHRfd3JpdGVfd29ya2Fyb3VuZHMoZ3QpOwo+Pgo+PiAtCWlm IChJU19HRU4oaTkxNSwgNikpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+PiAg CQlnZW42X3BwZ3R0X2VuYWJsZShndCk7Cj4+IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDcpKQo+ PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA3KQo+PiAgCQlnZW43X3BwZ3R0X2Vu YWJsZShndCk7Cj4+Cj4+ICAJcmV0dXJuIDA7Cj4+IEBAIC0xNTcsNyArMTU3LDcgQEAgaW50IGk5 MTVfcHBndHRfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+PiAgc3RhdGljIHN0cnVjdCBp OTE1X3BwZ3R0ICoKPj4gIF9fcHBndHRfY3JlYXRlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4+ICB7 Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4KQo+PiArCWlmIChHUkFQSElDU19WRVIo Z3QtPmk5MTUpIDwgOCkKPj4gIAkJcmV0dXJuIGdlbjZfcHBndHRfY3JlYXRlKGd0KTsKPj4gIAll bHNlCj4+ICAJCXJldHVybiBnZW44X3BwZ3R0X2NyZWF0ZShndCk7Cj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX3JjNi5jCj4+IGluZGV4IDNiN2U2MmRlYmU3ZS4uMjU5ZDdlYjRlMTY1IDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYuYwo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYuYwo+PiBAQCAtMTA5LDcgKzEwOSw3IEBA IHN0YXRpYyB2b2lkIGdlbjExX3JjNl9lbmFibGUoc3RydWN0IGludGVsX3JjNiAqcmM2KQo+PiAg CQlHRU45X01FRElBX1BHX0VOQUJMRSB8Cj4+ICAJCUdFTjExX01FRElBX1NBTVBMRVJfUEdfRU5B QkxFOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDEyKSB7Cj4+ICsJaWYgKEdS QVBISUNTX1ZFUihndC0+aTkxNSkgPj0gMTIpIHsKPj4gIAkJZm9yIChpID0gMDsgaSA8IEk5MTVf TUFYX1ZDUzsgaSsrKQo+PiAgCQkJaWYgKEhBU19FTkdJTkUoZ3QsIF9WQ1MoaSkpKQo+PiAgCQkJ CXBnX2VuYWJsZSB8PSAoVkROX0hDUF9QT1dFUkdBVEVfRU5BQkxFKGkpIHwKPj4gQEAgLTEyNiw3 ICsxMjYsNyBAQCBzdGF0aWMgdm9pZCBnZW45X3JjNl9lbmFibGUoc3RydWN0IGludGVsX3JjNiAq cmM2KQo+PiAgCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+Pgo+PiAgCS8qIDJiOiBQcm9ncmFt IFJDNiB0aHJlc2hvbGRzLiovCj4+IC0JaWYgKElOVEVMX0dFTihyYzZfdG9faTkxNShyYzYpKSA+ PSAxMCkgewo+PiArCWlmIChHUkFQSElDU19WRVIocmM2X3RvX2k5MTUocmM2KSkgPj0gMTApIHsK Pj4gIAkJc2V0KHVuY29yZSwgR0VONl9SQzZfV0FLRV9SQVRFX0xJTUlULCA1NCA8PCAxNiB8IDg1 KTsKPj4gIAkJc2V0KHVuY29yZSwgR0VOMTBfTUVESUFfV0FLRV9SQVRFX0xJTUlULCAxNTApOwo+ PiAgCX0gZWxzZSBpZiAoSVNfU0tZTEFLRShyYzZfdG9faTkxNShyYzYpKSkgewo+PiBAQCAtMjQ5 LDkgKzI0OSw5IEBAIHN0YXRpYyB2b2lkIGdlbjZfcmM2X2VuYWJsZShzdHJ1Y3QgaW50ZWxfcmM2 ICpyYzYpCj4+ICAJcmM2dmlkcyA9IDA7Cj4+ICAJcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVfcmVh ZChpOTE1LCBHRU42X1BDT0RFX1JFQURfUkM2VklEUywKPj4gIAkJCQkgICAgICZyYzZ2aWRzLCBO VUxMKTsKPj4gLQlpZiAoSVNfR0VOKGk5MTUsIDYpICYmIHJldCkgewo+PiArCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPT0gNiAmJiByZXQpIHsKPj4gIAkJZHJtX2RiZygmaTkxNS0+ZHJtLCAiQ291 bGRuJ3QgY2hlY2sgZm9yIEJJT1Mgd29ya2Fyb3VuZFxuIik7Cj4+IC0JfSBlbHNlIGlmIChJU19H RU4oaTkxNSwgNikgJiYKPj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2ICYm Cj4+ICAJCSAgIChHRU42X0RFQ09ERV9SQzZfVklEKHJjNnZpZHMgJiAweGZmKSA8IDQ1MCkpIHsK Pj4gIAkJZHJtX2RiZygmaTkxNS0+ZHJtLAo+PiAgCQkJIllvdSBzaG91bGQgdXBkYXRlIHlvdXIg QklPUy4gQ29ycmVjdGluZyBtaW5pbXVtIHJjNiB2b2x0YWdlICglZG1WLT4lZG1WKVxuIiwKPj4g QEAgLTUxNSw3ICs1MTUsNyBAQCBzdGF0aWMgdm9pZCBfX2ludGVsX3JjNl9kaXNhYmxlKHN0cnVj dCBpbnRlbF9yYzYgKnJjNikKPj4gIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSByYzZf dG9fdW5jb3JlKHJjNik7Cj4+Cj4+ICAJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQodW5jb3Jl LCBGT1JDRVdBS0VfQUxMKTsKPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4+ICsJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQo+PiAgCQlzZXQodW5jb3JlLCBHRU45X1BHX0VOQUJM RSwgMCk7Cj4+ICAJc2V0KHVuY29yZSwgR0VONl9SQ19DT05UUk9MLCAwKTsKPj4gIAlzZXQodW5j b3JlLCBHRU42X1JDX1NUQVRFLCAwKTsKPj4gQEAgLTU3NSwxMyArNTc1LDEzIEBAIHZvaWQgaW50 ZWxfcmM2X2VuYWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCj4+ICAJCWNodl9yYzZfZW5hYmxl KHJjNik7Cj4+ICAJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKPj4gIAkJdmx2X3JjNl9l bmFibGUocmM2KTsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpCj4+ICsJZWxz ZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKQo+PiAgCQlnZW4xMV9yYzZfZW5hYmxlKHJj Nik7Cj4+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4+ICsJZWxzZSBpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID49IDkpCj4+ICAJCWdlbjlfcmM2X2VuYWJsZShyYzYpOwo+PiAgCWVs c2UgaWYgKElTX0JST0FEV0VMTChpOTE1KSkKPj4gIAkJZ2VuOF9yYzZfZW5hYmxlKHJjNik7Cj4+ IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4+ICsJZWxzZSBpZiAoR1JBUEhJQ1Nf VkVSKGk5MTUpID49IDYpCj4+ICAJCWdlbjZfcmM2X2VuYWJsZShyYzYpOwo+Pgo+PiAgCXJjNi0+ bWFudWFsID0gcmM2LT5jdGxfZW5hYmxlICYgR0VONl9SQ19DVExfUkM2X0VOQUJMRTsKPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlbmRlcnN0YXRlLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZW5kZXJzdGF0ZS5jCj4+IGluZGV4IGIwM2Ux OTdiMWQ5OS4uYjU3NWNkNmUwYjdhIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9yZW5kZXJzdGF0ZS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3JlbmRlcnN0YXRlLmMKPj4gQEAgLTE1LDcgKzE1LDcgQEAgcmVuZGVyX3N0YXRlX2dl dF9yb2RhdGEoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiAgCWlmIChl bmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPj4gIAkJcmV0dXJuIE5VTEw7Cj4+Cj4+IC0J c3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgewo+PiArCXN3aXRjaCAoR1JBUEhJQ1Nf VkVSKGVuZ2luZS0+aTkxNSkpIHsKPj4gIAljYXNlIDY6Cj4+ICAJCXJldHVybiAmZ2VuNl9udWxs X3N0YXRlOwo+PiAgCWNhc2UgNzoKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX3Jlc2V0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5j Cj4+IGluZGV4IGQ1MDk0YmU2ZDkwZi4uMjczMTVkN2Y4OTM1IDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMKPj4gQEAgLTU2NSw3ICs1NjUsNyBAQCBzdGF0aWMgaW50 IGdlbjhfcmVzZXRfZW5naW5lcyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAo+PiAgCQkgKi8KPj4gIAl9 Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEpCj4+ICsJaWYgKEdSQVBISUNT X1ZFUihndC0+aTkxNSkgPj0gMTEpCj4+ICAJCXJldCA9IGdlbjExX3Jlc2V0X2VuZ2luZXMoZ3Qs IGVuZ2luZV9tYXNrLCByZXRyeSk7Cj4+ICAJZWxzZQo+PiAgCQlyZXQgPSBnZW42X3Jlc2V0X2Vu Z2luZXMoZ3QsIGVuZ2luZV9tYXNrLCByZXRyeSk7Cj4+IEBAIC01OTQsMTcgKzU5NCwxNyBAQCBz dGF0aWMgcmVzZXRfZnVuYyBpbnRlbF9nZXRfZ3B1X3Jlc2V0KGNvbnN0IHN0cnVjdCBpbnRlbF9n dCAqZ3QpCj4+Cj4+ICAJaWYgKGlzX21vY2tfZ3QoZ3QpKQo+PiAgCQlyZXR1cm4gbW9ja19yZXNl dDsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKPj4gKwllbHNlIGlmIChHUkFQ SElDU19WRVIoaTkxNSkgPj0gOCkKPj4gIAkJcmV0dXJuIGdlbjhfcmVzZXRfZW5naW5lczsKPj4g LQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKPj4gKwllbHNlIGlmIChHUkFQSElDU19W RVIoaTkxNSkgPj0gNikKPj4gIAkJcmV0dXJuIGdlbjZfcmVzZXRfZW5naW5lczsKPj4gLQllbHNl IGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNSkKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkx NSkgPj0gNSkKPj4gIAkJcmV0dXJuIGlsa19kb19yZXNldDsKPj4gIAllbHNlIGlmIChJU19HNFgo aTkxNSkpCj4+ICAJCXJldHVybiBnNHhfZG9fcmVzZXQ7Cj4+ICAJZWxzZSBpZiAoSVNfRzMzKGk5 MTUpIHx8IElTX1BJTkVWSUVXKGk5MTUpKQo+PiAgCQlyZXR1cm4gZzMzX2RvX3Jlc2V0Owo+PiAt CWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSAzKQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZF UihpOTE1KSA+PSAzKQo+PiAgCQlyZXR1cm4gaTkxNV9kb19yZXNldDsKPj4gIAllbHNlCj4+ICAJ CXJldHVybiBOVUxMOwo+PiBAQCAtNjU2LDcgKzY1Niw3IEBAIGJvb2wgaW50ZWxfaGFzX3Jlc2V0 X2VuZ2luZShjb25zdCBzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+PiAgaW50IGludGVsX3Jlc2V0X2d1 YyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+PiAgewo+PiAgCXUzMiBndWNfZG9tYWluID0KPj4gLQkJ SU5URUxfR0VOKGd0LT5pOTE1KSA+PSAxMSA/IEdFTjExX0dSRE9NX0dVQyA6IEdFTjlfR1JET01f R1VDOwo+PiArCQlHUkFQSElDU19WRVIoZ3QtPmk5MTUpID49IDExID8gR0VOMTFfR1JET01fR1VD IDogR0VOOV9HUkRPTV9HVUM7Cj4+ICAJaW50IHJldDsKPj4KPj4gIAlHRU1fQlVHX09OKCFIQVNf R1RfVUMoZ3QtPmk5MTUpKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cmluZ19zdWJtaXNzaW9uLmMKPj4gaW5kZXggMmI2ZGZmY2MyMjYyLi4wYzQyM2YwOTZlMmIgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lv bi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lv bi5jCj4+IEBAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyB2b2lkIHNldF9od3N0YW0oc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgbWFzaykKPj4gIAkgKiBsb3N0IGludGVycnVwdHMg Zm9sbG93aW5nIGEgcmVzZXQuCj4+ICAJICovCj4+ICAJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVO REVSX0NMQVNTKSB7Cj4+IC0JCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA2KQo+PiAr CQlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gNikKPj4gIAkJCW1hc2sgJj0gfkJJ VCgwKTsKPj4gIAkJZWxzZQo+PiAgCQkJbWFzayAmPSB+STkxNV9VU0VSX0lOVEVSUlVQVDsKPj4g QEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHZvaWQgc2V0X2h3c19wZ2Eoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLCBwaHlzX2FkZHJfdCBwaHlzKQo+PiAgCXUzMiBhZGRyOwo+Pgo+PiAg CWFkZHIgPSBsb3dlcl8zMl9iaXRzKHBoeXMpOwo+PiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5p OTE1KSA+PSA0KQo+PiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA0KQo+PiAg CQlhZGRyIHw9IChwaHlzID4+IDI4KSAmIDB4ZjA7Cj4+Cj4+ICAJaW50ZWxfdW5jb3JlX3dyaXRl KGVuZ2luZS0+dW5jb3JlLCBIV1NfUEdBLCBhZGRyKTsKPj4gQEAgLTcxLDcgKzcxLDcgQEAgc3Rh dGljIHZvaWQgc2V0X2h3c3Aoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgb2Zm c2V0KQo+PiAgCSAqIFRoZSByaW5nIHN0YXR1cyBwYWdlIGFkZHJlc3NlcyBhcmUgbm8gbG9uZ2Vy IG5leHQgdG8gdGhlIHJlc3Qgb2YKPj4gIAkgKiB0aGUgcmluZyByZWdpc3RlcnMgYXMgb2YgZ2Vu Ny4KPj4gIAkgKi8KPj4gLQlpZiAoSVNfR0VOKGVuZ2luZS0+aTkxNSwgNykpIHsKPj4gKwlpZiAo R1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPT0gNykgewo+PiAgCQlzd2l0Y2ggKGVuZ2luZS0+ aWQpIHsKPj4gIAkJLyoKPj4gIAkJICogTm8gbW9yZSByaW5ncyBleGlzdCBvbiBHZW43LiBEZWZh dWx0IGNhc2UgaXMgb25seSB0byBzaHV0IHVwCj4+IEBAIC05Myw3ICs5Myw3IEBAIHN0YXRpYyB2 b2lkIHNldF9od3NwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIG9mZnNldCkK Pj4gIAkJCWh3c3AgPSBWRUJPWF9IV1NfUEdBX0dFTjc7Cj4+ICAJCQlicmVhazsKPj4gIAkJfQo+ PiAtCX0gZWxzZSBpZiAoSVNfR0VOKGVuZ2luZS0+aTkxNSwgNikpIHsKPj4gKwl9IGVsc2UgaWYg KEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID09IDYpIHsKPj4gIAkJaHdzcCA9IFJJTkdfSFdT X1BHQV9HRU42KGVuZ2luZS0+bW1pb19iYXNlKTsKPj4gIAl9IGVsc2Ugewo+PiAgCQlod3NwID0g UklOR19IV1NfUEdBKGVuZ2luZS0+bW1pb19iYXNlKTsKPj4gQEAgLTEwNSw3ICsxMDUsNyBAQCBz dGF0aWMgdm9pZCBzZXRfaHdzcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBv ZmZzZXQpCj4+Cj4+ICBzdGF0aWMgdm9pZCBmbHVzaF9jc190bGIoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQo+PiAgewo+PiAtCWlmICghSVNfR0VOX1JBTkdFKGVuZ2luZS0+aTkxNSwg NiwgNykpCj4+ICsJaWYgKCFJU19HUkFQSElDU19WRVIoZW5naW5lLT5pOTE1LCA2LCA3KSkKPj4g IAkJcmV0dXJuOwo+Pgo+PiAgCS8qIHJpbmcgc2hvdWxkIGJlIGlkbGUgYmVmb3JlIGlzc3Vpbmcg YSBzeW5jIGZsdXNoKi8KPj4gQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRfcHBf ZGlyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIAlFTkdJTkVfV1JJVEVfRlco ZW5naW5lLCBSSU5HX1BQX0RJUl9EQ0xWLCBQUF9ESVJfRENMVl8yRyk7Cj4+ICAJRU5HSU5FX1dS SVRFX0ZXKGVuZ2luZSwgUklOR19QUF9ESVJfQkFTRSwgcHBfZGlyKHZtKSk7Cj4+Cj4+IC0JaWYg KElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDcpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVu Z2luZS0+aTkxNSkgPj0gNykgewo+PiAgCQlFTkdJTkVfV1JJVEVfRlcoZW5naW5lLAo+PiAgCQkJ CVJJTkdfTU9ERV9HRU43LAo+PiAgCQkJCV9NQVNLRURfQklUX0VOQUJMRShHRlhfUFBHVFRfRU5B QkxFKSk7Cj4+IEBAIC0yMjksNyArMjI5LDcgQEAgc3RhdGljIGludCB4Y3NfcmVzdW1lKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIAkJCQkJIDUwMDAsIDAsIE5VTEwpKQo+PiAg CQlnb3RvIGVycjsKPj4KPj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPiAyKQo+PiAr CWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+IDIpCj4+ICAJCUVOR0lORV9XUklURV9G VyhlbmdpbmUsCj4+ICAJCQkJUklOR19NSV9NT0RFLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFNUT1Bf UklORykpOwo+Pgo+PiBAQCAtNjQ2LDkgKzY0Niw5IEBAIHN0YXRpYyBpbnQgbWlfc2V0X2NvbnRl eHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4+ICAJdTMyICpjczsKPj4KPj4gIAlsZW4gPSA0 Owo+PiAtCWlmIChJU19HRU4oaTkxNSwgNykpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9 PSA3KQo+PiAgCQlsZW4gKz0gMiArIChudW1fZW5naW5lcyA/IDQgKiBudW1fZW5naW5lcyArIDYg OiAwKTsKPj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgNSkpCj4+ICsJZWxzZSBpZiAoR1JBUEhJ Q1NfVkVSKGk5MTUpID09IDUpCj4+ICAJCWxlbiArPSAyOwo+PiAgCWlmIChmbGFncyAmIE1JX0ZP UkNFX1JFU1RPUkUpIHsKPj4gIAkJR0VNX0JVR19PTihmbGFncyAmIE1JX1JFU1RPUkVfSU5ISUJJ VCk7Cj4+IEBAIC02NjIsNyArNjYyLDcgQEAgc3RhdGljIGludCBtaV9zZXRfY29udGV4dChzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPj4gIAkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+Pgo+PiAgCS8q IFdhUHJvZ3JhbU1pQXJiT25PZmZBcm91bmRNaVNldENvbnRleHQ6aXZiLHZsdixoc3csYmR3LGNo diAqLwo+PiAtCWlmIChJU19HRU4oaTkxNSwgNykpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpID09IDcpIHsKPj4gIAkJKmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7 Cj4+ICAJCWlmIChudW1fZW5naW5lcykgewo+PiAgCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq c2lnbmFsbGVyOwo+PiBAQCAtNjc4LDcgKzY3OCw3IEBAIHN0YXRpYyBpbnQgbWlfc2V0X2NvbnRl eHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4+ICAJCQkJCQlHRU42X1BTTUlfU0xFRVBfTVNH X0RJU0FCTEUpOwo+PiAgCQkJfQo+PiAgCQl9Cj4+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwg NSkpIHsKPj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA1KSB7Cj4+ICAJCS8q Cj4+ICAJCSAqIFRoaXMgdy9hIGlzIG9ubHkgbGlzdGVkIGZvciBwcmUtcHJvZHVjdGlvbiBpbGsg YS9iIHN0ZXBwaW5ncywKPj4gIAkJICogYnV0IGlzIGFsc28gbWVudGlvbmVkIGZvciBwcm9ncmFt bWluZyB0aGUgcG93ZXJjdHguIFRvIGJlCj4+IEBAIC03MTYsNyArNzE2LDcgQEAgc3RhdGljIGlu dCBtaV9zZXRfY29udGV4dChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPj4gIAkgKi8KPj4gIAkq Y3MrKyA9IE1JX05PT1A7Cj4+Cj4+IC0JaWYgKElTX0dFTihpOTE1LCA3KSkgewo+PiArCWlmIChH UkFQSElDU19WRVIoaTkxNSkgPT0gNykgewo+PiAgCQlpZiAobnVtX2VuZ2luZXMpIHsKPj4gIAkJ CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpZ25hbGxlcjsKPj4gIAkJCWk5MTVfcmVnX3QgbGFz dF9yZWcgPSB7fTsgLyoga2VlcCBnY2MgcXVpZXQgKi8KPj4gQEAgLTc0MCw3ICs3NDAsNyBAQCBz dGF0aWMgaW50IG1pX3NldF9jb250ZXh0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+PiAgCQkJ KmNzKysgPSBNSV9OT09QOwo+PiAgCQl9Cj4+ICAJCSpjcysrID0gTUlfQVJCX09OX09GRiB8IE1J X0FSQl9FTkFCTEU7Cj4+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgNSkpIHsKPj4gKwl9IGVs c2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA1KSB7Cj4+ICAJCSpjcysrID0gTUlfU1VTUEVO RF9GTFVTSDsKPj4gIAl9Cj4+Cj4+IEBAIC0xMDAxLDcgKzEwMDEsNyBAQCBzdGF0aWMgdm9pZCBy aW5nX3JlbGVhc2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiAgewo+PiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPj4KPj4gLQlk cm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgSU5URUxfR0VOKGRldl9wcml2KSA+IDIgJiYKPj4g Kwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgR1JBUEhJQ1NfVkVSKGRldl9wcml2KSA+IDIg JiYKPj4gIAkJICAgIChFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfTUlfTU9ERSkgJiBNT0RFX0lE TEUpID09IDApOwo+Pgo+PiAgCWludGVsX2VuZ2luZV9jbGVhbnVwX2NvbW1vbihlbmdpbmUpOwo+ PiBAQCAtMTAyOSwxMyArMTAyOSwxMyBAQCBzdGF0aWMgdm9pZCBzZXR1cF9pcnEoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+Pgo+PiAgCWludGVsX2VuZ2luZV9zZXRfaXJxX2hhbmRs ZXIoZW5naW5lLCBpcnFfaGFuZGxlcik7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2 KSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KSB7Cj4+ICAJCWVuZ2luZS0+aXJx X2VuYWJsZSA9IGdlbjZfaXJxX2VuYWJsZTsKPj4gIAkJZW5naW5lLT5pcnFfZGlzYWJsZSA9IGdl bjZfaXJxX2Rpc2FibGU7Cj4+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNSkgewo+ PiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDUpIHsKPj4gIAkJZW5naW5lLT5p cnFfZW5hYmxlID0gZ2VuNV9pcnFfZW5hYmxlOwo+PiAgCQllbmdpbmUtPmlycV9kaXNhYmxlID0g Z2VuNV9pcnFfZGlzYWJsZTsKPj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSAzKSB7 Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMykgewo+PiAgCQllbmdpbmUt PmlycV9lbmFibGUgPSBnZW4zX2lycV9lbmFibGU7Cj4+ICAJCWVuZ2luZS0+aXJxX2Rpc2FibGUg PSBnZW4zX2lycV9kaXNhYmxlOwo+PiAgCX0gZWxzZSB7Cj4+IEBAIC0xMDQ5LDcgKzEwNDksNyBA QCBzdGF0aWMgdm9pZCBzZXR1cF9jb21tb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1Owo+Pgo+ PiAgCS8qIGdlbjgrIGFyZSBvbmx5IHN1cHBvcnRlZCB3aXRoIGV4ZWNsaXN0cyAqLwo+PiAtCUdF TV9CVUdfT04oSU5URUxfR0VOKGk5MTUpID49IDgpOwo+PiArCUdFTV9CVUdfT04oR1JBUEhJQ1Nf VkVSKGk5MTUpID49IDgpOwo+Pgo+PiAgCXNldHVwX2lycShlbmdpbmUpOwo+Pgo+PiBAQCAtMTA3 MCwxNCArMTA3MCwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9jb21tb24oc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+PiAgCSAqIGVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIoKS4K Pj4gIAkgKi8KPj4gIAllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuM19lbWl0X2Jy ZWFkY3J1bWI7Cj4+IC0JaWYgKElTX0dFTihpOTE1LCA1KSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVS KGk5MTUpID09IDUpCj4+ICAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW41X2Vt aXRfYnJlYWRjcnVtYjsKPj4KPj4gIAllbmdpbmUtPnNldF9kZWZhdWx0X3N1Ym1pc3Npb24gPSBp OXh4X3NldF9kZWZhdWx0X3N1Ym1pc3Npb247Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+ PSA2KQo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikKPj4gIAkJZW5naW5lLT5lbWl0 X2JiX3N0YXJ0ID0gZ2VuNl9lbWl0X2JiX3N0YXJ0Owo+PiAtCWVsc2UgaWYgKElOVEVMX0dFTihp OTE1KSA+PSA0KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA0KQo+PiAgCQll bmdpbmUtPmVtaXRfYmJfc3RhcnQgPSBnZW40X2VtaXRfYmJfc3RhcnQ7Cj4+ICAJZWxzZSBpZiAo SVNfSTgzMChpOTE1KSB8fCBJU19JODQ1RyhpOTE1KSkKPj4gIAkJZW5naW5lLT5lbWl0X2JiX3N0 YXJ0ID0gaTgzMF9lbWl0X2JiX3N0YXJ0Owo+PiBAQCAtMTA5NCwxNiArMTA5NCwxNiBAQCBzdGF0 aWMgdm9pZCBzZXR1cF9yY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+Pgo+PiAg CWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUOwo+Pgo+ PiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNykgewo+PiArCWlmIChHUkFQSElDU19WRVIoaTkx NSkgPj0gNykgewo+PiAgCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW43X2VtaXRfZmx1c2hfcmNz Owo+PiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuN19lbWl0X2JyZWFkY3J1 bWJfcmNzOwo+PiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDYpKSB7Cj4+ICsJfSBlbHNlIGlm IChHUkFQSElDU19WRVIoaTkxNSkgPT0gNikgewo+PiAgCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBn ZW42X2VtaXRfZmx1c2hfcmNzOwo+PiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0g Z2VuNl9lbWl0X2JyZWFkY3J1bWJfcmNzOwo+PiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDUp KSB7Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNSkgewo+PiAgCQllbmdp bmUtPmVtaXRfZmx1c2ggPSBnZW40X2VtaXRfZmx1c2hfcmNzOwo+PiAgCX0gZWxzZSB7Cj4+IC0J CWlmIChJTlRFTF9HRU4oaTkxNSkgPCA0KQo+PiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwg NCkKPj4gIAkJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjJfZW1pdF9mbHVzaDsKPj4gIAkJZWxz ZQo+PiAgCQkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuNF9lbWl0X2ZsdXNoX3JjczsKPj4gQEAg LTExMTgsMjAgKzExMTgsMjAgQEAgc3RhdGljIHZvaWQgc2V0dXBfdmNzKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPj4gIHsKPj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IGVuZ2luZS0+aTkxNTsKPj4KPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpIHsKPj4g KwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpIHsKPj4gIAkJLyogZ2VuNiBic2QgbmVlZHMg YSBzcGVjaWFsIHdhIGZvciB0YWlsIHVwZGF0ZXMgKi8KPj4gLQkJaWYgKElTX0dFTihpOTE1LCA2 KSkKPj4gKwkJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+PiAgCQkJZW5naW5lLT5zZXRf ZGVmYXVsdF9zdWJtaXNzaW9uID0gZ2VuNl9ic2Rfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKPj4g IAkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuNl9lbWl0X2ZsdXNoX3ZjczsKPj4gIAkJZW5naW5l LT5pcnFfZW5hYmxlX21hc2sgPSBHVF9CU0RfVVNFUl9JTlRFUlJVUFQ7Cj4+Cj4+IC0JCWlmIChJ U19HRU4oaTkxNSwgNikpCj4+ICsJCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNikKPj4gIAkJ CWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW42X2VtaXRfYnJlYWRjcnVtYl94Y3M7 Cj4+ICAJCWVsc2UKPj4gIAkJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW43X2Vt aXRfYnJlYWRjcnVtYl94Y3M7Cj4+ICAJfSBlbHNlIHsKPj4gIAkJZW5naW5lLT5lbWl0X2ZsdXNo ID0gZ2VuNF9lbWl0X2ZsdXNoX3ZjczsKPj4gLQkJaWYgKElTX0dFTihpOTE1LCA1KSkKPj4gKwkJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA1KQo+PiAgCQkJZW5naW5lLT5pcnFfZW5hYmxlX21h c2sgPSBJTEtfQlNEX1VTRVJfSU5URVJSVVBUOwo+PiAgCQllbHNlCj4+ICAJCQllbmdpbmUtPmly cV9lbmFibGVfbWFzayA9IEk5MTVfQlNEX1VTRVJfSU5URVJSVVBUOwo+PiBAQCAtMTE0NSw3ICsx MTQ1LDcgQEAgc3RhdGljIHZvaWQgc2V0dXBfYmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPj4gIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42X2VtaXRfZmx1c2hfeGNzOwo+PiAg CWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gR1RfQkxUX1VTRVJfSU5URVJSVVBUOwo+Pgo+PiAt CWlmIChJU19HRU4oaTkxNSwgNikpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+ PiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuNl9lbWl0X2JyZWFkY3J1bWJf eGNzOwo+PiAgCWVsc2UKPj4gIAkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjdf ZW1pdF9icmVhZGNydW1iX3hjczsKPj4gQEAgLTExNTUsNyArMTE1NSw3IEBAIHN0YXRpYyB2b2lk IHNldHVwX3ZlY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiAgewo+PiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1Owo+Pgo+PiAtCUdFTV9C VUdfT04oSU5URUxfR0VOKGk5MTUpIDwgNyk7Cj4+ICsJR0VNX0JVR19PTihHUkFQSElDU19WRVIo aTkxNSkgPCA3KTsKPj4KPj4gIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42X2VtaXRfZmx1c2hf eGNzOwo+PiAgCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gUE1fVkVCT1hfVVNFUl9JTlRFUlJV UFQ7Cj4+IEBAIC0xMjAzLDcgKzEyMDMsNyBAQCBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpnZW43 X2N0eF92bWEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiAgCXN0cnVjdCBpOTE1 X3ZtYSAqdm1hOwo+PiAgCWludCBzaXplLCBlcnI7Cj4+Cj4+IC0JaWYgKCFJU19HRU4oZW5naW5l LT5pOTE1LCA3KSB8fCBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPj4gKwlpZiAoR1JB UEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgIT0gNyB8fCBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9D TEFTUykKPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJZXJyID0gZ2VuN19jdHhfc3dpdGNoX2JiX3Nl dHVwKGVuZ2luZSwgTlVMTCAvKiBwcm9iZSBzaXplICovKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfcnBzLmMKPj4gaW5kZXggOTdjYWIxYjk5ODcxLi4wNmU5YThlZDRlMDMgMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jCj4+IEBAIC0xOTYsNyArMTk2LDcgQEAgc3Rh dGljIHZvaWQgcnBzX3Jlc2V0X2ludGVycnVwdHMoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+PiAg CXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKPj4KPj4gIAlzcGluX2xvY2tf aXJxKCZndC0+aXJxX2xvY2spOwo+PiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDExKQo+ PiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID49IDExKQo+PiAgCQlnZW4xMV9ycHNfcmVz ZXRfaW50ZXJydXB0cyhycHMpOwo+PiAgCWVsc2UKPj4gIAkJZ2VuNl9ycHNfcmVzZXRfaW50ZXJy dXB0cyhycHMpOwo+PiBAQCAtNjMwLDcgKzYzMCw3IEBAIHN0YXRpYyB1MzIgcnBzX2xpbWl0cyhz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKPj4gIAkgKiBmcmVxdWVuY3ksIGlmIHRoZSBk b3duIHRocmVzaG9sZCBleHBpcmVzIGluIHRoYXQgd2luZG93IHdlIHdpbGwgbm90Cj4+ICAJICog cmVjZWl2ZSBhIGRvd24gaW50ZXJydXB0Lgo+PiAgCSAqLwo+PiAtCWlmIChJTlRFTF9HRU4ocnBz X3RvX2k5MTUocnBzKSkgPj0gOSkgewo+PiArCWlmIChHUkFQSElDU19WRVIocnBzX3RvX2k5MTUo cnBzKSkgPj0gOSkgewo+PiAgCQlsaW1pdHMgPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA8PCAy MzsKPj4gIAkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPj4gIAkJCWxpbWl0 cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNDsKPj4gQEAgLTY5Nyw3ICs2OTcsNyBA QCBzdGF0aWMgdm9pZCBycHNfc2V0X3Bvd2VyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IG5l d19wb3dlcikKPj4gIAkgICAgaW50ZWxfZ3RfbnNfdG9fcG1faW50ZXJ2YWwoZ3QsIGVpX2Rvd24g KiB0aHJlc2hvbGRfZG93biAqIDEwKSk7Cj4+Cj4+ICAJc2V0KHVuY29yZSwgR0VONl9SUF9DT05U Uk9MLAo+PiAtCSAgICAoSU5URUxfR0VOKGd0LT5pOTE1KSA+IDkgPyAwIDogR0VONl9SUF9NRURJ QV9UVVJCTykgfAo+PiArCSAgICAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+IDkgPyAwIDogR0VO Nl9SUF9NRURJQV9UVVJCTykgfAo+PiAgCSAgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RF IHwKPj4gIAkgICAgR0VONl9SUF9NRURJQV9JU19HRlggfAo+PiAgCSAgICBHRU42X1JQX0VOQUJM RSB8Cj4+IEBAIC03NzEsNyArNzcxLDcgQEAgc3RhdGljIGludCBnZW42X3Jwc19zZXQoc3RydWN0 IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBycHNfdG9faTkxNShycHMpOwo+PiAgCXUzMiBzd3JlcTsKPj4KPj4gLQlpZiAoSU5URUxf R0VOKGk5MTUpID49IDkpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQo+PiAgCQlz d3JlcSA9IEdFTjlfRlJFUVVFTkNZKHZhbCk7Cj4+ICAJZWxzZSBpZiAoSVNfSEFTV0VMTChpOTE1 KSB8fCBJU19CUk9BRFdFTEwoaTkxNSkpCj4+ICAJCXN3cmVxID0gSFNXX0ZSRVFVRU5DWSh2YWwp Owo+PiBAQCAtODEyLDE0ICs4MTIsMTQgQEAgc3RhdGljIGludCBycHNfc2V0KHN0cnVjdCBpbnRl bF9ycHMgKnJwcywgdTggdmFsLCBib29sIHVwZGF0ZSkKPj4KPj4gIAlpZiAoSVNfVkFMTEVZVklF VyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKQo+PiAgCQllcnIgPSB2bHZfcnBzX3NldChy cHMsIHZhbCk7Cj4+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4+ICsJZWxzZSBp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4+ICAJCWVyciA9IGdlbjZfcnBzX3NldChycHMs IHZhbCk7Cj4+ICAJZWxzZQo+PiAgCQllcnIgPSBnZW41X3Jwc19zZXQocnBzLCB2YWwpOwo+PiAg CWlmIChlcnIpCj4+ICAJCXJldHVybiBlcnI7Cj4+Cj4+IC0JaWYgKHVwZGF0ZSAmJiBJTlRFTF9H RU4oaTkxNSkgPj0gNikKPj4gKwlpZiAodXBkYXRlICYmIEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2 KQo+PiAgCQlnZW42X3Jwc19zZXRfdGhyZXNob2xkcyhycHMsIHZhbCk7Cj4+ICAJcnBzLT5sYXN0 X2ZyZXEgPSB2YWw7Cj4+Cj4+IEBAIC04NTMsNyArODUzLDcgQEAgdm9pZCBpbnRlbF9ycHNfdW5w YXJrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPj4gIAlpZiAoaW50ZWxfcnBzX3VzZXNfdGltZXIo cnBzKSkKPj4gIAkJcnBzX3N0YXJ0X3RpbWVyKHJwcyk7Cj4+Cj4+IC0JaWYgKElTX0dFTihycHNf dG9faTkxNShycHMpLCA1KSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKHJwc190b19pOTE1KHJwcykp ID09IDUpCj4+ICAJCWdlbjVfcnBzX3VwZGF0ZShycHMpOwo+PiAgfQo+Pgo+PiBAQCAtOTk5LDcg Kzk5OSw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcnBzX2luaXQoc3RydWN0IGludGVsX3JwcyAqcnBz KQo+Pgo+PiAgCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSBycHMtPnJwMV9mcmVxOwo+PiAgCWlmIChJ U19IQVNXRUxMKGk5MTUpIHx8IElTX0JST0FEV0VMTChpOTE1KSB8fAo+PiAtCSAgICBJU19HRU45 X0JDKGk5MTUpIHx8IElOVEVMX0dFTihpOTE1KSA+PSAxMCkgewo+PiArCSAgICBJU19HRU45X0JD KGk5MTUpIHx8IEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMCkgewo+PiAgCQl1MzIgZGRjY19zdGF0 dXMgPSAwOwo+Pgo+PiAgCQlpZiAoc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChpOTE1LAo+PiBAQCAt MTAxMiw3ICsxMDEyLDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCj4+ICAJCQkJCXJwcy0+bWF4X2ZyZXEpOwo+PiAgCX0KPj4KPj4gLQlpZiAoSVNf R0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKPj4gKwlpZiAoSVNfR0VO OV9CQyhpOTE1KSB8fCBHUkFQSElDU19WRVIoaTkxNSkgPj0gMTApIHsKPj4gIAkJLyogU3RvcmUg dGhlIGZyZXF1ZW5jeSB2YWx1ZXMgaW4gMTYuNjYgTUhaIHVuaXRzLCB3aGljaCBpcwo+PiAgCQkg KiB0aGUgbmF0dXJhbCBoYXJkd2FyZSB1bml0IGZvciBTS0wKPj4gIAkJICovCj4+IEBAIC0xMDQ4 LDcgKzEwNDgsNyBAQCBzdGF0aWMgYm9vbCBnZW45X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3Jw cyAqcnBzKQo+PiAgCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7Cj4+ Cj4+ICAJLyogUHJvZ3JhbSBkZWZhdWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTICovCj4+IC0J aWYgKElTX0dFTihndC0+aTkxNSwgOSkpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkg PT0gOSkKPj4gIAkJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19WSURFT19G UkVRLAo+PiAgCQkJCSAgICAgIEdFTjlfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsKPj4KPj4g QEAgLTEzNjUsMTYgKzEzNjUsMTYgQEAgdm9pZCBpbnRlbF9ycHNfZW5hYmxlKHN0cnVjdCBpbnRl bF9ycHMgKnJwcykKPj4gIAkJZW5hYmxlZCA9IGNodl9ycHNfZW5hYmxlKHJwcyk7Cj4+ICAJZWxz ZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKPj4gIAkJZW5hYmxlZCA9IHZsdl9ycHNfZW5hYmxl KHJwcyk7Cj4+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4+ICsJZWxzZSBpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpCj4+ICAJCWVuYWJsZWQgPSBnZW45X3Jwc19lbmFibGUo cnBzKTsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKPj4gKwllbHNlIGlmIChH UkFQSElDU19WRVIoaTkxNSkgPj0gOCkKPj4gIAkJZW5hYmxlZCA9IGdlbjhfcnBzX2VuYWJsZShy cHMpOwo+PiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQo+PiArCWVsc2UgaWYgKEdS QVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+PiAgCQllbmFibGVkID0gZ2VuNl9ycHNfZW5hYmxlKHJw cyk7Cj4+ICAJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKPj4gIAkJZW5hYmxlZCA9IGdl bjVfcnBzX2VuYWJsZShycHMpOwo+PiAgCWVsc2UKPj4gLQkJTUlTU0lOR19DQVNFKElOVEVMX0dF TihpOTE1KSk7Cj4+ICsJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19WRVIoaTkxNSkpOwo+PiAgCWlu dGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4+ICAJaWYg KCFlbmFibGVkKQo+PiAgCQlyZXR1cm47Cj4+IEBAIC0xMzkzLDcgKzEzOTMsNyBAQCB2b2lkIGlu dGVsX3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+Pgo+PiAgCWlmIChoYXNfYnVz eV9zdGF0cyhycHMpKQo+PiAgCQlpbnRlbF9ycHNfc2V0X3RpbWVyKHJwcyk7Cj4+IC0JZWxzZSBp ZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDYpCj4+ICAJCWludGVsX3Jwc19zZXRfaW50ZXJydXB0cyhycHMpOwo+PiAgCWVsc2UKPj4g IAkJLyogSXJvbmxha2UgY3VycmVudGx5IHVzZXMgaW50ZWxfaXBzLmtvICovIHt9Cj4+IEBAIC0x NDE0LDcgKzE0MTQsNyBAQCB2b2lkIGludGVsX3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMg KnJwcykKPj4gIAlpbnRlbF9ycHNfY2xlYXJfaW50ZXJydXB0cyhycHMpOwo+PiAgCWludGVsX3Jw c19jbGVhcl90aW1lcihycHMpOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKPj4g KwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4+ICAJCWdlbjZfcnBzX2Rpc2FibGUocnBz KTsKPj4gIAllbHNlIGlmIChJU19JUk9OTEFLRV9NKGk5MTUpKQo+PiAgCQlnZW41X3Jwc19kaXNh YmxlKHJwcyk7Cj4+IEBAIC0xNDUzLDE0ICsxNDUzLDE0IEBAIGludCBpbnRlbF9ncHVfZnJlcShz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpCj4+ICB7Cj4+ICAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4o aTkxNSkgPj0gOSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpCj4+ICAJCXJldHVy biBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUiwKPj4gIAkJ CQkJIEdFTjlfRlJFUV9TQ0FMRVIpOwo+PiAgCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkp Cj4+ICAJCXJldHVybiBjaHZfZ3B1X2ZyZXEocnBzLCB2YWwpOwo+PiAgCWVsc2UgaWYgKElTX1ZB TExFWVZJRVcoaTkxNSkpCj4+ICAJCXJldHVybiBieXRfZ3B1X2ZyZXEocnBzLCB2YWwpOwo+PiAt CWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZF UihpOTE1KSA+PSA2KQo+PiAgCQlyZXR1cm4gdmFsICogR1RfRlJFUVVFTkNZX01VTFRJUExJRVI7 Cj4+ICAJZWxzZQo+PiAgCQlyZXR1cm4gdmFsOwo+PiBAQCAtMTQ3MCwxNCArMTQ3MCwxNCBAQCBp bnQgaW50ZWxfZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQo+PiAg ewo+PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsK Pj4KPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA5KQo+PiAgCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsICogR0VOOV9GUkVR X1NDQUxFUiwKPj4gIAkJCQkJIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSKTsKPj4gIAllbHNlIGlm IChJU19DSEVSUllWSUVXKGk5MTUpKQo+PiAgCQlyZXR1cm4gY2h2X2ZyZXFfb3Bjb2RlKHJwcywg dmFsKTsKPj4gIAllbHNlIGlmIChJU19WQUxMRVlWSUVXKGk5MTUpKQo+PiAgCQlyZXR1cm4gYnl0 X2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0g NikKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikKPj4gIAkJcmV0dXJuIERJ Vl9ST1VORF9DTE9TRVNUKHZhbCwgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwo+PiAgCWVsc2UK Pj4gIAkJcmV0dXJuIHZhbDsKPj4gQEAgLTE3NzAsNyArMTc3MCw3IEBAIHZvaWQgZ2VuNl9ycHNf aXJxX2hhbmRsZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKQo+PiAgCQlzcGlu X3VubG9jaygmZ3QtPmlycV9sb2NrKTsKPj4gIAl9Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+ aTkxNSkgPj0gOCkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSA4KQo+PiAgCQly ZXR1cm47Cj4+Cj4+ICAJaWYgKHBtX2lpciAmIFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQo+PiBA QCAtMTgzMyw3ICsxODMzLDcgQEAgdm9pZCBpbnRlbF9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBz ICpycHMpCj4+ICAJCWNodl9ycHNfaW5pdChycHMpOwo+PiAgCWVsc2UgaWYgKElTX1ZBTExFWVZJ RVcoaTkxNSkpCj4+ICAJCXZsdl9ycHNfaW5pdChycHMpOwo+PiAtCWVsc2UgaWYgKElOVEVMX0dF TihpOTE1KSA+PSA2KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+PiAg CQlnZW42X3Jwc19pbml0KHJwcyk7Cj4+ICAJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkK Pj4gIAkJZ2VuNV9ycHNfaW5pdChycHMpOwo+PiBAQCAtMTg0Myw3ICsxODQzLDcgQEAgdm9pZCBp bnRlbF9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4+ICAJcnBzLT5taW5fZnJlcV9z b2Z0bGltaXQgPSBycHMtPm1pbl9mcmVxOwo+Pgo+PiAgCS8qIEFmdGVyIHNldHRpbmcgbWF4LXNv ZnRsaW1pdCwgZmluZCB0aGUgb3ZlcmNsb2NrIG1heCBmcmVxICovCj4+IC0JaWYgKElTX0dFTihp OTE1LCA2KSB8fCBJU19JVllCUklER0UoaTkxNSkgfHwgSVNfSEFTV0VMTChpOTE1KSkgewo+PiAr CWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNiB8fCBJU19JVllCUklER0UoaTkxNSkgfHwgSVNf SEFTV0VMTChpOTE1KSkgewo+PiAgCQl1MzIgcGFyYW1zID0gMDsKPj4KPj4gIAkJc2FuZHlicmlk Z2VfcGNvZGVfcmVhZChpOTE1LCBHRU42X1JFQURfT0NfUEFSQU1TLAo+PiBAQCAtMTg3MiwxNiAr MTg3MiwxNiBAQCB2b2lkIGludGVsX3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPj4g IAkgKgo+PiAgCSAqIFRPRE86IHZlcmlmeSBpZiB0aGlzIGNhbiBiZSByZXByb2R1Y2VkIG9uIFZM VixDSFYuCj4+ICAJICovCj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA8PSA3KQo+PiArCWlmIChH UkFQSElDU19WRVIoaTkxNSkgPD0gNykKPj4gIAkJcnBzLT5wbV9pbnRybXNrX21ieiB8PSBHRU42 X1BNX1JQX1VQX0VJX0VYUElSRUQ7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4ICYm IElOVEVMX0dFTihpOTE1KSA8IDExKQo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCAm JiBHUkFQSElDU19WRVIoaTkxNSkgPCAxMSkKPj4gIAkJcnBzLT5wbV9pbnRybXNrX21ieiB8PSBH RU44X1BNSU5UUl9ESVNBQkxFX1JFRElSRUNUX1RPX0dVQzsKPj4gIH0KPj4KPj4gIHZvaWQgaW50 ZWxfcnBzX3Nhbml0aXplKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPj4gIHsKPj4gLQlpZiAoSU5U RUxfR0VOKHJwc190b19pOTE1KHJwcykpID49IDYpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihycHNf dG9faTkxNShycHMpKSA+PSA2KQo+PiAgCQlycHNfZGlzYWJsZV9pbnRlcnJ1cHRzKHJwcyk7Cj4+ ICB9Cj4+Cj4+IEBAIC0xODkyLDExICsxODkyLDExIEBAIHUzMiBpbnRlbF9ycHNfZ2V0X2NhZ2Yo c3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcnBzdGF0KQo+Pgo+PiAgCWlmIChJU19WQUxMRVlW SUVXKGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpCj4+ICAJCWNhZ2YgPSAocnBzdGF0ID4+ IDgpICYgMHhmZjsKPj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKPj4gKwllbHNl IGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkKPj4gIAkJY2FnZiA9IChycHN0YXQgJiBHRU45 X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NISUZUOwo+PiAgCWVsc2UgaWYgKElTX0hBU1dFTEwo aTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUpKQo+PiAgCQljYWdmID0gKHJwc3RhdCAmIEhTV19D QUdGX01BU0spID4+IEhTV19DQUdGX1NISUZUOwo+PiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA2KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+PiAgCQljYWdm ID0gKHJwc3RhdCAmIEdFTjZfQ0FHRl9NQVNLKSA+PiBHRU42X0NBR0ZfU0hJRlQ7Cj4+ICAJZWxz ZQo+PiAgCQljYWdmID0gZ2VuNV9pbnZlcnRfZnJlcShycHMsIChycHN0YXQgJiBNRU1TVEFUX1BT VEFURV9NQVNLKSA+Pgo+PiBAQCAtMTkxNSw3ICsxOTE1LDcgQEAgc3RhdGljIHUzMiByZWFkX2Nh Z2Yoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+PiAgCQl2bHZfcHVuaXRfZ2V0KGk5MTUpOwo+PiAg CQlmcmVxID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Cj4+ ICAJCXZsdl9wdW5pdF9wdXQoaTkxNSk7Cj4+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gNikgewo+PiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpIHsKPj4gIAkJ ZnJlcSA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VONl9SUFNUQVQxKTsKPj4gIAl9IGVs c2Ugewo+PiAgCQlmcmVxID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1TVEFUX0lMSyk7 Cj4+IEBAIC0xOTY4LDcgKzE5NjgsNyBAQCB2b2lkIGludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIo c3RydWN0IGludGVsX3JwcyAqcnBzKQo+PiAgCSAqIFdlIG9ubHkgcmVnaXN0ZXIgdGhlIGk5MTUg aXBzIHBhcnQgd2l0aCBpbnRlbC1pcHMgb25jZSBldmVyeXRoaW5nIGlzCj4+ICAJICogc2V0IHVw LCB0byBhdm9pZCBpbnRlbC1pcHMgc25lYWtpbmcgaW4gYW5kIHJlYWRpbmcgYm9ndXMgdmFsdWVz Lgo+PiAgCSAqLwo+PiAtCWlmIChJU19HRU4oZ3QtPmk5MTUsIDUpKSB7Cj4+ICsJaWYgKEdSQVBI SUNTX1ZFUihndC0+aTkxNSkgPT0gNSkgewo+PiAgCQlHRU1fQlVHX09OKGlwc19tY2hkZXYpOwo+ PiAgCQlyY3VfYXNzaWduX3BvaW50ZXIoaXBzX21jaGRldiwgZ3QtPmk5MTUpOwo+PiAgCQlpcHNf cGluZ19mb3JfaTkxNV9sb2FkKCk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9zc2V1LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9zc2V1LmMK Pj4gaW5kZXggMGQ5Zjc0YWVjOGZlLi4zNjdmZDQ0YjgxYzggMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3NzZXUuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9zc2V1LmMKPj4gQEAgLTU5MCwxMyArNTkwLDEzIEBAIHZvaWQgaW50ZWxf c3NldV9pbmZvX2luaXQoc3RydWN0IGludGVsX2d0ICpndCkKPj4gIAkJY2hlcnJ5dmlld19zc2V1 X2luZm9faW5pdChndCk7Cj4+ICAJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQo+PiAgCQli ZHdfc3NldV9pbmZvX2luaXQoZ3QpOwo+PiAtCWVsc2UgaWYgKElTX0dFTihpOTE1LCA5KSkKPj4g KwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gOSkKPj4gIAkJZ2VuOV9zc2V1X2luZm9f aW5pdChndCk7Cj4+IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDEwKSkKPj4gKwllbHNlIGlmIChH UkFQSElDU19WRVIoaTkxNSkgPT0gMTApCj4+ICAJCWdlbjEwX3NzZXVfaW5mb19pbml0KGd0KTsK Pj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTEpKQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZF UihpOTE1KSA9PSAxMSkKPj4gIAkJZ2VuMTFfc3NldV9pbmZvX2luaXQoZ3QpOwo+PiAtCWVsc2Ug aWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMikKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkx NSkgPj0gMTIpCj4+ICAJCWdlbjEyX3NzZXVfaW5mb19pbml0KGd0KTsKPj4gIH0KPj4KPj4gQEAg LTYxMyw3ICs2MTMsNyBAQCB1MzIgaW50ZWxfc3NldV9tYWtlX3JwY3Moc3RydWN0IGludGVsX2d0 ICpndCwKPj4gIAkgKiBObyBleHBsaWNpdCBSUENTIHJlcXVlc3QgaXMgbmVlZGVkIHRvIGVuc3Vy ZSBmdWxsCj4+ICAJICogc2xpY2Uvc3Vic2xpY2UvRVUgZW5hYmxlbWVudCBwcmlvciB0byBHZW45 Lgo+PiAgCSAqLwo+PiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA5KQo+PiArCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPCA5KQo+PiAgCQlyZXR1cm4gMDsKPj4KPj4gIAkvKgo+PiBAQCAtNjUxLDcg KzY1MSw3IEBAIHUzMiBpbnRlbF9zc2V1X21ha2VfcnBjcyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAo+ PiAgCSAqIHN1YnNsaWNlcyBhcmUgZW5hYmxlZCwgb3IgYSBjb3VudCBiZXR3ZWVuIG9uZSBhbmQg Zm91ciBvbiB0aGUgZmlyc3QKPj4gIAkgKiBzbGljZS4KPj4gIAkgKi8KPj4gLQlpZiAoSVNfR0VO KGk5MTUsIDExKSAmJgo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gMTEgJiYKPj4gIAkg ICAgc2xpY2VzID09IDEgJiYKPj4gIAkgICAgc3Vic2xpY2VzID4gbWluX3QodTgsIDQsIGh3ZWln aHQ4KHNzZXUtPnN1YnNsaWNlX21hc2tbMF0pIC8gMikpIHsKPj4gIAkJR0VNX0JVR19PTihzdWJz bGljZXMgJiAxKTsKPj4gQEAgLTY2OSw3ICs2NjksNyBAQCB1MzIgaW50ZWxfc3NldV9tYWtlX3Jw Y3Moc3RydWN0IGludGVsX2d0ICpndCwKPj4gIAlpZiAoc3NldS0+aGFzX3NsaWNlX3BnKSB7Cj4+ ICAJCXUzMiBtYXNrLCB2YWwgPSBzbGljZXM7Cj4+Cj4+IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gMTEpIHsKPj4gKwkJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewo+PiAgCQkJbWFz ayA9IEdFTjExX1JQQ1NfU19DTlRfTUFTSzsKPj4gIAkJCXZhbCA8PD0gR0VOMTFfUlBDU19TX0NO VF9TSElGVDsKPj4gIAkJfSBlbHNlIHsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3dvcmthcm91bmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF93b3JrYXJvdW5kcy5jCj4+IGluZGV4IDYyY2I5ZWU1YmZjMy4uYjYyZDFlMzFhNjQ1IDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93b3JrYXJvdW5kcy5jCj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3dvcmthcm91bmRzLmMKPj4gQEAg LTY5OSw5ICs2OTksOSBAQCBfX2ludGVsX2VuZ2luZV9pbml0X2N0eF93YShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCj4+Cj4+ICAJaWYgKElTX0RHMShpOTE1KSkKPj4gIAkJZGcxX2N0 eF93b3JrYXJvdW5kc19pbml0KGVuZ2luZSwgd2FsKTsKPj4gLQllbHNlIGlmIChJU19HRU4oaTkx NSwgMTIpKQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMikKPj4gIAkJZ2Vu MTJfY3R4X3dvcmthcm91bmRzX2luaXQoZW5naW5lLCB3YWwpOwo+PiAtCWVsc2UgaWYgKElTX0dF TihpOTE1LCAxMSkpCj4+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDExKQo+PiAg CQlpY2xfY3R4X3dvcmthcm91bmRzX2luaXQoZW5naW5lLCB3YWwpOwo+PiAgCWVsc2UgaWYgKElT X0NBTk5PTkxBS0UoaTkxNSkpCj4+ICAJCWNubF9jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdpbmUs IHdhbCk7Cj4+IEBAIC03MTksMTQgKzcxOSwxNCBAQCBfX2ludGVsX2VuZ2luZV9pbml0X2N0eF93 YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4+ICAJCWNodl9jdHhfd29ya2Fyb3Vu ZHNfaW5pdChlbmdpbmUsIHdhbCk7Cj4+ICAJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQo+ PiAgCQliZHdfY3R4X3dvcmthcm91bmRzX2luaXQoZW5naW5lLCB3YWwpOwo+PiAtCWVsc2UgaWYg KElTX0dFTihpOTE1LCA3KSkKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykK Pj4gIAkJZ2VuN19jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdpbmUsIHdhbCk7Cj4+IC0JZWxzZSBp ZiAoSVNfR0VOKGk5MTUsIDYpKQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2 KQo+PiAgCQlnZW42X2N0eF93b3JrYXJvdW5kc19pbml0KGVuZ2luZSwgd2FsKTsKPj4gLQllbHNl IGlmIChJTlRFTF9HRU4oaTkxNSkgPCA4KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA8IDgpCj4+ICAJCTsKPj4gIAllbHNlCj4+IC0JCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oaTkx NSkpOwo+PiArCQlNSVNTSU5HX0NBU0UoR1JBUEhJQ1NfVkVSKGk5MTUpKTsKPj4KPj4gIAl3YV9p bml0X2ZpbmlzaCh3YWwpOwo+PiAgfQo+PiBAQCAtOTUwLDcgKzk1MCw3IEBAIHdhX2luaXRfbWNy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwp Cj4+ICAJdW5zaWduZWQgaW50IHNsaWNlLCBzdWJzbGljZTsKPj4gIAl1MzIgbDNfZW4sIG1jciwg bWNyX21hc2s7Cj4+Cj4+IC0JR0VNX0JVR19PTihJTlRFTF9HRU4oaTkxNSkgPCAxMCk7Cj4+ICsJ R0VNX0JVR19PTihHUkFQSElDU19WRVIoaTkxNSkgPCAxMCk7Cj4+Cj4+ICAJLyoKPj4gIAkgKiBX YVByb2dyYW1NZ3NyRm9yTDNCYW5rU3BlY2lmaWNNbWlvUmVhZHM6IGNubCxpY2wKPj4gQEAgLTk4 MCw3ICs5ODAsNyBAQCB3YV9pbml0X21jcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwg c3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+PiAgCSAqIG9mIGV2ZXJ5IE1NSU8gcmVhZC4KPj4g IAkgKi8KPj4KPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEwICYmIGlzX3Bvd2VyX29mXzIo c3NldS0+c2xpY2VfbWFzaykpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEwICYm IGlzX3Bvd2VyX29mXzIoc3NldS0+c2xpY2VfbWFzaykpIHsKPj4gIAkJdTMyIGwzX2Z1c2UgPQo+ PiAgCQkJaW50ZWxfdW5jb3JlX3JlYWQoJmk5MTUtPnVuY29yZSwgR0VOMTBfTUlSUk9SX0ZVU0Uz KSAmCj4+ICAJCQlHRU4xMF9MM0JBTktfTUFTSzsKPj4gQEAgLTEwMDIsNyArMTAwMiw3IEBAIHdh X2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgaTkxNV93YV9s aXN0ICp3YWwpCj4+ICAJfQo+PiAgCXN1YnNsaWNlLS07Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihp OTE1KSA+PSAxMSkgewo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTEpIHsKPj4gIAkJ bWNyID0gR0VOMTFfTUNSX1NMSUNFKHNsaWNlKSB8IEdFTjExX01DUl9TVUJTTElDRShzdWJzbGlj ZSk7Cj4+ICAJCW1jcl9tYXNrID0gR0VOMTFfTUNSX1NMSUNFX01BU0sgfCBHRU4xMV9NQ1JfU1VC U0xJQ0VfTUFTSzsKPj4gIAl9IGVsc2Ugewo+PiBAQCAtMTE3MSw5ICsxMTcxLDkgQEAgZ3RfaW5p dF93b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0IGk5MTVf d2FfbGlzdCAqd2FsKQo+PiAgCQlkZzFfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1LCB3YWwpOwo+ PiAgCWVsc2UgaWYgKElTX1RJR0VSTEFLRShpOTE1KSkKPj4gIAkJdGdsX2d0X3dvcmthcm91bmRz X2luaXQoaTkxNSwgd2FsKTsKPj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTIpKQo+PiArCWVs c2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMikKPj4gIAkJZ2VuMTJfZ3Rfd29ya2Fyb3Vu ZHNfaW5pdChpOTE1LCB3YWwpOwo+PiAtCWVsc2UgaWYgKElTX0dFTihpOTE1LCAxMSkpCj4+ICsJ ZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDExKQo+PiAgCQlpY2xfZ3Rfd29ya2Fyb3Vu ZHNfaW5pdChpOTE1LCB3YWwpOwo+PiAgCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoaTkxNSkpCj4+ ICAJCWNubF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdhbCk7Cj4+IEBAIC0xMTkzLDE4ICsx MTkzLDE4IEBAIGd0X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUsIHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkKPj4gIAkJdmx2X2d0X3dvcmthcm91bmRzX2lu aXQoaTkxNSwgd2FsKTsKPj4gIAllbHNlIGlmIChJU19JVllCUklER0UoaTkxNSkpCj4+ICAJCWl2 Yl9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdhbCk7Cj4+IC0JZWxzZSBpZiAoSVNfR0VOKGk5 MTUsIDYpKQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+PiAgCQlzbmJf Z3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1LCB3YWwpOwo+PiAtCWVsc2UgaWYgKElTX0dFTihpOTE1 LCA1KSkKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNSkKPj4gIAkJaWxrX2d0 X3dvcmthcm91bmRzX2luaXQoaTkxNSwgd2FsKTsKPj4gIAllbHNlIGlmIChJU19HNFgoaTkxNSkp Cj4+ICAJCWc0eF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdhbCk7Cj4+IC0JZWxzZSBpZiAo SVNfR0VOKGk5MTUsIDQpKQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA0KQo+ PiAgCQlnZW40X2d0X3dvcmthcm91bmRzX2luaXQoaTkxNSwgd2FsKTsKPj4gLQllbHNlIGlmIChJ TlRFTF9HRU4oaTkxNSkgPD0gOCkKPj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPD0g OCkKPj4gIAkJOwo+PiAgCWVsc2UKPj4gLQkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihpOTE1KSk7 Cj4+ICsJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19WRVIoaTkxNSkpOwo+PiAgfQo+Pgo+PiAgdm9p ZCBpbnRlbF9ndF9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQo+PiBAQCAtMTU1OCw5ICsxNTU4LDkgQEAgdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF93aGl0ZWxp c3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+Pgo+PiAgCWlmIChJU19ERzEoaTkx NSkpCj4+ICAJCWRnMV93aGl0ZWxpc3RfYnVpbGQoZW5naW5lKTsKPj4gLQllbHNlIGlmIChJU19H RU4oaTkxNSwgMTIpKQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMikKPj4g IAkJdGdsX3doaXRlbGlzdF9idWlsZChlbmdpbmUpOwo+PiAtCWVsc2UgaWYgKElTX0dFTihpOTE1 LCAxMSkpCj4+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDExKQo+PiAgCQlpY2xf d2hpdGVsaXN0X2J1aWxkKGVuZ2luZSk7Cj4+ICAJZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShpOTE1 KSkKPj4gIAkJY25sX3doaXRlbGlzdF9idWlsZChlbmdpbmUpOwo+PiBAQCAtMTU3NiwxMCArMTU3 NiwxMCBAQCB2b2lkIGludGVsX2VuZ2luZV9pbml0X3doaXRlbGlzdChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4+ICAJCWJ4dF93aGl0ZWxpc3RfYnVpbGQoZW5naW5lKTsKPj4gIAll bHNlIGlmIChJU19TS1lMQUtFKGk5MTUpKQo+PiAgCQlza2xfd2hpdGVsaXN0X2J1aWxkKGVuZ2lu ZSk7Cj4+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDgpCj4+ICsJZWxzZSBpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpIDw9IDgpCj4+ICAJCTsKPj4gIAllbHNlCj4+IC0JCU1JU1NJTkdfQ0FT RShJTlRFTF9HRU4oaTkxNSkpOwo+PiArCQlNSVNTSU5HX0NBU0UoR1JBUEhJQ1NfVkVSKGk5MTUp KTsKPj4KPj4gIAl3YV9pbml0X2ZpbmlzaCh3KTsKPj4gIH0KPj4gQEAgLTE2OTUsNyArMTY5NSw3 IEBAIHJjc19lbmdpbmVfd2FfaW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0 cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkKPj4gIAkJCSAgICAgRU5BQkxFX1NNQUxMUEwpOwo+PiAg CX0KPj4KPj4gLQlpZiAoSVNfR0VOKGk5MTUsIDExKSkgewo+PiArCWlmIChHUkFQSElDU19WRVIo aTkxNSkgPT0gMTEpIHsKPj4gIAkJLyogVGhpcyBpcyBub3QgYW4gV2EuIEVuYWJsZSBmb3IgYmV0 dGVyIGltYWdlIHF1YWxpdHkgKi8KPj4gIAkJd2FfbWFza2VkX2VuKHdhbCwKPj4gIAkJCSAgICAg XzNEX0NISUNLRU4zLAo+PiBAQCAtMTc5Myw3ICsxNzkzLDcgQEAgcmNzX2VuZ2luZV93YV9pbml0 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2Fs KQo+PiAgCQkJICAgICBGRl9ET1BfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPj4gIAl9Cj4+Cj4+IC0J aWYgKElTX0dFTl9SQU5HRShpOTE1LCA5LCAxMikpIHsKPj4gKwlpZiAoSVNfR1JBUEhJQ1NfVkVS KGk5MTUsIDksIDEyKSkgewo+PiAgCQkvKiBGdHJQZXJDdHh0UHJlZW1wdGlvbkdyYW51bGFyaXR5 Q29udHJvbDpza2wsYnh0LGtibCxjZmwsY25sLGljbCx0Z2wgKi8KPj4gIAkJd2FfbWFza2VkX2Vu KHdhbCwKPj4gIAkJCSAgICAgR0VON19GRl9TTElDRV9DU19DSElDS0VOMSwKPj4gQEAgLTE4MTcs NyArMTgxNyw3IEBAIHJjc19lbmdpbmVfd2FfaW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkKPj4gIAkJCSAgICAgR0VOOV9QT09MRURf RVVfTE9BRF9CQUxBTkNJTkdfRklYX0RJU0FCTEUpOwo+PiAgCX0KPj4KPj4gLQlpZiAoSVNfR0VO KGk5MTUsIDkpKSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA5KSB7Cj4+ICAJCS8q IFdhQ29udGV4dFN3aXRjaFdpdGhDb25jdXJyZW50VExCSW52YWxpZGF0ZTpza2wsYnh0LGtibCxn bGssY2ZsICovCj4+ICAJCXdhX21hc2tlZF9lbih3YWwsCj4+ICAJCQkgICAgIEdFTjlfQ1NGRV9D SElDS0VOMV9SQ1MsCj4+IEBAIC0xOTIxLDcgKzE5MjEsNyBAQCByY3NfZW5naW5lX3dhX2luaXQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwp Cj4+ICAJCQkJICAgICBHRU43X1BTRF9TSU5HTEVfUE9SVF9ESVNQQVRDSF9FTkFCTEUpOwo+PiAg CX0KPj4KPj4gLQlpZiAoSVNfR0VOKGk5MTUsIDcpKSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA9PSA3KSB7Cj4+ICAJCS8qIFdhQkNTVkNTVGxiSW52YWxpZGF0aW9uTW9kZTppdmIsdmx2 LGhzdyAqLwo+PiAgCQl3YV9tYXNrZWRfZW4od2FsLAo+PiAgCQkJICAgICBHRlhfTU9ERV9HRU43 LAo+PiBAQCAtMTk1Myw3ICsxOTUzLDcgQEAgcmNzX2VuZ2luZV93YV9pbml0KHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+PiAgCQkgICAg ICAgR0VONl9XSVpfSEFTSElOR18xNng0KTsKPj4gIAl9Cj4+Cj4+IC0JaWYgKElTX0dFTl9SQU5H RShpOTE1LCA2LCA3KSkKPj4gKwlpZiAoSVNfR1JBUEhJQ1NfVkVSKGk5MTUsIDYsIDcpKQo+PiAg CQkvKgo+PiAgCQkgKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIEFzeW5jRmxpcCBwZXJmb3JtYW5j ZSBvcHRpbWlzYXRpb25zIGluCj4+ICAJCSAqIG9yZGVyIHRvIHVzZSBNSV9XQUlUX0ZPUl9FVkVO VCB3aXRoaW4gdGhlIENTLiBJdCBzaG91bGQKPj4gQEAgLTE5NjUsNyArMTk2NSw3IEBAIHJjc19l bmdpbmVfd2FfaW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1 X3dhX2xpc3QgKndhbCkKPj4gIAkJCSAgICAgTUlfTU9ERSwKPj4gIAkJCSAgICAgQVNZTkNfRkxJ UF9QRVJGX0RJU0FCTEUpOwo+Pgo+PiAtCWlmIChJU19HRU4oaTkxNSwgNikpIHsKPj4gKwlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID09IDYpIHsKPj4gIAkJLyoKPj4gIAkJICogUmVxdWlyZWQgZm9y IHRoZSBoYXJkd2FyZSB0byBwcm9ncmFtIHNjYW5saW5lIHZhbHVlcyBmb3IKPj4gIAkJICogd2Fp dGluZwo+PiBAQCAtMjAxOSwxNCArMjAxOSwxNCBAQCByY3NfZW5naW5lX3dhX2luaXQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCj4+ICAJ CQkgICAgICBDTTBfU1RDX0VWSUNUX0RJU0FCTEVfTFJBX1NOQik7Cj4+ICAJfQo+Pgo+PiAtCWlm IChJU19HRU5fUkFOR0UoaTkxNSwgNCwgNikpCj4+ICsJaWYgKElTX0dSQVBISUNTX1ZFUihpOTE1 LCA0LCA2KSkKPj4gIAkJLyogV2FUaW1lZFNpbmdsZVZlcnRleERpc3BhdGNoOmNsLGJ3LGN0Zyxl bGssaWxrLHNuYiAqLwo+PiAgCQl3YV9hZGQod2FsLCBNSV9NT0RFLAo+PiAgCQkgICAgICAgMCwg X01BU0tFRF9CSVRfRU5BQkxFKFZTX1RJTUVSX0RJU1BBVENIKSwKPj4gIAkJICAgICAgIC8qIFhY WCBiaXQgZG9lc24ndCBzdGljayBvbiBCcm9hZHdhdGVyICovCj4+ICAJCSAgICAgICBJU19JOTY1 RyhpOTE1KSA/IDAgOiBWU19USU1FUl9ESVNQQVRDSCk7Cj4+Cj4+IC0JaWYgKElTX0dFTihpOTE1 LCA0KSkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDQpCj4+ICAJCS8qCj4+ICAJCSAq IERpc2FibGUgQ09OU1RBTlRfQlVGRkVSIGJlZm9yZSBpdCBpcyBsb2FkZWQgZnJvbSB0aGUgY29u dGV4dAo+PiAgCQkgKiBpbWFnZS4gRm9yIGFzIGl0IGlzIGxvYWRlZCwgaXQgaXMgZXhlY3V0ZWQg YW5kIHRoZSBzdG9yZWQKPj4gQEAgLTIwNTgsNyArMjA1OCw3IEBAIHhjc19lbmdpbmVfd2FfaW5p dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1X3dhX2xpc3QgKndh bCkKPj4gIHN0YXRpYyB2b2lkCj4+ICBlbmdpbmVfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkKPj4gIHsKPj4g LQlpZiAoSTkxNV9TRUxGVEVTVF9PTkxZKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgNCkpCj4+ ICsJaWYgKEk5MTVfU0VMRlRFU1RfT05MWShHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA8IDQp KQo+PiAgCQlyZXR1cm47Cj4+Cj4+ICAJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNT KQo+PiBAQCAtMjA3MSw3ICsyMDcxLDcgQEAgdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF93b3JrYXJv dW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ICB7Cj4+ICAJc3RydWN0IGk5 MTVfd2FfbGlzdCAqd2FsID0gJmVuZ2luZS0+d2FfbGlzdDsKPj4KPj4gLQlpZiAoSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkgPCA0KQo+PiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA8 IDQpCj4+ICAJCXJldHVybjsKPj4KPj4gIAl3YV9pbml0X3N0YXJ0KHdhbCwgImVuZ2luZSIsIGVu Z2luZS0+bmFtZSk7Cj4+IEBAIC0yMTEyLDkgKzIxMTIsOSBAQCBzdGF0aWMgYm9vbCBtY3JfcmFu Z2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBvZmZzZXQpCj4+ICAJY29uc3Qg c3RydWN0IG1jcl9yYW5nZSAqbWNyX3JhbmdlczsKPj4gIAlpbnQgaTsKPj4KPj4gLQlpZiAoSU5U RUxfR0VOKGk5MTUpID49IDEyKQo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTIpCj4+ ICAJCW1jcl9yYW5nZXMgPSBtY3JfcmFuZ2VzX2dlbjEyOwo+PiAtCWVsc2UgaWYgKElOVEVMX0dF TihpOTE1KSA+PSA4KQo+PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KQo+PiAg CQltY3JfcmFuZ2VzID0gbWNyX3Jhbmdlc19nZW44Owo+PiAgCWVsc2UKPj4gIAkJcmV0dXJuIGZh bHNlOwo+PiBAQCAtMjE0Myw3ICsyMTQzLDcgQEAgd2FfbGlzdF9zcm0oc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsCj4+ICAJdTMyIHNybSwgKmNzOwo+Pgo+PiAgCXNybSA9IE1JX1NUT1JFX1JFR0lT VEVSX01FTSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUp ID49IDgpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KQo+PiAgCQlzcm0rKzsKPj4K Pj4gIAlmb3IgKGkgPSAwLCB3YSA9IHdhbC0+bGlzdDsgaSA8IHdhbC0+Y291bnQ7IGkrKywgd2Er Kykgewo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5n aW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfY3MuYwo+ PiBpbmRleCAzNDUzZWI3N2M0OTguLjY0YWJmNWZlYWJmYSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX2NzLmMKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX2NzLmMKPj4gQEAgLTUyLDcgKzUyLDcgQEAg c3RhdGljIGludCB3cml0ZV90aW1lc3RhbXAoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIGludCBz bG90KQo+PiAgCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+ICAJY21kID0gTUlfU1RPUkVfUkVH SVNURVJfTUVNIHwgTUlfVVNFX0dHVFQ7Cj4+IC0JaWYgKElOVEVMX0dFTihycS0+ZW5naW5lLT5p OTE1KSA+PSA4KQo+PiArCWlmIChHUkFQSElDU19WRVIocnEtPmVuZ2luZS0+aTkxNSkgPj0gOCkK Pj4gIAkJY21kKys7Cj4+ICAJKmNzKysgPSBjbWQ7Cj4+ICAJKmNzKysgPSBpOTE1X21taW9fcmVn X29mZnNldChSSU5HX1RJTUVTVEFNUChycS0+ZW5naW5lLT5tbWlvX2Jhc2UpKTsKPj4gQEAgLTEy NSw3ICsxMjUsNyBAQCBzdGF0aWMgaW50IHBlcmZfbWlfYmJfc3RhcnQodm9pZCAqYXJnKQo+PiAg CWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+PiAgCWludCBlcnIgPSAwOwo+Pgo+PiAtCWlmIChJ TlRFTF9HRU4oZ3QtPmk5MTUpIDwgNykgLyogZm9yIHBlci1lbmdpbmUgQ1NfVElNRVNUQU1QICov Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA3KSAvKiBmb3IgcGVyLWVuZ2luZSBD U19USU1FU1RBTVAgKi8KPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJcGVyZl9iZWdpbihndCk7Cj4+ IEBAIC0yNDksNyArMjQ5LDcgQEAgc3RhdGljIGludCBwZXJmX21pX25vb3Aodm9pZCAqYXJnKQo+ PiAgCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+PiAgCWludCBlcnIgPSAwOwo+Pgo+PiAtCWlm IChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNykgLyogZm9yIHBlci1lbmdpbmUgQ1NfVElNRVNUQU1Q ICovCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA3KSAvKiBmb3IgcGVyLWVuZ2lu ZSBDU19USU1FU1RBTVAgKi8KPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJcGVyZl9iZWdpbihndCk7 Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVf cG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jCj4+IGlu ZGV4IDJjODk4NjIyYmRmYi4uNzJjY2EzZjBkYTIxIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYwo+PiBAQCAtMTk4LDcgKzE5OCw3IEBAIHN0 YXRpYyBpbnQgbGl2ZV9lbmdpbmVfdGltZXN0YW1wcyh2b2lkICphcmcpCj4+ICAJICogdGhlIHNh bWUgQ1MgY2xvY2suCj4+ICAJICovCj4+Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4 KQo+PiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgOCkKPj4gIAkJcmV0dXJuIDA7Cj4+ Cj4+ICAJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlkKSB7Cj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jCj4+IGluZGV4IDFmOTM1OTFhOGM2OS4u ZWEyMjAzYWYwNzY0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxm dGVzdF9leGVjbGlzdHMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF9leGVjbGlzdHMuYwo+PiBAQCAtMzI2OSw3ICszMjY5LDcgQEAgc3RhdGljIGludCBsaXZlX3By ZWVtcHRfdXNlcih2b2lkICphcmcpCj4+ICAJCWlmICghaW50ZWxfZW5naW5lX2hhc19wcmVlbXB0 aW9uKGVuZ2luZSkpCj4+ICAJCQljb250aW51ZTsKPj4KPj4gLQkJaWYgKElTX0dFTihndC0+aTkx NSwgOCkgJiYgZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4+ICsJCWlmIChHUkFQSElD U19WRVIoZ3QtPmk5MTUpID09IDggJiYgZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4+ ICAJCQljb250aW51ZTsgLyogd2UgbmVlZCBwZXItY29udGV4dCBHUFIgKi8KPj4KPj4gIAkJaWYg KGlndF9saXZlX3Rlc3RfYmVnaW4oJnQsIGd0LT5pOTE1LCBfX2Z1bmNfXywgZW5naW5lLT5uYW1l KSkgewo+PiBAQCAtNDI5Myw3ICs0MjkzLDcgQEAgc3RhdGljIGludCBsaXZlX3ZpcnR1YWxfcHJl c2VydmVkKHZvaWQgKmFyZykKPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJLyogQXMgd2UgdXNlIENT X0dQUiB3ZSBjYW5ub3QgcnVuIGJlZm9yZSB0aGV5IGV4aXN0ZWQgb24gYWxsIGVuZ2luZXMuICov Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA5KQo+PiArCWlmIChHUkFQSElDU19WRVIo Z3QtPmk5MTUpIDwgOSkKPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJZm9yIChjbGFzcyA9IDA7IGNs YXNzIDw9IE1BWF9FTkdJTkVfQ0xBU1M7IGNsYXNzKyspIHsKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2d0X3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9ndF9wbS5jCj4+IGluZGV4IGMwODQ1YmY3MmRkMy4uYjk0NDEyMTdjYTNk IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9ndF9wbS5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2d0X3BtLmMKPj4gQEAg LTc0LDEwICs3NCwxMCBAQCBzdGF0aWMgaW50IGxpdmVfZ3RfY2xvY2tzKHZvaWQgKmFyZykKPj4g IAkJcmV0dXJuIDA7Cj4+ICAJfQo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNCkg LyogQW55IENTX1RJTUVTVEFNUD8gKi8KPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8 IDQpIC8qIEFueSBDU19USU1FU1RBTVA/ICovCj4+ICAJCXJldHVybiAwOwo+Pgo+PiAtCWlmIChJ U19HRU4oZ3QtPmk5MTUsIDUpKQo+PiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID09IDUp Cj4+ICAJCS8qCj4+ICAJCSAqIFhYWCBDU19USU1FU1RBTVAgbG93IGR3b3JkIGlzIGR5c2Z1bmN0 aW9uYWw/Cj4+ICAJCSAqCj4+IEBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ndF9j bG9ja3Modm9pZCAqYXJnKQo+PiAgCQkgKi8KPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+IC0JaWYgKElT X0dFTihndC0+aTkxNSwgNCkpCj4+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0gNCkK Pj4gIAkJLyoKPj4gIAkJICogWFhYIENTX1RJTUVTVEFNUCBhcHBlYXJzIGdpYmJlcmlzaAo+PiAg CQkgKgo+PiBAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ndF9jbG9ja3Modm9p ZCAqYXJnKQo+PiAgCQl1NjQgdGltZTsKPj4gIAkJdTY0IGR0Owo+Pgo+PiAtCQlpZiAoSU5URUxf R0VOKGVuZ2luZS0+aTkxNSkgPCA3ICYmIGVuZ2luZS0+aWQgIT0gUkNTMCkKPj4gKwkJaWYgKEdS QVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpIDwgNyAmJiBlbmdpbmUtPmlkICE9IFJDUzApCj4+ICAJ CQljb250aW51ZTsKPj4KPj4gIAkJbWVhc3VyZV9jbG9ja3MoZW5naW5lLCAmY3ljbGVzLCAmZHQp Owo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2No ZWNrLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwo+PiBp bmRleCA1YjYzZDRkZjhjOTMuLjg1MzI0NmZhZDA1ZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMKPj4gQEAgLTE4MCw3ICsxODAsNyBAQCBo YW5nX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoYW5nICpoLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4+ICAJCWdvdG8gY2FuY2VsX3JxOwo+Pgo+PiAgCWJhdGNoID0gaC0+YmF0Y2g7 Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gOCkgewo+PiArCWlmIChHUkFQSElDU19W RVIoZ3QtPmk5MTUpID49IDgpIHsKPj4gIAkJKmJhdGNoKysgPSBNSV9TVE9SRV9EV09SRF9JTU1f R0VONDsKPj4gIAkJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEp KTsKPj4gIAkJKmJhdGNoKysgPSB1cHBlcl8zMl9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsK Pj4gQEAgLTE5NCw3ICsxOTQsNyBAQCBoYW5nX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoYW5nICpo LCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ICAJCSpiYXRjaCsrID0gTUlfQkFU Q0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4IHwgMTsKPj4gIAkJKmJhdGNoKysgPSBsb3dlcl8zMl9i aXRzKHZtYS0+bm9kZS5zdGFydCk7Cj4+ICAJCSpiYXRjaCsrID0gdXBwZXJfMzJfYml0cyh2bWEt Pm5vZGUuc3RhcnQpOwo+PiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSA2KSB7 Cj4+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID49IDYpIHsKPj4gIAkJKmJh dGNoKysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONDsKPj4gIAkJKmJhdGNoKysgPSAwOwo+PiAg CQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHMoaHdzX2FkZHJlc3MoaHdzLCBycSkpOwo+PiBAQCAt MjA3LDcgKzIwNyw3IEBAIGhhbmdfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGhhbmcgKmgsIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIAkJKmJhdGNoKysgPSBNSV9OT09QOwo+PiAg CQkqYmF0Y2grKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IDEgPDwgODsKPj4gIAkJKmJhdGNo KysgPSBsb3dlcl8zMl9iaXRzKHZtYS0+bm9kZS5zdGFydCk7Cj4+IC0JfSBlbHNlIGlmIChJTlRF TF9HRU4oZ3QtPmk5MTUpID49IDQpIHsKPj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihndC0+ aTkxNSkgPj0gNCkgewo+PiAgCQkqYmF0Y2grKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40IHwg TUlfVVNFX0dHVFQ7Cj4+ICAJCSpiYXRjaCsrID0gMDsKPj4gIAkJKmJhdGNoKysgPSBsb3dlcl8z Ml9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsKPj4gQEAgLTI0Myw3ICsyNDMsNyBAQCBoYW5n X2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoYW5nICpoLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4+ICAJfQo+Pgo+PiAgCWZsYWdzID0gMDsKPj4gLQlpZiAoSU5URUxfR0VOKGd0LT5p OTE1KSA8PSA1KQo+PiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDw9IDUpCj4+ICAJCWZs YWdzIHw9IEk5MTVfRElTUEFUQ0hfU0VDVVJFOwo+Pgo+PiAgCWVyciA9IHJxLT5lbmdpbmUtPmVt aXRfYmJfc3RhcnQocnEsIHZtYS0+bm9kZS5zdGFydCwgUEFHRV9TSVpFLCBmbGFncyk7Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jCj4+IGluZGV4IDk0MDA2ZjExN2JiZC4u NDU5Yjc3NWYxNjNhIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxm dGVzdF9sbGMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMu Ywo+PiBAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW50IGdlbjZfdmVyaWZ5X3JpbmdfZnJlcShz dHJ1Y3QgaW50ZWxfbGxjICpsbGMpCj4+ICAJCWlmIChmb3VuZCAhPSBpYV9mcmVxKSB7Cj4+ICAJ CQlwcl9lcnIoIk1pbiBmcmVxIHRhYmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90IG1hdGNo IGV4cGVjdGVkIENQVSBmcmVxLCBmb3VuZCAlZCwgZXhwZWN0ZWQgJWRcbiIsCj4+ICAJCQkgICAg ICAgZ3B1X2ZyZXEsIGNvbnN0cy5taW5fZ3B1X2ZyZXEsIGNvbnN0cy5tYXhfZ3B1X2ZyZXEsCj4+ IC0JCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAqIChJTlRFTF9HRU4oaTkx NSkgPj0gOSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCj4+ICsJCQkgICAgICAgaW50ZWxfZ3B1 X2ZyZXEocnBzLCBncHVfZnJlcSAqIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSA/IEdFTjlfRlJF UV9TQ0FMRVIgOiAxKSksCj4+ICAJCQkgICAgICAgZm91bmQsIGlhX2ZyZXEpOwo+PiAgCQkJZXJy ID0gLUVJTlZBTDsKPj4gIAkJCWJyZWFrOwo+PiBAQCAtNTQsNyArNTQsNyBAQCBzdGF0aWMgaW50 IGdlbjZfdmVyaWZ5X3JpbmdfZnJlcShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpCj4+ICAJCWlmIChm b3VuZCAhPSByaW5nX2ZyZXEpIHsKPj4gIAkJCXByX2VycigiTWluIGZyZXEgdGFibGUoJWQvWyVk LCAlZF0pOiVkTUh6IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgcmluZyBmcmVxLCBmb3VuZCAlZCwg ZXhwZWN0ZWQgJWRcbiIsCj4+ICAJCQkgICAgICAgZ3B1X2ZyZXEsIGNvbnN0cy5taW5fZ3B1X2Zy ZXEsIGNvbnN0cy5tYXhfZ3B1X2ZyZXEsCj4+IC0JCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEocnBz LCBncHVfZnJlcSAqIChJTlRFTF9HRU4oaTkxNSkgPj0gOSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAx KSksCj4+ICsJCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAqIChHUkFQSElD U19WRVIoaTkxNSkgPj0gOSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCj4+ICAJCQkgICAgICAg Zm91bmQsIHJpbmdfZnJlcSk7Cj4+ICAJCQllcnIgPSAtRUlOVkFMOwo+PiAgCQkJYnJlYWs7Cj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4+IGluZGV4IGQ4ZjY2MjM1MjRl OC4uMzExOTAxNmQ5OTEwIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9scmMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9s cmMuYwo+PiBAQCAtNTg0LDcgKzU4NCw3IEBAIHN0YXRpYyBpbnQgX19saXZlX2xyY19ncHIoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+PiAgCWludCBlcnI7Cj4+ICAJaW50IG47Cj4+ Cj4+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgOSAmJiBlbmdpbmUtPmNsYXNzICE9 IFJFTkRFUl9DTEFTUykKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCA5ICYm IGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQo+PiAgCQlyZXR1cm4gMDsgLyogR1BSIG9u bHkgb24gcmNzMCBmb3IgZ2VuOCAqLwo+Pgo+PiAgCWVyciA9IGdwcl9tYWtlX2RpcnR5KGVuZ2lu ZS0+a2VybmVsX2NvbnRleHQpOwo+PiBAQCAtMTM4OSwxMCArMTM4OSwxMCBAQCBzdGF0aWMgaW50 IF9fbHJjX2lzb2xhdGlvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBwb2lz b24pCj4+Cj4+ICBzdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4+ICB7Cj4+IC0JaWYgKGVuZ2luZS0+Y2xhc3MgPT0gQ09QWV9F TkdJTkVfQ0xBU1MgJiYgSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPT0gOSkKPj4gKwlpZiAoZW5n aW5lLT5jbGFzcyA9PSBDT1BZX0VOR0lORV9DTEFTUyAmJiBHUkFQSElDU19WRVIoZW5naW5lLT5p OTE1KSA9PSA5KQo+PiAgCQlyZXR1cm4gdHJ1ZTsKPj4KPj4gLQlpZiAoZW5naW5lLT5jbGFzcyA9 PSBSRU5ERVJfQ0xBU1MgJiYgSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPT0gMTEpCj4+ICsJaWYg KGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTICYmIEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5 MTUpID09IDExKQo+PiAgCQlyZXR1cm4gdHJ1ZTsKPj4KPj4gIAlyZXR1cm4gZmFsc2U7Cj4+IEBA IC0xNTUxLDcgKzE1NTEsNyBAQCBzdGF0aWMgaW50IF9fbGl2ZV9scmNfaW5kaXJlY3RfY3R4X2Ji KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIAkvKiBXZSB1c2UgdGhlIGFscmVh ZHkgcmVzZXJ2ZWQgZXh0cmEgcGFnZSBpbiBjb250ZXh0IHN0YXRlICovCj4+ICAJaWYgKCFhLT53 YV9iYl9wYWdlKSB7Cj4+ICAJCUdFTV9CVUdfT04oYi0+d2FfYmJfcGFnZSk7Cj4+IC0JCUdFTV9C VUdfT04oSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPT0gMTIpOwo+PiArCQlHRU1fQlVHX09OKEdS QVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID09IDEyKTsKPj4gIAkJZ290byB1bnBpbl9iOwo+PiAg CX0KPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X21v Y3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X21vY3MuYwo+PiBpbmRleCBl NTVhODg3ZDExZTIuLmI5YmIwZTZlOTdmNyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfbW9jcy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X21vY3MuYwo+PiBAQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyBib29sIG1jcl9y YW5nZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTMyIG9mZnNldCkKPj4gIAkgKiB3 aGljaCBvbmx5IGNvbnRyb2xzIENQVSBpbml0aWF0ZWQgTU1JTy4gUm91dGluZyBkb2VzIG5vdAo+ PiAgCSAqIHdvcmsgZm9yIENTIGFjY2VzcyBzbyB3ZSBjYW5ub3QgdmVyaWZ5IHRoZW0gb24gdGhp cyBwYXRoLgo+PiAgCSAqLwo+PiAtCXJldHVybiBJTlRFTF9HRU4oaTkxNSkgPj0gOCAmJiBvZmZz ZXQgPj0gMHhiMDAwICYmIG9mZnNldCA8PSAweGI0ZmY7Cj4+ICsJcmV0dXJuIEdSQVBISUNTX1ZF UihpOTE1KSA+PSA4ICYmIG9mZnNldCA+PSAweGIwMDAgJiYgb2Zmc2V0IDw9IDB4YjRmZjsKPj4g IH0KPj4KPj4gIHN0YXRpYyBpbnQgY2hlY2tfbDNjY190YWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxm dGVzdF9yYzYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3JjNi5jCj4+IGlu ZGV4IDcxMGY4MjVmNmU1YS4uOGM3MGI3ZTEyMDc0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yYzYuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9yYzYuYwo+PiBAQCAtMTQwLDcgKzE0MCw3IEBAIHN0YXRpYyBjb25zdCB1 MzIgKl9fbGl2ZV9yYzZfY3R4KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPj4gIAl9Cj4+Cj4+ ICAJY21kID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgTUlfVVNFX0dHVFQ7Cj4+IC0JaWYgKElO VEVMX0dFTihycS0+ZW5naW5lLT5pOTE1KSA+PSA4KQo+PiArCWlmIChHUkFQSElDU19WRVIocnEt PmVuZ2luZS0+aTkxNSkgPj0gOCkKPj4gIAkJY21kKys7Cj4+Cj4+ICAJKmNzKysgPSBjbWQ7Cj4+ IEBAIC0xOTMsNyArMTkzLDcgQEAgaW50IGxpdmVfcmM2X2N0eF93YSh2b2lkICphcmcpCj4+ICAJ aW50IGVyciA9IDA7Cj4+Cj4+ICAJLyogQSByZWFkIG9mIENUWF9JTkZPIHVwc2V0cyByYzYuIFBv a2UgdGhlIGJlYXIhICovCj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4KQo+PiArCWlm IChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgOCkKPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJZW5n aW5lcyA9IHJhbmRvbWlzZWRfZW5naW5lcyhndCwgJnBybmcsICZjb3VudCk7Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yaW5nX3N1Ym1pc3Npb24uYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jpbmdfc3VibWlzc2lvbi5jCj4+IGlu ZGV4IGMxMmU3NDE3MWI2My4uMDQxOTU0NDA4ZDBmIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yaW5nX3N1Ym1pc3Npb24uYwo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yaW5nX3N1Ym1pc3Npb24uYwo+PiBAQCAtNDEsMTAg KzQxLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKmNyZWF0ZV93YWxseShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ICAJCXJldHVybiBFUlJfQ0FTVChjcyk7Cj4+ICAJfQo+ Pgo+PiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA2KSB7Cj4+ICsJaWYgKEdSQVBI SUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDYpIHsKPj4gIAkJKmNzKysgPSBNSV9TVE9SRV9EV09S RF9JTU1fR0VONDsKPj4gIAkJKmNzKysgPSAwOwo+PiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGVu Z2luZS0+aTkxNSkgPj0gNCkgewo+PiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkgPj0gNCkgewo+PiAgCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40IHwgTUlf VVNFX0dHVFQ7Cj4+ICAJCSpjcysrID0gMDsKPj4gIAl9IGVsc2Ugewo+PiBAQCAtMjY2LDcgKzI2 Niw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9jdHhfc3dpdGNoX3dhKHZvaWQgKmFyZykKPj4gIAkJaWYg KCFpbnRlbF9lbmdpbmVfY2FuX3N0b3JlX2R3b3JkKGVuZ2luZSkpCj4+ICAJCQljb250aW51ZTsK Pj4KPj4gLQkJaWYgKElTX0dFTl9SQU5HRShndC0+aTkxNSwgNCwgNSkpCj4+ICsJCWlmIChJU19H UkFQSElDU19WRVIoZ3QtPmk5MTUsIDQsIDUpKQo+PiAgCQkJY29udGludWU7IC8qIE1JX1NUT1JF X0RXT1JEIGlzIHByaXZpbGVnZWQhICovCj4+Cj4+ICAJCXNhdmVkX3dhID0gZmV0Y2hfYW5kX3pl cm8oJmVuZ2luZS0+d2FfY3R4LnZtYSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9zZWxmdGVzdF9ycHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0 X3Jwcy5jCj4+IGluZGV4IDNjYTFiZDU3OTNjMy4uN2VlMjUxM2UxNWY5IDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9ycHMuYwo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9ycHMuYwo+PiBAQCAtMjA0LDcgKzIwNCw3IEBAIHN0 YXRpYyB2b2lkIHNob3dfcHN0YXRlX2xpbWl0cyhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4+ICAJ CQlpOTE1X21taW9fcmVnX29mZnNldChCWFRfUlBfU1RBVEVfQ0FQKSwKPj4gIAkJCWludGVsX3Vu Y29yZV9yZWFkKHJwc190b191bmNvcmUocnBzKSwKPj4gIAkJCQkJICBCWFRfUlBfU1RBVEVfQ0FQ KSk7Cj4+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgOSkpIHsKPj4gKwl9IGVsc2UgaWYgKEdS QVBISUNTX1ZFUihpOTE1KSA9PSA5KSB7Cj4+ICAJCXByX2luZm8oIlBfU1RBVEVfTElNSVRTWyV4 XTogMHglMDh4XG4iLAo+PiAgCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOV9SUF9TVEFURV9M SU1JVFMpLAo+PiAgCQkJaW50ZWxfdW5jb3JlX3JlYWQocnBzX3RvX3VuY29yZShycHMpLAo+PiBA QCAtMjIyLDcgKzIyMiw3IEBAIGludCBsaXZlX3Jwc19jbG9ja19pbnRlcnZhbCh2b2lkICphcmcp Cj4+ICAJc3RydWN0IGlndF9zcGlubmVyIHNwaW47Cj4+ICAJaW50IGVyciA9IDA7Cj4+Cj4+IC0J aWYgKCFpbnRlbF9ycHNfaXNfZW5hYmxlZChycHMpIHx8IElOVEVMX0dFTihndC0+aTkxNSkgPCA2 KQo+PiArCWlmICghaW50ZWxfcnBzX2lzX2VuYWJsZWQocnBzKSB8fCBHUkFQSElDU19WRVIoZ3Qt Pmk5MTUpIDwgNikKPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJaWYgKGlndF9zcGlubmVyX2luaXQo JnNwaW4sIGd0KSkKPj4gQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgdm9pZCBzaG93X3BjdV9j b25maWcoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+Pgo+PiAgCW1pbl9ncHVfZnJlcSA9IHJwcy0+ bWluX2ZyZXE7Cj4+ICAJbWF4X2dwdV9mcmVxID0gcnBzLT5tYXhfZnJlcTsKPj4gLQlpZiAoSU5U RUxfR0VOKGk5MTUpID49IDkpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpIHsK Pj4gIAkJLyogQ29udmVydCBHVCBmcmVxdWVuY3kgdG8gNTAgSFogdW5pdHMgKi8KPj4gIAkJbWlu X2dwdV9mcmVxIC89IEdFTjlfRlJFUV9TQ0FMRVI7Cj4+ICAJCW1heF9ncHVfZnJlcSAvPSBHRU45 X0ZSRVFfU0NBTEVSOwo+PiBAQCAtNjE0LDcgKzYxNCw3IEBAIGludCBsaXZlX3Jwc19mcmVxdWVu Y3lfY3Modm9pZCAqYXJnKQo+PiAgCWlmICghaW50ZWxfcnBzX2lzX2VuYWJsZWQocnBzKSkKPj4g IAkJcmV0dXJuIDA7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4KSAvKiBmb3Ig Q1Mgc2ltcGxpY2l0eSAqLwo+PiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgOCkgLyog Zm9yIENTIHNpbXBsaWNpdHkgKi8KPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJaWYgKENQVV9MQVRF TkNZID49IDApCj4+IEBAIC03NTUsNyArNzU1LDcgQEAgaW50IGxpdmVfcnBzX2ZyZXF1ZW5jeV9z cm0odm9pZCAqYXJnKQo+PiAgCWlmICghaW50ZWxfcnBzX2lzX2VuYWJsZWQocnBzKSkKPj4gIAkJ cmV0dXJuIDA7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4KSAvKiBmb3IgQ1Mg c2ltcGxpY2l0eSAqLwo+PiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgOCkgLyogZm9y IENTIHNpbXBsaWNpdHkgKi8KPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJaWYgKENQVV9MQVRFTkNZ ID49IDApCj4+IEBAIC0xMDMxLDcgKzEwMzEsNyBAQCBpbnQgbGl2ZV9ycHNfaW50ZXJydXB0KHZv aWQgKmFyZykKPj4gIAkgKiBGaXJzdCwgbGV0J3MgY2hlY2sgd2hldGhlciBvciBub3Qgd2UgYXJl IHJlY2VpdmluZyBpbnRlcnJ1cHRzLgo+PiAgCSAqLwo+Pgo+PiAtCWlmICghaW50ZWxfcnBzX2hh c19pbnRlcnJ1cHRzKHJwcykgfHwgSU5URUxfR0VOKGd0LT5pOTE1KSA8IDYpCj4+ICsJaWYgKCFp bnRlbF9ycHNfaGFzX2ludGVycnVwdHMocnBzKSB8fCBHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwg NikKPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJaW50ZWxfZ3RfcG1fZ2V0KGd0KTsKPj4gQEAgLTEx MzYsNyArMTEzNiw3IEBAIGludCBsaXZlX3Jwc19wb3dlcih2b2lkICphcmcpCj4+ICAJICogdGhh dCB0aGVvcnkuCj4+ICAJICovCj4+Cj4+IC0JaWYgKCFpbnRlbF9ycHNfaXNfZW5hYmxlZChycHMp IHx8IElOVEVMX0dFTihndC0+aTkxNSkgPCA2KQo+PiArCWlmICghaW50ZWxfcnBzX2lzX2VuYWJs ZWQocnBzKSB8fCBHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgNikKPj4gIAkJcmV0dXJuIDA7Cj4+ Cj4+ICAJaWYgKCFsaWJyYXBsX3N1cHBvcnRlZChndC0+aTkxNSkpCj4+IEBAIC0xMjQwLDcgKzEy NDAsNyBAQCBpbnQgbGl2ZV9ycHNfZHluYW1pYyh2b2lkICphcmcpCj4+ICAJICogbW92aW5nIHBh cnRzIGludG8gZHluYW1pYyByZWNsb2NraW5nIGJhc2VkIG9uIGxvYWQuCj4+ICAJICovCj4+Cj4+ IC0JaWYgKCFpbnRlbF9ycHNfaXNfZW5hYmxlZChycHMpIHx8IElOVEVMX0dFTihndC0+aTkxNSkg PCA2KQo+PiArCWlmICghaW50ZWxfcnBzX2lzX2VuYWJsZWQocnBzKSB8fCBHUkFQSElDU19WRVIo Z3QtPmk5MTUpIDwgNikKPj4gIAkJcmV0dXJuIDA7Cj4+Cj4+ICAJaWYgKGlndF9zcGlubmVyX2lu aXQoJnNwaW4sIGd0KSkKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Nl bGZ0ZXN0X3RpbWVsaW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1l bGluZS5jCj4+IGluZGV4IDlhZGJkOWQxNDdiZS4uNjRkYTBjOTFkZWMxIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmMKPj4gQEAgLTQ1NywxMiAr NDU3LDEyIEBAIHN0YXRpYyBpbnQgZW1pdF9nZ3R0X3N0b3JlX2R3KHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxLCB1MzIgYWRkciwgdTMyIHZhbHVlKQo+PiAgCWlmIChJU19FUlIoY3MpKQo+PiAgCQly ZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihycS0+ZW5naW5lLT5pOTE1 KSA+PSA4KSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihycS0+ZW5naW5lLT5pOTE1KSA+PSA4KSB7 Cj4+ICAJCSpjcysrID0gTUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQgfCBNSV9VU0VfR0dUVDsKPj4g IAkJKmNzKysgPSBhZGRyOwo+PiAgCQkqY3MrKyA9IDA7Cj4+ICAJCSpjcysrID0gdmFsdWU7Cj4+ IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4ocnEtPmVuZ2luZS0+aTkxNSkgPj0gNCkgewo+PiArCX0g ZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKHJxLT5lbmdpbmUtPmk5MTUpID49IDQpIHsKPj4gIAkJKmNz KysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONCB8IE1JX1VTRV9HR1RUOwo+PiAgCQkqY3MrKyA9 IDA7Cj4+ICAJCSpjcysrID0gYWRkcjsKPj4gQEAgLTk5Miw3ICs5OTIsNyBAQCBzdGF0aWMgaW50 IGxpdmVfaHdzcF9yZWFkKHZvaWQgKmFyZykKPj4gIAkgKiBldmVuIGFjcm9zcyBtdWx0aXBsZSB3 cmFwcy4KPj4gIAkgKi8KPj4KPj4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDgpIC8qIENT IGNvbnZlbmllbmNlIFtTUk0vTFJNXSAqLwo+PiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUp IDwgOCkgLyogQ1MgY29udmVuaWVuY2UgW1NSTS9MUk1dICovCj4+ICAJCXJldHVybiAwOwo+Pgo+ PiAgCXRsID0gaW50ZWxfdGltZWxpbmVfY3JlYXRlKGd0KTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF93b3JrYXJvdW5kcy5jCj4+IGluZGV4IDY0OTM3ZWMzZjJkYy4u YzMwNzU0ZGFmNGIxIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxm dGVzdF93b3JrYXJvdW5kcy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0 ZXN0X3dvcmthcm91bmRzLmMKPj4gQEAgLTE0NSw3ICsxNDUsNyBAQCByZWFkX25vbnByaXZzKHN0 cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPj4gIAkJZ290byBlcnJfcmVxOwo+Pgo+PiAgCXNybSA9 IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKPj4gLQlpZiAo SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOCkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2lu ZS0+aTkxNSkgPj0gOCkKPj4gIAkJc3JtKys7Cj4+Cj4+ICAJY3MgPSBpbnRlbF9yaW5nX2JlZ2lu KHJxLCA0ICogUklOR19NQVhfTk9OUFJJVl9TTE9UUyk7Cj4+IEBAIC01NDYsNyArNTQ2LDcgQEAg c3RhdGljIGludCBjaGVja19kaXJ0eV93aGl0ZWxpc3Qoc3RydWN0IGludGVsX2NvbnRleHQgKmNl KQo+Pgo+PiAgCQlzcm0gPSBNSV9TVE9SRV9SRUdJU1RFUl9NRU07Cj4+ICAJCWxybSA9IE1JX0xP QURfUkVHSVNURVJfTUVNOwo+PiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOCkK Pj4gKwkJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDgpCj4+ICAJCQlscm0rKywg c3JtKys7Cj4+Cj4+ICAJCXByX2RlYnVnKCIlczogV3JpdGluZyBnYXJiYWdlIHRvICV4XG4iLAo+ PiBAQCAtNzQ5LDcgKzc0OSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9kaXJ0eV93aGl0ZWxpc3Qodm9p ZCAqYXJnKQo+Pgo+PiAgCS8qIENhbiB0aGUgdXNlciB3cml0ZSB0byB0aGUgd2hpdGVsaXN0ZWQg cmVnaXN0ZXJzPyAqLwo+Pgo+PiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNykgLyogbWlu aW11bSByZXF1aXJlbWVudCBmb3IgTFJJLCBTUk0sIExSTSAqLwo+PiArCWlmIChHUkFQSElDU19W RVIoZ3QtPmk5MTUpIDwgNykgLyogbWluaW11bSByZXF1aXJlbWVudCBmb3IgTFJJLCBTUk0sIExS TSAqLwo+PiAgCQlyZXR1cm4gMDsKPj4KPj4gIAlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndCwg aWQpIHsKPj4gQEAgLTgyOSw3ICs4MjksNyBAQCBzdGF0aWMgaW50IHJlYWRfd2hpdGVsaXN0ZWRf cmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPj4gIAkJZ290byBlcnJfcmVxOwo+ Pgo+PiAgCXNybSA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTTsKPj4gLQlpZiAoSU5URUxfR0VOKGVu Z2luZS0+aTkxNSkgPj0gOCkKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0g OCkKPj4gIAkJc3JtKys7Cj4+Cj4+ICAJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0ICogZW5n aW5lLT53aGl0ZWxpc3QuY291bnQpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfZ3VjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9n dWMuYwo+PiBpbmRleCBhZGFlMDRjNDdhYWIuLjg0ZjgwNjkxMTM3MCAxMDA2NDQKPj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMKPj4gQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBp bnRlbF9ndWNfaW5pdF9zZW5kX3JlZ3Moc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+PiAgCWVudW0g Zm9yY2V3YWtlX2RvbWFpbnMgZndfZG9tYWlucyA9IDA7Cj4+ICAJdW5zaWduZWQgaW50IGk7Cj4+ Cj4+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEpIHsKPj4gKwlpZiAoR1JBUEhJQ1Nf VkVSKGd0LT5pOTE1KSA+PSAxMSkgewo+PiAgCQlndWMtPnNlbmRfcmVncy5iYXNlID0KPj4gIAkJ CQlpOTE1X21taW9fcmVnX29mZnNldChHRU4xMV9TT0ZUX1NDUkFUQ0goMCkpOwo+PiAgCQlndWMt PnNlbmRfcmVncy5jb3VudCA9IEdFTjExX1NPRlRfU0NSQVRDSF9DT1VOVDsKPj4gQEAgLTE3Niw3 ICsxNzYsNyBAQCB2b2lkIGludGVsX2d1Y19pbml0X2Vhcmx5KHN0cnVjdCBpbnRlbF9ndWMgKmd1 YykKPj4KPj4gIAltdXRleF9pbml0KCZndWMtPnNlbmRfbXV0ZXgpOwo+PiAgCXNwaW5fbG9ja19p bml0KCZndWMtPmlycV9sb2NrKTsKPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDExKSB7Cj4+ ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewo+PiAgCQlndWMtPm5vdGlmeV9yZWcg PSBHRU4xMV9HVUNfSE9TVF9JTlRFUlJVUFQ7Cj4+ICAJCWd1Yy0+aW50ZXJydXB0cy5yZXNldCA9 IGdlbjExX3Jlc2V0X2d1Y19pbnRlcnJ1cHRzOwo+PiAgCQlndWMtPmludGVycnVwdHMuZW5hYmxl ID0gZ2VuMTFfZW5hYmxlX2d1Y19pbnRlcnJ1cHRzOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Fkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvdWMvaW50ZWxfZ3VjX2Fkcy5jCj4+IGluZGV4IDE3NTI2NzE3MzY4Yy4uYjMyZmFmYmEyYTkw IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfYWRz LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Fkcy5jCj4+ IEBAIC0xNjIsNyArMTYyLDcgQEAgc3RhdGljIHZvaWQgX19ndWNfYWRzX2luaXQoc3RydWN0IGlu dGVsX2d1YyAqZ3VjKQo+PiAgCWJsb2ItPnN5c3RlbV9pbmZvLmdlbmVyaWNfZ3Rfc3lzaW5mb1tH VUNfR0VORVJJQ19HVF9TWVNJTkZPX1ZEQk9YX1NGQ19TVVBQT1JUX01BU0tdID0KPj4gIAkJZ3Qt PmluZm8udmRib3hfc2ZjX2FjY2VzczsKPj4KPj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEy ICYmICFJU19ER0ZYKGk5MTUpKSB7Cj4+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMiAm JiAhSVNfREdGWChpOTE1KSkgewo+PiAgCQl1MzIgZGlzdGRicmVnID0gaW50ZWxfdW5jb3JlX3Jl YWQoZ3QtPnVuY29yZSwKPj4gIAkJCQkJCSAgR0VOMTJfRElTVF9EQlNfUE9QVUxBVEVEKTsKPj4g IAkJYmxvYi0+c3lzdGVtX2luZm8uZ2VuZXJpY19ndF9zeXNpbmZvW0dVQ19HRU5FUklDX0dUX1NZ U0lORk9fRE9PUkJFTExfQ09VTlRfUEVSX1NRSURJXSA9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfZncuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3VjL2ludGVsX2d1Y19mdy5jCj4+IGluZGV4IDIyNzBkNmIzYjI3Mi4uNzZmZTc2NmFkMWJj IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfZncu Ywo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfZncuYwo+PiBA QCAtMzAsNyArMzAsNyBAQCBzdGF0aWMgdm9pZCBndWNfcHJlcGFyZV94ZmVyKHN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSkKPj4gIAllbHNlCj4+ICAJCWludGVsX3VuY29yZV93cml0ZSh1bmNv cmUsIEdFTjlfR1RfUE1fQ09ORklHLCBHVF9ET09SQkVMTF9FTkFCTEUpOwo+Pgo+PiAtCWlmIChJ U19HRU4odW5jb3JlLT5pOTE1LCA5KSkgewo+PiArCWlmIChHUkFQSElDU19WRVIodW5jb3JlLT5p OTE1KSA9PSA5KSB7Cj4+ICAJCS8qIERPUCBDbG9jayBHYXRpbmcgRW5hYmxlIGZvciBHdUMgY2xv Y2tzICovCj4+ICAJCWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBHRU43X01JU0NDUENUTCwKPj4g IAkJCQkgMCwgR0VOOF9ET1BfQ0xPQ0tfR0FURV9HVUNfRU5BQkxFKTsKPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCj4+IGluZGV4IDMz NTcxOWYxNzQ5MC4uNTQxZjZkYTFlYzQ3IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPj4gQEAgLTQzOCw3ICs0MzgsNyBA QCBzdGF0aWMgdm9pZCBndWNfaW50ZXJydXB0c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3Qp Cj4+ICAJdTMyIGlycXMgPSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQ7Cj4+ICAJdTMyIGRt YXNrID0gaXJxcyA8PCAxNiB8IGlycXM7Cj4+Cj4+IC0JR0VNX0JVR19PTihJTlRFTF9HRU4oZ3Qt Pmk5MTUpIDwgMTEpOwo+PiArCUdFTV9CVUdfT04oR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDEx KTsKPj4KPj4gIAkvKiBEb24ndCBoYW5kbGUgdGhlIGN0eCBzd2l0Y2ggaW50ZXJydXB0IGluIEd1 QyBzdWJtaXNzaW9uIG1vZGUgKi8KPj4gIAlpbnRlbF91bmNvcmVfcm13KHVuY29yZSwgR0VOMTFf UkVOREVSX0NPUFlfSU5UUl9FTkFCTEUsIGRtYXNrLCAwKTsKPj4gQEAgLTQ1MSw3ICs0NTEsNyBA QCBzdGF0aWMgdm9pZCBndWNfaW50ZXJydXB0c19yZWxlYXNlKHN0cnVjdCBpbnRlbF9ndCAqZ3Qp Cj4+ICAJdTMyIGlycXMgPSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQ7Cj4+ICAJdTMyIGRt YXNrID0gaXJxcyA8PCAxNiB8IGlycXM7Cj4+Cj4+IC0JR0VNX0JVR19PTihJTlRFTF9HRU4oZ3Qt Pmk5MTUpIDwgMTEpOwo+PiArCUdFTV9CVUdfT04oR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDEx KTsKPj4KPj4gIAkvKiBIYW5kbGUgY3R4IHN3aXRjaCBpbnRlcnJ1cHRzIGFnYWluICovCj4+ICAJ aW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIEdFTjExX1JFTkRFUl9DT1BZX0lOVFJfRU5BQkxFLCAw LCBkbWFzayk7Cj4+IEBAIC02NDgsNyArNjQ4LDcgQEAgc3RhdGljIHZvaWQgZ3VjX2RlZmF1bHRf dmZ1bmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gIAllbmdpbmUtPmVtaXRf Zmx1c2ggPSBnZW44X2VtaXRfZmx1c2hfeGNzOwo+PiAgCWVuZ2luZS0+ZW1pdF9pbml0X2JyZWFk Y3J1bWIgPSBnZW44X2VtaXRfaW5pdF9icmVhZGNydW1iOwo+PiAgCWVuZ2luZS0+ZW1pdF9maW5p X2JyZWFkY3J1bWIgPSBnZW44X2VtaXRfZmluaV9icmVhZGNydW1iX3hjczsKPj4gLQlpZiAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpIHsKPj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2lu ZS0+aTkxNSkgPj0gMTIpIHsKPj4gIAkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdl bjEyX2VtaXRfZmluaV9icmVhZGNydW1iX3hjczsKPj4gIAkJZW5naW5lLT5lbWl0X2ZsdXNoID0g Z2VuMTJfZW1pdF9mbHVzaF94Y3M7Cj4+ICAJfQo+PiBAQCAtNjcwLDcgKzY3MCw3IEBAIHN0YXRp YyB2b2lkIGd1Y19kZWZhdWx0X3ZmdW5jcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4+Cj4+ICBzdGF0aWMgdm9pZCByY3Nfc3VibWlzc2lvbl9vdmVycmlkZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4+ICB7Cj4+IC0Jc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5p OTE1KSkgewo+PiArCXN3aXRjaCAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpIHsKPj4gIAlj YXNlIDEyOgo+PiAgCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW4xMl9lbWl0X2ZsdXNoX3JjczsK Pj4gIAkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjEyX2VtaXRfZmluaV9icmVh ZGNydW1iX3JjczsKPj4gQEAgLTcwMCw3ICs3MDAsNyBAQCBpbnQgaW50ZWxfZ3VjX3N1Ym1pc3Np b25fc2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiAgCSAqIFRoZSBzZXR1 cCByZWxpZXMgb24gc2V2ZXJhbCBhc3N1bXB0aW9ucyAoZS5nLiBpcnFzIGFsd2F5cyBlbmFibGVk KQo+PiAgCSAqIHRoYXQgYXJlIG9ubHkgdmFsaWQgb24gZ2VuMTErCj4+ICAJICovCj4+IC0JR0VN X0JVR19PTihJTlRFTF9HRU4oaTkxNSkgPCAxMSk7Cj4+ICsJR0VNX0JVR19PTihHUkFQSElDU19W RVIoaTkxNSkgPCAxMSk7Cj4+Cj4+ICAJdGFza2xldF9zZXR1cCgmZW5naW5lLT5leGVjbGlzdHMu dGFza2xldCwgZ3VjX3N1Ym1pc3Npb25fdGFza2xldCk7Cj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9odWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3VjL2ludGVsX2h1Yy5jCj4+IGluZGV4IDU2ZDIxNDRkYzZhMC4uZmM1Mzg3YjQxMGEyIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9odWMuYwo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9odWMuYwo+PiBAQCAtNDMsNyAr NDMsNyBAQCB2b2lkIGludGVsX2h1Y19pbml0X2Vhcmx5KHN0cnVjdCBpbnRlbF9odWMgKmh1YykK Pj4KPj4gIAlpbnRlbF91Y19md19pbml0X2Vhcmx5KCZodWMtPmZ3LCBJTlRFTF9VQ19GV19UWVBF X0hVQyk7Cj4+Cj4+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgewo+PiArCWlmIChHUkFQ SElDU19WRVIoaTkxNSkgPj0gMTEpIHsKPj4gIAkJaHVjLT5zdGF0dXMucmVnID0gR0VOMTFfSFVD X0tFUk5FTF9MT0FEX0lORk87Cj4+ICAJCWh1Yy0+c3RhdHVzLm1hc2sgPSBIVUNfTE9BRF9TVUND RVNTRlVMOwo+PiAgCQlodWMtPnN0YXR1cy52YWx1ZSA9IEhVQ19MT0FEX1NVQ0NFU1NGVUw7Cj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Yy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfdWMuYwo+PiBpbmRleCA2YWJiOGYyZGMzM2Qu LjZjMmJmNGI2YmMxMCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv aW50ZWxfdWMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Yy5j Cj4+IEBAIC0yMyw3ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHVjX2V4cGFuZF9kZWZhdWx0X29wdGlv bnMoc3RydWN0IGludGVsX3VjICp1YykKPj4gIAkJcmV0dXJuOwo+Pgo+PiAgCS8qIERvbid0IGVu YWJsZSBHdUMvSHVDIG9uIHByZS1HZW4xMiAqLwo+PiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPCAx Mikgewo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPCAxMikgewo+PiAgCQlpOTE1LT5wYXJh bXMuZW5hYmxlX2d1YyA9IDA7Cj4+ICAJCXJldHVybjsKPj4gIAl9Cj4+IEBAIC00NjcsNyArNDY3 LDcgQEAgc3RhdGljIGludCBfX3VjX2luaXRfaHcoc3RydWN0IGludGVsX3VjICp1YykKPj4KPj4g IAkvKiBXYUVuYWJsZXVLZXJuZWxIZWFkZXJWYWxpZEZpeDpza2wgKi8KPj4gIAkvKiBXYUVuYWJs ZUd1Q0Jvb3RIYXNoQ2hlY2tOb3RTZXQ6c2tsLGJ4dCxrYmwgKi8KPj4gLQlpZiAoSVNfR0VOKGk5 MTUsIDkpKQo+PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gOSkKPj4gIAkJYXR0ZW1wdHMg PSAzOwo+PiAgCWVsc2UKPj4gIAkJYXR0ZW1wdHMgPSAxOwo+PiAtLQo+PiAyLjMxLjEKPj4KPgo+ LS0gCj5NYXR0IFJvcGVyCj5HcmFwaGljcyBTb2Z0d2FyZSBFbmdpbmVlcgo+VlRULU9TR0MgUGxh dGZvcm0gRW5hYmxlbWVudAo+SW50ZWwgQ29ycG9yYXRpb24KPig5MTYpIDM1Ni0yNzk1Cl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=