From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2090C433DF for ; Thu, 27 Aug 2020 12:36:47 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7ED972177B for ; Thu, 27 Aug 2020 12:36:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="vgw9XzJQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7ED972177B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linuxfoundation.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id F3D6F86B33; Thu, 27 Aug 2020 12:36:46 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id PrCYXK-M8Lyv; Thu, 27 Aug 2020 12:36:32 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by whitealder.osuosl.org (Postfix) with ESMTP id BFFC686B2B; Thu, 27 Aug 2020 12:36:32 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by ash.osuosl.org (Postfix) with ESMTP id 1CD721BF48C for ; Thu, 27 Aug 2020 12:36:31 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 0D28E85F63 for ; Thu, 27 Aug 2020 12:36:31 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id I3AZLjbLMLBA for ; Thu, 27 Aug 2020 12:36:24 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by fraxinus.osuosl.org (Postfix) with ESMTPS id E306785F58 for ; Thu, 27 Aug 2020 12:36:24 +0000 (UTC) Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5CC4D22B4B; Thu, 27 Aug 2020 12:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1598531784; bh=XJzHNtqEA4VGpyhxrQANZxkRs3NcAC7reSbP2vfFzck=; h=From:To:Cc:Subject:Date:From; b=vgw9XzJQRukrXJMPicp3vq7AsBFbmVeFbfI79RdOvWO+p7wxNPehBpZodQmK1Wo9N /KQbI5gkthr4nF9IcwgIamsBZOqAaHCeqXNF4Nz1CWQOW68n6jaHFqtnPMtZvd4o3m P3uZg7l3yqQ6Pz462N9WrvcfNMBhmJKyutAiqXaA= From: Greg Kroah-Hartman To: laura@labbott.name, sumit.semwal@linaro.org, john.stultz@linaro.org Subject: [PATCH] staging: ion: remove from the tree Date: Thu, 27 Aug 2020 14:36:27 +0200 Message-Id: <20200827123627.538189-1-gregkh@linuxfoundation.org> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 X-BeenThere: driverdev-devel@linuxdriverproject.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Driver Project Developer List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devel@driverdev.osuosl.org, linaro-mm-sig@lists.linaro.org, Shuah Khan , Todd Kjos , Greg Kroah-Hartman , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Suren Baghdasaryan , Christoph Hellwig , Joel Fernandes , =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Martijn Coenen , Hridya Valsaraju , kernel-team@android.com, =?UTF-8?q?Christian=20K=C3=B6nig?= , Christian Brauner Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" VGhlIElPTiBhbmRyb2lkIGNvZGUgaGFzIGxvbmcgYmVlbiBtYXJrZWQgdG8gYmUgcmVtb3ZlZCwg bm93IHRoYXQgd2UKZG1hLWJ1ZiBzdXBwb3J0IG1lcmdlZCBpbnRvIHRoZSByZWFsIHBhcnQgb2Yg dGhlIGtlcm5lbC4KCkl0IHdhcyB0aG91Z2h0IHRoYXQgd2UgY291bGQgd2FpdCB0byByZW1vdmUg dGhlIGlvbiBrZXJuZWwgYXQgYSBsYXRlcgp0aW1lLCBidXQgYXMgdGhlIG91dC1vZi10cmVlIEFu ZHJvaWQgZm9yayBvZiB0aGUgaW9uIGNvZGUgaGFzIGRpdmVyZ2VkCnF1aXRlIGEgYml0LCBhbmQg YW55IEFuZHJvaWQgZGV2aWNlIHVzaW5nIHRoZSBpb24gaW50ZXJmYWNlIHVzZXMgdGhhdApmb3Jr ZWQgdmVyc2lvbiBhbmQgbm90IHRoaXMgaW4tdHJlZSB2ZXJzaW9uLCB0aGUgaW4tdHJlZSBjb3B5 IG9mIHRoZQpjb2RlIGlzIGFiYW5kb25kZWQgYW5kIG5vdCB1c2VkIGJ5IGFueW9uZS4KCkNvbWJp bmUgdGhpcyBhYmFuZG9uZWQgY29kZWJhc2Ugd2l0aCB0aGUgbmVlZCB0byBtYWtlIGNoYW5nZXMg dG8gaXQgaW4Kb3JkZXIgdG8ga2VlcCB0aGUga2VybmVsIGJ1aWxkaW5nIHByb3Blcmx5LCB3aGlj aCB0aGVuIGNhdXNlcyBtZXJnZQppc3N1ZXMgd2hlbiBtZXJnaW5nIHRob3NlIGNoYW5nZXMgaW50 byB0aGUgb3V0LW9mLXRyZWUgQW5kcm9pZCBjb2RlLCBhbmQKeW91IGVuZCB1cCB3aXRoIHR3byBk aWZmZXJlbnQgZ3JvdXBzIG9mIHBlb3BsZSAodGhlIGluLWtlcm5lbC10cmVlCmRldmVsb3BlcnMs IGFuZCB0aGUgQW5kcm9pZCBrZXJuZWwgZGV2ZWxvcGVycykgd2hvIGFyZSBib3RoIGFubm95ZWQg YXQKdGhlIGN1cnJlbnQgc2l0dWF0aW9uLiAgQmVjYXVzZSBvZiB0aGlzIHByb2JsZW0sIGp1c3Qg ZHJvcCB0aGUgaW4ta2VybmVsCmNvcHkgb2YgdGhlIGlvbiBjb2RlIG5vdywgYXMgaXQncyBub3Qg dXNlZCwgYW5kIGlzIG9ubHkgY2F1c2luZyBwcm9ibGVtcwpmb3IgZXZlcnlvbmUgaW52b2x2ZWQu CgpDYzogIkFydmUgSGrDuG5uZXbDpWciIDxhcnZlQGFuZHJvaWQuY29tPgpDYzogIkNocmlzdGlh biBLw7ZuaWciIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CkNjOiBDaHJpc3RpYW4gQnJhdW5l ciA8Y2hyaXN0aWFuQGJyYXVuZXIuaW8+CkNjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJh ZGVhZC5vcmc+CkNjOiBIcmlkeWEgVmFsc2FyYWp1IDxocmlkeWFAZ29vZ2xlLmNvbT4KQ2M6IEpv ZWwgRmVybmFuZGVzIDxqb2VsQGpvZWxmZXJuYW5kZXMub3JnPgpDYzogSm9obiBTdHVsdHogPGpv aG4uc3R1bHR6QGxpbmFyby5vcmc+CkNjOiBMYXVyYSBBYmJvdHQgPGxhdXJhQGxhYmJvdHQubmFt ZT4KQ2M6IE1hcnRpam4gQ29lbmVuIDxtYWNvQGFuZHJvaWQuY29tPgpDYzogU2h1YWggS2hhbiA8 c2h1YWhAa2VybmVsLm9yZz4KQ2M6IFN1bWl0IFNlbXdhbCA8c3VtaXQuc2Vtd2FsQGxpbmFyby5v cmc+CkNjOiBTdXJlbiBCYWdoZGFzYXJ5YW4gPHN1cmVuYkBnb29nbGUuY29tPgpDYzogVG9kZCBL am9zIDx0a2pvc0BhbmRyb2lkLmNvbT4KQ2M6IGRldmVsQGRyaXZlcmRldi5vc3Vvc2wub3JnCkNj OiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCkNjOiBsaW5hcm8tbW0tc2lnQGxpc3Rz LmxpbmFyby5vcmcKU2lnbmVkLW9mZi1ieTogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGlu dXhmb3VuZGF0aW9uLm9yZz4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgMTAgLQogZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyAgICAg ICAgICAgICAgIHwgICAyIC0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgMiAtCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9UT0RPICAgICAgICAgICAg ICAgICAgfCAgIDUgLQogZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL0tjb25maWcgICAgICAg ICAgIHwgIDI3IC0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9NYWtlZmlsZSAgICAgICAg ICB8ICAgNCAtCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uLmMgICAgICAgICAgICAg fCA2NDkgLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9u LmggICAgICAgICAgICAgfCAzMDIgLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lv bi9pb25fY21hX2hlYXAuYyAgICB8IDEzOCAtLS0tCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9p b24vaW9uX2hlYXAuYyAgICAgICAgfCAyODYgLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL2lvbi9pb25fcGFnZV9wb29sLmMgICB8IDE1NSAtLS0tLQogZHJpdmVycy9zdGFnaW5nL2Fu ZHJvaWQvaW9uL2lvbl9zeXN0ZW1faGVhcC5jIHwgMzc3IC0tLS0tLS0tLS0KIGRyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL3VhcGkvaW9uLmggICAgICAgICAgICB8IDEyNyAtLS0tCiB0b29scy90ZXN0 aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDMgKy0KIHRvb2xzL3Rlc3Rp bmcvc2VsZnRlc3RzL2FuZHJvaWQvTWFrZWZpbGUgICAgICB8ICAzOSAtLQogdG9vbHMvdGVzdGlu Zy9zZWxmdGVzdHMvYW5kcm9pZC9jb25maWcgICAgICAgIHwgICA1IC0KIC4uLi90ZXN0aW5nL3Nl bGZ0ZXN0cy9hbmRyb2lkL2lvbi8uZ2l0aWdub3JlICB8ICAgNCAtCiB0b29scy90ZXN0aW5nL3Nl bGZ0ZXN0cy9hbmRyb2lkL2lvbi9NYWtlZmlsZSAgfCAgMjAgLQogdG9vbHMvdGVzdGluZy9zZWxm dGVzdHMvYW5kcm9pZC9pb24vUkVBRE1FICAgIHwgMTAxIC0tLQogdG9vbHMvdGVzdGluZy9zZWxm dGVzdHMvYW5kcm9pZC9pb24vaW9uLmggICAgIHwgMTM0IC0tLS0KIC4uLi90ZXN0aW5nL3NlbGZ0 ZXN0cy9hbmRyb2lkL2lvbi9pb25fdGVzdC5zaCB8ICA1OCAtLQogLi4uL3NlbGZ0ZXN0cy9hbmRy b2lkL2lvbi9pb25hcHBfZXhwb3J0LmMgICAgIHwgMTI3IC0tLS0KIC4uLi9zZWxmdGVzdHMvYW5k cm9pZC9pb24vaW9uYXBwX2ltcG9ydC5jICAgICB8ICA3OSAtLS0KIC4uLi9zZWxmdGVzdHMvYW5k cm9pZC9pb24vaW9ubWFwX3Rlc3QuYyAgICAgICB8IDEzNiAtLS0tCiAuLi4vdGVzdGluZy9zZWxm dGVzdHMvYW5kcm9pZC9pb24vaW9udXRpbHMuYyAgfCAyNTMgLS0tLS0tLQogLi4uL3Rlc3Rpbmcv c2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbnV0aWxzLmggIHwgIDU1IC0tCiAuLi4vdGVzdGluZy9z ZWxmdGVzdHMvYW5kcm9pZC9pb24vaXBjc29ja2V0LmMgfCAyMjcgLS0tLS0tCiAuLi4vdGVzdGlu Zy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaXBjc29ja2V0LmggfCAgMzUgLQogdG9vbHMvdGVzdGlu Zy9zZWxmdGVzdHMvYW5kcm9pZC9ydW4uc2ggICAgICAgIHwgICAzIC0KIDI5IGZpbGVzIGNoYW5n ZWQsIDEgaW5zZXJ0aW9uKCspLCAzMzYyIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9LY29uZmlnCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL01ha2VmaWxlCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbi5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9jbWFfaGVhcC5jCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9oZWFwLmMKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX3BhZ2VfcG9vbC5jCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9zeXN0ZW1faGVhcC5jCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9pb24uaAogZGVs ZXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvTWFrZWZpbGUK IGRlbGV0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2NvbmZp ZwogZGVsZXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9u Ly5naXRpZ25vcmUKIGRlbGV0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9h bmRyb2lkL2lvbi9NYWtlZmlsZQogZGVsZXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2Vs ZnRlc3RzL2FuZHJvaWQvaW9uL1JFQURNRQogZGVsZXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rp bmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbi5oCiBkZWxldGUgbW9kZSAxMDA3NTUgdG9vbHMv dGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaW9uX3Rlc3Quc2gKIGRlbGV0ZSBtb2RlIDEw MDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9pb25hcHBfZXhwb3J0LmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9p b25hcHBfaW1wb3J0LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0 cy9hbmRyb2lkL2lvbi9pb25tYXBfdGVzdC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVz dGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaW9udXRpbHMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbnV0aWxzLmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9pcGNzb2NrZXQu YwogZGVsZXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9u L2lwY3NvY2tldC5oCiBkZWxldGUgbW9kZSAxMDA3NTUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMv YW5kcm9pZC9ydW4uc2gKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmlu ZGV4IDBlZGFjODhmNGE4NC4uNWRmNmZiNDQwM2ZiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwor KysgYi9NQUlOVEFJTkVSUwpAQCAtMTIwMCwxNiArMTIwMCw2IEBAIFM6CVN1cHBvcnRlZAogRjoJ RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3J0Yy9nb29nbGUsZ29sZGZpc2gtcnRj LnR4dAogRjoJZHJpdmVycy9ydGMvcnRjLWdvbGRmaXNoLmMKIAotQU5EUk9JRCBJT04gRFJJVkVS Ci1NOglMYXVyYSBBYmJvdHQgPGxhYmJvdHRAcmVkaGF0LmNvbT4KLU06CVN1bWl0IFNlbXdhbCA8 c3VtaXQuc2Vtd2FsQGxpbmFyby5vcmc+Ci1MOglkZXZlbEBkcml2ZXJkZXYub3N1b3NsLm9yZwot TDoJZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwotTDoJbGluYXJvLW1tLXNpZ0BsaXN0 cy5saW5hcm8ub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVM6CVN1cHBvcnRl ZAotRjoJZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uCi1GOglkcml2ZXJzL3N0YWdpbmcvYW5k cm9pZC91YXBpL2lvbi5oCi0KIEFPQSAoQXBwbGUgT25ib2FyZCBBdWRpbykgQUxTQSBEUklWRVIK IE06CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiBMOglsaW51eHBw Yy1kZXZAbGlzdHMub3psYWJzLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJv aWQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKaW5kZXggOGQ4ZmQ1 YzI5MzQ5Li43MDQ5OGFkYjE1NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZwpAQCAtMTQsOCAr MTQsNiBAQCBjb25maWcgQVNITUVNCiAJICBJdCBpcywgaW4gdGhlb3J5LCBhIGdvb2QgbWVtb3J5 IGFsbG9jYXRvciBmb3IgbG93LW1lbW9yeSBkZXZpY2VzLAogCSAgYmVjYXVzZSBpdCBjYW4gZGlz Y2FyZCBzaGFyZWQgbWVtb3J5IHVuaXRzIHdoZW4gdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogCi1z b3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9LY29uZmlnIgotCiBlbmRpZiAjIGlm IEFORFJPSUQKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQv TWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9NYWtlZmlsZQppbmRleCAzYjY2Y2Qw YjBlYzUuLmU5YTU1YTVlNjUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQv TWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvTWFrZWZpbGUKQEAgLTEsNiAr MSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiBjY2ZsYWdzLXkgKz0g LUkkKHNyYykJCQkjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzCiAKLW9iai15CQkJCQkrPSBpb24v Ci0KIG9iai0kKENPTkZJR19BU0hNRU0pCQkJKz0gYXNobWVtLm8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy9hbmRyb2lkL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9UT0RPCmlu ZGV4IDgwZWNjZmFmNmRiNS4uZjc0ZWI0NGQ4ZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvYW5kcm9pZC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL1RPRE8KQEAgLTQs MTAgKzQsNSBAQCBUT0RPOgogCS0gYWRkIHByb3BlciBhcmNoIGRlcGVuZGVuY2llcyBhcyBuZWVk ZWQKIAktIGF1ZGl0IHVzZXJzcGFjZSBpbnRlcmZhY2VzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBz YW5lCiAKLQotaW9uLwotIC0gU3BsaXQgL2Rldi9pb24gdXAgaW50byBtdWx0aXBsZSBub2RlcyAo ZS5nLiAvZGV2L2lvbi9oZWFwMCkKLSAtIEJldHRlciB0ZXN0IGZyYW1ld29yayAoaW50ZWdyYXRp b24gd2l0aCBWR0VNIHdhcyBzdWdnZXN0ZWQpCi0KIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gR3Jl ZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIENjOgogQXJ2ZSBIasO4bm5ldsOl ZyA8YXJ2ZUBhbmRyb2lkLmNvbT4gYW5kIFJpbGV5IEFuZHJld3MgPHJpYW5kcmV3c0BhbmRyb2lk LmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9LY29uZmlnIGIv ZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDk4OWZlODRhOWY5ZC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy9hbmRyb2lkL2lvbi9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotbWVudWNvbmZpZyBJT04KLQlib29sICJJ b24gTWVtb3J5IE1hbmFnZXIiCi0JZGVwZW5kcyBvbiBIQVNfRE1BICYmIE1NVQotCXNlbGVjdCBH RU5FUklDX0FMTE9DQVRPUgotCXNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUgotCWhlbHAKLQkgIENo b29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIElPTiBNZW1vcnkgTWFuYWdlciwKLQkgIHVz ZWQgYnkgQW5kcm9pZCB0byBlZmZpY2llbnRseSBhbGxvY2F0ZSBidWZmZXJzCi0JICBmcm9tIHVz ZXJzcGFjZSB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBkcml2ZXJzLgotCSAgSWYgeW91J3Jl IG5vdCB1c2luZyBBbmRyb2lkIGl0cyBwcm9iYWJseSBzYWZlIHRvCi0JICBzYXkgTiBoZXJlLgot Ci1jb25maWcgSU9OX1NZU1RFTV9IRUFQCi0JYm9vbCAiSW9uIHN5c3RlbSBoZWFwIgotCWRlcGVu ZHMgb24gSU9OCi0JaGVscAotCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSB0aGUgSW9u IHN5c3RlbSBoZWFwLiBUaGUgc3lzdGVtIGhlYXAKLQkgIGlzIGJhY2tlZCBieSBwYWdlcyBmcm9t IHRoZSBidWRkeSBhbGxvY2F0b3IuIElmIGluIGRvdWJ0LCBzYXkgWS4KLQotY29uZmlnIElPTl9D TUFfSEVBUAotCWJvb2wgIklvbiBDTUEgaGVhcCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSU9OICYm IERNQV9DTUEKLQloZWxwCi0JICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIENNQSBoZWFw cyB3aXRoIElvbi4gVGhpcyBoZWFwIGlzIGJhY2tlZAotCSAgYnkgdGhlIENvbnRpZ3VvdXMgTWVt b3J5IEFsbG9jYXRvciAoQ01BKS4gSWYgeW91ciBzeXN0ZW0gaGFzIHRoZXNlCi0JICByZWdpb25z LCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5k cm9pZC9pb24vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vTWFrZWZpbGUK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNDQ4N2IxYTIyNC4uMDAwMDAwMDAwMDAw Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9NYWtlZmlsZQorKysgL2Rldi9udWxs CkBAIC0xLDQgKzAsMCBAQAotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotb2Jq LSQoQ09ORklHX0lPTikgKz0gaW9uLm8gaW9uX2hlYXAubwotb2JqLSQoQ09ORklHX0lPTl9TWVNU RU1fSEVBUCkgKz0gaW9uX3N5c3RlbV9oZWFwLm8gaW9uX3BhZ2VfcG9vbC5vCi1vYmotJChDT05G SUdfSU9OX0NNQV9IRUFQKSArPSBpb25fY21hX2hlYXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9z dGFnaW5nL2FuZHJvaWQvaW9uL2lvbi5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lv bi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWZlMDNjZWI3ZjEuLjAwMDAwMDAw MDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uLmMKKysrIC9kZXYvbnVs bApAQCAtMSw2NDkgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK LS8qCi0gKiBJT04gTWVtb3J5IEFsbG9jYXRvcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH b29nbGUsIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUg PGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KLSNpbmNsdWRlIDxs aW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9m aWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+ Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNp bmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNs dWRlIDxsaW51eC9tbV90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotI2luY2x1 ZGUgPGxpbnV4L3NjaGVkL3Rhc2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotI2luY2x1 ZGUgImlvbi5oIgotCi1zdGF0aWMgc3RydWN0IGlvbl9kZXZpY2UgKmludGVybmFsX2RldjsKLXN0 YXRpYyBpbnQgaGVhcF9pZDsKLQotLyogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxs ZWQgd2hpbGUgZGV2LT5sb2NrIGlzIGhlbGQgKi8KLXN0YXRpYyBzdHJ1Y3QgaW9uX2J1ZmZlciAq aW9uX2J1ZmZlcl9jcmVhdGUoc3RydWN0IGlvbl9oZWFwICpoZWFwLAotCQkJCQkgICAgc3RydWN0 IGlvbl9kZXZpY2UgKmRldiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbGVuLAotCQkJCQkgICAg dW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyOwotCWlu dCByZXQ7Ci0KLQlidWZmZXIgPSBremFsbG9jKHNpemVvZigqYnVmZmVyKSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKCFidWZmZXIpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JYnVmZmVyLT5o ZWFwID0gaGVhcDsKLQlidWZmZXItPmZsYWdzID0gZmxhZ3M7Ci0JYnVmZmVyLT5kZXYgPSBkZXY7 Ci0JYnVmZmVyLT5zaXplID0gbGVuOwotCi0JcmV0ID0gaGVhcC0+b3BzLT5hbGxvY2F0ZShoZWFw LCBidWZmZXIsIGxlbiwgZmxhZ3MpOwotCi0JaWYgKHJldCkgewotCQlpZiAoIShoZWFwLT5mbGFn cyAmIElPTl9IRUFQX0ZMQUdfREVGRVJfRlJFRSkpCi0JCQlnb3RvIGVycjI7Ci0KLQkJaW9uX2hl YXBfZnJlZWxpc3RfZHJhaW4oaGVhcCwgMCk7Ci0JCXJldCA9IGhlYXAtPm9wcy0+YWxsb2NhdGUo aGVhcCwgYnVmZmVyLCBsZW4sIGZsYWdzKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyMjsKLQl9 Ci0KLQlpZiAoIWJ1ZmZlci0+c2dfdGFibGUpIHsKLQkJV0FSTl9PTkNFKDEsICJUaGlzIGhlYXAg bmVlZHMgdG8gc2V0IHRoZSBzZ3RhYmxlIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJy MTsKLQl9Ci0KLQlzcGluX2xvY2soJmhlYXAtPnN0YXRfbG9jayk7Ci0JaGVhcC0+bnVtX29mX2J1 ZmZlcnMrKzsKLQloZWFwLT5udW1fb2ZfYWxsb2NfYnl0ZXMgKz0gbGVuOwotCWlmIChoZWFwLT5u dW1fb2ZfYWxsb2NfYnl0ZXMgPiBoZWFwLT5hbGxvY19ieXRlc193bSkKLQkJaGVhcC0+YWxsb2Nf Ynl0ZXNfd20gPSBoZWFwLT5udW1fb2ZfYWxsb2NfYnl0ZXM7Ci0Jc3Bpbl91bmxvY2soJmhlYXAt PnN0YXRfbG9jayk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYnVmZmVyLT5hdHRhY2htZW50cyk7Ci0J bXV0ZXhfaW5pdCgmYnVmZmVyLT5sb2NrKTsKLQlyZXR1cm4gYnVmZmVyOwotCi1lcnIxOgotCWhl YXAtPm9wcy0+ZnJlZShidWZmZXIpOwotZXJyMjoKLQlrZnJlZShidWZmZXIpOwotCXJldHVybiBF UlJfUFRSKHJldCk7Ci19Ci0KLXZvaWQgaW9uX2J1ZmZlcl9kZXN0cm95KHN0cnVjdCBpb25fYnVm ZmVyICpidWZmZXIpCi17Ci0JaWYgKGJ1ZmZlci0+a21hcF9jbnQgPiAwKSB7Ci0JCXByX3dhcm5f b25jZSgiJXM6IGJ1ZmZlciBzdGlsbCBtYXBwZWQgaW4gdGhlIGtlcm5lbFxuIiwKLQkJCSAgICAg X19mdW5jX18pOwotCQlidWZmZXItPmhlYXAtPm9wcy0+dW5tYXBfa2VybmVsKGJ1ZmZlci0+aGVh cCwgYnVmZmVyKTsKLQl9Ci0JYnVmZmVyLT5oZWFwLT5vcHMtPmZyZWUoYnVmZmVyKTsKLQlzcGlu X2xvY2soJmJ1ZmZlci0+aGVhcC0+c3RhdF9sb2NrKTsKLQlidWZmZXItPmhlYXAtPm51bV9vZl9i dWZmZXJzLS07Ci0JYnVmZmVyLT5oZWFwLT5udW1fb2ZfYWxsb2NfYnl0ZXMgLT0gYnVmZmVyLT5z aXplOwotCXNwaW5fdW5sb2NrKCZidWZmZXItPmhlYXAtPnN0YXRfbG9jayk7Ci0KLQlrZnJlZShi dWZmZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfaW9uX2J1ZmZlcl9kZXN0cm95KHN0cnVjdCBpb25f YnVmZmVyICpidWZmZXIpCi17Ci0Jc3RydWN0IGlvbl9oZWFwICpoZWFwID0gYnVmZmVyLT5oZWFw OwotCi0JaWYgKGhlYXAtPmZsYWdzICYgSU9OX0hFQVBfRkxBR19ERUZFUl9GUkVFKQotCQlpb25f aGVhcF9mcmVlbGlzdF9hZGQoaGVhcCwgYnVmZmVyKTsKLQllbHNlCi0JCWlvbl9idWZmZXJfZGVz dHJveShidWZmZXIpOwotfQotCi1zdGF0aWMgdm9pZCAqaW9uX2J1ZmZlcl9rbWFwX2dldChzdHJ1 Y3QgaW9uX2J1ZmZlciAqYnVmZmVyKQotewotCXZvaWQgKnZhZGRyOwotCi0JaWYgKGJ1ZmZlci0+ a21hcF9jbnQpIHsKLQkJYnVmZmVyLT5rbWFwX2NudCsrOwotCQlyZXR1cm4gYnVmZmVyLT52YWRk cjsKLQl9Ci0JdmFkZHIgPSBidWZmZXItPmhlYXAtPm9wcy0+bWFwX2tlcm5lbChidWZmZXItPmhl YXAsIGJ1ZmZlcik7Ci0JaWYgKFdBUk5fT05DRSghdmFkZHIsCi0JCSAgICAgICJoZWFwLT5vcHMt Pm1hcF9rZXJuZWwgc2hvdWxkIHJldHVybiBFUlJfUFRSIG9uIGVycm9yIikpCi0JCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOwotCWlmIChJU19FUlIodmFkZHIpKQotCQlyZXR1cm4gdmFkZHI7Ci0J YnVmZmVyLT52YWRkciA9IHZhZGRyOwotCWJ1ZmZlci0+a21hcF9jbnQrKzsKLQlyZXR1cm4gdmFk ZHI7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvbl9idWZmZXJfa21hcF9wdXQoc3RydWN0IGlvbl9idWZm ZXIgKmJ1ZmZlcikKLXsKLQlidWZmZXItPmttYXBfY250LS07Ci0JaWYgKCFidWZmZXItPmttYXBf Y250KSB7Ci0JCWJ1ZmZlci0+aGVhcC0+b3BzLT51bm1hcF9rZXJuZWwoYnVmZmVyLT5oZWFwLCBi dWZmZXIpOwotCQlidWZmZXItPnZhZGRyID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qg c2dfdGFibGUgKmR1cF9zZ190YWJsZShzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlKQotewotCXN0cnVj dCBzZ190YWJsZSAqbmV3X3RhYmxlOwotCWludCByZXQsIGk7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZywgKm5ld19zZzsKLQotCW5ld190YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdfdGFibGUp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5ld190YWJsZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Ci0KLQlyZXQgPSBzZ19hbGxvY190YWJsZShuZXdfdGFibGUsIHRhYmxlLT5vcmlnX25lbnRz LCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0KSB7Ci0JCWtmcmVlKG5ld190YWJsZSk7Ci0JCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQotCW5ld19zZyA9IG5ld190YWJsZS0+c2dsOwotCWZv cl9lYWNoX3NndGFibGVfc2codGFibGUsIHNnLCBpKSB7Ci0JCW1lbWNweShuZXdfc2csIHNnLCBz aXplb2YoKnNnKSk7Ci0JCW5ld19zZy0+ZG1hX2FkZHJlc3MgPSAwOwotCQluZXdfc2cgPSBzZ19u ZXh0KG5ld19zZyk7Ci0JfQotCi0JcmV0dXJuIG5ld190YWJsZTsKLX0KLQotc3RhdGljIHZvaWQg ZnJlZV9kdXBlZF90YWJsZShzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlKQotewotCXNnX2ZyZWVfdGFi bGUodGFibGUpOwotCWtmcmVlKHRhYmxlKTsKLX0KLQotc3RydWN0IGlvbl9kbWFfYnVmX2F0dGFj aG1lbnQgewotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlOwot CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLXN0YXRpYyBpbnQgaW9uX2RtYV9idWZfYXR0 YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCi0JCQkgICAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICphdHRhY2htZW50KQotewotCXN0cnVjdCBpb25fZG1hX2J1Zl9hdHRhY2htZW50ICph OwotCXN0cnVjdCBzZ190YWJsZSAqdGFibGU7Ci0Jc3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlciA9 IGRtYWJ1Zi0+cHJpdjsKLQotCWEgPSBremFsbG9jKHNpemVvZigqYSksIEdGUF9LRVJORUwpOwot CWlmICghYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0YWJsZSA9IGR1cF9zZ190YWJsZShidWZm ZXItPnNnX3RhYmxlKTsKLQlpZiAoSVNfRVJSKHRhYmxlKSkgewotCQlrZnJlZShhKTsKLQkJcmV0 dXJuIC1FTk9NRU07Ci0JfQotCi0JYS0+dGFibGUgPSB0YWJsZTsKLQlhLT5kZXYgPSBhdHRhY2ht ZW50LT5kZXY7Ci0JSU5JVF9MSVNUX0hFQUQoJmEtPmxpc3QpOwotCi0JYXR0YWNobWVudC0+cHJp diA9IGE7Ci0KLQltdXRleF9sb2NrKCZidWZmZXItPmxvY2spOwotCWxpc3RfYWRkKCZhLT5saXN0 LCAmYnVmZmVyLT5hdHRhY2htZW50cyk7Ci0JbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvbl9kbWFfYnVmX2RldGFjaChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLAotCQkJICAgICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0 dGFjaG1lbnQpCi17Ci0Jc3RydWN0IGlvbl9kbWFfYnVmX2F0dGFjaG1lbnQgKmEgPSBhdHRhY2ht ZW50LT5wcml2OwotCXN0cnVjdCBpb25fYnVmZmVyICpidWZmZXIgPSBkbWFidWYtPnByaXY7Ci0K LQltdXRleF9sb2NrKCZidWZmZXItPmxvY2spOwotCWxpc3RfZGVsKCZhLT5saXN0KTsKLQltdXRl eF91bmxvY2soJmJ1ZmZlci0+bG9jayk7Ci0JZnJlZV9kdXBlZF90YWJsZShhLT50YWJsZSk7Ci0K LQlrZnJlZShhKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqaW9uX21hcF9kbWFfYnVm KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCi0JCQkJCWVudW0gZG1hX2Rh dGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgaW9uX2RtYV9idWZfYXR0YWNobWVu dCAqYSA9IGF0dGFjaG1lbnQtPnByaXY7Ci0Jc3RydWN0IHNnX3RhYmxlICp0YWJsZTsKLQlpbnQg cmV0OwotCi0JdGFibGUgPSBhLT50YWJsZTsKLQotCXJldCA9IGRtYV9tYXBfc2d0YWJsZShhdHRh Y2htZW50LT5kZXYsIHRhYmxlLCBkaXJlY3Rpb24sIDApOwotCWlmIChyZXQpCi0JCXJldHVybiBF UlJfUFRSKHJldCk7Ci0KLQlyZXR1cm4gdGFibGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvbl91bm1h cF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCi0JCQkgICAg ICBzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlLAotCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rp b24gZGlyZWN0aW9uKQotewotCWRtYV91bm1hcF9zZ3RhYmxlKGF0dGFjaG1lbnQtPmRldiwgdGFi bGUsIGRpcmVjdGlvbiwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgaW9uX21tYXAoc3RydWN0IGRtYV9i dWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IGlvbl9i dWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghYnVm ZmVyLT5oZWFwLT5vcHMtPm1hcF91c2VyKSB7Ci0JCXByX2VycigiJXM6IHRoaXMgaGVhcCBkb2Vz IG5vdCBkZWZpbmUgYSBtZXRob2QgZm9yIG1hcHBpbmcgdG8gdXNlcnNwYWNlXG4iLAotCQkgICAg ICAgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIShidWZmZXItPmZs YWdzICYgSU9OX0ZMQUdfQ0FDSEVEKSkKLQkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3Jp dGVjb21iaW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKLQotCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9j ayk7Ci0JLyogbm93IG1hcCBpdCB0byB1c2Vyc3BhY2UgKi8KLQlyZXQgPSBidWZmZXItPmhlYXAt Pm9wcy0+bWFwX3VzZXIoYnVmZmVyLT5oZWFwLCBidWZmZXIsIHZtYSk7Ci0JbXV0ZXhfdW5sb2Nr KCZidWZmZXItPmxvY2spOwotCi0JaWYgKHJldCkKLQkJcHJfZXJyKCIlczogZmFpbHVyZSBtYXBw aW5nIGJ1ZmZlciB0byB1c2Vyc3BhY2VcbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7Ci0KLQlyZXR1 cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBpb25fZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFf YnVmICpkbWFidWYpCi17Ci0Jc3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+cHJp djsKLQotCV9pb25fYnVmZmVyX2Rlc3Ryb3koYnVmZmVyKTsKLX0KLQotc3RhdGljIGludCBpb25f ZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCi0JCQkJCWVu dW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgaW9uX2J1ZmZlciAq YnVmZmVyID0gZG1hYnVmLT5wcml2OwotCXZvaWQgKnZhZGRyOwotCXN0cnVjdCBpb25fZG1hX2J1 Zl9hdHRhY2htZW50ICphOwotCWludCByZXQgPSAwOwotCi0JLyoKLQkgKiBUT0RPOiBNb3ZlIHRo aXMgZWxzZXdoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgYWx3YXlzIG5lZWQgYSB2YWRkcgotCSAqLwot CWlmIChidWZmZXItPmhlYXAtPm9wcy0+bWFwX2tlcm5lbCkgewotCQltdXRleF9sb2NrKCZidWZm ZXItPmxvY2spOwotCQl2YWRkciA9IGlvbl9idWZmZXJfa21hcF9nZXQoYnVmZmVyKTsKLQkJaWYg KElTX0VSUih2YWRkcikpIHsKLQkJCXJldCA9IFBUUl9FUlIodmFkZHIpOwotCQkJZ290byB1bmxv Y2s7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOwotCX0KLQotCW11dGV4X2xv Y2soJmJ1ZmZlci0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmYnVmZmVyLT5hdHRh Y2htZW50cywgbGlzdCkKLQkJZG1hX3N5bmNfc2d0YWJsZV9mb3JfY3B1KGEtPmRldiwgYS0+dGFi bGUsIGRpcmVjdGlvbik7Ci0KLXVubG9jazoKLQltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7 Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpb25fZG1hX2J1Zl9lbmRfY3B1X2FjY2Vz cyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAotCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0 aW9uIGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyID0gZG1hYnVmLT5w cml2OwotCXN0cnVjdCBpb25fZG1hX2J1Zl9hdHRhY2htZW50ICphOwotCi0JaWYgKGJ1ZmZlci0+ aGVhcC0+b3BzLT5tYXBfa2VybmVsKSB7Ci0JCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7Ci0J CWlvbl9idWZmZXJfa21hcF9wdXQoYnVmZmVyKTsKLQkJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxv Y2spOwotCX0KLQotCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9l bnRyeShhLCAmYnVmZmVyLT5hdHRhY2htZW50cywgbGlzdCkKLQkJZG1hX3N5bmNfc2d0YWJsZV9m b3JfZGV2aWNlKGEtPmRldiwgYS0+dGFibGUsIGRpcmVjdGlvbik7Ci0JbXV0ZXhfdW5sb2NrKCZi dWZmZXItPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1h X2J1Zl9vcHMgZG1hX2J1Zl9vcHMgPSB7Ci0JLm1hcF9kbWFfYnVmID0gaW9uX21hcF9kbWFfYnVm LAotCS51bm1hcF9kbWFfYnVmID0gaW9uX3VubWFwX2RtYV9idWYsCi0JLm1tYXAgPSBpb25fbW1h cCwKLQkucmVsZWFzZSA9IGlvbl9kbWFfYnVmX3JlbGVhc2UsCi0JLmF0dGFjaCA9IGlvbl9kbWFf YnVmX2F0dGFjaCwKLQkuZGV0YWNoID0gaW9uX2RtYV9idWZfZGV0YWNoLAotCS5iZWdpbl9jcHVf YWNjZXNzID0gaW9uX2RtYV9idWZfYmVnaW5fY3B1X2FjY2VzcywKLQkuZW5kX2NwdV9hY2Nlc3Mg PSBpb25fZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcywKLX07Ci0KLXN0YXRpYyBpbnQgaW9uX2FsbG9j KHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBoZWFwX2lkX21hc2ssIHVuc2lnbmVkIGludCBmbGFn cykKLXsKLQlzdHJ1Y3QgaW9uX2RldmljZSAqZGV2ID0gaW50ZXJuYWxfZGV2OwotCXN0cnVjdCBp b25fYnVmZmVyICpidWZmZXIgPSBOVUxMOwotCXN0cnVjdCBpb25faGVhcCAqaGVhcDsKLQlERUZJ TkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBfaW5mbyk7Ci0JaW50IGZkOwotCXN0cnVjdCBkbWFf YnVmICpkbWFidWY7Ci0KLQlwcl9kZWJ1ZygiJXM6IGxlbiAlenUgaGVhcF9pZF9tYXNrICV1IGZs YWdzICV4XG4iLCBfX2Z1bmNfXywKLQkJIGxlbiwgaGVhcF9pZF9tYXNrLCBmbGFncyk7Ci0JLyoK LQkgKiB0cmF2ZXJzZSB0aGUgbGlzdCBvZiBoZWFwcyBhdmFpbGFibGUgaW4gdGhpcyBzeXN0ZW0g aW4gcHJpb3JpdHkKLQkgKiBvcmRlci4gIElmIHRoZSBoZWFwIHR5cGUgaXMgc3VwcG9ydGVkIGJ5 IHRoZSBjbGllbnQsIGFuZCBtYXRjaGVzIHRoZQotCSAqIHJlcXVlc3Qgb2YgdGhlIGNhbGxlciBh bGxvY2F0ZSBmcm9tIGl0LiAgUmVwZWF0IHVudGlsIGFsbG9jYXRlIGhhcwotCSAqIHN1Y2NlZWRl ZCBvciBhbGwgaGVhcHMgaGF2ZSBiZWVuIHRyaWVkCi0JICovCi0JbGVuID0gUEFHRV9BTElHTihs ZW4pOwotCi0JaWYgKCFsZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZG93bl9yZWFkKCZkZXYt PmxvY2spOwotCXBsaXN0X2Zvcl9lYWNoX2VudHJ5KGhlYXAsICZkZXYtPmhlYXBzLCBub2RlKSB7 Ci0JCS8qIGlmIHRoZSBjYWxsZXIgZGlkbid0IHNwZWNpZnkgdGhpcyBoZWFwIGlkICovCi0JCWlm ICghKCgxIDw8IGhlYXAtPmlkKSAmIGhlYXBfaWRfbWFzaykpCi0JCQljb250aW51ZTsKLQkJYnVm ZmVyID0gaW9uX2J1ZmZlcl9jcmVhdGUoaGVhcCwgZGV2LCBsZW4sIGZsYWdzKTsKLQkJaWYgKCFJ U19FUlIoYnVmZmVyKSkKLQkJCWJyZWFrOwotCX0KLQl1cF9yZWFkKCZkZXYtPmxvY2spOwotCi0J aWYgKCFidWZmZXIpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKElTX0VSUihidWZmZXIpKQot CQlyZXR1cm4gUFRSX0VSUihidWZmZXIpOwotCi0JZXhwX2luZm8ub3BzID0gJmRtYV9idWZfb3Bz OwotCWV4cF9pbmZvLnNpemUgPSBidWZmZXItPnNpemU7Ci0JZXhwX2luZm8uZmxhZ3MgPSBPX1JE V1I7Ci0JZXhwX2luZm8ucHJpdiA9IGJ1ZmZlcjsKLQotCWRtYWJ1ZiA9IGRtYV9idWZfZXhwb3J0 KCZleHBfaW5mbyk7Ci0JaWYgKElTX0VSUihkbWFidWYpKSB7Ci0JCV9pb25fYnVmZmVyX2Rlc3Ry b3koYnVmZmVyKTsKLQkJcmV0dXJuIFBUUl9FUlIoZG1hYnVmKTsKLQl9Ci0KLQlmZCA9IGRtYV9i dWZfZmQoZG1hYnVmLCBPX0NMT0VYRUMpOwotCWlmIChmZCA8IDApCi0JCWRtYV9idWZfcHV0KGRt YWJ1Zik7Ci0KLQlyZXR1cm4gZmQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW9uX3F1ZXJ5X2hlYXBzKHN0 cnVjdCBpb25faGVhcF9xdWVyeSAqcXVlcnkpCi17Ci0Jc3RydWN0IGlvbl9kZXZpY2UgKmRldiA9 IGludGVybmFsX2RldjsKLQlzdHJ1Y3QgaW9uX2hlYXBfZGF0YSBfX3VzZXIgKmJ1ZmZlciA9IHU2 NF90b191c2VyX3B0cihxdWVyeS0+aGVhcHMpOwotCWludCByZXQgPSAtRUlOVkFMLCBjbnQgPSAw LCBtYXhfY250OwotCXN0cnVjdCBpb25faGVhcCAqaGVhcDsKLQlzdHJ1Y3QgaW9uX2hlYXBfZGF0 YSBoZGF0YTsKLQotCW1lbXNldCgmaGRhdGEsIDAsIHNpemVvZihoZGF0YSkpOwotCi0JZG93bl9y ZWFkKCZkZXYtPmxvY2spOwotCWlmICghYnVmZmVyKSB7Ci0JCXF1ZXJ5LT5jbnQgPSBkZXYtPmhl YXBfY250OwotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocXVlcnktPmNudCA8 PSAwKQotCQlnb3RvIG91dDsKLQotCW1heF9jbnQgPSBxdWVyeS0+Y250OwotCi0JcGxpc3RfZm9y X2VhY2hfZW50cnkoaGVhcCwgJmRldi0+aGVhcHMsIG5vZGUpIHsKLQkJc3RybmNweShoZGF0YS5u YW1lLCBoZWFwLT5uYW1lLCBNQVhfSEVBUF9OQU1FKTsKLQkJaGRhdGEubmFtZVtzaXplb2YoaGRh dGEubmFtZSkgLSAxXSA9ICdcMCc7Ci0JCWhkYXRhLnR5cGUgPSBoZWFwLT50eXBlOwotCQloZGF0 YS5oZWFwX2lkID0gaGVhcC0+aWQ7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcigmYnVmZmVyW2NudF0s ICZoZGF0YSwgc2l6ZW9mKGhkYXRhKSkpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91 dDsKLQkJfQotCi0JCWNudCsrOwotCQlpZiAoY250ID49IG1heF9jbnQpCi0JCQlicmVhazsKLQl9 Ci0KLQlxdWVyeS0+Y250ID0gY250OwotCXJldCA9IDA7Ci1vdXQ6Ci0JdXBfcmVhZCgmZGV2LT5s b2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi11bmlvbiBpb25faW9jdGxfYXJnIHsKLQlzdHJ1Y3Qg aW9uX2FsbG9jYXRpb25fZGF0YSBhbGxvY2F0aW9uOwotCXN0cnVjdCBpb25faGVhcF9xdWVyeSBx dWVyeTsKLX07Ci0KLXN0YXRpYyBpbnQgdmFsaWRhdGVfaW9jdGxfYXJnKHVuc2lnbmVkIGludCBj bWQsIHVuaW9uIGlvbl9pb2N0bF9hcmcgKmFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2Ug SU9OX0lPQ19IRUFQX1FVRVJZOgotCQlpZiAoYXJnLT5xdWVyeS5yZXNlcnZlZDAgfHwKLQkJICAg IGFyZy0+cXVlcnkucmVzZXJ2ZWQxIHx8Ci0JCSAgICBhcmctPnF1ZXJ5LnJlc2VydmVkMikKLQkJ CXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGxvbmcgaW9uX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1 bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcmV0ID0gMDsKLQl1 bmlvbiBpb25faW9jdGxfYXJnIGRhdGE7Ci0KLQlpZiAoX0lPQ19TSVpFKGNtZCkgPiBzaXplb2Yo ZGF0YSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBUaGUgY29weV9mcm9tX3VzZXIg aXMgdW5jb25kaXRpb25hbCBoZXJlIGZvciBib3RoIHJlYWQgYW5kIHdyaXRlCi0JICogdG8gZG8g dGhlIHZhbGlkYXRlLiBJZiB0aGVyZSBpcyBubyB3cml0ZSBmb3IgdGhlIGlvY3RsLCB0aGUKLQkg KiBidWZmZXIgaXMgY2xlYXJlZAotCSAqLwotCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZv aWQgX191c2VyICopYXJnLCBfSU9DX1NJWkUoY21kKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0J cmV0ID0gdmFsaWRhdGVfaW9jdGxfYXJnKGNtZCwgJmRhdGEpOwotCWlmIChyZXQpIHsKLQkJcHJf d2Fybl9vbmNlKCIlczogaW9jdGwgdmFsaWRhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJl dHVybiByZXQ7Ci0JfQotCi0JaWYgKCEoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpKQotCQlt ZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2Ug SU9OX0lPQ19BTExPQzoKLQl7Ci0JCWludCBmZDsKLQotCQlmZCA9IGlvbl9hbGxvYyhkYXRhLmFs bG9jYXRpb24ubGVuLAotCQkJICAgICAgIGRhdGEuYWxsb2NhdGlvbi5oZWFwX2lkX21hc2ssCi0J CQkgICAgICAgZGF0YS5hbGxvY2F0aW9uLmZsYWdzKTsKLQkJaWYgKGZkIDwgMCkKLQkJCXJldHVy biBmZDsKLQotCQlkYXRhLmFsbG9jYXRpb24uZmQgPSBmZDsKLQotCQlicmVhazsKLQl9Ci0JY2Fz ZSBJT05fSU9DX0hFQVBfUVVFUlk6Ci0JCXJldCA9IGlvbl9xdWVyeV9oZWFwcygmZGF0YS5xdWVy eSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFRZOwotCX0KLQotCWlmIChf SU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191 c2VyICopYXJnLCAmZGF0YSwgX0lPQ19TSVpFKGNtZCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0J fQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IGlvbl9mb3BzID0gewotCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS51bmxvY2tl ZF9pb2N0bCA9IGlvbl9pb2N0bCwKLQkuY29tcGF0X2lvY3RsCT0gY29tcGF0X3B0cl9pb2N0bCwK LX07Ci0KLXN0YXRpYyBpbnQgZGVidWdfc2hyaW5rX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQot ewotCXN0cnVjdCBpb25faGVhcCAqaGVhcCA9IGRhdGE7Ci0Jc3RydWN0IHNocmlua19jb250cm9s IHNjOwotCWludCBvYmpzOwotCi0Jc2MuZ2ZwX21hc2sgPSBHRlBfSElHSFVTRVI7Ci0Jc2MubnJf dG9fc2NhbiA9IHZhbDsKLQotCWlmICghdmFsKSB7Ci0JCW9ianMgPSBoZWFwLT5zaHJpbmtlci5j b3VudF9vYmplY3RzKCZoZWFwLT5zaHJpbmtlciwgJnNjKTsKLQkJc2MubnJfdG9fc2NhbiA9IG9i anM7Ci0JfQotCi0JaGVhcC0+c2hyaW5rZXIuc2Nhbl9vYmplY3RzKCZoZWFwLT5zaHJpbmtlciwg JnNjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkZWJ1Z19zaHJpbmtfZ2V0KHZvaWQg KmRhdGEsIHU2NCAqdmFsKQotewotCXN0cnVjdCBpb25faGVhcCAqaGVhcCA9IGRhdGE7Ci0Jc3Ry dWN0IHNocmlua19jb250cm9sIHNjOwotCWludCBvYmpzOwotCi0Jc2MuZ2ZwX21hc2sgPSBHRlBf SElHSFVTRVI7Ci0Jc2MubnJfdG9fc2NhbiA9IDA7Ci0KLQlvYmpzID0gaGVhcC0+c2hyaW5rZXIu Y291bnRfb2JqZWN0cygmaGVhcC0+c2hyaW5rZXIsICZzYyk7Ci0JKnZhbCA9IG9ianM7Ci0JcmV0 dXJuIDA7Ci19Ci0KLURFRklORV9TSU1QTEVfQVRUUklCVVRFKGRlYnVnX3Nocmlua19mb3BzLCBk ZWJ1Z19zaHJpbmtfZ2V0LAotCQkJZGVidWdfc2hyaW5rX3NldCwgIiVsbHVcbiIpOwotCi12b2lk IGlvbl9kZXZpY2VfYWRkX2hlYXAoc3RydWN0IGlvbl9oZWFwICpoZWFwKQotewotCXN0cnVjdCBp b25fZGV2aWNlICpkZXYgPSBpbnRlcm5hbF9kZXY7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgZGVudHJ5 ICpoZWFwX3Jvb3Q7Ci0JY2hhciBkZWJ1Z19uYW1lWzY0XTsKLQotCWlmICghaGVhcC0+b3BzLT5h bGxvY2F0ZSB8fCAhaGVhcC0+b3BzLT5mcmVlKQotCQlwcl9lcnIoIiVzOiBjYW4gbm90IGFkZCBo ZWFwIHdpdGggaW52YWxpZCBvcHMgc3RydWN0LlxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQot CXNwaW5fbG9ja19pbml0KCZoZWFwLT5mcmVlX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZoZWFw LT5zdGF0X2xvY2spOwotCWhlYXAtPmZyZWVfbGlzdF9zaXplID0gMDsKLQotCWlmIChoZWFwLT5m bGFncyAmIElPTl9IRUFQX0ZMQUdfREVGRVJfRlJFRSkKLQkJaW9uX2hlYXBfaW5pdF9kZWZlcnJl ZF9mcmVlKGhlYXApOwotCi0JaWYgKChoZWFwLT5mbGFncyAmIElPTl9IRUFQX0ZMQUdfREVGRVJf RlJFRSkgfHwgaGVhcC0+b3BzLT5zaHJpbmspIHsKLQkJcmV0ID0gaW9uX2hlYXBfaW5pdF9zaHJp bmtlcihoZWFwKTsKLQkJaWYgKHJldCkKLQkJCXByX2VycigiJXM6IEZhaWxlZCB0byByZWdpc3Rl ciBzaHJpbmtlclxuIiwgX19mdW5jX18pOwotCX0KLQotCWhlYXAtPmRldiA9IGRldjsKLQloZWFw LT5udW1fb2ZfYnVmZmVycyA9IDA7Ci0JaGVhcC0+bnVtX29mX2FsbG9jX2J5dGVzID0gMDsKLQlo ZWFwLT5hbGxvY19ieXRlc193bSA9IDA7Ci0KLQloZWFwX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9k aXIoaGVhcC0+bmFtZSwgZGV2LT5kZWJ1Z19yb290KTsKLQlkZWJ1Z2ZzX2NyZWF0ZV91NjQoIm51 bV9vZl9idWZmZXJzIiwKLQkJCSAgIDA0NDQsIGhlYXBfcm9vdCwKLQkJCSAgICZoZWFwLT5udW1f b2ZfYnVmZmVycyk7Ci0JZGVidWdmc19jcmVhdGVfdTY0KCJudW1fb2ZfYWxsb2NfYnl0ZXMiLAot CQkJICAgMDQ0NCwKLQkJCSAgIGhlYXBfcm9vdCwKLQkJCSAgICZoZWFwLT5udW1fb2ZfYWxsb2Nf Ynl0ZXMpOwotCWRlYnVnZnNfY3JlYXRlX3U2NCgiYWxsb2NfYnl0ZXNfd20iLAotCQkJICAgMDQ0 NCwKLQkJCSAgIGhlYXBfcm9vdCwKLQkJCSAgICZoZWFwLT5hbGxvY19ieXRlc193bSk7Ci0KLQlp ZiAoaGVhcC0+c2hyaW5rZXIuY291bnRfb2JqZWN0cyAmJgotCSAgICBoZWFwLT5zaHJpbmtlci5z Y2FuX29iamVjdHMpIHsKLQkJc25wcmludGYoZGVidWdfbmFtZSwgNjQsICIlc19zaHJpbmsiLCBo ZWFwLT5uYW1lKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZShkZWJ1Z19uYW1lLAotCQkJCSAgICAw NjQ0LAotCQkJCSAgICBoZWFwX3Jvb3QsCi0JCQkJICAgIGhlYXAsCi0JCQkJICAgICZkZWJ1Z19z aHJpbmtfZm9wcyk7Ci0JfQotCi0JZG93bl93cml0ZSgmZGV2LT5sb2NrKTsKLQloZWFwLT5pZCA9 IGhlYXBfaWQrKzsKLQkvKgotCSAqIHVzZSBuZWdhdGl2ZSBoZWFwLT5pZCB0byByZXZlcnNlIHRo ZSBwcmlvcml0eSAtLSB3aGVuIHRyYXZlcnNpbmcKLQkgKiB0aGUgbGlzdCBsYXRlciBhdHRlbXB0 IGhpZ2hlciBpZCBudW1iZXJzIGZpcnN0Ci0JICovCi0JcGxpc3Rfbm9kZV9pbml0KCZoZWFwLT5u b2RlLCAtaGVhcC0+aWQpOwotCXBsaXN0X2FkZCgmaGVhcC0+bm9kZSwgJmRldi0+aGVhcHMpOwot Ci0JZGV2LT5oZWFwX2NudCsrOwotCXVwX3dyaXRlKCZkZXYtPmxvY2spOwotfQotRVhQT1JUX1NZ TUJPTChpb25fZGV2aWNlX2FkZF9oZWFwKTsKLQotc3RhdGljIGludCBpb25fZGV2aWNlX2NyZWF0 ZSh2b2lkKQotewotCXN0cnVjdCBpb25fZGV2aWNlICppZGV2OwotCWludCByZXQ7Ci0KLQlpZGV2 ID0ga3phbGxvYyhzaXplb2YoKmlkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlkZXYpCi0JCXJl dHVybiAtRU5PTUVNOwotCi0JaWRldi0+ZGV2Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SOwot CWlkZXYtPmRldi5uYW1lID0gImlvbiI7Ci0JaWRldi0+ZGV2LmZvcHMgPSAmaW9uX2ZvcHM7Ci0J aWRldi0+ZGV2LnBhcmVudCA9IE5VTEw7Ci0JcmV0ID0gbWlzY19yZWdpc3RlcigmaWRldi0+ZGV2 KTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiaW9uOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbWlzYyBk ZXZpY2UuXG4iKTsKLQkJa2ZyZWUoaWRldik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWRldi0+ ZGVidWdfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiaW9uIiwgTlVMTCk7Ci0JaW5pdF9yd3Nl bSgmaWRldi0+bG9jayk7Ci0JcGxpc3RfaGVhZF9pbml0KCZpZGV2LT5oZWFwcyk7Ci0JaW50ZXJu YWxfZGV2ID0gaWRldjsKLQlyZXR1cm4gMDsKLX0KLXN1YnN5c19pbml0Y2FsbChpb25fZGV2aWNl X2NyZWF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uLmgg Yi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGMxOTllODhhZmM2Yy4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy9hbmRyb2lkL2lvbi9pb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0vKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwotLyoKLSAqIElPTiBNZW1vcnkgQWxs b2NhdG9yIGtlcm5lbCBpbnRlcmZhY2UgaGVhZGVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEx IEdvb2dsZSwgSW5jLgotICovCi0KLSNpZm5kZWYgX0lPTl9ICi0jZGVmaW5lIF9JT05fSAotCi0j aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLWRpcmVjdGlvbi5o PgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgot I2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0jaW5j bHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zaHJpbmtlci5oPgotI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotCi0jaW5j bHVkZSAiLi4vdWFwaS9pb24uaCIKLQotLyoqCi0gKiBzdHJ1Y3QgaW9uX2J1ZmZlciAtIG1ldGFk YXRhIGZvciBhIHBhcnRpY3VsYXIgYnVmZmVyCi0gKiBAbGlzdDoJCWVsZW1lbnQgaW4gbGlzdCBv ZiBkZWZlcnJlZCBmcmVlYWJsZSBidWZmZXJzCi0gKiBAZGV2OgkJYmFjayBwb2ludGVyIHRvIHRo ZSBpb25fZGV2aWNlCi0gKiBAaGVhcDoJCWJhY2sgcG9pbnRlciB0byB0aGUgaGVhcCB0aGUgYnVm ZmVyIGNhbWUgZnJvbQotICogQGZsYWdzOgkJYnVmZmVyIHNwZWNpZmljIGZsYWdzCi0gKiBAcHJp dmF0ZV9mbGFnczoJaW50ZXJuYWwgYnVmZmVyIHNwZWNpZmljIGZsYWdzCi0gKiBAc2l6ZToJCXNp emUgb2YgdGhlIGJ1ZmZlcgotICogQHByaXZfdmlydDoJCXByaXZhdGUgZGF0YSB0byB0aGUgYnVm ZmVyIHJlcHJlc2VudGFibGUgYXMKLSAqCQkJYSB2b2lkICoKLSAqIEBsb2NrOgkJcHJvdGVjdHMg dGhlIGJ1ZmZlcnMgY250IGZpZWxkcwotICogQGttYXBfY250OgkJbnVtYmVyIG9mIHRpbWVzIHRo ZSBidWZmZXIgaXMgbWFwcGVkIHRvIHRoZSBrZXJuZWwKLSAqIEB2YWRkcjoJCXRoZSBrZXJuZWwg bWFwcGluZyBpZiBrbWFwX2NudCBpcyBub3QgemVybwotICogQHNnX3RhYmxlOgkJdGhlIHNnIHRh YmxlIGZvciB0aGUgYnVmZmVyCi0gKiBAYXR0YWNobWVudHM6CWxpc3Qgb2YgZGV2aWNlcyBhdHRh Y2hlZCB0byB0aGlzIGJ1ZmZlcgotICovCi1zdHJ1Y3QgaW9uX2J1ZmZlciB7Ci0Jc3RydWN0IGxp c3RfaGVhZCBsaXN0OwotCXN0cnVjdCBpb25fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGlvbl9oZWFw ICpoZWFwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBwcml2YXRlX2Zs YWdzOwotCXNpemVfdCBzaXplOwotCXZvaWQgKnByaXZfdmlydDsKLQlzdHJ1Y3QgbXV0ZXggbG9j azsKLQlpbnQga21hcF9jbnQ7Ci0Jdm9pZCAqdmFkZHI7Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ190 YWJsZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGF0dGFjaG1lbnRzOwotfTsKLQotdm9pZCBpb25fYnVm ZmVyX2Rlc3Ryb3koc3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlcik7Ci0KLS8qKgotICogc3RydWN0 IGlvbl9kZXZpY2UgLSB0aGUgbWV0YWRhdGEgb2YgdGhlIGlvbiBkZXZpY2Ugbm9kZQotICogQGRl djoJCXRoZSBhY3R1YWwgbWlzYyBkZXZpY2UKLSAqIEBsb2NrOgkJcndzZW0gcHJvdGVjdGluZyB0 aGUgdHJlZSBvZiBoZWFwcyBhbmQgY2xpZW50cwotICovCi1zdHJ1Y3QgaW9uX2RldmljZSB7Ci0J c3RydWN0IG1pc2NkZXZpY2UgZGV2OwotCXN0cnVjdCByd19zZW1hcGhvcmUgbG9jazsKLQlzdHJ1 Y3QgcGxpc3RfaGVhZCBoZWFwczsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19yb290OwotCWludCBo ZWFwX2NudDsKLX07Ci0KLS8qKgotICogc3RydWN0IGlvbl9oZWFwX29wcyAtIG9wcyB0byBvcGVy YXRlIG9uIGEgZ2l2ZW4gaGVhcAotICogQGFsbG9jYXRlOgkJYWxsb2NhdGUgbWVtb3J5Ci0gKiBA ZnJlZToJCWZyZWUgbWVtb3J5Ci0gKiBAbWFwX2tlcm5lbAkJbWFwIG1lbW9yeSB0byB0aGUga2Vy bmVsCi0gKiBAdW5tYXBfa2VybmVsCXVubWFwIG1lbW9yeSB0byB0aGUga2VybmVsCi0gKiBAbWFw X3VzZXIJCW1hcCBtZW1vcnkgdG8gdXNlcnNwYWNlCi0gKgotICogYWxsb2NhdGUsIHBoeXMsIGFu ZCBtYXBfdXNlciByZXR1cm4gMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZXJyb3IuCi0gKiBtYXBf ZG1hIGFuZCBtYXBfa2VybmVsIHJldHVybiBwb2ludGVyIG9uIHN1Y2Nlc3MsIEVSUl9QVFIgb24K LSAqIGVycm9yLiBAZnJlZSB3aWxsIGJlIGNhbGxlZCB3aXRoIElPTl9QUklWX0ZMQUdfU0hSSU5L RVJfRlJFRSBzZXQgaW4KLSAqIHRoZSBidWZmZXIncyBwcml2YXRlX2ZsYWdzIHdoZW4gY2FsbGVk IGZyb20gYSBzaHJpbmtlci4gSW4gdGhhdAotICogY2FzZSwgdGhlIHBhZ2VzIGJlaW5nIGZyZWUn ZCBtdXN0IGJlIHRydWx5IGZyZWUnZCBiYWNrIHRvIHRoZQotICogc3lzdGVtLCBub3QgcHV0IGlu IGEgcGFnZSBwb29sIG9yIG90aGVyd2lzZSBjYWNoZWQuCi0gKi8KLXN0cnVjdCBpb25faGVhcF9v cHMgewotCWludCAoKmFsbG9jYXRlKShzdHJ1Y3QgaW9uX2hlYXAgKmhlYXAsCi0JCQlzdHJ1Y3Qg aW9uX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGxlbiwKLQkJCXVuc2lnbmVkIGxvbmcg ZmxhZ3MpOwotCXZvaWQgKCpmcmVlKShzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyKTsKLQl2b2lk ICogKCptYXBfa2VybmVsKShzdHJ1Y3QgaW9uX2hlYXAgKmhlYXAsIHN0cnVjdCBpb25fYnVmZmVy ICpidWZmZXIpOwotCXZvaWQgKCp1bm1hcF9rZXJuZWwpKHN0cnVjdCBpb25faGVhcCAqaGVhcCwg c3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlcik7Ci0JaW50ICgqbWFwX3VzZXIpKHN0cnVjdCBpb25f aGVhcCAqbWFwcGVyLCBzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyLAotCQkJc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpOwotCWludCAoKnNocmluaykoc3RydWN0IGlvbl9oZWFwICpoZWFwLCBn ZnBfdCBnZnBfbWFzaywgaW50IG5yX3RvX3NjYW4pOwotfTsKLQotLyoqCi0gKiBoZWFwIGZsYWdz IC0gZmxhZ3MgYmV0d2VlbiB0aGUgaGVhcHMgYW5kIGNvcmUgaW9uIGNvZGUKLSAqLwotI2RlZmlu ZSBJT05fSEVBUF9GTEFHX0RFRkVSX0ZSRUUgQklUKDApCi0KLS8qKgotICogcHJpdmF0ZSBmbGFn cyAtIGZsYWdzIGludGVybmFsIHRvIGlvbgotICovCi0vKgotICogQnVmZmVyIGlzIGJlaW5nIGZy ZWVkIGZyb20gYSBzaHJpbmtlciBmdW5jdGlvbi4gU2tpcCBhbnkgcG9zc2libGUKLSAqIGhlYXAt c3BlY2lmaWMgY2FjaGluZyBtZWNoYW5pc20gKGUuZy4gcGFnZSBwb29scykuIEd1YXJhbnRlZXMg dGhhdAotICogYW55IGJ1ZmZlciBzdG9yYWdlIHRoYXQgY2FtZSBmcm9tIHRoZSBzeXN0ZW0gYWxs b2NhdG9yIHdpbGwgYmUKLSAqIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0gYWxsb2NhdG9yLgotICov Ci0jZGVmaW5lIElPTl9QUklWX0ZMQUdfU0hSSU5LRVJfRlJFRSBCSVQoMCkKLQotLyoqCi0gKiBz dHJ1Y3QgaW9uX2hlYXAgLSByZXByZXNlbnRzIGEgaGVhcCBpbiB0aGUgc3lzdGVtCi0gKiBAbm9k ZToJCXJiIG5vZGUgdG8gcHV0IHRoZSBoZWFwIG9uIHRoZSBkZXZpY2UncyB0cmVlIG9mIGhlYXBz Ci0gKiBAZGV2OgkJYmFjayBwb2ludGVyIHRvIHRoZSBpb25fZGV2aWNlCi0gKiBAdHlwZToJCXR5 cGUgb2YgaGVhcAotICogQG9wczoJCW9wcyBzdHJ1Y3QgYXMgYWJvdmUKLSAqIEBmbGFnczoJCWZs YWdzCi0gKiBAaWQ6CQkJaWQgb2YgaGVhcCwgYWxzbyBpbmRpY2F0ZXMgcHJpb3JpdHkgb2YgdGhp cyBoZWFwIHdoZW4KLSAqCQkJYWxsb2NhdGluZy4gIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgcGxh dGZvcm0gZGF0YSBhbmQKLSAqCQkJTVVTVCBiZSB1bmlxdWUKLSAqIEBuYW1lOgkJdXNlZCBmb3Ig ZGVidWdnaW5nCi0gKiBAc2hyaW5rZXI6CQlhIHNocmlua2VyIGZvciB0aGUgaGVhcAotICogQGZy ZWVfbGlzdDoJCWZyZWUgbGlzdCBoZWFkIGlmIGRlZmVycmVkIGZyZWUgaXMgdXNlZAotICogQGZy ZWVfbGlzdF9zaXplCXNpemUgb2YgdGhlIGRlZmVycmVkIGZyZWUgbGlzdCBpbiBieXRlcwotICog QGxvY2s6CQlwcm90ZWN0cyB0aGUgZnJlZSBsaXN0Ci0gKiBAd2FpdHF1ZXVlOgkJcXVldWUgdG8g d2FpdCBvbiBmcm9tIGRlZmVycmVkIGZyZWUgdGhyZWFkCi0gKiBAdGFzazoJCXRhc2sgc3RydWN0 IG9mIGRlZmVycmVkIGZyZWUgdGhyZWFkCi0gKiBAbnVtX29mX2J1ZmZlcnMJdGhlIG51bWJlciBv ZiBjdXJyZW50bHkgYWxsb2NhdGVkIGJ1ZmZlcnMKLSAqIEBudW1fb2ZfYWxsb2NfYnl0ZXMJdGhl IG51bWJlciBvZiBhbGxvY2F0ZWQgYnl0ZXMKLSAqIEBhbGxvY19ieXRlc193bQl0aGUgbnVtYmVy IG9mIGFsbG9jYXRlZCBieXRlcyB3YXRlcm1hcmsKLSAqCi0gKiBSZXByZXNlbnRzIGEgcG9vbCBv ZiBtZW1vcnkgZnJvbSB3aGljaCBidWZmZXJzIGNhbiBiZSBtYWRlLiAgSW4gc29tZQotICogc3lz dGVtcyB0aGUgb25seSBoZWFwIGlzIHJlZ3VsYXIgc3lzdGVtIG1lbW9yeSBhbGxvY2F0ZWQgdmlh IHZtYWxsb2MuCi0gKiBPbiBvdGhlcnMsIHNvbWUgYmxvY2tzIG1pZ2h0IHJlcXVpcmUgbGFyZ2Ug cGh5c2ljYWxseSBjb250aWd1b3VzIGJ1ZmZlcnMKLSAqIHRoYXQgYXJlIGFsbG9jYXRlZCBmcm9t IGEgc3BlY2lhbGx5IHJlc2VydmVkIGhlYXAuCi0gKi8KLXN0cnVjdCBpb25faGVhcCB7Ci0Jc3Ry dWN0IHBsaXN0X25vZGUgbm9kZTsKLQlzdHJ1Y3QgaW9uX2RldmljZSAqZGV2OwotCWVudW0gaW9u X2hlYXBfdHlwZSB0eXBlOwotCXN0cnVjdCBpb25faGVhcF9vcHMgKm9wczsKLQl1bnNpZ25lZCBs b25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpZDsKLQljb25zdCBjaGFyICpuYW1lOwotCi0JLyog ZGVmZXJyZWQgZnJlZSBzdXBwb3J0ICovCi0Jc3RydWN0IHNocmlua2VyIHNocmlua2VyOwotCXN0 cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OwotCXNpemVfdCBmcmVlX2xpc3Rfc2l6ZTsKLQlzcGlu bG9ja190IGZyZWVfbG9jazsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cXVldWU7Ci0Jc3RydWN0 IHRhc2tfc3RydWN0ICp0YXNrOwotCi0JLyogaGVhcCBzdGF0aXN0aWNzICovCi0JdTY0IG51bV9v Zl9idWZmZXJzOwotCXU2NCBudW1fb2ZfYWxsb2NfYnl0ZXM7Ci0JdTY0IGFsbG9jX2J5dGVzX3dt OwotCi0JLyogcHJvdGVjdCBoZWFwIHN0YXRpc3RpY3MgKi8KLQlzcGlubG9ja190IHN0YXRfbG9j azsKLX07Ci0KLS8qKgotICogaW9uX2RldmljZV9hZGRfaGVhcCAtIGFkZHMgYSBoZWFwIHRvIHRo ZSBpb24gZGV2aWNlCi0gKiBAaGVhcDoJCXRoZSBoZWFwIHRvIGFkZAotICovCi12b2lkIGlvbl9k ZXZpY2VfYWRkX2hlYXAoc3RydWN0IGlvbl9oZWFwICpoZWFwKTsKLQotLyoqCi0gKiBzb21lIGhl bHBlcnMgZm9yIGNvbW1vbiBvcGVyYXRpb25zIG9uIGJ1ZmZlcnMgdXNpbmcgdGhlIHNnX3RhYmxl Ci0gKiBhbmQgdmFkZHIgZmllbGRzCi0gKi8KLXZvaWQgKmlvbl9oZWFwX21hcF9rZXJuZWwoc3Ry dWN0IGlvbl9oZWFwICpoZWFwLCBzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyKTsKLXZvaWQgaW9u X2hlYXBfdW5tYXBfa2VybmVsKHN0cnVjdCBpb25faGVhcCAqaGVhcCwgc3RydWN0IGlvbl9idWZm ZXIgKmJ1ZmZlcik7Ci1pbnQgaW9uX2hlYXBfbWFwX3VzZXIoc3RydWN0IGlvbl9oZWFwICpoZWFw LCBzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyLAotCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSk7Ci1pbnQgaW9uX2hlYXBfYnVmZmVyX3plcm8oc3RydWN0IGlvbl9idWZmZXIgKmJ1 ZmZlcik7Ci0KLS8qKgotICogaW9uX2hlYXBfaW5pdF9zaHJpbmtlcgotICogQGhlYXA6CQl0aGUg aGVhcAotICoKLSAqIElmIGEgaGVhcCBzZXRzIHRoZSBJT05fSEVBUF9GTEFHX0RFRkVSX0ZSRUUg ZmxhZyBvciBkZWZpbmVzIHRoZSBzaHJpbmsgb3AKLSAqIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBj YWxsZWQgdG8gc2V0dXAgYSBzaHJpbmtlciB0byBzaHJpbmsgdGhlIGZyZWVsaXN0cwotICogYW5k IGNhbGwgdGhlIGhlYXAncyBzaHJpbmsgb3AuCi0gKi8KLWludCBpb25faGVhcF9pbml0X3Nocmlu a2VyKHN0cnVjdCBpb25faGVhcCAqaGVhcCk7Ci0KLS8qKgotICogaW9uX2hlYXBfaW5pdF9kZWZl cnJlZF9mcmVlIC0tIGluaXRpYWxpemUgZGVmZXJyZWQgZnJlZSBmdW5jdGlvbmFsaXR5Ci0gKiBA aGVhcDoJCXRoZSBoZWFwCi0gKgotICogSWYgYSBoZWFwIHNldHMgdGhlIElPTl9IRUFQX0ZMQUdf REVGRVJfRlJFRSBmbGFnIHRoaXMgZnVuY3Rpb24gd2lsbAotICogYmUgY2FsbGVkIHRvIHNldHVw IGRlZmVycmVkIGZyZWVzLiBDYWxscyB0byBmcmVlIHRoZSBidWZmZXIgd2lsbAotICogcmV0dXJu IGltbWVkaWF0ZWx5IGFuZCB0aGUgYWN0dWFsIGZyZWUgd2lsbCBvY2N1ciBzb21lIHRpbWUgbGF0 ZXIKLSAqLwotaW50IGlvbl9oZWFwX2luaXRfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgaW9uX2hlYXAg KmhlYXApOwotCi0vKioKLSAqIGlvbl9oZWFwX2ZyZWVsaXN0X2FkZCAtIGFkZCBhIGJ1ZmZlciB0 byB0aGUgZGVmZXJyZWQgZnJlZSBsaXN0Ci0gKiBAaGVhcDoJCXRoZSBoZWFwCi0gKiBAYnVmZmVy OgkJdGhlIGJ1ZmZlcgotICoKLSAqIEFkZHMgYW4gaXRlbSB0byB0aGUgZGVmZXJyZWQgZnJlZWxp c3QuCi0gKi8KLXZvaWQgaW9uX2hlYXBfZnJlZWxpc3RfYWRkKHN0cnVjdCBpb25faGVhcCAqaGVh cCwgc3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlcik7Ci0KLS8qKgotICogaW9uX2hlYXBfZnJlZWxp c3RfZHJhaW4gLSBkcmFpbiB0aGUgZGVmZXJyZWQgZnJlZSBsaXN0Ci0gKiBAaGVhcDoJCXRoZSBo ZWFwCi0gKiBAc2l6ZToJCWFtb3VudCBvZiBtZW1vcnkgdG8gZHJhaW4gaW4gYnl0ZXMKLSAqCi0g KiBEcmFpbnMgdGhlIGluZGljYXRlZCBhbW91bnQgb2YgbWVtb3J5IGZyb20gdGhlIGRlZmVycmVk IGZyZWVsaXN0IGltbWVkaWF0ZWx5LgotICogUmV0dXJucyB0aGUgdG90YWwgYW1vdW50IGZyZWVk LiAgVGhlIHRvdGFsIGZyZWVkIG1heSBiZSBoaWdoZXIgZGVwZW5kaW5nCi0gKiBvbiB0aGUgc2l6 ZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QsIG9yIGxvd2VyIGlmIHRoZXJlIGlzIGluc3VmZmlj aWVudAotICogdG90YWwgbWVtb3J5IG9uIHRoZSBmcmVlbGlzdC4KLSAqLwotc2l6ZV90IGlvbl9o ZWFwX2ZyZWVsaXN0X2RyYWluKHN0cnVjdCBpb25faGVhcCAqaGVhcCwgc2l6ZV90IHNpemUpOwot Ci0vKioKLSAqIGlvbl9oZWFwX2ZyZWVsaXN0X3NocmluayAtIGRyYWluIHRoZSBkZWZlcnJlZCBm cmVlCi0gKgkJCQlsaXN0LCBza2lwcGluZyBhbnkgaGVhcC1zcGVjaWZpYwotICoJCQkJcG9vbGlu ZyBvciBjYWNoaW5nIG1lY2hhbmlzbXMKLSAqCi0gKiBAaGVhcDoJCXRoZSBoZWFwCi0gKiBAc2l6 ZToJCWFtb3VudCBvZiBtZW1vcnkgdG8gZHJhaW4gaW4gYnl0ZXMKLSAqCi0gKiBEcmFpbnMgdGhl IGluZGljYXRlZCBhbW91bnQgb2YgbWVtb3J5IGZyb20gdGhlIGRlZmVycmVkIGZyZWVsaXN0IGlt bWVkaWF0ZWx5LgotICogUmV0dXJucyB0aGUgdG90YWwgYW1vdW50IGZyZWVkLiAgVGhlIHRvdGFs IGZyZWVkIG1heSBiZSBoaWdoZXIgZGVwZW5kaW5nCi0gKiBvbiB0aGUgc2l6ZSBvZiB0aGUgaXRl bXMgaW4gdGhlIGxpc3QsIG9yIGxvd2VyIGlmIHRoZXJlIGlzIGluc3VmZmljaWVudAotICogdG90 YWwgbWVtb3J5IG9uIHRoZSBmcmVlbGlzdC4KLSAqCi0gKiBVbmxpa2Ugd2l0aCBAaW9uX2hlYXBf ZnJlZWxpc3RfZHJhaW4sIGRvbid0IHB1dCBhbnkgcGFnZXMgYmFjayBpbnRvCi0gKiBwYWdlIHBv b2xzIG9yIG90aGVyd2lzZSBjYWNoZSB0aGUgcGFnZXMuIEV2ZXJ5dGhpbmcgbXVzdCBiZQotICog Z2VudWluZWx5IGZyZWUnZCBiYWNrIHRvIHRoZSBzeXN0ZW0uIElmIHlvdSdyZSBmcmVlJ2luZyBm cm9tIGEKLSAqIHNocmlua2VyIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGlzLiBOb3RlIHRo YXQgdGhpcyByZWxpZXMgb24KLSAqIHRoZSBoZWFwLm9wcy5mcmVlIGNhbGxiYWNrIGhvbm9yaW5n IHRoZSBJT05fUFJJVl9GTEFHX1NIUklOS0VSX0ZSRUUKLSAqIGZsYWcuCi0gKi8KLXNpemVfdCBp b25faGVhcF9mcmVlbGlzdF9zaHJpbmsoc3RydWN0IGlvbl9oZWFwICpoZWFwLAotCQkJCXNpemVf dCBzaXplKTsKLQotLyoqCi0gKiBpb25faGVhcF9mcmVlbGlzdF9zaXplIC0gcmV0dXJucyB0aGUg c2l6ZSBvZiB0aGUgZnJlZWxpc3QgaW4gYnl0ZXMKLSAqIEBoZWFwOgkJdGhlIGhlYXAKLSAqLwot c2l6ZV90IGlvbl9oZWFwX2ZyZWVsaXN0X3NpemUoc3RydWN0IGlvbl9oZWFwICpoZWFwKTsKLQot LyoqCi0gKiBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIGEgaGVhcCBwb29s IC0tIGFsbG93cyB5b3UKLSAqIHRvIGtlZXAgYSBwb29sIG9mIHByZSBhbGxvY2F0ZWQgbWVtb3J5 IHRvIHVzZSBmcm9tIHlvdXIgaGVhcC4gIEtlZXBpbmcKLSAqIGEgcG9vbCBvZiBtZW1vcnkgdGhh dCBpcyByZWFkeSBmb3IgZG1hLCBpZSBhbnkgY2FjaGVkIG1hcHBpbmcgaGF2ZSBiZWVuCi0gKiBp bnZhbGlkYXRlZCBmcm9tIHRoZSBjYWNoZSwgcHJvdmlkZXMgYSBzaWduaWZpY2FudCBwZXJmb3Jt YW5jZSBiZW5lZml0IG9uCi0gKiBtYW55IHN5c3RlbXMKLSAqLwotCi0vKioKLSAqIHN0cnVjdCBp b25fcGFnZV9wb29sIC0gcGFnZXBvb2wgc3RydWN0Ci0gKiBAaGlnaF9jb3VudDoJCW51bWJlciBv ZiBoaWdobWVtIGl0ZW1zIGluIHRoZSBwb29sCi0gKiBAbG93X2NvdW50OgkJbnVtYmVyIG9mIGxv d21lbSBpdGVtcyBpbiB0aGUgcG9vbAotICogQGhpZ2hfaXRlbXM6CQlsaXN0IG9mIGhpZ2htZW0g aXRlbXMKLSAqIEBsb3dfaXRlbXM6CQlsaXN0IG9mIGxvd21lbSBpdGVtcwotICogQG11dGV4OgkJ bG9jayBwcm90ZWN0aW5nIHRoaXMgc3RydWN0IGFuZCBlc3BlY2lhbGx5IHRoZSBjb3VudAotICoJ CQlpdGVtIGxpc3QKLSAqIEBnZnBfbWFzazoJCWdmcF9tYXNrIHRvIHVzZSBmcm9tIGFsbG9jCi0g KiBAb3JkZXI6CQlvcmRlciBvZiBwYWdlcyBpbiB0aGUgcG9vbAotICogQGxpc3Q6CQlwbGlzdCBu b2RlIGZvciBsaXN0IG9mIHBvb2xzCi0gKgotICogQWxsb3dzIHlvdSB0byBrZWVwIGEgcG9vbCBv ZiBwcmUgYWxsb2NhdGVkIHBhZ2VzIHRvIHVzZSBmcm9tIHlvdXIgaGVhcC4KLSAqIEtlZXBpbmcg YSBwb29sIG9mIHBhZ2VzIHRoYXQgaXMgcmVhZHkgZm9yIGRtYSwgaWUgYW55IGNhY2hlZCBtYXBw aW5nIGhhdmUKLSAqIGJlZW4gaW52YWxpZGF0ZWQgZnJvbSB0aGUgY2FjaGUsIHByb3ZpZGVzIGEg c2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYmVuZWZpdAotICogb24gbWFueSBzeXN0ZW1zCi0gKi8K LXN0cnVjdCBpb25fcGFnZV9wb29sIHsKLQlpbnQgaGlnaF9jb3VudDsKLQlpbnQgbG93X2NvdW50 OwotCXN0cnVjdCBsaXN0X2hlYWQgaGlnaF9pdGVtczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxvd19p dGVtczsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0JZ2ZwX3QgZ2ZwX21hc2s7Ci0JdW5zaWduZWQg aW50IG9yZGVyOwotCXN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7Ci19OwotCi1zdHJ1Y3QgaW9uX3Bh Z2VfcG9vbCAqaW9uX3BhZ2VfcG9vbF9jcmVhdGUoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGlu dCBvcmRlcik7Ci12b2lkIGlvbl9wYWdlX3Bvb2xfZGVzdHJveShzdHJ1Y3QgaW9uX3BhZ2VfcG9v bCAqcG9vbCk7Ci1zdHJ1Y3QgcGFnZSAqaW9uX3BhZ2VfcG9vbF9hbGxvYyhzdHJ1Y3QgaW9uX3Bh Z2VfcG9vbCAqcG9vbCk7Ci12b2lkIGlvbl9wYWdlX3Bvb2xfZnJlZShzdHJ1Y3QgaW9uX3BhZ2Vf cG9vbCAqcG9vbCwgc3RydWN0IHBhZ2UgKnBhZ2UpOwotCi0vKiogaW9uX3BhZ2VfcG9vbF9zaHJp bmsgLSBzaHJpbmtzIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgY2FjaGVkIGluIHRoZSBwb29sCi0g KiBAcG9vbDoJCXRoZSBwb29sCi0gKiBAZ2ZwX21hc2s6CQl0aGUgbWVtb3J5IHR5cGUgdG8gcmVj bGFpbQotICogQG5yX3RvX3NjYW46CQludW1iZXIgb2YgaXRlbXMgdG8gc2hyaW5rIGluIHBhZ2Vz Ci0gKgotICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGZyZWVkIGluIHBhZ2VzCi0gKi8K LWludCBpb25fcGFnZV9wb29sX3NocmluayhzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqcG9vbCwgZ2Zw X3QgZ2ZwX21hc2ssCi0JCQkgaW50IG5yX3RvX3NjYW4pOwotCi0jZW5kaWYgLyogX0lPTl9IICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2NtYV9oZWFwLmMg Yi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2NtYV9oZWFwLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGJmNjVlNjdlZjlkOC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZl cnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb25fY21hX2hlYXAuYworKysgL2Rldi9udWxsCkBAIC0x LDEzOCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLyoKLSAq IElPTiBNZW1vcnkgQWxsb2NhdG9yIENNQSBoZWFwIGV4cG9ydGVyCi0gKgotICogQ29weXJpZ2h0 IChDKSBMaW5hcm8gMjAxMgotICogQXV0aG9yOiA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9y Zz4gZm9yIFNULUVyaWNzc29uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNp bmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRl IDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbWEuaD4KLSNpbmNsdWRlIDxsaW51eC9z Y2F0dGVybGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLQotI2luY2x1ZGUgImlv bi5oIgotCi1zdHJ1Y3QgaW9uX2NtYV9oZWFwIHsKLQlzdHJ1Y3QgaW9uX2hlYXAgaGVhcDsKLQlz dHJ1Y3QgY21hICpjbWE7Ci19OwotCi0jZGVmaW5lIHRvX2NtYV9oZWFwKHgpIGNvbnRhaW5lcl9v Zih4LCBzdHJ1Y3QgaW9uX2NtYV9oZWFwLCBoZWFwKQotCi0vKiBJT04gQ01BIGhlYXAgb3BlcmF0 aW9ucyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgaW9uX2NtYV9hbGxvY2F0ZShzdHJ1Y3QgaW9u X2hlYXAgKmhlYXAsIHN0cnVjdCBpb25fYnVmZmVyICpidWZmZXIsCi0JCQkgICAgdW5zaWduZWQg bG9uZyBsZW4sCi0JCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlzdHJ1Y3QgaW9uX2Nt YV9oZWFwICpjbWFfaGVhcCA9IHRvX2NtYV9oZWFwKGhlYXApOwotCXN0cnVjdCBzZ190YWJsZSAq dGFibGU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2VzOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0Vf QUxJR04obGVuKTsKLQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZU OwotCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSBnZXRfb3JkZXIoc2l6ZSk7Ci0JaW50IHJldDsKLQot CWlmIChhbGlnbiA+IENPTkZJR19DTUFfQUxJR05NRU5UKQotCQlhbGlnbiA9IENPTkZJR19DTUFf QUxJR05NRU5UOwotCi0JcGFnZXMgPSBjbWFfYWxsb2MoY21hX2hlYXAtPmNtYSwgbnJfcGFnZXMs IGFsaWduLCBmYWxzZSk7Ci0JaWYgKCFwYWdlcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAo UGFnZUhpZ2hNZW0ocGFnZXMpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfY2xlYXJfcGFnZXMgPSBu cl9wYWdlczsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlczsKLQotCQl3aGlsZSAobnJfY2xl YXJfcGFnZXMgPiAwKSB7Ci0JCQl2b2lkICp2YWRkciA9IGttYXBfYXRvbWljKHBhZ2UpOwotCi0J CQltZW1zZXQodmFkZHIsIDAsIFBBR0VfU0laRSk7Ci0JCQlrdW5tYXBfYXRvbWljKHZhZGRyKTsK LQkJCXBhZ2UrKzsKLQkJCW5yX2NsZWFyX3BhZ2VzLS07Ci0JCX0KLQl9IGVsc2UgewotCQltZW1z ZXQocGFnZV9hZGRyZXNzKHBhZ2VzKSwgMCwgc2l6ZSk7Ci0JfQotCi0JdGFibGUgPSBrbWFsbG9j KHNpemVvZigqdGFibGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRhYmxlKQotCQlnb3RvIGVycjsK LQotCXJldCA9IHNnX2FsbG9jX3RhYmxlKHRhYmxlLCAxLCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0 KQotCQlnb3RvIGZyZWVfbWVtOwotCi0Jc2dfc2V0X3BhZ2UodGFibGUtPnNnbCwgcGFnZXMsIHNp emUsIDApOwotCi0JYnVmZmVyLT5wcml2X3ZpcnQgPSBwYWdlczsKLQlidWZmZXItPnNnX3RhYmxl ID0gdGFibGU7Ci0JcmV0dXJuIDA7Ci0KLWZyZWVfbWVtOgotCWtmcmVlKHRhYmxlKTsKLWVycjoK LQljbWFfcmVsZWFzZShjbWFfaGVhcC0+Y21hLCBwYWdlcywgbnJfcGFnZXMpOwotCXJldHVybiAt RU5PTUVNOwotfQotCi1zdGF0aWMgdm9pZCBpb25fY21hX2ZyZWUoc3RydWN0IGlvbl9idWZmZXIg KmJ1ZmZlcikKLXsKLQlzdHJ1Y3QgaW9uX2NtYV9oZWFwICpjbWFfaGVhcCA9IHRvX2NtYV9oZWFw KGJ1ZmZlci0+aGVhcCk7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2VzID0gYnVmZmVyLT5wcml2X3ZpcnQ7 Ci0JdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBBR0VfQUxJR04oYnVmZmVyLT5zaXplKSA+PiBQ QUdFX1NISUZUOwotCi0JLyogcmVsZWFzZSBtZW1vcnkgKi8KLQljbWFfcmVsZWFzZShjbWFfaGVh cC0+Y21hLCBwYWdlcywgbnJfcGFnZXMpOwotCS8qIHJlbGVhc2Ugc2cgdGFibGUgKi8KLQlzZ19m cmVlX3RhYmxlKGJ1ZmZlci0+c2dfdGFibGUpOwotCWtmcmVlKGJ1ZmZlci0+c2dfdGFibGUpOwot fQotCi1zdGF0aWMgc3RydWN0IGlvbl9oZWFwX29wcyBpb25fY21hX29wcyA9IHsKLQkuYWxsb2Nh dGUgPSBpb25fY21hX2FsbG9jYXRlLAotCS5mcmVlID0gaW9uX2NtYV9mcmVlLAotCS5tYXBfdXNl ciA9IGlvbl9oZWFwX21hcF91c2VyLAotCS5tYXBfa2VybmVsID0gaW9uX2hlYXBfbWFwX2tlcm5l bCwKLQkudW5tYXBfa2VybmVsID0gaW9uX2hlYXBfdW5tYXBfa2VybmVsLAotfTsKLQotc3RhdGlj IHN0cnVjdCBpb25faGVhcCAqX19pb25fY21hX2hlYXBfY3JlYXRlKHN0cnVjdCBjbWEgKmNtYSkK LXsKLQlzdHJ1Y3QgaW9uX2NtYV9oZWFwICpjbWFfaGVhcDsKLQotCWNtYV9oZWFwID0ga3phbGxv YyhzaXplb2YoKmNtYV9oZWFwKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWNtYV9oZWFwKQotCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWNtYV9oZWFwLT5oZWFwLm9wcyA9ICZpb25fY21h X29wczsKLQljbWFfaGVhcC0+Y21hID0gY21hOwotCWNtYV9oZWFwLT5oZWFwLnR5cGUgPSBJT05f SEVBUF9UWVBFX0RNQTsKLQlyZXR1cm4gJmNtYV9oZWFwLT5oZWFwOwotfQotCi1zdGF0aWMgaW50 IF9faW9uX2FkZF9jbWFfaGVhcHMoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKQotewotCXN0 cnVjdCBpb25faGVhcCAqaGVhcDsKLQotCWhlYXAgPSBfX2lvbl9jbWFfaGVhcF9jcmVhdGUoY21h KTsKLQlpZiAoSVNfRVJSKGhlYXApKQotCQlyZXR1cm4gUFRSX0VSUihoZWFwKTsKLQotCWhlYXAt Pm5hbWUgPSBjbWFfZ2V0X25hbWUoY21hKTsKLQotCWlvbl9kZXZpY2VfYWRkX2hlYXAoaGVhcCk7 Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW9uX2FkZF9jbWFfaGVhcHModm9pZCkKLXsK LQljbWFfZm9yX2VhY2hfYXJlYShfX2lvbl9hZGRfY21hX2hlYXBzLCBOVUxMKTsKLQlyZXR1cm4g MDsKLX0KLWRldmljZV9pbml0Y2FsbChpb25fYWRkX2NtYV9oZWFwcyk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2hlYXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9h bmRyb2lkL2lvbi9pb25faGVhcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTdl MGEyNDRmZmMuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24v aW9uX2hlYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAotLyoKLSAqIElPTiBNZW1vcnkgQWxsb2NhdG9yIGdlbmVy aWMgaGVhcCBoZWxwZXJzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLgot ICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+ Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5j bHVkZSA8bGludXgvcnRtdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVk ZSA8dWFwaS9saW51eC9zY2hlZC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0 Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0jaW5jbHVkZSAiaW9uLmgiCi0KLXZv aWQgKmlvbl9oZWFwX21hcF9rZXJuZWwoc3RydWN0IGlvbl9oZWFwICpoZWFwLAotCQkJICBzdHJ1 Y3QgaW9uX2J1ZmZlciAqYnVmZmVyKQotewotCXN0cnVjdCBzZ19wYWdlX2l0ZXIgcGl0ZXI7Ci0J dm9pZCAqdmFkZHI7Ci0JcGdwcm90X3QgcGdwcm90OwotCXN0cnVjdCBzZ190YWJsZSAqdGFibGUg PSBidWZmZXItPnNnX3RhYmxlOwotCWludCBucGFnZXMgPSBQQUdFX0FMSUdOKGJ1ZmZlci0+c2l6 ZSkgLyBQQUdFX1NJWkU7Ci0Jc3RydWN0IHBhZ2UgKipwYWdlcyA9IHZtYWxsb2MoYXJyYXlfc2l6 ZShucGFnZXMsCi0JCQkJCQkgc2l6ZW9mKHN0cnVjdCBwYWdlICopKSk7Ci0Jc3RydWN0IHBhZ2Ug Kip0bXAgPSBwYWdlczsKLQotCWlmICghcGFnZXMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OwotCi0JaWYgKGJ1ZmZlci0+ZmxhZ3MgJiBJT05fRkxBR19DQUNIRUQpCi0JCXBncHJvdCA9IFBB R0VfS0VSTkVMOwotCWVsc2UKLQkJcGdwcm90ID0gcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tF Uk5FTCk7Ci0KLQlmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UodGFibGUsICZwaXRlciwgMCkgewotCQlC VUdfT04odG1wIC0gcGFnZXMgPj0gbnBhZ2VzKTsKLQkJKnRtcCsrID0gc2dfcGFnZV9pdGVyX3Bh Z2UoJnBpdGVyKTsKLQl9Ci0KLQl2YWRkciA9IHZtYXAocGFnZXMsIG5wYWdlcywgVk1fTUFQLCBw Z3Byb3QpOwotCXZmcmVlKHBhZ2VzKTsKLQotCWlmICghdmFkZHIpCi0JCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwotCi0JcmV0dXJuIHZhZGRyOwotfQotCi12b2lkIGlvbl9oZWFwX3VubWFwX2tl cm5lbChzdHJ1Y3QgaW9uX2hlYXAgKmhlYXAsCi0JCQkgICBzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVm ZmVyKQotewotCXZ1bm1hcChidWZmZXItPnZhZGRyKTsKLX0KLQotaW50IGlvbl9oZWFwX21hcF91 c2VyKHN0cnVjdCBpb25faGVhcCAqaGVhcCwgc3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlciwKLQkJ ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHNnX3BhZ2VfaXRl ciBwaXRlcjsKLQlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlID0gYnVmZmVyLT5zZ190YWJsZTsKLQl1 bnNpZ25lZCBsb25nIGFkZHIgPSB2bWEtPnZtX3N0YXJ0OwotCWludCByZXQ7Ci0KLQlmb3JfZWFj aF9zZ3RhYmxlX3BhZ2UodGFibGUsICZwaXRlciwgdm1hLT52bV9wZ29mZikgewotCQlzdHJ1Y3Qg cGFnZSAqcGFnZSA9IHNnX3BhZ2VfaXRlcl9wYWdlKCZwaXRlcik7Ci0KLQkJcmV0ID0gcmVtYXBf cGZuX3JhbmdlKHZtYSwgYWRkciwgcGFnZV90b19wZm4ocGFnZSksIFBBR0VfU0laRSwKLQkJCQkg ICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlh ZGRyICs9IFBBR0VfU0laRTsKLQkJaWYgKGFkZHIgPj0gdm1hLT52bV9lbmQpCi0JCQlyZXR1cm4g MDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpb25faGVhcF9jbGVhcl9wYWdl cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtLCBwZ3Byb3RfdCBwZ3Byb3QpCi17Ci0Jdm9p ZCAqYWRkciA9IHZtYXAocGFnZXMsIG51bSwgVk1fTUFQLCBwZ3Byb3QpOwotCi0JaWYgKCFhZGRy KQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoYWRkciwgMCwgUEFHRV9TSVpFICogbnVtKTsK LQl2dW5tYXAoYWRkcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpb25faGVhcF9z Z2xpc3RfemVybyhzdHJ1Y3Qgc2dfdGFibGUgKnNndCwgcGdwcm90X3QgcGdwcm90KQotewotCWlu dCBwID0gMDsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHBpdGVyOwotCXN0 cnVjdCBwYWdlICpwYWdlc1szMl07Ci0KLQlmb3JfZWFjaF9zZ3RhYmxlX3BhZ2Uoc2d0LCAmcGl0 ZXIsIDApIHsKLQkJcGFnZXNbcCsrXSA9IHNnX3BhZ2VfaXRlcl9wYWdlKCZwaXRlcik7Ci0JCWlm IChwID09IEFSUkFZX1NJWkUocGFnZXMpKSB7Ci0JCQlyZXQgPSBpb25faGVhcF9jbGVhcl9wYWdl cyhwYWdlcywgcCwgcGdwcm90KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCXAg PSAwOwotCQl9Ci0JfQotCWlmIChwKQotCQlyZXQgPSBpb25faGVhcF9jbGVhcl9wYWdlcyhwYWdl cywgcCwgcGdwcm90KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBpb25faGVhcF9idWZmZXJf emVybyhzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyKQotewotCXN0cnVjdCBzZ190YWJsZSAqdGFi bGUgPSBidWZmZXItPnNnX3RhYmxlOwotCXBncHJvdF90IHBncHJvdDsKLQotCWlmIChidWZmZXIt PmZsYWdzICYgSU9OX0ZMQUdfQ0FDSEVEKQotCQlwZ3Byb3QgPSBQQUdFX0tFUk5FTDsKLQllbHNl Ci0JCXBncHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUoUEFHRV9LRVJORUwpOwotCi0JcmV0dXJu IGlvbl9oZWFwX3NnbGlzdF96ZXJvKHRhYmxlLCBwZ3Byb3QpOwotfQotCi12b2lkIGlvbl9oZWFw X2ZyZWVsaXN0X2FkZChzdHJ1Y3QgaW9uX2hlYXAgKmhlYXAsIHN0cnVjdCBpb25fYnVmZmVyICpi dWZmZXIpCi17Ci0Jc3Bpbl9sb2NrKCZoZWFwLT5mcmVlX2xvY2spOwotCWxpc3RfYWRkKCZidWZm ZXItPmxpc3QsICZoZWFwLT5mcmVlX2xpc3QpOwotCWhlYXAtPmZyZWVfbGlzdF9zaXplICs9IGJ1 ZmZlci0+c2l6ZTsKLQlzcGluX3VubG9jaygmaGVhcC0+ZnJlZV9sb2NrKTsKLQl3YWtlX3VwKCZo ZWFwLT53YWl0cXVldWUpOwotfQotCi1zaXplX3QgaW9uX2hlYXBfZnJlZWxpc3Rfc2l6ZShzdHJ1 Y3QgaW9uX2hlYXAgKmhlYXApCi17Ci0Jc2l6ZV90IHNpemU7Ci0KLQlzcGluX2xvY2soJmhlYXAt PmZyZWVfbG9jayk7Ci0Jc2l6ZSA9IGhlYXAtPmZyZWVfbGlzdF9zaXplOwotCXNwaW5fdW5sb2Nr KCZoZWFwLT5mcmVlX2xvY2spOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLXN0YXRpYyBzaXplX3Qg X2lvbl9oZWFwX2ZyZWVsaXN0X2RyYWluKHN0cnVjdCBpb25faGVhcCAqaGVhcCwgc2l6ZV90IHNp emUsCi0JCQkJICAgICAgIGJvb2wgc2tpcF9wb29scykKLXsKLQlzdHJ1Y3QgaW9uX2J1ZmZlciAq YnVmZmVyOwotCXNpemVfdCB0b3RhbF9kcmFpbmVkID0gMDsKLQotCWlmIChpb25faGVhcF9mcmVl bGlzdF9zaXplKGhlYXApID09IDApCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrKCZoZWFwLT5m cmVlX2xvY2spOwotCWlmIChzaXplID09IDApCi0JCXNpemUgPSBoZWFwLT5mcmVlX2xpc3Rfc2l6 ZTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmaGVhcC0+ZnJlZV9saXN0KSkgewotCQlpZiAodG90 YWxfZHJhaW5lZCA+PSBzaXplKQotCQkJYnJlYWs7Ci0JCWJ1ZmZlciA9IGxpc3RfZmlyc3RfZW50 cnkoJmhlYXAtPmZyZWVfbGlzdCwgc3RydWN0IGlvbl9idWZmZXIsCi0JCQkJCSAgbGlzdCk7Ci0J CWxpc3RfZGVsKCZidWZmZXItPmxpc3QpOwotCQloZWFwLT5mcmVlX2xpc3Rfc2l6ZSAtPSBidWZm ZXItPnNpemU7Ci0JCWlmIChza2lwX3Bvb2xzKQotCQkJYnVmZmVyLT5wcml2YXRlX2ZsYWdzIHw9 IElPTl9QUklWX0ZMQUdfU0hSSU5LRVJfRlJFRTsKLQkJdG90YWxfZHJhaW5lZCArPSBidWZmZXIt PnNpemU7Ci0JCXNwaW5fdW5sb2NrKCZoZWFwLT5mcmVlX2xvY2spOwotCQlpb25fYnVmZmVyX2Rl c3Ryb3koYnVmZmVyKTsKLQkJc3Bpbl9sb2NrKCZoZWFwLT5mcmVlX2xvY2spOwotCX0KLQlzcGlu X3VubG9jaygmaGVhcC0+ZnJlZV9sb2NrKTsKLQotCXJldHVybiB0b3RhbF9kcmFpbmVkOwotfQot Ci1zaXplX3QgaW9uX2hlYXBfZnJlZWxpc3RfZHJhaW4oc3RydWN0IGlvbl9oZWFwICpoZWFwLCBz aXplX3Qgc2l6ZSkKLXsKLQlyZXR1cm4gX2lvbl9oZWFwX2ZyZWVsaXN0X2RyYWluKGhlYXAsIHNp emUsIGZhbHNlKTsKLX0KLQotc2l6ZV90IGlvbl9oZWFwX2ZyZWVsaXN0X3NocmluayhzdHJ1Y3Qg aW9uX2hlYXAgKmhlYXAsIHNpemVfdCBzaXplKQotewotCXJldHVybiBfaW9uX2hlYXBfZnJlZWxp c3RfZHJhaW4oaGVhcCwgc2l6ZSwgdHJ1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgaW9uX2hlYXBfZGVm ZXJyZWRfZnJlZSh2b2lkICpkYXRhKQotewotCXN0cnVjdCBpb25faGVhcCAqaGVhcCA9IGRhdGE7 Ci0KLQl3aGlsZSAodHJ1ZSkgewotCQlzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyOwotCi0JCXdh aXRfZXZlbnRfZnJlZXphYmxlKGhlYXAtPndhaXRxdWV1ZSwKLQkJCQkgICAgIGlvbl9oZWFwX2Zy ZWVsaXN0X3NpemUoaGVhcCkgPiAwKTsKLQotCQlzcGluX2xvY2soJmhlYXAtPmZyZWVfbG9jayk7 Ci0JCWlmIChsaXN0X2VtcHR5KCZoZWFwLT5mcmVlX2xpc3QpKSB7Ci0JCQlzcGluX3VubG9jaygm aGVhcC0+ZnJlZV9sb2NrKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWJ1ZmZlciA9IGxpc3RfZmly c3RfZW50cnkoJmhlYXAtPmZyZWVfbGlzdCwgc3RydWN0IGlvbl9idWZmZXIsCi0JCQkJCSAgbGlz dCk7Ci0JCWxpc3RfZGVsKCZidWZmZXItPmxpc3QpOwotCQloZWFwLT5mcmVlX2xpc3Rfc2l6ZSAt PSBidWZmZXItPnNpemU7Ci0JCXNwaW5fdW5sb2NrKCZoZWFwLT5mcmVlX2xvY2spOwotCQlpb25f YnVmZmVyX2Rlc3Ryb3koYnVmZmVyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGlvbl9o ZWFwX2luaXRfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgaW9uX2hlYXAgKmhlYXApCi17Ci0JSU5JVF9M SVNUX0hFQUQoJmhlYXAtPmZyZWVfbGlzdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmaGVhcC0+ d2FpdHF1ZXVlKTsKLQloZWFwLT50YXNrID0ga3RocmVhZF9ydW4oaW9uX2hlYXBfZGVmZXJyZWRf ZnJlZSwgaGVhcCwKLQkJCQkgIiVzIiwgaGVhcC0+bmFtZSk7Ci0JaWYgKElTX0VSUihoZWFwLT50 YXNrKSkgewotCQlwcl9lcnIoIiVzOiBjcmVhdGluZyB0aHJlYWQgZm9yIGRlZmVycmVkIGZyZWUg ZmFpbGVkXG4iLAotCQkgICAgICAgX19mdW5jX18pOwotCQlyZXR1cm4gUFRSX0VSUl9PUl9aRVJP KGhlYXAtPnRhc2spOwotCX0KLQlzY2hlZF9zZXRfbm9ybWFsKGhlYXAtPnRhc2ssIDE5KTsKLQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpb25faGVhcF9zaHJpbmtfY291 bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKLQkJCQkJICAgc3RydWN0IHNocmlua19jb250 cm9sICpzYykKLXsKLQlzdHJ1Y3QgaW9uX2hlYXAgKmhlYXAgPSBjb250YWluZXJfb2Yoc2hyaW5r ZXIsIHN0cnVjdCBpb25faGVhcCwKLQkJCQkJICAgICBzaHJpbmtlcik7Ci0JaW50IHRvdGFsID0g MDsKLQotCXRvdGFsID0gaW9uX2hlYXBfZnJlZWxpc3Rfc2l6ZShoZWFwKSAvIFBBR0VfU0laRTsK LQotCWlmIChoZWFwLT5vcHMtPnNocmluaykKLQkJdG90YWwgKz0gaGVhcC0+b3BzLT5zaHJpbmso aGVhcCwgc2MtPmdmcF9tYXNrLCAwKTsKLQotCXJldHVybiB0b3RhbDsKLX0KLQotc3RhdGljIHVu c2lnbmVkIGxvbmcgaW9uX2hlYXBfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtl ciwKLQkJCQkJICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQotewotCXN0cnVjdCBpb25faGVh cCAqaGVhcCA9IGNvbnRhaW5lcl9vZihzaHJpbmtlciwgc3RydWN0IGlvbl9oZWFwLAotCQkJCQkg ICAgIHNocmlua2VyKTsKLQlpbnQgZnJlZWQgPSAwOwotCWludCB0b19zY2FuID0gc2MtPm5yX3Rv X3NjYW47Ci0KLQlpZiAodG9fc2NhbiA9PSAwKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogc2hy aW5rIHRoZSBmcmVlIGxpc3QgZmlyc3QsIG5vIHBvaW50IGluIHplcm9pbmcgdGhlIG1lbW9yeSBp ZiB3ZSdyZQotCSAqIGp1c3QgZ29pbmcgdG8gcmVjbGFpbSBpdC4gQWxzbywgc2tpcCBhbnkgcG9z c2libGUgcGFnZSBwb29saW5nLgotCSAqLwotCWlmIChoZWFwLT5mbGFncyAmIElPTl9IRUFQX0ZM QUdfREVGRVJfRlJFRSkKLQkJZnJlZWQgPSBpb25faGVhcF9mcmVlbGlzdF9zaHJpbmsoaGVhcCwg dG9fc2NhbiAqIFBBR0VfU0laRSkgLwotCQkJCVBBR0VfU0laRTsKLQotCXRvX3NjYW4gLT0gZnJl ZWQ7Ci0JaWYgKHRvX3NjYW4gPD0gMCkKLQkJcmV0dXJuIGZyZWVkOwotCi0JaWYgKGhlYXAtPm9w cy0+c2hyaW5rKQotCQlmcmVlZCArPSBoZWFwLT5vcHMtPnNocmluayhoZWFwLCBzYy0+Z2ZwX21h c2ssIHRvX3NjYW4pOwotCi0JcmV0dXJuIGZyZWVkOwotfQotCi1pbnQgaW9uX2hlYXBfaW5pdF9z aHJpbmtlcihzdHJ1Y3QgaW9uX2hlYXAgKmhlYXApCi17Ci0JaGVhcC0+c2hyaW5rZXIuY291bnRf b2JqZWN0cyA9IGlvbl9oZWFwX3Nocmlua19jb3VudDsKLQloZWFwLT5zaHJpbmtlci5zY2FuX29i amVjdHMgPSBpb25faGVhcF9zaHJpbmtfc2NhbjsKLQloZWFwLT5zaHJpbmtlci5zZWVrcyA9IERF RkFVTFRfU0VFS1M7Ci0JaGVhcC0+c2hyaW5rZXIuYmF0Y2ggPSAwOwotCi0JcmV0dXJuIHJlZ2lz dGVyX3Nocmlua2VyKCZoZWFwLT5zaHJpbmtlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvYW5kcm9pZC9pb24vaW9uX3BhZ2VfcG9vbC5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJv aWQvaW9uL2lvbl9wYWdlX3Bvb2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5 OGI4ODZkOTA2Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9u L2lvbl9wYWdlX3Bvb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLyoKLSAqIElPTiBNZW1vcnkgQWxsb2NhdG9y IHBhZ2UgcG9vbCBoZWxwZXJzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5j LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5o PgotI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC9zaWduYWwu aD4KLQotI2luY2x1ZGUgImlvbi5oIgotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICppb25f cGFnZV9wb29sX2FsbG9jX3BhZ2VzKHN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sKQotewotCWlm IChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJu IGFsbG9jX3BhZ2VzKHBvb2wtPmdmcF9tYXNrLCBwb29sLT5vcmRlcik7Ci19Ci0KLXN0YXRpYyB2 b2lkIGlvbl9wYWdlX3Bvb2xfZnJlZV9wYWdlcyhzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqcG9vbCwK LQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKQotewotCV9fZnJlZV9wYWdlcyhwYWdlLCBwb29s LT5vcmRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvbl9wYWdlX3Bvb2xfYWRkKHN0cnVjdCBpb25f cGFnZV9wb29sICpwb29sLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQltdXRleF9sb2NrKCZwb29s LT5tdXRleCk7Ci0JaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJnBh Z2UtPmxydSwgJnBvb2wtPmhpZ2hfaXRlbXMpOwotCQlwb29sLT5oaWdoX2NvdW50Kys7Ci0JfSBl bHNlIHsKLQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcG9vbC0+bG93X2l0ZW1zKTsKLQkJ cG9vbC0+bG93X2NvdW50Kys7Ci0JfQotCi0JbW9kX25vZGVfcGFnZV9zdGF0ZShwYWdlX3BnZGF0 KHBhZ2UpLCBOUl9LRVJORUxfTUlTQ19SRUNMQUlNQUJMRSwKLQkJCSAgICAxIDw8IHBvb2wtPm9y ZGVyKTsKLQltdXRleF91bmxvY2soJnBvb2wtPm11dGV4KTsKLX0KLQotc3RhdGljIHN0cnVjdCBw YWdlICppb25fcGFnZV9wb29sX3JlbW92ZShzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqcG9vbCwgYm9v bCBoaWdoKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JaWYgKGhpZ2gpIHsKLQkJQlVHX09O KCFwb29sLT5oaWdoX2NvdW50KTsKLQkJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnkoJnBvb2wtPmhp Z2hfaXRlbXMsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlwb29sLT5oaWdoX2NvdW50LS07Ci0JfSBl bHNlIHsKLQkJQlVHX09OKCFwb29sLT5sb3dfY291bnQpOwotCQlwYWdlID0gbGlzdF9maXJzdF9l bnRyeSgmcG9vbC0+bG93X2l0ZW1zLCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKLQkJcG9vbC0+bG93X2Nv dW50LS07Ci0JfQotCi0JbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JbW9kX25vZGVfcGFnZV9zdGF0 ZShwYWdlX3BnZGF0KHBhZ2UpLCBOUl9LRVJORUxfTUlTQ19SRUNMQUlNQUJMRSwKLQkJCSAgICAt KDEgPDwgcG9vbC0+b3JkZXIpKTsKLQlyZXR1cm4gcGFnZTsKLX0KLQotc3RydWN0IHBhZ2UgKmlv bl9wYWdlX3Bvb2xfYWxsb2Moc3RydWN0IGlvbl9wYWdlX3Bvb2wgKnBvb2wpCi17Ci0Jc3RydWN0 IHBhZ2UgKnBhZ2UgPSBOVUxMOwotCi0JQlVHX09OKCFwb29sKTsKLQotCW11dGV4X2xvY2soJnBv b2wtPm11dGV4KTsKLQlpZiAocG9vbC0+aGlnaF9jb3VudCkKLQkJcGFnZSA9IGlvbl9wYWdlX3Bv b2xfcmVtb3ZlKHBvb2wsIHRydWUpOwotCWVsc2UgaWYgKHBvb2wtPmxvd19jb3VudCkKLQkJcGFn ZSA9IGlvbl9wYWdlX3Bvb2xfcmVtb3ZlKHBvb2wsIGZhbHNlKTsKLQltdXRleF91bmxvY2soJnBv b2wtPm11dGV4KTsKLQotCWlmICghcGFnZSkKLQkJcGFnZSA9IGlvbl9wYWdlX3Bvb2xfYWxsb2Nf cGFnZXMocG9vbCk7Ci0KLQlyZXR1cm4gcGFnZTsKLX0KLQotdm9pZCBpb25fcGFnZV9wb29sX2Zy ZWUoc3RydWN0IGlvbl9wYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCUJV R19PTihwb29sLT5vcmRlciAhPSBjb21wb3VuZF9vcmRlcihwYWdlKSk7Ci0KLQlpb25fcGFnZV9w b29sX2FkZChwb29sLCBwYWdlKTsKLX0KLQotc3RhdGljIGludCBpb25fcGFnZV9wb29sX3RvdGFs KHN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sLCBib29sIGhpZ2gpCi17Ci0JaW50IGNvdW50ID0g cG9vbC0+bG93X2NvdW50OwotCi0JaWYgKGhpZ2gpCi0JCWNvdW50ICs9IHBvb2wtPmhpZ2hfY291 bnQ7Ci0KLQlyZXR1cm4gY291bnQgPDwgcG9vbC0+b3JkZXI7Ci19Ci0KLWludCBpb25fcGFnZV9w b29sX3NocmluayhzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwX21hc2ssCi0J CQkgaW50IG5yX3RvX3NjYW4pCi17Ci0JaW50IGZyZWVkID0gMDsKLQlib29sIGhpZ2g7Ci0KLQlp ZiAoY3VycmVudF9pc19rc3dhcGQoKSkKLQkJaGlnaCA9IHRydWU7Ci0JZWxzZQotCQloaWdoID0g ISEoZ2ZwX21hc2sgJiBfX0dGUF9ISUdITUVNKTsKLQotCWlmIChucl90b19zY2FuID09IDApCi0J CXJldHVybiBpb25fcGFnZV9wb29sX3RvdGFsKHBvb2wsIGhpZ2gpOwotCi0Jd2hpbGUgKGZyZWVk IDwgbnJfdG9fc2NhbikgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQltdXRleF9sb2NrKCZw b29sLT5tdXRleCk7Ci0JCWlmIChwb29sLT5sb3dfY291bnQpIHsKLQkJCXBhZ2UgPSBpb25fcGFn ZV9wb29sX3JlbW92ZShwb29sLCBmYWxzZSk7Ci0JCX0gZWxzZSBpZiAoaGlnaCAmJiBwb29sLT5o aWdoX2NvdW50KSB7Ci0JCQlwYWdlID0gaW9uX3BhZ2VfcG9vbF9yZW1vdmUocG9vbCwgdHJ1ZSk7 Ci0JCX0gZWxzZSB7Ci0JCQltdXRleF91bmxvY2soJnBvb2wtPm11dGV4KTsKLQkJCWJyZWFrOwot CQl9Ci0JCW11dGV4X3VubG9jaygmcG9vbC0+bXV0ZXgpOwotCQlpb25fcGFnZV9wb29sX2ZyZWVf cGFnZXMocG9vbCwgcGFnZSk7Ci0JCWZyZWVkICs9ICgxIDw8IHBvb2wtPm9yZGVyKTsKLQl9Ci0K LQlyZXR1cm4gZnJlZWQ7Ci19Ci0KLXN0cnVjdCBpb25fcGFnZV9wb29sICppb25fcGFnZV9wb29s X2NyZWF0ZShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQotewotCXN0cnVjdCBp b25fcGFnZV9wb29sICpwb29sID0ga21hbGxvYyhzaXplb2YoKnBvb2wpLCBHRlBfS0VSTkVMKTsK LQotCWlmICghcG9vbCkKLQkJcmV0dXJuIE5VTEw7Ci0JcG9vbC0+aGlnaF9jb3VudCA9IDA7Ci0J cG9vbC0+bG93X2NvdW50ID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmcG9vbC0+bG93X2l0ZW1zKTsK LQlJTklUX0xJU1RfSEVBRCgmcG9vbC0+aGlnaF9pdGVtcyk7Ci0JcG9vbC0+Z2ZwX21hc2sgPSBn ZnBfbWFzayB8IF9fR0ZQX0NPTVA7Ci0JcG9vbC0+b3JkZXIgPSBvcmRlcjsKLQltdXRleF9pbml0 KCZwb29sLT5tdXRleCk7Ci0JcGxpc3Rfbm9kZV9pbml0KCZwb29sLT5saXN0LCBvcmRlcik7Ci0K LQlyZXR1cm4gcG9vbDsKLX0KLQotdm9pZCBpb25fcGFnZV9wb29sX2Rlc3Ryb3koc3RydWN0IGlv bl9wYWdlX3Bvb2wgKnBvb2wpCi17Ci0Ja2ZyZWUocG9vbCk7Ci19CmRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX3N5c3RlbV9oZWFwLmMgYi9kcml2ZXJzL3N0YWdp bmcvYW5kcm9pZC9pb24vaW9uX3N5c3RlbV9oZWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGVhYzA2MzJhYjRlOC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9h bmRyb2lkL2lvbi9pb25fc3lzdGVtX2hlYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCww IEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLyoKLSAqIElPTiBNZW1v cnkgQWxsb2NhdG9yIHN5c3RlbSBoZWFwIGV4cG9ydGVyCi0gKgotICogQ29weXJpZ2h0IChDKSAy MDExIEdvb2dsZSwgSW5jLgotICovCi0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUg PGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8 bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgv c2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgv dm1hbGxvYy5oPgotCi0jaW5jbHVkZSAiaW9uLmgiCi0KLSNkZWZpbmUgTlVNX09SREVSUyBBUlJB WV9TSVpFKG9yZGVycykKLQotc3RhdGljIGdmcF90IGhpZ2hfb3JkZXJfZ2ZwX2ZsYWdzID0gKEdG UF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4gfAotCQkJCSAgICAgX19HRlBf Tk9SRVRSWSkgJiB+X19HRlBfUkVDTEFJTTsKLXN0YXRpYyBnZnBfdCBsb3dfb3JkZXJfZ2ZwX2Zs YWdzICA9IEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk87Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQg aW50IG9yZGVyc1tdID0gezgsIDQsIDB9OwotCi1zdGF0aWMgaW50IG9yZGVyX3RvX2luZGV4KHVu c2lnbmVkIGludCBvcmRlcikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fT1JE RVJTOyBpKyspCi0JCWlmIChvcmRlciA9PSBvcmRlcnNbaV0pCi0JCQlyZXR1cm4gaTsKLQlCVUco KTsKLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9yZGVyX3Rv X3NpemUoaW50IG9yZGVyKQotewotCXJldHVybiBQQUdFX1NJWkUgPDwgb3JkZXI7Ci19Ci0KLXN0 cnVjdCBpb25fc3lzdGVtX2hlYXAgewotCXN0cnVjdCBpb25faGVhcCBoZWFwOwotCXN0cnVjdCBp b25fcGFnZV9wb29sICpwb29sc1tOVU1fT1JERVJTXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGFn ZSAqYWxsb2NfYnVmZmVyX3BhZ2Uoc3RydWN0IGlvbl9zeXN0ZW1faGVhcCAqaGVhcCwKLQkJCQkg ICAgICBzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcg b3JkZXIpCi17Ci0Jc3RydWN0IGlvbl9wYWdlX3Bvb2wgKnBvb2wgPSBoZWFwLT5wb29sc1tvcmRl cl90b19pbmRleChvcmRlcildOwotCi0JcmV0dXJuIGlvbl9wYWdlX3Bvb2xfYWxsb2MocG9vbCk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfYnVmZmVyX3BhZ2Uoc3RydWN0IGlvbl9zeXN0ZW1faGVh cCAqaGVhcCwKLQkJCSAgICAgc3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlciwgc3RydWN0IHBhZ2Ug KnBhZ2UpCi17Ci0Jc3RydWN0IGlvbl9wYWdlX3Bvb2wgKnBvb2w7Ci0JdW5zaWduZWQgaW50IG9y ZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7Ci0KLQkvKiBnbyB0byBzeXN0ZW0gKi8KLQlpZiAo YnVmZmVyLT5wcml2YXRlX2ZsYWdzICYgSU9OX1BSSVZfRkxBR19TSFJJTktFUl9GUkVFKSB7Ci0J CV9fZnJlZV9wYWdlcyhwYWdlLCBvcmRlcik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwb29sID0gaGVh cC0+cG9vbHNbb3JkZXJfdG9faW5kZXgob3JkZXIpXTsKLQotCWlvbl9wYWdlX3Bvb2xfZnJlZShw b29sLCBwYWdlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19sYXJnZXN0X2F2YWls YWJsZShzdHJ1Y3QgaW9uX3N5c3RlbV9oZWFwICpoZWFwLAotCQkJCQkgICAgc3RydWN0IGlvbl9i dWZmZXIgKmJ1ZmZlciwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJICAgIHVu c2lnbmVkIGludCBtYXhfb3JkZXIpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IGk7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgTlVNX09SREVSUzsgaSsrKSB7Ci0JCWlmIChzaXplIDwgb3JkZXJf dG9fc2l6ZShvcmRlcnNbaV0pKQotCQkJY29udGludWU7Ci0JCWlmIChtYXhfb3JkZXIgPCBvcmRl cnNbaV0pCi0JCQljb250aW51ZTsKLQotCQlwYWdlID0gYWxsb2NfYnVmZmVyX3BhZ2UoaGVhcCwg YnVmZmVyLCBvcmRlcnNbaV0pOwotCQlpZiAoIXBhZ2UpCi0JCQljb250aW51ZTsKLQotCQlyZXR1 cm4gcGFnZTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBpb25fc3lzdGVt X2hlYXBfYWxsb2NhdGUoc3RydWN0IGlvbl9oZWFwICpoZWFwLAotCQkJCSAgICBzdHJ1Y3QgaW9u X2J1ZmZlciAqYnVmZmVyLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3RydWN0IGlvbl9zeXN0ZW1faGVhcCAqc3lzX2hlYXAg PSBjb250YWluZXJfb2YoaGVhcCwKLQkJCQkJCQlzdHJ1Y3QgaW9uX3N5c3RlbV9oZWFwLAotCQkJ CQkJCWhlYXApOwotCXN0cnVjdCBzZ190YWJsZSAqdGFibGU7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZzsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VzOwotCXN0cnVjdCBwYWdlICpwYWdlLCAqdG1w X3BhZ2U7Ci0JaW50IGkgPSAwOwotCXVuc2lnbmVkIGxvbmcgc2l6ZV9yZW1haW5pbmcgPSBQQUdF X0FMSUdOKHNpemUpOwotCXVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBvcmRlcnNbMF07Ci0KLQlp ZiAoc2l6ZSAvIFBBR0VfU0laRSA+IHRvdGFscmFtX3BhZ2VzKCkgLyAyKQotCQlyZXR1cm4gLUVO T01FTTsKLQotCUlOSVRfTElTVF9IRUFEKCZwYWdlcyk7Ci0Jd2hpbGUgKHNpemVfcmVtYWluaW5n ID4gMCkgewotCQlwYWdlID0gYWxsb2NfbGFyZ2VzdF9hdmFpbGFibGUoc3lzX2hlYXAsIGJ1ZmZl ciwgc2l6ZV9yZW1haW5pbmcsCi0JCQkJCSAgICAgICBtYXhfb3JkZXIpOwotCQlpZiAoIXBhZ2Up Ci0JCQlnb3RvIGZyZWVfcGFnZXM7Ci0JCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnBhZ2Vz KTsKLQkJc2l6ZV9yZW1haW5pbmcgLT0gcGFnZV9zaXplKHBhZ2UpOwotCQltYXhfb3JkZXIgPSBj b21wb3VuZF9vcmRlcihwYWdlKTsKLQkJaSsrOwotCX0KLQl0YWJsZSA9IGttYWxsb2Moc2l6ZW9m KCp0YWJsZSksIEdGUF9LRVJORUwpOwotCWlmICghdGFibGUpCi0JCWdvdG8gZnJlZV9wYWdlczsK LQotCWlmIChzZ19hbGxvY190YWJsZSh0YWJsZSwgaSwgR0ZQX0tFUk5FTCkpCi0JCWdvdG8gZnJl ZV90YWJsZTsKLQotCXNnID0gdGFibGUtPnNnbDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo cGFnZSwgdG1wX3BhZ2UsICZwYWdlcywgbHJ1KSB7Ci0JCXNnX3NldF9wYWdlKHNnLCBwYWdlLCBw YWdlX3NpemUocGFnZSksIDApOwotCQlzZyA9IHNnX25leHQoc2cpOwotCQlsaXN0X2RlbCgmcGFn ZS0+bHJ1KTsKLQl9Ci0KLQlidWZmZXItPnNnX3RhYmxlID0gdGFibGU7Ci0JcmV0dXJuIDA7Ci0K LWZyZWVfdGFibGU6Ci0Ja2ZyZWUodGFibGUpOwotZnJlZV9wYWdlczoKLQlsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUocGFnZSwgdG1wX3BhZ2UsICZwYWdlcywgbHJ1KQotCQlmcmVlX2J1ZmZlcl9w YWdlKHN5c19oZWFwLCBidWZmZXIsIHBhZ2UpOwotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0 aWMgdm9pZCBpb25fc3lzdGVtX2hlYXBfZnJlZShzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyKQot ewotCXN0cnVjdCBpb25fc3lzdGVtX2hlYXAgKnN5c19oZWFwID0gY29udGFpbmVyX29mKGJ1ZmZl ci0+aGVhcCwKLQkJCQkJCQlzdHJ1Y3QgaW9uX3N5c3RlbV9oZWFwLAotCQkJCQkJCWhlYXApOwot CXN0cnVjdCBzZ190YWJsZSAqdGFibGUgPSBidWZmZXItPnNnX3RhYmxlOwotCXN0cnVjdCBzY2F0 dGVybGlzdCAqc2c7Ci0JaW50IGk7Ci0KLQkvKiB6ZXJvIHRoZSBidWZmZXIgYmVmb3JlIGdvdG8g cGFnZSBwb29sICovCi0JaWYgKCEoYnVmZmVyLT5wcml2YXRlX2ZsYWdzICYgSU9OX1BSSVZfRkxB R19TSFJJTktFUl9GUkVFKSkKLQkJaW9uX2hlYXBfYnVmZmVyX3plcm8oYnVmZmVyKTsKLQotCWZv cl9lYWNoX3NndGFibGVfc2codGFibGUsIHNnLCBpKQotCQlmcmVlX2J1ZmZlcl9wYWdlKHN5c19o ZWFwLCBidWZmZXIsIHNnX3BhZ2Uoc2cpKTsKLQlzZ19mcmVlX3RhYmxlKHRhYmxlKTsKLQlrZnJl ZSh0YWJsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgaW9uX3N5c3RlbV9oZWFwX3NocmluayhzdHJ1Y3Qg aW9uX2hlYXAgKmhlYXAsIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgaW50IG5yX3RvX3NjYW4pCi17 Ci0Jc3RydWN0IGlvbl9wYWdlX3Bvb2wgKnBvb2w7Ci0Jc3RydWN0IGlvbl9zeXN0ZW1faGVhcCAq c3lzX2hlYXA7Ci0JaW50IG5yX3RvdGFsID0gMDsKLQlpbnQgaSwgbnJfZnJlZWQ7Ci0JaW50IG9u bHlfc2NhbiA9IDA7Ci0KLQlzeXNfaGVhcCA9IGNvbnRhaW5lcl9vZihoZWFwLCBzdHJ1Y3QgaW9u X3N5c3RlbV9oZWFwLCBoZWFwKTsKLQotCWlmICghbnJfdG9fc2NhbikKLQkJb25seV9zY2FuID0g MTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fT1JERVJTOyBpKyspIHsKLQkJcG9vbCA9IHN5c19o ZWFwLT5wb29sc1tpXTsKLQotCQlpZiAob25seV9zY2FuKSB7Ci0JCQlucl90b3RhbCArPSBpb25f cGFnZV9wb29sX3Nocmluayhwb29sLAotCQkJCQkJCSBnZnBfbWFzaywKLQkJCQkJCQkgbnJfdG9f c2Nhbik7Ci0KLQkJfSBlbHNlIHsKLQkJCW5yX2ZyZWVkID0gaW9uX3BhZ2VfcG9vbF9zaHJpbmso cG9vbCwKLQkJCQkJCQlnZnBfbWFzaywKLQkJCQkJCQlucl90b19zY2FuKTsKLQkJCW5yX3RvX3Nj YW4gLT0gbnJfZnJlZWQ7Ci0JCQlucl90b3RhbCArPSBucl9mcmVlZDsKLQkJCWlmIChucl90b19z Y2FuIDw9IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIG5yX3RvdGFsOwotfQotCi1z dGF0aWMgc3RydWN0IGlvbl9oZWFwX29wcyBzeXN0ZW1faGVhcF9vcHMgPSB7Ci0JLmFsbG9jYXRl ID0gaW9uX3N5c3RlbV9oZWFwX2FsbG9jYXRlLAotCS5mcmVlID0gaW9uX3N5c3RlbV9oZWFwX2Zy ZWUsCi0JLm1hcF9rZXJuZWwgPSBpb25faGVhcF9tYXBfa2VybmVsLAotCS51bm1hcF9rZXJuZWwg PSBpb25faGVhcF91bm1hcF9rZXJuZWwsCi0JLm1hcF91c2VyID0gaW9uX2hlYXBfbWFwX3VzZXIs Ci0JLnNocmluayA9IGlvbl9zeXN0ZW1faGVhcF9zaHJpbmssCi19OwotCi1zdGF0aWMgdm9pZCBp b25fc3lzdGVtX2hlYXBfZGVzdHJveV9wb29scyhzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqKnBvb2xz KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9PUkRFUlM7IGkrKykKLQkJaWYg KHBvb2xzW2ldKQotCQkJaW9uX3BhZ2VfcG9vbF9kZXN0cm95KHBvb2xzW2ldKTsKLX0KLQotc3Rh dGljIGludCBpb25fc3lzdGVtX2hlYXBfY3JlYXRlX3Bvb2xzKHN0cnVjdCBpb25fcGFnZV9wb29s ICoqcG9vbHMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX09SREVSUzsgaSsr KSB7Ci0JCXN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sOwotCQlnZnBfdCBnZnBfZmxhZ3MgPSBs b3dfb3JkZXJfZ2ZwX2ZsYWdzOwotCi0JCWlmIChvcmRlcnNbaV0gPiA0KQotCQkJZ2ZwX2ZsYWdz ID0gaGlnaF9vcmRlcl9nZnBfZmxhZ3M7Ci0KLQkJcG9vbCA9IGlvbl9wYWdlX3Bvb2xfY3JlYXRl KGdmcF9mbGFncywgb3JkZXJzW2ldKTsKLQkJaWYgKCFwb29sKQotCQkJZ290byBlcnJfY3JlYXRl X3Bvb2w7Ci0JCXBvb2xzW2ldID0gcG9vbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2NyZWF0 ZV9wb29sOgotCWlvbl9zeXN0ZW1faGVhcF9kZXN0cm95X3Bvb2xzKHBvb2xzKTsKLQlyZXR1cm4g LUVOT01FTTsKLX0KLQotc3RhdGljIHN0cnVjdCBpb25faGVhcCAqX19pb25fc3lzdGVtX2hlYXBf Y3JlYXRlKHZvaWQpCi17Ci0Jc3RydWN0IGlvbl9zeXN0ZW1faGVhcCAqaGVhcDsKLQotCWhlYXAg PSBremFsbG9jKHNpemVvZigqaGVhcCksIEdGUF9LRVJORUwpOwotCWlmICghaGVhcCkKLQkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JaGVhcC0+aGVhcC5vcHMgPSAmc3lzdGVtX2hlYXBfb3Bz OwotCWhlYXAtPmhlYXAudHlwZSA9IElPTl9IRUFQX1RZUEVfU1lTVEVNOwotCWhlYXAtPmhlYXAu ZmxhZ3MgPSBJT05fSEVBUF9GTEFHX0RFRkVSX0ZSRUU7Ci0KLQlpZiAoaW9uX3N5c3RlbV9oZWFw X2NyZWF0ZV9wb29scyhoZWFwLT5wb29scykpCi0JCWdvdG8gZnJlZV9oZWFwOwotCi0JcmV0dXJu ICZoZWFwLT5oZWFwOwotCi1mcmVlX2hlYXA6Ci0Ja2ZyZWUoaGVhcCk7Ci0JcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Ci19Ci0KLXN0YXRpYyBpbnQgaW9uX3N5c3RlbV9oZWFwX2NyZWF0ZSh2b2lk KQotewotCXN0cnVjdCBpb25faGVhcCAqaGVhcDsKLQotCWhlYXAgPSBfX2lvbl9zeXN0ZW1faGVh cF9jcmVhdGUoKTsKLQlpZiAoSVNfRVJSKGhlYXApKQotCQlyZXR1cm4gUFRSX0VSUihoZWFwKTsK LQloZWFwLT5uYW1lID0gImlvbl9zeXN0ZW1faGVhcCI7Ci0KLQlpb25fZGV2aWNlX2FkZF9oZWFw KGhlYXApOwotCi0JcmV0dXJuIDA7Ci19Ci1kZXZpY2VfaW5pdGNhbGwoaW9uX3N5c3RlbV9oZWFw X2NyZWF0ZSk7Ci0KLXN0YXRpYyBpbnQgaW9uX3N5c3RlbV9jb250aWdfaGVhcF9hbGxvY2F0ZShz dHJ1Y3QgaW9uX2hlYXAgKmhlYXAsCi0JCQkJCSAgIHN0cnVjdCBpb25fYnVmZmVyICpidWZmZXIs Ci0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdz KQotewotCWludCBvcmRlciA9IGdldF9vcmRlcihsZW4pOwotCXN0cnVjdCBwYWdlICpwYWdlOwot CXN0cnVjdCBzZ190YWJsZSAqdGFibGU7Ci0JdW5zaWduZWQgbG9uZyBpOwotCWludCByZXQ7Ci0K LQlwYWdlID0gYWxsb2NfcGFnZXMobG93X29yZGVyX2dmcF9mbGFncyB8IF9fR0ZQX05PV0FSTiwg b3JkZXIpOwotCWlmICghcGFnZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzcGxpdF9wYWdlKHBh Z2UsIG9yZGVyKTsKLQotCWxlbiA9IFBBR0VfQUxJR04obGVuKTsKLQlmb3IgKGkgPSBsZW4gPj4g UEFHRV9TSElGVDsgaSA8ICgxIDw8IG9yZGVyKTsgaSsrKQotCQlfX2ZyZWVfcGFnZShwYWdlICsg aSk7Ci0KLQl0YWJsZSA9IGttYWxsb2Moc2l6ZW9mKCp0YWJsZSksIEdGUF9LRVJORUwpOwotCWlm ICghdGFibGUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmcmVlX3BhZ2VzOwotCX0KLQot CXJldCA9IHNnX2FsbG9jX3RhYmxlKHRhYmxlLCAxLCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0KQot CQlnb3RvIGZyZWVfdGFibGU7Ci0KLQlzZ19zZXRfcGFnZSh0YWJsZS0+c2dsLCBwYWdlLCBsZW4s IDApOwotCi0JYnVmZmVyLT5zZ190YWJsZSA9IHRhYmxlOwotCi0JcmV0dXJuIDA7Ci0KLWZyZWVf dGFibGU6Ci0Ja2ZyZWUodGFibGUpOwotZnJlZV9wYWdlczoKLQlmb3IgKGkgPSAwOyBpIDwgbGVu ID4+IFBBR0VfU0hJRlQ7IGkrKykKLQkJX19mcmVlX3BhZ2UocGFnZSArIGkpOwotCi0JcmV0dXJu IHJldDsKLX0KLQotc3RhdGljIHZvaWQgaW9uX3N5c3RlbV9jb250aWdfaGVhcF9mcmVlKHN0cnVj dCBpb25fYnVmZmVyICpidWZmZXIpCi17Ci0Jc3RydWN0IHNnX3RhYmxlICp0YWJsZSA9IGJ1ZmZl ci0+c2dfdGFibGU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKHRhYmxlLT5zZ2wpOwot CXVuc2lnbmVkIGxvbmcgcGFnZXMgPSBQQUdFX0FMSUdOKGJ1ZmZlci0+c2l6ZSkgPj4gUEFHRV9T SElGVDsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKykK LQkJX19mcmVlX3BhZ2UocGFnZSArIGkpOwotCXNnX2ZyZWVfdGFibGUodGFibGUpOwotCWtmcmVl KHRhYmxlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpb25faGVhcF9vcHMga21hbGxvY19vcHMgPSB7 Ci0JLmFsbG9jYXRlID0gaW9uX3N5c3RlbV9jb250aWdfaGVhcF9hbGxvY2F0ZSwKLQkuZnJlZSA9 IGlvbl9zeXN0ZW1fY29udGlnX2hlYXBfZnJlZSwKLQkubWFwX2tlcm5lbCA9IGlvbl9oZWFwX21h cF9rZXJuZWwsCi0JLnVubWFwX2tlcm5lbCA9IGlvbl9oZWFwX3VubWFwX2tlcm5lbCwKLQkubWFw X3VzZXIgPSBpb25faGVhcF9tYXBfdXNlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW9uX2hlYXAg Kl9faW9uX3N5c3RlbV9jb250aWdfaGVhcF9jcmVhdGUodm9pZCkKLXsKLQlzdHJ1Y3QgaW9uX2hl YXAgKmhlYXA7Ci0KLQloZWFwID0ga3phbGxvYyhzaXplb2YoKmhlYXApLCBHRlBfS0VSTkVMKTsK LQlpZiAoIWhlYXApCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCWhlYXAtPm9wcyA9ICZr bWFsbG9jX29wczsKLQloZWFwLT50eXBlID0gSU9OX0hFQVBfVFlQRV9TWVNURU1fQ09OVElHOwot CWhlYXAtPm5hbWUgPSAiaW9uX3N5c3RlbV9jb250aWdfaGVhcCI7Ci0KLQlyZXR1cm4gaGVhcDsK LX0KLQotc3RhdGljIGludCBpb25fc3lzdGVtX2NvbnRpZ19oZWFwX2NyZWF0ZSh2b2lkKQotewot CXN0cnVjdCBpb25faGVhcCAqaGVhcDsKLQotCWhlYXAgPSBfX2lvbl9zeXN0ZW1fY29udGlnX2hl YXBfY3JlYXRlKCk7Ci0JaWYgKElTX0VSUihoZWFwKSkKLQkJcmV0dXJuIFBUUl9FUlIoaGVhcCk7 Ci0KLQlpb25fZGV2aWNlX2FkZF9oZWFwKGhlYXApOwotCi0JcmV0dXJuIDA7Ci19Ci1kZXZpY2Vf aW5pdGNhbGwoaW9uX3N5c3RlbV9jb250aWdfaGVhcF9jcmVhdGUpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9pb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L3VhcGkvaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YzkzZmNiNDZkNi4u MDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvaW9uLmgKKysr IC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi8KLS8qCi0gKiBkcml2ZXJzL3N0YWdp bmcvYW5kcm9pZC91YXBpL2lvbi5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwg SW5jLgotICovCi0KLSNpZm5kZWYgX1VBUElfTElOVVhfSU9OX0gKLSNkZWZpbmUgX1VBUElfTElO VVhfSU9OX0gKLQotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4KLQotLyoqCi0gKiBlbnVtIGlvbl9oZWFwX3R5cGVzIC0gbGlzdCBvZiBhbGwgcG9zc2li bGUgdHlwZXMgb2YgaGVhcHMKLSAqIEBJT05fSEVBUF9UWVBFX1NZU1RFTToJIG1lbW9yeSBhbGxv Y2F0ZWQgdmlhIHZtYWxsb2MKLSAqIEBJT05fSEVBUF9UWVBFX1NZU1RFTV9DT05USUc6IG1lbW9y eSBhbGxvY2F0ZWQgdmlhIGttYWxsb2MKLSAqIEBJT05fSEVBUF9UWVBFX0NBUlZFT1VUOgkgbWVt b3J5IGFsbG9jYXRlZCBmcm9tIGEgcHJlcmVzZXJ2ZWQKLSAqCQkJCSBjYXJ2ZW91dCBoZWFwLCBh bGxvY2F0aW9ucyBhcmUgcGh5c2ljYWxseQotICoJCQkJIGNvbnRpZ3VvdXMKLSAqIEBJT05fSEVB UF9UWVBFX0RNQToJCSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBETUEgQVBJCi0gKiBASU9OX05VTV9I RUFQUzoJCSBoZWxwZXIgZm9yIGl0ZXJhdGluZyBvdmVyIGhlYXBzLCBhIGJpdCBtYXNrCi0gKgkJ CQkgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgaGVhcHMsIHNvIG9ubHkgMzIKLSAqCQkJCSB0b3Rh bCBoZWFwIHR5cGVzIGFyZSBzdXBwb3J0ZWQKLSAqLwotZW51bSBpb25faGVhcF90eXBlIHsKLQlJ T05fSEVBUF9UWVBFX1NZU1RFTSwKLQlJT05fSEVBUF9UWVBFX1NZU1RFTV9DT05USUcsCi0JSU9O X0hFQVBfVFlQRV9DQVJWRU9VVCwKLQlJT05fSEVBUF9UWVBFX0NIVU5LLAotCUlPTl9IRUFQX1RZ UEVfRE1BLAotCUlPTl9IRUFQX1RZUEVfQ1VTVE9NLCAvKgotCQkJICAgICAgICogbXVzdCBiZSBs YXN0IHNvIGRldmljZSBzcGVjaWZpYyBoZWFwcyBhbHdheXMKLQkJCSAgICAgICAqIGFyZSBhdCB0 aGUgZW5kIG9mIHRoaXMgZW51bQotCQkJICAgICAgICovCi19OwotCi0jZGVmaW5lIElPTl9OVU1f SEVBUF9JRFMJCShzaXplb2YodW5zaWduZWQgaW50KSAqIDgpCi0KLS8qKgotICogYWxsb2NhdGlv biBmbGFncyAtIHRoZSBsb3dlciAxNiBiaXRzIGFyZSB1c2VkIGJ5IGNvcmUgaW9uLCB0aGUgdXBw ZXIgMTYKLSAqIGJpdHMgYXJlIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIGhlYXBzIHRoZW1zZWx2 ZXMuCi0gKi8KLQotLyoKLSAqIG1hcHBpbmdzIG9mIHRoaXMgYnVmZmVyIHNob3VsZCBiZSBjYWNo ZWQsIGlvbiB3aWxsIGRvIGNhY2hlIG1haW50ZW5hbmNlCi0gKiB3aGVuIHRoZSBidWZmZXIgaXMg bWFwcGVkIGZvciBkbWEKLSAqLwotI2RlZmluZSBJT05fRkxBR19DQUNIRUQgMQotCi0vKioKLSAq IERPQzogSW9uIFVzZXJzcGFjZSBBUEkKLSAqCi0gKiBjcmVhdGUgYSBjbGllbnQgYnkgb3Blbmlu ZyAvZGV2L2lvbgotICogbW9zdCBvcGVyYXRpb25zIGhhbmRsZWQgdmlhIGZvbGxvd2luZyBpb2N0 bHMKLSAqCi0gKi8KLQotLyoqCi0gKiBzdHJ1Y3QgaW9uX2FsbG9jYXRpb25fZGF0YSAtIG1ldGFk YXRhIHBhc3NlZCBmcm9tIHVzZXJzcGFjZSBmb3IgYWxsb2NhdGlvbnMKLSAqIEBsZW46CQlzaXpl IG9mIHRoZSBhbGxvY2F0aW9uCi0gKiBAaGVhcF9pZF9tYXNrOgltYXNrIG9mIGhlYXAgaWRzIHRv IGFsbG9jYXRlIGZyb20KLSAqIEBmbGFnczoJCWZsYWdzIHBhc3NlZCB0byBoZWFwCi0gKiBAaGFu ZGxlOgkJcG9pbnRlciB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSBjb29raWUgdG8gdXNl IHRvCi0gKgkJCXJlZmVyIHRvIHRoaXMgYWxsb2NhdGlvbgotICoKLSAqIFByb3ZpZGVkIGJ5IHVz ZXJzcGFjZSBhcyBhbiBhcmd1bWVudCB0byB0aGUgaW9jdGwKLSAqLwotc3RydWN0IGlvbl9hbGxv Y2F0aW9uX2RhdGEgewotCV9fdTY0IGxlbjsKLQlfX3UzMiBoZWFwX2lkX21hc2s7Ci0JX191MzIg ZmxhZ3M7Ci0JX191MzIgZmQ7Ci0JX191MzIgdW51c2VkOwotfTsKLQotI2RlZmluZSBNQVhfSEVB UF9OQU1FCQkJMzIKLQotLyoqCi0gKiBzdHJ1Y3QgaW9uX2hlYXBfZGF0YSAtIGRhdGEgYWJvdXQg YSBoZWFwCi0gKiBAbmFtZSAtIGZpcnN0IDMyIGNoYXJhY3RlcnMgb2YgdGhlIGhlYXAgbmFtZQot ICogQHR5cGUgLSBoZWFwIHR5cGUKLSAqIEBoZWFwX2lkIC0gaGVhcCBpZCBmb3IgdGhlIGhlYXAK LSAqLwotc3RydWN0IGlvbl9oZWFwX2RhdGEgewotCWNoYXIgbmFtZVtNQVhfSEVBUF9OQU1FXTsK LQlfX3UzMiB0eXBlOwotCV9fdTMyIGhlYXBfaWQ7Ci0JX191MzIgcmVzZXJ2ZWQwOwotCV9fdTMy IHJlc2VydmVkMTsKLQlfX3UzMiByZXNlcnZlZDI7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBpb25f aGVhcF9xdWVyeSAtIGNvbGxlY3Rpb24gb2YgZGF0YSBhYm91dCBhbGwgaGVhcHMKLSAqIEBjbnQg LSB0b3RhbCBudW1iZXIgb2YgaGVhcHMgdG8gYmUgY29waWVkCi0gKiBAaGVhcHMgLSBidWZmZXIg dG8gY29weSBoZWFwIGRhdGEKLSAqLwotc3RydWN0IGlvbl9oZWFwX3F1ZXJ5IHsKLQlfX3UzMiBj bnQ7IC8qIFRvdGFsIG51bWJlciBvZiBoZWFwcyB0byBiZSBjb3BpZWQgKi8KLQlfX3UzMiByZXNl cnZlZDA7IC8qIGFsaWduIHRvIDY0Yml0cyAqLwotCV9fdTY0IGhlYXBzOyAvKiBidWZmZXIgdG8g YmUgcG9wdWxhdGVkICovCi0JX191MzIgcmVzZXJ2ZWQxOwotCV9fdTMyIHJlc2VydmVkMjsKLX07 Ci0KLSNkZWZpbmUgSU9OX0lPQ19NQUdJQwkJJ0knCi0KLS8qKgotICogRE9DOiBJT05fSU9DX0FM TE9DIC0gYWxsb2NhdGUgbWVtb3J5Ci0gKgotICogVGFrZXMgYW4gaW9uX2FsbG9jYXRpb25fZGF0 YSBzdHJ1Y3QgYW5kIHJldHVybnMgaXQgd2l0aCB0aGUgaGFuZGxlIGZpZWxkCi0gKiBwb3B1bGF0 ZWQgd2l0aCB0aGUgb3BhcXVlIGhhbmRsZSBmb3IgdGhlIGFsbG9jYXRpb24uCi0gKi8KLSNkZWZp bmUgSU9OX0lPQ19BTExPQwkJX0lPV1IoSU9OX0lPQ19NQUdJQywgMCwgXAotCQkJCSAgICAgIHN0 cnVjdCBpb25fYWxsb2NhdGlvbl9kYXRhKQotCi0vKioKLSAqIERPQzogSU9OX0lPQ19IRUFQX1FV RVJZIC0gaW5mb3JtYXRpb24gYWJvdXQgYXZhaWxhYmxlIGhlYXBzCi0gKgotICogVGFrZXMgYW4g aW9uX2hlYXBfcXVlcnkgc3RydWN0dXJlIGFuZCBwb3B1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQK LSAqIGF2YWlsYWJsZSBJb24gaGVhcHMuCi0gKi8KLSNkZWZpbmUgSU9OX0lPQ19IRUFQX1FVRVJZ ICAgICBfSU9XUihJT05fSU9DX01BR0lDLCA4LCBcCi0JCQkJCXN0cnVjdCBpb25faGVhcF9xdWVy eSkKLQotI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0lPTl9IICovCmRpZmYgLS1naXQgYS90b29scy90 ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2Vm aWxlCmluZGV4IDkwMThmNDVkNjMxZC4uMmUyZDUxMGUxY2MxIDEwMDY0NAotLS0gYS90b29scy90 ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9N YWtlZmlsZQpAQCAtMSw2ICsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKLVRBUkdFVFMgPSBhbmRyb2lkCi1UQVJHRVRTICs9IGFybTY0CitUQVJHRVRTID0gYXJtNjQK IFRBUkdFVFMgKz0gYnBmCiBUQVJHRVRTICs9IGJyZWFrcG9pbnRzCiBUQVJHRVRTICs9IGNhcGFi aWxpdGllcwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9NYWtl ZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvTWFrZWZpbGUKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNTgzMDZjYWZlOS4uMDAwMDAwMDAwMDAwCi0tLSBhL3Rv b2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAt MSwzOSArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLVNV QkRJUlMgOj0gaW9uCi0KLVRFU1RfUFJPR1MgOj0gcnVuLnNoCi0KLS5QSE9OWTogYWxsIGNsZWFu Ci0KLWluY2x1ZGUgLi4vbGliLm1rCi0KLWFsbDoKLQlAZm9yIERJUiBpbiAkKFNVQkRJUlMpOyBk bwkJXAotCQlCVUlMRF9UQVJHRVQ9JChPVVRQVVQpLyQkRElSOwlcCi0JCW1rZGlyICQkQlVJTERf VEFSR0VUICAtcDsJXAotCQltYWtlIE9VVFBVVD0kJEJVSUxEX1RBUkdFVCAtQyAkJERJUiAkQDtc Ci0JCSNTVUJESVIgdGVzdCBwcm9nIG5hbWUgc2hvdWxkIGJlIGluIHRoZSBmb3JtOiBTVUJESVJf dGVzdC5zaCBcCi0JCVRFU1Q9JCRESVIiX3Rlc3Quc2giOyBcCi0JCWlmIFsgLWUgJCRESVIvJCRU RVNUIF07IHRoZW4gXAotCQkJcnN5bmMgLWEgJCRESVIvJCRURVNUICQkQlVJTERfVEFSR0VULzsg XAotCQlmaSBcCi0JZG9uZQotCi1vdmVycmlkZSBkZWZpbmUgSU5TVEFMTF9SVUxFCi0JbWtkaXIg LXAgJChJTlNUQUxMX1BBVEgpCi1pbnN0YWxsIC10ICQoSU5TVEFMTF9QQVRIKSAkKFRFU1RfUFJP R1MpICQoVEVTVF9QUk9HU19FWFRFTkRFRCkgJChURVNUX0ZJTEVTKSAgJChURVNUX0dFTl9QUk9H UykgJChURVNUX0NVU1RPTV9QUk9HUykgJChURVNUX0dFTl9QUk9HU19FWFRFTkRFRCkgJChURVNU X0dFTl9GSUxFUykKLQotCUBmb3IgU1VCRElSIGluICQoU1VCRElSUyk7IGRvIFwKLQkJQlVJTERf VEFSR0VUPSQoT1VUUFVUKS8kJFNVQkRJUjsJXAotCQlta2RpciAkJEJVSUxEX1RBUkdFVCAgLXA7 CVwKLQkJJChNQUtFKSBPVVRQVVQ9JCRCVUlMRF9UQVJHRVQgLUMgJCRTVUJESVIgSU5TVEFMTF9Q QVRIPSQoSU5TVEFMTF9QQVRIKS8kJFNVQkRJUiBpbnN0YWxsOyBcCi0JZG9uZTsKLWVuZGVmCi0K LW92ZXJyaWRlIGRlZmluZSBDTEVBTgotCUBmb3IgRElSIGluICQoU1VCRElSUyk7IGRvCQlcCi0J CUJVSUxEX1RBUkdFVD0kKE9VVFBVVCkvJCRESVI7CVwKLQkJbWtkaXIgJCRCVUlMRF9UQVJHRVQg IC1wOwlcCi0JCW1ha2UgT1VUUFVUPSQkQlVJTERfVEFSR0VUIC1DICQkRElSICRAO1wKLQlkb25l Ci1lbmRlZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9jb25m aWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2NvbmZpZwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggYjRhZDc0OGE5ZGQ5Li4wMDAwMDAwMDAwMDAKLS0tIGEvdG9vbHMv dGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9jb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw1ICsw LDAgQEAKLUNPTkZJR19BTkRST0lEPXkKLUNPTkZJR19TVEFHSU5HPXkKLUNPTkZJR19JT049eQot Q09ORklHX0lPTl9TWVNURU1fSEVBUD15Ci1DT05GSUdfRFJNX1ZHRU09eQpkaWZmIC0tZ2l0IGEv dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rl c3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDc4ZWFlOTk3MmJiMS4uMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rp bmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0 ICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotaW9uYXBw X2V4cG9ydAotaW9uYXBwX2ltcG9ydAotaW9ubWFwX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rl c3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxm dGVzdHMvYW5kcm9pZC9pb24vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDQyYjcxZjAwNTMzMi4uMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Rz L2FuZHJvaWQvaW9uL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0KLUlOQ0xVREVESVIgOj0gLUku IC1JLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS8gLUkuLi8uLi8u Li8uLi8uLi91c3IvaW5jbHVkZS8KLUNGTEFHUyA6PSAkKENGTEFHUykgJChJTkNMVURFRElSKSAt V2FsbCAtTzIgLWcKLQotVEVTVF9HRU5fRklMRVMgOj0gaW9uYXBwX2V4cG9ydCBpb25hcHBfaW1w b3J0IGlvbm1hcF90ZXN0Ci0KLWFsbDogJChURVNUX0dFTl9GSUxFUykKLQotJChURVNUX0dFTl9G SUxFUyk6IGlwY3NvY2tldC5jIGlvbnV0aWxzLmMKLQotVEVTVF9QUk9HUyA6PSBpb25fdGVzdC5z aAotCi1LU0ZUX0tIRFJfSU5TVEFMTCA6PSAxCi10b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi4K LWluY2x1ZGUgLi4vLi4vbGliLm1rCi0KLSQoT1VUUFVUKS9pb25hcHBfZXhwb3J0OiBpb25hcHBf ZXhwb3J0LmMgaXBjc29ja2V0LmMgaW9udXRpbHMuYwotJChPVVRQVVQpL2lvbmFwcF9pbXBvcnQ6 IGlvbmFwcF9pbXBvcnQuYyBpcGNzb2NrZXQuYyBpb251dGlscy5jCi0kKE9VVFBVVCkvaW9ubWFw X3Rlc3Q6IGlvbm1hcF90ZXN0LmMgaW9udXRpbHMuYyBpcGNzb2NrZXQuYwpkaWZmIC0tZ2l0IGEv dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vUkVBRE1FIGIvdG9vbHMvdGVzdGlu Zy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAyMTc4M2U5YzQ1MWUuLjAwMDAwMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0 ZXN0cy9hbmRyb2lkL2lvbi9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAot SU9OIEJVRkZFUiBTSEFSSU5HIFVUSUxJVFkKLT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1G aWxlOiBpb25fdGVzdC5zaCA6IFV0aWxpdHkgdG8gdGVzdCBJT04gZHJpdmVyIGJ1ZmZlciBzaGFy aW5nIG1lY2hhbmlzbS4KLUF1dGhvcjogUGludHUgS3VtYXIgPHBpbnR1LnBpbmdAZ21haWwuY29t PgotCi1JbnRyb2R1Y3Rpb246Ci0tLS0tLS0tLS0tLS0tCi1UaGlzIGlzIGEgdGVzdCB1dGlsaXR5 IHRvIHZlcmlmeSBJT04gYnVmZmVyIHNoYXJpbmcgaW4gdXNlciBzcGFjZQotYmV0d2VlbiAyIGlu ZGVwZW5kZW50IHByb2Nlc3Nlcy4KLUl0IHVzZXMgdW5peCBkb21haW4gc29ja2V0ICh3aXRoIFND TV9SSUdIVFMpIGFzIElQQyB0byB0cmFuc2ZlciBhbiBGRCB0bwotYW5vdGhlciBwcm9jZXNzIHRv IHNoYXJlIHRoZSBzYW1lIGJ1ZmZlci4KLVRoaXMgdXRpbGl0eSBkZW1vbnN0cmF0ZXMgaG93IElP TiBidWZmZXIgc2hhcmluZyBjYW4gYmUgaW1wbGVtZW50ZWQgYmV0d2VlbgotdHdvIHVzZXIgc3Bh Y2UgcHJvY2Vzc2VzLCB1c2luZyB2YXJpb3VzIGhlYXAgdHlwZXMuCi1UaGUgZm9sbG93aW5nIGhl YXAgdHlwZXMgYXJlIHN1cHBvcnRlZCBieSBJT04gZHJpdmVyLgotSU9OX0hFQVBfVFlQRV9TWVNU RU0gKDApCi1JT05fSEVBUF9UWVBFX1NZU1RFTV9DT05USUcgKDEpCi1JT05fSEVBUF9UWVBFX0NB UlZFT1VUICgyKQotSU9OX0hFQVBfVFlQRV9DSFVOSyAoMykKLUlPTl9IRUFQX1RZUEVfRE1BICg0 KQotCi1CeSBkZWZhdWx0IG9ubHkgdGhlIFNZU1RFTSBhbmQgU1lTVEVNX0NPTlRJRyBoZWFwcyBh cmUgc3VwcG9ydGVkLgotRWFjaCBoZWFwIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzcGVjdGl2 ZSBoZWFwIGlkLgotVGhpcyB1dGlsaXR5IGlzIGRlc2lnbmVkIGluIHRoZSBmb3JtIG9mIGNsaWVu dC9zZXJ2ZXIgcHJvZ3JhbS4KLVRoZSBzZXJ2ZXIgcGFydCAoaW9uYXBwX2V4cG9ydCkgaXMgdGhl IGV4cG9ydGVyIG9mIHRoZSBidWZmZXIuCi1JdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcg YW4gSU9OIGNsaWVudCwgYWxsb2NhdGluZyB0aGUgYnVmZmVyIGJhc2VkIG9uCi10aGUgaGVhcCBp ZCwgd3JpdGluZyBzb21lIGRhdGEgdG8gdGhpcyBidWZmZXIgYW5kIHRoZW4gZXhwb3J0aW5nIHRo ZSBGRAotKGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlcikgdG8gYW5vdGhlciBwcm9jZXNzIHVz aW5nIHNvY2tldCBJUEMuCi1UaGlzIEZEIGlzIGNhbGxlZCBhcyBidWZmZXIgRkQgKHdoaWNoIGlz IGRpZmZlcmVudCB0aGFuIHRoZSBJT04gY2xpZW50IEZEKS4KLQotVGhlIGNsaWVudCBwYXJ0IChp b25hcHBfaW1wb3J0KSBpcyB0aGUgaW1wb3J0ZXIgb2YgdGhlIGJ1ZmZlci4KLUl0IHJldHJpdmVz IHRoZSBGRCBmcm9tIHRoZSBzb2NrZXQgZGF0YSBhbmQgaW5zdGFsbHMgaW50byBpdHMgYWRkcmVz cyBzcGFjZS4KLVRoaXMgbmV3IEZEIGludGVybmFsbHkgcG9pbnRzIHRvIHRoZSBzYW1lIGtlcm5l bCBidWZmZXIuCi1TbyBmaXJzdCBpdCByZWFkcyB0aGUgZGF0YSB0aGF0IGlzIHN0b3JlZCBpbiB0 aGlzIGJ1ZmZlciBhbmQgcHJpbnRzIGl0LgotVGhlbiBpdCB3cml0ZXMgdGhlIGRpZmZlcmVudCBz aXplIG9mIGRhdGEgKGl0IGNvdWxkIGJlIGRpZmZlcmVudCBkYXRhKSB0byB0aGUKLXNhbWUgYnVm ZmVyLgotRmluYWxseSB0aGUgYnVmZmVyIEZEIG11c3QgYmUgY2xvc2VkIGJ5IGJvdGggdGhlIGV4 cG9ydGVyIGFuZCBpbXBvcnRlci4KLVRodXMgdGhlIHNhbWUga2VybmVsIGJ1ZmZlciBpcyBzaGFy ZWQgYW1vbmcgdHdvIHVzZXIgc3BhY2UgcHJvY2Vzc2VzIHVzaW5nCi1JT04gZHJpdmVyIGFuZCBv bmx5IG9uZSB0aW1lIGFsbG9jYXRpb24uCi0KLVByZXJlcXVpc2l0ZToKLS0tLS0tLS0tLS0tLS0K LVRoaXMgdXRpbGl0eSB3b3JrcyBvbmx5IGlmIC9kZXYvaW9uIGludGVyZmFjZSBpcyBwcmVzZW50 LgotVGhlIGZvbGxvd2luZyBjb25maWdzIG5lZWRzIHRvIGJlIGVuYWJsZWQgaW4ga2VybmVsIHRv IGluY2x1ZGUgaW9uIGRyaXZlci4KLUNPTkZJR19BTkRST0lEPXkKLUNPTkZJR19TVEFHSU5HPXkK LUNPTkZJR19JT049eQotQ09ORklHX0lPTl9TWVNURU1fSEVBUD15Ci0KLVRoaXMgdXRpbGl0eSBy ZXF1aXJlcyB0byBiZSBydW4gYXMgcm9vdCB1c2VyLgotCi0KLUNvbXBpbGUgYW5kIHRlc3Q6Ci0t LS0tLS0tLS0tLS0tLS0tLQotVGhpcyB1dGlsaXR5IGlzIG1hZGUgdG8gYmUgcnVuIGFzIHBhcnQg b2Yga3NlbGZ0ZXN0IGZyYW1ld29yayBpbiBrZXJuZWwuCi1UbyBjb21waWxlIGFuZCBydW4gdXNp bmcga3NlbGZ0ZXN0IHlvdSBjYW4gc2ltcGx5IGRvIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUKLWtl cm5lbCB0b3AgZGlyZWN0b3J5LgotbGludXgkIG1ha2UgVEFSR0VUUz1hbmRyb2lkIGtzZWxmdGVz dAotT3IgeW91IGNhbiBhbHNvIHVzZToKLWxpbnV4JCBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2Vs ZnRlc3RzIFRBUkdFVFM9YW5kcm9pZCBydW5fdGVzdHMKLVVzaW5nIHRoZSBzZWxmdGVzdCBpdCBj YW4gZGlyZWN0bHkgZXhlY3V0ZSB0aGUgaW9uX3Rlc3Quc2ggc2NyaXB0IHRvIHRlc3QgdGhlCi1i dWZmZXIgc2hhcmluZyB1c2luZyBpb24gc3lzdGVtIGhlYXAuCi1DdXJyZW50bHkgdGhlIGhlYXAg c2l6ZSBpcyBoYXJkIGNvZGVkIGFzIGp1c3QgMTAgYnl0ZXMgaW5zaWRlIHRoaXMgc2NyaXB0Lgot WW91IG5lZWQgdG8gYmUgYSByb290IHVzZXIgdG8gcnVuIHVuZGVyIHNlbGZ0ZXN0LgotCi1Zb3Ug Y2FuIGFsc28gY29tcGlsZSBhbmQgdGVzdCBtYW51YWxseSB1c2luZyB0aGUgZm9sbG93aW5nIHN0 ZXBzOgotaW9uJCBtYWtlCi1UaGVzZSB3aWxsIGdlbmVyYXRlIDIgZXhlY3V0YWJsZTogaW9uYXBw X2V4cG9ydCwgaW9uYXBwX2ltcG9ydAotTm93IHlvdSBjYW4gcnVuIHRoZSBleHBvcnQgYW5kIGlt cG9ydCBtYW51YWxseSBieSBzcGVjaWZ5aW5nIHRoZSBoZWFwIHR5cGUKLWFuZCB0aGUgaGVhcCBz aXplLgotWW91IGNhbiBhbHNvIGRpcmVjdGx5IGV4ZWN1dGUgdGhlIHNoZWxsIHNjcmlwdCB0byBy dW4gdGhlIHRlc3QgYXV0b21hdGljYWxseS4KLVNpbXBseSB1c2UgdGhlIGZvbGxvd2luZyBjb21t YW5kIHRvIHJ1biB0aGUgdGVzdC4KLWlvbiQgc3VkbyAuL2lvbl90ZXN0LnNoCi0KLVRlc3QgUmVz dWx0czoKLS0tLS0tLS0tLS0tLS0KLVRoZSB1dGlsaXR5IGlzIHZlcmlmaWVkIG9uIFVidW50dS0z MiBiaXQgc3lzdGVtIHdpdGggTGludXggS2VybmVsIDQuMTQuCi1IZXJlIGlzIHRoZSBzbmFwc2hv dCBvZiB0aGUgdGVzdCByZXN1bHQgdXNpbmcga3NlbGZ0ZXN0LgotCi1saW51eCMgbWFrZSBUQVJH RVRTPWFuZHJvaWQga3NlbGZ0ZXN0Ci1oZWFwX3R5cGU6IDAsIGhlYXBfc2l6ZTogMTAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1oZWFwIHR5cGU6IDAKLSAgaGVhcCBp ZDogMQotaGVhcCBuYW1lOiBpb25fc3lzdGVtX2hlYXAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi1GaWxsIGJ1ZmZlciBjb250ZW50OgotMHhmZCAweGZkIDB4ZmQgMHhm ZCAweGZkIDB4ZmQgMHhmZCAweGZkIDB4ZmQgMHhmZAotU2hhcmluZyBmZDogNiwgQ2xpZW50IGZk OiA1Ci08aW9uX2Nsb3NlX2J1ZmZlcl9mZD46IGJ1ZmZlciByZWxlYXNlIHN1Y2Nlc3NmdWxseS4u Li4KLVJlY2VpdmVkIGJ1ZmZlciBmZDogNAotUmVhZCBidWZmZXIgY29udGVudDoKLTB4ZmQgMHhm ZCAweGZkIDB4ZmQgMHhmZCAweGZkIDB4ZmQgMHhmZCAweGZkIDB4ZmQgMHgwIDB4MCAweDAgMHgw IDB4MCAweDAKLTB4MCAweDAgMHgwIDB4MCAweDAgMHgwIDB4MCAweDAgMHgwIDB4MCAweDAgMHgw IDB4MCAweDAgMHgwIDB4MAotRmlsbCBidWZmZXIgY29udGVudDoKLTB4ZmQgMHhmZCAweGZkIDB4 ZmQgMHhmZCAweGZkIDB4ZmQgMHhmZCAweGZkIDB4ZmQgMHhmZCAweGZkIDB4ZmQgMHhmZCAweGZk Ci0weGZkIDB4ZmQgMHhmZCAweGZkIDB4ZmQgMHhmZCAweGZkIDB4ZmQgMHhmZCAweGZkIDB4ZmQg MHhmZCAweGZkIDB4ZmQgMHhmZAotMHhmZCAweGZkCi08aW9uX2Nsb3NlX2J1ZmZlcl9mZD46IGJ1 ZmZlciByZWxlYXNlIHN1Y2Nlc3NmdWxseS4uLi4KLWlvbl90ZXN0LnNoOiBoZWFwX3R5cGU6IDAg LSBbUEFTU10KLQotaW9uX3Rlc3Quc2g6IGRvbmUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcv c2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5k cm9pZC9pb24vaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZGIyMzAxOGFi Zi4uMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9u L2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBpb24uaAotICoKLSAqIENvcHlyaWdo dCAoQykgMjAxMSBHb29nbGUsIEluYy4KLSAqLwotCi0vKiBUaGlzIGZpbGUgaXMgY29waWVkIGZy b20gZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9pb24uaAotICogVGhpcyBsb2NhbCBjb3B5 IGlzIHJlcXVpcmVkIGZvciB0aGUgc2VsZnRlc3QgdG8gcGFzcywgd2hlbiBidWlsZAotICogb3V0 c2lkZSB0aGUga2VybmVsIHNvdXJjZSB0cmVlLgotICogUGxlYXNlIGtlZXAgdGhpcyBmaWxlIGlu IHN5bmMgd2l0aCBpdHMgb3JpZ2luYWwgZmlsZSB1bnRpbCB0aGUKLSAqIGlvbiBkcml2ZXIgaXMg bW92ZWQgb3V0c2lkZSB0aGUgc3RhZ2luZyB0cmVlLgotICovCi0KLSNpZm5kZWYgX1VBUElfTElO VVhfSU9OX0gKLSNkZWZpbmUgX1VBUElfTElOVVhfSU9OX0gKLQotI2luY2x1ZGUgPGxpbnV4L2lv Y3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyoqCi0gKiBlbnVtIGlvbl9oZWFw X3R5cGVzIC0gbGlzdCBvZiBhbGwgcG9zc2libGUgdHlwZXMgb2YgaGVhcHMKLSAqIEBJT05fSEVB UF9UWVBFX1NZU1RFTToJIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIHZtYWxsb2MKLSAqIEBJT05fSEVB UF9UWVBFX1NZU1RFTV9DT05USUc6IG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGttYWxsb2MKLSAqIEBJ T05fSEVBUF9UWVBFX0NBUlZFT1VUOgkgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIGEgcHJlcmVzZXJ2 ZWQKLSAqCQkJCSBjYXJ2ZW91dCBoZWFwLCBhbGxvY2F0aW9ucyBhcmUgcGh5c2ljYWxseQotICoJ CQkJIGNvbnRpZ3VvdXMKLSAqIEBJT05fSEVBUF9UWVBFX0RNQToJCSBtZW1vcnkgYWxsb2NhdGVk IHZpYSBETUEgQVBJCi0gKiBASU9OX05VTV9IRUFQUzoJCSBoZWxwZXIgZm9yIGl0ZXJhdGluZyBv dmVyIGhlYXBzLCBhIGJpdCBtYXNrCi0gKgkJCQkgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgaGVh cHMsIHNvIG9ubHkgMzIKLSAqCQkJCSB0b3RhbCBoZWFwIHR5cGVzIGFyZSBzdXBwb3J0ZWQKLSAq LwotZW51bSBpb25faGVhcF90eXBlIHsKLQlJT05fSEVBUF9UWVBFX1NZU1RFTSwKLQlJT05fSEVB UF9UWVBFX1NZU1RFTV9DT05USUcsCi0JSU9OX0hFQVBfVFlQRV9DQVJWRU9VVCwKLQlJT05fSEVB UF9UWVBFX0NIVU5LLAotCUlPTl9IRUFQX1RZUEVfRE1BLAotCUlPTl9IRUFQX1RZUEVfQ1VTVE9N LCAvKgotCQkJICAgICAgICogbXVzdCBiZSBsYXN0IHNvIGRldmljZSBzcGVjaWZpYyBoZWFwcyBh bHdheXMKLQkJCSAgICAgICAqIGFyZSBhdCB0aGUgZW5kIG9mIHRoaXMgZW51bQotCQkJICAgICAg ICovCi19OwotCi0jZGVmaW5lIElPTl9OVU1fSEVBUF9JRFMJCShzaXplb2YodW5zaWduZWQgaW50 KSAqIDgpCi0KLS8qKgotICogYWxsb2NhdGlvbiBmbGFncyAtIHRoZSBsb3dlciAxNiBiaXRzIGFy ZSB1c2VkIGJ5IGNvcmUgaW9uLCB0aGUgdXBwZXIgMTYKLSAqIGJpdHMgYXJlIHJlc2VydmVkIGZv ciB1c2UgYnkgdGhlIGhlYXBzIHRoZW1zZWx2ZXMuCi0gKi8KLQotLyoKLSAqIG1hcHBpbmdzIG9m IHRoaXMgYnVmZmVyIHNob3VsZCBiZSBjYWNoZWQsIGlvbiB3aWxsIGRvIGNhY2hlIG1haW50ZW5h bmNlCi0gKiB3aGVuIHRoZSBidWZmZXIgaXMgbWFwcGVkIGZvciBkbWEKLSAqLwotI2RlZmluZSBJ T05fRkxBR19DQUNIRUQgMQotCi0vKioKLSAqIERPQzogSW9uIFVzZXJzcGFjZSBBUEkKLSAqCi0g KiBjcmVhdGUgYSBjbGllbnQgYnkgb3BlbmluZyAvZGV2L2lvbgotICogbW9zdCBvcGVyYXRpb25z IGhhbmRsZWQgdmlhIGZvbGxvd2luZyBpb2N0bHMKLSAqCi0gKi8KLQotLyoqCi0gKiBzdHJ1Y3Qg aW9uX2FsbG9jYXRpb25fZGF0YSAtIG1ldGFkYXRhIHBhc3NlZCBmcm9tIHVzZXJzcGFjZSBmb3Ig YWxsb2NhdGlvbnMKLSAqIEBsZW46CQlzaXplIG9mIHRoZSBhbGxvY2F0aW9uCi0gKiBAaGVhcF9p ZF9tYXNrOgltYXNrIG9mIGhlYXAgaWRzIHRvIGFsbG9jYXRlIGZyb20KLSAqIEBmbGFnczoJCWZs YWdzIHBhc3NlZCB0byBoZWFwCi0gKiBAaGFuZGxlOgkJcG9pbnRlciB0aGF0IHdpbGwgYmUgcG9w dWxhdGVkIHdpdGggYSBjb29raWUgdG8gdXNlIHRvCi0gKgkJCXJlZmVyIHRvIHRoaXMgYWxsb2Nh dGlvbgotICoKLSAqIFByb3ZpZGVkIGJ5IHVzZXJzcGFjZSBhcyBhbiBhcmd1bWVudCB0byB0aGUg aW9jdGwKLSAqLwotc3RydWN0IGlvbl9hbGxvY2F0aW9uX2RhdGEgewotCV9fdTY0IGxlbjsKLQlf X3UzMiBoZWFwX2lkX21hc2s7Ci0JX191MzIgZmxhZ3M7Ci0JX191MzIgZmQ7Ci0JX191MzIgdW51 c2VkOwotfTsKLQotI2RlZmluZSBNQVhfSEVBUF9OQU1FCQkJMzIKLQotLyoqCi0gKiBzdHJ1Y3Qg aW9uX2hlYXBfZGF0YSAtIGRhdGEgYWJvdXQgYSBoZWFwCi0gKiBAbmFtZSAtIGZpcnN0IDMyIGNo YXJhY3RlcnMgb2YgdGhlIGhlYXAgbmFtZQotICogQHR5cGUgLSBoZWFwIHR5cGUKLSAqIEBoZWFw X2lkIC0gaGVhcCBpZCBmb3IgdGhlIGhlYXAKLSAqLwotc3RydWN0IGlvbl9oZWFwX2RhdGEgewot CWNoYXIgbmFtZVtNQVhfSEVBUF9OQU1FXTsKLQlfX3UzMiB0eXBlOwotCV9fdTMyIGhlYXBfaWQ7 Ci0JX191MzIgcmVzZXJ2ZWQwOwotCV9fdTMyIHJlc2VydmVkMTsKLQlfX3UzMiByZXNlcnZlZDI7 Ci19OwotCi0vKioKLSAqIHN0cnVjdCBpb25faGVhcF9xdWVyeSAtIGNvbGxlY3Rpb24gb2YgZGF0 YSBhYm91dCBhbGwgaGVhcHMKLSAqIEBjbnQgLSB0b3RhbCBudW1iZXIgb2YgaGVhcHMgdG8gYmUg Y29waWVkCi0gKiBAaGVhcHMgLSBidWZmZXIgdG8gY29weSBoZWFwIGRhdGEKLSAqLwotc3RydWN0 IGlvbl9oZWFwX3F1ZXJ5IHsKLQlfX3UzMiBjbnQ7IC8qIFRvdGFsIG51bWJlciBvZiBoZWFwcyB0 byBiZSBjb3BpZWQgKi8KLQlfX3UzMiByZXNlcnZlZDA7IC8qIGFsaWduIHRvIDY0Yml0cyAqLwot CV9fdTY0IGhlYXBzOyAvKiBidWZmZXIgdG8gYmUgcG9wdWxhdGVkICovCi0JX191MzIgcmVzZXJ2 ZWQxOwotCV9fdTMyIHJlc2VydmVkMjsKLX07Ci0KLSNkZWZpbmUgSU9OX0lPQ19NQUdJQwkJJ0kn Ci0KLS8qKgotICogRE9DOiBJT05fSU9DX0FMTE9DIC0gYWxsb2NhdGUgbWVtb3J5Ci0gKgotICog VGFrZXMgYW4gaW9uX2FsbG9jYXRpb25fZGF0YSBzdHJ1Y3QgYW5kIHJldHVybnMgaXQgd2l0aCB0 aGUgaGFuZGxlIGZpZWxkCi0gKiBwb3B1bGF0ZWQgd2l0aCB0aGUgb3BhcXVlIGhhbmRsZSBmb3Ig dGhlIGFsbG9jYXRpb24uCi0gKi8KLSNkZWZpbmUgSU9OX0lPQ19BTExPQwkJX0lPV1IoSU9OX0lP Q19NQUdJQywgMCwgXAotCQkJCSAgICAgIHN0cnVjdCBpb25fYWxsb2NhdGlvbl9kYXRhKQotCi0v KioKLSAqIERPQzogSU9OX0lPQ19IRUFQX1FVRVJZIC0gaW5mb3JtYXRpb24gYWJvdXQgYXZhaWxh YmxlIGhlYXBzCi0gKgotICogVGFrZXMgYW4gaW9uX2hlYXBfcXVlcnkgc3RydWN0dXJlIGFuZCBw b3B1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQKLSAqIGF2YWlsYWJsZSBJb24gaGVhcHMuCi0gKi8K LSNkZWZpbmUgSU9OX0lPQ19IRUFQX1FVRVJZICAgICBfSU9XUihJT05fSU9DX01BR0lDLCA4LCBc Ci0JCQkJCXN0cnVjdCBpb25faGVhcF9xdWVyeSkKLQotI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0lP Tl9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9p b25fdGVzdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbl90ZXN0 LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2OWU2NzZjZmM5NGUuLjAwMDAwMDAw MDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9pb25fdGVzdC5z aAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0KLWhlYXBzaXpl PTQwOTYKLVRDSUQ9Imlvbl90ZXN0LnNoIgotZXJyY29kZT0wCi0KLSMgS3NlbGZ0ZXN0IGZyYW1l d29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0Lgota3NmdF9za2lwPTQKLQotcnVuX3Rl c3QoKQotewotCWhlYXB0eXBlPSQxCi0JLi9pb25hcHBfZXhwb3J0IC1pICRoZWFwdHlwZSAtcyAk aGVhcHNpemUgJgotCXNsZWVwIDEKLQkuL2lvbmFwcF9pbXBvcnQKLQlpZiBbICQ/IC1uZSAwIF07 IHRoZW4KLQkJZWNobyAiJFRDSUQ6IGhlYXBfdHlwZTogJGhlYXB0eXBlIC0gW0ZBSUxdIgotCQll cnJjb2RlPTEKLQllbHNlCi0JCWVjaG8gIiRUQ0lEOiBoZWFwX3R5cGU6ICRoZWFwdHlwZSAtIFtQ QVNTXSIKLQlmaQotCXNsZWVwIDEKLQllY2hvICIiCi19Ci0KLWNoZWNrX3Jvb3QoKQotewotCXVp ZD0kKGlkIC11KQotCWlmIFsgJHVpZCAtbmUgMCBdOyB0aGVuCi0JCWVjaG8gJFRDSUQ6IG11c3Qg YmUgcnVuIGFzIHJvb3QgPiYyCi0JCWV4aXQgJGtzZnRfc2tpcAotCWZpCi19Ci0KLWNoZWNrX2Rl dmljZSgpCi17Ci0JREVWSUNFPS9kZXYvaW9uCi0JaWYgWyAhIC1lICRERVZJQ0UgXTsgdGhlbgot CQllY2hvICRUQ0lEOiBObyAkREVWSUNFIGRldmljZSBmb3VuZCA+JjIKLQkJZWNobyAkVENJRDog TWF5IGJlIENPTkZJR19JT04gaXMgbm90IHNldCA+JjIKLQkJZXhpdCAka3NmdF9za2lwCi0JZmkK LX0KLQotbWFpbl9mdW5jdGlvbigpCi17Ci0JY2hlY2tfZGV2aWNlCi0JY2hlY2tfcm9vdAotCi0J IyBJT05fU1lTVEVNX0hFQVAgVEVTVAotCXJ1bl90ZXN0IDAKLQkjIElPTl9TWVNURU1fQ09OVElH X0hFQVAgVEVTVAotCXJ1bl90ZXN0IDEKLX0KLQotbWFpbl9mdW5jdGlvbgotZWNobyAiJFRDSUQ6 IGRvbmUiCi1leGl0ICRlcnJjb2RlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0 cy9hbmRyb2lkL2lvbi9pb25hcHBfZXhwb3J0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9h bmRyb2lkL2lvbi9pb25hcHBfZXhwb3J0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDA2M2I3ODMwZDFiZC4uMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Rz L2FuZHJvaWQvaW9uL2lvbmFwcF9leHBvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCww IEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogaW9u YXBwX2V4cG9ydC5jCi0gKgotICogSXQgaXMgYSB1c2VyIHNwYWNlIHV0aWxpdHkgdG8gY3JlYXRl IGFuZCBleHBvcnQgYW5kcm9pZAotICogaW9uIG1lbW9yeSBidWZmZXIgZmQgdG8gYW5vdGhlciBw cm9jZXNzIHVzaW5nIHVuaXggZG9tYWluIHNvY2tldCBhcyBJUEMuCi0gKiBUaGlzIGFjdHMgbGlr ZSBhIHNlcnZlciBmb3IgaW9uYXBwX2ltcG9ydChjbGllbnQpLgotICogU28sIHRoaXMgc2VydmVy IGhhcyB0byBiZSBzdGFydGVkIGZpcnN0IGJlZm9yZSB0aGUgY2xpZW50LgotICoKLSAqIENvcHly aWdodCAoQykgMjAxNyBQaW50dSBLdW1hciA8cGludHUucGluZ0BnbWFpbC5jb20+Ci0gKi8KLQot I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5n Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxz eXMvdGltZS5oPgotI2luY2x1ZGUgImlvbnV0aWxzLmgiCi0jaW5jbHVkZSAiaXBjc29ja2V0Lmgi Ci0KLQotdm9pZCBwcmludF91c2FnZShpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXByaW50 ZigiVXNhZ2U6ICVzIFstaCA8aGVscD5dIFstaSA8aGVhcCBpZD5dIFstcyA8c2l6ZSBpbiBieXRl cz5dXG4iLAotCQlhcmd2WzBdKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKLXsKLQlpbnQgb3B0LCByZXQsIHN0YXR1cywgaGVhcGlkOwotCWludCBzb2NrZmQsIGNsaWVu dF9mZCwgc2hhcmVkX2ZkOwotCXVuc2lnbmVkIGNoYXIgKm1hcF9idWY7Ci0JdW5zaWduZWQgbG9u ZyBtYXBfbGVuLCBoZWFwX3R5cGUsIGhlYXBfc2l6ZSwgZmxhZ3M7Ci0Jc3RydWN0IGlvbl9idWZm ZXJfaW5mbyBpbmZvOwotCXN0cnVjdCBzb2NrZXRfaW5mbyBza2luZm87Ci0KLQlpZiAoYXJnYyA8 IDIpIHsKLQkJcHJpbnRfdXNhZ2UoYXJnYywgYXJndik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlo ZWFwX3NpemUgPSAwOwotCWZsYWdzID0gMDsKLQloZWFwX3R5cGUgPSBJT05fSEVBUF9UWVBFX1NZ U1RFTTsKLQotCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJoaTpzOiIpKSAhPSAt MSkgewotCQlzd2l0Y2ggKG9wdCkgewotCQljYXNlICdoJzoKLQkJCXByaW50X3VzYWdlKGFyZ2Ms IGFyZ3YpOwotCQkJZXhpdCgwKTsKLQkJCWJyZWFrOwotCQljYXNlICdpJzoKLQkJCWhlYXBpZCA9 IGF0b2kob3B0YXJnKTsKLQkJCXN3aXRjaCAoaGVhcGlkKSB7Ci0JCQljYXNlIDA6Ci0JCQkJaGVh cF90eXBlID0gSU9OX0hFQVBfVFlQRV9TWVNURU07Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0J CQkJaGVhcF90eXBlID0gSU9OX0hFQVBfVFlQRV9TWVNURU1fQ09OVElHOwotCQkJCWJyZWFrOwot CQkJZGVmYXVsdDoKLQkJCQlwcmludGYoIkVSUk9SOiBoZWFwIHR5cGUgbm90IHN1cHBvcnRlZFxu Iik7Ci0JCQkJZXhpdCgxKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlICdzJzoKLQkJCWhlYXBf c2l6ZSA9IGF0b2kob3B0YXJnKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRfdXNh Z2UoYXJnYywgYXJndik7Ci0JCQlleGl0KDEpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAo aGVhcF9zaXplIDw9IDApIHsKLQkJcHJpbnRmKCJoZWFwX3NpemUgY2Fubm90IGJlIDBcbiIpOwot CQlwcmludF91c2FnZShhcmdjLCBhcmd2KTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQlwcmludGYoImhl YXBfdHlwZTogJWxkLCBoZWFwX3NpemU6ICVsZFxuIiwgaGVhcF90eXBlLCBoZWFwX3NpemUpOwot CWluZm8uaGVhcF90eXBlID0gaGVhcF90eXBlOwotCWluZm8uaGVhcF9zaXplID0gaGVhcF9zaXpl OwotCWluZm8uZmxhZ190eXBlID0gZmxhZ3M7Ci0KLQkvKiBUaGlzIGlzIHNlcnZlcjogb3BlbiB0 aGUgc29ja2V0IGNvbm5lY3Rpb24gZmlyc3QgKi8KLQkvKiBIZXJlOyAxIGluZGljYXRlcyBzZXJ2 ZXIgb3IgZXhwb3J0ZXIgKi8KLQlzdGF0dXMgPSBvcGVuc29ja2V0KCZzb2NrZmQsIFNPQ0tFVF9O QU1FLCAxKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIjwlcz46IEZh aWxlZCBvcGVuc29ja2V0LlxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9zb2NrZXQ7Ci0JfQot CXNraW5mby5zb2NrZmQgPSBzb2NrZmQ7Ci0KLQlyZXQgPSBpb25fZXhwb3J0X2J1ZmZlcl9mZCgm aW5mbyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJGQUlMRUQ6IGlvbl9n ZXRfYnVmZmVyX2ZkXG4iKTsKLQkJZ290byBlcnJfZXhwb3J0OwotCX0KLQljbGllbnRfZmQgPSBp bmZvLmlvbmZkOwotCXNoYXJlZF9mZCA9IGluZm8uYnVmZmQ7Ci0JbWFwX2J1ZiA9IGluZm8uYnVm ZmVyOwotCW1hcF9sZW4gPSBpbmZvLmJ1ZmxlbjsKLQl3cml0ZV9idWZmZXIobWFwX2J1ZiwgbWFw X2xlbik7Ci0KLQkvKiBzaGFyZSBpb24gYnVmIGZkIHdpdGggb3RoZXIgdXNlciBwcm9jZXNzICov Ci0JcHJpbnRmKCJTaGFyaW5nIGZkOiAlZCwgQ2xpZW50IGZkOiAlZFxuIiwgc2hhcmVkX2ZkLCBj bGllbnRfZmQpOwotCXNraW5mby5kYXRhZmQgPSBzaGFyZWRfZmQ7Ci0Jc2tpbmZvLmJ1ZmxlbiA9 IG1hcF9sZW47Ci0KLQlyZXQgPSBzb2NrZXRfc2VuZF9mZCgmc2tpbmZvKTsKLQlpZiAocmV0IDwg MCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIkZBSUxFRDogc29ja2V0X3NlbmRfZmRcbiIpOwotCQln b3RvIGVycl9zZW5kOwotCX0KLQotZXJyX3NlbmQ6Ci1lcnJfZXhwb3J0OgotCWlvbl9jbG9zZV9i dWZmZXJfZmQoJmluZm8pOwotCi1lcnJfc29ja2V0OgotCWNsb3Nlc29ja2V0KHNvY2tmZCwgU09D S0VUX05BTUUpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3Nl bGZ0ZXN0cy9hbmRyb2lkL2lvbi9pb25hcHBfaW1wb3J0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0 ZXN0cy9hbmRyb2lkL2lvbi9pb25hcHBfaW1wb3J0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDU0YjU4MGNiMDRmNi4uMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2Vs ZnRlc3RzL2FuZHJvaWQvaW9uL2lvbmFwcF9pbXBvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDc5 ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0g KiBpb25hcHBfaW1wb3J0LmMKLSAqCi0gKiBJdCBpcyBhIHVzZXIgc3BhY2UgdXRpbGl0eSB0byBy ZWNlaXZlIGFuZHJvaWQgaW9uIG1lbW9yeSBidWZmZXIgZmQKLSAqIG92ZXIgdW5peCBkb21haW4g c29ja2V0IElQQyB0aGF0IGNhbiBiZSBleHBvcnRlZCBieSBpb25hcHBfZXhwb3J0LgotICogVGhp cyBhY3RzIGxpa2UgYSBjbGllbnQgZm9yIGlvbmFwcF9leHBvcnQuCi0gKgotICogQ29weXJpZ2h0 IChDKSAyMDE3IFBpbnR1IEt1bWFyIDxwaW50dS5waW5nQGdtYWlsLmNvbT4KLSAqLwotCi0jaW5j bHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4K LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJpb251dGlscy5oIgotI2luY2x1ZGUgImlw Y3NvY2tldC5oIgotCi0KLWludCBtYWluKHZvaWQpCi17Ci0JaW50IHJldCwgc3RhdHVzOwotCWlu dCBzb2NrZmQsIHNoYXJlZF9mZDsKLQl1bnNpZ25lZCBjaGFyICptYXBfYnVmOwotCXVuc2lnbmVk IGxvbmcgbWFwX2xlbjsKLQlzdHJ1Y3QgaW9uX2J1ZmZlcl9pbmZvIGluZm87Ci0Jc3RydWN0IHNv Y2tldF9pbmZvIHNraW5mbzsKLQotCS8qIFRoaXMgaXMgdGhlIGNsaWVudCBwYXJ0LiBIZXJlIDAg bWVhbnMgY2xpZW50IG9yIGltcG9ydGVyICovCi0Jc3RhdHVzID0gb3BlbnNvY2tldCgmc29ja2Zk LCBTT0NLRVRfTkFNRSwgMCk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIs ICJObyBleHBvcnRlciBleGlzdHMuLi5cbiIpOwotCQlyZXQgPSBzdGF0dXM7Ci0JCWdvdG8gZXJy X3NvY2tldDsKLQl9Ci0KLQlza2luZm8uc29ja2ZkID0gc29ja2ZkOwotCi0JcmV0ID0gc29ja2V0 X3JlY2VpdmVfZmQoJnNraW5mbyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIs ICJGYWlsZWQ6IHNvY2tldF9yZWNlaXZlX2ZkXG4iKTsKLQkJZ290byBlcnJfcmVjdjsKLQl9Ci0K LQlzaGFyZWRfZmQgPSBza2luZm8uZGF0YWZkOwotCXByaW50ZigiUmVjZWl2ZWQgYnVmZmVyIGZk OiAlZFxuIiwgc2hhcmVkX2ZkKTsKLQlpZiAoc2hhcmVkX2ZkIDw9IDApIHsKLQkJZnByaW50Zihz dGRlcnIsICJFUlJPUjogaW1wcm9wZXIgYnVmIGZkXG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8g ZXJyX2ZkOwotCX0KLQotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKLQlpbmZvLmJ1 ZmZkID0gc2hhcmVkX2ZkOwotCWluZm8uYnVmbGVuID0gSU9OX0JVRkZFUl9MRU47Ci0KLQlyZXQg PSBpb25faW1wb3J0X2J1ZmZlcl9mZCgmaW5mbyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZnByaW50 ZihzdGRlcnIsICJGYWlsZWQ6IGlvbl91c2VfYnVmZmVyX2ZkXG4iKTsKLQkJZ290byBlcnJfaW1w b3J0OwotCX0KLQotCW1hcF9idWYgPSBpbmZvLmJ1ZmZlcjsKLQltYXBfbGVuID0gaW5mby5idWZs ZW47Ci0JcmVhZF9idWZmZXIobWFwX2J1ZiwgbWFwX2xlbik7Ci0KLQkvKiBXcml0ZSBwcm9iYWJs eSBuZXcgZGF0YSB0byB0aGUgc2FtZSBidWZmZXIgYWdhaW4gKi8KLQltYXBfbGVuID0gSU9OX0JV RkZFUl9MRU47Ci0Jd3JpdGVfYnVmZmVyKG1hcF9idWYsIG1hcF9sZW4pOwotCi1lcnJfaW1wb3J0 OgotCWlvbl9jbG9zZV9idWZmZXJfZmQoJmluZm8pOwotZXJyX2ZkOgotZXJyX3JlY3Y6Ci1lcnJf c29ja2V0OgotCWNsb3Nlc29ja2V0KHNvY2tmZCwgU09DS0VUX05BTUUpOwotCi0JcmV0dXJuIHJl dDsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lv bm1hcF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9pb25tYXBf dGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWIzNmIwNmIzN2QuLjAwMDAw MDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9pb25tYXBf dGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLSNpbmNsdWRlIDxlcnJuby5o PgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRp bnQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1 ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9z dGF0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Ci0KLSNpbmNsdWRlIDxkcm0vZHJt Lmg+Ci0KLSNpbmNsdWRlICJpb24uaCIKLSNpbmNsdWRlICJpb251dGlscy5oIgotCi1pbnQgY2hl Y2tfdmdlbShpbnQgZmQpCi17Ci0JZHJtX3ZlcnNpb25fdCB2ZXJzaW9uID0geyAwIH07Ci0JY2hh ciBuYW1lWzVdOwotCWludCByZXQ7Ci0KLQl2ZXJzaW9uLm5hbWVfbGVuID0gNDsKLQl2ZXJzaW9u Lm5hbWUgPSBuYW1lOwotCi0JcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9WRVJTSU9OLCAmdmVy c2lvbik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gc3RyY21wKG5hbWUsICJ2 Z2VtIik7Ci19Ci0KLWludCBvcGVuX3ZnZW0odm9pZCkKLXsKLQlpbnQgaSwgZmQ7Ci0JY29uc3Qg Y2hhciAqZHJtc3RyID0gIi9kZXYvZHJpL2NhcmQiOwotCi0JZmQgPSAtMTsKLQlmb3IgKGkgPSAw OyBpIDwgMTY7IGkrKykgewotCQljaGFyIG5hbWVbODBdOwotCi0JCXNwcmludGYobmFtZSwgIiVz JXUiLCBkcm1zdHIsIGkpOwotCi0JCWZkID0gb3BlbihuYW1lLCBPX1JEV1IpOwotCQlpZiAoZmQg PCAwKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGNoZWNrX3ZnZW0oZmQpKSB7Ci0JCQljbG9zZShm ZCk7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQl9Ci0JcmV0 dXJuIGZkOwotfQotCi1pbnQgaW1wb3J0X3ZnZW1fZmQoaW50IHZnZW1fZmQsIGludCBkbWFfYnVm X2ZkLCB1aW50MzJfdCAqaGFuZGxlKQotewotCXN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlIGltcG9y dF9oYW5kbGUgPSB7IDAgfTsKLQlpbnQgcmV0OwotCi0JaW1wb3J0X2hhbmRsZS5mZCA9IGRtYV9i dWZfZmQ7Ci0JaW1wb3J0X2hhbmRsZS5mbGFncyA9IDA7Ci0JaW1wb3J0X2hhbmRsZS5oYW5kbGUg PSAwOwotCi0JcmV0ID0gaW9jdGwodmdlbV9mZCwgRFJNX0lPQ1RMX1BSSU1FX0ZEX1RPX0hBTkRM RSwgJmltcG9ydF9oYW5kbGUpOwotCWlmIChyZXQgPT0gMCkKLQkJKmhhbmRsZSA9IGltcG9ydF9o YW5kbGUuaGFuZGxlOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgY2xvc2VfaGFuZGxlKGludCB2 Z2VtX2ZkLCB1aW50MzJfdCBoYW5kbGUpCi17Ci0Jc3RydWN0IGRybV9nZW1fY2xvc2UgY2xvc2Ug PSB7IDAgfTsKLQotCWNsb3NlLmhhbmRsZSA9IGhhbmRsZTsKLQlpb2N0bCh2Z2VtX2ZkLCBEUk1f SU9DVExfR0VNX0NMT1NFLCAmY2xvc2UpOwotfQotCi1pbnQgbWFpbigpCi17Ci0JaW50IHJldCwg dmdlbV9mZDsKLQlzdHJ1Y3QgaW9uX2J1ZmZlcl9pbmZvIGluZm87Ci0JdWludDMyX3QgaGFuZGxl ID0gMDsKLQlzdHJ1Y3QgZG1hX2J1Zl9zeW5jIHN5bmMgPSB7IDAgfTsKLQotCWluZm8uaGVhcF90 eXBlID0gSU9OX0hFQVBfVFlQRV9TWVNURU07Ci0JaW5mby5oZWFwX3NpemUgPSA0MDk2OwotCWlu Zm8uZmxhZ190eXBlID0gSU9OX0ZMQUdfQ0FDSEVEOwotCi0JcmV0ID0gaW9uX2V4cG9ydF9idWZm ZXJfZmQoJmluZm8pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ZigiaW9uIGJ1ZmZlciBhbGxv YyBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JdmdlbV9mZCA9IG9wZW5fdmdlbSgp OwotCWlmICh2Z2VtX2ZkIDwgMCkgewotCQlyZXQgPSB2Z2VtX2ZkOwotCQlwcmludGYoIkZhaWxl ZCB0byBvcGVuIHZnZW1cbiIpOwotCQlnb3RvIG91dF9pb247Ci0JfQotCi0JcmV0ID0gaW1wb3J0 X3ZnZW1fZmQodmdlbV9mZCwgaW5mby5idWZmZCwgJmhhbmRsZSk7Ci0KLQlpZiAocmV0IDwgMCkg ewotCQlwcmludGYoIkZhaWxlZCB0byBpbXBvcnQgYnVmZmVyXG4iKTsKLQkJZ290byBvdXRfdmdl bTsKLQl9Ci0KLQlzeW5jLmZsYWdzID0gRE1BX0JVRl9TWU5DX1NUQVJUIHwgRE1BX0JVRl9TWU5D X1JXOwotCXJldCA9IGlvY3RsKGluZm8uYnVmZmQsIERNQV9CVUZfSU9DVExfU1lOQywgJnN5bmMp OwotCWlmIChyZXQpCi0JCXByaW50Zigic3luYyBzdGFydCBmYWlsZWQgJWRcbiIsIGVycm5vKTsK LQotCW1lbXNldChpbmZvLmJ1ZmZlciwgMHhmZiwgNDA5Nik7Ci0KLQlzeW5jLmZsYWdzID0gRE1B X0JVRl9TWU5DX0VORCB8IERNQV9CVUZfU1lOQ19SVzsKLQlyZXQgPSBpb2N0bChpbmZvLmJ1ZmZk LCBETUFfQlVGX0lPQ1RMX1NZTkMsICZzeW5jKTsKLQlpZiAocmV0KQotCQlwcmludGYoInN5bmMg ZW5kIGZhaWxlZCAlZFxuIiwgZXJybm8pOwotCi0JY2xvc2VfaGFuZGxlKHZnZW1fZmQsIGhhbmRs ZSk7Ci0JcmV0ID0gMDsKLQotb3V0X3ZnZW06Ci0JY2xvc2UodmdlbV9mZCk7Ci1vdXRfaW9uOgot CWlvbl9jbG9zZV9idWZmZXJfZmQoJmluZm8pOwotCXByaW50ZigiZG9uZS5cbiIpOwotCXJldHVy biByZXQ7Ci19CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lv bi9pb251dGlscy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaW9udXRp bHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QxZDM3YzRlZjZhLi4wMDAwMDAw MDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaW9udXRpbHMu YworKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5o PgotI2luY2x1ZGUgPGVycm5vLmg+Ci0vLyNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxz eXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1ZGUgImlvbnV0aWxzLmgi Ci0jaW5jbHVkZSAiaXBjc29ja2V0LmgiCi0KLQotdm9pZCB3cml0ZV9idWZmZXIodm9pZCAqYnVm ZmVyLCB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyICpwdHIg PSAodW5zaWduZWQgY2hhciAqKWJ1ZmZlcjsKLQotCWlmICghcHRyKSB7Ci0JCWZwcmludGYoc3Rk ZXJyLCAiPCVzPjogSW52YWxpZCBidWZmZXIuLi5cbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwot CX0KLQotCXByaW50ZigiRmlsbCBidWZmZXIgY29udGVudDpcbiIpOwotCW1lbXNldChwdHIsIDB4 ZmQsIGxlbik7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQlwcmludGYoIjB4JXggIiwg cHRyW2ldKTsKLQlwcmludGYoIlxuIik7Ci19Ci0KLXZvaWQgcmVhZF9idWZmZXIodm9pZCAqYnVm ZmVyLCB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyICpwdHIg PSAodW5zaWduZWQgY2hhciAqKWJ1ZmZlcjsKLQotCWlmICghcHRyKSB7Ci0JCWZwcmludGYoc3Rk ZXJyLCAiPCVzPjogSW52YWxpZCBidWZmZXIuLi5cbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwot CX0KLQotCXByaW50ZigiUmVhZCBidWZmZXIgY29udGVudDpcbiIpOwotCWZvciAoaSA9IDA7IGkg PCBsZW47IGkrKykKLQkJcHJpbnRmKCIweCV4ICIsIHB0cltpXSk7Ci0JcHJpbnRmKCJcbiIpOwot fQotCi1pbnQgaW9uX2V4cG9ydF9idWZmZXJfZmQoc3RydWN0IGlvbl9idWZmZXJfaW5mbyAqaW9u X2luZm8pCi17Ci0JaW50IGksIHJldCwgaW9uZmQsIGJ1ZmZlcl9mZDsKLQl1bnNpZ25lZCBpbnQg aGVhcF9pZDsKLQl1bnNpZ25lZCBsb25nIG1hcGxlbjsKLQl1bnNpZ25lZCBjaGFyICptYXBfYnVm ZmVyOwotCXN0cnVjdCBpb25fYWxsb2NhdGlvbl9kYXRhIGFsbG9jX2RhdGE7Ci0Jc3RydWN0IGlv bl9oZWFwX3F1ZXJ5IHF1ZXJ5OwotCXN0cnVjdCBpb25faGVhcF9kYXRhIGhlYXBfZGF0YVtNQVhf SEVBUF9DT1VOVF07Ci0KLQlpZiAoIWlvbl9pbmZvKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiPCVz PjogSW52YWxpZCBpb24gaW5mb1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0J LyogQ3JlYXRlIGFuIElPTiBjbGllbnQgKi8KLQlpb25mZCA9IG9wZW4oSU9OX0RFVklDRSwgT19S RFdSKTsKLQlpZiAoaW9uZmQgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiPCVzPjogRmFpbGVk IHRvIG9wZW4gaW9uIGNsaWVudDogJXNcbiIsCi0JCQlfX2Z1bmNfXywgc3RyZXJyb3IoZXJybm8p KTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1lbXNldCgmcXVlcnksIDAsIHNpemVvZihxdWVyeSkp OwotCXF1ZXJ5LmNudCA9IE1BWF9IRUFQX0NPVU5UOwotCXF1ZXJ5LmhlYXBzID0gKHVuc2lnbmVk IGxvbmcgaW50KSZoZWFwX2RhdGFbMF07Ci0JLyogUXVlcnkgSU9OIGhlYXBfaWRfbWFzayBmcm9t IElPTiBoZWFwICovCi0JcmV0ID0gaW9jdGwoaW9uZmQsIElPTl9JT0NfSEVBUF9RVUVSWSwgJnF1 ZXJ5KTsKLQlpZiAocmV0IDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIjwlcz46IEZhaWxlZDog SU9OX0lPQ19IRUFQX1FVRVJZOiAlc1xuIiwKLQkJCV9fZnVuY19fLCBzdHJlcnJvcihlcnJubykp OwotCQlnb3RvIGVycl9xdWVyeTsKLQl9Ci0KLQloZWFwX2lkID0gTUFYX0hFQVBfQ09VTlQgKyAx OwotCWZvciAoaSA9IDA7IGkgPCBxdWVyeS5jbnQ7IGkrKykgewotCQlpZiAoaGVhcF9kYXRhW2ld LnR5cGUgPT0gaW9uX2luZm8tPmhlYXBfdHlwZSkgewotCQkJaGVhcF9pZCA9IGhlYXBfZGF0YVtp XS5oZWFwX2lkOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoaGVhcF9pZCA+IE1BWF9IRUFQ X0NPVU5UKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiPCVzPjogRVJST1I6IGhlYXAgdHlwZSBkb2Vz IG5vdCBleGlzdHNcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2hlYXA7Ci0JfQotCi0J YWxsb2NfZGF0YS5sZW4gPSBpb25faW5mby0+aGVhcF9zaXplOwotCWFsbG9jX2RhdGEuaGVhcF9p ZF9tYXNrID0gMSA8PCBoZWFwX2lkOwotCWFsbG9jX2RhdGEuZmxhZ3MgPSBpb25faW5mby0+Zmxh Z190eXBlOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGlzIElPTiBjbGllbnQgYXMgcGVy IGhlYXBfdHlwZSAqLwotCXJldCA9IGlvY3RsKGlvbmZkLCBJT05fSU9DX0FMTE9DLCAmYWxsb2Nf ZGF0YSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBGYWlsZWQ6 IElPTl9JT0NfQUxMT0M6ICVzXG4iLAotCQkJX19mdW5jX18sIHN0cmVycm9yKGVycm5vKSk7Ci0J CWdvdG8gZXJyX2FsbG9jOwotCX0KLQotCS8qIFRoaXMgd2lsbCByZXR1cm4gYSB2YWxpZCBidWZm ZXIgZmQgKi8KLQlidWZmZXJfZmQgPSBhbGxvY19kYXRhLmZkOwotCW1hcGxlbiA9IGFsbG9jX2Rh dGEubGVuOwotCi0JaWYgKGJ1ZmZlcl9mZCA8IDAgfHwgbWFwbGVuIDw9IDApIHsKLQkJZnByaW50 ZihzdGRlcnIsICI8JXM+OiBJbnZhbGlkIG1hcCBkYXRhLCBmZDogJWQsIGxlbjogJWxkXG4iLAot CQkJX19mdW5jX18sIGJ1ZmZlcl9mZCwgbWFwbGVuKTsKLQkJZ290byBlcnJfZmRfZGF0YTsKLQl9 Ci0KLQkvKiBDcmVhdGUgbWVtb3J5IG1hcHBlZCBidWZmZXIgZm9yIHRoZSBidWZmZXIgZmQgKi8K LQltYXBfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKiltbWFwKE5VTEwsIG1hcGxlbiwgUFJPVF9S RUFEfFBST1RfV1JJVEUsCi0JCQlNQVBfU0hBUkVELCBidWZmZXJfZmQsIDApOwotCWlmIChtYXBf YnVmZmVyID09IE1BUF9GQUlMRUQpIHsKLQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBGYWlsZWQ6 IG1tYXA6ICVzXG4iLAotCQkJX19mdW5jX18sIHN0cmVycm9yKGVycm5vKSk7Ci0JCWdvdG8gZXJy X21tYXA7Ci0JfQotCi0JaW9uX2luZm8tPmlvbmZkID0gaW9uZmQ7Ci0JaW9uX2luZm8tPmJ1ZmZk ID0gYnVmZmVyX2ZkOwotCWlvbl9pbmZvLT5idWZmZXIgPSBtYXBfYnVmZmVyOwotCWlvbl9pbmZv LT5idWZsZW4gPSBtYXBsZW47Ci0KLQlyZXR1cm4gMDsKLQotCW11bm1hcChtYXBfYnVmZmVyLCBt YXBsZW4pOwotCi1lcnJfZmRfZGF0YToKLWVycl9tbWFwOgotCS8qIGluIGNhc2Ugb2YgZXJyb3I6 IGNsb3NlIHRoZSBidWZmZXIgZmQgKi8KLQlpZiAoYnVmZmVyX2ZkKQotCQljbG9zZShidWZmZXJf ZmQpOwotCi1lcnJfcXVlcnk6Ci1lcnJfaGVhcDoKLWVycl9hbGxvYzoKLQkvKiBJbiBjYXNlIG9m IGVycm9yOiBjbG9zZSB0aGUgaW9uIGNsaWVudCBmZCAqLwotCWlmIChpb25mZCkKLQkJY2xvc2Uo aW9uZmQpOwotCi0JcmV0dXJuIC0xOwotfQotCi1pbnQgaW9uX2ltcG9ydF9idWZmZXJfZmQoc3Ry dWN0IGlvbl9idWZmZXJfaW5mbyAqaW9uX2luZm8pCi17Ci0JaW50IGJ1ZmZkOwotCXVuc2lnbmVk IGNoYXIgKm1hcF9idWY7Ci0JdW5zaWduZWQgbG9uZyBtYXBfbGVuOwotCi0JaWYgKCFpb25faW5m bykgewotCQlmcHJpbnRmKHN0ZGVyciwgIjwlcz46IEludmFsaWQgaW9uIGluZm9cbiIsIF9fZnVu Y19fKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1hcF9sZW4gPSBpb25faW5mby0+YnVmbGVuOwot CWJ1ZmZkID0gaW9uX2luZm8tPmJ1ZmZkOwotCi0JaWYgKGJ1ZmZkIDwgMCB8fCBtYXBfbGVuIDw9 IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBJbnZhbGlkIG1hcCBkYXRhLCBmZDogJWQs IGxlbjogJWxkXG4iLAotCQkJX19mdW5jX18sIGJ1ZmZkLCBtYXBfbGVuKTsKLQkJZ290byBlcnJf YnVmZmQ7Ci0JfQotCi0JbWFwX2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopbW1hcChOVUxMLCBtYXBf bGVuLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKLQkJCU1BUF9TSEFSRUQsIGJ1ZmZkLCAwKTsKLQlp ZiAobWFwX2J1ZiA9PSBNQVBfRkFJTEVEKSB7Ci0JCXByaW50ZigiPCVzPjogRmFpbGVkIC0gbW1h cDogJXNcbiIsCi0JCQlfX2Z1bmNfXywgc3RyZXJyb3IoZXJybm8pKTsKLQkJZ290byBlcnJfbW1h cDsKLQl9Ci0KLQlpb25faW5mby0+YnVmZmVyID0gbWFwX2J1ZjsKLQlpb25faW5mby0+YnVmbGVu ID0gbWFwX2xlbjsKLQotCXJldHVybiAwOwotCi1lcnJfbW1hcDoKLQlpZiAoYnVmZmQpCi0JCWNs b3NlKGJ1ZmZkKTsKLQotZXJyX2J1ZmZkOgotCXJldHVybiAtMTsKLX0KLQotdm9pZCBpb25fY2xv c2VfYnVmZmVyX2ZkKHN0cnVjdCBpb25fYnVmZmVyX2luZm8gKmlvbl9pbmZvKQotewotCWlmIChp b25faW5mbykgewotCQkvKiB1bm1hcCB0aGUgYnVmZmVyIHByb3Blcmx5IGluIHRoZSBlbmQgKi8K LQkJbXVubWFwKGlvbl9pbmZvLT5idWZmZXIsIGlvbl9pbmZvLT5idWZsZW4pOwotCQkvKiBjbG9z ZSB0aGUgYnVmZmVyIGZkICovCi0JCWlmIChpb25faW5mby0+YnVmZmQgPiAwKQotCQkJY2xvc2Uo aW9uX2luZm8tPmJ1ZmZkKTsKLQkJLyogRmluYWxseSwgY2xvc2UgdGhlIGNsaWVudCBmZCAqLwot CQlpZiAoaW9uX2luZm8tPmlvbmZkID4gMCkKLQkJCWNsb3NlKGlvbl9pbmZvLT5pb25mZCk7Ci0J fQotfQotCi1pbnQgc29ja2V0X3NlbmRfZmQoc3RydWN0IHNvY2tldF9pbmZvICppbmZvKQotewot CWludCBzdGF0dXM7Ci0JaW50IGZkLCBzb2NrZmQ7Ci0Jc3RydWN0IHNvY2tldGRhdGEgc2tkYXRh OwotCi0JaWYgKCFpbmZvKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiPCVzPjogSW52YWxpZCBzb2Nr ZXQgaW5mb1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jc29ja2ZkID0gaW5m by0+c29ja2ZkOwotCWZkID0gaW5mby0+ZGF0YWZkOwotCW1lbXNldCgmc2tkYXRhLCAwLCBzaXpl b2Yoc2tkYXRhKSk7Ci0Jc2tkYXRhLmRhdGEgPSBmZDsKLQlza2RhdGEubGVuID0gc2l6ZW9mKHNr ZGF0YS5kYXRhKTsKLQlzdGF0dXMgPSBzZW5kdG9zb2NrZXQoc29ja2ZkLCAmc2tkYXRhKTsKLQlp ZiAoc3RhdHVzIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIjwlcz46IEZhaWxlZDogc2VuZHRv c29ja2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0K LQotaW50IHNvY2tldF9yZWNlaXZlX2ZkKHN0cnVjdCBzb2NrZXRfaW5mbyAqaW5mbykKLXsKLQlp bnQgc3RhdHVzOwotCWludCBmZCwgc29ja2ZkOwotCXN0cnVjdCBzb2NrZXRkYXRhIHNrZGF0YTsK LQotCWlmICghaW5mbykgewotCQlmcHJpbnRmKHN0ZGVyciwgIjwlcz46IEludmFsaWQgc29ja2V0 IGluZm9cbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXNvY2tmZCA9IGluZm8t PnNvY2tmZDsKLQltZW1zZXQoJnNrZGF0YSwgMCwgc2l6ZW9mKHNrZGF0YSkpOwotCXN0YXR1cyA9 IHJlY2VpdmVmcm9tc29ja2V0KHNvY2tmZCwgJnNrZGF0YSk7Ci0JaWYgKHN0YXR1cyA8IDApIHsK LQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBGYWlsZWQ6IHJlY2VpdmVmcm9tc29ja2V0XG4iLCBf X2Z1bmNfXyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlmZCA9IChpbnQpc2tkYXRhLmRhdGE7Ci0J aW5mby0+ZGF0YWZkID0gZmQ7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQpkaWZmIC0tZ2l0IGEvdG9v bHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaW9udXRpbHMuaCBiL3Rvb2xzL3Rlc3Rp bmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbnV0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDk5NDFlYjg1ODU3Ni4uMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcv c2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbnV0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSAr MCwwIEBACi0jaWZuZGVmIF9fSU9OX1VUSUxTX0gKLSNkZWZpbmUgX19JT05fVVRJTFNfSAotCi0j aW5jbHVkZSAiaW9uLmgiCi0KLSNkZWZpbmUgU09DS0VUX05BTUUgImlvbl9zb2NrZXQiCi0jZGVm aW5lIElPTl9ERVZJQ0UgIi9kZXYvaW9uIgotCi0jZGVmaW5lIElPTl9CVUZGRVJfTEVOCTQwOTYK LSNkZWZpbmUgTUFYX0hFQVBfQ09VTlQJSU9OX0hFQVBfVFlQRV9DVVNUT00KLQotc3RydWN0IHNv Y2tldF9pbmZvIHsKLQlpbnQgc29ja2ZkOwotCWludCBkYXRhZmQ7Ci0JdW5zaWduZWQgbG9uZyBi dWZsZW47Ci19OwotCi1zdHJ1Y3QgaW9uX2J1ZmZlcl9pbmZvIHsKLQlpbnQgaW9uZmQ7Ci0JaW50 IGJ1ZmZkOwotCXVuc2lnbmVkIGludCBoZWFwX3R5cGU7Ci0JdW5zaWduZWQgaW50IGZsYWdfdHlw ZTsKLQl1bnNpZ25lZCBsb25nIGhlYXBfc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGJ1ZmxlbjsKLQl1 bnNpZ25lZCBjaGFyICpidWZmZXI7Ci19OwotCi0KLS8qIFRoaXMgaXMgdXNlZCB0byBmaWxsIHRo ZSBkYXRhIGludG8gdGhlIG1hcHBlZCBidWZmZXIgKi8KLXZvaWQgd3JpdGVfYnVmZmVyKHZvaWQg KmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBsZW4pOwotCi0vKiBUaGlzIGlzIHVzZWQgdG8gcmVhZCB0 aGUgZGF0YSBmcm9tIHRoZSBleHBvcnRlZCBidWZmZXIgKi8KLXZvaWQgcmVhZF9idWZmZXIodm9p ZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGxlbik7Ci0KLS8qIFRoaXMgaXMgdXNlZCB0byBjcmVh dGUgYW4gSU9OIGJ1ZmZlciBGRCBmb3IgdGhlIGtlcm5lbCBidWZmZXIKLSAqIFNvIHlvdSBjYW4g ZXhwb3J0IHRoaXMgc2FtZSBidWZmZXIgdG8gb3RoZXJzIGluIHRoZSBmb3JtIG9mIEZECi0gKi8K LWludCBpb25fZXhwb3J0X2J1ZmZlcl9mZChzdHJ1Y3QgaW9uX2J1ZmZlcl9pbmZvICppb25faW5m byk7Ci0KLS8qIFRoaXMgaXMgdXNlZCB0byBpbXBvcnQgb3IgbWFwIGFuIGV4cG9ydGVkIEZELgot ICogU28gd2UgcG9pbnQgdG8gc2FtZSBidWZmZXIgd2l0aG91dCBtYWtpbmcgYSBjb3B5LiBIZW5j ZSB6ZXJvLWNvcHkuCi0gKi8KLWludCBpb25faW1wb3J0X2J1ZmZlcl9mZChzdHJ1Y3QgaW9uX2J1 ZmZlcl9pbmZvICppb25faW5mbyk7Ci0KLS8qIFRoaXMgaXMgdXNlZCB0byBjbG9zZSBhbGwgcmVm ZXJlbmNlcyBmb3IgdGhlIElPTiBjbGllbnQgKi8KLXZvaWQgaW9uX2Nsb3NlX2J1ZmZlcl9mZChz dHJ1Y3QgaW9uX2J1ZmZlcl9pbmZvICppb25faW5mbyk7Ci0KLS8qIFRoaXMgaXMgdXNlZCB0byBz ZW5kIEZEIHRvIGFub3RoZXIgcHJvY2VzcyB1c2luZyBzb2NrZXQgSVBDICovCi1pbnQgc29ja2V0 X3NlbmRfZmQoc3RydWN0IHNvY2tldF9pbmZvICpza2luZm8pOwotCi0vKiBUaGlzIGlzIHVzZWQg dG8gcmVjZWl2ZSBGRCBmcm9tIGFub3RoZXIgcHJvY2VzcyB1c2luZyBzb2NrZXQgSVBDICovCi1p bnQgc29ja2V0X3JlY2VpdmVfZmQoc3RydWN0IHNvY2tldF9pbmZvICpza2luZm8pOwotCi0KLSNl bmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaXBj c29ja2V0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9pcGNzb2NrZXQu YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjNTIxMDAyMDk1Li4wMDAwMDAwMDAw MDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaXBjc29ja2V0LmMK KysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+ Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1 ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3VuLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4K LQotI2luY2x1ZGUgImlwY3NvY2tldC5oIgotCi0KLWludCBvcGVuc29ja2V0KGludCAqc29ja2Zk LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgY29ubmVjdHR5cGUpCi17Ci0JaW50IHJldCwgdGVtcCA9 IDE7Ci0KLQlpZiAoIW5hbWUgfHwgc3RybGVuKG5hbWUpID4gTUFYX1NPQ0tfTkFNRV9MRU4pIHsK LQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBJbnZhbGlkIHNvY2tldCBuYW1lLlxuIiwgX19mdW5j X18pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0ID0gc29ja2V0KFBGX0xPQ0FMLCBTT0NLX1NU UkVBTSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBGYWls ZWQgc29ja2V0OiA8JXM+XG4iLAotCQkJX19mdW5jX18sIHN0cmVycm9yKGVycm5vKSk7Ci0JCXJl dHVybiByZXQ7Ci0JfQotCi0JKnNvY2tmZCA9IHJldDsKLQlpZiAoc2V0c29ja29wdCgqc29ja2Zk LCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsCi0JCShjaGFyICopJnRlbXAsIHNpemVvZihpbnQp KSA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBGYWlsZWQgc2V0c29ja29wdDogPCVz PlxuIiwKLQkJX19mdW5jX18sIHN0cmVycm9yKGVycm5vKSk7Ci0JCWdvdG8gZXJyOwotCX0KLQot CXNwcmludGYoc29ja19uYW1lLCAiL3RtcC8lcyIsIG5hbWUpOwotCi0JaWYgKGNvbm5lY3R0eXBl ID09IDEpIHsKLQkJLyogVGhpcyBpcyBmb3IgU2VydmVyIGNvbm5lY3Rpb24gKi8KLQkJc3RydWN0 IHNvY2thZGRyX3VuIHNrYWRkcjsKLQkJaW50IGNsaWVudGZkOwotCQlzb2NrbGVuX3Qgc2tsZW47 Ci0KLQkJdW5saW5rKHNvY2tfbmFtZSk7Ci0JCW1lbXNldCgmc2thZGRyLCAwLCBzaXplb2Yoc2th ZGRyKSk7Ci0JCXNrYWRkci5zdW5fZmFtaWx5ID0gQUZfTE9DQUw7Ci0JCXN0cmNweShza2FkZHIu c3VuX3BhdGgsIHNvY2tfbmFtZSk7Ci0KLQkJcmV0ID0gYmluZCgqc29ja2ZkLCAoc3RydWN0IHNv Y2thZGRyICopJnNrYWRkciwKLQkJCVNVTl9MRU4oJnNrYWRkcikpOwotCQlpZiAocmV0IDwgMCkg ewotCQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBGYWlsZWQgYmluZDogPCVzPlxuIiwKLQkJCV9f ZnVuY19fLCBzdHJlcnJvcihlcnJubykpOwotCQkJZ290byBlcnI7Ci0JCX0KLQotCQlyZXQgPSBs aXN0ZW4oKnNvY2tmZCwgNSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwg Ijwlcz46IEZhaWxlZCBsaXN0ZW46IDwlcz5cbiIsCi0JCQlfX2Z1bmNfXywgc3RyZXJyb3IoZXJy bm8pKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJbWVtc2V0KCZza2FkZHIsIDAsIHNpemVvZihz a2FkZHIpKTsKLQkJc2tsZW4gPSBzaXplb2Yoc2thZGRyKTsKLQotCQlyZXQgPSBhY2NlcHQoKnNv Y2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZza2FkZHIsCi0JCQkoc29ja2xlbl90ICopJnNrbGVu KTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiPCVzPjogRmFpbGVkIGFj Y2VwdDogPCVzPlxuIiwKLQkJCV9fZnVuY19fLCBzdHJlcnJvcihlcnJubykpOwotCQkJZ290byBl cnI7Ci0JCX0KLQotCQljbGllbnRmZCA9IHJldDsKLQkJKnNvY2tmZCA9IGNsaWVudGZkOwotCX0g ZWxzZSB7Ci0JCS8qIFRoaXMgaXMgZm9yIGNsaWVudCBjb25uZWN0aW9uICovCi0JCXN0cnVjdCBz b2NrYWRkcl91biBza2FkZHI7Ci0KLQkJbWVtc2V0KCZza2FkZHIsIDAsIHNpemVvZihza2FkZHIp KTsKLQkJc2thZGRyLnN1bl9mYW1pbHkgPSBBRl9MT0NBTDsKLQkJc3RyY3B5KHNrYWRkci5zdW5f cGF0aCwgc29ja19uYW1lKTsKLQotCQlyZXQgPSBjb25uZWN0KCpzb2NrZmQsIChzdHJ1Y3Qgc29j a2FkZHIgKikmc2thZGRyLAotCQkJU1VOX0xFTigmc2thZGRyKSk7Ci0JCWlmIChyZXQgPCAwKSB7 Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIjwlcz46IEZhaWxlZCBjb25uZWN0OiA8JXM+XG4iLAotCQkJ X19mdW5jX18sIHN0cmVycm9yKGVycm5vKSk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCX0KLQotCXJl dHVybiAwOwotCi1lcnI6Ci0JaWYgKCpzb2NrZmQpCi0JCWNsb3NlKCpzb2NrZmQpOwotCi0JcmV0 dXJuIHJldDsKLX0KLQotaW50IHNlbmR0b3NvY2tldChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2V0 ZGF0YSAqc2tkYXRhKQotewotCWludCByZXQsIGJ1ZmZkOwotCXVuc2lnbmVkIGludCBsZW47Ci0J Y2hhciBjbXNnX2JbQ01TR19TUEFDRShzaXplb2YoaW50KSldOwotCXN0cnVjdCBjbXNnaGRyICpj bXNnOwotCXN0cnVjdCBtc2doZHIgbXNnaDsKLQlzdHJ1Y3QgaW92ZWMgaW92OwotCXN0cnVjdCB0 aW1ldmFsIHRpbWVvdXQ7Ci0JZmRfc2V0IHNlbEZEczsKLQotCWlmICghc2tkYXRhKSB7Ci0JCWZw cmludGYoc3RkZXJyLCAiPCVzPjogc29ja2V0ZGF0YSBpcyBOVUxMXG4iLCBfX2Z1bmNfXyk7Ci0J CXJldHVybiAtMTsKLQl9Ci0KLQlGRF9aRVJPKCZzZWxGRHMpOwotCUZEX1NFVCgwLCAmc2VsRkRz KTsKLQlGRF9TRVQoc29ja2ZkLCAmc2VsRkRzKTsKLQl0aW1lb3V0LnR2X3NlYyA9IDIwOwotCXRp bWVvdXQudHZfdXNlYyA9IDA7Ci0KLQlyZXQgPSBzZWxlY3Qoc29ja2ZkKzEsIE5VTEwsICZzZWxG RHMsIE5VTEwsICZ0aW1lb3V0KTsKLQlpZiAocmV0IDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwg Ijwlcz46IEZhaWxlZCBzZWxlY3Q6IDwlcz5cbiIsCi0JCV9fZnVuY19fLCBzdHJlcnJvcihlcnJu bykpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKEZEX0lTU0VUKHNvY2tmZCwgJnNlbEZEcykp IHsKLQkJYnVmZmQgPSBza2RhdGEtPmRhdGE7Ci0JCWxlbiA9IHNrZGF0YS0+bGVuOwotCQltZW1z ZXQoJm1zZ2gsIDAsIHNpemVvZihtc2doKSk7Ci0JCW1zZ2gubXNnX2NvbnRyb2wgPSAmY21zZ19i OwotCQltc2doLm1zZ19jb250cm9sbGVuID0gQ01TR19MRU4obGVuKTsKLQkJaW92Lmlvdl9iYXNl ID0gIk9LIjsKLQkJaW92Lmlvdl9sZW4gPSAyOwotCQltc2doLm1zZ19pb3YgPSAmaW92OwotCQlt c2doLm1zZ19pb3ZsZW4gPSAxOwotCQljbXNnID0gQ01TR19GSVJTVEhEUigmbXNnaCk7Ci0JCWNt c2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOwotCQljbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklH SFRTOwotCQljbXNnLT5jbXNnX2xlbiA9IENNU0dfTEVOKGxlbik7Ci0JCW1lbWNweShDTVNHX0RB VEEoY21zZyksICZidWZmZCwgbGVuKTsKLQotCQlyZXQgPSBzZW5kbXNnKHNvY2tmZCwgJm1zZ2gs IE1TR19ET05UV0FJVCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIjwl cz46IEZhaWxlZCBzZW5kbXNnOiA8JXM+XG4iLAotCQkJX19mdW5jX18sIHN0cmVycm9yKGVycm5v KSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJlY2Vp dmVmcm9tc29ja2V0KGludCBzb2NrZmQsIHN0cnVjdCBzb2NrZXRkYXRhICpza2RhdGEpCi17Ci0J aW50IHJldCwgYnVmZmQ7Ci0JdW5zaWduZWQgaW50IGxlbiA9IDA7Ci0JY2hhciBjbXNnX2JbQ01T R19TUEFDRShzaXplb2YoaW50KSldOwotCXN0cnVjdCBjbXNnaGRyICpjbXNnOwotCXN0cnVjdCBt c2doZHIgbXNnaDsKLQlzdHJ1Y3QgaW92ZWMgaW92OwotCWZkX3NldCByZWN2RkRzOwotCWNoYXIg ZGF0YVszMl07Ci0KLQlpZiAoIXNrZGF0YSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIjwlcz46IHNv Y2tldGRhdGEgaXMgTlVMTFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JRkRf WkVSTygmcmVjdkZEcyk7Ci0JRkRfU0VUKDAsICZyZWN2RkRzKTsKLQlGRF9TRVQoc29ja2ZkLCAm cmVjdkZEcyk7Ci0KLQlyZXQgPSBzZWxlY3Qoc29ja2ZkKzEsICZyZWN2RkRzLCBOVUxMLCBOVUxM LCBOVUxMKTsKLQlpZiAocmV0IDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIjwlcz46IEZhaWxl ZCBzZWxlY3Q6IDwlcz5cbiIsCi0JCV9fZnVuY19fLCBzdHJlcnJvcihlcnJubykpOwotCQlyZXR1 cm4gLTE7Ci0JfQotCi0JaWYgKEZEX0lTU0VUKHNvY2tmZCwgJnJlY3ZGRHMpKSB7Ci0JCWxlbiA9 IHNpemVvZihidWZmZCk7Ci0JCW1lbXNldCgmbXNnaCwgMCwgc2l6ZW9mKG1zZ2gpKTsKLQkJbXNn aC5tc2dfY29udHJvbCA9ICZjbXNnX2I7Ci0JCW1zZ2gubXNnX2NvbnRyb2xsZW4gPSBDTVNHX0xF TihsZW4pOwotCQlpb3YuaW92X2Jhc2UgPSBkYXRhOwotCQlpb3YuaW92X2xlbiA9IHNpemVvZihk YXRhKS0xOwotCQltc2doLm1zZ19pb3YgPSAmaW92OwotCQltc2doLm1zZ19pb3ZsZW4gPSAxOwot CQljbXNnID0gQ01TR19GSVJTVEhEUigmbXNnaCk7Ci0JCWNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xf U09DS0VUOwotCQljbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOwotCQljbXNnLT5jbXNnX2xl biA9IENNU0dfTEVOKGxlbik7Ci0KLQkJcmV0ID0gcmVjdm1zZyhzb2NrZmQsICZtc2doLCBNU0df RE9OVFdBSVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZnByaW50ZihzdGRlcnIsICI8JXM+OiBG YWlsZWQgcmVjdm1zZzogPCVzPlxuIiwKLQkJCV9fZnVuY19fLCBzdHJlcnJvcihlcnJubykpOwot CQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJbWVtY3B5KCZidWZmZCwgQ01TR19EQVRBKGNtc2cpLCBs ZW4pOwotCQlza2RhdGEtPmRhdGEgPSBidWZmZDsKLQkJc2tkYXRhLT5sZW4gPSBsZW47Ci0JfQot CXJldHVybiAwOwotfQotCi1pbnQgY2xvc2Vzb2NrZXQoaW50IHNvY2tmZCwgY2hhciAqbmFtZSkK LXsKLQljaGFyIHNvY2tuYW1lW01BWF9TT0NLX05BTUVfTEVOXTsKLQotCWlmIChzb2NrZmQpCi0J CWNsb3NlKHNvY2tmZCk7Ci0Jc3ByaW50Zihzb2NrbmFtZSwgIi90bXAvJXMiLCBuYW1lKTsKLQl1 bmxpbmsoc29ja25hbWUpOwotCXNodXRkb3duKHNvY2tmZCwgMik7Ci0KLQlyZXR1cm4gMDsKLX0K ZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lwY3NvY2tl dC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaXBjc29ja2V0LmgKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZTg0NDk4YThhMS4uMDAwMDAwMDAwMDAwCi0t LSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lwY3NvY2tldC5oCisrKyAv ZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotCi0jaWZuZGVmIF9JUENTT0NLRVRfSAotI2RlZmlu ZSBfSVBDU09DS0VUX0gKLQotCi0jZGVmaW5lIE1BWF9TT0NLX05BTUVfTEVOCTY0Ci0KLWNoYXIg c29ja19uYW1lW01BWF9TT0NLX05BTUVfTEVOXTsKLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcmVz cG9uc2libGUgZm9yIGhvbGRpbmcgdGhlIElQQyBkYXRhCi0gKiBkYXRhOiBob2xkIHRoZSBidWZm ZXIgZmQKLSAqIGxlbjoganVzdCB0aGUgbGVuZ3RoIG9mIDMyLWJpdCBpbnRlZ2VyIGZkCi0gKi8K LXN0cnVjdCBzb2NrZXRkYXRhIHsKLQlpbnQgZGF0YTsKLQl1bnNpZ25lZCBpbnQgbGVuOwotfTsK LQotLyogVGhpcyBBUEkgaXMgdXNlZCB0byBvcGVuIHRoZSBJUEMgc29ja2V0IGNvbm5lY3Rpb24K LSAqIG5hbWU6IGltcGxpZXMgYSB1bmlxdWUgc29ja2V0IG5hbWUgaW4gdGhlIHN5c3RlbQotICog Y29ubmVjdHR5cGU6IGltcGxpZXMgc2VydmVyKDApIG9yIGNsaWVudCgxKQotICovCi1pbnQgb3Bl bnNvY2tldChpbnQgKnNvY2tmZCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGNvbm5lY3R0eXBlKTsK LQotLyogVGhpcyBpcyB0aGUgQVBJIHRvIHNlbmQgc29ja2V0IGRhdGEgb3ZlciBJUEMgc29ja2V0 ICovCi1pbnQgc2VuZHRvc29ja2V0KGludCBzb2NrZmQsIHN0cnVjdCBzb2NrZXRkYXRhICpkYXRh KTsKLQotLyogVGhpcyBpcyB0aGUgQVBJIHRvIHJlY2VpdmUgc29ja2V0IGRhdGEgb3ZlciBJUEMg c29ja2V0ICovCi1pbnQgcmVjZWl2ZWZyb21zb2NrZXQoaW50IHNvY2tmZCwgc3RydWN0IHNvY2tl dGRhdGEgKmRhdGEpOwotCi0vKiBUaGlzIGlzIHRoZSBBUEkgdG8gY2xvc2UgdGhlIHNvY2tldCBj b25uZWN0aW9uICovCi1pbnQgY2xvc2Vzb2NrZXQoaW50IHNvY2tmZCwgY2hhciAqbmFtZSk7Ci0K LQotI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL3J1 bi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvcnVuLnNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDc1NQppbmRleCBkZDhlZGYyOTE0NTQuLjAwMDAwMDAwMDAwMAotLS0gYS90b29s cy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL3J1bi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMg KzAsMCBAQAotIyEvYmluL3NoCi0KLShjZCBpb247IC4vaW9uX3Rlc3Quc2gpCi0tIAoyLjI4LjAK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkZXZlbCBt YWlsaW5nIGxpc3QKZGV2ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9yZwpodHRwOi8vZHJpdmVyZGV2 LmxpbnV4ZHJpdmVycHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcml2ZXJkZXYtZGV2ZWwK