From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from [59.151.112.132] (helo=heian.cn.fujitsu.com) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1aY43S-0006YJ-Vj for kexec@lists.infradead.org; Tue, 23 Feb 2016 03:54:34 +0000 Message-ID: <56CBD78B.5010905@cn.fujitsu.com> Date: Tue, 23 Feb 2016 11:52:43 +0800 From: =?UTF-8?B?Ilpob3UsIFdlbmppYW4v5ZGo5paH5YmRIg==?= MIME-Version: 1.0 Subject: Re: [PATCH v1] Improve the performance of --num-threads -d 31 References: <1454307740-2761-1-git-send-email-zhouwj-fnst@cn.fujitsu.com> <56C134C1.7050005@cn.fujitsu.com> In-Reply-To: List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: Minoru Usui , "kexec@lists.infradead.org" T24gMDIvMjMvMjAxNiAxMDoxNiBBTSwgTWlub3J1IFVzdWkgd3JvdGU6Cj4gSGVsbG8gWmhvdQo+ Cj4gSSdtIHNvcnJ5IGZvciBsYXRlIHJlcGx5LCB0b28uCj4KPj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0KPj4gRnJvbTogIlpob3UsIFdlbmppYW4v5ZGo5paH5YmRIiBbbWFpbHRvOnpob3V3 ai1mbnN0QGNuLmZ1aml0c3UuY29tXQo+PiBTZW50OiBNb25kYXksIEZlYnJ1YXJ5IDE1LCAyMDE2 IDExOjE1IEFNCj4+IFRvOiBVc3VpIE1pbm9ydSjnopPkupUg5oiQKSA8bWluLXVzdWlAdGkuanAu bmVjLmNvbT47IGtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4gU3ViamVjdDogUmU6IFtQQVRD SCB2MV0gSW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgLS1udW0tdGhyZWFkcyAtZCAzMQo+Pgo+ PiBIZWxsbyBVc3VpLAo+Pgo+PiBUaGFua3MgdmVyeSBtdWNoIGZvciB5b3VyIGNvbW1lbnRzLgo+ PiBBbmQgc29ycnkgZm9yIHRoZSBsYXRlIHJlcGx5Lgo+Pgo+PiBTZWUgYmVsb3cuCj4+Cj4+IE9u IDAyLzA4LzIwMTYgMDE6MDAgUE0sIE1pbm9ydSBVc3VpIHdyb3RlOgo+Pj4gSGVsbG8sCj4+Pgo+ Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4gRnJvbToga2V4ZWMgW21haWx0bzpr ZXhlYy1ib3VuY2VzQGxpc3RzLmluZnJhZGVhZC5vcmddIE9uIEJlaGFsZiBPZiBNaW5vcnUgVXN1 aQo+Pj4+IFNlbnQ6IFRodXJzZGF5LCBGZWJydWFyeSAwNCwgMjAxNiA4OjUyIEFNCj4+Pj4gVG86 IFpob3UgV2VuamlhbiA8emhvdXdqLWZuc3RAY24uZnVqaXRzdS5jb20+OyBrZXhlY0BsaXN0cy5p bmZyYWRlYWQub3JnCj4+Pj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MV0gSW1wcm92ZSB0aGUgcGVy Zm9ybWFuY2Ugb2YgLS1udW0tdGhyZWFkcyAtZCAzMQo+Pj4+Cj4+Pj4gSGksIFpob3UKPj4+Pgo+ Pj4+IEkgaGF2ZSBzb21lIGNvbW1lbnRzLgo+Pj4+IEknbSBzb3JyeSBpZiBJIGhhdmUgbWlzdW5k ZXJzdG9vZCB5b3VyIGNvZGUuCj4+Pj4KPj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0K Pj4+Pj4gRnJvbToga2V4ZWMgW21haWx0bzprZXhlYy1ib3VuY2VzQGxpc3RzLmluZnJhZGVhZC5v cmddIE9uIEJlaGFsZiBPZiBaaG91IFdlbmppYW4KPj4+Pj4gU2VudDogTW9uZGF5LCBGZWJydWFy eSAwMSwgMjAxNiAzOjIyIFBNCj4+Pj4+IFRvOiBrZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCj4+ Pj4+IFN1YmplY3Q6IFtQQVRDSCB2MV0gSW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgLS1udW0t dGhyZWFkcyAtZCAzMQo+Pj4+Pgo+Pj4+PiB2MToKPj4+Pj4gICAgICAgICAgIDEuIGNoYW5nZSBw YWdlX2ZsYWcucmVhZHkncyB2YWx1ZSB0byBlbnVtCj4+Pj4+ICAgICAgICAgICAyLiBjaGFuZ2Ug dGhlIHBhdGNoIGRlc2NyaXB0aW9uCj4+Pj4+ICAgICAgICAgICAzLiBjbGVhbnVwIHNvbWUgY29k ZXMKPj4+Pj4gCTQuIGZpeCBhIGJ1ZyBpbiBjeWNsaWMgbW9kZQo+Pj4+Pgo+Pj4+PiBtdWx0aS10 aHJlYWRzIGltcGxlbWVudGF0aW9uIHdpbGwgaW50cm9kdWNlIGV4dHJhIGNvc3Qgd2hlbiBoYW5k bGluZwo+Pj4+PiBlYWNoIHBhZ2UuIFRoZSBvcmlnaW4gaW1wbGVtZW50YXRpb24gd2lsbCBhbHNv IGRvIHRoZSBleHRyYSB3b3JrIGZvcgo+Pj4+PiBmaWx0ZXJlZCBwYWdlcy4gU28gdGhlcmUgaXMg YSBiaWcgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4KPj4+Pj4gLS1udW0tdGhyZWFkcyAtZCAz MS4KPj4+Pj4gVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiB3b24ndCBkbyB0aGUgZXh0cmEgd29yayBm b3IgZmlsdGVyZWQgcGFnZXMgYW55Cj4+Pj4+IG1vcmUuIFNvIHRoZSBwZXJmb3JtYW5jZSBvZiAt ZCAzMSBpcyBjbG9zZSB0byB0aGF0IG9mIHNlcmlhbCBwcm9jZXNzaW5nLgo+Pj4+Pgo+Pj4+PiBU aGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIGp1c3QgbGlrZSB0aGUgZm9sbG93aW5nOgo+Pj4+PiAg ICAgICAgICAgKiBUaGUgYmFzaWMgaWRlYSBpcyBwcm9kdWNlciBwcm9kdWNpbmcgcGFnZSBhbmQg Y29uc3VtZXIgd3JpdGluZyBwYWdlLgo+Pj4+PiAgICAgICAgICAgKiBFYWNoIHByb2R1Y2VyIGhh dmUgYSBwYWdlX2ZsYWdfYnVmIGxpc3Qgd2hpY2ggaXMgdXNlZCBmb3Igc3RvcmluZwo+Pj4+PiAg ICAgICAgICAgICBwYWdlJ3MgZGVzY3JpcHRpb24uCj4+Pj4+ICAgICAgICAgICAqIFRoZSBzaXpl IG9mIHBhZ2VfZmxhZ19idWYgaXMgbGl0dGxlIHNvIGl0IHdvbid0IHRha2UgdG9vIG11Y2ggbWVt b3J5Lgo+Pj4+PiAgICAgICAgICAgKiBBbmQgYWxsIHByb2R1Y2VycyB3aWxsIHNoYXJlIGEgcGFn ZV9kYXRhX2J1ZiBhcnJheSB3aGljaCBpcwo+Pj4+PiAgICAgICAgICAgICB1c2VkIGZvciBzdG9y aW5nIHBhZ2UncyBjb21wcmVzc2VkIGRhdGEuCj4+Pj4+ICAgICAgICAgICAqIFRoZSBtYWluIHRo cmVhZCBpcyB0aGUgY29uc3VtZXIuIEl0IHdpbGwgZmluZCB0aGUgbmV4dCBwZm4gYW5kIHdyaXRl Cj4+Pj4+ICAgICAgICAgICAgIGl0IGludG8gZmlsZS4KPj4+Pj4gICAgICAgICAgICogVGhlIG5l eHQgcGZuIGlzIHNtYWxsZXN0IHBmbiBpbiBhbGwgcGFnZV9mbGFnX2J1Zi4KPj4+Pj4KPj4+Pj4g U2lnbmVkLW9mZi1ieTogWmhvdSBXZW5qaWFuIDx6aG91d2otZm5zdEBjbi5mdWppdHN1LmNvbT4K Pj4+Pj4gLS0tCj4+Pj4+ICAgIG1ha2VkdW1wZmlsZS5jIHwgMjU4ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+PiAgICBtYWtlZHVt cGZpbGUuaCB8ICAzMSArKysrLS0tCj4+Pj4+ICAgIDIgZmlsZXMgY2hhbmdlZCwgMTkzIGluc2Vy dGlvbnMoKyksIDk2IGRlbGV0aW9ucygtKQo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvbWFrZWR1 bXBmaWxlLmMgYi9tYWtlZHVtcGZpbGUuYwo+Pj4+PiBpbmRleCBmYTBiNzc5Li4wZWNkMDY1IDEw MDY0NAo+Pj4+PiAtLS0gYS9tYWtlZHVtcGZpbGUuYwo+Pj4+PiArKysgYi9tYWtlZHVtcGZpbGUu Ywo+Pj4+PiBAQCAtMzQ4Myw3ICszNDgzLDggQEAgaW5pdGlhbF9mb3JfcGFyYWxsZWwoKQo+Pj4+ PiAgICAJdW5zaWduZWQgbG9uZyBwYWdlX2RhdGFfYnVmX3NpemU7Cj4+Pj4+ICAgIAl1bnNpZ25l ZCBsb25nIGxpbWl0X3NpemU7Cj4+Pj4+ICAgIAlpbnQgcGFnZV9kYXRhX251bTsKPj4+Pj4gLQlp bnQgaTsKPj4+Pj4gKwlzdHJ1Y3QgcGFnZV9mbGFnICpjdXJyZW50Owo+Pj4+PiArCWludCBpLCBq Owo+Pj4+Pgo+Pj4+PiAgICAJbGVuX2J1Zl9vdXQgPSBjYWxjdWxhdGVfbGVuX2J1Zl9vdXQoaW5m by0+cGFnZV9zaXplKTsKPj4+Pj4KPj4+Pj4gQEAgLTM1NjIsOCArMzU2MywxMCBAQCBpbml0aWFs X2Zvcl9wYXJhbGxlbCgpCj4+Pj4+ICAgIAkJICAgICAgLSBNQVBfUkVHSU9OICogaW5mby0+bnVt X3RocmVhZHMpICogMC42Owo+Pj4+Pgo+Pj4+PiAgICAJcGFnZV9kYXRhX251bSA9IGxpbWl0X3Np emUgLyBwYWdlX2RhdGFfYnVmX3NpemU7Cj4+Pj4+ICsJaW5mby0+bnVtX2J1ZmZlcnMgPSAzICog aW5mby0+bnVtX3RocmVhZHM7Cj4+Pj4+Cj4+Pj4+IC0JaW5mby0+bnVtX2J1ZmZlcnMgPSBNSU4o TlVNX0JVRkZFUlMsIHBhZ2VfZGF0YV9udW0pOwo+Pj4+PiArCWluZm8tPm51bV9idWZmZXJzID0g TUFYKGluZm8tPm51bV9idWZmZXJzLCBOVU1fQlVGRkVSUyk7Cj4+Pj4+ICsJaW5mby0+bnVtX2J1 ZmZlcnMgPSBNSU4oaW5mby0+bnVtX2J1ZmZlcnMsIHBhZ2VfZGF0YV9udW0pOwo+Pj4+Pgo+Pj4+ PiAgICAJREVCVUdfTVNHKCJOdW1iZXIgb2Ygc3RydWN0IHBhZ2VfZGF0YSBmb3IgcHJvZHVjZS9j b25zdW1lOiAlZFxuIiwKPj4+Pj4gICAgCQkJaW5mby0+bnVtX2J1ZmZlcnMpOwo+Pj4+PiBAQCAt MzU4OCw2ICszNTkxLDM2IEBAIGluaXRpYWxfZm9yX3BhcmFsbGVsKCkKPj4+Pj4gICAgCX0KPj4+ Pj4KPj4+Pj4gICAgCS8qCj4+Pj4+ICsJICogaW5pdGlhbCBwYWdlX2ZsYWcgZm9yIGVhY2ggdGhy ZWFkCj4+Pj4+ICsJICovCj4+Pj4+ICsJaWYgKChpbmZvLT5wYWdlX2ZsYWdfYnVmID0gbWFsbG9j KHNpemVvZih2b2lkICopICogaW5mby0+bnVtX3RocmVhZHMpKQo+Pj4+PiArCSAgICA9PSBOVUxM KSB7Cj4+Pj4+ICsJCU1TRygiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwYWdlX2ZsYWdfYnVm LiAlc1xuIiwKPj4+Pj4gKwkJCQlzdHJlcnJvcihlcnJubykpOwo+Pj4+PiArCQlyZXR1cm4gRkFM U0U7Cj4+Pj4+ICsJfQo+Pj4+PiArCW1lbXNldChpbmZvLT5wYWdlX2ZsYWdfYnVmLCAwLCBzaXpl b2Yodm9pZCAqKSAqIGluZm8tPm51bV90aHJlYWRzKTsKPj4+Pj4gKwo+Pj4+PiArCWZvciAoaSA9 IDA7IGkgPCBpbmZvLT5udW1fdGhyZWFkczsgaSsrKSB7Cj4+Pj4+ICsJCWlmICgoaW5mby0+cGFn ZV9mbGFnX2J1ZltpXSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2VfZmxhZykpKSA9PSBOVUxM KSB7Cj4+Pj4KPj4+PiBGaXN0IGVsZW1lbnQgb2Ygc3RydWN0IHBhZ2VfZmxhZyBpbiBjaXJjdWxh ciBsaXN0IGlzIGFsbG9jYXRlZCBieSBtYWxsb2MoKSwKPj4+PiBidXQgb3RoZXIgZWxlbWVudHMg YXJlIGFsbG9jYXRlZCBieSBjYWxsb2MoKS4oc2VlIGJlbG93KQo+Pj4+IEkgdGhpbmsgYm90aCBl bGVtZW50cyBzaG91bGQgYmUgYWxsb2NhdGVkIGJ5IGNhbGxvYygpLgo+Pj4+Cj4+Cj4+IFllcywg eW91IGFyZSByaWdodC4KPj4gSSBoYXZlIG1hZGUgYSBtaXN0YWtlLgo+Pgo+Pj4+PiArCQkJTVNH KCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBhZ2VfZmxhZ19idWYuICVzXG4iLAo+Pj4+PiAr CQkJCXN0cmVycm9yKGVycm5vKSk7Cj4+Pj4+ICsJCQlyZXR1cm4gRkFMU0U7Cj4+Pj4+ICsJCX0K Pj4+Pj4gKwkJY3VycmVudCA9IGluZm8tPnBhZ2VfZmxhZ19idWZbaV07Cj4+Pj4+ICsKPj4+Pj4g KwkJZm9yIChqID0gMTsgaiA8IE5VTV9CVUZGRVJTOyBqKyspIHsKPj4+Pj4gKwkJCWlmICgoY3Vy cmVudC0+bmV4dCA9IGNhbGxvYygwLCBzaXplb2Yoc3RydWN0IHBhZ2VfZmxhZykpKSA9PSBOVUxM KSB7Cj4+Pj4+ICsJCQkJTVNHKCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgb2YgcGFn ZV9kYXRhX2J1Zi4gJXNcbiIsCj4+Pj4+ICsJCQkJCXN0cmVycm9yKGVycm5vKSk7Cj4+Pj4+ICsJ CQkJcmV0dXJuIEZBTFNFOwo+Pj4+PiArCQkJfQo+Pj4+Cj4+Pj4KPj4+PiBGaXJzdCBhcmd1bWVu dCBvZiBjYWxsb2MoKSBzaG91bGQgYmUgMSwgbm90IDAuCj4+Pj4gQW5kIHRoZXJlIGlzIHR5cG8g aW4gZXJyb3IgbWVzc2FnZS4KPj4+PiBBbGxvY2F0ZWQgZWxlbWVudCBpcyBub3QgcGFnZV9kYXRh X2J1Zi4KPj4+Pgo+Pgo+PiBJIGFncmVlLgo+Pgo+Pj4+PiArCQkJY3VycmVudCA9IGN1cnJlbnQt Pm5leHQ7Cj4+Pj4+ICsJCX0KPj4+Pj4gKwkJY3VycmVudC0+bmV4dCA9IGluZm8tPnBhZ2VfZmxh Z19idWZbaV07Cj4+Pj4+ICsJfQo+Pj4+PiArCj4+Pj4+ICsJLyoKPj4+Pj4gICAgCSAqIGluaXRp YWwgZmRfbWVtb3J5IGZvciB0aHJlYWRzCj4+Pj4+ICAgIAkgKi8KPj4+Pj4gICAgCWZvciAoaSA9 IDA7IGkgPCBpbmZvLT5udW1fdGhyZWFkczsgaSsrKSB7Cj4+Pj4+IEBAIC0zNjEyLDcgKzM2NDUs OCBAQCBpbml0aWFsX2Zvcl9wYXJhbGxlbCgpCj4+Pj4+ICAgIHZvaWQKPj4+Pj4gICAgZnJlZV9m b3JfcGFyYWxsZWwoKQo+Pj4+PiAgICB7Cj4+Pj4+IC0JaW50IGk7Cj4+Pj4+ICsJaW50IGksIGo7 Cj4+Pj4+ICsJc3RydWN0IHBhZ2VfZmxhZyAqY3VycmVudDsKPj4+Pj4KPj4+Pj4gICAgCWlmIChp bmZvLT50aHJlYWRzICE9IE5VTEwpIHsKPj4+Pj4gICAgCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ bnVtX3RocmVhZHM7IGkrKykgewo+Pj4+PiBAQCAtMzY1NSw2ICszNjg5LDE5IEBAIGZyZWVfZm9y X3BhcmFsbGVsKCkKPj4+Pj4gICAgCQlmcmVlKGluZm8tPnBhZ2VfZGF0YV9idWYpOwo+Pj4+PiAg ICAJfQo+Pj4+Pgo+Pj4+PiArCWlmIChpbmZvLT5wYWdlX2ZsYWdfYnVmICE9IE5VTEwpIHsKPj4+ Pj4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV90aHJlYWRzOyBpKyspIHsKPj4+Pj4gKwkJ CWZvciAoaiA9IDA7IGogPCBOVU1fQlVGRkVSUzsgaisrKSB7Cj4+Pj4+ICsJCQkJaWYgKGluZm8t PnBhZ2VfZmxhZ19idWZbaV0gIT0gTlVMTCkgewo+Pj4+PiArCQkJCQljdXJyZW50ID0gaW5mby0+ cGFnZV9mbGFnX2J1ZltpXTsKPj4+Pj4gKwkJCQkJaW5mby0+cGFnZV9mbGFnX2J1ZltpXSA9IGN1 cnJlbnQtPm5leHQ7Cj4+Pj4+ICsJCQkJCWZyZWUoY3VycmVudCk7Cj4+Pj4+ICsJCQkJfQo+Pj4+ PiArCQkJfQo+Pj4+PiArCQl9Cj4+Pj4+ICsJCWZyZWUoaW5mby0+cGFnZV9mbGFnX2J1Zik7Cj4+ Pj4+ICsJfQo+Pj4+PiArCj4+Pj4+ICAgIAlpZiAoaW5mby0+cGFyYWxsZWxfaW5mbyA9PSBOVUxM KQo+Pj4+PiAgICAJCXJldHVybjsKPj4+Pj4KPj4+Pj4gQEAgLTcwNzYsMTAgKzcxMjMsMTAgQEAg a2R1bXBfdGhyZWFkX2Z1bmN0aW9uX2N5Y2xpYyh2b2lkICphcmcpIHsKPj4+Pj4gICAgCXZvaWQg KnJldHZhbCA9IFBUSFJFQURfRkFJTDsKPj4+Pj4gICAgCXN0cnVjdCB0aHJlYWRfYXJncyAqa2R1 bXBfdGhyZWFkX2FyZ3MgPSAoc3RydWN0IHRocmVhZF9hcmdzICopYXJnOwo+Pj4+PiAgICAJc3Ry dWN0IHBhZ2VfZGF0YSAqcGFnZV9kYXRhX2J1ZiA9IGtkdW1wX3RocmVhZF9hcmdzLT5wYWdlX2Rh dGFfYnVmOwo+Pj4+PiArCXN0cnVjdCBwYWdlX2ZsYWcgKnBhZ2VfZmxhZ19idWYgPSBrZHVtcF90 aHJlYWRfYXJncy0+cGFnZV9mbGFnX2J1ZjsKPj4+Pj4gICAgCXN0cnVjdCBjeWNsZSAqY3ljbGUg PSBrZHVtcF90aHJlYWRfYXJncy0+Y3ljbGU7Cj4+Pj4+IC0JaW50IHBhZ2VfZGF0YV9udW0gPSBr ZHVtcF90aHJlYWRfYXJncy0+cGFnZV9kYXRhX251bTsKPj4+Pj4gICAgCW1kZl9wZm5fdCBwZm47 Cj4+Pj4+IC0JaW50IGluZGV4Owo+Pj4+PiArCWludCBpbmRleCA9IGtkdW1wX3RocmVhZF9hcmdz LT50aHJlYWRfbnVtOwo+Pj4+PiAgICAJaW50IGJ1Zl9yZWFkeTsKPj4+Pj4gICAgCWludCBkdW1w YWJsZTsKPj4+Pj4gICAgCWludCBmZF9tZW1vcnkgPSAwOwo+Pj4+PiBAQCAtNzEyNSw0NyArNzE3 Miw0NyBAQCBrZHVtcF90aHJlYWRfZnVuY3Rpb25fY3ljbGljKHZvaWQgKmFyZykgewo+Pj4+PiAg ICAJCQkJCQlrZHVtcF90aHJlYWRfYXJncy0+dGhyZWFkX251bSk7Cj4+Pj4+ICAgIAl9Cj4+Pj4+ Cj4+Pj4+IC0Jd2hpbGUgKDEpIHsKPj4+Pj4gLQkJLyogZ2V0IG5leHQgcGZuICovCj4+Pj4+IC0J CXB0aHJlYWRfbXV0ZXhfbG9jaygmaW5mby0+Y3VycmVudF9wZm5fbXV0ZXgpOwo+Pj4+PiAtCQlw Zm4gPSBpbmZvLT5jdXJyZW50X3BmbjsKPj4+Pj4gLQkJaW5mby0+Y3VycmVudF9wZm4rKzsKPj4+ Pj4gLQkJcHRocmVhZF9tdXRleF91bmxvY2soJmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+ Pj4gKwkvKgo+Pj4+PiArCSAqIGZpbHRlcmVkIHBhZ2Ugd29uJ3QgdGFrZSBhbnl0aGluZwo+Pj4+ PiArCSAqIHVuZmlsdGVyZWQgemVybyBwYWdlIHdpbGwgb25seSB0YWtlIGEgcGFnZV9mbGFnX2J1 Zgo+Pj4+PiArCSAqIHVuZmlsdGVyZWQgbm9uLXplcm8gcGFnZSB3aWxsIHRha2UgYSBwYWdlX2Zs YWdfYnVmIGFuZCBhIHBhZ2VfZGF0YV9idWYKPj4+Pj4gKwkgKi8KPj4+Pj4gKwl3aGlsZSAocGFn ZV9mbGFnX2J1Zi0+cGZuIDwga2R1bXBfdGhyZWFkX2FyZ3MtPmVuZF9wZm4pIHsKPj4+Pgo+Pj4+ IEF0IGZpcnN0LCBwYWdlX2ZsYWdfYnVmLT5wZm4gaXMgbm90IGluaXRpYWxpemVkLgo+Pj4+IEkg dGhpbmsgdGhpcyBibG9jayBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNv ZGUuCj4+Pj4KPj4+PiA9PT0KPj4+PiAgICAgZG8gewo+Pj4+ICAgICAgIDoKPj4+PiAgICAgfSB3 aGlsZShwYWdlX2ZsYWdfYnVmLT5wZm4gPCBrZHVtcF90aHJlYWRfYXJncy0+ZW5kX3BmbikKPj4+ PiA9PT0KPj4+Cj4+PiBJJ20gc29ycnksIGFib3ZlIHN1Z2dlc3Rpb24gaXMgbWVhbmluZ2xlc3Mg aW4gdGVybXMgb2YgcGFnZV9mbGFnX2J1Zi0+cGZuIGlzIHVuaW5pdGlhbGl6ZWQuCj4+PiBJdCBz aG91bGQgYmUgcmVwbGFjZWQgbGlrZSBmb2xsb3dpbmcuCj4+Pgo+Pj4gPT09Cj4+PiAgICAgd2hp bGUgKDEpIHsKPj4+ICAgICAgIDoKPj4+ICAgICAgIHdoaWxlIChidWZfcmVhZHkgPT0gRkFMU0Up IHsKPj4+ICAgICAgICAgIDoKPj4+ICAgICAgICAgaWYgKHBmbiA+PSBrZHVtcF90aHJlYWRfYXJn cy0+ZW5kX3Bmbikgewo+Pj4gICAgICAgICAgICA6Cj4+PiAgICAgICAgICAgZ290byBmaW5pc2g7 Cj4+PiAgICAgICAgIH0KPj4+ICAgICAgICAgOgo+Pj4gICAgICAgfQo+Pj4gICAgICAgOgo+Pj4g ICAgIH0KPj4+IGZpbmlzaDoKPj4+ID09PQo+Pj4KPj4KPj4gcGFnZV9mbGFnX2J1ZiBpcyBhbGxv Y2F0ZWQgYnkgY2FsbG9jKCkuCj4+IFRoZSBwYWdlX2ZsYWdfYnVmLT5wZm4ncyB2YWx1ZSBpcyAw Lgo+PiBTbyBJIHRoaW5rIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gbW9kaWZ5IHRoZSBjb2RlLgo+ Pgo+Pj4gVGhhbmtzLAo+Pj4gTWlub3J1IFVzdWkKPj4+Cj4+Pgo+Pj4+PiArCQlidWZfcmVhZHkg PSBGQUxTRTsKPj4+Pj4KPj4+Pj4gLQkJaWYgKHBmbiA+PSBrZHVtcF90aHJlYWRfYXJncy0+ZW5k X3BmbikKPj4+Pj4gLQkJCWJyZWFrOwo+Pj4+PiArCQl3aGlsZSAocGFnZV9kYXRhX2J1ZltpbmRl eF0udXNlZCAhPSAwIHx8Cj4+Pj4+ICsJCQkJcHRocmVhZF9tdXRleF90cnlsb2NrKCZwYWdlX2Rh dGFfYnVmW2luZGV4XS5tdXRleCkgIT0gMCkKPj4+Pj4gKwkJCWluZGV4ID0gKGluZGV4ICsgMSkg JSBpbmZvLT5udW1fYnVmZmVyczsKPj4+Pj4KPj4+Pj4gLQkJaW5kZXggPSAtMTsKPj4+Pj4gLQkJ YnVmX3JlYWR5ID0gRkFMU0U7Cj4+Pj4+ICsJCXBhZ2VfZGF0YV9idWZbaW5kZXhdLnVzZWQgPSAx Owo+Pj4+Cj4+Pj4gIjEiIGlzIGEgbWFnaWMgbnVtYmVyLgo+Pj4+IEl0IHNob3VsZCBiZSBjaGFu Z2VkIFRSVUUgb3IgRkFMU0UuCj4+Pj4KPj4KPj4gSSBzZWUuCj4+Cj4+Pj4+ICAgIAkJd2hpbGUg KGJ1Zl9yZWFkeSA9PSBGQUxTRSkgewo+Pj4+PiAgICAJCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsK Pj4+Pj4gLQo+Pj4+PiAtCQkJaW5kZXggPSBwZm4gJSBwYWdlX2RhdGFfbnVtOwo+Pj4+PiAtCj4+ Pj4+IC0JCQlpZiAocGZuIC0gaW5mby0+Y29uc3VtZWRfcGZuID4gaW5mby0+bnVtX2J1ZmZlcnMp Cj4+Pj4+ICsJCQlpZiAocGFnZV9mbGFnX2J1Zi0+cmVhZHkgPT0gRkxBR19SRUFEWSkKPj4+Pj4g ICAgCQkJCWNvbnRpbnVlOwo+Pj4+Cj4+Pj4gQXQgZmlyc3QsIHBhZ2VfZmxhZ19idWYtPnJlYWR5 IGlzIHVuaW5pdGlhbGl6ZWQsIHRvby4KPj4+PiBTaG91bGQgaXQgYmUgaW5pdGlhbGl6ZWQgaW4g aGVhZCBwYXJ0IG9mIHRoaXMgZnVuY3Rpb24sIGV2ZW4gaWYgRkxBR19VTlVTRUQgaXMgZGVmaW5l ZCAwPwo+Pj4+Cj4+Pj4KPj4KPj4gVGhlIHNhbWUgdG9waWMgYXMgdGhlIHBhZ2VfZmxhZ19idWYg aXMgYWxsb2NhdGVkIGJ5IGNhbGxvYygpLgo+Pgo+Pj4+Pgo+Pj4+PiAtCQkJaWYgKHBhZ2VfZGF0 YV9idWZbaW5kZXhdLnJlYWR5ICE9IDApCj4+Pj4+IC0JCQkJY29udGludWU7Cj4+Pj4+IC0KPj4+ Pj4gLQkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcGFnZV9kYXRhX2J1ZltpbmRleF0ubXV0ZXgpOwo+ Pj4+PiArCQkJLyogZ2V0IG5leHQgcGZuICovCj4+Pj4+ICsJCQlwdGhyZWFkX211dGV4X2xvY2so JmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+Pj4gKwkJCXBmbiA9IGluZm8tPmN1cnJlbnRf cGZuOwo+Pj4+PiArCQkJaW5mby0+Y3VycmVudF9wZm4rKzsKPj4+Pj4gKwkJCXBhZ2VfZmxhZ19i dWYtPnJlYWR5ID0gRkxBR19GSUxMSU5HOwo+Pj4+PiArCQkJcHRocmVhZF9tdXRleF91bmxvY2so JmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+Pj4KPj4+Pj4gLQkJCWlmIChwYWdlX2RhdGFf YnVmW2luZGV4XS5yZWFkeSAhPSAwKQo+Pj4+PiAtCQkJCWdvdG8gdW5sb2NrOwo+Pj4+PiArCQkJ cGFnZV9mbGFnX2J1Zi0+cGZuID0gcGZuOwo+Pj4+Cj4+Pj4gSXQgc2V0IEZMQUdfRklMTElORyB0 byBwYWdlX2ZsYWdfYnVmLT5yZWFkeSBiZWZvcmUgc2V0dGluZyBwZm4gdG8gcGFnZV9mbGFnX2J1 Zi0+cGZuLgo+Pj4+IEJ1dCBjb25zdW1lciBnZXRzIHBhZ2VfZmxhZ19idWYtPnBmbiBhZnRlciBj aGVja2luZyBwYWdlX2ZsYWdfYnVmLT5yZWFkeSAhPSBGTEFHX1VOVVNFRAo+Pj4+IGluIGdldHRp bmcgbWluaW11bSBwZm4gb2YgZWFjaCB0aHJlYWQgYmxvY2suCj4+Pj4gU2hvdWxkIGl0IHNldCBw YWdlX2ZsYWdfYnVmLT5wZm4gZmlyc3Q/Cj4+Pj4KPj4KPj4gSGF2ZSB5b3Ugbm90aWNlZCB0aGUg Zm9sbG93aW5nIGNvZGUgaW4gdGhlIGNvbnN1bWVyPwo+PiA8Y3V0Pgo+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChjdXJyZW50X3BmbiA9PSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1 bWluZ10tPnBmbikKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ PiA8Y3V0Pgo+Cj4gTm8sIEkgcG9pbnRlZCBmb2xsb3dpbmcgY29kZS4KPiBUaGlzIHBhcnQgYWNj ZXNzZXMgaW5mby0+cGFnZV9mbGFnX2J1ZltpXS0+cmVhZHksIHRoZW4gaXQgYWNjZXNzZXMgaW5m by0+cGFnZV9mbGFnX2J1ZltpXS0+cGZuIGltbWVkaWF0ZWx5Lgo+IFNvLCB0ZW1wX3BmbiBtYXkg YmUgd3JvbmcgcGZuIGF0IHRoaXMgbW9tZW50Lgo+Cj4gLS0tCj4gICAgICAgICAgICAgICAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fdGhyZWFkczsgaSsrKSB7Cj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8tPnBhZ2VfZmxhZ19idWZbaV0tPnJl YWR5ID09IEZMQUdfVU5VU0VEKQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9w Zm4gPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldLT5wZm47Cj4gLS0tCj4KPj4gVGhlIGNvbnN1bWVy IHdpbGwgY2hlY2sgaWYgdGhlIHBmbiBpcyBjaGFuZ2VkIGFmdGVyIHRoZSBwYWdlX2ZsYWdfYnVm LT5yZWFkeSB0dXJucyB0byBiZSBGTEFHX1JFQURZLgo+PiBTbyBpdCdzIG5vdCBpbXBvcnRhbnQg d2hldGhlciBzZXR0aW5nIHBhZ2VfZmxhZ19idWYtPnBmbiBmaXJzdCBvciBub3QuCj4KPiBBcyB5 b3Ugc2FpZCwgY29uc3VtZXIgY2hlY2tzIHBmbiB3aGljaCBpcyBjaGFuZ2VkLgo+IFNvIGl0IHdv cmtzIHdlbGwuCj4KPj4gSW4gdGhlIG90aGVyIGhhbmQsIGV2ZW4gc2V0dGluZyBwYWdlX2ZsYWdf YnVmLT5wZm4gZmlyc3QsIGlmIHRoZSBwZm4gaXMgbm90IGR1bXBhYmxlLCB0aGUgcHJvZHVjZXIK Pj4gd2lsbCBhbHNvIHJlc2V0IHRoZSBwYWdlX2ZsYWdfYnVmLT5wZm4uCj4KPiBUaGFuayB5b3Ug Zm9yIHlvdXIgZXhwbGFuYXRpb24uCj4gSSBkaWRuJ3Qgbm90aWNlIHRoYXQgcGZuIGNhbiBiZSB1 bmR1bXBhYmxlLgo+Cj4+Pj4+Cj4+Pj4+IC0JCQlidWZfcmVhZHkgPSBUUlVFOwo+Pj4+PiAtCj4+ Pj4+IC0JCQlwYWdlX2RhdGFfYnVmW2luZGV4XS5wZm4gPSBwZm47Cj4+Pj4+IC0JCQlwYWdlX2Rh dGFfYnVmW2luZGV4XS5yZWFkeSA9IDE7Cj4+Pj4+ICsJCQlpZiAocGZuID49IGtkdW1wX3RocmVh ZF9hcmdzLT5lbmRfcGZuKSB7Cj4+Pj4+ICsJCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0udXNlZCA9 IDA7Cj4+Pj4+ICsJCQkJcGFnZV9mbGFnX2J1Zi0+cmVhZHkgPSBGTEFHX1JFQURZOwo+Pj4+PiAr CQkJCWluZm8tPmN1cnJlbnRfcGZuLS07Cj4+Pj4+ICsJCQkJYnJlYWs7Cj4+Pj4+ICsJCQl9Cj4+ Pj4KPj4+PiBUaGlzIGJsb2NrIGRlY3JlbWVudHMgaW5mby0+Y3VycmVudF9wZm4gd2l0aG91dCBp bmZvLT5jdXJyZW50X3Bmbl9tdXRleC4KPj4+PiBJIHRoaW5rIHRoaXMgYmxvY2sgc2hvdWxkIGJl IG1vdmVkIGludG8gcHJldmlvdXMgcHRocmVhZF9tdXRleF9sb2NrKGluZm8tPmN1cnJlbnRfcGZu X211dGV4KSBibG9jaywgc28gaXQgY2FuIHJlbW92ZS4KPj4+Pgo+Pgo+PiBXaHkgZG8geW91IHRo aW5rIGl0IHNob3VsZCBoYXZlIGN1cnJlbnRfcGZuX211dGV4Pwo+Pgo+PiBJZiBwZm4gPj0ga2R1 bXBfdGhyZWFkX2FyZ3MtPmVuZF9wZm4sIGluZm8tPmN1cnJlbnRfcGZuIHdpbGwgYWx3YXlzIGxh cmdlciB0aGFuCj4+IGtkdW1wX3RocmVhZF9hcmdzLT5lbmRfcGZuLiBpbmZvLT5jdXJyZW50X3Bm bi0tIHdvbid0IGFmZmVjdCBhbnl0aGluZy4KPj4KPj4gVGhlIGRlY3JlbWVudCBvcGVyYXRpb24g aXMgZm9yIGN5Y2xpYyBtb2RlLgo+Pgo+Pj4+Pgo+Pj4+PiAgICAJCQlkdW1wYWJsZSA9IGlzX2R1 bXBhYmxlKAo+Pj4+PiAgICAJCQkJaW5mby0+ZmRfYml0bWFwID8gJmJpdG1hcF9wYXJhbGxlbCA6 IGluZm8tPmJpdG1hcDIsCj4+Pj4+ICAgIAkJCQlwZm4sCj4+Pj4+ICAgIAkJCQljeWNsZSk7Cj4+ Pj4+IC0JCQlwYWdlX2RhdGFfYnVmW2luZGV4XS5kdW1wYWJsZSA9IGR1bXBhYmxlOwo+Pj4+PiAg ICAJCQlpZiAoIWR1bXBhYmxlKQo+Pj4+PiAtCQkJCWdvdG8gdW5sb2NrOwo+Pj4+PiArCQkJCWNv bnRpbnVlOwo+Pj4+Pgo+Pj4+PiAgICAJCQlpZiAoIXJlYWRfcGZuX3BhcmFsbGVsKGZkX21lbW9y eSwgcGZuLCBidWYsCj4+Pj4+ICAgIAkJCQkJICAgICAgICZiaXRtYXBfbWVtb3J5X3BhcmFsbGVs LAo+Pj4+PiBAQCAtNzE3OCwxMSArNzIyNSwxMSBAQCBrZHVtcF90aHJlYWRfZnVuY3Rpb25fY3lj bGljKHZvaWQgKmFyZykgewo+Pj4+Pgo+Pj4+PiAgICAJCQlpZiAoKGluZm8tPmR1bXBfbGV2ZWwg JiBETF9FWENMVURFX1pFUk8pCj4+Pj4+ICAgIAkJCSAgICAmJiBpc196ZXJvX3BhZ2UoYnVmLCBp bmZvLT5wYWdlX3NpemUpKSB7Cj4+Pj4+IC0JCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0uemVybyA9 IFRSVUU7Cj4+Pj4+IC0JCQkJZ290byB1bmxvY2s7Cj4+Pj4+ICsJCQkJcGFnZV9mbGFnX2J1Zi0+ emVybyA9IFRSVUU7Cj4+Pj4+ICsJCQkJZ290byBuZXh0Owo+Pj4+PiAgICAJCQl9Cj4+Pj4KPj4+ PiBGaXJzdCwgdGhpcyBjb2RlIGdldHMgcGFnZV9kYXRhX2J1ZiwgdGhlbiBpdCBnZXRzIHBhZ2Vf ZmxhZ19idWYuCj4+Pj4gSG93ZXZlciwgaWYgcHJvY2Vzc2VkIHBmbiBpcyB6ZXJvIHBhZ2UsCj4+ Pj4gaXQgcHJvY2Vzc2VzIG5leHQgcGZuIHdoaWxlIGtlZXBpbmcgcGFnZV9kYXRhX2J1Zi4KPj4+ Pgo+Pj4+IEkgdGhpbmsgaXQgc2hvdWxkIGdldCBwYWdlX2ZsYWdfYnVmLCB0aGVuIGdldCBwYWdl X2RhdGFfYnVmCj4+Pj4gaW4gb3JkZXIgdG8gc2hvcnRlbiB0aGUgaG9sZGluZyBwZXJpb2Qgb2Yg dGhlIHBhZ2VfZGF0YV9idWZbaW5kZXhdLm11dGV4Lgo+Pj4+Cj4+Cj4+IERvIHlvdSBtZWFuIHRo ZSBmb2xsb3dpbmcgbG9naWM/Cj4+IDEuIGdldCB0aGUgcGFnZV9mbGFnX2J1ZiBmaXJzdAo+PiAy LiBpZiB0aGUgcGZuIGlzIG5vdCB6ZXJvIHBhZ2UsIHRoZW4gZ2V0IHRoZSBwYWdlX2RhdGFfYnVm Lgo+Cj4gWWVzLgo+Cj4+IFRoaW5rIGFib3V0IHRoZSBmb2xsb3dpbmcgY2FzZS4KPj4gQSBwcm9k dWNlciBnZXQgdGhlIHBhZ2VfZmxhZ19idWYsIGFuZCB0aGUgcGZuIGlzIG5vdCB6ZXJvIHBhZ2Uu Cj4+IEl0IHdhbnRzIHRvIGdldCBhIHBhZ2VfZGF0YV9idWYsIGJ1dCB0aGVyZSBpcyBubyBtb3Jl IHBhZ2VfZGF0YV9idWYuCj4+IFRoZW4gLi4uCj4KPiBJdCdzIG5vdCBhIHByb2JsZW0uCj4gSW4g bm90IHplcm8gcGFnZSBjYXNlLCB0aGlzIGxvZ2ljIG5lZWRzIGJvdGggcGFnZV9mbGFnX2J1ZiBh bmQgcGFnZV9kYXRhX2J1ZiwKPiBzbyB3YWl0aW5nIGJ1ZmZlciBpcyBvYnZpb3VzIHdoZW4gaXQg aXNuJ3QgYWJsZSB0byBnZXQgcGFnZV9mbGFnX2J1ZiBvciBwYWdlX2RhdGFfYnVmLgo+CgpPZiBj b3Vyc2UsIHdhaXRpbmcgaXMgbm90IGEgcHJvYmxlbS4KQnV0IGlmIG90aGVyIHBhZ2VfZGF0YV9i dWZzIGFyZSBhbGwgdXNlZCBieSBsYXRlciBwZm5zLCBpdCB3aWxsCndhaXQgZm9yZXZlci4gVGhh dCdzIHRoZSBwcm9ibGVtLgoKLS0gClRoYW5rcwpaaG91Cgo+PiBTaW5jZSB0aGVyZSBhcmUgc2V2 ZXJhbCBwYWdlX2RhdGFfYnVmcywgaXQncyBub3QgYSBwcm9ibGVtIHRoYXQgZWFjaCBwcm9kdWNl cgo+PiB3aWxsIGFsd2F5cyBob2xkIGEgcGFnZV9kYXRhX2J1Zi4KPgo+IEl0IGRlcGVuZHMgb24g dGhlIHNwZWVkIG9mIGNvbnN1bWVyIGFuZCBwcm9kdWNlci4KPiBJdCdzIG5vdCBwb3NzaWJsZSB0 byBwcmVkaWN0IGl0Lgo+Cj4gSW4gemVybyBwYWdlIGNhc2UsIEkgdGhpbmsgZWFjaCBwcm9kdWNl ciBleGVjdXRlcyBtb3JlIHBhcmFsbGVsIHRoZW9yZXRpY2FsbHkKPiBpZiBwYWdlX2RhdGFfYnVm IGRvZXNuJ3QgZ2V0Lgo+Cj4gVGhhbmtzLAo+IE1pbm9ydSBVc3VpCj4KPj4KPj4gVGhhbmtzIGFn YWluIGZvciB5b3VyIGNvbW1lbnRzLgo+PiBBbmQgSSB3aWxsIHBvc3QgdGhlIG5leHQgdmVyc2lv biBsYXRlci4KPj4KPj4gLS0KPj4gVGhhbmtzCj4+IFpob3UKPj4KPj4+PiBUaGFua3MsCj4+Pj4g TWlub3J1IFVzdWkKPj4+Pgo+Pj4+Pgo+Pj4+PiAtCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0uemVy byA9IEZBTFNFOwo+Pj4+PiArCQkJcGFnZV9mbGFnX2J1Zi0+emVybyA9IEZBTFNFOwo+Pj4+Pgo+ Pj4+PiAgICAJCQkvKgo+Pj4+PiAgICAJCQkgKiBDb21wcmVzcyB0aGUgcGFnZSBkYXRhLgo+Pj4+ PiBAQCAtNzIzMiwxMiArNzI3OSwxNiBAQCBrZHVtcF90aHJlYWRfZnVuY3Rpb25fY3ljbGljKHZv aWQgKmFyZykgewo+Pj4+PiAgICAJCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0uc2l6ZSAgPSBpbmZv LT5wYWdlX3NpemU7Cj4+Pj4+ICAgIAkJCQltZW1jcHkocGFnZV9kYXRhX2J1ZltpbmRleF0uYnVm LCBidWYsIGluZm8tPnBhZ2Vfc2l6ZSk7Cj4+Pj4+ICAgIAkJCX0KPj4+Pj4gLXVubG9jazoKPj4+ Pj4gLQkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYWdlX2RhdGFfYnVmW2luZGV4XS5tdXRleCk7 Cj4+Pj4+ICsJCQlwYWdlX2ZsYWdfYnVmLT5pbmRleCA9IGluZGV4Owo+Pj4+PiArCQkJYnVmX3Jl YWR5ID0gVFJVRTsKPj4+Pj4gK25leHQ6Cj4+Pj4+ICsJCQlwYWdlX2ZsYWdfYnVmLT5yZWFkeSA9 IEZMQUdfUkVBRFk7Cj4+Pj4+ICsJCQlwYWdlX2ZsYWdfYnVmID0gcGFnZV9mbGFnX2J1Zi0+bmV4 dDsKPj4+Pj4KPj4+Pj4gICAgCQl9Cj4+Pj4+IC0JfQo+Pj4+Pgo+Pj4+PiArCQlwdGhyZWFkX211 dGV4X3VubG9jaygmcGFnZV9kYXRhX2J1ZltpbmRleF0ubXV0ZXgpOwo+Pj4+PiArCX0KPj4+Pj4g ICAgCXJldHZhbCA9IE5VTEw7Cj4+Pj4+Cj4+Pj4+ICAgIGZhaWw6Cj4+Pj4+IEBAIC03MjY1LDE0 ICs3MzE2LDE1IEBAIHdyaXRlX2tkdW1wX3BhZ2VzX3BhcmFsbGVsX2N5Y2xpYyhzdHJ1Y3QgY2Fj aGVfZGF0YSAqY2RfaGVhZGVyLAo+Pj4+PiAgICAJc3RydWN0IHBhZ2VfZGVzYyBwZDsKPj4+Pj4g ICAgCXN0cnVjdCB0aW1ldmFsIHR2X3N0YXJ0Owo+Pj4+PiAgICAJc3RydWN0IHRpbWV2YWwgbGFz dCwgbmV3Owo+Pj4+PiAtCXVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdW1pbmdfcGZuOwo+Pj4+PiAg ICAJcHRocmVhZF90ICoqdGhyZWFkcyA9IE5VTEw7Cj4+Pj4+ICAgIAlzdHJ1Y3QgdGhyZWFkX2Fy Z3MgKmtkdW1wX3RocmVhZF9hcmdzID0gTlVMTDsKPj4+Pj4gICAgCXZvaWQgKnRocmVhZF9yZXN1 bHQ7Cj4+Pj4+IC0JaW50IHBhZ2VfZGF0YV9udW07Cj4+Pj4+ICsJaW50IHBhZ2VfYnVmX251bTsK Pj4+Pj4gICAgCXN0cnVjdCBwYWdlX2RhdGEgKnBhZ2VfZGF0YV9idWYgPSBOVUxMOwo+Pj4+PiAg ICAJaW50IGk7Cj4+Pj4+ICAgIAlpbnQgaW5kZXg7Cj4+Pj4+ICsJaW50IGVuZF9jb3VudCwgY29u c3VtaW5nLCBjaGVja19jb3VudDsKPj4+Pj4gKwltZGZfcGZuX3QgY3VycmVudF9wZm4sIHRlbXBf cGZuOwo+Pj4+Pgo+Pj4+PiAgICAJaWYgKGluZm8tPmZsYWdfZWxmX2R1bXBmaWxlKQo+Pj4+PiAg ICAJCXJldHVybiBGQUxTRTsKPj4+Pj4gQEAgLTczMTksMTYgKzczNzEsMTEgQEAgd3JpdGVfa2R1 bXBfcGFnZXNfcGFyYWxsZWxfY3ljbGljKHN0cnVjdCBjYWNoZV9kYXRhICpjZF9oZWFkZXIsCj4+ Pj4+ICAgIAl0aHJlYWRzID0gaW5mby0+dGhyZWFkczsKPj4+Pj4gICAgCWtkdW1wX3RocmVhZF9h cmdzID0gaW5mby0+a2R1bXBfdGhyZWFkX2FyZ3M7Cj4+Pj4+Cj4+Pj4+IC0JcGFnZV9kYXRhX251 bSA9IGluZm8tPm51bV9idWZmZXJzOwo+Pj4+PiArCXBhZ2VfYnVmX251bSA9IGluZm8tPm51bV9i dWZmZXJzOwo+Pj4+PiAgICAJcGFnZV9kYXRhX2J1ZiA9IGluZm8tPnBhZ2VfZGF0YV9idWY7Cj4+ Pj4+Cj4+Pj4+IC0JZm9yIChpID0gMDsgaSA8IHBhZ2VfZGF0YV9udW07IGkrKykgewo+Pj4+PiAt CQkvKgo+Pj4+PiAtCQkgKiBwcm9kdWNlciB3aWxsIHVzZSBwZm4gaW4gcGFnZV9kYXRhX2J1ZiB0 byBkZWNpZGUgdGhlCj4+Pj4+IC0JCSAqIGNvbnN1bWVkIHBmbgo+Pj4+PiAtCQkgKi8KPj4+Pj4g LQkJcGFnZV9kYXRhX2J1ZltpXS5wZm4gPSBzdGFydF9wZm4gLSAxOwo+Pj4+PiAtCQlwYWdlX2Rh dGFfYnVmW2ldLnJlYWR5ID0gMDsKPj4+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgcGFnZV9idWZfbnVt OyBpKyspIHsKPj4+Pj4gKwkJcGFnZV9kYXRhX2J1ZltpXS51c2VkID0gMDsKPj4+Pj4gICAgCQly ZXMgPSBwdGhyZWFkX211dGV4X2luaXQoJnBhZ2VfZGF0YV9idWZbaV0ubXV0ZXgsIE5VTEwpOwo+ Pj4+PiAgICAJCWlmIChyZXMgIT0gMCkgewo+Pj4+PiAgICAJCQlFUlJNU0coIkNhbid0IGluaXRp YWxpemUgbXV0ZXggb2YgcGFnZV9kYXRhX2J1Zi4gJXNcbiIsCj4+Pj4+IEBAIC03MzQyLDggKzcz ODksOSBAQCB3cml0ZV9rZHVtcF9wYWdlc19wYXJhbGxlbF9jeWNsaWMoc3RydWN0IGNhY2hlX2Rh dGEgKmNkX2hlYWRlciwKPj4+Pj4gICAgCQlrZHVtcF90aHJlYWRfYXJnc1tpXS5sZW5fYnVmX291 dCA9IGxlbl9idWZfb3V0Owo+Pj4+PiAgICAJCWtkdW1wX3RocmVhZF9hcmdzW2ldLnN0YXJ0X3Bm biA9IHN0YXJ0X3BmbjsKPj4+Pj4gICAgCQlrZHVtcF90aHJlYWRfYXJnc1tpXS5lbmRfcGZuID0g ZW5kX3BmbjsKPj4+Pj4gLQkJa2R1bXBfdGhyZWFkX2FyZ3NbaV0ucGFnZV9kYXRhX251bSA9IHBh Z2VfZGF0YV9udW07Cj4+Pj4+ICsJCWtkdW1wX3RocmVhZF9hcmdzW2ldLnBhZ2VfYnVmX251bSA9 IHBhZ2VfYnVmX251bTsKPj4+Pj4gICAgCQlrZHVtcF90aHJlYWRfYXJnc1tpXS5wYWdlX2RhdGFf YnVmID0gcGFnZV9kYXRhX2J1ZjsKPj4+Pj4gKwkJa2R1bXBfdGhyZWFkX2FyZ3NbaV0ucGFnZV9m bGFnX2J1ZiA9IGluZm8tPnBhZ2VfZmxhZ19idWZbaV07Cj4+Pj4+ICAgIAkJa2R1bXBfdGhyZWFk X2FyZ3NbaV0uY3ljbGUgPSBjeWNsZTsKPj4+Pj4KPj4+Pj4gICAgCQlyZXMgPSBwdGhyZWFkX2Ny ZWF0ZSh0aHJlYWRzW2ldLCBOVUxMLAo+Pj4+PiBAQCAtNzM1Niw1NSArNzQwNCw5NCBAQCB3cml0 ZV9rZHVtcF9wYWdlc19wYXJhbGxlbF9jeWNsaWMoc3RydWN0IGNhY2hlX2RhdGEgKmNkX2hlYWRl ciwKPj4+Pj4gICAgCQl9Cj4+Pj4+ICAgIAl9Cj4+Pj4+Cj4+Pj4+IC0JY29uc3VtaW5nX3BmbiA9 IHN0YXJ0X3BmbjsKPj4+Pj4gLQlpbmRleCA9IC0xOwo+Pj4+PiArCXdoaWxlICgxKSB7Cj4+Pj4+ ICsJCWNvbnN1bWluZyA9IDA7Cj4+Pj4+ICsJCWNoZWNrX2NvdW50ID0gMDsKPj4+Pj4gKwkJZW5k X2NvdW50ID0gMDsKPj4+Pj4KPj4+Pj4gLQlnZXR0aW1lb2ZkYXkoJmxhc3QsIE5VTEwpOwo+Pj4+ PiArCQkvKgo+Pj4+PiArCQkgKiBUaGUgYmFzaWMgaWRlYSBpcyBwcm9kdWNlciBwcm9kdWNpbmcg cGFnZSBhbmQgY29uc3VtZXIgd3JpdGluZyBwYWdlLgo+Pj4+PiArCQkgKiBFYWNoIHByb2R1Y2Vy IGhhdmUgYSBwYWdlX2ZsYWdfYnVmIGxpc3Qgd2hpY2ggaXMgdXNlZCBmb3Igc3RvcmluZyBwYWdl J3MgZGVzY3JpcHRpb24uCj4+Pj4+ICsJCSAqIFRoZSBzaXplIG9mIHBhZ2VfZmxhZ19idWYgaXMg bGl0dGxlIHNvIGl0IHdvbid0IHRha2UgdG9vIG11Y2ggbWVtb3J5Lgo+Pj4+PiArCQkgKiBBbmQg YWxsIHByb2R1Y2VycyB3aWxsIHNoYXJlIGEgcGFnZV9kYXRhX2J1ZiBhcnJheSB3aGljaCBpcyB1 c2VkIGZvciBzdG9yaW5nIHBhZ2UncyBjb21wcmVzc2VkIGRhdGEuCj4+Pj4+ICsJCSAqIFRoZSBt YWluIHRocmVhZCBpcyB0aGUgY29uc3VtZXIuIEl0IHdpbGwgZmluZCB0aGUgbmV4dCBwZm4gYW5k IHdyaXRlIGl0IGludG8gZmlsZS4KPj4+Pj4gKwkJICogVGhlIG5leHQgcGZuIGlzIHNtYWxsZXN0 IHBmbiBpbiBhbGwgcGFnZV9mbGFnX2J1Zi4KPj4+Pj4gKwkJICovCj4+Pj4+ICsJCXdoaWxlICgx KSB7Cj4+Pj4+ICsJCQljdXJyZW50X3BmbiA9IGVuZF9wZm47Cj4+Pj4+Cj4+Pj4+IC0Jd2hpbGUg KGNvbnN1bWluZ19wZm4gPCBlbmRfcGZuKSB7Cj4+Pj4+IC0JCWluZGV4ID0gY29uc3VtaW5nX3Bm biAlIHBhZ2VfZGF0YV9udW07Cj4+Pj4+ICsJCQkvKgo+Pj4+PiArCQkJICogcGFnZV9mbGFnX2J1 ZiBpcyBpbiBjaXJjdWxhciBsaW5rZWQgbGlzdC4KPj4+Pj4gKwkJCSAqIFRoZSBhcnJheSBpbmZv LT5wYWdlX2ZsYWdfYnVmW10gcmVjb3JkcyB0aGUgY3VycmVudCBwYWdlX2ZsYWdfYnVmIGluIGVh Y2ggdGhyZWFkJ3MKPj4+Pj4gKwkJCSAqIHBhZ2VfZmxhZ19idWYgbGlzdC4KPj4+Pj4gKwkJCSAq IGNvbnN1bWluZyBpcyB1c2VkIGZvciByZWNvcmRpbmcgaW4gd2hpY2ggdGhyZWFkIHRoZSBwZm4g aXMgdGhlIHNtYWxsZXN0Lgo+Pj4+PiArCQkJICogY3VycmVudF9wZm4gaXMgdXNlZCBmb3IgcmVj b3JkaW5nIHRoZSB2YWx1ZSBvZiBwZm4gd2hlbiBjaGVja2luZyB0aGUgcGZuLgo+Pj4+PiArCQkJ ICovCj4+Pj4+ICsJCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+ Pj4+PiArCQkJCWlmIChpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldLT5yZWFkeSA9PSBGTEFHX1VOVVNF RCkKPj4+Pj4gKwkJCQkJY29udGludWU7Cj4+Pj4+ICsJCQkJdGVtcF9wZm4gPSBpbmZvLT5wYWdl X2ZsYWdfYnVmW2ldLT5wZm47Cj4+Pj4+Cj4+Pj4+IC0JCWdldHRpbWVvZmRheSgmbmV3LCBOVUxM KTsKPj4+Pj4gLQkJaWYgKG5ldy50dl9zZWMgLSBsYXN0LnR2X3NlYyA+IFdBSVRfVElNRSkgewo+ Pj4+PiAtCQkJRVJSTVNHKCJDYW4ndCBnZXQgZGF0YSBvZiBwZm4gJWxseC5cbiIsIGNvbnN1bWlu Z19wZm4pOwo+Pj4+PiAtCQkJZ290byBvdXQ7Cj4+Pj4+IC0JCX0KPj4+Pj4gKwkJCQkvKgo+Pj4+ PiArCQkJCSAqIGNvdW50IGhvdyBtYW55IHRocmVhZHMgaGF2ZSByZWFjaGVkIHRoZSBlbmQuCj4+ Pj4+ICsJCQkJICovCj4+Pj4+ICsJCQkJaWYgKHRlbXBfcGZuID49IGVuZF9wZm4pIHsKPj4+Pj4g KwkJCQkJZW5kX2NvdW50Kys7Cj4+Pj4+ICsJCQkJCWluZm8tPnBhZ2VfZmxhZ19idWZbaV0tPnJl YWR5ID0gRkxBR19VTlVTRUQ7Cj4+Pj4+ICsJCQkJCWNvbnRpbnVlOwo+Pj4+PiArCQkJCX0KPj4+ Pj4KPj4+Pj4gLQkJLyoKPj4+Pj4gLQkJICogY2hlY2sgcGZuIGZpcnN0IHdpdGhvdXQgbXV0ZXgg bG9ja2VkIHRvIHJlZHVjZSB0aGUgdGltZQo+Pj4+PiAtCQkgKiB0cnlpbmcgdG8gbG9jayB0aGUg bXV0ZXgKPj4+Pj4gLQkJICovCj4+Pj4+IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5wZm4g IT0gY29uc3VtaW5nX3BmbikKPj4+Pj4gLQkJCWNvbnRpbnVlOwo+Pj4+PiArCQkJCWlmIChjdXJy ZW50X3BmbiA8IHRlbXBfcGZuKQo+Pj4+PiArCQkJCQljb250aW51ZTsKPj4+Pj4KPj4+Pj4gLQkJ aWYgKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmcGFnZV9kYXRhX2J1ZltpbmRleF0ubXV0ZXgpICE9 IDApCj4+Pj4+IC0JCQljb250aW51ZTsKPj4+Pj4gKwkJCQljaGVja19jb3VudCsrOwo+Pj4+PiAr CQkJCWNvbnN1bWluZyA9IGk7Cj4+Pj4+ICsJCQkJY3VycmVudF9wZm4gPSB0ZW1wX3BmbjsKPj4+ Pj4gKwkJCX0KPj4+Pj4gKwo+Pj4+PiArCQkJLyoKPj4+Pj4gKwkJCSAqIElmIGFsbCB0aGUgdGhy ZWFkcyBoYXZlIHJlYWNoZWQgdGhlIGVuZCwgd2Ugd2lsbCBmaW5pc2ggd3JpdGluZy4KPj4+Pj4g KwkJCSAqLwo+Pj4+PiArCQkJaWYgKGVuZF9jb3VudCA+PSBpbmZvLT5udW1fdGhyZWFkcykKPj4+ Pj4gKwkJCQlnb3RvIGZpbmlzaDsKPj4+Pj4gKwo+Pj4+PiArCQkJLyoKPj4+Pj4gKwkJCSAqIFNp bmNlIGl0IGhhcyB0aGUgcHJvYmFiaWx0eSB0aGF0IHRoZXJlIGlzIG5vIHBhZ2VfZmxhZ19idWYg YmVpbmcgcmVhZHksCj4+Pj4+ICsJCQkgKiB3ZSBzaG91bGQgcmVjaGVjayBpZiBpdCBoYXBwZW5z Lgo+Pj4+PiArCQkJICovCj4+Pj4+ICsJCQlpZiAoY2hlY2tfY291bnQgPT0gMCkKPj4+Pj4gKwkJ CQljb250aW51ZTsKPj4+Pj4gKwo+Pj4+PiArCQkJLyoKPj4+Pj4gKwkJCSAqIFdoZW4gd2UgY2hl Y2sgdGhlIHBmbiBpbiBwYWdlX2ZsYWdfYnVmLCBpdCBtYXkgYmUgYmVpbmcgcHJvZHVjZWQuCj4+ Pj4+ICsJCQkgKiBTbyB3ZSBzaG91bGQgd2FpdCB1bnRpbCBpdCBpcyByZWFkeSB0byB1c2UuIEFu ZCBpZiB0aGUgcGZuIGlzCj4+Pj4+ICsJCQkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgdmFsdWUgd2hl biB3ZSBjaGVjaywgd2Ugc2hvdWxkIHJlY2hvb3NlIHRoZSBidWYuCj4+Pj4+ICsJCQkgKi8KPj4+ Pj4gKwkJCWdldHRpbWVvZmRheSgmbGFzdCwgTlVMTCk7Cj4+Pj4+ICsJCQl3aGlsZSAoaW5mby0+ cGFnZV9mbGFnX2J1Zltjb25zdW1pbmddLT5yZWFkeSAhPSBGTEFHX1JFQURZKSB7Cj4+Pj4+ICsJ CQkJZ2V0dGltZW9mZGF5KCZuZXcsIE5VTEwpOwo+Pj4+PiArCQkJCWlmIChuZXcudHZfc2VjIC0g bGFzdC50dl9zZWMgPiBXQUlUX1RJTUUpIHsKPj4+Pj4gKwkJCQkJRVJSTVNHKCJDYW4ndCBnZXQg ZGF0YSBvZiBwZm4uXG4iKTsKPj4+Pj4gKwkJCQkJZ290byBvdXQ7Cj4+Pj4+ICsJCQkJfQo+Pj4+ PiArCQkJfQo+Pj4+Pgo+Pj4+PiAtCQkvKiBjaGVjayB3aGV0aGVyIHRoZSBmb3VuZCBvbmUgaXMg cmVhZHkgdG8gYmUgY29uc3VtZWQgKi8KPj4+Pj4gLQkJaWYgKHBhZ2VfZGF0YV9idWZbaW5kZXhd LnBmbiAhPSBjb25zdW1pbmdfcGZuIHx8Cj4+Pj4+IC0JCSAgICBwYWdlX2RhdGFfYnVmW2luZGV4 XS5yZWFkeSAhPSAxKSB7Cj4+Pj4+IC0JCQlnb3RvIHVubG9jazsKPj4+Pj4gKwkJCWlmIChjdXJy ZW50X3BmbiA9PSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPnBmbikKPj4+Pj4gKwkJ CQlicmVhazsKPj4+Pj4gICAgCQl9Cj4+Pj4+Cj4+Pj4+ICAgIAkJaWYgKChudW1fZHVtcGVkICUg cGVyKSA9PSAwKQo+Pj4+PiAgICAJCQlwcmludF9wcm9ncmVzcyhQUk9HUkVTU19DT1BZLCBudW1f ZHVtcGVkLCBpbmZvLT5udW1fZHVtcGFibGUpOwo+Pj4+Pgo+Pj4+PiAtCQkvKiBuZXh0IHBmbiBp cyBmb3VuZCwgcmVmcmVzaCBsYXN0IGhlcmUgKi8KPj4+Pj4gLQkJbGFzdCA9IG5ldzsKPj4+Pj4g LQkJY29uc3VtaW5nX3BmbisrOwo+Pj4+PiAtCQlpbmZvLT5jb25zdW1lZF9wZm4rKzsKPj4+Pj4g LQkJcGFnZV9kYXRhX2J1ZltpbmRleF0ucmVhZHkgPSAwOwo+Pj4+PiAtCj4+Pj4+IC0JCWlmIChw YWdlX2RhdGFfYnVmW2luZGV4XS5kdW1wYWJsZSA9PSBGQUxTRSkKPj4+Pj4gLQkJCWdvdG8gdW5s b2NrOwo+Pj4+PiAtCj4+Pj4+ICAgIAkJbnVtX2R1bXBlZCsrOwo+Pj4+Pgo+Pj4+PiAtCQlpZiAo cGFnZV9kYXRhX2J1ZltpbmRleF0uemVybyA9PSBUUlVFKSB7Cj4+Pj4+ICsKPj4+Pj4gKwkJaWYg KGluZm8tPnBhZ2VfZmxhZ19idWZbY29uc3VtaW5nXS0+emVybyA9PSBUUlVFKSB7Cj4+Pj4+ICAg IAkJCWlmICghd3JpdGVfY2FjaGUoY2RfaGVhZGVyLCBwZF96ZXJvLCBzaXplb2YocGFnZV9kZXNj X3QpKSkKPj4+Pj4gICAgCQkJCWdvdG8gb3V0Owo+Pj4+PiAgICAJCQlwZm5femVybysrOwo+Pj4+ PiAgICAJCX0gZWxzZSB7Cj4+Pj4+ICsJCQlpbmRleCA9IGluZm8tPnBhZ2VfZmxhZ19idWZbY29u c3VtaW5nXS0+aW5kZXg7Cj4+Pj4+ICAgIAkJCXBkLmZsYWdzICAgICAgPSBwYWdlX2RhdGFfYnVm W2luZGV4XS5mbGFnczsKPj4+Pj4gICAgCQkJcGQuc2l6ZSAgICAgICA9IHBhZ2VfZGF0YV9idWZb aW5kZXhdLnNpemU7Cj4+Pj4+ICAgIAkJCXBkLnBhZ2VfZmxhZ3MgPSAwOwo+Pj4+PiBAQCAtNzQy MCwxMiArNzUwNywxMiBAQCB3cml0ZV9rZHVtcF9wYWdlc19wYXJhbGxlbF9jeWNsaWMoc3RydWN0 IGNhY2hlX2RhdGEgKmNkX2hlYWRlciwKPj4+Pj4gICAgCQkJICovCj4+Pj4+ICAgIAkJCWlmICgh d3JpdGVfY2FjaGUoY2RfcGFnZSwgcGFnZV9kYXRhX2J1ZltpbmRleF0uYnVmLCBwZC5zaXplKSkK Pj4+Pj4gICAgCQkJCWdvdG8gb3V0Owo+Pj4+PiAtCj4+Pj4+ICsJCQlwYWdlX2RhdGFfYnVmW2lu ZGV4XS51c2VkID0gMDsKPj4+Pj4gICAgCQl9Cj4+Pj4+IC11bmxvY2s6Cj4+Pj4+IC0JCXB0aHJl YWRfbXV0ZXhfdW5sb2NrKCZwYWdlX2RhdGFfYnVmW2luZGV4XS5tdXRleCk7Cj4+Pj4+ICsJCWlu Zm8tPnBhZ2VfZmxhZ19idWZbY29uc3VtaW5nXS0+cmVhZHkgPSBGTEFHX1VOVVNFRDsKPj4+Pj4g KwkJaW5mby0+cGFnZV9mbGFnX2J1Zltjb25zdW1pbmddID0gaW5mby0+cGFnZV9mbGFnX2J1Zltj b25zdW1pbmddLT5uZXh0Owo+Pj4+PiAgICAJfQo+Pj4+PiAtCj4+Pj4+ICtmaW5pc2g6Cj4+Pj4+ ICAgIAlyZXQgPSBUUlVFOwo+Pj4+PiAgICAJLyoKPj4+Pj4gICAgCSAqIHByaW50IFsxMDAgJV0K Pj4+Pj4gQEAgLTc0NjQsNyArNzU1MSw3IEBAIG91dDoKPj4+Pj4gICAgCX0KPj4+Pj4KPj4+Pj4g ICAgCWlmIChwYWdlX2RhdGFfYnVmICE9IE5VTEwpIHsKPj4+Pj4gLQkJZm9yIChpID0gMDsgaSA8 IHBhZ2VfZGF0YV9udW07IGkrKykgewo+Pj4+PiArCQlmb3IgKGkgPSAwOyBpIDwgcGFnZV9idWZf bnVtOyBpKyspIHsKPj4+Pj4gICAgCQkJcHRocmVhZF9tdXRleF9kZXN0cm95KCZwYWdlX2RhdGFf YnVmW2ldLm11dGV4KTsKPj4+Pj4gICAgCQl9Cj4+Pj4+ICAgIAl9Cj4+Pj4+IEBAIC03NTY0LDYg Kzc2NTEsNyBAQCB3cml0ZV9rZHVtcF9wYWdlc19jeWNsaWMoc3RydWN0IGNhY2hlX2RhdGEgKmNk X2hlYWRlciwgc3RydWN0IGNhY2hlX2RhdGEgKmNkX3BhZwo+Pj4+PiAgICAJCW51bV9kdW1wZWQr KzsKPj4+Pj4gICAgCQlpZiAoIXJlYWRfcGZuKHBmbiwgYnVmKSkKPj4+Pj4gICAgCQkJZ290byBv dXQ7Cj4+Pj4+ICsKPj4+Pj4gICAgCQlmaWx0ZXJfZGF0YV9idWZmZXIoYnVmLCBwZm5fdG9fcGFk ZHIocGZuKSwgaW5mby0+cGFnZV9zaXplKTsKPj4+Pj4KPj4+Pj4gICAgCQkvKgo+Pj4+PiBkaWZm IC0tZ2l0IGEvbWFrZWR1bXBmaWxlLmggYi9tYWtlZHVtcGZpbGUuaAo+Pj4+PiBpbmRleCBlMGI1 YmJmLi44YTlhNWIyIDEwMDY0NAo+Pj4+PiAtLS0gYS9tYWtlZHVtcGZpbGUuaAo+Pj4+PiArKysg Yi9tYWtlZHVtcGZpbGUuaAo+Pj4+PiBAQCAtOTc3LDcgKzk3Nyw3IEBAIHR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBsb25nIGludCB1bG9uZ2xvbmc7Cj4+Pj4+ICAgICNkZWZpbmUgUEFHRV9EQVRBX05V TQkoNTApCj4+Pj4+ICAgICNkZWZpbmUgV0FJVF9USU1FCSg2MCAqIDEwKQo+Pj4+PiAgICAjZGVm aW5lIFBUSFJFQURfRkFJTAkoKHZvaWQgKiktMikKPj4+Pj4gLSNkZWZpbmUgTlVNX0JVRkZFUlMJ KDUwKQo+Pj4+PiArI2RlZmluZSBOVU1fQlVGRkVSUwkoMjApCj4+Pj4+Cj4+Pj4+ICAgIHN0cnVj dCBtbWFwX2NhY2hlIHsKPj4+Pj4gICAgCWNoYXIJKm1tYXBfYnVmOwo+Pj4+PiBAQCAtOTg1LDI4 ICs5ODUsMzYgQEAgc3RydWN0IG1tYXBfY2FjaGUgewo+Pj4+PiAgICAJb2ZmX3QgICBtbWFwX2Vu ZF9vZmZzZXQ7Cj4+Pj4+ICAgIH07Cj4+Pj4+Cj4+Pj4+ICtlbnVtIHsKPj4+Pj4gKwlGTEFHX1VO VVNFRCwKPj4+Pj4gKwlGTEFHX1JFQURZLAo+Pj4+PiArCUZMQUdfRklMTElORwo+Pj4+PiArfTsK Pj4+Pj4gK3N0cnVjdCBwYWdlX2ZsYWcgewo+Pj4+PiArCW1kZl9wZm5fdCBwZm47Cj4+Pj4+ICsJ Y2hhciB6ZXJvOwo+Pj4+PiArCWNoYXIgcmVhZHk7Cj4+Pj4+ICsJc2hvcnQgaW5kZXg7Cj4+Pj4+ ICsJc3RydWN0IHBhZ2VfZmxhZyAqbmV4dDsKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gICAgc3Ry dWN0IHBhZ2VfZGF0YQo+Pj4+PiAgICB7Cj4+Pj4+IC0JbWRmX3Bmbl90IHBmbjsKPj4+Pj4gLQlp bnQgZHVtcGFibGU7Cj4+Pj4+IC0JaW50IHplcm87Cj4+Pj4+IC0JdW5zaWduZWQgaW50IGZsYWdz Owo+Pj4+PiArCXB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKPj4+Pj4gICAgCWxvbmcgc2l6ZTsKPj4+ Pj4gICAgCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKPj4+Pj4gLQlwdGhyZWFkX211dGV4X3QgbXV0ZXg7 Cj4+Pj4+IC0JLyoKPj4+Pj4gLQkgKiB3aGV0aGVyIHRoZSBwYWdlX2RhdGEgaXMgcmVhZHkgdG8g YmUgY29uc3VtZWQKPj4+Pj4gLQkgKi8KPj4+Pj4gLQlpbnQgcmVhZHk7Cj4+Pj4+ICsJaW50IGZs YWdzOwo+Pj4+PiArCWludCB1c2VkOwo+Pj4+PiAgICB9Owo+Pj4+Pgo+Pj4+PiAgICBzdHJ1Y3Qg dGhyZWFkX2FyZ3Mgewo+Pj4+PiAgICAJaW50IHRocmVhZF9udW07Cj4+Pj4+ICAgIAl1bnNpZ25l ZCBsb25nIGxlbl9idWZfb3V0Owo+Pj4+PiAgICAJbWRmX3Bmbl90IHN0YXJ0X3BmbiwgZW5kX3Bm bjsKPj4+Pj4gLQlpbnQgcGFnZV9kYXRhX251bTsKPj4+Pj4gKwlpbnQgcGFnZV9idWZfbnVtOwo+ Pj4+PiAgICAJc3RydWN0IGN5Y2xlICpjeWNsZTsKPj4+Pj4gICAgCXN0cnVjdCBwYWdlX2RhdGEg KnBhZ2VfZGF0YV9idWY7Cj4+Pj4+ICsJc3RydWN0IHBhZ2VfZmxhZyAqcGFnZV9mbGFnX2J1ZjsK Pj4+Pj4gICAgfTsKPj4+Pj4KPj4+Pj4gICAgLyoKPj4+Pj4gQEAgLTEyOTUsNiArMTMwMyw3IEBA IHN0cnVjdCBEdW1wSW5mbyB7Cj4+Pj4+ICAgIAlwdGhyZWFkX3QgKip0aHJlYWRzOwo+Pj4+PiAg ICAJc3RydWN0IHRocmVhZF9hcmdzICprZHVtcF90aHJlYWRfYXJnczsKPj4+Pj4gICAgCXN0cnVj dCBwYWdlX2RhdGEgKnBhZ2VfZGF0YV9idWY7Cj4+Pj4+ICsJc3RydWN0IHBhZ2VfZmxhZyAqKnBh Z2VfZmxhZ19idWY7Cj4+Pj4+ICAgIAlwdGhyZWFkX3J3bG9ja190IHVzZW1tYXBfcndsb2NrOwo+ Pj4+PiAgICAJbWRmX3Bmbl90IGN1cnJlbnRfcGZuOwo+Pj4+PiAgICAJcHRocmVhZF9tdXRleF90 IGN1cnJlbnRfcGZuX211dGV4Owo+Pj4+PiAtLQo+Pj4+PiAxLjguMy4xCj4+Pj4+Cj4+Pj4+Cj4+ Pj4+Cj4+Pj4+Cj4+Pj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4+Pj4+IGtleGVjIG1haWxpbmcgbGlzdAo+Pj4+PiBrZXhlY0BsaXN0cy5pbmZyYWRl YWQub3JnCj4+Pj4+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v a2V4ZWMKPj4+Pgo+Pj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4+Pj4ga2V4ZWMgbWFpbGluZyBsaXN0Cj4+Pj4ga2V4ZWNAbGlzdHMuaW5mcmFkZWFk Lm9yZwo+Pj4+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8va2V4 ZWMKPj4+Cj4+Pgo+PgoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18Ka2V4ZWMgbWFpbGluZyBsaXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo=