From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v6 3/6] drm/dp_mst: Start tracking per-port VCPI allocations Date: Tue, 27 Nov 2018 20:44:52 +0100 Message-ID: <20181127194452.GE4266@phenom.ffwll.local> References: <20181116005008.7243-1-lyude@redhat.com> <20181116005008.7243-4-lyude@redhat.com> <20181126210421.GQ4266@phenom.ffwll.local> <20181126212250.GS4266@phenom.ffwll.local> <8fe9a5708b2cafc74635688848ee082e54f739d5.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 265A46E10F for ; Tue, 27 Nov 2018 19:44:57 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id f23so20088678edb.3 for ; Tue, 27 Nov 2018 11:44:57 -0800 (PST) Content-Disposition: inline In-Reply-To: <8fe9a5708b2cafc74635688848ee082e54f739d5.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul Cc: nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBOb3YgMjcsIDIwMTggYXQgMTI6NDg6NTlQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBPbiBNb24sIDIwMTgtMTEtMjYgYXQgMjI6MjIgKzAxMDAsIERhbmllbCBWZXR0ZXIgd3Jv dGU6Cj4gPiBPbiBNb24sIE5vdiAyNiwgMjAxOCBhdCAxMDowNDoyMVBNICswMTAwLCBEYW5pZWwg VmV0dGVyIHdyb3RlOgo+ID4gPiBPbiBUaHUsIE5vdiAxNSwgMjAxOCBhdCAwNzo1MDowNVBNIC0w NTAwLCBMeXVkZSBQYXVsIHdyb3RlOgo+ID4gPiA+IFRoZXJlIGhhcyBiZWVuIGEgVE9ETyB3YWl0 aW5nIGZvciBxdWl0ZSBhIGxvbmcgdGltZSBpbgo+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3ku YzoKPiA+ID4gPiAKPiA+ID4gPiAJLyogV2UgY2Fubm90IHJlbHkgb24gcG9ydC0+dmNwaS5udW1f c2xvdHMgdG8gdXBkYXRlCj4gPiA+ID4gCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBh cyB0aGUgcG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKPiA+ID4gPiAJICogYnJhbmNo IGRldmljZSB3YXMgdW5wbHVnZ2VkLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBieSB0cmFja2luZwo+ ID4gPiA+IAkgKiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4gZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZSBpbnN0ZWFkIG9mCj4gPiA+ID4gCSAqIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRv IHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVsZWFzZS4KPiA+ID4gPiAJICovCj4gPiA+ID4g Cj4gPiA+ID4gVGhhdCdzIG5vdCB0aGUgb25seSByZWFzb24gd2Ugc2hvdWxkIGZpeCB0aGlzOiBm b3JjaW5nIHRoZSBkcml2ZXIgdG8KPiA+ID4gPiB0cmFjayB0aGUgVkNQSSBhbGxvY2F0aW9ucyB0 aHJvdWdob3V0IGEgc3RhdGUncyBhdG9taWMgY2hlY2sgaXMKPiA+ID4gPiBlcnJvciBwcm9uZSwg YmVjYXVzZSBpdCBtZWFucyB0aGF0IGV4dHJhIGNhcmUgaGFzIHRvIGJlIHRha2VuIHdpdGggdGhl Cj4gPiA+ID4gb3JkZXIgdGhhdCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIGFuZAo+ ID4gPiA+IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgYXJlIGNhbGxlZCBpbiBp biBvcmRlciB0byBlbnN1cmUKPiA+ID4gPiBpZGVtcG90ZW5jeS4gQ3VycmVudGx5IHRoZSBvbmx5 IGRyaXZlciBhY3R1YWxseSB1c2luZyB0aGVzZSBoZWxwZXJzLAo+ID4gPiA+IGk5MTUsIGRvZXNu J3QgZXZlbiBkbyB0aGlzIGNvcnJlY3RseTogbXVsdGlwbGUgLT5iZXN0X2VuY29kZXIoKSBjaGVj a3MKPiA+ID4gPiB3aXRoIGk5MTUncyBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdvdWxkIG5vdCBi ZSBpZGVtcG90ZW50IGFuZCB3b3VsZAo+ID4gPiA+IG92ZXItYWxsb2NhdGUgVkNQSSBzbG90cywg c29tZXRoaW5nIEkgbGVhcm5lZCB0cnlpbmcgdG8gaW1wbGVtZW50Cj4gPiA+ID4gZmFsbGJhY2sg cmV0cmFpbmluZyBpbiBNU1QuCj4gPiA+ID4gCj4gPiA+ID4gU286IHNpbXBsaWZ5IHRoaXMgd2hv bGUgbWVzcywgYW5kIHRlYWNoIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ID4g PiBhbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSB0byB0cmFjayB0aGUgVkNQ SSBhbGxvY2F0aW9ucyBmb3IKPiA+ID4gPiBlYWNoIHBvcnQuIFRoaXMgYWxsb3dzIHVzIHRvIGVu c3VyZSBpZGVtcG90ZW5jeSB3aXRob3V0IGhhdmluZyB0byByZWx5Cj4gPiA+ID4gb24gdGhlIGRy aXZlciBhcyBtdWNoLiBBZGRpdGlvbmFsbHk6IHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRvIGRv IGFueQo+ID4gPiA+IGtpbmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9l c24ndCBuZWVkIGl0IGZvciBpdCdzIG93bgo+ID4gPiA+IGludGVybmFsIHN0YXRlLgo+ID4gPiA+ IAo+ID4gPiA+IEFkZGl0aW9uYWxseTsgdGhpcyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWlj X2NoZWNrKCkgaGVscGVyIHdoaWNoCj4gPiA+ID4gbXVzdCBiZSB1c2VkIGJ5IGF0b21pYyBkcml2 ZXJzIHRvIHBlcmZvcm0gdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgbmV3Cj4gPiA+ID4gVkNQSSBh bGxvY2F0aW9ucyBpbmN1cnJlZCBieSBhIHN0YXRlLgo+ID4gPiA+IAo+ID4gPiA+IEFsc286IHVw ZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhhdCB0aGVz ZQo+ID4gPiA+IC9tdXN0LyBiZSBjYWxsZWQgYnkgL2FsbC8gYXRvbWljIGRyaXZlcnMgc3VwcG9y dGluZyBNU1QuCj4gPiA+ID4gCj4gPiA+ID4gQ2hhbmdlcyBzaW5jZSB2NjoKPiA+ID4gPiAgLSBL ZWVwIGEga3JlZiB0byBhbGwgb2YgdGhlIHBvcnRzIHdlIGhhdmUgYWxsb2NhdGlvbnMgb24uIFRo aXMgcmVxdWlyZWQKPiA+ID4gPiAgICBhIGdvb2QgYml0IG9mIGNoYW5naW5nIHRvIHdoZW4gd2Ug Y2FsbCBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKCksCj4gPiA+ID4gICAgbWFpbmx5IHRoYXQgd2Ug bmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBvbmx5IHJlZG8gVkNQSSBhbGxvY2F0aW9ucyBvbgo+ID4g PiA+ICAgIGFjdHVhbCBtb2RlIG9yIENSVEMgY2hhbmdlcywgbm90IGNydGNfc3RhdGUtPmFjdGl2 ZSBjaGFuZ2VzLgo+ID4gPiA+ICAgIEFkZGl0aW9uYWxseSwgd2Ugbm8gbG9uZ2VyIHRha2UgdGhl IHJlZ2lzdHJhdGlvbiBvZiB0aGUgRFJNIGNvbm5lY3Rvcgo+ID4gPiA+ICAgIGZvciBlYWNoIHBv cnQgaW50byBhY2NvdW50IGJlY2F1c2Ugc28gbG9uZyBhcyB3ZSBoYXZlIGEga3JlZiB0byB0aGUK PiA+ID4gPiAgICBwb3J0IGluIHRoZSBuZXcgb3IgcHJldmlvdXMgYXRvbWljIHN0YXRlLCB0aGUg Y29ubmVjdG9yIHdpbGwgc3RheQo+ID4gPiA+ICAgIHJlZ2lzdGVyZWQuCj4gPiA+IAo+ID4gPiBJ IHdyaXRlIGFuIGVudGlyZSBwaWxlIG9mIHNtYWxsIG5pdHBpdHMgKHN0aWxsIGluY2x1ZGVkIG1v c3Qgb2YgdGhlbQo+ID4gPiBiZWxvdyksIHVudGlsIEkgcmVhbGl6ZWQgdGhpcyBoZXJlIHdvbnQg d29yay4gRGVsYXlpbmcgdGhlIGNhbGwgdG8gZGVzdHJveQo+ID4gPiB0aGUgY29ubmVjdG9yICh3 ZWxsLCB1bnJlZ2lzdGVyIGl0IHJlYWxseSkgd3JlYWtzIHRoZSBkZXNpZ24gd2UndmUgY29tZSB1 cAo+ID4gPiB3aXRoIHRodXMgZmFyLCByZXN1bHRpbmcgaW4gbW9zdCBvZiBteSBjb21tZW50cyBo ZXJlLgo+ID4gPiAKPiA+ID4gSW5zdGVhZCwgYWxsIHdlIG5lZWQgdG8gZG8gaXMgZGVsYXkgdGhl IGtmcmVlKHBvcnQpIGF0IHRoZSBib3R0b20gb2YKPiA+ID4gZHJtX2RwX2Rlc3Ryb3lfcG9ydCgp LiBUaGUgdmNwaSBhbGxvY2F0aW9uIHN0cnVjdHVyZSBfb25seV8gbmVlZHMgdGhlCj4gPiA+IHBv aW50ZXIgdmFsdWUgdG8gc3RheSB2YWxpZCwgYXMgYSBsb29rdXAga2V5LiBJdCBkb2Vzbid0IGNh cmUgYXQgYWxsIGFib3V0Cj4gPiA+IGFueXRoaW5nIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGVyZS4g U28gdGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBkZWxheSBpcwo+ID4gPiB0aGUga2ZyZWUuIEkg dGhpbmsgdGhlIHNpbXBsZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gYWRkIGEgMm5kIGty ZWYKPiA+ID4gKHBvcnQtPmtmcmVlX3JlZiBvciBzb21ldGhpbmcgbGlrZSB0aGF0KSwgd2l0aCBv biByZWZlcmVuY2UgaGVsZCBieSB0aGUKPiA+ID4gcG9ydCBpdHNlbGYgKHJlbGVhc2VkIGluIGRy bV9kcF9kZXN0cm95X3BvcnQpLCBhbmQgdGhlIG90aGVyIG9uZSBoZWxkCj4gPiA+IGFzLW5lZWRl ZCBieSB0aGUgdmNwaSBhbGxvY2F0aW9uIGxpc3RzLgo+ID4gPiAKPiA+ID4gSSB0aGluayBpZiB3 ZSBnbyB3aXRoIHRoaXMgZGVzaWduIGluc3RlYWQgb2YgcmV0cm9maXR0aW5nIGEgc2VtYW50aWMK PiA+ID4gY2hhbmdlIG9mIHRoZSBwb3J0IGxpZmV0aW1lIGl0c2VsZiwgYWxsIHRoZSBjb21wbGlj YXRpb25zIEkgY29tcGxhaW4gYWJvdXQKPiA+ID4gYmVsb3cgc2hvdWxkIGRpc2FwcGVhci4KPiA+ IAo+ID4gSW4gdGhlIGFib3ZlIEkgbWVhbnQgZHJtX2RwX2Rlc3Ryb3lfcG9ydCBvciBkcm1fZHBf ZGVzdHJveV9jb25uZWN0b3Jfd29yay4KPiA+IAo+ID4gQXNpZGU6IEkgdGhpbmsgY3JlYXRpbmcg YSBrcmVmIGZvciB0aGUgZmluYWwga2ZyZWUgd291bGQgYWxzbyBzb2x2ZSBhCj4gPiBidW5jaCBv ZiBvdGhlciBpc3N1ZXMgaW4gYSBtdWNoIG5lYXRlciB3YXk6IEluCj4gPiAKPiA+IGNvbW1pdCBm MDM4YzViOTlmYzEzMzJmNTU4YjQ5NWQxMzZkNGY0MzNlZTY1Y2FhCj4gPiBBdXRob3I6IEx5dWRl IFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+Cj4gPiBEYXRlOiAgIFR1ZSBOb3YgMTMgMTc6NDY6MTQg MjAxOCAtMDUwMAo+ID4gCj4gPiAgICAgZHJtL2RwX21zdDogU2tpcCB2YWxpZGF0aW5nIHBvcnRz IGR1cmluZyBkZXN0cnVjdGlvbiwganVzdCByZWYKPiA+IAo+ID4gd2UgY291bGQgdXNlIHRoYXQg a2ZyZWUgcmVmZXJlbmNlIHRvIG1ha2Ugc3VyZSB0aGUgcG9ydCBwb2ludGVyIGlzIGFsaXZlLgo+ ID4gVGhpcyBvZiBjb3Vyc2UgbWVhbnMgdGhhdCBkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDEo KSB3b3VsZCBhbHNvIG5lZWQgdG8KPiA+IHVzZSB0aGUga2ZyZWUgcmVmZXJlbmNlIGZvciB0aGUg dmNwaSBhbGxvY2F0aW9ucy4gQW5kIHByb2JhYmx5IGV2ZXJ5d2hlcmUKPiA+IGVsc2UgKGUuZy4g aW4geW91ciBub3V2ZWF1IHNlcmllcyBmb3IgcGF5bG9hZCBpbmZvcm1hdGlvbikuCj4gPiAKPiA+ IFRoYXQgd291bGQgZ2l2ZSB1cyBhIHZlcnkgY2xlYXIgc2VwYXJhdGlvbiBvdmVyYWxsIGJldHdl ZW4gInBvcnQgY2FuIHN0aWxsCj4gPiBiZSB1c2VkIGJlY2F1c2UgaXQncyBub3QgeWV0IHVucGx1 Z2dlZCIgdnMuICJwb3J0IG9ubHkgaGFuZ3MgYXJvdW5kCj4gPiBiZWNhdXNlIGEgYnVuY2ggb2Yg dmNwaSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgcGF5bG9hZCB0aGluZ3MgdXBzdHJlYW0gb2YKPiA+ IHRoZSBwb3J0IG1pZ2h0IHN0aWxsIG5lZWQgdGhlIHBvcnQgbG9va3VwIGtleSB0byBmcmVlIHJl c291cmNlcyIuIEluc3RlYWQKPiA+IG9mIGFnYWluIHNwcmlua2xpbmcgY29tcGxpY2F0ZWQgY29u ZGl0aW9ucyBhbmQgbWFnaWMgdHJpY2tzIGFsbCBvdmVyIHRoZQo+ID4gY29kZSB0byBmaWd1cmUg b3V0IHdoZXRoZSB3ZSBzaG91bGQgYWxsb3cgdGhlIGdldF92YWxpZGF0ZV9wb3J0IHRvIHN1Y2Nl ZWQKPiA+IG9yIG5vdCwgb3IgdGhlIG1vZGVzZXQgdG8gc3VjY2VlZCBvciBub3QuCj4gCj4gbWht LCBJJ3ZlIGJlZW4gZXhwZXJpbWVudGluZyB3aXRoIHRoaXMgYW5kIEkgdGhpbmsgSSBhZ3JlZSB0 aGlzIGlzIGRlZmluaXRlbHkKPiB0aGUgcmlnaHQgc29sdXRpb24gdG8gZ28gd2l0aC4gSXQnbGwg ZW5kIHVwIGRlY29tcGxpY2F0aW5nIGEgbG90IG9mIHRoaXMgOikKClNpbmNlIGl0IGxvb2tzIGxp a2Ugd2UnbGwgdXNlIHRoZSBrZnJlZV9yZWYgcXVpdGUgYSBiaXQsIHdyYXBwZXJzIGZvciB0aGF0 CndvdWxkIGJlIHVzZWZ1bC4gU3RpbGwgbm90IHN1cmUgd2hhdCB0byBjYWxsIHRob3NlLCBiZXN0 IEkgY291bGQgY29tZSB1cAp3aXRoIGlzIGRwX3BvcnRfbWFsbG9jX2dldC9wdXQuIFBsdXMgYSBj b21tZW50IGV4cGxhaW5pbmcgd2hhdCBpdCBkb2VzLgpJdCdzIGdvaW5nIHRvIGJlIGEgYml0IG9m IHd0Zi1pcy10aGlzIG5vIG1hdHRlciB3aGF0IDotLwotRGFuaWVsCgo+ID4gLURhbmllbAo+ID4g Cj4gPiA+IFBpbGVzIG9mIGNvbW1lbnRzIGJlbG93Lgo+ID4gPiAKPiA+ID4gQ2hlZXJzLCBEYW5p ZWwKPiA+ID4gCj4gPiA+ID4gIC0gVXNlIHRoZSBzbWFsbCBjaGFuZ2VzIHRvIGRybV9kcF9wdXRf cG9ydCgpIHRvIGFkZCBldmVuIG1vcmUgZXJyb3IKPiA+ID4gPiAgICBjaGVja2luZyB0byBtYWtl IG1pc3VzYWdlIG9mIHRoZSBoZWxwZXJzIG1vcmUgb2J2aW91cy4gSSBhZGRlZCB0aGlzCj4gPiA+ ID4gICAgYWZ0ZXIgaGF2aW5nIHRvIGNoYXNlIGRvd24gdmFyaW91cyB1c2UtYWZ0ZXItZnJlZSBj b25kaXRpb25zIHRoYXQKPiA+ID4gPiAgICBzdGFydGVkIHBvcHBpbmcgdXAgZnJvbSB0aGUgbmV3 IGhlbHBlcnMgc28gbm8gb25lIGVsc2UgaGFzIHRvCj4gPiA+ID4gICAgdHJvdWJsZXNob290IHRo YXQuCj4gPiA+ID4gIC0gTW92ZSBzb21lIGFjY2lkZW50YWwgRFJNX0RFQlVHX0tNUygpIGNhbGxz IHRvIERSTV9ERUJVR19BVE9NSUMoKQo+ID4gPiA+ICAtIFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFn YWluLCBub3RlIHRoYXQgZmluZC9yZWxlYXNlKCkgc2hvdWxkIGJvdGggbm90Cj4gPiA+ID4gYmUK PiA+ID4gPiAgICBjYWxsZWQgb24gdGhlIHNhbWUgcG9ydCBpbiBhIHNpbmdsZSBhdG9taWMgY2hl Y2sgcGhhc2UgKGJ1dCBtdWx0aXBsZQo+ID4gPiA+ICAgIGNhbGxzIHRvIG9uZSBvciB0aGUgb3Ro ZXIgaXMgT0spCj4gPiA+ID4gCj4gPiA+ID4gQ2hhbmdlcyBzaW5jZSB2NDoKPiA+ID4gPiAgLSBE b24ndCBza2lwIHRoZSBhdG9taWMgY2hlY2tzIGZvciBWQ1BJIGFsbG9jYXRpb25zIGlmIG5vIG5l dyBWQ1BJCj4gPiA+ID4gICAgYWxsb2NhdGlvbnMgaGFwcGVuIGluIGEgc3RhdGUuIFRoaXMgbWFr ZXMgdGhlIG5leHQgY2hhbmdlIEknbSBhYm91dAo+ID4gPiA+ICAgIHRvIGxpc3QgaGVyZSBhIGxv dCBlYXNpZXIgdG8gaW1wbGVtZW50Lgo+ID4gPiA+ICAtIERvbid0IGlnbm9yZSBWQ1BJIGFsbG9j YXRpb25zIG9uIGRlc3Ryb3llZCBwb3J0cywgaW5zdGVhZCBlbnN1cmUgdGhhdAo+ID4gPiA+ICAg IHdoZW4gcG9ydHMgYXJlIGRlc3Ryb3llZCBhbmQgc3RpbGwgaGF2ZSBWQ1BJIGFsbG9jYXRpb25z IGluIHRoZQo+ID4gPiA+ICAgIHRvcG9sb2d5IHN0YXRlLCB0aGUgb25seSBzdGF0ZSBjaGFuZ2Vz IGFsbG93ZWQgYXJlIHJlbGVhc2luZyBzYWlkCj4gPiA+ID4gICAgcG9ydHMnIFZDUEkuIFRoaXMg cHJldmVudHMgYSBzdGF0ZSB3aXRoIGEgbWl4IG9mIFZDUEkgYWxsb2NhdGlvbnMKPiA+ID4gPiAg ICBmcm9tIGRlc3Ryb3llZCBwb3J0cywgYW5kIGFsbG9jYXRpb25zIGZyb20gdmFsaWQgcG9ydHMu Cj4gPiA+ID4gCj4gPiA+ID4gQ2hhbmdlcyBzaW5jZSB2MzoKPiA+ID4gPiAgLSBEb24ndCByZWxl YXNlIFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlIHRvcG9sb2d5IHN0YXRlIGltbWVkaWF0ZWx5IGlu Cj4gPiA+ID4gICAgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSwgaW5zdGVhZCBt YXJrIHRoZW0gYXMgMCBhbmQgc2tpcAo+ID4gPiA+ICAgIG92ZXIgdGhlbSBpbiBkcm1fZHBfbXN0 X2R1cGxpY2F0ZV9zdGF0ZSgpLiBUaGlzIG1ha2VzIGl0IHNvCj4gPiA+ID4gICAgZHJtX2RwX2F0 b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSBpcyBzdGlsbCBpZGVtcG90ZW50IHdoaWxlIGFsc28K PiA+ID4gPiAgICB0aHJvd2luZyB3YXJuaW5ncyBpZiB0aGUgZHJpdmVyIG1lc3NlcyB1cCBpdCdz IGJvb2sga2VlcGluZyBhbmQgdHJpZXMKPiA+ID4gPiAgICB0byByZWxlYXNlIFZDUEkgc2xvdHMg b24gYSBwb3J0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmUtZXhpc3RpbmcKPiA+ID4gPiAgICBW Q1BJIGFsbG9jYXRpb24gLSBkYW52ZXQKPiA+ID4gPiAgLSBDaGFuZ2UgbXN0X3N0YXRlL3N0YXRl IGluIHNvbWUgZGVidWdnaW5nIG1lc3NhZ2VzIHRvICJtc3Qgc3RhdGUiCj4gPiA+ID4gCj4gPiA+ ID4gQ2hhbmdlcyBzaW5jZSB2MjoKPiA+ID4gPiAgLSBVc2Uga21lbWR1cCgpIGZvciBkdXBsaWNh dGluZyBNU1Qgc3RhdGUgLSBkYW52ZXQKPiA+ID4gPiAgLSBNb3ZlIHBvcnQgdmFsaWRhdGlvbiBv dXQgb2YgZHVwbGljYXRlIHN0YXRlIGNhbGxiYWNrIC0gZGFudmV0Cj4gPiA+ID4gIC0gSGFuZGxl IGxvb3BpbmcgdGhyb3VnaCBNU1QgdG9wb2xvZ3kgc3RhdGVzIGluCj4gPiA+ID4gICAgZHJtX2Rw X21zdF9hdG9taWNfY2hlY2soKSBzbyB0aGUgZHJpdmVyIGRvZXNuJ3QgaGF2ZSB0byBkbyBpdAo+ ID4gPiA+ICAtIEZpeCBkb2N1bWVudGF0aW9uIGluIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Ns b3RzKCkKPiA+ID4gPiAgLSBNb3ZlIHRoZSBhdG9taWMgY2hlY2sgZm9yIGVhY2ggaW5kaXZpZHVh bCB0b3BvbG9neSBzdGF0ZSBpbnRvIGl0J3MKPiA+ID4gPiAgICBvd24gZnVuY3Rpb24sIHJlZHVj ZXMgaW5kZW50aW5nCj4gPiA+ID4gIC0gRG9uJ3QgY29uc2lkZXIgInN0YWxlIiBNU1QgcG9ydHMg d2hlbiBjYWxjdWxhdGluZyB0aGUgYmFuZHdpZHRoCj4gPiA+ID4gICAgcmVxdWlyZW1lbnRzLiBU aGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9yaWdpbmFsbHkgd2UgcmVsaWVkIG9uIHRoZQo+ID4gPiA+ ICAgIHN0YXRlIGR1cGxpY2F0aW9uIGZ1bmN0aW9ucyB0byBwcnVuZSBhbnkgc3RhbGUgcG9ydHMg ZnJvbSB0aGUgbmV3Cj4gPiA+ID4gICAgc3RhdGUsIHdoaWNoIHdvdWxkIHByZXZlbnQgdXMgZnJv bSBpbmNvcnJlY3RseSBjb25zaWRlcmluZyB0aGVpcgo+ID4gPiA+ICAgIGJhbmR3aWR0aCByZXF1 aXJlbWVudHMgYWxvbmdzaWRlIGxlZ2l0aW1hdGUgbmV3IHBheWxvYWRzLgo+ID4gPiA+ICAtIEFk ZCBmdW5jdGlvbiByZWZlcmVuY2VzIGluIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3Rz KCkgLQo+ID4gPiA+IGRhbnZldAo+ID4gPiA+ICAtIEFubm90YXRlIGF0b21pYyBWQ1BJIGFuZCBh dG9taWMgY2hlY2sgZnVuY3Rpb25zIHdpdGggX19tdXN0X2NoZWNrCj4gPiA+ID4gICAgLSBkYW52 ZXQKPiA+ID4gPiAKPiA+ID4gPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ID4gPiA+ICAtIERvbid0IHVz ZSB0aGUgbm93LXJlbW92ZWQgLT5hdG9taWNfY2hlY2soKSBmb3IgcHJpdmF0ZSBvYmplY3RzIGhv b2ssCj4gPiA+ID4gICAganVzdCBnaXZlIGRyaXZlcnMgYSBmdW5jdGlvbiB0byBjYWxsIHRoZW1z ZWx2ZXMKPiA+ID4gPiAKPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUBy ZWRoYXQuY29tPgo+ID4gPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xs LmNoPgo+ID4gPiA+IC0tLQo+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3Bv bG9neS5jIHwgMjk0ICsrKysrKysrKysrKysrKysrKysrKysrLS0tCj4gPiA+ID4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgfCAgIDQgKwo+ID4gPiA+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyAgIHwgIDY0ICsrKy0tLQo+ID4gPiA+ICBpbmNsdWRl L2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDI0ICsrLQo+ID4gPiA+ICA0IGZpbGVz IGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKPiA+ID4gPiAKPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4gPiA+IGlu ZGV4IDAwZmJlN2EyNjk5ZC4uMTgzZDBlODMyY2VkIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiA+ID4gQEAgLTI2MTcsMjEgKzI2MTcsNDIg QEAgc3RhdGljIGludCBkcm1fZHBfaW5pdF92Y3BpKHN0cnVjdAo+ID4gPiA+IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gIC8qKgo+ID4g PiA+IC0gKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIC0gRmluZCBhbmQgYWRkIHZj cGkgc2xvdHMgdG8gdGhlCj4gPiA+ID4gc3RhdGUKPiA+ID4gPiArICogZHJtX2RwX2F0b21pY19m aW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFkZCBWQ1BJIHNsb3RzIHRvIHRoZQo+ID4gPiA+ IHN0YXRlCj4gPiA+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQo+ID4gPiA+ICAg KiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQKPiA+ID4gPiAgICogQHBv cnQ6IHBvcnQgdG8gZmluZCB2Y3BpIHNsb3RzIGZvcgo+ID4gPiA+ICAgKiBAcGJuOiBiYW5kd2lk dGggcmVxdWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ID4gPiA+ICAgKgo+ID4gPiA+IC0gKiBS RVRVUk5TOgo+ID4gPiA+IC0gKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWljIHN0YXRlIGFzc2ln bmVkIGZvciB0aGlzIHBvcnQgb3IgZXJyb3IKPiA+ID4gPiArICogQWxsb2NhdGVzIFZDUEkgc2xv dHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgVkNQSQo+ID4gPiA+IGFsbG9jYXRp b25zIGl0Cj4gPiA+ID4gKyAqIG1heSBoYXZlIGhhZC4gQW55IGF0b21pYyBkcml2ZXJzIHdoaWNo IHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzCj4gPiA+ID4gZnVuY3Rpb24KPiA+ID4gPiArICog aW4gdGhlaXIgJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKSBjYWxsYmFj ayB0byBjaGFuZ2UKPiA+ID4gPiB0aGUKPiA+ID4gPiArICogY3VycmVudCBWQ1BJIGFsbG9jYXRp b24gZm9yIHRoZSBuZXcgc3RhdGUsIGJ1dCBvbmx5IHdoZW4KPiA+ID4gPiArICogJmRybV9jcnRj X3N0YXRlLm1vZGVfY2hhbmdlZCBvciAmZHJtX2NydGNfc3RhdGUuY29ubmVjdG9yc19jaGFuZ2Vk Cj4gPiA+ID4gaXMgc2V0Cj4gPiA+ID4gKyAqIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGgg dXNlcnNwYWNlIGFwcGxpY2F0aW9ucyB0aGF0IHN0aWxsIHVzZQo+ID4gPiA+IHRoZQo+ID4gPiA+ ICsgKiBsZWdhY3kgbW9kZXNldHRpbmcgVUFQSS4KPiA+ID4gPiArICoKPiA+ID4gPiArICogQWxs b2NhdGlvbnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWluc3QgdGhl Cj4gPiA+ID4gYmFuZHdpZHRoCj4gPiA+ID4gKyAqIHJlc3RyYWludHMgb2YgQG1nciB1bnRpbCB0 aGUgZHJpdmVyIGNhbGxzIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkuCj4gPiA+ID4gKyAqCj4g PiA+ID4gKyAqIEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG11 bHRpcGxlIHRpbWVzIG9uIHRoZQo+ID4gPiA+IHNhbWUKPiA+ID4gPiArICogQHBvcnQgYXMgbmVl ZGVkLiBJdCBpcyBub3QgT0sgaG93ZXZlciwgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFuZAo+ID4g PiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGluIHRoZSBzYW1lIGF0 b21pYyBjaGVjayBwaGFzZS4KPiA+ID4gPiArICoKPiA+ID4gPiArICogU2VlIGFsc286Cj4gPiA+ ID4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkKPiA+ID4gPiArICogZHJt X2RwX21zdF9hdG9taWNfY2hlY2soKQo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBSZXR1cm5zOgo+ ID4gPiA+ICsgKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWljIHN0YXRlIGFzc2lnbmVkIGZvciB0 aGlzIHBvcnQsIG9yIGEKPiA+ID4gPiBuZWdhdGl2ZSBlcnJvcgo+ID4gPiA+ICsgKiBjb2RlIGlm IHRoZSBwb3J0IG5vIGxvbmdlciBleGlzdHMKPiA+ID4gPiAgICovCj4gPiA+ID4gIGludCBkcm1f ZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gPiA+ID4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4g PiA+ICAJCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKQo+ID4gPiA+ ICB7Cj4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xvZ3lf c3RhdGU7Cj4gPiA+ID4gLQlpbnQgcmVxX3Nsb3RzOwo+ID4gPiA+ICsJc3RydWN0IGRybV9kcF92 Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZjcGkgPSBOVUxMOwo+ID4gPiA+ICsJaW50IHByZXZfc2xv dHMsIHJlcV9zbG90cywgcmV0Owo+ID4gPiA+ICAKPiA+ID4gPiAgCXRvcG9sb2d5X3N0YXRlID0g ZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOwo+ID4gPiA+ICAJ aWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4gPiA+ID4gQEAgLTI2NDAsMjAgKzI2NjEsNjAg QEAgaW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdAo+ID4gPiA+IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ICAJcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVk X3BvcnRfcmVmKG1nciwgcG9ydCk7Cj4gPiA+ID4gIAlpZiAocG9ydCA9PSBOVUxMKQo+ID4gPiA+ ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+IC0JcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBi biwgbWdyLT5wYm5fZGl2KTsKPiA+ID4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgcmVx PSVkLCBhdmFpbD0lZFxuIiwKPiA+ID4gPiAtCQkJcmVxX3Nsb3RzLCB0b3BvbG9neV9zdGF0ZS0+ YXZhaWxfc2xvdHMpOwo+ID4gPiA+ICAKPiA+ID4gPiAtCWlmIChyZXFfc2xvdHMgPiB0b3BvbG9n eV9zdGF0ZS0+YXZhaWxfc2xvdHMpIHsKPiA+ID4gPiAtCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7 Cj4gPiA+ID4gLQkJcmV0dXJuIC1FTk9TUEM7Cj4gPiA+ID4gKwl0b3BvbG9neV9zdGF0ZS0+dmNw aV9hbGxvY2F0ZWQgPSB0cnVlOwo+ID4gPiA+ICsKPiA+ID4gPiArCS8qIEZpbmQgdGhlIGN1cnJl bnQgYWxsb2NhdGlvbiBmb3IgdGhpcyBwb3J0LCBpZiBhbnkgKi8KPiA+ID4gPiArCWxpc3RfZm9y X2VhY2hfZW50cnkocG9zLCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gPiA+ID4g KwkJaWYgKHBvcy0+cG9ydCA9PSBwb3J0KSB7Cj4gPiA+ID4gKwkJCXZjcGkgPSBwb3M7Cj4gPiA+ ID4gKwkJCXByZXZfc2xvdHMgPSB2Y3BpLT52Y3BpOwo+ID4gPiA+ICsKPiA+ID4gPiArCQkJLyoK PiA+ID4gPiArCQkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCB1bmxlc3MgdGhlIGRyaXZl ciB0cmllcwo+ID4gPiA+ICsJCQkgKiByZWxlYXNpbmcgYW5kIGFsbG9jYXRpbmcgdGhlIHNhbWUg VkNQSSBhbGxvY2F0aW9uLAo+ID4gPiA+ICsJCQkgKiB3aGljaCBpcyBhbiBlcnJvcgo+ID4gPiA+ ICsJCQkgKi8KPiA+ID4gPiArCQkJaWYgKFdBUk5fT04oIXByZXZfc2xvdHMpKSB7Cj4gPiA+ID4g KwkJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxvY2F0ZSBhbmQgcmVsZWFzZSBWQ1BJIG9uCj4gPiA+ ID4gW01TVCBQT1JUOiVwXSBpbiB0aGUgc2FtZSBzdGF0ZVxuIiwKPiA+ID4gPiArCQkJCQkgIHBv cnQpOwo+ID4gPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwkJCX0KPiA+ID4gCj4g PiA+IEFsbG93aW5nIGF0b21pYyBjaGFuZ2VzIHRvIG91dHB1dCBzdGF0ZSAobGlrZSBkaXNhYmxp bmcgaXQgb24gb25lIGNydGMsCj4gPiA+IGFuZCB0aGVuIGVuYWJsaW5nIG9uIHRoZSBvdGhlciwg dGh1cyBib3RoIHJlbGVhc2luZyBhbmQgcmUtYWxsb2NhdGluZyB0aGUKPiA+ID4gdmNwaSBpbiBv bmUgZ28pIGlzIGtpbmRhIHRoZSBwb2ludCBvZiBhdG9taWMuIFNvIGRlZmluaXRlbHkgY2FuJ3Qg RUlOVkFMCj4gPiA+IGhlcmUuCj4gPiA+IAo+ID4gPiBTb3VuZHMgbGlrZSB3ZSBuZWVkIG1vcmUg dGVzdGNhc2VzIGluIGlndD8KPiA+ID4gCj4gPiA+ID4gKwo+ID4gPiA+ICsJCQlicmVhazsKPiA+ ID4gPiArCQl9Cj4gPiA+ID4gIAl9Cj4gPiA+ID4gKwlpZiAoIXZjcGkpCj4gPiA+ID4gKwkJcHJl dl9zbG90cyA9IDA7Cj4gPiA+ID4gIAo+ID4gPiA+IC0JdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Ns b3RzIC09IHJlcV9zbG90czsKPiA+ID4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgYXZh aWw9JWQiLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gPiA+ICsJcmVxX3Nsb3Rz ID0gRElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5fZGl2KTsKPiA+ID4gPiArCj4gPiA+ID4gKwlE Uk1fREVCVUdfQVRPTUlDKCJbQ09OTkVDVE9SOiVkOiVzXSBbTVNUIFBPUlQ6JXBdIFZDUEkgJWQg LT4gJWRcbiIsCj4gPiA+ID4gKwkJCSBwb3J0LT5jb25uZWN0b3ItPmJhc2UuaWQsIHBvcnQtPmNv bm5lY3Rvci0+bmFtZSwKPiA+ID4gPiArCQkJIHBvcnQsIHByZXZfc2xvdHMsIHJlcV9zbG90cyk7 Cj4gPiA+ID4gKwo+ID4gPiA+ICsJLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3Rh dGUgKi8KPiA+ID4gPiArCWlmICghdmNwaSkgewo+ID4gPiA+ICsJCXZjcGkgPSBremFsbG9jKHNp emVvZigqdmNwaSksIEdGUF9LRVJORUwpOwo+ID4gPiA+ICsJCWlmICghdmNwaSkgewo+ID4gPiA+ ICsJCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiA+ICsJCQlnb3RvIG91dDsKPiA+ID4gPiArCQl9Cj4g PiA+ID4gIAo+ID4gPiA+ICsJCXZjcGktPnBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0 X3JlZihtZ3IsIHBvcnQpOwo+ID4gPiA+ICsJCWlmICghdmNwaS0+cG9ydCkgewo+ID4gPiA+ICsJ CQlyZXQgPSAtRUlOVkFMOwo+ID4gPiA+ICsJCQlrZnJlZSh2Y3BpKTsKPiA+ID4gPiArCQkJZ290 byBvdXQ7Cj4gPiA+ID4gKwkJfQo+ID4gPiA+ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmdG9w b2xvZ3lfc3RhdGUtPnZjcGlzKTsKPiA+ID4gPiArCX0KPiA+ID4gPiArCXZjcGktPnZjcGkgPSBy ZXFfc2xvdHM7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0ID0gcmVxX3Nsb3RzOwo+ID4gPiA+ICtv dXQ6Cj4gPiA+ID4gIAlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ID4gLQlyZXR1cm4gcmVx X3Nsb3RzOwo+ID4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gPiAgfQo+ID4gPiA+ICBFWFBPUlRf U1lNQk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKTsKPiA+ID4gPiAgCj4gPiA+ID4g QEAgLTI2NjEsMzEgKzI3MjIsNjYgQEAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRf dmNwaV9zbG90cyk7Cj4gPiA+ID4gICAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3Rz KCkgLSBSZWxlYXNlIGFsbG9jYXRlZCB2Y3BpIHNsb3RzCj4gPiA+ID4gICAqIEBzdGF0ZTogZ2xv YmFsIGF0b21pYyBzdGF0ZQo+ID4gPiA+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBm b3IgdGhlIHBvcnQKPiA+ID4gPiAtICogQHNsb3RzOiBudW1iZXIgb2YgdmNwaSBzbG90cyB0byBy ZWxlYXNlCj4gPiA+ID4gKyAqIEBwb3J0OiBUaGUgcG9ydCB0byByZWxlYXNlIHRoZSBWQ1BJIHNs b3RzIGZyb20KPiA+ID4gPiAgICoKPiA+ID4gPiAtICogUkVUVVJOUzoKPiA+ID4gPiAtICogMCBp ZiBAc2xvdHMgd2VyZSBhZGRlZCBiYWNrIHRvICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLQo+ ID4gPiA+ID5hdmFpbF9zbG90cyBvcgo+ID4gPiA+IC0gKiBuZWdhdGl2ZSBlcnJvciBjb2RlCj4g PiA+ID4gKyAqIFJlbGVhc2VzIGFueSBWQ1BJIHNsb3RzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRl ZCB0byBhIHBvcnQgaW4gdGhlCj4gPiA+ID4gYXRvbWljCj4gPiA+ID4gKyAqIHN0YXRlLiBBbnkg YXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24K PiA+ID4gPiBpbgo+ID4gPiA+ICsgKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3Mu YXRvbWljX2NoZWNrKCkgY2FsbGJhY2sgd2hlbiB0aGUKPiA+ID4gPiArICogY29ubmVjdG9yIHdp bGwgbm8gbG9uZ2VyIGhhdmUgVkNQSSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzIENSVEMK PiA+ID4gPiB3YXMKPiA+ID4gPiArICogcmVtb3ZlZCkgd2hlbiBpdCBoYWQgVkNQSSBhbGxvY2F0 ZWQgaW4gdGhlIHByZXZpb3VzIGF0b21pYyBzdGF0ZS4KPiA+ID4gPiArICoKPiA+ID4gPiArICog SXQgaXMgT0sgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgQHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9t IHRoZQo+ID4gPiA+IHN5c3RlbS4KPiA+ID4gPiArICogQWRkaXRpb25hbGx5LCBpdCBpcyBPSyB0 byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgb24gdGhlCj4gPiA+ID4gc2FtZQo+ ID4gPiA+ICsgKiBAcG9ydCBhcyBuZWVkZWQuIEl0IGlzIG5vdCBPSyBob3dldmVyLCB0byBjYWxs IHRoaXMgZnVuY3Rpb24gYW5kCj4gPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Ns b3RzKCkgb24gdGhlIHNhbWUgQHBvcnQgaW4gYSBzaW5nbGUgYXRvbWljCj4gPiA+ID4gY2hlY2sK PiA+ID4gPiArICogcGhhc2UuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFNlZSBhbHNvOgo+ID4g PiA+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gPiA+ID4gKyAqIGRybV9k cF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ID4gPiArICoKPiA+ID4gPiArICogUmV0dXJuczoKPiA+ ID4gPiArICogMCBpZiBhbGwgc2xvdHMgZm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVkIGJhY2sgdG8K PiA+ID4gPiArICogJmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUuYXZhaWxfc2xvdHMgb3IgbmVn YXRpdmUgZXJyb3IgY29kZQo+ID4gPiA+ICAgKi8KPiA+ID4gPiAgaW50IGRybV9kcF9hdG9taWNf cmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4g PiAgCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4g LQkJCQkgICAgIGludCBzbG90cykKPiA+ID4gPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCkKPiA+ID4gPiAgewo+ID4gPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfc3RhdGUgKnRvcG9sb2d5X3N0YXRlOwo+ID4gPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2Fs bG9jYXRpb24gKnBvczsKPiA+ID4gPiArCWJvb2wgZm91bmQgPSBmYWxzZTsKPiA+ID4gPiAgCj4g PiA+ID4gIAl0b3BvbG9neV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0 ZShzdGF0ZSwgbWdyKTsKPiA+ID4gPiAgCWlmIChJU19FUlIodG9wb2xvZ3lfc3RhdGUpKQo+ID4g PiA+ICAJCXJldHVybiBQVFJfRVJSKHRvcG9sb2d5X3N0YXRlKTsKPiA+ID4gPiAgCj4gPiA+ID4g LQkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51bV9zbG90cyB0byB1cGRhdGUKPiA+ ID4gPiAtCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBtYXkgbm90 IGV4aXN0IGlmIHRoZSBwYXJlbnQKPiA+ID4gPiAtCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1 Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcKPiA+ID4gPiAtCSAqIHBlci1w b3J0IHNsb3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIGluc3RlYWQg b2YKPiA+ID4gPiAtCSAqIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1h bnkgc2xvdHMgdG8gcmVsZWFzZS4KPiA+ID4gPiAtCSAqLwo+ID4gPiA+IC0JdG9wb2xvZ3lfc3Rh dGUtPmF2YWlsX3Nsb3RzICs9IHNsb3RzOwo+ID4gPiA+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBz bG90cyByZWxlYXNlZD0lZCwgYXZhaWw9JWRcbiIsCj4gPiA+ID4gLQkJCXNsb3RzLCB0b3BvbG9n eV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3Ms ICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiArCQlpZiAocG9zLT5wb3J0 ID09IHBvcnQpIHsKPiA+ID4gPiArCQkJZm91bmQgPSB0cnVlOwo+ID4gPiA+ICsJCQlicmVhazsK PiA+ID4gPiArCQl9Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwlpZiAoV0FSTl9PTighZm91bmQpKSB7 Cj4gPiA+ID4gKwkJRFJNX0VSUk9SKCJubyBWQ1BJIGZvciBbTVNUIFBPUlQ6JXBdIGZvdW5kIGlu IG1zdCBzdGF0ZSAlcFxuIiwKPiA+ID4gPiArCQkJICBwb3J0LCAmdG9wb2xvZ3lfc3RhdGUtPmJh c2UpOwo+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICsKPiA+ ID4gPiArCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gVkNQSSAlZCAtPiAwXG4iLCBw b3J0LCBwb3MtPnZjcGkpOwo+ID4gPiA+ICsJaWYgKHBvcy0+dmNwaSkgewo+ID4gPiA+ICsJCS8q Cj4gPiA+ID4gKwkJICogVGhpcyBzaG91bGQgYmUgc2FmZS1hcyB0aGUgcHJldmlvdXMgc3RhdGUg d2lsbCBzdGlsbCBob2xkIGEKPiA+ID4gPiArCQkgKiByZWZlcmVuY2UgdG8gdGhpcyBwb3J0IHVu dGlsIHdlIHN3YXAgc3RhdGVzLiBJZiBpdCdzIG5vdCwKPiA+ID4gPiArCQkgKiB0aGUgZHJpdmVy IGhhcyBhIGJvb2trZWVwaW5nIGVycm9yCj4gPiA+ID4gKwkJICovCj4gPiA+ID4gKwkJaWYgKFdB Uk5fT04oZHJtX2RwX3B1dF9wb3J0KHBvcnQpKSkgewo+ID4gPiAKPiA+ID4gVGhlIHVzdWFsIHdh eSB0byBkbyB0aGlzIChpbnN0ZWFkIG9mIGFkZGluZyBhIHJldHVybiB2YWx1ZSB0byB0aGUgbm9y bWFsCj4gPiA+IF9wdXQgZnVuY3Rpb24pIGlzIHNvbWV0aGluZyBsaWtlCj4gPiA+IAo+ID4gPiAJ a3JlZl9wdXQocG9ydCwgZnVuY3Rpb25fdGhhdF93aXRoX2p1c3RfYV9XQVJOSU5HX0RSTV9FUlJP UikKPiA+ID4gCj4gPiA+IGF2b2lkcyB0aGUgbmVlZCBmb3IgcGF0Y2ggMi4KPiA+ID4gCj4gPiA+ ID4gKwkJCURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRlIGFuZCByZWxlYXNlIFZDUEkgb24gW01T VAo+ID4gPiA+IFBPUlQ6JXBdIGluIHRoZSBzYW1lIHN0YXRlXG4iLAo+ID4gPiA+ICsJCQkJICBw b3J0KTsKPiA+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwkJfQo+ID4gPiA+ICsJ CXBvcy0+dmNwaSA9IDA7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gIAo+ID4gPiA+ICAJcmV0dXJuIDA7 Cj4gPiA+ID4gIH0KPiA+ID4gPiBAQCAtMzExNSwxNSArMzIxMSw0NSBAQCBzdGF0aWMgdm9pZCBk cm1fZHBfZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3QKPiA+ID4gPiB3b3JrX3N0cnVjdCAq d29yaykKPiA+ID4gPiAgc3RhdGljIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqCj4gPiA+ID4g IGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaikK PiA+ID4gPiAgewo+ID4gPiA+IC0Jc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0 YXRlOwo+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlLCAq b2xkX3N0YXRlID0KPiA+ID4gPiArCQl0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUob2JqLT5zdGF0 ZSk7Cj4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAqdmNwaTsK PiA+ID4gPiAgCj4gPiA+ID4gLQlzdGF0ZSA9IGttZW1kdXAob2JqLT5zdGF0ZSwgc2l6ZW9mKCpz dGF0ZSksIEdGUF9LRVJORUwpOwo+ID4gPiA+ICsJc3RhdGUgPSBrbWVtZHVwKG9sZF9zdGF0ZSwg c2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+ID4gPiA+ICAJaWYgKCFzdGF0ZSkKPiA+ID4g PiAgCQlyZXR1cm4gTlVMTDsKPiA+ID4gPiAgCj4gPiA+ID4gIAlfX2RybV9hdG9taWNfaGVscGVy X3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0ZS0+YmFzZSk7Cj4gPiA+ID4g IAo+ID4gPiA+ICsJSU5JVF9MSVNUX0hFQUQoJnN0YXRlLT52Y3Bpcyk7Cj4gPiA+ID4gKwlzdGF0 ZS0+dmNwaV9hbGxvY2F0ZWQgPSBmYWxzZTsKPiA+ID4gPiArCj4gPiA+ID4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KHBvcywgJm9sZF9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiArCQkvKiBQ cnVuZSBsZWZ0b3ZlciBmcmVlZCBWQ1BJIGFsbG9jYXRpb25zICovCj4gPiA+ID4gKwkJaWYgKCFw b3MtPnZjcGkpCj4gPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ICsKPiA+ID4gPiArCQl2Y3Bp ID0ga21lbWR1cChwb3MsIHNpemVvZigqdmNwaSksIEdGUF9LRVJORUwpOwo+ID4gPiA+ICsJCWlm ICghdmNwaSkKPiA+ID4gPiArCQkJZ290byBmYWlsOwo+ID4gPiA+ICsKPiA+ID4gPiArCQkvKiBU YWtlIGEgcGxhaW4gb2xkIGtyZWYgaGVyZSBhbmQgZG9uJ3QgdmFsaWRhdGUgdGhlIHBvcnQsIGFz Cj4gPiA+ID4gKwkJICogaXQncyB0b3BvbG9neSBtaWdodCBub3QgZXZlbiBleGlzdCBhbnltb3Jl Cj4gPiA+ID4gKwkJICovCj4gPiA+ID4gKwkJa3JlZl9nZXQoJnZjcGktPnBvcnQtPmtyZWYpOwo+ ID4gPiA+ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmc3RhdGUtPnZjcGlzKTsKPiA+ID4gPiAr CX0KPiA+ID4gPiArCj4gPiA+ID4gIAlyZXR1cm4gJnN0YXRlLT5iYXNlOwo+ID4gPiA+ICsKPiA+ ID4gPiArZmFpbDoKPiA+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHZjcGks ICZzdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiArCQlkcm1fZHBfcHV0X3BvcnQocG9zLT5w b3J0KTsKPiA+ID4gPiArCQlrZnJlZShwb3MpOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICsJa2ZyZWUo c3RhdGUpOwo+ID4gPiA+ICsKPiA+ID4gPiArCXJldHVybiBOVUxMOwo+ID4gPiA+ICB9Cj4gPiA+ ID4gIAo+ID4gPiA+ICBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3RydWN0 IGRybV9wcml2YXRlX29iaiAqb2JqLAo+ID4gPiA+IEBAIC0zMTMxLDE0ICszMjU3LDExNiBAQCBz dGF0aWMgdm9pZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3RydWN0Cj4gPiA+ID4gZHJtX3By aXZhdGVfb2JqICpvYmosCj4gPiA+ID4gIHsKPiA+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlICptc3Rfc3RhdGUgPQo+ID4gPiA+ICAJCXRvX2RwX21zdF90b3BvbG9neV9z dGF0ZShzdGF0ZSk7Cj4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9z LCAqdG1wOwo+ID4gPiA+ICsKPiA+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3Ms IHRtcCwgJm1zdF9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiArCQkvKiBXZSBvbmx5IGtl ZXAgcmVmZXJlbmNlcyB0byBwb3J0cyB3aXRoIG5vbi16ZXJvIFZDUElzICovCj4gPiA+ID4gKwkJ aWYgKHBvcy0+dmNwaSkKPiA+ID4gPiArCQkJZHJtX2RwX3B1dF9wb3J0KHBvcy0+cG9ydCk7Cj4g PiA+ID4gKwkJa2ZyZWUocG9zKTsKPiA+ID4gPiArCX0KPiA+ID4gPiAgCj4gPiA+ID4gIAlrZnJl ZShtc3Rfc3RhdGUpOwo+ID4gPiA+ICB9Cj4gPiA+ID4gIAo+ID4gPiA+IC1zdGF0aWMgY29uc3Qg c3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIG1zdF9zdGF0ZV9mdW5jcyA9IHsKPiA+ID4g PiArc3RhdGljIGlubGluZSBpbnQKPiA+ID4gPiArZHJtX2RwX21zdF9hdG9taWNfY2hlY2tfdG9w b2xvZ3lfc3RhdGUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyCj4gPiA+ID4gKm1nciwK PiA+ID4gPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4g PiA+ICptc3Rfc3RhdGUpCj4gPiA+ID4gK3sKPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9h bGxvY2F0aW9uICp2Y3BpOwo+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsK PiA+ID4gPiArCWludCBhdmFpbF9zbG90cyA9IDYzLCByZXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ LyogVGhlcmUncyBubyBwb3NzaWJsZSBzY2VuYXJpbyB3aGVyZSByZWxlYXNpbmcgVkNQSSBvciBr ZWVwaW5nIGl0IHRoZQo+ID4gPiA+ICsJICogc2FtZSB3b3VsZCBtYWtlIHRoZSBzdGF0ZSBpbnZh bGlkCj4gPiA+ID4gKwkgKi8KPiA+ID4gPiArCWlmICghbXN0X3N0YXRlLT52Y3BpX2FsbG9jYXRl ZCkgewo+ID4gPiAKPiA+ID4gRG8gd2UgbmVlZCB0aGlzPyBJZiBub3QgSSdtIGFsd2F5cyBpbiBm YXZvdXIgb2YgcmVtb3ZpbmcgY29kZSBpZiBpdCdzIG5vdAo+ID4gPiBuZWVkZWQgOi0pCj4gPiA+ IAo+ID4gPiA+ICsJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgTUdSOiVwXSBzdGF0ZSAlcCBhbGxv Y2F0ZXMgbm8gVkNQSSwKPiA+ID4gPiBjaGVjayBza2lwcGVkXG4iLAo+ID4gPiA+ICsJCQkJIG1n ciwgJm1zdF9zdGF0ZS0+YmFzZSk7Cj4gPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gKwl9Cj4g PiA+ID4gKwo+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh2Y3BpLCAmbXN0X3N0YXRlLT52 Y3BpcywgbmV4dCkgewo+ID4gPiA+ICsJCS8qIFJlbGVhc2luZyBWQ1BJIGlzIGFsd2F5cyBPSy1l dmVuIGlmIHRoZSBwb3J0IGlzIGdvbmUgKi8KPiA+ID4gPiArCQlpZiAoIXZjcGktPnZjcGkpIHsK PiA+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSByZWxlYXNlcyBhbGwg VkNQSQo+ID4gPiA+IHNsb3RzXG4iLAo+ID4gPiA+ICsJCQkJCSB2Y3BpLT5wb3J0KTsKPiA+ID4g PiArCQkJY29udGludWU7Cj4gPiA+ID4gKwkJfQo+ID4gPiA+ICsKPiA+ID4gPiArCQlwb3J0ID0g ZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCB2Y3BpLT5wb3J0KTsKPiA+ID4gPiAr CQlpZiAoIXBvcnQpIHsKPiA+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVw XSBpcyBnb25lIGJ1dCBzdGlsbCBoYXMKPiA+ID4gPiBWQ1BJLCBjYW5ub3QgYWRkIG5ldyBWQ1BJ XG4iLAo+ID4gPiA+ICsJCQkJCSB2Y3BpLT5wb3J0KTsKPiA+ID4gPiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gPiA+ID4gKwkJfQo+ID4gPiAKPiA+ID4gRm9yIGZpbmRfdmNwaSB3ZSd2ZSBhbHJlYWR5 IGRvbmUgdGhpcy4gRm9yIHVucGx1Z2dlZCB2Y3BpLCB3ZSBjYW4ndCBkbwo+ID4gPiB0aGlzIGhl cmUgSSB0aGluayAtIG90aGVyd2lzZSBpZiB5b3UgZW5hYmxlIDIgbXN0IG91dHB1dHMgb24gdGhl IHNhbWUKPiA+ID4gYnJhbmNoLCBhbmQgdW5wbHVnIGJvdGgsIG9sZCBub24tYXRvbWljIHVzZXJz cGFjZSBjYW4gbmV2ZXIgZXZlciBhZ2Fpbgo+ID4gPiBkaXNhYmxlIHRoZW0gYmVjYXVzZSBpdCBj YW4ndCBkaXNhYmxlIGJvdGguIFRoZSBjaGVjayAodG8gc2tpcCBhbHJlYWR5Cj4gPiA+IGRlYWxs b2NhdGVkIHBvcnRzKSBhYm92ZSBpc24ndCBlbm91Z2ggdG8gaGFuZGxlIHRoYXQuCj4gPiA+IAo+ ID4gPiA+ICsKPiA+ID4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIHJlcXVp cmVzICVkIHZjcGkgc2xvdHNcbiIsCj4gPiA+ID4gKwkJCQkgdmNwaS0+cG9ydCwgdmNwaS0+dmNw aSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCWF2YWlsX3Nsb3RzIC09IHZjcGktPnZjcGk7Cj4gPiA+ ID4gKwkJaWYgKGF2YWlsX3Nsb3RzIDwgMCkgewo+ID4gPiA+ICsJCQlEUk1fREVCVUdfQVRPTUlD KCJbTVNUIFBPUlQ6JXBdIG5vdCBlbm91Z2ggVkNQSSBzbG90cwo+ID4gPiA+IGluIG1zdCBzdGF0 ZSAlcCAoYXZhaWw9JWQpXG4iLAo+ID4gPiA+ICsJCQkJCSB2Y3BpLT5wb3J0LCBtc3Rfc3RhdGUs Cj4gPiA+ID4gKwkJCQkJIGF2YWlsX3Nsb3RzICsgdmNwaS0+dmNwaSk7Cj4gPiA+ID4gKwkJCXJl dCA9IC1FTk9TUEM7Cj4gPiA+ID4gKwkJCWdvdG8gcG9ydF9mYWlsOwo+ID4gPiA+ICsJCX0KPiA+ ID4gPiArCj4gPiA+ID4gKwkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gPiA+ICsJfQo+ID4g PiA+ICsJRFJNX0RFQlVHX0FUT01JQygiW01TVCBNR1I6JXBdIG1zdCBzdGF0ZSAlcCBWQ1BJIGF2 YWlsPSVkIHVzZWQ9JWRcbiIsCj4gPiA+ID4gKwkJCSBtZ3IsIG1zdF9zdGF0ZSwgYXZhaWxfc2xv dHMsCj4gPiA+ID4gKwkJCSA2MyAtIGF2YWlsX3Nsb3RzKTsKPiA+ID4gPiArCj4gPiA+ID4gKwly ZXR1cm4gMDsKPiA+ID4gPiArcG9ydF9mYWlsOgo+ID4gPiA+ICsJZHJtX2RwX3B1dF9wb3J0KHBv cnQpOwo+ID4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiAr LyoqCj4gPiA+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrIC0gQ2hlY2sgdGhhdCB0aGUg bmV3IHN0YXRlIG9mIGFuIE1TVAo+ID4gPiA+IHRvcG9sb2d5IGluIGFuCj4gPiA+ID4gKyAqIGF0 b21pYyB1cGRhdGUgaXMgdmFsaWQKPiA+ID4gPiArICogQHN0YXRlOiBQb2ludGVyIHRvIHRoZSBu ZXcgJnN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4gPiA+ID4gKyAqCj4gPiA+ID4g KyAqIENoZWNrcyB0aGUgZ2l2ZW4gdG9wb2xvZ3kgc3RhdGUgZm9yIGFuIGF0b21pYyB1cGRhdGUg dG8gZW5zdXJlIHRoYXQKPiA+ID4gPiBpdCdzCj4gPiA+ID4gKyAqIHZhbGlkLiBUaGlzIGluY2x1 ZGVzIGNoZWNraW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggYmFuZHdpZHRoIHRvCj4gPiA+ID4g c3VwcG9ydAo+ID4gPiA+ICsgKiB0aGUgbmV3IFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlIGF0b21p YyB1cGRhdGUuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIEFueSBhdG9taWMgZHJpdmVycyBzdXBw b3J0aW5nIERQIE1TVCBtdXN0IG1ha2Ugc3VyZSB0byBjYWxsIHRoaXMKPiA+ID4gPiBhZnRlcgo+ ID4gPiA+ICsgKiBjaGVja2luZyB0aGUgcmVzdCBvZiB0aGVpciBzdGF0ZSBpbiB0aGVpcgo+ID4g PiA+ICsgKiAmZHJtX21vZGVfY29uZmlnX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNrLgo+ ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBTZWUgYWxzbzoKPiA+ID4gPiArICogZHJtX2RwX2F0b21p Y19maW5kX3ZjcGlfc2xvdHMoKQo+ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNw aV9zbG90cygpCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4gKyAqCj4g PiA+ID4gKyAqIDAgaWYgdGhlIG5ldyBzdGF0ZSBpcyB2YWxpZCwgbmVnYXRpdmUgZXJyb3IgY29k ZSBvdGhlcndpc2UuCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICtpbnQgZHJtX2RwX21zdF9hdG9taWNf Y2hlY2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gPiA+ICt7Cj4gPiA+ID4g KwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncjsKPiA+ID4gPiArCXN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7Cj4gPiA+ID4gKwlpbnQgaSwgcmV0 ID0gMDsKPiA+ID4gPiArCj4gPiA+ID4gKwlmb3JfZWFjaF9uZXdfbXN0X21ncl9pbl9zdGF0ZShz dGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKPiA+ID4gPiArCQlyZXQgPSBkcm1fZHBfbXN0X2F0 b21pY19jaGVja190b3BvbG9neV9zdGF0ZShtZ3IsIG1zdF9zdGF0ZSk7Cj4gPiA+ID4gKwkJaWYg KHJldCkKPiA+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ cmV0dXJuIHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3Rf YXRvbWljX2NoZWNrKTsKPiA+ID4gPiArCj4gPiA+ID4gK2NvbnN0IHN0cnVjdCBkcm1fcHJpdmF0 ZV9zdGF0ZV9mdW5jcyBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzID0KPiA+ID4gPiB7 Cj4gPiA+ID4gIAkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9kcF9tc3RfZHVwbGljYXRl X3N0YXRlLAo+ID4gPiA+ICAJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2RwX21zdF9kZXN0 cm95X3N0YXRlLAo+ID4gPiA+ICB9Owo+ID4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGVfZnVuY3MpOwo+ID4gPiA+ICAKPiA+ID4gPiAgLyoqCj4gPiA+ID4gICAq IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZTogZ2V0IE1TVCB0b3BvbG9neSBzdGF0 ZQo+ID4gPiA+IEBAIC0zMjE2LDEzICszNDQ0LDExIEBAIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncl9pbml0KHN0cnVjdAo+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4g PiA+ID4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gIAo+ID4gPiA+ICAJbXN0X3N0YXRlLT5t Z3IgPSBtZ3I7Cj4gPiA+ID4gLQo+ID4gPiA+IC0JLyogbWF4LiB0aW1lIHNsb3RzIC0gb25lIHNs b3QgZm9yIE1UUCBoZWFkZXIgKi8KPiA+ID4gPiAtCW1zdF9zdGF0ZS0+YXZhaWxfc2xvdHMgPSA2 MzsKPiA+ID4gPiArCUlOSVRfTElTVF9IRUFEKCZtc3Rfc3RhdGUtPnZjcGlzKTsKPiA+ID4gPiAg Cj4gPiA+ID4gIAlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2luaXQoJm1nci0+YmFzZSwKPiA+ID4g PiAgCQkJCSAgICAmbXN0X3N0YXRlLT5iYXNlLAo+ID4gPiA+IC0JCQkJICAgICZtc3Rfc3RhdGVf ZnVuY3MpOwo+ID4gPiA+ICsJCQkJICAgICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNz KTsKPiA+ID4gPiAgCj4gPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gPiAgfQo+ID4gPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gPiBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiA+IGluZGV4IDEzMmU5Nzgy MjdmYi4uOGU4NWUwNGE1OTQ4IDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+ID4gPiA+IEBAIC0xMjU5Miw2ICsxMjU5MiwxMCBAQCBzdGF0aWMgaW50 IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZQo+ID4gPiA+ICpkZXYsCj4gPiA+ ID4gIAkJCQkgICAgICAgIlttb2Rlc2V0XSIgOiAiW2Zhc3RzZXRdIik7Cj4gPiA+ID4gIAl9Cj4g PiA+ID4gIAo+ID4gPiA+ICsJcmV0ID0gZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RhdGUpOwo+ ID4gPiA+ICsJaWYgKHJldCkKPiA+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiA+ICsKPiA+ID4g PiAgCWlmIChhbnlfbXMpIHsKPiA+ID4gPiAgCQlyZXQgPSBpbnRlbF9tb2Rlc2V0X2NoZWNrcyhz dGF0ZSk7Cj4gPiA+ID4gIAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcF9tc3QuYwo+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBf bXN0LmMKPiA+ID4gPiBpbmRleCA0ZGUyNDdkZGYwNWYuLmJlMmQxYWM3ZDg3ZCAxMDA2NDQKPiA+ ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCj4gPiA+ID4gQEAgLTQxLDgg KzQxLDEzIEBAIHN0YXRpYyBib29sIGludGVsX2RwX21zdF9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QK PiA+ID4gPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gPiA+ICAJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsKPiA+ID4gPiAgCXZvaWQg KnBvcnQgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKS0+cG9ydDsKPiA+ID4gPiAgCXN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IHBpcGVfY29uZmlnLT5iYXNlLnN0YXRlOwo+ ID4gPiA+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gcGlwZV9jb25maWctPmJhc2UuY3J0YzsK PiA+ID4gPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUgPQo+ID4gPiA+ ICsJCWRybV9hdG9taWNfZ2V0X29sZF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiA+ID4gPiAr CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUgPSAmcGlwZV9jb25maWctPmJh c2U7Cj4gPiA+ID4gIAlpbnQgYnBwOwo+ID4gPiA+IC0JaW50IGxhbmVfY291bnQsIHNsb3RzID0g MDsKPiA+ID4gPiArCWludCBsYW5lX2NvdW50LCBzbG90cyA9Cj4gPiA+ID4gKwkJdG9faW50ZWxf Y3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKPiA+ID4gPiAgCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJnBpcGVfY29uZmlnLQo+ID4g PiA+ID5iYXNlLmFkanVzdGVkX21vZGU7Cj4gPiA+ID4gIAlpbnQgbXN0X3BibjsKPiA+ID4gPiAg CWJvb2wgY29uc3RhbnRfbiA9IGRybV9kcF9oYXNfcXVpcmsoJmludGVsX2RwLT5kZXNjLAo+ID4g PiA+IEBAIC03Nyw4ICs4MiwxMiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kcF9tc3RfY29tcHV0ZV9j b25maWcoc3RydWN0Cj4gPiA+ID4gaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gPiAgCW1z dF9wYm4gPSBkcm1fZHBfY2FsY19wYm5fbW9kZShhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLCBi cHApOwo+ID4gPiA+ICAJcGlwZV9jb25maWctPnBibiA9IG1zdF9wYm47Cj4gPiA+ID4gIAo+ID4g PiA+IC0JLyogWm9tYmllIGNvbm5lY3RvcnMgY2FuJ3QgaGF2ZSBWQ1BJIHNsb3RzICovCj4gPiA+ ID4gLQlpZiAoIWRybV9jb25uZWN0b3JfaXNfdW5yZWdpc3RlcmVkKGNvbm5lY3RvcikpIHsKPiA+ ID4gPiArCS8qIE9ubHkgY2hhbmdlIFZDUEkgYWxsb2NhdGlvbiBvbiBhY3R1YWwgbW9kZSBjaGFu Z2VzLCB0byBwcmV2ZW50IHVzCj4gPiA+ID4gKwkgKiBmcm9tIHRyeWluZyB0byBhbGxvY2F0ZSBW Q1BJIHRvIHBvcnRzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IHdoZW4gd2UKPiA+ID4gPiArCSAqIG1h eSBqdXN0IGJlIHRyeWluZyB0byBkaXNhYmxlIERQTVMgb24gdGhlbQo+ID4gPiA+ICsJICovCj4g PiA+ID4gKwlpZiAobmV3X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCB8fAo+ID4gPiA+ICsJICAg IG5ld19jcnRjX3N0YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQpIHsKPiA+ID4gCj4gPiA+IFdoeSBl eGFjdGx5IGlzIHRoaXMgbmVlZGVkPyBXZSBvbmx5IGNhbGwgY29tcHV0ZV9jb25maWcgb24gdGhl IGVub2NvZGVyCj4gPiA+IHdoZW4gZW5hYmxpbmcgYW4gb3V0cHV0LiBOb3Qgd2hlbiBkaXNhYmxp bmcgb25lLiBTaW1pbGFyIGZvciB0aGUgYXRvbWljCj4gPiA+IGhlbHBlcnMgYW5kIHRoZSB2YXJp b3VzIGVuY29kZXIgY2FsbGJhY2tzICh5b3UgaGF2ZSB0aGUgc2FtZSBjaGFuZ2UgaW4gdGhlCj4g PiA+IG5vdXZlYXUgY29kZSkuIERpZCB0aGlzIGFjdHVhbGx5IGJsb3cgdXAgd2hpbGUgdGVzdGlu Zz8KPiA+ID4gCj4gPiA+ID4gIAkJc2xvdHMgPSBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90 cyhzdGF0ZSwKPiA+ID4gPiAgCQkJCQkJICAgICAgJmludGVsX2RwLT5tc3RfbWdyLAo+ID4gPiA+ ICAJCQkJCQkgICAgICBwb3J0LAo+ID4gPiA+IEBAIC0xMDcsMzYgKzExNiwzOSBAQCBzdGF0aWMg Ym9vbCBpbnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWcoc3RydWN0Cj4gPiA+ID4gaW50ZWxfZW5j b2RlciAqZW5jb2RlciwKPiA+ID4gPiAgCXJldHVybiB0cnVlOwo+ID4gPiA+ICB9Cj4gPiA+ID4g IAo+ID4gPiA+IC1zdGF0aWMgaW50IGludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gPiAtCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqbmV3X2Nvbm5fc3RhdGUpCj4gPiA+ID4gK3N0YXRpYyBpbnQKPiA+ID4gPiAraW50ZWxf ZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4g PiA+ICsJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZSkKPiA+ ID4gPiAgewo+ID4gPiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9y ID0KPiA+ID4gPiArCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ID4gPiArCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyID0KPiA+ID4gPiArCQkmaW50ZWxfY29u bmVjdG9yLT5tc3RfcG9ydC0+bXN0X21ncjsKPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQgPSBpbnRlbF9jb25uZWN0b3ItPnBvcnQ7Cj4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUgPSBuZXdfY29ubl9zdGF0ZS0+c3RhdGU7Cj4gPiA+ID4gLQlzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGU7Cj4gPiA+ID4gLQlzdHJ1Y3Qg ZHJtX2NydGMgKm9sZF9jcnRjOwo+ID4gPiA+IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlOwo+ID4gPiA+IC0JaW50IHNsb3RzLCByZXQgPSAwOwo+ID4gPiA+ICsJc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlID0KPiA+ID4gPiArCQlkcm1fYXRvbWlj X2dldF9vbGRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOwo+ID4gPiA+ICsJc3Ry dWN0IGRybV9jcnRjICpvbGRfY3J0YyA9IG9sZF9jb25uX3N0YXRlLT5jcnRjLAo+ID4gPiA+ICsJ CQkqbmV3X2NydGMgPSBuZXdfY29ubl9zdGF0ZS0+Y3J0YzsKPiA+ID4gPiArCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsICpuZXdfY3J0Y19zdGF0ZTsKPiA+ID4gPiAgCj4g PiA+ID4gLQlvbGRfY29ubl9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X29sZF9jb25uZWN0b3Jfc3Rh dGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiA+ID4gLQlvbGRfY3J0YyA9IG9sZF9jb25uX3N0YXRl LT5jcnRjOwo+ID4gPiAKPiA+ID4gQmlrZXNoZWQ6IFJld29ya2luZyBhbGwgdGhlIGFib3ZlIGhp ZGVzIHRoZSByZWFsIGNoYW5nZXMgcXVpdGUgYSBiaXQuCj4gPiA+IAo+ID4gPiA+ICAJaWYgKCFv bGRfY3J0YykKPiA+ID4gPiAtCQlyZXR1cm4gcmV0Owo+ID4gPiA+ICsJCXJldHVybiAwOwo+ID4g PiA+ICAKPiA+ID4gPiAtCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0 ZShzdGF0ZSwgb2xkX2NydGMpOwo+ID4gPiA+IC0Jc2xvdHMgPSB0b19pbnRlbF9jcnRjX3N0YXRl KGNydGNfc3RhdGUpLT5kcF9tX24udHU7Cj4gPiA+ID4gLQlpZiAoZHJtX2F0b21pY19jcnRjX25l ZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgJiYgc2xvdHMgPiAwKSB7Cj4gPiA+ID4gLQkJc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gLQkJc3RydWN0IGRybV9lbmNv ZGVyICpvbGRfZW5jb2RlcjsKPiA+ID4gPiArCW9sZF9jcnRjX3N0YXRlID0gZHJtX2F0b21pY19n ZXRfb2xkX2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ID4gPiArCWlmICghb2xkX2Ny dGNfc3RhdGUgfHwKPiA+ID4gCj4gPiA+ICFvbGRfY3J0Y19zdGF0ZSB3b3VsZCBiZSBhIGZyYW1l d29yayBidWcuIEp1c3QgcmVtb3ZlIHRoYXQgY2hlY2suCj4gPiA+IAo+ID4gPiA+ICsJICAgICF0 b19pbnRlbF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1KQo+ID4gPiA+ICsJ CXJldHVybiAwOwo+ID4gPiAKPiA+ID4gSG0sIHdoeSBkbyB3ZSBuZWVkIHRoaXM/IEhhdmluZyBh IERQIHBvcnQgcHJldmlvdXNseSBlbmFibGVkIHdpdGggYSAwIHR1Cj4gPiA+IHNvdW5kcyBsaWtl IGEgcHJldHR5IGJpZyBkcml2ZXIgYnVnLgo+ID4gPiA+ICAKPiA+ID4gPiAtCQlvbGRfZW5jb2Rl ciA9IG9sZF9jb25uX3N0YXRlLT5iZXN0X2VuY29kZXI7Cj4gPiA+ID4gLQkJbWdyID0gJmVuY190 b19tc3Qob2xkX2VuY29kZXIpLT5wcmltYXJ5LT5kcC5tc3RfbWdyOwo+ID4gPiA+ICsJLyogSWYg d2Ugc3dpdGNoZWQgQ1JUQ3MsIGNsZWFyIHRoZSBwcmV2aW91cyBvbmUncyBhbGxvY2F0aW9uICov Cj4gPiA+ID4gKwluZXdfY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRl KHN0YXRlLCBvbGRfY3J0Yyk7Cj4gPiA+ID4gKwlpZiAobmV3X2NydGNfc3RhdGUtPmNvbm5lY3Rv cnNfY2hhbmdlZCAmJiAhbmV3X2NydGNfc3RhdGUtPmVuYWJsZSkKPiA+ID4gPiArCQl0b19pbnRl bF9jcnRjX3N0YXRlKG5ld19jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiA+ID4gCj4gPiA+ IE5vIGlkZWEgd2h5IHdlIG5lZWQgdG8gY2xlYXIgdGhpcyBoZXJlPyBTaG91bGRuJ3Qgd2UganVz dCBjbGVhciB0aGlzCj4gPiA+IHVuY29uZGl0aW9uYWxseSBpZiB3ZSByZWxlYXNlIHRoZSBhbGxv Y2F0aW9uLgo+ID4gPiAKPiA+ID4gQWxzbyBuYW1pbmcgY29udmVudGlvbiwgSSdkIGNhbGwgdGhp cyBvbGRfY3J0Y19uZXdfc3RhdGUsIGFuZCBtYXliZQo+ID4gPiBvbGRfY3J0Y19vbGRfc3RhdGUu IFRvIG1ha2UgaXQgY2xlYXIgdGhlc2UgYXJlIHRoZSBvbGQvbmV3IHN0YXRlcyBmb3IKPiA+ID4g b2xkX2NydGMuIEluc3RlYWQgb2Ygb2xkL25ldyBzdGF0ZSBmb3IgdGhlIG5ldyBjcnRjLgo+ID4g PiAKPiA+ID4gPiAgCj4gPiA+ID4gLQkJcmV0ID0gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlf c2xvdHMoc3RhdGUsIG1nciwgc2xvdHMpOwo+ID4gPiA+IC0JCWlmIChyZXQpCj4gPiA+ID4gLQkJ CURSTV9ERUJVR19LTVMoImZhaWxlZCByZWxlYXNpbmcgJWQgdmNwaSBzbG90czolZFxuIiwKPiA+ ID4gPiBzbG90cywgcmV0KTsKPiA+ID4gPiAtCQllbHNlCj4gPiA+ID4gLQkJCXRvX2ludGVsX2Ny dGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7Cj4gPiA+ID4gLQl9Cj4gPiA+ID4g LQlyZXR1cm4gcmV0Owo+ID4gPiA+ICsJaWYgKG5ld19jcnRjKQo+ID4gPiA+ICsJCXJldHVybiAw Owo+ID4gPiAKPiA+ID4gTm90IHN1cmUgd2h5IHdlIHNob3VsZG4ndCByZWxlYXNlIHRoaXM/IElm IHdlIGhhbmRsZSB0aGlzIGluIGhlbHBlcnMsIGl0Cj4gPiA+IHdvdWxkIHJlbW92ZSBwaWxlcyBv ZiBzcGVjaWFsIGNhc2luZyBjb2RlIGhlcmUgSSB0aGluay4gUGx1cyByZW1vdmUKPiA+ID4gc3Bl Y2lhbCBjb2RlIGluIHRoZSBobHBlcnMuCj4gPiA+IAo+ID4gPiAKPiA+ID4gPiArCj4gPiA+ID4g KwlyZXR1cm4gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1nciwgcG9y dCk7Cj4gPiA+ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gIHN0YXRpYyB2b2lkIGludGVsX21zdF9k aXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gPiA+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiA+ID4gYi9pbmNsdWRlL2Ry bS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiA+ID4gaW5kZXggM2ZhY2ViNjZmNWNiLi4yMzkyZTEy YjZiY2UgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIu aAo+ID4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+ID4gPiBA QCAtNDA2LDkgKzQwNiwxNiBAQCBzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgewo+ID4gPiA+ICAKPiA+ ID4gPiAgI2RlZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgs IHN0cnVjdAo+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUsIGJhc2UpCj4gPiA+ID4g IAo+ID4gPiA+ICtzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiB7Cj4gPiA+IAo+ID4gPiBJ IHRoaW5rIGEgY29tbWVudCBoZXJlIHRoYXQgdGhpcyBwb2ludGVyIGhvbGRzIGEgZnVsbCByZWZl cmVuY2UgKGV2ZW4gcGFzdAo+ID4gPiB3aGVuIHRoZSBjb25uZWN0b3IgaXMgdW5wbHVnZ2VkKSB3 b3VsZCBiZSBnb29kLiBPdGhlcndpc2UgdGhlIGxvb3AgaW4KPiA+ID4gcmVsZWFzZV92Y3BpIHdv dWxkIGJlIGJ1Z2d5Lgo+ID4gPiAKPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBv cnQ7Cj4gPiA+ID4gKwlpbnQgdmNwaTsKPiA+ID4gPiArCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsK PiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlIHsKPiA+ID4gPiAgCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOwo+ID4gPiA+ IC0JaW50IGF2YWlsX3Nsb3RzOwo+ID4gPiA+ICsJc3RydWN0IGxpc3RfaGVhZCB2Y3BpczsKPiA+ ID4gPiArCXU4IHZjcGlfYWxsb2NhdGVkOwo+ID4gPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gIH07Cj4gPiA+ID4gIAo+ID4gPiA+IEBAIC02MTksMTQg KzYyNiwxNyBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3N1c3BlbmQoc3RydWN0Cj4g PiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gPiA+ID4gIGludCBkcm1fZHBf bXN0X3RvcG9sb2d5X21ncl9yZXN1bWUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyCj4g PiA+ID4gKm1ncik7Cj4gPiA+ID4gIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4g PiA+ID4gKmRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCj4gPiA+ID4gIAkJCQkJCQkJICAgIHN0cnVjdAo+ID4gPiA+IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwo+ID4gPiA+IC1pbnQgZHJtX2RwX2F0b21pY19maW5k X3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+IC0JCQkJ ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gPiAtCQkJCSAgc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibik7Cj4gPiA+ID4gLWludCBkcm1fZHBf YXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gPiA+ID4gLQkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ ID4gPiA+IC0JCQkJICAgICBpbnQgc2xvdHMpOwo+ID4gPiA+ICtpbnQgX19tdXN0X2NoZWNrCj4g PiA+ID4gK2RybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKPiA+ID4gPiArCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsCj4gPiA+ID4gKwkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQs IGludCBwYm4pOwo+ID4gPiA+ICtpbnQgX19tdXN0X2NoZWNrCj4gPiA+ID4gK2RybV9kcF9hdG9t aWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ ID4gPiArCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gPiAr CQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsKPiA+ID4gPiAgaW50IGRybV9kcF9z ZW5kX3Bvd2VyX3VwZG93bl9waHkoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3Is Cj4gPiA+ID4gIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBwb3dlcl91 cCk7Cj4gPiA+ID4gK2ludCBfX211c3RfY2hlY2sgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUKPiA+ID4gPiAqc3RhdGUpOwo+ID4gPiA+ICAKPiA+ID4gPiAg ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcwo+ID4gPiA+IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3M7Cj4gPiA+ID4gIAo+ID4gPiA+IC0tIAo+ID4gPiA+ IDIuMTkuMQo+ID4gPiA+IAo+ID4gPiAKPiA+ID4gLS0gCj4gPiA+IERhbmllbCBWZXR0ZXIKPiA+ ID4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4gPiA+IGh0dHA6Ly9ibG9n LmZmd2xsLmNoCj4gLS0gCj4gQ2hlZXJzLAo+IAlMeXVkZSBQYXVsCj4gCgotLSAKRGFuaWVsIFZl dHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3 bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==