From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 311DDC83F14 for ; Tue, 29 Aug 2023 12:34:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235423AbjH2MeY (ORCPT ); Tue, 29 Aug 2023 08:34:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48388 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235436AbjH2MeE (ORCPT ); Tue, 29 Aug 2023 08:34:04 -0400 X-Greylist: delayed 589 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Tue, 29 Aug 2023 05:33:46 PDT Received: from mail10.tencent.com (mail10.tencent.com [14.18.183.58]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 025FDC9 for ; Tue, 29 Aug 2023 05:33:45 -0700 (PDT) Received: from EX-SZ018.tencent.com (unknown [10.28.6.39]) by mail10.tencent.com (Postfix) with ESMTP id 0628ED4373; Tue, 29 Aug 2023 20:23:53 +0800 (CST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tencent.com; s=s202002; t=1693311833; bh=vtv0r2UJCqxLolbxKGvIRrcOu7GwwX+zLY6onEDuvH4=; h=From:To:CC:Subject:Date:References:In-Reply-To; b=BpuM6YyQl4n6XE799gojAFELS06jwC+o2xRvOPLYjl2eGtboFaZdCtBa5veDfBi9A S8DZJTbrhfrSfuI80snj+lyRGw4Z3//8hPhUdEwdQQW3GJv/4aELGu/AZsl/wj8Jiu DtfSzN2vUL9eTE2meRyhMet2iewp2y05Qkp0wQB4= Received: from EX-SZ044.tencent.com (10.28.6.95) by EX-SZ018.tencent.com (10.28.6.39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Tue, 29 Aug 2023 20:23:52 +0800 Received: from EX-SZ044.tencent.com (10.28.6.95) by EX-SZ044.tencent.com (10.28.6.95) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Tue, 29 Aug 2023 20:23:52 +0800 Received: from EX-SZ044.tencent.com ([fe80::c882:be27:b57b:dab4]) by EX-SZ044.tencent.com ([fe80::c882:be27:b57b:dab4%7]) with mapi id 15.01.2507.031; Tue, 29 Aug 2023 20:23:52 +0800 From: =?utf-8?B?ZGlhc3l6aGFuZyjlvKDljb8p?= To: Hui Li , Huacai Chen CC: "loongarch@lists.linux.dev" , "linux-kernel@vger.kernel.org" , "loongson-kernel@lists.loongnix.cn" Subject: Re: [PATCH v3] LoongArch: Add KGDB support Thread-Topic: [PATCH v3] LoongArch: Add KGDB support Thread-Index: AQHZ2nOrF8reDrcsLEa1/7Iy24+wsA== Date: Tue, 29 Aug 2023 12:23:52 +0000 Message-ID: References: <20230817032825.22974-1-lihui@loongson.cn> In-Reply-To: <20230817032825.22974-1-lihui@loongson.cn> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.99.17.240] Content-Type: text/plain; charset="utf-8" Content-ID: <7607A2FE0AB55F46A2A6864EE309C953@tencent.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksIEh1aQ0KDQrlnKggMjAyMy84LzE3IDExOjI4LCBIdWkgTGkg5YaZ6YGTOg0KPiBLZ2RiIGlz IGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBzb3VyY2UgbGV2ZWwgZGVidWdnZXIgZm9yIHRoZSBM aW51eA0KPiBrZXJuZWwuIEl0IGlzIHVzZWQgYWxvbmcgd2l0aCBnZGIgdG8gZGVidWcgYSBMaW51 eCBrZXJuZWwuIGdkYiBjYW4gYmUNCj4gdXNlZCB0byAiYnJlYWsgaW4iIHRvIHRoZSBrZXJuZWwg dG8gaW5zcGVjdCBtZW1vcnksIHZhcmlhYmxlcyBhbmQgcmVncw0KPiBzaW1pbGFyIHRvIHRoZSB3 YXkgYW4gYXBwbGljYXRpb24gZGV2ZWxvcGVyIHdvdWxkIHVzZSBnZGIgdG8gZGVidWcgYW4NCj4g YXBwbGljYXRpb24uDQo+DQo+IEltcGxlbWVudCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGZvciBM b29uZ0FyY2g6DQo+DQo+ICgxKSBDb25uZWN0IHRvIHRoZSBrZXJuZWwgb24gdGhlIHRhcmdldCBt YWNoaW5lIHRocm91Z2ggR0RCIG9uIHRoZQ0KPiAgICAgIGRldmVsb3BtZW50IG1hY2hpbmUuDQo+ DQo+ICgyKSBUaGUgZGVidWdnZWQga2VybmVsIGNhbiBiZSBpbnNlcnRlZCB0aGUgc29mdHdhcmUg YnJlYWtwb2ludC4NCj4NCj4gKDMpIFRoZSBkZWJ1Z2dlZCBrZXJuZWwgY2FuIHJ1biBhbmQgc3Rv cCBhdCB0aGUgYnJlYWtwb2ludC4NCj4NCj4gKDQpIFRoZSBkZWJ1Z2dlZCBrZXJuZWwgY2FuIHJl c3VtZSBydW5uaW5nIGZyb20gdGhlIGJyZWFrcG9pbnQuDQo+DQo+ICg1KSBUaGUgZGVidWdnZWQg a2VybmVsIGNhbiBiZSByZW1vdmVkIGJyZWFrcG9pbnRzLg0KPg0KPiAoNikgUXVlcnkgdGhlIHZh bHVlIG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVyIG9mIHRoZSBrZXJuZWwgb24gdGFyZ2V0DQo+ICAg ICAgbWFjaGluZSB0aHJvdWdoIEdEQiBvbiB0aGUgZGV2ZWxvcG1lbnQgbWFjaGluZS4NCj4NCj4g KDcpIFdoZW4gR0RCIG9uIHRoZSBkZXZlbG9wbWVudCBtYWNoaW5lIGV4aXRzIGRlYnVnZ2luZywg dGhlIGtlcm5lbA0KPiAgICAgIG9uIHRhcmdldCBtYWNoaW5lIGNhbiByZXN1bWUgZXhlY3V0aW9u IG5vcm1hbGx5Lg0KPg0KPiAoOCkgQWRkIGhhcmR3YXJlIGJyZWFrcG9pbnRzL3dhdGNocG9pbnRz IHN1cHBvcnQuDQo+DQo+ICg5KSBBZGQgU29mdHdhcmUgc2luZ2xlLXN0ZXAgc3VwcG9ydCBmb3Ig S0RCLg0KPg0KPiBDby1kZXZlbG9wZWQtYnk6IFFpbmcgWmhhbmcgPHpoYW5ncWluZ0Bsb29uZ3Nv bi5jbj4NCj4gU2lnbmVkLW9mZi1ieTogUWluZyBaaGFuZyA8emhhbmdxaW5nQGxvb25nc29uLmNu Pg0KPiBDby1kZXZlbG9wZWQtYnk6IEJpbmJpbiBaaG91IDx6aG91YmluYmluQGxvb25nc29uLmNu Pg0KPiBTaWduZWQtb2ZmLWJ5OiBCaW5iaW4gWmhvdSA8emhvdWJpbmJpbkBsb29uZ3Nvbi5jbj4N Cj4gU2lnbmVkLW9mZi1ieTogSHVpIExpIDxsaWh1aUBsb29uZ3Nvbi5jbj4NCj4gLS0tDQo+ICAg YXJjaC9sb29uZ2FyY2gvS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgICAxICsNCj4gICBhcmNo L2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rZ2RiLmggICAgICAgfCAxMDYgKysrKw0KPiAgIGFyY2gv bG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N0YWNrZnJhbWUuaCB8ICAgNCArDQo+ICAgYXJjaC9sb29u Z2FyY2gva2VybmVsL01ha2VmaWxlICAgICAgICAgIHwgICAyICsNCj4gICBhcmNoL2xvb25nYXJj aC9rZXJuZWwvZW50cnkuUyAgICAgICAgICAgfCAgIDUgKw0KPiAgIGFyY2gvbG9vbmdhcmNoL2tl cm5lbC9rZ2RiLmMgICAgICAgICAgICB8IDc0OSArKysrKysrKysrKysrKysrKysrKysrKysNCj4g ICBhcmNoL2xvb25nYXJjaC9rZXJuZWwvdHJhcHMuYyAgICAgICAgICAgfCAgIDggKw0KPiAgIDcg ZmlsZXMgY2hhbmdlZCwgODc1IGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg YXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va2dkYi5oDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGFyY2gvbG9vbmdhcmNoL2tlcm5lbC9rZ2RiLmMNCj4NCj4gZGlmZiAtLWdpdCBhL2FyY2gvbG9v bmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnDQo+IGluZGV4IGMzNzk5NTFh ZGIzMC4uNDZiNGMyMTdkYTE0IDEwMDY0NA0KPiAtLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmln DQo+ICsrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWcNCj4gQEAgLTk1LDYgKzk1LDcgQEAgY29u ZmlnIExPT05HQVJDSA0KPiAgIAlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkUN Cj4gICAJc2VsZWN0IEhBVkVfQVJDSF9LQVNBTg0KPiAgIAlzZWxlY3QgSEFWRV9BUkNIX0tGRU5D RQ0KPiArCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQg0KPiAgIAlzZWxlY3QgSEFWRV9BUkNIX01NQVBf Uk5EX0JJVFMgaWYgTU1VDQo+ICAgCXNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVINCj4g ICAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sNCj4gZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdh cmNoL2luY2x1ZGUvYXNtL2tnZGIuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2tnZGIu aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmRmNDZhZmU5 MTE0YQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNt L2tnZGIuaA0KPiBAQCAtMCwwICsxLDEwNiBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgKi8NCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjMgTG9vbmdzb24g VGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBf QVNNX0xPT05HQVJDSF9LR0RCX0gNCj4gKyNkZWZpbmUgX0FTTV9MT09OR0FSQ0hfS0dEQl9IDQo+ ICsNCj4gKyNkZWZpbmUgR0RCX1NJWkVPRl9SRUcJCXNpemVvZih1NjQpDQo+ICsNCj4gKy8qIGdk YiByZW1vdGUgcHJvY290b2wgZXhwZWN0cyB0aGUgZm9sbG93aW5nIHJlZ2lzdGVyIGxheW91dC4g Ki8NCj4gKw0KPiArLyoNCj4gKyAqIEdlbmVyYWwgcHVycG9zZSByZWdzOg0KPiArICogICAgIHIw LXIzMTogNjQgYml0DQo+ICsgKiAgICAgb3JpZ19hMDogNjQgYml0DQo+ICsgKiAgICAgcGMgOiA2 NCBiaXQNCj4gKyAqICAgICBjc3JfYmFkdmFkZHI6IDY0IGJpdA0KPiArICovDQo+ICsjZGVmaW5l IERCR19QVF9SRUdTX0JBU0UJMA0KPiArI2RlZmluZSBEQkdfUFRfUkVHU19OVU0JCTM1DQo+ICsj ZGVmaW5lIERCR19QVF9SRUdTX0VORAkJKERCR19QVF9SRUdTX0JBU0UgKyBEQkdfUFRfUkVHU19O VU0gLSAxKQ0KPiArDQo+ICsvKg0KPiArICogRmxvYXRpbmcgcG9pbnQgcmVnczoNCj4gKyAqICAg ICBmMC1mMzE6IDY0IGJpdA0KPiArICovDQo+ICsjZGVmaW5lIERCR19GUFJfQkFTRQkJKERCR19Q VF9SRUdTX0VORCArIDEpDQo+ICsjZGVmaW5lIERCR19GUFJfTlVNCQkzMg0KPiArI2RlZmluZSBE QkdfRlBSX0VORAkJKERCR19GUFJfQkFTRSArIERCR19GUFJfTlVNIC0gMSkNCj4gKw0KPiArLyoN Cj4gKyAqIENvbmRpdGlvbiBGbGFnIHJlZ3M6DQo+ICsgKiAgICAgZmNjMC1mY2M4OiAxIGJpdA0K PiArICovDQo+ICsjZGVmaW5lIERCR19GQ0NfQkFTRQkJKERCR19GUFJfRU5EICsgMSkNCj4gKyNk ZWZpbmUgREJHX0ZDQ19OVU0JCTgNCj4gKyNkZWZpbmUgREJHX0ZDQ19FTkQJCShEQkdfRkNDX0JB U0UgKyBEQkdfRkNDX05VTSAtIDEpDQo+ICsNCj4gKy8qDQo+ICsgKiBGbG9hdGluZy1wb2ludCBD b250cm9sIGFuZCBTdGF0dXMgcmVnOg0KPiArICogICAgIGZjc3I6IDMyIGJpdA0KPiArICovDQo+ ICsjZGVmaW5lIERCR19GQ1NSX05VTQkJMQ0KPiArI2RlZmluZSBEQkdfRkNTUgkJKERCR19GQ0Nf RU5EICsgMSkNCj4gKw0KPiArI2RlZmluZSBEQkdfU0NSX0JBU0UJCShEQkdfRkNTUiArIDEpDQo+ ICsjZGVmaW5lIERCR19TQ1JfTlVNCQk0DQo+ICsjZGVmaW5lIERCR19TQ1JfRU5ECQkoREJHX1ND Ul9CQVNFICsgREJHX1NDUl9OVU0gLSAxKQ0KPiArDQo+ICsjZGVmaW5lIERCR19NQVhfUkVHX05V TQkJKERCR19TQ1JfRU5EICsgMSkNCj4gKw0KPiArLyoNCj4gKyAqIFNpemUgb2YgSS9PIGJ1ZmZl ciBmb3IgZ2RiIHBhY2tldC4NCj4gKyAqIGNvbnNpZGVyaW5nIHRvIGhvbGQgYWxsIHJlZ2lzdGVy IGNvbnRlbnRzLCBzaXplIGlzIHNldA0KPiArICovDQo+ICsjZGVmaW5lIEJVRk1BWAkJCTIwNDgN Cj4gKw0KPiArLyoNCj4gKyAqIE51bWJlciBvZiBieXRlcyByZXF1aXJlZCBmb3IgZ2RiX3JlZ3Mg YnVmZmVyLg0KPiArICogUFRfUkVHUyBhbmQgRlBSOiA4IGJ5dGVzOyBGQ1NSOiA0IGJ5dGVzOyBG Q0M6IDEgYnl0ZXMuDQo+ICsgKiBHREIgZmFpbHMgdG8gY29ubmVjdCBmb3Igc2l6ZSBiZXlvbmQg dGhpcyB3aXRoIGVycm9yDQo+ICsgKiAiJ2cnIHBhY2tldCByZXBseSBpcyB0b28gbG9uZyINCj4g KyAqLw0KPiArI2RlZmluZSBOVU1SRUdCWVRFUwkJKChEQkdfUFRfUkVHU19OVU0gKyBEQkdfRlBS X05VTSkgKiBzaXplb2YoR0RCX1NJWkVPRl9SRUcpICsgXA0KPiArCQkJCTEgKyBEQkdfRkNTUl9O VU0gKiA0KQ0KPiArDQo+ICsjZGVmaW5lIEJSRUFLX0lOU1RSX1NJWkUJNA0KPiArI2RlZmluZSBD QUNIRV9GTFVTSF9JU19TQUZFCTANCj4gKw0KPiArLyogUmVnaXN0ZXIgbnVtYmVycyBvZiB2YXJp b3VzIGltcG9ydGFudCByZWdpc3RlcnMuICovDQo+ICtlbnVtIGRiZ19sb29uZ2FyY2hfcmVnbnVt IHsNCj4gKwlEQkdfTE9PTkdBUkNIX1pFUk8gPSAwLA0KPiArCURCR19MT09OR0FSQ0hfUkEsDQo+ ICsJREJHX0xPT05HQVJDSF9UUCwNCj4gKwlEQkdfTE9PTkdBUkNIX1NQLA0KPiArCURCR19MT09O R0FSQ0hfQTAsDQo+ICsJREJHX0xPT05HQVJDSF9GUCA9IDIyLA0KPiArCURCR19MT09OR0FSQ0hf UzAsDQo+ICsJREJHX0xPT05HQVJDSF9TMSwNCj4gKwlEQkdfTE9PTkdBUkNIX1MyLA0KPiArCURC R19MT09OR0FSQ0hfUzMsDQo+ICsJREJHX0xPT05HQVJDSF9TNCwNCj4gKwlEQkdfTE9PTkdBUkNI X1M1LA0KPiArCURCR19MT09OR0FSQ0hfUzYsDQo+ICsJREJHX0xPT05HQVJDSF9TNywNCj4gKwlE QkdfTE9PTkdBUkNIX1M4LA0KPiArCURCR19MT09OR0FSQ0hfT1JJR19BMCA9IDMyLA0KPiArCURC R19MT09OR0FSQ0hfUEMsDQo+ICsJREJHX0xPT05HQVJDSF9CQURWID0gMzQsDQo+ICsJREJHX0xP T05HQVJDSF9TQ1IwID0gNzYsDQo+ICsJREJHX0xPT05HQVJDSF9TQ1IxLA0KPiArCURCR19MT09O R0FSQ0hfU0NSMiwNCj4gKwlEQkdfTE9PTkdBUkNIX1NDUjMgPSA3OQ0KPiArfTsNCj4gKw0KPiAr I2lmZGVmIENPTkZJR19LR0RCDQo+ICt2b2lkIGFyY2hfa2dkYl9icmVha3BvaW50KHZvaWQpOw0K PiArdm9pZCBrZ2RiX2NvbXBpbGVkX2JyZWFrKHZvaWQpOw0KPiArYm9vbCBrZ2RiX2JyZWFrcG9p bnRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7DQo+ICtleHRlcm4gaW50IGRiZ19rZGJf bW9kZTsNCj4gKyNlbHNlIC8qICFDT05GSUdfS0dEQiAqLw0KPiArc3RhdGljIGlubGluZSBib29s IGtnZGJfYnJlYWtwb2ludF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IHJldHVybiBm YWxzZTsgfQ0KPiArI2VuZGlmIC8qIENPTkZJR19LR0RCICovDQo+ICsNCj4gKyNlbmRpZiAvKiBf X0FTTV9LR0RCX0hfICovDQo+IGRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2Fz bS9zdGFja2ZyYW1lLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zdGFja2ZyYW1lLmgN Cj4gaW5kZXggN2RmODBlNmFlOWQyLi40ZmIxZTY0MDhiOTggMTAwNjQ0DQo+IC0tLSBhL2FyY2gv bG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N0YWNrZnJhbWUuaA0KPiArKysgYi9hcmNoL2xvb25nYXJj aC9pbmNsdWRlL2FzbS9zdGFja2ZyYW1lLmgNCj4gQEAgLTE1OCw2ICsxNTgsMTAgQEANCj4gICAJ Y2ZpX3N0ICB1MCwgUFRfUjIxLCBcZG9jZmkNCj4gICAJY3NycmQJdTAsIFBFUkNQVV9CQVNFX0tT DQo+ICAgOToNCj4gKyNpZmRlZiBDT05GSUdfS0dEQg0KPiArCWxpLncJdDAsIENTUl9DUk1EX1dF DQo+ICsJY3NyeGNoZwl0MCwgdDAsIExPT05HQVJDSF9DU1JfQ1JNRA0KPiArI2VuZGlmDQo+ICAg CS5lbmRtDQo+ICAgDQo+ICAgCS5tYWNybwlTQVZFX0FMTCBkb2NmaT0wDQo+IGRpZmYgLS1naXQg YS9hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2xvb25nYXJjaC9rZXJuZWwv TWFrZWZpbGUNCj4gaW5kZXggNjYwMWI2ZDAwNzM4Li5jNDRlY2QyN2I1MmMgMTAwNjQ0DQo+IC0t LSBhL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZQ0KPiArKysgYi9hcmNoL2xvb25nYXJj aC9rZXJuZWwvTWFrZWZpbGUNCj4gQEAgLTY4LDQgKzY4LDYgQEAgb2JqLSQoQ09ORklHX1VQUk9C RVMpCQkrPSB1cHJvYmVzLm8NCj4gICANCj4gICBvYmotJChDT05GSUdfSlVNUF9MQUJFTCkJKz0g anVtcF9sYWJlbC5vDQo+ICAgDQo+ICtvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubw0KPiAr DQo+ICAgQ1BQRkxBR1Nfdm1saW51eC5sZHMJCTo9ICQoS0JVSUxEX0NGTEFHUykNCj4gZGlmZiAt LWdpdCBhL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9sb29uZ2FyY2gva2Vy bmVsL2VudHJ5LlMNCj4gaW5kZXggZDczN2UzY2Y0MmQzLi4wMDY1NDMyMjM0OGUgMTAwNjQ0DQo+ IC0tLSBhL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TDQo+ICsrKyBiL2FyY2gvbG9vbmdh cmNoL2tlcm5lbC9lbnRyeS5TDQo+IEBAIC01OCw2ICs1OCwxMSBAQCBTWU1fRlVOQ19TVEFSVCho YW5kbGVfc3lzY2FsbCkNCj4gICANCj4gICAJU0FWRV9TVEFUSUMNCj4gICANCj4gKyNpZmRlZiBD T05GSUdfS0dEQg0KPiArCWxpLncJdDEsIENTUl9DUk1EX1dFDQo+ICsJY3NyeGNoZwl0MSwgdDEs IExPT05HQVJDSF9DU1JfQ1JNRA0KPiArI2VuZGlmDQo+ICsNCj4gICAJbW92ZQkJdTAsIHQwDQo+ ICAgCWxpLmQJCXRwLCB+X1RIUkVBRF9NQVNLDQo+ICAgCWFuZAkJdHAsIHRwLCBzcA0KPiBkaWZm IC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL2tnZGIuYyBiL2FyY2gvbG9vbmdhcmNoL2tl cm5lbC9rZ2RiLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw Li5iMWM1OTI0YzcwM2UNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9hcmNoL2xvb25nYXJjaC9r ZXJuZWwva2dkYi5jDQo+IEBAIC0wLDAgKzEsNzQ5IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ICsvKg0KPiArICogTG9vbmdBcmNoIEtHREIgc3VwcG9y dA0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMyBMb29uZ3NvbiBUZWNobm9sb2d5IENv cnBvcmF0aW9uIExpbWl0ZWQNCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvaHdfYnJl YWtwb2ludC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L2tnZGIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wcm9jZXNzb3IuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9wdHJhY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L3NtcC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8YXNtL2ZwdS5oPg0KPiArI2luY2x1 ZGUgPGFzbS9od19icmVha3BvaW50Lmg+DQo+ICsjaW5jbHVkZSA8YXNtL2luc3QuaD4NCj4gKyNp bmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4NCj4gKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+DQo+ICsj aW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4NCj4gKw0KPiAraW50IGtnZGJfd2F0Y2hfYWN0aXZh dGVkOw0KPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RlcHBlZF9hZGRyZXNzOw0KPiArc3RhdGlj IHVuc2lnbmVkIGludCBzdGVwcGVkX29wY29kZTsNCj4gKw0KPiArc3RydWN0IGRiZ19yZWdfZGVm X3QgZGJnX3JlZ19kZWZbREJHX01BWF9SRUdfTlVNXSA9IHsNCj4gKwl7ICJyMCIsIEdEQl9TSVpF T0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1swXSkgfSwNCj4gKwl7ICJyMSIs IEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sxXSkgfSwNCj4g Kwl7ICJyMiIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sy XSkgfSwNCj4gKwl7ICJyMyIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVn cywgcmVnc1szXSkgfSwNCj4gKwl7ICJyNCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1 Y3QgcHRfcmVncywgcmVnc1s0XSkgfSwNCj4gKwl7ICJyNSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZz ZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s1XSkgfSwNCj4gKwl7ICJyNiIsIEdEQl9TSVpFT0Zf UkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s2XSkgfSwNCj4gKwl7ICJyNyIsIEdE Ql9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s3XSkgfSwNCj4gKwl7 ICJyOCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s4XSkg fSwNCj4gKwl7ICJyOSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywg cmVnc1s5XSkgfSwNCj4gKwl7ICJyMTAiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0 IHB0X3JlZ3MsIHJlZ3NbMTBdKSB9LA0KPiArCXsgInIxMSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZz ZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sxMV0pIH0sDQo+ICsJeyAicjEyIiwgR0RCX1NJWkVP Rl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzEyXSkgfSwNCj4gKwl7ICJyMTMi LCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMTNdKSB9LA0K PiArCXsgInIxNCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVn c1sxNF0pIH0sDQo+ICsJeyAicjE1IiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBw dF9yZWdzLCByZWdzWzE1XSkgfSwNCj4gKwl7ICJyMTYiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0 b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMTZdKSB9LA0KPiArCXsgInIxNyIsIEdEQl9TSVpFT0Zf UkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sxN10pIH0sDQo+ICsJeyAicjE4Iiwg R0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzE4XSkgfSwNCj4g Kwl7ICJyMTkiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3Nb MTldKSB9LA0KPiArCXsgInIyMCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRf cmVncywgcmVnc1syMF0pIH0sDQo+ICsJeyAicjIxIiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9m KHN0cnVjdCBwdF9yZWdzLCByZWdzWzIxXSkgfSwNCj4gKwl7ICJyMjIiLCBHREJfU0laRU9GX1JF Rywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMjJdKSB9LA0KPiArCXsgInIyMyIsIEdE Ql9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1syM10pIH0sDQo+ICsJ eyAicjI0IiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzI0 XSkgfSwNCj4gKwl7ICJyMjUiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3Jl Z3MsIHJlZ3NbMjVdKSB9LA0KPiArCXsgInIyNiIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihz dHJ1Y3QgcHRfcmVncywgcmVnc1syNl0pIH0sDQo+ICsJeyAicjI3IiwgR0RCX1NJWkVPRl9SRUcs IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzI3XSkgfSwNCj4gKwl7ICJyMjgiLCBHREJf U0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMjhdKSB9LA0KPiArCXsg InIyOSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1syOV0p IH0sDQo+ICsJeyAicjMwIiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdz LCByZWdzWzMwXSkgfSwNCj4gKwl7ICJyMzEiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3Ry dWN0IHB0X3JlZ3MsIHJlZ3NbMzFdKSB9LA0KPiArCXsgIm9yaWdfYTAiLCBHREJfU0laRU9GX1JF Rywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIG9yaWdfYTApIH0sDQo+ICsJeyAicGMiLCBHREJf U0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGNzcl9lcmEpIH0sDQo+ICsJeyAi YmFkdiIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgY3NyX2JhZHZh ZGRyKSB9LA0KPiArCXsgImYwIiwgR0RCX1NJWkVPRl9SRUcsIDAgfSwNCj4gKwl7ICJmMSIsIEdE Ql9TSVpFT0ZfUkVHLCAxIH0sDQo+ICsJeyAiZjIiLCBHREJfU0laRU9GX1JFRywgMiB9LA0KPiAr CXsgImYzIiwgR0RCX1NJWkVPRl9SRUcsIDMgfSwNCj4gKwl7ICJmNCIsIEdEQl9TSVpFT0ZfUkVH LCA0IH0sDQo+ICsJeyAiZjUiLCBHREJfU0laRU9GX1JFRywgNSB9LA0KPiArCXsgImY2IiwgR0RC X1NJWkVPRl9SRUcsIDYgfSwNCj4gKwl7ICJmNyIsIEdEQl9TSVpFT0ZfUkVHLCA3IH0sDQo+ICsJ eyAiZjgiLCBHREJfU0laRU9GX1JFRywgOCB9LA0KPiArCXsgImY5IiwgR0RCX1NJWkVPRl9SRUcs IDkgfSwNCj4gKwl7ICJmMTAiLCBHREJfU0laRU9GX1JFRywgMTAgfSwNCj4gKwl7ICJmMTEiLCBH REJfU0laRU9GX1JFRywgMTEgfSwNCj4gKwl7ICJmMTIiLCBHREJfU0laRU9GX1JFRywgMTIgfSwN Cj4gKwl7ICJmMTMiLCBHREJfU0laRU9GX1JFRywgMTMgfSwNCj4gKwl7ICJmMTQiLCBHREJfU0la RU9GX1JFRywgMTQgfSwNCj4gKwl7ICJmMTUiLCBHREJfU0laRU9GX1JFRywgMTUgfSwNCj4gKwl7 ICJmMTYiLCBHREJfU0laRU9GX1JFRywgMTYgfSwNCj4gKwl7ICJmMTciLCBHREJfU0laRU9GX1JF RywgMTcgfSwNCj4gKwl7ICJmMTgiLCBHREJfU0laRU9GX1JFRywgMTggfSwNCj4gKwl7ICJmMTki LCBHREJfU0laRU9GX1JFRywgMTkgfSwNCj4gKwl7ICJmMjAiLCBHREJfU0laRU9GX1JFRywgMjAg fSwNCj4gKwl7ICJmMjEiLCBHREJfU0laRU9GX1JFRywgMjEgfSwNCj4gKwl7ICJmMjIiLCBHREJf U0laRU9GX1JFRywgMjIgfSwNCj4gKwl7ICJmMjMiLCBHREJfU0laRU9GX1JFRywgMjMgfSwNCj4g Kwl7ICJmMjQiLCBHREJfU0laRU9GX1JFRywgMjQgfSwNCj4gKwl7ICJmMjUiLCBHREJfU0laRU9G X1JFRywgMjUgfSwNCj4gKwl7ICJmMjYiLCBHREJfU0laRU9GX1JFRywgMjYgfSwNCj4gKwl7ICJm MjciLCBHREJfU0laRU9GX1JFRywgMjcgfSwNCj4gKwl7ICJmMjgiLCBHREJfU0laRU9GX1JFRywg MjggfSwNCj4gKwl7ICJmMjkiLCBHREJfU0laRU9GX1JFRywgMjkgfSwNCj4gKwl7ICJmMzAiLCBH REJfU0laRU9GX1JFRywgMzAgfSwNCj4gKwl7ICJmMzEiLCBHREJfU0laRU9GX1JFRywgMzEgfSwN Cj4gKwl7ICJmY2MwIiwgMSwgMCB9LA0KPiArCXsgImZjYzEiLCAxLCAxIH0sDQo+ICsJeyAiZmNj MiIsIDEsIDIgfSwNCj4gKwl7ICJmY2MzIiwgMSwgMyB9LA0KPiArCXsgImZjYzQiLCAxLCA0IH0s DQo+ICsJeyAiZmNjNSIsIDEsIDUgfSwNCj4gKwl7ICJmY2M2IiwgMSwgNiB9LA0KPiArCXsgImZj YzciLCAxLCA3IH0sDQo+ICsJeyAiZmNzciIsIDQsIDAgfSwNCj4gKwl7ICJzY3IwIiwgR0RCX1NJ WkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBsb29uZ2FyY2hfbGJ0LCBzY3IwKSB9LA0KPiArCXsg InNjcjEiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IGxvb25nYXJjaF9sYnQsIHNj cjEpIH0sDQo+ICsJeyAic2NyMiIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgbG9v bmdhcmNoX2xidCwgc2NyMikgfSwNCj4gKwl7ICJzY3IzIiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNl dG9mKHN0cnVjdCBsb29uZ2FyY2hfbGJ0LCBzY3IzKSB9LA0KPiArfTsNCj4gKw0KPiAraW50IGRi Z19zZXRfcmVnKGludCByZWdubywgdm9pZCAqbWVtLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykNCj4g K3sNCj4gKwlpbnQgcmVnX29mZnNldCwgcmVnX3NpemU7DQo+ICsNCj4gKwlpZiAocmVnbm8gPCAw IHx8IHJlZ25vID49IERCR19NQVhfUkVHX05VTSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsN Cj4gKwlyZWdfb2Zmc2V0ID0gZGJnX3JlZ19kZWZbcmVnbm9dLm9mZnNldDsNCj4gKwlyZWdfc2l6 ZSA9IGRiZ19yZWdfZGVmW3JlZ25vXS5zaXplOw0KPiArDQo+ICsJaWYgKHJlZ19vZmZzZXQgPT0g LTEpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJLyogSGFuZGxlIGdlbmVyYWwtcHVycG9zZS9v cmlnX2EwL3BjL2JhZHYgcmVnaXN0ZXJzICovDQo+ICsJaWYgKHJlZ25vIDw9IERCR19QVF9SRUdT X0VORCkgew0KPiArCQltZW1jcHkoKHZvaWQgKilyZWdzICsgcmVnX29mZnNldCwgbWVtLCByZWdf c2l6ZSk7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCWlmICghY3VycmVudCB8fCAh KHJlZ3MtPmNzcl9ldWVuICYgQ1NSX0VVRU5fRlBFTikpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ ICsJLyogSGFuZGxlIEZQIHJlZ2lzdGVycyAqLw0KPiArCXN3aXRjaCAocmVnbm8pIHsNCj4gKwlj YXNlIERCR19GQ1NSOgkJCQkvKiBQcm9jZXNzIHRoZSBmY3NyL2ZzciAqLw0KPiArCQltZW1jcHko KHZvaWQgKikmY3VycmVudC0+dGhyZWFkLmZwdS5mY3NyLCBtZW0sIHJlZ19zaXplKTsNCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBEQkdfRkNDX0JBU0UgLi4uIERCR19GQ0NfRU5EOgkvKiBQcm9jZXNz IHRoZSBmY2MgKi8NCj4gKwkJbWVtY3B5KChjaGFyICopJmN1cnJlbnQtPnRocmVhZC5mcHUuZmNj ICsgcmVnX29mZnNldCwgbWVtLCByZWdfc2l6ZSk7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgREJH X1NDUl9CQVNFIC4uLiBEQkdfU0NSX0VORDoJLyogUHJvY2VzcyB0aGUgc2NyICovDQo+ICsJCW1l bWNweSgodm9pZCAqKSZjdXJyZW50LT50aHJlYWQubGJ0LnNjcjAgKyByZWdfb2Zmc2V0LCBtZW0s IHJlZ19zaXplKTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJbWVtY3B5KCh2b2lk ICopJmN1cnJlbnQtPnRocmVhZC5mcHUuZnByW3JlZ19vZmZzZXRdLCBtZW0sIHJlZ19zaXplKTsN Cj4gKwl9DQo+ICsNCj4gKwlyZXN0b3JlX2ZwKGN1cnJlbnQpOw0KPiArCXJldHVybiAwOw0KPiAr fQ0KPiArDQo+ICtjaGFyICpkYmdfZ2V0X3JlZyhpbnQgcmVnbm8sIHZvaWQgKm1lbSwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpDQo+ICt7DQo+ICsJaW50IHJlZ19vZmZzZXQsIHJlZ19zaXplOw0KPiAr DQo+ICsJaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+PSBEQkdfTUFYX1JFR19OVU0pDQo+ICsJCXJl dHVybiBOVUxMOw0KPiArDQo+ICsJcmVnX29mZnNldCA9IGRiZ19yZWdfZGVmW3JlZ25vXS5vZmZz ZXQ7DQo+ICsJcmVnX3NpemUgPSBkYmdfcmVnX2RlZltyZWdub10uc2l6ZTsNCj4gKw0KPiArCWlm IChyZWdfb2Zmc2V0ID09IC0xKQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiArCS8qIEhhbmRsZSBn ZW5lcmFsLXB1cnBvc2Uvb3JpZ19hMC9wYy9iYWR2IHJlZ2lzdGVycyAqLw0KPiArCWlmIChyZWdu byA8PSBEQkdfUFRfUkVHU19FTkQpIHsNCj4gKwkJbWVtY3B5KG1lbSwgKHZvaWQgKilyZWdzICsg cmVnX29mZnNldCwgcmVnX3NpemUpOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwlp ZiAoIWN1cnJlbnQgfHwgIShyZWdzLT5jc3JfZXVlbiAmIENTUl9FVUVOX0ZQRU4pKQ0KPiArCQln b3RvIG91dDsNCj4gKw0KPiArCXNhdmVfZnAoY3VycmVudCk7DQo+ICsNCj4gKwkvKiBIYW5kbGUg RlAgcmVnaXN0ZXJzICovDQo+ICsJc3dpdGNoIChyZWdubykgew0KPiArCWNhc2UgREJHX0ZDU1I6 CQkJCS8qIFByb2Nlc3MgdGhlIGZjc3IvZnNyICovDQo+ICsJCW1lbWNweShtZW0sICh2b2lkICop JmN1cnJlbnQtPnRocmVhZC5mcHUuZmNzciwgcmVnX3NpemUpOw0KPiArCQlicmVhazsNCj4gKwlj YXNlIERCR19GQ0NfQkFTRSAuLi4gREJHX0ZDQ19FTkQ6CS8qIFByb2Nlc3MgdGhlIGZjYyAqLw0K PiArCQltZW1jcHkobWVtLCAoY2hhciAqKSZjdXJyZW50LT50aHJlYWQuZnB1LmZjYyArIHJlZ19v ZmZzZXQsIHJlZ19zaXplKTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBEQkdfU0NSX0JBU0UgLi4u IERCR19TQ1JfRU5EOgkvKiBQcm9jZXNzIHRoZSBzY3IgKi8NCj4gKwkJbWVtY3B5KG1lbSwgKHZv aWQgKikmY3VycmVudC0+dGhyZWFkLmxidC5zY3IwICsgcmVnX29mZnNldCwgcmVnX3NpemUpOw0K PiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQltZW1jcHkobWVtLCAodm9pZCAqKSZjdXJy ZW50LT50aHJlYWQuZnB1LmZwcltyZWdfb2Zmc2V0XSwgcmVnX3NpemUpOw0KPiArCX0NCj4gKw0K PiArb3V0Og0KPiArCXJldHVybiBkYmdfcmVnX2RlZltyZWdub10ubmFtZTsNCj4gK30NCj4gKw0K PiArLyoNCj4gKyAqIFNpbWlsYXIgdG8gcmVnc190b19nZGJfcmVncygpIGV4Y2VwdCB0aGF0IHBy b2Nlc3MgaXMgc2xlZXBpbmcgYW5kIHNvDQo+ICsgKiB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZ2V0 IGFsbCB0aGUgaW5mby4NCj4gKyAqLw0KPiArdm9pZCBzbGVlcGluZ190aHJlYWRfdG9fZ2RiX3Jl Z3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkNCj4gK3sN Cj4gKwkvKiBJbml0aWFsaXplIHRvIHplcm8gKi8NCj4gKwltZW1zZXQoKGNoYXIgKilnZGJfcmVn cywgMCwgTlVNUkVHQllURVMpOw0KPiArDQo+ICsJZ2RiX3JlZ3NbREJHX0xPT05HQVJDSF9SQV0g PSBwLT50aHJlYWQucmVnMDE7DQo+ICsJZ2RiX3JlZ3NbREJHX0xPT05HQVJDSF9UUF0gPSAobG9u ZylwOw0KPiArCWdkYl9yZWdzW0RCR19MT09OR0FSQ0hfU1BdID0gcC0+dGhyZWFkLnJlZzAzOw0K PiArDQo+ICsJLyogUzAgLSBTOCAqLw0KPiArCWdkYl9yZWdzW0RCR19MT09OR0FSQ0hfUzBdID0g cC0+dGhyZWFkLnJlZzIzOw0KPiArCWdkYl9yZWdzW0RCR19MT09OR0FSQ0hfUzFdID0gcC0+dGhy ZWFkLnJlZzI0Ow0KPiArCWdkYl9yZWdzW0RCR19MT09OR0FSQ0hfUzJdID0gcC0+dGhyZWFkLnJl ZzI1Ow0KPiArCWdkYl9yZWdzW0RCR19MT09OR0FSQ0hfUzNdID0gcC0+dGhyZWFkLnJlZzI2Ow0K PiArCWdkYl9yZWdzW0RCR19MT09OR0FSQ0hfUzRdID0gcC0+dGhyZWFkLnJlZzI3Ow0KPiArCWdk Yl9yZWdzW0RCR19MT09OR0FSQ0hfUzVdID0gcC0+dGhyZWFkLnJlZzI4Ow0KPiArCWdkYl9yZWdz W0RCR19MT09OR0FSQ0hfUzZdID0gcC0+dGhyZWFkLnJlZzI5Ow0KPiArCWdkYl9yZWdzW0RCR19M T09OR0FSQ0hfUzddID0gcC0+dGhyZWFkLnJlZzMwOw0KPiArCWdkYl9yZWdzW0RCR19MT09OR0FS Q0hfUzhdID0gcC0+dGhyZWFkLnJlZzMxOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBQQw0KPiArCSAq IHVzZSByZXR1cm4gYWRkcmVzcyAoUkEpLCBpLmUuIHRoZSBtb21lbnQgYWZ0ZXIgcmV0dXJuIGZy b20gcmVzdW1lKCkNCj4gKwkgKi8NCj4gKwlnZGJfcmVnc1tEQkdfTE9PTkdBUkNIX1BDXSA9IHAt PnRocmVhZC5yZWcwMTsNCj4gKw0KPiArCWdkYl9yZWdzW0RCR19MT09OR0FSQ0hfU0NSMF0gPSBw LT50aHJlYWQubGJ0LnNjcjA7DQo+ICsJZ2RiX3JlZ3NbREJHX0xPT05HQVJDSF9TQ1IxXSA9IHAt PnRocmVhZC5sYnQuc2NyMTsNCj4gKwlnZGJfcmVnc1tEQkdfTE9PTkdBUkNIX1NDUjJdID0gcC0+ dGhyZWFkLmxidC5zY3IyOw0KPiArCWdkYl9yZWdzW0RCR19MT09OR0FSQ0hfU0NSM10gPSBwLT50 aHJlYWQubGJ0LnNjcjM7DQo+ICt9DQo+ICsNCj4gK3ZvaWQga2dkYl9hcmNoX3NldF9wYyhzdHJ1 Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYykNCj4gK3sNCj4gKwlyZWdzLT5jc3Jf ZXJhID0gcGM7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgYXJjaF9rZ2RiX2JyZWFrcG9pbnQodm9pZCkN Cj4gK3sNCj4gKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCVwNCj4gKwkJIi5nbG9ibCBrZ2Ri X2NvbXBpbGVkX2JyZWFrXG5cdCIJXA0KPiArCQkibm9wXG4iCQkJCQlcDQo+ICsJCSJrZ2RiX2Nv bXBpbGVkX2JyZWFrOlx0YnJlYWsgMlxuXHQiKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIENh bGxzIGxpbnV4X2RlYnVnX2hvb2sgYmVmb3JlIHRoZSBrZXJuZWwgZGllcy4gSWYgS0dEQiBpcyBl bmFibGVkLA0KPiArICogdGhlbiB0cnkgdG8gZmFsbCBpbnRvIHRoZSBkZWJ1Z2dlcg0KPiArICov DQo+ICtzdGF0aWMgaW50IGtnZGJfbG9vbmdhcmNoX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICpwdHIpDQo+ICt7DQo+ICsJc3RydWN0 IGRpZV9hcmdzICphcmdzID0gKHN0cnVjdCBkaWVfYXJncyAqKXB0cjsNCj4gKwlzdHJ1Y3QgcHRf cmVncyAqcmVncyA9IGFyZ3MtPnJlZ3M7DQo+ICsNCj4gKwkvKiBVc2Vyc3BhY2UgZXZlbnRzLCBp Z25vcmUuICovDQo+ICsJaWYgKHVzZXJfbW9kZShyZWdzKSkNCj4gKwkJcmV0dXJuIE5PVElGWV9E T05FOw0KPiArDQo+ICsJaWYgKCFrZ2RiX2lvX21vZHVsZV9yZWdpc3RlcmVkKQ0KPiArCQlyZXR1 cm4gTk9USUZZX0RPTkU7DQo+ICsNCj4gKwlpZiAoYXRvbWljX3JlYWQoJmtnZGJfYWN0aXZlKSAh PSAtMSkNCj4gKwkJa2dkYl9ubWljYWxsYmFjayhzbXBfcHJvY2Vzc29yX2lkKCksIHJlZ3MpOw0K PiArDQo+ICsJaWYgKGtnZGJfaGFuZGxlX2V4Y2VwdGlvbihhcmdzLT50cmFwbnIsIGFyZ3MtPnNp Z25yLCBjbWQsIHJlZ3MpKQ0KPiArCQlyZXR1cm4gTk9USUZZX0RPTkU7DQo+ICsNCj4gKwlpZiAo YXRvbWljX3JlYWQoJmtnZGJfc2V0dGluZ19icmVha3BvaW50KSkNCj4gKwkJaWYgKHJlZ3MtPmNz cl9lcmEgPT0gKHVuc2lnbmVkIGxvbmcpJmtnZGJfY29tcGlsZWRfYnJlYWspDQo+ICsJCQlyZWdz LT5jc3JfZXJhICs9IExPT05HQVJDSF9JTlNOX1NJWkU7DQo+ICsNCj4gKwlyZXR1cm4gTk9USUZZ X1NUT1A7DQo+ICt9DQo+ICsNCj4gK2Jvb2wga2dkYl9icmVha3BvaW50X2hhbmRsZXIoc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpDQo+ICt7DQo+ICsJc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7DQo+ICsJ CS5yZWdzCT0gcmVncywNCj4gKwkJLnN0cgk9ICJCcmVhayIsDQo+ICsJCS5lcnIJPSBCUktfS0RC LA0KPiArCQkudHJhcG5yID0gcmVhZF9jc3JfZXhjb2RlKCksDQo+ICsJCS5zaWducgk9IFNJR1RS QVAsDQo+ICsNCj4gKwl9Ow0KPiArDQo+ICsJcmV0dXJuIChrZ2RiX2xvb25nYXJjaF9ub3RpZnko TlVMTCwgRElFX1RSQVAsICZhcmdzKSA9PSBOT1RJRllfU1RPUCkgPyB0cnVlIDogZmFsc2U7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2dkYl9ub3RpZmllciA9 IHsNCj4gKwkubm90aWZpZXJfY2FsbCA9IGtnZGJfbG9vbmdhcmNoX25vdGlmeSwNCj4gK307DQo+ ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBrZ2RiX2FyY2hfdXBkYXRlX2FkZHIoc3RydWN0IHB0 X3JlZ3MgKnJlZ3MsDQo+ICsJCQkJCSBjaGFyICpyZW1jb21faW5fYnVmZmVyKQ0KPiArew0KPiAr CXVuc2lnbmVkIGxvbmcgYWRkcjsNCj4gKwljaGFyICpwdHI7DQo+ICsNCj4gKwlwdHIgPSAmcmVt Y29tX2luX2J1ZmZlclsxXTsNCj4gKwlpZiAoa2dkYl9oZXgybG9uZygmcHRyLCAmYWRkcikpDQo+ ICsJCXJlZ3MtPmNzcl9lcmEgPSBhZGRyOw0KPiArfQ0KPiArDQo+ICsvKiBDYWxjdWxhdGUgdGhl IG5ldyBhZGRyZXNzIGZvciBhZnRlciBhIHN0ZXAgKi8NCj4gK3N0YXRpYyBpbnQgZ2V0X3N0ZXBf YWRkcmVzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyAqbmV4dF9hZGRyKQ0K PiArew0KPiArCXVuc2lnbmVkIGludCBzaSwgc2lfbCwgc2lfaCwgcmQsIHJqLCBjajsNCj4gKwlj aGFyIGNqX3ZhbDsNCmNqX3ZhbCBpcyB1c2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGhhdmUg eW91IHRlc3RlZCBpdD8NCg0KQlRXLCBtb3N0IG9mIHRoaXMgcGF0Y2ggaXMgd3JpdHRlbiBieSBt ZS4gQW5kIGFzIEkga25vdywgbW9zdCBvZiB0aGUgDQphZGRpdGlvbmFsIHdvcmsNCg0KaXMgZG9u ZSBieSBCaW5iaW4gWmhvdS4gSG93IGNhbiB5b3UgY2hhbmdlIHRoZSBtYWluIGF1dGhvciB0byB5 b3Vyc2VsZiwNCg0Kd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gb3VyIG9mZmxpbmUgY29tbXVuaWNh dGlvbj8NCg0KVGhhbmtzLA0KDQotUWluZw0KPiArCXVuc2lnbmVkIGxvbmcgcGMgPSBpbnN0cnVj dGlvbl9wb2ludGVyKHJlZ3MpOw0KPiArCXVuaW9uIGxvb25nYXJjaF9pbnN0cnVjdGlvbiAqaXAg PSAodW5pb24gbG9vbmdhcmNoX2luc3RydWN0aW9uICopcGM7DQo+ICsNCj4gKwlpZiAocGMgJiAz KSB7DQo+ICsJCXByX3dhcm4oIiVzOiBpbnZhbGlkIHBjIDB4JWx4XG4iLCBfX2Z1bmNfXywgcGMp Ow0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwkqbmV4dF9hZGRyID0gcGMg KyBMT09OR0FSQ0hfSU5TTl9TSVpFOw0KPiArDQo+ICsJc2lfaCA9IGlwLT5yZWcwaTI2X2Zvcm1h dC5pbW1lZGlhdGVfaDsNCj4gKwlzaV9sID0gaXAtPnJlZzBpMjZfZm9ybWF0LmltbWVkaWF0ZV9s Ow0KPiArCXN3aXRjaCAoaXAtPnJlZzBpMjZfZm9ybWF0Lm9wY29kZSkgew0KPiArCWNhc2UgYl9v cDoNCj4gKwkJKm5leHRfYWRkciA9IHBjICsgc2lnbl9leHRlbmQ2NCgoc2lfaCA8PCAxNiB8IHNp X2wpIDw8IDIsIDI3KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJY2FzZSBibF9vcDoNCj4gKwkJKm5l eHRfYWRkciA9IHBjICsgc2lnbl9leHRlbmQ2NCgoc2lfaCA8PCAxNiB8IHNpX2wpIDw8IDIsIDI3 KTsNCj4gKwkJcmVncy0+cmVnc1sxXSA9IHBjICsgTE9PTkdBUkNIX0lOU05fU0laRTsNCj4gKwkJ cmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJc2lfbCA9IGlwLT5yZWcxaTIxX2Zvcm1hdC5pbW1l ZGlhdGVfbDsNCj4gKwlzaV9oID0gaXAtPnJlZzFpMjFfZm9ybWF0LmltbWVkaWF0ZV9oOw0KPiAr CXJqID0gaXAtPnJlZzFpMjFfZm9ybWF0LnJqOw0KPiArCXN3aXRjaCAoaXAtPnJlZzFpMjFfZm9y bWF0Lm9wY29kZSkgew0KPiArCWNhc2UgYmVxel9vcDoNCj4gKwkJaWYgKHJlZ3MtPnJlZ3Nbcmpd ID09IDApDQo+ICsJCQkqbmV4dF9hZGRyID0gcGMgKyBzaWduX2V4dGVuZDY0KChzaV9oIDw8IDE2 IHwgc2lfbCkgPDwgMiwgMjIpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwljYXNlIGJuZXpfb3A6DQo+ ICsJCWlmIChyZWdzLT5yZWdzW3JqXSAhPSAwKQ0KPiArCQkJKm5leHRfYWRkciA9IHBjICsgc2ln bl9leHRlbmQ2NCgoc2lfaCA8PCAxNiB8IHNpX2wpIDw8IDIsIDIyKTsNCj4gKwkJcmV0dXJuIDA7 DQo+ICsJLyogYmNlcXpfb3AgPSBiY25lel9vcCAqLw0KPiArCWNhc2UgYmNlcXpfb3A6DQo+ICsJ CS8qIGJjZXF6ICovDQo+ICsJCWlmICgocmogJiAweDE4KSA9PSAweDAwKQ0KPiArCQkJaWYgKGNq X3ZhbCA9PSAwKQ0KPiArCQkJCSpuZXh0X2FkZHIgPSBwYyArIHNpZ25fZXh0ZW5kNjQoKHNpX2gg PDwgMTYgfCBzaV9sKSA8PCAyLCAyMik7DQo+ICsJCS8qIGJjbmV6ICovDQo+ICsJCWlmICgocmog JiAweDE4KSA9PSAweDA4KQ0KPiArCQkJaWYgKGNqX3ZhbCAhPSAwKQ0KPiArCQkJCSpuZXh0X2Fk ZHIgPSBwYyArIHNpZ25fZXh0ZW5kNjQoKHNpX2ggPDwgMTYgfCBzaV9sKSA8PCAyLCAyMik7DQo+ ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCXNpID0gaXAtPnJlZzJpMTZfZm9ybWF0Lmlt bWVkaWF0ZTsNCj4gKwlyaiA9IGlwLT5yZWcyaTE2X2Zvcm1hdC5yajsNCj4gKwlyZCA9IGlwLT5y ZWcyaTE2X2Zvcm1hdC5yZDsNCj4gKwlzd2l0Y2ggKGlwLT5yZWcyaTE2X2Zvcm1hdC5vcGNvZGUp IHsNCj4gKwljYXNlIGJlcV9vcDoNCj4gKwkJaWYgKHJlZ3MtPnJlZ3NbcmpdID09IHJlZ3MtPnJl Z3NbcmRdKQ0KPiArCQkJKm5leHRfYWRkciA9IHBjICsgc2lnbl9leHRlbmQ2NChzaSA8PCAyLCAx Nyk7DQo+ICsJCXJldHVybiAwOw0KPiArCWNhc2UgYm5lX29wOg0KPiArCQlpZiAocmVncy0+cmVn c1tyal0gIT0gcmVncy0+cmVnc1tyZF0pDQo+ICsJCQkqbmV4dF9hZGRyID0gcGMgKyBzaWduX2V4 dGVuZDY0KHNpIDw8IDIsIDE3KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJY2FzZSBibHRfb3A6DQo+ ICsJCWlmICgobG9uZylyZWdzLT5yZWdzW3JqXSA8IChsb25nKXJlZ3MtPnJlZ3NbcmRdKQ0KPiAr CQkJKm5leHRfYWRkciA9IHBjICsgc2lnbl9leHRlbmQ2NChzaSA8PCAyLCAxNyk7DQo+ICsJCXJl dHVybiAwOw0KPiArCWNhc2UgYmdlX29wOg0KPiArCQlpZiAoKGxvbmcpcmVncy0+cmVnc1tyal0g Pj0gKGxvbmcpcmVncy0+cmVnc1tyZF0pDQo+ICsJCQkqbmV4dF9hZGRyID0gcGMgKyBzaWduX2V4 dGVuZDY0KHNpIDw8IDIsIDE3KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJY2FzZSBibHR1X29wOg0K PiArCQlpZiAocmVncy0+cmVnc1tyal0gPCByZWdzLT5yZWdzW3JkXSkNCj4gKwkJCSpuZXh0X2Fk ZHIgPSBwYyArIHNpZ25fZXh0ZW5kNjQoc2kgPDwgMiwgMTcpOw0KPiArCQlyZXR1cm4gMDsNCj4g KwljYXNlIGJnZXVfb3A6DQo+ICsJCWlmIChyZWdzLT5yZWdzW3JqXSA+PSByZWdzLT5yZWdzW3Jk XSkNCj4gKwkJCSpuZXh0X2FkZHIgPSBwYyArIHNpZ25fZXh0ZW5kNjQoc2kgPDwgMiwgMTcpOw0K PiArCQlyZXR1cm4gMDsNCj4gKwljYXNlIGppcmxfb3A6DQo+ICsJCXJlZ3MtPnJlZ3NbcmRdID0g cGMgKyBMT09OR0FSQ0hfSU5TTl9TSVpFOw0KPiArCQkqbmV4dF9hZGRyID0gcmVncy0+cmVnc1ty al0gKyBzaWduX2V4dGVuZDY0KHNpIDw8IDIsIDE3KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZG9fc2luZ2xlX3N0 ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpDQo+ICt7DQo+ICsJLyogRGV0ZXJtaW5lIHdoZXJlIHRo ZSB0YXJnZXQgaW5zdHJ1Y3Rpb24gd2lsbCBzZW5kIHVzIHRvICovDQo+ICsJdW5zaWduZWQgbG9u ZyBhZGRyID0gMDsNCj4gKwlpbnQgZXJyb3IgPSAwOw0KPiArDQo+ICsJaWYgKCFkYmdfa2RiX21v ZGUpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJZXJyb3IgPSBnZXRfc3RlcF9hZGRyZXNzKHJl Z3MsICZhZGRyKTsNCj4gKwlpZiAoZXJyb3IpDQo+ICsJCXJldHVybiBlcnJvcjsNCj4gKw0KPiAr CS8qIFN0b3JlIHRoZSBvcGNvZGUgaW4gdGhlIHN0ZXBwZWQgYWRkcmVzcyAqLw0KPiArCWVycm9y ID0gZ2V0X2tlcm5lbF9ub2ZhdWx0KHN0ZXBwZWRfb3Bjb2RlLCAodm9pZCAqKWFkZHIpOw0KPiAr CWlmIChlcnJvcikNCj4gKwkJcmV0dXJuIGVycm9yOw0KPiArDQo+ICsJc3RlcHBlZF9hZGRyZXNz ID0gYWRkcjsNCj4gKw0KPiArCS8qIFJlcGxhY2UgdGhlIG9wY29kZSB3aXRoIHRoZSBicmVhayBp bnN0cnVjdGlvbiAqLw0KPiArCWVycm9yID0gY29weV90b19rZXJuZWxfbm9mYXVsdCgodm9pZCAq KXN0ZXBwZWRfYWRkcmVzcywNCj4gKwkJCQkgICAgICAgYXJjaF9rZ2RiX29wcy5nZGJfYnB0X2lu c3RyLA0KPiArCQkJCSAgICAgICBCUkVBS19JTlNUUl9TSVpFKTsNCj4gKw0KPiArCS8qIEZsdXNo IGFuZCByZXR1cm4gKi8NCj4gKwlpZiAoIWVycm9yKSB7DQo+ICsJCWZsdXNoX2ljYWNoZV9yYW5n ZShhZGRyLCBhZGRyICsgQlJFQUtfSU5TVFJfU0laRSk7DQo+ICsJCWtnZGJfc2luZ2xlX3N0ZXAg PSAxOw0KPiArCQlhdG9taWNfc2V0KCZrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcCwgcmF3X3Nt cF9wcm9jZXNzb3JfaWQoKSk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJc3RlcHBlZF9hZGRyZXNzID0g MDsNCj4gKwkJc3RlcHBlZF9vcGNvZGUgPSAwOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBlcnJv cjsNCj4gK30NCj4gKw0KPiArLyogVW5kbyBhIHNpbmdsZSBzdGVwICovDQo+ICtzdGF0aWMgdm9p ZCB1bmRvX3NpbmdsZV9zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQ0KPiArew0KPiArCWlmICgh ZGJnX2tkYl9tb2RlKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAoc3RlcHBlZF9vcGNvZGUg IT0gMCkgew0KPiArCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0KCh2b2lkICopc3RlcHBlZF9hZGRy ZXNzLA0KPiArCQkJCSAgICAgICAodm9pZCAqKSZzdGVwcGVkX29wY29kZSwgQlJFQUtfSU5TVFJf U0laRSk7DQo+ICsJCWZsdXNoX2ljYWNoZV9yYW5nZShzdGVwcGVkX2FkZHJlc3MsDQo+ICsJCQkJ ICAgc3RlcHBlZF9hZGRyZXNzICsgQlJFQUtfSU5TVFJfU0laRSk7DQo+ICsJfQ0KPiArDQo+ICsJ c3RlcHBlZF9hZGRyZXNzID0gMDsNCj4gKwlzdGVwcGVkX29wY29kZSA9IDA7DQo+ICsJa2dkYl9z aW5nbGVfc3RlcCA9IDA7DQo+ICsJYXRvbWljX3NldCgma2dkYl9jcHVfZG9pbmdfc2luZ2xlX3N0 ZXAsIC0xKTsNCj4gK30NCj4gKw0KPiAraW50IGtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGlu dCB2ZWN0b3IsIGludCBzaWdubywgaW50IGVycl9jb2RlLA0KPiArCQkJICAgICAgIGNoYXIgKnJl bWNvbV9pbl9idWZmZXIsIGNoYXIgKnJlbWNvbV9vdXRfYnVmZmVyLA0KPiArCQkJICAgICAgIHN0 cnVjdCBwdF9yZWdzICpyZWdzKQ0KPiArew0KPiArCWludCByZXQgPSAwOw0KPiArDQo+ICsJdW5k b19zaW5nbGVfc3RlcChyZWdzKTsNCj4gKw0KPiArCXJlZ3MtPmNzcl9wcm1kIHw9IENTUl9QUk1E X1BXRTsNCj4gKwlzd2l0Y2ggKHJlbWNvbV9pbl9idWZmZXJbMF0pIHsNCj4gKwljYXNlICdEJzoN Cj4gKwljYXNlICdrJzoNCj4gKwkJcmVncy0+Y3NyX3BybWQgJj0gfkNTUl9QUk1EX1BXRTsNCj4g KwkJZmFsbHRocm91Z2g7DQo+ICsJY2FzZSAnYyc6DQo+ICsJCWtnZGJfYXJjaF91cGRhdGVfYWRk cihyZWdzLCByZW1jb21faW5fYnVmZmVyKTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAncyc6DQo+ ICsJCWtnZGJfYXJjaF91cGRhdGVfYWRkcihyZWdzLCByZW1jb21faW5fYnVmZmVyKTsNCj4gKwkJ cmV0ID0gZG9fc2luZ2xlX3N0ZXAocmVncyk7DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ ICsJCXJldCA9IC0xOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBzdHJ1Y3QgaHdfYnJlYWtwb2ludCB7DQo+ICsJdW5zaWduZWQgaW50CQllbmFibGVk Ow0KPiArCXVuc2lnbmVkIGxvbmcJCWFkZHI7DQo+ICsJaW50CQkJbGVuOw0KPiArCWludAkJCXR5 cGU7DQo+ICsJc3RydWN0IHBlcmZfZXZlbnQJKiBfX3BlcmNwdSAqcGV2Ow0KPiArfSBicmVha2lu Zm9bTE9PTkdBUkNIX01BWF9CUlBdOw0KPiArDQo+ICtzdGF0aWMgaW50IGh3X2JyZWFrX3Jlc2Vy dmVfc2xvdChpbnQgYnJlYWtubykNCj4gK3sNCj4gKwlpbnQgY3B1Ow0KPiArCWludCBjbnQgPSAw Ow0KPiArCXN0cnVjdCBwZXJmX2V2ZW50ICoqcGV2ZW50Ow0KPiArDQo+ICsJZm9yX2VhY2hfb25s aW5lX2NwdShjcHUpIHsNCj4gKwkJY250Kys7DQo+ICsJCXBldmVudCA9IHBlcl9jcHVfcHRyKGJy ZWFraW5mb1ticmVha25vXS5wZXYsIGNwdSk7DQo+ICsJCWlmIChkYmdfcmVzZXJ2ZV9icF9zbG90 KCpwZXZlbnQpKQ0KPiArCQkJZ290byBmYWlsOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0K PiArDQo+ICtmYWlsOg0KPiArCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7DQo+ICsJCWNudC0t Ow0KPiArCQlpZiAoIWNudCkNCj4gKwkJCWJyZWFrOw0KPiArCQlwZXZlbnQgPSBwZXJfY3B1X3B0 cihicmVha2luZm9bYnJlYWtub10ucGV2LCBjcHUpOw0KPiArCQlkYmdfcmVsZWFzZV9icF9zbG90 KCpwZXZlbnQpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAtMTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBod19icmVha19yZWxlYXNlX3Nsb3QoaW50IGJyZWFrbm8pDQo+ICt7DQo+ICsJc3Ry dWN0IHBlcmZfZXZlbnQgKipwZXZlbnQ7DQo+ICsJaW50IGNwdTsNCj4gKw0KPiArCWlmIChkYmdf aXNfZWFybHkpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJZm9yX2VhY2hfb25saW5lX2NwdShj cHUpIHsNCj4gKwkJcGV2ZW50ID0gcGVyX2NwdV9wdHIoYnJlYWtpbmZvW2JyZWFrbm9dLnBldiwg Y3B1KTsNCj4gKwkJaWYgKGRiZ19yZWxlYXNlX2JwX3Nsb3QoKnBldmVudCkpDQo+ICsJCQkvKg0K PiArCQkJICogVGhlIGRlYnVnZ2VyIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kaW5nIHRoZSByZXRy eSBvbg0KPiArCQkJICogcmVtb3ZlIGZhaWx1cmUuDQo+ICsJCQkgKi8NCj4gKwkJCXJldHVybiAt MTsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQga2dkYl9z ZXRfaHdfYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuLCBlbnVtIGtnZGJfYnB0eXBl IGJwdHlwZSkNCj4gK3sNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBMT09O R0FSQ0hfTUFYX0JSUDsgaSsrKQ0KPiArCQlpZiAoIWJyZWFraW5mb1tpXS5lbmFibGVkKQ0KPiAr CQkJYnJlYWs7DQo+ICsNCj4gKwlpZiAoaSA9PSBMT09OR0FSQ0hfTUFYX0JSUCkNCj4gKwkJcmV0 dXJuIC0xOw0KPiArDQo+ICsJc3dpdGNoIChicHR5cGUpIHsNCj4gKwljYXNlIEJQX0hBUkRXQVJF X0JSRUFLUE9JTlQ6DQo+ICsJCWJyZWFraW5mb1tpXS50eXBlID0gSFdfQlJFQUtQT0lOVF9YOw0K PiArCQlicmVhazsNCj4gKwljYXNlIEJQX1JFQURfV0FUQ0hQT0lOVDoNCj4gKwkJYnJlYWtpbmZv W2ldLnR5cGUgPSBIV19CUkVBS1BPSU5UX1I7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgQlBfV1JJ VEVfV0FUQ0hQT0lOVDoNCj4gKwkJYnJlYWtpbmZvW2ldLnR5cGUgPSBIV19CUkVBS1BPSU5UX1c7 DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgQlBfQUNDRVNTX1dBVENIUE9JTlQ6DQo+ICsJCWJyZWFr aW5mb1tpXS50eXBlID0gSFdfQlJFQUtQT0lOVF9SVzsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVs dDoNCj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArCXN3aXRjaCAobGVuKSB7DQo+ICsJ Y2FzZSAxOg0KPiArCQlicmVha2luZm9baV0ubGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fMTsNCj4g KwkJYnJlYWs7DQo+ICsJY2FzZSAyOg0KPiArCQlicmVha2luZm9baV0ubGVuID0gSFdfQlJFQUtQ T0lOVF9MRU5fMjsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSA0Og0KPiArCQlicmVha2luZm9baV0u bGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSA4Og0KPiAr CQlicmVha2luZm9baV0ubGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fODsNCj4gKwkJYnJlYWs7DQo+ ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArCWJyZWFraW5mb1tp XS5hZGRyID0gYWRkcjsNCj4gKwlpZiAoaHdfYnJlYWtfcmVzZXJ2ZV9zbG90KGkpKSB7DQo+ICsJ CWJyZWFraW5mb1tpXS5hZGRyID0gMDsNCj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKwlicmVh a2luZm9baV0uZW5hYmxlZCA9IDE7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBrZ2RiX3JlbW92ZV9od19icmVhayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBs ZW4sIGVudW0ga2dkYl9icHR5cGUgYnB0eXBlKQ0KPiArew0KPiArCWludCBpOw0KPiArDQo+ICsJ Zm9yIChpID0gMDsgaSA8IExPT05HQVJDSF9NQVhfQlJQOyBpKyspDQo+ICsJCWlmIChicmVha2lu Zm9baV0uYWRkciA9PSBhZGRyICYmIGJyZWFraW5mb1tpXS5lbmFibGVkKQ0KPiArCQkJYnJlYWs7 DQo+ICsNCj4gKwlpZiAoaSA9PSBMT09OR0FSQ0hfTUFYX0JSUCkNCj4gKwkJcmV0dXJuIC0xOw0K PiArDQo+ICsJaWYgKGh3X2JyZWFrX3JlbGVhc2Vfc2xvdChpKSkgew0KPiArCQlwcl9lcnIoIkNh bm5vdCByZW1vdmUgaHcgYnJlYWtwb2ludCBhdCAlbHhcbiIsIGFkZHIpOw0KPiArCQlyZXR1cm4g LTE7DQo+ICsJfQ0KPiArCWJyZWFraW5mb1tpXS5lbmFibGVkID0gMDsNCj4gKw0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBrZ2RiX2Rpc2FibGVfaHdfYnJlYWsoc3Ry dWN0IHB0X3JlZ3MgKnJlZ3MpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsJaW50IGNwdSA9IHJhd19z bXBfcHJvY2Vzc29yX2lkKCk7DQo+ICsJc3RydWN0IHBlcmZfZXZlbnQgKmJwOw0KPiArDQo+ICsJ Zm9yIChpID0gMDsgaSA8IExPT05HQVJDSF9NQVhfQlJQOyBpKyspIHsNCj4gKwkJaWYgKCFicmVh a2luZm9baV0uZW5hYmxlZCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCWJwID0gKnBlcl9j cHVfcHRyKGJyZWFraW5mb1tpXS5wZXYsIGNwdSk7DQo+ICsJCWlmIChicC0+YXR0ci5kaXNhYmxl ZCA9PSAxKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJYXJjaF91bmluc3RhbGxfaHdfYnJl YWtwb2ludChicCk7DQo+ICsJCWJwLT5hdHRyLmRpc2FibGVkID0gMTsNCj4gKwl9DQo+ICsNCj4g KwkvKiBEaXNhYmxlIGhhcmR3YXJlIGRlYnVnZ2luZyB3aGlsZSB3ZSBhcmUgaW4ga2dkYjogKi8N Cj4gKwljc3JfeGNoZzMyKDAsIENTUl9DUk1EX1dFLCBMT09OR0FSQ0hfQ1NSX0NSTUQpOw0KPiAr CXJlZ3MtPmNzcl9wcm1kICY9IH5DU1JfUFJNRF9QV0U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGtnZGJfcmVtb3ZlX2FsbF9od19icmVhayh2b2lkKQ0KPiArew0KPiArCWludCBpOw0KPiAr CWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOw0KPiArCXN0cnVjdCBwZXJmX2V2ZW50 ICpicDsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBMT09OR0FSQ0hfTUFYX0JSUDsgaSsrKSB7 DQo+ICsJCWlmICghYnJlYWtpbmZvW2ldLmVuYWJsZWQpDQo+ICsJCQljb250aW51ZTsNCj4gKw0K PiArCQlicCA9ICpwZXJfY3B1X3B0cihicmVha2luZm9baV0ucGV2LCBjcHUpOw0KPiArCQlpZiAo IWJwLT5hdHRyLmRpc2FibGVkKSB7DQo+ICsJCQlhcmNoX3VuaW5zdGFsbF9od19icmVha3BvaW50 KGJwKTsNCj4gKwkJCWJwLT5hdHRyLmRpc2FibGVkID0gMTsNCj4gKwkJCWNvbnRpbnVlOw0KPiAr CQl9DQo+ICsNCj4gKwkJaWYgKGh3X2JyZWFrX3JlbGVhc2Vfc2xvdChpKSkNCj4gKwkJCXByX2Vy cigiS0dEQjogaHcgYnB0IHJlbW92ZSBmYWlsZWQgJWx4XG4iLCBicmVha2luZm9baV0uYWRkcik7 DQo+ICsJCWJyZWFraW5mb1tpXS5lbmFibGVkID0gMDsNCj4gKwl9DQo+ICsNCj4gKwljc3JfeGNo ZzMyKDAsIENTUl9DUk1EX1dFLCBMT09OR0FSQ0hfQ1NSX0NSTUQpOw0KPiArCWtnZGJfd2F0Y2hf YWN0aXZhdGVkID0gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQga2dkYl9jb3JyZWN0X2h3 X2JyZWFrKHZvaWQpDQo+ICt7DQo+ICsJaW50IGksIGFjdGl2YXRlZCA9IDA7DQo+ICsNCj4gKwlm b3IgKGkgPSAwOyBpIDwgTE9PTkdBUkNIX01BWF9CUlA7IGkrKykgew0KPiArCQlzdHJ1Y3QgcGVy Zl9ldmVudCAqYnA7DQo+ICsJCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm87DQo+ICsJ CWludCB2YWw7DQo+ICsJCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOw0KPiArDQo+ ICsJCWlmICghYnJlYWtpbmZvW2ldLmVuYWJsZWQpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr CQlicCA9ICpwZXJfY3B1X3B0cihicmVha2luZm9baV0ucGV2LCBjcHUpOw0KPiArCQlpbmZvID0g Y291bnRlcl9hcmNoX2JwKGJwKTsNCj4gKwkJaWYgKGJwLT5hdHRyLmRpc2FibGVkICE9IDEpDQo+ ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlicC0+YXR0ci5icF9hZGRyID0gYnJlYWtpbmZvW2ld LmFkZHI7DQo+ICsJCWJwLT5hdHRyLmJwX2xlbiA9IGJyZWFraW5mb1tpXS5sZW47DQo+ICsJCWJw LT5hdHRyLmJwX3R5cGUgPSBicmVha2luZm9baV0udHlwZTsNCj4gKwkJaW5mby0+YWRkcmVzcyA9 IGJyZWFraW5mb1tpXS5hZGRyOw0KPiArCQlpbmZvLT5jdHJsLmxlbiA9IGJyZWFraW5mb1tpXS5s ZW47DQo+ICsJCWluZm8tPmN0cmwudHlwZSA9IGJyZWFraW5mb1tpXS50eXBlOw0KPiArCQl2YWwg PSBhcmNoX2luc3RhbGxfaHdfYnJlYWtwb2ludChicCk7DQo+ICsJCWlmICghdmFsKQ0KPiArCQkJ YnAtPmF0dHIuZGlzYWJsZWQgPSAwOw0KPiArCQlhY3RpdmF0ZWQgPSAxOw0KPiArCX0NCj4gKw0K PiArCWNzcl94Y2hnMzIoYWN0aXZhdGVkID8gQ1NSX0NSTURfV0UgOiAwLCBDU1JfQ1JNRF9XRSwg TE9PTkdBUkNIX0NTUl9DUk1EKTsNCj4gKwlrZ2RiX3dhdGNoX2FjdGl2YXRlZCA9IGFjdGl2YXRl ZDsNCj4gK30NCj4gKw0KPiArY29uc3Qgc3RydWN0IGtnZGJfYXJjaCBhcmNoX2tnZGJfb3BzID0g ew0KPiArCS5nZGJfYnB0X2luc3RyCQk9IHsweDAyLCAweDAwLCBicmVha19vcCA+PiAxLCAweDAw fSwNCj4gKwkuZmxhZ3MJCQk9IEtHREJfSFdfQlJFQUtQT0lOVCwNCj4gKwkuc2V0X2h3X2JyZWFr cG9pbnQJPSBrZ2RiX3NldF9od19icmVhaywNCj4gKwkucmVtb3ZlX2h3X2JyZWFrcG9pbnQJPSBr Z2RiX3JlbW92ZV9od19icmVhaywNCj4gKwkuZGlzYWJsZV9od19icmVhawk9IGtnZGJfZGlzYWJs ZV9od19icmVhaywNCj4gKwkucmVtb3ZlX2FsbF9od19icmVhawk9IGtnZGJfcmVtb3ZlX2FsbF9o d19icmVhaywNCj4gKwkuY29ycmVjdF9od19icmVhawk9IGtnZGJfY29ycmVjdF9od19icmVhaywN Cj4gK307DQo+ICsNCj4gK2ludCBrZ2RiX2FyY2hfaW5pdCh2b2lkKQ0KPiArew0KPiArCXJldHVy biByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtnZGJfbm90aWZpZXIpOw0KPiArfQ0KPiArDQo+ICt2 b2lkIGtnZGJfYXJjaF9sYXRlKHZvaWQpDQo+ICt7DQo+ICsJaW50IGksIGNwdTsNCj4gKwlzdHJ1 Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7DQo+ICsJc3RydWN0IHBlcmZfZXZlbnQgKipwZXZlbnQ7 DQo+ICsNCj4gKwlod19icmVha3BvaW50X2luaXQoJmF0dHIpOw0KPiArDQo+ICsJYXR0ci5icF9h ZGRyID0gKHVuc2lnbmVkIGxvbmcpa2dkYl9hcmNoX2luaXQ7DQo+ICsJYXR0ci5icF9sZW4gPSBI V19CUkVBS1BPSU5UX0xFTl80Ow0KPiArCWF0dHIuYnBfdHlwZSA9IEhXX0JSRUFLUE9JTlRfVzsN Cj4gKwlhdHRyLmRpc2FibGVkID0gMTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBMT09OR0FS Q0hfTUFYX0JSUDsgaSsrKSB7DQo+ICsJCWlmIChicmVha2luZm9baV0ucGV2KQ0KPiArCQkJY29u dGludWU7DQo+ICsNCj4gKwkJYnJlYWtpbmZvW2ldLnBldiA9IHJlZ2lzdGVyX3dpZGVfaHdfYnJl YWtwb2ludCgmYXR0ciwgTlVMTCwgTlVMTCk7DQo+ICsJCWlmIChJU19FUlIoKHZvaWQgKiBfX2Zv cmNlKWJyZWFraW5mb1tpXS5wZXYpKSB7DQo+ICsJCQlwcl9lcnIoImtnZGI6IENvdWxkIG5vdCBh bGxvY2F0ZSBodyBicmVha3BvaW50cy5cbiIpOw0KPiArCQkJYnJlYWtpbmZvW2ldLnBldiA9IE5V TEw7DQo+ICsJCQlyZXR1cm47DQo+ICsJCX0NCj4gKw0KPiArCQlmb3JfZWFjaF9vbmxpbmVfY3B1 KGNwdSkgew0KPiArCQkJcGV2ZW50ID0gcGVyX2NwdV9wdHIoYnJlYWtpbmZvW2ldLnBldiwgY3B1 KTsNCj4gKwkJCWlmIChwZXZlbnRbMF0tPmRlc3Ryb3kpIHsNCj4gKwkJCQlwZXZlbnRbMF0tPmRl c3Ryb3kgPSBOVUxMOw0KPiArCQkJCXJlbGVhc2VfYnBfc2xvdCgqcGV2ZW50KTsNCj4gKwkJCX0N Cj4gKwkJfQ0KPiArCX0NCj4gK30NCj4gKw0KPiArdm9pZCBrZ2RiX2FyY2hfZXhpdCh2b2lkKQ0K PiArew0KPiArCWludCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IExPT05HQVJDSF9NQVhf QlJQOyBpKyspIHsNCj4gKwkJaWYgKGJyZWFraW5mb1tpXS5wZXYpIHsNCj4gKwkJCXVucmVnaXN0 ZXJfd2lkZV9od19icmVha3BvaW50KGJyZWFraW5mb1tpXS5wZXYpOw0KPiArCQkJYnJlYWtpbmZv W2ldLnBldiA9IE5VTEw7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwl1bnJlZ2lzdGVyX2RpZV9u b3RpZmllcigma2dkYl9ub3RpZmllcik7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9hcmNoL2xvb25n YXJjaC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC90cmFwcy5jDQo+IGlu ZGV4IDY4MzhiZWE1YWI2NC4uYzcwMzcwYTk0ZjYxIDEwMDY0NA0KPiAtLS0gYS9hcmNoL2xvb25n YXJjaC9rZXJuZWwvdHJhcHMuYw0KPiArKysgYi9hcmNoL2xvb25nYXJjaC9rZXJuZWwvdHJhcHMu Yw0KPiBAQCAtNzIwLDYgKzcyMCwxMSBAQCBhc21saW5rYWdlIHZvaWQgbm9pbnN0ciBkb19icChz dHJ1Y3QgcHRfcmVncyAqcmVncykNCj4gICAJCQlnb3RvIG91dDsNCj4gICAJCWVsc2UNCj4gICAJ CQlicmVhazsNCj4gKwljYXNlIEJSS19LREI6DQo+ICsJCWlmIChrZ2RiX2JyZWFrcG9pbnRfaGFu ZGxlcihyZWdzKSkNCj4gKwkJCWdvdG8gb3V0Ow0KPiArCQllbHNlDQo+ICsJCQlicmVhazsNCj4g ICAJZGVmYXVsdDoNCj4gICAJCWN1cnJlbnQtPnRocmVhZC50cmFwX25yID0gcmVhZF9jc3JfZXhj b2RlKCk7DQo+ICAgCQlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgIkJyZWFrIiwgcmVncywgYmNv ZGUsDQo+IEBAIC03NjYsNiArNzcxLDkgQEAgYXNtbGlua2FnZSB2b2lkIG5vaW5zdHIgZG9fd2F0 Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpDQo+ICAgI2lmbmRlZiBDT05GSUdfSEFWRV9IV19CUkVB S1BPSU5UDQo+ICAgCXByX3dhcm4oIkhhcmR3YXJlIHdhdGNoIHBvaW50IGhhbmRsZXIgbm90IGlt cGxlbWVudGVkIVxuIik7DQo+ICAgI2Vsc2UNCj4gKwlpZiAoa2dkYl9icmVha3BvaW50X2hhbmRs ZXIocmVncykpDQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICAgCWlmICh0ZXN0X3Rza190aHJlYWRf ZmxhZyhjdXJyZW50LCBUSUZfU0lOR0xFU1RFUCkpIHsNCj4gICAJCWludCBsbGJpdCA9IChjc3Jf cmVhZDMyKExPT05HQVJDSF9DU1JfTExCQ1RMKSAmIDB4MSk7DQo+ICAgCQl1bnNpZ25lZCBsb25n IHBjID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsNCg==