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 1aeDV6-0006H8-TF for kexec@lists.infradead.org; Fri, 11 Mar 2016 03:12:33 +0000 Message-ID: <56E23729.2000702@cn.fujitsu.com> Date: Fri, 11 Mar 2016 11:10:33 +0800 From: =?gbk?Q?=22Zhou=2C_Wenjian/=D6=DC=CE=C4=BD=A3=22?= MIME-Version: 1.0 Subject: Re: [PATCH v4] Improve the performance of --num-threads -d 31 References: <1457483231-2092-1-git-send-email-zhouwj-fnst@cn.fujitsu.com> <56E218B1.4010809@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="gbk"; Format="flowed" Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: Minoru Usui , "kexec@lists.infradead.org" SGkgTWlub3J1LAoKVGhhbmtzIGZvciB0ZXN0aW5nIGl0LgoKLS0gClRoYW5rcwpaaG91CgpPbiAw My8xMS8yMDE2IDExOjAzIEFNLCBNaW5vcnUgVXN1aSB3cm90ZToKPiBIaSwgWmhvdQo+Cj4+IC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IGtleGVjIFttYWlsdG86a2V4ZWMtYm91 bmNlc0BsaXN0cy5pbmZyYWRlYWQub3JnXSBPbiBCZWhhbGYgT2YgIlpob3UsIFdlbmppYW4v1tzO xD8iCj4+IFNlbnQ6IEZyaWRheSwgTWFyY2ggMTEsIDIwMTYgMTA6MDEgQU0KPj4gVG86IGtleGVj QGxpc3RzLmluZnJhZGVhZC5vcmcKPj4gU3ViamVjdDogUmU6IFtQQVRDSCB2NF0gSW1wcm92ZSB0 aGUgcGVyZm9ybWFuY2Ugb2YgLS1udW0tdGhyZWFkcyAtZCAzMQo+Pgo+PiBIZWxsbyBhbGwsCj4+ Cj4+IERvIHlvdSBoYXZlIGFueSBjb21tZW50cyA/Cj4+Cj4+IC0tCj4+IFRoYW5rcwo+PiBaaG91 Cj4+Cj4+IE9uIDAzLzA5LzIwMTYgMDg6MjcgQU0sIFpob3UgV2VuamlhbiB3cm90ZToKPj4+IHY0 Ogo+Pj4gICAgICAgICAgIDEuIGZpeCBhIGJ1ZyBjYXVzZWQgYnkgdGhlIGxvZ2ljCj4KPiBUaGFu ayB5b3UgZm9yIHlvdXIgd29yay4KPgo+IEkgdGVzdGVkIHlvdXIgdjQgcGF0Y2ggaW4gNUdCIGR1 bXAgZmlsZSBvdmVyIDEyMDAwIHRpbWVzLAo+IG91dHB1dHRlZCBkdW1wZmlsZSBkaWQgbm90IGJl IGJyb2tlbi4KPgo+IEFuZCBJIG1lYXN1cmVkIHBlcmZvcm1hbmNlIG9mIGl0Lgo+IEkgdGhpbmsg dGhlcmUgaXMgbm8gcHJvYmxlbS4KPgo+IFstZDMxXQo+IG51bS10aHJlYWQgICAgcmVhbCAgICAg dnMgbnVtLXRocmVhZHMgMAo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KPiAgICAwICAgICAgICAgICAxMS45MTMgICAgICAxMDAuMCUKPiAgICAxICAgICAgICAgICAg OC4zODUgICAgICAgNzAuNCUKPiAgICAyICAgICAgICAgICAgNC44NDkgICAgICAgNDAuNyUKPiAg ICA0ICAgICAgICAgICAgMy4xMDAgICAgICAgMjYuMCUKPiAgICA4ICAgICAgICAgICAgMi4yODYg ICAgICAgMTkuMiUKPgo+IFstZDBdCj4gbnVtLXRocmVhZCAgICByZWFsICAgICB2cyBudW0tdGhy ZWFkcyAwCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAgIDAg ICAgICAgICAgMjIxLjk2OCAgICAgIDEwMC4wJQo+ICAgIDEgICAgICAgICAgMTU3LjQzMyAgICAg ICA3MC45JQo+ICAgIDIgICAgICAgICAgIDg2LjY3OSAgICAgICAzOS4xJQo+ICAgIDQgICAgICAg ICAgIDcxLjg5MiAgICAgICAzMi40JQo+ICAgIDggICAgICAgICAgIDM3LjAzNCAgICAgICAxNi43 JQo+Cj4gVGhhbmtzCj4gTWlub3J1IFVzdWkKPgo+Pj4gdjM6Cj4+PiAgICAgICAgICAgMS4gcmVt b3ZlIHNvbWUgdW51c2VkIHZhcmlhYmxlcwo+Pj4gICAgICAgICAgIDIuIGZpeCBhIGJ1ZyBjYXVz ZWQgYnkgdGhlIHdyb25nIGxvZ2ljCj4+PiAgICAgICAgICAgMy4gZml4IGEgYnVnIGNhdXNlZCBi eSBvcHRpbWlzaW5nCj4+PiAgICAgICAgICAgNC4gaW1wcm92ZSBtb3JlIHBlcmZvcm1hbmNlIGJ5 IHVzaW5nIE1pbm9ydSBVc3VpJ3MgY29kZQo+Pj4KPj4+IG11bHRpLXRocmVhZHMgaW1wbGVtZW50 YXRpb24gd2lsbCBpbnRyb2R1Y2UgZXh0cmEgY29zdCB3aGVuIGhhbmRsaW5nCj4+PiBlYWNoIHBh Z2UuIFRoZSBvcmlnaW4gaW1wbGVtZW50YXRpb24gd2lsbCBhbHNvIGRvIHRoZSBleHRyYSB3b3Jr IGZvcgo+Pj4gZmlsdGVyZWQgcGFnZXMuIFNvIHRoZXJlIGlzIGEgYmlnIHBlcmZvcm1hbmNlIGRl Z3JhZGF0aW9uIGluCj4+PiAtLW51bS10aHJlYWRzIC1kIDMxLgo+Pj4gVGhlIG5ldyBpbXBsZW1l bnRhdGlvbiB3b24ndCBkbyB0aGUgZXh0cmEgd29yayBmb3IgZmlsdGVyZWQgcGFnZXMgYW55Cj4+ PiBtb3JlLiBTbyB0aGUgcGVyZm9ybWFuY2Ugb2YgLWQgMzEgaXMgY2xvc2UgdG8gdGhhdCBvZiBz ZXJpYWwgcHJvY2Vzc2luZy4KPj4+Cj4+PiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIGp1c3Qg bGlrZSB0aGUgZm9sbG93aW5nOgo+Pj4gICAgICAgICAgICogVGhlIGJhc2ljIGlkZWEgaXMgcHJv ZHVjZXIgcHJvZHVjaW5nIHBhZ2UgYW5kIGNvbnN1bWVyIHdyaXRpbmcgcGFnZS4KPj4+ICAgICAg ICAgICAqIEVhY2ggcHJvZHVjZXIgaGF2ZSBhIHBhZ2VfZmxhZ19idWYgbGlzdCB3aGljaCBpcyB1 c2VkIGZvciBzdG9yaW5nCj4+PiAgICAgICAgICAgICBwYWdlJ3MgZGVzY3JpcHRpb24uCj4+PiAg ICAgICAgICAgKiBUaGUgc2l6ZSBvZiBwYWdlX2ZsYWdfYnVmIGlzIGxpdHRsZSBzbyBpdCB3b24n dCB0YWtlIHRvbyBtdWNoIG1lbW9yeS4KPj4+ICAgICAgICAgICAqIEFuZCBhbGwgcHJvZHVjZXJz IHdpbGwgc2hhcmUgYSBwYWdlX2RhdGFfYnVmIGFycmF5IHdoaWNoIGlzCj4+PiAgICAgICAgICAg ICB1c2VkIGZvciBzdG9yaW5nIHBhZ2UncyBjb21wcmVzc2VkIGRhdGEuCj4+PiAgICAgICAgICAg KiBUaGUgbWFpbiB0aHJlYWQgaXMgdGhlIGNvbnN1bWVyLiBJdCB3aWxsIGZpbmQgdGhlIG5leHQg cGZuIGFuZCB3cml0ZQo+Pj4gICAgICAgICAgICAgaXQgaW50byBmaWxlLgo+Pj4gICAgICAgICAg ICogVGhlIG5leHQgcGZuIGlzIHNtYWxsZXN0IHBmbiBpbiBhbGwgcGFnZV9mbGFnX2J1Zi4KPj4+ Cj4+PiBTaWduZWQtb2ZmLWJ5OiBNaW5vcnUgVXN1aSA8bWluLXVzdWlAdGkuanAubmVjLmNvbT4K Pj4+IFNpZ25lZC1vZmYtYnk6IFpob3UgV2VuamlhbiA8emhvdXdqLWZuc3RAY24uZnVqaXRzdS5j b20+Cj4+PiAtLS0KPj4+ICAgIG1ha2VkdW1wZmlsZS5jIHwgMjk4ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4gICAgbWFrZWR1bXBm aWxlLmggfCAgMzUgKysrKy0tLQo+Pj4gICAgMiBmaWxlcyBjaGFuZ2VkLCAyMDIgaW5zZXJ0aW9u cygrKSwgMTMxIGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9tYWtlZHVtcGZpbGUu YyBiL21ha2VkdW1wZmlsZS5jCj4+PiBpbmRleCBmYTBiNzc5Li4yYjA4NjRhIDEwMDY0NAo+Pj4g LS0tIGEvbWFrZWR1bXBmaWxlLmMKPj4+ICsrKyBiL21ha2VkdW1wZmlsZS5jCj4+PiBAQCAtMzQ4 Myw3ICszNDgzLDggQEAgaW5pdGlhbF9mb3JfcGFyYWxsZWwoKQo+Pj4gICAgCXVuc2lnbmVkIGxv bmcgcGFnZV9kYXRhX2J1Zl9zaXplOwo+Pj4gICAgCXVuc2lnbmVkIGxvbmcgbGltaXRfc2l6ZTsK Pj4+ICAgIAlpbnQgcGFnZV9kYXRhX251bTsKPj4+IC0JaW50IGk7Cj4+PiArCXN0cnVjdCBwYWdl X2ZsYWcgKmN1cnJlbnQ7Cj4+PiArCWludCBpLCBqOwo+Pj4KPj4+ICAgIAlsZW5fYnVmX291dCA9 IGNhbGN1bGF0ZV9sZW5fYnVmX291dChpbmZvLT5wYWdlX3NpemUpOwo+Pj4KPj4+IEBAIC0zNTYw LDEwICszNTYxLDE2IEBAIGluaXRpYWxfZm9yX3BhcmFsbGVsKCkKPj4+Cj4+PiAgICAJbGltaXRf c2l6ZSA9IChnZXRfZnJlZV9tZW1vcnlfc2l6ZSgpCj4+PiAgICAJCSAgICAgIC0gTUFQX1JFR0lP TiAqIGluZm8tPm51bV90aHJlYWRzKSAqIDAuNjsKPj4+ICsJaWYgKGxpbWl0X3NpemUgPCAwKSB7 Cj4+PiArCQlNU0coIkZyZWUgbWVtb3J5IGlzIG5vdCBlbm91Z2ggZm9yIG11bHRpLXRocmVhZHNc biIpOwo+Pj4gKwkJcmV0dXJuIEZBTFNFOwo+Pj4gKwl9Cj4+Pgo+Pj4gICAgCXBhZ2VfZGF0YV9u dW0gPSBsaW1pdF9zaXplIC8gcGFnZV9kYXRhX2J1Zl9zaXplOwo+Pj4gKwlpbmZvLT5udW1fYnVm ZmVycyA9IDMgKiBpbmZvLT5udW1fdGhyZWFkczsKPj4+Cj4+PiAtCWluZm8tPm51bV9idWZmZXJz ID0gTUlOKE5VTV9CVUZGRVJTLCBwYWdlX2RhdGFfbnVtKTsKPj4+ICsJaW5mby0+bnVtX2J1ZmZl cnMgPSBNQVgoaW5mby0+bnVtX2J1ZmZlcnMsIE5VTV9CVUZGRVJTKTsKPj4+ICsJaW5mby0+bnVt X2J1ZmZlcnMgPSBNSU4oaW5mby0+bnVtX2J1ZmZlcnMsIHBhZ2VfZGF0YV9udW0pOwo+Pj4KPj4+ ICAgIAlERUJVR19NU0coIk51bWJlciBvZiBzdHJ1Y3QgcGFnZV9kYXRhIGZvciBwcm9kdWNlL2Nv bnN1bWU6ICVkXG4iLAo+Pj4gICAgCQkJaW5mby0+bnVtX2J1ZmZlcnMpOwo+Pj4gQEAgLTM1ODgs NiArMzU5NSwzNiBAQCBpbml0aWFsX2Zvcl9wYXJhbGxlbCgpCj4+PiAgICAJfQo+Pj4KPj4+ICAg IAkvKgo+Pj4gKwkgKiBpbml0aWFsIHBhZ2VfZmxhZyBmb3IgZWFjaCB0aHJlYWQKPj4+ICsJICov Cj4+PiArCWlmICgoaW5mby0+cGFnZV9mbGFnX2J1ZiA9IG1hbGxvYyhzaXplb2Yodm9pZCAqKSAq IGluZm8tPm51bV90aHJlYWRzKSkKPj4+ICsJICAgID09IE5VTEwpIHsKPj4+ICsJCU1TRygiQ2Fu J3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwYWdlX2ZsYWdfYnVmLiAlc1xuIiwKPj4+ICsJCQkJc3Ry ZXJyb3IoZXJybm8pKTsKPj4+ICsJCXJldHVybiBGQUxTRTsKPj4+ICsJfQo+Pj4gKwltZW1zZXQo aW5mby0+cGFnZV9mbGFnX2J1ZiwgMCwgc2l6ZW9mKHZvaWQgKikgKiBpbmZvLT5udW1fdGhyZWFk cyk7Cj4+PiArCj4+PiArCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fdGhyZWFkczsgaSsrKSB7 Cj4+PiArCQlpZiAoKGluZm8tPnBhZ2VfZmxhZ19idWZbaV0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0 cnVjdCBwYWdlX2ZsYWcpKSkgPT0gTlVMTCkgewo+Pj4gKwkJCU1TRygiQ2FuJ3QgYWxsb2NhdGUg bWVtb3J5IGZvciBwYWdlX2ZsYWcuICVzXG4iLAo+Pj4gKwkJCQlzdHJlcnJvcihlcnJubykpOwo+ Pj4gKwkJCXJldHVybiBGQUxTRTsKPj4+ICsJCX0KPj4+ICsJCWN1cnJlbnQgPSBpbmZvLT5wYWdl X2ZsYWdfYnVmW2ldOwo+Pj4gKwo+Pj4gKwkJZm9yIChqID0gMTsgaiA8IE5VTV9CVUZGRVJTOyBq KyspIHsKPj4+ICsJCQlpZiAoKGN1cnJlbnQtPm5leHQgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVj dCBwYWdlX2ZsYWcpKSkgPT0gTlVMTCkgewo+Pj4gKwkJCQlNU0coIkNhbid0IGFsbG9jYXRlIG1l bW9yeSBmb3IgcGFnZV9mbGFnLiAlc1xuIiwKPj4+ICsJCQkJCXN0cmVycm9yKGVycm5vKSk7Cj4+ PiArCQkJCXJldHVybiBGQUxTRTsKPj4+ICsJCQl9Cj4+PiArCQkJY3VycmVudCA9IGN1cnJlbnQt Pm5leHQ7Cj4+PiArCQl9Cj4+PiArCQljdXJyZW50LT5uZXh0ID0gaW5mby0+cGFnZV9mbGFnX2J1 ZltpXTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwkvKgo+Pj4gICAgCSAqIGluaXRpYWwgZmRfbWVtb3J5 IGZvciB0aHJlYWRzCj4+PiAgICAJICovCj4+PiAgICAJZm9yIChpID0gMDsgaSA8IGluZm8tPm51 bV90aHJlYWRzOyBpKyspIHsKPj4+IEBAIC0zNjEyLDcgKzM2NDksOCBAQCBpbml0aWFsX2Zvcl9w YXJhbGxlbCgpCj4+PiAgICB2b2lkCj4+PiAgICBmcmVlX2Zvcl9wYXJhbGxlbCgpCj4+PiAgICB7 Cj4+PiAtCWludCBpOwo+Pj4gKwlpbnQgaSwgajsKPj4+ICsJc3RydWN0IHBhZ2VfZmxhZyAqY3Vy cmVudDsKPj4+Cj4+PiAgICAJaWYgKGluZm8tPnRocmVhZHMgIT0gTlVMTCkgewo+Pj4gICAgCQlm b3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+Pj4gQEAgLTM2NTUsNiAr MzY5MywxOSBAQCBmcmVlX2Zvcl9wYXJhbGxlbCgpCj4+PiAgICAJCWZyZWUoaW5mby0+cGFnZV9k YXRhX2J1Zik7Cj4+PiAgICAJfQo+Pj4KPj4+ICsJaWYgKGluZm8tPnBhZ2VfZmxhZ19idWYgIT0g TlVMTCkgewo+Pj4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV90aHJlYWRzOyBpKyspIHsK Pj4+ICsJCQlmb3IgKGogPSAwOyBqIDwgTlVNX0JVRkZFUlM7IGorKykgewo+Pj4gKwkJCQlpZiAo aW5mby0+cGFnZV9mbGFnX2J1ZltpXSAhPSBOVUxMKSB7Cj4+PiArCQkJCQljdXJyZW50ID0gaW5m by0+cGFnZV9mbGFnX2J1ZltpXTsKPj4+ICsJCQkJCWluZm8tPnBhZ2VfZmxhZ19idWZbaV0gPSBj dXJyZW50LT5uZXh0Owo+Pj4gKwkJCQkJZnJlZShjdXJyZW50KTsKPj4+ICsJCQkJfQo+Pj4gKwkJ CX0KPj4+ICsJCX0KPj4+ICsJCWZyZWUoaW5mby0+cGFnZV9mbGFnX2J1Zik7Cj4+PiArCX0KPj4+ ICsKPj4+ICAgIAlpZiAoaW5mby0+cGFyYWxsZWxfaW5mbyA9PSBOVUxMKQo+Pj4gICAgCQlyZXR1 cm47Cj4+Pgo+Pj4gQEAgLTcwNzUsMTEgKzcxMjYsMTEgQEAgdm9pZCAqCj4+PiAgICBrZHVtcF90 aHJlYWRfZnVuY3Rpb25fY3ljbGljKHZvaWQgKmFyZykgewo+Pj4gICAgCXZvaWQgKnJldHZhbCA9 IFBUSFJFQURfRkFJTDsKPj4+ICAgIAlzdHJ1Y3QgdGhyZWFkX2FyZ3MgKmtkdW1wX3RocmVhZF9h cmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyAqKWFyZzsKPj4+IC0Jc3RydWN0IHBhZ2VfZGF0YSAq cGFnZV9kYXRhX2J1ZiA9IGtkdW1wX3RocmVhZF9hcmdzLT5wYWdlX2RhdGFfYnVmOwo+Pj4gKwl2 b2xhdGlsZSBzdHJ1Y3QgcGFnZV9kYXRhICpwYWdlX2RhdGFfYnVmID0ga2R1bXBfdGhyZWFkX2Fy Z3MtPnBhZ2VfZGF0YV9idWY7Cj4+PiArCXZvbGF0aWxlIHN0cnVjdCBwYWdlX2ZsYWcgKnBhZ2Vf ZmxhZ19idWYgPSBrZHVtcF90aHJlYWRfYXJncy0+cGFnZV9mbGFnX2J1ZjsKPj4+ICAgIAlzdHJ1 Y3QgY3ljbGUgKmN5Y2xlID0ga2R1bXBfdGhyZWFkX2FyZ3MtPmN5Y2xlOwo+Pj4gLQlpbnQgcGFn ZV9kYXRhX251bSA9IGtkdW1wX3RocmVhZF9hcmdzLT5wYWdlX2RhdGFfbnVtOwo+Pj4gLQltZGZf cGZuX3QgcGZuOwo+Pj4gLQlpbnQgaW5kZXg7Cj4+PiArCW1kZl9wZm5fdCBwZm4gPSBjeWNsZS0+ c3RhcnRfcGZuOwo+Pj4gKwlpbnQgaW5kZXggPSBrZHVtcF90aHJlYWRfYXJncy0+dGhyZWFkX251 bTsKPj4+ICAgIAlpbnQgYnVmX3JlYWR5Owo+Pj4gICAgCWludCBkdW1wYWJsZTsKPj4+ICAgIAlp bnQgZmRfbWVtb3J5ID0gMDsKPj4+IEBAIC03MTI1LDQ3ICs3MTc2LDQ4IEBAIGtkdW1wX3RocmVh ZF9mdW5jdGlvbl9jeWNsaWModm9pZCAqYXJnKSB7Cj4+PiAgICAJCQkJCQlrZHVtcF90aHJlYWRf YXJncy0+dGhyZWFkX251bSk7Cj4+PiAgICAJfQo+Pj4KPj4+IC0Jd2hpbGUgKDEpIHsKPj4+IC0J CS8qIGdldCBuZXh0IHBmbiAqLwo+Pj4gLQkJcHRocmVhZF9tdXRleF9sb2NrKCZpbmZvLT5jdXJy ZW50X3Bmbl9tdXRleCk7Cj4+PiAtCQlwZm4gPSBpbmZvLT5jdXJyZW50X3BmbjsKPj4+IC0JCWlu Zm8tPmN1cnJlbnRfcGZuKys7Cj4+PiAtCQlwdGhyZWFkX211dGV4X3VubG9jaygmaW5mby0+Y3Vy cmVudF9wZm5fbXV0ZXgpOwo+Pj4gLQo+Pj4gLQkJaWYgKHBmbiA+PSBrZHVtcF90aHJlYWRfYXJn cy0+ZW5kX3BmbikKPj4+IC0JCQlicmVhazsKPj4+IC0KPj4+IC0JCWluZGV4ID0gLTE7Cj4+PiAr CS8qCj4+PiArCSAqIGZpbHRlcmVkIHBhZ2Ugd29uJ3QgdGFrZSBhbnl0aGluZwo+Pj4gKwkgKiB1 bmZpbHRlcmVkIHplcm8gcGFnZSB3aWxsIG9ubHkgdGFrZSBhIHBhZ2VfZmxhZ19idWYKPj4+ICsJ ICogdW5maWx0ZXJlZCBub24temVybyBwYWdlIHdpbGwgdGFrZSBhIHBhZ2VfZmxhZ19idWYgYW5k IGEgcGFnZV9kYXRhX2J1Zgo+Pj4gKwkgKi8KPj4+ICsJd2hpbGUgKHBmbiA8IGN5Y2xlLT5lbmRf cGZuKSB7Cj4+PiAgICAJCWJ1Zl9yZWFkeSA9IEZBTFNFOwo+Pj4KPj4+ICsJCXB0aHJlYWRfbXV0 ZXhfbG9jaygmaW5mby0+cGFnZV9kYXRhX211dGV4KTsKPj4+ICsJCXdoaWxlIChwYWdlX2RhdGFf YnVmW2luZGV4XS51c2VkICE9IEZBTFNFKSB7Cj4+PiArCQkJaW5kZXggPSAoaW5kZXggKyAxKSAl IGluZm8tPm51bV9idWZmZXJzOwo+Pj4gKwkJfQo+Pj4gKwkJcGFnZV9kYXRhX2J1ZltpbmRleF0u dXNlZCA9IFRSVUU7Cj4+PiArCQlwdGhyZWFkX211dGV4X3VubG9jaygmaW5mby0+cGFnZV9kYXRh X211dGV4KTsKPj4+ICsKPj4+ICAgIAkJd2hpbGUgKGJ1Zl9yZWFkeSA9PSBGQUxTRSkgewo+Pj4g ICAgCQkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7Cj4+PiAtCj4+PiAtCQkJaW5kZXggPSBwZm4gJSBw YWdlX2RhdGFfbnVtOwo+Pj4gLQo+Pj4gLQkJCWlmIChwZm4gLSBpbmZvLT5jb25zdW1lZF9wZm4g PiBpbmZvLT5udW1fYnVmZmVycykKPj4+ICsJCQlpZiAocGFnZV9mbGFnX2J1Zi0+cmVhZHkgPT0g RkxBR19SRUFEWSkKPj4+ICAgIAkJCQljb250aW51ZTsKPj4+Cj4+PiAtCQkJaWYgKHBhZ2VfZGF0 YV9idWZbaW5kZXhdLnJlYWR5ICE9IDApCj4+PiAtCQkJCWNvbnRpbnVlOwo+Pj4gLQo+Pj4gLQkJ CXB0aHJlYWRfbXV0ZXhfbG9jaygmcGFnZV9kYXRhX2J1ZltpbmRleF0ubXV0ZXgpOwo+Pj4gLQo+ Pj4gLQkJCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5yZWFkeSAhPSAwKQo+Pj4gLQkJCQlnb3Rv IHVubG9jazsKPj4+IC0KPj4+IC0JCQlidWZfcmVhZHkgPSBUUlVFOwo+Pj4gKwkJCS8qIGdldCBu ZXh0IGR1bXBhYmxlIHBmbiAqLwo+Pj4gKwkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmaW5mby0+Y3Vy cmVudF9wZm5fbXV0ZXgpOwo+Pj4gKwkJCWZvciAocGZuID0gaW5mby0+Y3VycmVudF9wZm47IHBm biA8IGN5Y2xlLT5lbmRfcGZuOyBwZm4rKykgewo+Pj4gKwkJCQlkdW1wYWJsZSA9IGlzX2R1bXBh YmxlKAo+Pj4gKwkJCQkJaW5mby0+ZmRfYml0bWFwID8gJmJpdG1hcF9wYXJhbGxlbCA6IGluZm8t PmJpdG1hcDIsCj4+PiArCQkJCQlwZm4sCj4+PiArCQkJCQljeWNsZSk7Cj4+PiArCQkJCWlmIChk dW1wYWJsZSkKPj4+ICsJCQkJCWJyZWFrOwo+Pj4gKwkJCX0KPj4+ICsJCQlpbmZvLT5jdXJyZW50 X3BmbiA9IHBmbiArIDE7Cj4+Pgo+Pj4gLQkJCXBhZ2VfZGF0YV9idWZbaW5kZXhdLnBmbiA9IHBm bjsKPj4+IC0JCQlwYWdlX2RhdGFfYnVmW2luZGV4XS5yZWFkeSA9IDE7Cj4+PiArCQkJcGFnZV9m bGFnX2J1Zi0+cGZuID0gcGZuOwo+Pj4gKwkJCXBhZ2VfZmxhZ19idWYtPnJlYWR5ID0gRkxBR19G SUxMSU5HOwo+Pj4gKwkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbmZvLT5jdXJyZW50X3Bmbl9t dXRleCk7Cj4+PiArCQkJc2VtX3Bvc3QoJmluZm8tPnBhZ2VfZmxhZ19idWZfc2VtKTsKPj4+Cj4+ PiAtCQkJZHVtcGFibGUgPSBpc19kdW1wYWJsZSgKPj4+IC0JCQkJaW5mby0+ZmRfYml0bWFwID8g JmJpdG1hcF9wYXJhbGxlbCA6IGluZm8tPmJpdG1hcDIsCj4+PiAtCQkJCXBmbiwKPj4+IC0JCQkJ Y3ljbGUpOwo+Pj4gLQkJCXBhZ2VfZGF0YV9idWZbaW5kZXhdLmR1bXBhYmxlID0gZHVtcGFibGU7 Cj4+PiAtCQkJaWYgKCFkdW1wYWJsZSkKPj4+IC0JCQkJZ290byB1bmxvY2s7Cj4+PiArCQkJaWYg KHBmbiA+PSBjeWNsZS0+ZW5kX3Bmbikgewo+Pj4gKwkJCQlpbmZvLT5jdXJyZW50X3BmbiA9IGN5 Y2xlLT5lbmRfcGZuOwo+Pj4gKwkJCQlwYWdlX2RhdGFfYnVmW2luZGV4XS51c2VkID0gRkFMU0U7 Cj4+PiArCQkJCWJyZWFrOwo+Pj4gKwkJCX0KPj4+Cj4+PiAgICAJCQlpZiAoIXJlYWRfcGZuX3Bh cmFsbGVsKGZkX21lbW9yeSwgcGZuLCBidWYsCj4+PiAgICAJCQkJCSAgICAgICAmYml0bWFwX21l bW9yeV9wYXJhbGxlbCwKPj4+IEBAIC03MTc4LDExICs3MjMwLDExIEBAIGtkdW1wX3RocmVhZF9m dW5jdGlvbl9jeWNsaWModm9pZCAqYXJnKSB7Cj4+Pgo+Pj4gICAgCQkJaWYgKChpbmZvLT5kdW1w X2xldmVsICYgRExfRVhDTFVERV9aRVJPKQo+Pj4gICAgCQkJICAgICYmIGlzX3plcm9fcGFnZShi dWYsIGluZm8tPnBhZ2Vfc2l6ZSkpIHsKPj4+IC0JCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0uemVy byA9IFRSVUU7Cj4+PiAtCQkJCWdvdG8gdW5sb2NrOwo+Pj4gKwkJCQlwYWdlX2ZsYWdfYnVmLT56 ZXJvID0gVFJVRTsKPj4+ICsJCQkJZ290byBuZXh0Owo+Pj4gICAgCQkJfQo+Pj4KPj4+IC0JCQlw YWdlX2RhdGFfYnVmW2luZGV4XS56ZXJvID0gRkFMU0U7Cj4+PiArCQkJcGFnZV9mbGFnX2J1Zi0+ emVybyA9IEZBTFNFOwo+Pj4KPj4+ICAgIAkJCS8qCj4+PiAgICAJCQkgKiBDb21wcmVzcyB0aGUg cGFnZSBkYXRhLgo+Pj4gQEAgLTcyMTAsNiArNzI2Miw3IEBAIGtkdW1wX3RocmVhZF9mdW5jdGlv bl9jeWNsaWModm9pZCAqYXJnKSB7Cj4+PiAgICAJCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0uZmxh Z3MgPQo+Pj4gICAgCQkJCQkJCURVTVBfREhfQ09NUFJFU1NFRF9MWk87Cj4+PiAgICAJCQkJcGFn ZV9kYXRhX2J1ZltpbmRleF0uc2l6ZSAgPSBzaXplX291dDsKPj4+ICsKPj4+ICAgIAkJCQltZW1j cHkocGFnZV9kYXRhX2J1ZltpbmRleF0uYnVmLCBidWZfb3V0LCBzaXplX291dCk7Cj4+PiAgICAj ZW5kaWYKPj4+ICAgICNpZmRlZiBVU0VTTkFQUFkKPj4+IEBAIC03MjMyLDEyICs3Mjg1LDE0IEBA IGtkdW1wX3RocmVhZF9mdW5jdGlvbl9jeWNsaWModm9pZCAqYXJnKSB7Cj4+PiAgICAJCQkJcGFn ZV9kYXRhX2J1ZltpbmRleF0uc2l6ZSAgPSBpbmZvLT5wYWdlX3NpemU7Cj4+PiAgICAJCQkJbWVt Y3B5KHBhZ2VfZGF0YV9idWZbaW5kZXhdLmJ1ZiwgYnVmLCBpbmZvLT5wYWdlX3NpemUpOwo+Pj4g ICAgCQkJfQo+Pj4gLXVubG9jazoKPj4+IC0JCQlwdGhyZWFkX211dGV4X3VubG9jaygmcGFnZV9k YXRhX2J1ZltpbmRleF0ubXV0ZXgpOwo+Pj4gKwkJCXBhZ2VfZmxhZ19idWYtPmluZGV4ID0gaW5k ZXg7Cj4+PiArCQkJYnVmX3JlYWR5ID0gVFJVRTsKPj4+ICtuZXh0Ogo+Pj4gKwkJCXBhZ2VfZmxh Z19idWYtPnJlYWR5ID0gRkxBR19SRUFEWTsKPj4+ICsJCQlwYWdlX2ZsYWdfYnVmID0gcGFnZV9m bGFnX2J1Zi0+bmV4dDsKPj4+Cj4+PiAgICAJCX0KPj4+ICAgIAl9Cj4+PiAtCj4+PiAgICAJcmV0 dmFsID0gTlVMTDsKPj4+Cj4+PiAgICBmYWlsOgo+Pj4gQEAgLTcyNjUsMTQgKzczMjAsMTUgQEAg d3JpdGVfa2R1bXBfcGFnZXNfcGFyYWxsZWxfY3ljbGljKHN0cnVjdCBjYWNoZV9kYXRhICpjZF9o ZWFkZXIsCj4+PiAgICAJc3RydWN0IHBhZ2VfZGVzYyBwZDsKPj4+ICAgIAlzdHJ1Y3QgdGltZXZh bCB0dl9zdGFydDsKPj4+ICAgIAlzdHJ1Y3QgdGltZXZhbCBsYXN0LCBuZXc7Cj4+PiAtCXVuc2ln bmVkIGxvbmcgbG9uZyBjb25zdW1pbmdfcGZuOwo+Pj4gICAgCXB0aHJlYWRfdCAqKnRocmVhZHMg PSBOVUxMOwo+Pj4gICAgCXN0cnVjdCB0aHJlYWRfYXJncyAqa2R1bXBfdGhyZWFkX2FyZ3MgPSBO VUxMOwo+Pj4gICAgCXZvaWQgKnRocmVhZF9yZXN1bHQ7Cj4+PiAtCWludCBwYWdlX2RhdGFfbnVt Owo+Pj4gKwlpbnQgcGFnZV9idWZfbnVtOwo+Pj4gICAgCXN0cnVjdCBwYWdlX2RhdGEgKnBhZ2Vf ZGF0YV9idWYgPSBOVUxMOwo+Pj4gICAgCWludCBpOwo+Pj4gICAgCWludCBpbmRleDsKPj4+ICsJ aW50IGVuZF9jb3VudCwgY29uc3VtaW5nLCBjaGVja19jb3VudDsKPj4+ICsJbWRmX3Bmbl90IGN1 cnJlbnRfcGZuLCB0ZW1wX3BmbjsKPj4+Cj4+PiAgICAJaWYgKGluZm8tPmZsYWdfZWxmX2R1bXBm aWxlKQo+Pj4gICAgCQlyZXR1cm4gRkFMU0U7Cj4+PiBAQCAtNzI4NCwxMyArNzM0MCw2IEBAIHdy aXRlX2tkdW1wX3BhZ2VzX3BhcmFsbGVsX2N5Y2xpYyhzdHJ1Y3QgY2FjaGVfZGF0YSAqY2RfaGVh ZGVyLAo+Pj4gICAgCQlnb3RvIG91dDsKPj4+ICAgIAl9Cj4+Pgo+Pj4gLQlyZXMgPSBwdGhyZWFk X211dGV4X2luaXQoJmluZm8tPmNvbnN1bWVkX3Bmbl9tdXRleCwgTlVMTCk7Cj4+PiAtCWlmIChy ZXMgIT0gMCkgewo+Pj4gLQkJRVJSTVNHKCJDYW4ndCBpbml0aWFsaXplIGNvbnN1bWVkX3Bmbl9t dXRleC4gJXNcbiIsCj4+PiAtCQkJCXN0cmVycm9yKHJlcykpOwo+Pj4gLQkJZ290byBvdXQ7Cj4+ PiAtCX0KPj4+IC0KPj4+ICAgIAlyZXMgPSBwdGhyZWFkX211dGV4X2luaXQoJmluZm8tPmZpbHRl cl9tdXRleCwgTlVMTCk7Cj4+PiAgICAJaWYgKHJlcyAhPSAwKSB7Cj4+PiAgICAJCUVSUk1TRygi Q2FuJ3QgaW5pdGlhbGl6ZSBmaWx0ZXJfbXV0ZXguICVzXG4iLCBzdHJlcnJvcihyZXMpKTsKPj4+ IEBAIC03MzE0LDM2ICs3MzYzLDIzIEBAIHdyaXRlX2tkdW1wX3BhZ2VzX3BhcmFsbGVsX2N5Y2xp YyhzdHJ1Y3QgY2FjaGVfZGF0YSAqY2RfaGVhZGVyLAo+Pj4gICAgCWVuZF9wZm4gICA9IGN5Y2xl LT5lbmRfcGZuOwo+Pj4KPj4+ICAgIAlpbmZvLT5jdXJyZW50X3BmbiA9IHN0YXJ0X3BmbjsKPj4+ IC0JaW5mby0+Y29uc3VtZWRfcGZuID0gc3RhcnRfcGZuIC0gMTsKPj4+Cj4+PiAgICAJdGhyZWFk cyA9IGluZm8tPnRocmVhZHM7Cj4+PiAgICAJa2R1bXBfdGhyZWFkX2FyZ3MgPSBpbmZvLT5rZHVt cF90aHJlYWRfYXJnczsKPj4+Cj4+PiAtCXBhZ2VfZGF0YV9udW0gPSBpbmZvLT5udW1fYnVmZmVy czsKPj4+ICsJcGFnZV9idWZfbnVtID0gaW5mby0+bnVtX2J1ZmZlcnM7Cj4+PiAgICAJcGFnZV9k YXRhX2J1ZiA9IGluZm8tPnBhZ2VfZGF0YV9idWY7Cj4+PiArCXB0aHJlYWRfbXV0ZXhfaW5pdCgm aW5mby0+cGFnZV9kYXRhX211dGV4LCBOVUxMKTsKPj4+ICsJc2VtX2luaXQoJmluZm8tPnBhZ2Vf ZmxhZ19idWZfc2VtLCAwLCAwKTsKPj4+Cj4+PiAtCWZvciAoaSA9IDA7IGkgPCBwYWdlX2RhdGFf bnVtOyBpKyspIHsKPj4+IC0JCS8qCj4+PiAtCQkgKiBwcm9kdWNlciB3aWxsIHVzZSBwZm4gaW4g cGFnZV9kYXRhX2J1ZiB0byBkZWNpZGUgdGhlCj4+PiAtCQkgKiBjb25zdW1lZCBwZm4KPj4+IC0J CSAqLwo+Pj4gLQkJcGFnZV9kYXRhX2J1ZltpXS5wZm4gPSBzdGFydF9wZm4gLSAxOwo+Pj4gLQkJ cGFnZV9kYXRhX2J1ZltpXS5yZWFkeSA9IDA7Cj4+PiAtCQlyZXMgPSBwdGhyZWFkX211dGV4X2lu aXQoJnBhZ2VfZGF0YV9idWZbaV0ubXV0ZXgsIE5VTEwpOwo+Pj4gLQkJaWYgKHJlcyAhPSAwKSB7 Cj4+PiAtCQkJRVJSTVNHKCJDYW4ndCBpbml0aWFsaXplIG11dGV4IG9mIHBhZ2VfZGF0YV9idWYu ICVzXG4iLAo+Pj4gLQkJCQkJc3RyZXJyb3IocmVzKSk7Cj4+PiAtCQkJZ290byBvdXQ7Cj4+PiAt CQl9Cj4+PiAtCX0KPj4+ICsJZm9yIChpID0gMDsgaSA8IHBhZ2VfYnVmX251bTsgaSsrKQo+Pj4g KwkJcGFnZV9kYXRhX2J1ZltpXS51c2VkID0gRkFMU0U7Cj4+Pgo+Pj4gICAgCWZvciAoaSA9IDA7 IGkgPCBpbmZvLT5udW1fdGhyZWFkczsgaSsrKSB7Cj4+PiAgICAJCWtkdW1wX3RocmVhZF9hcmdz W2ldLnRocmVhZF9udW0gPSBpOwo+Pj4gICAgCQlrZHVtcF90aHJlYWRfYXJnc1tpXS5sZW5fYnVm X291dCA9IGxlbl9idWZfb3V0Owo+Pj4gLQkJa2R1bXBfdGhyZWFkX2FyZ3NbaV0uc3RhcnRfcGZu ID0gc3RhcnRfcGZuOwo+Pj4gLQkJa2R1bXBfdGhyZWFkX2FyZ3NbaV0uZW5kX3BmbiA9IGVuZF9w Zm47Cj4+PiAtCQlrZHVtcF90aHJlYWRfYXJnc1tpXS5wYWdlX2RhdGFfbnVtID0gcGFnZV9kYXRh X251bTsKPj4+ICAgIAkJa2R1bXBfdGhyZWFkX2FyZ3NbaV0ucGFnZV9kYXRhX2J1ZiA9IHBhZ2Vf ZGF0YV9idWY7Cj4+PiArCQlrZHVtcF90aHJlYWRfYXJnc1tpXS5wYWdlX2ZsYWdfYnVmID0gaW5m by0+cGFnZV9mbGFnX2J1ZltpXTsKPj4+ICAgIAkJa2R1bXBfdGhyZWFkX2FyZ3NbaV0uY3ljbGUg PSBjeWNsZTsKPj4+Cj4+PiAgICAJCXJlcyA9IHB0aHJlYWRfY3JlYXRlKHRocmVhZHNbaV0sIE5V TEwsCj4+PiBAQCAtNzM1Niw1NSArNzM5Miw4OCBAQCB3cml0ZV9rZHVtcF9wYWdlc19wYXJhbGxl bF9jeWNsaWMoc3RydWN0IGNhY2hlX2RhdGEgKmNkX2hlYWRlciwKPj4+ICAgIAkJfQo+Pj4gICAg CX0KPj4+Cj4+PiAtCWNvbnN1bWluZ19wZm4gPSBzdGFydF9wZm47Cj4+PiAtCWluZGV4ID0gLTE7 Cj4+PiArCWVuZF9jb3VudCA9IDA7Cj4+PiArCXdoaWxlICgxKSB7Cj4+PiArCQljb25zdW1pbmcg PSAwOwo+Pj4gKwkJY2hlY2tfY291bnQgPSAwOwo+Pj4KPj4+IC0JZ2V0dGltZW9mZGF5KCZsYXN0 LCBOVUxMKTsKPj4+ICsJCS8qCj4+PiArCQkgKiBUaGUgYmFzaWMgaWRlYSBpcyBwcm9kdWNlciBw cm9kdWNpbmcgcGFnZSBhbmQgY29uc3VtZXIgd3JpdGluZyBwYWdlLgo+Pj4gKwkJICogRWFjaCBw cm9kdWNlciBoYXZlIGEgcGFnZV9mbGFnX2J1ZiBsaXN0IHdoaWNoIGlzIHVzZWQgZm9yIHN0b3Jp bmcgcGFnZSdzIGRlc2NyaXB0aW9uLgo+Pj4gKwkJICogVGhlIHNpemUgb2YgcGFnZV9mbGFnX2J1 ZiBpcyBsaXR0bGUgc28gaXQgd29uJ3QgdGFrZSB0b28gbXVjaCBtZW1vcnkuCj4+PiArCQkgKiBB bmQgYWxsIHByb2R1Y2VycyB3aWxsIHNoYXJlIGEgcGFnZV9kYXRhX2J1ZiBhcnJheSB3aGljaCBp cyB1c2VkIGZvciBzdG9yaW5nIHBhZ2UncyBjb21wcmVzc2VkIGRhdGEuCj4+PiArCQkgKiBUaGUg bWFpbiB0aHJlYWQgaXMgdGhlIGNvbnN1bWVyLiBJdCB3aWxsIGZpbmQgdGhlIG5leHQgcGZuIGFu ZCB3cml0ZSBpdCBpbnRvIGZpbGUuCj4+PiArCQkgKiBUaGUgbmV4dCBwZm4gaXMgc21hbGxlc3Qg cGZuIGluIGFsbCBwYWdlX2ZsYWdfYnVmLgo+Pj4gKwkJICovCj4+PiArCQlzZW1fd2FpdCgmaW5m by0+cGFnZV9mbGFnX2J1Zl9zZW0pOwo+Pj4gKwkJZ2V0dGltZW9mZGF5KCZsYXN0LCBOVUxMKTsK Pj4+ICsJCXdoaWxlICgxKSB7Cj4+PiArCQkJY3VycmVudF9wZm4gPSBlbmRfcGZuOwo+Pj4KPj4+ IC0Jd2hpbGUgKGNvbnN1bWluZ19wZm4gPCBlbmRfcGZuKSB7Cj4+PiAtCQlpbmRleCA9IGNvbnN1 bWluZ19wZm4gJSBwYWdlX2RhdGFfbnVtOwo+Pj4gKwkJCS8qCj4+PiArCQkJICogcGFnZV9mbGFn X2J1ZiBpcyBpbiBjaXJjdWxhciBsaW5rZWQgbGlzdC4KPj4+ICsJCQkgKiBUaGUgYXJyYXkgaW5m by0+cGFnZV9mbGFnX2J1ZltdIHJlY29yZHMgdGhlIGN1cnJlbnQgcGFnZV9mbGFnX2J1ZiBpbiBl YWNoIHRocmVhZCdzCj4+PiArCQkJICogcGFnZV9mbGFnX2J1ZiBsaXN0Lgo+Pj4gKwkJCSAqIGNv bnN1bWluZyBpcyB1c2VkIGZvciByZWNvcmRpbmcgaW4gd2hpY2ggdGhyZWFkIHRoZSBwZm4gaXMg dGhlIHNtYWxsZXN0Lgo+Pj4gKwkJCSAqIGN1cnJlbnRfcGZuIGlzIHVzZWQgZm9yIHJlY29yZGlu ZyB0aGUgdmFsdWUgb2YgcGZuIHdoZW4gY2hlY2tpbmcgdGhlIHBmbi4KPj4+ICsJCQkgKi8KPj4+ ICsJCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+Pj4gKwkJCQlp ZiAoaW5mby0+cGFnZV9mbGFnX2J1ZltpXS0+cmVhZHkgPT0gRkxBR19VTlVTRUQpCj4+PiArCQkJ CQljb250aW51ZTsKPj4+ICsJCQkJdGVtcF9wZm4gPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldLT5w Zm47Cj4+Pgo+Pj4gLQkJZ2V0dGltZW9mZGF5KCZuZXcsIE5VTEwpOwo+Pj4gLQkJaWYgKG5ldy50 dl9zZWMgLSBsYXN0LnR2X3NlYyA+IFdBSVRfVElNRSkgewo+Pj4gLQkJCUVSUk1TRygiQ2FuJ3Qg Z2V0IGRhdGEgb2YgcGZuICVsbHguXG4iLCBjb25zdW1pbmdfcGZuKTsKPj4+IC0JCQlnb3RvIG91 dDsKPj4+IC0JCX0KPj4+ICsJCQkJLyoKPj4+ICsJCQkJICogY291bnQgaG93IG1hbnkgdGhyZWFk cyBoYXZlIHJlYWNoZWQgdGhlIGVuZC4KPj4+ICsJCQkJICovCj4+PiArCQkJCWlmICh0ZW1wX3Bm biA+PSBlbmRfcGZuKSB7Cj4+PiArCQkJCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldLT5yZWFkeSA9 IEZMQUdfVU5VU0VEOwo+Pj4gKwkJCQkJZW5kX2NvdW50Kys7Cj4+PiArCQkJCQljb250aW51ZTsK Pj4+ICsJCQkJfQo+Pj4KPj4+IC0JCS8qCj4+PiAtCQkgKiBjaGVjayBwZm4gZmlyc3Qgd2l0aG91 dCBtdXRleCBsb2NrZWQgdG8gcmVkdWNlIHRoZSB0aW1lCj4+PiAtCQkgKiB0cnlpbmcgdG8gbG9j ayB0aGUgbXV0ZXgKPj4+IC0JCSAqLwo+Pj4gLQkJaWYgKHBhZ2VfZGF0YV9idWZbaW5kZXhdLnBm biAhPSBjb25zdW1pbmdfcGZuKQo+Pj4gLQkJCWNvbnRpbnVlOwo+Pj4gKwkJCQlpZiAoY3VycmVu dF9wZm4gPCB0ZW1wX3BmbikKPj4+ICsJCQkJCWNvbnRpbnVlOwo+Pj4KPj4+IC0JCWlmIChwdGhy ZWFkX211dGV4X3RyeWxvY2soJnBhZ2VfZGF0YV9idWZbaW5kZXhdLm11dGV4KSAhPSAwKQo+Pj4g LQkJCWNvbnRpbnVlOwo+Pj4gKwkJCQljaGVja19jb3VudCsrOwo+Pj4gKwkJCQljb25zdW1pbmcg PSBpOwo+Pj4gKwkJCQljdXJyZW50X3BmbiA9IHRlbXBfcGZuOwo+Pj4gKwkJCX0KPj4+Cj4+PiAt CQkvKiBjaGVjayB3aGV0aGVyIHRoZSBmb3VuZCBvbmUgaXMgcmVhZHkgdG8gYmUgY29uc3VtZWQg Ki8KPj4+IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5wZm4gIT0gY29uc3VtaW5nX3BmbiB8 fAo+Pj4gLQkJICAgIHBhZ2VfZGF0YV9idWZbaW5kZXhdLnJlYWR5ICE9IDEpIHsKPj4+IC0JCQln b3RvIHVubG9jazsKPj4+ICsJCQkvKgo+Pj4gKwkJCSAqIElmIGFsbCB0aGUgdGhyZWFkcyBoYXZl IHJlYWNoZWQgdGhlIGVuZCwgd2Ugd2lsbCBmaW5pc2ggd3JpdGluZy4KPj4+ICsJCQkgKi8KPj4+ ICsJCQlpZiAoZW5kX2NvdW50ID49IGluZm8tPm51bV90aHJlYWRzKQo+Pj4gKwkJCQlnb3RvIGZp bmlzaDsKPj4+ICsKPj4+ICsJCQkvKgo+Pj4gKwkJCSAqIElmIHRoZSBwYWdlX2ZsYWdfYnVmIGlz IG5vdCByZWFkeSwgdGhlIHBmbiByZWNvcmRlZCBtYXkgYmUgY2hhbmdlZC4KPj4+ICsJCQkgKiBT byB3ZSBzaG91bGQgcmVjaGVjay4KPj4+ICsJCQkgKi8KPj4+ICsJCQlpZiAoaW5mby0+cGFnZV9m bGFnX2J1Zltjb25zdW1pbmddLT5yZWFkeSAhPSBGTEFHX1JFQURZKSB7Cj4+PiArCQkJCWdldHRp bWVvZmRheSgmbmV3LCBOVUxMKTsKPj4+ICsJCQkJaWYgKG5ldy50dl9zZWMgLSBsYXN0LnR2X3Nl YyA+IFdBSVRfVElNRSkgewo+Pj4gKwkJCQkJRVJSTVNHKCJDYW4ndCBnZXQgZGF0YSBvZiBwZm4u XG4iKTsKPj4+ICsJCQkJCWdvdG8gb3V0Owo+Pj4gKwkJCQl9Cj4+PiArCQkJCWNvbnRpbnVlOwo+ Pj4gKwkJCX0KPj4+ICsKPj4+ICsJCQlpZiAoY3VycmVudF9wZm4gPT0gaW5mby0+cGFnZV9mbGFn X2J1Zltjb25zdW1pbmddLT5wZm4pCj4+PiArCQkJCWJyZWFrOwo+Pj4gICAgCQl9Cj4+Pgo+Pj4g ICAgCQlpZiAoKG51bV9kdW1wZWQgJSBwZXIpID09IDApCj4+PiAgICAJCQlwcmludF9wcm9ncmVz cyhQUk9HUkVTU19DT1BZLCBudW1fZHVtcGVkLCBpbmZvLT5udW1fZHVtcGFibGUpOwo+Pj4KPj4+ IC0JCS8qIG5leHQgcGZuIGlzIGZvdW5kLCByZWZyZXNoIGxhc3QgaGVyZSAqLwo+Pj4gLQkJbGFz dCA9IG5ldzsKPj4+IC0JCWNvbnN1bWluZ19wZm4rKzsKPj4+IC0JCWluZm8tPmNvbnN1bWVkX3Bm bisrOwo+Pj4gLQkJcGFnZV9kYXRhX2J1ZltpbmRleF0ucmVhZHkgPSAwOwo+Pj4gLQo+Pj4gLQkJ aWYgKHBhZ2VfZGF0YV9idWZbaW5kZXhdLmR1bXBhYmxlID09IEZBTFNFKQo+Pj4gLQkJCWdvdG8g dW5sb2NrOwo+Pj4gLQo+Pj4gICAgCQludW1fZHVtcGVkKys7Cj4+Pgo+Pj4gLQkJaWYgKHBhZ2Vf ZGF0YV9idWZbaW5kZXhdLnplcm8gPT0gVFJVRSkgewo+Pj4gKwo+Pj4gKwkJaWYgKGluZm8tPnBh Z2VfZmxhZ19idWZbY29uc3VtaW5nXS0+emVybyA9PSBUUlVFKSB7Cj4+PiAgICAJCQlpZiAoIXdy aXRlX2NhY2hlKGNkX2hlYWRlciwgcGRfemVybywgc2l6ZW9mKHBhZ2VfZGVzY190KSkpCj4+PiAg ICAJCQkJZ290byBvdXQ7Cj4+PiAgICAJCQlwZm5femVybysrOwo+Pj4gICAgCQl9IGVsc2Ugewo+ Pj4gKwkJCWluZGV4ID0gaW5mby0+cGFnZV9mbGFnX2J1Zltjb25zdW1pbmddLT5pbmRleDsKPj4+ ICAgIAkJCXBkLmZsYWdzICAgICAgPSBwYWdlX2RhdGFfYnVmW2luZGV4XS5mbGFnczsKPj4+ICAg IAkJCXBkLnNpemUgICAgICAgPSBwYWdlX2RhdGFfYnVmW2luZGV4XS5zaXplOwo+Pj4gICAgCQkJ cGQucGFnZV9mbGFncyA9IDA7Cj4+PiBAQCAtNzQyMCwxMiArNzQ4OSwxMiBAQCB3cml0ZV9rZHVt cF9wYWdlc19wYXJhbGxlbF9jeWNsaWMoc3RydWN0IGNhY2hlX2RhdGEgKmNkX2hlYWRlciwKPj4+ ICAgIAkJCSAqLwo+Pj4gICAgCQkJaWYgKCF3cml0ZV9jYWNoZShjZF9wYWdlLCBwYWdlX2RhdGFf YnVmW2luZGV4XS5idWYsIHBkLnNpemUpKQo+Pj4gICAgCQkJCWdvdG8gb3V0Owo+Pj4gLQo+Pj4g KwkJCXBhZ2VfZGF0YV9idWZbaW5kZXhdLnVzZWQgPSBGQUxTRTsKPj4+ICAgIAkJfQo+Pj4gLXVu bG9jazoKPj4+IC0JCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYWdlX2RhdGFfYnVmW2luZGV4XS5t dXRleCk7Cj4+PiArCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPnJlYWR5ID0gRkxB R19VTlVTRUQ7Cj4+PiArCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10gPSBpbmZvLT5w YWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPm5leHQ7Cj4+PiAgICAJfQo+Pj4gLQo+Pj4gK2Zpbmlz aDoKPj4+ICAgIAlyZXQgPSBUUlVFOwo+Pj4gICAgCS8qCj4+PiAgICAJICogcHJpbnQgWzEwMCAl XQo+Pj4gQEAgLTc0NjMsMTUgKzc1MzIsOSBAQCBvdXQ6Cj4+PiAgICAJCX0KPj4+ICAgIAl9Cj4+ Pgo+Pj4gLQlpZiAocGFnZV9kYXRhX2J1ZiAhPSBOVUxMKSB7Cj4+PiAtCQlmb3IgKGkgPSAwOyBp IDwgcGFnZV9kYXRhX251bTsgaSsrKSB7Cj4+PiAtCQkJcHRocmVhZF9tdXRleF9kZXN0cm95KCZw YWdlX2RhdGFfYnVmW2ldLm11dGV4KTsKPj4+IC0JCX0KPj4+IC0JfQo+Pj4gLQo+Pj4gKwlzZW1f ZGVzdHJveSgmaW5mby0+cGFnZV9mbGFnX2J1Zl9zZW0pOwo+Pj4gICAgCXB0aHJlYWRfcndsb2Nr X2Rlc3Ryb3koJmluZm8tPnVzZW1tYXBfcndsb2NrKTsKPj4+ICAgIAlwdGhyZWFkX211dGV4X2Rl c3Ryb3koJmluZm8tPmZpbHRlcl9tdXRleCk7Cj4+PiAtCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgm aW5mby0+Y29uc3VtZWRfcGZuX211dGV4KTsKPj4+ICAgIAlwdGhyZWFkX211dGV4X2Rlc3Ryb3ko JmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+Cj4+PiAgICAJcmV0dXJuIHJldDsKPj4+IEBA IC03NTY0LDYgKzc2MjcsNyBAQCB3cml0ZV9rZHVtcF9wYWdlc19jeWNsaWMoc3RydWN0IGNhY2hl X2RhdGEgKmNkX2hlYWRlciwgc3RydWN0IGNhY2hlX2RhdGEgKmNkX3BhZwo+Pj4gICAgCQludW1f ZHVtcGVkKys7Cj4+PiAgICAJCWlmICghcmVhZF9wZm4ocGZuLCBidWYpKQo+Pj4gICAgCQkJZ290 byBvdXQ7Cj4+PiArCj4+PiAgICAJCWZpbHRlcl9kYXRhX2J1ZmZlcihidWYsIHBmbl90b19wYWRk cihwZm4pLCBpbmZvLT5wYWdlX3NpemUpOwo+Pj4KPj4+ICAgIAkJLyoKPj4+IGRpZmYgLS1naXQg YS9tYWtlZHVtcGZpbGUuaCBiL21ha2VkdW1wZmlsZS5oCj4+PiBpbmRleCBlMGI1YmJmLi40YjMx NWMwIDEwMDY0NAo+Pj4gLS0tIGEvbWFrZWR1bXBmaWxlLmgKPj4+ICsrKyBiL21ha2VkdW1wZmls ZS5oCj4+PiBAQCAtNDQsNiArNDQsNyBAQAo+Pj4gICAgI2luY2x1ZGUgInByaW50X2luZm8uaCIK Pj4+ICAgICNpbmNsdWRlICJzYWR1bXBfbW9kLmgiCj4+PiAgICAjaW5jbHVkZSA8cHRocmVhZC5o Pgo+Pj4gKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KPj4+Cj4+PiAgICAvKgo+Pj4gICAgICogUmVz dWx0IG9mIGNvbW1hbmQKPj4+IEBAIC05NzcsNyArOTc4LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IHVsb25nbG9uZzsKPj4+ICAgICNkZWZpbmUgUEFHRV9EQVRBX05VTQkoNTAp Cj4+PiAgICAjZGVmaW5lIFdBSVRfVElNRQkoNjAgKiAxMCkKPj4+ICAgICNkZWZpbmUgUFRIUkVB RF9GQUlMCSgodm9pZCAqKS0yKQo+Pj4gLSNkZWZpbmUgTlVNX0JVRkZFUlMJKDUwKQo+Pj4gKyNk ZWZpbmUgTlVNX0JVRkZFUlMJKDIwKQo+Pj4KPj4+ICAgIHN0cnVjdCBtbWFwX2NhY2hlIHsKPj4+ ICAgIAljaGFyCSptbWFwX2J1ZjsKPj4+IEBAIC05ODUsMjggKzk4NiwzMyBAQCBzdHJ1Y3QgbW1h cF9jYWNoZSB7Cj4+PiAgICAJb2ZmX3QgICBtbWFwX2VuZF9vZmZzZXQ7Cj4+PiAgICB9Owo+Pj4K Pj4+ICtlbnVtIHsKPj4+ICsJRkxBR19VTlVTRUQsCj4+PiArCUZMQUdfUkVBRFksCj4+PiArCUZM QUdfRklMTElORwo+Pj4gK307Cj4+PiArc3RydWN0IHBhZ2VfZmxhZyB7Cj4+PiArCW1kZl9wZm5f dCBwZm47Cj4+PiArCWNoYXIgemVybzsKPj4+ICsJY2hhciByZWFkeTsKPj4+ICsJc2hvcnQgaW5k ZXg7Cj4+PiArCXN0cnVjdCBwYWdlX2ZsYWcgKm5leHQ7Cj4+PiArfTsKPj4+ICsKPj4+ICAgIHN0 cnVjdCBwYWdlX2RhdGEKPj4+ICAgIHsKPj4+IC0JbWRmX3Bmbl90IHBmbjsKPj4+IC0JaW50IGR1 bXBhYmxlOwo+Pj4gLQlpbnQgemVybzsKPj4+IC0JdW5zaWduZWQgaW50IGZsYWdzOwo+Pj4gICAg CWxvbmcgc2l6ZTsKPj4+ICAgIAl1bnNpZ25lZCBjaGFyICpidWY7Cj4+PiAtCXB0aHJlYWRfbXV0 ZXhfdCBtdXRleDsKPj4+IC0JLyoKPj4+IC0JICogd2hldGhlciB0aGUgcGFnZV9kYXRhIGlzIHJl YWR5IHRvIGJlIGNvbnN1bWVkCj4+PiAtCSAqLwo+Pj4gLQlpbnQgcmVhZHk7Cj4+PiArCWludCBm bGFnczsKPj4+ICsJaW50IHVzZWQ7Cj4+PiAgICB9Owo+Pj4KPj4+ICAgIHN0cnVjdCB0aHJlYWRf YXJncyB7Cj4+PiAgICAJaW50IHRocmVhZF9udW07Cj4+PiAgICAJdW5zaWduZWQgbG9uZyBsZW5f YnVmX291dDsKPj4+IC0JbWRmX3Bmbl90IHN0YXJ0X3BmbiwgZW5kX3BmbjsKPj4+IC0JaW50IHBh Z2VfZGF0YV9udW07Cj4+PiAgICAJc3RydWN0IGN5Y2xlICpjeWNsZTsKPj4+ICAgIAlzdHJ1Y3Qg cGFnZV9kYXRhICpwYWdlX2RhdGFfYnVmOwo+Pj4gKwlzdHJ1Y3QgcGFnZV9mbGFnICpwYWdlX2Zs YWdfYnVmOwo+Pj4gICAgfTsKPj4+Cj4+PiAgICAvKgo+Pj4gQEAgLTEyOTUsMTEgKzEzMDEsMTIg QEAgc3RydWN0IER1bXBJbmZvIHsKPj4+ICAgIAlwdGhyZWFkX3QgKip0aHJlYWRzOwo+Pj4gICAg CXN0cnVjdCB0aHJlYWRfYXJncyAqa2R1bXBfdGhyZWFkX2FyZ3M7Cj4+PiAgICAJc3RydWN0IHBh Z2VfZGF0YSAqcGFnZV9kYXRhX2J1ZjsKPj4+ICsJc3RydWN0IHBhZ2VfZmxhZyAqKnBhZ2VfZmxh Z19idWY7Cj4+PiArCXNlbV90IHBhZ2VfZmxhZ19idWZfc2VtOwo+Pj4gICAgCXB0aHJlYWRfcnds b2NrX3QgdXNlbW1hcF9yd2xvY2s7Cj4+PiAgICAJbWRmX3Bmbl90IGN1cnJlbnRfcGZuOwo+Pj4g ICAgCXB0aHJlYWRfbXV0ZXhfdCBjdXJyZW50X3Bmbl9tdXRleDsKPj4+IC0JbWRmX3Bmbl90IGNv bnN1bWVkX3BmbjsKPj4+IC0JcHRocmVhZF9tdXRleF90IGNvbnN1bWVkX3Bmbl9tdXRleDsKPj4+ ICsJcHRocmVhZF9tdXRleF90IHBhZ2VfZGF0YV9tdXRleDsKPj4+ICAgIAlwdGhyZWFkX211dGV4 X3QgZmlsdGVyX211dGV4Owo+Pj4gICAgfTsKPj4+ICAgIGV4dGVybiBzdHJ1Y3QgRHVtcEluZm8J CSppbmZvOwo+Pj4KPj4KPj4KPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPj4ga2V4ZWMgbWFpbGluZyBsaXN0Cj4+IGtleGVjQGxpc3RzLmluZnJh ZGVhZC5vcmcKPj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9r ZXhlYwoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K a2V4ZWMgbWFpbGluZyBsaXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo=