From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Bride Subject: Re: [PATCH IGT v2 2/6] lib: Add PSR utility functions to igt library. Date: Fri, 7 Jul 2017 06:53:57 -0700 Message-ID: <20170707135357.GB13260@shiv> References: <1498849944-26404-1-git-send-email-jim.bride@linux.intel.com> <1498849944-26404-3-git-send-email-jim.bride@linux.intel.com> <1498856072.22381.3.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id AB7C36E6E8 for ; Fri, 7 Jul 2017 13:56:27 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1498856072.22381.3.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni Cc: intel-gfx@lists.freedesktop.org, Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdW4gMzAsIDIwMTcgYXQgMDU6NTQ6MzJQTSAtMDMwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IEVtIFNleCwgMjAxNy0wNi0zMCDDoHMgMTI6MTIgLTA3MDAsIEppbSBCcmlkZSBlc2Ny ZXZldToKPiA+IEZhY3RvciBvdXQgc29tZSBjb2RlIHRoYXQgd2FzIHJlcGxpY2F0ZWQgaW4gdGhy ZWUgdGVzdCB1dGlsaXRpZXMgaW50bwo+ID4gc29tZSBuZXcgSUdUIGxpYnJhcnkgZnVuY3Rpb25z IHNvIHRoYXQgd2UgYXJlIGNoZWNraW5nIFBTUiBzdGF0dXMgaW4KPiA+IGEgY29uc2lzdGVudCBm YXNoaW9uIGFjcm9zcyBhbGwgb2Ygb3VyIFBTUiB0ZXN0cy4KPiA+IAo+ID4gdjI6ICogQWRkIHNp bmsgQ1JDIGhlbHBlciBmdW5jdGlvbgo+ID4gwqDCoMKgwqAqIE1pc2MuIGJ1ZyBmaXhlcwo+ID4g wqDCoMKgwqAqIFJlYmFzZQo+ID4gCj4gPiBDYzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlA aW50ZWwuY29tPgo+ID4gQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29t Pgo+ID4gU2lnbmVkLW9mZi1ieTogSmltIEJyaWRlIDxqaW0uYnJpZGVAbGludXguaW50ZWwuY29t Pgo+ID4gLS0tCj4gPiDCoGxpYi9NYWtlZmlsZS5zb3VyY2VzIHzCoMKgwqAyICsKPiA+IMKgbGli L2lndC5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDEgKwo+ID4gwqBsaWIvaWd0X3Bz ci5jwqDCoMKgwqDCoMKgwqDCoHwgMjM1Cj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPiA+IMKgbGliL2lndF9wc3IuaMKgwqDCoMKgwqDCoMKg wqB8wqDCoDQzICsrKysrKysrKysKPiA+IMKgNCBmaWxlcyBjaGFuZ2VkLCAyODEgaW5zZXJ0aW9u cygrKQo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9wc3IuYwo+ID4gwqBjcmVhdGUg bW9kZSAxMDA2NDQgbGliL2lndF9wc3IuaAo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvbGliL01ha2Vm aWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+ID4gaW5kZXggNTNmZGI1NC4uNmE3 M2M4YyAxMDA2NDQKPiA+IC0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gPiArKysgYi9saWIv TWFrZWZpbGUuc291cmNlcwo+ID4gQEAgLTgzLDYgKzgzLDggQEAgbGliX3NvdXJjZV9saXN0ID0J wqAJXAo+ID4gwqAJdXdpbGRtYXQvdXdpbGRtYXQuYwlcCj4gPiDCoAlpZ3Rfa21vZC5jCQlcCj4g PiDCoAlpZ3Rfa21vZC5oCQlcCj4gPiArCWlndF9wc3IuYwkJXAo+ID4gKwlpZ3RfcHNyLmgJCVwK PiA+IMKgCSQoTlVMTCkKPiA+IMKgCj4gPiDCoC5QSE9OWTogdmVyc2lvbi5oLnRtcAo+ID4gZGlm ZiAtLWdpdCBhL2xpYi9pZ3QuaCBiL2xpYi9pZ3QuaAo+ID4gaW5kZXggYTA2OWRlYi4uMGI4ZTNh OCAxMDA2NDQKPiA+IC0tLSBhL2xpYi9pZ3QuaAo+ID4gKysrIGIvbGliL2lndC5oCj4gPiBAQCAt MzcsNiArMzcsNyBAQAo+ID4gwqAjaW5jbHVkZSAiaWd0X2d0LmgiCj4gPiDCoCNpbmNsdWRlICJp Z3Rfa21zLmgiCj4gPiDCoCNpbmNsdWRlICJpZ3RfcG0uaCIKPiA+ICsjaW5jbHVkZSAiaWd0X3Bz ci5oIgo+ID4gwqAjaW5jbHVkZSAiaWd0X3N0YXRzLmgiCj4gPiDCoCNpZmRlZiBIQVZFX0NIQU1F TElVTQo+ID4gwqAjaW5jbHVkZSAiaWd0X2NoYW1lbGl1bS5oIgo+ID4gZGlmZiAtLWdpdCBhL2xp Yi9pZ3RfcHNyLmMgYi9saWIvaWd0X3Bzci5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g aW5kZXggMDAwMDAwMC4uYTI4MjNiZgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvbGliL2ln dF9wc3IuYwo+ID4gQEAgLTAsMCArMSwyMzUgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDC qSAyMDE3IEludGVsIENvcnBvcmF0aW9uCj4gPiArICoKPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgo+ID4gb2J0YWluaW5n IGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlCj4gPiAiU29mdHdhcmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+ID4gbGltaXRh dGlvbgo+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLAo+ID4gc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQo+ID4gdGhl Cj4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcKPiA+IGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nCj4gPiB0aGUg bmV4dAo+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbAo+ID4gcG9ydGlvbnMgb2YgdGhlCj4gPiArICogU29mdHdhcmUuCj4gPiAr ICoKPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwKPiA+IEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gPiBNRVJDSEFOVEFCSUxJ VFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC7CoMKgSU4gTk8KPiA+IEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMKPiA+IE9S IE9USEVSCj4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gPiBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gT1RIRVIg REVBTElOR1MKPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiArICovCj4gPiArCj4gPiArI2lu Y2x1ZGUgImlndC5oIgo+ID4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ID4gKyNpbmNsdWRlIDxzdGRi b29sLmg+Cj4gPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ID4gKyNpbmNsdWRlIDxzdHJpbmcu aD4KPiA+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBTRUNUSU9O OmlndF9wc3IKPiA+ICsgKiBAc2hvcnRfZGVzY3JpcHRpb246IFBhbmVsIFNlbGYgUmVmcmVzaCBo ZWxwZXJzCj4gPiArICogQHRpdGxlOiBQYW5lbCBTZWxmIFJlZnJlc2gKPiA+ICsgKiBAaW5jbHVk ZTogaWd0LmgKPiA+ICsgKgo+ID4gKyAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyB2YXJpb3VzIGhl bHBlcnMgdG8gZW5hYmxlIFBhbmVsIFNlbGYKPiA+IFJlZnJlc2gsCj4gPiArICogYXMgd2VsbCBh cyB0byBjaGVjayB0aGUgc3RhdGUgb2YgUFNSIG9uIHRoZSBzeXN0ZW0gKGVuYWJsZWQgdnMuCj4g PiArICogZGlzYWJsZWQsIGFjdGl2ZSB2cy4gaW5hY3RpdmUpIG9yIHRvIHdhaXQgZm9yIFBTUiB0 byBiZSBhY3RpdmUKPiA+ICsgKiBvciBpbmFjdGl2ZS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsvKioK PiA+ICsgKiBpZ3RfcHNyX3NvdXJjZV9zdXBwb3J0Ogo+ID4gKyAqCj4gPiArICogUmV0dXJucyB0 cnVlIGlmIHRoZSBzb3VyY2Ugc3VwcG9ydHMgUFNSLgo+ID4gKyAqLwo+ID4gK2Jvb2wgaWd0X3Bz cl9zb3VyY2Vfc3VwcG9ydChpbnQgZmQpCj4gPiArewo+ID4gKwljaGFyIGJ1Zls1MTJdOwo+ID4g Kwo+ID4gKwlpZ3RfZGVidWdmc19yZWFkKGZkLCAiaTkxNV9lZHBfcHNyX3N0YXR1cyIsIGJ1Zik7 Cj4gPiArCj4gPiArCXJldHVybiBzdHJzdHIoYnVmLCAiU291cmNlX09LOiB5ZXNcbiIpOwo+ID4g K30KPiA+ICsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpZ3RfcHNyX3Npbmtfc3VwcG9ydDoKPiA+ ICsgKgo+ID4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBlRFAgcGFuZWwgc3VwcG9y dHMgUFNSLgo+ID4gKyAqLwo+ID4gK2Jvb2wgaWd0X3Bzcl9zaW5rX3N1cHBvcnQoaW50IGZkKQo+ ID4gK3sKPiA+ICsJY2hhciBidWZbMjU2XTsKPiAKPiBXaHkgYXJlIHNvbWUgYnVmZmVycyA1MTIg d2hpbGUgdGhlIG90aGVycyBhcmUgMjU2PyBUaGV5J3JlIGJvdGggZm9yIHRoZQo+IHNhbWUgZmls ZS4KCkl0J3MgYXJiaXRyYXJ5LiAgSSdsbCBtYWtlIHRoaW5ncyBjb25zaXN0ZW50IHdoZW4gSSBy ZXZpc2l0IHRoaXMgcGF0Y2guCgo+ID4gKwo+ID4gKwlpZ3RfZGVidWdmc19yZWFkKGZkLCAiaTkx NV9lZHBfcHNyX3N0YXR1cyIsIGJ1Zik7Cj4gPiArCXJldHVybiBzdHJzdHIoYnVmLCAiU2lua19T dXBwb3J0OiB5ZXNcbiIpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpZ3RfcHNyX3Bv c3NpYmxlOgo+ID4gKyAqCj4gPiArICogUmV0dXJucyB0cnVlIGlmIGJvdGggdGhlIHNvdXJjZSBh bmQgc2luayBzdXBwb3J0IFBTUi4KPiA+ICsgKi8KPiA+ICtib29sIGlndF9wc3JfcG9zc2libGUo aW50IGZkKQo+ID4gK3sKPiA+ICsJY2hhciBidWZbNTEyXTsKPiA+ICsKPiA+ICsJaWd0X2RlYnVn ZnNfcmVhZChmZCwgImk5MTVfZWRwX3Bzcl9zdGF0dXMiLCBidWYpOwo+ID4gKwo+ID4gKwlyZXR1 cm4gaWd0X3Bzcl9zb3VyY2Vfc3VwcG9ydChmZCkgJiYKPiA+IGlndF9wc3Jfc2lua19zdXBwb3J0 KGZkKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogaWd0X3Bzcl9hY3RpdmU6Cj4gPiAr ICoKPiA+ICsgKiBSZXR1cm5zIHRydWUgaWYgUFNSIGlzIGFjdGl2ZSBvbiB0aGUgcGFuZWwuCj4g PiArICovCj4gPiArYm9vbCBpZ3RfcHNyX2FjdGl2ZShpbnQgZmQpCj4gPiArewo+ID4gKwljaGFy IGJ1Zls1MTJdOwo+ID4gKwlib29sIGFjdHJldCA9IGZhbHNlOwo+ID4gKwlib29sIGh3YWN0cmV0 ID0gZmFsc2U7Cj4gPiArCj4gPiArCWlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jf c3RhdHVzIiwgYnVmKTsKPiA+ICsJaHdhY3RyZXQgPSAoc3Ryc3RyKGJ1ZiwgIkhXIEVuYWJsZWQg JiBBY3RpdmUgYml0OiB5ZXNcbiIpICE9Cj4gPiBOVUxMKTsKPiA+ICsJYWN0cmV0ID0gKHN0cnN0 cihidWYsICJBY3RpdmU6IHllc1xuIikgIT0gTlVMTCk7Cj4gPiArCWlndF9kZWJ1ZygiaHdhY3Ry ZXQ6ICVzIGFjdHJldDogJXNcbiIsIGh3YWN0cmV0ID8gInRydWUiIDoKPiA+ICJmYWxzZSIsCj4g PiArCQnCoGFjdHJldCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwo+ID4gKwlyZXR1cm4gaHdhY3RyZXQg JiYgYWN0cmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpZ3RfcHNyX2F3YWl0X3N0 YXR1czoKPiA+ICsgKiBAYWN0aXZlOiBBIGJvb2xlYW4gdGhhdCBjYXVzZXMgdGhlIGZ1bmN0aW9u IHRvIHdhaXQgZm9yIFBTUiB0bwo+ID4gYWN0aXZhdGUKPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgc2V0IHRvIHRydWUsIG9yIHRvIHdhaXQgZm9yIFBTUiB0byBkZWFjdGl2YXRlIGlmCj4g PiBmYWxzZS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGNv bmRpdGlvbiBpcyBtZXQuCj4gPiArICovCj4gPiArYm9vbCBpZ3RfcHNyX2F3YWl0X3N0YXR1cyhp bnQgZmQsIGJvb2wgYWN0aXZlKQo+ID4gK3sKPiA+ICsJY29uc3QgaW50IHRpbWVvdXQgPSAxMDsK PiA+ICsJaW50IGNvdW50ID0gMDsKPiA+ICsJd2hpbGUgKGNvdW50IDwgdGltZW91dCkgewo+ID4g KwkJaWYgKGlndF9wc3JfYWN0aXZlKGZkKSA9PSBhY3RpdmUpIHsKPiA+ICsJCQlpZ3RfZGVidWco IlBTUiAlcyBhZnRlciAlZCBzZWNvbmRzLlxuIiwKPiA+ICsJCQkJwqDCoGFjdGl2ZSA/ICJBY3Rp dmUiIDogIkluYWN0aXZlIiwKPiA+IGNvdW50KTsKPiA+ICsJCQlyZXR1cm4gdHJ1ZTsKPiA+ICsJ CX0KPiA+ICsJCWNvdW50Kys7Cj4gPiArCQlzbGVlcCgxKTsKPiA+ICsJfQo+ID4gKwlyZXR1cm4g ZmFsc2U7Cj4gCj4gU2luY2UgdGhpcyBpcyBpbiBhIGxpYiBub3csIGNhbiB5b3UgcGxlYXNlIG1h a2UgdXNlIG9mIGlndF93YWl0IG9yIGp1c3QKPiBtYWtlIGl0IHdvcmsgYXMgZXhwZWN0ZWQgd2hl biB0aGUgc2lnbmFsIGhlbHBlciBpcyBhY3RpdmU/CgpTdXJlLgoKPiAKPiA+ICt9Cj4gPiArCj4g PiArLyoqCj4gPiArICogaWd0X3Bzcl9lbmFibGVkOgo+ID4gKyAqCj4gPiArICogUmV0dXJucyB0 cnVlIGlmIHRoZSBQU1IgZmVhdHVyZSBpcyBlbmFibGVkLgo+ID4gKyAqLwo+ID4gK2Jvb2wgaWd0 X3Bzcl9lbmFibGVkKGludCBmZCkKPiA+ICt7Cj4gPiArCWNoYXIgYnVmWzI1Nl07Cj4gPiArCj4g PiArCWlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVmKTsKPiA+ ICsJcmV0dXJuIHN0cnN0cihidWYsICJFbmFibGVkOiB5ZXNcbiIpOwo+ID4gK30KPiA+ICsKPiA+ ICsvKioKPiA+ICsgKiBpZ3RfcHNyX3ByaW50X3N0YXR1czoKPiA+ICsgKgo+ID4gKyAqIER1bXBz IHRoZSBjb250ZW50cyBvZiBpOTE1X2VkcF9wc3Jfc3RhdHVzIGZyb20gZGVidWdmcy4KPiA+ICsg Ki8KPiA+ICt2b2lkIGlndF9wc3JfcHJpbnRfc3RhdHVzKGludCBmZCkKPiA+ICt7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoGNoYXIgYnVmWzI1Nl07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoGln dF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVmKTsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgaWd0X2luZm8oIlBTUiBzdGF0dXM6XG4lc1xuIiwgYnVmKTsKPiA+ICt9Cj4g PiArCj4gPiArLyoqCj4gPiArICogaWd0X3Bzcl92YWxpZF9jb25uZWN0b3I6Cj4gPiArICogQGNv bm5lY3RvcjogYSBkcm1Nb2RlQ29ubmVjdG9yIHBvaW50ZXIgdG8gY2hlY2sKPiA+ICsgKgo+ID4g KyAqIFJldHVybnMgdHJ1ZSBpZiBjb25uZWN0b3IgaXMgYW4gZURQIGNvbm5lY3Rvci4KPiA+ICsg Ki8KPiA+ICtib29sIGlndF9wc3JfdmFsaWRfY29ubmVjdG9yKGRybU1vZGVDb25uZWN0b3JQdHIg Y29ubmVjdG9yKQo+ID4gK3sKPiA+ICsJcmV0dXJuIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBl ID09Cj4gPiBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4g PiArICogaWd0X3Bzcl9maW5kX2dvb2RfbW9kZQo+ID4gKyAqIEBjb25uZWN0b3I6IGEgZHJtTW9k ZUNvbm5lY3RvciBwb2ludGVyIHRvIGZpbmQgdGhlIG1vZGUgb24KPiA+ICsgKiBAbW9kZTogYSBk cm1Nb2RlTW9kZVB0ciBwb2ludGVyIHRoYXQgaXMgc2V0IHRvIHRoZSBtYXRjaGluZyBtb2RlCj4g PiArICoKPiA+ICsgKiBSZXR1cm5zIHRydWUgKGFuZCBwb3B1bGF0ZXMgKm1vZGUgd2l0aCB0aGUg bWF0Y2gpIGlmIGEgdmFsaWQKPiA+ICsgKiBQU1IgbWRvZSBpcyBmb3VuZCwgYW5kIGZhbHNlIG90 aGVyd2lzZS4KPiA+ICsgKi8KPiA+ICtib29sIGlndF9wc3JfZmluZF9nb29kX21vZGUoZHJtTW9k ZUNvbm5lY3RvclB0ciBjb25uZWN0b3IsCj4gPiArCQkJwqDCoMKgwqBkcm1Nb2RlTW9kZUluZm9Q dHIgKm1vZGUpCj4gPiArewo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJaWYgKCFjb25uZWN0b3It PmNvdW50X21vZGVzKSB7Cj4gPiArCQlpZ3Rfd2Fybigibm8gbW9kZXMgZm9yIGNvbm5lY3RvciAl ZC5cbiIsCj4gPiArCQkJwqBjb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCk7Cj4gPiArCQlyZXR1cm4g ZmFsc2U7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlpZ3RfZGVidWcoIkNvbm5lY3RvciBoYXMgJWQg bW9kZXMuXG4iLCBjb25uZWN0b3ItCj4gPiA+Y291bnRfbW9kZXMpOwo+ID4gKwl9Cj4gPiArCj4g PiArCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBpKyspIHsKPiA+ICsJ CWlmICgoY29ubmVjdG9yLT5tb2Rlc1tpXS52dG90YWwgLQo+ID4gKwkJwqDCoMKgwqDCoGNvbm5l Y3Rvci0+bW9kZXNbaV0udmRpc3BsYXkpID49IDM2KSB7Cj4gPiArCQkJaWd0X2RlYnVnKCJNb2Rl ICVkIGdvb2QgZm9yIFBTUi5cbiIsIGkpOwo+ID4gKwkJCSptb2RlID0gJihjb25uZWN0b3ItPm1v ZGVzW2ldKTsKPiA+ICsJCQlyZXR1cm4gdHJ1ZTsKPiAKPiBTaW5jZSB0aGUgY2FsbGVycyBtYXkg YmUgdHJ5aW5nIHRvIGZpbmQgbW9kZXMgdGhhdCBmaXQgb3RoZXIKPiByZXN0cmljdGlvbnMgKGUu Zy4sIGttc19mcm9udGJ1ZmZlcl90cmFja2luZykgSSdkIHN1Z2dlc3QgeW91IHRvCj4gZXh0cmFj dCBpZ3RfcHNyX21vZGVfaXNfY29tcGF0aWJsZShtb2RlKSB3aXRoIHRoZSB2dG90YWwvdmRpc3Bs YXkKPiBjaGVjay4KCkNhbiB5b3UgZXhwbGFpbiB3aGF0IHlvdSBtZWFuIGJ5IGV4dHJhY3QgaGVy ZT8gIERvIHlvdSBtZWFuIGhhdmUgaXQgbGl2ZQpzb21ld2hlcmUgb3RoZXIgdGhhbiB3aXRoIHRo ZSBvdGhlciBQU1IgZnVuY3Rpb25zPyAgSWYgc28sIHdoYXQgd291bGQKeW91IHN1Z2dlc3Q/Cgo+ IAo+ID4gKwkJfSBlbHNlIHsKPiA+ICsJCQlpZ3RfZGVidWcoIlRocm93aW5nIG91dCBtb2RlICVk XG4iLCBpKTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwlyZXR1cm4gZmFsc2U7Cj4gPiArfQo+ID4g Kwo+ID4gK2ludCBpZ3RfcHNyX29wZW5fc2lua19jcmMoaW50IGRybV9mZCkKPiA+ICt7Cj4gPiAr CWludCBjcmNfZmQ7Cj4gPiArCj4gPiArCWNyY19mZCA9IG9wZW5hdChkcm1fZmQsICJpOTE1X3Np bmtfY3JjX2VEUDEiLCBPX1JET05MWSk7Cj4gPiArCWlndF9hc3NlcnRfbHRlKDAsIGNyY19mZCk7 Cj4gPiArCXJldHVybiBjcmNfZmQ7Cj4gPiArfQo+ID4gKwo+ID4gKwo+IAo+IFBsZWFzZSBhZGQg ZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBvbmUsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZQo+IGV4cGVj dGF0aW9uIGZvciAiZGF0YSIuCgpHb29kIGNhbGwuICAKPiA+ICtpbnQgaWd0X3Bzcl9nZXRfc2lu a19jcmMoaW50IGZkLCBjaGFyICpkYXRhKQo+ID4gK3sKPiA+ICsJaW50IHJjLCBlcnJub187Cj4g PiArCWNoYXIgYnVmWzEzXTsKPiA+ICsKPiA+ICsJbWVtc2V0KGJ1ZiwgMCwgMTMpOwo+ID4gKwls c2VlayhmZCwgMCwgU0VFS19TRVQpOwo+ID4gKwo+ID4gKwlyYyA9IHJlYWQoZmQsIGJ1ZiwgMTIp Owo+ID4gKwllcnJub18gPSBlcnJubzsKPiA+ICsKPiA+ICsJaWYgKHJjID09IC0xKSB7Cj4gPiAr CQlpZiAoZXJybm9fID09IEVOT1RUWSkKPiA+ICsJCQlpZ3RfaW5mbygiU2luayBDUkMgbm90IHN1 cHBvcnRlZDogcGFuZWwKPiA+IGRvZXNuJ3Qgc3VwcG9ydCBpdFxuIik7Cj4gPiArCQllbHNlIGlm IChlcnJub18gIT0gRVRJTUVET1VUKQo+ID4gKwkJCWlndF9hc3NlcnRfZihyYyAhPSAtMSwgIlVu ZXhwZWN0ZWQgZXJyb3I6Cj4gPiAlZFxuIiwKPiA+ICsJCQkJwqDCoMKgwqDCoGVycm5vXyk7Cj4g PiArCQlyZXR1cm4gZXJybm9fOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJaW50IGk7Cj4gPiArCQl1 bnNpZ25lZCBsb25nIGxvbmcgdmFsID0gc3RydG91bGwoYnVmLCBOVUxMLCAxNik7Cj4gPiArCj4g PiArCQlmb3IgKGkgPSA1OyBpID49IDA7IGktLSwgdmFsID4+PSA4KSB7Cj4gPiArCQkJZGF0YVtp XSA9ICh1bnNpZ25lZCBjaGFyKSAodmFsICYgMHhmZik7Cj4gPiArCQl9Cj4gCj4gVGhpcyBpcyBh IHZlcnkgbm9uLXRyaXZpYWwgcGllY2Ugb2YgY29kZSwgYSBjb21tZW50IGhlcmUgd291bGQgYmUg Z29vZC4KPiAgV2h5IGFyZSB3ZSBkb2luZyB0aGlzPyBJJ20gbm90IHN1cmUgd2hhdCdzIHRoZSB2 YWx1ZSBpbiBjb252ZXJ0aW5nIENSQwo+IGRhdGEgZm9ybWF0cyB3aGVuIHRoZSBvbmx5IHRoaW5n IHdlIGRvIGlzIGNoZWNrIGZvciBlcXVhbGl0eS4KCldlIHdlcmUgYWN0dWFsbHkgZGVhbGluZyB3 aXRoIHRoZSBDUkMgdmFsdWVzIGRpZmZlcmVudGx5IGFjcm9zcyB0ZXN0cy4gIEluCnNvbWUgY2Fz ZXMgdGhlIHZhbHVlcyB3ZXJlIGtlcHQgYXMgc3RyaW5ncyBhbmQgY29tcGFyZWQgd2l0aCBzdHJp bmcgZnVuY3MsCmFuZCBpbiBvdGhlcnMgdGhleSB3ZXJlIGNvbnZlcnRlZCB0byBiaW5hcnkgdmFs dWVzIGFuZCB0aGVuIGNvbXBhcmVkIHdpdGgKbWVtY21wLiAgSSBjaG9zZSB0byBoYXZlIHRoZSBi aW5hcnkgdmFsdWVzIGJlIHdoYXQgaXMgdXNlZC4gIEknbGwgYWRkIGEKY29tbWVudC4KCj4gPiAr CQlyZXR1cm4gMDsKPiA+ICsJfQo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X3Bzci5o IGIvbGliL2lndF9wc3IuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAw MDAuLmQ5NGNkZmEKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xpYi9pZ3RfcHNyLmgKPiA+ IEBAIC0wLDAgKzEsNDMgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVs IENvcnBvcmF0aW9uCj4gPiArICoKPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgo+ID4gb2J0YWluaW5nIGEKPiA+ICsgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlCj4gPiAiU29mdHdhcmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+ID4gbGltaXRhdGlvbgo+ID4gKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLAo+ID4gc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQo+ID4gdGhlCj4gPiArICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKPiA+ IGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nCj4gPiB0aGUgbmV4dAo+ID4gKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bAo+ID4gcG9ydGlvbnMgb2YgdGhlCj4gPiArICogU29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwKPiA+IEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKg SU4gTk8KPiA+IEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMKPiA+IE9SIE9USEVSCj4gPiAr ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsCj4gPiBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gT1RIRVIgREVBTElOR1MKPiA+ ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBJR1RfUFNS X0gKPiA+ICsjZGVmaW5lIElHVF9QU1JfSAo+ID4gKwo+ID4gKyNkZWZpbmUgaWd0X3Bzcl9lbmFi bGUoKSBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoImVuYWJsZV9wc3IiLCAxKQo+ID4gKyNkZWZp bmUgaWd0X3Bzcl9kaXNhYmxlKCkgaWd0X3NldF9tb2R1bGVfcGFyYW1faW50KCJlbmFibGVfcHNy IiwgMCkKPiA+ICsKPiA+ICtib29sIGlndF9wc3Jfc2lua19zdXBwb3J0KGludCBmZCk7Cj4gPiAr Ym9vbCBpZ3RfcHNyX3NvdXJjZV9zdXBwb3J0KGludCBmZCk7Cj4gPiArYm9vbCBpZ3RfcHNyX3Bv c3NpYmxlKGludCBmZCk7Cj4gPiArYm9vbCBpZ3RfcHNyX2FjdGl2ZShpbnQgZmQpOwo+ID4gK2Jv b2wgaWd0X3Bzcl9hd2FpdF9zdGF0dXMoaW50IGZkLCBib29sIGFjdGl2ZSk7Cj4gPiArYm9vbCBp Z3RfcHNyX2VuYWJsZWQoaW50IGZkKTsKPiA+ICt2b2lkIGlndF9wc3JfcHJpbnRfc3RhdHVzKGlu dCBmZCk7Cj4gPiArYm9vbCBpZ3RfcHNyX3ZhbGlkX2Nvbm5lY3Rvcihkcm1Nb2RlQ29ubmVjdG9y UHRyIGNvbm5lY3Rvcik7Cj4gPiArYm9vbCBpZ3RfcHNyX2ZpbmRfZ29vZF9tb2RlKGRybU1vZGVD b25uZWN0b3JQdHIgY29ubmVjdG9yLAo+ID4gKwkJCcKgwqDCoMKgZHJtTW9kZU1vZGVJbmZvUHRy ICptb2RlKTsKPiA+ICtpbnQgaWd0X3Bzcl9vcGVuX3NpbmtfY3JjKGludCBkcm1fZmQpOwo+ID4g K2ludCBpZ3RfcHNyX2dldF9zaW5rX2NyYyhpbnQgZmQsIGNoYXIgKmRhdGEpOwo+ID4gKwo+ID4g KyNlbmRpZiAvKiBJR1RfUFNSX0ggKi8KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==