Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751625AbdI3N5f (ORCPT ); Sat, 30 Sep 2017 09:57:35 -0400 Received: from mail-wm0-f49.google.com ([74.125.82.49]:45156 "EHLO mail-wm0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751028AbdI3N5a (ORCPT ); Sat, 30 Sep 2017 09:57:30 -0400 X-Google-Smtp-Source: AOwi7QADFFQngnXv5l3PtBc6BnMRzNRbeC+J86TAbi7ozVqOFPOm35jEwDtRk29cx8OsXV6ewB63awT8pJOU9q9chCg= MIME-Version: 1.0 In-Reply-To: <20170930054815.0e2c182f@vmware.local.home> References: <20170927112723.16862-1-alexander.levin@verizon.com> <20170927150207.swmcarc4lqlklohr@dhcp22.suse.cz> <20170930054815.0e2c182f@vmware.local.home> From: Vegard Nossum Date: Sat, 30 Sep 2017 15:57:27 +0200 Message-ID: Subject: Re: [PATCH] mm: kill kmemcheck again To: Steven Rostedt Cc: Michal Hocko , "Levin, Alexander (Sasha Levin)" , "akpm@linux-foundation.org" , "linux-kernel@vger.kernel.org" , "David S . Miller" , Alexander Potapenko , Andrey Ryabinin , Dmitry Vyukov Content-Type: multipart/mixed; boundary="001a1145b084a20317055a6885ba" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 138909 Lines: 1824 --001a1145b084a20317055a6885ba Content-Type: text/plain; charset="UTF-8" On 30 September 2017 at 11:48, Steven Rostedt wrote: > On Wed, 27 Sep 2017 17:02:07 +0200 > Michal Hocko wrote: > >> > Now that 2 years have passed, and all distros provide gcc that supports >> > KASAN, kill kmemcheck again for the very same reasons. >> >> This is just too large to review manually. How have you generated the >> patch? > > I agree. This needs to be taken out piece by piece, not in one go, > where there could be unexpected fallout. I have a patch from earlier this year that starts by removing the core code and defining all the helpers/flags as no-ops so they can be removed bit by bit at a later time. See the attachment. Pekka signed off on it too. I never actually submitted this because I was waiting for MSAN to be merged in the kernel. It has been compile and run tested on x86_64. Vegard --001a1145b084a20317055a6885ba Content-Type: text/x-patch; charset="US-ASCII"; name="0001-kmemcheck-remove-core-x86-mm-code.patch" Content-Disposition: attachment; filename="0001-kmemcheck-remove-core-x86-mm-code.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j87doxav0 RnJvbSBiMDZlMmIzYjgzM2IwMmVjYjBhZmI5ZGQ5MjQyMmU4OWM3ZmJiNmQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWZWdhcmQgTm9zc3VtIDx2ZWdhcmQubm9zc3VtQG9yYWNsZS5j b20+CkRhdGU6IFRodSwgMzAgTWFyIDIwMTcgMTM6MjY6MTUgKzAyMDAKU3ViamVjdDogW1BBVENI XSBrbWVtY2hlY2s6IHJlbW92ZSBjb3JlICh4ODYgKyBtbSkgY29kZQoKV2l0aCBLQVNBTi9LTVNB TiBhbmQgY29tcGlsZXItYmFzZWQgaW5zdHJ1bWVudGF0aW9uLCB0aGlzIGNvZGUgaXMgd2F5IHBh c3QKaXRzIGV4cGlyeSBkYXRlLiBUaGVyZSBpcyB6ZXJvIHJlYXNvbiB0byBiZSB1c2luZyBrbWVt Y2hlY2sgYXQgdGhpcyBwb2ludCwKYXMgS0FTQU4vS01TQU4gd2lsbCBiZSBtdWNoIGZhc3Rlciwg c3VwcG9ydCBTTVAsIGFuZCBjYXRjaCBhbnkgYnVnIHRoYXQKa21lbWNoZWNrIHdvdWxkIGhhdmUg Y2F1Z2h0LiBTZWUgdGhlIGFkZGl0aW9uYWwgcmF0aW9uYWxlIGFuZCBwYXN0CmRpc2N1c3Npb24g YXQgPGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE1LzMvMTEvNDM1Pi4KCkkgdGFrZSB0aGUgYXBw cm9hY2ggb2YgZmlyc3QgcmVtb3ZpbmcgYWxsIHRoZSBjb3JlIHg4NiBhbmQgbW0gY29kZSwgbGVh dmluZwpiZWhpbmQgb25seSBpbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oIHdoaWNoIHByb3ZpZGVz IHNvbWUgaGVscGVycyAobm93IG9ubHkKZHVtbWllcyBhcyBmb3IgdGhlICFLTUVNQ0hFQ0sgY2Fz ZSBwcmV2aW91c2x5KSB1c2VkIGluIGUuZy4gbmV0d29ya2luZyBjb2RlCmZvciBzcGVjaWFsIGFu bm90YXRpb25zLgoKV2UgY2FuIHRoZW4gc2VuZCBpbmRpdmlkdWFsIChzbWFsbGVyLCBtb3JlIHJl dmlld2FibGUpIHBhdGNoZXMgZm9yIHJlbW92aW5nCmttZW1jaGVjayBhbm5vdGF0aW9ucyBpbiBv dGhlciBzdWJzeXN0ZW1zLgoKT25jZSB0aGVyZSBhcmUgbm8gdXNlcnMgb2YgdGhlIGttZW1jaGVj ayBoZWxwZXJzLCB3ZSBjYW4ga2lsbCBvZmYgdGhlIGR1bW15CmhlbHBlcnMgYXMgd2VsbCBpbiBh IGZpbmFsIHBhdGNoLgoKQ2M6IEluZ28gTW9sbmFyIDxtaW5nb0BrZXJuZWwub3JnPgpDYzogQW5k cmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZz4KQ2M6IFNhc2hhIExldmluIDxh bGV4YW5kZXIubGV2aW5AdmVyaXpvbi5jb20+CkNjOiBTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBn b29kbWlzLm9yZz4KU2lnbmVkLW9mZi1ieTogVmVnYXJkIE5vc3N1bSA8dmVnYXJkLm5vc3N1bUBv cmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBQZWtrYSBFbmJlcmcgPHBlbmJlcmdAa2VybmVsLm9y Zz4KLS0tCiBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCB8 ICAgNyAtCiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9pbmRleC5yc3QgICAgICAgICAgICAgICB8 ICAgMSAtCiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtY2hlY2sucnN0ICAgICAgICAgICB8 IDczMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDEwIC0KIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1p b21tdS5oICAgICAgICAgICAgICAgIHwgICAxIC0KIGFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20v ZG1hLW1hcHBpbmcuaCAgICAgICAgIHwgICAxIC0KIGFyY2gveDg2L0tjb25maWcgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBhcmNoL3g4Ni9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSAtCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEt bWFwcGluZy5oICAgICAgICAgICAgICB8ICAgMSAtCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWVt Y2hlY2suaCAgICAgICAgICAgICAgICB8ICA0MiAtLQogYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0 YWJsZV90eXBlcy5oICAgICAgICAgICAgfCAgIDggKy0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0 cmluZ18zMi5oICAgICAgICAgICAgICAgIHwgICA5IC0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0 cmluZ182NC5oICAgICAgICAgICAgICAgIHwgICA4IC0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL3hv ci5oICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCiBhcmNoL3g4Ni9rZXJuZWwvY3B1L2lu dGVsLmMgICAgICAgICAgICAgICAgICAgICB8ICAxNSAtCiBhcmNoL3g4Ni9rZXJuZWwvdHJhcHMu YyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSAtCiBhcmNoL3g4Ni9tbS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiAtCiBhcmNoL3g4Ni9tbS9mYXVsdC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiAtCiBhcmNoL3g4Ni9tbS9pbml0LmMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArLQogYXJjaC94ODYvbW0va21lbWNoZWNr L01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgIDEgLQogYXJjaC94ODYvbW0va21lbWNoZWNr L2Vycm9yLmMgICAgICAgICAgICAgICAgICAgfCAyMjcgLS0tLS0tLS0KIGFyY2gveDg2L21tL2tt ZW1jaGVjay9lcnJvci5oICAgICAgICAgICAgICAgICAgIHwgIDE1IC0KIGFyY2gveDg2L21tL2tt ZW1jaGVjay9rbWVtY2hlY2suYyAgICAgICAgICAgICAgIHwgNjU4IC0tLS0tLS0tLS0tLS0tLS0t LS0tLQogYXJjaC94ODYvbW0va21lbWNoZWNrL29wY29kZS5jICAgICAgICAgICAgICAgICAgfCAx MDYgLS0tLQogYXJjaC94ODYvbW0va21lbWNoZWNrL29wY29kZS5oICAgICAgICAgICAgICAgICAg fCAgIDkgLQogYXJjaC94ODYvbW0va21lbWNoZWNrL3B0ZS5jICAgICAgICAgICAgICAgICAgICAg fCAgMjIgLQogYXJjaC94ODYvbW0va21lbWNoZWNrL3B0ZS5oICAgICAgICAgICAgICAgICAgICAg fCAgMTAgLQogYXJjaC94ODYvbW0va21lbWNoZWNrL3NlbGZ0ZXN0LmMgICAgICAgICAgICAgICAg fCAgNzAgLS0tCiBhcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2VsZnRlc3QuaCAgICAgICAgICAgICAg ICB8ICAgNiAtCiBhcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMgICAgICAgICAgICAgICAg ICB8IDE3MyAtLS0tLS0KIGFyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuaCAgICAgICAgICAg ICAgICAgIHwgIDE4IC0KIGluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCAgICAgICAgICAgICAg ICAgICAgIHwgICA4ICstCiBpbmNsdWRlL2xpbnV4L2dmcC5oICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgMiAtCiBpbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oICAgICAgICAgICAgICAg ICAgICAgICB8ICA1OSAtLQogaW5jbHVkZS9saW51eC9tbV90eXBlcy5oICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDggLQogaW5jbHVkZS9saW51eC9zbGFiLmggICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMTIgKy0KIGluaXQvbWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAxIC0KIGtlcm5lbC9zeXNjdGwuYyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDEwIC0KIGxpYi9LY29uZmlnLmRlYnVnICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICA2ICstCiBsaWIvS2NvbmZpZy5rbWVtY2hlY2sgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICA5NCAtLS0KIG1tL0tjb25maWcuZGVidWcgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAxIC0KIG1tL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAyIC0KIG1tL2ttZW1jaGVjay5jICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgMTI1IC0tLS0KIG1tL3BhZ2VfYWxsb2MuYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDE0IC0KIG1tL3NsYWIuYyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDE0IC0KIG1tL3NsYWIuaCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAyIC0KIG1tL3NsdWIuYyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDI1ICstCiA0NyBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25z KCspLCAyNTQ3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24v ZGV2LXRvb2xzL2ttZW1jaGVjay5yc3QKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9pbmNs dWRlL2FzbS9rbWVtY2hlY2suaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L21tL2ttZW1j aGVjay9NYWtlZmlsZQogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L21tL2ttZW1jaGVjay9l cnJvci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvbW0va21lbWNoZWNrL2Vycm9yLmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKIGRl bGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9tbS9rbWVtY2hlY2svb3Bjb2RlLmMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBhcmNoL3g4Ni9tbS9rbWVtY2hlY2svb3Bjb2RlLmgKIGRlbGV0ZSBtb2RlIDEw MDY0NCBhcmNoL3g4Ni9tbS9rbWVtY2hlY2svcHRlLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNo L3g4Ni9tbS9rbWVtY2hlY2svcHRlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9tbS9r bWVtY2hlY2svc2VsZnRlc3QuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L21tL2ttZW1j aGVjay9zZWxmdGVzdC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvbW0va21lbWNoZWNr L3NoYWRvdy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRv dy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliL0tjb25maWcua21lbWNoZWNrCiBkZWxldGUgbW9k ZSAxMDA2NDQgbW0va21lbWNoZWNrLmMKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWlu LWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUv a2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGZhY2MyMGEzZjk2Mi4uYzNhMWE3ZWRmY2ZjIDEw MDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4 dAorKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApA QCAtMTc5MywxMyArMTc5Myw2IEBACiAJCQlCdWlsdCB3aXRoIENPTkZJR19ERUJVR19LTUVNTEVB S19ERUZBVUxUX09GRj15LAogCQkJdGhlIGRlZmF1bHQgaXMgb2ZmLgogCi0Ja21lbWNoZWNrPQlb WDg2XSBCb290LXRpbWUga21lbWNoZWNrIGVuYWJsZS9kaXNhYmxlL29uZS1zaG90IG1vZGUKLQkJ CVZhbGlkIGFyZ3VtZW50czogMCwgMSwgMgotCQkJa21lbWNoZWNrPTAgKGRpc2FibGVkKQotCQkJ a21lbWNoZWNrPTEgKGVuYWJsZWQpCi0JCQlrbWVtY2hlY2s9MiAob25lLXNob3QgbW9kZSkKLQkJ CURlZmF1bHQ6IDIgKG9uZS1zaG90IG1vZGUpCi0KIAlrdm0uaWdub3JlX21zcnM9W0tWTV0gSWdu b3JlIGd1ZXN0IGFjY2Vzc2VzIHRvIHVuaGFuZGxlZCBNU1JzLgogCQkJRGVmYXVsdCBpcyAwIChk b24ndCBpZ25vcmUsIGJ1dCBpbmplY3QgI0dQKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u L2Rldi10b29scy9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9pbmRleC5yc3QK aW5kZXggMDdkODgxMTQ3ZWYzLi4wMTk2ZmNmOGE3YTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRp b24vZGV2LXRvb2xzL2luZGV4LnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9pbmRl eC5yc3QKQEAgLTIxLDcgKzIxLDYgQEAgd2hvbGU7IHBhdGNoZXMgd2VsY29tZSEKICAgIGthc2Fu CiAgICB1YnNhbgogICAga21lbWxlYWsKLSAgIGttZW1jaGVjawogICAgZ2RiLWtlcm5lbC1kZWJ1 Z2dpbmcKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtY2hlY2su cnN0IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWNoZWNrLnJzdApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggN2YzZDE5ODVkZTc0Li4wMDAwMDAwMDAwMDAKLS0tIGEvRG9jdW1l bnRhdGlvbi9kZXYtdG9vbHMva21lbWNoZWNrLnJzdAorKysgL2Rldi9udWxsCkBAIC0xLDczMyAr MCwwIEBACi1HZXR0aW5nIHN0YXJ0ZWQgd2l0aCBrbWVtY2hlY2sKLT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotCi1WZWdhcmQgTm9zc3VtIDx2ZWdhcmRub0BpZmkudWlvLm5vPgotCi0K LUludHJvZHVjdGlvbgotLS0tLS0tLS0tLS0tCi0KLWttZW1jaGVjayBpcyBhIGRlYnVnZ2luZyBm ZWF0dXJlIGZvciB0aGUgTGludXggS2VybmVsLiBNb3JlIHNwZWNpZmljYWxseSwgaXQKLWlzIGEg ZHluYW1pYyBjaGVja2VyIHRoYXQgZGV0ZWN0cyBhbmQgd2FybnMgYWJvdXQgc29tZSB1c2VzIG9m IHVuaW5pdGlhbGl6ZWQKLW1lbW9yeS4KLQotVXNlcnNwYWNlIHByb2dyYW1tZXJzIG1pZ2h0IGJl IGZhbWlsaWFyIHdpdGggVmFsZ3JpbmQncyBtZW1jaGVjay4gVGhlIG1haW4KLWRpZmZlcmVuY2Ug YmV0d2VlbiBtZW1jaGVjayBhbmQga21lbWNoZWNrIGlzIHRoYXQgbWVtY2hlY2sgd29ya3MgZm9y IHVzZXJzcGFjZQotcHJvZ3JhbXMgb25seSwgYW5kIGttZW1jaGVjayB3b3JrcyBmb3IgdGhlIGtl cm5lbCBvbmx5LiBUaGUgaW1wbGVtZW50YXRpb25zCi1hcmUgb2YgY291cnNlIHZhc3RseSBkaWZm ZXJlbnQuIEJlY2F1c2Ugb2YgdGhpcywga21lbWNoZWNrIGlzIG5vdCBhcyBhY2N1cmF0ZQotYXMg bWVtY2hlY2ssIGJ1dCBpdCB0dXJucyBvdXQgdG8gYmUgZ29vZCBlbm91Z2ggaW4gcHJhY3RpY2Ug dG8gZGlzY292ZXIgcmVhbAotcHJvZ3JhbW1lciBlcnJvcnMgdGhhdCB0aGUgY29tcGlsZXIgaXMg bm90IGFibGUgdG8gZmluZCB0aHJvdWdoIHN0YXRpYwotYW5hbHlzaXMuCi0KLUVuYWJsaW5nIGtt ZW1jaGVjayBvbiBhIGtlcm5lbCB3aWxsIHByb2JhYmx5IHNsb3cgaXQgZG93biB0byB0aGUgZXh0 ZW50IHRoYXQKLXRoZSBtYWNoaW5lIHdpbGwgbm90IGJlIHVzYWJsZSBmb3Igbm9ybWFsIHdvcmts b2FkcyBzdWNoIGFzIGUuZy4gYW4KLWludGVyYWN0aXZlIGRlc2t0b3AuIGttZW1jaGVjayB3aWxs IGFsc28gY2F1c2UgdGhlIGtlcm5lbCB0byB1c2UgYWJvdXQgdHdpY2UKLWFzIG11Y2ggbWVtb3J5 IGFzIG5vcm1hbC4gRm9yIHRoaXMgcmVhc29uLCBrbWVtY2hlY2sgaXMgc3RyaWN0bHkgYSBkZWJ1 Z2dpbmcKLWZlYXR1cmUuCi0KLQotRG93bmxvYWRpbmcKLS0tLS0tLS0tLS0tCi0KLUFzIG9mIHZl cnNpb24gMi42LjMxLXJjMSwga21lbWNoZWNrIGlzIGluY2x1ZGVkIGluIHRoZSBtYWlubGluZSBr ZXJuZWwuCi0KLQotQ29uZmlndXJpbmcgYW5kIGNvbXBpbGluZwotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotCi1rbWVtY2hlY2sgb25seSB3b3JrcyBmb3IgdGhlIHg4NiAoYm90aCAzMi0gYW5k IDY0LWJpdCkgcGxhdGZvcm0uIEEgbnVtYmVyIG9mCi1jb25maWd1cmF0aW9uIHZhcmlhYmxlcyBt dXN0IGhhdmUgc3BlY2lmaWMgc2V0dGluZ3MgaW4gb3JkZXIgZm9yIHRoZSBrbWVtY2hlY2sKLW1l bnUgdG8gZXZlbiBhcHBlYXIgaW4gIm1lbnVjb25maWciLiBUaGVzZSBhcmU6Ci0KLS0gYGBDT05G SUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9bmBgCi0JVGhpcyBvcHRpb24gaXMgbG9jYXRlZCB1bmRl ciAiR2VuZXJhbCBzZXR1cCIgLyAiT3B0aW1pemUgZm9yIHNpemUiLgotCi0JV2l0aG91dCB0aGlz LCBnY2Mgd2lsbCB1c2UgY2VydGFpbiBvcHRpbWl6YXRpb25zIHRoYXQgdXN1YWxseSBsZWFkIHRv Ci0JZmFsc2UgcG9zaXRpdmUgd2FybmluZ3MgZnJvbSBrbWVtY2hlY2suIEFuIGV4YW1wbGUgb2Yg dGhpcyBpcyBhIDE2LWJpdAotCWZpZWxkIGluIGEgc3RydWN0LCB3aGVyZSBnY2MgbWF5IGxvYWQg MzIgYml0cywgdGhlbiBkaXNjYXJkIHRoZSB1cHBlcgotCTE2IGJpdHMuIGttZW1jaGVjayBzZWVz IG9ubHkgdGhlIDMyLWJpdCBsb2FkLCBhbmQgbWF5IHRyaWdnZXIgYQotCXdhcm5pbmcgZm9yIHRo ZSB1cHBlciAxNiBiaXRzIChpZiB0aGV5J3JlIHVuaW5pdGlhbGl6ZWQpLgotCi0tIGBgQ09ORklH X1NMQUI9eWBgIG9yIGBgQ09ORklHX1NMVUI9eWBgCi0JVGhpcyBvcHRpb24gaXMgbG9jYXRlZCB1 bmRlciAiR2VuZXJhbCBzZXR1cCIgLyAiQ2hvb3NlIFNMQUIKLQlhbGxvY2F0b3IiLgotCi0tIGBg Q09ORklHX0ZVTkNUSU9OX1RSQUNFUj1uYGAKLQlUaGlzIG9wdGlvbiBpcyBsb2NhdGVkIHVuZGVy ICJLZXJuZWwgaGFja2luZyIgLyAiVHJhY2VycyIgLyAiS2VybmVsCi0JRnVuY3Rpb24gVHJhY2Vy IgotCi0JV2hlbiBmdW5jdGlvbiB0cmFjaW5nIGlzIGNvbXBpbGVkIGluLCBnY2MgZW1pdHMgYSBj YWxsIHRvIGFub3RoZXIKLQlmdW5jdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGZ1bmN0 aW9uLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB0aGUKLQlwYWdlIGZhdWx0IGhhbmRsZXIgaXMgY2Fs bGVkLCB0aGUgZnRyYWNlIGZyYW1ld29yayB3aWxsIGJlIGNhbGxlZAotCWJlZm9yZSBrbWVtY2hl Y2sgaGFzIGhhZCBhIGNoYW5jZSB0byBoYW5kbGUgdGhlIGZhdWx0LiBJZiBmdHJhY2UgdGhlbgot CW1vZGlmaWVzIG1lbW9yeSB0aGF0IHdhcyB0cmFja2VkIGJ5IGttZW1jaGVjaywgdGhlIHJlc3Vs dCBpcyBhbgotCWVuZGxlc3MgcmVjdXJzaXZlIHBhZ2UgZmF1bHQuCi0KLS0gYGBDT05GSUdfREVC VUdfUEFHRUFMTE9DPW5gYAotCVRoaXMgb3B0aW9uIGlzIGxvY2F0ZWQgdW5kZXIgIktlcm5lbCBo YWNraW5nIiAvICJNZW1vcnkgRGVidWdnaW5nIgotCS8gIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9j YXRpb25zIi4KLQotSW4gYWRkaXRpb24sIEkgaGlnaGx5IHJlY29tbWVuZCB0dXJuaW5nIG9uIGBg Q09ORklHX0RFQlVHX0lORk89eWBgLiBUaGlzIGlzIGFsc28KLWxvY2F0ZWQgdW5kZXIgIktlcm5l bCBoYWNraW5nIi4gV2l0aCB0aGlzLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGdldCBsaW5lIG51bWJl cgotaW5mb3JtYXRpb24gZnJvbSB0aGUga21lbWNoZWNrIHdhcm5pbmdzLCB3aGljaCBpcyBleHRy ZW1lbHkgdmFsdWFibGUgaW4KLWRlYnVnZ2luZyBhIHByb2JsZW0uIFRoaXMgb3B0aW9uIGlzIG5v dCBtYW5kYXRvcnksIGhvd2V2ZXIsIGJlY2F1c2UgaXQgc2xvd3MKLWRvd24gdGhlIGNvbXBpbGF0 aW9uIHByb2Nlc3MgYW5kIHByb2R1Y2VzIGEgbXVjaCBiaWdnZXIga2VybmVsIGltYWdlLgotCi1O b3cgdGhlIGttZW1jaGVjayBtZW51IHNob3VsZCBiZSB2aXNpYmxlICh1bmRlciAiS2VybmVsIGhh Y2tpbmciIC8gIk1lbW9yeQotRGVidWdnaW5nIiAvICJrbWVtY2hlY2s6IHRyYXAgdXNlIG9mIHVu aW5pdGlhbGl6ZWQgbWVtb3J5IikuIEhlcmUgZm9sbG93cwotYSBkZXNjcmlwdGlvbiBvZiB0aGUg a21lbWNoZWNrIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOgotCi0tIGBgQ09ORklHX0tNRU1DSEVD S2BgCi0JVGhpcyBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIGttZW1jaGVjayBhdCBh bGwuLi4KLQotLSBgYENPTkZJR19LTUVNQ0hFQ0tfYGBbYGBESVNBQkxFRGBgIHwgYGBFTkFCTEVE YGAgfCBgYE9ORVNIT1RgYF1gYF9CWV9ERUZBVUxUYGAKLQlUaGlzIG9wdGlvbiBjb250cm9scyB0 aGUgc3RhdHVzIG9mIGttZW1jaGVjayBhdCBib290LXRpbWUuICJFbmFibGVkIgotCXdpbGwgZW5h YmxlIGttZW1jaGVjayByaWdodCBmcm9tIHRoZSBzdGFydCwgImRpc2FibGVkIiB3aWxsIGJvb3Qg dGhlCi0Ja2VybmVsIGFzIG5vcm1hbCAoYnV0IHdpdGggdGhlIGttZW1jaGVjayBjb2RlIGNvbXBp bGVkIGluLCBzbyBpdCBjYW4KLQliZSBlbmFibGVkIGF0IHJ1bi10aW1lIGFmdGVyIHRoZSBrZXJu ZWwgaGFzIGJvb3RlZCksIGFuZCAib25lLXNob3QiIGlzCi0JYSBzcGVjaWFsIG1vZGUgd2hpY2gg d2lsbCB0dXJuIGttZW1jaGVjayBvZmYgYXV0b21hdGljYWxseSBhZnRlcgotCWRldGVjdGluZyB0 aGUgZmlyc3QgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgotCi0JSWYgeW91IGFyZSB1c2lu ZyBrbWVtY2hlY2sgdG8gYWN0aXZlbHkgZGVidWcgYSBwcm9ibGVtLCB0aGVuIHlvdQotCXByb2Jh Ymx5IHdhbnQgdG8gY2hvb3NlICJlbmFibGVkIiBoZXJlLgotCi0JVGhlIG9uZS1zaG90IG1vZGUg aXMgbW9zdGx5IHVzZWZ1bCBpbiBhdXRvbWF0ZWQgdGVzdCBzZXR1cHMgYmVjYXVzZSBpdAotCWNh biBwcmV2ZW50IGZsb29kcyBvZiB3YXJuaW5ncyBhbmQgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2Yg dGhlIG1hY2hpbmUKLQlzdXJ2aXZpbmcgaW4gY2FzZSBzb21ldGhpbmcgaXMgcmVhbGx5IHdyb25n LiBJbiBvdGhlciBjYXNlcywgdGhlIG9uZS0KLQlzaG90IG1vZGUgY291bGQgYWN0dWFsbHkgYmUg Y291bnRlci1wcm9kdWN0aXZlIGJlY2F1c2UgaXQgd291bGQgdHVybgotCWl0c2VsZiBvZmYgYXQg dGhlIHZlcnkgZmlyc3QgZXJyb3IgLS0gaW4gdGhlIGNhc2Ugb2YgYSBmYWxzZSBwb3NpdGl2ZQot CXRvbyAtLSBhbmQgdGhpcyB3b3VsZCBjb21lIGluIHRoZSB3YXkgb2YgZGVidWdnaW5nIHRoZSBz cGVjaWZpYwotCXByb2JsZW0geW91IHdlcmUgaW50ZXJlc3RlZCBpbi4KLQotCUlmIHlvdSB3b3Vs ZCBsaWtlIHRvIHVzZSB5b3VyIGtlcm5lbCBhcyBub3JtYWwsIGJ1dCB3aXRoIGEgY2hhbmNlIHRv Ci0JZW5hYmxlIGttZW1jaGVjayBpbiBjYXNlIG9mIHNvbWUgcHJvYmxlbSwgaXQgbWlnaHQgYmUg YSBnb29kIGlkZWEgdG8KLQljaG9vc2UgImRpc2FibGVkIiBoZXJlLiBXaGVuIGttZW1jaGVjayBp cyBkaXNhYmxlZCwgbW9zdCBvZiB0aGUgcnVuLQotCXRpbWUgb3ZlcmhlYWQgaXMgbm90IGluY3Vy cmVkLCBhbmQgdGhlIGtlcm5lbCB3aWxsIGJlIGFsbW9zdCBhcyBmYXN0Ci0JYXMgbm9ybWFsLgot Ci0tIGBgQ09ORklHX0tNRU1DSEVDS19RVUVVRV9TSVpFYGAKLQlTZWxlY3QgdGhlIG1heGltdW0g bnVtYmVyIG9mIGVycm9yIHJlcG9ydHMgdG8gc3RvcmUgaW4gYW4gaW50ZXJuYWwKLQkoZml4ZWQt c2l6ZSkgYnVmZmVyLiBTaW5jZSBlcnJvcnMgY2FuIG9jY3VyIHZpcnR1YWxseSBhbnl3aGVyZSBh bmQgaW4KLQlhbnkgY29udGV4dCwgd2UgbmVlZCBhIHRlbXBvcmFyeSBzdG9yYWdlIGFyZWEgd2hp Y2ggaXMgZ3VhcmFudGVlZCBub3QKLQl0byBnZW5lcmF0ZSBhbnkgb3RoZXIgcGFnZSBmYXVsdHMg d2hlbiBhY2Nlc3NlZC4gVGhlIHF1ZXVlIHdpbGwgYmUKLQllbXB0aWVkIGFzIHNvb24gYXMgYSB0 YXNrbGV0IG1heSBiZSBzY2hlZHVsZWQuIElmIHRoZSBxdWV1ZSBpcyBmdWxsLAotCW5ldyBlcnJv ciByZXBvcnRzIHdpbGwgYmUgbG9zdC4KLQotCVRoZSBkZWZhdWx0IHZhbHVlIG9mIDY0IGlzIHBy b2JhYmx5IGZpbmUuIElmIHNvbWUgY29kZSBwcm9kdWNlcyBtb3JlCi0JdGhhbiA2NCBlcnJvcnMg d2l0aGluIGFuIGlycXMtb2ZmIHNlY3Rpb24sIHRoZW4gdGhlIGNvZGUgaXMgbGlrZWx5IHRvCi0J cHJvZHVjZSBtYW55LCBtYW55IG1vcmUsIHRvbywgYW5kIHRoZXNlIGFkZGl0aW9uYWwgcmVwb3J0 cyBzZWxkb20gZ2l2ZQotCWFueSBtb3JlIGluZm9ybWF0aW9uICh0aGUgZmlyc3QgcmVwb3J0IGlz IHVzdWFsbHkgdGhlIG1vc3QgdmFsdWFibGUKLQlhbnl3YXkpLgotCi0JVGhpcyBudW1iZXIgbWln aHQgaGF2ZSB0byBiZSBhZGp1c3RlZCBpZiB5b3UgYXJlIG5vdCB1c2luZyBzZXJpYWwKLQljb25z b2xlIG9yIHNpbWlsYXIgdG8gY2FwdHVyZSB0aGUga2VybmVsIGxvZy4gSWYgeW91IGFyZSB1c2lu ZyB0aGUKLQkiZG1lc2ciIGNvbW1hbmQgdG8gc2F2ZSB0aGUgbG9nLCB0aGVuIGdldHRpbmcgYSBs b3Qgb2Yga21lbWNoZWNrCi0Jd2FybmluZ3MgbWlnaHQgb3ZlcmZsb3cgdGhlIGtlcm5lbCBsb2cg aXRzZWxmLCBhbmQgdGhlIGVhcmxpZXIgcmVwb3J0cwotCXdpbGwgZ2V0IGxvc3QgaW4gdGhhdCB3 YXkgaW5zdGVhZC4gVHJ5IHNldHRpbmcgdGhpcyB0byAxMCBvciBzbyBvbgotCXN1Y2ggYSBzZXR1 cC4KLQotLSBgYENPTkZJR19LTUVNQ0hFQ0tfU0hBRE9XX0NPUFlfU0hJRlRgYAotCVNlbGVjdCB0 aGUgbnVtYmVyIG9mIHNoYWRvdyBieXRlcyB0byBzYXZlIGFsb25nIHdpdGggZWFjaCBlbnRyeSBv ZiB0aGUKLQllcnJvci1yZXBvcnQgcXVldWUuIFRoZXNlIGJ5dGVzIGluZGljYXRlIHdoYXQgcGFy dHMgb2YgYW4gYWxsb2NhdGlvbgotCWFyZSBpbml0aWFsaXplZCwgdW5pbml0aWFsaXplZCwgZXRj LiBhbmQgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiBhbgotCWVycm9yIGlzIGRldGVjdGVkIHRvIGhl bHAgdGhlIGRlYnVnZ2luZyBvZiBhIHBhcnRpY3VsYXIgcHJvYmxlbS4KLQotCVRoZSBudW1iZXIg ZW50ZXJlZCBoZXJlIGlzIGFjdHVhbGx5IHRoZSBsb2dhcml0aG0gb2YgdGhlIG51bWJlciBvZgot CWJ5dGVzIHRoYXQgd2lsbCBiZSBzYXZlZC4gU28gaWYgeW91IHBpY2sgZm9yIGV4YW1wbGUgNSBo ZXJlLCBrbWVtY2hlY2sKLQl3aWxsIHNhdmUgMl41ID0gMzIgYnl0ZXMuCi0KLQlUaGUgZGVmYXVs dCB2YWx1ZSBzaG91bGQgYmUgZmluZSBmb3IgZGVidWdnaW5nIG1vc3QgcHJvYmxlbXMuIEl0IGFs c28KLQlmaXRzIG5pY2VseSB3aXRoaW4gODAgY29sdW1ucy4KLQotLSBgYENPTkZJR19LTUVNQ0hF Q0tfUEFSVElBTF9PS2BgCi0JVGhpcyBvcHRpb24gKHdoZW4gZW5hYmxlZCkgd29ya3MgYXJvdW5k IGNlcnRhaW4gR0NDIG9wdGltaXphdGlvbnMgdGhhdAotCXByb2R1Y2UgMzItYml0IHJlYWRzIGZy b20gMTYtYml0IHZhcmlhYmxlcyB3aGVyZSB0aGUgdXBwZXIgMTYgYml0cyBhcmUKLQl0aHJvd24g YXdheSBhZnRlcndhcmRzLgotCi0JVGhlIGRlZmF1bHQgdmFsdWUgKGVuYWJsZWQpIGlzIHJlY29t bWVuZGVkLiBUaGlzIG1heSBvZiBjb3Vyc2UgaGlkZQotCXNvbWUgcmVhbCBlcnJvcnMsIGJ1dCBk aXNhYmxpbmcgaXQgd291bGQgcHJvYmFibHkgcHJvZHVjZSBhIGxvdCBvZgotCWZhbHNlIHBvc2l0 aXZlcy4KLQotLSBgYENPTkZJR19LTUVNQ0hFQ0tfQklUT1BTX09LYGAKLQlUaGlzIG9wdGlvbiBz aWxlbmNlcyB3YXJuaW5ncyB0aGF0IHdvdWxkIGJlIGdlbmVyYXRlZCBmb3IgYml0LWZpZWxkCi0J YWNjZXNzZXMgd2hlcmUgbm90IGFsbCB0aGUgYml0cyBhcmUgaW5pdGlhbGl6ZWQgYXQgdGhlIHNh bWUgdGltZS4gVGhpcwotCW1heSBhbHNvIGhpZGUgc29tZSByZWFsIGJ1Z3MuCi0KLQlUaGlzIG9w dGlvbiBpcyBwcm9iYWJseSBvYnNvbGV0ZSwgb3IgaXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGgK LQl0aGUga21lbWNoZWNrLS9iaXRmaWVsZC1hbm5vdGF0aW9ucyBmb3IgdGhlIGNvZGUgaW4gcXVl c3Rpb24uIFRoZQotCWRlZmF1bHQgdmFsdWUgaXMgdGhlcmVmb3JlIGZpbmUuCi0KLU5vdyBjb21w aWxlIHRoZSBrZXJuZWwgYXMgdXN1YWwuCi0KLQotSG93IHRvIHVzZQotLS0tLS0tLS0tLQotCi1C b290aW5nCi1+fn5+fn5+Ci0KLUZpcnN0IHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbW1h bmQtbGluZSBvcHRpb25zLiBUaGVyZSBpcyBvbmx5IG9uZQotb3B0aW9uIHNwZWNpZmljIHRvIGtt ZW1jaGVjaywgYW5kIHRoaXMgaXMgY2FsbGVkICJrbWVtY2hlY2siLiBJdCBjYW4gYmUgdXNlZAot dG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kZSBhcyBjaG9zZW4gYnkgdGhlIGBgQ09ORklHX0tN RU1DSEVDS18qX0JZX0RFRkFVTFRgYAotb3B0aW9uLiBJdHMgcG9zc2libGUgc2V0dGluZ3MgYXJl OgotCi0tIGBga21lbWNoZWNrPTBgYCAoZGlzYWJsZWQpCi0tIGBga21lbWNoZWNrPTFgYCAoZW5h YmxlZCkKLS0gYGBrbWVtY2hlY2s9MmBgIChvbmUtc2hvdCBtb2RlKQotCi1JZiBTTFVCIGRlYnVn Z2luZyBoYXMgYmVlbiBlbmFibGVkIGluIHRoZSBrZXJuZWwsIGl0IG1heSB0YWtlIHByZWNlZGVu Y2Ugb3Zlcgota21lbWNoZWNrIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgc2xhYiBjYWNoZXMgd2hp Y2ggYXJlIHVuZGVyIFNMVUIgZGVidWdnaW5nCi13aWxsIG5vdCBiZSB0cmFja2VkIGJ5IGttZW1j aGVjay4gSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IGhhcHBlbgotKGV2ZW4g dGhvdWdoIGl0IHNob3VsZG4ndCBieSBkZWZhdWx0KSwgdXNlIFNMVUIncyBib290IG9wdGlvbiBg YHNsdWJfZGVidWdgYCwKLWxpa2UgdGhpczogYGBzbHViX2RlYnVnPS1gYAotCi1JbiBmYWN0LCB0 aGlzIG9wdGlvbiBtYXkgYWxzbyBiZSB1c2VkIGZvciBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVy IFNMVUIgdnMuCi1rbWVtY2hlY2suIEZvciBleGFtcGxlLCBpZiB0aGUgY29tbWFuZCBsaW5lIGlu Y2x1ZGVzCi1gYGttZW1jaGVjaz0xIHNsdWJfZGVidWc9LGRlbnRyeWBgLCB0aGVuIFNMVUIgZGVi dWdnaW5nIHdpbGwgYmUgdXNlZCBvbmx5Ci1mb3IgdGhlICJkZW50cnkiIHNsYWIgY2FjaGUsIGFu ZCB3aXRoIGttZW1jaGVjayB0cmFja2luZyBhbGwgdGhlIG90aGVyCi1jYWNoZXMuIFRoaXMgaXMg YWR2YW5jZWQgdXNhZ2UsIGhvd2V2ZXIsIGFuZCBpcyBub3QgZ2VuZXJhbGx5IHJlY29tbWVuZGVk LgotCi0KLVJ1bi10aW1lIGVuYWJsZS9kaXNhYmxlCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgot Ci1XaGVuIHRoZSBrZXJuZWwgaGFzIGJvb3RlZCwgaXQgaXMgcG9zc2libGUgdG8gZW5hYmxlIG9y IGRpc2FibGUga21lbWNoZWNrIGF0Ci1ydW4tdGltZS4gV0FSTklORzogVGhpcyBmZWF0dXJlIGlz IHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNhdXNlIGZhbHNlCi1wb3NpdGl2ZSB3YXJuaW5n cyB0byBhcHBlYXIuIFRoZXJlZm9yZSwgdHJ5IG5vdCB0byB1c2UgdGhpcy4gSWYgeW91IGZpbmQg dGhhdAotaXQgZG9lc24ndCB3b3JrIHByb3Blcmx5IChlLmcuIHlvdSBzZWUgYW4gdW5yZWFzb25h YmxlIGFtb3VudCBvZiB3YXJuaW5ncyksIEkKLXdpbGwgYmUgaGFwcHkgdG8gdGFrZSBidWcgcmVw b3J0cy4KLQotVXNlIHRoZSBmaWxlIGBgL3Byb2Mvc3lzL2tlcm5lbC9rbWVtY2hlY2tgYCBmb3Ig dGhpcyBwdXJwb3NlLCBlLmcuOjoKLQotCSQgZWNobyAwID4gL3Byb2Mvc3lzL2tlcm5lbC9rbWVt Y2hlY2sgIyBkaXNhYmxlcyBrbWVtY2hlY2sKLQotVGhlIG51bWJlcnMgYXJlIHRoZSBzYW1lIGFz IGZvciB0aGUgYGBrbWVtY2hlY2s9YGAgY29tbWFuZC1saW5lIG9wdGlvbi4KLQotCi1EZWJ1Z2dp bmcKLX5+fn5+fn5+fgotCi1BIHR5cGljYWwgcmVwb3J0IHdpbGwgbG9vayBzb21ldGhpbmcgbGlr ZSB0aGlzOjoKLQotICAgIFdBUk5JTkc6IGttZW1jaGVjazogQ2F1Z2h0IDMyLWJpdCByZWFkIGZy b20gdW5pbml0aWFsaXplZCBtZW1vcnkgKGZmZmY4ODAwM2U0YTIwMjQpCi0gICAgODAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODhmZmZmMDAwMDAwMDAwMDAwMDAwMAot ICAgICBpIGkgaSBpIHUgdSB1IHUgaSBpIGkgaSBpIGkgaSBpIHUgdSB1IHUgdSB1IHUgdSB1IHUg dSB1IHUgdSB1IHUKLSAgICAgICAgICAgICBeCi0KLSAgICBQaWQ6IDE4NTYsIGNvbW06IG50cGRh dGUgTm90IHRhaW50ZWQgMi42LjI5LXJjNSAjMjY0IDk0NVAtQQotICAgIFJJUDogMDAxMDpbPGZm ZmZmZmZmODEwNGVkZTg+XSAgWzxmZmZmZmZmZjgxMDRlZGU4Pl0gX19kZXF1ZXVlX3NpZ25hbCsw eGM4LzB4MTkwCi0gICAgUlNQOiAwMDE4OmZmZmY4ODAwM2NkZjdkOTggIEVGTEFHUzogMDAyMTAw MDIKLSAgICBSQVg6IDAwMDAwMDAwMDAwMDAwMzAgUkJYOiBmZmZmODgwMDNkNGVhOTY4IFJDWDog MDAwMDAwMDAwMDAwMDAwOQotICAgIFJEWDogZmZmZjg4MDAzZTVkNjAxOCBSU0k6IGZmZmY4ODAw M2U1ZDYwMjQgUkRJOiBmZmZmODgwMDNjZGY3ZTg0Ci0gICAgUkJQOiBmZmZmODgwMDNjZGY3ZGI4 IFIwODogZmZmZjg4MDAzZTVkNjAwMCBSMDk6IDAwMDAwMDAwMDAwMDAwMDAKLSAgICBSMTA6IDAw MDAwMDAwMDAwMDAwODAgUjExOiAwMDAwMDAwMDAwMDAwMDAwIFIxMjogMDAwMDAwMDAwMDAwMDAw ZQotICAgIFIxMzogZmZmZjg4MDAzY2RmN2U3OCBSMTQ6IGZmZmY4ODAwM2Q1MzA3MTAgUjE1OiBm ZmZmODgwMDNkNWE5OGM4Ci0gICAgRlM6ICAwMDAwMDAwMDAwMDAwMDAwKDAwMDApIEdTOmZmZmY4 ODAwMDE5ODIwMDAoMDA2Mykga25sR1M6MDAwMDAKLSAgICBDUzogIDAwMTAgRFM6IDAwMmIgRVM6 IDAwMmIgQ1IwOiAwMDAwMDAwMDgwMDUwMDMzCi0gICAgQ1IyOiBmZmZmODgwMDNmODA2ZWEwIENS MzogMDAwMDAwMDAzYzAzNjAwMCBDUjQ6IDAwMDAwMDAwMDAwMDA2YTAKLSAgICBEUjA6IDAwMDAw MDAwMDAwMDAwMDAgRFIxOiAwMDAwMDAwMDAwMDAwMDAwIERSMjogMDAwMDAwMDAwMDAwMDAwMAot ICAgIERSMzogMDAwMDAwMDAwMDAwMDAwMCBEUjY6IDAwMDAwMDAwZmZmZjRmZjAgRFI3OiAwMDAw MDAwMDAwMDAwNDAwCi0gICAgIFs8ZmZmZmZmZmY4MTA0ZjA0ZT5dIGRlcXVldWVfc2lnbmFsKzB4 OGUvMHgxNzAKLSAgICAgWzxmZmZmZmZmZjgxMDUwYmQ4Pl0gZ2V0X3NpZ25hbF90b19kZWxpdmVy KzB4OTgvMHgzOTAKLSAgICAgWzxmZmZmZmZmZjgxMDBiODdkPl0gZG9fbm90aWZ5X3Jlc3VtZSsw eGFkLzB4N2QwCi0gICAgIFs8ZmZmZmZmZmY4MTAwYzdiNT5dIGludF9zaWduYWwrMHgxMi8weDE3 Ci0gICAgIFs8ZmZmZmZmZmZmZmZmZmZmZj5dIDB4ZmZmZmZmZmZmZmZmZmZmZgotCi1UaGUgc2lu Z2xlIG1vc3QgdmFsdWFibGUgaW5mb3JtYXRpb24gaW4gdGhpcyByZXBvcnQgaXMgdGhlIFJJUCAo b3IgRUlQIG9uIDMyLQotYml0KSB2YWx1ZS4gVGhpcyB3aWxsIGhlbHAgdXMgcGlucG9pbnQgZXhh Y3RseSB3aGljaCBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlZAotdGhlIHdhcm5pbmcuCi0KLUlmIHlv dXIga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIGBgQ09ORklHX0RFQlVHX0lORk89eWBgLCB0aGVu IGFsbCB3ZSBoYXZlIHRvIGRvCi1pcyBnaXZlIHRoaXMgYWRkcmVzcyB0byB0aGUgYWRkcjJsaW5l IHByb2dyYW0sIGxpa2UgdGhpczo6Ci0KLQkkIGFkZHIybGluZSAtZSB2bWxpbnV4IC1pIGZmZmZm ZmZmODEwNGVkZTgKLQlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxMgotCWluY2x1 ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oOjI4NwotCWtlcm5lbC9zaWduYWwuYzozODAKLQlrZXJu ZWwvc2lnbmFsLmM6NDEwCi0KLVRoZSAiYGAtZSB2bWxpbnV4YGAiIHRlbGxzIGFkZHIybGluZSB3 aGljaCBmaWxlIHRvIGxvb2sgaW4uICoqSU1QT1JUQU5UOioqCi1UaGlzIG11c3QgYmUgdGhlIHZt bGludXggb2YgdGhlIGtlcm5lbCB0aGF0IHByb2R1Y2VkIHRoZSB3YXJuaW5nIGluIHRoZQotZmly c3QgcGxhY2UhIElmIG5vdCwgdGhlIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIHdpbGwgYWxtb3N0 IGNlcnRhaW5seSBiZQotd3JvbmcuCi0KLVRoZSAiYGAtaWBgIiB0ZWxscyBhZGRyMmxpbmUgdG8g YWxzbyBwcmludCB0aGUgbGluZSBudW1iZXJzIG9mIGlubGluZWQKLWZ1bmN0aW9ucy4gIEluIHRo aXMgY2FzZSwgdGhlIGZsYWcgd2FzIHZlcnkgaW1wb3J0YW50LCBiZWNhdXNlIG90aGVyd2lzZSwK LWl0IHdvdWxkIG9ubHkgaGF2ZSBwcmludGVkIHRoZSBmaXJzdCBsaW5lLCB3aGljaCBpcyBqdXN0 IGEgY2FsbCB0bwotYGBtZW1jcHkoKWBgLCB3aGljaCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBhIHRo b3VzYW5kIHBsYWNlcyBpbiB0aGUga2VybmVsLCBhbmQKLWlzIHRoZXJlZm9yZSBub3QgdmVyeSB1 c2VmdWwuICBUaGVzZSBpbmxpbmVkIGZ1bmN0aW9ucyB3b3VsZCBub3Qgc2hvdyB1cCBpbgotdGhl IHN0YWNrIHRyYWNlIGFib3ZlLCBzaW1wbHkgYmVjYXVzZSB0aGUga2VybmVsIGRvZXNuJ3QgbG9h ZCB0aGUgZXh0cmEKLWRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gVGhpcyB0ZWNobmlxdWUgY2FuIG9m IGNvdXJzZSBiZSB1c2VkIHdpdGggb3JkaW5hcnkKLWtlcm5lbCBvb3BzZXMgYXMgd2VsbC4KLQot SW4gdGhpcyBjYXNlLCBpdCdzIHRoZSBjYWxsZXIgb2YgYGBtZW1jcHkoKWBgIHRoYXQgaXMgaW50 ZXJlc3RpbmcsIGFuZCBpdCBjYW4gYmUKLWZvdW5kIGluIGBgaW5jbHVkZS9hc20tZ2VuZXJpYy9z aWdpbmZvLmhgYCwgbGluZSAyODc6OgotCi0gICAgMjgxIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5 X3NpZ2luZm8oc3RydWN0IHNpZ2luZm8gKnRvLCBzdHJ1Y3Qgc2lnaW5mbyAqZnJvbSkKLSAgICAy ODIgewotICAgIDI4MyAgICAgICAgIGlmIChmcm9tLT5zaV9jb2RlIDwgMCkKLSAgICAyODQgICAg ICAgICAgICAgICAgIG1lbWNweSh0bywgZnJvbSwgc2l6ZW9mKCp0bykpOwotICAgIDI4NSAgICAg ICAgIGVsc2UKLSAgICAyODYgICAgICAgICAgICAgICAgIC8qIF9zaWdjaGxkIGlzIGN1cnJlbnRs eSB0aGUgbGFyZ2VzdCBrbm93IHVuaW9uIG1lbWJlciAqLwotICAgIDI4NyAgICAgICAgICAgICAg ICAgbWVtY3B5KHRvLCBmcm9tLCBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSArIHNpemVvZihmcm9t LT5fc2lmaWVsZHMuX3NpZ2NobGQpKTsKLSAgICAyODggfQotCi1TaW5jZSB0aGlzIHdhcyBhIHJl YWQgKGttZW1jaGVjayB1c3VhbGx5IHdhcm5zIGFib3V0IHJlYWRzIG9ubHksIHRob3VnaCBpdCBj YW4KLXdhcm4gYWJvdXQgd3JpdGVzIHRvIHVuYWxsb2NhdGVkIG9yIGZyZWVkIG1lbW9yeSBhcyB3 ZWxsKSwgaXQgd2FzIHByb2JhYmx5IHRoZQotImZyb20iIGFyZ3VtZW50IHdoaWNoIGNvbnRhaW5l ZCBzb21lIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEZvbGxvd2luZyB0aGUgY2hhaW4KLW9mIGNhbGxz LCB3ZSBtb3ZlIHVwd2FyZHMgdG8gc2VlIHdoZXJlICJmcm9tIiB3YXMgYWxsb2NhdGVkIG9yIGlu aXRpYWxpemVkLAotYGBrZXJuZWwvc2lnbmFsLmNgYCwgbGluZSAzODA6OgotCi0gICAgMzU5IHN0 YXRpYyB2b2lkIGNvbGxlY3Rfc2lnbmFsKGludCBzaWcsIHN0cnVjdCBzaWdwZW5kaW5nICpsaXN0 LCBzaWdpbmZvX3QgKmluZm8pCi0gICAgMzYwIHsKLSAgICAuLi4KLSAgICAzNjcgICAgICAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZsaXN0LT5saXN0LCBsaXN0KSB7Ci0gICAgMzY4ICAgICAg ICAgICAgICAgICBpZiAocS0+aW5mby5zaV9zaWdubyA9PSBzaWcpIHsKLSAgICAzNjkgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KQotICAgIDM3MCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gc3RpbGxfcGVuZGluZzsKLSAgICAzNzEgICAgICAgICAgICAgICAg ICAgICAgICAgZmlyc3QgPSBxOwotICAgIC4uLgotICAgIDM3NyAgICAgICAgIGlmIChmaXJzdCkg ewotICAgIDM3OCBzdGlsbF9wZW5kaW5nOgotICAgIDM3OSAgICAgICAgICAgICAgICAgbGlzdF9k ZWxfaW5pdCgmZmlyc3QtPmxpc3QpOwotICAgIDM4MCAgICAgICAgICAgICAgICAgY29weV9zaWdp bmZvKGluZm8sICZmaXJzdC0+aW5mbyk7Ci0gICAgMzgxICAgICAgICAgICAgICAgICBfX3NpZ3F1 ZXVlX2ZyZWUoZmlyc3QpOwotICAgIC4uLgotICAgIDM5MiAgICAgICAgIH0KLSAgICAzOTMgfQot Ci1IZXJlLCBpdCBpcyBgYCZmaXJzdC0+aW5mb2BgIHRoYXQgaXMgYmVpbmcgcGFzc2VkIG9uIHRv IGBgY29weV9zaWdpbmZvKClgYC4gVGhlCi12YXJpYWJsZSBgYGZpcnN0YGAgd2FzIGZvdW5kIG9u IGEgbGlzdCAtLSBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0bwotYGBjb2xsZWN0 X3NpZ25hbCgpYGAuIFdlICBjb250aW51ZSBvdXIgam91cm5leSB0aHJvdWdoIHRoZSBzdGFjaywg dG8gZmlndXJlIG91dAotd2hlcmUgdGhlIGl0ZW0gb24gImxpc3QiIHdhcyBhbGxvY2F0ZWQgb3Ig aW5pdGlhbGl6ZWQuIFdlIG1vdmUgdG8gbGluZSA0MTA6OgotCi0gICAgMzk1IHN0YXRpYyBpbnQg X19kZXF1ZXVlX3NpZ25hbChzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZywgc2lnc2V0X3QgKm1h c2ssCi0gICAgMzk2ICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2luZm9fdCAqaW5mbykKLSAg ICAzOTcgewotICAgIC4uLgotICAgIDQxMCAgICAgICAgICAgICAgICAgY29sbGVjdF9zaWduYWwo c2lnLCBwZW5kaW5nLCBpbmZvKTsKLSAgICAuLi4KLSAgICA0MTQgfQotCi1Ob3cgd2UgbmVlZCB0 byBmb2xsb3cgdGhlIGBgcGVuZGluZ2BgIHBvaW50ZXIsIHNpbmNlIHRoYXQgaXMgYmVpbmcgcGFz c2VkIG9uIHRvCi1gYGNvbGxlY3Rfc2lnbmFsKClgYCBhcyBgYGxpc3RgYC4gQXQgdGhpcyBwb2lu dCwgd2UndmUgcnVuIG91dCBvZiBsaW5lcyBmcm9tIHRoZQotImFkZHIybGluZSIgb3V0cHV0LiBO b3QgdG8gd29ycnksIHdlIGp1c3QgcGFzdGUgdGhlIG5leHQgYWRkcmVzc2VzIGZyb20gdGhlCi1r bWVtY2hlY2sgc3RhY2sgZHVtcCwgaS5lLjo6Ci0KLSAgICAgWzxmZmZmZmZmZjgxMDRmMDRlPl0g ZGVxdWV1ZV9zaWduYWwrMHg4ZS8weDE3MAotICAgICBbPGZmZmZmZmZmODEwNTBiZDg+XSBnZXRf c2lnbmFsX3RvX2RlbGl2ZXIrMHg5OC8weDM5MAotICAgICBbPGZmZmZmZmZmODEwMGI4N2Q+XSBk b19ub3RpZnlfcmVzdW1lKzB4YWQvMHg3ZDAKLSAgICAgWzxmZmZmZmZmZjgxMDBjN2I1Pl0gaW50 X3NpZ25hbCsweDEyLzB4MTcKLQotCSQgYWRkcjJsaW5lIC1lIHZtbGludXggLWkgZmZmZmZmZmY4 MTA0ZjA0ZSBmZmZmZmZmZjgxMDUwYmQ4IFwKLQkJZmZmZmZmZmY4MTAwYjg3ZCBmZmZmZmZmZjgx MDBjN2I1Ci0Ja2VybmVsL3NpZ25hbC5jOjQ0NgotCWtlcm5lbC9zaWduYWwuYzoxODA2Ci0JYXJj aC94ODYva2VybmVsL3NpZ25hbC5jOjgwNQotCWFyY2gveDg2L2tlcm5lbC9zaWduYWwuYzo4NzEK LQlhcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUzo2OTQKLQotUmVtZW1iZXIgdGhhdCBzaW5jZSB0 aGVzZSBhZGRyZXNzZXMgd2VyZSBmb3VuZCBvbiB0aGUgc3RhY2sgYW5kIG5vdCBhcyB0aGUKLVJJ UCB2YWx1ZSwgdGhleSBhY3R1YWxseSBwb2ludCB0byB0aGUgX25leHRfIGluc3RydWN0aW9uICh0 aGV5IGFyZSByZXR1cm4KLWFkZHJlc3NlcykuIFRoaXMgYmVjb21lcyBvYnZpb3VzIHdoZW4gd2Ug bG9vayBhdCB0aGUgY29kZSBmb3IgbGluZSA0NDY6OgotCi0gICAgNDIyIGludCBkZXF1ZXVlX3Np Z25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc2lnc2V0X3QgKm1hc2ssIHNpZ2luZm9fdCAq aW5mbykKLSAgICA0MjMgewotICAgIC4uLgotICAgIDQzMSAgICAgICAgICAgICAgICAgc2lnbnIg PSBfX2RlcXVldWVfc2lnbmFsKCZ0c2stPnNpZ25hbC0+c2hhcmVkX3BlbmRpbmcsCi0gICAgNDMy CQkJCQkJIG1hc2ssIGluZm8pOwotICAgIDQzMwkJCS8qCi0gICAgNDM0CQkJICogaXRpbWVyIHNp Z25hbCA/Ci0gICAgNDM1CQkJICoKLSAgICA0MzYJCQkgKiBpdGltZXJzIGFyZSBwcm9jZXNzIHNo YXJlZCBhbmQgd2UgcmVzdGFydCBwZXJpb2RpYwotICAgIDQzNwkJCSAqIGl0aW1lcnMgaW4gdGhl IHNpZ25hbCBkZWxpdmVyeSBwYXRoIHRvIHByZXZlbnQgRG9TCi0gICAgNDM4CQkJICogYXR0YWNr cyBpbiB0aGUgaGlnaCByZXNvbHV0aW9uIHRpbWVyIGNhc2UuIFRoaXMgaXMKLSAgICA0MzkJCQkg KiBjb21wbGlhbnQgd2l0aCB0aGUgb2xkIHdheSBvZiBzZWxmIHJlc3RhcnRpbmcKLSAgICA0NDAJ CQkgKiBpdGltZXJzLCBhcyB0aGUgU0lHQUxSTSBpcyBhIGxlZ2FjeSBzaWduYWwgYW5kIG9ubHkK LSAgICA0NDEJCQkgKiBxdWV1ZWQgb25jZS4gQ2hhbmdpbmcgdGhlIHJlc3RhcnQgYmVoYXZpb3Vy IHRvCi0gICAgNDQyCQkJICogcmVzdGFydCB0aGUgdGltZXIgaW4gdGhlIHNpZ25hbCBkZXF1ZXVl IHBhdGggaXMKLSAgICA0NDMJCQkgKiByZWR1Y2luZyB0aGUgdGltZXIgbm9pc2Ugb24gaGVhdnkg bG9hZGVkICFoaWdocmVzCi0gICAgNDQ0CQkJICogc3lzdGVtcyB0b28uCi0gICAgNDQ1CQkJICov Ci0gICAgNDQ2CQkJaWYgKHVubGlrZWx5KHNpZ25yID09IFNJR0FMUk0pKSB7Ci0gICAgLi4uCi0g ICAgNDg5IH0KLQotU28gaW5zdGVhZCBvZiBsb29raW5nIGF0IDQ0Niwgd2Ugc2hvdWxkIGJlIGxv b2tpbmcgYXQgNDMxLCB3aGljaCBpcyB0aGUgbGluZQotdGhhdCBleGVjdXRlcyBqdXN0IGJlZm9y ZSA0NDYuIEhlcmUgd2Ugc2VlIHRoYXQgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IgaXMKLWBgJnRz ay0+c2lnbmFsLT5zaGFyZWRfcGVuZGluZ2BgLgotCi1PdXIgbmV4dCB0YXNrIGlzIG5vdyB0byBm aWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIHRoYXQgcHV0cyBpdGVtcyBvbiB0aGlzCi1gYHNoYXJl ZF9wZW5kaW5nYGAgbGlzdC4gQSBjcnVkZSwgYnV0IGVmZmljaWVudCB0b29sLCBpcyBgYGdpdCBn cmVwYGA6OgotCi0JJCBnaXQgZ3JlcCAtbiAnc2hhcmVkX3BlbmRpbmcnIGtlcm5lbC8KLQkuLi4K LQlrZXJuZWwvc2lnbmFsLmM6ODI4OglwZW5kaW5nID0gZ3JvdXAgPyAmdC0+c2lnbmFsLT5zaGFy ZWRfcGVuZGluZyA6ICZ0LT5wZW5kaW5nOwotCWtlcm5lbC9zaWduYWwuYzoxMzM5OglwZW5kaW5n ID0gZ3JvdXAgPyAmdC0+c2lnbmFsLT5zaGFyZWRfcGVuZGluZyA6ICZ0LT5wZW5kaW5nOwotCS4u LgotCi1UaGVyZSB3ZXJlIG1vcmUgcmVzdWx0cywgYnV0IG5vbmUgb2YgdGhlbSB3ZXJlIHJlbGF0 ZWQgdG8gbGlzdCBvcGVyYXRpb25zLAotYW5kIHRoZXNlIHdlcmUgdGhlIG9ubHkgYXNzaWdubWVu dHMuIFdlIGluc3BlY3QgdGhlIGxpbmUgbnVtYmVycyBtb3JlIGNsb3NlbHkKLWFuZCBmaW5kIHRo YXQgdGhpcyBpcyBpbmRlZWQgd2hlcmUgaXRlbXMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBsaXN0 OjoKLQotICAgIDgxNiBzdGF0aWMgaW50IHNlbmRfc2lnbmFsKGludCBzaWcsIHN0cnVjdCBzaWdp bmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsCi0gICAgODE3CQkJCWludCBncm91cCkK LSAgICA4MTggewotICAgIC4uLgotICAgIDgyOAkJcGVuZGluZyA9IGdyb3VwID8gJnQtPnNpZ25h bC0+c2hhcmVkX3BlbmRpbmcgOiAmdC0+cGVuZGluZzsKLSAgICAuLi4KLSAgICA4NTEJCXEgPSBf X3NpZ3F1ZXVlX2FsbG9jKHQsIEdGUF9BVE9NSUMsIChzaWcgPCBTSUdSVE1JTiAmJgotICAgIDg1 MgkJCQkJCSAgICAgKGlzX3NpX3NwZWNpYWwoaW5mbykgfHwKLSAgICA4NTMJCQkJCQkgICAgICBp bmZvLT5zaV9jb2RlID49IDApKSk7Ci0gICAgODU0CQlpZiAocSkgewotICAgIDg1NQkJCWxpc3Rf YWRkX3RhaWwoJnEtPmxpc3QsICZwZW5kaW5nLT5saXN0KTsKLSAgICAuLi4KLSAgICA4OTAgfQot Ci1hbmQ6OgotCi0gICAgMTMwOSBpbnQgc2VuZF9zaWdxdWV1ZShzdHJ1Y3Qgc2lncXVldWUgKnEs IHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGdyb3VwKQotICAgIDEzMTAgewotICAgIC4uLi4K LSAgICAxMzM5CSBwZW5kaW5nID0gZ3JvdXAgPyAmdC0+c2lnbmFsLT5zaGFyZWRfcGVuZGluZyA6 ICZ0LT5wZW5kaW5nOwotICAgIDEzNDAJIGxpc3RfYWRkX3RhaWwoJnEtPmxpc3QsICZwZW5kaW5n LT5saXN0KTsKLSAgICAuLi4uCi0gICAgMTM0NyB9Ci0KLUluIHRoZSBmaXJzdCBjYXNlLCB0aGUg bGlzdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvciwgYGBxYGAsIGlzIGJlaW5nCi1yZXR1cm5l ZCBmcm9tIHRoZSBmdW5jdGlvbiBgYF9fc2lncXVldWVfYWxsb2MoKWBgLCB3aGljaCBsb29rcyBs aWtlIGFuCi1hbGxvY2F0aW9uIGZ1bmN0aW9uLiAgTGV0J3MgdGFrZSBhIGxvb2sgYXQgaXQ6Ogot Ci0gICAgMTg3IHN0YXRpYyBzdHJ1Y3Qgc2lncXVldWUgKl9fc2lncXVldWVfYWxsb2Moc3RydWN0 IHRhc2tfc3RydWN0ICp0LCBnZnBfdCBmbGFncywKLSAgICAxODgJCQkJCQkgaW50IG92ZXJyaWRl X3JsaW1pdCkKLSAgICAxODkgewotICAgIDE5MAkJc3RydWN0IHNpZ3F1ZXVlICpxID0gTlVMTDsK LSAgICAxOTEJCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKLSAgICAxOTIKLSAgICAxOTMJCS8q Ci0gICAgMTk0CQkgKiBXZSB3b24ndCBnZXQgcHJvYmxlbXMgd2l0aCB0aGUgdGFyZ2V0J3MgVUlE IGNoYW5naW5nIHVuZGVyIHVzCi0gICAgMTk1CQkgKiBiZWNhdXNlIGNoYW5naW5nIGl0IHJlcXVp cmVzIFJDVSBiZSB1c2VkLCBhbmQgaWYgdCAhPSBjdXJyZW50LCB0aGUKLSAgICAxOTYJCSAqIGNh bGxlciBtdXN0IGJlIGhvbGRpbmcgdGhlIFJDVSByZWFkbG9jayAoYnkgd2F5IG9mIGEgc3Bpbmxv Y2spIGFuZAotICAgIDE5NwkJICogd2UgdXNlIFJDVSBwcm90ZWN0aW9uIGhlcmUKLSAgICAxOTgJ CSAqLwotICAgIDE5OQkJdXNlciA9IGdldF91aWQoX190YXNrX2NyZWQodCktPnVzZXIpOwotICAg IDIwMAkJYXRvbWljX2luYygmdXNlci0+c2lncGVuZGluZyk7Ci0gICAgMjAxCQlpZiAob3ZlcnJp ZGVfcmxpbWl0IHx8Ci0gICAgMjAyCQkgICAgYXRvbWljX3JlYWQoJnVzZXItPnNpZ3BlbmRpbmcp IDw9Ci0gICAgMjAzCQkJCXQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU0lHUEVORElOR10ucmxpbV9j dXIpCi0gICAgMjA0CQkJcSA9IGttZW1fY2FjaGVfYWxsb2Moc2lncXVldWVfY2FjaGVwLCBmbGFn cyk7Ci0gICAgMjA1CQlpZiAodW5saWtlbHkocSA9PSBOVUxMKSkgewotICAgIDIwNgkJCWF0b21p Y19kZWMoJnVzZXItPnNpZ3BlbmRpbmcpOwotICAgIDIwNwkJCWZyZWVfdWlkKHVzZXIpOwotICAg IDIwOAkJfSBlbHNlIHsKLSAgICAyMDkJCQlJTklUX0xJU1RfSEVBRCgmcS0+bGlzdCk7Ci0gICAg MjEwCQkJcS0+ZmxhZ3MgPSAwOwotICAgIDIxMQkJCXEtPnVzZXIgPSB1c2VyOwotICAgIDIxMgkJ fQotICAgIDIxMwotICAgIDIxNAkJcmV0dXJuIHE7Ci0gICAgMjE1IH0KLQotV2Ugc2VlIHRoYXQg dGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBgYHEtPmxpc3RgYCwgYGBxLT5mbGFnc2BgLCBhbmQK LWBgcS0+dXNlcmBgLiBJdCBzZWVtcyB0aGF0IG5vdyBpcyB0aGUgdGltZSB0byBsb29rIGF0IHRo ZSBkZWZpbml0aW9uIG9mCi1gYHN0cnVjdCBzaWdxdWV1ZWBgLCBlLmcuOjoKLQotICAgIDE0IHN0 cnVjdCBzaWdxdWV1ZSB7Ci0gICAgMTUJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLSAg ICAxNgkgICAgICAgaW50IGZsYWdzOwotICAgIDE3CSAgICAgICBzaWdpbmZvX3QgaW5mbzsKLSAg ICAxOAkgICAgICAgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwotICAgIDE5IH07Ci0KLUFuZCwg eW91IG1pZ2h0IHJlbWVtYmVyLCBpdCB3YXMgYSBgYG1lbWNweSgpYGAgb24gYGAmZmlyc3QtPmlu Zm9gYCB0aGF0Ci1jYXVzZWQgdGhlIHdhcm5pbmcsIHNvIHRoaXMgbWFrZXMgcGVyZmVjdCBzZW5z ZS4gSXQgYWxzbyBzZWVtcyByZWFzb25hYmxlCi10byBhc3N1bWUgdGhhdCBpdCBpcyB0aGUgY2Fs bGVyIG9mIGBgX19zaWdxdWV1ZV9hbGxvYygpYGAgdGhhdCBoYXMgdGhlCi1yZXNwb25zaWJpbGl0 eSBvZiBmaWxsaW5nIG91dCAoaW5pdGlhbGl6aW5nKSB0aGlzIG1lbWJlci4KLQotQnV0IGp1c3Qg d2hpY2ggZmllbGRzIG9mIHRoZSBzdHJ1Y3Qgd2VyZSB1bmluaXRpYWxpemVkPyBMZXQncyBsb29r IGF0Ci1rbWVtY2hlY2sncyByZXBvcnQgYWdhaW46OgotCi0gICAgV0FSTklORzoga21lbWNoZWNr OiBDYXVnaHQgMzItYml0IHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSAoZmZmZjg4MDAz ZTRhMjAyNCkKLSAgICA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4 OGZmZmYwMDAwMDAwMDAwMDAwMDAwCi0gICAgIGkgaSBpIGkgdSB1IHUgdSBpIGkgaSBpIGkgaSBp IGkgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdQotCSAgICAgXgotCi1UaGVzZSBmaXJz dCB0d28gbGluZXMgYXJlIHRoZSBtZW1vcnkgZHVtcCBvZiB0aGUgbWVtb3J5IG9iamVjdCBpdHNl bGYsIGFuZAotdGhlIHNoYWRvdyBieXRlbWFwLCByZXNwZWN0aXZlbHkuIFRoZSBtZW1vcnkgb2Jq ZWN0IGl0c2VsZiBpcyBpbiB0aGlzIGNhc2UKLWBgJmZpcnN0LT5pbmZvYGAuIEp1c3QgYmV3YXJl IHRoYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZHVtcCBpcyBOT1QgdGhlIHN0YXJ0Ci1vZiB0aGUgb2Jq ZWN0IGl0c2VsZiEgVGhlIHBvc2l0aW9uIG9mIHRoZSBjYXJldCAoXikgY29ycmVzcG9uZHMgd2l0 aCB0aGUKLWFkZHJlc3Mgb2YgdGhlIHJlYWQgKGZmZmY4ODAwM2U0YTIwMjQpLgotCi1UaGUgc2hh ZG93IGJ5dGVtYXAgZHVtcCBsZWdlbmQgaXMgYXMgZm9sbG93czoKLQotLSBpOiBpbml0aWFsaXpl ZAotLSB1OiB1bmluaXRpYWxpemVkCi0tIGE6IHVuYWxsb2NhdGVkIChtZW1vcnkgaGFzIGJlZW4g YWxsb2NhdGVkIGJ5IHRoZSBzbGFiIGxheWVyLCBidXQgaGFzIG5vdAotICB5ZXQgYmVlbiBoYW5k ZWQgb2ZmIHRvIGFueWJvZHkpCi0tIGY6IGZyZWVkIChtZW1vcnkgaGFzIGJlZW4gYWxsb2NhdGVk IGJ5IHRoZSBzbGFiIGxheWVyLCBidXQgaGFzIGJlZW4gZnJlZWQKLSAgYnkgdGhlIHByZXZpb3Vz IG93bmVyKQotCi1JbiBvcmRlciB0byBmaWd1cmUgb3V0IHdoZXJlIChyZWxhdGl2ZSB0byB0aGUg c3RhcnQgb2YgdGhlIG9iamVjdCkgdGhlCi11bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgbG9jYXRl ZCwgd2UgaGF2ZSB0byBsb29rIGF0IHRoZSBkaXNhc3NlbWJseS4gRm9yCi10aGF0LCB3ZSdsbCBu ZWVkIHRoZSBSSVAgYWRkcmVzcyBhZ2Fpbjo6Ci0KLSAgICBSSVA6IDAwMTA6WzxmZmZmZmZmZjgx MDRlZGU4Pl0gIFs8ZmZmZmZmZmY4MTA0ZWRlOD5dIF9fZGVxdWV1ZV9zaWduYWwrMHhjOC8weDE5 MAotCi0JJCBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiB2bWxpbnV4IHwgZ3JlcCAtQyA4 IGZmZmZmZmZmODEwNGVkZTg6Ci0JZmZmZmZmZmY4MTA0ZWRjODoJbW92ICAgICVyOCwweDgoJXI4 KQotCWZmZmZmZmZmODEwNGVkY2M6CXRlc3QgICAlcjEwZCwlcjEwZAotCWZmZmZmZmZmODEwNGVk Y2Y6CWpzICAgICBmZmZmZmZmZjgxMDRlZTg4IDxfX2RlcXVldWVfc2lnbmFsKzB4MTY4PgotCWZm ZmZmZmZmODEwNGVkZDU6CW1vdiAgICAlcmF4LCVyZHgKLQlmZmZmZmZmZjgxMDRlZGQ4Ogltb3Yg ICAgJDB4YywlZWN4Ci0JZmZmZmZmZmY4MTA0ZWRkZDoJbW92ICAgICVyMTMsJXJkaQotCWZmZmZm ZmZmODEwNGVkZTA6CW1vdiAgICAkMHgzMCwlZWF4Ci0JZmZmZmZmZmY4MTA0ZWRlNToJbW92ICAg ICVyZHgsJXJzaQotCWZmZmZmZmZmODEwNGVkZTg6CXJlcCBtb3ZzbCAlZHM6KCVyc2kpLCVlczoo JXJkaSkKLQlmZmZmZmZmZjgxMDRlZGVhOgl0ZXN0ICAgJDB4MiwlYWwKLQlmZmZmZmZmZjgxMDRl ZGVjOglqZSAgICAgZmZmZmZmZmY4MTA0ZWRmMCA8X19kZXF1ZXVlX3NpZ25hbCsweGQwPgotCWZm ZmZmZmZmODEwNGVkZWU6CW1vdnN3ICAlZHM6KCVyc2kpLCVlczooJXJkaSkKLQlmZmZmZmZmZjgx MDRlZGYwOgl0ZXN0ICAgJDB4MSwlYWwKLQlmZmZmZmZmZjgxMDRlZGYyOglqZSAgICAgZmZmZmZm ZmY4MTA0ZWRmNSA8X19kZXF1ZXVlX3NpZ25hbCsweGQ1PgotCWZmZmZmZmZmODEwNGVkZjQ6CW1v dnNiICAlZHM6KCVyc2kpLCVlczooJXJkaSkKLQlmZmZmZmZmZjgxMDRlZGY1Ogltb3YgICAgJXI4 LCVyZGkKLQlmZmZmZmZmZjgxMDRlZGY4OgljYWxscSAgZmZmZmZmZmY4MTA0ZGU2MCA8X19zaWdx dWV1ZV9mcmVlPgotCi1BcyBleHBlY3RlZCwgaXQncyB0aGUgImBgcmVwIG1vdnNsYGAiIGluc3Ry dWN0aW9uIGZyb20gdGhlIGBgbWVtY3B5KClgYAotdGhhdCBjYXVzZXMgdGhlIHdhcm5pbmcuIFdl IGtub3cgYWJvdXQgYGBSRVAgTU9WU0xgYCB0aGF0IGl0IHVzZXMgdGhlIHJlZ2lzdGVyCi1gYFJD WGBgIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGl0ZXJhdGlvbnMuIEJ5IHRha2lu ZyBhIGxvb2sgYXQgdGhlCi1yZWdpc3RlciBkdW1wIGFnYWluIChmcm9tIHRoZSBrbWVtY2hlY2sg cmVwb3J0KSwgd2UgY2FuIGZpZ3VyZSBvdXQgaG93IG1hbnkKLWJ5dGVzIHdlcmUgbGVmdCB0byBj b3B5OjoKLQotICAgIFJBWDogMDAwMDAwMDAwMDAwMDAzMCBSQlg6IGZmZmY4ODAwM2Q0ZWE5Njgg UkNYOiAwMDAwMDAwMDAwMDAwMDA5Ci0KLUJ5IGxvb2tpbmcgYXQgdGhlIGRpc2Fzc2VtYmx5LCB3 ZSBhbHNvIHNlZSB0aGF0IGBgJWVjeGBgIGlzIGJlaW5nIGxvYWRlZAotd2l0aCB0aGUgdmFsdWUg YGAkMHhjYGAganVzdCBiZWZvcmUgKGZmZmZmZmZmODEwNGVkZDgpLCBzbyB3ZSBhcmUgdmVyeQot bHVja3kuIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBpdGVyYXRpb25z LCBub3QgYnl0ZXMuIEFuZAotc2luY2UgdGhpcyBpcyBhICJsb25nIiBvcGVyYXRpb24sIHdlIG5l ZWQgdG8gbXVsdGlwbHkgYnkgNCB0byBnZXQgdGhlCi1udW1iZXIgb2YgYnl0ZXMuIFNvIHRoaXMg bWVhbnMgdGhhdCB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSB3YXMgZW5jb3VudGVyZWQKLWF0IDQg KiAoMHhjIC0gMHg5KSA9IDEyIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBvYmplY3QuCi0K LVdlIGNhbiBub3cgdHJ5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmllbGQgb2YgdGhlICJgYHN0cnVj dCBzaWdpbmZvYGAiIHRoYXQKLXdhcyBub3QgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgdGhlIGJlZ2lu bmluZyBvZiB0aGUgc3RydWN0OjoKLQotICAgIDQwIHR5cGVkZWYgc3RydWN0IHNpZ2luZm8gewot ICAgIDQxCSAgICAgICBpbnQgc2lfc2lnbm87Ci0gICAgNDIJICAgICAgIGludCBzaV9lcnJubzsK LSAgICA0MwkgICAgICAgaW50IHNpX2NvZGU7Ci0gICAgNDQKLSAgICA0NQkgICAgICAgdW5pb24g ewotICAgIC4uCi0gICAgOTIJICAgICAgIH0gX3NpZmllbGRzOwotICAgIDkzIH0gc2lnaW5mb190 OwotCi1PbiA2NC1iaXQsIHRoZSBpbnQgaXMgNCBieXRlcyBsb25nLCBzbyBpdCBtdXN0IHRoZSB1 bmlvbiBtZW1iZXIgdGhhdCBoYXMKLW5vdCBiZWVuIGluaXRpYWxpemVkLiBXZSBjYW4gdmVyaWZ5 IHRoaXMgdXNpbmcgZ2RiOjoKLQotCSQgZ2RiIHZtbGludXgKLQkuLi4KLQkoZ2RiKSBwICYoKHN0 cnVjdCBzaWdpbmZvICopIDApLT5fc2lmaWVsZHMKLQkkMSA9ICh1bmlvbiB7Li4ufSAqKSAweDEw Ci0KLUFjdHVhbGx5LCBpdCBzZWVtcyB0aGF0IHRoZSB1bmlvbiBtZW1iZXIgaXMgbG9jYXRlZCBh dCBvZmZzZXQgMHgxMCAtLSB3aGljaAotbWVhbnMgdGhhdCBnY2MgaGFzIGluc2VydGVkIDQgYnl0 ZXMgb2YgcGFkZGluZyBiZXR3ZWVuIHRoZSBtZW1iZXJzIGBgc2lfY29kZWBgCi1hbmQgYGBfc2lm aWVsZHNgYC4gV2UgY2FuIG5vdyBnZXQgYSBmdWxsZXIgcGljdHVyZSBvZiB0aGUgbWVtb3J5IGR1 bXA6OgotCi0JCSBfLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0+IHNpX2NvZGUKLQkJLwkg Xy0tLS0tLS0tLS0tLS0tLS0tLS0tPT4gKHBhZGRpbmcpCi0JICAgICAgIHwJLwkgXy0tLS0tLS0t LS0tLT0+IF9zaWZpZWxkcyguX2tpbGwuX3BpZCkKLQkgICAgICAgfCAgICAgICB8CS8JIF8tLS0t PT4gX3NpZmllbGRzKC5fa2lsbC5fdWlkKQotCSAgICAgICB8ICAgICAgIHwgICAgICAgfAkvCi0J LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXwKLQk4MDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDA4OGZmZmYwMDAwMDAwMDAwMDAwMDAwCi0JIGkgaSBpIGkgdSB1 IHUgdSBpIGkgaSBpIGkgaSBpIGkgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdQotCi1U aGlzIGFsbG93cyB1cyB0byByZWFsaXplIGFub3RoZXIgaW1wb3J0YW50IGZhY3Q6IGBgc2lfY29k ZWBgIGNvbnRhaW5zIHRoZQotdmFsdWUgMHg4MC4gUmVtZW1iZXIgdGhhdCB4ODYgaXMgbGl0dGxl IGVuZGlhbiwgc28gdGhlIGZpcnN0IDQgYnl0ZXMKLSI4MDAwMDAwMCIgYXJlIHJlYWxseSB0aGUg bnVtYmVyIDB4MDAwMDAwODAuIFdpdGggYSBiaXQgb2YgcmVzZWFyY2gsIHdlCi1maW5kIHRoYXQg dGhpcyBpcyBhY3R1YWxseSB0aGUgY29uc3RhbnQgYGBTSV9LRVJORUxgYCBkZWZpbmVkIGluCi1g YGluY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oYGA6OgotCi0gICAgMTQ0ICNkZWZpbmUgU0lf S0VSTkVMCTB4ODAJCS8qIHNlbnQgYnkgdGhlIGtlcm5lbCBmcm9tIHNvbWV3aGVyZQkgKi8KLQot VGhpcyBtYWNybyBpcyB1c2VkIGluIGV4YWN0bHkgb25lIHBsYWNlIGluIHRoZSB4ODYga2VybmVs OiBJbiBgYHNlbmRfc2lnbmFsKClgYAotaW4gYGBrZXJuZWwvc2lnbmFsLmNgYDo6Ci0KLSAgICA4 MTYgc3RhdGljIGludCBzZW5kX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywg c3RydWN0IHRhc2tfc3RydWN0ICp0LAotICAgIDgxNwkJCQlpbnQgZ3JvdXApCi0gICAgODE4IHsK LSAgICAuLi4KLSAgICA4MjgJCXBlbmRpbmcgPSBncm91cCA/ICZ0LT5zaWduYWwtPnNoYXJlZF9w ZW5kaW5nIDogJnQtPnBlbmRpbmc7Ci0gICAgLi4uCi0gICAgODUxCQlxID0gX19zaWdxdWV1ZV9h bGxvYyh0LCBHRlBfQVRPTUlDLCAoc2lnIDwgU0lHUlRNSU4gJiYKLSAgICA4NTIJCQkJCQkgICAg IChpc19zaV9zcGVjaWFsKGluZm8pIHx8Ci0gICAgODUzCQkJCQkJICAgICAgaW5mby0+c2lfY29k ZSA+PSAwKSkpOwotICAgIDg1NAkJaWYgKHEpIHsKLSAgICA4NTUJCQlsaXN0X2FkZF90YWlsKCZx LT5saXN0LCAmcGVuZGluZy0+bGlzdCk7Ci0gICAgODU2CQkJc3dpdGNoICgodW5zaWduZWQgbG9u ZykgaW5mbykgewotICAgIC4uLgotICAgIDg2NQkJCWNhc2UgKHVuc2lnbmVkIGxvbmcpIFNFTkRf U0lHX1BSSVY6Ci0gICAgODY2CQkJCXEtPmluZm8uc2lfc2lnbm8gPSBzaWc7Ci0gICAgODY3CQkJ CXEtPmluZm8uc2lfZXJybm8gPSAwOwotICAgIDg2OAkJCQlxLT5pbmZvLnNpX2NvZGUgPSBTSV9L RVJORUw7Ci0gICAgODY5CQkJCXEtPmluZm8uc2lfcGlkID0gMDsKLSAgICA4NzAJCQkJcS0+aW5m by5zaV91aWQgPSAwOwotICAgIDg3MQkJCQlicmVhazsKLSAgICAuLi4KLSAgICA4OTAgfQotCi1O b3Qgb25seSBkb2VzIHRoaXMgbWF0Y2ggd2l0aCB0aGUgYGAuc2lfY29kZWBgIG1lbWJlciwgaXQg YWxzbyBtYXRjaGVzIHRoZSBwbGFjZQotd2UgZm91bmQgZWFybGllciB3aGVuIGxvb2tpbmcgZm9y IHdoZXJlIHNpZ2luZm9fdCBvYmplY3RzIGFyZSBlbnF1ZXVlZCBvbiB0aGUKLWBgc2hhcmVkX3Bl bmRpbmdgYCBsaXN0LgotCi1TbyB0byBzdW0gdXA6IEl0IHNlZW1zIHRoYXQgaXQgaXMgdGhlIHBh ZGRpbmcgaW50cm9kdWNlZCBieSB0aGUgY29tcGlsZXIKLWJldHdlZW4gdHdvIHN0cnVjdCBmaWVs ZHMgdGhhdCBpcyB1bmluaXRpYWxpemVkLCBhbmQgdGhpcyBnZXRzIHJlcG9ydGVkIHdoZW4KLXdl IGRvIGEgYGBtZW1jcHkoKWBgIG9uIHRoZSBzdHJ1Y3QuIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZl IGlkZW50aWZpZWQgYSBmYWxzZQotcG9zaXRpdmUgd2FybmluZy4KLQotTm9ybWFsbHksIGttZW1j aGVjayB3aWxsIG5vdCByZXBvcnQgdW5pbml0aWFsaXplZCBhY2Nlc3NlcyBpbiBgYG1lbWNweSgp YGAgY2FsbHMKLXdoZW4gYm90aCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMg YXJlIHRyYWNrZWQuIChJbnN0ZWFkLCB3ZSBjb3B5Ci10aGUgc2hhZG93IGJ5dGVtYXAgYXMgd2Vs bCkuIEluIHRoaXMgY2FzZSwgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgY2xlYXJseQotd2FzIG5v dCB0cmFja2VkLiBXZSBjYW4gZGlnIGEgbGl0dGxlIGRlZXBlciBpbnRvIHRoZSBzdGFjayB0cmFj ZSBmcm9tIGFib3ZlOjoKLQotCWFyY2gveDg2L2tlcm5lbC9zaWduYWwuYzo4MDUKLQlhcmNoL3g4 Ni9rZXJuZWwvc2lnbmFsLmM6ODcxCi0JYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlM6Njk0Ci0K LUFuZCB3ZSBjbGVhcmx5IHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBzaWdpbmZvIG9iamVjdCBp cyBsb2NhdGVkIG9uIHRoZQotc3RhY2s6OgotCi0gICAgNzgyIHN0YXRpYyB2b2lkIGRvX3NpZ25h bChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSAgICA3ODMgewotICAgIDc4NAkJc3RydWN0IGtfc2ln YWN0aW9uIGthOwotICAgIDc4NQkJc2lnaW5mb190IGluZm87Ci0gICAgLi4uCi0gICAgODA0CQlz aWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKLSAg ICAuLi4KLSAgICA4NTQgfQotCi1BbmQgdGhpcyBgYCZpbmZvYGAgaXMgd2hhdCBldmVudHVhbGx5 IGdldHMgcGFzc2VkIHRvIGBgY29weV9zaWdpbmZvKClgYCBhcyB0aGUKLWRlc3RpbmF0aW9uIGFy Z3VtZW50LgotCi1Ob3csIGV2ZW4gdGhvdWdoIHdlIGRpZG4ndCBmaW5kIGFuIGFjdHVhbCBlcnJv ciBoZXJlLCB0aGUgZXhhbXBsZSBpcyBzdGlsbCBhCi1nb29kIG9uZSwgYmVjYXVzZSBpdCBzaG93 cyBob3cgb25lIHdvdWxkIGdvIGFib3V0IHRvIGZpbmQgb3V0IHdoYXQgdGhlIHJlcG9ydAotd2Fz IGFsbCBhYm91dC4KLQotCi1Bbm5vdGF0aW5nIGZhbHNlIHBvc2l0aXZlcwotfn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn4KLQotVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCB3YXlzIHRvIG1ha2Ug YW5ub3RhdGlvbnMgaW4gdGhlIHNvdXJjZSBjb2RlIHRoYXQKLXdpbGwga2VlcCBrbWVtY2hlY2sg ZnJvbSBjaGVja2luZyBhbmQgcmVwb3J0aW5nIGNlcnRhaW4gYWxsb2NhdGlvbnMuIEhlcmUKLXRo ZXkgYXJlOgotCi0tIGBgX19HRlBfTk9UUkFDS19GQUxTRV9QT1NJVElWRWBgCi0JVGhpcyBmbGFn IGNhbiBiZSBwYXNzZWQgdG8gYGBrbWFsbG9jKClgYCBvciBgYGttZW1fY2FjaGVfYWxsb2MoKWBg Ci0JKHRoZXJlZm9yZSBhbHNvIHRvIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGVuZCB1cCBjYWxsaW5n IG9uZSBvZgotCXRoZXNlKSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBhbGxvY2F0aW9uIHNob3VsZCBu b3QgYmUgdHJhY2tlZAotCWJlY2F1c2UgaXQgd291bGQgbGVhZCB0byBhIGZhbHNlIHBvc2l0aXZl IHJlcG9ydC4gVGhpcyBpcyBhICJiaWcKLQloYW1tZXIiIHdheSBvZiBzaWxlbmNpbmcga21lbWNo ZWNrOyBhZnRlciBhbGwsIGV2ZW4gaWYgdGhlIGZhbHNlCi0JcG9zaXRpdmUgcGVydGFpbnMgdG8g cGFydGljdWxhciBmaWVsZCBpbiBhIHN0cnVjdCwgZm9yIGV4YW1wbGUsIHdlCi0Jd2lsbCBub3cg bG9zZSB0aGUgYWJpbGl0eSB0byBmaW5kIChyZWFsKSBlcnJvcnMgaW4gb3RoZXIgcGFydHMgb2YK LQl0aGUgc2FtZSBzdHJ1Y3QuCi0KLQlFeGFtcGxlOjoKLQotCSAgICAvKiBObyB3YXJuaW5ncyB3 aWxsIGV2ZXIgdHJpZ2dlciBvbiBhY2Nlc3NpbmcgYW55IHBhcnQgb2YgeCAqLwotCSAgICB4ID0g a21hbGxvYyhzaXplb2YgKngsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLX0ZBTFNFX1BPU0lU SVZFKTsKLQotLSBgYGttZW1jaGVja19iaXRmaWVsZF9iZWdpbihuYW1lKWBgL2Bga21lbWNoZWNr X2JpdGZpZWxkX2VuZChuYW1lKWBgIGFuZAotCWBga21lbWNoZWNrX2Fubm90YXRlX2JpdGZpZWxk KHB0ciwgbmFtZSlgYAotCVRoZSBmaXJzdCB0d28gb2YgdGhlc2UgdGhyZWUgbWFjcm9zIGNhbiBi ZSB1c2VkIGluc2lkZSBzdHJ1Y3QKLQlkZWZpbml0aW9ucyB0byBzaWduYWwsIHJlc3BlY3RpdmVs eSwgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEKLQliaXRmaWVsZC4gQWRkaXRpb25hbGx5LCB0 aGlzIHdpbGwgYXNzaWduIHRoZSBiaXRmaWVsZCBhIG5hbWUsIHdoaWNoCi0JaXMgZ2l2ZW4gYXMg YW4gYXJndW1lbnQgdG8gdGhlIG1hY3Jvcy4KLQotCUhhdmluZyB1c2VkIHRoZXNlIG1hcmtlcnMs IG9uZSBjYW4gbGF0ZXIgdXNlCi0Ja21lbWNoZWNrX2Fubm90YXRlX2JpdGZpZWxkKCkgYXQgdGhl IHBvaW50IG9mIGFsbG9jYXRpb24sIHRvIGluZGljYXRlCi0Jd2hpY2ggcGFydHMgb2YgdGhlIGFs bG9jYXRpb24gaXMgcGFydCBvZiBhIGJpdGZpZWxkLgotCi0JRXhhbXBsZTo6Ci0KLQkgICAgc3Ry dWN0IGZvbyB7Ci0JCWludCB4OwotCi0JCWttZW1jaGVja19iaXRmaWVsZF9iZWdpbihmbGFncyk7 Ci0JCWludCBmbGFnX2E6MTsKLQkJaW50IGZsYWdfYjoxOwotCQlrbWVtY2hlY2tfYml0ZmllbGRf ZW5kKGZsYWdzKTsKLQotCQlpbnQgeTsKLQkgICAgfTsKLQotCSAgICBzdHJ1Y3QgZm9vICp4ID0g a21hbGxvYyhzaXplb2YgKngpOwotCi0JICAgIC8qIE5vIHdhcm5pbmdzIHdpbGwgdHJpZ2dlciBv biBhY2Nlc3NpbmcgdGhlIGJpdGZpZWxkIG9mIHggKi8KLQkgICAga21lbWNoZWNrX2Fubm90YXRl X2JpdGZpZWxkKHgsIGZsYWdzKTsKLQotCU5vdGUgdGhhdCBgYGttZW1jaGVja19hbm5vdGF0ZV9i aXRmaWVsZCgpYGAgY2FuIGJlIHVzZWQgZXZlbiBiZWZvcmUgdGhlCi0JcmV0dXJuIHZhbHVlIG9m IGBga21hbGxvYygpYGAgaXMgY2hlY2tlZCAtLSBpbiBvdGhlciB3b3JkcywgcGFzc2luZyBOVUxM Ci0JYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGxlZ2FsIChhbmQgd2lsbCBkbyBub3RoaW5nKS4K LQotCi1SZXBvcnRpbmcgZXJyb3JzCi0tLS0tLS0tLS0tLS0tLS0tCi0KLUFzIHdlIGhhdmUgc2Vl biwga21lbWNoZWNrIHdpbGwgcHJvZHVjZSBmYWxzZSBwb3NpdGl2ZSByZXBvcnRzLiBUaGVyZWZv cmUsIGl0Ci1pcyBub3QgdmVyeSB3aXNlIHRvIGJsaW5kbHkgcG9zdCBrbWVtY2hlY2sgd2Fybmlu Z3MgdG8gbWFpbGluZyBsaXN0cyBhbmQKLW1haW50YWluZXJzLiBJbnN0ZWFkLCBJIGVuY291cmFn ZSBtYWludGFpbmVycyBhbmQgZGV2ZWxvcGVycyB0byBmaW5kIGVycm9ycwotaW4gdGhlaXIgb3du IGNvZGUuIElmIHlvdSBnZXQgYSB3YXJuaW5nLCB5b3UgY2FuIHRyeSB0byB3b3JrIGFyb3VuZCBp dCwgdHJ5Ci10byBmaWd1cmUgb3V0IGlmIGl0J3MgYSByZWFsIGVycm9yIG9yIG5vdCwgb3Igc2lt cGx5IGlnbm9yZSBpdC4gTW9zdAotZGV2ZWxvcGVycyBrbm93IHRoZWlyIG93biBjb2RlIGFuZCB3 aWxsIHF1aWNrbHkgYW5kIGVmZmljaWVudGx5IGRldGVybWluZSB0aGUKLXJvb3QgY2F1c2Ugb2Yg YSBrbWVtY2hlY2sgcmVwb3J0LiBUaGlzIGlzIHRoZXJlZm9yZSBhbHNvIHRoZSBtb3N0IGVmZmlj aWVudAotd2F5IHRvIHdvcmsgd2l0aCBrbWVtY2hlY2suCi0KLVRoYXQgc2FpZCwgd2UgKHRoZSBr bWVtY2hlY2sgbWFpbnRhaW5lcnMpIHdpbGwgYWx3YXlzIGJlIG9uIHRoZSBsb29rb3V0IGZvcgot ZmFsc2UgcG9zaXRpdmVzIHRoYXQgd2UgY2FuIGFubm90YXRlIGFuZCBzaWxlbmNlLiBTbyB3aGF0 ZXZlciB5b3UgZmluZCwKLXBsZWFzZSBkcm9wIHVzIGEgbm90ZSBwcml2YXRlbHkhIEtlcm5lbCBj b25maWdzIGFuZCBzdGVwcyB0byByZXByb2R1Y2UgKGlmCi1hdmFpbGFibGUpIGFyZSBvZiBjb3Vy c2UgYSBncmVhdCBoZWxwIHRvby4KLQotSGFwcHkgaGFja2luZyEKLQotCi1UZWNobmljYWwgZGVz Y3JpcHRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1rbWVtY2hlY2sgd29ya3MgYnkgbWFy a2luZyBtZW1vcnkgcGFnZXMgbm9uLXByZXNlbnQuIFRoaXMgbWVhbnMgdGhhdCB3aGVuZXZlcgot c29tZWJvZHkgYXR0ZW1wdHMgdG8gYWNjZXNzIHRoZSBwYWdlLCBhIHBhZ2UgZmF1bHQgaXMgZ2Vu ZXJhdGVkLiBUaGUgcGFnZQotZmF1bHQgaGFuZGxlciBub3RpY2VzIHRoYXQgdGhlIHBhZ2Ugd2Fz IGluIGZhY3Qgb25seSBoaWRkZW4sIGFuZCBzbyBpdCBjYWxscwotb24gdGhlIGttZW1jaGVjayBj b2RlIHRvIG1ha2UgZnVydGhlciBpbnZlc3RpZ2F0aW9ucy4KLQotV2hlbiB0aGUgaW52ZXN0aWdh dGlvbnMgYXJlIGNvbXBsZXRlZCwga21lbWNoZWNrICJzaG93cyIgdGhlIHBhZ2UgYnkgbWFya2lu ZwotaXQgcHJlc2VudCAoYXMgaXQgd291bGQgYmUgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMp LiBUaGlzIHdheSwgdGhlCi1pbnRlcnJ1cHRlZCBjb2RlIGNhbiBjb250aW51ZSBhcyB1c3VhbC4K LQotQnV0IGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBleGVjdXRlZCwgd2Ugc2hvdWxk IGhpZGUgdGhlIHBhZ2UgYWdhaW4sIHNvCi10aGF0IHdlIGNhbiBjYXRjaCB0aGUgbmV4dCBhY2Nl c3MgdG9vISBOb3cga21lbWNoZWNrIG1ha2VzIHVzZSBvZiBhIGRlYnVnZ2luZwotZmVhdHVyZSBv ZiB0aGUgcHJvY2Vzc29yLCBuYW1lbHkgc2luZ2xlLXN0ZXBwaW5nLiBXaGVuIHRoZSBwcm9jZXNz b3IgaGFzCi1maW5pc2hlZCB0aGUgb25lIGluc3RydWN0aW9uIHRoYXQgZ2VuZXJhdGVkIHRoZSBt ZW1vcnkgYWNjZXNzLCBhIGRlYnVnCi1leGNlcHRpb24gaXMgcmFpc2VkLiBGcm9tIGhlcmUsIHdl IHNpbXBseSBoaWRlIHRoZSBwYWdlIGFnYWluIGFuZCBjb250aW51ZQotZXhlY3V0aW9uLCB0aGlz IHRpbWUgd2l0aCB0aGUgc2luZ2xlLXN0ZXBwaW5nIGZlYXR1cmUgdHVybmVkIG9mZi4KLQota21l bWNoZWNrIHJlcXVpcmVzIHNvbWUgYXNzaXN0YW5jZSBmcm9tIHRoZSBtZW1vcnkgYWxsb2NhdG9y IGluIG9yZGVyIHRvIHdvcmsuCi1UaGUgbWVtb3J5IGFsbG9jYXRvciBuZWVkcyB0bwotCi0gIDEu IFRlbGwga21lbWNoZWNrIGFib3V0IG5ld2x5IGFsbG9jYXRlZCBwYWdlcyBhbmQgcGFnZXMgdGhh dCBhcmUgYWJvdXQgdG8KLSAgICAgYmUgZnJlZWQuIFRoaXMgYWxsb3dzIGttZW1jaGVjayB0byBz ZXQgdXAgYW5kIHRlYXIgZG93biB0aGUgc2hhZG93IG1lbW9yeQotICAgICBmb3IgdGhlIHBhZ2Vz IGluIHF1ZXN0aW9uLiBUaGUgc2hhZG93IG1lbW9yeSBzdG9yZXMgdGhlIHN0YXR1cyBvZiBlYWNo Ci0gICAgIGJ5dGUgaW4gdGhlIGFsbG9jYXRpb24gcHJvcGVyLCBlLmcuIHdoZXRoZXIgaXQgaXMg aW5pdGlhbGl6ZWQgb3IKLSAgICAgdW5pbml0aWFsaXplZC4KLQotICAyLiBUZWxsIGttZW1jaGVj ayB3aGljaCBwYXJ0cyBvZiBtZW1vcnkgc2hvdWxkIGJlIG1hcmtlZCB1bmluaXRpYWxpemVkLgot ICAgICBUaGVyZSBhcmUgYWN0dWFsbHkgYSBmZXcgbW9yZSBzdGF0ZXMsIHN1Y2ggYXMgIm5vdCB5 ZXQgYWxsb2NhdGVkIiBhbmQKLSAgICAgInJlY2VudGx5IGZyZWVkIi4KLQotSWYgYSBzbGFiIGNh Y2hlIGlzIHNldCB1cCB1c2luZyB0aGUgU0xBQl9OT1RSQUNLIGZsYWcsIGl0IHdpbGwgbmV2ZXIg cmV0dXJuCi1tZW1vcnkgdGhhdCBjYW4gdGFrZSBwYWdlIGZhdWx0cyBiZWNhdXNlIG9mIGttZW1j aGVjay4KLQotSWYgYSBzbGFiIGNhY2hlIGlzIE5PVCBzZXQgdXAgdXNpbmcgdGhlIFNMQUJfTk9U UkFDSyBmbGFnLCBjYWxsZXJzIGNhbiBzdGlsbAotcmVxdWVzdCBtZW1vcnkgd2l0aCB0aGUgX19H RlBfTk9UUkFDSyBvciBfX0dGUF9OT1RSQUNLX0ZBTFNFX1BPU0lUSVZFIGZsYWdzLgotVGhpcyBk b2VzIG5vdCBwcmV2ZW50IHRoZSBwYWdlIGZhdWx0cyBmcm9tIG9jY3VycmluZywgaG93ZXZlciwg YnV0IG1hcmtzIHRoZQotb2JqZWN0IGluIHF1ZXN0aW9uIGFzIGJlaW5nIGluaXRpYWxpemVkIHNv IHRoYXQgbm8gd2FybmluZ3Mgd2lsbCBldmVyIGJlCi1wcm9kdWNlZCBmb3IgdGhpcyBvYmplY3Qu Ci0KLUN1cnJlbnRseSwgdGhlIFNMQUIgYW5kIFNMVUIgYWxsb2NhdG9ycyBhcmUgc3VwcG9ydGVk IGJ5IGttZW1jaGVjay4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5k ZXggMzhkM2U0ZWQ3MjA4Li5iM2I3YThjOTk1NjcgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisr KyBiL01BSU5UQUlORVJTCkBAIC03Mjg1LDE2ICs3Mjg1LDYgQEAgRjoJaW5jbHVkZS9saW51eC9r ZGIuaAogRjoJaW5jbHVkZS9saW51eC9rZ2RiLmgKIEY6CWtlcm5lbC9kZWJ1Zy8KIAotS01FTUNI RUNLCi1NOglWZWdhcmQgTm9zc3VtIDx2ZWdhcmRub0BpZmkudWlvLm5vPgotTToJUGVra2EgRW5i ZXJnIDxwZW5iZXJnQGtlcm5lbC5vcmc+Ci1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9u L2Rldi10b29scy9rbWVtY2hlY2sucnN0Ci1GOglhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWVtY2hl Y2suaAotRjoJYXJjaC94ODYvbW0va21lbWNoZWNrLwotRjoJaW5jbHVkZS9saW51eC9rbWVtY2hl Y2suaAotRjoJbW0va21lbWNoZWNrLmMKLQogS01FTUxFQUsKIE06CUNhdGFsaW4gTWFyaW5hcyA8 Y2F0YWxpbi5tYXJpbmFzQGFybS5jb20+CiBTOglNYWludGFpbmVkCmRpZmYgLS1naXQgYS9hcmNo L2FybS9pbmNsdWRlL2FzbS9kbWEtaW9tbXUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1p b21tdS5oCmluZGV4IDJlZjI4MmY5NjY1MS4uMWE2YTg3MGI4ZmQ2IDEwMDY0NAotLS0gYS9hcmNo L2FybS9pbmNsdWRlL2FzbS9kbWEtaW9tbXUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9k bWEtaW9tbXUuaApAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgog I2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVn Lmg+Ci0jaW5jbHVkZSA8bGludXgva21lbWNoZWNrLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5o PgogCiBzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgewpkaWZmIC0tZ2l0IGEvYXJjaC9vcGVucmlz Yy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9k bWEtbWFwcGluZy5oCmluZGV4IDBjMDA3NWYxNzE0NS4uZjE4ODk5Yjk5OTNkIDEwMDY0NAotLS0g YS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9vcGVu cmlzYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0yMyw3ICsyMyw2IEBACiAgKi8KIAog I2luY2x1ZGUgPGxpbnV4L2RtYS1kZWJ1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L2ttZW1jaGVjay5o PgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNkZWZpbmUgRE1BX0VSUk9SX0NP REUJCSh+KGRtYV9hZGRyX3QpMHgwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2Fy Y2gveDg2L0tjb25maWcKaW5kZXggY2M5OGQ1YTI5NGVlLi5jYzE1NWI5MTc1YmMgMTAwNjQ0Ci0t LSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMTAzLDcgKzEw Myw2IEBAIGNvbmZpZyBYODYKIAlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUwKIAlzZWxlY3Qg SEFWRV9BUkNIX0tBU0FOCQkJaWYgWDg2XzY0ICYmIFNQQVJTRU1FTV9WTUVNTUFQCiAJc2VsZWN0 IEhBVkVfQVJDSF9LR0RCCi0Jc2VsZWN0IEhBVkVfQVJDSF9LTUVNQ0hFQ0sKIAlzZWxlY3QgSEFW RV9BUkNIX01NQVBfUk5EX0JJVFMJCWlmIE1NVQogCXNlbGVjdCBIQVZFX0FSQ0hfTU1BUF9STkRf Q09NUEFUX0JJVFMJaWYgTU1VICYmIENPTVBBVAogCXNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9G SUxURVIKQEAgLTEzOTAsNyArMTM4OSw3IEBAIGNvbmZpZyBBUkNIX0RNQV9BRERSX1RfNjRCSVQK IAogY29uZmlnIFg4Nl9ESVJFQ1RfR0JQQUdFUwogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4 Nl82NCAmJiAhREVCVUdfUEFHRUFMTE9DICYmICFLTUVNQ0hFQ0sKKwlkZXBlbmRzIG9uIFg4Nl82 NCAmJiAhREVCVUdfUEFHRUFMTE9DCiAJLS0taGVscC0tLQogCSAgQ2VydGFpbiBrZXJuZWwgZmVh dHVyZXMgZWZmZWN0aXZlbHkgZGlzYWJsZSBrZXJuZWwKIAkgIGxpbmVhciAxIEdCIG1hcHBpbmdz IChldmVuIGlmIHRoZSBDUFUgb3RoZXJ3aXNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmls ZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IDQ5ZDE2MGI3ODFmMC4uZDc5MjYxMjQzNzhkIDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAt MTM4LDExICsxMzgsNiBAQCBpZmRlZiBDT05GSUdfWDg2X1gzMgogZW5kaWYKIGV4cG9ydCBDT05G SUdfWDg2X1gzMl9BQkkKIAotIyBEb24ndCB1bnJvbGwgc3RydWN0IGFzc2lnbm1lbnRzIHdpdGgg a21lbWNoZWNrIGVuYWJsZWQKLWlmZXEgKCQoQ09ORklHX0tNRU1DSEVDSykseSkKLQlLQlVJTERf Q0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLWZuby1idWlsdGluLW1lbWNweSkKLWVuZGlmCi0K ICMKICMgSWYgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyB1c2VkIHdpdGggbWNvdW50IGlu c3RlYWQgb2YgZmVudHJ5LAogIyAnLW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3MnIGlzIG5lZWRl ZCB0byBwcmV2ZW50IGEgR0NDIGJ1ZwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20v ZG1hLW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXgg MDhhMDgzOGI4M2ZiLi5jNjU1ODQ2Mjk1M2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUv YXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcu aApAQCAtNiw3ICs2LDYgQEAKICAqIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgZm9yIGRvY3Vt ZW50YXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2ttZW1jaGVjay5oPgogI2luY2x1ZGUg PGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CiAjaW5j bHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWVtY2hl Y2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ttZW1jaGVjay5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBlZDAxNTE4ZjI5N2UuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9p bmNsdWRlL2FzbS9rbWVtY2hlY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSNp Zm5kZWYgQVNNX1g4Nl9LTUVNQ0hFQ0tfSAotI2RlZmluZSBBU01fWDg2X0tNRU1DSEVDS19ICi0K LSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLQotI2lm ZGVmIENPTkZJR19LTUVNQ0hFQ0sKLWJvb2wga21lbWNoZWNrX2FjdGl2ZShzdHJ1Y3QgcHRfcmVn cyAqcmVncyk7Ci0KLXZvaWQga21lbWNoZWNrX3Nob3coc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwot dm9pZCBrbWVtY2hlY2tfaGlkZShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLWJvb2wga21lbWNo ZWNrX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywg dW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKTsKLWJvb2wga21lbWNoZWNrX3RyYXAoc3RydWN0IHB0 X3JlZ3MgKnJlZ3MpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtY2hlY2tfYWN0aXZl KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlu bGluZSB2b2lkIGttZW1jaGVja19zaG93KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotfQotCi1z dGF0aWMgaW5saW5lIHZvaWQga21lbWNoZWNrX2hpZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtY2hlY2tfZmF1bHQoc3RydWN0IHB0X3JlZ3Mg KnJlZ3MsCi0JdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUp Ci17Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wga21lbWNoZWNrX3Ry YXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmIC8q IENPTkZJR19LTUVNQ0hFQ0sgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNs dWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5 cGVzLmgKaW5kZXggNjI0ODQzMzM2NzNkLi5iYWYwM2JjMjRjNGUgMTAwNjQ0Ci0tLSBhL2FyY2gv eDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2Fz bS9wZ3RhYmxlX3R5cGVzLmgKQEAgLTc2LDExICs3NiwxMSBAQAogI2RlZmluZSBfUEFHRV9LTkxf RVJSQVRVTV9NQVNLIDAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0tNRU1DSEVDSwotI2RlZmlu ZSBfUEFHRV9ISURERU4JKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0hJRERFTikKLSNl bHNlCisvKgorICogVXNlZCBieSBrbWVtY2hlY2sgaW4gdGhlIHBhc3Q7IG9ic29sZXRlLCBidXQg a2VwdCBmb3IgdGhlIHNha2Ugb2YKKyAqIG91dC1vZi10cmVlIG1vZHVsZSBzb3VyY2UgYmFja3dh cmRzIGNvbXBhdGliaWxpdHkuCisgKi8KICNkZWZpbmUgX1BBR0VfSElEREVOCShfQVQocHRldmFs X3QsIDApKQotI2VuZGlmCiAKIC8qCiAgKiBUaGUgc2FtZSBoaWRkZW4gYml0IGlzIHVzZWQgYnkg a21lbWNoZWNrLCBidXQgc2luY2Uga21lbWNoZWNrCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNs dWRlL2FzbS9zdHJpbmdfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ18zMi5oCmlu ZGV4IDNkM2U4MzUzZWU1Yy4uOGE0ZjZmYTQxZDA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNs dWRlL2FzbS9zdHJpbmdfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfMzIu aApAQCAtMTc2LDggKzE3Niw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqX19tZW1jcHkzZCh2b2lk ICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbikKICAqCU5vIDNEIE5vdyEKICAqLwog Ci0jaWZuZGVmIENPTkZJR19LTUVNQ0hFQ0sKLQogI2lmIChfX0dOVUNfXyA+PSA0KQogI2RlZmlu ZSBtZW1jcHkodCwgZiwgbikgX19idWlsdGluX21lbWNweSh0LCBmLCBuKQogI2Vsc2UKQEAgLTE4 NiwxMyArMTg0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkICpfX21lbWNweTNkKHZvaWQgKnRvLCBj b25zdCB2b2lkICpmcm9tLCBzaXplX3QgbGVuKQogCSA/IF9fY29uc3RhbnRfbWVtY3B5KCh0KSwg KGYpLCAobikpCVwKIAkgOiBfX21lbWNweSgodCksIChmKSwgKG4pKSkKICNlbmRpZgotI2Vsc2UK LS8qCi0gKiBrbWVtY2hlY2sgYmVjb21lcyB2ZXJ5IGhhcHB5IGlmIHdlIHVzZSB0aGUgUkVQIGlu c3RydWN0aW9ucyB1bmNvbmRpdGlvbmFsbHksCi0gKiBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgd2Ug a25vdyBib3RoIG1lbW9yeSBvcGVyYW5kcyBpbiBhZHZhbmNlLgotICovCi0jZGVmaW5lIG1lbWNw eSh0LCBmLCBuKSBfX21lbWNweSgodCksIChmKSwgKG4pKQotI2VuZGlmCiAKICNlbmRpZgogCmRp ZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL3N0cmluZ182NC5oCmluZGV4IGExNjQ4NjJkNzdlMy4uNzA5ZjQxYzBhNDYxIDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAorKysgYi9hcmNoL3g4 Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaApAQCAtMzEsNyArMzEsNiBAQCBzdGF0aWMgX19hbHdh eXNfaW5saW5lIHZvaWQgKl9faW5saW5lX21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJv bSwgc2l6ZV90CiBleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9t LCBzaXplX3QgbGVuKTsKIGV4dGVybiB2b2lkICpfX21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9p ZCAqZnJvbSwgc2l6ZV90IGxlbik7CiAKLSNpZm5kZWYgQ09ORklHX0tNRU1DSEVDSwogI2lmIChf X0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDwgMykgfHwgX19HTlVDX18gPCA0CiAjZGVm aW5lIG1lbWNweShkc3QsIHNyYywgbGVuKQkJCQkJXAogKHsJCQkJCQkJCVwKQEAgLTQ0LDEzICs0 Myw2IEBAIGV4dGVybiB2b2lkICpfX21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwg c2l6ZV90IGxlbik7CiAJX19yZXQ7CQkJCQkJCVwKIH0pCiAjZW5kaWYKLSNlbHNlCi0vKgotICog a21lbWNoZWNrIGJlY29tZXMgdmVyeSBoYXBweSBpZiB3ZSB1c2UgdGhlIFJFUCBpbnN0cnVjdGlv bnMgdW5jb25kaXRpb25hbGx5LAotICogYmVjYXVzZSBpdCBtZWFucyB0aGF0IHdlIGtub3cgYm90 aCBtZW1vcnkgb3BlcmFuZHMgaW4gYWR2YW5jZS4KLSAqLwotI2RlZmluZSBtZW1jcHkoZHN0LCBz cmMsIGxlbikgX19pbmxpbmVfbWVtY3B5KChkc3QpLCAoc3JjKSwgKGxlbikpCi0jZW5kaWYKIAog I2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKIHZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywg c2l6ZV90IG4pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veG9yLmggYi9hcmNo L3g4Ni9pbmNsdWRlL2FzbS94b3IuaAppbmRleCAxZjVjNTE2MWVhZDYuLjQ1Yzg2MDU0NjdmMSAx MDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veG9yLmgKKysrIGIvYXJjaC94ODYvaW5j bHVkZS9hc20veG9yLmgKQEAgLTEsNyArMSw0IEBACi0jaWZkZWYgQ09ORklHX0tNRU1DSEVDSwot Lyoga21lbWNoZWNrIGRvZXNuJ3QgaGFuZGxlIE1NWC9TU0UvU1NFMiBpbnN0cnVjdGlvbnMgKi8K LSMgaW5jbHVkZSA8YXNtLWdlbmVyaWMveG9yLmg+Ci0jZWxpZiAhZGVmaW5lZChfQVNNX1g4Nl9Y T1JfSCkKKyNpZm5kZWYgX0FTTV9YODZfWE9SX0gKICNkZWZpbmUgX0FTTV9YODZfWE9SX0gKIAog LyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYyBiL2FyY2gveDg2L2tl cm5lbC9jcHUvaW50ZWwuYwppbmRleCAwNjMxOTc3NzFiOGQuLjRhYjY1NjM4MTcwZiAxMDA2NDQK LS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9j cHUvaW50ZWwuYwpAQCAtMTkwLDIxICsxOTAsNiBAQCBzdGF0aWMgdm9pZCBlYXJseV9pbml0X2lu dGVsKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAlpZiAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21v ZGVsIDwgMTUpCiAJCWNsZWFyX2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUEFUKTsKIAotI2lmZGVm IENPTkZJR19LTUVNQ0hFQ0sKLQkvKgotCSAqIFA0cyBoYXZlIGEgImZhc3Qgc3RyaW5ncyIgZmVh dHVyZSB3aGljaCBjYXVzZXMgc2luZ2xlLQotCSAqIHN0ZXBwaW5nIFJFUCBpbnN0cnVjdGlvbnMg dG8gb25seSBnZW5lcmF0ZSBhICNEQiBvbgotCSAqIGNhY2hlLWxpbmUgYm91bmRhcmllcy4KLQkg KgotCSAqIEluZ28gTW9sbmFyIHJlcG9ydGVkIGEgUGVudGl1bSBEIChtb2RlbCA2KSBhbmQgYSBY ZW9uCi0JICogKG1vZGVsIDIpIHdpdGggdGhlIHNhbWUgcHJvYmxlbS4KLQkgKi8KLQlpZiAoYy0+ eDg2ID09IDE1KQotCQlpZiAobXNyX2NsZWFyX2JpdChNU1JfSUEzMl9NSVNDX0VOQUJMRSwKLQkJ CQkgIE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZBU1RfU1RSSU5HX0JJVCkgPiAwKQotCQkJcHJfaW5m bygia21lbWNoZWNrOiBEaXNhYmxpbmcgZmFzdCBzdHJpbmcgb3BlcmF0aW9uc1xuIik7Ci0jZW5k aWYKLQogCS8qCiAJICogSWYgZmFzdCBzdHJpbmcgaXMgbm90IGVuYWJsZWQgaW4gSUEzMl9NSVND X0VOQUJMRSBmb3IgYW55IHJlYXNvbiwKIAkgKiBjbGVhciB0aGUgZmFzdCBzdHJpbmcgYW5kIGVu aGFuY2VkIGZhc3Qgc3RyaW5nIENQVSBjYXBhYmlsaXRpZXMuCmRpZmYgLS1naXQgYS9hcmNoL3g4 Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCmluZGV4IDRlNDk2Mzc5 YTg3MS4uZDcwMDcyNTdhZTcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwor KysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUg PGxpbnV4L2VkYWMuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL2ttZW1jaGVjay5oPgogI2lu Y2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2lu Y2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgpAQCAtNzE4LDEwICs3MTcsNiBAQCBkb3RyYXBsaW5rYWdl IHZvaWQgZG9fZGVidWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKIAlp ZiAoIWRyNiAmJiB1c2VyX21vZGUocmVncykpCiAJCXVzZXJfaWNlYnAgPSAxOwogCi0JLyogQ2F0 Y2gga21lbWNoZWNrIGNvbmRpdGlvbnMhICovCi0JaWYgKChkcjYgJiBEUl9TVEVQKSAmJiBrbWVt Y2hlY2tfdHJhcChyZWdzKSkKLQkJZ290byBleGl0OwotCiAJLyogU3RvcmUgdGhlIHZpcnR1YWxp emVkIERSNiB2YWx1ZSAqLwogCXRzay0+dGhyZWFkLmRlYnVncmVnNiA9IGRyNjsKIApkaWZmIC0t Z2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCA5 NmQyYjg0N2UwOWUuLmI5MGZkZmI3OTIwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZp bGUKKysrIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKQEAgLTIxLDggKzIxLDYgQEAgb2JqLSQoQ09O RklHX1g4Nl9QVERVTVApCSs9IGRlYnVnX3BhZ2V0YWJsZXMubwogCiBvYmotJChDT05GSUdfSElH SE1FTSkJCSs9IGhpZ2htZW1fMzIubwogCi1vYmotJChDT05GSUdfS01FTUNIRUNLKQkJKz0ga21l bWNoZWNrLwotCiBLQVNBTl9TQU5JVElaRV9rYXNhbl9pbml0XyQoQklUUykubyA6PSBuCiBvYmot JChDT05GSUdfS0FTQU4pCQkrPSBrYXNhbl9pbml0XyQoQklUUykubwogCmRpZmYgLS1naXQgYS9h cmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuYwppbmRleCA0MjhlMzE3NjNj YjkuLjA5OWMyNTZjMzdhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYworKysgYi9h cmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8YXNtL2NwdWZl YXR1cmUuaD4JCS8qIGJvb3RfY3B1X2hhcywgLi4uCQkqLwogI2luY2x1ZGUgPGFzbS90cmFwcy5o PgkJCS8qIGRvdHJhcGxpbmthZ2UsIC4uLgkJKi8KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgkJ LyogcGdkXyooKSwgLi4uCQkJKi8KLSNpbmNsdWRlIDxhc20va21lbWNoZWNrLmg+CQkvKiBrbWVt Y2hlY2tfKigpLCAuLi4JCSovCiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgkJCS8qIFZTWVNDQUxM X0FERFIJCSovCiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CQkvKiBlbXVsYXRlX3ZzeXNjYWxs CQkqLwogI2luY2x1ZGUgPGFzbS92bTg2Lmg+CQkJLyogc3RydWN0IHZtODYJCQkqLwpAQCAtMTIy OCw4ICsxMjI3LDYgQEAgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNp Z25lZCBsb25nIGVycm9yX2NvZGUsCiAJICogRGV0ZWN0IGFuZCBoYW5kbGUgaW5zdHJ1Y3Rpb25z IHRoYXQgd291bGQgY2F1c2UgYSBwYWdlIGZhdWx0IGZvcgogCSAqIGJvdGggYSB0cmFja2VkIGtl cm5lbCBwYWdlIGFuZCBhIHVzZXJzcGFjZSBwYWdlLgogCSAqLwotCWlmIChrbWVtY2hlY2tfYWN0 aXZlKHJlZ3MpKQotCQlrbWVtY2hlY2tfaGlkZShyZWdzKTsKIAlwcmVmZXRjaHcoJm1tLT5tbWFw X3NlbSk7CiAKIAlpZiAodW5saWtlbHkoa21taW9fZmF1bHQocmVncywgYWRkcmVzcykpKQpAQCAt MTI1Miw5ICsxMjQ5LDYgQEAgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1 bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCiAJCWlmICghKGVycm9yX2NvZGUgJiAoUEZfUlNWRCB8 IFBGX1VTRVIgfCBQRl9QUk9UKSkpIHsKIAkJCWlmICh2bWFsbG9jX2ZhdWx0KGFkZHJlc3MpID49 IDApCiAJCQkJcmV0dXJuOwotCi0JCQlpZiAoa21lbWNoZWNrX2ZhdWx0KHJlZ3MsIGFkZHJlc3Ms IGVycm9yX2NvZGUpKQotCQkJCXJldHVybjsKIAkJfQogCiAJCS8qIENhbiBoYW5kbGUgYSBzdGFs ZSBSTy0+UlcgVExCOiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94 ODYvbW0vaW5pdC5jCmluZGV4IDg4OWU3NjE5YTA5MS4uOWNmYTI3Mzg1YzI5IDEwMDY0NAotLS0g YS9hcmNoL3g4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC0xNjEsMTYg KzE2MSwxMyBAQCBzdGF0aWMgaW50IHBhZ2Vfc2l6ZV9tYXNrOwogCiBzdGF0aWMgdm9pZCBfX2lu aXQgcHJvYmVfcGFnZV9zaXplX21hc2sodm9pZCkKIHsKLSNpZiAhZGVmaW5lZChDT05GSUdfS01F TUNIRUNLKQogCS8qCi0JICogRm9yIENPTkZJR19LTUVNQ0hFQ0sgb3IgcGFnZWFsbG9jIGRlYnVn Z2luZywgaWRlbnRpdHkgbWFwcGluZyB3aWxsCi0JICogdXNlIHNtYWxsIHBhZ2VzLgorCSAqIEZv ciBwYWdlYWxsb2MgZGVidWdnaW5nLCBpZGVudGl0eSBtYXBwaW5nIHdpbGwgdXNlIHNtYWxsIHBh Z2VzLgogCSAqIFRoaXMgd2lsbCBzaW1wbGlmeSBjcGEoKSwgd2hpY2ggb3RoZXJ3aXNlIG5lZWRz IHRvIHN1cHBvcnQgc3BsaXR0aW5nCiAJICogbGFyZ2UgcGFnZXMgaW50byBzbWFsbCBpbiBpbnRl cnJ1cHQgY29udGV4dCwgZXRjLgogCSAqLwogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVf UFNFKSAmJiAhZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKSkKIAkJcGFnZV9zaXplX21hc2sgfD0g MSA8PCBQR19MRVZFTF8yTTsKLSNlbmRpZgogCiAJLyogRW5hYmxlIFBTRSBpZiBhdmFpbGFibGUg Ki8KIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BTRSkpCmRpZmYgLS1naXQgYS9hcmNo L3g4Ni9tbS9rbWVtY2hlY2svTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svTWFrZWZp bGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMGIzYmNlNDA5NS4uMDAwMDAwMDAw MDAwCi0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBA IC0xICswLDAgQEAKLW9iai15IDo9IGVycm9yLm8ga21lbWNoZWNrLm8gb3Bjb2RlLm8gcHRlLm8g c2VsZnRlc3QubyBzaGFkb3cubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2Vy cm9yLmMgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svZXJyb3IuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggZGFiNDE4NzZjZGQ1Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbW0v a21lbWNoZWNrL2Vycm9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotI2luY2x1 ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgotI2luY2x1 ZGUgPGxpbnV4L2ttZW1jaGVjay5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8 bGludXgvc3RhY2t0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi0jaW5jbHVk ZSAiZXJyb3IuaCIKLSNpbmNsdWRlICJzaGFkb3cuaCIKLQotZW51bSBrbWVtY2hlY2tfZXJyb3Jf dHlwZSB7Ci0JS01FTUNIRUNLX0VSUk9SX0lOVkFMSURfQUNDRVNTLAotCUtNRU1DSEVDS19FUlJP Ul9CVUcsCi19OwotCi0jZGVmaW5lIFNIQURPV19DT1BZX1NJWkUgKDEgPDwgQ09ORklHX0tNRU1D SEVDS19TSEFET1dfQ09QWV9TSElGVCkKLQotc3RydWN0IGttZW1jaGVja19lcnJvciB7Ci0JZW51 bSBrbWVtY2hlY2tfZXJyb3JfdHlwZSB0eXBlOwotCi0JdW5pb24gewotCQkvKiBLTUVNQ0hFQ0tf RVJST1JfSU5WQUxJRF9BQ0NFU1MgKi8KLQkJc3RydWN0IHsKLQkJCS8qIEtpbmQgb2YgYWNjZXNz IHRoYXQgY2F1c2VkIHRoZSBlcnJvciAqLwotCQkJZW51bSBrbWVtY2hlY2tfc2hhZG93IHN0YXRl OwotCQkJLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgZXJyb25lb3VzIHJlYWQgKi8KLQkJCXVu c2lnbmVkIGxvbmcJYWRkcmVzczsKLQkJCXVuc2lnbmVkIGludAlzaXplOwotCQl9OwotCX07Ci0K LQlzdHJ1Y3QgcHRfcmVncwkJcmVnczsKLQlzdHJ1Y3Qgc3RhY2tfdHJhY2UJdHJhY2U7Ci0JdW5z aWduZWQgbG9uZwkJdHJhY2VfZW50cmllc1szMl07Ci0KLQkvKiBXZSBjb21wcmVzcyBpdCB0byBh IGNoYXIuICovCi0JdW5zaWduZWQgY2hhcgkJc2hhZG93X2NvcHlbU0hBRE9XX0NPUFlfU0laRV07 Ci0JdW5zaWduZWQgY2hhcgkJbWVtb3J5X2NvcHlbU0hBRE9XX0NPUFlfU0laRV07Ci19OwotCi0v KgotICogQ3JlYXRlIGEgcmluZyBxdWV1ZSBvZiBlcnJvcnMgdG8gb3V0cHV0LiBXZSBjYW4ndCBj YWxsIHByaW50aygpIGRpcmVjdGx5Ci0gKiBmcm9tIHRoZSBrbWVtY2hlY2sgdHJhcHMsIHNpbmNl IHRoaXMgbWF5IGNhbGwgdGhlIGNvbnNvbGUgZHJpdmVycyBhbmQKLSAqIHJlc3VsdCBpbiBhIHJl Y3Vyc2l2ZSBmYXVsdC4KLSAqLwotc3RhdGljIHN0cnVjdCBrbWVtY2hlY2tfZXJyb3IgZXJyb3Jf Zmlmb1tDT05GSUdfS01FTUNIRUNLX1FVRVVFX1NJWkVdOwotc3RhdGljIHVuc2lnbmVkIGludCBl cnJvcl9jb3VudDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZXJyb3JfcmQ7Ci1zdGF0aWMgdW5zaWdu ZWQgaW50IGVycm9yX3dyOwotc3RhdGljIHVuc2lnbmVkIGludCBlcnJvcl9taXNzZWRfY291bnQ7 Ci0KLXN0YXRpYyBzdHJ1Y3Qga21lbWNoZWNrX2Vycm9yICplcnJvcl9uZXh0X3dyKHZvaWQpCi17 Ci0Jc3RydWN0IGttZW1jaGVja19lcnJvciAqZTsKLQotCWlmIChlcnJvcl9jb3VudCA9PSBBUlJB WV9TSVpFKGVycm9yX2ZpZm8pKSB7Ci0JCSsrZXJyb3JfbWlzc2VkX2NvdW50OwotCQlyZXR1cm4g TlVMTDsKLQl9Ci0KLQllID0gJmVycm9yX2ZpZm9bZXJyb3Jfd3JdOwotCWlmICgrK2Vycm9yX3dy ID09IEFSUkFZX1NJWkUoZXJyb3JfZmlmbykpCi0JCWVycm9yX3dyID0gMDsKLQkrK2Vycm9yX2Nv dW50OwotCXJldHVybiBlOwotfQotCi1zdGF0aWMgc3RydWN0IGttZW1jaGVja19lcnJvciAqZXJy b3JfbmV4dF9yZCh2b2lkKQotewotCXN0cnVjdCBrbWVtY2hlY2tfZXJyb3IgKmU7Ci0KLQlpZiAo ZXJyb3JfY291bnQgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQllID0gJmVycm9yX2ZpZm9bZXJy b3JfcmRdOwotCWlmICgrK2Vycm9yX3JkID09IEFSUkFZX1NJWkUoZXJyb3JfZmlmbykpCi0JCWVy cm9yX3JkID0gMDsKLQktLWVycm9yX2NvdW50OwotCXJldHVybiBlOwotfQotCi12b2lkIGttZW1j aGVja19lcnJvcl9yZWNhbGwodm9pZCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqZGVzY1tdID0g ewotCQlbS01FTUNIRUNLX1NIQURPV19VTkFMTE9DQVRFRF0JCT0gInVuYWxsb2NhdGVkIiwKLQkJ W0tNRU1DSEVDS19TSEFET1dfVU5JTklUSUFMSVpFRF0JPSAidW5pbml0aWFsaXplZCIsCi0JCVtL TUVNQ0hFQ0tfU0hBRE9XX0lOSVRJQUxJWkVEXQkJPSAiaW5pdGlhbGl6ZWQiLAotCQlbS01FTUNI RUNLX1NIQURPV19GUkVFRF0JCT0gImZyZWVkIiwKLQl9OwotCi0Jc3RhdGljIGNvbnN0IGNoYXIg c2hvcnRfZGVzY1tdID0gewotCQlbS01FTUNIRUNLX1NIQURPV19VTkFMTE9DQVRFRF0JCT0gJ2En LAotCQlbS01FTUNIRUNLX1NIQURPV19VTklOSVRJQUxJWkVEXQk9ICd1JywKLQkJW0tNRU1DSEVD S19TSEFET1dfSU5JVElBTElaRURdCQk9ICdpJywKLQkJW0tNRU1DSEVDS19TSEFET1dfRlJFRURd CQk9ICdmJywKLQl9OwotCi0Jc3RydWN0IGttZW1jaGVja19lcnJvciAqZTsKLQl1bnNpZ25lZCBp bnQgaTsKLQotCWUgPSBlcnJvcl9uZXh0X3JkKCk7Ci0JaWYgKCFlKQotCQlyZXR1cm47Ci0KLQlz d2l0Y2ggKGUtPnR5cGUpIHsKLQljYXNlIEtNRU1DSEVDS19FUlJPUl9JTlZBTElEX0FDQ0VTUzoK LQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzoga21lbWNoZWNrOiBDYXVnaHQgJWQtYml0 IHJlYWQgZnJvbSAlcyBtZW1vcnkgKCVwKVxuIiwKLQkJCTggKiBlLT5zaXplLCBlLT5zdGF0ZSA8 IEFSUkFZX1NJWkUoZGVzYykgPwotCQkJCWRlc2NbZS0+c3RhdGVdIDogIihpbnZhbGlkIHNoYWRv dyBzdGF0ZSkiLAotCQkJKHZvaWQgKikgZS0+YWRkcmVzcyk7Ci0KLQkJcHJpbnRrKEtFUk5fV0FS TklORyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBTSEFET1dfQ09QWV9TSVpFOyArK2kpCi0JCQlwcmlu dGsoS0VSTl9DT05UICIlMDJ4IiwgZS0+bWVtb3J5X2NvcHlbaV0pOwotCQlwcmludGsoS0VSTl9D T05UICJcbiIpOwotCi0JCXByaW50ayhLRVJOX1dBUk5JTkcpOwotCQlmb3IgKGkgPSAwOyBpIDwg U0hBRE9XX0NPUFlfU0laRTsgKytpKSB7Ci0JCQlpZiAoZS0+c2hhZG93X2NvcHlbaV0gPCBBUlJB WV9TSVpFKHNob3J0X2Rlc2MpKQotCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlYyIsIHNob3J0X2Rl c2NbZS0+c2hhZG93X2NvcHlbaV1dKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9DT05UICIg PyIpOwotCQl9Ci0JCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCXByaW50ayhLRVJOX1dBUk5J TkcgIiUqY1xuIiwgMiArIDIKLQkJCSogKGludCkgKGUtPmFkZHJlc3MgJiAoU0hBRE9XX0NPUFlf U0laRSAtIDEpKSwgJ14nKTsKLQkJYnJlYWs7Ci0JY2FzZSBLTUVNQ0hFQ0tfRVJST1JfQlVHOgot CQlwcmludGsoS0VSTl9FTUVSRyAiRVJST1I6IGttZW1jaGVjazogRmF0YWwgZXJyb3JcbiIpOwot CQlicmVhazsKLQl9Ci0KLQlfX3Nob3dfcmVncygmZS0+cmVncywgMSk7Ci0JcHJpbnRfc3RhY2tf dHJhY2UoJmUtPnRyYWNlLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fd2FrZXVwKHVuc2lnbmVk IGxvbmcgZGF0YSkKLXsKLQl3aGlsZSAoZXJyb3JfY291bnQgPiAwKQotCQlrbWVtY2hlY2tfZXJy b3JfcmVjYWxsKCk7Ci0KLQlpZiAoZXJyb3JfbWlzc2VkX2NvdW50ID4gMCkgewotCQlwcmludGso S0VSTl9XQVJOSU5HICJrbWVtY2hlY2s6IExvc3QgJWQgZXJyb3IgcmVwb3J0cyBiZWNhdXNlICIK LQkJCSJ0aGUgcXVldWUgd2FzIHRvbyBzbWFsbFxuIiwgZXJyb3JfbWlzc2VkX2NvdW50KTsKLQkJ ZXJyb3JfbWlzc2VkX2NvdW50ID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyBERUNMQVJFX1RBU0tMRVQo a21lbWNoZWNrX3Rhc2tsZXQsICZkb193YWtldXAsIDApOwotCi0vKgotICogU2F2ZSB0aGUgY29u dGV4dCBvZiBhbiBlcnJvciByZXBvcnQuCi0gKi8KLXZvaWQga21lbWNoZWNrX2Vycm9yX3NhdmUo ZW51bSBrbWVtY2hlY2tfc2hhZG93IHN0YXRlLAotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5z aWduZWQgaW50IHNpemUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0YXRpYyB1bnNpZ25l ZCBsb25nIHByZXZfaXA7Ci0KLQlzdHJ1Y3Qga21lbWNoZWNrX2Vycm9yICplOwotCXZvaWQgKnNo YWRvd19jb3B5OwotCXZvaWQgKm1lbW9yeV9jb3B5OwotCi0JLyogRG9uJ3QgcmVwb3J0IHNldmVy YWwgYWRqYWNlbnQgZXJyb3JzIGZyb20gdGhlIHNhbWUgRUlQLiAqLwotCWlmIChyZWdzLT5pcCA9 PSBwcmV2X2lwKQotCQlyZXR1cm47Ci0JcHJldl9pcCA9IHJlZ3MtPmlwOwotCi0JZSA9IGVycm9y X25leHRfd3IoKTsKLQlpZiAoIWUpCi0JCXJldHVybjsKLQotCWUtPnR5cGUgPSBLTUVNQ0hFQ0tf RVJST1JfSU5WQUxJRF9BQ0NFU1M7Ci0KLQllLT5zdGF0ZSA9IHN0YXRlOwotCWUtPmFkZHJlc3Mg PSBhZGRyZXNzOwotCWUtPnNpemUgPSBzaXplOwotCi0JLyogU2F2ZSByZWdzICovCi0JbWVtY3B5 KCZlLT5yZWdzLCByZWdzLCBzaXplb2YoKnJlZ3MpKTsKLQotCS8qIFNhdmUgc3RhY2sgdHJhY2Ug Ki8KLQllLT50cmFjZS5ucl9lbnRyaWVzID0gMDsKLQllLT50cmFjZS5lbnRyaWVzID0gZS0+dHJh Y2VfZW50cmllczsKLQllLT50cmFjZS5tYXhfZW50cmllcyA9IEFSUkFZX1NJWkUoZS0+dHJhY2Vf ZW50cmllcyk7Ci0JZS0+dHJhY2Uuc2tpcCA9IDA7Ci0Jc2F2ZV9zdGFja190cmFjZV9yZWdzKHJl Z3MsICZlLT50cmFjZSk7Ci0KLQkvKiBSb3VuZCBhZGRyZXNzIGRvd24gdG8gbmVhcmVzdCAxNiBi eXRlcyAqLwotCXNoYWRvd19jb3B5ID0ga21lbWNoZWNrX3NoYWRvd19sb29rdXAoYWRkcmVzcwot CQkmIH4oU0hBRE9XX0NPUFlfU0laRSAtIDEpKTsKLQlCVUdfT04oIXNoYWRvd19jb3B5KTsKLQot CW1lbWNweShlLT5zaGFkb3dfY29weSwgc2hhZG93X2NvcHksIFNIQURPV19DT1BZX1NJWkUpOwot Ci0Ja21lbWNoZWNrX3Nob3dfYWRkcihhZGRyZXNzKTsKLQltZW1vcnlfY29weSA9ICh2b2lkICop IChhZGRyZXNzICYgfihTSEFET1dfQ09QWV9TSVpFIC0gMSkpOwotCW1lbWNweShlLT5tZW1vcnlf Y29weSwgbWVtb3J5X2NvcHksIFNIQURPV19DT1BZX1NJWkUpOwotCWttZW1jaGVja19oaWRlX2Fk ZHIoYWRkcmVzcyk7Ci0KLQl0YXNrbGV0X2hpX3NjaGVkdWxlX2ZpcnN0KCZrbWVtY2hlY2tfdGFz a2xldCk7Ci19Ci0KLS8qCi0gKiBTYXZlIHRoZSBjb250ZXh0IG9mIGEga21lbWNoZWNrIGJ1Zy4K LSAqLwotdm9pZCBrbWVtY2hlY2tfZXJyb3Jfc2F2ZV9idWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3Mp Ci17Ci0Jc3RydWN0IGttZW1jaGVja19lcnJvciAqZTsKLQotCWUgPSBlcnJvcl9uZXh0X3dyKCk7 Ci0JaWYgKCFlKQotCQlyZXR1cm47Ci0KLQllLT50eXBlID0gS01FTUNIRUNLX0VSUk9SX0JVRzsK LQotCW1lbWNweSgmZS0+cmVncywgcmVncywgc2l6ZW9mKCpyZWdzKSk7Ci0KLQllLT50cmFjZS5u cl9lbnRyaWVzID0gMDsKLQllLT50cmFjZS5lbnRyaWVzID0gZS0+dHJhY2VfZW50cmllczsKLQll LT50cmFjZS5tYXhfZW50cmllcyA9IEFSUkFZX1NJWkUoZS0+dHJhY2VfZW50cmllcyk7Ci0JZS0+ dHJhY2Uuc2tpcCA9IDE7Ci0Jc2F2ZV9zdGFja190cmFjZSgmZS0+dHJhY2UpOwotCi0JdGFza2xl dF9oaV9zY2hlZHVsZV9maXJzdCgma21lbWNoZWNrX3Rhc2tsZXQpOwotfQpkaWZmIC0tZ2l0IGEv YXJjaC94ODYvbW0va21lbWNoZWNrL2Vycm9yLmggYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svZXJy b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVmYzJlOGQwYTIwLi4wMDAwMDAw MDAwMDAKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2Vycm9yLmgKKysrIC9kZXYvbnVsbApA QCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIEFSQ0hfX1g4Nl9fTU1fX0tNRU1DSEVDS19fRVJST1Jf SAotI2RlZmluZSBBUkNIX19YODZfX01NX19LTUVNQ0hFQ0tfX0VSUk9SX0gKLQotI2luY2x1ZGUg PGxpbnV4L3B0cmFjZS5oPgotCi0jaW5jbHVkZSAic2hhZG93LmgiCi0KLXZvaWQga21lbWNoZWNr X2Vycm9yX3NhdmUoZW51bSBrbWVtY2hlY2tfc2hhZG93IHN0YXRlLAotCXVuc2lnbmVkIGxvbmcg YWRkcmVzcywgdW5zaWduZWQgaW50IHNpemUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotdm9p ZCBrbWVtY2hlY2tfZXJyb3Jfc2F2ZV9idWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi12b2lk IGttZW1jaGVja19lcnJvcl9yZWNhbGwodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJj aC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL2tt ZW1jaGVjay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTE1YmFlMzZiYmUuLjAw MDAwMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKKysrIC9k ZXYvbnVsbApAQCAtMSw2NTggKzAsMCBAQAotLyoqCi0gKiBrbWVtY2hlY2sgLSBhIGhlYXZ5d2Vp Z2h0IG1lbW9yeSBjaGVja2VyIGZvciB0aGUgbGludXgga2VybmVsCi0gKiBDb3B5cmlnaHQgKEMp IDIwMDcsIDIwMDggIFZlZ2FyZCBOb3NzdW0gPHZlZ2FyZG5vQGlmaS51aW8ubm8+Ci0gKiAoV2l0 aCBhIGxvdCBvZiBoZWxwIGZyb20gSW5nbyBNb2xuYXIgYW5kIFBla2thIEVuYmVyZy4pCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5j bHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KLSNp bmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KLSNpbmNs dWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRl IDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8 YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20va21lbWNoZWNrLmg+Ci0jaW5jbHVkZSA8 YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLQotI2luY2x1ZGUgImVy cm9yLmgiCi0jaW5jbHVkZSAib3Bjb2RlLmgiCi0jaW5jbHVkZSAicHRlLmgiCi0jaW5jbHVkZSAi c2VsZnRlc3QuaCIKLSNpbmNsdWRlICJzaGFkb3cuaCIKLQotCi0jaWZkZWYgQ09ORklHX0tNRU1D SEVDS19ESVNBQkxFRF9CWV9ERUZBVUxUCi0jICBkZWZpbmUgS01FTUNIRUNLX0VOQUJMRUQgMAot I2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfS01FTUNIRUNLX0VOQUJMRURfQllfREVGQVVMVAotIyAg ZGVmaW5lIEtNRU1DSEVDS19FTkFCTEVEIDEKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0tNRU1D SEVDS19PTkVTSE9UX0JZX0RFRkFVTFQKLSMgIGRlZmluZSBLTUVNQ0hFQ0tfRU5BQkxFRCAyCi0j ZW5kaWYKLQotaW50IGttZW1jaGVja19lbmFibGVkID0gS01FTUNIRUNLX0VOQUJMRUQ7Ci0KLWlu dCBfX2luaXQga21lbWNoZWNrX2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JLyoK LQkgKiBMaW1pdCBTTVAgdG8gdXNlIGEgc2luZ2xlIENQVS4gV2UgcmVseSBvbiB0aGUgZmFjdCB0 aGF0IHRoaXMgY29kZQotCSAqIHJ1bnMgYmVmb3JlIFNNUCBpcyBzZXQgdXAuCi0JICovCi0JaWYg KHNldHVwX21heF9jcHVzID4gMSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkia21lbWNoZWNr OiBMaW1pdGluZyBudW1iZXIgb2YgQ1BVcyB0byAxLlxuIik7Ci0JCXNldHVwX21heF9jcHVzID0g MTsKLQl9Ci0jZW5kaWYKLQotCWlmICgha21lbWNoZWNrX3NlbGZ0ZXN0KCkpIHsKLQkJcHJpbnRr KEtFUk5fSU5GTyAia21lbWNoZWNrOiBzZWxmLXRlc3RzIGZhaWxlZDsgZGlzYWJsaW5nXG4iKTsK LQkJa21lbWNoZWNrX2VuYWJsZWQgPSAwOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwcmlu dGsoS0VSTl9JTkZPICJrbWVtY2hlY2s6IEluaXRpYWxpemVkXG4iKTsKLQlyZXR1cm4gMDsKLX0K LQotZWFybHlfaW5pdGNhbGwoa21lbWNoZWNrX2luaXQpOwotCi0vKgotICogV2UgbmVlZCB0byBw YXJzZSB0aGUga21lbWNoZWNrPSBvcHRpb24gYmVmb3JlIGFueSBtZW1vcnkgaXMgYWxsb2NhdGVk LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9rbWVtY2hlY2soY2hhciAqc3RyKQotewot CWludCB2YWw7Ci0JaW50IHJldDsKLQotCWlmICghc3RyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQot CXJldCA9IGtzdHJ0b2ludChzdHIsIDAsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7 Ci0Ja21lbWNoZWNrX2VuYWJsZWQgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLWVhcmx5X3BhcmFt KCJrbWVtY2hlY2siLCBwYXJhbV9rbWVtY2hlY2spOwotCi1pbnQga21lbWNoZWNrX3Nob3dfYWRk cih1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JcHRlX3QgKnB0ZTsKLQotCXB0ZSA9IGttZW1j aGVja19wdGVfbG9va3VwKGFkZHJlc3MpOwotCWlmICghcHRlKQotCQlyZXR1cm4gMDsKLQotCXNl dF9wdGUocHRlLCBfX3B0ZShwdGVfdmFsKCpwdGUpIHwgX1BBR0VfUFJFU0VOVCkpOwotCV9fZmx1 c2hfdGxiX29uZShhZGRyZXNzKTsKLQlyZXR1cm4gMTsKLX0KLQotaW50IGttZW1jaGVja19oaWRl X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXB0ZV90ICpwdGU7Ci0KLQlwdGUgPSBr bWVtY2hlY2tfcHRlX2xvb2t1cChhZGRyZXNzKTsKLQlpZiAoIXB0ZSkKLQkJcmV0dXJuIDA7Ci0K LQlzZXRfcHRlKHB0ZSwgX19wdGUocHRlX3ZhbCgqcHRlKSAmIH5fUEFHRV9QUkVTRU5UKSk7Ci0J X19mbHVzaF90bGJfb25lKGFkZHJlc3MpOwotCXJldHVybiAxOwotfQotCi1zdHJ1Y3Qga21lbWNo ZWNrX2NvbnRleHQgewotCWJvb2wgYnVzeTsKLQlpbnQgYmFsYW5jZTsKLQotCS8qCi0JICogVGhl cmUgY2FuIGJlIGF0IG1vc3QgdHdvIG1lbW9yeSBvcGVyYW5kcyB0byBhbiBpbnN0cnVjdGlvbiwg YnV0Ci0JICogZWFjaCBhZGRyZXNzIGNhbiBjcm9zcyBhIHBhZ2UgYm91bmRhcnkgLS0gc28gd2Ug bWF5IG5lZWQgdXAgdG8KLQkgKiBmb3VyIGFkZHJlc3NlcyB0aGF0IG11c3QgYmUgaGlkZGVuL3Jl dmVhbGVkIGZvciBlYWNoIGZhdWx0LgotCSAqLwotCXVuc2lnbmVkIGxvbmcgYWRkcls0XTsKLQl1 bnNpZ25lZCBsb25nIG5fYWRkcnM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIERhdGEg c2l6ZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgYSBmYXVsdC4gKi8KLQl1bnNpZ25l ZCBpbnQgc2l6ZTsKLX07Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga21lbWNoZWNr X2NvbnRleHQsIGttZW1jaGVja19jb250ZXh0KTsKLQotYm9vbCBrbWVtY2hlY2tfYWN0aXZlKHN0 cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBrbWVtY2hlY2tfY29udGV4dCAqZGF0YSA9 IHRoaXNfY3B1X3B0cigma21lbWNoZWNrX2NvbnRleHQpOwotCi0JcmV0dXJuIGRhdGEtPmJhbGFu Y2UgPiAwOwotfQotCi0vKiBTYXZlIGFuIGFkZHJlc3MgdGhhdCBuZWVkcyB0byBiZSBzaG93bi9o aWRkZW4gKi8KLXN0YXRpYyB2b2lkIGttZW1jaGVja19zYXZlX2FkZHIodW5zaWduZWQgbG9uZyBh ZGRyKQotewotCXN0cnVjdCBrbWVtY2hlY2tfY29udGV4dCAqZGF0YSA9IHRoaXNfY3B1X3B0cigm a21lbWNoZWNrX2NvbnRleHQpOwotCi0JQlVHX09OKGRhdGEtPm5fYWRkcnMgPj0gQVJSQVlfU0la RShkYXRhLT5hZGRyKSk7Ci0JZGF0YS0+YWRkcltkYXRhLT5uX2FkZHJzKytdID0gYWRkcjsKLX0K LQotc3RhdGljIHVuc2lnbmVkIGludCBrbWVtY2hlY2tfc2hvd19hbGwodm9pZCkKLXsKLQlzdHJ1 Y3Qga21lbWNoZWNrX2NvbnRleHQgKmRhdGEgPSB0aGlzX2NwdV9wdHIoJmttZW1jaGVja19jb250 ZXh0KTsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgbjsKLQotCW4gPSAwOwotCWZv ciAoaSA9IDA7IGkgPCBkYXRhLT5uX2FkZHJzOyArK2kpCi0JCW4gKz0ga21lbWNoZWNrX3Nob3df YWRkcihkYXRhLT5hZGRyW2ldKTsKLQotCXJldHVybiBuOwotfQotCi1zdGF0aWMgdW5zaWduZWQg aW50IGttZW1jaGVja19oaWRlX2FsbCh2b2lkKQotewotCXN0cnVjdCBrbWVtY2hlY2tfY29udGV4 dCAqZGF0YSA9IHRoaXNfY3B1X3B0cigma21lbWNoZWNrX2NvbnRleHQpOwotCXVuc2lnbmVkIGlu dCBpOwotCXVuc2lnbmVkIGludCBuOwotCi0JbiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGRhdGEt Pm5fYWRkcnM7ICsraSkKLQkJbiArPSBrbWVtY2hlY2tfaGlkZV9hZGRyKGRhdGEtPmFkZHJbaV0p OwotCi0JcmV0dXJuIG47Ci19Ci0KLS8qCi0gKiBDYWxsZWQgZnJvbSB0aGUgI1BGIGhhbmRsZXIu Ci0gKi8KLXZvaWQga21lbWNoZWNrX3Nob3coc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3Ry dWN0IGttZW1jaGVja19jb250ZXh0ICpkYXRhID0gdGhpc19jcHVfcHRyKCZrbWVtY2hlY2tfY29u dGV4dCk7Ci0KLQlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7Ci0KLQlpZiAodW5saWtlbHkoZGF0 YS0+YmFsYW5jZSAhPSAwKSkgewotCQlrbWVtY2hlY2tfc2hvd19hbGwoKTsKLQkJa21lbWNoZWNr X2Vycm9yX3NhdmVfYnVnKHJlZ3MpOwotCQlkYXRhLT5iYWxhbmNlID0gMDsKLQkJcmV0dXJuOwot CX0KLQotCS8qCi0JICogTm9uZSBvZiB0aGUgYWRkcmVzc2VzIGFjdHVhbGx5IGJlbG9uZ2VkIHRv IGttZW1jaGVjay4gTm90ZSB0aGF0Ci0JICogdGhpcyBpcyBub3QgYW4gZXJyb3IuCi0JICovCi0J aWYgKGttZW1jaGVja19zaG93X2FsbCgpID09IDApCi0JCXJldHVybjsKLQotCSsrZGF0YS0+YmFs YW5jZTsKLQotCS8qCi0JICogVGhlIElGIG5lZWRzIHRvIGJlIGNsZWFyZWQgYXMgd2VsbCwgc28g dGhhdCB0aGUgZmF1bHRpbmcKLQkgKiBpbnN0cnVjdGlvbiBjYW4gcnVuICJ1bmludGVycnVwdGVk Ii4gT3RoZXJ3aXNlLCB3ZSBtaWdodCB0YWtlCi0JICogYW4gaW50ZXJydXB0IGFuZCBzdGFydCBl eGVjdXRpbmcgdGhhdCBiZWZvcmUgd2UndmUgaGFkIGEgY2hhbmNlCi0JICogdG8gaGlkZSB0aGUg cGFnZSBhZ2Fpbi4KLQkgKgotCSAqIE5PVEU6IEluIHRoZSByYXJlIGNhc2Ugb2YgbXVsdGlwbGUg ZmF1bHRzLCB3ZSBtdXN0IG5vdCBvdmVycmlkZQotCSAqIHRoZSBvcmlnaW5hbCBmbGFnczoKLQkg Ki8KLQlpZiAoIShyZWdzLT5mbGFncyAmIFg4Nl9FRkxBR1NfVEYpKQotCQlkYXRhLT5mbGFncyA9 IHJlZ3MtPmZsYWdzOwotCi0JcmVncy0+ZmxhZ3MgfD0gWDg2X0VGTEFHU19URjsKLQlyZWdzLT5m bGFncyAmPSB+WDg2X0VGTEFHU19JRjsKLX0KLQotLyoKLSAqIENhbGxlZCBmcm9tIHRoZSAjREIg aGFuZGxlci4KLSAqLwotdm9pZCBrbWVtY2hlY2tfaGlkZShzdHJ1Y3QgcHRfcmVncyAqcmVncykK LXsKLQlzdHJ1Y3Qga21lbWNoZWNrX2NvbnRleHQgKmRhdGEgPSB0aGlzX2NwdV9wdHIoJmttZW1j aGVja19jb250ZXh0KTsKLQlpbnQgbjsKLQotCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKLQot CWlmICh1bmxpa2VseShkYXRhLT5iYWxhbmNlICE9IDEpKSB7Ci0JCWttZW1jaGVja19zaG93X2Fs bCgpOwotCQlrbWVtY2hlY2tfZXJyb3Jfc2F2ZV9idWcocmVncyk7Ci0JCWRhdGEtPm5fYWRkcnMg PSAwOwotCQlkYXRhLT5iYWxhbmNlID0gMDsKLQotCQlpZiAoIShkYXRhLT5mbGFncyAmIFg4Nl9F RkxBR1NfVEYpKQotCQkJcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVEY7Ci0JCWlmIChkYXRh LT5mbGFncyAmIFg4Nl9FRkxBR1NfSUYpCi0JCQlyZWdzLT5mbGFncyB8PSBYODZfRUZMQUdTX0lG OwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGttZW1jaGVja19lbmFibGVkKQotCQluID0ga21lbWNo ZWNrX2hpZGVfYWxsKCk7Ci0JZWxzZQotCQluID0ga21lbWNoZWNrX3Nob3dfYWxsKCk7Ci0KLQlp ZiAobiA9PSAwKQotCQlyZXR1cm47Ci0KLQktLWRhdGEtPmJhbGFuY2U7Ci0KLQlkYXRhLT5uX2Fk ZHJzID0gMDsKLQotCWlmICghKGRhdGEtPmZsYWdzICYgWDg2X0VGTEFHU19URikpCi0JCXJlZ3Mt PmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOwotCWlmIChkYXRhLT5mbGFncyAmIFg4Nl9FRkxBR1Nf SUYpCi0JCXJlZ3MtPmZsYWdzIHw9IFg4Nl9FRkxBR1NfSUY7Ci19Ci0KLXZvaWQga21lbWNoZWNr X3Nob3dfcGFnZXMoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGludCBuKQotewotCXVuc2lnbmVk IGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG47ICsraSkgewotCQl1bnNpZ25lZCBsb25nIGFk ZHJlc3M7Ci0JCXB0ZV90ICpwdGU7Ci0JCXVuc2lnbmVkIGludCBsZXZlbDsKLQotCQlhZGRyZXNz ID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcygmcFtpXSk7Ci0JCXB0ZSA9IGxvb2t1cF9h ZGRyZXNzKGFkZHJlc3MsICZsZXZlbCk7Ci0JCUJVR19PTighcHRlKTsKLQkJQlVHX09OKGxldmVs ICE9IFBHX0xFVkVMXzRLKTsKLQotCQlzZXRfcHRlKHB0ZSwgX19wdGUocHRlX3ZhbCgqcHRlKSB8 IF9QQUdFX1BSRVNFTlQpKTsKLQkJc2V0X3B0ZShwdGUsIF9fcHRlKHB0ZV92YWwoKnB0ZSkgJiB+ X1BBR0VfSElEREVOKSk7Ci0JCV9fZmx1c2hfdGxiX29uZShhZGRyZXNzKTsKLQl9Ci19Ci0KLWJv b2wga21lbWNoZWNrX3BhZ2VfaXNfdHJhY2tlZChzdHJ1Y3QgcGFnZSAqcCkKLXsKLQkvKiBUaGlz IHdpbGwgYWxzbyBjaGVjayB0aGUgImhpZGRlbiIgZmxhZyBvZiB0aGUgUFRFLiAqLwotCXJldHVy biBrbWVtY2hlY2tfcHRlX2xvb2t1cCgodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHApKTsK LX0KLQotdm9pZCBrbWVtY2hlY2tfaGlkZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQg aW50IG4pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7 Ci0JCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKLQkJcHRlX3QgKnB0ZTsKLQkJdW5zaWduZWQgaW50 IGxldmVsOwotCi0JCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKCZwW2ld KTsKLQkJcHRlID0gbG9va3VwX2FkZHJlc3MoYWRkcmVzcywgJmxldmVsKTsKLQkJQlVHX09OKCFw dGUpOwotCQlCVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEspOwotCi0JCXNldF9wdGUocHRlLCBf X3B0ZShwdGVfdmFsKCpwdGUpICYgfl9QQUdFX1BSRVNFTlQpKTsKLQkJc2V0X3B0ZShwdGUsIF9f cHRlKHB0ZV92YWwoKnB0ZSkgfCBfUEFHRV9ISURERU4pKTsKLQkJX19mbHVzaF90bGJfb25lKGFk ZHJlc3MpOwotCX0KLX0KLQotLyogQWNjZXNzIG1heSBOT1QgY3Jvc3MgcGFnZSBib3VuZGFyeSAq Lwotc3RhdGljIHZvaWQga21lbWNoZWNrX3JlYWRfc3RyaWN0KHN0cnVjdCBwdF9yZWdzICpyZWdz LAotCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jdm9pZCAqc2hh ZG93OwotCWVudW0ga21lbWNoZWNrX3NoYWRvdyBzdGF0dXM7Ci0KLQlzaGFkb3cgPSBrbWVtY2hl Y2tfc2hhZG93X2xvb2t1cChhZGRyKTsKLQlpZiAoIXNoYWRvdykKLQkJcmV0dXJuOwotCi0Ja21l bWNoZWNrX3NhdmVfYWRkcihhZGRyKTsKLQlzdGF0dXMgPSBrbWVtY2hlY2tfc2hhZG93X3Rlc3Qo c2hhZG93LCBzaXplKTsKLQlpZiAoc3RhdHVzID09IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTEla RUQpCi0JCXJldHVybjsKLQotCWlmIChrbWVtY2hlY2tfZW5hYmxlZCkKLQkJa21lbWNoZWNrX2Vy cm9yX3NhdmUoc3RhdHVzLCBhZGRyLCBzaXplLCByZWdzKTsKLQotCWlmIChrbWVtY2hlY2tfZW5h YmxlZCA9PSAyKQotCQlrbWVtY2hlY2tfZW5hYmxlZCA9IDA7Ci0KLQkvKiBEb24ndCB3YXJuIGFi b3V0IGl0IGFnYWluLiAqLwotCWttZW1jaGVja19zaGFkb3dfc2V0KHNoYWRvdywgc2l6ZSk7Ci19 Ci0KLWJvb2wga21lbWNoZWNrX2lzX29ial9pbml0aWFsaXplZCh1bnNpZ25lZCBsb25nIGFkZHIs IHNpemVfdCBzaXplKQotewotCWVudW0ga21lbWNoZWNrX3NoYWRvdyBzdGF0dXM7Ci0Jdm9pZCAq c2hhZG93OwotCi0Jc2hhZG93ID0ga21lbWNoZWNrX3NoYWRvd19sb29rdXAoYWRkcik7Ci0JaWYg KCFzaGFkb3cpCi0JCXJldHVybiB0cnVlOwotCi0Jc3RhdHVzID0ga21lbWNoZWNrX3NoYWRvd190 ZXN0X2FsbChzaGFkb3csIHNpemUpOwotCi0JcmV0dXJuIHN0YXR1cyA9PSBLTUVNQ0hFQ0tfU0hB RE9XX0lOSVRJQUxJWkVEOwotfQotCi0vKiBBY2Nlc3MgbWF5IGNyb3NzIHBhZ2UgYm91bmRhcnkg Ki8KLXN0YXRpYyB2b2lkIGttZW1jaGVja19yZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCXVu c2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBw YWdlID0gYWRkciAmIFBBR0VfTUFTSzsKLQl1bnNpZ25lZCBsb25nIG5leHRfYWRkciA9IGFkZHIg KyBzaXplIC0gMTsKLQl1bnNpZ25lZCBsb25nIG5leHRfcGFnZSA9IG5leHRfYWRkciAmIFBBR0Vf TUFTSzsKLQotCWlmIChsaWtlbHkocGFnZSA9PSBuZXh0X3BhZ2UpKSB7Ci0JCWttZW1jaGVja19y ZWFkX3N0cmljdChyZWdzLCBhZGRyLCBzaXplKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICog V2hhdCB3ZSBkbyBpcyBiYXNpY2FsbHkgdG8gc3BsaXQgdGhlIGFjY2VzcyBhY3Jvc3MgdGhlCi0J ICogdHdvIHBhZ2VzIGFuZCBoYW5kbGUgZWFjaCBwYXJ0IHNlcGFyYXRlbHkuIFllcywgdGhpcyBt ZWFucwotCSAqIHRoYXQgd2UgbWF5IG5vdyBzZWUgcmVhZHMgdGhhdCBhcmUgMyArIDUgYnl0ZXMs IGZvcgotCSAqIGV4YW1wbGUgKGFuZCBpZiBib3RoIGFyZSB1bmluaXRpYWxpemVkLCB0aGVyZSB3 aWxsIGJlIHR3bwotCSAqIHJlcG9ydHMpLCBidXQgaXQgbWFrZXMgdGhlIGNvZGUgYSBsb3Qgc2lt cGxlci4KLQkgKi8KLQlrbWVtY2hlY2tfcmVhZF9zdHJpY3QocmVncywgYWRkciwgbmV4dF9wYWdl IC0gYWRkcik7Ci0Ja21lbWNoZWNrX3JlYWRfc3RyaWN0KHJlZ3MsIG5leHRfcGFnZSwgbmV4dF9h ZGRyIC0gbmV4dF9wYWdlKTsKLX0KLQotc3RhdGljIHZvaWQga21lbWNoZWNrX3dyaXRlX3N0cmlj dChzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGlu dCBzaXplKQotewotCXZvaWQgKnNoYWRvdzsKLQotCXNoYWRvdyA9IGttZW1jaGVja19zaGFkb3df bG9va3VwKGFkZHIpOwotCWlmICghc2hhZG93KQotCQlyZXR1cm47Ci0KLQlrbWVtY2hlY2tfc2F2 ZV9hZGRyKGFkZHIpOwotCWttZW1jaGVja19zaGFkb3dfc2V0KHNoYWRvdywgc2l6ZSk7Ci19Ci0K LXN0YXRpYyB2b2lkIGttZW1jaGVja193cml0ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQl1bnNp Z25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcGFn ZSA9IGFkZHIgJiBQQUdFX01BU0s7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X2FkZHIgPSBhZGRyICsg c2l6ZSAtIDE7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X3BhZ2UgPSBuZXh0X2FkZHIgJiBQQUdFX01B U0s7Ci0KLQlpZiAobGlrZWx5KHBhZ2UgPT0gbmV4dF9wYWdlKSkgewotCQlrbWVtY2hlY2tfd3Jp dGVfc3RyaWN0KHJlZ3MsIGFkZHIsIHNpemUpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogU2VlIGNv bW1lbnQgaW4ga21lbWNoZWNrX3JlYWQoKS4gKi8KLQlrbWVtY2hlY2tfd3JpdGVfc3RyaWN0KHJl Z3MsIGFkZHIsIG5leHRfcGFnZSAtIGFkZHIpOwotCWttZW1jaGVja193cml0ZV9zdHJpY3QocmVn cywgbmV4dF9wYWdlLCBuZXh0X2FkZHIgLSBuZXh0X3BhZ2UpOwotfQotCi0vKgotICogQ29weWlu ZyBpcyBoYXJkLiBXZSBoYXZlIHR3byBhZGRyZXNzZXMsIGVhY2ggb2Ygd2hpY2ggbWF5IGJlIHNw bGl0IGFjcm9zcwotICogYSBwYWdlIChhbmQgZWFjaCBwYWdlIHdpbGwgaGF2ZSBkaWZmZXJlbnQg c2hhZG93IGFkZHJlc3NlcykuCi0gKi8KLXN0YXRpYyB2b2lkIGttZW1jaGVja19jb3B5KHN0cnVj dCBwdF9yZWdzICpyZWdzLAotCXVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIHVuc2lnbmVkIGxvbmcg ZHN0X2FkZHIsIHVuc2lnbmVkIGludCBzaXplKQotewotCXVpbnQ4X3Qgc2hhZG93WzhdOwotCWVu dW0ga21lbWNoZWNrX3NoYWRvdyBzdGF0dXM7Ci0KLQl1bnNpZ25lZCBsb25nIHBhZ2U7Ci0JdW5z aWduZWQgbG9uZyBuZXh0X2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X3BhZ2U7Ci0KLQl1aW50 OF90ICp4OwotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBuOwotCi0JQlVHX09OKHNp emUgPiBzaXplb2Yoc2hhZG93KSk7Ci0KLQlwYWdlID0gc3JjX2FkZHIgJiBQQUdFX01BU0s7Ci0J bmV4dF9hZGRyID0gc3JjX2FkZHIgKyBzaXplIC0gMTsKLQluZXh0X3BhZ2UgPSBuZXh0X2FkZHIg JiBQQUdFX01BU0s7Ci0KLQlpZiAobGlrZWx5KHBhZ2UgPT0gbmV4dF9wYWdlKSkgewotCQkvKiBT YW1lIHBhZ2UgKi8KLQkJeCA9IGttZW1jaGVja19zaGFkb3dfbG9va3VwKHNyY19hZGRyKTsKLQkJ aWYgKHgpIHsKLQkJCWttZW1jaGVja19zYXZlX2FkZHIoc3JjX2FkZHIpOwotCQkJZm9yIChpID0g MDsgaSA8IHNpemU7ICsraSkKLQkJCQlzaGFkb3dbaV0gPSB4W2ldOwotCQl9IGVsc2UgewotCQkJ Zm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkKLQkJCQlzaGFkb3dbaV0gPSBLTUVNQ0hFQ0tfU0hB RE9XX0lOSVRJQUxJWkVEOwotCQl9Ci0JfSBlbHNlIHsKLQkJbiA9IG5leHRfcGFnZSAtIHNyY19h ZGRyOwotCQlCVUdfT04obiA+IHNpemVvZihzaGFkb3cpKTsKLQotCQkvKiBGaXJzdCBwYWdlICov Ci0JCXggPSBrbWVtY2hlY2tfc2hhZG93X2xvb2t1cChzcmNfYWRkcik7Ci0JCWlmICh4KSB7Ci0J CQlrbWVtY2hlY2tfc2F2ZV9hZGRyKHNyY19hZGRyKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBuOyAr K2kpCi0JCQkJc2hhZG93W2ldID0geFtpXTsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vdCB0cmFja2Vk ICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQotCQkJCXNoYWRvd1tpXSA9IEtNRU1DSEVD S19TSEFET1dfSU5JVElBTElaRUQ7Ci0JCX0KLQotCQkvKiBTZWNvbmQgcGFnZSAqLwotCQl4ID0g a21lbWNoZWNrX3NoYWRvd19sb29rdXAobmV4dF9wYWdlKTsKLQkJaWYgKHgpIHsKLQkJCWttZW1j aGVja19zYXZlX2FkZHIobmV4dF9wYWdlKTsKLQkJCWZvciAoaSA9IG47IGkgPCBzaXplOyArK2kp Ci0JCQkJc2hhZG93W2ldID0geFtpIC0gbl07Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3QgdHJhY2tl ZCAqLwotCQkJZm9yIChpID0gbjsgaSA8IHNpemU7ICsraSkKLQkJCQlzaGFkb3dbaV0gPSBLTUVN Q0hFQ0tfU0hBRE9XX0lOSVRJQUxJWkVEOwotCQl9Ci0JfQotCi0JcGFnZSA9IGRzdF9hZGRyICYg UEFHRV9NQVNLOwotCW5leHRfYWRkciA9IGRzdF9hZGRyICsgc2l6ZSAtIDE7Ci0JbmV4dF9wYWdl ID0gbmV4dF9hZGRyICYgUEFHRV9NQVNLOwotCi0JaWYgKGxpa2VseShwYWdlID09IG5leHRfcGFn ZSkpIHsKLQkJLyogU2FtZSBwYWdlICovCi0JCXggPSBrbWVtY2hlY2tfc2hhZG93X2xvb2t1cChk c3RfYWRkcik7Ci0JCWlmICh4KSB7Ci0JCQlrbWVtY2hlY2tfc2F2ZV9hZGRyKGRzdF9hZGRyKTsK LQkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLQkJCQl4W2ldID0gc2hhZG93W2ldOwot CQkJCXNoYWRvd1tpXSA9IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQ7Ci0JCQl9Ci0JCX0K LQl9IGVsc2UgewotCQluID0gbmV4dF9wYWdlIC0gZHN0X2FkZHI7Ci0JCUJVR19PTihuID4gc2l6 ZW9mKHNoYWRvdykpOwotCi0JCS8qIEZpcnN0IHBhZ2UgKi8KLQkJeCA9IGttZW1jaGVja19zaGFk b3dfbG9va3VwKGRzdF9hZGRyKTsKLQkJaWYgKHgpIHsKLQkJCWttZW1jaGVja19zYXZlX2FkZHIo ZHN0X2FkZHIpOwotCQkJZm9yIChpID0gMDsgaSA8IG47ICsraSkgewotCQkJCXhbaV0gPSBzaGFk b3dbaV07Ci0JCQkJc2hhZG93W2ldID0gS01FTUNIRUNLX1NIQURPV19JTklUSUFMSVpFRDsKLQkJ CX0KLQkJfQotCi0JCS8qIFNlY29uZCBwYWdlICovCi0JCXggPSBrbWVtY2hlY2tfc2hhZG93X2xv b2t1cChuZXh0X3BhZ2UpOwotCQlpZiAoeCkgewotCQkJa21lbWNoZWNrX3NhdmVfYWRkcihuZXh0 X3BhZ2UpOwotCQkJZm9yIChpID0gbjsgaSA8IHNpemU7ICsraSkgewotCQkJCXhbaSAtIG5dID0g c2hhZG93W2ldOwotCQkJCXNoYWRvd1tpXSA9IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQ7 Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzdGF0dXMgPSBrbWVtY2hlY2tfc2hhZG93X3Rlc3Qoc2hhZG93 LCBzaXplKTsKLQlpZiAoc3RhdHVzID09IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQpCi0J CXJldHVybjsKLQotCWlmIChrbWVtY2hlY2tfZW5hYmxlZCkKLQkJa21lbWNoZWNrX2Vycm9yX3Nh dmUoc3RhdHVzLCBzcmNfYWRkciwgc2l6ZSwgcmVncyk7Ci0KLQlpZiAoa21lbWNoZWNrX2VuYWJs ZWQgPT0gMikKLQkJa21lbWNoZWNrX2VuYWJsZWQgPSAwOwotfQotCi1lbnVtIGttZW1jaGVja19t ZXRob2QgewotCUtNRU1DSEVDS19SRUFELAotCUtNRU1DSEVDS19XUklURSwKLX07Ci0KLXN0YXRp YyB2b2lkIGttZW1jaGVja19hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JdW5zaWduZWQg bG9uZyBmYWxsYmFja19hZGRyZXNzLCBlbnVtIGttZW1jaGVja19tZXRob2QgZmFsbGJhY2tfbWV0 aG9kKQotewotCWNvbnN0IHVpbnQ4X3QgKmluc247Ci0JY29uc3QgdWludDhfdCAqaW5zbl9wcmlt YXJ5OwotCXVuc2lnbmVkIGludCBzaXplOwotCi0Jc3RydWN0IGttZW1jaGVja19jb250ZXh0ICpk YXRhID0gdGhpc19jcHVfcHRyKCZrbWVtY2hlY2tfY29udGV4dCk7Ci0KLQkvKiBSZWN1cnNpdmUg ZmF1bHQgLS0gb3VjaC4gKi8KLQlpZiAoZGF0YS0+YnVzeSkgewotCQlrbWVtY2hlY2tfc2hvd19h ZGRyKGZhbGxiYWNrX2FkZHJlc3MpOwotCQlrbWVtY2hlY2tfZXJyb3Jfc2F2ZV9idWcocmVncyk7 Ci0JCXJldHVybjsKLQl9Ci0KLQlkYXRhLT5idXN5ID0gdHJ1ZTsKLQotCWluc24gPSAoY29uc3Qg dWludDhfdCAqKSByZWdzLT5pcDsKLQlpbnNuX3ByaW1hcnkgPSBrbWVtY2hlY2tfb3Bjb2RlX2dl dF9wcmltYXJ5KGluc24pOwotCi0Ja21lbWNoZWNrX29wY29kZV9kZWNvZGUoaW5zbiwgJnNpemUp OwotCi0Jc3dpdGNoIChpbnNuX3ByaW1hcnlbMF0pIHsKLSNpZmRlZiBDT05GSUdfS01FTUNIRUNL X0JJVE9QU19PSwotCQkvKiBBTkQsIE9SLCBYT1IgKi8KLQkJLyoKLQkJICogVW5mb3J0dW5hdGVs eSwgdGhlc2UgaW5zdHJ1Y3Rpb25zIGhhdmUgdG8gYmUgZXhjbHVkZWQgZnJvbQotCQkgKiBvdXIg cmVndWxhciBjaGVja2luZyBzaW5jZSB0aGV5IGFjY2VzcyBvbmx5IHNvbWUgKGFuZCBub3QKLQkJ ICogYWxsKSBiaXRzLiBUaGlzIGNsZWFycyBvdXQgImJvZ3VzIiBiaXRmaWVsZC1hY2Nlc3Mgd2Fy bmluZ3MuCi0JCSAqLwotCWNhc2UgMHg4MDoKLQljYXNlIDB4ODE6Ci0JY2FzZSAweDgyOgotCWNh c2UgMHg4MzoKLQkJc3dpdGNoICgoaW5zbl9wcmltYXJ5WzFdID4+IDMpICYgNykgewotCQkJLyog T1IgKi8KLQkJY2FzZSAxOgotCQkJLyogQU5EICovCi0JCWNhc2UgNDoKLQkJCS8qIFhPUiAqLwot CQljYXNlIDY6Ci0JCQlrbWVtY2hlY2tfd3JpdGUocmVncywgZmFsbGJhY2tfYWRkcmVzcywgc2l6 ZSk7Ci0JCQlnb3RvIG91dDsKLQotCQkJLyogQUREICovCi0JCWNhc2UgMDoKLQkJCS8qIEFEQyAq LwotCQljYXNlIDI6Ci0JCQkvKiBTQkIgKi8KLQkJY2FzZSAzOgotCQkJLyogU1VCICovCi0JCWNh c2UgNToKLQkJCS8qIENNUCAqLwotCQljYXNlIDc6Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsK LSNlbmRpZgotCi0JCS8qIE1PVlMsIE1PVlNCLCBNT1ZTVywgTU9WU0QgKi8KLQljYXNlIDB4YTQ6 Ci0JY2FzZSAweGE1OgotCQkvKgotCQkgKiBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIHNwZWNpYWwg YmVjYXVzZSB0aGV5IHRha2UgdHdvCi0JCSAqIGFkZHJlc3NlcywgYnV0IHdlIG9ubHkgZ2V0IG9u ZSBwYWdlIGZhdWx0LgotCQkgKi8KLQkJa21lbWNoZWNrX2NvcHkocmVncywgcmVncy0+c2ksIHJl Z3MtPmRpLCBzaXplKTsKLQkJZ290byBvdXQ7Ci0KLQkJLyogQ01QUywgQ01QU0IsIENNUFNXLCBD TVBTRCAqLwotCWNhc2UgMHhhNjoKLQljYXNlIDB4YTc6Ci0JCWttZW1jaGVja19yZWFkKHJlZ3Ms IHJlZ3MtPnNpLCBzaXplKTsKLQkJa21lbWNoZWNrX3JlYWQocmVncywgcmVncy0+ZGksIHNpemUp OwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKgotCSAqIElmIHRoZSBvcGNvZGUgaXNuJ3Qgc3BlY2lh bCBpbiBhbnkgd2F5LCB3ZSB1c2UgdGhlIGRhdGEgZnJvbSB0aGUKLQkgKiBwYWdlIGZhdWx0IGhh bmRsZXIgdG8gZGV0ZXJtaW5lIHRoZSBhZGRyZXNzIGFuZCB0eXBlIG9mIG1lbW9yeQotCSAqIGFj Y2Vzcy4KLQkgKi8KLQlzd2l0Y2ggKGZhbGxiYWNrX21ldGhvZCkgewotCWNhc2UgS01FTUNIRUNL X1JFQUQ6Ci0JCWttZW1jaGVja19yZWFkKHJlZ3MsIGZhbGxiYWNrX2FkZHJlc3MsIHNpemUpOwot CQlnb3RvIG91dDsKLQljYXNlIEtNRU1DSEVDS19XUklURToKLQkJa21lbWNoZWNrX3dyaXRlKHJl Z3MsIGZhbGxiYWNrX2FkZHJlc3MsIHNpemUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlk YXRhLT5idXN5ID0gZmFsc2U7Ci19Ci0KLWJvb2wga21lbWNoZWNrX2ZhdWx0KHN0cnVjdCBwdF9y ZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JdW5zaWduZWQgbG9uZyBlcnJvcl9j b2RlKQotewotCXB0ZV90ICpwdGU7Ci0KLQkvKgotCSAqIFhYWDogSXMgaXQgc2FmZSB0byBhc3N1 bWUgdGhhdCBtZW1vcnkgYWNjZXNzZXMgZnJvbSB2aXJ0dWFsIDg2Ci0JICogbW9kZSBvciBub24t a2VybmVsIGNvZGUgc2VnbWVudHMgd2lsbCBfbmV2ZXJfIGFjY2VzcyBrZXJuZWwKLQkgKiBtZW1v cnkgKGUuZy4gdHJhY2tlZCBwYWdlcyk/IEZvciBub3csIHdlIG5lZWQgdGhpcyB0byBhdm9pZAot CSAqIGludm9raW5nIGttZW1jaGVjayBmb3IgUG5QIEJJT1MgY2FsbHMuCi0JICovCi0JaWYgKHJl Z3MtPmZsYWdzICYgWDg2X1ZNX01BU0spCi0JCXJldHVybiBmYWxzZTsKLQlpZiAocmVncy0+Y3Mg IT0gX19LRVJORUxfQ1MpCi0JCXJldHVybiBmYWxzZTsKLQotCXB0ZSA9IGttZW1jaGVja19wdGVf bG9va3VwKGFkZHJlc3MpOwotCWlmICghcHRlKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlXQVJOX09O X09OQ0UoaW5fbm1pKCkpOwotCi0JaWYgKGVycm9yX2NvZGUgJiAyKQotCQlrbWVtY2hlY2tfYWNj ZXNzKHJlZ3MsIGFkZHJlc3MsIEtNRU1DSEVDS19XUklURSk7Ci0JZWxzZQotCQlrbWVtY2hlY2tf YWNjZXNzKHJlZ3MsIGFkZHJlc3MsIEtNRU1DSEVDS19SRUFEKTsKLQotCWttZW1jaGVja19zaG93 KHJlZ3MpOwotCXJldHVybiB0cnVlOwotfQotCi1ib29sIGttZW1jaGVja190cmFwKHN0cnVjdCBw dF9yZWdzICpyZWdzKQotewotCWlmICgha21lbWNoZWNrX2FjdGl2ZShyZWdzKSkKLQkJcmV0dXJu IGZhbHNlOwotCi0JLyogV2UncmUgZG9uZS4gKi8KLQlrbWVtY2hlY2tfaGlkZShyZWdzKTsKLQly ZXR1cm4gdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9vcGNvZGUu YyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9vcGNvZGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMzI0YWEzZjA3MjM3Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbW0va21l bWNoZWNrL29wY29kZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSAib3Bjb2RlLmgiCi0KLXN0YXRpYyBib29sIG9w Y29kZV9pc19wcmVmaXgodWludDhfdCBiKQotewotCXJldHVybgotCQkvKiBHcm91cCAxICovCi0J CWIgPT0gMHhmMCB8fCBiID09IDB4ZjIgfHwgYiA9PSAweGYzCi0JCS8qIEdyb3VwIDIgKi8KLQkJ fHwgYiA9PSAweDJlIHx8IGIgPT0gMHgzNiB8fCBiID09IDB4M2UgfHwgYiA9PSAweDI2Ci0JCXx8 IGIgPT0gMHg2NCB8fCBiID09IDB4NjUKLQkJLyogR3JvdXAgMyAqLwotCQl8fCBiID09IDB4NjYK LQkJLyogR3JvdXAgNCAqLwotCQl8fCBiID09IDB4Njc7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2 XzY0Ci1zdGF0aWMgYm9vbCBvcGNvZGVfaXNfcmV4X3ByZWZpeCh1aW50OF90IGIpCi17Ci0JcmV0 dXJuIChiICYgMHhmMCkgPT0gMHg0MDsKLX0KLSNlbHNlCi1zdGF0aWMgYm9vbCBvcGNvZGVfaXNf cmV4X3ByZWZpeCh1aW50OF90IGIpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLSNk ZWZpbmUgUkVYX1cgKDEgPDwgMykKLQotLyoKLSAqIFRoaXMgaXMgYSBWRVJZIGNydWRlIG9wY29k ZSBkZWNvZGVyLiBXZSBvbmx5IG5lZWQgdG8gZmluZCB0aGUgc2l6ZSBvZiB0aGUKLSAqIGxvYWQv c3RvcmUgdGhhdCBjYXVzZWQgb3VyICNQRiBhbmQgdGhpcyBzaG91bGQgd29yayBmb3IgYWxsIHRo ZSBvcGNvZGVzCi0gKiB0aGF0IHdlIGNhcmUgYWJvdXQuIE1vcmVvdmVyLCB0aGUgb25lcyB3aG8g aW52ZW50ZWQgdGhpcyBpbnN0cnVjdGlvbiBzZXQKLSAqIHNob3VsZCBiZSBzaG90LgotICovCi12 b2lkIGttZW1jaGVja19vcGNvZGVfZGVjb2RlKGNvbnN0IHVpbnQ4X3QgKm9wLCB1bnNpZ25lZCBp bnQgKnNpemUpCi17Ci0JLyogRGVmYXVsdCBvcGVyYW5kIHNpemUgKi8KLQlpbnQgb3BlcmFuZF9z aXplX292ZXJyaWRlID0gNDsKLQotCS8qIHByZWZpeGVzICovCi0JZm9yICg7IG9wY29kZV9pc19w cmVmaXgoKm9wKTsgKytvcCkgewotCQlpZiAoKm9wID09IDB4NjYpCi0JCQlvcGVyYW5kX3NpemVf b3ZlcnJpZGUgPSAyOwotCX0KLQotCS8qIFJFWCBwcmVmaXggKi8KLQlpZiAob3Bjb2RlX2lzX3Jl eF9wcmVmaXgoKm9wKSkgewotCQl1aW50OF90IHJleCA9ICpvcDsKLQotCQkrK29wOwotCQlpZiAo cmV4ICYgUkVYX1cpIHsKLQkJCXN3aXRjaCAoKm9wKSB7Ci0JCQljYXNlIDB4NjM6Ci0JCQkJKnNp emUgPSA0OwotCQkJCXJldHVybjsKLQkJCWNhc2UgMHgwZjoKLQkJCQkrK29wOwotCi0JCQkJc3dp dGNoICgqb3ApIHsKLQkJCQljYXNlIDB4YjY6Ci0JCQkJY2FzZSAweGJlOgotCQkJCQkqc2l6ZSA9 IDE7Ci0JCQkJCXJldHVybjsKLQkJCQljYXNlIDB4Yjc6Ci0JCQkJY2FzZSAweGJmOgotCQkJCQkq c2l6ZSA9IDI7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0KLQkJCQlicmVhazsKLQkJCX0KLQotCQkJ KnNpemUgPSA4OwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogZXNjYXBlIG9wY29kZSAqLwot CWlmICgqb3AgPT0gMHgwZikgewotCQkrK29wOwotCi0JCS8qCi0JCSAqIFRoaXMgaXMgbW92ZSB3 aXRoIHplcm8tZXh0ZW5kIGFuZCBzaWduLWV4dGVuZCwgcmVzcGVjdGl2ZWx5OwotCQkgKiB3ZSBk b24ndCBoYXZlIHRvIHRoaW5rIGFib3V0IDB4YjYvMHhiZSwgYmVjYXVzZSB0aGlzIGlzCi0JCSAq IGFscmVhZHkgaGFuZGxlZCBpbiB0aGUgY29uZGl0aW9uYWwgYmVsb3cuCi0JCSAqLwotCQlpZiAo Km9wID09IDB4YjcgfHwgKm9wID09IDB4YmYpCi0JCQlvcGVyYW5kX3NpemVfb3ZlcnJpZGUgPSAy OwotCX0KLQotCSpzaXplID0gKCpvcCAmIDEpID8gb3BlcmFuZF9zaXplX292ZXJyaWRlIDogMTsK LX0KLQotY29uc3QgdWludDhfdCAqa21lbWNoZWNrX29wY29kZV9nZXRfcHJpbWFyeShjb25zdCB1 aW50OF90ICpvcCkKLXsKLQkvKiBza2lwIHByZWZpeGVzICovCi0Jd2hpbGUgKG9wY29kZV9pc19w cmVmaXgoKm9wKSkKLQkJKytvcDsKLQlpZiAob3Bjb2RlX2lzX3JleF9wcmVmaXgoKm9wKSkKLQkJ KytvcDsKLQlyZXR1cm4gb3A7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sv b3Bjb2RlLmggYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svb3Bjb2RlLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDY5NTZhYWQ2NmI1Yi4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2 L21tL2ttZW1jaGVjay9vcGNvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lm bmRlZiBBUkNIX19YODZfX01NX19LTUVNQ0hFQ0tfX09QQ09ERV9ICi0jZGVmaW5lIEFSQ0hfX1g4 Nl9fTU1fX0tNRU1DSEVDS19fT1BDT0RFX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0K LXZvaWQga21lbWNoZWNrX29wY29kZV9kZWNvZGUoY29uc3QgdWludDhfdCAqb3AsIHVuc2lnbmVk IGludCAqc2l6ZSk7Ci1jb25zdCB1aW50OF90ICprbWVtY2hlY2tfb3Bjb2RlX2dldF9wcmltYXJ5 KGNvbnN0IHVpbnQ4X3QgKm9wKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9r bWVtY2hlY2svcHRlLmMgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svcHRlLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDRlYWQyNmVlYWY5Ni4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gv eDg2L21tL2ttZW1jaGVjay9wdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNp bmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLQotI2luY2x1 ZGUgInB0ZS5oIgotCi1wdGVfdCAqa21lbWNoZWNrX3B0ZV9sb29rdXAodW5zaWduZWQgbG9uZyBh ZGRyZXNzKQotewotCXB0ZV90ICpwdGU7Ci0JdW5zaWduZWQgaW50IGxldmVsOwotCi0JcHRlID0g bG9va3VwX2FkZHJlc3MoYWRkcmVzcywgJmxldmVsKTsKLQlpZiAoIXB0ZSkKLQkJcmV0dXJuIE5V TEw7Ci0JaWYgKGxldmVsICE9IFBHX0xFVkVMXzRLKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoIXB0 ZV9oaWRkZW4oKnB0ZSkpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHB0ZTsKLX0KLQpkaWZm IC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3B0ZS5oIGIvYXJjaC94ODYvbW0va21lbWNo ZWNrL3B0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjU5NjY0NTY0OTIuLjAw MDAwMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svcHRlLmgKKysrIC9kZXYvbnVs bApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIEFSQ0hfX1g4Nl9fTU1fX0tNRU1DSEVDS19fUFRF X0gKLSNkZWZpbmUgQVJDSF9fWDg2X19NTV9fS01FTUNIRUNLX19QVEVfSAotCi0jaW5jbHVkZSA8 bGludXgvbW0uaD4KLQotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KLXB0ZV90ICprbWVtY2hl Y2tfcHRlX2xvb2t1cCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwotCi0jZW5kaWYKZGlmZiAtLWdp dCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zZWxmdGVzdC5jIGIvYXJjaC94ODYvbW0va21lbWNo ZWNrL3NlbGZ0ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZjcxNDBjMDA2 My4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zZWxmdGVzdC5jCisr KyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgotI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0jaW5jbHVkZSAib3Bjb2RlLmgiCi0jaW5jbHVkZSAi c2VsZnRlc3QuaCIKLQotc3RydWN0IHNlbGZ0ZXN0X29wY29kZSB7Ci0JdW5zaWduZWQgaW50IGV4 cGVjdGVkX3NpemU7Ci0JY29uc3QgdWludDhfdCAqaW5zbjsKLQljb25zdCBjaGFyICpkZXNjOwot fTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZWxmdGVzdF9vcGNvZGUgc2VsZnRlc3Rfb3Bjb2Rl c1tdID0gewotCS8qIFJFUCBNT1ZTICovCi0JezEsICJceGYzXHhhNCIsIAkJInJlcCBtb3ZzYiA8 bWVtOD4sIDxtZW04PiJ9LAotCXs0LCAiXHhmM1x4YTUiLAkJCSJyZXAgbW92c2wgPG1lbTMyPiwg PG1lbTMyPiJ9LAotCi0JLyogTU9WWlggLyBNT1ZaWEQgKi8KLQl7MSwgIlx4NjZceDBmXHhiNlx4 NTFceGY4IiwJIm1vdnp3cSA8bWVtOD4sIDxyZWcxNj4ifSwKLQl7MSwgIlx4MGZceGI2XHg1MVx4 ZjgiLAkJIm1vdnp3cSA8bWVtOD4sIDxyZWczMj4ifSwKLQotCS8qIE1PVlNYIC8gTU9WU1hEICov Ci0JezEsICJceDY2XHgwZlx4YmVceDUxXHhmOCIsCSJtb3Zzd3EgPG1lbTg+LCA8cmVnMTY+In0s Ci0JezEsICJceDBmXHhiZVx4NTFceGY4IiwJCSJtb3Zzd3EgPG1lbTg+LCA8cmVnMzI+In0sCi0K LSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyogTU9WWlggLyBNT1ZaWEQgKi8KLQl7MSwgIlx4NDlc eDBmXHhiNlx4NTFceGY4IiwJIm1vdnpicSA8bWVtOD4sIDxyZWc2ND4ifSwKLQl7MiwgIlx4NDlc eDBmXHhiN1x4NTFceGY4IiwJIm1vdnpicSA8bWVtMTY+LCA8cmVnNjQ+In0sCi0KLQkvKiBNT1ZT WCAvIE1PVlNYRCAqLwotCXsxLCAiXHg0OVx4MGZceGJlXHg1MVx4ZjgiLAkibW92c2JxIDxtZW04 PiwgPHJlZzY0PiJ9LAotCXsyLCAiXHg0OVx4MGZceGJmXHg1MVx4ZjgiLAkibW92c2JxIDxtZW0x Nj4sIDxyZWc2ND4ifSwKLQl7NCwgIlx4NDlceDYzXHg1MVx4ZjgiLAkJIm1vdnNscSA8bWVtMzI+ LCA8cmVnNjQ+In0sCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBib29sIHNlbGZ0ZXN0X29wY29kZV9v bmUoY29uc3Qgc3RydWN0IHNlbGZ0ZXN0X29wY29kZSAqb3ApCi17Ci0JdW5zaWduZWQgc2l6ZTsK LQotCWttZW1jaGVja19vcGNvZGVfZGVjb2RlKG9wLT5pbnNuLCAmc2l6ZSk7Ci0KLQlpZiAoc2l6 ZSA9PSBvcC0+ZXhwZWN0ZWRfc2l6ZSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlwcmludGsoS0VSTl9X QVJOSU5HICJrbWVtY2hlY2s6IG9wY29kZSAlczogZXhwZWN0ZWQgc2l6ZSAlZCwgZ290ICVkXG4i LAotCQlvcC0+ZGVzYywgb3AtPmV4cGVjdGVkX3NpemUsIHNpemUpOwotCXJldHVybiBmYWxzZTsK LX0KLQotc3RhdGljIGJvb2wgc2VsZnRlc3Rfb3Bjb2Rlc19hbGwodm9pZCkKLXsKLQlib29sIHBh c3MgPSB0cnVlOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoc2VsZnRlc3Rfb3Bjb2Rlcyk7ICsraSkKLQkJcGFzcyA9IHBhc3MgJiYgc2VsZnRlc3Rfb3Bj b2RlX29uZSgmc2VsZnRlc3Rfb3Bjb2Rlc1tpXSk7Ci0KLQlyZXR1cm4gcGFzczsKLX0KLQotYm9v bCBrbWVtY2hlY2tfc2VsZnRlc3Qodm9pZCkKLXsKLQlib29sIHBhc3MgPSB0cnVlOwotCi0JcGFz cyA9IHBhc3MgJiYgc2VsZnRlc3Rfb3Bjb2Rlc19hbGwoKTsKLQotCXJldHVybiBwYXNzOwotfQpk aWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NlbGZ0ZXN0LmggYi9hcmNoL3g4Ni9t bS9rbWVtY2hlY2svc2VsZnRlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZl ZDRmZTExZjk1Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NlbGZ0 ZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgQVJDSF9YODZfTU1f S01FTUNIRUNLX1NFTEZURVNUX0gKLSNkZWZpbmUgQVJDSF9YODZfTU1fS01FTUNIRUNLX1NFTEZU RVNUX0gKLQotYm9vbCBrbWVtY2hlY2tfc2VsZnRlc3Qodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0t Z2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jIGIvYXJjaC94ODYvbW0va21lbWNo ZWNrL3NoYWRvdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjYzOGE3ZDJjMTAu LjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMKKysrIC9k ZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2ttZW1jaGVjay5oPgot I2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLSNpbmNs dWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KLSNpbmNsdWRlICJw dGUuaCIKLSNpbmNsdWRlICJzaGFkb3cuaCIKLQotLyoKLSAqIFJldHVybiB0aGUgc2hhZG93IGFk ZHJlc3MgZm9yIHRoZSBnaXZlbiBhZGRyZXNzLiBSZXR1cm5zIE5VTEwgaWYgdGhlCi0gKiBhZGRy ZXNzIGlzIG5vdCB0cmFja2VkLgotICoKLSAqIFdlIG5lZWQgdG8gYmUgZXh0cmVtZWx5IGNhcmVm dWwgbm90IHRvIGZvbGxvdyBhbnkgaW52YWxpZCBwb2ludGVycywKLSAqIGJlY2F1c2UgdGhpcyBm dW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZvciAqYW55KiBwb3NzaWJsZSBhZGRyZXNzLgotICovCi12 b2lkICprbWVtY2hlY2tfc2hhZG93X2xvb2t1cCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0J cHRlX3QgKnB0ZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCWlmICghdmlydF9hZGRyX3ZhbGlk KGFkZHJlc3MpKQotCQlyZXR1cm4gTlVMTDsKLQotCXB0ZSA9IGttZW1jaGVja19wdGVfbG9va3Vw KGFkZHJlc3MpOwotCWlmICghcHRlKQotCQlyZXR1cm4gTlVMTDsKLQotCXBhZ2UgPSB2aXJ0X3Rv X3BhZ2UoYWRkcmVzcyk7Ci0JaWYgKCFwYWdlLT5zaGFkb3cpCi0JCXJldHVybiBOVUxMOwotCXJl dHVybiBwYWdlLT5zaGFkb3cgKyAoYWRkcmVzcyAmIChQQUdFX1NJWkUgLSAxKSk7Ci19Ci0KLXN0 YXRpYyB2b2lkIG1hcmtfc2hhZG93KHZvaWQgKmFkZHJlc3MsIHVuc2lnbmVkIGludCBuLAotCWVu dW0ga21lbWNoZWNrX3NoYWRvdyBzdGF0dXMpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVu c2lnbmVkIGxvbmcpIGFkZHJlc3M7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2FkZHIgPSBhZGRyICsg biAtIDE7Ci0JdW5zaWduZWQgbG9uZyBwYWdlID0gYWRkciAmIFBBR0VfTUFTSzsKLQl1bnNpZ25l ZCBsb25nIGxhc3RfcGFnZSA9IGxhc3RfYWRkciAmIFBBR0VfTUFTSzsKLQl1bnNpZ25lZCBpbnQg Zmlyc3RfbjsKLQl2b2lkICpzaGFkb3c7Ci0KLQkvKiBJZiB0aGUgbWVtb3J5IHJhbmdlIGNyb3Nz ZXMgYSBwYWdlIGJvdW5kYXJ5LCBzdG9wIHRoZXJlLiAqLwotCWlmIChwYWdlID09IGxhc3RfcGFn ZSkKLQkJZmlyc3RfbiA9IG47Ci0JZWxzZQotCQlmaXJzdF9uID0gcGFnZSArIFBBR0VfU0laRSAt IGFkZHI7Ci0KLQlzaGFkb3cgPSBrbWVtY2hlY2tfc2hhZG93X2xvb2t1cChhZGRyKTsKLQlpZiAo c2hhZG93KQotCQltZW1zZXQoc2hhZG93LCBzdGF0dXMsIGZpcnN0X24pOwotCi0JYWRkciArPSBm aXJzdF9uOwotCW4gLT0gZmlyc3RfbjsKLQotCS8qIERvIGZ1bGwtcGFnZSBtZW1zZXQoKXMuICov Ci0Jd2hpbGUgKG4gPj0gUEFHRV9TSVpFKSB7Ci0JCXNoYWRvdyA9IGttZW1jaGVja19zaGFkb3df bG9va3VwKGFkZHIpOwotCQlpZiAoc2hhZG93KQotCQkJbWVtc2V0KHNoYWRvdywgc3RhdHVzLCBQ QUdFX1NJWkUpOwotCi0JCWFkZHIgKz0gUEFHRV9TSVpFOwotCQluIC09IFBBR0VfU0laRTsKLQl9 Ci0KLQkvKiBEbyB0aGUgcmVtYWluaW5nIHBhZ2UsIGlmIGFueS4gKi8KLQlpZiAobiA+IDApIHsK LQkJc2hhZG93ID0ga21lbWNoZWNrX3NoYWRvd19sb29rdXAoYWRkcik7Ci0JCWlmIChzaGFkb3cp Ci0JCQltZW1zZXQoc2hhZG93LCBzdGF0dXMsIG4pOwotCX0KLX0KLQotdm9pZCBrbWVtY2hlY2tf bWFya191bmFsbG9jYXRlZCh2b2lkICphZGRyZXNzLCB1bnNpZ25lZCBpbnQgbikKLXsKLQltYXJr X3NoYWRvdyhhZGRyZXNzLCBuLCBLTUVNQ0hFQ0tfU0hBRE9XX1VOQUxMT0NBVEVEKTsKLX0KLQot dm9pZCBrbWVtY2hlY2tfbWFya191bmluaXRpYWxpemVkKHZvaWQgKmFkZHJlc3MsIHVuc2lnbmVk IGludCBuKQotewotCW1hcmtfc2hhZG93KGFkZHJlc3MsIG4sIEtNRU1DSEVDS19TSEFET1dfVU5J TklUSUFMSVpFRCk7Ci19Ci0KLS8qCi0gKiBGaWxsIHRoZSBzaGFkb3cgbWVtb3J5IG9mIHRoZSBn aXZlbiBhZGRyZXNzIHN1Y2ggdGhhdCB0aGUgbWVtb3J5IGF0IHRoYXQKLSAqIGFkZHJlc3MgaXMg bWFya2VkIGFzIGJlaW5nIGluaXRpYWxpemVkLgotICovCi12b2lkIGttZW1jaGVja19tYXJrX2lu aXRpYWxpemVkKHZvaWQgKmFkZHJlc3MsIHVuc2lnbmVkIGludCBuKQotewotCW1hcmtfc2hhZG93 KGFkZHJlc3MsIG4sIEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQpOwotfQotRVhQT1JUX1NZ TUJPTF9HUEwoa21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWQpOwotCi12b2lkIGttZW1jaGVja19t YXJrX2ZyZWVkKHZvaWQgKmFkZHJlc3MsIHVuc2lnbmVkIGludCBuKQotewotCW1hcmtfc2hhZG93 KGFkZHJlc3MsIG4sIEtNRU1DSEVDS19TSEFET1dfRlJFRUQpOwotfQotCi12b2lkIGttZW1jaGVj a19tYXJrX3VuYWxsb2NhdGVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBpbnQgbikK LXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCi0JCWttZW1j aGVja19tYXJrX3VuYWxsb2NhdGVkKHBhZ2VfYWRkcmVzcygmcFtpXSksIFBBR0VfU0laRSk7Ci19 Ci0KLXZvaWQga21lbWNoZWNrX21hcmtfdW5pbml0aWFsaXplZF9wYWdlcyhzdHJ1Y3QgcGFnZSAq cCwgdW5zaWduZWQgaW50IG4pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgbjsgKytpKQotCQlrbWVtY2hlY2tfbWFya191bmluaXRpYWxpemVkKHBhZ2VfYWRkcmVzcygm cFtpXSksIFBBR0VfU0laRSk7Ci19Ci0KLXZvaWQga21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWRf cGFnZXMoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGludCBuKQotewotCXVuc2lnbmVkIGludCBp OwotCi0JZm9yIChpID0gMDsgaSA8IG47ICsraSkKLQkJa21lbWNoZWNrX21hcmtfaW5pdGlhbGl6 ZWQocGFnZV9hZGRyZXNzKCZwW2ldKSwgUEFHRV9TSVpFKTsKLX0KLQotZW51bSBrbWVtY2hlY2tf c2hhZG93IGttZW1jaGVja19zaGFkb3dfdGVzdCh2b2lkICpzaGFkb3csIHVuc2lnbmVkIGludCBz aXplKQotewotI2lmZGVmIENPTkZJR19LTUVNQ0hFQ0tfUEFSVElBTF9PSwotCXVpbnQ4X3QgKng7 Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQl4ID0gc2hhZG93OwotCi0JLyoKLQkgKiBNYWtlIHN1cmUg X3NvbWVfIGJ5dGVzIGFyZSBpbml0aWFsaXplZC4gR2NjIGZyZXF1ZW50bHkgZ2VuZXJhdGVzCi0J ICogY29kZSB0byBhY2Nlc3MgbmVpZ2hib3JpbmcgYnl0ZXMuCi0JICovCi0JZm9yIChpID0gMDsg aSA8IHNpemU7ICsraSkgewotCQlpZiAoeFtpXSA9PSBLTUVNQ0hFQ0tfU0hBRE9XX0lOSVRJQUxJ WkVEKQotCQkJcmV0dXJuIHhbaV07Ci0JfQotCi0JcmV0dXJuIHhbMF07Ci0jZWxzZQotCXJldHVy biBrbWVtY2hlY2tfc2hhZG93X3Rlc3RfYWxsKHNoYWRvdywgc2l6ZSk7Ci0jZW5kaWYKLX0KLQot ZW51bSBrbWVtY2hlY2tfc2hhZG93IGttZW1jaGVja19zaGFkb3dfdGVzdF9hbGwodm9pZCAqc2hh ZG93LCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQl1aW50OF90ICp4OwotCXVuc2lnbmVkIGludCBp OwotCi0JeCA9IHNoYWRvdzsKLQotCS8qIEFsbCBieXRlcyBtdXN0IGJlIGluaXRpYWxpemVkLiAq LwotCWZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLQkJaWYgKHhbaV0gIT0gS01FTUNIRUNL X1NIQURPV19JTklUSUFMSVpFRCkKLQkJCXJldHVybiB4W2ldOwotCX0KLQotCXJldHVybiB4WzBd OwotfQotCi12b2lkIGttZW1jaGVja19zaGFkb3dfc2V0KHZvaWQgKnNoYWRvdywgdW5zaWduZWQg aW50IHNpemUpCi17Ci0JdWludDhfdCAqeDsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCXggPSBzaGFk b3c7Ci0JZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkKLQkJeFtpXSA9IEtNRU1DSEVDS19TSEFE T1dfSU5JVElBTElaRUQ7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hh ZG93LmggYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGZmMGIyZjcwZmJjYi4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L21t L2ttZW1jaGVjay9zaGFkb3cuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSNpZm5k ZWYgQVJDSF9fWDg2X19NTV9fS01FTUNIRUNLX19TSEFET1dfSAotI2RlZmluZSBBUkNIX19YODZf X01NX19LTUVNQ0hFQ0tfX1NIQURPV19ICi0KLWVudW0ga21lbWNoZWNrX3NoYWRvdyB7Ci0JS01F TUNIRUNLX1NIQURPV19VTkFMTE9DQVRFRCwKLQlLTUVNQ0hFQ0tfU0hBRE9XX1VOSU5JVElBTEla RUQsCi0JS01FTUNIRUNLX1NIQURPV19JTklUSUFMSVpFRCwKLQlLTUVNQ0hFQ0tfU0hBRE9XX0ZS RUVELAotfTsKLQotdm9pZCAqa21lbWNoZWNrX3NoYWRvd19sb29rdXAodW5zaWduZWQgbG9uZyBh ZGRyZXNzKTsKLQotZW51bSBrbWVtY2hlY2tfc2hhZG93IGttZW1jaGVja19zaGFkb3dfdGVzdCh2 b2lkICpzaGFkb3csIHVuc2lnbmVkIGludCBzaXplKTsKLWVudW0ga21lbWNoZWNrX3NoYWRvdyBr bWVtY2hlY2tfc2hhZG93X3Rlc3RfYWxsKHZvaWQgKnNoYWRvdywKLQkJCQkJCXVuc2lnbmVkIGlu dCBzaXplKTsKLXZvaWQga21lbWNoZWNrX3NoYWRvd19zZXQodm9pZCAqc2hhZG93LCB1bnNpZ25l ZCBpbnQgc2l6ZSk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFw cGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCmluZGV4IDA5NzczMTdjNjgzNS4u MjU2OTVjM2U4OTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKysr IGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUg PGxpbnV4L2RtYS1kZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1kaXJlY3Rpb24uaD4KICNp bmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ttZW1jaGVjay5o PgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogCiAvKioKQEAgLTIwNSw3ICsyMDQsNiBAQCBzdGF0 aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAq ZGV2LCB2b2lkICpwdHIsCiAJY29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1h X29wcyhkZXYpOwogCWRtYV9hZGRyX3QgYWRkcjsKIAotCWttZW1jaGVja19tYXJrX2luaXRpYWxp emVkKHB0ciwgc2l6ZSk7CiAJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCWFk ZHIgPSBvcHMtPm1hcF9wYWdlKGRldiwgdmlydF90b19wYWdlKHB0ciksCiAJCQkgICAgIG9mZnNl dF9pbl9wYWdlKHB0ciksIHNpemUsCkBAIC0yMzgsMTEgKzIzNiw4IEBAIHN0YXRpYyBpbmxpbmUg aW50IGRtYV9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXR0cnMpCiB7CiAJY29uc3Qgc3RydWN0IGRt YV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwotCWludCBpLCBlbnRzOwotCXN0cnVj dCBzY2F0dGVybGlzdCAqczsKKwlpbnQgZW50czsKIAotCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50 cywgaSkKLQkJa21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWQoc2dfdmlydChzKSwgcy0+bGVuZ3Ro KTsKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAJZW50cyA9IG9wcy0+bWFw X3NnKGRldiwgc2csIG5lbnRzLCBkaXIsIGF0dHJzKTsKIAlCVUdfT04oZW50cyA8IDApOwpAQCAt MjcyLDcgKzI2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2VfYXR0 cnMoc3RydWN0IGRldmljZSAqZGV2LAogCWNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0g Z2V0X2RtYV9vcHMoZGV2KTsKIAlkbWFfYWRkcl90IGFkZHI7CiAKLQlrbWVtY2hlY2tfbWFya19p bml0aWFsaXplZChwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIHNpemUpOwogCUJVR19PTigh dmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAlhZGRyID0gb3BzLT5tYXBfcGFnZShkZXYsIHBh Z2UsIG9mZnNldCwgc2l6ZSwgZGlyLCBhdHRycyk7CiAJZGVidWdfZG1hX21hcF9wYWdlKGRldiwg cGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIGFkZHIsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGRiMzczYjlkMzIyMy4u Yzc2Yzg5NTg2ZmZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1 ZGUvbGludXgvZ2ZwLmgKQEAgLTE2Niw4ICsxNjYsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7 CiAgKgogICogX19HRlBfWkVSTyByZXR1cm5zIGEgemVyb2VkIHBhZ2Ugb24gc3VjY2Vzcy4KICAq Ci0gKiBfX0dGUF9OT1RSQUNLIGF2b2lkcyB0cmFja2luZyB3aXRoIGttZW1jaGVjay4KLSAqCiAg KiBfX0dGUF9OT1RSQUNLX0ZBTFNFX1BPU0lUSVZFIGlzIGFuIGFsaWFzIG9mIF9fR0ZQX05PVFJB Q0suIEl0J3MgYSBtZWFucyBvZgogICogICBkaXN0aW5ndWlzaGluZyBpbiB0aGUgc291cmNlIGJl dHdlZW4gZmFsc2UgcG9zaXRpdmVzIGFuZCBhbGxvY2F0aW9ucyB0aGF0CiAgKiAgIGNhbm5vdCBi ZSBzdXBwb3J0ZWQgKGUuZy4gcGFnZSB0YWJsZXMpLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9rbWVtY2hlY2suaCBiL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKaW5kZXggMzlmODQ1MzIz OWY3Li4wMGEzNzFjNWE1MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgK KysrIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaApAQCAtNCwzOCArNCw2IEBACiAjaW5jbHVk ZSA8bGludXgvbW1fdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaWZkZWYg Q09ORklHX0tNRU1DSEVDSwotZXh0ZXJuIGludCBrbWVtY2hlY2tfZW5hYmxlZDsKLQotLyogVGhl IHNsYWItcmVsYXRlZCBmdW5jdGlvbnMuICovCi12b2lkIGttZW1jaGVja19hbGxvY19zaGFkb3co c3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKLXZv aWQga21lbWNoZWNrX2ZyZWVfc2hhZG93KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpOwot dm9pZCBrbWVtY2hlY2tfc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2Zw ZmxhZ3MsIHZvaWQgKm9iamVjdCwKLQkJCSAgc2l6ZV90IHNpemUpOwotdm9pZCBrbWVtY2hlY2tf c2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIHNpemVfdCBzaXpl KTsKLQotdm9pZCBrbWVtY2hlY2tfcGFnZWFsbG9jX2FsbG9jKHN0cnVjdCBwYWdlICpwLCB1bnNp Z25lZCBpbnQgb3JkZXIsCi0JCQkgICAgICAgZ2ZwX3QgZ2ZwZmxhZ3MpOwotCi12b2lkIGttZW1j aGVja19zaG93X3BhZ2VzKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBpbnQgbik7Ci12b2lkIGtt ZW1jaGVja19oaWRlX3BhZ2VzKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBpbnQgbik7Ci0KLWJv b2wga21lbWNoZWNrX3BhZ2VfaXNfdHJhY2tlZChzdHJ1Y3QgcGFnZSAqcCk7Ci0KLXZvaWQga21l bWNoZWNrX21hcmtfdW5hbGxvY2F0ZWQodm9pZCAqYWRkcmVzcywgdW5zaWduZWQgaW50IG4pOwot dm9pZCBrbWVtY2hlY2tfbWFya191bmluaXRpYWxpemVkKHZvaWQgKmFkZHJlc3MsIHVuc2lnbmVk IGludCBuKTsKLXZvaWQga21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWQodm9pZCAqYWRkcmVzcywg dW5zaWduZWQgaW50IG4pOwotdm9pZCBrbWVtY2hlY2tfbWFya19mcmVlZCh2b2lkICphZGRyZXNz LCB1bnNpZ25lZCBpbnQgbik7Ci0KLXZvaWQga21lbWNoZWNrX21hcmtfdW5hbGxvY2F0ZWRfcGFn ZXMoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGludCBuKTsKLXZvaWQga21lbWNoZWNrX21hcmtf dW5pbml0aWFsaXplZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgaW50IG4pOwotdm9p ZCBrbWVtY2hlY2tfbWFya19pbml0aWFsaXplZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcCwgdW5zaWdu ZWQgaW50IG4pOwotCi1pbnQga21lbWNoZWNrX3Nob3dfYWRkcih1bnNpZ25lZCBsb25nIGFkZHJl c3MpOwotaW50IGttZW1jaGVja19oaWRlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLQot Ym9vbCBrbWVtY2hlY2tfaXNfb2JqX2luaXRpYWxpemVkKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6 ZV90IHNpemUpOwotCiAvKgogICogQml0ZmllbGQgYW5ub3RhdGlvbnMKICAqCkBAIC02MSwzMiAr MjksNyBAQCBib29sIGttZW1jaGVja19pc19vYmpfaW5pdGlhbGl6ZWQodW5zaWduZWQgbG9uZyBh ZGRyLCBzaXplX3Qgc2l6ZSk7CiAgKiAgICAgc3RydWN0IGEgKmEgPSBrbWFsbG9jKHNpemVvZihz dHJ1Y3QgYSksIEdGUF9LRVJORUwpOwogICogICAgIGttZW1jaGVja19hbm5vdGF0ZV9iaXRmaWVs ZChhLCBmbGFncyk7CiAgKi8KLSNkZWZpbmUga21lbWNoZWNrX2JpdGZpZWxkX2JlZ2luKG5hbWUp CVwKLQlpbnQgbmFtZSMjX2JlZ2luWzBdOwotCi0jZGVmaW5lIGttZW1jaGVja19iaXRmaWVsZF9l bmQobmFtZSkJXAotCWludCBuYW1lIyNfZW5kWzBdOwotCi0jZGVmaW5lIGttZW1jaGVja19hbm5v dGF0ZV9iaXRmaWVsZChwdHIsIG5hbWUpCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWludCBfbjsJ CQkJCQkJXAotCQkJCQkJCQkJXAotCQlpZiAoIXB0cikJCQkJCQlcCi0JCQlicmVhazsJCQkJCQlc Ci0JCQkJCQkJCQlcCi0JCV9uID0gKGxvbmcpICYoKHB0ciktPm5hbWUjI19lbmQpCQkJXAotCQkJ LSAobG9uZykgJigocHRyKS0+bmFtZSMjX2JlZ2luKTsJCVwKLQkJQlVJTERfQlVHX09OKF9uIDwg MCk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JCWttZW1jaGVja19tYXJrX2luaXRpYWxpemVkKCYoKHB0 ciktPm5hbWUjI19iZWdpbiksIF9uKTsJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUga21lbWNo ZWNrX2Fubm90YXRlX3ZhcmlhYmxlKHZhcikJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJa21lbWNo ZWNrX21hcmtfaW5pdGlhbGl6ZWQoJih2YXIpLCBzaXplb2YodmFyKSk7CVwKLQl9IHdoaWxlICgw KQkJCQkJCQlcCiAKLSNlbHNlCiAjZGVmaW5lIGttZW1jaGVja19lbmFibGVkIDAKIAogc3RhdGlj IGlubGluZSB2b2lkCkBAIC0xNjYsNiArMTA5LDQgQEAgc3RhdGljIGlubGluZSBib29sIGttZW1j aGVja19pc19vYmpfaW5pdGlhbGl6ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qgc2l6ZSkK IAlkbyB7CQkJCQlcCiAJfSB3aGlsZSAoMCkKIAotI2VuZGlmIC8qIENPTkZJR19LTUVNQ0hFQ0sg Ki8KLQogI2VuZGlmIC8qIExJTlVYX0tNRU1DSEVDS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggZjYwZjQ1 ZmUyMjZmLi4zZjRjMmY5ODJmNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMu aAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTIwNSwxNCArMjA1LDYgQEAgc3Ry dWN0IHBhZ2UgewogCQkJCQkgICBub3Qga21hcHBlZCwgaWUuIGhpZ2htZW0pICovCiAjZW5kaWYg LyogV0FOVF9QQUdFX1ZJUlRVQUwgKi8KIAotI2lmZGVmIENPTkZJR19LTUVNQ0hFQ0sKLQkvKgot CSAqIGttZW1jaGVjayB3YW50cyB0byB0cmFjayB0aGUgc3RhdHVzIG9mIGVhY2ggYnl0ZSBpbiBh IHBhZ2U7IHRoaXMKLQkgKiBpcyBhIHBvaW50ZXIgdG8gc3VjaCBhIHN0YXR1cyBibG9jay4gTlVM TCBpZiBub3QgdHJhY2tlZC4KLQkgKi8KLQl2b2lkICpzaGFkb3c7Ci0jZW5kaWYKLQogI2lmZGVm IExBU1RfQ1BVUElEX05PVF9JTl9QQUdFX0ZMQUdTCiAJaW50IF9sYXN0X2NwdXBpZDsKICNlbmRp ZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIu aAppbmRleCAzYzM3YThjNTE5MjEuLjM3OGI1MTU4ODE3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9s aW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTc1LDEyICs3NSwxMiBA QAogCiAjZGVmaW5lIFNMQUJfTk9MRUFLVFJBQ0UJMHgwMDgwMDAwMFVMCS8qIEF2b2lkIGttZW1s ZWFrIHRyYWNpbmcgKi8KIAotLyogRG9uJ3QgdHJhY2sgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVt b3J5ICovCi0jaWZkZWYgQ09ORklHX0tNRU1DSEVDSwotIyBkZWZpbmUgU0xBQl9OT1RSQUNLCQkw eDAxMDAwMDAwVUwKLSNlbHNlCi0jIGRlZmluZSBTTEFCX05PVFJBQ0sJCTB4MDAwMDAwMDBVTAot I2VuZGlmCisvKgorICogVXNlZCBieSBrbWVtY2hlY2sgaW4gdGhlIHBhc3Q7IG9ic29sZXRlLCBi dXQga2VwdCBmb3IgdGhlIHNha2Ugb2YKKyAqIG91dC1vZi10cmVlIG1vZHVsZSBzb3VyY2UgYmFj a3dhcmRzIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgU0xBQl9OT1RSQUNLCQkwCisKICNp ZmRlZiBDT05GSUdfRkFJTFNMQUIKICMgZGVmaW5lIFNMQUJfRkFJTFNMQUIJCTB4MDIwMDAwMDBV TAkvKiBGYXVsdCBpbmplY3Rpb24gbWFyayAqLwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luaXQvbWFp bi5jIGIvaW5pdC9tYWluLmMKaW5kZXggYjBjMTFjYmY1ZGRmLi4yNjYyMTBhNTUxZTUgMTAwNjQ0 Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC02OSw3ICs2OSw2IEBACiAj aW5jbHVkZSA8bGludXgva2dkYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1 ZGUgPGxpbnV4L2FzeW5jLmg+Ci0jaW5jbHVkZSA8bGludXgva21lbWNoZWNrLmg+CiAjaW5jbHVk ZSA8bGludXgvc2ZpLmg+CiAjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KICNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3Rs LmMKaW5kZXggOGM4NzE0ZmNiNTNjLi5lNGZlMjljZWE0YWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9z eXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRl IDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRl IDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ttZW1jaGVjay5oPgogI2luY2x1ZGUg PGxpbnV4L2ttZW1sZWFrLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+CkBAIC0xMTUxLDE1ICsxMTUwLDYgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUg a2Vybl90YWJsZVtdID0gewogCQkuZXh0cmEyCQk9ICZvbmVfdGhvdXNhbmQsCiAJfSwKICNlbmRp ZgotI2lmZGVmIENPTkZJR19LTUVNQ0hFQ0sKLQl7Ci0JCS5wcm9jbmFtZQk9ICJrbWVtY2hlY2si LAotCQkuZGF0YQkJPSAma21lbWNoZWNrX2VuYWJsZWQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGlu dCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAot CX0sCi0jZW5kaWYKIAl7CiAJCS5wcm9jbmFtZQk9ICJwYW5pY19vbl93YXJuIiwKIAkJLmRhdGEJ CT0gJnBhbmljX29uX3dhcm4sCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9L Y29uZmlnLmRlYnVnCmluZGV4IGZhMTZjMGY4MmQ2ZS4uYWQ4MTI2MWU4M2RiIDEwMDY0NAotLS0g YS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtNDk5LDcgKzQ5 OSw3IEBAIGNvbmZpZyBERUJVR19PQkpFQ1RTX0VOQUJMRV9ERUZBVUxUCiAKIGNvbmZpZyBERUJV R19TTEFCCiAJYm9vbCAiRGVidWcgc2xhYiBtZW1vcnkgYWxsb2NhdGlvbnMiCi0JZGVwZW5kcyBv biBERUJVR19LRVJORUwgJiYgU0xBQiAmJiAhS01FTUNIRUNLCisJZGVwZW5kcyBvbiBERUJVR19L RVJORUwgJiYgU0xBQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaGF2ZSB0aGUga2VybmVsIGRv IGxpbWl0ZWQgdmVyaWZpY2F0aW9uIG9uIG1lbW9yeQogCSAgYWxsb2NhdGlvbiBhcyB3ZWxsIGFz IHBvaXNvbmluZyBtZW1vcnkgb24gZnJlZSB0byBjYXRjaCB1c2Ugb2YgZnJlZWQKQEAgLTUxMSw3 ICs1MTEsNyBAQCBjb25maWcgREVCVUdfU0xBQl9MRUFLCiAKIGNvbmZpZyBTTFVCX0RFQlVHX09O CiAJYm9vbCAiU0xVQiBkZWJ1Z2dpbmcgb24gYnkgZGVmYXVsdCIKLQlkZXBlbmRzIG9uIFNMVUIg JiYgU0xVQl9ERUJVRyAmJiAhS01FTUNIRUNLCisJZGVwZW5kcyBvbiBTTFVCICYmIFNMVUJfREVC VUcKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBCb290IHdpdGggZGVidWdnaW5nIG9uIGJ5IGRlZmF1 bHQuIFNMVUIgYm9vdHMgYnkgZGVmYXVsdCB3aXRoCkBAIC03MjUsOCArNzI1LDYgQEAgY29uZmln IERFQlVHX1NUQUNLT1ZFUkZMT1cKIAogCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCiAKLXNvdXJj ZSAibGliL0tjb25maWcua21lbWNoZWNrIgotCiBzb3VyY2UgImxpYi9LY29uZmlnLmthc2FuIgog CiBlbmRtZW51ICMgIk1lbW9yeSBEZWJ1Z2dpbmciCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5r bWVtY2hlY2sgYi9saWIvS2NvbmZpZy5rbWVtY2hlY2sKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDg0NmUwMzlhODZiNC4uMDAwMDAwMDAwMDAwCi0tLSBhL2xpYi9LY29uZmlnLmttZW1j aGVjaworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLWNvbmZpZyBIQVZFX0FSQ0hfS01F TUNIRUNLCi0JYm9vbAotCi1pZiBIQVZFX0FSQ0hfS01FTUNIRUNLCi0KLW1lbnVjb25maWcgS01F TUNIRUNLCi0JYm9vbCAia21lbWNoZWNrOiB0cmFwIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9y eSIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWRlcGVuZHMgb24gIVg4Nl9VU0VfM0ROT1cK LQlkZXBlbmRzIG9uIFNMVUIgfHwgU0xBQgotCWRlcGVuZHMgb24gIUNDX09QVElNSVpFX0ZPUl9T SVpFCi0JZGVwZW5kcyBvbiAhRlVOQ1RJT05fVFJBQ0VSCi0Jc2VsZWN0IEZSQU1FX1BPSU5URVIK LQlzZWxlY3QgU1RBQ0tUUkFDRQotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVu YWJsZXMgdHJhY2luZyBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQga2VybmVsIG1lbW9yeQotCSAg dG8gc2VlIGlmIG1lbW9yeSBpcyB1c2VkIGJlZm9yZSBpdCBoYXMgYmVlbiBnaXZlbiBhbiBpbml0 aWFsIHZhbHVlLgotCSAgQmUgYXdhcmUgdGhhdCB0aGlzIHJlcXVpcmVzIGhhbGYgb2YgeW91ciBt ZW1vcnkgZm9yIGJvb2trZWVwaW5nIGFuZAotCSAgd2lsbCBpbnNlcnQgZXh0cmEgY29kZSBhdCAq ZXZlcnkqIHJlYWQgYW5kIHdyaXRlIHRvIHRyYWNrZWQgbWVtb3J5Ci0JICB0aHVzIHNsb3cgZG93 biB0aGUga2VybmVsIGNvZGUgKGJ1dCB1c2VyIGNvZGUgaXMgdW5hZmZlY3RlZCkuCi0KLQkgIFRo ZSBrZXJuZWwgbWF5IGJlIHN0YXJ0ZWQgd2l0aCBrbWVtY2hlY2s9MCBvciBrbWVtY2hlY2s9MSB0 byBkaXNhYmxlCi0JICBvciBlbmFibGUga21lbWNoZWNrIGF0IGJvb3QtdGltZS4gSWYgdGhlIGtl cm5lbCBpcyBzdGFydGVkIHdpdGgKLQkgIGttZW1jaGVjaz0wLCB0aGUgbGFyZ2UgbWVtb3J5IGFu ZCBDUFUgb3ZlcmhlYWQgaXMgbm90IGluY3VycmVkLgotCi1jaG9pY2UKLQlwcm9tcHQgImttZW1j aGVjazogZGVmYXVsdCBtb2RlIGF0IGJvb3QiCi0JZGVwZW5kcyBvbiBLTUVNQ0hFQ0sKLQlkZWZh dWx0IEtNRU1DSEVDS19PTkVTSE9UX0JZX0RFRkFVTFQKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBj b250cm9scyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2Yga21lbWNoZWNrIHdoZW4gdGhlCi0JICBr ZXJuZWwgYm9vdHMgYW5kIG5vIGttZW1jaGVjaz0gcGFyYW1ldGVyIGlzIGdpdmVuLgotCi1jb25m aWcgS01FTUNIRUNLX0RJU0FCTEVEX0JZX0RFRkFVTFQKLQlib29sICJkaXNhYmxlZCIKLQlkZXBl bmRzIG9uIEtNRU1DSEVDSwotCi1jb25maWcgS01FTUNIRUNLX0VOQUJMRURfQllfREVGQVVMVAot CWJvb2wgImVuYWJsZWQiCi0JZGVwZW5kcyBvbiBLTUVNQ0hFQ0sKLQotY29uZmlnIEtNRU1DSEVD S19PTkVTSE9UX0JZX0RFRkFVTFQKLQlib29sICJvbmUtc2hvdCIKLQlkZXBlbmRzIG9uIEtNRU1D SEVDSwotCWhlbHAKLQkgIEluIG9uZS1zaG90IG1vZGUsIG9ubHkgdGhlIGZpcnN0IGVycm9yIGRl dGVjdGVkIGlzIHJlcG9ydGVkIGJlZm9yZQotCSAga21lbWNoZWNrIGlzIGRpc2FibGVkLgotCi1l bmRjaG9pY2UKLQotY29uZmlnIEtNRU1DSEVDS19RVUVVRV9TSVpFCi0JaW50ICJrbWVtY2hlY2s6 IGVycm9yIHF1ZXVlIHNpemUiCi0JZGVwZW5kcyBvbiBLTUVNQ0hFQ0sKLQlkZWZhdWx0IDY0Ci0J aGVscAotCSAgU2VsZWN0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gc3RvcmUgaW4g dGhlIHF1ZXVlLiBTaW5jZQotCSAgZXJyb3JzIGNhbiBvY2N1ciB2aXJ0dWFsbHkgYW55d2hlcmUg YW5kIGluIGFueSBjb250ZXh0LCB3ZSBuZWVkIGEKLQkgIHRlbXBvcmFyeSBzdG9yYWdlIGFyZWEg d2hpY2ggaXMgZ3VhcmFudHVlZWQgbm90IHRvIGdlbmVyYXRlIGFueQotCSAgb3RoZXIgZmF1bHRz LiBUaGUgcXVldWUgd2lsbCBiZSBlbXB0aWVkIGFzIHNvb24gYXMgYSB0YXNrbGV0IG1heQotCSAg YmUgc2NoZWR1bGVkLiBJZiB0aGUgcXVldWUgaXMgZnVsbCwgbmV3IGVycm9yIHJlcG9ydHMgd2ls bCBiZQotCSAgbG9zdC4KLQotY29uZmlnIEtNRU1DSEVDS19TSEFET1dfQ09QWV9TSElGVAotCWlu dCAia21lbWNoZWNrOiBzaGFkb3cgY29weSBzaXplICg1ID0+IDMyIGJ5dGVzLCA2ID0+IDY0IGJ5 dGVzKSIKLQlkZXBlbmRzIG9uIEtNRU1DSEVDSwotCXJhbmdlIDIgOAotCWRlZmF1bHQgNQotCWhl bHAKLQkgIFNlbGVjdCB0aGUgbnVtYmVyIG9mIHNoYWRvdyBieXRlcyB0byBzYXZlIGFsb25nIHdp dGggZWFjaCBlbnRyeSBvZgotCSAgdGhlIHF1ZXVlLiBUaGVzZSBieXRlcyBpbmRpY2F0ZSB3aGF0 IHBhcnRzIG9mIGFuIGFsbG9jYXRpb24gYXJlCi0JICBpbml0aWFsaXplZCwgdW5pbml0aWFsaXpl ZCwgZXRjLiBhbmQgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiBhbgotCSAgZXJyb3IgaXMgZGV0ZWN0 ZWQgdG8gaGVscCB0aGUgZGVidWdnaW5nIG9mIGEgcGFydGljdWxhciBwcm9ibGVtLgotCi1jb25m aWcgS01FTUNIRUNLX1BBUlRJQUxfT0sKLQlib29sICJrbWVtY2hlY2s6IGFsbG93IHBhcnRpYWxs eSB1bmluaXRpYWxpemVkIG1lbW9yeSIKLQlkZXBlbmRzIG9uIEtNRU1DSEVDSwotCWRlZmF1bHQg eQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHdvcmtzIGFyb3VuZCBjZXJ0YWluIEdDQyBvcHRpbWl6 YXRpb25zIHRoYXQgcHJvZHVjZQotCSAgMzItYml0IHJlYWRzIGZyb20gMTYtYml0IHZhcmlhYmxl cyB3aGVyZSB0aGUgdXBwZXIgMTYgYml0cyBhcmUKLQkgIHRocm93biBhd2F5IGFmdGVyd2FyZHMu IFRoaXMgbWF5IG9mIGNvdXJzZSBhbHNvIGhpZGUgc29tZSByZWFsCi0JICBidWdzLgotCi1jb25m aWcgS01FTUNIRUNLX0JJVE9QU19PSwotCWJvb2wgImttZW1jaGVjazogYWxsb3cgYml0LWZpZWxk IG1hbmlwdWxhdGlvbiIKLQlkZXBlbmRzIG9uIEtNRU1DSEVDSwotCWRlZmF1bHQgbgotCWhlbHAK LQkgIFRoaXMgb3B0aW9uIHNpbGVuY2VzIHdhcm5pbmdzIHRoYXQgd291bGQgYmUgZ2VuZXJhdGVk IGZvciBiaXQtZmllbGQKLQkgIGFjY2Vzc2VzIHdoZXJlIG5vdCBhbGwgdGhlIGJpdHMgYXJlIGlu aXRpYWxpemVkIGF0IHRoZSBzYW1lIHRpbWUuCi0JICBUaGlzIG1heSBhbHNvIGhpZGUgc29tZSBy ZWFsIGJ1Z3MuCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnLmRlYnVnIGIvbW0vS2Nv bmZpZy5kZWJ1ZwppbmRleCA3OWQwZmQxM2I1YjMuLjY1YjI0YzMzMTg2ZCAxMDA2NDQKLS0tIGEv bW0vS2NvbmZpZy5kZWJ1ZworKysgYi9tbS9LY29uZmlnLmRlYnVnCkBAIC0xMSw3ICsxMSw2IEBA IGNvbmZpZyBERUJVR19QQUdFQUxMT0MKIAlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0 aW9ucyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWRlcGVuZHMgb24gIUhJQkVSTkFUSU9O IHx8IEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DICYmICFQUEMgJiYgIVNQQVJDCi0JZGVw ZW5kcyBvbiAhS01FTUNIRUNLCiAJc2VsZWN0IFBBR0VfRVhURU5TSU9OCiAJc2VsZWN0IFBBR0Vf UE9JU09OSU5HIGlmICFBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwogCS0tLWhlbHAtLS0K ZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggMDI2ZjZhODI4YTUw Li41NDMzMTFlNzQ0OTQgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxl CkBAIC0xNiw3ICsxNiw2IEBAIEtDT1ZfSU5TVFJVTUVOVF9zbHViLm8gOj0gbgogS0NPVl9JTlNU UlVNRU5UX3BhZ2VfYWxsb2MubyA6PSBuCiBLQ09WX0lOU1RSVU1FTlRfZGVidWctcGFnZWFsbG9j Lm8gOj0gbgogS0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gbgotS0NPVl9JTlNUUlVNRU5U X2ttZW1jaGVjay5vIDo9IG4KIEtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gbgogS0NP Vl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG4KIEtDT1ZfSU5TVFJVTUVOVF92bXN0YXQubyA6PSBu CkBAIC02OSw3ICs2OCw2IEBAIG9iai0kKENPTkZJR19LU00pICs9IGtzbS5vCiBvYmotJChDT05G SUdfUEFHRV9QT0lTT05JTkcpICs9IHBhZ2VfcG9pc29uLm8KIG9iai0kKENPTkZJR19TTEFCKSAr PSBzbGFiLm8KIG9iai0kKENPTkZJR19TTFVCKSArPSBzbHViLm8KLW9iai0kKENPTkZJR19LTUVN Q0hFQ0spICs9IGttZW1jaGVjay5vCiBvYmotJChDT05GSUdfS0FTQU4pCSs9IGthc2FuLwogb2Jq LSQoQ09ORklHX0ZBSUxTTEFCKSArPSBmYWlsc2xhYi5vCiBvYmotJChDT05GSUdfTUVNT1JZX0hP VFBMVUcpICs9IG1lbW9yeV9ob3RwbHVnLm8KZGlmZiAtLWdpdCBhL21tL2ttZW1jaGVjay5jIGIv bW0va21lbWNoZWNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZjE5MTc1NmE0 YS4uMDAwMDAwMDAwMDAwCi0tLSBhL21tL2ttZW1jaGVjay5jCisrKyAvZGV2L251bGwKQEAgLTEs MTI1ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9nZnAuaD4KLSNpbmNsdWRlIDxsaW51eC9tbV90 eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgot I2luY2x1ZGUgInNsYWIuaCIKLSNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KLQotdm9pZCBr bWVtY2hlY2tfYWxsb2Nfc2hhZG93KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIsIGdmcF90 IGZsYWdzLCBpbnQgbm9kZSkKLXsKLQlzdHJ1Y3QgcGFnZSAqc2hhZG93OwotCWludCBwYWdlczsK LQlpbnQgaTsKLQotCXBhZ2VzID0gMSA8PCBvcmRlcjsKLQotCS8qCi0JICogV2l0aCBrbWVtY2hl Y2sgZW5hYmxlZCwgd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG1lbW9yeSBhcmVhIGZvciB0aGUKLQkg KiBzaGFkb3cgYml0cyBhcyB3ZWxsLgotCSAqLwotCXNoYWRvdyA9IGFsbG9jX3BhZ2VzX25vZGUo bm9kZSwgZmxhZ3MgfCBfX0dGUF9OT1RSQUNLLCBvcmRlcik7Ci0JaWYgKCFzaGFkb3cpIHsKLQkJ aWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJCXByX2Vycigia21lbWNoZWNrOiBmYWlsZWQgdG8g YWxsb2NhdGUgc2hhZG93IGJpdG1hcFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IoaSA9IDA7 IGkgPCBwYWdlczsgKytpKQotCQlwYWdlW2ldLnNoYWRvdyA9IHBhZ2VfYWRkcmVzcygmc2hhZG93 W2ldKTsKLQotCS8qCi0JICogTWFyayBpdCBhcyBub24tcHJlc2VudCBmb3IgdGhlIE1NVSBzbyB0 aGF0IG91ciBhY2Nlc3NlcyB0bwotCSAqIHRoaXMgbWVtb3J5IHdpbGwgdHJpZ2dlciBhIHBhZ2Ug ZmF1bHQgYW5kIGxldCB1cyBhbmFseXplCi0JICogdGhlIG1lbW9yeSBhY2Nlc3Nlcy4KLQkgKi8K LQlrbWVtY2hlY2tfaGlkZV9wYWdlcyhwYWdlLCBwYWdlcyk7Ci19Ci0KLXZvaWQga21lbWNoZWNr X2ZyZWVfc2hhZG93KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCi17Ci0Jc3RydWN0IHBh Z2UgKnNoYWRvdzsKLQlpbnQgcGFnZXM7Ci0JaW50IGk7Ci0KLQlpZiAoIWttZW1jaGVja19wYWdl X2lzX3RyYWNrZWQocGFnZSkpCi0JCXJldHVybjsKLQotCXBhZ2VzID0gMSA8PCBvcmRlcjsKLQot CWttZW1jaGVja19zaG93X3BhZ2VzKHBhZ2UsIHBhZ2VzKTsKLQotCXNoYWRvdyA9IHZpcnRfdG9f cGFnZShwYWdlWzBdLnNoYWRvdyk7Ci0KLQlmb3IoaSA9IDA7IGkgPCBwYWdlczsgKytpKQotCQlw YWdlW2ldLnNoYWRvdyA9IE5VTEw7Ci0KLQlfX2ZyZWVfcGFnZXMoc2hhZG93LCBvcmRlcik7Ci19 Ci0KLXZvaWQga21lbWNoZWNrX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90 IGdmcGZsYWdzLCB2b2lkICpvYmplY3QsCi0JCQkgIHNpemVfdCBzaXplKQotewotCWlmICh1bmxp a2VseSghb2JqZWN0KSkgLyogU2tpcCBvYmplY3QgaWYgYWxsb2NhdGlvbiBmYWlsZWQgKi8KLQkJ cmV0dXJuOwotCi0JLyoKLQkgKiBIYXMgYWxyZWFkeSBiZWVuIG1lbXNldCgpLCB3aGljaCBpbml0 aWFsaXplcyB0aGUgc2hhZG93IGZvciB1cwotCSAqIGFzIHdlbGwuCi0JICovCi0JaWYgKGdmcGZs YWdzICYgX19HRlBfWkVSTykKLQkJcmV0dXJuOwotCi0JLyogTm8gbmVlZCB0byBpbml0aWFsaXpl IHRoZSBzaGFkb3cgb2YgYSBub24tdHJhY2tlZCBzbGFiLiAqLwotCWlmIChzLT5mbGFncyAmIFNM QUJfTk9UUkFDSykKLQkJcmV0dXJuOwotCi0JaWYgKCFrbWVtY2hlY2tfZW5hYmxlZCB8fCBnZnBm bGFncyAmIF9fR0ZQX05PVFJBQ0spIHsKLQkJLyoKLQkJICogQWxsb3cgbm90cmFja2VkIG9iamVj dHMgdG8gYmUgYWxsb2NhdGVkIGZyb20KLQkJICogdHJhY2tlZCBjYWNoZXMuIE5vdGUgaG93ZXZl ciB0aGF0IHRoZXNlIG9iamVjdHMKLQkJICogd2lsbCBzdGlsbCBnZXQgcGFnZSBmYXVsdHMgb24g YWNjZXNzLCB0aGV5IGp1c3QKLQkJICogd29uJ3QgZXZlciBiZSBmbGFnZ2VkIGFzIHVuaW5pdGlh bGl6ZWQuIElmIHBhZ2UKLQkJICogZmF1bHRzIGFyZSBub3QgYWNjZXB0YWJsZSwgdGhlIHNsYWIg Y2FjaGUgaXRzZWxmCi0JCSAqIHNob3VsZCBiZSBtYXJrZWQgTk9UUkFDSy4KLQkJICovCi0JCWtt ZW1jaGVja19tYXJrX2luaXRpYWxpemVkKG9iamVjdCwgc2l6ZSk7Ci0JfSBlbHNlIGlmICghcy0+ Y3RvcikgewotCQkvKgotCQkgKiBOZXcgb2JqZWN0cyBzaG91bGQgYmUgbWFya2VkIHVuaW5pdGlh bGl6ZWQgYmVmb3JlCi0JCSAqIHRoZXkncmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlZC4KLQkJICov Ci0JCWttZW1jaGVja19tYXJrX3VuaW5pdGlhbGl6ZWQob2JqZWN0LCBzaXplKTsKLQl9Ci19Ci0K LXZvaWQga21lbWNoZWNrX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2Jq ZWN0LCBzaXplX3Qgc2l6ZSkKLXsKLQkvKiBUT0RPOiBSQ1UgZnJlZWluZyBpcyB1bnN1cHBvcnRl ZCBmb3Igbm93OyBoaWRlIGZhbHNlIHBvc2l0aXZlcy4gKi8KLQlpZiAoIXMtPmN0b3IgJiYgIShz LT5mbGFncyAmIFNMQUJfREVTVFJPWV9CWV9SQ1UpKQotCQlrbWVtY2hlY2tfbWFya19mcmVlZChv YmplY3QsIHNpemUpOwotfQotCi12b2lkIGttZW1jaGVja19wYWdlYWxsb2NfYWxsb2Moc3RydWN0 IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKLQkJCSAgICAgICBnZnBfdCBnZnBmbGFn cykKLXsKLQlpbnQgcGFnZXM7Ci0KLQlpZiAoZ2ZwZmxhZ3MgJiAoX19HRlBfSElHSE1FTSB8IF9f R0ZQX05PVFJBQ0spKQotCQlyZXR1cm47Ci0KLQlwYWdlcyA9IDEgPDwgb3JkZXI7Ci0KLQkvKgot CSAqIE5PVEU6IFdlIGNob29zZSB0byB0cmFjayBHRlBfWkVSTyBwYWdlcyB0b287IGluIGZhY3Qs IHRoZXkKLQkgKiBjYW4gYmVjb21lIHVuaW5pdGlhbGl6ZWQgYnkgY29weWluZyB1bmluaXRpYWxp emVkIG1lbW9yeQotCSAqIGludG8gdGhlbS4KLQkgKi8KLQotCS8qIFhYWDogQ2FuIHVzZSB6b25l LT5ub2RlIGZvciBub2RlPyAqLwotCWttZW1jaGVja19hbGxvY19zaGFkb3cocGFnZSwgb3JkZXIs IGdmcGZsYWdzLCAtMSk7Ci0KLQlpZiAoZ2ZwZmxhZ3MgJiBfX0dGUF9aRVJPKQotCQlrbWVtY2hl Y2tfbWFya19pbml0aWFsaXplZF9wYWdlcyhwYWdlLCBwYWdlcyk7Ci0JZWxzZQotCQlrbWVtY2hl Y2tfbWFya191bmluaXRpYWxpemVkX3BhZ2VzKHBhZ2UsIHBhZ2VzKTsKLX0KZGlmZiAtLWdpdCBh L21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAwN2VmYmMzYTg2NTYuLjlj NTE5NzJmNDE2OCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxs b2MuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5j bHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNs dWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9rYXNhbi5oPgogI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KQEAgLTEwMDEs NyArMTAwMCw2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmcmVlX3BhZ2VzX3ByZXBh cmUoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJVk1fQlVHX09OX1BBR0UoUGFnZVRhaWwocGFnZSksIHBh Z2UpOwogCiAJdHJhY2VfbW1fcGFnZV9mcmVlKHBhZ2UsIG9yZGVyKTsKLQlrbWVtY2hlY2tfZnJl ZV9zaGFkb3cocGFnZSwgb3JkZXIpOwogCiAJLyoKIAkgKiBDaGVjayB0YWlsIHBhZ2VzIGJlZm9y ZSBoZWFkIHBhZ2UgaW5mb3JtYXRpb24gaXMgY2xlYXJlZCB0bwpAQCAtMjU1OCwxNSArMjU1Niw2 IEBAIHZvaWQgc3BsaXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVy KQogCVZNX0JVR19PTl9QQUdFKFBhZ2VDb21wb3VuZChwYWdlKSwgcGFnZSk7CiAJVk1fQlVHX09O X1BBR0UoIXBhZ2VfY291bnQocGFnZSksIHBhZ2UpOwogCi0jaWZkZWYgQ09ORklHX0tNRU1DSEVD SwotCS8qCi0JICogU3BsaXQgc2hhZG93IHBhZ2VzIHRvbywgYmVjYXVzZSBmcmVlKHBhZ2VbMF0p IHdvdWxkCi0JICogb3RoZXJ3aXNlIGZyZWUgdGhlIHdob2xlIHNoYWRvdy4KLQkgKi8KLQlpZiAo a21lbWNoZWNrX3BhZ2VfaXNfdHJhY2tlZChwYWdlKSkKLQkJc3BsaXRfcGFnZSh2aXJ0X3RvX3Bh Z2UocGFnZVswXS5zaGFkb3cpLCBvcmRlcik7Ci0jZW5kaWYKLQogCWZvciAoaSA9IDE7IGkgPCAo MSA8PCBvcmRlcik7IGkrKykKIAkJc2V0X3BhZ2VfcmVmY291bnRlZChwYWdlICsgaSk7CiAJc3Bs aXRfcGFnZV9vd25lcihwYWdlLCBvcmRlcik7CkBAIC0zOTkzLDkgKzM5ODIsNiBAQCBfX2FsbG9j X3BhZ2VzX25vZGVtYXNrKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCXBh Z2UgPSBOVUxMOwogCX0KIAotCWlmIChrbWVtY2hlY2tfZW5hYmxlZCAmJiBwYWdlKQotCQlrbWVt Y2hlY2tfcGFnZWFsbG9jX2FsbG9jKHBhZ2UsIG9yZGVyLCBnZnBfbWFzayk7Ci0KIAl0cmFjZV9t bV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19tYXNrLCBhYy5taWdyYXRldHlwZSk7CiAK IAlyZXR1cm4gcGFnZTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCA4 MDdkODZjNzY5MDguLjJhMjA5MTE2MjJkZCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21t L3NsYWIuYwpAQCAtMTEzLDcgKzExMyw2IEBACiAjaW5jbHVkZQk8bGludXgvcnRtdXRleC5oPgog I2luY2x1ZGUJPGxpbnV4L3JlY2lwcm9jYWxfZGl2Lmg+CiAjaW5jbHVkZQk8bGludXgvZGVidWdv YmplY3RzLmg+Ci0jaW5jbHVkZQk8bGludXgva21lbWNoZWNrLmg+CiAjaW5jbHVkZQk8bGludXgv bWVtb3J5Lmg+CiAjaW5jbHVkZQk8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlCTxsaW51eC9z Y2hlZC90YXNrX3N0YWNrLmg+CkBAIC0xNDM2LDE1ICsxNDM1LDYgQEAgc3RhdGljIHN0cnVjdCBw YWdlICprbWVtX2dldHBhZ2VzKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdz LAogCWlmIChza19tZW1hbGxvY19zb2NrcygpICYmIHBhZ2VfaXNfcGZtZW1hbGxvYyhwYWdlKSkK IAkJU2V0UGFnZVNsYWJQZm1lbWFsbG9jKHBhZ2UpOwogCi0JaWYgKGttZW1jaGVja19lbmFibGVk ICYmICEoY2FjaGVwLT5mbGFncyAmIFNMQUJfTk9UUkFDSykpIHsKLQkJa21lbWNoZWNrX2FsbG9j X3NoYWRvdyhwYWdlLCBjYWNoZXAtPmdmcG9yZGVyLCBmbGFncywgbm9kZWlkKTsKLQotCQlpZiAo Y2FjaGVwLT5jdG9yKQotCQkJa21lbWNoZWNrX21hcmtfdW5pbml0aWFsaXplZF9wYWdlcyhwYWdl LCBucl9wYWdlcyk7Ci0JCWVsc2UKLQkJCWttZW1jaGVja19tYXJrX3VuYWxsb2NhdGVkX3BhZ2Vz KHBhZ2UsIG5yX3BhZ2VzKTsKLQl9Ci0KIAlyZXR1cm4gcGFnZTsKIH0KIApAQCAtMTQ1Niw4ICsx NDQ2LDYgQEAgc3RhdGljIHZvaWQga21lbV9mcmVlcGFnZXMoc3RydWN0IGttZW1fY2FjaGUgKmNh Y2hlcCwgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJaW50IG9yZGVyID0gY2FjaGVwLT5nZnBvcmRlcjsK IAl1bnNpZ25lZCBsb25nIG5yX2ZyZWVkID0gKDEgPDwgb3JkZXIpOwogCi0Ja21lbWNoZWNrX2Zy ZWVfc2hhZG93KHBhZ2UsIG9yZGVyKTsKLQogCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9SRUNM QUlNX0FDQ09VTlQpCiAJCXN1Yl96b25lX3BhZ2Vfc3RhdGUocGFnZV96b25lKHBhZ2UpLAogCQkJ CU5SX1NMQUJfUkVDTEFJTUFCTEUsIG5yX2ZyZWVkKTsKQEAgLTM1MjMsOCArMzUxMSw2IEBAIHZv aWQgX19fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwLAog CWttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKG9ianAsIGNhY2hlcC0+ZmxhZ3MpOwogCW9ianAgPSBj YWNoZV9mcmVlX2RlYnVnY2hlY2soY2FjaGVwLCBvYmpwLCBjYWxsZXIpOwogCi0Ja21lbWNoZWNr X3NsYWJfZnJlZShjYWNoZXAsIG9ianAsIGNhY2hlcC0+b2JqZWN0X3NpemUpOwotCiAJLyoKIAkg KiBTa2lwIGNhbGxpbmcgY2FjaGVfZnJlZV9hbGllbigpIHdoZW4gdGhlIHBsYXRmb3JtIGlzIG5v dCBudW1hLgogCSAqIFRoaXMgd2lsbCBhdm9pZCBjYWNoZSBtaXNzZXMgdGhhdCBoYXBwZW4gd2hp bGUgYWNjZXNzaW5nIHNsYWJwICh3aGljaApkaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xh Yi5oCmluZGV4IDY1ZTdjM2ZjYWM3Mi4uZjcwMWFiN2UwMTA3IDEwMDY0NAotLS0gYS9tbS9zbGFi LmgKKysrIGIvbW0vc2xhYi5oCkBAIC0zOSw3ICszOSw2IEBAIHN0cnVjdCBrbWVtX2NhY2hlIHsK IAogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KICNpbmNsdWRlIDxsaW51eC9mYXVsdC1p bmplY3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9r YXNhbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CiAjaW5jbHVkZSA8bGludXgvcmFu ZG9tLmg+CkBAIC00NTAsNyArNDQ5LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNsYWJfcG9zdF9h bGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywKIAlmb3IgKGkgPSAw OyBpIDwgc2l6ZTsgaSsrKSB7CiAJCXZvaWQgKm9iamVjdCA9IHBbaV07CiAKLQkJa21lbWNoZWNr X3NsYWJfYWxsb2MocywgZmxhZ3MsIG9iamVjdCwgc2xhYl9rc2l6ZShzKSk7CiAJCWttZW1sZWFr X2FsbG9jX3JlY3Vyc2l2ZShvYmplY3QsIHMtPm9iamVjdF9zaXplLCAxLAogCQkJCQkgcy0+Zmxh Z3MsIGZsYWdzKTsKIAkJa2FzYW5fc2xhYl9hbGxvYyhzLCBvYmplY3QsIGZsYWdzKTsKZGlmZiAt LWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA3ZjRiYzcwMjdlZDUuLmY3N2QwYWMw NTVlYSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMjEsNyArMjEs NiBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2Zp bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rYXNhbi5oPgotI2luY2x1ZGUgPGxpbnV4L2ttZW1jaGVj ay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgog I2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgpAQCAtMTMzNiwxMiArMTMzNSwxMSBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgKnNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lk ICp4KQogCSAqIFNvIGluIG9yZGVyIHRvIG1ha2UgdGhlIGRlYnVnIGNhbGxzIHRoYXQgZXhwZWN0 IGlycXMgdG8gYmUKIAkgKiBkaXNhYmxlZCB3ZSBuZWVkIHRvIGRpc2FibGUgaW50ZXJydXB0cyB0 ZW1wb3JhcmlseS4KIAkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19LTUVNQ0hFQ0spIHx8IGRlZmlu ZWQoQ09ORklHX0xPQ0tERVApCisjaWYgZGVmaW5lZChDT05GSUdfTE9DS0RFUCkKIAl7CiAJCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlrbWVtY2hl Y2tfc2xhYl9mcmVlKHMsIHgsIHMtPm9iamVjdF9zaXplKTsKIAkJZGVidWdfY2hlY2tfbm9fbG9j a3NfZnJlZWQoeCwgcy0+b2JqZWN0X3NpemUpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7 CiAJfQpAQCAtMTM2NSw4ICsxMzYzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNsYWJfZnJlZV9m cmVlbGlzdF9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogICogQ29tcGlsZXIgY2Fubm90IGRl dGVjdCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSByZW1vdmVkIGlmIHNsYWJfZnJlZV9ob29rKCkKICAq IGV2YWx1YXRlcyB0byBub3RoaW5nLiAgVGh1cywgY2F0Y2ggYWxsIHJlbGV2YW50IGNvbmZpZyBk ZWJ1ZyBvcHRpb25zIGhlcmUuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19LTUVNQ0hFQ0spIHx8 CQlcCi0JZGVmaW5lZChDT05GSUdfTE9DS0RFUCkJfHwJCVwKKyNpZglkZWZpbmVkKENPTkZJR19M T0NLREVQKQl8fAkJXAogCWRlZmluZWQoQ09ORklHX0RFQlVHX0tNRU1MRUFLKSB8fAlcCiAJZGVm aW5lZChDT05GSUdfREVCVUdfT0JKRUNUU19GUkVFKSB8fAlcCiAJZGVmaW5lZChDT05GSUdfS0FT QU4pCkBAIC0xNTYyLDIyICsxNTU5LDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlICphbGxvY2F0ZV9z bGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiAJCXN0YXQo cywgT1JERVJfRkFMTEJBQ0spOwogCX0KIAotCWlmIChrbWVtY2hlY2tfZW5hYmxlZCAmJgotCSAg ICAhKHMtPmZsYWdzICYgKFNMQUJfTk9UUkFDSyB8IERFQlVHX0RFRkFVTFRfRkxBR1MpKSkgewot CQlpbnQgcGFnZXMgPSAxIDw8IG9vX29yZGVyKG9vKTsKLQotCQlrbWVtY2hlY2tfYWxsb2Nfc2hh ZG93KHBhZ2UsIG9vX29yZGVyKG9vKSwgYWxsb2NfZ2ZwLCBub2RlKTsKLQotCQkvKgotCQkgKiBP YmplY3RzIGZyb20gY2FjaGVzIHRoYXQgaGF2ZSBhIGNvbnN0cnVjdG9yIGRvbid0IGdldAotCQkg KiBjbGVhcmVkIHdoZW4gdGhleSdyZSBhbGxvY2F0ZWQsIHNvIHdlIG5lZWQgdG8gZG8gaXQgaGVy ZS4KLQkJICovCi0JCWlmIChzLT5jdG9yKQotCQkJa21lbWNoZWNrX21hcmtfdW5pbml0aWFsaXpl ZF9wYWdlcyhwYWdlLCBwYWdlcyk7Ci0JCWVsc2UKLQkJCWttZW1jaGVja19tYXJrX3VuYWxsb2Nh dGVkX3BhZ2VzKHBhZ2UsIHBhZ2VzKTsKLQl9Ci0KIAlwYWdlLT5vYmplY3RzID0gb29fb2JqZWN0 cyhvbyk7CiAKIAlvcmRlciA9IGNvbXBvdW5kX29yZGVyKHBhZ2UpOwpAQCAtMTY1Myw4ICsxNjM0 LDYgQEAgc3RhdGljIHZvaWQgX19mcmVlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVj dCBwYWdlICpwYWdlKQogCQkJY2hlY2tfb2JqZWN0KHMsIHBhZ2UsIHAsIFNMVUJfUkVEX0lOQUNU SVZFKTsKIAl9CiAKLQlrbWVtY2hlY2tfZnJlZV9zaGFkb3cocGFnZSwgY29tcG91bmRfb3JkZXIo cGFnZSkpOwotCiAJbW9kX3pvbmVfcGFnZV9zdGF0ZShwYWdlX3pvbmUocGFnZSksCiAJCShzLT5m bGFncyAmIFNMQUJfUkVDTEFJTV9BQ0NPVU5UKSA/CiAJCU5SX1NMQUJfUkVDTEFJTUFCTEUgOiBO Ul9TTEFCX1VOUkVDTEFJTUFCTEUsCi0tIAoyLjEyLjAucmMwCgo= --001a1145b084a20317055a6885ba--