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=-17.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 52D57C63798 for ; Fri, 27 Nov 2020 18:26:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 75CFB2224B for ; Fri, 27 Nov 2020 18:26:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="VVFVzGNZ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732543AbgK0S0g (ORCPT ); Fri, 27 Nov 2020 13:26:36 -0500 Received: from smtp-fw-33001.amazon.com ([207.171.190.10]:24854 "EHLO smtp-fw-33001.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726250AbgK0S0f (ORCPT ); Fri, 27 Nov 2020 13:26:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1606501590; x=1638037590; h=to:cc:references:from:subject:message-id:date: mime-version:in-reply-to:content-transfer-encoding; bh=ym1a40cA3sfFACqjWbKa8VG9le0R+UXnWig063o8dgU=; b=VVFVzGNZrrs2NPV/BhHpmpdZbnLovY4b4nmPbKdl8HwLAb89krfZXYQw l27Mi07q+fjulDoieV2mo7uC955gtojA7mA0RI++yVmdO3Gyrs6UwLf4c AapQmWUcd6qozbQKy6uiL7d4UqrYqcNe69Ze7VYmYa1HRFbKE49mdm4Yh U=; X-IronPort-AV: E=Sophos;i="5.78,375,1599523200"; d="scan'208";a="98545117" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-2b-baacba05.us-west-2.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-33001.sea14.amazon.com with ESMTP; 27 Nov 2020 18:26:23 +0000 Received: from EX13D08EUB004.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-2b-baacba05.us-west-2.amazon.com (Postfix) with ESMTPS id 7D6D9A1DD5; Fri, 27 Nov 2020 18:26:20 +0000 (UTC) Received: from 4c32759f87cf.ant.amazon.com (10.43.162.53) by EX13D08EUB004.ant.amazon.com (10.43.166.158) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 27 Nov 2020 18:26:06 +0000 To: Dmitry Safonov <0x7f454c46@gmail.com>, Alexander Graf CC: Mike Rapoport , Christian Borntraeger , "Jason A. Donenfeld" , Jann Horn , Willy Tarreau , "MacCarthaigh, Colm" , Andy Lutomirski , "Theodore Y. Ts'o" , Eric Biggers , "open list:DOCUMENTATION" , kernel list , "Woodhouse, David" , "bonzini@gnu.org" , "Singh, Balbir" , "Weiss, Radu" , "oridgar@gmail.com" , "ghammer@redhat.com" , Jonathan Corbet , Greg Kroah-Hartman , "Michael S. Tsirkin" , Qemu Developers , KVM list , Michal Hocko , "Rafael J. Wysocki" , Pavel Machek , Linux API , "mpe@ellerman.id.au" , linux-s390 , "areber@redhat.com" , Pavel Emelyanov , Andrey Vagin , Pavel Tikhomirov , "gil@azul.com" , "asmehra@redhat.com" , "dgunigun@redhat.com" , "vijaysun@ca.ibm.com" , "Eric W. Biederman" References: <3E05451B-A9CD-4719-99D0-72750A304044@amazon.com> <300d4404-3efe-880e-ef30-692eabbff5f7@de.ibm.com> <20201119173800.GD8537@kernel.org> <1cdb6fac-0d50-3399-74a6-24c119ebbaa5@amazon.de> <106f56ca-49bc-7cad-480f-4b26656e90ce@gmail.com> From: "Catangiu, Adrian Costin" Subject: [PATCH v3] drivers/virt: vmgenid: add vm generation id driver Message-ID: <96625ce2-66c6-34b8-ef81-7c17c05b4c7a@amazon.com> Date: Fri, 27 Nov 2020 20:26:02 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Thunderbird/78.4.3 MIME-Version: 1.0 In-Reply-To: <106f56ca-49bc-7cad-480f-4b26656e90ce@gmail.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US X-Originating-IP: [10.43.162.53] X-ClientProxiedBy: EX13d09UWA003.ant.amazon.com (10.43.160.227) To EX13D08EUB004.ant.amazon.com (10.43.166.158) Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org LSBCYWNrZ3JvdW5kCgpUaGUgVk0gR2VuZXJhdGlvbiBJRCBpcyBhIGZlYXR1cmUgZGVmaW5lZCBi eSBNaWNyb3NvZnQgKHBhcGVyOgpodHRwOi8vZ28ubWljcm9zb2Z0LmNvbS9md2xpbmsvP0xpbmtJ ZD0yNjA3MDkpIGFuZCBzdXBwb3J0ZWQgYnkKbXVsdGlwbGUgaHlwZXJ2aXNvciB2ZW5kb3JzLgoK VGhlIGZlYXR1cmUgaXMgcmVxdWlyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGFw cHMgdGhhdCB3b3JrCndpdGggbG9jYWwgY29waWVzL2NhY2hlcyBvZiB3b3JsZC11bmlxdWUgZGF0 YSBzdWNoIGFzIHJhbmRvbSB2YWx1ZXMsCnV1aWRzLCBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcg Y291bnRlcnMsIGV0Yy4KU3VjaCBhcHBzIGNhbiBiZSBuZWdhdGl2ZWx5IGFmZmVjdGVkIGJ5IFZN IHNuYXBzaG90dGluZyB3aGVuIHRoZSBWTQppcyBlaXRoZXIgY2xvbmVkIG9yIHJldHVybmVkIHRv IGFuIGVhcmxpZXIgcG9pbnQgaW4gdGltZS4KClRoZSBWTSBHZW5lcmF0aW9uIElEIGlzIGEgc2lt cGxlIGNvbmNlcHQgbWVhbnQgdG8gYWxsZXZpYXRlIHRoZSBpc3N1ZQpieSBwcm92aWRpbmcgYSB1 bmlxdWUgSUQgdGhhdCBjaGFuZ2VzIGVhY2ggdGltZSB0aGUgVk0gaXMgcmVzdG9yZWQKZnJvbSBh IHNuYXBzaG90LiBUaGUgaHcgcHJvdmlkZWQgVVVJRCB2YWx1ZSBjYW4gYmUgdXNlZCB0bwpkaWZm ZXJlbnRpYXRlIGJldHdlZW4gVk1zIG9yIGRpZmZlcmVudCBnZW5lcmF0aW9ucyBvZiB0aGUgc2Ft ZSBWTS4KCi0gUHJvYmxlbQoKVGhlIFZNIEdlbmVyYXRpb24gSUQgaXMgZXhwb3NlZCB0aHJvdWdo IGFuIEFDUEkgZGV2aWNlIGJ5IG11bHRpcGxlCmh5cGVydmlzb3IgdmVuZG9ycyBidXQgbmVpdGhl ciB0aGUgdmVuZG9ycyBvciB1cHN0cmVhbSBMaW51eCBoYXZlIG5vCmRlZmF1bHQgZHJpdmVyIGZv ciBpdCBsZWF2aW5nIHVzZXJzIHRvIGZlbmQgZm9yIHRoZW1zZWx2ZXMuCgpGdXJ0aGVybW9yZSwg c2ltcGx5IGZpbmRpbmcgb3V0IGFib3V0IGEgVk0gZ2VuZXJhdGlvbiBjaGFuZ2UgaXMgb25seQp0 aGUgc3RhcnRpbmcgcG9pbnQgb2YgYSBwcm9jZXNzIHRvIHJlbmV3IGludGVybmFsIHN0YXRlcyBv ZiBwb3NzaWJseQptdWx0aXBsZSBhcHBsaWNhdGlvbnMgYWNyb3NzIHRoZSBzeXN0ZW0uIFRoaXMg cHJvY2VzcyBjb3VsZCBiZW5lZml0CmZyb20gYSBkcml2ZXIgdGhhdCBwcm92aWRlcyBhbiBpbnRl cmZhY2UgdGhyb3VnaCB3aGljaCBvcmNoZXN0cmF0aW9uCmNhbiBiZSBlYXNpbHkgZG9uZS4KCi0g U29sdXRpb24KClRoaXMgcGF0Y2ggaXMgYSBkcml2ZXIgdGhhdCBleHBvc2VzIGEgbW9ub3Rvbmlj IGluY3JlbWVudGFsIFZpcnR1YWwKTWFjaGluZSBHZW5lcmF0aW9uIHUzMiBjb3VudGVyIHZpYSBh IGNoYXItZGV2IEZTIGludGVyZmFjZS4gVGhlIEZTCmludGVyZmFjZSBwcm92aWRlcyBzeW5jIGFu ZCBhc3luYyBWbUdlbiBjb3VudGVyIHVwZGF0ZXMgbm90aWZpY2F0aW9ucy4KSXQgYWxzbyBwcm92 aWRlcyBWbUdlbiBjb3VudGVyIHJldHJpZXZhbCBhbmQgY29uZmlybWF0aW9uIG1lY2hhbmlzbXMu CgpUaGUgZ2VuZXJhdGlvbiBjb3VudGVyIGFuZCB0aGUgaW50ZXJmYWNlIHRocm91Z2ggd2hpY2gg aXQgaXMgZXhwb3NlZAphcmUgYXZhaWxhYmxlIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBhY3BpIGRl dmljZSBwcmVzZW50LgoKV2hlbiB0aGUgZGV2aWNlIGlzIHByZXNlbnQsIHRoZSBodyBwcm92aWRl ZCBVVUlEIGlzIG5vdCBleHBvc2VkIHRvCnVzZXJzcGFjZSwgaXQgaXMgaW50ZXJuYWxseSB1c2Vk IGJ5IHRoZSBkcml2ZXIgdG8ga2VlcCBhY2NvdW50aW5nIGZvcgp0aGUgZXhwb3NlZCBWbUdlbiBj b3VudGVyLiBUaGUgY291bnRlciBzdGFydHMgZnJvbSB6ZXJvIHdoZW4gdGhlCmRyaXZlciBpcyBp bml0aWFsaXplZCBhbmQgbW9ub3RvbmljYWxseSBpbmNyZW1lbnRzIGV2ZXJ5IHRpbWUgdGhlIGh3 ClVVSUQgY2hhbmdlcyAodGhlIFZNIGdlbmVyYXRpb24gY2hhbmdlcykuCk9uIGVhY2ggaHcgVVVJ RCBjaGFuZ2UsIHRoZSBuZXcgaHlwZXJ2aXNvci1wcm92aWRlZCBVVUlEIGlzIGFsc28gZmVkCnRv IHRoZSBrZXJuZWwgUk5HLgoKSWYgdGhlcmUgaXMgbm8gYWNwaSB2bWdlbmlkIGRldmljZSBwcmVz ZW50LCB0aGUgZ2VuZXJhdGlvbiBjaGFuZ2VzIGFyZQpub3QgZHJpdmVuIGJ5IGh3IHZtZ2VuaWQg ZXZlbnRzIGJ1dCBjYW4gYmUgZHJpdmVuIGJ5IHNvZnR3YXJlIHRocm91Z2gKYSBkZWRpY2F0ZWQg ZHJpdmVyIGlvY3RsLgoKVGhpcyBwYXRjaCBidWlsZHMgb24gdG9wIG9mIE9yIElkZ2FyIDxvcmlk Z2FyQGdtYWlsLmNvbT4ncyBwcm9wb3NhbApodHRwczovL2xrbWwub3JnL2xrbWwvMjAxOC8zLzEv NDk4CgotIEZ1dHVyZSBpbXByb3ZlbWVudHMKCklkZWFsbHkgd2Ugd291bGQgd2FudCB0aGUgZHJp dmVyIHRvIHJlZ2lzdGVyIGl0c2VsZiBiYXNlZCBvbiBkZXZpY2VzJwpfQ0lEIGFuZCBub3QgX0hJ RCwgYnV0IHVuZm9ydHVuYXRlbHkgSSBjb3VsZG4ndCBmaW5kIGEgd2F5IHRvIGRvIHRoYXQuClRo ZSBwcm9ibGVtIGlzIHRoYXQgQUNQSSBkZXZpY2UgbWF0Y2hpbmcgaXMgZG9uZSBieQonX19hY3Bp X21hdGNoX2RldmljZSgpJyB3aGljaCBleGNsdXNpdmVseSBsb29rcyBhdAonYWNwaV9oYXJkd2Fy ZV9pZCAqaHdpZCcuCgpUaGVyZSBpcyBhIHBhdGggZm9yIHBsYXRmb3JtIGRldmljZXMgdG8gbWF0 Y2ggb24gX0NJRCB3aGVuIF9ISUQgaXMKJ1BSUDAwMDEnIC0gYnV0IHRoaXMgaXMgbm90IHRoZSBj YXNlIGZvciB0aGUgUWVtdSB2bWdlbmlkIGRldmljZS4KCkd1aWRhbmNlIGFuZCBoZWxwIGhlcmUg d291bGQgYmUgZ3JlYXRseSBhcHByZWNpYXRlZC4KClNpZ25lZC1vZmYtYnk6IEFkcmlhbiBDYXRh bmdpdSA8YWNhdGFuQGFtYXpvbi5jb20+CgotLS0KCnYxIC0+IHYyOgoKwqAgLSBleHBvc2UgdG8g dXNlcnNwYWNlIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHUzMiBWbSBHZW4gQ291bnRlcgrC oMKgwqAgaW5zdGVhZCBvZiB0aGUgaHcgVm1HZW4gVVVJRArCoCAtIHNpbmNlIHRoZSBody9oeXBl cnZpc29yLXByb3ZpZGVkIDEyOC1iaXQgVVVJRCBpcyBub3QgcHVibGljCsKgwqDCoCBhbnltb3Jl LCBhZGQgaXQgdG8gdGhlIGtlcm5lbCBSTkcgYXMgZGV2aWNlIHJhbmRvbW5lc3MKwqAgLSBpbnNl cnQgZHJpdmVyIHBhZ2UgY29udGFpbmluZyBWbSBHZW4gQ291bnRlciBpbiB0aGUgdXNlciB2bWEg aW4KwqDCoMKgIHRoZSBkcml2ZXIncyBtbWFwIGhhbmRsZXIgaW5zdGVhZCBvZiB1c2luZyBhIGZh dWx0IGhhbmRsZXIKwqAgLSB0dXJuIGRyaXZlciBpbnRvIGEgbWlzYyBkZXZpY2UgZHJpdmVyIHRv IGF1dG8tY3JlYXRlIC9kZXYvdm1nZW5pZArCoCAtIGNoYW5nZSBpb2N0bCBhcmcgdG8gYXZvaWQg bGVha2luZyBrZXJuZWwgc3RydWN0cyB0byB1c2Vyc3BhY2UKwqAgLSB1cGRhdGUgZG9jdW1lbnRh dGlvbgrCoCAtIHZhcmlvdXMgbml0cwrCoCAtIHJlYmFzZSBvbiB0b3Agb2YgbGludXMgbGF0ZXN0 Cgp2MiAtPiB2MzoKCsKgIC0gc2VwYXJhdGUgdGhlIGNvcmUgZHJpdmVyIGxvZ2ljIGFuZCBpbnRl cmZhY2UsIGZyb20gdGhlIEFDUEkgZGV2aWNlLgrCoMKgwqAgVGhlIEFDUEkgdm1nZW5pZCBkZXZp Y2UgaXMgbm93IG9uZSBwb3NzaWJsZSBiYWNrZW5kLgrCoCAtIGZpeCBpc3N1ZSB3aGVuIHRpbWVv dXQ9MCBpbiBWTUdFTklEX1dBSVRfV0FUQ0hFUlMKwqAgLSBhZGQgbG9ja2luZyB0byBhdm9pZCBy YWNlcyBiZXR3ZWVuIGZzIG9wcyBoYW5kbGVycyBhbmQgaHcgaXJxCsKgwqDCoCBkcml2ZW4gZ2Vu ZXJhdGlvbiB1cGRhdGVzCsKgIC0gY2hhbmdlIFZNR0VOSURfV0FJVF9XQVRDSEVSUyBpb2N0bCBz byBpZiB0aGUgY3VycmVudCBjYWxsZXIgaXMKwqDCoMKgIG91dGRhdGVkIG9yIGEgZ2VuZXJhdGlv biBjaGFuZ2UgaGFwcGVucyB3aGlsZSB3YWl0aW5nICh0aHVzIG1ha2luZwrCoMKgwqAgY3VycmVu dCBjYWxsZXIgb3V0ZGF0ZWQpLCB0aGUgaW9jdGwgcmV0dXJucyAtRUlOVFIgdG8gc2lnbmFsIHRo ZQrCoMKgwqAgdXNlciB0byBoYW5kbGUgZXZlbnQgYW5kIHJldHJ5LiBGaXhlcyBibG9ja2luZyBv biBvbmVzZWxmLgrCoCAtIGFkZCBWTUdFTklEX0ZPUkNFX0dFTl9VUERBVEUgaW9jdGwgY29uZGl0 aW9uZWQgYnkKwqDCoMKgIENBUF9DSEVDS1BPSU5UX1JFU1RPUkUgY2FwYWJpbGl0eSwgdGhyb3Vn aCB3aGljaCBzb2Z0d2FyZSBjYW4gZm9yY2UKwqDCoMKgIGdlbmVyYXRpb24gYnVtcC4KLS0tCsKg RG9jdW1lbnRhdGlvbi92aXJ0L3ZtZ2VuaWQucnN0IHwgMjQwICsrKysrKysrKysrKysrKysrKysr KysrCsKgZHJpdmVycy92aXJ0L0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTcgKysK wqBkcml2ZXJzL3ZpcnQvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCsKgZHJp dmVycy92aXJ0L3ZtZ2VuaWQuY8KgwqDCoMKgwqDCoMKgwqAgfCA0MzUKKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKwqBpbmNsdWRlL3VhcGkvbGludXgvdm1nZW5pZC5o wqDCoCB8wqAgMTQgKysKwqA1IGZpbGVzIGNoYW5nZWQsIDcwNyBpbnNlcnRpb25zKCspCsKgY3Jl YXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vdmlydC92bWdlbmlkLnJzdArCoGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3ZpcnQvdm1nZW5pZC5jCsKgY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvdWFwaS9saW51eC92bWdlbmlkLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Zp cnQvdm1nZW5pZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQvdm1nZW5pZC5yc3QKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhOWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL0Rv Y3VtZW50YXRpb24vdmlydC92bWdlbmlkLnJzdApAQCAtMCwwICsxLDI0MCBAQAorLi4gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworPT09PT09PT09PT09CitWTUdFTklECis9PT09 PT09PT09PT0KKworVGhlIFZNIEdlbmVyYXRpb24gSUQgaXMgYSBmZWF0dXJlIGRlZmluZWQgYnkg TWljcm9zb2Z0IChwYXBlcjoKK2h0dHA6Ly9nby5taWNyb3NvZnQuY29tL2Z3bGluay8/TGlua0lk PTI2MDcwOSkgYW5kIHN1cHBvcnRlZCBieQorbXVsdGlwbGUgaHlwZXJ2aXNvciB2ZW5kb3JzLgor CitUaGUgZmVhdHVyZSBpcyByZXF1aXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkg YXBwcyB0aGF0IHdvcmsKK3dpdGggbG9jYWwgY29waWVzL2NhY2hlcyBvZiB3b3JsZC11bmlxdWUg ZGF0YSBzdWNoIGFzIHJhbmRvbSB2YWx1ZXMsCit1dWlkcywgbW9ub3RvbmljYWxseSBpbmNyZWFz aW5nIGNvdW50ZXJzLCBldGMuCitTdWNoIGFwcHMgY2FuIGJlIG5lZ2F0aXZlbHkgYWZmZWN0ZWQg YnkgVk0gc25hcHNob3R0aW5nIHdoZW4gdGhlIFZNCitpcyBlaXRoZXIgY2xvbmVkIG9yIHJldHVy bmVkIHRvIGFuIGVhcmxpZXIgcG9pbnQgaW4gdGltZS4KKworVGhlIFZNIEdlbmVyYXRpb24gSUQg aXMgYSBzaW1wbGUgY29uY2VwdCBtZWFudCB0byBhbGxldmlhdGUgdGhlIGlzc3VlCitieSBwcm92 aWRpbmcgYSB1bmlxdWUgSUQgdGhhdCBjaGFuZ2VzIGVhY2ggdGltZSB0aGUgVk0gaXMgcmVzdG9y ZWQKK2Zyb20gYSBzbmFwc2hvdC4gVGhlIGh3IHByb3ZpZGVkIFVVSUQgdmFsdWUgY2FuIGJlIHVz ZWQgdG8KK2RpZmZlcmVudGlhdGUgYmV0d2VlbiBWTXMgb3IgZGlmZmVyZW50IGdlbmVyYXRpb25z IG9mIHRoZSBzYW1lIFZNLgorCitUaGUgVk0gR2VuZXJhdGlvbiBJRCBpcyBleHBvc2VkIHRocm91 Z2ggYW4gQUNQSSBkZXZpY2UgYnkgbXVsdGlwbGUKK2h5cGVydmlzb3IgdmVuZG9ycy4gVGhlIGRy aXZlciBmb3IgaXQgbGl2ZXMgYXQKK2BgZHJpdmVycy92aXJ0L3ZtZ2VuaWQuY2BgCisKK1RoZSBg YHZtZ2VuaWRgYCBkcml2ZXIgZXhwb3NlcyBhIG1vbm90b25pYyBpbmNyZW1lbnRhbCBWaXJ0dWFs CitNYWNoaW5lIEdlbmVyYXRpb24gdTMyIGNvdW50ZXIgdmlhIGEgY2hhci1kZXYgRlMgaW50ZXJm YWNlIHRoYXQKK3Byb3ZpZGVzIHN5bmMgYW5kIGFzeW5jIFZtR2VuIGNvdW50ZXIgdXBkYXRlcyBu b3RpZmljYXRpb25zLiBJdCBhbHNvCitwcm92aWRlcyBWbUdlbiBjb3VudGVyIHJldHJpZXZhbCBh bmQgY29uZmlybWF0aW9uIG1lY2hhbmlzbXMuCisKK1RoaXMgY291bnRlciBhbmQgdGhlIGludGVy ZmFjZSB0aHJvdWdoIHdoaWNoIGl0IGlzIGV4cG9zZWQgYXJlCithdmFpbGFibGUgZXZlbiB3aGVu IHRoZXJlIGlzIG5vIGFjcGkgZGV2aWNlIHByZXNlbnQuCisKK1doZW4gdGhlIGRldmljZSBpcyBw cmVzZW50LCB0aGUgaHcgcHJvdmlkZWQgVVVJRCBpcyBub3QgZXhwb3NlZCB0bwordXNlcnNwYWNl LCBpdCBpcyBpbnRlcm5hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB0byBrZWVwIGFjY291bnRpbmcg Zm9yCit0aGUgZXhwb3NlZCBWbUdlbiBjb3VudGVyLiBUaGUgY291bnRlciBzdGFydHMgZnJvbSB6 ZXJvIHdoZW4gdGhlCitkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgYW5kIG1vbm90b25pY2FsbHkgaW5j cmVtZW50cyBldmVyeSB0aW1lIHRoZSBodworVVVJRCBjaGFuZ2VzICh0aGUgVk0gZ2VuZXJhdGlv biBjaGFuZ2VzKS4KK09uIGVhY2ggaHcgVVVJRCBjaGFuZ2UsIHRoZSBuZXcgVVVJRCBpcyBhbHNv IGZlZCB0byB0aGUga2VybmVsIFJORy4KKworSWYgdGhlcmUgaXMgbm8gYWNwaSB2bWdlbmlkIGRl dmljZSBwcmVzZW50LCB0aGUgZ2VuZXJhdGlvbiBjaGFuZ2VzIGFyZQorbm90IGRyaXZlbiBieSBo dyB2bWdlbmlkIGV2ZW50cyBhbmQgdGh1cyBzaG91bGQgYmUgZHJpdmVuIGJ5IHNvZnR3YXJlCit0 aHJvdWdoIGEgZGVkaWNhdGVkIGRyaXZlciBpb2N0bC4KKworRHJpdmVyIGludGVyZmFjZToKKwor YGBvcGVuKClgYDoKK8KgIFdoZW4gdGhlIGRldmljZSBpcyBvcGVuZWQsIGEgY29weSBvZiB0aGUg Y3VycmVudCBWbS1HZW4tSWQgKGNvdW50ZXIpCivCoCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9w ZW4gZmlsZSBkZXNjcmlwdG9yLiBUaGUgZHJpdmVyIG5vdyB0cmFja3MKK8KgIHRoaXMgZmlsZSBh cyBhbiBpbmRlcGVuZGVudCAqd2F0Y2hlciouIFRoZSBkcml2ZXIgdHJhY2tzIGhvdyBtYW55CivC oCB3YXRjaGVycyBhcmUgYXdhcmUgb2YgdGhlIGxhdGVzdCBWbS1HZW4tSWQgY291bnRlciBhbmQg aG93IG1hbnkgb2YKK8KgIHRoZW0gYXJlICpvdXRkYXRlZCo7IG91dGRhdGVkIGJlaW5nIHRob3Nl IHRoYXQgaGF2ZSBsaXZlZCB0aHJvdWdoCivCoCBhIFZtLUdlbi1JZCBjaGFuZ2UgYnV0IG5vdCB5 ZXQgY29uZmlybWVkIHRoZSBuZXcgZ2VuZXJhdGlvbiBjb3VudGVyLgorCitgYHJlYWQoKWBgOgor wqAgUmVhZCBpcyBtZWFudCB0byBwcm92aWRlIHRoZSAqbmV3KiBWTSBnZW5lcmF0aW9uIGNvdW50 ZXIgd2hlbiBhCivCoCBnZW5lcmF0aW9uIGNoYW5nZSB0YWtlcyBwbGFjZS4gVGhlIHJlYWQgb3Bl cmF0aW9uIGJsb2NrcyB1bnRpbCB0aGUKK8KgIGFzc29jaWF0ZWQgY291bnRlciBpcyBubyBsb25n ZXIgdXAgdG8gZGF0ZSAtIHVudGlsIEhXIHZtIGdlbiBpZAorwqAgY2hhbmdlcyAtIGF0IHdoaWNo IHBvaW50IHRoZSBuZXcgY291bnRlciBpcyBwcm92aWRlZC9yZXR1cm5lZC4KK8KgIE5vbmJsb2Nr aW5nIGBgcmVhZCgpYGAgdXNlcyBgYEVBR0FJTmBgIHRvIHNpZ25hbCB0aGF0IHRoZXJlIGlzIG5v CivCoCAqbmV3KiBjb3VudGVyIHZhbHVlIGF2YWlsYWJsZS4gVGhlIGdlbmVyYXRpb24gY291bnRl ciBpcyBjb25zaWRlcmVkCivCoCAqbmV3KiBmb3IgZWFjaCBvcGVuIGZpbGUgZGVzY3JpcHRvciB0 aGF0IGhhc24ndCBjb25maXJtZWQgdGhlIG5ldworwqAgdmFsdWUsIGZvbGxvd2luZyBhIGdlbmVy YXRpb24gY2hhbmdlLiBUaGVyZWZvcmUsIG9uY2UgYSBnZW5lcmF0aW9uCivCoCBjaGFuZ2UgdGFr ZXMgcGxhY2UsIGFsbCBgYHJlYWQoKWBgIGNhbGxzIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHRo ZQorwqAgbmV3IGdlbmVyYXRpb24gY291bnRlciBhbmQgd2lsbCBjb250aW51ZSB0byBkbyBzbyB1 bnRpbCB0aGUKK8KgIG5ldyB2YWx1ZSBpcyBjb25maXJtZWQgYmFjayB0byB0aGUgZHJpdmVyIHRo cm91Z2ggYGB3cml0ZSgpYGAuCivCoCBQYXJ0aWFsIHJlYWRzIGFyZSBub3QgYWxsb3dlZCAtIHJl YWQgYnVmZmVyIG5lZWRzIHRvIGJlIGF0IGxlYXN0CivCoCBgYHNpemVvZih1bnNpZ25lZClgYCBp biBzaXplLgorCitgYHdyaXRlKClgYDoKK8KgIFdyaXRlIGlzIHVzZWQgdG8gY29uZmlybSB0aGUg dXAtdG8tZGF0ZSBWbSBHZW4gY291bnRlciBiYWNrIHRvIHRoZQorwqAgZHJpdmVyLgorwqAgRm9s bG93aW5nIGEgVk0gZ2VuZXJhdGlvbiBjaGFuZ2UsIGFsbCBleGlzdGluZyB3YXRjaGVycyBhcmUg bWFya2VkCivCoCBhcyAqb3V0ZGF0ZWQqLiBFYWNoIGZpbGUgZGVzY3JpcHRvciB3aWxsIG1haW50 YWluIHRoZSAqb3V0ZGF0ZWQqCivCoCBzdGF0dXMgdW50aWwgYSBgYHdyaXRlKClgYCBjb25maXJt cyB0aGUgdXAtdG8tZGF0ZSBjb3VudGVyIGJhY2sgdG8KK8KgIHRoZSBkcml2ZXIuCivCoCBQYXJ0 aWFsIHdyaXRlcyBhcmUgbm90IGFsbG93ZWQgLSB3cml0ZSBidWZmZXIgc2hvdWxkIGJlIGV4YWN0 bHkKK8KgIGBgc2l6ZW9mKHVuc2lnbmVkKWBgIGluIHNpemUuCisKK2BgcG9sbCgpYGA6CivCoCBQ b2xsIGlzIGltcGxlbWVudGVkIHRvIGFsbG93IHBvbGxpbmcgZm9yIGdlbmVyYXRpb24gY291bnRl ciB1cGRhdGVzLgorwqAgU3VjaCB1cGRhdGVzIHJlc3VsdCBpbiBgYEVQT0xMSU5gYCBwb2xsaW5n IHN0YXR1cyB1bnRpbCB0aGUgbmV3CivCoCB1cC10by1kYXRlIGNvdW50ZXIgaXMgY29uZmlybWVk IGJhY2sgdG8gdGhlIGRyaXZlciB0aHJvdWdoIGEKK8KgIGBgd3JpdGUoKWBgLgorCitgYGlvY3Rs KClgYDoKK8KgIFRoZSBkcml2ZXIgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGNvdW50 IG9mIG9wZW4gZmlsZQorwqAgZGVzY3JpcHRvcnMgdGhhdCBoYXZlbid0IGFja25vd2xlZGdlZCBh IGdlbmVyYXRpb24gY291bnRlciB1cGRhdGUuCivCoCBUaGlzIGlzIGV4cG9zZWQgdGhyb3VnaCB0 d28gSU9DVExzOgorCivCoCAtIFZNR0VOSURfR0VUX09VVERBVEVEX1dBVENIRVJTOiBpbW1lZGlh dGVseSByZXR1cm5zIHRoZSBudW1iZXIgb2YKK8KgwqDCoCAqb3V0ZGF0ZWQqIHdhdGNoZXJzIC0g bnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCB3ZXJlIG9wZW4KK8KgwqDCoCBkdXJpbmcg YSBWTSBnZW5lcmF0aW9uIGNoYW5nZSwgYW5kIHdoaWNoIGhhdmUgbm90IHlldCBjb25maXJtZWQg dGhlCivCoMKgwqAgbmV3IGdlbmVyYXRpb24gY291bnRlci4KK8KgIC0gVk1HRU5JRF9XQUlUX1dB VENIRVJTOiBibG9ja3MgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgKm91dGRhdGVkKgorwqDCoMKg IHdhdGNoZXJzLCBvciBpZiBhIGBgdGltZW91dGBgIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB1bnRp bCB0aGUKK8KgwqDCoCB0aW1lb3V0IGV4cGlyZXMuCivCoMKgwqAgSWYgdGhlIGN1cnJlbnQgY2Fs bGVyIGlzICpvdXRkYXRlZCogb3IgYSBnZW5lcmF0aW9uIGNoYW5nZSBoYXBwZW5zCivCoMKgwqAg d2hpbGUgd2FpdGluZyAodGh1cyBtYWtpbmcgY3VycmVudCBjYWxsZXIgKm91dGRhdGVkKiksIHRo ZSBpb2N0bAorwqDCoMKgIHJldHVybnMgYGAtRUlOVFJgYCB0byBzaWduYWwgdGhlIHVzZXIgdG8g aGFuZGxlIGV2ZW50IGFuZCByZXRyeS4KK8KgIC0gVk1HRU5JRF9GT1JDRV9HRU5fVVBEQVRFOiBm b3JjZXMgYSBnZW5lcmF0aW9uIGNvdW50ZXIgYnVtcC4gQ2FuIG9ubHkKK8KgwqDCoCBiZSB1c2Vk IGJ5IHByb2Nlc3NlcyB3aXRoIENBUF9DSEVDS1BPSU5UX1JFU1RPUkUgb3IgQ0FQX1NZU19BRE1J TgorwqDCoMKgIGNhcGFiaWxpdGllcy4KKworYGBtbWFwKClgYDoKK8KgIFRoZSBkcml2ZXIgc3Vw cG9ydHMgYGBQUk9UX1JFQUQsIE1BUF9TSEFSRURgYCBtbWFwcyBvZiBhIHNpbmdsZSBwYWdlCivC oCBpbiBzaXplLiBUaGUgZmlyc3QgNCBieXRlcyBvZiB0aGUgbWFwcGVkIHBhZ2Ugd2lsbCBjb250 YWluIGFuCivCoCB1cC10by1kYXRlIGNvcHkgb2YgdGhlIFZNIGdlbmVyYXRpb24gY291bnRlci4K K8KgIFRoZSBtYXBwZWQgbWVtb3J5IGNhbiBiZSB1c2VkIGFzIGEgbG93LWxhdGVuY3kgZ2VuZXJh dGlvbiBjb3VudGVyCivCoCBwcm9iZSBtZWNoYW5pc20gaW4gY3JpdGljYWwgc2VjdGlvbnMgLSBz ZWUgZXhhbXBsZXMuCisKK2BgY2xvc2UoKWBgOgorwqAgUmVtb3ZlcyB0aGUgZmlsZSBkZXNjcmlw dG9yIGFzIGEgVm0gZ2VuZXJhdGlvbiBjb3VudGVyIHdhdGNoZXIuCisKK0V4YW1wbGUgYXBwbGlj YXRpb24gd29ya2Zsb3dzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxKSBXYXRj aGRvZyB0aHJlYWQgc2ltcGxpZmllZCBleGFtcGxlOjoKKworwqDCoMKgIHZvaWQgd2F0Y2hkb2df dGhyZWFkX2hhbmRsZXIoaW50ICp0aHJlYWRfYWN0aXZlKQorwqDCoMKgIHsKK8KgwqDCoCDCoMKg wqAgdW5zaWduZWQgZ2VuaWQ7CivCoMKgwqAgwqDCoMKgIGludCBmZCA9IG9wZW4oIi9kZXYvdm1n ZW5pZCIsIE9fUkRXUiB8IE9fQ0xPRVhFQywgU19JUlVTUiB8ClNfSVdVU1IpOworCivCoMKgwqAg wqDCoMKgIGRvIHsKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIC8vIHJlYWQgbmV3IGdlbiBJRCAtIGJs b2NrcyB1bnRpbCBWTSBnZW5lcmF0aW9uIGNoYW5nZXMKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIHJl YWQoZmQsICZnZW5pZCwgc2l6ZW9mKGdlbmlkKSk7CisKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIC8v IGJlY2F1c2Ugb2YgVk0gZ2VuZXJhdGlvbiBjaGFuZ2UsIHdlIG5lZWQgdG8gcmVidWlsZCB3b3Js ZAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgcmVzZWVkX2FwcF9lbnYoKTsKKworwqDCoMKgIMKgwqDC oCDCoMKgwqAgLy8gY29uZmlybSB3ZSdyZSBkb25lIGhhbmRsaW5nIGdlbiBJRCB1cGRhdGUKK8Kg wqDCoCDCoMKgwqAgwqDCoMKgIHdyaXRlKGZkLCAmZ2VuaWQsIHNpemVvZihnZW5pZCkpOworwqDC oMKgIMKgwqDCoCB9IHdoaWxlIChhdG9taWNfcmVhZCh0aHJlYWRfYWN0aXZlKSk7CisKK8KgwqDC oCDCoMKgwqAgY2xvc2UoZmQpOworwqDCoMKgIH0KKworMikgQVNZTkMgc2ltcGxpZmllZCBleGFt cGxlOjoKKworwqDCoMKgIHZvaWQgaGFuZGxlX2lvX29uX3ZtZ2VuZmQoaW50IHZtZ2VuZmQpCivC oMKgwqAgeworwqDCoMKgIMKgwqDCoCB1bnNpZ25lZCBnZW5pZDsKKworwqDCoMKgIMKgwqDCoCAv LyByZWFkIG5ldyBnZW4gSUQgLSB3ZSBuZWVkIGl0IHRvIGNvbmZpcm0gd2UndmUgaGFuZGxlZCB1 cGRhdGUKK8KgwqDCoCDCoMKgwqAgcmVhZChmZCwgJmdlbmlkLCBzaXplb2YoZ2VuaWQpKTsKKwor wqDCoMKgIMKgwqDCoCAvLyBiZWNhdXNlIG9mIFZNIGdlbmVyYXRpb24gY2hhbmdlLCB3ZSBuZWVk IHRvIHJlYnVpbGQgd29ybGQKK8KgwqDCoCDCoMKgwqAgcmVzZWVkX2FwcF9lbnYoKTsKKworwqDC oMKgIMKgwqDCoCAvLyBjb25maXJtIHdlJ3JlIGRvbmUgaGFuZGxpbmcgdGhlIGdlbiBJRCB1cGRh dGUKK8KgwqDCoCDCoMKgwqAgd3JpdGUoZmQsICZnZW5pZCwgc2l6ZW9mKGdlbmlkKSk7CivCoMKg wqAgfQorCivCoMKgwqAgaW50IG1haW4oKSB7CivCoMKgwqAgwqDCoMKgIGludCBlcGZkLCB2bWdl bmZkOworwqDCoMKgIMKgwqDCoCBzdHJ1Y3QgZXBvbGxfZXZlbnQgZXY7CisKK8KgwqDCoCDCoMKg wqAgZXBmZCA9IGVwb2xsX2NyZWF0ZShFUE9MTF9RVUVVRV9MRU4pOworCivCoMKgwqAgwqDCoMKg IHZtZ2VuZmQgPSBvcGVuKCIvZGV2L3ZtZ2VuaWQiLAorwqDCoMKgIMKgwqDCoCDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIE9fUkRXUiB8IE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0ssCivCoMKg wqAgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU19JUlVTUiB8IFNfSVdVU1Ip OworCivCoMKgwqAgwqDCoMKgIC8vIHJlZ2lzdGVyIHZtZ2VuaWQgZm9yIHBvbGxpbmcKK8KgwqDC oCDCoMKgwqAgZXYuZXZlbnRzID0gRVBPTExJTjsKK8KgwqDCoCDCoMKgwqAgZXYuZGF0YS5mZCA9 IHZtZ2VuZmQ7CivCoMKgwqAgwqDCoMKgIGVwb2xsX2N0bChlcGZkLCBFUE9MTF9DVExfQURELCB2 bWdlbmZkLCAmZXYpOworCivCoMKgwqAgwqDCoMKgIC8vIHJlZ2lzdGVyIG90aGVyIHBhcnRzIG9m IHlvdXIgYXBwIGZvciBwb2xsaW5nCivCoMKgwqAgwqDCoMKgIC8vIC4uLgorCivCoMKgwqAgwqDC oMKgIHdoaWxlICgxKSB7CivCoMKgwqAgwqDCoMKgIMKgwqDCoCAvLyB3YWl0IGZvciBzb21ldGhp bmcgdG8gZG8uLi4KK8KgwqDCoCDCoMKgwqAgwqDCoMKgIGludCBuZmRzID0gZXBvbGxfd2FpdChl cGZkLCBldmVudHMsCivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgTUFYX0VQT0xMX0VWRU5U U19QRVJfUlVOLAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIEVQT0xMX1JVTl9USU1FT1VU KTsKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIGlmIChuZmRzIDwgMCkgZGllKCJFcnJvciBpbiBlcG9s bF93YWl0ISIpOworCivCoMKgwqAgwqDCoMKgIMKgwqDCoCAvLyBmb3IgZWFjaCByZWFkeSBmZAor wqDCoMKgIMKgwqDCoCDCoMKgwqAgZm9yKGludCBpID0gMDsgaSA8IG5mZHM7IGkrKykgeworwqDC oMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIGludCBmZCA9IGV2ZW50c1tpXS5kYXRhLmZkOworCivC oMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgaWYgKGZkID09IHZtZ2VuZmQpCivCoMKgwqAgwqDC oMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIGhhbmRsZV9pb19vbl92bWdlbmZkKHZtZ2VuZmQpOwor wqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIGVsc2UKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIMKg wqDCoCDCoMKgwqAgaGFuZGxlX3NvbWVfb3RoZXJfcGFydF9vZl90aGVfYXBwKGZkKTsKK8KgwqDC oCDCoMKgwqAgwqDCoMKgIH0KK8KgwqDCoCDCoMKgwqAgfQorCivCoMKgwqAgwqDCoMKgIHJldHVy biAwOworwqDCoMKgIH0KKworMykgTWFwcGVkIG1lbW9yeSBwb2xsaW5nIHNpbXBsaWZpZWQgZXhh bXBsZTo6CisKK8KgwqDCoCAvKgorwqDCoMKgIMKgKiBhcHAvbGlicmFyeSBmdW5jdGlvbiB0aGF0 IHByb3ZpZGVzIGNhY2hlZCBzZWNyZXRzCivCoMKgwqAgwqAqLworwqDCoMKgIGNoYXIgKiBzYWZl X2NhY2hlZF9zZWNyZXQoYXBwX2RhdGFfdCAqYXBwKQorwqDCoMKgIHsKK8KgwqDCoCDCoMKgwqAg Y2hhciAqc2VjcmV0OworwqDCoMKgIMKgwqDCoCB2b2xhdGlsZSB1bnNpZ25lZCAqY29uc3QgZ2Vu aWRfcHRyID0gZ2V0X3ZtZ2VuaWRfbWFwcGluZyhhcHApOworwqDCoMKgIGFnYWluOgorwqDCoMKg IMKgwqDCoCBzZWNyZXQgPSBfX2NhY2hlZF9zZWNyZXQoYXBwKTsKKworwqDCoMKgIMKgwqDCoCBp ZiAodW5saWtlbHkoKmdlbmlkX3B0ciAhPSBhcHAtPmNhY2hlZF9nZW5pZCkpIHsKK8KgwqDCoCDC oMKgwqAgwqDCoMKgIC8vIHJlYnVpbGQgd29ybGQgdGhlbiBjb25maXJtIHRoZSBnZW5pZCB1cGRh dGUgKHRocnUgd3JpdGUpCivCoMKgwqAgwqDCoMKgIMKgwqDCoCByZWJ1aWxkX2NhY2hlcyhhcHAp OworCivCoMKgwqAgwqDCoMKgIMKgwqDCoCBhcHAtPmNhY2hlZF9nZW5pZCA9ICpnZW5pZF9wdHI7 CivCoMKgwqAgwqDCoMKgIMKgwqDCoCBhY2tfdm1nZW5pZF91cGRhdGUoYXBwKTsKKworwqDCoMKg IMKgwqDCoCDCoMKgwqAgZ290byBhZ2FpbjsKK8KgwqDCoCDCoMKgwqAgfQorCivCoMKgwqAgwqDC oMKgIHJldHVybiBzZWNyZXQ7CivCoMKgwqAgfQorCis0KSBPcmNoZXN0cmF0b3Igc2ltcGxpZmll ZCBleGFtcGxlOjoKKworwqDCoMKgIC8qCivCoMKgwqAgwqAqIG9yY2hlc3RyYXRvciAtIG1hbmFn ZXMgbXVsdGlwbGUgYXBwcyBhbmQgbGlicmFyaWVzIHVzZWQgYnkgYSBzZXJ2aWNlCivCoMKgwqAg wqAqIGFuZCB0cmllcyB0byBtYWtlIHN1cmUgYWxsIHNlbnNpdGl2ZSBjb21wb25lbnRzIGdyYWNl ZnVsbHkgaGFuZGxlCivCoMKgwqAgwqAqIFZNIGdlbmVyYXRpb24gY2hhbmdlcy4KK8KgwqDCoCDC oCogRm9sbG93aW5nIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBkZXRlY3Rpb24gb2YgYSBWTSBnZW5l cmF0aW9uIGNoYW5nZS4KK8KgwqDCoCDCoCovCivCoMKgwqAgaW50IGhhbmRsZV92bWdlbl91cGRh dGUoaW50IHZtZ2VuX2ZkLCB1bnNpZ25lZCBuZXdfZ2VuX2lkKQorwqDCoMKgIHsKK8KgwqDCoCDC oMKgwqAgLy8gcGF1c2UgdW50aWwgYWxsIGNvbXBvbmVudHMgaGF2ZSBoYW5kbGVkIGV2ZW50CivC oMKgwqAgwqDCoMKgIHBhdXNlX3NlcnZpY2UoKTsKKworwqDCoMKgIMKgwqDCoCAvLyBjb25maXJt ICp0aGlzKiB3YXRjaGVyIGFzIHVwLXRvLWRhdGUKK8KgwqDCoCDCoMKgwqAgd3JpdGUodm1nZW5f ZmQsICZuZXdfZ2VuX2lkLCBzaXplb2YodW5zaWduZWQpKTsKKworwqDCoMKgIMKgwqDCoCAvLyB3 YWl0IGZvciBhbGwgKm90aGVycyogZm9yIGF0IG1vc3QgNSBzZWNvbmRzLgorwqDCoMKgIMKgwqDC oCBpb2N0bCh2bWdlbl9mZCwgVk1HRU5JRF9XQUlUX1dBVENIRVJTLCA1MDAwKTsKKworwqDCoMKg IMKgwqDCoCAvLyBhbGwgYXBwcyBvbiB0aGUgc3lzdGVtIGhhdmUgcmVidWlsdCB3b3JsZHMKK8Kg wqDCoCDCoMKgwqAgcmVzdW1lX3NlcnZpY2UoKTsKK8KgwqDCoCB9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpcnQvS2NvbmZpZyBiL2RyaXZlcnMvdmlydC9LY29uZmlnCmluZGV4IDgwYzVmOWMxLi41 ZDVmMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnQvS2NvbmZpZworKysgYi9kcml2ZXJzL3Zp cnQvS2NvbmZpZwpAQCAtMTMsNiArMTMsMjMgQEAgbWVudWNvbmZpZyBWSVJUX0RSSVZFUlMKwqAK wqBpZiBWSVJUX0RSSVZFUlMKwqAKK2NvbmZpZyBWTUdFTklECivCoMKgwqAgdHJpc3RhdGUgIlZp cnR1YWwgTWFjaGluZSBHZW5lcmF0aW9uIElEIGRyaXZlciIKK8KgwqDCoCBkZXBlbmRzIG9uIEFD UEkKK8KgwqDCoCBkZWZhdWx0IE4KK8KgwqDCoCBoZWxwCivCoMKgwqAgwqAgVGhpcyBpcyBhIFZp cnR1YWwgTWFjaGluZSBHZW5lcmF0aW9uIElEIGRyaXZlciB3aGljaCBwcm92aWRlcworwqDCoMKg IMKgIGEgdmlydHVhbCBtYWNoaW5lIGdlbmVyYXRpb24gY291bnRlci4gVGhlIGRyaXZlciBleHBv c2VzIEZTIG9wcworwqDCoMKgIMKgIG9uIC9kZXYvdm1nZW5pZCB0aHJvdWdoIHdoaWNoIGl0IGNh biBwcm92aWRlIGluZm9ybWF0aW9uIGFuZAorwqDCoMKgIMKgIG5vdGlmaWNhdGlvbnMgb24gVk0g Z2VuZXJhdGlvbiBjaGFuZ2VzIHRoYXQgaGFwcGVuIG9uIHNuYXBzaG90cworwqDCoMKgIMKgIG9y IGNsb25pbmcuCivCoMKgwqAgwqAgVGhpcyBlbmFibGVzIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFy aWVzIHRoYXQgc3RvcmUgb3IgY2FjaGUKK8KgwqDCoCDCoCBzZW5zaXRpdmUgaW5mb3JtYXRpb24s IHRvIGtub3cgdGhhdCB0aGV5IG5lZWQgdG8gcmVnZW5lcmF0ZSBpdAorwqDCoMKgIMKgIGFmdGVy IHByb2Nlc3MgbWVtb3J5IGhhcyBiZWVuIGV4cG9zZWQgdG8gcG90ZW50aWFsIGNvcHlpbmcuCisK K8KgwqDCoCDCoCBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBo ZXJlOiB0aGUKK8KgwqDCoCDCoCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdm1nZW5pZC4KKwrCoGNv bmZpZyBGU0xfSFZfTUFOQUdFUgrCoMKgwqDCoCB0cmlzdGF0ZSAiRnJlZXNjYWxlIGh5cGVydmlz b3IgbWFuYWdlbWVudCBkcml2ZXIiCsKgwqDCoMKgIGRlcGVuZHMgb24gRlNMX1NPQwpkaWZmIC0t Z2l0IGEvZHJpdmVycy92aXJ0L01ha2VmaWxlIGIvZHJpdmVycy92aXJ0L01ha2VmaWxlCmluZGV4 IGYyODQyNWMuLjg4OWJlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydC9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL3ZpcnQvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACsKgIwrCoArCoG9iai0kKENP TkZJR19GU0xfSFZfTUFOQUdFUinCoMKgwqAgKz0gZnNsX2h5cGVydmlzb3Iubworb2JqLSQoQ09O RklHX1ZNR0VOSUQpwqDCoMKgIMKgwqDCoCArPSB2bWdlbmlkLm8KwqBvYmotecKgwqDCoCDCoMKg wqAgwqDCoMKgIMKgwqDCoCArPSB2Ym94Z3Vlc3QvCsKgCsKgb2JqLSQoQ09ORklHX05JVFJPX0VO Q0xBVkVTKcKgwqDCoCArPSBuaXRyb19lbmNsYXZlcy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmly dC92bWdlbmlkLmMgYi9kcml2ZXJzL3ZpcnQvdm1nZW5pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmM0ZDQ2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpcnQv dm1nZW5pZC5jCkBAIC0wLDAgKzEsNDM1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorLyoKKyAqIFZpcnR1YWwgTWFjaGluZSBHZW5lcmF0aW9uIElEIGRyaXZlcgorICoK KyAqIENvcHlyaWdodCAoQykgMjAxOCBSZWQgSGF0IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQW1hem9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqwqDCoMKgIEF1dGhvcnM6CisgKsKgwqDCoCDCoCBBZHJpYW4gQ2F0YW5naXUgPGFjYXRh bkBhbWF6b24uY29tPgorICrCoMKgwqAgwqAgT3IgSWRnYXIgPG9yaWRnYXJAZ21haWwuY29tPgor ICrCoMKgwqAgwqAgR2FsIEhhbW1lciA8Z2hhbW1lckByZWRoYXQuY29tPgorICoKKyAqLworI2lu Y2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgv cmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvdXVpZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtZ2Vu aWQuaD4KKworI2RlZmluZSBERVZfTkFNRSAidm1nZW5pZCIKK0FDUElfTU9EVUxFX05BTUUoREVW X05BTUUpOworCitzdHJ1Y3QgYWNwaV9kYXRhIHsKK8KgwqDCoCB1dWlkX3QgdXVpZDsKK8KgwqDC oCB2b2lkwqDCoCAqdXVpZF9pb21hcDsKK307CisKK3N0cnVjdCBkcml2ZXJfZGF0YSB7CivCoMKg wqAgdW5zaWduZWQgbG9uZ8KgwqDCoMKgIG1hcF9idWY7CivCoMKgwqAgd2FpdF9xdWV1ZV9oZWFk X3QgcmVhZF93YWl0cTsKK8KgwqDCoCBhdG9taWNfdMKgwqDCoMKgwqDCoMKgwqDCoCBnZW5lcmF0 aW9uX2NvdW50ZXI7CisKK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgIHdhdGNoZXJzOwor wqDCoMKgIGF0b21pY190wqDCoMKgwqDCoMKgwqDCoMKgIG91dGRhdGVkX3dhdGNoZXJzOworwqDC oMKgIHdhaXRfcXVldWVfaGVhZF90IG91dGRhdGVkX3dhaXRxOworwqDCoMKgIHNwaW5sb2NrX3TC oMKgwqDCoMKgwqDCoCBsb2NrOworCivCoMKgwqAgc3RydWN0IGFjcGlfZGF0YcKgICphY3BpX2Rh dGE7Cit9Oworc3RydWN0IGRyaXZlcl9kYXRhIGRyaXZlcl9kYXRhOworCitzdHJ1Y3QgZmlsZV9k YXRhIHsKK8KgwqDCoCB1bnNpZ25lZCBpbnQgYWNrZWRfZ2VuX2NvdW50ZXI7Cit9OworCitzdGF0 aWMgaW50IGVxdWFsc19nZW5fY291bnRlcih1bnNpZ25lZCBpbnQgY291bnRlcikKK3sKK8KgwqDC oCByZXR1cm4gY291bnRlciA9PSBhdG9taWNfcmVhZCgmZHJpdmVyX2RhdGEuZ2VuZXJhdGlvbl9j b3VudGVyKTsKK30KKworc3RhdGljIHZvaWQgdm1nZW5pZF9idW1wX2dlbmVyYXRpb24odm9pZCkK K3sKK8KgwqDCoCB1bnNpZ25lZCBsb25nIGZsYWdzOworwqDCoMKgIGludCBjb3VudGVyOworCivC oMKgwqAgc3Bpbl9sb2NrX2lycXNhdmUoJmRyaXZlcl9kYXRhLmxvY2ssIGZsYWdzKTsKK8KgwqDC oCBjb3VudGVyID0gYXRvbWljX2luY19yZXR1cm4oJmRyaXZlcl9kYXRhLmdlbmVyYXRpb25fY291 bnRlcik7CivCoMKgwqAgKigoaW50ICopIGRyaXZlcl9kYXRhLm1hcF9idWYpID0gY291bnRlcjsK K8KgwqDCoCBhdG9taWNfc2V0KCZkcml2ZXJfZGF0YS5vdXRkYXRlZF93YXRjaGVycywgZHJpdmVy X2RhdGEud2F0Y2hlcnMpOworCivCoMKgwqAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkcml2ZXJf ZGF0YS5yZWFkX3dhaXRxKTsKK8KgwqDCoCB3YWtlX3VwX2ludGVycnVwdGlibGUoJmRyaXZlcl9k YXRhLm91dGRhdGVkX3dhaXRxKTsKK8KgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcml2 ZXJfZGF0YS5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHZtZ2VuaWRfcHV0X291dGRh dGVkX3dhdGNoZXJzKHZvaWQpCit7CivCoMKgwqAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRy aXZlcl9kYXRhLm91dGRhdGVkX3dhdGNoZXJzKSkKK8KgwqDCoCDCoMKgwqAgd2FrZV91cF9pbnRl cnJ1cHRpYmxlKCZkcml2ZXJfZGF0YS5vdXRkYXRlZF93YWl0cSk7Cit9CisKK3N0YXRpYyBpbnQg dm1nZW5pZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorewor wqDCoMKgIHN0cnVjdCBmaWxlX2RhdGEgKmZkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZp bGVfZGF0YSksCkdGUF9LRVJORUwpOworwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKK8Kg wqDCoCBpZiAoIWZkYXRhKQorwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVOT01FTTsKKworwqDCoMKg IHNwaW5fbG9ja19pcnFzYXZlKCZkcml2ZXJfZGF0YS5sb2NrLCBmbGFncyk7CivCoMKgwqAgZmRh dGEtPmFja2VkX2dlbl9jb3VudGVyID0KYXRvbWljX3JlYWQoJmRyaXZlcl9kYXRhLmdlbmVyYXRp b25fY291bnRlcik7CivCoMKgwqAgKytkcml2ZXJfZGF0YS53YXRjaGVyczsKK8KgwqDCoCBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkcml2ZXJfZGF0YS5sb2NrLCBmbGFncyk7CisKK8KgwqDCoCBm aWxlLT5wcml2YXRlX2RhdGEgPSBmZGF0YTsKKworwqDCoMKgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHZtZ2VuaWRfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZp bGUpCit7CivCoMKgwqAgc3RydWN0IGZpbGVfZGF0YSAqZmRhdGEgPSBmaWxlLT5wcml2YXRlX2Rh dGE7CivCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworwqDCoMKgIHNwaW5fbG9ja19pcnFz YXZlKCZkcml2ZXJfZGF0YS5sb2NrLCBmbGFncyk7CivCoMKgwqAgaWYgKCFlcXVhbHNfZ2VuX2Nv dW50ZXIoZmRhdGEtPmFja2VkX2dlbl9jb3VudGVyKSkKK8KgwqDCoCDCoMKgwqAgdm1nZW5pZF9w dXRfb3V0ZGF0ZWRfd2F0Y2hlcnMoKTsKK8KgwqDCoCAtLWRyaXZlcl9kYXRhLndhdGNoZXJzOwor wqDCoMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRyaXZlcl9kYXRhLmxvY2ssIGZsYWdzKTsK KworwqDCoMKgIGtmcmVlKGZkYXRhKTsKKworwqDCoMKgIHJldHVybiAwOworfQorCitzdGF0aWMg c3NpemVfdAordm1nZW5pZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1 Ziwgc2l6ZV90IG5ieXRlcywKbG9mZl90ICpwcG9zKQoreworwqDCoMKgIHN0cnVjdCBmaWxlX2Rh dGEgKmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworwqDCoMKgIHNzaXplX3QgcmV0OworwqDC oMKgIGludCBnZW5fY291bnRlcjsKKworwqDCoMKgIGlmIChuYnl0ZXMgPT0gMCkKK8KgwqDCoCDC oMKgwqAgcmV0dXJuIDA7CivCoMKgwqAgLyogZGlzYWxsb3cgcGFydGlhbCByZWFkcyAqLworwqDC oMKgIGlmIChuYnl0ZXMgPCBzaXplb2YoZ2VuX2NvdW50ZXIpKQorwqDCoMKgIMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKKworwqDCoMKgIGlmIChlcXVhbHNfZ2VuX2NvdW50ZXIoZmRhdGEtPmFja2Vk X2dlbl9jb3VudGVyKSkgeworwqDCoMKgIMKgwqDCoCBpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9O QkxPQ0spCivCoMKgwqAgwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVBR0FJTjsKK8KgwqDCoCDCoMKg wqAgcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKAorwqDCoMKgIMKgwqDCoCDCoMKgwqAg ZHJpdmVyX2RhdGEucmVhZF93YWl0cSwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgICFlcXVhbHNfZ2Vu X2NvdW50ZXIoZmRhdGEtPmFja2VkX2dlbl9jb3VudGVyKQorwqDCoMKgIMKgwqDCoCApOworwqDC oMKgIMKgwqDCoCBpZiAocmV0KQorwqDCoMKgIMKgwqDCoCDCoMKgwqAgcmV0dXJuIHJldDsKK8Kg wqDCoCB9CisKK8KgwqDCoCBnZW5fY291bnRlciA9IGF0b21pY19yZWFkKCZkcml2ZXJfZGF0YS5n ZW5lcmF0aW9uX2NvdW50ZXIpOworwqDCoMKgIHJldCA9IGNvcHlfdG9fdXNlcih1YnVmLCAmZ2Vu X2NvdW50ZXIsIHNpemVvZihnZW5fY291bnRlcikpOworwqDCoMKgIGlmIChyZXQpCivCoMKgwqAg wqDCoMKgIHJldHVybiAtRUZBVUxUOworCivCoMKgwqAgcmV0dXJuIHNpemVvZihnZW5fY291bnRl cik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZtZ2VuaWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUs IGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIHNp emVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworwqDCoMKgIHN0cnVjdCBmaWxlX2RhdGEgKmZk YXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworwqDCoMKgIHVuc2lnbmVkIGludCBuZXdfYWNrZWRf Z2VuOworwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKK8KgwqDCoCAvKiBkaXNhbGxvdyBw YXJ0aWFsIHdyaXRlcyAqLworwqDCoMKgIGlmIChjb3VudCAhPSBzaXplb2YobmV3X2Fja2VkX2dl bikpCivCoMKgwqAgwqDCoMKgIHJldHVybiAtRUlOVkFMOworwqDCoMKgIGlmIChjb3B5X2Zyb21f dXNlcigmbmV3X2Fja2VkX2dlbiwgdWJ1ZiwgY291bnQpKQorwqDCoMKgIMKgwqDCoCByZXR1cm4g LUVGQVVMVDsKKworwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKCZkcml2ZXJfZGF0YS5sb2NrLCBm bGFncyk7CivCoMKgwqAgLyogd3JvbmcgZ2VuLWNvdW50ZXIgYWNrbm93bGVkZ2VkICovCivCoMKg wqAgaWYgKCFlcXVhbHNfZ2VuX2NvdW50ZXIobmV3X2Fja2VkX2dlbikpIHsKK8KgwqDCoCDCoMKg wqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJpdmVyX2RhdGEubG9jaywgZmxhZ3MpOworwqDC oMKgIMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKK8KgwqDCoCB9CivCoMKgwqAgaWYgKCFlcXVhbHNf Z2VuX2NvdW50ZXIoZmRhdGEtPmFja2VkX2dlbl9jb3VudGVyKSkgeworwqDCoMKgIMKgwqDCoCBm ZGF0YS0+YWNrZWRfZ2VuX2NvdW50ZXIgPSBuZXdfYWNrZWRfZ2VuOworwqDCoMKgIMKgwqDCoCB2 bWdlbmlkX3B1dF9vdXRkYXRlZF93YXRjaGVycygpOworwqDCoMKgIH0KK8KgwqDCoCBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkcml2ZXJfZGF0YS5sb2NrLCBmbGFncyk7CisKK8KgwqDCoCByZXR1 cm4gKHNzaXplX3QpY291bnQ7Cit9CisKK3N0YXRpYyBfX3BvbGxfdAordm1nZW5pZF9wb2xsKHN0 cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworwqDCoMKgIF9fcG9sbF90IG1h c2sgPSAwOworwqDCoMKgIHN0cnVjdCBmaWxlX2RhdGEgKmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9k YXRhOworCivCoMKgwqAgaWYgKCFlcXVhbHNfZ2VuX2NvdW50ZXIoZmRhdGEtPmFja2VkX2dlbl9j b3VudGVyKSkKK8KgwqDCoCDCoMKgwqAgcmV0dXJuIEVQT0xMSU4gfCBFUE9MTFJETk9STTsKKwor wqDCoMKgIHBvbGxfd2FpdChmaWxlLCAmZHJpdmVyX2RhdGEucmVhZF93YWl0cSwgd2FpdCk7CisK K8KgwqDCoCBpZiAoIWVxdWFsc19nZW5fY291bnRlcihmZGF0YS0+YWNrZWRfZ2VuX2NvdW50ZXIp KQorwqDCoMKgIMKgwqDCoCBtYXNrID0gRVBPTExJTiB8IEVQT0xMUkROT1JNOworCivCoMKgwqAg cmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBsb25nIHZtZ2VuaWRfaW9jdGwoc3RydWN0IGZpbGUg KmZpbGUsCivCoMKgwqAgwqDCoMKgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJn KQoreworwqDCoMKgIHN0cnVjdCBmaWxlX2RhdGEgKmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRh OworwqDCoMKgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9uczsKK8KgwqDCoCBrdGltZV90IHVudGls OworwqDCoMKgIGludCByZXQgPSAwOworCivCoMKgwqAgc3dpdGNoIChjbWQpIHsKK8KgwqDCoCBj YXNlIFZNR0VOSURfR0VUX09VVERBVEVEX1dBVENIRVJTOgorwqDCoMKgIMKgwqDCoCByZXQgPSBh dG9taWNfcmVhZCgmZHJpdmVyX2RhdGEub3V0ZGF0ZWRfd2F0Y2hlcnMpOworwqDCoMKgIMKgwqDC oCBicmVhazsKK8KgwqDCoCBjYXNlIFZNR0VOSURfV0FJVF9XQVRDSEVSUzoKK8KgwqDCoCDCoMKg wqAgdGltZW91dF9ucyA9IGFyZyAqIE5TRUNfUEVSX01TRUM7CivCoMKgwqAgwqDCoMKgIHVudGls ID0gdGltZW91dF9ucyA/IGt0aW1lX3NldCgwLCB0aW1lb3V0X25zKSA6IEtUSU1FX01BWDsKKwor wqDCoMKgIMKgwqDCoCByZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfaHJ0aW1lb3V0KAor wqDCoMKgIMKgwqDCoCDCoMKgwqAgZHJpdmVyX2RhdGEub3V0ZGF0ZWRfd2FpdHEsCivCoMKgwqAg wqDCoMKgIMKgwqDCoCAoIWF0b21pY19yZWFkKCZkcml2ZXJfZGF0YS5vdXRkYXRlZF93YXRjaGVy cykgfHwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgIWVxdWFsc19nZW5fY291 bnRlcihmZGF0YS0+YWNrZWRfZ2VuX2NvdW50ZXIpKSwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIHVu dGlsCivCoMKgwqAgwqDCoMKgICk7CivCoMKgwqAgwqDCoMKgIGlmIChhdG9taWNfcmVhZCgmZHJp dmVyX2RhdGEub3V0ZGF0ZWRfd2F0Y2hlcnMpKQorwqDCoMKgIMKgwqDCoCDCoMKgwqAgcmV0ID0g LUVJTlRSOworwqDCoMKgIMKgwqDCoCBlbHNlCivCoMKgwqAgwqDCoMKgIMKgwqDCoCByZXQgPSAw OworwqDCoMKgIMKgwqDCoCBicmVhazsKK8KgwqDCoCBjYXNlIFZNR0VOSURfRk9SQ0VfR0VOX1VQ REFURToKK8KgwqDCoCDCoMKgwqAgaWYgKCFjaGVja3BvaW50X3Jlc3RvcmVfbnNfY2FwYWJsZShj dXJyZW50X3VzZXJfbnMoKSkpCivCoMKgwqAgwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVBQ0NFUzsK K8KgwqDCoCDCoMKgwqAgdm1nZW5pZF9idW1wX2dlbmVyYXRpb24oKTsKK8KgwqDCoCDCoMKgwqAg YnJlYWs7CivCoMKgwqAgZGVmYXVsdDoKK8KgwqDCoCDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKK8Kg wqDCoCDCoMKgwqAgYnJlYWs7CivCoMKgwqAgfQorwqDCoMKgIHJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgdm1nZW5pZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSkKK3sKK8KgwqDCoCBzdHJ1Y3QgZmlsZV9kYXRhICpmZGF0YSA9IGZpbGUtPnBy aXZhdGVfZGF0YTsKKworwqDCoMKgIGlmICh2bWEtPnZtX3Bnb2ZmICE9IDAgfHwgdm1hX3BhZ2Vz KHZtYSkgPiAxKQorwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKKworwqDCoMKgIGlmICgo dm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSAhPSAwKQorwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVQ RVJNOworCivCoMKgwqAgdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERV TVA7CivCoMKgwqAgdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CivCoMKgwqAgdm1hLT52 bV9wcml2YXRlX2RhdGEgPSBmZGF0YTsKKworwqDCoMKgIHJldHVybiB2bV9pbnNlcnRfcGFnZSh2 bWEsIHZtYS0+dm1fc3RhcnQsCivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKg wqDCoCDCoCB2aXJ0X3RvX3BhZ2UoZHJpdmVyX2RhdGEubWFwX2J1ZikpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0geworwqDCoMKgIC5vd25lcsKgwqDC oMKgwqDCoMKgwqDCoCA9IFRISVNfTU9EVUxFLAorwqDCoMKgIC5tbWFwwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSB2bWdlbmlkX21tYXAsCivCoMKgwqAgLm9wZW7CoMKgwqDCoMKgwqDCoMKgwqDCoCA9 IHZtZ2VuaWRfb3BlbiwKK8KgwqDCoCAucmVsZWFzZcKgwqDCoMKgwqDCoMKgID0gdm1nZW5pZF9j bG9zZSwKK8KgwqDCoCAucmVhZMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gdm1nZW5pZF9yZWFkLAor wqDCoMKgIC53cml0ZcKgwqDCoMKgwqDCoMKgwqDCoCA9IHZtZ2VuaWRfd3JpdGUsCivCoMKgwqAg LnBvbGzCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IHZtZ2VuaWRfcG9sbCwKK8KgwqDCoCAudW5sb2Nr ZWRfaW9jdGwgPSB2bWdlbmlkX2lvY3RsLAorfTsKKworc3RydWN0IG1pc2NkZXZpY2Ugdm1nZW5p ZF9taXNjID0geworwqDCoMKgIC5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUiwKK8KgwqDCoCAu bmFtZSA9ICJ2bWdlbmlkIiwKK8KgwqDCoCAuZm9wcyA9ICZmb3BzLAorfTsKKworc3RhdGljIGlu dCB2bWdlbmlkX2FjcGlfbWFwKHN0cnVjdCBhY3BpX2RhdGEgKnByaXYsIGFjcGlfaGFuZGxlIGhh bmRsZSkKK3sKK8KgwqDCoCBpbnQgaTsKK8KgwqDCoCBwaHlzX2FkZHJfdCBwaHlzX2FkZHI7CivC oMKgwqAgc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIs IE5VTEwgfTsKK8KgwqDCoCBhY3BpX3N0YXR1cyBzdGF0dXM7CivCoMKgwqAgdW5pb24gYWNwaV9v YmplY3QgKnBzczsKK8KgwqDCoCB1bmlvbiBhY3BpX29iamVjdCAqZWxlbWVudDsKKworwqDCoMKg IHN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkFERFIiLCBOVUxMLCAmYnVm ZmVyKTsKK8KgwqDCoCBpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKK8KgwqDCoCDCoMKgwqAg QUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV2YWx1YXRpbmcgQUREUiIpKTsKK8Kg wqDCoCDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7CivCoMKgwqAgfQorwqDCoMKgIHBzcyA9IGJ1ZmZl ci5wb2ludGVyOworwqDCoMKgIGlmICghcHNzIHx8IHBzcy0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFD S0FHRSB8fCBwc3MtPnBhY2thZ2UuY291bnQgIT0gMikKK8KgwqDCoCDCoMKgwqAgcmV0dXJuIC1F SU5WQUw7CisKK8KgwqDCoCBwaHlzX2FkZHIgPSAwOworwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBw c3MtPnBhY2thZ2UuY291bnQ7IGkrKykgeworwqDCoMKgIMKgwqDCoCBlbGVtZW50ID0gJihwc3Mt PnBhY2thZ2UuZWxlbWVudHNbaV0pOworwqDCoMKgIMKgwqDCoCBpZiAoZWxlbWVudC0+dHlwZSAh PSBBQ1BJX1RZUEVfSU5URUdFUikKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIHJldHVybiAtRUlOVkFM OworwqDCoMKgIMKgwqDCoCBwaHlzX2FkZHIgfD0gZWxlbWVudC0+aW50ZWdlci52YWx1ZSA8PCBp ICogMzI7CivCoMKgwqAgfQorCivCoMKgwqAgcHJpdi0+dXVpZF9pb21hcCA9IGFjcGlfb3NfbWFw X21lbW9yeShwaHlzX2FkZHIsIHNpemVvZih1dWlkX3QpKTsKK8KgwqDCoCBpZiAoIXByaXYtPnV1 aWRfaW9tYXApIHsKK8KgwqDCoCDCoMKgwqAgcHJfZXJyKCJDb3VsZCBub3QgbWFwIG1lbW9yeSBh dCAweCVsbHgsIHNpemUgJXVcbiIsCivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgIHBoeXNfYWRk ciwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqAgKHUzMikgc2l6ZW9mKHV1aWRfdCkpOworwqDC oMKgIMKgwqDCoCByZXR1cm4gLUVOT01FTTsKK8KgwqDCoCB9CisKK8KgwqDCoCBtZW1jcHlfZnJv bWlvKCZwcml2LT51dWlkLCBwcml2LT51dWlkX2lvbWFwLCBzaXplb2YodXVpZF90KSk7CisKK8Kg wqDCoCByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bWdlbmlkX2FjcGlfYWRkKHN0cnVjdCBh Y3BpX2RldmljZSAqZGV2aWNlKQoreworwqDCoMKgIGludCByZXQ7CisKK8KgwqDCoCBpZiAoIWRl dmljZSkKK8KgwqDCoCDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7CisKK8KgwqDCoCBkcml2ZXJfZGF0 YS5hY3BpX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9kYXRhKSwgR0ZQX0tFUk5F TCk7CivCoMKgwqAgaWYgKCFkcml2ZXJfZGF0YS5hY3BpX2RhdGEpIHsKK8KgwqDCoCDCoMKgwqAg cHJfZXJyKCJ2bWdlbmlkOiBmYWlsZWQgdG8gYWxsb2NhdGUgYWNwaV9kYXRhXG4iKTsKK8KgwqDC oCDCoMKgwqAgcmV0dXJuIC1FTk9NRU07CivCoMKgwqAgfQorwqDCoMKgIGRldmljZS0+ZHJpdmVy X2RhdGEgPSAmZHJpdmVyX2RhdGE7CisKK8KgwqDCoCByZXQgPSB2bWdlbmlkX2FjcGlfbWFwKGRy aXZlcl9kYXRhLmFjcGlfZGF0YSwgZGV2aWNlLT5oYW5kbGUpOworwqDCoMKgIGlmIChyZXQgPCAw KSB7CivCoMKgwqAgwqDCoMKgIHByX2Vycigidm1nZW5pZDogZmFpbGVkIHRvIG1hcCBhY3BpIGRl dmljZVxuIik7CivCoMKgwqAgwqDCoMKgIGdvdG8gZXJyOworwqDCoMKgIH0KKworwqDCoMKgIHJl dHVybiAwOworCitlcnI6CivCoMKgwqAga2ZyZWUoZHJpdmVyX2RhdGEuYWNwaV9kYXRhKTsKK8Kg wqDCoCBkcml2ZXJfZGF0YS5hY3BpX2RhdGEgPSBOVUxMOworCivCoMKgwqAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCB2bWdlbmlkX2FjcGlfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAq ZGV2aWNlKQoreworwqDCoMKgIHN0cnVjdCBhY3BpX2RhdGEgKnByaXY7CisKK8KgwqDCoCBpZiAo IWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQorwqDCoMKgIMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKKworwqDCoMKgIGRldmljZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworwqDCoMKg IHByaXYgPSBkcml2ZXJfZGF0YS5hY3BpX2RhdGE7CivCoMKgwqAgZHJpdmVyX2RhdGEuYWNwaV9k YXRhID0gTlVMTDsKKworwqDCoMKgIGlmIChwcml2ICYmIHByaXYtPnV1aWRfaW9tYXApCivCoMKg wqAgwqDCoMKgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHByaXYtPnV1aWRfaW9tYXAsIHNpemVvZih1 dWlkX3QpKTsKK8KgwqDCoCBrZnJlZShwcml2KTsKKworwqDCoMKgIHJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCB2bWdlbmlkX2FjcGlfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNl LCB1MzIgZXZlbnQpCit7CivCoMKgwqAgc3RydWN0IGFjcGlfZGF0YSAqcHJpdjsKK8KgwqDCoCB1 dWlkX3Qgb2xkX3V1aWQ7CisKK8KgwqDCoCBpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0 YShkZXZpY2UpKSB7CivCoMKgwqAgwqDCoMKgIHByX2VycigiVk1HRU5JRCBub3RpZnkgd2l0aCBO VUxMIHByaXZhdGUgZGF0YVxuIik7CivCoMKgwqAgwqDCoMKgIHJldHVybjsKK8KgwqDCoCB9CivC oMKgwqAgcHJpdiA9IGRyaXZlcl9kYXRhLmFjcGlfZGF0YTsKKworwqDCoMKgIC8qIHVwZGF0ZSBW TSBHZW5lcmF0aW9uIFVVSUQgKi8KK8KgwqDCoCBvbGRfdXVpZCA9IHByaXYtPnV1aWQ7CivCoMKg wqAgbWVtY3B5X2Zyb21pbygmcHJpdi0+dXVpZCwgcHJpdi0+dXVpZF9pb21hcCwgc2l6ZW9mKHV1 aWRfdCkpOworCivCoMKgwqAgaWYgKG1lbWNtcCgmb2xkX3V1aWQsICZwcml2LT51dWlkLCBzaXpl b2YodXVpZF90KSkpIHsKK8KgwqDCoCDCoMKgwqAgLyogSFcgdXVpZCB1cGRhdGVkICovCivCoMKg wqAgwqDCoMKgIHZtZ2VuaWRfYnVtcF9nZW5lcmF0aW9uKCk7CivCoMKgwqAgwqDCoMKgIGFkZF9k ZXZpY2VfcmFuZG9tbmVzcygmcHJpdi0+dXVpZCwgc2l6ZW9mKHV1aWRfdCkpOworwqDCoMKgIH0K K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCB2bWdlbmlkX2lkc1tdID0g eworwqDCoMKgIHsiUUVNVVZHSUQiLCAwfSwKK8KgwqDCoCB7IiIsIDB9LAorfTsKKworc3RhdGlj IHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3ZtZ2VuaWRfZHJpdmVyID0geworwqDCoMKgIC5uYW1l ID0gInZtX2dlbmVyYXRpb25faWQiLAorwqDCoMKgIC5pZHMgPSB2bWdlbmlkX2lkcywKK8KgwqDC oCAub3duZXIgPSBUSElTX01PRFVMRSwKK8KgwqDCoCAub3BzID0geworwqDCoMKgIMKgwqDCoCAu YWRkID0gdm1nZW5pZF9hY3BpX2FkZCwKK8KgwqDCoCDCoMKgwqAgLnJlbW92ZSA9IHZtZ2VuaWRf YWNwaV9yZW1vdmUsCivCoMKgwqAgwqDCoMKgIC5ub3RpZnkgPSB2bWdlbmlkX2FjcGlfbm90aWZ5 LAorwqDCoMKgIH0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZtZ2VuaWRfaW5pdCh2b2lkKQor eworwqDCoMKgIGludCByZXQ7CisKK8KgwqDCoCBkcml2ZXJfZGF0YS5tYXBfYnVmID0gZ2V0X3pl cm9lZF9wYWdlKEdGUF9LRVJORUwpOworwqDCoMKgIGlmICghZHJpdmVyX2RhdGEubWFwX2J1ZikK K8KgwqDCoCDCoMKgwqAgcmV0dXJuIC1FTk9NRU07CisKK8KgwqDCoCBhdG9taWNfc2V0KCZkcml2 ZXJfZGF0YS5nZW5lcmF0aW9uX2NvdW50ZXIsIDApOworwqDCoMKgIGF0b21pY19zZXQoJmRyaXZl cl9kYXRhLm91dGRhdGVkX3dhdGNoZXJzLCAwKTsKK8KgwqDCoCBpbml0X3dhaXRxdWV1ZV9oZWFk KCZkcml2ZXJfZGF0YS5yZWFkX3dhaXRxKTsKK8KgwqDCoCBpbml0X3dhaXRxdWV1ZV9oZWFkKCZk cml2ZXJfZGF0YS5vdXRkYXRlZF93YWl0cSk7CivCoMKgwqAgc3Bpbl9sb2NrX2luaXQoJmRyaXZl cl9kYXRhLmxvY2spOworwqDCoMKgIGRyaXZlcl9kYXRhLmFjcGlfZGF0YSA9IE5VTEw7CisKK8Kg wqDCoCByZXQgPSBtaXNjX3JlZ2lzdGVyKCZ2bWdlbmlkX21pc2MpOworwqDCoMKgIGlmIChyZXQg PCAwKSB7CivCoMKgwqAgwqDCoMKgIHByX2VycigibWlzY19yZWdpc3RlcigpIGZhaWxlZCBmb3Ig dm1nZW5pZFxuIik7CivCoMKgwqAgwqDCoMKgIGdvdG8gZXJyOworwqDCoMKgIH0KKworwqDCoMKg IHJldCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV92bWdlbmlkX2RyaXZlcik7CivC oMKgwqAgaWYgKHJldCA8IDApCivCoMKgwqAgwqDCoMKgIHByX3dhcm4oIk5vIHZtZ2VuaWQgYWNw aSBkZXZpY2UgZm91bmRcbiIpOworCivCoMKgwqAgcmV0dXJuIDA7CisKK2VycjoKK8KgwqDCoCBm cmVlX3BhZ2VzKGRyaXZlcl9kYXRhLm1hcF9idWYsIDApOworwqDCoMKgIGRyaXZlcl9kYXRhLm1h cF9idWYgPSAwOworCivCoMKgwqAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0 IHZtZ2VuaWRfZXhpdCh2b2lkKQoreworwqDCoMKgIGFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVy KCZhY3BpX3ZtZ2VuaWRfZHJpdmVyKTsKKworwqDCoMKgIG1pc2NfZGVyZWdpc3Rlcigmdm1nZW5p ZF9taXNjKTsKK8KgwqDCoCBmcmVlX3BhZ2VzKGRyaXZlcl9kYXRhLm1hcF9idWYsIDApOworwqDC oMKgIGRyaXZlcl9kYXRhLm1hcF9idWYgPSAwOworfQorCittb2R1bGVfaW5pdCh2bWdlbmlkX2lu aXQpOworbW9kdWxlX2V4aXQodm1nZW5pZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWRyaWFu IENhdGFuZ2l1Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlZpcnR1YWwgTWFjaGluZSBHZW5lcmF0 aW9uIElEIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7 CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdm1nZW5pZC5oIGIvaW5jbHVkZS91YXBp L2xpbnV4L3ZtZ2VuaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzE2 YjAwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZtZ2VuaWQuaApAQCAt MCwwICsxLDE0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgV0lUSCBM aW51eC1zeXNjYWxsLW5vdGUgKi8KKworI2lmbmRlZiBfVUFQSV9MSU5VWF9WTUdFTklEX0gKKyNk ZWZpbmUgX1VBUElfTElOVVhfVk1HRU5JRF9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgor CisjZGVmaW5lIFZNR0VOSURfSU9DVEwgMHgyZAorI2RlZmluZSBWTUdFTklEX0dFVF9PVVREQVRF RF9XQVRDSEVSUyBfSU8oVk1HRU5JRF9JT0NUTCwgMSkKKyNkZWZpbmUgVk1HRU5JRF9XQUlUX1dB VENIRVJTwqDCoMKgwqDCoMKgwqDCoCBfSU8oVk1HRU5JRF9JT0NUTCwgMikKKyNkZWZpbmUgVk1H RU5JRF9GT1JDRV9HRU5fVVBEQVRFwqDCoMKgwqDCoCBfSU8oVk1HRU5JRF9JT0NUTCwgMykKKwor I2VuZGlmIC8qIF9VQVBJX0xJTlVYX1ZNR0VOSURfSCAqLworCi0tIAoyLjcuNAoKCgoKCkFtYXpv biBEZXZlbG9wbWVudCBDZW50ZXIgKFJvbWFuaWEpIFMuUi5MLiByZWdpc3RlcmVkIG9mZmljZTog MjdBIFNmLiBMYXphciBTdHJlZXQsIFVCQzUsIGZsb29yIDIsIElhc2ksIElhc2kgQ291bnR5LCA3 MDAwNDUsIFJvbWFuaWEuIFJlZ2lzdGVyZWQgaW4gUm9tYW5pYS4gUmVnaXN0cmF0aW9uIG51bWJl ciBKMjIvMjYyMS8yMDA1Lgo= 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=-17.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 AE011C63798 for ; Fri, 27 Nov 2020 18:27:24 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 B71BD21534 for ; Fri, 27 Nov 2020 18:27:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="dus6MWyD" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B71BD21534 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amazon.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:53612 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kiiSo-0006fX-R4 for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 13:27:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42406) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kiiS4-0006Ej-51 for qemu-devel@nongnu.org; Fri, 27 Nov 2020 13:26:36 -0500 Received: from smtp-fw-33001.amazon.com ([207.171.190.10]:24864) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kiiRz-0006Ak-2s for qemu-devel@nongnu.org; Fri, 27 Nov 2020 13:26:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1606501591; x=1638037591; h=to:cc:references:from:subject:message-id:date: mime-version:in-reply-to:content-transfer-encoding; bh=ym1a40cA3sfFACqjWbKa8VG9le0R+UXnWig063o8dgU=; b=dus6MWyDE4XXa8rWcGHOb+994fygkhZag3AHhL5mJSTo9XhOSouM1t66 wNcML7GKowHJmfWJj5/Ht+wBBd6O4UtUiB4EpP7OOoTjwLxcVScdep83v 7jmLaZ/Bz2eWxvqkWd0ZKXh2GCQmgyhIhxyDc8kaZ3oZWQ44NcBACAATG Q=; X-IronPort-AV: E=Sophos;i="5.78,375,1599523200"; d="scan'208";a="98545117" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-2b-baacba05.us-west-2.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-33001.sea14.amazon.com with ESMTP; 27 Nov 2020 18:26:23 +0000 Received: from EX13D08EUB004.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-2b-baacba05.us-west-2.amazon.com (Postfix) with ESMTPS id 7D6D9A1DD5; Fri, 27 Nov 2020 18:26:20 +0000 (UTC) Received: from 4c32759f87cf.ant.amazon.com (10.43.162.53) by EX13D08EUB004.ant.amazon.com (10.43.166.158) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 27 Nov 2020 18:26:06 +0000 To: Dmitry Safonov <0x7f454c46@gmail.com>, Alexander Graf CC: Mike Rapoport , Christian Borntraeger , "Jason A. Donenfeld" , Jann Horn , Willy Tarreau , "MacCarthaigh, Colm" , Andy Lutomirski , "Theodore Y. Ts'o" , Eric Biggers , "open list:DOCUMENTATION" , kernel list , "Woodhouse, David" , "bonzini@gnu.org" , "Singh, Balbir" , "Weiss, Radu" , "oridgar@gmail.com" , "ghammer@redhat.com" , Jonathan Corbet , Greg Kroah-Hartman , "Michael S. Tsirkin" , Qemu Developers , KVM list , Michal Hocko , "Rafael J. Wysocki" , Pavel Machek , Linux API , "mpe@ellerman.id.au" , linux-s390 , "areber@redhat.com" , Pavel Emelyanov , Andrey Vagin , Pavel Tikhomirov , "gil@azul.com" , "asmehra@redhat.com" , "dgunigun@redhat.com" , "vijaysun@ca.ibm.com" , "Eric W. Biederman" References: <3E05451B-A9CD-4719-99D0-72750A304044@amazon.com> <300d4404-3efe-880e-ef30-692eabbff5f7@de.ibm.com> <20201119173800.GD8537@kernel.org> <1cdb6fac-0d50-3399-74a6-24c119ebbaa5@amazon.de> <106f56ca-49bc-7cad-480f-4b26656e90ce@gmail.com> From: "Catangiu, Adrian Costin" Subject: [PATCH v3] drivers/virt: vmgenid: add vm generation id driver Message-ID: <96625ce2-66c6-34b8-ef81-7c17c05b4c7a@amazon.com> Date: Fri, 27 Nov 2020 20:26:02 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Thunderbird/78.4.3 MIME-Version: 1.0 In-Reply-To: <106f56ca-49bc-7cad-480f-4b26656e90ce@gmail.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US X-Originating-IP: [10.43.162.53] X-ClientProxiedBy: EX13d09UWA003.ant.amazon.com (10.43.160.227) To EX13D08EUB004.ant.amazon.com (10.43.166.158) Precedence: Bulk Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=207.171.190.10; envelope-from=prvs=593c3f9be=acatan@amazon.com; helo=smtp-fw-33001.amazon.com X-Spam_score_int: -118 X-Spam_score: -11.9 X-Spam_bar: ----------- X-Spam_report: (-11.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_SPF_WL=-7.5 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" LSBCYWNrZ3JvdW5kCgpUaGUgVk0gR2VuZXJhdGlvbiBJRCBpcyBhIGZlYXR1cmUgZGVmaW5lZCBi eSBNaWNyb3NvZnQgKHBhcGVyOgpodHRwOi8vZ28ubWljcm9zb2Z0LmNvbS9md2xpbmsvP0xpbmtJ ZD0yNjA3MDkpIGFuZCBzdXBwb3J0ZWQgYnkKbXVsdGlwbGUgaHlwZXJ2aXNvciB2ZW5kb3JzLgoK VGhlIGZlYXR1cmUgaXMgcmVxdWlyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGFw cHMgdGhhdCB3b3JrCndpdGggbG9jYWwgY29waWVzL2NhY2hlcyBvZiB3b3JsZC11bmlxdWUgZGF0 YSBzdWNoIGFzIHJhbmRvbSB2YWx1ZXMsCnV1aWRzLCBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcg Y291bnRlcnMsIGV0Yy4KU3VjaCBhcHBzIGNhbiBiZSBuZWdhdGl2ZWx5IGFmZmVjdGVkIGJ5IFZN IHNuYXBzaG90dGluZyB3aGVuIHRoZSBWTQppcyBlaXRoZXIgY2xvbmVkIG9yIHJldHVybmVkIHRv IGFuIGVhcmxpZXIgcG9pbnQgaW4gdGltZS4KClRoZSBWTSBHZW5lcmF0aW9uIElEIGlzIGEgc2lt cGxlIGNvbmNlcHQgbWVhbnQgdG8gYWxsZXZpYXRlIHRoZSBpc3N1ZQpieSBwcm92aWRpbmcgYSB1 bmlxdWUgSUQgdGhhdCBjaGFuZ2VzIGVhY2ggdGltZSB0aGUgVk0gaXMgcmVzdG9yZWQKZnJvbSBh IHNuYXBzaG90LiBUaGUgaHcgcHJvdmlkZWQgVVVJRCB2YWx1ZSBjYW4gYmUgdXNlZCB0bwpkaWZm ZXJlbnRpYXRlIGJldHdlZW4gVk1zIG9yIGRpZmZlcmVudCBnZW5lcmF0aW9ucyBvZiB0aGUgc2Ft ZSBWTS4KCi0gUHJvYmxlbQoKVGhlIFZNIEdlbmVyYXRpb24gSUQgaXMgZXhwb3NlZCB0aHJvdWdo IGFuIEFDUEkgZGV2aWNlIGJ5IG11bHRpcGxlCmh5cGVydmlzb3IgdmVuZG9ycyBidXQgbmVpdGhl ciB0aGUgdmVuZG9ycyBvciB1cHN0cmVhbSBMaW51eCBoYXZlIG5vCmRlZmF1bHQgZHJpdmVyIGZv ciBpdCBsZWF2aW5nIHVzZXJzIHRvIGZlbmQgZm9yIHRoZW1zZWx2ZXMuCgpGdXJ0aGVybW9yZSwg c2ltcGx5IGZpbmRpbmcgb3V0IGFib3V0IGEgVk0gZ2VuZXJhdGlvbiBjaGFuZ2UgaXMgb25seQp0 aGUgc3RhcnRpbmcgcG9pbnQgb2YgYSBwcm9jZXNzIHRvIHJlbmV3IGludGVybmFsIHN0YXRlcyBv ZiBwb3NzaWJseQptdWx0aXBsZSBhcHBsaWNhdGlvbnMgYWNyb3NzIHRoZSBzeXN0ZW0uIFRoaXMg cHJvY2VzcyBjb3VsZCBiZW5lZml0CmZyb20gYSBkcml2ZXIgdGhhdCBwcm92aWRlcyBhbiBpbnRl cmZhY2UgdGhyb3VnaCB3aGljaCBvcmNoZXN0cmF0aW9uCmNhbiBiZSBlYXNpbHkgZG9uZS4KCi0g U29sdXRpb24KClRoaXMgcGF0Y2ggaXMgYSBkcml2ZXIgdGhhdCBleHBvc2VzIGEgbW9ub3Rvbmlj IGluY3JlbWVudGFsIFZpcnR1YWwKTWFjaGluZSBHZW5lcmF0aW9uIHUzMiBjb3VudGVyIHZpYSBh IGNoYXItZGV2IEZTIGludGVyZmFjZS4gVGhlIEZTCmludGVyZmFjZSBwcm92aWRlcyBzeW5jIGFu ZCBhc3luYyBWbUdlbiBjb3VudGVyIHVwZGF0ZXMgbm90aWZpY2F0aW9ucy4KSXQgYWxzbyBwcm92 aWRlcyBWbUdlbiBjb3VudGVyIHJldHJpZXZhbCBhbmQgY29uZmlybWF0aW9uIG1lY2hhbmlzbXMu CgpUaGUgZ2VuZXJhdGlvbiBjb3VudGVyIGFuZCB0aGUgaW50ZXJmYWNlIHRocm91Z2ggd2hpY2gg aXQgaXMgZXhwb3NlZAphcmUgYXZhaWxhYmxlIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBhY3BpIGRl dmljZSBwcmVzZW50LgoKV2hlbiB0aGUgZGV2aWNlIGlzIHByZXNlbnQsIHRoZSBodyBwcm92aWRl ZCBVVUlEIGlzIG5vdCBleHBvc2VkIHRvCnVzZXJzcGFjZSwgaXQgaXMgaW50ZXJuYWxseSB1c2Vk IGJ5IHRoZSBkcml2ZXIgdG8ga2VlcCBhY2NvdW50aW5nIGZvcgp0aGUgZXhwb3NlZCBWbUdlbiBj b3VudGVyLiBUaGUgY291bnRlciBzdGFydHMgZnJvbSB6ZXJvIHdoZW4gdGhlCmRyaXZlciBpcyBp bml0aWFsaXplZCBhbmQgbW9ub3RvbmljYWxseSBpbmNyZW1lbnRzIGV2ZXJ5IHRpbWUgdGhlIGh3 ClVVSUQgY2hhbmdlcyAodGhlIFZNIGdlbmVyYXRpb24gY2hhbmdlcykuCk9uIGVhY2ggaHcgVVVJ RCBjaGFuZ2UsIHRoZSBuZXcgaHlwZXJ2aXNvci1wcm92aWRlZCBVVUlEIGlzIGFsc28gZmVkCnRv IHRoZSBrZXJuZWwgUk5HLgoKSWYgdGhlcmUgaXMgbm8gYWNwaSB2bWdlbmlkIGRldmljZSBwcmVz ZW50LCB0aGUgZ2VuZXJhdGlvbiBjaGFuZ2VzIGFyZQpub3QgZHJpdmVuIGJ5IGh3IHZtZ2VuaWQg ZXZlbnRzIGJ1dCBjYW4gYmUgZHJpdmVuIGJ5IHNvZnR3YXJlIHRocm91Z2gKYSBkZWRpY2F0ZWQg ZHJpdmVyIGlvY3RsLgoKVGhpcyBwYXRjaCBidWlsZHMgb24gdG9wIG9mIE9yIElkZ2FyIDxvcmlk Z2FyQGdtYWlsLmNvbT4ncyBwcm9wb3NhbApodHRwczovL2xrbWwub3JnL2xrbWwvMjAxOC8zLzEv NDk4CgotIEZ1dHVyZSBpbXByb3ZlbWVudHMKCklkZWFsbHkgd2Ugd291bGQgd2FudCB0aGUgZHJp dmVyIHRvIHJlZ2lzdGVyIGl0c2VsZiBiYXNlZCBvbiBkZXZpY2VzJwpfQ0lEIGFuZCBub3QgX0hJ RCwgYnV0IHVuZm9ydHVuYXRlbHkgSSBjb3VsZG4ndCBmaW5kIGEgd2F5IHRvIGRvIHRoYXQuClRo ZSBwcm9ibGVtIGlzIHRoYXQgQUNQSSBkZXZpY2UgbWF0Y2hpbmcgaXMgZG9uZSBieQonX19hY3Bp X21hdGNoX2RldmljZSgpJyB3aGljaCBleGNsdXNpdmVseSBsb29rcyBhdAonYWNwaV9oYXJkd2Fy ZV9pZCAqaHdpZCcuCgpUaGVyZSBpcyBhIHBhdGggZm9yIHBsYXRmb3JtIGRldmljZXMgdG8gbWF0 Y2ggb24gX0NJRCB3aGVuIF9ISUQgaXMKJ1BSUDAwMDEnIC0gYnV0IHRoaXMgaXMgbm90IHRoZSBj YXNlIGZvciB0aGUgUWVtdSB2bWdlbmlkIGRldmljZS4KCkd1aWRhbmNlIGFuZCBoZWxwIGhlcmUg d291bGQgYmUgZ3JlYXRseSBhcHByZWNpYXRlZC4KClNpZ25lZC1vZmYtYnk6IEFkcmlhbiBDYXRh bmdpdSA8YWNhdGFuQGFtYXpvbi5jb20+CgotLS0KCnYxIC0+IHYyOgoKwqAgLSBleHBvc2UgdG8g dXNlcnNwYWNlIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHUzMiBWbSBHZW4gQ291bnRlcgrC oMKgwqAgaW5zdGVhZCBvZiB0aGUgaHcgVm1HZW4gVVVJRArCoCAtIHNpbmNlIHRoZSBody9oeXBl cnZpc29yLXByb3ZpZGVkIDEyOC1iaXQgVVVJRCBpcyBub3QgcHVibGljCsKgwqDCoCBhbnltb3Jl LCBhZGQgaXQgdG8gdGhlIGtlcm5lbCBSTkcgYXMgZGV2aWNlIHJhbmRvbW5lc3MKwqAgLSBpbnNl cnQgZHJpdmVyIHBhZ2UgY29udGFpbmluZyBWbSBHZW4gQ291bnRlciBpbiB0aGUgdXNlciB2bWEg aW4KwqDCoMKgIHRoZSBkcml2ZXIncyBtbWFwIGhhbmRsZXIgaW5zdGVhZCBvZiB1c2luZyBhIGZh dWx0IGhhbmRsZXIKwqAgLSB0dXJuIGRyaXZlciBpbnRvIGEgbWlzYyBkZXZpY2UgZHJpdmVyIHRv IGF1dG8tY3JlYXRlIC9kZXYvdm1nZW5pZArCoCAtIGNoYW5nZSBpb2N0bCBhcmcgdG8gYXZvaWQg bGVha2luZyBrZXJuZWwgc3RydWN0cyB0byB1c2Vyc3BhY2UKwqAgLSB1cGRhdGUgZG9jdW1lbnRh dGlvbgrCoCAtIHZhcmlvdXMgbml0cwrCoCAtIHJlYmFzZSBvbiB0b3Agb2YgbGludXMgbGF0ZXN0 Cgp2MiAtPiB2MzoKCsKgIC0gc2VwYXJhdGUgdGhlIGNvcmUgZHJpdmVyIGxvZ2ljIGFuZCBpbnRl cmZhY2UsIGZyb20gdGhlIEFDUEkgZGV2aWNlLgrCoMKgwqAgVGhlIEFDUEkgdm1nZW5pZCBkZXZp Y2UgaXMgbm93IG9uZSBwb3NzaWJsZSBiYWNrZW5kLgrCoCAtIGZpeCBpc3N1ZSB3aGVuIHRpbWVv dXQ9MCBpbiBWTUdFTklEX1dBSVRfV0FUQ0hFUlMKwqAgLSBhZGQgbG9ja2luZyB0byBhdm9pZCBy YWNlcyBiZXR3ZWVuIGZzIG9wcyBoYW5kbGVycyBhbmQgaHcgaXJxCsKgwqDCoCBkcml2ZW4gZ2Vu ZXJhdGlvbiB1cGRhdGVzCsKgIC0gY2hhbmdlIFZNR0VOSURfV0FJVF9XQVRDSEVSUyBpb2N0bCBz byBpZiB0aGUgY3VycmVudCBjYWxsZXIgaXMKwqDCoMKgIG91dGRhdGVkIG9yIGEgZ2VuZXJhdGlv biBjaGFuZ2UgaGFwcGVucyB3aGlsZSB3YWl0aW5nICh0aHVzIG1ha2luZwrCoMKgwqAgY3VycmVu dCBjYWxsZXIgb3V0ZGF0ZWQpLCB0aGUgaW9jdGwgcmV0dXJucyAtRUlOVFIgdG8gc2lnbmFsIHRo ZQrCoMKgwqAgdXNlciB0byBoYW5kbGUgZXZlbnQgYW5kIHJldHJ5LiBGaXhlcyBibG9ja2luZyBv biBvbmVzZWxmLgrCoCAtIGFkZCBWTUdFTklEX0ZPUkNFX0dFTl9VUERBVEUgaW9jdGwgY29uZGl0 aW9uZWQgYnkKwqDCoMKgIENBUF9DSEVDS1BPSU5UX1JFU1RPUkUgY2FwYWJpbGl0eSwgdGhyb3Vn aCB3aGljaCBzb2Z0d2FyZSBjYW4gZm9yY2UKwqDCoMKgIGdlbmVyYXRpb24gYnVtcC4KLS0tCsKg RG9jdW1lbnRhdGlvbi92aXJ0L3ZtZ2VuaWQucnN0IHwgMjQwICsrKysrKysrKysrKysrKysrKysr KysrCsKgZHJpdmVycy92aXJ0L0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTcgKysK wqBkcml2ZXJzL3ZpcnQvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCsKgZHJp dmVycy92aXJ0L3ZtZ2VuaWQuY8KgwqDCoMKgwqDCoMKgwqAgfCA0MzUKKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKwqBpbmNsdWRlL3VhcGkvbGludXgvdm1nZW5pZC5o wqDCoCB8wqAgMTQgKysKwqA1IGZpbGVzIGNoYW5nZWQsIDcwNyBpbnNlcnRpb25zKCspCsKgY3Jl YXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vdmlydC92bWdlbmlkLnJzdArCoGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3ZpcnQvdm1nZW5pZC5jCsKgY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvdWFwaS9saW51eC92bWdlbmlkLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Zp cnQvdm1nZW5pZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQvdm1nZW5pZC5yc3QKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhOWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL0Rv Y3VtZW50YXRpb24vdmlydC92bWdlbmlkLnJzdApAQCAtMCwwICsxLDI0MCBAQAorLi4gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworPT09PT09PT09PT09CitWTUdFTklECis9PT09 PT09PT09PT0KKworVGhlIFZNIEdlbmVyYXRpb24gSUQgaXMgYSBmZWF0dXJlIGRlZmluZWQgYnkg TWljcm9zb2Z0IChwYXBlcjoKK2h0dHA6Ly9nby5taWNyb3NvZnQuY29tL2Z3bGluay8/TGlua0lk PTI2MDcwOSkgYW5kIHN1cHBvcnRlZCBieQorbXVsdGlwbGUgaHlwZXJ2aXNvciB2ZW5kb3JzLgor CitUaGUgZmVhdHVyZSBpcyByZXF1aXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkg YXBwcyB0aGF0IHdvcmsKK3dpdGggbG9jYWwgY29waWVzL2NhY2hlcyBvZiB3b3JsZC11bmlxdWUg ZGF0YSBzdWNoIGFzIHJhbmRvbSB2YWx1ZXMsCit1dWlkcywgbW9ub3RvbmljYWxseSBpbmNyZWFz aW5nIGNvdW50ZXJzLCBldGMuCitTdWNoIGFwcHMgY2FuIGJlIG5lZ2F0aXZlbHkgYWZmZWN0ZWQg YnkgVk0gc25hcHNob3R0aW5nIHdoZW4gdGhlIFZNCitpcyBlaXRoZXIgY2xvbmVkIG9yIHJldHVy bmVkIHRvIGFuIGVhcmxpZXIgcG9pbnQgaW4gdGltZS4KKworVGhlIFZNIEdlbmVyYXRpb24gSUQg aXMgYSBzaW1wbGUgY29uY2VwdCBtZWFudCB0byBhbGxldmlhdGUgdGhlIGlzc3VlCitieSBwcm92 aWRpbmcgYSB1bmlxdWUgSUQgdGhhdCBjaGFuZ2VzIGVhY2ggdGltZSB0aGUgVk0gaXMgcmVzdG9y ZWQKK2Zyb20gYSBzbmFwc2hvdC4gVGhlIGh3IHByb3ZpZGVkIFVVSUQgdmFsdWUgY2FuIGJlIHVz ZWQgdG8KK2RpZmZlcmVudGlhdGUgYmV0d2VlbiBWTXMgb3IgZGlmZmVyZW50IGdlbmVyYXRpb25z IG9mIHRoZSBzYW1lIFZNLgorCitUaGUgVk0gR2VuZXJhdGlvbiBJRCBpcyBleHBvc2VkIHRocm91 Z2ggYW4gQUNQSSBkZXZpY2UgYnkgbXVsdGlwbGUKK2h5cGVydmlzb3IgdmVuZG9ycy4gVGhlIGRy aXZlciBmb3IgaXQgbGl2ZXMgYXQKK2BgZHJpdmVycy92aXJ0L3ZtZ2VuaWQuY2BgCisKK1RoZSBg YHZtZ2VuaWRgYCBkcml2ZXIgZXhwb3NlcyBhIG1vbm90b25pYyBpbmNyZW1lbnRhbCBWaXJ0dWFs CitNYWNoaW5lIEdlbmVyYXRpb24gdTMyIGNvdW50ZXIgdmlhIGEgY2hhci1kZXYgRlMgaW50ZXJm YWNlIHRoYXQKK3Byb3ZpZGVzIHN5bmMgYW5kIGFzeW5jIFZtR2VuIGNvdW50ZXIgdXBkYXRlcyBu b3RpZmljYXRpb25zLiBJdCBhbHNvCitwcm92aWRlcyBWbUdlbiBjb3VudGVyIHJldHJpZXZhbCBh bmQgY29uZmlybWF0aW9uIG1lY2hhbmlzbXMuCisKK1RoaXMgY291bnRlciBhbmQgdGhlIGludGVy ZmFjZSB0aHJvdWdoIHdoaWNoIGl0IGlzIGV4cG9zZWQgYXJlCithdmFpbGFibGUgZXZlbiB3aGVu IHRoZXJlIGlzIG5vIGFjcGkgZGV2aWNlIHByZXNlbnQuCisKK1doZW4gdGhlIGRldmljZSBpcyBw cmVzZW50LCB0aGUgaHcgcHJvdmlkZWQgVVVJRCBpcyBub3QgZXhwb3NlZCB0bwordXNlcnNwYWNl LCBpdCBpcyBpbnRlcm5hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB0byBrZWVwIGFjY291bnRpbmcg Zm9yCit0aGUgZXhwb3NlZCBWbUdlbiBjb3VudGVyLiBUaGUgY291bnRlciBzdGFydHMgZnJvbSB6 ZXJvIHdoZW4gdGhlCitkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgYW5kIG1vbm90b25pY2FsbHkgaW5j cmVtZW50cyBldmVyeSB0aW1lIHRoZSBodworVVVJRCBjaGFuZ2VzICh0aGUgVk0gZ2VuZXJhdGlv biBjaGFuZ2VzKS4KK09uIGVhY2ggaHcgVVVJRCBjaGFuZ2UsIHRoZSBuZXcgVVVJRCBpcyBhbHNv IGZlZCB0byB0aGUga2VybmVsIFJORy4KKworSWYgdGhlcmUgaXMgbm8gYWNwaSB2bWdlbmlkIGRl dmljZSBwcmVzZW50LCB0aGUgZ2VuZXJhdGlvbiBjaGFuZ2VzIGFyZQorbm90IGRyaXZlbiBieSBo dyB2bWdlbmlkIGV2ZW50cyBhbmQgdGh1cyBzaG91bGQgYmUgZHJpdmVuIGJ5IHNvZnR3YXJlCit0 aHJvdWdoIGEgZGVkaWNhdGVkIGRyaXZlciBpb2N0bC4KKworRHJpdmVyIGludGVyZmFjZToKKwor YGBvcGVuKClgYDoKK8KgIFdoZW4gdGhlIGRldmljZSBpcyBvcGVuZWQsIGEgY29weSBvZiB0aGUg Y3VycmVudCBWbS1HZW4tSWQgKGNvdW50ZXIpCivCoCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9w ZW4gZmlsZSBkZXNjcmlwdG9yLiBUaGUgZHJpdmVyIG5vdyB0cmFja3MKK8KgIHRoaXMgZmlsZSBh cyBhbiBpbmRlcGVuZGVudCAqd2F0Y2hlciouIFRoZSBkcml2ZXIgdHJhY2tzIGhvdyBtYW55CivC oCB3YXRjaGVycyBhcmUgYXdhcmUgb2YgdGhlIGxhdGVzdCBWbS1HZW4tSWQgY291bnRlciBhbmQg aG93IG1hbnkgb2YKK8KgIHRoZW0gYXJlICpvdXRkYXRlZCo7IG91dGRhdGVkIGJlaW5nIHRob3Nl IHRoYXQgaGF2ZSBsaXZlZCB0aHJvdWdoCivCoCBhIFZtLUdlbi1JZCBjaGFuZ2UgYnV0IG5vdCB5 ZXQgY29uZmlybWVkIHRoZSBuZXcgZ2VuZXJhdGlvbiBjb3VudGVyLgorCitgYHJlYWQoKWBgOgor wqAgUmVhZCBpcyBtZWFudCB0byBwcm92aWRlIHRoZSAqbmV3KiBWTSBnZW5lcmF0aW9uIGNvdW50 ZXIgd2hlbiBhCivCoCBnZW5lcmF0aW9uIGNoYW5nZSB0YWtlcyBwbGFjZS4gVGhlIHJlYWQgb3Bl cmF0aW9uIGJsb2NrcyB1bnRpbCB0aGUKK8KgIGFzc29jaWF0ZWQgY291bnRlciBpcyBubyBsb25n ZXIgdXAgdG8gZGF0ZSAtIHVudGlsIEhXIHZtIGdlbiBpZAorwqAgY2hhbmdlcyAtIGF0IHdoaWNo IHBvaW50IHRoZSBuZXcgY291bnRlciBpcyBwcm92aWRlZC9yZXR1cm5lZC4KK8KgIE5vbmJsb2Nr aW5nIGBgcmVhZCgpYGAgdXNlcyBgYEVBR0FJTmBgIHRvIHNpZ25hbCB0aGF0IHRoZXJlIGlzIG5v CivCoCAqbmV3KiBjb3VudGVyIHZhbHVlIGF2YWlsYWJsZS4gVGhlIGdlbmVyYXRpb24gY291bnRl ciBpcyBjb25zaWRlcmVkCivCoCAqbmV3KiBmb3IgZWFjaCBvcGVuIGZpbGUgZGVzY3JpcHRvciB0 aGF0IGhhc24ndCBjb25maXJtZWQgdGhlIG5ldworwqAgdmFsdWUsIGZvbGxvd2luZyBhIGdlbmVy YXRpb24gY2hhbmdlLiBUaGVyZWZvcmUsIG9uY2UgYSBnZW5lcmF0aW9uCivCoCBjaGFuZ2UgdGFr ZXMgcGxhY2UsIGFsbCBgYHJlYWQoKWBgIGNhbGxzIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHRo ZQorwqAgbmV3IGdlbmVyYXRpb24gY291bnRlciBhbmQgd2lsbCBjb250aW51ZSB0byBkbyBzbyB1 bnRpbCB0aGUKK8KgIG5ldyB2YWx1ZSBpcyBjb25maXJtZWQgYmFjayB0byB0aGUgZHJpdmVyIHRo cm91Z2ggYGB3cml0ZSgpYGAuCivCoCBQYXJ0aWFsIHJlYWRzIGFyZSBub3QgYWxsb3dlZCAtIHJl YWQgYnVmZmVyIG5lZWRzIHRvIGJlIGF0IGxlYXN0CivCoCBgYHNpemVvZih1bnNpZ25lZClgYCBp biBzaXplLgorCitgYHdyaXRlKClgYDoKK8KgIFdyaXRlIGlzIHVzZWQgdG8gY29uZmlybSB0aGUg dXAtdG8tZGF0ZSBWbSBHZW4gY291bnRlciBiYWNrIHRvIHRoZQorwqAgZHJpdmVyLgorwqAgRm9s bG93aW5nIGEgVk0gZ2VuZXJhdGlvbiBjaGFuZ2UsIGFsbCBleGlzdGluZyB3YXRjaGVycyBhcmUg bWFya2VkCivCoCBhcyAqb3V0ZGF0ZWQqLiBFYWNoIGZpbGUgZGVzY3JpcHRvciB3aWxsIG1haW50 YWluIHRoZSAqb3V0ZGF0ZWQqCivCoCBzdGF0dXMgdW50aWwgYSBgYHdyaXRlKClgYCBjb25maXJt cyB0aGUgdXAtdG8tZGF0ZSBjb3VudGVyIGJhY2sgdG8KK8KgIHRoZSBkcml2ZXIuCivCoCBQYXJ0 aWFsIHdyaXRlcyBhcmUgbm90IGFsbG93ZWQgLSB3cml0ZSBidWZmZXIgc2hvdWxkIGJlIGV4YWN0 bHkKK8KgIGBgc2l6ZW9mKHVuc2lnbmVkKWBgIGluIHNpemUuCisKK2BgcG9sbCgpYGA6CivCoCBQ b2xsIGlzIGltcGxlbWVudGVkIHRvIGFsbG93IHBvbGxpbmcgZm9yIGdlbmVyYXRpb24gY291bnRl ciB1cGRhdGVzLgorwqAgU3VjaCB1cGRhdGVzIHJlc3VsdCBpbiBgYEVQT0xMSU5gYCBwb2xsaW5n IHN0YXR1cyB1bnRpbCB0aGUgbmV3CivCoCB1cC10by1kYXRlIGNvdW50ZXIgaXMgY29uZmlybWVk IGJhY2sgdG8gdGhlIGRyaXZlciB0aHJvdWdoIGEKK8KgIGBgd3JpdGUoKWBgLgorCitgYGlvY3Rs KClgYDoKK8KgIFRoZSBkcml2ZXIgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGNvdW50 IG9mIG9wZW4gZmlsZQorwqAgZGVzY3JpcHRvcnMgdGhhdCBoYXZlbid0IGFja25vd2xlZGdlZCBh IGdlbmVyYXRpb24gY291bnRlciB1cGRhdGUuCivCoCBUaGlzIGlzIGV4cG9zZWQgdGhyb3VnaCB0 d28gSU9DVExzOgorCivCoCAtIFZNR0VOSURfR0VUX09VVERBVEVEX1dBVENIRVJTOiBpbW1lZGlh dGVseSByZXR1cm5zIHRoZSBudW1iZXIgb2YKK8KgwqDCoCAqb3V0ZGF0ZWQqIHdhdGNoZXJzIC0g bnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCB3ZXJlIG9wZW4KK8KgwqDCoCBkdXJpbmcg YSBWTSBnZW5lcmF0aW9uIGNoYW5nZSwgYW5kIHdoaWNoIGhhdmUgbm90IHlldCBjb25maXJtZWQg dGhlCivCoMKgwqAgbmV3IGdlbmVyYXRpb24gY291bnRlci4KK8KgIC0gVk1HRU5JRF9XQUlUX1dB VENIRVJTOiBibG9ja3MgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgKm91dGRhdGVkKgorwqDCoMKg IHdhdGNoZXJzLCBvciBpZiBhIGBgdGltZW91dGBgIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB1bnRp bCB0aGUKK8KgwqDCoCB0aW1lb3V0IGV4cGlyZXMuCivCoMKgwqAgSWYgdGhlIGN1cnJlbnQgY2Fs bGVyIGlzICpvdXRkYXRlZCogb3IgYSBnZW5lcmF0aW9uIGNoYW5nZSBoYXBwZW5zCivCoMKgwqAg d2hpbGUgd2FpdGluZyAodGh1cyBtYWtpbmcgY3VycmVudCBjYWxsZXIgKm91dGRhdGVkKiksIHRo ZSBpb2N0bAorwqDCoMKgIHJldHVybnMgYGAtRUlOVFJgYCB0byBzaWduYWwgdGhlIHVzZXIgdG8g aGFuZGxlIGV2ZW50IGFuZCByZXRyeS4KK8KgIC0gVk1HRU5JRF9GT1JDRV9HRU5fVVBEQVRFOiBm b3JjZXMgYSBnZW5lcmF0aW9uIGNvdW50ZXIgYnVtcC4gQ2FuIG9ubHkKK8KgwqDCoCBiZSB1c2Vk IGJ5IHByb2Nlc3NlcyB3aXRoIENBUF9DSEVDS1BPSU5UX1JFU1RPUkUgb3IgQ0FQX1NZU19BRE1J TgorwqDCoMKgIGNhcGFiaWxpdGllcy4KKworYGBtbWFwKClgYDoKK8KgIFRoZSBkcml2ZXIgc3Vw cG9ydHMgYGBQUk9UX1JFQUQsIE1BUF9TSEFSRURgYCBtbWFwcyBvZiBhIHNpbmdsZSBwYWdlCivC oCBpbiBzaXplLiBUaGUgZmlyc3QgNCBieXRlcyBvZiB0aGUgbWFwcGVkIHBhZ2Ugd2lsbCBjb250 YWluIGFuCivCoCB1cC10by1kYXRlIGNvcHkgb2YgdGhlIFZNIGdlbmVyYXRpb24gY291bnRlci4K K8KgIFRoZSBtYXBwZWQgbWVtb3J5IGNhbiBiZSB1c2VkIGFzIGEgbG93LWxhdGVuY3kgZ2VuZXJh dGlvbiBjb3VudGVyCivCoCBwcm9iZSBtZWNoYW5pc20gaW4gY3JpdGljYWwgc2VjdGlvbnMgLSBz ZWUgZXhhbXBsZXMuCisKK2BgY2xvc2UoKWBgOgorwqAgUmVtb3ZlcyB0aGUgZmlsZSBkZXNjcmlw dG9yIGFzIGEgVm0gZ2VuZXJhdGlvbiBjb3VudGVyIHdhdGNoZXIuCisKK0V4YW1wbGUgYXBwbGlj YXRpb24gd29ya2Zsb3dzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxKSBXYXRj aGRvZyB0aHJlYWQgc2ltcGxpZmllZCBleGFtcGxlOjoKKworwqDCoMKgIHZvaWQgd2F0Y2hkb2df dGhyZWFkX2hhbmRsZXIoaW50ICp0aHJlYWRfYWN0aXZlKQorwqDCoMKgIHsKK8KgwqDCoCDCoMKg wqAgdW5zaWduZWQgZ2VuaWQ7CivCoMKgwqAgwqDCoMKgIGludCBmZCA9IG9wZW4oIi9kZXYvdm1n ZW5pZCIsIE9fUkRXUiB8IE9fQ0xPRVhFQywgU19JUlVTUiB8ClNfSVdVU1IpOworCivCoMKgwqAg wqDCoMKgIGRvIHsKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIC8vIHJlYWQgbmV3IGdlbiBJRCAtIGJs b2NrcyB1bnRpbCBWTSBnZW5lcmF0aW9uIGNoYW5nZXMKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIHJl YWQoZmQsICZnZW5pZCwgc2l6ZW9mKGdlbmlkKSk7CisKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIC8v IGJlY2F1c2Ugb2YgVk0gZ2VuZXJhdGlvbiBjaGFuZ2UsIHdlIG5lZWQgdG8gcmVidWlsZCB3b3Js ZAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgcmVzZWVkX2FwcF9lbnYoKTsKKworwqDCoMKgIMKgwqDC oCDCoMKgwqAgLy8gY29uZmlybSB3ZSdyZSBkb25lIGhhbmRsaW5nIGdlbiBJRCB1cGRhdGUKK8Kg wqDCoCDCoMKgwqAgwqDCoMKgIHdyaXRlKGZkLCAmZ2VuaWQsIHNpemVvZihnZW5pZCkpOworwqDC oMKgIMKgwqDCoCB9IHdoaWxlIChhdG9taWNfcmVhZCh0aHJlYWRfYWN0aXZlKSk7CisKK8KgwqDC oCDCoMKgwqAgY2xvc2UoZmQpOworwqDCoMKgIH0KKworMikgQVNZTkMgc2ltcGxpZmllZCBleGFt cGxlOjoKKworwqDCoMKgIHZvaWQgaGFuZGxlX2lvX29uX3ZtZ2VuZmQoaW50IHZtZ2VuZmQpCivC oMKgwqAgeworwqDCoMKgIMKgwqDCoCB1bnNpZ25lZCBnZW5pZDsKKworwqDCoMKgIMKgwqDCoCAv LyByZWFkIG5ldyBnZW4gSUQgLSB3ZSBuZWVkIGl0IHRvIGNvbmZpcm0gd2UndmUgaGFuZGxlZCB1 cGRhdGUKK8KgwqDCoCDCoMKgwqAgcmVhZChmZCwgJmdlbmlkLCBzaXplb2YoZ2VuaWQpKTsKKwor wqDCoMKgIMKgwqDCoCAvLyBiZWNhdXNlIG9mIFZNIGdlbmVyYXRpb24gY2hhbmdlLCB3ZSBuZWVk IHRvIHJlYnVpbGQgd29ybGQKK8KgwqDCoCDCoMKgwqAgcmVzZWVkX2FwcF9lbnYoKTsKKworwqDC oMKgIMKgwqDCoCAvLyBjb25maXJtIHdlJ3JlIGRvbmUgaGFuZGxpbmcgdGhlIGdlbiBJRCB1cGRh dGUKK8KgwqDCoCDCoMKgwqAgd3JpdGUoZmQsICZnZW5pZCwgc2l6ZW9mKGdlbmlkKSk7CivCoMKg wqAgfQorCivCoMKgwqAgaW50IG1haW4oKSB7CivCoMKgwqAgwqDCoMKgIGludCBlcGZkLCB2bWdl bmZkOworwqDCoMKgIMKgwqDCoCBzdHJ1Y3QgZXBvbGxfZXZlbnQgZXY7CisKK8KgwqDCoCDCoMKg wqAgZXBmZCA9IGVwb2xsX2NyZWF0ZShFUE9MTF9RVUVVRV9MRU4pOworCivCoMKgwqAgwqDCoMKg IHZtZ2VuZmQgPSBvcGVuKCIvZGV2L3ZtZ2VuaWQiLAorwqDCoMKgIMKgwqDCoCDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIE9fUkRXUiB8IE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0ssCivCoMKg wqAgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU19JUlVTUiB8IFNfSVdVU1Ip OworCivCoMKgwqAgwqDCoMKgIC8vIHJlZ2lzdGVyIHZtZ2VuaWQgZm9yIHBvbGxpbmcKK8KgwqDC oCDCoMKgwqAgZXYuZXZlbnRzID0gRVBPTExJTjsKK8KgwqDCoCDCoMKgwqAgZXYuZGF0YS5mZCA9 IHZtZ2VuZmQ7CivCoMKgwqAgwqDCoMKgIGVwb2xsX2N0bChlcGZkLCBFUE9MTF9DVExfQURELCB2 bWdlbmZkLCAmZXYpOworCivCoMKgwqAgwqDCoMKgIC8vIHJlZ2lzdGVyIG90aGVyIHBhcnRzIG9m IHlvdXIgYXBwIGZvciBwb2xsaW5nCivCoMKgwqAgwqDCoMKgIC8vIC4uLgorCivCoMKgwqAgwqDC oMKgIHdoaWxlICgxKSB7CivCoMKgwqAgwqDCoMKgIMKgwqDCoCAvLyB3YWl0IGZvciBzb21ldGhp bmcgdG8gZG8uLi4KK8KgwqDCoCDCoMKgwqAgwqDCoMKgIGludCBuZmRzID0gZXBvbGxfd2FpdChl cGZkLCBldmVudHMsCivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgTUFYX0VQT0xMX0VWRU5U U19QRVJfUlVOLAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIEVQT0xMX1JVTl9USU1FT1VU KTsKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIGlmIChuZmRzIDwgMCkgZGllKCJFcnJvciBpbiBlcG9s bF93YWl0ISIpOworCivCoMKgwqAgwqDCoMKgIMKgwqDCoCAvLyBmb3IgZWFjaCByZWFkeSBmZAor wqDCoMKgIMKgwqDCoCDCoMKgwqAgZm9yKGludCBpID0gMDsgaSA8IG5mZHM7IGkrKykgeworwqDC oMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIGludCBmZCA9IGV2ZW50c1tpXS5kYXRhLmZkOworCivC oMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgaWYgKGZkID09IHZtZ2VuZmQpCivCoMKgwqAgwqDC oMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIGhhbmRsZV9pb19vbl92bWdlbmZkKHZtZ2VuZmQpOwor wqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIGVsc2UKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIMKg wqDCoCDCoMKgwqAgaGFuZGxlX3NvbWVfb3RoZXJfcGFydF9vZl90aGVfYXBwKGZkKTsKK8KgwqDC oCDCoMKgwqAgwqDCoMKgIH0KK8KgwqDCoCDCoMKgwqAgfQorCivCoMKgwqAgwqDCoMKgIHJldHVy biAwOworwqDCoMKgIH0KKworMykgTWFwcGVkIG1lbW9yeSBwb2xsaW5nIHNpbXBsaWZpZWQgZXhh bXBsZTo6CisKK8KgwqDCoCAvKgorwqDCoMKgIMKgKiBhcHAvbGlicmFyeSBmdW5jdGlvbiB0aGF0 IHByb3ZpZGVzIGNhY2hlZCBzZWNyZXRzCivCoMKgwqAgwqAqLworwqDCoMKgIGNoYXIgKiBzYWZl X2NhY2hlZF9zZWNyZXQoYXBwX2RhdGFfdCAqYXBwKQorwqDCoMKgIHsKK8KgwqDCoCDCoMKgwqAg Y2hhciAqc2VjcmV0OworwqDCoMKgIMKgwqDCoCB2b2xhdGlsZSB1bnNpZ25lZCAqY29uc3QgZ2Vu aWRfcHRyID0gZ2V0X3ZtZ2VuaWRfbWFwcGluZyhhcHApOworwqDCoMKgIGFnYWluOgorwqDCoMKg IMKgwqDCoCBzZWNyZXQgPSBfX2NhY2hlZF9zZWNyZXQoYXBwKTsKKworwqDCoMKgIMKgwqDCoCBp ZiAodW5saWtlbHkoKmdlbmlkX3B0ciAhPSBhcHAtPmNhY2hlZF9nZW5pZCkpIHsKK8KgwqDCoCDC oMKgwqAgwqDCoMKgIC8vIHJlYnVpbGQgd29ybGQgdGhlbiBjb25maXJtIHRoZSBnZW5pZCB1cGRh dGUgKHRocnUgd3JpdGUpCivCoMKgwqAgwqDCoMKgIMKgwqDCoCByZWJ1aWxkX2NhY2hlcyhhcHAp OworCivCoMKgwqAgwqDCoMKgIMKgwqDCoCBhcHAtPmNhY2hlZF9nZW5pZCA9ICpnZW5pZF9wdHI7 CivCoMKgwqAgwqDCoMKgIMKgwqDCoCBhY2tfdm1nZW5pZF91cGRhdGUoYXBwKTsKKworwqDCoMKg IMKgwqDCoCDCoMKgwqAgZ290byBhZ2FpbjsKK8KgwqDCoCDCoMKgwqAgfQorCivCoMKgwqAgwqDC oMKgIHJldHVybiBzZWNyZXQ7CivCoMKgwqAgfQorCis0KSBPcmNoZXN0cmF0b3Igc2ltcGxpZmll ZCBleGFtcGxlOjoKKworwqDCoMKgIC8qCivCoMKgwqAgwqAqIG9yY2hlc3RyYXRvciAtIG1hbmFn ZXMgbXVsdGlwbGUgYXBwcyBhbmQgbGlicmFyaWVzIHVzZWQgYnkgYSBzZXJ2aWNlCivCoMKgwqAg wqAqIGFuZCB0cmllcyB0byBtYWtlIHN1cmUgYWxsIHNlbnNpdGl2ZSBjb21wb25lbnRzIGdyYWNl ZnVsbHkgaGFuZGxlCivCoMKgwqAgwqAqIFZNIGdlbmVyYXRpb24gY2hhbmdlcy4KK8KgwqDCoCDC oCogRm9sbG93aW5nIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBkZXRlY3Rpb24gb2YgYSBWTSBnZW5l cmF0aW9uIGNoYW5nZS4KK8KgwqDCoCDCoCovCivCoMKgwqAgaW50IGhhbmRsZV92bWdlbl91cGRh dGUoaW50IHZtZ2VuX2ZkLCB1bnNpZ25lZCBuZXdfZ2VuX2lkKQorwqDCoMKgIHsKK8KgwqDCoCDC oMKgwqAgLy8gcGF1c2UgdW50aWwgYWxsIGNvbXBvbmVudHMgaGF2ZSBoYW5kbGVkIGV2ZW50CivC oMKgwqAgwqDCoMKgIHBhdXNlX3NlcnZpY2UoKTsKKworwqDCoMKgIMKgwqDCoCAvLyBjb25maXJt ICp0aGlzKiB3YXRjaGVyIGFzIHVwLXRvLWRhdGUKK8KgwqDCoCDCoMKgwqAgd3JpdGUodm1nZW5f ZmQsICZuZXdfZ2VuX2lkLCBzaXplb2YodW5zaWduZWQpKTsKKworwqDCoMKgIMKgwqDCoCAvLyB3 YWl0IGZvciBhbGwgKm90aGVycyogZm9yIGF0IG1vc3QgNSBzZWNvbmRzLgorwqDCoMKgIMKgwqDC oCBpb2N0bCh2bWdlbl9mZCwgVk1HRU5JRF9XQUlUX1dBVENIRVJTLCA1MDAwKTsKKworwqDCoMKg IMKgwqDCoCAvLyBhbGwgYXBwcyBvbiB0aGUgc3lzdGVtIGhhdmUgcmVidWlsdCB3b3JsZHMKK8Kg wqDCoCDCoMKgwqAgcmVzdW1lX3NlcnZpY2UoKTsKK8KgwqDCoCB9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpcnQvS2NvbmZpZyBiL2RyaXZlcnMvdmlydC9LY29uZmlnCmluZGV4IDgwYzVmOWMxLi41 ZDVmMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnQvS2NvbmZpZworKysgYi9kcml2ZXJzL3Zp cnQvS2NvbmZpZwpAQCAtMTMsNiArMTMsMjMgQEAgbWVudWNvbmZpZyBWSVJUX0RSSVZFUlMKwqAK wqBpZiBWSVJUX0RSSVZFUlMKwqAKK2NvbmZpZyBWTUdFTklECivCoMKgwqAgdHJpc3RhdGUgIlZp cnR1YWwgTWFjaGluZSBHZW5lcmF0aW9uIElEIGRyaXZlciIKK8KgwqDCoCBkZXBlbmRzIG9uIEFD UEkKK8KgwqDCoCBkZWZhdWx0IE4KK8KgwqDCoCBoZWxwCivCoMKgwqAgwqAgVGhpcyBpcyBhIFZp cnR1YWwgTWFjaGluZSBHZW5lcmF0aW9uIElEIGRyaXZlciB3aGljaCBwcm92aWRlcworwqDCoMKg IMKgIGEgdmlydHVhbCBtYWNoaW5lIGdlbmVyYXRpb24gY291bnRlci4gVGhlIGRyaXZlciBleHBv c2VzIEZTIG9wcworwqDCoMKgIMKgIG9uIC9kZXYvdm1nZW5pZCB0aHJvdWdoIHdoaWNoIGl0IGNh biBwcm92aWRlIGluZm9ybWF0aW9uIGFuZAorwqDCoMKgIMKgIG5vdGlmaWNhdGlvbnMgb24gVk0g Z2VuZXJhdGlvbiBjaGFuZ2VzIHRoYXQgaGFwcGVuIG9uIHNuYXBzaG90cworwqDCoMKgIMKgIG9y IGNsb25pbmcuCivCoMKgwqAgwqAgVGhpcyBlbmFibGVzIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFy aWVzIHRoYXQgc3RvcmUgb3IgY2FjaGUKK8KgwqDCoCDCoCBzZW5zaXRpdmUgaW5mb3JtYXRpb24s IHRvIGtub3cgdGhhdCB0aGV5IG5lZWQgdG8gcmVnZW5lcmF0ZSBpdAorwqDCoMKgIMKgIGFmdGVy IHByb2Nlc3MgbWVtb3J5IGhhcyBiZWVuIGV4cG9zZWQgdG8gcG90ZW50aWFsIGNvcHlpbmcuCisK K8KgwqDCoCDCoCBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBo ZXJlOiB0aGUKK8KgwqDCoCDCoCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdm1nZW5pZC4KKwrCoGNv bmZpZyBGU0xfSFZfTUFOQUdFUgrCoMKgwqDCoCB0cmlzdGF0ZSAiRnJlZXNjYWxlIGh5cGVydmlz b3IgbWFuYWdlbWVudCBkcml2ZXIiCsKgwqDCoMKgIGRlcGVuZHMgb24gRlNMX1NPQwpkaWZmIC0t Z2l0IGEvZHJpdmVycy92aXJ0L01ha2VmaWxlIGIvZHJpdmVycy92aXJ0L01ha2VmaWxlCmluZGV4 IGYyODQyNWMuLjg4OWJlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydC9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL3ZpcnQvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACsKgIwrCoArCoG9iai0kKENP TkZJR19GU0xfSFZfTUFOQUdFUinCoMKgwqAgKz0gZnNsX2h5cGVydmlzb3Iubworb2JqLSQoQ09O RklHX1ZNR0VOSUQpwqDCoMKgIMKgwqDCoCArPSB2bWdlbmlkLm8KwqBvYmotecKgwqDCoCDCoMKg wqAgwqDCoMKgIMKgwqDCoCArPSB2Ym94Z3Vlc3QvCsKgCsKgb2JqLSQoQ09ORklHX05JVFJPX0VO Q0xBVkVTKcKgwqDCoCArPSBuaXRyb19lbmNsYXZlcy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmly dC92bWdlbmlkLmMgYi9kcml2ZXJzL3ZpcnQvdm1nZW5pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmM0ZDQ2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpcnQv dm1nZW5pZC5jCkBAIC0wLDAgKzEsNDM1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorLyoKKyAqIFZpcnR1YWwgTWFjaGluZSBHZW5lcmF0aW9uIElEIGRyaXZlcgorICoK KyAqIENvcHlyaWdodCAoQykgMjAxOCBSZWQgSGF0IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQW1hem9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqwqDCoMKgIEF1dGhvcnM6CisgKsKgwqDCoCDCoCBBZHJpYW4gQ2F0YW5naXUgPGFjYXRh bkBhbWF6b24uY29tPgorICrCoMKgwqAgwqAgT3IgSWRnYXIgPG9yaWRnYXJAZ21haWwuY29tPgor ICrCoMKgwqAgwqAgR2FsIEhhbW1lciA8Z2hhbW1lckByZWRoYXQuY29tPgorICoKKyAqLworI2lu Y2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgv cmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvdXVpZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtZ2Vu aWQuaD4KKworI2RlZmluZSBERVZfTkFNRSAidm1nZW5pZCIKK0FDUElfTU9EVUxFX05BTUUoREVW X05BTUUpOworCitzdHJ1Y3QgYWNwaV9kYXRhIHsKK8KgwqDCoCB1dWlkX3QgdXVpZDsKK8KgwqDC oCB2b2lkwqDCoCAqdXVpZF9pb21hcDsKK307CisKK3N0cnVjdCBkcml2ZXJfZGF0YSB7CivCoMKg wqAgdW5zaWduZWQgbG9uZ8KgwqDCoMKgIG1hcF9idWY7CivCoMKgwqAgd2FpdF9xdWV1ZV9oZWFk X3QgcmVhZF93YWl0cTsKK8KgwqDCoCBhdG9taWNfdMKgwqDCoMKgwqDCoMKgwqDCoCBnZW5lcmF0 aW9uX2NvdW50ZXI7CisKK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgIHdhdGNoZXJzOwor wqDCoMKgIGF0b21pY190wqDCoMKgwqDCoMKgwqDCoMKgIG91dGRhdGVkX3dhdGNoZXJzOworwqDC oMKgIHdhaXRfcXVldWVfaGVhZF90IG91dGRhdGVkX3dhaXRxOworwqDCoMKgIHNwaW5sb2NrX3TC oMKgwqDCoMKgwqDCoCBsb2NrOworCivCoMKgwqAgc3RydWN0IGFjcGlfZGF0YcKgICphY3BpX2Rh dGE7Cit9Oworc3RydWN0IGRyaXZlcl9kYXRhIGRyaXZlcl9kYXRhOworCitzdHJ1Y3QgZmlsZV9k YXRhIHsKK8KgwqDCoCB1bnNpZ25lZCBpbnQgYWNrZWRfZ2VuX2NvdW50ZXI7Cit9OworCitzdGF0 aWMgaW50IGVxdWFsc19nZW5fY291bnRlcih1bnNpZ25lZCBpbnQgY291bnRlcikKK3sKK8KgwqDC oCByZXR1cm4gY291bnRlciA9PSBhdG9taWNfcmVhZCgmZHJpdmVyX2RhdGEuZ2VuZXJhdGlvbl9j b3VudGVyKTsKK30KKworc3RhdGljIHZvaWQgdm1nZW5pZF9idW1wX2dlbmVyYXRpb24odm9pZCkK K3sKK8KgwqDCoCB1bnNpZ25lZCBsb25nIGZsYWdzOworwqDCoMKgIGludCBjb3VudGVyOworCivC oMKgwqAgc3Bpbl9sb2NrX2lycXNhdmUoJmRyaXZlcl9kYXRhLmxvY2ssIGZsYWdzKTsKK8KgwqDC oCBjb3VudGVyID0gYXRvbWljX2luY19yZXR1cm4oJmRyaXZlcl9kYXRhLmdlbmVyYXRpb25fY291 bnRlcik7CivCoMKgwqAgKigoaW50ICopIGRyaXZlcl9kYXRhLm1hcF9idWYpID0gY291bnRlcjsK K8KgwqDCoCBhdG9taWNfc2V0KCZkcml2ZXJfZGF0YS5vdXRkYXRlZF93YXRjaGVycywgZHJpdmVy X2RhdGEud2F0Y2hlcnMpOworCivCoMKgwqAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkcml2ZXJf ZGF0YS5yZWFkX3dhaXRxKTsKK8KgwqDCoCB3YWtlX3VwX2ludGVycnVwdGlibGUoJmRyaXZlcl9k YXRhLm91dGRhdGVkX3dhaXRxKTsKK8KgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcml2 ZXJfZGF0YS5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHZtZ2VuaWRfcHV0X291dGRh dGVkX3dhdGNoZXJzKHZvaWQpCit7CivCoMKgwqAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRy aXZlcl9kYXRhLm91dGRhdGVkX3dhdGNoZXJzKSkKK8KgwqDCoCDCoMKgwqAgd2FrZV91cF9pbnRl cnJ1cHRpYmxlKCZkcml2ZXJfZGF0YS5vdXRkYXRlZF93YWl0cSk7Cit9CisKK3N0YXRpYyBpbnQg dm1nZW5pZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorewor wqDCoMKgIHN0cnVjdCBmaWxlX2RhdGEgKmZkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZp bGVfZGF0YSksCkdGUF9LRVJORUwpOworwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKK8Kg wqDCoCBpZiAoIWZkYXRhKQorwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVOT01FTTsKKworwqDCoMKg IHNwaW5fbG9ja19pcnFzYXZlKCZkcml2ZXJfZGF0YS5sb2NrLCBmbGFncyk7CivCoMKgwqAgZmRh dGEtPmFja2VkX2dlbl9jb3VudGVyID0KYXRvbWljX3JlYWQoJmRyaXZlcl9kYXRhLmdlbmVyYXRp b25fY291bnRlcik7CivCoMKgwqAgKytkcml2ZXJfZGF0YS53YXRjaGVyczsKK8KgwqDCoCBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkcml2ZXJfZGF0YS5sb2NrLCBmbGFncyk7CisKK8KgwqDCoCBm aWxlLT5wcml2YXRlX2RhdGEgPSBmZGF0YTsKKworwqDCoMKgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHZtZ2VuaWRfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZp bGUpCit7CivCoMKgwqAgc3RydWN0IGZpbGVfZGF0YSAqZmRhdGEgPSBmaWxlLT5wcml2YXRlX2Rh dGE7CivCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworwqDCoMKgIHNwaW5fbG9ja19pcnFz YXZlKCZkcml2ZXJfZGF0YS5sb2NrLCBmbGFncyk7CivCoMKgwqAgaWYgKCFlcXVhbHNfZ2VuX2Nv dW50ZXIoZmRhdGEtPmFja2VkX2dlbl9jb3VudGVyKSkKK8KgwqDCoCDCoMKgwqAgdm1nZW5pZF9w dXRfb3V0ZGF0ZWRfd2F0Y2hlcnMoKTsKK8KgwqDCoCAtLWRyaXZlcl9kYXRhLndhdGNoZXJzOwor wqDCoMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRyaXZlcl9kYXRhLmxvY2ssIGZsYWdzKTsK KworwqDCoMKgIGtmcmVlKGZkYXRhKTsKKworwqDCoMKgIHJldHVybiAwOworfQorCitzdGF0aWMg c3NpemVfdAordm1nZW5pZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1 Ziwgc2l6ZV90IG5ieXRlcywKbG9mZl90ICpwcG9zKQoreworwqDCoMKgIHN0cnVjdCBmaWxlX2Rh dGEgKmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworwqDCoMKgIHNzaXplX3QgcmV0OworwqDC oMKgIGludCBnZW5fY291bnRlcjsKKworwqDCoMKgIGlmIChuYnl0ZXMgPT0gMCkKK8KgwqDCoCDC oMKgwqAgcmV0dXJuIDA7CivCoMKgwqAgLyogZGlzYWxsb3cgcGFydGlhbCByZWFkcyAqLworwqDC oMKgIGlmIChuYnl0ZXMgPCBzaXplb2YoZ2VuX2NvdW50ZXIpKQorwqDCoMKgIMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKKworwqDCoMKgIGlmIChlcXVhbHNfZ2VuX2NvdW50ZXIoZmRhdGEtPmFja2Vk X2dlbl9jb3VudGVyKSkgeworwqDCoMKgIMKgwqDCoCBpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9O QkxPQ0spCivCoMKgwqAgwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVBR0FJTjsKK8KgwqDCoCDCoMKg wqAgcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKAorwqDCoMKgIMKgwqDCoCDCoMKgwqAg ZHJpdmVyX2RhdGEucmVhZF93YWl0cSwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgICFlcXVhbHNfZ2Vu X2NvdW50ZXIoZmRhdGEtPmFja2VkX2dlbl9jb3VudGVyKQorwqDCoMKgIMKgwqDCoCApOworwqDC oMKgIMKgwqDCoCBpZiAocmV0KQorwqDCoMKgIMKgwqDCoCDCoMKgwqAgcmV0dXJuIHJldDsKK8Kg wqDCoCB9CisKK8KgwqDCoCBnZW5fY291bnRlciA9IGF0b21pY19yZWFkKCZkcml2ZXJfZGF0YS5n ZW5lcmF0aW9uX2NvdW50ZXIpOworwqDCoMKgIHJldCA9IGNvcHlfdG9fdXNlcih1YnVmLCAmZ2Vu X2NvdW50ZXIsIHNpemVvZihnZW5fY291bnRlcikpOworwqDCoMKgIGlmIChyZXQpCivCoMKgwqAg wqDCoMKgIHJldHVybiAtRUZBVUxUOworCivCoMKgwqAgcmV0dXJuIHNpemVvZihnZW5fY291bnRl cik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZtZ2VuaWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUs IGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIHNp emVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworwqDCoMKgIHN0cnVjdCBmaWxlX2RhdGEgKmZk YXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworwqDCoMKgIHVuc2lnbmVkIGludCBuZXdfYWNrZWRf Z2VuOworwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKK8KgwqDCoCAvKiBkaXNhbGxvdyBw YXJ0aWFsIHdyaXRlcyAqLworwqDCoMKgIGlmIChjb3VudCAhPSBzaXplb2YobmV3X2Fja2VkX2dl bikpCivCoMKgwqAgwqDCoMKgIHJldHVybiAtRUlOVkFMOworwqDCoMKgIGlmIChjb3B5X2Zyb21f dXNlcigmbmV3X2Fja2VkX2dlbiwgdWJ1ZiwgY291bnQpKQorwqDCoMKgIMKgwqDCoCByZXR1cm4g LUVGQVVMVDsKKworwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKCZkcml2ZXJfZGF0YS5sb2NrLCBm bGFncyk7CivCoMKgwqAgLyogd3JvbmcgZ2VuLWNvdW50ZXIgYWNrbm93bGVkZ2VkICovCivCoMKg wqAgaWYgKCFlcXVhbHNfZ2VuX2NvdW50ZXIobmV3X2Fja2VkX2dlbikpIHsKK8KgwqDCoCDCoMKg wqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJpdmVyX2RhdGEubG9jaywgZmxhZ3MpOworwqDC oMKgIMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKK8KgwqDCoCB9CivCoMKgwqAgaWYgKCFlcXVhbHNf Z2VuX2NvdW50ZXIoZmRhdGEtPmFja2VkX2dlbl9jb3VudGVyKSkgeworwqDCoMKgIMKgwqDCoCBm ZGF0YS0+YWNrZWRfZ2VuX2NvdW50ZXIgPSBuZXdfYWNrZWRfZ2VuOworwqDCoMKgIMKgwqDCoCB2 bWdlbmlkX3B1dF9vdXRkYXRlZF93YXRjaGVycygpOworwqDCoMKgIH0KK8KgwqDCoCBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkcml2ZXJfZGF0YS5sb2NrLCBmbGFncyk7CisKK8KgwqDCoCByZXR1 cm4gKHNzaXplX3QpY291bnQ7Cit9CisKK3N0YXRpYyBfX3BvbGxfdAordm1nZW5pZF9wb2xsKHN0 cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworwqDCoMKgIF9fcG9sbF90IG1h c2sgPSAwOworwqDCoMKgIHN0cnVjdCBmaWxlX2RhdGEgKmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9k YXRhOworCivCoMKgwqAgaWYgKCFlcXVhbHNfZ2VuX2NvdW50ZXIoZmRhdGEtPmFja2VkX2dlbl9j b3VudGVyKSkKK8KgwqDCoCDCoMKgwqAgcmV0dXJuIEVQT0xMSU4gfCBFUE9MTFJETk9STTsKKwor wqDCoMKgIHBvbGxfd2FpdChmaWxlLCAmZHJpdmVyX2RhdGEucmVhZF93YWl0cSwgd2FpdCk7CisK K8KgwqDCoCBpZiAoIWVxdWFsc19nZW5fY291bnRlcihmZGF0YS0+YWNrZWRfZ2VuX2NvdW50ZXIp KQorwqDCoMKgIMKgwqDCoCBtYXNrID0gRVBPTExJTiB8IEVQT0xMUkROT1JNOworCivCoMKgwqAg cmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBsb25nIHZtZ2VuaWRfaW9jdGwoc3RydWN0IGZpbGUg KmZpbGUsCivCoMKgwqAgwqDCoMKgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJn KQoreworwqDCoMKgIHN0cnVjdCBmaWxlX2RhdGEgKmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRh OworwqDCoMKgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9uczsKK8KgwqDCoCBrdGltZV90IHVudGls OworwqDCoMKgIGludCByZXQgPSAwOworCivCoMKgwqAgc3dpdGNoIChjbWQpIHsKK8KgwqDCoCBj YXNlIFZNR0VOSURfR0VUX09VVERBVEVEX1dBVENIRVJTOgorwqDCoMKgIMKgwqDCoCByZXQgPSBh dG9taWNfcmVhZCgmZHJpdmVyX2RhdGEub3V0ZGF0ZWRfd2F0Y2hlcnMpOworwqDCoMKgIMKgwqDC oCBicmVhazsKK8KgwqDCoCBjYXNlIFZNR0VOSURfV0FJVF9XQVRDSEVSUzoKK8KgwqDCoCDCoMKg wqAgdGltZW91dF9ucyA9IGFyZyAqIE5TRUNfUEVSX01TRUM7CivCoMKgwqAgwqDCoMKgIHVudGls ID0gdGltZW91dF9ucyA/IGt0aW1lX3NldCgwLCB0aW1lb3V0X25zKSA6IEtUSU1FX01BWDsKKwor wqDCoMKgIMKgwqDCoCByZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfaHJ0aW1lb3V0KAor wqDCoMKgIMKgwqDCoCDCoMKgwqAgZHJpdmVyX2RhdGEub3V0ZGF0ZWRfd2FpdHEsCivCoMKgwqAg wqDCoMKgIMKgwqDCoCAoIWF0b21pY19yZWFkKCZkcml2ZXJfZGF0YS5vdXRkYXRlZF93YXRjaGVy cykgfHwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgIWVxdWFsc19nZW5fY291 bnRlcihmZGF0YS0+YWNrZWRfZ2VuX2NvdW50ZXIpKSwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIHVu dGlsCivCoMKgwqAgwqDCoMKgICk7CivCoMKgwqAgwqDCoMKgIGlmIChhdG9taWNfcmVhZCgmZHJp dmVyX2RhdGEub3V0ZGF0ZWRfd2F0Y2hlcnMpKQorwqDCoMKgIMKgwqDCoCDCoMKgwqAgcmV0ID0g LUVJTlRSOworwqDCoMKgIMKgwqDCoCBlbHNlCivCoMKgwqAgwqDCoMKgIMKgwqDCoCByZXQgPSAw OworwqDCoMKgIMKgwqDCoCBicmVhazsKK8KgwqDCoCBjYXNlIFZNR0VOSURfRk9SQ0VfR0VOX1VQ REFURToKK8KgwqDCoCDCoMKgwqAgaWYgKCFjaGVja3BvaW50X3Jlc3RvcmVfbnNfY2FwYWJsZShj dXJyZW50X3VzZXJfbnMoKSkpCivCoMKgwqAgwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVBQ0NFUzsK K8KgwqDCoCDCoMKgwqAgdm1nZW5pZF9idW1wX2dlbmVyYXRpb24oKTsKK8KgwqDCoCDCoMKgwqAg YnJlYWs7CivCoMKgwqAgZGVmYXVsdDoKK8KgwqDCoCDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKK8Kg wqDCoCDCoMKgwqAgYnJlYWs7CivCoMKgwqAgfQorwqDCoMKgIHJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgdm1nZW5pZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSkKK3sKK8KgwqDCoCBzdHJ1Y3QgZmlsZV9kYXRhICpmZGF0YSA9IGZpbGUtPnBy aXZhdGVfZGF0YTsKKworwqDCoMKgIGlmICh2bWEtPnZtX3Bnb2ZmICE9IDAgfHwgdm1hX3BhZ2Vz KHZtYSkgPiAxKQorwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKKworwqDCoMKgIGlmICgo dm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSAhPSAwKQorwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVQ RVJNOworCivCoMKgwqAgdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERV TVA7CivCoMKgwqAgdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CivCoMKgwqAgdm1hLT52 bV9wcml2YXRlX2RhdGEgPSBmZGF0YTsKKworwqDCoMKgIHJldHVybiB2bV9pbnNlcnRfcGFnZSh2 bWEsIHZtYS0+dm1fc3RhcnQsCivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKg wqDCoCDCoCB2aXJ0X3RvX3BhZ2UoZHJpdmVyX2RhdGEubWFwX2J1ZikpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0geworwqDCoMKgIC5vd25lcsKgwqDC oMKgwqDCoMKgwqDCoCA9IFRISVNfTU9EVUxFLAorwqDCoMKgIC5tbWFwwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSB2bWdlbmlkX21tYXAsCivCoMKgwqAgLm9wZW7CoMKgwqDCoMKgwqDCoMKgwqDCoCA9 IHZtZ2VuaWRfb3BlbiwKK8KgwqDCoCAucmVsZWFzZcKgwqDCoMKgwqDCoMKgID0gdm1nZW5pZF9j bG9zZSwKK8KgwqDCoCAucmVhZMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gdm1nZW5pZF9yZWFkLAor wqDCoMKgIC53cml0ZcKgwqDCoMKgwqDCoMKgwqDCoCA9IHZtZ2VuaWRfd3JpdGUsCivCoMKgwqAg LnBvbGzCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IHZtZ2VuaWRfcG9sbCwKK8KgwqDCoCAudW5sb2Nr ZWRfaW9jdGwgPSB2bWdlbmlkX2lvY3RsLAorfTsKKworc3RydWN0IG1pc2NkZXZpY2Ugdm1nZW5p ZF9taXNjID0geworwqDCoMKgIC5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUiwKK8KgwqDCoCAu bmFtZSA9ICJ2bWdlbmlkIiwKK8KgwqDCoCAuZm9wcyA9ICZmb3BzLAorfTsKKworc3RhdGljIGlu dCB2bWdlbmlkX2FjcGlfbWFwKHN0cnVjdCBhY3BpX2RhdGEgKnByaXYsIGFjcGlfaGFuZGxlIGhh bmRsZSkKK3sKK8KgwqDCoCBpbnQgaTsKK8KgwqDCoCBwaHlzX2FkZHJfdCBwaHlzX2FkZHI7CivC oMKgwqAgc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIs IE5VTEwgfTsKK8KgwqDCoCBhY3BpX3N0YXR1cyBzdGF0dXM7CivCoMKgwqAgdW5pb24gYWNwaV9v YmplY3QgKnBzczsKK8KgwqDCoCB1bmlvbiBhY3BpX29iamVjdCAqZWxlbWVudDsKKworwqDCoMKg IHN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkFERFIiLCBOVUxMLCAmYnVm ZmVyKTsKK8KgwqDCoCBpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKK8KgwqDCoCDCoMKgwqAg QUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV2YWx1YXRpbmcgQUREUiIpKTsKK8Kg wqDCoCDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7CivCoMKgwqAgfQorwqDCoMKgIHBzcyA9IGJ1ZmZl ci5wb2ludGVyOworwqDCoMKgIGlmICghcHNzIHx8IHBzcy0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFD S0FHRSB8fCBwc3MtPnBhY2thZ2UuY291bnQgIT0gMikKK8KgwqDCoCDCoMKgwqAgcmV0dXJuIC1F SU5WQUw7CisKK8KgwqDCoCBwaHlzX2FkZHIgPSAwOworwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBw c3MtPnBhY2thZ2UuY291bnQ7IGkrKykgeworwqDCoMKgIMKgwqDCoCBlbGVtZW50ID0gJihwc3Mt PnBhY2thZ2UuZWxlbWVudHNbaV0pOworwqDCoMKgIMKgwqDCoCBpZiAoZWxlbWVudC0+dHlwZSAh PSBBQ1BJX1RZUEVfSU5URUdFUikKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIHJldHVybiAtRUlOVkFM OworwqDCoMKgIMKgwqDCoCBwaHlzX2FkZHIgfD0gZWxlbWVudC0+aW50ZWdlci52YWx1ZSA8PCBp ICogMzI7CivCoMKgwqAgfQorCivCoMKgwqAgcHJpdi0+dXVpZF9pb21hcCA9IGFjcGlfb3NfbWFw X21lbW9yeShwaHlzX2FkZHIsIHNpemVvZih1dWlkX3QpKTsKK8KgwqDCoCBpZiAoIXByaXYtPnV1 aWRfaW9tYXApIHsKK8KgwqDCoCDCoMKgwqAgcHJfZXJyKCJDb3VsZCBub3QgbWFwIG1lbW9yeSBh dCAweCVsbHgsIHNpemUgJXVcbiIsCivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgIHBoeXNfYWRk ciwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqAgKHUzMikgc2l6ZW9mKHV1aWRfdCkpOworwqDC oMKgIMKgwqDCoCByZXR1cm4gLUVOT01FTTsKK8KgwqDCoCB9CisKK8KgwqDCoCBtZW1jcHlfZnJv bWlvKCZwcml2LT51dWlkLCBwcml2LT51dWlkX2lvbWFwLCBzaXplb2YodXVpZF90KSk7CisKK8Kg wqDCoCByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bWdlbmlkX2FjcGlfYWRkKHN0cnVjdCBh Y3BpX2RldmljZSAqZGV2aWNlKQoreworwqDCoMKgIGludCByZXQ7CisKK8KgwqDCoCBpZiAoIWRl dmljZSkKK8KgwqDCoCDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7CisKK8KgwqDCoCBkcml2ZXJfZGF0 YS5hY3BpX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9kYXRhKSwgR0ZQX0tFUk5F TCk7CivCoMKgwqAgaWYgKCFkcml2ZXJfZGF0YS5hY3BpX2RhdGEpIHsKK8KgwqDCoCDCoMKgwqAg cHJfZXJyKCJ2bWdlbmlkOiBmYWlsZWQgdG8gYWxsb2NhdGUgYWNwaV9kYXRhXG4iKTsKK8KgwqDC oCDCoMKgwqAgcmV0dXJuIC1FTk9NRU07CivCoMKgwqAgfQorwqDCoMKgIGRldmljZS0+ZHJpdmVy X2RhdGEgPSAmZHJpdmVyX2RhdGE7CisKK8KgwqDCoCByZXQgPSB2bWdlbmlkX2FjcGlfbWFwKGRy aXZlcl9kYXRhLmFjcGlfZGF0YSwgZGV2aWNlLT5oYW5kbGUpOworwqDCoMKgIGlmIChyZXQgPCAw KSB7CivCoMKgwqAgwqDCoMKgIHByX2Vycigidm1nZW5pZDogZmFpbGVkIHRvIG1hcCBhY3BpIGRl dmljZVxuIik7CivCoMKgwqAgwqDCoMKgIGdvdG8gZXJyOworwqDCoMKgIH0KKworwqDCoMKgIHJl dHVybiAwOworCitlcnI6CivCoMKgwqAga2ZyZWUoZHJpdmVyX2RhdGEuYWNwaV9kYXRhKTsKK8Kg wqDCoCBkcml2ZXJfZGF0YS5hY3BpX2RhdGEgPSBOVUxMOworCivCoMKgwqAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCB2bWdlbmlkX2FjcGlfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAq ZGV2aWNlKQoreworwqDCoMKgIHN0cnVjdCBhY3BpX2RhdGEgKnByaXY7CisKK8KgwqDCoCBpZiAo IWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQorwqDCoMKgIMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKKworwqDCoMKgIGRldmljZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworwqDCoMKg IHByaXYgPSBkcml2ZXJfZGF0YS5hY3BpX2RhdGE7CivCoMKgwqAgZHJpdmVyX2RhdGEuYWNwaV9k YXRhID0gTlVMTDsKKworwqDCoMKgIGlmIChwcml2ICYmIHByaXYtPnV1aWRfaW9tYXApCivCoMKg wqAgwqDCoMKgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHByaXYtPnV1aWRfaW9tYXAsIHNpemVvZih1 dWlkX3QpKTsKK8KgwqDCoCBrZnJlZShwcml2KTsKKworwqDCoMKgIHJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCB2bWdlbmlkX2FjcGlfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNl LCB1MzIgZXZlbnQpCit7CivCoMKgwqAgc3RydWN0IGFjcGlfZGF0YSAqcHJpdjsKK8KgwqDCoCB1 dWlkX3Qgb2xkX3V1aWQ7CisKK8KgwqDCoCBpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0 YShkZXZpY2UpKSB7CivCoMKgwqAgwqDCoMKgIHByX2VycigiVk1HRU5JRCBub3RpZnkgd2l0aCBO VUxMIHByaXZhdGUgZGF0YVxuIik7CivCoMKgwqAgwqDCoMKgIHJldHVybjsKK8KgwqDCoCB9CivC oMKgwqAgcHJpdiA9IGRyaXZlcl9kYXRhLmFjcGlfZGF0YTsKKworwqDCoMKgIC8qIHVwZGF0ZSBW TSBHZW5lcmF0aW9uIFVVSUQgKi8KK8KgwqDCoCBvbGRfdXVpZCA9IHByaXYtPnV1aWQ7CivCoMKg wqAgbWVtY3B5X2Zyb21pbygmcHJpdi0+dXVpZCwgcHJpdi0+dXVpZF9pb21hcCwgc2l6ZW9mKHV1 aWRfdCkpOworCivCoMKgwqAgaWYgKG1lbWNtcCgmb2xkX3V1aWQsICZwcml2LT51dWlkLCBzaXpl b2YodXVpZF90KSkpIHsKK8KgwqDCoCDCoMKgwqAgLyogSFcgdXVpZCB1cGRhdGVkICovCivCoMKg wqAgwqDCoMKgIHZtZ2VuaWRfYnVtcF9nZW5lcmF0aW9uKCk7CivCoMKgwqAgwqDCoMKgIGFkZF9k ZXZpY2VfcmFuZG9tbmVzcygmcHJpdi0+dXVpZCwgc2l6ZW9mKHV1aWRfdCkpOworwqDCoMKgIH0K K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCB2bWdlbmlkX2lkc1tdID0g eworwqDCoMKgIHsiUUVNVVZHSUQiLCAwfSwKK8KgwqDCoCB7IiIsIDB9LAorfTsKKworc3RhdGlj IHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3ZtZ2VuaWRfZHJpdmVyID0geworwqDCoMKgIC5uYW1l ID0gInZtX2dlbmVyYXRpb25faWQiLAorwqDCoMKgIC5pZHMgPSB2bWdlbmlkX2lkcywKK8KgwqDC oCAub3duZXIgPSBUSElTX01PRFVMRSwKK8KgwqDCoCAub3BzID0geworwqDCoMKgIMKgwqDCoCAu YWRkID0gdm1nZW5pZF9hY3BpX2FkZCwKK8KgwqDCoCDCoMKgwqAgLnJlbW92ZSA9IHZtZ2VuaWRf YWNwaV9yZW1vdmUsCivCoMKgwqAgwqDCoMKgIC5ub3RpZnkgPSB2bWdlbmlkX2FjcGlfbm90aWZ5 LAorwqDCoMKgIH0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZtZ2VuaWRfaW5pdCh2b2lkKQor eworwqDCoMKgIGludCByZXQ7CisKK8KgwqDCoCBkcml2ZXJfZGF0YS5tYXBfYnVmID0gZ2V0X3pl cm9lZF9wYWdlKEdGUF9LRVJORUwpOworwqDCoMKgIGlmICghZHJpdmVyX2RhdGEubWFwX2J1ZikK K8KgwqDCoCDCoMKgwqAgcmV0dXJuIC1FTk9NRU07CisKK8KgwqDCoCBhdG9taWNfc2V0KCZkcml2 ZXJfZGF0YS5nZW5lcmF0aW9uX2NvdW50ZXIsIDApOworwqDCoMKgIGF0b21pY19zZXQoJmRyaXZl cl9kYXRhLm91dGRhdGVkX3dhdGNoZXJzLCAwKTsKK8KgwqDCoCBpbml0X3dhaXRxdWV1ZV9oZWFk KCZkcml2ZXJfZGF0YS5yZWFkX3dhaXRxKTsKK8KgwqDCoCBpbml0X3dhaXRxdWV1ZV9oZWFkKCZk cml2ZXJfZGF0YS5vdXRkYXRlZF93YWl0cSk7CivCoMKgwqAgc3Bpbl9sb2NrX2luaXQoJmRyaXZl cl9kYXRhLmxvY2spOworwqDCoMKgIGRyaXZlcl9kYXRhLmFjcGlfZGF0YSA9IE5VTEw7CisKK8Kg wqDCoCByZXQgPSBtaXNjX3JlZ2lzdGVyKCZ2bWdlbmlkX21pc2MpOworwqDCoMKgIGlmIChyZXQg PCAwKSB7CivCoMKgwqAgwqDCoMKgIHByX2VycigibWlzY19yZWdpc3RlcigpIGZhaWxlZCBmb3Ig dm1nZW5pZFxuIik7CivCoMKgwqAgwqDCoMKgIGdvdG8gZXJyOworwqDCoMKgIH0KKworwqDCoMKg IHJldCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV92bWdlbmlkX2RyaXZlcik7CivC oMKgwqAgaWYgKHJldCA8IDApCivCoMKgwqAgwqDCoMKgIHByX3dhcm4oIk5vIHZtZ2VuaWQgYWNw aSBkZXZpY2UgZm91bmRcbiIpOworCivCoMKgwqAgcmV0dXJuIDA7CisKK2VycjoKK8KgwqDCoCBm cmVlX3BhZ2VzKGRyaXZlcl9kYXRhLm1hcF9idWYsIDApOworwqDCoMKgIGRyaXZlcl9kYXRhLm1h cF9idWYgPSAwOworCivCoMKgwqAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0 IHZtZ2VuaWRfZXhpdCh2b2lkKQoreworwqDCoMKgIGFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVy KCZhY3BpX3ZtZ2VuaWRfZHJpdmVyKTsKKworwqDCoMKgIG1pc2NfZGVyZWdpc3Rlcigmdm1nZW5p ZF9taXNjKTsKK8KgwqDCoCBmcmVlX3BhZ2VzKGRyaXZlcl9kYXRhLm1hcF9idWYsIDApOworwqDC oMKgIGRyaXZlcl9kYXRhLm1hcF9idWYgPSAwOworfQorCittb2R1bGVfaW5pdCh2bWdlbmlkX2lu aXQpOworbW9kdWxlX2V4aXQodm1nZW5pZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWRyaWFu IENhdGFuZ2l1Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlZpcnR1YWwgTWFjaGluZSBHZW5lcmF0 aW9uIElEIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7 CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdm1nZW5pZC5oIGIvaW5jbHVkZS91YXBp L2xpbnV4L3ZtZ2VuaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzE2 YjAwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZtZ2VuaWQuaApAQCAt MCwwICsxLDE0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgV0lUSCBM aW51eC1zeXNjYWxsLW5vdGUgKi8KKworI2lmbmRlZiBfVUFQSV9MSU5VWF9WTUdFTklEX0gKKyNk ZWZpbmUgX1VBUElfTElOVVhfVk1HRU5JRF9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgor CisjZGVmaW5lIFZNR0VOSURfSU9DVEwgMHgyZAorI2RlZmluZSBWTUdFTklEX0dFVF9PVVREQVRF RF9XQVRDSEVSUyBfSU8oVk1HRU5JRF9JT0NUTCwgMSkKKyNkZWZpbmUgVk1HRU5JRF9XQUlUX1dB VENIRVJTwqDCoMKgwqDCoMKgwqDCoCBfSU8oVk1HRU5JRF9JT0NUTCwgMikKKyNkZWZpbmUgVk1H RU5JRF9GT1JDRV9HRU5fVVBEQVRFwqDCoMKgwqDCoCBfSU8oVk1HRU5JRF9JT0NUTCwgMykKKwor I2VuZGlmIC8qIF9VQVBJX0xJTlVYX1ZNR0VOSURfSCAqLworCi0tIAoyLjcuNAoKCgoKCkFtYXpv biBEZXZlbG9wbWVudCBDZW50ZXIgKFJvbWFuaWEpIFMuUi5MLiByZWdpc3RlcmVkIG9mZmljZTog MjdBIFNmLiBMYXphciBTdHJlZXQsIFVCQzUsIGZsb29yIDIsIElhc2ksIElhc2kgQ291bnR5LCA3 MDAwNDUsIFJvbWFuaWEuIFJlZ2lzdGVyZWQgaW4gUm9tYW5pYS4gUmVnaXN0cmF0aW9uIG51bWJl ciBKMjIvMjYyMS8yMDA1Lgo=