From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Siluvery, Arun" Subject: Re: [PATCHv7] drm/i915: Added Programming of the MOCS Date: Wed, 8 Jul 2015 16:08:20 +0100 Message-ID: <559D3CE4.7010002@linux.intel.com> References: <1436296381-1174-1-git-send-email-currojerez@riseup.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 6C7276E3CD for ; Wed, 8 Jul 2015 08:09:29 -0700 (PDT) In-Reply-To: <1436296381-1174-1-git-send-email-currojerez@riseup.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Francisco Jerez , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDcvMDcvMjAxNSAyMDoxMywgRnJhbmNpc2NvIEplcmV6IHdyb3RlOgo+IEZyb206IFBldGVy IEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgo+Cj4gVGhpcyBjaGFuZ2UgYWRkcyB0 aGUgcHJvZ3JhbW1pbmcgb2YgdGhlIE1PQ1MgcmVnaXN0ZXJzIHRvIHRoZSBnZW4gOSsKPiBwbGF0 Zm9ybXMuIFRoaXMgY2hhbmdlIHNldCBwcm9ncmFtcyB0aGUgTU9DUyByZWdpc3RlciB2YWx1ZXMg dG8gYSBzZXQKPiBvZiB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5lZCB0byBiZSBvcHRpbWFsLgo+Cj4g SXQgY3JlYXRlcyBhIGZpeGVkIHJlZ2lzdGVyIHNldCB0aGF0IGlzIHByb2dyYW1tZWQgYWNyb3Nz IHRoZSBkaWZmZXJlbnQKPiBlbmdpbmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2ZSB0aGUgc2Ft ZSB0YWJsZS4gVGhpcyBpcyBkb25lIGFzIHRoZQo+IG1haW4gUkNTIGNvbnRleHQgb25seSBob2xk cyB0aGUgcmVnaXN0ZXJzIGZvciBpdHNlbGYgYW5kIHRoZSBzaGFyZWQKPiBMMyB2YWx1ZXMuIEJ5 IHRyeWluZyB0byBrZWVwIHRoZSByZWdpc3RlcnMgY29uc2lzdGVudCBhY3Jvc3MgdGhlCj4gZGlm ZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2UgdGhlIHByb2dyYW1taW5nIGZvciB0aGUgcmVn aXN0ZXJzCj4gY29uc2lzdGVudC4KPgo+IHYyOgo+IC0nc3RhdGljIGNvbnN0JyBmb3IgcHJpdmF0 ZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHN0eWxlIGNoYW5nZXMuKE1hdHQgVHVybmVyKQo+IHYzOgo+ IC0gTWFrZSB0aGUgdGFibGVzICJzbGlnaHRseSIgbW9yZSByZWFkYWJsZS4gKERhbWllbiBMZXNw aWF1KQo+IC0gVXBkYXRlZCB0YWJsZXMgZml4IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uCj4gdjQ6 Cj4gLSBDb2RlIGZvcm1hdHRpbmcuIChDaHJpcyBXaWxzb24pCj4gLSByZS1wcml2YXRpc2VkIG1v Y3MgY29kZS4gKERhbmllbCBWZXR0ZXIpCj4gdjU6Cj4gLSBDaGFuZ2VkIHRoZSBuYW1lIG9mIGEg ZnVuY3Rpb24uIChDaHJpcyBXaWxzb24pCj4gdjY6Cj4gLSByZS1iYXNlZAo+IC0gQWRkZWQgTWVz YSB0YWJsZSBlbnRyeSAoc2t5bGFrZSAmIGJyb3h0b24pIChGcmFuY2lzY28gSmVyZXopCj4gLSBU aWRpZWQgdXAgdGhlIHJlYWRhYmlsaXR5IGRlZmluZXMgKEZyYW5jaXNjbyBKZXJleikKPiAtIE5V TUJFUiBvZiBlbnRyaWVzIGRlZmluZXMgd3JvbmcuIChKaW0gQmlzaCkKPiAtIEFkZGVkIGNvbW1l bnRzIHRvIGNsZWFyIHVwIHRoZSBtZWFuaW5nIG9mIHRoZSB0YWJsZXMgKEppbSBCaXNoKQo+Cj4g U2lnbmVkLW9mZi1ieTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+Cj4K PiB2NyAoRnJhbmNpc2NvIEplcmV6KToKPiAtIERvbid0IHdyaXRlIEwzLXNwZWNpZmljIE1PQ1Nf RVNDL1NDQyB2YWx1ZXMgaW50byB0aGUgZS9MTEMgY29udHJvbAo+ICAgIHRhYmxlcy4gIFByZWZp eCBMMy1zcGVjaWZpYyBkZWZpbmVzIGNvbnNpc3RlbnRseSB3aXRoIEwzXyBhbmQKPiAgICBlL0xM Qy1zcGVjaWZpYyBkZWZpbmVzIHdpdGggTEVfIHRvIGF2b2lkIHRoaXMga2luZCBvZiBjb25mdXNp b24gaW4KPiAgICB0aGUgZnV0dXJlLgo+IC0gQ2hhbmdlIEwzQ0MgV1QgZGVmaW5lIGJhY2sgdG8g UkVTRVJWRUQgKG1hdGNoZXMgbXkgaGFyZHdhcmUKPiAgICBkb2N1bWVudGF0aW9uIGFuZCB0aGUg b3JpZ2luYWwgcGF0Y2gsIHByb2JhYmx5IGEgbWlzdW5kZXJzdGFuZGluZwo+ICAgIG9mIG15IG93 biBwcmV2aW91cyBjb21tZW50KS4KPiAtIERyb3AgQW5kcm9pZCB0YWJsZXMsIGRlZmluZSBuZXcg bWluaW1hbCB0YWJsZXMgbW9yZSBzdWl0YWJsZSBmb3IgdGhlCj4gICAgb3BlbiBzb3VyY2Ugc3Rh Y2suCj4gLSBBZGQgY29tbWVudCB0aGF0IHRoZSBNT0NTIHRhYmxlcyBhcmUgcGFydCBvZiB0aGUg a2VybmVsIEFCSS4KPiAtIE1vdmUgaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKCkgYW5kIF9hZHZh bmNlKCkgY2FsbHMgb25lIGxldmVsIGRvd24KPiAgICAoQ2hyaXMgV2lsc29uKS4KPiAtIE1pbm9y IGZvcm1hdHRpbmcgYW5kIHN0eWxlIGZpeGVzLgo+Cj4gU2lnbmVkLW9mZi1ieTogRnJhbmNpc2Nv IEplcmV6IDxjdXJyb2plcmV6QHJpc2V1cC5uZXQ+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZSAgICAgfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaCAgIHwgICA5ICsrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgfCAg MTEgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oICB8ICAgMSArCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgfCAzMjQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3Mu aCB8ICA1NyArKysrKysrCj4gICA2IGZpbGVzIGNoYW5nZWQsIDQwMSBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX21vY3MuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX21vY3MuaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCBkZTIxOTY1Li5lNTJl MDEyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMzYsNiArMzYsNyBAQCBpOTE1LXkg Kz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ICAgCSAgaTkxNV90cmFjZV9wb2ludHMubyBcCj4gICAJ ICBpbnRlbF9ob3RwbHVnLm8gXAo+ICAgCSAgaW50ZWxfbHJjLm8gXAo+ICsJICBpbnRlbF9tb2Nz Lm8gXAo+ICAgCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKPiAgIAkgIGludGVsX3VuY29yZS5vCj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBpbmRleCAyYTI5YmNjLi45YjE3MjYwIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gQEAgLTc5MDYsNCArNzkwNiwxMyBAQCBlbnVtIHNrbF9k aXNwX3Bvd2VyX3dlbGxzIHsKPiAgICNkZWZpbmUgX1BBTEVUVEVfQSAoZGV2X3ByaXYtPmluZm8u ZGlzcGxheV9tbWlvX29mZnNldCArIDB4YTAwMCkKPiAgICNkZWZpbmUgX1BBTEVUVEVfQiAoZGV2 X3ByaXYtPmluZm8uZGlzcGxheV9tbWlvX29mZnNldCArIDB4YTgwMCkKPgo+ICsvKiBNT0NTIChN ZW1vcnkgT2JqZWN0IENvbnRyb2wgU3RhdGUpIHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIEdFTjlf TE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMgQ2FjaGUgQ29udHJvbCBiYXNlICovCj4gKwo+ICsj ZGVmaW5lIEdFTjlfR0ZYX01PQ1NfMAkJKDB4YzgwMCkJLyogR3JhcGhpY3MgTU9DUyBiYXNlIHJl Z2lzdGVyKi8KPiArI2RlZmluZSBHRU45X01GWDBfTU9DU18wCSgweGM5MDApCS8qIE1lZGlhIDAg TU9DUyBiYXNlIHJlZ2lzdGVyKi8KPiArI2RlZmluZSBHRU45X01GWDFfTU9DU18wCSgweGNBMDAp CS8qIE1lZGlhIDEgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KPiArI2RlZmluZSBHRU45X1ZFQk9YX01P Q1NfMAkoMHhjQjAwKQkvKiBWaWRlbyBNT0NTIGJhc2UgcmVnaXN0ZXIqLwo+ICsjZGVmaW5lIEdF TjlfQkxUX01PQ1NfMAkJKDB4Y2MwMCkJLyogQmxpdHRlciBNT0NTIGJhc2UgcmVnaXN0ZXIqLwo+ ICsKPiAgICNlbmRpZiAvKiBfSTkxNV9SRUdfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMu Ywo+IGluZGV4IGQ0ZjhiNDMuLjQ2NmQxN2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMu Ywo+IEBAIC0xMzUsNiArMTM1LDcgQEAKPiAgICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICAgI2lu Y2x1ZGUgPGRybS9pOTE1X2RybS5oPgo+ICAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNs dWRlICJpbnRlbF9tb2NzLmgiCj4KPiAgICNkZWZpbmUgR0VOOV9MUl9DT05URVhUX1JFTkRFUl9T SVpFICgyMiAqIFBBR0VfU0laRSkKPiAgICNkZWZpbmUgR0VOOF9MUl9DT05URVhUX1JFTkRFUl9T SVpFICgyMCAqIFBBR0VfU0laRSkKPiBAQCAtNzcyLDggKzc3Myw3IEBAIHN0YXRpYyBpbnQgbG9n aWNhbF9yaW5nX3ByZXBhcmUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBi eXRlcykKPiAgICAqCj4gICAgKiBSZXR1cm46IG5vbi16ZXJvIGlmIHRoZSByaW5nYnVmZmVyIGlz IG5vdCByZWFkeSB0byBiZSB3cml0dGVuIHRvLgo+ICAgICovCj4gLXN0YXRpYyBpbnQgaW50ZWxf bG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+IC0J CQkJICAgIGludCBudW1fZHdvcmRzKQo+ICtpbnQgaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgbnVtX2R3b3JkcykKPiAgIHsKPiAg IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7Cj4gICAJaW50IHJldDsKPiBAQCAt MTY3NSw2ICsxNjc1LDEzIEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jjc19jb250ZXh0KHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiBy ZXQ7Cj4KPiArCS8qCj4gKwkgKiBGYWlsaW5nIHRvIHByb2dyYW0gdGhlIE1PQ1MgaXMgbm9uLWZh dGFsLlRoZSBzeXN0ZW0gd2lsbCBub3QKPiArCSAqIHJ1biBhdCBwZWFrIHBlcmZvcm1hbmNlLiBT byBnZW5lcmF0ZSBhIHdhcm5pbmcgYW5kIGNhcnJ5IG9uLgo+ICsJICovCj4gKwlpZiAoaW50ZWxf cmNzX2NvbnRleHRfaW5pdF9tb2NzKHJlcSkgIT0gMCkKPiArCQlEUk1fRVJST1IoIk1PQ1MgZmFp bGVkIHRvIHByb2dyYW06IGV4cGVjdCBwZXJmb3JtYW5jZSBpc3N1ZXMuIik7Cgp3ZSBkb24ndCBz ZWUgdGhpcyB0eXBlIG9mIGNvbnN0cnVjdHMsIHRvIGJlIGNvbnNpc3RlbnQgd2h5IG5vdCwKcmV0 ID0gaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2NzKHJlcSk7CmlmIChyZXQpCglEUk1fRVJST1Io KTsKCm5pdHBpY2ssIGNvbW1lbnQgc2F5cyB3YXJuaW5nIGJ1dCBEUk1fRVJST1IgaXMgdXNlZC4K J1xuJyBtaXNzaW5nIGluIERSTV9FUlJPUgoKPiArCj4gICAJcmV0dXJuIGludGVsX2xyX2NvbnRl eHRfcmVuZGVyX3N0YXRlX2luaXQocmVxKTsKPiAgIH0KPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5oCj4gaW5kZXggZTAyOTlmYi4uNjRmODlmOTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHJjLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuaAo+IEBAIC00Miw2ICs0Miw3IEBAIGludCBpbnRlbF9sb2dpY2FsX3JpbmdfcmVzZXJ2ZV9z cGFjZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpOwo+ICAgdm9pZCBpbnRl bF9sb2dpY2FsX3Jpbmdfc3RvcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiAgIHZv aWQgaW50ZWxfbG9naWNhbF9yaW5nX2NsZWFudXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu Zyk7Cj4gICBpbnQgaW50ZWxfbG9naWNhbF9yaW5nc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+ICtpbnQgaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxLCBpbnQgbnVtX2R3b3Jkcyk7Cj4KPiAgIGludCBsb2dpY2FsX3JpbmdfZmx1 c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSk7Cj4gICAvKioK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi5mN2I5M2U5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX21vY3MuYwo+IEBAIC0wLDAgKzEsMzI0IEBACj4gKy8qCj4gKyAqIENvcHly aWdodCAoYykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKgo+ICsg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUu Cj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcgRlJPTSwKPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4g KyAqLwo+ICsKPiArI2luY2x1ZGUgImludGVsX21vY3MuaCIKPiArI2luY2x1ZGUgImludGVsX2xy Yy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgo+ICsKPiArLyogc3RydWN0dXJl cyByZXF1aXJlZCAqLwo+ICtzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRyeSB7Cj4gKwl1MzIJY29u dHJvbF92YWx1ZTsKPiArCXUxNglsM2NjX3ZhbHVlOwo+ICt9Owo+ICsKPiArc3RydWN0IGRybV9p OTE1X21vY3NfdGFibGUgewo+ICsJdTMyCQkJCQlzaXplOwo+ICsJY29uc3Qgc3RydWN0IGRybV9p OTE1X21vY3NfZW50cnkJKnRhYmxlOwo+ICt9Owo+ICsKdG9vIG11Y2ggc3BhY2luZy4KCj4gKy8q IERlZmluZXMgZm9yIHRoZSB0YWJsZXMgKFhYWF9NT0NTXzAgLSBYWFhfTU9DU182MykgKi8KPiAr I2RlZmluZSBMRV9DQUNIRUFCSUxJVFkodmFsdWUpCSh2YWx1ZSA8PCAwKQo+ICsjZGVmaW5lIExF X1RHVF9DQUNIRSh2YWx1ZSkJKHZhbHVlIDw8IDIpCj4gKyNkZWZpbmUgTEVfTFJVTSh2YWx1ZSkJ CSh2YWx1ZSA8PCA0KQo+ICsjZGVmaW5lIExFX0FPTSh2YWx1ZSkJCSh2YWx1ZSA8PCA2KQo+ICsj ZGVmaW5lIExFX1JTQyh2YWx1ZSkJCSh2YWx1ZSA8PCA3KQo+ICsjZGVmaW5lIExFX1NDQyh2YWx1 ZSkJCSh2YWx1ZSA8PCA4KQo+ICsjZGVmaW5lIExFX1BGTSh2YWx1ZSkJCSh2YWx1ZSA8PCAxMSkK PiArI2RlZmluZSBMRV9TQ0YodmFsdWUpCQkodmFsdWUgPDwgMTQpCj4gKwo+ICsvKiBEZWZpbmVz IGZvciB0aGUgdGFibGVzIChMTkNGTU9DUzAgLSBMTkNGTU9DUzMxKSAtIHR3byBlbnRyaWVzIHBl ciB3b3JkICovCj4gKyNkZWZpbmUgTDNfRVNDKHZhbHVlKQkJKHZhbHVlIDw8IDApCj4gKyNkZWZp bmUgTDNfU0NDKHZhbHVlKQkJKHZhbHVlIDw8IDEpCj4gKyNkZWZpbmUgTDNfQ0FDSEVBQklMSVRZ KHZhbHVlKQkodmFsdWUgPDwgNCkKPiArCj4gKy8qIEhlbHBlciBkZWZpbmVzICovCj4gKyNkZWZp bmUgR0VOOV9OVU1fTU9DU19FTlRSSUVTCSg2MikgIC8qIDYyIG91dCBvZiA2NCAtIDYzICYgNjQg YXJlIHJlc2VydmVkLiAqLwo+ICsKPiArLyogKGUpTExDIGNhY2hpbmcgb3B0aW9ucyAqLwo+ICsj ZGVmaW5lIExFX1BBR0VUQUJMRQkJKDApCj4gKyNkZWZpbmUgTEVfVUMJCQkoMSkKPiArI2RlZmlu ZSBMRV9XVAkJCSgyKQo+ICsjZGVmaW5lIExFX1dCCQkJKDMpCj4gKwo+ICsvKiBMMyBjYWNoaW5n IG9wdGlvbnMgKi8KPiArI2RlZmluZSBMM19ESVJFQ1QJCSgwKQo+ICsjZGVmaW5lIEwzX1VDCQkJ KDEpCj4gKyNkZWZpbmUgTDNfUkVTRVJWRUQJCSgyKQo+ICsjZGVmaW5lIEwzX1dCCQkJKDMpCj4g Kwo+ICsvKiBUYXJnZXQgY2FjaGUgKi8KPiArI2RlZmluZSBFTExDCQkJKDApCj4gKyNkZWZpbmUg TExDCQkJKDEpCj4gKyNkZWZpbmUgTExDX0VMTEMJCSgyKQo+ICsKPiArLyoKPiArICogTU9DUyB0 YWJsZXMKPiArICoKPiArICogVGhlc2UgYXJlIHRoZSBNT0NTIHRhYmxlcyB0aGF0IGFyZSBwcm9n cmFtbWVkIGFjcm9zcyBhbGwgdGhlIHJpbmdzLgo+ICsgKiBUaGUgY29udHJvbCB2YWx1ZSBpcyBw cm9ncmFtbWVkIHRvIGFsbCB0aGUgcmluZ3MgdGhhdCBzdXBwb3J0IHRoZQo+ICsgKiBNT0NTIHJl Z2lzdGVycy4gV2hpbGUgdGhlIGwzY2NfdmFsdWVzIGFyZSBvbmx5IHByb2dyYW1tZWQgdG8gdGhl Cj4gKyAqIExOQ0ZDTU9DUzAgLSBMTkNGQ01PQ1MzMiByZWdpc3RlcnMuCj4gKyAqCj4gKyAqIFRo ZXNlIHRhYmxlcyBhcmUgaW50ZW5kZWQgdG8gYmUga2VwdCByZWFzb25hYmx5IGNvbnNpc3RlbnQg YWNyb3NzCj4gKyAqIHBsYXRmb3Jtcy4gSG93ZXZlciBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIG5v dCBhcHBsaWNhYmxlIHRvIGFsbCBvZgo+ICsgKiB0aGVtLgo+ICsgKgo+ICsgKiBOT1RFOiBUaGVz ZSB0YWJsZXMgTVVTVCBzdGFydCB3aXRoIGJlaW5nIHVuY2FjaGVkIGFuZCB0aGUgbGVuZ3RoCj4g KyAqICAgICAgIE1VU1QgYmUgbGVzcyB0aGFuIDYzIGFzIHRoZSBsYXN0IHR3byByZWdpc3RlcnMg YXJlIHJlc2VydmVkCj4gKyAqICAgICAgIGJ5IHRoZSBoYXJkd2FyZS4gIFRoZXNlIHRhYmxlcyBh cmUgcGFydCBvZiB0aGUga2VybmVsIEFCSSBhbmQKPiArICogICAgICAgbWF5IG9ubHkgYmUgdXBk YXRlZCBpbmNyZW1lbnRhbGx5IGJ5IGFkZGluZyBlbnRyaWVzIGF0IHRoZQo+ICsgKiAgICAgICBl bmQuCj4gKyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgc2t5 bGFrZV9tb2NzX3RhYmxlW10gPSB7Cj4gKwkvKiB7IDB4MDAwMDAwMDksIDB4MDAxMCB9ICovCj4g Kwl7IChMRV9DQUNIRUFCSUxJVFkoTEVfVUMpIHwgTEVfVEdUX0NBQ0hFKExMQ19FTExDKSB8IExF X0xSVU0oMCkgfAo+ICsJICAgTEVfQU9NKDApIHwgTEVfUlNDKDApIHwgTEVfU0NDKDApIHwgTEVf UEZNKDApIHwgTEVfU0NGKDApKSwKPiArCSAgKEwzX0VTQygwKSB8IEwzX1NDQygwKSB8IEwzX0NB Q0hFQUJJTElUWShMM19VQykpIH0sCj4gKwkvKiB7IDB4MDAwMDAwMzgsIDB4MDAzMCB9ICovCj4g Kwl7IChMRV9DQUNIRUFCSUxJVFkoTEVfUEFHRVRBQkxFKSB8IExFX1RHVF9DQUNIRShMTENfRUxM QykgfCBMRV9MUlVNKDMpIHwKPiArCSAgIExFX0FPTSgwKSB8IExFX1JTQygwKSB8IExFX1NDQygw KSB8IExFX1BGTSgwKSB8IExFX1NDRigwKSksCj4gKwkgIChMM19FU0MoMCkgfCBMM19TQ0MoMCkg fCBMM19DQUNIRUFCSUxJVFkoTDNfV0IpKSB9LAo+ICsJLyogeyAweDAwMDAwMDNiLCAweDAwMzAg fSAqLwo+ICsJeyAoTEVfQ0FDSEVBQklMSVRZKExFX1dCKSB8IExFX1RHVF9DQUNIRShMTENfRUxM QykgfCBMRV9MUlVNKDMpIHwKPiArCSAgIExFX0FPTSgwKSB8IExFX1JTQygwKSB8IExFX1NDQygw KSB8IExFX1BGTSgwKSB8IExFX1NDRigwKSksCj4gKwkgIChMM19FU0MoMCkgfCBMM19TQ0MoMCkg fCBMM19DQUNIRUFCSUxJVFkoTDNfV0IpKSB9Cj4gK307Cj4gKwo+ICsvKiBOT1RFOiB0aGUgTEVf VEdUX0NBQ0hFIGlzIG5vdCB1c2VkIG9uIEJyb3h0b24gKi8KPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1faTkxNV9tb2NzX2VudHJ5IGJyb3h0b25fbW9jc190YWJsZVtdID0gewo+ICsJLyogeyAw eDAwMDAwMDA5LCAweDAwMTAgfSAqLwo+ICsJeyAoTEVfQ0FDSEVBQklMSVRZKExFX1VDKSB8IExF X1RHVF9DQUNIRShMTENfRUxMQykgfCBMRV9MUlVNKDApIHwKPiArCSAgIExFX0FPTSgwKSB8IExF X1JTQygwKSB8IExFX1NDQygwKSB8IExFX1BGTSgwKSB8IExFX1NDRigwKSksCj4gKwkgIChMM19F U0MoMCkgfCBMM19TQ0MoMCkgfCBMM19DQUNIRUFCSUxJVFkoTDNfVUMpKSB9LAo+ICsJLyogeyAw eDAwMDAwMDM4LCAweDAwMzAgfSAqLwo+ICsJeyAoTEVfQ0FDSEVBQklMSVRZKExFX1BBR0VUQUJM RSkgfCBMRV9UR1RfQ0FDSEUoTExDX0VMTEMpIHwgTEVfTFJVTSgzKSB8Cj4gKwkgICBMRV9BT00o MCkgfCBMRV9SU0MoMCkgfCBMRV9TQ0MoMCkgfCBMRV9QRk0oMCkgfCBMRV9TQ0YoMCkpLAo+ICsJ ICAoTDNfRVNDKDApIHwgTDNfU0NDKDApIHwgTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSkgfSwKPiAr CS8qIHsgMHgwMDAwMDAzYiwgMHgwMDMwIH0gKi8KPiArCXsgKExFX0NBQ0hFQUJJTElUWShMRV9X QikgfCBMRV9UR1RfQ0FDSEUoTExDX0VMTEMpIHwgTEVfTFJVTSgzKSB8Cj4gKwkgICBMRV9BT00o MCkgfCBMRV9SU0MoMCkgfCBMRV9TQ0MoMCkgfCBMRV9QRk0oMCkgfCBMRV9TQ0YoMCkpLAo+ICsJ ICAoTDNfRVNDKDApIHwgTDNfU0NDKDApIHwgTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSkgfQo+ICt9 Owo+ICsKPiArLyoqCj4gKyAqIGdldF9tb2NzX3NldHRpbmdzCj4gKyAqCj4gKyAqIFRoaXMgZnVu Y3Rpb24gd2lsbCByZXR1cm4gdGhlIHZhbHVlcyBvZiB0aGUgTU9DUyB0YWJsZSB0aGF0IG5lZWRz IHRvCj4gKyAqIGJlIHByb2dyYW1tZWQgZm9yIHRoZSBwbGF0Zm9ybS4gSXQgd2lsbCByZXR1cm4g dGhlIHZhbHVlcyB0aGF0IG5lZWQKPiArICogdG8gYmUgcHJvZ3JhbW1lZCBhbmQgaWYgdGhleSBu ZWVkIHRvIGJlIHByb2dyYW1tZWQuCj4gKyAqCj4gKyAqIElmIHRoZSByZXR1cm4gdmFsdWVzIGlz IGZhbHNlIHRoZW4gdGhlIHJlZ2lzdGVycyBkbyBub3QgbmVlZCBwcm9ncmFtbWluZy4KPiArICov Cj4gK3N0YXRpYyBib29sIGdldF9tb2NzX3NldHRpbmdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSkKPiArewp5b3Ug d2lsbCBnZXQgYSB3YXJuaW5nIGZyb20ga2VybmVsIDAtZGF5IHRoYXQgZGVzY3JpcHRpb24gaXMg bWlzc2luZyBmb3IgCmFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlLCBJIHRoaW5rIGl0IGlzIGJl dHRlciB0byBhZGQgbm93IG9yIG5ldyAKd2FybmluZyBnZXRzIGFkZGVkIHRvIHRoZSBjdXJyZW50 IGxpc3Qgb2Ygd2FybmluZ3MuCgo+ICsJYm9vbCByZXN1bHQgPSBmYWxzZTsKPiArCj4gKwlpZiAo SVNfU0tZTEFLRShkZXYpKSB7Cj4gKwkJdGFibGUtPnNpemUgID0gQVJSQVlfU0laRShza3lsYWtl X21vY3NfdGFibGUpOwo+ICsJCXRhYmxlLT50YWJsZSA9IHNreWxha2VfbW9jc190YWJsZTsKPiAr CQlyZXN1bHQgPSB0cnVlOwo+ICsJfSBlbHNlIGlmIChJU19CUk9YVE9OKGRldikpIHsKPiArCQl0 YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKGJyb3h0b25fbW9jc190YWJsZSk7Cj4gKwkJdGFibGUt PnRhYmxlID0gYnJveHRvbl9tb2NzX3RhYmxlOwo+ICsJCXJlc3VsdCA9IHRydWU7Cj4gKwl9IGVs c2Ugewo+ICsJCS8qIFBsYXRmb3JtIHRoYXQgc2hvdWxkIGhhdmUgYSBNT0NTIHRhYmxlIGRvZXMg bm90ICovCj4gKwkJV0FSTl9PTihJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KTsKaWYgd2UgdXNl IHRoaXMga2VybmVsIG9uIGZ1dHVyZSBwbGF0Zm9ybXMgYmVmb3JlIE1PQ1Mgc3VwcG9ydCBpcyBh ZGRlZCwgCnRoaXMgcHJpbnRzIFdBUk5JTkcgZXZlcnkgdGltZSBjb250ZXh0IGlzIGluaXRpYWxp emVkLCBJIGZhY2VkIHNpbWlsYXIgCmlzc3VlIHdpdGggV0EgYmF0Y2ggYW5kIHRoZSBjb21tZW50 IHRoYXQgSSByZWNlaXZlZCB3YXMgdGhhdCBXQVJOSU5HIGlzIApub3QgdmVyeSB1c2VmdWwgaGVy ZSBoZW5jZSBjaGFuZ2VkIGl0IHRvIERSTV9FUlJPUiBidXQgbm8gc3Ryb25nIApvcGluaW9uLCBw ZXJoYXBzIFdBUk5fT05DRSBpZiB5b3Ugd2FudCB0byByZXRhaW4gdGhlIHdhcm5pbmcuCgo+ICsJ fQo+ICsKPiArCXJldHVybiByZXN1bHQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBlbWl0X21vY3Nf Y29udHJvbF90YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRhYmxlCj4gKyAqIEByZXE6 CVJlcXVlc3QgdG8gc2V0IHVwIHRoZSBNT0NTIHRhYmxlIGZvci4KPiArICogQHRhYmxlOglUaGUg dmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLgo+ICsgKiBAcmVnX2Jhc2U6 CVRoZSBiYXNlIGZvciB0aGUgZW5naW5lIHRoYXQgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZC4KPiAr ICoKPiArICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lTVEVSX0lN TSBjb21tYW5kIGZvciB0aGUKPiArICogZ2l2ZW4gdGFibGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVu IGFkZHJlc3MuCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgdGhl IGVycm9yIHN0YXR1cy4KPiArICovCj4gK3N0YXRpYyBpbnQgZW1pdF9tb2NzX2NvbnRyb2xfdGFi bGUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gKwkJCQkgICBjb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFibGUsCj4gKwkJCQkgICB1MzIgcmVnX2Jhc2UpCj4g K3sKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gcmVxLT5yaW5nYnVmOwo+ ICsJdW5zaWduZWQgaW50IGluZGV4Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpbnRlbF9s b2dpY2FsX3JpbmdfYmVnaW4ocmVxLCAyICsgMiAqIEdFTjlfTlVNX01PQ1NfRU5UUklFUyk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVHKCJpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4gZmFp bGVkICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfbG9n aWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKPiArCQkJCU1JX0xPQURfUkVHSVNURVJfSU1NKEdFTjlf TlVNX01PQ1NfRU5UUklFUykpOwo+ICsKPiArCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRhYmxl LT5zaXplOyBpbmRleCsrKSB7Cj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1Ziwg cmVnX2Jhc2UgKyBpbmRleCAqIDQpOwo+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdi dWYsCj4gKwkJCQkJdGFibGUtPnRhYmxlW2luZGV4XS5jb250cm9sX3ZhbHVlKTsKPiArCX0KCmlu dGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwphZnRlciB0aGUgbG9vcCB0 byBtYWtlIG51bWJlciBvZiBjb21tYW5kcyBldmVuLgpDb3VudCBhbHNvIG5lZWQgdG8gYmUgdXBk YXRlZC4KCj4gKwo+ICsJLyoKPiArCSAqIE9rLCBub3cgc2V0IHRoZSB1bnVzZWQgZW50cmllcyB0 byB1bmNhY2hlZC4gVGhlc2UgZW50cmllcwo+ICsJICogYXJlIG9mZmljaWFsbHkgdW5kZWZpbmVk IGFuZCBubyBjb250cmFjdCBmb3IgdGhlIGNvbnRlbnRzCj4gKwkgKiBhbmQgc2V0dGluZ3MgaXMg Z2l2ZW4gZm9yIHRoZXNlIGVudHJpZXMuCj4gKwkgKgo+ICsJICogRW50cnkgMCBpbiB0aGUgdGFi bGUgaXMgdW5jYWNoZWQgLSBzbyB3ZSBhcmUganVzdCB3cml0aW5nCj4gKwkgKiB0aGF0IHZhbHVl IHRvIGFsbCB0aGUgdXNlZCBlbnRyaWVzLgo+ICsJICovCj4gKwlmb3IgKDsgaW5kZXggPCBHRU45 X05VTV9NT0NTX0VOVFJJRVM7IGluZGV4KyspIHsKPiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1p dChyaW5nYnVmLCByZWdfYmFzZSArIGluZGV4ICogNCk7Cj4gKwkJaW50ZWxfbG9naWNhbF9yaW5n X2VtaXQocmluZ2J1ZiwgdGFibGUtPnRhYmxlWzBdLmNvbnRyb2xfdmFsdWUpOwo+ICsJfQo+ICsK PiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwo+ICsJaW50ZWxf bG9naWNhbF9yaW5nX2FkdmFuY2UocmluZ2J1Zik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBlbWl0X21vY3NfbDNjY190YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250 cm9sIHRhYmxlCj4gKyAqIEByZXE6CVJlcXVlc3QgdG8gc2V0IHVwIHRoZSBNT0NTIHRhYmxlIGZv ci4KPiArICogQHRhYmxlOglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCBy ZWdzLgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVH SVNURVJfSU1NIGNvbW1hbmQgZm9yIHRoZQo+ICsgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0 aGUgZ2l2ZW4gYWRkcmVzcy4gVGhpcyByZWdpc3RlciBzZXQgaXMKPiArICogcHJvZ3JhbW1lZCBp biBwYWlycy4KPiArICoKPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSB0aGUg ZXJyb3Igc3RhdHVzLgo+ICsgKi8KPiArc3RhdGljIGludCBlbWl0X21vY3NfbDNjY190YWJsZShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiArCQkJCWNvbnN0IHN0cnVjdCBkcm1f aTkxNV9tb2NzX3RhYmxlICp0YWJsZSkKPiArewo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIg KnJpbmdidWYgPSByZXEtPnJpbmdidWY7Cj4gKwl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwl1bnNp Z25lZCBpbnQgaTsKPiArCXUzMiB2YWx1ZTsKPiArCXUzMiBmaWxsZXIgPSAodGFibGUtPnRhYmxl WzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKPiArCQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192 YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpbnRlbF9s b2dpY2FsX3JpbmdfYmVnaW4ocmVxLCAyICsgR0VOOV9OVU1fTU9DU19FTlRSSUVTKTsKPiArCWlm IChyZXQpIHsKPiArCQlEUk1fREVCVUcoImludGVsX2xvZ2ljYWxfcmluZ19iZWdpbiBmYWlsZWQg JWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlpbnRlbF9sb2dpY2Fs X3JpbmdfZW1pdChyaW5nYnVmLAo+ICsJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShHRU45X05VTV9N T0NTX0VOVFJJRVMgLyAyKSk7Cj4gKwo+ICsJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgdGFi bGUtPnNpemUgLyAyOyBpKyssIGNvdW50ICs9IDIpIHsKPiArCQl2YWx1ZSA9ICh0YWJsZS0+dGFi bGVbY291bnRdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKPiArCQkJKCh0YWJsZS0+dGFibGVbY291 bnQgKyAxXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8PCAxNik7Cj4gKwo+ICsJCWludGVsX2xvZ2lj YWxfcmluZ19lbWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NTMCArIGkgKiA0KTsKPiArCQlpbnRl bF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7Cj4gKwl9Cj4gKwpzYW1lIGFzIGFi b3ZlLgoKPiArCWlmICh0YWJsZS0+c2l6ZSAmIDB4MDEpIHsKPiArCQkvKiBPZGQgdGFibGUgc2l6 ZSAtIDEgbGVmdCBvdmVyICovCj4gKwkJdmFsdWUgPSAodGFibGUtPnRhYmxlW2NvdW50XS5sM2Nj X3ZhbHVlICYgMHhmZmZmKSB8Cj4gKwkJCSgodGFibGUtPnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAw eGZmZmYpIDw8IDE2KTsKPiArCX0gZWxzZQo+ICsJCXZhbHVlID0gZmlsbGVyOwo+ICsKPiArCS8q Cj4gKwkgKiBOb3cgc2V0IHRoZSByZXN0IG9mIHRoZSB0YWJsZSB0byB1bmNhY2hlZCAtIHVzZSBl bnRyeSAwIGFzCj4gKwkgKiB0aGlzIHdpbGwgYmUgdW5jYWNoZWQuIExlYXZlIHRoZSBsYXN0IHBh aXIgdW5pbml0aWFsaXNlZCBhcwo+ICsJICogdGhleSBhcmUgcmVzZXJ2ZWQgYnkgdGhlIGhhcmR3 YXJlLgo+ICsJICovCj4gKwlmb3IgKDsgaSA8IEdFTjlfTlVNX01PQ1NfRU5UUklFUyAvIDI7IGkr Kykgewo+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NT MCArIGkgKiA0KTsKPiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7 Cj4gKwo+ICsJCXZhbHVlID0gZmlsbGVyOwo+ICsJfQo+ICsKPiArCWludGVsX2xvZ2ljYWxfcmlu Z19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwo+ICsJaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2Uo cmluZ2J1Zik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9y Y3NfY29udGV4dF9pbml0X21vY3MoKSAtIHByb2dyYW0gdGhlIE1PQ1MgcmVnaXN0ZXIuCj4gKyAq Cj4gKyAqIEByZXE6CVJlcXVlc3QgdG8gc2V0IHVwIHRoZSBNT0NTIHRhYmxlcyBmb3IuCj4gKyAq Cj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IGEgYmF0Y2ggYnVmZmVyIHdpdGggdGhlIHZh bHVlcyByZXF1aXJlZCBmb3IKPiArICogcHJvZ3JhbW1pbmcgdGhlIE1PQ1MgcmVnaXN0ZXIgdmFs dWVzIGZvciBhbGwgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQKPiArICogcmluZ3MuCj4gKyAqCj4g KyAqIFRoZXNlIHJlZ2lzdGVycyBhcmUgcGFydGlhbGx5IHN0b3JlZCBpbiB0aGUgUkNTIGNvbnRl eHQsIHNvIHRoZXkgYXJlCj4gKyAqIGVtaXR0ZWQgYXQgdGhlIHNhbWUgdGltZSBzbyB0aGF0IHdo ZW4gYSBjb250ZXh0IGlzIGNyZWF0ZWQgdGhlc2UgcmVnaXN0ZXJzCj4gKyAqIGFyZSBzZXQgdXAu IFRoZXNlIHJlZ2lzdGVycyBoYXZlIHRvIGJlIGVtaXR0ZWQgaW50byB0aGUgc3RhcnQgb2YgdGhl Cj4gKyAqIGNvbnRleHQgYXMgc2V0dGluZyB0aGUgRUxTUCB3aWxsIHJlLWluaXQgc29tZSBvZiB0 aGVzZSByZWdpc3RlcnMgYmFjawo+ICsgKiB0byB0aGUgaHcgdmFsdWVzLgo+ICsgKgo+ICsgKiBA cmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBlcnJvciBzdGF0dXMuCj4gKyAqLwo+ ICtpbnQgaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2NzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSB0Owo+ICsJaW50 IHJldDsKPiArCj4gKwlpZiAoZ2V0X21vY3Nfc2V0dGluZ3MocmVxLT5yaW5nLT5kZXYsICZ0KSkg ewpjYW4gYmUgY2hhbmdlZCB0byAicmV0ID0gZ2V0X21vY3Nfc2V0dGluZ3MoKTsiIHRvIGJlIGNv bnNpc3RlbnQgYW5kIApoYW5kbGUgZXJyb3IgY2FzZSBmaXJzdDsgb3RoZXJ3aXNlIGluIHRoaXMg Y2FzZSBub24temVybyBpcyB0cmVhdGVkIGFzIApzdWNjZXNzIGNhc2UgYW5kIHplcm8gYXMgZmFp bHVyZS4KCmFueSBzYW5pdHkgY2hlY2sgb24gdGhlIHJlY2VpdmVkIHRhYmxlLCBpZiBhdCBhbGwg cmVxdWlyZWQ/Cgo+ICsJCS8qIFByb2dyYW0gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzICovCj4gKwkJ cmV0ID0gZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmVxLCAmdCwgR0VOOV9HRlhfTU9DU18wKTsK PiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQlyZXQgPSBlbWl0X21vY3Nf Y29udHJvbF90YWJsZShyZXEsICZ0LCBHRU45X01GWDBfTU9DU18wKTsKPiArCQlpZiAocmV0KQo+ ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQlyZXQgPSBlbWl0X21vY3NfY29udHJvbF90YWJsZShy ZXEsICZ0LCBHRU45X01GWDFfTU9DU18wKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0 Owo+ICsKPiArCQlyZXQgPSBlbWl0X21vY3NfY29udHJvbF90YWJsZShyZXEsICZ0LCBHRU45X1ZF Qk9YX01PQ1NfMCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJcmV0 ID0gZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmVxLCAmdCwgR0VOOV9CTFRfTU9DU18wKTsKPiAr CQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQkvKiBOb3cgcHJvZ3JhbSB0aGUg bDNjYyByZWdpc3RlcnMgKi8KPiArCQlyZXQgPSBlbWl0X21vY3NfbDNjY190YWJsZShyZXEsICZ0 KTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0OwoKSW4gY2FzZSBpZiB3ZSBmYWlsIGJl Zm9yZSBzZXR0aW5nIHRhYmxlcyBmb3IgYWxsIHJpbmdzLCBpcyB0aGF0IGEgdmFsaWQgCnNldHVw PyBJIG1lYW4gZG8gd2UgbmVlZCB0byByZXZlcnQgdGhlIGVudHJpZXMgaW4gdGhvc2UgcmluZ3Mg dGhhdCBhcmUgCnN1Y2Nlc3NmdWxseSBzZXR1cD8KCj4gKwo+ICsJCURSTV9ERUJVRygiTU9DUzog VGFibGUgc2V0IGluIGNvbnRleHQuXG4iKTsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0RFQlVHKCJN T0NTOiBUYWJsZSBub3Qgc3VwcG9ydGVkIG9uIHBsYXRmb3JtLlxuIik7CkRSTV9FUlJPUiBtYXkg YmU/CmFuZCBpdCByZXR1cm5zIDAgaW4gdGhpcyBjYXNlIGFsc28gYXMgc3VjY2VzczsgcGVyaGFw cyB3ZSBjYW4gcmVtb3ZlIApwcmludGluZyBhbnkgbWVzc2FnZSBpbiB0aGlzIGFzIHdlIGFscmVh ZHkgV0FSTi9EUk1fRVJST1IgaW4gCmdldF9tb2NzX3NldHRpbmdzKCkgb3IgbW92ZSBpdCBoZXJl IGFuZCByZW1vdmUgaXQgdGhhdCBmdW5jdGlvbi4KCnJlZ2FyZHMKQXJ1bgoKPiArCX0KPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9tb2NzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjc2ZTQ1YjEKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCj4gQEAgLTAsMCArMSw1NyBAQAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRI RQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIElOVEVMX01PQ1NfSAo+ICsj ZGVmaW5lIElOVEVMX01PQ1NfSAo+ICsKPiArLyoqCj4gKyAqIERPQzogTWVtb3J5IE9iamVjdHMg Q29udHJvbCBTdGF0ZSAoTU9DUykKPiArICoKPiArICogTW90aXZhdGlvbjoKPiArICogSW4gcHJl dmlvdXMgR2VucyB0aGUgTU9DUyBzZXR0aW5ncyB3YXMgYSB2YWx1ZSB0aGF0IHdhcyBzZXQgYnkg dXNlciBsYW5kIGFzCj4gKyAqIHBhcnQgb2YgdGhlIGJhdGNoLiBJbiBHZW45IHRoaXMgaGFzIGNo YW5nZWQgdG8gYmUgYSBzaW5nbGUgdGFibGUgKHBlciByaW5nKQo+ICsgKiB0aGF0IGFsbCBiYXRj aGVzIG5vdyByZWZlcmVuY2UgYnkgaW5kZXggaW5zdGVhZCBvZiBwcm9ncmFtbWluZyB0aGUgTU9D Uwo+ICsgKiBkaXJlY3RseS4KPiArICoKPiArICogVGhlIG9uZSB3cmlua2xlIGluIHRoaXMgaXMg dGhhdCBvbmx5IFBBUlQgb2YgdGhlIE1PQ1MgdGFibGVzIGFyZSBpbmNsdWRlZAo+ICsgKiBpbiBj b250ZXh0IChUaGUgR0ZYX01PQ1NfMCAtIEdGWF9NT0NTXzY0IGFuZCB0aGUgTE5DRkNNT0NTMCAt IExOQ0ZDTU9DUzMyCj4gKyAqIHJlZ2lzdGVycykuIFRoZSByZXN0IGFyZSBub3QgKHRoZSBzZXR0 aW5ncyBmb3IgdGhlIG90aGVyIHJpbmdzKS4KPiArICoKPiArICogVGhpcyB0YWJsZSBuZWVkcyB0 byBiZSBzZXQgYXQgc3lzdGVtIHN0YXJ0LXVwIGJlY2F1c2UgdGhlIHdheSB0aGUgdGFibGUKPiAr ICogaW50ZXJhY3RzIHdpdGggdGhlIGNvbnRleHRzIGFuZCB0aGUgR21tTGliIGludGVyZmFjZS4K PiArICoKPiArICoKPiArICogSW1wbGVtZW50YXRpb246Cj4gKyAqCj4gKyAqIFRoZSB0YWJsZXMg KG9uZSBwZXIgc3VwcG9ydGVkIHBsYXRmb3JtKSBhcmUgZGVmaW5lZCBpbiBpbnRlbF9tb2NzLmMK PiArICogYW5kIGFyZSBwcm9ncmFtbWVkIGluIHRoZSBmaXJzdCBiYXRjaCBhZnRlciB0aGUgY29u dGV4dCBpcyBsb2FkZWQKPiArICogKHdpdGggdGhlIGhhcmR3YXJlIHdvcmthcm91bmRzKS4gVGhp cyB3aWxsIHRoZW4gbGV0IHRoZSB1c3VhbAo+ICsgKiBjb250ZXh0IGhhbmRsaW5nIGtlZXAgdGhl IE1PQ1MgaW4gc3RlcC4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCj4gKwo+ICtpbnQgaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2Nz KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKPiArCj4gKyNlbmRpZgo+CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=