From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 80C23A00E6 for ; Fri, 14 Jun 2019 11:47:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 712981D4F8; Fri, 14 Jun 2019 11:47:03 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id ED3231D4F6 for ; Fri, 14 Jun 2019 11:47:01 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Jun 2019 02:47:01 -0700 X-ExtLoop1: 1 Received: from pgsmsx102.gar.corp.intel.com ([10.221.44.80]) by orsmga005.jf.intel.com with ESMTP; 14 Jun 2019 02:46:59 -0700 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.115]) by PGSMSX102.gar.corp.intel.com ([169.254.6.79]) with mapi id 14.03.0415.000; Fri, 14 Jun 2019 17:46:53 +0800 From: "Zhao1, Wei" To: "Wang, Xiao W" , "Yang, Qiming" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v2 1/3] net/ice: enable switch filter Thread-Index: AQHVIPPdU1J/6sy0M06ZNgNITQs6AqaYuo+AgAItNwA= Date: Fri, 14 Jun 2019 09:46:53 +0000 Message-ID: References: <1559552722-8970-1-git-send-email-qiming.yang@intel.com> <20190612075029.109914-1-qiming.yang@intel.com> <20190612075029.109914-2-qiming.yang@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.0.600.7 dlp-reaction: no-action x-originating-ip: [172.30.20.205] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 1/3] net/ice: enable switch filter 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGmjrCB4aWFvDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV2FuZywg WGlhbyBXDQo+IFNlbnQ6IFRodXJzZGF5LCBKdW5lIDEzLCAyMDE5IDQ6MjQgUE0NCj4gVG86IFlh bmcsIFFpbWluZyA8cWltaW5nLnlhbmdAaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnDQo+IENjOiBa aGFvMSwgV2VpIDx3ZWkuemhhbzFAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSRTogW2RwZGstZGV2 XSBbUEFUQ0ggdjIgMS8zXSBuZXQvaWNlOiBlbmFibGUgc3dpdGNoIGZpbHRlcg0KPiANCj4gSGks DQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogZGV2IFttYWls dG86ZGV2LWJvdW5jZXNAZHBkay5vcmddIE9uIEJlaGFsZiBPZiBRaW1pbmcgWWFuZw0KPiA+IFNl bnQ6IFdlZG5lc2RheSwgSnVuZSAxMiwgMjAxOSAzOjUwIFBNDQo+ID4gVG86IGRldkBkcGRrLm9y Zw0KPiA+IENjOiBaaGFvMSwgV2VpIDx3ZWkuemhhbzFAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6 IFtkcGRrLWRldl0gW1BBVENIIHYyIDEvM10gbmV0L2ljZTogZW5hYmxlIHN3aXRjaCBmaWx0ZXIN Cj4gPg0KPiA+IEZyb206IHdlaSB6aGFvIDx3ZWkuemhhbzFAaW50ZWwuY29tPg0KPiA+DQo+ID4g VGhlIHBhdGNoIGVuYWJsZXMgdGhlIGJhY2tlbmQgb2YgcnRlX2Zsb3cuIEl0IHRyYW5zZmVycyBy dGVfZmxvd194eHgNCj4gPiB0byBkZXZpY2Ugc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgYW5kIGNv bmZpZ3VyZXMgcGFja2V0IHByb2Nlc3MNCj4gPiBlbmdpbmUncyBiaW5hcnkgY2xhc3NpZmllcg0K PiA+IChzd2l0Y2gpIHByb3Blcmx5Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogV2VpIFpoYW8g PHdlaS56aGFvMUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvbmV0L2ljZS9NYWtl ZmlsZSAgICAgICAgICAgIHwgICAxICsNCj4gPiAgZHJpdmVycy9uZXQvaWNlL2ljZV9ldGhkZXYu aCAgICAgICAgfCAgIDYgKw0KPiA+ICBkcml2ZXJzL25ldC9pY2UvaWNlX3N3aXRjaF9maWx0ZXIu YyB8IDUwMg0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBk cml2ZXJzL25ldC9pY2UvaWNlX3N3aXRjaF9maWx0ZXIuaCB8ICAyOCArKw0KPiA+ICBkcml2ZXJz L25ldC9pY2UvbWVzb24uYnVpbGQgICAgICAgICB8ICAgMyArLQ0KPiA+ICA1IGZpbGVzIGNoYW5n ZWQsIDUzOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pICBjcmVhdGUgbW9kZSAxMDA2NDQN Cj4gPiBkcml2ZXJzL25ldC9pY2UvaWNlX3N3aXRjaF9maWx0ZXIuYw0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvaWNlL2ljZV9zd2l0Y2hfZmlsdGVyLmgNCj4gPg0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pY2UvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9pY2UvTWFr ZWZpbGUgaW5kZXgNCj4gPiAwZTVjNTVlLi5iMTBkODI2IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZl cnMvbmV0L2ljZS9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2ljZS9NYWtlZmlsZQ0K PiA+IEBAIC02MCw2ICs2MCw3IEBAIGlmZXEgKCQoQ09ORklHX1JURV9BUkNIX1g4NiksIHkpDQo+ ID4gIFNSQ1MtJChDT05GSUdfUlRFX0xJQlJURV9JQ0VfUE1EKSArPSBpY2Vfcnh0eF92ZWNfc3Nl LmMgIGVuZGlmDQo+ID4NCj4gPiArU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX0lDRV9QTUQpICs9 IGljZV9zd2l0Y2hfZmlsdGVyLmMNCj4gPiAgaWZlcSAoJChmaW5kc3RyaW5nDQo+ID4gUlRFX01B Q0hJTkVfQ1BVRkxBR19BVlgyLCQoQ0ZMQUdTKSksUlRFX01BQ0hJTkVfQ1BVRkxBR19BVlgyKQ0K PiA+ICAJQ0NfQVZYMl9TVVBQT1JUPTENCj4gPiAgZWxzZQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9pY2UvaWNlX2V0aGRldi5oDQo+ID4gYi9kcml2ZXJzL25ldC9pY2UvaWNlX2V0aGRl di5oIGluZGV4IDEzODVhZmEuLjY3YTM1OGEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQv aWNlL2ljZV9ldGhkZXYuaA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2ljZS9pY2VfZXRoZGV2LmgN Cj4gPiBAQCAtMjM0LDYgKzIzNCwxMiBAQCBzdHJ1Y3QgaWNlX3ZzaSB7DQo+ID4gIAlib29sIG9m ZnNldF9sb2FkZWQ7DQo+ID4gIH07DQo+ID4NCj4gPiArLyogU3RydWN0IHRvIHN0b3JlIGZsb3cg Y3JlYXRlZC4gKi8NCj4gPiArc3RydWN0IHJ0ZV9mbG93IHsNCj4gPiArCVRBSUxRX0VOVFJZKHJ0 ZV9mbG93KSBub2RlOw0KPiA+ICt2b2lkICpydWxlOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAgc3Ry dWN0IGljZV9wZiB7DQo+ID4gIAlzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmFkYXB0ZXI7IC8qIFRoZSBh ZGFwdGVyIHRoaXMgUEYgYXNzb2NpYXRlIHRvICovDQo+ID4gIAlzdHJ1Y3QgaWNlX3ZzaSAqbWFp bl92c2k7IC8qIHBvaW50ZXIgdG8gbWFpbiBWU0kgc3RydWN0dXJlICovIGRpZmYNCj4gPiAtLWdp dCBhL2RyaXZlcnMvbmV0L2ljZS9pY2Vfc3dpdGNoX2ZpbHRlci5jDQo+ID4gYi9kcml2ZXJzL25l dC9pY2UvaWNlX3N3aXRjaF9maWx0ZXIuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g aW5kZXggMDAwMDAwMC4uZTY3OTY3NQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2 ZXJzL25ldC9pY2UvaWNlX3N3aXRjaF9maWx0ZXIuYw0KPiA+IEBAIC0wLDAgKzEsNTAyIEBADQo+ IA0KPiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciBtaXNzaW5nLg0KDQpPaywgVXBkYXRlZCBpbiB2 Mw0KPiANCj4gPiArI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPg0KPiA+ICsjaW5jbHVkZSA8c3RkaW8u aD4NCj4gPiArI2luY2x1ZGUgPGVycm5vLmg+DQo+ID4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4g PiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiA+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+ID4gKyNp bmNsdWRlIDxzdGRhcmcuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxydGVfZGVidWcuaD4NCj4g PiArI2luY2x1ZGUgPHJ0ZV9ldGhlci5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX2V0aGRldl9kcml2 ZXIuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9sb2cuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9tYWxs b2MuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9ldGhfY3RybC5oPg0KPiA+ICsjaW5jbHVkZSA8cnRl X3RhaWxxLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfZmxvd19kcml2ZXIuaD4NCj4gPiArDQo+ID4g KyNpbmNsdWRlICJpY2VfbG9ncy5oIg0KPiA+ICsjaW5jbHVkZSAiYmFzZS9pY2VfdHlwZS5oIg0K PiA+ICsjaW5jbHVkZSAiaWNlX3N3aXRjaF9maWx0ZXIuaCINCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQNCj4gPiAraWNlX3BhcnNlX3N3aXRjaF9maWx0ZXIoDQo+ID4gKwkJCWNvbnN0IHN0cnVjdCBy dGVfZmxvd19pdGVtIHBhdHRlcm5bXSwNCj4gPiArCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2Fj dGlvbiBhY3Rpb25zW10sDQo+ID4gKwkJCXN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IsDQo+ ID4gKwkJCXN0cnVjdCBpY2VfYWR2X3J1bGVfaW5mbyAqcnVsZV9pbmZvLA0KPiA+ICsJCQlzdHJ1 Y3QgaWNlX2Fkdl9sa3VwX2VsZW0gKipsa3VwX2xpc3QsDQo+ID4gKwkJCXVpbnQxNl90ICpsa3Vw c19udW0pDQo+ID4gK3sNCj4gPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtICppdGVtID0g cGF0dGVybjsNCj4gPiArCWVudW0gcnRlX2Zsb3dfaXRlbV90eXBlIGl0ZW1fdHlwZTsNCj4gPiAr CWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX2V0aCAqZXRoX3NwZWMsICpldGhfbWFzazsNCj4g PiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX2lwdjQgKmlwdjRfc3BlYywgKmlwdjRfbWFz azsNCj4gPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX2lwdjYgKmlwdjZfc3BlYywgKmlw djZfbWFzazsNCj4gPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX3RjcCAqdGNwX3NwZWMs ICp0Y3BfbWFzazsNCj4gPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX3VkcCAqdWRwX3Nw ZWMsICp1ZHBfbWFzazsNCj4gPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX3NjdHAgKnNj dHBfc3BlYywgKnNjdHBfbWFzazsNCj4gPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX252 Z3JlICAqbnZncmVfc3BlYywgKm52Z3JlX21hc2s7DQo+ID4gKwljb25zdCBzdHJ1Y3QgcnRlX2Zs b3dfaXRlbV92eGxhbiAgKnZ4bGFuX3NwZWMsICp2eGxhbl9tYXNrOw0KPiA+ICsJc3RydWN0IGlj ZV9hZHZfbGt1cF9lbGVtICpsaXN0Ow0KPiA+ICsJdWludDE2X3QgaSwgaiwgdCA9IDA7DQo+ID4g Kwl1aW50MTZfdCBpdGVtX251bSA9IDA7DQo+ID4gKwllbnVtIGljZV9zd190dW5uZWxfdHlwZSB0 dW5fdHlwZSA9IElDRV9OT05fVFVOOw0KPiA+ICsNCj4gPiArCWZvciAoOyBpdGVtLT50eXBlICE9 IFJURV9GTE9XX0lURU1fVFlQRV9FTkQ7IGl0ZW0rKykgew0KPiA+ICsJCWlmIChpdGVtLT50eXBl ID09IFJURV9GTE9XX0lURU1fVFlQRV9FVEggfHwNCj4gPiArCQkJaXRlbS0+dHlwZSA9PSBSVEVf RkxPV19JVEVNX1RZUEVfSVBWNCB8fA0KPiA+ICsJCQlpdGVtLT50eXBlID09IFJURV9GTE9XX0lU RU1fVFlQRV9JUFY2IHx8DQo+ID4gKwkJCWl0ZW0tPnR5cGUgPT0gUlRFX0ZMT1dfSVRFTV9UWVBF X1VEUCB8fA0KPiA+ICsJCQlpdGVtLT50eXBlID09IFJURV9GTE9XX0lURU1fVFlQRV9UQ1AgfHwN Cj4gPiArCQkJaXRlbS0+dHlwZSA9PSBSVEVfRkxPV19JVEVNX1RZUEVfU0NUUCB8fA0KPiA+ICsJ CQlpdGVtLT50eXBlID09IFJURV9GTE9XX0lURU1fVFlQRV9WWExBTiB8fA0KPiA+ICsJCQlpdGVt LT50eXBlID09IFJURV9GTE9XX0lURU1fVFlQRV9OVkdSRSkNCj4gPiArCQkJaXRlbV9udW0rKzsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlsaXN0ID0gcnRlX3ptYWxsb2MoTlVMTCwgaXRlbV9udW0g KiBzaXplb2YoKmxpc3QpLCAwKTsNCj4gPiArCWlmICghbGlzdCkgew0KPiA+ICsJCXJ0ZV9mbG93 X2Vycm9yX3NldChlcnJvciwgRUlOVkFMLA0KPiA+ICsJCQkJICAgUlRFX0ZMT1dfRVJST1JfVFlQ RV9JVEVNLCBhY3Rpb25zLA0KPiA+ICsJCQkJICAgIm5vIG1lbW9yeSBtYWxsb2MiKTsNCj4gDQo+ IHtSVEVfRkxPV19FUlJPUl9UWVBFX0lURU1fTlVNLCBpdGVtLCAiTm8gbWVtb3J5IGZvciBQTUQg aW50ZXJuYWwNCj4gaXRlbXMifSBpcyBtb3JlIGFwcHJvcHJpYXRlLg0KPiBSZWZlciB0byBpNDBl IGltcGxlbWVudGF0aW9uLg0KDQpPaywgVXBkYXRlZCBpbiB2Mw0KDQo+IA0KPiA+ICsJCWdvdG8g b3V0Ow0KPiA+ICsJfQ0KPiA+ICsJKmxrdXBfbGlzdCA9IGxpc3Q7DQo+ID4gKw0KPiA+ICsJZm9y IChpdGVtID0gcGF0dGVybiwgaSA9IDA7IGl0ZW0tPnR5cGUgIT0NCj4gPiArCQkJUlRFX0ZMT1df SVRFTV9UWVBFX0VORDsgaXRlbSsrLCBpKyspIHsNCj4gDQo+IEl0IHNlZW1zIHdlIGRvbid0IG5l ZWQgdGhlICJpIiB2YXJpYWJsZS4NCg0KT2ssIFVwZGF0ZWQgaW4gdjMNCg0KPiANCj4gPiArCQlp dGVtX3R5cGUgPSBpdGVtLT50eXBlOw0KPiA+ICsNCj4gPiArCQlzd2l0Y2ggKGl0ZW1fdHlwZSkg ew0KPiA+ICsJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0VUSDoNCj4gPiArCQkJZXRoX3NwZWMg PSBpdGVtLT5zcGVjOw0KPiA+ICsJCQlldGhfbWFzayA9IGl0ZW0tPm1hc2s7DQo+ID4gKwkJCWlm IChldGhfc3BlYyAmJiBldGhfbWFzaykgew0KPiA+ICsJCQkJbGlzdFt0XS50eXBlID0gKHR1bl90 eXBlID09IElDRV9OT05fVFVOKSA/DQo+ID4gKwkJCQkJSUNFX01BQ19PRk9TIDogSUNFX01BQ19J TDsNCj4gPiArCQkJCWZvciAoaiA9IDA7IGogPCBSVEVfRVRIRVJfQUREUl9MRU47IGorKykgew0K PiA+ICsJCQkJCWlmIChldGhfbWFzay0+c3JjLmFkZHJfYnl0ZXNbal0gPT0NCj4gPiArCQkJCQkJ CQlVSU5UOF9NQVgpIHsNCj4gPiArCQkJCQkJbGlzdFt0XS5oX3UuZXRoX2hkci4NCj4gPiArCQkJ CQkJCXNyY19hZGRyW2pdID0NCj4gPiArCQkJCQkJZXRoX3NwZWMtPnNyYy5hZGRyX2J5dGVzW2pd Ow0KPiA+ICsJCQkJCQlsaXN0W3RdLm1fdS5ldGhfaGRyLg0KPiA+ICsJCQkJCQkJc3JjX2FkZHJb al0gPQ0KPiA+ICsJCQkJCQlldGhfbWFzay0+c3JjLmFkZHJfYnl0ZXNbal07DQo+ID4gKwkJCQkJ fQ0KPiA+ICsJCQkJCWlmIChldGhfbWFzay0+ZHN0LmFkZHJfYnl0ZXNbal0gPT0NCj4gPiArCQkJ CQkJCQlVSU5UOF9NQVgpIHsNCj4gPiArCQkJCQkJbGlzdFt0XS5oX3UuZXRoX2hkci4NCj4gPiAr CQkJCQkJCWRzdF9hZGRyW2pdID0NCj4gPiArCQkJCQkJZXRoX3NwZWMtPmRzdC5hZGRyX2J5dGVz W2pdOw0KPiA+ICsJCQkJCQlsaXN0W3RdLm1fdS5ldGhfaGRyLg0KPiA+ICsJCQkJCQkJZHN0X2Fk ZHJbal0gPQ0KPiA+ICsJCQkJCQlldGhfbWFzay0+ZHN0LmFkZHJfYnl0ZXNbal07DQo+ID4gKwkJ CQkJfQ0KPiA+ICsJCQkJfQ0KPiA+ICsJCQkJaWYgKGV0aF9tYXNrLT50eXBlID09IFVJTlQxNl9N QVgpIHsNCj4gPiArCQkJCQlsaXN0W3RdLmhfdS5ldGhfaGRyLmV0aHR5cGVfaWQgPQ0KPiA+ICsJ CQkJCXJ0ZV9iZV90b19jcHVfMTYoZXRoX3NwZWMtPnR5cGUpOw0KPiA+ICsJCQkJCWxpc3RbdF0u bV91LmV0aF9oZHIuZXRodHlwZV9pZCA9DQo+ID4gKwkJCQkJCVVJTlQxNl9NQVg7DQo+ID4gKwkJ CQl9DQo+ID4gKwkJCQl0Kys7DQo+IA0KPiBBIGxvdCBvZiAidCsrIiBiZWxvdywgY2FuIHdlIG1v dmUgaXQgb3V0c2lkZSB0aGUgc3dpdGNoeyB9IHRvIGhhdmUgb25seSBvbmUgInQrKyI/DQoNCkJ5 IG5vdywgd2UgY2FuIG5vdCwgYmVjYXVzZSBzaGFyZSBjb2RlIGNhbiBub3QgaGFuZGxlICBpZiAo IWV0aF9zcGVjICYmICFldGhfbWFzaykgIGNhc2UsICBpZiB3ZSB0KysNCkZvciB0aGF0IGNhc2Us IHRoYXQgaXRlbSB3aWxsIHB1dCBpbnRvIGxpc3RbdF0sIGFuZCBzaGFyZSBjb2RlIHdpbGwgcmVw b3J0IGVycm9yLg0KPiANCj4gPiArCQkJfSBlbHNlIGlmICghZXRoX3NwZWMgJiYgIWV0aF9tYXNr KSB7DQo+ID4gKwkJCQlsaXN0W3RdLnR5cGUgPSAodHVuX3R5cGUgPT0gSUNFX05PTl9UVU4pID8N Cj4gPiArCQkJCQlJQ0VfTUFDX09GT1MgOiBJQ0VfTUFDX0lMOw0KPiA+ICsJCQl9DQo+ID4gKwkJ CWJyZWFrOw0KPiA+ICsNCj4gPiArCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9JUFY0Og0KPiA+ ICsJCQlpcHY0X3NwZWMgPSBpdGVtLT5zcGVjOw0KPiA+ICsJCQlpcHY0X21hc2sgPSBpdGVtLT5t YXNrOw0KPiA+ICsJCQlpZiAoaXB2NF9zcGVjICYmIGlwdjRfbWFzaykgew0KPiA+ICsJCQkJbGlz dFt0XS50eXBlID0gKHR1bl90eXBlID09IElDRV9OT05fVFVOKSA/DQo+ID4gKwkJCQkJSUNFX0lQ VjRfT0ZPUyA6IElDRV9JUFY0X0lMOw0KPiA+ICsJCQkJaWYgKGlwdjRfbWFzay0+aGRyLnNyY19h ZGRyID09IFVJTlQzMl9NQVgpDQo+ID4gew0KPiA+ICsJCQkJCWxpc3RbdF0uaF91LmlwdjRfaGRy LnNyY19hZGRyID0NCj4gPiArCQkJCQkJaXB2NF9zcGVjLT5oZHIuc3JjX2FkZHI7DQo+ID4gKwkJ CQkJbGlzdFt0XS5tX3UuaXB2NF9oZHIuc3JjX2FkZHIgPQ0KPiA+ICsJCQkJCQlVSU5UMzJfTUFY Ow0KPiA+ICsJCQkJfQ0KPiA+ICsJCQkJaWYgKGlwdjRfbWFzay0+aGRyLmRzdF9hZGRyID09IFVJ TlQzMl9NQVgpDQo+ID4gew0KPiA+ICsJCQkJCWxpc3RbdF0uaF91LmlwdjRfaGRyLmRzdF9hZGRy ID0NCj4gPiArCQkJCQkJaXB2NF9zcGVjLT5oZHIuZHN0X2FkZHI7DQo+ID4gKwkJCQkJbGlzdFt0 XS5tX3UuaXB2NF9oZHIuZHN0X2FkZHIgPQ0KPiA+ICsJCQkJCQlVSU5UMzJfTUFYOw0KPiA+ICsJ CQkJfQ0KPiA+ICsJCQkJaWYgKGlwdjRfbWFzay0+aGRyLnRpbWVfdG9fbGl2ZSA9PQ0KPiA+IFVJ TlQ4X01BWCkgew0KPiA+ICsJCQkJCWxpc3RbdF0uaF91LmlwdjRfaGRyLnRpbWVfdG9fbGl2ZSA9 DQo+ID4gKwkJCQkJCWlwdjRfc3BlYy0+aGRyLnRpbWVfdG9fbGl2ZTsNCj4gPiArCQkJCQlsaXN0 W3RdLm1fdS5pcHY0X2hkci50aW1lX3RvX2xpdmUgPQ0KPiA+ICsJCQkJCQlVSU5UOF9NQVg7DQo+ ID4gKwkJCQl9DQo+ID4gKwkJCQlpZiAoaXB2NF9tYXNrLT5oZHIubmV4dF9wcm90b19pZCA9PQ0K PiA+IFVJTlQ4X01BWCkgew0KPiA+ICsJCQkJCWxpc3RbdF0uaF91LmlwdjRfaGRyLnByb3RvY29s ID0NCj4gPiArCQkJCQkJaXB2NF9zcGVjLQ0KPiA+ID5oZHIubmV4dF9wcm90b19pZDsNCj4gPiAr CQkJCQlsaXN0W3RdLm1fdS5pcHY0X2hkci5wcm90b2NvbCA9DQo+ID4gKwkJCQkJCVVJTlQ4X01B WDsNCj4gPiArCQkJCX0NCj4gPiArCQkJCWlmIChpcHY0X21hc2stPmhkci50eXBlX29mX3NlcnZp Y2UgPT0NCj4gPiArCQkJCQkJVUlOVDhfTUFYKSB7DQo+ID4gKwkJCQkJbGlzdFt0XS5oX3UuaXB2 NF9oZHIudG9zID0NCj4gPiArCQkJCQkJaXB2NF9zcGVjLQ0KPiA+ID5oZHIudHlwZV9vZl9zZXJ2 aWNlOw0KPiA+ICsJCQkJCWxpc3RbdF0ubV91LmlwdjRfaGRyLnRvcyA9IFVJTlQ4X01BWDsNCj4g PiArCQkJCX0NCj4gPiArCQkJCXQrKzsNCj4gPiArCQkJfSBlbHNlIGlmICghaXB2NF9zcGVjICYm ICFpcHY0X21hc2spIHsNCj4gPiArCQkJCWxpc3RbdF0udHlwZSA9ICh0dW5fdHlwZSA9PSBJQ0Vf Tk9OX1RVTikgPw0KPiA+ICsJCQkJCUlDRV9JUFY0X09GT1MgOiBJQ0VfSVBWNF9JTDsNCj4gPiAr CQkJfQ0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJY2FzZSBSVEVfRkxPV19JVEVNX1RZ UEVfSVBWNjoNCj4gPiArCQkJaXB2Nl9zcGVjID0gaXRlbS0+c3BlYzsNCj4gPiArCQkJaXB2Nl9t YXNrID0gaXRlbS0+bWFzazsNCj4gPiArCQkJaWYgKGlwdjZfc3BlYyAmJiBpcHY2X21hc2spIHsN Cj4gPiArCQkJCWxpc3RbdF0udHlwZSA9ICh0dW5fdHlwZSA9PSBJQ0VfTk9OX1RVTikgPw0KPiA+ ICsJCQkJCUlDRV9JUFY2X09GT1MgOiBJQ0VfSVBWNl9JTDsNCj4gPiArCQkJCWZvciAoaiA9IDA7 IGogPCBJQ0VfSVBWNl9BRERSX0xFTkdUSDsgaisrKSB7DQo+ID4gKwkJCQkJaWYgKGlwdjZfbWFz ay0+aGRyLnNyY19hZGRyW2pdID09DQo+ID4gKwkJCQkJCQkJVUlOVDhfTUFYKSB7DQo+ID4gKwkJ CQkJCWxpc3RbdF0uaF91LmljZV9pcHY2X29mb3NfaGRyLg0KPiA+ICsJCQkJCQkJc3JjX2FkZHJb al0gPQ0KPiA+ICsJCQkJCQlpcHY2X3NwZWMtPmhkci5zcmNfYWRkcltqXTsNCj4gPiArCQkJCQkJ bGlzdFt0XS5tX3UuaWNlX2lwdjZfb2Zvc19oZHIuDQo+ID4gKwkJCQkJCQlzcmNfYWRkcltqXSA9 DQo+ID4gKwkJCQkJCWlwdjZfbWFzay0+aGRyLnNyY19hZGRyW2pdOw0KPiA+ICsJCQkJCX0NCj4g PiArCQkJCQlpZiAoaXB2Nl9tYXNrLT5oZHIuZHN0X2FkZHJbal0gPT0NCj4gPiArCQkJCQkJCQlV SU5UOF9NQVgpIHsNCj4gPiArCQkJCQkJbGlzdFt0XS5oX3UuaWNlX2lwdjZfb2Zvc19oZHIuDQo+ ID4gKwkJCQkJCQlkc3RfYWRkcltqXSA9DQo+ID4gKwkJCQkJCWlwdjZfc3BlYy0+aGRyLmRzdF9h ZGRyW2pdOw0KPiA+ICsJCQkJCQlsaXN0W3RdLm1fdS5pY2VfaXB2Nl9vZm9zX2hkci4NCj4gPiAr CQkJCQkJCWRzdF9hZGRyW2pdID0NCj4gPiArCQkJCQkJaXB2Nl9tYXNrLT5oZHIuZHN0X2FkZHJb al07DQo+ID4gKwkJCQkJfQ0KPiA+ICsJCQkJfQ0KPiA+ICsJCQkJaWYgKGlwdjZfbWFzay0+aGRy LnByb3RvID09IFVJTlQ4X01BWCkgew0KPiA+ICsNCj4gPiAJbGlzdFt0XS5oX3UuaWNlX2lwdjZf b2Zvc19oZHIubmV4dF9oZHIgPQ0KPiA+ICsJCQkJCQlpcHY2X3NwZWMtPmhkci5wcm90bzsNCj4g PiArDQo+ID4gCWxpc3RbdF0ubV91LmljZV9pcHY2X29mb3NfaGRyLm5leHRfaGRyID0NCj4gPiAr CQkJCQkJVUlOVDhfTUFYOw0KPiA+ICsJCQkJfQ0KPiA+ICsJCQkJaWYgKGlwdjZfbWFzay0+aGRy LmhvcF9saW1pdHMgPT0gVUlOVDhfTUFYKQ0KPiA+IHsNCj4gPiArCQkJCQlsaXN0W3RdLmhfdS5p Y2VfaXB2Nl9vZm9zX2hkci4NCj4gPiArCQkJCQlob3BfbGltaXQgPSBpcHY2X3NwZWMtDQo+ID4g Pmhkci5ob3BfbGltaXRzOw0KPiA+ICsJCQkJCWxpc3RbdF0ubV91LmljZV9pcHY2X29mb3NfaGRy Lg0KPiA+ICsJCQkJCQlob3BfbGltaXQgID0gVUlOVDhfTUFYOw0KPiA+ICsJCQkJfQ0KPiA+ICsJ CQkJdCsrOw0KPiA+ICsJCQl9IGVsc2UgaWYgKCFpcHY2X3NwZWMgJiYgIWlwdjZfbWFzaykgew0K PiA+ICsJCQkJbGlzdFt0XS50eXBlID0gKHR1bl90eXBlID09IElDRV9OT05fVFVOKSA/DQo+ID4g KwkJCQkJSUNFX0lQVjRfT0ZPUyA6IElDRV9JUFY0X0lMOw0KPiA+ICsJCQl9DQo+ID4gKwkJCWJy ZWFrOw0KPiA+ICsNCj4gPiArCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9VRFA6DQo+ID4gKwkJ CXVkcF9zcGVjID0gaXRlbS0+c3BlYzsNCj4gPiArCQkJdWRwX21hc2sgPSBpdGVtLT5tYXNrOw0K PiA+ICsJCQlpZiAodWRwX3NwZWMgJiYgdWRwX21hc2spIHsNCj4gPiArCQkJCWxpc3RbdF0udHlw ZSA9IElDRV9VRFBfSUxPUzsNCj4gPiArCQkJCWlmICh1ZHBfbWFzay0+aGRyLnNyY19wb3J0ID09 IFVJTlQxNl9NQVgpDQo+ID4gew0KPiA+ICsJCQkJCWxpc3RbdF0uaF91Lmw0X2hkci5zcmNfcG9y dCA9DQo+ID4gKwkJCQkJCXVkcF9zcGVjLT5oZHIuc3JjX3BvcnQ7DQo+ID4gKwkJCQkJbGlzdFt0 XS5tX3UubDRfaGRyLnNyY19wb3J0ID0NCj4gPiArCQkJCQkJdWRwX21hc2stPmhkci5zcmNfcG9y dDsNCj4gPiArCQkJCX0NCj4gPiArCQkJCWlmICh1ZHBfbWFzay0+aGRyLmRzdF9wb3J0ID09IFVJ TlQxNl9NQVgpDQo+ID4gew0KPiA+ICsJCQkJCWxpc3RbdF0uaF91Lmw0X2hkci5kc3RfcG9ydCA9 DQo+ID4gKwkJCQkJCXVkcF9zcGVjLT5oZHIuZHN0X3BvcnQ7DQo+ID4gKwkJCQkJbGlzdFt0XS5t X3UubDRfaGRyLmRzdF9wb3J0ID0NCj4gPiArCQkJCQkJdWRwX21hc2stPmhkci5kc3RfcG9ydDsN Cj4gPiArCQkJCX0NCj4gPiArCQkJCXQrKzsNCj4gPiArCQkJfSBlbHNlIGlmICghdWRwX3NwZWMg JiYgIXVkcF9tYXNrKSB7DQo+ID4gKwkJCQlsaXN0W3RdLnR5cGUgPSBJQ0VfVURQX0lMT1M7DQo+ ID4gKwkJCX0NCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2UgUlRFX0ZMT1dfSVRF TV9UWVBFX1RDUDoNCj4gPiArCQkJdGNwX3NwZWMgPSBpdGVtLT5zcGVjOw0KPiA+ICsJCQl0Y3Bf bWFzayA9IGl0ZW0tPm1hc2s7DQo+ID4gKwkJCWlmICh0Y3Bfc3BlYyAmJiB0Y3BfbWFzaykgew0K PiA+ICsJCQkJbGlzdFt0XS50eXBlID0gSUNFX1RDUF9JTDsNCj4gPiArCQkJCWlmICh0Y3BfbWFz ay0+aGRyLnNyY19wb3J0ID09IFVJTlQxNl9NQVgpIHsNCj4gPiArCQkJCQlsaXN0W3RdLmhfdS5s NF9oZHIuc3JjX3BvcnQgPQ0KPiA+ICsJCQkJCQl0Y3Bfc3BlYy0+aGRyLnNyY19wb3J0Ow0KPiA+ ICsJCQkJCWxpc3RbdF0ubV91Lmw0X2hkci5zcmNfcG9ydCA9DQo+ID4gKwkJCQkJCXRjcF9tYXNr LT5oZHIuc3JjX3BvcnQ7DQo+ID4gKwkJCQl9DQo+ID4gKwkJCQlpZiAodGNwX21hc2stPmhkci5k c3RfcG9ydCA9PSBVSU5UMTZfTUFYKSB7DQo+ID4gKwkJCQkJbGlzdFt0XS5oX3UubDRfaGRyLmRz dF9wb3J0ID0NCj4gPiArCQkJCQkJdGNwX3NwZWMtPmhkci5kc3RfcG9ydDsNCj4gPiArCQkJCQls aXN0W3RdLm1fdS5sNF9oZHIuZHN0X3BvcnQgPQ0KPiA+ICsJCQkJCQl0Y3BfbWFzay0+aGRyLmRz dF9wb3J0Ow0KPiA+ICsJCQkJfQ0KPiA+ICsJCQkJdCsrOw0KPiA+ICsJCQl9IGVsc2UgaWYgKCF0 Y3Bfc3BlYyAmJiAhdGNwX21hc2spIHsNCj4gPiArCQkJCWxpc3RbdF0udHlwZSA9IElDRV9UQ1Bf SUw7DQo+ID4gKwkJCX0NCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2UgUlRFX0ZM T1dfSVRFTV9UWVBFX1NDVFA6DQo+ID4gKwkJCXNjdHBfc3BlYyA9IGl0ZW0tPnNwZWM7DQo+ID4g KwkJCXNjdHBfbWFzayA9IGl0ZW0tPm1hc2s7DQo+ID4gKwkJCWlmIChzY3RwX3NwZWMgJiYgc2N0 cF9tYXNrKSB7DQo+ID4gKwkJCQlsaXN0W3RdLnR5cGUgPSBJQ0VfU0NUUF9JTDsNCj4gPiArCQkJ CWlmIChzY3RwX21hc2stPmhkci5zcmNfcG9ydCA9PSBVSU5UMTZfTUFYKQ0KPiA+IHsNCj4gPiAr CQkJCQlsaXN0W3RdLmhfdS5zY3RwX2hkci5zcmNfcG9ydCA9DQo+ID4gKwkJCQkJCXNjdHBfc3Bl Yy0+aGRyLnNyY19wb3J0Ow0KPiA+ICsJCQkJCWxpc3RbdF0ubV91LnNjdHBfaGRyLnNyY19wb3J0 ID0NCj4gPiArCQkJCQkJc2N0cF9tYXNrLT5oZHIuc3JjX3BvcnQ7DQo+ID4gKwkJCQl9DQo+ID4g KwkJCQlpZiAoc2N0cF9tYXNrLT5oZHIuZHN0X3BvcnQgPT0gVUlOVDE2X01BWCkNCj4gPiB7DQo+ ID4gKwkJCQkJbGlzdFt0XS5oX3Uuc2N0cF9oZHIuZHN0X3BvcnQgPQ0KPiA+ICsJCQkJCQlzY3Rw X3NwZWMtPmhkci5kc3RfcG9ydDsNCj4gPiArCQkJCQlsaXN0W3RdLm1fdS5zY3RwX2hkci5kc3Rf cG9ydCA9DQo+ID4gKwkJCQkJCXNjdHBfbWFzay0+aGRyLmRzdF9wb3J0Ow0KPiA+ICsJCQkJfQ0K PiA+ICsJCQkJdCsrOw0KPiA+ICsJCQl9IGVsc2UgaWYgKCFzY3RwX3NwZWMgJiYgIXNjdHBfbWFz aykgew0KPiA+ICsJCQkJbGlzdFt0XS50eXBlID0gSUNFX1NDVFBfSUw7DQo+ID4gKwkJCX0NCj4g PiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1ZYTEFO Og0KPiA+ICsJCQl2eGxhbl9zcGVjID0gaXRlbS0+c3BlYzsNCj4gPiArCQkJdnhsYW5fbWFzayA9 IGl0ZW0tPm1hc2s7DQo+ID4gKwkJCXR1bl90eXBlID0gSUNFX1NXX1RVTl9WWExBTjsNCj4gPiAr CQkJaWYgKHZ4bGFuX3NwZWMgJiYgdnhsYW5fbWFzaykgew0KPiA+ICsJCQkJbGlzdFt0XS50eXBl ID0gSUNFX1ZYTEFOOw0KPiA+ICsJCQkJaWYgKHZ4bGFuX21hc2stPnZuaVswXSA9PSBVSU5UOF9N QVggJiYNCj4gPiArCQkJCQl2eGxhbl9tYXNrLT52bmlbMV0gPT0gVUlOVDhfTUFYDQo+ID4gJiYN Cj4gPiArCQkJCQl2eGxhbl9tYXNrLT52bmlbMl0gPT0gVUlOVDhfTUFYKSB7DQo+ID4gKwkJCQkJ bGlzdFt0XS5oX3UudG5sX2hkci52bmkgPQ0KPiA+ICsJCQkJCQkodnhsYW5fc3BlYy0+dm5pWzFd IDw8IDgpIHwNCj4gPiArCQkJCQkJdnhsYW5fc3BlYy0+dm5pWzBdOw0KPiA+ICsJCQkJCWxpc3Rb dF0ubV91LnRubF9oZHIudm5pID0NCj4gPiArCQkJCQkJVUlOVDE2X01BWDsNCj4gDQo+IHZ4bGFu X3NwZWMtPnZuaVsyXSBkb2VzIG5vdCBuZWVkIHRvIGJlIHB1dCBpbnRvIHRoZSBsaXN0Pw0KDQpP bGQgU2hhcmUgY29kZSBvbmx5IHN1cHBvcnQgMTZiaXQgdm5pLCBub3QgMjRiaXQgLHNoYXJlIGNv ZGUgYnVnLg0KQnV0IHdlIHdpbGwgdXBkYXRlZCBpbiB2MyB0byAyNGJpdC4NCg0KDQo+IA0KPiA+ ICsJCQkJfQ0KPiA+ICsJCQkJdCsrOw0KPiA+ICsJCQl9IGVsc2UgaWYgKCF2eGxhbl9zcGVjICYm ICF2eGxhbl9tYXNrKSB7DQo+ID4gKwkJCQlsaXN0W3RdLnR5cGUgPSBJQ0VfVlhMQU47DQo+ID4g KwkJCX0NCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2UgUlRFX0ZMT1dfSVRFTV9U WVBFX05WR1JFOg0KPiA+ICsJCQludmdyZV9zcGVjID0gaXRlbS0+c3BlYzsNCj4gPiArCQkJbnZn cmVfbWFzayA9IGl0ZW0tPm1hc2s7DQo+ID4gKwkJCXR1bl90eXBlID0gSUNFX1NXX1RVTl9OVkdS RTsNCj4gPiArCQkJaWYgKG52Z3JlX3NwZWMgJiYgbnZncmVfbWFzaykgew0KPiA+ICsJCQkJbGlz dFt0XS50eXBlID0gSUNFX05WR1JFOw0KPiA+ICsJCQkJaWYgKG52Z3JlX21hc2stPnRuaVswXSA9 PSBVSU5UOF9NQVggJiYNCj4gPiArCQkJCQludmdyZV9tYXNrLT50bmlbMV0gPT0gVUlOVDhfTUFY DQo+ID4gJiYNCj4gPiArCQkJCQludmdyZV9tYXNrLT50bmlbMl0gPT0gVUlOVDhfTUFYKSB7DQo+ ID4gKwkJCQkJbGlzdFt0XS5oX3UubnZncmVfaGRyLnRuaSA9DQo+ID4gKwkJCQkJCShudmdyZV9z cGVjLT50bmlbMV0gPDwgOCkgfA0KPiA+ICsJCQkJCQludmdyZV9zcGVjLT50bmlbMF07DQo+ID4g KwkJCQkJbGlzdFt0XS5tX3UubnZncmVfaGRyLnRuaSA9DQo+ID4gKwkJCQkJCVVJTlQxNl9NQVg7 DQo+ID4gKwkJCQl9DQo+ID4gKwkJCQl0Kys7DQo+ID4gKwkJCX0gZWxzZSBpZiAoIW52Z3JlX3Nw ZWMgJiYgIW52Z3JlX21hc2spIHsNCj4gPiArCQkJCWxpc3RbdF0udHlwZSA9IElDRV9OVkdSRTsN Cj4gPiArCQkJfQ0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJY2FzZSBSVEVfRkxPV19J VEVNX1RZUEVfVk9JRDoNCj4gPiArCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9FTkQ6DQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlydGVfZmxvd19lcnJv cl9zZXQoZXJyb3IsIEVJTlZBTCwNCj4gPiArCQkJCSAgIFJURV9GTE9XX0VSUk9SX1RZUEVfSVRF TSwgYWN0aW9ucywNCj4gPiArCQkJCSAgICJJbnZhbGlkIHBhdHRlcm4gaXRlbS4iKTsNCj4gPiAr CQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJ1bGVfaW5mby0+ dHVuX3R5cGUgPSB0dW5fdHlwZTsNCj4gPiArCSpsa3Vwc19udW0gPSB0Ow0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICtvdXQ6DQo+IA0KPiBXZSBtYXkgbmVlZCB0byBmcmVlIHRoZSBhbGxv Y2F0ZWQgbGlzdCBiZWZvcmUgcmV0dXJuLg0KDQpObywgbGlzdFtdIG1lbW9yeSB3aWxsIGJlIHVz ZWQgaW4gbGF0ZXIgZnVuY3Rpb24uDQp3ZSBjYW4gbm90IGZyZWUgbm93Lg0KDQo+IA0KPiA+ICsJ cmV0dXJuIC1ydGVfZXJybm87DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEJ5IG5vdyBpY2Ugc3dp dGNoIGZpbHRlciBhY3Rpb24gY29kZSBpbXBsZW1lbnQgb25seQ0KPiA+ICsqIHN1cHBvcnRzIFFV RVVFIG9yIERST1AuDQo+ID4gKyovDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiAraWNlX3BhcnNlX3N3 aXRjaF9hY3Rpb24oc3RydWN0IGljZV9wZiAqcGYsDQo+ID4gKwkJCQkgY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbiAqYWN0aW9ucywNCj4gPiArCQkJCSBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3Ig KmVycm9yLA0KPiA+ICsJCQkJIHN0cnVjdCBpY2VfYWR2X3J1bGVfaW5mbyAqcnVsZV9pbmZvKSB7 DQo+ID4gKwlzdHJ1Y3QgaWNlX2h3ICpodyA9IElDRV9QRl9UT19IVyhwZik7DQo+ID4gKwlzdHJ1 Y3QgaWNlX3ZzaSAqdnNpID0gcGYtPm1haW5fdnNpOw0KPiA+ICsJY29uc3Qgc3RydWN0IHJ0ZV9m bG93X2FjdGlvbiAqYWN0Ow0KPiA+ICsJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9xdWV1 ZSAqYWN0X3E7DQo+ID4gKwl1aW50MTZfdCBiYXNlX3F1ZXVlLCBpbmRleCA9IDA7DQo+ID4gKwl1 aW50MzJfdCByZWc7DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgaWYgdGhlIGZpcnN0IG5vbi12b2lk IGFjdGlvbiBpcyBRVUVVRSBvciBEUk9QLiAqLw0KPiA+ICsJTkVYVF9JVEVNX09GX0FDVElPTihh Y3QsIGFjdGlvbnMsIGluZGV4KTsNCj4gPiArCWlmIChhY3QtPnR5cGUgIT0gUlRFX0ZMT1dfQUNU SU9OX1RZUEVfUVVFVUUgJiYNCj4gPiArCSAgICBhY3QtPnR5cGUgIT0gUlRFX0ZMT1dfQUNUSU9O X1RZUEVfRFJPUCkgew0KPiA+ICsJCXJ0ZV9mbG93X2Vycm9yX3NldChlcnJvciwgRUlOVkFMLA0K PiA+IFJURV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9OLA0KPiA+ICsJCQkJICAgYWN0LCAiTm90IHN1 cHBvcnRlZCBhY3Rpb24uIik7DQo+ID4gKwkJcmV0dXJuIC1ydGVfZXJybm87DQo+ID4gKwl9DQo+ ID4gKwlyZWcgPSBJQ0VfUkVBRF9SRUcoaHcsIFBGTEFOX1JYX1FBTExPQyk7DQo+ID4gKwlpZiAo cmVnICYgUEZMQU5fUlhfUUFMTE9DX1ZBTElEX00pIHsNCj4gPiArCQliYXNlX3F1ZXVlID0gcmVn ICYgUEZMQU5fUlhfUUFMTE9DX0ZJUlNUUV9NOw0KPiANCj4gQ2FuIHdlIGdldCB0aGlzIHJlZ2lz dGVyIGluZm8gZWFybGllciBpbiBkZXZfc3RhcnQoKSBvciBzb21ld2hlcmUgZWxzZT8gVGhlbiB3 ZQ0KPiBjYW4gdXNlIHRoZSBiYXNlX3F1ZXVlIGRpcmVjdGx5Lg0KDQpNYXliZSwgaXQgY2FuIGJl IHVzZWQgZm9yIG90aGVyIGNhc2UuDQoNCg0KPiANCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJcnRl X2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFSU5WQUwsDQo+ID4gKwkJCVJURV9GTE9XX0VSUk9SX1RZ UEVfQUNUSU9OLA0KPiA+ICsJCQlhY3QsICJJbnZhbGlkIHF1ZXVlIHJlZ2lzdGVyIik7DQo+ID4g KwkJcmV0dXJuIC1ydGVfZXJybm87DQo+ID4gKwl9DQo+ID4gKwlpZiAoYWN0LT50eXBlID09IFJU RV9GTE9XX0FDVElPTl9UWVBFX1FVRVVFKSB7DQo+ID4gKwkJYWN0X3EgPSBhY3QtPmNvbmY7DQo+ ID4gKwkJcnVsZV9pbmZvLT5zd19hY3QuZmx0cl9hY3QgPSBJQ0VfRldEX1RPX1E7DQo+ID4gKwkJ cnVsZV9pbmZvLT5zd19hY3QuZndkX2lkLnFfaWQgPSBiYXNlX3F1ZXVlICsgYWN0X3EtPmluZGV4 Ow0KPiA+ICsJCWlmIChhY3RfcS0+aW5kZXggPj0gcGYtPmRldl9kYXRhLT5uYl9yeF9xdWV1ZXMp IHsNCj4gPiArCQkJcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFSU5WQUwsDQo+ID4gKwkJCQlS VEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gPiArCQkJCWFjdCwgIkludmFsaWQgcXVldWUg SUQgZm9yIg0KPiA+ICsJCQkJIiBzd2l0Y2ggZmlsdGVyLiIpOw0KPiA+ICsJCQlyZXR1cm4gLXJ0 ZV9lcnJubzsNCj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJ1bGVfaW5mby0+c3df YWN0LmZsdHJfYWN0ID0gSUNFX0RST1BfUEFDS0VUOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJ1 bGVfaW5mby0+c3dfYWN0LnZzaV9oYW5kbGUgPSB2c2ktPmlkeDsNCj4gPiArCXJ1bGVfaW5mby0+ cnggPSAxOw0KPiA+ICsJcnVsZV9pbmZvLT5zd19hY3Quc3JjID0gdnNpLT5pZHg7DQo+ID4gKw0K PiA+ICsJLyogQ2hlY2sgaWYgdGhlIG5leHQgbm9uLXZvaWQgaXRlbSBpcyBFTkQgKi8NCj4gPiAr CWluZGV4Kys7DQo+ID4gKwlORVhUX0lURU1fT0ZfQUNUSU9OKGFjdCwgYWN0aW9ucywgaW5kZXgp Ow0KPiA+ICsJaWYgKGFjdC0+dHlwZSAhPSBSVEVfRkxPV19BQ1RJT05fVFlQRV9FTkQpIHsNCj4g PiArCQlydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVJTlZBTCwNCj4gPiBSVEVfRkxPV19FUlJP Ul9UWVBFX0FDVElPTiwNCj4gPiArCQkJCSAgIGFjdCwgIk5vdCBzdXBwb3J0ZWQgYWN0aW9uLiIp Ow0KPiA+ICsJCXJldHVybiAtcnRlX2Vycm5vOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2ljZV9zd2l0Y2hfcnVs ZV9zZXQoc3RydWN0IGljZV9wZiAqcGYsDQo+ID4gKwkJCXN0cnVjdCBpY2VfYWR2X2xrdXBfZWxl bSAqbGlzdCwNCj4gPiArCQkJdWludDE2X3QgbGt1cHNfY250LA0KPiA+ICsJCQlzdHJ1Y3QgaWNl X2Fkdl9ydWxlX2luZm8gKnJ1bGVfaW5mbywNCj4gPiArCQkJc3RydWN0IHJ0ZV9mbG93ICpmbG93 KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaWNlX2h3ICpodyA9IElDRV9QRl9UT19IVyhwZik7DQo+ ID4gKwlpbnQgcmV0Ow0KPiA+ICsJc3RydWN0IGljZV9ydWxlX3F1ZXJ5X2RhdGEgcnVsZV9hZGRl ZCA9IHswfTsNCj4gPiArCXN0cnVjdCBpY2VfcnVsZV9xdWVyeV9kYXRhICpmaWx0ZXJfcHRyOw0K PiA+ICsNCj4gPiArCWlmIChsa3Vwc19jbnQgPiBJQ0VfTUFYX0NIQUlOX1dPUkRTKSB7DQo+ID4g KwkJUE1EX0RSVl9MT0coRVJSLCAiaXRlbSBudW1iZXIgdG9vIGxhcmdlIGZvciBydWxlIik7DQo+ IA0KPiBXaHkgbm90IHJ0ZV9mbG93X2Vycm9yX3NldCgpIHRvIHJlcG9ydCBlcnJvcj8NCg0KT2ss IFVwZGF0ZSBpbiB2Mw0KDQo+IA0KPiA+ICsJCXJldHVybiAtRU5PVFNVUDsNCj4gPiArCX0NCj4g PiArCWlmICghbGlzdCkgew0KPiA+ICsJCVBNRF9EUlZfTE9HKEVSUiwgImxvb2t1cCBsaXN0IHNo b3VsZCBub3QgYmUgTlVMTCIpOw0KPiANCj4gRGl0dG8uDQo+IA0KPiA+ICsJCXJldHVybiAtRU5P VFNVUDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBpY2VfYWRkX2Fkdl9ydWxlKGh3LCBs aXN0LCBsa3Vwc19jbnQsIHJ1bGVfaW5mbywgJnJ1bGVfYWRkZWQpOw0KPiA+ICsNCj4gPiArCWlm ICghcmV0KSB7DQo+ID4gKwkJZmlsdGVyX3B0ciA9IHJ0ZV96bWFsbG9jKCJpY2Vfc3dpdGNoX2Zp bHRlciIsDQo+ID4gKwkJCXNpemVvZihzdHJ1Y3QgaWNlX3J1bGVfcXVlcnlfZGF0YSksIDApOw0K PiA+ICsJCWlmICghZmlsdGVyX3B0cikgew0KPiA+ICsJCQlQTURfRFJWX0xPRyhFUlIsICJmYWls ZWQgdG8gYWxsb2NhdGUgbWVtb3J5Iik7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJ CX0NCj4gPiArCQlmbG93LT5ydWxlID0gZmlsdGVyX3B0cjsNCj4gPiArCQlydGVfbWVtY3B5KGZp bHRlcl9wdHIsDQo+ID4gKwkJCSZydWxlX2FkZGVkLA0KPiA+ICsJCQlzaXplb2Yoc3RydWN0IGlj ZV9ydWxlX3F1ZXJ5X2RhdGEpKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQNCj4gPiAraWNlX2NyZWF0ZV9zd2l0Y2hfZmlsdGVyKHN0 cnVjdCBpY2VfcGYgKnBmLA0KPiA+ICsJCQljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSBwYXR0 ZXJuW10sDQo+ID4gKwkJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gYWN0aW9uc1tdLA0K PiA+ICsJCQlzdHJ1Y3QgcnRlX2Zsb3cgKmZsb3csDQo+ID4gKwkJCXN0cnVjdCBydGVfZmxvd19l cnJvciAqZXJyb3IpDQo+ID4gK3sNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsJc3RydWN0IGlj ZV9hZHZfcnVsZV9pbmZvIHJ1bGVfaW5mbyA9IHswfTsNCj4gPiArCXN0cnVjdCBpY2VfYWR2X2xr dXBfZWxlbSAqbGlzdCA9IE5VTEw7DQo+ID4gKwl1aW50MTZfdCBsa3Vwc19udW0gPSAwOw0KPiA+ ICsNCj4gPiArCXJldCA9IGljZV9wYXJzZV9zd2l0Y2hfZmlsdGVyKHBhdHRlcm4sIGFjdGlvbnMs IGVycm9yLA0KPiA+ICsJCQkmcnVsZV9pbmZvLCAmbGlzdCwgJmxrdXBzX251bSk7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArCXJldCA9IGljZV9wYXJzZV9z d2l0Y2hfYWN0aW9uKHBmLCBhY3Rpb25zLCBlcnJvciwgJnJ1bGVfaW5mbyk7DQo+ID4gKwlpZiAo cmV0KQ0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArCXJldCA9IGljZV9zd2l0Y2hfcnVs ZV9zZXQocGYsIGxpc3QsIGxrdXBzX251bSwgJnJ1bGVfaW5mbywgZmxvdyk7DQo+ID4gKwlpZiAo cmV0KQ0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArCXJ0ZV9mcmVlKGxpc3QpOw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKwlydGVfZnJlZShsaXN0KTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gLXJ0ZV9lcnJubzsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50DQo+ ID4gK2ljZV9kZXN0cm95X3N3aXRjaF9maWx0ZXIoc3RydWN0IGljZV9wZiAqcGYsDQo+ID4gKwkJ CXN0cnVjdCBydGVfZmxvdyAqZmxvdykNCj4gPiArew0KPiA+ICsJc3RydWN0IGljZV9odyAqaHcg PSBJQ0VfUEZfVE9fSFcocGYpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArCXN0cnVjdCBpY2VfcnVs ZV9xdWVyeV9kYXRhICpmaWx0ZXJfcHRyOw0KPiA+ICsJc3RydWN0IGljZV9ydWxlX3F1ZXJ5X2Rh dGEgcnVsZV9hZGRlZDsNCj4gPiArDQo+ID4gKwlmaWx0ZXJfcHRyID0gKHN0cnVjdCBpY2VfcnVs ZV9xdWVyeV9kYXRhICopDQo+ID4gKwkJCWZsb3ctPnJ1bGU7DQo+ID4gKwlydGVfbWVtY3B5KCZy dWxlX2FkZGVkLCBmaWx0ZXJfcHRyLA0KPiA+ICsJCXNpemVvZihzdHJ1Y3QgaWNlX3J1bGVfcXVl cnlfZGF0YSkpOw0KPiA+ICsNCj4gPiArCWlmICghZmlsdGVyX3B0cikgew0KPiA+ICsJCVBNRF9E UlZfTE9HKEVSUiwgIm5vIHN1Y2ggZmxvdyINCj4gPiArCQkJICAgICIgY3JlYXRlIGJ5IHN3aXRj aCBmaWx0ZXIiKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gDQo+IFdlIHNo b3VsZCBkbyB0aGlzIGNoZWNrIGF0IGxlYXN0IGJlZm9yZSBydGVfbWVtY3B5Lg0KDQpPaywgdXBk YXRlIGluIHYzDQoNCj4gDQo+ID4gKw0KPiA+ICsJcmV0ID0gaWNlX3JlbV9hZHZfcnVsZV9ieV9p ZChodywgJnJ1bGVfYWRkZWQpOw0KPiANCj4gV2UgY2FuIHVzZSBmaWx0ZXJfcHRyIGRpcmVjdGx5 IGZvciB0aGUgc3dpdGNoIHJ1bGUgZGVsZXRlLg0KDQoNCk9rLCB1cGRhdGUgaW4gdjMNCg0KPiAN Cj4gPiArDQo+ID4gKwlydGVfZnJlZShmaWx0ZXJfcHRyKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g cmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2ljZV9mcmVlX3N3aXRjaF9maWx0 ZXJfcnVsZSh2b2lkICpydWxlKSB7DQo+ID4gKwlzdHJ1Y3QgaWNlX3J1bGVfcXVlcnlfZGF0YSAq ZmlsdGVyX3B0cjsNCj4gPiArDQo+ID4gKwlmaWx0ZXJfcHRyID0gKHN0cnVjdCBpY2VfcnVsZV9x dWVyeV9kYXRhICopcnVsZTsNCj4gPiArDQo+ID4gKwlydGVfZnJlZShmaWx0ZXJfcHRyKTsNCj4g PiArfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pY2UvaWNlX3N3aXRjaF9maWx0ZXIu aA0KPiA+IGIvZHJpdmVycy9uZXQvaWNlL2ljZV9zd2l0Y2hfZmlsdGVyLmgNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjk1N2QwZDENCj4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvaWNlL2ljZV9zd2l0Y2hfZmlsdGVyLmgNCj4gPiBA QCAtMCwwICsxLDI4IEBADQo+IA0KPiBBbHNvIGEgbGljZW5zZSBpcyBuZWVkZWQgaW4gbmV3IGZp bGUuDQoNCg0KT2ssIHVwZGF0ZSBpbiB2Mw0KDQo+IA0KPiBCUnMsDQo+IFhpYW8NCj4gDQo+ID4g KyNpZm5kZWYgX0lDRV9TV0lUQ0hfRklMVEVSX0hfDQo+ID4gKyNkZWZpbmUgX0lDRV9TV0lUQ0hf RklMVEVSX0hfDQoNCg==