From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Liu, Monk" Subject: RE: TDR and VRAM lost handling in KMD: Date: Wed, 11 Oct 2017 14:04:48 +0000 Message-ID: References: <28d64011-fd90-07fb-d95d-48286ecbdcc5@amd.com> <6876e153-7e98-66ac-7338-5601cf83c633@amd.com> <8c4e849f-9227-12bc-9d2e-3daf60fcd762@amd.com> <0c198ba6-b853-c26a-7fb4-bcc0344fdea0@amd.com> <02bb9f77-bcc6-8a24-e9b0-8f3f260d74d8@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <02bb9f77-bcc6-8a24-e9b0-8f3f260d74d8-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Content-Language: zh-CN 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: "Koenig, Christian" , "Zhou, David(ChunMing)" , "Haehnle, Nicolai" , "Olsak, Marek" , "Deucher, Alexander" Cc: "Ramirez, Alejandro" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "Filipas, Mario" , "Ding, Pixel" , "Li, Bingley" , "Jiang, Jerry (SW)" WWVhaCwgSSBqdXN0IHRob3VnaHQgb2YgaXQsIGFncmVlIHRoYXQgc2hvdWxkbid0IGtlZXAgY29w eSBpbiBlbnRpdHksIG90aGVyd2lzZSB0b28gY29tcGxpY2F0ZWQgdG8gaGFuZGxlIA0KDQpCUiBN b25rDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBDaHJpc3RpYW4gS8O2bmln IFttYWlsdG86Y2tvZW5pZy5sZWljaHR6dW1lcmtlbkBnbWFpbC5jb21dIA0KU2VudDogV2VkbmVz ZGF5LCBPY3RvYmVyIDExLCAyMDE3IDEwOjA0IFBNDQpUbzogTGl1LCBNb25rIDxNb25rLkxpdUBh bWQuY29tPjsgS29lbmlnLCBDaHJpc3RpYW4gPENocmlzdGlhbi5Lb2VuaWdAYW1kLmNvbT47IFpo b3UsIERhdmlkKENodW5NaW5nKSA8RGF2aWQxLlpob3VAYW1kLmNvbT47IEhhZWhubGUsIE5pY29s YWkgPE5pY29sYWkuSGFlaG5sZUBhbWQuY29tPjsgT2xzYWssIE1hcmVrIDxNYXJlay5PbHNha0Bh bWQuY29tPjsgRGV1Y2hlciwgQWxleGFuZGVyIDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPg0K Q2M6IFJhbWlyZXosIEFsZWphbmRybyA8QWxlamFuZHJvLlJhbWlyZXpAYW1kLmNvbT47IGFtZC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBGaWxpcGFzLCBNYXJpbyA8TWFyaW8uRmlsaXBhc0Bh bWQuY29tPjsgRGluZywgUGl4ZWwgPFBpeGVsLkRpbmdAYW1kLmNvbT47IExpLCBCaW5nbGV5IDxC aW5nbGV5LkxpQGFtZC5jb20+OyBKaWFuZywgSmVycnkgKFNXKSA8SmVycnkuSmlhbmdAYW1kLmNv bT4NClN1YmplY3Q6IFJlOiBURFIgYW5kIFZSQU0gbG9zdCBoYW5kbGluZyBpbiBLTUQ6DQoNCj4g SSByZW1lbWJlciBldmVuIHRoZSBWTSB1cGRhdGUgam9iIGlzIHdpdGggYSBrZXJuZWwgZW50aXR5 LCAobm8gY29udGV4dCANCj4gaXMgdHJ1ZSksIGFuZCBpZiBlbnRpdHkgY2FuIGtlZXAgYSBjb3Vu dGVyIGNvcHkNClRoYXQgd29uJ3Qgd29yay4gV2Ugd2FudCB0byBrZWVwIHRoZSBlbnRpdGllcyBh c3NvY2lhdGVkIHdpdGggVk0gdXBkYXRlcyBhbmQgYnVmZmVyIG1vdmVzIGFsaXZlLCBidXQgdGhl aXIgam9icyBjYW5jZWxlZC4NCg0KUmVnYXJkcywNCkNocmlzdGlhbi4NCg0KQW0gMTEuMTAuMjAx NyB1bSAxNTo1MSBzY2hyaWViIExpdSwgTW9uazoNCj4+IFNvbWUgam9icyBkb24ndCBoYXZlIGEg Y29udGV4dCAoVk0gdXBkYXRlcywgY2xlYXJzLCBidWZmZXIgbW92ZXMpLg0KPiBXaGF0PyBJIHJl bWVtYmVyIGV2ZW4gdGhlIFZNIHVwZGF0ZSBqb2IgaXMgd2l0aCBhIGtlcm5lbCBlbnRpdHksIChu byANCj4gY29udGV4dCBpcyB0cnVlKSwgYW5kIGlmIGVudGl0eSBjYW4ga2VlcCBhIGNvdW50ZXIg Y29weSBUaGF0IGNhbiBzb2x2ZSANCj4geW91ciBjb25jZXJucw0KPg0KPg0KPg0KPiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBLb2VuaWcsIENocmlzdGlhbg0KPiBTZW50OiBX ZWRuZXNkYXksIE9jdG9iZXIgMTEsIDIwMTcgOTozOSBQTQ0KPiBUbzogTGl1LCBNb25rIDxNb25r LkxpdUBhbWQuY29tPjsgWmhvdSwgRGF2aWQoQ2h1bk1pbmcpIA0KPiA8RGF2aWQxLlpob3VAYW1k LmNvbT47IEhhZWhubGUsIE5pY29sYWkgPE5pY29sYWkuSGFlaG5sZUBhbWQuY29tPjsgDQo+IE9s c2FrLCBNYXJlayA8TWFyZWsuT2xzYWtAYW1kLmNvbT47IERldWNoZXIsIEFsZXhhbmRlciANCj4g PEFsZXhhbmRlci5EZXVjaGVyQGFtZC5jb20+DQo+IENjOiBSYW1pcmV6LCBBbGVqYW5kcm8gPEFs ZWphbmRyby5SYW1pcmV6QGFtZC5jb20+OyANCj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmc7IEZpbGlwYXMsIE1hcmlvIDxNYXJpby5GaWxpcGFzQGFtZC5jb20+OyANCj4gRGluZywgUGl4 ZWwgPFBpeGVsLkRpbmdAYW1kLmNvbT47IExpLCBCaW5nbGV5IDxCaW5nbGV5LkxpQGFtZC5jb20+ OyANCj4gSmlhbmcsIEplcnJ5IChTVykgPEplcnJ5LkppYW5nQGFtZC5jb20+DQo+IFN1YmplY3Q6 IFJlOiBURFIgYW5kIFZSQU0gbG9zdCBoYW5kbGluZyBpbiBLTUQ6DQo+DQo+IFNvbWUgam9icyBk b24ndCBoYXZlIGEgY29udGV4dCAoVk0gdXBkYXRlcywgY2xlYXJzLCBidWZmZXIgbW92ZXMpLg0K Pg0KPiBJIHdvdWxkIHN0aWxsIGxpa2UgdG8gYWJvcnQgdGhvc2Ugd2hlbiB0aGV5IHdoZXJlIGlz c3VlZCBiZWZvcmUgYSBsb3NpbmcgVlJBTSBjb250ZW50LCBidXQga2VlcCB0aGUgZW50aXR5IHVz YWJsZS4NCj4NCj4gU28gSSB0aGluayB3ZSBzaG91bGQganVzdCBrZWVwIGEgY29weSBvZiB0aGUg VlJBTSBsb3N0IGNvdW50ZXIgaW4gdGhlIGpvYi4gVGhhdCBhbHNvIHJlbW92ZXMgdXMgZnJvbSB0 aGUgYnVyZGVuIG9mIGZpZ3VyaW5nIG91dCB0aGUgY29udGV4dCBkdXJpbmcgam9iIHJ1bi4NCj4N Cj4gUmVnYXJkcywNCj4gQ2hyaXN0aWFuLg0KPg0KPiBBbSAxMS4xMC4yMDE3IHVtIDE1OjM1IHNj aHJpZWIgTGl1LCBNb25rOg0KPj4gSSB0aGluayBqdXN0IGNvbXBhcmUgdGhlIGNvcHkgZnJvbSBj b250ZXh0L2VudGl0eSB3aXRoIGN1cnJlbnQgDQo+PiBjb3VudGVyIGlzIGVub3VnaCwgZG9uJ3Qg c2VlIGhvdyBpdCdzIGJldHRlciB0byBrZWVwIGFub3RoZXIgY29weSBpbiANCj4+IEpPQg0KPj4N Cj4+DQo+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4gRnJvbTogS29lbmlnLCBDaHJp c3RpYW4NCj4+IFNlbnQ6IFdlZG5lc2RheSwgT2N0b2JlciAxMSwgMjAxNyA2OjQwIFBNDQo+PiBU bzogWmhvdSwgRGF2aWQoQ2h1bk1pbmcpIDxEYXZpZDEuWmhvdUBhbWQuY29tPjsgTGl1LCBNb25r IA0KPj4gPE1vbmsuTGl1QGFtZC5jb20+OyBIYWVobmxlLCBOaWNvbGFpIDxOaWNvbGFpLkhhZWhu bGVAYW1kLmNvbT47IA0KPj4gT2xzYWssIE1hcmVrIDxNYXJlay5PbHNha0BhbWQuY29tPjsgRGV1 Y2hlciwgQWxleGFuZGVyIA0KPj4gPEFsZXhhbmRlci5EZXVjaGVyQGFtZC5jb20+DQo+PiBDYzog UmFtaXJleiwgQWxlamFuZHJvIDxBbGVqYW5kcm8uUmFtaXJlekBhbWQuY29tPjsgDQo+PiBhbWQt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgRmlsaXBhcywgTWFyaW8gDQo+PiA8TWFyaW8uRmls aXBhc0BhbWQuY29tPjsgRGluZywgUGl4ZWwgPFBpeGVsLkRpbmdAYW1kLmNvbT47IExpLCANCj4+ IEJpbmdsZXkgPEJpbmdsZXkuTGlAYW1kLmNvbT47IEppYW5nLCBKZXJyeSAoU1cpIDxKZXJyeS5K aWFuZ0BhbWQuY29tPg0KPj4gU3ViamVjdDogUmU6IFREUiBhbmQgVlJBTSBsb3N0IGhhbmRsaW5n IGluIEtNRDoNCj4+DQo+PiBJJ3ZlIGFscmVhZHkgcG9zdGVkIGEgcGF0Y2ggZm9yIHRoaXMgb24g dGhlIG1haWxpbmcgbGlzdC4NCj4+DQo+PiBCYXNpY2FsbHkgd2UganVzdCBjb3B5IHRoZSB2cmFt IGxvc3QgY291bnRlciBpbnRvIHRoZSBqb2IgYW5kIHdoZW4gd2UgdHJ5IHRvIHJ1biB0aGUgam9i IHdlIGNhbiBtYXJrIGl0IGFzIGNhbmNlbGVkLg0KPj4NCj4+IFJlZ2FyZHMsDQo+PiBDaHJpc3Rp YW4uDQo+Pg0KPj4gQW0gMTEuMTAuMjAxNyB1bSAxMjoxNCBzY2hyaWViIENodW5taW5nIFpob3U6 DQo+Pj4gWW91ciBzdW1tYXJ5IGxhY2tzIHRoZSBiZWxvdyBpc3N1ZToNCj4+Pg0KPj4+IEhvdyBh Ym91dCB0aGUgam9iIGFscmVhZHkgcHVzaGVkIGluIHNjaGVkdWxlciBxdWV1ZSB3aGVuIHZyYW0g aXMgbG9zdD8NCj4+Pg0KPj4+DQo+Pj4gUmVnYXJkcywNCj4+PiBEYXZpZCBaaG91DQo+Pj4gT24g MjAxN+W5tDEw5pyIMTHml6UgMTc6NDEsIExpdSwgTW9uayB3cm90ZToNCj4+Pj4gT2theSwgbGV0 IG1lIHN1bW1hcnkgb3VyIHdob2xlIGlkZWEgdG9nZXRoZXIgYW5kIHNlZSBpZiBpdCB3b3JrczoN Cj4+Pj4NCj4+Pj4gMSwgRm9yIGNzX3N1Ym1pdCwgYWx3YXlzIGNoZWNrIHZyYW0tbG9zdF9jb3Vu dGVyIGZpcnN0IGFuZCByZWplY3QgDQo+Pj4+IHRoZSBzdWJtaXQgKHJldHVybiAtRUNBTkNMRUQg dG8gVU1EKSBpZiBjdHgtPnZyYW1fbG9zdF9jb3VudGVyICE9DQo+Pj4+IGFkZXYtPnZyYW1fbG9z dF9jb3VudGVyLiBUaGF0IHdheSB0aGUgdnJhbSBsb3N0IGlzc3VlIGNhbiBiZSANCj4+Pj4gYWRl di0+aGFuZGxlZA0KPj4+Pg0KPj4+PiAyLCBmb3IgY3Nfc3VibWl0IHdlIHN0aWxsIG5lZWQgdG8g Y2hlY2sgaWYgdGhlIGluY29taW5nIGNvbnRleHQgaXMgDQo+Pj4+ICJBTURHUFVfQ1RYX0dVSUxU WV9SRVNFVCIgb3Igbm90IGV2ZW4gaWYgd2UgZm91bmQNCj4+Pj4gY3R4LT52cmFtX2xvc3RfY291 bnRlciA9PSBhZGV2LT52cmFtX2xvc3RfY291bnRlciwgYW5kIHdlIGNhbiANCj4+Pj4gY3R4LT5y ZWplY3QNCj4+Pj4gdGhlIHN1Ym1pdA0KPj4+PiBJZiBpdCBpcyAiQU1ER1BVX0NUWF9HVUlMVFlf UkVTRVQiLCBjb3JyZWN0ID8NCj4+Pj4NCj4+Pj4gMywgaW4gZ3B1X3Jlc2V0KCkgcm91dGluZSwg d2Ugb25seSBtYXJrIHRoZSBoYW5nIGpvYidzIGVudGl0eSBhcyANCj4+Pj4gZ3VpbHR5IChzbyB3 ZSBuZWVkIHRvIGFkZCBuZXcgbWVtYmVyIGluIGVudGl0eSBzdHJ1Y3R1cmUpLCBhbmQgbm90IA0K Pj4+PiBraWNrIGl0IG91dCBpbiBncHVfcmVzZXQoKSBzdGFnZSwgYnV0IHdlIG5lZWQgdG8gc2V0 IHRoZSBjb250ZXh0IA0KPj4+PiBiZWhpbmQgdGhpcyBlbnRpdHkgYXMgIiBBTURHUFVfQ1RYX0dV SUxUWV9SRVNFVCINCj4+Pj4gICAgICBBbmQgaWYgcmVzZXQgaW50cm9kdWNlcyBWUkFNIExPU1Qs IHdlIGp1c3QgdXBkYXRlDQo+Pj4+IGFkZXYtPnZyYW1fbG9zdF9jb3VudGVyLCBidXQgKmRvbid0 KiBjaGFuZ2UgYWxsIGVudGl0eSB0byBndWlsdHksIA0KPj4+PiBhZGV2LT5zbw0KPj4+PiBzdGls bCBvbmx5IHRoZSBoYW5nIGpvYidzIGVudGl0eSBpcyAiZ3VpbHR5Ig0KPj4+PiAgICAgIEFmdGVy IHNvbWUgZW50aXR5IG1hcmtlZCBhcyAiZ3VpbHR5Iiwgd2UgZmluZCBhIHdheSB0byBzZXQgdGhl IA0KPj4+PiBjb250ZXh0IGJlaGluZCBpdCBhcyBBTURHUFVfQ1RYX0dVSUxUWV9SRVNFVCwgYmVj YXVzZSB0aGlzIGlzIFUvSyANCj4+Pj4gaW50ZXJmYWNlLCB3ZSBuZWVkIGxldCBVTUQgY2FuIGtu b3cgdGhhdCB0aGlzIGNvbnRleHQgaXMgd3JvbmcuDQo+Pj4+DQo+Pj4+IDQsIGluIGdwdSBzY2hl ZHVsZXIncyBydW5fam9iKCkgcm91dGluZSwgc2luY2UgaXQgb25seSByZWFkcyANCj4+Pj4gZW50 aXR5LCBzbyB3ZSBza2lwIGpvYiBzY2hlZHVsaW5nIG9uY2UgZm91bmQgdGhlIGVudGl0eSBpcyAi Z3VpbHR5Ig0KPj4+Pg0KPj4+Pg0KPj4+PiBEb2VzIGFib3ZlIHNvdW5kcyBnb29kID8NCj4+Pj4N Cj4+Pj4NCj4+Pj4NCj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+Pj4gRnJvbTog SGFlaG5sZSwgTmljb2xhaQ0KPj4+PiBTZW50OiBXZWRuZXNkYXksIE9jdG9iZXIgMTEsIDIwMTcg NToyNiBQTQ0KPj4+PiBUbzogTGl1LCBNb25rIDxNb25rLkxpdUBhbWQuY29tPjsgS29lbmlnLCBD aHJpc3RpYW4gDQo+Pj4+IDxDaHJpc3RpYW4uS29lbmlnQGFtZC5jb20+OyBPbHNhaywgTWFyZWsg PE1hcmVrLk9sc2FrQGFtZC5jb20+OyANCj4+Pj4gRGV1Y2hlciwgQWxleGFuZGVyIDxBbGV4YW5k ZXIuRGV1Y2hlckBhbWQuY29tPg0KPj4+PiBDYzogYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmc7IERpbmcsIFBpeGVsIA0KPj4+PiA8UGl4ZWwuRGluZ0BhbWQuY29tPjsgSmlhbmcsIEplcnJ5 IChTVykgPEplcnJ5LkppYW5nQGFtZC5jb20+OyBMaSwgDQo+Pj4+IEJpbmdsZXkgPEJpbmdsZXku TGlAYW1kLmNvbT47IFJhbWlyZXosIEFsZWphbmRybyANCj4+Pj4gPEFsZWphbmRyby5SYW1pcmV6 QGFtZC5jb20+OyBGaWxpcGFzLCBNYXJpbyA8TWFyaW8uRmlsaXBhc0BhbWQuY29tPg0KPj4+PiBT dWJqZWN0OiBSZTogVERSIGFuZCBWUkFNIGxvc3QgaGFuZGxpbmcgaW4gS01EOg0KPj4+Pg0KPj4+ PiBPbiAxMS4xMC4yMDE3IDExOjE4LCBMaXUsIE1vbmsgd3JvdGU6DQo+Pj4+PiBMZXQncyB0YWxr IGl0IHNpbXBsZSwgV2hlbiB2cmFtIGxvc3QgaGl0LCAgd2hhdCdzIHRoZSBhY3Rpb24gZm9yIA0K Pj4+Pj4gYW1kZ3B1X2N0eF9xdWVyeSgpL0FNREdQVV9DVFhfT1BfUVVFUllfU1RBVEUgb24gb3Ro ZXIgY29udGV4dHMgDQo+Pj4+PiAobm90IHRoZSBvbmUgdHJpZ2dlciBncHUgaGFuZykgYWZ0ZXIg dnJhbSBsb3N0ID8gZG8geW91IG1lYW4gd2UgDQo+Pj4+PiByZXR1cm4gLUVOT0RFViB0byBVTUQg Pw0KPj4+PiBJdCBzaG91bGQgc3VjY2Vzc2Z1bGx5IHJldHVybiBBTURHUFVfQ1RYX0lOTk9DRU5U X1JFU0VULg0KPj4+Pg0KPj4+Pg0KPj4+Pj4gSW4gY3Nfc3VibWl0LCB3aXRoIHZyYW0gbG9zdCBo aXQsIGlmIHdlIGRvbid0IG1hcmsgYWxsIGNvbnRleHRzIGFzIA0KPj4+Pj4gImd1aWx0eSIsIGhv dyB3ZSBibG9jayBpdHMgZnJvbSBzdWJtaXR0aW5nID8gY2FuIHlvdSBzaG93IHNvbWUgDQo+Pj4+ PiBpbXBsZW1lbnQgd2F5DQo+Pj4+IGlmIChjdHgtPnZyYW1fbG9zdF9jb3VudGVyICE9IGF0b21p Y19yZWFkKCZhZGV2LT52cmFtX2xvc3RfY291bnRlcikpDQo+Pj4+ICAgICAgICAgcmV0dXJuIC1F Q0FOQ0VMRUQ7DQo+Pj4+DQo+Pj4+ICh3aGVyZSBjdHgtPnZyYW1fbG9zdF9jb3VudGVyIGlzIGlu aXRpYWxpemVkIGF0IGNvbnRleHQgY3JlYXRpb24gDQo+Pj4+IHRpbWUgYW5kIG5ldmVyIGNoYW5n ZWQgYWZ0ZXJ3YXJkcykNCj4+Pj4NCj4+Pj4NCj4+Pj4+IEJUVzogdGhlICJndWlsdHkiIGhlcmUg aXMgYSBuZXcgbWVtYmVyIEkgd2FudCB0byBhZGQgdG8gY29udGV4dCwgDQo+Pj4+PiBpdCBpcyBu b3QgcmVsYXRlZCB3aXRoIEFNREdQVV9DVFhfT1BfUVVFUllfU1RBVEUgVUsgaW50ZXJmYWNlLCAN Cj4+Pj4+IExvb2tzIEkgbmVlZCB0byB1bmlmeSB0aGVtIGFuZCBvbmx5IG9uZSBwbGFjZSB0byBt YXJrIGd1aWx0eSBvciANCj4+Pj4+IG5vdA0KPj4+PiBSaWdodCwgdGhlIEFNREdQVV9DVFhfT1Bf UVVFUllfU1RBVEUgaGFuZGxpbmcgbmVlZHMgdG8gYmUgbWFkZSANCj4+Pj4gY29uc2lzdGVudCB3 aXRoIHRoZSByZXN0Lg0KPj4+Pg0KPj4+PiBDaGVlcnMsDQo+Pj4+IE5pY29sYWkNCj4+Pj4NCj4+ Pj4NCj4+Pj4+IEJSIE1vbmsNCj4+Pj4+DQo+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPj4+Pj4gRnJvbTogSGFlaG5sZSwgTmljb2xhaQ0KPj4+Pj4gU2VudDogV2VkbmVzZGF5LCBP Y3RvYmVyIDExLCAyMDE3IDU6MDAgUE0NCj4+Pj4+IFRvOiBMaXUsIE1vbmsgPE1vbmsuTGl1QGFt ZC5jb20+OyBLb2VuaWcsIENocmlzdGlhbiANCj4+Pj4+IDxDaHJpc3RpYW4uS29lbmlnQGFtZC5j b20+OyBPbHNhaywgTWFyZWsgPE1hcmVrLk9sc2FrQGFtZC5jb20+OyANCj4+Pj4+IERldWNoZXIs IEFsZXhhbmRlciA8QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbT4NCj4+Pj4+IENjOiBhbWQtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgRGluZywgUGl4ZWwgDQo+Pj4+PiA8UGl4ZWwuRGluZ0Bh bWQuY29tPjsgSmlhbmcsIEplcnJ5IChTVykgPEplcnJ5LkppYW5nQGFtZC5jb20+OyBMaSwgDQo+ Pj4+PiBCaW5nbGV5IDxCaW5nbGV5LkxpQGFtZC5jb20+OyBSYW1pcmV6LCBBbGVqYW5kcm8gDQo+ Pj4+PiA8QWxlamFuZHJvLlJhbWlyZXpAYW1kLmNvbT47IEZpbGlwYXMsIE1hcmlvIA0KPj4+Pj4g PE1hcmlvLkZpbGlwYXNAYW1kLmNvbT4NCj4+Pj4+IFN1YmplY3Q6IFJlOiBURFIgYW5kIFZSQU0g bG9zdCBoYW5kbGluZyBpbiBLTUQ6DQo+Pj4+Pg0KPj4+Pj4gT24gMTEuMTAuMjAxNyAxMDo0OCwg TGl1LCBNb25rIHdyb3RlOg0KPj4+Pj4+IE9uICJndWlsdHkiOiAiZ3VpbHR5IiBpcyBhIHRlcm0g dGhhdCdzIHVzZWQgYnkgQVBJcyAoZS5nLiANCj4+Pj4+PiBPcGVuR0wpLCBzbyBpdCdzIHJlYXNv bmFibGUgdG8gdXNlIGl0LiBIb3dldmVyLCBpdCAvZG9lcyBub3QvIA0KPj4+Pj4+IG1ha2Ugc2Vu c2UgdG8gbWFyayBpZGxlIGNvbnRleHRzIGFzICJndWlsdHkiIGp1c3QgYmVjYXVzZSBWUkFNIGlz IA0KPj4+Pj4+IGxvc3QuIFZSQU0gbG9zdCBpcyBhIHBlcmZlY3QgZXhhbXBsZSB3aGVyZSB0aGUg ZHJpdmVyIHNob3VsZCANCj4+Pj4+PiByZXBvcnQgY29udGV4dCBsb3N0IHRvIGFwcGxpY2F0aW9u cyB3aXRoIHRoZSAiaW5ub2NlbnQiIGZsYWcgZm9yIA0KPj4+Pj4+IGNvbnRleHRzIHRoYXQgd2Vy ZSBpZGxlIGF0IHRoZSB0aW1lIG9mIHJlc2V0LiBUaGUgb25seSBjb250ZXh0KHMpIA0KPj4+Pj4+ IHRoYXQgc2hvdWxkIGJlIHJlcG9ydGVkIGFzICJndWlsdHkiDQo+Pj4+Pj4gKG9yIHBlcmhhcHMg InVua25vd24iIGluIHNvbWUgY2FzZXMpIGFyZSB0aGUgb25lcyB0aGF0IHdlcmUgDQo+Pj4+Pj4g ZXhlY3V0aW5nIGF0IHRoZSB0aW1lIG9mIHJlc2V0Lg0KPj4+Pj4+DQo+Pj4+Pj4gTUw6IEtNRCBt YXJrIGFsbCBjb250ZXh0cyBhcyBndWlsdHkgaXMgYmVjYXVzZSB0aGF0IHdheSB3ZSBjYW4gDQo+ Pj4+Pj4gdW5pZnkgb3VyIElPQ1RMIGJlaGF2aW9yOiBlLmcuIGZvciBJT0NUTCBvbmx5IGJsb2Nr IA0KPj4+Pj4+IOKAnGd1aWx0eeKAnWNvbnRleHQgLCBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHZy YW0tbG9zdC1jb3VudGVyIA0KPj4+Pj4+IGFueW1vcmUsIHRoYXTigJlzIGEgaW1wbGVtZW50YXRp b24gc3R5bGUuIEkgZG9u4oCZdCB0aGluayBpdCBpcyANCj4+Pj4+PiByZWxhdGVkIHdpdGggVU1E IGxheWVyLA0KPj4+Pj4+DQo+Pj4+Pj4gRm9yIFVNRCB0aGUgZ2wtY29udGV4dCBpc27igJl0IGF3 YXJlIG9mIGJ5IEtNRCwgc28gVU1EIGNhbiANCj4+Pj4+PiBpbXBsZW1lbnQgaXQgb3duIOKAnGd1 aWx0eeKAnSBnbC1jb250ZXh0IGlmIHlvdSB3YW50Lg0KPj4+Pj4gV2VsbCwgdG8gc29tZSBleHRl bnQgdGhpcyBpcyBqdXN0IHNlbWFudGljcywgYnV0IGl0IGhlbHBzIHRvIGtlZXAgDQo+Pj4+PiB0 aGUgdGVybWlub2xvZ3kgY29uc2lzdGVudC4NCj4+Pj4+DQo+Pj4+PiBNb3N0IGltcG9ydGFudGx5 LCBwbGVhc2Uga2VlcCB0aGUgQU1ER1BVX0NUWF9PUF9RVUVSWV9TVEFURSB1YXBpIA0KPj4+Pj4g aW4NCj4+Pj4+IG1pbmQ6IHRoaXMgcmV0dXJucyBvbmUgb2YNCj4+Pj4+IEFNREdQVV9DVFhfe0dV SUxUWSxJTk5PQ0VOVCxVTktOT1dOfV9SRUNFTlQsDQo+Pj4+PiBhbmQgaXQgbXVzdCByZXR1cm4g Imlubm9jZW50IiBmb3IgY29udGV4dHMgdGhhdCBhcmUgb25seSBsb3N0IGR1ZSANCj4+Pj4+IHRv IFZSQU0gbG9zdCB3aXRob3V0IGJlaW5nIG90aGVyd2lzZSBpbnZvbHZlZCBpbiB0aGUgdGltZW91 dCB0aGF0IA0KPj4+Pj4gbGVhZCB0byB0aGUgcmVzZXQuDQo+Pj4+Pg0KPj4+Pj4gVGhlIHBvaW50 IGlzIHRoYXQgaW4gdGhlIHBsYWNlcyB3aGVyZSB5b3UgdXNlZCAiZ3VpbHR5IiBpdCB3b3VsZCAN Cj4+Pj4+IGJlIGJldHRlciB0byB1c2UgImNvbnRleHQgbG9zdCIsIGFuZCB0aGVuIGZ1cnRoZXIg ZGlmZmVyZW50aWF0ZSANCj4+Pj4+IGJldHdlZW4gZ3VpbHR5L2lubm9jZW50IGNvbnRleHQgbG9z dCBiYXNlZCBvbiB0aGUgZGV0YWlscyBvZiB3aGF0IGhhcHBlbmVkLg0KPj4+Pj4NCj4+Pj4+DQo+ Pj4+Pj4gSWYgS01EIGRvZXNu4oCZdCBtYXJrIGFsbCBjdHggYXMgZ3VpbHR5IGFmdGVyIFZSQU0g bG9zdCwgY2FuIHlvdSANCj4+Pj4+PiBpbGx1c3RyYXRlIHdoYXQgcnVsZSBLTUQgc2hvdWxkIG9i ZXkgdG8gY2hlY2sgaW4gS01TIElPQ1RMIGxpa2UgDQo+Pj4+Pj4gY3Nfc3VtYml0ID8/IGxldOKA mXMgc2VlIHdoaWNoIHdheSBiZXR0ZXINCj4+Pj4+IGlmIChjdHgtPnZyYW1fbG9zdF9jb3VudGVy ICE9IGF0b21pY19yZWFkKCZhZGV2LT52cmFtX2xvc3RfY291bnRlcikpDQo+Pj4+PiAgICAgICAg ICByZXR1cm4gLUVDQU5DRUxFRDsNCj4+Pj4+DQo+Pj4+PiBQbHVzIHNpbWlsYXIgbG9naWMgZm9y IEFNREdQVV9DVFhfT1BfUVVFUllfU1RBVEUuDQo+Pj4+Pg0KPj4+Pj4gWWVzLCBpdCdzIG9uZSBh ZGRpdGlvbmFsIGNoZWNrIGluIGNzX3N1Ym1pdC4gSWYgeW91J3JlIHdvcnJpZWQgDQo+Pj4+PiBh Ym91dCB0aGF0IChhbmQgQ2hyaXN0aWFuJ3MgY29uY2VybnMgYWJvdXQgcG9zc2libGUgaXNzdWVz IHdpdGggDQo+Pj4+PiB3YWxraW5nIG92ZXIgYWxsIGNvbnRleHRzIGFyZSBhZGRyZXNzZWQpLCBJ IHN1cHBvc2UgeW91IGNvdWxkIGp1c3QgDQo+Pj4+PiBzdG9yZSBhIHBlci1jb250ZXh0DQo+Pj4+ Pg0KPj4+Pj4gICAgICAgIHVuc2lnbmVkIGNvbnRleHRfcmVzZXRfc3RhdHVzOw0KPj4+Pj4NCj4+ Pj4+IGluc3RlYWQgb2YgYSBgYm9vbCBndWlsdHlgLiBJdHMgdmFsdWUgd291bGQgc3RhcnQgb3V0 IGFzIDANCj4+Pj4+IChBTURHUFVfQ1RYX05PX1JFU0VUKSBhbmQgd291bGQgYmUgc2V0IHRvIHRo ZSBjb3JyZWN0IHZhbHVlIGR1cmluZyANCj4+Pj4+IHJlc2V0Lg0KPj4+Pj4NCj4+Pj4+IENoZWVy cywNCj4+Pj4+IE5pY29sYWkNCj4+Pj4+DQo+Pj4+Pg0KPj4+Pj4+ICpGcm9tOipIYWVobmxlLCBO aWNvbGFpDQo+Pj4+Pj4gKlNlbnQ6KiBXZWRuZXNkYXksIE9jdG9iZXIgMTEsIDIwMTcgNDo0MSBQ TQ0KPj4+Pj4+ICpUbzoqIExpdSwgTW9uayA8TW9uay5MaXVAYW1kLmNvbT47IEtvZW5pZywgQ2hy aXN0aWFuIA0KPj4+Pj4+IDxDaHJpc3RpYW4uS29lbmlnQGFtZC5jb20+OyBPbHNhaywgTWFyZWsg PE1hcmVrLk9sc2FrQGFtZC5jb20+OyANCj4+Pj4+PiBEZXVjaGVyLCBBbGV4YW5kZXIgPEFsZXhh bmRlci5EZXVjaGVyQGFtZC5jb20+DQo+Pj4+Pj4gKkNjOiogYW1kLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmc7IERpbmcsIFBpeGVsIA0KPj4+Pj4+IDxQaXhlbC5EaW5nQGFtZC5jb20+OyBKaWFu ZywgSmVycnkgKFNXKSA8SmVycnkuSmlhbmdAYW1kLmNvbT47IA0KPj4+Pj4+IExpLCBCaW5nbGV5 IDxCaW5nbGV5LkxpQGFtZC5jb20+OyBSYW1pcmV6LCBBbGVqYW5kcm8gDQo+Pj4+Pj4gPEFsZWph bmRyby5SYW1pcmV6QGFtZC5jb20+OyBGaWxpcGFzLCBNYXJpbyANCj4+Pj4+PiA8TWFyaW8uRmls aXBhc0BhbWQuY29tPg0KPj4+Pj4+ICpTdWJqZWN0OiogUmU6IFREUiBhbmQgVlJBTSBsb3N0IGhh bmRsaW5nIGluIEtNRDoNCj4+Pj4+Pg0KPj4+Pj4+ICAgICAgRnJvbSBhIE1lc2EgcGVyc3BlY3Rp dmUsIHRoaXMgYWxtb3N0IGFsbCBzb3VuZHMgcmVhc29uYWJsZSB0byBtZS4NCj4+Pj4+Pg0KPj4+ Pj4+IE9uICJndWlsdHkiOiAiZ3VpbHR5IiBpcyBhIHRlcm0gdGhhdCdzIHVzZWQgYnkgQVBJcyAo ZS5nLiANCj4+Pj4+PiBPcGVuR0wpLCBzbyBpdCdzIHJlYXNvbmFibGUgdG8gdXNlIGl0LiBIb3dl dmVyLCBpdCAvZG9lcyBub3QvIA0KPj4+Pj4+IG1ha2Ugc2Vuc2UgdG8gbWFyayBpZGxlIGNvbnRl eHRzIGFzICJndWlsdHkiIGp1c3QgYmVjYXVzZSBWUkFNIGlzIA0KPj4+Pj4+IGxvc3QuIFZSQU0g bG9zdCBpcyBhIHBlcmZlY3QgZXhhbXBsZSB3aGVyZSB0aGUgZHJpdmVyIHNob3VsZCANCj4+Pj4+ PiByZXBvcnQgY29udGV4dCBsb3N0IHRvIGFwcGxpY2F0aW9ucyB3aXRoIHRoZSAiaW5ub2NlbnQi IGZsYWcgZm9yIA0KPj4+Pj4+IGNvbnRleHRzIHRoYXQgd2VyZSBpZGxlIGF0IHRoZSB0aW1lIG9m IHJlc2V0LiBUaGUgb25seSBjb250ZXh0KHMpIA0KPj4+Pj4+IHRoYXQgc2hvdWxkIGJlIHJlcG9y dGVkIGFzICJndWlsdHkiDQo+Pj4+Pj4gKG9yIHBlcmhhcHMgInVua25vd24iIGluIHNvbWUgY2Fz ZXMpIGFyZSB0aGUgb25lcyB0aGF0IHdlcmUgDQo+Pj4+Pj4gZXhlY3V0aW5nIGF0IHRoZSB0aW1l IG9mIHJlc2V0Lg0KPj4+Pj4+DQo+Pj4+Pj4gT24gd2hldGhlciB0aGUgd2hvbGUgY29udGV4dCBp cyBtYXJrZWQgYXMgZ3VpbHR5IGZyb20gYSB1c2VyIA0KPj4+Pj4+IHNwYWNlIHBlcnNwZWN0aXZl LCBpdCB3b3VsZCBzaW1wbHkgYmUgbmljZSBmb3IgdXNlciBzcGFjZSB0byBnZXQgDQo+Pj4+Pj4g Y29uc2lzdGVudCBhbnN3ZXJzLiBJdCB3b3VsZCBiZSBhIGJpdCBvZGQgaWYgd2UgY291bGQgZS5n LiANCj4+Pj4+PiBzdWNjZWVkIGluIHN1Ym1pdHRpbmcgYW4gU0RNQSBqb2IgYWZ0ZXIgYSBHRlgg am9iIHdhcyByZWplY3RlZC4gDQo+Pj4+Pj4gVGhpcyB3b3VsZCBwb2ludCBpbiBmYXZvciBvZiBt YXJraW5nIHRoZSBlbnRpcmUgY29udGV4dCBhcyBndWlsdHkgDQo+Pj4+Pj4gKGFsdGhvdWdoIHRo YXQgY291bGQgaGFwcGVuIGxhemlseSBpbnN0ZWFkIG9mIGF0IHJlc2V0IHRpbWUpLiBPbiANCj4+ Pj4+PiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhhdCdzIHRvbyBiaWcgYSBidXJkZW4gZm9yIHRoZSBr ZXJuZWwgDQo+Pj4+Pj4gaW1wbGVtZW50YXRpb24gSSdtIHN1cmUgd2UgY2FuIGxpdmUgd2l0aG91 dCBpdC4NCj4+Pj4+Pg0KPj4+Pj4+IENoZWVycywNCj4+Pj4+Pg0KPj4+Pj4+IE5pY29sYWkNCj4+ Pj4+Pg0KPj4+Pj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+Pj4+Pj4gLQ0KPj4+Pj4+IC0NCj4+Pj4+PiAtLS0NCj4+ Pj4+PiAtLQ0KPj4+Pj4+DQo+Pj4+Pj4gKkZyb206KkxpdSwgTW9uaw0KPj4+Pj4+ICpTZW50Oiog V2VkbmVzZGF5LCBPY3RvYmVyIDExLCAyMDE3IDEwOjE1OjQwIEFNDQo+Pj4+Pj4gKlRvOiogS29l bmlnLCBDaHJpc3RpYW47IEhhZWhubGUsIE5pY29sYWk7IE9sc2FrLCBNYXJlazsgRGV1Y2hlciwg DQo+Pj4+Pj4gQWxleGFuZGVyDQo+Pj4+Pj4gKkNjOiogYW1kLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcgDQo+Pj4+Pj4gPG1haWx0bzphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZz47IERp bmcsIFBpeGVsOyBKaWFuZywgSmVycnkgDQo+Pj4+Pj4gKFNXKTsgTGksIEJpbmdsZXk7IFJhbWly ZXosIEFsZWphbmRybzsgRmlsaXBhcywgTWFyaW8NCj4+Pj4+PiAqU3ViamVjdDoqIFJFOiBURFIg YW5kIFZSQU0gbG9zdCBoYW5kbGluZyBpbiBLTUQ6DQo+Pj4+Pj4NCj4+Pj4+PiAxLlNldCBpdHMg ZmVuY2UgZXJyb3Igc3RhdHVzIHRvIOKAnCpFVElNRSrigJ0sDQo+Pj4+Pj4NCj4+Pj4+PiBObywg YXMgSSBhbHJlYWR5IGV4cGxhaW5lZCBFVElNRSBpcyBmb3Igc3luY2hyb25vdXMgb3BlcmF0aW9u Lg0KPj4+Pj4+DQo+Pj4+Pj4gSW4gb3RoZXIgd29yZHMgd2hlbiB3ZSByZXR1cm4gRVRJTUUgZnJv bSB0aGUgd2FpdCBJT0NUTCBpdCB3b3VsZCANCj4+Pj4+PiBtZWFuIHRoYXQgdGhlIHdhaXRpbmcg aGFzIHNvbWVob3cgdGltZWQgb3V0LCBidXQgbm90IHRoZSBqb2Igd2Ugd2FpdGVkIGZvci4NCj4+ Pj4+Pg0KPj4+Pj4+IFBsZWFzZSB1c2UgRUNBTkNFTEVEIGFzIHdlbGwgb3Igc29tZSBvdGhlciBl cnJvciBjb2RlIHdoZW4gd2UgDQo+Pj4+Pj4gZmluZCB0aGF0IHdlIG5lZWQgdG8gZGlzdGluY3Qg dGhlIHRpbWVkb3V0IGpvYiBmcm9tIHRoZSBjYW5jZWxlZCANCj4+Pj4+PiBvbmVzIChwcm9iYWJs eSBhIGdvb2QgaWRlYSwgYnV0IEknbSBub3Qgc3VyZSkuDQo+Pj4+Pj4NCj4+Pj4+PiBbTUxdIEni gJltIG9rYXkgaWYgeW91IGluc2lzdCBub3QgdG8gdXNlIEVUSU1FDQo+Pj4+Pj4NCj4+Pj4+PiAx LkZpbmQgdGhlIGVudGl0eS9jdHggYmVoaW5kIHRoaXMgam9iLCBhbmQgc2V0IHRoaXMgY3R4IGFz IOKAnCpndWlsdHkq4oCdDQo+Pj4+Pj4NCj4+Pj4+PiBOb3Qgc3VyZS4gRG8gd2Ugd2FudCB0byBz ZXQgdGhlIHdob2xlIGNvbnRleHQgYXMgZ3VpbHR5IG9yIGp1c3QgDQo+Pj4+Pj4gdGhlIGVudGl0 eT8NCj4+Pj4+Pg0KPj4+Pj4+IFNldHRpbmcgdGhlIHdob2xlIGNvbnRleHRzIGFzIGd1aWx0eSBz b3VuZHMgcmFjeSB0byBtZS4NCj4+Pj4+Pg0KPj4+Pj4+IEJUVzogV2Ugc2hvdWxkIHVzZSBhIGRp ZmZlcmVudCBuYW1lIHRoYW4gImd1aWx0eSIsIG1heWJlIGp1c3QgDQo+Pj4+Pj4gImJvb2wgY2Fu Y2VsZWQ7IiA/DQo+Pj4+Pj4NCj4+Pj4+PiBbTUxdIEkgdGhpbmsgY29udGV4dCBpcyBiZXR0ZXIg dGhhbiBlbnRpdHksIGJlY2F1c2UgZm9yIGV4YW1wbGUgDQo+Pj4+Pj4gaWYgeW91IG9ubHkgYmxv Y2sgZW50aXR5XzAgb2YgY29udGV4dCBhbmQgYWxsb3cgZW50aXR5X04gcnVuLCANCj4+Pj4+PiB0 aGF0IG1lYW5zIHRoZSBkZXBlbmRlbmN5IGJldHdlZW4gZW50aXRpZXMgYXJlIGJyb2tlbiAoZS5n LiBwYWdlIA0KPj4+Pj4+IHRhYmxlIHVwZGF0ZXMgaW4NCj4+Pj4+Pg0KPj4+Pj4+IFNkbWEgZW50 aXR5IHBhc3MgYnV0IGdmeCBzdWJtaXQgaW4gR0ZYIGVudGl0eSBibG9ja2VkLCBub3QgbWFrZSAN Cj4+Pj4+PiBzZW5zZSB0byBtZSkNCj4+Pj4+Pg0KPj4+Pj4+IFdl4oCZZCBiZXR0ZXIgZWl0aGVy IGJsb2NrIHRoZSB3aG9sZSBjb250ZXh0IG9yIGxldCBub3TigKYNCj4+Pj4+Pg0KPj4+Pj4+IDEu S2ljayBvdXQgYWxsIGpvYnMgaW4gdGhpcyDigJxndWlsdHnigJ0gY3R44oCZcyBLRklGTyBxdWV1 ZSwgYW5kIHNldCANCj4+Pj4+PiBhbGwgdGhlaXIgZmVuY2Ugc3RhdHVzIHRvIOKAnCpFQ0FOQ0VM RUQq4oCdDQo+Pj4+Pj4NCj4+Pj4+PiBTZXR0aW5nIEVDQU5DRUxFRCBzaG91bGQgYmUgb2suIEJ1 dCBJIHRoaW5rIHdlIHNob3VsZCBkbyB0aGlzIA0KPj4+Pj4+IHdoZW4gd2UgdHJ5IHRvIHJ1biB0 aGUgam9icyBhbmQgbm90IGR1cmluZyBHUFUgcmVzZXQuDQo+Pj4+Pj4NCj4+Pj4+PiBbTUxdIHdp dGhvdXQgZGVlcCB0aG91Z2h0IGFuZCBleHByaXRtZW50LCBJ4oCZbSBub3Qgc3VyZSB0aGUgDQo+ Pj4+Pj4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0sIGJ1dCBraWNrIGl0IG91dCBpbiBncHVfcmVz ZXQgcm91dGluZSBpcyANCj4+Pj4+PiBtb3JlIGVmZmljaWVudCwNCj4+Pj4+Pg0KPj4+Pj4+IE90 aGVyd2lzZSB5b3UgbmVlZCB0byBjaGVjayBjb250ZXh0L2VudGl0eSBndWlsdHkgZmxhZyBpbiBy dW5fam9iIA0KPj4+Pj4+IHJvdXRpbmUg4oCmYW5kIHlvdSBuZWVkIHRvIGl0IGZvciBldmVyeSBj b250ZXh0L2VudGl0eSwgSSBkb27igJl0IHNlZSANCj4+Pj4+PiB3aHkNCj4+Pj4+Pg0KPj4+Pj4+ IFdlIGRvbuKAmXQganVzdCBraWNrb3V0IGFsbCBvZiB0aGVtIGluIGdwdV9yZXNldCBzdGFnZSDi gKYuDQo+Pj4+Pj4NCj4+Pj4+PiBhKUl0ZXJhdGUgb3ZlciBhbGwgbGl2aW5nIGN0eCwgYW5kIHNl dCBhbGwgY3R4IGFzIOKAnCpndWlsdHkq4oCdIA0KPj4+Pj4+IHNpbmNlIFZSQU0gbG9zdCBhY3R1 YWxseSBydWlucyBhbGwgVlJBTSBjb250ZW50cw0KPj4+Pj4+DQo+Pj4+Pj4gTm8sIHRoYXQgc2hv dWxkbid0IGJlIGRvbmUgYnkgY29tcGFyaW5nIHRoZSBjb3VudGVycy4gSXRlcmF0aW5nIA0KPj4+ Pj4+IG92ZXIgYWxsIGNvbnRleHRzIGlzIHdheSB0byBtdWNoIG92ZXJoZWFkLg0KPj4+Pj4+DQo+ Pj4+Pj4gW01MXSBiZWNhdXNlIEkgd2FudCB0byBtYWtlIEtNUyBJT0NUTCBydWxlcyBjbGVhbiwg bGlrZSB0aGV5IA0KPj4+Pj4+IGRvbuKAmXQgbmVlZCB0byBkaWZmZXJlbnRpYXRlIFZSQU0gbG9z dCBvciBub3QsIHRoZXkgb25seSANCj4+Pj4+PiBpbnRlcmVzdGVkIGluIGlmIHRoZSBjb250ZXh0 IGlzIGd1aWx0eSBvciBub3QsIGFuZCBibG9jaw0KPj4+Pj4+DQo+Pj4+Pj4gU3VibWl0IGZvciBn dWlsdHkgb25lcy4NCj4+Pj4+Pg0KPj4+Pj4+ICpDYW4geW91IGdpdmUgbW9yZSBkZXRhaWxzIG9m IHlvdXIgaWRlYT8gQW5kIGJldHRlciB0aGUgZGV0YWlsIA0KPj4+Pj4+IGltcGxlbWVudCBpbiBj c19zdWJtaXQsIEkgd2FudCB0byBzZWUgaG93IHlvdSB3YW50IHRvIGJsb2NrIA0KPj4+Pj4+IHN1 Ym1pdCB3aXRob3V0IGNoZWNraW5nIGNvbnRleHQgZ3VpbHR5IGZsYWcqDQo+Pj4+Pj4NCj4+Pj4+ PiBhKUtpY2sgb3V0IGFsbCBqb2JzIGluIGFsbCBjdHjigJlzIEtGSUZPIHF1ZXVlLCBhbmQgc2V0 IGFsbCB0aGVpciANCj4+Pj4+PiBmZW5jZSBzdGF0dXMgdG8g4oCcKkVDQU5DRUxERUQq4oCdDQo+ Pj4+Pj4NCj4+Pj4+PiBZZXMgYW5kIG5vLCB0aGF0IHNob3VsZCBiZSBkb25lIHdoZW4gd2UgdHJ5 IHRvIHJ1biB0aGUgam9icyBhbmQgDQo+Pj4+Pj4gbm90IGR1cmluZyBHUFUgcmVzZXQuDQo+Pj4+ Pj4NCj4+Pj4+PiBbTUxdIGFnYWluLCBraWNraW5nIG91dCB0aGVtIGluIGdwdSByZXNldCByb3V0 aW5lIGlzIGhpZ2ggDQo+Pj4+Pj4gZWZmaWNpZW50LCBvdGhlcndpc2UgeW91IG5lZWQgY2hlY2sg b24gZXZlcnkgam9iIGluIHJ1bl9qb2IoKQ0KPj4+Pj4+DQo+Pj4+Pj4gQmVzaWRlcywgY2FuIHlv dSBpbGx1c3RyYXRlIHRoZSBkZXRhaWwgaW1wbGVtZW50YXRpb24gPw0KPj4+Pj4+DQo+Pj4+Pj4g WWVzIGFuZCBubywgZG1hX2ZlbmNlX2dldF9zdGF0dXMoKSBpcyBzb21lIHNwZWNpZmljIGhhbmRs aW5nIGZvciANCj4+Pj4+PiBzeW5jX2ZpbGUgZGVidWdnaW5nIChubyBpZGVhIHdoeSB0aGF0IG1h ZGUgaXQgaW50byB0aGUgY29tbW9uIA0KPj4+Pj4+IGZlbmNlIGNvZGUpLg0KPj4+Pj4+DQo+Pj4+ Pj4gSXQgd2FzIHJlcGxhY2VkIGJ5IHB1dHRpbmcgdGhlIGVycm9yIGNvZGUgZGlyZWN0bHkgaW50 byB0aGUgDQo+Pj4+Pj4gZmVuY2UsIHNvIGp1c3QgcmVhZGluZyB0aGF0IG9uZSBhZnRlciB3YWl0 aW5nIHNob3VsZCBiZSBvay4NCj4+Pj4+Pg0KPj4+Pj4+IE1heWJlIHdlIHNob3VsZCBmaXggZG1h X2ZlbmNlX2dldF9zdGF0dXMoKSB0byBkbyB0aGUgcmlnaHQgdGhpbmcgDQo+Pj4+Pj4gZm9yIHRo aXM/DQo+Pj4+Pj4NCj4+Pj4+PiBbTUxdIHllYWgsIHRoYXTigJlzIHRvbyBjb25mdXNpbmcsIHRo ZSBuYW1lIHNvdW5kIHJlYWxseSB0aGUgb25lIEkgDQo+Pj4+Pj4gd2FudCB0byB1c2UsIHdlIHNo b3VsZCBjaGFuZ2UgaXTigKYNCj4+Pj4+Pg0KPj4+Pj4+ICpCdXQgbG9vayBpbnRvIHRoZSBpbXBs ZW1lbnQsIEkgZG9uKirigJl0IHNlZSB3aHkgd2UgY2Fubm90IHVzZSBpdCA/DQo+Pj4+Pj4gaXQg YWxzbyBmaW5hbGx5IHJldHVybiB0aGUgZmVuY2UtPmVycm9yICoNCj4+Pj4+Pg0KPj4+Pj4+ICpG cm9tOipLb2VuaWcsIENocmlzdGlhbg0KPj4+Pj4+ICpTZW50OiogV2VkbmVzZGF5LCBPY3RvYmVy IDExLCAyMDE3IDM6MjEgUE0NCj4+Pj4+PiAqVG86KiBMaXUsIE1vbmsgPE1vbmsuTGl1QGFtZC5j b20gPG1haWx0bzpNb25rLkxpdUBhbWQuY29tPj47IA0KPj4+Pj4+IEhhZWhubGUsIE5pY29sYWkg PE5pY29sYWkuSGFlaG5sZUBhbWQuY29tIA0KPj4+Pj4+IDxtYWlsdG86Tmljb2xhaS5IYWVobmxl QGFtZC5jb20+PjsNCj4+Pj4+PiBPbHNhaywgTWFyZWsgPE1hcmVrLk9sc2FrQGFtZC5jb20gPG1h aWx0bzpNYXJlay5PbHNha0BhbWQuY29tPj47IA0KPj4+Pj4+IERldWNoZXIsIEFsZXhhbmRlciA8 QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbSANCj4+Pj4+PiA8bWFpbHRvOkFsZXhhbmRlci5EZXVj aGVyQGFtZC5jb20+Pg0KPj4+Pj4+ICpDYzoqIGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn IA0KPj4+Pj4+IDxtYWlsdG86YW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmc+OyBEaW5nLCBQ aXhlbCANCj4+Pj4+PiA8UGl4ZWwuRGluZ0BhbWQuY29tIDxtYWlsdG86UGl4ZWwuRGluZ0BhbWQu Y29tPj47IEppYW5nLCBKZXJyeQ0KPj4+Pj4+IChTVykgPEplcnJ5LkppYW5nQGFtZC5jb20gPG1h aWx0bzpKZXJyeS5KaWFuZ0BhbWQuY29tPj47IExpLCANCj4+Pj4+PiBCaW5nbGV5IDxCaW5nbGV5 LkxpQGFtZC5jb20gPG1haWx0bzpCaW5nbGV5LkxpQGFtZC5jb20+PjsgDQo+Pj4+Pj4gUmFtaXJl eiwgQWxlamFuZHJvIDxBbGVqYW5kcm8uUmFtaXJlekBhbWQuY29tIA0KPj4+Pj4+IDxtYWlsdG86 QWxlamFuZHJvLlJhbWlyZXpAYW1kLmNvbT4+Ow0KPj4+Pj4+IEZpbGlwYXMsIE1hcmlvIDxNYXJp by5GaWxpcGFzQGFtZC5jb20gDQo+Pj4+Pj4gPG1haWx0bzpNYXJpby5GaWxpcGFzQGFtZC5jb20+ Pg0KPj4+Pj4+ICpTdWJqZWN0OiogUmU6IFREUiBhbmQgVlJBTSBsb3N0IGhhbmRsaW5nIGluIEtN RDoNCj4+Pj4+Pg0KPj4+Pj4+IFNlZSBpbmxpbmU6DQo+Pj4+Pj4NCj4+Pj4+PiBBbSAxMS4xMC4y MDE3IHVtIDA3OjMzIHNjaHJpZWIgTGl1LCBNb25rOg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICBI aSBDaHJpc3RpYW4gJiBOaWNvbGFpLA0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICBXZSBuZWVkIHRv IGFjaGlldmUgc29tZSBhZ3JlZW1lbnRzIG9uIHdoYXQgc2hvdWxkIA0KPj4+Pj4+IE1FU0EvVU1E IGRvIGFuZA0KPj4+Pj4+ICAgICAgICAgd2hhdCBzaG91bGQgS01EIGRvLCAqcGxlYXNlIGdpdmUg eW91ciBjb21tZW50cyB3aXRoIOKAnG9rYXnigJ0NCj4+Pj4+PiBvciDigJxOb+KAnQ0KPj4+Pj4+ ICAgICAgICAgYW5kIHlvdXIgaWRlYSBvbiBiZWxvdyBpdGVtcywqDQo+Pj4+Pj4NCj4+Pj4+PiAg ICAgICAgID9XaGVuIGEgam9iIHRpbWVkIG91dCAoc2V0IGZyb20gbG9ja3VwX3RpbWVvdXQga2Vy bmVsIA0KPj4+Pj4+IHBhcmFtZXRlciksDQo+Pj4+Pj4gICAgICAgICBXaGF0IEtNRCBzaG91bGQg ZG8gaW4gVERSIHJvdXRpbmUgOg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICAxLlVwZGF0ZSBhZGV2 LT4qZ3B1X3Jlc2V0X2NvdW50ZXIqLCBhbmQgc3RvcCBzY2hlZHVsZXIgZmlyc3QsDQo+Pj4+Pj4g ICAgICAgICAoKmdwdV9yZXNldF9jb3VudGVyKiBpcyB1c2VkIHRvIGZvcmNlIHZtIGZsdXNoIGFm dGVyIEdQVSANCj4+Pj4+PiByZXNldCwgb3V0DQo+Pj4+Pj4gICAgICAgICBvZiB0aGlzIHRocmVh ZOKAmXMgc2NvcGUgc28gbm8gbW9yZSBkaXNjdXNzaW9uIG9uIGl0KQ0KPj4+Pj4+DQo+Pj4+Pj4g T2theS4NCj4+Pj4+Pg0KPj4+Pj4+ICAgICAgICAgMi5TZXQgaXRzIGZlbmNlIGVycm9yIHN0YXR1 cyB0byDigJwqRVRJTUUq4oCdLA0KPj4+Pj4+DQo+Pj4+Pj4gTm8sIGFzIEkgYWxyZWFkeSBleHBs YWluZWQgRVRJTUUgaXMgZm9yIHN5bmNocm9ub3VzIG9wZXJhdGlvbi4NCj4+Pj4+Pg0KPj4+Pj4+ IEluIG90aGVyIHdvcmRzIHdoZW4gd2UgcmV0dXJuIEVUSU1FIGZyb20gdGhlIHdhaXQgSU9DVEwg aXQgd291bGQgDQo+Pj4+Pj4gbWVhbiB0aGF0IHRoZSB3YWl0aW5nIGhhcyBzb21laG93IHRpbWVk IG91dCwgYnV0IG5vdCB0aGUgam9iIHdlIHdhaXRlZCBmb3IuDQo+Pj4+Pj4NCj4+Pj4+PiBQbGVh c2UgdXNlIEVDQU5DRUxFRCBhcyB3ZWxsIG9yIHNvbWUgb3RoZXIgZXJyb3IgY29kZSB3aGVuIHdl IA0KPj4+Pj4+IGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGRpc3RpbmN0IHRoZSB0aW1lZG91dCBqb2Ig ZnJvbSB0aGUgY2FuY2VsZWQgDQo+Pj4+Pj4gb25lcyAocHJvYmFibHkgYSBnb29kIGlkZWEsIGJ1 dCBJJ20gbm90IHN1cmUpLg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICAzLkZpbmQgdGhlIGVudGl0 eS9jdHggYmVoaW5kIHRoaXMgam9iLCBhbmQgc2V0IHRoaXMgY3R4IA0KPj4+Pj4+IGFzIOKAnCpn dWlsdHkq4oCdDQo+Pj4+Pj4NCj4+Pj4+PiBOb3Qgc3VyZS4gRG8gd2Ugd2FudCB0byBzZXQgdGhl IHdob2xlIGNvbnRleHQgYXMgZ3VpbHR5IG9yIGp1c3QgDQo+Pj4+Pj4gdGhlIGVudGl0eT8NCj4+ Pj4+Pg0KPj4+Pj4+IFNldHRpbmcgdGhlIHdob2xlIGNvbnRleHRzIGFzIGd1aWx0eSBzb3VuZHMg cmFjeSB0byBtZS4NCj4+Pj4+Pg0KPj4+Pj4+IEJUVzogV2Ugc2hvdWxkIHVzZSBhIGRpZmZlcmVu dCBuYW1lIHRoYW4gImd1aWx0eSIsIG1heWJlIGp1c3QgDQo+Pj4+Pj4gImJvb2wgY2FuY2VsZWQ7 IiA/DQo+Pj4+Pj4NCj4+Pj4+PiAgICAgICAgIDQuS2ljayBvdXQgdGhpcyBqb2IgZnJvbSBzY2hl ZHVsZXLigJlzIG1pcnJvciBsaXN0LCBzbyB0aGlzIA0KPj4+Pj4+IGpvYiB3b27igJl0DQo+Pj4+ Pj4gICAgICAgICBnZXQgcmUtc2NoZWR1bGVkIHRvIHJpbmcgYW55bW9yZS4NCj4+Pj4+Pg0KPj4+ Pj4+IE9rYXkuDQo+Pj4+Pj4NCj4+Pj4+PiAgICAgICAgIDUuS2ljayBvdXQgYWxsIGpvYnMgaW4g dGhpcyDigJxndWlsdHnigJ0gY3R44oCZcyBLRklGTyBxdWV1ZSwgDQo+Pj4+Pj4gYW5kIHNldCBh bGwNCj4+Pj4+PiAgICAgICAgIHRoZWlyIGZlbmNlIHN0YXR1cyB0byDigJwqRUNBTkNFTEVEKuKA nQ0KPj4+Pj4+DQo+Pj4+Pj4gU2V0dGluZyBFQ0FOQ0VMRUQgc2hvdWxkIGJlIG9rLiBCdXQgSSB0 aGluayB3ZSBzaG91bGQgZG8gdGhpcyANCj4+Pj4+PiB3aGVuIHdlIHRyeSB0byBydW4gdGhlIGpv YnMgYW5kIG5vdCBkdXJpbmcgR1BVIHJlc2V0Lg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICA2LkZv cmNlIHNpZ25hbCBhbGwgZmVuY2VzIHRoYXQgZ2V0IGtpY2tlZCBvdXQgYnkgYWJvdmUgdHdvDQo+ Pj4+Pj4gICAgICAgICBzdGVwcywqb3RoZXJ3aXNlIFVNRCB3aWxsIGJsb2NrIGZvcmV2ZXIgaWYg d2FpdGluZyBvbiANCj4+Pj4+PiB0aG9zZQ0KPj4+Pj4+IGZlbmNlcyoNCj4+Pj4+Pg0KPj4+Pj4+ IE9rYXkuDQo+Pj4+Pj4NCj4+Pj4+PiAgICAgICAgIDcuRG8gZ3B1IHJlc2V0LCB3aGljaCBpcyBj YW4gYmUgc29tZSBjYWxsYmFja3MgdG8gbGV0IA0KPj4+Pj4+IGJhcmUtbWV0YWwgYW5kDQo+Pj4+ Pj4gICAgICAgICBTUi1JT1YgaW1wbGVtZW50IHdpdGggdGhlaXIgZmF2b3Igc3R5bGUNCj4+Pj4+ Pg0KPj4+Pj4+IE9rYXkuDQo+Pj4+Pj4NCj4+Pj4+PiAgICAgICAgIDguQWZ0ZXIgcmVzZXQsIEtN RCBuZWVkIHRvIGF3YXJlIGlmIHRoZSBWUkFNIGxvc3QgaGFwcGVucyANCj4+Pj4+PiBvciBub3Qs DQo+Pj4+Pj4gICAgICAgICBiYXJlLW1ldGFsIGNhbiBpbXBsZW1lbnQgc29tZSBmdW5jdGlvbiB0 byBqdWRnZSwgd2hpbGUgDQo+Pj4+Pj4gZm9yIFNSLUlPViBJDQo+Pj4+Pj4gICAgICAgICBwcmVm ZXIgdG8gcmVhZCBpdCBmcm9tIEdJTSBzaWRlIChmb3IgaW5pdGlhbCB2ZXJzaW9uIHdlIGNvbnNp ZGVyDQo+Pj4+Pj4gICAgICAgICBpdOKAmXMgYWx3YXlzIFZSQU0gbG9zdCwgdGlsbCBHSU0gc2lk ZSBjaGFuZ2UgYWxpZ25lZCkNCj4+Pj4+Pg0KPj4+Pj4+IE9rYXkuDQo+Pj4+Pj4NCj4+Pj4+PiAg ICAgICAgIDkuSWYgVlJBTSBsb3N0IG5vdCBoaXQsIGNvbnRpbnVlLCBvdGhlcndpc2U6DQo+Pj4+ Pj4NCj4+Pj4+PiAgICAgICAgIGEpVXBkYXRlIGFkZXYtPip2cmFtX2xvc3RfY291bnRlciosDQo+ Pj4+Pj4NCj4+Pj4+PiBPa2F5Lg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICBiKUl0ZXJhdGUgb3Zl ciBhbGwgbGl2aW5nIGN0eCwgYW5kIHNldCBhbGwgY3R4IGFzIOKAnCpndWlsdHkq4oCdDQo+Pj4+ Pj4gc2luY2UNCj4+Pj4+PiAgICAgICAgIFZSQU0gbG9zdCBhY3R1YWxseSBydWlucyBhbGwgVlJB TSBjb250ZW50cw0KPj4+Pj4+DQo+Pj4+Pj4gTm8sIHRoYXQgc2hvdWxkbid0IGJlIGRvbmUgYnkg Y29tcGFyaW5nIHRoZSBjb3VudGVycy4gSXRlcmF0aW5nIA0KPj4+Pj4+IG92ZXIgYWxsIGNvbnRl eHRzIGlzIHdheSB0byBtdWNoIG92ZXJoZWFkLg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICBjKUtp Y2sgb3V0IGFsbCBqb2JzIGluIGFsbCBjdHjigJlzIEtGSUZPIHF1ZXVlLCBhbmQgc2V0IGFsbCB0 aGVpcg0KPj4+Pj4+ICAgICAgICAgZmVuY2Ugc3RhdHVzIHRvIOKAnCpFQ0FOQ0VMREVEKuKAnQ0K Pj4+Pj4+DQo+Pj4+Pj4gWWVzIGFuZCBubywgdGhhdCBzaG91bGQgYmUgZG9uZSB3aGVuIHdlIHRy eSB0byBydW4gdGhlIGpvYnMgYW5kIA0KPj4+Pj4+IG5vdCBkdXJpbmcgR1BVIHJlc2V0Lg0KPj4+ Pj4+DQo+Pj4+Pj4gICAgICAgICAxMC5EbyBHVFQgcmVjb3ZlcnkgYW5kIFZSQU0gcGFnZSB0YWJs ZXMvZW50cmllcyByZWNvdmVyeSANCj4+Pj4+PiAob3B0aW9uYWwsDQo+Pj4+Pj4gICAgICAgICBk byB3ZSBuZWVkIGl0ID8/PykNCj4+Pj4+Pg0KPj4+Pj4+IFllcywgdGhhdCBpcyBzdGlsbCBuZWVk ZWQuIEFzIE5pY29sYWkgZXhwbGFpbmVkIHdlIGNhbid0IGJlIHN1cmUgDQo+Pj4+Pj4gdGhhdCBW UkFNIGlzIHN0aWxsIDEwMCUgY29ycmVjdCBldmVuIHdoZW4gaXQgaXNuJ3QgY2xlYXJlZC4NCj4+ Pj4+Pg0KPj4+Pj4+ICAgICAgICAgMTEuUmUtc2NoZWR1bGUgYWxsIEpPQnMgcmVtYWlucyBpbiBt aXJyb3IgbGlzdCB0byByaW5nIGFnYWluIGFuZA0KPj4+Pj4+ICAgICAgICAgcmVzdGFydCBzY2hl ZHVsZXIgKGZvciBWUkFNIGxvc3QgY2FzZSwgbm8gSk9CIHdpbGwNCj4+Pj4+PiByZS1zY2hlZHVs ZWQpDQo+Pj4+Pj4NCj4+Pj4+PiBPa2F5Lg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICA/Rm9yIGNz X3dhaXQoKSBJT0NUTDoNCj4+Pj4+Pg0KPj4+Pj4+ICAgICAgICAgQWZ0ZXIgaXQgZm91bmQgZmVu Y2Ugc2lnbmFsZWQsIGl0IHNob3VsZCBjaGVjayB3aXRoDQo+Pj4+Pj4gICAgICAgICAq4oCcZG1h X2ZlbmNlX2dldF9zdGF0dXPigJ0gKnRvIHNlZSBpZiB0aGVyZSBpcyBlcnJvciB0aGVyZSwNCj4+ Pj4+Pg0KPj4+Pj4+ICAgICAgICAgQW5kIHJldHVybiB0aGUgZXJyb3Igc3RhdHVzIG9mIGZlbmNl DQo+Pj4+Pj4NCj4+Pj4+PiBZZXMgYW5kIG5vLCBkbWFfZmVuY2VfZ2V0X3N0YXR1cygpIGlzIHNv bWUgc3BlY2lmaWMgaGFuZGxpbmcgZm9yIA0KPj4+Pj4+IHN5bmNfZmlsZSBkZWJ1Z2dpbmcgKG5v IGlkZWEgd2h5IHRoYXQgbWFkZSBpdCBpbnRvIHRoZSBjb21tb24gDQo+Pj4+Pj4gZmVuY2UgY29k ZSkuDQo+Pj4+Pj4NCj4+Pj4+PiBJdCB3YXMgcmVwbGFjZWQgYnkgcHV0dGluZyB0aGUgZXJyb3Ig Y29kZSBkaXJlY3RseSBpbnRvIHRoZSANCj4+Pj4+PiBmZW5jZSwgc28ganVzdCByZWFkaW5nIHRo YXQgb25lIGFmdGVyIHdhaXRpbmcgc2hvdWxkIGJlIG9rLg0KPj4+Pj4+DQo+Pj4+Pj4gTWF5YmUg d2Ugc2hvdWxkIGZpeCBkbWFfZmVuY2VfZ2V0X3N0YXR1cygpIHRvIGRvIHRoZSByaWdodCB0aGlu ZyANCj4+Pj4+PiBmb3IgdGhpcz8NCj4+Pj4+Pg0KPj4+Pj4+ICAgICAgICAgP0ZvciBjc193YWl0 X2ZlbmNlcygpIElPQ1RMOg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICBTaW1pbGFyIHdpdGggYWJv dmUgYXBwcm9hY2gNCj4+Pj4+Pg0KPj4+Pj4+ICAgICAgICAgP0ZvciBjc19zdWJtaXQoKSBJT0NU TDoNCj4+Pj4+Pg0KPj4+Pj4+ICAgICAgICAgSXQgbmVlZCB0byBjaGVjayBpZiBjdXJyZW50IGN0 eCBiZWVuIG1hcmtlZCBhcyDigJwqZ3VpbHR5KuKAnQ0KPj4+Pj4+IGFuZCByZXR1cm4NCj4+Pj4+ PiAgICAgICAgIOKAnCpFQ0FOQ0VMRUQq4oCdIGlmIHNvDQo+Pj4+Pj4NCj4+Pj4+PiAgICAgICAg ID9JbnRyb2R1Y2UgYSBuZXcgSU9DVEwgdG8gbGV0IFVNRCBxdWVyeSAqdnJhbV9sb3N0X2NvdW50 ZXIqOg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAgICBUaGlzIHdheSwgVU1EIGNhbiBhbHNvIGJsb2Nr IGFwcCBmcm9tIHN1Ym1pdHRpbmcsIGxpa2UgQE5pY29sYWkNCj4+Pj4+PiAgICAgICAgIG1lbnRp b25lZCwgd2UgY2FuIGNhY2hlIG9uZSBjb3B5IG9mICp2cmFtX2xvc3RfY291bnRlciogd2hlbg0K Pj4+Pj4+ICAgICAgICAgZW51bWVyYXRlIHBoeXNpY2FsIGRldmljZSwgYW5kIGRlbnkgYWxsDQo+ Pj4+Pj4NCj4+Pj4+PiAgICAgICAgIGdsLWNvbnRleHQgZnJvbSBzdWJtaXR0aW5nIGlmIHRoZSBj b3VudGVyIHF1ZXJpZWQgYmlnZ2VyIA0KPj4+Pj4+IHRoYW4gdGhhdA0KPj4+Pj4+ICAgICAgICAg b25lIGNhY2hlZCBpbiBwaHlzaWNhbCBkZXZpY2UuIChsb29rcyBhIGxpdHRsZSBvdmVya2lsbCAN Cj4+Pj4+PiB0byBtZSwgYnV0DQo+Pj4+Pj4gICAgICAgICBlYXN5IHRvIGltcGxlbWVudCApDQo+ Pj4+Pj4NCj4+Pj4+PiAgICAgICAgIFVNRCBjYW4gYWxzbyByZXR1cm4gZXJyb3IgdG8gQVBQIHdo ZW4gY3JlYXRpbmcgZ2wtY29udGV4dCANCj4+Pj4+PiBpZiBmb3VuZA0KPj4+Pj4+ICAgICAgICAg Y3VycmVudCBxdWVyaWVkKnZyYW1fbG9zdF9jb3VudGVyICpiaWdnZXIgdGhhbiB0aGF0IG9uZSAN Cj4+Pj4+PiBjYWNoZWQgaW4NCj4+Pj4+PiAgICAgICAgIHBoeXNpY2FsIGRldmljZS4NCj4+Pj4+ Pg0KPj4+Pj4+IE9rYXkuIEFscmVhZHkgaGF2ZSBhIHBhdGNoIGZvciB0aGlzLCBwbGVhc2UgcmV2 aWV3IHRoYXQgb25lIGlmIA0KPj4+Pj4+IHlvdSBoYXZlbid0IGFscmVhZHkgZG9uZSBzby4NCj4+ Pj4+Pg0KPj4+Pj4+IFJlZ2FyZHMsDQo+Pj4+Pj4gQ2hyaXN0aWFuLg0KPj4+Pj4+DQo+Pj4+Pj4g ICAgICAgICBCVFc6IEkgcmVhbGl6ZWQgdGhhdCBnbC1jb250ZXh0IGlzIGEgbGl0dGxlIGRpZmZl cmVudCANCj4+Pj4+PiB3aXRoIGtlcm5lbOKAmXMNCj4+Pj4+PiAgICAgICAgIGNvbnRleHQuIEJl Y2F1c2UgZm9yIGtlcm5lbC4gQk8gaXMgbm90IHJlbGF0ZWQgd2l0aCANCj4+Pj4+PiBjb250ZXh0 IGJ1dCBvbmx5DQo+Pj4+Pj4gICAgICAgICB3aXRoIEZELCB3aGlsZSBpbiBVTUQsIEJPIGhhdmUg YSBiYWNrZW5kDQo+Pj4+Pj4NCj4+Pj4+PiAgICAgICAgIGdsLWNvbnRleHQsIHNvIGJsb2NrIHN1 Ym1pdHRpbmcgaW4gVU1EIGxheWVyIGlzIGFsc28gDQo+Pj4+Pj4gbmVlZGVkIGFsdGhvdWdoDQo+ Pj4+Pj4gICAgICAgICBLTUQgd2lsbCBkbyBpdHMgam9iIGFzIGJvdHRvbSBsaW5lDQo+Pj4+Pj4N Cj4+Pj4+PiAgICAgICAgID9CYXNpY2FsbHkg4oCcdnJhbV9sb3N0X2NvdW50ZXLigJ0gaXMgZXhw b3N1cmUgYnkga2VybmVsIHRvIA0KPj4+Pj4+IGxldCBVTUQgdGFrZQ0KPj4+Pj4+ICAgICAgICAg dGhlIGNvbnRyb2wgb2Ygcm9idXN0IGV4dGVuc2lvbiBmZWF0dXJlLCBpdCB3aWxsIGJlIFVNROKA mXMgDQo+Pj4+Pj4gY2FsbCB0bw0KPj4+Pj4+ICAgICAgICAgbW92ZSwgS01EIG9ubHkgZGVueSDi gJxndWlsdHnigJ0gY29udGV4dCBmcm9tIHN1Ym1pdHRpbmcNCj4+Pj4+Pg0KPj4+Pj4+ICAgICAg ICAgTmVlZCB5b3VyIGZlZWRiYWNrLCB0aHgNCj4+Pj4+Pg0KPj4+Pj4+ICAgICAgICAgV2XigJlk IGJldHRlciBtYWtlIFREUiBmZWF0dXJlIGxhbmRlZCBBU0FQDQo+Pj4+Pj4NCj4+Pj4+PiAgICAg ICAgIEJSIE1vbmsNCj4+Pj4+Pg0KPj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXw0KPj4+PiBhbWQtZ2Z4IG1haWxpbmcgbGlzdA0KPj4+PiBhbWQtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPj4+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngNCj4NCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QNCj4gYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4DQoNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9hbWQtZ2Z4Cg==