From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-eopbgr780075.outbound.protection.outlook.com [40.107.78.75]) by gabe.freedesktop.org (Postfix) with ESMTPS id 28C106E569 for ; Thu, 3 Jan 2019 16:55:23 +0000 (UTC) From: "Li, Sun peng (Leo)" Date: Thu, 3 Jan 2019 16:55:21 +0000 Message-ID: References: <20181128205107.16315-1-David.Francis@amd.com> In-Reply-To: Content-Language: en-US Content-ID: MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] tests/amdgpu: Add test for Adaptive Backlight Management 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: "Francis, David" , "Wentland, Harry" , "igt-dev@lists.freedesktop.org" List-ID: CgpPbiAyMDE4LTEyLTA3IDk6MzQgYS5tLiwgRnJhbmNpcywgRGF2aWQgd3JvdGU6Cj4gT24gbXkg bWFjaGluZSwgdGhlIGdyYWR1YWwgYnJpZ2h0bmVzcyByZWR1Y3Rpb24gZ2l2ZXMgdGhlIGZvbGxv d2luZyBwd20gCj4gbWVhc3VyZW1lbnRzCj4gCj4gcHdtIGNoYW5nZWQgZnJvbSA2NTUzNSB0byA2 NDc1OCAoLTc3NykKPiBwd20gY2hhbmdlZCBmcm9tIDY0NzU4IHRvIDYzNTMwICgtMTIyOCkKPiBw d20gY2hhbmdlZCBmcm9tIDYzNTMwIHRvIDYyNTk0ICgtOTM2KQo+IHB3bSBjaGFuZ2VkIGZyb20g NjI1OTQgdG8gNjE3NTEgKC04NDMpCj4gcHdtIGNoYW5nZWQgZnJvbSA2MTc1MSB0byA2MDgyNSAo LTkyNikKPiBwd20gY2hhbmdlZCBmcm9tIDYwODI1IHRvIDU5NDgwICgtMTM0NSkKPiBwd20gY2hh bmdlZCBmcm9tIDU5NDgwIHRvIDU4MDY0ICgtMTQxNikKPiBwd20gY2hhbmdlZCBmcm9tIDU4MDY0 IHRvIDU2OTY3ICgtMTA5NykKPiBwd20gY2hhbmdlZCBmcm9tIDU2OTY3IHRvIDU1OTU2ICgtMTAx MSkKPiBwd20gY2hhbmdlZCBmcm9tIDU1OTU2IHRvIDU1MDI3ICgtOTI5KQo+IAo+IEkgdGhpbmsg d2UgY2FuIGFzc3VtZSBhIGNoYW5nZSBvZiBhdCBsZWFzdCAxCj4gCj4gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gKkZyb206KiBXZW50bGFuZCwgSGFycnkKPiAqU2VudDoqIE5vdmVtYmVyIDI5LCAyMDE4IDM6 NDU6MzAgUE0KPiAqVG86KiBGcmFuY2lzLCBEYXZpZDsgaWd0LWRldkBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKPiAqU3ViamVjdDoqIFJlOiBbaWd0LWRldl0gW1BBVENIIGktZy10XSB0ZXN0cy9hbWRn cHU6IEFkZCB0ZXN0IGZvciAKPiBBZGFwdGl2ZSBCYWNrbGlnaHQgTWFuYWdlbWVudAo+IAo+IAo+ IE9uIDIwMTgtMTEtMjggMzo1MSBwLm0uLCBEYXZpZCBGcmFuY2lzIHdyb3RlOgo+PiBBZGFwdGl2 ZSBCYWNrbGlnaHQgTWFuYWdlbWVudCAoQUJNKSBpcyBhIHBvd2VyLXNhdmluZwo+PiBmZWF0dXJl IG9uIEFNRCBBU0lDcyB0aGF0IHJlZHVjZXMgYmFja2xpZ2h0IHdoaWxlIGluY3JlYXNpbmcKPj4g cGl4ZWwgY29udHJhc3QgYW5kIGx1bWluYW5jZS7CoCBUaGlzIHRlc3QgY29uZmlybXMgdGhhdAo+ PiBBQk0gaXMgcHJlc2VudCBhbmQgZW5hYmxlZCwgYW5kIHRoYXQgYmFja2xpZ2h0IHBlcmZvcm1h bmNlCj4+IGlzIHNhbmUuwqAgSXQgdXNlcyBBTUQtc3BlY2lmaWMgZGVidWdmcyBlbnRyaWVzIHRv Cj4+IHJlYWQgdGhlIGJhY2tsaWdodCBQV00gdmFsdWVzLgo+PiAKPj4gSXQgaGFzIDUgc3VidGVz dHM6Cj4+IAo+PiBkcG1zX2N5Y2xlCj4+IFNldHMgYnJpZ2h0bmVzcyB0byBoYWxmLCB0aGVuIGNv bmZpcm1zIHRoYXQgdmFsdWUgaXMgcmVzdG9yZWQKPj4gYWZ0ZXIgZHBtcyBvZmYgYW5kIHRoZW4g b24uCj4+IAo+PiBiYWNrbGlnaHRfbW9ub3RvbmljX2Jhc2ljCj4+IFNldHMgYnJpZ2h0bmVzcyB0 byB0ZW4gZGlmZmVyZW50IHZhbHVlcywgY29uZmlybWluZyB0aGF0Cj4+IGhpZ2hlciBicmlnaHRu ZXNzIHZhbHVlcyBhcmUgYnJpZ2h0ZXIuCj4+IAo+PiBiYWNrbGlnaHRfbW9ub3RvbmljX2FibQo+ PiBTYW1lIGFzIGJhY2tsaWdodF9tb25vdG9uaWNfYmFzaWMsIGJ1dCB3aXRoIGFibSBlbmFibGVk Lgo+PiAKPj4gYWJtX2VuYWJsZWQKPj4gU2V0cyBhYm0gdG8gaXRzIGZvdXIgaW50ZW5zaXR5IGxl dmVscywgY29uZmlybWluZyB0aGF0Cj4+IGFibSByZWR1Y2VzIHRoZSBiYWNrbGlnaHQsIGFuZCB0 aGUgcmVkdWN0aW9uIGlzIGdyZWF0ZXIKPj4gZm9yIGhpZ2hlciBhYm0gbGV2ZWwuCj4+IAo+PiBh Ym1fZ3JhZHVhbAo+PiBTZXRzIGFibSB0byBvZmYgYW5kIHRoZW4gbWF4aW11bSBpbnRlbnNpdHks IGNvbmZpcm1pbmcKPj4gdGhhdCBicmlnaHRuZXNzIGRlY3JlYXNlcyBjb250aW51YWxseSBvdmVy IHRoZSBmaXJzdAo+PiBzZWNvbmQgYW5kIGV2ZW50dWFsbHkgcmVhY2hlcyB0aGUgdGFyZ2V0IHZh bHVlLgo+PiBUaGlzIHRlc3QgdGFrZXMgMzBzIHRvIHJ1bi4KPj4gCj4+IFNpZ25lZC1vZmYtYnk6 IERhdmlkIEZyYW5jaXMgPERhdmlkLkZyYW5jaXNAYW1kLmNvbT4KPj4gLS0tCj4+wqAgdGVzdHMv TWFrZWZpbGUuc291cmNlcyB8wqDCoCAxICsKPj7CoCB0ZXN0cy9hbWRncHUvYW1kX2FibS5jIHwg MzYxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+wqAgMiBmaWxl cyBjaGFuZ2VkLCAzNjIgaW5zZXJ0aW9ucygrKQo+PsKgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0 cy9hbWRncHUvYW1kX2FibS5jCj4+IAo+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4gaW5kZXggNTYyMGMxZDYuLjNkNTYwYmVl IDEwMDY0NAo+PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4+ICsrKyBiL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKPj4gQEAgLTE5LDYgKzE5LDcgQEAgQU1ER1BVX1RFU1RTID0gXAo+PsKg wqDCoMKgwqDCoMKgIGFtZGdwdS9hbWRfYmFzaWMgXAo+PsKgwqDCoMKgwqDCoMKgIGFtZGdwdS9h bWRfY3Nfbm9wIFwKPj7CoMKgwqDCoMKgwqDCoCBhbWRncHUvYW1kX3ByaW1lIFwKPj4gK8KgwqDC oMKgIGFtZGdwdS9hbWRfYWJtIFwKPj7CoMKgwqDCoMKgwqDCoCAkKE5VTEwpCj4+ICAKPj7CoCBU RVNUU19wcm9ncyA9IFwKPj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2FtZGdwdS9hbWRfYWJtLmMgYi90 ZXN0cy9hbWRncHUvYW1kX2FibS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAw MDAwMDAwLi45MGE2Zjk5ZQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3Rlc3RzL2FtZGdwdS9h bWRfYWJtLmMKPj4gQEAgLTAsMCArMSwzNjEgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgMjAx OCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKPj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+PiArICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK Pj4gKyAqCj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+PiArICogYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKPj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+PiArICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoCBJTiBOTyBFVkVOVCBTSEFMTAo+ PiArICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SCj4+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPj4gKyAqIEFSSVNJTkcg RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUgo+PiArICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+PiArICovCj4+ICsK Pj4gKyNpbmNsdWRlICJpZ3QuaCIKPj4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4+ICsjaW5jbHVk ZSAiaWd0X2ttcy5oIgo+PiArI2luY2x1ZGUgPGxpbWl0cy5oPgo+PiArI2luY2x1ZGUgPGVycm5v Lmg+Cj4+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+PiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+PiAr I2luY2x1ZGUgPHN0ZGlvLmg+Cj4+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4+ICsjaW5jbHVkZSA8 ZmNudGwuaD4KPj4gKyNpbmNsdWRlIDx0aW1lLmg+Cj4+ICsKPj4gKyNkZWZpbmUgQkFDS0xJR0hU X1BBVEggIi9zeXMvY2xhc3MvYmFja2xpZ2h0L2FtZGdwdV9ibDAiCj4+ICsKPj4gK3N0YXRpYyBp bnQgcmVhZF9jdXJyZW50X2JhY2tsaWdodF9wd20oaW50IGRlYnVnZnNfZGlyKQo+PiArewo+PiAr wqDCoMKgwqAgY2hhciBidWZbMjBdOwo+PiArCj4+ICvCoMKgwqDCoCBpZ3RfZGVidWdmc19zaW1w bGVfcmVhZChkZWJ1Z2ZzX2RpciwgImFtZGdwdV9jdXJyZW50X2JhY2tsaWdodF9wd20iLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Ziwgc2l6ZW9mKGJ1 ZikpOwo+PiArCj4+ICvCoMKgwqDCoCByZXR1cm4gc3RydG9sKGJ1ZiwgTlVMTCwgMCk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3bShpbnQgZGVidWdm c19kaXIpCj4+ICt7Cj4+ICvCoMKgwqDCoCBjaGFyIGJ1ZlsyMF07Cj4+ICsKPj4gK8KgwqDCoMKg IGlndF9kZWJ1Z2ZzX3NpbXBsZV9yZWFkKGRlYnVnZnNfZGlyLCAiYW1kZ3B1X3RhcmdldF9iYWNr bGlnaHRfcHdtIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBidWYsIHNpemVvZihidWYpKTsKPj4gKwo+PiArwqDCoMKgwqAgcmV0dXJuIHN0cnRvbChidWYs IE5VTEwsIDApOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGJhY2tsaWdodF93cml0ZV9icmln aHRuZXNzKGludCB2YWx1ZSkKPj4gK3sKPj4gK8KgwqDCoMKgIGludCBmZDsKPj4gK8KgwqDCoMKg IGNoYXIgZnVsbFtQQVRIX01BWF07Cj4+ICvCoMKgwqDCoCBjaGFyIHNyY1s2NF07Cj4+ICvCoMKg wqDCoCBpbnQgbGVuOwo+PiArCj4+ICvCoMKgwqDCoCBpZ3RfYXNzZXJ0KHNucHJpbnRmKGZ1bGws IFBBVEhfTUFYLCAiJXMvJXMiLCBCQUNLTElHSFRfUEFUSCwgImJyaWdodG5lc3MiKSA8IFBBVEhf TUFYKTsKPj4gK8KgwqDCoMKgIGZkID0gb3BlbihmdWxsLCBPX1dST05MWSk7Cj4+ICvCoMKgwqDC oCBpZiAoZmQgPT0gLTEpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1lcnJu bzsKPj4gKwo+PiArwqDCoMKgwqAgbGVuID0gc25wcmludGYoc3JjLCBzaXplb2Yoc3JjKSwgIiVp IiwgdmFsdWUpOwo+PiArwqDCoMKgwqAgbGVuID0gd3JpdGUoZmQsIHNyYywgbGVuKTsKPj4gK8Kg wqDCoMKgIGNsb3NlKGZkKTsKPj4gKwo+PiArwqDCoMKgwqAgaWYgKGxlbiA8IDApCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGxlbjsKPj4gKwo+PiArwqDCoMKgwqAgcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHNldF9hYm1fbGV2ZWwoaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSwgaW50IGxldmVsKQo+PiArewo+PiArwqDCoMKgwqAgaW50IGksIHJldDsKPj4g K8KgwqDCoMKgIGludCBvdXRwdXRfaWQ7Cj4+ICvCoMKgwqDCoCBkcm1Nb2RlT2JqZWN0UHJvcGVy dGllc1B0ciBwcm9wczsKPj4gK8KgwqDCoMKgIHVpbnQzMl90IHByb3BfaWQ7Cj4+ICvCoMKgwqDC oCBkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcDsKPj4gK8KgwqDCoMKgIHVpbnQzMl90IHR5cGUgPSBE Uk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SOwo+PiArCj4+ICvCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgZGlzcGxheS0+bl9vdXRwdXRzOyBpKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBvdXRwdXRfaWQgPSBkaXNwbGF5LT5vdXRwdXRzW2ldLmlkOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHByb3BzID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoZGlzcGxheS0+ZHJt X2ZkLCBvdXRwdXRfaWQsIHR5cGUpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Zm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByb3BfaWQgPSBwcm9wcy0+cHJvcHNbaV07 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByb3AgPSBkcm1N b2RlR2V0UHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBwcm9wX2lkKTsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfYXNzZXJ0KHByb3ApOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzdHJjbXAo cHJvcC0+bmFtZSwgImFibSBsZXZlbCIpID09IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IGRybU1vZGVPYmplY3RT ZXRQcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dF9pZCwgdHlwZSwgcHJvcF9pZCwgbGV2 ZWwpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgIH0KPj4gKwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGJhY2tsaWdodF9yZWFkX21heF9icmlnaHRuZXNzKGludCAqcmVzdWx0KQo+PiAr ewo+PiArwqDCoMKgwqAgaW50IGZkOwo+PiArwqDCoMKgwqAgY2hhciBmdWxsW1BBVEhfTUFYXTsK Pj4gK8KgwqDCoMKgIGNoYXIgZHN0WzY0XTsKPj4gK8KgwqDCoMKgIGludCByLCBlOwo+PiArCj4+ ICvCoMKgwqDCoCBpZ3RfYXNzZXJ0KHNucHJpbnRmKGZ1bGwsIFBBVEhfTUFYLCAiJXMvJXMiLCBC QUNLTElHSFRfUEFUSCwgIm1heF9icmlnaHRuZXNzIikgPCBQQVRIX01BWCk7Cj4+ICsKPj4gK8Kg wqDCoMKgIGZkID0gb3BlbihmdWxsLCBPX1JET05MWSk7Cj4+ICvCoMKgwqDCoCBpZiAoZmQgPT0g LTEpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1lcnJubzsKPj4gKwo+PiAr wqDCoMKgwqAgciA9IHJlYWQoZmQsIGRzdCwgc2l6ZW9mKGRzdCkpOwo+PiArwqDCoMKgwqAgZSA9 IGVycm5vOwo+PiArwqDCoMKgwqAgY2xvc2UoZmQpOwo+PiArCj4+ICvCoMKgwqDCoCBpZiAociA8 IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1lOwo+PiArCj4+ICvCoMKg wqDCoCBlcnJubyA9IDA7Cj4+ICvCoMKgwqDCoCAqcmVzdWx0ID0gc3RydG9sKGRzdCwgTlVMTCwg MTApOwo+PiArwqDCoMKgwqAgcmV0dXJuIGVycm5vOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBza2lwX2lmX2luY29tcGF0aWJsZShpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdm c19kaXIpCj4+ICt7Cj4+ICvCoMKgwqDCoCBpbnQgcmV0LCBpOwo+PiArwqDCoMKgwqAgY2hhciBi dWZbMjBdOwo+PiArwqDCoMKgwqAgYm9vbCBhYm1fcHJvcF9leGlzdHM7Cj4+ICvCoMKgwqDCoCBp bnQgb3V0cHV0X2lkOwo+PiArwqDCoMKgwqAgZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJv cHM7Cj4+ICvCoMKgwqDCoCB1aW50MzJfdCB0eXBlID0gRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RP UjsKPj4gK8KgwqDCoMKgIHVpbnQzMl90IHByb3BfaWQ7Cj4+ICvCoMKgwqDCoCBkcm1Nb2RlUHJv cGVydHlQdHIgcHJvcDsKPj4gKwo+PiArwqDCoMKgwqAgcmV0ID0gaWd0X2RlYnVnZnNfc2ltcGxl X3JlYWQoZGVidWdmc19kaXIsICJhbWRncHVfY3VycmVudF9iYWNrbGlnaHRfcHdtIiwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYsIHNpemVvZihidWYp KTsKPj4gKwo+PiArwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWd0X3NraXAoIk5vIGN1cnJlbnQgYmFja2xpZ2h0IGRlYnVnZnMgZW50cnkuXG4iKTsK Pj4gKwo+PiArwqDCoMKgwqAgcmV0ID0gaWd0X2RlYnVnZnNfc2ltcGxlX3JlYWQoZGVidWdmc19k aXIsICJhbWRncHVfdGFyZ2V0X2JhY2tsaWdodF9wd20iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+PiArCj4+ICvCoMKg wqDCoCBpZiAocmV0IDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfc2tpcCgi Tm8gdGFyZ2V0IGJhY2tsaWdodCBkZWJ1Z2ZzIGVudHJ5LlxuIik7Cj4+ICsKPj4gK8KgwqDCoMKg IGFibV9wcm9wX2V4aXN0cyA9IGZhbHNlOwo+PiArCj4+ICvCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgZGlzcGxheS0+bl9vdXRwdXRzOyBpKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBvdXRwdXRfaWQgPSBkaXNwbGF5LT5vdXRwdXRzW2ldLmlkOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHByb3BzID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoZGlzcGxheS0+ZHJt X2ZkLCBvdXRwdXRfaWQsIHR5cGUpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Zm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByb3BfaWQgPSBwcm9wcy0+cHJvcHNbaV07 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByb3AgPSBkcm1N b2RlR2V0UHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBwcm9wX2lkKTsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc3RyY21wKHByb3AtPm5hbWUs ICJhYm0gbGV2ZWwiKSA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWJtX3Byb3BfZXhpc3RzID0gdHJ1ZTsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1Nb2RlRnJlZVByb3Bl cnR5KHByb3ApOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgIH0K Pj4gKwo+PiArwqDCoMKgwqAgaWYgKCFhYm1fcHJvcF9leGlzdHMpCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWd0X3NraXAoIk5vIGFibSBsZXZlbCBwcm9wZXJ0eSBvbiBhbnkgY29ubmVj dG9yLlxuIik7Cj4+ICt9Cj4+ICsKPj4gKwo+PiArc3RhdGljIHZvaWQgYmFja2xpZ2h0X2RwbXNf Y3ljbGUoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRlYnVnZnMsIGlndF9vdXRwdXRfdCAq b3V0cHV0KQo+PiArewo+PiArwqDCoMKgwqAgaW50IHJldDsKPj4gK8KgwqDCoMKgIGludCBtYXhf YnJpZ2h0bmVzczsKPj4gK8KgwqDCoMKgIGludCBwd21fMSwgcHdtXzI7Cj4+ICsKPj4gK8KgwqDC oMKgIHJldCA9IGJhY2tsaWdodF9yZWFkX21heF9icmlnaHRuZXNzKCZtYXhfYnJpZ2h0bmVzcyk7 Cj4+ICvCoMKgwqDCoCBpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4+ICsKPj4gK8KgwqDCoMKgIHNl dF9hYm1fbGV2ZWwoZGlzcGxheSwgMCk7Cj4+ICvCoMKgwqDCoCBiYWNrbGlnaHRfd3JpdGVfYnJp Z2h0bmVzcyhtYXhfYnJpZ2h0bmVzcyAvIDIpOwo+PiArwqDCoMKgwqAgdXNsZWVwKDEwMDAwMCk7 Cj4+ICvCoMKgwqDCoCBwd21fMSA9IHJlYWRfdGFyZ2V0X2JhY2tsaWdodF9wd20oZGVidWdmcyk7 Cj4+ICsKPj4gK8KgwqDCoMKgIGttc3Rlc3Rfc2V0X2Nvbm5lY3Rvcl9kcG1zKGRpc3BsYXktPmRy bV9mZCwgb3V0cHV0LT5jb25maWcuY29ubmVjdG9yLCBEUk1fTU9ERV9EUE1TX09GRik7Cj4+ICvC oMKgwqDCoCBrbXN0ZXN0X3NldF9jb25uZWN0b3JfZHBtcyhkaXNwbGF5LT5kcm1fZmQsIG91dHB1 dC0+Y29uZmlnLmNvbm5lY3RvciwgRFJNX01PREVfRFBNU19PTik7Cj4+ICvCoMKgwqDCoCB1c2xl ZXAoMTAwMDAwKTsKPj4gK8KgwqDCoMKgIHB3bV8yID0gcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3 bShkZWJ1Z2ZzKTsKPj4gK8KgwqDCoMKgIGlndF9hc3NlcnRfZXEocHdtXzEsIHB3bV8yKTsKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQgYmFja2xpZ2h0X21vbm90b25pY19iYXNpYyhpZ3RfZGlz cGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdmcykKPj4gK3sKPj4gK8KgwqDCoMKgIGludCByZXQ7 Cj4+ICvCoMKgwqDCoCBpbnQgbWF4X2JyaWdodG5lc3M7Cj4+ICvCoMKgwqDCoCBpbnQgcHJldl9w d20sIHB3bTsKPj4gK8KgwqDCoMKgIGludCBicmlnaHRuZXNzX3N0ZXA7Cj4+ICvCoMKgwqDCoCBp bnQgYnJpZ2h0bmVzczsKPj4gKwo+PiArwqDCoMKgwqAgcmV0ID0gYmFja2xpZ2h0X3JlYWRfbWF4 X2JyaWdodG5lc3MoJm1heF9icmlnaHRuZXNzKTsKPj4gK8KgwqDCoMKgIGlndF9hc3NlcnRfZXEo cmV0LCAwKTsKPj4gKwo+PiArwqDCoMKgwqAgYnJpZ2h0bmVzc19zdGVwID0gbWF4X2JyaWdodG5l c3MgLyAxMDsKPj4gKwo+PiArwqDCoMKgwqAgc2V0X2FibV9sZXZlbChkaXNwbGF5LCAwKTsKPj4g K8KgwqDCoMKgIGJhY2tsaWdodF93cml0ZV9icmlnaHRuZXNzKG1heF9icmlnaHRuZXNzKTsKPj4g K8KgwqDCoMKgIHVzbGVlcCgxMDAwMDApOwo+PiArwqDCoMKgwqAgcHJldl9wd20gPSByZWFkX3Rh cmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOwo+PiArwqDCoMKgwqAgZm9yIChicmlnaHRuZXNz ID0gbWF4X2JyaWdodG5lc3MgLSBicmlnaHRuZXNzX3N0ZXA7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqAgYnJpZ2h0bmVzcyA+IDA7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqAgYnJpZ2h0bmVzcyAtPSBi cmlnaHRuZXNzX3N0ZXApIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHRf d3JpdGVfYnJpZ2h0bmVzcyhicmlnaHRuZXNzKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1c2xlZXAoMTAwMDAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwd20gPSByZWFk X3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlndF9hc3NlcnQocHdtIDwgcHJldl9wd20pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHByZXZfcHdtID0gcHdtOwo+PiArwqDCoMKgwqAgfQo+PiArCj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIGJhY2tsaWdodF9tb25vdG9uaWNfYWJtKGlndF9kaXNwbGF5X3QgKmRpc3BsYXks IGludCBkZWJ1Z2ZzKQo+PiArewo+PiArwqDCoMKgwqAgaW50IHJldCwgaTsKPj4gK8KgwqDCoMKg IGludCBtYXhfYnJpZ2h0bmVzczsKPj4gK8KgwqDCoMKgIGludCBwcmV2X3B3bSwgcHdtOwo+PiAr wqDCoMKgwqAgaW50IGJyaWdodG5lc3Nfc3RlcDsKPj4gK8KgwqDCoMKgIGludCBicmlnaHRuZXNz Owo+PiArCj4+ICvCoMKgwqDCoCByZXQgPSBiYWNrbGlnaHRfcmVhZF9tYXhfYnJpZ2h0bmVzcygm bWF4X2JyaWdodG5lc3MpOwo+PiArwqDCoMKgwqAgaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+PiAr Cj4+ICvCoMKgwqDCoCBicmlnaHRuZXNzX3N0ZXAgPSBtYXhfYnJpZ2h0bmVzcyAvIDEwOwo+PiAr wqDCoMKgwqAgZm9yIChpID0gMTsgaSA8IDU7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNldF9hYm1fbGV2ZWwoZGlzcGxheSwgaSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYmFja2xpZ2h0X3dyaXRlX2JyaWdodG5lc3MobWF4X2JyaWdodG5lc3MpOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVzbGVlcCgxMDAwMDApOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHByZXZfcHdtID0gcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGJyaWdodG5lc3MgPSBtYXhfYnJpZ2h0 bmVzcyAtIGJyaWdodG5lc3Nfc3RlcDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYnJpZ2h0bmVzcyA+IDA7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJyaWdodG5lc3MgLT0gYnJpZ2h0bmVzc19zdGVwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhY2tsaWdodF93cml0ZV9icmlnaHRuZXNzKGJyaWdo dG5lc3MpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1c2xl ZXAoMTAwMDAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cHdtID0gcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydChwd20gPCBwcmV2X3B3bSk7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByZXZfcHdtID0g cHdtOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgIH0KPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgYWJtX2VuYWJsZWQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwg aW50IGRlYnVnZnMpCj4+ICt7Cj4+ICvCoMKgwqDCoCBpbnQgcmV0LCBpOwo+PiArwqDCoMKgwqAg aW50IG1heF9icmlnaHRuZXNzOwo+PiArwqDCoMKgwqAgaW50IHB3bSwgcHJldl9wd20sIHB3bV93 aXRob3V0X2FibTsKPj4gKwo+PiArwqDCoMKgwqAgcmV0ID0gYmFja2xpZ2h0X3JlYWRfbWF4X2Jy aWdodG5lc3MoJm1heF9icmlnaHRuZXNzKTsKPj4gK8KgwqDCoMKgIGlndF9hc3NlcnRfZXEocmV0 LCAwKTsKPj4gKwo+PiArwqDCoMKgwqAgc2V0X2FibV9sZXZlbChkaXNwbGF5LCAwKTsKPj4gK8Kg wqDCoMKgIGJhY2tsaWdodF93cml0ZV9icmlnaHRuZXNzKG1heF9icmlnaHRuZXNzKTsKPj4gK8Kg wqDCoMKgIHVzbGVlcCgxMDAwMDApOwo+PiArwqDCoMKgwqAgcHJldl9wd20gPSByZWFkX3Rhcmdl dF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOwo+PiArwqDCoMKgwqAgcHdtX3dpdGhvdXRfYWJtID0g cHJldl9wd207Cj4+ICsKPj4gK8KgwqDCoMKgIGZvciAoaSA9IDE7IGkgPCA1OyBpKyspIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXRfYWJtX2xldmVsKGRpc3BsYXksIGkpOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVzbGVlcCgxMDAwMDApOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHB3bSA9IHJlYWRfdGFyZ2V0X2JhY2tsaWdodF9wd20oZGVidWdmcyk7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydChwd20gPD0gcHJldl9wd20pOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9hc3NlcnQocHdtIDwgcHdtX3dpdGhvdXRf YWJtKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmV2X3B3bSA9IHB3bTsKPj4gK8Kg wqDCoMKgIH0KPj4gKwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhYm1fZ3JhZHVhbChpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdmcykKPj4gK3sKPj4gK8KgwqDCoMKgIGludCBy ZXQsIGk7Cj4+ICvCoMKgwqDCoCBpbnQgY29udmVyZ2VuY2VfZGVsYXkgPSAxNTsKPj4gK8KgwqDC oMKgIGludCBwcmV2X3B3bSwgcHdtLCBjdXJyOwo+PiArwqDCoMKgwqAgaW50IG1heF9icmlnaHRu ZXNzOwo+PiArCj4+ICvCoMKgwqDCoCByZXQgPSBiYWNrbGlnaHRfcmVhZF9tYXhfYnJpZ2h0bmVz cygmbWF4X2JyaWdodG5lc3MpOwo+PiArCj4+ICvCoMKgwqDCoCBpZ3RfYXNzZXJ0X2VxKHJldCwg MCk7Cj4+ICsKPj4gK8KgwqDCoMKgIHNldF9hYm1fbGV2ZWwoZGlzcGxheSwgMCk7Cj4+ICvCoMKg wqDCoCBiYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhtYXhfYnJpZ2h0bmVzcyk7Cj4+ICsKPj4g K8KgwqDCoMKgIHNsZWVwKGNvbnZlcmdlbmNlX2RlbGF5KTsKPj4gK8KgwqDCoMKgIHByZXZfcHdt ID0gcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsKPj4gK8KgwqDCoMKgIGN1cnIg PSByZWFkX2N1cnJlbnRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsKPj4gKwo+PiArwqDCoMKgwqAg aWd0X2Fzc2VydF9lcShwcmV2X3B3bSwgY3Vycik7Cj4+ICvCoMKgwqDCoCBzZXRfYWJtX2xldmVs KGRpc3BsYXksIDQpOwo+PiArwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1c2xlZXAoMTAwMDAwKTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwd20gPSByZWFkX2N1cnJlbnRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfYXNzZXJ0KHB3bSA8IHByZXZfcHdtKTsK PiAKPiBUaGlzIHNlZW1zIGxpa2UgaXQgdmVyeSBtdWNoIGRlcGVuZHMgb24gdGhlIHVzbGVlcCB2 YWx1ZSBhYm92ZSwgdGhlIAo+IHJhbmdlIG9mIGV4cGVjdGVkIHB3bSByZWR1Y3Rpb24gYmV0d2Vl biBubyBBQk0gYW5kIEFCTSBsZXZlbCA0LCBhcyB3ZWxsIAo+IGFzIGhvdyBxdWlja2x5L3Nsb3ds eSB0aGlzIGV4ZWN1dGVzLgo+IAo+IFNob3VsZCB0aGUgdXNsZWVwIHRpbWUgYmUgYSBmdW5jdGlv biBvZiB0aGUgY29udmVyZ2VuY2VfZGVsYXk/Cj4gCj4gQ291bGQgdGhpcyBnaXZlIHVzIGZsYWt5 IHRlc3QgcmVzdWx0cz8KPiAKPiBIb3cgbWFueSBQV00gc3RlcHMgaGF2ZSB5b3UgdXN1YWxseSBz ZWVuIGZvciBlYWNoIGl0ZXJhdGlvbiBvZiB0aGlzIAo+IGZ1bmN0aW9uPyBJZiBpdCdzIGxhcmdl IHdlJ3JlIHByb2JhYmx5IGZpbmUuCj4gCj4gSGFycnkKPiAKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwcmV2X3B3bSA9IHB3bTsKPj4gK8KgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqAg c2xlZXAoY29udmVyZ2VuY2VfZGVsYXkgLSAxKTsKPj4gKwo+PiArwqDCoMKgwqAgcHJldl9wd20g PSByZWFkX3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOwo+PiArwqDCoMKgwqAgY3VyciA9 IHJlYWRfY3VycmVudF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOwo+PiArCj4+ICvCoMKgwqDCoCBp Z3RfYXNzZXJ0X2VxKHByZXZfcHdtLCBjdXJyKTsKPj4gK30KPj4gKwo+PiAraWd0X21haW4KPj4g K3sKPj4gK8KgwqDCoMKgIGlndF9kaXNwbGF5X3QgZGlzcGxheTsKPj4gK8KgwqDCoMKgIGludCBk ZWJ1Z2ZzOwo+PiArwqDCoMKgwqAgZW51bSBwaXBlIHBpcGU7Cj4+ICvCoMKgwqDCoCBpZ3Rfb3V0 cHV0X3QgKm91dHB1dDsKPj4gKwo+PiArwqDCoMKgwqAgaWd0X3NraXBfb25fc2ltdWxhdGlvbigp Owo+PiArCj4+ICvCoMKgwqDCoCBpZ3RfZml4dHVyZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGlzcGxheS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTURH UFUpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGRpc3BsYXkuZHJtX2Zk ID09IC0xKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rf c2tpcCgiTm90IGFuIGFtZGdwdSBkcml2ZXIuXG4iKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGRlYnVnZnMgPSBpZ3RfZGVidWdmc19kaXIoZGlzcGxheS5kcm1fZmQpOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9k ZSgpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Rpc3BsYXlfcmVxdWly ZSgmZGlzcGxheSwgZGlzcGxheS5kcm1fZmQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2tpcF9pZl9pbmNvbXBhdGlibGUoJmRpc3BsYXksIGRlYnVnZnMpOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yX2VhY2hfcGlwZV93aXRoX3ZhbGlkX291dHB1dCgm ZGlzcGxheSwgcGlwZSwgb3V0cHV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBicmVhazsKCkFyZSB3ZSBndWFyYW50ZWVkIHRvIGVuZCB1cCB3aXRoIHRoZSBj b3JyZWN0IG91dHB1dCBoZXJlPyBUaGlzIHdvdWxkCmdpdmUgdXMgdGhlIGZpcnN0IHZhbGlkIG91 dHB1dCB0byBydW4gdGhlIGRwbXNfY3ljbGUgdGVzdCBvbiwgYnV0IHdpbGwKaXQgYmUgdGhlIEFC TSBvdXRwdXQ/IHBtX2JhY2tsaWdodC5jIHNlZW1zIHRvIGJlIGRvaW5nIHNvbWUgbmFtZQptYXRj aGluZyB0byBjaGVjayB0aGlzLgoKTGVvCgo+PiArwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDC oCBpZ3Rfc3VidGVzdCgiZHBtc19jeWNsZSIpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YmFja2xpZ2h0X2RwbXNfY3ljbGUoJmRpc3BsYXksIGRlYnVnZnMsIG91dHB1dCk7Cj4+ICvCoMKg wqDCoCBpZ3Rfc3VidGVzdCgiYmFja2xpZ2h0X21vbm90b25pY19iYXNpYyIpCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYmFja2xpZ2h0X21vbm90b25pY19iYXNpYygmZGlzcGxheSwgZGVi dWdmcyk7Cj4+ICvCoMKgwqDCoCBpZ3Rfc3VidGVzdCgiYmFja2xpZ2h0X21vbm90b25pY19hYm0i KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhY2tsaWdodF9tb25vdG9uaWNfYWJtKCZk aXNwbGF5LCBkZWJ1Z2ZzKTsKPj4gK8KgwqDCoMKgIGlndF9zdWJ0ZXN0KCJhYm1fZW5hYmxlZCIp Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWJtX2VuYWJsZWQoJmRpc3BsYXksIGRlYnVn ZnMpOwo+PiArwqDCoMKgwqAgaWd0X3N1YnRlc3QoImFibV9ncmFkdWFsIikKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhYm1fZ3JhZHVhbCgmZGlzcGxheSwgZGVidWdmcyk7Cj4+ICsKPj4g K8KgwqDCoMKgIGlndF9maXh0dXJlIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rf ZGlzcGxheV9maW5pKCZkaXNwbGF5KTsKPj4gK8KgwqDCoMKgIH0KPj4gK30KPj4gCj4gCj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBpZ3QtZGV2IG1h aWxpbmcgbGlzdAo+IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cj4gCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=