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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BC7D9CCA473 for ; Thu, 30 Jun 2022 21:59:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236763AbiF3V7j (ORCPT ); Thu, 30 Jun 2022 17:59:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49614 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229531AbiF3V7h (ORCPT ); Thu, 30 Jun 2022 17:59:37 -0400 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C21273FBE7; Thu, 30 Jun 2022 14:59:36 -0700 (PDT) Received: by mail-ej1-x62b.google.com with SMTP id sb34so599771ejc.11; Thu, 30 Jun 2022 14:59:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=VCFiO/DeU9BXKDMeaTVORaJLJS+2vXFEBjORLfl2s5k=; b=LvKY1OOTT78vTS8EPbGj0TrO58Z6edbacT16WUNefQLwdjxglPKC7hY1zgMoBIDwzP 2xci4QFis9EXN30WVQkkwLYWs7l87b+YBiiRWyiHrhSXInAHmd1BM7aDXMhtPMZI2HY4 LBqz+kuSiDwiwJ8EQhRZsklryzlVX/6VZ/Dm8QkCM7gS97EHASij1PJFrTFg3JdqV4pE 72QKMYh6DQiwnvMQHeU9G6LbKsFaDoxkZibp7qSQ0GnOAW6OnFg0JT+KoD1aqaUuzPLf h75v8xrcHZUUpGwz0Pq4KzKkNFFgAbl1vUiw7aSTsjp24LOIpKbFQZWeSHfUJLj6RAJs dBdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=VCFiO/DeU9BXKDMeaTVORaJLJS+2vXFEBjORLfl2s5k=; b=NWKzicev+ZSPJzn3Je0ulWmq03XpEr+auwguLicX4HqZ9wh/z2LokxTzKWZ7LZkUn3 BGs5CTjcpChMVinI1Kh4wyG68muOIdPAx6x5bl77KVeGPnPyaGYsVLeolSeDC96JlDDM sj3YRnKTf8k0sOuXhlV6Nq2MpIk4I/ABjuIBzBXEixw77K6kX1JlipwFKNpGABAQ0udi JsFC8d5/lfgH5zioTmmKiGe5DSDx9/x30/sRch2+56ksAkb5F3oIlFxrT9VrfjMGIJhu mceb7UlViRrRBmalD0V7JkcE+BUuLzKiUg7fuJ6yXsQzAUyOtE29vd8vmL/U4n91ZogU wUug== X-Gm-Message-State: AJIora/D6BMLqlDHj/gEDNorgrSKf92gIxY24ABcXKmlxFmVrubC2sl2 LtTxe0IfFayWipgQyfKaZKyRGNu9SDe7qSIJ3yC5lrn/ X-Google-Smtp-Source: AGRyM1utaObcR+X0r6TrHRoLKwSzV4pBavCJL1T5Wzg7peFzpGSlpvtkm1Sf8JauMB3VhrTRV7HUakvHEsj0+Nbkr+k= X-Received: by 2002:a17:906:5a62:b0:728:f6d4:7786 with SMTP id my34-20020a1709065a6200b00728f6d47786mr10914153ejc.184.1656626375309; Thu, 30 Jun 2022 14:59:35 -0700 (PDT) MIME-Version: 1.0 References: <20220629085836.18042-1-fmdefrancesco@gmail.com> <2254584.ElGaqSPkdT@opensuse> In-Reply-To: <2254584.ElGaqSPkdT@opensuse> From: Alexander Duyck Date: Thu, 30 Jun 2022 14:59:23 -0700 Message-ID: Subject: Re: [Intel-wired-lan] [PATCH] ixgbe: Use kmap_local_page in ixgbe_check_lbtest_frame() To: "Fabio M. De Francesco" Cc: Eric Dumazet , Maciej Fijalkowski , Jesper Dangaard Brouer , Daniel Borkmann , intel-wired-lan , Alexander Duyck , John Fastabend , Jesse Brandeburg , Alexei Starovoitov , Netdev , Jakub Kicinski , bpf , Paolo Abeni , Ira Weiny , "David S. Miller" , LKML Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 30, 2022 at 11:18 AM Fabio M. De Francesco wrote: > > On gioved=C3=AC 30 giugno 2022 18:09:18 CEST Alexander Duyck wrote: > > On Thu, Jun 30, 2022 at 8:25 AM Eric Dumazet wrot= e: > > > > > > On Thu, Jun 30, 2022 at 5:17 PM Alexander Duyck > > > wrote: > > > > > > > > On Thu, Jun 30, 2022 at 3:10 AM Maciej Fijalkowski > > > > wrote: > > > > > > > > > > On Wed, Jun 29, 2022 at 10:58:36AM +0200, Fabio M. De Francesco > wrote: > > > > > > The use of kmap() is being deprecated in favor of > kmap_local_page(). > > > > > > > > > > > > With kmap_local_page(), the mapping is per thread, CPU local an= d > not > > > > > > globally visible. Furthermore, the mapping can be acquired from > any context > > > > > > (including interrupts). > > > > > > > > > > > > Therefore, use kmap_local_page() in ixgbe_check_lbtest_frame() > because > > > > > > this mapping is per thread, CPU local, and not globally visible= . > > > > > > > > > > Hi, > > > > > > > > > > I'd like to ask why kmap was there in the first place and not pla= in > > > > > page_address() ? > > > > > > > > > > Alex? > > > > > > > > The page_address function only works on architectures that have > access > > > > to all of physical memory via virtual memory addresses. The kmap > > > > function is meant to take care of highmem which will need to be > mapped > > > > before it can be accessed. > > > > > > > > For non-highmem pages kmap just calls the page_address function. > > > > https://elixir.bootlin.com/linux/latest/source/include/linux/highme= m-internal.h#L40 > > > > > > > > > Sure, but drivers/net/ethernet/intel/ixgbe/ixgbe_main.c is allocating > > > pages that are not highmem ? > > > > > > This kmap() does not seem needed. > > > > Good point. So odds are page_address is fine to use. Actually there is > > a note to that effect in ixgbe_pull_tail. > > > > As such we could probably go through and update igb, and several of > > the other Intel drivers as well. > > > > - Alex > > > I don't know this code, however I know kmap*(). > > I assumed that, if author used kmap(), there was possibility that the pag= e > came from highmem. > > In that case kmap_local_page() looks correct here. > > However, now I read that that page _cannot_ come from highmem. Therefore, > page_address() would suffice. > > If you all want I can replace kmap() / kunmap() with a "plain" > page_address(). Please let me know. > > Thanks, > > Fabio Replacing it with just page_address() should be fine. Back when I wrote the code I didn't realize that GFP_ATOMIC pages weren't allocated from highmem so I suspect I just used kmap since it was the way to cover all the bases. Thanks, - Alex 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 smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 F2EDCC433EF for ; Thu, 30 Jun 2022 21:59:45 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 900CE410A5; Thu, 30 Jun 2022 21:59:45 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 900CE410A5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=osuosl.org; s=default; t=1656626385; bh=scsI5sE9VFkvg2i3D7d8QrswThaxv105EkTtkUNRSYw=; h=References:In-Reply-To:From:Date:To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: Cc:From; b=Jrh4mdgOWxmKwtNtBdWKvsTc5CzHEoxCyj/dIlyZT44fD47xcFfa6odlhhgmnBfvH mfU7rf+HX4WlHeC8cPld9qQ6aPw4uZ0JI2+CFg1kXyvaSxGcuSiVdN3prN3RsRUY3u I5MUKv8MYoZeGYR9gGS7q4SRHbARpTogVoLXP7ldSAr2ODTSjQNOb06cVNiM8PLuOu N1i5hENtQ+4gSF7LOPBCKznINNmiww3YYTWA1gVMNYnkCRAlxKpx+dwqExezYoz+n8 pz3G/yuS309P1Dck+uRU/L/nyBIgfiLBPSUSCdnJtlEv53rbyex9B2Q8ydH4YEZxAb fZcfiyXi7LlTQ== X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id V-1ptlv4Elmy; Thu, 30 Jun 2022 21:59:44 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by smtp4.osuosl.org (Postfix) with ESMTP id B664741774; Thu, 30 Jun 2022 21:59:43 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org B664741774 Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by ash.osuosl.org (Postfix) with ESMTP id D6D141BF349 for ; Thu, 30 Jun 2022 21:59:41 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 9F7C541774 for ; Thu, 30 Jun 2022 21:59:41 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 9F7C541774 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id M-v6VtVdI4Nt for ; Thu, 30 Jun 2022 21:59:37 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 453EB410A5 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by smtp4.osuosl.org (Postfix) with ESMTPS id 453EB410A5 for ; Thu, 30 Jun 2022 21:59:37 +0000 (UTC) Received: by mail-ej1-x634.google.com with SMTP id q6so583778eji.13 for ; Thu, 30 Jun 2022 14:59:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=VCFiO/DeU9BXKDMeaTVORaJLJS+2vXFEBjORLfl2s5k=; b=J7Q+AES623E2QZbx90H8Wnf0fTMi9df7JPgsuwggE+L+eISwi3Isw3I3S+7LBe+v0L D1rVuNcahd02IImSWJ9jMgPyJtAdgwR9SfI4R6DJULA9N4z/2DjiWKN6y7LADGAefIny ONMLkz7beYzdTK+cIg9mbAl2iqPYM+0axDXTfN8D073JfVrIVtJsbiTJVTZxWhTR3OPN QRDP603Mg3eleK2T1MGjitHMmi1VN4mdfgIhFCOQ0YTqDoXCL8HisW7h+poXqDeZuZFd tGkgtSH7exdjdOpossACQhxgiPiXOJ+cpmd4OPkahyEE9nI2uVMkOByEGIjmliua4v08 +gZg== X-Gm-Message-State: AJIora9mWD0ADaV4Ey1VcJpdWgjLusHwRVvOfh/b0zhNFWEfa3wLFJe4 bj2n4WDtGDq59xbJO+duxGCG2ZrNxfXjyZQvcFg= X-Google-Smtp-Source: AGRyM1utaObcR+X0r6TrHRoLKwSzV4pBavCJL1T5Wzg7peFzpGSlpvtkm1Sf8JauMB3VhrTRV7HUakvHEsj0+Nbkr+k= X-Received: by 2002:a17:906:5a62:b0:728:f6d4:7786 with SMTP id my34-20020a1709065a6200b00728f6d47786mr10914153ejc.184.1656626375309; Thu, 30 Jun 2022 14:59:35 -0700 (PDT) MIME-Version: 1.0 References: <20220629085836.18042-1-fmdefrancesco@gmail.com> <2254584.ElGaqSPkdT@opensuse> In-Reply-To: <2254584.ElGaqSPkdT@opensuse> From: Alexander Duyck Date: Thu, 30 Jun 2022 14:59:23 -0700 Message-ID: To: "Fabio M. De Francesco" X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=VCFiO/DeU9BXKDMeaTVORaJLJS+2vXFEBjORLfl2s5k=; b=LvKY1OOTT78vTS8EPbGj0TrO58Z6edbacT16WUNefQLwdjxglPKC7hY1zgMoBIDwzP 2xci4QFis9EXN30WVQkkwLYWs7l87b+YBiiRWyiHrhSXInAHmd1BM7aDXMhtPMZI2HY4 LBqz+kuSiDwiwJ8EQhRZsklryzlVX/6VZ/Dm8QkCM7gS97EHASij1PJFrTFg3JdqV4pE 72QKMYh6DQiwnvMQHeU9G6LbKsFaDoxkZibp7qSQ0GnOAW6OnFg0JT+KoD1aqaUuzPLf h75v8xrcHZUUpGwz0Pq4KzKkNFFgAbl1vUiw7aSTsjp24LOIpKbFQZWeSHfUJLj6RAJs dBdw== X-Mailman-Original-Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=LvKY1OOT Subject: Re: [Intel-wired-lan] [PATCH] ixgbe: Use kmap_local_page in ixgbe_check_lbtest_frame() X-BeenThere: intel-wired-lan@osuosl.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Wired Ethernet Linux Kernel Driver Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jesper Dangaard Brouer , Daniel Borkmann , Netdev , Alexander Duyck , John Fastabend , Jesse Brandeburg , Alexei Starovoitov , Eric Dumazet , intel-wired-lan , Jakub Kicinski , bpf , Paolo Abeni , Ira Weiny , "David S. Miller" , LKML Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-wired-lan-bounces@osuosl.org Sender: "Intel-wired-lan" T24gVGh1LCBKdW4gMzAsIDIwMjIgYXQgMTE6MTggQU0gRmFiaW8gTS4gRGUgRnJhbmNlc2NvCjxm bWRlZnJhbmNlc2NvQGdtYWlsLmNvbT4gd3JvdGU6Cj4KPiBPbiBnaW92ZWTDrCAzMCBnaXVnbm8g MjAyMiAxODowOToxOCBDRVNUIEFsZXhhbmRlciBEdXljayB3cm90ZToKPiA+IE9uIFRodSwgSnVu IDMwLCAyMDIyIGF0IDg6MjUgQU0gRXJpYyBEdW1hemV0IDxlZHVtYXpldEBnb29nbGUuY29tPiB3 cm90ZToKPiA+ID4KPiA+ID4gT24gVGh1LCBKdW4gMzAsIDIwMjIgYXQgNToxNyBQTSBBbGV4YW5k ZXIgRHV5Y2sKPiA+ID4gPGFsZXhhbmRlci5kdXlja0BnbWFpbC5jb20+IHdyb3RlOgo+ID4gPiA+ Cj4gPiA+ID4gT24gVGh1LCBKdW4gMzAsIDIwMjIgYXQgMzoxMCBBTSBNYWNpZWogRmlqYWxrb3dz a2kKPiA+ID4gPiA8bWFjaWVqLmZpamFsa293c2tpQGludGVsLmNvbT4gd3JvdGU6Cj4gPiA+ID4g Pgo+ID4gPiA+ID4gT24gV2VkLCBKdW4gMjksIDIwMjIgYXQgMTA6NTg6MzZBTSArMDIwMCwgRmFi aW8gTS4gRGUgRnJhbmNlc2NvCj4gd3JvdGU6Cj4gPiA+ID4gPiA+IFRoZSB1c2Ugb2Yga21hcCgp IGlzIGJlaW5nIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YKPiBrbWFwX2xvY2FsX3BhZ2UoKS4KPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gV2l0aCBrbWFwX2xvY2FsX3BhZ2UoKSwgdGhlIG1hcHBpbmcg aXMgcGVyIHRocmVhZCwgQ1BVIGxvY2FsIGFuZAo+IG5vdAo+ID4gPiA+ID4gPiBnbG9iYWxseSB2 aXNpYmxlLiBGdXJ0aGVybW9yZSwgdGhlIG1hcHBpbmcgY2FuIGJlIGFjcXVpcmVkIGZyb20KPiBh bnkgY29udGV4dAo+ID4gPiA+ID4gPiAoaW5jbHVkaW5nIGludGVycnVwdHMpLgo+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiBUaGVyZWZvcmUsIHVzZSBrbWFwX2xvY2FsX3BhZ2UoKSBpbiBpeGdiZV9j aGVja19sYnRlc3RfZnJhbWUoKQo+IGJlY2F1c2UKPiA+ID4gPiA+ID4gdGhpcyBtYXBwaW5nIGlz IHBlciB0aHJlYWQsIENQVSBsb2NhbCwgYW5kIG5vdCBnbG9iYWxseSB2aXNpYmxlLgo+ID4gPiA+ ID4KPiA+ID4gPiA+IEhpLAo+ID4gPiA+ID4KPiA+ID4gPiA+IEknZCBsaWtlIHRvIGFzayB3aHkg a21hcCB3YXMgdGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlIGFuZCBub3QgcGxhaW4KPiA+ID4gPiA+ IHBhZ2VfYWRkcmVzcygpID8KPiA+ID4gPiA+Cj4gPiA+ID4gPiBBbGV4Pwo+ID4gPiA+Cj4gPiA+ ID4gVGhlIHBhZ2VfYWRkcmVzcyBmdW5jdGlvbiBvbmx5IHdvcmtzIG9uIGFyY2hpdGVjdHVyZXMg dGhhdCBoYXZlCj4gYWNjZXNzCj4gPiA+ID4gdG8gYWxsIG9mIHBoeXNpY2FsIG1lbW9yeSB2aWEg dmlydHVhbCBtZW1vcnkgYWRkcmVzc2VzLiBUaGUga21hcAo+ID4gPiA+IGZ1bmN0aW9uIGlzIG1l YW50IHRvIHRha2UgY2FyZSBvZiBoaWdobWVtIHdoaWNoIHdpbGwgbmVlZCB0byBiZQo+IG1hcHBl ZAo+ID4gPiA+IGJlZm9yZSBpdCBjYW4gYmUgYWNjZXNzZWQuCj4gPiA+ID4KPiA+ID4gPiBGb3Ig bm9uLWhpZ2htZW0gcGFnZXMga21hcCBqdXN0IGNhbGxzIHRoZSBwYWdlX2FkZHJlc3MgZnVuY3Rp b24uCj4gPiA+ID4gaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvbGF0ZXN0L3NvdXJj ZS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0taW50ZXJuYWwuaCNMNDAKPiA+ID4KPiA+ID4KPiA+ID4g U3VyZSwgYnV0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBp cyBhbGxvY2F0aW5nCj4gPiA+IHBhZ2VzIHRoYXQgYXJlIG5vdCBoaWdobWVtID8KPiA+ID4KPiA+ ID4gVGhpcyBrbWFwKCkgZG9lcyBub3Qgc2VlbSBuZWVkZWQuCj4gPgo+ID4gR29vZCBwb2ludC4g U28gb2RkcyBhcmUgcGFnZV9hZGRyZXNzIGlzIGZpbmUgdG8gdXNlLiBBY3R1YWxseSB0aGVyZSBp cwo+ID4gYSBub3RlIHRvIHRoYXQgZWZmZWN0IGluIGl4Z2JlX3B1bGxfdGFpbC4KPiA+Cj4gPiBB cyBzdWNoIHdlIGNvdWxkIHByb2JhYmx5IGdvIHRocm91Z2ggYW5kIHVwZGF0ZSBpZ2IsIGFuZCBz ZXZlcmFsIG9mCj4gPiB0aGUgb3RoZXIgSW50ZWwgZHJpdmVycyBhcyB3ZWxsLgo+ID4KPiA+IC0g QWxleAo+ID4KPiBJIGRvbid0IGtub3cgdGhpcyBjb2RlLCBob3dldmVyIEkga25vdyBrbWFwKigp Lgo+Cj4gSSBhc3N1bWVkIHRoYXQsIGlmIGF1dGhvciB1c2VkIGttYXAoKSwgdGhlcmUgd2FzIHBv c3NpYmlsaXR5IHRoYXQgdGhlIHBhZ2UKPiBjYW1lIGZyb20gaGlnaG1lbS4KPgo+IEluIHRoYXQg Y2FzZSBrbWFwX2xvY2FsX3BhZ2UoKSBsb29rcyBjb3JyZWN0IGhlcmUuCj4KPiBIb3dldmVyLCBu b3cgSSByZWFkIHRoYXQgdGhhdCBwYWdlIF9jYW5ub3RfIGNvbWUgZnJvbSBoaWdobWVtLiBUaGVy ZWZvcmUsCj4gcGFnZV9hZGRyZXNzKCkgd291bGQgc3VmZmljZS4KPgo+IElmIHlvdSBhbGwgd2Fu dCBJIGNhbiByZXBsYWNlIGttYXAoKSAvIGt1bm1hcCgpIHdpdGggYSAicGxhaW4iCj4gcGFnZV9h ZGRyZXNzKCkuIFBsZWFzZSBsZXQgbWUga25vdy4KPgo+IFRoYW5rcywKPgo+IEZhYmlvCgpSZXBs YWNpbmcgaXQgd2l0aCBqdXN0IHBhZ2VfYWRkcmVzcygpIHNob3VsZCBiZSBmaW5lLiBCYWNrIHdo ZW4gSQp3cm90ZSB0aGUgY29kZSBJIGRpZG4ndCByZWFsaXplIHRoYXQgR0ZQX0FUT01JQyBwYWdl cyB3ZXJlbid0CmFsbG9jYXRlZCBmcm9tIGhpZ2htZW0gc28gSSBzdXNwZWN0IEkganVzdCB1c2Vk IGttYXAgc2luY2UgaXQgd2FzIHRoZQp3YXkgdG8gY292ZXIgYWxsIHRoZSBiYXNlcy4KClRoYW5r cywKCi0gQWxleApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC13aXJlZC1sYW4gbWFpbGluZyBsaXN0CkludGVsLXdpcmVkLWxhbkBvc3Vvc2wub3Jn Cmh0dHBzOi8vbGlzdHMub3N1b3NsLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLXdpcmVkLWxh bgo=