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 73559C4345F for ; Fri, 12 Apr 2024 22:21:25 +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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JlqSL/Bh03WrsHiM6zgLQNiKafOarhFTxmfH6J88VzU=; b=kefe0mYBNVYt0d OqGcBjsfGiLJ+d3pF2j4eFeOGh2BVi5zzssxUzy9cAsTbAXdH2nepBtPOUJP7HKC2FT2ZXxRNRgxf LSfUYFLoZpTFrcboh9dMbcsnmvJ19oXQimVRX0jznlZdO7DNge7Rf7OyVVCqPnPv38Ki0r8fpPCTo nVWfdlVgt0fYXRiB/8EWY1m2CGGysR8U7y4giND842qXzwEoYa5Zo6Kd/VgMr5HPg1ZUToMbI6fvd NqtZLvdJHYEK3kDujz3EsmGqK7YLEYPJIGCz2DFLPN4Uh9CMjTSbHwEx6ARWk+hAhwUtOPobPJHdu A/lZFydl/KqHtzqF7hCg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvPGg-00000001WkM-13s1; Fri, 12 Apr 2024 22:21:10 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvPGd-00000001WjN-0DEp for linux-arm-kernel@lists.infradead.org; Fri, 12 Apr 2024 22:21:08 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1e5c11076b9so6622235ad.3 for ; Fri, 12 Apr 2024 15:21:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1712960466; x=1713565266; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=Qw7f13VaApE9P7VRpDrEHdpAzJF1wdaPoxbwIFLmIG4=; b=bfSZPAkj7S2ZiHzryk4ZcakIs7TlsOUKkJyxRyIEOhtLGWJA7rEaq1vh0udJ+KOsNr JEhVZUKXwR9tj6TzAyD94IouhOLLawH+a5Gwf0WNakcMSXlcynrnCkYgB+30CZCBQ/lx CVxsPwSG40vRxite4pMJ1piOJPca8C4Z0LKlzPZYlf7fY9Xb+n4taQCS9bqWoACLntJO +ocESAzPEJ3/CmPXemolrNC5dLO1NCEIUNnh46r758b96fCkDgy3TEhjLwcw4diN3XdZ fSq3IG+mYw2nZnA6VbwN1yWLT0V1tbRFlyT+YdTifNSxF5cEgvDN2LyULfv++UEcoYgv tzSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712960466; x=1713565266; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Qw7f13VaApE9P7VRpDrEHdpAzJF1wdaPoxbwIFLmIG4=; b=KzcOxYmAXV4YYNWGnVeVzD/3n55IzUq0fYaes772DaW5d5FN+JX05OAXzH3HtDh+9j 4RLiXSs7aHTsehktxYh9cQxown3l38mP3CvRE22xJ6axqschXNy54rQE9FeN2abyqhrm 3mMaEw0N4/bSPIJuEYikrT2STFnMmbcQq/PsXOXtbuRyYy7iPCjsYdA5RDL81j99J/yb ShtdMvwtj+28hvaAQBpPVgDnacP/XT/z9wBCy+rph2+YLemDYTUBodmeetaHknmktdRY p+Ym+jkW9Q9HIOFv+DrgLXKDUka3NQzIWoxL8n+g7eGguFZsBLQ4wuT4qABros1S4G9b d8gQ== X-Forwarded-Encrypted: i=1; AJvYcCWRkOsAT6oOj6OIIWdtyQKzP7fO5/noxwvLTfdyCMLgt41zWRq6xw0g0iOz/oAw51lyzChnPnjyM72WgDn8GNvLXC3+hQWIwYPqUYtaJq2tX11pZhs= X-Gm-Message-State: AOJu0Yzf9BwmInLjf2SLyt5DbYI1TidD1GYFE2/RchIgin5q0mrdBdxt No0kDD2QVLJTqYoeE5nOa2Z8urFdzkqC4GEDKEK2SojtAwHWHlq4Li0aU4Bgf1U= X-Google-Smtp-Source: AGHT+IHUI2RaMq8jaayA5FcthPXUJDbqZ0+AxzpHu6ba0uA91gdIC4L0mbVqNIRm0limEGVhmp0sjg== X-Received: by 2002:a17:903:2609:b0:1e2:ca65:68c2 with SMTP id jd9-20020a170903260900b001e2ca6568c2mr3674124plb.51.1712960465476; Fri, 12 Apr 2024 15:21:05 -0700 (PDT) Received: from ghost ([50.145.13.30]) by smtp.gmail.com with ESMTPSA id b7-20020a170902650700b001e245c5afbfsm3554986plk.155.2024.04.12.15.21.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 15:21:05 -0700 (PDT) Date: Fri, 12 Apr 2024 15:21:02 -0700 From: Charlie Jenkins To: Evan Green 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 , =?iso-8859-1?Q?Cl=E9ment_L=E9ger?= , 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 Subject: Re: [PATCH 16/19] riscv: hwprobe: Add vendor extension probing Message-ID: 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> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240412_152107_137620_ECFF5AFD X-CRM114-Status: GOOD ( 65.51 ) 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 T24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgMDI6NDM6MDFQTSAtMDcwMCwgRXZhbiBHcmVlbiB3cm90 ZToKPiBPbiBGcmksIEFwciAxMiwgMjAyNCBhdCAxOjIw4oCvUE0gQ2hhcmxpZSBKZW5raW5zIDxj aGFybGllQHJpdm9zaW5jLmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24gRnJpLCBBcHIgMTIsIDIwMjQg YXQgMTI6MDc6NDZQTSAtMDcwMCwgRXZhbiBHcmVlbiB3cm90ZToKPiA+ID4gT24gRnJpLCBBcHIg MTIsIDIwMjQgYXQgMTE6MTfigK9BTSBDaGFybGllIEplbmtpbnMgPGNoYXJsaWVAcml2b3NpbmMu Y29tPiB3cm90ZToKPiA+ID4gPgo+ID4gPiA+IE9uIEZyaSwgQXByIDEyLCAyMDI0IGF0IDEwOjA1 OjIxQU0gLTA3MDAsIEV2YW4gR3JlZW4gd3JvdGU6Cj4gPiA+ID4gPiBPbiBUaHUsIEFwciAxMSwg MjAyNCBhdCA5OjEy4oCvUE0gQ2hhcmxpZSBKZW5raW5zIDxjaGFybGllQHJpdm9zaW5jLmNvbT4g d3JvdGU6Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEFkZCBhIG5ldyBod3Byb2JlIGtleSAiUklT Q1ZfSFdQUk9CRV9LRVlfVkVORE9SX0VYVF8wIiB3aGljaCBhbGxvd3MKPiA+ID4gPiA+ID4gdXNl cnNwYWNlIHRvIHByb2JlIGZvciB0aGUgbmV3IFJJU0NWX0lTQV9WRU5ET1JfRVhUX1hUSEVBRFZF Q1RPUiB2ZW5kb3IKPiA+ID4gPiA+ID4gZXh0ZW5zaW9uLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiBTaWduZWQtb2ZmLWJ5OiBDaGFybGllIEplbmtpbnMgPGNoYXJsaWVAcml2b3NpbmMuY29tPgo+ ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHdwcm9i ZS5oICAgICAgfCAgNCArLS0KPiA+ID4gPiA+ID4gIGFyY2gvcmlzY3YvaW5jbHVkZS91YXBpL2Fz bS9od3Byb2JlLmggfCAxMCArKysrKy0KPiA+ID4gPiA+ID4gIGFyY2gvcmlzY3Yva2VybmVsL3N5 c19od3Byb2JlLmMgICAgICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LQo+ID4gPiA+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspLCA1IGRlbGV0 aW9ucygtKQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9p bmNsdWRlL2FzbS9od3Byb2JlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h3cHJvYmUuaAo+ ID4gPiA+ID4gPiBpbmRleCA2MzA1MDdkZmY1ZWEuLmU2ODQ5NmI0ZjhkZSAxMDA2NDQKPiA+ID4g PiA+ID4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9od3Byb2JlLmgKPiA+ID4gPiA+ID4g KysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9od3Byb2JlLmgKPiA+ID4gPiA+ID4gQEAgLTEs NiArMSw2IEBACj4gPiA+ID4gPiA+ICAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqLwo+ID4gPiA+ID4gPiAgLyoKPiA+ID4gPiA+ID4g LSAqIENvcHlyaWdodCAyMDIzIFJpdm9zLCBJbmMKPiA+ID4gPiA+ID4gKyAqIENvcHlyaWdodCAy MDIzLTIwMjQgUml2b3MsIEluYwo+ID4gPiA+ID4gPiAgICovCj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ICAjaWZuZGVmIF9BU01fSFdQUk9CRV9ICj4gPiA+ID4gPiA+IEBAIC04LDcgKzgsNyBAQAo+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgI2luY2x1ZGUgPHVhcGkvYXNtL2h3cHJvYmUuaD4KPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gLSNkZWZpbmUgUklTQ1ZfSFdQUk9CRV9NQVhfS0VZIDYKPiA+ ID4gPiA+ID4gKyNkZWZpbmUgUklTQ1ZfSFdQUk9CRV9NQVhfS0VZIDcKPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gIHN0YXRpYyBpbmxpbmUgYm9vbCByaXNjdl9od3Byb2JlX2tleV9pc192YWxpZChf X3M2NCBrZXkpCj4gPiA+ID4gPiA+ICB7Cj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jp c2N2L2luY2x1ZGUvdWFwaS9hc20vaHdwcm9iZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkv YXNtL2h3cHJvYmUuaAo+ID4gPiA+ID4gPiBpbmRleCA5ZjJhOGUzZmYyMDQuLjY2MTRkM2FkZmM3 NSAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2h3 cHJvYmUuaAo+ID4gPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvdWFwaS9hc20vaHdw cm9iZS5oCj4gPiA+ID4gPiA+IEBAIC0xLDYgKzEsNiBAQAo+ID4gPiA+ID4gPiAgLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi8KPiA+ ID4gPiA+ID4gIC8qCj4gPiA+ID4gPiA+IC0gKiBDb3B5cmlnaHQgMjAyMyBSaXZvcywgSW5jCj4g PiA+ID4gPiA+ICsgKiBDb3B5cmlnaHQgMjAyMy0yMDI0IFJpdm9zLCBJbmMKPiA+ID4gPiA+ID4g ICAqLwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgI2lmbmRlZiBfVUFQSV9BU01fSFdQUk9CRV9I Cj4gPiA+ID4gPiA+IEBAIC02Nyw2ICs2NywxNCBAQCBzdHJ1Y3QgcmlzY3ZfaHdwcm9iZSB7Cj4g PiA+ID4gPiA+ICAjZGVmaW5lICAgICAgICAgICAgICAgIFJJU0NWX0hXUFJPQkVfTUlTQUxJR05F RF9VTlNVUFBPUlRFRCAgICAoNCA8PCAwKQo+ID4gPiA+ID4gPiAgI2RlZmluZSAgICAgICAgICAg ICAgICBSSVNDVl9IV1BST0JFX01JU0FMSUdORURfTUFTSyAgICAgICAgICAgKDcgPDwgMCkKPiA+ ID4gPiA+ID4gICNkZWZpbmUgUklTQ1ZfSFdQUk9CRV9LRVlfWklDQk9aX0JMT0NLX1NJWkUgICAg Ngo+ID4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ID4gKyAqIEl0IGlzIG5vdCBwb3NzaWJsZSBmb3Ig b25lIENQVSB0byBoYXZlIG11bHRpcGxlIHZlbmRvciBpZHMsIHNvIGVhY2ggdmVuZG9yCj4gPiA+ ID4gPiA+ICsgKiBoYXMgaXRzIG93biB2ZW5kb3IgZXh0ZW5zaW9uICJuYW1lc3BhY2UiLiBUaGUg a2V5cyBmb3IgZWFjaCB2ZW5kb3Igc3RhcnRzCj4gPiA+ID4gPiA+ICsgKiBhdCB6ZXJvLgo+ID4g PiA+ID4gPiArICovCj4gPiA+ID4gPiA+ICsjZGVmaW5lIFJJU0NWX0hXUFJPQkVfS0VZX1ZFTkRP Ul9FWFRfMCA3Cj4gPiA+ID4gPiA+ICsgLyogVC1IZWFkICovCj4gPiA+ID4gPiA+ICsjZGVmaW5l ICAgICAgICAgICAgICAgIFJJU0NWX0hXUFJPQkVfVkVORE9SX0VYVF9YVEhFQURWRUNUT1IgICAo MSA8PCAwKQo+ID4gPiA+ID4gPiAgLyogSW5jcmVhc2UgUklTQ1ZfSFdQUk9CRV9NQVhfS0VZIHdo ZW4gYWRkaW5nIGl0ZW1zLiAqLwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgLyogRmxhZ3MgKi8K PiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3N5c19od3Byb2JlLmMg Yi9hcmNoL3Jpc2N2L2tlcm5lbC9zeXNfaHdwcm9iZS5jCj4gPiA+ID4gPiA+IGluZGV4IGUwYTQy Yzg1MTUxMS4uMzY1Y2U3MzgwNDQzIDEwMDY0NAo+ID4gPiA+ID4gPiAtLS0gYS9hcmNoL3Jpc2N2 L2tlcm5lbC9zeXNfaHdwcm9iZS5jCj4gPiA+ID4gPiA+ICsrKyBiL2FyY2gvcmlzY3Yva2VybmVs L3N5c19od3Byb2JlLmMKPiA+ID4gPiA+ID4gQEAgLTY5LDcgKzY5LDggQEAgc3RhdGljIHZvaWQg aHdwcm9iZV9pc2FfZXh0MChzdHJ1Y3QgcmlzY3ZfaHdwcm9iZSAqcGFpciwKPiA+ID4gPiA+ID4g ICAgICAgICBpZiAocmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgYykpCj4gPiA+ ID4gPiA+ICAgICAgICAgICAgICAgICBwYWlyLT52YWx1ZSB8PSBSSVNDVl9IV1BST0JFX0lNQV9D Owo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAtICAgICAgIGlmIChoYXNfdmVjdG9yKCkgJiYgIXJp c2N2X2hhc192ZW5kb3JfZXh0ZW5zaW9uX3VubGlrZWx5KFJJU0NWX0lTQV9WRU5ET1JfRVhUX1hU SEVBRFZFQ1RPUikpCj4gPiA+ID4gPiA+ICsgICAgICAgaWYgKGhhc192ZWN0b3IoKSAmJgo+ID4g PiA+ID4gPiArICAgICAgICAgICAhX19yaXNjdl9pc2FfdmVuZG9yX2V4dGVuc2lvbl9hdmFpbGFi bGUoTlVMTCwgUklTQ1ZfSVNBX1ZFTkRPUl9FWFRfWFRIRUFEVkVDVE9SKSkKPiA+ID4gPiA+ID4g ICAgICAgICAgICAgICAgIHBhaXItPnZhbHVlIHw9IFJJU0NWX0hXUFJPQkVfSU1BX1Y7Cj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgICAgLyoKPiA+ID4gPiA+ID4gQEAgLTExMiw3ICsxMTMs OCBAQCBzdGF0aWMgdm9pZCBod3Byb2JlX2lzYV9leHQwKHN0cnVjdCByaXNjdl9od3Byb2JlICpw YWlyLAo+ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgRVhUX0tFWShaQUNBUyk7Cj4gPiA+ID4g PiA+ICAgICAgICAgICAgICAgICBFWFRfS0VZKFpJQ09ORCk7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+IC0gICAgICAgICAgICAgICBpZiAoaGFzX3ZlY3RvcigpICYmICFyaXNjdl9oYXNfdmVuZG9y X2V4dGVuc2lvbl91bmxpa2VseShSSVNDVl9JU0FfVkVORE9SX0VYVF9YVEhFQURWRUNUT1IpKSB7 Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAoaGFzX3ZlY3RvcigpICYmCj4gPiA+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgIXJpc2N2X2hhc192ZW5kb3JfZXh0ZW5zaW9uX3VubGlr ZWx5KFJJU0NWX0lTQV9WRU5ET1JfRVhUX1hUSEVBRFZFQ1RPUikpIHsKPiA+ID4gPiA+ID4gICAg ICAgICAgICAgICAgICAgICAgICAgRVhUX0tFWShaVkJCKTsKPiA+ID4gPiA+ID4gICAgICAgICAg ICAgICAgICAgICAgICAgRVhUX0tFWShaVkJDKTsKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAg ICAgICAgICAgRVhUX0tFWShaVktCKTsKPiA+ID4gPiA+ID4gQEAgLTEzOSw2ICsxNDEsNTUgQEAg c3RhdGljIHZvaWQgaHdwcm9iZV9pc2FfZXh0MChzdHJ1Y3QgcmlzY3ZfaHdwcm9iZSAqcGFpciwK PiA+ID4gPiA+ID4gICAgICAgICBwYWlyLT52YWx1ZSAmPSB+bWlzc2luZzsKPiA+ID4gPiA+ID4g IH0KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGh3cHJvYmVfaXNhX3ZlbmRv cl9leHQwKHN0cnVjdCByaXNjdl9od3Byb2JlICpwYWlyLAo+ID4gPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cykKPiA+ ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gKyAgICAgICBpbnQgY3B1Owo+ID4gPiA+ID4gPiArICAg ICAgIHU2NCBtaXNzaW5nID0gMDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICAgIHBh aXItPnZhbHVlID0gMDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICAgIHN0cnVjdCBy aXNjdl9od3Byb2JlIG12ZW5kb3JpZCA9IHsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIC5r ZXkgPSBSSVNDVl9IV1BST0JFX0tFWV9NVkVORE9SSUQsCj4gPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICAudmFsdWUgPSAwCj4gPiA+ID4gPiA+ICsgICAgICAgfTsKPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiArICAgICAgIGh3cHJvYmVfYXJjaF9pZCgmbXZlbmRvcmlkLCBjcHVzKTsKPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICAgIC8qIFNldCB2YWx1ZSB0byB6ZXJvIGlmIENQVXMg aW4gdGhlIHNldCBkbyBub3QgaGF2ZSB0aGUgc2FtZSB2ZW5kb3IuICovCj4gPiA+ID4gPiA+ICsg ICAgICAgaWYgKG12ZW5kb3JpZC52YWx1ZSA9PSAtMVVMTCkKPiA+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgIHJldHVybjsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICAgIC8qCj4gPiA+ ID4gPiA+ICsgICAgICAgICogTG9vcCB0aHJvdWdoIGFuZCByZWNvcmQgdmVuZG9yIGV4dGVuc2lv bnMgdGhhdCAxKSBhbnlvbmUgaGFzLCBhbmQKPiA+ID4gPiA+ID4gKyAgICAgICAgKiAyKSBhbnlv bmUgZG9lc24ndCBoYXZlLgo+ID4gPiA+ID4gPiArICAgICAgICAqLwo+ID4gPiA+ID4gPiArICAg ICAgIGZvcl9lYWNoX2NwdShjcHUsIGNwdXMpIHsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAg IHN0cnVjdCByaXNjdl9pc2FpbmZvICppc2F2ZW5kb3JpbmZvID0gJmhhcnRfaXNhX3ZlbmRvcltj cHVdOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsjZGVmaW5lIFZFTkRPUl9FWFRfS0VZKGV4 dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCj4gPiA+ID4gPiA+ICsgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAoX19yaXNjdl9pc2FfdmVuZG9yX2V4dGVuc2lvbl9h dmFpbGFibGUoaXNhdmVuZG9yaW5mby0+aXNhLCAgICAgICAgICBcCj4gPiA+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJJU0NW X0lTQV9WRU5ET1JfRVhUXyMjZXh0KSkgICBcCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIHBhaXItPnZhbHVlIHw9IFJJU0NWX0hXUFJPQkVfVkVORE9SX0VYVF8jI2V4dDsgICAg ICAgICAgICAgICAgICBcCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcgfD0gUklTQ1Zf SFdQUk9CRV9WRU5ET1JfRVhUXyMjZXh0OyAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4g PiA+ICsgICAgICAgfSB3aGlsZSAoZmFsc2UpCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAg ICAgICAvKgo+ID4gPiA+ID4gPiArICAgICAgICAqIE9ubHkgdXNlIFZFTkRPUl9FWFRfS0VZKCkg Zm9yIGV4dGVuc2lvbnMgd2hpY2ggY2FuIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLAo+ID4gPiA+ ID4gPiArICAgICAgICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24s IGFzIG5vIG90aGVyIGNoZWNrcywgYmVzaWRlcwo+ID4gPiA+ID4gPiArICAgICAgICAqIHByZXNl bmNlIGluIHRoZSBoYXJ0X3ZlbmRvcl9pc2EgYml0bWFwLCBhcmUgbWFkZS4KPiA+ID4gPiA+ID4g KyAgICAgICAgKi8KPiA+ID4gPiA+ID4gKyAgICAgICBWRU5ET1JfRVhUX0tFWShYVEhFQURWRUNU T1IpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsjdW5kZWYgVkVORE9SX0VYVF9LRVkKPiA+ ID4gPiA+Cj4gPiA+ID4gPiBIZXkgQ2hhcmxpZSwKPiA+ID4gPiA+IFRoYW5rcyBmb3Igd3JpdGlu ZyB0aGlzIHVwISBBdCB0aGUgdmVyeSBsZWFzdCBJIHRoaW5rIHRoZQo+ID4gPiA+ID4gVEhFQUQt c3BlY2lmaWMgc3R1ZmYgc2hvdWxkIHByb2JhYmx5IGVuZCB1cCBpbiBpdHMgb3duIGZpbGUsIG90 aGVyd2lzZQo+ID4gPiA+ID4gaXQnbGwgZ2V0IGNoYW90aWMgd2l0aCB2ZW5kb3JzIGNsYW1vcmlu ZyB0byBhZGQgc3R1ZmYgcmlnaHQgaGVyZS4KPiA+ID4gPgo+ID4gPiA+IEdyZWF0IGlkZWEhCj4g PiA+ID4KPiA+ID4gPiA+IFdoYXQgZG8geW91IHRoaW5rIGFib3V0IHRoaXMgYXBwcm9hY2g6Cj4g PiA+ID4gPiAgKiBXZSBsZWF2ZSBSSVNDVl9IV1BST0JFX01BWF9LRVkgYXMgdGhlIG1heCBrZXkg Zm9yIHRoZSAiZ2VuZXJpYwo+ID4gPiA+ID4gd29ybGQiLCBlZyA2LWlzaAo+ID4gPiA+ID4gICog V2UgZGVmaW5lIHRoYXQgYW55IGtleSBhYm92ZSAweDgwMDAwMDAwMDAwMDAwMDAgaXMgaW4gdGhl IHZlbmRvcgo+ID4gPiA+ID4gc3BhY2UsIHNvIHRoZSBtZWFuaW5nIG9mIHRoZSBrZXlzIGRlcGVu ZHMgZmlyc3Qgb24gdGhlIG12ZW5kb3JpZAo+ID4gPiA+ID4gdmFsdWUuCj4gPiA+ID4gPiAgKiBJ biB0aGUga2VybmVsIGNvZGUsIGVhY2ggbmV3IHZlbmRvciBhZGRzIG9uIHRvIGEgZ2xvYmFsIHN0 cnVjdCwKPiA+ID4gPiA+IHdoaWNoIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6Cj4gPiA+ID4g PiBzdHJ1Y3QgaHdwcm9iZV92ZW5kb3Jfc3BhY2UgdmVuZG9yX3NwYWNlW10gPSB7Cj4gPiA+ID4g PiAgICAgICAgIHsKPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAubXZlbmRvcmlkID0gVkVORE9S X1RIRUFELAo+ID4gPiA+ID4gICAgICAgICAgICAgICAgIC5tYXhfaHdwcm9iZV9rZXkgPSBUSEVB RF9NQVhfSFdQUk9CRV9LRVksIC8vIGN1cnJlbnRseQo+ID4gPiA+ID4gMSBvciAweDgwMDAwMDAw MDAwMDAwMDEgd2l0aCB3aGF0IHlvdSd2ZSBnb3QuCj4gPiA+ID4gPiAgICAgICAgICAgICAgICAg Lmh3cHJvYmVfZm4gPSB0aGVhZF9od3Byb2JlCj4gPiA+ID4gPiAgICAgICAgIH0sCj4gPiA+ID4g PiAgICAgICAgIC4uLgo+ID4gPiA+ID4gfTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAgKiBBIGh3cHJv YmVfdGhlYWQuYyBpbXBsZW1lbnRzIHRoZWFkX2h3cHJvYmUoKSwgYW5kIGlzIGNhbGxlZAo+ID4g PiA+ID4gd2hlbmV2ZXIgdGhlIGdlbmVyaWMgaHdwcm9iZSBlbmNvdW50ZXJzIGEga2V5ID49MHg4 MDAwMDAwMDAwMDAwMDAwLgo+ID4gPiA+ID4gICogR2VuZXJpYyBjb2RlIGZvciBzZXR0aW5nIHVw IHRoZSBWRFNPIGNhbiB0aGVuIHN0aWxsIGNhbGwgdGhlCj4gPiA+ID4gPiB2ZW5kb3Itc3BlY2lm aWMgaHdwcm9iZV9mbigpIHJlcGVhdGVkbHkgd2l0aCBhbiAiYWxsIENQVXMiIG1hc2sgZnJvbQo+ ID4gPiA+ID4gdGhlIGJhc2UgdG8gbWF4X2h3cHJvYmVfa2V5IGFuZCBzZXQgdXAgdGhlIGNhY2hl ZCB0YWJsZXMgaW4gdXNlcnNwYWNlLgo+ID4gPiA+ID4gICogU2luY2UgdGhlIFZEU08gZGF0YSBo YXMgbGltaXRlZCBzcGFjZSB3ZSBtYXkgaGF2ZSB0byBjYXAgdGhlIG51bWJlcgo+ID4gPiA+ID4g b2YgdmVuZG9yIGtleXMgd2UgY2FjaGUgdG8gYmUgbG93ZXIgdGhhbiBtYXhfaHdwcm9iZV9rZXku IFNpbmNlIHRoZQo+ID4gPiA+ID4gZGF0YSBpdHNlbGYgaXMgbm90IGV4cG9zZWQgdG8gdXNlcm1v ZGUgd2UgY2FuIHJhaXNlIHRoaXMgY2FwIGxhdGVyIGlmCj4gPiA+ID4gPiBuZWVkZWQuCj4gPiA+ ID4KPiA+ID4gPiBJIGtub3cgdmVuZG9yIGV4dGVuc2lvbnMgYXJlIGtpbmQgb2YgdGhlICJ3aWxk IHdlc3QiIG9mIHJpc2N2LCBidXQgaW4KPiA+ID4gPiBzcGl0ZSBvZiB0aGF0IEkgd2FudCB0byBk ZXNpZ24gYSBjb25zaXN0ZW50IEFQSS4gVGhlIGlzc3VlIEkgaGFkIHdpdGgKPiA+ID4gPiBoYXZp bmcgdGhpcyAidmVuZG9yIHNwYWNlIiBmb3IgZXhwb3NpbmcgdmVuZG9yIGV4dGVuc2lvbnMgd2Fz IHRoYXQgdGhpcwo+ID4gPiA+IGlzIHNvbWV0aGluZyB0aGF0IGlzIGluaGVyZW50bHkgdGhlIHNh bWUgZm9yIGFsbCB2ZW5kb3JzLiBJIHNlZSBhIHZlbmRvcgo+ID4gPiA+IHNwYWNlIGxpa2UgdGhp cyBtb3JlIGFwcGxpY2FibGUgZm9yIHNvbWV0aGluZyBsaWtlCj4gPiA+ID4gIlJJU0NWX0hXUFJP QkVfS0VZX1pJQ0JPWl9CTE9DS19TSVpFIiB3aGVyZSBhIHZlbmRvciBoYXMgYSBzcGVjaWZpYwo+ ID4gPiA+IHZhbHVlIHRoZXkgd291bGQgbGlrZSB0byBleHBvc2UuIEkgZG8gYWdyZWUgdGhhdCBo YXZpbmcgYSB2ZW5kb3Igc3BhY2UKPiA+ID4gPiBpcyBhIGdvb2QgZGVzaWduIGNob2ljZSwgYnV0 IEkgYW0gbm90IGNvbnZpbmNlZCB0aGF0IHZlbmRvciBleHRlbnNpb25zCj4gPiA+ID4gYXJlIHRo ZSBwcm9wZXIgdXNlLWNhc2UuCj4gPiA+ID4KPiA+ID4gPiBCeSBoYXZpbmcgUklTQ1ZfSFdQUk9C RV9LRVlfVkVORE9SX0VYVF8wIHdlIGNhbiBleHBvc2UgdGhlIHZlbmRvcgo+ID4gPiA+IGV4dGVu c2lvbnMgaW4gdGhlIHNhbWUgd2F5IHRoYXQgc3RhbmRhcmQgZXh0ZW5zaW9ucyBhcmUgZXhwb3Nl ZCwgd2l0aCBhCj4gPiA+ID4gYml0bWFzayByZXByZXNlbnRpbmcgZWFjaCBleHRlbnNpb24uIElm IHRoZXNlIGFyZSBpbnN0ZWFkIGluIHRoZSB2ZW5kb3IKPiA+ID4gPiBzcGFjZSwgZWFjaCB2ZW5k b3Igd291bGQgcHJvYmFibHkgYmUgaW5jbGluZWQgdG8gaW50cm9kdWNlIGEga2V5IGxpa2UKPiA+ ID4gPiBSSVNDVl9IV1BST0JFX0tFWV9USEVBRF9FWFRfMCB0aGF0IHJldHVybnMgYSBiaXRtYXNr IG9mIGFsbCBvZiB0aGUgdGhlYWQKPiA+ID4gPiB2ZW5kb3IgZXh0ZW5zaW9ucy4gVGhpcyBkdXBs aWNhdGVkIGVmZm9ydCBpcyB3aGF0IEkgYW0gdHJ5aW5nIHRvIGF2b2lkLgo+ID4gPiA+IFRoZSBh bHRlcm5hdGl2ZSB3b3VsZCBiZSB0aGF0IHZlbmRvcnMgaGF2ZSBhIHNlcGFyYXRlIGtleSBmb3Ig ZWFjaAo+ID4gPiA+IHZlbmRvciBleHRlbnNpb24gdGhleSB3b3VsZCBsaWtlIHRvIGV4cG9zZSwg YnV0IHRoYXQgaXMgc3RyaWN0bHkgbGVzcwo+ID4gPiA+IGVmZmljaWVudCB0aGFuIHRoZSBleGlz dGluZyBiaXRtYXNrIHByb2JpbmcuCj4gPiA+ID4KPiA+ID4gPiBEbyB5b3UgdGhpbmsgdGhhdCBo YXZpbmcgdGhlIHZlbmRvciBzcGFjZSBpcyBhcHByb3ByaWF0ZSBmb3IgdmVuZG9yCj4gPiA+ID4g ZXh0ZW5zaW9ucyBnaXZlbiBteSBjb25jZXJucz8KPiA+ID4KPiA+ID4gSSBkbyBzZWUgd2hhdCB5 b3UncmUgZ29pbmcgZm9yLiBJdCdzIHRpZHkgZm9yIGEgYml0bWFzayB0byBqdXN0IGxldAo+ID4g PiBhbnlvbmUgYWxsb2NhdGUgdGhlIG5leHQgYml0LCBidXQgbGVhdmVzIHlvdSB3aXRoIHRoZSBz YW1lIHByb2JsZW0KPiA+ID4gd2hlbiBhIHZlbmRvciBkZWNpZGVzIHRoZXkgd2FudCB0byBleHBv c2UgYW4gZW51bSwgb3IgZGVjaWRlcyB0aGV5Cj4gPiA+IHdhbnQgdG8gZXhwb3NlIGEgYmF6aWxs aW9uIHRoaW5ncy4gSSB0aGluayBhIGdlbmVyYWxpemVkIHZlcnNpb24gb2YKPiA+Cj4gPiBUaGlz IHBhdGNoIGlzIHN0cmljdGx5IHRvIGV4cG9zZSBpZiBhIHZlbmRvciBleHRlbnNpb24gaXMgc3Vw cG9ydGVkLAo+ID4gaG93IGRvZXMgZXhwb3NpbmcgZW51bXMgZmFjdG9yIGluIGhlcmU/Cj4gPgo+ ID4gPiB0aGUgYXBwcm9hY2ggeW91J3ZlIHdyaXR0ZW4gd291bGQgYmU6IHNpbXBseSBsZXQgdmVu ZG9ycyBhbGxvY2F0ZSBrZXlzCj4gPiA+IGZyb20gdGhlIHNhbWUgZ2xvYmFsIHNwYWNlIHdlJ3Jl IGFscmVhZHkgdXNpbmcuIE15IHdvcnJ5IHdhcyB0aGF0IGl0Cj4gPgo+ID4gSSBhbSBtaXNzaW5n IGhvdyBteSBwcm9wb3NhbCBzdWdnZXN0cyBhbGxvd2luZyB2ZW5kb3JzIHRvIGFsbG9jYXRlIGtl eXMKPiA+IGluIGEgZ2xvYmFsIHNwYWNlLgo+ID4KPiA+ID4gd291bGQgdHVybiBpbnRvIGFuIGV4 cGFuc2l2ZSBzdWJ1cmJhbiBzcHJhd2wgb2YgbW9zdGx5IGRlYWQgYml0cywgb3IKPiA+ID4gaW4g dGhlIGNhc2Ugb2YgdmVuZG9yLXNwZWNpZmljIGtleXMsIGZ1bGwgb2YgImlmIChtdmVuZG9yX2lk KCkgIT0KPiA+ID4gTUlORSkgcmV0dXJuIDA7Ii4gTXkgaG9wZSB3aXRoIHRoZSB2ZW5kb3JlZCBr ZXlzcGFjZSBpcyBpdCB3b3VsZCBrZWVwCj4gPgo+ID4gQW4gYXBwbGljYXRpb24gd2lsbCBhbHdh eXMgbmVlZCB0byBjaGVjayB2ZW5kb3JpZCBiZWZvcmUgY2FsbGluZyBod3Byb2JlCj4gPiB3aXRo IGEgdmVuZG9yLXNwZWNpZmljIGZlYXR1cmU/IElmIHRoYXQgaHdwcm9iZSBzdXBwb3J0IGlzIGEg a2V5IGFib3ZlCj4gPiAxPDw2MywgdGhlbiB0aGUgYXBwbGljYXRpb24gd2lsbCBuZWVkIHRvIHBh c3MgdGhhdCB2ZW5kb3Itc3BlY2lmaWMga2V5Cj4gPiBhbmQgaW50ZXJwcmV0IHRoZSB2ZW5kb3It c3BlY2lmaWMgdmFsdWUuIElmIHRoYXQgaHdwcm9iZSBzdXBwb3J0IGlzIHdoYXQKPiA+IEkgaGF2 ZSBwcm9wb3NlZCBoZXJlLCB0aGVuIHRoZSB1c2VyIGNhbGxzIHRoZSBzdGFuZGFyZGl6ZWQgdmVu ZG9yCj4gPiBleHRlbnNpb24gaHdwcm9iZSBlbmRwb2ludCBhbmQgdGhlbiBuZWVkcyB0byBpbnRl cnByZXQgdGhlIHJlc3VsdCBiYXNlZAo+ID4gb24gdGhlIHZlbmRvciBvZiB0aGUgY3B1bWFzay4g SW4gYm90aCBjYXNlcyB0aGV5IG5lZWQgdG8gY2hlY2sgdGhlCj4gPiB2ZW5kb3JpZCBvZiB0aGUg Y3B1bWFzay4gSW4gdGhlIHRlc3QgY2FzZSBJIGFkZGVkIEkgZmFpbGVkIHRvIGNoZWNrIHRoZQo+ ID4gdmVuZG9yaWQgYnV0IEkgc2hvdWxkIGhhdmUgaGFkIHRoYXQuCj4gPgo+ID4gPiB0aGUgc3By YXdsIGZyb20gcG9sbHV0aW5nIHRoZSBnZW5lcmFsIGFycmF5IG9mIChob3BlZnVsbHkgdmFsdWFi bGUpCj4gPiA+IGluZm8gd2l0aCBzdHVmZiB0aGF0J3MgbGlrZWx5IHRvIGJlY29tZSBsZXNzIHJl bGV2YW50IGFzIHRpbWUgcGFzc2VzLgo+ID4gPiBJdCBhbHNvIGxvd2VycyB0aGUgYmFyIGEgYml0 IHRvIG1ha2UgaXQgZWFzaWVyIGZvciB2ZW5kb3JzIHRvIGV4cG9zZQo+ID4gPiBiaXRzLCBhcyB0 aGV5IGRvbid0IGNvbnN1bWUgZ2xvYmFsIHNwYWNlIGZvciBldmVyeW9uZSBmb3IgYWxsIG9mIHRp bWUsCj4gPiA+IGp1c3QgdGhlbXNlbHZlcy4KPiA+Cj4gPiBUaGUgdmVuZG9yIGtleXMgYXJlIHRp ZWQgZGlyZWN0bHkgdG8gdGhlIHZlbmRvci4gU28gYXMgaXQgZ3Jvd3Mgd2Ugd291bGQKPiA+IGhh dmUgc29tZXRoaW5nIGxpa2U6Cj4gPgo+ID4gI2RlZmluZSBSSVNDVl9IV1BST0JFX0tFWV9WRU5E T1JfRVhUXzAgIDcKPiA+IC8qIFQtSGVhZCAqLwo+ID4gI2RlZmluZSAgICAgICAgIFJJU0NWX0hX UFJPQkVfVkVORE9SX0VYVF9YVEhFQURWRUNUT1IgICAoMSA8PCAwKQo+ID4gI2RlZmluZSAgICAg ICAgIFJJU0NWX0hXUFJPQkVfVkVORE9SX0VYVF9YVEhFQUQyICAgICAgICAoMiA8PCAwKQo+ID4g I2RlZmluZSAgICAgICAgIFJJU0NWX0hXUFJPQkVfVkVORE9SX0VYVF9YVEhFQUQzICAgICAgICAo MyA8PCAwKQo+ID4gLyogVmVuZG9yIDIgKi8KPiA+ICNkZWZpbmUgICAgICAgICBSSVNDVl9IV1BS T0JFX1ZFTkRPUl9FWFRfWFZFTkRPUjEgICAgICAgKDEgPDwgMCkKPiA+ICNkZWZpbmUgICAgICAg ICBSSVNDVl9IV1BST0JFX1ZFTkRPUl9FWFRfWFZFTkRPUjIgICAgICAgKDIgPDwgMCkKPiA+IC8q IFZlbmRvciAzICovCj4gPiAuLi4KPiA+Cj4gPiBUaGUga2V5cyBvdmVybGFwIGJldHdlZW4gdmVu ZG9ycy4gVG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbiBhIHZlbmRvcgo+ID4gc3VwcG9ydHMs IGh3cHJvYmUgZ2V0cyBkYXRhIGZyb20gaGFydF9pc2FfdmVuZG9yW2NwdV0uIElmIHRoZSB2ZW5k b3IgaXMKPiA+IHZlbmRvciAyLCBpdCBpcyBub3QgcG9zc2libGUgZm9yIGEgdmVuZG9yIGV4dGVu c2lvbiBmcm9tIHZlbmRvciAzIHRvIGVuZAo+ID4gdXAgaW4gdGhlcmUuIE9ubHkgdGhlIGV4dGVu c2lvbnMgZnJvbSB0aGF0IHZlbmRvciBjYW4gYmUgc3VwcG9ydGVkIGJ5Cj4gPiB0aGF0IHZlbmRv cidzIGhhcmR3YXJlLgo+IAo+IEdvdGNoYS4gWW91J3JlIHJpZ2h0IEkgaGFkIG1pc2ludGVycHJl dGVkIHRoaXMsIHRoaW5raW5nIFhUSEVBRFZFQ1RPUgo+IHdhcyBhIHZhbGlkIGJpdCByZWdhcmRs ZXNzIG9mIG12ZW5kb3JpZCwgYW5kIHRoYXQgb3RoZXIgdmVuZG9ycyB3b3VsZAo+IGhhdmUgdG8g Y2hvb3NlIG5ldyBiaXRzIGZvciB0aGVpciBmZWF0dXJlcyBhbmQgYWx3YXlzIHJldHVybiAwIGZv cgo+IFhUSEVBRFZFQ1RPUi4gV2l0aCB5b3VyIGV4cGxhbmF0aW9uLCBpdCBzZWVtcyBsaWtlIHlv dSdyZSBhbGxvY2F0aW5nCj4ga2V5cyAoaW4gbm8gcGFydGljdWxhciBvcmRlcikgd2hvc2UgbWVh bmluZyB3aWxsIGNoYW5nZSBiYXNlZCBvbgo+IG12ZW5kb3JpZC4KPiAKPiBJIGd1ZXNzIEknbSBz dGlsbCBub3QgY29udmluY2VkIHRoYXQgc2F2aW5nIGVhY2ggdmVuZG9yIGZyb20gaGF2aW5nIHRv Cj4gYWRkIGEgVkVORE9SX0VYVCBrZXkgaW4gdGhlaXIga2V5c3BhY2UgaXMgd29ydGggdGhlIHNh Y3JpZmljZSBvZgo+IHNwcmF5aW5nIHRoZSB2ZW5kb3Itc3BlY2lmaWMga2V5cyBhY3Jvc3MgdGhl IGdlbmVyaWMga2V5c3BhY2UuIEFyZQo+IHRoZXJlIGFkdmFudGFnZXMgdG8gaGF2aW5nIGEgc2lu Z2xlIGtleSB3aG9zZSBjYXRlZ29yeSBpcyBzaW1pbGFyIGJ1dAo+IHdob3NlIGJpdHMgYXJlIGVu dGlyZWx5IHZlbmRvci1kZWZpbmVkPyBNYXliZSBpZiBJIHdlcmUgdXNlcnNwYWNlIGFuZAo+IG15 IGZlYXR1cmUgY291bGQgYmUgc2F0aXNmaWVkIGVxdWl2YWxlbnRseSBieSBYVEhFQURWRUNUT1Ig b3IKPiBYUklWT1NPVEhFUlRISU5HLCB0aGVuIEkgY291bGQgZG8gb25lIGh3cHJvYmUgY2FsbCBp bnN0ZWFkIG9mIHR3bz8gQnV0Cj4gSSBkb24ndCB0aGluayB0aGUgdmVuZG9ycyBhcmUgZ29pbmcg dG8gYmUgY29uc2lzdGVudCBlbm91Z2ggZm9yIHRoYXQKPiBlcXVpdmFsZW5jeSB0byBldmVyIHBy b3ZlIHVzZWZ1bC4gVGhlIGFkdmFudGFnZXMgaW4gbXkgaGVhZCBvZiB0aGUKPiBzZXBhcmF0ZSB2 ZW5kb3Iga2V5c3BhY2UgYXJlOgo+ICAqIEtlZXBzIHRoZSBrZXJuZWwgY29kZSBzaW1wbGU6IGlm IGtleSA+PSAoMSA+PiA2MykKPiB2ZW5kb3JfY29uZmlnLT5kb19od3Byb2JlKCksIHJhdGhlciB0 aGFuIGhhdmluZyBhbGwgdGhlc2UgbGl0dGxlIGNhbGxzCj4gaW4gZWFjaCBzcGVjaWZpYyBzd2l0 Y2ggY2FzZSBmb3IgdmVuZG9yX2NvbmZpZy0+ZG9fdmVuZG9yX2V4dDAoKSwKPiB2ZW5kb3JfY29u ZmlnLT5kb192ZW5kb3JfZXh0MSgpLCBldGMuCgpUaGUgY29uc2lzdGVuY3kgYmV0d2VlbiB2ZW5k b3JzIGlzIGd1YXJhbnRlZWQgaW4gdGhpcyBzY2hlbWUuIFRoZXkganVzdAphZGQgdGhlIGV4dGVu c2lvbiB0byBod3Byb2JlX2lzYV92ZW5kb3JfZXh0MC4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHRo ZQpjcml0aWNhbCBjb2RlIGZyb20gdGhlIGtlcm5lbDoKCglmb3JfZWFjaF9jcHUoY3B1LCBjcHVz KSB7CgkJc3RydWN0IHJpc2N2X2lzYWluZm8gKmlzYXZlbmRvcmluZm8gPSAmaGFydF9pc2FfdmVu ZG9yW2NwdV07CgojZGVmaW5lIFZFTkRPUl9FWFRfS0VZKGV4dCkJCQkJCQkJCVwKCWRvIHsJCQkJ CQkJCQkJXAoJCWlmIChfX3Jpc2N2X2lzYV92ZW5kb3JfZXh0ZW5zaW9uX2F2YWlsYWJsZShpc2F2 ZW5kb3JpbmZvLT5pc2EsCQlcCgkJCQkJCQkgUklTQ1ZfSVNBX1ZFTkRPUl9FWFRfIyNleHQpKQlc CgkJCXBhaXItPnZhbHVlIHw9IFJJU0NWX0hXUFJPQkVfVkVORE9SX0VYVF8jI2V4dDsJCQlcCgkJ ZWxzZQkJCQkJCQkJCVwKCQkJbWlzc2luZyB8PSBSSVNDVl9IV1BST0JFX1ZFTkRPUl9FWFRfIyNl eHQ7CQkJXAoJfSB3aGlsZSAoZmFsc2UpCgoJLyoKCSAqIE9ubHkgdXNlIFZFTkRPUl9FWFRfS0VZ KCkgZm9yIGV4dGVuc2lvbnMgd2hpY2ggY2FuIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLAoJICog cmVnYXJkbGVzcyBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiwgYXMgbm8gb3RoZXIgY2hl Y2tzLCBiZXNpZGVzCgkgKiBwcmVzZW5jZSBpbiB0aGUgaGFydF92ZW5kb3JfaXNhIGJpdG1hcCwg YXJlIG1hZGUuCgkgKi8KCVZFTkRPUl9FWFRfS0VZKFhUSEVBRFZFQ1RPUik7CgojdW5kZWYgVkVO RE9SX0VYVF9LRVkKCX0KCgkvKiBOb3cgdHVybiBvZmYgcmVwb3J0aW5nIGZlYXR1cmVzIGlmIGFu eSBDUFUgaXMgbWlzc2luZyBpdC4gKi8KCXBhaXItPnZhbHVlICY9IH5taXNzaW5nOwoKVGhlIG9u bHkgdGhpbmcgYSB2ZW5kb3Igd2lsbCBoYXZlIHRvIGRvIGlzIGFkZCBhbiBlbnRyeSBiZWxvdwpW RU5ET1JfRVhUX0tFWShYVEhFQURWRUNUT1IpIHdpdGggdGhlaXIgZXh0ZW5zaW9uIG5hbWUgKG9m IGNvdXJzZQpwb3B1bGF0aW5nIGEgdmFsdWUgZm9yIHRoZSBrZXkgYXMgd2VsbCkuIFRoaXMgZXhp c3RpbmcgY29kZSB3aWxsIHRoZW4KY2hlY2sgaWYgdGhlIGV4dGVuc2lvbiBpcyBjb21wYXRpYmxl IHdpdGggdGhlIGhhcmR3YXJlIGFuZCBhcHByb3ByaWF0ZQpwb3B1bGF0ZSB0aGUgYml0bWFzay4g QWxsIHZlbmRvcnMgZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBmb3IgImZyZWUiCndpdGhvdXQgbmVl ZGluZyB0byB3cml0ZSB0aGUgYm9pbGVycGxhdGUgY29kZSB0byBleHBvc2UgdmVuZG9yCmV4dGVu c2lvbnMgdGhyb3VnaCBod3Byb2JlLgoKTm93IHRoYXQgSSB3cml0ZSB0aGlzIG91dCBJIGRvIHNl ZSB0aGF0IEkgb3Zlcmxvb2tlZCB0aGF0IHRoaXMgY29kZQpuZWVkcyB0byBjaGVjayB0aGUgdmVu ZG9yaWQgdG8gZW5zdXJlIHRoYXQgdGhlIGdpdmVuIGV4dGVuc2lvbiBpcwphY3R1YWxseSBhc3Nv Y2lhdGVkIHdpdGggdGhlIHZlbmRvcmlkLiBUaGlzIHdvdWxkIG1ha2UgdGhpcyBtb3JlCmNvbXBs aWNhdGVkIGJ1dCBzdGlsbCBzZWVtcyBsaWtlIGEgbG93IGJhcnJpZXIgdG8gZW50cnkgZm9yIGEg bmV3CnZlbmRvciwgYXMgd2VsbCBhcyBhIHN0YW5kYXJkIEFQSSBmb3IgZ2V0dGluZyBhbGwgdmVu ZG9yIGV4dGVuc2lvbnMgdGhhdAphcmUgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSByZWdhcmRs ZXNzIG9mIHdoaWNoIHBsYXRmb3JtIGlzIGJlaW5nCnVzZWQuCgo+ICAqIEl0IGV4dGVuZHMgZWFz aWx5IGludG8gcGFzc2luZyBvdGhlciBmb3JtcyBvZiB2ZW5kb3IgaHdwcm9iZSBpbmZvCj4gbGF0 ZXIsIHJhdGhlciB0aGFuIHNvbHZpbmcgb25seSB0aGUgY2FzZSBvZiByaXNjLXYgZXh0ZW5zaW9u cyBub3csIGFuZAo+IHRoZW4gaGF2aW5nIHRvIGRvIHRoaXMgYWxsIGFnYWluIGZvciBlYWNoIGFk ZGl0aW9uYWwgY2F0ZWdvcnkgb2YKPiB2ZW5kb3IgZGF0YS4KClRoaXMgaXMgYSBncmVhdCBwb2lu dC4gSSBkbyBhZ3JlZSB0aGF0IGEgZGlmZmVyZW50IHNvbHV0aW9uIHdpbGwgYmUKbmVjZXNzYXJ5 IGZvciBhcmJpdHJhcnkgdmVuZG9yIGRhdGEgYW5kIEkgYW0gYWxsIGZvciBtYWtpbmcgc29tZXRo aW5nCmZ1dHVyZSBjb21wYXRpYmxlLiBBdCB0aGUgc2FtZSB0aW1lIEkgZG9uJ3Qgd2FudCB0byBn ZXQgdHJhcHBlZCBpbnRvCnNvbWV0aGluZyB0aGF0IGlzIHN1Ym9wdGltYWwgZm9yIHRoZSBzYWtl IG9mIGRvaW5nIGxlc3Mgd29yayBsYXRlci4KVGhlcmUgaXMgbm8gY2hhbmNlIG9mIGFueSBjb21w YXRpYmlsaXR5IG9uY2Ugd2UgbGVhdmUgdGhlIHJlYWxtIG9mCnJpc2N2IGV4dGVuc2lvbnMsIHNv IG9uY2UgYSB2ZW5kb3IgbmVlZHMgc29tZXRoaW5nIGV4cG9ydGVkIEkgd291bGQgYmUKaGFwcHkg dG8gd3JpdGUgdGhlIGNvZGUgdG8gc3VwcG9ydCB0aGF0LiAKCj4gICogU2ltaWxhcmx5LCBpdCBk aXNjb3VyYWdlcyBmdXR1cmUgdmVuZG9ycyBmcm9tIHRyeWluZyB0byBzcXVpbnQgYW5kCj4gZmlu ZCBhIHdheSB0byBtYWtlIGEgdmFndWVseSBnZW5lcmljIHNvdW5kaW5nIGNhdGVnb3J5IGZvciB0 aGVpciBvd24KPiBod3Byb2JlIGtleSB3aGljaCB3aWxsIHVsdGltYXRlbHkgb25seSBldmVyIGJl IGZpbGxlZCBpbiBieSB0aGVtCj4gYW55d2F5LgoKV2hhdCBkbyB5b3UgbWVhbiBieSB0aGlzPyBU aGVyZSBhcmUgbm8gImNhdGVnb3JpZXMiIGhlcmUsIHRoZSB2ZW5kb3IKanVzdCB3cml0ZXMgb3V0 IHRoZWlyIGV4dGVuc2lvbiBWRU5ET1JfRVhUX0tFWShYVkVORE9SRVhURU5TSU9OKSBhbmQgaXQK Z2V0cyBzaHV0dGxlZCB0byB1c2Vyc3BhY2Ugb24gdGhlIGh3cHJvYmUgdmVuZG9yIGNhbGwuCgot IENoYXJsaWUKCj4gCj4gLUV2YW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK