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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 973DBC4345F for ; Tue, 30 Apr 2024 07:19:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Iw5JMf6cdAbCzzl+D5wZNsr9SQFO+7JvaXWDKcvk/SY=; b=T3cHuGF+InpGkI mNufvLtNFD2lFRZdBHtZNmbyDkJbaMV7zunqeULZa4U6MknWiwEw5MWRxQ/IZIe85HK10zfRYnhPl gMWfnaLHQSy8pZD7DZJnd6mhCpu5dy/+tw3XefIkKKJaKefwBnRfQvS6QjpLSXIqqcf0KvgoX9MP0 JslUbz/0wbLQwFLbWwcF1oKJMTPeaWeDlv4klmqvdZuFLRFyhaIYhphVtQssBqeTEoFm+J0j9FLBm nOEkkDSuBXI/iIBEfrGk7SX5hii4MTor5M+Sh2C7gaP19zd21WqkFT6IiraMGTnequtv/3YxQ1qfN 6Awhkyy7Pg9LZsh0Ol6w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1hlR-00000005PGl-2IE3; Tue, 30 Apr 2024 07:18:57 +0000 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1hlM-00000005PFB-39mY for linux-riscv@lists.infradead.org; Tue, 30 Apr 2024 07:18:55 +0000 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-41be416455bso1746405e9.0 for ; Tue, 30 Apr 2024 00:18:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1714461530; x=1715066330; darn=lists.infradead.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=DFOA47pYt83bMvIpv2bCMuSr/+A8ku+7xtbTJXLGrLA=; b=Gx6dhGeatYQ0HTAkWuucXHuQ0BQGa/4XURFMpGkLl1TAu3pSXF+JDCSjHH8A5PMIHs +cUeFWxu1h7Fx88ZaP3+Cg3FFQUPg0EgqGgHk0jSixTcsftv8tDyuV5gHD5IlNQJnKfl e0WtLWu31Vxok8Z9WK1Y1PRGEj+eYjeK1l9RNVWApClcbh9gRhx1uEstBAYWaqbiD7Ud gh8DOjQAN29fiIWPAd7idYgZORA1/DSwfMYzgroFUMDJ+W1EkSjTHIfFw7U6ZEOhjmgm ylMYQ0XIzmpLGujzpojB5XtFfi2GiJd+swgT5pZg3ScK4RqI6QikIz/UNf/JuYiYS211 x7bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714461530; x=1715066330; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=DFOA47pYt83bMvIpv2bCMuSr/+A8ku+7xtbTJXLGrLA=; b=GcKkyr2WT4Jx0v8Px6cFZ3JjvOZuigd50GSlEHLuz8ADN5I+7PfeTfEjYQO/yK+TrR bdZY45BNd3DH8pv6jyt1QORFHW3IXEJq3lECY1nft/cdtdoxdrHN89wHCFsfnuv4OYns vwTsAAq+L0rMw+JjY7aK/uNIC06N0Z1KdyeQfMBkiwdJ08QCehBuE63LlkV5wh5XsWhs 8rZp4mlMtqybgn6vgCcP/FXo18aoC4QR2a8KNLueUcqSGF0z2khjqIwTHbU+P7nasjkZ ESUPma57y79Dk4C9G4WCdcREOVgAoUB9MwbavDcahiS7PJOgOguQ4OrkBAOoc9LfTyhe 2LDQ== X-Forwarded-Encrypted: i=1; AJvYcCXMfIwIP9SzEQt/cNTMP/uLRGYP7/TyBifka3YoDXASi7ga5mf1yowlZFj5MMOvhTo40zHshBWPyGIiYm2ZM9EnPEWiW4aNU3Bt88WSSL4T X-Gm-Message-State: AOJu0YxB3OTHfKZjTqxwXFGQDJ2tcJ6SeWOGsCTb4kU0Ip6Eq/Cos8mE BAFs6rUpF82at0r1Ypr9OZbCEBbcU819LbO00a+DE1P4s/Df2ZKpO5Mii0ctYtM= X-Google-Smtp-Source: AGHT+IEg+ywRvlwQvwVo0sNKmOppHrYG3FZGGsVxdHy8+YK4rRcPsEzVD91jPuUYMwuYIVvBgYRBqQ== X-Received: by 2002:a5d:47a2:0:b0:34d:1d1a:2dc7 with SMTP id 2-20020a5d47a2000000b0034d1d1a2dc7mr4069136wrb.6.1714461529580; Tue, 30 Apr 2024 00:18:49 -0700 (PDT) Received: from ?IPV6:2a01:e0a:999:a3a0:c21b:67fd:90ab:9053? ([2a01:e0a:999:a3a0:c21b:67fd:90ab:9053]) by smtp.gmail.com with ESMTPSA id b10-20020a5d4d8a000000b0034cf989dbf5sm5170282wru.44.2024.04.30.00.18.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 30 Apr 2024 00:18:49 -0700 (PDT) Message-ID: <5d5febd5-d113-4e8c-9535-9e75acf23398@rivosinc.com> Date: Tue, 30 Apr 2024 09:18:47 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 02/11] riscv: add ISA extensions validation To: Conor Dooley Cc: Jonathan Corbet , Paul Walmsley , Palmer Dabbelt , Albert Ou , Rob Herring , Krzysztof Kozlowski , Anup Patel , Shuah Khan , Atish Patra , linux-doc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org References: <20240429150553.625165-1-cleger@rivosinc.com> <20240429150553.625165-3-cleger@rivosinc.com> <20240429-subtext-tabby-3a1532f058a5@spud> Content-Language: en-US From: =?UTF-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= In-Reply-To: <20240429-subtext-tabby-3a1532f058a5@spud> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240430_001852_994626_37D86CED X-CRM114-Status: GOOD ( 34.93 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org CgpPbiAzMC8wNC8yMDI0IDAwOjE1LCBDb25vciBEb29sZXkgd3JvdGU6Cj4gT24gTW9uLCBBcHIg MjksIDIwMjQgYXQgMDU6MDQ6NTVQTSArMDIwMCwgQ2zDqW1lbnQgTMOpZ2VyIHdyb3RlOgo+PiBT aW5jZSBhIGZldyBleHRlbnNpb25zIChaaWNib20vWmljYm96KSBhbHJlYWR5IG5lZWRzIHZhbGlk YXRpb24gYW5kCj4+IGZ1dHVyZSBvbmVzIHdpbGwgbmVlZCBpdCBhcyB3ZWxsIChaYyopIGFkZCBh IHZhbGlkYXRlKCkgY2FsbGJhY2sgdG8KPj4gc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YS4gVGhp cyByZXF1aXJlIHRvIHJld29yayB0aGUgd2F5IGV4dGVuc2lvbnMgYXJlCj4+IHBhcnNlZCBhbmQg c3BsaXQgaXQgaW4gdHdvIHBoYXNlcy4gRmlyc3QgcGhhc2UgaXMgaXNhIHN0cmluZyBvciBpc2EK Pj4gZXh0ZW5zaW9uIGxpc3QgcGFyc2luZyBhbmQgY29uc2lzdHMgaW4gZW5hYmxpbmcgYWxsIHRo ZSBleHRlbnNpb25zIGluIGEKPj4gdGVtcG9yYXJ5IGJpdG1hc2sgd2l0aG91dCBhbnkgdmFsaWRh dGlvbi4gVGhlIHNlY29uZCBzdGVwICJyZXNvbHZlcyIgdGhlCj4+IGZpbmFsIGlzYSBiaXRtYXAs IGhhbmRsaW5nIHBvdGVudGlhbCBtaXNzaW5nIGRlcGVuZGVuY2llcy4gVGhlIG1lY2hhbmlzbQo+ PiBpcyBxdWl0ZSBzaW1wbGUgYW5kIHNpbXBseSB2YWxpZGF0ZSBlYWNoIGV4dGVuc2lvbiBkZXNj cmliZWQgaW4gdGhlCj4+IHRlbXBvcmFyeSBiaXRtYXAgYmVmb3JlIGVuYWJsaW5nIGl0IGluIHRo ZSBmaW5hbCBpc2EgYml0bWFwLiB2YWxpZGF0ZSgpCj4+IGNhbGxiYWNrcyBjYW4gcmV0dXJuIGVp dGhlciAwIGZvciBzdWNjZXNzLCAtRVBST0JFREVGRVIgaWYgZXh0ZW5zaW9uCj4+IG5lZWRzIHRv IGJlIHZhbGlkYXRlZCBhZ2FpbiBhdCBuZXh0IGxvb3AuIEEgcHJldmlvdXMgSVNBIGJpdG1hcCBp cyBrZXB0Cj4+IHRvIGF2b2lkIGxvb3BpbmcgbXV0bGlwbGUgdGltZXMgaWYgYW4gZXh0ZW5zaW9u IGRlcGVuZGVuY2llcyBhcmUgbmV2ZXIKPj4gc2F0aXNmaWVkIHVudGlsIHdlIHJlYWNoIGEgc3Rh YmxlIHN0YXRlLiBJbiBvcmRlciB0byBhdm9pZCBhbnkgcG90ZW50aWFsCj4+IGluZmluaXRlIGxv b3BpbmcsIGFsbG93IGxvb3BpbmcgYSBtYXhpbXVtIG9mIHRoZSBudW1iZXIgb2YgZXh0ZW5zaW9u IHdlCj4+IGhhbmRsZS4gWmljYm96IGFuZCBaaWNib20gZXh0ZW5zaW9ucyBhcmUgbW9kaWZpZWQg dG8gdXNlIHRoaXMgdmFsaWRhdGlvbgo+PiBtZWNoYW5pc20uCj4gCj4gWW91ciByZXBseSB0byBt eSBsYXN0IHJldmlldyBvbmx5IHRhbGtlZCBhYm91dCBwYXJ0IG9mIG15IGNvbW1lbnRzLAo+IHdo aWNoIGlzIHVzdWFsbHkgd2hhdCB5b3UgZG8gd2hlbiB5b3UncmUgZ29ubmEgaW1wbGVtZW50IHRo ZSByZXN0LCBidXQKPiB5b3UgaGF2ZW4ndC4KPiBJIGxpa2UgdGhlIGNoYW5nZSB5b3UndmUgbWFk ZSB0byBzaG9ydGVuIGxvb3BpbmcsIGJ1dCBJJ2QgYXQgbGVhc3QgbGlrZQo+IGEgcmVzcG9uc2Ug dG8gd2h5IGEgc3BsaXQgaXMgbm90IHdvcnRoIGRvaW5nIDopCgpIaSBDb25vciwKCk1pc3NlZCB0 aGF0IHBvaW50IHNpbmNlIEkgd2FzIGZlZWxpbmcgdGhhdCBteSBzb2x1dGlvbiBhY3R1YWxseQph ZGRyZXNzZXMgeW91ciBjb25jZXJucy4gWW91ciBhcmd1bWVudCB3YXMgdGhhdCB0aGVyZSBpcyBu byByZWFzb24gdG8KbG9vcCBmb3IgWmljYm9tL1ppY2JveiBidXQgdGhhdCB3b3VsZCBhbHNvIGFw cGx5IHRvIFpjZiBpbiBjYXNlIHdlIGFyZQpvbiBSVjY0IGFzIHdlbGwgKHNpbmNlIHpjZiBpcyBu b3Qgc3VwcG9ydGVkIG9uIFJWNjQpLiBTbyBmb3IgWmNmLCB0aGF0CndvdWxkIGxlYWQgdG8gdXNp bmcgYm90aCBtZWNhbmlzbSBvciBhZGRpdGlvbmFsIGlmZGVmZXJ5IHdpdGggbGl0dGxlIHRvCm5v IGFkZGVkIHZhbHVlIHNpbmNlIHRoZSBjdXJyZW50IHNvbHV0aW9uIGFjdHVhbGx5IHNvbHZlcyBi b3RoIGNhc2VzOgoKLSBXZSBkb24ndCBoYXZlIGFueSBleHRyYSBsb29waW5nIGlmIGFsbCB2YWxp ZGF0aW9uIGNhbGxiYWNrIHJldHVybnMgMAooZXhjZXB0IHRoZSBpbml0aWFsIG9uZSBvbiByaXNj dl9pc2FfZXh0LCB3aGljaCBpcyBraW5kIG9mIHVuYXZvaWRhYmxlKS4KLSBaaWNib20sIFppY2Jv eiBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlICh3aGljaCB3YXMgb25lIG9mCnlv dXIgY29uY2VybikuCgpBZGRpbmcgYSBzZWNvbmQga2luZCBvZiBjYWxsYmFjayBmb3IgYWZ0ZXIg bG9vcCB2YWxpZGF0aW9uIHdvdWxkIG9ubHkKbGVhZCB0byBhIGJ1bmNoIG9mIGFkZGl0aW9uYWwg bWFjcm9zL2lmZGVmZXJ5IGZvciBleHRlbnNpb25zIHdpdGgKdmFsaWRhdGUoKSBjYWxsYmFjaywg d2l0aCB2YWxpZGF0ZV9lbmQoKSBvciB3aXRoIGJvdGggKGllIFpjZikpLiBGb3IKdGhlc2UgcmVh c29ucywgSSBkbyBub3QgdGhpbmsgdGhlcmUgaXMgYSBuZWVkIGZvciBhIHNlcGFyYXRlIG1lY2hh bmlzbQpub3IgYWRkaXRpb25hbCBjYWxsYmFjayBmb3Igc3VjaCBleHRlbnNpb25zIGV4Y2VwdCBh ZGRpbmcgZXh0cmEgY29kZQp3aXRoIG5vIHJlYWwgYWRkZWQgZnVuY3Rpb25hbGl0eS4KCkFGQUlL LCB0aGUgcGxhdGZvcm0gZHJpdmVyIHByb2JpbmcgbWVjaGFuaXNtIHdvcmtzIHRoZSBzYW1lLCB0 aGUgcHJvYmUoKQpjYWxsYmFjayBpcyBhY3R1YWxseSBjYWxsZWQgZXZlbiBpZiBmb3Igc29tZSBy ZWFzb24gcHJvcGVydGllcyBhcmUKbWlzc2luZyBmcm9tIG5vZGVzIGZvciBwbGF0Zm9ybSBkZXZp Y2VzIGFuZCB0aHVzIHRoZSBwcm9iZSgpIHJldHVybnMKLUVJTlZBTCBvciB3aGF0ZXZlci4KCkhv cGUgdGhpcyBhbnN3ZXJzIHlvdXIgcXVlc3Rpb24sCgpUaGFua3MsCgpDbMOpbWVudAoKPiAKPiBU aGFua3MsCj4gQ29ub3IuCj4gCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IENsw6ltZW50IEzDqWdlciA8 Y2xlZ2VyQHJpdm9zaW5jLmNvbT4KPj4gLS0tCj4+ICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Nw dWZlYXR1cmUuaCB8ICAgMSArCj4+ICBhcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMgICAg ICB8IDIxMSArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4+ICAyIGZpbGVzIGNoYW5nZWQs IDEyNiBpbnNlcnRpb25zKCspLCA4NiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2Fy Y2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2Fz bS9jcHVmZWF0dXJlLmgKPj4gaW5kZXggMzQ3ODA1NDQ2MTUxLi4wMDA3OTZjMmQwYjEgMTAwNjQ0 Cj4+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCj4+ICsrKyBiL2Fy Y2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCj4+IEBAIC03MCw2ICs3MCw3IEBAIHN0 cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgewo+PiAgCWNvbnN0IGNoYXIgKnByb3BlcnR5Owo+PiAg CWNvbnN0IHVuc2lnbmVkIGludCAqc3Vic2V0X2V4dF9pZHM7Cj4+ICAJY29uc3QgdW5zaWduZWQg aW50IHN1YnNldF9leHRfc2l6ZTsKPj4gKwlpbnQgKCp2YWxpZGF0ZSkoY29uc3Qgc3RydWN0IHJp c2N2X2lzYV9leHRfZGF0YSAqZGF0YSwgY29uc3QgdW5zaWduZWQgbG9uZyAqaXNhX2JpdG1hcCk7 Cj4+ICB9Owo+PiAgCj4+ICBleHRlcm4gY29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSBy aXNjdl9pc2FfZXh0W107Cj4+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0 dXJlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMKPj4gaW5kZXggMTE1YmEwMDFm MWJjLi5jYjJmZmE2YzhjMzMgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL2NwdWZl YXR1cmUuYwo+PiArKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMKPj4gQEAgLTcy LDUxICs3Miw1OCBAQCBib29sIF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoY29uc3Qg dW5zaWduZWQgbG9uZyAqaXNhX2JpdG1hcCwgdW5zaWduZWQgaQo+PiAgfQo+PiAgRVhQT1JUX1NZ TUJPTF9HUEwoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSk7Cj4+ICAKPj4gLXN0YXRp YyBib29sIHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2soaW50IGlkKQo+PiArc3RhdGljIGJvb2wg cmlzY3ZfaXNhX2V4dGVuc2lvbl92YWxpZChpbnQgaWQpCj4+ICB7Cj4+IC0Jc3dpdGNoIChpZCkg ewo+PiAtCWNhc2UgUklTQ1ZfSVNBX0VYVF9aSUNCT006Cj4+IC0JCWlmICghcmlzY3ZfY2JvbV9i bG9ja19zaXplKSB7Cj4+IC0JCQlwcl9lcnIoIlppY2JvbSBkZXRlY3RlZCBpbiBJU0Egc3RyaW5n LCBkaXNhYmxpbmcgYXMgbm8gY2JvbS1ibG9jay1zaXplIGZvdW5kXG4iKTsKPj4gLQkJCXJldHVy biBmYWxzZTsKPj4gLQkJfSBlbHNlIGlmICghaXNfcG93ZXJfb2ZfMihyaXNjdl9jYm9tX2Jsb2Nr X3NpemUpKSB7Cj4+IC0JCQlwcl9lcnIoIlppY2JvbSBkaXNhYmxlZCBhcyBjYm9tLWJsb2NrLXNp emUgcHJlc2VudCwgYnV0IGlzIG5vdCBhIHBvd2VyLW9mLTJcbiIpOwo+PiAtCQkJcmV0dXJuIGZh bHNlOwo+PiAtCQl9Cj4+IC0JCXJldHVybiB0cnVlOwo+PiAtCWNhc2UgUklTQ1ZfSVNBX0VYVF9a SUNCT1o6Cj4+IC0JCWlmICghcmlzY3ZfY2Jvel9ibG9ja19zaXplKSB7Cj4+IC0JCQlwcl9lcnIo IlppY2JveiBkZXRlY3RlZCBpbiBJU0Egc3RyaW5nLCBkaXNhYmxpbmcgYXMgbm8gY2Jvei1ibG9j ay1zaXplIGZvdW5kXG4iKTsKPj4gLQkJCXJldHVybiBmYWxzZTsKPj4gLQkJfSBlbHNlIGlmICgh aXNfcG93ZXJfb2ZfMihyaXNjdl9jYm96X2Jsb2NrX3NpemUpKSB7Cj4+IC0JCQlwcl9lcnIoIlpp Y2JveiBkaXNhYmxlZCBhcyBjYm96LWJsb2NrLXNpemUgcHJlc2VudCwgYnV0IGlzIG5vdCBhIHBv d2VyLW9mLTJcbiIpOwo+PiAtCQkJcmV0dXJuIGZhbHNlOwo+PiAtCQl9Cj4+IC0JCXJldHVybiB0 cnVlOwo+PiAtCWNhc2UgUklTQ1ZfSVNBX0VYVF9JTlZBTElEOgo+PiAtCQlyZXR1cm4gZmFsc2U7 Cj4+ICsJcmV0dXJuIGlkICE9IFJJU0NWX0lTQV9FWFRfSU5WQUxJRDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCByaXNjdl9leHRfemljYm9tX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCByaXNjdl9p c2FfZXh0X2RhdGEgKmRhdGEsCj4+ICsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppc2Ff Yml0bWFwKQo+PiArewo+PiArCWlmICghcmlzY3ZfY2JvbV9ibG9ja19zaXplKSB7Cj4+ICsJCXBy X2VycigiWmljYm9tIGRldGVjdGVkIGluIElTQSBzdHJpbmcsIGRpc2FibGluZyBhcyBubyBjYm9t LWJsb2NrLXNpemUgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9IGVsc2Ug aWYgKCFpc19wb3dlcl9vZl8yKHJpc2N2X2Nib21fYmxvY2tfc2l6ZSkpIHsKPj4gKwkJcHJfZXJy KCJaaWNib20gZGlzYWJsZWQgYXMgY2JvbS1ibG9jay1zaXplIHByZXNlbnQsIGJ1dCBpcyBub3Qg YSBwb3dlci1vZi0yXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICAJfQo+PiArCXJldHVy biAwOwo+PiArfQo+PiAgCj4+IC0JcmV0dXJuIHRydWU7Cj4+ICtzdGF0aWMgaW50IHJpc2N2X2V4 dF96aWNib3pfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSAqZGF0YSwK Pj4gKwkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmlzYV9iaXRtYXApCj4+ICt7Cj4+ICsJ aWYgKCFyaXNjdl9jYm96X2Jsb2NrX3NpemUpIHsKPj4gKwkJcHJfZXJyKCJaaWNib3ogZGV0ZWN0 ZWQgaW4gSVNBIHN0cmluZywgZGlzYWJsaW5nIGFzIG5vIGNib3otYmxvY2stc2l6ZSBmb3VuZFxu Iik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0gZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIo cmlzY3ZfY2Jvel9ibG9ja19zaXplKSkgewo+PiArCQlwcl9lcnIoIlppY2JveiBkaXNhYmxlZCBh cyBjYm96LWJsb2NrLXNpemUgcHJlc2VudCwgYnV0IGlzIG5vdCBhIHBvd2VyLW9mLTJcbiIpOwo+ PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsJcmV0dXJuIDA7Cj4+ICB9Cj4+ICAKPj4g LSNkZWZpbmUgX1JJU0NWX0lTQV9FWFRfREFUQShfbmFtZSwgX2lkLCBfc3Vic2V0X2V4dHMsIF9z dWJzZXRfZXh0c19zaXplKSB7CVwKPj4gLQkubmFtZSA9ICNfbmFtZSwJCQkJCQkJCVwKPj4gLQku cHJvcGVydHkgPSAjX25hbWUsCQkJCQkJCVwKPj4gLQkuaWQgPSBfaWQsCQkJCQkJCQlcCj4+IC0J LnN1YnNldF9leHRfaWRzID0gX3N1YnNldF9leHRzLAkJCQkJCVwKPj4gLQkuc3Vic2V0X2V4dF9z aXplID0gX3N1YnNldF9leHRzX3NpemUJCQkJCVwKPj4gKyNkZWZpbmUgX1JJU0NWX0lTQV9FWFRf REFUQShfbmFtZSwgX2lkLCBfc3Vic2V0X2V4dHMsIF9zdWJzZXRfZXh0c19zaXplLCBfdmFsaWRh dGUpIHsJXAo+PiArCS5uYW1lID0gI19uYW1lLAkJCQkJCQkJCVwKPj4gKwkucHJvcGVydHkgPSAj X25hbWUsCQkJCQkJCQlcCj4+ICsJLmlkID0gX2lkLAkJCQkJCQkJCVwKPj4gKwkuc3Vic2V0X2V4 dF9pZHMgPSBfc3Vic2V0X2V4dHMsCQkJCQkJCVwKPj4gKwkuc3Vic2V0X2V4dF9zaXplID0gX3N1 YnNldF9leHRzX3NpemUsCQkJCQkJXAo+PiArCS52YWxpZGF0ZSA9IF92YWxpZGF0ZQkJCQkJCQkJ XAo+PiAgfQo+PiAgCj4+IC0jZGVmaW5lIF9fUklTQ1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBfaWQp IF9SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9pZCwgTlVMTCwgMCkKPj4gKyNkZWZpbmUgX19S SVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9pZCkgX1JJU0NWX0lTQV9FWFRfREFUQShfbmFtZSwg X2lkLCBOVUxMLCAwLCBOVUxMKQo+PiAgCj4+ICAvKiBVc2VkIHRvIGRlY2xhcmUgcHVyZSAibGFz c28iIGV4dGVuc2lvbiAoWmsgZm9yIGluc3RhbmNlKSAqLwo+PiAgI2RlZmluZSBfX1JJU0NWX0lT QV9FWFRfQlVORExFKF9uYW1lLCBfYnVuZGxlZF9leHRzKSBcCj4+IC0JX1JJU0NWX0lTQV9FWFRf REFUQShfbmFtZSwgUklTQ1ZfSVNBX0VYVF9JTlZBTElELCBfYnVuZGxlZF9leHRzLCBBUlJBWV9T SVpFKF9idW5kbGVkX2V4dHMpKQo+PiArCV9SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIFJJU0NW X0lTQV9FWFRfSU5WQUxJRCwgX2J1bmRsZWRfZXh0cywgXAo+PiArCQkJICAgIEFSUkFZX1NJWkUo X2J1bmRsZWRfZXh0cyksIE5VTEwpCj4+ICAKPj4gIC8qIFVzZWQgdG8gZGVjbGFyZSBleHRlbnNp b25zIHRoYXQgYXJlIGEgc3VwZXJzZXQgb2Ygb3RoZXIgZXh0ZW5zaW9ucyAoWnZiYiBmb3IgaW5z dGFuY2UpICovCj4+ICAjZGVmaW5lIF9fUklTQ1ZfSVNBX0VYVF9TVVBFUlNFVChfbmFtZSwgX2lk LCBfc3ViX2V4dHMpIFwKPj4gLQlfUklTQ1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBfaWQsIF9zdWJf ZXh0cywgQVJSQVlfU0laRShfc3ViX2V4dHMpKQo+PiArCV9SSVNDVl9JU0FfRVhUX0RBVEEoX25h bWUsIF9pZCwgX3N1Yl9leHRzLCBBUlJBWV9TSVpFKF9zdWJfZXh0cyksIE5VTEwpCj4+ICsjZGVm aW5lIF9fUklTQ1ZfSVNBX0VYVF9TVVBFUlNFVF9WQUxJREFURShfbmFtZSwgX2lkLCBfc3ViX2V4 dHMsIF92YWxpZGF0ZSkgXAo+PiArCV9SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9pZCwgX3N1 Yl9leHRzLCBBUlJBWV9TSVpFKF9zdWJfZXh0cyksIF92YWxpZGF0ZSkKPj4gIAo+PiAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGludCByaXNjdl96a19idW5kbGVkX2V4dHNbXSA9IHsKPj4gIAlSSVND Vl9JU0FfRVhUX1pCS0IsCj4+IEBAIC0yNDcsOCArMjU0LDEwIEBAIGNvbnN0IHN0cnVjdCByaXNj dl9pc2FfZXh0X2RhdGEgcmlzY3ZfaXNhX2V4dFtdID0gewo+PiAgCV9fUklTQ1ZfSVNBX0VYVF9E QVRBKGMsIFJJU0NWX0lTQV9FWFRfYyksCj4+ICAJX19SSVNDVl9JU0FfRVhUX0RBVEEodiwgUklT Q1ZfSVNBX0VYVF92KSwKPj4gIAlfX1JJU0NWX0lTQV9FWFRfREFUQShoLCBSSVNDVl9JU0FfRVhU X2gpLAo+PiAtCV9fUklTQ1ZfSVNBX0VYVF9TVVBFUlNFVCh6aWNib20sIFJJU0NWX0lTQV9FWFRf WklDQk9NLCByaXNjdl94bGludXhlbnZjZmdfZXh0cyksCj4+IC0JX19SSVNDVl9JU0FfRVhUX1NV UEVSU0VUKHppY2JveiwgUklTQ1ZfSVNBX0VYVF9aSUNCT1osIHJpc2N2X3hsaW51eGVudmNmZ19l eHRzKSwKPj4gKwlfX1JJU0NWX0lTQV9FWFRfU1VQRVJTRVRfVkFMSURBVEUoemljYm9tLCBSSVND Vl9JU0FfRVhUX1pJQ0JPTSwgcmlzY3ZfeGxpbnV4ZW52Y2ZnX2V4dHMsCj4+ICsJCQkJCSAgcmlz Y3ZfZXh0X3ppY2JvbV92YWxpZGF0ZSksCj4+ICsJX19SSVNDVl9JU0FfRVhUX1NVUEVSU0VUX1ZB TElEQVRFKHppY2JveiwgUklTQ1ZfSVNBX0VYVF9aSUNCT1osIHJpc2N2X3hsaW51eGVudmNmZ19l eHRzLAo+PiArCQkJCQkgIHJpc2N2X2V4dF96aWNib3pfdmFsaWRhdGUpLAo+PiAgCV9fUklTQ1Zf SVNBX0VYVF9EQVRBKHppY250ciwgUklTQ1ZfSVNBX0VYVF9aSUNOVFIpLAo+PiAgCV9fUklTQ1Zf SVNBX0VYVF9EQVRBKHppY29uZCwgUklTQ1ZfSVNBX0VYVF9aSUNPTkQpLAo+PiAgCV9fUklTQ1Zf SVNBX0VYVF9EQVRBKHppY3NyLCBSSVNDVl9JU0FfRVhUX1pJQ1NSKSwKPj4gQEAgLTMxMCwzMyAr MzE5LDgwIEBAIGNvbnN0IHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgcmlzY3ZfaXNhX2V4dFtd ID0gewo+PiAgCj4+ICBjb25zdCBzaXplX3QgcmlzY3ZfaXNhX2V4dF9jb3VudCA9IEFSUkFZX1NJ WkUocmlzY3ZfaXNhX2V4dCk7Cj4+ICAKPj4gLXN0YXRpYyB2b2lkIF9faW5pdCBtYXRjaF9pc2Ff ZXh0KGNvbnN0IHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgKmV4dCwgY29uc3QgY2hhciAqbmFt ZSwKPj4gLQkJCQkgY29uc3QgY2hhciAqbmFtZV9lbmQsIHN0cnVjdCByaXNjdl9pc2FpbmZvICpp c2FpbmZvKQo+PiArc3RhdGljIHZvaWQgcmlzY3ZfaXNhX3NldF9leHQoY29uc3Qgc3RydWN0IHJp c2N2X2lzYV9leHRfZGF0YSAqZXh0LCB1bnNpZ25lZCBsb25nICpiaXRtYXApCj4+ICB7Cj4+IC0J aWYgKChuYW1lX2VuZCAtIG5hbWUgPT0gc3RybGVuKGV4dC0+bmFtZSkpICYmCj4+IC0JICAgICAh c3RybmNhc2VjbXAobmFtZSwgZXh0LT5uYW1lLCBuYW1lX2VuZCAtIG5hbWUpKSB7Cj4+IC0JCS8q Cj4+IC0JCSAqIElmIHRoaXMgaXMgYSBidW5kbGUsIGVuYWJsZSBhbGwgdGhlIElTQSBleHRlbnNp b25zIHRoYXQKPj4gLQkJICogY29tcHJpc2UgdGhlIGJ1bmRsZS4KPj4gLQkJICovCj4+IC0JCWlm IChleHQtPnN1YnNldF9leHRfc2l6ZSkgewo+PiAtCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHQt PnN1YnNldF9leHRfc2l6ZTsgaSsrKSB7Cj4+IC0JCQkJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25f Y2hlY2soZXh0LT5zdWJzZXRfZXh0X2lkc1tpXSkpCj4+IC0JCQkJCXNldF9iaXQoZXh0LT5zdWJz ZXRfZXh0X2lkc1tpXSwgaXNhaW5mby0+aXNhKTsKPj4gLQkJCX0KPj4gKwkvKgo+PiArCSAqIFRo aXMgaXMgdmFsaWQgZXZlbiBmb3IgYnVuZGxlIGV4dGVuc2lvbnMgd2hpY2ggdXNlcyB0aGUgUklT Q1ZfSVNBX0VYVF9JTlZBTElEIGlkCj4+ICsJICogKHJlamVjdGVkIGJ5IHJpc2N2X2lzYV9leHRl bnNpb25fdmFsaWQoKSkuCj4+ICsJICovCj4+ICsJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25fdmFs aWQoZXh0LT5pZCkpCj4+ICsJCXNldF9iaXQoZXh0LT5pZCwgYml0bWFwKTsKPj4gKwo+PiArCWZv ciAoaW50IGkgPSAwOyBpIDwgZXh0LT5zdWJzZXRfZXh0X3NpemU7IGkrKykgewo+PiArCQlpZiAo cmlzY3ZfaXNhX2V4dGVuc2lvbl92YWxpZChleHQtPnN1YnNldF9leHRfaWRzW2ldKSkKPj4gKwkJ CXNldF9iaXQoZXh0LT5zdWJzZXRfZXh0X2lkc1tpXSwgYml0bWFwKTsKPj4gKwl9Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9yZXNvbHZlX2lzYSh1bnNpZ25lZCBsb25n ICppc2FfYml0bWFwLCBzdHJ1Y3QgcmlzY3ZfaXNhaW5mbyAqaXNhaW5mbywKPj4gKwkJCQkgICAg IHVuc2lnbmVkIGxvbmcgKnRoaXNfaHdjYXAsIHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcCkKPj4g K3sKPj4gKwlib29sIGxvb3A7Cj4+ICsJY29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSAq ZXh0Owo+PiArCURFQ0xBUkVfQklUTUFQKHByZXZfYml0bWFwLCBSSVNDVl9JU0FfRVhUX01BWCk7 Cj4+ICsJaW50IG1heF9sb29wX2NvdW50ID0gcmlzY3ZfaXNhX2V4dF9jb3VudCwgcmV0Owo+PiAr Cj4+ICsJZG8gewo+PiArCQlsb29wID0gZmFsc2U7Cj4+ICsJCWlmIChtYXhfbG9vcF9jb3VudC0t IDwgMCkgewo+PiArCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVhY2ggYSBzdGFibGUgSVNBIHN0YXRl XG4iKTsKPj4gKwkJCXJldHVybjsKPj4gIAkJfQo+PiArCQltZW1jcHkocHJldl9iaXRtYXAsIGlz YWluZm8tPmlzYSwgc2l6ZW9mKHByZXZfYml0bWFwKSk7Cj4+ICsJCWZvciAoaW50IGkgPSAwOyBp IDwgcmlzY3ZfaXNhX2V4dF9jb3VudDsgaSsrKSB7Cj4+ICsJCQlleHQgPSAmcmlzY3ZfaXNhX2V4 dFtpXTsKPj4gKwo+PiArCQkJLyogQnVuZGxlIGV4dGVuc2lvbnMgaWRzIGFyZSBpbnZhbGlkKi8K Pj4gKwkJCWlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl92YWxpZChleHQtPmlkKSkKPj4gKwkJCQlj b250aW51ZTsKPj4gKwo+PiArCQkJaWYgKCF0ZXN0X2JpdChleHQtPmlkLCBpc2FfYml0bWFwKSB8 fCB0ZXN0X2JpdChleHQtPmlkLCBpc2FpbmZvLT5pc2EpKQo+PiArCQkJCWNvbnRpbnVlOwo+PiAr Cj4+ICsJCQlpZiAoZXh0LT52YWxpZGF0ZSkgewo+PiArCQkJCXJldCA9IGV4dC0+dmFsaWRhdGUo ZXh0LCBpc2FpbmZvLT5pc2EpOwo+PiArCQkJCWlmIChyZXQpIHsKPj4gKwkJCQkJaWYgKHJldCA9 PSAtRVBST0JFX0RFRkVSKQo+PiArCQkJCQkJbG9vcCA9IHRydWU7Cj4+ICsJCQkJCWVsc2UKPj4g KwkJCQkJCWNsZWFyX2JpdChleHQtPmlkLCBpc2FfYml0bWFwKTsKPj4gKwkJCQkJY29udGludWU7 Cj4+ICsJCQkJfQo+PiArCQkJfQo+PiAgCj4+IC0JCS8qCj4+IC0JCSAqIFRoaXMgaXMgdmFsaWQg ZXZlbiBmb3IgYnVuZGxlIGV4dGVuc2lvbnMgd2hpY2ggdXNlcyB0aGUgUklTQ1ZfSVNBX0VYVF9J TlZBTElEIGlkCj4+IC0JCSAqIChyZWplY3RlZCBieSByaXNjdl9pc2FfZXh0ZW5zaW9uX2NoZWNr KCkpLgo+PiAtCQkgKi8KPj4gLQkJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2soZXh0LT5p ZCkpCj4+ICAJCQlzZXRfYml0KGV4dC0+aWQsIGlzYWluZm8tPmlzYSk7Cj4+ICsKPj4gKwkJCS8q IE9ubHkgc2luZ2xlIGxldHRlciBleHRlbnNpb25zIGdldCBzZXQgaW4gaHdjYXAgKi8KPj4gKwkJ CWlmIChleHQtPmlkIDwgUklTQ1ZfSVNBX0VYVF9CQVNFKQo+PiArCQkJCSp0aGlzX2h3Y2FwIHw9 IGlzYTJod2NhcFtleHQtPmlkXTsKPj4gKwkJfQo+PiArCX0gd2hpbGUgKGxvb3AgJiYgbWVtY21w KHByZXZfYml0bWFwLCBpc2FpbmZvLT5pc2EsIHNpemVvZihwcmV2X2JpdG1hcCkpKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgX19pbml0IG1hdGNoX2lzYV9leHQoY29uc3QgY2hhciAqbmFt ZSwgY29uc3QgY2hhciAqbmFtZV9lbmQsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCkKPj4gK3sKPj4g Kwlmb3IgKGludCBpID0gMDsgaSA8IHJpc2N2X2lzYV9leHRfY291bnQ7IGkrKykgewo+PiArCQlj b25zdCBzdHJ1Y3QgcmlzY3ZfaXNhX2V4dF9kYXRhICpleHQgPSAmcmlzY3ZfaXNhX2V4dFtpXTsK Pj4gKwo+PiArCQlpZiAoKG5hbWVfZW5kIC0gbmFtZSA9PSBzdHJsZW4oZXh0LT5uYW1lKSkgJiYK Pj4gKwkJICAgICFzdHJuY2FzZWNtcChuYW1lLCBleHQtPm5hbWUsIG5hbWVfZW5kIC0gbmFtZSkp IHsKPj4gKwkJCXJpc2N2X2lzYV9zZXRfZXh0KGV4dCwgYml0bWFwKTsKPj4gKwkJCWJyZWFrOwo+ PiArCQl9Cj4+ICAJfQo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfcGFy c2VfaXNhX3N0cmluZyh1bnNpZ25lZCBsb25nICp0aGlzX2h3Y2FwLCBzdHJ1Y3QgcmlzY3ZfaXNh aW5mbyAqaXNhaW5mbywKPj4gLQkJCQkJICB1bnNpZ25lZCBsb25nICppc2EyaHdjYXAsIGNvbnN0 IGNoYXIgKmlzYSkKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9yZXNvbHZlX2lzYV9zdHJp bmcoY29uc3QgY2hhciAqaXNhLCB1bnNpZ25lZCBsb25nICpiaXRtYXApCj4+ICB7Cj4+ICAJLyoK Pj4gIAkgKiBGb3IgYWxsIHBvc3NpYmxlIGNwdXMsIHdlIGhhdmUgYWxyZWFkeSB2YWxpZGF0ZWQg aW4KPj4gQEAgLTM0OSw3ICs0MDUsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfcGFyc2Vf aXNhX3N0cmluZyh1bnNpZ25lZCBsb25nICp0aGlzX2h3Y2FwLCBzdHJ1Y3QgcmlzYwo+PiAgCXdo aWxlICgqaXNhKSB7Cj4+ICAJCWNvbnN0IGNoYXIgKmV4dCA9IGlzYSsrOwo+PiAgCQljb25zdCBj aGFyICpleHRfZW5kID0gaXNhOwo+PiAtCQlib29sIGV4dF9sb25nID0gZmFsc2UsIGV4dF9lcnIg PSBmYWxzZTsKPj4gKwkJYm9vbCBleHRfZXJyID0gZmFsc2U7Cj4+ICAKPj4gIAkJc3dpdGNoICgq ZXh0KSB7Cj4+ICAJCWNhc2UgJ3MnOgo+PiBAQCAtMzg5LDcgKzQ0NSw2IEBAIHN0YXRpYyB2b2lk IF9faW5pdCByaXNjdl9wYXJzZV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKnRoaXNfaHdjYXAs IHN0cnVjdCByaXNjCj4+ICAJCQkgKiBjaGFyYWN0ZXIgaXRzZWxmIHdoaWxlIGVsaW1pbmF0aW5n IHRoZSBleHRlbnNpb25zIHZlcnNpb24gbnVtYmVyLgo+PiAgCQkJICogQSBzaW1wbGUgcmUtaW5j cmVtZW50IHNvbHZlcyB0aGlzIHByb2JsZW0uCj4+ICAJCQkgKi8KPj4gLQkJCWV4dF9sb25nID0g dHJ1ZTsKPj4gIAkJCWZvciAoOyAqaXNhICYmICppc2EgIT0gJ18nOyArK2lzYSkKPj4gIAkJCQlp ZiAodW5saWtlbHkoIWlzYWxudW0oKmlzYSkpKQo+PiAgCQkJCQlleHRfZXJyID0gdHJ1ZTsKPj4g QEAgLTQ2OSwxNyArNTI0LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHJpc2N2X3BhcnNlX2lzYV9z dHJpbmcodW5zaWduZWQgbG9uZyAqdGhpc19od2NhcCwgc3RydWN0IHJpc2MKPj4gIAo+PiAgCQlp ZiAodW5saWtlbHkoZXh0X2VycikpCj4+ICAJCQljb250aW51ZTsKPj4gLQkJaWYgKCFleHRfbG9u Zykgewo+PiAtCQkJaW50IG5yID0gdG9sb3dlcigqZXh0KSAtICdhJzsKPj4gIAo+PiAtCQkJaWYg KHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2sobnIpKSB7Cj4+IC0JCQkJKnRoaXNfaHdjYXAgfD0g aXNhMmh3Y2FwW25yXTsKPj4gLQkJCQlzZXRfYml0KG5yLCBpc2FpbmZvLT5pc2EpOwo+PiAtCQkJ fQo+PiAtCQl9IGVsc2Ugewo+PiAtCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByaXNjdl9pc2FfZXh0 X2NvdW50OyBpKyspCj4+IC0JCQkJbWF0Y2hfaXNhX2V4dCgmcmlzY3ZfaXNhX2V4dFtpXSwgZXh0 LCBleHRfZW5kLCBpc2FpbmZvKTsKPj4gLQkJfQo+PiArCQltYXRjaF9pc2FfZXh0KGV4dCwgZXh0 X2VuZCwgYml0bWFwKTsKPj4gIAl9Cj4+ICB9Cj4+ICAKPj4gQEAgLTUwMSw2ICs1NDcsNyBAQCBz dGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9mcm9tX2lzYV9zdHJpbmcodW5zaWdu ZWQgbG9uZyAqaXNhMmh3Y2FwKQo+PiAgCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKPj4g IAkJc3RydWN0IHJpc2N2X2lzYWluZm8gKmlzYWluZm8gPSAmaGFydF9pc2FbY3B1XTsKPj4gIAkJ dW5zaWduZWQgbG9uZyB0aGlzX2h3Y2FwID0gMDsKPj4gKwkJREVDTEFSRV9CSVRNQVAoaXNhX2Jp dG1hcCwgUklTQ1ZfSVNBX0VYVF9NQVgpID0geyAwIH07Cj4+ICAKPj4gIAkJaWYgKGFjcGlfZGlz YWJsZWQpIHsKPj4gIAkJCW5vZGUgPSBvZl9jcHVfZGV2aWNlX25vZGVfZ2V0KGNwdSk7Cj4+IEBA IC01MjMsNyArNTcwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHJpc2N2X2ZpbGxfaHdjYXBfZnJv bV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcCkKPj4gIAkJCX0KPj4gIAkJfQo+ PiAgCj4+IC0JCXJpc2N2X3BhcnNlX2lzYV9zdHJpbmcoJnRoaXNfaHdjYXAsIGlzYWluZm8sIGlz YTJod2NhcCwgaXNhKTsKPj4gKwkJcmlzY3ZfcmVzb2x2ZV9pc2Ffc3RyaW5nKGlzYSwgaXNhX2Jp dG1hcCk7Cj4+ICAKPj4gIAkJLyoKPj4gIAkJICogVGhlc2Ugb25lcyB3ZXJlIGFzIHRoZXkgd2Vy ZSBwYXJ0IG9mIHRoZSBiYXNlIElTQSB3aGVuIHRoZQo+PiBAQCAtNTMxLDEwICs1NzgsMTAgQEAg c3RhdGljIHZvaWQgX19pbml0IHJpc2N2X2ZpbGxfaHdjYXBfZnJvbV9pc2Ffc3RyaW5nKHVuc2ln bmVkIGxvbmcgKmlzYTJod2NhcCkKPj4gIAkJICogdW5jb25kaXRpb25hbGx5IHdoZXJlIGBpYCBp cyBpbiByaXNjdixpc2Egb24gRFQgc3lzdGVtcy4KPj4gIAkJICovCj4+ICAJCWlmIChhY3BpX2Rp c2FibGVkKSB7Cj4+IC0JCQlzZXRfYml0KFJJU0NWX0lTQV9FWFRfWklDU1IsIGlzYWluZm8tPmlz YSk7Cj4+IC0JCQlzZXRfYml0KFJJU0NWX0lTQV9FWFRfWklGRU5DRUksIGlzYWluZm8tPmlzYSk7 Cj4+IC0JCQlzZXRfYml0KFJJU0NWX0lTQV9FWFRfWklDTlRSLCBpc2FpbmZvLT5pc2EpOwo+PiAt CQkJc2V0X2JpdChSSVNDVl9JU0FfRVhUX1pJSFBNLCBpc2FpbmZvLT5pc2EpOwo+PiArCQkJc2V0 X2JpdChSSVNDVl9JU0FfRVhUX1pJQ1NSLCBpc2FfYml0bWFwKTsKPj4gKwkJCXNldF9iaXQoUklT Q1ZfSVNBX0VYVF9aSUZFTkNFSSwgaXNhX2JpdG1hcCk7Cj4+ICsJCQlzZXRfYml0KFJJU0NWX0lT QV9FWFRfWklDTlRSLCBpc2FfYml0bWFwKTsKPj4gKwkJCXNldF9iaXQoUklTQ1ZfSVNBX0VYVF9a SUhQTSwgaXNhX2JpdG1hcCk7Cj4+ICAJCX0KPj4gIAo+PiAgCQkvKgo+PiBAQCAtNTQ4LDkgKzU5 NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9mcm9tX2lzYV9zdHJp bmcodW5zaWduZWQgbG9uZyAqaXNhMmh3Y2FwKQo+PiAgCQlpZiAoYWNwaV9kaXNhYmxlZCAmJiBy aXNjdl9jYWNoZWRfbXZlbmRvcmlkKGNwdSkgPT0gVEhFQURfVkVORE9SX0lEICYmCj4+ICAJCSAg ICByaXNjdl9jYWNoZWRfbWFyY2hpZChjcHUpID09IDB4MCkgewo+PiAgCQkJdGhpc19od2NhcCAm PSB+aXNhMmh3Y2FwW1JJU0NWX0lTQV9FWFRfdl07Cj4+IC0JCQljbGVhcl9iaXQoUklTQ1ZfSVNB X0VYVF92LCBpc2FpbmZvLT5pc2EpOwo+PiArCQkJY2xlYXJfYml0KFJJU0NWX0lTQV9FWFRfdiwg aXNhX2JpdG1hcCk7Cj4+ICAJCX0KPj4gIAo+PiArCQlyaXNjdl9yZXNvbHZlX2lzYShpc2FfYml0 bWFwLCBpc2FpbmZvLCAmdGhpc19od2NhcCwgaXNhMmh3Y2FwKTsKPj4gKwo+PiAgCQkvKgo+PiAg CQkgKiBBbGwgIm9rYXkiIGhhcnQgc2hvdWxkIGhhdmUgc2FtZSBpc2EuIFNldCBIV0NBUCBiYXNl ZCBvbgo+PiAgCQkgKiBjb21tb24gY2FwYWJpbGl0aWVzIG9mIGV2ZXJ5ICJva2F5IiBoYXJ0LCBp biBjYXNlIHRoZXkgZG9uJ3QKPj4gQEAgLTU3OSw2ICs2MjgsNyBAQCBzdGF0aWMgaW50IF9faW5p dCByaXNjdl9maWxsX2h3Y2FwX2Zyb21fZXh0X2xpc3QodW5zaWduZWQgbG9uZyAqaXNhMmh3Y2Fw KQo+PiAgCQl1bnNpZ25lZCBsb25nIHRoaXNfaHdjYXAgPSAwOwo+PiAgCQlzdHJ1Y3QgZGV2aWNl X25vZGUgKmNwdV9ub2RlOwo+PiAgCQlzdHJ1Y3QgcmlzY3ZfaXNhaW5mbyAqaXNhaW5mbyA9ICZo YXJ0X2lzYVtjcHVdOwo+PiArCQlERUNMQVJFX0JJVE1BUChpc2FfYml0bWFwLCBSSVNDVl9JU0Ff RVhUX01BWCkgPSB7IDAgfTsKPj4gIAo+PiAgCQljcHVfbm9kZSA9IG9mX2NwdV9kZXZpY2Vfbm9k ZV9nZXQoY3B1KTsKPj4gIAkJaWYgKCFjcHVfbm9kZSkgewo+PiBAQCAtNTk4LDIyICs2NDgsMTEg QEAgc3RhdGljIGludCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9mcm9tX2V4dF9saXN0KHVuc2ln bmVkIGxvbmcgKmlzYTJod2NhcCkKPj4gIAkJCQkJCSAgICAgZXh0LT5wcm9wZXJ0eSkgPCAwKQo+ PiAgCQkJCWNvbnRpbnVlOwo+PiAgCj4+IC0JCQlpZiAoZXh0LT5zdWJzZXRfZXh0X3NpemUpIHsK Pj4gLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGV4dC0+c3Vic2V0X2V4dF9zaXplOyBqKyspIHsK Pj4gLQkJCQkJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2soZXh0LT5zdWJzZXRfZXh0X2lk c1tpXSkpCj4+IC0JCQkJCQlzZXRfYml0KGV4dC0+c3Vic2V0X2V4dF9pZHNbal0sIGlzYWluZm8t PmlzYSk7Cj4+IC0JCQkJfQo+PiAtCQkJfQo+PiAtCj4+IC0JCQlpZiAocmlzY3ZfaXNhX2V4dGVu c2lvbl9jaGVjayhleHQtPmlkKSkgewo+PiAtCQkJCXNldF9iaXQoZXh0LT5pZCwgaXNhaW5mby0+ aXNhKTsKPj4gLQo+PiAtCQkJCS8qIE9ubHkgc2luZ2xlIGxldHRlciBleHRlbnNpb25zIGdldCBz ZXQgaW4gaHdjYXAgKi8KPj4gLQkJCQlpZiAoc3RybmxlbihyaXNjdl9pc2FfZXh0W2ldLm5hbWUs IDIpID09IDEpCj4+IC0JCQkJCXRoaXNfaHdjYXAgfD0gaXNhMmh3Y2FwW3Jpc2N2X2lzYV9leHRb aV0uaWRdOwo+PiAtCQkJfQo+PiArCQkJcmlzY3ZfaXNhX3NldF9leHQoZXh0LCBpc2FfYml0bWFw KTsKPj4gIAkJfQo+PiAgCj4+ICsJCXJpc2N2X3Jlc29sdmVfaXNhKGlzYV9iaXRtYXAsIGlzYWlu Zm8sICZ0aGlzX2h3Y2FwLCBpc2EyaHdjYXApOwo+PiArCj4+ICAJCW9mX25vZGVfcHV0KGNwdV9u b2RlKTsKPj4gIAo+PiAgCQkvKgo+PiAtLSAKPj4gMi40My4wCj4+CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QK bGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==