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 8D1C6C4345F for ; Fri, 12 Apr 2024 22:50:59 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=J8lfJggAI4wJTjSDHi3gjeJmqQ2q3reSZo3Lz9gC6Lo=; b=Df7oUXwkKCGrwv P/jn4HjC4iOGuKEdE1EVIPZSdGPxa8W2FQ/FjRcPVkmojGbEUDTNX4jPnlmgr5k8ad/VrMMSR4Qkm RnvT1eAFMTNbXQifGHy3CYstlfHPufwNNo/edS5yzx+mWRXiZtOTrwWbUEF4hbZypJRteCGvimL3p JTNOTqCKMv9IUS+EJFqLsHJq/U/RDliLm0+EZNoQcc/HIhMDKnYXaXbuyVR6pzv5vEcaRpt4DztRk Pfzkm/2NAm/98oIbzm0BdU77AnZ2aFPympl8NP8YpTsAM+GjjvTIXk+cD92G7YJE5AqBLUQadOSYB +/vO3y5cS6RwmicolZFQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvPjL-00000001ajC-20gZ; Fri, 12 Apr 2024 22:50:47 +0000 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvPjH-00000001ai7-2pHf for linux-arm-kernel@lists.infradead.org; Fri, 12 Apr 2024 22:50:45 +0000 Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-2d8a24f8a3cso14330301fa.1 for ; Fri, 12 Apr 2024 15:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1712962242; x=1713567042; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=MMsCtRxa3tw9lfURs3uHsBM7KEusWInjgfJxTxdOMic=; b=l3YO0hqfBw7Yx3XqkyRHtYnAX4jF2r4+Ofy1c/PZ22NKWhp57qoav8yXZAtin9sx0I D+sZWdK0KpWMVoondesFOf+JqAQhLsD66b1qIf9xXs5hLGkrWJhZ0d9+XaIJq0zkJ/3G V8LN5fHlQsdzxYMHnmrpOTDcotQ514eIw0ZQnimHnSbsSIAi+uE/a7S0211TO5bwgpw2 MRz8MncRCTRvfB/ehXms5tFW5KJHdsKV37lg7dIVSrHGBADxQtaP5oG0T3nBZseDOr6s /h6vWykqzl0Xwt6ElwPc7ynHtYl6zwOgdfQVBZNdzUdtjz2/poH5hBh1EoGaTY93R+w6 auww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712962242; x=1713567042; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MMsCtRxa3tw9lfURs3uHsBM7KEusWInjgfJxTxdOMic=; b=aL6EmzWaEojil8quDzf1YTdQqHjSbjmMRN7jUoIjuH/stjRm21En92AKo556M5a0+E KvyOue+279lwqf2RTsnoyHCviSOw8rPCG6u1fqZU2LXoD4BCDMeKP1i8o9C3h2uFLbwE eZ0H5IlSjgRxvG8R7LdSEMDmFrX/EB7VWBnqMZfJYle5DUuDNZnhinYwS91peUbcaMjo KpSiFGwEaPrHytbbgaQzAwKx98BV0xqdyo4dzfHU7BI6nichGoT3kqDvo6kxuIFHR5M6 4oHdCGO1qZPGO21IC0jsWVNGDTIA9PAoXq8gBqC8ZMYe8Tdaydt9ivVkQv6qIHQykvLl TBDA== X-Forwarded-Encrypted: i=1; AJvYcCWVvdxlvZyt5ZkyUwTCo68g66ht1v6jO5hhXQ/+RWFSvOiAJA8tHsBmAjyVKxpRKpxwPT79jpkJ1+BxEQKJW/ZP+Ne1++ldH+aXCQzbIPYJjJ4V6ME= X-Gm-Message-State: AOJu0Yy3YOh0YLb8574riSeNEZe00tBxJ60mL8wsJHxQkrkcUKSMrKzs V6r4Xuw5IXWic7a9bcLjJ/fDMw/8n5BUT3kRbCcQMhD6uQsECGTE4DoAEJTE9xbz6Ul1hvqJfXA Sr+lKFTuQY6Q13t5WqBOmzzO3BIY25g5EGcjVRg== X-Google-Smtp-Source: AGHT+IGaZUEXMvTlEpC5KgtprvlDwVJ9WAEdlOXiw8m+HJgqK595JEoS941wL7UxTUrbblhalItxVVjQmbvrEP4613I= X-Received: by 2002:a05:651c:102a:b0:2d4:514b:428 with SMTP id w10-20020a05651c102a00b002d4514b0428mr2242711ljm.6.1712962241205; Fri, 12 Apr 2024 15:50:41 -0700 (PDT) MIME-Version: 1.0 References: <20240411-dev-charlie-support_thead_vector_6_9-v1-0-4af9815ec746@rivosinc.com> <20240411-dev-charlie-support_thead_vector_6_9-v1-16-4af9815ec746@rivosinc.com> In-Reply-To: From: Evan Green Date: Fri, 12 Apr 2024 15:50:05 -0700 Message-ID: Subject: Re: [PATCH 16/19] riscv: hwprobe: Add vendor extension probing To: Charlie Jenkins Cc: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Guo Ren , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Conor Dooley , =?UTF-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= , Jonathan Corbet , Shuah Khan , linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Palmer Dabbelt , linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240412_155043_758205_7967BE8B X-CRM114-Status: GOOD ( 60.53 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgMzoyMeKAr1BNIENoYXJsaWUgSmVua2lucyA8Y2hhcmxp ZUByaXZvc2luYy5jb20+IHdyb3RlOgo+Cj4gT24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgMDI6NDM6 MDFQTSAtMDcwMCwgRXZhbiBHcmVlbiB3cm90ZToKPiA+IE9uIEZyaSwgQXByIDEyLCAyMDI0IGF0 IDE6MjDigK9QTSBDaGFybGllIEplbmtpbnMgPGNoYXJsaWVAcml2b3NpbmMuY29tPiB3cm90ZToK PiA+ID4KPiA+ID4gT24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgMTI6MDc6NDZQTSAtMDcwMCwgRXZh biBHcmVlbiB3cm90ZToKPiA+ID4gPiBPbiBGcmksIEFwciAxMiwgMjAyNCBhdCAxMToxN+KAr0FN IENoYXJsaWUgSmVua2lucyA8Y2hhcmxpZUByaXZvc2luYy5jb20+IHdyb3RlOgo+ID4gPiA+ID4K PiA+ID4gPiA+IE9uIEZyaSwgQXByIDEyLCAyMDI0IGF0IDEwOjA1OjIxQU0gLTA3MDAsIEV2YW4g R3JlZW4gd3JvdGU6Cj4gPiA+ID4gPiA+IE9uIFRodSwgQXByIDExLCAyMDI0IGF0IDk6MTLigK9Q TSBDaGFybGllIEplbmtpbnMgPGNoYXJsaWVAcml2b3NpbmMuY29tPiB3cm90ZToKPiA+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiA+IEFkZCBhIG5ldyBod3Byb2JlIGtleSAiUklTQ1ZfSFdQUk9CRV9L RVlfVkVORE9SX0VYVF8wIiB3aGljaCBhbGxvd3MKPiA+ID4gPiA+ID4gPiB1c2Vyc3BhY2UgdG8g cHJvYmUgZm9yIHRoZSBuZXcgUklTQ1ZfSVNBX1ZFTkRPUl9FWFRfWFRIRUFEVkVDVE9SIHZlbmRv cgo+ID4gPiA+ID4gPiA+IGV4dGVuc2lvbi4KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IFNp Z25lZC1vZmYtYnk6IENoYXJsaWUgSmVua2lucyA8Y2hhcmxpZUByaXZvc2luYy5jb20+Cj4gPiA+ ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ID4gIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHdwcm9i ZS5oICAgICAgfCAgNCArLS0KPiA+ID4gPiA+ID4gPiAgYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkv YXNtL2h3cHJvYmUuaCB8IDEwICsrKysrLQo+ID4gPiA+ID4gPiA+ICBhcmNoL3Jpc2N2L2tlcm5l bC9zeXNfaHdwcm9iZS5jICAgICAgIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0KPiA+ID4gPiA+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspLCA1 IGRlbGV0aW9ucygtKQo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2Fy Y2gvcmlzY3YvaW5jbHVkZS9hc20vaHdwcm9iZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9o d3Byb2JlLmgKPiA+ID4gPiA+ID4gPiBpbmRleCA2MzA1MDdkZmY1ZWEuLmU2ODQ5NmI0ZjhkZSAx MDA2NDQKPiA+ID4gPiA+ID4gPiAtLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h3cHJvYmUu aAo+ID4gPiA+ID4gPiA+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHdwcm9iZS5oCj4g PiA+ID4gPiA+ID4gQEAgLTEsNiArMSw2IEBACj4gPiA+ID4gPiA+ID4gIC8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovCj4gPiA+ID4g PiA+ID4gIC8qCj4gPiA+ID4gPiA+ID4gLSAqIENvcHlyaWdodCAyMDIzIFJpdm9zLCBJbmMKPiA+ ID4gPiA+ID4gPiArICogQ29weXJpZ2h0IDIwMjMtMjAyNCBSaXZvcywgSW5jCj4gPiA+ID4gPiA+ ID4gICAqLwo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gICNpZm5kZWYgX0FTTV9IV1BST0JF X0gKPiA+ID4gPiA+ID4gPiBAQCAtOCw3ICs4LDcgQEAKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiA+ICAjaW5jbHVkZSA8dWFwaS9hc20vaHdwcm9iZS5oPgo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gLSNkZWZpbmUgUklTQ1ZfSFdQUk9CRV9NQVhfS0VZIDYKPiA+ID4gPiA+ID4gPiArI2Rl ZmluZSBSSVNDVl9IV1BST0JFX01BWF9LRVkgNwo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4g IHN0YXRpYyBpbmxpbmUgYm9vbCByaXNjdl9od3Byb2JlX2tleV9pc192YWxpZChfX3M2NCBrZXkp Cj4gPiA+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9p bmNsdWRlL3VhcGkvYXNtL2h3cHJvYmUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS91YXBpL2FzbS9o d3Byb2JlLmgKPiA+ID4gPiA+ID4gPiBpbmRleCA5ZjJhOGUzZmYyMDQuLjY2MTRkM2FkZmM3NSAx MDA2NDQKPiA+ID4gPiA+ID4gPiAtLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvdWFwaS9hc20vaHdw cm9iZS5oCj4gPiA+ID4gPiA+ID4gKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2h3 cHJvYmUuaAo+ID4gPiA+ID4gPiA+IEBAIC0xLDYgKzEsNiBAQAo+ID4gPiA+ID4gPiA+ICAvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAq Lwo+ID4gPiA+ID4gPiA+ICAvKgo+ID4gPiA+ID4gPiA+IC0gKiBDb3B5cmlnaHQgMjAyMyBSaXZv cywgSW5jCj4gPiA+ID4gPiA+ID4gKyAqIENvcHlyaWdodCAyMDIzLTIwMjQgUml2b3MsIEluYwo+ ID4gPiA+ID4gPiA+ICAgKi8KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ICAjaWZuZGVmIF9V QVBJX0FTTV9IV1BST0JFX0gKPiA+ID4gPiA+ID4gPiBAQCAtNjcsNiArNjcsMTQgQEAgc3RydWN0 IHJpc2N2X2h3cHJvYmUgewo+ID4gPiA+ID4gPiA+ICAjZGVmaW5lICAgICAgICAgICAgICAgIFJJ U0NWX0hXUFJPQkVfTUlTQUxJR05FRF9VTlNVUFBPUlRFRCAgICAoNCA8PCAwKQo+ID4gPiA+ID4g PiA+ICAjZGVmaW5lICAgICAgICAgICAgICAgIFJJU0NWX0hXUFJPQkVfTUlTQUxJR05FRF9NQVNL ICAgICAgICAgICAoNyA8PCAwKQo+ID4gPiA+ID4gPiA+ICAjZGVmaW5lIFJJU0NWX0hXUFJPQkVf S0VZX1pJQ0JPWl9CTE9DS19TSVpFICAgIDYKPiA+ID4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ID4g PiArICogSXQgaXMgbm90IHBvc3NpYmxlIGZvciBvbmUgQ1BVIHRvIGhhdmUgbXVsdGlwbGUgdmVu ZG9yIGlkcywgc28gZWFjaCB2ZW5kb3IKPiA+ID4gPiA+ID4gPiArICogaGFzIGl0cyBvd24gdmVu ZG9yIGV4dGVuc2lvbiAibmFtZXNwYWNlIi4gVGhlIGtleXMgZm9yIGVhY2ggdmVuZG9yIHN0YXJ0 cwo+ID4gPiA+ID4gPiA+ICsgKiBhdCB6ZXJvLgo+ID4gPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ ID4gPiArI2RlZmluZSBSSVNDVl9IV1BST0JFX0tFWV9WRU5ET1JfRVhUXzAgNwo+ID4gPiA+ID4g PiA+ICsgLyogVC1IZWFkICovCj4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgICAgICAgICAgICAgICAg UklTQ1ZfSFdQUk9CRV9WRU5ET1JfRVhUX1hUSEVBRFZFQ1RPUiAgICgxIDw8IDApCj4gPiA+ID4g PiA+ID4gIC8qIEluY3JlYXNlIFJJU0NWX0hXUFJPQkVfTUFYX0tFWSB3aGVuIGFkZGluZyBpdGVt cy4gKi8KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ICAvKiBGbGFncyAqLwo+ID4gPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zeXNfaHdwcm9iZS5jIGIvYXJjaC9y aXNjdi9rZXJuZWwvc3lzX2h3cHJvYmUuYwo+ID4gPiA+ID4gPiA+IGluZGV4IGUwYTQyYzg1MTUx MS4uMzY1Y2U3MzgwNDQzIDEwMDY0NAo+ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvcmlzY3Yva2Vy bmVsL3N5c19od3Byb2JlLmMKPiA+ID4gPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9z eXNfaHdwcm9iZS5jCj4gPiA+ID4gPiA+ID4gQEAgLTY5LDcgKzY5LDggQEAgc3RhdGljIHZvaWQg aHdwcm9iZV9pc2FfZXh0MChzdHJ1Y3QgcmlzY3ZfaHdwcm9iZSAqcGFpciwKPiA+ID4gPiA+ID4g PiAgICAgICAgIGlmIChyaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBjKSkKPiA+ ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgcGFpci0+dmFsdWUgfD0gUklTQ1ZfSFdQUk9CRV9J TUFfQzsKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IC0gICAgICAgaWYgKGhhc192ZWN0b3Io KSAmJiAhcmlzY3ZfaGFzX3ZlbmRvcl9leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX1ZFTkRP Ul9FWFRfWFRIRUFEVkVDVE9SKSkKPiA+ID4gPiA+ID4gPiArICAgICAgIGlmIChoYXNfdmVjdG9y KCkgJiYKPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAhX19yaXNjdl9pc2FfdmVuZG9yX2V4dGVu c2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX1ZFTkRPUl9FWFRfWFRIRUFEVkVDVE9SKSkK PiA+ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgcGFpci0+dmFsdWUgfD0gUklTQ1ZfSFdQUk9C RV9JTUFfVjsKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ICAgICAgICAgLyoKPiA+ID4gPiA+ ID4gPiBAQCAtMTEyLDcgKzExMyw4IEBAIHN0YXRpYyB2b2lkIGh3cHJvYmVfaXNhX2V4dDAoc3Ry dWN0IHJpc2N2X2h3cHJvYmUgKnBhaXIsCj4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgIEVY VF9LRVkoWkFDQVMpOwo+ID4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICBFWFRfS0VZKFpJQ09O RCk7Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgaWYgKGhhc192 ZWN0b3IoKSAmJiAhcmlzY3ZfaGFzX3ZlbmRvcl9leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNB X1ZFTkRPUl9FWFRfWFRIRUFEVkVDVE9SKSkgewo+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAg ICBpZiAoaGFzX3ZlY3RvcigpICYmCj4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAh cmlzY3ZfaGFzX3ZlbmRvcl9leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX1ZFTkRPUl9FWFRf WFRIRUFEVkVDVE9SKSkgewo+ID4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIEVY VF9LRVkoWlZCQik7Cj4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgRVhUX0tF WShaVkJDKTsKPiA+ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBFWFRfS0VZKFpW S0IpOwo+ID4gPiA+ID4gPiA+IEBAIC0xMzksNiArMTQxLDU1IEBAIHN0YXRpYyB2b2lkIGh3cHJv YmVfaXNhX2V4dDAoc3RydWN0IHJpc2N2X2h3cHJvYmUgKnBhaXIsCj4gPiA+ID4gPiA+ID4gICAg ICAgICBwYWlyLT52YWx1ZSAmPSB+bWlzc2luZzsKPiA+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGh3cHJvYmVfaXNhX3ZlbmRvcl9leHQwKHN0 cnVjdCByaXNjdl9od3Byb2JlICpwYWlyLAo+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzKQo+ID4gPiA+ID4g PiA+ICt7Cj4gPiA+ID4gPiA+ID4gKyAgICAgICBpbnQgY3B1Owo+ID4gPiA+ID4gPiA+ICsgICAg ICAgdTY0IG1pc3NpbmcgPSAwOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArICAgICAg IHBhaXItPnZhbHVlID0gMDsKPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKyAgICAgICBz dHJ1Y3QgcmlzY3ZfaHdwcm9iZSBtdmVuZG9yaWQgPSB7Cj4gPiA+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgIC5rZXkgPSBSSVNDVl9IV1BST0JFX0tFWV9NVkVORE9SSUQsCj4gPiA+ID4gPiA+ID4g KyAgICAgICAgICAgICAgIC52YWx1ZSA9IDAKPiA+ID4gPiA+ID4gPiArICAgICAgIH07Cj4gPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ICsgICAgICAgaHdwcm9iZV9hcmNoX2lkKCZtdmVuZG9y aWQsIGNwdXMpOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArICAgICAgIC8qIFNldCB2 YWx1ZSB0byB6ZXJvIGlmIENQVXMgaW4gdGhlIHNldCBkbyBub3QgaGF2ZSB0aGUgc2FtZSB2ZW5k b3IuICovCj4gPiA+ID4gPiA+ID4gKyAgICAgICBpZiAobXZlbmRvcmlkLnZhbHVlID09IC0xVUxM KQo+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4gPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiA+ICsgICAgICAgLyoKPiA+ID4gPiA+ID4gPiArICAgICAgICAqIExvb3AgdGhy b3VnaCBhbmQgcmVjb3JkIHZlbmRvciBleHRlbnNpb25zIHRoYXQgMSkgYW55b25lIGhhcywgYW5k Cj4gPiA+ID4gPiA+ID4gKyAgICAgICAgKiAyKSBhbnlvbmUgZG9lc24ndCBoYXZlLgo+ID4gPiA+ ID4gPiA+ICsgICAgICAgICovCj4gPiA+ID4gPiA+ID4gKyAgICAgICBmb3JfZWFjaF9jcHUoY3B1 LCBjcHVzKSB7Cj4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHN0cnVjdCByaXNjdl9pc2Fp bmZvICppc2F2ZW5kb3JpbmZvID0gJmhhcnRfaXNhX3ZlbmRvcltjcHVdOwo+ID4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gPiArI2RlZmluZSBWRU5ET1JfRVhUX0tFWShleHQpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ ID4gPiA+ICsgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gPiA+ID4gKyAg ICAgICAgICAgICAgIGlmIChfX3Jpc2N2X2lzYV92ZW5kb3JfZXh0ZW5zaW9uX2F2YWlsYWJsZShp c2F2ZW5kb3JpbmZvLT5pc2EsICAgICAgICAgIFwKPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSSVNDVl9JU0FfVkVO RE9SX0VYVF8jI2V4dCkpICAgXAo+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHBhaXItPnZhbHVlIHw9IFJJU0NWX0hXUFJPQkVfVkVORE9SX0VYVF8jI2V4dDsgICAgICAgICAg ICAgICAgICBcCj4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiA+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nIHw9IFJJU0NWX0hX UFJPQkVfVkVORE9SX0VYVF8jI2V4dDsgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ID4g PiA+ICsgICAgICAgfSB3aGlsZSAoZmFsc2UpCj4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ ICsgICAgICAgLyoKPiA+ID4gPiA+ID4gPiArICAgICAgICAqIE9ubHkgdXNlIFZFTkRPUl9FWFRf S0VZKCkgZm9yIGV4dGVuc2lvbnMgd2hpY2ggY2FuIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLAo+ ID4gPiA+ID4gPiA+ICsgICAgICAgICogcmVnYXJkbGVzcyBvZiB0aGUga2VybmVsJ3MgY29uZmln dXJhdGlvbiwgYXMgbm8gb3RoZXIgY2hlY2tzLCBiZXNpZGVzCj4gPiA+ID4gPiA+ID4gKyAgICAg ICAgKiBwcmVzZW5jZSBpbiB0aGUgaGFydF92ZW5kb3JfaXNhIGJpdG1hcCwgYXJlIG1hZGUuCj4g PiA+ID4gPiA+ID4gKyAgICAgICAgKi8KPiA+ID4gPiA+ID4gPiArICAgICAgIFZFTkRPUl9FWFRf S0VZKFhUSEVBRFZFQ1RPUik7Cj4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ICsjdW5kZWYg VkVORE9SX0VYVF9LRVkKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gSGV5IENoYXJsaWUsCj4gPiA+ ID4gPiA+IFRoYW5rcyBmb3Igd3JpdGluZyB0aGlzIHVwISBBdCB0aGUgdmVyeSBsZWFzdCBJIHRo aW5rIHRoZQo+ID4gPiA+ID4gPiBUSEVBRC1zcGVjaWZpYyBzdHVmZiBzaG91bGQgcHJvYmFibHkg ZW5kIHVwIGluIGl0cyBvd24gZmlsZSwgb3RoZXJ3aXNlCj4gPiA+ID4gPiA+IGl0J2xsIGdldCBj aGFvdGljIHdpdGggdmVuZG9ycyBjbGFtb3JpbmcgdG8gYWRkIHN0dWZmIHJpZ2h0IGhlcmUuCj4g PiA+ID4gPgo+ID4gPiA+ID4gR3JlYXQgaWRlYSEKPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFdoYXQg ZG8geW91IHRoaW5rIGFib3V0IHRoaXMgYXBwcm9hY2g6Cj4gPiA+ID4gPiA+ICAqIFdlIGxlYXZl IFJJU0NWX0hXUFJPQkVfTUFYX0tFWSBhcyB0aGUgbWF4IGtleSBmb3IgdGhlICJnZW5lcmljCj4g PiA+ID4gPiA+IHdvcmxkIiwgZWcgNi1pc2gKPiA+ID4gPiA+ID4gICogV2UgZGVmaW5lIHRoYXQg YW55IGtleSBhYm92ZSAweDgwMDAwMDAwMDAwMDAwMDAgaXMgaW4gdGhlIHZlbmRvcgo+ID4gPiA+ ID4gPiBzcGFjZSwgc28gdGhlIG1lYW5pbmcgb2YgdGhlIGtleXMgZGVwZW5kcyBmaXJzdCBvbiB0 aGUgbXZlbmRvcmlkCj4gPiA+ID4gPiA+IHZhbHVlLgo+ID4gPiA+ID4gPiAgKiBJbiB0aGUga2Vy bmVsIGNvZGUsIGVhY2ggbmV3IHZlbmRvciBhZGRzIG9uIHRvIGEgZ2xvYmFsIHN0cnVjdCwKPiA+ ID4gPiA+ID4gd2hpY2ggbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZToKPiA+ID4gPiA+ID4gc3Ry dWN0IGh3cHJvYmVfdmVuZG9yX3NwYWNlIHZlbmRvcl9zcGFjZVtdID0gewo+ID4gPiA+ID4gPiAg ICAgICAgIHsKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgIC5tdmVuZG9yaWQgPSBWRU5ET1Jf VEhFQUQsCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAubWF4X2h3cHJvYmVfa2V5ID0gVEhF QURfTUFYX0hXUFJPQkVfS0VZLCAvLyBjdXJyZW50bHkKPiA+ID4gPiA+ID4gMSBvciAweDgwMDAw MDAwMDAwMDAwMDEgd2l0aCB3aGF0IHlvdSd2ZSBnb3QuCj4gPiA+ID4gPiA+ICAgICAgICAgICAg ICAgICAuaHdwcm9iZV9mbiA9IHRoZWFkX2h3cHJvYmUKPiA+ID4gPiA+ID4gICAgICAgICB9LAo+ ID4gPiA+ID4gPiAgICAgICAgIC4uLgo+ID4gPiA+ID4gPiB9Owo+ID4gPiA+ID4gPgo+ID4gPiA+ ID4gPiAgKiBBIGh3cHJvYmVfdGhlYWQuYyBpbXBsZW1lbnRzIHRoZWFkX2h3cHJvYmUoKSwgYW5k IGlzIGNhbGxlZAo+ID4gPiA+ID4gPiB3aGVuZXZlciB0aGUgZ2VuZXJpYyBod3Byb2JlIGVuY291 bnRlcnMgYSBrZXkgPj0weDgwMDAwMDAwMDAwMDAwMDAuCj4gPiA+ID4gPiA+ICAqIEdlbmVyaWMg Y29kZSBmb3Igc2V0dGluZyB1cCB0aGUgVkRTTyBjYW4gdGhlbiBzdGlsbCBjYWxsIHRoZQo+ID4g PiA+ID4gPiB2ZW5kb3Itc3BlY2lmaWMgaHdwcm9iZV9mbigpIHJlcGVhdGVkbHkgd2l0aCBhbiAi YWxsIENQVXMiIG1hc2sgZnJvbQo+ID4gPiA+ID4gPiB0aGUgYmFzZSB0byBtYXhfaHdwcm9iZV9r ZXkgYW5kIHNldCB1cCB0aGUgY2FjaGVkIHRhYmxlcyBpbiB1c2Vyc3BhY2UuCj4gPiA+ID4gPiA+ ICAqIFNpbmNlIHRoZSBWRFNPIGRhdGEgaGFzIGxpbWl0ZWQgc3BhY2Ugd2UgbWF5IGhhdmUgdG8g Y2FwIHRoZSBudW1iZXIKPiA+ID4gPiA+ID4gb2YgdmVuZG9yIGtleXMgd2UgY2FjaGUgdG8gYmUg bG93ZXIgdGhhbiBtYXhfaHdwcm9iZV9rZXkuIFNpbmNlIHRoZQo+ID4gPiA+ID4gPiBkYXRhIGl0 c2VsZiBpcyBub3QgZXhwb3NlZCB0byB1c2VybW9kZSB3ZSBjYW4gcmFpc2UgdGhpcyBjYXAgbGF0 ZXIgaWYKPiA+ID4gPiA+ID4gbmVlZGVkLgo+ID4gPiA+ID4KPiA+ID4gPiA+IEkga25vdyB2ZW5k b3IgZXh0ZW5zaW9ucyBhcmUga2luZCBvZiB0aGUgIndpbGQgd2VzdCIgb2YgcmlzY3YsIGJ1dCBp bgo+ID4gPiA+ID4gc3BpdGUgb2YgdGhhdCBJIHdhbnQgdG8gZGVzaWduIGEgY29uc2lzdGVudCBB UEkuIFRoZSBpc3N1ZSBJIGhhZCB3aXRoCj4gPiA+ID4gPiBoYXZpbmcgdGhpcyAidmVuZG9yIHNw YWNlIiBmb3IgZXhwb3NpbmcgdmVuZG9yIGV4dGVuc2lvbnMgd2FzIHRoYXQgdGhpcwo+ID4gPiA+ ID4gaXMgc29tZXRoaW5nIHRoYXQgaXMgaW5oZXJlbnRseSB0aGUgc2FtZSBmb3IgYWxsIHZlbmRv cnMuIEkgc2VlIGEgdmVuZG9yCj4gPiA+ID4gPiBzcGFjZSBsaWtlIHRoaXMgbW9yZSBhcHBsaWNh YmxlIGZvciBzb21ldGhpbmcgbGlrZQo+ID4gPiA+ID4gIlJJU0NWX0hXUFJPQkVfS0VZX1pJQ0JP Wl9CTE9DS19TSVpFIiB3aGVyZSBhIHZlbmRvciBoYXMgYSBzcGVjaWZpYwo+ID4gPiA+ID4gdmFs dWUgdGhleSB3b3VsZCBsaWtlIHRvIGV4cG9zZS4gSSBkbyBhZ3JlZSB0aGF0IGhhdmluZyBhIHZl bmRvciBzcGFjZQo+ID4gPiA+ID4gaXMgYSBnb29kIGRlc2lnbiBjaG9pY2UsIGJ1dCBJIGFtIG5v dCBjb252aW5jZWQgdGhhdCB2ZW5kb3IgZXh0ZW5zaW9ucwo+ID4gPiA+ID4gYXJlIHRoZSBwcm9w ZXIgdXNlLWNhc2UuCj4gPiA+ID4gPgo+ID4gPiA+ID4gQnkgaGF2aW5nIFJJU0NWX0hXUFJPQkVf S0VZX1ZFTkRPUl9FWFRfMCB3ZSBjYW4gZXhwb3NlIHRoZSB2ZW5kb3IKPiA+ID4gPiA+IGV4dGVu c2lvbnMgaW4gdGhlIHNhbWUgd2F5IHRoYXQgc3RhbmRhcmQgZXh0ZW5zaW9ucyBhcmUgZXhwb3Nl ZCwgd2l0aCBhCj4gPiA+ID4gPiBiaXRtYXNrIHJlcHJlc2VudGluZyBlYWNoIGV4dGVuc2lvbi4g SWYgdGhlc2UgYXJlIGluc3RlYWQgaW4gdGhlIHZlbmRvcgo+ID4gPiA+ID4gc3BhY2UsIGVhY2gg dmVuZG9yIHdvdWxkIHByb2JhYmx5IGJlIGluY2xpbmVkIHRvIGludHJvZHVjZSBhIGtleSBsaWtl Cj4gPiA+ID4gPiBSSVNDVl9IV1BST0JFX0tFWV9USEVBRF9FWFRfMCB0aGF0IHJldHVybnMgYSBi aXRtYXNrIG9mIGFsbCBvZiB0aGUgdGhlYWQKPiA+ID4gPiA+IHZlbmRvciBleHRlbnNpb25zLiBU aGlzIGR1cGxpY2F0ZWQgZWZmb3J0IGlzIHdoYXQgSSBhbSB0cnlpbmcgdG8gYXZvaWQuCj4gPiA+ ID4gPiBUaGUgYWx0ZXJuYXRpdmUgd291bGQgYmUgdGhhdCB2ZW5kb3JzIGhhdmUgYSBzZXBhcmF0 ZSBrZXkgZm9yIGVhY2gKPiA+ID4gPiA+IHZlbmRvciBleHRlbnNpb24gdGhleSB3b3VsZCBsaWtl IHRvIGV4cG9zZSwgYnV0IHRoYXQgaXMgc3RyaWN0bHkgbGVzcwo+ID4gPiA+ID4gZWZmaWNpZW50 IHRoYW4gdGhlIGV4aXN0aW5nIGJpdG1hc2sgcHJvYmluZy4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBE byB5b3UgdGhpbmsgdGhhdCBoYXZpbmcgdGhlIHZlbmRvciBzcGFjZSBpcyBhcHByb3ByaWF0ZSBm b3IgdmVuZG9yCj4gPiA+ID4gPiBleHRlbnNpb25zIGdpdmVuIG15IGNvbmNlcm5zPwo+ID4gPiA+ Cj4gPiA+ID4gSSBkbyBzZWUgd2hhdCB5b3UncmUgZ29pbmcgZm9yLiBJdCdzIHRpZHkgZm9yIGEg Yml0bWFzayB0byBqdXN0IGxldAo+ID4gPiA+IGFueW9uZSBhbGxvY2F0ZSB0aGUgbmV4dCBiaXQs IGJ1dCBsZWF2ZXMgeW91IHdpdGggdGhlIHNhbWUgcHJvYmxlbQo+ID4gPiA+IHdoZW4gYSB2ZW5k b3IgZGVjaWRlcyB0aGV5IHdhbnQgdG8gZXhwb3NlIGFuIGVudW0sIG9yIGRlY2lkZXMgdGhleQo+ ID4gPiA+IHdhbnQgdG8gZXhwb3NlIGEgYmF6aWxsaW9uIHRoaW5ncy4gSSB0aGluayBhIGdlbmVy YWxpemVkIHZlcnNpb24gb2YKPiA+ID4KPiA+ID4gVGhpcyBwYXRjaCBpcyBzdHJpY3RseSB0byBl eHBvc2UgaWYgYSB2ZW5kb3IgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCwKPiA+ID4gaG93IGRvZXMg ZXhwb3NpbmcgZW51bXMgZmFjdG9yIGluIGhlcmU/Cj4gPiA+Cj4gPiA+ID4gdGhlIGFwcHJvYWNo IHlvdSd2ZSB3cml0dGVuIHdvdWxkIGJlOiBzaW1wbHkgbGV0IHZlbmRvcnMgYWxsb2NhdGUga2V5 cwo+ID4gPiA+IGZyb20gdGhlIHNhbWUgZ2xvYmFsIHNwYWNlIHdlJ3JlIGFscmVhZHkgdXNpbmcu IE15IHdvcnJ5IHdhcyB0aGF0IGl0Cj4gPiA+Cj4gPiA+IEkgYW0gbWlzc2luZyBob3cgbXkgcHJv cG9zYWwgc3VnZ2VzdHMgYWxsb3dpbmcgdmVuZG9ycyB0byBhbGxvY2F0ZSBrZXlzCj4gPiA+IGlu IGEgZ2xvYmFsIHNwYWNlLgo+ID4gPgo+ID4gPiA+IHdvdWxkIHR1cm4gaW50byBhbiBleHBhbnNp dmUgc3VidXJiYW4gc3ByYXdsIG9mIG1vc3RseSBkZWFkIGJpdHMsIG9yCj4gPiA+ID4gaW4gdGhl IGNhc2Ugb2YgdmVuZG9yLXNwZWNpZmljIGtleXMsIGZ1bGwgb2YgImlmIChtdmVuZG9yX2lkKCkg IT0KPiA+ID4gPiBNSU5FKSByZXR1cm4gMDsiLiBNeSBob3BlIHdpdGggdGhlIHZlbmRvcmVkIGtl eXNwYWNlIGlzIGl0IHdvdWxkIGtlZXAKPiA+ID4KPiA+ID4gQW4gYXBwbGljYXRpb24gd2lsbCBh bHdheXMgbmVlZCB0byBjaGVjayB2ZW5kb3JpZCBiZWZvcmUgY2FsbGluZyBod3Byb2JlCj4gPiA+ IHdpdGggYSB2ZW5kb3Itc3BlY2lmaWMgZmVhdHVyZT8gSWYgdGhhdCBod3Byb2JlIHN1cHBvcnQg aXMgYSBrZXkgYWJvdmUKPiA+ID4gMTw8NjMsIHRoZW4gdGhlIGFwcGxpY2F0aW9uIHdpbGwgbmVl ZCB0byBwYXNzIHRoYXQgdmVuZG9yLXNwZWNpZmljIGtleQo+ID4gPiBhbmQgaW50ZXJwcmV0IHRo ZSB2ZW5kb3Itc3BlY2lmaWMgdmFsdWUuIElmIHRoYXQgaHdwcm9iZSBzdXBwb3J0IGlzIHdoYXQK PiA+ID4gSSBoYXZlIHByb3Bvc2VkIGhlcmUsIHRoZW4gdGhlIHVzZXIgY2FsbHMgdGhlIHN0YW5k YXJkaXplZCB2ZW5kb3IKPiA+ID4gZXh0ZW5zaW9uIGh3cHJvYmUgZW5kcG9pbnQgYW5kIHRoZW4g bmVlZHMgdG8gaW50ZXJwcmV0IHRoZSByZXN1bHQgYmFzZWQKPiA+ID4gb24gdGhlIHZlbmRvciBv ZiB0aGUgY3B1bWFzay4gSW4gYm90aCBjYXNlcyB0aGV5IG5lZWQgdG8gY2hlY2sgdGhlCj4gPiA+ IHZlbmRvcmlkIG9mIHRoZSBjcHVtYXNrLiBJbiB0aGUgdGVzdCBjYXNlIEkgYWRkZWQgSSBmYWls ZWQgdG8gY2hlY2sgdGhlCj4gPiA+IHZlbmRvcmlkIGJ1dCBJIHNob3VsZCBoYXZlIGhhZCB0aGF0 Lgo+ID4gPgo+ID4gPiA+IHRoZSBzcHJhd2wgZnJvbSBwb2xsdXRpbmcgdGhlIGdlbmVyYWwgYXJy YXkgb2YgKGhvcGVmdWxseSB2YWx1YWJsZSkKPiA+ID4gPiBpbmZvIHdpdGggc3R1ZmYgdGhhdCdz IGxpa2VseSB0byBiZWNvbWUgbGVzcyByZWxldmFudCBhcyB0aW1lIHBhc3Nlcy4KPiA+ID4gPiBJ dCBhbHNvIGxvd2VycyB0aGUgYmFyIGEgYml0IHRvIG1ha2UgaXQgZWFzaWVyIGZvciB2ZW5kb3Jz IHRvIGV4cG9zZQo+ID4gPiA+IGJpdHMsIGFzIHRoZXkgZG9uJ3QgY29uc3VtZSBnbG9iYWwgc3Bh Y2UgZm9yIGV2ZXJ5b25lIGZvciBhbGwgb2YgdGltZSwKPiA+ID4gPiBqdXN0IHRoZW1zZWx2ZXMu Cj4gPiA+Cj4gPiA+IFRoZSB2ZW5kb3Iga2V5cyBhcmUgdGllZCBkaXJlY3RseSB0byB0aGUgdmVu ZG9yLiBTbyBhcyBpdCBncm93cyB3ZSB3b3VsZAo+ID4gPiBoYXZlIHNvbWV0aGluZyBsaWtlOgo+ ID4gPgo+ID4gPiAjZGVmaW5lIFJJU0NWX0hXUFJPQkVfS0VZX1ZFTkRPUl9FWFRfMCAgNwo+ID4g PiAvKiBULUhlYWQgKi8KPiA+ID4gI2RlZmluZSAgICAgICAgIFJJU0NWX0hXUFJPQkVfVkVORE9S X0VYVF9YVEhFQURWRUNUT1IgICAoMSA8PCAwKQo+ID4gPiAjZGVmaW5lICAgICAgICAgUklTQ1Zf SFdQUk9CRV9WRU5ET1JfRVhUX1hUSEVBRDIgICAgICAgICgyIDw8IDApCj4gPiA+ICNkZWZpbmUg ICAgICAgICBSSVNDVl9IV1BST0JFX1ZFTkRPUl9FWFRfWFRIRUFEMyAgICAgICAgKDMgPDwgMCkK PiA+ID4gLyogVmVuZG9yIDIgKi8KPiA+ID4gI2RlZmluZSAgICAgICAgIFJJU0NWX0hXUFJPQkVf VkVORE9SX0VYVF9YVkVORE9SMSAgICAgICAoMSA8PCAwKQo+ID4gPiAjZGVmaW5lICAgICAgICAg UklTQ1ZfSFdQUk9CRV9WRU5ET1JfRVhUX1hWRU5ET1IyICAgICAgICgyIDw8IDApCj4gPiA+IC8q IFZlbmRvciAzICovCj4gPiA+IC4uLgo+ID4gPgo+ID4gPiBUaGUga2V5cyBvdmVybGFwIGJldHdl ZW4gdmVuZG9ycy4gVG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbiBhIHZlbmRvcgo+ID4gPiBz dXBwb3J0cywgaHdwcm9iZSBnZXRzIGRhdGEgZnJvbSBoYXJ0X2lzYV92ZW5kb3JbY3B1XS4gSWYg dGhlIHZlbmRvciBpcwo+ID4gPiB2ZW5kb3IgMiwgaXQgaXMgbm90IHBvc3NpYmxlIGZvciBhIHZl bmRvciBleHRlbnNpb24gZnJvbSB2ZW5kb3IgMyB0byBlbmQKPiA+ID4gdXAgaW4gdGhlcmUuIE9u bHkgdGhlIGV4dGVuc2lvbnMgZnJvbSB0aGF0IHZlbmRvciBjYW4gYmUgc3VwcG9ydGVkIGJ5Cj4g PiA+IHRoYXQgdmVuZG9yJ3MgaGFyZHdhcmUuCj4gPgo+ID4gR290Y2hhLiBZb3UncmUgcmlnaHQg SSBoYWQgbWlzaW50ZXJwcmV0ZWQgdGhpcywgdGhpbmtpbmcgWFRIRUFEVkVDVE9SCj4gPiB3YXMg YSB2YWxpZCBiaXQgcmVnYXJkbGVzcyBvZiBtdmVuZG9yaWQsIGFuZCB0aGF0IG90aGVyIHZlbmRv cnMgd291bGQKPiA+IGhhdmUgdG8gY2hvb3NlIG5ldyBiaXRzIGZvciB0aGVpciBmZWF0dXJlcyBh bmQgYWx3YXlzIHJldHVybiAwIGZvcgo+ID4gWFRIRUFEVkVDVE9SLiBXaXRoIHlvdXIgZXhwbGFu YXRpb24sIGl0IHNlZW1zIGxpa2UgeW91J3JlIGFsbG9jYXRpbmcKPiA+IGtleXMgKGluIG5vIHBh cnRpY3VsYXIgb3JkZXIpIHdob3NlIG1lYW5pbmcgd2lsbCBjaGFuZ2UgYmFzZWQgb24KPiA+IG12 ZW5kb3JpZC4KPiA+Cj4gPiBJIGd1ZXNzIEknbSBzdGlsbCBub3QgY29udmluY2VkIHRoYXQgc2F2 aW5nIGVhY2ggdmVuZG9yIGZyb20gaGF2aW5nIHRvCj4gPiBhZGQgYSBWRU5ET1JfRVhUIGtleSBp biB0aGVpciBrZXlzcGFjZSBpcyB3b3J0aCB0aGUgc2FjcmlmaWNlIG9mCj4gPiBzcHJheWluZyB0 aGUgdmVuZG9yLXNwZWNpZmljIGtleXMgYWNyb3NzIHRoZSBnZW5lcmljIGtleXNwYWNlLiBBcmUK PiA+IHRoZXJlIGFkdmFudGFnZXMgdG8gaGF2aW5nIGEgc2luZ2xlIGtleSB3aG9zZSBjYXRlZ29y eSBpcyBzaW1pbGFyIGJ1dAo+ID4gd2hvc2UgYml0cyBhcmUgZW50aXJlbHkgdmVuZG9yLWRlZmlu ZWQ/IE1heWJlIGlmIEkgd2VyZSB1c2Vyc3BhY2UgYW5kCj4gPiBteSBmZWF0dXJlIGNvdWxkIGJl IHNhdGlzZmllZCBlcXVpdmFsZW50bHkgYnkgWFRIRUFEVkVDVE9SIG9yCj4gPiBYUklWT1NPVEhF UlRISU5HLCB0aGVuIEkgY291bGQgZG8gb25lIGh3cHJvYmUgY2FsbCBpbnN0ZWFkIG9mIHR3bz8g QnV0Cj4gPiBJIGRvbid0IHRoaW5rIHRoZSB2ZW5kb3JzIGFyZSBnb2luZyB0byBiZSBjb25zaXN0 ZW50IGVub3VnaCBmb3IgdGhhdAo+ID4gZXF1aXZhbGVuY3kgdG8gZXZlciBwcm92ZSB1c2VmdWwu IFRoZSBhZHZhbnRhZ2VzIGluIG15IGhlYWQgb2YgdGhlCj4gPiBzZXBhcmF0ZSB2ZW5kb3Iga2V5 c3BhY2UgYXJlOgo+ID4gICogS2VlcHMgdGhlIGtlcm5lbCBjb2RlIHNpbXBsZTogaWYga2V5ID49 ICgxID4+IDYzKQo+ID4gdmVuZG9yX2NvbmZpZy0+ZG9faHdwcm9iZSgpLCByYXRoZXIgdGhhbiBo YXZpbmcgYWxsIHRoZXNlIGxpdHRsZSBjYWxscwo+ID4gaW4gZWFjaCBzcGVjaWZpYyBzd2l0Y2gg Y2FzZSBmb3IgdmVuZG9yX2NvbmZpZy0+ZG9fdmVuZG9yX2V4dDAoKSwKPiA+IHZlbmRvcl9jb25m aWctPmRvX3ZlbmRvcl9leHQxKCksIGV0Yy4KPgo+IFRoZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIHZl bmRvcnMgaXMgZ3VhcmFudGVlZCBpbiB0aGlzIHNjaGVtZS4gVGhleSBqdXN0Cj4gYWRkIHRoZSBl eHRlbnNpb24gdG8gaHdwcm9iZV9pc2FfdmVuZG9yX2V4dDAuIFRoZSBmb2xsb3dpbmcgY29kZSBp cyB0aGUKPiBjcml0aWNhbCBjb2RlIGZyb20gdGhlIGtlcm5lbDoKPgo+ICAgICAgICAgZm9yX2Vh Y2hfY3B1KGNwdSwgY3B1cykgewo+ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmlzY3ZfaXNhaW5m byAqaXNhdmVuZG9yaW5mbyA9ICZoYXJ0X2lzYV92ZW5kb3JbY3B1XTsKPgo+ICNkZWZpbmUgVkVO RE9SX0VYVF9LRVkoZXh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiAgICAgICAgICAgICAgICAgaWYgKF9fcmlzY3ZfaXNhX3ZlbmRvcl9leHRlbnNpb25fYXZhaWxh YmxlKGlzYXZlbmRvcmluZm8tPmlzYSwgICAgICAgICAgXAo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJJU0NWX0lTQV9WRU5ET1JfRVhU XyMjZXh0KSkgICBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgcGFpci0+dmFsdWUgfD0gUklT Q1ZfSFdQUk9CRV9WRU5ET1JfRVhUXyMjZXh0OyAgICAgICAgICAgICAgICAgIFwKPiAgICAgICAg ICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Np bmcgfD0gUklTQ1ZfSFdQUk9CRV9WRU5ET1JfRVhUXyMjZXh0OyAgICAgICAgICAgICAgICAgICAg ICBcCj4gICAgICAgICB9IHdoaWxlIChmYWxzZSkKPgo+ICAgICAgICAgLyoKPiAgICAgICAgICAq IE9ubHkgdXNlIFZFTkRPUl9FWFRfS0VZKCkgZm9yIGV4dGVuc2lvbnMgd2hpY2ggY2FuIGJlIGV4 cG9zZWQgdG8gdXNlcnNwYWNlLAo+ICAgICAgICAgICogcmVnYXJkbGVzcyBvZiB0aGUga2VybmVs J3MgY29uZmlndXJhdGlvbiwgYXMgbm8gb3RoZXIgY2hlY2tzLCBiZXNpZGVzCj4gICAgICAgICAg KiBwcmVzZW5jZSBpbiB0aGUgaGFydF92ZW5kb3JfaXNhIGJpdG1hcCwgYXJlIG1hZGUuCj4gICAg ICAgICAgKi8KPiAgICAgICAgIFZFTkRPUl9FWFRfS0VZKFhUSEVBRFZFQ1RPUik7Cj4KPiAjdW5k ZWYgVkVORE9SX0VYVF9LRVkKPiAgICAgICAgIH0KPgo+ICAgICAgICAgLyogTm93IHR1cm4gb2Zm IHJlcG9ydGluZyBmZWF0dXJlcyBpZiBhbnkgQ1BVIGlzIG1pc3NpbmcgaXQuICovCj4gICAgICAg ICBwYWlyLT52YWx1ZSAmPSB+bWlzc2luZzsKPgo+IFRoZSBvbmx5IHRoaW5nIGEgdmVuZG9yIHdp bGwgaGF2ZSB0byBkbyBpcyBhZGQgYW4gZW50cnkgYmVsb3cKPiBWRU5ET1JfRVhUX0tFWShYVEhF QURWRUNUT1IpIHdpdGggdGhlaXIgZXh0ZW5zaW9uIG5hbWUgKG9mIGNvdXJzZQo+IHBvcHVsYXRp bmcgYSB2YWx1ZSBmb3IgdGhlIGtleSBhcyB3ZWxsKS4gVGhpcyBleGlzdGluZyBjb2RlIHdpbGwg dGhlbgo+IGNoZWNrIGlmIHRoZSBleHRlbnNpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBoYXJk d2FyZSBhbmQgYXBwcm9wcmlhdGUKPiBwb3B1bGF0ZSB0aGUgYml0bWFzay4gQWxsIHZlbmRvcnMg Z2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBmb3IgImZyZWUiCj4gd2l0aG91dCBuZWVkaW5nIHRvIHdy aXRlIHRoZSBib2lsZXJwbGF0ZSBjb2RlIHRvIGV4cG9zZSB2ZW5kb3IKPiBleHRlbnNpb25zIHRo cm91Z2ggaHdwcm9iZS4KPgo+IE5vdyB0aGF0IEkgd3JpdGUgdGhpcyBvdXQgSSBkbyBzZWUgdGhh dCBJIG92ZXJsb29rZWQgdGhhdCB0aGlzIGNvZGUKPiBuZWVkcyB0byBjaGVjayB0aGUgdmVuZG9y aWQgdG8gZW5zdXJlIHRoYXQgdGhlIGdpdmVuIGV4dGVuc2lvbiBpcwo+IGFjdHVhbGx5IGFzc29j aWF0ZWQgd2l0aCB0aGUgdmVuZG9yaWQuIFRoaXMgd291bGQgbWFrZSB0aGlzIG1vcmUKPiBjb21w bGljYXRlZCBidXQgc3RpbGwgc2VlbXMgbGlrZSBhIGxvdyBiYXJyaWVyIHRvIGVudHJ5IGZvciBh IG5ldwo+IHZlbmRvciwgYXMgd2VsbCBhcyBhIHN0YW5kYXJkIEFQSSBmb3IgZ2V0dGluZyBhbGwg dmVuZG9yIGV4dGVuc2lvbnMgdGhhdAo+IGFyZSBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtIHJl Z2FyZGxlc3Mgb2Ygd2hpY2ggcGxhdGZvcm0gaXMgYmVpbmcKPiB1c2VkLgo+CgpNYXliZSBJJ2xs IHJlc2VydmUganVkZ21lbnQgdW50aWwgSSBzZWUgdGhlIG5leHQgc3Bpbiwgc2luY2Ugd2UgbmVl ZApib3RoIHRoZSAiY29uZGl0aW9uYWxpemUgb24gbXZlbmRvcmlkIiBwYXJ0LCBhbmQgdG8gbW92 ZSB0aGUgdmVuZG9yCnN0dWZmIGludG8gYSB0aGVhZC1zcGVjaWZpYyBmaWxlIGFzIGRpc2N1c3Nl ZCBlYXJsaWVyLiBJJ2xsIGJlIHRyeWluZwp0byBwaWN0dXJlIGhvdyB0aGlzIGxvb2tzIDEwIHll YXJzIGZyb20gbm93LCB3aGVuIGEgYnVuY2ggb2YgdmVuZG9ycwpoYXZlIGFkZGVkIGRvemVucyBv ZiBleHRlbnNpb25zLCBhbmQgNzUlIG9mIHRoZW0gYXJlIGF0IHRoYXQgcG9pbnQKZGVmdW5jdCBi YWdnYWdlLgoKPiA+ICAqIEl0IGV4dGVuZHMgZWFzaWx5IGludG8gcGFzc2luZyBvdGhlciBmb3Jt cyBvZiB2ZW5kb3IgaHdwcm9iZSBpbmZvCj4gPiBsYXRlciwgcmF0aGVyIHRoYW4gc29sdmluZyBv bmx5IHRoZSBjYXNlIG9mIHJpc2MtdiBleHRlbnNpb25zIG5vdywgYW5kCj4gPiB0aGVuIGhhdmlu ZyB0byBkbyB0aGlzIGFsbCBhZ2FpbiBmb3IgZWFjaCBhZGRpdGlvbmFsIGNhdGVnb3J5IG9mCj4g PiB2ZW5kb3IgZGF0YS4KPgo+IFRoaXMgaXMgYSBncmVhdCBwb2ludC4gSSBkbyBhZ3JlZSB0aGF0 IGEgZGlmZmVyZW50IHNvbHV0aW9uIHdpbGwgYmUKPiBuZWNlc3NhcnkgZm9yIGFyYml0cmFyeSB2 ZW5kb3IgZGF0YSBhbmQgSSBhbSBhbGwgZm9yIG1ha2luZyBzb21ldGhpbmcKPiBmdXR1cmUgY29t cGF0aWJsZS4gQXQgdGhlIHNhbWUgdGltZSBJIGRvbid0IHdhbnQgdG8gZ2V0IHRyYXBwZWQgaW50 bwo+IHNvbWV0aGluZyB0aGF0IGlzIHN1Ym9wdGltYWwgZm9yIHRoZSBzYWtlIG9mIGRvaW5nIGxl c3Mgd29yayBsYXRlci4KPiBUaGVyZSBpcyBubyBjaGFuY2Ugb2YgYW55IGNvbXBhdGliaWxpdHkg b25jZSB3ZSBsZWF2ZSB0aGUgcmVhbG0gb2YKPiByaXNjdiBleHRlbnNpb25zLCBzbyBvbmNlIGEg dmVuZG9yIG5lZWRzIHNvbWV0aGluZyBleHBvcnRlZCBJIHdvdWxkIGJlCj4gaGFwcHkgdG8gd3Jp dGUgdGhlIGNvZGUgdG8gc3VwcG9ydCB0aGF0Lgo+Cj4gPiAgKiBTaW1pbGFybHksIGl0IGRpc2Nv dXJhZ2VzIGZ1dHVyZSB2ZW5kb3JzIGZyb20gdHJ5aW5nIHRvIHNxdWludCBhbmQKPiA+IGZpbmQg YSB3YXkgdG8gbWFrZSBhIHZhZ3VlbHkgZ2VuZXJpYyBzb3VuZGluZyBjYXRlZ29yeSBmb3IgdGhl aXIgb3duCj4gPiBod3Byb2JlIGtleSB3aGljaCB3aWxsIHVsdGltYXRlbHkgb25seSBldmVyIGJl IGZpbGxlZCBpbiBieSB0aGVtCj4gPiBhbnl3YXkuCj4KPiBXaGF0IGRvIHlvdSBtZWFuIGJ5IHRo aXM/IFRoZXJlIGFyZSBubyAiY2F0ZWdvcmllcyIgaGVyZSwgdGhlIHZlbmRvcgo+IGp1c3Qgd3Jp dGVzIG91dCB0aGVpciBleHRlbnNpb24gVkVORE9SX0VYVF9LRVkoWFZFTkRPUkVYVEVOU0lPTikg YW5kIGl0Cj4gZ2V0cyBzaHV0dGxlZCB0byB1c2Vyc3BhY2Ugb24gdGhlIGh3cHJvYmUgdmVuZG9y IGNhbGwuCgpUaGUgY2F0ZWdvcnkgaW4gdGhpcyBjYXNlIGlzIFJJU0MtViBleHRlbnNpb25zLCBz aW5jZSB5b3UndmUgZGVmaW5lZCBhCmtleSB3aG9zZSBjb250ZW50cyBhcmUgdmVuZG9yLXNwZWNp ZmljLCBidXQgd2hvc2UgYml0cyBtdXN0IGFsbCBmaXQKdGhlIGNhdGVnb3J5IG9mIGJlaW5nIGEg cmlzYy12IHZlbmRvciBleHRlbnNpb24uCgpUbyBmcmFtZSBpdCBpbiBhbm90aGVyIGxpZ2h0LCBv bmUgZXF1aXZhbGVudCB2ZXJzaW9uIGZyb20gYW4gQUJJCnBlcnNwZWN0aXZlIHdvdWxkIGJlIHRv IHNheSBvaywgbGV0J3MgcHV0IHRoaXMga2V5IHVwIGludG8gdGhlIDE8PDYzCnJhbmdlLCBidXQg Y2FydmUgb3V0IGEgImNvbW1vbiBrZXkiIHJhbmdlIHdoZXJlIGFsbCB2ZW5kb3JzIGltcGxlbWVu dAp0aGUgc2FtZSBrZXkgZGVmaW5pdGlvbnMsIGxpa2UgdGhpcyBWRU5ET1JfRVhUXzAga2V5LiBJ cyB0aGF0IHVzZWZ1bCwKb3IgaXMgaXQgdW5uZWNlc3Nhcnkgc3RydWN0dXJlPyBJIHRoaW5rIEkn bSBvZiB0aGUgb3BpbmlvbiBpdCdzCnVubmVjZXNzYXJ5IHN0cnVjdHVyZSwgYnV0IEknbSBzdGls bCBvcGVuIHRvIGJlaW5nIGNvbnZpbmNlZC4KLUV2YW4KCj4KPiAtIENoYXJsaWUKPgo+ID4KPiA+ IC1FdmFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==