From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v5 7/7] drm/i915: Expose RPCS (SSEU) configuration to userspace Date: Wed, 16 May 2018 16:40:55 +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 mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 599976E485 for ; Wed, 16 May 2018 15:40:58 +0000 (UTC) In-Reply-To: Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lionel Landwerlin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE1LzA1LzIwMTggMTA6MDUsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+IAo+IE9uIDE0LzA1 LzIwMTggMTY6NTYsIExpb25lbCBMYW5kd2VybGluIHdyb3RlOgo+PiBGcm9tOiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4KPj4gV2Ugd2FudCB0byBhbGxvdyB1c2Vy c3BhY2UgdG8gcmVjb25maWd1cmUgdGhlIHN1YnNsaWNlIGNvbmZpZ3VyYXRpb24gZm9yCj4+IGl0 cyBvd24gdXNlIGNhc2UuIFRvIGRvIHNvLCB3ZSBleHBvc2UgYSBjb250ZXh0IHBhcmFtZXRlciB0 byBhbGxvdwo+PiBhZGp1c3RtZW50IG9mIHRoZSBSUENTIHJlZ2lzdGVyIHN0b3JlZCB3aXRoaW4g dGhlIGNvbnRleHQgaW1hZ2UgKGFuZAo+PiBjdXJyZW50bHkgbm90IGFjY2Vzc2libGUgdmlhIExS SSkuIElmIHRoZSBjb250ZXh0IGlzIGFkanVzdGVkIGJlZm9yZQo+PiBmaXJzdCB1c2UsIHRoZSBh ZGp1c3RtZW50IGlzIGZvciAiZnJlZSI7IG90aGVyd2lzZSBpZiB0aGUgY29udGV4dCBpcwo+PiBh Y3RpdmUgd2UgZmx1c2ggdGhlIGNvbnRleHQgb2ZmIHRoZSBHUFUgKHN0YWxsaW5nIGFsbCB1c2Vy cykgYW5kIGZvcmNpbmcKPj4gdGhlIEdQVSB0byBzYXZlIHRoZSBjb250ZXh0IHRvIG1lbW9yeSB3 aGVyZSB3ZSBjYW4gbW9kaWZ5IGl0IGFuZCBzbwo+PiBlbnN1cmUgdGhhdCB0aGUgcmVnaXN0ZXIg aXMgcmVsb2FkZWQgb24gbmV4dCBleGVjdXRpb24uCj4+Cj4+IFRoZSBvdmVyaGVhZCBvZiBtYW5h Z2luZyBhZGRpdGlvbmFsIEVVIHN1YnNsaWNlcyBjYW4gYmUgc2lnbmlmaWNhbnQsCj4+IGVzcGVj aWFsbHkgaW4gbXVsdGktY29udGV4dCB3b3JrbG9hZHMuIE5vbi1HUEdQVSBjb250ZXh0cyBzaG91 bGQKPj4gcHJlZmVyYWJseSBkaXNhYmxlIHRoZSBzdWJzbGljZXMgaXQgaXMgbm90IHVzaW5nLCBh bmQgb3RoZXJzIHNob3VsZAo+PiBmaW5lLXR1bmUgdGhlIG51bWJlciB0byBtYXRjaCB0aGVpciB3 b3JrbG9hZC4KPj4KPj4gV2UgZXhwb3NlIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciB0aGUgUlBDUyBy ZWdpc3RlciwgYWxsb3dpbmcKPj4gY29uZmlndXJhdGlvbiBvZiBzbGljZS9zdWJzbGljZSwgdmlh IG1hc2tzIHBhY2tlZCBpbnRvIGEgdTY0IGZvcgo+PiBzaW1wbGljaXR5LiBGb3IgZXhhbXBsZSwK Pj4KPj4gwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnOwo+PiDC oMKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IC5j bGFzcyA9IDAsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAuaW5zdGFuY2UgPSAwLCB9Owo+Pgo+PiDCoMKgwqDCoG1lbXNldCgmYXJnLCAwLCBzaXplb2Yo YXJnKSk7Cj4+IMKgwqDCoMKgYXJnLmN0eF9pZCA9IGN0eDsKPj4gwqDCoMKgwqBhcmcucGFyYW0g PSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVTsKPj4gwqDCoMKgwqBhcmcudmFsdWUgPSAodWludHB0 cl90KSAmc3NldTsKPj4gwqDCoMKgwqBpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dF TV9DT05URVhUX0dFVFBBUkFNLCAmYXJnKSA9PSAwKSB7Cj4+IMKgwqDCoMKgwqDCoMKgIHNzZXUu cGFja2VkLnN1YnNsaWNlX21hc2sgPSAwOwo+Pgo+PiDCoMKgwqDCoMKgwqDCoCBkcm1Jb2N0bChm ZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfU0VUUEFSQU0sICZhcmcpOwo+PiDCoMKgwqDC oH0KPj4KPj4gY291bGQgYmUgdXNlZCB0byBkaXNhYmxlIGFsbCBzdWJzbGljZXMgd2hlcmUgc3Vw cG9ydGVkLgo+Pgo+PiB2MjogRml4IG9mZnNldCBvZiBDVFhfUl9QV1JfQ0xLX1NUQVRFIGluIGlu dGVsX2xyX2NvbnRleHRfc2V0X3NzZXUoKSAKPj4gKExpb25lbCkKPj4KPj4gdjM6IEFkZCBhYmls aXR5IHRvIHByb2dyYW0gdGhpcyBwZXIgZW5naW5lIChDaHJpcykKPj4KPj4gdjQ6IE1vdmUgbW9z dCBnZXRfc3NldSgpIGludG8gaTkxNV9nZW1fY29udGV4dC5jIChMaW9uZWwpCj4+Cj4+IHY1OiBW YWxpZGF0ZSBzc2V1IGNvbmZpZ3VyYXRpb24gYWdhaW5zdCB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0 aWVzIAo+PiAoTGlvbmVsKQo+Pgo+PiB2NjogQ2hhbmdlIGNvbnRleHQgcG93ZXJnYXRpbmcgc2V0 dGluZ3MgdGhyb3VnaCBNSV9TRE0gb24ga2VybmVsIAo+PiBjb250ZXh0IChDaHJpcykKPj4KPj4g QnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEw MDg5OQo+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KPj4gU2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3 ZXJsaW5AaW50ZWwuY29tPgo+PiBjOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0cnkudi5yb2dvemhr aW5AaW50ZWwuY29tPgo+PiBDQzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVs LmNvbT4KPj4gQ0M6IFpoaXBlbmcgR29uZyA8emhpcGVuZy5nb25nQGludGVsLmNvbT4KPj4gQ0M6 IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KPj4gLS0t Cj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyB8IDE2OSArKysr KysrKysrKysrKysrKysrKysrKysKPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmPCoMKgwqDCoMKgwqDCoCB8IDEwMyArKysrKysrKysrLS0tLS0KPj4gwqAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIHzCoMKgIDIgKwo+PiDCoCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggfMKgwqAgNCArCj4+IMKgIGluY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMzggKysrKysrCj4+IMKg IDUgZmlsZXMgY2hhbmdlZCwgMjgxIGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9ucygtKQo+Pgo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+PiBpbmRleCAwMTMx MGM5OWUwMzIuLjBiNzJhNzcxYzNmMyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fY29udGV4dC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHQuYwo+PiBAQCAtNzM0LDYgKzczNCwxMTAgQEAgaW50IGk5MTVfZ2VtX2NvbnRl eHRfZGVzdHJveV9pb2N0bChzdHJ1Y3QgCj4+IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK Pj4gwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgfQo+PiArc3RhdGljIGludAo+PiAraW50ZWxf c3NldV9mcm9tX3VzZXJfc3NldShjb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fY29u dGV4dF9wYXJhbV9zc2V1ICp1c2VyX3NzZXUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1bmlvbiBpbnRlbF9zc2V1ICpjdHhfc3NldSkKPj4gK3sKPj4gK8KgwqDCoCBpZiAoKHVzZXJf c3NldS0+c2xpY2VfbWFzayAmIH5zc2V1LT5zbGljZV9tYXNrKSAhPSAwIHx8Cj4+ICvCoMKgwqDC oMKgwqDCoCB1c2VyX3NzZXUtPnNsaWNlX21hc2sgPT0gMCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgaWYgKCh1c2VyX3NzZXUtPnN1YnNsaWNlX21h c2sgJiB+c3NldS0+c3Vic2xpY2VfbWFza1swXSkgIT0gMCB8fAo+PiArwqDCoMKgwqDCoMKgwqAg dXNlcl9zc2V1LT5zdWJzbGljZV9tYXNrID09IDApCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIGlmICh1c2VyX3NzZXUtPm1pbl9ldXNfcGVyX3N1YnNs aWNlID4gc3NldS0+bWF4X2V1c19wZXJfc3Vic2xpY2UpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIGlmICh1c2VyX3NzZXUtPm1heF9ldXNfcGVyX3N1 YnNsaWNlID4gc3NldS0+bWF4X2V1c19wZXJfc3Vic2xpY2UgfHwKPj4gK8KgwqDCoMKgwqDCoMKg IHVzZXJfc3NldS0+bWF4X2V1c19wZXJfc3Vic2xpY2UgPCAKPj4gdXNlcl9zc2V1LT5taW5fZXVz X3Blcl9zdWJzbGljZSB8fAo+PiArwqDCoMKgwqDCoMKgwqAgdXNlcl9zc2V1LT5tYXhfZXVzX3Bl cl9zdWJzbGljZSA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsK Pj4gK8KgwqDCoCBjdHhfc3NldS0+c2xpY2VfbWFzayA9IHVzZXJfc3NldS0+c2xpY2VfbWFzazsK Pj4gK8KgwqDCoCBjdHhfc3NldS0+c3Vic2xpY2VfbWFzayA9IHVzZXJfc3NldS0+c3Vic2xpY2Vf bWFzazsKPj4gK8KgwqDCoCBjdHhfc3NldS0+bWluX2V1c19wZXJfc3Vic2xpY2UgPSB1c2VyX3Nz ZXUtPm1pbl9ldXNfcGVyX3N1YnNsaWNlOwo+PiArwqDCoMKgIGN0eF9zc2V1LT5tYXhfZXVzX3Bl cl9zdWJzbGljZSA9IHVzZXJfc3NldS0+bWF4X2V1c19wZXJfc3Vic2xpY2U7Cj4+ICsKPj4gK8Kg wqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludAo+PiAraTkxNV9nZW1fY29u dGV4dF9yZWNvbmZpZ3VyZV9zc2V1KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5pb24gaW50 ZWxfc3NldSBzc2V1KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGN0eC0+aTkxNTsKPj4gK8KgwqDCoCBzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGlt ZWxpbmU7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4+ICvCoMKgwqAgdW5p b24gaW50ZWxfc3NldSBhY3R1YWxfc3NldTsKPj4gK8KgwqDCoCBlbnVtIGludGVsX2VuZ2luZV9p ZCBpZDsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKg ICogRmlyc3Qgbm90aWZ5IHVzZXIgd2hlbiB0aGlzIGNhcGFiaWxpdHkgaXMgbm90IGF2YWlsYWJs ZSBzbyAKPj4gdGhhdCBpdAo+PiArwqDCoMKgwqAgKiBjYW4gYmUgZGV0ZWN0ZWQgd2l0aCBhbnkg dmFsaWQgaW5wdXQuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmICghZW5naW5lLT5lbWl0 X3JwY3NfY29uZmlnKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4g K8KgwqDCoCBpZiAodG9faW50ZWxfY29udGV4dChjdHgsIGVuZ2luZSktPnNzZXUudmFsdWUgPT0g c3NldS52YWx1ZSkKPiAKPiBBcmUgdGhlcmUgb3RoZXIgdXNlcyBmb3IgdGhlIHZhbHVlIHVuaW9u IGluIHRoZSBzZXJpZXM/IFRoaW5rIHdoZXRoZXIgaXQgCj4gY291bGQgYmUgZHJvcHBlZCBhbmQg bWVtY21wIHVzZWQgaGVyZSBmb3Igc2ltcGxpY2l0eS4KPiAKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAwOwo+PiArCj4+ICvCoMKgwqAgbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+PiArCj4+ICvCoMKgwqAgaTkxNV9yZXRpcmVfcmVxdWVzdHMoZGV2 X3ByaXYpOwo+PiArCj4+ICvCoMKgwqAgLyogTm93IHVzZSB0aGUgUkNTIHRvIGFjdHVhbGx5IHJl Y29uZmlndXJlLiAqLwo+PiArwqDCoMKgIGVuZ2luZSA9IGRldl9wcml2LT5lbmdpbmVbUkNTXTsK Pj4gKwo+PiArwqDCoMKgIHJxID0gaTkxNV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwgZGV2X3ByaXYt Pmtlcm5lbF9jb250ZXh0KTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKHJxKSkKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiBQVFJfRVJSKHJxKTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDC oCAqIElmIGk5MTUvcGVyZiBpcyBhY3RpdmUsIHdlIHdhbnQgYSBzdGFibGUgcG93ZXJnYXRpbmcg Cj4+IGNvbmZpZ3VyYXRpb24KPj4gK8KgwqDCoMKgICogb24gdGhlIHN5c3RlbS4gQWN0IGFzIGlm IHdlIHJlY29yZGVkIHRoZSB1c2VyJ3MgcmVxdWVzdCBidXQgCj4+IHByb2dyYW0KPj4gK8KgwqDC oMKgICogdGhlIGRlZmF1bHQgc3NldSBjb25maWd1cmF0aW9uLiBXaGVuIGk5MTUvcGVyZiBpcyBz dG9wcGVkLCB0aGUKPj4gK8KgwqDCoMKgICogcmVjb3JkZWQgY29uZmlndXJhdGlvbiB3aWxsIGJl IHByb2dyYW1tZWQuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGFjdHVhbF9zc2V1ID0gZGV2 X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbSA/Cj4gCj4gVGhpcyBmZWVscyBpdCBzaG91 bGQganVtcCBvdXQgbW9yZSBzaW5jZSB0aGVyZSBpcyBubyBvYnZpb3VzIGNvbm5lY3Rpb24gCj4g YmV0d2VlbiB0aGUgdHdvLiBQcm9iYWJseSBhIGhlbHBlciBvZiBzb21lIHNvcnQgbGlrZSAKPiBp bnRlbF9zYW5pdGl6ZV9zc2V1PyBPciBpbnRlbF9hcHBseV9zc2V1PyBNZXJnZT8gLi4uID8KPiAK PiBUaGUgY29tbWVudCB3b3VsZCB0aGVuIGJlIGluIHRoZSBoZWxwZXIgd2hpY2ggSSB0aGluayB3 b3VsZCBiZSBiZXR0ZXIgCj4gdGhhbiBzcHJpbmtsZSBPQSBrbm93bGVkZ2UgaW50byBjb250ZXh0 IHBhcmFtcyBjb2RlLgoKRnVydGhlcm1vcmUsIHRoYXQgaWRlYSB0byBoYXZlIGEgZ2xvYmFsIHN5 c2ZzIGtub2Igd291bGQgZml0IGludG8gdGhpcyAKaGVscGVyLgoKZWNobyAxID4gJGk5MTVfc3lz ZnNfcm9vdC9hbGxvd19keW5hbWljX3NsaWNlX2NvbmZpZ3VyYXRpb24KCk9yIHNvbWV0aGluZy4u IEFzIGxvbmcgYXMgaXQgZGVmYXVsdHMgdG8gb2ZmIEkgdGhpbmsgYm90aCBjYW1wcyBzaG91bGQg CmJlIGhhcHB5LgoKUmVnYXJkcywKClR2cnRrbwoKPiAKPj4gK8KgwqDCoMKgwqDCoMKgIGludGVs X3NzZXVfZnJvbV9kZXZpY2Vfc3NldSgmSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUpIDoKPj4g K8KgwqDCoMKgwqDCoMKgIHNzZXU7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBlbmdpbmUtPmVtaXRf cnBjc19jb25maWcocnEsIGN0eCwgYWN0dWFsX3NzZXUpOwo+PiArwqDCoMKgIGlmIChyZXQpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIF9faTkxNV9yZXF1ZXN0X2FkZChycSwgdHJ1ZSk7Cj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIC8qIFF1 ZXVlIHRoaXMgc3dpdGNoIGFmdGVyIGFsbCBvdGhlciBhY3Rpdml0eSAqLwo+PiArwqDCoMKgIGxp c3RfZm9yX2VhY2hfZW50cnkodGltZWxpbmUsICZkZXZfcHJpdi0+Z3QudGltZWxpbmVzLCBsaW5r KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpwcmV2Owo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCBwcmV2ID0gbGFzdF9yZXF1ZXN0X29uX2VuZ2luZSh0aW1lbGluZSwg ZW5naW5lKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChwcmV2KQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcCgmcnEtPnN1Ym1pdCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICZwcmV2LT5zdWJtaXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBJOTE1X0ZFTkNFX0dGUCk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ ICvCoMKgwqAgX19pOTE1X3JlcXVlc3RfYWRkKHJxLCB0cnVlKTsKPiAKPiBUaGlzIGlzIGFjdHVh bGx5IHRoZSBiaXQgSSByZWFkaW5nIHRoZSBwYXRjaCBmb3IuIFNvIHRoaXMgSSB0aGluayBpcyAK PiBtdWNoIGJldHRlci9zYWZlciB0aGFuIHByZXZpb3VzIGlkbGluZy4gSG93ZXZlciBvbmUgY29u Y2VybiwgYW5kIG1heWJlIAo+IG5vdCBhIGNvbmNlcm4gYnV0IGp1c3Qgc29tZXRoaW5nIHdoaWNo IG5lZWRzIHRvIGJlIGV4cGxhaW5lZCBpbiB0aGUgCj4gdUFQSSwgaXMgd2hhdCBpdCBtZWFucyB3 aXRoIHJlZ2FyZHMgdG8gdGhlIHBvaW50IGZyb20gd2hpY2ggdGhlIG5ldyAKPiBjb25maWd1cmF0 aW9uIGJlY29tZXMgbGl2ZS4KPiAKPiBDb3VsZCBwcmVlbXB0aW9uIGZvciBpbnN0YW5jZSBtYWtl IGl0IG5vdCBkZWZpbmVkIGVub3VnaD8gQ291bGQgd2UsIG9yIAo+IHNob3VsZCB3ZSwgYWxzbyBs aW5rIHRoaXMgcmVxdWVzdCBzb21laG93IG9udG8gdGhlIGlzc3VpbmcgY29udGV4dCAKPiB0aW1l bGluZSBzbyBpdCBtdXN0IGJlIGZpcnN0IHRoZXJlPyBIbSwgc2hvdWxkIHdlIHVzZSB0aGUgdXNl ciBjb250ZXh0IAo+IGluc3RlYWQgb2YgdGhlIGtlcm5lbCBvbmUsIGFuZCBzZXQgdGhlIGhpZ2hl c3QgcHJpb3JpdHk/IEJ1dCB3b3VsZCBoYXZlIAo+IHRvIGF2b2lkIHRyaWdnZXJpbmcgcHJlZW1w dGlvbi4KPiAKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBBcHBseSB0aGUgY29uZmlndXJh dGlvbiB0byBhbGwgZW5naW5lLiBPdXIgaGFyZHdhcmUgZG9lc24ndAo+PiArwqDCoMKgwqAgKiBj dXJyZW50bHkgc3VwcG9ydCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgZm9yIGVhY2ggZW5naW5l Lgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZf cHJpdiwgaWQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9 IHRvX2ludGVsX2NvbnRleHQoY3R4LCBlbmdpbmUpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBj ZS0+c3NldS52YWx1ZSA9IHNzZXUudmFsdWU7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAg cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gwqAgaW50IGk5MTVfZ2VtX2NvbnRleHRfZ2V0cGFyYW1f aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPj4g wqAgewo+PiBAQCAtNzcxLDYgKzg3NSwzNyBAQCBpbnQgaTkxNV9nZW1fY29udGV4dF9nZXRwYXJh bV9pb2N0bChzdHJ1Y3QgCj4+IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4gwqDCoMKg wqDCoCBjYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9QUklPUklUWToKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIGFyZ3MtPnZhbHVlID0gY3R4LT5zY2hlZC5wcmlvcml0eTsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgSTkxNV9DT05URVhUX1BBUkFNX1NTRVU6IHsKPj4g K8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHBh cmFtX3NzZXU7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgIGlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1fc3NldSwgdTY0X3RvX3Vz ZXJfcHRyKGFyZ3MtPnZhbHVlKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzaXplb2YocGFyYW1fc3NldSkpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dCA9IC1FRkFVTFQ7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKg wqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBlbmdpbmUgPSBpbnRlbF9lbmdpbmVf bG9va3VwX3VzZXIodG9faTkxNShkZXYpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFyYW1fc3NldS5jbGFzcywKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcmFtX3NzZXUuaW5zdGFu Y2UpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFlbmdpbmUpIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7 Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGNlID0gJmN0eC0+ X19lbmdpbmVbZW5naW5lLT5pZF07Cj4gCj4gdG9faW50ZWxfY29udGV4dChjdHgsIGVuZ2luZSkg Pwo+IAo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBwYXJhbV9zc2V1LnNsaWNlX21hc2sgPSBjZS0+ c3NldS5zbGljZV9tYXNrOwo+PiArwqDCoMKgwqDCoMKgwqAgcGFyYW1fc3NldS5zdWJzbGljZV9t YXNrID0gY2UtPnNzZXUuc3Vic2xpY2VfbWFzazsKPj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtX3Nz ZXUubWluX2V1c19wZXJfc3Vic2xpY2UgPSBjZS0+c3NldS5taW5fZXVzX3Blcl9zdWJzbGljZTsK Pj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtX3NzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSBjZS0+ c3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGNv cHlfdG9fdXNlcih1NjRfdG9fdXNlcl9wdHIoYXJncy0+dmFsdWUpLCAmcGFyYW1fc3NldSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihwYXJhbV9zc2V1KSkpCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FRkFVTFQ7Cj4+ICvCoMKgwqDCoMKgwqDC oCBicmVhazsKPj4gK8KgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgZGVmYXVsdDoKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4g QEAgLTg0NSw3ICs5ODAsNDEgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfc2V0cGFyYW1faW9jdGwo c3RydWN0IAo+PiBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5zY2hlZC5wcmlvcml0eSA9IHByaW9yaXR5Owo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKg wqAgY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVToKPj4gK8KgwqDCoMKgwqDCoMKgIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShkZXYpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSB1c2VyX3NzZXU7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdW5pb24gaW50ZWxfc3NldSBjdHhfc3NldTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoYXJncy0+c2l6ZSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoY29weV9mcm9tX3VzZXIoJnVzZXJfc3NldSwgdTY0X3RvX3VzZXJfcHRy KGFyZ3MtPnZhbHVlKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNpemVvZih1c2VyX3NzZXUpKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldCA9IC1FRkFVTFQ7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlbmdpbmUgPSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoZGV2X3ByaXYsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHVzZXJfc3NldS5jbGFzcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXNlcl9zc2V1Lmluc3RhbmNlKTsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFlbmdpbmUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0ID0gaW50ZWxfc3NldV9mcm9tX3VzZXJfc3NldSgmSU5URUxfSU5G TyhkZXZfcHJpdiktPnNzZXUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJnVzZXJfc3NldSwgJmN0eF9zc2V1KTsKPiAKPiBTaG91bGQg c2V0dGVyIGhhdmUgYSBoZWxwZXIgYXMgd2VsbD8KPiAKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gaTkxNV9nZW1fY29udGV4dF9yZWNvbmZpZ3Vy ZV9zc2V1KGN0eCwgZW5naW5lLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4X3NzZXUpOwo+PiArwqDCoMKgwqDCoMKg wqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgZGVmYXVsdDoKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+IGluZGV4IDMyMGI0MTY0ODJl MS4uNGUwMjE2ZjMzYzc1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+PiBAQCAt MjE4NCw2ICsyMTg0LDcyIEBAIHN0YXRpYyB2b2lkIGdlbjhfZW1pdF9icmVhZGNydW1iX3Jjcyhz dHJ1Y3QgCj4+IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyICpjcykKPj4gwqAgfQo+PiDCoCBz dGF0aWMgY29uc3QgaW50IGdlbjhfZW1pdF9icmVhZGNydW1iX3Jjc19zeiA9IDggKyBXQV9UQUlM X0RXT1JEUzsKPj4gK3UzMiBnZW44X21ha2VfcnBjcyhjb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5m byAqc3NldSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIGludGVsX3NzZXUgY3R4X3Nz ZXUpCj4+ICt7Cj4+ICvCoMKgwqAgdTMyIHJwY3MgPSAwOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4g K8KgwqDCoMKgICogU3RhcnRpbmcgaW4gR2VuOSwgcmVuZGVyIHBvd2VyIGdhdGluZyBjYW4gbGVh dmUKPj4gK8KgwqDCoMKgICogc2xpY2Uvc3Vic2xpY2UvRVUgaW4gYSBwYXJ0aWFsbHkgZW5hYmxl ZCBzdGF0ZS4gV2UKPj4gK8KgwqDCoMKgICogbXVzdCBtYWtlIGFuIGV4cGxpY2l0IHJlcXVlc3Qg dGhyb3VnaCBSUENTIGZvciBmdWxsCj4+ICvCoMKgwqDCoCAqIGVuYWJsZW1lbnQuCj4+ICvCoMKg wqDCoCAqLwo+PiArwqDCoMKgIGlmIChzc2V1LT5oYXNfc2xpY2VfcGcpIHsKPj4gK8KgwqDCoMKg wqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX1NfQ05UX0VOQUJMRTsKPj4gK8KgwqDCoMKgwqDCoMKg IHJwY3MgfD0gaHdlaWdodDgoY3R4X3NzZXUuc2xpY2VfbWFzaykgPDwgR0VOOF9SUENTX1NfQ05U X1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQQ1NfRU5BQkxFOwo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmIChzc2V1LT5oYXNfc3Vic2xpY2VfcGcpIHsKPj4g K8KgwqDCoMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX1NTX0NOVF9FTkFCTEU7Cj4+ICvCoMKg wqDCoMKgwqDCoCBycGNzIHw9IGh3ZWlnaHQ4KGN0eF9zc2V1LnN1YnNsaWNlX21hc2spIDw8Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfUlBDU19TU19DTlRfU0hJRlQ7Cj4+ICvCoMKg wqDCoMKgwqDCoCBycGNzIHw9IEdFTjhfUlBDU19FTkFCTEU7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ ICvCoMKgwqAgaWYgKHNzZXUtPmhhc19ldV9wZykgewo+PiArwqDCoMKgwqDCoMKgwqAgcnBjcyB8 PSBjdHhfc3NldS5taW5fZXVzX3Blcl9zdWJzbGljZSA8PAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBHRU44X1JQQ1NfRVVfTUlOX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBj dHhfc3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSA8PAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBHRU44X1JQQ1NfRVVfTUFYX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44 X1JQQ1NfRU5BQkxFOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiBycGNzOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGdlbjhfZW1pdF9ycGNzX2NvbmZpZyhzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1bmlvbiBpbnRlbF9zc2V1IHNzZXUpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcnEtPmk5MTU7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVs X2NvbnRleHQgKmNlID0gdG9faW50ZWxfY29udGV4dChjdHgsIAo+PiBkZXZfcHJpdi0+ZW5naW5l W1JDU10pOwo+PiArwqDCoMKgIHU2NCBvZmZzZXQ7Cj4+ICvCoMKgwqAgdTMyICpjczsKPj4gKwo+ PiArwqDCoMKgIC8qIExldCB0aGUgZGVmZXJyZWQgc3RhdGUgYWxsb2NhdGlvbiB0YWtlIGNhcmUg b2YgdGhpcy4gKi8KPj4gK8KgwqDCoCBpZiAoIWNlLT5zdGF0ZSkKPj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0KTsK Pj4gK8KgwqDCoCBpZiAoSVNfRVJSKGNzKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJf RVJSKGNzKTsKPj4gKwo+PiArwqDCoMKgIG9mZnNldCA9IGNlLT5zdGF0ZS0+bm9kZS5zdGFydCAr Cj4+ICvCoMKgwqDCoMKgwqDCoCBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUgKwo+PiArwqDCoMKg wqDCoMKgwqAgKENUWF9SX1BXUl9DTEtfU1RBVEUgKyAxKSAqIDQ7Cj4+ICsKPj4gK8KgwqDCoCAq Y3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40Owo+PiArwqDCoMKgICpjcysrID0gbG93ZXJf MzJfYml0cyhvZmZzZXQpOwo+PiArwqDCoMKgICpjcysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQp Owo+PiArwqDCoMKgICpjcysrID0gZ2VuOF9tYWtlX3JwY3MoJklOVEVMX0lORk8oZGV2X3ByaXYp LT5zc2V1LCBzc2V1KTsKPj4gKwo+PiArwqDCoMKgIGludGVsX3JpbmdfYWR2YW5jZShycSwgY3Mp Owo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gwqAgc3RhdGljIGludCBn ZW44X2luaXRfcmNzX2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4+IMKgIHsKPj4g wqDCoMKgwqDCoCBpbnQgcmV0Owo+PiBAQCAtMjI3NCw2ICsyMzQwLDggQEAgbG9naWNhbF9yaW5n X2RlZmF1bHRfdmZ1bmNzKHN0cnVjdCAKPj4gaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+IMKg wqDCoMKgwqAgZW5naW5lLT5lbWl0X2JyZWFkY3J1bWIgPSBnZW44X2VtaXRfYnJlYWRjcnVtYjsK Pj4gwqDCoMKgwqDCoCBlbmdpbmUtPmVtaXRfYnJlYWRjcnVtYl9zeiA9IGdlbjhfZW1pdF9icmVh ZGNydW1iX3N6Owo+PiArwqDCoMKgIGVuZ2luZS0+ZW1pdF9ycGNzX2NvbmZpZyA9IGdlbjhfZW1p dF9ycGNzX2NvbmZpZzsKPj4gKwo+PiDCoMKgwqDCoMKgIGVuZ2luZS0+c2V0X2RlZmF1bHRfc3Vi bWlzc2lvbiA9IGV4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uOwo+PiDCoMKgwqDCoMKg IGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDExKSB7Cj4+IEBAIC0yNDIyLDQxICsyNDkw LDYgQEAgaW50IGxvZ2ljYWxfeGNzX3JpbmdfaW5pdChzdHJ1Y3QgCj4+IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+PiDCoMKgwqDCoMKgIHJldHVybiBsb2dpY2FsX3JpbmdfaW5pdChlbmdpbmUp Owo+PiDCoCB9Cj4+IC11MzIgZ2VuOF9tYWtlX3JwY3MoY29uc3Qgc3RydWN0IHNzZXVfZGV2X2lu Zm8gKnNzZXUsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCB1bmlvbiBpbnRlbF9zc2V1IGN0eF9z c2V1KQo+PiAtewo+PiAtwqDCoMKgIHUzMiBycGNzID0gMDsKPj4gLQo+PiAtwqDCoMKgIC8qCj4+ IC3CoMKgwqDCoCAqIFN0YXJ0aW5nIGluIEdlbjksIHJlbmRlciBwb3dlciBnYXRpbmcgY2FuIGxl YXZlCj4+IC3CoMKgwqDCoCAqIHNsaWNlL3N1YnNsaWNlL0VVIGluIGEgcGFydGlhbGx5IGVuYWJs ZWQgc3RhdGUuIFdlCj4+IC3CoMKgwqDCoCAqIG11c3QgbWFrZSBhbiBleHBsaWNpdCByZXF1ZXN0 IHRocm91Z2ggUlBDUyBmb3IgZnVsbAo+PiAtwqDCoMKgwqAgKiBlbmFibGVtZW50Lgo+PiAtwqDC oMKgICovCj4+IC3CoMKgwqAgaWYgKHNzZXUtPmhhc19zbGljZV9wZykgewo+PiAtwqDCoMKgwqDC oMKgwqAgcnBjcyB8PSBHRU44X1JQQ1NfU19DTlRfRU5BQkxFOwo+PiAtwqDCoMKgwqDCoMKgwqAg cnBjcyB8PSBod2VpZ2h0OChjdHhfc3NldS5zbGljZV9tYXNrKSA8PCBHRU44X1JQQ1NfU19DTlRf U0hJRlQ7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IEdFTjhfUlBDU19FTkFCTEU7Cj4+IC3C oMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgaWYgKHNzZXUtPmhhc19zdWJzbGljZV9wZykgewo+PiAt wqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQQ1NfU1NfQ05UX0VOQUJMRTsKPj4gLcKgwqDC oMKgwqDCoMKgIHJwY3MgfD0gaHdlaWdodDgoY3R4X3NzZXUuc3Vic2xpY2VfbWFzaykgPDwKPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOOF9SUENTX1NTX0NOVF9TSElGVDsKPj4gLcKgwqDC oMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX0VOQUJMRTsKPj4gLcKgwqDCoCB9Cj4+IC0KPj4g LcKgwqDCoCBpZiAoc3NldS0+aGFzX2V1X3BnKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9 IGN0eF9zc2V1Lm1pbl9ldXNfcGVyX3N1YnNsaWNlIDw8Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEdFTjhfUlBDU19FVV9NSU5fU0hJRlQ7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IGN0 eF9zc2V1Lm1heF9ldXNfcGVyX3N1YnNsaWNlIDw8Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEdFTjhfUlBDU19FVV9NQVhfU0hJRlQ7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IEdFTjhf UlBDU19FTkFCTEU7Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgcmV0dXJuIHJwY3M7Cj4+ IC19Cj4+IC0KPj4gwqAgc3RhdGljIHUzMiBpbnRlbF9scl9pbmRpcmVjdF9jdHhfb2Zmc2V0KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHUzMiBp bmRpcmVjdF9jdHhfb2Zmc2V0Owo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuYwo+PiBpbmRleCA4ZjE5MzQ5YTYwNTUuLjQ0ZmIzYTFjZjhmOSAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+PiBAQCAtMjAyNiw2ICsyMDI2LDgg QEAgc3RhdGljIHZvaWQgaW50ZWxfcmluZ19kZWZhdWx0X3ZmdW5jcyhzdHJ1Y3QgCj4+IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmdp bmUtPmVtaXRfYnJlYWRjcnVtYl9zeisrOwo+PiDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCBlbmdp bmUtPmVtaXRfcnBjc19jb25maWcgPSBOVUxMOyAvKiBPbmx5IHN1cHBvcnRlZCBvbiBHZW44KyAq Lwo+PiArCj4+IMKgwqDCoMKgwqAgZW5naW5lLT5zZXRfZGVmYXVsdF9zdWJtaXNzaW9uID0gaTl4 eF9zZXRfZGVmYXVsdF9zdWJtaXNzaW9uOwo+PiDCoMKgwqDCoMKgIGlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDYpCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5o Cj4+IGluZGV4IGNjN2U3MzczMDQ2OS4uOTc0NWY0YWI4MjE0IDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4+IEBAIC00NjMsNiArNDYzLDEwIEBAIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3Mgewo+PiDCoMKgwqDCoMKgIHZvaWTCoMKgwqDCoMKgwqDCoCAoKmVt aXRfYnJlYWRjcnVtYikoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpOwo+PiDCoMKg wqDCoMKgIGludMKgwqDCoMKgwqDCoMKgIGVtaXRfYnJlYWRjcnVtYl9zejsKPj4gK8KgwqDCoCBp bnTCoMKgwqDCoMKgwqDCoCAoKmVtaXRfcnBjc19jb25maWcpKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bmlvbiBpbnRlbF9zc2V1IHNzZXUpOwo+PiArCj4+IMKg wqDCoMKgwqAgLyogUGFzcyB0aGUgcmVxdWVzdCB0byB0aGUgaGFyZHdhcmUgcXVldWUgKGUuZy4g ZGlyZWN0bHkgaW50bwo+PiDCoMKgwqDCoMKgwqAgKiB0aGUgbGVnYWN5IHJpbmdidWZmZXIgb3Ig dG8gdGhlIGVuZCBvZiBhbiBleGVjbGlzdCkuCj4+IMKgwqDCoMKgwqDCoCAqCj4+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVf ZHJtLmgKPj4gaW5kZXggN2Y1NjM0Y2U4ZTg4Li4yNGI5MDgzNmNlMWQgMTAwNjQ0Cj4+IC0tLSBh L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+PiArKysgYi9pbmNsdWRlL3VhcGkvZHJtL2k5 MTVfZHJtLmgKPj4gQEAgLTE0NTYsOSArMTQ1Niw0NyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2Nv bnRleHRfcGFyYW0gewo+PiDCoCAjZGVmaW5lwqDCoCBJOTE1X0NPTlRFWFRfTUFYX1VTRVJfUFJJ T1JJVFnCoMKgwqAgMTAyMyAvKiBpbmNsdXNpdmUgKi8KPj4gwqAgI2RlZmluZcKgwqAgSTkxNV9D T05URVhUX0RFRkFVTFRfUFJJT1JJVFnCoMKgwqDCoMKgwqDCoCAwCj4+IMKgICNkZWZpbmXCoMKg IEk5MTVfQ09OVEVYVF9NSU5fVVNFUl9QUklPUklUWcKgwqDCoCAtMTAyMyAvKiBpbmNsdXNpdmUg Ki8KPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBXaGVuIHVzaW5nIHRoZSBmb2xsb3dpbmcg cGFyYW0sIHZhbHVlIHNob3VsZCBiZSBhIHBvaW50ZXIgdG8KPj4gK8KgwqDCoMKgICogZHJtX2k5 MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldS4KPj4gK8KgwqDCoMKgICovCj4+ICsjZGVmaW5lIEk5 MTVfQ09OVEVYVF9QQVJBTV9TU0VVwqDCoMKgwqDCoMKgwqAgMHg3Cj4+IMKgwqDCoMKgwqAgX191 NjQgdmFsdWU7Cj4+IMKgIH07Cj4+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1f c3NldSB7Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogRW5naW5lIGNsYXNzICYgaW5zdGFu Y2UgdG8gYmUgY29uZmlndXJlZCBvciBxdWVyaWVkLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDC oCBfX3UzMiBjbGFzczsKPj4gK8KgwqDCoCBfX3UzMiBpbnN0YW5jZTsKPj4gKwo+PiArwqDCoMKg IC8qCj4+ICvCoMKgwqDCoCAqIE1hc2sgb2Ygc2xpY2VzIHRvIGVuYWJsZSBmb3IgdGhlIGNvbnRl eHQuIFZhbGlkIHZhbHVlcyBhcmUgYSAKPj4gc3Vic2V0Cj4+ICvCoMKgwqDCoCAqIG9mIHRoZSBi aXRtYXNrIHZhbHVlIHJldHVybmVkIGZvciBJOTE1X1BBUkFNX1NMSUNFX01BU0suCj4+ICvCoMKg wqDCoCAqLwo+PiArwqDCoMKgIF9fdTggc2xpY2VfbWFzazsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ ICvCoMKgwqDCoCAqIE1hc2sgb2Ygc3Vic2xpY2VzIHRvIGVuYWJsZSBmb3IgdGhlIGNvbnRleHQu IFZhbGlkIHZhbHVlcyBhcmUgYQo+PiArwqDCoMKgwqAgKiBzdWJzZXQgb2YgdGhlIGJpdG1hc2sg dmFsdWUgcmV0dXJuIGJ5IEk5MTVfUEFSQU1fU1VCU0xJQ0VfTUFTSy4KPj4gK8KgwqDCoMKgICov Cj4+ICvCoMKgwqAgX191OCBzdWJzbGljZV9tYXNrOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8Kg wqDCoMKgICogTWluaW11bS9NYXhpbXVtIG51bWJlciBvZiBFVXMgdG8gZW5hYmxlIHBlciBzdWJz bGljZSBmb3IgdGhlCj4+ICvCoMKgwqDCoCAqIGNvbnRleHQuIG1pbl9ldXNfcGVyX3N1YnNsaWNl IG11c3QgYmUgaW5mZXJpb3Igb3IgZXF1YWwgdG8KPj4gK8KgwqDCoMKgICogbWF4X2V1c19wZXJf c3Vic2xpY2UuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIF9fdTggbWluX2V1c19wZXJfc3Vi c2xpY2U7Cj4+ICvCoMKgwqAgX191OCBtYXhfZXVzX3Blcl9zdWJzbGljZTsKPj4gKwo+PiArwqDC oMKgIC8qCj4+ICvCoMKgwqDCoCAqIFVudXNlZCBmb3Igbm93LiBNdXN0IGJlIGNsZWFyZWQgdG8g emVyby4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgX191MzIgcnN2ZDsKPj4gK307Cj4+ICsK Pj4gwqAgZW51bSBkcm1faTkxNV9vYV9mb3JtYXQgewo+PiDCoMKgwqDCoMKgIEk5MTVfT0FfRk9S TUFUX0ExMyA9IDEswqDCoMKgwqDCoMKgwqAgLyogSFNXIG9ubHkgKi8KPj4gwqDCoMKgwqDCoCBJ OTE1X09BX0ZPUk1BVF9BMjkswqDCoMKgwqDCoMKgwqAgLyogSFNXIG9ubHkgKi8KPj4KPiAKPiBS ZWdhcmRzLAo+IAo+IFR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK