From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v3 2/5] drm/dp_mst: Start tracking per-port VCPI allocations Date: Wed, 07 Nov 2018 16:23:25 -0500 Message-ID: <9c305aef6e30926b45e41ebdc5ae1c40b6089bd7.camel@redhat.com> References: <20181107012116.17332-1-lyude@redhat.com> <20181107012116.17332-3-lyude@redhat.com> <20181107205930.GY21967@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181107205930.GY21967-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Daniel Vetter Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE4LTExLTA3IGF0IDIxOjU5ICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IE9uIFR1ZSwgTm92IDA2LCAyMDE4IGF0IDA4OjIxOjE0UE0gLTA1MDAsIEx5dWRlIFBhdWwgd3Jv dGU6Cj4gPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVpdGUgYSBsb25nIHRp bWUgaW4KPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3kuYzoKPiA+IAo+ID4gCS8qIFdlIGNhbm5vdCBy ZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ID4gCSAqIHRvcG9sb2d5X3N0 YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQK PiA+IAkgKiBicmFuY2ggZGV2aWNlIHdhcyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVk IGJ5IHRyYWNraW5nCj4gPiAJICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9t c3RfdG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgo+ID4gCSAqIGRlcGVuZGluZyBvbiB0aGUgY2Fs bGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVsZWFzZS4KPiA+IAkgKi8KPiA+IAo+ ID4gVGhhdCdzIG5vdCB0aGUgb25seSByZWFzb24gd2Ugc2hvdWxkIGZpeCB0aGlzOiBmb3JjaW5n IHRoZSBkcml2ZXIgdG8KPiA+IHRyYWNrIHRoZSBWQ1BJIGFsbG9jYXRpb25zIHRocm91Z2hvdXQg YSBzdGF0ZSdzIGF0b21pYyBjaGVjayBpcwo+ID4gZXJyb3IgcHJvbmUsIGJlY2F1c2UgaXQgbWVh bnMgdGhhdCBleHRyYSBjYXJlIGhhcyB0byBiZSB0YWtlbiB3aXRoIHRoZQo+ID4gb3JkZXIgdGhh dCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIGFuZAo+ID4gZHJtX2RwX2F0b21pY19y ZWxlYXNlX3ZjcGlfc2xvdHMoKSBhcmUgY2FsbGVkIGluIGluIG9yZGVyIHRvIGVuc3VyZQo+ID4g aWRlbXBvdGVuY3kuIEN1cnJlbnRseSB0aGUgb25seSBkcml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhl c2UgaGVscGVycywKPiA+IGk5MTUsIGRvZXNuJ3QgZXZlbiBkbyB0aGlzIGNvcnJlY3RseTogbXVs dGlwbGUgLT5iZXN0X2VuY29kZXIoKSBjaGVja3MKPiA+IHdpdGggaTkxNSdzIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gd291bGQgbm90IGJlIGlkZW1wb3RlbnQgYW5kIHdvdWxkCj4gPiBvdmVyLWFs bG9jYXRlIFZDUEkgc2xvdHMsIHNvbWV0aGluZyBJIGxlYXJuZWQgdHJ5aW5nIHRvIGltcGxlbWVu dAo+ID4gZmFsbGJhY2sgcmV0cmFpbmluZyBpbiBNU1QuCj4gPiAKPiA+IFNvOiBzaW1wbGlmeSB0 aGlzIHdob2xlIG1lc3MsIGFuZCB0ZWFjaCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygp Cj4gPiBhbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSB0byB0cmFjayB0aGUg VkNQSSBhbGxvY2F0aW9ucyBmb3IKPiA+IGVhY2ggcG9ydC4gVGhpcyBhbGxvd3MgdXMgdG8gZW5z dXJlIGlkZW1wb3RlbmN5IHdpdGhvdXQgaGF2aW5nIHRvIHJlbHkKPiA+IG9uIHRoZSBkcml2ZXIg YXMgbXVjaC4gQWRkaXRpb25hbGx5OiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnkK PiA+IGtpbmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9lc24ndCBuZWVk IGl0IGZvciBpdCdzIG93bgo+ID4gaW50ZXJuYWwgc3RhdGUuCj4gPiAKPiA+IEFkZGl0aW9uYWxs eTsgdGhpcyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgaGVscGVyIHdoaWNo Cj4gPiBtdXN0IGJlIHVzZWQgYnkgYXRvbWljIGRyaXZlcnMgdG8gcGVyZm9ybSB2YWxpZGl0eSBj aGVja3MgZm9yIHRoZSBuZXcKPiA+IFZDUEkgYWxsb2NhdGlvbnMgaW5jdXJyZWQgYnkgYSBzdGF0 ZS4KPiA+IAo+ID4gQWxzbzogdXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBtYWtlIGl0IG1v cmUgb2J2aW91cyB0aGF0IHRoZXNlCj4gPiAvbXVzdC8gYmUgY2FsbGVkIGJ5IC9hbGwvIGF0b21p YyBkcml2ZXJzIHN1cHBvcnRpbmcgTVNULgo+ID4gCj4gPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ID4g IC0gVXNlIGttZW1kdXAoKSBmb3IgZHVwbGljYXRpbmcgTVNUIHN0YXRlIC0gZGFudmV0Cj4gPiAg LSBNb3ZlIHBvcnQgdmFsaWRhdGlvbiBvdXQgb2YgZHVwbGljYXRlIHN0YXRlIGNhbGxiYWNrIC0g ZGFudmV0Cj4gPiAgLSBIYW5kbGUgbG9vcGluZyB0aHJvdWdoIE1TVCB0b3BvbG9neSBzdGF0ZXMg aW4KPiA+ICAgIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgc28gdGhlIGRyaXZlciBkb2Vzbid0 IGhhdmUgdG8gZG8gaXQKPiA+ICAtIEZpeCBkb2N1bWVudGF0aW9uIGluIGRybV9kcF9hdG9taWNf ZmluZF92Y3BpX3Nsb3RzKCkKPiA+ICAtIE1vdmUgdGhlIGF0b21pYyBjaGVjayBmb3IgZWFjaCBp bmRpdmlkdWFsIHRvcG9sb2d5IHN0YXRlIGludG8gaXQncwo+ID4gICAgb3duIGZ1bmN0aW9uLCBy ZWR1Y2VzIGluZGVudGluZwo+ID4gIC0gRG9uJ3QgY29uc2lkZXIgInN0YWxlIiBNU1QgcG9ydHMg d2hlbiBjYWxjdWxhdGluZyB0aGUgYmFuZHdpZHRoCj4gPiAgICByZXF1aXJlbWVudHMuIFRoaXMg aXMgbmVlZGVkIGJlY2F1c2Ugb3JpZ2luYWxseSB3ZSByZWxpZWQgb24gdGhlCj4gPiAgICBzdGF0 ZSBkdXBsaWNhdGlvbiBmdW5jdGlvbnMgdG8gcHJ1bmUgYW55IHN0YWxlIHBvcnRzIGZyb20gdGhl IG5ldwo+ID4gICAgc3RhdGUsIHdoaWNoIHdvdWxkIHByZXZlbnQgdXMgZnJvbSBpbmNvcnJlY3Rs eSBjb25zaWRlcmluZyB0aGVpcgo+ID4gICAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cyBhbG9uZ3Np ZGUgbGVnaXRpbWF0ZSBuZXcgcGF5bG9hZHMuCj4gPiAgLSBBZGQgZnVuY3Rpb24gcmVmZXJlbmNl cyBpbiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0gZGFudmV0Cj4gPiAgLSBB bm5vdGF0ZSBhdG9taWMgVkNQSSBhbmQgYXRvbWljIGNoZWNrIGZ1bmN0aW9ucyB3aXRoIF9fbXVz dF9jaGVjawo+ID4gICAgLSBkYW52ZXQKPiA+IAo+ID4gQ2hhbmdlcyBzaW5jZSB2MToKPiA+ICAt IERvbid0IHVzZSB0aGUgbm93LXJlbW92ZWQgLT5hdG9taWNfY2hlY2soKSBmb3IgcHJpdmF0ZSBv YmplY3RzIGhvb2ssCj4gPiAgICBqdXN0IGdpdmUgZHJpdmVycyBhIGZ1bmN0aW9uIHRvIGNhbGwg dGhlbXNlbHZlcwo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRo YXQuY29tPgo+ID4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4g PiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIHwgMjIyICsr KysrKysrKysrKysrKysrKysrKystLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jICB8ICAgNCArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0 LmMgICB8ICAzMSArKy0tCj4gPiAgaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCAgICAg ICB8ICAyMyArKy0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDIyNSBpbnNlcnRpb25zKCspLCA1NSBk ZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBf bXN0X3RvcG9sb2d5LmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3ku Ywo+ID4gaW5kZXggOGMzY2ZhYzQzN2Y0Li43NDgyM2FmYjI2MmUgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiBAQCAtMjYxNCwyMSArMjYxNCwzNCBAQCBz dGF0aWMgaW50IGRybV9kcF9pbml0X3ZjcGkoc3RydWN0Cj4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyLAo+ID4gIH0KPiA+ICAKPiA+ICAvKioKPiA+IC0gKiBkcm1fZHBfYXRvbWljX2Zp bmRfdmNwaV9zbG90cygpIC0gRmluZCBhbmQgYWRkIHZjcGkgc2xvdHMgdG8gdGhlIHN0YXRlCj4g PiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFkZCBWQ1BJ IHNsb3RzIHRvIHRoZSBzdGF0ZQo+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQo+ ID4gICAqIEBtZ3I6IE1TVCB0b3BvbG9neSBtYW5hZ2VyIGZvciB0aGUgcG9ydAo+ID4gICAqIEBw b3J0OiBwb3J0IHRvIGZpbmQgdmNwaSBzbG90cyBmb3IKPiA+ICAgKiBAcGJuOiBiYW5kd2lkdGgg cmVxdWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ID4gICAqCj4gPiAtICogUkVUVVJOUzoKPiA+ IC0gKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWljIHN0YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBv cnQgb3IgZXJyb3IKPiA+ICsgKiBBbGxvY2F0ZXMgVkNQSSBzbG90cyB0byBAcG9ydCwgcmVwbGFj aW5nIGFueSBwcmV2aW91cyBWQ1BJIGFsbG9jYXRpb25zCj4gPiBpdAo+ID4gKyAqIG1heSBoYXZl IGhhZC4gQW55IGF0b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlz Cj4gPiBmdW5jdGlvbgo+ID4gKyAqIGluIHRoZWlyICZkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3Mu YXRvbWljX2NoZWNrKCkgY2FsbGJhY2sgdG8gY2hhbmdlCj4gPiB0aGUKPiA+ICsgKiBjdXJyZW50 IFZDUEkgYWxsb2NhdGlvbiBmb3IgdGhlIG5ldyBzdGF0ZS4gVGhlIGFsbG9jYXRpb25zIGFyZSBu b3QKPiA+IGNoZWNrZWQKPiA+ICsgKiBhZ2FpbnN0IHRoZSBiYW5kd2lkdGggcmVzdHJhaW50cyBv ZiBAbWdyIHVudGlsIHRoZSBkcml2ZXIgY2FsbHMKPiA+ICsgKiBkcm1fZHBfbXN0X2F0b21pY19j aGVjaygpLgo+ID4gKyAqCj4gPiArICogU2VlIGFsc286Cj4gPiArICogZHJtX2RwX2F0b21pY19y ZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICogVG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBz dGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0LCBvciBhIG5lZ2F0aXZlCj4gPiBlcnJvcgo+ID4g KyAqIGNvZGUgaWYgdGhlIHBvcnQgbm8gbG9uZ2VyIGV4aXN0cwo+ID4gICAqLwo+ID4gIGludCBk cm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsCj4gPiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiAg CQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibikKPiA+ICB7Cj4gPiAg CXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICp0b3BvbG9neV9zdGF0ZTsKPiA+IC0J aW50IHJlcV9zbG90czsKPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywg KnZjcGkgPSBOVUxMOwo+ID4gKwlpbnQgcHJldl9zbG90cywgcmVxX3Nsb3RzLCByZXQ7Cj4gPiAg Cj4gPiAgCXRvcG9sb2d5X3N0YXRlID0gZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRl KHN0YXRlLCBtZ3IpOwo+ID4gIAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+IEBAIC0y NjM3LDIwICsyNjUwLDQxIEBAIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1 Y3QKPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAlwb3J0ID0gZHJtX2RwX2dldF92 YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiA+ICAJaWYgKHBvcnQgPT0gTlVMTCkKPiA+ ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gLQlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBt Z3ItPnBibl9kaXYpOwo+ID4gLQlEUk1fREVCVUdfS01TKCJ2Y3BpIHNsb3RzIHJlcT0lZCwgYXZh aWw9JWRcbiIsCj4gPiAtCQkJcmVxX3Nsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMp Owo+ID4gIAo+ID4gLQlpZiAocmVxX3Nsb3RzID4gdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3Rz KSB7Cj4gPiAtCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiAtCQlyZXR1cm4gLUVOT1NQQzsK PiA+ICsJLyogRmluZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uIGZvciB0aGlzIHBvcnQsIGlmIGFu eSAqLwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnRvcG9sb2d5X3N0YXRlLT52Y3Bp cywgbmV4dCkgewo+ID4gKwkJaWYgKHBvcy0+cG9ydCA9PSBwb3J0KSB7Cj4gPiArCQkJdmNwaSA9 IHBvczsKPiA+ICsJCQlwcmV2X3Nsb3RzID0gdmNwaS0+dmNwaTsKPiA+ICsJCQlicmVhazsKPiA+ ICsJCX0KPiA+ICAJfQo+ID4gKwlpZiAoIXZjcGkpCj4gPiArCQlwcmV2X3Nsb3RzID0gMDsKPiA+ ICsKPiA+ICsJcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5fZGl2KTsKPiA+ ICAKPiA+IC0JdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzIC09IHJlcV9zbG90czsKPiA+IC0J RFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyBhdmFpbD0lZCIsIHRvcG9sb2d5X3N0YXRlLT5hdmFp bF9zbG90cyk7Cj4gPiArCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9S VDolcF0gdmNwaSAlZCAtPiAlZFxuIiwKPiA+ICsJCSAgICAgIHBvcnQtPmNvbm5lY3Rvci0+YmFz ZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLCBwb3J0LAo+ID4gKwkJICAgICAgcHJldl9zbG90 cywgcmVxX3Nsb3RzKTsKPiA+ICAKPiA+ICsJLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0 aGUgc3RhdGUgKi8KPiA+ICsJaWYgKCF2Y3BpKSB7Cj4gPiArCQl2Y3BpID0ga3phbGxvYyhzaXpl b2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiA+ICsJCWlmICghdmNwaSkgewo+ID4gKwkJCXJldCA9 IC1FTk9NRU07Cj4gPiArCQkJZ290byBvdXQ7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQl2Y3BpLT5w b3J0ID0gcG9ydDsKPiA+ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmdG9wb2xvZ3lfc3RhdGUt PnZjcGlzKTsKPiA+ICsJfQo+ID4gKwl2Y3BpLT52Y3BpID0gcmVxX3Nsb3RzOwo+ID4gKwo+ID4g KwlyZXQgPSByZXFfc2xvdHM7Cj4gPiArb3V0Ogo+ID4gIAlkcm1fZHBfcHV0X3BvcnQocG9ydCk7 Cj4gPiAtCXJldHVybiByZXFfc2xvdHM7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiAgfQo+ID4gIEVY UE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ID4gIAo+ID4gQEAg LTI2NTgsMzIgKzI2OTIsNTAgQEAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNw aV9zbG90cyk7Cj4gPiAgICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSAtIFJl bGVhc2UgYWxsb2NhdGVkIHZjcGkgc2xvdHMKPiA+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMg c3RhdGUKPiA+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQKPiA+ IC0gKiBAc2xvdHM6IG51bWJlciBvZiB2Y3BpIHNsb3RzIHRvIHJlbGVhc2UKPiA+ICsgKiBAcG9y dDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgVkNQSSBzbG90cyBmcm9tCj4gPiAgICoKPiA+IC0g KiBSRVRVUk5TOgo+ID4gLSAqIDAgaWYgQHNsb3RzIHdlcmUgYWRkZWQgYmFjayB0byAmZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZS0KPmF2YWlsX3Nsb3RzIAo+ID4gb3IKPiA+IC0gKiBuZWdhdGl2 ZSBlcnJvciBjb2RlCj4gPiArICogUmVsZWFzZXMgYW55IFZDUEkgc2xvdHMgdGhhdCBoYXZlIGJl ZW4gYWxsb2NhdGVkIHRvIGEgcG9ydCBpbiB0aGUKPiA+IGF0b21pYwo+ID4gKyAqIHN0YXRlLiBB bnkgYXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rp b24gaW4KPiA+ICsgKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MuYXRvbWljX2No ZWNrKCkgY2FsbGJhY2sgd2hlbiB0aGUKPiA+ICsgKiBjb25uZWN0b3Igd2lsbCBubyBsb25nZXIg aGF2ZSBWQ1BJIGFsbG9jYXRlZCAoZS5nLiBiZWNhdXNlIGl0J3MgQ1JUQwo+ID4gd2FzCj4gPiAr ICogcmVtb3ZlZCkuCj4gPiArICoKPiA+ICsgKiBJdCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBp ZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSwKPiA+IGluCj4gPiArICog d2hpY2ggY2FzZSBpdCB3aWxsIGp1c3QgYW1vdW50IHRvIGEgbm8tb3AuCj4gPiArICoKPiA+ICsg KiBTZWUgYWxzbzoKPiA+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gPiAr ICogZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKQo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ ICsgKiAwIGlmIGFsbCBzbG90cyBmb3IgdGhpcyBwb3J0IHdlcmUgYWRkZWQgYmFjayB0bwo+ID4g KyAqICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLmF2YWlsX3Nsb3RzIG9yIG5lZ2F0aXZlIGVy cm9yIGNvZGUKPiA+ICAgKi8KPiA+ICBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAkJCQkgICAgIHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gLQkJCQkgICAgIGludCBzbG90cykKPiA+ ICsJCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ID4gIHsKPiA+ICAJc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnRvcG9sb2d5X3N0YXRlOwo+ID4gKwlzdHJ1 Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdG1wLCAqcG9zOwo+ID4gIAo+ID4gIAl0b3BvbG9n eV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsK PiA+ICAJaWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4gPiAgCQlyZXR1cm4gUFRSX0VSUih0 b3BvbG9neV9zdGF0ZSk7Cj4gPiAgCj4gPiAtCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBvcnQtPnZj cGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ID4gLQkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xv dHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZiB0aGUgcGFyZW50Cj4gPiAtCSAqIGJyYW5j aCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcK PiA+IC0JICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lf c3RhdGUgaW5zdGVhZCBvZgo+ID4gLQkgKiBkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxs IHVzIGhvdyBtYW55IHNsb3RzIHRvIHJlbGVhc2UuCj4gPiAtCSAqLwo+ID4gLQl0b3BvbG9neV9z dGF0ZS0+YXZhaWxfc2xvdHMgKz0gc2xvdHM7Cj4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xv dHMgcmVsZWFzZWQ9JWQsIGF2YWlsPSVkXG4iLAo+ID4gLQkJCXNsb3RzLCB0b3BvbG9neV9zdGF0 ZS0+YXZhaWxfc2xvdHMpOwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAs ICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ICsJCWlmIChwb3MtPnBvcnQgPT0g cG9ydCkgewo+ID4gKwkJCWxpc3RfZGVsKCZwb3MtPm5leHQpOwo+ID4gKwkJCURSTV9ERUJVR19L TVMoIltNU1QgUE9SVDolcF0gdmNwaSAlZCAtPiAwXG4iLAo+ID4gKwkJCQkgICAgICBwb3J0LCBw b3MtPnZjcGkpOwo+ID4gIAo+ID4gKwkJCWtmcmVlKHBvcyk7Cj4gPiArCQkJcmV0dXJuIDA7Cj4g PiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogSWYgbm8gYWxsb2NhdGlvbiB3YXMgZm91bmQs IGFsbCB0aGF0IG1lYW5zIGlzIHRoYXQgdGhlIHBvcnQgd2FzCj4gPiArCSAqIGRlc3Ryb3llZCBz aW5jZSB0aGUgbGFzdCBhdG9taWMgY29tbWl0LiBUaGF0J3MgT0shCj4gPiArCSAqLwo+IAo+IFRo aXMgY2FzZSBoZXJlIGhhcyBtZSBhIGJpdCB3b3JyaWVkLiBJIHRob3VnaHQgd2l0aCB5b3VyIGNo YW5nZXMgd2UnbGwKPiBhbHdheXMgaGF2ZSB0aGUgcG9ydCBwb2ludGVyIHN0aWxsIGFyb3VuZCwg dG8gYmUgYWJsZSB0byBjbGVhbiB0aGluZ3MgdXAKPiBwcm9wZXJseS4gSWYgdGhpcyBpcyBub3Qg dGhlIGNhc2UgdGhlbiB3ZSdkIHBvdGVudGlhbGx5IGxlYWsgdGhlIHZjcGkKPiBhbGxvY2F0aW9u IGZvciBhbiB1bnBsdWdnZWQgcG9ydC4KPiAKPiBPdG9oIGlmIHRoZSBkcml2ZXIgcmVsZWFzZXMg dGhlIGFsbG9jYXRpb24gZm9yIGEgcG9ydCB0d2ljZSBpdCdzIHByb2JhYmx5Cj4gbWl4ZWQgdXAg aXQncyBvd24gYm9vay1rZWVwaW5nLiBXZSBzaG91bGQgV0FSTiBhYm91dCB0aGF0IGNhc2UuCj4g Cj4gVGhpcyBpcyBraW5kYSBmYWxsb3V0IGZyb20geW91ciBjaGFuZ2UgdG8gbm90IHBydW5lIGFs bG9jYXRpb25zIG9uCj4gZHVwbGljYXRlLCBhbmQgSSB0aGluayB3aWxsIGZ1cnRoZXIgY2xlYW4g dXAgaG93IHRoaXMgaXMgaGFuZGxlZC4KPiAKPiBTbyB3aXRoIHRoZSBjb21tZW50IHJlbW92ZWQg YW5kIHJlcGxhY2VkIGJ5IGEgV0FSTklORygxLCJubyB2Y3BpCj4gYWxsb2NhdGlvbiBmb3VuZCBm b3IgcG9ydCAlcFxuIiwgcG9ydCkgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCB0aGlzIHNob3VsZAo+ IGJlIHNvbGlkLgoKSG07IHRoYXQgY29tbWVudCBpcyBsZWZ0b3ZlciBmcm9tIHRoZSBmYWxsb3V0 IG9mIG1vdmluZyB0aGUgcG9ydCB2ZXJpZmljYXRpb24KbG9naWMgb3V0IG9mIHRoZSBzdGF0ZSBk dXBsaWNhdGUgZnVuY3Rpb25zLCBidXQgSSBkb24ndCB0aGluayB0aGlzIHdvdWxkCm5lc3NlY2Fy aWx5IGJlIGEgYm9va2tlZXBpbmcgZXJyb3IuIElmIHdlJ3JlIGdvaW5nIHRvIHN1cHBvcnQgZmFs bGJhY2sKbGluayByZXRyYWluaW5nLCB3ZSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5 IGRyaXZlcidzCmRybV9jb25uZWN0b3ItPmF0b21pY19jaGVjaygpIGZ1bmN0aW9uIGlzIGlkZW1w b3RlbnQgc28gdGhhdCBpZiB0aGUKYXRvbWljIGhlbHBlcnMgaGF2ZSB0byBwdWxsIGluIG1vcmUg Q1JUQ3MgdG8gcGVyZm9ybSBtb2Rlc2V0cyBvbiB0aGVuCnVzZXJzcGFjZSBvcmlnaW5hbGx5IGFk ZGVkLCB0aGUgc2Vjb25kIGNoZWNrIG9uIHRoZSBEUk0gY29ubmVjdG9yCmRvZXNuJ3QgY2F1c2Ug YW55IGlzc3Vlcy4gUmVtZW1iZXI6IGlmIHdlJ3JlIHRyeWluZyB0byByZXRyYWluIGFuIE1TVAp0 b3BvbG9neSBhdCBhIGxvd2VyIGxpbmsgcmF0ZSB0aGVuIGJlZm9yZSwgdGhhdCBtZWFucyBjaGFu Z2luZyB0aGUgUEJOCmRpdmlzb3Igd2hpY2ggaW4gdHVybiBtZWFucyB0aGF0IHRoZSBvbmx5IHZh bGlkIGFjdGlvbnMgdGhhdCBjYW4gYmUKdGFrZW4gYXJlIHJlY2FsY3VsYXRpbmcgZXZlcnkgYWN0 aXZlIFZDUEkgYWxsb2NhdGlvbiBhdCBvbmNlIGluIG9yZGVyIHRvCnByZXZlbnQgc3RhdGUgaW5j b25zaXN0ZW5jaWVzLCBvciBkaXNhYmxpbmcgYWxsIG9mIHRoZSBkaXNwbGF5cyAoc2luY2UKZ29p bmcgZnJvbSA+MCBWQ1BJIHRvIDAgVkNQSSBzaG91bGQgYWx3YXlzIGJlIHNhZmUpLgoKV2UgL2Nv dWxkLyBqdXN0IGxlYXZlIHRoaXMgdXAgdG8gdGhlIGRyaXZlciB0byBkbyB0aGUgYm9va2tlZXBp bmcgb24KdGhpcywgYnV0IHRoYXQgc2VlbXMgcmF0aGVyIHJlZHVuZGFudC4gV2UgY291bGQgYWRk IGV4dHJhIGJvb2trZWVwaW5nIGluCnRoZSBhdG9taWMgY2hlY2sgdGhvdWdoIHNvIHRoYXQgaW5z dGVhZCBvZiBqdXN0IGRlbGV0aW5nIHRoZSBzdHJ1Y3RzIGZvcgplYWNoIFZDUEkgYWxsb2NhdGlv biB3aGVuIHRoZXkgZ28gdG8gMCwgd2UgaW5zdGVhZCBqdXN0IHNldCB0aGVtIHRvIDAKdGhlbiBm cmVlIHRoZW0gc29tZXdoZXJlIGVsc2UuCgo+IAo+IAo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4g PiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyk7Cj4gPiBA QCAtMzExMiwxNSArMzE2NCwzNCBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9jb25uZWN0 b3Jfd29yayhzdHJ1Y3QKPiA+IHdvcmtfc3RydWN0ICp3b3JrKQo+ID4gIHN0YXRpYyBzdHJ1Y3Qg ZHJtX3ByaXZhdGVfc3RhdGUgKgo+ID4gIGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlKHN0cnVj dCBkcm1fcHJpdmF0ZV9vYmogKm9iaikKPiA+ICB7Cj4gPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlICpzdGF0ZTsKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKnN0YXRlLCAqb2xkX3N0YXRlID0KPiA+ICsJCXRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShv YmotPnN0YXRlKTsKPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZj cGk7Cj4gPiAgCj4gPiAtCXN0YXRlID0ga21lbWR1cChvYmotPnN0YXRlLCBzaXplb2YoKnN0YXRl KSwgR0ZQX0tFUk5FTCk7Cj4gPiArCXN0YXRlID0ga21lbWR1cChvbGRfc3RhdGUsIHNpemVvZigq c3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ICAJaWYgKCFzdGF0ZSkKPiA+ICAJCXJldHVybiBOVUxM Owo+ID4gIAo+ID4gIAlfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9z dGF0ZShvYmosICZzdGF0ZS0+YmFzZSk7Cj4gPiAgCj4gPiArCUlOSVRfTElTVF9IRUFEKCZzdGF0 ZS0+dmNwaXMpOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJm9sZF9zdGF0 ZS0+dmNwaXMsIG5leHQpIHsKPiA+ICsJCXZjcGkgPSBrbWVtZHVwKHBvcywgc2l6ZW9mKCp2Y3Bp KSwgR0ZQX0tFUk5FTCk7Cj4gPiArCQlpZiAoIXZjcGkpCj4gPiArCQkJZ290byBmYWlsX2FsbG9j Owo+ID4gKwo+ID4gKwkJbGlzdF9hZGQoJnZjcGktPm5leHQsICZzdGF0ZS0+dmNwaXMpOwo+ID4g Kwl9Cj4gPiArCj4gPiAgCXJldHVybiAmc3RhdGUtPmJhc2U7Cj4gPiArCj4gPiArZmFpbF9hbGxv YzoKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdmNwaSwgJnN0YXRlLT52Y3Bp cywgbmV4dCkKPiA+ICsJCWtmcmVlKHBvcyk7Cj4gPiArCWtmcmVlKHN0YXRlKTsKPiA+ICsKPiA+ ICsJcmV0dXJuIE5VTEw7Cj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyB2b2lkIGRybV9kcF9tc3Rf ZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmosCj4gPiBAQCAtMzEyOCwx NCArMzE5OSw5OSBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3RydWN0 Cj4gPiBkcm1fcHJpdmF0ZV9vYmogKm9iaiwKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUgPQo+ID4gIAkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0 YXRlKHN0YXRlKTsKPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnRt cDsKPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1wLCAmbXN0X3N0 YXRlLT52Y3BpcywgbmV4dCkKPiA+ICsJCWtmcmVlKHBvcyk7Cj4gPiAgCj4gPiAgCWtmcmVlKG1z dF9zdGF0ZSk7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3ByaXZh dGVfc3RhdGVfZnVuY3MgbXN0X3N0YXRlX2Z1bmNzID0gewo+ID4gK3N0YXRpYyBpbmxpbmUgaW50 Cj4gPiArZHJtX2RwX21zdF9hdG9taWNfY2hlY2tfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyCj4gPiAqbWdyLAo+ID4gKwkJCQkgICAgICAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ICptc3Rfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg ZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdmNwaTsKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9y dCAqcG9ydDsKPiA+ICsJaW50IGF2YWlsX3Nsb3RzID0gNjMsIHJldDsKPiA+ICsKPiA+ICsJbGlz dF9mb3JfZWFjaF9lbnRyeSh2Y3BpLCAmbXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gKwkJ LyogUG9ydHMgdGhhdCBubyBsb25nZXIgZXhpc3Qgc2hvdWxkbid0IGJlIGNvdW50ZWQgdG93YXJk cyB0aGUKPiA+ICsJCSAqIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgZm9yIHRoZSBzdGF0ZSwgc28g c2tpcCB0aGVtCj4gPiArCQkgKi8KPiAKPiBTY2VuYXJpbzoKPiAtIDIgbXN0IHNpbmtzIG9uIGEg c2luZ2xlIGhvc3Qgc2lkZSBwb3J0Lgo+IC0gMXN0IGNvbm5lY3RvciBpcyBhY3RpdmUsIDJuZCBj b25uZWN0b3IgaXMgb2ZmLgo+IC0gMXN0IGNvbm5lY3RvciBpcyBob3QtdW5wbHVnZ2VkLCBidXQg dXNlcnNwYWNlIGhhc24ndCByZWFsaXplZCB0aGlzIHlldCwKPiAgIHNvIG5vdCB5ZXQgY29tZSBh cm91bmQgdG8gZG8gdGhlIGRpc2FibGluZyBtb2Rlc2V0Lgo+IC0gQXQgdGhlIHNhbWUgdGltZSB1 c2Vyc3BhY2UgZGVjaWRlcyB0byBlbmFibGUgdGhlIDJuZCBvdXRwdXQsIHdoaWNoCj4gICBmb3Jj ZXMgYSBtb2Rlc2V0IGFuZCBwdWxscyB0aGUgdG9wb2xvZ3kgc3RhdGUgaW4uCj4gLSBUaGlzIGZ1 bmN0aW9uIGhlcmUgZGVjaWRlcyB0byBvbmx5IGxvb2sgYXQgdGhlIHZjcGkgYWxsb2NhdGlvbiBm b3IgdGhlCj4gICAybmQgY29ubmVjdG9yIGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBnb25lIGFs cmVhZHkuCj4gLSBVbmZvcnR1bmF0ZWx5IGxpZ2h0aW5nIHVwIGJvdGggY29ubmVjdG9ycyBhdCB0 aGUgc2FtZSB0aW1lIGlzbid0Cj4gICBwb3NzaWJsZSwgYmVjYXVzZSB0b28gbWFueSB2Y3BpLiBC dXQgc2luY2UgdXNlcnNwYWNlIGRpZG4ndCBhc2sgZm9yIGEKPiAgIG1vZGVzZXQgb24gdGhlIG5v dyB1bnBsdWdnZWQgZmlyc3QgY29ubmVjdG9yLgo+IC0+IE1vZGVzZXQgZ29lcyBib29tIGJlY2F1 c2Ugd2UgZW5hYmxlIHRvbyBtYW55IHZjcGkuCj4gCj4gQnV0IHdpdGggdGhlIGNoYW5nZSBpbiBo b3cgd2UgcmVsZWFzZSB2Y3BpIGFsbG9jYXRpb25zIHRoZXJlJ3Mgbm8gbmVlZCB0bwo+IGlnbm9y ZSBkaXNjb25uZWN0ZWQgc3R1ZmYgaGVyZSwgYW5kIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNoZWNr IHZjcGkgbGltaXRzCj4gYnkganVzdCBjaGVja2luZyBhbGwgb2YgdGhlbS4KPiAKPiBJIGRpZG4n dCBzZWUgYW55dGhpbmcgZWxzZSBzZXJpb3VzLCBzbyB3aXRoIHRoZSBhYm92ZSB0d28gdGhpbmdz IHJlc29sdmVkCj4gdGhpcyBoYXMgbXkgUmV2aWV3ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmll bC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gCj4gT25lIGJpa2VzaGVkIGJlbG93LCBiZWNhdXNlIEkgbmVl ZCB0byBwcm92ZSBJIHNjcm9sbGVkIHRvIHRoZSBlbmQgOi0pCj4gCj4gPiArCQlwb3J0ID0gZHJt X2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCB2Y3BpLT5wb3J0KTsKPiA+ICsJCWlmICgh cG9ydCkgewo+ID4gKwkJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gaXMgc3RhbGUs IHNraXBwaW5nCj4gPiBjaGVja3NcbiIsCj4gPiArCQkJCQkgdmNwaS0+cG9ydCk7Cj4gPiArCQkJ Y29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBP UlQ6JXBdIHJlcXVpcmVzICVkIHZjcGkgc2xvdHNcbiIsCj4gPiArCQkJCSB2Y3BpLT5wb3J0LCB2 Y3BpLT52Y3BpKTsKPiA+ICsKPiA+ICsJCWF2YWlsX3Nsb3RzIC09IHZjcGktPnZjcGk7Cj4gPiAr CQlpZiAoYXZhaWxfc2xvdHMgPCAwKSB7Cj4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQ T1JUOiVwXSBub3QgZW5vdWdoIHZjcGkgc2xvdHMKPiA+IGluIG1zdF9zdGF0ZSAlcCAoYXZhaWw9 JWQpXG4iLAo+ID4gKwkJCQkJIHZjcGktPnBvcnQsIG1zdF9zdGF0ZSwKPiA+ICsJCQkJCSBhdmFp bF9zbG90cyArIHZjcGktPnZjcGkpOwo+ID4gKwkJCXJldCA9IC1FTk9TUEM7Cj4gPiArCQkJZ290 byBwb3J0X2ZhaWw7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7 Cj4gPiArCX0KPiA+ICsJRFJNX0RFQlVHX0FUT01JQygiW01TVCBNR1I6JXBdIG1zdF9zdGF0ZSAl cCB2Y3BpIGF2YWlsPSVkIHVzZWQ9JWRcbiIsCj4gPiArCQkJIG1nciwgbXN0X3N0YXRlLCBhdmFp bF9zbG90cywKPiA+ICsJCQkgNjMgLSBhdmFpbF9zbG90cyk7Cj4gPiArCj4gPiArCXJldHVybiAw Owo+ID4gK3BvcnRfZmFpbDoKPiA+ICsJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gKwlyZXR1 cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZHBfbXN0X2F0b21pY19j aGVjayAtIENoZWNrIHRoYXQgdGhlIG5ldyBzdGF0ZSBvZiBhbiBNU1QgdG9wb2xvZ3kKPiA+IGlu IGFuCj4gPiArICogYXRvbWljIHVwZGF0ZSBpcyB2YWxpZAo+ID4gKyAqIEBzdGF0ZTogUG9pbnRl ciB0byB0aGUgbmV3ICZzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4gKyAqCj4g PiArICogQ2hlY2tzIHRoZSBnaXZlbiB0b3BvbG9neSBzdGF0ZSBmb3IgYW4gYXRvbWljIHVwZGF0 ZSB0byBlbnN1cmUgdGhhdAo+ID4gaXQncwo+ID4gKyAqIHZhbGlkLiBUaGlzIGluY2x1ZGVzIGNo ZWNraW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggYmFuZHdpZHRoIHRvCj4gPiBzdXBwb3J0Cj4g PiArICogdGhlIG5ldyBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZSBhdG9taWMgdXBkYXRlLgo+ID4g KyAqCj4gPiArICogQW55IGF0b21pYyBkcml2ZXJzIHN1cHBvcnRpbmcgRFAgTVNUIG11c3QgbWFr ZSBzdXJlIHRvIGNhbGwgdGhpcyBhZnRlcgo+ID4gKyAqIGNoZWNraW5nIHRoZSByZXN0IG9mIHRo ZWlyIHN0YXRlIGluIHRoZWlyCj4gPiArICogJmRybV9tb2RlX2NvbmZpZ19mdW5jcy5hdG9taWNf Y2hlY2soKSBjYWxsYmFjay4KPiA+ICsgKgo+ID4gKyAqIFNlZSBhbHNvOgo+ID4gKyAqIGRybV9k cF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2Vf dmNwaV9zbG90cygpCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqCj4gPiArICogMCBp ZiB0aGUgbmV3IHN0YXRlIGlzIHZhbGlkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4K PiA+ICsgKi8KPiA+ICtpbnQgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3I7Cj4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3Rh dGU7Cj4gPiArCWludCBpLCByZXQgPSAwOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9uZXdfbXN0X21n cl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKPiA+ICsJCXJldCA9IGRybV9k cF9tc3RfYXRvbWljX2NoZWNrX3RvcG9sb2d5X3N0YXRlKG1nciwgbXN0X3N0YXRlKTsKPiA+ICsJ CWlmIChyZXQpCj4gPiArCQkJYnJlYWs7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsK PiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2F0b21pY19jaGVjayk7Cj4gPiAr Cj4gPiArY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGVfZnVuY3MgPSB7Cj4gPiAgCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJt X2RwX21zdF9kdXBsaWNhdGVfc3RhdGUsCj4gPiAgCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRy bV9kcF9tc3RfZGVzdHJveV9zdGF0ZSwKPiA+ICB9Owo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyk7Cj4gPiAgCj4gPiAgLyoqCj4gPiAgICogZHJtX2F0 b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlOiBnZXQgTVNUIHRvcG9sb2d5IHN0YXRlCj4gPiBA QCAtMzIxMywxMyArMzM2OSwxMSBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdChz dHJ1Y3QKPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiAgCQlyZXR1cm4gLUVO T01FTTsKPiA+ICAKPiA+ICAJbXN0X3N0YXRlLT5tZ3IgPSBtZ3I7Cj4gPiAtCj4gPiAtCS8qIG1h eC4gdGltZSBzbG90cyAtIG9uZSBzbG90IGZvciBNVFAgaGVhZGVyICovCj4gPiAtCW1zdF9zdGF0 ZS0+YXZhaWxfc2xvdHMgPSA2MzsKPiA+ICsJSU5JVF9MSVNUX0hFQUQoJm1zdF9zdGF0ZS0+dmNw aXMpOwo+ID4gIAo+ID4gIAlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2luaXQoJm1nci0+YmFzZSwK PiA+ICAJCQkJICAgICZtc3Rfc3RhdGUtPmJhc2UsCj4gPiAtCQkJCSAgICAmbXN0X3N0YXRlX2Z1 bmNzKTsKPiA+ICsJCQkJICAgICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzKTsKPiA+ ICAKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKPiA+IGluZGV4IGJiZjhjYTIxYTdhMi4uODc0OWNmNjFhNmFjIDEwMDY0NAo+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IEBAIC0xMjU1Myw2ICsxMjU1Mywx MCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZQo+ID4g KmRldiwKPiA+ICAJCQkJICAgICAgICJbbW9kZXNldF0iIDogIltmYXN0c2V0XSIpOwo+ID4gIAl9 Cj4gPiAgCj4gPiArCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKTsKPiA+ICsJ aWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gCj4gQ29tcGxldGUgYmlrZXNoZWQsIHNvIGZl ZWwgZnJlZSB0byBpZ25vcmU6IEknZCBzdHVmZiB0aGlzIGludG8KPiBpbnRlbF9tb2Rlc2V0X2No ZWNrcygpLiBGZWVsIGZyZWUgdG8gaWdub3JlLgo+IAo+IENoZWVycywgRGFuaWVsCj4gCj4gPiAr Cj4gPiAgCWlmIChhbnlfbXMpIHsKPiA+ICAJCXJldCA9IGludGVsX21vZGVzZXRfY2hlY2tzKHN0 YXRlKTsKPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cF9tc3QuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gaW5k ZXggOGI3MWQ2NGViZDlkLi5hYWY5MDQ3MzhiNzggMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHBfbXN0LmMKPiA+IEBAIC0xMTQsMjggKzExNCwzMSBAQCBzdGF0aWMgaW50IGludGVs X2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0Cj4gPiBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is Cj4gPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZTsKPiA+ICAJ c3RydWN0IGRybV9jcnRjICpvbGRfY3J0YzsKPiA+ICAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwo+ID4gLQlpbnQgc2xvdHMsIHJldCA9IDA7Cj4gPiArCXN0cnVjdCBpbnRlbF9j b25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9Cj4gPiArCQl0b19pbnRlbF9jb25uZWN0b3IoY29u bmVjdG9yKTsKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPQo+ID4g KwkJJmludGVsX2Nvbm5lY3Rvci0+bXN0X3BvcnQtPm1zdF9tZ3I7Cj4gPiArCXN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKnBvcnQgPSBpbnRlbF9jb25uZWN0b3ItPnBvcnQ7Cj4gPiArCWludCByZXQg PSAwOwo+ID4gIAo+ID4gIAlvbGRfY29ubl9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X29sZF9jb25u ZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiAgCW9sZF9jcnRjID0gb2xkX2Nvbm5f c3RhdGUtPmNydGM7Cj4gPiAgCWlmICghb2xkX2NydGMpCj4gPiAgCQlyZXR1cm4gcmV0Owo+ID4g IAo+ID4gLQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUs IG9sZF9jcnRjKTsKPiA+IC0Jc2xvdHMgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUp LT5kcF9tX24udHU7Cj4gPiAtCWlmIChkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRj X3N0YXRlKSAmJiBzbG90cyA+IDApIHsKPiA+IC0JCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyOwo+ID4gLQkJc3RydWN0IGRybV9lbmNvZGVyICpvbGRfZW5jb2RlcjsKPiA+ICsJ LyogRnJlZSBWQ1BJLCBzaW5jZSBjb21wdXRlX2NvbmZpZygpIHdvbid0IGJlIHJ1biAqLwo+ID4g KwlpZiAoIW5ld19jb25uX3N0YXRlLT5jcnRjKSB7Cj4gPiArCQljcnRjX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ICAKPiA+IC0JCW9s ZF9lbmNvZGVyID0gb2xkX2Nvbm5fc3RhdGUtPmJlc3RfZW5jb2RlcjsKPiA+IC0JCW1nciA9ICZl bmNfdG9fbXN0KG9sZF9lbmNvZGVyKS0+cHJpbWFyeS0+ZHAubXN0X21ncjsKPiA+IC0KPiA+IC0J CXJldCA9IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsIHNsb3Rz KTsKPiA+IC0JCWlmIChyZXQpCj4gPiAtCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHJlbGVhc2lu ZyAlZCB2Y3BpIHNsb3RzOiVkXG4iLAo+ID4gc2xvdHMsIHJldCk7Cj4gPiAtCQllbHNlCj4gPiAt CQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiA+ICsJ CXJldCA9IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsIHBvcnQp Owo+ID4gKwkJaWYgKHJldCkgewo+ID4gKwkJCURSTV9ERUJVR19LTVMoImZhaWxlZCByZWxlYXNp bmcgdmNwaSBzbG90czogJWRcbiIsCj4gPiArCQkJCSAgICAgIHJldCk7Cj4gPiArCQkJcmV0dXJu IHJldDsKPiA+ICsJCX0KPiA+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRw X21fbi50dSA9IDA7Cj4gPiAgCX0KPiA+ICsKPiA+ICAJcmV0dXJuIHJldDsKPiA+ICB9Cj4gPiAg Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gYi9p bmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiBpbmRleCAzZmFjZWI2NmY1Y2IuLjA4 YjY3OTQ4YjhmOSAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVy LmgKPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+IEBAIC00MDYs OSArNDA2LDE1IEBAIHN0cnVjdCBkcm1fZHBfcGF5bG9hZCB7Cj4gPiAgCj4gPiAgI2RlZmluZSB0 b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdAo+ID4gZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZSwgYmFzZSkKPiA+ICAKPiA+ICtzdHJ1Y3QgZHJtX2RwX3Zj cGlfYWxsb2NhdGlvbiB7Cj4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7Cj4gPiAr CWludCB2Y3BpOwo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cj4gPiArfTsKPiA+ICsKPiA+ ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSB7Cj4gPiAgCXN0cnVjdCBkcm1fcHJp dmF0ZV9zdGF0ZSBiYXNlOwo+ID4gLQlpbnQgYXZhaWxfc2xvdHM7Cj4gPiArCXN0cnVjdCBsaXN0 X2hlYWQgdmNwaXM7Cj4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ ID4gIH07Cj4gPiAgCj4gPiBAQCAtNjE5LDE0ICs2MjUsMTcgQEAgdm9pZCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9zdXNwZW5kKHN0cnVjdAo+ID4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n cik7Cj4gPiAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3Jlc3VtZShzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gPiAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf c3RhdGUKPiA+ICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAkJCQkJCQkJICAgIHN0cnVjdAo+ID4gZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gPiAtaW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Ns b3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+IC0JCQkJICBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+IC0JCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0LCBpbnQgcGJuKTsKPiA+IC1pbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlf c2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gLQkJCQkgICAgIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gLQkJCQkgICAgIGludCBzbG90cyk7 Cj4gPiAraW50IF9fbXVzdF9jaGVjawo+ID4gK2RybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3Rz KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKPiA+ICtpbnQgX19tdXN0X2NoZWNrCj4gPiArZHJtX2Rw X2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl LAo+ID4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiArCQkJ CSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsKPiA+ICBpbnQgZHJtX2RwX3NlbmRfcG93 ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ICAJ CQkJIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGJvb2wgcG93ZXJfdXApOwo+ID4gK2lu dCBfX211c3RfY2hlY2sgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKTsKPiA+ICAKPiA+ICBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9wcml2YXRl X3N0YXRlX2Z1bmNzCj4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzOwo+ID4gIAo+ ID4gLS0gCj4gPiAyLjE5LjEKPiA+IAotLSAKQ2hlZXJzLAoJTHl1ZGUgUGF1bAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxp c3QKTm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9ub3V2ZWF1Cg==