From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00088.outbound.protection.outlook.com [40.107.0.88]) by dpdk.org (Postfix) with ESMTP id 9352B2D13 for ; Thu, 15 Nov 2018 01:49:04 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kFqjmKZbz5KhvglcaVGPV1V7zdx8X6TQ469H/enrsIc=; b=fO3l5b+L/joNMy0SdRNatjoT1ty1tB9S5AWx+gPtRuI9PWmudfqt9LzVmGllCHgLs0w0RGNt6CzT//AGs/dk5PdMVZ1bnALG2SuUc9buRJ8e6Sddb9F8v7zPm5ZWkMrIv8Hy/cO1KxzFJJAghciIP2hDeQY+jF5APyXGwuUDhHk= Received: from AM0PR08MB3409.eurprd08.prod.outlook.com (20.177.109.139) by AM0PR08MB3140.eurprd08.prod.outlook.com (52.134.93.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.45; Thu, 15 Nov 2018 00:49:03 +0000 Received: from AM0PR08MB3409.eurprd08.prod.outlook.com ([fe80::2927:5a10:ee9d:6f3b]) by AM0PR08MB3409.eurprd08.prod.outlook.com ([fe80::2927:5a10:ee9d:6f3b%3]) with mapi id 15.20.1339.021; Thu, 15 Nov 2018 00:49:03 +0000 From: "Tone Zhang (Arm Technology China)" To: "Burakov, Anatoly" , "dev@dpdk.org" CC: "Gavin Hu (Arm Technology China)" , Honnappa Nagarahalli , Steve Capper , nd Thread-Topic: [PATCH v2] pci_vfio: Support 64KB kernel page_size with vfio-pci driver Thread-Index: AQHUeCXaYw29mHEoBkeQvc6IBXfx6aVQB2rQ Date: Thu, 15 Nov 2018 00:49:03 +0000 Message-ID: References: <1540347604-18590-1-git-send-email-tone.zhang@arm.com> <1541743077-27994-1-git-send-email-tone.zhang@arm.com> <68c31d94-3e4d-7b03-209b-1e63c564aa74@intel.com> In-Reply-To: <68c31d94-3e4d-7b03-209b-1e63c564aa74@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Tone.Zhang@arm.com; x-originating-ip: [113.29.88.7] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM0PR08MB3140; 6:wNaBMwsz8rqGETBdvXbVBk9D+bE8PUEyZFTV5ua6gMgH4LtXXpMhArLUPn94ZeRT62c14tvIsq/VkgZst+mUtMlPEtce6XBJrX2q0InRcsS+pTabIWCeMfStKJMFNQz9n/FqSHKEC6jVMznYtU9CxFh3oslo7JfieoYzuKN38qyNVTZF4L9FmVM/InkbcxDkf80GmvrOltsU49iRuwChH53jw0oKm919DWpRnbCxFit6wcxDyPOz6t75CPkIXY6cOSLtS9+0U4ZJvEAVQFWqrU8QTBGIcvwbLsQmgQsLHS+oKfqO09GoP/7cKAP6IuSCXqjeQJ45S9goFeIniyh+W5rb2T/cCbF0EPXOm91YH23ejFsRWMWHD7abC/leoPQ5c1hopAwLH+CgOhRYpkiWho5t2apI/KrAdr8m6bk7HsO/38K86IWipCn4uDulD+DF+Bf7jpgGsUjb3DqLElBECg==; 5:oVSRqzvieomCJuS4nqXknmsUvhnrQSBGBbBrUAfIx3fQItzxhyryJAenNtTjJylmAHIXJd2aoN0SZ1y4j4IZLY/d/eqKHwmyLUeGmyl73j6w0U5jgodYm2PNku6a64lNjSKAbLmCmcpOuIfq899PXOJbXFO1tOJ32nX9LOzyPIs=; 7:Uk49HdaNOpykXWKQ83qsstyX8LMQK9SeOkxybSnJdWXt7VWgrfq5D70K3oEY6MWSDlcVeH86GLycRjSTlK/w1YtZsFLSzZmoZ7wWgCv9qnfR0yLRm96L2B6q5DNrnXG/wqzsfqFnXgMeZ0faJxXFJw== x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-correlation-id: a7656ba9-5f7b-4241-5717-08d64a9423ce x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:AM0PR08MB3140; x-ms-traffictypediagnostic: AM0PR08MB3140: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(228905959029699)(180628864354917); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231415)(944501410)(52105112)(93006095)(93001095)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:AM0PR08MB3140; BCL:0; PCL:0; RULEID:; SRVR:AM0PR08MB3140; x-forefront-prvs: 08572BD77F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(376002)(396003)(136003)(366004)(189003)(199004)(13464003)(6246003)(25786009)(81156014)(8676002)(81166006)(5660300001)(4326008)(8936002)(2906002)(97736004)(106356001)(105586002)(66066001)(110136005)(54906003)(316002)(14454004)(3846002)(6116002)(9686003)(7736002)(2501003)(33656002)(7696005)(74316002)(53936002)(305945005)(6506007)(68736007)(186003)(86362001)(102836004)(72206003)(575784001)(6436002)(14444005)(256004)(476003)(99286004)(26005)(71200400001)(486006)(478600001)(71190400001)(55236004)(55016002)(2900100001)(11346002)(53546011)(76176011)(229853002)(446003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB3140; H:AM0PR08MB3409.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: oZY9yZNPVCk8MSzjUwWLC8kzQJZlxWBhdVxbFqrxwlAzHaqDY3mxyzhLYSJlJ9xGmdjU8X1GQhqs0cmTvQRpvZjCUa1ESZOO7gOkytzYHkwXMO5dHu6gDBXvwTFDYobWz32o6lsRhG+B4E4WOJEssXJ0GvKN/C8qPFm3AOQIDVL8Yp08WkXXxBI3FnIzChAtBkX1VVQ0O7t6rIbCC3B3kN9RA4anYDk9k1cHwLoTnppsnaiuJpY6ngGJYpR12lJ3sc9VSWKEhngLbUaFdSJnEovtS5n9PxYilT4v5Wc9xCGZqQLkaY0BSwJ0oTz2SINGQOhR1lh3tpY26MUrVNGvOhhIhiMXyzMCNevahEcr1YI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: a7656ba9-5f7b-4241-5717-08d64a9423ce X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Nov 2018 00:49:03.4750 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3140 Subject: Re: [dpdk-dev] [PATCH v2] pci_vfio: Support 64KB kernel page_size with vfio-pci driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Nov 2018 00:49:04 -0000 SGkgQW5hdG9seSwNCg0KU29ycnkgZm9yIHRoZSBsYXRlIHJlc3BvbnNlLg0KDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEJ1cmFrb3YsIEFuYXRvbHkgPGFuYXRvbHkuYnVy YWtvdkBpbnRlbC5jb20+DQo+IFNlbnQ6IEZyaWRheSwgTm92ZW1iZXIgOSwgMjAxOCA4OjE1IFBN DQo+IFRvOiBUb25lIFpoYW5nIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPFRvbmUuWmhhbmdAYXJt LmNvbT47DQo+IGRldkBkcGRrLm9yZw0KPiBDYzogR2F2aW4gSHUgKEFybSBUZWNobm9sb2d5IENo aW5hKSA8R2F2aW4uSHVAYXJtLmNvbT47IEhvbm5hcHBhDQo+IE5hZ2FyYWhhbGxpIDxIb25uYXBw YS5OYWdhcmFoYWxsaUBhcm0uY29tPjsgU3RldmUgQ2FwcGVyDQo+IDxTdGV2ZS5DYXBwZXJAYXJt LmNvbT47IG5kIDxuZEBhcm0uY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYyXSBwY2lfdmZp bzogU3VwcG9ydCA2NEtCIGtlcm5lbCBwYWdlX3NpemUgd2l0aCB2ZmlvLXBjaQ0KPiBkcml2ZXIN Cj4gDQo+IE9uIDA5LU5vdi0xOCA1OjU3IEFNLCB0b25lLnpoYW5nIHdyb3RlOg0KPiA+IFdpdGgg YSBsYXJnZXIgUEFHRV9TSVpFIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgTVNJIHRhYmxlIHRvIHZl cnkgY2xvc2UNCj4gPiB0byB0aGUgZW5kIG9mIHRoZSBCQVIgcy50LiB3aGVuIHdlIGFsaWduIHRo ZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBNU0kNCj4gPiB0YWJsZSB0byB0aGUgUEFHRV9TSVpFLCB0 aGUgZW5kIG9mZnNldCBvZiB0aGUgTVNJIHRhYmxlIGlzIG91dCBvZiB0aGUNCj4gPiBQQ0kgQkFS IGJvdW5kYXJ5Lg0KPiA+DQo+ID4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIGlzc3VlIGJ5IGNv bXBhcmluZyBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGVuZA0KPiA+IG9mZnNldCBvZiB0aGUgTVNJ IHRhYmxlIHdpdGggdGhlIEJBUiBzaXplLCBhbmQgc2tpcCB0aGUgbWFwcGluZyBpZiBpdA0KPiA+ IGlzIG91dCBvZiBCYXIgc2NvcGUuDQo+ID4NCj4gPiBUaGUgcGF0Y2ggZml4ZXMgdGhlIGRlYnVn IGxvZyBhcyBiZWxvdzoNCj4gPiBFQUw6IFNraXBwaW5nIEJBUjANCj4gPg0KPiA+IFNpZ25lZC1v ZmYtYnk6IHRvbmUuemhhbmcgPHRvbmUuemhhbmdAYXJtLmNvbT4NCj4gPiBSZXZpZXdlZC1ieTog R2F2aW4gSHUgPEdhdmluLkh1QGFybS5jb20+DQo+ID4gUmV2aWV3ZWQtYnk6IEhvbm5hcHBhIE5h Z2FyYWhhbGxpIDxob25uYXBwYS5uYWdhcmFoYWxsaUBhcm0uY29tPg0KPiA+IFJldmlld2VkLWJ5 OiBTdGV2ZSBDYXBwZXIgPFN0ZXZlLkNhcHBlckBhcm0uY29tPg0KPiA+IFJldmlld2VkLWJ5OiBC dXJha292IEFuYXRvbHkgPGFuYXRvbHkuYnVyYWtvdkBpbnRlbC5jb20+DQo+IA0KPiBJbiB0aGUg ZnV0dXJlLCBwbGVhc2UgZG9uJ3QgaW5jbHVkZSBteSBSZXZpZXdlZCB0YWcgdW5sZXNzIGkgYWN0 dWFsbHkgc2VudCBvbmUgOikNCg0KVGhhbmtzIGEgbG90ISBXaWxsIGtlZXAgaW4gbWluZC4g8J+Y ig0KDQo+IA0KPiA+IC0tLQ0KPiA+ICAgZHJpdmVycy9idXMvcGNpL2xpbnV4L3BjaV92ZmlvLmMg fCAzNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tDQo+IC0tDQo+ID4gICAxIGZp bGUgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9wY2kvbGludXgvcGNpX3ZmaW8uYw0KPiA+IGIvZHJpdmVy cy9idXMvcGNpL2xpbnV4L3BjaV92ZmlvLmMNCj4gPiBpbmRleCAzMDVjYzA2Li45YTBhZmZlIDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvYnVzL3BjaS9saW51eC9wY2lfdmZpby5jDQo+ID4gKysr IGIvZHJpdmVycy9idXMvcGNpL2xpbnV4L3BjaV92ZmlvLmMNCj4gPiBAQCAtNDQ1LDkgKzQ0NSwx MSBAQCBwY2lfdmZpb19tbWFwX2JhcihpbnQgdmZpb19kZXZfZmQsIHN0cnVjdA0KPiBtYXBwZWRf cGNpX3Jlc291cmNlICp2ZmlvX3JlcywNCj4gPiAgIAlzdHJ1Y3QgcGNpX21zaXhfdGFibGUgKm1z aXhfdGFibGUgPSAmdmZpb19yZXMtPm1zaXhfdGFibGU7DQo+ID4gICAJc3RydWN0IHBjaV9tYXAg KmJhciA9ICZ2ZmlvX3Jlcy0+bWFwc1tiYXJfaW5kZXhdOw0KPiA+DQo+ID4gLQlpZiAoYmFyLT5z aXplID09IDApDQo+ID4gKwlpZiAoYmFyLT5zaXplID09IDApIHsNCj4gPiAgIAkJLyogU2tpcCB0 aGlzIEJBUiAqLw0KPiA+ICsJCVJURV9MT0coSU5GTywgRUFMLCAiU2tpcHBpbmcgQkFSJWRcbiIs IGJhcl9pbmRleCk7DQo+ID4gICAJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+DQo+ID4gICAJaWYg KG1zaXhfdGFibGUtPmJhcl9pbmRleCA9PSBiYXJfaW5kZXgpIHsNCj4gPiAgIAkJLyoNCj4gPiBA QCAtNDU2LDggKzQ1OCwyMiBAQCBwY2lfdmZpb19tbWFwX2JhcihpbnQgdmZpb19kZXZfZmQsIHN0 cnVjdA0KPiBtYXBwZWRfcGNpX3Jlc291cmNlICp2ZmlvX3JlcywNCj4gPiAgIAkJICovDQo+ID4g ICAJCXVpbnQzMl90IHRhYmxlX3N0YXJ0ID0gbXNpeF90YWJsZS0+b2Zmc2V0Ow0KPiA+ICAgCQl1 aW50MzJfdCB0YWJsZV9lbmQgPSB0YWJsZV9zdGFydCArIG1zaXhfdGFibGUtPnNpemU7DQo+ID4g LQkJdGFibGVfZW5kID0gKHRhYmxlX2VuZCArIH5QQUdFX01BU0spICYgUEFHRV9NQVNLOw0KPiA+ IC0JCXRhYmxlX3N0YXJ0ICY9IFBBR0VfTUFTSzsNCj4gPiArCQl0YWJsZV9lbmQgPSBSVEVfQUxJ R04odGFibGVfZW5kLCBQQUdFX1NJWkUpOw0KPiA+ICsJCXRhYmxlX3N0YXJ0ID0gUlRFX0FMSUdO KHRhYmxlX3N0YXJ0LCBQQUdFX1NJWkUpOw0KPiA+ICsJCS8qIGFmdGVyIHJvdW5kaW5nIHRvIFBB R0VfU0laRSwgaXQgaXMgb3ZlciB0aGUgYmFyLT5zaXplLA0KPiA+ICsJCSAqIGZhbGwgYmFjayB0 byB0aGUgTVNJLVggdGFibGUgb2Zmc2V0IGluIHRoZSBiYXIgYW5kDQo+ID4gKwkJICogYWxpZ24g d2l0aCBQQUdFX1NJWkUuDQo+ID4gKwkJICovDQo+IA0KPiBNaW5vciBuaXRwaWNrIC0gd29yZGlu ZyBvZiBjb21tZW50IGNvdWxkIGJlIGJldHRlciwgZm9yIGV4YW1wbGU6DQo+IA0KPiBpZiBwYWdl LWFsaWduZWQgc3RhcnQgb2YgTVNJLVggdGFibGUgaXMgYmV5b25kIEJBUiBzaXplLCBzaHJpbmsg dGhlIG1hcHBpbmcgc2l6ZQ0KPiB0byBNU0ktWCB0YWJsZSBzdGFydCBhZGRyZXNzLg0KPiANCj4g QWxzbywgcHJvYmFibHkgbmVlZHMgbmV3bGluZSBiZWZvcmUgY29tbWVudC4NCj4NCg0KV2lsbCB1 cGRhdGUgdGhlIGNvZGUgaW4gbmV4dCB2ZXJzaW9uLiBUaGFua3MhDQoNCj4gPiArCQlpZiAodGFi bGVfc3RhcnQgPj0gYmFyLT5zaXplKSB7DQo+ID4gKwkJCXRhYmxlX3N0YXJ0ID0gUlRFX0FMSUdO X0ZMT09SKG1zaXhfdGFibGUtPm9mZnNldCwNCj4gPiArCQkJCQkJCVBBR0VfU0laRSk7DQo+ID4g KwkJCS8qIGFmdGVyIGFsaWduaW5nIHdpdGggUEFHRV9TSVpFLCBpZiBpdCBpcyBsZXNzIHRoYW4N Cj4gPiArCQkJICogdGhlIE1TSS1YIHRhYmxlIG9mZnNldCwgY29udGludWUgZmFsbGluZyBiYWNr IHRvDQo+ID4gKwkJCSAqIHRoZSBhY3R1YWwgTVNJLVggdGFibGUgb2Zmc2V0IGluIHRoZSBiYXIu DQo+ID4gKwkJCSAqLw0KPiANCj4gU2FtZSBoZXJlLCB3b3JkaW5nIGNvdWxkIHByb2JhYmx5IGJl IGltcHJvdmVkLiBTdWdnZXN0ZWQgcmV3b3JkaW5nOg0KPiANCj4gSWYgTVNJLVggdGFibGUgYWRk cmVzcywgZmxvb3ItYWxpZ25lZCBieSBwYWdlIHNpemUsIGlzIGxvd2VyIHRoYW4gYWN0dWFsIE1T SS1YDQo+IHRhYmxlIG9mZnNldCwgZmFsbCBiYWNrIHRvIHVzaW5nIE1TSS1YIHRhYmxlIG9mZnNl dCBhcyB0YWJsZSBzdGFydC4NCj4gDQo+IE5vdyB0aGF0IGkgdGhpbmsgb2YgaXQsIHRoaXMgY291 bGQgcmVhbGx5IGJlIGV4cHJlc3NlZCBsaWtlIHRoaXM6DQo+IA0KPiB1aW50MzJfdCBhbGlnbmVk ID0gUlRFX0FMSUdOX0ZMT09SKG1zaXhfdGFibGUtPm9mZnNldCwgUEFHRV9TSVpFKTsNCj4gdGFi bGVfc3RhcnQgPSBSVEVfTUFYKGFsaWduZWQsIG1zaXhfdGFibGVfb2Zmc2V0KTsNCj4gDQo+IEkg YmVsaWV2ZSB0aGlzIHdvdWxkIGJlIG11Y2ggY2xlYXJlci4NCj4NCg0KV2lsbCB1cGRhdGUgdGhl IHBhdGNoLg0KIA0KPiA+ICsJCQlpZiAodGFibGVfc3RhcnQgPCBtc2l4X3RhYmxlLT5vZmZzZXQp DQo+ID4gKwkJCQl0YWJsZV9zdGFydCA9IG1zaXhfdGFibGUtPm9mZnNldDsNCj4gPiArCQl9DQo+ ID4NCj4gPiAgIAkJaWYgKHRhYmxlX3N0YXJ0ID09IDAgJiYgdGFibGVfZW5kID49IGJhci0+c2l6 ZSkgew0KPiA+ICAgCQkJLyogQ2Fubm90IG1hcCB0aGlzIEJBUiAqLw0KPiA+IEBAIC00NjksOCAr NDg1LDE4IEBAIHBjaV92ZmlvX21tYXBfYmFyKGludCB2ZmlvX2Rldl9mZCwgc3RydWN0DQo+ID4g bWFwcGVkX3BjaV9yZXNvdXJjZSAqdmZpb19yZXMsDQo+ID4NCj4gPiAgIAkJbWVtcmVnWzBdLm9m ZnNldCA9IGJhci0+b2Zmc2V0Ow0KPiA+ICAgCQltZW1yZWdbMF0uc2l6ZSA9IHRhYmxlX3N0YXJ0 Ow0KPiA+IC0JCW1lbXJlZ1sxXS5vZmZzZXQgPSBiYXItPm9mZnNldCArIHRhYmxlX2VuZDsNCj4g PiAtCQltZW1yZWdbMV0uc2l6ZSA9IGJhci0+c2l6ZSAtIHRhYmxlX2VuZDsNCj4gPiArCQlpZiAo YmFyLT5zaXplIDwgdGFibGVfZW5kKSB7DQo+ID4gKwkJCS8qDQo+ID4gKwkJCSAqIGFmdGVyIHJv dW5kaW5nIHRvIFBBR0VfU0laRSB3ZSBkb24ndCBoYXZlIGFueSBzcGFjZQ0KPiA+ICsJCQkgKiBs ZWZ0IGFmdGVyIHRoZSBNU0kgdGFibGUsIHNvIGRvbid0IHRyeSBhbmQgbWFwIGl0Lg0KPiA+ICsJ CQkgKi8NCj4gDQo+IFN1Z2dlc3RlZCByZXdvcmRpbmc6DQo+IA0KPiBJZiBNU0ktWCB0YWJsZSBl bmQgaXMgYmV5b25kIEJBUiBlbmQsIGRvbid0IGF0dGVtcHQgdG8gcGVyZm9ybSBzZWNvbmQgbWFw cGluZy4NCj4gDQoNClRoYW5rcyBhIGxvdC4gV2lsbCB1cGRhdGUuDQoNCj4gPiArCQkJbWVtcmVn WzFdLm9mZnNldCA9IDA7DQo+ID4gKwkJCW1lbXJlZ1sxXS5zaXplID0gMDsNCj4gPiArCQl9DQo+ ID4gKwkJZWxzZSB7DQo+ID4gKwkJCW1lbXJlZ1sxXS5vZmZzZXQgPSBiYXItPm9mZnNldCArIHRh YmxlX2VuZDsNCj4gPiArCQkJbWVtcmVnWzFdLnNpemUgPSBiYXItPnNpemUgLSB0YWJsZV9lbmQ7 DQo+ID4gKwkJfQ0KPiA+DQo+ID4gICAJCVJURV9MT0coREVCVUcsIEVBTCwNCj4gPiAgIAkJCSJU cnlpbmcgdG8gbWFwIEJBUiVkIHRoYXQgY29udGFpbnMgdGhlIE1TSS1YICINCj4gPg0KPiANCj4g SG93ZXZlciwgdGhlIHBhdGNoIGNhbiBnbyBpbiBhcyBpcyBpZiBuZWVkZWQsIHNvDQo+IA0KPiBS ZXZpZXdlZC1ieTogQW5hdG9seSBCdXJha292IDxhbmF0b2x5LmJ1cmFrb3ZAaW50ZWwuY29tPg0K PiANCg0KVGhhbmtzISDwn5iJDQoNCj4gLS0NCj4gVGhhbmtzLA0KPiBBbmF0b2x5DQoNCkJyLA0K VG9uZQ0K