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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8911EE6B275 for ; Fri, 1 Nov 2024 13:01:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0553A6B0093; Fri, 1 Nov 2024 09:01:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F1E506B0095; Fri, 1 Nov 2024 09:01:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D97636B0096; Fri, 1 Nov 2024 09:01:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id B6B176B0093 for ; Fri, 1 Nov 2024 09:01:08 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 6621B160304 for ; Fri, 1 Nov 2024 13:01:08 +0000 (UTC) X-FDA: 82737535776.23.8ECEA07 Received: from smtp-fw-52005.amazon.com (smtp-fw-52005.amazon.com [52.119.213.156]) by imf05.hostedemail.com (Postfix) with ESMTP id 6C53010002C for ; Fri, 1 Nov 2024 13:00:12 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazon201209 header.b=oHNedNDE; dmarc=pass (policy=quarantine) header.from=amazon.com; spf=pass (imf05.hostedemail.com: domain of "prvs=0286efb55=jgowans@amazon.com" designates 52.119.213.156 as permitted sender) smtp.mailfrom="prvs=0286efb55=jgowans@amazon.com" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730465984; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=V6NpXkEbRqzudi+uwHwdqoba+Kdq76cN1fCEb58mUKg=; b=fawU3A/BbJHT0YoxH0TQ2+575UMmHAOuvmBDlp+LtqPwfo6oCxUF5TL9R/Wdgyrv+q8fqr B+4bc01DlQrmMxvQd2yfqQK+EIqz7Mbw1QSPhpAvywsD1LW66tEvUcrnasSQGzjNjrHVwb Vs0mgJEcdsBxVyf/HPFwPGSaaF7xW7w= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazon201209 header.b=oHNedNDE; dmarc=pass (policy=quarantine) header.from=amazon.com; spf=pass (imf05.hostedemail.com: domain of "prvs=0286efb55=jgowans@amazon.com" designates 52.119.213.156 as permitted sender) smtp.mailfrom="prvs=0286efb55=jgowans@amazon.com" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730465984; a=rsa-sha256; cv=none; b=al0QHmaFnV9KgS9oNOU7Vj2ijMV9Y3GmfmgqCguAs2BhTxU9pjl1r/p0R560RrdEKIOiMR BrHPDXwfhMIRLQd99zbBAD+ZeF1fYswc/pcaWgJ/fWQTWZnbHPSkCWQHY5qBEKnYiEvBQ8 YSlnBgbpoqfZqHH6IVsDoWTOlbgmsiQ= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1730466066; x=1762002066; h=from:to:cc:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version:subject; bh=V6NpXkEbRqzudi+uwHwdqoba+Kdq76cN1fCEb58mUKg=; b=oHNedNDEr9S8BqFJ/4+inb44KnGe3FSQ3DMVYw0yA/MkE3BOhHfmcQ1L 6jwcUhF0PXRO1T3kI/L5D05BYVrjvB32V/sSXb4ErkiaryGDZvAWK+c7C a+0s7RibFkqgoA4nJAnsg/gXBVAMScKLnOldEXQR3Ph5V6jfwbDaX/i+1 s=; X-IronPort-AV: E=Sophos;i="6.11,249,1725321600"; d="scan'208";a="692299084" Subject: Re: [PATCH 05/10] guestmemfs: add file mmap callback Thread-Topic: [PATCH 05/10] guestmemfs: add file mmap callback Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO smtpout.prod.us-east-1.prod.farcaster.email.amazon.dev) ([10.43.8.6]) by smtp-border-fw-52005.iad7.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Nov 2024 13:01:03 +0000 Received: from EX19MTAEUA002.ant.amazon.com [10.0.17.79:37212] by smtpin.naws.eu-west-1.prod.farcaster.email.amazon.dev [10.0.2.199:2525] with esmtp (Farcaster) id db462b59-ddb3-40e3-bdd1-54faaf62725c; Fri, 1 Nov 2024 13:01:01 +0000 (UTC) X-Farcaster-Flow-ID: db462b59-ddb3-40e3-bdd1-54faaf62725c Received: from EX19D004EUC002.ant.amazon.com (10.252.51.225) by EX19MTAEUA002.ant.amazon.com (10.252.50.126) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1258.34; Fri, 1 Nov 2024 13:01:01 +0000 Received: from EX19D014EUC004.ant.amazon.com (10.252.51.182) by EX19D004EUC002.ant.amazon.com (10.252.51.225) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1258.34; Fri, 1 Nov 2024 13:01:01 +0000 Received: from EX19D014EUC004.ant.amazon.com ([fe80::76dd:4020:4ff2:1e41]) by EX19D014EUC004.ant.amazon.com ([fe80::76dd:4020:4ff2:1e41%3]) with mapi id 15.02.1258.034; Fri, 1 Nov 2024 13:01:00 +0000 From: "Gowans, James" To: "jgg@ziepe.ca" CC: "quic_eberman@quicinc.com" , "kvm@vger.kernel.org" , "rppt@kernel.org" , "brauner@kernel.org" , "anthony.yznaga@oracle.com" , "steven.sistare@oracle.com" , "akpm@linux-foundation.org" , "linux-kernel@vger.kernel.org" , "seanjc@google.com" , "Durrant, Paul" , "pbonzini@redhat.com" , "linux-mm@kvack.org" , "Woodhouse, David" , "Saenz Julienne, Nicolas" , "viro@zeniv.linux.org.uk" , "Graf (AWS), Alexander" , "jack@suse.cz" , "linux-fsdevel@vger.kernel.org" Thread-Index: AQHbKlc3IZ2PqNLJ5E+mkZOTFQYr3bKg/xKAgAAJ94CAAV52AA== Date: Fri, 1 Nov 2024 13:01:00 +0000 Message-ID: References: <20240805093245.889357-1-jgowans@amazon.com> <20240805093245.889357-6-jgowans@amazon.com> <20241029120232032-0700.eberman@hu-eberman-lv.qualcomm.com> <33a2fd519edc917d933517842cc077a19e865e3f.camel@amazon.com> <20241031160635.GA35848@ziepe.ca> In-Reply-To: <20241031160635.GA35848@ziepe.ca> Accept-Language: en-ZA, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.213.21] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 6C53010002C X-Stat-Signature: 5gmxzm4sfgwcyrrig5efa977kh7g15y4 X-HE-Tag: 1730466012-394780 X-HE-Meta: U2FsdGVkX19nGrkBeV8Yd2F1n9WoyItvbdrt4CZbavDQNjcGsRWwVkMj5mpQrTO6v9WbWwxyahBvJlgcvO6wv0PgXOJ3ov13enGvT5U45Car1QHlxxSUJZfQbwUeevXHk5mx6nNOskzBgnnHVOwWuq6KIkKR6A0IG2F4PhxTuP7fWdVDw1I9iUbHfdjYqWxMGm/03TLO4MMkRVO9cp/MJQA+Eu2Ha/YKM6n/8CskKvjBzv7ubeH4aGrFliuDClBBDN09++dSHAr3Y/ZFk50qjwPXtzt2Ao9qz3KWu1vobkX5SygHbBWOQwObdYj7cq0JDi0tTpcrV+V+QFJMPHHNlD8TqvtByy5lEA8q/MRBd6nExrs+7VwrsrUO73d3GWkNaLKAJY+iq/DmSDtuRuyaJGBEb+Sp/niUHtL7PnXIIiqDKhRndtdcPg7X4NaqTVNZi3uO4bavav6+vU1I+LPqECr9WliFU9qEpQrdia3FP/qkxs5Sfw7051ZOuojs1G0DtHDemo40ykefa8S/7JKRa31lKKoandhNaXszQ8xRF86SaF3XK+ghnohCzoh+XxKHlLg9AvtE1fjZu/xWo+4QfF3k44MpcBZu51d9BjAgf7/QIGS5sJp4oVzvq4tvGySy2XiXV0dwaqc7YphvMBKSX5YtFqAJ6b8KcXt7qeDOvfG4owSr26dI+9ao+CvjmXckhIhzuAT3yZ3yH57IOcNMzTL80ra5PGMRG+pPrUn3rHg6KwA+3NCij3/dGIs8/XhZGMCh/UyB13riS70ah4WdM/qL5G/QFu6m2MoSm3AZcvSJ/fyYjtB/G7OmDSTJ0E7Qf3aB7X8jVEaaTUAadFZKdoR+x4rgjmiBYlDOtmhrtNY6H4dB/OljmiYwGs9g0LOizBv+Ihtub/WRjBHnrq2Jv3zs0P7uXZot0eBVfXnvMF+sSMI8P/YFXeKh5CW11I40fE79zJG/FQrhUVhWtKq gjxDUrKj G3M+p1x0IvTLlgRWjSe1ORLlutjtm5C9lJquf5CQuDnMZQIW00sOwgSq+JnRm3U4opdn9Qabqm2LMHCPqGVqb9zh/Z8PKY2/5JuH66xhry18r4XqM8g/dW9ZF6Kz7Ak8tu9HWrZoJIHA4dmUr68qrWJYZa3lscr3hfJjjanlxl4MedPu+2ZLYnEzP6HpljivN2lkXfXjGm5zy8VgoVGlqY/KVq/Om3EtGXKVLYtwecJUM2kTH2RXRzYsgMODq/zrJgXMhJIgxiU9piDGRbOWOeQT9qIvro0yyq5qVnCfmaORomL6GB+fktIJiL1N34cwcy0Ajpb0x8nCBTLi0SaNN6vqaq167IltZX81A2pWc80tzRgvWW9D5yXCxHO3RjeT8xx/Kzm5cDg0RcWuB1SRPHBUfIaXkkQBEjonMFpkuNSgQvgbgLQ6heaK5I8gfeZvrkyWeaz5G3Nji1sxgznEXgHGevEpYoibM0hPQTY7ChbUiRtmJhK1FVi3NWufINI+GV9qg7hUd6vTyEUN6MuQEfpU8PZTtYBJJl2mTYXCZhLMV0X0gbtKSgcHbrKTO54Jw78JMVB0JULZEJevd8mx4duXypjj8Ofrjj3Z1z3WXlq+BcQS6N646eS2Mz3f7EG1Sen9lOxrRqINgmRu35iZvgXmdWIZhx6vLaSMH3qvPOnsmyLB9vlIQYzPUdeW8rweS2A8zCGcBO4PMwt8jNhsrQTNMbvho9X5cxwuX7TpjIHXakedTtpZ3qUN8ks6zDl3wR/8j6S0veXmwFwobQJn/83supscFC5QIkeFb4V10DUb0usPdIvQOMzMbt69GKLkkqwa+ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: T24gVGh1LCAyMDI0LTEwLTMxIGF0IDEzOjA2IC0wMzAwLCBKYXNvbiBHdW50aG9ycGUgd3JvdGU6 DQo+IE9uIFRodSwgT2N0IDMxLCAyMDI0IGF0IDAzOjMwOjU5UE0gKzAwMDAsIEdvd2FucywgSmFt ZXMgd3JvdGU6DQo+ID4gT24gVHVlLCAyMDI0LTEwLTI5IGF0IDE2OjA1IC0wNzAwLCBFbGxpb3Qg QmVybWFuIHdyb3RlOg0KPiA+ID4gT24gTW9uLCBBdWcgMDUsIDIwMjQgYXQgMTE6MzI6NDBBTSAr MDIwMCwgSmFtZXMgR293YW5zIHdyb3RlOg0KPiA+ID4gPiBNYWtlIHRoZSBmaWxlIGRhdGEgdXNh YmxlIHRvIHVzZXJzcGFjZSBieSBhZGRpbmcgbW1hcC4gVGhhdCdzIGFsbCB0aGF0DQo+ID4gPiA+ IFFFTVUgbmVlZHMgZm9yIGd1ZXN0IFJBTSwgc28gdGhhdCdzIGFsbCBiZSBib3RoZXIgaW1wbGVt ZW50aW5nIGZvciBub3cuDQo+ID4gPiA+IA0KPiA+ID4gPiBXaGVuIG1tYXBpbmcgdGhlIGZpbGUg dGhlIFZNQSBpcyBtYXJrZWQgYXMgUEZOTUFQIHRvIGluZGljYXRlIHRoYXQgdGhlcmUNCj4gPiA+ ID4gYXJlIG5vIHN0cnVjdCBwYWdlcyBmb3IgdGhlIG1lbW9yeSBpbiB0aGlzIFZNQS4gUmVtYXBf cGZuX3JhbmdlKCkgaXMNCj4gPiA+ID4gdXNlZCB0byBhY3R1YWxseSBwb3B1bGF0ZSB0aGUgcGFn ZSB0YWJsZXMuIEFsbCBQVEVzIGFyZSBwcmUtZmF1bHRlZCBpbnRvDQo+ID4gPiA+IHRoZSBwZ3Rh YmxlcyBhdCBtbWFwIHRpbWUgc28gdGhhdCB0aGUgcGd0YWJsZXMgYXJlIHVzYWJsZSB3aGVuIHRo aXMNCj4gPiA+ID4gdmlydHVhbCBhZGRyZXNzIHJhbmdlIGlzIGdpdmVuIHRvIFZGSU8ncyBNQVBf RE1BLg0KPiA+ID4gDQo+ID4gPiBUaGFua3MgZm9yIHNlbmRpbmcgdGhpcyBvdXQhIEknbSBnb2lu ZyB0aHJvdWdoIHRoZSBzZXJpZXMgd2l0aCB0aGUNCj4gPiA+IGludGVudGlvbiB0byBzZWUgaG93 IGl0IG1pZ2h0IGZpdCB3aXRoaW4gdGhlIGV4aXN0aW5nIGd1ZXN0X21lbWZkIHdvcmsNCj4gPiA+ IGZvciBwS1ZNL0NvQ28vR3VueWFoLg0KPiA+ID4gDQo+ID4gPiBJdCBtaWdodCd2ZSBiZWVuIG1l bnRpb25lZCBpbiB0aGUgTU0gYWxpZ25tZW50IHNlc3Npb24gLS0geW91IG1pZ2h0IGJlDQo+ID4g PiBpbnRlcmVzdGVkIHRvIGpvaW4gdGhlIGd1ZXN0X21lbWZkIGJpLXdlZWtseSBjYWxsIHRvIHNl ZSBob3cgd2UgYXJlDQo+ID4gPiBvdmVybGFwcGluZyBbMV0uDQo+ID4gPiANCj4gPiA+IFsxXTog aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcva3ZtL2FlNzk0ODkxLWZlNjktNDExYS1iODJlLTY5NjNi NTk0YTYyYUByZWRoYXQuY29tL1QvDQo+ID4gDQo+ID4gSGkgRWxsaW90LCB5ZXMsIEkgdGhpbmsg dGhhdCB0aGVyZSBpcyBhIGxvdCBtb3JlIG92ZXJsYXAgd2l0aA0KPiA+IGd1ZXN0X21lbWZkIG5l Y2Vzc2FyeSBoZXJlLiBUaGUgaWRlYSB3YXMgdG8gZXh0ZW5kIGd1ZXN0bWVtZnMgYXQgc29tZQ0K PiA+IHBvaW50IHRvIGhhdmUgYSBndWVzdF9tZW1mZCBzdHlsZSBpbnRlcmZhY2UsIGJ1dCBpdCB3 YXMgcG9pbnRlZCBvdXQgYXQNCj4gPiB0aGUgTU0gYWxpZ25tZW50IGNhbGwgdGhhdCBkb2luZyBz byB3b3VsZCByZXF1aXJlIGd1ZXN0bWVtZnMgdG8NCj4gPiBkdXBsaWNhdGUgdGhlIEFQSSBzdXJm YWNlIG9mIGd1ZXN0X21lbWZkLiBUaGlzIGlzIHVuZGVzaXJhYmxlLiBCZXR0ZXINCj4gPiB3b3Vs ZCBiZSB0byBoYXZlIHBlcnNpc3RlbmNlIGltcGxlbWVudGVkIGFzIGEgY3VzdG9tIGFsbG9jYXRv ciBiZWhpbmQgYQ0KPiA+IG5vcm1hbCBndWVzdF9tZW1mZC4gSSdtIG5vdCB0b28gc3VyZSBob3cg dGhpcyB3b3VsZCBiZSBhY3R1YWxseSBkb25lIGluDQo+ID4gcHJhY3RpY2UsIHNwZWNpZmljYWxs eToNCj4gPiAtIGhvdyB0aGUgcGVyc2lzdGVudCBwb29sIHdvdWxkIGJlIGRlZmluZWQNCj4gPiAt IGhvdyBpdCB3b3VsZCBiZSBzdXBwbGllZCB0byBndWVzdF9tZW1mZA0KPiA+IC0gaG93IHRoZSBn dWVzdF9tZW1mZHMgd291bGQgYmUgcmUtZGlzY292ZXJlZCBhZnRlciBrZXhlYw0KPiA+IEJ1dCBh c3N1bWluZyB3ZSBjYW4gZmlndXJlIG91dCBzb21lIHdheSB0byBkbyB0aGlzLCBJIHRoaW5rIGl0 J3MgYQ0KPiA+IGJldHRlciB3YXkgdG8gZ28uDQo+IA0KPiBJIHRoaW5rIHRoZSBmaWxlc3lzdGVt IGludGVyZmFjZSBzZWVtZWQgcmVhc29uYWJsZSwgeW91IGp1c3Qgd2FudA0KPiBvcGVuKCkgb24g dGhlIGZpbGVzeXN0ZW0gdG8gcmV0dXJuIGJhY2sgYSBub3JtYWwgZ3Vlc3RfbWVtZmQgYW5kDQo+ IHJlLXVzZSBhbGwgb2YgdGhhdCBjb2RlIHRvIGltcGxlbWVudCBpdC4NCj4gDQo+IFdoZW4gb3Bl bmVkIHRocm91Z2ggdGhlIGZpbGVzeXN0ZW0gZ3Vlc3RfbWVtZmQgd291bGQgZ2V0IGhvb2tlZCBi eSB0aGUNCj4gS0hPIHN0dWZmIHRvIG1hbmFnZSBpdHMgbWVtb3J5LCBzb21laG93Lg0KPiANCj4g UmVhbGx5IEtITyBqdXN0IG5lZWRzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFkZHJlc2VzcyBpbiB0 aGUNCj4gZ3Vlc3RfbWVtZmQgd2hlbiBpdCBzZXJpYWxpemVzLCByaWdodD8gU28gbWF5YmUgYWxs IGl0IG5lZWRzIGlzIGEgd2F5DQo+IHRvIGZyZWV6ZSB0aGUgZ3Vlc3RfbWVtZmQgc28gaXQncyBt ZW1vcnkgbWFwIGRvZXNuJ3QgY2hhbmdlIGFueW1vcmUsDQo+IHRoZW4gYSB3YXkgdG8gZXh0cmFj dCB0aGUgYWRkcmVzc2VzIGZyb20gaXQgZm9yIHNlcmlhbGl6YXRpb24/DQoNClRoYW5rcyBKYXNv biwgdGhhdCBzb3VuZHMgcGVyZmVjdC4gSSdsbCB3b3JrIG9uIHRoZSBuZXh0IHJldiB3aGljaCB3 aWxsOg0KLSBleHBvc2UgYSBmaWxlc3lzdGVtIHdoaWNoIG93bnMgcmVzZXJ2ZWQvcGVyc2lzdGVu dCBtZW1vcnksIGp1c3QgbGlrZQ0KdGhpcyBwYXRjaC4NCi0gcmViYXNlZCBvbiB0b3Agb2YgdGhl IHBhdGNoZXMgd2hpY2ggcHVsbCBvdXQgdGhlIGd1ZXN0X21lbWZkIGNvZGUgaW50bw0KYSBsaWJy YXJ5DQotIHJlYmFzZWQgb24gdG9wIG9mIHRoZSBndWVzdF9tZW1mZCBwYXRjaGVzIHdoaWNoIHN1 cHBvcnRzIGFkZGluZyBhDQpkaWZmZXJlbnQgYmFja2luZyBhbGxvY2F0b3IgKGh1Z2V0bGJmcykg dG8gZ3Vlc3RfbWVtZmQNCi0gd2hlbiBhIGZpbGUgaW4gZ3Vlc3RtZW1mcyBpcyBvcGVuZWQsIGNy ZWF0ZSBhIGd1ZXN0X21lbWZkIG9iamVjdCBmcm9tDQp0aGUgZ3Vlc3RfbWVtZmQgbGlicmFyeSBj b2RlIGFuZCBzZXQgZ3Vlc3RtZW1mcyBhcyB0aGUgY3VzdG9tIGFsbG9jYXRvcg0KZm9yIHRoZSBm aWxlLg0KLSBzZXJpYWxpc2UgYW5kIHJlLWh5ZHJhdGUgdGhlIGd1ZXN0X21lbWZkcyB3aGljaCBo YXZlIGJlZW4gY3JlYXRlZCBpbg0KZ3Vlc3RtZW1mcyBvbiBrZXhlYyB2aWEgS0hPLg0KDQpUaGUg bWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgb3BlbmluZyBhIGd1ZXN0bWVtZnMgZmlsZSB3b24ndCBn aXZlIGENCnJlZ3VsYXIgZmlsZSwgcmF0aGVyIGl0IHdpbGwgZ2l2ZSBhIGd1ZXN0X21lbWZkIGxp YnJhcnkgb2JqZWN0LiBUaGlzDQp3aWxsIGdpdmUgZ29vZCBjb2RlIHJlLXVzZWQgd2l0aCBndWVz dF9tZW1mZCBsaWJyYXJ5IGFuZCBwcmV2ZW50IG5lZWRpbmcNCnRvIHJlLWltcGxlbWVudCB0aGUg Z3Vlc3RfbWVtZmQgQVBJIHN1cmZhY2UgaGVyZS4NCg0KU291bmRzIGxpa2UgYSBncmVhdCBwYXRo IGZvcndhcmQuIDotKQ0KDQpKRw0KDQo+IA0KPiBKYXNvbg0KDQo=