From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: Re: [PATCH 03/14 v4] xen/arm: vpl011: Add pl011 uart emulation in Xen Date: Tue, 13 Jun 2017 16:27:40 +0530 Message-ID: References: <1496769929-23355-1-git-send-email-bhupinder.thakur@linaro.org> <1496769929-23355-4-git-send-email-bhupinder.thakur@linaro.org> <1fe7dea9-9120-63c7-5efd-b98fed3a70ba@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dKjW4-00066Q-3y for xen-devel@lists.xenproject.org; Tue, 13 Jun 2017 10:57:44 +0000 Received: by mail-vk0-f52.google.com with SMTP id y70so23388537vky.3 for ; Tue, 13 Jun 2017 03:57:42 -0700 (PDT) In-Reply-To: <1fe7dea9-9120-63c7-5efd-b98fed3a70ba@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall Cc: xen-devel@lists.xenproject.org, Stefano Stabellini , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org SGkgSnVsaWVuLAoKCj4+Cj4+ICB0b29scy9jb25zb2xlL2RhZW1vbi9pby5jICAgICAgICB8ICAg MiArLQo+PiAgeGVuL2FyY2gvYXJtL0tjb25maWcgICAgICAgICAgICAgfCAgIDUgKwo+PiAgeGVu L2FyY2gvYXJtL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwo+PiAgeGVuL2FyY2gvYXJtL3Zw bDAxMS5jICAgICAgICAgICAgfCA0MTgKPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oICAgICB8ICAgNiArCj4+ ICB4ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaCB8ICAgMiArCj4+ICB4ZW4vaW5jbHVk ZS9hc20tYXJtL3ZwbDAxMS5oICAgICB8ICA3NCArKysrKysrCj4+ICB4ZW4vaW5jbHVkZS9wdWJs aWMvYXJjaC1hcm0uaCAgICB8ICAgNiArCj4+ICB4ZW4vaW5jbHVkZS9wdWJsaWMvaW8vY29uc29s ZS5oICB8ICAgNCArCj4KPgo+IFRoaXMgd291bGQgcmVxdWlyZSBhbiBBQ0sgZnJvbSBLb25yYWQu IFRoZSBhZGRpdGlvbiB3b3VsZCBhbHNvIG5lZWQgdG8gYmUKPiBqdXN0aWZpZWQgaW4gdGhlIGNv bW1pdCBtZXNzYWdlLiBBbHRob3VnaCwgeW91IHByb2JhYmx5IHdhbnQgdG8gc3BsaXQgdGhpcwo+ IGNoYW5nZSBpbiBhIHNlcGFyYXRlIHBhdGNoLgpJIHdpbGwgc2VuZCB0aGlzIGNoYW5nZSBpbiBh IHNlcGFyYXRlIHBhdGNoLgoKPgo+PiAgOSBmaWxlcyBjaGFuZ2VkLCA1MTcgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL2FybS92cGww MTEuYwo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmgK Pj4KPj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMgYi90b29scy9jb25z b2xlL2RhZW1vbi9pby5jCj4+IGluZGV4IDdlNmE4ODYuLjk0N2YxM2EgMTAwNjQ0Cj4+IC0tLSBh L3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMKPj4gKysrIGIvdG9vbHMvY29uc29sZS9kYWVtb24v aW8uYwo+Cj4KPiBDYW4geW91IGV4cGxhaW4gd2h5IHlvdSBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9m IHRoZSBpbmNsdWRlIGluIGlvLmM/ClNpbmNlIEkgYW0gaW5jbHVkaW5nIHJpbmcuaCBpbiBjb25z b2xlLmgsIGl0IG5lZWRzIHN0cmluZy5oIHRvIGJlCmluY2x1ZGVkIGZpcnN0LgoKPgo+PiBAQCAt MjEsNiArMjEsNyBAQAo+Pgo+PiAgI2luY2x1ZGUgInV0aWxzLmgiCj4+ICAjaW5jbHVkZSAiaW8u aCIKPj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPj4gICNpbmNsdWRlIDx4ZW5ldnRjaG4uaD4KPj4g ICNpbmNsdWRlIDx4ZW5nbnR0YWIuaD4KPj4gICNpbmNsdWRlIDx4ZW5zdG9yZS5oPgo+PiBAQCAt MjksNyArMzAsNiBAQAo+Pgo+PiAgI2luY2x1ZGUgPHN0ZGxpYi5oPgo+PiAgI2luY2x1ZGUgPGVy cm5vLmg+Cj4+IC0jaW5jbHVkZSA8c3RyaW5nLmg+Cj4+ICAjaW5jbHVkZSA8cG9sbC5oPgo+PiAg I2luY2x1ZGUgPGZjbnRsLmg+Cj4+ICAjaW5jbHVkZSA8dW5pc3RkLmg+Cj4KPgo+Cj4gWy4uLl0K Pgo+PiAgbWVudSAiQVJNIGVycmF0YSB3b3JrYXJvdW5kIHZpYSB0aGUgYWx0ZXJuYXRpdmUgZnJh bWV3b3JrIgo+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL01ha2VmaWxlIGIveGVuL2FyY2gv YXJtL01ha2VmaWxlCj4+IGluZGV4IDQ5ZTFmYjIuLjE1ZWZjMTMgMTAwNjQ0Cj4+IC0tLSBhL3hl bi9hcmNoL2FybS9NYWtlZmlsZQo+PiArKysgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPj4gQEAg LTUyLDYgKzUyLDcgQEAgb2JqLXkgKz0gdm1fZXZlbnQubwo+PiAgb2JqLXkgKz0gdnRpbWVyLm8K Pj4gIG9iai15ICs9IHZwc2NpLm8KPj4gIG9iai15ICs9IHZ1YXJ0Lm8KPj4gK29iai0kKENPTkZJ R19WUEwwMTFfQ09OU09MRSkgKz0gdnBsMDExLm8KPgo+Cj4gUGxlYXNlIHRoZSBhbHBoYWJldGlj YWwgb3JkZXIuIEp1c3Qgbm90aWNlZCB2dGltZXIgaXMgbm90IGNvcnJlY3RseQo+IHBvc2l0aW9u ZWQuIEkgd2lsbCBzZW5kIGEgcGF0Y2ggZm9yIHRoYXQuCj4Kb2suCj4KPj4gKyNpbmNsdWRlIDx4 ZW4vZXJybm8uaD4KPj4gKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KPj4gKyNpbmNsdWRlIDx4ZW4v Z3Vlc3RfYWNjZXNzLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL2luaXQuaD4KPj4gKyNpbmNsdWRlIDx4 ZW4vbGliLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL21tLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL3NjaGVk Lmg+Cj4+ICsjaW5jbHVkZSA8cHVibGljL2RvbWN0bC5oPgo+PiArI2luY2x1ZGUgPHB1YmxpYy9p by9jb25zb2xlLmg+Cj4+ICsjaW5jbHVkZSA8YXNtLWFybS9wbDAxMS11YXJ0Lmg+Cj4+ICsjaW5j bHVkZSA8YXNtLWFybS92Z2ljLWVtdWwuaD4KPj4gKyNpbmNsdWRlIDxhc20tYXJtL3ZwbDAxMS5o Pgo+PiArCj4+ICtzdGF0aWMgYm9vbCB2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKHN0cnVjdCBo c3JfZGFidCBkYWJ0KQo+PiArewo+PiArICAgIHJldHVybiAoZGFidC5zaXplICE9IERBQlRfRE9V QkxFX1dPUkQpOwo+Cj4KPiBBZ2FpbiwgcGxlYXNlIGFkZCBhIGNvbW1lbnQgZXhwbGFpbmluZyB3 aHkgd2UgYWxsb3cgYWxsIHRoZSBzaXplcyBidXQKPiA2NC1iaXQuCj4KPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgdnBsMDExX3VwZGF0ZShzdHJ1Y3QgZG9tYWluICpkKQo+PiArewo+PiArICAg IHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKPj4gKwo+PiArICAgIC8q Cj4+ICsgICAgICogVE9ETzogUEwwMTEgaW50ZXJydXB0cyBhcmUgbGV2ZWwgdHJpZ2dlcmVkIHdo aWNoIG1lYW5zCj4+ICsgICAgICogdGhhdCBpbnRlcnJ1cHQgbmVlZHMgdG8gYmUgc2V0L2NsZWFy IGluc3RlYWQgb2YgYmVpbmcKPj4gKyAgICAgKiBpbmplY3RlZC4gSG93ZXZlciwgY3VycmVudGx5 IHZHSUMgZG9lcyBub3QgaGFuZGxlIGxldmVsCj4+ICsgICAgICogdHJpZ2dlcmVkIGludGVycnVw dHMgcHJvcGVybHkuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUKPj4gKyAgICAgKiByZXZpc2l0 ZWQgb25jZSB2R0lDIHN0YXJ0cyBoYW5kbGluZyBsZXZlbCB0cmlnZ2VyZWQKPj4gKyAgICAgKiBp bnRlcnJ1cHRzLgo+PiArICAgICAqLwo+PiArICAgIGlmICggdnBsMDExLT51YXJ0cmlzICYgdnBs MDExLT51YXJ0aW1zYyApCj4KPgo+IFRoZSB3cml0ZSBpbiB1YXJ0aXJzIGFuZCB1YXJ0aW1zYyBh cmUgcHJvdGVjdGVkIGJ5IGEgbG9jay4gU2hvdWxkbid0IGl0IGJlCj4gdGhlIGNhc2UgaGVyZSB0 b28/IE1vcmUgdGhhdCB0aGV5IGFyZSBub3QgdXBkYXRlZCBhdG9taWNhbGx5Lgo+Cj4gWW91IHBy b2JhYmx5IHdhbnQgdG8gY2FsbCB2cGwwMTFfdXBkYXRlIHdpdGggdnBsMDExIGxvY2sgdGFrZW4g dG8gbWFrZSBzdXJlCj4geW91IGRvbid0IGhhdmUgYW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZS4K ClNpbmNlIHdlIGFyZSBqdXN0IHJlYWRpbmcgdGhlIHZhbHVlcyBoZXJlLCBJIHRoaW5rIGl0IGlz IGZpbmUgdG8gbm90CnRha2UgYSBsb2NrLiBUaGUKY29uZGl0aW9uIHdpbGwgZWl0aGVyIGJlIHRy dWUgb3IgZmFsc2UuCgo+Cj4+ICsgICAgICAgIHZnaWNfdmNwdV9pbmplY3Rfc3BpKGQsIEdVRVNU X1ZQTDAxMV9TUEkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdWludDhfdCB2cGwwMTFfcmVhZF9k YXRhKHN0cnVjdCBkb21haW4gKmQpCj4+ICt7Cj4+ICsgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK Pj4gKyAgICB1aW50OF90IGRhdGEgPSAwOwo+PiArICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9 ICZkLT5hcmNoLnZwbDAxMTsKPj4gKyAgICBzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYg PSB2cGwwMTEtPnJpbmdfYnVmOwo+PiArICAgIFhFTkNPTlNfUklOR19JRFggaW5fY29ucyA9IGlu dGYtPmluX2NvbnM7Cj4+ICsgICAgWEVOQ09OU19SSU5HX0lEWCBpbl9wcm9kID0gaW50Zi0+aW5f cHJvZDsKPgo+Cj4gU2VlIG15IGFuc3dlciBvbiBTdGVmYW5vJ3MgZS1tYWlsIHJlZ2FyZGluZyB0 aGUgYmFycmllciBoZXJlLgo+ICg8ZmEzZTUwMDMtNWM3Zi0wODg2LWQ0MzctNmI2NDMzNDdiNGM1 QGFybS5jb20+KQo+Cj4+ICsKPj4gKyAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4+ICsKPj4g KyAgICAvKgo+PiArICAgICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlcmUgd2lsbCBiZSBkYXRh IGluIHRoZSByaW5nIGJ1ZmZlciB3aGVuCj4+IHRoaXMKPj4gKyAgICAgKiBmdW5jdGlvbiBpcyBj YWxsZWQgc2luY2UgdGhlIGd1ZXN0IGlzIGV4cGVjdGVkIHRvIHJlYWQgdGhlIGRhdGEKPj4gcmVn aXN0ZXIKPj4gKyAgICAgKiBvbmx5IGlmIHRoZSBUWEZFIGZsYWcgaXMgbm90IHNldC4KPj4gKyAg ICAgKiBJZiB0aGUgZ3Vlc3Qgc3RpbGwgZG9lcyByZWFkIHdoZW4gVFhGRSBiaXQgaXMgc2V0IHRo ZW4gMCB3aWxsIGJlCj4+IHJldHVybmVkLgo+PiArICAgICAqLwo+PiArICAgIGlmICggeGVuY29u c19xdWV1ZWQoaW5fcHJvZCwgaW5fY29ucywgc2l6ZW9mKGludGYtPmluKSkgPiAwICkKPj4gKyAg ICB7Cj4+ICsgICAgICAgIGRhdGEgPSBpbnRmLT5pblt4ZW5jb25zX21hc2soaW5fY29ucywgc2l6 ZW9mKGludGYtPmluKSldOwo+PiArICAgICAgICBpbl9jb25zICs9IDE7Cj4+ICsgICAgICAgIGlu dGYtPmluX2NvbnMgPSBpbl9jb25zOwo+PiArICAgICAgICBzbXBfbWIoKTsKPgo+Cj4gSSBkb24n dCB1bmRlcnN0YW5kIHdoeSB5b3UgbW92ZWQgdGhlIGJhcnJpZXIgZnJvbSBiZXR3ZWVuIHJlYWRp bmcgdGhlIGRhdGEKPiBhbmQgaW50Zi0+aW5fY29ucy4gWW91IGhhdmUgdG8gZW5zdXJlIHRoZSBj aGFyYWN0ZXIgaXMgcmVhZCBiZWZvcmUgdXBkYXRpbmcKPiBpbl9jb25zLgpJIHRob3VnaHQgdGhh dCBzaW5jZSB0aGVzZSAzIHN0YXRlbWVudHMgYXJlIGRlcGVuZGVudCBvbiBpbl9jb25zLCB0aGV5 CndvdWxkIGJlIGV4ZWN1dGVkIGluIG9yZGVyIGR1ZSB0byBkYXRhIGRlcGVuZGVuY3kuIFRoZSBt ZW1vcnkgYmFycmllcgphZnRlciB0aGUgMyBzdGF0ZW1lbnRzIGVuc3VyZXMgdGhhdCBpbnRmLT5p bl9jb25zIGlzIHVwZGF0ZWQgYmVmb3JlCnByb2NlZWRpbmcgYWhlYWQuCgo+Cj4+ICsgICAgfQo+ PiArICAgIGVsc2UKPj4gKyAgICB7Cj4+ICsgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZw bDAxMTogVW5leHBlY3RlZCBJTiByaW5nIGJ1ZmZlciBlbXB0eVxuIik7Cj4+ICsgICAgfQo+Cj4K PiBUaGUge30gYXJlIG5vdCBuZWNlc3NhcnkuCm9rLgo+Cj4+ICsKPj4gKyAgICBpZiAoIHhlbmNv bnNfcXVldWVkKGluX3Byb2QsIGluX2NvbnMsIHNpemVvZihpbnRmLT5pbikpID09IDAgKQo+Cj4K PiBXaGF0IGlmIHRoZSBvdGhlciBlbmQgb2YgdGhlIHJpbmcgaGFzIHB1dCBtb3JlIGRhdGEgd2hp bHN0IHJlYWRpbmcgb25lCj4gY2hhcmFjdGVyPwpJdCB3aWxsIHJhaXNlIGFuIGV2ZW50IHdoZW4g dGhlIG90aGVyIGVuZCBwdXRzIG1vcmUgZGF0YSBhbmQgaW4gdGhlCmV2ZW50IGhhbmRsaW5nIGZ1 bmN0aW9uIGRhdGFfYXZhaWxhYmxlKCksIGl0IHdpbGwgY2xlYXIgdGhlIFJYRkUgYml0LgoKPgo+ PiArICAgIHsKPj4gKyAgICAgICAgdnBsMDExLT51YXJ0ZnIgfD0gUlhGRTsKPj4gKyAgICAgICAg dnBsMDExLT51YXJ0cmlzICY9IH5SWEk7Cj4+ICsgICAgfQo+PiArICAgIHZwbDAxMS0+dWFydGZy ICY9IH5SWEZGOwo+PiArICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOwo+PiArCj4+ICsgICAg cmV0dXJuIGRhdGE7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHZwbDAxMV93cml0ZV9kYXRh KHN0cnVjdCBkb21haW4gKmQsIHVpbnQ4X3QgZGF0YSkKPj4gK3sKPj4gKyAgICB1bnNpZ25lZCBs b25nIGZsYWdzOwo+PiArICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAx MTsKPj4gKyAgICBzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSB2cGwwMTEtPnJpbmdf YnVmOwo+PiArICAgIFhFTkNPTlNfUklOR19JRFggb3V0X2NvbnMgPSBpbnRmLT5vdXRfY29uczsK Pj4gKyAgICBYRU5DT05TX1JJTkdfSURYIG91dF9wcm9kID0gaW50Zi0+b3V0X3Byb2Q7Cj4KPgo+ IFNlZSBteSByZW1hcmsgYWJvdmUuCkkgd2lsbCBtb3ZlIGluZGV4IHJlYWRpbmcgdW5kZXIgbG9j ay4KCj4KPj4gKwo+PiArICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKPj4gKwo+PiArICAgIC8q Cj4+ICsgICAgICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgcmluZyBpcyBub3QgZnVsbCB3aGVu IHRoaXMgZnVuY3Rpb24gaXMKPj4gY2FsbGVkCj4+ICsgICAgICogYXMgdGhlIGd1ZXN0IGlzIGV4 cGVjdGVkIHRvIHdyaXRlIHRvIHRoZSBkYXRhIHJlZ2lzdGVyIG9ubHkgd2hlbgo+PiB0aGUKPj4g KyAgICAgKiBUWEZGIGZsYWcgaXMgbm90IHNldC4KPj4gKyAgICAgKiBJbiBjYXNlIHRoZSBndWVz dCBkb2VzIHdyaXRlIGV2ZW4gd2hlbiB0aGUgVFhGRiBmbGFnIGlzIHNldCB0aGVuCj4+IHRoZQo+ PiArICAgICAqIGRhdGEgd2lsbCBiZSBzaWxlbnRseSBkcm9wcGVkLgo+PiArICAgICAqLwo+PiAr ICAgIGlmICggeGVuY29uc19xdWV1ZWQob3V0X3Byb2QsIG91dF9jb25zLCBzaXplb2YoaW50Zi0+ b3V0KSkgIT0KPj4gKyAgICAgICAgIHNpemVvZiAoaW50Zi0+b3V0KSApCj4+ICsgICAgewo+PiAr ICAgICAgICBpbnRmLT5vdXRbeGVuY29uc19tYXNrKG91dF9wcm9kLCBzaXplb2YoaW50Zi0+b3V0 KSldID0gZGF0YTsKPj4gKyAgICAgICAgc21wX3dtYigpOwo+PiArICAgICAgICBvdXRfcHJvZCAr PSAxOwo+PiArICAgICAgICBpbnRmLT5vdXRfcHJvZCA9IG91dF9wcm9kOwo+PiArICAgIH0KPj4g KyAgICBlbHNlCj4+ICsgICAgewo+PiArICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJ2cGww MTE6IFVuZXhwZWN0ZWQgT1VUIHJpbmcgYnVmZmVyIGZ1bGxcbiIpOwo+PiArICAgIH0KPgo+Cj4g VGhlIHt9IGFyZSBub3QgbmVjZXNzYXJ5Lgpvay4KPgo+PiArCj4+ICsgICAgaWYgKCB4ZW5jb25z X3F1ZXVlZChvdXRfcHJvZCwgb3V0X2NvbnMsIHNpemVvZihpbnRmLT5vdXQpKSA9PQo+PiArICAg ICAgICAgc2l6ZW9mIChpbnRmLT5vdXQpICkKPgo+Cj4gRGl0dG8gaGVyZS4KPgo+Cj4+ICsgICAg ewo+PiArICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBUWEZGOwo+PiArICAgICAgICB2cGwwMTEt PnVhcnRyaXMgJj0gflRYSTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICB2cGwwMTEtPnVhcnRmciB8 PSBCVVNZOwo+PiArCj4+ICsgICAgdnBsMDExLT51YXJ0ZnIgJj0gflRYRkU7Cj4+ICsKPj4gKyAg ICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKPj4gKwo+PiArICAgIC8qCj4+ICsgICAgICogU2Vu ZCBhbiBldmVudCB0byBjb25zb2xlIGJhY2tlbmQgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcwo+ PiArICAgICAqIGRhdGEgaW4gdGhlIE9VVCByaW5nIGJ1ZmZlci4KPj4gKyAgICAgKi8KPj4gKyAg ICBub3RpZnlfdmlhX3hlbl9ldmVudF9jaGFubmVsKGQsIHZwbDAxMS0+ZXZ0Y2huKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCB2cGwwMTFfbW1pb19yZWFkKHN0cnVjdCB2Y3B1ICp2LAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1taW9faW5mb190ICppbmZvLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3QgKnIsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqcHJpdikKPj4gK3sKPj4gKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFi dCA9IGluZm8tPmRhYnQ7Cj4+ICsgICAgdWludDMyX3QgdnBsMDExX3JlZyA9ICh1aW50MzJfdCko aW5mby0+Z3BhIC0gR1VFU1RfUEwwMTFfQkFTRSk7Cj4+ICsgICAgc3RydWN0IHZwbDAxMSAqdnBs MDExID0gJnYtPmRvbWFpbi0+YXJjaC52cGwwMTE7Cj4+ICsKPj4gKyAgICBzd2l0Y2ggKCB2cGww MTFfcmVnICkKPj4gKyAgICB7Cj4+ICsgICAgY2FzZSBEUjoKPj4gKyAgICAgICAgLyoKPj4gKyAg ICAgICAgICogU2luY2UgcGwwMTEgcmVnaXN0ZXJzIGFyZSAzMi1iaXQgcmVnaXN0ZXJzLCBhbGwg cmVnaXN0ZXJzCj4+ICsgICAgICAgICAqIGFyZSBoYW5kbGVkIHNpbWlsYXJseSBhbGxvd2luZyA4 LWJpdCwgMTYtYml0IGFuZCAzMi1iaXQKPj4gKyAgICAgICAgICogYWNjZXNzZXMuCj4+ICsgICAg ICAgICAqLwo+Cj4KPiBUaGlzIGNvbW1lbnQgc2hvdWxkIGJlIG9uIHRvcCBvZiB0aGUgZGVjbGFy YXRpb24gb2YKPiB2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzLgpvay4KPgo+PiArICAgICAgICBp ZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7Cj4+ ICsKPj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExX3JlYWRfZGF0YSh2 LT5kb21haW4pLCBpbmZvKTsKPj4gKyAgICAgICAgcmV0dXJuIDE7Cj4+ICsKPj4gKyAgICBjYXNl IFJTUjoKPj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSAp IGdvdG8gYmFkX3dpZHRoOwo+PiArCj4+ICsgICAgICAgIC8qIEl0IGFsd2F5cyByZXR1cm5zIDAg YXMgdGhlcmUgYXJlIG5vIHBoeXNpY2FsIGVycm9ycy4gKi8KPj4gKyAgICAgICAgKnIgPSAwOwo+ PiArICAgICAgICByZXR1cm4gMTsKPj4gKwo+PiArICAgIGNhc2UgRlI6Cj4+ICsgICAgICAgIGlm ICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKPj4g Kwo+PiArICAgICAgICAqciA9IHZyZWdfcmVnMzJfZXh0cmFjdCh2cGwwMTEtPnVhcnRmciwgaW5m byk7Cj4KPgo+IFlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHVhcnRmciBpcyByZWFkIG9ubHkgb25j ZSBiZWNhdXNlIHZyZWdfcmVnMzJfZXh0cmFjdAo+IGRvZXMgbm90IGN1cnJlbnRseSBlbnN1cmUg dGhhdC4KPgo+PiArICAgICAgICByZXR1cm4gMTsKPj4gKwo+PiArICAgIGNhc2UgUklTOgo+PiAr ICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRf d2lkdGg7Cj4+ICsKPj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExLT51 YXJ0cmlzLCBpbmZvKTsKPgo+Cj4gRGl0dG8uCj4KPj4gKyAgICAgICAgcmV0dXJuIDE7Cj4+ICsK Pj4gKyAgICBjYXNlIE1JUzoKPj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2Fj Y2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+PiArCj4+ICsgICAgICAgICpyID0gdnJlZ19y ZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydHJpcyAmCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZwbDAxMS0+dWFydGltc2MsIGluZm8pOwo+Cj4KPiBEaXR0by4KPgo+PiArICAg ICAgICByZXR1cm4gMTsKPj4gKwo+PiArICAgIGNhc2UgSU1TQzoKPj4gKyAgICAgICAgaWYgKCAh dnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+PiArCj4+ ICsgICAgICAgICpyID0gdnJlZ19yZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydGltc2MsIGluZm8p Owo+Cj4KPiBEaXR0by4KSSB3aWxsIHJlYWQgdGhlc2UgcmVnaXN0ZXJzIGludG8gYSBsb2NhbCB2 YXJpYWJsZSBhbmQgdXNlIGl0LgoKPgo+Cj4+ICsgICAgICAgIHJldHVybiAxOwo+PiArCj4+ICsg ICAgY2FzZSBJQ1I6Cj4+ICsgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3Mo ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKPj4gKwo+PiArICAgICAgICAvKiBPbmx5IHdyaXRlIGlz IHZhbGlkLiAqLwo+PiArICAgICAgICByZXR1cm4gMDsKPj4gKwo+PiArICAgIGRlZmF1bHQ6Cj4+ ICsgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogdW5oYW5kbGVkIHJlYWQgciVk IG9mZnNldCAlIzA4eFxuIiwKPj4gKyAgICAgICAgICAgICAgICBkYWJ0LnJlZywgdnBsMDExX3Jl Zyk7Cj4+ICsgICAgICAgIHJldHVybiAwOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldHVybiAx Owo+PiArCj4+ICtiYWRfd2lkdGg6Cj4+ICsgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDEx OiBiYWQgcmVhZCB3aWR0aCAlZCByJWQgb2Zmc2V0ICUjMDh4XG4iLAo+PiArICAgICAgICAgICAg ZGFidC5zaXplLCBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cj4+ICsgICAgZG9tYWluX2NyYXNoX3N5 bmNocm9ub3VzKCk7Cj4+ICsgICAgcmV0dXJuIDA7Cj4+ICsKPj4gK30KPj4gKwo+PiArc3RhdGlj IGludCB2cGwwMTFfbW1pb193cml0ZShzdHJ1Y3QgdmNwdSAqdiwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbW1pb19pbmZvX3QgKmluZm8sCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlZ2lzdGVyX3QgciwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqcHJpdikKPj4gK3sKPj4gKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGluZm8tPmRh YnQ7Cj4+ICsgICAgdWludDMyX3QgdnBsMDExX3JlZyA9ICh1aW50MzJfdCkoaW5mby0+Z3BhIC0g R1VFU1RfUEwwMTFfQkFTRSk7Cj4+ICsgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJnYtPmRv bWFpbi0+YXJjaC52cGwwMTE7Cj4+ICsgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsK Pj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArCj4+ICsgICAgc3dpdGNoICggdnBsMDEx X3JlZyApCj4+ICsgICAgewo+PiArICAgIGNhc2UgRFI6Cj4+ICsgICAgewo+PiArICAgICAgICB1 aW50MzJfdCBkYXRhID0gMDsKPj4gKwo+PiArICAgICAgICAvKgo+PiArICAgICAgICAgKiBTaW5j ZSBwbDAxMSByZWdpc3RlcnMgYXJlIDMyLWJpdCByZWdpc3RlcnMsIGFsbCByZWdpc3RlcnMKPj4g KyAgICAgICAgICogYXJlIGhhbmRsZWQgc2ltaWxhcmx5IGFsbG93aW5nIDgtYml0LCAxNi1iaXQg YW5kIDMyLWJpdAo+PiArICAgICAgICAgKiBhY2Nlc3Nlcy4KPj4gKyAgICAgICAgICovCj4KPgo+ IFNlZSBhYm92ZS4KPgo+PiArICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNz KGRhYnQpICkgZ290byBiYWRfd2lkdGg7Cj4+ICsKPj4gKyAgICAgICAgdnJlZ19yZWczMl91cGRh dGUoJmRhdGEsIHIsIGluZm8pOwo+PiArICAgICAgICBkYXRhICY9IDB4RkY7Cj4+ICsgICAgICAg IHZwbDAxMV93cml0ZV9kYXRhKHYtPmRvbWFpbiwgZGF0YSk7Cj4+ICsgICAgICAgIHJldHVybiAx Owo+PiArICAgIH0KPj4gKyAgICBjYXNlIFJTUjogLyogTm90aGluZyB0byBjbGVhci4gKi8KPj4g KyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFk X3dpZHRoOwo+PiArCj4+ICsgICAgICAgIHJldHVybiAxOwo+PiArCj4+ICsgICAgY2FzZSBGUjoK Pj4gKyAgICBjYXNlIFJJUzoKPj4gKyAgICBjYXNlIE1JUzoKPj4gKyAgICAgICAgZ290byB3cml0 ZV9pZ25vcmU7Cj4+ICsKPj4gKyAgICBjYXNlIElNU0M6Cj4+ICsgICAgICAgIGlmICggIXZwbDAx MV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKPj4gKwo+PiArICAg ICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4+ICsgICAgICAgIHZyZWdfcmVnMzJfdXBkYXRl KCZ2cGwwMTEtPnVhcnRpbXNjLCByLCBpbmZvKTsKPj4gKyAgICAgICAgVlBMMDExX1VOTE9DSyhk LCBmbGFncyk7Cj4+ICsgICAgICAgIHZwbDAxMV91cGRhdGUodi0+ZG9tYWluKTsKPgo+Cj4gSSB0 aGluayB0aGlzIHNob3VsZCBiZSBjYWxsIHdpdGggdW5kZXIgdGhlIGxvY2suCj4KPj4gKyAgICAg ICAgcmV0dXJuIDE7Cj4+ICsKPj4gKyAgICBjYXNlIElDUjoKPj4gKyAgICAgICAgaWYgKCAhdnBs MDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+PiArCj4+ICsg ICAgICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKPj4gKyAgICAgICAgdnJlZ19yZWczMl9jbGVh cmJpdHMoJnZwbDAxMS0+dWFydHJpcywgciwgaW5mbyk7Cj4+ICsgICAgICAgIFZQTDAxMV9VTkxP Q0soZCwgZmxhZ3MpOwo+PiArICAgICAgICB2cGwwMTFfdXBkYXRlKGQpOwo+Cj4KPiBEaXR0by4K Pgo+Cj4+ICsgICAgICAgIHJldHVybiAxOwo+PiArCj4+ICsgICAgZGVmYXVsdDoKPj4gKyAgICAg ICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiB1bmhhbmRsZWQgd3JpdGUgciVkIG9mZnNl dCAlIzA4eFxuIiwKPj4gKyAgICAgICAgICAgICAgICBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cj4+ ICsgICAgICAgIHJldHVybiAwOwo+PiArICAgIH0KPj4gKwo+PiArd3JpdGVfaWdub3JlOgo+PiAr ICAgIHJldHVybiAxOwo+PiArCj4+ICtiYWRfd2lkdGg6Cj4+ICsgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAidnBsMDExOiBiYWQgd3JpdGUgd2lkdGggJWQgciVkIG9mZnNldCAlIzA4eFxuIiwKPj4g KyAgICAgICAgICAgIGRhYnQuc2l6ZSwgZGFidC5yZWcsIHZwbDAxMV9yZWcpOwo+PiArICAgIGRv bWFpbl9jcmFzaF9zeW5jaHJvbm91cygpOwo+PiArICAgIHJldHVybiAwOwo+PiArCj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1pb19oYW5kbGVyX29wcyB2cGwwMTFfbW1pb19o YW5kbGVyID0gewo+PiArICAgIC5yZWFkID0gdnBsMDExX21taW9fcmVhZCwKPj4gKyAgICAud3Jp dGUgPSB2cGwwMTFfbW1pb193cml0ZSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHZwbDAx MV9kYXRhX2F2YWlsKHN0cnVjdCBkb21haW4gKmQpCj4+ICt7Cj4+ICsgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsKPj4gKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7 Cj4+ICsgICAgc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gdnBsMDExLT5yaW5nX2J1 ZjsKPj4gKyAgICBYRU5DT05TX1JJTkdfSURYIGluX2NvbnMgPSBpbnRmLT5pbl9jb25zOwo+PiAr ICAgIFhFTkNPTlNfUklOR19JRFggaW5fcHJvZCA9IGludGYtPmluX3Byb2Q7Cj4+ICsgICAgWEVO Q09OU19SSU5HX0lEWCBvdXRfY29ucyA9IGludGYtPm91dF9jb25zOwo+PiArICAgIFhFTkNPTlNf UklOR19JRFggb3V0X3Byb2QgPSBpbnRmLT5vdXRfcHJvZDsKPgo+Cj4gU2FtZSBhcyBhYm92ZSBm b3IgdGhlIGJhcnJpZXIuCj4KPgo+PiArICAgIFhFTkNPTlNfUklOR19JRFggaW5fcmluZ19xc2l6 ZSwgb3V0X3JpbmdfcXNpemU7Cj4+ICsKPj4gKyAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4+ ICsKPj4gKyAgICBpbl9yaW5nX3FzaXplID0geGVuY29uc19xdWV1ZWQoaW5fcHJvZCwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fY29ucywKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGludGYtPmluKSk7Cj4+ICsKPj4gKyAgICBv dXRfcmluZ19xc2l6ZSA9IHhlbmNvbnNfcXVldWVkKG91dF9wcm9kLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2NvbnMsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoaW50Zi0+b3V0KSk7Cj4+ICsKPj4gKyAgICAvKiBVcGRh dGUgdGhlIHVhcnQgcnggc3RhdGUgaWYgdGhlIGJ1ZmZlciBpcyBub3QgZW1wdHkuICovCj4+ICsg ICAgaWYgKCBpbl9yaW5nX3FzaXplICE9IDAgKQo+PiArICAgIHsKPj4gKyAgICAgICAgdnBsMDEx LT51YXJ0ZnIgJj0gflJYRkU7Cj4+ICsgICAgICAgIGlmICggaW5fcmluZ19xc2l6ZSA9PSBzaXpl b2YoaW50Zi0+aW4pICkKPj4gKyAgICAgICAgICAgIHZwbDAxMS0+dWFydGZyIHw9IFJYRkY7Cj4+ ICsgICAgICAgIHZwbDAxMS0+dWFydHJpcyB8PSBSWEk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAg LyogVXBkYXRlIHRoZSB1YXJ0IHR4IHN0YXRlIGlmIHRoZSBidWZmZXIgaXMgbm90IGZ1bGwuICov Cj4+ICsgICAgaWYgKCBvdXRfcmluZ19xc2l6ZSAhPSBzaXplb2YoaW50Zi0+b3V0KSApCj4+ICsg ICAgewo+PiArICAgICAgICB2cGwwMTEtPnVhcnRmciAmPSB+VFhGRjsKPj4gKyAgICAgICAgdnBs MDExLT51YXJ0cmlzIHw9IFRYSTsKPj4gKyAgICAgICAgaWYgKCBvdXRfcmluZ19xc2l6ZSA9PSAw ICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIgJj0gfkJVU1k7 Cj4+ICsgICAgICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBUWEZFOwo+PiArICAgICAgICB9Cj4+ ICsgICAgfQo+PiArCj4+ICsgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7Cj4+ICsKPj4gKyAg ICB2cGwwMTFfdXBkYXRlKGQpOwo+Cj4KPiBTZWUgbXkgY29tbWVudCBhYm92ZSBmb3IgdGhlIGNh bGxpbmcgdnBsMDExX3VwZGF0ZQo+Cj4+ICt9Cj4+ICsKPj4gKwo+PiArc3RhdGljIHZvaWQgdnBs MDExX25vdGlmaWNhdGlvbihzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgaW50IHBvcnQpCj4+ICt7 Cj4+ICsgICAgdnBsMDExX2RhdGFfYXZhaWwodi0+ZG9tYWluKTsKPj4gK30KPj4gKwo+PiAraW50 IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdnBsMDExX2luaXRf aW5mbyAqaW5mbykKPj4gK3sKPj4gKyAgICBpbnQgcmM7Cj4+ICsgICAgc3RydWN0IHZwbDAxMSAq dnBsMDExID0gJmQtPmFyY2gudnBsMDExOwo+PiArCj4+ICsgICAgaWYgKCB2cGwwMTEtPnJpbmdf YnVmICkKPj4gKyAgICAgICAgcmV0dXJuIDA7Cj4KPgo+IElITU8sIHlvdSBzaG91bGQgcmV0dXJu IGFuIGVycm9yIGlmIHRoZSBQTDAxMSBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGlzCj4gc2hv dWxkIG5ldmVyIGhhcHBlbi4Kb2suCj4KPj4gKwo+PiArICAgIC8qIE1hcCB0aGUgZ3Vlc3QgUEZO IHRvIFhlbiBhZGRyZXNzIHNwYWNlLiAqLwo+PiArICAgIHJjID0gIHByZXBhcmVfcmluZ19mb3Jf aGVscGVyKGQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ZuX3goaW5m by0+Z2ZuKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnBsMDExLT5y aW5nX3BhZ2UsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZwbDAxMS0+ cmluZ19idWYpOwo+PiArICAgIGlmICggcmMgPCAwICkKPj4gKyAgICAgICAgZ290byBvdXQ7Cj4+ ICsKPj4gKyAgICByYyA9IHZnaWNfcmVzZXJ2ZV92aXJxKGQsIEdVRVNUX1ZQTDAxMV9TUEkpOwo+ PiArICAgIGlmICggIXJjICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIHJjID0gLUVJTlZBTDsKPj4g KyAgICAgICAgZ290byBvdXQxOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJlZ2lzdGVyX21taW9f aGFuZGxlcihkLCAmdnBsMDExX21taW9faGFuZGxlciwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgR1VFU1RfUEwwMTFfQkFTRSwgR1VFU1RfUEwwMTFfU0laRSwgTlVMTCk7Cj4KPgo+IEFn YWluLCB5b3UgcmVnaXN0ZXIgTU1JTyBoYW5kbGVyIGJ1dCBuZXZlciByZW1vdmUgdGhlbS4gU28g aWYgdGhpcyBjYWxsCj4gZmFpbCwgeW91IHdpbGwgZW5kIHVwIHdpdGggdGhlIGhhbmRsZXJzIGV4 aXN0aW5nIGJ1dCB0aGUgcmVzdAo+IGhhbGYtaW5pdGlhbGl6ZWQgd2hpY2ggbGlrZWx5IGxlYWQg dG8gYSBzZWdmYXVsdCwgb3Igd29yc3QgbGVha2luZyBkYXRhLgpUaGlzIGZ1bmN0aW9uIGRvZXMg bm90IHJldHVybiBhIHN0YXR1cy4gU28gdGhlcmUgaXMgbm8gd2F5IHRvIGZpbmQgb3V0CmlmIHRo ZSBtbWlvIGhhbmRsZXJzIHdlcmUKcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHkuIEkgYW0gcmVtb3Zp bmcgdGhlIG1taW8gaGFuZGxlcnMgaW4gdGhlIGVycm9yCmxlZ3MgaW4gZG9tYWluX3ZwbDAxMV9p bml0KCkuCj4KPj4gKwo+PiArICAgIHNwaW5fbG9ja19pbml0KCZ2cGwwMTEtPmxvY2spOwo+PiAr Cj4+ICsgICAgcmMgPSBhbGxvY191bmJvdW5kX3hlbl9ldmVudF9jaGFubmVsKGQsIDAsIGluZm8t PmNvbnNvbGVfZG9taWQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZwbDAxMV9ub3RpZmljYXRpb24pOwo+PiArICAgIGlmICggcmMgPCAwICkKPgo+IFlvdQpJ IHRoaW5rIHRoaXMgaXMgYSB0eXBlLgoKPj4KPj4gKyAgICAgICAgZ290byBvdXQyOwo+PiArCj4+ ICsgICAgdnBsMDExLT5ldnRjaG4gPSBpbmZvLT5ldnRjaG4gPSByYzsKPj4gKwo+PiArICAgIHJl dHVybiAwOwo+PiArCj4+ICtvdXQyOgo+PiArICAgIHhmcmVlKGQtPmFyY2gudm1taW8uaGFuZGxl cnMpOwo+PiArICAgIHZnaWNfZnJlZV92aXJxKGQsIEdVRVNUX1ZQTDAxMV9TUEkpOwo+PiArCj4+ ICtvdXQxOgo+PiArICAgIGRlc3Ryb3lfcmluZ19mb3JfaGVscGVyKCZ2cGwwMTEtPnJpbmdfYnVm LCB2cGwwMTEtPnJpbmdfcGFnZSk7Cj4+ICsKPj4gK291dDoKPj4gKyAgICByZXR1cm4gcmM7Cj4+ ICt9Cj4+ICsKPj4gK3ZvaWQgZG9tYWluX3ZwbDAxMV9kZWluaXQoc3RydWN0IGRvbWFpbiAqZCkK Pj4gK3sKPj4gKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7Cj4+ ICsKPj4gKyAgICBpZiAoICF2cGwwMTEtPnJpbmdfYnVmICkKPgo+Cj4gWW91IHdpbGwgYmFpbCBv dXQgaWYgcmluZ19idWYgaXMgTlVMTC4gSG93ZXZlciwgaWYgeW91IGNhbGxlZAo+IGRvbWFpbl92 cGwwMTFfaW5pdCBmaXJzdCBhbmQgaXQgZmFpbGVkLCB5b3UgbWF5IGhhdmUgcmluZ19idWYgc2V0 IGJ1dCB0aGUKPiByZXN0IG5vdCBmdWxseSB1cGRhdGVkLiBUaGlzIG1lYW5zIHRoYXQgeW91IHdp bGwgZnJlZSBnYXJiYWdnZS4KPgo+IEkgdGhpbmsgdGhpcyBjb3VsZCBiZSBzb2x2ZWQgYnkgcmVp bml0aWFsaXplIHJpbmdfYnVmIGlmIGFuIGVycm9yIG9jY3VyIGluCj4gZG9tYWluX3ZwbDAxMV9p bml0LgpkZXN0cm95X3JpbmdfZm9yX2hlbHBlcigpIHNldHMgdGhlIGZpcnN0IHBhcmFtZXRlciB0 byBOVUxMIGluY2FzZSBpdCBmYWlscy4KCj4KPj4gKyAgICAgICAgcmV0dXJuOwo+PiArCj4+ICsg ICAgZnJlZV94ZW5fZXZlbnRfY2hhbm5lbChkLCB2cGwwMTEtPmV2dGNobik7Cj4+ICsgICAgZGVz dHJveV9yaW5nX2Zvcl9oZWxwZXIoJnZwbDAxMS0+cmluZ19idWYsIHZwbDAxMS0+cmluZ19wYWdl KTsKPj4gKyAgICB4ZnJlZShkLT5hcmNoLnZtbWlvLmhhbmRsZXJzKTsKPj4gK30KPgo+Cj4gWy4u Ll0KPgo+Cj4+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3ZwbDAxMS5oIGIveGVu L2luY2x1ZGUvYXNtLWFybS92cGwwMTEuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwLi5iM2UzMzJkCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIveGVuL2luY2x1ZGUv YXNtLWFybS92cGwwMTEuaAo+PiBAQCAtMCwwICsxLDc0IEBACj4+ICsvKgo+PiArICogaW5jbHVk ZS94ZW4vdnBsMDExLmgKPj4gKyAqCj4+ICsgKiBWaXJ0dWFsIFBMMDExIFVBUlQKPj4gKyAqCj4+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQo+PiBpdAo+PiArICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKPj4gKyAqIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiAr ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAo+PiArICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4+ICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK Pj4gZm9yCj4+ICsgKiBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPj4gYWxv bmcgd2l0aAo+PiArICogdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfVlBMMDExX0hfCj4+ICsK Pgo+Cj4gV2UgdGVuZCB0byBrZWVwICNpZm5kZWYgYW5kICNkZWZpbmUgdG9nZXRoZXIuIFNvIHBs ZWFzZSBkcm9wIHRoZSBuZXdsaW5lCj4gaGVyZS4KPgpvay4KPj4gKyNpZmRlZiBDT05GSUdfVlBM MDExX0NPTlNPTEUKPj4gK2ludCBkb21haW5fdnBsMDExX2luaXQoc3RydWN0IGRvbWFpbiAqZCwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwbDAxMV9pbml0X2luZm8gKmluZm8p Owo+PiArdm9pZCBkb21haW5fdnBsMDExX2RlaW5pdChzdHJ1Y3QgZG9tYWluICpkKTsKPj4gKyNl bHNlCj4+ICtzdGF0aWMgaW5saW5lIGludCBkb21haW5fdnBsMDExX2luaXQoc3RydWN0IGRvbWFp biAqZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnBs MDExX2luaXRfaW5mbyAqaW5mbykKPj4gK3sKPj4gKyAgICByZXR1cm4gLUVOT1NZUzsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIGRvbWFpbl92cGwwMTFfZGVpbml0KHN0cnVjdCBk b21haW4gKmQpIHsgfQo+PiArI2VuZGlmCj4+ICsKPj4gKyNlbmRpZgo+PiArCj4KPgo+IFBsZWFz ZSBkcm9wIHRoaXMgbmV3bGluZS4KWW91IG1lYW4gdGhlIG5ld2xpbmUgYmV0d2VlbiB0aGUgI2Vu ZGlmcyBvciBhZnRlciB0aGUgbGFzdCAjZW5kaWY/Cj4KUmVnYXJkcywKQmh1cGluZGVyCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94 ZW4tZGV2ZWwK