From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v1,2/3] usb: dwc2: Change ISOC DDMA flow From: "Zengtao \(B\)" Message-Id: <678F3D1BB717D949B966B68EAEB446ED0C883DB5@DGGEMM506-MBX.china.huawei.com> Date: Wed, 21 Mar 2018 02:17:37 +0000 To: Minas Harutyunyan , John Youn , Felipe Balbi , Greg Kroah-Hartman , "linux-usb@vger.kernel.org" List-ID: Pi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogbGludXgtdXNiLW93bmVyQHZnZXIu a2VybmVsLm9yZw0KPlttYWlsdG86bGludXgtdXNiLW93bmVyQHZnZXIua2VybmVsLm9yZ10gT24g QmVoYWxmIE9mIE1pbmFzIEhhcnV0eXVueWFuDQo+U2VudDogVHVlc2RheSwgTWFyY2ggMjAsIDIw MTggMTA6NDAgUE0NCj5UbzogWmVuZ3RhbyAoQikgPHByaW1lLnplbmdAaGlzaWxpY29uLmNvbT47 IE1pbmFzIEhhcnV0eXVueWFuDQo+PE1pbmFzLkhhcnV0eXVueWFuQHN5bm9wc3lzLmNvbT47IEpv aG4gWW91biA8Sm9obi5Zb3VuQHN5bm9wc3lzLmNvbT47DQo+RmVsaXBlIEJhbGJpIDxiYWxiaUBr ZXJuZWwub3JnPjsgR3JlZyBLcm9haC1IYXJ0bWFuDQo+PGdyZWdraEBsaW51eGZvdW5kYXRpb24u b3JnPjsgbGludXgtdXNiQHZnZXIua2VybmVsLm9yZw0KPlN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEg Mi8zXSB1c2I6IGR3YzI6IENoYW5nZSBJU09DIERETUEgZmxvdw0KPg0KPkhpIFplbmd0YW8sDQo+ DQo+T24gMy8yMC8yMDE4IDY6MDEgQU0sIFplbmd0YW8gKEIpIHdyb3RlOg0KPj4gSGkgTWluYXM6 DQo+Pg0KPj4NCj4+DQo+PiBBIGZldyBtaW5vciBjb21tZW50czoNCj4+DQo+Pg0KPj4NCj4+PiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4NCj4+PiBGcm9tOiBsaW51eC11c2Itb3duZXJA dmdlci5rZXJuZWwub3JnDQo+Pg0KPj4+IFttYWlsdG86bGludXgtdXNiLW93bmVyQHZnZXIua2Vy bmVsLm9yZ10gT24gQmVoYWxmIE9mIE1pbmFzDQo+Pj4gSGFydXR5dW55YW4NCj4+DQo+Pj4gU2Vu dDogU2F0dXJkYXksIE1hcmNoIDE3LCAyMDE4IDU6MTAgUE0NCj4+DQo+Pj4gVG86IEpvaG4gWW91 biA8Sm9obi5Zb3VuQHN5bm9wc3lzLmNvbT47IEZlbGlwZSBCYWxiaQ0KPj4+IDxiYWxiaUBrZXJu ZWwub3JnPjsNCj4+DQo+Pj4gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0 aW9uLm9yZz47DQo+Pj4gbGludXgtdXNiQHZnZXIua2VybmVsLm9yZw0KPj4NCj4+PiBDYzogTWlu YXMgSGFydXR5dW55YW4gPE1pbmFzLkhhcnV0eXVueWFuQHN5bm9wc3lzLmNvbT4NCj4+DQo+Pj4g U3ViamVjdDogW1BBVENIIHYxIDIvM10gdXNiOiBkd2MyOiBDaGFuZ2UgSVNPQyBERE1BIGZsb3cN Cj4+DQo+Pj4NCj4+DQo+Pj4gQ2hhbmdlZCBleGlzdGluZyB0d28gZGVzY3JpcHRvci1jaGFpbiBm bG93IHRvIG9uZSBjaGFpbi4NCj4+DQo+Pj4NCj4+DQo+Pj4gSW4gdHdvLWNoYWluIGltcGxlbWVu dGF0aW9uIEJOQSBpbnRlcnJ1cHQgdXNlZCBmb3Igc3dpdGNoaW5nIGJldHdlZW4NCj4+PiB0d28N Cj4+DQo+Pj4gY2hhaW5zLiBCTkEgaW50ZXJydXB0IGFzc2VydGVkIGJlY2F1c2Ugb2YgcmV0dXJu aW5nIHRvIGJlZ2lubmluZyBvZg0KPj4+IHRoZSBjaGFpbg0KPj4NCj4+PiBiYXNlZCBvbiBMLWJp dCBvZiBsYXN0IGRlc2NyaXB0b3IuDQo+Pg0KPj4+DQo+Pg0KPj4+IEJlY2F1c2Ugb2YgdGhhdCB3 ZSBsb3NlIHBhY2tldHMuIFRoaXMgaXNzdWUgcmVzb2x2ZWQgYnkgdXNpbmcgb25lIGRlc2MtY2hh aW4uDQo+Pg0KPj4+DQo+Pg0KPj4+IFJlbW92ZWQgYWxsIHN0YWZmIHJlbGF0ZWQgdG8gdHdvIGRl c2MtY2hhaW4gZmxvdyBmcm9tIERETUEgSVNPQw0KPj4+IHJlbGF0ZWQNCj4+DQo+Pj4gZnVuY3Rp b25zLg0KPj4NCj4+Pg0KPj4NCj4+PiBSZW1vdmVkIHJlcXVlc3QgbGVuZ3RoIGNoZWNraW5nIGZy b20gZHdjMl9nYWRnZXRfZmlsbF9pc29jX2Rlc2MoKQ0KPmZ1bmN0aW9uLg0KPj4NCj4+PiBSZXF1 ZXN0IGxlbmd0aCBjaGVja2luZyBhZGRlZCB0byBkd2MyX2hzb3RnX2VwX3F1ZXVlKCkgZnVuY3Rp b24uIElmDQo+Pj4gcmVxdWVzdA0KPj4NCj4+PiBsZW5ndGggZ3JlYXRlciB0aGFuIGRlc2NyaXB0 b3IgbGltaXRzIHRoZW4gcmVxdWVzdCBub3QgYWRkZWQgdG8gcXVldWUuDQo+Pg0KPj4+IEFkZGl0 aW9uYWwgY2hlY2tpbmcgZG9uZSBmb3IgSGlnaCBCYW5kd2lkdGggSVNPQyBPVVQncyB3aGljaCBu b3QNCj4+PiBzdXBwb3J0ZWQgYnkNCj4+DQo+Pj4gZHJpdmVyLiBJbg0KPj4NCj4+PiBkd2MyX2dh ZGdldF9maWxsX2lzb2NfZGVzYygpIGZ1bmN0aW9uIGFsc28gY2hlY2tlZCBkZXNjLWNoYWluIHN0 YXR1cw0KPj4+IChmdWxsIG9yIG5vdCkNCj4+DQo+Pj4gdG8gYXZvaWQgb2YgcmV1c2luZyBub3Qg eWV0IHByb2Nlc3NlZCBkZXNjcmlwdG9ycy4NCj4+DQo+Pj4NCj4+DQo+Pj4gSW4gZHdjMl9nYWRn ZXRfc3RhcnRfaXNvY19kZG1hKCkgZnVuY3Rpb24gY3JlYXRpb24gb2YgZGVzYy1jaGFpbg0KPj4+ IGFsd2F5cw0KPj4NCj4+PiBzdGFydGVkIGZyb20gZGVzY3JpcHRvciAwLiBCZWZvcmUgZmlsbGlu ZyBkZXNjcmlwdG9ycywgdGhleSB3ZXJlDQo+Pj4gaW5pdGlhbGl6ZWQgYnkNCj4+DQo+Pj4gSE9T VCBCVVNZIHN0YXR1cy4NCj4+DQo+Pj4NCj4+DQo+Pj4gSW4gZHdjMl9nYWRnZXRfY29tcGxldGVf aXNvY19yZXF1ZXN0X2RkbWEoKSBhZGRlZCBjaGVja2luZyBmb3INCj4+PiBkZXNjLWNoYWluDQo+ Pg0KPj4+IHJvbGxvdmVyLiBBbHNvIGFkZGVkIGNoZWNraW5nIGNvbXBsZXRpb24gc3RhdHVzLg0K Pj4NCj4+PiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgaWYgREVWX0RNQV9TVFMgaXMg REVWX0RNQV9TVFNfU1VDQywNCj4+DQo+Pj4gb3RoZXJ3aXNlIGNvbXBsZXRlIHdpdGggLUVUSU1F RE9VVC4NCj4+DQo+Pj4NCj4+DQo+Pj4gQWN0dWFsbHkgcmVtb3ZlZCBkd2MyX2dhZGdldF9zdGFy dF9uZXh0X2lzb2NfZGRtYSgpIGZ1bmN0aW9uIGJlY2F1c2UNCj4+PiBub3cNCj4+DQo+Pj4gZHJp dmVyIHVzZSBvbmx5IG9uZSBkZXNjLWNoYWluIGFuZCBpbnN0ZWFkIHRoYXQgZnVuY3Rpb24gYWRk ZWQNCj4+DQo+Pj4gZHdjMl9nYWRnZXRfaGFuZGxlX2lzb2NfYm5hKCkgZnVuY3Rpb24gZm9yIGhh bmRsaW5nIEJOQSBpbnRlcnJ1cHRzLg0KPj4NCj4+Pg0KPj4NCj4+PiBIYW5kbGluZyBCTkEgaW50 ZXJydXB0IGRvbmUgYnkgZmx1c2hpbmcgVHhGSUZPcyBmb3IgT1VUIEVQcywNCj4+PiBjb21wbGV0 aW5nDQo+Pg0KPj4+IHJlcXVlc3Qgd2l0aCAtRUlPIGFuZCByZXNldHRpbmcgZGVzYy1jaGFpbiBu dW1iZXIgYW5kIHRhcmdldCBmcmFtZSB0bw0KPj4+IGluaXRpYWwNCj4+DQo+Pj4gdmFsdWVzIGZv ciByZXN0YXJ0aW5nIHRyYW5zZmVycy4NCj4+DQo+Pj4NCj4+DQo+Pj4gT24gaGFuZGxpbmcgTkFL IHJlcXVlc3QgY29tcGxldGVkIHdpdGggLUVOT0RBVEEuIEluY3JlbWVudGVkIHRhcmdldA0KPj4+ IGZyYW1lDQo+Pg0KPj4+IHRvIGFsbG93IGZpbGwgZGVzYyBjaGFpbiBhbmQgc3RhcnQgdHJhbnNm ZXJzLg0KPj4NCj4+PiBJbiBERE1BIG1vZGUgYXZvaWRlZCBvZiBmcmFtZSBudW1iZXIgaW5jcmVt ZW50aW5nLCBiZWNhdXNlIHRyYWNraW5nDQo+Pj4gb2YNCj4+DQo+Pj4gZnJhbWUgbnVtYmVyIHBl cmZvcm1lZCBpbiBkd2MyX2dhZGdldF9maWxsX2lzb2NfZGVzYygpIGZ1bmN0aW9uLg0KPj4NCj4+ Pg0KPj4NCj4+PiBXaGVuIGNvcmUgYXNzZXJ0IFhmZXJDb21wbCBhbG9uZyB3aXRoIEJOQSwgd2Ug c2hvdWxkIGlnbm9yZSBYZmVyQ29tcGwNCj4+PiBpbg0KPj4NCj4+PiBkd2MyX2hzb3RnX2VwaW50 KCkgZnVuY3Rpb24uDQo+Pg0KPj4+DQo+Pg0KPj4+IE9uIEJOQSBpbnRlcnJ1cHQgcmVwbGFjZWQg ZHdjMl9nYWRnZXRfc3RhcnRfbmV4dF9pc29jX2RkbWEoKSBieSBhYm92ZQ0KPj4NCj4+PiBtZW50 aW9uZWQgQk5BIGhhbmRsZXIuDQo+Pg0KPj4+DQo+Pg0KPj4+IEluIGR3YzJfaHNvdGdfZXBfZW5h YmxlKCkgZnVuY3Rpb24gYWRkZWQgc2FuaXR5IGNoZWNrIG9mIGJJbnRlcnZhbA0KPj4+IGZvciBJ U09DIElODQo+Pg0KPj4+IGluIERETUEgbW9kZSwgYmVjYXVzZSBIVyBub3Qgc3VwcG9ydGVkIEVQ J3Mgd2l0aCBiSW50ZXJ2YWwgbW9yZSB0aGFuIDEyLg0KPj4NCj4+Pg0KPj4NCj4+PiBTaWduZWQt b2ZmLWJ5OiBNaW5hcyBIYXJ1dHl1bnlhbiA8aG1pbmFzQHN5bm9wc3lzLmNvbT4NCj4+DQo+Pj4g LS0tDQo+Pg0KPj4+IGRyaXZlcnMvdXNiL2R3YzIvY29yZS5oICAgfCAgIDIgLQ0KPj4NCj4+PiBk cml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jIHwgMjM1DQo+Pj4gKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4NCj4+PiAyIGZpbGVzIGNoYW5nZWQsIDExMyBp bnNlcnRpb25zKCspLCAxMjQgZGVsZXRpb25zKC0pDQo+Pg0KPj4+DQo+Pg0KPj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuaCBiL2RyaXZlcnMvdXNiL2R3YzIvY29yZS5oIGlu ZGV4DQo+Pg0KPj4+IGQ4M2JlNTY1MWY4Ny4uMDkzZDA3OGFkYWY0IDEwMDY0NA0KPj4NCj4+PiAt LS0gYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuaA0KPj4NCj4+PiArKysgYi9kcml2ZXJzL3VzYi9k d2MyL2NvcmUuaA0KPj4NCj4+PiBAQCAtMTc4LDcgKzE3OCw2IEBAIHN0cnVjdCBkd2MyX2hzb3Rn X3JlcTsNCj4+DQo+Pj4gICAqIEBkZXNjX2xpc3RfZG1hOiBUaGUgRE1BIGFkZHJlc3Mgb2YgZGVz Y3JpcHRvciBjaGFpbiBjdXJyZW50bHkgaW4gdXNlLg0KPj4NCj4+PiAgICogQGRlc2NfbGlzdDog UG9pbnRlciB0byBkZXNjcmlwdG9yIERNQSBjaGFpbiBoZWFkIGN1cnJlbnRseSBpbiB1c2UuDQo+ Pg0KPj4+ICAgKiBAZGVzY19jb3VudDogQ291bnQgb2YgZW50cmllcyB3aXRoaW4gdGhlIERNQSBk ZXNjcmlwdG9yIGNoYWluIG9mIEVQLg0KPj4NCj4+PiAtICogQGlzb2NfY2hhaW5fbnVtOiBOdW1i ZXIgb2YgSVNPQyBjaGFpbiBjdXJyZW50bHkgaW4gdXNlIC0gZWl0aGVyIDAgb3IgMS4NCj4+DQo+ Pj4gICAqIEBuZXh0X2Rlc2M6IGluZGV4IG9mIG5leHQgZnJlZSBkZXNjcmlwdG9yIGluIHRoZSBJ U09DIGNoYWluIHVuZGVyDQo+Pj4gU1cNCj4+DQo+Pj4gY29udHJvbC4NCj4+DQo+Pj4gICAqIEB0 b3RhbF9kYXRhOiBUaGUgdG90YWwgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgZG9uZS4NCj4+DQo+Pj4g ICAqIEBmaWZvX3NpemU6IFRoZSBzaXplIG9mIHRoZSBGSUZPIChmb3IgcGVyaW9kaWMgSU4gZW5k cG9pbnRzKSBAQA0KPj4+IC0yMzEsNw0KPj4NCj4+PiArMjMwLDYgQEAgc3RydWN0IGR3YzJfaHNv dGdfZXAgew0KPj4NCj4+PiAJc3RydWN0IGR3YzJfZG1hX2Rlc2MJKmRlc2NfbGlzdDsNCj4+DQo+ Pj4gCXU4CQkJZGVzY19jb3VudDsNCj4+DQo+Pj4NCj4+DQo+Pj4gLQl1bnNpZ25lZCBjaGFyCQlp c29jX2NoYWluX251bTsNCj4+DQo+Pj4gCXVuc2lnbmVkIGludAkJbmV4dF9kZXNjOw0KPj4NCj4+ Pg0KPj4NCj4+PiAJY2hhciAgICAgICAgICAgICAgICAgICAgbmFtZVsxMF07DQo+Pg0KPj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jIGIvZHJpdmVycy91c2IvZHdjMi9n YWRnZXQuYw0KPj4+IGluZGV4DQo+Pg0KPj4+IGMyMzEzMjE2NTZmOS4uMWI5Yzg0Y2I1OGZiIDEw MDY0NA0KPj4NCj4+PiAtLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jDQo+Pg0KPj4+ICsr KyBiL2RyaXZlcnMvdXNiL2R3YzIvZ2FkZ2V0LmMNCj4+DQo+Pj4gQEAgLTc5Myw5ICs3OTMsNyBA QCBzdGF0aWMgdm9pZA0KPj4NCj4+PiBkd2MyX2dhZGdldF9jb25maWdfbm9uaXNvY194ZmVyX2Rk bWEoc3RydWN0IGR3YzJfaHNvdGdfZXAgKmhzX2VwLA0KPj4NCj4+PiAgICogQGRtYV9idWZmOiB1 c2IgcmVxdWVzdHMgZG1hIGJ1ZmZlci4NCj4+DQo+Pj4gICAqIEBsZW46IHVzYiByZXF1ZXN0IHRy YW5zZmVyIGxlbmd0aC4NCj4+DQo+Pj4gICAqDQo+Pg0KPj4+IC0gKiBGaW5kcyBvdXQgaW5kZXgg b2YgZmlyc3QgZnJlZSBlbnRyeSBlaXRoZXIgaW4gdGhlIGJvdHRvbSBvciB1cA0KPj4+IGhhbGYg b2YNCj4+DQo+Pj4gLSAqIGRlc2NyaXB0b3IgY2hhaW4gZGVwZW5kIG9uIHdoaWNoIGlzIHVuZGVy IFNXIGNvbnRyb2wgYW5kIG5vdA0KPj4+IHByb2Nlc3NlZA0KPj4NCj4+PiAtICogYnkgSFcuIFRo ZW4gZmlsbHMgdGhhdCBkZXNjcmlwdG9yIHdpdGggdGhlIGRhdGEgb2YgdGhlIGFycml2ZWQNCj4+ PiB1c2IgcmVxdWVzdCwNCj4+DQo+Pj4gKyAqIEZpbGxzIG5leHQgZnJlZSBkZXNjcmlwdG9yIHdp dGggdGhlIGRhdGEgb2YgdGhlIGFycml2ZWQgdXNiDQo+Pj4gKyByZXF1ZXN0LA0KPj4NCj4+PiAg ICogZnJhbWUgaW5mbywgc2V0cyBMYXN0IGFuZCBJT0MgYml0cyBpbmNyZW1lbnRzIG5leHRfZGVz Yy4gSWYNCj4+PiBmaWxsZWQNCj4+DQo+Pj4gICAqIGRlc2NyaXB0b3IgaXMgbm90IHRoZSBmaXJz dCBvbmUsIHJlbW92ZXMgTCBiaXQgZnJvbSB0aGUgcHJldmlvdXMNCj4+PiBkZXNjcmlwdG9yDQo+ Pg0KPj4+ICAgKiBzdGF0dXMuDQo+Pg0KPj4+IEBAIC04MTAsMzQgKzgwOCwxNyBAQCBzdGF0aWMg aW50IGR3YzJfZ2FkZ2V0X2ZpbGxfaXNvY19kZXNjKHN0cnVjdA0KPj4NCj4+PiBkd2MyX2hzb3Rn X2VwICpoc19lcCwNCj4+DQo+Pj4gCXUzMiBtYXNrID0gMDsNCj4+DQo+Pj4NCj4+DQo+Pj4gCW1h eHNpemUgPSBkd2MyX2dhZGdldF9nZXRfZGVzY19wYXJhbXMoaHNfZXAsICZtYXNrKTsNCj4+DQo+ Pj4gLQlpZiAobGVuID4gbWF4c2l6ZSkgew0KPj4NCj4+PiAtCQlkZXZfZXJyKGhzb3RnLT5kZXYs ICJ3cm9uZyBsZW4gJWRcbiIsIGxlbik7DQo+Pg0KPj4+IC0JCXJldHVybiAtRUlOVkFMOw0KPj4N Cj4+PiAtCX0NCj4+DQo+Pj4gLQ0KPj4NCj4+PiAtCS8qDQo+Pg0KPj4+IC0JICogSWYgU1cgaGFz IGFscmVhZHkgZmlsbGVkIGhhbGYgb2YgY2hhaW4sIHRoZW4gcmV0dXJuIGFuZCB3YWl0IGZvcg0K Pj4NCj4+PiAtCSAqIHRoZSBvdGhlciBjaGFpbiB0byBiZSBwcm9jZXNzZWQgYnkgSFcuDQo+Pg0K Pj4+IC0JICovDQo+Pg0KPj4+IC0JaWYgKGhzX2VwLT5uZXh0X2Rlc2MgPT0gTUFYX0RNQV9ERVND X05VTV9HRU5FUklDIC8gMikNCj4+DQo+Pj4gLQkJcmV0dXJuIC1FQlVTWTsNCj4+DQo+Pj4NCj4+ DQo+Pj4gLQkvKiBJbmNyZW1lbnQgZnJhbWUgbnVtYmVyIGJ5IGludGVydmFsIGZvciBJTiAqLw0K Pj4NCj4+PiAtCWlmIChoc19lcC0+ZGlyX2luKQ0KPj4NCj4+PiAtCQlkd2MyX2dhZGdldF9pbmNy X2ZyYW1lX251bShoc19lcCk7DQo+Pg0KPj4+IC0NCj4+DQo+Pj4gLQlpbmRleCA9IChNQVhfRE1B X0RFU0NfTlVNX0dFTkVSSUMgLyAyKSAqIGhzX2VwLT5pc29jX2NoYWluX251bSArDQo+Pg0KPj4+ IC0JCSBoc19lcC0+bmV4dF9kZXNjOw0KPj4NCj4+PiArCWluZGV4ID0gaHNfZXAtPm5leHRfZGVz YzsNCj4+DQo+Pj4gKwlkZXNjID0gJmhzX2VwLT5kZXNjX2xpc3RbaW5kZXhdOw0KPj4NCj4+Pg0K Pj4NCj4+PiAtCS8qIFNhbml0eSBjaGVjayBvZiBjYWxjdWxhdGVkIGluZGV4ICovDQo+Pg0KPj4+ IC0JaWYgKChoc19lcC0+aXNvY19jaGFpbl9udW0gJiYgaW5kZXggPiBNQVhfRE1BX0RFU0NfTlVN X0dFTkVSSUMpDQo+Pg0KPj4+IHx8DQo+Pg0KPj4+IC0JICAgICghaHNfZXAtPmlzb2NfY2hhaW5f bnVtICYmIGluZGV4ID4NCj4+DQo+Pj4gTUFYX0RNQV9ERVNDX05VTV9HRU5FUklDIC8gMikpIHsN Cj4+DQo+Pj4gLQkJZGV2X2Vycihoc290Zy0+ZGV2LCAid3JvbmcgaW5kZXggJWQgZm9yIGlzbyBj aGFpblxuIiwgaW5kZXgpOw0KPj4NCj4+PiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4+DQo+Pj4gKwkv KiBDaGVjayBpZiBkZXNjcmlwdG9yIGNoYWluIGZ1bGwgKi8NCj4+DQo+Pj4gKwlpZiAoKGRlc2Mt PnN0YXR1cyA+PiBERVZfRE1BX0JVRkZfU1RTX1NISUZUKSA9PQ0KPj4NCj4+PiArCSAgICBERVZf RE1BX0JVRkZfU1RTX0hSRUFEWSkgew0KPj4NCj4+PiArCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIl czogZGVzYyBjaGFpbiBmdWxsXG4iLCBfX2Z1bmNfXyk7DQo+Pg0KPj4+ICsJCXJldHVybiAxOw0K Pj4NCj4+PiAJfQ0KPj4NCj4+Pg0KPj4NCj4+PiAtCWRlc2MgPSAmaHNfZXAtPmRlc2NfbGlzdFtp bmRleF07DQo+Pg0KPj4+IC0NCj4+DQo+Pj4gCS8qIENsZWFyIEwgYml0IG9mIHByZXZpb3VzIGRl c2MgaWYgbW9yZSB0aGFuIG9uZSBlbnRyaWVzIGluIHRoZQ0KPj4+IGNoYWluICovDQo+Pg0KPj4+ IAlpZiAoaHNfZXAtPm5leHRfZGVzYykNCj4+DQo+Pj4gCQloc19lcC0+ZGVzY19saXN0W2luZGV4 IC0gMV0uc3RhdHVzICY9IH5ERVZfRE1BX0w7IEBAIC04NjUsOA0KPj4NCj4+DQo+Pg0KPj4gV2hl biBjaGFuZ2luZyB0aGUgc3RhdHVzIG9mIHRoZSBkZXNjLCBIb3cgdG8gc3luYyB0aGUgU1cgd2l0 aCB0aGUgSFc/DQo+Pg0KPj4gU2luY2UgdGhlIEhXIGFuZCBTVyBpcyB3b3JraW5nIG9uIHRoZSBz YW1lIGRlc2Mgc3luY2hyb25vdXNseS4NCj4NCj5Ob3QgY2xlYXIgZm9yIHdoYXQgeW91IG1lYW46 IEhXIGFuZCBTVyB3b3JraW5nIG9uIHNhbWUgZGVzYyBzeW5jaHJvbm91c2x5Pw0KPkRlc2NyaXB0 b3IgbGlzdCBpcyBsaWtlIFByb2R1Y2VyKFNXKS9Db25zdW1lcihIVykgbGlzdC4NCj5JbmRleCBt YW5hZ2VtZW50IGFsbG93IGFsd2F5cyBrZWVwIGdhcCBiZXR3ZWVuIFByb2R1Y2VyIGFuZCBDb25z dW1lcg0KPmluZGV4ZXMuIFByb2R1Y2VyIGluZGV4IHNob3VsZCBiZSBhbHdheXMgbW9yZSB0aGFu IENvbnN1bWVyIGluZGV4LiBJbiBzb21lDQo+Y2FzZXMgd2hlbiBDb25zdW1lciBpbmRleCBhY2hp ZXZlZCBQcm9kdWNlciBpbmRleCwgd2hpY2ggbWVhbiBubyBtb3JlDQo+cmVhZHkgZGVzY3JpcHRv ciB0byBwcm9jZXNzIHRoZW4gQk5BIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkLCBpLmUgU1cg Y2FuJ3QNCj5lbm91Z2ggYmFuZHdpZHRoIHRvIHN1Ym1pdCBuZXcgcmVxdWVzdHMuDQo+DQoNCkFi b3V0IG15IHF1ZXN0aW9uLA0KSSBtZWFuIHdoZW4geW91IGNsZWFyIHRoZSBERVZfRE1BX0wgYml0 IG9mIGxhc3QgZGVzYyBpbiB0aGUgY2hhaW4sIHRoZSBIVyBtYXkgYmUNCmFjY2Vzc2luZyB0aGlz IHBhcnRpY3VsYXIgZGVzYyBhdCB0aGUgc2FtZSB0aW1lLCBzbyBwZXJoYXBzIHRoZSBERVZfRE1B X0wgYml0IA0KY2xlYXIgYWN0aW9uIGlzIG5vdCBzeW5jIHRvIHRoZSBIVywgYW5kIHRoZSBIVyBj YW4ndCB3b3JrIGFzIHdlIHdhbnQuDQoNClBlciB5b3VyIGNvbW1lbnQsIHlvdSBtZW50aW9uZWQg dGhlIHByb2R1Y2VyIGFuZCBjb25zdW1lciwgYnV0DQpIb3cgZG8geW91IGRvIHRoZSBzeW5jaHJv bml6YXRpb24gYmV0d2VlbiB0aGUgcHJvZHVjZXIgYW5kIGNvbnN1bWVyPyANCg0KPj4NCj4+ID4N Cj4+PiArODQ2LDE0IEBAIHN0YXRpYyBpbnQgZHdjMl9nYWRnZXRfZmlsbF9pc29jX2Rlc2Moc3Ry dWN0IGR3YzJfaHNvdGdfZXANCj4+DQo+Pj4gKmhzX2VwLA0KPj4NCj4+PiAJZGVzYy0+c3RhdHVz ICY9IH5ERVZfRE1BX0JVRkZfU1RTX01BU0s7DQo+Pg0KPj4+IAlkZXNjLT5zdGF0dXMgfD0gKERF Vl9ETUFfQlVGRl9TVFNfSFJFQURZIDw8DQo+Pg0KPj4+IERFVl9ETUFfQlVGRl9TVFNfU0hJRlQp Ow0KPj4NCj4+Pg0KPj4NCj4+PiArCS8qIEluY3JlbWVudCBmcmFtZSBudW1iZXIgYnkgaW50ZXJ2 YWwgZm9yIElOICovDQo+Pg0KPj4+ICsJaWYgKGhzX2VwLT5kaXJfaW4pDQo+Pg0KPj4+ICsJCWR3 YzJfZ2FkZ2V0X2luY3JfZnJhbWVfbnVtKGhzX2VwKTsNCj4+DQo+Pj4gKw0KPj4NCj4+PiAJLyog VXBkYXRlIGluZGV4IG9mIGxhc3QgY29uZmlndXJlZCBlbnRyeSBpbiB0aGUgY2hhaW4gKi8NCj4+ DQo+Pj4gCWhzX2VwLT5uZXh0X2Rlc2MrKzsNCj4+DQo+Pj4gKwlpZiAoaHNfZXAtPm5leHRfZGVz YyA+PSBNQVhfRE1BX0RFU0NfTlVNX0dFTkVSSUMpDQo+Pg0KPj4+ICsJCWhzX2VwLT5uZXh0X2Rl c2MgPSAwOw0KPj4NCj4+Pg0KPj4NCj4+PiAJcmV0dXJuIDA7DQo+Pg0KPj4+IH0NCj4+DQo+Pj4g QEAgLTg3NSwxMSArODYyLDggQEAgc3RhdGljIGludCBkd2MyX2dhZGdldF9maWxsX2lzb2NfZGVz YyhzdHJ1Y3QNCj4+DQo+Pj4gZHdjMl9oc290Z19lcCAqaHNfZXAsDQo+Pg0KPj4+ICAgKiBkd2My X2dhZGdldF9zdGFydF9pc29jX2RkbWEgLSBzdGFydCBpc29jaHJvbm91cyB0cmFuc2ZlciBpbiBE RE1BDQo+Pg0KPj4+ICAgKiBAaHNfZXA6IFRoZSBpc29jaHJvbm91cyBlbmRwb2ludC4NCj4+DQo+ Pj4gICAqDQo+Pg0KPj4+IC0gKiBQcmVwYXJlIGZpcnN0IGRlc2NyaXB0b3IgY2hhaW4gZm9yIGlz b2Nocm9ub3VzIGVuZHBvaW50cy4NCj4+PiBBZnRlcndhcmRzDQo+Pg0KPj4+ICsgKiBQcmVwYXJl IGRlc2NyaXB0b3IgY2hhaW4gZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50cy4gQWZ0ZXJ3YXJkcw0K Pj4NCj4+PiAgICogd3JpdGUgRE1BIGFkZHJlc3MgdG8gSFcgYW5kIGVuYWJsZSB0aGUgZW5kcG9p bnQuDQo+Pg0KPj4+IC0gKg0KPj4NCj4+PiAtICogU3dpdGNoIGJldHdlZW4gZGVzY3JpcHRvciBj aGFpbnMgdmlhIGlzb2NfY2hhaW5fbnVtIHRvIGdpdmUgU1cNCj4+PiBvcHBvcnR1bml0eQ0KPj4N Cj4+PiAtICogdG8gcHJlcGFyZSBzZWNvbmQgZGVzY3JpcHRvciBjaGFpbiB3aGlsZSBmaXJzdCBv bmUgaXMgYmVpbmcgcHJvY2Vzc2VkIGJ5DQo+SFcuDQo+Pg0KPj4+ICAgKi8NCj4+DQo+Pj4gc3Rh dGljIHZvaWQgZHdjMl9nYWRnZXRfc3RhcnRfaXNvY19kZG1hKHN0cnVjdCBkd2MyX2hzb3RnX2Vw ICpoc19lcCkNCj4+DQo+Pj4geyBAQCAtODkwLDE5ICs4NzQsMjcgQEAgc3RhdGljIHZvaWQNCj4+ PiBkd2MyX2dhZGdldF9zdGFydF9pc29jX2RkbWEoc3RydWN0DQo+Pg0KPj4+IGR3YzJfaHNvdGdf ZXAgKmhzX2VwKQ0KPj4NCj4+PiAJdTMyIGRtYV9yZWc7DQo+Pg0KPj4+IAl1MzIgZGVwY3RsOw0K Pj4NCj4+PiAJdTMyIGN0cmw7DQo+Pg0KPj4+ICsJc3RydWN0IGR3YzJfZG1hX2Rlc2MgKmRlc2M7 DQo+Pg0KPj4+DQo+Pg0KPj4+IAlpZiAobGlzdF9lbXB0eSgmaHNfZXAtPnF1ZXVlKSkgew0KPj4N Cj4+PiAJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBObyByZXF1ZXN0cyBpbiBxdWV1ZVxuIiwg X19mdW5jX18pOw0KPj4NCj4+PiAJCXJldHVybjsNCj4+DQo+Pj4gCX0NCj4+DQo+Pj4NCj4+DQo+ Pj4gKwkvKiBJbml0aWFsaXplIGRlc2NyaXB0b3IgY2hhaW4gYnkgSG9zdCBCdXN5IHN0YXR1cyAq Lw0KPj4NCj4+PiArCWZvciAocmV0ID0gMDsgcmV0IDwgTUFYX0RNQV9ERVNDX05VTV9HRU5FUklD OyByZXQrKykgew0KPj4NCj4+PiArCQlkZXNjID0gJmhzX2VwLT5kZXNjX2xpc3RbcmV0XTsNCj4+ DQo+Pj4gKwkJZGVzYy0+c3RhdHVzID0gMDsNCj4+DQo+Pj4gKwkJZGVzYy0+c3RhdHVzIHw9IChE RVZfRE1BX0JVRkZfU1RTX0hCVVNZDQo+Pg0KPj4+ICsJCQkJICAgIDw8IERFVl9ETUFfQlVGRl9T VFNfU0hJRlQpOw0KPj4NCj4+PiArCX0NCj4+DQo+Pj4gKw0KPj4NCj4+DQo+Pg0KPj4gUmV0IGlz IG5vdCBhIGdvb2QgbmFtaW5nIGFzIHRoZSBsb29wIGNvdW50ZXIuDQo+Pg0KPg0KPkNvdWxkIGJl LCBidXQgaXQganVzdCByZXVzZSBleGlzdGluZyB2YXJpYWJsZSBpbnN0ZWFkIHRvIGRlZmluZSBu ZXcgb25lLg0KPg0KDQpGcm9tIHRoZSBjb2RlIHJlYWRlcidzIHBlcnNwZWN0aXZlLCBpdCBpcyBh IGJpdCBzdHJhbmdlLg0KDQo+Pg0KPj4NCj4+PiArCWhzX2VwLT5uZXh0X2Rlc2MgPSAwOw0KPj4N Cj4+PiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhzX3JlcSwgdHJlcSwgJmhzX2VwLT5xdWV1 ZSwgcXVldWUpIHsNCj4+DQo+Pg0KPj4NCj4+IERvIHdlIHJlYWxseSBuZWVkIHNhZmUgZnVuY3Rp b24gaGVyZT8gV2UgaGF2ZSBhbHJlYWR5IGhhdmUgdGhlIHNwaW5sb2NrLg0KPj4NCj5JIGxlZnQg ZXhpc3RpbmcgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCkgbm90IG9mIHBhcnQgb2YgdGhpcyBw YXRjaC4NCj4NCj4+DQo+Pg0KPj4+IAkJcmV0ID0gZHdjMl9nYWRnZXRfZmlsbF9pc29jX2Rlc2Mo aHNfZXAsIGhzX3JlcS0+cmVxLmRtYSwNCj4+DQo+Pj4gCQkJCQkJIGhzX3JlcS0+cmVxLmxlbmd0 aCk7DQo+Pg0KPj4+IC0JCWlmIChyZXQpIHsNCj4+DQo+Pj4gLQkJCWRldl9kYmcoaHNvdGctPmRl diwgIiVzOiBkZXNjIGNoYWluIGZ1bGxcbiIsIF9fZnVuY19fKTsNCj4+DQo+Pj4gKwkJaWYgKHJl dCkNCj4+DQo+Pj4gCQkJYnJlYWs7DQo+Pg0KPj4+IC0JCX0NCj4+DQo+Pj4gCX0NCj4+DQo+Pj4N Cj4+DQo+Pj4gCWRlcGN0bCA9IGhzX2VwLT5kaXJfaW4gPyBESUVQQ1RMKGluZGV4KSA6IERPRVBD VEwoaW5kZXgpOyBAQCAtOTE0LDEwDQo+Pg0KPj4+ICs5MDYsNiBAQCBzdGF0aWMgdm9pZCBkd2My X2dhZGdldF9zdGFydF9pc29jX2RkbWEoc3RydWN0DQo+Pj4gK2R3YzJfaHNvdGdfZXANCj4+DQo+ Pj4gKmhzX2VwKQ0KPj4NCj4+PiAJY3RybCA9IGR3YzJfcmVhZGwoaHNvdGctPnJlZ3MgKyBkZXBj dGwpOw0KPj4NCj4+PiAJY3RybCB8PSBEWEVQQ1RMX0VQRU5BIHwgRFhFUENUTF9DTkFLOw0KPj4N Cj4+PiAJZHdjMl93cml0ZWwoY3RybCwgaHNvdGctPnJlZ3MgKyBkZXBjdGwpOw0KPj4NCj4+PiAt DQo+Pg0KPj4+IC0JLyogU3dpdGNoIElTT0MgZGVzY3JpcHRvciBjaGFpbiBudW1iZXIgYmVpbmcg cHJvY2Vzc2VkIGJ5IFNXKi8NCj4+DQo+Pj4gLQloc19lcC0+aXNvY19jaGFpbl9udW0gPSAoaHNf ZXAtPmlzb2NfY2hhaW5fbnVtIF4gMSkgJiAweDE7DQo+Pg0KPj4+IC0JaHNfZXAtPm5leHRfZGVz YyA9IDA7DQo+Pg0KPj4+IH0NCj4+DQo+Pj4NCj4+DQo+Pj4gLyoqDQo+Pg0KPj4+IEBAIC0xMjkx LDYgKzEyNzksOSBAQCBzdGF0aWMgaW50IGR3YzJfaHNvdGdfZXBfcXVldWUoc3RydWN0IHVzYl9l cA0KPj4+ICplcCwNCj4+DQo+Pj4gc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsDQo+Pg0KPj4+IAlz dHJ1Y3QgZHdjMl9oc290ZyAqaHMgPSBoc19lcC0+cGFyZW50Ow0KPj4NCj4+PiAJYm9vbCBmaXJz dDsNCj4+DQo+Pj4gCWludCByZXQ7DQo+Pg0KPj4+ICsJdTMyIG1heHNpemUgPSAwOw0KPj4NCj4+ PiArCXUzMiBtYXNrID0gMDsNCj4+DQo+Pj4gKw0KPj4NCj4+Pg0KPj4NCj4+PiAJZGV2X2RiZyho cy0+ZGV2LCAiJXM6IHJlcSAlcDogJWRAJXAsIG5vaT0lZCwgemVybz0lZCwgc25vaz0lZFxuIiwN Cj4+DQo+Pj4gCQllcC0+bmFtZSwgcmVxLCByZXEtPmxlbmd0aCwgcmVxLT5idWYsIHJlcS0+bm9f aW50ZXJydXB0LCBAQCAtMTMwOCw2DQo+Pg0KPj4+ICsxMjk5LDI0IEBAIHN0YXRpYyBpbnQgZHdj Ml9oc290Z19lcF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0DQo+Pg0KPj4+IHVzYl9y ZXF1ZXN0ICpyZXEsDQo+Pg0KPj4+IAlyZXEtPmFjdHVhbCA9IDA7DQo+Pg0KPj4+IAlyZXEtPnN0 YXR1cyA9IC1FSU5QUk9HUkVTUzsNCj4+DQo+Pj4NCj4+DQo+Pj4gKwkvKiBJbiBERE1BIG1vZGUg Zm9yIElTT0MncyBkb24ndCBxdWV1ZSByZXF1ZXN0IGlmIGxlbmd0aCBncmVhdGVyDQo+Pg0KPj4+ ICsJICogdGhhbiBkZXNjcmlwdG9yIGxpbWl0cy4NCj4+DQo+Pj4gKwkgKi8NCj4+DQo+Pj4gKwlp ZiAodXNpbmdfZGVzY19kbWEoaHMpICYmIGhzX2VwLT5pc29jaHJvbm91cykgew0KPj4NCj4+PiAr CQltYXhzaXplID0gZHdjMl9nYWRnZXRfZ2V0X2Rlc2NfcGFyYW1zKGhzX2VwLCAmbWFzayk7DQo+ Pg0KPj4+ICsJCWlmIChoc19lcC0+ZGlyX2luICYmIHJlcS0+bGVuZ3RoID4gbWF4c2l6ZSkgew0K Pj4NCj4+PiArCQkJZGV2X2Vycihocy0+ZGV2LCAid3JvbmcgbGVuZ3RoICVkIChtYXhzaXplPSVk KVxuIiwNCj4+DQo+Pj4gKwkJCQlyZXEtPmxlbmd0aCwgbWF4c2l6ZSk7DQo+Pg0KPj4+ICsJCQly ZXR1cm4gLUVJTlZBTDsNCj4+DQo+Pj4gKwkJfQ0KPj4NCj4+PiArCQkvKiBJU09DIE9VVCBoaWdo IGJhbmR3aWR0aCBub3Qgc3VwcG9ydGVkICovDQo+Pg0KPj4+ICsJCWlmICghaHNfZXAtPmRpcl9p biAmJiByZXEtPmxlbmd0aCA+IGhzX2VwLT5lcC5tYXhwYWNrZXQpIHsNCj4+DQo+Pj4gKwkJCWRl dl9lcnIoaHMtPmRldiwgIklTT0MgT1VUOiB3cm9uZyBsZW5ndGggJWQgKG1wcz0lZClcbiIsDQo+ Pg0KPj4+ICsJCQkJcmVxLT5sZW5ndGgsIGhzX2VwLT5lcC5tYXhwYWNrZXQpOw0KPj4NCj4+PiAr CQkJcmV0dXJuIC1FSU5WQUw7DQo+Pg0KPj4+ICsJCX0NCj4+DQo+Pj4gKwl9DQo+Pg0KPj4+ICsN Cj4+DQo+Pj4gCXJldCA9IGR3YzJfaHNvdGdfaGFuZGxlX3VuYWxpZ25lZF9idWZfc3RhcnQoaHMs IGhzX2VwLCBoc19yZXEpOw0KPj4NCj4+PiAJaWYgKHJldCkNCj4+DQo+Pj4gCQlyZXR1cm4gcmV0 Ow0KPj4NCj4+PiBAQCAtMTMzMCw3ICsxMzM5LDcgQEAgc3RhdGljIGludCBkd2MyX2hzb3RnX2Vw X3F1ZXVlKHN0cnVjdCB1c2JfZXANCj4+PiAqZXAsDQo+Pg0KPj4+IHN0cnVjdCB1c2JfcmVxdWVz dCAqcmVxLA0KPj4NCj4+Pg0KPj4NCj4+PiAJLyoNCj4+DQo+Pj4gCSAqIEhhbmRsZSBERE1BIGlz b2Nocm9ub3VzIHRyYW5zZmVycyBzZXBhcmF0ZWx5IC0ganVzdCBhZGQgbmV3IGVudHJ5DQo+Pg0K Pj4+IC0JICogdG8gdGhlIGhhbGYgb2YgZGVzY3JpcHRvciBjaGFpbiB0aGF0IGlzIG5vdCBwcm9j ZXNzZWQgYnkgSFcuDQo+Pg0KPj4+ICsJICogdG8gdGhlIGRlc2NyaXB0b3IgY2hhaW4uDQo+Pg0K Pj4+IAkgKiBUcmFuc2ZlciB3aWxsIGJlIHN0YXJ0ZWQgb25jZSBTVyBnZXRzIGVpdGhlciBvbmUg b2YgTkFLIG9yDQo+Pg0KPj4+IAkgKiBPdXRUa25FcERpcyBpbnRlcnJ1cHRzLg0KPj4NCj4+PiAJ ICovDQo+Pg0KPj4+IEBAIC0xMzM4LDkgKzEzNDcsOSBAQCBzdGF0aWMgaW50IGR3YzJfaHNvdGdf ZXBfcXVldWUoc3RydWN0IHVzYl9lcA0KPj4+ICplcCwNCj4+DQo+Pj4gc3RydWN0IHVzYl9yZXF1 ZXN0ICpyZXEsDQo+Pg0KPj4+IAkgICAgaHNfZXAtPnRhcmdldF9mcmFtZSAhPSBUQVJHRVRfRlJB TUVfSU5JVElBTCkgew0KPj4NCj4+PiAJCXJldCA9IGR3YzJfZ2FkZ2V0X2ZpbGxfaXNvY19kZXNj KGhzX2VwLCBoc19yZXEtPnJlcS5kbWEsDQo+Pg0KPj4+IAkJCQkJCSBoc19yZXEtPnJlcS5sZW5n dGgpOw0KPj4NCj4+PiAtCQlpZiAocmV0KQ0KPj4NCj4+PiAtCQkJZGV2X2RiZyhocy0+ZGV2LCAi JXM6IElTTyBkZXNjIGNoYWluIGZ1bGxcbiIsIF9fZnVuY19fKTsNCj4+DQo+Pj4gLQ0KPj4NCj4+ PiArCQlpZiAocmV0IDwgMCkNCj4+DQo+Pj4gKwkJCWRldl9kYmcoaHMtPmRldiwgIiVzOiBmYWls ZWQgdG8gZmlsbCBpc29jIGRlc2NcbiIsDQo+Pg0KPj4+ICsJCQkJX19mdW5jX18pOw0KPj4NCj4+ DQo+Pg0KPj4gZHdjMl9nYWRnZXRfZmlsbF9pc29jX2Rlc2Mgd2lsbCBuZXZlciByZXR1cm4gYSBu ZWdhdGl2ZSB2YWx1ZSwgYW5kIGF0DQo+PiB0aGUgc2FtZQ0KPj4NCj4+IHRpbWUgSSB0aGluayB0 aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIGNhbiB3b3JrDQo+ PiBwcm9wZXJseSBldmVuDQo+Pg0KPj4gdGhlIGRlc2MgY2hhaW4gaXMgZnVsbC4NCj4+DQo+WW91 IGFyZSByaWd0aC4gcmV0IGlzIDAgb3IgMS4gU28sIG5vIG5lZWQgdG8gY2hhbmdlIGV4aXN0aW5n IGNvZGUuIFllcywgd2UgY2FuDQo+Y29udGludWUgd29yayBwcm9wZXJseSBldmVuIGlmIHRoZSBk ZXNjIGNoYWluIGZ1bGwuIEl0IGp1c3QgZGVidWcgbWVzc2FnZSBpZiAocmV0ICE9DQo+MCkuIERv IHlvdSBoYXZlIG9iamVjdGlvbj8NCj4NCg0KU2luY2Ugd2UgYWxyZWFkeSBoYXZlIGRlYnVnIG1l c3NhZ2UgaW5zaWRlIGR3YzJfZ2FkZ2V0X2ZpbGxfaXNvY19kZXNjLCBzbyBoZXJlDQp3ZSBkb24n dCBuZWVkIGFkZGl0aW9uYWwgZGVidWcgbWVzc2FnZSwgd2hhdCBkbyB5b3UgdGhpbmsgb2YgaXQ/ DQoNCg0KPg0KPj4NCj4+DQo+Pj4gCQlyZXR1cm4gMDsNCj4+DQo+Pj4gCX0NCj4+DQo+Pj4NCj4+ DQo+Pj4gQEAgLTIwMTEsMTAgKzIwMjAsOSBAQCBzdGF0aWMgdm9pZA0KPmR3YzJfaHNvdGdfY29t cGxldGVfcmVxdWVzdChzdHJ1Y3QNCj4+DQo+Pj4gZHdjMl9oc290ZyAqaHNvdGcsDQo+Pg0KPj4+ ICAgKiBAaHNfZXA6IFRoZSBlbmRwb2ludCB0aGUgcmVxdWVzdCB3YXMgb24uDQo+Pg0KPj4+ICAg Kg0KPj4NCj4+PiAgICogR2V0IGZpcnN0IHJlcXVlc3QgZnJvbSB0aGUgZXAgcXVldWUsIGRldGVy bWluZSBkZXNjcmlwdG9yIG9uDQo+Pj4gd2hpY2gNCj4+DQo+Pj4gY29tcGxldGUNCj4+DQo+Pj4g LSAqIGhhcHBlbmVkLiBTVyBiYXNlZCBvbiBpc29jX2NoYWluX251bSBkaXNjb3ZlcnMgd2hpY2gg aGFsZiBvZiB0aGUNCj4+DQo+Pj4gZGVzY3JpcHRvcg0KPj4NCj4+PiAtICogY2hhaW4gaXMgY3Vy cmVudGx5IGluIHVzZSBieSBIVywgYWRqdXN0cyBkbWFfYWRkcmVzcyBhbmQNCj4+PiBjYWxjdWxh dGVzIGluZGV4DQo+Pg0KPj4+IC0gKiBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvciBiYXNlZCBvbiB0 aGUgdmFsdWUgb2YgREVQRE1BIHJlZ2lzdGVyLg0KPj4+IFVwZGF0ZQ0KPj4NCj4+PiBhY3R1YWwN Cj4+DQo+Pj4gLSAqIGxlbmd0aCBvZiByZXF1ZXN0LCBnaXZlYmFjayB0byBnYWRnZXQuDQo+Pg0K Pj4+ICsgKiBoYXBwZW5lZC4gU1cgZGlzY292ZXJzIHdoaWNoIGRlc2NyaXB0b3IgY3VycmVudGx5 IGluIHVzZSBieSBIVywNCj4+DQo+Pj4gKyBhZGp1c3RzDQo+Pg0KPj4+ICsgKiBkbWFfYWRkcmVz cyBhbmQgY2FsY3VsYXRlcyBpbmRleCBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvciBiYXNlZCBvbg0K Pj4NCj4+PiArIHRoZSB2YWx1ZQ0KPj4NCj4+PiArICogb2YgREVQRE1BIHJlZ2lzdGVyLiBVcGRh dGUgYWN0dWFsIGxlbmd0aCBvZiByZXF1ZXN0LCBnaXZlYmFjayB0byBnYWRnZXQuDQo+Pg0KPj4+ ICAgKi8NCj4+DQo+Pj4gc3RhdGljIHZvaWQgZHdjMl9nYWRnZXRfY29tcGxldGVfaXNvY19yZXF1 ZXN0X2RkbWEoc3RydWN0DQo+Pj4gZHdjMl9oc290Z19lcA0KPj4NCj4+PiAqaHNfZXApICB7IEBA IC0yMDM3LDgyICsyMDQ1LDU1IEBAIHN0YXRpYyB2b2lkDQo+Pg0KPj4+IGR3YzJfZ2FkZ2V0X2Nv bXBsZXRlX2lzb2NfcmVxdWVzdF9kZG1hKHN0cnVjdCBkd2MyX2hzb3RnX2VwICpoc19lcCkNCj4+ DQo+Pj4NCj4+DQo+Pj4gCWRtYV9hZGRyID0gaHNfZXAtPmRlc2NfbGlzdF9kbWE7DQo+Pg0KPj4+ DQo+Pg0KPj4+IC0JLyoNCj4+DQo+Pj4gLQkgKiBJZiBsb3dlciBoYWxmIG9mICBkZXNjcmlwdG9y IGNoYWluIGlzIGN1cnJlbnRseSB1c2UgYnkgU1csDQo+Pg0KPj4+IC0JICogdGhhdCBtZWFucyBo aWdoZXIgaGFsZiBpcyBiZWluZyBwcm9jZXNzZWQgYnkgSFcsIHNvIHNoaWZ0DQo+Pg0KPj4+IC0J ICogRE1BIGFkZHJlc3MgdG8gaGlnaGVyIGhhbGYgb2YgZGVzY3JpcHRvciBjaGFpbi4NCj4+DQo+ Pj4gLQkgKi8NCj4+DQo+Pj4gLQlpZiAoIWhzX2VwLT5pc29jX2NoYWluX251bSkNCj4+DQo+Pj4g LQkJZG1hX2FkZHIgKz0gc2l6ZW9mKHN0cnVjdCBkd2MyX2RtYV9kZXNjKSAqDQo+Pg0KPj4+IC0J CQkgICAgKE1BWF9ETUFfREVTQ19OVU1fR0VORVJJQyAvIDIpOw0KPj4NCj4+PiAtDQo+Pg0KPj4+ IAlkbWFfcmVnID0gaHNfZXAtPmRpcl9pbiA/IERJRVBETUEoaHNfZXAtPmluZGV4KSA6DQo+Pg0K Pj4+IERPRVBETUEoaHNfZXAtPmluZGV4KTsNCj4+DQo+Pj4gCWRlcGRtYSA9IGR3YzJfcmVhZGwo aHNvdGctPnJlZ3MgKyBkbWFfcmVnKTsNCj4+DQo+Pj4NCj4+DQo+Pj4gCWluZGV4ID0gKGRlcGRt YSAtIGRtYV9hZGRyKSAvIHNpemVvZihzdHJ1Y3QgZHdjMl9kbWFfZGVzYykgLSAxOw0KPj4NCj4+ PiAtCWRlc2Nfc3RzID0gaHNfZXAtPmRlc2NfbGlzdFtpbmRleF0uc3RhdHVzOw0KPj4NCj4+PiAr CS8qIENoZWNrIGRlc2NyaXB0b3IgY2hhaW4gcm9sbG92ZXIgKi8NCj4+DQo+Pj4gKwlpZiAoaW5k ZXggPCAwKQ0KPj4NCj4+PiArCQlpbmRleCA9IE1BWF9ETUFfREVTQ19OVU1fR0VORVJJQyAtIDE7 DQo+Pg0KPj4+DQo+Pg0KPj4NCj4+DQo+PiBJIGRvbid0IHVuZGVyc3RhbmQgaGVyZSwgd2h5IHNl dHRpbmcgdGhlIGluZGV4IHRvDQo+Pg0KPj4gICBNQVhfRE1BX0RFU0NfTlVNX0dFTkVSSUMgLSAx IHdoZW4gdGhlIGNoYWluIGlzIHJvbGxvdmVyPw0KPj4NCj4+IElmIHRoZSBjaGFpbiBpcyByb2xs b3ZlciwgdGhlIGluZGV4IHNob3VsZCBwb2ludCB0byB0aGUgbGF0ZXN0DQo+PiBmaW5pc2hlZCBk ZXNjLA0KPj4NCj4+IGFuZCBhbGwgdGhlIGZpbmlzaGVkIGRlc2NzIHNob3VsZCBiZSBwcm9jZXNz ZWQuIEFuZCBldmVuIHRoZSBjaGFpbiBpcw0KPj4gcm9sbG92ZXIsDQo+Pg0KPj4gdGhlIGNvdW50 IG9mIGRlc2NzIGluIGNoYWluIGlzIG1heWJlIGxlc3MgdGhlbg0KPk1BWF9ETUFfREVTQ19OVU1f R0VORVJJQy4NCj4+DQo+SWYgZGVwZG1hIHBvaW50IHRvIGZpcnN0IGRlc2MgaW4gbGlzdCwgdGhh dCBtZWFuIHRoZSBsYXN0IHByb2Nlc3NlZCBkZXNjIHdhcyBsYXN0DQo+aW4gdGhlIGNoYWluLiBJ biB0aGlzIGNhc2UgaW5kZXggd2lsbCBiZSBuZWdhdGl2ZS4NCj5JbiBjYXNlIG9mIGRlc2MgY291 bnQgbGVzcyB0aGFuIE1BWF9ETUFfREVTQ19OVU1fR0VORVJJQyB0aGVuIHJvbGxvdmVyDQo+Y2Fu IGJlIGhhcHBlbiAgYmVjYXVzZSBvZiBMLWJpdCBzZXQuIEluIHRoaXMgY2FzZSBieSBwcm9jZXNz aW5nIGZpcnN0IGRlc2Mgd2lsbCBiZQ0KPmFzc2VydGVkIEJOQSBpbnRlcnJ1cHQgYnV0IG5vdCBY ZmVyQ29tcGxldGUgaW50ZXJydXB0Lg0KPg0KDQpDYW4gd2UgcmVhY2ggaGVyZSBpbiBCTkEgaW50 ZXJydXB0LCBvciBjYW4gd2UgaGF2ZSBib3RoIEJOQSBhbmQgWGZlckNvbXBsZXRlDQpJbnRlcnJ1 cHRzIGFzc2VydGVkIGF0IHRoZSBzYW1lIHRpbWU/DQpZb3VyIGNvbmNsdXNpb24gaXMgYmFzZWQg b24gdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9uOg0KMS4gIEJOQSBpbnRlcnJ1cHQgaGFuZGxlIGZs b3cgY2FuJ3QgZ28gaW50byBoZXJlLg0KMi4gIHdoZW4gdGhlIGV4ZWN1dGlvbiBmbG93IGdvaW5n IHRvIGhlcmUsIG9ubHkgYmVjYXVzZSBvZiBYZmVyQ29tcGxldGUgaW50ZXJydXB0Lg0KMy4gIHdo ZW4gdGhlIFhmZXJDb21wbGV0ZSBpcyBhc3NlcnRlZCwgQk5BIGludGVycnVwdCBjYW4ndCBiZSBh c3NlcnRlZC4NCg0KPj4NCj4+DQo+Pj4gLQltYXNrID0gaHNfZXAtPmRpcl9pbiA/IERFVl9ETUFf SVNPQ19UWF9OQllURVNfTUFTSyA6DQo+Pg0KPj4+IC0JICAgICAgIERFVl9ETUFfSVNPQ19SWF9O QllURVNfTUFTSzsNCj4+DQo+Pj4gLQl1cmVxLT5hY3R1YWwgPSB1cmVxLT5sZW5ndGggLQ0KPj4N Cj4+PiAtCQkgICAgICAgKChkZXNjX3N0cyAmIG1hc2spID4+IERFVl9ETUFfSVNPQ19OQllURVNf U0hJRlQpOw0KPj4NCj4+PiAtDQo+Pg0KPj4+IC0JLyogQWRqdXN0IGFjdHVhbCBsZW5ndGggZm9y IElTT0MgT3V0IGlmIGxlbmd0aCBpcyBub3QgYWxpZ24gb2YgNCAqLw0KPj4NCj4+PiAtCWlmICgh aHNfZXAtPmRpcl9pbiAmJiB1cmVxLT5sZW5ndGggJiAweDMpDQo+Pg0KPj4+IC0JCXVyZXEtPmFj dHVhbCArPSA0IC0gKHVyZXEtPmxlbmd0aCAmIDB4Myk7DQo+Pg0KPj4+ICsJZGVzY19zdHMgPSBo c19lcC0+ZGVzY19saXN0W2luZGV4XS5zdGF0dXM7DQo+Pg0KPj4+ICsJLyogQ2hlY2sgY29tcGxl dGlvbiBzdGF0dXMgKi8NCj4+DQo+Pj4gKwlpZiAoKGRlc2Nfc3RzICYgREVWX0RNQV9TVFNfTUFT SykgPj4gREVWX0RNQV9TVFNfU0hJRlQgPT0NCj4+DQo+Pj4gKwkgICAgREVWX0RNQV9TVFNfU1VD Qykgew0KPj4NCj4+PiArCQltYXNrID0gaHNfZXAtPmRpcl9pbiA/IERFVl9ETUFfSVNPQ19UWF9O QllURVNfTUFTSyA6DQo+Pg0KPj4+ICsJCSAgICAgICBERVZfRE1BX0lTT0NfUlhfTkJZVEVTX01B U0s7DQo+Pg0KPj4+ICsJCXVyZXEtPmFjdHVhbCA9IHVyZXEtPmxlbmd0aCAtDQo+Pg0KPj4+ICsJ CQkgICAgICAgKChkZXNjX3N0cyAmIG1hc2spID4+DQo+Pg0KPj4+ICsJCQkJREVWX0RNQV9JU09D X05CWVRFU19TSElGVCk7DQo+Pg0KPj4+ICsNCj4+DQo+Pj4gKwkJLyogQWRqdXN0IGFjdHVhbCBs ZW4gZm9yIElTT0MgT3V0IGlmIGxlbiBpcyBub3QgYWxpZ24gb2YgNCAqLw0KPj4NCj4+PiArCQlp ZiAoIWhzX2VwLT5kaXJfaW4gJiYgdXJlcS0+bGVuZ3RoICYgMHgzKQ0KPj4NCj4+PiArCQkJdXJl cS0+YWN0dWFsICs9IDQgLSAodXJlcS0+bGVuZ3RoICYgMHgzKTsNCj4+DQo+Pj4NCj4+DQo+Pj4g LQlkd2MyX2hzb3RnX2NvbXBsZXRlX3JlcXVlc3QoaHNvdGcsIGhzX2VwLCBoc19yZXEsIDApOw0K Pj4NCj4+PiArCQlkd2MyX2hzb3RnX2NvbXBsZXRlX3JlcXVlc3QoaHNvdGcsIGhzX2VwLCBoc19y ZXEsIDApOw0KPj4NCj4+PiArCX0gZWxzZSB7DQo+Pg0KPj4+ICsJCWR3YzJfaHNvdGdfY29tcGxl dGVfcmVxdWVzdChoc290ZywgaHNfZXAsIGhzX3JlcSwgLUVUSU1FRE9VVCk7DQo+Pg0KPj4+ICsJ fQ0KPj4NCj4+PiB9DQo+Pg0KPj4+DQo+Pg0KPj4+IC8qDQo+Pg0KPj4+IC0gKiBkd2MyX2dhZGdl dF9zdGFydF9uZXh0X2lzb2NfZGRtYSAtIHN0YXJ0IG5leHQgaXNvYyByZXF1ZXN0LCBpZiBhbnku DQo+Pg0KPj4+IC0gKiBAaHNfZXA6IFRoZSBpc29jaHJvbm91cyBlbmRwb2ludCB0byBiZSByZS1l bmFibGVkLg0KPj4NCj4+PiArICogZHdjMl9nYWRnZXRfaGFuZGxlX2lzb2NfYm5hIC0gaGFuZGxl IEJOQSBpbnRlcnJ1cHQgZm9yIElTT0MuDQo+Pg0KPj4+ICsgKiBAaHNfZXA6IFRoZSBpc29jaHJv bm91cyBlbmRwb2ludC4NCj4+DQo+Pj4gICAqDQo+Pg0KPj4+IC0gKiBJZiBlcCBoYXMgYmVlbiBk aXNhYmxlZCBkdWUgdG8gbGFzdCBkZXNjcmlwdG9yIHNlcnZpY2luZyAoSU4gZW5kcG9pbnQpIG9y DQo+Pg0KPj4+IC0gKiBCTkEgKE9VVCBlbmRwb2ludCkgY2hlY2sgdGhlIHN0YXR1cyBvZiBvdGhl ciBoYWxmIG9mIGRlc2NyaXB0b3IgY2hhaW4gdGhhdA0KPj4NCj4+PiAtICogd2FzIHVuZGVyIFNX IGNvbnRyb2wgdGlsbCBIVyB3YXMgYnVzeSBhbmQgcmVzdGFydCB0aGUgZW5kcG9pbnQgaWYgbmVl ZGVkLg0KPj4NCj4+PiArICogQ29tcGxldGUgcmVxdWVzdCB3aXRoIC1FSU8uDQo+Pg0KPj4+ICsg KiBJZiBFUCBJU09DIE9VVCB0aGVuIG5lZWQgdG8gZmx1c2ggUlggRklGTyB0byByZW1vdmUgc291 cmNlIG9mIEJOQQ0KPj4NCj4+PiArICogaW50ZXJydXB0LiBSZXNldCB0YXJnZXQgZnJhbWUgYW5k IG5leHRfZGVzYyB0byBhbGxvdyB0byBzdGFydA0KPj4NCj4+PiArICogSVNPQydzIG9uIE5BSyBp bnRlcnJ1cHQgZm9yIElOIGRpcmVjdGlvbiBvciBvbiBPVVRUS05FUERJUw0KPj4NCj4+PiArICog aW50ZXJydXB0IGZvciBPVVQgZGlyZWN0aW9uLg0KPj4NCj4+PiAgICovDQo+Pg0KPj4+IC1zdGF0 aWMgdm9pZCBkd2MyX2dhZGdldF9zdGFydF9uZXh0X2lzb2NfZGRtYShzdHJ1Y3QgZHdjMl9oc290 Z19lcA0KPj4NCj4+PiAqaHNfZXApDQo+Pg0KPj4+ICtzdGF0aWMgdm9pZCBkd2MyX2dhZGdldF9o YW5kbGVfaXNvY19ibmEoc3RydWN0IGR3YzJfaHNvdGdfZXAgKmhzX2VwKQ0KPj4NCj4+PiB7DQo+ Pg0KPj4+IAlzdHJ1Y3QgZHdjMl9oc290ZyAqaHNvdGcgPSBoc19lcC0+cGFyZW50Ow0KPj4NCj4+ PiAtCXUzMiBkZXBjdGw7DQo+Pg0KPj4+IC0JdTMyIGRtYV9yZWc7DQo+Pg0KPj4+IC0JdTMyIGN0 cmw7DQo+Pg0KPj4+IC0JdTMyIGRtYV9hZGRyID0gaHNfZXAtPmRlc2NfbGlzdF9kbWE7DQo+Pg0K Pj4+IC0JdW5zaWduZWQgY2hhciBpbmRleCA9IGhzX2VwLT5pbmRleDsNCj4+DQo+Pj4gLQ0KPj4N Cj4+PiAtCWRtYV9yZWcgPSBoc19lcC0+ZGlyX2luID8gRElFUERNQShpbmRleCkgOiBET0VQRE1B KGluZGV4KTsNCj4+DQo+Pj4gLQlkZXBjdGwgPSBoc19lcC0+ZGlyX2luID8gRElFUENUTChpbmRl eCkgOiBET0VQQ1RMKGluZGV4KTsNCj4+DQo+Pj4NCj4+DQo+Pj4gLQljdHJsID0gZHdjMl9yZWFk bChoc290Zy0+cmVncyArIGRlcGN0bCk7DQo+Pg0KPj4+ICsJaWYgKCFoc19lcC0+ZGlyX2luKQ0K Pj4NCj4+PiArCQlkd2MyX2ZsdXNoX3J4X2ZpZm8oaHNvdGcpOw0KPj4NCj4+PiArCWR3YzJfaHNv dGdfY29tcGxldGVfcmVxdWVzdChoc290ZywgaHNfZXAsIGdldF9lcF9oZWFkKGhzX2VwKSwNCj4+ DQo+Pj4gKwkJCQkgICAgLUVJTyk7DQo+Pg0KPj4+DQo+Pg0KPj4+IC0JLyoNCj4+DQo+Pj4gLQkg KiBFUCB3YXMgZGlzYWJsZWQgaWYgSFcgaGFzIHByb2Nlc3NlZCBsYXN0IGRlc2NyaXB0b3Igb3Ig Qk5BIHdhcyBzZXQuDQo+Pg0KPj4+IC0JICogU28gcmVzdGFydCBlcCBpZiBTVyBoYXMgcHJlcGFy ZWQgbmV3IGRlc2NyaXB0b3IgY2hhaW4gaW4gZXBfcXVldWUNCj4+DQo+Pj4gLQkgKiByb3V0aW5l IHdoaWxlIEhXIHdhcyBidXN5Lg0KPj4NCj4+PiAtCSAqLw0KPj4NCj4+PiAtCWlmICghKGN0cmwg JiBEWEVQQ1RMX0VQRU5BKSkgew0KPj4NCj4+PiAtCQlpZiAoIWhzX2VwLT5uZXh0X2Rlc2MpIHsN Cj4+DQo+Pj4gLQkJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBObyBtb3JlIElTT0MgcmVxdWVz dHNcbiIsDQo+Pg0KPj4+IC0JCQkJX19mdW5jX18pOw0KPj4NCj4+PiAtCQkJcmV0dXJuOw0KPj4N Cj4+PiAtCQl9DQo+Pg0KPj4+IC0NCj4+DQo+Pj4gLQkJZG1hX2FkZHIgKz0gc2l6ZW9mKHN0cnVj dCBkd2MyX2RtYV9kZXNjKSAqDQo+Pg0KPj4+IC0JCQkgICAgKE1BWF9ETUFfREVTQ19OVU1fR0VO RVJJQyAvIDIpICoNCj4+DQo+Pj4gLQkJCSAgICBoc19lcC0+aXNvY19jaGFpbl9udW07DQo+Pg0K Pj4+IC0JCWR3YzJfd3JpdGVsKGRtYV9hZGRyLCBoc290Zy0+cmVncyArIGRtYV9yZWcpOw0KPj4N Cj4+PiAtDQo+Pg0KPj4+IC0JCWN0cmwgfD0gRFhFUENUTF9FUEVOQSB8IERYRVBDVExfQ05BSzsN Cj4+DQo+Pj4gLQkJZHdjMl93cml0ZWwoY3RybCwgaHNvdGctPnJlZ3MgKyBkZXBjdGwpOw0KPj4N Cj4+PiAtDQo+Pg0KPj4+IC0JCS8qIFN3aXRjaCBJU09DIGRlc2NyaXB0b3IgY2hhaW4gbnVtYmVy IGJlaW5nIHByb2Nlc3NlZCBieSBTVyovDQo+Pg0KPj4+IC0JCWhzX2VwLT5pc29jX2NoYWluX251 bSA9IChoc19lcC0+aXNvY19jaGFpbl9udW0gXiAxKSAmIDB4MTsNCj4+DQo+Pj4gLQkJaHNfZXAt Pm5leHRfZGVzYyA9IDA7DQo+Pg0KPj4+IC0NCj4+DQo+Pj4gLQkJZGV2X2RiZyhoc290Zy0+ZGV2 LCAiJXM6IFJlc3RhcnRlZCBpc29jaHJvbm91cyBlbmRwb2ludFxuIiwNCj4+DQo+Pj4gLQkJCV9f ZnVuY19fKTsNCj4+DQo+Pj4gLQl9DQo+Pg0KPj4+ICsJaHNfZXAtPnRhcmdldF9mcmFtZSA9IFRB UkdFVF9GUkFNRV9JTklUSUFMOw0KPj4NCj4+PiArCWhzX2VwLT5uZXh0X2Rlc2MgPSAwOw0KPj4N Cj4+PiB9DQo+Pg0KPj4+DQo+Pg0KPj4+IC8qKg0KPj4NCj4+PiBAQCAtMjgxNiwxOCArMjc5Nywy NSBAQCBzdGF0aWMgdm9pZCBkd2MyX2dhZGdldF9oYW5kbGVfbmFrKHN0cnVjdA0KPj4NCj4+PiBk d2MyX2hzb3RnX2VwICpoc19lcCkgIHsNCj4+DQo+Pj4gCXN0cnVjdCBkd2MyX2hzb3RnICpoc290 ZyA9IGhzX2VwLT5wYXJlbnQ7DQo+Pg0KPj4+IAlpbnQgZGlyX2luID0gaHNfZXAtPmRpcl9pbjsN Cj4+DQo+Pj4gKwl1MzIgdG1wOw0KPj4NCj4+Pg0KPj4NCj4+PiAJaWYgKCFkaXJfaW4gfHwgIWhz X2VwLT5pc29jaHJvbm91cykNCj4+DQo+Pj4gCQlyZXR1cm47DQo+Pg0KPj4+DQo+Pg0KPj4+IAlp ZiAoaHNfZXAtPnRhcmdldF9mcmFtZSA9PSBUQVJHRVRfRlJBTUVfSU5JVElBTCkgew0KPj4NCj4+ PiAtCQloc19lcC0+dGFyZ2V0X2ZyYW1lID0gZHdjMl9oc290Z19yZWFkX2ZyYW1lbm8oaHNvdGcp Ow0KPj4NCj4+Pg0KPj4NCj4+PiArCQl0bXAgPSBkd2MyX2hzb3RnX3JlYWRfZnJhbWVubyhoc290 Zyk7DQo+Pg0KPj4NCj4+DQo+PiBJIHRoaW5rIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW50cm9kdWNl IHRtcCwgYW5kIHRoZSBvcmlnaW5hbCBpcyBhbGwgcmlnaHQuDQo+Pg0KPk5vLCB0bXAgcmVxdWly ZWQuIFJlYWRpbmcgY3VycmVudCBmcmFtZSBudW1iZXIgc2hvdWxkIGJlIGRvbmUgYXMgc29vbiBh cw0KPnBvc3NpYmxlLiBUaGlzIGlzIHdoeSBpdCdzIHN0b3JlZCBpbiB0bXAgYW5kIHRoZW4gdXNl ZCBmb3IgYmVsb3cgY2FzZXM6DQo+MS4gRERNQSBtb2RlLiBPbiBkd2MyX2hzb3RnX2NvbXBsZXRl X3JlcXVlc3QoKSBmdW5jdGlvbiBkcml2ZXINCj5pbW1lZGlhdGx5IHF1ZXVlZCBuZXcgcmVxdWVz dCBhbmQgYXMgcmVzdWx0IHRhcmdldF9mcmFtZSBpbmNyZW1lbnRlZCBieQ0KPmludGVydmFsLg0K PjIuIEJETUEgbW9kZS4gdG1wIHJlcXVpcmVkIGlmIGludGVydmFsID4gMS4NCj4+DQoNClNvIGZv ciBib3RoIERETUEgb3IgQkRNQSBtb2RlLCBoc19lcC0+dGFyZ2V0X2ZyYW1lIHNob3VsZCBiZSB1 cGRhdGVkIHRoZQ0KQ3VycmVudCBmcmFtZSBudW1iZXIgaW4gSFcuDQpUaGUgb3JpZ2luYWwgY29k ZSBjYW4gY292ZXIgYm90aCBicmFuY2gsIHJpZ2h0PyANCg0KPj4NCj4+PiAJCWlmICh1c2luZ19k ZXNjX2RtYShoc290ZykpIHsNCj4+DQo+Pj4gKwkJCWR3YzJfaHNvdGdfY29tcGxldGVfcmVxdWVz dChoc290ZywgaHNfZXAsDQo+Pg0KPj4+ICsJCQkJCQkgICAgZ2V0X2VwX2hlYWQoaHNfZXApLA0K Pj4NCj4+PiArCQkJCQkJICAgIC1FTk9EQVRBKTsNCj4+DQo+Pj4gKwkJCWhzX2VwLT50YXJnZXRf ZnJhbWUgPSB0bXA7DQo+Pg0KPj4+ICsJCQlkd2MyX2dhZGdldF9pbmNyX2ZyYW1lX251bShoc19l cCk7DQo+Pg0KPj4+IAkJCWR3YzJfZ2FkZ2V0X3N0YXJ0X2lzb2NfZGRtYShoc19lcCk7DQo+Pg0K Pj4+IAkJCXJldHVybjsNCj4+DQo+Pj4gCQl9DQo+Pg0KPj4+DQo+Pg0KPj4+ICsJCWhzX2VwLT50 YXJnZXRfZnJhbWUgPSB0bXA7DQo+Pg0KPj4+IAkJaWYgKGhzX2VwLT5pbnRlcnZhbCA+IDEpIHsN Cj4+DQo+Pj4gCQkJdTMyIGN0cmwgPSBkd2MyX3JlYWRsKGhzb3RnLT5yZWdzICsNCj4+DQo+Pj4g CQkJCQkgICAgICBESUVQQ1RMKGhzX2VwLT5pbmRleCkpOw0KPj4NCj4+PiBAQCAtMjg0Myw3ICsy ODMxLDggQEAgc3RhdGljIHZvaWQgZHdjMl9nYWRnZXRfaGFuZGxlX25hayhzdHJ1Y3QNCj4+DQo+ Pj4gZHdjMl9oc290Z19lcCAqaHNfZXApDQo+Pg0KPj4+IAkJCQkJICAgIGdldF9lcF9oZWFkKGhz X2VwKSwgMCk7DQo+Pg0KPj4+IAl9DQo+Pg0KPj4+DQo+Pg0KPj4+IC0JZHdjMl9nYWRnZXRfaW5j cl9mcmFtZV9udW0oaHNfZXApOw0KPj4NCj4+PiArCWlmICghdXNpbmdfZGVzY19kbWEoaHNvdGcp KQ0KPj4NCj4+PiArCQlkd2MyX2dhZGdldF9pbmNyX2ZyYW1lX251bShoc19lcCk7DQo+Pg0KPj4+ IH0NCj4+DQo+Pj4NCj4+DQo+Pj4gLyoqDQo+Pg0KPj4+IEBAIC0yOTAxLDkgKzI4OTAsOSBAQCBz dGF0aWMgdm9pZCBkd2MyX2hzb3RnX2VwaW50KHN0cnVjdCBkd2MyX2hzb3RnDQo+Pg0KPj4+ICpo c290ZywgdW5zaWduZWQgaW50IGlkeCwNCj4+DQo+Pj4NCj4+DQo+Pj4gCQkvKiBJbiBERE1BIGhh bmRsZSBpc29jaHJvbm91cyByZXF1ZXN0cyBzZXBhcmF0ZWx5ICovDQo+Pg0KPj4+IAkJaWYgKHVz aW5nX2Rlc2NfZG1hKGhzb3RnKSAmJiBoc19lcC0+aXNvY2hyb25vdXMpIHsNCj4+DQo+Pj4gLQkJ CWR3YzJfZ2FkZ2V0X2NvbXBsZXRlX2lzb2NfcmVxdWVzdF9kZG1hKGhzX2VwKTsNCj4+DQo+Pj4g LQkJCS8qIFRyeSB0byBzdGFydCBuZXh0IGlzb2MgcmVxdWVzdCAqLw0KPj4NCj4+PiAtCQkJZHdj Ml9nYWRnZXRfc3RhcnRfbmV4dF9pc29jX2RkbWEoaHNfZXApOw0KPj4NCj4+PiArCQkJLyogWGZl ckNvbXBsIHNldCBhbG9uZyB3aXRoIEJOQSAqLw0KPj4NCj4+PiArCQkJaWYgKCEoaW50cyAmIERY RVBJTlRfQk5BSU5UUikpDQo+Pg0KPj4+ICsJCQkJZHdjMl9nYWRnZXRfY29tcGxldGVfaXNvY19y ZXF1ZXN0X2RkbWEoaHNfZXApOw0KPj4NCj4+PiAJCX0gZWxzZSBpZiAoZGlyX2luKSB7DQo+Pg0K Pj4+IAkJCS8qDQo+Pg0KPj4+IAkJCSAqIFdlIGdldCBPdXREb25lIGZyb20gdGhlIEZJRk8sIHNv IHdlIG9ubHkgQEAgLTI5NzgsMTUNCj4+DQo+Pj4gKzI5NjcsOCBAQCBzdGF0aWMgdm9pZCBkd2My X2hzb3RnX2VwaW50KHN0cnVjdCBkd2MyX2hzb3RnICpoc290ZywNCj51bnNpZ25lZA0KPj4NCj4+ PiBpbnQgaWR4LA0KPj4NCj4+Pg0KPj4NCj4+PiAJaWYgKGludHMgJiBEWEVQSU5UX0JOQUlOVFIp IHsNCj4+DQo+Pj4gCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogQk5BIGludGVycnVwdFxuIiwg X19mdW5jX18pOw0KPj4NCj4+PiAtDQo+Pg0KPj4+IC0JCS8qDQo+Pg0KPj4+IC0JCSAqIFRyeSB0 byBzdGFydCBuZXh0IGlzb2MgcmVxdWVzdCwgaWYgYW55Lg0KPj4NCj4+PiAtCQkgKiBTb21ldGlt ZXMgdGhlIGVuZHBvaW50IHJlbWFpbnMgZW5hYmxlZCBhZnRlciBCTkEgaW50ZXJydXB0DQo+Pg0K Pj4+IC0JCSAqIGFzc2VydGlvbiwgd2hpY2ggaXMgbm90IGV4cGVjdGVkLCBoZW5jZSB3ZSBjYW4g ZW50ZXIgaGVyZQ0KPj4NCj4+PiAtCQkgKiBjb3VwbGUgb2YgdGltZXMuDQo+Pg0KPj4+IC0JCSAq Lw0KPj4NCj4+PiAJCWlmIChoc19lcC0+aXNvY2hyb25vdXMpDQo+Pg0KPj4+IC0JCQlkd2MyX2dh ZGdldF9zdGFydF9uZXh0X2lzb2NfZGRtYShoc19lcCk7DQo+Pg0KPj4+ICsJCQlkd2MyX2dhZGdl dF9oYW5kbGVfaXNvY19ibmEoaHNfZXApOw0KPj4NCj4+PiAJfQ0KPj4NCj4+Pg0KPj4NCj4+PiAJ aWYgKGRpcl9pbiAmJiAhaHNfZXAtPmlzb2Nocm9ub3VzKSB7DQo+Pg0KPj4+IEBAIC0zNzkxLDYg KzM3NzMsNyBAQCBzdGF0aWMgaW50IGR3YzJfaHNvdGdfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAN Cj4qZXAsDQo+Pg0KPj4+IAl1bnNpZ25lZCBpbnQgZGlyX2luOw0KPj4NCj4+PiAJdW5zaWduZWQg aW50IGksIHZhbCwgc2l6ZTsNCj4+DQo+Pj4gCWludCByZXQgPSAwOw0KPj4NCj4+PiArCXVuc2ln bmVkIGNoYXIgZXBfdHlwZTsNCj4+DQo+Pj4NCj4+DQo+Pj4gCWRldl9kYmcoaHNvdGctPmRldiwN Cj4+DQo+Pj4gCQkiJXM6IGVwICVzOiBhIDB4JTAyeCwgYXR0ciAweCUwMngsIG1wcyAweCUwNHgs IGludHIgJWRcbiIsIEBADQo+Pg0KPj4+IC0zODA5LDYgKzM3OTIsMTUgQEAgc3RhdGljIGludCBk d2MyX2hzb3RnX2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICplcCwNCj4+DQo+Pj4gCQlyZXR1cm4g LUVJTlZBTDsNCj4+DQo+Pj4gCX0NCj4+DQo+Pj4NCj4+DQo+Pj4gKwllcF90eXBlID0gZGVzYy0+ Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7DQo+Pg0KPj4+ICsJLyog SVNPQyBERE1BIHN1cHBvcnRlZCBiSW50ZXJ2YWwgdXAgdG8gMTIgKi8NCj4+DQo+Pj4gKwlpZiAo dXNpbmdfZGVzY19kbWEoaHNvdGcpICYmIGVwX3R5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNP QyAmJg0KPj4NCj4+PiArCSAgICBkaXJfaW4gJiYgZGVzYy0+YkludGVydmFsID4gMTIpIHsNCj4+ DQo+Pj4gKwkJZGV2X2Vycihoc290Zy0+ZGV2LA0KPj4NCj4+PiArCQkJIiVzOiBJU09DIElOOiBi SW50ZXJ2YWw+MTIgbm90IHN1cHBvcnRlZCFcbiIsIF9fZnVuY19fKTsNCj4+DQo+Pj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+Pg0KPj4+ICsJfQ0KPj4NCj4+PiArDQo+Pg0KPj4+IAltcHMgPSB1c2Jf ZW5kcG9pbnRfbWF4cChkZXNjKTsNCj4+DQo+Pj4gCW1jID0gdXNiX2VuZHBvaW50X21heHBfbXVs dChkZXNjKTsNCj4+DQo+Pj4NCj4+DQo+Pj4gQEAgLTM4NTIsMTQgKzM4NDQsMTMgQEAgc3RhdGlj IGludCBkd2MyX2hzb3RnX2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwDQo+Pg0KPj4+ICplcCwNCj4+ DQo+Pj4gCWhzX2VwLT5oYWx0ZWQgPSAwOw0KPj4NCj4+PiAJaHNfZXAtPmludGVydmFsID0gZGVz Yy0+YkludGVydmFsOw0KPj4NCj4+Pg0KPj4NCj4+PiAtCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1 dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsNCj4+DQo+Pj4gKwlzd2l0Y2ggKGVw X3R5cGUpIHsNCj4+DQo+Pj4gCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoNCj4+DQo+Pj4g CQllcGN0cmwgfD0gRFhFUENUTF9FUFRZUEVfSVNPOw0KPj4NCj4+PiAJCWVwY3RybCB8PSBEWEVQ Q1RMX1NFVEVWRU5GUjsNCj4+DQo+Pj4gCQloc19lcC0+aXNvY2hyb25vdXMgPSAxOw0KPj4NCj4+ PiAJCWhzX2VwLT5pbnRlcnZhbCA9IDEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpOw0KPj4NCj4+ PiAJCWhzX2VwLT50YXJnZXRfZnJhbWUgPSBUQVJHRVRfRlJBTUVfSU5JVElBTDsNCj4+DQo+Pj4g LQkJaHNfZXAtPmlzb2NfY2hhaW5fbnVtID0gMDsNCj4+DQo+Pj4gCQloc19lcC0+bmV4dF9kZXNj ID0gMDsNCj4+DQo+Pj4gCQlpZiAoZGlyX2luKSB7DQo+Pg0KPj4+IAkJCWhzX2VwLT5wZXJpb2Rp YyA9IDE7DQo+Pg0KPj4+IC0tDQo+Pg0KPj4+IDIuMTEuMA0KPj4NCj4+Pg0KPj4NCj4+PiAtLQ0K Pj4NCj4+PiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5z dWJzY3JpYmUgbGludXgtdXNiIiBpbiB0aGUgYm9keQ0KPm9mDQo+Pg0KPj4+IGEgbWVzc2FnZSB0 byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnIE1vcmUgbWFqb3Jkb21vIGluZm8gYXQNCj4+DQo+ Pj4NCj5odHRwczovL3VybGRlZmVuc2UucHJvb2Zwb2ludC5jb20vdjIvdXJsP3U9aHR0cC0zQV9f dmdlci5rZXJuZWwub3JnX21ham9yZG8NCj5tby0yRGluZm8uaHRtbCZkPUR3SUdhUSZjPURQTDZf WF82SmtYRng3QVhXcUIwdGcmcj02ejlBbDlGckhSX1pxYg0KPmJ0U0FzRDE2cHZPTDJTM1hIeFFu U3pxOGt1c3lJJm09YVBYWFJtRl9DV0xqSC1VcEllak9zczJxc2FZVkFNTy0NCj5vZVNvTmQxaVRt ZyZzPVJ0cXVGQVYzemN6OTU2S0sxRmlQUFdBNDNrSmw5SW5aS3JjM2pXUVI1OXMmZT0NCj4+DQo+ Pg0KPg0KPlRoYW5rIHlvdSBmb3IgcmV2aWV3Lg0KPg0KPk1pbmFzDQo+LS0NCj5UbyB1bnN1YnNj cmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNi IiBpbg0KPnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3Jn DQo+TW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRv bW8taW5mby5odG1sCg==