From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH] drm/i915: set proper N/M in modeset Date: Thu, 4 Aug 2016 09:23:40 +0300 Message-ID: <20160804062340.GT4329@intel.com> References: <1470101710-57552-1-git-send-email-libin.yang@linux.intel.com> <20160802104715.GQ4329@intel.com> <96A12704CE18D347B625EE2D4A099D19119F7E20@SHSMSX103.ccr.corp.intel.com> <96A12704CE18D347B625EE2D4A099D19119F8A8E@SHSMSX103.ccr.corp.intel.com> <20160804053904.GQ4329@intel.com> <96A12704CE18D347B625EE2D4A099D19119F8B72@SHSMSX103.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 14FD16E428 for ; Thu, 4 Aug 2016 06:23:44 +0000 (UTC) Content-Disposition: inline In-Reply-To: <96A12704CE18D347B625EE2D4A099D19119F8B72@SHSMSX103.ccr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Yang, Libin" Cc: "'tiwai@suse.de'" , "Vetter, Daniel" , "'libin.yang@linux.intel.com'" , "'intel-gfx@lists.freedesktop.org'" List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBBdWcgMDQsIDIwMTYgYXQgMDY6MDQ6MTBBTSArMDAwMCwgWWFuZywgTGliaW4gd3Jv dGU6Cj4gSGkgVmlsbGUsCj4gCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+ID4gRnJv bTogVmlsbGUgU3lyasOkbMOkIFttYWlsdG86dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb21d Cj4gPiBTZW50OiBUaHVyc2RheSwgQXVndXN0IDQsIDIwMTYgMTozOSBQTQo+ID4gVG86IFlhbmcs IExpYmluIDxsaWJpbi55YW5nQGludGVsLmNvbT4KPiA+IENjOiAnbGliaW4ueWFuZ0BsaW51eC5p bnRlbC5jb20nIDxsaWJpbi55YW5nQGxpbnV4LmludGVsLmNvbT47ICdpbnRlbC0KPiA+IGdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcnIDxpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnPjsK PiA+ICdqYW5pLm5pa3VsYUBsaW51eC5pbnRlbC5jb20nIDxqYW5pLm5pa3VsYUBsaW51eC5pbnRl bC5jb20+OyBWZXR0ZXIsIERhbmllbAo+ID4gPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPjsgJ3Rp d2FpQHN1c2UuZGUnIDx0aXdhaUBzdXNlLmRlPgo+ID4gU3ViamVjdDogUmU6IFtQQVRDSF0gZHJt L2k5MTU6IHNldCBwcm9wZXIgTi9NIGluIG1vZGVzZXQKPiA+IAo+ID4gT24gVGh1LCBBdWcgMDQs IDIwMTYgYXQgMDI6NDg6NTRBTSArMDAwMCwgWWFuZywgTGliaW4gd3JvdGU6Cj4gPiA+IEhpIFZp bGxlLAo+ID4gPgo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiA+ID4gRnJv bTogWWFuZywgTGliaW4KPiA+ID4gPiBTZW50OiBUdWVzZGF5LCBBdWd1c3QgMiwgMjAxNiA5OjU5 IFBNCj4gPiA+ID4gVG86IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRl bC5jb20+Owo+ID4gPiA+IGxpYmluLnlhbmdAbGludXguaW50ZWwuY29tCj4gPiA+ID4gQ2M6IGlu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNv bTsKPiA+ID4gPiBWZXR0ZXIsIERhbmllbCA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+OyB0aXdh aUBzdXNlLmRlCj4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSF0gZHJtL2k5MTU6IHNldCBwcm9w ZXIgTi9NIGluIG1vZGVzZXQKPiA+ID4gPgo+ID4gPiA+IEhpIFZpbGxlCj4gPiA+ID4KPiA+ID4g PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiA+ID4gPiBGcm9tOiBWaWxsZSBTeXJq w6Rsw6QgW21haWx0bzp2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbV0KPiA+ID4gPiA+IFNl bnQ6IFR1ZXNkYXksIEF1Z3VzdCAyLCAyMDE2IDY6NDcgUE0KPiA+ID4gPiA+IFRvOiBsaWJpbi55 YW5nQGxpbnV4LmludGVsLmNvbQo+ID4gPiA+ID4gQ2M6IGludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmc7IGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbTsKPiA+ID4gPiA+IFZldHRlciwg RGFuaWVsIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT47IHRpd2FpQHN1c2UuZGU7IFlhbmcsCj4g PiA+ID4gPiBMaWJpbiA8bGliaW4ueWFuZ0BpbnRlbC5jb20+Cj4gPiA+ID4gPiBTdWJqZWN0OiBS ZTogW1BBVENIXSBkcm0vaTkxNTogc2V0IHByb3BlciBOL00gaW4gbW9kZXNldAo+ID4gPiA+ID4K PiA+ID4gPiA+IE9uIFR1ZSwgQXVnIDAyLCAyMDE2IGF0IDA5OjM1OjEwQU0gKzA4MDAsCj4gPiA+ ID4gPiBsaWJpbi55YW5nQGxpbnV4LmludGVsLmNvbQo+ID4gPiA+IHdyb3RlOgo+ID4gPiA+ID4g PiBGcm9tOiBMaWJpbiBZYW5nIDxsaWJpbi55YW5nQGxpbnV4LmludGVsLmNvbT4KPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gV2hlbiBtb2Rlc2V0IG9jY3VycyBhbmQgdGhlIExTX0NMSyBpcyBzZXQg dG8gc29tZSBzcGVjaWFsIHZhbHVlcwo+ID4gPiA+ID4gPiBpbiBEUCBtb2RlLCB0aGUgTi9NIG5l ZWQgdG8gYmUgc2V0IG1hbnVhbGx5IGlmIGF1ZGlvIGlzIHBsYXlpbmcuCj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+IFRoZSByZWxhdGlvbnNoaXAgb2YgTWF1ZCBhbmQgTmF1ZCBpcyBleHByZXNzZWQg aW4gdGhlIGZvbGxvd2luZwo+ID4gPiA+ID4gPiBlcXVhdGlvbjoKPiA+ID4gPiA+ID4gTWF1ZC9O YXVkID0gNTEyICogZnMgLyBmX0xTX0Nsawo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBQbGVhc2Ug cmVmZXIgVkVTQSBEaXNwbGF5UG9ydCBTdGFuZGFyZCBzcGVjIGZvciBkZXRhaWxzLgo+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiBBbHNvLCB0aGUgcGF0Y2ggYXBwbGllcwo+ID4gPiA+ID4gPiBjb21t aXQgN2U4Mjc1YzJmMmJiICgiZHJtL2k5MTU6IHNldCBwcm9wZXIgTi9DVFMgaW4gbW9kZXNldCIp IHRvCj4gPiA+ID4gPiA+IEFQTCBwbGF0Zm9ybS4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gU2ln bmVkLW9mZi1ieTogTGliaW4gWWFuZyA8bGliaW4ueWFuZ0BsaW51eC5pbnRlbC5jb20+Cj4gPiA+ ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAg ICB8ICAgNiArKwo+ID4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXVkaW8u YyB8IDEyMgo+ID4gPiA+ID4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t Cj4gPiA+ID4gPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDExMSBpbnNlcnRpb25zKCspLCAxNyBkZWxl dGlvbnMoLSkKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oIGluZGV4IDhiZmRlNzUuLjJmOWQwMGUgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiA+ID4gPiBAQCAtNzM1MSw2ICs3MzUxLDEy IEBAIGVudW0gewo+ID4gPiA+ID4gPiAgI2RlZmluZSBfSFNXX0FVRF9DT05GSUdfQgkJMHg2NTEw MAo+ID4gPiA+ID4gPiAgI2RlZmluZSBIU1dfQVVEX0NGRyhwaXBlKQkJX01NSU9fUElQRShwaXBl LAo+ID4gPiA+ID4gX0hTV19BVURfQ09ORklHX0EsIF9IU1dfQVVEX0NPTkZJR19CKQo+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiArI2RlZmluZSBfSFNXX0FVRF9NX0NUU19FTkFCTEVfQQkJMHg2NTAy OAo+ID4gPiA+ID4gPiArI2RlZmluZSBfSFNXX0FVRF9NX0NUU19FTkFCTEVfQgkJMHg2NTEyOAo+ ID4gPiA+ID4gPiArI2RlZmluZSBIU1dfQVVEX01fQ1RTX0VOQUJMRShwaXBlKQo+ID4gCV9NTUlP X1BJUEUocGlwZSwKPiA+ID4gPiA+IF9IU1dfQVVEX01fQ1RTX0VOQUJMRV9BLCBfSFNXX0FVRF9N X0NUU19FTkFCTEVfQikKPiA+ID4gPiA+ID4gKyNkZWZpbmUgICBBVURfTV9DVFNfTV9WQUxVRV9J TkRFWAkoMSA8PCAyMSkKPiA+ID4gPiA+ID4gKyNkZWZpbmUgICBBVURfTV9DVFNfTV9QUk9HX0VO QUJMRQkoMSA8PCAyMCkKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAgI2RlZmluZSBfSFNXX0FV RF9NSVNDX0NUUkxfQQkJMHg2NTAxMAo+ID4gPiA+ID4gPiAgI2RlZmluZSBfSFNXX0FVRF9NSVND X0NUUkxfQgkJMHg2NTExMAo+ID4gPiA+ID4gPiAgI2RlZmluZSBIU1dfQVVEX01JU0NfQ1RSTChw aXBlKQkJX01NSU9fUElQRShwaXBlLAo+ID4gPiA+ID4gX0hTV19BVURfTUlTQ19DVFJMX0EsIF9I U1dfQVVEX01JU0NfQ1RSTF9CKQo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfYXVkaW8uYwo+ID4gPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2F1ZGlvLmMKPiA+ID4gPiA+ID4gaW5kZXggNjcwMGE3Yi4uZGU1NWVjZiAxMDA2NDQK PiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXVkaW8uYwo+ID4g PiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdWRpby5jCj4gPiA+ID4g PiA+IEBAIC05OCw2ICs5OCwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiA+ID4gPiA+ID4g IAl7IDE5MjAwMCwgVE1EU18yOTdNLCAyMDQ4MCwgMjQ3NTAwIH0sICB9Owo+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiArI2RlZmluZSBMQ181NDBNIDU0MDAwMAo+ID4gPiA+ID4gPiArI2RlZmluZSBM Q18xNjJNIDE2MjAwMAo+ID4gPiA+ID4KPiA+ID4gPiA+IERvIHdlIGhhdmUgc29tZSBleHBsYW5h dGlvbiB3aHkgMi43IGRvZXNuJ3QgbmVlZCBNL04gcHJvZ3JhbW1pbmcsCj4gPiA+ID4gPiBidXQK PiA+ID4gPiA+IDEuNjIgYW5kIDUuNCBkbz8KPiA+ID4gPgo+ID4gPiA+IEkgZGlkbid0IHVzZSAy LjcgYmVjYXVzZSBJIGNhbid0IGZpbmQgYSBtb2RlIHVzaW5nIDIuNy4gU28gSSBjYW4ndCBkbyB0 aGUgdGVzdC4KPiA+ID4gPiA1LjQgaXMgZm9yIDRLIGFuZCAxLjYyIGlzIGZvciAxMDgwcC4KPiA+ ID4gPgo+ID4gPiA+ID4KPiA+ID4gPiA+IEFuZCBJIHNlZSB5b3UncmUgb25seSBkb2luZyB0aGlz IG9uIEhTVysuIEVhcmxpZXIgcGxhdGZvcm1zIGRvbid0IG5lZWQKPiA+IHRoaXM/Cj4gPiA+ID4K PiA+ID4gPiBXZSBhcmUgbm90IHN1cHBvcnRpbmcgZWFybGllciBwbGF0Zm9ybXMgYW5kIEknbSBu b3Qgc3VyZSB3aGV0aGVyIHRoZQo+ID4gPiA+IG9sZCBwbGF0Zm9ybXMgc3VwcG9ydHMgNEsgRFAg b3Igbm90Lgo+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCB7Cj4gPiA+ID4gPiA+ICsJaW50IHNhbXBsZV9yYXRlOwo+ID4gPiA+ID4gPiArCWludCBjbG9j azsKPiA+ID4gPiA+ID4gKwlpbnQgbjsKPiA+ID4gPiA+ID4gKwlpbnQgbTsKPiA+ID4gPiA+Cj4g PiA+ID4gPiBDYW4gc2F2ZSBhIGJpdCBvZiBzcGFjZSBieSB1c2luZyB1MTYgZm9yIG0gYW5kIG4u Cj4gPiA+ID4KPiA+ID4gPiBPSywgSSB3aWxsIGRvIGl0IGluIG5leHQgdmVyc2lvbi4KPiA+ID4g Pgo+ID4gPiA+ID4KPiA+ID4gPiA+ID4gK30gYXVkX25tW10gPSB7Cj4gPiA+ID4gPiA+ICsJezQ4 MDAwLCBMQ181NDBNLCA1NjI1LCAyNTZ9LGAKPiA+ID4gPiA+ID4gKwl7NDQxMDAsIExDXzU0ME0s IDkzNzUsIDM5Mn0sCj4gPiA+ID4gPiA+ICsJezMyMDAwLCBMQ181NDBNLCAxNjg3NSwgNTEyfSwK PiA+ID4gPiA+ID4gKwl7NDgwMDAsIExDXzE2Mk0sIDMzNzUsIDUxMn0sCj4gPiA+ID4gPiA+ICsJ ezQ0MTAwLCBMQ18xNjJNLCA1NjI1LCA3ODR9LAo+ID4gPiA+ID4gPiArCXszMjAwMCwgTENfMTYy TSwgMTAxMjUsIDEwMjQKPiA+ID4gPiA+ID4gK307Cj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhlIG51 bWJlcnMgbG9vayBnb29kLCBidXQgd2hhdCBhYm91dCBvdGhlciBzYW1wbGUgcmF0ZXM/IEZvciBI RE1JCj4gPiA+ID4gPiB3ZSBnbyB1cCB0byAxOTJrSHosIHdoeSBub3QgZm9yIERQPwo+ID4gPiA+ Cj4gPiA+ID4gT3VyIHRlc3Qgb25seSBpbmNsdWRlcyAzMkssIDQ0LjFLIGFuZCA0OEsgOikgSSB3 aWxsIGFkZCB0aGUgc3VwcG9ydAo+ID4gPiA+IGlmIHlvdSB0aGluayB3ZSBzaG91bGQuCj4gPiA+ Cj4gPiA+IEkgd2lsbCBub3QgYWRkIDE5MktIeiwgOTZLSHogYW5kIGV0YyByYXRlIHN1cHBvcnQg YXMgYmFzZWQgb24gbXkgdGVzdAo+ID4gPiB0aGVzZSByYXRlIHdpbGwgYmUgbm90IHVzZWQgaW4g RFAuIEl0IHdpbGwgYmUgY29udmVydGVkIHRvIDQ4S0h6Lgo+ID4gCj4gPiBIb3cgYWJvdXQgYmFz aW5nIHRoYXQgZGVjaXNpb24gb24gd2hhdCdzIGFjdHVhbGx5IGFsbG93ZWQgYnkgdGhlIGRyaXZl cj8KPiA+IEkgY2FuIGRvIDk2a0h6IERQIGF1ZGlvIG9uIG15IEhTVyBqdXN0IGZpbmUgaGVyZS4g U28gY2xlYXJseSBpZiB0aGUgZGlzcGxheQo+ID4gc3VwcG9ydHMgaXQsIHRoZXJlIGlzIG5vdGhp bmcgb24gdGhlIEFMU0Egc2lkZSB0aGF0IHdvdWxkIHByZXZlbnQgaXQgZnJvbSBiZWluZwo+ID4g dXNlZC4KPiAKPiBGb3IgOTZLSHosIGF1ZGlvIHdpbGwgY29udmVydCB0byA0OEtIei4gWW91IGNh biB0cnkgdG8gcHJpbnQgdGhlIHNhbXBsZSByYXRlCj4gaW4gaTkxNV9hdWRpb19jb21wb25lbnRf c3luY19hdWRpb19yYXRlKCkuIFNvIHdlIGNhbid0IHRlc3QgaXQgZm9yIHRoZSByZWFsCj4gOTZr SHouCgpXcm9uZy4KCiMgZ3JlcCByYXRlIC9wcm9jL2Fzb3VuZC9IRE1JL2VsZCMwLjAgCnNhZDBf cmF0ZXMJCVsweDRlMF0gMzIwMDAgNDQxMDAgNDgwMDAgOTYwMDAKCiMgZ3JlcCByYXRlIC9wcm9j L2Fzb3VuZC9IRE1JL3BjbTNwL3N1YjAvaHdfcGFyYW1zIApyYXRlOiA5NjAwMCAoOTYwMDAvMSkK Cltkcm06aTkxNV9hdWRpb19jb21wb25lbnRfc3luY19hdWRpb19yYXRlXSBzYW1wbGUgcmF0ZSA5 NjAwMCBrSHoKCj4gCj4gSW4gRFAgc3BlYywgdGFibGUgMi01MCBvbmx5IHNheXMgNDhrSHosIDMy a0h6LCA0NC4xa0h6LCAzODRrSHogYW5kIDc2OGtIei4KClRoYXQgdGFibGUgaXMganVzdCBmb3Ig aW5mb3JtYXRpdmUgcHVycG9zZXMuIFRoZSB2YWx1ZXMgYXJlIHRoZSBvbmVzIHlvdQpnZXQgZnJv bSB0aGUgZm9ybXVsYS4gQW5kIHRoZSBFTEQgY2FuIGNvbnRhaW4gZXhhY3RseSB0aGUgc2FtZSBT QURzIGFzCndpdGggSERNSSwgc28gYWxsIHRoZSBzYW1lIHNhbXBsZSByYXRlcyBjYW4gYmUgdXNl ZC4KCj4gSG93ZXZlciwgdGhlIGxhdHRlciB0d28gc2FtcGxlIHJhdGVzIGlzIG5vdCBzdXBwb3J0 ZWQgaW4gYXVkaW8gZHJpdmVyIGFuZAo+IGNhbid0IGJlIHRlc3RlZCBzbyBmYXIuIDg4a0h6LCA5 NmtIeiBhbmQgMTkya0h6IGNhbm5vdCBiZSB0ZXN0ZWQsIGVpdGhlci4KPiAKPiBSZWdhcmRzLAo+ IExpYmluCj4gCj4gPiAKPiA+ID4KPiA+ID4gPgo+ID4gPiA+ID4KPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiAgLyogZ2V0IEFVRF9DT05GSUdfUElYRUxfQ0xPQ0tfSERNSV8qIHZhbHVlIGZvciBt b2RlICovICBzdGF0aWMKPiA+ID4gPiA+ID4gdTMyIGF1ZGlvX2NvbmZpZ19oZG1pX3BpeGVsX2Ns b2NrKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlCj4gPiA+ID4gPiA+ICphZGp1c3RlZF9t b2RlKSAgeyBAQCAtMTIxLDIwICsxMzcsNTAgQEAgc3RhdGljIHUzMgo+ID4gPiA+ID4gPiBhdWRp b19jb25maWdfaGRtaV9waXhlbF9jbG9jayhjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQo+ ID4gKmFkanVzdGVkCj4gPiA+ID4gPiA+ICAJcmV0dXJuIGhkbWlfYXVkaW9fY2xvY2tbaV0uY29u ZmlnOyAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAtc3RhdGljIGludCBhdWRpb19jb25maWdf Z2V0X24oY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUKPiA+ID4gPiA+ID4gKm1vZGUsIGlu dCByYXRlKQo+ID4gPiA+ID4gPiArc3RhdGljIGludCBhdWRpb19jb25maWdfZ2V0X24oc3RydWN0 IGludGVsX2NydGMgKmNydGMsCj4gPiA+ID4gPiA+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZQo+ID4gKmFkanVzdGVkX21vZGUsCj4gPiA+ID4gPiA+ICsJCQkgICAgICBp bnQgcmF0ZSkKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gKwlpbnQgaTsKPiA+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gPiArCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGMtPmNvbmZpZywgSU5U RUxfT1VUUFVUX0hETUkpKSB7Cj4gPiA+ID4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGF1ZF9uY3RzKTsgaSsrKSB7Cj4gPiA+ID4gPiA+ICsJCQlpZiAoKHJhdGUgPT0gYXVkX25j dHNbaV0uc2FtcGxlX3JhdGUpICYmCj4gPiA+ID4gPiA+ICsJCQkJKGFkanVzdGVkX21vZGUtPmNs b2NrID09Cj4gPiBhdWRfbmN0c1tpXS5jbG9jaykpIHsKPiA+ID4gPiA+ID4gKwkJCQlyZXR1cm4g YXVkX25jdHNbaV0ubjsKPiA+ID4gPiA+ID4gKwkJCX0KPiA+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ ID4gPiArCX0KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCWlmIChpbnRlbF9jcnRjX2hhc190 eXBlKGNydGMtPmNvbmZpZywgSU5URUxfT1VUUFVUX0RQKSkgewo+ID4gPiA+ID4gPiArCQlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdWRfbm0pOyBpKyspIHsKPiA+ID4gPiA+ID4gKwkJCWlm ICgocmF0ZSA9PSBhdWRfbm1baV0uc2FtcGxlX3JhdGUpICYmCj4gPiA+ID4gPiA+ICsJCQkJKGNy dGMtPmNvbmZpZy0+cG9ydF9jbG9jayA9PQo+ID4gYXVkX25tW2ldLmNsb2NrKSkKPiA+ID4gPiA+ IHsKPiA+ID4gPiA+ID4gKwkJCQlyZXR1cm4gYXVkX25tW2ldLm47Cj4gPiA+ID4gPiA+ICsJCQl9 Cj4gPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+ICsJcmV0dXJuIDA7 Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgYXVk aW9fY29uZmlnX2dldF9tKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLCBpbnQKPiA+ID4gPiA+ID4g K3JhdGUpCj4gPiA+ID4gPiA+ICB7Cj4gPiA+ID4gPiA+ICAJaW50IGk7Cj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXVkX25jdHMpOyBpKyspIHsK PiA+ID4gPiA+ID4gLQkJaWYgKChyYXRlID09IGF1ZF9uY3RzW2ldLnNhbXBsZV9yYXRlKSAmJgo+ ID4gPiA+ID4gPiAtCQkJKG1vZGUtPmNsb2NrID09IGF1ZF9uY3RzW2ldLmNsb2NrKSkgewo+ID4g PiA+ID4gPiAtCQkJcmV0dXJuIGF1ZF9uY3RzW2ldLm47Cj4gPiA+ID4gPiA+ICsJaWYgKGludGVs X2NydGNfaGFzX3R5cGUoY3J0Yy0+Y29uZmlnLCBJTlRFTF9PVVRQVVRfRFApKSB7Cj4gPiA+ID4g PiA+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF1ZF9ubSk7IGkrKykgewo+ID4gPiA+ ID4gPiArCQkJaWYgKChyYXRlID09IGF1ZF9ubVtpXS5zYW1wbGVfcmF0ZSkgJiYKPiA+ID4gPiA+ ID4gKwkJCQkoY3J0Yy0+Y29uZmlnLT5wb3J0X2Nsb2NrID09Cj4gPiBhdWRfbm1baV0uY2xvY2sp KQo+ID4gPiA+ID4gewo+ID4gPiA+ID4gPiArCQkJCXJldHVybiBhdWRfbm1baV0ubTsKPiA+ID4g PiA+ID4gKwkJCX0KPiA+ID4gPiA+ID4gIAkJfQo+ID4gPiA+ID4gPiAgCX0KPiA+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gPiAgCXJldHVybiAwOwo+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiAtc3RhdGljIHVpbnQzMl90IGF1ZGlvX2NvbmZpZ19zZXR1cF9uX3JlZyhpbnQgbiwg dWludDMyX3QgdmFsKQo+ID4gPiA+ID4gPiArc3RhdGljIHVpbnQzMl90IGF1ZGlvX2NvbmZpZ19z ZXR1cF9uX3JlZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiA+ID4gPiA+ID4gKwkJCQkJIGlu dCBuLCB1aW50MzJfdCB2YWwpCj4gPiA+ID4gPiA+ICB7Cj4gPiA+ID4gPiA+ICAJaW50IG5fbG93 LCBuX3VwOwo+ID4gPiA+ID4gPiAgCXVpbnQzMl90IHRtcCA9IHZhbDsKPiA+ID4gPiA+ID4gQEAg LTE0NSwxNyArMTkxLDM4IEBAIHN0YXRpYyB1aW50MzJfdAo+ID4gPiA+ID4gPiBhdWRpb19jb25m aWdfc2V0dXBfbl9yZWcoaW50IG4sCj4gPiA+ID4gPiB1aW50MzJfdCB2YWwpCj4gPiA+ID4gPiA+ ICAJdG1wIHw9ICgobl91cCA8PCBBVURfQ09ORklHX1VQUEVSX05fU0hJRlQpIHwKPiA+ID4gPiA+ ID4gIAkJCShuX2xvdyA8PCBBVURfQ09ORklHX0xPV0VSX05fU0hJRlQpIHwKPiA+ID4gPiA+ID4g IAkJCUFVRF9DT05GSUdfTl9QUk9HX0VOQUJMRSk7Cj4gPiA+ID4gPiA+ICsJaWYgKGludGVsX2Ny dGNfaGFzX3R5cGUoY3J0Yy0+Y29uZmlnLCBJTlRFTF9PVVRQVVRfRFApKQo+ID4gPiA+ID4gPiAr CQl0bXAgfD0gQVVEX0NPTkZJR19OX1ZBTFVFX0lOREVYOwo+ID4gPiA+ID4gPiArCXJldHVybiB0 bXA7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyB1aW50 MzJfdCBhdWRpb19jb25maWdfc2V0dXBfbV9yZWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4g PiA+ID4gPiA+ICsJCQkJCSBpbnQgbSwgdWludDMyX3QgdmFsKQo+ID4gPiA+ID4gPiArewo+ID4g PiA+ID4gPiArCXVpbnQzMl90IHRtcCA9IHZhbDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAr CWlmICghaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjLT5jb25maWcsIElOVEVMX09VVFBVVF9EUCkp Cj4gPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJdG1w IHw9IG07Cj4gPiA+ID4gPiA+ICsJdG1wIHw9IEFVRF9NX0NUU19NX1ZBTFVFX0lOREVYOwo+ID4g PiA+ID4gPiArCXRtcCB8PSBBVURfTV9DVFNfTV9QUk9HX0VOQUJMRTsKPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiAgCXJldHVybiB0bXA7Cj4gPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+ICAvKiBjaGVjayB3aGV0aGVyIE4vQ1RTL00gbmVlZCBiZSBzZXQgbWFudWFsbHkgKi8g IHN0YXRpYyBib29sCj4gPiA+ID4gPiA+IGF1ZGlvX3JhdGVfbmVlZF9wcm9nKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjLAo+ID4gPiA+ID4gPiAtCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSkKPiA+ID4gPiA+ID4gKwkJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUKPiA+ID4gPiA+ICphZGp1c3RlZF9tb2RlKQo+ID4gPiA+ID4gPiAgewo+ID4gPiA+ID4gPiAt CWlmICgoKG1vZGUtPmNsb2NrID09IFRNRFNfMjk3TSkgfHwKPiA+ID4gPiA+ID4gLQkJIChtb2Rl LT5jbG9jayA9PSBUTURTXzI5Nk0pKSAmJgo+ID4gPiA+ID4gPiArCWlmICgoKGFkanVzdGVkX21v ZGUtPmNsb2NrID09IFRNRFNfMjk3TSkgfHwKPiA+ID4gPiA+ID4gKwkJIChhZGp1c3RlZF9tb2Rl LT5jbG9jayA9PSBUTURTXzI5Nk0pKSAmJgo+ID4gPiA+ID4gPiAgCQlpbnRlbF9jcnRjX2hhc190 eXBlKGNydGMtPmNvbmZpZywgSU5URUxfT1VUUFVUX0hETUkpKQo+ID4gPiA+ID4gPiAgCQlyZXR1 cm4gdHJ1ZTsKPiA+ID4gPiA+ID4gKwllbHNlIGlmICgoKGNydGMtPmNvbmZpZy0+cG9ydF9jbG9j ayA9PSBMQ181NDBNKSB8fAo+ID4gPiA+ID4gPiArCQkgICAoY3J0Yy0+Y29uZmlnLT5wb3J0X2Ns b2NrID09IExDXzE2Mk0pKSAmJgo+ID4gPiA+ID4gPiArCQkgIGludGVsX2NydGNfaGFzX3R5cGUo Y3J0Yy0+Y29uZmlnLCBJTlRFTF9PVVRQVVRfRFApKQo+ID4gPiA+ID4gPiArCQlyZXR1cm4gdHJ1 ZTsKPiA+ID4gPiA+ID4gIAllbHNlCj4gPiA+ID4gPiA+ICAJCXJldHVybiBmYWxzZTsKPiA+ID4g PiA+ID4gIH0KPiA+ID4gPiA+ID4gQEAgLTI4Nyw3ICszNTQsNyBAQCBzdGF0aWMgdm9pZCBoc3df YXVkaW9fY29kZWNfZW5hYmxlKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ID4gPiA+ID4gPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19w b3J0ID0KPiA+ID4gPiA+ID4gIAkJZW5jX3RvX2RpZ19wb3J0KCZlbmNvZGVyLT5iYXNlKTsKPiA+ ID4gPiA+ID4gIAllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RpZ19wb3J0LT5wb3J0Owo+ID4gPiA+ ID4gPiAtCXVpbnQzMl90IHRtcDsKPiA+ID4gPiA+ID4gKwl1aW50MzJfdCB0bXAsIG07Cj4gPiA+ ID4gPiA+ICAJaW50IGxlbiwgaTsKPiA+ID4gPiA+ID4gIAlpbnQgbiwgcmF0ZTsKPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gQEAgLTM0MywxNSArNDEwLDI1IEBAIHN0YXRpYyB2b2lkIGhzd19hdWRp b19jb2RlY19lbmFibGUoc3RydWN0Cj4gPiA+ID4gPiBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is Cj4gPiA+ID4gPiA+ICAJCQlEUk1fRVJST1IoImludmFsaWQgcG9ydDogJWRcbiIsIHBvcnQpOwo+ ID4gPiA+ID4gPiAgCQkJcmF0ZSA9IDA7Cj4gPiA+ID4gPiA+ICAJCX0KPiA+ID4gPiA+ID4gLQkJ biA9IGF1ZGlvX2NvbmZpZ19nZXRfbihhZGp1c3RlZF9tb2RlLCByYXRlKTsKPiA+ID4gPiA+ID4g KwkJbiA9IGF1ZGlvX2NvbmZpZ19nZXRfbihpbnRlbF9jcnRjLCBhZGp1c3RlZF9tb2RlLAo+ID4g cmF0ZSk7Cj4gPiA+ID4gPiA+ICAJCWlmIChuICE9IDApCj4gPiA+ID4gPiA+IC0JCQl0bXAgPSBh dWRpb19jb25maWdfc2V0dXBfbl9yZWcobiwgdG1wKTsKPiA+ID4gPiA+ID4gKwkJCXRtcCA9IGF1 ZGlvX2NvbmZpZ19zZXR1cF9uX3JlZyhpbnRlbF9jcnRjLCBuLAo+ID4gdG1wKTsKPiA+ID4gPiA+ ID4gIAkJZWxzZQo+ID4gPiA+ID4gPiAgCQkJRFJNX0RFQlVHX0tNUygibm8gc3VpdGFibGUgTiB2 YWx1ZSBpcyBmb3VuZFxuIik7Cj4gPiA+ID4gPiA+ICAJfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiAgCUk5MTVfV1JJVEUoSFNXX0FVRF9DRkcocGlwZSksIHRtcCk7Cj4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+ICsJLyogc2V0dXAgbSB2YWx1ZSBmb3IgRFAgKi8KPiA+ID4gPiA+ID4gKwlpZiAoaW50 ZWxfY3J0Y19oYXNfdHlwZShpbnRlbF9jcnRjLT5jb25maWcsIElOVEVMX09VVFBVVF9EUCkpCj4g PiB7Cj4gPiA+ID4gPiA+ICsJCW0gPSBhdWRpb19jb25maWdfZ2V0X20oaW50ZWxfY3J0YywgcmF0 ZSk7Cj4gPiA+ID4gPiA+ICsJCWlmIChtICE9IDApIHsKPiA+ID4gPiA+ID4gKwkJCXRtcCA9Cj4g PiBJOTE1X1JFQUQoSFNXX0FVRF9NX0NUU19FTkFCTEUocGlwZSkpOwo+ID4gPiA+ID4gPiArCQkJ dG1wID0gYXVkaW9fY29uZmlnX3NldHVwX21fcmVnKGludGVsX2NydGMsCj4gPiBtLCB0bXApOwo+ ID4gPiA+ID4gPiArCQkJSTkxNV9XUklURShIU1dfQVVEX01fQ1RTX0VOQUJMRShwaXBlKSwKPiA+ IHRtcCk7Cj4gPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ID4gIAltdXRleF91bmxvY2soJmRldl9wcml2LT5hdl9tdXRleCk7Cj4gPiA+ID4gPiA+ ICB9Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEBAIC02MzcsNyArNzE0LDcgQEAgc3RhdGljIGlu dAo+ID4gPiA+ID4gaTkxNV9hdWRpb19jb21wb25lbnRfc3luY19hdWRpb19yYXRlKHN0cnVjdCBk ZXZpY2UgKmRldiwKPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsK PiA+ID4gPiA+ID4gIAlzdHJ1Y3QgaTkxNV9hdWRpb19jb21wb25lbnQgKmFjb21wID0gZGV2X3By aXYtPmF1ZGlvX2NvbXBvbmVudDsKPiA+ID4gPiA+ID4gIAllbnVtIHBpcGUgcGlwZSA9IElOVkFM SURfUElQRTsKPiA+ID4gPiA+ID4gLQl1MzIgdG1wOwo+ID4gPiA+ID4gPiArCXUzMiB0bXAsIG07 Cj4gPiA+ID4gPiA+ICAJaW50IG47Cj4gPiA+ID4gPiA+ICAJaW50IGVyciA9IDA7Cj4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+IEBAIC02NDUsNyArNzIyLDggQEAgc3RhdGljIGludAo+ID4gPiA+ID4g aTkxNV9hdWRpb19jb21wb25lbnRfc3luY19hdWRpb19yYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwK PiA+ID4gPiA+ID4gIAlpZiAoIUlTX1NLWUxBS0UoZGV2X3ByaXYpICYmCj4gPiA+ID4gPiA+ICAJ ICAgICFJU19LQUJZTEFLRShkZXZfcHJpdikgJiYKPiA+ID4gPiA+ID4gIAkgICAgIUlTX0JST0FE V0VMTChkZXZfcHJpdikgJiYKPiA+ID4gPiA+ID4gLQkgICAgIUlTX0hBU1dFTEwoZGV2X3ByaXYp KQo+ID4gPiA+ID4gPiArCSAgICAhSVNfSEFTV0VMTChkZXZfcHJpdikgJiYKPiA+ID4gPiA+ID4g KwkgICAgIUlTX0JST1hUT04oZGV2X3ByaXYpKQo+ID4gPiA+ID4gPiAgCQlyZXR1cm4gMDsKPiA+ ID4gPiA+Cj4gPiA+ID4gPiBIQVNfRERJIHBlcmhhcHM/Cj4gPiA+ID4KPiA+ID4gPiBEbyB5b3Ug bWVhbiB3ZSBzaG91bGQgYWRkICImJiBIQVNfRERJIj8KPiA+ID4gPiBDb3VsZCB5b3UgcGxlYXNl IGdpdmUgbWUgbW9yZSBkZXRhaWxzPwo+ID4gPiA+Cj4gPiA+ID4gUmVnYXJkcywKPiA+ID4gPiBM aWJpbgo+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgCW11dGV4X2xv Y2soJmRldl9wcml2LT5hdl9tdXRleCk7IEBAIC02NTMsNyArNzMxLDggQEAgc3RhdGljCj4gPiA+ ID4gPiA+IGludAo+ID4gPiA+ID4gaTkxNV9hdWRpb19jb21wb25lbnRfc3luY19hdWRpb19yYXRl KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gPiA+ID4gIAlpbnRlbF9lbmNvZGVyID0gZGV2X3By aXYtPmRpZ19wb3J0X21hcFtwb3J0XTsKPiA+ID4gPiA+ID4gIAkvKiBpbnRlbF9lbmNvZGVyIG1p Z2h0IGJlIE5VTEwgZm9yIERQIE1TVCAqLwo+ID4gPiA+ID4gPiAgCWlmICghaW50ZWxfZW5jb2Rl ciB8fCAhaW50ZWxfZW5jb2Rlci0+YmFzZS5jcnRjIHx8Cj4gPiA+ID4gPiA+IC0JICAgIGludGVs X2VuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0hETUkpIHsKPiA+ID4gPiA+ID4gKwkgICAg KChpbnRlbF9lbmNvZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9IRE1JKSAmJgo+ID4gPiA+ID4g PiArCSAgICAgKGludGVsX2VuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0RQKSkpIHsKPiA+ ID4gPiA+ID4gIAkJRFJNX0RFQlVHX0tNUygibm8gdmFsaWQgcG9ydCAlY1xuIiwgcG9ydF9uYW1l KHBvcnQpKTsKPiA+ID4gPiA+ID4gIAkJZXJyID0gLUVOT0RFVjsKPiA+ID4gPiA+ID4gIAkJZ290 byB1bmxvY2s7Cj4gPiA+ID4gPiA+IEBAIC02ODEsNyArNzYwLDcgQEAgc3RhdGljIGludAo+ID4g PiA+ID4gaTkxNV9hdWRpb19jb21wb25lbnRfc3luY19hdWRpb19yYXRlKHN0cnVjdCBkZXZpY2Ug KmRldiwKPiA+ID4gPiA+ID4gIAkJZ290byB1bmxvY2s7Cj4gPiA+ID4gPiA+ICAJfQo+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiAtCW4gPSBhdWRpb19jb25maWdfZ2V0X24obW9kZSwgcmF0ZSk7Cj4g PiA+ID4gPiA+ICsJbiA9IGF1ZGlvX2NvbmZpZ19nZXRfbihjcnRjLCBtb2RlLCByYXRlKTsKPiA+ ID4gPiA+ID4gIAlpZiAobiA9PSAwKSB7Cj4gPiA+ID4gPiA+ICAJCURSTV9ERUJVR19LTVMoIlVz aW5nIGF1dG9tYXRpYyBtb2RlIGZvciBOIHZhbHVlIG9uCj4gPiA+ID4gPiBwb3J0ICVjXG4iLAo+ ID4gPiA+ID4gPiAgCQkJCQkgIHBvcnRfbmFtZShwb3J0KSk7Cj4gPiA+ID4gPiA+IEBAIC02OTMs OCArNzcyLDE3IEBAIHN0YXRpYyBpbnQKPiA+ID4gPiA+ID4gaTkxNV9hdWRpb19jb21wb25lbnRf c3luY19hdWRpb19yYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gIAkvKiAzLiBzZXQgdGhlIE4vQ1RTL00gKi8KPiA+ID4gPiA+ID4gIAl0bXAgPSBJOTE1X1JF QUQoSFNXX0FVRF9DRkcocGlwZSkpOwo+ID4gPiA+ID4gPiAtCXRtcCA9IGF1ZGlvX2NvbmZpZ19z ZXR1cF9uX3JlZyhuLCB0bXApOwo+ID4gPiA+ID4gPiArCXRtcCA9IGF1ZGlvX2NvbmZpZ19zZXR1 cF9uX3JlZyhjcnRjLCBuLCB0bXApOwo+ID4gPiA+ID4gPiAgCUk5MTVfV1JJVEUoSFNXX0FVRF9D RkcocGlwZSksIHRtcCk7Cj4gPiA+ID4gPiA+ICsJLyogc2V0dXAgbSB2YWx1ZSBmb3IgRFAgKi8K PiA+ID4gPiA+ID4gKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjLT5jb25maWcsIElOVEVM X09VVFBVVF9EUCkpIHsKPiA+ID4gPiA+ID4gKwkJbSA9IGF1ZGlvX2NvbmZpZ19nZXRfbShjcnRj LCByYXRlKTsKPiA+ID4gPiA+ID4gKwkJaWYgKG0gPT0gMCkKPiA+ID4gPiA+ID4gKwkJCWdvdG8g dW5sb2NrOwo+ID4gPiA+ID4gPiArCQl0bXAgPSBJOTE1X1JFQUQoSFNXX0FVRF9NX0NUU19FTkFC TEUocGlwZSkpOwo+ID4gPiA+ID4gPiArCQl0bXAgPSBhdWRpb19jb25maWdfc2V0dXBfbV9yZWco Y3J0YywgbSwgdG1wKTsKPiA+ID4gPiA+ID4gKwkJSTkxNV9XUklURShIU1dfQVVEX01fQ1RTX0VO QUJMRShwaXBlKSwgdG1wKTsKPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ICAgdW5sb2NrOgo+ID4gPiA+ID4gPiAgCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmF2X211dGV4 KTsKPiA+ID4gPiA+ID4gLS0KPiA+ID4gPiA+ID4gMS45LjEKPiA+ID4gPiA+Cj4gPiA+ID4gPiAt LQo+ID4gPiA+ID4gVmlsbGUgU3lyasOkbMOkCj4gPiA+ID4gPiBJbnRlbCBPVEMKPiA+IAo+ID4g LS0KPiA+IFZpbGxlIFN5cmrDpGzDpAo+ID4gSW50ZWwgT1RDCgotLSAKVmlsbGUgU3lyasOkbMOk CkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK