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 5C87FC433EF for ; Tue, 23 Nov 2021 10:09:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235325AbhKWKMw (ORCPT ); Tue, 23 Nov 2021 05:12:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231838AbhKWKMv (ORCPT ); Tue, 23 Nov 2021 05:12:51 -0500 Received: from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com [IPv6:2607:f8b0:4864:20::82b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 730DBC061574 for ; Tue, 23 Nov 2021 02:09:43 -0800 (PST) Received: by mail-qt1-x82b.google.com with SMTP id v22so19308449qtx.8 for ; Tue, 23 Nov 2021 02:09:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=mtuMlpt4ohIkpQN6Xh6FxPj3xbgP5bBSF7XYuviEPZU=; b=NaqNVJ7EUYxGBODwkbcim8Vay/2aeIY4axpoj0OCHvdwSwqW5L6gIeGzqreaAo43Th 9Y+JjCsRzPpIlZmv1boK4px4vGL5n43XE0SZHipQheuHaApqBKOaZuHZNyKvEUb6JG9z D3jsiMfeYMJ/Ue7qvxfqWrv7Jmxh+OR9mr8Wl4GRK/VVLl6O3fl8QoEbsbTa4vGXgsa6 ixD2AVnSTZh/cwXPouflUcOP1+OhJTb1YRxaSqGHeDnCrUAEa7NcEb9608yLY6afIXTq HqR1xYdI94qUGjFCtdPHCm2AYnK0rUnnzczkNIBItBB9GLyF5ylw0z817s8ebVKZUxWD JCMw== 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=mtuMlpt4ohIkpQN6Xh6FxPj3xbgP5bBSF7XYuviEPZU=; b=STbpFlj1HuBey4qnvZ5TAJ52H3ha80NOalFO5yTjWYDkl3HBUdOk7udb5/CYRib9QX +ejGLxC4AkXH4F/SyvTW/UylzD1HuIzORypG+6KobyV7WfCUvKpq7O+jyjGSwsC9Z3CI q5fiUvST5An7RQXEf1ledlf73B3Gx+5SEG+itRH2obsj+tm0QIUNYX2Ov3M57UcPFayQ kFA3/WhcNVPsDyD2PFDH7uAioDyIXIXs+yXsIXVgnba+Kc53E6iyan0MTAMW96nvI8V+ MGBeAR05cv0hV9RR4kTJUoFkYR6IIG21ZbJv+Ndu+dNgD+aBCZ8XCJrPQoKSgr9qTHlH J65Q== X-Gm-Message-State: AOAM531BEUAY0KLpnf7vdmob1Nwe+pRCTxQJvC7AkhTOlmd2TAD3JNkS EVBgYKnmODHiKxWNjXxcS+r5O5RRp5jowxqKU81dSg== X-Google-Smtp-Source: ABdhPJy4u9mYrnz15jGtUEipitPlUwY+pFzG0QNGRX/8h5EjhiEzk5eLgZmdQJnadpSo/pkY8hbQQbzoV0x8JUcOAOs= X-Received: by 2002:a05:622a:1045:: with SMTP id f5mr4753990qte.319.1637662182323; Tue, 23 Nov 2021 02:09:42 -0800 (PST) MIME-Version: 1.0 References: <20211123051658.3195589-1-pcc@google.com> <20211123051658.3195589-2-pcc@google.com> In-Reply-To: From: Alexander Potapenko Date: Tue, 23 Nov 2021 11:09:05 +0100 Message-ID: Subject: Re: [PATCH v2 1/5] fs: use raw_copy_from_user() to copy mount() data To: Dmitry Vyukov Cc: Peter Collingbourne , Catalin Marinas , Will Deacon , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira , Thomas Gleixner , Andy Lutomirski , Kees Cook , Andrew Morton , Masahiro Yamada , Sami Tolvanen , YiFei Zhu , Colin Ian King , Mark Rutland , Frederic Weisbecker , Viresh Kumar , Andrey Konovalov , Gabriel Krisman Bertazi , Chris Hyser , Daniel Vetter , Chris Wilson , Arnd Bergmann , Christian Brauner , "Eric W. Biederman" , Alexey Gladkov , Ran Xiaokai , David Hildenbrand , Xiaofeng Cao , Cyrill Gorcunov , Thomas Cedeno , Marco Elver , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Evgenii Stepanov 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 Tue, Nov 23, 2021 at 8:51 AM Dmitry Vyukov wrote: > > On Tue, 23 Nov 2021 at 06:17, Peter Collingbourne wrote: > > > > With uaccess logging the contract is that the kernel must not report > > accessing more data than necessary, as this can lead to false positive > > reports in downstream consumers. This generally works out of the box > > when instrumenting copy_{from,to}_user(), but with the data argument > > to mount() we use copy_from_user() to copy PAGE_SIZE bytes (or as > > much as we can, if the PAGE_SIZE sized access failed) and figure out > > later how much we actually need. > > > > To prevent this from leading to a false positive report, use > > raw_copy_from_user(), which will prevent the access from being logged. > > Recall that it is valid for the kernel to report accessing less > > data than it actually accessed, as uaccess logging is a best-effort > > mechanism for reporting uaccesses. > > > > Link: https://linux-review.googlesource.com/id/I5629b92a725c817acd9a861= 288338dd605cafee6 > > Signed-off-by: Peter Collingbourne > > --- > > fs/namespace.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/fs/namespace.c b/fs/namespace.c > > index 659a8f39c61a..695b30e391f0 100644 > > --- a/fs/namespace.c > > +++ b/fs/namespace.c > > @@ -3197,7 +3197,12 @@ static void *copy_mount_options(const void __use= r * data) > > if (!copy) > > return ERR_PTR(-ENOMEM); > > > > - left =3D copy_from_user(copy, data, PAGE_SIZE); > > + /* > > + * Use raw_copy_from_user to avoid reporting overly large acces= ses in > > + * the uaccess buffer, as this can lead to false positive repor= ts in > > + * downstream consumers. > > + */ > > + left =3D raw_copy_from_user(copy, data, PAGE_SIZE); I don't really like the idea of using raw_copy_from_user() anywhere. Right now users of instrumented.h can more or less assume they see all usercopy events, and removing the copy_from_user() call from here looks like a regression. Cannot the usercopy logger decide whether it wants to log the access based on the size (e.g. skip accesses >=3D PAGE_SIZE)? Will it help if we can instrument both sides of copy_from_user() (see the code here: https://linux-review.googlesource.com/c/linux/kernel/git/tor= valds/linux/+/14103/4)? If not, maybe we can disable/enable uaccess logging for the current task around these accesses? > This will skip KASAN/etc checks as well, right? I guess it is fine b/c > this affects just this place and the code looks safe (famous last > words :)) and we can refine it in future. > But I wonder about false positives under KMSAN. However, we probably > can add an explicit KMSAN annotation to mark it as initialised. > Alex? > > > /* > > * Not all architectures have an exact copy_from_user(). Resort= to > > -- > > 2.34.0.rc2.393.gf8c9666880-goog > > --=20 Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Stra=C3=9Fe, 33 80636 M=C3=BCnchen Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg 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 886E6C433EF for ; Tue, 23 Nov 2021 10:11:28 +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=lg6z4nl/3aHlajlj/XQ8ZtNYij415EECyvhKUZg9LVY=; b=dvAftz4AtVOCj6 eMBSU3MqzrPsn5OLxdEg1ilCtoRXYQfAXhFAzksJGzMcchTJopbfZSZwnL4SXDzblB1STuBKeH8ek hwLmEm4cdbAxbzWk5h0cHJU7mrjRRg5kX0EcOV3wwhDmIShsaOu4C7b9NASNrkUGcqPSmty9ex9rx vvjAz4FH4d79OEFaPb2jB2d4Y40dirStLmP0n04mLPtyi1UAKYQwAjoIw6VeBZ/7WfIk7hpxVs9E0 QBrvOlZf2/s9xYhqSnveKUS48caOMFT/Vt8t08iirSal0p7nvIebvL5rOUmtnbXJYYXbxghpeJUwQ s0w8s2y/9fpFx97jtCow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mpSkS-001eqD-AY; Tue, 23 Nov 2021 10:10:01 +0000 Received: from mail-qt1-x82c.google.com ([2607:f8b0:4864:20::82c]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mpSkE-001ell-PX for linux-arm-kernel@lists.infradead.org; Tue, 23 Nov 2021 10:09:52 +0000 Received: by mail-qt1-x82c.google.com with SMTP id f20so19323952qtb.4 for ; Tue, 23 Nov 2021 02:09:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=mtuMlpt4ohIkpQN6Xh6FxPj3xbgP5bBSF7XYuviEPZU=; b=NaqNVJ7EUYxGBODwkbcim8Vay/2aeIY4axpoj0OCHvdwSwqW5L6gIeGzqreaAo43Th 9Y+JjCsRzPpIlZmv1boK4px4vGL5n43XE0SZHipQheuHaApqBKOaZuHZNyKvEUb6JG9z D3jsiMfeYMJ/Ue7qvxfqWrv7Jmxh+OR9mr8Wl4GRK/VVLl6O3fl8QoEbsbTa4vGXgsa6 ixD2AVnSTZh/cwXPouflUcOP1+OhJTb1YRxaSqGHeDnCrUAEa7NcEb9608yLY6afIXTq HqR1xYdI94qUGjFCtdPHCm2AYnK0rUnnzczkNIBItBB9GLyF5ylw0z817s8ebVKZUxWD JCMw== 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=mtuMlpt4ohIkpQN6Xh6FxPj3xbgP5bBSF7XYuviEPZU=; b=YCRYyq77W8PjqflhXqlN5nATJG1YZjPyt+/GrCUrKIzZpRcAzy2Tska8InEvvQHMRe gOSGMkeTryvd/06ltCsQjXa/wyrV0MYkTxJCJkx2q1vMO/PgxCHxbwEE71GkBa22O3RW b/pWTFRsF3NumJFmzeeSjcp27HrptgTTvEh6OEfRZB3OZuJqAxio7dn4OzAKRp4G+em9 FVWifdKMNVLxea2qDn/TnhnPCUI4P0xvtxGHLyffQw/6h/awD93XKRtbAxiCBJ89NuvV QhI0prkn3pnrhTgy0D7N6hIThXwQkNDB8TqJPvl0dUHoCJAJT2nOHn8/2ekuZLiyMIwr Oe/A== X-Gm-Message-State: AOAM5323w/6rlz0MOga01lUY+vLZFRLEjJBWkfYDoRfUuguVAjYLj9ew uUHguDctzt196PNrhutvk/As8zQMby5AoPgrT9a+Eg== X-Google-Smtp-Source: ABdhPJy4u9mYrnz15jGtUEipitPlUwY+pFzG0QNGRX/8h5EjhiEzk5eLgZmdQJnadpSo/pkY8hbQQbzoV0x8JUcOAOs= X-Received: by 2002:a05:622a:1045:: with SMTP id f5mr4753990qte.319.1637662182323; Tue, 23 Nov 2021 02:09:42 -0800 (PST) MIME-Version: 1.0 References: <20211123051658.3195589-1-pcc@google.com> <20211123051658.3195589-2-pcc@google.com> In-Reply-To: From: Alexander Potapenko Date: Tue, 23 Nov 2021 11:09:05 +0100 Message-ID: Subject: Re: [PATCH v2 1/5] fs: use raw_copy_from_user() to copy mount() data To: Dmitry Vyukov Cc: Peter Collingbourne , Catalin Marinas , Will Deacon , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira , Thomas Gleixner , Andy Lutomirski , Kees Cook , Andrew Morton , Masahiro Yamada , Sami Tolvanen , YiFei Zhu , Colin Ian King , Mark Rutland , Frederic Weisbecker , Viresh Kumar , Andrey Konovalov , Gabriel Krisman Bertazi , Chris Hyser , Daniel Vetter , Chris Wilson , Arnd Bergmann , Christian Brauner , "Eric W. Biederman" , Alexey Gladkov , Ran Xiaokai , David Hildenbrand , Xiaofeng Cao , Cyrill Gorcunov , Thomas Cedeno , Marco Elver , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Evgenii Stepanov X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211123_020946_872996_65AE93FE X-CRM114-Status: GOOD ( 34.49 ) 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 T24gVHVlLCBOb3YgMjMsIDIwMjEgYXQgODo1MSBBTSBEbWl0cnkgVnl1a292IDxkdnl1a292QGdv b2dsZS5jb20+IHdyb3RlOgo+Cj4gT24gVHVlLCAyMyBOb3YgMjAyMSBhdCAwNjoxNywgUGV0ZXIg Q29sbGluZ2JvdXJuZSA8cGNjQGdvb2dsZS5jb20+IHdyb3RlOgo+ID4KPiA+IFdpdGggdWFjY2Vz cyBsb2dnaW5nIHRoZSBjb250cmFjdCBpcyB0aGF0IHRoZSBrZXJuZWwgbXVzdCBub3QgcmVwb3J0 Cj4gPiBhY2Nlc3NpbmcgbW9yZSBkYXRhIHRoYW4gbmVjZXNzYXJ5LCBhcyB0aGlzIGNhbiBsZWFk IHRvIGZhbHNlIHBvc2l0aXZlCj4gPiByZXBvcnRzIGluIGRvd25zdHJlYW0gY29uc3VtZXJzLiBU aGlzIGdlbmVyYWxseSB3b3JrcyBvdXQgb2YgdGhlIGJveAo+ID4gd2hlbiBpbnN0cnVtZW50aW5n IGNvcHlfe2Zyb20sdG99X3VzZXIoKSwgYnV0IHdpdGggdGhlIGRhdGEgYXJndW1lbnQKPiA+IHRv IG1vdW50KCkgd2UgdXNlIGNvcHlfZnJvbV91c2VyKCkgdG8gY29weSBQQUdFX1NJWkUgYnl0ZXMg KG9yIGFzCj4gPiBtdWNoIGFzIHdlIGNhbiwgaWYgdGhlIFBBR0VfU0laRSBzaXplZCBhY2Nlc3Mg ZmFpbGVkKSBhbmQgZmlndXJlIG91dAo+ID4gbGF0ZXIgaG93IG11Y2ggd2UgYWN0dWFsbHkgbmVl ZC4KPiA+Cj4gPiBUbyBwcmV2ZW50IHRoaXMgZnJvbSBsZWFkaW5nIHRvIGEgZmFsc2UgcG9zaXRp dmUgcmVwb3J0LCB1c2UKPiA+IHJhd19jb3B5X2Zyb21fdXNlcigpLCB3aGljaCB3aWxsIHByZXZl bnQgdGhlIGFjY2VzcyBmcm9tIGJlaW5nIGxvZ2dlZC4KPiA+IFJlY2FsbCB0aGF0IGl0IGlzIHZh bGlkIGZvciB0aGUga2VybmVsIHRvIHJlcG9ydCBhY2Nlc3NpbmcgbGVzcwo+ID4gZGF0YSB0aGFu IGl0IGFjdHVhbGx5IGFjY2Vzc2VkLCBhcyB1YWNjZXNzIGxvZ2dpbmcgaXMgYSBiZXN0LWVmZm9y dAo+ID4gbWVjaGFuaXNtIGZvciByZXBvcnRpbmcgdWFjY2Vzc2VzLgo+ID4KPiA+IExpbms6IGh0 dHBzOi8vbGludXgtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vaWQvSTU2MjliOTJhNzI1YzgxN2Fj ZDlhODYxMjg4MzM4ZGQ2MDVjYWZlZTYKPiA+IFNpZ25lZC1vZmYtYnk6IFBldGVyIENvbGxpbmdi b3VybmUgPHBjY0Bnb29nbGUuY29tPgo+ID4gLS0tCj4gPiAgZnMvbmFtZXNwYWNlLmMgfCA3ICsr KysrKy0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p Cj4gPgo+ID4gZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKPiA+ IGluZGV4IDY1OWE4ZjM5YzYxYS4uNjk1YjMwZTM5MWYwIDEwMDY0NAo+ID4gLS0tIGEvZnMvbmFt ZXNwYWNlLmMKPiA+ICsrKyBiL2ZzL25hbWVzcGFjZS5jCj4gPiBAQCAtMzE5Nyw3ICszMTk3LDEy IEBAIHN0YXRpYyB2b2lkICpjb3B5X21vdW50X29wdGlvbnMoY29uc3Qgdm9pZCBfX3VzZXIgKiBk YXRhKQo+ID4gICAgICAgICBpZiAoIWNvcHkpCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Cj4gPgo+ID4gLSAgICAgICBsZWZ0ID0gY29weV9mcm9tX3VzZXIoY29w eSwgZGF0YSwgUEFHRV9TSVpFKTsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAgICAgICogVXNlIHJh d19jb3B5X2Zyb21fdXNlciB0byBhdm9pZCByZXBvcnRpbmcgb3Zlcmx5IGxhcmdlIGFjY2Vzc2Vz IGluCj4gPiArICAgICAgICAqIHRoZSB1YWNjZXNzIGJ1ZmZlciwgYXMgdGhpcyBjYW4gbGVhZCB0 byBmYWxzZSBwb3NpdGl2ZSByZXBvcnRzIGluCj4gPiArICAgICAgICAqIGRvd25zdHJlYW0gY29u c3VtZXJzLgo+ID4gKyAgICAgICAgKi8KPiA+ICsgICAgICAgbGVmdCA9IHJhd19jb3B5X2Zyb21f dXNlcihjb3B5LCBkYXRhLCBQQUdFX1NJWkUpOwoKSSBkb24ndCByZWFsbHkgbGlrZSB0aGUgaWRl YSBvZiB1c2luZyByYXdfY29weV9mcm9tX3VzZXIoKSBhbnl3aGVyZS4KUmlnaHQgbm93IHVzZXJz IG9mIGluc3RydW1lbnRlZC5oIGNhbiBtb3JlIG9yIGxlc3MgYXNzdW1lIHRoZXkgc2VlIGFsbAp1 c2VyY29weSBldmVudHMsIGFuZCByZW1vdmluZyB0aGUgY29weV9mcm9tX3VzZXIoKSBjYWxsIGZy b20gaGVyZQpsb29rcyBsaWtlIGEgcmVncmVzc2lvbi4KCkNhbm5vdCB0aGUgdXNlcmNvcHkgbG9n Z2VyIGRlY2lkZSB3aGV0aGVyIGl0IHdhbnRzIHRvIGxvZyB0aGUgYWNjZXNzCmJhc2VkIG9uIHRo ZSBzaXplIChlLmcuIHNraXAgYWNjZXNzZXMgPj0gUEFHRV9TSVpFKT8KV2lsbCBpdCBoZWxwIGlm IHdlIGNhbiBpbnN0cnVtZW50IGJvdGggc2lkZXMgb2YgY29weV9mcm9tX3VzZXIoKSAoc2VlCnRo ZSBjb2RlIGhlcmU6IGh0dHBzOi8vbGludXgtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vYy9saW51 eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LysvMTQxMDMvNCk/CgpJZiBub3QsIG1heWJlIHdl IGNhbiBkaXNhYmxlL2VuYWJsZSB1YWNjZXNzIGxvZ2dpbmcgZm9yIHRoZSBjdXJyZW50CnRhc2sg YXJvdW5kIHRoZXNlIGFjY2Vzc2VzPwoKPiBUaGlzIHdpbGwgc2tpcCBLQVNBTi9ldGMgY2hlY2tz IGFzIHdlbGwsIHJpZ2h0PyBJIGd1ZXNzIGl0IGlzIGZpbmUgYi9jCj4gdGhpcyBhZmZlY3RzIGp1 c3QgdGhpcyBwbGFjZSBhbmQgdGhlIGNvZGUgbG9va3Mgc2FmZSAoZmFtb3VzIGxhc3QKPiB3b3Jk cyA6KSkgYW5kIHdlIGNhbiByZWZpbmUgaXQgaW4gZnV0dXJlLgo+IEJ1dCBJIHdvbmRlciBhYm91 dCBmYWxzZSBwb3NpdGl2ZXMgdW5kZXIgS01TQU4uIEhvd2V2ZXIsIHdlIHByb2JhYmx5Cj4gY2Fu IGFkZCBhbiBleHBsaWNpdCBLTVNBTiBhbm5vdGF0aW9uIHRvIG1hcmsgaXQgYXMgaW5pdGlhbGlz ZWQuCj4gQWxleD8KPgo+ID4gICAgICAgICAvKgo+ID4gICAgICAgICAgKiBOb3QgYWxsIGFyY2hp dGVjdHVyZXMgaGF2ZSBhbiBleGFjdCBjb3B5X2Zyb21fdXNlcigpLiBSZXNvcnQgdG8KPiA+IC0t Cj4gPiAyLjM0LjAucmMyLjM5My5nZjhjOTY2Njg4MC1nb29nCj4gPgoKCgotLSAKQWxleGFuZGVy IFBvdGFwZW5rbwpTb2Z0d2FyZSBFbmdpbmVlcgoKR29vZ2xlIEdlcm1hbnkgR21iSApFcmlrYS1N YW5uLVN0cmHDn2UsIDMzCjgwNjM2IE3DvG5jaGVuCgpHZXNjaMOkZnRzZsO8aHJlcjogUGF1bCBN YW5pY2xlLCBIYWxpbWFoIERlTGFpbmUgUHJhZG8KUmVnaXN0ZXJnZXJpY2h0IHVuZCAtbnVtbWVy OiBIYW1idXJnLCBIUkIgODY4OTEKU2l0eiBkZXIgR2VzZWxsc2NoYWZ0OiBIYW1idXJnCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==