From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Koenig, Christian" Subject: Re: [PATCH 6/8] drm/amdgpu: allocate VM PDs/PTs on demand Date: Wed, 6 Feb 2019 09:06:37 +0000 Message-ID: <10356d12-8a73-cc2d-359c-7e10275c050e@amd.com> References: <20190204124256.1765-1-christian.koenig@amd.com> <20190204124256.1765-6-christian.koenig@amd.com> <2feffc18-277e-b3b9-8991-2afae9558bdf@gmail.com> <7bf939a3-cfe6-9559-8479-4c69368d369a@amd.com> <1a54fcea-e90b-159d-23b8-239e0d66a45d@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1a54fcea-e90b-159d-23b8-239e0d66a45d-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US Content-ID: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Kuehling, Felix" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" QW0gMDYuMDIuMTkgdW0gMDA6NTEgc2NocmllYiBLdWVobGluZywgRmVsaXg6DQo+IE9uIDIwMTkt MDItMDUgMTE6MDAgYS5tLiwgS29lbmlnLCBDaHJpc3RpYW4gd3JvdGU6DQo+PiBBaCEgVGhlIGlu aXRpYWwgY2xlYXIgb2YgdGhlIFBEcyBpcyBzeW5jaW5nIHRvIGV2ZXJ5dGhpbmchDQo+IFJpZ2h0 LiBVc2luZyBhbWRncHVfc3luY19yZXN2KC4uLiBBTURHUFVfRkVOQ0VfT1dORVJfVk0gLi4uKSBp bg0KPiBhbWRncHVfdm1fY2xlYXJfYm8gc2VlbXMgdG8gaGVscC4gQnV0IGlmIEkgYWxzbyBjaGFu Z2UgdGhlDQo+IGFtZGdwdV9qb2Jfc3VibWl0IHRvIHVzZSBBTURHUFVfRkVOQ0VfT1dORVJfVk0s IEkgZ2V0IGEgVk0gZmF1bHQgYW5kIENQDQo+IGhhbmcgdmVyeSBlYXJseSBpbiBteSB0ZXN0LiBO b3Qgc3VyZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBUaGlzIGlzDQo+IHdoYXQgSSBjaGFuZ2Vk Og0KPg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Zt LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYw0KPiBpbmRleCA4YjI0 MGY5Li4wNmMyOGFjIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdm0uYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0u Yw0KPiBAQCAtODI2LDE3ICs4MjYsMTggQEAgc3RhdGljIGludCBhbWRncHVfdm1fY2xlYXJfYm8o c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsDQo+ICAgIA0KPiAgICAgICAgICAgV0FSTl9PTihq b2ItPmlic1swXS5sZW5ndGhfZHcgPiA2NCk7DQo+ICAgICAgICAgICByID0gYW1kZ3B1X3N5bmNf cmVzdihhZGV2LCAmam9iLT5zeW5jLCBiby0+dGJvLnJlc3YsDQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgQU1ER1BVX0ZFTkNFX09XTkVSX1VOREVGSU5FRCwgZmFsc2UpOw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFNREdQVV9GRU5DRV9PV05FUl9WTSwgZmFsc2UpOw0K DQpUaGF0J3MgY29ycmVjdC4NCg0KPiAgICAgICAgICAgaWYgKHIpDQo+ICAgICAgICAgICAgICAg ICAgIGdvdG8gZXJyb3JfZnJlZTsNCj4gICAgDQo+IC0gICAgICAgciA9IGFtZGdwdV9qb2Jfc3Vi bWl0KGpvYiwgJnZtLT5lbnRpdHksIEFNREdQVV9GRU5DRV9PV05FUl9VTkRFRklORUQsDQo+ICsg ICAgICAgciA9IGFtZGdwdV9qb2Jfc3VibWl0KGpvYiwgJnZtLT5lbnRpdHksIEFNREdQVV9GRU5D RV9PV05FUl9WTSwNCg0KVGhpcyBjaGFuZ2UgbW9zdCBsaWtlbHkgZG9lc24ndCBtYWtlIGEgZGlm ZmVyZW5jZS4NCg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmZW5jZSk7DQo+ ICAgICAgICAgICBpZiAocikNCj4gICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlOw0K PiAgICANCj4gICAgICAgICAgIGFtZGdwdV9ib19mZW5jZShibywgZmVuY2UsIHRydWUpOw0KPiAt ICAgICAgIGRtYV9mZW5jZV9wdXQoZmVuY2UpOw0KPiArICAgICAgIGRtYV9mZW5jZV9wdXQodm0t Pmxhc3RfdXBkYXRlKTsNCj4gKyAgICAgICB2bS0+bGFzdF91cGRhdGUgPSBmZW5jZTsNCg0KVGhp cyBpcyBtb3N0IGxpa2VseSBpbmNvcnJlY3QuDQoNCj4gICAgDQo+ICAgICAgICAgICBpZiAoYm8t PnNoYWRvdykNCj4gICAgICAgICAgICAgICAgICAgcmV0dXJuIGFtZGdwdV92bV9jbGVhcl9ibyhh ZGV2LCB2bSwgYm8tPnNoYWRvdywNCj4NCj4gQmFzaWNhbGx5IEkgdHJpZWQgdG8gZG8gdGhlIHN5 bmNocm9uaXphdGlvbiBleGFjdGx5IGxpa2UNCj4gYW1kZ3B1X3ZtX3VwZGF0ZV9kaXJlY3Rvcmll cy4NCj4NCj4gVGhlIG9ubHkgd2F5IHRoaXMgY2xlYXIgY291bGQgY2F1c2UgYSBWTSBmYXVsdCBp cywgaWYgYSBzdWJzZXF1ZW50DQo+IFBURS9QRFMgdXBkYXRlIGhhcHBlbnMgdG9vIGVhcmx5IGFu ZCBnZXRzIG92ZXJ3cml0dGVuIGJ5IHRoZSBwZW5kaW5nDQo+IGNsZWFyLiBCdXQgZG9uJ3QgdGhl IGNsZWFyIGFuZCB0aGUgbmV4dCBQVEUvUERFIHVwZGF0ZSBnbyB0byB0aGUgc2FtZQ0KPiBxdWV1 ZSAodm0tPmVudGl0eSkgYW5kIGFyZSBpbXBsaWNpdGx5IHN5bmNocm9uaXplZD8NCg0KTmVlZCB0 byBjaGVjayB3aGVyZSB0aGlzIGlzIGNvbWluZyBmcm9tLg0KDQo+IEFuc3dlciBhZnRlciBhbm90 aGVyIGhvdXIgb2YgcG91cmluZyBvdmVyIGNvZGUgYW5kIGhpc3Rvcnk6IE5vLCBzY2hlZA0KPiBl bnRpdGllcyBhcmUgbm8gbG9uZ2VyIGVxdWl2YWxlbnQgdG8gcXVldWVzLiBUaGUgc2NoZWR1bGVy IGNhbiBpdHNlbGYNCj4gbG9hZC1iYWxhbmNlIFZNIHVwZGF0ZXMgdXNpbmcgbXVsdGlwbGUgU0RN QSBxdWV1ZXMuIFNpZ2guDQoNClRoYXQgaXMgdW5wcm9ibGVtYXRpYy4gTG9hZCBiYWxhbmNpbmcg aGFwcGVucyBvbmx5IHdoZW4gdGhlIGVudGl0eSBpcyBpZGxlLg0KDQpFLmcuIHN1Ym1pc3Npb25z IHRvIHRoZSBzYW1lIGVudGl0eSBuZXZlciBydW4gaW4gcGFyYWxsZWwuDQoNCj4gT0ssIHNvIHBh Z2UgdGFibGUgdXBkYXRlcyB0byBkaWZmZXJlbnQgUFRFcyBkb24ndCB1c3VhbGx5IG5lZWQgdG8N Cj4gc3luY2hyb25pemUgd2l0aCBlYWNoIG90aGVyLiBCdXQgaG93IGRvIHBhZ2UgdGFibGUgdXBk YXRlcyB0byB0aGUgc2FtZQ0KPiBhZGRyZXNzIGdldCBzeW5jaHJvbml6ZWQ/IEhvdyBkbyB5b3Ug Z3VhcmFudGVlIHRoYXQgdHdvIHVwZGF0ZXMgb2YgdGhlDQo+IHNhbWUgUFRFIGFyZSBwcm9jZXNz ZWQgYnkgdGhlIGhhcmR3YXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyLCBpZg0KPiBBTURHUFVfRkVO Q0VfT1dORVJfVk0gZmVuY2VzIGRvbid0IHN5bmNocm9uaXplIHdpdGggZWFjaCBvdGhlcj8NCg0K TWhtLCBuZWVkIHRvIGRvdWJsZSBjaGVjayBidXQgdGhhdCBleHBsYW5hdGlvbiBkb2Vzbid0IHNl ZW0gdG8gZml0LiANClRoZXJlIG11c3QgYmUgc29tZXRoaW5nIGVsc2UgZ29pbmcgb24uDQoNCj4N Cj4NCj4+IE9rLCB0aGF0IGlzIGVhc3kgdG8gZml4Lg0KPiBOb3QgdGhhdCBlYXN5LiBTZWUgYWJv dmUuIDspDQoNCldlbGwgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgd2h5IHlvdSBydW4gaW50 byBWTSBmYXVsdHMsIGJ1dCANCmJhc2ljYWxseSByZXBsYWNpbmcgdGhlIHBhcmFtZXRlciBpbiBh bWRncHVfc3luY19yZXN2IHNob3VsZCBhbHJlYWR5IGRvIA0KdGhlIHRyaWNrLg0KDQpSZWdhcmRz LA0KQ2hyaXN0aWFuLg0KDQo+DQo+IFJlZ2FyZHMsDQo+ICAgwqAgRmVsaXgNCj4NCj4NCj4NCj4+ IENocmlzdGlhbi4NCj4+DQo+PiBBbSAwNS4wMi4xOSB1bSAxNjo0OSBzY2hyaWViIEt1ZWhsaW5n LCBGZWxpeDoNCj4+PiBJIHNhdyBhIGJhY2t0cmFjZSBmcm9tIHRoZSBHUFUgc2NoZWR1bGVyIHdo ZW4gSSB3YXMgZGVidWdnaW5nIHRoaXMgeWVzdGVyZGF5LCBidXQgdGhvc2UgYmFja3RyYWNlcyBu ZXZlciB0ZWxsIHVzIHdoZXJlIHRoZSBjb21tYW5kIHN1Ym1pc3Npb24gY2FtZSBmcm9tLiBJdCBj b3VsZCBiZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIG9yIHNvbWUgbWlncmF0aW9uIGF0IGJ1ZmZl ci12YWxpZGF0aW9uLiBCYXNpY2FsbHksIGFueSBjb21tYW5kIHN1Ym1pc3Npb24gdHJpZ2dlcmVk IGJ5IHBhZ2UgdGFibGUgYWxsb2NhdGlvbiB0aGF0IHN5bmNocm9uaXplcyB3aXRoIHRoZSBQRCBy ZXNlcnZhdGlvbiBvYmplY3QgaXMgYSBwcm9ibGVtLg0KPj4+DQo+Pj4gUmVnYXJkcywNCj4+PiAg ICAgIEZlbGl4DQo+Pj4NCj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4+IEZyb206 IENocmlzdGlhbiBLw7ZuaWcgPGNrb2VuaWcubGVpY2h0enVtZXJrZW5AZ21haWwuY29tPg0KPj4+ IFNlbnQ6IFR1ZXNkYXksIEZlYnJ1YXJ5IDA1LCAyMDE5IDEwOjQwIEFNDQo+Pj4gVG86IEt1ZWhs aW5nLCBGZWxpeCA8RmVsaXguS3VlaGxpbmdAYW1kLmNvbT47IEtvZW5pZywgQ2hyaXN0aWFuIDxD aHJpc3RpYW4uS29lbmlnQGFtZC5jb20+OyBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0K Pj4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggNi84XSBkcm0vYW1kZ3B1OiBhbGxvY2F0ZSBWTSBQRHMv UFRzIG9uIGRlbWFuZA0KPj4+DQo+Pj4gQW0gMDUuMDIuMTkgdW0gMTY6MjAgc2NocmllYiBLdWVo bGluZywgRmVsaXg6DQo+Pj4+Pj4gVGhpcyBtYXkgY2F1c2UgcmVncmVzc2lvbnMgaW4gS0ZEIGlm IFBUIEJPIGFsbG9jYXRpb24gY2FuIHRyaWdnZXINCj4+Pj4+PiBldmljdGlvbiBmZW5jZXMuDQo+ Pj4+PiBJIGRvbid0IHRoaW5rIHRoYXQgY2FuIGhhcHBlbiwgYnV0IG5lZWQgdG8gZG91YmxlIGNo ZWNrIGFzIHdlbGwuDQo+Pj4+Pg0KPj4+Pj4gT3RoZXJ3aXNlIGFsbG9jYXRpbmcgcGFnZSB0YWJs ZXMgY291bGQgdHJ5IHRvIGV2aWN0IG90aGVyIHBhZ2UgdGFibGVzIGZyb20gdGhlIHNhbWUgcHJv Y2VzcyBhbmQgdGhhdCBzZXJpb3VzbHkgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UuDQo+Pj4+IEV2 aWN0aW9uIGZlbmNlcyBkb24ndCBjYXVzZSBhY3R1YWwgbWVtb3J5IGV2aWN0aW9ucy4gVGhleSBh cmUgdGhlIHJlc3VsdCBvZiBtZW1vcnkgZXZpY3Rpb25zLiBUaGV5IGNhdXNlIEtGRCBwcm9jZXNz ZXMgdG8gYmUgcHJlZW1wdGVkIGluIG9yZGVyIHRvIGFsbG93IHRoZSBmZW5jZSB0byBzaWduYWwg c28gbWVtb3J5IGNhbiBiZSBldmljdGVkLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgcGFnZSB0YWJs ZSBhbGxvY2F0aW9uIHdhaXRzIGZvciB0aGUgZmVuY2VzIG9uIHRoZSBQRCByZXNlcnZhdGlvbiwg d2hpY2ggbG9va3MgbGlrZSBhbiBldmljdGlvbiB0byBLRkQgYW5kIHRyaWdnZXJzIGFuIHVubmVj ZXNzYXJ5IHByZWVtcHRpb24uIFRoZXJlIGlzIG5vIGFjdHVhbCBtZW1vcnkgZXZpY3Rpb24gaGFw cGVuaW5nIGhlcmUuDQo+Pj4gWWVhaCwgYnV0IHdoZXJlIGlzIHRoYXQgYWN0dWFsbHkgY29taW5n IGZyb20/DQo+Pj4NCj4+PiBJdCBzb3VuZHMgbGlrZSB3ZSBzdGlsbCB1bm5lY2Vzc2FyeSBzeW5j aHJvbml6ZSBwYWdlIHRhYmxlIHVwZGF0ZXMgc29tZXdoZXJlLg0KPj4+DQo+Pj4gRG8geW91IGhh dmUgYSBjYWxsIGNoYWluPw0KPj4+DQo+Pj4gUmVnYXJkcywNCj4+PiBDaHJpc3RpYW4uDQo+Pj4N Cj4+Pj4gUmVnYXJkcywNCj4+Pj4gICAgICAgRmVsaXgNCj4+Pj4NCj4+Pj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4+Pj4gRnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2tvZW5pZy5sZWlj aHR6dW1lcmtlbkBnbWFpbC5jb20+DQo+Pj4+IFNlbnQ6IFR1ZXNkYXksIEZlYnJ1YXJ5IDA1LCAy MDE5IDY6MzcgQU0NCj4+Pj4gVG86IEt1ZWhsaW5nLCBGZWxpeCA8RmVsaXguS3VlaGxpbmdAYW1k LmNvbT47DQo+Pj4+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+Pj4+IFN1YmplY3Q6 IFJlOiBbUEFUQ0ggNi84XSBkcm0vYW1kZ3B1OiBhbGxvY2F0ZSBWTSBQRHMvUFRzIG9uIGRlbWFu ZA0KPj4+Pg0KPj4+Pj4gVGhpcyBtYXkgY2F1c2UgcmVncmVzc2lvbnMgaW4gS0ZEIGlmIFBUIEJP IGFsbG9jYXRpb24gY2FuIHRyaWdnZXINCj4+Pj4+IGV2aWN0aW9uIGZlbmNlcy4NCj4+Pj4gSSBk b24ndCB0aGluayB0aGF0IGNhbiBoYXBwZW4sIGJ1dCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhcyB3 ZWxsLg0KPj4+Pg0KPj4+PiBPdGhlcndpc2UgYWxsb2NhdGluZyBwYWdlIHRhYmxlcyBjb3VsZCB0 cnkgdG8gZXZpY3Qgb3RoZXIgcGFnZSB0YWJsZXMgZnJvbSB0aGUgc2FtZSBwcm9jZXNzIGFuZCB0 aGF0IHNlcmlvdXNseSBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4NCj4+Pj4NCj4+Pj4+IERvIHlv dSBrbm93IHdoZXRoZXIgUFQgQk8gYWxsb2NhdGlvbiB3b3VsZCB3YWl0IG9uIHRoZSBwYWdlLWRp cmVjdG9yeQ0KPj4+Pj4gcmVzZXJ2YXRpb24gb2JqZWN0IHdpdGhvdXQgdGhlIHN5bmMtb2JqZWN0 IEFQSSBhbnl3aGVyZT8NCj4+Pj4gRm9yIGluc2lkZSB0aGUga2VybmVsIEkgY2FuJ3QgdGhpbmsg b2YgYW55IHJlbGV2YW50IHVzZSBjYXNlLCBleGNlcHQgZm9yIHRoZSBldmljdGlvbiBjYWxsIHBh dGggYW5kIHRoZXJlIGl0IGlzIGludGVudGlvbmFsLg0KPj4+Pg0KPj4+PiBPbmUgdGhpbmcgd2hp Y2ggd2lsbCBhbHdheXMgd2FpdCBmb3IgYWxsIGZlbmNlcyBpcyB0aGUgZGlzcGxheSBjb2RlIHBh dGgsIGJ1dCB0aGF0IGlzIG5vdCByZWxldmFudCBoZXJlLiAoSXNuJ3QgaXQ/KS4NCj4+Pj4NCj4+ Pj4gV2hhdCBtaWdodCBiZSBxdWVzdGlvbmFibGUgaXMgYW1kZ3B1X2dlbV93YWl0X2lkbGVfaW9j dGwoKSwgYnV0IEkgdGhpbmsgdGhpcyBpcyBhbHNvIGNvbXBsZXRlbHkgaW50ZW50aW9uYWwgdGhh dCB3ZSB3YWl0IG9uIGV2ZXJ5dGhpbmcgaGVyZS4NCj4+Pj4NCj4+Pj4gUmVnYXJkcywNCj4+Pj4g Q2hyaXN0aWFuLg0KPj4+Pg0KPj4+PiBBbSAwNC4wMi4xOSB1bSAyMToxNyBzY2hyaWViIEt1ZWhs aW5nLCBGZWxpeDoNCj4+Pj4+IFRoaXMgbWF5IGNhdXNlIHJlZ3Jlc3Npb25zIGluIEtGRCBpZiBQ VCBCTyBhbGxvY2F0aW9uIGNhbiB0cmlnZ2VyDQo+Pj4+PiBldmljdGlvbiBmZW5jZXMuIFRoZSBw cmV2aW91cyBjYWxsIHRvIGFtZGdwdV92bV9hbGxvY19wdHMgd2FzIGluIGENCj4+Pj4+IGNvbnRl eHQgd2hlcmUgd2UgaGFkIHRlbXBvcmFyaWx5IHJlbW92ZWQgdGhlIGV2aWN0aW9uIGZlbmNlLiBQ VCBCTw0KPj4+Pj4gYWxsb2NhdGlvbiBpbiBhbWRncHVfdm1fYm9fdXBkYXRlIGlzIG5vdCBwcm90 ZWN0ZWQgbGlrZSB0aGF0Lg0KPj4+Pj4NCj4+Pj4+IEkgdmFndWVseSByZW1lbWJlciBsb29raW5n IGludG8gdGhpcyBsYXN0IHRpbWUgeW91IHdlcmUgd29ya2luZyBvbg0KPj4+Pj4gb3VyIGV2aWN0 aW9uIGZlbmNlIGNvZGUgYW5kIHRoaW5raW5nIHRoYXQgbW9zdCBvZiB0aGUgY2FzZXMgd2hlcmUg d2UNCj4+Pj4+IHJlbW92ZSB0aGUgZXZpY3Rpb24gZmVuY2Ugd2VyZSBubyBsb25nZXIgbmVlZGVk IGlmIGZlbmNlDQo+Pj4+PiBzeW5jaHJvbml6YXRpb24gaGFwcGVucyB0aHJvdWdoIHRoZSBhbWRn cHVfc3luYy1vYmplY3QgQVBJIChyYXRoZXINCj4+Pj4+IHRoYW4gd2FpdGluZyBvbiBhIHJlc2Vy dmF0aW9uIG9iamVjdCBkaXJlY3RseSkuIEkgdGhpbmsgaXQncyB0aW1lIEkNCj4+Pj4+IGdvIGFu ZCBmaW5hbGx5IGNsZWFuIHRoYXQgdXAuDQo+Pj4+Pg0KPj4+Pj4gRG8geW91IGtub3cgd2hldGhl ciBQVCBCTyBhbGxvY2F0aW9uIHdvdWxkIHdhaXQgb24gdGhlIHBhZ2UtZGlyZWN0b3J5DQo+Pj4+ PiByZXNlcnZhdGlvbiBvYmplY3Qgd2l0aG91dCB0aGUgc3luYy1vYmplY3QgQVBJIGFueXdoZXJl Pw0KPj4+Pj4NCj4+Pj4+IFJlZ2FyZHMsDQo+Pj4+PiAgICAgICDCoCBGZWxpeA0KPj4+Pj4NCj4+ Pj4+IE9uIDIwMTktMDItMDQgNzo0MiBhLm0uLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOg0KPj4+ Pj4+IExldCdzIHN0YXJ0IHRvIGFsbG9jYXRlIFZNIFBEcy9QVHMgb24gZGVtYW5kIGluc3RlYWQg b2YNCj4+Pj4+PiBwcmUtYWxsb2NhdGluZyB0aGVtIGR1cmluZyBtYXBwaW5nLg0KPj4+Pj4+DQo+ Pj4+Pj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0Bh bWQuY29tPg0KPj4+Pj4+IC0tLQ0KPj4+Pj4+ICAgICAgICAuLi4vZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyAgfCAgIDYgLQ0KPj4+Pj4+ICAgICAgICBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3NhLmMgICAgICAgfCAgIDkgLS0NCj4+Pj4+PiAgICAg ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jICAgICAgIHwgIDEwIC0t DQo+Pj4+Pj4gICAgICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jICAg ICAgICB8IDEzNiArKysrKy0tLS0tLS0tLS0tLS0NCj4+Pj4+PiAgICAgICAgZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmggICAgICAgIHwgICAzIC0NCj4+Pj4+PiAgICAgICAg NSBmaWxlcyBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspLCAxMjYgZGVsZXRpb25zKC0pDQo+Pj4+ Pj4NCj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2FtZGtmZF9ncHV2bS5jDQo+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfYW1ka2ZkX2dwdXZtLmMNCj4+Pj4+PiBpbmRleCBkN2IxMGQ3OWYxZGUuLjIxNzZjOTJmOTM3 NyAxMDA2NDQNCj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf YW1ka2ZkX2dwdXZtLmMNCj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYW1ka2ZkX2dwdXZtLmMNCj4+Pj4+PiBAQCAtNDkyLDEyICs0OTIsNiBAQCBzdGF0aWMg aW50IGFkZF9ib190b192bShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0IGtnZF9t ZW0gKm1lbSwNCj4+Pj4+PiAgICAgICAgCQkJCQl2bS0+cHJvY2Vzc19pbmZvLT5ldmljdGlvbl9m ZW5jZSwNCj4+Pj4+PiAgICAgICAgCQkJCQlOVUxMLCBOVUxMKTsNCj4+Pj4+PiAgICAgICAgDQo+ Pj4+Pj4gLQlyZXQgPSBhbWRncHVfdm1fYWxsb2NfcHRzKGFkZXYsIHZtLCB2YSwgYW1kZ3B1X2Jv X3NpemUoYm8pKTsNCj4+Pj4+PiAtCWlmIChyZXQpIHsNCj4+Pj4+PiAtCQlwcl9lcnIoIkZhaWxl ZCB0byBhbGxvY2F0ZSBwdHMsIGVycj0lZFxuIiwgcmV0KTsNCj4+Pj4+PiAtCQlnb3RvIGVycl9h bGxvY19wdHM7DQo+Pj4+Pj4gLQl9DQo+Pj4+Pj4gLQ0KPj4+Pj4+ICAgICAgICAJcmV0ID0gdm1f dmFsaWRhdGVfcHRfcGRfYm9zKHZtKTsNCj4+Pj4+PiAgICAgICAgCWlmIChyZXQpIHsNCj4+Pj4+ PiAgICAgICAgCQlwcl9lcnIoInZhbGlkYXRlX3B0X3BkX2JvcygpIGZhaWxlZFxuIik7IGRpZmYg LS1naXQNCj4+Pj4+PiBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jc2EuYw0K Pj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzYS5jDQo+Pj4+Pj4g aW5kZXggN2UyMmJlN2NhNjhhLi41NGRkMDJhODk4YjkgMTAwNjQ0DQo+Pj4+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzYS5jDQo+Pj4+Pj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzYS5jDQo+Pj4+Pj4gQEAgLTkyLDE1ICs5Miw2 IEBAIGludCBhbWRncHVfbWFwX3N0YXRpY19jc2Eoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs IHN0cnVjdCBhbWRncHVfdm0gKnZtLA0KPj4+Pj4+ICAgICAgICAJCXJldHVybiAtRU5PTUVNOw0K Pj4+Pj4+ICAgICAgICAJfQ0KPj4+Pj4+ICAgICAgICANCj4+Pj4+PiAtCXIgPSBhbWRncHVfdm1f YWxsb2NfcHRzKGFkZXYsICgqYm9fdmEpLT5iYXNlLnZtLCBjc2FfYWRkciwNCj4+Pj4+PiAtCQkJ CXNpemUpOw0KPj4+Pj4+IC0JaWYgKHIpIHsNCj4+Pj4+PiAtCQlEUk1fRVJST1IoImZhaWxlZCB0 byBhbGxvY2F0ZSBwdHMgZm9yIHN0YXRpYyBDU0EsIGVycj0lZFxuIiwgcik7DQo+Pj4+Pj4gLQkJ YW1kZ3B1X3ZtX2JvX3JtdihhZGV2LCAqYm9fdmEpOw0KPj4+Pj4+IC0JCXR0bV9ldV9iYWNrb2Zm X3Jlc2VydmF0aW9uKCZ0aWNrZXQsICZsaXN0KTsNCj4+Pj4+PiAtCQlyZXR1cm4gcjsNCj4+Pj4+ PiAtCX0NCj4+Pj4+PiAtDQo+Pj4+Pj4gICAgICAgIAlyID0gYW1kZ3B1X3ZtX2JvX21hcChhZGV2 LCAqYm9fdmEsIGNzYV9hZGRyLCAwLCBzaXplLA0KPj4+Pj4+ICAgICAgICAJCQkgICAgIEFNREdQ VV9QVEVfUkVBREFCTEUgfCBBTURHUFVfUFRFX1dSSVRFQUJMRSB8DQo+Pj4+Pj4gICAgICAgIAkJ CSAgICAgQU1ER1BVX1BURV9FWEVDVVRBQkxFKTsNCj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jDQo+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMNCj4+Pj4+PiBpbmRleCBkMjFkZDJmMzY5ZGEuLmUx NDFlM2IxMzExMiAxMDA2NDQNCj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMNCj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfZ2VtLmMNCj4+Pj4+PiBAQCAtNjI3LDExICs2MjcsNiBAQCBpbnQgYW1kZ3B1X2dlbV92 YV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPj4+Pj4+IHZvaWQgKmRhdGEsDQo+Pj4+ Pj4gICAgICAgIA0KPj4+Pj4+ICAgICAgICAJc3dpdGNoIChhcmdzLT5vcGVyYXRpb24pIHsNCj4+ Pj4+PiAgICAgICAgCWNhc2UgQU1ER1BVX1ZBX09QX01BUDoNCj4+Pj4+PiAtCQlyID0gYW1kZ3B1 X3ZtX2FsbG9jX3B0cyhhZGV2LCBib192YS0+YmFzZS52bSwgYXJncy0+dmFfYWRkcmVzcywNCj4+ Pj4+PiAtCQkJCQlhcmdzLT5tYXBfc2l6ZSk7DQo+Pj4+Pj4gLQkJaWYgKHIpDQo+Pj4+Pj4gLQkJ CWdvdG8gZXJyb3JfYmFja29mZjsNCj4+Pj4+PiAtDQo+Pj4+Pj4gICAgICAgIAkJdmFfZmxhZ3Mg PSBhbWRncHVfZ21jX2dldF9wdGVfZmxhZ3MoYWRldiwgYXJncy0+ZmxhZ3MpOw0KPj4+Pj4+ICAg ICAgICAJCXIgPSBhbWRncHVfdm1fYm9fbWFwKGFkZXYsIGJvX3ZhLCBhcmdzLT52YV9hZGRyZXNz LA0KPj4+Pj4+ICAgICAgICAJCQkJICAgICBhcmdzLT5vZmZzZXRfaW5fYm8sIGFyZ3MtPm1hcF9z aXplLCBAQCAtNjQ3LDExICs2NDIsNg0KPj4+Pj4+IEBAIGludCBhbWRncHVfZ2VtX3ZhX2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+Pj4+Pj4gICAgICAgIAkJCQkJ CWFyZ3MtPm1hcF9zaXplKTsNCj4+Pj4+PiAgICAgICAgCQlicmVhazsNCj4+Pj4+PiAgICAgICAg CWNhc2UgQU1ER1BVX1ZBX09QX1JFUExBQ0U6DQo+Pj4+Pj4gLQkJciA9IGFtZGdwdV92bV9hbGxv Y19wdHMoYWRldiwgYm9fdmEtPmJhc2Uudm0sIGFyZ3MtPnZhX2FkZHJlc3MsDQo+Pj4+Pj4gLQkJ CQkJYXJncy0+bWFwX3NpemUpOw0KPj4+Pj4+IC0JCWlmIChyKQ0KPj4+Pj4+IC0JCQlnb3RvIGVy cm9yX2JhY2tvZmY7DQo+Pj4+Pj4gLQ0KPj4+Pj4+ICAgICAgICAJCXZhX2ZsYWdzID0gYW1kZ3B1 X2dtY19nZXRfcHRlX2ZsYWdzKGFkZXYsIGFyZ3MtPmZsYWdzKTsNCj4+Pj4+PiAgICAgICAgCQly ID0gYW1kZ3B1X3ZtX2JvX3JlcGxhY2VfbWFwKGFkZXYsIGJvX3ZhLCBhcmdzLT52YV9hZGRyZXNz LA0KPj4+Pj4+ICAgICAgICAJCQkJCSAgICAgYXJncy0+b2Zmc2V0X2luX2JvLCBhcmdzLT5tYXBf c2l6ZSwgZGlmZiAtLWdpdA0KPj4+Pj4+IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3ZtLmMNCj4+Pj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5j DQo+Pj4+Pj4gaW5kZXggZjdkNDEwYTVkODQ4Li4wYjhhMWFhNTZjNGEgMTAwNjQ0DQo+Pj4+Pj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMNCj4+Pj4+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYw0KPj4+Pj4+IEBAIC01MDQs NDcgKzUwNCw2IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV92bV9wdF9uZXh0KHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LA0KPj4+Pj4+ICAgICAgICAJfQ0KPj4+Pj4+ICAgICAgICB9DQo+Pj4+Pj4g ICAgICAgIA0KPj4+Pj4+IC0vKioNCj4+Pj4+PiAtICogYW1kZ3B1X3ZtX3B0X2ZpcnN0X2xlYWYg LSBnZXQgZmlyc3QgbGVhZiBQRC9QVA0KPj4+Pj4+IC0gKg0KPj4+Pj4+IC0gKiBAYWRldjogYW1k Z3B1X2RldmljZSBwb2ludGVyDQo+Pj4+Pj4gLSAqIEB2bTogYW1kZ3B1X3ZtIHN0cnVjdHVyZQ0K Pj4+Pj4+IC0gKiBAc3RhcnQ6IHN0YXJ0IGFkZHIgb2YgdGhlIHdhbGsNCj4+Pj4+PiAtICogQGN1 cnNvcjogc3RhdGUgdG8gaW5pdGlhbGl6ZQ0KPj4+Pj4+IC0gKg0KPj4+Pj4+IC0gKiBTdGFydCBh IHdhbGsgYW5kIGdvIGRpcmVjdGx5IHRvIHRoZSBsZWFmIG5vZGUuDQo+Pj4+Pj4gLSAqLw0KPj4+ Pj4+IC1zdGF0aWMgdm9pZCBhbWRncHVfdm1fcHRfZmlyc3RfbGVhZihzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwNCj4+Pj4+PiAtCQkJCSAgICBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwgdWludDY0 X3Qgc3RhcnQsDQo+Pj4+Pj4gLQkJCQkgICAgc3RydWN0IGFtZGdwdV92bV9wdF9jdXJzb3IgKmN1 cnNvcikNCj4+Pj4+PiAtew0KPj4+Pj4+IC0JYW1kZ3B1X3ZtX3B0X3N0YXJ0KGFkZXYsIHZtLCBz dGFydCwgY3Vyc29yKTsNCj4+Pj4+PiAtCXdoaWxlIChhbWRncHVfdm1fcHRfZGVzY2VuZGFudChh ZGV2LCBjdXJzb3IpKTsNCj4+Pj4+PiAtfQ0KPj4+Pj4+IC0NCj4+Pj4+PiAtLyoqDQo+Pj4+Pj4g LSAqIGFtZGdwdV92bV9wdF9uZXh0X2xlYWYgLSBnZXQgbmV4dCBsZWFmIFBEL1BUDQo+Pj4+Pj4g LSAqDQo+Pj4+Pj4gLSAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXINCj4+Pj4+PiAtICog QGN1cnNvcjogY3VycmVudCBzdGF0ZQ0KPj4+Pj4+IC0gKg0KPj4+Pj4+IC0gKiBXYWxrIHRoZSBQ RC9QVCB0cmVlIHRvIHRoZSBuZXh0IGxlYWYgbm9kZS4NCj4+Pj4+PiAtICovDQo+Pj4+Pj4gLXN0 YXRpYyB2b2lkIGFtZGdwdV92bV9wdF9uZXh0X2xlYWYoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsDQo+Pj4+Pj4gLQkJCQkgICBzdHJ1Y3QgYW1kZ3B1X3ZtX3B0X2N1cnNvciAqY3Vyc29yKQ0K Pj4+Pj4+IC17DQo+Pj4+Pj4gLQlhbWRncHVfdm1fcHRfbmV4dChhZGV2LCBjdXJzb3IpOw0KPj4+ Pj4+IC0JaWYgKGN1cnNvci0+cGZuICE9IH4wbGwpDQo+Pj4+Pj4gLQkJd2hpbGUgKGFtZGdwdV92 bV9wdF9kZXNjZW5kYW50KGFkZXYsIGN1cnNvcikpOw0KPj4+Pj4+IC19DQo+Pj4+Pj4gLQ0KPj4+ Pj4+IC0vKioNCj4+Pj4+PiAtICogZm9yX2VhY2hfYW1kZ3B1X3ZtX3B0X2xlYWYgLSB3YWxrIG92 ZXIgYWxsIGxlYWYgUERzL1BUcyBpbiB0aGUNCj4+Pj4+PiBoaWVyYXJjaHkNCj4+Pj4+PiAtICov DQo+Pj4+Pj4gLSNkZWZpbmUgZm9yX2VhY2hfYW1kZ3B1X3ZtX3B0X2xlYWYoYWRldiwgdm0sIHN0 YXJ0LCBlbmQsIGN1cnNvcikJCVwNCj4+Pj4+PiAtCWZvciAoYW1kZ3B1X3ZtX3B0X2ZpcnN0X2xl YWYoKGFkZXYpLCAodm0pLCAoc3RhcnQpLCAmKGN1cnNvcikpOwkJXA0KPj4+Pj4+IC0JICAgICAo Y3Vyc29yKS5wZm4gPD0gZW5kOyBhbWRncHVfdm1fcHRfbmV4dF9sZWFmKChhZGV2KSwgJihjdXJz b3IpKSkNCj4+Pj4+PiAtDQo+Pj4+Pj4gICAgICAgIC8qKg0KPj4+Pj4+ICAgICAgICAgKiBhbWRn cHVfdm1fcHRfZmlyc3RfZGZzIC0gc3RhcnQgYSBkZWVwIGZpcnN0IHNlYXJjaA0KPj4+Pj4+ICAg ICAgICAgKg0KPj4+Pj4+IEBAIC05MTksNzQgKzg3OCw1MSBAQCBzdGF0aWMgdm9pZCBhbWRncHVf dm1fYm9fcGFyYW0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0g KnZtLA0KPj4+Pj4+ICAgICAgICAgKiBSZXR1cm5zOg0KPj4+Pj4+ICAgICAgICAgKiAwIG9uIHN1 Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4NCj4+Pj4+PiAgICAgICAgICovDQo+Pj4+Pj4gLWludCBh bWRncHVfdm1fYWxsb2NfcHRzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4+Pj4+IC0J CQlzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwNCj4+Pj4+PiAtCQkJdWludDY0X3Qgc2FkZHIsIHVpbnQ2 NF90IHNpemUpDQo+Pj4+Pj4gK3N0YXRpYyBpbnQgYW1kZ3B1X3ZtX2FsbG9jX3B0cyhzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwNCj4+Pj4+PiArCQkJICAgICAgIHN0cnVjdCBhbWRncHVfdm0g KnZtLA0KPj4+Pj4+ICsJCQkgICAgICAgc3RydWN0IGFtZGdwdV92bV9wdF9jdXJzb3IgKmN1cnNv cikNCj4+Pj4+PiAgICAgICAgew0KPj4+Pj4+IC0Jc3RydWN0IGFtZGdwdV92bV9wdF9jdXJzb3Ig Y3Vyc29yOw0KPj4+Pj4+ICsJc3RydWN0IGFtZGdwdV92bV9wdCAqZW50cnkgPSBjdXJzb3ItPmVu dHJ5Ow0KPj4+Pj4+ICsJc3RydWN0IGFtZGdwdV9ib19wYXJhbSBicDsNCj4+Pj4+PiAgICAgICAg CXN0cnVjdCBhbWRncHVfYm8gKnB0Ow0KPj4+Pj4+IC0JdWludDY0X3QgZWFkZHI7DQo+Pj4+Pj4g ICAgICAgIAlpbnQgcjsNCj4+Pj4+PiAgICAgICAgDQo+Pj4+Pj4gLQkvKiB2YWxpZGF0ZSB0aGUg cGFyYW1ldGVycyAqLw0KPj4+Pj4+IC0JaWYgKHNhZGRyICYgQU1ER1BVX0dQVV9QQUdFX01BU0sg fHwgc2l6ZSAmIEFNREdQVV9HUFVfUEFHRV9NQVNLKQ0KPj4+Pj4+IC0JCXJldHVybiAtRUlOVkFM Ow0KPj4+Pj4+ICsJaWYgKGN1cnNvci0+bGV2ZWwgPCBBTURHUFVfVk1fUFRCICYmICFlbnRyeS0+ ZW50cmllcykgew0KPj4+Pj4+ICsJCXVuc2lnbmVkIG51bV9lbnRyaWVzOw0KPj4+Pj4+ICAgICAg ICANCj4+Pj4+PiAtCWVhZGRyID0gc2FkZHIgKyBzaXplIC0gMTsNCj4+Pj4+PiAtDQo+Pj4+Pj4g LQlzYWRkciAvPSBBTURHUFVfR1BVX1BBR0VfU0laRTsNCj4+Pj4+PiAtCWVhZGRyIC89IEFNREdQ VV9HUFVfUEFHRV9TSVpFOw0KPj4+Pj4+IC0NCj4+Pj4+PiAtCWlmIChlYWRkciA+PSBhZGV2LT52 bV9tYW5hZ2VyLm1heF9wZm4pIHsNCj4+Pj4+PiAtCQlkZXZfZXJyKGFkZXYtPmRldiwgInZhIGFi b3ZlIGxpbWl0ICgweCUwOGxsWCA+PSAweCUwOGxsWClcbiIsDQo+Pj4+Pj4gLQkJCWVhZGRyLCBh ZGV2LT52bV9tYW5hZ2VyLm1heF9wZm4pOw0KPj4+Pj4+IC0JCXJldHVybiAtRUlOVkFMOw0KPj4+ Pj4+ICsJCW51bV9lbnRyaWVzID0gYW1kZ3B1X3ZtX251bV9lbnRyaWVzKGFkZXYsIGN1cnNvci0+ bGV2ZWwpOw0KPj4+Pj4+ICsJCWVudHJ5LT5lbnRyaWVzID0ga3ZtYWxsb2NfYXJyYXkobnVtX2Vu dHJpZXMsDQo+Pj4+Pj4gKwkJCQkJCXNpemVvZigqZW50cnktPmVudHJpZXMpLA0KPj4+Pj4+ICsJ CQkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7DQo+Pj4+Pj4gKwkJaWYgKCFlbnRyeS0+ZW50 cmllcykNCj4+Pj4+PiArCQkJcmV0dXJuIC1FTk9NRU07DQo+Pj4+Pj4gICAgICAgIAl9DQo+Pj4+ Pj4gICAgICAgIA0KPj4+Pj4+IC0JZm9yX2VhY2hfYW1kZ3B1X3ZtX3B0X2xlYWYoYWRldiwgdm0s IHNhZGRyLCBlYWRkciwgY3Vyc29yKSB7DQo+Pj4+Pj4gLQkJc3RydWN0IGFtZGdwdV92bV9wdCAq ZW50cnkgPSBjdXJzb3IuZW50cnk7DQo+Pj4+Pj4gLQkJc3RydWN0IGFtZGdwdV9ib19wYXJhbSBi cDsNCj4+Pj4+PiAtDQo+Pj4+Pj4gLQkJaWYgKGN1cnNvci5sZXZlbCA8IEFNREdQVV9WTV9QVEIp IHsNCj4+Pj4+PiAtCQkJdW5zaWduZWQgbnVtX2VudHJpZXM7DQo+Pj4+Pj4gLQ0KPj4+Pj4+IC0J CQludW1fZW50cmllcyA9IGFtZGdwdV92bV9udW1fZW50cmllcyhhZGV2LCBjdXJzb3IubGV2ZWwp Ow0KPj4+Pj4+IC0JCQllbnRyeS0+ZW50cmllcyA9IGt2bWFsbG9jX2FycmF5KG51bV9lbnRyaWVz LA0KPj4+Pj4+IC0JCQkJCQkJc2l6ZW9mKCplbnRyeS0+ZW50cmllcyksDQo+Pj4+Pj4gLQkJCQkJ CQlHRlBfS0VSTkVMIHwNCj4+Pj4+PiAtCQkJCQkJCV9fR0ZQX1pFUk8pOw0KPj4+Pj4+IC0JCQlp ZiAoIWVudHJ5LT5lbnRyaWVzKQ0KPj4+Pj4+IC0JCQkJcmV0dXJuIC1FTk9NRU07DQo+Pj4+Pj4g LQkJfQ0KPj4+Pj4+IC0NCj4+Pj4+PiAtDQo+Pj4+Pj4gLQkJaWYgKGVudHJ5LT5iYXNlLmJvKQ0K Pj4+Pj4+IC0JCQljb250aW51ZTsNCj4+Pj4+PiAtDQo+Pj4+Pj4gLQkJYW1kZ3B1X3ZtX2JvX3Bh cmFtKGFkZXYsIHZtLCBjdXJzb3IubGV2ZWwsICZicCk7DQo+Pj4+Pj4gLQ0KPj4+Pj4+IC0JCXIg PSBhbWRncHVfYm9fY3JlYXRlKGFkZXYsICZicCwgJnB0KTsNCj4+Pj4+PiAtCQlpZiAocikNCj4+ Pj4+PiAtCQkJcmV0dXJuIHI7DQo+Pj4+Pj4gLQ0KPj4+Pj4+IC0JCWlmICh2bS0+dXNlX2NwdV9m b3JfdXBkYXRlKSB7DQo+Pj4+Pj4gLQkJCXIgPSBhbWRncHVfYm9fa21hcChwdCwgTlVMTCk7DQo+ Pj4+Pj4gLQkJCWlmIChyKQ0KPj4+Pj4+IC0JCQkJZ290byBlcnJvcl9mcmVlX3B0Ow0KPj4+Pj4+ IC0JCX0NCj4+Pj4+PiArCWlmIChlbnRyeS0+YmFzZS5ibykNCj4+Pj4+PiArCQlyZXR1cm4gMDsN Cj4+Pj4+PiAgICAgICAgDQo+Pj4+Pj4gLQkJLyogS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgcm9v dCBkaXJlY3RvcnkgdG8gYXZvaWQNCj4+Pj4+PiAtCQkqIGZyZWVpbmcgdGhlbSB1cCBpbiB0aGUg d3Jvbmcgb3JkZXIuDQo+Pj4+Pj4gLQkJKi8NCj4+Pj4+PiAtCQlwdC0+cGFyZW50ID0gYW1kZ3B1 X2JvX3JlZihjdXJzb3IucGFyZW50LT5iYXNlLmJvKTsNCj4+Pj4+PiArCWFtZGdwdV92bV9ib19w YXJhbShhZGV2LCB2bSwgY3Vyc29yLT5sZXZlbCwgJmJwKTsNCj4+Pj4+PiAgICAgICAgDQo+Pj4+ Pj4gLQkJYW1kZ3B1X3ZtX2JvX2Jhc2VfaW5pdCgmZW50cnktPmJhc2UsIHZtLCBwdCk7DQo+Pj4+ Pj4gKwlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LCAmYnAsICZwdCk7DQo+Pj4+Pj4gKwlpZiAo cikNCj4+Pj4+PiArCQlyZXR1cm4gcjsNCj4+Pj4+PiAgICAgICAgDQo+Pj4+Pj4gLQkJciA9IGFt ZGdwdV92bV9jbGVhcl9ibyhhZGV2LCB2bSwgcHQpOw0KPj4+Pj4+ICsJaWYgKHZtLT51c2VfY3B1 X2Zvcl91cGRhdGUpIHsNCj4+Pj4+PiArCQlyID0gYW1kZ3B1X2JvX2ttYXAocHQsIE5VTEwpOw0K Pj4+Pj4+ICAgICAgICAJCWlmIChyKQ0KPj4+Pj4+ICAgICAgICAJCQlnb3RvIGVycm9yX2ZyZWVf cHQ7DQo+Pj4+Pj4gICAgICAgIAl9DQo+Pj4+Pj4gICAgICAgIA0KPj4+Pj4+ICsJLyogS2VlcCBh IHJlZmVyZW5jZSB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gYXZvaWQNCj4+Pj4+PiArCSAqIGZy ZWVpbmcgdGhlbSB1cCBpbiB0aGUgd3Jvbmcgb3JkZXIuDQo+Pj4+Pj4gKwkgKi8NCj4+Pj4+PiAr CXB0LT5wYXJlbnQgPSBhbWRncHVfYm9fcmVmKGN1cnNvci0+cGFyZW50LT5iYXNlLmJvKTsNCj4+ Pj4+PiArCWFtZGdwdV92bV9ib19iYXNlX2luaXQoJmVudHJ5LT5iYXNlLCB2bSwgcHQpOw0KPj4+ Pj4+ICsNCj4+Pj4+PiArCXIgPSBhbWRncHVfdm1fY2xlYXJfYm8oYWRldiwgdm0sIHB0KTsNCj4+ Pj4+PiArCWlmIChyKQ0KPj4+Pj4+ICsJCWdvdG8gZXJyb3JfZnJlZV9wdDsNCj4+Pj4+PiArDQo+ Pj4+Pj4gICAgICAgIAlyZXR1cm4gMDsNCj4+Pj4+PiAgICAgICAgDQo+Pj4+Pj4gICAgICAgIGVy cm9yX2ZyZWVfcHQ6DQo+Pj4+Pj4gQEAgLTE2NTUsNiArMTU5MSw3IEBAIHN0YXRpYyBpbnQgYW1k Z3B1X3ZtX3VwZGF0ZV9wdGVzKHN0cnVjdCBhbWRncHVfcHRlX3VwZGF0ZV9wYXJhbXMgKnBhcmFt cywNCj4+Pj4+PiAgICAgICAgCXN0cnVjdCBhbWRncHVfdm1fcHRfY3Vyc29yIGN1cnNvcjsNCj4+ Pj4+PiAgICAgICAgCXVpbnQ2NF90IGZyYWdfc3RhcnQgPSBzdGFydCwgZnJhZ19lbmQ7DQo+Pj4+ Pj4gICAgICAgIAl1bnNpZ25lZCBpbnQgZnJhZzsNCj4+Pj4+PiArCWludCByOw0KPj4+Pj4+ICAg ICAgICANCj4+Pj4+PiAgICAgICAgCS8qIGZpZ3VyZSBvdXQgdGhlIGluaXRpYWwgZnJhZ21lbnQg Ki8NCj4+Pj4+PiAgICAgICAgCWFtZGdwdV92bV9mcmFnbWVudChwYXJhbXMsIGZyYWdfc3RhcnQs IGVuZCwgZmxhZ3MsICZmcmFnLA0KPj4+Pj4+ICZmcmFnX2VuZCk7IEBAIC0xNjYyLDEyICsxNTk5 LDE1IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX3VwZGF0ZV9wdGVzKHN0cnVjdCBhbWRncHVfcHRl X3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywNCj4+Pj4+PiAgICAgICAgCS8qIHdhbGsgb3ZlciB0aGUg YWRkcmVzcyBzcGFjZSBhbmQgdXBkYXRlIHRoZSBQVHMgKi8NCj4+Pj4+PiAgICAgICAgCWFtZGdw dV92bV9wdF9zdGFydChhZGV2LCBwYXJhbXMtPnZtLCBzdGFydCwgJmN1cnNvcik7DQo+Pj4+Pj4g ICAgICAgIAl3aGlsZSAoY3Vyc29yLnBmbiA8IGVuZCkgew0KPj4+Pj4+IC0JCXN0cnVjdCBhbWRn cHVfYm8gKnB0ID0gY3Vyc29yLmVudHJ5LT5iYXNlLmJvOw0KPj4+Pj4+ICAgICAgICAJCXVuc2ln bmVkIHNoaWZ0LCBwYXJlbnRfc2hpZnQsIG1hc2s7DQo+Pj4+Pj4gICAgICAgIAkJdWludDY0X3Qg aW5jciwgZW50cnlfZW5kLCBwZV9zdGFydDsNCj4+Pj4+PiArCQlzdHJ1Y3QgYW1kZ3B1X2JvICpw dDsNCj4+Pj4+PiAgICAgICAgDQo+Pj4+Pj4gLQkJaWYgKCFwdCkNCj4+Pj4+PiAtCQkJcmV0dXJu IC1FTk9FTlQ7DQo+Pj4+Pj4gKwkJciA9IGFtZGdwdV92bV9hbGxvY19wdHMocGFyYW1zLT5hZGV2 LCBwYXJhbXMtPnZtLCAmY3Vyc29yKTsNCj4+Pj4+PiArCQlpZiAocikNCj4+Pj4+PiArCQkJcmV0 dXJuIHI7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCXB0ID0gY3Vyc29yLmVudHJ5LT5iYXNlLmJvOw0K Pj4+Pj4+ICAgICAgICANCj4+Pj4+PiAgICAgICAgCQkvKiBUaGUgcm9vdCBsZXZlbCBjYW4ndCBi ZSBhIGh1Z2UgcGFnZSAqLw0KPj4+Pj4+ICAgICAgICAJCWlmIChjdXJzb3IubGV2ZWwgPT0gYWRl di0+dm1fbWFuYWdlci5yb290X2xldmVsKSB7IGRpZmYgLS1naXQNCj4+Pj4+PiBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oDQo+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdm0uaA0KPj4+Pj4+IGluZGV4IDgxZmY4MTc3ZjA5Mi4uMTE2NjA1 YzAzOGQyIDEwMDY0NA0KPj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV92bS5oDQo+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3ZtLmgNCj4+Pj4+PiBAQCAtMzAzLDkgKzMwMyw2IEBAIGJvb2wgYW1kZ3B1X3ZtX3JlYWR5KHN0 cnVjdCBhbWRncHVfdm0gKnZtKTsNCj4+Pj4+PiAgICAgICAgaW50IGFtZGdwdV92bV92YWxpZGF0 ZV9wdF9ib3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0gKnZt LA0KPj4+Pj4+ICAgICAgICAJCQkgICAgICBpbnQgKCpjYWxsYmFjaykodm9pZCAqcCwgc3RydWN0 IGFtZGdwdV9ibyAqYm8pLA0KPj4+Pj4+ICAgICAgICAJCQkgICAgICB2b2lkICpwYXJhbSk7DQo+ Pj4+Pj4gLWludCBhbWRncHVfdm1fYWxsb2NfcHRzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LA0KPj4+Pj4+IC0JCQlzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwNCj4+Pj4+PiAtCQkJdWludDY0X3Qg c2FkZHIsIHVpbnQ2NF90IHNpemUpOw0KPj4+Pj4+ICAgICAgICBpbnQgYW1kZ3B1X3ZtX2ZsdXNo KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgc3RydWN0IGFtZGdwdV9qb2IgKmpvYiwgYm9vbCBu ZWVkX3BpcGVfc3luYyk7DQo+Pj4+Pj4gICAgICAgIGludCBhbWRncHVfdm1fdXBkYXRlX2RpcmVj dG9yaWVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4+Pj4+ICAgICAgICAJCQkJIHN0 cnVjdCBhbWRncHVfdm0gKnZtKTsNCj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18NCj4+Pj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QNCj4+Pj4gYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4+Pj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vYW1kLWdmeAo=