From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Liu, Monk" Subject: RE: [PATCH 5/5] drm/amd/sched: signal and free remaining fences in amd_sched_entity_fini Date: Tue, 10 Oct 2017 04:00:26 +0000 Message-ID: References: <20170928145530.12844-1-nhaehnle@gmail.com> <20170928145530.12844-5-nhaehnle@gmail.com> <3032bef3-4829-8cae-199a-11353b38c49a@gmail.com> <11f21e54-16b8-68e4-c63e-d791ef8bbffa@gmail.com> <7e338e23-540c-4e2e-982f-f0eb623c75b1@amd.com> <760c1434-0739-81ff-82c3-a5210c5575d3@amd.com> <9619ebd2-f218-7568-3b24-0a9d2b008a6a@amd.com> <2f113fd3-ab4a-58b8-31d8-dc0a23751513@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <2f113fd3-ab4a-58b8-31d8-dc0a23751513-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US 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" , "Haehnle, Nicolai" , =?utf-8?B?Tmljb2xhaSBIw6Robmxl?= , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "Olsak, Marek" Cc: "Li, Bingley" V2hhdCBhYm91dCBiZWxvdyBwbGFuPw0KDQoxLCBFQ0FOQ0VMRUQgaXMgdXNlZCBmb3Iga2VybmVs IHRvIHJldHVybiBhbiBlcnJvciB1cG9uIGd1aWx0eSBjb250ZXh0IHN1Ym1pdHRpbmcgam9icywg SW4gb3JkZXIgdG8gcHJldmVudCBndWlsdHkgY29udGV4dCBmcm9tIHN1Ym1pdHRpbmcgYW55bW9y ZSAuLi4gb3IgcHJldmVudCBhbGwgY29udGV4dHMgZnJvbSBzdWJtaXR0aW5nIGlmIFZSQU0gbG9z dCBoYXBwZW5zIA0KMiwgRU5PREVWIGlzIHVzZWQgZm9yIGtlcm5lbCB0byByZXR1cm4gZXJyb3Ig aW4gY3Nfd2FpdC9mZW5jZXNfd2FpdCBJT0NUTCwgc28gVU1EIGNhbiBiZSBub3RpZmllZCB0aGF0 IHRoZSBmZW5jZSB0aGV5IGFyZSB3YWl0aW5nIG9uIHdpbGwgbmV2ZXIgYWNjb21wbGlzaGVkIGJ1 dCBqdXN0IGZha2Ugc2lnbmFsZWQgZHVlIHRvIEdQVSBoYW5nDQogIElmIHlvdSBndXlzIGFyZSBw aWNreSBvbiBFTk9ERVYsIG1heWJlIEVUSU1FL0VCQURGRCAgPz8NCg0KMywgRU5PREVWIGlzIHVz ZWQgZm9yIGtlcm5lbCB0byByZXR1cm4gZXJyb3IgaW4gYW1kZ3B1X2luZm9faW9jdGwgc28gVU1E IGNhbiBjYWxsIGluZm9faW9jdGwgdG8gYWNrbm93bGVkZ2UgdGhhdCB0aGUgR1BVIGlzIG5vdCB3 b3JrIGFueW1vcmUsIGFuZCBhZnRlciBHUFUgcmVzZXQgZG9uZSwgaW5mb19pb2N0bCBjYW4gd29y ayBhcyBleHBlY3RlZCANCiAgVXNlIGluZm9faW9jdGwgdGhlcmUgaXMgYmVjYXVzZSBpdCBkb2Vz bid0IG5lZWQgY29udGV4dCBhcyBpbnB1dCBwYXJhbWV0ZXIsIGJlY2F1c2UgZm9yIFZLIFVNRCBz b21ldGltZXMgaXQgd2FudCB0byBxdWVyeSBHUFUgaGVhbHRoeSBidXQgbm8gY29udGV4dCBvbiBo YW5kLCBvbmx5IHdpdGggRkQvREVWSUNFDQoNCg0KQlIgTW9uaw0KDQoNCg0KLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCkZyb206IEtvZW5pZywgQ2hyaXN0aWFuIA0KU2VudDogMjAxN+W5tDEw 5pyIOeaXpSAyMDozNA0KVG86IEhhZWhubGUsIE5pY29sYWkgPE5pY29sYWkuSGFlaG5sZUBhbWQu Y29tPjsgTGl1LCBNb25rIDxNb25rLkxpdUBhbWQuY29tPjsgTmljb2xhaSBIw6RobmxlIDxuaGFl aG5sZUBnbWFpbC5jb20+OyBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgT2xzYWssIE1h cmVrIDxNYXJlay5PbHNha0BhbWQuY29tPg0KQ2M6IExpLCBCaW5nbGV5IDxCaW5nbGV5LkxpQGFt ZC5jb20+DQpTdWJqZWN0OiBSZTogW1BBVENIIDUvNV0gZHJtL2FtZC9zY2hlZDogc2lnbmFsIGFu ZCBmcmVlIHJlbWFpbmluZyBmZW5jZXMgaW4gYW1kX3NjaGVkX2VudGl0eV9maW5pDQoNCkFtIDA5 LjEwLjIwMTcgdW0gMTM6Mjcgc2NocmllYiBOaWNvbGFpIEjDpGhubGU6DQo+IE9uIDA5LjEwLjIw MTcgMTM6MTIsIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6DQo+Pj4NCj4+Pj4gTmljb2xhaSwgaG93 IGhhcmQgd291bGQgaXQgYmUgdG8gaGFuZGxlIEVOT0RFViBhcyBmYWlsdXJlIGZvciBhbGwgDQo+ Pj4+IGN1cnJlbnRseSBleGlzdGluZyBjb250ZXh0cz8NCj4+Pg0KPj4+IEltcG9zc2libGU/ICJB bGwgY3VycmVudGx5IGV4aXN0aW5nIGNvbnRleHRzIiBpcyBub3QgYSB3ZWxsLWRlZmluZWQgDQo+ Pj4gY29uY2VwdCB3aGVuIG11bHRpcGxlIGRyaXZlcnMgY28tZXhpc3QgaW4gdGhlIHNhbWUgcHJv Y2Vzcy4NCj4+DQo+PiBPaywgbGV0IG1lIHJlZmluZSB0aGUgcXVlc3Rpb246IEkgYXNzdW1lIHRo ZXJlIGFyZSByZXNvdXJjZXMgInNoYXJlZCIgDQo+PiBiZXR3ZWVuIGNvbnRleHRzIGxpa2UgYmlu YXJ5IHNoYWRlciBjb2RlIGZvciBleGFtcGxlIHdoaWNoIG5lZWRzIHRvIA0KPj4gYmUgcmV1cGxv YWRlZCB3aGVuIFZSQU0gaXMgbG9zdC4NCj4+DQo+PiBIb3cgaGFyZCB3b3VsZCBpdCBiZSB0byBo YW5kbGUgdGhhdCBjb3JyZWN0bHk/DQo+DQo+IE9rYXksIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSA6 KQ0KPg0KPiBXaXRoIHRoZSBjdXJyZW50IGludGVyZmFjZSBpdCdzIHN0aWxsIHByZXR0eSBkaWZm aWN1bHQsIGJ1dCBpZiB3ZSANCj4gY291bGQgZ2V0IGEgbmV3IHBlci1kZXZpY2UgcXVlcnkgaW9j dGwgd2hpY2ggcmV0dXJucyBhICJWUkFNIGxvc3MgDQo+IGNvdW50ZXIiLCBpdCB3b3VsZCBiZSBy ZWFzb25hYmx5IHN0cmFpZ2h0LWZvcndhcmQuDQoNClRoZSBwcm9ibGVtIHdpdGggdGhlIFZSQU0g bG9zdCBjb3VudGVyIGlzIHRoYXQgdGhpcyBpc24ndCBzYXZlIGVpdGhlci4gDQpFLmcuIHlvdSBj b3VsZCBoYXZlIGFuIGFwcGxpY2F0aW9uIHdoaWNoIHVwbG9hZHMgc2hhZGVycywgYSBHUFUgcmVz ZXQgaGFwcGVucyBhbmQgVlJBTSBpcyBsb3N0IGFuZCB0aGVuIHRoZSBhcHBsaWNhdGlvbiBjcmVh dGVzIGEgbmV3IGNvbnRleHQgYW5kIG1ha2VzIHN1Ym1pc3Npb24gd2l0aCBicm9rZW4gc2hhZGVy IGJpbmFyaWVzLg0KDQpTbyBJIHdvdWxkIHN0aWxsIHZvdGUgZm9yIGEgc2VwYXJhdGUgSU9DVEwg dG8gcmVzZXQgdGhlIFZSQU0gbG9zdCBzdGF0ZSB3aGljaCBpcyBjYWxsZWQgKmJlZm9yZSIgdXNl ciBzcGFjZSBzdGFydHMgdG8gcmV1cGxvYWQgc2hhZGVyL2Rlc2NyaXB0b3JzIGV0Yy4uLg0KDQpU aGlzIHdheSB5b3UgYWxzbyBjYXRjaCB0aGUgY2FzZSB3aGVuIGFub3RoZXIgcmVzZXQgaGFwcGVu cyB3aGlsZSB5b3UgcmV1cGxvYWQgdGhpbmdzLg0KDQo+DQo+Pj4gQW5kIHdoYXQgd291bGQgYmUg dGhlIHB1cnBvc2Ugb2YgdGhpcz8gSWYgaXQncyB0byBzdXBwb3J0IFZSQU0gbG9zcywgDQo+Pj4g aGF2aW5nIGEgcGVyLWNvbnRleHQgVlJBTSBsb3NzIGNvdW50ZXIgd291bGQgZW5hYmxlIGVhY2gg Y29udGV4dCB0byANCj4+PiBzaWduYWwgRUNBTkNFTEVEIHNlcGFyYXRlbHkuDQo+Pg0KPj4gSSB0 aG91Z2h0IG9mIHRoYXQgb24gdG9wIG9mIHRoZSAtRU5PREVWIGhhbmRsaW5nLg0KPj4NCj4+IElu IG90aGVyIHdvcmRzIHdoZW4gd2Ugc2VlIC1FTk9ERVYgd2UgY2FsbCBhbiBJT0NUTCB0byBsZXQg dGhlIGtlcm5lbCANCj4+IGtub3cgd2Ugbm90aWNlZCB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZyBh bmQgdGhlbiByZWluaXQgYWxsIHNoYXJlZCANCj4+IHJlc291cmNlcyBpbiB1c2Vyc3BhY2UuDQo+ Pg0KPj4gQWxsIGV4aXN0aW5nIGNvbnRleHQgd2lsbCBzdGlsbCBzZWUgLUVDQU5DRUxFRCB3aGVu IHdlIGRyb3AgdGhlaXIgDQo+PiBjb21tYW5kIHN1Ym1pc3Npb24sIGJ1dCBuZXcgY29udGV4dHMg d291bGQgYXQgbGVhc3Qgbm90IGNhdXNlIGEgbmV3IA0KPj4gbG9ja3VwIGltbWVkaWF0ZWx5IGJl Y2F1c2UgdGhlaXIgc2hhZGVyIGJpbmFyaWVzIGFyZSBjb3JydXB0ZWQuDQo+DQo+IEkgZG9uJ3Qg dGhpbmsgd2UgbmVlZCAtRU5PREVWIGZvciB0aGlzLiBXZSBqdXN0IG5lZWQgLUVDQU5DRUxFRCB0 byBiZSANCj4gcmV0dXJuZWQgd2hlbiBhIHN1Ym1pc3Npb24gaXMgcmVqZWN0ZWQgZHVlIHRvIHJl c2V0IChoYW5nIG9yIFZSQU0gbG9zcykuDQo+DQo+IE1lc2Egd291bGQga2VlcCBhIHNoYWRvdyBv ZiB0aGUgVlJBTSBsb3NzIGNvdW50ZXIgaW4gcGlwZV9zY3JlZW4gYW5kIA0KPiBwaXBlX2NvbnRl eHQsIGFuZCBxdWVyeSB0aGUga2VybmVsJ3MgY291bnRlciB3aGVuIGl0IGVuY291bnRlcnMgDQo+ IC1FQ0FOQ0VMRUQuIEVhY2ggY29udGV4dCB3b3VsZCB0aGVuIGtub3cgdG8gZHJvcCB0aGUgQ1Mg aXQncyBidWlsdCB1cCANCj4gc28gZmFyIGFuZCByZXN0YXJ0IGJhc2VkIG9uIGNvbXBhcmluZyB0 aGUgVlJBTSBsb3NzIGNvdW50ZXIgb2YgDQo+IHBpcGVfc2NyZWVuIHRvIHRoYXQgb2YgcGlwZV9j b250ZXh0LCBhbmQgc2ltaWxhcmx5IHdlIGNvdWxkIGtlZXAgYSANCj4gY29weSBvZiB0aGUgVlJB TSBsb3NzIGNvdW50ZXIgZm9yIGltcG9ydGFudCBidWZmZXIgb2JqZWN0cyBsaWtlIHNoYWRlciAN Cj4gYmluYXJpZXMsIGRlc2NyaXB0b3JzLCBldGMuDQo+DQo+IFRoaXMgc2VlbXMgbW9yZSByb2J1 c3QgdG8gbWUgdGhhbiByZWx5aW5nIG9ubHkgb24gYW4gRU5PREVWLiBXZSdkIG1vc3QgDQo+IGxp a2VseSBrZWVwIHNvbWUga2luZCBvZiBWUkFNIGxvc3MgY291bnRlciBpbiBNZXNhICphbnl3YXkq ICh3ZSBkb24ndCANCj4gbWFpbnRhaW4gYSBsaXN0IG9mIGFsbCBzaGFkZXJzLCBmb3IgZXhhbXBs ZSwgYW5kIHdlIGNhbid0IG51a2UgDQo+IGltcG9ydGFudCBwZXItY29udGV4dCBhY3Jvc3MgdGhy ZWFkcyksIGFuZCBzeW50aGVzaXppbmcgc3VjaCBhIGNvdW50ZXIgDQo+IGZyb20gRU5PREVWcyBp cyBub3QgcGFydGljdWxhcmx5IHJvYnVzdCAod2hhdCBpZiBtdWx0aXBsZSBFTk9ERVZzIA0KPiBv Y2N1ciBmb3IgdGhlIHNhbWUgbG9zcyBldmVudD8pLg0KPg0KPiBCVFcsIEkgc3RpbGwgZG9uJ3Qg bGlrZSBFTk9ERVYuIEl0IHNlZW1zIG1vcmUgbGlrZSB0aGUga2luZCBvZiBlcnJvciANCj4gY29k ZSB5b3UnZCByZXR1cm4gd2l0aCBob3QtcGx1Z2dhYmxlIEdQVXMgd2hlcmUgdGhlIGRldmljZSBj YW4gDQo+IHBoeXNpY2FsbHkgZGlzYXBwZWFyLi4uDQoNClllYWgsIEVDQU5DRUxFRCBzb3VuZHMg bGlrZSBhIGJldHRlciBhbHRlcm5hdGl2ZS4gQnV0IEkgdGhpbmsgd2Ugc2hvdWxkIHN0aWxsIHNv bWVob3cgbm90ZSB0aGUgZmF0YWxpdHkgb2YgbG9vc2luZyBWUkFNIHRvIHVzZXJzcGFjZS4NCg0K SG93IGFib3V0IEVOT0RBVEEgb3IgRUJBREZEPw0KDQpSZWdhcmRzLA0KQ2hyaXN0aWFuLg0KDQo+ DQo+IENoZWVycywNCj4gTmljb2xhaQ0KPg0KPg0KPj4NCj4+IFJlZ2FyZHMsDQo+PiBDaHJpc3Rp YW4uDQo+Pg0KPj4gQW0gMDkuMTAuMjAxNyB1bSAxMzowNCBzY2hyaWViIE5pY29sYWkgSMOkaG5s ZToNCj4+PiBPbiAwOS4xMC4yMDE3IDEyOjU5LCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOg0KPj4+ PiBOaWNvbGFpLCBob3cgaGFyZCB3b3VsZCBpdCBiZSB0byBoYW5kbGUgRU5PREVWIGFzIGZhaWx1 cmUgZm9yIGFsbCANCj4+Pj4gY3VycmVudGx5IGV4aXN0aW5nIGNvbnRleHRzPw0KPj4+DQo+Pj4g SW1wb3NzaWJsZT8gIkFsbCBjdXJyZW50bHkgZXhpc3RpbmcgY29udGV4dHMiIGlzIG5vdCBhIHdl bGwtZGVmaW5lZCANCj4+PiBjb25jZXB0IHdoZW4gbXVsdGlwbGUgZHJpdmVycyBjby1leGlzdCBp biB0aGUgc2FtZSBwcm9jZXNzLg0KPj4+DQo+Pj4gQW5kIHdoYXQgd291bGQgYmUgdGhlIHB1cnBv c2Ugb2YgdGhpcz8gSWYgaXQncyB0byBzdXBwb3J0IFZSQU0gbG9zcywgDQo+Pj4gaGF2aW5nIGEg cGVyLWNvbnRleHQgVlJBTSBsb3NzIGNvdW50ZXIgd291bGQgZW5hYmxlIGVhY2ggY29udGV4dCB0 byANCj4+PiBzaWduYWwgRUNBTkNFTEVEIHNlcGFyYXRlbHkuDQo+Pj4NCj4+PiBDaGVlcnMsDQo+ Pj4gTmljb2xhaQ0KPj4+DQo+Pj4NCj4+Pj4NCj4+Pj4gTW9uaywgd291bGQgaXQgYmUgb2sgd2l0 aCB5b3Ugd2hlbiB3ZSByZXR1cm4gRU5PREVWIG9ubHkgZm9yIA0KPj4+PiBleGlzdGluZyBjb250 ZXh0IHdoZW4gVlJBTSBpcyBsb3N0IGFuZC9vciB3ZSBoYXZlIGEgc3RyaWN0IG1vZGUgR1BVIA0K Pj4+PiByZXNldD8gRS5nLiBuZXdseSBjcmVhdGVkIGNvbnRleHRzIHdvdWxkIGNvbnRpbnVlIHdv cmsgYXMgdGhleSBzaG91bGQuDQo+Pj4+DQo+Pj4+IFJlZ2FyZHMsDQo+Pj4+IENocmlzdGlhbi4N Cj4+Pj4NCj4+Pj4gQW0gMDkuMTAuMjAxNyB1bSAxMjo0OSBzY2hyaWViIE5pY29sYWkgSMOkaG5s ZToNCj4+Pj4+IEhpIE1vbmssDQo+Pj4+Pg0KPj4+Pj4gWWVzLCB5b3UncmUgcmlnaHQsIHdlJ3Jl IG9ubHkgdXNpbmcgRUNBTkNFTEVEIGludGVybmFsbHkuIEJ1dCBhcyBhIA0KPj4+Pj4gY29uc2Vx dWVuY2UsIE1lc2Egd291bGQgYWxyZWFkeSBoYW5kbGUgYSBrZXJuZWwgZXJyb3Igb2YgRUNBTkNF TEVEIA0KPj4+Pj4gb24gY29udGV4dCBsb3NzIGNvcnJlY3RseSA6KQ0KPj4+Pj4NCj4+Pj4+IENo ZWVycywNCj4+Pj4+IE5pY29sYWkNCj4+Pj4+DQo+Pj4+PiBPbiAwOS4xMC4yMDE3IDEyOjM1LCBM aXUsIE1vbmsgd3JvdGU6DQo+Pj4+Pj4gSGkgQ2hyaXN0aWFuDQo+Pj4+Pj4NCj4+Pj4+PiBZb3Ug cmVqZWN0IHNvbWUgb2YgbXkgcGF0Y2hlcyB0aGF0IHJldHVybnMgLUVOT0RFViwgd2l0aCB0aGUg DQo+Pj4+Pj4gY2F1c2UgdGhhdCBNRVNBIGRvZXNuJ3QgZG8gdGhlIGhhbmRsaW5nIG9uIC1FTk9E RVYNCj4+Pj4+Pg0KPj4+Pj4+IEJ1dCBpZiBOaWNvbGFpIGNhbiBjb25maXJtIHRoYXQgTUVTQSBk byBoYXZlIGEgaGFuZGxpbmcgb24gDQo+Pj4+Pj4gLUVDQU5DRUxFRCwgdGhlbiB3ZSBuZWVkIHRv IG92ZXJhbGwgYWxpZ24gb3VyIGVycm9yIGNvZGUsIG9uIA0KPj4+Pj4+IGRldGFpbCBiZWxvdyBJ T0NUTCBjYW4gcmV0dXJuIGVycm9yIGNvZGU6DQo+Pj4+Pj4NCj4+Pj4+PiBBbWRncHVfY3NfaW9j dGwNCj4+Pj4+PiBBbWRncHVfY3Nfd2FpdF9pb2N0bA0KPj4+Pj4+IEFtZGdwdV9jc193YWl0X2Zl bmNlc19pb2N0bA0KPj4+Pj4+IEFtZGdwdV9pbmZvX2lvY3RsDQo+Pj4+Pj4NCj4+Pj4+Pg0KPj4+ Pj4+IE15IHBhdGNoZXMgaXM6DQo+Pj4+Pj4gcmV0dXJuIC1FTk9ERVYgb24gY3NfaW9jdGwgaWYg dGhlIGNvbnRleHQgaXMgZGV0ZWN0ZWQgZ3VpbHR5LCANCj4+Pj4+PiBhbHNvIHJldHVybiAtRU5P REVWIG9uIGNzX3dhaXR8Y3Nfd2FpdF9mZW5jZXMgaWYgdGhlIGZlbmNlIGlzIA0KPj4+Pj4+IHNp Z25hbGVkIGJ1dCB3aXRoIGVycm9yIC1FVElNRSwgYWxzbyByZXR1cm4gLUVOT0RFViBvbiBpbmZv X2lvY3RsIA0KPj4+Pj4+IHNvIFVNRCBjYW4gcXVlcnkgaWYgZ3B1IHJlc2V0IGhhcHBlbmVkIGFm dGVyIHRoZSBwcm9jZXNzIGNyZWF0ZWQgDQo+Pj4+Pj4gKGJlY2F1c2UgZm9yIHN0cmljdCBtb2Rl IHdlIGJsb2NrIHByb2Nlc3MgaW5zdGVhZCBvZiBjb250ZXh0KQ0KPj4+Pj4+DQo+Pj4+Pj4NCj4+ Pj4+PiBhY2NvcmRpbmcgdG8gTmljb2xhaToNCj4+Pj4+Pg0KPj4+Pj4+IGFtZGdwdV9jc19pb2N0 bCAqY2FuKiByZXR1cm4gLUVDQU5DRUxFRCwgYnV0IHRvIGJlIGZyYW5rbHkgDQo+Pj4+Pj4gc3Bl YWtpbmcsIGtlcm5lbCBwYXJ0IGRvZXNuJ3QgaGF2ZSBhbnkgcGxhY2Ugd2l0aCAiLUVDQU5DRUxF RCIgc28gDQo+Pj4+Pj4gdGhpcyBzb2x1dGlvbiBvbiBNRVNBIHNpZGUgZG9lc24ndCBhbGlnbiB3 aXRoICpjdXJyZW50KiBhbWRncHUgDQo+Pj4+Pj4gZHJpdmVyLCB3aGljaCBvbmx5IHJldHVybiAw IG9uIHN1Y2Nlc3Mgb3IgLUVJTlZBTElEIG9uIG90aGVyIA0KPj4+Pj4+IGVycm9yIGJ1dCBkZWZp bml0ZWx5IG5vICItRUNBTkNFTEVEIiBlcnJvciBjb2RlLA0KPj4+Pj4+DQo+Pj4+Pj4gc28gaWYg d2UgdGFsa2luZyBhYm91dCBjb21tdW5pdHkgcnVsZXMgd2Ugc2hvdWxkbid0IGxldCBNRVNBIA0K Pj4+Pj4+IGhhbmRsZSAtRUNBTkNFTEVEICwgIHdlIHNob3VsZCBoYXZlIGEgdW5pZmllZCBlcnJv ciBjb2RlDQo+Pj4+Pj4NCj4+Pj4+PiArIE1hcmVrDQo+Pj4+Pj4NCj4+Pj4+PiBCUiBNb25rDQo+ Pj4+Pj4NCj4+Pj4+Pg0KPj4+Pj4+DQo+Pj4+Pj4NCj4+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPj4+Pj4+IEZyb206IEhhZWhubGUsIE5pY29sYWkNCj4+Pj4+PiBTZW50OiAyMDE3 5bm0MTDmnIg55pelIDE4OjE0DQo+Pj4+Pj4gVG86IEtvZW5pZywgQ2hyaXN0aWFuIDxDaHJpc3Rp YW4uS29lbmlnQGFtZC5jb20+OyBMaXUsIE1vbmsgDQo+Pj4+Pj4gPE1vbmsuTGl1QGFtZC5jb20+ OyBOaWNvbGFpIEjDpGhubGUgPG5oYWVobmxlQGdtYWlsLmNvbT47IA0KPj4+Pj4+IGFtZC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+Pj4+Pj4gU3ViamVjdDogUmU6IFtQQVRDSCA1LzVdIGRy bS9hbWQvc2NoZWQ6IHNpZ25hbCBhbmQgZnJlZSByZW1haW5pbmcgDQo+Pj4+Pj4gZmVuY2VzIGlu IGFtZF9zY2hlZF9lbnRpdHlfZmluaQ0KPj4+Pj4+DQo+Pj4+Pj4gT24gMDkuMTAuMjAxNyAxMDow MiwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToNCj4+Pj4+Pj4+IEZvciBncHUgcmVzZXQgcGF0Y2hl cyAoYWxyZWFkeSBzdWJtaXR0ZWQgdG8gcHViKSBJIHdvdWxkIG1ha2UgDQo+Pj4+Pj4+PiBrZXJu ZWwgcmV0dXJuIC1FTk9ERVYgaWYgdGhlIHdhaXRpbmcgZmVuY2UgKGluIGNzX3dhaXQgb3IgDQo+ Pj4+Pj4+PiB3YWl0X2ZlbmNlcw0KPj4+Pj4+Pj4gSU9DVEwpDQo+Pj4+Pj4+PiBmb3VuZGVkIGFz IGVycm9yLCB0aGF0IHdheSBVTUQgd291bGQgcnVuIGludG8gcm9idXN0IGV4dGVuc2lvbiANCj4+ Pj4+Pj4+IHBhdGggYW5kIGNvbnNpZGVyaW5nIHRoZSBHUFUgaGFuZyBvY2N1cnJlZCwNCj4+Pj4+ Pj4gV2VsbCB0aGF0IGlzIG9ubHkgY2xvc2VkIHNvdXJjZSBiZWhhdmlvciB3aGljaCBpcyBjb21w bGV0ZWx5IA0KPj4+Pj4+PiBpcnJlbGV2YW50IGZvciB1cHN0cmVhbSBkZXZlbG9wbWVudC4NCj4+ Pj4+Pj4NCj4+Pj4+Pj4gQXMgZmFyIGFzIEkga25vdyB3ZSBoYXZlbid0IHB1c2hlZCB0aGUgY2hh bmdlIHRvIHJldHVybiAtRU5PREVWIA0KPj4+Pj4+PiB1cHN0cmVhbS4NCj4+Pj4+Pg0KPj4+Pj4+ IEZXSVcsIHJhZGVvbnNpIGN1cnJlbnRseSBleHBlY3RzIC1FQ0FOQ0VMRUQgb24gQ1Mgc3VibWlz c2lvbnMgYW5kIA0KPj4+Pj4+IHRyZWF0cyB0aG9zZSBhcyBjb250ZXh0IGxvc3QuIFBlcmhhcHMg d2UgY291bGQgdXNlIHRoZSBzYW1lIGVycm9yIA0KPj4+Pj4+IG9uIGZlbmNlcz8NCj4+Pj4+PiBU aGF0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gbWUgdGhhbiAtRU5PREVWLg0KPj4+Pj4+DQo+Pj4+Pj4g Q2hlZXJzLA0KPj4+Pj4+IE5pY29sYWkNCj4+Pj4+Pg0KPj4+Pj4+Pg0KPj4+Pj4+PiBSZWdhcmRz LA0KPj4+Pj4+PiBDaHJpc3RpYW4uDQo+Pj4+Pj4+DQo+Pj4+Pj4+IEFtIDA5LjEwLjIwMTcgdW0g MDg6NDIgc2NocmllYiBMaXUsIE1vbms6DQo+Pj4+Pj4+PiBDaHJpc3RpYW4NCj4+Pj4+Pj4+DQo+ Pj4+Pj4+Pj4gSXQgd291bGQgYmUgcmVhbGx5IG5pY2UgdG8gaGF2ZSBhbiBlcnJvciBjb2RlIHNl dCBvbiANCj4+Pj4+Pj4+PiBzX2ZlbmNlLT5maW5pc2hlZCBiZWZvcmUgaXQgaXMgc2lnbmFsZWQs IHVzZQ0KPj4+Pj4+Pj4+IGRtYV9mZW5jZV9zZXRfZXJyb3IoKQ0KPj4+Pj4+Pj4+IGZvciB0aGlz Lg0KPj4+Pj4+Pj4gRm9yIGdwdSByZXNldCBwYXRjaGVzIChhbHJlYWR5IHN1Ym1pdHRlZCB0byBw dWIpIEkgd291bGQgbWFrZSANCj4+Pj4+Pj4+IGtlcm5lbCByZXR1cm4gLUVOT0RFViBpZiB0aGUg d2FpdGluZyBmZW5jZSAoaW4gY3Nfd2FpdCBvciANCj4+Pj4+Pj4+IHdhaXRfZmVuY2VzDQo+Pj4+ Pj4+PiBJT0NUTCkNCj4+Pj4+Pj4+IGZvdW5kZWQgYXMgZXJyb3IsIHRoYXQgd2F5IFVNRCB3b3Vs ZCBydW4gaW50byByb2J1c3QgZXh0ZW5zaW9uIA0KPj4+Pj4+Pj4gcGF0aCBhbmQgY29uc2lkZXJp bmcgdGhlIEdQVSBoYW5nIG9jY3VycmVkLA0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IERvbid0IGtub3cg aWYgdGhpcyBpcyBleHBlY3RlZCBmb3IgdGhlIGNhc2Ugb2Ygbm9ybWFsIHByb2Nlc3MgDQo+Pj4+ Pj4+PiBiZWluZyBraWxsZWQgb3IgY3Jhc2hlZCBsaWtlIE5pY29sYWkgaGl0IC4uLiBzaW5jZSB0 aGVyZSBpcyBubyANCj4+Pj4+Pj4+IGdwdSBoYW5nIGhpdA0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+DQo+ Pj4+Pj4+PiBCUiBNb25rDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+Pg0K Pj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+Pj4+Pj4+IEZyb206IGFtZC1n ZnggW21haWx0bzphbWQtZ2Z4LWJvdW5jZXNAbGlzdHMuZnJlZWRlc2t0b3Aub3JnXSBPbg0KPj4+ Pj4+Pj4gQmVoYWxmIE9mIENocmlzdGlhbiBLP25pZw0KPj4+Pj4+Pj4gU2VudDogMjAxN+W5tDnm nIgyOOaXpSAyMzowMQ0KPj4+Pj4+Pj4gVG86IE5pY29sYWkgSMOkaG5sZSA8bmhhZWhubGVAZ21h aWwuY29tPjsNCj4+Pj4+Pj4+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+Pj4+Pj4+ PiBDYzogSGFlaG5sZSwgTmljb2xhaSA8Tmljb2xhaS5IYWVobmxlQGFtZC5jb20+DQo+Pj4+Pj4+ PiBTdWJqZWN0OiBSZTogW1BBVENIIDUvNV0gZHJtL2FtZC9zY2hlZDogc2lnbmFsIGFuZCBmcmVl IHJlbWFpbmluZw0KPj4+Pj4+Pj4gZmVuY2VzIGluIGFtZF9zY2hlZF9lbnRpdHlfZmluaQ0KPj4+ Pj4+Pj4NCj4+Pj4+Pj4+IEFtIDI4LjA5LjIwMTcgdW0gMTY6NTUgc2NocmllYiBOaWNvbGFpIEjD pGhubGU6DQo+Pj4+Pj4+Pj4gRnJvbTogTmljb2xhaSBIw6RobmxlIDxuaWNvbGFpLmhhZWhubGVA YW1kLmNvbT4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IEhpZ2hseSBjb25jdXJyZW50IFBpZ2xpdCBy dW5zIGNhbiB0cmlnZ2VyIGEgcmFjZSBjb25kaXRpb24gDQo+Pj4+Pj4+Pj4gd2hlcmUgYQ0KPj4+ Pj4+Pj4+IHBlbmRpbmcgU0RNQSBqb2Igb24gYSBidWZmZXIgb2JqZWN0IGlzIG5ldmVyIGV4ZWN1 dGVkIGJlY2F1c2UgdGhlDQo+Pj4+Pj4+Pj4gY29ycmVzcG9uZGluZyBwcm9jZXNzIGlzIGtpbGxl ZCAocGVyaGFwcyBkdWUgdG8gYSBjcmFzaCkuIA0KPj4+Pj4+Pj4+IFNpbmNlIHRoZQ0KPj4+Pj4+ Pj4+IGpvYidzIGZlbmNlcyB3ZXJlIG5ldmVyIHNpZ25hbGVkLCB0aGUgYnVmZmVyIG9iamVjdCB3 YXMgDQo+Pj4+Pj4+Pj4gZWZmZWN0aXZlbHkNCj4+Pj4+Pj4+PiBsZWFrZWQuIFdvcnNlLCB0aGUg YnVmZmVyIHdhcyBzdHVjayB3aGVyZXZlciBpdCBoYXBwZW5lZCB0byBiZSBhdA0KPj4+Pj4+Pj4+ IHRoZSB0aW1lLCBwb3NzaWJseSBpbiBWUkFNLg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gVGhlIHN5 bXB0b20gd2FzIHVzZXIgc3BhY2UgcHJvY2Vzc2VzIHN0dWNrIGluIGludGVycnVwdGlibGUgd2Fp dHMNCj4+Pj4+Pj4+PiB3aXRoIGtlcm5lbCBzdGFja3MgbGlrZToNCj4+Pj4+Pj4+Pg0KPj4+Pj4+ Pj4+ICAgICAgICBbPGZmZmZmZmZmYmM1ZTY3MjI+XSBkbWFfZmVuY2VfZGVmYXVsdF93YWl0KzB4 MTEyLzB4MjUwDQo+Pj4+Pj4+Pj4gICAgICAgIFs8ZmZmZmZmZmZiYzVlNjM5OT5dIGRtYV9mZW5j ZV93YWl0X3RpbWVvdXQrMHgzOS8weGYwDQo+Pj4+Pj4+Pj4gICAgICAgIFs8ZmZmZmZmZmZiYzVl ODJkMj5dDQo+Pj4+Pj4+Pj4gcmVzZXJ2YXRpb25fb2JqZWN0X3dhaXRfdGltZW91dF9yY3UrMHgx YzIvMHgzMDANCj4+Pj4+Pj4+PiAgICAgICAgWzxmZmZmZmZmZmMwM2NlNTZmPl0gDQo+Pj4+Pj4+ Pj4gdHRtX2JvX2NsZWFudXBfcmVmc19hbmRfdW5sb2NrKzB4ZmYvMHgxYTANCj4+Pj4+Pj4+PiBb dHRtXQ0KPj4+Pj4+Pj4+ICAgICAgICBbPGZmZmZmZmZmYzAzY2YxZWE+XSB0dG1fbWVtX2V2aWN0 X2ZpcnN0KzB4YmEvMHgxYTAgW3R0bV0NCj4+Pj4+Pj4+PiAgICAgICAgWzxmZmZmZmZmZmMwM2Nm NjExPl0gdHRtX2JvX21lbV9zcGFjZSsweDM0MS8weDRjMCBbdHRtXQ0KPj4+Pj4+Pj4+ICAgICAg ICBbPGZmZmZmZmZmYzAzY2ZjNTQ+XSB0dG1fYm9fdmFsaWRhdGUrMHhkNC8weDE1MCBbdHRtXQ0K Pj4+Pj4+Pj4+ICAgICAgICBbPGZmZmZmZmZmYzAzY2ZmYmQ+XSB0dG1fYm9faW5pdF9yZXNlcnZl ZCsweDJlZC8weDQyMCANCj4+Pj4+Pj4+PiBbdHRtXQ0KPj4+Pj4+Pj4+ICAgICAgICBbPGZmZmZm ZmZmYzA0MmY1MjM+XSANCj4+Pj4+Pj4+PiBhbWRncHVfYm9fY3JlYXRlX3Jlc3RyaWN0ZWQrMHgx ZjMvMHg0NzANCj4+Pj4+Pj4+PiBbYW1kZ3B1XQ0KPj4+Pj4+Pj4+ICAgICAgICBbPGZmZmZmZmZm YzA0MmY5ZmE+XSBhbWRncHVfYm9fY3JlYXRlKzB4ZGEvMHgyMjAgW2FtZGdwdV0NCj4+Pj4+Pj4+ PiAgICAgICAgWzxmZmZmZmZmZmMwNDM0OWVhPl0gYW1kZ3B1X2dlbV9vYmplY3RfY3JlYXRlKzB4 YWEvMHgxNDANCj4+Pj4+Pj4+PiBbYW1kZ3B1XQ0KPj4+Pj4+Pj4+ICAgICAgICBbPGZmZmZmZmZm YzA0MzRmOTc+XSBhbWRncHVfZ2VtX2NyZWF0ZV9pb2N0bCsweDk3LzB4MTIwDQo+Pj4+Pj4+Pj4g W2FtZGdwdV0NCj4+Pj4+Pj4+PiAgICAgICAgWzxmZmZmZmZmZmMwMzdkZGJhPl0gZHJtX2lvY3Rs KzB4MWZhLzB4NDgwIFtkcm1dDQo+Pj4+Pj4+Pj4gICAgICAgIFs8ZmZmZmZmZmZjMDQxOTA0Zj5d IGFtZGdwdV9kcm1faW9jdGwrMHg0Zi8weDkwIFthbWRncHVdDQo+Pj4+Pj4+Pj4gICAgICAgIFs8 ZmZmZmZmZmZiYzIzZGIzMz5dIGRvX3Zmc19pb2N0bCsweGEzLzB4NWYwDQo+Pj4+Pj4+Pj4gICAg ICAgIFs8ZmZmZmZmZmZiYzIzZTBmOT5dIFN5U19pb2N0bCsweDc5LzB4OTANCj4+Pj4+Pj4+PiAg ICAgICAgWzxmZmZmZmZmZmJjODY0ZmZiPl0gZW50cnlfU1lTQ0FMTF82NF9mYXN0cGF0aCsweDFl LzB4YWQNCj4+Pj4+Pj4+PiAgICAgICAgWzxmZmZmZmZmZmZmZmZmZmZmPl0gMHhmZmZmZmZmZmZm ZmZmZmZmDQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBOaWNvbGFpIEjDpGhu bGUgPG5pY29sYWkuaGFlaG5sZUBhbWQuY29tPg0KPj4+Pj4+Pj4+IEFja2VkLWJ5OiBDaHJpc3Rp YW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+DQo+Pj4+Pj4+Pj4gLS0tDQo+Pj4+ Pj4+Pj4gICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL2dwdV9zY2hlZHVsZXIuYyB8 IDcgKysrKysrLQ0KPj4+Pj4+Pj4+ICAgICAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pDQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9zY2hlZHVsZXIvZ3B1X3NjaGVkdWxlci5jDQo+Pj4+Pj4+Pj4gYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL3NjaGVkdWxlci9ncHVfc2NoZWR1bGVyLmMNCj4+Pj4+Pj4+PiBpbmRl eCA1NGViNzdjZmZkOWIuLjMyYTk5ZTk4MGQ3OCAxMDA2NDQNCj4+Pj4+Pj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL3NjaGVkdWxlci9ncHVfc2NoZWR1bGVyLmMNCj4+Pj4+Pj4+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL3NjaGVkdWxlci9ncHVfc2NoZWR1bGVyLmMNCj4+Pj4+Pj4+ PiBAQCAtMjIwLDIyICsyMjAsMjcgQEAgdm9pZCBhbWRfc2NoZWRfZW50aXR5X2Zpbmkoc3RydWN0 DQo+Pj4+Pj4+Pj4gYW1kX2dwdV9zY2hlZHVsZXIgKnNjaGVkLA0KPj4+Pj4+Pj4+IGFtZF9zY2hl ZF9lbnRpdHlfaXNfaWRsZShlbnRpdHkpKTsNCj4+Pj4+Pj4+PiAgICAgICAgIGFtZF9zY2hlZF9y cV9yZW1vdmVfZW50aXR5KHJxLCBlbnRpdHkpOw0KPj4+Pj4+Pj4+ICAgICAgICAgaWYgKHIpIHsN Cj4+Pj4+Pj4+PiAgICAgICAgICAgICBzdHJ1Y3QgYW1kX3NjaGVkX2pvYiAqam9iOw0KPj4+Pj4+ Pj4+ICAgICAgICAgICAgIC8qIFBhcmsgdGhlIGtlcm5lbCBmb3IgYSBtb21lbnQgdG8gbWFrZSBz dXJlIGl0IGlzbid0DQo+Pj4+Pj4+Pj4gcHJvY2Vzc2luZw0KPj4+Pj4+Pj4+ICAgICAgICAgICAg ICAqIG91ciBlbml0eS4NCj4+Pj4+Pj4+PiAgICAgICAgICAgICAgKi8NCj4+Pj4+Pj4+PiAgICAg ICAgICAgICBrdGhyZWFkX3Bhcmsoc2NoZWQtPnRocmVhZCk7DQo+Pj4+Pj4+Pj4gICAgICAgICAg ICAga3RocmVhZF91bnBhcmsoc2NoZWQtPnRocmVhZCk7DQo+Pj4+Pj4+Pj4gLSAgICAgICAgd2hp bGUgKGtmaWZvX291dCgmZW50aXR5LT5qb2JfcXVldWUsICZqb2IsIHNpemVvZihqb2IpKSkNCj4+ Pj4+Pj4+PiArICAgICAgICB3aGlsZSAoa2ZpZm9fb3V0KCZlbnRpdHktPmpvYl9xdWV1ZSwgJmpv YiwgDQo+Pj4+Pj4+Pj4gc2l6ZW9mKGpvYikpKSB7DQo+Pj4+Pj4+Pj4gKyAgICAgICAgICAgIHN0 cnVjdCBhbWRfc2NoZWRfZmVuY2UgKnNfZmVuY2UgPSBqb2ItPnNfZmVuY2U7DQo+Pj4+Pj4+Pj4g KyAgICAgICAgICAgIGFtZF9zY2hlZF9mZW5jZV9zY2hlZHVsZWQoc19mZW5jZSk7DQo+Pj4+Pj4+ PiBJdCB3b3VsZCBiZSByZWFsbHkgbmljZSB0byBoYXZlIGFuIGVycm9yIGNvZGUgc2V0IG9uDQo+ Pj4+Pj4+PiBzX2ZlbmNlLT5maW5pc2hlZCBiZWZvcmUgaXQgaXMgc2lnbmFsZWQsIHVzZSANCj4+ Pj4+Pj4+IGRtYV9mZW5jZV9zZXRfZXJyb3IoKSBmb3IgdGhpcy4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+ PiBBZGRpdGlvbmFsIHRvIHRoYXQgaXQgd291bGQgYmUgbmljZSB0byBub3RlIGluIHRoZSBzdWJq ZWN0IGxpbmUgDQo+Pj4+Pj4+PiB0aGF0DQo+Pj4+Pj4+PiB0aGlzIGlzIGEgcmF0aGVyIGltcG9y dGFudCBidWcgZml4Lg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IFdpdGggdGhhdCBmaXhlZCB0aGUgd2hv bGUgc2VyaWVzIGlzIFJldmlld2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnDQo+Pj4+Pj4+PiA8Y2hy aXN0aWFuLmtvZW5pZ0BhbWQuY29tPi4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+PiBSZWdhcmRzLA0KPj4+ Pj4+Pj4gQ2hyaXN0aWFuLg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+PiArIGFtZF9zY2hlZF9mZW5jZV9m aW5pc2hlZChzX2ZlbmNlKTsNCj4+Pj4+Pj4+PiArIGRtYV9mZW5jZV9wdXQoJnNfZmVuY2UtPmZp bmlzaGVkKTsNCj4+Pj4+Pj4+PiAgICAgICAgICAgICAgICAgc2NoZWQtPm9wcy0+ZnJlZV9qb2Io am9iKTsNCj4+Pj4+Pj4+PiArICAgICAgICB9DQo+Pj4+Pj4+Pj4gICAgICAgICB9DQo+Pj4+Pj4+ Pj4gICAgICAgICBrZmlmb19mcmVlKCZlbnRpdHktPmpvYl9xdWV1ZSk7DQo+Pj4+Pj4+Pj4gICAg IH0NCj4+Pj4+Pj4+PiAgICAgc3RhdGljIHZvaWQgYW1kX3NjaGVkX2VudGl0eV93YWtldXAoc3Ry dWN0IGRtYV9mZW5jZSAqZiwgDQo+Pj4+Pj4+Pj4gc3RydWN0DQo+Pj4+Pj4+Pj4gZG1hX2ZlbmNl X2NiICpjYikNCj4+Pj4+Pj4+PiAgICAgew0KPj4+Pj4+Pj4+ICAgICAgICAgc3RydWN0IGFtZF9z Y2hlZF9lbnRpdHkgKmVudGl0eSA9DQo+Pj4+Pj4+Pj4gICAgICAgICAgICAgY29udGFpbmVyX29m KGNiLCBzdHJ1Y3QgYW1kX3NjaGVkX2VudGl0eSwgY2IpOw0KPj4+Pj4+Pj4+ICAgICAgICAgZW50 aXR5LT5kZXBlbmRlbmN5ID0gTlVMTDsNCj4+Pj4+Pj4+DQo+Pj4+Pj4+PiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPj4+Pj4+Pj4gYW1kLWdmeCBtYWls aW5nIGxpc3QNCj4+Pj4+Pj4+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+Pj4+Pj4+ PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngN Cj4+Pj4+Pj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f DQo+Pj4+Pj4+PiBhbWQtZ2Z4IG1haWxpbmcgbGlzdA0KPj4+Pj4+Pj4gYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcNCj4+Pj4+Pj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vYW1kLWdmeA0KPj4+Pj4+Pg0KPj4+Pj4+Pg0KPj4+Pj4+DQo+Pj4+Pg0K Pj4+Pg0KPj4+DQo+Pg0KPg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1n ZngK