From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 09/13] drm/omap: remove rfbi Date: Fri, 12 May 2017 15:18:47 +0300 Message-ID: <1867594.idAWd54ho9@avalon> References: <1494585702-9665-1-git-send-email-tomi.valkeinen@ti.com> <1494585702-9665-10-git-send-email-tomi.valkeinen@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [185.26.127.97]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7DDDE6E6C0 for ; Fri, 12 May 2017 12:18:46 +0000 (UTC) In-Reply-To: <1494585702-9665-10-git-send-email-tomi.valkeinen@ti.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Tomi Valkeinen Cc: Jyri Sarha , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgVG9taSwKClRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgoKT24gRnJpZGF5IDEyIE1heSAyMDE3 IDEzOjQxOjM4IFRvbWkgVmFsa2VpbmVuIHdyb3RlOgo+IFRoZSBSRkJJIGRyaXZlciBoYXMgbm90 IHdvcmtlZCBub3IgY29tcGlsZWQgZm9yIG1hbnkgeWVhcnMuIFRoZXJlIGFyZQo+IHZlcnkgZmV3 IGJvYXJkcyBvdXQgdGhlcmUgdGhhdCB1c2UgUkZCSSwgYW5kIG5vIG9uZSBoYXMgc3RlcHBlZCB1 cCB0bwo+IGZpeCBpdC4KPiAKPiBTbyBsZXQncyByZW1vdmUgdGhlIFJGQkkgY29kZSB0aGF0IGRv ZXNuJ3QgZXZlbiBjb21waWxlLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFRvbWkgVmFsa2VpbmVuIDx0 b21pLnZhbGtlaW5lbkB0aS5jb20+CgpSZXZpZXdlZC1ieTogTGF1cmVudCBQaW5jaGFydCA8bGF1 cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vZHNzL0tjb25maWcgICB8ICAgMTMgLQo+ICBkcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9kc3MvTWFrZWZpbGUgIHwgICAgMSAtCj4gIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9j b3JlLmMgICAgfCAgICA2IC0KPiAgZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL2Rzcy5oICAg ICB8ICAgIDQgLQo+ICBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3Mvb21hcGRzcy5oIHwgICAz MiAtCj4gIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9yZmJpLmMgICAgfCAxMDc1IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICA2IGZpbGVzIGNoYW5nZWQsIDExMzEgZGVsZXRp b25zKC0pCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3Mv cmZiaS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9LY29u ZmlnCj4gYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvS2NvbmZpZyBpbmRleCBmNTNhZGI5 NDRhMGQuLjhiODdkNWNmNDVmYwo+IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFw ZHJtL2Rzcy9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL0tjb25m aWcKPiBAQCAtNDksMTkgKzQ5LDYgQEAgY29uZmlnIE9NQVAyX0RTU19EUEkKPiAgCWhlbHAKPiAg CSAgRFBJIEludGVyZmFjZS4gVGhpcyBpcyB0aGUgUGFyYWxsZWwgRGlzcGxheSBJbnRlcmZhY2Uu Cj4gCj4gLWNvbmZpZyBPTUFQMl9EU1NfUkZCSQo+IC0JYm9vbCAiUkZCSSBzdXBwb3J0Igo+IC0J ZGVwZW5kcyBvbiBCUk9LRU4KPiAtICAgICAgICBkZWZhdWx0IG4KPiAtCWhlbHAKPiAtCSAgTUlQ SSBEQkkgc3VwcG9ydCAoUkZCSSwgUmVtb3RlIEZyYW1lYnVmZmVyIEludGVyZmFjZSwgaW4gVGV4 YXMKPiAtCSAgSW5zdHJ1bWVudCdzIHRlcm1pbm9sb2d5KS4KPiAtCj4gLQkgIERCSSBpcyBhIGJ1 cyBiZXR3ZWVuIHRoZSBob3N0IHByb2Nlc3NvciBhbmQgYSBwZXJpcGhlcmFsLAo+IC0JICBzdWNo IGFzIGEgZGlzcGxheSBvciBhIGZyYW1lYnVmZmVyIGNoaXAuCj4gLQo+IC0JICBTZWUgaHR0cDov L3d3dy5taXBpLm9yZy8gZm9yIERCSSBzcGVjaWZpY2F0aW9ucy4KPiAtCj4gIGNvbmZpZyBPTUFQ Ml9EU1NfVkVOQwo+ICAJYm9vbCAiVkVOQyBzdXBwb3J0Igo+ICAgICAgICAgIGRlZmF1bHQgeQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvTWFrZWZpbGUKPiBiL2Ry aXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9NYWtlZmlsZSBpbmRleCA3NWVjMzBmMjMxYzcuLjY4 ODE5NWU0NDhjNQo+IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9N YWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9NYWtlZmlsZQo+IEBA IC04LDcgKzgsNiBAQCBvYmotJChDT05GSUdfT01BUDJfRFNTKSArPSBvbWFwZHNzLm8KPiAgb21h cGRzcy15IDo9IGNvcmUubyBkc3MubyBkc3NfZmVhdHVyZXMubyBkaXNwYy5vIGRpc3BjX2NvZWZz Lm8gXAo+ICAJcGxsLm8gdmlkZW8tcGxsLm8KPiAgb21hcGRzcy0kKENPTkZJR19PTUFQMl9EU1Nf RFBJKSArPSBkcGkubwo+IC1vbWFwZHNzLSQoQ09ORklHX09NQVAyX0RTU19SRkJJKSArPSByZmJp Lm8KPiAgb21hcGRzcy0kKENPTkZJR19PTUFQMl9EU1NfVkVOQykgKz0gdmVuYy5vCj4gIG9tYXBk c3MtJChDT05GSUdfT01BUDJfRFNTX1NESSkgKz0gc2RpLm8KPiAgb21hcGRzcy0kKENPTkZJR19P TUFQMl9EU1NfRFNJKSArPSBkc2kubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21h cGRybS9kc3MvY29yZS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvY29yZS5jIGlu ZGV4IGYwNTZiZmZjYWI3My4uYmRjZTRiZmRmNmUwCj4gMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL29tYXBkcm0vZHNzL2NvcmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJt L2Rzcy9jb3JlLmMKPiBAQCAtMjA4LDkgKzIwOCw2IEBAIHN0YXRpYyBpbnQgKCpkc3Nfb3V0cHV0 X2Rydl9yZWdfZnVuY3NbXSkodm9pZCkKPiBfX2luaXRkYXRhID0geyAjaWZkZWYgQ09ORklHX09N QVAyX0RTU19EU0kKPiAgCWRzaV9pbml0X3BsYXRmb3JtX2RyaXZlciwKPiAgI2VuZGlmCj4gLSNp ZmRlZiBDT05GSUdfT01BUDJfRFNTX1JGQkkKPiAtCXJmYmlfaW5pdF9wbGF0Zm9ybV9kcml2ZXIs Cj4gLSNlbmRpZgo+ICAjaWZkZWYgQ09ORklHX09NQVAyX0RTU19WRU5DCj4gIAl2ZW5jX2luaXRf cGxhdGZvcm1fZHJpdmVyLAo+ICAjZW5kaWYKPiBAQCAtMjMyLDkgKzIyOSw2IEBAIHN0YXRpYyB2 b2lkICgqZHNzX291dHB1dF9kcnZfdW5yZWdfZnVuY3NbXSkodm9pZCkgPSB7Cj4gICNpZmRlZiBD T05GSUdfT01BUDJfRFNTX1ZFTkMKPiAgCXZlbmNfdW5pbml0X3BsYXRmb3JtX2RyaXZlciwKPiAg I2VuZGlmCj4gLSNpZmRlZiBDT05GSUdfT01BUDJfRFNTX1JGQkkKPiAtCXJmYmlfdW5pbml0X3Bs YXRmb3JtX2RyaXZlciwKPiAtI2VuZGlmCj4gICNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0RTSQo+ ICAJZHNpX3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIsCj4gICNlbmRpZgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvZHNzLmgKPiBiL2RyaXZlcnMvZ3B1L2RybS9vbWFw ZHJtL2Rzcy9kc3MuaCBpbmRleCBkOGJmOTlhOTc1NzEuLjhkYmYzNWYzYWIyMyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvZHNzLmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vb21hcGRybS9kc3MvZHNzLmgKPiBAQCAtMzgyLDEwICszODIsNiBAQCB2b2lkIGhkbWk0 X3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIodm9pZCk7Cj4gIGludCBoZG1pNV9pbml0X3BsYXRmb3Jt X2RyaXZlcih2b2lkKSBfX2luaXQ7Cj4gIHZvaWQgaGRtaTVfdW5pbml0X3BsYXRmb3JtX2RyaXZl cih2b2lkKTsKPiAKPiAtLyogUkZCSSAqLwo+IC1pbnQgcmZiaV9pbml0X3BsYXRmb3JtX2RyaXZl cih2b2lkKSBfX2luaXQ7Cj4gLXZvaWQgcmZiaV91bmluaXRfcGxhdGZvcm1fZHJpdmVyKHZvaWQp Owo+IC0KPiAKPiAgI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKPiAg c3RhdGljIGlubGluZSB2b2lkIGRzc19jb2xsZWN0X2lycV9zdGF0cyh1MzIgaXJxc3RhdHVzLCB1 bnNpZ25lZCAqaXJxX2FycikKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0v ZHNzL29tYXBkc3MuaAo+IGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL29tYXBkc3MuaCBp bmRleCAzY2JjOWU0OWFhNWEuLjhlYjgzMTVhNmM5NQo+IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL2Rzcy9vbWFwZHNzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vb21h cGRybS9kc3Mvb21hcGRzcy5oCj4gQEAgLTEyNiwxMSArMTI2LDYgQEAgZW51bSBvbWFwX2Rzc190 cmFuc19rZXlfdHlwZSB7Cj4gIAlPTUFQX0RTU19DT0xPUl9LRVlfVklEX1NSQyA9IDEsCj4gIH07 Cj4gCj4gLWVudW0gb21hcF9yZmJpX3RlX21vZGUgewo+IC0JT01BUF9EU1NfUkZCSV9URV9NT0RF XzEgPSAxLAo+IC0JT01BUF9EU1NfUkZCSV9URV9NT0RFXzIgPSAyLAo+IC19Owo+IC0KPiAgZW51 bSBvbWFwX2Rzc19zaWduYWxfbGV2ZWwgewo+ICAJT01BUERTU19TSUdfQUNUSVZFX0xPVywKPiAg CU9NQVBEU1NfU0lHX0FDVElWRV9ISUdILAo+IEBAIC0yMjAsMjcgKzIxNSw2IEBAIGVudW0gb21h cF9kc3Nfb3V0cHV0X2lkIHsKPiAgCU9NQVBfRFNTX09VVFBVVF9IRE1JCT0gMSA8PCA2LAo+ICB9 Owo+IAo+IC0vKiBSRkJJICovCj4gLQo+IC1zdHJ1Y3QgcmZiaV90aW1pbmdzIHsKPiAtCWludCBj c19vbl90aW1lOwo+IC0JaW50IGNzX29mZl90aW1lOwo+IC0JaW50IHdlX29uX3RpbWU7Cj4gLQlp bnQgd2Vfb2ZmX3RpbWU7Cj4gLQlpbnQgcmVfb25fdGltZTsKPiAtCWludCByZV9vZmZfdGltZTsK PiAtCWludCB3ZV9jeWNsZV90aW1lOwo+IC0JaW50IHJlX2N5Y2xlX3RpbWU7Cj4gLQlpbnQgY3Nf cHVsc2Vfd2lkdGg7Cj4gLQlpbnQgYWNjZXNzX3RpbWU7Cj4gLQo+IC0JaW50IGNsa19kaXY7Cj4g LQo+IC0JdTMyIHRpbVs1XTsgICAgICAgICAgICAgLyogc2V0IGJ5IHJmYmlfY29udmVydF90aW1p bmdzKCkgKi8KPiAtCj4gLQlpbnQgY29udmVydGVkOwo+IC19Owo+IC0KPiAgLyogRFNJICovCj4g Cj4gIGVudW0gb21hcF9kc3NfZHNpX3RyYW5zX21vZGUgewo+IEBAIC02MjQsMTEgKzU5OCw2IEBA IHN0cnVjdCBvbWFwX2Rzc19kZXZpY2Ugewo+IAo+ICAJdW5pb24gewo+ICAJCXN0cnVjdCB7Cj4g LQkJCXU4IGNoYW5uZWw7Cj4gLQkJCXU4IGRhdGFfbGluZXM7Cj4gLQkJfSByZmJpOwo+IC0KPiAt CQlzdHJ1Y3Qgewo+ICAJCQlpbnQgbW9kdWxlOwo+ICAJCX0gZHNpOwo+ICAJfSBwaHk7Cj4gQEAg LTY0Miw3ICs2MTEsNiBAQCBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIHsKPiAKPiAgCXN0cnVjdCB7 Cj4gIAkJdTggcGl4ZWxfc2l6ZTsKPiAtCQlzdHJ1Y3QgcmZiaV90aW1pbmdzIHJmYmlfdGltaW5n czsKPiAgCX0gY3RybDsKPiAKPiAgCWNvbnN0IGNoYXIgKm5hbWU7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9yZmJpLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9vbWFw ZHJtL2Rzcy9yZmJpLmMgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggYmY2Yjk2ODc3 ZGFmLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvcmZi aS5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDEwNzUgKzAsMCBAQAo+IC0vKgo+IC0gKiBsaW51 eC9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9yZmJpLmMKPiAtICoKPiAtICogQ29weXJpZ2h0IChD KSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCj4gLSAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRv bWkudmFsa2VpbmVuQG5va2lhLmNvbT4KPiAtICoKPiAtICogU29tZSBjb2RlIGFuZCBpZGVhcyB0 YWtlbiBmcm9tIGRyaXZlcnMvdmlkZW8vb21hcC8gZHJpdmVyCj4gLSAqIGJ5IEltcmUgRGVhay4K PiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKPiAtICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCj4gYnkgLSAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKPiBX SVRIT1VUIC0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+IE1FUkNIQU5UQUJJTElUWSBvciAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQo+IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIC0gKiBtb3Jl IGRldGFpbHMuCj4gLSAqCj4gLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCj4gd2l0aCAtICogdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+IC0gKi8K PiAtCj4gLSNkZWZpbmUgRFNTX1NVQlNZU19OQU1FICJSRkJJIgo+IC0KPiAtI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgo+IC0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPiAtI2luY2x1 ZGUgPGxpbnV4L2V4cG9ydC5oPgo+IC0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgo+IC0jaW5j bHVkZSA8bGludXgvY2xrLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pby5oPgo+IC0jaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+Cj4gLSNpbmNsdWRlIDxs aW51eC9rdGltZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgo+IC0jaW5jbHVkZSA8 bGludXgvc2VxX2ZpbGUuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgo+IC0jaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9wbV9ydW50 aW1lLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiAtCj4gLSNpbmNsdWRlICJv bWFwZHNzLmgiCj4gLSNpbmNsdWRlICJkc3MuaCIKPiAtCj4gLXN0cnVjdCByZmJpX3JlZyB7IHUx NiBpZHg7IH07Cj4gLQo+IC0jZGVmaW5lIFJGQklfUkVHKGlkeCkJCSgoY29uc3Qgc3RydWN0IHJm YmlfcmVnKSB7IGlkeCB9KQo+IC0KPiAtI2RlZmluZSBSRkJJX1JFVklTSU9OCQlSRkJJX1JFRygw eDAwMDApCj4gLSNkZWZpbmUgUkZCSV9TWVNDT05GSUcJCVJGQklfUkVHKDB4MDAxMCkKPiAtI2Rl ZmluZSBSRkJJX1NZU1NUQVRVUwkJUkZCSV9SRUcoMHgwMDE0KQo+IC0jZGVmaW5lIFJGQklfQ09O VFJPTAkJUkZCSV9SRUcoMHgwMDQwKQo+IC0jZGVmaW5lIFJGQklfUElYRUxfQ05UCQlSRkJJX1JF RygweDAwNDQpCj4gLSNkZWZpbmUgUkZCSV9MSU5FX05VTUJFUglSRkJJX1JFRygweDAwNDgpCj4g LSNkZWZpbmUgUkZCSV9DTUQJCVJGQklfUkVHKDB4MDA0YykKPiAtI2RlZmluZSBSRkJJX1BBUkFN CQlSRkJJX1JFRygweDAwNTApCj4gLSNkZWZpbmUgUkZCSV9EQVRBCQlSRkJJX1JFRygweDAwNTQp Cj4gLSNkZWZpbmUgUkZCSV9SRUFECQlSRkJJX1JFRygweDAwNTgpCj4gLSNkZWZpbmUgUkZCSV9T VEFUVVMJCVJGQklfUkVHKDB4MDA1YykKPiAtCj4gLSNkZWZpbmUgUkZCSV9DT05GSUcobikJCVJG QklfUkVHKDB4MDA2MCArIChuKSoweDE4KQo+IC0jZGVmaW5lIFJGQklfT05PRkZfVElNRShuKQlS RkJJX1JFRygweDAwNjQgKyAobikqMHgxOCkKPiAtI2RlZmluZSBSRkJJX0NZQ0xFX1RJTUUobikJ UkZCSV9SRUcoMHgwMDY4ICsgKG4pKjB4MTgpCj4gLSNkZWZpbmUgUkZCSV9EQVRBX0NZQ0xFMShu KQlSRkJJX1JFRygweDAwNmMgKyAobikqMHgxOCkKPiAtI2RlZmluZSBSRkJJX0RBVEFfQ1lDTEUy KG4pCVJGQklfUkVHKDB4MDA3MCArIChuKSoweDE4KQo+IC0jZGVmaW5lIFJGQklfREFUQV9DWUNM RTMobikJUkZCSV9SRUcoMHgwMDc0ICsgKG4pKjB4MTgpCj4gLQo+IC0jZGVmaW5lIFJGQklfVlNZ TkNfV0lEVEgJUkZCSV9SRUcoMHgwMDkwKQo+IC0jZGVmaW5lIFJGQklfSFNZTkNfV0lEVEgJUkZC SV9SRUcoMHgwMDk0KQo+IC0KPiAtI2RlZmluZSBSRUdfRkxEX01PRChpZHgsIHZhbCwgc3RhcnQs IGVuZCkgXAo+IC0JcmZiaV93cml0ZV9yZWcoaWR4LCBGTERfTU9EKHJmYmlfcmVhZF9yZWcoaWR4 KSwgdmFsLCBzdGFydCwgZW5kKSkKPiAtCj4gLWVudW0gb21hcF9yZmJpX2N5Y2xlZm9ybWF0IHsK PiAtCU9NQVBfRFNTX1JGQklfQ1lDTEVGT1JNQVRfMV8xID0gMCwKPiAtCU9NQVBfRFNTX1JGQklf Q1lDTEVGT1JNQVRfMl8xID0gMSwKPiAtCU9NQVBfRFNTX1JGQklfQ1lDTEVGT1JNQVRfM18xID0g MiwKPiAtCU9NQVBfRFNTX1JGQklfQ1lDTEVGT1JNQVRfM18yID0gMywKPiAtfTsKPiAtCj4gLWVu dW0gb21hcF9yZmJpX2RhdGF0eXBlIHsKPiAtCU9NQVBfRFNTX1JGQklfREFUQVRZUEVfMTIgPSAw LAo+IC0JT01BUF9EU1NfUkZCSV9EQVRBVFlQRV8xNiA9IDEsCj4gLQlPTUFQX0RTU19SRkJJX0RB VEFUWVBFXzE4ID0gMiwKPiAtCU9NQVBfRFNTX1JGQklfREFUQVRZUEVfMjQgPSAzLAo+IC19Owo+ IC0KPiAtZW51bSBvbWFwX3JmYmlfcGFyYWxsZWxtb2RlIHsKPiAtCU9NQVBfRFNTX1JGQklfUEFS QUxMRUxNT0RFXzggPSAwLAo+IC0JT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfOSA9IDEsCj4g LQlPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV8xMiA9IDIsCj4gLQlPTUFQX0RTU19SRkJJX1BB UkFMTEVMTU9ERV8xNiA9IDMsCj4gLX07Cj4gLQo+IC1zdGF0aWMgaW50IHJmYmlfY29udmVydF90 aW1pbmdzKHN0cnVjdCByZmJpX3RpbWluZ3MgKnQpOwo+IC1zdGF0aWMgdm9pZCByZmJpX2dldF9j bGtfaW5mbyh1MzIgKmNsa19wZXJpb2QsIHUzMiAqbWF4X2Nsa19kaXYpOwo+IC0KPiAtc3RhdGlj IHN0cnVjdCB7Cj4gLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+IC0Jdm9pZCBfX2lv bWVtCSpiYXNlOwo+IC0KPiAtCXVuc2lnbmVkIGxvbmcJbDRfa2h6Owo+IC0KPiAtCWVudW0gb21h cF9yZmJpX2RhdGF0eXBlIGRhdGF0eXBlOwo+IC0JZW51bSBvbWFwX3JmYmlfcGFyYWxsZWxtb2Rl IHBhcmFsbGVsbW9kZTsKPiAtCj4gLQllbnVtIG9tYXBfcmZiaV90ZV9tb2RlIHRlX21vZGU7Cj4g LQlpbnQgdGVfZW5hYmxlZDsKPiAtCj4gLQl2b2lkICgqZnJhbWVkb25lX2NhbGxiYWNrKSh2b2lk ICpkYXRhKTsKPiAtCXZvaWQgKmZyYW1lZG9uZV9jYWxsYmFja19kYXRhOwo+IC0KPiAtCXN0cnVj dCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldlsyXTsKPiAtCj4gLQlzdHJ1Y3Qgc2VtYXBob3JlIGJ1 c19sb2NrOwo+IC0KPiAtCXN0cnVjdCB2aWRlb21vZGUgdm07Cj4gLQlpbnQgcGl4ZWxfc2l6ZTsK PiAtCWludCBkYXRhX2xpbmVzOwo+IC0Jc3RydWN0IHJmYmlfdGltaW5ncyBpbnRmX3RpbWluZ3M7 Cj4gLQo+IC0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSBvdXRwdXQ7Cj4gLX0gcmZiaTsKPiAtCj4g LXN0YXRpYyBpbmxpbmUgdm9pZCByZmJpX3dyaXRlX3JlZyhjb25zdCBzdHJ1Y3QgcmZiaV9yZWcg aWR4LCB1MzIgdmFsKQo+IC17Cj4gLQlfX3Jhd193cml0ZWwodmFsLCByZmJpLmJhc2UgKyBpZHgu aWR4KTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB1MzIgcmZiaV9yZWFkX3JlZyhjb25zdCBz dHJ1Y3QgcmZiaV9yZWcgaWR4KQo+IC17Cj4gLQlyZXR1cm4gX19yYXdfcmVhZGwocmZiaS5iYXNl ICsgaWR4LmlkeCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcmZiaV9ydW50aW1lX2dldCh2b2lk KQo+IC17Cj4gLQlpbnQgcjsKPiAtCj4gLQlEU1NEQkcoInJmYmlfcnVudGltZV9nZXRcbiIpOwo+ IC0KPiAtCXIgPSBwbV9ydW50aW1lX2dldF9zeW5jKCZyZmJpLnBkZXYtPmRldik7Cj4gLQlXQVJO X09OKHIgPCAwKTsKPiAtCXJldHVybiByIDwgMCA/IHIgOiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMg dm9pZCByZmJpX3J1bnRpbWVfcHV0KHZvaWQpCj4gLXsKPiAtCWludCByOwo+IC0KPiAtCURTU0RC RygicmZiaV9ydW50aW1lX3B1dFxuIik7Cj4gLQo+IC0JciA9IHBtX3J1bnRpbWVfcHV0X3N5bmMo JnJmYmkucGRldi0+ZGV2KTsKPiAtCVdBUk5fT04ociA8IDAgJiYgciAhPSAtRU5PU1lTKTsKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQgcmZiaV9idXNfbG9jayh2b2lkKQo+IC17Cj4gLQlkb3duKCZy ZmJpLmJ1c19sb2NrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcmZiaV9idXNfdW5sb2NrKHZv aWQpCj4gLXsKPiAtCXVwKCZyZmJpLmJ1c19sb2NrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQg cmZiaV93cml0ZV9jb21tYW5kKGNvbnN0IHZvaWQgKmJ1ZiwgdTMyIGxlbikKPiAtewo+IC0Jc3dp dGNoIChyZmJpLnBhcmFsbGVsbW9kZSkgewo+IC0JY2FzZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVM TU9ERV84Ogo+IC0Jewo+IC0JCWNvbnN0IHU4ICpiID0gYnVmOwo+IC0JCWZvciAoOyBsZW47IGxl bi0tKQo+IC0JCQlyZmJpX3dyaXRlX3JlZyhSRkJJX0NNRCwgKmIrKyk7Cj4gLQkJYnJlYWs7Cj4g LQl9Cj4gLQo+IC0JY2FzZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV8xNjoKPiAtCXsKPiAt CQljb25zdCB1MTYgKncgPSBidWY7Cj4gLQkJQlVHX09OKGxlbiAmIDEpOwo+IC0JCWZvciAoOyBs ZW47IGxlbiAtPSAyKQo+IC0JCQlyZmJpX3dyaXRlX3JlZyhSRkJJX0NNRCwgKncrKyk7Cj4gLQkJ YnJlYWs7Cj4gLQl9Cj4gLQo+IC0JY2FzZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV85Ogo+ IC0JY2FzZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV8xMjoKPiAtCWRlZmF1bHQ6Cj4gLQkJ QlVHKCk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJmYmlfcmVhZF9kYXRhKHZvaWQg KmJ1ZiwgdTMyIGxlbikKPiAtewo+IC0Jc3dpdGNoIChyZmJpLnBhcmFsbGVsbW9kZSkgewo+IC0J Y2FzZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV84Ogo+IC0Jewo+IC0JCXU4ICpiID0gYnVm Owo+IC0JCWZvciAoOyBsZW47IGxlbi0tKSB7Cj4gLQkJCXJmYmlfd3JpdGVfcmVnKFJGQklfUkVB RCwgMCk7Cj4gLQkJCSpiKysgPSByZmJpX3JlYWRfcmVnKFJGQklfUkVBRCk7Cj4gLQkJfQo+IC0J CWJyZWFrOwo+IC0JfQo+IC0KPiAtCWNhc2UgT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfMTY6 Cj4gLQl7Cj4gLQkJdTE2ICp3ID0gYnVmOwo+IC0JCUJVR19PTihsZW4gJiB+MSk7Cj4gLQkJZm9y ICg7IGxlbjsgbGVuIC09IDIpIHsKPiAtCQkJcmZiaV93cml0ZV9yZWcoUkZCSV9SRUFELCAwKTsK PiAtCQkJKncrKyA9IHJmYmlfcmVhZF9yZWcoUkZCSV9SRUFEKTsKPiAtCQl9Cj4gLQkJYnJlYWs7 Cj4gLQl9Cj4gLQo+IC0JY2FzZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV85Ogo+IC0JY2Fz ZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV8xMjoKPiAtCWRlZmF1bHQ6Cj4gLQkJQlVHKCk7 Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJmYmlfd3JpdGVfZGF0YShjb25zdCB2b2lk ICpidWYsIHUzMiBsZW4pCj4gLXsKPiAtCXN3aXRjaCAocmZiaS5wYXJhbGxlbG1vZGUpIHsKPiAt CWNhc2UgT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfODoKPiAtCXsKPiAtCQljb25zdCB1OCAq YiA9IGJ1ZjsKPiAtCQlmb3IgKDsgbGVuOyBsZW4tLSkKPiAtCQkJcmZiaV93cml0ZV9yZWcoUkZC SV9QQVJBTSwgKmIrKyk7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JY2FzZSBPTUFQX0RTU19S RkJJX1BBUkFMTEVMTU9ERV8xNjoKPiAtCXsKPiAtCQljb25zdCB1MTYgKncgPSBidWY7Cj4gLQkJ QlVHX09OKGxlbiAmIDEpOwo+IC0JCWZvciAoOyBsZW47IGxlbiAtPSAyKQo+IC0JCQlyZmJpX3dy aXRlX3JlZyhSRkJJX1BBUkFNLCAqdysrKTsKPiAtCQlicmVhazsKPiAtCX0KPiAtCj4gLQljYXNl IE9NQVBfRFNTX1JGQklfUEFSQUxMRUxNT0RFXzk6Cj4gLQljYXNlIE9NQVBfRFNTX1JGQklfUEFS QUxMRUxNT0RFXzEyOgo+IC0JZGVmYXVsdDoKPiAtCQlCVUcoKTsKPiAtCj4gLQl9Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkIHJmYmlfd3JpdGVfcGl4ZWxzKGNvbnN0IHZvaWQgX19pb21lbSAqYnVm LCBpbnQgc2NyX3dpZHRoLAo+IC0JCXUxNiB4LCB1MTYgeSwKPiAtCQl1MTYgdywgdTE2IGgpCj4g LXsKPiAtCWludCBzdGFydF9vZmZzZXQgPSBzY3Jfd2lkdGggKiB5ICsgeDsKPiAtCWludCBob3Jp el9vZmZzZXQgPSBzY3Jfd2lkdGggLSB3Owo+IC0JaW50IGk7Cj4gLQo+IC0JaWYgKHJmYmkuZGF0 YXR5cGUgPT0gT01BUF9EU1NfUkZCSV9EQVRBVFlQRV8xNiAmJgo+IC0JICAgcmZiaS5wYXJhbGxl bG1vZGUgPT0gT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfOCkgewo+IC0JCWNvbnN0IHUxNiBf X2lvbWVtICpwZCA9IGJ1ZjsKPiAtCQlwZCArPSBzdGFydF9vZmZzZXQ7Cj4gLQo+IC0JCWZvciAo OyBoOyAtLWgpIHsKPiAtCQkJZm9yIChpID0gMDsgaSA8IHc7ICsraSkgewo+IC0JCQkJY29uc3Qg dTggX19pb21lbSAqYiA9IChjb25zdCB1OCBfX2lvbWVtICopcGQ7Cj4gLQkJCQlyZmJpX3dyaXRl X3JlZyhSRkJJX1BBUkFNLCBfX3Jhd19yZWFkYihiKzEpKTsKPiAtCQkJCXJmYmlfd3JpdGVfcmVn KFJGQklfUEFSQU0sIF9fcmF3X3JlYWRiKGIrMCkpOwo+IC0JCQkJKytwZDsKPiAtCQkJfQo+IC0J CQlwZCArPSBob3Jpel9vZmZzZXQ7Cj4gLQkJfQo+IC0JfSBlbHNlIGlmIChyZmJpLmRhdGF0eXBl ID09IE9NQVBfRFNTX1JGQklfREFUQVRZUEVfMjQgJiYKPiAtCSAgIHJmYmkucGFyYWxsZWxtb2Rl ID09IE9NQVBfRFNTX1JGQklfUEFSQUxMRUxNT0RFXzgpIHsKPiAtCQljb25zdCB1MzIgX19pb21l bSAqcGQgPSBidWY7Cj4gLQkJcGQgKz0gc3RhcnRfb2Zmc2V0Owo+IC0KPiAtCQlmb3IgKDsgaDsg LS1oKSB7Cj4gLQkJCWZvciAoaSA9IDA7IGkgPCB3OyArK2kpIHsKPiAtCQkJCWNvbnN0IHU4IF9f aW9tZW0gKmIgPSAoY29uc3QgdTggX19pb21lbSAqKXBkOwo+IC0JCQkJcmZiaV93cml0ZV9yZWco UkZCSV9QQVJBTSwgX19yYXdfcmVhZGIoYisyKSk7Cj4gLQkJCQlyZmJpX3dyaXRlX3JlZyhSRkJJ X1BBUkFNLCBfX3Jhd19yZWFkYihiKzEpKTsKPiAtCQkJCXJmYmlfd3JpdGVfcmVnKFJGQklfUEFS QU0sIF9fcmF3X3JlYWRiKGIrMCkpOwo+IC0JCQkJKytwZDsKPiAtCQkJfQo+IC0JCQlwZCArPSBo b3Jpel9vZmZzZXQ7Cj4gLQkJfQo+IC0JfSBlbHNlIGlmIChyZmJpLmRhdGF0eXBlID09IE9NQVBf RFNTX1JGQklfREFUQVRZUEVfMTYgJiYKPiAtCSAgIHJmYmkucGFyYWxsZWxtb2RlID09IE9NQVBf RFNTX1JGQklfUEFSQUxMRUxNT0RFXzE2KSB7Cj4gLQkJY29uc3QgdTE2IF9faW9tZW0gKnBkID0g YnVmOwo+IC0JCXBkICs9IHN0YXJ0X29mZnNldDsKPiAtCj4gLQkJZm9yICg7IGg7IC0taCkgewo+ IC0JCQlmb3IgKGkgPSAwOyBpIDwgdzsgKytpKSB7Cj4gLQkJCQlyZmJpX3dyaXRlX3JlZyhSRkJJ X1BBUkFNLCBfX3Jhd19yZWFkdyhwZCkpOwo+IC0JCQkJKytwZDsKPiAtCQkJfQo+IC0JCQlwZCAr PSBob3Jpel9vZmZzZXQ7Cj4gLQkJfQo+IC0JfSBlbHNlIHsKPiAtCQlCVUcoKTsKPiAtCX0KPiAt fQo+IC0KPiAtc3RhdGljIGludCByZmJpX3RyYW5zZmVyX2FyZWEoc3RydWN0IG9tYXBfZHNzX2Rl dmljZSAqZHNzZGV2LAo+IC0JCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSksIHZvaWQgKmRh dGEpCj4gLXsKPiAtCXUzMiBsOwo+IC0JaW50IHI7Cj4gLQlzdHJ1Y3Qgb21hcF9vdmVybGF5X21h bmFnZXIgKm1nciA9IHJmYmkub3V0cHV0Lm1hbmFnZXI7Cj4gLQl1MTYgd2lkdGggPSByZmJpLnZt LmhhY3RpdmU7Cj4gLQl1MTYgaGVpZ2h0ID0gcmZiaS52bS52YWN0aXZlOwo+IC0KPiAtCS8qQlVH X09OKGNhbGxiYWNrID09IDApOyovCj4gLQlCVUdfT04ocmZiaS5mcmFtZWRvbmVfY2FsbGJhY2sg IT0gTlVMTCk7Cj4gLQo+IC0JRFNTREJHKCJyZmJpX3RyYW5zZmVyX2FyZWEgJWR4JWRcbiIsIHdp ZHRoLCBoZWlnaHQpOwo+IC0KPiAtCWRzc19tZ3Jfc2V0X3RpbWluZ3MobWdyLCAmcmZiaS52bSk7 Cj4gLQo+IC0JciA9IGRzc19tZ3JfZW5hYmxlKG1ncik7Cj4gLQlpZiAocikKPiAtCQlyZXR1cm4g cjsKPiAtCj4gLQlyZmJpLmZyYW1lZG9uZV9jYWxsYmFjayA9IGNhbGxiYWNrOwo+IC0JcmZiaS5m cmFtZWRvbmVfY2FsbGJhY2tfZGF0YSA9IGRhdGE7Cj4gLQo+IC0JcmZiaV93cml0ZV9yZWcoUkZC SV9QSVhFTF9DTlQsIHdpZHRoICogaGVpZ2h0KTsKPiAtCj4gLQlsID0gcmZiaV9yZWFkX3JlZyhS RkJJX0NPTlRST0wpOwo+IC0JbCA9IEZMRF9NT0QobCwgMSwgMCwgMCk7IC8qIGVuYWJsZSAqLwo+ IC0JaWYgKCFyZmJpLnRlX2VuYWJsZWQpCj4gLQkJbCA9IEZMRF9NT0QobCwgMSwgNCwgNCk7IC8q IElURSAqLwo+IC0KPiAtCXJmYmlfd3JpdGVfcmVnKFJGQklfQ09OVFJPTCwgbCk7Cj4gLQo+IC0J cmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGZyYW1lZG9uZV9jYWxsYmFjayh2b2lk ICpkYXRhKQo+IC17Cj4gLQl2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpOwo+IC0KPiAtCURT U0RCRygiRlJBTUVET05FXG4iKTsKPiAtCj4gLQlSRUdfRkxEX01PRChSRkJJX0NPTlRST0wsIDAs IDAsIDApOwo+IC0KPiAtCWNhbGxiYWNrID0gcmZiaS5mcmFtZWRvbmVfY2FsbGJhY2s7Cj4gLQly ZmJpLmZyYW1lZG9uZV9jYWxsYmFjayA9IE5VTEw7Cj4gLQo+IC0JaWYgKGNhbGxiYWNrICE9IE5V TEwpCj4gLQkJY2FsbGJhY2socmZiaS5mcmFtZWRvbmVfY2FsbGJhY2tfZGF0YSk7Cj4gLX0KPiAt Cj4gLSNpZiAxIC8qIFZFUkJPU0UgKi8KPiAtc3RhdGljIHZvaWQgcmZiaV9wcmludF90aW1pbmdz KHZvaWQpCj4gLXsKPiAtCXUzMiBsOwo+IC0JdTMyIHRpbWU7Cj4gLQo+IC0JbCA9IHJmYmlfcmVh ZF9yZWcoUkZCSV9DT05GSUcoMCkpOwo+IC0JdGltZSA9IDEwMDAwMDAwMDAgLyByZmJpLmw0X2to ejsKPiAtCWlmIChsICYgKDEgPDwgNCkpCj4gLQkJdGltZSAqPSAyOwo+IC0KPiAtCURTU0RCRygi VGljayB0aW1lICV1IHBzXG4iLCB0aW1lKTsKPiAtCWwgPSByZmJpX3JlYWRfcmVnKFJGQklfT05P RkZfVElNRSgwKSk7Cj4gLQlEU1NEQkcoIkNTT05USU1FICVkLCBDU09GRlRJTUUgJWQsIFdFT05U SU1FICVkLCBXRU9GRlRJTUUgJWQsICIKPiAtCQkiUkVPTlRJTUUgJWQsIFJFT0ZGVElNRSAlZFxu IiwKPiAtCQlsICYgMHgwZiwgKGwgPj4gNCkgJiAweDNmLCAobCA+PiAxMCkgJiAweDBmLCAobCA+ PiAxNCkgJiAweDNmLAo+IC0JCShsID4+IDIwKSAmIDB4MGYsIChsID4+IDI0KSAmIDB4M2YpOwo+ IC0KPiAtCWwgPSByZmJpX3JlYWRfcmVnKFJGQklfQ1lDTEVfVElNRSgwKSk7Cj4gLQlEU1NEQkco IldFQ1lDTEVUSU1FICVkLCBSRUNZQ0xFVElNRSAlZCwgQ1NQVUxTRVdJRFRIICVkLCAiCj4gLQkJ IkFDQ0VTU1RJTUUgJWRcbiIsCj4gLQkJKGwgJiAweDNmKSwgKGwgPj4gNikgJiAweDNmLCAobCA+ PiAxMikgJiAweDNmLAo+IC0JCShsID4+IDIyKSAmIDB4M2YpOwo+IC19Cj4gLSNlbHNlCj4gLXN0 YXRpYyB2b2lkIHJmYmlfcHJpbnRfdGltaW5ncyh2b2lkKSB7fQo+IC0jZW5kaWYKPiAtCj4gLQo+ IC0KPiAtCj4gLXN0YXRpYyB1MzIgZXh0aWZfY2xrX3BlcmlvZDsKPiAtCj4gLXN0YXRpYyBpbmxp bmUgdW5zaWduZWQgbG9uZyByb3VuZF90b19leHRpZl90aWNrcyh1bnNpZ25lZCBsb25nIHBzLCBp bnQgZGl2KQo+IC17Cj4gLQlpbnQgYnVzX3RpY2sgPSBleHRpZl9jbGtfcGVyaW9kICogZGl2Owo+ IC0JcmV0dXJuIChwcyArIGJ1c190aWNrIC0gMSkgLyBidXNfdGljayAqIGJ1c190aWNrOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IGNhbGNfcmVnX3RpbWluZyhzdHJ1Y3QgcmZiaV90aW1pbmdzICp0 LCBpbnQgZGl2KQo+IC17Cj4gLQl0LT5jbGtfZGl2ID0gZGl2Owo+IC0KPiAtCXQtPmNzX29uX3Rp bWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0LT5jc19vbl90aW1lLCBkaXYpOwo+IC0KPiAtCXQt PndlX29uX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0LT53ZV9vbl90aW1lLCBkaXYpOwo+ IC0JdC0+d2Vfb2ZmX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0LT53ZV9vZmZfdGltZSwg ZGl2KTsKPiAtCXQtPndlX2N5Y2xlX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0LT53ZV9j eWNsZV90aW1lLCBkaXYpOwo+IC0KPiAtCXQtPnJlX29uX3RpbWUgPSByb3VuZF90b19leHRpZl90 aWNrcyh0LT5yZV9vbl90aW1lLCBkaXYpOwo+IC0JdC0+cmVfb2ZmX3RpbWUgPSByb3VuZF90b19l eHRpZl90aWNrcyh0LT5yZV9vZmZfdGltZSwgZGl2KTsKPiAtCXQtPnJlX2N5Y2xlX3RpbWUgPSBy b3VuZF90b19leHRpZl90aWNrcyh0LT5yZV9jeWNsZV90aW1lLCBkaXYpOwo+IC0KPiAtCXQtPmFj Y2Vzc190aW1lID0gcm91bmRfdG9fZXh0aWZfdGlja3ModC0+YWNjZXNzX3RpbWUsIGRpdik7Cj4g LQl0LT5jc19vZmZfdGltZSA9IHJvdW5kX3RvX2V4dGlmX3RpY2tzKHQtPmNzX29mZl90aW1lLCBk aXYpOwo+IC0JdC0+Y3NfcHVsc2Vfd2lkdGggPSByb3VuZF90b19leHRpZl90aWNrcyh0LT5jc19w dWxzZV93aWR0aCwgZGl2KTsKPiAtCj4gLQlEU1NEQkcoIltyZWddY3NvbiAlZCBjc29mZiAlZCBy ZW9uICVkIHJlb2ZmICVkXG4iLAo+IC0JICAgICAgIHQtPmNzX29uX3RpbWUsIHQtPmNzX29mZl90 aW1lLCB0LT5yZV9vbl90aW1lLCB0LT5yZV9vZmZfdGltZSk7Cj4gLQlEU1NEQkcoIltyZWddd2Vv biAlZCB3ZW9mZiAlZCByZWN5YyAlZCB3ZWN5YyAlZFxuIiwKPiAtCSAgICAgICB0LT53ZV9vbl90 aW1lLCB0LT53ZV9vZmZfdGltZSwgdC0+cmVfY3ljbGVfdGltZSwKPiAtCSAgICAgICB0LT53ZV9j eWNsZV90aW1lKTsKPiAtCURTU0RCRygiW3JlZ11yZGFjY2VzcyAlZCBjc3B1bHNlICVkXG4iLAo+ IC0JICAgICAgIHQtPmFjY2Vzc190aW1lLCB0LT5jc19wdWxzZV93aWR0aCk7Cj4gLQo+IC0JcmV0 dXJuIHJmYmlfY29udmVydF90aW1pbmdzKHQpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGNhbGNf ZXh0aWZfdGltaW5ncyhzdHJ1Y3QgcmZiaV90aW1pbmdzICp0KQo+IC17Cj4gLQl1MzIgbWF4X2Ns a19kaXY7Cj4gLQlpbnQgZGl2Owo+IC0KPiAtCXJmYmlfZ2V0X2Nsa19pbmZvKCZleHRpZl9jbGtf cGVyaW9kLCAmbWF4X2Nsa19kaXYpOwo+IC0JZm9yIChkaXYgPSAxOyBkaXYgPD0gbWF4X2Nsa19k aXY7IGRpdisrKSB7Cj4gLQkJaWYgKGNhbGNfcmVnX3RpbWluZyh0LCBkaXYpID09IDApCj4gLQkJ CWJyZWFrOwo+IC0JfQo+IC0KPiAtCWlmIChkaXYgPD0gbWF4X2Nsa19kaXYpCj4gLQkJcmV0dXJu IDA7Cj4gLQo+IC0JRFNTRVJSKCJjYW4ndCBzZXR1cCB0aW1pbmdzXG4iKTsKPiAtCXJldHVybiAt MTsKPiAtfQo+IC0KPiAtCj4gLXN0YXRpYyB2b2lkIHJmYmlfc2V0X3RpbWluZ3MoaW50IHJmYmlf bW9kdWxlLCBzdHJ1Y3QgcmZiaV90aW1pbmdzICp0KQo+IC17Cj4gLQlpbnQgcjsKPiAtCj4gLQlp ZiAoIXQtPmNvbnZlcnRlZCkgewo+IC0JCXIgPSBjYWxjX2V4dGlmX3RpbWluZ3ModCk7Cj4gLQkJ aWYgKHIgPCAwKQo+IC0JCQlEU1NFUlIoIkZhaWxlZCB0byBjYWxjIHRpbWluZ3NcbiIpOwo+IC0J fQo+IC0KPiAtCUJVR19PTighdC0+Y29udmVydGVkKTsKPiAtCj4gLQlyZmJpX3dyaXRlX3JlZyhS RkJJX09OT0ZGX1RJTUUocmZiaV9tb2R1bGUpLCB0LT50aW1bMF0pOwo+IC0JcmZiaV93cml0ZV9y ZWcoUkZCSV9DWUNMRV9USU1FKHJmYmlfbW9kdWxlKSwgdC0+dGltWzFdKTsKPiAtCj4gLQkvKiBU SU1FR1JBTlVMQVJJVFkgKi8KPiAtCVJFR19GTERfTU9EKFJGQklfQ09ORklHKHJmYmlfbW9kdWxl KSwKPiAtCQkgICAgKHQtPnRpbVsyXSA/IDEgOiAwKSwgNCwgNCk7Cj4gLQo+IC0JcmZiaV9wcmlu dF90aW1pbmdzKCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcHNfdG9fcmZiaV90aWNrcyhpbnQg dGltZSwgaW50IGRpdikKPiAtewo+IC0JdW5zaWduZWQgbG9uZyB0aWNrX3BzOwo+IC0JaW50IHJl dDsKPiAtCj4gLQkvKiBDYWxjdWxhdGUgaW4gcGljb3NlY3MgdG8geWllbGQgbW9yZSBleGFjdCBy ZXN1bHRzICovCj4gLQl0aWNrX3BzID0gMTAwMDAwMDAwMCAvIChyZmJpLmw0X2toeikgKiBkaXY7 Cj4gLQo+IC0JcmV0ID0gKHRpbWUgKyB0aWNrX3BzIC0gMSkgLyB0aWNrX3BzOwo+IC0KPiAtCXJl dHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJmYmlfZ2V0X2Nsa19pbmZvKHUzMiAq Y2xrX3BlcmlvZCwgdTMyICptYXhfY2xrX2RpdikKPiAtewo+IC0JKmNsa19wZXJpb2QgPSAxMDAw MDAwMDAwIC8gcmZiaS5sNF9raHo7Cj4gLQkqbWF4X2Nsa19kaXYgPSAyOwo+IC19Cj4gLQo+IC1z dGF0aWMgaW50IHJmYmlfY29udmVydF90aW1pbmdzKHN0cnVjdCByZmJpX3RpbWluZ3MgKnQpCj4g LXsKPiAtCXUzMiBsOwo+IC0JaW50IHJlb24sIHJlb2ZmLCB3ZW9uLCB3ZW9mZiwgY3NvbiwgY3Nv ZmYsIGNzX3B1bHNlOwo+IC0JaW50IGFjdGltLCByZWN5Yywgd2VjeWM7Cj4gLQlpbnQgZGl2ID0g dC0+Y2xrX2RpdjsKPiAtCj4gLQlpZiAoZGl2IDw9IDAgfHwgZGl2ID4gMikKPiAtCQlyZXR1cm4g LTE7Cj4gLQo+IC0JLyogTWFrZSBzdXJlIHRoYXQgYWZ0ZXIgY29udmVyc2lvbiBpdCBzdGlsbCBo b2xkcyB0aGF0Ogo+IC0JICogd2VvZmYgPiB3ZW9uLCByZW9mZiA+IHJlb24sIHJlY3ljID49IHJl b2ZmLCB3ZWN5YyA+PSB3ZW9mZiwKPiAtCSAqIGNzb2ZmID4gY3NvbiwgY3NvZmYgPj0gbWF4KHdl b2ZmLCByZW9mZiksIGFjdGltID4gcmVvbgo+IC0JICovCj4gLQl3ZW9uID0gcHNfdG9fcmZiaV90 aWNrcyh0LT53ZV9vbl90aW1lLCBkaXYpOwo+IC0Jd2VvZmYgPSBwc190b19yZmJpX3RpY2tzKHQt PndlX29mZl90aW1lLCBkaXYpOwo+IC0JaWYgKHdlb2ZmIDw9IHdlb24pCj4gLQkJd2VvZmYgPSB3 ZW9uICsgMTsKPiAtCWlmICh3ZW9uID4gMHgwZikKPiAtCQlyZXR1cm4gLTE7Cj4gLQlpZiAod2Vv ZmYgPiAweDNmKQo+IC0JCXJldHVybiAtMTsKPiAtCj4gLQlyZW9uID0gcHNfdG9fcmZiaV90aWNr cyh0LT5yZV9vbl90aW1lLCBkaXYpOwo+IC0JcmVvZmYgPSBwc190b19yZmJpX3RpY2tzKHQtPnJl X29mZl90aW1lLCBkaXYpOwo+IC0JaWYgKHJlb2ZmIDw9IHJlb24pCj4gLQkJcmVvZmYgPSByZW9u ICsgMTsKPiAtCWlmIChyZW9uID4gMHgwZikKPiAtCQlyZXR1cm4gLTE7Cj4gLQlpZiAocmVvZmYg PiAweDNmKQo+IC0JCXJldHVybiAtMTsKPiAtCj4gLQljc29uID0gcHNfdG9fcmZiaV90aWNrcyh0 LT5jc19vbl90aW1lLCBkaXYpOwo+IC0JY3NvZmYgPSBwc190b19yZmJpX3RpY2tzKHQtPmNzX29m Zl90aW1lLCBkaXYpOwo+IC0JaWYgKGNzb2ZmIDw9IGNzb24pCj4gLQkJY3NvZmYgPSBjc29uICsg MTsKPiAtCWlmIChjc29mZiA8IG1heCh3ZW9mZiwgcmVvZmYpKQo+IC0JCWNzb2ZmID0gbWF4KHdl b2ZmLCByZW9mZik7Cj4gLQlpZiAoY3NvbiA+IDB4MGYpCj4gLQkJcmV0dXJuIC0xOwo+IC0JaWYg KGNzb2ZmID4gMHgzZikKPiAtCQlyZXR1cm4gLTE7Cj4gLQo+IC0JbCA9ICBjc29uOwo+IC0JbCB8 PSBjc29mZiA8PCA0Owo+IC0JbCB8PSB3ZW9uICA8PCAxMDsKPiAtCWwgfD0gd2VvZmYgPDwgMTQ7 Cj4gLQlsIHw9IHJlb24gIDw8IDIwOwo+IC0JbCB8PSByZW9mZiA8PCAyNDsKPiAtCj4gLQl0LT50 aW1bMF0gPSBsOwo+IC0KPiAtCWFjdGltID0gcHNfdG9fcmZiaV90aWNrcyh0LT5hY2Nlc3NfdGlt ZSwgZGl2KTsKPiAtCWlmIChhY3RpbSA8PSByZW9uKQo+IC0JCWFjdGltID0gcmVvbiArIDE7Cj4g LQlpZiAoYWN0aW0gPiAweDNmKQo+IC0JCXJldHVybiAtMTsKPiAtCj4gLQl3ZWN5YyA9IHBzX3Rv X3JmYmlfdGlja3ModC0+d2VfY3ljbGVfdGltZSwgZGl2KTsKPiAtCWlmICh3ZWN5YyA8IHdlb2Zm KQo+IC0JCXdlY3ljID0gd2VvZmY7Cj4gLQlpZiAod2VjeWMgPiAweDNmKQo+IC0JCXJldHVybiAt MTsKPiAtCj4gLQlyZWN5YyA9IHBzX3RvX3JmYmlfdGlja3ModC0+cmVfY3ljbGVfdGltZSwgZGl2 KTsKPiAtCWlmIChyZWN5YyA8IHJlb2ZmKQo+IC0JCXJlY3ljID0gcmVvZmY7Cj4gLQlpZiAocmVj eWMgPiAweDNmKQo+IC0JCXJldHVybiAtMTsKPiAtCj4gLQljc19wdWxzZSA9IHBzX3RvX3JmYmlf dGlja3ModC0+Y3NfcHVsc2Vfd2lkdGgsIGRpdik7Cj4gLQlpZiAoY3NfcHVsc2UgPiAweDNmKQo+ IC0JCXJldHVybiAtMTsKPiAtCj4gLQlsID0gIHdlY3ljOwo+IC0JbCB8PSByZWN5YyAgICA8PCA2 Owo+IC0JbCB8PSBjc19wdWxzZSA8PCAxMjsKPiAtCWwgfD0gYWN0aW0gICAgPDwgMjI7Cj4gLQo+ IC0JdC0+dGltWzFdID0gbDsKPiAtCj4gLQl0LT50aW1bMl0gPSBkaXYgLSAxOwo+IC0KPiAtCXQt PmNvbnZlcnRlZCA9IDE7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qIHh4eCBGSVgg bW9kdWxlIHNlbGVjdGlvbiBtaXNzaW5nICovCj4gLXN0YXRpYyBpbnQgcmZiaV9zZXR1cF90ZShl bnVtIG9tYXBfcmZiaV90ZV9tb2RlIG1vZGUsCj4gLQkJCSAgICAgdW5zaWduZWQgaHNfcHVsc2Vf dGltZSwgdW5zaWduZWQgdnNfcHVsc2VfdGltZSwKPiAtCQkJICAgICBpbnQgaHNfcG9sX2ludiwg aW50IHZzX3BvbF9pbnYsIGludCBleHRpZl9kaXYpCj4gLXsKPiAtCWludCBocywgdnM7Cj4gLQlp bnQgbWluOwo+IC0JdTMyIGw7Cj4gLQo+IC0JaHMgPSBwc190b19yZmJpX3RpY2tzKGhzX3B1bHNl X3RpbWUsIDEpOwo+IC0JdnMgPSBwc190b19yZmJpX3RpY2tzKHZzX3B1bHNlX3RpbWUsIDEpOwo+ IC0JaWYgKGhzIDwgMikKPiAtCQlyZXR1cm4gLUVET007Cj4gLQlpZiAobW9kZSA9PSBPTUFQX0RT U19SRkJJX1RFX01PREVfMikKPiAtCQltaW4gPSAyOwo+IC0JZWxzZSAvKiBPTUFQX0RTU19SRkJJ X1RFX01PREVfMSAqLwo+IC0JCW1pbiA9IDQ7Cj4gLQlpZiAodnMgPCBtaW4pCj4gLQkJcmV0dXJu IC1FRE9NOwo+IC0JaWYgKHZzID09IGhzKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JcmZiaS50 ZV9tb2RlID0gbW9kZTsKPiAtCURTU0RCRygic2V0dXBfdGU6IG1vZGUgJWQgaHMgJWQgdnMgJWQg aHNfaW52ICVkIHZzX2ludiAlZFxuIiwKPiAtCQltb2RlLCBocywgdnMsIGhzX3BvbF9pbnYsIHZz X3BvbF9pbnYpOwo+IC0KPiAtCXJmYmlfd3JpdGVfcmVnKFJGQklfSFNZTkNfV0lEVEgsIGhzKTsK PiAtCXJmYmlfd3JpdGVfcmVnKFJGQklfVlNZTkNfV0lEVEgsIHZzKTsKPiAtCj4gLQlsID0gcmZi aV9yZWFkX3JlZyhSRkJJX0NPTkZJRygwKSk7Cj4gLQlpZiAoaHNfcG9sX2ludikKPiAtCQlsICY9 IH4oMSA8PCAyMSk7Cj4gLQllbHNlCj4gLQkJbCB8PSAxIDw8IDIxOwo+IC0JaWYgKHZzX3BvbF9p bnYpCj4gLQkJbCAmPSB+KDEgPDwgMjApOwo+IC0JZWxzZQo+IC0JCWwgfD0gMSA8PCAyMDsKPiAt Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyogeHh4IEZJWCBtb2R1bGUgc2VsZWN0aW9uIG1p c3NpbmcgKi8KPiAtc3RhdGljIGludCByZmJpX2VuYWJsZV90ZShib29sIGVuYWJsZSwgdW5zaWdu ZWQgbGluZSkKPiAtewo+IC0JdTMyIGw7Cj4gLQo+IC0JRFNTREJHKCJ0ZSAlZCBsaW5lICVkIG1v ZGUgJWRcbiIsIGVuYWJsZSwgbGluZSwgcmZiaS50ZV9tb2RlKTsKPiAtCWlmIChsaW5lID4gKDEg PDwgMTEpIC0gMSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlsID0gcmZiaV9yZWFkX3Jl ZyhSRkJJX0NPTkZJRygwKSk7Cj4gLQlsICY9IH4oMHgzIDw8IDIpOwo+IC0JaWYgKGVuYWJsZSkg ewo+IC0JCXJmYmkudGVfZW5hYmxlZCA9IDE7Cj4gLQkJbCB8PSByZmJpLnRlX21vZGUgPDwgMjsK PiAtCX0gZWxzZQo+IC0JCXJmYmkudGVfZW5hYmxlZCA9IDA7Cj4gLQlyZmJpX3dyaXRlX3JlZyhS RkJJX0NPTkZJRygwKSwgbCk7Cj4gLQlyZmJpX3dyaXRlX3JlZyhSRkJJX0xJTkVfTlVNQkVSLCBs aW5lKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCByZmJpX2NvbmZp Z3VyZV9idXMoaW50IHJmYmlfbW9kdWxlLCBpbnQgYnBwLCBpbnQgbGluZXMpCj4gLXsKPiAtCXUz MiBsOwo+IC0JaW50IGN5Y2xlMSA9IDAsIGN5Y2xlMiA9IDAsIGN5Y2xlMyA9IDA7Cj4gLQllbnVt IG9tYXBfcmZiaV9jeWNsZWZvcm1hdCBjeWNsZWZvcm1hdDsKPiAtCWVudW0gb21hcF9yZmJpX2Rh dGF0eXBlIGRhdGF0eXBlOwo+IC0JZW51bSBvbWFwX3JmYmlfcGFyYWxsZWxtb2RlIHBhcmFsbGVs bW9kZTsKPiAtCj4gLQlzd2l0Y2ggKGJwcCkgewo+IC0JY2FzZSAxMjoKPiAtCQlkYXRhdHlwZSA9 IE9NQVBfRFNTX1JGQklfREFUQVRZUEVfMTI7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDE2Ogo+IC0J CWRhdGF0eXBlID0gT01BUF9EU1NfUkZCSV9EQVRBVFlQRV8xNjsKPiAtCQlicmVhazsKPiAtCWNh c2UgMTg6Cj4gLQkJZGF0YXR5cGUgPSBPTUFQX0RTU19SRkJJX0RBVEFUWVBFXzE4Owo+IC0JCWJy ZWFrOwo+IC0JY2FzZSAyNDoKPiAtCQlkYXRhdHlwZSA9IE9NQVBfRFNTX1JGQklfREFUQVRZUEVf MjQ7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCUJVRygpOwo+IC0JCXJldHVybiAxOwo+ IC0JfQo+IC0JcmZiaS5kYXRhdHlwZSA9IGRhdGF0eXBlOwo+IC0KPiAtCXN3aXRjaCAobGluZXMp IHsKPiAtCWNhc2UgODoKPiAtCQlwYXJhbGxlbG1vZGUgPSBPTUFQX0RTU19SRkJJX1BBUkFMTEVM TU9ERV84Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSA5Ogo+IC0JCXBhcmFsbGVsbW9kZSA9IE9NQVBf RFNTX1JGQklfUEFSQUxMRUxNT0RFXzk7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDEyOgo+IC0JCXBh cmFsbGVsbW9kZSA9IE9NQVBfRFNTX1JGQklfUEFSQUxMRUxNT0RFXzEyOwo+IC0JCWJyZWFrOwo+ IC0JY2FzZSAxNjoKPiAtCQlwYXJhbGxlbG1vZGUgPSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9E RV8xNjsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJQlVHKCk7Cj4gLQkJcmV0dXJuIDE7 Cj4gLQl9Cj4gLQlyZmJpLnBhcmFsbGVsbW9kZSA9IHBhcmFsbGVsbW9kZTsKPiAtCj4gLQlpZiAo KGJwcCAlIGxpbmVzKSA9PSAwKSB7Cj4gLQkJc3dpdGNoIChicHAgLyBsaW5lcykgewo+IC0JCWNh c2UgMToKPiAtCQkJY3ljbGVmb3JtYXQgPSBPTUFQX0RTU19SRkJJX0NZQ0xFRk9STUFUXzFfMTsK PiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSAyOgo+IC0JCQljeWNsZWZvcm1hdCA9IE9NQVBfRFNTX1JG QklfQ1lDTEVGT1JNQVRfMl8xOwo+IC0JCQlicmVhazsKPiAtCQljYXNlIDM6Cj4gLQkJCWN5Y2xl Zm9ybWF0ID0gT01BUF9EU1NfUkZCSV9DWUNMRUZPUk1BVF8zXzE7Cj4gLQkJCWJyZWFrOwo+IC0J CWRlZmF1bHQ6Cj4gLQkJCUJVRygpOwo+IC0JCQlyZXR1cm4gMTsKPiAtCQl9Cj4gLQl9IGVsc2Ug aWYgKCgyICogYnBwICUgbGluZXMpID09IDApIHsKPiAtCQlpZiAoKDIgKiBicHAgLyBsaW5lcykg PT0gMykKPiAtCQkJY3ljbGVmb3JtYXQgPSBPTUFQX0RTU19SRkJJX0NZQ0xFRk9STUFUXzNfMjsK PiAtCQllbHNlIHsKPiAtCQkJQlVHKCk7Cj4gLQkJCXJldHVybiAxOwo+IC0JCX0KPiAtCX0gZWxz ZSB7Cj4gLQkJQlVHKCk7Cj4gLQkJcmV0dXJuIDE7Cj4gLQl9Cj4gLQo+IC0Jc3dpdGNoIChjeWNs ZWZvcm1hdCkgewo+IC0JY2FzZSBPTUFQX0RTU19SRkJJX0NZQ0xFRk9STUFUXzFfMToKPiAtCQlj eWNsZTEgPSBsaW5lczsKPiAtCQlicmVhazsKPiAtCj4gLQljYXNlIE9NQVBfRFNTX1JGQklfQ1lD TEVGT1JNQVRfMl8xOgo+IC0JCWN5Y2xlMSA9IGxpbmVzOwo+IC0JCWN5Y2xlMiA9IGxpbmVzOwo+ IC0JCWJyZWFrOwo+IC0KPiAtCWNhc2UgT01BUF9EU1NfUkZCSV9DWUNMRUZPUk1BVF8zXzE6Cj4g LQkJY3ljbGUxID0gbGluZXM7Cj4gLQkJY3ljbGUyID0gbGluZXM7Cj4gLQkJY3ljbGUzID0gbGlu ZXM7Cj4gLQkJYnJlYWs7Cj4gLQo+IC0JY2FzZSBPTUFQX0RTU19SRkJJX0NZQ0xFRk9STUFUXzNf MjoKPiAtCQljeWNsZTEgPSBsaW5lczsKPiAtCQljeWNsZTIgPSAobGluZXMgLyAyKSB8ICgobGlu ZXMgLyAyKSA8PCAxNik7Cj4gLQkJY3ljbGUzID0gKGxpbmVzIDw8IDE2KTsKPiAtCQlicmVhazsK PiAtCX0KPiAtCj4gLQlSRUdfRkxEX01PRChSRkJJX0NPTlRST0wsIDAsIDMsIDIpOyAvKiBjbGVh ciBDUyAqLwo+IC0KPiAtCWwgPSAwOwo+IC0JbCB8PSBGTERfVkFMKHBhcmFsbGVsbW9kZSwgMSwg MCk7Cj4gLQlsIHw9IEZMRF9WQUwoMCwgMywgMik7CQkvKiBUUklHR0VSTU9ERTogSVRFICovCj4g LQlsIHw9IEZMRF9WQUwoMCwgNCwgNCk7CQkvKiBUSU1FR1JBTlVMQVJJVFkgKi8KPiAtCWwgfD0g RkxEX1ZBTChkYXRhdHlwZSwgNiwgNSk7Cj4gLQkvKiBsIHw9IEZMRF9WQUwoMiwgOCwgNyk7ICov CS8qIEw0Rk9STUFULCAycGl4L0w0ICovCj4gLQlsIHw9IEZMRF9WQUwoMCwgOCwgNyk7CS8qIEw0 Rk9STUFULCAxcGl4L0w0ICovCj4gLQlsIHw9IEZMRF9WQUwoY3ljbGVmb3JtYXQsIDEwLCA5KTsK PiAtCWwgfD0gRkxEX1ZBTCgwLCAxMiwgMTEpOwkvKiBVTlVTRURCSVRTICovCj4gLQlsIHw9IEZM RF9WQUwoMCwgMTYsIDE2KTsJLyogQTBQT0xBUklUWSAqLwo+IC0JbCB8PSBGTERfVkFMKDAsIDE3 LCAxNyk7CS8qIFJFUE9MQVJJVFkgKi8KPiAtCWwgfD0gRkxEX1ZBTCgwLCAxOCwgMTgpOwkvKiBX RVBPTEFSSVRZICovCj4gLQlsIHw9IEZMRF9WQUwoMCwgMTksIDE5KTsJLyogQ1NQT0xBUklUWSAq Lwo+IC0JbCB8PSBGTERfVkFMKDEsIDIwLCAyMCk7CS8qIFRFX1ZTWU5DX1BPTEFSSVRZICovCj4g LQlsIHw9IEZMRF9WQUwoMSwgMjEsIDIxKTsJLyogSFNZTkNQT0xBUklUWSAqLwo+IC0JcmZiaV93 cml0ZV9yZWcoUkZCSV9DT05GSUcocmZiaV9tb2R1bGUpLCBsKTsKPiAtCj4gLQlyZmJpX3dyaXRl X3JlZyhSRkJJX0RBVEFfQ1lDTEUxKHJmYmlfbW9kdWxlKSwgY3ljbGUxKTsKPiAtCXJmYmlfd3Jp dGVfcmVnKFJGQklfREFUQV9DWUNMRTIocmZiaV9tb2R1bGUpLCBjeWNsZTIpOwo+IC0JcmZiaV93 cml0ZV9yZWcoUkZCSV9EQVRBX0NZQ0xFMyhyZmJpX21vZHVsZSksIGN5Y2xlMyk7Cj4gLQo+IC0K PiAtCWwgPSByZmJpX3JlYWRfcmVnKFJGQklfQ09OVFJPTCk7Cj4gLQlsID0gRkxEX01PRChsLCBy ZmJpX21vZHVsZSsxLCAzLCAyKTsgLyogU2VsZWN0IENTeCAqLwo+IC0JbCA9IEZMRF9NT0QobCwg MCwgMSwgMSk7IC8qIGNsZWFyIGJ5cGFzcyAqLwo+IC0JcmZiaV93cml0ZV9yZWcoUkZCSV9DT05U Uk9MLCBsKTsKPiAtCj4gLQo+IC0JRFNTREJHKCJSRkJJIGNvbmZpZzogYnBwICVkLCBsaW5lcyAl ZCwgY3ljbGVzOiAweCV4IDB4JXggMHgleFxuIiwKPiAtCSAgICAgICBicHAsIGxpbmVzLCBjeWNs ZTEsIGN5Y2xlMiwgY3ljbGUzKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGlj IGludCByZmJpX2NvbmZpZ3VyZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCj4gLXsK PiAtCXJldHVybiByZmJpX2NvbmZpZ3VyZV9idXMoZHNzZGV2LT5waHkucmZiaS5jaGFubmVsLCBy ZmJpLnBpeGVsX3NpemUsCj4gLQkJCXJmYmkuZGF0YV9saW5lcyk7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgcmZiaV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCB2b2lkCj4g KCpjYWxsYmFjaykodm9pZCAqKSwgLQkJdm9pZCAqZGF0YSkKPiAtewo+IC0JcmV0dXJuIHJmYmlf dHJhbnNmZXJfYXJlYShkc3NkZXYsIGNhbGxiYWNrLCBkYXRhKTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgcmZiaV9zZXRfc2l6ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIHUxNiB3 LCB1MTYgaCkKPiAtewo+IC0JcmZiaS52bS5oYWN0aXZlID0gdzsKPiAtCXJmYmkudm0udmFjdGl2 ZSA9IGg7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJmYmlfc2V0X3BpeGVsX3NpemUoc3RydWN0 IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBpbnQKPiBwaXhlbF9zaXplKSAtewo+IC0JcmZiaS5w aXhlbF9zaXplID0gcGl4ZWxfc2l6ZTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcmZiaV9zZXRf ZGF0YV9saW5lcyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGludAo+IGRhdGFfbGlu ZXMpIC17Cj4gLQlyZmJpLmRhdGFfbGluZXMgPSBkYXRhX2xpbmVzOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCByZmJpX3NldF9pbnRlcmZhY2VfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNl ICpkc3NkZXYsCj4gLQkJc3RydWN0IHJmYmlfdGltaW5ncyAqdGltaW5ncykKPiAtewo+IC0JcmZi aS5pbnRmX3RpbWluZ3MgPSAqdGltaW5nczsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcmZiaV9k dW1wX3JlZ3Moc3RydWN0IHNlcV9maWxlICpzKQo+IC17Cj4gLSNkZWZpbmUgRFVNUFJFRyhyKSBz ZXFfcHJpbnRmKHMsICIlLTM1cyAlMDh4XG4iLCAjciwgcmZiaV9yZWFkX3JlZyhyKSkKPiAtCj4g LQlpZiAocmZiaV9ydW50aW1lX2dldCgpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlEVU1QUkVHKFJG QklfUkVWSVNJT04pOwo+IC0JRFVNUFJFRyhSRkJJX1NZU0NPTkZJRyk7Cj4gLQlEVU1QUkVHKFJG QklfU1lTU1RBVFVTKTsKPiAtCURVTVBSRUcoUkZCSV9DT05UUk9MKTsKPiAtCURVTVBSRUcoUkZC SV9QSVhFTF9DTlQpOwo+IC0JRFVNUFJFRyhSRkJJX0xJTkVfTlVNQkVSKTsKPiAtCURVTVBSRUco UkZCSV9DTUQpOwo+IC0JRFVNUFJFRyhSRkJJX1BBUkFNKTsKPiAtCURVTVBSRUcoUkZCSV9EQVRB KTsKPiAtCURVTVBSRUcoUkZCSV9SRUFEKTsKPiAtCURVTVBSRUcoUkZCSV9TVEFUVVMpOwo+IC0K PiAtCURVTVBSRUcoUkZCSV9DT05GSUcoMCkpOwo+IC0JRFVNUFJFRyhSRkJJX09OT0ZGX1RJTUUo MCkpOwo+IC0JRFVNUFJFRyhSRkJJX0NZQ0xFX1RJTUUoMCkpOwo+IC0JRFVNUFJFRyhSRkJJX0RB VEFfQ1lDTEUxKDApKTsKPiAtCURVTVBSRUcoUkZCSV9EQVRBX0NZQ0xFMigwKSk7Cj4gLQlEVU1Q UkVHKFJGQklfREFUQV9DWUNMRTMoMCkpOwo+IC0KPiAtCURVTVBSRUcoUkZCSV9DT05GSUcoMSkp Owo+IC0JRFVNUFJFRyhSRkJJX09OT0ZGX1RJTUUoMSkpOwo+IC0JRFVNUFJFRyhSRkJJX0NZQ0xF X1RJTUUoMSkpOwo+IC0JRFVNUFJFRyhSRkJJX0RBVEFfQ1lDTEUxKDEpKTsKPiAtCURVTVBSRUco UkZCSV9EQVRBX0NZQ0xFMigxKSk7Cj4gLQlEVU1QUkVHKFJGQklfREFUQV9DWUNMRTMoMSkpOwo+ IC0KPiAtCURVTVBSRUcoUkZCSV9WU1lOQ19XSURUSCk7Cj4gLQlEVU1QUkVHKFJGQklfSFNZTkNf V0lEVEgpOwo+IC0KPiAtCXJmYmlfcnVudGltZV9wdXQoKTsKPiAtI3VuZGVmIERVTVBSRUcKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQgcmZiaV9jb25maWdfbGNkX21hbmFnZXIoc3RydWN0IG9tYXBf ZHNzX2RldmljZSAqZHNzZGV2KQo+IC17Cj4gLQlzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIg Km1nciA9IHJmYmkub3V0cHV0Lm1hbmFnZXI7Cj4gLQlzdHJ1Y3QgZHNzX2xjZF9tZ3JfY29uZmln IG1ncl9jb25maWc7Cj4gLQo+IC0JbWdyX2NvbmZpZy5pb19wYWRfbW9kZSA9IERTU19JT19QQURf TU9ERV9SRkJJOwo+IC0KPiAtCW1ncl9jb25maWcuc3RhbGxtb2RlID0gdHJ1ZTsKPiAtCS8qIERv IHdlIG5lZWQgZmlmb2hhbmRjaGVjayBmb3IgUkZCST8gKi8KPiAtCW1ncl9jb25maWcuZmlmb2hh bmRjaGVjayA9IGZhbHNlOwo+IC0KPiAtCW1ncl9jb25maWcudmlkZW9fcG9ydF93aWR0aCA9IHJm YmkucGl4ZWxfc2l6ZTsKPiAtCW1ncl9jb25maWcubGNkZW5fc2lnX3BvbGFyaXR5ID0gMDsKPiAt Cj4gLQlkc3NfbWdyX3NldF9sY2RfY29uZmlnKG1nciwgJm1ncl9jb25maWcpOwo+IC0KPiAtCS8q Cj4gLQkgKiBTZXQgcmZiaS50aW1pbmdzIHdpdGggZGVmYXVsdCB2YWx1ZXMsIHRoZSBoYWN0aXZl IGFuZCB2YWN0aXZlIApmaWVsZHMKPiAtCSAqIGFyZSBleHBlY3RlZCB0byBiZSBhbHJlYWR5IGNv bmZpZ3VyZWQgYnkgdGhlIHBhbmVsIGRyaXZlciB2aWEKPiAtCSAqIG9tYXBkc3NfcmZiaV9zZXRf c2l6ZSgpCj4gLQkgKi8KPiAtCXJmYmkudm0uaHN5bmNfbGVuID0gMTsKPiAtCXJmYmkudm0uaGZy b250X3BvcmNoID0gMTsKPiAtCXJmYmkudm0uaGJhY2tfcG9yY2ggPSAxOwo+IC0JcmZiaS52bS52 c3luY19sZW4gPSAxOwo+IC0JcmZiaS52bS52ZnJvbnRfcG9yY2ggPSAwOwo+IC0JcmZiaS52bS52 YmFja19wb3JjaCA9IDA7Cj4gLQo+IC0JcmZiaS52bS5mbGFncyAmPSB+RElTUExBWV9GTEFHU19J TlRFUkxBQ0VEOwo+IC0JcmZiaS52bS5mbGFncyAmPSB+RElTUExBWV9GTEFHU19IU1lOQ19MT1c7 Cj4gLQlyZmJpLnZtLmZsYWdzIHw9IERJU1BMQVlfRkxBR1NfSFNZTkNfSElHSDsKPiAtCXJmYmku dm0uZmxhZ3MgJj0gfkRJU1BMQVlfRkxBR1NfVlNZTkNfTE9XOwo+IC0JcmZiaS52bS5mbGFncyB8 PSBESVNQTEFZX0ZMQUdTX1ZTWU5DX0hJR0g7Cj4gLQlyZmJpLnZtLmZsYWdzICY9IH5ESVNQTEFZ X0ZMQUdTX1BJWERBVEFfTkVHRURHRTsKPiAtCXJmYmkudm0uZmxhZ3MgfD0gRElTUExBWV9GTEFH U19QSVhEQVRBX1BPU0VER0U7Cj4gLQlyZmJpLnZtLmZsYWdzICY9IH5ESVNQTEFZX0ZMQUdTX0RF X0xPVzsKPiAtCXJmYmkudm0uZmxhZ3MgfD0gRElTUExBWV9GTEFHU19ERV9ISUdIOwo+IC0JcmZi aS52bS5mbGFncyAmPSB+RElTUExBWV9GTEFHU19TWU5DX1BPU0VER0U7Cj4gLQlyZmJpLnZtLmZs YWdzIHw9IERJU1BMQVlfRkxBR1NfU1lOQ19ORUdFREdFOwo+IC0KPiAtCWRzc19tZ3Jfc2V0X3Rp bWluZ3MobWdyLCAmcmZiaS52bSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcmZiaV9kaXNwbGF5 X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCj4gLXsKPiAtCXN0cnVjdCBv bWFwX2Rzc19kZXZpY2UgKm91dCA9ICZyZmJpLm91dHB1dDsKPiAtCWludCByOwo+IC0KPiAtCWlm ICghb3V0LT5kaXNwY19jaGFubmVsX2Nvbm5lY3RlZCkgewo+IC0JCURTU0VSUigiZmFpbGVkIHRv IGVuYWJsZSBkaXNwbGF5OiBubyBvdXRwdXQvbWFuYWdlclxuIik7Cj4gLQkJcmV0dXJuIC1FTk9E RVY7Cj4gLQl9Cj4gLQo+IC0JciA9IHJmYmlfcnVudGltZV9nZXQoKTsKPiAtCWlmIChyKQo+IC0J CXJldHVybiByOwo+IC0KPiAtCXIgPSBkc3NfbWdyX3JlZ2lzdGVyX2ZyYW1lZG9uZV9oYW5kbGVy KG91dC0+bWFuYWdlciwKPiAtCQkJZnJhbWVkb25lX2NhbGxiYWNrLCBOVUxMKTsKPiAtCWlmIChy KSB7Cj4gLQkJRFNTRVJSKCJjYW4ndCBnZXQgRlJBTUVET05FIGlycVxuIik7Cj4gLQkJZ290byBl cnIxOwo+IC0JfQo+IC0KPiAtCXJmYmlfY29uZmlnX2xjZF9tYW5hZ2VyKGRzc2Rldik7Cj4gLQo+ IC0JcmZiaV9jb25maWd1cmVfYnVzKGRzc2Rldi0+cGh5LnJmYmkuY2hhbm5lbCwgcmZiaS5waXhl bF9zaXplLAo+IC0JCQlyZmJpLmRhdGFfbGluZXMpOwo+IC0KPiAtCXJmYmlfc2V0X3RpbWluZ3Mo ZHNzZGV2LT5waHkucmZiaS5jaGFubmVsLCAmcmZiaS5pbnRmX3RpbWluZ3MpOwo+IC0KPiAtCXJl dHVybiAwOwo+IC1lcnIxOgo+IC0JcmZiaV9ydW50aW1lX3B1dCgpOwo+IC0JcmV0dXJuIHI7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJmYmlfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rz c19kZXZpY2UgKmRzc2RldikKPiAtewo+IC0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqb3V0ID0g JnJmYmkub3V0cHV0Owo+IC0KPiAtCWRzc19tZ3JfdW5yZWdpc3Rlcl9mcmFtZWRvbmVfaGFuZGxl cihvdXQtPm1hbmFnZXIsCj4gLQkJCWZyYW1lZG9uZV9jYWxsYmFjaywgTlVMTCk7Cj4gLQo+IC0J cmZiaV9ydW50aW1lX3B1dCgpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHJmYmlfaW5pdF9kaXNw bGF5KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKPiAtewo+IC0JcmZiaS5kc3NkZXZb ZHNzZGV2LT5waHkucmZiaS5jaGFubmVsXSA9IGRzc2RldjsKPiAtCXJldHVybiAwOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCByZmJpX2luaXRfb3V0cHV0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gLXsKPiAtCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKm91dCA9ICZyZmJpLm91dHB1 dDsKPiAtCj4gLQlvdXQtPmRldiA9ICZwZGV2LT5kZXY7Cj4gLQlvdXQtPmlkID0gT01BUF9EU1Nf T1VUUFVUX0RCSTsKPiAtCW91dC0+b3V0cHV0X3R5cGUgPSBPTUFQX0RJU1BMQVlfVFlQRV9EQkk7 Cj4gLQlvdXQtPm5hbWUgPSAicmZiaS4wIjsKPiAtCW91dC0+ZGlzcGNfY2hhbm5lbCA9IE9NQVBf RFNTX0NIQU5ORUxfTENEOwo+IC0Jb3V0LT5vd25lciA9IFRISVNfTU9EVUxFOwo+IC0KPiAtCW9t YXBkc3NfcmVnaXN0ZXJfb3V0cHV0KG91dCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJmYmlf dW5pbml0X291dHB1dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+IC17Cj4gLQlzdHJ1 Y3Qgb21hcF9kc3NfZGV2aWNlICpvdXQgPSAmcmZiaS5vdXRwdXQ7Cj4gLQo+IC0Jb21hcGRzc191 bnJlZ2lzdGVyX291dHB1dChvdXQpOwo+IC19Cj4gLQo+IC0vKiBSRkJJIEhXIElQIGluaXRpYWxp c2F0aW9uICovCj4gLXN0YXRpYyBpbnQgcmZiaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQo+IC17Cj4gLQlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Cj4gLQl1MzIgcmV2Owo+IC0J c3RydWN0IHJlc291cmNlICpyZmJpX21lbTsKPiAtCXN0cnVjdCBjbGsgKmNsazsKPiAtCWludCBy Owo+IC0KPiAtCXJmYmkucGRldiA9IHBkZXY7Cj4gLQo+IC0Jc2VtYV9pbml0KCZyZmJpLmJ1c19s b2NrLCAxKTsKPiAtCj4gLQlyZmJpX21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShyZmJpLnBk ZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiAtCXJmYmkuYmFzZSA9IGRldm1faW9yZW1hcF9yZXNv dXJjZSgmcGRldi0+ZGV2LCByZmJpX21lbSk7Cj4gLQlpZiAoSVNfRVJSKHJmYmkuYmFzZSkpCj4g LQkJcmV0dXJuIFBUUl9FUlIocmZiaS5iYXNlKTsKPiAtCj4gLQljbGsgPSBjbGtfZ2V0KCZwZGV2 LT5kZXYsICJpY2siKTsKPiAtCWlmIChJU19FUlIoY2xrKSkgewo+IC0JCURTU0VSUigiY2FuJ3Qg Z2V0IGlja1xuIik7Cj4gLQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKPiAtCX0KPiAtCj4gLQlyZmJp Lmw0X2toeiA9IGNsa19nZXRfcmF0ZShjbGspIC8gMTAwMDsKPiAtCj4gLQljbGtfcHV0KGNsayk7 Cj4gLQo+IC0JcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Cj4gLQo+IC0JciA9IHJmYmlf cnVudGltZV9nZXQoKTsKPiAtCWlmIChyKQo+IC0JCWdvdG8gZXJyX3J1bnRpbWVfZ2V0Owo+IC0K PiAtCW1zbGVlcCgxMCk7Cj4gLQo+IC0JcmV2ID0gcmZiaV9yZWFkX3JlZyhSRkJJX1JFVklTSU9O KTsKPiAtCWRldl9kYmcoJnBkZXYtPmRldiwgIk9NQVAgUkZCSSByZXYgJWQuJWRcbiIsCj4gLQkg ICAgICAgRkxEX0dFVChyZXYsIDcsIDQpLCBGTERfR0VUKHJldiwgMywgMCkpOwo+IC0KPiAtCXJm YmlfcnVudGltZV9wdXQoKTsKPiAtCj4gLQlkc3NfZGVidWdmc19jcmVhdGVfZmlsZSgicmZiaSIs IHJmYmlfZHVtcF9yZWdzKTsKPiAtCj4gLQlyZmJpX2luaXRfb3V0cHV0KHBkZXYpOwo+IC0KPiAt CXJldHVybiAwOwo+IC0KPiAtZXJyX3J1bnRpbWVfZ2V0Ogo+IC0JcG1fcnVudGltZV9kaXNhYmxl KCZwZGV2LT5kZXYpOwo+IC0JcmV0dXJuIHI7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJmYmlf dW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkCj4g KmRhdGEpIC17Cj4gLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1f ZGV2aWNlKGRldik7Cj4gLQo+IC0JcmZiaV91bmluaXRfb3V0cHV0KHBkZXYpOwo+IC0KPiAtCXBt X3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIHJmYmlfY29tcG9uZW50X29wcyA9 IHsKPiAtCS5iaW5kCT0gcmZiaV9iaW5kLAo+IC0JLnVuYmluZAk9IHJmYmlfdW5iaW5kLAo+IC19 Owo+IC0KPiAtc3RhdGljIGludCByZmJpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gLXsKPiAtCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZyZmJpX2NvbXBv bmVudF9vcHMpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHJmYmlfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gLXsKPiAtCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJnJm YmlfY29tcG9uZW50X29wcyk7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBy ZmJpX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gLXsKPiAtCWRpc3BjX3J1 bnRpbWVfcHV0KCk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcmZi aV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gLXsKPiAtCWludCByOwo+IC0K PiAtCXIgPSBkaXNwY19ydW50aW1lX2dldCgpOwo+IC0JaWYgKHIgPCAwKQo+IC0JCXJldHVybiBy Owo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9w bV9vcHMgcmZiaV9wbV9vcHMgPSB7Cj4gLQkucnVudGltZV9zdXNwZW5kID0gcmZiaV9ydW50aW1l X3N1c3BlbmQsCj4gLQkucnVudGltZV9yZXN1bWUgPSByZmJpX3J1bnRpbWVfcmVzdW1lLAo+IC19 Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9yZmJpaHdfZHJpdmVy ID0gewo+IC0JLnByb2JlCQk9IHJmYmlfcHJvYmUsCj4gLQkucmVtb3ZlICAgICAgICAgPSByZmJp X3JlbW92ZSwKPiAtCS5kcml2ZXIgICAgICAgICA9IHsKPiAtCQkubmFtZSAgID0gIm9tYXBkc3Nf cmZiaSIsCj4gLQkJLnBtCT0gJnJmYmlfcG1fb3BzLAo+IC0JCS5zdXBwcmVzc19iaW5kX2F0dHJz ID0gdHJ1ZSwKPiAtCX0sCj4gLX07Cj4gLQo+IC1pbnQgX19pbml0IHJmYmlfaW5pdF9wbGF0Zm9y bV9kcml2ZXIodm9pZCkKPiAtewo+IC0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigm b21hcF9yZmJpaHdfZHJpdmVyKTsKPiAtfQo+IC0KPiAtdm9pZCByZmJpX3VuaW5pdF9wbGF0Zm9y bV9kcml2ZXIodm9pZCkKPiAtewo+IC0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBf cmZiaWh3X2RyaXZlcik7Cj4gLX0KCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==