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 X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C6954C433FF for ; Wed, 14 Aug 2019 12:37:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8245E2083B for ; Wed, 14 Aug 2019 12:37:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bitdefender.onmicrosoft.com header.i=@bitdefender.onmicrosoft.com header.b="afVwCpSe" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727732AbfHNMhI (ORCPT ); Wed, 14 Aug 2019 08:37:08 -0400 Received: from mail-eopbgr140137.outbound.protection.outlook.com ([40.107.14.137]:48884 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726721AbfHNMhI (ORCPT ); Wed, 14 Aug 2019 08:37:08 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ig0Yr9Zenp9vC4dc0NFG4M3sa2oSECmA92/uEGj5oYgftyor7si2Ymj9KFs9Y6LRhItVPpRQXqe1WwwMdg8fJDGc+eMsc7ZSCQyF7DoD/Uo8JYkOLDwT4EQUcWYEl4ePxwN2PWWdD+OiBMSV2m6A0ULNkQOb7lCoYy1DMlnP5WS2DEA2MSoYuMTC42bIdX4Te+d2eyML9js13VLYGs74TNQuun8vUQ7gvGWGmTKpn1X15JYkk7Hf3WjeaTa0PJXn0Iq31HHTuyyvxKG30kO+WJszuVy1plzt9Qa6ST//uAfgg3JaZPWqHH8Iq4mPhOAGKmWupJ4pek+kNNGcijkrig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1ur3xmROr6NeiIo4/8BDHEDnCmJAMzr2xQW3ZBQgEIE=; b=S0u3VC6kYpbmfjbv2IQkDOxvzc3k5fMsJCViaiPS4OFH0P+KWKS6eWPokbxb72li9E7NSedDHogYPcme6AbtQJcjihu+oHwQPqzp/14oDqIppRV2VigKBGzq1d8ZgFoKSJfO036L36F1dplu3FXPKhEu2e29ZmJbWS+5ACEybH+jP8gPkNnljdeXLYxgKVGOrrnbNr8z0TFQUIS/gV+FcKZo+fXRhkG8mIMBt+iT7Kne6Gyu/PxFibeuUkoxYsnhw8DRo/Gr64u0hvISC/F/DhotZaWHOs+J1OAmhRgASWBOOPXHh4IwwYcpLW8OmK8M8fZX/fVl69ipAmg5xSYujQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bitdefender.com; dmarc=pass action=none header.from=bitdefender.com; dkim=pass header.d=bitdefender.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bitdefender.onmicrosoft.com; s=selector2-bitdefender-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1ur3xmROr6NeiIo4/8BDHEDnCmJAMzr2xQW3ZBQgEIE=; b=afVwCpSeQiPWLFXdYPHOzjdR0E08l/0zdE8IOqC0gX1ixNvT7J4/91McJ69lzFQF2kgmgc5Blmb4XJAi1/dcV3Oqa7rh88V3RGXtnnMCvOncArccix6q2uyDRVHRK8+eD26lMvgGTj6ymDdXmMOQpc5gA831+lugs0cmX0TZMXI= Received: from HE1PR0201MB2060.eurprd02.prod.outlook.com (10.168.30.152) by HE1PR0201MB2330.eurprd02.prod.outlook.com (10.168.143.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2157.23; Wed, 14 Aug 2019 12:36:59 +0000 Received: from HE1PR0201MB2060.eurprd02.prod.outlook.com ([fe80::c022:dbbc:4d4d:a558]) by HE1PR0201MB2060.eurprd02.prod.outlook.com ([fe80::c022:dbbc:4d4d:a558%3]) with mapi id 15.20.2157.022; Wed, 14 Aug 2019 12:36:59 +0000 From: Nicusor CITU To: Sean Christopherson , =?utf-8?B?QWRhbGJlcnQgTGF6xINy?= CC: "kvm@vger.kernel.org" , "linux-mm@kvack.org" , "virtualization@lists.linux-foundation.org" , Paolo Bonzini , =?utf-8?B?UmFkaW0gS3LEjW3DocWZ?= , Konrad Rzeszutek Wilk , Tamas K Lengyel , Mathieu Tarral , =?utf-8?B?U2FtdWVsIExhdXLDqW4=?= , Patrick Colp , Jan Kiszka , Stefan Hajnoczi , Weijiang Yang , "Zhang@linux.intel.com" , Yu C , =?utf-8?B?TWloYWkgRG9uyJt1?= , Jim Mattson , Joerg Roedel Subject: Re: [RFC PATCH v6 64/92] kvm: introspection: add single-stepping Thread-Topic: [RFC PATCH v6 64/92] kvm: introspection: add single-stepping Thread-Index: AQHVTsvn06P43q9bxEe3SXFKioskMab4AZqAgAKatgA= Date: Wed, 14 Aug 2019 12:36:58 +0000 Message-ID: References: <20190809160047.8319-1-alazar@bitdefender.com> <20190809160047.8319-65-alazar@bitdefender.com> <20190812205038.GC1437@linux.intel.com> In-Reply-To: <20190812205038.GC1437@linux.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: PR0P264CA0173.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1c::17) To HE1PR0201MB2060.eurprd02.prod.outlook.com (2603:10a6:3:20::24) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ncitu@bitdefender.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: Evolution 3.28.5-0ubuntu0.18.04.1 x-originating-ip: [91.199.104.6] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7022a7d3-e484-4340-16c1-08d720b41908 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:HE1PR0201MB2330; x-ms-traffictypediagnostic: HE1PR0201MB2330:|HE1PR0201MB2330: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3631; x-forefront-prvs: 01294F875B x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(376002)(346002)(396003)(39860400002)(136003)(366004)(199004)(189003)(25786009)(5660300002)(66446008)(386003)(478600001)(66476007)(4326008)(102836004)(86362001)(50226002)(6506007)(64756008)(66556008)(81166006)(81156014)(66946007)(7736002)(186003)(52116002)(76176011)(26005)(53936002)(2906002)(6116002)(53946003)(3846002)(6246003)(305945005)(486006)(14454004)(118296001)(476003)(7416002)(14444005)(66574012)(2616005)(229853002)(71200400001)(256004)(11346002)(446003)(6436002)(36756003)(66066001)(6512007)(316002)(8936002)(110136005)(71190400001)(54906003)(6486002)(6636002)(99286004)(30864003)(8676002)(99106002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0201MB2330;H:HE1PR0201MB2060.eurprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: bitdefender.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: qDfCofWkvjpaAWcxZivi0NrCECuRLrzACRCkV0judmc5pSh0XR4sS/WmWFXa6i1Ii2PlvL1cViUZMs0UWXDYhXVdRIEsGhcaBGTkdDCg8VdpHZGuHbmfYoAkl+L02Z9C0DgC/R49EKc42SgerMXlhPWUXbcIiL1ZemUE38qOs0tZQaFRbMMPBySDJPOZ54qZVvn3m3Yp+3qMd6udDc8c/tJ8B9TmlmR9DXsgIVMw/0kqc2kgcWmZiHnMghqmSYEouuX3fiu8ILKIW/03kIkYM5LUx6B6QMdWoFnAUA2XA/F018oQByxugjdADeeIQPAmE2BHAjiab995m5NDJRw789yIR4gLeK78yiGDOEPfUXHaDZGWF/pBFFjTxqMrsm/HBDvpfTfbJBIZl1n92/xVc0YR7nmm09or+qMzCbWovEk= Content-Type: text/plain; charset="utf-8" Content-ID: <628945CE8231DD49942EB58940B1F009@eurprd02.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: bitdefender.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7022a7d3-e484-4340-16c1-08d720b41908 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Aug 2019 12:36:58.6775 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 487baf29-f1da-469a-9221-243f830c36f3 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PIczv3B2HcDPv4MyZRC2/2qvvmSGslLj25w+DQB3Y2uRuO6at63Dmo9bp8kFeY7F4bhWBgBm4RUFXU34kh22wFsCV9G/f68Z7VMbSnQWsGw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0201MB2330 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org T24gTW9uLCAyMDE5LTA4LTEyIGF0IDEzOjUwIC0wNzAwLCBTZWFuIENocmlzdG9waGVyc29uIHdy b3RlOg0KPiBPbiBGcmksIEF1ZyAwOSwgMjAxOSBhdCAwNzowMDoxOVBNICswMzAwLCBBZGFsYmVy dCBMYXrEg3Igd3JvdGU6DQo+ID4gRnJvbTogTmljdciZb3IgQ8OuyJt1IDxuY2l0dUBiaXRkZWZl bmRlci5jb20+DQo+ID4gDQo+ID4gVGhpcyB3b3VsZCBiZSB1c2VkIGVpdGhlciBpZiB0aGUgaW50 cm9zcGVjdGlvbiB0b29sIHJlcXVlc3QgaXQgYXMgYQ0KPiA+IHJlcGx5IHRvIGEgS1ZNSV9FVkVO VF9QRiBldmVudCBvciB0byBjb3BlIHdpdGggaW5zdHJ1Y3Rpb25zIHRoYXQNCj4gPiBjYW5ub3QN Cj4gPiBiZSBoYW5kbGVkIGJ5IHRoZSB4ODYgZW11bGF0b3IgZHVyaW5nIHRoZSBoYW5kbGluZyBv ZiBhIFZNRVhJVC4gSW4NCj4gPiB0aGVzZSBzaXR1YXRpb25zLCBhbGwgb3RoZXIgdkNQVS1zIGFy ZSBraWNrZWQgYW5kIGhlbGQsIHRoZSBFUFQtDQo+ID4gYmFzZWQNCj4gPiBwcm90ZWN0aW9uIGlz IHJlbW92ZWQgYW5kIHRoZSBndWVzdCBpcyBzaW5nbGUgc3RlcHBlZCBieSB0aGUgdkNQVQ0KPiA+ IHRoYXQNCj4gPiB0cmlnZ2VyZWQgdGhlIGluaXRpYWwgVk1FWElULiBVcG9uIGNvbXBsZXRpb24g dGhlIEVQVC1iYXNlDQo+ID4gcHJvdGVjdGlvbg0KPiA+IGlzIHJlaW5zdGFsbGVkIGFuZCBhbGwg dkNQVS1zIGFsbCBhbGxvd2VkIHRvIHJldHVybiB0byB0aGUgZ3Vlc3QuDQo+ID4gDQo+ID4gVGhp cyBpcyBhIHJhdGhlciBzbG93IHdvcmthcm91bmQgdGhhdCBraWNrcyBpbiBvY2Nhc2lvbmFsbHku IEluIHRoZQ0KPiA+IGZ1dHVyZSwgdGhlIG1vc3QgZnJlcXVlbnRseSBzaW5nbGUtc3RlcHBlZCBp bnN0cnVjdGlvbnMgc2hvdWxkIGJlDQo+ID4gYWRkZWQNCj4gPiB0byB0aGUgZW11bGF0b3IgKHVz dWFsbHksIHN0b3JlcyB0byBhbmQgZnJvbSBtZW1vcnkgLSBTU0UvQVZYKS4NCj4gPiANCj4gPiBG b3IgdGhlIG1vbWVudCBpdCB3b3JrcyBvbmx5IG9uIEludGVsLg0KPiA+IA0KPiA+IENDOiBKaW0g TWF0dHNvbiA8am1hdHRzb25AZ29vZ2xlLmNvbT4NCj4gPiBDQzogU2VhbiBDaHJpc3RvcGhlcnNv biA8c2Vhbi5qLmNocmlzdG9waGVyc29uQGludGVsLmNvbT4NCj4gPiBDQzogSm9lcmcgUm9lZGVs IDxqb3JvQDhieXRlcy5vcmc+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmljdciZb3IgQ8OuyJt1IDxu Y2l0dUBiaXRkZWZlbmRlci5jb20+DQo+ID4gQ28tZGV2ZWxvcGVkLWJ5OiBNaWhhaSBEb27Im3Ug PG1kb250dUBiaXRkZWZlbmRlci5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogTWloYWkgRG9uyJt1 IDxtZG9udHVAYml0ZGVmZW5kZXIuY29tPg0KPiA+IENvLWRldmVsb3BlZC1ieTogQWRhbGJlcnQg TGF6xINyIDxhbGF6YXJAYml0ZGVmZW5kZXIuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEFkYWxi ZXJ0IExhesSDciA8YWxhemFyQGJpdGRlZmVuZGVyLmNvbT4NCj4gPiAtLS0NCj4gPiAgYXJjaC94 ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCB8ICAgMyArDQo+ID4gIGFyY2gveDg2L2t2bS9rdm1p LmMgICAgICAgICAgICAgfCAgNDcgKysrKysrKysrKy0NCj4gPiAgYXJjaC94ODYva3ZtL3N2bS5j ICAgICAgICAgICAgICB8ICAgNSArKw0KPiA+ICBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jICAgICAg ICAgIHwgIDE3ICsrKysNCj4gPiAgYXJjaC94ODYva3ZtL3g4Ni5jICAgICAgICAgICAgICB8ICAx OSArKysrKw0KPiA+ICBpbmNsdWRlL2xpbnV4L2t2bWkuaCAgICAgICAgICAgIHwgICA0ICsNCj4g PiAgdmlydC9rdm0va3ZtaS5jICAgICAgICAgICAgICAgICB8IDE0NQ0KPiA+ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystDQo+ID4gIHZpcnQva3ZtL2t2bWlfaW50LmggICAgICAgICAg ICAgfCAgMTYgKysrKw0KPiA+ICA4IGZpbGVzIGNoYW5nZWQsIDI1MyBpbnNlcnRpb25zKCspLCAz IGRlbGV0aW9ucygtKQ0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2Fz bS9rdm1faG9zdC5oDQo+ID4gYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oDQo+ID4g aW5kZXggYWQzNmE1ZmMyMDQ4Li42MGUyYzI5OGQ0NjkgMTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC94 ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaA0KPiA+ICsrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNt L2t2bV9ob3N0LmgNCj4gPiBAQCAtMTAxNiw2ICsxMDE2LDcgQEAgc3RydWN0IGt2bV94ODZfb3Bz IHsNCj4gPiAgCXZvaWQgKCptc3JfaW50ZXJjZXB0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVu c2lnbmVkIGludCBtc3IsDQo+ID4gIAkJCQlib29sIGVuYWJsZSk7DQo+ID4gIAlib29sICgqZGVz Y19pbnRlcmNlcHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOw0KPiA+ICsJ dm9pZCAoKnNldF9tdGYpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOw0KPiAN Cj4gTVRGIGlzIGEgVk1YIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHNpbmdsZS1zdGVwcGlu ZywgdGhpcyBzaG91bGQNCj4gYmUNCj4gZW5hYmxlX3NpbmdsZV9zdGVwKCkgb3Igc29tZXRoaW5n IGFsb25nIHRob3NlIGxpbmVzLiAgRm9yIGV4YW1wbGUsIEkNCj4gYXNzdW1lDQo+IFNWTSBjb3Vs ZCBpbXBsZW1lbnQgc29tZXRoaW5nIHRoYXQgaXMgbW9zdGx5IGZ1bmN0aW9uYWwgdmlhDQo+IFJG TEFHUy5URi4NCj4gDQo+ID4gIAl2b2lkICgqY3IzX3dyaXRlX2V4aXRpbmcpKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOw0KPiA+ICAJYm9vbCAoKm5lc3RlZF9wYWdlZmF1bHQp KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7DQo+ID4gIAlib29sICgqc3B0X2ZhdWx0KShzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpOw0KPiA+IEBAIC0xNjI4LDYgKzE2MjksOCBAQCB2b2lkIGt2bV9hcmNo X21zcl9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1DQo+ID4gKnZjcHUsIHVuc2lnbmVkIGludCBt c3IsDQo+ID4gIAkJCQlib29sIGVuYWJsZSk7DQo+ID4gIGJvb2wga3ZtX21tdV9uZXN0ZWRfcGFn ZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7DQo+ID4gIGJvb2wga3ZtX3NwdF9mYXVsdChz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOw0KPiA+ICt2b2lkIGt2bV9zZXRfbXRmKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOw0KPiA+ICt2b2lkIGt2bV9zZXRfaW50ZXJydXB0X3No YWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTsNCj4gPiAgdm9pZCBrdm1fY29u dHJvbF9jcjNfd3JpdGVfZXhpdGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wNCj4gPiBl bmFibGUpOw0KPiA+ICANCj4gPiAgI2VuZGlmIC8qIF9BU01fWDg2X0tWTV9IT1NUX0ggKi8NCj4g PiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bWkuYyBiL2FyY2gveDg2L2t2bS9rdm1pLmMN Cj4gPiBpbmRleCAwNGNhYzViOGE0ZDAuLmYwYWI0YmQ5ZWIzNyAxMDA2NDQNCj4gPiAtLS0gYS9h cmNoL3g4Ni9rdm0va3ZtaS5jDQo+ID4gKysrIGIvYXJjaC94ODYva3ZtL2t2bWkuYw0KPiA+IEBA IC01MjAsNyArNTIwLDYgQEAgYm9vbCBrdm1pX2FyY2hfcGZfZXZlbnQoc3RydWN0IGt2bV92Y3B1 ICp2Y3B1LA0KPiA+IGdwYV90IGdwYSwgZ3ZhX3QgZ3ZhLA0KPiA+ICAJdTMyIGN0eF9zaXplOw0K PiA+ICAJdTY0IGN0eF9hZGRyOw0KPiA+ICAJdTMyIGFjdGlvbjsNCj4gPiAtCWJvb2wgc2luZ2xl c3RlcF9pZ25vcmVkOw0KPiA+ICAJYm9vbCByZXQgPSBmYWxzZTsNCj4gPiAgDQo+ID4gIAlpZiAo IWt2bV9zcHRfZmF1bHQodmNwdSkpDQo+ID4gQEAgLTUzMyw3ICs1MzIsNyBAQCBib29sIGt2bWlf YXJjaF9wZl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsDQo+ID4gZ3BhX3QgZ3BhLCBndmFf dCBndmEsDQo+ID4gIAlpZiAoaXZjcHUtPmVmZmVjdGl2ZV9yZXBfY29tcGxldGUpDQo+ID4gIAkJ cmV0dXJuIHRydWU7DQo+ID4gIA0KPiA+IC0JYWN0aW9uID0ga3ZtaV9tc2dfc2VuZF9wZih2Y3B1 LCBncGEsIGd2YSwgYWNjZXNzLA0KPiA+ICZzaW5nbGVzdGVwX2lnbm9yZWQsDQo+ID4gKwlhY3Rp b24gPSBrdm1pX21zZ19zZW5kX3BmKHZjcHUsIGdwYSwgZ3ZhLCBhY2Nlc3MsICZpdmNwdS0NCj4g PiA+c3NfcmVxdWVzdGVkLA0KPiA+ICAJCQkJICAmaXZjcHUtPnJlcF9jb21wbGV0ZSwgJmN0eF9h ZGRyLA0KPiA+ICAJCQkJICBpdmNwdS0+Y3R4X2RhdGEsICZjdHhfc2l6ZSk7DQo+ID4gIA0KPiA+ IEBAIC01NDcsNiArNTQ2LDggQEAgYm9vbCBrdm1pX2FyY2hfcGZfZXZlbnQoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1LA0KPiA+IGdwYV90IGdwYSwgZ3ZhX3QgZ3ZhLA0KPiA+ICAJCXJldCA9IHRydWU7 DQo+ID4gIAkJYnJlYWs7DQo+ID4gIAljYXNlIEtWTUlfRVZFTlRfQUNUSU9OX1JFVFJZOg0KPiA+ ICsJCWlmIChpdmNwdS0+c3NfcmVxdWVzdGVkICYmICFrdm1pX3N0YXJ0X3NzKHZjcHUsIGdwYSwN Cj4gPiBhY2Nlc3MpKQ0KPiA+ICsJCQlyZXQgPSB0cnVlOw0KPiA+ICAJCWJyZWFrOw0KPiA+ICAJ ZGVmYXVsdDoNCj4gPiAgCQlrdm1pX2hhbmRsZV9jb21tb25fZXZlbnRfYWN0aW9ucyh2Y3B1LCBh Y3Rpb24sICJQRiIpOw0KPiA+IEBAIC03NTgsNiArNzU5LDQ4IEBAIGludCBrdm1pX2FyY2hfY21k X2NvbnRyb2xfY3Ioc3RydWN0IGt2bV92Y3B1DQo+ID4gKnZjcHUsDQo+ID4gIAlyZXR1cm4gMDsN Cj4gPiAgfQ0KPiA+ICANCj4gPiArdm9pZCBrdm1pX2FyY2hfc3RhcnRfc2luZ2xlX3N0ZXAoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KQ0KPiA+ICt7DQo+ID4gKwlrdm1fc2V0X210Zih2Y3B1LCB0cnVl KTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogU2V0IGJsb2NrIGJ5IFNUSSBvbmx5IGlmIHRo ZSBSRkxBR1MuSUYgPSAxLg0KPiA+ICsJICogQmxvY2tpbmcgYnkgYm90aCBTVEkgYW5kIE1PVi9Q T1AgU1MgaXMgbm90IHBvc3NpYmxlLg0KPiA+ICsJICovDQo+ID4gKwlpZiAoa3ZtX2FyY2hfaW50 ZXJydXB0X2FsbG93ZWQodmNwdSkpDQo+ID4gKwkJa3ZtX3NldF9pbnRlcnJ1cHRfc2hhZG93KHZj cHUsIEtWTV9YODZfU0hBRE9XX0lOVF9TVEkpOw0KPiANCj4gVGhpcyBpcyB3cm9uZywgdGhlIFNU SSBzaGFkb3cgb25seSBleGlzdHMgaWYgaW50ZXJydXB0cyB3ZXJlDQo+IHVuYmxvY2tlZA0KPiBw cmlvciB0byBTVEkuICBJJ20gZ3Vlc3NpbmcgdGhpcyBpcyBhIGhhY2sgdG8gd29ya2Fyb3VuZA0K PiBrdm1pX2FyY2hfc3RvcF9zaW5nbGVfc3RlcCgpIG5vdCBwcm9wZXJseSBoYW5kbGluZyB0aGUg Y2xlYXJpbmcgY2FzZS4NCj4gDQoNClRoYW5rIHlvdSBmb3Igc2lnbmFsaW5nIHRoaXMuIFRoaXMg cGllY2Ugb2YgY29kZSBpcyBsZWZ0b3ZlciBmcm9tIHRoZQ0KaW5pdGlhbCBhdHRlbXB0IHRvIG1h a2Ugc2luZ2xlIHN0ZXAgcnVubmluZy4NCkJhc2VkIG9uIGxhdGVzdCByZXN1bHRzLCB3ZSBkbyBu b3QgYWN0dWFsbHkgbmVlZCB0byBjaGFuZ2UNCmludGVycnVwdGliaWxpdHkgZHVyaW5nIHRoZSBz aW5nbGVzdGVwLiBJdCBpcyBlbm91Z2ggdG8gZW5hYmxlIHRoZSBNVEYNCmFuZCBqdXN0IHN1cHBy ZXNzIGFueSBpbnRlcnJ1cHQgaW5qZWN0aW9uIChpZiBhbnkpIGJlZm9yZSBsZWF2aW5nIHRoZQ0K dmNwdSBlbnRlcmluZyBpbiBndWVzdC4NCg0KPiA+ICsrfQ0KPiA+ICsNCj4gPiArdm9pZCBrdm1p X2FyY2hfc3RvcF9zaW5nbGVfc3RlcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpDQo+ID4gK3sNCj4g PiArCWt2bV9zZXRfbXRmKHZjcHUsIGZhbHNlKTsNCj4gPiArCS8qDQo+ID4gKwkgKiBUaGUgYmxv Y2tpbmcgYnkgU1RJIGlzIGNsZWFyZWQgYWZ0ZXIgdGhlIGd1ZXN0DQo+ID4gKwkgKiBleGVjdXRl cyBvbmUgaW5zdHJ1Y3Rpb24gb3IgaW5jdXJzIGFuIGV4Y2VwdGlvbi4NCj4gPiArCSAqIEhvd2V2 ZXIgd2UgbWlnaCBzdG9wIHRoZSBTUyBiZWZvcmUgZW50ZXJpbmcgdG8gZ3Vlc3QsDQo+ID4gKwkg KiBzbyBiZSBzdXJlIHdlIGFyZSBjbGVhcmluZyB0aGUgU1RJIGJsb2NraW5nLg0KPiA+ICsJICov DQo+ID4gKwlrdm1fc2V0X2ludGVycnVwdF9zaGFkb3codmNwdSwgMCk7DQo+IA0KPiBUaGVyZSBh cmUgb25seSB0aHJlZSBjYWxsZXJzIG9mIGt2bWlfc3RvcF9zcygpLCBpdCBzaG91bGQgYmUgcG9z c2libGUNCj4gdG8gYWNjdXJhdGVseSB1cGRhdGUgaW50ZXJydXB0aWJpbGl0eToNCj4gDQo+ICAg LSBrdm1pX3J1bl9zcygpIGZhaWwsIGRvIG5vdGhpbmcNCj4gICAtIFZNLUV4aXQgdGhhdCB3YXNu J3QgYSBzaW5nbGUtc3RlcCAtIGNsZWFyIGludGVycnVwdGliaWxpdHkgaWYgdGhlDQo+ICAgICBn dWVzdCBleGVjdXRlZCBhbiBpbnN0cnVjdGlvbiAoaW5jbHVkaW5nIGZhdWx0ZWQgb24gYW4gaW5z dHIpLg0KPiAgIC0gTVRGIFZNLUV4aXQgLSBkbyBub3RoaW5nIChWTUNTIHNob3VsZCBhbHJlYWR5 IGJlIHVwLXRvLWRhdGUpLg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArdTgga3ZtaV9hcmNoX3Jl bGF4X3BhZ2VfYWNjZXNzKHU4IG9sZCwgdTggbmV3KQ0KPiA+ICt7DQo+ID4gKwl1OCByZXQgPSBv bGQgfCBuZXc7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEFuIFNQVEUgZW50cnkgd2l0aCBq dXN0IHRoZSAtd3ggYml0cyBzZXQgY2FuIHRyaWdnZXIgYQ0KPiA+ICsJICogbWlzY29uZmlndXJh dGlvbiBlcnJvciBmcm9tIHRoZSBoYXJkd2FyZSwgYXMgaXQncyB0aGUgY2FzZQ0KPiA+ICsJICog Zm9yIHg4NiB3aGVyZSB0aGlzIGFjY2VzcyBtb2RlIGlzIHVzZWQgdG8gbWFyayBJL08gbWVtb3J5 Lg0KPiA+ICsJICogVGh1cywgd2UgbWFrZSBzdXJlIHRoYXQgLXd4IGFjY2Vzc2VzIGFyZSB0cmFu c2xhdGVkIHRvIHJ3eC4NCj4gPiArCSAqLw0KPiA+ICsJaWYgKChyZXQgJiAoS1ZNSV9QQUdFX0FD Q0VTU19XIHwgS1ZNSV9QQUdFX0FDQ0VTU19YKSkgPT0NCj4gPiArCSAgICAoS1ZNSV9QQUdFX0FD Q0VTU19XIHwgS1ZNSV9QQUdFX0FDQ0VTU19YKSkNCj4gPiArCQlyZXQgfD0gS1ZNSV9QQUdFX0FD Q0VTU19SOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgew0KPiA+ICAJdW5zaWduZWQgaW50IGFsbG93X2JpdDsNCj4gPiAg CWVudW0ga3ZtX3BhZ2VfdHJhY2tfbW9kZSB0cmFja19tb2RlOw0KPiA+IGRpZmYgLS1naXQgYS9h cmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMNCj4gPiBpbmRleCBiMTc4Yjg5 MDA2NjAuLjM0ODFjMDI0NzY4MCAxMDA2NDQNCj4gPiAtLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMN Cj4gPiArKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMNCj4gPiBAQCAtNzE4Myw2ICs3MTgzLDEwIEBA IHN0YXRpYyBib29sIHN2bV9zcHRfZmF1bHQoc3RydWN0IGt2bV92Y3B1DQo+ID4gKnZjcHUpDQo+ ID4gIAlyZXR1cm4gKHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPT0gU1ZNX0VYSVRfTlBG KTsNCj4gPiAgfQ0KPiA+ICANCj4gPiArc3RhdGljIHZvaWQgc3ZtX3NldF9tdGYoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSkNCj4gPiArew0KPiA+ICt9DQo+ID4gKw0KPiA+ICBz dGF0aWMgdm9pZCBzdm1fY3IzX3dyaXRlX2V4aXRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBi b29sDQo+ID4gZW5hYmxlKQ0KPiA+ICB7DQo+ID4gIH0NCj4gPiBAQCAtNzIyNSw2ICs3MjI5LDcg QEAgc3RhdGljIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcw0KPiA+IF9fcm9fYWZ0ZXJf aW5pdCA9IHsNCj4gPiAgCS5jcHVfaGFzX2FjY2VsZXJhdGVkX3RwciA9IHN2bV9jcHVfaGFzX2Fj Y2VsZXJhdGVkX3RwciwNCj4gPiAgCS5oYXNfZW11bGF0ZWRfbXNyID0gc3ZtX2hhc19lbXVsYXRl ZF9tc3IsDQo+ID4gIA0KPiA+ICsJLnNldF9tdGYgPSBzdm1fc2V0X210ZiwNCj4gPiAgCS5jcjNf d3JpdGVfZXhpdGluZyA9IHN2bV9jcjNfd3JpdGVfZXhpdGluZywNCj4gPiAgCS5tc3JfaW50ZXJj ZXB0ID0gc3ZtX21zcl9pbnRlcmNlcHQsDQo+ID4gIAkuZGVzY19pbnRlcmNlcHQgPSBzdm1fZGVz Y19pbnRlcmNlcHQsDQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9h cmNoL3g4Ni9rdm0vdm14L3ZteC5jDQo+ID4gaW5kZXggN2QxZTM0MWI1MWFkLi5mMDM2OWQwNTc0 ZGMgMTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYw0KPiA+ICsrKyBiL2Fy Y2gveDg2L2t2bS92bXgvdm14LmMNCj4gPiBAQCAtNTM4NCw2ICs1Mzg0LDcgQEAgc3RhdGljIGlu dCBoYW5kbGVfaW52YWxpZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUNCj4gPiAqdmNwdSkNCj4gPiAgDQo+ ID4gIHN0YXRpYyBpbnQgaGFuZGxlX21vbml0b3JfdHJhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUp DQo+ID4gIHsNCj4gPiArCWt2bWlfc3RvcF9zcyh2Y3B1KTsNCj4gPiAgCXJldHVybiAxOw0KPiA+ ICB9DQo+ID4gIA0KPiA+IEBAIC01OTkyLDYgKzU5OTMsMTEgQEAgc3RhdGljIGludCB2bXhfaGFu ZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1DQo+ID4gKnZjcHUpDQo+ID4gIAkJfQ0KPiA+ICAJfQ0K PiA+ICANCj4gPiArCWlmIChrdm1pX3ZjcHVfZW5hYmxlZF9zcyh2Y3B1KQ0KPiA+ICsJCQkmJiBl eGl0X3JlYXNvbiAhPSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9ODQo+ID4gKwkJCSYmIGV4aXRf cmVhc29uICE9DQo+ID4gRVhJVF9SRUFTT05fTU9OSVRPUl9UUkFQX0ZMQUcpDQo+IA0KPiBCYWQg aW5kZW50YXRpb24uICBUaGlzIGlzIHByZXZlbGFudCB0aHJvdWdoIHRoZSBzZXJpZXMuDQo+IA0K PiA+ICsJCWt2bWlfc3RvcF9zcyh2Y3B1KTsNCj4gPiArDQo+ID4gIAlpZiAoZXhpdF9yZWFzb24g PCBrdm1fdm14X21heF9leGl0X2hhbmRsZXJzDQo+ID4gIAkgICAgJiYga3ZtX3ZteF9leGl0X2hh bmRsZXJzW2V4aXRfcmVhc29uXSkNCj4gPiAgCQlyZXR1cm4ga3ZtX3ZteF9leGl0X2hhbmRsZXJz W2V4aXRfcmVhc29uXSh2Y3B1KTsNCj4gPiBAQCAtNzg0Miw2ICs3ODQ4LDE2IEBAIHN0YXRpYyBf X2V4aXQgdm9pZCBoYXJkd2FyZV91bnNldHVwKHZvaWQpDQo+ID4gIAlmcmVlX2t2bV9hcmVhKCk7 DQo+ID4gIH0NCj4gPiAgDQo+ID4gK3N0YXRpYyB2b2lkIHZteF9zZXRfbXRmKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpDQo+ID4gK3sNCj4gPiArCWlmIChlbmFibGUpDQo+ID4g KwkJdm1jc19zZXRfYml0cyhDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLA0KPiA+ICsJCQkgICAg ICBDUFVfQkFTRURfTU9OSVRPUl9UUkFQX0ZMQUcpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXZtY3Nf Y2xlYXJfYml0cyhDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLA0KPiA+ICsJCQkJQ1BVX0JBU0VE X01PTklUT1JfVFJBUF9GTEFHKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgc3RhdGljIHZvaWQgdm14 X21zcl9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQNCj4gPiBt c3IsDQo+ID4gIAkJCSAgICAgIGJvb2wgZW5hYmxlKQ0KPiA+ICB7DQo+ID4gQEAgLTc5MjcsNiAr Nzk0Myw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdm14X3g4Nl9vcHMNCj4gPiBfX3Jv X2FmdGVyX2luaXQgPSB7DQo+ID4gIAkuY3B1X2hhc19hY2NlbGVyYXRlZF90cHIgPSByZXBvcnRf ZmxleHByaW9yaXR5LA0KPiA+ICAJLmhhc19lbXVsYXRlZF9tc3IgPSB2bXhfaGFzX2VtdWxhdGVk X21zciwNCj4gPiAgDQo+ID4gKwkuc2V0X210ZiA9IHZteF9zZXRfbXRmLA0KPiA+ICAJLm1zcl9p bnRlcmNlcHQgPSB2bXhfbXNyX2ludGVyY2VwdCwNCj4gPiAgCS5jcjNfd3JpdGVfZXhpdGluZyA9 IHZteF9jcjNfd3JpdGVfZXhpdGluZywNCj4gPiAgCS5kZXNjX2ludGVyY2VwdCA9IHZteF9kZXNj X2ludGVyY2VwdCwNCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94 ODYva3ZtL3g4Ni5jDQo+ID4gaW5kZXggMzhhYWRkYWRiOTNhLi42NTg1NTM0MDI0OWEgMTAwNjQ0 DQo+ID4gLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jDQo+ID4gKysrIGIvYXJjaC94ODYva3ZtL3g4 Ni5jDQo+ID4gQEAgLTczNTgsNiArNzM1OCwxMyBAQCBzdGF0aWMgaW50IGluamVjdF9wZW5kaW5n X2V2ZW50KHN0cnVjdA0KPiA+IGt2bV92Y3B1ICp2Y3B1LCBib29sIHJlcV9pbnRfd2luKQ0KPiA+ ICB7DQo+ID4gIAlpbnQgcjsNCj4gPiAgDQo+ID4gKwlpZiAoa3ZtaV92Y3B1X2VuYWJsZWRfc3Mo dmNwdSkpDQo+ID4gKwkJLyoNCj4gPiArCQkgKiBXZSBjYW5ub3QgaW5qZWN0IGV2ZW50cyBkdXJp bmcgc2luZ2xlLXN0ZXBwaW5nLg0KPiA+ICsJCSAqIFRyeSBhZ2FpbiBsYXRlci4NCj4gPiArCQkg Ki8NCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0KPiA+ICAJLyogdHJ5IHRvIHJlaW5qZWN0IHBy ZXZpb3VzIGV2ZW50cyBpZiBhbnkgKi8NCj4gPiAgDQo+ID4gIAlpZiAodmNwdS0+YXJjaC5leGNl cHRpb24uaW5qZWN0ZWQpDQo+ID4gQEAgLTEwMTM0LDYgKzEwMTQxLDE4IEBAIHZvaWQga3ZtX2Nv bnRyb2xfY3IzX3dyaXRlX2V4aXRpbmcoc3RydWN0DQo+ID4ga3ZtX3ZjcHUgKnZjcHUsIGJvb2wg ZW5hYmxlKQ0KPiA+ICB9DQo+ID4gIEVYUE9SVF9TWU1CT0woa3ZtX2NvbnRyb2xfY3IzX3dyaXRl X2V4aXRpbmcpOw0KPiA+ICANCj4gPiArdm9pZCBrdm1fc2V0X210ZihzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUsIGJvb2wgZW5hYmxlKQ0KPiA+ICt7DQo+ID4gKwlrdm1feDg2X29wcy0+c2V0X210Zih2 Y3B1LCBlbmFibGUpOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0woa3ZtX3NldF9tdGYpOw0K PiA+ICsNCj4gPiArdm9pZCBrdm1fc2V0X2ludGVycnVwdF9zaGFkb3coc3RydWN0IGt2bV92Y3B1 ICp2Y3B1LCBpbnQgbWFzaykNCj4gPiArew0KPiA+ICsJa3ZtX3g4Nl9vcHMtPnNldF9pbnRlcnJ1 cHRfc2hhZG93KHZjcHUsIG1hc2spOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0woa3ZtX3Nl dF9pbnRlcnJ1cHRfc2hhZG93KTsNCj4gDQo+IFdoeSBkbyB0aGVzZSB3cmFwcGVycyBleGlzdCwg YW5kIHdoeSBhcmUgdGhleQ0KPiBleHBvcnRlZD8gIEludHJvc3BlY3Rpb24gaXMNCj4gYnVpbHQg aW50byBrdm0sIGFueSByZWFzb24gbm90IHRvIHVzZSBrdm1feDg2X29wcyBkaXJlY3RseT8gIFRo ZSBtb3N0DQo+IGRlZmluaXRlbHkgZG9uJ3QgbmVlZCB0byBiZSBleHBvcnRlZC4NCj4gDQo+ID4g Kw0KPiA+ICBib29sIGt2bV9zcHRfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQ0KPiA+ICB7 DQo+ID4gIAlyZXR1cm4ga3ZtX3g4Nl9vcHMtPnNwdF9mYXVsdCh2Y3B1KTsNCj4gPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9rdm1pLmggYi9pbmNsdWRlL2xpbnV4L2t2bWkuaA0KPiA+IGlu ZGV4IDVkMTYyYjllNjdmMi4uMWRjOTAyODRkYzNhIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUv bGludXgva3ZtaS5oDQo+ID4gKysrIGIvaW5jbHVkZS9saW51eC9rdm1pLmgNCj4gPiBAQCAtMjIs NiArMjIsOCBAQCBib29sIGt2bWlfcXVldWVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSk7DQo+ID4gIHZvaWQga3ZtaV90cmFwX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7DQo+ ID4gIGJvb2wga3ZtaV9kZXNjcmlwdG9yX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTgg ZGVzY3JpcHRvciwNCj4gPiB1OCB3cml0ZSk7DQo+ID4gIHZvaWQga3ZtaV9oYW5kbGVfcmVxdWVz dHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsNCj4gPiArdm9pZCBrdm1pX3N0b3Bfc3Moc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KTsNCj4gPiArYm9vbCBrdm1pX3ZjcHVfZW5hYmxlZF9zcyhzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpOw0KPiANCj4gU3BlbGwgb3V0IHNpbmdsZSBzdGVwLCBhbmQgYmUgY29u c2lzdGVudCBiZXR3ZWVuIHNpbmdsZV9zdGVwIGFuZA0KPiBzaW5nbGVzdGVwLg0KPiBUaGF0IGFw cGxpZXMgdG8gcHJldHR5IG11Y2ggZXZlcnkgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIHVubGVzcyBk b2luZw0KPiBzbw0KPiByZWFsbHkgbWFrZXMgdGhlIHZlcmJvc2l0eSBvYm5veGlvdXMuDQo+IA0K PiA+ICB2b2lkIGt2bWlfaW5pdF9lbXVsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7DQo+ID4g IHZvaWQga3ZtaV9hY3RpdmF0ZV9yZXBfY29tcGxldGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsN Cj4gPiAgYm9vbCBrdm1pX2JwX2ludGVyY2VwdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMy IGRiZyk7DQo+ID4gQEAgLTQ0LDYgKzQ2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bWlfaGFu ZGxlX3JlcXVlc3RzKHN0cnVjdA0KPiA+IGt2bV92Y3B1ICp2Y3B1KSB7IH0NCj4gPiAgc3RhdGlj IGlubGluZSBib29sIGt2bWlfaHlwZXJjYWxsX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkg ew0KPiA+IHJldHVybiBmYWxzZTsgfQ0KPiA+ICBzdGF0aWMgaW5saW5lIGJvb2wga3ZtaV9xdWV1 ZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7DQo+ID4gcmV0dXJuIHRydWU7IH0N Cj4gPiAgc3RhdGljIGlubGluZSB2b2lkIGt2bWlfdHJhcF9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpIHsgfQ0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQga3ZtaV9zdG9wX3NzKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSkgeyB9DQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1pX3ZjcHVfZW5h YmxlZF9zcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsNCj4gPiByZXR1cm4gZmFsc2U7IH0NCj4g PiAgc3RhdGljIGlubGluZSB2b2lkIGt2bWlfaW5pdF9lbXVsYXRlKHN0cnVjdCBrdm1fdmNwdSAq dmNwdSkgeyB9DQo+ID4gIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1pX2FjdGl2YXRlX3JlcF9jb21w bGV0ZShzdHJ1Y3Qga3ZtX3ZjcHUNCj4gPiAqdmNwdSkgeyB9DQo+ID4gIHN0YXRpYyBpbmxpbmUg Ym9vbCBrdm1pX2JwX2ludGVyY2VwdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyDQo+ID4g ZGJnKQ0KPiA+IGRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1pLmMgYi92aXJ0L2t2bS9rdm1pLmMN Cj4gPiBpbmRleCBkNDdhNzI1YTQwNDUuLmEzYTVhZjkwODBhOSAxMDA2NDQNCj4gPiAtLS0gYS92 aXJ0L2t2bS9rdm1pLmMNCj4gPiArKysgYi92aXJ0L2t2bS9rdm1pLmMNCj4gPiBAQCAtMTI2MCwx MSArMTI2MCwxOSBAQCB2b2lkIGt2bWlfcnVuX2pvYnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQ0K PiA+ICAJfQ0KPiA+ICB9DQo+ID4gIA0KPiA+ICtzdGF0aWMgYm9vbCBuZWVkX3RvX3dhaXRfZm9y X3NzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGt2bWlfdmNw dSAqaXZjcHUgPSBJVkNQVSh2Y3B1KTsNCj4gPiArCXN0cnVjdCBrdm1pICppa3ZtID0gSUtWTSh2 Y3B1LT5rdm0pOw0KPiA+ICsNCj4gPiArCXJldHVybiBhdG9taWNfcmVhZCgmaWt2bS0+c3NfYWN0 aXZlKSAmJiAhaXZjcHUtPnNzX293bmVyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgYm9v bCBuZWVkX3RvX3dhaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQ0KPiA+ICB7DQo+ID4gIAlzdHJ1 Y3Qga3ZtaV92Y3B1ICppdmNwdSA9IElWQ1BVKHZjcHUpOw0KPiA+ICANCj4gPiAtCXJldHVybiBp dmNwdS0+cmVwbHlfd2FpdGluZzsNCj4gPiArCXJldHVybiBpdmNwdS0+cmVwbHlfd2FpdGluZyB8 fCBuZWVkX3RvX3dhaXRfZm9yX3NzKHZjcHUpOw0KPiA+ICB9DQo+ID4gIA0KPiA+ICBzdGF0aWMg Ym9vbCBkb25lX3dhaXRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQ0KPiA+IEBAIC0xNTcyLDYg KzE1ODAsMTQxIEBAIGludCBrdm1pX2NtZF9wYXVzZV92Y3B1KHN0cnVjdCBrdm1fdmNwdQ0KPiA+ ICp2Y3B1LCBib29sIHdhaXQpDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+ICANCj4gPiAr dm9pZCBrdm1pX3N0b3Bfc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3Qga3ZtaV92Y3B1ICppdmNwdSA9IElWQ1BVKHZjcHUpOw0KPiA+ICsJc3RydWN0IGt2bSAq a3ZtID0gdmNwdS0+a3ZtOw0KPiA+ICsJc3RydWN0IGt2bWkgKmlrdm07DQo+ID4gKwlpbnQgaTsN Cj4gPiArDQo+ID4gKwlpa3ZtID0ga3ZtaV9nZXQoa3ZtKTsNCj4gPiArCWlmICghaWt2bSkNCj4g PiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KCFpdmNwdS0+c3Nfb3duZXIp KSB7DQo+ID4gKwkJa3ZtaV93YXJuKGlrdm0sICIlc1xuIiwgX19mdW5jX18pOw0KPiA+ICsJCWdv dG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAoaSA9IGlrdm0tPnNzX2xldmVsOyBp LS07KQ0KPiA+ICsJCWt2bWlfc2V0X2dmbl9hY2Nlc3Moa3ZtLA0KPiA+ICsJCQkJICAgIGlrdm0t PnNzX2NvbnRleHRbaV0uZ2ZuLA0KPiA+ICsJCQkJICAgIGlrdm0tPnNzX2NvbnRleHRbaV0ub2xk X2FjY2VzcywNCj4gPiArCQkJCSAgICBpa3ZtLQ0KPiA+ID5zc19jb250ZXh0W2ldLm9sZF93cml0 ZV9iaXRtYXApOw0KPiA+ICsNCj4gPiArCWlrdm0tPnNzX2xldmVsID0gMDsNCj4gPiArDQo+ID4g Kwlrdm1pX2FyY2hfc3RvcF9zaW5nbGVfc3RlcCh2Y3B1KTsNCj4gPiArDQo+ID4gKwlhdG9taWNf c2V0KCZpa3ZtLT5zc19hY3RpdmUsIGZhbHNlKTsNCj4gPiArCS8qDQo+ID4gKwkgKiBNYWtlIHNz X2FjdGl2ZSB1cGRhdGUgdmlzaWJsZQ0KPiA+ICsJICogYmVmb3JlIHJlc3VtaW5nIGFsbCB0aGUg b3RoZXIgdkNQVXMuDQo+ID4gKwkgKi8NCj4gPiArCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7DQo+ ID4gKwlrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgMCk7DQo+ID4gKw0KPiA+ICsJaXZj cHUtPnNzX293bmVyID0gZmFsc2U7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKwlrdm1pX3B1dChr dm0pOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0woa3ZtaV9zdG9wX3NzKTsNCj4gPiArDQo+ ID4gK3N0YXRpYyBib29sIGt2bWlfYWNxdWlyZV9zcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBrdm1pX3ZjcHUgKml2Y3B1ID0gSVZDUFUodmNwdSk7DQo+ID4g KwlzdHJ1Y3Qga3ZtaSAqaWt2bSA9IElLVk0odmNwdS0+a3ZtKTsNCj4gPiArDQo+ID4gKwlpZiAo aXZjcHUtPnNzX293bmVyKQ0KPiA+ICsJCXJldHVybiB0cnVlOw0KPiA+ICsNCj4gPiArCWlmIChh dG9taWNfY21weGNoZygmaWt2bS0+c3NfYWN0aXZlLCBmYWxzZSwgdHJ1ZSkgIT0gZmFsc2UpDQo+ ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWt2bV9tYWtlX2FsbF9jcHVzX3JlcXVl c3QodmNwdS0+a3ZtLCBLVk1fUkVRX0lOVFJPU1BFQ1RJT04gfA0KPiA+ICsJCQkJCQlLVk1fUkVR VUVTVF9XQUlUKTsNCj4gPiArDQo+ID4gKwlpdmNwdS0+c3Nfb3duZXIgPSB0cnVlOw0KPiA+ICsN Cj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBrdm1p X3J1bl9zcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTgNCj4gPiBhY2Nlc3Mp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBrdm1pICppa3ZtID0gSUtWTSh2Y3B1LT5rdm0pOw0KPiA+ ICsJdTggb2xkX2FjY2VzcywgbmV3X2FjY2VzczsNCj4gPiArCXUzMiBvbGRfd3JpdGVfYml0bWFw Ow0KPiA+ICsJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpOw0KPiA+ICsJaW50IGVycjsNCj4g PiArDQo+ID4gKwlrdm1pX2FyY2hfc3RhcnRfc2luZ2xlX3N0ZXAodmNwdSk7DQo+ID4gKw0KPiA+ ICsJZXJyID0ga3ZtaV9nZXRfZ2ZuX2FjY2Vzcyhpa3ZtLCBnZm4sICZvbGRfYWNjZXNzLA0KPiA+ ICZvbGRfd3JpdGVfYml0bWFwKTsNCj4gPiArCS8qIGxpa2VseSB3YXMgcmVtb3ZlZCBmcm9tIHJh ZGl4IHRyZWUgZHVlIHRvIHJ3eCAqLw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCWt2bWlfd2Fy bihpa3ZtLCAiJXM6IGdmbiAweCVsbHggbm90IGZvdW5kIGluIHRoZSByYWRpeA0KPiA+IHRyZWVc biIsDQo+ID4gKwkJCSAgX19mdW5jX18sIGdmbik7DQo+ID4gKwkJcmV0dXJuIHRydWU7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJaWYgKGlrdm0tPnNzX2xldmVsID09IFNJTkdMRV9TVEVQX01BWF9E RVBUSCAtIDEpIHsNCj4gPiArCQlrdm1pX2Vycihpa3ZtLCAic2luZ2xlIHN0ZXAgbGltaXQgcmVh Y2hlZFxuIik7DQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlr dm0tPnNzX2NvbnRleHRbaWt2bS0+c3NfbGV2ZWxdLmdmbiA9IGdmbjsNCj4gPiArCWlrdm0tPnNz X2NvbnRleHRbaWt2bS0+c3NfbGV2ZWxdLm9sZF9hY2Nlc3MgPSBvbGRfYWNjZXNzOw0KPiA+ICsJ aWt2bS0+c3NfY29udGV4dFtpa3ZtLT5zc19sZXZlbF0ub2xkX3dyaXRlX2JpdG1hcCA9DQo+ID4g b2xkX3dyaXRlX2JpdG1hcDsNCj4gPiArCWlrdm0tPnNzX2xldmVsKys7DQo+ID4gKw0KPiA+ICsJ bmV3X2FjY2VzcyA9IGt2bWlfYXJjaF9yZWxheF9wYWdlX2FjY2VzcyhvbGRfYWNjZXNzLCBhY2Nl c3MpOw0KPiA+ICsNCj4gPiArCWt2bWlfc2V0X2dmbl9hY2Nlc3ModmNwdS0+a3ZtLCBnZm4sIG5l d19hY2Nlc3MsDQo+ID4gb2xkX3dyaXRlX2JpdG1hcCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRy dWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wga3ZtaV9zdGFydF9zcyhzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIGdwYV90IGdwYSwgdTggYWNjZXNzKQ0KPiA+ICt7DQo+ID4gKwlib29sIHJldCA9 IGZhbHNlOw0KPiA+ICsNCj4gPiArCXdoaWxlICgha3ZtaV9hY3F1aXJlX3NzKHZjcHUpKSB7DQo+ ID4gKwkJaW50IGVyciA9IGt2bWlfcnVuX2pvYnNfYW5kX3dhaXQodmNwdSk7DQo+ID4gKw0KPiA+ ICsJCWlmIChlcnIpIHsNCj4gPiArCQkJa3ZtaV9lcnIoSUtWTSh2Y3B1LT5rdm0pLCAia3ZtaV9h Y3F1aXJlX3NzKCkNCj4gPiBoYXMgZmFpbGVkXG4iKTsNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4g KwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChrdm1pX3J1bl9zcyh2Y3B1LCBncGEsIGFj Y2VzcykpDQo+ID4gKwkJcmV0ID0gdHJ1ZTsNCj4gPiArCWVsc2UNCj4gPiArCQlrdm1pX3N0b3Bf c3ModmNwdSk7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtib29sIGt2bWlfdmNwdV9lbmFibGVkX3NzKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGt2bWlfdmNwdSAqaXZjcHUgPSBJVkNQVSh2Y3B1KTsN Cj4gPiArCXN0cnVjdCBrdm1pICppa3ZtOw0KPiA+ICsJYm9vbCByZXQ7DQo+ID4gKw0KPiA+ICsJ aWt2bSA9IGt2bWlfZ2V0KHZjcHUtPmt2bSk7DQo+ID4gKwlpZiAoIWlrdm0pDQo+ID4gKwkJcmV0 dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldCA9IGl2Y3B1LT5zc19vd25lcjsNCj4gPiArDQo+ ID4gKwlrdm1pX3B1dCh2Y3B1LT5rdm0pOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArRVhQT1JUX1NZTUJPTChrdm1pX3ZjcHVfZW5hYmxlZF9zcyk7DQo+ID4gKw0KPiA+ ICBzdGF0aWMgdm9pZCBrdm1pX2pvYl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQg KmN0eCkNCj4gPiAgew0KPiA+ICAJc3RydWN0IGt2bWlfdmNwdSAqaXZjcHUgPSBJVkNQVSh2Y3B1 KTsNCj4gPiBkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtaV9pbnQuaCBiL3ZpcnQva3ZtL2t2bWlf aW50LmgNCj4gPiBpbmRleCBkN2Y5ODU4ZDNlOTcuLjE1NTBmZTMzZWQ0OCAxMDA2NDQNCj4gPiAt LS0gYS92aXJ0L2t2bS9rdm1pX2ludC5oDQo+ID4gKysrIGIvdmlydC9rdm0va3ZtaV9pbnQuaA0K PiA+IEBAIC0xMjYsNiArMTI2LDkgQEAgc3RydWN0IGt2bWlfdmNwdSB7DQo+ID4gIAkJREVDTEFS RV9CSVRNQVAoaGlnaCwgS1ZNSV9OVU1fTVNSKTsNCj4gPiAgCX0gbXNyX21hc2s7DQo+ID4gIA0K PiA+ICsJYm9vbCBzc19vd25lcjsNCj4gDQo+IFdoeSBpcyBzaW5nbGUtc3RlcHBpbmcgbXV0dWFs bHkgZXhjbHVzaXZlIGFjcm9zcyBhbGwgdkNQVXM/ICBEb2VzDQo+IHRoYXQNCj4gYWx3YXlzIGhh dmUgdG8gYmUgdGhlIGNhc2U/DQo+IA0KPiA+ICsJYm9vbCBzc19yZXF1ZXN0ZWQ7DQo+ID4gKw0K PiA+ICAJc3RydWN0IGxpc3RfaGVhZCBqb2JfbGlzdDsNCj4gPiAgCXNwaW5sb2NrX3Qgam9iX2xv Y2s7DQo+ID4gIA0KPiA+IEBAIC0xNTEsNiArMTU0LDE1IEBAIHN0cnVjdCBrdm1pIHsNCj4gPiAg CURFQ0xBUkVfQklUTUFQKGV2ZW50X2FsbG93X21hc2ssIEtWTUlfTlVNX0VWRU5UUyk7DQo+ID4g IAlERUNMQVJFX0JJVE1BUCh2bV9ldl9tYXNrLCBLVk1JX05VTV9FVkVOVFMpOw0KPiA+ICANCj4g PiArI2RlZmluZSBTSU5HTEVfU1RFUF9NQVhfREVQVEggOA0KPiA+ICsJc3RydWN0IHsNCj4gPiAr CQlnZm5fdCBnZm47DQo+ID4gKwkJdTggb2xkX2FjY2VzczsNCj4gPiArCQl1MzIgb2xkX3dyaXRl X2JpdG1hcDsNCj4gPiArCX0gc3NfY29udGV4dFtTSU5HTEVfU1RFUF9NQVhfREVQVEhdOw0KPiA+ ICsJdTggc3NfbGV2ZWw7DQo+ID4gKwlhdG9taWNfdCBzc19hY3RpdmU7DQo+IA0KPiBHb29kIG9w cG9ydHVuaXR5IGZvciBhbiB1bm5hbWVkIHN0cnVjdCwgZS5nLg0KPiANCj4gCXN0cnVjdCB7DQo+ IAkJc3RydWN0IHNpbmdsZV9zdGVwX2NvbnRleHRbLi4uXTsNCj4gCQlib29sIG93bmVyOw0KPiAJ CWJvb2wgcmVxdWVzdGVkOw0KPiAJCXU4IGxldmVsDQo+IAkJYXRvbWljX3QgYWN0aXZlOw0KPiAJ fSBzaW5nbGVfc3RlcDsNCj4gDQo+ID4gKw0KPiA+ICAJc3RydWN0IHsNCj4gPiAgCQlib29sIGlu aXRpYWxpemVkOw0KPiA+ICAJCWF0b21pY190IGVuYWJsZWQ7DQo+ID4gQEAgLTIyNCw2ICsyMzYs NyBAQCBpbnQga3ZtaV9hZGRfam9iKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwNCj4gPiAgCQkgdm9p ZCAqY3R4LCB2b2lkICgqZnJlZV9mY3QpKHZvaWQgKmN0eCkpOw0KPiA+ICB2b2lkIGt2bWlfaGFu ZGxlX2NvbW1vbl9ldmVudF9hY3Rpb25zKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyDQo+ID4g YWN0aW9uLA0KPiA+ICAJCQkJICAgICAgY29uc3QgY2hhciAqc3RyKTsNCj4gPiArYm9vbCBrdm1p X3N0YXJ0X3NzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1OCBhY2Nlc3MpOw0K PiA+ICANCj4gPiAgLyogYXJjaCAqLw0KPiA+ICB2b2lkIGt2bWlfYXJjaF91cGRhdGVfcGFnZV90 cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0sDQo+ID4gQEAgLTI3NCw2ICsyODcsOSBAQCBpbnQga3Zt aV9hcmNoX2NtZF9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdA0KPiA+IGt2bV92Y3B1ICp2Y3B1LCB1 OCB2ZWN0b3IsDQo+ID4gIAkJCQkgICB1NjQgYWRkcmVzcyk7DQo+ID4gIGludCBrdm1pX2FyY2hf Y21kX2NvbnRyb2xfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LA0KPiA+ICAJCQkgICAgIGNvbnN0 IHN0cnVjdCBrdm1pX2NvbnRyb2xfY3IgKnJlcSk7DQo+ID4gK3ZvaWQga3ZtaV9hcmNoX3N0YXJ0 X3NpbmdsZV9zdGVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7DQo+ID4gK3ZvaWQga3ZtaV9hcmNo X3N0b3Bfc2luZ2xlX3N0ZXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsNCj4gPiArdTgga3ZtaV9h cmNoX3JlbGF4X3BhZ2VfYWNjZXNzKHU4IG9sZCwgdTggbmV3KTsNCj4gPiAgaW50IGt2bWlfYXJj aF9jbWRfY29udHJvbF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LA0KPiA+ICAJCQkgICAgICBj b25zdCBzdHJ1Y3Qga3ZtaV9jb250cm9sX21zciAqcmVxKTsNCj4gPiAgaW50IGt2bWlfYXJjaF9j bWRfZ2V0X210cnJfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBncGEsIHU4DQo+ID4g KnR5cGUpOw0KPiANCj4gX19fX19fX19fX19fX19fX19fX19fX19fDQo+IFRoaXMgZW1haWwgd2Fz IHNjYW5uZWQgYnkgQml0ZGVmZW5kZXINCg0K