From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 010CD2AA0; Wed, 9 Jan 2019 04:32:49 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Jan 2019 19:32:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,455,1539673200"; d="scan'208";a="132882754" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga002.fm.intel.com with ESMTP; 08 Jan 2019 19:32:48 -0800 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 8 Jan 2019 19:32:48 -0800 Received: from shsmsx154.ccr.corp.intel.com (10.239.6.54) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 8 Jan 2019 19:32:48 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.63]) by SHSMSX154.ccr.corp.intel.com ([169.254.7.46]) with mapi id 14.03.0415.000; Wed, 9 Jan 2019 11:32:46 +0800 From: "Hu, Jiayu" To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "Ananyev, Konstantin" , Stephen Hemminger CC: "dev@dpdk.org" , "Bie, Tiwei" , "Richardson, Bruce" , "stable@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH] gro: add missing invalid packet checks Thread-Index: AQHUpxisSjPMmSc3QkGnTdYquJqwNaWkY1+AgACVKMD//6/tAIAAD0CAgAAkV4CAABKcgIABVfRg Date: Wed, 9 Jan 2019 03:32:45 +0000 Message-ID: References: <1546567036-29444-1-git-send-email-jiayu.hu@intel.com> <1546927725-68831-1-git-send-email-jiayu.hu@intel.com> <20190107223151.18b185b7@hermes.lan> <2601191342CEEE43887BDE71AB977258010D900817@irsmsx105.ger.corp.intel.com> <98CBD80474FA8B44BF855DF32C47DC35B425AD@smartserver.smartshare.dk> <2601191342CEEE43887BDE71AB977258010D900A85@irsmsx105.ger.corp.intel.com> <98CBD80474FA8B44BF855DF32C47DC35B425B0@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35B425B0@smartserver.smartshare.dk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOGVjODlmZDItZDM2ZC00ZTJiLTk1MGYtNjZmY2Y3OTU4NTIxIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiZjU4RCtKeWxjNzhLZVN3ZFByUkJmSko3bWdIWTZzakJqbzhvd29mRHBqNkVNYkplOWtEZFdPYVVcL3lPUmdZTFAifQ== x-ctpclassification: CTP_NT x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH] gro: add missing invalid packet checks X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Jan 2019 03:32:51 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTW9ydGVuIEJyw7hydXAg W21haWx0bzptYkBzbWFydHNoYXJlc3lzdGVtcy5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIEphbnVh cnkgOCwgMjAxOSAxMDo1MCBQTQ0KPiBUbzogQW5hbnlldiwgS29uc3RhbnRpbiA8a29uc3RhbnRp bi5hbmFueWV2QGludGVsLmNvbT47IEh1LCBKaWF5dQ0KPiA8amlheXUuaHVAaW50ZWwuY29tPjsg U3RlcGhlbiBIZW1taW5nZXINCj4gPHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnPg0KPiBDYzog ZGV2QGRwZGsub3JnOyBCaWUsIFRpd2VpIDx0aXdlaS5iaWVAaW50ZWwuY29tPjsgUmljaGFyZHNv biwgQnJ1Y2UNCj4gPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPjsgc3RhYmxlQGRwZGsub3Jn DQo+IFN1YmplY3Q6IFJFOiBbZHBkay1kZXZdIFtQQVRDSF0gZ3JvOiBhZGQgbWlzc2luZyBpbnZh bGlkIHBhY2tldCBjaGVja3MNCj4gDQo+ID4gRnJvbTogQW5hbnlldiwgS29uc3RhbnRpbiBbbWFp bHRvOmtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb21dDQo+ID4gPiBGcm9tOiBNb3J0ZW4gQnLD uHJ1cCBbbWFpbHRvOm1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbV0NCj4gPiA+ID4gRnJvbTogZGV2 IFttYWlsdG86ZGV2LWJvdW5jZXNAZHBkay5vcmddIE9uIEJlaGFsZiBPZiBBbmFueWV2LA0KPiA+ ID4gPiBLb25zdGFudGluDQo+ID4gPiA+ID4gPiBGcm9tOiBTdGVwaGVuIEhlbW1pbmdlciBbbWFp bHRvOnN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnXQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ IE9uIFR1ZSwgIDggSmFuIDIwMTkgMTQ6MDg6NDUgKzA4MDANCj4gPiA+ID4gPiA+IEppYXl1IEh1 IDxqaWF5dS5odUBpbnRlbC5jb20+IHdyb3RlOg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g KwkvKg0KPiA+ID4gPiA+ID4gPiArCSAqIERvbid0IHByb2Nlc3MgdGhlIHBhY2tldCB3aG9zZSBF dGhlcm5ldCwgSVB2NCBhbmQgVENQDQo+ID4gPiA+IGhlYWRlcg0KPiA+ID4gPiA+ID4gPiArCSAq IGxlbmd0aHMgYXJlIGludmFsaWQuIEluIGFkZGl0aW9uLCBpZiB0aGUgSVB2NCBoZWFkZXINCj4g PiA+ID4gY29udGFpbnMNCj4gPiA+ID4gPiA+ID4gKwkgKiBPcHRpb25zLCB0aGUgcGFja2V0IHNo b3VsZG4ndCBiZSBwcm9jZXNzZWQuDQo+ID4gPiA+ID4gPiA+ICsJICovDQo+ID4gPiA+ID4gPiA+ ICsJaWYgKHVubGlrZWx5KElMTEVHQUxfRVRIRVJfSERSTEVOKHBrdC0+bDJfbGVuKSB8fA0KPiA+ ID4gPiA+ID4gPiArCQkJSUxMRUdBTF9JUFY0X0hEUkxFTihwa3QtPmwzX2xlbikgfHwNCj4gPiA+ ID4gPiA+ID4gKwkJCUlMTEVHQUxfVENQX0hEUkxFTihwa3QtPmw0X2xlbikpKQ0KPiA+ID4gPiA+ ID4gPiArCQlyZXR1cm4gLTE7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJbiB0aGUgR1JPIGRlc2ln biwgd2UgYXNzdW1lIGFwcGxpY2F0aW9ucyBnaXZlIGNvcnJlY3QNCj4gPiA+ID4gPiBNQlVGLT5s Ml9sZW4vLi4gZm9yIGlucHV0IHBhY2tldHMgb2YgR1JPLiBTcGVjaWZpY2FsbHksIEdSTw0KPiA+ ID4gPiA+IGxpYnJhcnkgYXNzdW1lcyBhcHBsaWNhdGlvbnMgd2lsbCBzZXQgdmFsdWVzIHRvIE1C VUYtPmwyX2xlbi8uLi4NCj4gPiA+ID4gPiBhbmQgZ3VhcmFudGVlIHRoZSB2YWx1ZXMgYXJlIHRo ZSBzYW1lIGFzIHRoZSB2YWx1ZXMgaW4gdGhlIHBhY2tldA0KPiA+ID4gPiA+IGhlYWRlcnMuIFRo ZSByZWFzb24gZm9yIHRoaXMgYXNzdW1wdGlvbiBpcyB0byBwcm9jZXNzIGhlYWRlcg0KPiA+IGZh c3Rlci4NCj4gPiA+DQo+ID4gPiA+ID4gVGhpcyBpcyBhbHNvIHdoeSBJIHdhbnQgdG8gYWRkIHRo aXMgYXNzdW1wdGlvbiBpbiB0aGUgcHJvZ3JhbW1lcg0KPiA+ID4gPiA+IGd1aWRlLg0KPiA+ID4N Cj4gPiA+ICsxIHRvIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhYm91dCBhc3N1bXB0aW9u cyBhbmQNCj4gPiBwcmVjb25kaXRpb25zLg0KPiA+ID4NCj4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ ID4gPiBUaGUgYWJvdmUgY29kZSBpcyB0byBmb3JiaWQgR1JPIHRvIHByb2Nlc3MgaW52YWxpZCBw YWNrZXRzLCB3aGljaA0KPiA+ID4gPiA+IGhhdmUgaW52YWxpZCBwYWNrZXQgaGVhZGVyIGxlbmd0 aHMsIGxpa2UgVENQIGhlYWRlciBsZW5ndGggaXMNCj4gPiBsZXNzDQo+ID4gPiA+IHRoYW4NCj4g PiA+ID4gPiAyMCBieXRlcy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEkg bGlrZSBpdCB3aGVuIGNvZGUgaXMgYXMgcGlja3kgYXMgcG9zc2libGUgd2hlbiBkb2luZw0KPiA+ ID4gPiBvcHRpbWl6YXRpb25zIGJlY2F1c2UNCj4gPiA+ID4gPiA+IGl0IHJlZHVjZXMgcG9zc2li bGUgc2VjdXJpdHkgcmlza2cuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gVG8gbWUgdGhpcyBs b29rcyBtb3JlIGNvbmZ1c2luZyBhbmQgbm90IGFzIGNhcmVmdWwgYXMgZG9pbmcgaXQNCj4gPiA+ ID4gbGlrZToNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAJaWYgKHVubGlrZWx5KHBrdC0+bDJf bGVuICE9IEVUSEVSX0hEUl9MRU4pKQ0KPiA+ID4gPiA+ID4gCQlyZXR1cm4gLTE7DQo+ID4gPiA+ ID4gPiAJZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QocGt0LCBzdHJ1Y3QgZXRoZXJfaGRyICop Ow0KPiA+ID4gPiA+ID4gCWlwdjRfaGRyID0gKHN0cnVjdCBpcHY0X2hkciAqKSgoY2hhciAqKWV0 aF9oZHIgKw0KPiA+IEVUSEVSX0hEUl9MRU4pOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IAlp ZiAocGt0LT5sM19sZW4gIT0gKGlwdjQtPnZlcnNpb25faWhsICYgSVBWNF9IRFJfSUhMX01BU0sp DQo+ID4gPDwgNCkNCj4gPiA+ID4gPiA+IAkJcmV0dXJuIC0xOw0KPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+IAlpZiAocGt0LT5sNF9sZW4gPCBzaXplb2Yoc3RydWN0IHRjcF9oZHIpKQ0KPiA+ID4g PiA+ID4gCQlyZXR1cm4gLTE7DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gWW91IHNob3VsZCBh bHNvIGNoZWNrIGZvciBUQ1Agb3B0aW9ucyBhcyB3ZWxsLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4g VGhlcmUgYXJlIHR3byB3YXlzIHRvIGdldCBldGhlciwgaXB2NCBhbmQgdGNwIGhlYWRlcnM6DQo+ ID4gPiA+ID4gMSkuIFVzZSBNQlVGLT5sMl9sZW4vbDNfbGVuLi4uOw0KPiA+ID4gPiA+IDIpLiBQ YXJzZSBwYWNrZXQgYW5kIGlnbm9yZSBNQlVGLT5sMl9sZW4vLi4uLg0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gSWYgd2UgZm9sbG93IHRoZSBjaG9pY2UgMSwgd2UgZG9uJ3QgbmVlZCB0byBwYXJzZSBw YWNrZXQgYW5kDQo+ID4gPiA+ID4gZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB2YWx1ZXMgb2YgTUJV Ri0+bDJfbGVuLy4uLiBhcmUgY29ycmVjdCwNCj4gPiA+ID4gPiBzaW5jZSB3ZSBhc3N1bWUgYXBw bGljYXRpb25zIHdpbGwgc2V0IGNvcnJlY3QgdmFsdWVzLiBJZiB3ZQ0KPiA+IGZvbGxvdw0KPiA+ ID4gPiA+IHRoZSBjaG9pY2UgMiwgd2UgZG9uJ3QgbmVlZCB0byBjYXJlIGFib3V0IHRoZSB2YWx1 ZXMgb2YgTUJVRi0NCj4gPiA+ID4gPmwyX2xlbi8uLi4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEkg YW0gYSBsaXR0bGUgY29uZnVzZWQgYWJvdXQgeW91ciBjb2RlLCBzaW5jZSBpdCBwYXJzZXMgcGFj a2V0DQo+ID4gYW5kDQo+ID4gPiA+ID4gY2hlY2tzIGlmIHRoZSB2YWx1ZXMgb2YgTUJVRi0+bDJf bGVuLy4uLiBhcmUgY29ycmVjdC4gSWYgd2UgZG9uJ3QNCj4gPiB1c2UNCj4gPiA+ID4gPiBNQlVG LT5sMl9sZW4vLi4uIHRvIGdldCBldGhlci9pcHY0L3RjcCBoZWFkZXJzLCB3aHkgc2hvdWxkIHdl DQo+ID4gY2hlY2sNCj4gPiA+ID4gPiB0aGUgdmFsdWVzIG9mIE1CVUYtPmwyX2xlbi8uLi4/DQo+ ID4gPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gQWdyZWUgdGhhdCB3ZSBkb24ndCBuZWVkIGJvdGgu DQo+ID4gPiA+IE15IHByZWZlcmVuY2Ugd291bGQgYmUgdG8gc3RpY2sgd2l0aCAxKS4NCj4gPiA+ ID4gSW4gbWFueSBjYXNlcyB1c2VyIHdvdWxkIGhhdmUgYWxyZWFkeSBkZXRlcm1pbmVkIGwyL2wz L2w0IGxlbg0KPiA+ID4gPiBieSB0aGlzIHN0YWdlLg0KPiA+ID4gPiBLb25zdGFudGluDQo+ID4g Pg0KPiA+ID4gRG8gd2UgaGF2ZSBhIGdlbmVyaWMgcGFja2V0IGhlYWRlciB2YWxpZGF0aW9uIGxp YnJhcnk/IE90aGVyd2lzZSwNCj4gPiB0aGF0IHdvdWxkIHBlcmhhcHMgYmUgYSBiZXR0ZXIgcGF0 aC4gU3VjaCBhIGxpYnJhcnkgY291bGQgcHJvYmFibHkgdXNlDQo+ID4gPiBzb21lIG9mIHRoZSBm bGFncyBmcm9tIHRoZSBQTUQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHRvIHZhbGlkYXRlIGluDQo+ ID4gc29mdHdhcmUuDQo+ID4NCj4gPiBBRkFJSyAtIHdlIGRvbid0IGhhdmUgYSBnZW5lcmljIGhl YWRlciBwYXJzaW5nIGxpYnJhcnkuDQo+ID4gWWVzLCBpdCB3b3VsZCBiZSBnb29kIHRvIGhhdmUg c3VjaCBhYmlsaXR5LCBidXQgSSB0aGluayB0aGF0J3Mgb3V0IG9mDQo+ID4gc2NvcGUgZm9yIHRo YXQgcGF0Y2guDQo+ID4gQlRXLCB2b2x1bnRlZXJzIGFyZSB3ZWxjb21lIDopDQo+ID4NCj4gPiA+ DQo+ID4gPiBBbmQgaWYgaXQgaXMgYSBkb2N1bWVudGVkIHByZWNvbmRpdGlvbiBvZiB0aGUgR1JP IGxpYnJhcnkgdGhhdCBtLQ0KPiA+ID5sMl9sZW4vbDNfbGVuLi4uIG11c3QgYmUgc2V0IGFuZCBz ZW5zaWJsZSwgcGVyaGFwcyBhbiBSVEVfQVNTRVJUKCkNCj4gPiBjb3VsZA0KPiA+ID4gYmUgY29u c2lkZXJlZCBpbnN0ZWFkIG9mIGdyYWNlZnVsbHkgcmV0dXJuaW5nIC0xPw0KPiA+DQo+ID4gSSBz dXBwb3NlIHRoYXQncyB0b28gZXh0cmVtZS4NCj4gPiBXaGF0J3Mgd3Jvbmcgd2l0aCBjaGVja2lu ZyBpbnB1dCBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgdGhleQ0KPiA+IGFyZSBp bnZhbGlkPw0KPiA+IEtvbnN0YW50aW4NCj4gPg0KPiBJdCBpcyBleHRyZW1lLCBhbmQgaXQgd2Fz IHBhcnRseSBtZWFudCBhcyBhIHByb3ZvY2F0aW9uIHRvIHRoaW5rIGRlZXBlcg0KPiBhYm91dCBp dDogRG8gd2UgcmVhbGx5IG5lZWQgdG8gZm9sbG93IFBvc3RlbCdzIGxhdw0KPiAoaHR0cHM6Ly9l bi53aWtpcGVkaWEub3JnL3dpa2kvUm9idXN0bmVzc19wcmluY2lwbGUpIGluIGZ1bmN0aW9ucyB3 aGVyZSB3ZQ0KPiBhcmUgaW4gZnVsbCBjb250cm9sIG91cnNlbHZlcz8NCj4gDQo+IEhlcmUncyB3 aGF0J3Mgd3Jvbmcgd2l0aCBpdDogSWYgZWFjaCBmdW5jdGlvbiBhIHBhY2tldCBwYXNzZXMgdGhy b3VnaCBoYXMgdG8NCj4gcGFyc2UgdGhlIHBhY2tldCBoZWFkZXJzIGFuZCB2YWxpZGF0ZSB0aGUg bWJ1ZiBwYXJhbWV0ZXJzIGZyb20gc2NyYXRjaCwgaXQNCj4gd2lsbCBoYXZlIGFuIHVubmVjZXNz YXJ5IHBlcmZvcm1hbmNlIGNvc3QuIEl0IHNob3VsZCBiZSBkb25lIG9ubHkgb25jZSBpbg0KPiB0 aGUgZmFzdCBwYXRoLCBhbmQgc3Vic2VxdWVudCBmdW5jdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8g cmVseSBvbiB0aGUgcmVzdWx0DQo+IG9mIHRoYXQuDQo+IA0KPiBHZW5lcmFsbHksIHdlIHNob3Vs ZCBiZSBhYmxlIHRvIHJlbHkgb24gYXNzdW1wdGlvbnMvcHJlY29uZGl0aW9ucy4gQW5kDQo+IHdo ZW4gYSBmdW5jdGlvbiByZWxpZXMgb24gc29tZXRoaW5nLCBpdCBpcyBhIGdvb2QgdGhpbmcgdG8g ZGVzY3JpYmUgc3VjaA0KPiBwcmVjb25kaXRpb25zIGluIHRoZSBmdW5jdGlvbidzIGRvY3VtZW50 YXRpb24uDQo+IA0KPiBGcm9tIGEgaGlnaCBsZXZlbCBwZXJzcGVjdGl2ZSwgRFBESyBDb3JlIHNo b3VsZCBub3QgYmUgYSBidW5jaCBvZg0KPiBjb21wbGV0ZWx5IGluZGVwZW5kZW50IGxpYnJhcmll cywgYnV0IGEgY29uc2lzdGVudCBsaWJyYXJ5IHdoZXJlIGl0cw0KPiBmdW5jdGlvbnMgY2FuIHJl bHkgb24gcHJlY29uZGl0aW9ucyBhbmQgcG9zdGNvbmRpdGlvbnMgb2YgaXRzIG90aGVyDQo+IGZ1 bmN0aW9ucyBhbmQgdGhlaXIgaW50ZW5kZWQgdXNlIGluIHRoZSBmYXN0IHBhdGguDQoNCkdvb2Qg cG9pbnQuDQoNCj4gDQo+IFJlZ2FyZGluZyBkb2N1bWVudGF0aW9uLCBpdCBtaWdodCBhbHNvIGJl IHdvcnRoIG1lbnRpb25pbmcgdGhhdCB0aGUgbS0NCj4gPmwyX2xlbi8uLi4gZmllbGRzIGFyZSBk ZXNjcmliZWQgYXMgImZpZWxkcyB0byBzdXBwb3J0IFRYIG9mZmxvYWRzIiBpbg0KPiBydGVfbWJ1 Zi5oLiBTbyB3aGVuIFJYIG9mZmxvYWQgZmVhdHVyZXMgLSBzdWNoIGFzIEdSTyAtIHJlbHkgb24g dGhlc2UgZmllbGRzLA0KPiBwZXJoYXBzIHRoZSBkZXNjcmlwdGlvbiBpbiBydGVfbWJ1Zi5oIHNo b3VsZCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5Lg0KDQpZZXMsIGJvdGggSVAgcmVhc3NlbWJseSBh bmQgR1JPIHVzZSB0aG9zZSBmaWVsZHMuIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBkZXNjcmlwdGlv bi4NCg0KVGhhbmtzLA0KSmlheXUNCj4gDQo+IA0KPiBNZWQgdmVubGlnIGhpbHNlbiAvIGtpbmQg cmVnYXJkcw0KPiAtIE1vcnRlbiBCcsO4cnVwDQoNCg==