From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com [209.85.128.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36EEF47796 for ; Fri, 22 Mar 2024 17:13:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711127640; cv=none; b=cgytUPsSp4NCYW1o50o165H6CFT03T2lioII/fWSLs6Ub9m5QgiXIXxFZzdNmvHf+D14+q/GETJSfkndP8mjW4hLoSRETX+bA8P44yXc2n96DAR4ltmYw67JIOFc1zTpMZTx341lveT0J3yz8HCvnU+zSQYuyaNp1Y/hUAB8OuU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711127640; c=relaxed/simple; bh=eupBAERlpi60lBkl1wmr+KLhDG+teWj2Aum1Gw416Bw=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=j5bgg2ZvJDlkQRHuVAwNNiBNERsMuXgVUczMJGflLfMW+tgVFhmkK2+C2GhoBmP9XTwaPnFBtA7I9erru6FaIKarJ3QUMqvqZgPe+s7QcIen8hrh9Ab3r6UL+Tnteug1/nN+EMiLyapSN1CKWp9+V+N103WFGVMBSwsAHsHXDdw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=DJnokTum; arc=none smtp.client-ip=209.85.128.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="DJnokTum" Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-609f3ca61e0so25620907b3.3 for ; Fri, 22 Mar 2024 10:13:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1711127638; x=1711732438; darn=vger.kernel.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=JrCZcezSHtMHgCYV9eTeglWhzn7+4jU5szarE8AAqMc=; b=DJnokTumywRquMuBU3I+SKpJAvoVvHRxbv1CggjzeSnqHjwlZ+y3+6K6KtnmnFRh21 RhfPoP2UiTZMQmMX6GaVcwG7w3uiEIbst2L1nXk4bopLucJUUB3M++uIrAsPh/tvxKTp HBb0T2dtE5pivRGTE1+l0x79WBC7I6oSpjMizWSbDk2cDknhIEuBHwcTbQQ+ebwvCybf oSAaVJzNojSrzKG2hysRYVpkAHKRqHZmZVW2oQ5zt96Jhhr4sDx8Nu5uCxcU4/9gWzEq L1aICic+22+csRBHjrCaiqWoCOLNJo2KaHwwbsp0iRQwfpokgk5WEznrfmnu1xNa+uQZ A0ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711127638; x=1711732438; 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=JrCZcezSHtMHgCYV9eTeglWhzn7+4jU5szarE8AAqMc=; b=B5fZM+536hq5XPP8AYhwj09CHvGU9LZCB4cMlzwQG6mLEsgKM+6go8zoKjH/EeVW0U eaIe/cdGsXu0LuxYlozUB0muEZ9ljlrDq/5AOd9LjAxWeiaxA8pvEJnE3pWFjCsQtPRE dgAbhdHRcH1PAXXQMUwgyQCTd+ct+91uFRhqye3FP5qRDaq/THjirFIw/vFFSvAksYZk qn6lhnGHtDny1xE+Fdtop1e+dAQPp4Ev0RZzO/oQ1ywDvINgDO4ebbULiH9McvkxhEiS NwLxw9aZOpyimlrJNDJRQ9cmD4mPNE1a8SEl8mARtrFYSbs1GjJFlNIcIxqHQL39Vw56 FdkQ== X-Forwarded-Encrypted: i=1; AJvYcCWpFbVzWWVG6yPb7AMOpjL+fVMZggazxbLxFRK9prdsW/JS0zwCb66FBt4NiDXfJomD0JWyR+7VWX4pnmTSBCN/DhXrT2YbRkoFFMs7 X-Gm-Message-State: AOJu0YynLGP3s4ai45XraCoqo5OHMT5ehAV8WOgrymfk767SC26cvXhO 4cKnVqzgoEFJeL1vPhl7zP+uAed8rBtnz1ILbCAW5ySdLEbwbEIMaLqzTaVJFh/0BMl09T2Ykk1 VjvjsEyu1zQK13L+uX2bV7xwfZC+eXx/1NOQPgyrHDVzfjf/qCA8= X-Google-Smtp-Source: AGHT+IE+dsR/xonqkKbxamX8f+YQ5K1V1B8ZXMDiZAfjLGnUm36k6juYRhEDctP2PuCEMODRsbZ2Htfibx0XdOXU0Jg= X-Received: by 2002:a25:b121:0:b0:dc6:d2d3:a57c with SMTP id g33-20020a25b121000000b00dc6d2d3a57cmr2856379ybj.59.1711127638274; Fri, 22 Mar 2024 10:13:58 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240319215915.832127-1-samuel.holland@sifive.com> <20240319215915.832127-6-samuel.holland@sifive.com> <40ab1ce5-8700-4a63-b182-1e864f6c9225@sifive.com> In-Reply-To: From: Deepak Gupta Date: Fri, 22 Mar 2024 10:13:48 -0700 Message-ID: Subject: Re: [RISC-V] [tech-j-ext] [RFC PATCH 5/9] riscv: Split per-CPU and per-thread envcfg bits To: Samuel Holland Cc: Conor Dooley , Palmer Dabbelt , linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, Catalin Marinas , linux-kernel@vger.kernel.org, tech-j-ext@lists.risc-v.org, kasan-dev@googlegroups.com, Evgenii Stepanov , Krzysztof Kozlowski , Rob Herring , Andrew Jones , Guo Ren , Heiko Stuebner , Paul Walmsley Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 21, 2024 at 5:13=E2=80=AFPM Samuel Holland wrote: > > On 2024-03-19 11:39 PM, Deepak Gupta wrote: > >>>> --- a/arch/riscv/include/asm/switch_to.h > >>>> +++ b/arch/riscv/include/asm/switch_to.h > >>>> @@ -69,6 +69,17 @@ static __always_inline bool has_fpu(void) { retur= n false; } > >>>> #define __switch_to_fpu(__prev, __next) do { } while (0) > >>>> #endif > >>>> > >>>> +static inline void sync_envcfg(struct task_struct *task) > >>>> +{ > >>>> + csr_write(CSR_ENVCFG, this_cpu_read(riscv_cpu_envcfg) | task= ->thread.envcfg); > >>>> +} > >>>> + > >>>> +static inline void __switch_to_envcfg(struct task_struct *next) > >>>> +{ > >>>> + if (riscv_cpu_has_extension_unlikely(smp_processor_id(), RIS= CV_ISA_EXT_XLINUXENVCFG)) > >>> > >>> I've seen `riscv_cpu_has_extension_unlikely` generating branchy code > >>> even if ALTERNATIVES was turned on. > >>> Can you check disasm on your end as well. IMHO, `entry.S` is a bette= r > >>> place to pick up *envcfg. > >> > >> The branchiness is sort of expected, since that function is implemente= d by > >> switching on/off a branch instruction, so the alternate code is necess= arily a > >> separate basic block. It's a tradeoff so we don't have to write assemb= ly code > >> for every bit of code that depends on an extension. However, the cost = should be > >> somewhat lowered since the branch is unconditional and so entirely pre= dictable. > >> > >> If the branch turns out to be problematic for performance, then we cou= ld use > >> ALTERNATIVE directly in sync_envcfg() to NOP out the CSR write. > > > > Yeah I lean towards using alternatives directly. > > One thing to note here: we can't use alternatives directly if the behavio= r needs > to be different on different harts (i.e. a subset of harts implement the = envcfg > CSR). I think we need some policy about which ISA extensions are allowed = to be > asymmetric across harts, or else we add too much complexity. As I've responded on the same thread . We are adding too much complexity by assuming that heterogeneous ISA exists (which it doesn't today). And even if it exists, it wouldn't work. Nobody wants to spend a lot of time figuring out which harts have which ISA and which packages are compiled with which ISA. Most of the end users do `sudo apt get install blah blah` And then expect it to just work. It doesn't work for other architectures and even when someone tried, they had to disable certain ISA features to make sure that all cores have the same ISA feature (search AVX12 Intel Alder Lake Disable). > > Regards, > Samuel > 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 1744AC54E71 for ; Fri, 22 Mar 2024 17:14:15 +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=8fkTH70sRRx2zNM1NZvmzGQ2jHzY4l1WPVOBVS/vuTM=; b=kdUgB+rRHwE8ds KAAk9c41zqo8587A/ydFXZl4GL8aMsYtzf6Be+gwfnGuwe9BXFbj0qsRNK3Nl10AVWauB6pHUXY2B hygpSatG+t/zHSE0XVnyK3NjhYIFKlIGq6h+j2ouhn2kAni4jbCt4QhkWIF2scbq1j6bVad5DYxi4 byTwpxI1RE0VZS6njosRJfN5eCiPJI2YbGt5AMM/wzAHPaQiarHwd993Afb3dwo/aROwVQM91w+Y8 kNRichMgUqTBnR1KXf+ahOV/tUCVfp4K0+QUOl1C2lBCOEtkGB8ZHotSKa5dvGtc0K9GgkYqe0s6e wwU9ZpDTT4phTxA5vikg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rniT3-000000087sE-3e42; Fri, 22 Mar 2024 17:14:09 +0000 Received: from mail-yb1-xb32.google.com ([2607:f8b0:4864:20::b32]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rniT0-000000087qt-3k3a for linux-riscv@lists.infradead.org; Fri, 22 Mar 2024 17:14:08 +0000 Received: by mail-yb1-xb32.google.com with SMTP id 3f1490d57ef6-dc74435c428so2378147276.2 for ; Fri, 22 Mar 2024 10:13:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1711127638; x=1711732438; 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=JrCZcezSHtMHgCYV9eTeglWhzn7+4jU5szarE8AAqMc=; b=yXCvzfRKRQWFPV2t2JYQXysm3kqjZKd6LW+aLgGRVhrus2DyZCJ0LXZhpmmFtKYVLH MQIsguYfyTU7WxGbx7Ds0NhV1ZaIEMINpdZWoSRBPtzEI0Z9syPYTVG9LAypTH1z91A5 OuwHg0ffjk0wEEocKECoPMFJ9UECUe5Y8A8YARNDn7yF7RmsGR7KVltvxovq87TM3tfb /l1P7WL/5NIPMmqYJXyrXeARMXYg5OF8/o6bYNl1IkOl0VY/P9tXnvBmg4qsm2s6HX21 +Fr/i6iC7jEmy5OxEQ3QNNbO7e1g9DkJKcgvSogZrKyjhFKPV5MZjArgOEB6JOwDV/EQ Rxtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711127638; x=1711732438; 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=JrCZcezSHtMHgCYV9eTeglWhzn7+4jU5szarE8AAqMc=; b=FpeSYs6VZs4euBu9Q/KFuF/R0fBOL1FJhGh3bPpf30g1AwPdF7RKR2aQDABsLF/be4 4SPiW/sCNO7HR4qGNurBtc7rOzCATMCNY09kKa8pu/+Z+eB5xMek9kVIeroxJyDuMRL/ A8kW1RkfZM3xi+L3KnOMkw5yfr+aT2UY+L/wPf4TAQhJii3axbFWe2kM3CYmVTd1AmYd jPesL3XRjU0/0ZAECSZLoBCVxVZNhaLK1vZEsFY3AXsZuAepUfMNfUWGc5b7Hs+MLA9n Jron52pJ7vRKY4izF2H71YUEDlt7UtR1RsUWkoxmLcOoYEdJqBNkryIQDLUvO77TkPq+ qyUg== X-Forwarded-Encrypted: i=1; AJvYcCURXPdhRHmLjzGqIlZ+VeSqdtajYRmege2OPfORxYBV1BuwItIeVYYsEA4zq0r3ssekoQ1xKGIvJ0c+GBf/acFySGcIKuoX8s8he0gnZw0+ X-Gm-Message-State: AOJu0Yw8x9xVvM1JcbLOa1Vqo2plYWF7g3ilrb08dItUzOyshQrGBLf/ qOpb5ta8V7t+AwFaycdssbNSdSEo0YWId2vyTKqNQE+VIdHQ39klqnemYs5qLmPNkZgiIJF+i/Y /hMCR7tVzZ68lQb/LGOfJZbxUvnfYthqBlcQlCg== X-Google-Smtp-Source: AGHT+IE+dsR/xonqkKbxamX8f+YQ5K1V1B8ZXMDiZAfjLGnUm36k6juYRhEDctP2PuCEMODRsbZ2Htfibx0XdOXU0Jg= X-Received: by 2002:a25:b121:0:b0:dc6:d2d3:a57c with SMTP id g33-20020a25b121000000b00dc6d2d3a57cmr2856379ybj.59.1711127638274; Fri, 22 Mar 2024 10:13:58 -0700 (PDT) MIME-Version: 1.0 References: <20240319215915.832127-1-samuel.holland@sifive.com> <20240319215915.832127-6-samuel.holland@sifive.com> <40ab1ce5-8700-4a63-b182-1e864f6c9225@sifive.com> In-Reply-To: From: Deepak Gupta Date: Fri, 22 Mar 2024 10:13:48 -0700 Message-ID: Subject: Re: [RISC-V] [tech-j-ext] [RFC PATCH 5/9] riscv: Split per-CPU and per-thread envcfg bits To: Samuel Holland Cc: Conor Dooley , Palmer Dabbelt , linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, Catalin Marinas , linux-kernel@vger.kernel.org, tech-j-ext@lists.risc-v.org, kasan-dev@googlegroups.com, Evgenii Stepanov , Krzysztof Kozlowski , Rob Herring , Andrew Jones , Guo Ren , Heiko Stuebner , Paul Walmsley X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240322_101407_034935_B746D2D9 X-CRM114-Status: GOOD ( 19.53 ) 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 T24gVGh1LCBNYXIgMjEsIDIwMjQgYXQgNToxM+KAr1BNIFNhbXVlbCBIb2xsYW5kCjxzYW11ZWwu aG9sbGFuZEBzaWZpdmUuY29tPiB3cm90ZToKPgo+IE9uIDIwMjQtMDMtMTkgMTE6MzkgUE0sIERl ZXBhayBHdXB0YSB3cm90ZToKPiA+Pj4+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dp dGNoX3RvLmgKPiA+Pj4+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgK PiA+Pj4+IEBAIC02OSw2ICs2OSwxNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaGFz X2ZwdSh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQo+ID4+Pj4gICNkZWZpbmUgX19zd2l0Y2hfdG9f ZnB1KF9fcHJldiwgX19uZXh0KSBkbyB7IH0gd2hpbGUgKDApCj4gPj4+PiAgI2VuZGlmCj4gPj4+ Pgo+ID4+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX2VudmNmZyhzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhc2spCj4gPj4+PiArewo+ID4+Pj4gKyAgICAgICBjc3Jfd3JpdGUoQ1NSX0VOVkNGRywg dGhpc19jcHVfcmVhZChyaXNjdl9jcHVfZW52Y2ZnKSB8IHRhc2stPnRocmVhZC5lbnZjZmcpOwo+ ID4+Pj4gK30KPiA+Pj4+ICsKPiA+Pj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9f ZW52Y2ZnKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKPiA+Pj4+ICt7Cj4gPj4+PiArICAgICAg IGlmIChyaXNjdl9jcHVfaGFzX2V4dGVuc2lvbl91bmxpa2VseShzbXBfcHJvY2Vzc29yX2lkKCks IFJJU0NWX0lTQV9FWFRfWExJTlVYRU5WQ0ZHKSkKPiA+Pj4KPiA+Pj4gSSd2ZSBzZWVuIGByaXNj dl9jcHVfaGFzX2V4dGVuc2lvbl91bmxpa2VseWAgZ2VuZXJhdGluZyBicmFuY2h5IGNvZGUKPiA+ Pj4gZXZlbiBpZiBBTFRFUk5BVElWRVMgd2FzIHR1cm5lZCBvbi4KPiA+Pj4gQ2FuIHlvdSBjaGVj ayBkaXNhc20gb24geW91ciBlbmQgYXMgd2VsbC4gIElNSE8sIGBlbnRyeS5TYCBpcyBhIGJldHRl cgo+ID4+PiBwbGFjZSB0byBwaWNrIHVwICplbnZjZmcuCj4gPj4KPiA+PiBUaGUgYnJhbmNoaW5l c3MgaXMgc29ydCBvZiBleHBlY3RlZCwgc2luY2UgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRl ZCBieQo+ID4+IHN3aXRjaGluZyBvbi9vZmYgYSBicmFuY2ggaW5zdHJ1Y3Rpb24sIHNvIHRoZSBh bHRlcm5hdGUgY29kZSBpcyBuZWNlc3NhcmlseSBhCj4gPj4gc2VwYXJhdGUgYmFzaWMgYmxvY2su IEl0J3MgYSB0cmFkZW9mZiBzbyB3ZSBkb24ndCBoYXZlIHRvIHdyaXRlIGFzc2VtYmx5IGNvZGUK PiA+PiBmb3IgZXZlcnkgYml0IG9mIGNvZGUgdGhhdCBkZXBlbmRzIG9uIGFuIGV4dGVuc2lvbi4g SG93ZXZlciwgdGhlIGNvc3Qgc2hvdWxkIGJlCj4gPj4gc29tZXdoYXQgbG93ZXJlZCBzaW5jZSB0 aGUgYnJhbmNoIGlzIHVuY29uZGl0aW9uYWwgYW5kIHNvIGVudGlyZWx5IHByZWRpY3RhYmxlLgo+ ID4+Cj4gPj4gSWYgdGhlIGJyYW5jaCB0dXJucyBvdXQgdG8gYmUgcHJvYmxlbWF0aWMgZm9yIHBl cmZvcm1hbmNlLCB0aGVuIHdlIGNvdWxkIHVzZQo+ID4+IEFMVEVSTkFUSVZFIGRpcmVjdGx5IGlu IHN5bmNfZW52Y2ZnKCkgdG8gTk9QIG91dCB0aGUgQ1NSIHdyaXRlLgo+ID4KPiA+IFllYWggSSBs ZWFuIHRvd2FyZHMgdXNpbmcgYWx0ZXJuYXRpdmVzIGRpcmVjdGx5Lgo+Cj4gT25lIHRoaW5nIHRv IG5vdGUgaGVyZTogd2UgY2FuJ3QgdXNlIGFsdGVybmF0aXZlcyBkaXJlY3RseSBpZiB0aGUgYmVo YXZpb3IgbmVlZHMKPiB0byBiZSBkaWZmZXJlbnQgb24gZGlmZmVyZW50IGhhcnRzIChpLmUuIGEg c3Vic2V0IG9mIGhhcnRzIGltcGxlbWVudCB0aGUgZW52Y2ZnCj4gQ1NSKS4gSSB0aGluayB3ZSBu ZWVkIHNvbWUgcG9saWN5IGFib3V0IHdoaWNoIElTQSBleHRlbnNpb25zIGFyZSBhbGxvd2VkIHRv IGJlCj4gYXN5bW1ldHJpYyBhY3Jvc3MgaGFydHMsIG9yIGVsc2Ugd2UgYWRkIHRvbyBtdWNoIGNv bXBsZXhpdHkuCgpBcyBJJ3ZlIHJlc3BvbmRlZCBvbiB0aGUgc2FtZSB0aHJlYWQgLiBXZSBhcmUg YWRkaW5nIHRvbyBtdWNoCmNvbXBsZXhpdHkgYnkgYXNzdW1pbmcKdGhhdCBoZXRlcm9nZW5lb3Vz IElTQSBleGlzdHMgKHdoaWNoIGl0IGRvZXNuJ3QgdG9kYXkpLiBBbmQgZXZlbiBpZiBpdApleGlz dHMsIGl0IHdvdWxkbid0IHdvcmsuCk5vYm9keSB3YW50cyB0byBzcGVuZCBhIGxvdCBvZiB0aW1l IGZpZ3VyaW5nIG91dCB3aGljaCBoYXJ0cyBoYXZlCndoaWNoIElTQSBhbmQgd2hpY2gKcGFja2Fn ZXMgYXJlIGNvbXBpbGVkIHdpdGggd2hpY2ggSVNBLiBNb3N0IG9mIHRoZSBlbmQgdXNlcnMgZG8g YHN1ZG8KYXB0IGdldCBpbnN0YWxsIGJsYWggYmxhaGAKQW5kIHRoZW4gZXhwZWN0IGl0IHRvIGp1 c3Qgd29yay4gSXQgZG9lc24ndCB3b3JrIGZvciBvdGhlcgphcmNoaXRlY3R1cmVzIGFuZCBldmVu IHdoZW4gc29tZW9uZQp0cmllZCwgdGhleSBoYWQgdG8gZGlzYWJsZSBjZXJ0YWluIElTQSBmZWF0 dXJlcyB0byBtYWtlIHN1cmUgdGhhdCBhbGwKY29yZXMgaGF2ZSB0aGUgc2FtZSBJU0EgZmVhdHVy ZQooc2VhcmNoIEFWWDEyIEludGVsIEFsZGVyIExha2UgRGlzYWJsZSkuCgo+Cj4gUmVnYXJkcywK PiBTYW11ZWwKPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNj dgo=