From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 51B6989F01 for ; Tue, 25 Jun 2019 07:23:09 +0000 (UTC) From: "Ser, Simon" Date: Tue, 25 Jun 2019 07:23:06 +0000 Message-ID: References: <20190619155518.25129-1-simon.ser@intel.com> <20190619155518.25129-10-simon.ser@intel.com> <20190624132257.2wmh7oxjsozvtszh@ahiler-desk1.fi.intel.com> <7eae002e11a714b044d62538ae8fb53e20fb7017.camel@intel.com> <20190625070335.3rj6qquqmyqgdub3@ahiler-desk1.fi.intel.com> In-Reply-To: <20190625070335.3rj6qquqmyqgdub3@ahiler-desk1.fi.intel.com> Content-Language: en-US Content-ID: <29C08E078B5B064AB1CA8A20FC701307@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v2 9/9] lib/igt_chamelium: autodiscover Chamelium port mappings List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Hiler, Arkadiusz" Cc: "igt-dev@lists.freedesktop.org" , "Peres, Martin" List-ID: T24gVHVlLCAyMDE5LTA2LTI1IGF0IDEwOjAzICswMzAwLCBBcmthZGl1c3ogSGlsZXIgd3JvdGU6 DQo+IE9uIE1vbiwgSnVuIDI0LCAyMDE5IGF0IDA1OjE1OjQ1UE0gKzAzMDAsIFNlciwgU2ltb24g d3JvdGU6DQo+ID4gT24gTW9uLCAyMDE5LTA2LTI0IGF0IDE2OjIyICswMzAwLCBBcmthZGl1c3og SGlsZXIgd3JvdGU6DQo+ID4gPiBPbiBXZWQsIEp1biAxOSwgMjAxOSBhdCAwNjo1NToxOFBNICsw MzAwLCBTaW1vbiBTZXIgd3JvdGU6DQo+ID4gPiA+IFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBmb3Ig Y29uZmlndXJpbmcgQ2hhbWVsaXVtIHBvcnRzIGluIC5pZ3RyYywgbWFraW5nIGl0IGJvdGgNCj4g PiA+ID4gZWFzaWVyIGFuZCBsZXNzIGVycm9yLXByb25lIHRvIHNldHVwIENoYW1lbGl1bSBib2Fy ZHMuDQo+ID4gPiA+IA0KPiA+ID4gPiBBIG5ldyBmdW5jdGlvbiBjaGFtZWxpdW1fYXV0b2Rpc2Nv dmVyIHNldHMgYSBkaWZmZXJlbnQgRURJRCBvbiBlYWNoIENoYW1lbGl1bQ0KPiA+ID4gPiBwb3J0 IGFuZCBwbHVncyB0aGVtLiBXZSB0aGVuIHdhbGsgdGhlIGxpc3Qgb2YgRFJNIGNvbm5lY3RvcnMs IHJlYWQgYmFjayB0aGUNCj4gPiA+ID4gRURJRCBhbmQgaW5mZXIgdGhlIG1hcHBpbmcuDQo+ID4g PiA+IA0KPiA+ID4gPiBUaGUgRURJRCBzZXJpYWwgbnVtYmVyIGlzIHVzZWQgdG8gdGVsbCBlYWNo IHBvcnQgYXBhcnQuIEluIGNhc2UgYSBtYXBwaW5nIGlzDQo+ID4gPiA+IGFscmVhZHkgY29uZmln dXJlZCBpbiB0aGUgLmlndHJjIGZpbGUsIHdlIGNoZWNrIHRoYXQgaXQncyBjb25zaXN0ZW50Lg0K PiA+ID4gPiANCj4gPiA+ID4gTVNUIGlzIG5vdCBoYW5kbGVkIHlldCAocmVxdWlyZXMgcmVmYWN0 b3JpbmcgZXhpc3RpbmcgdGVzdHMgc2luY2UgY29ubmVjdG9yIElEcw0KPiA+ID4gPiBhcmVuJ3Qg c3RhYmxlKS4NCj4gPiA+ID4gDQo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFNpbW9uIFNlciA8c2lt b24uc2VyQGludGVsLmNvbT4NCj4gPiA+ID4gLS0tDQo+ID4gPiA+ICBsaWIvaWd0X2NoYW1lbGl1 bS5jIHwgMjA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+ ID4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMjAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p DQo+ID4gPiA+IA0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9jaGFtZWxpdW0uYyBiL2xp Yi9pZ3RfY2hhbWVsaXVtLmMNCj4gPiA+ID4gaW5kZXggZGNjNTllOWYwYjA0Li5kZGVhMWJhNDdk NGUgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2xpYi9pZ3RfY2hhbWVsaXVtLmMNCj4gPiA+ID4gKysr IGIvbGliL2lndF9jaGFtZWxpdW0uYw0KPiA+ID4gPiBAQCAtMzU4LDcgKzM1OCw3IEBAIHN0YXRp YyB4bWxycGNfdmFsdWUgKmNoYW1lbGl1bV9ycGMoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVt LA0KPiA+ID4gPiAgICovDQo+ID4gPiA+ICB2b2lkIGNoYW1lbGl1bV9wbHVnKHN0cnVjdCBjaGFt ZWxpdW0gKmNoYW1lbGl1bSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQ0KPiA+ID4gPiAg ew0KPiA+ID4gPiAtCWlndF9kZWJ1ZygiUGx1Z2dpbmcgJXNcbiIsIHBvcnQtPm5hbWUpOw0KPiA+ ID4gPiArCWlndF9kZWJ1ZygiUGx1Z2dpbmcgJXMgKENoYW1lbGl1bSBwb3J0IElEICVkKVxuIiwg cG9ydC0+bmFtZSwgcG9ydC0+aWQpOw0KPiA+ID4gPiAgCXhtbHJwY19ERUNSRUYoY2hhbWVsaXVt X3JwYyhjaGFtZWxpdW0sIE5VTEwsICJQbHVnIiwgIihpKSIsIHBvcnQtPmlkKSk7DQo+ID4gPiA+ ICB9DQo+ID4gPiA+ICANCj4gPiA+ID4gQEAgLTE4MjgsNiArMTgyOCwyMDQgQEAgb3V0Og0KPiA+ ID4gPiAgCXJldHVybiByZXQ7DQo+ID4gPiA+ICB9DQo+ID4gPiA+ICANCj4gPiA+ID4gKy8qKg0K PiA+ID4gPiArICogYXV0b2Rpc2NvdmVyX3BvcnRzOiBsaXN0IG9mIHBvcnRzIHdoaWNoIGNhbiBi ZSBhdXRvLWRpc2NvdmVyZWQNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBTZWUgdGhpcyBmaWxl IGZvciBhIGxpc3Qgb2YgQ2hhbWVsaXVtIHBvcnRzOg0KPiA+ID4gPiArICogaHR0cHM6Ly9jaHJv bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3MvcGxhdGZvcm0vY2hhbWVsZW9uLysvbWFz dGVyL2NoYW1lbGVvbmQvdXRpbHMvaWRzLnB5DQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRp YyBjb25zdCBpbnQgYXV0b2Rpc2NvdmVyX3BvcnRzW10gPSB7MSwgMiwgMywgNH07DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyNkZWZpbmUgQVVUT0RJU0NPVkVSX1BPUlRTX0xFTiAoc2l6ZW9mKGF1dG9k aXNjb3Zlcl9wb3J0cykgLyBzaXplb2YoYXV0b2Rpc2NvdmVyX3BvcnRzWzBdKSkNCj4gPiA+IA0K PiA+ID4gV2UgYWxzbyBoYXZlIENIQU1FTElVTV9NQVhfUE9SVFMgd2hpY2ggY291bnRzIHRoZSBu dW1iZXIgb2YgZGlzcGxheQ0KPiA+ID4gcG9ydHMuIEFyZSB3ZSBhbnRpY2lwYXRpbmcgYW55IG5v bi1hdXRvZGlzY292ZXJhYmxlIHBvcnRzPyBBbnkgb3RoZXINCj4gPiA+IHJlYXNvbnMgdG8ga2Vl cCB0aGlzIHNlcGFyYXRlPw0KPiA+IA0KPiA+IFdlIGNvdWxkIGhhdmUgYSB2aWRlb19wb3J0cyBh cnJheS4gSG93ZXZlciBJJ2QgbGlrZSBub3QgdG8gZXhwb3NlIGl0IGluDQo+ID4gdGhlIGhlYWRl ciwgYmVjYXVzZSBwb3J0IElEcyBhcmVuJ3Qgc29tZXRoaW5nIGxpYnJhcnkgdXNlcnMgc2hvdWxk IGNhcmUNCj4gPiBhYm91dC4gVGhlbiB3ZSdkIG5lZWQgdG8gZGVmaW5lIHRoZSBzaXplIG9mIHRo ZSBhcnJheSBpbiB0aGUgaGVhZGVyIGFuZA0KPiA+IHRoZSBhcnJheSBpdHNlbGYgaW4gdGhlIEMg ZmlsZSwgd2hpY2ggaXMgYW5ub3lpbmcgYW5kIGVycm9yLXByb25lLg0KPiA+IA0KPiA+IEZvciB0 aGlzIHJlYXNvbiwgSSdkIHByZWZlciB0byBrZWVwIENIQU1FTElVTV9NQVhfUE9SVFMuDQo+IA0K PiBUaGVyZSBhcmUgc3RpbGwgd2F5cyBvZiBoaWRpbmcgaXQgYmVoaW5kIGV4dGVybiBvciBhIGZ1 bmN0aW9uLCBidXQgSSBhbQ0KPiBub3Qgc3VyZSB0aGUgYWRkZWQgY29tcGxleGl0eSBpcyB3b3J0 aCBpdC4NCg0KVGhpcyBraW5kcyBvZiBkZWZlYXQgaXRzIHB1cnBvc2UsIHNpbmNlIHdlIGNhbid0 IGRlZmluZSBzdGF0aWMgYXJyYXlzDQp3aXRoIHRoZSBsZW5ndGggc2V0IHRvIHRoZSBjb25zdGFu dCBvciBmdW5jdGlvbiByZXR1cm4gdmFsdWUuDQoNCj4gQW55d2F5LCBubyBzdHJvbmcgZmVlbGlu ZyBvbiB0aGlzIG9uZSwganVzdCBzZWVtcyBhIGJpdCBsaWtlIGENCj4gZHVwbGljYXRpb24uDQo+ IA0KPiA+IFRoYXQgc2FpZCwgYW4gZW51bSBmb3IgYWxsIHZpZGVvIHBvcnRzIHdlIGNhcmUgYWJv dXQgaXMgcHJvYmFibHkgYSBnb29kDQo+ID4gaWRlYS4gT3IgbWF5YmUgd2UgY291bGQganVzdCBj YWxsIEdldFN1cHBvcnRlZElucHV0cyBhbmQNCj4gPiBIYXNWaWRlb1N1cHBvcnQgdG8gZ2V0IGEg bGlzdCBvZiBwb3J0cyB0byBhdXRvLWRpc2NvdmVyPw0KPiA+IA0KPiA+IFRoYXQgd291bGQgYmUg YSBsaXR0bGUgYml0IGJldHRlciBzaW5jZSB0aGUgcG9ydCBJRHMgY291bGQgY2hhbmdlIGZvciBh DQo+ID4gZGlmZmVyZW50IENoYW1lbGl1bSBib2FyZC4NCj4gDQo+IFNvdW5kcyBvaw0KPiANCj4g PiA+ID4gK3N0YXRpYyBpbnQgcG9ydF9pZF9mcm9tX2VkaWQoaW50IGRybV9mZCwgZHJtTW9kZUNv bm5lY3RvciAqY29ubmVjdG9yKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCWludCBwb3J0X2lkID0g LTE7DQo+ID4gPiA+ICsJYm9vbCBvazsNCj4gPiA+ID4gKwl1aW50NjRfdCBlZGlkX2Jsb2JfaWQ7 DQo+ID4gPiA+ICsJZHJtTW9kZVByb3BlcnR5QmxvYlJlcyAqZWRpZF9ibG9iOw0KPiA+ID4gPiAr CWNvbnN0IHN0cnVjdCBlZGlkICplZGlkOw0KPiA+ID4gPiArCWNoYXIgbWZnWzNdOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdGlvbiAhPSBEUk1fTU9ERV9DT05O RUNURUQpIHsNCj4gPiA+ID4gKwkJaWd0X2RlYnVnKCJTa2lwcGluZyBhdXRvLWRpc2NvdmVyeSBm b3IgY29ubmVjdG9yICVzLSVkOiAiDQo+ID4gPiA+ICsJCQkgICJjb25uZWN0b3Igc3RhdHVzIGlz IG5vdCBjb25uZWN0ZWRcbiIsDQo+ID4gPiA+ICsJCQkgIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVf c3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLA0KPiA+ID4gPiArCQkJICBjb25uZWN0b3It PmNvbm5lY3Rvcl90eXBlX2lkKTsNCj4gPiA+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ID4gPiArCX0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArCW9rID0ga21zdGVzdF9nZXRfcHJvcGVydHkoZHJtX2ZkLCBj b25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwNCj4gPiA+ID4gKwkJCQkgIERSTV9NT0RFX09CSkVDVF9D T05ORUNUT1IsICJFRElEIiwNCj4gPiA+ID4gKwkJCQkgIE5VTEwsICZlZGlkX2Jsb2JfaWQsIE5V TEwpOw0KPiA+ID4gPiArCWlmICghb2spIHsNCj4gPiA+ID4gKwkJaWd0X2RlYnVnKCJTa2lwcGlu ZyBhdXRvLWRpc2NvdmVyeSBmb3IgY29ubmVjdG9yICVzLSVkOiAiDQo+ID4gPiA+ICsJCQkgICJt aXNzaW5nIHRoZSBFRElEIHByb3BlcnR5XG4iLA0KPiA+ID4gPiArCQkJICBrbXN0ZXN0X2Nvbm5l Y3Rvcl90eXBlX3N0cihjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSwNCj4gPiA+ID4gKwkJCSAg Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCk7DQo+ID4gPiA+ICsJCXJldHVybiAtMTsNCj4g PiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwllZGlkX2Jsb2IgPSBkcm1Nb2RlR2V0UHJv cGVydHlCbG9iKGRybV9mZCwgZWRpZF9ibG9iX2lkKTsNCj4gPiA+ID4gKwlpZ3RfYXNzZXJ0KGVk aWRfYmxvYik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwllZGlkID0gKGNvbnN0IHN0cnVjdCBlZGlk ICopIGVkaWRfYmxvYi0+ZGF0YTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWVkaWRfZ2V0X21mZyhl ZGlkLCBtZmcpOw0KPiA+ID4gPiArCWlmIChtZW1jbXAobWZnLCAiSUdUIiwgMykgIT0gMCkgew0K PiA+ID4gPiArCQlpZ3RfZGVidWcoIlNraXBwaW5nIGNvbm5lY3RvciAlcy0lZCBmb3IgYXV0by1k aXNjb3Zlcnk6ICINCj4gPiA+ID4gKwkJCSAgIm1hbnVmYWN0dXJlciBpcyAlLjNzLCBub3QgSUdU XG4iLA0KPiA+ID4gPiArCQkJICBrbXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cihjb25uZWN0b3It PmNvbm5lY3Rvcl90eXBlKSwNCj4gPiA+ID4gKwkJCSAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlw ZV9pZCwgbWZnKTsNCj4gPiA+ID4gKwkJZ290byBvdXQ7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsJaWYgKGVkaWQtPnByb2RfY29kZVswXSAhPSAnQycgfHwgZWRpZC0+cHJvZF9j b2RlWzFdICE9ICdIJykgew0KPiA+ID4gPiArCQlpZ3Rfd2FybigiSW52YWxpZCBFRElEIGZvciBJ R1QgY29ubmVjdG9yICVzLSVkOiAiDQo+ID4gPiA+ICsJCQkgICJpbnZhbGlkIHByb2R1Y3QgY29k ZVxuIiwNCj4gPiA+ID4gKwkJCSAga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoY29ubmVjdG9y LT5jb25uZWN0b3JfdHlwZSksDQo+ID4gPiA+ICsJCQkgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5 cGVfaWQpOw0KPiA+ID4gPiArCQlnb3RvIG91dDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwlwb3J0X2lkID0gKih1aW50MzJfdCAqKSAmZWRpZC0+c2VyaWFsOw0KPiA+ID4gPiAr CWlndF9kZWJ1ZygiQXV0by1kaXNjb3ZlcnkgbWFwcGVkIGNvbm5lY3RvciAlcy0lZCB0byBDaGFt ZWxpdW0gIg0KPiA+ID4gPiArCQkgICJwb3J0IElEICVkXG4iLA0KPiA+ID4gPiArCQkgIGttc3Rl c3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLA0KPiA+ID4g PiArCQkgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQsIHBvcnRfaWQpOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICtvdXQ6DQo+ID4gPiA+ICsJZHJtTW9kZUZyZWVQcm9wZXJ0eUJsb2IoZWRpZF9i bG9iKTsNCj4gPiA+ID4gKwlyZXR1cm4gcG9ydF9pZDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0K PiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBjaGFtZWxpdW1fYXV0b2Rpc2NvdmVyOiBUT0RPDQo+ ID4gPiA+ICsgKi8NCj4gPiA+IA0KPiA+ID4gQXJlIHlvdSBwbGFubmluZyB0byBnZXQgdGhpcyBk ZXNjcmlwdGlvbiBkb25lPw0KPiA+IA0KPiA+IERlcnANCj4gPiANCj4gPiA+ID4gK3N0YXRpYyBi b29sIGNoYW1lbGl1bV9hdXRvZGlzY292ZXIoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLCBp bnQgZHJtX2ZkKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCWRybU1vZGVSZXMgKnJlczsNCj4gPiA+ ID4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7DQo+ID4gPiA+ICsJc3RydWN0IGNoYW1l bGl1bV9wb3J0ICpwb3J0Ow0KPiA+ID4gPiArCXNpemVfdCBpLCBqLCBwb3J0X2luZGV4Ow0KPiA+ ID4gPiArCWludCBwb3J0X2lkOw0KPiA+ID4gPiArCXVpbnQzMl90IGNvbm5faWQ7DQo+ID4gPiA+ ICsJc3RydWN0IGNoYW1lbGl1bV9lZGlkICplZGlkOw0KPiA+ID4gPiArCWJvb2wgZm91bmQ7DQo+ ID4gPiA+ICsJdWludDMyX3QgYXV0b2Rpc2NvdmVyZWRbQVVUT0RJU0NPVkVSX1BPUlRTX0xFTl0g PSB7MH07DQo+ID4gPiA+ICsJY2hhciBjb25uX25hbWVbNjRdOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJaWd0X2RlYnVnKCJTdGFydGluZyBDaGFtZWxpdW0gcG9ydCBhdXRvLWRpc2NvdmVyeVxuIik7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwllZGlkID0gY2hhbWVsaXVtX25ld19lZGlkKGNoYW1lbGl1 bSwgaWd0X2ttc19nZXRfYmFzZV9lZGlkKCkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogU2V0 IEVESUQgYW5kIHBsdWcgcG9ydHMgd2Ugd2FudCB0byBhdXRvLWRpc2NvdmVyICovDQo+ID4gPiA+ ICsJcG9ydF9pbmRleCA9IGNoYW1lbGl1bS0+cG9ydF9jb3VudDsNCj4gPiA+ID4gKwlmb3IgKGkg PSAwOyBpIDwgQVVUT0RJU0NPVkVSX1BPUlRTX0xFTjsgaSsrKSB7DQo+ID4gPiA+ICsJCXBvcnRf aWQgPSBhdXRvZGlzY292ZXJfcG9ydHNbaV07DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJLyogTm8g bmVlZCB0byBhdXRvLWRpc2NvdmVyIHBvcnRzIGV4cGxpY2l0bHkgY29uZmlndXJlZCBpbiB0aGUN Cj4gPiA+ID4gKwkJICogLmlndHJjIGZpbGUuICovDQo+ID4gPiA+ICsJCWZvdW5kID0gZmFsc2U7 DQo+ID4gPiA+ICsJCWZvciAoaiA9IDA7IGogPCBjaGFtZWxpdW0tPnBvcnRfY291bnQ7IGorKykg ew0KPiA+ID4gPiArCQkJaWYgKGNoYW1lbGl1bS0+cG9ydHNbal0uaWQgPT0gcG9ydF9pZCkgew0K PiA+ID4gPiArCQkJCWZvdW5kID0gdHJ1ZTsNCj4gPiA+ID4gKwkJCQlicmVhazsNCj4gPiA+ID4g KwkJCX0NCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArCQlpZiAoZm91bmQpDQo+ID4gPiA+ICsJCQlj b250aW51ZTsNCj4gPiA+IA0KPiA+ID4gd2UgYXJlIHNraXBwaW5nIHNldGluZyBlZGlkIGFuZCBw bHVnaW5nIHRoZSBwb3J0IGlmIGl0IHdhcyBkZWZpbmVkIGluIC5pZ3RyYw0KPiA+IA0KPiA+IEdv b2QgY2F0Y2guIEluIGZhY3QgeW91J3ZlIGJlZW4gcmV2aWV3aW5nIHYyLiBJJ3ZlIHBvc3RlZCB2 MyB3aGljaA0KPiA+IGZpeGVzIHRoaXMgaXNzdWUuDQo+IA0KPiBBaCwgcmlnaHQuIEkgaGF2ZSBy ZWFkIHYzIG5vdyBhbmQgaXQgbG9va3Mgb2suIFRoYW5rcyENCj4gDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwkJaWd0X2Fzc2VydChwb3J0X2luZGV4IDwgQ0hBTUVMSVVNX01BWF9QT1JUUyk7DQo+ID4g PiA+ICsJCXBvcnQgPSAmY2hhbWVsaXVtLT5wb3J0c1twb3J0X2luZGV4XTsNCj4gPiA+ID4gKwkJ cG9ydF9pbmRleCsrOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCXBvcnQtPmlkID0gcG9ydF9pZDsN Cj4gDQo+IE9uZSBtb3JlIG5pdDoNCj4gDQo+IE5hbWluZyBwb3J0X2luZGV4LCBwb3J0LCBwb3J0 LT5pZCBhbmQgcG9ydF9pZC4gV2UgYWxzbyBoYXZlIDMgd2F5cyBvZg0KPiBpdGVyYXRpbmcgb3Zl ciBwb3J0cyB1c2luZyBpLCBqIGFuZCBwb3J0X2luZGV4LiBXaGlsZSByZWFkaW5nIHYzIEkgZm91 bmQNCj4gaXQgYXMgaGFyZCB0byBmb2xsb3cgYXMgd2hlbiBJIHdhcyByZWFkaW5nIHYyDQo+IA0K PiBzdHJlYW1saW5pbmluZyBpdCBhIGJpdCB3b3VsZCBiZSBuaWNlDQo+IA0KPiA+ID4gPiArDQo+ ID4gPiA+ICsJCWNoYW1lbGl1bV9wb3J0X3NldF9lZGlkKGNoYW1lbGl1bSwgcG9ydCwgZWRpZCk7 DQo+ID4gPiA+ICsJCWNoYW1lbGl1bV9wbHVnKGNoYW1lbGl1bSwgcG9ydCk7DQo+ID4gPiA+ICsJ fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogUmVwcm9iZSBjb25uZWN0b3JzIGFuZCBidWlsZCB0 aGUgbWFwcGluZyAqLw0KPiA+ID4gPiArCXJlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtX2Zk KTsNCj4gPiA+ID4gKwlpZiAoIXJlcykNCj4gPiA+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IHJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsr KSB7DQo+ID4gPiA+ICsJCWNvbm5faWQgPSByZXMtPmNvbm5lY3RvcnNbaV07DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwkJLyogUmVhZCB0aGUgRURJRCBhbmQgcGFyc2UgdGhlIENoYW1lbGl1bSBwb3J0 IElEIHdlIHN0b3JlZA0KPiA+ID4gPiArCQkgKiB0aGVyZS4gKi8NCj4gPiA+ID4gKwkJY29ubmVj dG9yID0gZHJtTW9kZUdldENvbm5lY3Rvcihkcm1fZmQsIHJlcy0+Y29ubmVjdG9yc1tpXSk7DQo+ ID4gPiA+ICsJCXBvcnRfaWQgPSBwb3J0X2lkX2Zyb21fZWRpZChkcm1fZmQsIGNvbm5lY3Rvcik7 DQo+ID4gPiA+ICsJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7DQo+ID4gPiA+ICsJ CWlmIChwb3J0X2lkIDwgMCkNCj4gPiA+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ID4gDQo+ID4gPiBo ZXJlIHdlIHdvbid0IGdldCBhIHNlbnNpYmxlIHZhbHVlIGFuZCBjb250aW51ZTsNCj4gPiA+IA0K PiA+ID4gPiArDQo+ID4gPiA+ICsJCS8qIElmIHdlIGFscmVhZHkgaGF2ZSBhIG1hcHBpbmcgZnJv bSB0aGUgY29uZmlnIGZpbGUsIGNoZWNrDQo+ID4gPiA+ICsJCSAqIHRoYXQgaXQncyBjb25zaXN0 ZW50LiAqLw0KPiA+ID4gPiArCQlmb3VuZCA9IGZhbHNlOw0KPiA+ID4gPiArCQlmb3IgKGogPSAw OyBqIDwgY2hhbWVsaXVtLT5wb3J0X2NvdW50OyBqKyspIHsNCj4gPiA+ID4gKwkJCXBvcnQgPSAm Y2hhbWVsaXVtLT5wb3J0c1tqXTsNCj4gPiA+ID4gKwkJCWlmIChwb3J0LT5jb25uZWN0b3JfaWQg PT0gY29ubl9pZCkgew0KPiA+ID4gPiArCQkJCWZvdW5kID0gdHJ1ZTsNCj4gPiA+ID4gKwkJCQlp Z3RfYXNzZXJ0X2YocG9ydC0+aWQgPT0gcG9ydF9pZCwNCj4gPiA+ID4gKwkJCQkJICAgICAiSW5j b25zaXN0ZW5jeSBkZXRlY3RlZCBpbiAuaWd0cmM6ICINCj4gPiA+ID4gKwkJCQkJICAgICAiY29u bmVjdG9yICVzIGlzIGNvbmZpZ3VyZWQgd2l0aCAiDQo+ID4gPiA+ICsJCQkJCSAgICAgIkNoYW1l bGl1bSBwb3J0ICVkLCBidXQgaXMgIg0KPiA+ID4gPiArCQkJCQkgICAgICJjb25uZWN0ZWQgdG8g cG9ydCAlZFxuIiwNCj4gPiA+ID4gKwkJCQkJICAgICBwb3J0LT5uYW1lLCBwb3J0LT5pZCwgcG9y dF9pZCk7DQo+ID4gPiA+ICsJCQkJYnJlYWs7DQo+ID4gPiANCj4gPiA+IHNvIHRoaXMgd2hvbGUg c2VjdGlvbiBjaGVja2luZyBjb25zaXN0ZW5jeSBzZWVtcyB0byBtYWtlIG5vIHNlbnNlDQo+ID4g PiANCj4gPiA+IE9yIGFtIEkgcmVhZGluZyB0aGlzIHdyb25nPw0KPiA+ID4gDQo+ID4gPiA+ICsJ CQl9DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKwkJaWYgKGZvdW5kKQ0KPiA+ID4gPiArCQkJY29u dGludWU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJLyogR2V0IGdvdCBhIG5ldyBtYXBwaW5nICov DQo+ID4gPiANCj4gPiA+IEdldCBnb3Q/DQo+ID4gPiANCj4gPiA+ID4gKwkJZm91bmQgPSBmYWxz ZTsNCj4gPiA+ID4gKwkJZm9yIChqID0gMDsgaiA8IEFVVE9ESVNDT1ZFUl9QT1JUU19MRU47IGor Kykgew0KPiA+ID4gPiArCQkJaWYgKHBvcnRfaWQgPT0gYXV0b2Rpc2NvdmVyX3BvcnRzW2pdKSB7 DQo+ID4gPiA+ICsJCQkJZm91bmQgPSB0cnVlOw0KPiA+ID4gPiArCQkJCWF1dG9kaXNjb3ZlcmVk W2pdID0gY29ubl9pZDsNCj4gPiA+ID4gKwkJCQlicmVhazsNCj4gPiA+ID4gKwkJCX0NCj4gPiA+ ID4gKwkJfQ0KPiA+ID4gPiArCQlpZ3RfYXNzZXJ0X2YoZm91bmQsICJBdXRvLWRpc2NvdmVyZWQg YSBwb3J0ICglZCkgd2UgaGF2ZW4ndCAiDQo+ID4gPiA+ICsJCQkgICAgICJzZXR1cFxuIiwgcG9y dF9pZCk7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJZHJtTW9kZUZyZWVSZXNv dXJjZXMocmVzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIFdlIG5vdyBoYXZlIGEgQ2hhbWVs aXVtIHBvcnQgSUQg4oaUIERSTSBjb25uZWN0b3IgSUQgbWFwcGluZzoNCj4gPiA+ID4gKwkgKiBh dXRvZGlzY292ZXJfcG9ydHMgY29udGFpbnMgdGhlIENoYW1lbGl1bSBwb3J0IElEcyBhbmQNCj4g PiA+ID4gKwkgKiBhdXRvZGlzY292ZXJlZCBjb250YWlucyB0aGUgRFJNIGNvbm5lY3RvciBJRHMu ICovDQo+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IEFVVE9ESVNDT1ZFUl9QT1JUU19MRU47IGkr Kykgew0KPiA+ID4gPiArCQlwb3J0X2lkID0gYXV0b2Rpc2NvdmVyX3BvcnRzW2ldOw0KPiA+ID4g PiArCQljb25uX2lkID0gYXV0b2Rpc2NvdmVyZWRbaV07DQo+ID4gPiA+ICsJCWlmICghY29ubl9p ZCkgew0KPiA+ID4gPiArCQkJY29udGludWU7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArCQlwb3J0ID0gJmNoYW1lbGl1bS0+cG9ydHNbY2hhbWVsaXVtLT5wb3J0X2NvdW50XTsN Cj4gPiA+ID4gKwkJY2hhbWVsaXVtLT5wb3J0X2NvdW50Kys7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KwkJcG9ydC0+aWQgPSBwb3J0X2lkOw0KPiA+ID4gPiArCQlwb3J0LT50eXBlID0gY2hhbWVsaXVt X2dldF9wb3J0X3R5cGUoY2hhbWVsaXVtLCBwb3J0KTsNCj4gPiA+ID4gKwkJcG9ydC0+Y29ubmVj dG9yX2lkID0gY29ubl9pZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQljb25uZWN0b3IgPSBkcm1N b2RlR2V0Q29ubmVjdG9yQ3VycmVudChkcm1fZmQsIGNvbm5faWQpOw0KPiA+ID4gPiArCQlzbnBy aW50Zihjb25uX25hbWUsIHNpemVvZihjb25uX25hbWUpLCAiJXMtJXUiLA0KPiA+ID4gPiArCQkJ IGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLA0K PiA+ID4gPiArCQkJIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQpOw0KPiA+ID4gPiArCQlk cm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOw0KPiA+ID4gPiArCQlwb3J0LT5uYW1lID0g c3RyZHVwKGNvbm5fbmFtZSk7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJY2hh bWVsaXVtX3Jlc2V0KGNoYW1lbGl1bSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4gdHJ1 ZTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiAgc3RhdGljIGJvb2wgY2hhbWVsaXVt X3JlYWRfY29uZmlnKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwgaW50IGRybV9mZCkNCj4g PiA+ID4gIHsNCj4gPiA+ID4gIAlHRXJyb3IgKmVycm9yID0gTlVMTDsNCj4gPiA+ID4gQEAgLTE4 NDUsNyArMjA0MywxMCBAQCBzdGF0aWMgYm9vbCBjaGFtZWxpdW1fcmVhZF9jb25maWcoc3RydWN0 IGNoYW1lbGl1bSAqY2hhbWVsaXVtLCBpbnQgZHJtX2ZkKQ0KPiA+ID4gPiAgCQlyZXR1cm4gZmFs c2U7DQo+ID4gPiA+ICAJfQ0KPiA+ID4gPiAgDQo+ID4gPiA+IC0JcmV0dXJuIGNoYW1lbGl1bV9y ZWFkX3BvcnRfbWFwcGluZ3MoY2hhbWVsaXVtLCBkcm1fZmQpOw0KPiA+ID4gPiArCWlmICghY2hh bWVsaXVtX3JlYWRfcG9ydF9tYXBwaW5ncyhjaGFtZWxpdW0sIGRybV9mZCkpIHsNCj4gPiA+ID4g KwkJcmV0dXJuIGZhbHNlOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKwlyZXR1cm4gY2hhbWVsaXVt X2F1dG9kaXNjb3ZlcihjaGFtZWxpdW0sIGRybV9mZCk7DQo+ID4gPiA+ICB9DQo+ID4gPiA+ICAN Cj4gPiA+ID4gIC8qKg0KPiA+ID4gPiAtLSANCj4gPiA+ID4gMi4yMi4wDQo+ID4gPiA+IA0KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWls aW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2