From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: Re: [PATCH 08/10] xen/arm: vpl011: Modify the APIs in xenconsole to acces both PV and VCON consoles Date: Wed, 12 Apr 2017 17:33:15 +0100 Message-ID: <20170412163315.ns7kqxvesrxei5ev@citrix.com> References: <1491212673-13476-1-git-send-email-bhupinder.thakur@linaro.org> <1491212673-13476-9-git-send-email-bhupinder.thakur@linaro.org> 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 1cyLCp-0005b8-5j for xen-devel@lists.xenproject.org; Wed, 12 Apr 2017 16:33:19 +0000 Content-Disposition: inline In-Reply-To: <1491212673-13476-9-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Bhupinder Thakur Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBBcHIgMDMsIDIwMTcgYXQgMDM6MTQ6MzFQTSArMDUzMCwgQmh1cGluZGVyIFRoYWt1 ciB3cm90ZToKPiBYZW5jb25zb2xlIHN1cHBvcnRzIG9ubHkgUFYgY29uc29sZSBjdXJyZW50bHku IFRvIGdldCBhY2Nlc3MgdG8gZW11bGF0ZWQgcGwwMTEKPiB1YXJ0IGFub3RoZXIgYmFja2VuZCBj b25zb2xlIGlzIHJlcXVpcmVkLgo+IAo+IFRoaXMgcGF0Y2ggbW9kaWZpZXMgZGlmZmVyZW50IGRh dGEgc3RydWN0dXJlcyBhbmQgQVBJcyB1c2VkCj4gaW4geGVuY29uc29sZSB0byBzdXBwb3J0IHR3 byBjb25zb2xlIHR5cGVzOiBQViBhbmQgVkNPTiAodmlydHVhbCBjb25zb2xlKS4KPiAKPiBDaGFu Z2Ugc3VtbWFyeToKPiAKPiAxLiBNb2RpZnkgdGhlIGRvbWFpbiBzdHJ1Y3R1cmUgdG8gc3VwcG9y dCB0d28gY29uc29sZSB0eXBlczogUFYgYW5kIGEKPiAgICB2aXJ0dWFsIGNvbnNvbGUgKFZDT04p Lgo+IAo+IDIuIE1vZGlmeSBkaWZmZXJlbnQgQVBJcyBzdWNoIGFzIGJ1ZmZlcl9hcHBlbmQoKSB0 byB0YWtlIGEgbmV3IHBhcmFtZXRlcgo+ICAgIGNvbnNvbGVfdHlwZSBhcyBpbnB1dCBhbmQgb3Bl cmF0ZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGluZGV4ZWQgYnkKPiAgICB0aGUgY29uc29sZV90 eXBlLgo+IAo+IDMuIE1vZGZpY2F0aW9ucyBpbiBkb21haW5fY3JlYXRlX3JpbmcoKToKPiAgICAg LSBCaW5kIHRvIHRoZSB2cGwwMTEgZXZlbnQgY2hhbm5lbCBvYnRhaW5lZCBmcm9tIHRoZSB4ZW4g c3RvcmUgYXMgYQo+ICAgICAgIG5ldwo+ICAgICAgIHBhcmFtZXRlcgo+ICAgICAtIE1hcCB0aGUg UEZOIHRvIGl0cyBhZGRyZXNzIHNwYWNlIHRvIGJlIHVzZWQgYXMgSU4vT1VUIHJpbmcKPiAgICAg ICBidWZmZXJzLgo+ICAgICAgIEl0IG9idGFpbnMgdGhlIFBGTiBmcm9tIHRoZSB4ZW4gc3RvcmUg YXMgYSBuZXcgcGFyYW1ldGVyCj4gCj4gNC4gTW9kaWZpY2F0aW9ucyBpbiBoYW5kbGVfcmluZ19y ZWFkKCkgdG8gaGFuZGxlIGJvdGggUFYgYW5kIFZDT04KPiAgICBldmVudHMuCj4gCj4gNS4gQWRk IGEgbmV3IGxvZ19maWxlIGZvciBWQ09OIGNvbnNvbGUgbG9ncy4KPiAKCkl0IHNlZW1zIHRoYXQg dGhpcyBwYXRjaCBhbmQgcHJldmlvdXMgb25lIHNob3VsZCBiZSBtZXJnZWQgaW50byBvbmUuCgpU aGVyZSBhcmUgYSBsb3Qgb2YgY29kaW5nIHN0eWxlIGlzc3VlcywgcGxlYXNlIGZpeCBhbGwgb2Yg dGhlbS4KClRoZSBjb2RlIGxvb2tzIHJhdGhlciByZXBldGl0aXZlIHVuZm9ydHVuYXRlbHkuIEkg YmVsaWV2ZSBhIGxvdCBvZiB0aGUKcmVwZXRpdGl2ZW5lc3MgY2FuIGJlIGF2b2lkZWQgYnkgdXNp bmcgbG9vcHMgYW5kIHBvaW50ZXJzLgoKPiBTaWduZWQtb2ZmLWJ5OiBCaHVwaW5kZXIgVGhha3Vy IDxiaHVwaW5kZXIudGhha3VyQGxpbmFyby5vcmc+Cj4gLS0tCj4gIHRvb2xzL2NvbnNvbGUvZGFl bW9uL2lvLmMgfCA1MDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t LS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMzU2IGluc2VydGlvbnMoKyksIDE1MiBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYyBiL3Rvb2xzL2Nv bnNvbGUvZGFlbW9uL2lvLmMKPiBpbmRleCAwY2QxZmVlLi5iOWJlNWE1IDEwMDY0NAo+IC0tLSBh L3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMKPiArKysgYi90b29scy9jb25zb2xlL2RhZW1vbi9p by5jCj4gQEAgLTE2NCwxMSArMTY0LDM5IEBAIHN0YXRpYyBpbnQgd3JpdGVfd2l0aF90aW1lc3Rh bXAoaW50IGZkLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc3osCj4gIAlyZXR1cm4gMDsKPiAg fQo+ICAKPiAtc3RhdGljIHZvaWQgYnVmZmVyX2FwcGVuZChzdHJ1Y3QgZG9tYWluICpkb20pCj4g Ky8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBkYXRhIGlzIGFsbG93ZWQgdG8g YmUgYnVmZmVyZWQgZm9yIHRoYXQgY29uc29sZS4KPiArICogSWYgbm90IHRoZW4gaXQgbWFya3Mg aXQgcGVuZGluZyBmb3IgbGF0ZXIgcmVjZWl2aW5nLgo+ICsgKi8KPiArc3RhdGljIGJvb2wgYnVm ZmVyX2F2YWlsYWJsZShzdHJ1Y3QgZG9tYWluICpkb20sIGludCBjb25zb2xlX3R5cGUpCj4gK3sK PiArCWlmIChkaXNjYXJkX292ZXJmbG93ZWRfZGF0YSB8fAo+ICsJCSFkb20tPmJ1ZmZlcltjb25z b2xlX3R5cGVdLm1heF9jYXBhY2l0eSB8fAo+ICsJCWRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0u c2l6ZSA8IGRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0ubWF4X2NhcGFjaXR5KQoKTGluZSB0b28g bG9uZy4KCj4gKwl7Cj4gKwkJZG9tLT5jb25zb2xlX2RhdGFfcGVuZGluZyAmPSB+KDE8PGNvbnNv bGVfdHlwZSk7Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4gKwllbHNlCj4gKwl7Cj4gKwkJZG9t LT5jb25zb2xlX2RhdGFfcGVuZGluZyB8PSAoMTw8Y29uc29sZV90eXBlKTsKPiArCQlyZXR1cm4g ZmFsc2U7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBlbmQoc3RydWN0 IGRvbWFpbiAqZG9tLCBpbnQgY29uc29sZV90eXBlKQo+ICB7Cj4gLQlzdHJ1Y3QgYnVmZmVyICpi dWZmZXIgPSAmZG9tLT5idWZmZXI7Cj4gKwlzdHJ1Y3QgYnVmZmVyICpidWZmZXIgPSAmZG9tLT5i dWZmZXJbY29uc29sZV90eXBlXTsKPiArCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50Zj1k b20tPmludGVyZmFjZVtjb25zb2xlX3R5cGVdOwo+ICsJeGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3Jf dCBwb3J0PWRvbS0+bG9jYWxfcG9ydFtjb25zb2xlX3R5cGVdOwoKU3BhY2VzIGFyb3VuZCAiPSIu Cgo+ICsKPiAgCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJvZCwgc2l6ZTsKPiAtCXN0cnVjdCB4 ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGRvbS0+aW50ZXJmYWNlOwo+ICsKPiArCS8qCj4gKwkg KiBjaGVjayBpZiBtb3JlIGRhdGEgaXMgYWxsb3dlZCB0byBiZSBidWZmZXJlZAo+ICsJICovCj4g KwlpZiAoIWJ1ZmZlcl9hdmFpbGFibGUoZG9tLCBjb25zb2xlX3R5cGUpKQo+ICsJCXJldHVybjsK PiAgCj4gIAljb25zID0gaW50Zi0+b3V0X2NvbnM7Cj4gIAlwcm9kID0gaW50Zi0+b3V0X3Byb2Q7 Cj4gQEAgLTE5MywyMiArMjIxLDIyIEBAIHN0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBlbmQoc3RydWN0 IGRvbWFpbiAqZG9tKQo+ICAKPiAgCXhlbl9tYigpOwo+ICAJaW50Zi0+b3V0X2NvbnMgPSBjb25z Owo+IC0JeGVuZXZ0Y2huX25vdGlmeShkb20tPnhjZV9oYW5kbGUsIGRvbS0+bG9jYWxfcG9ydCk7 Cj4gKwl4ZW5ldnRjaG5fbm90aWZ5KGRvbS0+eGNlX2hhbmRsZSwgcG9ydCk7Cj4gIAo+ICAJLyog R2V0IHRoZSBkYXRhIHRvIHRoZSBsb2dmaWxlIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGJlY2F1c2Ug aWYKPiAgCSAqIG5vIG9uZSBpcyBsaXN0ZW5pbmcgb24gdGhlIGNvbnNvbGUgcHR5IHRoZW4gaXQg d2lsbCBmaWxsIHVwCj4gIAkgKiBhbmQgaGFuZGxlX3R0eV93cml0ZSB3aWxsIHN0b3AgYmVpbmcg Y2FsbGVkLgo+ICAJICovCj4gLQlpZiAoZG9tLT5sb2dfZmQgIT0gLTEpIHsKPiArCWlmIChkb20t PmxvZ19mZFtjb25zb2xlX3R5cGVdICE9IC0xKSB7Cj4gIAkJaW50IGxvZ3JldDsKPiAgCQlpZiAo bG9nX3RpbWVfZ3Vlc3QpIHsKPiAgCQkJbG9ncmV0ID0gd3JpdGVfd2l0aF90aW1lc3RhbXAoCj4g LQkJCQlkb20tPmxvZ19mZCwKPiArCQkJCWRvbS0+bG9nX2ZkW2NvbnNvbGVfdHlwZV0sCj4gIAkJ CQlidWZmZXItPmRhdGEgKyBidWZmZXItPnNpemUgLSBzaXplLAo+ICAJCQkJc2l6ZSwgJmxvZ190 aW1lX2d1ZXN0X25lZWR0cyk7Cj4gIAkJfSBlbHNlIHsKPiAgCQkJbG9ncmV0ID0gd3JpdGVfYWxs KAo+IC0JCQkJZG9tLT5sb2dfZmQsCj4gKwkJCQlkb20tPmxvZ19mZFtjb25zb2xlX3R5cGVdLAo+ ICAJCQkJYnVmZmVyLT5kYXRhICsgYnVmZmVyLT5zaXplIC0gc2l6ZSwKPiAgCQkJCXNpemUpOwo+ ICAJCX0KPiBAQCAtMjk2LDEyICszMjQsMTMgQEAgc3RhdGljIGludCBjcmVhdGVfaHZfbG9nKHZv aWQpCj4gIAlyZXR1cm4gZmQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgY3JlYXRlX2RvbWFpbl9s b2coc3RydWN0IGRvbWFpbiAqZG9tKQo+ICtzdGF0aWMgaW50IGNyZWF0ZV9kb21haW5fbG9nKHN0 cnVjdCBkb21haW4gKmRvbSwgaW50IGNvbnNvbGVfdHlwZSkKPiAgewo+ICAJY2hhciBsb2dmaWxl W1BBVEhfTUFYXTsKPiAgCWNoYXIgKm5hbWVwYXRoLCAqZGF0YSwgKnM7Cj4gIAlpbnQgZmQ7Cj4g IAl1bnNpZ25lZCBpbnQgbGVuOwo+ICsJY2hhciAqY29uc29sZV9uYW1lW109eyJwdiIsICJ2Y29u In07Cj4gIAo+ICAJbmFtZXBhdGggPSB4c19nZXRfZG9tYWluX3BhdGgoeHMsIGRvbS0+ZG9taWQp Owo+ICAJcyA9IHJlYWxsb2MobmFtZXBhdGgsIHN0cmxlbihuYW1lcGF0aCkgKyA2KTsKPiBAQCAt MzIwLDcgKzM0OSw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2RvbWFpbl9sb2coc3RydWN0IGRvbWFp biAqZG9tKQo+ICAJCXJldHVybiAtMTsKPiAgCX0KPiAgCj4gLQlzbnByaW50Zihsb2dmaWxlLCBQ QVRIX01BWC0xLCAiJXMvZ3Vlc3QtJXMubG9nIiwgbG9nX2RpciwgZGF0YSk7Cj4gKwlzbnByaW50 Zihsb2dmaWxlLCBQQVRIX01BWC0xLCAiJXMvZ3Vlc3QtJXMtJXMubG9nIiwgbG9nX2RpciwgY29u c29sZV9uYW1lW2NvbnNvbGVfdHlwZV0sIGRhdGEpOwoKTGluZSB0b28gbG9uZy4KCj4gIAlmcmVl KGRhdGEpOwo+ICAJbG9nZmlsZVtQQVRIX01BWC0xXSA9ICdcMCc7Cj4gIAo+IEBAIC0zNDQsMTQg KzM3MywyNCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9kb21haW5fbG9nKHN0cnVjdCBkb21haW4gKmRv bSkKPiAgCj4gIHN0YXRpYyB2b2lkIGRvbWFpbl9jbG9zZV90dHkoc3RydWN0IGRvbWFpbiAqZG9t KQo+ICB7Cj4gLQlpZiAoZG9tLT5tYXN0ZXJfZmQgIT0gLTEpIHsKPiAtCQljbG9zZShkb20tPm1h c3Rlcl9mZCk7Cj4gLQkJZG9tLT5tYXN0ZXJfZmQgPSAtMTsKPiArCWlmIChkb20tPm1hc3Rlcl9m ZFtDT05TT0xFX1RZUEVfUFZdICE9IC0xKSB7Cj4gKwkJY2xvc2UoZG9tLT5tYXN0ZXJfZmRbQ09O U09MRV9UWVBFX1BWXSk7Cj4gKwkJZG9tLT5tYXN0ZXJfZmRbQ09OU09MRV9UWVBFX1BWXSA9IC0x Owo+ICsJfQo+ICsKPiArCWlmIChkb20tPnNsYXZlX2ZkW0NPTlNPTEVfVFlQRV9QVl0gIT0gLTEp IHsKPiArCQljbG9zZShkb20tPnNsYXZlX2ZkW0NPTlNPTEVfVFlQRV9QVl0pOwo+ICsJCWRvbS0+ c2xhdmVfZmRbQ09OU09MRV9UWVBFX1BWXSA9IC0xOwo+ICsJfQo+ICsKPiArCWlmIChkb20tPm1h c3Rlcl9mZFtDT05TT0xFX1RZUEVfVkNPTl0gIT0gLTEpIHsKPiArCQljbG9zZShkb20tPm1hc3Rl cl9mZFtDT05TT0xFX1RZUEVfVkNPTl0pOwo+ICsJCWRvbS0+bWFzdGVyX2ZkW0NPTlNPTEVfVFlQ RV9WQ09OXSA9IC0xOwo+ICAJfQo+ICAKPiAtCWlmIChkb20tPnNsYXZlX2ZkICE9IC0xKSB7Cj4g LQkJY2xvc2UoZG9tLT5zbGF2ZV9mZCk7Cj4gLQkJZG9tLT5zbGF2ZV9mZCA9IC0xOwo+ICsJaWYg KGRvbS0+c2xhdmVfZmRbQ09OU09MRV9UWVBFX1ZDT05dICE9IC0xKSB7Cj4gKwkJY2xvc2UoZG9t LT5zbGF2ZV9mZFtDT05TT0xFX1RZUEVfVkNPTl0pOwo+ICsJCWRvbS0+c2xhdmVfZmRbQ09OU09M RV9UWVBFX1ZDT05dID0gLTE7Cj4gIAl9CgpZb3UgY2FuIHVzZSB0d28gbG9vcHMgdG8gYXZvaWQg cmVwZXRpdGl2ZSBzbmlwcGV0cy4gQnV0IEknbSBmaW5lIHdpdGgKdGhlIGNvZGUgYXMtaXMsIHRv by4KCj4gIH0KPiAgCj4gQEAgLTQyNCw2MyArNDYzLDg2IEBAIHN0YXRpYyBpbnQgZG9tYWluX2Ny ZWF0ZV90dHkoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAJY2hhciAqZGF0YTsKPiAgCXVuc2lnbmVk IGludCBsZW47Cj4gIAlzdHJ1Y3QgdGVybWlvcyB0ZXJtOwo+ICsJaW50IGNvbnNvbGVfdHlwZT0w Owo+ICAKPiAtCWFzc2VydChkb20tPnNsYXZlX2ZkID09IC0xKTsKPiAtCWFzc2VydChkb20tPm1h c3Rlcl9mZCA9PSAtMSk7Cj4gKwlhc3NlcnQoZG9tLT5tYXN0ZXJfZmRbQ09OU09MRV9UWVBFX1BW XSA9PSAtMSk7Cj4gKwlhc3NlcnQoZG9tLT5zbGF2ZV9mZFtDT05TT0xFX1RZUEVfUFZdID09IC0x KTsKPiArCWFzc2VydChkb20tPm1hc3Rlcl9mZFtDT05TT0xFX1RZUEVfVkNPTl0gPT0gLTEpOwo+ ICsJYXNzZXJ0KGRvbS0+c2xhdmVfZmRbQ09OU09MRV9UWVBFX1ZDT05dID09IC0xKTsKPiAgCj4g LQlpZiAob3BlbnB0eSgmZG9tLT5tYXN0ZXJfZmQsICZkb20tPnNsYXZlX2ZkLCBOVUxMLCBOVUxM LCBOVUxMKSA8IDApIHsKPiAtCQllcnIgPSBlcnJubzsKPiAtCQlkb2xvZyhMT0dfRVJSLCAiRmFp bGVkIHRvIGNyZWF0ZSB0dHkgZm9yIGRvbWFpbi0lZCAiCj4gLQkJICAgICAgIihlcnJubyA9ICVp LCAlcykiLAo+IC0JCSAgICAgIGRvbS0+ZG9taWQsIGVyciwgc3RyZXJyb3IoZXJyKSk7Cj4gLQkJ cmV0dXJuIDA7Cj4gLQl9Cj4gKwkvKgo+ICsJICogT3BlbiBwdHkgZm9yIGJvdGggUFYgYW5kIHZj b24gY29uc29sZXMuCj4gKwkgKi8KPiArCWZvciAoY29uc29sZV90eXBlPTA7IGNvbnNvbGVfdHlw ZTxNQVhfQ09OU09MRTsgY29uc29sZV90eXBlKyspCgpTcGFjZXMgYXJvdW5kICI9IiBhbmQgIjwi LgoKPiArCXsKPiArCQlpZiAob3BlbnB0eSgmZG9tLT5tYXN0ZXJfZmRbY29uc29sZV90eXBlXSwg JmRvbS0+c2xhdmVfZmRbY29uc29sZV90eXBlXSwgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKSB7CgpM aW5lIHRvbyBsb25nCgo+ICsJCQllcnIgPSBlcnJubzsKPiArCQkJZG9sb2coTE9HX0VSUiwgIkZh aWxlZCB0byBjcmVhdGUgdHR5IGZvciBkb21haW4tJWQgIgo+ICsJCQkJICAiKGVycm5vID0gJWks ICVzKSIsCj4gKwkJCQkgIGRvbS0+ZG9taWQsIGVyciwgc3RyZXJyb3IoZXJyKSk7Cj4gKwkJCXJl dHVybiAwOwo+ICsJCX0KPiAgCj4gLQlpZiAodGNnZXRhdHRyKGRvbS0+c2xhdmVfZmQsICZ0ZXJt KSA8IDApIHsKPiAtCQllcnIgPSBlcnJubzsKPiAtCQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRv IGdldCB0dHkgYXR0cmlidXRlcyBmb3IgZG9tYWluLSVkICIKPiAtCQkJIihlcnJubyA9ICVpLCAl cykiLAo+IC0JCQlkb20tPmRvbWlkLCBlcnIsIHN0cmVycm9yKGVycikpOwo+IC0JCWdvdG8gb3V0 Owo+IC0JfQo+IC0JY2ZtYWtlcmF3KCZ0ZXJtKTsKPiAtCWlmICh0Y3NldGF0dHIoZG9tLT5zbGF2 ZV9mZCwgVENTQU5PVywgJnRlcm0pIDwgMCkgewo+IC0JCWVyciA9IGVycm5vOwo+IC0JCWRvbG9n KExPR19FUlIsICJGYWlsZWQgdG8gc2V0IHR0eSBhdHRyaWJ1dGVzIGZvciBkb21haW4tJWQgIgo+ IC0JCQkiKGVycm5vID0gJWksICVzKSIsCj4gLQkJCWRvbS0+ZG9taWQsIGVyciwgc3RyZXJyb3Io ZXJyKSk7Cj4gLQkJZ290byBvdXQ7Cj4gLQl9Cj4gKwkJaWYgKHRjZ2V0YXR0cihkb20tPnNsYXZl X2ZkW2NvbnNvbGVfdHlwZV0sICZ0ZXJtKSA8IDApIHsKPiArCQkJZXJyID0gZXJybm87Cj4gKwkJ CWRvbG9nKExPR19FUlIsICJGYWlsZWQgdG8gZ2V0IHR0eSBhdHRyaWJ1dGVzIGZvciBkb21haW4t JWQgIgo+ICsJCQkJIihlcnJubyA9ICVpLCAlcykiLAo+ICsJCQkJZG9tLT5kb21pZCwgZXJyLCBz dHJlcnJvcihlcnIpKTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsJCWNmbWFrZXJhdygmdGVy bSk7Cj4gKwkJaWYgKHRjc2V0YXR0cihkb20tPnNsYXZlX2ZkW2NvbnNvbGVfdHlwZV0sIFRDU0FO T1csICZ0ZXJtKSA8IDApIHsKPiArCQkJZXJyID0gZXJybm87Cj4gKwkJCWRvbG9nKExPR19FUlIs ICJGYWlsZWQgdG8gc2V0IHR0eSBhdHRyaWJ1dGVzIGZvciBkb21haW4tJWQgIgo+ICsJCQkJIihl cnJubyA9ICVpLCAlcykiLAo+ICsJCQkJZG9tLT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsK PiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICAKPiAtCWlmICgoc2xhdmUgPSBwdHNuYW1lKGRvbS0+ bWFzdGVyX2ZkKSkgPT0gTlVMTCkgewo+IC0JCWVyciA9IGVycm5vOwo+IC0JCWRvbG9nKExPR19F UlIsICJGYWlsZWQgdG8gZ2V0IHNsYXZlIG5hbWUgZm9yIGRvbWFpbi0lZCAiCj4gLQkJICAgICAg IihlcnJubyA9ICVpLCAlcykiLAo+IC0JCSAgICAgIGRvbS0+ZG9taWQsIGVyciwgc3RyZXJyb3Io ZXJyKSk7Cj4gLQkJZ290byBvdXQ7Cj4gLQl9Cj4gKwkJaWYgKChzbGF2ZSA9IHB0c25hbWUoZG9t LT5tYXN0ZXJfZmRbY29uc29sZV90eXBlXSkpID09IE5VTEwpIHsKPiArCQkJZXJyID0gZXJybm87 Cj4gKwkJCWRvbG9nKExPR19FUlIsICJGYWlsZWQgdG8gZ2V0IHNsYXZlIG5hbWUgZm9yIGRvbWFp bi0lZCAiCj4gKwkJCQkgICIoZXJybm8gPSAlaSwgJXMpIiwKPiArCQkJCSAgZG9tLT5kb21pZCwg ZXJyLCBzdHJlcnJvcihlcnIpKTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICAKPiAtCXN1Y2Nl c3MgPSBhc3ByaW50ZigmcGF0aCwgIiVzL2xpbWl0IiwgZG9tLT5jb25zcGF0aCkgIT0KPiAtCQkt MTsKPiAtCWlmICghc3VjY2VzcykKPiAtCQlnb3RvIG91dDsKPiAtCWRhdGEgPSB4c19yZWFkKHhz LCBYQlRfTlVMTCwgcGF0aCwgJmxlbik7Cj4gLQlpZiAoZGF0YSkgewo+IC0JCWRvbS0+YnVmZmVy Lm1heF9jYXBhY2l0eSA9IHN0cnRvdWwoZGF0YSwgMCwgMCk7Cj4gLQkJZnJlZShkYXRhKTsKPiAr CQkvKgo+ICsJCSAqIEluaXRpYWxpemUgdGhlIGNvbnNvbGUgYnVmZmVyIGNhcGFjaXR5Lgo+ICsJ CSAqLwo+ICsJCXN1Y2Nlc3MgPSBhc3ByaW50ZigmcGF0aCwgIiVzL2xpbWl0IiwgZG9tLT5jb25z cGF0aCkgIT0KPiArCQkJLTE7Cj4gKwkJaWYgKCFzdWNjZXNzKQo+ICsJCQlnb3RvIG91dDsKPiAr CQlkYXRhID0geHNfcmVhZCh4cywgWEJUX05VTEwsIHBhdGgsICZsZW4pOwo+ICsJCWlmIChkYXRh KSB7Cj4gKwkJCWRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0ubWF4X2NhcGFjaXR5ID0gc3RydG91 bChkYXRhLCAwLCAwKTsKPiArCQkJZnJlZShkYXRhKTsKPiArCQl9Cj4gKwkJZnJlZShwYXRoKTsK PiArCj4gKwkJLyoKPiArCQkgKiBXcml0ZSBjb25zb2xlIHNsYXZlIG5hbWUgdG8geGVuIHN0b3Jl Lgo+ICsJCSAqLwo+ICsJCWlmIChjb25zb2xlX3R5cGUgPT0gQ09OU09MRV9UWVBFX1ZDT04pCj4g KwkJCXN1Y2Nlc3MgPSAoYXNwcmludGYoJnBhdGgsICIlcy92dHR5IiwgZG9tLT5jb25zcGF0aCkg IT0gLTEpOwo+ICsJCWVsc2UKPiArCQkJc3VjY2VzcyA9IChhc3ByaW50ZigmcGF0aCwgIiVzL3R0 eSIsIGRvbS0+Y29uc3BhdGgpICE9IC0xKTsKPiArCj4gKwkJaWYgKCFzdWNjZXNzKQo+ICsJCQln b3RvIG91dDsKPiArCQlzdWNjZXNzID0geHNfd3JpdGUoeHMsIFhCVF9OVUxMLCBwYXRoLCBzbGF2 ZSwgc3RybGVuKHNsYXZlKSk7Cj4gKwkJZnJlZShwYXRoKTsKPiArCj4gKwkJaWYgKGZjbnRsKGRv bS0+bWFzdGVyX2ZkW2NvbnNvbGVfdHlwZV0sIEZfU0VURkwsIE9fTk9OQkxPQ0spID09IC0xKQo+ ICsJCQlnb3RvIG91dDsKPiArCj4gKwkJaWYgKCFkb20tPnZjb25fZW5hYmxlZCkKPiArCQkJYnJl YWs7Cj4gIAl9Cj4gLQlmcmVlKHBhdGgpOwo+ICAKPiAtCXN1Y2Nlc3MgPSAoYXNwcmludGYoJnBh dGgsICIlcy90dHkiLCBkb20tPmNvbnNwYXRoKSAhPSAtMSk7Cj4gIAlpZiAoIXN1Y2Nlc3MpCj4g IAkJZ290byBvdXQ7Cj4gLQlzdWNjZXNzID0geHNfd3JpdGUoeHMsIFhCVF9OVUxMLCBwYXRoLCBz bGF2ZSwgc3RybGVuKHNsYXZlKSk7Cj4gLQlmcmVlKHBhdGgpOwo+IC0JaWYgKCFzdWNjZXNzKQo+ IC0JCWdvdG8gb3V0Owo+IC0KPiAtCWlmIChmY250bChkb20tPm1hc3Rlcl9mZCwgRl9TRVRGTCwg T19OT05CTE9DSykgPT0gLTEpCj4gLQkJZ290byBvdXQ7Cj4gIAo+ICAJcmV0dXJuIDE7Cj4gIG91 dDoKPiBAQCAtNTIzLDIxICs1ODUsNTMgQEAgc3RhdGljIGludCB4c19nYXRoZXIoc3RydWN0IHhz X2hhbmRsZSAqeHMsIGNvbnN0IGNoYXIgKmRpciwgLi4uKQo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ ICAKPiAtc3RhdGljIHZvaWQgZG9tYWluX3VubWFwX2ludGVyZmFjZShzdHJ1Y3QgZG9tYWluICpk b20pCj4gK3N0YXRpYyB2b2lkIGRvbWFpbl91bm1hcF9pbnRlcmZhY2Uoc3RydWN0IGRvbWFpbiAq ZG9tLCBpbnQgY29uc29sZV90eXBlKQo+ICB7Cj4gLQlpZiAoZG9tLT5pbnRlcmZhY2UgPT0gTlVM TCkKPiArCWlmIChkb20tPmludGVyZmFjZVtjb25zb2xlX3R5cGVdID09IE5VTEwpCj4gIAkJcmV0 dXJuOwo+IC0JaWYgKHhndF9oYW5kbGUgJiYgZG9tLT5yaW5nX3JlZiA9PSAtMSkKPiAtCQl4ZW5n bnR0YWJfdW5tYXAoeGd0X2hhbmRsZSwgZG9tLT5pbnRlcmZhY2UsIDEpOwo+ICsJaWYgKHhndF9o YW5kbGUgJiYgZG9tLT5yaW5nX3JlZltjb25zb2xlX3R5cGVdID09IC0xKQo+ICsJCXhlbmdudHRh Yl91bm1hcCh4Z3RfaGFuZGxlLCBkb20tPmludGVyZmFjZVtjb25zb2xlX3R5cGVdLCAxKTsKPiAg CWVsc2UKPiAtCQltdW5tYXAoZG9tLT5pbnRlcmZhY2UsIFhDX1BBR0VfU0laRSk7Cj4gLQlkb20t PmludGVyZmFjZSA9IE5VTEw7Cj4gLQlkb20tPnJpbmdfcmVmID0gLTE7Cj4gKwkJbXVubWFwKGRv bS0+aW50ZXJmYWNlW2NvbnNvbGVfdHlwZV0sIFhDX1BBR0VfU0laRSk7Cj4gKwlkb20tPmludGVy ZmFjZVtjb25zb2xlX3R5cGVdID0gTlVMTDsKPiArCWRvbS0+cmluZ19yZWZbY29uc29sZV90eXBl XSA9IC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJpbmRfZXZlbnRfY2hhbm5lbChzdHJ1Y3Qg ZG9tYWluICpkb20sIGludCBuZXdfcnBvcnQsIGludCAqbHBvcnQsIGludCAqcnBvcnQpCgpMaW5l IHRvbyBsb25nLgoKPiArewo+ICsJaW50IGVyciA9IDAsIHJjOwo+ICsKPiArCS8qIEdvIG5vIGZ1 cnRoZXIgaWYgcG9ydCBoYXMgbm90IGNoYW5nZWQgYW5kIHdlIGFyZSBzdGlsbCBib3VuZC4gKi8K PiArCWlmIChuZXdfcnBvcnQgPT0gKnJwb3J0KSB7Cj4gKwkJeGNfZXZ0Y2huX3N0YXR1c190IHN0 YXR1cyA9IHsKPiArCQkuZG9tID0gRE9NSURfU0VMRiwKPiArCQkucG9ydCA9ICpscG9ydCB9Owo+ ICsJCWlmICgoeGNfZXZ0Y2huX3N0YXR1cyh4YywgJnN0YXR1cykgPT0gMCkgJiYKPiArCQkJKHN0 YXR1cy5zdGF0dXMgPT0gRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbikpCj4gKwkJCWdvdG8gb3V0Owo+ ICsJfQo+ICsKPiArCSpscG9ydCA9IC0xOwo+ICsJKnJwb3J0ID0gLTE7Cj4gKwlyYyA9IHhlbmV2 dGNobl9iaW5kX2ludGVyZG9tYWluKGRvbS0+eGNlX2hhbmRsZSwKPiArCQkJCQkJCQkJZG9tLT5k b21pZCwgbmV3X3Jwb3J0KTsKCkluZGVudGF0aW9uLgoKPiArCj4gKwlpZiAocmMgPT0gLTEpIHsK PiArCQllcnIgPSBlcnJubzsKPiArCQl4ZW5ldnRjaG5fY2xvc2UoZG9tLT54Y2VfaGFuZGxlKTsK PiArCQlkb20tPnhjZV9oYW5kbGUgPSBOVUxMOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiAr CSpscG9ydCA9IHJjOwo+ICsJKnJwb3J0ID0gbmV3X3Jwb3J0Owo+ICtvdXQ6Cj4gKwlyZXR1cm4g ZXJyOwo+ICB9Cj4gICAKPiAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRv bWFpbiAqZG9tKQo+ICB7Cj4gLQlpbnQgZXJyLCByZW1vdGVfcG9ydCwgcmluZ19yZWYsIHJjOwo+ ICsJaW50IGVyciwgcmVtb3RlX3BvcnQsIHJpbmdfcmVmLCB2Y29uX3JlbW90ZV9wb3J0LCB2Y29u X3JpbmdfcmVmOwo+ICAJY2hhciAqdHlwZSwgcGF0aFtQQVRIX01BWF07Cj4gIAo+ICAJZXJyID0g eHNfZ2F0aGVyKHhzLCBkb20tPmNvbnNwYXRoLAo+IEBAIC01NDcsNiArNjQxLDE3IEBAIHN0YXRp YyBpbnQgZG9tYWluX2NyZWF0ZV9yaW5nKHN0cnVjdCBkb21haW4gKmRvbSkKPiAgCWlmIChlcnIp Cj4gIAkJZ290byBvdXQ7Cj4gIAo+ICsJLyogdmNvbiBjb25zb2xlIGlzIG9wdGlvbmFsLiAqLwo+ ICsJZXJyID0geHNfZ2F0aGVyKHhzLCBkb20tPmNvbnNwYXRoLAo+ICsJCSJ2Y29uLXJpbmctcmVm IiwgIiV1IiwgJnZjb25fcmluZ19yZWYsCj4gKwkJInZjb24tcG9ydCIsICIlaSIsICZ2Y29uX3Jl bW90ZV9wb3J0LAo+ICsJCU5VTEwpOwo+ICsKCkluZGVudGF0aW9uLgoKPiArCWlmIChlcnIgfHwg dmNvbl9yaW5nX3JlZiA9PSAtMSkKPiArCQlkb20tPnZjb25fZW5hYmxlZCA9IGZhbHNlOwo+ICsJ ZWxzZQo+ICsJCWRvbS0+dmNvbl9lbmFibGVkID0gdHJ1ZTsKPiArCj4gIAlzbnByaW50ZihwYXRo LCBzaXplb2YocGF0aCksICIlcy90eXBlIiwgZG9tLT5jb25zcGF0aCk7Cj4gIAl0eXBlID0geHNf cmVhZCh4cywgWEJUX05VTEwsIHBhdGgsIE5VTEwpOwo+ICAJaWYgKHR5cGUgJiYgc3RyY21wKHR5 cGUsICJ4ZW5jb25zb2xlZCIpICE9IDApIHsKPiBAQCAtNTU2LDQxICs2NjEsNTEgQEAgc3RhdGlj IGludCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAJZnJlZSh0eXBl KTsKPiAgCj4gIAkvKiBJZiB1c2luZyByaW5nX3JlZiBhbmQgaXQgaGFzIGNoYW5nZWQsIHJlbWFw ICovCj4gLQlpZiAocmluZ19yZWYgIT0gZG9tLT5yaW5nX3JlZiAmJiBkb20tPnJpbmdfcmVmICE9 IC0xKQo+IC0JCWRvbWFpbl91bm1hcF9pbnRlcmZhY2UoZG9tKTsKPiArCWlmIChyaW5nX3JlZiAh PSBkb20tPnJpbmdfcmVmW0NPTlNPTEVfVFlQRV9QVl0gJiYgZG9tLT5yaW5nX3JlZltDT05TT0xF X1RZUEVfUFZdICE9IC0xKQoKTGluZSB0b28gbG9uZy4KCj4gKwkJZG9tYWluX3VubWFwX2ludGVy ZmFjZShkb20sIENPTlNPTEVfVFlQRV9QVik7Cj4gKwo+ICsJLyogSWYgdXNpbmcgdmNvbiByaW5n X3JlZiBhbmQgaXQgaGFzIGNoYW5nZWQsIHJlbWFwICovCj4gKwlpZiAoZG9tLT52Y29uX2VuYWJs ZWQgJiYKPiArCQl2Y29uX3JpbmdfcmVmICE9IGRvbS0+cmluZ19yZWZbQ09OU09MRV9UWVBFX1ZD T05dICYmCj4gKwkJZG9tLT5yaW5nX3JlZltDT05TT0xFX1RZUEVfVkNPTl0gIT0gLTEgKQo+ICsJ CWRvbWFpbl91bm1hcF9pbnRlcmZhY2UoZG9tLCBDT05TT0xFX1RZUEVfVkNPTik7CgpJbmRlbnRh dGlvbi4KCj4gIAo+IC0JaWYgKCFkb20tPmludGVyZmFjZSAmJiB4Z3RfaGFuZGxlKSB7Cj4gKwlp ZiAoIWRvbS0+aW50ZXJmYWNlW0NPTlNPTEVfVFlQRV9QVl0gJiYgeGd0X2hhbmRsZSkgewo+ICAJ CS8qIFByZWZlciB1c2luZyBncmFudCB0YWJsZSAqLwo+IC0JCWRvbS0+aW50ZXJmYWNlID0geGVu Z250dGFiX21hcF9ncmFudF9yZWYoeGd0X2hhbmRsZSwKPiAtCQkJZG9tLT5kb21pZCwgR05UVEFC X1JFU0VSVkVEX0NPTlNPTEUsCj4gLQkJCVBST1RfUkVBRHxQUk9UX1dSSVRFKTsKPiAtCQlkb20t PnJpbmdfcmVmID0gLTE7Cj4gKwkJZG9tLT5pbnRlcmZhY2VbQ09OU09MRV9UWVBFX1BWXSA9IHhl bmdudHRhYl9tYXBfZ3JhbnRfcmVmKHhndF9oYW5kbGUsCj4gKwkJCQkJCQkJCQkJCQkJCQkgIGRv bS0+ZG9taWQsIEdOVFRBQl9SRVNFUlZFRF9DT05TT0xFLAo+ICsJCQkJCQkJCQkJCQkJCQkJICBQ Uk9UX1JFQUR8UFJPVF9XUklURSk7Cj4gKwkJZG9tLT5yaW5nX3JlZltDT05TT0xFX1RZUEVfUFZd ID0gLTE7CgpJbmRlbnRhdGlvbi4KCj4gIAl9Cj4gLQlpZiAoIWRvbS0+aW50ZXJmYWNlKSB7Cj4g Kwo+ICsJaWYgKCFkb20tPmludGVyZmFjZVtDT05TT0xFX1RZUEVfUFZdKSB7Cj4gIAkJLyogRmFs bCBiYWNrIHRvIHhjX21hcF9mb3JlaWduX3JhbmdlICovCj4gLQkJZG9tLT5pbnRlcmZhY2UgPSB4 Y19tYXBfZm9yZWlnbl9yYW5nZSgKPiArCQlkb20tPmludGVyZmFjZVtDT05TT0xFX1RZUEVfUFZd ID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoCj4gIAkJCXhjLCBkb20tPmRvbWlkLCBYQ19QQUdFX1NJ WkUsCj4gIAkJCVBST1RfUkVBRHxQUk9UX1dSSVRFLAo+ICAJCQkodW5zaWduZWQgbG9uZylyaW5n X3JlZik7Cj4gLQkJaWYgKGRvbS0+aW50ZXJmYWNlID09IE5VTEwpIHsKPiArCQlpZiAoZG9tLT5p bnRlcmZhY2VbQ09OU09MRV9UWVBFX1BWXSA9PSBOVUxMKSB7Cj4gIAkJCWVyciA9IEVJTlZBTDsK PiAgCQkJZ290byBvdXQ7Cj4gIAkJfQo+IC0JCWRvbS0+cmluZ19yZWYgPSByaW5nX3JlZjsKPiAr CQlkb20tPnJpbmdfcmVmW0NPTlNPTEVfVFlQRV9QVl0gPSByaW5nX3JlZjsKPiAgCX0KPiAgCj4g LQkvKiBHbyBubyBmdXJ0aGVyIGlmIHBvcnQgaGFzIG5vdCBjaGFuZ2VkIGFuZCB3ZSBhcmUgc3Rp bGwgYm91bmQuICovCj4gLQlpZiAocmVtb3RlX3BvcnQgPT0gZG9tLT5yZW1vdGVfcG9ydCkgewo+ IC0JCXhjX2V2dGNobl9zdGF0dXNfdCBzdGF0dXMgPSB7Cj4gLQkJCS5kb20gPSBET01JRF9TRUxG LAo+IC0JCQkucG9ydCA9IGRvbS0+bG9jYWxfcG9ydCB9Owo+IC0JCWlmICgoeGNfZXZ0Y2huX3N0 YXR1cyh4YywgJnN0YXR1cykgPT0gMCkgJiYKPiAtCQkgICAgKHN0YXR1cy5zdGF0dXMgPT0gRVZU Q0hOU1RBVF9pbnRlcmRvbWFpbikpCj4gKwkvKiBNYXAgdmNvbiBjb25zb2xlIHJpbmcgYnVmZmVy LiAqLwo+ICsJaWYgKGRvbS0+dmNvbl9lbmFibGVkICYmICFkb20tPmludGVyZmFjZVtDT05TT0xF X1RZUEVfVkNPTl0pIHsKPiArCj4gKwkJLyogRmFsbCBiYWNrIHRvIHhjX21hcF9mb3JlaWduX3Jh bmdlICovCj4gKwkJZG9tLT5pbnRlcmZhY2VbQ09OU09MRV9UWVBFX1ZDT05dID0geGNfbWFwX2Zv cmVpZ25fcmFuZ2UoCj4gKwkJeGMsIGRvbS0+ZG9taWQsIFhDX1BBR0VfU0laRSwKPiArCQlQUk9U X1JFQUR8UFJPVF9XUklURSwKPiArCQkodW5zaWduZWQgbG9uZyl2Y29uX3JpbmdfcmVmKTsKPiAr CQlpZiAoIGRvbS0+aW50ZXJmYWNlW0NPTlNPTEVfVFlQRV9WQ09OXSA9PSBOVUxMICkgewo+ICsJ CQllcnIgPSBFSU5WQUw7Cj4gIAkJCWdvdG8gb3V0Owo+ICsJCX0KPiArCQlkb20tPnJpbmdfcmVm W0NPTlNPTEVfVFlQRV9WQ09OXSA9IHZjb25fcmluZ19yZWY7Cj4gIAl9Cj4gIAo+IC0JZG9tLT5s b2NhbF9wb3J0ID0gLTE7Cj4gLQlkb20tPnJlbW90ZV9wb3J0ID0gLTE7Cj4gIAlpZiAoZG9tLT54 Y2VfaGFuZGxlICE9IE5VTEwpCj4gIAkJeGVuZXZ0Y2huX2Nsb3NlKGRvbS0+eGNlX2hhbmRsZSk7 Cj4gIAo+IEBAIC02MDIsMzEgKzcxNyw0NiBAQCBzdGF0aWMgaW50IGRvbWFpbl9jcmVhdGVfcmlu ZyhzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAkJZ290byBvdXQ7Cj4gIAl9Cj4gICAKPiAtCXJjID0g eGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oZG9tLT54Y2VfaGFuZGxlLAo+IC0JCWRvbS0+ZG9t aWQsIHJlbW90ZV9wb3J0KTsKPiAtCj4gLQlpZiAocmMgPT0gLTEpIHsKPiAtCQllcnIgPSBlcnJu bzsKPiArCWVyciA9IGJpbmRfZXZlbnRfY2hhbm5lbChkb20sIHJlbW90ZV9wb3J0LAo+ICsJCQkJ CQkJICZkb20tPmxvY2FsX3BvcnRbQ09OU09MRV9UWVBFX1BWXSwKPiArCQkJCQkJCSAmZG9tLT5y ZW1vdGVfcG9ydFtDT05TT0xFX1RZUEVfUFZdKTsKCkluZGVudGF0aW9uLgoKPiArCWlmIChlcnIp Cj4gKwl7Cj4gIAkJeGVuZXZ0Y2huX2Nsb3NlKGRvbS0+eGNlX2hhbmRsZSk7Cj4gLQkJZG9tLT54 Y2VfaGFuZGxlID0gTlVMTDsKPiAgCQlnb3RvIG91dDsKPiAgCX0KPiAtCWRvbS0+bG9jYWxfcG9y dCA9IHJjOwo+IC0JZG9tLT5yZW1vdGVfcG9ydCA9IHJlbW90ZV9wb3J0Owo+ICAKPiAtCWlmIChk b20tPm1hc3Rlcl9mZCA9PSAtMSkgewo+ICsJaWYgKGRvbS0+dmNvbl9lbmFibGVkKQo+ICsJewo+ ICsJCWVyciA9IGJpbmRfZXZlbnRfY2hhbm5lbChkb20sIHZjb25fcmVtb3RlX3BvcnQsCj4gKwkJ CQkJCQkJICZkb20tPmxvY2FsX3BvcnRbQ09OU09MRV9UWVBFX1ZDT05dLAo+ICsJCQkJCQkJCSAm ZG9tLT5yZW1vdGVfcG9ydFtDT05TT0xFX1RZUEVfVkNPTl0pOwoKSW5kZW50YXRpb24uCgo+ICsJ CWlmIChlcnIpCj4gKwkJewo+ICsJCQl4ZW5ldnRjaG5fY2xvc2UoZG9tLT54Y2VfaGFuZGxlKTsK PiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChkb20tPm1hc3Rlcl9mZFtD T05TT0xFX1RZUEVfUFZdID09IC0xKSB7Cj4gIAkJaWYgKCFkb21haW5fY3JlYXRlX3R0eShkb20p KSB7Cj4gIAkJCWVyciA9IGVycm5vOwo+ICAJCQl4ZW5ldnRjaG5fY2xvc2UoZG9tLT54Y2VfaGFu ZGxlKTsKPiAgCQkJZG9tLT54Y2VfaGFuZGxlID0gTlVMTDsKPiAtCQkJZG9tLT5sb2NhbF9wb3J0 ID0gLTE7Cj4gLQkJCWRvbS0+cmVtb3RlX3BvcnQgPSAtMTsKPiArCQkJZG9tLT5sb2NhbF9wb3J0 W0NPTlNPTEVfVFlQRV9QVl0gPSAtMTsKPiArCQkJZG9tLT5yZW1vdGVfcG9ydFtDT05TT0xFX1RZ UEVfUFZdID0gLTE7Cj4gKwkJCWRvbS0+bG9jYWxfcG9ydFtDT05TT0xFX1RZUEVfVkNPTl0gPSAt MTsKPiArCQkJZG9tLT5yZW1vdGVfcG9ydFtDT05TT0xFX1RZUEVfVkNPTl0gPSAtMTsKPiArCQkJ ZG9tLT52Y29uX2VuYWJsZWQgPSBmYWxzZTsKPiAgCQkJZ290byBvdXQ7Cj4gIAkJfQo+ICAJfQo+ ICAKPiAtCWlmIChsb2dfZ3Vlc3QgJiYgKGRvbS0+bG9nX2ZkID09IC0xKSkKPiAtCQlkb20tPmxv Z19mZCA9IGNyZWF0ZV9kb21haW5fbG9nKGRvbSk7Cj4gKwlpZiAobG9nX2d1ZXN0ICYmIChkb20t PmxvZ19mZFtDT05TT0xFX1RZUEVfUFZdID09IC0xKSkKPiArCQlkb20tPmxvZ19mZFtDT05TT0xF X1RZUEVfUFZdID0gY3JlYXRlX2RvbWFpbl9sb2coZG9tLCBDT05TT0xFX1RZUEVfUFYpOwo+ICsK PiArCWlmIChsb2dfZ3Vlc3QgJiYgZG9tLT52Y29uX2VuYWJsZWQgJiYgKGRvbS0+bG9nX2ZkW0NP TlNPTEVfVFlQRV9WQ09OXSA9PSAtMSkpCj4gKwkJZG9tLT5sb2dfZmRbQ09OU09MRV9UWVBFX1ZD T05dID0gY3JlYXRlX2RvbWFpbl9sb2coZG9tLCBDT05TT0xFX1RZUEVfVkNPTik7Cj4gIAo+ICAg b3V0Ogo+ICAJcmV0dXJuIGVycjsKPiBAQCAtNjgxLDE3ICs4MTEsMjQgQEAgc3RhdGljIHN0cnVj dCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlkKQo+ICAJZG9tLT5jb25zcGF0aCA9IHM7 Cj4gIAlzdHJjYXQoZG9tLT5jb25zcGF0aCwgIi9jb25zb2xlIik7Cj4gIAo+IC0JZG9tLT5tYXN0 ZXJfZmQgPSAtMTsKPiAtCWRvbS0+bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKPiAtCWRvbS0+c2xh dmVfZmQgPSAtMTsKPiAtCWRvbS0+bG9nX2ZkID0gLTE7Cj4gKwlkb20tPm1hc3Rlcl9mZFtDT05T T0xFX1RZUEVfUFZdID0gLTE7Cj4gKwlkb20tPm1hc3Rlcl9wb2xsZmRfaWR4W0NPTlNPTEVfVFlQ RV9QVl0gPSAtMTsKPiArCWRvbS0+c2xhdmVfZmRbQ09OU09MRV9UWVBFX1BWXSA9IC0xOwo+ICsJ ZG9tLT5tYXN0ZXJfZmRbQ09OU09MRV9UWVBFX1ZDT05dID0gLTE7Cj4gKwlkb20tPm1hc3Rlcl9w b2xsZmRfaWR4W0NPTlNPTEVfVFlQRV9WQ09OXSA9IC0xOwo+ICsJZG9tLT5zbGF2ZV9mZFtDT05T T0xFX1RZUEVfVkNPTl0gPSAtMTsKPiArCWRvbS0+bG9nX2ZkW0NPTlNPTEVfVFlQRV9QVl0gPSAt MTsKPiArCWRvbS0+bG9nX2ZkW0NPTlNPTEVfVFlQRV9WQ09OXSA9IC0xOwo+ICAJZG9tLT54Y2Vf cG9sbGZkX2lkeCA9IC0xOwo+ICAKPiAgCWRvbS0+bmV4dF9wZXJpb2QgPSAoKGxvbmcgbG9uZyl0 cy50dl9zZWMgKiAxMDAwKSArICh0cy50dl9uc2VjIC8gMTAwMDAwMCkgKyBSQVRFX0xJTUlUX1BF UklPRDsKPiAgCj4gLQlkb20tPnJpbmdfcmVmID0gLTE7Cj4gLQlkb20tPmxvY2FsX3BvcnQgPSAt MTsKPiAtCWRvbS0+cmVtb3RlX3BvcnQgPSAtMTsKPiArCWRvbS0+cmluZ19yZWZbQ09OU09MRV9U WVBFX1BWXSA9IC0xOwo+ICsJZG9tLT5yaW5nX3JlZltDT05TT0xFX1RZUEVfVkNPTl0gPSAtMTsK PiArCWRvbS0+bG9jYWxfcG9ydFtDT05TT0xFX1RZUEVfUFZdID0gLTE7Cj4gKwlkb20tPnJlbW90 ZV9wb3J0W0NPTlNPTEVfVFlQRV9QVl0gPSAtMTsKPiArCWRvbS0+bG9jYWxfcG9ydFtDT05TT0xF X1RZUEVfVkNPTl0gPSAtMTsKPiArCWRvbS0+cmVtb3RlX3BvcnRbQ09OU09MRV9UWVBFX1ZDT05d ID0gLTE7Cj4gIAo+ICAJaWYgKCF3YXRjaF9kb21haW4oZG9tLCB0cnVlKSkKPiAgCQlnb3RvIG91 dDsKPiBAQCAtNzM3LDEzICs4NzQsMjEgQEAgc3RhdGljIHZvaWQgY2xlYW51cF9kb21haW4oc3Ry dWN0IGRvbWFpbiAqZCkKPiAgewo+ICAJZG9tYWluX2Nsb3NlX3R0eShkKTsKPiAgCj4gLQlpZiAo ZC0+bG9nX2ZkICE9IC0xKSB7Cj4gLQkJY2xvc2UoZC0+bG9nX2ZkKTsKPiAtCQlkLT5sb2dfZmQg PSAtMTsKPiArCWlmIChkLT5sb2dfZmRbQ09OU09MRV9UWVBFX1BWXSAhPSAtMSkgewo+ICsJCWNs b3NlKGQtPmxvZ19mZFtDT05TT0xFX1RZUEVfUFZdKTsKPiArCQlkLT5sb2dfZmRbQ09OU09MRV9U WVBFX1BWXSA9IC0xOwo+ICsJfQo+ICsKPiArCWlmIChkLT5sb2dfZmRbQ09OU09MRV9UWVBFX1ZD T05dICE9IC0xKSB7Cj4gKwkJY2xvc2UoZC0+bG9nX2ZkW0NPTlNPTEVfVFlQRV9WQ09OXSk7Cj4g KwkJZC0+bG9nX2ZkW0NPTlNPTEVfVFlQRV9WQ09OXSA9IC0xOwo+ICAJfQo+ICAKPiAtCWZyZWUo ZC0+YnVmZmVyLmRhdGEpOwo+IC0JZC0+YnVmZmVyLmRhdGEgPSBOVUxMOwo+ICsJZnJlZShkLT5i dWZmZXJbQ09OU09MRV9UWVBFX1BWXS5kYXRhKTsKPiArCWZyZWUoZC0+YnVmZmVyW0NPTlNPTEVf VFlQRV9WQ09OXS5kYXRhKTsKPiArCj4gKwlkLT5idWZmZXJbQ09OU09MRV9UWVBFX1BWXS5kYXRh ID0gTlVMTDsKPiArCWQtPmJ1ZmZlcltDT05TT0xFX1RZUEVfVkNPTl0uZGF0YSA9IE5VTEw7Cj4g IAo+ICAJZnJlZShkLT5jb25zcGF0aCk7Cj4gIAlkLT5jb25zcGF0aCA9IE5VTEw7Cj4gQEAgLTc1 NSw3ICs5MDAsOCBAQCBzdGF0aWMgdm9pZCBzaHV0ZG93bl9kb21haW4oc3RydWN0IGRvbWFpbiAq ZCkKPiAgewo+ICAJZC0+aXNfZGVhZCA9IHRydWU7Cj4gIAl3YXRjaF9kb21haW4oZCwgZmFsc2Up Owo+IC0JZG9tYWluX3VubWFwX2ludGVyZmFjZShkKTsKPiArCWRvbWFpbl91bm1hcF9pbnRlcmZh Y2UoZCwgQ09OU09MRV9UWVBFX1BWKTsKPiArCWRvbWFpbl91bm1hcF9pbnRlcmZhY2UoZCwgQ09O U09MRV9UWVBFX1ZDT04pOwo+ICAJaWYgKGQtPnhjZV9oYW5kbGUgIT0gTlVMTCkKPiAgCQl4ZW5l dnRjaG5fY2xvc2UoZC0+eGNlX2hhbmRsZSk7Cj4gIAlkLT54Y2VfaGFuZGxlID0gTlVMTDsKPiBA QCAtNzg2LDkgKzkzMiw5IEBAIHN0YXRpYyB2b2lkIGVudW1fZG9tYWlucyh2b2lkKQo+ICAJfQo+ ICB9Cj4gIAo+IC1zdGF0aWMgaW50IHJpbmdfZnJlZV9ieXRlcyhzdHJ1Y3QgZG9tYWluICpkb20p Cj4gK3N0YXRpYyBpbnQgcmluZ19mcmVlX2J5dGVzKHN0cnVjdCBkb21haW4gKmRvbSwgaW50IGNv bnNvbGVfdHlwZSkKPiAgewo+IC0Jc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gZG9t LT5pbnRlcmZhY2U7Cj4gKwlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBkb20tPmlu dGVyZmFjZVtjb25zb2xlX3R5cGVdOwo+ICAJWEVOQ09OU19SSU5HX0lEWCBjb25zLCBwcm9kLCBz cGFjZTsKPiAgCj4gIAljb25zID0gaW50Zi0+aW5fY29uczsKPiBAQCAtODEzLDI1ICs5NTksMjYg QEAgc3RhdGljIHZvaWQgZG9tYWluX2hhbmRsZV9icm9rZW5fdHR5KHN0cnVjdCBkb21haW4gKmRv bSwgaW50IHJlY3JlYXRlKQo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBoYW5kbGVfdHR5 X3JlYWQoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICtzdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3JlYWQo c3RydWN0IGRvbWFpbiAqZG9tLCBpbnQgY29uc29sZV90eXBlKQo+ICB7Cj4gIAlzc2l6ZV90IGxl biA9IDA7Cj4gIAljaGFyIG1zZ1s4MF07Cj4gIAlpbnQgaTsKPiAtCXN0cnVjdCB4ZW5jb25zX2lu dGVyZmFjZSAqaW50ZiA9IGRvbS0+aW50ZXJmYWNlOwo+ICAJWEVOQ09OU19SSU5HX0lEWCBwcm9k Owo+ICsJc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmPWRvbS0+aW50ZXJmYWNlW2NvbnNv bGVfdHlwZV07Cj4gKwl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHBvcnQ9ZG9tLT5sb2NhbF9w b3J0W2NvbnNvbGVfdHlwZV07Cj4gIAo+ICAJaWYgKGRvbS0+aXNfZGVhZCkKPiAgCQlyZXR1cm47 Cj4gIAo+IC0JbGVuID0gcmluZ19mcmVlX2J5dGVzKGRvbSk7Cj4gKwlsZW4gPSByaW5nX2ZyZWVf Ynl0ZXMoZG9tLCBjb25zb2xlX3R5cGUpOwo+ICAJaWYgKGxlbiA9PSAwKQo+ICAJCXJldHVybjsK PiAgCj4gIAlpZiAobGVuID4gc2l6ZW9mKG1zZykpCj4gIAkJbGVuID0gc2l6ZW9mKG1zZyk7Cj4g IAo+IC0JbGVuID0gcmVhZChkb20tPm1hc3Rlcl9mZCwgbXNnLCBsZW4pOwo+ICsJbGVuID0gcmVh ZChkb20tPm1hc3Rlcl9mZFtjb25zb2xlX3R5cGVdLCBtc2csIGxlbik7Cj4gIAkvKgo+ICAJICog Tm90ZTogb24gU29sYXJpcywgbGVuID09IDAgbWVhbnMgdGhlIHNsYXZlIGNsb3NlZCwgYW5kIHRo aXMKPiAgCSAqIGlzIG5vIHByb2JsZW0sIGJ1dCBMaW51eCBjYW4ndCBoYW5kbGUgdGhpcyB1c2Vm dWxseSwgc28gd2UKPiBAQCAtODQ3LDI4ICs5OTQsMjkgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3R0 eV9yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkKPiAgCQl9Cj4gIAkJeGVuX3dtYigpOwo+ICAJCWlu dGYtPmluX3Byb2QgPSBwcm9kOwo+IC0JCXhlbmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxl LCBkb20tPmxvY2FsX3BvcnQpOwo+ICsJCXhlbmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxl LCBwb3J0KTsKPiAgCX0gZWxzZSB7Cj4gIAkJZG9tYWluX2Nsb3NlX3R0eShkb20pOwo+ICAJCXNo dXRkb3duX2RvbWFpbihkb20pOwo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBoYW5kbGVf dHR5X3dyaXRlKHN0cnVjdCBkb21haW4gKmRvbSkKPiArc3RhdGljIHZvaWQgaGFuZGxlX3R0eV93 cml0ZShzdHJ1Y3QgZG9tYWluICpkb20sIGludCBjb25zb2xlX3R5cGUpCj4gIHsKPiAgCXNzaXpl X3QgbGVuOwo+ICAKPiAgCWlmIChkb20tPmlzX2RlYWQpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWxl biA9IHdyaXRlKGRvbS0+bWFzdGVyX2ZkLCBkb20tPmJ1ZmZlci5kYXRhICsgZG9tLT5idWZmZXIu Y29uc3VtZWQsCj4gLQkJICAgIGRvbS0+YnVmZmVyLnNpemUgLSBkb20tPmJ1ZmZlci5jb25zdW1l ZCk7Cj4gKwlsZW4gPSB3cml0ZShkb20tPm1hc3Rlcl9mZFtjb25zb2xlX3R5cGVdLAo+ICsJCQkJ ZG9tLT5idWZmZXJbY29uc29sZV90eXBlXS5kYXRhICsgZG9tLT5idWZmZXJbY29uc29sZV90eXBl XS5jb25zdW1lZCwKPiArCQkJCWRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0uc2l6ZSAtIGRvbS0+ YnVmZmVyW2NvbnNvbGVfdHlwZV0uY29uc3VtZWQpOwo+ICAgCWlmIChsZW4gPCAxKSB7Cj4gIAkJ ZG9sb2coTE9HX0RFQlVHLCAiV3JpdGUgZmFpbGVkIG9uIGRvbWFpbiAlZDogJXpkLCAlZFxuIiwK PiAgCQkgICAgICBkb20tPmRvbWlkLCBsZW4sIGVycm5vKTsKPiAgCQlkb21haW5faGFuZGxlX2Jy b2tlbl90dHkoZG9tLCBkb21haW5faXNfdmFsaWQoZG9tLT5kb21pZCkpOwo+ICAJfSBlbHNlIHsK PiAtCQlidWZmZXJfYWR2YW5jZSgmZG9tLT5idWZmZXIsIGxlbik7Cj4gKwkJYnVmZmVyX2FkdmFu Y2UoJmRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0sIGxlbik7Cj4gIAl9Cj4gIH0KPiAgCj4gQEAg LTg4NCw3ICsxMDMyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yaW5nX3JlYWQoc3RydWN0IGRv bWFpbiAqZG9tKQo+ICAKPiAgCWRvbS0+ZXZlbnRfY291bnQrKzsKPiAgCj4gLQlidWZmZXJfYXBw ZW5kKGRvbSk7Cj4gKwlpZiAocG9ydCA9PSBkb20tPmxvY2FsX3BvcnRbQ09OU09MRV9UWVBFX1ZD T05dKQo+ICsJCWJ1ZmZlcl9hcHBlbmQoZG9tLCBDT05TT0xFX1RZUEVfVkNPTik7Cj4gKwllbHNl Cj4gKwkJYnVmZmVyX2FwcGVuZChkb20sIENPTlNPTEVfVFlQRV9QVik7Cj4gIAo+ICAJaWYgKGRv bS0+ZXZlbnRfY291bnQgPCBSQVRFX0xJTUlUX0FMTE9XQU5DRSkKPiAgCQkodm9pZCl4ZW5ldnRj aG5fdW5tYXNrKGRvbS0+eGNlX2hhbmRsZSwgcG9ydCk7Cj4gQEAgLTk1NCw5ICsxMTA1LDE2IEBA IHN0YXRpYyB2b2lkIGhhbmRsZV9sb2dfcmVsb2FkKHZvaWQpCj4gIAlpZiAobG9nX2d1ZXN0KSB7 Cj4gIAkJc3RydWN0IGRvbWFpbiAqZDsKPiAgCQlmb3IgKGQgPSBkb21faGVhZDsgZDsgZCA9IGQt Pm5leHQpIHsKPiAtCQkJaWYgKGQtPmxvZ19mZCAhPSAtMSkKPiAtCQkJCWNsb3NlKGQtPmxvZ19m ZCk7Cj4gLQkJCWQtPmxvZ19mZCA9IGNyZWF0ZV9kb21haW5fbG9nKGQpOwo+ICsJCQlpZiAoZC0+ bG9nX2ZkW0NPTlNPTEVfVFlQRV9QVl0gIT0gLTEpCj4gKwkJCQljbG9zZShkLT5sb2dfZmRbQ09O U09MRV9UWVBFX1BWXSk7Cj4gKwkJCWQtPmxvZ19mZFtDT05TT0xFX1RZUEVfUFZdID0gY3JlYXRl X2RvbWFpbl9sb2coZCwgQ09OU09MRV9UWVBFX1BWKTsKPiArCj4gKwkJCWlmIChkLT52Y29uX2Vu YWJsZWQpCj4gKwkJCXsKPiArCQkJCWlmIChkLT5sb2dfZmRbQ09OU09MRV9UWVBFX1ZDT05dICE9 IC0xKQo+ICsJCQkJCWNsb3NlKGQtPmxvZ19mZFtDT05TT0xFX1RZUEVfVkNPTl0pOwo+ICsJCQkJ ZC0+bG9nX2ZkW0NPTlNPTEVfVFlQRV9QVl0gPSBjcmVhdGVfZG9tYWluX2xvZyhkLCBDT05TT0xF X1RZUEVfVkNPTik7CgpMaW5lIHRvbyBsb25nLgoKPiArCQkJfQo+ICAJCX0KPiAgCX0KPiAgCj4g QEAgLTEwNzQsNyArMTIzMiw5IEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCj4gIAkJCWlmICgobm93 KzUpID4gZC0+bmV4dF9wZXJpb2QpIHsKPiAgCQkJCWQtPm5leHRfcGVyaW9kID0gbm93ICsgUkFU RV9MSU1JVF9QRVJJT0Q7Cj4gIAkJCQlpZiAoZC0+ZXZlbnRfY291bnQgPj0gUkFURV9MSU1JVF9B TExPV0FOQ0UpIHsKPiAtCQkJCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNrKGQtPnhjZV9oYW5kbGUs IGQtPmxvY2FsX3BvcnQpOwo+ICsJCQkJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soZC0+eGNlX2hh bmRsZSwgZC0+bG9jYWxfcG9ydFtDT05TT0xFX1RZUEVfUFZdKTsKPiArCQkJCQlpZiAoZC0+dmNv bl9lbmFibGVkKQo+ICsJCQkJCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNrKGQtPnhjZV9oYW5kbGUs IGQtPmxvY2FsX3BvcnRbQ09OU09MRV9UWVBFX1ZDT05dKTsKCkxpbmUgdG9vIGxvbmcuCgo+ICAJ CQkJfQo+ICAJCQkJZC0+ZXZlbnRfY291bnQgPSAwOwo+ICAJCQl9Cj4gQEAgLTEwODcsMjcgKzEy NDcsNDcgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKPiAgCQkJCSAgICBkLT5uZXh0X3BlcmlvZCA8 IG5leHRfdGltZW91dCkKPiAgCQkJCQluZXh0X3RpbWVvdXQgPSBkLT5uZXh0X3BlcmlvZDsKPiAg CQkJfSBlbHNlIGlmIChkLT54Y2VfaGFuZGxlICE9IE5VTEwpIHsKPiAtCQkJCWlmIChkaXNjYXJk X292ZXJmbG93ZWRfZGF0YSB8fAo+IC0JCQkJICAgICFkLT5idWZmZXIubWF4X2NhcGFjaXR5IHx8 Cj4gLQkJCQkgICAgZC0+YnVmZmVyLnNpemUgPCBkLT5idWZmZXIubWF4X2NhcGFjaXR5KSB7Cj4g Kwo+ICsJCQkJaWYgKGJ1ZmZlcl9hdmFpbGFibGUoZCwgQ09OU09MRV9UWVBFX1BWKSkgewo+ICsJ CQkJCWludCBldnRjaG5fZmQgPSB4ZW5ldnRjaG5fZmQoZC0+eGNlX2hhbmRsZSk7Cj4gKwkJCQkJ ZC0+eGNlX3BvbGxmZF9pZHggPSBzZXRfZmRzKGV2dGNobl9mZCwKPiArCQkJCQkJCQkJCQkJUE9M TElOfFBPTExQUkkpOwoKSW5kZW50YXRpb24uCgo+ICsJCQkJfQo+ICsKPiArCQkJCWlmIChidWZm ZXJfYXZhaWxhYmxlKGQsIENPTlNPTEVfVFlQRV9WQ09OICkgKQoKRXh0cmFuZW91cyBzcGFjZSBh ZnRlciBDT05TT0xFX1RZUEVfVkNPTi4KCj4gKwkJCQl7Cj4gIAkJCQkJaW50IGV2dGNobl9mZCA9 IHhlbmV2dGNobl9mZChkLT54Y2VfaGFuZGxlKTsKPiAgCQkJCQlkLT54Y2VfcG9sbGZkX2lkeCA9 IHNldF9mZHMoZXZ0Y2huX2ZkLAo+IC0JCQkJCQkJCSAgICBQT0xMSU58UE9MTFBSSSk7Cj4gKwkJ CQkJCQkJCQkJCVBPTExJTnxQT0xMUFJJKTsKCkluZGVudGF0aW9uLgoKPiAgCQkJCX0KPiAgCQkJ fQo+ICAKPiAtCQkJaWYgKGQtPm1hc3Rlcl9mZCAhPSAtMSkgewo+ICsJCQlpZiAoZC0+bWFzdGVy X2ZkW0NPTlNPTEVfVFlQRV9QVl0gIT0gLTEpIHsKPiAgCQkJCXNob3J0IGV2ZW50cyA9IDA7Cj4g LQkJCQlpZiAoIWQtPmlzX2RlYWQgJiYgcmluZ19mcmVlX2J5dGVzKGQpKQo+ICsJCQkJaWYgKCFk LT5pc19kZWFkICYmIHJpbmdfZnJlZV9ieXRlcyhkLCBDT05TT0xFX1RZUEVfUFYpKQo+ICAJCQkJ CWV2ZW50cyB8PSBQT0xMSU47Cj4gIAo+IC0JCQkJaWYgKCFidWZmZXJfZW1wdHkoJmQtPmJ1ZmZl cikpCj4gKwkJCQlpZiAoIWJ1ZmZlcl9lbXB0eSgmZC0+YnVmZmVyW0NPTlNPTEVfVFlQRV9QVl0p KQo+ICAJCQkJCWV2ZW50cyB8PSBQT0xMT1VUOwo+ICAKPiAgCQkJCWlmIChldmVudHMpCj4gLQkJ CQkJZC0+bWFzdGVyX3BvbGxmZF9pZHggPQo+IC0JCQkJCQlzZXRfZmRzKGQtPm1hc3Rlcl9mZCwK PiAtCQkJCQkJCWV2ZW50c3xQT0xMUFJJKTsKPiArCQkJCQlkLT5tYXN0ZXJfcG9sbGZkX2lkeFtD T05TT0xFX1RZUEVfUFZdID0KPiArCQkJCQkJc2V0X2ZkcyhkLT5tYXN0ZXJfZmRbQ09OU09MRV9U WVBFX1BWXSwKPiArCQkJCQkJCQlldmVudHN8UE9MTFBSSSk7Cj4gKwkJCX0KPiArCj4gKwkJCWlm IChkLT52Y29uX2VuYWJsZWQgJiYgZC0+bWFzdGVyX2ZkW0NPTlNPTEVfVFlQRV9WQ09OXSAhPSAt MSkgewo+ICsJCQkJc2hvcnQgZXZlbnRzID0gMDsKPiArCQkJCWlmICghZC0+aXNfZGVhZCAmJiBy aW5nX2ZyZWVfYnl0ZXMoZCwgQ09OU09MRV9UWVBFX1ZDT04pKQo+ICsJCQkJCWV2ZW50cyB8PSBQ T0xMSU47Cj4gKwo+ICsJCQkJaWYgKCFidWZmZXJfZW1wdHkoJmQtPmJ1ZmZlcltDT05TT0xFX1RZ UEVfVkNPTl0pKQo+ICsJCQkJCWV2ZW50cyB8PSBQT0xMT1VUOwo+ICsKPiArCQkJCWlmIChldmVu dHMpCj4gKwkJCQkJZC0+bWFzdGVyX3BvbGxmZF9pZHhbQ09OU09MRV9UWVBFX1ZDT05dID0KPiAr CQkJCQkJc2V0X2ZkcyhkLT5tYXN0ZXJfZmRbQ09OU09MRV9UWVBFX1ZDT05dLAo+ICsJCQkJCQkJ CWV2ZW50c3xQT0xMUFJJKTsKPiAgCQkJfQo+ICAJCX0KPiAgCj4gQEAgLTExNjYsNiArMTM0Niwx NiBAQCB2b2lkIGhhbmRsZV9pbyh2b2lkKQo+ICAKPiAgCQlmb3IgKGQgPSBkb21faGVhZDsgZDsg ZCA9IG4pIHsKPiAgCQkJbiA9IGQtPm5leHQ7Cj4gKwo+ICsJCQkvKgo+ICsJCQkgKiBDaGVjayBp ZiB0aGUgZGF0YSBwZW5kaW5nIGZsYWcgaXMgc2V0IGZvciBhbnkgb2YgdGhlIGNvbnNvbGVzLgo+ ICsJCQkgKiBJZiB5ZXMgdGhlbiBzZXJ2aWNlIHRob3NlIGZpcnN0Lgo+ICsJCQkgKi8KPiArCQkJ aWYgKCBkLT5jb25zb2xlX2RhdGFfcGVuZGluZyAmICgxPDxDT05TT0xFX1RZUEVfUFYpICkKPiAr CQkJCWJ1ZmZlcl9hcHBlbmQoZCwgQ09OU09MRV9UWVBFX1BWKTsKPiArCQkJZWxzZSBpZiAoIGQt PmNvbnNvbGVfZGF0YV9wZW5kaW5nICYgKDE8PENPTlNPTEVfVFlQRV9WQ09OKSApCj4gKwkJCQli dWZmZXJfYXBwZW5kKGQsIENPTlNPTEVfVFlQRV9WQ09OKTsKPiArCgpXaHk/IFlvdSBzZWVtIHRv IGhhdmUgc2tpcHBlZCB0aGUgcmF0ZWxpbWl0IGNoZWNrIGhlcmUuCgo+ICAJCQlpZiAoZC0+ZXZl bnRfY291bnQgPCBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgewo+ICAJCQkJaWYgKGQtPnhjZV9oYW5k bGUgIT0gTlVMTCAmJgo+ICAJCQkJICAgIGQtPnhjZV9wb2xsZmRfaWR4ICE9IC0xICYmCj4gQEAg LTExNzYsMjIgKzEzNjYsMzYgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKPiAgCQkJCSAgICBoYW5k bGVfcmluZ19yZWFkKGQpOwo+ICAJCQl9Cj4gIAo+IC0JCQlpZiAoZC0+bWFzdGVyX2ZkICE9IC0x ICYmIGQtPm1hc3Rlcl9wb2xsZmRfaWR4ICE9IC0xKSB7Cj4gLQkJCQlpZiAoZmRzW2QtPm1hc3Rl cl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKPiArCQkJaWYgKGQtPm1hc3Rlcl9mZFtDT05TT0xFX1RZ UEVfUFZdICE9IC0xICYmIGQtPm1hc3Rlcl9wb2xsZmRfaWR4W0NPTlNPTEVfVFlQRV9QVl0gIT0g LTEpIHsKPiArCQkJCWlmIChmZHNbZC0+bWFzdGVyX3BvbGxmZF9pZHhbQ09OU09MRV9UWVBFX1BW XV0ucmV2ZW50cyAmCj4gKwkJCQkgICAgfihQT0xMSU58UE9MTE9VVHxQT0xMUFJJKSkKPiArCQkJ CQlkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoZCwgZG9tYWluX2lzX3ZhbGlkKGQtPmRvbWlkKSk7 Cj4gKwkJCQllbHNlIHsKPiArCQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4W0NPTlNP TEVfVFlQRV9QVl1dLnJldmVudHMgJgo+ICsJCQkJCSAgICBQT0xMSU4pCj4gKwkJCQkJCWhhbmRs ZV90dHlfcmVhZChkLCBDT05TT0xFX1RZUEVfUFYpOwo+ICsJCQkJCWlmIChmZHNbZC0+bWFzdGVy X3BvbGxmZF9pZHhbQ09OU09MRV9UWVBFX1BWXV0ucmV2ZW50cyAmCj4gKwkJCQkJICAgIFBPTExP VVQpCj4gKwkJCQkJCWhhbmRsZV90dHlfd3JpdGUoZCwgQ09OU09MRV9UWVBFX1BWKTsKPiArCQkJ CX0KPiArCQkJfQo+ICsKPiArCQkJaWYgKGQtPm1hc3Rlcl9mZFtDT05TT0xFX1RZUEVfVkNPTl0g IT0gLTEgJiYgZC0+bWFzdGVyX3BvbGxmZF9pZHhbQ09OU09MRV9UWVBFX1ZDT05dICE9IC0xKSB7 Cj4gKwkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4W0NPTlNPTEVfVFlQRV9WQ09OXV0u cmV2ZW50cyAmCj4gIAkJCQkgICAgfihQT0xMSU58UE9MTE9VVHxQT0xMUFJJKSkKPiAtCQkJCQlk b21haW5faGFuZGxlX2Jyb2tlbl90dHkoZCwKPiAtCQkJCQkJICAgZG9tYWluX2lzX3ZhbGlkKGQt PmRvbWlkKSk7Cj4gKwkJCQkJZG9tYWluX2hhbmRsZV9icm9rZW5fdHR5KGQsIGRvbWFpbl9pc192 YWxpZChkLT5kb21pZCkpOwo+ICAJCQkJZWxzZSB7Cj4gLQkJCQkJaWYgKGZkc1tkLT5tYXN0ZXJf cG9sbGZkX2lkeF0ucmV2ZW50cyAmCj4gKwkJCQkJaWYgKGZkc1tkLT5tYXN0ZXJfcG9sbGZkX2lk eFtDT05TT0xFX1RZUEVfVkNPTl1dLnJldmVudHMgJgo+ICAJCQkJCSAgICBQT0xMSU4pCj4gLQkJ CQkJCWhhbmRsZV90dHlfcmVhZChkKTsKPiAtCQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRf aWR4XS5yZXZlbnRzICYKPiArCQkJCQkJaGFuZGxlX3R0eV9yZWFkKGQsIENPTlNPTEVfVFlQRV9W Q09OKTsKPiArCQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4W0NPTlNPTEVfVFlQRV9W Q09OXV0ucmV2ZW50cyAmCj4gIAkJCQkJICAgIFBPTExPVVQpCj4gLQkJCQkJCWhhbmRsZV90dHlf d3JpdGUoZCk7Cj4gKwkJCQkJCWhhbmRsZV90dHlfd3JpdGUoZCwgQ09OU09MRV9UWVBFX1ZDT04p Owo+ICAJCQkJfQo+ICAJCQl9Cj4gIAo+IC0JCQlkLT54Y2VfcG9sbGZkX2lkeCA9IGQtPm1hc3Rl cl9wb2xsZmRfaWR4ID0gLTE7Cj4gKwkJCWQtPnhjZV9wb2xsZmRfaWR4ID0gZC0+bWFzdGVyX3Bv bGxmZF9pZHhbQ09OU09MRV9UWVBFX1BWXSA9Cj4gKwkJCQkJCQkJCWQtPm1hc3Rlcl9wb2xsZmRf aWR4W0NPTlNPTEVfVFlQRV9WQ09OXSA9IC0xOwo+ICAKCkluZGVudGF0aW9uIGFuZCBsaW5lIHRv byBsb25nLgoKPiAgCQkJaWYgKGQtPmxhc3Rfc2VlbiAhPSBlbnVtX3Bhc3MpCj4gIAkJCQlzaHV0 ZG93bl9kb21haW4oZCk7Cj4gLS0gCj4gMi43LjQKPiAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=