From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH 13/15] drm/i915/tv: Generate better pipe timings for TV encoder Date: Wed, 23 Jan 2019 12:30:30 +0200 Message-ID: <20190123103030.GC17259@ideak-desk.fi.intel.com> References: <20181112170000.27531-1-ville.syrjala@linux.intel.com> <20181112170000.27531-15-ville.syrjala@linux.intel.com> <20190122172224.GP5527@ideak-desk.fi.intel.com> <20190122173455.GY20097@intel.com> Reply-To: imre.deak@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190122173455.GY20097@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBKYW4gMjIsIDIwMTkgYXQgMDc6MzQ6NTVQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFR1ZSwgSmFuIDIyLCAyMDE5IGF0IDA3OjIyOjI0UE0gKzAyMDAsIEltcmUg RGVhayB3cm90ZToKPiA+IE9uIE1vbiwgTm92IDEyLCAyMDE4IGF0IDA2OjU5OjU4UE0gKzAyMDAs IFZpbGxlIFN5cmphbGEgd3JvdGU6Cj4gPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUu c3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiA+IAo+ID4gPiBUbyBtYWtlIHZibGFuayB0aW1l c3RhbXBzIHdvcmsgYmV0dGVyIHdpdGggdGhlIFRWIGVuY29kZXIgbGV0J3MKPiA+ID4gc2NhbGUg dGhlIHBpcGUgdGltaW5ncyBzdWNoIHRoYXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZQo+ ID4gPiBUViBhY3RpdmUgYW5kIFRWIGJsYW5raW5nIHBlcmlvZHMgaXMgbWlycm9yZWQgaW4gdGhl Cj4gPiA+IGNvcnJlc3BvbmRpbmcgcGlwZSB0aW1pbmdzLgo+ID4gPiAKPiA+ID4gTm90ZSB0aGF0 IGluIHJlYWxpdHkgdGhlIHBpcGUgcnVucyBhdCBhIGZhc3RlciBzcGVlZCBkdXJpbmcgdGhlCj4g PiA+IFRWIHZibGFuaywgYW5kIGNvcnJlc3BvbmRpZ2x5IHRoZXJlIGFyZSBwZXJpb2RzIHdoZW4g dGhlIHBpcGUKPiA+ID4gaXMgZW5pdHJlbHkgc3RvcHBlZC4gV2UgcHJldGVuZCB0aGF0IHRoaXMg aXNuJ3QgdGhlIGNhc2UgYW5kCj4gPiA+IGFzIHN1Y2ggd2UgaW5jdXIgc29tZSBlcnJvciBpbiB0 aGUgdmJsYW5rIHRpbWVzdGFtcHMgZHVyaW5nCj4gPiA+IHRoZSBUViB2YmxhbmsuIEZ1cnRoZXIg ZXhwbGFuYXRpb24gb2YgdGhlIGlzc3VlcyBpbiBhIGJpZwo+ID4gPiBjb21tZW50IGluIHRoZSBj b2RlLgo+ID4gPiAKPiA+ID4gVGhpcyBtYWtlcyB0aGUgdmJsYW5rIHRpbWVzdGFtcHMgZ29vZCBl bm91Z2ggdG8gbWFrZQo+ID4gPiBpOTY1Z20gKHdoaWNoIGRvZXNuJ3QgaGF2ZSBhIHdvcmtpbmcg ZnJhbWUgY291bnRlciB3aXRoCj4gPiA+IHRoZSBUViBlbmNvZGVyKSByZXBvcnQgY29ycmVjdCBm cmFtZSBudW1iZXJzLiBQcmV2aW91c2x5Cj4gPiA+IHlvdSBjb3VsZCBnZXQgYWxsIGtpbmRzIG9m IG5vbnNlbnNlIHdoaWNoIHJlc3VsdGVkIGluCj4gPiA+IGVnLiBnbHhnZWFycyByZXBvcnRpbmcg dGhhdCBpdCdzIHJ1bm5pbmcgYXQgdHdpY2UgdGhlCj4gPiA+IGFjdHVhbCBmcmFtZXJhdGUgaW4g bW9zdCBjYXNlcy4KPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaCB8ICAgMSArCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF90di5jIHwgMzIyICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCj4gPiA+ ICAyIGZpbGVzIGNoYW5nZWQsIDI3OCBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKPiA+ ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiBpbmRleCBmZTRiOTEzZTQ2YWMu LjEwODEzYWU3YmVlNyAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gPiA+ IEBAIC00ODQ4LDYgKzQ4NDgsNyBAQCBlbnVtIHsKPiA+ID4gICMgZGVmaW5lIFRWX09WRVJTQU1Q TEVfTk9ORQkJKDIgPDwgMTgpCj4gPiA+ICAvKiBTZWxlY3RzIDh4IG92ZXJzYW1wbGluZyAqLwo+ ID4gPiAgIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV84WAkJKDMgPDwgMTgpCj4gPiA+ICsjIGRlZmlu ZSBUVl9PVkVSU0FNUExFX01BU0sJCSgzIDw8IDE4KQo+ID4gPiAgLyogU2VsZWN0cyBwcm9ncmVz c2l2ZSBtb2RlIHJhdGhlciB0aGFuIGludGVybGFjZWQgKi8KPiA+ID4gICMgZGVmaW5lIFRWX1BS T0dSRVNTSVZFCQkJKDEgPDwgMTcpCj4gPiA+ICAvKiBTZXRzIHRoZSBjb2xvcmJ1cnN0IHRvIFBB TCBtb2RlLiAgUmVxdWlyZWQgZm9yIG5vbi1NIFBBTCBtb2Rlcy4gKi8KPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF90di5jCj4gPiA+IGluZGV4IDIxNjUyNWRkMTQ0YS4uNzUxMjZmY2U2NTVkIDEwMDY0 NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCj4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKPiA+ID4gQEAgLTM0MCw3ICszNDAsNiBA QCBzdHJ1Y3QgdHZfbW9kZSB7Cj4gPiA+ICAJY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyAqY29t cG9zaXRlX2xldmVscywgKnN2aWRlb19sZXZlbHM7Cj4gPiA+ICAJY29uc3Qgc3RydWN0IGNvbG9y X2NvbnZlcnNpb24gKmNvbXBvc2l0ZV9jb2xvciwgKnN2aWRlb19jb2xvcjsKPiA+ID4gIAljb25z dCB1MzIgKmZpbHRlcl90YWJsZTsKPiA+ID4gLQl1MTYgbWF4X3NyY3c7Cj4gPiA+ICB9Owo+ID4g PiAgCj4gPiA+ICAKPiA+ID4gQEAgLTcyOSw3ICs3MjgsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IHR2X21vZGUgdHZfbW9kZXNbXSA9IHsKPiA+ID4gIAkJLmJ1cnN0X2VuYSAgICAgID0gZmFsc2Us Cj4gPiA+ICAKPiA+ID4gIAkJLmZpbHRlcl90YWJsZSA9IGZpbHRlcl90YWJsZSwKPiA+ID4gLQkJ Lm1heF9zcmN3ID0gODAwCj4gPiA+ICAJfSwKPiA+ID4gIAl7Cj4gPiA+ICAJCS5uYW1lICAgICAg ID0gIjEwODBpQDUwSHoiLAo+ID4gPiBAQCAtOTQ3LDEzICs5NDUsMTgzIEBAIGludGVsX3R2X21v ZGVfdmRpc3BsYXkoY29uc3Qgc3RydWN0IHR2X21vZGUgKnR2X21vZGUpCj4gPiA+ICAJCXJldHVy biAyICogKHR2X21vZGUtPm5icl9lbmQgKyAxKTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiArc3Rh dGljIHZvaWQKPiA+ID4gK2ludGVsX3R2X21vZGVfdG9fbW9kZShzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwKPiA+ID4gKwkJICAgICAgY29uc3Qgc3RydWN0IHR2X21vZGUgKnR2X21vZGUp Cj4gPiA+ICt7Cj4gPiA+ICsJbW9kZS0+Y2xvY2sgPSB0dl9tb2RlLT5jbG9jayAvCj4gPiA+ICsJ CSh0dl9tb2RlLT5vdmVyc2FtcGxlID4+ICF0dl9tb2RlLT5wcm9ncmVzc2l2ZSk7Cj4gPiA+ICsK PiA+ID4gKwkvKgo+ID4gPiArCSAqIHR2X21vZGUgaG9yaXpvbnRhbCB0aW1pbmdzOgo+ID4gPiAr CSAqCj4gPiA+ICsJICogaHN5bmNfZW5kCj4gPiA+ICsJICogICAgfCBoYmxhbmtfZW5kCj4gPiA+ ICsJICogICAgfCAgICB8IGhibGFua19zdGFydAo+ID4gPiArCSAqICAgIHwgICAgfCAgICAgICB8 IGh0b3RhbAo+ID4gPiArCSAqICAgIHwgICAgIF9fX19fX18gICAgfAo+ID4gPiArCSAqICAgICBf X19fLyAgICAgICBcX19fCj4gPiA+ICsJICogXF9fLyAgICAgICAgICAgICAgICBcCj4gPiA+ICsJ ICovCj4gPiA+ICsJbW9kZS0+aGRpc3BsYXkgPQo+ID4gPiArCQl0dl9tb2RlLT5oYmxhbmtfc3Rh cnQgLSB0dl9tb2RlLT5oYmxhbmtfZW5kOwo+ID4gPiArCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9k ZS0+aGRpc3BsYXkgKwo+ID4gPiArCQl0dl9tb2RlLT5odG90YWwgLSB0dl9tb2RlLT5oYmxhbmtf c3RhcnQ7Cj4gPiA+ICsJbW9kZS0+aHN5bmNfZW5kID0gbW9kZS0+aHN5bmNfc3RhcnQgKwo+ID4g PiArCQl0dl9tb2RlLT5oc3luY19lbmQ7Cj4gPiA+ICsJbW9kZS0+aHRvdGFsID0gdHZfbW9kZS0+ aHRvdGFsICsgMTsKPiA+ID4gKwo+ID4gPiArCS8qCj4gPiA+ICsJICogdHZfbW9kZSB2ZXJ0aWNh bCB0aW1pbmdzOgo+ID4gPiArCSAqCj4gPiA+ICsJICogdnN5bmNfc3RhcnQKPiA+ID4gKwkgKiAg ICB8IHZzeW5jX2VuZAo+ID4gPiArCSAqICAgIHwgIHwgdmlfZW5kIG5icl9lbmQKPiA+ID4gKwkg KiAgICB8ICB8ICAgIHwgICAgICAgfAo+ID4gPiArCSAqICAgIHwgIHwgICAgIF9fX19fX18KPiA+ ID4gKwkgKiBcX18gICAgX19fXy8gICAgICAgXAo+ID4gPiArCSAqICAgIFxfXy8KPiA+ID4gKwkg Ki8KPiA+ID4gKwltb2RlLT52ZGlzcGxheSA9IGludGVsX3R2X21vZGVfdmRpc3BsYXkodHZfbW9k ZSk7Cj4gPiA+ICsJaWYgKHR2X21vZGUtPnByb2dyZXNzaXZlKSB7Cj4gPiA+ICsJCW1vZGUtPnZz eW5jX3N0YXJ0ID0gbW9kZS0+dmRpc3BsYXkgKwo+ID4gPiArCQkJdHZfbW9kZS0+dnN5bmNfc3Rh cnRfZjEgKyAxOwo+ID4gPiArCQltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCAr Cj4gPiA+ICsJCQl0dl9tb2RlLT52c3luY19sZW47Cj4gPiA+ICsJCW1vZGUtPnZ0b3RhbCA9IG1v ZGUtPnZkaXNwbGF5ICsKPiA+ID4gKwkJCXR2X21vZGUtPnZpX2VuZF9mMSArIDE7Cj4gPiA+ICsJ fSBlbHNlIHsKPiA+ID4gKwkJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSArCj4g PiA+ICsJCQl0dl9tb2RlLT52c3luY19zdGFydF9mMSArIDEgKwo+ID4gPiArCQkJdHZfbW9kZS0+ dnN5bmNfc3RhcnRfZjIgKyAxOwo+ID4gPiArCQltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3lu Y19zdGFydCArCj4gPiA+ICsJCQkyICogdHZfbW9kZS0+dnN5bmNfbGVuOwo+ID4gPiArCQltb2Rl LT52dG90YWwgPSBtb2RlLT52ZGlzcGxheSArCj4gPiA+ICsJCQl0dl9tb2RlLT52aV9lbmRfZjEg KyAxICsKPiA+ID4gKwkJCXR2X21vZGUtPnZpX2VuZF9mMiArIDE7Cj4gPiA+ICsJfQo+ID4gPiAr Cj4gPiA+ICsJLyogVFYgaGFzIGl0J3Mgb3duIG5vdGlvbiBvZiBzeW5jIGFuZCBvdGhlciBtb2Rl IGZsYWdzLCBzbyBjbGVhciB0aGVtLiAqLwo+ID4gPiArCW1vZGUtPmZsYWdzID0gMDsKPiA+ID4g Kwo+ID4gPiArCW1vZGUtPnZyZWZyZXNoID0gMDsKPiA+IAo+ID4gUmVkdW5kYW50IGxpbmUuCj4g Cj4gZHJtX21vZGVfdnJlZnJlc2goKSB3b24ndCByZWNvbXB1dGUgdGhlIHZhbHVlIGlmIGl0J3Mg YWxyZWFkeQo+IHNldC4gU28gdW5sZXNzIHdlIGNsZWFyIGl0IGZpcnN0IHRoaXMgd291bGQgZWZm ZWN0aXZlbHkgYmVjb21lCj4gJ21vZGUtPnZyZWZyZXNoID0gbW9kZS0+dnJlZnJlc2gnLgoKT29w cywgY29ycmVjdC4KCj4gCj4gVGhlIHdob2xlIG1vZGUtPnZyZWZlc2ggc3RvcnkgaXMgYSBiaXQg c2FkLCBhbmQgc29tZW9uZSBzaG91bGQKPiByZWFsbHkgcmV3b3JrIGhvdyBpdCBhbGwgd29ya3Mu CgpZZWEsIHdvdWxkIGJlIG5pY2UuCgo+IAo+ID4gCj4gPiA+ICsJbW9kZS0+dnJlZnJlc2ggPSBk cm1fbW9kZV92cmVmcmVzaChtb2RlKTsKPiA+ID4gKwo+ID4gPiArCXNucHJpbnRmKG1vZGUtPm5h bWUsIHNpemVvZihtb2RlLT5uYW1lKSwKPiA+ID4gKwkJICIlZHglZCVjICglcykiLAo+ID4gPiAr CQkgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAo+ID4gPiArCQkgdHZfbW9kZS0+cHJv Z3Jlc3NpdmUgPyAncCcgOiAnaScsCj4gPiA+ICsJCSB0dl9tb2RlLT5uYW1lKTsKPiA+ID4gK30K PiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgaW50ZWxfdHZfc2NhbGVfbW9kZV9ob3JpeihzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiA+ID4gKwkJCQkgICAgICBpbnQgaGRpc3BsYXks IGludCBsZWZ0X21hcmdpbiwKPiA+ID4gKwkJCQkgICAgICBpbnQgcmlnaHRfbWFyZ2luKQo+ID4g PiArewo+ID4gPiArCWludCBoc3luY19zdGFydCA9IG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+ aGRpc3BsYXkgKyByaWdodF9tYXJnaW47Cj4gPiA+ICsJaW50IGhzeW5jX2VuZCA9IG1vZGUtPmhz eW5jX2VuZCAtIG1vZGUtPmhkaXNwbGF5ICsgcmlnaHRfbWFyZ2luOwo+ID4gPiArCWludCBuZXdf aHRvdGFsID0gbW9kZS0+aHRvdGFsICogaGRpc3BsYXkgLwo+ID4gPiArCQkobW9kZS0+aGRpc3Bs YXkgLSBsZWZ0X21hcmdpbiAtIHJpZ2h0X21hcmdpbik7Cj4gPiA+ICsKPiA+ID4gKwltb2RlLT5j bG9jayA9IG1vZGUtPmNsb2NrICogbmV3X2h0b3RhbCAvIG1vZGUtPmh0b3RhbDsKPiA+ID4gKwo+ ID4gPiArCW1vZGUtPmhkaXNwbGF5ID0gaGRpc3BsYXk7Cj4gPiA+ICsJbW9kZS0+aHN5bmNfc3Rh cnQgPSBoZGlzcGxheSArIGhzeW5jX3N0YXJ0ICogbmV3X2h0b3RhbCAvIG1vZGUtPmh0b3RhbDsK PiA+ID4gKwltb2RlLT5oc3luY19lbmQgPSBoZGlzcGxheSArIGhzeW5jX2VuZCAqIG5ld19odG90 YWwgLyBtb2RlLT5odG90YWw7Cj4gPiA+ICsJbW9kZS0+aHRvdGFsID0gbmV3X2h0b3RhbDsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgaW50ZWxfdHZfc2NhbGVfbW9kZV92ZXJ0 KHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ID4gPiArCQkJCSAgICAgaW50IHZkaXNw bGF5LCBpbnQgdG9wX21hcmdpbiwKPiA+ID4gKwkJCQkgICAgIGludCBib3R0b21fbWFyZ2luKQo+ ID4gPiArewo+ID4gPiArCWludCB2c3luY19zdGFydCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9k ZS0+dmRpc3BsYXkgKyBib3R0b21fbWFyZ2luOwo+ID4gPiArCWludCB2c3luY19lbmQgPSBtb2Rl LT52c3luY19lbmQgLSBtb2RlLT52ZGlzcGxheSArIGJvdHRvbV9tYXJnaW47Cj4gPiA+ICsJaW50 IG5ld192dG90YWwgPSBtb2RlLT52dG90YWwgKiB2ZGlzcGxheSAvCj4gPiA+ICsJCShtb2RlLT52 ZGlzcGxheSAtIHRvcF9tYXJnaW4gLSBib3R0b21fbWFyZ2luKTsKPiA+ID4gKwo+ID4gPiArCW1v ZGUtPmNsb2NrID0gbW9kZS0+Y2xvY2sgKiBuZXdfdnRvdGFsIC8gbW9kZS0+dnRvdGFsOwo+ID4g PiArCj4gPiA+ICsJbW9kZS0+dmRpc3BsYXkgPSB2ZGlzcGxheTsKPiA+ID4gKwltb2RlLT52c3lu Y19zdGFydCA9IHZkaXNwbGF5ICsgdnN5bmNfc3RhcnQgKiBuZXdfdnRvdGFsIC8gbW9kZS0+dnRv dGFsOwo+ID4gPiArCW1vZGUtPnZzeW5jX2VuZCA9IHZkaXNwbGF5ICsgdnN5bmNfZW5kICogbmV3 X3Z0b3RhbCAvIG1vZGUtPnZ0b3RhbDsKPiA+ID4gKwltb2RlLT52dG90YWwgPSBuZXdfdnRvdGFs Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICBzdGF0aWMgdm9pZAo+ID4gPiAgaW50ZWxfdHZfZ2V0 X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gIAkJICAgIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiA+ID4gIHsKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsK PiA+ID4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9Cj4gPiA+ICsJ CSZwaXBlX2NvbmZpZy0+YmFzZS5hZGp1c3RlZF9tb2RlOwo+ID4gPiArCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlIG1vZGUgPSB7fTsKPiA+ID4gKwl1MzIgdHZfY3RsLCBoY3RsMSwgaGN0bDMsIHZj dGwxLCB2Y3RsMiwgdG1wOwo+ID4gPiArCXN0cnVjdCB0dl9tb2RlIHR2X21vZGUgPSB7fTsKPiA+ ID4gKwlpbnQgaGRpc3BsYXkgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5Owo+ID4gPiAr CWludCB2ZGlzcGxheSA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXk7Cj4gPiA+ICsJaW50 IHhzaXplLCB5c2l6ZSwgeHBvcywgeXBvczsKPiA+ID4gKwo+ID4gPiAgCXBpcGVfY29uZmlnLT5v dXRwdXRfdHlwZXMgfD0gQklUKElOVEVMX09VVFBVVF9UVk9VVCk7Cj4gPiA+ICAKPiA+ID4gLQlw aXBlX2NvbmZpZy0+YmFzZS5hZGp1c3RlZF9tb2RlLmNydGNfY2xvY2sgPSBwaXBlX2NvbmZpZy0+ cG9ydF9jbG9jazsKPiA+ID4gKwl0dl9jdGwgPSBJOTE1X1JFQUQoVFZfQ1RMKTsKPiA+ID4gKwlo Y3RsMSA9IEk5MTVfUkVBRChUVl9IX0NUTF8xKTsKPiA+ID4gKwloY3RsMyA9IEk5MTVfUkVBRChU Vl9IX0NUTF8zKTsKPiA+ID4gKwl2Y3RsMSA9IEk5MTVfUkVBRChUVl9WX0NUTF8xKTsKPiA+ID4g Kwl2Y3RsMiA9IEk5MTVfUkVBRChUVl9WX0NUTF8yKTsKPiA+ID4gKwo+ID4gPiArCXR2X21vZGUu aHRvdGFsID0gKGhjdGwxICYgVFZfSFRPVEFMX01BU0spID4+IFRWX0hUT1RBTF9TSElGVDsKPiA+ ID4gKwl0dl9tb2RlLmhzeW5jX2VuZCA9IChoY3RsMSAmIFRWX0hTWU5DX0VORF9NQVNLKSA+PiBU Vl9IU1lOQ19FTkRfU0hJRlQ7Cj4gPiA+ICsKPiA+ID4gKwl0dl9tb2RlLmhibGFua19zdGFydCA9 IChoY3RsMyAmIFRWX0hCTEFOS19TVEFSVF9NQVNLKSA+PiBUVl9IQkxBTktfU1RBUlRfU0hJRlQ7 Cj4gPiA+ICsJdHZfbW9kZS5oYmxhbmtfZW5kID0gKGhjdGwzICYgVFZfSFNZTkNfRU5EX01BU0sp ID4+IFRWX0hCTEFOS19FTkRfU0hJRlQ7Cj4gPiA+ICsKPiA+ID4gKwl0dl9tb2RlLm5icl9lbmQg PSAodmN0bDEgJiBUVl9OQlJfRU5EX01BU0spID4+IFRWX05CUl9FTkRfU0hJRlQ7Cj4gPiA+ICsJ dHZfbW9kZS52aV9lbmRfZjEgPSAodmN0bDEgJiBUVl9WSV9FTkRfRjFfTUFTSykgPj4gVFZfVklf RU5EX0YxX1NISUZUOwo+ID4gPiArCXR2X21vZGUudmlfZW5kX2YyID0gKHZjdGwxICYgVFZfVklf RU5EX0YyX01BU0spID4+IFRWX1ZJX0VORF9GMl9TSElGVDsKPiA+ID4gKwo+ID4gPiArCXR2X21v ZGUudnN5bmNfbGVuID0gKHZjdGwyICYgVFZfVlNZTkNfTEVOX01BU0spID4+IFRWX1ZTWU5DX0xF Tl9TSElGVDsKPiA+ID4gKwl0dl9tb2RlLnZzeW5jX3N0YXJ0X2YxID0gKHZjdGwyICYgVFZfVlNZ TkNfU1RBUlRfRjFfTUFTSykgPj4gVFZfVlNZTkNfU1RBUlRfRjFfU0hJRlQ7Cj4gPiA+ICsJdHZf bW9kZS52c3luY19zdGFydF9mMiA9ICh2Y3RsMiAmIFRWX1ZTWU5DX1NUQVJUX0YyX01BU0spID4+ IFRWX1ZTWU5DX1NUQVJUX0YyX1NISUZUOwo+ID4gPiArCj4gPiA+ICsJdHZfbW9kZS5jbG9jayA9 IHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrOwo+ID4gPiArCj4gPiA+ICsJdHZfbW9kZS5wcm9ncmVz c2l2ZSA9IHR2X2N0bCAmIFRWX1BST0dSRVNTSVZFOwo+ID4gPiArCj4gPiA+ICsJc3dpdGNoICh0 dl9jdGwgJiBUVl9PVkVSU0FNUExFX01BU0spIHsKPiA+ID4gKwljYXNlIFRWX09WRVJTQU1QTEVf OFg6Cj4gPiA+ICsJCXR2X21vZGUub3ZlcnNhbXBsZSA9IDg7Cj4gPiA+ICsJCWJyZWFrOwo+ID4g PiArCWNhc2UgVFZfT1ZFUlNBTVBMRV80WDoKPiA+ID4gKwkJdHZfbW9kZS5vdmVyc2FtcGxlID0g NDsKPiA+ID4gKwkJYnJlYWs7Cj4gPiA+ICsJY2FzZSBUVl9PVkVSU0FNUExFXzJYOgo+ID4gPiAr CQl0dl9tb2RlLm92ZXJzYW1wbGUgPSAyOwo+ID4gPiArCQlicmVhazsKPiA+ID4gKwlkZWZhdWx0 Ogo+ID4gPiArCQl0dl9tb2RlLm92ZXJzYW1wbGUgPSAxOwo+ID4gPiArCQlicmVhazsKPiA+ID4g Kwl9Cj4gPiA+ICsKPiA+ID4gKwl0bXAgPSBJOTE1X1JFQUQoVFZfV0lOX1BPUyk7Cj4gPiA+ICsJ eHBvcyA9IHRtcCA+PiAxNjsKPiA+ID4gKwl5cG9zID0gdG1wICYgMHhmZmZmOwo+ID4gPiArCj4g PiA+ICsJdG1wID0gSTkxNV9SRUFEKFRWX1dJTl9TSVpFKTsKPiA+ID4gKwl4c2l6ZSA9IHRtcCA+ PiAxNjsKPiA+ID4gKwl5c2l6ZSA9IHRtcCAmIDB4ZmZmZjsKPiA+ID4gKwo+ID4gPiArCWludGVs X3R2X21vZGVfdG9fbW9kZSgmbW9kZSwgJnR2X21vZGUpOwo+ID4gPiArCj4gPiA+ICsJRFJNX0RF QlVHX0tNUygiVFYgbW9kZTpcbiIpOwo+ID4gPiArCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxp bmUoJm1vZGUpOwo+ID4gPiArCj4gPiA+ICsJaW50ZWxfdHZfc2NhbGVfbW9kZV9ob3JpeigmbW9k ZSwgaGRpc3BsYXksCj4gPiA+ICsJCQkJICB4cG9zLCBtb2RlLmhkaXNwbGF5IC0geHNpemUgLSB4 cG9zKTsKPiA+ID4gKwlpbnRlbF90dl9zY2FsZV9tb2RlX3ZlcnQoJm1vZGUsIHZkaXNwbGF5LAo+ ID4gPiArCQkJCSB5cG9zLCBtb2RlLnZkaXNwbGF5IC0geXNpemUgLSB5cG9zKTsKPiA+ID4gKwo+ ID4gPiArCWFkanVzdGVkX21vZGUtPmNydGNfY2xvY2sgPSBtb2RlLmNsb2NrOwo+ID4gPiAgfQo+ ID4gPiAgCj4gPiA+ICBzdGF0aWMgYm9vbAo+ID4gPiBAQCAtOTY0LDYgKzExMzIsOCBAQCBpbnRl bF90dl9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4g IAljb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZfbW9kZSA9IGludGVsX3R2X21vZGVfZmluZChjb25u X3N0YXRlKTsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9 Cj4gPiA+ICAJCSZwaXBlX2NvbmZpZy0+YmFzZS5hZGp1c3RlZF9tb2RlOwo+ID4gPiArCWludCBo ZGlzcGxheSA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Cj4gPiA+ICsJaW50IHZkaXNw bGF5ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKPiA+ID4gIAo+ID4gPiAgCWlmICgh dHZfbW9kZSkKPiA+ID4gIAkJcmV0dXJuIGZhbHNlOwo+ID4gPiBAQCAtOTcyLDE3ICsxMTQyLDkw IEBAIGludGVsX3R2X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy LAo+ID4gPiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICAKPiA+ID4gIAlwaXBlX2NvbmZpZy0+b3V0 cHV0X2Zvcm1hdCA9IElOVEVMX09VVFBVVF9GT1JNQVRfUkdCOwo+ID4gPiAtCWFkanVzdGVkX21v ZGUtPmNydGNfY2xvY2sgPSB0dl9tb2RlLT5jbG9jazsKPiA+ID4gKwo+ID4gPiAgCURSTV9ERUJV R19LTVMoImZvcmNpbmcgYnBjIHRvIDggZm9yIFRWXG4iKTsKPiA+ID4gIAlwaXBlX2NvbmZpZy0+ cGlwZV9icHAgPSA4KjM7Cj4gPiA+ICAKPiA+ID4gLQkvKiBUViBoYXMgaXQncyBvd24gbm90aW9u IG9mIHN5bmMgYW5kIG90aGVyIG1vZGUgZmxhZ3MsIHNvIGNsZWFyIHRoZW0uICovCj4gPiA+IC0J YWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgPSAwOwo+ID4gPiArCXBpcGVfY29uZmlnLT5wb3J0X2Nsb2Nr ID0gdHZfbW9kZS0+Y2xvY2s7Cj4gPiA+ICsKPiA+ID4gKwlpbnRlbF90dl9tb2RlX3RvX21vZGUo YWRqdXN0ZWRfbW9kZSwgdHZfbW9kZSk7Cj4gPiA+ICsKPiA+ID4gKwlEUk1fREVCVUdfS01TKCJU ViBtb2RlOlxuIik7Cj4gPiA+ICsJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShhZGp1c3Rl ZF9tb2RlKTsKPiA+ID4gIAo+ID4gPiAgCS8qCj4gPiA+IC0JICogRklYTUU6IFdlIGRvbid0IGNo ZWNrIHdoZXRoZXIgdGhlIGlucHV0IG1vZGUgaXMgYWN0dWFsbHkgd2hhdCB3ZSB3YW50Cj4gPiA+ IC0JICogb3Igd2hldGhlciB1c2Vyc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIHN0dXBpZC4KPiA+ ID4gKwkgKiBUaGUgcGlwZSBzY2FubGluZSBjb3VudGVyIGJlaGF2aW91ciBsb29rcyBhcyBmb2xs b3dzIHdoZW4KPiA+ID4gKwkgKiB1c2luZyB0aGUgVFYgZW5jb2RlcjoKPiA+ID4gKwkgKgo+ID4g PiArCSAqIHRpbWUgLT4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIGRzbD12dG90YWwtMSAgICAgICB8 ICAgICAgICAgICAgIHwKPiA+ID4gKwkgKiAgICAgICAgICAgICAgICAgICB8fCAgICAgICAgICAg IHx8Cj4gPiA+ICsJICogICAgICAgICAgICAgICBfX198IHwgICAgICAgIF9fX3wgfAo+ID4gPiAr CSAqICAgICAgICAgICAgICAvICAgICB8ICAgICAgIC8gICAgIHwKPiA+ID4gKwkgKiAgICAgICAg ICAgICAvICAgICAgfCAgICAgIC8gICAgICB8Cj4gPiA+ICsJICogZHNsPTAgICBfX18vICAgICAg IHxfX19fXy8gICAgICAgfAo+ID4gPiArCSAqICAgICAgICB8IHwgfCAgfCAgfCB8Cj4gPiA+ICsJ ICogICAgICAgICBeIF4gXiAgIF4gXgo+ID4gPiArCSAqICAgICAgICAgfCB8IHwgICB8IHBpcGUg dmJsYW5rL2ZpcnN0IHBhcnQgb2YgdHYgdmJsYW5rCj4gPiA+ICsJICogICAgICAgICB8IHwgfCAg IGJvdHRvbSBtYXJnaW4KPiA+ID4gKwkgKiAgICAgICAgIHwgfCBhY3RpdmUKPiA+ID4gKwkgKiAg ICAgICAgIHwgdG9wIG1hcmdpbgo+ID4gPiArCSAqICAgICAgICAgcmVtYWluZGVyIG9mIHR2IHZi bGFuawo+ID4gPiArCSAqCj4gPiA+ICsJICogV2hlbiB0aGUgVFYgZW5jb2RlciBpcyB1c2VkIHRo ZSBwaXBlIHdhbnRzIHRvIHJ1biBmYXN0ZXIKPiA+ID4gKwkgKiB0aGFuIGV4cGVjdGVkIHJhdGUu IER1cmluZyB0aGUgYWN0aXZlIHBvcnRpb24gdGhlIFRWCj4gPiA+ICsJICogZW5jb2RlciBzdGFs bHMgdGhlIHBpcGUgZXZlcnkgZmV3IGxpbmVzIHRvIGtlZXAgaXQgaW4KPiA+ID4gKwkgKiBjaGVj ay4gV2hlbiB0aGUgVFYgZW5jb2RlciByZWFjaGVzIHRoZSBib3R0b20gbWFyZ2luIHRoZQo+ID4g PiArCSAqIHBpcGUgc2ltcGx5IHN0b3BzLiBPbmNlIHdlIHJlYWNoIHRoZSBUViB2YmxhbmsgdGhl IHBpcGUgaXMKPiA+ID4gKwkgKiBubyBsb25nZXIgc3RhbGxlZCBhbmQgaXQgcnVucyBhdCB0aGUg bWF4IHJhdGUgKGFwcGFyZW50bHkKPiA+ID4gKwkgKiBvdmVyc2FtcGxlIGNsb2NrIG9uIGdlbjMs IGNkY2xrIG9uIGdlbjQpLiBPbmNlIHRoZSBwaXBlCj4gPiA+ICsJICogcmVhY2hlcyB0aGUgcGlw ZSB2dG90YWwgdGhlIHBpcGUgc3RvcHMgZm9yIHRoZSByZW1haW5kZXIKPiA+ID4gKwkgKiBvZiB0 aGUgVFYgdmJsYW5rL3RvcCBtYXJnaW4uIFRoZSBwaXBlIHN0YXJ0cyB1cCBhZ2FpbiB3aGVuCj4g PiA+ICsJICogdGhlIFRWIGVuY29kZXIgZXhpdHMgdGhlIHRvcCBtYXJnaW4uCj4gPiA+ICsJICoK PiA+ID4gKwkgKiBUbyBhdm9pZCBodWdlIGhhc3NsZXMgZm9yIHZibGFuayB0aW1lc3RhbXBpbmcg d2Ugc2NhbGUKPiA+ID4gKwkgKiB0aGUgcGlwZSB0aW1pbmdzIGFzIGlmIHRoZSBwaXBlIGFsd2F5 cyBydW5zIGF0IHRoZSBhdmVyYWdlCj4gPiA+ICsJICogcmF0ZSBpdCBtYWludGFpbnMgZHVyaW5n IHRoZSBhY3RpdmUgcGVyaW9kLiBUaGlzIGFsc28KPiA+ID4gKwkgKiBnaXZlcyB1cyBhIHJlYXNv bmFibGUgZ3Vlc3N0aW1hdGUgYXMgdG8gdGhlIHBpeGVsIHJhdGUuCj4gPiA+ICsJICogRHVlIHRv IHRoZSB2YXJpYXRpb24gaW4gdGhlIGFjdHVhbCBwaXBlIHNwZWVkIHRoZSBzY2FubGluZQo+ID4g PiArCSAqIGNvdW50ZXIgd2lsbCBnaXZlIHVzIHNsaWdodGx5IGVycm9uZW91cyByZXN1bHRzIGR1 cmluZyB0aGUKPiA+ID4gKwkgKiBUViB2YmxhbmsvbWFyZ2lucy4gQnV0IHNpbmNlIHZ0b3RhbCB3 YXMgc2VsZWN0ZWQgc3VjaCB0aGF0Cj4gPiA+ICsJICogaXQgbWF0Y2hlcyB0aGUgYXZlcmFnZSBy YXRlIG9mIHRoZSBwaXBlIGR1cmluZyB0aGUgYWN0aXZlCj4gPiA+ICsJICogcG9ydGlvbiB0aGUg ZXJyb3Igc2hvdWxkbid0IGNhdXNlIGFueSBzZXJpb3VzIGdyaWVmIHRvCj4gPiA+ICsJICogdmJs YW5rIHRpbWVzdGFtcHMuCj4gPiAKPiA+IE5pY2UgcmV2LiBlbmdpbmcgYW5kIGRlc2NyaXB0aW9u LiBXYXMgdGhpbmtpbmcgZm9yIGEgd2hpbGUgd2hhdCBpcyB0aGUKPiA+IG1heCBlcnJvciB0aGUg aXNzc3VlIHlvdSBmb3VuZCBhZGRzIHdydC4gdGhlIGFjdHVhbCB2YmxhbmsgdGltZXN0YW1wLAo+ ID4gYWZ0ZXIgeW91ciBjaGFuZ2UuIEFGQUlVIGl0J3MgdGhlIGR1cmF0aW9uIG9mIHRoZSBmbGF0 cyBpbiB0aGUgY3VydmUsCj4gPiB0aGF0IGlzCj4gPiBtYXhfZXJyPSsoYm90dG9tIG1hcmdpbity ZW1haW5kZXIgb2YgdHYgdmJsYW5rK3RvcCBtYXJnaW4pLgo+ID4gCj4gPiBSZXZpZXdlZC1ieTog SW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgo+ID4gCj4gPiA+ICsJICoKPiA+ID4gKwkg KiBGb3IgcG9zdGVyaXR5IGhlcmUgaXMgdGhlIGVtcGlyaWNhbGx5IGRlcml2ZWQgZm9ybXVsYQo+ ID4gPiArCSAqIHRoYXQgZ2l2ZXMgdXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBwaXBlIHZi bGFuawo+ID4gPiArCSAqIHdlIGNhbiB1c2Ugd2l0aG91dCBjYXVzaW5nIGRpc3BsYXkgY29ycnVw dGlvbi4gRm9sbG93aW5nCj4gPiA+ICsJICogdGhpcyB3b3VsZCBhbGxvdyB1cyB0byBoYXZlIGEg dGlja2luZyBzY2FubGluZSBjb3VudGVyCj4gPiA+ICsJICogZXZlcnl3aGVyZSBleGNlcHQgZHVy aW5nIHRoZSBib3R0b20gbWFyZ2luICh0aGVyZSB0aGUKPiA+ID4gKwkgKiBwaXBlIGFsd2F5cyBz dG9wcykuIEllLiB0aGlzIHdvdWxkIGVsaW1pbmF0ZSB0aGUgc2Vjb25kCj4gPiA+ICsJICogZmxh dCBwb3J0aW9uIG9mIHRoZSBhYm92ZSBncmFwaC4gSG93ZXZlciB0aGlzIHdvdWxkIGFsc28KPiA+ ID4gKwkgKiBjb21wbGljYXRlIHZibGFuayB0aW1lc3RhbXBpbmcgYXMgdGhlIHBpcGUgdnRvdGFs IHdvdWxkCj4gPiA+ICsJICogbm8gbG9uZ2VyIG1hdGNoIHRoZSBhdmVyYWdlIHJhdGUgdGhlIHBp cGUgcnVucyBhdCBkdXJpbmcKPiA+ID4gKwkgKiB0aGUgYWN0aXZlIHBvcnRpb24uIEhlbmNlIGZv bGxvd2luZyB0aGlzIGZvcm11bGEgc2VlbXMKPiA+ID4gKwkgKiBtb3JlIHRyb3VibGUgdGhhdCBp dCdzIHdvcnRoLgo+ID4gPiArCSAqCj4gPiA+ICsJICogaWYgKElTX0dFTjQoZGV2X3ByaXYpKSB7 Cj4gPiA+ICsJICoJbnVtID0gY2RjbGsgKiAodHZfbW9kZS0+b3ZlcnNhbXBsZSA+PiAhdHZfbW9k ZS0+cHJvZ3Jlc3NpdmUpOwo+ID4gPiArCSAqCWRlbiA9IHR2X21vZGUtPmNsb2NrOwo+ID4gPiAr CSAqIH0gZWxzZSB7Cj4gPiA+ICsJICoJbnVtID0gdHZfbW9kZS0+b3ZlcnNhbXBsZSA+PiAhdHZf bW9kZS0+cHJvZ3Jlc3NpdmU7Cj4gPiA+ICsJICoJZGVuID0gMTsKPiA+ID4gKwkgKiB9Cj4gPiA+ ICsJICogbWF4X3BpcGVfdmJsYW5rX2xlbiB+PQo+ID4gPiArCSAqCShudW0gKiB0dl9odG90YWwg KiAodHZfdmJsYW5rX2xlbiArIHRvcF9tYXJnaW4pKSAvCj4gPiA+ICsJICoJKGRlbiAqIHBpcGVf aHRvdGFsKTsKPiA+ID4gIAkgKi8KPiA+ID4gKwlpbnRlbF90dl9zY2FsZV9tb2RlX2hvcml6KGFk anVzdGVkX21vZGUsIGhkaXNwbGF5LAo+ID4gPiArCQkJCSAgY29ubl9zdGF0ZS0+dHYubWFyZ2lu cy5sZWZ0LAo+ID4gPiArCQkJCSAgY29ubl9zdGF0ZS0+dHYubWFyZ2lucy5yaWdodCk7Cj4gPiA+ ICsJaW50ZWxfdHZfc2NhbGVfbW9kZV92ZXJ0KGFkanVzdGVkX21vZGUsIHZkaXNwbGF5LAo+ID4g PiArCQkJCSBjb25uX3N0YXRlLT50di5tYXJnaW5zLnRvcCwKPiA+ID4gKwkJCQkgY29ubl9zdGF0 ZS0+dHYubWFyZ2lucy5ib3R0b20pOwo+ID4gPiArCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1 c3RlZF9tb2RlLCAwKTsKPiA+ID4gKwlhZGp1c3RlZF9tb2RlLT5uYW1lWzBdID0gJ1wwJzsKPiA+ ID4gIAo+ID4gPiAgCXJldHVybiB0cnVlOwo+ID4gPiAgfQo+ID4gPiBAQCAtMTQxMSw1MiArMTY1 NCw0MSBAQCBpbnRlbF90dl9zZXRfbW9kZV90eXBlKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAo+ID4gPiAgc3RhdGljIGludAo+ID4gPiAgaW50ZWxfdHZfZ2V0X21vZGVzKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiA+ICB7Cj4gPiA+IC0Jc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGVfcHRyOwo+ID4gPiAgCWNvbnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2Rl ID0gaW50ZWxfdHZfbW9kZV9maW5kKGNvbm5lY3Rvci0+c3RhdGUpOwo+ID4gPiAtCWludCBqLCBj b3VudCA9IDA7Cj4gPiA+IC0JdTY0IHRtcDsKPiA+ID4gKwlpbnQgaSwgY291bnQgPSAwOwo+ID4g PiAgCj4gPiA+IC0JZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoaW5wdXRfcmVzX3RhYmxlKTsK PiA+ID4gLQkgICAgIGorKykgewo+ID4gPiAtCQljb25zdCBzdHJ1Y3QgaW5wdXRfcmVzICppbnB1 dCA9ICZpbnB1dF9yZXNfdGFibGVbal07Cj4gPiA+IC0JCXVuc2lnbmVkIGludCBoYWN0aXZlX3Mg PSBpbnB1dC0+dzsKPiA+ID4gLQkJdW5zaWduZWQgaW50IHZhY3RpdmVfcyA9IGlucHV0LT5oOwo+ ID4gPiAtCj4gPiA+IC0JCWlmICh0dl9tb2RlLT5tYXhfc3JjdyAmJiBpbnB1dC0+dyA+IHR2X21v ZGUtPm1heF9zcmN3KQo+ID4gPiAtCQkJY29udGludWU7Cj4gPiA+ICsJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoaW5wdXRfcmVzX3RhYmxlKTsgaSsrKSB7Cj4gPiA+ICsJCWNvbnN0IHN0cnVj dCBpbnB1dF9yZXMgKmlucHV0ID0gJmlucHV0X3Jlc190YWJsZVtpXTsKPiA+ID4gKwkJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gPiA+ICAKPiA+ID4gLQkJaWYgKGlucHV0LT53ID4g MTAyNCAmJiAoIXR2X21vZGUtPnByb2dyZXNzaXZlCj4gPiA+IC0JCQkJCSYmICF0dl9tb2RlLT5j b21wb25lbnRfb25seSkpCj4gPiA+ICsJCWlmIChpbnB1dC0+dyA+IDEwMjQgJiYKPiA+ID4gKwkJ ICAgICF0dl9tb2RlLT5wcm9ncmVzc2l2ZSAmJgo+ID4gPiArCQkgICAgIXR2X21vZGUtPmNvbXBv bmVudF9vbmx5KQo+ID4gPiAgCQkJY29udGludWU7Cj4gPiA+ICAKPiA+ID4gLQkJbW9kZV9wdHIg PSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOwo+ID4gPiAtCQlpZiAoIW1vZGVfcHRy KQo+ID4gPiArCQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKPiA+ID4g KwkJaWYgKCFtb2RlKQo+ID4gPiAgCQkJY29udGludWU7Cj4gPiA+ICAKPiA+ID4gLQkJbW9kZV9w dHItPmhkaXNwbGF5ID0gaGFjdGl2ZV9zOwo+ID4gPiAtCQltb2RlX3B0ci0+aHN5bmNfc3RhcnQg PSBoYWN0aXZlX3MgKyAxOwo+ID4gPiAtCQltb2RlX3B0ci0+aHN5bmNfZW5kID0gaGFjdGl2ZV9z ICsgNjQ7Cj4gPiA+IC0JCWlmIChtb2RlX3B0ci0+aHN5bmNfZW5kIDw9IG1vZGVfcHRyLT5oc3lu Y19zdGFydCkKPiA+ID4gLQkJCW1vZGVfcHRyLT5oc3luY19lbmQgPSBtb2RlX3B0ci0+aHN5bmNf c3RhcnQgKyAxOwo+ID4gPiAtCQltb2RlX3B0ci0+aHRvdGFsID0gaGFjdGl2ZV9zICsgOTY7Cj4g PiA+IC0KPiA+ID4gLQkJbW9kZV9wdHItPnZkaXNwbGF5ID0gdmFjdGl2ZV9zOwo+ID4gPiAtCQlt b2RlX3B0ci0+dnN5bmNfc3RhcnQgPSB2YWN0aXZlX3MgKyAxOwo+ID4gPiAtCQltb2RlX3B0ci0+ dnN5bmNfZW5kID0gdmFjdGl2ZV9zICsgMzI7Cj4gPiA+IC0JCWlmIChtb2RlX3B0ci0+dnN5bmNf ZW5kIDw9IG1vZGVfcHRyLT52c3luY19zdGFydCkKPiA+ID4gLQkJCW1vZGVfcHRyLT52c3luY19l bmQgPSBtb2RlX3B0ci0+dnN5bmNfc3RhcnQgICsgMTsKPiA+ID4gLQkJbW9kZV9wdHItPnZ0b3Rh bCA9IHZhY3RpdmVfcyArIDMzOwo+ID4gPiAtCj4gPiA+IC0JCXRtcCA9IG11bF91MzJfdTMyKHR2 X21vZGUtPnJlZnJlc2gsIG1vZGVfcHRyLT52dG90YWwpOwo+ID4gPiAtCQl0bXAgKj0gbW9kZV9w dHItPmh0b3RhbDsKPiA+ID4gLQkJdG1wID0gZGl2X3U2NCh0bXAsIDEwMDAwMDApOwo+ID4gPiAt CQltb2RlX3B0ci0+Y2xvY2sgPSAoaW50KSB0bXA7Cj4gPiA+IC0KPiA+ID4gLQkJaW50ZWxfdHZf c2V0X21vZGVfdHlwZShtb2RlX3B0ciwgdHZfbW9kZSk7Cj4gPiA+ICsJCS8qCj4gPiA+ICsJCSAq IFdlIHRha2UgdGhlIFRWIG1vZGUgYW5kIHNjYWxlIGl0IHRvIGxvb2sKPiA+ID4gKwkJICogbGlr ZSBpdCBoYWQgdGhlIGV4cGVjdGVkIGgvdmRpc3BsYXkuIFRoaXMKPiA+ID4gKwkJICogcHJvdmlk ZXMgdGhlIG1vc3QgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlCj4gPiA+ICsJCSAqIGFib3V0IHRo ZSBhY3R1YWwgdGltaW5ncyBvZiB0aGUgbW9kZS4gV2UKPiA+ID4gKwkJICogZG8gaWdub3JlIHRo ZSBtYXJnaW5zIHRob3VnaC4KPiA+ID4gKwkJICovCj4gPiA+ICsJCWludGVsX3R2X21vZGVfdG9f bW9kZShtb2RlLCB0dl9tb2RlKTsKPiA+ID4gKwkJaWYgKGNvdW50ID09IDApIHsKPiA+ID4gKwkJ CURSTV9ERUJVR19LTVMoIlRWIG1vZGU6XG4iKTsKPiA+ID4gKwkJCWRybV9tb2RlX2RlYnVnX3By aW50bW9kZWxpbmUobW9kZSk7Cj4gPiA+ICsJCX0KPiA+ID4gKwkJaW50ZWxfdHZfc2NhbGVfbW9k ZV9ob3Jpeihtb2RlLCBpbnB1dC0+dywgMCwgMCk7Cj4gPiA+ICsJCWludGVsX3R2X3NjYWxlX21v ZGVfdmVydChtb2RlLCBpbnB1dC0+aCwgMCwgMCk7Cj4gPiA+ICsJCWludGVsX3R2X3NldF9tb2Rl X3R5cGUobW9kZSwgdHZfbW9kZSk7Cj4gPiA+ICAKPiA+ID4gLQkJZHJtX21vZGVfc2V0X25hbWUo bW9kZV9wdHIpOwo+ID4gPiArCQlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKPiA+ID4gIAo+ID4g PiAtCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZV9wdHIpOwo+ID4gPiArCQlk cm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7Cj4gPiA+ICAJCWNvdW50Kys7Cj4g PiA+ICAJfQo+ID4gPiAgCj4gPiA+IC0tIAo+ID4gPiAyLjE4LjEKPiA+ID4gCj4gPiA+IF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiA+IGRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKPiA+ID4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4g PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo+IAo+IC0tIAo+IFZpbGxlIFN5cmrDpGzDpAo+IEludGVsCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=