From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v5 7/7] drm/i915: Expose RPCS (SSEU) configuration to userspace Date: Wed, 16 May 2018 16:44:41 +0100 Message-ID: References: <20180514155600.16521-1-lionel.g.landwerlin@intel.com> <20180514155600.16521-8-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id E009B6E4B7 for ; Wed, 16 May 2018 15:44:43 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTYvMDUvMTggMTY6NDAsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMTUvMDUvMjAx OCAxMDowNSwgVHZydGtvIFVyc3VsaW4gd3JvdGU6Cj4+Cj4+IE9uIDE0LzA1LzIwMTggMTY6NTYs IExpb25lbCBMYW5kd2VybGluIHdyb3RlOgo+Pj4gRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Cj4+Pgo+Pj4gV2Ugd2FudCB0byBhbGxvdyB1c2Vyc3BhY2UgdG8g cmVjb25maWd1cmUgdGhlIHN1YnNsaWNlIGNvbmZpZ3VyYXRpb24gCj4+PiBmb3IKPj4+IGl0cyBv d24gdXNlIGNhc2UuIFRvIGRvIHNvLCB3ZSBleHBvc2UgYSBjb250ZXh0IHBhcmFtZXRlciB0byBh bGxvdwo+Pj4gYWRqdXN0bWVudCBvZiB0aGUgUlBDUyByZWdpc3RlciBzdG9yZWQgd2l0aGluIHRo ZSBjb250ZXh0IGltYWdlIChhbmQKPj4+IGN1cnJlbnRseSBub3QgYWNjZXNzaWJsZSB2aWEgTFJJ KS4gSWYgdGhlIGNvbnRleHQgaXMgYWRqdXN0ZWQgYmVmb3JlCj4+PiBmaXJzdCB1c2UsIHRoZSBh ZGp1c3RtZW50IGlzIGZvciAiZnJlZSI7IG90aGVyd2lzZSBpZiB0aGUgY29udGV4dCBpcwo+Pj4g YWN0aXZlIHdlIGZsdXNoIHRoZSBjb250ZXh0IG9mZiB0aGUgR1BVIChzdGFsbGluZyBhbGwgdXNl cnMpIGFuZCAKPj4+IGZvcmNpbmcKPj4+IHRoZSBHUFUgdG8gc2F2ZSB0aGUgY29udGV4dCB0byBt ZW1vcnkgd2hlcmUgd2UgY2FuIG1vZGlmeSBpdCBhbmQgc28KPj4+IGVuc3VyZSB0aGF0IHRoZSBy ZWdpc3RlciBpcyByZWxvYWRlZCBvbiBuZXh0IGV4ZWN1dGlvbi4KPj4+Cj4+PiBUaGUgb3Zlcmhl YWQgb2YgbWFuYWdpbmcgYWRkaXRpb25hbCBFVSBzdWJzbGljZXMgY2FuIGJlIHNpZ25pZmljYW50 LAo+Pj4gZXNwZWNpYWxseSBpbiBtdWx0aS1jb250ZXh0IHdvcmtsb2Fkcy4gTm9uLUdQR1BVIGNv bnRleHRzIHNob3VsZAo+Pj4gcHJlZmVyYWJseSBkaXNhYmxlIHRoZSBzdWJzbGljZXMgaXQgaXMg bm90IHVzaW5nLCBhbmQgb3RoZXJzIHNob3VsZAo+Pj4gZmluZS10dW5lIHRoZSBudW1iZXIgdG8g bWF0Y2ggdGhlaXIgd29ya2xvYWQuCj4+Pgo+Pj4gV2UgZXhwb3NlIGNvbXBsZXRlIGNvbnRyb2wg b3ZlciB0aGUgUlBDUyByZWdpc3RlciwgYWxsb3dpbmcKPj4+IGNvbmZpZ3VyYXRpb24gb2Ygc2xp Y2Uvc3Vic2xpY2UsIHZpYSBtYXNrcyBwYWNrZWQgaW50byBhIHU2NCBmb3IKPj4+IHNpbXBsaWNp dHkuIEZvciBleGFtcGxlLAo+Pj4KPj4+IMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X2dlbV9jb250 ZXh0X3BhcmFtIGFyZzsKPj4+IMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3Bh cmFtX3NzZXUgc3NldSA9IHsgLmNsYXNzID0gMCwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuaW5zdGFuY2UgPSAwLCB9Owo+Pj4KPj4+IMKgwqDCoMKg bWVtc2V0KCZhcmcsIDAsIHNpemVvZihhcmcpKTsKPj4+IMKgwqDCoMKgYXJnLmN0eF9pZCA9IGN0 eDsKPj4+IMKgwqDCoMKgYXJnLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVU7Cj4+PiDC oMKgwqDCoGFyZy52YWx1ZSA9ICh1aW50cHRyX3QpICZzc2V1Owo+Pj4gwqDCoMKgwqBpZiAoZHJt SW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9DT05URVhUX0dFVFBBUkFNLCAmYXJnKSA9PSAw KSB7Cj4+PiDCoMKgwqDCoMKgwqDCoCBzc2V1LnBhY2tlZC5zdWJzbGljZV9tYXNrID0gMDsKPj4+ Cj4+PiDCoMKgwqDCoMKgwqDCoCBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRF WFRfU0VUUEFSQU0sICZhcmcpOwo+Pj4gwqDCoMKgwqB9Cj4+Pgo+Pj4gY291bGQgYmUgdXNlZCB0 byBkaXNhYmxlIGFsbCBzdWJzbGljZXMgd2hlcmUgc3VwcG9ydGVkLgo+Pj4KPj4+IHYyOiBGaXgg b2Zmc2V0IG9mIENUWF9SX1BXUl9DTEtfU1RBVEUgaW4gaW50ZWxfbHJfY29udGV4dF9zZXRfc3Nl dSgpIAo+Pj4gKExpb25lbCkKPj4+Cj4+PiB2MzogQWRkIGFiaWxpdHkgdG8gcHJvZ3JhbSB0aGlz IHBlciBlbmdpbmUgKENocmlzKQo+Pj4KPj4+IHY0OiBNb3ZlIG1vc3QgZ2V0X3NzZXUoKSBpbnRv IGk5MTVfZ2VtX2NvbnRleHQuYyAoTGlvbmVsKQo+Pj4KPj4+IHY1OiBWYWxpZGF0ZSBzc2V1IGNv bmZpZ3VyYXRpb24gYWdhaW5zdCB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzIAo+Pj4gKExpb25l bCkKPj4+Cj4+PiB2NjogQ2hhbmdlIGNvbnRleHQgcG93ZXJnYXRpbmcgc2V0dGluZ3MgdGhyb3Vn aCBNSV9TRE0gb24ga2VybmVsIAo+Pj4gY29udGV4dCAoQ2hyaXMpCj4+Pgo+Pj4gQnVnemlsbGE6 IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDg5OQo+Pj4g U2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+ PiBTaWduZWQtb2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBp bnRlbC5jb20+Cj4+PiBjOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0cnkudi5yb2dvemhraW5AaW50 ZWwuY29tPgo+Pj4gQ0M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ Cj4+PiBDQzogWmhpcGVuZyBHb25nIDx6aGlwZW5nLmdvbmdAaW50ZWwuY29tPgo+Pj4gQ0M6IEpv b25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KPj4+IC0tLQo+ Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIHwgMTY5IAo+Pj4g KysrKysrKysrKysrKysrKysrKysrKysrCj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuY8KgwqDCoMKgwqDCoMKgIHwgMTAzICsrKysrKysrKystLS0tLQo+Pj4gwqAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIHzCoMKgIDIgKwo+Pj4gwqAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHzCoMKgIDQgKwo+Pj4gwqAgaW5jbHVk ZS91YXBpL2RybS9pOTE1X2RybS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAzOCArKysr KysKPj4+IMKgIDUgZmlsZXMgY2hhbmdlZCwgMjgxIGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9u cygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9j b250ZXh0LmMgCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+ Pj4gaW5kZXggMDEzMTBjOTllMDMyLi4wYjcyYTc3MWMzZjMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+Pj4gQEAgLTczNCw2ICs3MzQsMTEwIEBAIGlu dCBpOTE1X2dlbV9jb250ZXh0X2Rlc3Ryb3lfaW9jdGwoc3RydWN0IAo+Pj4gZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+IMKgIH0KPj4+ICtz dGF0aWMgaW50Cj4+PiAraW50ZWxfc3NldV9mcm9tX3VzZXJfc3NldShjb25zdCBzdHJ1Y3Qgc3Nl dV9kZXZfaW5mbyAqc3NldSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSAqdXNlcl9zc2V1LAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIGludGVsX3NzZXUgKmN0eF9zc2V1KQo+Pj4g K3sKPj4+ICvCoMKgwqAgaWYgKCh1c2VyX3NzZXUtPnNsaWNlX21hc2sgJiB+c3NldS0+c2xpY2Vf bWFzaykgIT0gMCB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHVzZXJfc3NldS0+c2xpY2VfbWFzayA9 PSAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gK8KgwqDC oCBpZiAoKHVzZXJfc3NldS0+c3Vic2xpY2VfbWFzayAmIH5zc2V1LT5zdWJzbGljZV9tYXNrWzBd KSAhPSAwIHx8Cj4+PiArwqDCoMKgwqDCoMKgwqAgdXNlcl9zc2V1LT5zdWJzbGljZV9tYXNrID09 IDApCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArwqDCoMKg IGlmICh1c2VyX3NzZXUtPm1pbl9ldXNfcGVyX3N1YnNsaWNlID4gc3NldS0+bWF4X2V1c19wZXJf c3Vic2xpY2UpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiAr wqDCoMKgIGlmICh1c2VyX3NzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlID4gCj4+PiBzc2V1LT5t YXhfZXVzX3Blcl9zdWJzbGljZSB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHVzZXJfc3NldS0+bWF4 X2V1c19wZXJfc3Vic2xpY2UgPCAKPj4+IHVzZXJfc3NldS0+bWluX2V1c19wZXJfc3Vic2xpY2Ug fHwKPj4+ICvCoMKgwqDCoMKgwqDCoCB1c2VyX3NzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlID09 IDApCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArwqDCoMKg IGN0eF9zc2V1LT5zbGljZV9tYXNrID0gdXNlcl9zc2V1LT5zbGljZV9tYXNrOwo+Pj4gK8KgwqDC oCBjdHhfc3NldS0+c3Vic2xpY2VfbWFzayA9IHVzZXJfc3NldS0+c3Vic2xpY2VfbWFzazsKPj4+ ICvCoMKgwqAgY3R4X3NzZXUtPm1pbl9ldXNfcGVyX3N1YnNsaWNlID0gdXNlcl9zc2V1LT5taW5f ZXVzX3Blcl9zdWJzbGljZTsKPj4+ICvCoMKgwqAgY3R4X3NzZXUtPm1heF9ldXNfcGVyX3N1YnNs aWNlID0gdXNlcl9zc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZTsKPj4+ICsKPj4+ICvCoMKgwqAg cmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQKPj4+ICtpOTE1X2dlbV9jb250 ZXh0X3JlY29uZmlndXJlX3NzZXUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIGlu dGVsX3NzZXUgc3NldSkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGN0eC0+aTkxNTsKPj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfdGltZWxpbmUg KnRpbWVsaW5lOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPj4+ICvCoMKg wqAgdW5pb24gaW50ZWxfc3NldSBhY3R1YWxfc3NldTsKPj4+ICvCoMKgwqAgZW51bSBpbnRlbF9l bmdpbmVfaWQgaWQ7Cj4+PiArwqDCoMKgIGludCByZXQ7Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+ PiArwqDCoMKgwqAgKiBGaXJzdCBub3RpZnkgdXNlciB3aGVuIHRoaXMgY2FwYWJpbGl0eSBpcyBu b3QgYXZhaWxhYmxlIHNvIAo+Pj4gdGhhdCBpdAo+Pj4gK8KgwqDCoMKgICogY2FuIGJlIGRldGVj dGVkIHdpdGggYW55IHZhbGlkIGlucHV0Lgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIGlm ICghZW5naW5lLT5lbWl0X3JwY3NfY29uZmlnKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt RU5PREVWOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAodG9faW50ZWxfY29udGV4dChjdHgsIGVuZ2lu ZSktPnNzZXUudmFsdWUgPT0gc3NldS52YWx1ZSkKPj4KPj4gQXJlIHRoZXJlIG90aGVyIHVzZXMg Zm9yIHRoZSB2YWx1ZSB1bmlvbiBpbiB0aGUgc2VyaWVzPyBUaGluayB3aGV0aGVyIAo+PiBpdCBj b3VsZCBiZSBkcm9wcGVkIGFuZCBtZW1jbXAgdXNlZCBoZXJlIGZvciBzaW1wbGljaXR5Lgo+Pgo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4gKwo+Pj4gK8KgwqDCoCBsb2NrZGVwX2Fz c2VydF9oZWxkKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+PiArCj4+PiArwqDCoMKg IGk5MTVfcmV0aXJlX3JlcXVlc3RzKGRldl9wcml2KTsKPj4+ICsKPj4+ICvCoMKgwqAgLyogTm93 IHVzZSB0aGUgUkNTIHRvIGFjdHVhbGx5IHJlY29uZmlndXJlLiAqLwo+Pj4gK8KgwqDCoCBlbmdp bmUgPSBkZXZfcHJpdi0+ZW5naW5lW1JDU107Cj4+PiArCj4+PiArwqDCoMKgIHJxID0gaTkxNV9y ZXF1ZXN0X2FsbG9jKGVuZ2luZSwgZGV2X3ByaXYtPmtlcm5lbF9jb250ZXh0KTsKPj4+ICvCoMKg wqAgaWYgKElTX0VSUihycSkpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIocnEp Owo+Pj4gKwo+Pj4gK8KgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgICogSWYgaTkxNS9wZXJmIGlzIGFj dGl2ZSwgd2Ugd2FudCBhIHN0YWJsZSBwb3dlcmdhdGluZyAKPj4+IGNvbmZpZ3VyYXRpb24KPj4+ ICvCoMKgwqDCoCAqIG9uIHRoZSBzeXN0ZW0uIEFjdCBhcyBpZiB3ZSByZWNvcmRlZCB0aGUgdXNl cidzIHJlcXVlc3QgYnV0IAo+Pj4gcHJvZ3JhbQo+Pj4gK8KgwqDCoMKgICogdGhlIGRlZmF1bHQg c3NldSBjb25maWd1cmF0aW9uLiBXaGVuIGk5MTUvcGVyZiBpcyBzdG9wcGVkLCB0aGUKPj4+ICvC oMKgwqDCoCAqIHJlY29yZGVkIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBwcm9ncmFtbWVkLgo+Pj4g K8KgwqDCoMKgICovCj4+PiArwqDCoMKgIGFjdHVhbF9zc2V1ID0gZGV2X3ByaXYtPnBlcmYub2Eu ZXhjbHVzaXZlX3N0cmVhbSA/Cj4+Cj4+IFRoaXMgZmVlbHMgaXQgc2hvdWxkIGp1bXAgb3V0IG1v cmUgc2luY2UgdGhlcmUgaXMgbm8gb2J2aW91cyAKPj4gY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSB0 d28uIFByb2JhYmx5IGEgaGVscGVyIG9mIHNvbWUgc29ydCBsaWtlIAo+PiBpbnRlbF9zYW5pdGl6 ZV9zc2V1PyBPciBpbnRlbF9hcHBseV9zc2V1PyBNZXJnZT8gLi4uID8KPj4KPj4gVGhlIGNvbW1l bnQgd291bGQgdGhlbiBiZSBpbiB0aGUgaGVscGVyIHdoaWNoIEkgdGhpbmsgd291bGQgYmUgYmV0 dGVyIAo+PiB0aGFuIHNwcmlua2xlIE9BIGtub3dsZWRnZSBpbnRvIGNvbnRleHQgcGFyYW1zIGNv ZGUuCj4KPiBGdXJ0aGVybW9yZSwgdGhhdCBpZGVhIHRvIGhhdmUgYSBnbG9iYWwgc3lzZnMga25v YiB3b3VsZCBmaXQgaW50byB0aGlzIAo+IGhlbHBlci4KPgo+IGVjaG8gMSA+ICRpOTE1X3N5c2Zz X3Jvb3QvYWxsb3dfZHluYW1pY19zbGljZV9jb25maWd1cmF0aW9uCj4KPiBPciBzb21ldGhpbmcu LiBBcyBsb25nIGFzIGl0IGRlZmF1bHRzIHRvIG9mZiBJIHRoaW5rIGJvdGggY2FtcHMgc2hvdWxk IAo+IGJlIGhhcHB5Lgo+Cj4gUmVnYXJkcywKPgo+IFR2cnRrbwoKVGhhbmtzIFR2cnRrbywKCkkg d2FzIHRoaW5raW5nIHRoZSBzYW1lIGFzIGEgc2ltcGxlIGZpcnN0IHN0ZXAuCkkgY2FuIGFkZCB0 aGF0IGluIGFub3RoZXIgcmV2aXNpb24uCgpDaGVlcnMsCgotCkxpb25lbAoKPgo+Pgo+Pj4gKyBp bnRlbF9zc2V1X2Zyb21fZGV2aWNlX3NzZXUoJklOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1KSA6 Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3NldTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gZW5naW5l LT5lbWl0X3JwY3NfY29uZmlnKHJxLCBjdHgsIGFjdHVhbF9zc2V1KTsKPj4+ICvCoMKgwqAgaWYg KHJldCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIF9faTkxNV9yZXF1ZXN0X2FkZChycSwgdHJ1ZSk7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4g K8KgwqDCoCAvKiBRdWV1ZSB0aGlzIHN3aXRjaCBhZnRlciBhbGwgb3RoZXIgYWN0aXZpdHkgKi8K Pj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0aW1lbGluZSwgJmRldl9wcml2LT5ndC50 aW1lbGluZXMsIGxpbmspIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpwcmV2Owo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHByZXYgPSBsYXN0X3JlcXVlc3Rfb25f ZW5naW5lKHRpbWVsaW5lLCBlbmdpbmUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChwcmV2KQo+ Pj4gKyBpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcCgmcnEtPnN1Ym1pdCwKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAm cHJldi0+c3VibWl0LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEk5MTVfRkVOQ0VfR0ZQKTsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+ Pj4gK8KgwqDCoCBfX2k5MTVfcmVxdWVzdF9hZGQocnEsIHRydWUpOwo+Pgo+PiBUaGlzIGlzIGFj dHVhbGx5IHRoZSBiaXQgSSByZWFkaW5nIHRoZSBwYXRjaCBmb3IuIFNvIHRoaXMgSSB0aGluayBp cyAKPj4gbXVjaCBiZXR0ZXIvc2FmZXIgdGhhbiBwcmV2aW91cyBpZGxpbmcuIEhvd2V2ZXIgb25l IGNvbmNlcm4sIGFuZCAKPj4gbWF5YmUgbm90IGEgY29uY2VybiBidXQganVzdCBzb21ldGhpbmcg d2hpY2ggbmVlZHMgdG8gYmUgZXhwbGFpbmVkIGluIAo+PiB0aGUgdUFQSSwgaXMgd2hhdCBpdCBt ZWFucyB3aXRoIHJlZ2FyZHMgdG8gdGhlIHBvaW50IGZyb20gd2hpY2ggdGhlIAo+PiBuZXcgY29u ZmlndXJhdGlvbiBiZWNvbWVzIGxpdmUuCj4+Cj4+IENvdWxkIHByZWVtcHRpb24gZm9yIGluc3Rh bmNlIG1ha2UgaXQgbm90IGRlZmluZWQgZW5vdWdoPyBDb3VsZCB3ZSwgCj4+IG9yIHNob3VsZCB3 ZSwgYWxzbyBsaW5rIHRoaXMgcmVxdWVzdCBzb21laG93IG9udG8gdGhlIGlzc3VpbmcgY29udGV4 dCAKPj4gdGltZWxpbmUgc28gaXQgbXVzdCBiZSBmaXJzdCB0aGVyZT8gSG0sIHNob3VsZCB3ZSB1 c2UgdGhlIHVzZXIgCj4+IGNvbnRleHQgaW5zdGVhZCBvZiB0aGUga2VybmVsIG9uZSwgYW5kIHNl dCB0aGUgaGlnaGVzdCBwcmlvcml0eT8gQnV0IAo+PiB3b3VsZCBoYXZlIHRvIGF2b2lkIHRyaWdn ZXJpbmcgcHJlZW1wdGlvbi4KPj4KPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIEFwcGx5 IHRoZSBjb25maWd1cmF0aW9uIHRvIGFsbCBlbmdpbmUuIE91ciBoYXJkd2FyZSBkb2Vzbid0Cj4+ PiArwqDCoMKgwqAgKiBjdXJyZW50bHkgc3VwcG9ydCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMg Zm9yIGVhY2ggZW5naW5lLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIGZvcl9lYWNoX2Vu Z2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSA9IHRvX2ludGVsX2NvbnRleHQoY3R4LCBlbmdpbmUpOwo+Pj4gKwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGNlLT5zc2V1LnZhbHVlID0gc3NldS52YWx1ZTsKPj4+ICvCoMKg wqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiDCoCBpbnQg aTkxNV9nZW1fY29udGV4dF9nZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkIAo+Pj4gKmRhdGEsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+Pj4gwqAgewo+Pj4gQEAgLTc3MSw2ICs4NzUs MzcgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfZ2V0cGFyYW1faW9jdGwoc3RydWN0IAo+Pj4gZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+Pj4gwqDCoMKgwqDCoCBjYXNlIEk5MTVfQ09OVEVY VF9QQVJBTV9QUklPUklUWToKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBhcmdzLT52YWx1ZSA9IGN0 eC0+c2NoZWQucHJpb3JpdHk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDC oMKgIGNhc2UgSTkxNV9DT05URVhUX1BBUkFNX1NTRVU6IHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBwYXJhbV9zc2V1Owo+Pj4gK8Kg wqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPj4+ICvCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKg wqAgaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbV9zc2V1LCB1NjRfdG9fdXNlcl9wdHIoYXJncy0+ dmFsdWUpLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yo cGFyYW1fc3NldSkpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUZBVUxU Owo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgwqDCoMKgwqAg fQo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBf dXNlcih0b19pOTE1KGRldiksCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcGFyYW1fc3NldS5jbGFzcywKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXJhbV9zc2V1Lmluc3RhbmNlKTsK Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWVuZ2luZSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCBjZSA9ICZjdHgt Pl9fZW5naW5lW2VuZ2luZS0+aWRdOwo+Pgo+PiB0b19pbnRlbF9jb250ZXh0KGN0eCwgZW5naW5l KSA/Cj4+Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAgcGFyYW1fc3NldS5zbGljZV9tYXNrID0g Y2UtPnNzZXUuc2xpY2VfbWFzazsKPj4+ICvCoMKgwqDCoMKgwqDCoCBwYXJhbV9zc2V1LnN1YnNs aWNlX21hc2sgPSBjZS0+c3NldS5zdWJzbGljZV9tYXNrOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHBh cmFtX3NzZXUubWluX2V1c19wZXJfc3Vic2xpY2UgPSAKPj4+IGNlLT5zc2V1Lm1pbl9ldXNfcGVy X3N1YnNsaWNlOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtX3NzZXUubWF4X2V1c19wZXJfc3Vi c2xpY2UgPSAKPj4+IGNlLT5zc2V1Lm1heF9ldXNfcGVyX3N1YnNsaWNlOwo+Pj4gKwo+Pj4gK8Kg wqDCoMKgwqDCoMKgIGlmIChjb3B5X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKGFyZ3MtPnZhbHVl KSwgJnBhcmFtX3NzZXUsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6 ZW9mKHBhcmFtX3NzZXUpKSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FRkFV TFQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgIH0KPj4+IMKgwqDCoMKg wqAgZGVmYXVsdDoKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gQEAgLTg0NSw3ICs5ODAsNDEgQEAgaW50IGk5MTVf Z2VtX2NvbnRleHRfc2V0cGFyYW1faW9jdGwoc3RydWN0IAo+Pj4gZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnNj aGVkLnByaW9yaXR5ID0gcHJpb3JpdHk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBjYXNlIEk5MTVfQ09OVEVYVF9QQVJB TV9TU0VVOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9z c2V1IHVzZXJfc3NldTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIGludGVs X3NzZXUgY3R4X3NzZXU7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXJn cy0+c2l6ZSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlO VkFMOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChjb3B5X2Zyb21fdXNlcigmdXNlcl9zc2V1LCAKPj4+IHU2NF90b191c2VyX3B0cihhcmdzLT52 YWx1ZSksCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c2l6ZW9mKHVzZXJfc3NldSkpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldCA9IC1FRkFVTFQ7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Owo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGRldl9wcml2LAo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdXNlcl9zc2V1LmNsYXNzLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXNlcl9zc2V1Lmluc3RhbmNlKTsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmICghZW5naW5lKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gKwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gCj4+PiBpbnRlbF9zc2V1X2Zyb21fdXNlcl9zc2V1 KCZJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnVzZXJfc3NldSwgJmN0eF9zc2V1KTsK Pj4KPj4gU2hvdWxkIHNldHRlciBoYXZlIGEgaGVscGVyIGFzIHdlbGw/Cj4+Cj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBicmVhazsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IGk5MTVfZ2VtX2Nv bnRleHRfcmVjb25maWd1cmVfc3NldShjdHgsIGVuZ2luZSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHhfc3NldSk7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gwqDC oMKgwqDCoCBkZWZhdWx0Ogo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHJjLmMgCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jCj4+PiBpbmRleCAzMjBiNDE2NDgyZTEuLjRlMDIxNmYzM2M3NSAxMDA2NDQKPj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9scmMuYwo+Pj4gQEAgLTIxODQsNiArMjE4NCw3MiBAQCBzdGF0aWMgdm9p ZCBnZW44X2VtaXRfYnJlYWRjcnVtYl9yY3Moc3RydWN0IAo+Pj4gaTkxNV9yZXF1ZXN0ICpyZXF1 ZXN0LCB1MzIgKmNzKQo+Pj4gwqAgfQo+Pj4gwqAgc3RhdGljIGNvbnN0IGludCBnZW44X2VtaXRf YnJlYWRjcnVtYl9yY3Nfc3ogPSA4ICsgV0FfVEFJTF9EV09SRFM7Cj4+PiArdTMyIGdlbjhfbWFr ZV9ycGNzKGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1LAo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgIHVuaW9uIGludGVsX3NzZXUgY3R4X3NzZXUpCj4+PiArewo+Pj4gK8KgwqDCoCB1 MzIgcnBjcyA9IDA7Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBTdGFydGlu ZyBpbiBHZW45LCByZW5kZXIgcG93ZXIgZ2F0aW5nIGNhbiBsZWF2ZQo+Pj4gK8KgwqDCoMKgICog c2xpY2Uvc3Vic2xpY2UvRVUgaW4gYSBwYXJ0aWFsbHkgZW5hYmxlZCBzdGF0ZS4gV2UKPj4+ICvC oMKgwqDCoCAqIG11c3QgbWFrZSBhbiBleHBsaWNpdCByZXF1ZXN0IHRocm91Z2ggUlBDUyBmb3Ig ZnVsbAo+Pj4gK8KgwqDCoMKgICogZW5hYmxlbWVudC4KPj4+ICvCoMKgwqDCoCAqLwo+Pj4gK8Kg wqDCoCBpZiAoc3NldS0+aGFzX3NsaWNlX3BnKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcnBjcyB8 PSBHRU44X1JQQ1NfU19DTlRfRU5BQkxFOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJwY3MgfD0gaHdl aWdodDgoY3R4X3NzZXUuc2xpY2VfbWFzaykgPDwgCj4+PiBHRU44X1JQQ1NfU19DTlRfU0hJRlQ7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQQ1NfRU5BQkxFOwo+Pj4gK8KgwqDC oCB9Cj4+PiArCj4+PiArwqDCoMKgIGlmIChzc2V1LT5oYXNfc3Vic2xpY2VfcGcpIHsKPj4+ICvC oMKgwqDCoMKgwqDCoCBycGNzIHw9IEdFTjhfUlBDU19TU19DTlRfRU5BQkxFOwo+Pj4gK8KgwqDC oMKgwqDCoMKgIHJwY3MgfD0gaHdlaWdodDgoY3R4X3NzZXUuc3Vic2xpY2VfbWFzaykgPDwKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfUlBDU19TU19DTlRfU0hJRlQ7Cj4+PiArwqDC oMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQQ1NfRU5BQkxFOwo+Pj4gK8KgwqDCoCB9Cj4+PiAr Cj4+PiArwqDCoMKgIGlmIChzc2V1LT5oYXNfZXVfcGcpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBy cGNzIHw9IGN0eF9zc2V1Lm1pbl9ldXNfcGVyX3N1YnNsaWNlIDw8Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBHRU44X1JQQ1NfRVVfTUlOX1NISUZUOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJw Y3MgfD0gY3R4X3NzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPDwKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEdFTjhfUlBDU19FVV9NQVhfU0hJRlQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcnBj cyB8PSBHRU44X1JQQ1NfRU5BQkxFOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHJl dHVybiBycGNzOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGdlbjhfZW1pdF9ycGNzX2Nv bmZpZyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIGludGVsX3NzZXUgc3NldSkKPj4+ICt7Cj4+PiAr wqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJxLT5pOTE1Owo+Pj4g K8KgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSB0b19pbnRlbF9jb250ZXh0KGN0eCwg Cj4+PiBkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwo+Pj4gK8KgwqDCoCB1NjQgb2Zmc2V0Owo+Pj4g K8KgwqDCoCB1MzIgKmNzOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBMZXQgdGhlIGRlZmVycmVkIHN0 YXRlIGFsbG9jYXRpb24gdGFrZSBjYXJlIG9mIHRoaXMuICovCj4+PiArwqDCoMKgIGlmICghY2Ut PnN0YXRlKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4gKwo+Pj4gK8KgwqDCoCBj cyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOwo+Pj4gK8KgwqDCoCBpZiAoSVNfRVJSKGNzKSkK Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4+PiArCj4+PiArwqDCoMKg IG9mZnNldCA9IGNlLT5zdGF0ZS0+bm9kZS5zdGFydCArCj4+PiArwqDCoMKgwqDCoMKgwqAgTFJD X1NUQVRFX1BOICogUEFHRV9TSVpFICsKPj4+ICvCoMKgwqDCoMKgwqDCoCAoQ1RYX1JfUFdSX0NM S19TVEFURSArIDEpICogNDsKPj4+ICsKPj4+ICvCoMKgwqAgKmNzKysgPSBNSV9TVE9SRV9EV09S RF9JTU1fR0VONDsKPj4+ICvCoMKgwqAgKmNzKysgPSBsb3dlcl8zMl9iaXRzKG9mZnNldCk7Cj4+ PiArwqDCoMKgICpjcysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpOwo+Pj4gK8KgwqDCoCAqY3Mr KyA9IGdlbjhfbWFrZV9ycGNzKCZJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldSwgc3NldSk7Cj4+ PiArCj4+PiArwqDCoMKgIGludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+Pj4gKwo+Pj4gK8Kg wqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiDCoCBzdGF0aWMgaW50IGdlbjhfaW5pdF9y Y3NfY29udGV4dChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPj4+IMKgIHsKPj4+IMKgwqDCoMKg wqAgaW50IHJldDsKPj4+IEBAIC0yMjc0LDYgKzIzNDAsOCBAQCBsb2dpY2FsX3JpbmdfZGVmYXVs dF92ZnVuY3Moc3RydWN0IAo+Pj4gaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+PiDCoMKgwqDC oMKgIGVuZ2luZS0+ZW1pdF9icmVhZGNydW1iID0gZ2VuOF9lbWl0X2JyZWFkY3J1bWI7Cj4+PiDC oMKgwqDCoMKgIGVuZ2luZS0+ZW1pdF9icmVhZGNydW1iX3N6ID0gZ2VuOF9lbWl0X2JyZWFkY3J1 bWJfc3o7Cj4+PiArwqDCoMKgIGVuZ2luZS0+ZW1pdF9ycGNzX2NvbmZpZyA9IGdlbjhfZW1pdF9y cGNzX2NvbmZpZzsKPj4+ICsKPj4+IMKgwqDCoMKgwqAgZW5naW5lLT5zZXRfZGVmYXVsdF9zdWJt aXNzaW9uID0gCj4+PiBleGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKPj4+IMKgwqDC oMKgwqAgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgMTEpIHsKPj4+IEBAIC0yNDIyLDQx ICsyNDkwLDYgQEAgaW50IGxvZ2ljYWxfeGNzX3JpbmdfaW5pdChzdHJ1Y3QgCj4+PiBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIGxvZ2ljYWxfcmluZ19pbml0 KGVuZ2luZSk7Cj4+PiDCoCB9Cj4+PiAtdTMyIGdlbjhfbWFrZV9ycGNzKGNvbnN0IHN0cnVjdCBz c2V1X2Rldl9pbmZvICpzc2V1LAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIGludGVs X3NzZXUgY3R4X3NzZXUpCj4+PiAtewo+Pj4gLcKgwqDCoCB1MzIgcnBjcyA9IDA7Cj4+PiAtCj4+ PiAtwqDCoMKgIC8qCj4+PiAtwqDCoMKgwqAgKiBTdGFydGluZyBpbiBHZW45LCByZW5kZXIgcG93 ZXIgZ2F0aW5nIGNhbiBsZWF2ZQo+Pj4gLcKgwqDCoMKgICogc2xpY2Uvc3Vic2xpY2UvRVUgaW4g YSBwYXJ0aWFsbHkgZW5hYmxlZCBzdGF0ZS4gV2UKPj4+IC3CoMKgwqDCoCAqIG11c3QgbWFrZSBh biBleHBsaWNpdCByZXF1ZXN0IHRocm91Z2ggUlBDUyBmb3IgZnVsbAo+Pj4gLcKgwqDCoMKgICog ZW5hYmxlbWVudC4KPj4+IC3CoMKgwqAgKi8KPj4+IC3CoMKgwqAgaWYgKHNzZXUtPmhhc19zbGlj ZV9wZykgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX1NfQ05UX0VOQUJM RTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IGh3ZWlnaHQ4KGN0eF9zc2V1LnNsaWNlX21h c2spIDw8IAo+Pj4gR0VOOF9SUENTX1NfQ05UX1NISUZUOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJw Y3MgfD0gR0VOOF9SUENTX0VOQUJMRTsKPj4+IC3CoMKgwqAgfQo+Pj4gLQo+Pj4gLcKgwqDCoCBp ZiAoc3NldS0+aGFzX3N1YnNsaWNlX3BnKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBH RU44X1JQQ1NfU1NfQ05UX0VOQUJMRTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IGh3ZWln aHQ4KGN0eF9zc2V1LnN1YnNsaWNlX21hc2spIDw8Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBHRU44X1JQQ1NfU1NfQ05UX1NISUZUOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJwY3MgfD0gR0VO OF9SUENTX0VOQUJMRTsKPj4+IC3CoMKgwqAgfQo+Pj4gLQo+Pj4gLcKgwqDCoCBpZiAoc3NldS0+ aGFzX2V1X3BnKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBjdHhfc3NldS5taW5fZXVz X3Blcl9zdWJzbGljZSA8PAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOOF9SUENTX0VV X01JTl9TSElGVDsKPj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IGN0eF9zc2V1Lm1heF9ldXNf cGVyX3N1YnNsaWNlIDw8Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU44X1JQQ1NfRVVf TUFYX1NISUZUOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX0VOQUJMRTsK Pj4+IC3CoMKgwqAgfQo+Pj4gLQo+Pj4gLcKgwqDCoCByZXR1cm4gcnBjczsKPj4+IC19Cj4+PiAt Cj4+PiDCoCBzdGF0aWMgdTMyIGludGVsX2xyX2luZGlyZWN0X2N0eF9vZmZzZXQoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAKPj4+ICplbmdpbmUpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIHUzMiBp bmRpcmVjdF9jdHhfb2Zmc2V0Owo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuYyAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5jCj4+PiBpbmRleCA4ZjE5MzQ5YTYwNTUuLjQ0ZmIzYTFjZjhmOSAxMDA2NDQKPj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4+PiBAQCAtMjAyNiw2ICsy MDI2LDggQEAgc3RhdGljIHZvaWQgaW50ZWxfcmluZ19kZWZhdWx0X3ZmdW5jcyhzdHJ1Y3QgCj4+ PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGVuZ2luZS0+ZW1pdF9icmVhZGNydW1iX3N6Kys7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ICvC oMKgwqAgZW5naW5lLT5lbWl0X3JwY3NfY29uZmlnID0gTlVMTDsgLyogT25seSBzdXBwb3J0ZWQg b24gR2VuOCsgKi8KPj4+ICsKPj4+IMKgwqDCoMKgwqAgZW5naW5lLT5zZXRfZGVmYXVsdF9zdWJt aXNzaW9uID0gaTl4eF9zZXRfZGVmYXVsdF9zdWJtaXNzaW9uOwo+Pj4gwqDCoMKgwqDCoCBpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5oCj4+PiBpbmRleCBjYzdlNzM3MzA0NjkuLjk3NDVmNGFiODIxNCAxMDA2 NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4+PiBAQCAtNDYz LDYgKzQ2MywxMCBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKPj4+IMKgwqDCoMKgwqAgdm9p ZMKgwqDCoMKgwqDCoMKgICgqZW1pdF9icmVhZGNydW1iKShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSwgdTMyICpjcyk7Cj4+PiDCoMKgwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgIGVtaXRfYnJlYWRj cnVtYl9zejsKPj4+ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqAgKCplbWl0X3JwY3NfY29uZmln KShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bmlvbiBpbnRl bF9zc2V1IHNzZXUpOwo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCAvKiBQYXNzIHRoZSByZXF1ZXN0IHRv IHRoZSBoYXJkd2FyZSBxdWV1ZSAoZS5nLiBkaXJlY3RseSBpbnRvCj4+PiDCoMKgwqDCoMKgwqAg KiB0aGUgbGVnYWN5IHJpbmdidWZmZXIgb3IgdG8gdGhlIGVuZCBvZiBhbiBleGVjbGlzdCkuCj4+ PiDCoMKgwqDCoMKgwqAgKgo+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9k cm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+Pj4gaW5kZXggN2Y1NjM0Y2U4ZTg4 Li4yNGI5MDgzNmNlMWQgMTAwNjQ0Cj4+PiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJt LmgKPj4+ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+Pj4gQEAgLTE0NTYsOSAr MTQ1Niw0NyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gewo+Pj4gwqAgI2Rl ZmluZcKgwqAgSTkxNV9DT05URVhUX01BWF9VU0VSX1BSSU9SSVRZwqDCoMKgIDEwMjMgLyogaW5j bHVzaXZlICovCj4+PiDCoCAjZGVmaW5lwqDCoCBJOTE1X0NPTlRFWFRfREVGQVVMVF9QUklPUklU WcKgwqDCoMKgwqDCoMKgIDAKPj4+IMKgICNkZWZpbmXCoMKgIEk5MTVfQ09OVEVYVF9NSU5fVVNF Ul9QUklPUklUWcKgwqDCoCAtMTAyMyAvKiBpbmNsdXNpdmUgKi8KPj4+ICvCoMKgwqAgLyoKPj4+ ICvCoMKgwqDCoCAqIFdoZW4gdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbSwgdmFsdWUgc2hvdWxk IGJlIGEgcG9pbnRlciB0bwo+Pj4gK8KgwqDCoMKgICogZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFy YW1fc3NldS4KPj4+ICvCoMKgwqDCoCAqLwo+Pj4gKyNkZWZpbmUgSTkxNV9DT05URVhUX1BBUkFN X1NTRVXCoMKgwqDCoMKgwqDCoCAweDcKPj4+IMKgwqDCoMKgwqAgX191NjQgdmFsdWU7Cj4+PiDC oCB9Owo+Pj4gK3N0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHsKPj4+ICvC oMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIEVuZ2luZSBjbGFzcyAmIGluc3RhbmNlIHRvIGJlIGNv bmZpZ3VyZWQgb3IgcXVlcmllZC4KPj4+ICvCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoCBfX3UzMiBj bGFzczsKPj4+ICvCoMKgwqAgX191MzIgaW5zdGFuY2U7Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+ PiArwqDCoMKgwqAgKiBNYXNrIG9mIHNsaWNlcyB0byBlbmFibGUgZm9yIHRoZSBjb250ZXh0LiBW YWxpZCB2YWx1ZXMgYXJlIGEgCj4+PiBzdWJzZXQKPj4+ICvCoMKgwqDCoCAqIG9mIHRoZSBiaXRt YXNrIHZhbHVlIHJldHVybmVkIGZvciBJOTE1X1BBUkFNX1NMSUNFX01BU0suCj4+PiArwqDCoMKg wqAgKi8KPj4+ICvCoMKgwqAgX191OCBzbGljZV9tYXNrOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKgo+ Pj4gK8KgwqDCoMKgICogTWFzayBvZiBzdWJzbGljZXMgdG8gZW5hYmxlIGZvciB0aGUgY29udGV4 dC4gVmFsaWQgdmFsdWVzIGFyZSBhCj4+PiArwqDCoMKgwqAgKiBzdWJzZXQgb2YgdGhlIGJpdG1h c2sgdmFsdWUgcmV0dXJuIGJ5IEk5MTVfUEFSQU1fU1VCU0xJQ0VfTUFTSy4KPj4+ICvCoMKgwqDC oCAqLwo+Pj4gK8KgwqDCoCBfX3U4IHN1YnNsaWNlX21hc2s7Cj4+PiArCj4+PiArwqDCoMKgIC8q Cj4+PiArwqDCoMKgwqAgKiBNaW5pbXVtL01heGltdW0gbnVtYmVyIG9mIEVVcyB0byBlbmFibGUg cGVyIHN1YnNsaWNlIGZvciB0aGUKPj4+ICvCoMKgwqDCoCAqIGNvbnRleHQuIG1pbl9ldXNfcGVy X3N1YnNsaWNlIG11c3QgYmUgaW5mZXJpb3Igb3IgZXF1YWwgdG8KPj4+ICvCoMKgwqDCoCAqIG1h eF9ldXNfcGVyX3N1YnNsaWNlLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIF9fdTggbWlu X2V1c19wZXJfc3Vic2xpY2U7Cj4+PiArwqDCoMKgIF9fdTggbWF4X2V1c19wZXJfc3Vic2xpY2U7 Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBVbnVzZWQgZm9yIG5vdy4gTXVz dCBiZSBjbGVhcmVkIHRvIHplcm8uCj4+PiArwqDCoMKgwqAgKi8KPj4+ICvCoMKgwqAgX191MzIg cnN2ZDsKPj4+ICt9Owo+Pj4gKwo+Pj4gwqAgZW51bSBkcm1faTkxNV9vYV9mb3JtYXQgewo+Pj4g wqDCoMKgwqDCoCBJOTE1X09BX0ZPUk1BVF9BMTMgPSAxLMKgwqDCoMKgwqDCoMKgIC8qIEhTVyBv bmx5ICovCj4+PiDCoMKgwqDCoMKgIEk5MTVfT0FfRk9STUFUX0EyOSzCoMKgwqDCoMKgwqDCoCAv KiBIU1cgb25seSAqLwo+Pj4KPj4KPj4gUmVnYXJkcywKPj4KPj4gVHZydGtvCj4KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=