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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1D231C43331 for ; Wed, 1 Apr 2020 07:49:35 +0000 (UTC) Received: from fraxinus.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 mail.kernel.org (Postfix) with ESMTPS id EAE2E20714 for ; Wed, 1 Apr 2020 07:49:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EAE2E20714 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 993F285B7C; Wed, 1 Apr 2020 07:49:34 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qKP_9kqcCOw1; Wed, 1 Apr 2020 07:49:32 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by fraxinus.osuosl.org (Postfix) with ESMTP id 5B05B85B73; Wed, 1 Apr 2020 07:49:32 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 48F0EC1D7F; Wed, 1 Apr 2020 07:49:32 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 486ABC089F for ; Wed, 1 Apr 2020 07:49:30 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 43480869CA for ; Wed, 1 Apr 2020 07:49:30 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TjVBp+gOAoKP for ; Wed, 1 Apr 2020 07:49:28 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by whitealder.osuosl.org (Postfix) with ESMTPS id D3229869B4 for ; Wed, 1 Apr 2020 07:49:28 +0000 (UTC) IronPort-SDR: VWqP6yPh017Fl/qLw50ljce/MS8gx+2gUcCVPD+bMaV8Z64qJUbCSWnzhywmkE2KXXo1zWPmuK NV7vgt7TWHMA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2020 00:49:28 -0700 IronPort-SDR: viX/72eZgR5TBuE+nmmuBHasyx1Gr5SSmgnAn9iq5110nLD/kkh4G/zh0p2zAcAmIIJyATsGEu +PsI3Y15y5uw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,330,1580803200"; d="scan'208";a="242153929" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga008.fm.intel.com with ESMTP; 01 Apr 2020 00:49:28 -0700 Received: from fmsmsx123.amr.corp.intel.com (10.18.125.38) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 1 Apr 2020 00:49:28 -0700 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by fmsmsx123.amr.corp.intel.com (10.18.125.38) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 1 Apr 2020 00:49:28 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.225]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.191]) with mapi id 14.03.0439.000; Wed, 1 Apr 2020 15:49:24 +0800 From: "Liu, Yi L" To: "Tian, Kevin" , "alex.williamson@redhat.com" , "eric.auger@redhat.com" Subject: RE: [PATCH v1 7/8] vfio/type1: Add VFIO_IOMMU_CACHE_INVALIDATE Thread-Topic: [PATCH v1 7/8] vfio/type1: Add VFIO_IOMMU_CACHE_INVALIDATE Thread-Index: AQHWAEUdcc1u01skwUmp6uBHREsZ66hgnxWAgANUS+A= Date: Wed, 1 Apr 2020 07:49:24 +0000 Message-ID: References: <1584880325-10561-1-git-send-email-yi.l.liu@intel.com> <1584880325-10561-8-git-send-email-yi.l.liu@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Cc: "jean-philippe@linaro.org" , "Raj, Ashok" , "kvm@vger.kernel.org" , "Tian, Jun J" , "iommu@lists.linux-foundation.org" , "linux-kernel@vger.kernel.org" , "Sun, Yi Y" , "Wu, Hao" X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" PiBGcm9tOiBUaWFuLCBLZXZpbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+DQo+IFNlbnQ6IE1vbmRh eSwgTWFyY2ggMzAsIDIwMjAgODo1OCBQTQ0KPiBUbzogTGl1LCBZaSBMIDx5aS5sLmxpdUBpbnRl bC5jb20+OyBhbGV4LndpbGxpYW1zb25AcmVkaGF0LmNvbTsNCj4gU3ViamVjdDogUkU6IFtQQVRD SCB2MSA3LzhdIHZmaW8vdHlwZTE6IEFkZCBWRklPX0lPTU1VX0NBQ0hFX0lOVkFMSURBVEUNCj4g DQo+ID4gRnJvbTogTGl1LCBZaSBMIDx5aS5sLmxpdUBpbnRlbC5jb20+DQo+ID4gU2VudDogU3Vu ZGF5LCBNYXJjaCAyMiwgMjAyMCA4OjMyIFBNDQo+ID4NCj4gPiBGcm9tOiBMaXUgWWkgTCA8eWku bC5saXVAbGludXguaW50ZWwuY29tPg0KPiA+DQo+ID4gRm9yIFZGSU8gSU9NTVVzIHdpdGggdGhl IHR5cGUgVkZJT19UWVBFMV9ORVNUSU5HX0lPTU1VLCBndWVzdCAib3ducyINCj4gPiB0aGUNCj4g PiBmaXJzdC1sZXZlbC9zdGFnZS0xIHRyYW5zbGF0aW9uIHN0cnVjdHVyZXMsIHRoZSBob3N0IElP TU1VIGRyaXZlciBoYXMNCj4gPiBubyBrbm93bGVkZ2Ugb2YgZmlyc3QtbGV2ZWwvc3RhZ2UtMSBz dHJ1Y3R1cmUgY2FjaGUgdXBkYXRlcyB1bmxlc3MgdGhlDQo+ID4gZ3Vlc3QgaW52YWxpZGF0aW9u IHJlcXVlc3RzIGFyZSB0cmFwcGVkIGFuZCBwcm9wYWdhdGVkIHRvIHRoZSBob3N0Lg0KPiA+DQo+ ID4gVGhpcyBwYXRjaCBhZGRzIGEgbmV3IElPQ1RMIFZGSU9fSU9NTVVfQ0FDSEVfSU5WQUxJREFU RSB0byBwcm9wYWdhdGUNCj4gPiBndWVzdA0KPiA+IGZpcnN0LWxldmVsL3N0YWdlLTEgSU9NTVUg Y2FjaGUgaW52YWxpZGF0aW9ucyB0byBob3N0IHRvIGVuc3VyZSBJT01NVQ0KPiA+IGNhY2hlIGNv cnJlY3RuZXNzLg0KPiA+DQo+ID4gV2l0aCB0aGlzIHBhdGNoLCB2U1ZBIChWaXJ0dWFsIFNoYXJl ZCBWaXJ0dWFsIEFkZHJlc3NpbmcpIGNhbiBiZSB1c2VkDQo+ID4gc2FmZWx5IGFzIHRoZSBob3N0 IElPTU1VIGlvdGxiIGNvcnJlY3RuZXNzIGFyZSBlbnN1cmVkLg0KPiA+DQo+ID4gQ2M6IEtldmlu IFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPg0KPiA+IENDOiBKYWNvYiBQYW4gPGphY29iLmp1 bi5wYW5AbGludXguaW50ZWwuY29tPg0KPiA+IENjOiBBbGV4IFdpbGxpYW1zb24gPGFsZXgud2ls bGlhbXNvbkByZWRoYXQuY29tPg0KPiA+IENjOiBFcmljIEF1Z2VyIDxlcmljLmF1Z2VyQHJlZGhh dC5jb20+DQo+ID4gQ2M6IEplYW4tUGhpbGlwcGUgQnJ1Y2tlciA8amVhbi1waGlsaXBwZUBsaW5h cm8ub3JnPg0KPiA+IFNpZ25lZC1vZmYtYnk6IExpdSBZaSBMIDx5aS5sLmxpdUBsaW51eC5pbnRl bC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogRXJpYyBBdWdlciA8ZXJpYy5hdWdlckByZWRoYXQu Y29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEphY29iIFBhbiA8amFjb2IuanVuLnBhbkBsaW51eC5p bnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMg fCA0OQ0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4g IGluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggICAgICAgfCAyMiArKysrKysrKysrKysrKysrKysN Cj4gPiAgMiBmaWxlcyBjaGFuZ2VkLCA3MSBpbnNlcnRpb25zKCspDQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYw0KPiA+IGIvZHJpdmVycy92Zmlv L3ZmaW9faW9tbXVfdHlwZTEuYyBpbmRleCBhODc3NzQ3Li45MzdlYzNmIDEwMDY0NA0KPiA+IC0t LSBhL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMNCj4gPiArKysgYi9kcml2ZXJzL3Zm aW8vdmZpb19pb21tdV90eXBlMS5jDQo+ID4gQEAgLTI0MjMsNiArMjQyMywxNSBAQCBzdGF0aWMg bG9uZw0KPiA+IHZmaW9faW9tbXVfdHlwZTFfdW5iaW5kX2dwYXNpZChzdHJ1Y3QgdmZpb19pb21t dSAqaW9tbXUsDQo+ID4gIAlyZXR1cm4gcmV0Ow0KPiA+ICB9DQo+ID4NCj4gPiArc3RhdGljIGlu dCB2ZmlvX2NhY2hlX2ludl9mbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpDQo+IA0K PiB2ZmlvX2lvbW11X2NhY2hlX2ludl9mbg0KDQpnb3QgaXQuDQoNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGRvbWFpbl9jYXBzdWxlICpkYyA9IChzdHJ1Y3QgZG9tYWluX2NhcHN1bGUgKilkYXRhOw0K PiA+ICsJc3RydWN0IGlvbW11X2NhY2hlX2ludmFsaWRhdGVfaW5mbyAqY2FjaGVfaW52X2luZm8g PQ0KPiA+ICsJCShzdHJ1Y3QgaW9tbXVfY2FjaGVfaW52YWxpZGF0ZV9pbmZvICopIGRjLT5kYXRh Ow0KPiA+ICsNCj4gPiArCXJldHVybiBpb21tdV9jYWNoZV9pbnZhbGlkYXRlKGRjLT5kb21haW4s IGRldiwgY2FjaGVfaW52X2luZm8pOyB9DQo+ID4gKw0KPiA+ICBzdGF0aWMgbG9uZyB2ZmlvX2lv bW11X3R5cGUxX2lvY3RsKHZvaWQgKmlvbW11X2RhdGEsDQo+ID4gIAkJCQkgICB1bnNpZ25lZCBp bnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykgIHsgQEAgLQ0KPiAyNjI5LDYgKzI2MzgsNDYgQEAN Cj4gPiBzdGF0aWMgbG9uZyB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsKHZvaWQgKmlvbW11X2RhdGEs DQo+ID4gIAkJfQ0KPiA+ICAJCWtmcmVlKGdiaW5kX2RhdGEpOw0KPiA+ICAJCXJldHVybiByZXQ7 DQo+ID4gKwl9IGVsc2UgaWYgKGNtZCA9PSBWRklPX0lPTU1VX0NBQ0hFX0lOVkFMSURBVEUpIHsN Cj4gPiArCQlzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9jYWNoZV9pbnZhbGlkYXRlIGNhY2hlX2lu djsNCj4gPiArCQl1MzIgdmVyc2lvbjsNCj4gPiArCQlpbnQgaW5mb19zaXplOw0KPiA+ICsJCXZv aWQgKmNhY2hlX2luZm87DQo+ID4gKwkJaW50IHJldDsNCj4gPiArDQo+ID4gKwkJbWluc3ogPSBv ZmZzZXRvZmVuZChzdHJ1Y3QNCj4gPiB2ZmlvX2lvbW11X3R5cGUxX2NhY2hlX2ludmFsaWRhdGUs DQo+ID4gKwkJCQkgICAgZmxhZ3MpOw0KPiA+ICsNCj4gPiArCQlpZiAoY29weV9mcm9tX3VzZXIo JmNhY2hlX2ludiwgKHZvaWQgX191c2VyICopYXJnLCBtaW5zeikpDQo+ID4gKwkJCXJldHVybiAt RUZBVUxUOw0KPiA+ICsNCj4gPiArCQlpZiAoY2FjaGVfaW52LmFyZ3N6IDwgbWluc3ogfHwgY2Fj aGVfaW52LmZsYWdzKQ0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkJLyog R2V0IHRoZSB2ZXJzaW9uIG9mIHN0cnVjdCBpb21tdV9jYWNoZV9pbnZhbGlkYXRlX2luZm8gKi8N Cj4gPiArCQlpZiAoY29weV9mcm9tX3VzZXIoJnZlcnNpb24sDQo+ID4gKwkJCSh2b2lkIF9fdXNl ciAqKSAoYXJnICsgbWluc3opLCBzaXplb2YodmVyc2lvbikpKQ0KPiA+ICsJCQlyZXR1cm4gLUVG QVVMVDsNCj4gPiArDQo+ID4gKwkJaW5mb19zaXplID0gaW9tbXVfdWFwaV9nZXRfZGF0YV9zaXpl KA0KPiA+ICsJCQkJCUlPTU1VX1VBUElfQ0FDSEVfSU5WQUwsDQo+ID4gdmVyc2lvbik7DQo+ID4g Kw0KPiA+ICsJCWNhY2hlX2luZm8gPSBremFsbG9jKGluZm9fc2l6ZSwgR0ZQX0tFUk5FTCk7DQo+ ID4gKwkJaWYgKCFjYWNoZV9pbmZvKQ0KPiA+ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ ID4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKGNhY2hlX2luZm8sDQo+ID4gKwkJCSh2b2lkIF9fdXNl ciAqKSAoYXJnICsgbWluc3opLCBpbmZvX3NpemUpKSB7DQo+ID4gKwkJCWtmcmVlKGNhY2hlX2lu Zm8pOw0KPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCW11 dGV4X2xvY2soJmlvbW11LT5sb2NrKTsNCj4gPiArCQlyZXQgPSB2ZmlvX2lvbW11X2Zvcl9lYWNo X2Rldihpb21tdSwgdmZpb19jYWNoZV9pbnZfZm4sDQo+ID4gKwkJCQkJICAgIGNhY2hlX2luZm8p Ow0KPiA+ICsJCW11dGV4X3VubG9jaygmaW9tbXUtPmxvY2spOw0KPiA+ICsJCWtmcmVlKGNhY2hl X2luZm8pOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gIAl9DQo+ID4NCj4gPiAgCXJldHVybiAt RU5PVFRZOw0KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5j bHVkZS91YXBpL2xpbnV4L3ZmaW8uaA0KPiA+IGluZGV4IDIyMzViYzYuLjYyY2E3OTEgMTAwNjQ0 DQo+ID4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaA0KPiA+ICsrKyBiL2luY2x1ZGUv dWFwaS9saW51eC92ZmlvLmgNCj4gPiBAQCAtODk5LDYgKzg5OSwyOCBAQCBzdHJ1Y3QgdmZpb19p b21tdV90eXBlMV9iaW5kIHsNCj4gPiAgICovDQo+ID4gICNkZWZpbmUgVkZJT19JT01NVV9CSU5E CQlfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAyMykNCj4gPg0KPiA+ICsvKioNCj4gPiArICog VkZJT19JT01NVV9DQUNIRV9JTlZBTElEQVRFIC0gX0lPVyhWRklPX1RZUEUsIFZGSU9fQkFTRSAr IDI0LA0KPiA+ICsgKgkJCXN0cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2NhY2hlX2ludmFsaWRhdGUp DQo+ID4gKyAqDQo+ID4gKyAqIFByb3BhZ2F0ZSBndWVzdCBJT01NVSBjYWNoZSBpbnZhbGlkYXRp b24gdG8gdGhlIGhvc3QuIFRoZSBjYWNoZQ0KPiA+ICsgKiBpbnZhbGlkYXRpb24gaW5mb3JtYXRp b24gaXMgY29udmV5ZWQgYnkgQGNhY2hlX2luZm8sIHRoZSBjb250ZW50DQo+ID4gKyAqIGZvcm1h dCB3b3VsZCBiZSBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gdWFwaS9saW51eC9pb21tdS5oLiBVc2Vy DQo+ID4gKyAqIHNob3VsZCBiZSBhd2FyZSBvZiB0aGF0IHRoZSBzdHJ1Y3QgIGlvbW11X2NhY2hl X2ludmFsaWRhdGVfaW5mbw0KPiA+ICsgKiBoYXMgYSBAdmVyc2lvbiBmaWVsZCwgdmZpbyBuZWVk cyB0byBwYXJzZSB0aGlzIGZpZWxkIGJlZm9yZQ0KPiA+ICtnZXR0aW5nDQo+ID4gKyAqIGRhdGEg ZnJvbSB1c2Vyc3BhY2UuDQo+ID4gKyAqDQo+ID4gKyAqIEF2YWlsYWJpbGl0eSBvZiB0aGlzIElP Q1RMIGlzIGFmdGVyIFZGSU9fU0VUX0lPTU1VLg0KPiA+ICsgKg0KPiA+ICsgKiByZXR1cm5zOiAw IG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHZm aW9faW9tbXVfdHlwZTFfY2FjaGVfaW52YWxpZGF0ZSB7DQo+ID4gKwlfX3UzMiAgIGFyZ3N6Ow0K PiA+ICsJX191MzIgICBmbGFnczsNCj4gPiArCXN0cnVjdAlpb21tdV9jYWNoZV9pbnZhbGlkYXRl X2luZm8gY2FjaGVfaW5mbzsNCj4gPiArfTsNCj4gPiArI2RlZmluZSBWRklPX0lPTU1VX0NBQ0hF X0lOVkFMSURBVEUgICAgICBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKw0KPiA+IDI0KQ0KPiA+ ICsNCj4gPiAgLyogLS0tLS0tLS0gQWRkaXRpb25hbCBBUEkgZm9yIFNQQVBSIFRDRSAoU2VydmVy IFBPV0VSUEMpIElPTU1VDQo+ID4gLS0tLS0tLS0gKi8NCj4gPg0KPiA+ICAvKg0KPiA+IC0tDQo+ ID4gMi43LjQNCj4gDQo+IFRoaXMgcGF0Y2ggbG9va3MgZ29vZCB0byBtZSBpbiBnZW5lcmFsLiBC dXQgc2luY2UgdGhlcmUgaXMgc3RpbGwgYSBtYWpvciBvcGVuIGFib3V0DQo+IHZlcnNpb24gY29t cGF0aWJpbGl0eSwgSSdsbCBob2xkIG15IHItYiB1bnRpbCB0aGF0IG9wZW4gaXMgY2xvc2VkLiDw n5iKDQo+IA0KDQp0aGFua3MsDQoNClJlZ2FyZHMsDQpZaSBMaXUNCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlvbW11IG1haWxpbmcgbGlzdAppb21tdUBs aXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5v cmcvbWFpbG1hbi9saXN0aW5mby9pb21tdQ==