From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4] drm/i915 : Added Programming of the MOCS Date: Thu, 18 Jun 2015 08:59:55 +0200 Message-ID: <20150618065955.GJ23637@phenom.ffwll.local> References: <1434554362-22384-1-git-send-email-peter.antoine@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f180.google.com (mail-wi0-f180.google.com [209.85.212.180]) by gabe.freedesktop.org (Postfix) with ESMTP id 1A2D26EC23 for ; Wed, 17 Jun 2015 23:57:10 -0700 (PDT) Received: by wicnd19 with SMTP id nd19so50454864wic.1 for ; Wed, 17 Jun 2015 23:57:09 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1434554362-22384-1-git-send-email-peter.antoine@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Peter Antoine Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKdW4gMTcsIDIwMTUgYXQgMDQ6MTk6MjJQTSArMDEwMCwgUGV0ZXIgQW50b2luZSB3 cm90ZToKPiBUaGlzIGNoYW5nZSBhZGRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aGUgTU9DUyByZWdp c3RlcnMgdG8gdGhlIGdlbiA5Kwo+IHBsYXRmb3Jtcy4gVGhpcyBjaGFuZ2Ugc2V0IHByb2dyYW1z IHRoZSBNT0NTIHJlZ2lzdGVyIHZhbHVlcyB0byBhIHNldAo+IG9mIHZhbHVlcyB0aGF0IGFyZSBk ZWZpbmVkIHRvIGJlIG9wdGltYWwuCj4gCj4gSXQgY3JlYXRlcyBhIGZpeGVkIHJlZ2lzdGVyIHNl dCB0aGF0IGlzIHByb2dyYW1tZWQgYWNyb3NzIHRoZSBkaWZmZXJlbnQKPiBlbmdpbmVzIHNvIHRo YXQgYWxsIGVuZ2luZXMgaGF2ZSB0aGUgc2FtZSB0YWJsZS4gVGhpcyBpcyBkb25lIGFzIHRoZQo+ IG1haW4gUkNTIGNvbnRleHQgb25seSBob2xkcyB0aGUgcmVnaXN0ZXJzIGZvciBpdHNlbGYgYW5k IHRoZSBzaGFyZWQKPiBMMyB2YWx1ZXMuIEJ5IHRyeWluZyB0byBrZWVwIHRoZSByZWdpc3RlcnMg Y29uc2lzdGVudCBhY3Jvc3MgdGhlCj4gZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2Ug dGhlIHByb2dyYW1taW5nIGZvciB0aGUgcmVnaXN0ZXJzCj4gY29uc2lzdGVudC4KPiAKPiB2MjoK PiAtJ3N0YXRpYyBjb25zdCcgZm9yIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdHlsZSBj aGFuZ2VzLihNYXR0IFR1cm5lcikKPiB2MzoKPiAtIE1ha2UgdGhlIHRhYmxlcyAic2xpZ2h0bHki IG1vcmUgcmVhZGFibGUuIChEYW1pZW4gTGVzcGlhdSkKPiAtIFVwZGF0ZWQgdGFibGVzIGZpeCBw ZXJmb3JtYW5jZSByZWdyZXNzaW9uLgo+IHY0Ogo+IC0gQ29kZSBmb3JtYXR0aW5nLiAoQ2hyaXMg V2lsc29uKQo+IC0gcmUtcHJpdmF0aXNlZCBtb2NzIGNvZGUuIChEYW5pZWwgVmV0dGVyKQo+IAo+ IFNpZ25lZC1vZmYtYnk6IFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgo+ IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgfCAgIDEgKwo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgfCAgIDkgKwo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYyAgfCAgMTAgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf bHJjLmggIHwgICA0ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jIHwgMzcz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX21vY3MuaCB8ICA2NCArKysrKysrCj4gIDYgZmlsZXMgY2hhbmdlZCwgNDYw IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRl eCBiN2RkZjQ4Li5jNzgxZTE5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMzUsNiAr MzUsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ICAJICBpOTE1X2lycS5vIFwK PiAgCSAgaTkxNV90cmFjZV9wb2ludHMubyBcCj4gIAkgIGludGVsX2xyYy5vIFwKPiArCSAgaW50 ZWxfbW9jcy5vIFwKPiAgCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKPiAgCSAgaW50ZWxfdW5jb3Jl Lm8KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gaW5kZXggNzIxMzIyNC4uM2E0MzViNSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC03ODI5LDQgKzc4MjksMTMgQEAgZW51 bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7Cj4gICNkZWZpbmUgX1BBTEVUVEVfQSAoZGV2X3ByaXYt PmluZm8uZGlzcGxheV9tbWlvX29mZnNldCArIDB4YTAwMCkKPiAgI2RlZmluZSBfUEFMRVRURV9C IChkZXZfcHJpdi0+aW5mby5kaXNwbGF5X21taW9fb2Zmc2V0ICsgMHhhODAwKQo+ICAKPiArLyog TU9DUyAoTWVtb3J5IE9iamVjdCBDb250cm9sIFN0YXRlKSByZWdpc3RlcnMgKi8KPiArI2RlZmlu ZSBHRU45X0xOQ0ZDTU9DUzAJCSgweEIwMjApCS8qIEwzIENhY2hlIENvbnRyb2wgYmFzZSAqLwo+ ICsKPiArI2RlZmluZSBHRU45X0dGWF9NT0NTXzAJCSgweGM4MDApCS8qIEdyYXBoaWNzIE1PQ1Mg YmFzZSByZWdpc3RlciovCj4gKyNkZWZpbmUgR0VOOV9NRlgwX01PQ1NfMAkoMHhjOTAwKQkvKiBN ZWRpYSAwIE1PQ1MgYmFzZSByZWdpc3RlciovCj4gKyNkZWZpbmUgR0VOOV9NRlgxX01PQ1NfMAko MHhjQTAwKQkvKiBNZWRpYSAxIE1PQ1MgYmFzZSByZWdpc3RlciovCj4gKyNkZWZpbmUgR0VOOV9W RUJPWF9NT0NTXzAJKDB4Y0IwMCkJLyogVmlkZW8gTU9DUyBiYXNlIHJlZ2lzdGVyKi8KPiArI2Rl ZmluZSBHRU45X0JMVF9NT0NTXzAJCSgweGNjMDApCS8qIEJsaXR0ZXIgTU9DUyBiYXNlIHJlZ2lz dGVyKi8KPiArCj4gICNlbmRpZiAvKiBfSTkxNV9SRUdfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwo+IGluZGV4IDlmNTQ4NWQuLjczYjkxOWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwo+IEBAIC0xMzUsNiArMTM1LDcgQEAKPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4g ICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KPiAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNp bmNsdWRlICJpbnRlbF9tb2NzLmgiCj4gIAo+ICAjZGVmaW5lIEdFTjlfTFJfQ09OVEVYVF9SRU5E RVJfU0laRSAoMjIgKiBQQUdFX1NJWkUpCj4gICNkZWZpbmUgR0VOOF9MUl9DT05URVhUX1JFTkRF Ul9TSVpFICgyMCAqIFBBR0VfU0laRSkKPiBAQCAtNzk2LDcgKzc5Nyw3IEBAIHN0YXRpYyBpbnQg bG9naWNhbF9yaW5nX3ByZXBhcmUoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4g ICAqCj4gICAqIFJldHVybjogbm9uLXplcm8gaWYgdGhlIHJpbmdidWZmZXIgaXMgbm90IHJlYWR5 IHRvIGJlIHdyaXR0ZW4gdG8uCj4gICAqLwo+IC1zdGF0aWMgaW50IGludGVsX2xvZ2ljYWxfcmlu Z19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKPiAraW50IGludGVsX2xv Z2ljYWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKPiAgCQkJ CSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBpbnQgbnVtX2R3b3JkcykKPiAgewo+ICAJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IHJpbmdidWYtPnJpbmc7Cj4gQEAgLTEzNzks NiArMTM4MCwxMyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9yY3NfY29udGV4dChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAr CS8qCj4gKwkgKiBGYWlsaW5nIHRvIHByb2dyYW0gdGhlIE1PQ1MgaXMgbm9uLWZhdGFsLlRoZSBz eXN0ZW0gd2lsbCBub3QKPiArCSAqIHJ1biBhdCBwZWFrIHBlcmZvcm1hbmNlLiBTbyBnZW5lcmF0 ZSBhIHdhcm5pbmcgYW5kIGNhcnJ5IG9uLgo+ICsJICovCgpJcyB0aGlzIHJlYWxseSB0cnVlPyBV c2Vyc3BhY2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5IGRvbid0CmluYXBwcm9wcmlhdGVseSBv dmVyd3JpdGUgdGhlIGNhY2hpbmcgc2V0dGluZ3MgdXNpbmcgTU9DUyBmb3IgZnJvbnRidWZmZXJz CmFuZCBpbiBkb2luZyBzbyBjYXVzaW5nIGNvaGVyZW5jeSBpc3N1ZXMgd2l0aCB0aGUgZGlzcGxh eSBibG9jay4gSWYgd2UKZmFpbCB0byBwcm9ncmFtIE1PQ1MgY29ycmVjdGx5IHRoZW4gdGhpbmdz IHdvbid0IGxvb2sgcHJldHR5LgoKU291bmRzIGxpa2UgZXZlbiBtb3JlIHJlYW9ucyBpbW8gd2h5 IHdlIHJlYWxseSBuZWVkIHRoZSB1c2Vyc3BhY2Ugc2lkZSBvZgp0aGlzIC4uLgoKQWxzbyB0aGUg Z2VuZXJhbCBhcHByb2FjaCBmb3IgcmVuZGVyIHNpZGUgc2V0dXAgZmFpbHVyZXMgaXMgdG8gcmV0 dXJuCi1FSU8sIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgd2VkZ2VkIGdwdS4gTm8gcmVhc29uIGlt byBoZXJlIHRvIGVhdCB0aGlzCmZhaWx1cmUuCi1EYW5pZWwKCj4gKwlpZiAoZ2VuOV9wcm9ncmFt X21vY3MocmluZywgY3R4KSAhPSAwKQo+ICsJCURSTV9FUlJPUigiTU9DUyBmYWlsZWQgdG8gcHJv Z3JhbTogZXhwZWN0IHBlcmZvcm1hbmNlIGlzc3Vlcy4iKTsKPiArCj4gIAlyZXR1cm4gaW50ZWxf bHJfY29udGV4dF9yZW5kZXJfc3RhdGVfaW5pdChyaW5nLCBjdHgpOwo+ICB9Cj4gIAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5oCj4gaW5kZXggMDRkM2E2ZC4uZGJiZDZhZiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5oCj4gQEAgLTQ0LDYgKzQ0LDEwIEBAIGludCBpbnRlbF9sb2dpY2Fs X3JpbmdzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gIAo+ICBpbnQgbG9naWNhbF9y aW5nX2ZsdXNoX2FsbF9jYWNoZXMoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4g IAkJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpOwo+ICsKPiAraW50IGludGVsX2xvZ2lj YWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKPiArCQkJCSAg ICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBpbnQgbnVtX2R3b3Jkcyk7Cj4gKwo+ICAvKioK PiAgICogaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UoKSAtIGFkdmFuY2UgdGhlIHJpbmdidWZm ZXIgdGFpbAo+ICAgKiBAcmluZ2J1ZjogUmluZ2J1ZmZlciB0byBhZHZhbmNlLgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9tb2NzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu LjdjMDllNjcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbW9jcy5jCj4gQEAgLTAsMCArMSwzNzMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAy MDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAqCj4gKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiAr ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N LAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICoKPiArICog QXV0aG9yczoKPiArICogICAgUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+ Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImludGVsX21vY3MuaCIKPiArI2luY2x1ZGUgImludGVs X2xyYy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgo+ICsKPiArLyogc3RydWN0 dXJlcyByZXF1aXJlZCAqLwo+ICtzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRyeSB7Cj4gKwl1MzIJ Y29udHJvbF92YWx1ZTsKPiArCXUxNglsM2NjX3ZhbHVlOwo+ICt9Owo+ICsKPiArc3RydWN0IGRy bV9pOTE1X21vY3NfdGFibGUgewo+ICsJdTMyCQkJCQlzaXplOwo+ICsJY29uc3Qgc3RydWN0IGRy bV9pOTE1X21vY3NfZW50cnkJKnRhYmxlOwo+ICt9Owo+ICsKPiArLyogRGVmaW5lcyBmb3IgdGhl IHRhYmxlcyAoWFhYX01PQ1NfMCAtIFhYWF9NT0NTXzYzKSAqLwo+ICsjZGVmaW5lCU1PQ1NfQ0FD SEVBQklMSVRZKHZhbHVlKQkodmFsdWUgPDwgMCkKPiArI2RlZmluZQlNT0NTX1RHVF9DQUNIRSh2 YWx1ZSkJCSh2YWx1ZSA8PCAyKQo+ICsjZGVmaW5lCU1PQ1NfTFJVTSh2YWx1ZSkJCSh2YWx1ZSA8 PCA0KQo+ICsjZGVmaW5lCU1PQ1NfQU9NKHZhbHVlKQkJCSh2YWx1ZSA8PCA2KQo+ICsjZGVmaW5l CU1PQ1NfTEVDQ19FU0ModmFsdWUpCQkodmFsdWUgPDwgNykKPiArI2RlZmluZQlNT0NTX0xFQ0Nf U0NDKHZhbHVlKQkJKHZhbHVlIDw8IDgpCj4gKyNkZWZpbmUJTU9DX1BGTSh2YWx1ZSkJCQkodmFs dWUgPDwgMTEpCj4gKyNkZWZpbmUJTU9DU19TQ0YodmFsdWUpCQkJKHZhbHVlIDw8IDE0KQo+ICsK PiArLyogRGVmaW5lcyBmb3IgdGhlIHRhYmxlcyAoTE5DRk1PQ1MwIC0gTE5DRk1PQ1MzMSkgLSB0 d28gZW50cmllcyBwZXIgd29yZCAqLwo+ICsjZGVmaW5lCU1PQ1NfRVNDKHZhbHVlKQkJCSh2YWx1 ZSA8PCAwKQo+ICsjZGVmaW5lCU1PQ1NfU0NDKHZhbHVlKQkJCSh2YWx1ZSA8PCAxKQo+ICsjZGVm aW5lCU1PQ1NfTDNfQ0FDSEVBQklMSVRZKHZhbHVlKQkodmFsdWUgPDwgNCkKPiArCj4gKy8qIEhl bHBlciBkZWZpbmVzICovCj4gKyNkZWZpbmUgR0VOOV9OVU1fTU9DU19SSU5HUwkoNSkJLyogTnVt YmVyIG9mIG1vY3MgZW5naW5lcyB0byBwcm9ncmFtICovCj4gKyNkZWZpbmUgR0VOOV9OVU1fTU9D U19FTlRSSUVTCSg2MykJLyogNjMgb3V0IG9mIDY0IC0gNjQgaXMgcnN2cmQgKi8KPiArCj4gKy8q IEVEUkFNIENhY2hpbmcgb3B0aW9ucyAqLwo+ICsjZGVmaW5lIEVEUkFNX1BBR0VUQUJMRQkJKDAp Cj4gKyNkZWZpbmUgRURSQU1fVUMJCSgxKQo+ICsjZGVmaW5lIEVEUkFNX1JFU0VSVkVECQkoMikK PiArI2RlZmluZSBFRFJBTV9XQgkJKDMpCj4gKwo+ICsvKiBMMyBDYWNoaW5nIG9wdGlvbnMgKi8K PiArI2RlZmluZSBMM19ESVJFQ1QJCSgwKQo+ICsjZGVmaW5lIEwzX1VDCQkJKDEpCj4gKyNkZWZp bmUgTDNfUkVTRVJWRUQJCSgyKQo+ICsjZGVmaW5lIEwzX1dCCQkJKDMpCj4gKwo+ICsvKiB0YXJn ZXQgY2FjaGUgKi8KPiArI2RlZmluZSBFTExDCQkJKDApCj4gKyNkZWZpbmUgTExDCQkJKDEpCj4g KyNkZWZpbmUgTExDX0VMTEMJCSgyKQo+ICsKPiArLyoKPiArICogTU9DUyB0YWJsZXMKPiArICoK PiArICogVGhlc2UgYXJlIHRoZSBNT0NTIHRhYmxlcyB0aGF0IGFyZSBwcm9ncmFtbWVkIGFjcm9z cyBhbGwgdGhlIHJpbmdzLgo+ICsgKiBUaGUgY29udHJvbCB2YWx1ZSBpcyBwcm9ncmFtbWVkIHRv IGFsbCB0aGUgcmluZ3MgdGhhdCBzdXBwb3J0IHRoZQo+ICsgKiBNT0NTIHJlZ2lzdGVycy4gV2hp bGUgdGhlIGwzY2NfdmFsdWVzIGFyZSBvbmx5IHByb2dyYW1tZWQgdG8gdGhlCj4gKyAqIExOQ0ZD TU9DUzAgLSBMTkNGQ01PQ1MzMiByZWdpc3RlcnMuCj4gKyAqCj4gKyAqIE5PVEU6IFRoZXNlIHRh YmxlcyBNVVNUIHN0YXJ0IHdpdGggYmVpbmcgdW5jYWNoZWQgYW5kIHRoZSBsZW5ndGggTVVTVCBi ZQo+ICsgKiAgICAgICBsZXNzIHRoYW4gNjMgYXMgdGhlIGxhc3QgdHdvIHJlZ2lzdGVycyBhcmUg cmVzZXJ2ZWQgYnkgdGhlIGhhcmR3YXJlLgo+ICsgKi8KPiArc3RhdGljIHN0cnVjdCBkcm1faTkx NV9tb2NzX2VudHJ5IHNreWxha2VfbW9jc190YWJsZVtdID0gewo+ICsJIC8qIHsweDAwMDAwMDA5 LCAweDAwMTB9ICovCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdU X0NBQ0hFKExMQ19FTExDKSB8Cj4gKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00oMCkgfCBNT0NT X0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigw KSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElU WShMM19VQykpfSwKPiArCSAvKiB7MHgwMDAwMDAzYiwgMHgwMDMwfSAqLwo+ICsJeyhNT0NTX0NB Q0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+ICsJCU1P Q1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwKPiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+ICsJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCj4gKwkgLyogezB4MDAw MDAwMzksIDB4MDAxMH0gKi8KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwgTU9D U19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKPiArCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8 IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1Nf U0NGKDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVB QklMSVRZKEwzX1VDKSl9LAo+ICsJIC8qIHsweDAwMDAwMDE3LCAweDAwMzB9ICovCj4gKwl7KE1P Q1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAo+ICsJCU1P Q1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwKPiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+ICsJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCj4gKwkgLyogezB4MDAw MDAwMTcsIDB4MDAxMH0gKi8KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9D U19UR1RfQ0FDSEUoTExDKSB8Cj4gKwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBNT0NT X0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigw KSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElU WShMM19VQykpfSwKPiArCSAvKiB7MHgwMDAwMDAxOSwgMHgwMDEwfSAqLwo+ICsJeyhNT0NTX0NB Q0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+ICsJCU1P Q1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwKPiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+ICsJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCj4gKwkgLyogezB4MDAw MDAwMzcsIDB4MDAzMH0gKi8KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9D U19UR1RfQ0FDSEUoTExDKSB8Cj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NT X0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigw KSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElU WShMM19XQikpfSwKPiArCSAvKiB7MHgwMDAwMDAzNywgMHgwMDEwfSAqLwo+ICsJeyhNT0NTX0NB Q0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPiArCQlNT0NTX0xS VU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4g KwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1ND QygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+ICsJIC8qIHsweDAwMDAwMDNi LCAweDAwMTB9ICovCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdU X0NBQ0hFKExMQ19FTExDKSB8Cj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NT X0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigw KSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElU WShMM19VQykpfSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRy eSBicm94dG9uX21vY3NfdGFibGVbXSA9IHsKPiArCSAvKiB7MHgwMDAwMDAwMSwgMHgwMDEwfSAq Lwo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShFTExD KSB8Cj4gKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwg TU9DU19TQ0MoMCkgfAo+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4gKwkJKE1PQ1Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPiAr CSAvKiB7MHgwMDAwMDAwNSwgMHgwMDEwfSAqLwo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJB TV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPiArCQlNT0NTX0xSVU0oMCkgfCBNT0NTX0FP TSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4gKwkJTU9DX1BGTSgwKSB8 IE1PQ1NfU0NGKDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNf Q0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+ICsJIC8qIHsweDAwMDAwMDA1LCAweDAwMzB9ICovCj4g Kwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAo+ ICsJCU1PQ1NfTFJVTSgwKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1Nf U0NDKDApIHwKPiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+ICsJCShNT0NTX0VTQygw KSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCj4gKwkgLyog ezB4MDAwMDAwMTcsIDB4MDAzMH0gKi8KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0Ip IHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4gKwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkg fCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+ICsJCU1PQ19QRk0oMCkgfCBNT0NT X1NDRigwKSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hF QUJJTElUWShMM19XQikpfSwKPiArCSAvKiB7MHgwMDAwMDAxNywgMHgwMDEwfSAqLwo+ICsJeyhN T0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPiArCQlN T0NTX0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygw KSB8Cj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBN T0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+ICsJIC8qIHsweDAw MDAwMDE5LCAweDAwMTB9ICovCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1P Q1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8Cj4gKwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkg fCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+ICsJCU1PQ19QRk0oMCkgfCBNT0NT X1NDRigwKSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hF QUJJTElUWShMM19VQykpfSwKPiArCSAvKiB7MHgwMDAwMDAzNywgMHgwMDMwfSAqLwo+ICsJeyhN T0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPiArCQlN T0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygw KSB8Cj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBN T0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAo+ICsJIC8qIHsweDAw MDAwMDM3LCAweDAwMTB9ICovCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1P Q1NfVEdUX0NBQ0hFKExMQykgfAo+ICsJCU1PQ1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9D U19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0Yo MCkpLAo+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJ VFkoTDNfVUMpKX0sCj4gKwkgLyogezB4MDAwMDAwM2IsIDB4MDAxMH0gKi8KPiArCXsoTU9DU19D QUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKPiArCQlN T0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygw KSB8Cj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBN T0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+ICt9Owo+ICsKPiAr LyoqCj4gKyAqIGdldF9tb2NzX3NldHRpbmdzCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gd2ls bCByZXR1cm4gdGhlIHZhbHVlcyBvZiB0aGUgTU9DUyB0YWJsZSB0aGF0IG5lZWRzIHRvCj4gKyAq IGJlIHByb2dyYW1tZWQgZm9yIHRoZSBwbGF0Zm9ybS4gSXQgd2lsbCByZXR1cm4gdGhlIHZhbHVl cyB0aGF0IG5lZWQKPiArICogdG8gYmUgcHJvZ3JhbW1lZCBhbmQgaWYgdGhleSBuZWVkIHRvIGJl IHByb2dyYW1tZWQuCj4gKyAqCj4gKyAqIElmIHRoZSByZXR1cm4gdmFsdWVzIGlzIGZhbHNlIHRo ZW4gdGhlIHJlZ2lzdGVycyBkbyBub3QgbmVlZCBwcm9ncmFtbWluZy4KPiArICovCj4gK3N0YXRp YyBib29sIGdldF9tb2NzX3NldHRpbmdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAg ICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSkgewo+ICsJYm9vbAlyZXN1bHQg PSBmYWxzZTsKPiArCj4gKwlpZiAoSVNfU0tZTEFLRShkZXYpKSB7Cj4gKwkJdGFibGUtPnNpemUg ID0gQVJSQVlfU0laRShza3lsYWtlX21vY3NfdGFibGUpOwo+ICsJCXRhYmxlLT50YWJsZSA9IHNr eWxha2VfbW9jc190YWJsZTsKPiArCQlyZXN1bHQgPSB0cnVlOwo+ICsJfSBlbHNlIGlmIChJU19C Uk9YVE9OKGRldikpIHsKPiArCQl0YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKGJyb3h0b25fbW9j c190YWJsZSk7Cj4gKwkJdGFibGUtPnRhYmxlID0gYnJveHRvbl9tb2NzX3RhYmxlOwo+ICsJCXJl c3VsdCA9IHRydWU7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIFBsYXRmb3JtIHRoYXQgc2hvdWxkIGhh dmUgYSBNT0NTIHRhYmxlIGRvZXMgbm90ICovCj4gKwkJV0FSTl9PTihJTlRFTF9JTkZPKGRldikt PmdlbiA+PSA5KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKioK PiArICogZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUoKSAtIGVtaXQgdGhlIG1vY3MgY29udHJvbCB0 YWJsZQo+ICsgKiBAcmluZ2J1ZjoJRFJNIGRldmljZS4KPiArICogQHRhYmxlOglUaGUgdmFsdWVz IHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLgo+ICsgKiBAcmVnX2Jhc2U6CVRoZSBi YXNlIGZvciB0aGUgRW5naW5lIHRoYXQgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZC4KPiArICoKPiAr ICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21t YW5kIGZvciB0aGUKPiArICogZ2l2ZW4gdGFibGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHJl c3MuCj4gKyAqCj4gKyAqIFJldHVybjogTm90aGluZy4KPiArICovCj4gK3N0YXRpYyB2b2lkIGVt aXRfbW9jc19jb250cm9sX3RhYmxlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+ ICsJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSwKPiArCQkJCSAgICB1 MzIgcmVnX2Jhc2UpCj4gK3sKPiArCXVuc2lnbmVkIGludCBpbmRleDsKPiArCj4gKwlpbnRlbF9s b2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLAo+ICsJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShHRU45 X05VTV9NT0NTX0VOVFJJRVMpKTsKPiArCj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0YWJs ZS0+c2l6ZTsgaW5kZXgrKykgewo+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYs IHJlZ19iYXNlICsgKGluZGV4ICogNCkpOwo+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJp bmdidWYsCj4gKwkJCQkJdGFibGUtPnRhYmxlW2luZGV4XS5jb250cm9sX3ZhbHVlKTsKPiArCX0K PiArCj4gKwkvKgo+ICsJICogT2ssIG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVzIHRvIHVuY2Fj aGVkLiBUaGVzZSBlbnRyaWVzIGFyZQo+ICsJICogb2ZmaWNpYWxseSB1bmRlZmluZWQgYW5kIG5v IGNvbnRhY3QgaXMgZ2l2ZW4gZm9yIHRoZSBjb250ZW50cyBhbmQKPiArCSAqIHNldHRpbmdzIGlz IGdpdmVuIGZvciB0aGVzZSBlbnRyaWVzLgo+ICsJICoKPiArCSAqIEVudHJ5IDAgaW4gdGhlIHRh YmxlIGlzIHVuY2FjaGVkIC0gc28gd2UgYXJlIGp1c3Qgd3JpdHRlbiB0aGF0Cj4gKwkgKiB2YWx1 ZSB0byBhbGwgdGhlIHVzZWQgZW50cmllcy4KPiArCSAqLwo+ICsJZm9yICg7IGluZGV4IDwgR0VO OV9OVU1fTU9DU19FTlRSSUVTOyBpbmRleCsrKSB7Cj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwgcmVnX2Jhc2UgKyAoaW5kZXggKiA0KSk7Cj4gKwkJaW50ZWxfbG9naWNhbF9y aW5nX2VtaXQocmluZ2J1ZiwgdGFibGUtPnRhYmxlWzBdLmNvbnRyb2xfdmFsdWUpOwo+ICsJfQo+ ICsKPiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogZW1pdF9tb2NzX2wzY2NfdGFibGUoKSAtIGVtaXQgdGhlIG1vY3MgY29u dHJvbCB0YWJsZQo+ICsgKiBAcmluZ2J1ZjoJRFJNIGRldmljZS4KPiArICogQHRhYmxlOglUaGUg dmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLgo+ICsgKgo+ICsgKiBUaGlz IGZ1bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1hbmQgZm9y IHRoZQo+ICsgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4gVGhp cyByZWdpc3RlciBzZXQgaXMgIHByb2dyYW1tZWQKPiArICogaW4gcGFpcnMuCj4gKyAqCj4gKyAq IFJldHVybjogTm90aGluZy4KPiArICovCj4gK3N0YXRpYyB2b2lkIGVtaXRfbW9jc19sM2NjX3Rh YmxlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+ICsJCQkgc3RydWN0IGRybV9p OTE1X21vY3NfdGFibGUgKnRhYmxlKSB7Cj4gKwl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwl1bnNp Z25lZCBpbnQgaTsKPiArCXUzMiB2YWx1ZTsKPiArCXUzMiBmaWxsZXIgPSAodGFibGUtPnRhYmxl WzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKPiArCQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192 YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOwo+ICsKPiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJp bmdidWYsCj4gKwkJCU1JX0xPQURfUkVHSVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklFUyAv IDIpKTsKPiArCj4gKwlmb3IgKGkgPSAwLCBjb3VudCA9IDA7IGkgPCB0YWJsZS0+c2l6ZSAvIDI7 IGkrKywgY291bnQgKz0gMikgewo+ICsJCXZhbHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0ubDNj Y192YWx1ZSAmIDB4ZmZmZikgfAo+ICsJCQkoKHRhYmxlLT50YWJsZVtjb3VudCArIDFdLmwzY2Nf dmFsdWUgJiAweGZmZmYpIDw8IDE2KTsKPiArCj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQo cmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0KSk7Cj4gKwkJaW50ZWxfbG9naWNhbF9y aW5nX2VtaXQocmluZ2J1ZiwgdmFsdWUpOwo+ICsJfQo+ICsKPiArCWlmICh0YWJsZS0+c2l6ZSAm IDB4MDEpIHsKPiArCQkvKiBPZGQgdGFibGUgc2l6ZSAtIDEgbGVmdCBvdmVyICovCj4gKwkJdmFs dWUgPSAodGFibGUtPnRhYmxlW2NvdW50XS5sM2NjX3ZhbHVlICYgMHhmZmZmKSB8Cj4gKwkJCSgo dGFibGUtPnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIDw8IDE2KTsKPiArCX0gZWxzZQo+ ICsJCXZhbHVlID0gZmlsbGVyOwo+ICsKPiArCS8qCj4gKwkgKiBOb3cgc2V0IHRoZSByZXN0IG9m IHRoZSB0YWJsZSB0byB1bmNhY2hlZCAtIHVzZSBlbnRyeSAwIGFzIHRoaXMKPiArCSAqIHdpbGwg YmUgdW5jYWNoZWQuIExlYXZlIHRoZSBsYXN0IHBhaXIgYXMgaW5pdGlhbGlzZWQgYXMgdGhleSBh cmUKPiArCSAqIHJlc2VydmVkIGJ5IHRoZSBoYXJkd2FyZS4KPiArCSAqLwo+ICsJZm9yICg7IGkg PCAoR0VOOV9OVU1fTU9DU19FTlRSSUVTIC8gMikgLSAxOyBpKyspIHsKPiArCQlpbnRlbF9sb2dp Y2FsX3JpbmdfZW1pdChyaW5nYnVmLCBHRU45X0xOQ0ZDTU9DUzAgKyAoaSAqIDQpKTsKPiArCQlp bnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7Cj4gKwo+ICsJCXZhbHVlID0g ZmlsbGVyOwo+ICsJfQo+ICsKPiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1J X05PT1ApOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBnZW45X3Byb2dyYW1fbW9jcygpIC0gcHJvZ3Jh bSB0aGUgTU9DUyByZWdpc3Rlci4KPiArICoKPiArICogcmluZzoJVGhlIHJpbmcgdGhhdCB0aGUg cHJvZ3JhbW1pbmcgYmF0Y2ggd2lsbCBiZSBydW4gaW4uCj4gKyAqIGN0eDoJCVRoZSBpbnRlbF9j b250ZXh0IHRvIGJlIHVzZWQuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IGEg YmF0Y2ggYnVmZmVyIHdpdGggdGhlIHZhbHVlcyByZXF1aXJlZCBmb3IKPiArICogcHJvZ3JhbW1p bmcgdGhlIE1PQ1MgcmVnaXN0ZXIgdmFsdWVzIGZvciBhbGwgdGhlIGN1cnJlbnRseSBzdXBwb3J0 ZWQKPiArICogcmluZ3MuCj4gKyAqCj4gKyAqIFRoZXNlIHJlZ2lzdGVycyBhcmUgcGFydGlhbGx5 IHN0b3JlZCBpbiB0aGUgUkNTIGNvbnRleHQsIHNvIHRoZXkgYXJlCj4gKyAqIGVtaXR0ZWQgYXQg dGhlIHNhbWUgdGltZSBzbyB0aGF0IHdoZW4gYSBjb250ZXh0IGlzIGNyZWF0ZWQgdGhlc2UgcmVn aXN0ZXJzCj4gKyAqIGFyZSBzZXQgdXAuIFRoZXNlIHJlZ2lzdGVycyBoYXZlIHRvIGJlIGVtaXR0 ZWQgaW50byB0aGUgc3RhcnQgb2YgdGhlCj4gKyAqIGNvbnRleHQgYXMgc2V0dGluZyB0aGUgRUxT UCB3aWxsIHJlLWluaXQgc29tZSBvZiB0aGVzZSByZWdpc3RlcnMgYmFjawo+ICsgKiB0byB0aGUg aHcgdmFsdWVzLgo+ICsgKgo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRo ZSBlcnJvciBzdGF0dXMuCj4gKyAqLwo+ICtpbnQgZ2VuOV9wcm9ncmFtX21vY3Moc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZywKPiArCQkJICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KQo+ ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSB0 Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKPiArCXN0cnVjdCBpbnRl bF9yaW5nYnVmZmVyICpyaW5nYnVmID0gY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJpbmdidWY7Cj4g Kwo+ICsJaWYgKGdldF9tb2NzX3NldHRpbmdzKGRldiwgJnQpKSB7Cj4gKwkJdTMyIHRhYmxlX3Np emU7Cj4gKwo+ICsJCS8qCj4gKwkJICogT0suIEZvciBlYWNoIHN1cHBvcnRlZCByaW5nOgo+ICsJ CSAqICBudW1iZXIgb2YgbW9jcyBlbnRyaWVzICogMiBkd29yZHMgZm9yIGVhY2ggY29udHJvbF92 YWx1ZQo+ICsJCSAqICBwbHVzIG51bWJlciBvZiBtb2NzIGVudHJpZXMgLzIgZHdvcmRzIGZvciBs M2NjIHZhbHVlcy4KPiArCQkgKgo+ICsJCSAqICBQbHVzIDEgZm9yIHRoZSBsb2FkIGNvbW1hbmQg YW5kIDEgZm9yIHRoZSBOT09QIHBlciByaW5nCj4gKwkJICogIGFuZCB0aGUgbDNjYyBwcm9ncmFt bWluZy4KPiArCQkgKi8KPiArCQl0YWJsZV9zaXplID0gR0VOOV9OVU1fTU9DU19SSU5HUyAqCj4g KwkJCQkoKDIgKiBHRU45X05VTV9NT0NTX0VOVFJJRVMpICsgMikgKwo+ICsJCQkJR0VOOV9OVU1f TU9DU19FTlRSSUVTICsgMjsKPiArCQlyZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4ocmlu Z2J1ZiwgY3R4LCB0YWJsZV9zaXplKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCURSTV9ERUJVRygi aW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luIGZhaWxlZCAlZFxuIiwgcmV0KTsKPiArCQkJcmV0dXJu IHJldDsKPiArCQl9Cj4gKwo+ICsJCS8qIHByb2dyYW0gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzICov Cj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfR0ZYX01PQ1Nf MCk7Cj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfTUZYMF9N T0NTXzApOwo+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X01G WDFfTU9DU18wKTsKPiArCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAmdCwgR0VO OV9WRUJPWF9NT0NTXzApOwo+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0 LCBHRU45X0JMVF9NT0NTXzApOwo+ICsKPiArCQkvKiBub3cgcHJvZ3JhbSB0aGUgbDNjYyByZWdp c3RlcnMgKi8KPiArCQllbWl0X21vY3NfbDNjY190YWJsZShyaW5nYnVmLCAmdCk7Cj4gKwo+ICsJ CWludGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlKHJpbmdidWYpOwo+ICsKPiArCQlEUk1fREVCVUco Ik1PQ1M6IFRhYmxlIHNldCBpbiBDb250ZXh0XG4iKTsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0RF QlVHKCJNT0NTOiBUYWJsZSBOb3Qgc3VwcG9ydGVkIG9uIHBsYXRmb3JtXG4iKTsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9tb2NzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmUyNzgwY2UKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCj4gQEAgLTAsMCAr MSw2NCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAg UGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+Cj4gKyAqLwo+ICsKPiArI2lm bmRlZiBJTlRFTF9NT0NTX0gKPiArI2RlZmluZSBJTlRFTF9NT0NTX0gKPiArCj4gKy8qKgo+ICsg KiBET0M6IE1lbW9yeSBPYmplY3RzIENvbnRyb2wgU3RhdGUgKE1PQ1MpCj4gKyAqCj4gKyAqIE1v dGl2YXRpb246Cj4gKyAqIEluIHByZXZpb3VzIEdlbnMgdGhlIE1PQ1Mgc2V0dGluZ3Mgd2FzIGEg dmFsdWUgdGhhdCB3YXMgc2V0IGJ5IHVzZXIgbGFuZCBhcwo+ICsgKiBwYXJ0IG9mIHRoZSBiYXRj aC4gSW4gR2VuOSB0aGlzIGhhcyBjaGFuZ2VkIHRvIGJlIGEgc2luZ2xlIHRhYmxlIChwZXIgcmlu ZykKPiArICogdGhhdCBhbGwgYmF0Y2hlcyBub3cgcmVmZXJlbmNlIGJ5IGluZGV4IGluc3RlYWQg b2YgcHJvZ3JhbW1pbmcgdGhlIE1PQ1MKPiArICogZGlyZWN0bHkuCj4gKyAqCj4gKyAqIFRoZSBv bmUgd3JpbmtsZSBpbiB0aGlzIGlzIHRoYXQgb25seSBQQVJUIG9mIHRoZSBNT0NTIHRhYmxlcyBh cmUgaW5jbHVkZWQKPiArICogaW4gY29udGV4dCAoVGhlIEdGWF9NT0NTXzAgLSBHRlhfTU9DU182 NCBhbmQgdGhlIExOQ0ZDTU9DUzAgLSBMTkNGQ01PQ1MzMgo+ICsgKiByZWdpc3RlcnMpLiBUaGUg cmVzdCBhcmUgbm90ICh0aGUgc2V0dGluZ3MgZm9yIHRoZSBvdGhlciByaW5ncykuCj4gKyAqCj4g KyAqIFRoaXMgdGFibGUgbmVlZHMgdG8gYmUgc2V0IGF0IHN5c3RlbSBzdGFydC11cCBiZWNhdXNl IHRoZSB3YXkgdGhlIHRhYmxlCj4gKyAqIGludGVyYWN0cyB3aXRoIHRoZSBjb250ZXh0cyBhbmQg dGhlIEdtbUxpYiBpbnRlcmZhY2UuCj4gKyAqCj4gKyAqCj4gKyAqIEltcGxlbWVudGF0aW9uOgo+ ICsgKgo+ICsgKiBUaGUgdGFibGUgaXMgcHJvZ3JhbW1lZCBvbiBhIHBsYXRmb3JtIGJhc2lzIGZy b20gYSB0YWJsZSB0aGF0IGlzIGdlbmVyYXRlZAo+ICsgKiBmcm9tIHRoZSBvbmUgdGhhdCBoYXMg YmVlbiBhZ3JlZWQgYnkgdGhlIGRpZmZlcmVudCByZXNwb25zaWJsZSBwYXJ0aWVzLiBUaGlzCj4g KyAqIHRhYmxlcyAob25lIHBlciBzdXBwb3J0ZWQgcGxhdGZvcm0pIGlzIGRlZmluZWQgaW4gaW50 ZWxfbW9jcy5jIGFuZCBpcwo+ICsgKiBwcm9ncmFtbWVkIGluIHRoZSBmaXJzdCBiYXRjaCBhZnRl ciB0aGUgY29udGV4dCBpcyBsb2FkZWQgKHdpdGggdGhlIGhhcmR3YXJlCj4gKyAqIHdvcmthcm91 bmRzKS4gVGhpcyB3aWxsIHRoZW4gbGV0IHRoZSB1c3VhbCBjb250ZXh0IGhhbmRsaW5nIGtlZXAg dGhlIE1PQ1MgaW4KPiArICogc3RlcC4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAu aD4KPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKwo+ICtpbnQgZ2VuOV9wcm9ncmFtX21vY3Mo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiArCQkJc3RydWN0IGludGVsX2NvbnRleHQg KmN0eCk7Cj4gKwo+ICsjZW5kaWYKPiArCj4gLS0gCj4gMS45LjEKPiAKPiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxp c3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIK U29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNo Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==