From mboxrd@z Thu Jan 1 00:00:00 1970 From: sourab gupta Subject: Re: [PATCH 06/11] drm/i915: Framework for capturing command stream based OA reports Date: Fri, 19 Feb 2016 12:21:13 +0530 Message-ID: <1455864673.1920.10.camel@sourab-desktop> References: <1455600439-18480-1-git-send-email-sourab.gupta@intel.com> <1455600439-18480-7-git-send-email-sourab.gupta@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 ESMTP id 33A916E0F0 for ; Fri, 19 Feb 2016 06:49:01 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Robert Bragg Cc: "Wu, Jabin" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE2LTAyLTE3IGF0IDIzOjAwICswNTMwLCBSb2JlcnQgQnJhZ2cgd3JvdGU6Cj4g SGkgU291cmFiLAo+IAo+IAo+IEFzIFNlcmdpbyBNYXJ0aW5leiBoYXMgc3RhcnRlZCBleHBlcmlt ZW50aW5nIHdpdGggdGhpcyBpbiBncHV0b3AgYW5kCj4gcmVwb3J0ZWQgc2VlaW5nIGxvdHMgb2Yg RU5PU1BDIGVycm9ycyBiZWluZyByZXBvcnRlZCB3aGVuIHJlYWRpbmcgSQo+IGhhZCBhIGxvb2sg aW50byB0aGlzIGFuZCBzYXcgYSBmZXcgaXNzdWVzIHdpdGggaG93IHdlIGNoZWNrIHRoYXQKPiB0 aGVyZSdzIGRhdGEgYXZhaWxhYmxlIHRvIHJlYWQgaW4gY29tbWFuZCBzdHJlYW0gbW9kZSwgYW5k IGEgSSB0aGluawo+IHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3RseSBzb3J0aW5n IHRoZSBzYW1wbGVzIHNvbWV0aW1lcy4uLgoKSGkgUm9iZXJ0LApUaGFua3MgZm9yIHNwb3R0aW5n IHRoaXMgYW5vbWFseS4gSSdsbCBoYXZlIHRoaXMgZml4ZWQgaW4gdGhlIG5leHQKdmVyc2lvbiBv ZiBwYXRjaCBzZXQuCj4gCj4gT24gVHVlLCBGZWIgMTYsIDIwMTYgYXQgNToyNyBBTSwgPHNvdXJh Yi5ndXB0YUBpbnRlbC5jb20+IHdyb3RlOgo+ICAgICAgICAgRnJvbTogU291cmFiIEd1cHRhIDxz b3VyYWIuZ3VwdGFAaW50ZWwuY29tPgo+ICAgICAgICAgCj4gICAgICAgICAKPiAgICAgICAgIC1z dGF0aWMgYm9vbCBpOTE1X29hX2Nhbl9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0pCj4gICAgICAgICArc3RhdGljIGJvb2wgYXBwZW5kX29hX3Jjc19zYW1wbGUoc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0KPiAgICAgICAgICpzdHJlYW0sCj4gICAgICAgICArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaTkxNV9wZXJmX3JlYWRfc3RhdGUKPiAgICAgICAg ICpyZWFkX3N0YXRlLAo+ICAgICAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUKPiAgICAgICAgICpub2RlKQo+ICAgICAgICAg K3sKPiAgICAgICAgICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g c3RyZWFtLT5kZXZfcHJpdjsKPiAgICAgICAgICsgICAgICAgc3RydWN0IG9hX3NhbXBsZV9kYXRh IGRhdGEgPSB7IDAgfTsKPiAgICAgICAgICsgICAgICAgY29uc3QgdTggKnJlcG9ydCA9Cj4gICAg ICAgICBkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYuYWRkciArCj4gICAgICAgICAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9mZnNldDsKPiAgICAgICAgICsg ICAgICAgdTMyIHNhbXBsZV9mbGFncyA9IHN0cmVhbS0+c2FtcGxlX2ZsYWdzOwo+ICAgICAgICAg KyAgICAgICB1MzIgcmVwb3J0X3RzOwo+ICAgICAgICAgKwo+ICAgICAgICAgKyAgICAgICAvKgo+ ICAgICAgICAgKyAgICAgICAgKiBGb3J3YXJkIHRoZSBwZXJpb2RpYyBPQSBzYW1wbGVzIHdoaWNo IGhhdmUgdGhlCj4gICAgICAgICB0aW1lc3RhbXAgbG93ZXIKPiAgICAgICAgICsgICAgICAgICog dGhhbiB0aW1lc3RhbXAgb2YgdGhpcyBzYW1wbGUsIGJlZm9yZSBmb3J3YXJkaW5nCj4gICAgICAg ICB0aGlzIHNhbXBsZS4KPiAgICAgICAgICsgICAgICAgICogVGhpcyBlbnN1cmVzIHNhbXBsZXMg cmVhZCBieSB1c2VyIGFyZSBvcmRlciBhY2MuIHRvCj4gICAgICAgICB0aGVpciB0aW1lc3RhbXBz Cj4gICAgICAgICArICAgICAgICAqLwo+ICAgICAgICAgKyAgICAgICByZXBvcnRfdHMgPSAqKHUz MiAqKShyZXBvcnQgKyA0KTsKPiAgICAgICAgICsgICAgICAgZGV2X3ByaXYtPnBlcmYub2Eub3Bz LnJlYWQoc3RyZWFtLCByZWFkX3N0YXRlLAo+ICAgICAgICAgcmVwb3J0X3RzKTsKPiAgICAgICAg ICsKPiAgICAgICAgICsgICAgICAgaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9TT1VSQ0Vf SU5GTykKPiAgICAgICAgICsgICAgICAgICAgICAgICBkYXRhLnNvdXJjZSA9IEk5MTVfUEVSRl9P QV9FVkVOVF9TT1VSQ0VfUkNTOwo+ICAgICAgICAgKwo+ICAgICAgICAgKyAgICAgICBpZiAoc2Ft cGxlX2ZsYWdzICYgU0FNUExFX0NUWF9JRCkKPiAgICAgICAgICsgICAgICAgICAgICAgICBkYXRh LmN0eF9pZCA9IG5vZGUtPmN0eF9pZDsKPiAgICAgICAgICsKPiAgICAgICAgICsgICAgICAgaWYg KHNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpCj4gICAgICAgICArICAgICAgICAgICAg ICAgZGF0YS5yZXBvcnQgPSByZXBvcnQ7Cj4gICAgICAgICArCj4gICAgICAgICArICAgICAgIGFw cGVuZF9vYV9zYW1wbGUoc3RyZWFtLCByZWFkX3N0YXRlLCAmZGF0YSk7Cj4gICAgICAgICArCj4g ICAgICAgICArICAgICAgIHJldHVybiB0cnVlOwo+ICAgICAgICAgK30KPiAgICAgICAgICsKPiAg ICAgICAgICtzdGF0aWMgdm9pZCBvYV9yY3NfYXBwZW5kX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0KPiAgICAgICAgICpzdHJlYW0sCj4gICAgICAgICArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGk5MTVfcGVyZl9yZWFkX3N0YXRlCj4gICAgICAgICAqcmVh ZF9zdGF0ZSkKPiAgICAgICAgICt7Cj4gICAgICAgICArICAgICAgIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gICAgICAgICArICAgICAgIHN0 cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlICplbnRyeSwgKm5leHQ7Cj4gICAgICAgICArCj4g ICAgICAgICArICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwKPiAg ICAgICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXZfcHJpdi0+cGVyZi5u b2RlX2xpc3QsCj4gICAgICAgICBsaW5rKSB7Cj4gICAgICAgICArICAgICAgICAgICAgICAgaWYg KCEKPiAgICAgICAgIGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKGVudHJ5LT5yZXF1ZXN0LCB0 cnVlKSkKPiAgICAgICAgICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAg Kwo+ICAgICAgICAgKyAgICAgICAgICAgICAgIGlmICghYXBwZW5kX29hX3Jjc19zYW1wbGUoc3Ry ZWFtLCByZWFkX3N0YXRlLAo+ICAgICAgICAgZW50cnkpKQo+ICAgICAgICAgKyAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Cj4gICAgICAgICArCj4gICAgICAgICArICAgICAgICAgICAgICAg c3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7Cj4gICAgICAgICArICAg ICAgICAgICAgICAgbGlzdF9kZWwoJmVudHJ5LT5saW5rKTsKPiAgICAgICAgICsgICAgICAgICAg ICAgICBzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2spOwo+ICAgICAg ICAgKwo+ICAgICAgICAgKwo+ICAgICAgICAgIGk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2Vf X3VubG9ja2VkKGVudHJ5LT5yZXF1ZXN0KTsKPiAgICAgICAgICsgICAgICAgICAgICAgICBrZnJl ZShlbnRyeSk7Cj4gICAgICAgICArICAgICAgIH0KPiAgICAgICAgICsKPiAgICAgICAgICsgICAg ICAgLyogRmx1c2ggYW55IHJlbWFpbmluZyBwZXJpb2RpYyByZXBvcnRzICovCj4gICAgICAgICAr ICAgICAgIGRldl9wcml2LT5wZXJmLm9hLm9wcy5yZWFkKHN0cmVhbSwgcmVhZF9zdGF0ZSwKPiAg ICAgICAgIFUzMl9NQVgpOwo+ICAKPiBJIGRvbid0IHRoaW5rIHdlIGNhbiBmbHVzaCBhbGwgcmVt YWluaW5nIHBlcmlvZGljIHJlcG9ydHMgaGVyZSAtIGF0Cj4gbGVhc3Qgbm90IGlmIHdlIGhhdmUg YW55IGluLWZsaWdodCBNSV9SUEMgY29tbWFuZHMgLSBpbiBjYXNlIHRoZSBuZXh0Cj4gcmVxdWVz dCB0byBjb21wbGV0ZSBtaWdodCBoYXZlIHJlcG9ydHMgd2l0aCBlYXJsaWVyIHRpbWVzdGFtcHMg dGhhbgo+IHNvbWUgb2YgdGhlc2UgcGVyaW9kaWMgcmVwb3J0cy4KPiAKPiAKPiBFdmVuIGlmIHdl IGhhdmUgcGVyaW9kaWMgcmVwb3J0cyBhdmFpbGFibGUgSSB0aGluayB3ZSBuZWVkIHRvIHRocm90 dGxlCj4gZm9yd2FyZGluZyB0aGVtIGJhc2VkIG9uIHRoZSBjb21tYW5kIHN0cmVhbSByZXF1ZXN0 cyBjb21wbGV0aW5nLgo+IAo+IAo+IFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgdXNlcnNwYWNlIHNo b3VsZCB1bmRlcnN0YW5kIHdoZW4gaXQgZXhwbGljaXRseQo+IGRlY2lkZXMgdG8gdXNlIGNvbW1h bmQgc3RyZWFtIG1vZGUgaW4gY29uanVuY3Rpb24gd2l0aCBwZXJpb2RpYwo+IHNhbXBsaW5nLgo+ IApJIGFncmVlLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IGZsdXNoaW5nIG9mIHJlbWFpbmluZyBw ZXJpb2RpYyByZXBvcnRzCmhlcmUsIGluc3RlYWQgYW55IHBlcmlvZGljIHJlcG9ydHMgcmVtYWlu aW5nIGhlcmUgc2hvdWxkIGJlIHRha2VuIGNhcmUKb2YgZHVyaW5nIHRoZSBuZXh0IHByb2Nlc3Np bmcgb2YgY29tbWFuZCBzdHJlYW0gc2FtcGxlcy4KPiAgCj4gICAgICAgICArfQo+ICAgICAgICAg Kwo+ICAgICAgICAgK3N0YXRpYyBib29sIGNvbW1hbmRfc3RyZWFtX2J1Zl9pc19lbXB0eShzdHJ1 Y3QKPiAgICAgICAgIGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgICAgICAgICB7Cj4gICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ ZGV2X3ByaXY7Cj4gICAgICAgICAKPiAgICAgICAgIC0gICAgICAgcmV0dXJuICEKPiAgICAgICAg IGRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9idWZmZXJfaXNfZW1wdHkoZGV2X3ByaXYpOwo+ICAg ICAgICAgKyAgICAgICBpZiAoc3RyZWFtLT5jc19tb2RlKQo+ICAgICAgICAgKyAgICAgICAgICAg ICAgIHJldHVybiBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3QpOwo+ICAgICAg ICAgKyAgICAgICBlbHNlCj4gICAgICAgICArICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4g ICAgICAgICAgfQo+IAo+IAo+IEkgdGhpbmsgdGhpcyBsaXN0X2VtcHR5KCkgY2hlY2sgbmVlZHMg YSBsb2NrIGFyb3VuZCBpdCwgYXMgaXQncyBjYWxsZWQKPiBmcm9tIHN0cmVhbV9oYXZlX2RhdGFf X3VubG9ja2VkKCkuCj4gCj4gCj4gQ3VycmVudGx5IG9ubHkgY2hlY2tpbmcgbGlzdF9lbXB0eSgp IGNhbiBsZWFkIHRvIHNvbWUgZmFsc2UgcG9zaXRpdmVzCj4gdGhhdCBtYXkgY29uZnVzZSB0aGUg Y3VycmVudCBpOTE1X3BlcmZfcmVhZCgpICh0aGUgZmFsc2UgcG9zaXRpdmVzCj4gY29tZSBmcm9t IG5vdCBjaGVja2luZyB0aGF0IGF0IGxlYXN0IG9uZSBlbnRyeS0+cmVxdWVzdCBoYXMgYWxzbwo+ IGNvbXBsZXRlZCkuCj4gCj4gRmFsc2UgcG9zaXRpdmVzIGhlcmUgd2lsbCBhZmZlY3QgdGhlIGVy cm9yIHJlcG9ydGluZyBpbgo+IGk5MTVfcGVyZl9yZWFkX2xvY2tlZCgpLiBUaGUgZmlyc3QgdGhp bmcgaTkxNV9wZXJmX3JlYWRfbG9ja2VkKCkgZG9lcwo+IGlzIGNoZWNrIGZvciBhdmFpbGFibGUg ZGF0YSBzbyBpdCBjYW4gcmV0dXJuIC1FQUdBSU4gZm9yIG5vbi1ibG9ja2luZwo+IGZpbGUgZGVz Y3JpcHRvcnMgb3IgYmxvY2ssIHdhaXRpbmcgZm9yIGRhdGEsIGZvciBibG9ja2luZyBmZHMuIE9u Y2Ugd2UKPiBiZWxpZXZlIHRoZXJlIGlzIGRhdGEgdGhlbiBpZiBzdHJlYW0tPnJlYWQoKSByZXR1 cm5zIHplcm8gdGhlbiB0aGF0J3MKPiB0cmFuc2xhdGVkIHRvIGEgLUVOT1NQQyBlcnJvciBiZWNh dXNlIHdlICdrbm93JyB0aGVyZSdzIGRhdGEgYnV0Cj4gd2VyZW4ndCBhYmxlIHRvIGNvcHkgYW55 dGhpbmcgdG8gdGhlIHVzZXIncyBidWZmZXIgYmVjYXVzZSBpdCB3YXNuJ3QKPiBsYXJnZSBlbm91 Z2ggdG8gaG9sZCBhIGNvbXBsZXRlIHJlY29yZC4KPiAKVGhhbmtzIGZvciBwb2ludGluZyB0aGlz IG91dC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgY2hlY2sgdGhhdCBhdCBsZWFzdApvbmUgcmVxdWVz dCBoYXMgY29tcGxldGVkIHdoZW4gdGhlIGxpc3QgaXMgbm90IGVtcHR5LiBJJ2xsIGFpbSB0byBt YWtlCnRoaXMgY2hhbmdlLgo+ICAKPiAgICAgICAgIAo+ICAgICAgICAgLXN0YXRpYyBpbnQgaTkx NV9vYV93YWl0X3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtCj4gICAgICAgICAqc3Ry ZWFtKQo+ICAgICAgICAgK3N0YXRpYyBib29sIHN0cmVhbV9oYXZlX2RhdGFfX3VubG9ja2VkKHN0 cnVjdAo+ICAgICAgICAgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgICAgICAgIHsKPiAg ICAgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFt LT5kZXZfcHJpdjsKPiAgICAgICAgIAo+ICAgICAgICAgQEAgLTM5Nyw4ICs3MzksMjkgQEAgc3Rh dGljIGludCBpOTE1X29hX3dhaXRfdW5sb2NrZWQoc3RydWN0Cj4gICAgICAgICBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0pCj4gICAgICAgICAgICAgICAgICAqIGNhbid0IGJlIGRlc3Ryb3llZCB1 bnRpbCBjb21wbGV0aW9uIChzdWNoIGFzIGEKPiAgICAgICAgIHJlYWQoKSkgdGhhdCBlbnN1cmVz Cj4gICAgICAgICAgICAgICAgICAqIHRoZSBkZXZpY2UgKyBPQSBidWZmZXIgY2FuJ3QgZGlzYXBw ZWFyCj4gICAgICAgICAgICAgICAgICAqLwo+ICAgICAgICAgKwo+ICAgICAgICAgIHJldHVybiAh KGRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9idWZmZXJfaXNfZW1wdHkoZGV2X3ByaXYpCj4gICAg ICAgICAmJgo+ICAgICAgICAgKyAgICAgICAgICAgICAgICBjb21tYW5kX3N0cmVhbV9idWZfaXNf ZW1wdHkoc3RyZWFtKSk7Cj4gICAgICAgICArfQo+IAo+IAo+IEluIGNvbW1hbmQgc3RyZWFtIG1v ZGUsIGR1ZSB0byBob3cgd2UgbmVlZCB0byBtZXJnZSBzb3J0IHJlcG9ydHMgSQo+IHRoaW5rIHdl IG5lZWQgYSBtb3JlIGludm9sdmVkIHNldCBvZiBjaGVja3MuIFdlIG5lZWQgdG8gY2hlY2sgdGhh dCBhdAo+IGxlYXN0IG9uZSBlbnRyeS0+cmVxdWVzdCBpbiB0aGUgbm9kZV9saXN0IGhhcyBjb21w bGV0ZWQsIG9yIGVsc2UgaWYKPiB0aGUgbm9kZV9saXN0IGlzIGVtcHR5IHRoZW4gd2UgY2FuIGNo ZWNrIGlmICFvYV9idWZmZXJfaXNfZW1wdHkoKS4KPiAKPiAKPiBUaGVyZSdzIGdvaW5nIHRvIGJl IGEgdGhvcm55IHJhY2UgdG8gY29uc2lkZXIgdGhvdWdoOiBpZiB0aGlzIGNvZGUKPiBlbmRzIHVw IHJlcG9ydGluZyB0aGF0IHRoZXJlIGlzIGRhdGEgdG8gcmVhZCBiZWNhdXNlIHRoZSBub2RlX2xp c3QgaXMKPiBlbXB0eSBhbmQgdGhlcmUgYXJlIHBlcmlvZGljIHNhbXBsZXMsIGJ1dCBieSB0aGUg dGltZSB3ZSBjYWxsIGludG8KPiBzdHJlYW0tPnJlYWQoKSB0aGVyZSdzIGEgbmV3IG5vZGVfbGlz dCBlbnRyeSB0aGF0J3Mgbm90IGNvbXBsZXRlZCB0aGF0Cj4gd2lsbCBlbmQgdXAgcmV0dXJuaW5n IDAgd2hpY2ggY291bGQgYWdhaW4gcmVzdWx0IGluIGFuIGluY29ycmVjdAo+IEVOT1NQQyBlcnJv ci4KPiAKPiBXZSBzaG91bGQgY29uc2lkZXIgY2hhbmdpbmcgc3RyZWFtLT5yZWFkKCkgc28gaXQg Y2FuIHJldHVybiAtRU5PU1BDCj4gaXRzZWxmIGlmIGFwcHJvcHJpYXRlIGFuZCB3aGVuIGl0IHJl dHVybnMgMCB3ZSB3b3VsZCBpbnN0ZWFkIGVpdGhlcgo+IHJldHVybiAtRUFHQUlOIG9yIGxvb3Ag YmFjayB0byB3YWl0aW5nIGZvciBibG9ja2luZyBmZHMuCgpZZWFoLCB0aGlzIHJhY2UgbmVlZHMg dG8gYmUgaGFuZGxlZCwgaWRlYWxseSBiZXN0IHdheSB3b3VsZCBiZSB0aHJvdWdoCnRoZSBjaGFu Z2VzIHRvIHN0cmVhbS0+cmVhZCgpIGl0c2VsZiBhcyB5b3Ugc3VnZ2VzdGVkLiBJJ2xsIGFpbSB0 byBtYWtlCnRoaXMgY2hhbmdlICh3aGlsZSByZWJhc2luZyBvbiB5b3VyIHJlY2VudCBjb3B5X3Rv X3VzZXIgY2hhbmdlcykuCgo+IEIudC53IGZvciByZWZlcmVuY2UgdGhlIHN0cmVhbS0+cmVhZCgp IGludGVyZmFjZSBpcyBhIGxpdHRsZSBkaWZmZXJlbnQKPiBpbiB0aGUgc2VyaWVzIEkgc2VudCBv dXQgcmVjZW50bHkgZm9yIEhhc3dlbGwgdnMgdGhlIGdlbjgrIG9hLW5leHQKPiBicmFuY2ggKHdo aWNoIEkgaGF2ZW4ndCByZWJhc2VkIHlldCkgYmVjYXVzZSBJIGhhZCB0byBtYWtlIHNvbWUgbGFz dAo+IG1pbnV0ZSBjaGFuZ2VzIHRvIGNvbnNpZGVyIC1FRkFVTFQgZXJyb3JzIGlmIHRoZXJlIHdh cyBhCj4gY29weV90b191c2VyKCkgZXJyb3Igd2hpbGUgcmVhZGluZy4gSWYgeW91IGxvb2sgYXQg dGhpcyBpc3N1ZSwgaXQKPiBjb3VsZCBiZSBnb29kIHRvIGFsc28gY29tcGFyZSB3aXRoIHRoZXNl IHJlbGF0ZWQgY2hhbmdlcyBJIG1hZGUKPiByZWNlbnRseS4KPiAgCj4gICAgICAgICArCj4gICAg ICAgICArc3RhdGljIGJvb2wgaTkxNV9vYV9jYW5fcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVh bSAqc3RyZWFtKQo+ICAgICAgICAgK3sKPiAgICAgICAgICsKPiAgICAgICAgICsgICAgICAgcmV0 dXJuIHN0cmVhbV9oYXZlX2RhdGFfX3VubG9ja2VkKHN0cmVhbSk7Cj4gICAgICAgICArfQo+ICAg ICAgICAgCj4gCj4gCj4gS2luZCByZWdhcmRzLAo+IAo+IC0gUm9iZXJ0Cj4gCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==