From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: Re: [PATCH v4] drm/i915 : Added Programming of the MOCS Date: Tue, 30 Jun 2015 14:11:23 +0100 (BST) Message-ID: References: <1434554362-22384-1-git-send-email-peter.antoine@intel.com> <87ioact03d.fsf@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 B7AD66E981 for ; Tue, 30 Jun 2015 06:12:09 -0700 (PDT) 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: Francisco Jerez Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyOSBKdW4gMjAxNSwgUGV0ZXIgQW50b2luZSB3cm90ZToKCj4gT24gVGh1LCAyNSBK dW4gMjAxNSwgRnJhbmNpc2NvIEplcmV6IHdyb3RlOgo+Cj4+IFBldGVyIEFudG9pbmUgPHBldGVy LmFudG9pbmVAaW50ZWwuY29tPiB3cml0ZXM6Cj4+Cj4+PiBUaGlzIGNoYW5nZSBhZGRzIHRoZSBw cm9ncmFtbWluZyBvZiB0aGUgTU9DUyByZWdpc3RlcnMgdG8gdGhlIGdlbiA5Kwo+Pj4gcGxhdGZv cm1zLiBUaGlzIGNoYW5nZSBzZXQgcHJvZ3JhbXMgdGhlIE1PQ1MgcmVnaXN0ZXIgdmFsdWVzIHRv IGEgc2V0Cj4+PiBvZiB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5lZCB0byBiZSBvcHRpbWFsLgo+Pj4K Pj4+IEl0IGNyZWF0ZXMgYSBmaXhlZCByZWdpc3RlciBzZXQgdGhhdCBpcyBwcm9ncmFtbWVkIGFj cm9zcyB0aGUgZGlmZmVyZW50Cj4+PiBlbmdpbmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2ZSB0 aGUgc2FtZSB0YWJsZS4gVGhpcyBpcyBkb25lIGFzIHRoZQo+Pj4gbWFpbiBSQ1MgY29udGV4dCBv bmx5IGhvbGRzIHRoZSByZWdpc3RlcnMgZm9yIGl0c2VsZiBhbmQgdGhlIHNoYXJlZAo+Pj4gTDMg dmFsdWVzLiBCeSB0cnlpbmcgdG8ga2VlcCB0aGUgcmVnaXN0ZXJzIGNvbnNpc3RlbnQgYWNyb3Nz IHRoZQo+Pj4gZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2UgdGhlIHByb2dyYW1taW5n IGZvciB0aGUgcmVnaXN0ZXJzCj4+PiBjb25zaXN0ZW50Lgo+Pj4KPj4+IHYyOgo+Pj4gLSdzdGF0 aWMgY29uc3QnIGZvciBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhbmQgc3R5bGUgY2hhbmdlcy4o TWF0dCAKPiBUdXJuZXIpCj4+PiB2MzoKPj4+IC0gTWFrZSB0aGUgdGFibGVzICJzbGlnaHRseSIg bW9yZSByZWFkYWJsZS4gKERhbWllbiBMZXNwaWF1KQo+Pj4gLSBVcGRhdGVkIHRhYmxlcyBmaXgg cGVyZm9ybWFuY2UgcmVncmVzc2lvbi4KPj4+IHY0Ogo+Pj4gLSBDb2RlIGZvcm1hdHRpbmcuIChD aHJpcyBXaWxzb24pCj4+PiAtIHJlLXByaXZhdGlzZWQgbW9jcyBjb2RlLiAoRGFuaWVsIFZldHRl cikKPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBQZXRlciBBbnRvaW5lIDxwZXRlci5hbnRvaW5lQGlu dGVsLmNvbT4KPj4+IC0tLQo+Pj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICB8 ICAgMSArCj4+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgIHwgICA5ICsKPj4+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgfCAgMTAgKy0KPj4+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaCAgfCAgIDQgKwo+Pj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX21vY3MuYyB8IDM3MyAKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+Pj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaCB8ICA2NCArKysr KysrCj4+PiAgNiBmaWxlcyBjaGFuZ2VkLCA0NjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Nz LmMKPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9j cy5oCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4+IGluZGV4IGI3ZGRmNDguLmM3ODFlMTkg MTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4+IEBAIC0zNSw2ICszNSw3IEBAIGk5MTUt eSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCj4+PiAgCSAgaTkxNV9pcnEubyBcCj4+PiAgCSAgaTkx NV90cmFjZV9wb2ludHMubyBcCj4+PiAgCSAgaW50ZWxfbHJjLm8gXAo+Pj4gKwkgIGludGVsX21v Y3MubyBcCj4+PiAgCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKPj4+ICAJICBpbnRlbF91bmNvcmUu bwo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIAo+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+Pj4gaW5kZXggNzIxMzIyNC4uM2E0 MzViNSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4+IEBAIC03ODI5LDQgKzc4 MjksMTMgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7Cj4+PiAgI2RlZmluZSBfUEFMRVRU RV9BIChkZXZfcHJpdi0+aW5mby5kaXNwbGF5X21taW9fb2Zmc2V0ICsgMHhhMDAwKQo+Pj4gICNk ZWZpbmUgX1BBTEVUVEVfQiAoZGV2X3ByaXYtPmluZm8uZGlzcGxheV9tbWlvX29mZnNldCArIDB4 YTgwMCkKPj4+Cj4+PiArLyogTU9DUyAoTWVtb3J5IE9iamVjdCBDb250cm9sIFN0YXRlKSByZWdp c3RlcnMgKi8KPj4+ICsjZGVmaW5lIEdFTjlfTE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMgQ2Fj aGUgQ29udHJvbCAKPiBiYXNlICovCj4+PiArCj4+PiArI2RlZmluZSBHRU45X0dGWF9NT0NTXzAJ CSgweGM4MDApCS8qIEdyYXBoaWNzIE1PQ1MgYmFzZSAKPiByZWdpc3RlciovCj4+PiArI2RlZmlu ZSBHRU45X01GWDBfTU9DU18wCSgweGM5MDApCS8qIE1lZGlhIDAgTU9DUyBiYXNlIAo+IHJlZ2lz dGVyKi8KPj4+ICsjZGVmaW5lIEdFTjlfTUZYMV9NT0NTXzAJKDB4Y0EwMCkJLyogTWVkaWEgMSBN T0NTIGJhc2UgCj4gcmVnaXN0ZXIqLwo+Pj4gKyNkZWZpbmUgR0VOOV9WRUJPWF9NT0NTXzAJKDB4 Y0IwMCkJLyogVmlkZW8gTU9DUyBiYXNlIHJlZ2lzdGVyKi8KPj4+ICsjZGVmaW5lIEdFTjlfQkxU X01PQ1NfMAkJKDB4Y2MwMCkJLyogQmxpdHRlciBNT0NTIGJhc2UgCj4gcmVnaXN0ZXIqLwo+Pj4g Kwo+Pj4gICNlbmRpZiAvKiBfSTkxNV9SRUdfSF8gKi8KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jCj4+PiBpbmRleCA5ZjU0ODVkLi43M2I5MTlkIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5jCj4+PiBAQCAtMTM1LDYgKzEzNSw3IEBACj4+PiAgI2luY2x1ZGUgPGRybS9k cm1QLmg+Cj4+PiAgI2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgo+Pj4gICNpbmNsdWRlICJpOTE1 X2Rydi5oIgo+Pj4gKyNpbmNsdWRlICJpbnRlbF9tb2NzLmgiCj4+Pgo+Pj4gICNkZWZpbmUgR0VO OV9MUl9DT05URVhUX1JFTkRFUl9TSVpFICgyMiAqIFBBR0VfU0laRSkKPj4+ICAjZGVmaW5lIEdF TjhfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjAgKiBQQUdFX1NJWkUpCj4+PiBAQCAtNzk2LDcg Kzc5Nyw3IEBAIHN0YXRpYyBpbnQgbG9naWNhbF9yaW5nX3ByZXBhcmUoc3RydWN0IAo+IGludGVs X3JpbmdidWZmZXIgKnJpbmdidWYsCj4+PiAgICoKPj4+ICAgKiBSZXR1cm46IG5vbi16ZXJvIGlm IHRoZSByaW5nYnVmZmVyIGlzIG5vdCByZWFkeSB0byBiZSB3cml0dGVuIHRvLgo+Pj4gICAqLwo+ Pj4gLXN0YXRpYyBpbnQgaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5n YnVmZmVyICpyaW5nYnVmLAo+Pj4gK2ludCBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4+PiAgCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY3R4LCBpbnQgCj4gbnVtX2R3b3JkcykKPj4+ICB7Cj4+PiAgCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnJpbmcgPSByaW5nYnVmLT5yaW5nOwo+Pj4gQEAgLTEzNzksNiArMTM4MCwxMyBA QCBzdGF0aWMgaW50IGdlbjhfaW5pdF9yY3NfY29udGV4dChzdHJ1Y3QgCj4gaW50ZWxfZW5naW5l X2NzICpyaW5nLAo+Pj4gIAlpZiAocmV0KQo+Pj4gIAkJcmV0dXJuIHJldDsKPj4+Cj4+PiArCS8q Cj4+PiArCSAqIEZhaWxpbmcgdG8gcHJvZ3JhbSB0aGUgTU9DUyBpcyBub24tZmF0YWwuVGhlIHN5 c3RlbSB3aWxsIG5vdAo+Pj4gKwkgKiBydW4gYXQgcGVhayBwZXJmb3JtYW5jZS4gU28gZ2VuZXJh dGUgYSB3YXJuaW5nIGFuZCBjYXJyeSBvbi4KPj4+ICsJICovCj4+PiArCWlmIChnZW45X3Byb2dy YW1fbW9jcyhyaW5nLCBjdHgpICE9IDApCj4+PiArCQlEUk1fRVJST1IoIk1PQ1MgZmFpbGVkIHRv IHByb2dyYW06IGV4cGVjdCBwZXJmb3JtYW5jZSAKPiBpc3N1ZXMuIik7Cj4+PiArCj4+PiAgCXJl dHVybiBpbnRlbF9scl9jb250ZXh0X3JlbmRlcl9zdGF0ZV9pbml0KHJpbmcsIGN0eCk7Cj4+PiAg fQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaCAK PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4+PiBpbmRleCAwNGQzYTZkLi5k YmJkNmFmIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgK Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4+PiBAQCAtNDQsNiAr NDQsMTAgQEAgaW50IGludGVsX2xvZ2ljYWxfcmluZ3NfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKPj4+Cj4+PiAgaW50IGxvZ2ljYWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHN0cnVjdCBp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+Pj4gIAkJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjdHgpOwo+Pj4gKwo+Pj4gK2ludCBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0IGlu dGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4+PiArCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY3R4LCBpbnQgCj4gbnVtX2R3b3Jkcyk7Cj4+PiArCj4+PiAgLyoqCj4+PiAgICogaW50ZWxf bG9naWNhbF9yaW5nX2FkdmFuY2UoKSAtIGFkdmFuY2UgdGhlIHJpbmdidWZmZXIgdGFpbAo+Pj4g ICAqIEByaW5nYnVmOiBSaW5nYnVmZmVyIHRvIGFkdmFuY2UuCj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jIAo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbW9jcy5jCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4u N2MwOWU2Nwo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbW9jcy5jCj4+PiBAQCAtMCwwICsxLDM3MyBAQAo+Pj4gKy8qCj4+PiArICogQ29weXJp Z2h0IChjKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4+PiArICoKPj4+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgCj4gYQo+Pj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgCj4gIlNvZnR3YXJlIiksCj4+PiArICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgCj4gbGlt aXRhdGlvbgo+Pj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCAKPiBzdWJsaWNlbnNlLAo+Pj4gKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ Pj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6ICoKPj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSAKPiBuZXh0Cj4+PiArICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIAo+IHRoZQo+Pj4gKyAqIFNvZnR3YXJlLgo+Pj4gKyAqCj4+PiArICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIAo+IEVYUFJFU1MgT1IKPj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIAo+IE1FUkNIQU5UQUJJTElUWSwKPj4+ICsgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgCj4gU0hBTEwKPj4+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiAKPiBPVEhFUgo+Pj4gKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCAKPiBBUklTSU5HIEZST00sCj4+PiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyAKPiBJTiBUSEUKPj4+ICsg KiBTT0ZUV0FSRS4KPj4+ICsgKgo+Pj4gKyAqIEF1dGhvcnM6Cj4+PiArICogICAgUGV0ZXIgQW50 b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+Cj4+PiArICovCj4+PiArCj4+PiArI2luY2x1 ZGUgImludGVsX21vY3MuaCIKPj4+ICsjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCj4+PiArI2luY2x1 ZGUgImludGVsX3JpbmdidWZmZXIuaCIKPj4+ICsKPj4+ICsvKiBzdHJ1Y3R1cmVzIHJlcXVpcmVk ICovCj4+PiArc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgewo+Pj4gKwl1MzIJY29udHJvbF92 YWx1ZTsKPj4+ICsJdTE2CWwzY2NfdmFsdWU7Cj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgZHJt X2k5MTVfbW9jc190YWJsZSB7Cj4+PiArCXUzMgkJCQkJc2l6ZTsKPj4+ICsJY29uc3Qgc3RydWN0 IGRybV9pOTE1X21vY3NfZW50cnkJKnRhYmxlOwo+Pj4gK307Cj4+PiArCj4+PiArLyogRGVmaW5l cyBmb3IgdGhlIHRhYmxlcyAoWFhYX01PQ1NfMCAtIFhYWF9NT0NTXzYzKSAqLwo+Pj4gKyNkZWZp bmUJTU9DU19DQUNIRUFCSUxJVFkodmFsdWUpCSh2YWx1ZSA8PCAwKQo+Pj4gKyNkZWZpbmUJTU9D U19UR1RfQ0FDSEUodmFsdWUpCQkodmFsdWUgPDwgMikKPj4+ICsjZGVmaW5lCU1PQ1NfTFJVTSh2 YWx1ZSkJCSh2YWx1ZSA8PCA0KQo+Pj4gKyNkZWZpbmUJTU9DU19BT00odmFsdWUpCQkJKHZhbHVl IDw8IDYpCj4+PiArI2RlZmluZQlNT0NTX0xFQ0NfRVNDKHZhbHVlKQkJKHZhbHVlIDw8IDcpCj4+ PiArI2RlZmluZQlNT0NTX0xFQ0NfU0NDKHZhbHVlKQkJKHZhbHVlIDw8IDgpCj4+PiArI2RlZmlu ZQlNT0NfUEZNKHZhbHVlKQkJCSh2YWx1ZSA8PCAxMSkKPj4+ICsjZGVmaW5lCU1PQ1NfU0NGKHZh bHVlKQkJCSh2YWx1ZSA8PCAxNCkKPj4+ICsKPj4+ICsvKiBEZWZpbmVzIGZvciB0aGUgdGFibGVz IChMTkNGTU9DUzAgLSBMTkNGTU9DUzMxKSAtIHR3byBlbnRyaWVzIHBlciB3b3JkIAo+ICovCj4+ PiArI2RlZmluZQlNT0NTX0VTQyh2YWx1ZSkJCQkodmFsdWUgPDwgMCkKPj4+ICsjZGVmaW5lCU1P Q1NfU0NDKHZhbHVlKQkJCSh2YWx1ZSA8PCAxKQo+Pj4gKyNkZWZpbmUJTU9DU19MM19DQUNIRUFC SUxJVFkodmFsdWUpCSh2YWx1ZSA8PCA0KQo+Pj4gKwo+Pj4gKy8qIEhlbHBlciBkZWZpbmVzICov Cj4+PiArI2RlZmluZSBHRU45X05VTV9NT0NTX1JJTkdTCSg1KQkvKiBOdW1iZXIgb2YgbW9jcyBl bmdpbmVzIHRvIHByb2dyYW0gCj4gKi8KPj4+ICsjZGVmaW5lIEdFTjlfTlVNX01PQ1NfRU5UUklF UwkoNjMpCS8qIDYzIG91dCBvZiA2NCAtIDY0IGlzIHJzdnJkIAo+ICovCj4+PiArCj4+PiArLyog RURSQU0gQ2FjaGluZyBvcHRpb25zICovCj4+PiArI2RlZmluZSBFRFJBTV9QQUdFVEFCTEUJCSgw KQo+Pj4gKyNkZWZpbmUgRURSQU1fVUMJCSgxKQo+Pj4gKyNkZWZpbmUgRURSQU1fUkVTRVJWRUQJ CSgyKQo+Pgo+PiBBY2NvcmRpbmcgdG8gdGhlIEJTcGVjIHRoaXMgaXMgV1QgcmF0aGVyIHRoYW4g cmVzZXJ2ZWQ/YQo+IEp1c3QgY2hlY2tlZCB0aGUgQnNwZWMgYW5kIHlvdSBhcmUgY29ycmVjdCwg Y2hhbmdpbmcgdGhlIHRleHQuCj4gQXMgd2VsbCBhcyBmb3IgdGhlIGl0ZW1zIGJlbG93LgpKdXN0 IHRvIGFkZCAtIEkgd2FzIGxvb2tpbmcgYXQgdGhlIHdyb25nIGdlbi4KPj4KPj4+ICsjZGVmaW5l IEVEUkFNX1dCCQkoMykKPj4+ICsKPj4+ICsvKiBMMyBDYWNoaW5nIG9wdGlvbnMgKi8KPj4+ICsj ZGVmaW5lIEwzX0RJUkVDVAkJKDApCj4+PiArI2RlZmluZSBMM19VQwkJCSgxKQo+Pj4gKyNkZWZp bmUgTDNfUkVTRVJWRUQJCSgyKQo+Pj4gKyNkZWZpbmUgTDNfV0IJCQkoMykKPj4+ICsKPj4+ICsv KiB0YXJnZXQgY2FjaGUgKi8KPj4+ICsjZGVmaW5lIEVMTEMJCQkoMCkKPj4KPj4gQlNwZWMgc2F5 cyB0aGF0IHRoaXMgaXMgIlVzZSBUQy9MUlUgY29udHJvbHMgZnJvbSBwYWdlIHRhYmxlIiwgYnV0 IHVwb24KPj4gYSBjbG9zZXIgbG9vayBpdCBzZWVtcyBsaWtlIHRoZSBCU3BlYyBpcyB3cm9uZyBh bmQgeW91ciBwYXRjaCBpcwo+PiBjb3JyZWN0LiAgQ2FuIHlvdSBjb25maXJtIHRoYXQgdGhpcyBp cyB3aGF0IHlvdSBpbnRlbmRlZD8KPiBUaGVzZSB2YWx1ZXMgbG9vayBnb29kLCB0aGV5IGFyZSBi aXRzIDM6MiBmb3IgdGhlIFhYWF9NT0NTX04gcmVnaXN0ZXJzIAo+IChjODAwKSBhbmQgZnJpZW5k cy4gCj4+Cj4+PiArI2RlZmluZSBMTEMJCQkoMSkKPj4+ICsjZGVmaW5lIExMQ19FTExDCQkoMikK Pj4+ICsKPj4+ICsvKgo+Pj4gKyAqIE1PQ1MgdGFibGVzCj4+PiArICoKPj4+ICsgKiBUaGVzZSBh cmUgdGhlIE1PQ1MgdGFibGVzIHRoYXQgYXJlIHByb2dyYW1tZWQgYWNyb3NzIGFsbCB0aGUgcmlu Z3MuCj4+PiArICogVGhlIGNvbnRyb2wgdmFsdWUgaXMgcHJvZ3JhbW1lZCB0byBhbGwgdGhlIHJp bmdzIHRoYXQgc3VwcG9ydCB0aGUKPj4+ICsgKiBNT0NTIHJlZ2lzdGVycy4gV2hpbGUgdGhlIGwz Y2NfdmFsdWVzIGFyZSBvbmx5IHByb2dyYW1tZWQgdG8gdGhlCj4+PiArICogTE5DRkNNT0NTMCAt IExOQ0ZDTU9DUzMyIHJlZ2lzdGVycy4KPj4+ICsgKgo+Pj4gKyAqIE5PVEU6IFRoZXNlIHRhYmxl cyBNVVNUIHN0YXJ0IHdpdGggYmVpbmcgdW5jYWNoZWQgYW5kIHRoZSBsZW5ndGggTVVTVCAKPiBi ZQo+Pj4gKyAqICAgICAgIGxlc3MgdGhhbiA2MyBhcyB0aGUgbGFzdCB0d28gcmVnaXN0ZXJzIGFy ZSByZXNlcnZlZCBieSB0aGUgCj4gaGFyZHdhcmUuCj4+PiArICovCj4+PiArc3RhdGljIHN0cnVj dCBkcm1faTkxNV9tb2NzX2VudHJ5IHNreWxha2VfbW9jc190YWJsZVtdID0gewo+Pj4gKwkgLyog ezB4MDAwMDAwMDksIDB4MDAxMH0gKi8KPj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9V QykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+Pj4gKwkJTU9DU19MUlVNKDApIHwgTU9D U19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4gKwkJTU9DX1BG TSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwg TU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCj4+PiArCSAvKiB7MHgwMDAwMDAzYiwgMHgw MDMwfSAqLwo+Pj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NB Q0hFKExMQ19FTExDKSB8Cj4+PiArCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1Nf TEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0Yo MCkpLAo+Pj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJ TElUWShMM19XQikpfSwKPj4+ICsJIC8qIHsweDAwMDAwMDM5LCAweDAwMTB9ICovCj4+PiArCXso TU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwK Pj4+ICsJCU1PQ1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwKPj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+PiArCQkoTU9D U19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+ Pj4gKwkgLyogezB4MDAwMDAwMTcsIDB4MDAzMH0gKi8KPj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElU WShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPj4+ICsJCU1PQ1NfTFJVTSgxKSB8 IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4+ICsJCU1P Q19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygw KSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAo+Pj4gKwkgLyogezB4MDAwMDAwMTcs IDB4MDAxMH0gKi8KPj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RH VF9DQUNIRShMTEMpIHwKPj4+ICsJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19M RUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigw KSksCj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklM SVRZKEwzX1VDKSl9LAo+Pj4gKwkgLyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KPj4+ICsJeyhN T0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+ Pj4gKwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9D U19TQ0MoMCkgfAo+Pj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+ICsJCShNT0NT X0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCj4+ PiArCSAvKiB7MHgwMDAwMDAzNywgMHgwMDMwfSAqLwo+Pj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZ KEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAo+Pj4gKwkJTU9DU19MUlVNKDMpIHwg TU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4gKwkJTU9D X1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCj4+PiArCSAvKiB7MHgwMDAwMDAzNywg MHgwMDEwfSAqLwo+Pj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdU X0NBQ0hFKExMQykgfAo+Pj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xF Q0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDAp KSwKPj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJ VFkoTDNfVUMpKX0sCj4+PiArCSAvKiB7MHgwMDAwMDAzYiwgMHgwMDEwfSAqLwo+Pj4gKwl7KE1P Q1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8Cj4+ PiArCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NT X1NDQygwKSB8Cj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+Pj4gKwkJKE1PQ1Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPj4+ ICt9Owo+Pgo+PiBNZXNhIHdpbGwgd2FudCBhbiBhZGRpdGlvbmFsIGVudHJ5IHdpdGggVEM9TExD L2VMTEMsIExlQ0M9UFRFLCBMM0NDPVdCLAo+PiBldmVyeXRoaW5nIGVsc2UgdW5zZXQsIEknbGwg cmVwbHkgd2l0aCBhIHVzZXJzcGFjZSBwYXRjaCBtYWtpbmcgdXNlIG9mCj4+IHlvdXIgY2hhbmdl IGlmIHlvdSBhZGQgc3VjaCBhbiBlbnRyeS4KT2suIEkgdGhpbmsgd2hhdCB5b3Ugd2FudCBpcywg c2FtZSBhcyBlbnRyeSB0d28sIGJ1dCB1c2UgdGhlIHVuZGVybHlpbmcKcGFnZXRhYmxlIHNldHRp bmdzIGFuZCBub3Qgc3BlY2lmeSB0aGUgRURSQU0gc2V0dGluZ3MuIFBsZWFzZSBjb25maXJtIGlu IAp0aGUgbmV3IHBhdGNoc2V0Lgo+Pgo+PiBBbm90aGVyIHRoaW5nIHdvcnRoIG1lbnRpb25pbmcg aXMgdGhhdCBlbnRyaWVzIDAsIDIgYW5kIDUgc2VlbSB0byBkbyB0aGUKPj4gc2FtZSB0aGluZyBz dXNwaWNpb3VzbHksIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlIExSVU0gZmllbGQgd2hpY2gK Pj4gQUZBSUsgZG9lc24ndCBoYXZlIGFueSBlZmZlY3QgZm9yIExlQ0M9VUMuICBJcyBteSB1bmRl cnN0YW5kaW5nIGNvcnJlY3Q/Cj4+Cj4gVGhlc2UgdGFibGVzIGFyZSBnZW5lcmF0ZWQgdmlhIHJl cXVlc3RzIGFuZCB0aGVuIGJvaWxlZCBkb3duIHRvIHRoZSBhYm92ZS4gCj4gU28gc29tZSBvZiB0 aGUgZW50cmllcyBhcmUgYnkgcmVxdWVzdC4gU3dpbmdzIGFuZCByb3VuZGFib3V0cywgY2FuIHJl bW92ZSAKPiB0aGUgb25lcyB0aGF0IGxvb2sgcmVkdW5kYW50IGJ1dCB0aGVuIHRoZSB0dW5pbmcg dGhhdCBoYXMgYmVlbiBkb25lIHdvbnQgCj4gbWF0Y2guIEknbGwgYWRkIHRoZSBuZXcgZW50cnkg YXQgdGhlIGVuZCBvZiB0aGUgdGFibGUuCj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBkcm1faTkx NV9tb2NzX2VudHJ5IGJyb3h0b25fbW9jc190YWJsZVtdID0gewo+Pj4gKwkgLyogezB4MDAwMDAw MDEsIDB4MDAxMH0gKi8KPj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NT X1RHVF9DQUNIRShFTExDKSB8Cj4+PiArCQlNT0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1P Q1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19T Q0YoMCkpLAo+Pj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hF QUJJTElUWShMM19VQykpfSwKPj4+ICsJIC8qIHsweDAwMDAwMDA1LCAweDAwMTB9ICovCj4+PiAr CXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4+ PiArCQlNT0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NT X1NDQygwKSB8Cj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+Pj4gKwkJKE1PQ1Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPj4+ ICsJIC8qIHsweDAwMDAwMDA1LCAweDAwMzB9ICovCj4+PiArCXsoTU9DU19DQUNIRUFCSUxJVFko RURSQU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4+PiArCQlNT0NTX0xSVU0oMCkgfCBN T0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+PiArCQlNT0Nf UEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+Pj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkg fCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19XQikpfSwKPj4+ICsJIC8qIHsweDAwMDAwMDE3LCAw eDAwMzB9ICovCj4+PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1Rf Q0FDSEUoTExDKSB8Cj4+PiArCQlNT0NTX0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVD Q19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkp LAo+Pj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElU WShMM19XQikpfSwKPj4+ICsJIC8qIHsweDAwMDAwMDE3LCAweDAwMTB9ICovCj4+PiArCXsoTU9D U19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4+PiArCQlN T0NTX0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygw KSB8Cj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+Pj4gKwkJKE1PQ1NfRVNDKDAp IHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPj4+ICsJIC8q IHsweDAwMDAwMDE5LCAweDAwMTB9ICovCj4+PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1f VUMpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKPj4+ICsJCU1PQ1NfTFJVTSgxKSB8IE1P Q1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4+ICsJCU1PQ19Q Rk0oMCkgfCBNT0NTX1NDRigwKSksCj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8 IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+Pj4gKwkgLyogezB4MDAwMDAwMzcsIDB4 MDAzMH0gKi8KPj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9D QUNIRShMTEMpIHwKPj4+ICsJCU1PQ1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUND X0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSks Cj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZ KEwzX1dCKSl9LAo+Pj4gKwkgLyogezB4MDAwMDAwMzcsIDB4MDAxMH0gKi8KPj4+ICsJeyhNT0NT X0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPj4+ICsJCU1P Q1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwKPj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+PiArCQkoTU9DU19FU0MoMCkg fCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+Pj4gKwkgLyog ezB4MDAwMDAwM2IsIDB4MDAxMH0gKi8KPj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9X QikgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+Pj4gKwkJTU9DU19MUlVNKDMpIHwgTU9D U19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4gKwkJTU9DX1BG TSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwg TU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCj4+PiArfTsKPj4+ICsKPj4KPj4gV291bGRu J3QgaXQgYmUgYSBnb29kIGlkZWEgdG8gaGF2ZSBCWFQncyBlbnRyaWVzIG1hdGNoIFNLTCdzIGZv ciBhIGdpdmVuCj4+IGluZGV4PyAgVGhlIFRDLCBMZUNDIGFuZCBMUlVNIHNldHRpbmdzIHlvdSBk byBoZXJlIGFyZ3VhYmx5IGRvbid0IGhhdmUKPj4gYW55IGVmZmVjdCBvbiBCWFQsIEwzQ0MgZG9l cyBidXQgaXQgZG9lc24ndCBtYXRjaCBTS0wncyBzZXR0aW5nIGZvcgo+PiBlbnRyaWVzIDEgYW5k IDIuICBJcyB0aGVyZSBhbnkgcmVhc29uIGZvciB0aGlzPwo+IEFzIG1lbnRpb25lZCBhYm92ZSB0 aGlzIHRhYmxlIGlzIGF1dG8tZ2VuZXJhdGVkIGFuZCBtYXRjaGVzIGFub3RoZXIgdHVuZWQgCj4g dGFibGUsIHNpbXBseSBrZWVwaW5nIHRoZW0gdGhlIHNhbWUgYWxsb3dzIGZvciB0aGUgdHVuaW5n IHRvIGJlIGNvbnNpc3RlbnQgCj4gYWNyb3NzIHBsYXRmb3Jtcy4KPgo+IFBldGVyLgo+Pgo+PiBP dGhlciB0aGFuIHRoYXQgbG9va3MgZ29vZC4KPj4KPj4+ICsvKioKPj4+ICsgKiBnZXRfbW9jc19z ZXR0aW5ncwo+Pj4gKyAqCj4+PiArICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgdmFs dWVzIG9mIHRoZSBNT0NTIHRhYmxlIHRoYXQgbmVlZHMgdG8KPj4+ICsgKiBiZSBwcm9ncmFtbWVk IGZvciB0aGUgcGxhdGZvcm0uIEl0IHdpbGwgcmV0dXJuIHRoZSB2YWx1ZXMgdGhhdCBuZWVkCj4+ PiArICogdG8gYmUgcHJvZ3JhbW1lZCBhbmQgaWYgdGhleSBuZWVkIHRvIGJlIHByb2dyYW1tZWQu Cj4+PiArICoKPj4+ICsgKiBJZiB0aGUgcmV0dXJuIHZhbHVlcyBpcyBmYWxzZSB0aGVuIHRoZSBy ZWdpc3RlcnMgZG8gbm90IG5lZWQgCj4gcHJvZ3JhbW1pbmcuCj4+PiArICovCj4+PiArc3RhdGlj IGJvb2wgZ2V0X21vY3Nfc2V0dGluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4+ICsJCQkg ICAgICBzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFibGUpIHsKPj4+ICsJYm9vbAlyZXN1 bHQgPSBmYWxzZTsKPj4+ICsKPj4+ICsJaWYgKElTX1NLWUxBS0UoZGV2KSkgewo+Pj4gKwkJdGFi bGUtPnNpemUgID0gQVJSQVlfU0laRShza3lsYWtlX21vY3NfdGFibGUpOwo+Pj4gKwkJdGFibGUt PnRhYmxlID0gc2t5bGFrZV9tb2NzX3RhYmxlOwo+Pj4gKwkJcmVzdWx0ID0gdHJ1ZTsKPj4+ICsJ fSBlbHNlIGlmIChJU19CUk9YVE9OKGRldikpIHsKPj4+ICsJCXRhYmxlLT5zaXplICA9IEFSUkFZ X1NJWkUoYnJveHRvbl9tb2NzX3RhYmxlKTsKPj4+ICsJCXRhYmxlLT50YWJsZSA9IGJyb3h0b25f bW9jc190YWJsZTsKPj4+ICsJCXJlc3VsdCA9IHRydWU7Cj4+PiArCX0gZWxzZSB7Cj4+PiArCQkv KiBQbGF0Zm9ybSB0aGF0IHNob3VsZCBoYXZlIGEgTU9DUyB0YWJsZSBkb2VzIG5vdCAqLwo+Pj4g KwkJV0FSTl9PTihJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KTsKPj4+ICsJfQo+Pj4gKwo+Pj4g KwlyZXR1cm4gcmVzdWx0Owo+Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBlbWl0X21vY3Nf Y29udHJvbF90YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRhYmxlCj4+PiArICogQHJp bmdidWY6CURSTSBkZXZpY2UuCj4+PiArICogQHRhYmxlOglUaGUgdmFsdWVzIHRvIHByb2dyYW0g aW50byB0aGUgY29udHJvbCByZWdzLgo+Pj4gKyAqIEByZWdfYmFzZToJVGhlIGJhc2UgZm9yIHRo ZSBFbmdpbmUgdGhhdCBuZWVkcyB0byBiZSBwcm9ncmFtbWVkLgo+Pj4gKyAqCj4+PiArICogVGhp cyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kIGZv ciB0aGUKPj4+ICsgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4K Pj4+ICsgKgo+Pj4gKyAqIFJldHVybjogTm90aGluZy4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgdm9p ZCBlbWl0X21vY3NfY29udHJvbF90YWJsZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1 ZiwKPj4+ICsJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSwKPj4+ICsJ CQkJICAgIHUzMiByZWdfYmFzZSkKPj4+ICt7Cj4+PiArCXVuc2lnbmVkIGludCBpbmRleDsKPj4+ ICsKPj4+ICsJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKPj4+ICsJCQlNSV9MT0FE X1JFR0lTVEVSX0lNTShHRU45X05VTV9NT0NTX0VOVFJJRVMpKTsKPj4+ICsKPj4+ICsJZm9yIChp bmRleCA9IDA7IGluZGV4IDwgdGFibGUtPnNpemU7IGluZGV4KyspIHsKPj4+ICsJCWludGVsX2xv Z2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHJlZ19iYXNlICsgKGluZGV4ICogNCkpOwo+Pj4gKwkJ aW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKPj4+ICsJCQkJCXRhYmxlLT50YWJsZVtp bmRleF0uY29udHJvbF92YWx1ZSk7Cj4+PiArCX0KPj4+ICsKPj4+ICsJLyoKPj4+ICsJICogT2ss IG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVzIHRvIHVuY2FjaGVkLiBUaGVzZSBlbnRyaWVzIGFy ZQo+Pj4gKwkgKiBvZmZpY2lhbGx5IHVuZGVmaW5lZCBhbmQgbm8gY29udGFjdCBpcyBnaXZlbiBm b3IgdGhlIGNvbnRlbnRzIGFuZAo+Pj4gKwkgKiBzZXR0aW5ncyBpcyBnaXZlbiBmb3IgdGhlc2Ug ZW50cmllcy4KPj4+ICsJICoKPj4+ICsJICogRW50cnkgMCBpbiB0aGUgdGFibGUgaXMgdW5jYWNo ZWQgLSBzbyB3ZSBhcmUganVzdCB3cml0dGVuIHRoYXQKPj4+ICsJICogdmFsdWUgdG8gYWxsIHRo ZSB1c2VkIGVudHJpZXMuCj4+PiArCSAqLwo+Pj4gKwlmb3IgKDsgaW5kZXggPCBHRU45X05VTV9N T0NTX0VOVFJJRVM7IGluZGV4KyspIHsKPj4+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJp bmdidWYsIHJlZ19iYXNlICsgKGluZGV4ICogNCkpOwo+Pj4gKwkJaW50ZWxfbG9naWNhbF9yaW5n X2VtaXQocmluZ2J1ZiwgCj4gdGFibGUtPnRhYmxlWzBdLmNvbnRyb2xfdmFsdWUpOwo+Pj4gKwl9 Cj4+PiArCj4+PiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwo+ Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBlbWl0X21vY3NfbDNjY190YWJsZSgpIC0gZW1p dCB0aGUgbW9jcyBjb250cm9sIHRhYmxlCj4+PiArICogQHJpbmdidWY6CURSTSBkZXZpY2UuCj4+ PiArICogQHRhYmxlOglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdz Lgo+Pj4gKyAqCj4+PiArICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JF R0lTVEVSX0lNTSBjb21tYW5kIGZvciB0aGUKPj4+ICsgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBh dCB0aGUgZ2l2ZW4gYWRkcmVzcy4gVGhpcyByZWdpc3RlciBzZXQgaXMgCj4gcHJvZ3JhbW1lZAo+ Pj4gKyAqIGluIHBhaXJzLgo+Pj4gKyAqCj4+PiArICogUmV0dXJuOiBOb3RoaW5nLgo+Pj4gKyAq Lwo+Pj4gK3N0YXRpYyB2b2lkIGVtaXRfbW9jc19sM2NjX3RhYmxlKHN0cnVjdCBpbnRlbF9yaW5n YnVmZmVyICpyaW5nYnVmLAo+Pj4gKwkJCSBzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFi bGUpIHsKPj4+ICsJdW5zaWduZWQgaW50IGNvdW50Owo+Pj4gKwl1bnNpZ25lZCBpbnQgaTsKPj4+ ICsJdTMyIHZhbHVlOwo+Pj4gKwl1MzIgZmlsbGVyID0gKHRhYmxlLT50YWJsZVswXS5sM2NjX3Zh bHVlICYgMHhmZmZmKSB8Cj4+PiArCQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4 ZmZmZikgPDwgMTYpOwo+Pj4gKwo+Pj4gKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVm LAo+Pj4gKwkJCU1JX0xPQURfUkVHSVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklFUyAvIDIp KTsKPj4+ICsKPj4+ICsJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgdGFibGUtPnNpemUgLyAy OyBpKyssIGNvdW50ICs9IDIpIHsKPj4+ICsJCXZhbHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0u bDNjY192YWx1ZSAmIDB4ZmZmZikgfAo+Pj4gKwkJCSgodGFibGUtPnRhYmxlW2NvdW50ICsgMV0u bDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgCj4gMTYpOwo+Pj4gKwo+Pj4gKwkJaW50ZWxfbG9naWNh bF9yaW5nX2VtaXQocmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0KSk7Cj4+PiArCQlp bnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7Cj4+PiArCX0KPj4+ICsKPj4+ ICsJaWYgKHRhYmxlLT5zaXplICYgMHgwMSkgewo+Pj4gKwkJLyogT2RkIHRhYmxlIHNpemUgLSAx IGxlZnQgb3ZlciAqLwo+Pj4gKwkJdmFsdWUgPSAodGFibGUtPnRhYmxlW2NvdW50XS5sM2NjX3Zh bHVlICYgMHhmZmZmKSB8Cj4+PiArCQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4 ZmZmZikgPDwgMTYpOwo+Pj4gKwl9IGVsc2UKPj4+ICsJCXZhbHVlID0gZmlsbGVyOwo+Pj4gKwo+ Pj4gKwkvKgo+Pj4gKwkgKiBOb3cgc2V0IHRoZSByZXN0IG9mIHRoZSB0YWJsZSB0byB1bmNhY2hl ZCAtIHVzZSBlbnRyeSAwIGFzIHRoaXMKPj4+ICsJICogd2lsbCBiZSB1bmNhY2hlZC4gTGVhdmUg dGhlIGxhc3QgcGFpciBhcyBpbml0aWFsaXNlZCBhcyB0aGV5IGFyZQo+Pj4gKwkgKiByZXNlcnZl ZCBieSB0aGUgaGFyZHdhcmUuCj4+PiArCSAqLwo+Pj4gKwlmb3IgKDsgaSA8IChHRU45X05VTV9N T0NTX0VOVFJJRVMgLyAyKSAtIDE7IGkrKykgewo+Pj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0KSk7Cj4+PiArCQlpbnRlbF9sb2dp Y2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7Cj4+PiArCj4+PiArCQl2YWx1ZSA9IGZpbGxl cjsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBN SV9OT09QKTsKPj4+ICt9Cj4+PiArCj4+PiArLyoKPj4+ICsgKiBnZW45X3Byb2dyYW1fbW9jcygp IC0gcHJvZ3JhbSB0aGUgTU9DUyByZWdpc3Rlci4KPj4+ICsgKgo+Pj4gKyAqIHJpbmc6CVRoZSBy aW5nIHRoYXQgdGhlIHByb2dyYW1taW5nIGJhdGNoIHdpbGwgYmUgcnVuIGluLgo+Pj4gKyAqIGN0 eDoJCVRoZSBpbnRlbF9jb250ZXh0IHRvIGJlIHVzZWQuCj4+PiArICoKPj4+ICsgKiBUaGlzIGZ1 bmN0aW9uIHdpbGwgZW1pdCBhIGJhdGNoIGJ1ZmZlciB3aXRoIHRoZSB2YWx1ZXMgcmVxdWlyZWQg Zm9yCj4+PiArICogcHJvZ3JhbW1pbmcgdGhlIE1PQ1MgcmVnaXN0ZXIgdmFsdWVzIGZvciBhbGwg dGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQKPj4+ICsgKiByaW5ncy4KPj4+ICsgKgo+Pj4gKyAqIFRo ZXNlIHJlZ2lzdGVycyBhcmUgcGFydGlhbGx5IHN0b3JlZCBpbiB0aGUgUkNTIGNvbnRleHQsIHNv IHRoZXkgYXJlCj4+PiArICogZW1pdHRlZCBhdCB0aGUgc2FtZSB0aW1lIHNvIHRoYXQgd2hlbiBh IGNvbnRleHQgaXMgY3JlYXRlZCB0aGVzZSAKPiByZWdpc3RlcnMKPj4+ICsgKiBhcmUgc2V0IHVw LiBUaGVzZSByZWdpc3RlcnMgaGF2ZSB0byBiZSBlbWl0dGVkIGludG8gdGhlIHN0YXJ0IG9mIHRo ZQo+Pj4gKyAqIGNvbnRleHQgYXMgc2V0dGluZyB0aGUgRUxTUCB3aWxsIHJlLWluaXQgc29tZSBv ZiB0aGVzZSByZWdpc3RlcnMgYmFjawo+Pj4gKyAqIHRvIHRoZSBodyB2YWx1ZXMuCj4+PiArICoK Pj4+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBlcnJvciBzdGF0dXMu Cj4+PiArICovCj4+PiAraW50IGdlbjlfcHJvZ3JhbV9tb2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcsCj4+PiArCQkJICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KQo+Pj4gK3sKPj4+ ICsJaW50IHJldCA9IDA7Cj4+PiArCj4+PiArCXN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlIHQ7 Cj4+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4+PiArCXN0cnVjdCBp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJpbmdidWY7 Cj4+PiArCj4+PiArCWlmIChnZXRfbW9jc19zZXR0aW5ncyhkZXYsICZ0KSkgewo+Pj4gKwkJdTMy IHRhYmxlX3NpemU7Cj4+PiArCj4+PiArCQkvKgo+Pj4gKwkJICogT0suIEZvciBlYWNoIHN1cHBv cnRlZCByaW5nOgo+Pj4gKwkJICogIG51bWJlciBvZiBtb2NzIGVudHJpZXMgKiAyIGR3b3JkcyBm b3IgZWFjaCBjb250cm9sX3ZhbHVlCj4+PiArCQkgKiAgcGx1cyBudW1iZXIgb2YgbW9jcyBlbnRy aWVzIC8yIGR3b3JkcyBmb3IgbDNjYyB2YWx1ZXMuCj4+PiArCQkgKgo+Pj4gKwkJICogIFBsdXMg MSBmb3IgdGhlIGxvYWQgY29tbWFuZCBhbmQgMSBmb3IgdGhlIE5PT1AgcGVyIHJpbmcKPj4+ICsJ CSAqICBhbmQgdGhlIGwzY2MgcHJvZ3JhbW1pbmcuCj4+PiArCQkgKi8KPj4+ICsJCXRhYmxlX3Np emUgPSBHRU45X05VTV9NT0NTX1JJTkdTICoKPj4+ICsJCQkJKCgyICogR0VOOV9OVU1fTU9DU19F TlRSSUVTKSArIDIpICsKPj4+ICsJCQkJR0VOOV9OVU1fTU9DU19FTlRSSUVTICsgMjsKPj4+ICsJ CXJldCA9IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihyaW5nYnVmLCBjdHgsIHRhYmxlX3NpemUp Owo+Pj4gKwkJaWYgKHJldCkgewo+Pj4gKwkJCURSTV9ERUJVRygiaW50ZWxfbG9naWNhbF9yaW5n X2JlZ2luIGZhaWxlZCAlZFxuIiwgCj4gcmV0KTsKPj4+ICsJCQlyZXR1cm4gcmV0Owo+Pj4gKwkJ fQo+Pj4gKwo+Pj4gKwkJLyogcHJvZ3JhbSB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KPj4+ICsJ CWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X0dGWF9NT0NTXzApOwo+ Pj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfTUZYMF9NT0NT XzApOwo+Pj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfTUZY MV9NT0NTXzApOwo+Pj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdF TjlfVkVCT1hfTU9DU18wKTsKPj4+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYs ICZ0LCBHRU45X0JMVF9NT0NTXzApOwo+Pj4gKwo+Pj4gKwkJLyogbm93IHByb2dyYW0gdGhlIGwz Y2MgcmVnaXN0ZXJzICovCj4+PiArCQllbWl0X21vY3NfbDNjY190YWJsZShyaW5nYnVmLCAmdCk7 Cj4+PiArCj4+PiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZShyaW5nYnVmKTsKPj4+ICsK Pj4+ICsJCURSTV9ERUJVRygiTU9DUzogVGFibGUgc2V0IGluIENvbnRleHRcbiIpOwo+Pj4gKwl9 IGVsc2Ugewo+Pj4gKwkJRFJNX0RFQlVHKCJNT0NTOiBUYWJsZSBOb3Qgc3VwcG9ydGVkIG9uIHBs YXRmb3JtXG4iKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsK Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmggCj4gYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+PiBpbmRleCAwMDAwMDAwLi5lMjc4MGNlCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKPj4+IEBAIC0wLDAgKzEsNjQgQEAKPj4+ ICsvKgo+Pj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+Pj4gKyAq Cj4+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIAo+IGEKPj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIAo+ICJTb2Z0d2FyZSIpLAo+ Pj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IAo+IGxpbWl0YXRpb24KPj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgCj4gc3VibGljZW5zZSwKPj4+ ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKPj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgCj4gbmV4dAo+Pj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiAKPiB0aGUKPj4+ICsgKiBTb2Z0 d2FyZS4KPj4+ICsgKgo+Pj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCAKPiBFWFBSRVNTIE9SCj4+PiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAKPiBNRVJD SEFOVEFCSUxJVFksCj4+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIAo+IFNIQUxMCj4+PiArICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgCj4gT1RIRVIKPj4+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgCj4gQVJJU0lORyBGUk9NLAo+Pj4gKyAqIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MgCj4gSU4gVEhFCj4+PiArICogU09GVFdBUkUuCj4+PiArICoKPj4+ICsgKiBBdXRo b3JzOgo+Pj4gKyAqICAgIFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgo+ Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpZm5kZWYgSU5URUxfTU9DU19ICj4+PiArI2RlZmluZSBJTlRF TF9NT0NTX0gKPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBET0M6IE1lbW9yeSBPYmplY3RzIENvbnRy b2wgU3RhdGUgKE1PQ1MpCj4+PiArICoKPj4+ICsgKiBNb3RpdmF0aW9uOgo+Pj4gKyAqIEluIHBy ZXZpb3VzIEdlbnMgdGhlIE1PQ1Mgc2V0dGluZ3Mgd2FzIGEgdmFsdWUgdGhhdCB3YXMgc2V0IGJ5 IHVzZXIgCj4gbGFuZCBhcwo+Pj4gKyAqIHBhcnQgb2YgdGhlIGJhdGNoLiBJbiBHZW45IHRoaXMg aGFzIGNoYW5nZWQgdG8gYmUgYSBzaW5nbGUgdGFibGUgKHBlciAKPiByaW5nKQo+Pj4gKyAqIHRo YXQgYWxsIGJhdGNoZXMgbm93IHJlZmVyZW5jZSBieSBpbmRleCBpbnN0ZWFkIG9mIHByb2dyYW1t aW5nIHRoZSAKPiBNT0NTCj4+PiArICogZGlyZWN0bHkuCj4+PiArICoKPj4+ICsgKiBUaGUgb25l IHdyaW5rbGUgaW4gdGhpcyBpcyB0aGF0IG9ubHkgUEFSVCBvZiB0aGUgTU9DUyB0YWJsZXMgYXJl IAo+IGluY2x1ZGVkCj4+PiArICogaW4gY29udGV4dCAoVGhlIEdGWF9NT0NTXzAgLSBHRlhfTU9D U182NCBhbmQgdGhlIExOQ0ZDTU9DUzAgLSAKPiBMTkNGQ01PQ1MzMgo+Pj4gKyAqIHJlZ2lzdGVy cykuIFRoZSByZXN0IGFyZSBub3QgKHRoZSBzZXR0aW5ncyBmb3IgdGhlIG90aGVyIHJpbmdzKS4K Pj4+ICsgKgo+Pj4gKyAqIFRoaXMgdGFibGUgbmVlZHMgdG8gYmUgc2V0IGF0IHN5c3RlbSBzdGFy dC11cCBiZWNhdXNlIHRoZSB3YXkgdGhlIAo+IHRhYmxlCj4+PiArICogaW50ZXJhY3RzIHdpdGgg dGhlIGNvbnRleHRzIGFuZCB0aGUgR21tTGliIGludGVyZmFjZS4KPj4+ICsgKgo+Pj4gKyAqCj4+ PiArICogSW1wbGVtZW50YXRpb246Cj4+PiArICoKPj4+ICsgKiBUaGUgdGFibGUgaXMgcHJvZ3Jh bW1lZCBvbiBhIHBsYXRmb3JtIGJhc2lzIGZyb20gYSB0YWJsZSB0aGF0IGlzIAo+IGdlbmVyYXRl ZAo+Pj4gKyAqIGZyb20gdGhlIG9uZSB0aGF0IGhhcyBiZWVuIGFncmVlZCBieSB0aGUgZGlmZmVy ZW50IHJlc3BvbnNpYmxlIAo+IHBhcnRpZXMuIFRoaXMKPj4+ICsgKiB0YWJsZXMgKG9uZSBwZXIg c3VwcG9ydGVkIHBsYXRmb3JtKSBpcyBkZWZpbmVkIGluIGludGVsX21vY3MuYyBhbmQgaXMKPj4+ ICsgKiBwcm9ncmFtbWVkIGluIHRoZSBmaXJzdCBiYXRjaCBhZnRlciB0aGUgY29udGV4dCBpcyBs b2FkZWQgKHdpdGggdGhlIAo+IGhhcmR3YXJlCj4+PiArICogd29ya2Fyb3VuZHMpLiBUaGlzIHdp bGwgdGhlbiBsZXQgdGhlIHVzdWFsIGNvbnRleHQgaGFuZGxpbmcga2VlcCB0aGUgCj4gTU9DUyBp bgo+Pj4gKyAqIHN0ZXAuCj4+PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+ Cj4+PiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4+PiArCj4+PiAraW50IGdlbjlfcHJvZ3JhbV9t b2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4+PiArCQkJc3RydWN0IGludGVsX2Nv bnRleHQgKmN0eCk7Cj4+PiArCj4+PiArI2VuZGlmCj4+PiArCj4+PiAtLQo+Pj4gMS45LjEKPj4+ Cj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+Pj4g SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+Pj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+Pj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo+Pgo+Cj4gLS0KPiAgICBQZXRlciBBbnRvaW5lIChBbmRyb2lkIEdyYXBoaWNzIERyaXZl ciBTb2Z0d2FyZSBFbmdpbmVlcikKPiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgICBJbnRlbCBDb3Jwb3Jh dGlvbiAoVUspIExpbWl0ZWQKPiAgICBSZWdpc3RlcmVkIE5vLiAxMTM0OTQ1IChFbmdsYW5kKQo+ ICAgIFJlZ2lzdGVyZWQgT2ZmaWNlOiBQaXBlcnMgV2F5LCBTd2luZG9uIFNOMyAxUkoKPiAgICBW QVQgTm86IDg2MCAyMTczIDQ3Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngKPgoKLS0KICAgIFBldGVyIEFudG9pbmUgKEFuZHJvaWQgR3JhcGhpY3Mg RHJpdmVyIFNvZnR3YXJlIEVuZ2luZWVyKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBJbnRlbCBDb3Jw b3JhdGlvbiAoVUspIExpbWl0ZWQKICAgIFJlZ2lzdGVyZWQgTm8uIDExMzQ5NDUgKEVuZ2xhbmQp CiAgICBSZWdpc3RlcmVkIE9mZmljZTogUGlwZXJzIFdheSwgU3dpbmRvbiBTTjMgMVJKCiAgICBW QVQgTm86IDg2MCAyMTczIDQ3Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==