From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH IGT v2 2/6] lib: Add PSR utility functions to igt library. Date: Fri, 30 Jun 2017 17:54:32 -0300 Message-ID: <1498856072.22381.3.camel@intel.com> References: <1498849944-26404-1-git-send-email-jim.bride@linux.intel.com> <1498849944-26404-3-git-send-email-jim.bride@linux.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 F16A46E868 for ; Fri, 30 Jun 2017 20:54:35 +0000 (UTC) In-Reply-To: <1498849944-26404-3-git-send-email-jim.bride@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jim Bride , intel-gfx@lists.freedesktop.org Cc: Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org RW0gU2V4LCAyMDE3LTA2LTMwIMOgcyAxMjoxMiAtMDcwMCwgSmltIEJyaWRlIGVzY3JldmV1Ogo+ IEZhY3RvciBvdXQgc29tZSBjb2RlIHRoYXQgd2FzIHJlcGxpY2F0ZWQgaW4gdGhyZWUgdGVzdCB1 dGlsaXRpZXMgaW50bwo+IHNvbWUgbmV3IElHVCBsaWJyYXJ5IGZ1bmN0aW9ucyBzbyB0aGF0IHdl IGFyZSBjaGVja2luZyBQU1Igc3RhdHVzIGluCj4gYSBjb25zaXN0ZW50IGZhc2hpb24gYWNyb3Nz IGFsbCBvZiBvdXIgUFNSIHRlc3RzLgo+IAo+IHYyOiAqIEFkZCBzaW5rIENSQyBoZWxwZXIgZnVu Y3Rpb24KPiDCoMKgwqDCoCogTWlzYy4gYnVnIGZpeGVzCj4gwqDCoMKgwqAqIFJlYmFzZQo+IAo+ IENjOiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4gQ2M6IFBhdWxvIFph bm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEppbSBCcmlk ZSA8amltLmJyaWRlQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiDCoGxpYi9NYWtlZmlsZS5zb3Vy Y2VzIHzCoMKgwqAyICsKPiDCoGxpYi9pZ3QuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg wqAxICsKPiDCoGxpYi9pZ3RfcHNyLmPCoMKgwqDCoMKgwqDCoMKgfCAyMzUKPiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoGxpYi9pZ3RfcHNy LmjCoMKgwqDCoMKgwqDCoMKgfMKgwqA0MyArKysrKysrKysrCj4gwqA0IGZpbGVzIGNoYW5nZWQs IDI4MSBpbnNlcnRpb25zKCspCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9wc3IuYwo+ IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfcHNyLmgKPiAKPiBkaWZmIC0tZ2l0IGEvbGli L01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDUzZmRiNTQu LjZhNzNjOGMgMTAwNjQ0Cj4gLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9saWIv TWFrZWZpbGUuc291cmNlcwo+IEBAIC04Myw2ICs4Myw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CcKg CVwKPiDCoAl1d2lsZG1hdC91d2lsZG1hdC5jCVwKPiDCoAlpZ3Rfa21vZC5jCQlcCj4gwqAJaWd0 X2ttb2QuaAkJXAo+ICsJaWd0X3Bzci5jCQlcCj4gKwlpZ3RfcHNyLmgJCVwKPiDCoAkkKE5VTEwp Cj4gwqAKPiDCoC5QSE9OWTogdmVyc2lvbi5oLnRtcAo+IGRpZmYgLS1naXQgYS9saWIvaWd0Lmgg Yi9saWIvaWd0LmgKPiBpbmRleCBhMDY5ZGViLi4wYjhlM2E4IDEwMDY0NAo+IC0tLSBhL2xpYi9p Z3QuaAo+ICsrKyBiL2xpYi9pZ3QuaAo+IEBAIC0zNyw2ICszNyw3IEBACj4gwqAjaW5jbHVkZSAi aWd0X2d0LmgiCj4gwqAjaW5jbHVkZSAiaWd0X2ttcy5oIgo+IMKgI2luY2x1ZGUgImlndF9wbS5o Igo+ICsjaW5jbHVkZSAiaWd0X3Bzci5oIgo+IMKgI2luY2x1ZGUgImlndF9zdGF0cy5oIgo+IMKg I2lmZGVmIEhBVkVfQ0hBTUVMSVVNCj4gwqAjaW5jbHVkZSAiaWd0X2NoYW1lbGl1bS5oIgo+IGRp ZmYgLS1naXQgYS9saWIvaWd0X3Bzci5jIGIvbGliL2lndF9wc3IuYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTI4MjNiZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9s aWIvaWd0X3Bzci5jCj4gQEAgLTAsMCArMSwyMzUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKp IDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiBvYnRhaW5pbmcgYQo+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlCj4gIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4gbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwK PiBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQo+IHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+IGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcKPiB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKPiBwb3J0aW9ucyBvZiB0aGUKPiAr ICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+IEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+IE1FUkNI QU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC7CoMKgSU4gTk8KPiBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+IE9S IE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLAo+IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+IE9USEVSIERFQUxJTkdT Cj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4g KyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+ Cj4gKwo+ICsvKioKPiArICogU0VDVElPTjppZ3RfcHNyCj4gKyAqIEBzaG9ydF9kZXNjcmlwdGlv bjogUGFuZWwgU2VsZiBSZWZyZXNoIGhlbHBlcnMKPiArICogQHRpdGxlOiBQYW5lbCBTZWxmIFJl ZnJlc2gKPiArICogQGluY2x1ZGU6IGlndC5oCj4gKyAqCj4gKyAqIFRoaXMgbGlicmFyeSBwcm92 aWRlcyB2YXJpb3VzIGhlbHBlcnMgdG8gZW5hYmxlIFBhbmVsIFNlbGYKPiBSZWZyZXNoLAo+ICsg KiBhcyB3ZWxsIGFzIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBQU1Igb24gdGhlIHN5c3RlbSAoZW5h YmxlZCB2cy4KPiArICogZGlzYWJsZWQsIGFjdGl2ZSB2cy4gaW5hY3RpdmUpIG9yIHRvIHdhaXQg Zm9yIFBTUiB0byBiZSBhY3RpdmUKPiArICogb3IgaW5hY3RpdmUuCj4gKyAqLwo+ICsKPiArLyoq Cj4gKyAqIGlndF9wc3Jfc291cmNlX3N1cHBvcnQ6Cj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1ZSBp ZiB0aGUgc291cmNlIHN1cHBvcnRzIFBTUi4KPiArICovCj4gK2Jvb2wgaWd0X3Bzcl9zb3VyY2Vf c3VwcG9ydChpbnQgZmQpCj4gK3sKPiArCWNoYXIgYnVmWzUxMl07Cj4gKwo+ICsJaWd0X2RlYnVn ZnNfcmVhZChmZCwgImk5MTVfZWRwX3Bzcl9zdGF0dXMiLCBidWYpOwo+ICsKPiArCXJldHVybiBz dHJzdHIoYnVmLCAiU291cmNlX09LOiB5ZXNcbiIpOwo+ICt9Cj4gKwo+ICsKPiArLyoqCj4gKyAq IGlndF9wc3Jfc2lua19zdXBwb3J0Ogo+ICsgKgo+ICsgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1 cnJlbnQgZURQIHBhbmVsIHN1cHBvcnRzIFBTUi4KPiArICovCj4gK2Jvb2wgaWd0X3Bzcl9zaW5r X3N1cHBvcnQoaW50IGZkKQo+ICt7Cj4gKwljaGFyIGJ1ZlsyNTZdOwoKV2h5IGFyZSBzb21lIGJ1 ZmZlcnMgNTEyIHdoaWxlIHRoZSBvdGhlcnMgYXJlIDI1Nj8gVGhleSdyZSBib3RoIGZvciB0aGUK c2FtZSBmaWxlLgoKPiArCj4gKwlpZ3RfZGVidWdmc19yZWFkKGZkLCAiaTkxNV9lZHBfcHNyX3N0 YXR1cyIsIGJ1Zik7Cj4gKwlyZXR1cm4gc3Ryc3RyKGJ1ZiwgIlNpbmtfU3VwcG9ydDogeWVzXG4i KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9wc3JfcG9zc2libGU6Cj4gKyAqCj4gKyAqIFJl dHVybnMgdHJ1ZSBpZiBib3RoIHRoZSBzb3VyY2UgYW5kIHNpbmsgc3VwcG9ydCBQU1IuCj4gKyAq Lwo+ICtib29sIGlndF9wc3JfcG9zc2libGUoaW50IGZkKQo+ICt7Cj4gKwljaGFyIGJ1Zls1MTJd Owo+ICsKPiArCWlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVm KTsKPiArCj4gKwlyZXR1cm4gaWd0X3Bzcl9zb3VyY2Vfc3VwcG9ydChmZCkgJiYKPiBpZ3RfcHNy X3Npbmtfc3VwcG9ydChmZCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfcHNyX2FjdGl2ZToK PiArICoKPiArICogUmV0dXJucyB0cnVlIGlmIFBTUiBpcyBhY3RpdmUgb24gdGhlIHBhbmVsLgo+ ICsgKi8KPiArYm9vbCBpZ3RfcHNyX2FjdGl2ZShpbnQgZmQpCj4gK3sKPiArCWNoYXIgYnVmWzUx Ml07Cj4gKwlib29sIGFjdHJldCA9IGZhbHNlOwo+ICsJYm9vbCBod2FjdHJldCA9IGZhbHNlOwo+ ICsKPiArCWlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVmKTsK PiArCWh3YWN0cmV0ID0gKHN0cnN0cihidWYsICJIVyBFbmFibGVkICYgQWN0aXZlIGJpdDogeWVz XG4iKSAhPQo+IE5VTEwpOwo+ICsJYWN0cmV0ID0gKHN0cnN0cihidWYsICJBY3RpdmU6IHllc1xu IikgIT0gTlVMTCk7Cj4gKwlpZ3RfZGVidWcoImh3YWN0cmV0OiAlcyBhY3RyZXQ6ICVzXG4iLCBo d2FjdHJldCA/ICJ0cnVlIiA6Cj4gImZhbHNlIiwKPiArCQnCoGFjdHJldCA/ICJ0cnVlIiA6ICJm YWxzZSIpOwo+ICsJcmV0dXJuIGh3YWN0cmV0ICYmIGFjdHJldDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIGlndF9wc3JfYXdhaXRfc3RhdHVzOgo+ICsgKiBAYWN0aXZlOiBBIGJvb2xlYW4gdGhhdCBj YXVzZXMgdGhlIGZ1bmN0aW9uIHRvIHdhaXQgZm9yIFBTUiB0bwo+IGFjdGl2YXRlCj4gKyAqwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiBzZXQgdG8gdHJ1ZSwgb3IgdG8gd2FpdCBmb3IgUFNSIHRvIGRl YWN0aXZhdGUgaWYKPiBmYWxzZS4KPiArICoKPiArICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1 ZXN0ZWQgY29uZGl0aW9uIGlzIG1ldC4KPiArICovCj4gK2Jvb2wgaWd0X3Bzcl9hd2FpdF9zdGF0 dXMoaW50IGZkLCBib29sIGFjdGl2ZSkKPiArewo+ICsJY29uc3QgaW50IHRpbWVvdXQgPSAxMDsK PiArCWludCBjb3VudCA9IDA7Cj4gKwl3aGlsZSAoY291bnQgPCB0aW1lb3V0KSB7Cj4gKwkJaWYg KGlndF9wc3JfYWN0aXZlKGZkKSA9PSBhY3RpdmUpIHsKPiArCQkJaWd0X2RlYnVnKCJQU1IgJXMg YWZ0ZXIgJWQgc2Vjb25kcy5cbiIsCj4gKwkJCQnCoMKgYWN0aXZlID8gIkFjdGl2ZSIgOiAiSW5h Y3RpdmUiLAo+IGNvdW50KTsKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwkJfQo+ICsJCWNvdW50Kys7 Cj4gKwkJc2xlZXAoMSk7Cj4gKwl9Cj4gKwlyZXR1cm4gZmFsc2U7CgpTaW5jZSB0aGlzIGlzIGlu IGEgbGliIG5vdywgY2FuIHlvdSBwbGVhc2UgbWFrZSB1c2Ugb2YgaWd0X3dhaXQgb3IganVzdApt YWtlIGl0IHdvcmsgYXMgZXhwZWN0ZWQgd2hlbiB0aGUgc2lnbmFsIGhlbHBlciBpcyBhY3RpdmU/ CgoKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9wc3JfZW5hYmxlZDoKPiArICoKPiArICogUmV0 dXJucyB0cnVlIGlmIHRoZSBQU1IgZmVhdHVyZSBpcyBlbmFibGVkLgo+ICsgKi8KPiArYm9vbCBp Z3RfcHNyX2VuYWJsZWQoaW50IGZkKQo+ICt7Cj4gKwljaGFyIGJ1ZlsyNTZdOwo+ICsKPiArCWln dF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVmKTsKPiArCXJldHVy biBzdHJzdHIoYnVmLCAiRW5hYmxlZDogeWVzXG4iKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGln dF9wc3JfcHJpbnRfc3RhdHVzOgo+ICsgKgo+ICsgKiBEdW1wcyB0aGUgY29udGVudHMgb2YgaTkx NV9lZHBfcHNyX3N0YXR1cyBmcm9tIGRlYnVnZnMuCj4gKyAqLwo+ICt2b2lkIGlndF9wc3JfcHJp bnRfc3RhdHVzKGludCBmZCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoMKgY2hhciBidWZbMjU2XTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqBpZ3RfZGVidWdmc19yZWFkKGZkLCAiaTkxNV9lZHBfcHNy X3N0YXR1cyIsIGJ1Zik7Cj4gK8KgwqDCoMKgwqDCoMKgwqBpZ3RfaW5mbygiUFNSIHN0YXR1czpc biVzXG4iLCBidWYpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0X3Bzcl92YWxpZF9jb25uZWN0 b3I6Cj4gKyAqIEBjb25uZWN0b3I6IGEgZHJtTW9kZUNvbm5lY3RvciBwb2ludGVyIHRvIGNoZWNr Cj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1ZSBpZiBjb25uZWN0b3IgaXMgYW4gZURQIGNvbm5lY3Rv ci4KPiArICovCj4gK2Jvb2wgaWd0X3Bzcl92YWxpZF9jb25uZWN0b3IoZHJtTW9kZUNvbm5lY3Rv clB0ciBjb25uZWN0b3IpCj4gK3sKPiArCXJldHVybiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlw ZSA9PQo+IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0 X3Bzcl9maW5kX2dvb2RfbW9kZQo+ICsgKiBAY29ubmVjdG9yOiBhIGRybU1vZGVDb25uZWN0b3Ig cG9pbnRlciB0byBmaW5kIHRoZSBtb2RlIG9uCj4gKyAqIEBtb2RlOiBhIGRybU1vZGVNb2RlUHRy IHBvaW50ZXIgdGhhdCBpcyBzZXQgdG8gdGhlIG1hdGNoaW5nIG1vZGUKPiArICoKPiArICogUmV0 dXJucyB0cnVlIChhbmQgcG9wdWxhdGVzICptb2RlIHdpdGggdGhlIG1hdGNoKSBpZiBhIHZhbGlk Cj4gKyAqIFBTUiBtZG9lIGlzIGZvdW5kLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgo+ICsgKi8KPiAr Ym9vbCBpZ3RfcHNyX2ZpbmRfZ29vZF9tb2RlKGRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9y LAo+ICsJCQnCoMKgwqDCoGRybU1vZGVNb2RlSW5mb1B0ciAqbW9kZSkKPiArewo+ICsJaW50IGk7 Cj4gKwo+ICsJaWYgKCFjb25uZWN0b3ItPmNvdW50X21vZGVzKSB7Cj4gKwkJaWd0X3dhcm4oIm5v IG1vZGVzIGZvciBjb25uZWN0b3IgJWQuXG4iLAo+ICsJCQnCoGNvbm5lY3Rvci0+Y29ubmVjdG9y X2lkKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9IGVsc2Ugewo+ICsJCWlndF9kZWJ1ZygiQ29u bmVjdG9yIGhhcyAlZCBtb2Rlcy5cbiIsIGNvbm5lY3Rvci0KPiA+Y291bnRfbW9kZXMpOwo+ICsJ fQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBpKyspIHsK PiArCQlpZiAoKGNvbm5lY3Rvci0+bW9kZXNbaV0udnRvdGFsIC0KPiArCQnCoMKgwqDCoMKgY29u bmVjdG9yLT5tb2Rlc1tpXS52ZGlzcGxheSkgPj0gMzYpIHsKPiArCQkJaWd0X2RlYnVnKCJNb2Rl ICVkIGdvb2QgZm9yIFBTUi5cbiIsIGkpOwo+ICsJCQkqbW9kZSA9ICYoY29ubmVjdG9yLT5tb2Rl c1tpXSk7Cj4gKwkJCXJldHVybiB0cnVlOwoKU2luY2UgdGhlIGNhbGxlcnMgbWF5IGJlIHRyeWlu ZyB0byBmaW5kIG1vZGVzIHRoYXQgZml0IG90aGVyCnJlc3RyaWN0aW9ucyAoZS5nLiwga21zX2Zy b250YnVmZmVyX3RyYWNraW5nKSBJJ2Qgc3VnZ2VzdCB5b3UgdG8KZXh0cmFjdCBpZ3RfcHNyX21v ZGVfaXNfY29tcGF0aWJsZShtb2RlKSB3aXRoIHRoZSB2dG90YWwvdmRpc3BsYXkKY2hlY2suCgoK PiArCQl9IGVsc2Ugewo+ICsJCQlpZ3RfZGVidWcoIlRocm93aW5nIG91dCBtb2RlICVkXG4iLCBp KTsKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK2ludCBpZ3RfcHNy X29wZW5fc2lua19jcmMoaW50IGRybV9mZCkKPiArewo+ICsJaW50IGNyY19mZDsKPiArCj4gKwlj cmNfZmQgPSBvcGVuYXQoZHJtX2ZkLCAiaTkxNV9zaW5rX2NyY19lRFAxIiwgT19SRE9OTFkpOwo+ ICsJaWd0X2Fzc2VydF9sdGUoMCwgY3JjX2ZkKTsKPiArCXJldHVybiBjcmNfZmQ7Cj4gK30KPiAr Cj4gKwoKUGxlYXNlIGFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIG9uZSwgZXNwZWNpYWxseSBh cm91bmQgdGhlCmV4cGVjdGF0aW9uIGZvciAiZGF0YSIuCgo+ICtpbnQgaWd0X3Bzcl9nZXRfc2lu a19jcmMoaW50IGZkLCBjaGFyICpkYXRhKQo+ICt7Cj4gKwlpbnQgcmMsIGVycm5vXzsKPiArCWNo YXIgYnVmWzEzXTsKPiArCj4gKwltZW1zZXQoYnVmLCAwLCAxMyk7Cj4gKwlsc2VlayhmZCwgMCwg U0VFS19TRVQpOwo+ICsKPiArCXJjID0gcmVhZChmZCwgYnVmLCAxMik7Cj4gKwllcnJub18gPSBl cnJubzsKPiArCj4gKwlpZiAocmMgPT0gLTEpIHsKPiArCQlpZiAoZXJybm9fID09IEVOT1RUWSkK PiArCQkJaWd0X2luZm8oIlNpbmsgQ1JDIG5vdCBzdXBwb3J0ZWQ6IHBhbmVsCj4gZG9lc24ndCBz dXBwb3J0IGl0XG4iKTsKPiArCQllbHNlIGlmIChlcnJub18gIT0gRVRJTUVET1VUKQo+ICsJCQlp Z3RfYXNzZXJ0X2YocmMgIT0gLTEsICJVbmV4cGVjdGVkIGVycm9yOgo+ICVkXG4iLAo+ICsJCQkJ wqDCoMKgwqDCoGVycm5vXyk7Cj4gKwkJcmV0dXJuIGVycm5vXzsKPiArCX0gZWxzZSB7Cj4gKwkJ aW50IGk7Cj4gKwkJdW5zaWduZWQgbG9uZyBsb25nIHZhbCA9IHN0cnRvdWxsKGJ1ZiwgTlVMTCwg MTYpOwo+ICsKPiArCQlmb3IgKGkgPSA1OyBpID49IDA7IGktLSwgdmFsID4+PSA4KSB7Cj4gKwkJ CWRhdGFbaV0gPSAodW5zaWduZWQgY2hhcikgKHZhbCAmIDB4ZmYpOwo+ICsJCX0KClRoaXMgaXMg YSB2ZXJ5IG5vbi10cml2aWFsIHBpZWNlIG9mIGNvZGUsIGEgY29tbWVudCBoZXJlIHdvdWxkIGJl IGdvb2QuCiBXaHkgYXJlIHdlIGRvaW5nIHRoaXM/IEknbSBub3Qgc3VyZSB3aGF0J3MgdGhlIHZh bHVlIGluIGNvbnZlcnRpbmcgQ1JDCmRhdGEgZm9ybWF0cyB3aGVuIHRoZSBvbmx5IHRoaW5nIHdl IGRvIGlzIGNoZWNrIGZvciBlcXVhbGl0eS4KCj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gK30KPiBk aWZmIC0tZ2l0IGEvbGliL2lndF9wc3IuaCBiL2xpYi9pZ3RfcHNyLmgKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmQ5NGNkZmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv bGliL2lndF9wc3IuaAo+IEBAIC0wLDAgKzEsNDMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKp IDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiBvYnRhaW5pbmcgYQo+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlCj4gIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4gbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwK PiBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQo+IHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+IGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcKPiB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKPiBwb3J0aW9ucyBvZiB0aGUKPiAr ICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+IEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+IE1FUkNI QU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC7CoMKgSU4gTk8KPiBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+IE9S IE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLAo+IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+IE9USEVSIERFQUxJTkdT Cj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIElHVF9QU1JfSAo+ ICsjZGVmaW5lIElHVF9QU1JfSAo+ICsKPiArI2RlZmluZSBpZ3RfcHNyX2VuYWJsZSgpIGlndF9z ZXRfbW9kdWxlX3BhcmFtX2ludCgiZW5hYmxlX3BzciIsIDEpCj4gKyNkZWZpbmUgaWd0X3Bzcl9k aXNhYmxlKCkgaWd0X3NldF9tb2R1bGVfcGFyYW1faW50KCJlbmFibGVfcHNyIiwgMCkKPiArCj4g K2Jvb2wgaWd0X3Bzcl9zaW5rX3N1cHBvcnQoaW50IGZkKTsKPiArYm9vbCBpZ3RfcHNyX3NvdXJj ZV9zdXBwb3J0KGludCBmZCk7Cj4gK2Jvb2wgaWd0X3Bzcl9wb3NzaWJsZShpbnQgZmQpOwo+ICti b29sIGlndF9wc3JfYWN0aXZlKGludCBmZCk7Cj4gK2Jvb2wgaWd0X3Bzcl9hd2FpdF9zdGF0dXMo aW50IGZkLCBib29sIGFjdGl2ZSk7Cj4gK2Jvb2wgaWd0X3Bzcl9lbmFibGVkKGludCBmZCk7Cj4g K3ZvaWQgaWd0X3Bzcl9wcmludF9zdGF0dXMoaW50IGZkKTsKPiArYm9vbCBpZ3RfcHNyX3ZhbGlk X2Nvbm5lY3Rvcihkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5lY3Rvcik7Cj4gK2Jvb2wgaWd0X3Bz cl9maW5kX2dvb2RfbW9kZShkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5lY3RvciwKPiArCQkJwqDC oMKgwqBkcm1Nb2RlTW9kZUluZm9QdHIgKm1vZGUpOwo+ICtpbnQgaWd0X3Bzcl9vcGVuX3Npbmtf Y3JjKGludCBkcm1fZmQpOwo+ICtpbnQgaWd0X3Bzcl9nZXRfc2lua19jcmMoaW50IGZkLCBjaGFy ICpkYXRhKTsKPiArCj4gKyNlbmRpZiAvKiBJR1RfUFNSX0ggKi8KX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==