Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp3055995ybb; Sun, 12 Apr 2020 22:51:17 -0700 (PDT) X-Google-Smtp-Source: APiQypIBy//jOL7l3tMeqwBaT2yKKVu8t5Te3bWFrKvzCr/iVUTZRCedAYR1VPd5rmcspTJiLqRo X-Received: by 2002:ad4:4c85:: with SMTP id bs5mr15960833qvb.212.1586757077288; Sun, 12 Apr 2020 22:51:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586757077; cv=none; d=google.com; s=arc-20160816; b=q+P7vFhc/1774GPodoReYCc0XeLz7Xl/gehA0AYiLOC5pQ60597GWPGI1X4Uh3nHK7 s0m/0KVbyOpoR44uMWjv1s0D93xBxoR21Z6WcZWu/V1k/lILVS9Ch91Azaaut/hpP1N1 jd5LU7KKDV0vMsnADzhtUMg3XyeVM2POeXTVSW9+T7kusQEvOkxGAMOvhKgnP79eQR1U fsOdAYw/SZbWEl29vYmQa6ED9kZScqaHmbBfFwiekdEtf7iLIEy6Ai67hIwCw+Ai1Y7d ajvlubxsI+pC0EJi769oBSW3Je5MErNlgU8Dju/5Hn3A65GV6xAuTJuboxMie0JivkKv hg5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:from:mime-version:in-reply-to :subject:cc:to:message-id:content-transfer-encoding; bh=0ORVPQxd2yANIQMy/uDeCqiaevxDVzo15Ka27kGPY70=; b=EmaGVSSKlq69VIxns9e1UIf0gczAs7JLbpjdanbKXxh7lkqkaSiY4b1DFlIcWQwhez B33OZSkNt6bgaEgKfqQZfXPT8Wk5yREcEfGhgEhUrN6q19NU7n1Ejn5WkXNorPbO14Mb n2PM039BUZvIqPPvi3h04FHJqfKYVi/Xolya1IHO0w/RSM1gSKd6HLUm6DUx/PN1bapn wZPHg5nPblBxo8fTos+EYVpnwMqWu7tY141otuOP5HvykwEl/pNhW29C9nNYxW5fu/4k nwg7lkl8H72o9T51+XgaMdS85j22RHzw2HF1EJv6cOduTUsVztzsdzsUp3EIoqXeUWze 4HRw== ARC-Authentication-Results: i=1; mx.google.com; spf=neutral (google.com: 209.132.180.67 is neither permitted nor denied by best guess record for domain of linux-kernel-owner@vger.kernel.org) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org ([209.132.180.67]) by mx.google.com with ESMTP id 97si5261553qtc.64.2020.04.12.22.51.02; Sun, 12 Apr 2020 22:51:17 -0700 (PDT) Received-SPF: neutral (google.com: 209.132.180.67 is neither permitted nor denied by best guess record for domain of linux-kernel-owner@vger.kernel.org) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.132.180.67 is neither permitted nor denied by best guess record for domain of linux-kernel-owner@vger.kernel.org) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726347AbgDMEFk (ORCPT + 99 others); Mon, 13 Apr 2020 00:05:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.18]:56338 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725775AbgDMEFk (ORCPT ); Mon, 13 Apr 2020 00:05:40 -0400 X-Greylist: delayed 590 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Sun, 12 Apr 2020 21:05:39 PDT Received: from m142-177.yeah.net (m142-177.yeah.net [123.58.177.142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3DF5EC0A3BE0; Sun, 12 Apr 2020 21:05:39 -0700 (PDT) Received: from vivo.com (localhost [127.0.0.1]) by m142-177.yeah.net (Hmail) with ESMTP id 57E916440B6; Mon, 13 Apr 2020 11:55:41 +0800 (CST) Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Message-ID: To: Bjorn Andersson Cc: akpm@linux-foundation.org, "David S. Miller" , Jakub Kicinski , Greg Kroah-Hartman , Thomas Gleixner , Nicholas Mc Guire , Allison Randal , Johannes Berg , Arnd Bergmann , Carl Huang , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, kernel@vivo.com Subject: =?UTF-8?B?UmU6IFtQQVRDSCBSRVNFTkRdIG5ldDogcXJ0cjogc3VwcG9ydCBxcnRyIHNlcnZpY2UgYW5kIGxvb2t1cCByb3V0ZQ==?= X-Priority: 3 X-Mailer: HMail Webmail Server V2.0 Copyright (c) 2016-163.com X-Originating-IP: 58.251.74.226 In-Reply-To: <20200409193807.GS20625@builder.lan> MIME-Version: 1.0 Received: from wenhu.wang@vivo.com( [58.251.74.226) ] by ajax-webmail ( [127.0.0.1] ) ; Mon, 13 Apr 2020 11:55:41 +0800 (GMT+08:00) From: =?UTF-8?B?546L5paH6JmO?= Date: Mon, 13 Apr 2020 11:55:41 +0800 (GMT+08:00) X-HM-Spam-Status: e1kfGhgUHx5ZQUtXWQgYFAkeWUFZT1VPTkpLS0tJSkhNSUhLTllXWShZQU hPN1dZLVlBSVdZCQ4XHghZQVk1NCk2OjckKS43PlkG X-HM-Sender-Digest: e1kJHlYWEh9ZQUhMSk5PTU5ITklJN1dZDB4ZWUEPCQ4eV1kSHx4VD1lB WUc6OTY6Axw6LDg#FgseKT4SCgETDT4wCh9VSFVKTkNNTE5LSk9NTk9JVTMWGhIXVQweFRMOVQwa FRw7DRINFFUYFBZFWVdZEgtZQVlOQ1VJTkpVTE9VSUlNWVdZCAFZQUhKSU5KNwY+ X-HM-Tid: 0a7171adb3ba6473kurs57e916440b6 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org CkZyb206IEJqb3JuIEFuZGVyc3NvbiA8Ympvcm4uYW5kZXJzc29uQGxpbmFyby5vcmc+CkRhdGU6 IDIwMjAtMDQtMTAgMDM6Mzg6MDcKVG86ICBXYW5nIFdlbmh1IDx3ZW5odS53YW5nQHZpdm8uY29t PgpDYzogIGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmcsIkRhdmlkIFMuIE1pbGxlciIgPGRhdmVt QGRhdmVtbG9mdC5uZXQ+LEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+LEdyZWcgS3Jv YWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+LFRob21hcyBHbGVpeG5lciA8 dGdseEBsaW51dHJvbml4LmRlPixOaWNob2xhcyBNYyBHdWlyZSA8aG9mcmF0QG9zYWRsLm9yZz4s QWxsaXNvbiBSYW5kYWwgPGFsbGlzb25AbG9odXRvay5uZXQ+LEpvaGFubmVzIEJlcmcgPGpvaGFu bmVzLmJlcmdAaW50ZWwuY29tPixBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPixDYXJsIEh1 YW5nIDxjamh1YW5nQGNvZGVhdXJvcmEub3JnPixsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3Jn LG5ldGRldkB2Z2VyLmtlcm5lbC5vcmcsa2VybmVsQHZpdm8uY29tClN1YmplY3Q6IFJlOiBbUEFU Q0ggUkVTRU5EXSBuZXQ6IHFydHI6IHN1cHBvcnQgcXJ0ciBzZXJ2aWNlIGFuZCBsb29rdXAgcm91 dGU+T24gV2VkIDA4IEFwciAwMzo0NiBQRFQgMjAyMCwgV2FuZyBXZW5odSB3cm90ZToKPgo+PiBR U1IgaW1wbGVtZW50cyBtYWludGVuYW5jZSBvZiBxcnRyIHNlcnZpY2VzIGFuZCBsb29rdXBzLiBJ dCB3b3VsZAo+PiBiZSBoZWxwZnVsIGZvciBkZXZlbG9wZXJzIHRvIHdvcmsgd2l0aCBRUlRSIHdp dGhvdXQgdGhlIG5vbmUtb3BlbnNvdXJjZQo+PiB1c2VyLXNwYWNlIGltcGxlbWVudGF0aW9uIHBh cnQgb2YgSVBDIFJvdXRlci4KPj4gCj4+IEFzIHdlIGtub3csIHRoZSBleHRyZW1lbHkgaW1wb3J0 YW50IHBvaW50IG9mIElQQyBSb3V0ZXIgaXMgdGhlIHN1cHBvcnQKPj4gb2Ygc2VydmljZXMgZm9y bSBkaWZmZXJlbnQgbm9kZXMuIEJ1dCBRUlRSIHdhcyBwdXNoZWQgaW50byBtYWlubGluZQo+PiB3 aXRob3V0IHJvdXRlIHByb2Nlc3Mgc3VwcG9ydCBvZiBzZXJ2aWNlcywgYW5kIHRoZSByb3V0ZXIg cG9ydCBwcm9jZXNzCj4+IGlzIGltcGxlbWVudGVkIGluIHVzZXItc3BhY2UgYXMgbm9uZS1vcGVu c291cmNlIGNvZGVzLCB3aGljaCBpcyBhbgo+PiBncmVhdCB1bmNvbnZlbmllbmNlIGZvciBkZXZl bG9wZXJzLgo+PiAKPj4gUVNSIGFsc28gaW1wbGVtZW50cyBhIGludGVyZmFjZSB2aWEgY2hhcmRl diBhbmQgYSBzZXQgb2Ygc3lzZnMgY2xhc3MKPj4gZmlsZXMgZm9yIHRoZSBjb21tdW5pY2F0aW9u IGFuZCBkZWJ1Z2dpbmcgaW4gdXNlci1zcGFjZS4gV2UgY2FuIGdldAo+PiBzZXJ2aWNlIGFuZCBs b29rdXAgZW50cmllcyBjb252ZW5pZW50bHkgdmlhIHN5c2ZzIGZpbGUgaW4gL3N5cy9jbGFzcy9x c3IvLgo+PiBDdXJyZW50bHkgYWRkLXNlcnZlciwgZGVsLXNlcnZlciwgYWRkLWxvb2t1cCBhbmQg ZGVsLWxvb2t1cCBjb250cm9sCj4+IHBhY2thdGV0cyBhcmUgcHJvY2Vzc2VkIGFuZCBlbmhhbmNl bWVudHMgY291bGQgYmUgdGFrZW4gZWFzaWx5IHVwb24KPj4gY3VycmVudGx5IGltcGxlbWVudGF0 aW9uLgo+PiAKPj4gU2lnbmVkLW9mZi1ieTogV2FuZyBXZW5odSA8d2VuaHUud2FuZ0B2aXZvLmNv bT4KPgo+SGkgV2FuZywKPgo+SXNuJ3QgdGhpcyBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgdGhpbmcg dGhhdCB3YXMgcmVjZW50bHkgbGFuZGVkIHVwc3RyZWFtCj5hcyBuZXQvcXJ0ci9ucy5jPwoKPgoK SGksIFJlZ2FyZHMKSSBmb3VuZCB0aGUgcW1pLXNlcnZpY2UtbWFpbnRhaW5lbmNlIGhhZCBiZWVu IG1pc3Npbmcgc2luY2UgUVJUUiB3YXMgaW50cm9kdWNlZApyZWNlbnRseSB3aGlsZSBJIHdhcyBi dXN5IHdvcmtpbmcgd2l0aCBhbm90aGVyIG5ldyBkcml2ZXIgd2hpY2ggSSB3b3VsZCBuYW1lCml0 IFJQTU9OKFJlbW90ZSBQcm9jZXNzb3IgTW9uaXRvcikuIEkga29udyB0aGUgbWFpbnRhaW5lbmNl IGlzIHN1cHBvcnRlZAppbiB1c2VyIGxldmVsIGJ1dCBkaWQgbm90IGZpbmQgYW55IG9wZW5zb3Vy Y2UgY29kZS4KCkFzIHlvdSBtZW50aW9uZWQgbnMsYywgbGV0IG1lIGNoZWNrIGl0IG91dCBmaXJz dC4KCkFzIGZvciBSUE1PTiwgSSBoYXZlIHNlbnQgaXQgb3V0IHRvIEdyZWcgS0guCmh0dHBzOi8v bG9yZS5rZXJuZWwub3JnL2xrbWwvMjAyMDA0MTIxMTI0MDUuMjQxMTYtMS13ZW5odS53YW5nQHZp dm8uY29tLwoKVGhhbmtzLApXZW5odQoKPlJlZ2FyZHMsCj5Cam9ybgo+Cj4+IC0tLQo+PiBDaGFu Z2Vsb2c6Cj4+ICBUaGlzIGlzIGEgcmVzZW50LCBidXQgdGhlIGZpcnN0IG5vcm1hbCB2ZXJzaW9u IG9mIFFTUiBzdXBwb3J0Lgo+PiAgVGhlIGZvcm1lciBvbmUgc2VudCBvdXQgZWFybGllciBjb250 YWlucyBvbmx5IHRoZSBwYXRjaCBvZiBjb2RpbmcKPj4gIHN0eWxlIG1vZGlmaWNhdGlvbiBvZiBx c3IuYy4KPj4gIAo+PiAgUGxlYXNlIGRvIG5vdCBiZSBjb25mdXNlZCBhbmQgdGFrZSB0aGlzIHBh dGNoIGFzIHRoZSBOT1JNQUwgY29tbWl0IG9mIFFTUi4KPj4gLS0tCj4+ICBuZXQvcXJ0ci9LY29u ZmlnICB8ICAgOCArCj4+ICBuZXQvcXJ0ci9NYWtlZmlsZSB8ICAgMiArCj4+ICBuZXQvcXJ0ci9x cnRyLmMgICB8ICAgNSArCj4+ICBuZXQvcXJ0ci9xcnRyLmggICB8ICAgMiArCj4+ICBuZXQvcXJ0 ci9xc3IuYyAgICB8IDYyMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4+ICA1IGZpbGVzIGNoYW5nZWQsIDYzOSBpbnNlcnRpb25zKCspCj4+ICBjcmVhdGUg bW9kZSAxMDA2NDQgbmV0L3FydHIvcXNyLmMKPj4gCj4+IGRpZmYgLS1naXQgYS9uZXQvcXJ0ci9L Y29uZmlnIGIvbmV0L3FydHIvS2NvbmZpZwo+PiBpbmRleCA2M2Y4OWNjNmU4MmMuLmQyY2U4ZmI1 NzI3OCAxMDA2NDQKPj4gLS0tIGEvbmV0L3FydHIvS2NvbmZpZwo+PiArKysgYi9uZXQvcXJ0ci9L Y29uZmlnCj4+IEBAIC0yOSw0ICsyOSwxMiBAQCBjb25maWcgUVJUUl9UVU4KPj4gIAkgIGltcGxl bWVudCBlbmRwb2ludHMgb2YgUVJUUiwgZm9yIHB1cnBvc2Ugb2YgdHVubmVsaW5nIGRhdGEgdG8g b3RoZXIKPj4gIAkgIGhvc3RzIG9yIHRlc3RpbmcgcHVycG9zZXMuCj4+ICAKPj4gK2NvbmZpZyBR U1IKPj4gKwl0cmlzdGF0ZSAiUVJUUiBTZXJ2aWNlIFJvdXRlciIKPj4gKwloZWxwCj4+ICsJICBT YXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUga2VybmVsIFFSVFIgU2VydmljZSBSb3V0ZXIgbW9kdWxl Lgo+PiArCSAgUVNSIHN1cHBvcnQgcm91dGUgcHJvY2Vzc2VzIG9mIFFSVFIgc2VydmljZXMgYW5k IGxvb2t1cHMuIEl0IHdvdWxkIGJlCj4+ICsJICBoZWxwZnVsIHdoZW4gZGV2ZWxvcCB3aXRoIFFS VFIgd2l0aG91dCB1c2VyLXNwYWNlIGltcGxlbWVudGF0aW9uIG9mCj4+ICsJICBJUEMgUm91dGVy IHN1cHBvcnQuCj4+ICsKPj4gIGVuZGlmICMgUVJUUgo+PiBkaWZmIC0tZ2l0IGEvbmV0L3FydHIv TWFrZWZpbGUgYi9uZXQvcXJ0ci9NYWtlZmlsZQo+PiBpbmRleCAxYzZkNmMxMjBmYjcuLjM4ODJi ZWFlYWQyOSAxMDA2NDQKPj4gLS0tIGEvbmV0L3FydHIvTWFrZWZpbGUKPj4gKysrIGIvbmV0L3Fy dHIvTWFrZWZpbGUKPj4gQEAgLTUsMyArNSw1IEBAIG9iai0kKENPTkZJR19RUlRSX1NNRCkgKz0g cXJ0ci1zbWQubwo+PiAgcXJ0ci1zbWQteQk6PSBzbWQubwo+PiAgb2JqLSQoQ09ORklHX1FSVFJf VFVOKSArPSBxcnRyLXR1bi5vCj4+ICBxcnRyLXR1bi15CTo9IHR1bi5vCj4+ICtvYmotJChDT05G SUdfUVNSKSArPSBxcnRyLXN2Yy1yb3V0ZXIubwo+PiArcXJ0ci1zdmMtcm91dGVyLXkJOj0gcXNy Lm8KPj4gZGlmZiAtLWdpdCBhL25ldC9xcnRyL3FydHIuYyBiL25ldC9xcnRyL3FydHIuYwo+PiBp bmRleCA1YThlNDJhZDE1MDQuLjI2N2Y3ZDZjNzQ2ZiAxMDA2NDQKPj4gLS0tIGEvbmV0L3FydHIv cXJ0ci5jCj4+ICsrKyBiL25ldC9xcnRyL3FydHIuYwo+PiBAQCAtMTU4LDYgKzE1OCwxMSBAQCBz dGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLAo+PiAgc3RhdGljIHN0cnVjdCBxcnRyX3NvY2sgKnFydHJfcG9ydF9s b29rdXAoaW50IHBvcnQpOwo+PiAgc3RhdGljIHZvaWQgcXJ0cl9wb3J0X3B1dChzdHJ1Y3QgcXJ0 cl9zb2NrICppcGMpOwo+PiAgCj4+ICt1bnNpZ25lZCBpbnQgZ2V0X3FydHJfbG9jYWxfbmlkKHZv aWQpCj4+ICt7Cj4+ICsJcmV0dXJuIHFydHJfbG9jYWxfbmlkOwo+PiArfQo+PiArCj4+ICAvKiBS ZWxlYXNlIG5vZGUgcmVzb3VyY2VzIGFuZCBmcmVlIHRoZSBub2RlLgo+PiAgICoKPj4gICAqIERv IG5vdCBjYWxsIGRpcmVjdGx5LCB1c2UgcXJ0cl9ub2RlX3JlbGVhc2UuICBUbyBiZSB1c2VkIHdp dGgKPj4gZGlmZiAtLWdpdCBhL25ldC9xcnRyL3FydHIuaCBiL25ldC9xcnRyL3FydHIuaAo+PiBp bmRleCBiODFlNjk1M2MwNGIuLjg3MmQ5OGZkMzZjNiAxMDA2NDQKPj4gLS0tIGEvbmV0L3FydHIv cXJ0ci5oCj4+ICsrKyBiL25ldC9xcnRyL3FydHIuaAo+PiBAQCAtMjksNCArMjksNiBAQCB2b2lk IHFydHJfZW5kcG9pbnRfdW5yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXApOwo+PiAg Cj4+ICBpbnQgcXJ0cl9lbmRwb2ludF9wb3N0KHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgY29u c3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Cj4+ICAKPj4gK3Vuc2lnbmVkIGludCBnZXRfcXJ0 cl9sb2NhbF9uaWQodm9pZCk7Cj4+ICsKPj4gICNlbmRpZgo+PiBkaWZmIC0tZ2l0IGEvbmV0L3Fy dHIvcXNyLmMgYi9uZXQvcXJ0ci9xc3IuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwMDAwMDAuLjkwNmY1OTAzZWJhZAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL25l dC9xcnRyL3Fzci5jCj4+IEBAIC0wLDAgKzEsNjIyIEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMAo+PiArCj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIFZp dm8gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2d5IENvLiBMdGQuCj4+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMjAgV2FuZyBXZW5odSA8d2VuaHUud2FuZ0B2aXZvLmNvbT4KPj4gKyAqCj4+ICsgKiBUaGUg UVJUUiBTZXJ2aWNlIFJvdXRlIG1vZHVsZSBhaW1zIGF0IHByb3ZpZGluZyBtYWludGVuYW5jZQo+ PiArICogYW5kIHJvdXRlIHByb2Nlc3NlcyBmb3IgcXJ0ciBzZXJ2aWNlIGFuZCBsb29rdXAgcmVx dWVzdHMgaW4KPj4gKyAqIGtlcm5lbC4gQWxzbywgaXQgcHJvdmlkZXMgc3lzZnMgY2xhc3MgaW50 ZXJmYWNlIHRvIGV4cG9zZQo+PiArICogdGhlIHN0YXR1cyBvZiBxcnRyIHNlcnZpY2VzIGFuZCBs b29rdXBzLiBNb3JlIGNvdWxkIGJlIGRvbmUKPj4gKyAqIHRocm91Z2ggdGhlIGNoYXJhY3RlciBk ZXZpY2UgL2Rldi9xc3IgaW4gdXNlci1zcGFjZS4KPj4gKyAqCj4+ICsgKiBDdXJyZW50bHksIG9u bHkgc2VydmVyIGFkZCwgc2VydmVyIGRlbGV0ZSwgbG9va3VwIGFkZCBhbmQKPj4gKyAqIGxvb2t1 cCBkZWxldGUgcmVxdWVzdHMgYXJlIHByb2Nlc3NlZC4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvbXV0ZXguaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvY2Rldi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3FydHIuaD4KPj4g KyNpbmNsdWRlIDxuZXQvc29jay5oPgo+PiArCj4+ICsjaW5jbHVkZSAicXJ0ci5oIgo+PiArCj4+ ICsjZGVmaW5lIFFTUl9OQU1FCSJxc3IiCj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IHFzcl9p bmZvIC0gcXJ0ciBzZXJ2aWNlIHJvdXRlIHJlcXVlc3QgaW5mb3JtYXRpb24KPj4gKyAqIEBzZXJ2 aWNlOglzZXJ2aWNlIGlkZW50aXR5Cj4+ICsgKiBAaW5zdGFuY2U6CXNlcnZpY2UgaW5zdGFuY2UK Pj4gKyAqIEBzZXJ2ZXI6CQlzZXJ2ZXIgYWRkcmVzcwo+PiArICogQGNsaWVudDoJCWNsaWVudCBh ZGRyZXNzCj4+ICsgKiBAbm9kZToJCXFydHIgbm9kZSBvZiBzZXJ2ZXIgb3IgY2xpZW50Cj4+ICsg KiBAcG9ydDoJCXFydHIgcG9ydCBvZiBzZXJ2ZXIgb3IgY2xpZW50Cj4+ICsgKgo+PiArICogV2hl biBhIGNvbnRyb2wgcGFja2V0IG9mIG5ldyBzZXJ2ZXIgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhl IHNlcnZlcgo+PiArICogZmllbGQgc2hvdWxkIGJlIHJlZmVyZW5jZSBmb3IgdGhlIHNlcnZlciBu b2RlIGFkZHJlc3MuIEZvciB0aGUgb3Bwb3NpdGUKPj4gKyAqIHNpdHVhdGlvbiwgdGhlIGNsaWVu dCBmaWVsZCBzaG91bGQgYmUgcmVmZXJlbmNlZCB3aXRoaW4gYSBsb29rdXAgcmVxdWVzdC4KPj4g KyAqLwo+PiArc3RydWN0IHFzcl9pbmZvIHsKPj4gKwlfX2xlMzIgc2VydmljZTsKPj4gKwlfX2xl MzIgaW5zdGFuY2U7Cj4+ICsKPj4gKwl1bmlvbiB7Cj4+ICsJCXN0cnVjdCB7Cj4+ICsJCQlfX2xl MzIgbm9kZTsKPj4gKwkJCV9fbGUzMiBwb3J0Owo+PiArCQl9IHNlcnZlcjsKPj4gKwo+PiArCQlz dHJ1Y3Qgewo+PiArCQkJX19sZTMyIG5vZGU7Cj4+ICsJCQlfX2xlMzIgcG9ydDsKPj4gKwkJfSBj bGllbnQ7Cj4+ICsJfTsKPj4gKwo+PiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPj4gK307Cj4+ ICsKPj4gKy8qKgo+PiArICogc3RydWN0IHFzciAtIHFydHIgc2VydmljZSByb3V0ZSBkZXZpY2Ug c3RydWN0dXJlCj4+ICsgKiBAZGV2OgkJY2hhcmFjdGVyIGRldmljZSBmb3IgdXNlci1zcGFjZSBj b21tdW5pY2F0aW9uCj4+ICsgKiBAc2s6CQkJc29ja2V0IHRvIHByb2Nlc3MgbWVzc2FnZXMKPj4g KyAqIEBzcToJCQlzb2NrZXQgYWRkcmVzcyB0byBiZSBiaW5kZWQKPj4gKyAqIEBvcHM6CQljYWxs YmFja3Mgb2YgZGlmZmVyZW50IGNvbnRyb2wgcGFja2FnZSB0eXBlcwo+PiArICogQHFzcl9sb2Nr OglkYXRhIGJ1ZmZlciBsb2NrCj4+ICsgKiBAcmVjdl9idWY6CXJlY2VpdmUgYnVmZmVyCj4+ICsg KiBAcmVjdl9idWZfc2l6ZToJcmVjZWl2ZSBidWZmZXIgc2l6ZQo+PiArICogQHdxOgkJCXdvcmtx dWV1ZSBmb3IgbWVzc2FnZSBwcm9jZXNzIHdvcmtlcgo+PiArICogQHdvcms6CQl3b3JrIHJvdXRl IHRvIHByb2Nlc3MgcXVldWVkIG1lc3NhZ2VzCj4+ICsgKiBAbG9va3VwczoJcGVuZGluZyBsb29r dXAgcmVxdWVzdHMKPj4gKyAqIEBzZXJ2aWNlczoJc2VydmVycyBsaXN0IHRvIHByb3ZpZGUgZGlm ZmVyZW50IGtpbmQgb2Ygc2VydmljZXMKPj4gKyAqLwo+PiArc3RydWN0IHFzciB7Cj4+ICsJc3Ry dWN0IGRldmljZQkJCWRldjsKPj4gKwlzdHJ1Y3Qgc29ja2V0CQkJKnNrOwo+PiArCXN0cnVjdCBz b2NrYWRkcl9xcnRyCXNxOwo+PiArCXN0cnVjdCBxc3Jfb3BzCQkJKm9wczsKPj4gKwo+PiArCXN0 cnVjdCBtdXRleAkJCXFzcl9sb2NrOwo+PiArCXZvaWQJCQkJCSpyZWN2X2J1ZjsKPj4gKwlzaXpl X3QJCQkJCXJlY3ZfYnVmX3NpemU7Cj4+ICsKPj4gKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkq d3E7Cj4+ICsJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrOwo+PiArCj4+ICsJc3RydWN0IGxpc3Rf aGVhZAkJbG9va3VwczsKPj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCQlzZXJ2aWNlczsKPj4gK307Cj4+ ICsKPj4gK3N0cnVjdCBxc3Jfb3BzIHsKPj4gKwlpbnQgKCpuZXdfc2VydmVyKShzdHJ1Y3QgcXNy X2luZm8gKnN2Yyk7Cj4+ICsJaW50ICgqbmV3X2xvb2t1cCkoc3RydWN0IHFzcl9pbmZvICpzdmMs IHUzMiBub2RlLCB1MzIgcG9ydCk7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHFzcl9tYWpv cjsKPj4gK3N0YXRpYyBzdHJ1Y3QgY2RldiAqcXNyX2NkZXY7Cj4+ICtzdGF0aWMgc3RydWN0IHFz ciAqcXNyOwo+PiArCj4+ICtzdGF0aWMgaW50IHFzcl9uZXdfc2VydmVyKHN0cnVjdCBxc3JfaW5m byAqbmV3KQo+PiArewo+PiArCXN0cnVjdCBxc3JfaW5mbyAqbG9va3VwOwo+PiArCXN0cnVjdCBx c3Jfb3BzICpvcHMgPSBxc3ItPm9wczsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJaWYgKCFvcHMt Pm5ld19sb29rdXApCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJbGlzdF9mb3JfZWFjaF9lbnRy eShsb29rdXAsICZxc3ItPmxvb2t1cHMsIGxpc3QpIHsKPj4gKwkJaWYgKGxvb2t1cC0+c2Vydmlj ZSA9PSBuZXctPnNlcnZpY2UgJiYKPj4gKwkJICAgIGxvb2t1cC0+aW5zdGFuY2UgPT0gbmV3LT5p bnN0YW5jZSkgewo+PiArCQkJcmV0ID0gb3BzLT5uZXdfbG9va3VwKG5ldywKPj4gKwkJCQkJCQls b29rdXAtPmNsaWVudC5ub2RlLAo+PiArCQkJCQkJCWxvb2t1cC0+Y2xpZW50LnBvcnQpOwo+PiAr CQkJaWYgKHJldCA8IDApCj4+ICsJCQkJcHJfZXJyKCJFcnJvciB0byBub3RpY2UgY2xpZW50IG9m IG5ldyBzZXJ2ZXIsICVkXG4iLCByZXQpOwo+PiArCQkJZWxzZQo+PiArCQkJCWxpc3RfZGVsKCZs b29rdXAtPmxpc3QpOwo+PiArCQkJcmV0dXJuIDA7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwly ZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBxc3JfbmV3X2xvb2t1cChzdHJ1Y3Qg cXNyX2luZm8gKnN2YywgdTMyIG5vZGUsIHUzMiBwb3J0KQo+PiArewo+PiArCXN0cnVjdCBxcnRy X2N0cmxfcGt0IHBrdDsKPj4gKwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBzcTsKPj4gKwlzdHJ1Y3Qg bXNnaGRyIG1zZyA9IHsgfTsKPj4gKwlzdHJ1Y3Qga3ZlYyBpdiA9IHsgJnBrdCwgc2l6ZW9mKHBr dCkgfTsKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCW1lbXNldCgmcGt0LCAwLCBzaXplb2Yo cGt0KSk7Cj4+ICsJcGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9ORVdfU0VSVkVSKTsK Pj4gKwlwa3Quc2VydmVyLnNlcnZpY2UgPSBjcHVfdG9fbGUzMihzdmMtPnNlcnZpY2UpOwo+PiAr CXBrdC5zZXJ2ZXIuaW5zdGFuY2UgPSBjcHVfdG9fbGUzMihzdmMtPmluc3RhbmNlKTsKPj4gKwlw a3Quc2VydmVyLm5vZGUgPSBjcHVfdG9fbGUzMihzdmMtPnNlcnZlci5ub2RlKTsKPj4gKwlwa3Qu c2VydmVyLnBvcnQgPSBjcHVfdG9fbGUzMihzdmMtPnNlcnZlci5wb3J0KTsKPj4gKwo+PiArCXNx LnNxX2ZhbWlseSA9IEFGX1FJUENSVFI7Cj4+ICsJc3Euc3Ffbm9kZSA9IG5vZGU7Cj4+ICsJc3Eu c3FfcG9ydCA9IHBvcnQ7Cj4+ICsKPj4gKwltc2cubXNnX25hbWUgPSAmc3E7Cj4+ICsJbXNnLm1z Z19uYW1lbGVuID0gc2l6ZW9mKHNxKTsKPj4gKwo+PiArCW11dGV4X2xvY2soJnFzci0+cXNyX2xv Y2spOwo+PiArCWlmIChxc3ItPnNrKSB7Cj4+ICsJCXJldCA9IGtlcm5lbF9zZW5kbXNnKHFzci0+ c2ssICZtc2csICZpdiwgMSwgc2l6ZW9mKHBrdCkpOwo+PiArCQlpZiAocmV0IDwgMCkKPj4gKwkJ CXByX2VycigiRXJyb3IgdG8gc2VuZCBzZXJ2ZXIgaW5mbyB0byBjbGllbnQsICVkXG4iLCByZXQp Owo+PiArCX0KPj4gKwltdXRleF91bmxvY2soJnFzci0+cXNyX2xvY2spOwo+PiArCj4+ICsJcmV0 dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgcXNyX3JlY3ZfbmV3X3NlcnZlcih1 MzIgc2VydmljZSwKPj4gKwkJCQl1MzIgaW5zdGFuY2UsCj4+ICsJCQkJdTMyIG5vZGUsCj4+ICsJ CQkJdTMyIHBvcnQpCj4+ICt7Cj4+ICsJc3RydWN0IHFzcl9vcHMgKm9wcyA9IHFzci0+b3BzOwo+ PiArCXN0cnVjdCBxc3JfaW5mbyAqc3ZjLCAqdGVtcDsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJ aWYgKCFvcHMtPm5ld19zZXJ2ZXIpCj4+ICsJCXJldHVybjsKPj4gKwo+PiArCWlmICghbm9kZSAm JiAhcG9ydCkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1w LCAmcXNyLT5zZXJ2aWNlcywgbGlzdCkgewo+PiArCQlpZiAodGVtcC0+c2VydmljZSA9PSBzZXJ2 aWNlICYmIHRlbXAtPmluc3RhbmNlID09IGluc3RhbmNlKSB7Cj4+ICsJCQlwcl9lcnIoIkVycm9y IHNlcnZlciBleGlzdHMsIHNlcnZpY2U6MHgleCBpbnN0YW5jZToweCV4IiwKPj4gKwkJCSAgICAg ICBzZXJ2aWNlLCBpbnN0YW5jZSk7Cj4+ICsJCQlyZXR1cm47Cj4+ICsJCX0KPj4gKwl9Cj4+ICsK Pj4gKwlzdmMgPSBremFsbG9jKHNpemVvZigqc3ZjKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFz dmMpCj4+ICsJCXJldHVybjsKPj4gKwo+PiArCXN2Yy0+c2VydmljZSA9IHNlcnZpY2U7Cj4+ICsJ c3ZjLT5pbnN0YW5jZSA9IGluc3RhbmNlOwo+PiArCXN2Yy0+c2VydmVyLm5vZGUgPSBub2RlOwo+ PiArCXN2Yy0+c2VydmVyLnBvcnQgPSBwb3J0Owo+PiArCj4+ICsJcmV0ID0gb3BzLT5uZXdfc2Vy dmVyKHN2Yyk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCWtmcmVlKHN2Yyk7Cj4+ICsJZWxzZQo+ PiArCQlsaXN0X2FkZCgmc3ZjLT5saXN0LCAmcXNyLT5zZXJ2aWNlcyk7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIHFzcl9yZWN2X2RlbF9zZXJ2ZXIodTMyIHNlcnZpY2UsIHUzMiBpbnN0YW5j ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgcXNyX2luZm8gKnN2YzsKPj4gKwo+PiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkoc3ZjLCAmcXNyLT5sb29rdXBzLCBsaXN0KSB7Cj4+ICsJCWlmIChzdmMtPnNlcnZp Y2UgPT0gc2VydmljZSAmJiBzdmMtPmluc3RhbmNlID09IGluc3RhbmNlKSB7Cj4+ICsJCQlsaXN0 X2RlbCgmc3ZjLT5saXN0KTsKPj4gKwkJCXJldHVybjsKPj4gKwkJfQo+PiArCX0KPj4gK30KPj4g Kwo+PiArc3RhdGljIHZvaWQgcXNyX3JlY3ZfbmV3X2xvb2t1cCh1MzIgc2VydmljZSwKPj4gKwkJ CQl1MzIgaW5zdGFuY2UsCj4+ICsJCQkJdTMyIG5vZGUsCj4+ICsJCQkJdTMyIHBvcnQpCj4+ICt7 Cj4+ICsJc3RydWN0IHFzcl9vcHMgKm9wcyA9IHFzci0+b3BzOwo+PiArCXN0cnVjdCBxc3JfaW5m byAqc3ZjLCAqdGVtcDsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJaWYgKCFvcHMtPm5ld19sb29r dXApCj4+ICsJCXJldHVybjsKPj4gKwo+PiArCWlmICghbm9kZSAmJiAhcG9ydCkKPj4gKwkJcmV0 dXJuOwo+PiArCj4+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wLCAmcXNyLT5sb29rdXBzLCBs aXN0KSB7Cj4+ICsJCWlmICh0ZW1wLT5zZXJ2aWNlID09IHNlcnZpY2UgJiYKPj4gKwkJICAgIHRl bXAtPmluc3RhbmNlID09IGluc3RhbmNlICYmCj4+ICsJCSAgICB0ZW1wLT5jbGllbnQubm9kZSA9 PSBub2RlICYmCj4+ICsJCSAgICB0ZW1wLT5jbGllbnQucG9ydCA9PSBwb3J0KSB7Cj4+ICsJCQlw cl9lcnIoIkVycm9yIGxvb2t1cCBleGlzdHMsIHNlcnZpY2U6MHgleCBpbnN0YW5jZToweCV4IG5v ZGU6JWQgcG9ydDolZCIsCj4+ICsJCQkgICAgICAgc2VydmljZSwgaW5zdGFuY2UsIG5vZGUsIHBv cnQpOwo+PiArCQkJcmV0dXJuOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJbGlzdF9mb3JfZWFj aF9lbnRyeShzdmMsICZxc3ItPnNlcnZpY2VzLCBsaXN0KSB7Cj4+ICsJCWlmIChzdmMtPnNlcnZp Y2UgPT0gc2VydmljZSAmJiBzdmMtPmluc3RhbmNlID09IGluc3RhbmNlKSB7Cj4+ICsJCQlyZXQg PSBvcHMtPm5ld19sb29rdXAoc3ZjLCBub2RlLCBwb3J0KTsKPj4gKwkJCWlmIChyZXQgPCAwKQo+ PiArCQkJCXByX2VycigiRXJyb3IgdG8gc2VuZCBzZXJ2ZXIgaW5mbyB0byBjbGllbnQsICVkIiwg cmV0KTsKPj4gKwkJCXJldHVybjsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCS8qIFNlcnZlciBk b2VzIG5vdCBleGlzdC4KPj4gKwkgKiBSZWNvcmQgdGhlIGxvb2t1cCBpbmZvcm1hdGlvbiBhbmQg YWRkIGl0IHRvIHRoZSBwZW5kaW5nIGxpc3QuCj4+ICsJICovCj4+ICsKPj4gKwlzdmMgPSBremFs bG9jKHNpemVvZigqc3ZjKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFzdmMpCj4+ICsJCXJldHVy bjsKPj4gKwo+PiArCXN2Yy0+c2VydmljZSA9IHNlcnZpY2U7Cj4+ICsJc3ZjLT5pbnN0YW5jZSA9 IGluc3RhbmNlOwo+PiArCXN2Yy0+Y2xpZW50Lm5vZGUgPSBub2RlOwo+PiArCXN2Yy0+Y2xpZW50 LnBvcnQgPSBwb3J0Owo+PiArCj4+ICsJbGlzdF9hZGQoJnN2Yy0+bGlzdCwgJnFzci0+bG9va3Vw cyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHFzcl9yZWN2X2RlbF9sb29rdXAodTMyIHNl cnZpY2UsCj4+ICsJCQkJdTMyIGluc3RhbmNlLAo+PiArCQkJCXUzMiBub2RlLAo+PiArCQkJCXUz MiBwb3J0KQo+PiArewo+PiArCXN0cnVjdCBxc3JfaW5mbyAqbG9va3VwOwo+PiArCj4+ICsJaWYg KCFub2RlICYmICFwb3J0KQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGxvb2t1cCwgJnFzci0+bG9va3VwcywgbGlzdCkgewo+PiArCQlpZiAobG9va3VwLT5zZXJ2 aWNlID09IHNlcnZpY2UgJiYKPj4gKwkJICAgIGxvb2t1cC0+aW5zdGFuY2UgPT0gaW5zdGFuY2Ug JiYKPj4gKwkJICAgIGxvb2t1cC0+Y2xpZW50Lm5vZGUgPT0gbm9kZSAmJgo+PiArCQkgICAgbG9v a3VwLT5jbGllbnQucG9ydCA9PSBwb3J0KSB7Cj4+ICsJCQlsaXN0X2RlbCgmbG9va3VwLT5saXN0 KTsKPj4gKwkJCXJldHVybjsKPj4gKwkJfQo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgcXNyX3JlY3ZfY3RybF9wa3Qoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxLAo+PiArCQkJICAg ICAgY29uc3Qgdm9pZCAqYnVmLAo+PiArCQkJICAgICAgc2l6ZV90IGxlbikKPj4gK3sKPj4gKwlj b25zdCBzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0ID0gYnVmOwo+PiArCj4+ICsJaWYgKGxlbiA8 IHNpemVvZihzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCkpIHsKPj4gKwkJcHJfZGVidWcoImlnbm9yaW5n IHNob3J0IGNvbnRyb2wgcGFja2V0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiAr CXN3aXRjaCAobGUzMl90b19jcHUocGt0LT5jbWQpKSB7Cj4+ICsJY2FzZSBRUlRSX1RZUEVfTkVX X1NFUlZFUjoKPj4gKwkJcXNyX3JlY3ZfbmV3X3NlcnZlcihsZTMyX3RvX2NwdShwa3QtPnNlcnZl ci5zZXJ2aWNlKSwKPj4gKwkJCQkgICAgbGUzMl90b19jcHUocGt0LT5zZXJ2ZXIuaW5zdGFuY2Up LAo+PiArCQkJCSAgICBsZTMyX3RvX2NwdShwa3QtPnNlcnZlci5ub2RlKSwKPj4gKwkJCQkgICAg bGUzMl90b19jcHUocGt0LT5zZXJ2ZXIucG9ydCkpOwo+PiArCQlicmVhazsKPj4gKwo+PiArCWNh c2UgUVJUUl9UWVBFX05FV19MT09LVVA6Cj4+ICsJCXFzcl9yZWN2X25ld19sb29rdXAobGUzMl90 b19jcHUocGt0LT5zZXJ2ZXIuc2VydmljZSksCj4+ICsJCQkJICAgIGxlMzJfdG9fY3B1KHBrdC0+ c2VydmVyLmluc3RhbmNlKSwKPj4gKwkJCQkgICAgc3EtPnNxX25vZGUsCj4+ICsJCQkJICAgIHNx LT5zcV9wb3J0KTsKPj4gKwkJYnJlYWs7Cj4+ICsKPj4gKwljYXNlIFFSVFJfVFlQRV9ERUxfU0VS VkVSOgo+PiArCQlxc3JfcmVjdl9kZWxfc2VydmVyKGxlMzJfdG9fY3B1KHBrdC0+c2VydmVyLnNl cnZpY2UpLAo+PiArCQkJCSAgICBsZTMyX3RvX2NwdShwa3QtPnNlcnZlci5pbnN0YW5jZSkpOwo+ PiArCQlicmVhazsKPj4gKwo+PiArCWNhc2UgUVJUUl9UWVBFX0RFTF9MT09LVVA6Cj4+ICsJCXFz cl9yZWN2X2RlbF9sb29rdXAobGUzMl90b19jcHUocGt0LT5zZXJ2ZXIuc2VydmljZSksCj4+ICsJ CQkJICAgIGxlMzJfdG9fY3B1KHBrdC0+c2VydmVyLmluc3RhbmNlKSwKPj4gKwkJCQkgICAgc3Et PnNxX25vZGUsCj4+ICsJCQkJICAgIHNxLT5zcV9wb3J0KTsKPj4gKwkJYnJlYWs7Cj4+ICsJfQo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBxc3JfcmVjdl93b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKPj4gK3sKPj4gKwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBzcTsKPj4gKwlzdHJ1Y3Qg bXNnaGRyIG1zZyA9IHsgLm1zZ19uYW1lID0gJnNxLCAubXNnX25hbWVsZW4gPSBzaXplb2Yoc3Ep IH07Cj4+ICsJc3RydWN0IGt2ZWMgaXY7Cj4+ICsJc3NpemVfdCBtc2dsZW47Cj4+ICsKPj4gKwlm b3IgKDs7KSB7Cj4+ICsJCWl2Lmlvdl9iYXNlID0gcXNyLT5yZWN2X2J1ZjsKPj4gKwkJaXYuaW92 X2xlbiA9IHFzci0+cmVjdl9idWZfc2l6ZTsKPj4gKwo+PiArCQltdXRleF9sb2NrKCZxc3ItPnFz cl9sb2NrKTsKPj4gKwkJaWYgKHFzci0+c2spCj4+ICsJCQltc2dsZW4gPSBrZXJuZWxfcmVjdm1z Zyhxc3ItPnNrLCAmbXNnLCAmaXYsIDEsCj4+ICsJCQkJCQlpdi5pb3ZfbGVuLCBNU0dfRE9OVFdB SVQpOwo+PiArCQllbHNlCj4+ICsJCQltc2dsZW4gPSAtRVBJUEU7Cj4+ICsJCW11dGV4X3VubG9j aygmcXNyLT5xc3JfbG9jayk7Cj4+ICsKPj4gKwkJaWYgKG1zZ2xlbiA9PSAtRUFHQUlOKQo+PiAr CQkJYnJlYWs7Cj4+ICsKPj4gKwkJaWYgKG1zZ2xlbiA8IDApIHsKPj4gKwkJCXByX2VycigicW1p IHJlY3Ztc2cgZmFpbGVkOiAlemRcbiIsIG1zZ2xlbik7Cj4+ICsJCQlicmVhazsKPj4gKwkJfQo+ PiArCj4+ICsJCXFzcl9yZWN2X2N0cmxfcGt0KCZzcSwgcXNyLT5yZWN2X2J1ZiwgbXNnbGVuKTsK Pj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHFzcl9kYXRhX3JlYWR5KHN0cnVjdCBz b2NrICpzaykKPj4gK3sKPj4gKwlyZWFkX2xvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsK Pj4gKwlxdWV1ZV93b3JrKHFzci0+d3EsICZxc3ItPndvcmspOwo+PiArCXJlYWRfdW5sb2NrX2Jo KCZzay0+c2tfY2FsbGJhY2tfbG9jayk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90IG5h bWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICsJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPj4gK3sKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJbXV0ZXhf bG9jaygmcXNyLT5xc3JfbG9jayk7Cj4+ICsJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgUVNS X05BTUUpOwo+PiArCW11dGV4X3VubG9jaygmcXNyLT5xc3JfbG9jayk7Cj4+ICsKPj4gKwlyZXR1 cm4gcmV0Owo+PiArfQo+PiArc3RhdGljIERFVklDRV9BVFRSX1JPKG5hbWUpOwo+PiArCj4+ICtz dGF0aWMgc3NpemVfdCBsb29rdXBzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+PiArCQkJICAg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4+ICt7Cj4+ICsJc3Ry dWN0IHFzcl9pbmZvICpsb29rdXA7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwltdXRleF9s b2NrKCZxc3ItPnFzcl9sb2NrKTsKPj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvb2t1cCwgJnFz ci0+bG9va3VwcywgbGlzdCkgewo+PiArCQlyZXQgKz0gc3ByaW50ZihidWYsICJzZXJ2aWNlOjB4 JTA0eCBpbnN0YW5jZToweCUwNHggbm9kZTolMDRkIHBvcnQ6JTA0ZFxuIiwKPj4gKwkJCQkJbG9v a3VwLT5zZXJ2aWNlLAo+PiArCQkJCQlsb29rdXAtPmluc3RhbmNlLAo+PiArCQkJCQlsb29rdXAt PnNlcnZlci5ub2RlLAo+PiArCQkJCQlsb29rdXAtPnNlcnZlci5wb3J0KTsKPj4gKwl9Cj4+ICsJ bXV0ZXhfdW5sb2NrKCZxc3ItPnFzcl9sb2NrKTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9 Cj4+ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8obG9va3Vwcyk7Cj4+ICsKPj4gK3N0YXRpYyBzc2l6 ZV90IHNlcnZpY2VzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+PiArCQkJICAgICBzdHJ1Y3Qg ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPj4gKwkJCQkgY2hhciAqYnVmKQo+PiArewo+PiArCXN0 cnVjdCBxc3JfaW5mbyAqc3ZjOwo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJbXV0ZXhfbG9j aygmcXNyLT5xc3JfbG9jayk7Cj4+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShzdmMsICZxc3ItPnNl cnZpY2VzLCBsaXN0KSB7Cj4+ICsJCXJldCArPSBzcHJpbnRmKGJ1ZiwgInNlcnZpY2U6MHglMDR4 IGluc3RhbmNlOjB4JTA0eCBub2RlOiUwNGQgcG9ydDolMDRkXG4iLAo+PiArCQkJCQlzdmMtPnNl cnZpY2UsCj4+ICsJCQkJCXN2Yy0+aW5zdGFuY2UsCj4+ICsJCQkJCXN2Yy0+c2VydmVyLm5vZGUs Cj4+ICsJCQkJCXN2Yy0+c2VydmVyLnBvcnQpOwo+PiArCX0KPj4gKwltdXRleF91bmxvY2soJnFz ci0+cXNyX2xvY2spOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gK3N0YXRpYyBERVZJ Q0VfQVRUUl9STyhzZXJ2aWNlcyk7Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpx c3JfYXR0cnNbXSA9IHsKPj4gKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAo+PiArCSZkZXZfYXR0cl9s b29rdXBzLmF0dHIsCj4+ICsJJmRldl9hdHRyX3NlcnZpY2VzLmF0dHIsCj4+ICsJTlVMTCwKPj4g K307Cj4+ICtBVFRSSUJVVEVfR1JPVVBTKHFzcik7Cj4+ICsKPj4gKy8qIEludGVyZmFjZSBjbGFz cyBpbmZyYXN0cnVjdHVyZS4gKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgcXNyX2NsYXNzID0g ewo+PiArCS5uYW1lID0gUVNSX05BTUUsCj4+ICsJLmRldl9ncm91cHMgPSBxc3JfZ3JvdXBzLAo+ PiArfTsKPj4gKwo+PiArc3RhdGljIGludCBxc3JfZGV2X2NyZWF0ZSh2b2lkKQo+PiArewo+PiAr CWludCByZXQgPSAtRU5PTUVNOwo+PiArCj4+ICsJcXNyID0ga3phbGxvYyhzaXplb2YoKnFzciks IEdGUF9LRVJORUwpOwo+PiArCWlmICghcXNyKQo+PiArCQlnb3RvIG91dDsKPj4gKwo+PiArCUlO SVRfTElTVF9IRUFEKCZxc3ItPmxvb2t1cHMpOwo+PiArCUlOSVRfTElTVF9IRUFEKCZxc3ItPnNl cnZpY2VzKTsKPj4gKwo+PiArCUlOSVRfV09SSygmcXNyLT53b3JrLCBxc3JfcmVjdl93b3JrKTsK Pj4gKwo+PiArCXFzci0+cmVjdl9idWZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcXJ0cl9jdHJsX3Br dCk7Cj4+ICsJcXNyLT5yZWN2X2J1ZiA9IGt6YWxsb2MocXNyLT5yZWN2X2J1Zl9zaXplLCBHRlBf S0VSTkVMKTsKPj4gKwlpZiAoIXFzci0+cmVjdl9idWYpCj4+ICsJCWdvdG8gb3V0X3Fzcl9mcmVl Owo+PiArCj4+ICsJcXNyLT53cSA9IGFsbG9jX3dvcmtxdWV1ZSgicXNyX3dxIiwgV1FfVU5CT1VO RCwgMSk7Cj4+ICsJaWYgKCFxc3ItPndxKQo+PiArCQlnb3RvIG91dF9yZWN2X2J1Zl9mcmVlOwo+ PiArCj4+ICsJZGV2aWNlX2luaXRpYWxpemUoJnFzci0+ZGV2KTsKPj4gKwlxc3ItPmRldi5kZXZ0 ID0gTUtERVYocXNyX21ham9yLCAwKTsKPj4gKwlxc3ItPmRldi5jbGFzcyA9ICZxc3JfY2xhc3M7 Cj4+ICsJZGV2X3NldF9kcnZkYXRhKCZxc3ItPmRldiwgcXNyKTsKPj4gKwo+PiArCXJldCA9IGRl dl9zZXRfbmFtZSgmcXNyLT5kZXYsIFFTUl9OQU1FKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXBy X2VycigiZGV2aWNlIG5hbWUgJXMgc2V0IGZhaWxlZCwgJWQiLCBRU1JfTkFNRSwgcmV0KTsKPj4g KwkJZ290byBvdXRfcmVjdl9idWZfZnJlZTsKPj4gKwl9Cj4+ICsKPj4gKwltdXRleF9pbml0KCZx c3ItPnFzcl9sb2NrKTsKPj4gKwo+PiArCXJldCA9IGRldmljZV9hZGQoJnFzci0+ZGV2KTsKPj4g KwlpZiAocmV0KQo+PiArCQlnb3RvIG91dF93cV9kZXN0cm95Owo+PiArCj4+ICsJcmV0dXJuIHJl dDsKPj4gKwo+PiArb3V0X3dxX2Rlc3Ryb3k6Cj4+ICsJZGVzdHJveV93b3JrcXVldWUocXNyLT53 cSk7Cj4+ICtvdXRfcmVjdl9idWZfZnJlZToKPj4gKwlrZnJlZShxc3ItPnJlY3ZfYnVmKTsKPj4g K291dF9xc3JfZnJlZToKPj4gKwlrZnJlZShxc3IpOwo+PiArb3V0Ogo+PiArCXJldHVybiByZXQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBxc3Jfb3BzIHFzcl9oYW5kbGVfb3BzID0gewo+PiArCS5u ZXdfc2VydmVyID0gcXNyX25ld19zZXJ2ZXIsCj4+ICsJLm5ld19sb29rdXAgPSBxc3JfbmV3X2xv b2t1cCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpxc3Jfc29ja19jcmVh dGUodm9pZCkKPj4gK3sKPj4gKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwo+PiArCXN0cnVjdCBzb2Nr YWRkciBhZGRyOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBzb2NrX2NyZWF0ZV9rZXJu KCZpbml0X25ldCwgQUZfUUlQQ1JUUiwgU09DS19ER1JBTSwKPj4gKwkJCSAgICAgICBQRl9RSVBD UlRSLCAmc29jayk7Cj4+ICsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIEVSUl9QVFIo cmV0KTsKPj4gKwo+PiArCXFzci0+c3Euc3FfZmFtaWx5ID0gQUZfUUlQQ1JUUjsKPj4gKwlxc3It PnNxLnNxX25vZGUgPSBnZXRfcXJ0cl9sb2NhbF9uaWQoKTsKPj4gKwlxc3ItPnNxLnNxX3BvcnQg PSBRUlRSX1BPUlRfQ1RSTDsKPj4gKwlxc3ItPm9wcyA9ICZxc3JfaGFuZGxlX29wczsKPj4gKwo+ PiArCWlmIChzb2NrLT5vcHMtPmJpbmQpIHsKPj4gKwkJbWVtY3B5KCZhZGRyLCAmcXNyLT5zcSwg c2l6ZW9mKHFzci0+c3EpKTsKPj4gKwkJcmV0ID0gc29jay0+b3BzLT5iaW5kKHNvY2ssICZhZGRy LCBzaXplb2YoYWRkcikpOwo+PiArCQlpZiAocmV0KSB7Cj4+ICsJCQlwcl9lcnIoIkZhaWxlZCB0 byBiaW5kIHNvY2tldCBhZGRyZXNzIG5vZGU6MHgleCBwb3J0OjB4JXguXG4iLAo+PiArCQkJICAg ICAgIHFzci0+c3Euc3Ffbm9kZSwgcXNyLT5zcS5zcV9wb3J0KTsKPj4gKwkJCWdvdG8gZXJyX2Jp bmQ7Cj4+ICsJCX0KPj4gKwkJcHJfZGVidWcoInFzciByb3V0ZXIgcG9ydCBiaW5kZWQgc3VjY2Vz c2Z1bGx5LlxuIik7Cj4+ICsJfQo+PiArCj4+ICsJc29jay0+c2stPnNrX3VzZXJfZGF0YSA9IHFz cjsKPj4gKwlzb2NrLT5zay0+c2tfZGF0YV9yZWFkeSA9IHFzcl9kYXRhX3JlYWR5Owo+PiArCXNv Y2stPnNrLT5za19lcnJvcl9yZXBvcnQgPSBxc3JfZGF0YV9yZWFkeTsKPj4gKwlzb2NrLT5zay0+ c2tfc25kdGltZW8gPSBIWiAqIDEwOwo+PiArCj4+ICsJcmV0dXJuIHNvY2s7Cj4+ICsKPj4gK2Vy cl9iaW5kOgo+PiArCXNvY2tfcmVsZWFzZShzb2NrKTsKPj4gKwlyZXR1cm4gTlVMTDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBxc3JfcmVsZWFzZSh2b2lkKQo+PiArewo+PiArCXNvY2tfcmVs ZWFzZShxc3ItPnNrKTsKPj4gKwo+PiArCWtmcmVlKHFzci0+cmVjdl9idWYpOwo+PiArCj4+ICsJ ZGVzdHJveV93b3JrcXVldWUocXNyLT53cSk7Cj4+ICsKPj4gKwlrZnJlZShxc3IpOwo+PiArCj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVy YXRpb25zIHFzcl9mb3BzID0gewo+PiArCS5vd25lciA9IFRISVNfTU9EVUxFLAo+PiArfTsKPj4g Kwo+PiArc3RhdGljIGludCBfX2luaXQgcXNyX2luaXQodm9pZCkKPj4gK3sKPj4gKwlpbnQgcmV0 Owo+PiArCXN0YXRpYyBjb25zdCBjaGFyIG5hbWVbXSA9IFFTUl9OQU1FOwo+PiArCXN0cnVjdCBj ZGV2ICpjZGV2ID0gTlVMTDsKPj4gKwlkZXZfdCBydGRldjsKPj4gKwo+PiArCS8qIDEuIEFsbG9j YXRlIGNoYXJhY3RlciBkZXZpY2UgcmVnaW9uLiAqLwo+PiArCXJldCA9IGFsbG9jX2NocmRldl9y ZWdpb24oJnJ0ZGV2LCAwLCAxLCBuYW1lKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXByX2Vycigi ZmFpbGVkIHRvIGFsbG9jIGNoYXJkZXYgcmVnaW9uXG4iKTsKPj4gKwkJZ290byBvdXQ7Cj4+ICsJ fQo+PiArCj4+ICsJLyogMi4gQWxsb2NhdGUsIGluaXRpYXRlIGFuZCBhZGQgY2Rldi4gKi8KPj4g KwlyZXQgPSAtRU5PTUVNOwo+PiArCWNkZXYgPSBjZGV2X2FsbG9jKCk7Cj4+ICsJaWYgKCFjZGV2 KSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jIGNkZXZcbiIpOwo+PiArCQlnb3RvIG91 dF91bnJlZ2lzdGVyOwo+PiArCX0KPj4gKwo+PiArCWNkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7 Cj4+ICsJY2Rldi0+b3BzID0gJnFzcl9mb3BzOwo+PiArCWtvYmplY3Rfc2V0X25hbWUoJmNkZXYt PmtvYmosICIlcyIsIG5hbWUpOwo+PiArCj4+ICsJcmV0ID0gY2Rldl9hZGQoY2RldiwgcnRkZXYs IDEpOwo+PiArCWlmIChyZXQpCj4+ICsJCWdvdG8gb3V0X3B1dDsKPj4gKwo+PiArCXFzcl9tYWpv ciA9IE1BSk9SKHJ0ZGV2KTsKPj4gKwlxc3JfY2RldiA9IGNkZXY7Cj4+ICsKPj4gKwkvKiAzLiBS ZWdpc3RlciBjbGFzcy4gKi8KPj4gKwlyZXQgPSBjbGFzc19yZWdpc3RlcigmcXNyX2NsYXNzKTsK Pj4gKwlpZiAocmV0KSB7Cj4+ICsJCXByX2VycigiY2xhc3NfcmVnaXN0ZXIgZmFpbGVkIGZvciBx cnRyIHJvdXRlXG4iKTsKPj4gKwkJZ290byBvdXRfY2Rldl9kZWw7Cj4+ICsJfQo+PiArCj4+ICsJ LyogNC4gQ3JlYXRlIGEgcXNyIGRldmljZS4gKi8KPj4gKwlpZiAocXNyX2Rldl9jcmVhdGUoKSkK Pj4gKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9jbGFzczsKPj4gKwo+PiArCS8qIDUuIENyZWF0ZSBh IHFydHIgc29ja2V0IGFuZCBiaW5kIGl0IHRvIFJvdXRlciBwb3J0LiAqLwo+PiArCXFzci0+c2sg PSBxc3Jfc29ja19jcmVhdGUoKTsKPj4gKwlpZiAoIXFzci0+c2spCj4+ICsJCWdvdG8gb3V0X3Fz cl9kZXZfZGVsOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK291dF9xc3JfZGV2X2RlbDoK Pj4gKwlrZnJlZShxc3IpOwo+PiArb3V0X3VucmVnaXN0ZXJfY2xhc3M6Cj4+ICsJY2xhc3NfdW5y ZWdpc3RlcigmcXNyX2NsYXNzKTsKPj4gK291dF9jZGV2X2RlbDoKPj4gKwljZGV2X2RlbChxc3Jf Y2Rldik7Cj4+ICtvdXRfcHV0Ogo+PiArCWtvYmplY3RfcHV0KCZjZGV2LT5rb2JqKTsKPj4gK291 dF91bnJlZ2lzdGVyOgo+PiArCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihydGRldiwgMSk7Cj4+ ICtvdXQ6Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gK3N1YnN5c19pbml0Y2FsbChxc3JfaW5p dCk7Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBxc3JfZXhpdCh2b2lkKQo+PiArewo+PiAr CXFzcl9yZWxlYXNlKCk7Cj4+ICsJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKHFzcl9t YWpvciwgMCksIDEpOwo+PiArCWNkZXZfZGVsKHFzcl9jZGV2KTsKPj4gKwljbGFzc191bnJlZ2lz dGVyKCZxc3JfY2xhc3MpOwo+PiArfQo+PiArbW9kdWxlX2V4aXQocXNyX2V4aXQpOwo+PiArCj4+ ICtNT0RVTEVfQVVUSE9SKCJXYW5nIFdlbmh1Iik7Cj4+ICtNT0RVTEVfQUxJQVMoIlFSVFI6IiBR U1JfTkFNRSk7Cj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlF1YWxjb21tIElQQyBSb3V0ZXIgU2Vy dmljZSBSb3V0ZSBTdXBwb3J0Iik7Cj4+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4+IC0t IAo+PiAyLjE3LjEKPj4gCg0KDQo=