Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp6852720ybi; Wed, 29 May 2019 14:25:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqzamLYpH+ZZwRNBoHDyN0yduHIy4t3hUCudqYoW+kztOzXzqaRYCUiVpWIlyHgP4wP2gXN0 X-Received: by 2002:a17:90a:33c3:: with SMTP id n61mr14524768pjb.7.1559165154250; Wed, 29 May 2019 14:25:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559165154; cv=none; d=google.com; s=arc-20160816; b=DXERuwA0ZCgbYmW1r4XtDyl55yAWasshBKKJB+39c2cub0Q6rXxjBuO8EZH3WA5qix hpuZKOc6RcimAiCLvXNgpOj362ApLOWJdwUJKbGeaAaWq+kKyH930KOZe9jR0VK9bQRj 9Q4YmOF60E8PFcrTqg5Fbk1Hbnb4+1rHAEkA93UnfEJJ9QjWYRW2Wi1D9XVkyyiv4NAj lw2v9SV5zVy0yXAgGlXASN+IDbi8SkSaqqPvZ92JkL81tLxnHUGC2IFSfpeIDhI/ZrxY F7Wx18t7eJk6OwndRYi9gm1KdusGExneCO8rL8hO+6aAAUDUW6cjDRhV6IvY3x0KB2kx boUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from:dkim-signature; bh=GLIlyI0Aj5cDBZ8rcdd35EClfSWw2DRreJuwnpFOQFE=; b=cLuFKaTVM/hZdTNmzKjwS4GRF40CMowlQseNS443x58DqqTqmbvxXhC0/1bPD6w3DI c8tutHweY8PG9ACaIE33QKH7CRJsuZ1KBjtSVF/S6rM0RZXOMRy87fPyX/inQ+6d1mGa x0sAw2yqGc6gvLCWvw5JD4Um/7e2oa2+VY7+/8gycvevLZ0dPGhgfKrfec1xomvUQ8FD KYhjIBDXwq2OD9QibkXdmcgdrSRlWc2BOZ58FXC2EAoA4gt74ZxD5cm310JTHVQWYytm 7qjIskBS8AOehIf6O+EIA2QhDCnkBbrLAD1ITEb6t9Z/3Cv2LDFSlBn/e5Jm6XWPlLs7 +t6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@netapp.onmicrosoft.com header.s=selector2-netapp-onmicrosoft-com header.b=khpQQBd8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z6si912455pgp.35.2019.05.29.14.25.35; Wed, 29 May 2019 14:25:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@netapp.onmicrosoft.com header.s=selector2-netapp-onmicrosoft-com header.b=khpQQBd8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726599AbfE2VVx (ORCPT + 99 others); Wed, 29 May 2019 17:21:53 -0400 Received: from mail-eopbgr710067.outbound.protection.outlook.com ([40.107.71.67]:31232 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726043AbfE2VVx (ORCPT ); Wed, 29 May 2019 17:21:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netapp.onmicrosoft.com; s=selector2-netapp-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GLIlyI0Aj5cDBZ8rcdd35EClfSWw2DRreJuwnpFOQFE=; b=khpQQBd8jieEiZjYqzXzSdkzm/fDAxsU9P8UcXXQa6fUOrCqJzYC5A6hZlsfsKofsrvOGiy36WIc+ndC5eoY9/k+wt2xmwbhYgxL1OPSCvCYxlwKVitRSpy3goT5xZPSXB+kJjxd7rAC0GjOx/NFuuTw6Jt4KsXzROLRjGAa8G0= Received: from BN8PR06MB6228.namprd06.prod.outlook.com (20.178.217.156) by BN8PR06MB5908.namprd06.prod.outlook.com (20.179.139.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1922.20; Wed, 29 May 2019 21:18:30 +0000 Received: from BN8PR06MB6228.namprd06.prod.outlook.com ([fe80::bc27:e0e1:e3e2:7b52]) by BN8PR06MB6228.namprd06.prod.outlook.com ([fe80::bc27:e0e1:e3e2:7b52%6]) with mapi id 15.20.1922.021; Wed, 29 May 2019 21:18:30 +0000 From: "Schumaker, Anna" To: "trond.myklebust@hammerspace.com" , "dhowells@redhat.com" CC: "linux-nfs@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" , "viro@zeniv.linux.org.uk" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 23/23] NFS: Add fs_context support. Thread-Topic: [PATCH 23/23] NFS: Add fs_context support. Thread-Index: AQHVEYNG838cUEcJok+E0qukvKpip6aCpRcA Date: Wed, 29 May 2019 21:18:30 +0000 Message-ID: <655f9c53f809a727bcc087228efc1b5dc3ec1f2d.camel@netapp.com> References: <155862813755.26654.563679411147031501.stgit@warthog.procyon.org.uk> <155862834550.26654.17230477291010963688.stgit@warthog.procyon.org.uk> In-Reply-To: <155862834550.26654.17230477291010963688.stgit@warthog.procyon.org.uk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.32.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Anna.Schumaker@netapp.com; x-originating-ip: [23.28.75.121] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e6966717-2b83-4350-d339-08d6e47b32f6 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:BN8PR06MB5908; x-ms-traffictypediagnostic: BN8PR06MB5908: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:972; x-forefront-prvs: 0052308DC6 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(39860400002)(136003)(376002)(346002)(396003)(199004)(189003)(6306002)(6436002)(478600001)(3846002)(2906002)(72206003)(6116002)(53936002)(486006)(64756008)(73956011)(305945005)(76116006)(81156014)(66946007)(446003)(476003)(66556008)(6246003)(14444005)(14454004)(118296001)(7736002)(68736007)(6486002)(2616005)(5660300002)(66446008)(11346002)(91956017)(30864003)(4326008)(71190400001)(71200400001)(66476007)(58126008)(186003)(66066001)(99286004)(102836004)(6506007)(25786009)(5024004)(8676002)(256004)(81166006)(8936002)(76176011)(110136005)(54906003)(229853002)(36756003)(6512007)(316002)(45080400002)(26005)(86362001)(53946003)(2501003)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BN8PR06MB5908;H:BN8PR06MB6228.namprd06.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: netapp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: xyeyGBhfQ+aETCF9d+MwqQg2Ohr5qMKguRQPcD2ijiE9IF+/qR+7qk8OCdAqVXwThfIP9wGKHwUkwywK0Is6OFWcM/GJ25yw94afXJ5dGb446W6MQI6YLuxGKEKSEfjC0WML0N8Eeg5alxF6Hetb+B9+jIdx6Lv6PLZBwFBDbqirGgKW3Kf3QqKY1nfNFttLsNsh8MxiBkLe6UdfHakNeBsBN9SlaokhnwE9h++1vbbGR+hcK1HQdNwNYjy7D+RbMnGaeC5kK6aqOdjbgi8r3/eXAV2WwYuM4QIvOX9ZPGDpEqtuxknVb6T49EGJUTMSTeUfyIZwuux2rWctrgy3Cb+f5e2K2QPO5uA41+hY8P5xvkAIN60HISd0qV5l3pQ9fPu+VCmstJC5wx1oF4hqnegy4nEKvhjTHpc8U6RA/6A= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: netapp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e6966717-2b83-4350-d339-08d6e47b32f6 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 May 2019 21:18:30.4452 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4b0911a0-929b-4715-944b-c03745165b3a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: bjschuma@netapp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR06MB5908 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgRGF2aWQsDQoNCk9uIFRodSwgMjAxOS0wNS0yMyBhdCAxNzoxOSArMDEwMCwgRGF2aWQgSG93 ZWxscyB3cm90ZToNCj4gQWRkIGZpbGVzeXN0ZW0gY29udGV4dCBzdXBwb3J0IHRvIE5GUywgcGFy c2luZyB0aGUgb3B0aW9ucyBpbiBhZHZhbmNlIGFuZA0KPiBhdHRhY2hpbmcgdGhlIGluZm9ybWF0 aW9uIHRvIHN0cnVjdCBuZnNfZnNfY29udGV4dC4gIFRoZSBoaWdobGlnaHRzIGFyZToNCj4gDQo+ ICAoKikgTWVyZ2UgbmZzX21vdW50X2luZm8gYW5kIG5mc19jbG9uZV9tb3VudCBpbnRvIG5mc19m c19jb250ZXh0LiAgVGhpcw0KPiAgICAgIHN0cnVjdHVyZSByZXByZXNlbnRzIE5GUydzIHN1cGVy YmxvY2sgY29uZmlnLg0KPiANCj4gICgqKSBNYWtlIHVzZSBvZiB0aGUgVkZTJ3MgcGFyc2luZyBz dXBwb3J0IHRvIHNwbGl0IGNvbW1hLXNlcGFyYXRlZCBsaXN0cy4NCj4gDQo+ICAoKikgUGluIHRo ZSBORlMgcHJvdG9jb2wgbW9kdWxlIGluIHRoZSBuZnNfZnNfY29udGV4dC4NCj4gDQo+ICAoKikg QXR0YWNoIHN1cHBsZW1lbnRhcnkgZXJyb3IgaW5mb3JtYXRpb24gdG8gZnNfY29udGV4dC4gIFRo aXMgaGFzIHRoZQ0KPiAgICAgIGRvd25zaWRlIHRoYXQgdGhlc2Ugc3RyaW5ncyBtdXN0IGJlIHN0 YXRpYyBhbmQgY2FuJ3QgYmUgZm9ybWF0dGVkLg0KPiANCj4gICgqKSBSZW1vdmUgdGhlIGF1eGls aWFyeSBmaWxlX3N5c3RlbV90eXBlIHN0cnVjdHMgc2luY2UgdGhlIGluZm9ybWF0aW9uDQo+ICAg ICAgbmVjZXNzYXJ5IGNhbiBiZSBjb252ZXllZCBpbiB0aGUgbmZzX2ZzX2NvbnRleHQgc3RydWN0 IGluc3RlYWQuDQo+IA0KPiAgKCopIFJvb3QgbW91bnRzIGFyZSBtYWRlIGJ5IGR1cGxpY2F0aW5n IHRoZSBjb25maWcgZm9yIHRoZSByZXF1ZXN0ZWQgbW91bnQNCj4gICAgICBzbyBhcyB0byBoYXZl IHRoZSBzYW1lIHBhcmFtZXRlcnMuICBTdWJtb3VudHMgcGljayB1cCB0aGVpciBwYXJhbWV0ZXJz DQo+ICAgICAgZnJvbSB0aGUgcGFyZW50IHN1cGVyYmxvY2suDQo+IA0KPiBbQVYgLS0gcmV0cmFu cyBpcyB1MzIsIG5vdCBzdHJpbmddDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBIb3dlbGxz IDxkaG93ZWxsc0ByZWRoYXQuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBBbCBWaXJvIDx2aXJvQHpl bml2LmxpbnV4Lm9yZy51az4NCj4gLS0tDQo+IA0KPiAgZnMvbmZzL2NsaWVudC5jICAgICAgICAg fCAgIDc4ICstLQ0KPiAgZnMvbmZzL2ZzX2NvbnRleHQuYyAgICAgfCAxMzMwICsrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IC0tLQ0KPiAgZnMvbmZzL2ZzY2Fj aGUuYyAgICAgICAgfCAgICAyDQo+ICBmcy9uZnMvZ2V0cm9vdC5jICAgICAgICB8ICAgNzMgKy0t DQo+ICBmcy9uZnMvaW50ZXJuYWwuaCAgICAgICB8ICAxMDQgKy0tLQ0KPiAgZnMvbmZzL25hbWVz cGFjZS5jICAgICAgfCAgMTM0ICsrKy0tDQo+ICBmcy9uZnMvbmZzM19mcy5oICAgICAgICB8ICAg IDINCj4gIGZzL25mcy9uZnMzY2xpZW50LmMgICAgIHwgICAgNQ0KPiAgZnMvbmZzL25mczNwcm9j LmMgICAgICAgfCAgICAyDQo+ICBmcy9uZnMvbmZzNF9mcy5oICAgICAgICB8ICAgIDkNCj4gIGZz L25mcy9uZnM0Y2xpZW50LmMgICAgIHwgICA2MCArLQ0KPiAgZnMvbmZzL25mczRuYW1lc3BhY2Uu YyAgfCAgMjg1ICsrKysrKy0tLS0NCj4gIGZzL25mcy9uZnM0cHJvYy5jICAgICAgIHwgICAgMg0K PiAgZnMvbmZzL25mczRzdXBlci5jICAgICAgfCAgMTY2ICsrKy0tLQ0KPiAgZnMvbmZzL3Byb2Mu YyAgICAgICAgICAgfCAgICAyDQo+ICBmcy9uZnMvc3VwZXIuYyAgICAgICAgICB8ICAzNjIgKysr Ky0tLS0tLS0tLQ0KPiAgaW5jbHVkZS9saW51eC9uZnNfeGRyLmggfCAgICA4DQo+ICAxNyBmaWxl cyBjaGFuZ2VkLCAxMjkzIGluc2VydGlvbnMoKyksIDEzMzEgZGVsZXRpb25zKC0pDQoNCkNhbiB5 b3UgcGxlYXNlIHNwbGl0IHRoaXMgcGF0Y2ggdXA/ICBUaGUgbWFpbGluZyBsaXN0IGRyb3BwZWQg aXQgYmVjYXVzZSBpdCdzDQpvdmVyIDEwMCwwMDAgY2hhcmFjdGVycyAoaHR0cDovL3ZnZXIua2Vy bmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sI3RhYm9vKSBhbmQgSQ0KY2FuJ3QgdXNlIHRoZSB2 ZXJzaW9uIHlvdSBzZW50IGRpcmVjdGx5IHRvIG1lIGJlY2F1c2UgT2ZmaWNlMzY1IC8gRXZvbHV0 aW9uDQprZWVwcyBjb252ZXJ0aW5nIHRhYnMgdG8gc3BhY2VzIHNvbWV3aGVyZSBhbG9uZyB0aGUg bGluZS4NCg0KVGhhbmtzLA0KQW5uYQ0KDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVu dC5jIGIvZnMvbmZzL2NsaWVudC5jDQo+IGluZGV4IDQ1MzRlY2ViZTM4MC4uY2I1NDBlZGViM2Ux IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvY2xpZW50LmMNCj4gKysrIGIvZnMvbmZzL2NsaWVudC5j DQo+IEBAIC02NDksMjYgKzY0OSwyNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChuZnNfaW5pdF9jbGll bnQpOw0KPiAgICogQ3JlYXRlIGEgdmVyc2lvbiAyIG9yIDMgY2xpZW50DQo+ICAgKi8NCj4gIHN0 YXRpYyBpbnQgbmZzX2luaXRfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsDQo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY2Zn LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX3N1YnZlcnNpb24gKm5m c19tb2QpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmc19jb250 ZXh0ICpmYykNCj4gIHsNCj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0 eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4gICAgICAgICBzdHJ1Y3QgcnBjX3RpbWVvdXQgdGlt ZXBhcm1zOw0KPiAgICAgICAgIHN0cnVjdCBuZnNfY2xpZW50X2luaXRkYXRhIGNsX2luaXQgPSB7 DQo+IC0gICAgICAgICAgICAgICAuaG9zdG5hbWUgPSBjZmctPm5mc19zZXJ2ZXIuaG9zdG5hbWUs DQo+IC0gICAgICAgICAgICAgICAuYWRkciA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmY2Zn LT5uZnNfc2VydmVyLmFkZHJlc3MsDQo+IC0gICAgICAgICAgICAgICAuYWRkcmxlbiA9IGNmZy0+ bmZzX3NlcnZlci5hZGRybGVuLA0KPiAtICAgICAgICAgICAgICAgLm5mc19tb2QgPSBuZnNfbW9k LA0KPiAtICAgICAgICAgICAgICAgLnByb3RvID0gY2ZnLT5uZnNfc2VydmVyLnByb3RvY29sLA0K PiAtICAgICAgICAgICAgICAgLm5ldCA9IGNmZy0+bmV0LA0KPiArICAgICAgICAgICAgICAgLmhv c3RuYW1lID0gY3R4LT5uZnNfc2VydmVyLmhvc3RuYW1lLA0KPiArICAgICAgICAgICAgICAgLmFk ZHIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNzLA0K PiArICAgICAgICAgICAgICAgLmFkZHJsZW4gPSBjdHgtPm5mc19zZXJ2ZXIuYWRkcmxlbiwNCj4g KyAgICAgICAgICAgICAgIC5uZnNfbW9kID0gY3R4LT5uZnNfbW9kLA0KPiArICAgICAgICAgICAg ICAgLnByb3RvID0gY3R4LT5uZnNfc2VydmVyLnByb3RvY29sLA0KPiArICAgICAgICAgICAgICAg Lm5ldCA9IGZjLT5uZXRfbnMsDQo+ICAgICAgICAgICAgICAgICAudGltZXBhcm1zID0gJnRpbWVw YXJtcywNCj4gICAgICAgICAgICAgICAgIC5jcmVkID0gc2VydmVyLT5jcmVkLA0KPiAgICAgICAg IH07DQo+ICAgICAgICAgc3RydWN0IG5mc19jbGllbnQgKmNscDsNCj4gICAgICAgICBpbnQgZXJy b3I7DQo+IA0KPiAtICAgICAgIG5mc19pbml0X3RpbWVvdXRfdmFsdWVzKCZ0aW1lcGFybXMsIGNm Zy0+bmZzX3NlcnZlci5wcm90b2NvbCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjZmctPnRpbWVvLCBjZmctPnJldHJhbnMpOw0KPiAtICAgICAgIGlmIChjZmctPmZsYWdzICYg TkZTX01PVU5UX05PUkVTVlBPUlQpDQo+ICsgICAgICAgbmZzX2luaXRfdGltZW91dF92YWx1ZXMo JnRpbWVwYXJtcywgY3R4LT5uZnNfc2VydmVyLnByb3RvY29sLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN0eC0+dGltZW8sIGN0eC0+cmV0cmFucyk7DQo+ICsgICAgICAgaWYg KGN0eC0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9SRVNWUE9SVCkNCj4gICAgICAgICAgICAgICAgIHNl dF9iaXQoTkZTX0NTX05PUkVTVlBPUlQsICZjbF9pbml0LmluaXRfZmxhZ3MpOw0KPiANCj4gICAg ICAgICAvKiBBbGxvY2F0ZSBvciBmaW5kIGEgY2xpZW50IHJlZmVyZW5jZSB3ZSBjYW4gdXNlICov DQo+IEBAIC02NzksNDYgKzY3OSw0NiBAQCBzdGF0aWMgaW50IG5mc19pbml0X3NlcnZlcihzdHJ1 Y3QgbmZzX3NlcnZlciAqc2VydmVyLA0KPiAgICAgICAgIHNlcnZlci0+bmZzX2NsaWVudCA9IGNs cDsNCj4gDQo+ICAgICAgICAgLyogSW5pdGlhbGlzZSB0aGUgY2xpZW50IHJlcHJlc2VudGF0aW9u IGZyb20gdGhlIG1vdW50IGRhdGEgKi8NCj4gLSAgICAgICBzZXJ2ZXItPmZsYWdzID0gY2ZnLT5m bGFnczsNCj4gLSAgICAgICBzZXJ2ZXItPm9wdGlvbnMgPSBjZmctPm9wdGlvbnM7DQo+ICsgICAg ICAgc2VydmVyLT5mbGFncyA9IGN0eC0+ZmxhZ3M7DQo+ICsgICAgICAgc2VydmVyLT5vcHRpb25z ID0gY3R4LT5vcHRpb25zOw0KPiAgICAgICAgIHNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX0hBUkRM SU5LU3xORlNfQ0FQX1NZTUxJTktTfE5GU19DQVBfRklMRUlEfA0KPiAgICAgICAgICAgICAgICAg TkZTX0NBUF9NT0RFfE5GU19DQVBfTkxJTkt8TkZTX0NBUF9PV05FUnxORlNfQ0FQX09XTkVSX0dS T1VQfA0KPiAgICAgICAgICAgICAgICAgTkZTX0NBUF9BVElNRXxORlNfQ0FQX0NUSU1FfE5GU19D QVBfTVRJTUU7DQo+IA0KPiAtICAgICAgIGlmIChjZmctPnJzaXplKQ0KPiAtICAgICAgICAgICAg ICAgc2VydmVyLT5yc2l6ZSA9IG5mc19ibG9ja19zaXplKGNmZy0+cnNpemUsIE5VTEwpOw0KPiAt ICAgICAgIGlmIChjZmctPndzaXplKQ0KPiAtICAgICAgICAgICAgICAgc2VydmVyLT53c2l6ZSA9 IG5mc19ibG9ja19zaXplKGNmZy0+d3NpemUsIE5VTEwpOw0KPiArICAgICAgIGlmIChjdHgtPnJz aXplKQ0KPiArICAgICAgICAgICAgICAgc2VydmVyLT5yc2l6ZSA9IG5mc19ibG9ja19zaXplKGN0 eC0+cnNpemUsIE5VTEwpOw0KPiArICAgICAgIGlmIChjdHgtPndzaXplKQ0KPiArICAgICAgICAg ICAgICAgc2VydmVyLT53c2l6ZSA9IG5mc19ibG9ja19zaXplKGN0eC0+d3NpemUsIE5VTEwpOw0K PiANCj4gLSAgICAgICBzZXJ2ZXItPmFjcmVnbWluID0gY2ZnLT5hY3JlZ21pbiAqIEhaOw0KPiAt ICAgICAgIHNlcnZlci0+YWNyZWdtYXggPSBjZmctPmFjcmVnbWF4ICogSFo7DQo+IC0gICAgICAg c2VydmVyLT5hY2Rpcm1pbiA9IGNmZy0+YWNkaXJtaW4gKiBIWjsNCj4gLSAgICAgICBzZXJ2ZXIt PmFjZGlybWF4ID0gY2ZnLT5hY2Rpcm1heCAqIEhaOw0KPiArICAgICAgIHNlcnZlci0+YWNyZWdt aW4gPSBjdHgtPmFjcmVnbWluICogSFo7DQo+ICsgICAgICAgc2VydmVyLT5hY3JlZ21heCA9IGN0 eC0+YWNyZWdtYXggKiBIWjsNCj4gKyAgICAgICBzZXJ2ZXItPmFjZGlybWluID0gY3R4LT5hY2Rp cm1pbiAqIEhaOw0KPiArICAgICAgIHNlcnZlci0+YWNkaXJtYXggPSBjdHgtPmFjZGlybWF4ICog SFo7DQo+IA0KPiAgICAgICAgIC8qIFN0YXJ0IGxvY2tkIGhlcmUsIGJlZm9yZSB3ZSBtaWdodCBl cnJvciBvdXQgKi8NCj4gICAgICAgICBlcnJvciA9IG5mc19zdGFydF9sb2NrZChzZXJ2ZXIpOw0K PiAgICAgICAgIGlmIChlcnJvciA8IDApDQo+ICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOw0K PiANCj4gLSAgICAgICBzZXJ2ZXItPnBvcnQgPSBjZmctPm5mc19zZXJ2ZXIucG9ydDsNCj4gLSAg ICAgICBzZXJ2ZXItPmF1dGhfaW5mbyA9IGNmZy0+YXV0aF9pbmZvOw0KPiArICAgICAgIHNlcnZl ci0+cG9ydCA9IGN0eC0+bmZzX3NlcnZlci5wb3J0Ow0KPiArICAgICAgIHNlcnZlci0+YXV0aF9p bmZvID0gY3R4LT5hdXRoX2luZm87DQo+IA0KPiAgICAgICAgIGVycm9yID0gbmZzX2luaXRfc2Vy dmVyX3JwY2NsaWVudChzZXJ2ZXIsICZ0aW1lcGFybXMsDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNmZy0+c2VsZWN0ZWRfZmxhdm9yKTsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zZWxlY3RlZF9mbGF2b3IpOw0K PiAgICAgICAgIGlmIChlcnJvciA8IDApDQo+ICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOw0K PiANCj4gICAgICAgICAvKiBQcmVzZXJ2ZSB0aGUgdmFsdWVzIG9mIG1vdW50X3NlcnZlci1yZWxh dGVkIG1vdW50IG9wdGlvbnMgKi8NCj4gLSAgICAgICBpZiAoY2ZnLT5tb3VudF9zZXJ2ZXIuYWRk cmxlbikgew0KPiAtICAgICAgICAgICAgICAgbWVtY3B5KCZzZXJ2ZXItPm1vdW50ZF9hZGRyZXNz LCAmY2ZnLT5tb3VudF9zZXJ2ZXIuYWRkcmVzcywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg Y2ZnLT5tb3VudF9zZXJ2ZXIuYWRkcmxlbik7DQo+IC0gICAgICAgICAgICAgICBzZXJ2ZXItPm1v dW50ZF9hZGRybGVuID0gY2ZnLT5tb3VudF9zZXJ2ZXIuYWRkcmxlbjsNCj4gKyAgICAgICBpZiAo Y3R4LT5tb3VudF9zZXJ2ZXIuYWRkcmxlbikgew0KPiArICAgICAgICAgICAgICAgbWVtY3B5KCZz ZXJ2ZXItPm1vdW50ZF9hZGRyZXNzLCAmY3R4LT5tb3VudF9zZXJ2ZXIuYWRkcmVzcywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgY3R4LT5tb3VudF9zZXJ2ZXIuYWRkcmxlbik7DQo+ICsgICAg ICAgICAgICAgICBzZXJ2ZXItPm1vdW50ZF9hZGRybGVuID0gY3R4LT5tb3VudF9zZXJ2ZXIuYWRk cmxlbjsNCj4gICAgICAgICB9DQo+IC0gICAgICAgc2VydmVyLT5tb3VudGRfdmVyc2lvbiA9IGNm Zy0+bW91bnRfc2VydmVyLnZlcnNpb247DQo+IC0gICAgICAgc2VydmVyLT5tb3VudGRfcG9ydCA9 IGNmZy0+bW91bnRfc2VydmVyLnBvcnQ7DQo+IC0gICAgICAgc2VydmVyLT5tb3VudGRfcHJvdG9j b2wgPSBjZmctPm1vdW50X3NlcnZlci5wcm90b2NvbDsNCj4gKyAgICAgICBzZXJ2ZXItPm1vdW50 ZF92ZXJzaW9uID0gY3R4LT5tb3VudF9zZXJ2ZXIudmVyc2lvbjsNCj4gKyAgICAgICBzZXJ2ZXIt Pm1vdW50ZF9wb3J0ID0gY3R4LT5tb3VudF9zZXJ2ZXIucG9ydDsNCj4gKyAgICAgICBzZXJ2ZXIt Pm1vdW50ZF9wcm90b2NvbCA9IGN0eC0+bW91bnRfc2VydmVyLnByb3RvY29sOw0KPiANCj4gLSAg ICAgICBzZXJ2ZXItPm5hbWVsZW4gID0gY2ZnLT5uYW1sZW47DQo+ICsgICAgICAgc2VydmVyLT5u YW1lbGVuICA9IGN0eC0+bmFtbGVuOw0KPiAgICAgICAgIHJldHVybiAwOw0KPiANCj4gIGVycm9y Og0KPiBAQCAtOTQwLDEwICs5NDAsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZzX2ZyZWVfc2Vy dmVyKTsNCj4gICAqIENyZWF0ZSBhIHZlcnNpb24gMiBvciAzIHZvbHVtZSByZWNvcmQNCj4gICAq IC0ga2V5ZWQgb24gc2VydmVyIGFuZCBGU0lEDQo+ICAgKi8NCj4gLXN0cnVjdCBuZnNfc2VydmVy ICpuZnNfY3JlYXRlX3NlcnZlcihzdHJ1Y3QgbmZzX21vdW50X2luZm8gKm1vdW50X2luZm8pDQo+ ICtzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzX2NyZWF0ZV9zZXJ2ZXIoc3RydWN0IGZzX2NvbnRleHQg KmZjKQ0KPiAgew0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2Zj MmNvbnRleHQoZmMpOw0KPiAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7DQo+IC0g ICAgICAgc3RydWN0IG5mc19zdWJ2ZXJzaW9uICpuZnNfbW9kID0gbW91bnRfaW5mby0+bmZzX21v ZDsNCj4gICAgICAgICBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cjsNCj4gICAgICAgICBpbnQgZXJy b3I7DQo+IA0KPiBAQCAtOTU5LDE4ICs5NTksMTggQEAgc3RydWN0IG5mc19zZXJ2ZXIgKm5mc19j cmVhdGVfc2VydmVyKHN0cnVjdA0KPiBuZnNfbW91bnRfaW5mbyAqbW91bnRfaW5mbykNCj4gICAg ICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+IA0KPiAgICAgICAgIC8qIEdldCBhIGNsaWVudCBy ZXByZXNlbnRhdGlvbiAqLw0KPiAtICAgICAgIGVycm9yID0gbmZzX2luaXRfc2VydmVyKHNlcnZl ciwgbW91bnRfaW5mby0+Y3R4LCBuZnNfbW9kKTsNCj4gKyAgICAgICBlcnJvciA9IG5mc19pbml0 X3NlcnZlcihzZXJ2ZXIsIGZjKTsNCj4gICAgICAgICBpZiAoZXJyb3IgPCAwKQ0KPiAgICAgICAg ICAgICAgICAgZ290byBlcnJvcjsNCj4gDQo+ICAgICAgICAgLyogUHJvYmUgdGhlIHJvb3QgZmgg dG8gcmV0cmlldmUgaXRzIEZTSUQgKi8NCj4gLSAgICAgICBlcnJvciA9IG5mc19wcm9iZV9mc2lu Zm8oc2VydmVyLCBtb3VudF9pbmZvLT5tbnRmaCwgZmF0dHIpOw0KPiArICAgICAgIGVycm9yID0g bmZzX3Byb2JlX2ZzaW5mbyhzZXJ2ZXIsIGN0eC0+bW50ZmgsIGZhdHRyKTsNCj4gICAgICAgICBp ZiAoZXJyb3IgPCAwKQ0KPiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gICAgICAgICBp ZiAoc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT52ZXJzaW9uID09IDMpIHsNCj4gICAgICAg ICAgICAgICAgIGlmIChzZXJ2ZXItPm5hbWVsZW4gPT0gMCB8fCBzZXJ2ZXItPm5hbWVsZW4gPiBO RlMzX01BWE5BTUxFTikNCj4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLT5uYW1lbGVu ID0gTkZTM19NQVhOQU1MRU47DQo+IC0gICAgICAgICAgICAgICBpZiAoIShtb3VudF9pbmZvLT5j dHgtPmZsYWdzICYgTkZTX01PVU5UX05PUkRJUlBMVVMpKQ0KPiArICAgICAgICAgICAgICAgaWYg KCEoY3R4LT5mbGFncyAmIE5GU19NT1VOVF9OT1JESVJQTFVTKSkNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgc2VydmVyLT5jYXBzIHw9IE5GU19DQVBfUkVBRERJUlBMVVM7DQo+ICAgICAgICAg fSBlbHNlIHsNCj4gICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXItPm5hbWVsZW4gPT0gMCB8fCBz ZXJ2ZXItPm5hbWVsZW4gPiBORlMyX01BWE5BTUxFTikNCj4gQEAgLTk3OCw4ICs5NzgsOCBAQCBz dHJ1Y3QgbmZzX3NlcnZlciAqbmZzX2NyZWF0ZV9zZXJ2ZXIoc3RydWN0IG5mc19tb3VudF9pbmZv DQo+ICptb3VudF9pbmZvKQ0KPiAgICAgICAgIH0NCj4gDQo+ICAgICAgICAgaWYgKCEoZmF0dHIt PnZhbGlkICYgTkZTX0FUVFJfRkFUVFIpKSB7DQo+IC0gICAgICAgICAgICAgICBlcnJvciA9IG5m c19tb2QtPnJwY19vcHMtPmdldGF0dHIoc2VydmVyLCBtb3VudF9pbmZvLT5tbnRmaCwNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXR0ciwgTlVMTCwgTlVMTCk7DQo+ICsgICAg ICAgICAgICAgICBlcnJvciA9IGN0eC0+bmZzX21vZC0+cnBjX29wcy0+Z2V0YXR0cihzZXJ2ZXIs IGN0eC0+bW50ZmgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmYXR0ciwgTlVMTCwgTlVMTCk7DQo+ICAgICAgICAgICAgICAgICBpZiAo ZXJyb3IgPCAwKSB7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGRwcmludGsoIm5mc19jcmVh dGVfc2VydmVyOiBnZXRhdHRyIGVycm9yID0gJWRcbiIsDQo+IC1lcnJvcik7DQo+ICAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvZnNfY29u dGV4dC5jIGIvZnMvbmZzL2ZzX2NvbnRleHQuYw0KPiBpbmRleCAzYWZhY2RlZTM3YzguLmQwNTI3 MWI5MWUzOCAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL2ZzX2NvbnRleHQuYw0KPiArKysgYi9mcy9u ZnMvZnNfY29udGV4dC5jDQo+IEBAIC0xNSw3ICsxNSw4IEBADQo+IA0KPiAgI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L2ZzLmg+DQo+IC0jaW5jbHVkZSA8bGlu dXgvcGFyc2VyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZnNfY29udGV4dC5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L2ZzX3BhcnNlci5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPg0KPiAg I2luY2x1ZGUgPGxpbnV4L25mc19tb3VudC5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L25mczRfbW91 bnQuaD4NCj4gQEAgLTMwLDI1NCArMzEsMjE1IEBADQo+ICAjZGVmaW5lIE5GU19ERUZBVUxUX1ZF UlNJT04gMg0KPiAgI2VuZGlmDQo+IA0KPiAtZW51bSB7DQo+IC0gICAgICAgLyogTW91bnQgb3B0 aW9ucyB0aGF0IHRha2Ugbm8gYXJndW1lbnRzICovDQo+IC0gICAgICAgT3B0X3NvZnQsIE9wdF9z b2Z0ZXJyLCBPcHRfaGFyZCwNCj4gLSAgICAgICBPcHRfcG9zaXgsIE9wdF9ub3Bvc2l4LA0KPiAt ICAgICAgIE9wdF9jdG8sIE9wdF9ub2N0bywNCj4gLSAgICAgICBPcHRfYWMsIE9wdF9ub2FjLA0K PiAtICAgICAgIE9wdF9sb2NrLCBPcHRfbm9sb2NrLA0KPiAtICAgICAgIE9wdF91ZHAsIE9wdF90 Y3AsIE9wdF9yZG1hLA0KPiAtICAgICAgIE9wdF9hY2wsIE9wdF9ub2FjbCwNCj4gLSAgICAgICBP cHRfcmRpcnBsdXMsIE9wdF9ub3JkaXJwbHVzLA0KPiAtICAgICAgIE9wdF9zaGFyZWNhY2hlLCBP cHRfbm9zaGFyZWNhY2hlLA0KPiAtICAgICAgIE9wdF9yZXN2cG9ydCwgT3B0X25vcmVzdnBvcnQs DQo+IC0gICAgICAgT3B0X2ZzY2FjaGUsIE9wdF9ub2ZzY2FjaGUsDQo+IC0gICAgICAgT3B0X21p Z3JhdGlvbiwgT3B0X25vbWlncmF0aW9uLA0KPiAtDQo+IC0gICAgICAgLyogTW91bnQgb3B0aW9u cyB0aGF0IHRha2UgaW50ZWdlciBhcmd1bWVudHMgKi8NCj4gLSAgICAgICBPcHRfcG9ydCwNCj4g LSAgICAgICBPcHRfcnNpemUsIE9wdF93c2l6ZSwgT3B0X2JzaXplLA0KPiAtICAgICAgIE9wdF90 aW1lbywgT3B0X3JldHJhbnMsDQo+IC0gICAgICAgT3B0X2FjcmVnbWluLCBPcHRfYWNyZWdtYXgs DQo+IC0gICAgICAgT3B0X2FjZGlybWluLCBPcHRfYWNkaXJtYXgsDQo+ICtlbnVtIG5mc19wYXJh bSB7DQo+ICsgICAgICAgT3B0X2FjLA0KPiArICAgICAgIE9wdF9hY2Rpcm1heCwNCj4gKyAgICAg ICBPcHRfYWNkaXJtaW4sDQo+ICsgICAgICAgT3B0X2FjbCwNCj4gKyAgICAgICBPcHRfYWNyZWdt YXgsDQo+ICsgICAgICAgT3B0X2FjcmVnbWluLA0KPiAgICAgICAgIE9wdF9hY3RpbWVvLA0KPiAt ICAgICAgIE9wdF9uYW1lbGVuLA0KPiArICAgICAgIE9wdF9hZGRyLA0KPiArICAgICAgIE9wdF9i ZywNCj4gKyAgICAgICBPcHRfYnNpemUsDQo+ICsgICAgICAgT3B0X2NsaWVudGFkZHIsDQo+ICsg ICAgICAgT3B0X2N0bywNCj4gKyAgICAgICBPcHRfZmcsDQo+ICsgICAgICAgT3B0X2ZzY2FjaGUs DQo+ICsgICAgICAgT3B0X2hhcmQsDQo+ICsgICAgICAgT3B0X2ludHIsDQo+ICsgICAgICAgT3B0 X2xvY2FsX2xvY2ssDQo+ICsgICAgICAgT3B0X2xvY2ssDQo+ICsgICAgICAgT3B0X2xvb2t1cGNh Y2hlLA0KPiArICAgICAgIE9wdF9taWdyYXRpb24sDQo+ICsgICAgICAgT3B0X21pbm9ydmVyc2lv biwNCj4gKyAgICAgICBPcHRfbW91bnRhZGRyLA0KPiArICAgICAgIE9wdF9tb3VudGhvc3QsDQo+ ICAgICAgICAgT3B0X21vdW50cG9ydCwNCj4gKyAgICAgICBPcHRfbW91bnRwcm90bywNCj4gICAg ICAgICBPcHRfbW91bnR2ZXJzLA0KPiAtICAgICAgIE9wdF9taW5vcnZlcnNpb24sDQo+IC0NCj4g LSAgICAgICAvKiBNb3VudCBvcHRpb25zIHRoYXQgdGFrZSBzdHJpbmcgYXJndW1lbnRzICovDQo+ IC0gICAgICAgT3B0X25mc3ZlcnMsDQo+IC0gICAgICAgT3B0X3NlYywgT3B0X3Byb3RvLCBPcHRf bW91bnRwcm90bywgT3B0X21vdW50aG9zdCwNCj4gLSAgICAgICBPcHRfYWRkciwgT3B0X21vdW50 YWRkciwgT3B0X2NsaWVudGFkZHIsDQo+IC0gICAgICAgT3B0X2xvb2t1cGNhY2hlLA0KPiAtICAg ICAgIE9wdF9mc2NhY2hlX3VuaXEsDQo+IC0gICAgICAgT3B0X2xvY2FsX2xvY2ssDQo+IC0NCj4g LSAgICAgICAvKiBTcGVjaWFsIG1vdW50IG9wdGlvbnMgKi8NCj4gLSAgICAgICBPcHRfdXNlcnNw YWNlLCBPcHRfZGVwcmVjYXRlZCwgT3B0X3Nsb3BweSwNCj4gLQ0KPiAtICAgICAgIE9wdF9lcnIN Cj4gKyAgICAgICBPcHRfbmFtZWxlbiwNCj4gKyAgICAgICBPcHRfcG9ydCwNCj4gKyAgICAgICBP cHRfcG9zaXgsDQo+ICsgICAgICAgT3B0X3Byb3RvLA0KPiArICAgICAgIE9wdF9yZGlycGx1cywN Cj4gKyAgICAgICBPcHRfcmRtYSwNCj4gKyAgICAgICBPcHRfcmVzdnBvcnQsDQo+ICsgICAgICAg T3B0X3JldHJhbnMsDQo+ICsgICAgICAgT3B0X3JldHJ5LA0KPiArICAgICAgIE9wdF9yc2l6ZSwN Cj4gKyAgICAgICBPcHRfc2VjLA0KPiArICAgICAgIE9wdF9zaGFyZWNhY2hlLA0KPiArICAgICAg IE9wdF9zbG9wcHksDQo+ICsgICAgICAgT3B0X3NvZnQsDQo+ICsgICAgICAgT3B0X3NvZnRlcnIs DQo+ICsgICAgICAgT3B0X3NvdXJjZSwNCj4gKyAgICAgICBPcHRfdGNwLA0KPiArICAgICAgIE9w dF90aW1lbywNCj4gKyAgICAgICBPcHRfdWRwLA0KPiArICAgICAgIE9wdF92LA0KPiArICAgICAg IE9wdF92ZXJzLA0KPiArICAgICAgIE9wdF93c2l6ZSwNCj4gIH07DQo+IA0KPiAtc3RhdGljIGNv bnN0IG1hdGNoX3RhYmxlX3QgbmZzX21vdW50X29wdGlvbl90b2tlbnMgPSB7DQo+IC0gICAgICAg eyBPcHRfdXNlcnNwYWNlLCAiYmciIH0sDQo+IC0gICAgICAgeyBPcHRfdXNlcnNwYWNlLCAiZmci IH0sDQo+IC0gICAgICAgeyBPcHRfdXNlcnNwYWNlLCAicmV0cnk9JXMiIH0sDQo+IC0NCj4gLSAg ICAgICB7IE9wdF9zbG9wcHksICJzbG9wcHkiIH0sDQo+IC0NCj4gLSAgICAgICB7IE9wdF9zb2Z0 LCAic29mdCIgfSwNCj4gLSAgICAgICB7IE9wdF9zb2Z0ZXJyLCAic29mdGVyciIgfSwNCj4gLSAg ICAgICB7IE9wdF9oYXJkLCAiaGFyZCIgfSwNCj4gLSAgICAgICB7IE9wdF9kZXByZWNhdGVkLCAi aW50ciIgfSwNCj4gLSAgICAgICB7IE9wdF9kZXByZWNhdGVkLCAibm9pbnRyIiB9LA0KPiAtICAg ICAgIHsgT3B0X3Bvc2l4LCAicG9zaXgiIH0sDQo+IC0gICAgICAgeyBPcHRfbm9wb3NpeCwgIm5v cG9zaXgiIH0sDQo+IC0gICAgICAgeyBPcHRfY3RvLCAiY3RvIiB9LA0KPiAtICAgICAgIHsgT3B0 X25vY3RvLCAibm9jdG8iIH0sDQo+IC0gICAgICAgeyBPcHRfYWMsICJhYyIgfSwNCj4gLSAgICAg ICB7IE9wdF9ub2FjLCAibm9hYyIgfSwNCj4gLSAgICAgICB7IE9wdF9sb2NrLCAibG9jayIgfSwN Cj4gLSAgICAgICB7IE9wdF9ub2xvY2ssICJub2xvY2siIH0sDQo+IC0gICAgICAgeyBPcHRfdWRw LCAidWRwIiB9LA0KPiAtICAgICAgIHsgT3B0X3RjcCwgInRjcCIgfSwNCj4gLSAgICAgICB7IE9w dF9yZG1hLCAicmRtYSIgfSwNCj4gLSAgICAgICB7IE9wdF9hY2wsICJhY2wiIH0sDQo+IC0gICAg ICAgeyBPcHRfbm9hY2wsICJub2FjbCIgfSwNCj4gLSAgICAgICB7IE9wdF9yZGlycGx1cywgInJk aXJwbHVzIiB9LA0KPiAtICAgICAgIHsgT3B0X25vcmRpcnBsdXMsICJub3JkaXJwbHVzIiB9LA0K PiAtICAgICAgIHsgT3B0X3NoYXJlY2FjaGUsICJzaGFyZWNhY2hlIiB9LA0KPiAtICAgICAgIHsg T3B0X25vc2hhcmVjYWNoZSwgIm5vc2hhcmVjYWNoZSIgfSwNCj4gLSAgICAgICB7IE9wdF9yZXN2 cG9ydCwgInJlc3Zwb3J0IiB9LA0KPiAtICAgICAgIHsgT3B0X25vcmVzdnBvcnQsICJub3Jlc3Zw b3J0IiB9LA0KPiAtICAgICAgIHsgT3B0X2ZzY2FjaGUsICJmc2MiIH0sDQo+IC0gICAgICAgeyBP cHRfbm9mc2NhY2hlLCAibm9mc2MiIH0sDQo+IC0gICAgICAgeyBPcHRfbWlncmF0aW9uLCAibWln cmF0aW9uIiB9LA0KPiAtICAgICAgIHsgT3B0X25vbWlncmF0aW9uLCAibm9taWdyYXRpb24iIH0s DQo+IC0NCj4gLSAgICAgICB7IE9wdF9wb3J0LCAicG9ydD0lcyIgfSwNCj4gLSAgICAgICB7IE9w dF9yc2l6ZSwgInJzaXplPSVzIiB9LA0KPiAtICAgICAgIHsgT3B0X3dzaXplLCAid3NpemU9JXMi IH0sDQo+IC0gICAgICAgeyBPcHRfYnNpemUsICJic2l6ZT0lcyIgfSwNCj4gLSAgICAgICB7IE9w dF90aW1lbywgInRpbWVvPSVzIiB9LA0KPiAtICAgICAgIHsgT3B0X3JldHJhbnMsICJyZXRyYW5z PSVzIiB9LA0KPiAtICAgICAgIHsgT3B0X2FjcmVnbWluLCAiYWNyZWdtaW49JXMiIH0sDQo+IC0g ICAgICAgeyBPcHRfYWNyZWdtYXgsICJhY3JlZ21heD0lcyIgfSwNCj4gLSAgICAgICB7IE9wdF9h Y2Rpcm1pbiwgImFjZGlybWluPSVzIiB9LA0KPiAtICAgICAgIHsgT3B0X2FjZGlybWF4LCAiYWNk aXJtYXg9JXMiIH0sDQo+IC0gICAgICAgeyBPcHRfYWN0aW1lbywgImFjdGltZW89JXMiIH0sDQo+ IC0gICAgICAgeyBPcHRfbmFtZWxlbiwgIm5hbWxlbj0lcyIgfSwNCj4gLSAgICAgICB7IE9wdF9t b3VudHBvcnQsICJtb3VudHBvcnQ9JXMiIH0sDQo+IC0gICAgICAgeyBPcHRfbW91bnR2ZXJzLCAi bW91bnR2ZXJzPSVzIiB9LA0KPiAtICAgICAgIHsgT3B0X21pbm9ydmVyc2lvbiwgIm1pbm9ydmVy c2lvbj0lcyIgfSwNCj4gLQ0KPiAtICAgICAgIHsgT3B0X25mc3ZlcnMsICJuZnN2ZXJzPSVzIiB9 LA0KPiAtICAgICAgIHsgT3B0X25mc3ZlcnMsICJ2ZXJzPSVzIiB9LA0KPiAtDQo+IC0gICAgICAg eyBPcHRfc2VjLCAic2VjPSVzIiB9LA0KPiAtICAgICAgIHsgT3B0X3Byb3RvLCAicHJvdG89JXMi IH0sDQo+IC0gICAgICAgeyBPcHRfbW91bnRwcm90bywgIm1vdW50cHJvdG89JXMiIH0sDQo+IC0g ICAgICAgeyBPcHRfYWRkciwgImFkZHI9JXMiIH0sDQo+IC0gICAgICAgeyBPcHRfY2xpZW50YWRk ciwgImNsaWVudGFkZHI9JXMiIH0sDQo+IC0gICAgICAgeyBPcHRfbW91bnRob3N0LCAibW91bnRo b3N0PSVzIiB9LA0KPiAtICAgICAgIHsgT3B0X21vdW50YWRkciwgIm1vdW50YWRkcj0lcyIgfSwN Cj4gLQ0KPiAtICAgICAgIHsgT3B0X2xvb2t1cGNhY2hlLCAibG9va3VwY2FjaGU9JXMiIH0sDQo+ IC0gICAgICAgeyBPcHRfZnNjYWNoZV91bmlxLCAiZnNjPSVzIiB9LA0KPiAtICAgICAgIHsgT3B0 X2xvY2FsX2xvY2ssICJsb2NhbF9sb2NrPSVzIiB9LA0KPiAtDQo+IC0gICAgICAgLyogVGhlIGZv bGxvd2luZyBuZWVkcyB0byBiZSBsaXN0ZWQgYWZ0ZXIgYWxsIG90aGVyIG9wdGlvbnMgKi8NCj4g LSAgICAgICB7IE9wdF9uZnN2ZXJzLCAidiVzIiB9LA0KPiAtDQo+IC0gICAgICAgeyBPcHRfZXJy LCBOVUxMIH0NCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgbmZzX3Bh cmFtX3NwZWNzW10gPSB7DQo+ICsgICAgICAgZnNwYXJhbV9mbGFnX25vKCJhYyIsICAgICAgICAg ICBPcHRfYWMpLA0KPiArICAgICAgIGZzcGFyYW1fdTMyICAgKCJhY2Rpcm1heCIsICAgICAgT3B0 X2FjZGlybWF4KSwNCj4gKyAgICAgICBmc3BhcmFtX3UzMiAgICgiYWNkaXJtaW4iLCAgICAgIE9w dF9hY2Rpcm1pbiksDQo+ICsgICAgICAgZnNwYXJhbV9mbGFnX25vKCJhY2wiLCAgICAgICAgICBP cHRfYWNsKSwNCj4gKyAgICAgICBmc3BhcmFtX3UzMiAgICgiYWNyZWdtYXgiLCAgICAgIE9wdF9h Y3JlZ21heCksDQo+ICsgICAgICAgZnNwYXJhbV91MzIgICAoImFjcmVnbWluIiwgICAgICBPcHRf YWNyZWdtaW4pLA0KPiArICAgICAgIGZzcGFyYW1fdTMyICAgKCJhY3RpbWVvIiwgICAgICAgT3B0 X2FjdGltZW8pLA0KPiArICAgICAgIGZzcGFyYW1fc3RyaW5nKCJhZGRyIiwgICAgICAgICAgT3B0 X2FkZHIpLA0KPiArICAgICAgIGZzcGFyYW1fZmxhZyAgKCJiZyIsICAgICAgICAgICAgT3B0X2Jn KSwNCj4gKyAgICAgICBmc3BhcmFtX3UzMiAgICgiYnNpemUiLCAgICAgICAgIE9wdF9ic2l6ZSks DQo+ICsgICAgICAgZnNwYXJhbV9zdHJpbmcoImNsaWVudGFkZHIiLCAgICBPcHRfY2xpZW50YWRk ciksDQo+ICsgICAgICAgZnNwYXJhbV9mbGFnX25vKCJjdG8iLCAgICAgICAgICBPcHRfY3RvKSwN Cj4gKyAgICAgICBmc3BhcmFtX2ZsYWcgICgiZmciLCAgICAgICAgICAgIE9wdF9mZyksDQo+ICsg ICAgICAgX19mc3BhcmFtKGZzX3BhcmFtX2lzX3N0cmluZywgImZzYyIsICAgICAgICAgICAgT3B0 X2ZzY2FjaGUsDQo+ICsgICAgICAgICAgICAgICAgIGZzX3BhcmFtX25lZ193aXRoX25vfGZzX3Bh cmFtX3Zfb3B0aW9uYWwpLA0KPiArICAgICAgIGZzcGFyYW1fZmxhZyAgKCJoYXJkIiwgICAgICAg ICAgT3B0X2hhcmQpLA0KPiArICAgICAgIF9fZnNwYXJhbShmc19wYXJhbV9pc19mbGFnLCAiaW50 ciIsICAgICAgICAgICAgIE9wdF9pbnRyLA0KPiArICAgICAgICAgICAgICAgICBmc19wYXJhbV9u ZWdfd2l0aF9ub3xmc19wYXJhbV9kZXByZWNhdGVkKSwNCj4gKyAgICAgICBmc3BhcmFtX2VudW0g ICgibG9jYWxfbG9jayIsICAgIE9wdF9sb2NhbF9sb2NrKSwNCj4gKyAgICAgICBmc3BhcmFtX2Zs YWdfbm8oImxvY2siLCAgICAgICAgIE9wdF9sb2NrKSwNCj4gKyAgICAgICBmc3BhcmFtX2VudW0g ICgibG9va3VwY2FjaGUiLCAgIE9wdF9sb29rdXBjYWNoZSksDQo+ICsgICAgICAgZnNwYXJhbV9m bGFnX25vKCJtaWdyYXRpb24iLCAgICBPcHRfbWlncmF0aW9uKSwNCj4gKyAgICAgICBmc3BhcmFt X3UzMiAgICgibWlub3J2ZXJzaW9uIiwgIE9wdF9taW5vcnZlcnNpb24pLA0KPiArICAgICAgIGZz cGFyYW1fc3RyaW5nKCJtb3VudGFkZHIiLCAgICAgT3B0X21vdW50YWRkciksDQo+ICsgICAgICAg ZnNwYXJhbV9zdHJpbmcoIm1vdW50aG9zdCIsICAgICBPcHRfbW91bnRob3N0KSwNCj4gKyAgICAg ICBmc3BhcmFtX3UzMiAgICgibW91bnRwb3J0IiwgICAgIE9wdF9tb3VudHBvcnQpLA0KPiArICAg ICAgIGZzcGFyYW1fc3RyaW5nKCJtb3VudHByb3RvIiwgICAgT3B0X21vdW50cHJvdG8pLA0KPiAr ICAgICAgIGZzcGFyYW1fdTMyICAgKCJtb3VudHZlcnMiLCAgICAgT3B0X21vdW50dmVycyksDQo+ ICsgICAgICAgZnNwYXJhbV91MzIgICAoIm5hbWxlbiIsICAgICAgICBPcHRfbmFtZWxlbiksDQo+ ICsgICAgICAgZnNwYXJhbV9zdHJpbmcoIm5mc3ZlcnMiLCAgICAgICBPcHRfdmVycyksDQo+ICsg ICAgICAgZnNwYXJhbV91MzIgICAoInBvcnQiLCAgICAgICAgICBPcHRfcG9ydCksDQo+ICsgICAg ICAgZnNwYXJhbV9mbGFnX25vKCJwb3NpeCIsICAgICAgICBPcHRfcG9zaXgpLA0KPiArICAgICAg IGZzcGFyYW1fc3RyaW5nKCJwcm90byIsICAgICAgICAgT3B0X3Byb3RvKSwNCj4gKyAgICAgICBm c3BhcmFtX2ZsYWdfbm8oInJkaXJwbHVzIiwgICAgIE9wdF9yZGlycGx1cyksDQo+ICsgICAgICAg ZnNwYXJhbV9mbGFnICAoInJkbWEiLCAgICAgICAgICBPcHRfcmRtYSksDQo+ICsgICAgICAgZnNw YXJhbV9mbGFnX25vKCJyZXN2cG9ydCIsICAgICBPcHRfcmVzdnBvcnQpLA0KPiArICAgICAgIGZz cGFyYW1fdTMyICAgKCJyZXRyYW5zIiwgICAgICAgT3B0X3JldHJhbnMpLA0KPiArICAgICAgIGZz cGFyYW1fc3RyaW5nKCJyZXRyeSIsICAgICAgICAgT3B0X3JldHJ5KSwNCj4gKyAgICAgICBmc3Bh cmFtX3UzMiAgICgicnNpemUiLCAgICAgICAgIE9wdF9yc2l6ZSksDQo+ICsgICAgICAgZnNwYXJh bV9zdHJpbmcoInNlYyIsICAgICAgICAgICBPcHRfc2VjKSwNCj4gKyAgICAgICBmc3BhcmFtX2Zs YWdfbm8oInNoYXJlY2FjaGUiLCAgIE9wdF9zaGFyZWNhY2hlKSwNCj4gKyAgICAgICBmc3BhcmFt X2ZsYWcgICgic2xvcHB5IiwgICAgICAgIE9wdF9zbG9wcHkpLA0KPiArICAgICAgIGZzcGFyYW1f ZmxhZyAgKCJzb2Z0IiwgICAgICAgICAgT3B0X3NvZnQpLA0KPiArICAgICAgIGZzcGFyYW1fZmxh ZyAgKCJzb2Z0ZXJyIiwgICAgICAgT3B0X3NvZnRlcnIpLA0KPiArICAgICAgIGZzcGFyYW1fc3Ry aW5nKCJzb3VyY2UiLCAgICAgICAgT3B0X3NvdXJjZSksDQo+ICsgICAgICAgZnNwYXJhbV9mbGFn ICAoInRjcCIsICAgICAgICAgICBPcHRfdGNwKSwNCj4gKyAgICAgICBmc3BhcmFtX3UzMiAgICgi dGltZW8iLCAgICAgICAgIE9wdF90aW1lbyksDQo+ICsgICAgICAgZnNwYXJhbV9mbGFnICAoInVk cCIsICAgICAgICAgICBPcHRfdWRwKSwNCj4gKyAgICAgICBmc3BhcmFtX2ZsYWcgICgidjIiLCAg ICAgICAgICAgIE9wdF92KSwNCj4gKyAgICAgICBmc3BhcmFtX2ZsYWcgICgidjMiLCAgICAgICAg ICAgIE9wdF92KSwNCj4gKyAgICAgICBmc3BhcmFtX2ZsYWcgICgidjQiLCAgICAgICAgICAgIE9w dF92KSwNCj4gKyAgICAgICBmc3BhcmFtX2ZsYWcgICgidjQuMCIsICAgICAgICAgIE9wdF92KSwN Cj4gKyAgICAgICBmc3BhcmFtX2ZsYWcgICgidjQuMSIsICAgICAgICAgIE9wdF92KSwNCj4gKyAg ICAgICBmc3BhcmFtX2ZsYWcgICgidjQuMiIsICAgICAgICAgIE9wdF92KSwNCj4gKyAgICAgICBm c3BhcmFtX3N0cmluZygidmVycyIsICAgICAgICAgIE9wdF92ZXJzKSwNCj4gKyAgICAgICBmc3Bh cmFtX3UzMiAgICgid3NpemUiLCAgICAgICAgIE9wdF93c2l6ZSksDQo+ICsgICAgICAge30NCj4g IH07DQo+IA0KPiAgZW51bSB7DQo+IC0gICAgICAgT3B0X3hwcnRfdWRwLCBPcHRfeHBydF91ZHA2 LCBPcHRfeHBydF90Y3AsIE9wdF94cHJ0X3RjcDYsDQo+IE9wdF94cHJ0X3JkbWEsDQo+IC0gICAg ICAgT3B0X3hwcnRfcmRtYTYsDQo+IC0NCj4gLSAgICAgICBPcHRfeHBydF9lcnINCj4gLX07DQo+ IC0NCj4gLXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc194cHJ0X3Byb3RvY29sX3Rva2Vu cyA9IHsNCj4gLSAgICAgICB7IE9wdF94cHJ0X3VkcCwgInVkcCIgfSwNCj4gLSAgICAgICB7IE9w dF94cHJ0X3VkcDYsICJ1ZHA2IiB9LA0KPiAtICAgICAgIHsgT3B0X3hwcnRfdGNwLCAidGNwIiB9 LA0KPiAtICAgICAgIHsgT3B0X3hwcnRfdGNwNiwgInRjcDYiIH0sDQo+IC0gICAgICAgeyBPcHRf eHBydF9yZG1hLCAicmRtYSIgfSwNCj4gLSAgICAgICB7IE9wdF94cHJ0X3JkbWE2LCAicmRtYTYi IH0sDQo+IC0NCj4gLSAgICAgICB7IE9wdF94cHJ0X2VyciwgTlVMTCB9DQo+ICsgICAgICAgT3B0 X2xvY2FsX2xvY2tfYWxsLA0KPiArICAgICAgIE9wdF9sb2NhbF9sb2NrX2Zsb2NrLA0KPiArICAg ICAgIE9wdF9sb2NhbF9sb2NrX25vbmUsDQo+ICsgICAgICAgT3B0X2xvY2FsX2xvY2tfcG9zaXgs DQo+ICB9Ow0KPiANCj4gIGVudW0gew0KPiAtICAgICAgIE9wdF9zZWNfbm9uZSwgT3B0X3NlY19z eXMsDQo+IC0gICAgICAgT3B0X3NlY19rcmI1LCBPcHRfc2VjX2tyYjVpLCBPcHRfc2VjX2tyYjVw LA0KPiAtICAgICAgIE9wdF9zZWNfbGtleSwgT3B0X3NlY19sa2V5aSwgT3B0X3NlY19sa2V5cCwN Cj4gLSAgICAgICBPcHRfc2VjX3Nwa20sIE9wdF9zZWNfc3BrbWksIE9wdF9zZWNfc3BrbXAsDQo+ IC0NCj4gLSAgICAgICBPcHRfc2VjX2Vycg0KPiArICAgICAgIE9wdF9sb29rdXBjYWNoZV9hbGws DQo+ICsgICAgICAgT3B0X2xvb2t1cGNhY2hlX25vbmUsDQo+ICsgICAgICAgT3B0X2xvb2t1cGNh Y2hlX3Bvc2l0aXZlLA0KPiAgfTsNCj4gDQo+IC1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBu ZnNfc2VjZmxhdm9yX3Rva2VucyA9IHsNCj4gLSAgICAgICB7IE9wdF9zZWNfbm9uZSwgIm5vbmUi IH0sDQo+IC0gICAgICAgeyBPcHRfc2VjX25vbmUsICJudWxsIiB9LA0KPiAtICAgICAgIHsgT3B0 X3NlY19zeXMsICJzeXMiIH0sDQo+IC0NCj4gLSAgICAgICB7IE9wdF9zZWNfa3JiNSwgImtyYjUi IH0sDQo+IC0gICAgICAgeyBPcHRfc2VjX2tyYjVpLCAia3JiNWkiIH0sDQo+IC0gICAgICAgeyBP cHRfc2VjX2tyYjVwLCAia3JiNXAiIH0sDQo+IC0NCj4gLSAgICAgICB7IE9wdF9zZWNfbGtleSwg ImxrZXkiIH0sDQo+IC0gICAgICAgeyBPcHRfc2VjX2xrZXlpLCAibGtleWkiIH0sDQo+IC0gICAg ICAgeyBPcHRfc2VjX2xrZXlwLCAibGtleXAiIH0sDQo+IC0NCj4gLSAgICAgICB7IE9wdF9zZWNf c3BrbSwgInNwa20zIiB9LA0KPiAtICAgICAgIHsgT3B0X3NlY19zcGttaSwgInNwa20zaSIgfSwN Cj4gLSAgICAgICB7IE9wdF9zZWNfc3BrbXAsICJzcGttM3AiIH0sDQo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGZzX3BhcmFtZXRlcl9lbnVtIG5mc19wYXJhbV9lbnVtc1tdID0gew0KPiArICAgICAg IHsgT3B0X2xvY2FsX2xvY2ssICAgICAgICJhbGwiLCAgICAgICAgICBPcHRfbG9jYWxfbG9ja19h bGwgfSwNCj4gKyAgICAgICB7IE9wdF9sb2NhbF9sb2NrLCAgICAgICAiZmxvY2siLCAgICAgICAg T3B0X2xvY2FsX2xvY2tfZmxvY2sgfSwNCj4gKyAgICAgICB7IE9wdF9sb2NhbF9sb2NrLCAgICAg ICAibm9uZSIsICAgICAgICAgT3B0X2xvY2FsX2xvY2tfbm9uZSB9LA0KPiArICAgICAgIHsgT3B0 X2xvY2FsX2xvY2ssICAgICAgICJwb3NpeCIsICAgICAgICBPcHRfbG9jYWxfbG9ja19wb3NpeCB9 LA0KPiArICAgICAgIHsgT3B0X2xvb2t1cGNhY2hlLCAgICAgICJhbGwiLCAgICAgICAgICBPcHRf bG9va3VwY2FjaGVfYWxsIH0sDQo+ICsgICAgICAgeyBPcHRfbG9va3VwY2FjaGUsICAgICAgIm5v bmUiLCAgICAgICAgIE9wdF9sb29rdXBjYWNoZV9ub25lIH0sDQo+ICsgICAgICAgeyBPcHRfbG9v a3VwY2FjaGUsICAgICAgInBvcyIsICAgICAgICAgIE9wdF9sb29rdXBjYWNoZV9wb3NpdGl2ZSB9 LA0KPiArICAgICAgIHsgT3B0X2xvb2t1cGNhY2hlLCAgICAgICJwb3NpdGl2ZSIsICAgICBPcHRf bG9va3VwY2FjaGVfcG9zaXRpdmUgfSwNCj4gKyAgICAgICB7fQ0KPiArfTsNCj4gDQo+IC0gICAg ICAgeyBPcHRfc2VjX2VyciwgTlVMTCB9DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFt ZXRlcl9kZXNjcmlwdGlvbiBuZnNfZnNfcGFyYW1ldGVycyA9IHsNCj4gKyAgICAgICAubmFtZSAg ICAgICAgICAgPSAibmZzIiwNCj4gKyAgICAgICAuc3BlY3MgICAgICAgICAgPSBuZnNfcGFyYW1f c3BlY3MsDQo+ICsgICAgICAgLmVudW1zICAgICAgICAgID0gbmZzX3BhcmFtX2VudW1zLA0KPiAg fTsNCj4gDQo+ICBlbnVtIHsNCj4gLSAgICAgICBPcHRfbG9va3VwY2FjaGVfYWxsLCBPcHRfbG9v a3VwY2FjaGVfcG9zaXRpdmUsDQo+IC0gICAgICAgT3B0X2xvb2t1cGNhY2hlX25vbmUsDQo+IC0N Cj4gLSAgICAgICBPcHRfbG9va3VwY2FjaGVfZXJyDQo+ICsgICAgICAgT3B0X3ZlcnNfMiwNCj4g KyAgICAgICBPcHRfdmVyc18zLA0KPiArICAgICAgIE9wdF92ZXJzXzQsDQo+ICsgICAgICAgT3B0 X3ZlcnNfNF8wLA0KPiArICAgICAgIE9wdF92ZXJzXzRfMSwNCj4gKyAgICAgICBPcHRfdmVyc180 XzIsDQo+ICB9Ow0KPiANCj4gLXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc19sb29rdXBj YWNoZV90b2tlbnMgPSB7DQo+IC0gICAgICAgeyBPcHRfbG9va3VwY2FjaGVfYWxsLCAiYWxsIiB9 LA0KPiAtICAgICAgIHsgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLCAicG9zIiB9LA0KPiAtICAg ICAgIHsgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLCAicG9zaXRpdmUiIH0sDQo+IC0gICAgICAg eyBPcHRfbG9va3VwY2FjaGVfbm9uZSwgIm5vbmUiIH0sDQo+IC0NCj4gLSAgICAgICB7IE9wdF9s b29rdXBjYWNoZV9lcnIsIE5VTEwgfQ0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90 YWJsZSBuZnNfdmVyc190b2tlbnNbXSA9IHsNCj4gKyAgICAgICB7ICIyIiwgICAgICAgICAgT3B0 X3ZlcnNfMiB9LA0KPiArICAgICAgIHsgIjMiLCAgICAgICAgICBPcHRfdmVyc18zIH0sDQo+ICsg ICAgICAgeyAiNCIsICAgICAgICAgIE9wdF92ZXJzXzQgfSwNCj4gKyAgICAgICB7ICI0LjAiLCAg ICAgICAgT3B0X3ZlcnNfNF8wIH0sDQo+ICsgICAgICAgeyAiNC4xIiwgICAgICAgIE9wdF92ZXJz XzRfMSB9LA0KPiArICAgICAgIHsgIjQuMiIsICAgICAgICBPcHRfdmVyc180XzIgfSwNCj4gIH07 DQo+IA0KPiAgZW51bSB7DQo+IC0gICAgICAgT3B0X2xvY2FsX2xvY2tfYWxsLCBPcHRfbG9jYWxf bG9ja19mbG9jaywgT3B0X2xvY2FsX2xvY2tfcG9zaXgsDQo+IC0gICAgICAgT3B0X2xvY2FsX2xv Y2tfbm9uZSwNCj4gLQ0KPiAtICAgICAgIE9wdF9sb2NhbF9sb2NrX2Vycg0KPiArICAgICAgIE9w dF94cHJ0X3JkbWEsDQo+ICsgICAgICAgT3B0X3hwcnRfcmRtYTYsDQo+ICsgICAgICAgT3B0X3hw cnRfdGNwLA0KPiArICAgICAgIE9wdF94cHJ0X3RjcDYsDQo+ICsgICAgICAgT3B0X3hwcnRfdWRw LA0KPiArICAgICAgIE9wdF94cHJ0X3VkcDYsDQo+ICsgICAgICAgbnJfX09wdF94cHJ0DQo+ICB9 Ow0KPiANCj4gLXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc19sb2NhbF9sb2NrX3Rva2Vu cyA9IHsNCj4gLSAgICAgICB7IE9wdF9sb2NhbF9sb2NrX2FsbCwgImFsbCIgfSwNCj4gLSAgICAg ICB7IE9wdF9sb2NhbF9sb2NrX2Zsb2NrLCAiZmxvY2siIH0sDQo+IC0gICAgICAgeyBPcHRfbG9j YWxfbG9ja19wb3NpeCwgInBvc2l4IiB9LA0KPiAtICAgICAgIHsgT3B0X2xvY2FsX2xvY2tfbm9u ZSwgIm5vbmUiIH0sDQo+IC0NCj4gLSAgICAgICB7IE9wdF9sb2NhbF9sb2NrX2VyciwgTlVMTCB9 DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG5mc194cHJ0X3Byb3RvY29s X3Rva2Vuc1tucl9fT3B0X3hwcnRdID0gew0KPiArICAgICAgIHsgInJkbWEiLCAgICAgICBPcHRf eHBydF9yZG1hIH0sDQo+ICsgICAgICAgeyAicmRtYTYiLCAgICAgIE9wdF94cHJ0X3JkbWE2IH0s DQo+ICsgICAgICAgeyAidGNwIiwgICAgICAgIE9wdF94cHJ0X3RjcCB9LA0KPiArICAgICAgIHsg InRjcDYiLCAgICAgICBPcHRfeHBydF90Y3A2IH0sDQo+ICsgICAgICAgeyAidWRwIiwgICAgICAg IE9wdF94cHJ0X3VkcCB9LA0KPiArICAgICAgIHsgInVkcDYiLCAgICAgICBPcHRfeHBydF91ZHAg fSwNCj4gIH07DQo+IA0KPiAgZW51bSB7DQo+IC0gICAgICAgT3B0X3ZlcnNfMiwgT3B0X3ZlcnNf MywgT3B0X3ZlcnNfNCwgT3B0X3ZlcnNfNF8wLA0KPiAtICAgICAgIE9wdF92ZXJzXzRfMSwgT3B0 X3ZlcnNfNF8yLA0KPiAtDQo+IC0gICAgICAgT3B0X3ZlcnNfZXJyDQo+ICsgICAgICAgT3B0X3Nl Y19rcmI1LA0KPiArICAgICAgIE9wdF9zZWNfa3JiNWksDQo+ICsgICAgICAgT3B0X3NlY19rcmI1 cCwNCj4gKyAgICAgICBPcHRfc2VjX2xrZXksDQo+ICsgICAgICAgT3B0X3NlY19sa2V5aSwNCj4g KyAgICAgICBPcHRfc2VjX2xrZXlwLA0KPiArICAgICAgIE9wdF9zZWNfbm9uZSwNCj4gKyAgICAg ICBPcHRfc2VjX3Nwa20sDQo+ICsgICAgICAgT3B0X3NlY19zcGttaSwNCj4gKyAgICAgICBPcHRf c2VjX3Nwa21wLA0KPiArICAgICAgIE9wdF9zZWNfc3lzLA0KPiArICAgICAgIG5yX19PcHRfc2Vj DQo+ICB9Ow0KPiANCj4gLXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc192ZXJzX3Rva2Vu cyA9IHsNCj4gLSAgICAgICB7IE9wdF92ZXJzXzIsICIyIiB9LA0KPiAtICAgICAgIHsgT3B0X3Zl cnNfMywgIjMiIH0sDQo+IC0gICAgICAgeyBPcHRfdmVyc180LCAiNCIgfSwNCj4gLSAgICAgICB7 IE9wdF92ZXJzXzRfMCwgIjQuMCIgfSwNCj4gLSAgICAgICB7IE9wdF92ZXJzXzRfMSwgIjQuMSIg fSwNCj4gLSAgICAgICB7IE9wdF92ZXJzXzRfMiwgIjQuMiIgfSwNCj4gLQ0KPiAtICAgICAgIHsg T3B0X3ZlcnNfZXJyLCBOVUxMIH0NCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFi bGUgbmZzX3NlY2ZsYXZvcl90b2tlbnNbXSA9IHsNCj4gKyAgICAgICB7ICJrcmI1IiwgICAgICAg T3B0X3NlY19rcmI1IH0sDQo+ICsgICAgICAgeyAia3JiNWkiLCAgICAgIE9wdF9zZWNfa3JiNWkg fSwNCj4gKyAgICAgICB7ICJrcmI1cCIsICAgICAgT3B0X3NlY19rcmI1cCB9LA0KPiArICAgICAg IHsgImxrZXkiLCAgICAgICBPcHRfc2VjX2xrZXkgfSwNCj4gKyAgICAgICB7ICJsa2V5aSIsICAg ICAgT3B0X3NlY19sa2V5aSB9LA0KPiArICAgICAgIHsgImxrZXlwIiwgICAgICBPcHRfc2VjX2xr ZXlwIH0sDQo+ICsgICAgICAgeyAibm9uZSIsICAgICAgIE9wdF9zZWNfbm9uZSB9LA0KPiArICAg ICAgIHsgIm51bGwiLCAgICAgICBPcHRfc2VjX25vbmUgfSwNCj4gKyAgICAgICB7ICJzcGttMyIs ICAgICAgT3B0X3NlY19zcGttIH0sDQo+ICsgICAgICAgeyAic3BrbTNpIiwgICAgIE9wdF9zZWNf c3BrbWkgfSwNCj4gKyAgICAgICB7ICJzcGttM3AiLCAgICAgT3B0X3NlY19zcGttcCB9LA0KPiAr ICAgICAgIHsgInN5cyIsICAgICAgICBPcHRfc2VjX3N5cyB9LA0KPiAgfTsNCj4gDQo+IC1zdHJ1 Y3QgbmZzX2ZzX2NvbnRleHQgKm5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSh2b2lkKQ0KPiAt ew0KPiAtICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4Ow0KPiAtDQo+IC0gICAgICAg Y3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOw0KPiAtICAgICAgIGlmIChj dHgpIHsNCj4gLSAgICAgICAgICAgICAgIGN0eC0+dGltZW8gICAgICAgICAgICAgID0gTkZTX1VO U1BFQ19USU1FTzsNCj4gLSAgICAgICAgICAgICAgIGN0eC0+cmV0cmFucyAgICAgICAgICAgID0g TkZTX1VOU1BFQ19SRVRSQU5TOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5hY3JlZ21pbiAgICAg ICAgICAgPSBORlNfREVGX0FDUkVHTUlOOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5hY3JlZ21h eCAgICAgICAgICAgPSBORlNfREVGX0FDUkVHTUFYOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5h Y2Rpcm1pbiAgICAgICAgICAgPSBORlNfREVGX0FDRElSTUlOOw0KPiAtICAgICAgICAgICAgICAg Y3R4LT5hY2Rpcm1heCAgICAgICAgICAgPSBORlNfREVGX0FDRElSTUFYOw0KPiAtICAgICAgICAg ICAgICAgY3R4LT5tb3VudF9zZXJ2ZXIucG9ydCAgPSBORlNfVU5TUEVDX1BPUlQ7DQo+IC0gICAg ICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIucG9ydCAgICA9IE5GU19VTlNQRUNfUE9SVDsNCj4g LSAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JU X1RDUDsNCj4gLSAgICAgICAgICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxhdm9yICAgID0gUlBDX0FV VEhfTUFYRkxBVk9SOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5taW5vcnZlcnNpb24gICAgICAg PSAwOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5uZWVkX21vdW50ID0gdHJ1ZTsNCj4gLSAgICAg ICAgICAgICAgIGN0eC0+bmV0ICAgICAgICAgICAgICAgID0gY3VycmVudC0+bnNwcm94eS0+bmV0 X25zOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5sc21fb3B0cyA9IE5VTEw7DQo+IC0gICAgICAg fQ0KPiAtICAgICAgIHJldHVybiBjdHg7DQo+IC19DQo+IC0NCj4gLXZvaWQgbmZzX2ZyZWVfcGFy c2VkX21vdW50X2RhdGEoc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgpDQo+IC17DQo+IC0gICAg ICAgaWYgKGN0eCkgew0KPiAtICAgICAgICAgICAgICAga2ZyZWUoY3R4LT5jbGllbnRfYWRkcmVz cyk7DQo+IC0gICAgICAgICAgICAgICBrZnJlZShjdHgtPm1vdW50X3NlcnZlci5ob3N0bmFtZSk7 DQo+IC0gICAgICAgICAgICAgICBrZnJlZShjdHgtPm5mc19zZXJ2ZXIuZXhwb3J0X3BhdGgpOw0K PiAtICAgICAgICAgICAgICAga2ZyZWUoY3R4LT5uZnNfc2VydmVyLmhvc3RuYW1lKTsNCj4gLSAg ICAgICAgICAgICAgIGtmcmVlKGN0eC0+ZnNjYWNoZV91bmlxKTsNCj4gLSAgICAgICAgICAgICAg IHNlY3VyaXR5X2ZyZWVfbW50X29wdHMoJmN0eC0+bHNtX29wdHMpOw0KPiAtICAgICAgICAgICAg ICAga2ZyZWUoY3R4KTsNCj4gLSAgICAgICB9DQo+IC19DQo+IC0NCj4gIC8qDQo+ICAgKiBTYW5p dHktY2hlY2sgYSBzZXJ2ZXIgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgbW91bnQgY29tbWFuZC4N Cj4gICAqDQo+IEBAIC0zNDIsNyArMzA0LDcgQEAgc3RhdGljIHZvaWQgbmZzX3NldF9tb3VudF90 cmFuc3BvcnRfcHJvdG9jb2woc3RydWN0DQo+IG5mc19mc19jb250ZXh0ICpjdHgpDQo+ICAgKiBB ZGQgJ2ZsYXZvcicgdG8gJ2F1dGhfaW5mbycgaWYgbm90IGFscmVhZHkgcHJlc2VudC4NCj4gICAq IFJldHVybnMgdHJ1ZSBpZiAnZmxhdm9yJyBlbmRzIHVwIGluIHRoZSBsaXN0LCBmYWxzZSBvdGhl cndpc2UNCj4gICAqLw0KPiAtc3RhdGljIGludCBuZnNfYXV0aF9pbmZvX2FkZChzdHJ1Y3QgbmZz X2ZzX2NvbnRleHQgKmN0eCwNCj4gK3N0YXRpYyBpbnQgbmZzX2F1dGhfaW5mb19hZGQoc3RydWN0 IGZzX2NvbnRleHQgKmZjLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBu ZnNfYXV0aF9pbmZvICphdXRoX2luZm8sDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cnBjX2F1dGhmbGF2b3JfdCBmbGF2b3IpDQo+ICB7DQo+IEBAIC0zNTUsMTAgKzMxNyw4IEBAIHN0 YXRpYyBpbnQgbmZzX2F1dGhfaW5mb19hZGQoc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgsDQo+ ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiAgICAgICAgIH0NCj4gDQo+IC0g ICAgICAgaWYgKGF1dGhfaW5mby0+Zmxhdm9yX2xlbiArIDEgPj0gbWF4X2ZsYXZvcl9sZW4pIHsN Cj4gLSAgICAgICAgICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZTOiB0b28gbWFueSBzZWM9IGZs YXZvcnNcbiIpOw0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+IC0gICAgICAg fQ0KPiArICAgICAgIGlmIChhdXRoX2luZm8tPmZsYXZvcl9sZW4gKyAxID49IG1heF9mbGF2b3Jf bGVuKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIG5mc19pbnZhbGYoZmMsICJORlM6IHRvbyBt YW55IHNlYz0gZmxhdm9ycyIpOw0KPiANCj4gICAgICAgICBhdXRoX2luZm8tPmZsYXZvcnNbYXV0 aF9pbmZvLT5mbGF2b3JfbGVuKytdID0gZmxhdm9yOw0KPiAgICAgICAgIHJldHVybiAwOw0KPiBA QCAtMzY3LDE3ICszMjcsMjAgQEAgc3RhdGljIGludCBuZnNfYXV0aF9pbmZvX2FkZChzdHJ1Y3Qg bmZzX2ZzX2NvbnRleHQgKmN0eCwNCj4gIC8qDQo+ICAgKiBQYXJzZSB0aGUgdmFsdWUgb2YgdGhl ICdzZWM9JyBvcHRpb24uDQo+ICAgKi8NCj4gLXN0YXRpYyBpbnQgbmZzX3BhcnNlX3NlY3VyaXR5 X2ZsYXZvcnMoc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgsIGNoYXINCj4gKnZhbHVlKQ0KPiAr c3RhdGljIGludCBuZnNfcGFyc2Vfc2VjdXJpdHlfZmxhdm9ycyhzdHJ1Y3QgZnNfY29udGV4dCAq ZmMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZzX3Bh cmFtZXRlciAqcGFyYW0pDQo+ICB7DQo+IC0gICAgICAgc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BU X0FSR1NdOw0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNv bnRleHQoZmMpOw0KPiAgICAgICAgIHJwY19hdXRoZmxhdm9yX3QgcHNldWRvZmxhdm9yOw0KPiAt ICAgICAgIGNoYXIgKnA7DQo+ICsgICAgICAgY2hhciAqc3RyaW5nID0gcGFyYW0tPnN0cmluZywg KnA7DQo+ICAgICAgICAgaW50IHJldDsNCj4gDQo+IC0gICAgICAgZGZwcmludGsoTU9VTlQsICJO RlM6IHBhcnNpbmcgc2VjPSVzIG9wdGlvblxuIiwgdmFsdWUpOw0KPiArICAgICAgIGRmcHJpbnRr KE1PVU5ULCAiTkZTOiBwYXJzaW5nICVzPSVzIG9wdGlvblxuIiwgcGFyYW0tPmtleSwgcGFyYW0t DQo+ID5zdHJpbmcpOw0KPiANCj4gLSAgICAgICB3aGlsZSAoKHAgPSBzdHJzZXAoJnZhbHVlLCAi OiIpKSAhPSBOVUxMKSB7DQo+IC0gICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoX3Rva2VuKHAs IG5mc19zZWNmbGF2b3JfdG9rZW5zLCBhcmdzKSkgew0KPiArICAgICAgIHdoaWxlICgocCA9IHN0 cnNlcCgmc3RyaW5nLCAiOiIpKSAhPSBOVUxMKSB7DQo+ICsgICAgICAgICAgICAgICBpZiAoISpw KQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gKyAgICAgICAgICAgICAg IHN3aXRjaCAobG9va3VwX2NvbnN0YW50KG5mc19zZWNmbGF2b3JfdG9rZW5zLCBwLCAtMSkpIHsN Cj4gICAgICAgICAgICAgICAgIGNhc2UgT3B0X3NlY19ub25lOg0KPiAgICAgICAgICAgICAgICAg ICAgICAgICBwc2V1ZG9mbGF2b3IgPSBSUENfQVVUSF9OVUxMOw0KPiAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gQEAgLTQxMiwxMiArMzc1LDEwIEBAIHN0YXRpYyBpbnQgbmZzX3Bh cnNlX3NlY3VyaXR5X2ZsYXZvcnMoc3RydWN0DQo+IG5mc19mc19jb250ZXh0ICpjdHgsIGNoYXIg KnZhbHVlKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9mbGF2b3IgPSBSUENfQVVU SF9HU1NfU1BLTVA7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAg ICAgICAgICAgZGVmYXVsdDoNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZGZwcmludGsoTU9V TlQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJORlM6IHNlYz0gb3B0aW9u ICclcycgbm90IHJlY29nbml6ZWRcbiIsIHApOw0KPiAtICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5mc19pbnZh bGYoZmMsICJORlM6IHNlYz0lcyBvcHRpb24gbm90DQo+IHJlY29nbml6ZWQiLCBwKTsNCj4gICAg ICAgICAgICAgICAgIH0NCj4gDQo+IC0gICAgICAgICAgICAgICByZXQgPSBuZnNfYXV0aF9pbmZv X2FkZChjdHgsICZjdHgtPmF1dGhfaW5mbywgcHNldWRvZmxhdm9yKTsNCj4gKyAgICAgICAgICAg ICAgIHJldCA9IG5mc19hdXRoX2luZm9fYWRkKGZjLCAmY3R4LT5hdXRoX2luZm8sIHBzZXVkb2Zs YXZvcik7DQo+ICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHJldDsNCj4gICAgICAgICB9DQo+IEBAIC00MjUsMTIgKzM4NiwxMyBA QCBzdGF0aWMgaW50IG5mc19wYXJzZV9zZWN1cml0eV9mbGF2b3JzKHN0cnVjdA0KPiBuZnNfZnNf Y29udGV4dCAqY3R4LCBjaGFyICp2YWx1ZSkNCj4gICAgICAgICByZXR1cm4gMDsNCj4gIH0NCj4g DQo+IC1zdGF0aWMgaW50IG5mc19wYXJzZV92ZXJzaW9uX3N0cmluZyhzdHJ1Y3QgbmZzX2ZzX2Nv bnRleHQgKmN0eCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq c3RyaW5nLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHJpbmdf dCAqYXJncykNCj4gK3N0YXRpYyBpbnQgbmZzX3BhcnNlX3ZlcnNpb25fc3RyaW5nKHN0cnVjdCBm c19jb250ZXh0ICpmYywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqc3RyaW5nKQ0KPiAgew0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAq Y3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiArDQo+ICAgICAgICAgY3R4LT5mbGFncyAmPSB+ TkZTX01PVU5UX1ZFUjM7DQo+IC0gICAgICAgc3dpdGNoIChtYXRjaF90b2tlbihzdHJpbmcsIG5m c192ZXJzX3Rva2VucywgYXJncykpIHsNCj4gKyAgICAgICBzd2l0Y2ggKGxvb2t1cF9jb25zdGFu dChuZnNfdmVyc190b2tlbnMsIHN0cmluZywgLTEpKSB7DQo+ICAgICAgICAgY2FzZSBPcHRfdmVy c18yOg0KPiAgICAgICAgICAgICAgICAgY3R4LT52ZXJzaW9uID0gMjsNCj4gICAgICAgICAgICAg ICAgIGJyZWFrOw0KPiBAQCAtNDU4LDU0ICs0MjAsMzcgQEAgc3RhdGljIGludCBuZnNfcGFyc2Vf dmVyc2lvbl9zdHJpbmcoc3RydWN0DQo+IG5mc19mc19jb250ZXh0ICpjdHgsDQo+ICAgICAgICAg ICAgICAgICBjdHgtPm1pbm9ydmVyc2lvbiA9IDI7DQo+ICAgICAgICAgICAgICAgICBicmVhazsN Cj4gICAgICAgICBkZWZhdWx0Og0KPiAtICAgICAgICAgICAgICAgZGZwcmludGsoTU9VTlQsICJO RlM6ICAgVW5zdXBwb3J0ZWQgTkZTIHZlcnNpb25cbiIpOw0KPiAtICAgICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gbmZzX2ludmFsZihmYywgIk5G UzogVW5zdXBwb3J0ZWQgTkZTIHZlcnNpb24iKTsNCj4gICAgICAgICB9DQo+ICAgICAgICAgcmV0 dXJuIDA7DQo+ICB9DQo+IA0KPiAtc3RhdGljIGludCBuZnNfZ2V0X29wdGlvbl9zdHIoc3Vic3Ry aW5nX3QgYXJnc1tdLCBjaGFyICoqb3B0aW9uKQ0KPiAtew0KPiAtICAgICAgIGtmcmVlKCpvcHRp b24pOw0KPiAtICAgICAgICpvcHRpb24gPSBtYXRjaF9zdHJkdXAoYXJncyk7DQo+IC0gICAgICAg cmV0dXJuICEqb3B0aW9uOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IG5mc19nZXRfb3B0aW9u X3VpKHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN1YnN0cmluZ190IGFyZ3NbXSwgdW5zaWduZWQgaW50ICpvcHRpb24pDQo+IC17DQo+ IC0gICAgICAgbWF0Y2hfc3RybGNweShjdHgtPmJ1ZiwgYXJncywgc2l6ZW9mKGN0eC0+YnVmKSk7 DQo+IC0gICAgICAgcmV0dXJuIGtzdHJ0b3VpbnQoY3R4LT5idWYsIDEwLCBvcHRpb24pOw0KPiAt fQ0KPiAtDQo+IC1zdGF0aWMgaW50IG5mc19nZXRfb3B0aW9uX3VpX2JvdW5kKHN0cnVjdCBuZnNf ZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1 YnN0cmluZ190IGFyZ3NbXSwgdW5zaWduZWQgaW50ICpvcHRpb24sDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxfYm91bmQsIHVuc2lnbmVkIHVfYm91 bmQpDQo+IC17DQo+IC0gICAgICAgaW50IHJldDsNCj4gLQ0KPiAtICAgICAgIG1hdGNoX3N0cmxj cHkoY3R4LT5idWYsIGFyZ3MsIHNpemVvZihjdHgtPmJ1ZikpOw0KPiAtICAgICAgIHJldCA9IGtz dHJ0b3VpbnQoY3R4LT5idWYsIDEwLCBvcHRpb24pOw0KPiAtICAgICAgIGlmIChyZXQgPCAwKQ0K PiAtICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gLSAgICAgICBpZiAoKm9wdGlvbiA8IGxf Ym91bmQgfHwgKm9wdGlvbiA+IHVfYm91bmQpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVS QU5HRTsNCj4gLSAgICAgICByZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAgLyoNCj4gLSAqIFBhcnNl IGEgc2luZ2xlIG1vdW50IG9wdGlvbiBpbiAia2V5Wz12YWxdIiBmb3JtLg0KPiArICogUGFyc2Ug YSBzaW5nbGUgbW91bnQgcGFyYW1ldGVyLg0KPiAgICovDQo+IC1zdGF0aWMgaW50IG5mc19mc19j b250ZXh0X3BhcnNlX29wdGlvbihzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCwgY2hhciAqcCkN Cj4gK3N0YXRpYyBpbnQgbmZzX2ZzX2NvbnRleHRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRl eHQgKmZjLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBm c19wYXJhbWV0ZXIgKnBhcmFtKQ0KPiAgew0KPiAtICAgICAgIHN1YnN0cmluZ190IGFyZ3NbTUFY X09QVF9BUkdTXTsNCj4gLSAgICAgICBjaGFyICpzdHJpbmc7DQo+IC0gICAgICAgaW50IHRva2Vu LCByZXQ7DQo+ICsgICAgICAgc3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7DQo+ICsgICAg ICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICsg ICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG9mYW1pbHksIG1vdW50ZmFtaWx5Ow0KPiArICAgICAg IHVuc2lnbmVkIGludCBsZW47DQo+ICsgICAgICAgaW50IHJldCwgb3B0Ow0KPiArDQo+ICsgICAg ICAgZGZwcmludGsoTU9VTlQsICJORlM6ICAgcGFyc2luZyBuZnMgbW91bnQgb3B0aW9uICclcydc biIsIHBhcmFtLT5rZXkpOw0KPiANCj4gLSAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogICBw YXJzaW5nIG5mcyBtb3VudCBvcHRpb24gJyVzJ1xuIiwgcCk7DQo+ICsgICAgICAgb3B0ID0gZnNf cGFyc2UoZmMsICZuZnNfZnNfcGFyYW1ldGVycywgcGFyYW0sICZyZXN1bHQpOw0KPiArICAgICAg IGlmIChvcHQgPCAwKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIGN0eC0+c2xvcHB5ID8gMSA6 IG9wdDsNCj4gKw0KPiArICAgICAgIHN3aXRjaCAob3B0KSB7DQo+ICsgICAgICAgY2FzZSBPcHRf c291cmNlOg0KPiArICAgICAgICAgICAgICAgaWYgKGZjLT5zb3VyY2UpDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBuZnNfaW52YWxmKGZjLCAiTkZTOiBNdWx0aXBsZSBzb3VyY2Vz IG5vdA0KPiBzdXBwb3J0ZWQiKTsNCj4gKyAgICAgICAgICAgICAgIGZjLT5zb3VyY2UgPSBwYXJh bS0+c3RyaW5nOw0KPiArICAgICAgICAgICAgICAgcGFyYW0tPnN0cmluZyA9IE5VTEw7DQo+ICsg ICAgICAgICAgICAgICBicmVhazsNCj4gDQo+IC0gICAgICAgdG9rZW4gPSBtYXRjaF90b2tlbihw LCBuZnNfbW91bnRfb3B0aW9uX3Rva2VucywgYXJncyk7DQo+IC0gICAgICAgc3dpdGNoICh0b2tl bikgew0KPiAgICAgICAgICAgICAgICAgLyoNCj4gICAgICAgICAgICAgICAgICAqIGJvb2xlYW4g b3B0aW9uczogIGZvby9ub2Zvbw0KPiAgICAgICAgICAgICAgICAgICovDQo+IEBAIC01MjEsMzAg KzQ2NiwzMSBAQCBzdGF0aWMgaW50IG5mc19mc19jb250ZXh0X3BhcnNlX29wdGlvbihzdHJ1Y3QN Cj4gbmZzX2ZzX2NvbnRleHQgKmN0eCwgY2hhciAqcCkNCj4gICAgICAgICAgICAgICAgIGN0eC0+ ZmxhZ3MgJj0gfihORlNfTU9VTlRfU09GVHxORlNfTU9VTlRfU09GVEVSUik7DQo+ICAgICAgICAg ICAgICAgICBicmVhazsNCj4gICAgICAgICBjYXNlIE9wdF9wb3NpeDoNCj4gLSAgICAgICAgICAg ICAgIGN0eC0+ZmxhZ3MgfD0gTkZTX01PVU5UX1BPU0lYOw0KPiAtICAgICAgICAgICAgICAgYnJl YWs7DQo+IC0gICAgICAgY2FzZSBPcHRfbm9wb3NpeDoNCj4gLSAgICAgICAgICAgICAgIGN0eC0+ ZmxhZ3MgJj0gfk5GU19NT1VOVF9QT1NJWDsNCj4gKyAgICAgICAgICAgICAgIGlmIChyZXN1bHQu bmVnYXRlZCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbGFncyAmPSB+TkZTX01P VU5UX1BPU0lYOw0KPiArICAgICAgICAgICAgICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICBjdHgtPmZsYWdzIHw9IE5GU19NT1VOVF9QT1NJWDsNCj4gICAgICAgICAgICAgICAgIGJy ZWFrOw0KPiAgICAgICAgIGNhc2UgT3B0X2N0bzoNCj4gLSAgICAgICAgICAgICAgIGN0eC0+Zmxh Z3MgJj0gfk5GU19NT1VOVF9OT0NUTzsNCj4gLSAgICAgICAgICAgICAgIGJyZWFrOw0KPiAtICAg ICAgIGNhc2UgT3B0X25vY3RvOg0KPiAtICAgICAgICAgICAgICAgY3R4LT5mbGFncyB8PSBORlNf TU9VTlRfTk9DVE87DQo+ICsgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm5lZ2F0ZWQpDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PQ1RPOw0KPiAr ICAgICAgICAgICAgICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmZsYWdz ICY9IH5ORlNfTU9VTlRfTk9DVE87DQo+ICAgICAgICAgICAgICAgICBicmVhazsNCj4gICAgICAg ICBjYXNlIE9wdF9hYzoNCj4gLSAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfk5GU19NT1VO VF9OT0FDOw0KPiAtICAgICAgICAgICAgICAgYnJlYWs7DQo+IC0gICAgICAgY2FzZSBPcHRfbm9h YzoNCj4gLSAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PQUM7DQo+ICsg ICAgICAgICAgICAgICBpZiAocmVzdWx0Lm5lZ2F0ZWQpDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGN0eC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PQUM7DQo+ICsgICAgICAgICAgICAgICBlbHNl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9OT0FD Ow0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgY2FzZSBPcHRfbG9jazoNCj4g LSAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9OT05MTTsNCj4gLSAgICAg ICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfihORlNfTU9VTlRfTE9DQUxfRkxPQ0sgfA0KPiBORlNf TU9VTlRfTE9DQUxfRkNOVEwpOw0KPiAtICAgICAgICAgICAgICAgYnJlYWs7DQo+IC0gICAgICAg Y2FzZSBPcHRfbm9sb2NrOg0KPiAtICAgICAgICAgICAgICAgY3R4LT5mbGFncyB8PSBORlNfTU9V TlRfTk9OTE07DQo+IC0gICAgICAgICAgICAgICBjdHgtPmZsYWdzIHw9IChORlNfTU9VTlRfTE9D QUxfRkxPQ0sgfCBORlNfTU9VTlRfTE9DQUxfRkNOVEwpOw0KPiArICAgICAgICAgICAgICAgaWYg KHJlc3VsdC5uZWdhdGVkKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3Mg fD0gTkZTX01PVU5UX05PTkxNOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmZsYWdz IHw9IChORlNfTU9VTlRfTE9DQUxfRkxPQ0sgfA0KPiBORlNfTU9VTlRfTE9DQUxfRkNOVEwpOw0K PiArICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY3R4 LT5mbGFncyAmPSB+TkZTX01PVU5UX05PTkxNOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBj dHgtPmZsYWdzICY9IH4oTkZTX01PVU5UX0xPQ0FMX0ZMT0NLIHwNCj4gTkZTX01PVU5UX0xPQ0FM X0ZDTlRMKTsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gICAgICAgICAgICAgICAgIGJyZWFrOw0K PiAgICAgICAgIGNhc2UgT3B0X3VkcDoNCj4gICAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0g fk5GU19NT1VOVF9UQ1A7DQo+IEBAIC01NTcsMjQ0ICs1MDMsMjE1IEBAIHN0YXRpYyBpbnQgbmZz X2ZzX2NvbnRleHRfcGFyc2Vfb3B0aW9uKHN0cnVjdA0KPiBuZnNfZnNfY29udGV4dCAqY3R4LCBj aGFyICpwKQ0KPiAgICAgICAgIGNhc2UgT3B0X3JkbWE6DQo+ICAgICAgICAgICAgICAgICBjdHgt PmZsYWdzIHw9IE5GU19NT1VOVF9UQ1A7IC8qIGZvciBzaWRlIHByb3RvY29scyAqLw0KPiAgICAg ICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLnByb3RvY29sID0gWFBSVF9UUkFOU1BPUlRfUkRN QTsNCj4gLSAgICAgICAgICAgICAgIHhwcnRfbG9hZF90cmFuc3BvcnQocCk7DQo+ICsgICAgICAg ICAgICAgICB4cHJ0X2xvYWRfdHJhbnNwb3J0KHBhcmFtLT5rZXkpOw0KPiAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+ICAgICAgICAgY2FzZSBPcHRfYWNsOg0KPiAtICAgICAgICAgICAgICAgY3R4 LT5mbGFncyAmPSB+TkZTX01PVU5UX05PQUNMOw0KPiAtICAgICAgICAgICAgICAgYnJlYWs7DQo+ IC0gICAgICAgY2FzZSBPcHRfbm9hY2w6DQo+IC0gICAgICAgICAgICAgICBjdHgtPmZsYWdzIHw9 IE5GU19NT1VOVF9OT0FDTDsNCj4gKyAgICAgICAgICAgICAgIGlmIChyZXN1bHQubmVnYXRlZCkN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbGFncyB8PSBORlNfTU9VTlRfTk9BQ0w7 DQo+ICsgICAgICAgICAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ ZmxhZ3MgJj0gfk5GU19NT1VOVF9OT0FDTDsNCj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAg ICAgICAgIGNhc2UgT3B0X3JkaXJwbHVzOg0KPiAtICAgICAgICAgICAgICAgY3R4LT5mbGFncyAm PSB+TkZTX01PVU5UX05PUkRJUlBMVVM7DQo+IC0gICAgICAgICAgICAgICBicmVhazsNCj4gLSAg ICAgICBjYXNlIE9wdF9ub3JkaXJwbHVzOg0KPiAtICAgICAgICAgICAgICAgY3R4LT5mbGFncyB8 PSBORlNfTU9VTlRfTk9SRElSUExVUzsNCj4gKyAgICAgICAgICAgICAgIGlmIChyZXN1bHQubmVn YXRlZCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbGFncyB8PSBORlNfTU9VTlRf Tk9SRElSUExVUzsNCj4gKyAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgY3R4LT5mbGFncyAmPSB+TkZTX01PVU5UX05PUkRJUlBMVVM7DQo+ICAgICAgICAgICAg ICAgICBicmVhazsNCj4gICAgICAgICBjYXNlIE9wdF9zaGFyZWNhY2hlOg0KPiAtICAgICAgICAg ICAgICAgY3R4LT5mbGFncyAmPSB+TkZTX01PVU5UX1VOU0hBUkVEOw0KPiAtICAgICAgICAgICAg ICAgYnJlYWs7DQo+IC0gICAgICAgY2FzZSBPcHRfbm9zaGFyZWNhY2hlOg0KPiAtICAgICAgICAg ICAgICAgY3R4LT5mbGFncyB8PSBORlNfTU9VTlRfVU5TSEFSRUQ7DQo+ICsgICAgICAgICAgICAg ICBpZiAocmVzdWx0Lm5lZ2F0ZWQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Zmxh Z3MgfD0gTkZTX01PVU5UX1VOU0hBUkVEOw0KPiArICAgICAgICAgICAgICAgZWxzZQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICBjdHgtPmZsYWdzICY9IH5ORlNfTU9VTlRfVU5TSEFSRUQ7DQo+ ICAgICAgICAgICAgICAgICBicmVhazsNCj4gICAgICAgICBjYXNlIE9wdF9yZXN2cG9ydDoNCj4g LSAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9OT1JFU1ZQT1JUOw0KPiAt ICAgICAgICAgICAgICAgYnJlYWs7DQo+IC0gICAgICAgY2FzZSBPcHRfbm9yZXN2cG9ydDoNCj4g LSAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PUkVTVlBPUlQ7DQo+ICsg ICAgICAgICAgICAgICBpZiAocmVzdWx0Lm5lZ2F0ZWQpDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGN0eC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PUkVTVlBPUlQ7DQo+ICsgICAgICAgICAgICAg ICBlbHNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfk5GU19NT1VO VF9OT1JFU1ZQT1JUOw0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgY2FzZSBP cHRfZnNjYWNoZToNCj4gLSAgICAgICAgICAgICAgIGN0eC0+b3B0aW9ucyB8PSBORlNfT1BUSU9O X0ZTQ0FDSEU7DQo+IC0gICAgICAgICAgICAgICBrZnJlZShjdHgtPmZzY2FjaGVfdW5pcSk7DQo+ IC0gICAgICAgICAgICAgICBjdHgtPmZzY2FjaGVfdW5pcSA9IE5VTEw7DQo+IC0gICAgICAgICAg ICAgICBicmVhazsNCj4gLSAgICAgICBjYXNlIE9wdF9ub2ZzY2FjaGU6DQo+IC0gICAgICAgICAg ICAgICBjdHgtPm9wdGlvbnMgJj0gfk5GU19PUFRJT05fRlNDQUNIRTsNCj4gICAgICAgICAgICAg ICAgIGtmcmVlKGN0eC0+ZnNjYWNoZV91bmlxKTsNCj4gLSAgICAgICAgICAgICAgIGN0eC0+ZnNj YWNoZV91bmlxID0gTlVMTDsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+ZnNjYWNoZV91bmlxID0g cGFyYW0tPnN0cmluZzsNCj4gKyAgICAgICAgICAgICAgIHBhcmFtLT5zdHJpbmcgPSBOVUxMOw0K PiArICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5uZWdhdGVkKQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICBjdHgtPm9wdGlvbnMgJj0gfk5GU19PUFRJT05fRlNDQUNIRTsNCj4gKyAgICAgICAg ICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5vcHRpb25zIHw9IE5G U19PUFRJT05fRlNDQUNIRTsNCj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAgIGNh c2UgT3B0X21pZ3JhdGlvbjoNCj4gLSAgICAgICAgICAgICAgIGN0eC0+b3B0aW9ucyB8PSBORlNf T1BUSU9OX01JR1JBVElPTjsNCj4gLSAgICAgICAgICAgICAgIGJyZWFrOw0KPiAtICAgICAgIGNh c2UgT3B0X25vbWlncmF0aW9uOg0KPiAtICAgICAgICAgICAgICAgY3R4LT5vcHRpb25zICY9IH5O RlNfT1BUSU9OX01JR1JBVElPTjsNCj4gKyAgICAgICAgICAgICAgIGlmIChyZXN1bHQubmVnYXRl ZCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5vcHRpb25zICY9IH5ORlNfT1BUSU9O X01JR1JBVElPTjsNCj4gKyAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgY3R4LT5vcHRpb25zIHw9IE5GU19PUFRJT05fTUlHUkFUSU9OOw0KPiAgICAgICAgICAg ICAgICAgYnJlYWs7DQo+IA0KPiAgICAgICAgICAgICAgICAgLyoNCj4gICAgICAgICAgICAgICAg ICAqIG9wdGlvbnMgdGhhdCB0YWtlIG51bWVyaWMgdmFsdWVzDQo+ICAgICAgICAgICAgICAgICAg Ki8NCj4gICAgICAgICBjYXNlIE9wdF9wb3J0Og0KPiAtICAgICAgICAgICAgICAgaWYgKG5mc19n ZXRfb3B0aW9uX3VpX2JvdW5kKGN0eCwgYXJncywgJmN0eC0+bmZzX3NlcnZlci5wb3J0LA0KPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFVTSFJUX01BWCkp DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ICsg ICAgICAgICAgICAgICBpZiAocmVzdWx0LnVpbnRfMzIgPiBVU0hSVF9NQVgpDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX2JvdW5kczsNCj4gKyAgICAgICAgICAgICAgIGN0 eC0+bmZzX3NlcnZlci5wb3J0ID0gcmVzdWx0LnVpbnRfMzI7DQo+ICAgICAgICAgICAgICAgICBi cmVhazsNCj4gICAgICAgICBjYXNlIE9wdF9yc2l6ZToNCj4gLSAgICAgICAgICAgICAgIGlmIChu ZnNfZ2V0X29wdGlvbl91aShjdHgsIGFyZ3MsICZjdHgtPnJzaXplKSkNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gKyAgICAgICAgICAgICAgIGN0 eC0+cnNpemUgPSByZXN1bHQudWludF8zMjsNCj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAg ICAgICAgIGNhc2UgT3B0X3dzaXplOg0KPiAtICAgICAgICAgICAgICAgaWYgKG5mc19nZXRfb3B0 aW9uX3VpKGN0eCwgYXJncywgJmN0eC0+d3NpemUpKQ0KPiAtICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiArICAgICAgICAgICAgICAgY3R4LT53c2l6ZSA9 IHJlc3VsdC51aW50XzMyOw0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgY2Fz ZSBPcHRfYnNpemU6DQo+IC0gICAgICAgICAgICAgICBpZiAobmZzX2dldF9vcHRpb25fdWkoY3R4 LCBhcmdzLCAmY3R4LT5ic2l6ZSkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0 X2ludmFsaWRfdmFsdWU7DQo+ICsgICAgICAgICAgICAgICBjdHgtPmJzaXplID0gcmVzdWx0LnVp bnRfMzI7DQo+ICAgICAgICAgICAgICAgICBicmVhazsNCj4gICAgICAgICBjYXNlIE9wdF90aW1l bzoNCj4gLSAgICAgICAgICAgICAgIGlmIChuZnNfZ2V0X29wdGlvbl91aV9ib3VuZChjdHgsIGFy Z3MsICZjdHgtPnRpbWVvLCAxLA0KPiBJTlRfTUFYKSkNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gKyAgICAgICAgICAgICAgIGlmIChyZXN1bHQu dWludF8zMiA8IDEgfHwgcmVzdWx0LnVpbnRfMzIgPiBJTlRfTUFYKQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIG91dF9vZl9ib3VuZHM7DQo+ICsgICAgICAgICAgICAgICBjdHgtPnRp bWVvID0gcmVzdWx0LnVpbnRfMzI7DQo+ICAgICAgICAgICAgICAgICBicmVhazsNCj4gICAgICAg ICBjYXNlIE9wdF9yZXRyYW5zOg0KPiAtICAgICAgICAgICAgICAgaWYgKG5mc19nZXRfb3B0aW9u X3VpX2JvdW5kKGN0eCwgYXJncywgJmN0eC0+cmV0cmFucywgMCwNCj4gSU5UX01BWCkpDQo+IC0g ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ICsgICAgICAg ICAgICAgICBpZiAocmVzdWx0LnVpbnRfMzIgPiBJTlRfTUFYKQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIG91dF9vZl9ib3VuZHM7DQo+ICsgICAgICAgICAgICAgICBjdHgtPnJldHJh bnMgPSByZXN1bHQudWludF8zMjsNCj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAg IGNhc2UgT3B0X2FjcmVnbWluOg0KPiAtICAgICAgICAgICAgICAgaWYgKG5mc19nZXRfb3B0aW9u X3VpKGN0eCwgYXJncywgJmN0eC0+YWNyZWdtaW4pKQ0KPiAtICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiArICAgICAgICAgICAgICAgY3R4LT5hY3JlZ21p biA9IHJlc3VsdC51aW50XzMyOw0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAg Y2FzZSBPcHRfYWNyZWdtYXg6DQo+IC0gICAgICAgICAgICAgICBpZiAobmZzX2dldF9vcHRpb25f dWkoY3R4LCBhcmdzLCAmY3R4LT5hY3JlZ21heCkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAg IGdvdG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ICsgICAgICAgICAgICAgICBjdHgtPmFjcmVnbWF4 ID0gcmVzdWx0LnVpbnRfMzI7DQo+ICAgICAgICAgICAgICAgICBicmVhazsNCj4gICAgICAgICBj YXNlIE9wdF9hY2Rpcm1pbjoNCj4gLSAgICAgICAgICAgICAgIGlmIChuZnNfZ2V0X29wdGlvbl91 aShjdHgsIGFyZ3MsICZjdHgtPmFjZGlybWluKSkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg Z290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+YWNkaXJtaW4g PSByZXN1bHQudWludF8zMjsNCj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAgIGNh c2UgT3B0X2FjZGlybWF4Og0KPiAtICAgICAgICAgICAgICAgaWYgKG5mc19nZXRfb3B0aW9uX3Vp KGN0eCwgYXJncywgJmN0eC0+YWNkaXJtYXgpKQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICBn b3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiArICAgICAgICAgICAgICAgY3R4LT5hY2Rpcm1heCA9 IHJlc3VsdC51aW50XzMyOw0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgY2Fz ZSBPcHRfYWN0aW1lbzoNCj4gLSAgICAgICAgICAgICAgIGlmIChuZnNfZ2V0X29wdGlvbl91aShj dHgsIGFyZ3MsICZjdHgtPmFjZGlybWF4KSkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290 byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gLSAgICAgICAgICAgICAgIGN0eC0+YWNyZWdtaW4gPSBj dHgtPmFjcmVnbWF4ID0NCj4gLSAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5hY2Rpcm1pbiA9 IGN0eC0+YWNkaXJtYXg7DQo+ICsgICAgICAgICAgICAgICBjdHgtPmFjcmVnbWluID0gcmVzdWx0 LnVpbnRfMzI7DQo+ICsgICAgICAgICAgICAgICBjdHgtPmFjcmVnbWF4ID0gcmVzdWx0LnVpbnRf MzI7DQo+ICsgICAgICAgICAgICAgICBjdHgtPmFjZGlybWluID0gcmVzdWx0LnVpbnRfMzI7DQo+ ICsgICAgICAgICAgICAgICBjdHgtPmFjZGlybWF4ID0gcmVzdWx0LnVpbnRfMzI7DQo+ICAgICAg ICAgICAgICAgICBicmVhazsNCj4gICAgICAgICBjYXNlIE9wdF9uYW1lbGVuOg0KPiAtICAgICAg ICAgICAgICAgaWYgKG5mc19nZXRfb3B0aW9uX3VpKGN0eCwgYXJncywgJmN0eC0+bmFtbGVuKSkN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gKyAg ICAgICAgICAgICAgIGN0eC0+bmFtbGVuID0gcmVzdWx0LnVpbnRfMzI7DQo+ICAgICAgICAgICAg ICAgICBicmVhazsNCj4gICAgICAgICBjYXNlIE9wdF9tb3VudHBvcnQ6DQo+IC0gICAgICAgICAg ICAgICBpZiAobmZzX2dldF9vcHRpb25fdWlfYm91bmQoY3R4LCBhcmdzLCAmY3R4LQ0KPiA+bW91 bnRfc2VydmVyLnBvcnQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgVVNIUlRfTUFYKSkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRf aW52YWxpZF92YWx1ZTsNCj4gKyAgICAgICAgICAgICAgIGlmIChyZXN1bHQudWludF8zMiA+IFVT SFJUX01BWCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfb2ZfYm91bmRzOw0K PiArICAgICAgICAgICAgICAgY3R4LT5tb3VudF9zZXJ2ZXIucG9ydCA9IHJlc3VsdC51aW50XzMy Ow0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgY2FzZSBPcHRfbW91bnR2ZXJz Og0KPiAtICAgICAgICAgICAgICAgaWYgKG5mc19nZXRfb3B0aW9uX3VpX2JvdW5kKGN0eCwgYXJn cywgJmN0eC0NCj4gPm1vdW50X3NlcnZlci52ZXJzaW9uLA0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5GU19NTlRfVkVSU0lPTiwNCj4gTkZTX01OVDNfVkVS U0lPTikpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X2ludmFsaWRfdmFsdWU7 DQo+ICsgICAgICAgICAgICAgICBpZiAocmVzdWx0LnVpbnRfMzIgPCBORlNfTU5UX1ZFUlNJT04g fHwNCj4gKyAgICAgICAgICAgICAgICAgICByZXN1bHQudWludF8zMiA+IE5GU19NTlQzX1ZFUlNJ T04pDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX2JvdW5kczsNCj4gKyAg ICAgICAgICAgICAgIGN0eC0+bW91bnRfc2VydmVyLnZlcnNpb24gPSByZXN1bHQudWludF8zMjsN Cj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAgIGNhc2UgT3B0X21pbm9ydmVyc2lv bjoNCj4gLSAgICAgICAgICAgICAgIGlmIChuZnNfZ2V0X29wdGlvbl91aV9ib3VuZChjdHgsIGFy Z3MsICZjdHgtPm1pbm9ydmVyc2lvbiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLCBORlM0X01BWF9NSU5PUl9WRVJTSU9OKSkNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gKyAgICAgICAgICAgICAgIGlm IChyZXN1bHQudWludF8zMiA+IE5GUzRfTUFYX01JTk9SX1ZFUlNJT04pDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gb3V0X29mX2JvdW5kczsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+ bWlub3J2ZXJzaW9uID0gcmVzdWx0LnVpbnRfMzI7DQo+ICAgICAgICAgICAgICAgICBicmVhazsN Cj4gDQo+ICAgICAgICAgICAgICAgICAvKg0KPiAgICAgICAgICAgICAgICAgICogb3B0aW9ucyB0 aGF0IHRha2UgdGV4dCB2YWx1ZXMNCj4gICAgICAgICAgICAgICAgICAqLw0KPiAtICAgICAgIGNh c2UgT3B0X25mc3ZlcnM6DQo+IC0gICAgICAgICAgICAgICBzdHJpbmcgPSBtYXRjaF9zdHJkdXAo YXJncyk7DQo+IC0gICAgICAgICAgICAgICBpZiAoc3RyaW5nID09IE5VTEwpDQo+IC0gICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gb3V0X25vbWVtOw0KPiAtICAgICAgICAgICAgICAgcmV0ID0g bmZzX3BhcnNlX3ZlcnNpb25fc3RyaW5nKGN0eCwgc3RyaW5nLCBhcmdzKTsNCj4gLSAgICAgICAg ICAgICAgIGtmcmVlKHN0cmluZyk7DQo+ICsgICAgICAgY2FzZSBPcHRfdjoNCj4gKyAgICAgICAg ICAgICAgIHJldCA9IG5mc19wYXJzZV92ZXJzaW9uX3N0cmluZyhmYywgcGFyYW0tPmtleSArIDEp Ow0KPiArICAgICAgICAgICAgICAgaWYgKHJldCA8IDApDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7DQo+ICsgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICBjYXNl IE9wdF92ZXJzOg0KPiArICAgICAgICAgICAgICAgcmV0ID0gbmZzX3BhcnNlX3ZlcnNpb25fc3Ry aW5nKGZjLCBwYXJhbS0+c3RyaW5nKTsNCj4gICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQ0K PiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiAgICAgICAgICAgICAgICAg YnJlYWs7DQo+ICAgICAgICAgY2FzZSBPcHRfc2VjOg0KPiAtICAgICAgICAgICAgICAgc3RyaW5n ID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOw0KPiAtICAgICAgICAgICAgICAgaWYgKHN0cmluZyA9PSBO VUxMKQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9ub21lbTsNCj4gLSAgICAg ICAgICAgICAgIHJldCA9IG5mc19wYXJzZV9zZWN1cml0eV9mbGF2b3JzKGN0eCwgc3RyaW5nKTsN Cj4gLSAgICAgICAgICAgICAgIGtmcmVlKHN0cmluZyk7DQo+ICsgICAgICAgICAgICAgICByZXQg PSBuZnNfcGFyc2Vfc2VjdXJpdHlfZmxhdm9ycyhmYywgcGFyYW0pOw0KPiAgICAgICAgICAgICAg ICAgaWYgKHJldCA8IDApDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ ICAgICAgICAgICAgICAgICBicmVhazsNCj4gLSAgICAgICBjYXNlIE9wdF9wcm90bzoNCj4gLSAg ICAgICAgICAgICAgIHN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsNCj4gLSAgICAgICAgICAg ICAgIGlmIChzdHJpbmcgPT0gTlVMTCkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290byBv dXRfbm9tZW07DQo+IC0gICAgICAgICAgICAgICB0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmluZywg bmZzX3hwcnRfcHJvdG9jb2xfdG9rZW5zLCBhcmdzKTsNCj4gDQo+IC0gICAgICAgICAgICAgICBj dHgtPnByb3RvZmFtaWx5ID0gQUZfSU5FVDsNCj4gLSAgICAgICAgICAgICAgIHN3aXRjaCAodG9r ZW4pIHsNCj4gKyAgICAgICBjYXNlIE9wdF9wcm90bzoNCj4gKyAgICAgICAgICAgICAgIHByb3Rv ZmFtaWx5ID0gQUZfSU5FVDsNCj4gKyAgICAgICAgICAgICAgIHN3aXRjaCAobG9va3VwX2NvbnN0 YW50KG5mc194cHJ0X3Byb3RvY29sX3Rva2VucywgcGFyYW0tDQo+ID5zdHJpbmcsIC0xKSkgew0K PiAgICAgICAgICAgICAgICAgY2FzZSBPcHRfeHBydF91ZHA2Og0KPiAtICAgICAgICAgICAgICAg ICAgICAgICBjdHgtPnByb3RvZmFtaWx5ID0gQUZfSU5FVDY7DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHByb3RvZmFtaWx5ID0gQUZfSU5FVDY7DQo+ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGZhbGwgdGhyb3VnaCAqLw0KPiAgICAgICAgICAgICAgICAgY2FzZSBPcHRfeHBydF91ZHA6 DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9UQ1A7 DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQ UlRfVFJBTlNQT1JUX1VEUDsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAg ICAgICAgICAgICAgICBjYXNlIE9wdF94cHJ0X3RjcDY6DQo+IC0gICAgICAgICAgICAgICAgICAg ICAgIGN0eC0+cHJvdG9mYW1pbHkgPSBBRl9JTkVUNjsNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcHJvdG9mYW1pbHkgPSBBRl9JTkVUNjsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgLyog ZmFsbCB0aHJvdWdoICovDQo+ICAgICAgICAgICAgICAgICBjYXNlIE9wdF94cHJ0X3RjcDoNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbGFncyB8PSBORlNfTU9VTlRfVENQOw0KPiAg ICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RS QU5TUE9SVF9UQ1A7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAg ICAgICAgICAgY2FzZSBPcHRfeHBydF9yZG1hNjoNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg Y3R4LT5wcm90b2ZhbWlseSA9IEFGX0lORVQ2Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICBw cm90b2ZhbWlseSA9IEFGX0lORVQ2Ow0KPiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmYWxs IHRocm91Z2ggKi8NCj4gICAgICAgICAgICAgICAgIGNhc2UgT3B0X3hwcnRfcmRtYToNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgLyogdmVjdG9yIHNpZGUgcHJvdG9jb2xzIHRvIFRDUCAqLw0K PiAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmZsYWdzIHw9IE5GU19NT1VOVF9UQ1A7DQo+ ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQUlRf VFJBTlNQT1JUX1JETUE7DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIHhwcnRfbG9hZF90cmFu c3BvcnQoc3RyaW5nKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgeHBydF9sb2FkX3RyYW5z cG9ydChwYXJhbS0+c3RyaW5nKTsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ ICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KPiAtICAgICAgICAgICAgICAgICAgICAgICBrZnJl ZShzdHJpbmcpOw0KPiAtICAgICAgICAgICAgICAgICAgICAgICBkZnByaW50ayhNT1VOVCwgIk5G UzogICB1bnJlY29nbml6ZWQgdHJhbnNwb3J0DQo+IHByb3RvY29sXG4iKTsNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBuZnNfaW52YWxmKGZjLCAiTkZTOiBVbnJlY29nbml6ZWQgdHJhbnNwb3J0DQo+IHBy b3RvY29sIik7DQo+ICAgICAgICAgICAgICAgICB9DQo+IC0gICAgICAgICAgICAgICBrZnJlZShz dHJpbmcpOw0KPiArDQo+ICsgICAgICAgICAgICAgICBjdHgtPnByb3RvZmFtaWx5ID0gcHJvdG9m YW1pbHk7DQo+ICAgICAgICAgICAgICAgICBicmVhazsNCj4gLSAgICAgICBjYXNlIE9wdF9tb3Vu dHByb3RvOg0KPiAtICAgICAgICAgICAgICAgc3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOw0K PiAtICAgICAgICAgICAgICAgaWYgKHN0cmluZyA9PSBOVUxMKQ0KPiAtICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIG91dF9ub21lbTsNCj4gLSAgICAgICAgICAgICAgIHRva2VuID0gbWF0Y2hf dG9rZW4oc3RyaW5nLCBuZnNfeHBydF9wcm90b2NvbF90b2tlbnMsIGFyZ3MpOw0KPiAtICAgICAg ICAgICAgICAga2ZyZWUoc3RyaW5nKTsNCj4gDQo+IC0gICAgICAgICAgICAgICBjdHgtPm1vdW50 ZmFtaWx5ID0gQUZfSU5FVDsNCj4gLSAgICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4pIHsNCj4g KyAgICAgICBjYXNlIE9wdF9tb3VudHByb3RvOg0KPiArICAgICAgICAgICAgICAgbW91bnRmYW1p bHkgPSBBRl9JTkVUOw0KPiArICAgICAgICAgICAgICAgc3dpdGNoIChsb29rdXBfY29uc3RhbnQo bmZzX3hwcnRfcHJvdG9jb2xfdG9rZW5zLCBwYXJhbS0NCj4gPnN0cmluZywgLTEpKSB7DQo+ICAg ICAgICAgICAgICAgICBjYXNlIE9wdF94cHJ0X3VkcDY6DQo+IC0gICAgICAgICAgICAgICAgICAg ICAgIGN0eC0+bW91bnRmYW1pbHkgPSBBRl9JTkVUNjsNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgbW91bnRmYW1pbHkgPSBBRl9JTkVUNjsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgLyog ZmFsbCB0aHJvdWdoICovDQo+ICAgICAgICAgICAgICAgICBjYXNlIE9wdF94cHJ0X3VkcDoNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5tb3VudF9zZXJ2ZXIucHJvdG9jb2wgPSBYUFJU X1RSQU5TUE9SVF9VRFA7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAg ICAgICAgICAgICAgY2FzZSBPcHRfeHBydF90Y3A2Og0KPiAtICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPm1vdW50ZmFtaWx5ID0gQUZfSU5FVDY7DQo+ICsgICAgICAgICAgICAgICAgICAgICAg IG1vdW50ZmFtaWx5ID0gQUZfSU5FVDY7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZh bGwgdGhyb3VnaCAqLw0KPiAgICAgICAgICAgICAgICAgY2FzZSBPcHRfeHBydF90Y3A6DQo+ICAg ICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bW91bnRfc2VydmVyLnByb3RvY29sID0gWFBSVF9U UkFOU1BPUlRfVENQOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gICAgICAg ICAgICAgICAgIGNhc2UgT3B0X3hwcnRfcmRtYTogLyogbm90IHVzZWQgZm9yIHNpZGUgcHJvdG9j b2xzICovDQo+ICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KPiAtICAgICAgICAgICAgICAgICAg ICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogICB1bnJlY29nbml6ZWQgdHJhbnNwb3J0DQo+IHBy b3RvY29sXG4iKTsNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZnNfaW52YWxmKGZjLCAiTkZTOiBVbnJl Y29nbml6ZWQgdHJhbnNwb3J0DQo+IHByb3RvY29sIik7DQo+ICAgICAgICAgICAgICAgICB9DQo+ ICsgICAgICAgICAgICAgICBjdHgtPm1vdW50ZmFtaWx5ID0gbW91bnRmYW1pbHk7DQo+ICAgICAg ICAgICAgICAgICBicmVhazsNCj4gKw0KPiAgICAgICAgIGNhc2UgT3B0X2FkZHI6DQo+IC0gICAg ICAgICAgICAgICBzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7DQo+IC0gICAgICAgICAgICAg ICBpZiAoc3RyaW5nID09IE5VTEwpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0 X25vbWVtOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmFkZHJsZW4gPQ0KPiAt ICAgICAgICAgICAgICAgICAgICAgICBycGNfcHRvbihjdHgtPm5ldCwgc3RyaW5nLCBzdHJsZW4o c3RyaW5nKSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+bmZzX3Nl cnZlci5hZGRyZXNzLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo Y3R4LT5uZnNfc2VydmVyLl9hZGRyZXNzKSk7DQo+IC0gICAgICAgICAgICAgICBrZnJlZShzdHJp bmcpOw0KPiAtICAgICAgICAgICAgICAgaWYgKGN0eC0+bmZzX3NlcnZlci5hZGRybGVuID09IDAp DQo+ICsgICAgICAgICAgICAgICBsZW4gPSBycGNfcHRvbihmYy0+bmV0X25zLCBwYXJhbS0+c3Ry aW5nLCBwYXJhbS0+c2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgt Pm5mc19zZXJ2ZXIuYWRkcmVzcywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZihjdHgtPm5mc19zZXJ2ZXIuX2FkZHJlc3MpKTsNCj4gKyAgICAgICAgICAgICAgIGlmIChs ZW4gPT0gMCkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfaW52YWxpZF9hZGRy ZXNzOw0KPiArICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmFkZHJsZW4gPSBsZW47DQo+ ICAgICAgICAgICAgICAgICBicmVhazsNCj4gICAgICAgICBjYXNlIE9wdF9jbGllbnRhZGRyOg0K PiAtICAgICAgICAgICAgICAgaWYgKG5mc19nZXRfb3B0aW9uX3N0cihhcmdzLCAmY3R4LT5jbGll bnRfYWRkcmVzcykpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X25vbWVtOw0K PiArICAgICAgICAgICAgICAga2ZyZWUoY3R4LT5jbGllbnRfYWRkcmVzcyk7DQo+ICsgICAgICAg ICAgICAgICBjdHgtPmNsaWVudF9hZGRyZXNzID0gcGFyYW0tPnN0cmluZzsNCj4gKyAgICAgICAg ICAgICAgIHBhcmFtLT5zdHJpbmcgPSBOVUxMOw0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ ICAgICAgICAgY2FzZSBPcHRfbW91bnRob3N0Og0KPiAtICAgICAgICAgICAgICAgaWYgKG5mc19n ZXRfb3B0aW9uX3N0cihhcmdzLCAmY3R4LT5tb3VudF9zZXJ2ZXIuaG9zdG5hbWUpKQ0KPiAtICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9ub21lbTsNCj4gKyAgICAgICAgICAgICAgIGtm cmVlKGN0eC0+bW91bnRfc2VydmVyLmhvc3RuYW1lKTsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+ bW91bnRfc2VydmVyLmhvc3RuYW1lID0gcGFyYW0tPnN0cmluZzsNCj4gKyAgICAgICAgICAgICAg IHBhcmFtLT5zdHJpbmcgPSBOVUxMOw0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAg ICAgY2FzZSBPcHRfbW91bnRhZGRyOg0KPiAtICAgICAgICAgICAgICAgc3RyaW5nID0gbWF0Y2hf c3RyZHVwKGFyZ3MpOw0KPiAtICAgICAgICAgICAgICAgaWYgKHN0cmluZyA9PSBOVUxMKQ0KPiAt ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9ub21lbTsNCj4gLSAgICAgICAgICAgICAg IGN0eC0+bW91bnRfc2VydmVyLmFkZHJsZW4gPQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICBy cGNfcHRvbihjdHgtPm5ldCwgc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSwNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmN0eC0+bW91bnRfc2VydmVyLmFkZHJlc3MsDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdHgtPm1vdW50X3NlcnZlci5fYWRk cmVzcykpOw0KPiAtICAgICAgICAgICAgICAga2ZyZWUoc3RyaW5nKTsNCj4gLSAgICAgICAgICAg ICAgIGlmIChjdHgtPm1vdW50X3NlcnZlci5hZGRybGVuID09IDApDQo+ICsgICAgICAgICAgICAg ICBsZW4gPSBycGNfcHRvbihmYy0+bmV0X25zLCBwYXJhbS0+c3RyaW5nLCBwYXJhbS0+c2l6ZSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPm1vdW50X3NlcnZlci5hZGRy ZXNzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0eC0+bW91bnRf c2VydmVyLl9hZGRyZXNzKSk7DQo+ICsgICAgICAgICAgICAgICBpZiAobGVuID09IDApDQo+ICAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X2ludmFsaWRfYWRkcmVzczsNCj4gKyAgICAg ICAgICAgICAgIGN0eC0+bW91bnRfc2VydmVyLmFkZHJsZW4gPSBsZW47DQo+ICAgICAgICAgICAg ICAgICBicmVhazsNCj4gICAgICAgICBjYXNlIE9wdF9sb29rdXBjYWNoZToNCj4gLSAgICAgICAg ICAgICAgIHN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsNCj4gLSAgICAgICAgICAgICAgIGlm IChzdHJpbmcgPT0gTlVMTCkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfbm9t ZW07DQo+IC0gICAgICAgICAgICAgICB0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmluZywgbmZzX2xv b2t1cGNhY2hlX3Rva2VucywgYXJncyk7DQo+IC0gICAgICAgICAgICAgICBrZnJlZShzdHJpbmcp Ow0KPiAtICAgICAgICAgICAgICAgc3dpdGNoICh0b2tlbikgew0KPiArICAgICAgICAgICAgICAg c3dpdGNoIChyZXN1bHQudWludF8zMikgew0KPiAgICAgICAgICAgICAgICAgY2FzZSBPcHRfbG9v a3VwY2FjaGVfYWxsOg0KPiAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmZsYWdzICY9DQo+ IH4oTkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FR3xORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05P TkUpOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gQEAgLTgwNiwyMiArNzIz LDExIEBAIHN0YXRpYyBpbnQgbmZzX2ZzX2NvbnRleHRfcGFyc2Vfb3B0aW9uKHN0cnVjdA0KPiBu ZnNfZnNfY29udGV4dCAqY3R4LCBjaGFyICpwKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBj dHgtPmZsYWdzIHw9DQo+IE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUd8TkZTX01PVU5UX0xP T0tVUF9DQUNIRV9OT05FOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gICAg ICAgICAgICAgICAgIGRlZmF1bHQ6DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGRmcHJpbnRr KE1PVU5ULCAiTkZTOiAgIGludmFsaWQgbG9va3VwY2FjaGUNCj4gYXJndW1lbnRcbiIpOw0KPiAt ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gICAgICAgICAgICAgICAgIH0NCj4g ICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAtICAgICAgIGNhc2UgT3B0X2ZzY2FjaGVfdW5pcToN Cj4gLSAgICAgICAgICAgICAgIGlmIChuZnNfZ2V0X29wdGlvbl9zdHIoYXJncywgJmN0eC0+ZnNj YWNoZV91bmlxKSkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfbm9tZW07DQo+ IC0gICAgICAgICAgICAgICBjdHgtPm9wdGlvbnMgfD0gTkZTX09QVElPTl9GU0NBQ0hFOw0KPiAt ICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgY2FzZSBPcHRfbG9jYWxfbG9jazoNCj4g LSAgICAgICAgICAgICAgIHN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsNCj4gLSAgICAgICAg ICAgICAgIGlmIChzdHJpbmcgPT0gTlVMTCkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290 byBvdXRfbm9tZW07DQo+IC0gICAgICAgICAgICAgICB0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmlu ZywgbmZzX2xvY2FsX2xvY2tfdG9rZW5zLCBhcmdzKTsNCj4gLSAgICAgICAgICAgICAgIGtmcmVl KHN0cmluZyk7DQo+IC0gICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7DQo+ICsgICAgICAg ICAgICAgICBzd2l0Y2ggKHJlc3VsdC51aW50XzMyKSB7DQo+ICAgICAgICAgICAgICAgICBjYXNl IE9wdF9sb2NhbF9sb2NrX2FsbDoNCj4gICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbGFn cyB8PSAoTkZTX01PVU5UX0xPQ0FMX0ZMT0NLIHwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTkZTX01PVU5UX0xPQ0FMX0ZDTlRMKTsNCj4gQEAgLTgzNywxMjEgKzc0 MywzMiBAQCBzdGF0aWMgaW50IG5mc19mc19jb250ZXh0X3BhcnNlX29wdGlvbihzdHJ1Y3QNCj4g bmZzX2ZzX2NvbnRleHQgKmN0eCwgY2hhciAqcCkNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5GU19NT1VOVF9MT0NBTF9GQ05UTCk7DQo+ICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6ICAgaW52YWxpZCBsb2NhbF9sb2Nr DQo+IGFyZ3VtZW50XG4iKTsNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7DQo+IC0gICAgICAgICAgICAgICB9Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IG91dF9pbnZhbGlkX3ZhbHVlOw0KPiArICAgICAgICAgICAgICAgfQ0KPiAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+IA0KPiAgICAgICAgICAgICAgICAgLyoNCj4gICAgICAgICAgICAgICAgICAq IFNwZWNpYWwgb3B0aW9ucw0KPiAgICAgICAgICAgICAgICAgICovDQo+ICAgICAgICAgY2FzZSBP cHRfc2xvcHB5Og0KPiAtICAgICAgICAgICAgICAgY3R4LT5zbG9wcHkgPSAxOw0KPiArICAgICAg ICAgICAgICAgY3R4LT5zbG9wcHkgPSB0cnVlOw0KPiAgICAgICAgICAgICAgICAgZGZwcmludGso TU9VTlQsICJORlM6ICAgcmVsYXhpbmcgcGFyc2luZyBydWxlc1xuIik7DQo+ICAgICAgICAgICAg ICAgICBicmVhazsNCj4gLSAgICAgICBjYXNlIE9wdF91c2Vyc3BhY2U6DQo+IC0gICAgICAgY2Fz ZSBPcHRfZGVwcmVjYXRlZDoNCj4gLSAgICAgICAgICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZT OiAgIGlnbm9yaW5nIG1vdW50IG9wdGlvbiAnJXMnXG4iLCBwKTsNCj4gLSAgICAgICAgICAgICAg IGJyZWFrOw0KPiAtDQo+IC0gICAgICAgZGVmYXVsdDoNCj4gLSAgICAgICAgICAgICAgIGRmcHJp bnRrKE1PVU5ULCAiTkZTOiAgIHVucmVjb2duaXplZCBtb3VudCBvcHRpb24gJyVzJ1xuIiwgcCk7 DQo+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gICAgICAgICB9DQo+IA0KPiAg ICAgICAgIHJldHVybiAwOw0KPiANCj4gLW91dF9pbnZhbGlkX2FkZHJlc3M6DQo+IC0gICAgICAg cHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBiYWQgSVAgYWRkcmVzcyBzcGVjaWZpZWQ6ICVzXG4iLCBw KTsNCj4gLSAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gIG91dF9pbnZhbGlkX3ZhbHVlOg0KPiAt ICAgICAgIHByaW50ayhLRVJOX0lORk8gIk5GUzogYmFkIG1vdW50IG9wdGlvbiB2YWx1ZSBzcGVj aWZpZWQ6ICVzXG4iLCBwKTsNCj4gLSAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gLW91dF9ub21l bToNCj4gLSAgICAgICBwcmludGsoS0VSTl9JTkZPICJORlM6IG5vdCBlbm91Z2ggbWVtb3J5IHRv IHBhcnNlIG9wdGlvblxuIik7DQo+IC0gICAgICAgcmV0dXJuIC1FTk9NRU07DQo+IC19DQo+IC0N Cj4gLS8qDQo+IC0gKiBFcnJvci1jaGVjayBhbmQgY29udmVydCBhIHN0cmluZyBvZiBtb3VudCBv cHRpb25zIGZyb20gdXNlciBzcGFjZSBpbnRvDQo+IC0gKiBhIGRhdGEgc3RydWN0dXJlLiAgVGhl IHdob2xlIG1vdW50IHN0cmluZyBpcyBwcm9jZXNzZWQ7IGJhZCBvcHRpb25zIGFyZQ0KPiAtICog c2tpcHBlZCBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZC4gIElmIHRoZXJlIHdlcmUgbm8gZXJyb3Jz LCByZXR1cm4gMTsNCj4gLSAqIG90aGVyd2lzZSByZXR1cm4gMCAoemVybykuDQo+IC0gKi8NCj4g LWludCBuZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpyYXcsIHN0cnVjdCBuZnNfZnNfY29u dGV4dCAqY3R4KQ0KPiAtew0KPiAtICAgICAgIGNoYXIgKnA7DQo+IC0gICAgICAgaW50IHJjLCBz bG9wcHkgPSAwLCBpbnZhbGlkX29wdGlvbiA9IDA7DQo+IC0NCj4gLSAgICAgICBpZiAoIXJhdykg ew0KPiAtICAgICAgICAgICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6IG1vdW50IG9wdGlvbnMg c3RyaW5nIHdhcyBOVUxMLlxuIik7DQo+IC0gICAgICAgICAgICAgICByZXR1cm4gMTsNCj4gLSAg ICAgICB9DQo+IC0gICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6IG5mcyBtb3VudCBvcHRzPScl cydcbiIsIHJhdyk7DQo+IC0NCj4gLSAgICAgICByYyA9IHNlY3VyaXR5X3NiX2VhdF9sc21fb3B0 cyhyYXcsICZjdHgtPmxzbV9vcHRzKTsNCj4gLSAgICAgICBpZiAocmMpDQo+IC0gICAgICAgICAg ICAgICBnb3RvIG91dF9zZWN1cml0eV9mYWlsdXJlOw0KPiAtDQo+IC0gICAgICAgd2hpbGUgKChw ID0gc3Ryc2VwKCZyYXcsICIsIikpICE9IE5VTEwpIHsNCj4gLSAgICAgICAgICAgICAgIGlmICgh KnApDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiAtICAgICAgICAgICAg ICAgaWYgKG5mc19mc19jb250ZXh0X3BhcnNlX29wdGlvbihjdHgsIHApIDwgMCkNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgaW52YWxpZF9vcHRpb24gPSB0cnVlOw0KPiAtICAgICAgIH0NCj4g LQ0KPiAtICAgICAgIGlmICghc2xvcHB5ICYmIGludmFsaWRfb3B0aW9uKQ0KPiAtICAgICAgICAg ICAgICAgcmV0dXJuIDA7DQo+IC0NCj4gLSAgICAgICBpZiAoY3R4LT5taW5vcnZlcnNpb24gJiYg Y3R4LT52ZXJzaW9uICE9IDQpDQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dF9taW5vcnZlcnNp b25fbWlzbWF0Y2g7DQo+IC0NCj4gLSAgICAgICBpZiAoY3R4LT5vcHRpb25zICYgTkZTX09QVElP Tl9NSUdSQVRJT04gJiYNCj4gLSAgICAgICAgICAgKGN0eC0+dmVyc2lvbiAhPSA0IHx8IGN0eC0+ bWlub3J2ZXJzaW9uICE9IDApKQ0KPiAtICAgICAgICAgICAgICAgZ290byBvdXRfbWlncmF0aW9u X21pc3VzZTsNCj4gLQ0KPiAtICAgICAgIC8qDQo+IC0gICAgICAgICogdmVyaWZ5IHRoYXQgYW55 IHByb3RvPS9tb3VudHByb3RvPSBvcHRpb25zIG1hdGNoIHRoZSBhZGRyZXNzDQo+IC0gICAgICAg ICogZmFtaWxpZXMgaW4gdGhlIGFkZHI9L21vdW50YWRkcj0gb3B0aW9ucy4NCj4gLSAgICAgICAg Ki8NCj4gLSAgICAgICBpZiAoY3R4LT5wcm90b2ZhbWlseSAhPSBBRl9VTlNQRUMgJiYNCj4gLSAg ICAgICAgICAgY3R4LT5wcm90b2ZhbWlseSAhPSBjdHgtPm5mc19zZXJ2ZXIuYWRkcmVzcy5zYV9m YW1pbHkpDQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dF9wcm90b19taXNtYXRjaDsNCj4gLQ0K PiAtICAgICAgIGlmIChjdHgtPm1vdW50ZmFtaWx5ICE9IEFGX1VOU1BFQykgew0KPiAtICAgICAg ICAgICAgICAgaWYgKGN0eC0+bW91bnRfc2VydmVyLmFkZHJsZW4pIHsNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGN0eC0+bW91bnRmYW1pbHkgIT0gY3R4LQ0KPiA+bW91bnRfc2VydmVy LmFkZHJlc3Muc2FfZmFtaWx5KQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gb3V0X21vdW50cHJvdG9fbWlzbWF0Y2g7DQo+IC0gICAgICAgICAgICAgICB9IGVsc2Ugew0K PiAtICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5tb3VudGZhbWlseSAhPSBjdHgtDQo+ ID5uZnNfc2VydmVyLmFkZHJlc3Muc2FfZmFtaWx5KQ0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gb3V0X21vdW50cHJvdG9fbWlzbWF0Y2g7DQo+IC0gICAgICAgICAgICAg ICB9DQo+IC0gICAgICAgfQ0KPiAtDQo+IC0gICAgICAgcmV0dXJuIDE7DQo+IC0NCj4gLW91dF9t aW5vcnZlcnNpb25fbWlzbWF0Y2g6DQo+IC0gICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBt b3VudCBvcHRpb24gdmVycz0ldSBkb2VzIG5vdCBzdXBwb3J0ICINCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICJtaW5vcnZlcnNpb249JXVcbiIsIGN0eC0+dmVyc2lvbiwgY3R4LQ0KPiA+bWlu b3J2ZXJzaW9uKTsNCj4gLSAgICAgICByZXR1cm4gMDsNCj4gLW91dF9tb3VudHByb3RvX21pc21h dGNoOg0KPiAtICAgICAgIHByaW50ayhLRVJOX0lORk8gIk5GUzogbW91bnQgc2VydmVyIGFkZHJl c3MgZG9lcyBub3QgbWF0Y2ggbW91bnRwcm90bz0NCj4gIg0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgIm9wdGlvblxuIik7DQo+IC0gICAgICAgcmV0dXJuIDA7DQo+IC1vdXRfcHJvdG9fbWlz bWF0Y2g6DQo+IC0gICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBzZXJ2ZXIgYWRkcmVzcyBk b2VzIG5vdCBtYXRjaCBwcm90bz0NCj4gb3B0aW9uXG4iKTsNCj4gLSAgICAgICByZXR1cm4gMDsN Cj4gLW91dF9taWdyYXRpb25fbWlzdXNlOg0KPiAtICAgICAgIHByaW50ayhLRVJOX0lORk8NCj4g LSAgICAgICAgICAgICAgICJORlM6ICdtaWdyYXRpb24nIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMg TkZTIHZlcnNpb25cbiIpOw0KPiAtICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiAtb3V0X3NlY3Vy aXR5X2ZhaWx1cmU6DQo+IC0gICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBzZWN1cml0eSBv cHRpb25zIGludmFsaWQ6ICVkXG4iLCByYyk7DQo+IC0gICAgICAgcmV0dXJuIDA7DQo+ICsgICAg ICAgcmV0dXJuIG5mc19pbnZhbGYoZmMsICJORlM6IEJhZCBtb3VudCBvcHRpb24gdmFsdWUgc3Bl Y2lmaWVkIik7DQo+ICtvdXRfaW52YWxpZF9hZGRyZXNzOg0KPiArICAgICAgIHJldHVybiBuZnNf aW52YWxmKGZjLCAiTkZTOiBCYWQgSVAgYWRkcmVzcyBzcGVjaWZpZWQiKTsNCj4gK291dF9vZl9i b3VuZHM6DQo+ICsgICAgICAgbmZzX2ludmFsZihmYywgIk5GUzogVmFsdWUgZm9yICclcycgb3V0 IG9mIHJhbmdlIiwgcGFyYW0tPmtleSk7DQo+ICsgICAgICAgcmV0dXJuIC1FUkFOR0U7DQo+ICB9 DQo+IA0KPiAgLyoNCj4gLSAqIFNwbGl0ICJkZXZfbmFtZSIgaW50byAiaG9zdG5hbWU6ZXhwb3J0 X3BhdGgiLg0KPiArICogU3BsaXQgZmMtPnNvdXJjZSBpbnRvICJob3N0bmFtZTpleHBvcnRfcGF0 aCIuDQo+ICAgKg0KPiAgICogVGhlIGxlZnRtb3N0IGNvbG9uIGRlbWFya3MgdGhlIHNwbGl0IGJl dHdlZW4gdGhlIHNlcnZlcidzIGhvc3RuYW1lDQo+ICAgKiBhbmQgdGhlIGV4cG9ydCBwYXRoLiAg SWYgdGhlIGhvc3RuYW1lIHN0YXJ0cyB3aXRoIGEgbGVmdCBzcXVhcmUNCj4gQEAgLTk1OSwxMiAr Nzc2LDEzIEBAIGludCBuZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpyYXcsIHN0cnVjdA0K PiBuZnNfZnNfY29udGV4dCAqY3R4KQ0KPiAgICoNCj4gICAqIE5vdGU6IGNhbGxlciBmcmVlcyBo b3N0bmFtZSBhbmQgZXhwb3J0IHBhdGgsIGV2ZW4gb24gZXJyb3IuDQo+ICAgKi8NCj4gLXN0YXRp YyBpbnQgbmZzX3BhcnNlX2Rldm5hbWUoc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgsDQo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUsDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heG5hbWxlbiwgc2l6ZV90IG1heHBhdGhs ZW4pDQo+ICtzdGF0aWMgaW50IG5mc19wYXJzZV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZj LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heG5hbWxlbiwgc2l6ZV90 IG1heHBhdGhsZW4pDQo+ICB7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgg PSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICsgICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUgPSBm Yy0+c291cmNlOw0KPiAgICAgICAgIHNpemVfdCBsZW47DQo+IC0gICAgICAgY2hhciAqZW5kOw0K PiArICAgICAgIGNvbnN0IGNoYXIgKmVuZDsNCj4gDQo+ICAgICAgICAgaWYgKHVubGlrZWx5KCFk ZXZfbmFtZSB8fCAhKmRldl9uYW1lKSkgew0KPiAgICAgICAgICAgICAgICAgZGZwcmludGsoTU9V TlQsICJORlM6IGRldmljZSBuYW1lIG5vdCBzcGVjaWZpZWRcbiIpOw0KPiBAQCAtOTgwLDcgKzc5 OCw3IEBAIHN0YXRpYyBpbnQgbmZzX3BhcnNlX2Rldm5hbWUoc3RydWN0IG5mc19mc19jb250ZXh0 ICpjdHgsDQo+ICAgICAgICAgICAgICAgICBsZW4gPSBlbmQgLSBkZXZfbmFtZTsNCj4gICAgICAg ICAgICAgICAgIGVuZCsrOw0KPiAgICAgICAgIH0gZWxzZSB7DQo+IC0gICAgICAgICAgICAgICBj aGFyICpjb21tYTsNCj4gKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW1hOw0KPiANCj4g ICAgICAgICAgICAgICAgIGVuZCA9IHN0cmNocihkZXZfbmFtZSwgJzonKTsNCj4gICAgICAgICAg ICAgICAgIGlmIChlbmQgPT0gTlVMTCkNCj4gQEAgLTk4OCw4ICs4MDYsOCBAQCBzdGF0aWMgaW50 IG5mc19wYXJzZV9kZXZuYW1lKHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAgICAgICAg ICAgICAgICAgbGVuID0gZW5kIC0gZGV2X25hbWU7DQo+IA0KPiAgICAgICAgICAgICAgICAgLyog a2lsbCBwb3NzaWJsZSBob3N0bmFtZSBsaXN0OiBub3Qgc3VwcG9ydGVkICovDQo+IC0gICAgICAg ICAgICAgICBjb21tYSA9IHN0cmNocihkZXZfbmFtZSwgJywnKTsNCj4gLSAgICAgICAgICAgICAg IGlmIChjb21tYSAhPSBOVUxMICYmIGNvbW1hIDwgZW5kKQ0KPiArICAgICAgICAgICAgICAgY29t bWEgPSBtZW1jaHIoZGV2X25hbWUsICcsJywgbGVuKTsNCj4gKyAgICAgICAgICAgICAgIGlmIChj b21tYSkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gY29tbWEgLSBkZXZfbmFtZTsN Cj4gICAgICAgICB9DQo+IA0KPiBAQCAtMTAxMSwxOSArODI5LDE1IEBAIHN0YXRpYyBpbnQgbmZz X3BhcnNlX2Rldm5hbWUoc3RydWN0IG5mc19mc19jb250ZXh0DQo+ICpjdHgsDQo+ICAgICAgICAg cmV0dXJuIDA7DQo+IA0KPiAgb3V0X2JhZF9kZXZuYW1lOg0KPiAtICAgICAgIGRmcHJpbnRrKE1P VU5ULCAiTkZTOiBkZXZpY2UgbmFtZSBub3QgaW4gaG9zdDpwYXRoIGZvcm1hdFxuIik7DQo+IC0g ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+IC0NCj4gKyAgICAgICByZXR1cm4gbmZzX2ludmFsZihm YywgIk5GUzogZGV2aWNlIG5hbWUgbm90IGluIGhvc3Q6cGF0aCBmb3JtYXQiKTsNCj4gIG91dF9u b21lbToNCj4gLSAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogbm90IGVub3VnaCBtZW1vcnkg dG8gcGFyc2UgZGV2aWNlIG5hbWVcbiIpOw0KPiArICAgICAgIG5mc19lcnJvcmYoZmMsICJORlM6 IG5vdCBlbm91Z2ggbWVtb3J5IHRvIHBhcnNlIGRldmljZSBuYW1lIik7DQo+ICAgICAgICAgcmV0 dXJuIC1FTk9NRU07DQo+IC0NCj4gIG91dF9ob3N0bmFtZToNCj4gLSAgICAgICBkZnByaW50ayhN T1VOVCwgIk5GUzogc2VydmVyIGhvc3RuYW1lIHRvbyBsb25nXG4iKTsNCj4gKyAgICAgICBuZnNf ZXJyb3JmKGZjLCAiTkZTOiBzZXJ2ZXIgaG9zdG5hbWUgdG9vIGxvbmciKTsNCj4gICAgICAgICBy ZXR1cm4gLUVOQU1FVE9PTE9ORzsNCj4gLQ0KPiAgb3V0X3BhdGg6DQo+IC0gICAgICAgZGZwcmlu dGsoTU9VTlQsICJORlM6IGV4cG9ydCBwYXRobmFtZSB0b28gbG9uZ1xuIik7DQo+ICsgICAgICAg bmZzX2Vycm9yZihmYywgIk5GUzogZXhwb3J0IHBhdGhuYW1lIHRvbyBsb25nIik7DQo+ICAgICAg ICAgcmV0dXJuIC1FTkFNRVRPT0xPTkc7DQo+ICB9DQo+IA0KPiBAQCAtMTA0MywxMiArODU3LDEx IEBAIHN0YXRpYyBpbnQgbmZzX3BhcnNlX2Rldm5hbWUoc3RydWN0IG5mc19mc19jb250ZXh0DQo+ ICpjdHgsDQo+ICAgKiArIGJyZWFraW5nIGJhY2s6IHRyeWluZyBwcm90bz11ZHAgYWZ0ZXIgcHJv dG89dGNwLCB2MiBhZnRlciB2MywNCj4gICAqICAgbW91bnRwcm90bz10Y3AgYWZ0ZXIgbW91bnRw cm90bz11ZHAsIGFuZCBzbyBvbg0KPiAgICovDQo+IC1zdGF0aWMgaW50IG5mczIzX3ZhbGlkYXRl X21vdW50X2RhdGEodm9pZCAqb3B0aW9ucywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19maCAqbW50ZmgsDQo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4gK3N0YXRp YyBpbnQgbmZzMjNfcGFyc2VfbW9ub2xpdGhpYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX21vdW50X2RhdGEgKmRh dGEpDQo+ICB7DQo+IC0gICAgICAgc3RydWN0IG5mc19tb3VudF9kYXRhICpkYXRhID0gKHN0cnVj dCBuZnNfbW91bnRfZGF0YSAqKW9wdGlvbnM7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250 ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICsgICAgICAgc3RydWN0IG5mc19maCAq bW50ZmggPSBjdHgtPm1udGZoOw0KPiAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0 cnVjdCBzb2NrYWRkciAqKSZjdHgtPm5mc19zZXJ2ZXIuYWRkcmVzczsNCj4gICAgICAgICBpbnQg ZXh0cmFfZmxhZ3MgPSBORlNfTU9VTlRfTEVHQUNZX0lOVEVSRkFDRTsNCj4gDQo+IEBAIC0xMTIw LDYgKzkzMyw5IEBAIHN0YXRpYyBpbnQgbmZzMjNfdmFsaWRhdGVfbW91bnRfZGF0YSh2b2lkICpv cHRpb25zLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIucHJvdG9j b2wgPSBYUFJUX1RSQU5TUE9SVF9VRFA7DQo+ICAgICAgICAgICAgICAgICAvKiBOLkIuIGNhbGxl ciB3aWxsIGZyZWUgbmZzX3NlcnZlci5ob3N0bmFtZSBpbiBhbGwgY2FzZXMgKi8NCj4gICAgICAg ICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5ob3N0bmFtZSA9IGtzdHJkdXAoZGF0YS0+aG9zdG5h bWUsDQo+IEdGUF9LRVJORUwpOw0KPiArICAgICAgICAgICAgICAgaWYgKCFjdHgtPm5mc19zZXJ2 ZXIuaG9zdG5hbWUpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X25vbWVtOw0K PiArDQo+ICAgICAgICAgICAgICAgICBjdHgtPm5hbWxlbiAgICAgICAgICAgICA9IGRhdGEtPm5h bWxlbjsNCj4gICAgICAgICAgICAgICAgIGN0eC0+YnNpemUgICAgICAgICAgICAgID0gZGF0YS0+ YnNpemU7DQo+IA0KPiBAQCAtMTEyNyw4ICs5NDMsNiBAQCBzdGF0aWMgaW50IG5mczIzX3ZhbGlk YXRlX21vdW50X2RhdGEodm9pZCAqb3B0aW9ucywNCj4gICAgICAgICAgICAgICAgICAgICAgICAg Y3R4LT5zZWxlY3RlZF9mbGF2b3IgPSBkYXRhLT5wc2V1ZG9mbGF2b3I7DQo+ICAgICAgICAgICAg ICAgICBlbHNlDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxhdm9y ID0gUlBDX0FVVEhfVU5JWDsNCj4gLSAgICAgICAgICAgICAgIGlmICghY3R4LT5uZnNfc2VydmVy Lmhvc3RuYW1lKQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9ub21lbTsNCj4g DQo+ICAgICAgICAgICAgICAgICBpZiAoIShkYXRhLT5mbGFncyAmIE5GU19NT1VOVF9OT05MTSkp DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfihORlNfTU9VTlRfTE9D QUxfRkxPQ0t8DQo+IEBAIC0xMTM2LDYgKzk1MCw3IEBAIHN0YXRpYyBpbnQgbmZzMjNfdmFsaWRh dGVfbW91bnRfZGF0YSh2b2lkICpvcHRpb25zLA0KPiAgICAgICAgICAgICAgICAgZWxzZQ0KPiAg ICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmZsYWdzIHw9IChORlNfTU9VTlRfTE9DQUxfRkxP Q0t8DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORlNfTU9VTlRf TE9DQUxfRkNOVEwpOw0KPiArDQo+ICAgICAgICAgICAgICAgICAvKg0KPiAgICAgICAgICAgICAg ICAgICogVGhlIGxlZ2FjeSB2ZXJzaW9uIDYgYmluYXJ5IG1vdW50IGRhdGEgZnJvbSB1c2Vyc3Bh Y2UgaGFzIGENCj4gICAgICAgICAgICAgICAgICAqIGZpZWxkIHVzZWQgb25seSB0byB0cmFuc3Bv cnQgc2VsaW51eCBpbmZvcm1hdGlvbiBpbnRvIHRoZQ0KPiBAQCAtMTE0NiwxMiArOTYxLDEzIEBA IHN0YXRpYyBpbnQgbmZzMjNfdmFsaWRhdGVfbW91bnRfZGF0YSh2b2lkICpvcHRpb25zLA0KPiAg ICAgICAgICAgICAgICAgICovDQo+ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y29udGV4dFsw XSl7DQo+ICAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgNCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgaW50IHJjOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0Ow0KPiAr DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvbnRleHRbTkZTX01BWF9DT05URVhU X0xFTl0gPSAnXDAnOw0KPiAtICAgICAgICAgICAgICAgICAgICAgICByYyA9IHNlY3VyaXR5X2Fk ZF9tbnRfb3B0KCJjb250ZXh0IiwgZGF0YS0+Y29udGV4dCwNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihkYXRhLT5jb250ZXh0KSwgY3R4LT5sc21fb3B0 cyk7DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGlmIChyYykNCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl dCA9IHZmc19wYXJzZV9mc19zdHJpbmcoZmMsICJjb250ZXh0IiwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb250ZXh0LCBzdHJsZW4o ZGF0YS0NCj4gPmNvbnRleHQpKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8 IDApDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gICNl bHNlDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiAgI2VuZGlm DQo+IEBAIC0xMTU5LDUzICs5NzUsNDcgQEAgc3RhdGljIGludCBuZnMyM192YWxpZGF0ZV9tb3Vu dF9kYXRhKHZvaWQgKm9wdGlvbnMsDQo+IA0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAg ICAgICAgZGVmYXVsdDoNCj4gLSAgICAgICAgICAgICAgIHJldHVybiBORlNfVEVYVF9EQVRBOw0K PiArICAgICAgICAgICAgICAgZ290byBnZW5lcmljOw0KPiAgICAgICAgIH0NCj4gDQo+ICsgICAg ICAgY3R4LT5za2lwX3JlY29uZmlnX29wdGlvbl9jaGVjayA9IHRydWU7DQo+ICAgICAgICAgcmV0 dXJuIDA7DQo+IA0KPiArZ2VuZXJpYzoNCj4gKyAgICAgICByZXR1cm4gZ2VuZXJpY19wYXJzZV9t b25vbGl0aGljKGZjLCBkYXRhKTsNCj4gKw0KPiAgb3V0X25vX2RhdGE6DQo+IC0gICAgICAgZGZw cmludGsoTU9VTlQsICJORlM6IG1vdW50IHByb2dyYW0gZGlkbid0IHBhc3MgYW55IG1vdW50IGRh dGFcbiIpOw0KPiAtICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArICAgICAgIGlmIChmYy0+cHVy cG9zZSA9PSBGU19DT05URVhUX0ZPUl9SRUNPTkZJR1VSRSkgew0KPiArICAgICAgICAgICAgICAg Y3R4LT5za2lwX3JlY29uZmlnX29wdGlvbl9jaGVjayA9IHRydWU7DQo+ICsgICAgICAgICAgICAg ICByZXR1cm4gMDsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgcmV0dXJuIG5mc19pbnZhbGYoZmMs ICJORlM6IG1vdW50IHByb2dyYW0gZGlkbid0IHBhc3MgYW55IG1vdW50DQo+IGRhdGEiKTsNCj4g DQo+ICBvdXRfbm9fdjM6DQo+IC0gICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6IG5mc19tb3Vu dF9kYXRhIHZlcnNpb24gJWQgZG9lcyBub3Qgc3VwcG9ydA0KPiB2M1xuIiwNCj4gLSAgICAgICAg ICAgICAgICBkYXRhLT52ZXJzaW9uKTsNCj4gLSAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKyAg ICAgICByZXR1cm4gbmZzX2ludmFsZihmYywgIk5GUzogbmZzX21vdW50X2RhdGEgdmVyc2lvbiBk b2VzIG5vdCBzdXBwb3J0DQo+IHYzIik7DQo+IA0KPiAgb3V0X25vX3NlYzoNCj4gLSAgICAgICBk ZnByaW50ayhNT1VOVCwgIk5GUzogbmZzX21vdW50X2RhdGEgdmVyc2lvbiBzdXBwb3J0cyBvbmx5 DQo+IEFVVEhfU1lTXG4iKTsNCj4gLSAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKyAgICAgICBy ZXR1cm4gbmZzX2ludmFsZihmYywgIk5GUzogbmZzX21vdW50X2RhdGEgdmVyc2lvbiBzdXBwb3J0 cyBvbmx5DQo+IEFVVEhfU1lTIik7DQo+IA0KPiAgb3V0X25vbWVtOg0KPiAtICAgICAgIGRmcHJp bnRrKE1PVU5ULCAiTkZTOiBub3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUgbW91bnQgb3B0aW9u c1xuIik7DQo+ICsgICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6IG5vdCBlbm91Z2ggbWVtb3J5 IHRvIGhhbmRsZSBtb3VudCBvcHRpb25zIik7DQo+ICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ IA0KPiAgb3V0X25vX2FkZHJlc3M6DQo+IC0gICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6IG1v dW50IHByb2dyYW0gZGlkbid0IHBhc3MgcmVtb3RlIGFkZHJlc3NcbiIpOw0KPiAtICAgICAgIHJl dHVybiAtRUlOVkFMOw0KPiArICAgICAgIHJldHVybiBuZnNfaW52YWxmKGZjLCAiTkZTOiBtb3Vu dCBwcm9ncmFtIGRpZG4ndCBwYXNzIHJlbW90ZQ0KPiBhZGRyZXNzIik7DQo+IA0KPiAgb3V0X2lu dmFsaWRfZmg6DQo+IC0gICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6IGludmFsaWQgcm9vdCBm aWxlaGFuZGxlXG4iKTsNCj4gLSAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gLX0NCj4gLQ0KPiAt I2lmIElTX0VOQUJMRUQoQ09ORklHX05GU19WNCkNCj4gLXN0YXRpYyB2b2lkIG5mczRfdmFsaWRh dGVfbW91bnRfZmxhZ3Moc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgpDQo+IC17DQo+IC0gICAg ICAgY3R4LT5mbGFncyAmPSB+KE5GU19NT1VOVF9OT05MTXxORlNfTU9VTlRfTk9BQ0x8TkZTX01P VU5UX1ZFUjN8DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBORlNfTU9VTlRfTE9DQUxfRkxP Q0t8TkZTX01PVU5UX0xPQ0FMX0ZDTlRMKTsNCj4gKyAgICAgICByZXR1cm4gbmZzX2ludmFsZihm YywgIk5GUzogaW52YWxpZCByb290IGZpbGVoYW5kbGUiKTsNCj4gIH0NCj4gDQo+ICAvKg0KPiAg ICogVmFsaWRhdGUgTkZTdjQgbW91bnQgb3B0aW9ucw0KPiAgICovDQo+IC1zdGF0aWMgaW50IG5m czRfdmFsaWRhdGVfbW91bnRfZGF0YSh2b2lkICpvcHRpb25zLA0KPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUpDQo+ICtz dGF0aWMgaW50IG5mczRfcGFyc2VfbW9ub2xpdGhpYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnM0X21vdW50X2RhdGEg KmRhdGEpDQo+ICB7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBuZnNf ZmMyY29udGV4dChmYyk7DQo+ICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzYXAgPSAoc3RydWN0 IHNvY2thZGRyICopJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNzOw0KPiAtICAgICAgIHN0cnVjdCBu ZnM0X21vdW50X2RhdGEgKmRhdGEgPSAoc3RydWN0IG5mczRfbW91bnRfZGF0YSAqKW9wdGlvbnM7 DQo+ICAgICAgICAgY2hhciAqYzsNCj4gDQo+ICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkNCj4g QEAgLTEyNTUsNyArMTA2NSw3IEBAIHN0YXRpYyBpbnQgbmZzNF92YWxpZGF0ZV9tb3VudF9kYXRh KHZvaWQgKm9wdGlvbnMsDQo+ICAgICAgICAgICAgICAgICBjdHgtPmNsaWVudF9hZGRyZXNzID0g YzsNCj4gDQo+ICAgICAgICAgICAgICAgICAvKg0KPiAtICAgICAgICAgICAgICAgICogVHJhbnNs YXRlIHRvIG5mc19mc19jb250ZXh0LCB3aGljaCBuZnM0X2ZpbGxfc3VwZXINCj4gKyAgICAgICAg ICAgICAgICAqIFRyYW5zbGF0ZSB0byBuZnNfZnNfY29udGV4dCwgd2hpY2ggbmZzX2ZpbGxfc3Vw ZXINCj4gICAgICAgICAgICAgICAgICAqIGNhbiBkZWFsIHdpdGguDQo+ICAgICAgICAgICAgICAg ICAgKi8NCj4gDQo+IEBAIC0xMjc1LDEwMSArMTA4NSwzMjUgQEAgc3RhdGljIGludCBuZnM0X3Zh bGlkYXRlX21vdW50X2RhdGEodm9pZCAqb3B0aW9ucywNCj4gDQo+ICAgICAgICAgICAgICAgICBi cmVhazsNCj4gICAgICAgICBkZWZhdWx0Og0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIE5GU19U RVhUX0RBVEE7DQo+ICsgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWM7DQo+ICAgICAgICAgfQ0K PiANCj4gKyAgICAgICBjdHgtPnNraXBfcmVjb25maWdfb3B0aW9uX2NoZWNrID0gdHJ1ZTsNCj4g ICAgICAgICByZXR1cm4gMDsNCj4gDQo+ICtnZW5lcmljOg0KPiArICAgICAgIHJldHVybiBnZW5l cmljX3BhcnNlX21vbm9saXRoaWMoZmMsIGRhdGEpOw0KPiArDQo+ICBvdXRfbm9fZGF0YToNCj4g LSAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzQ6IG1vdW50IHByb2dyYW0gZGlkbid0IHBhc3Mg YW55IG1vdW50IGRhdGFcbiIpOw0KPiAtICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArICAgICAg IGlmIChmYy0+cHVycG9zZSA9PSBGU19DT05URVhUX0ZPUl9SRUNPTkZJR1VSRSkgew0KPiArICAg ICAgICAgICAgICAgY3R4LT5za2lwX3JlY29uZmlnX29wdGlvbl9jaGVjayA9IHRydWU7DQo+ICsg ICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgcmV0dXJuIG5m c19pbnZhbGYoZmMsICJORlM0OiBtb3VudCBwcm9ncmFtIGRpZG4ndCBwYXNzIGFueSBtb3VudA0K PiBkYXRhIik7DQo+IA0KPiAgb3V0X2ludmFsX2F1dGg6DQo+IC0gICAgICAgZGZwcmludGsoTU9V TlQsICJORlM0OiBJbnZhbGlkIG51bWJlciBvZiBSUEMgYXV0aCBmbGF2b3VycyAlZFxuIiwNCj4g LSAgICAgICAgICAgICAgICBkYXRhLT5hdXRoX2ZsYXZvdXJsZW4pOw0KPiAtICAgICAgIHJldHVy biAtRUlOVkFMOw0KPiArICAgICAgIHJldHVybiBuZnNfaW52YWxmKGZjLCAiTkZTNDogSW52YWxp ZCBudW1iZXIgb2YgUlBDIGF1dGggZmxhdm91cnMgJWQiLA0KPiArICAgICAgICAgICAgICAgICAg ICAgZGF0YS0+YXV0aF9mbGF2b3VybGVuKTsNCj4gDQo+ICBvdXRfbm9fYWRkcmVzczoNCj4gLSAg ICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzQ6IG1vdW50IHByb2dyYW0gZGlkbid0IHBhc3MgcmVt b3RlIGFkZHJlc3NcbiIpOw0KPiAtICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArICAgICAgIHJl dHVybiBuZnNfaW52YWxmKGZjLCAiTkZTNDogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyByZW1v dGUNCj4gYWRkcmVzcyIpOw0KPiANCj4gIG91dF9pbnZhbGlkX3RyYW5zcG9ydF91ZHA6DQo+IC0g ICAgICAgZGZwcmludGsoTU9VTlQsICJORlN2NDogVW5zdXBwb3J0ZWQgdHJhbnNwb3J0IHByb3Rv Y29sIHVkcFxuIik7DQo+IC0gICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsgICAgICAgcmV0dXJu IG5mc19pbnZhbGYoZmMsICJORlN2NDogVW5zdXBwb3J0ZWQgdHJhbnNwb3J0IHByb3RvY29sIHVk cCIpOw0KPiAgfQ0KPiANCj4gLWludCBuZnNfdmFsaWRhdGVfbW91bnRfZGF0YShzdHJ1Y3QgZmls ZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKm9wdGlvbnMsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2Zz X2NvbnRleHQgKmN0eCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNf ZmggKm1udGZoLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2 X25hbWUpDQo+IC17DQo+IC0gICAgICAgaWYgKGZzX3R5cGUgPT0gJm5mc19mc190eXBlKQ0KPiAt ICAgICAgICAgICAgICAgcmV0dXJuIG5mczIzX3ZhbGlkYXRlX21vdW50X2RhdGEob3B0aW9ucywg Y3R4LCBtbnRmaCwNCj4gZGV2X25hbWUpOw0KPiAtICAgICAgIHJldHVybiBuZnM0X3ZhbGlkYXRl X21vdW50X2RhdGEob3B0aW9ucywgY3R4LCBkZXZfbmFtZSk7DQo+IC19DQo+IC0jZWxzZQ0KPiAt aW50IG5mc192YWxpZGF0ZV9tb3VudF9kYXRhKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190 eXBlLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0aW9ucywNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19maCAqbW50ZmgsDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4gKy8qDQo+ICsg KiBQYXJzZSBhIG1vbm9saXRoaWMgYmxvY2sgb2YgZGF0YSBmcm9tIHN5c19tb3VudCgpLg0KPiAr ICovDQo+ICtzdGF0aWMgaW50IG5mc19mc19jb250ZXh0X3BhcnNlX21vbm9saXRoaWMoc3RydWN0 IGZzX2NvbnRleHQgKmZjLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqZGF0YSkNCj4gIHsNCj4gLSAgICAgICByZXR1cm4gbmZzMjNfdmFsaWRhdGVf bW91bnRfZGF0YShvcHRpb25zLCBjdHgsIG1udGZoLCBkZXZfbmFtZSk7DQo+IC19DQo+ICsgICAg ICAgaWYgKGZjLT5mc190eXBlID09ICZuZnNfZnNfdHlwZSkNCj4gKyAgICAgICAgICAgICAgIHJl dHVybiBuZnMyM19wYXJzZV9tb25vbGl0aGljKGZjLCBkYXRhKTsNCj4gKw0KPiArI2lmIElTX0VO QUJMRUQoQ09ORklHX05GU19WNCkNCj4gKyAgICAgICBpZiAoZmMtPmZzX3R5cGUgPT0gJm5mczRf ZnNfdHlwZSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBuZnM0X3BhcnNlX21vbm9saXRoaWMo ZmMsIGRhdGEpOw0KPiAgI2VuZGlmDQo+IA0KPiAtaW50IG5mc192YWxpZGF0ZV90ZXh0X21vdW50 X2RhdGEodm9pZCAqb3B0aW9ucywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lKQ0KPiArICAgICAgIHJldHVybiBuZnNfaW52YWxm KGZjLCAiTkZTOiBVbnN1cHBvcnRlZCBtb25vbGl0aGljIGRhdGEgdmVyc2lvbiIpOw0KPiArfQ0K PiArDQo+ICsvKg0KPiArICogVmFsaWRhdGUgdGhlIHByZXBhcnNlZCBpbmZvcm1hdGlvbiBpbiB0 aGUgY29uZmlnLg0KPiArICovDQo+ICtzdGF0aWMgaW50IG5mc19mc19jb250ZXh0X3ZhbGlkYXRl KHN0cnVjdCBmc19jb250ZXh0ICpmYykNCj4gIHsNCj4gLSAgICAgICBpbnQgcG9ydCA9IDA7DQo+ ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7 DQo+ICsgICAgICAgc3RydWN0IG5mc19zdWJ2ZXJzaW9uICpuZnNfbW9kOw0KPiArICAgICAgIHN0 cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZjdHgtPm5mc19zZXJ2ZXIu YWRkcmVzczsNCj4gICAgICAgICBpbnQgbWF4X25hbWVsZW4gPSBQQUdFX1NJWkU7DQo+ICAgICAg ICAgaW50IG1heF9wYXRobGVuID0gTkZTX01BWFBBVEhMRU47DQo+IC0gICAgICAgc3RydWN0IHNv Y2thZGRyICpzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNz Ow0KPiArICAgICAgIGludCBwb3J0ID0gMDsNCj4gKyAgICAgICBpbnQgcmV0Ow0KPiANCj4gLSAg ICAgICBpZiAobmZzX3BhcnNlX21vdW50X29wdGlvbnMoKGNoYXIgKilvcHRpb25zLCBjdHgpID09 IDApDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKyAgICAgICBpZiAoIWZj LT5zb3VyY2UpDQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9ub19kZXZpY2VfbmFtZTsNCj4g Kw0KPiArICAgICAgIC8qIENoZWNrIGZvciBzYW5pdHkgZmlyc3QuICovDQo+ICsgICAgICAgaWYg KGN0eC0+bWlub3J2ZXJzaW9uICYmIGN0eC0+dmVyc2lvbiAhPSA0KQ0KPiArICAgICAgICAgICAg ICAgZ290byBvdXRfbWlub3J2ZXJzaW9uX21pc21hdGNoOw0KPiArDQo+ICsgICAgICAgaWYgKGN0 eC0+b3B0aW9ucyAmIE5GU19PUFRJT05fTUlHUkFUSU9OICYmDQo+ICsgICAgICAgICAgIChjdHgt PnZlcnNpb24gIT0gNCB8fCBjdHgtPm1pbm9ydmVyc2lvbiAhPSAwKSkNCj4gKyAgICAgICAgICAg ICAgIGdvdG8gb3V0X21pZ3JhdGlvbl9taXN1c2U7DQo+ICsNCj4gKyAgICAgICAvKiBWZXJpZnkg dGhhdCBhbnkgcHJvdG89L21vdW50cHJvdG89IG9wdGlvbnMgbWF0Y2ggdGhlIGFkZHJlc3MNCj4g KyAgICAgICAgKiBmYW1pbGllcyBpbiB0aGUgYWRkcj0vbW91bnRhZGRyPSBvcHRpb25zLg0KPiAr ICAgICAgICAqLw0KPiArICAgICAgIGlmIChjdHgtPnByb3RvZmFtaWx5ICE9IEFGX1VOU1BFQyAm Jg0KPiArICAgICAgICAgICBjdHgtPnByb3RvZmFtaWx5ICE9IGN0eC0+bmZzX3NlcnZlci5hZGRy ZXNzLnNhX2ZhbWlseSkNCj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X3Byb3RvX21pc21hdGNo Ow0KPiArDQo+ICsgICAgICAgaWYgKGN0eC0+bW91bnRmYW1pbHkgIT0gQUZfVU5TUEVDKSB7DQo+ ICsgICAgICAgICAgICAgICBpZiAoY3R4LT5tb3VudF9zZXJ2ZXIuYWRkcmxlbikgew0KPiArICAg ICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5tb3VudGZhbWlseSAhPSBjdHgtDQo+ID5tb3Vu dF9zZXJ2ZXIuYWRkcmVzcy5zYV9mYW1pbHkpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBvdXRfbW91bnRwcm90b19taXNtYXRjaDsNCj4gKyAgICAgICAgICAgICAgIH0g ZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPm1vdW50ZmFtaWx5ICE9 IGN0eC0NCj4gPm5mc19zZXJ2ZXIuYWRkcmVzcy5zYV9mYW1pbHkpDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBvdXRfbW91bnRwcm90b19taXNtYXRjaDsNCj4gKyAgICAg ICAgICAgICAgIH0NCj4gKyAgICAgICB9DQo+IA0KPiAgICAgICAgIGlmICghbmZzX3ZlcmlmeV9z ZXJ2ZXJfYWRkcmVzcyhzYXApKQ0KPiAgICAgICAgICAgICAgICAgZ290byBvdXRfbm9fYWRkcmVz czsNCj4gDQo+ICAgICAgICAgaWYgKGN0eC0+dmVyc2lvbiA9PSA0KSB7DQo+IC0jaWYgSVNfRU5B QkxFRChDT05GSUdfTkZTX1Y0KQ0KPiAtICAgICAgICAgICAgICAgaWYgKGN0eC0+bmZzX3NlcnZl ci5wcm90b2NvbCA9PSBYUFJUX1RSQU5TUE9SVF9SRE1BKQ0KPiAtICAgICAgICAgICAgICAgICAg ICAgICBwb3J0ID0gTkZTX1JETUFfUE9SVDsNCj4gLSAgICAgICAgICAgICAgIGVsc2UNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5GU19QT1JUOw0KPiAtICAgICAgICAgICAgICAg bWF4X25hbWVsZW4gPSBORlM0X01BWE5BTUxFTjsNCj4gLSAgICAgICAgICAgICAgIG1heF9wYXRo bGVuID0gTkZTNF9NQVhQQVRITEVOOw0KPiAtICAgICAgICAgICAgICAgbmZzX3ZhbGlkYXRlX3Ry YW5zcG9ydF9wcm90b2NvbChjdHgpOw0KPiAtICAgICAgICAgICAgICAgaWYgKGN0eC0+bmZzX3Nl cnZlci5wcm90b2NvbCA9PSBYUFJUX1RSQU5TUE9SVF9VRFApDQo+IC0gICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gb3V0X2ludmFsaWRfdHJhbnNwb3J0X3VkcDsNCj4gLSAgICAgICAgICAgICAg IG5mczRfdmFsaWRhdGVfbW91bnRfZmxhZ3MoY3R4KTsNCj4gLSNlbHNlDQo+IC0gICAgICAgICAg ICAgICBnb3RvIG91dF92NF9ub3RfY29tcGlsZWQ7DQo+IC0jZW5kaWYgLyogQ09ORklHX05GU19W NCAqLw0KPiArICAgICAgICAgICAgICAgaWYgKElTX0VOQUJMRUQoQ09ORklHX05GU19WNCkpIHsN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCA9 PSBYUFJUX1RSQU5TUE9SVF9SRE1BKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBvcnQgPSBORlNfUkRNQV9QT1JUOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5GU19QT1JUOw0KPiArICAg ICAgICAgICAgICAgICAgICAgICBtYXhfbmFtZWxlbiA9IE5GUzRfTUFYTkFNTEVOOw0KPiArICAg ICAgICAgICAgICAgICAgICAgICBtYXhfcGF0aGxlbiA9IE5GUzRfTUFYUEFUSExFTjsNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgbmZzX3ZhbGlkYXRlX3RyYW5zcG9ydF9wcm90b2NvbChjdHgp Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5uZnNfc2VydmVyLnByb3RvY29s ID09IFhQUlRfVFJBTlNQT1JUX1VEUCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIG91dF9pbnZhbGlkX3RyYW5zcG9ydF91ZHA7DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGN0eC0+ZmxhZ3MgJj0gfihORlNfTU9VTlRfTk9OTE0gfCBORlNfTU9VTlRfTk9BQ0wgfA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZTX01PVU5UX1ZFUjMg fCBORlNfTU9VTlRfTE9DQUxfRkxPQ0sNCj4gfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTkZTX01PVU5UX0xPQ0FMX0ZDTlRMKTsNCj4gKyAgICAgICAgICAgICAg IH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X3Y0X25vdF9jb21w aWxlZDsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gICAgICAgICB9IGVsc2Ugew0KPiAgICAgICAg ICAgICAgICAgbmZzX3NldF9tb3VudF90cmFuc3BvcnRfcHJvdG9jb2woY3R4KTsNCj4gICAgICAg ICAgICAgICAgIGlmIChjdHgtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPT0gWFBSVF9UUkFOU1BPUlRf UkRNQSkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5GU19SRE1BX1BPUlQ7DQo+ ICAgICAgICAgfQ0KPiAtDQo+ICsNCj4gICAgICAgICBuZnNfc2V0X3BvcnQoc2FwLCAmY3R4LT5u ZnNfc2VydmVyLnBvcnQsIHBvcnQpOw0KPiANCj4gLSAgICAgICByZXR1cm4gbmZzX3BhcnNlX2Rl dm5hbWUoY3R4LCBkZXZfbmFtZSwgbWF4X25hbWVsZW4sIG1heF9wYXRobGVuKTsNCj4gKyAgICAg ICByZXQgPSBuZnNfcGFyc2Vfc291cmNlKGZjLCBtYXhfbmFtZWxlbiwgbWF4X3BhdGhsZW4pOw0K PiArICAgICAgIGlmIChyZXQgPCAwKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4g DQo+IC0jaWYgIUlTX0VOQUJMRUQoQ09ORklHX05GU19WNCkNCj4gKyAgICAgICAvKiBMb2FkIHRo ZSBORlMgcHJvdG9jb2wgbW9kdWxlIGlmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQgKi8NCj4gKyAg ICAgICBpZiAoIWN0eC0+bmZzX21vZCkgew0KPiArICAgICAgICAgICAgICAgbmZzX21vZCA9IGdl dF9uZnNfdmVyc2lvbihjdHgtPnZlcnNpb24pOw0KPiArICAgICAgICAgICAgICAgaWYgKElTX0VS UihuZnNfbW9kKSkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKG5m c19tb2QpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF92ZXJzaW9uX3VuYXZh aWxhYmxlOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArICAgICAgICAgICAgICAgY3R4LT5uZnNf bW9kID0gbmZzX21vZDsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICsNCj4g K291dF9ub19kZXZpY2VfbmFtZToNCj4gKyAgICAgICByZXR1cm4gbmZzX2ludmFsZihmYywgIk5G UzogRGV2aWNlIG5hbWUgbm90IHNwZWNpZmllZCIpOw0KPiAgb3V0X3Y0X25vdF9jb21waWxlZDoN Cj4gLSAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogTkZTdjQgaXMgbm90IGNvbXBpbGVkIGlu dG8ga2VybmVsXG4iKTsNCj4gKyAgICAgICBuZnNfZXJyb3JmKGZjLCAiTkZTOiBORlN2NCBpcyBu b3QgY29tcGlsZWQgaW50byBrZXJuZWwiKTsNCj4gICAgICAgICByZXR1cm4gLUVQUk9UT05PU1VQ UE9SVDsNCj4gLSNlbHNlDQo+ICBvdXRfaW52YWxpZF90cmFuc3BvcnRfdWRwOg0KPiAtICAgICAg IGRmcHJpbnRrKE1PVU5ULCAiTkZTdjQ6IFVuc3VwcG9ydGVkIHRyYW5zcG9ydCBwcm90b2NvbCB1 ZHBcbiIpOw0KPiAtICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiAtI2VuZGlmIC8qICFDT05GSUdf TkZTX1Y0ICovDQo+IC0NCj4gKyAgICAgICByZXR1cm4gbmZzX2ludmFsZihmYywgIk5GU3Y0OiBV bnN1cHBvcnRlZCB0cmFuc3BvcnQgcHJvdG9jb2wgdWRwIik7DQo+ICBvdXRfbm9fYWRkcmVzczoN Cj4gLSAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFz cyByZW1vdGUgYWRkcmVzc1xuIik7DQo+IC0gICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsgICAg ICAgcmV0dXJuIG5mc19pbnZhbGYoZmMsICJORlM6IG1vdW50IHByb2dyYW0gZGlkbid0IHBhc3Mg cmVtb3RlDQo+IGFkZHJlc3MiKTsNCj4gK291dF9tb3VudHByb3RvX21pc21hdGNoOg0KPiArICAg ICAgIHJldHVybiBuZnNfaW52YWxmKGZjLCAiTkZTOiBNb3VudCBzZXJ2ZXIgYWRkcmVzcyBkb2Vz IG5vdCBtYXRjaA0KPiBtb3VudHByb3RvPSBvcHRpb24iKTsNCj4gK291dF9wcm90b19taXNtYXRj aDoNCj4gKyAgICAgICByZXR1cm4gbmZzX2ludmFsZihmYywgIk5GUzogU2VydmVyIGFkZHJlc3Mg ZG9lcyBub3QgbWF0Y2ggcHJvdG89DQo+IG9wdGlvbiIpOw0KPiArb3V0X21pbm9ydmVyc2lvbl9t aXNtYXRjaDoNCj4gKyAgICAgICByZXR1cm4gbmZzX2ludmFsZihmYywgIk5GUzogTW91bnQgb3B0 aW9uIHZlcnM9JXUgZG9lcyBub3Qgc3VwcG9ydA0KPiBtaW5vcnZlcnNpb249JXUiLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dmVyc2lvbiwgY3R4LT5taW5vcnZlcnNpb24pOw0K PiArb3V0X21pZ3JhdGlvbl9taXN1c2U6DQo+ICsgICAgICAgcmV0dXJuIG5mc19pbnZhbGYoZmMs ICJORlM6ICdNaWdyYXRpb24nIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgTkZTDQo+IHZlcnNpb24i KTsNCj4gK291dF92ZXJzaW9uX3VuYXZhaWxhYmxlOg0KPiArICAgICAgIG5mc19lcnJvcmYoZmMs ICJORlM6IFZlcnNpb24gdW5hdmFpbGFibGUiKTsNCj4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiAr fQ0KPiArDQo+ICsvKg0KPiArICogQ3JlYXRlIGFuIE5GUyBzdXBlcmJsb2NrIGJ5IHRoZSBhcHBy b3ByaWF0ZSBtZXRob2QuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgbmZzX2dldF90cmVlKHN0cnVj dCBmc19jb250ZXh0ICpmYykNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQg KmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4gKyAgICAgICBpbnQgZXJyID0gbmZzX2ZzX2Nv bnRleHRfdmFsaWRhdGUoZmMpOw0KPiArDQo+ICsgICAgICAgaWYgKGVycikNCj4gKyAgICAgICAg ICAgICAgIHJldHVybiBlcnI7DQo+ICsgICAgICAgaWYgKCFjdHgtPmludGVybmFsKQ0KPiArICAg ICAgICAgICAgICAgcmV0dXJuIGN0eC0+bmZzX21vZC0+cnBjX29wcy0+dHJ5X2dldF90cmVlKGZj KTsNCj4gKyAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gbmZzX2dldF90cmVl X2NvbW1vbihmYyk7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBIYW5kbGUgZHVwbGljYXRpb24g b2YgYSBjb25maWd1cmF0aW9uLiAgVGhlIGNhbGxlciBjb3BpZWQgKnNyYyBpbnRvICpzYywNCj4g YnV0DQo+ICsgKiBpdCBjYW4ndCBkZWFsIHdpdGggcmVzb3VyY2UgcG9pbnRlcnMgaW4gdGhlIGZp bGVzeXN0ZW0gY29udGV4dCwgc28gd2UgaGF2ZQ0KPiArICogdG8gZG8gdGhhdC4gIFdlIG5lZWQg dG8gY2xlYXIgcG9pbnRlcnMsIGNvcHkgZGF0YSBvciBnZXQgZXh0cmEgcmVmcyBhcw0KPiArICog YXBwcm9wcmlhdGUuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgbmZzX2ZzX2NvbnRleHRfZHVwKHN0 cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX2NvbnRleHQNCj4gKnNyY19mYykNCj4gK3sN Cj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKnNyYyA9IG5mc19mYzJjb250ZXh0KHNy Y19mYyksICpjdHg7DQo+ICsNCj4gKyAgICAgICBjdHggPSBrbWVtZHVwKHNyYywgc2l6ZW9mKHN0 cnVjdCBuZnNfZnNfY29udGV4dCksIEdGUF9LRVJORUwpOw0KPiArICAgICAgIGlmICghY3R4KQ0K PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKyAgICAgICBjdHgtPm1u dGZoID0gbmZzX2FsbG9jX2ZoYW5kbGUoKTsNCj4gKyAgICAgICBpZiAoIWN0eC0+bW50ZmgpIHsN Cj4gKyAgICAgICAgICAgICAgIGtmcmVlKGN0eCk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4g LUVOT01FTTsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgbmZzX2NvcHlfZmgoY3R4LT5tbnRmaCwg c3JjLT5tbnRmaCk7DQo+ICsNCj4gKyAgICAgICBfX21vZHVsZV9nZXQoY3R4LT5uZnNfbW9kLT5v d25lcik7DQo+ICsgICAgICAgY3R4LT5jbGllbnRfYWRkcmVzcyAgICAgICAgICAgICA9IE5VTEw7 DQo+ICsgICAgICAgY3R4LT5tb3VudF9zZXJ2ZXIuaG9zdG5hbWUgICAgICA9IE5VTEw7DQo+ICsg ICAgICAgY3R4LT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoICAgICA9IE5VTEw7DQo+ICsgICAgICAg Y3R4LT5uZnNfc2VydmVyLmhvc3RuYW1lICAgICAgICA9IE5VTEw7DQo+ICsgICAgICAgY3R4LT5m c2NhY2hlX3VuaXEgICAgICAgICAgICAgICA9IE5VTEw7DQo+ICsgICAgICAgZmMtPmZzX3ByaXZh dGUgPSBjdHg7DQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICB9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IG5mc19mc19jb250ZXh0X2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiArew0KPiArICAg ICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiAr DQo+ICsgICAgICAgaWYgKGN0eCkgew0KPiArICAgICAgICAgICAgICAgaWYgKGN0eC0+c2VydmVy KQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBuZnNfZnJlZV9zZXJ2ZXIoY3R4LT5zZXJ2ZXIp Ow0KPiArICAgICAgICAgICAgICAgaWYgKGN0eC0+bmZzX21vZCkNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcHV0X25mc192ZXJzaW9uKGN0eC0+bmZzX21vZCk7DQo+ICsgICAgICAgICAgICAg ICBrZnJlZShjdHgtPmNsaWVudF9hZGRyZXNzKTsNCj4gKyAgICAgICAgICAgICAgIGtmcmVlKGN0 eC0+bW91bnRfc2VydmVyLmhvc3RuYW1lKTsNCj4gKyAgICAgICAgICAgICAgIGtmcmVlKGN0eC0+ bmZzX3NlcnZlci5leHBvcnRfcGF0aCk7DQo+ICsgICAgICAgICAgICAgICBrZnJlZShjdHgtPm5m c19zZXJ2ZXIuaG9zdG5hbWUpOw0KPiArICAgICAgICAgICAgICAga2ZyZWUoY3R4LT5mc2NhY2hl X3VuaXEpOw0KPiArICAgICAgICAgICAgICAgbmZzX2ZyZWVfZmhhbmRsZShjdHgtPm1udGZoKTsN Cj4gKyAgICAgICAgICAgICAgIGtmcmVlKGN0eCk7DQo+ICsgICAgICAgfQ0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBuZnNfZnNfY29udGV4 dF9vcHMgPSB7DQo+ICsgICAgICAgLmZyZWUgICAgICAgICAgICAgICAgICAgPSBuZnNfZnNfY29u dGV4dF9mcmVlLA0KPiArICAgICAgIC5kdXAgICAgICAgICAgICAgICAgICAgID0gbmZzX2ZzX2Nv bnRleHRfZHVwLA0KPiArICAgICAgIC5wYXJzZV9wYXJhbSAgICAgICAgICAgID0gbmZzX2ZzX2Nv bnRleHRfcGFyc2VfcGFyYW0sDQo+ICsgICAgICAgLnBhcnNlX21vbm9saXRoaWMgICAgICAgPSBu ZnNfZnNfY29udGV4dF9wYXJzZV9tb25vbGl0aGljLA0KPiArICAgICAgIC5nZXRfdHJlZSAgICAg ICAgICAgICAgID0gbmZzX2dldF90cmVlLA0KPiArICAgICAgIC5yZWNvbmZpZ3VyZSAgICAgICAg ICAgID0gbmZzX3JlY29uZmlndXJlLA0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIFByZXBhcmUg c3VwZXJibG9jayBjb25maWd1cmF0aW9uLiAgV2UgdXNlIHRoZSBuYW1lc3BhY2VzIGF0dGFjaGVk IHRvIHRoZQ0KPiArICogY29udGV4dC4gIFRoaXMgbWF5IGJlIHRoZSBjdXJyZW50IHByb2Nlc3Mn cyBuYW1lc3BhY2VzLCBvciBpdCBtYXkgYmUgYQ0KPiArICogY29udGFpbmVyJ3MgbmFtZXNwYWNl cy4NCj4gKyAqLw0KPiArc3RhdGljIGludCBuZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19j b250ZXh0ICpmYykNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eDsN Cj4gKw0KPiArICAgICAgIGN0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZnNfZnNfY29udGV4 dCksIEdGUF9LRVJORUwpOw0KPiArICAgICAgIGlmICh1bmxpa2VseSghY3R4KSkNCj4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsgICAgICAgY3R4LT5tbnRmaCA9IG5m c19hbGxvY19maGFuZGxlKCk7DQo+ICsgICAgICAgaWYgKHVubGlrZWx5KCFjdHgtPm1udGZoKSkg ew0KPiArICAgICAgICAgICAgICAga2ZyZWUoY3R4KTsNCj4gKyAgICAgICAgICAgICAgIHJldHVy biAtRU5PTUVNOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGN0eC0+cHJvdG9mYW1pbHkg ICAgICAgID0gQUZfVU5TUEVDOw0KPiArICAgICAgIGN0eC0+bW91bnRmYW1pbHkgICAgICAgID0g QUZfVU5TUEVDOw0KPiArICAgICAgIGN0eC0+bW91bnRfc2VydmVyLnBvcnQgID0gTkZTX1VOU1BF Q19QT1JUOw0KPiArDQo+ICsgICAgICAgaWYgKGZjLT5yb290KSB7DQo+ICsgICAgICAgICAgICAg ICAvKiByZWNvbmZpZ3VyZSwgc3RhcnQgd2l0aCB0aGUgY3VycmVudCBjb25maWcgKi8NCj4gKyAg ICAgICAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gZmMtPnJvb3QtPmRfc2ItPnNf ZnNfaW5mbzsNCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBuZXQgKm5ldCA9IG5mc3MtPm5mc19j bGllbnQtPmNsX25ldDsNCj4gKw0KPiArICAgICAgICAgICAgICAgY3R4LT5mbGFncyAgICAgICAg ICAgICAgPSBuZnNzLT5mbGFnczsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+cnNpemUgICAgICAg ICAgICAgID0gbmZzcy0+cnNpemU7DQo+ICsgICAgICAgICAgICAgICBjdHgtPndzaXplICAgICAg ICAgICAgICA9IG5mc3MtPndzaXplOw0KPiArICAgICAgICAgICAgICAgY3R4LT5yZXRyYW5zICAg ICAgICAgICAgPSBuZnNzLT5jbGllbnQtPmNsX3RpbWVvdXQtDQo+ID50b19yZXRyaWVzOw0KPiAr ICAgICAgICAgICAgICAgY3R4LT5zZWxlY3RlZF9mbGF2b3IgICAgPSBuZnNzLT5jbGllbnQtPmNs X2F1dGgtPmF1X2ZsYXZvcjsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+YWNyZWdtaW4gICAgICAg ICAgID0gbmZzcy0+YWNyZWdtaW4gLyBIWjsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+YWNyZWdt YXggICAgICAgICAgID0gbmZzcy0+YWNyZWdtYXggLyBIWjsNCj4gKyAgICAgICAgICAgICAgIGN0 eC0+YWNkaXJtaW4gICAgICAgICAgID0gbmZzcy0+YWNkaXJtaW4gLyBIWjsNCj4gKyAgICAgICAg ICAgICAgIGN0eC0+YWNkaXJtYXggICAgICAgICAgID0gbmZzcy0+YWNkaXJtYXggLyBIWjsNCj4g KyAgICAgICAgICAgICAgIGN0eC0+dGltZW8gICAgICAgICAgICAgID0gMTBVICogbmZzcy0+Y2xp ZW50LT5jbF90aW1lb3V0LQ0KPiA+dG9faW5pdHZhbCAvIEhaOw0KPiArICAgICAgICAgICAgICAg Y3R4LT5uZnNfc2VydmVyLnBvcnQgICAgPSBuZnNzLT5wb3J0Ow0KPiArICAgICAgICAgICAgICAg Y3R4LT5uZnNfc2VydmVyLmFkZHJsZW4gPSBuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRybGVuOw0K PiArICAgICAgICAgICAgICAgY3R4LT52ZXJzaW9uICAgICAgICAgICAgPSBuZnNzLT5uZnNfY2xp ZW50LT5ycGNfb3BzLT52ZXJzaW9uOw0KPiArICAgICAgICAgICAgICAgY3R4LT5taW5vcnZlcnNp b24gICAgICAgPSBuZnNzLT5uZnNfY2xpZW50LT5jbF9taW5vcnZlcnNpb247DQo+ICsNCj4gKyAg ICAgICAgICAgICAgIG1lbWNweSgmY3R4LT5uZnNfc2VydmVyLmFkZHJlc3MsICZuZnNzLT5uZnNf Y2xpZW50LT5jbF9hZGRyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2 ZXIuYWRkcmxlbik7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGlmIChmYy0+bmV0X25zICE9IG5l dCkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBwdXRfbmV0KGZjLT5uZXRfbnMpOw0KPiAr ICAgICAgICAgICAgICAgICAgICAgICBmYy0+bmV0X25zID0gZ2V0X25ldChuZXQpOw0KPiArICAg ICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICBjdHgtPm5mc19tb2QgPSBuZnNz LT5uZnNfY2xpZW50LT5jbF9uZnNfbW9kOw0KPiArICAgICAgICAgICAgICAgX19tb2R1bGVfZ2V0 KGN0eC0+bmZzX21vZC0+b3duZXIpOw0KPiArICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAg ICAgICAvKiBkZWZhdWx0cyAqLw0KPiArICAgICAgICAgICAgICAgY3R4LT50aW1lbyAgICAgICAg ICAgICAgPSBORlNfVU5TUEVDX1RJTUVPOw0KPiArICAgICAgICAgICAgICAgY3R4LT5yZXRyYW5z ICAgICAgICAgICAgPSBORlNfVU5TUEVDX1JFVFJBTlM7DQo+ICsgICAgICAgICAgICAgICBjdHgt PmFjcmVnbWluICAgICAgICAgICA9IE5GU19ERUZfQUNSRUdNSU47DQo+ICsgICAgICAgICAgICAg ICBjdHgtPmFjcmVnbWF4ICAgICAgICAgICA9IE5GU19ERUZfQUNSRUdNQVg7DQo+ICsgICAgICAg ICAgICAgICBjdHgtPmFjZGlybWluICAgICAgICAgICA9IE5GU19ERUZfQUNESVJNSU47DQo+ICsg ICAgICAgICAgICAgICBjdHgtPmFjZGlybWF4ICAgICAgICAgICA9IE5GU19ERUZfQUNESVJNQVg7 DQo+ICsgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIucG9ydCAgICA9IE5GU19VTlNQRUNf UE9SVDsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQUlRf VFJBTlNQT1JUX1RDUDsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxhdm9yICAg ID0gUlBDX0FVVEhfTUFYRkxBVk9SOw0KPiArICAgICAgICAgICAgICAgY3R4LT5taW5vcnZlcnNp b24gICAgICAgPSAwOw0KPiArICAgICAgICAgICAgICAgY3R4LT5uZWVkX21vdW50ICAgICAgICAg PSB0cnVlOw0KPiArICAgICAgIH0NCj4gKyAgICAgICBmYy0+ZnNfcHJpdmF0ZSA9IGN0eDsNCj4g KyAgICAgICBmYy0+b3BzID0gJm5mc19mc19jb250ZXh0X29wczsNCj4gKyAgICAgICByZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzX2ZzX3R5cGUgPSB7 DQo+ICsgICAgICAgLm93bmVyICAgICAgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwNCj4gKyAg ICAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9ICJuZnMiLA0KPiArICAgICAgIC5pbml0X2Zz X2NvbnRleHQgICAgICAgID0gbmZzX2luaXRfZnNfY29udGV4dCwNCj4gKyAgICAgICAucGFyYW1l dGVycyAgICAgICAgICAgICA9ICZuZnNfZnNfcGFyYW1ldGVycywNCj4gKyAgICAgICAua2lsbF9z YiAgICAgICAgICAgICAgICA9IG5mc19raWxsX3N1cGVyLA0KPiArICAgICAgIC5mc19mbGFncyAg ICAgICAgICAgICAgID0gRlNfUkVOQU1FX0RPRVNfRF9NT1ZFfEZTX0JJTkFSWV9NT1VOVERBVEEs DQo+ICt9Ow0KPiArTU9EVUxFX0FMSUFTX0ZTKCJuZnMiKTsNCj4gK0VYUE9SVF9TWU1CT0xfR1BM KG5mc19mc190eXBlKTsNCj4gKw0KPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX05GU19WNCkNCj4g K3N0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG5mczRfZnNfdHlwZSA9IHsNCj4gKyAgICAgICAub3du ZXIgICAgICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLA0KPiArICAgICAgIC5uYW1lICAgICAg ICAgICAgICAgICAgID0gIm5mczQiLA0KPiArICAgICAgIC5pbml0X2ZzX2NvbnRleHQgICAgICAg ID0gbmZzX2luaXRfZnNfY29udGV4dCwNCj4gKyAgICAgICAucGFyYW1ldGVycyAgICAgICAgICAg ICA9ICZuZnNfZnNfcGFyYW1ldGVycywNCj4gKyAgICAgICAua2lsbF9zYiAgICAgICAgICAgICAg ICA9IG5mc19raWxsX3N1cGVyLA0KPiArICAgICAgIC5mc19mbGFncyAgICAgICAgICAgICAgID0g RlNfUkVOQU1FX0RPRVNfRF9NT1ZFfEZTX0JJTkFSWV9NT1VOVERBVEEsDQo+ICt9Ow0KPiArTU9E VUxFX0FMSUFTX0ZTKCJuZnM0Iik7DQo+ICtNT0RVTEVfQUxJQVMoIm5mczQiKTsNCj4gK0VYUE9S VF9TWU1CT0xfR1BMKG5mczRfZnNfdHlwZSk7DQo+ICsjZW5kaWYgLyogQ09ORklHX05GU19WNCAq Lw0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZzY2FjaGUuYyBiL2ZzL25mcy9mc2NhY2hlLmMNCj4g aW5kZXggNGRjODg3ODEzYzcxLi44ODA2Y2FjZmY2ZWMgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9m c2NhY2hlLmMNCj4gKysrIGIvZnMvbmZzL2ZzY2FjaGUuYw0KPiBAQCAtMTI4LDcgKzEyOCw3IEBA IHZvaWQgbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi LA0KPiBjb25zdCBjaGFyICp1bmlxLCBpbnQNCj4gICAgICAgICAgICAgICAgIHJldHVybjsNCj4g DQo+ICAgICAgICAga2V5LT5uZnNfY2xpZW50ID0gbmZzcy0+bmZzX2NsaWVudDsNCj4gLSAgICAg ICBrZXktPmtleS5zdXBlci5zX2ZsYWdzID0gc2ItPnNfZmxhZ3MgJiBORlNfTVNfTUFTSzsNCj4g KyAgICAgICBrZXktPmtleS5zdXBlci5zX2ZsYWdzID0gc2ItPnNfZmxhZ3MgJiBORlNfU0JfTUFT SzsNCj4gICAgICAgICBrZXktPmtleS5uZnNfc2VydmVyLmZsYWdzID0gbmZzcy0+ZmxhZ3M7DQo+ ICAgICAgICAga2V5LT5rZXkubmZzX3NlcnZlci5yc2l6ZSA9IG5mc3MtPnJzaXplOw0KPiAgICAg ICAgIGtleS0+a2V5Lm5mc19zZXJ2ZXIud3NpemUgPSBuZnNzLT53c2l6ZTsNCj4gZGlmZiAtLWdp dCBhL2ZzL25mcy9nZXRyb290LmMgYi9mcy9uZnMvZ2V0cm9vdC5jDQo+IGluZGV4IDM5MWRhZmFm OTE4Mi4uZDk3M2ZlMDY2OWU5IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvZ2V0cm9vdC5jDQo+ICsr KyBiL2ZzL25mcy9nZXRyb290LmMNCj4gQEAgLTY4LDY2ICs2OCw3MSBAQCBzdGF0aWMgaW50IG5m c19zdXBlcmJsb2NrX3NldF9kdW1teV9yb290KHN0cnVjdA0KPiBzdXBlcl9ibG9jayAqc2IsIHN0 cnVjdCBpbm9kZSAqaQ0KPiAgLyoNCj4gICAqIGdldCBhbiBORlMyL05GUzMgcm9vdCBkZW50cnkg ZnJvbSB0aGUgcm9vdCBmaWxlaGFuZGxlDQo+ICAgKi8NCj4gLXN0cnVjdCBkZW50cnkgKm5mc19n ZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbmZzX2ZoICptbnRmaCwNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUpDQo+ICtpbnQg bmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZj KQ0KPiAgew0KPiAtICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Ioc2Ip Ow0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQo ZmMpOw0KPiArICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Iocyk7DQo+ ICAgICAgICAgc3RydWN0IG5mc19mc2luZm8gZnNpbmZvOw0KPiAtICAgICAgIHN0cnVjdCBkZW50 cnkgKnJldDsNCj4gKyAgICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290Ow0KPiAgICAgICAgIHN0cnVj dCBpbm9kZSAqaW5vZGU7DQo+IC0gICAgICAgdm9pZCAqbmFtZSA9IGtzdHJkdXAoZGV2bmFtZSwg R0ZQX0tFUk5FTCk7DQo+IC0gICAgICAgaW50IGVycm9yOw0KPiArICAgICAgIGNoYXIgKm5hbWU7 DQo+ICsgICAgICAgaW50IGVycm9yID0gLUVOT01FTTsNCj4gDQo+ICsgICAgICAgbmFtZSA9IGtz dHJkdXAoZmMtPnNvdXJjZSwgR0ZQX0tFUk5FTCk7DQo+ICAgICAgICAgaWYgKCFuYW1lKQ0KPiAt ICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ICsgICAgICAgICAgICAg ICBnb3RvIG91dDsNCj4gDQo+ICAgICAgICAgLyogZ2V0IHRoZSBhY3R1YWwgcm9vdCBmb3IgdGhp cyBtb3VudCAqLw0KPiAgICAgICAgIGZzaW5mby5mYXR0ciA9IG5mc19hbGxvY19mYXR0cigpOw0K PiAtICAgICAgIGlmIChmc2luZm8uZmF0dHIgPT0gTlVMTCkgew0KPiAtICAgICAgICAgICAgICAg a2ZyZWUobmFtZSk7DQo+IC0gICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsN Cj4gLSAgICAgICB9DQo+ICsgICAgICAgaWYgKGZzaW5mby5mYXR0ciA9PSBOVUxMKQ0KPiArICAg ICAgICAgICAgICAgZ290byBvdXRfbmFtZTsNCj4gDQo+IC0gICAgICAgZXJyb3IgPSBzZXJ2ZXIt Pm5mc19jbGllbnQtPnJwY19vcHMtPmdldHJvb3Qoc2VydmVyLCBtbnRmaCwgJmZzaW5mbyk7DQo+ ICsgICAgICAgZXJyb3IgPSBzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPmdldHJvb3Qoc2Vy dmVyLCBjdHgtPm1udGZoLA0KPiAmZnNpbmZvKTsNCj4gICAgICAgICBpZiAoZXJyb3IgPCAwKSB7 DQo+ICAgICAgICAgICAgICAgICBkcHJpbnRrKCJuZnNfZ2V0X3Jvb3Q6IGdldGF0dHIgZXJyb3Ig PSAlZFxuIiwgLWVycm9yKTsNCj4gLSAgICAgICAgICAgICAgIHJldCA9IEVSUl9QVFIoZXJyb3Ip Ow0KPiAtICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ICsgICAgICAgICAgICAgICBuZnNfZXJy b3JmKGZjLCAiTkZTOiBDb3VsZG4ndCBnZXRhdHRyIG9uIHJvb3QiKTsNCj4gKyAgICAgICAgICAg ICAgIGdvdG8gb3V0X2ZhdHRyOw0KPiAgICAgICAgIH0NCj4gDQo+IC0gICAgICAgaW5vZGUgPSBu ZnNfZmhnZXQoc2IsIG1udGZoLCBmc2luZm8uZmF0dHIsIE5VTEwpOw0KPiArICAgICAgIGlub2Rl ID0gbmZzX2ZoZ2V0KHMsIGN0eC0+bW50ZmgsIGZzaW5mby5mYXR0ciwgTlVMTCk7DQo+ICAgICAg ICAgaWYgKElTX0VSUihpbm9kZSkpIHsNCj4gICAgICAgICAgICAgICAgIGRwcmludGsoIm5mc19n ZXRfcm9vdDogZ2V0IHJvb3QgaW5vZGUgZmFpbGVkXG4iKTsNCj4gLSAgICAgICAgICAgICAgIHJl dCA9IEVSUl9DQVNUKGlub2RlKTsNCj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiArICAg ICAgICAgICAgICAgZXJyb3IgPSBQVFJfRVJSKGlub2RlKTsNCj4gKyAgICAgICAgICAgICAgIG5m c19lcnJvcmYoZmMsICJORlM6IENvdWxkbid0IGdldCByb290IGlub2RlIik7DQo+ICsgICAgICAg ICAgICAgICBnb3RvIG91dF9mYXR0cjsNCj4gICAgICAgICB9DQo+IA0KPiAtICAgICAgIGVycm9y ID0gbmZzX3N1cGVyYmxvY2tfc2V0X2R1bW15X3Jvb3Qoc2IsIGlub2RlKTsNCj4gLSAgICAgICBp ZiAoZXJyb3IgIT0gMCkgew0KPiAtICAgICAgICAgICAgICAgcmV0ID0gRVJSX1BUUihlcnJvcik7 DQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gLSAgICAgICB9DQo+ICsgICAgICAgZXJy b3IgPSBuZnNfc3VwZXJibG9ja19zZXRfZHVtbXlfcm9vdChzLCBpbm9kZSk7DQo+ICsgICAgICAg aWYgKGVycm9yICE9IDApDQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9mYXR0cjsNCj4gDQo+ ICAgICAgICAgLyogcm9vdCBkZW50cmllcyBub3JtYWxseSBzdGFydCBvZmYgYW5vbnltb3VzIGFu ZCBnZXQgc3BsaWNlZCBpbiBsYXRlcg0KPiAgICAgICAgICAqIGlmIHRoZSBkZW50cnkgdHJlZSBy ZWFjaGVzIHRoZW07IGhvd2V2ZXIgaWYgdGhlIGRlbnRyeSBhbHJlYWR5DQo+ICAgICAgICAgICog ZXhpc3RzLCB3ZSdsbCBwaWNrIGl0IHVwIGF0IHRoaXMgcG9pbnQgYW5kIHVzZSBpdCBhcyB0aGUg cm9vdA0KPiAgICAgICAgICAqLw0KPiAtICAgICAgIHJldCA9IGRfb2J0YWluX3Jvb3QoaW5vZGUp Ow0KPiAtICAgICAgIGlmIChJU19FUlIocmV0KSkgew0KPiArICAgICAgIHJvb3QgPSBkX29idGFp bl9yb290KGlub2RlKTsNCj4gKyAgICAgICBpZiAoSVNfRVJSKHJvb3QpKSB7DQo+ICAgICAgICAg ICAgICAgICBkcHJpbnRrKCJuZnNfZ2V0X3Jvb3Q6IGdldCByb290IGRlbnRyeSBmYWlsZWRcbiIp Ow0KPiAtICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ICsgICAgICAgICAgICAgICBlcnJvciA9 IFBUUl9FUlIocm9vdCk7DQo+ICsgICAgICAgICAgICAgICBuZnNfZXJyb3JmKGZjLCAiTkZTOiBD b3VsZG4ndCBnZXQgcm9vdCBkZW50cnkiKTsNCj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X2Zh dHRyOw0KPiAgICAgICAgIH0NCj4gDQo+IC0gICAgICAgc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShy ZXQsIGlub2RlKTsNCj4gLSAgICAgICBzcGluX2xvY2soJnJldC0+ZF9sb2NrKTsNCj4gLSAgICAg ICBpZiAoSVNfUk9PVChyZXQpICYmICFyZXQtPmRfZnNkYXRhICYmDQo+IC0gICAgICAgICAgICEo cmV0LT5kX2ZsYWdzICYgRENBQ0hFX05GU0ZTX1JFTkFNRUQpKSB7DQo+IC0gICAgICAgICAgICAg ICByZXQtPmRfZnNkYXRhID0gbmFtZTsNCj4gKyAgICAgICBzZWN1cml0eV9kX2luc3RhbnRpYXRl KHJvb3QsIGlub2RlKTsNCj4gKyAgICAgICBzcGluX2xvY2soJnJvb3QtPmRfbG9jayk7DQo+ICsg ICAgICAgaWYgKElTX1JPT1Qocm9vdCkgJiYgIXJvb3QtPmRfZnNkYXRhICYmDQo+ICsgICAgICAg ICAgICEocm9vdC0+ZF9mbGFncyAmIERDQUNIRV9ORlNGU19SRU5BTUVEKSkgew0KPiArICAgICAg ICAgICAgICAgcm9vdC0+ZF9mc2RhdGEgPSBuYW1lOw0KPiAgICAgICAgICAgICAgICAgbmFtZSA9 IE5VTEw7DQo+ICAgICAgICAgfQ0KPiAtICAgICAgIHNwaW5fdW5sb2NrKCZyZXQtPmRfbG9jayk7 DQo+IC1vdXQ6DQo+IC0gICAgICAga2ZyZWUobmFtZSk7DQo+ICsgICAgICAgc3Bpbl91bmxvY2so JnJvb3QtPmRfbG9jayk7DQo+ICsgICAgICAgZmMtPnJvb3QgPSByb290Ow0KPiArICAgICAgIGVy cm9yID0gMDsNCj4gKw0KPiArb3V0X2ZhdHRyOg0KPiAgICAgICAgIG5mc19mcmVlX2ZhdHRyKGZz aW5mby5mYXR0cik7DQo+IC0gICAgICAgcmV0dXJuIHJldDsNCj4gK291dF9uYW1lOg0KPiArICAg ICAgIGtmcmVlKG5hbWUpOw0KPiArb3V0Og0KPiArICAgICAgIHJldHVybiBlcnJvcjsNCj4gIH0N Cj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgNCj4g aW5kZXggNDgxZjM3MGFiMDUzLi5kYTA4OGY1NjExZjAgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9p bnRlcm5hbC5oDQo+ICsrKyBiL2ZzL25mcy9pbnRlcm5hbC5oDQo+IEBAIC00LDE4ICs0LDE5IEBA DQo+ICAgKi8NCj4gDQo+ICAjaW5jbHVkZSAibmZzNF9mcy5oIg0KPiAtI2luY2x1ZGUgPGxpbnV4 L21vdW50Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZnNfY29udGV4dC5oPg0KPiAgI2luY2x1ZGUg PGxpbnV4L3NlY3VyaXR5Lmg+DQo+ICAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4NCj4gICNpbmNs dWRlIDxsaW51eC9zdW5ycGMvYWRkci5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L25mc19wYWdlLmg+ DQo+ICAjaW5jbHVkZSA8bGludXgvd2FpdF9iaXQuaD4NCj4gDQo+IC0jZGVmaW5lIE5GU19NU19N QVNLIChTQl9SRE9OTFl8U0JfTk9TVUlEfFNCX05PREVWfFNCX05PRVhFQ3xTQl9TWU5DSFJPTk9V UykNCj4gKyNkZWZpbmUgTkZTX1NCX01BU0sgKFNCX1JET05MWXxTQl9OT1NVSUR8U0JfTk9ERVZ8 U0JfTk9FWEVDfFNCX1NZTkNIUk9OT1VTKQ0KPiANCj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhw b3J0X29wZXJhdGlvbnMgbmZzX2V4cG9ydF9vcHM7DQo+IA0KPiAgc3RydWN0IG5mc19zdHJpbmc7 DQo+ICtzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yOw0KPiANCj4gIC8qIE1heGltdW0gbnVt YmVyIG9mIHJlYWRhaGVhZCByZXF1ZXN0cw0KPiAgICogRklYTUU6IHRoaXMgc2hvdWxkIHJlYWxs eSBiZSBhIHN5c2N0bCBzbyB0aGF0IHVzZXJzIG1heSB0dW5lIGl0IHRvIHN1aXQNCj4gQEAgLTQw LDE2ICs0MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG5mc19hdHRyX3VzZV9tb3VudGVkX29uX2Zp bGVpZChzdHJ1Y3QNCj4gbmZzX2ZhdHRyICpmYXR0cikNCj4gICAgICAgICByZXR1cm4gMTsNCj4g IH0NCj4gDQo+IC1zdHJ1Y3QgbmZzX2Nsb25lX21vdW50IHsNCj4gLSAgICAgICBjb25zdCBzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnNiOw0KPiAtICAgICAgIGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRy eTsNCj4gLSAgICAgICBjaGFyICpob3N0bmFtZTsNCj4gLSAgICAgICBjaGFyICptbnRfcGF0aDsN Cj4gLSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7DQo+IC0gICAgICAgc2l6ZV90IGFkZHJs ZW47DQo+IC0gICAgICAgcnBjX2F1dGhmbGF2b3JfdCBhdXRoZmxhdm9yOw0KPiAtfTsNCj4gLQ0K PiAgLyoNCj4gICAqIE5vdGU6IFJGQyAxODEzIGRvZXNuJ3QgbGltaXQgdGhlIG51bWJlciBvZiBh dXRoIGZsYXZvcnMgdGhhdA0KPiAgICogYSBzZXJ2ZXIgY2FuIHJldHVybiwgc28gbWFrZSBzb21l dGhpbmcgdXAuDQo+IEBAIC05MCw2ICs4MSwxMCBAQCBzdHJ1Y3QgbmZzX2NsaWVudF9pbml0ZGF0 YSB7DQo+ICAgKiBJbi1rZXJuZWwgbW91bnQgYXJndW1lbnRzDQo+ICAgKi8NCj4gIHN0cnVjdCBu ZnNfZnNfY29udGV4dCB7DQo+ICsgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgaW50ZXJu YWw7DQo+ICsgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgc2tpcF9yZWNvbmZpZ19vcHRp b25fY2hlY2s7DQo+ICsgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgbmVlZF9tb3VudDsN Cj4gKyAgICAgICBib29sICAgICAgICAgICAgICAgICAgICBzbG9wcHk7DQo+ICAgICAgICAgdW5z aWduZWQgaW50ICAgICAgICAgICAgZmxhZ3M7ICAgICAgICAgIC8qIE5GU3ssNH1fTU9VTlRfKiBm bGFncyAqLw0KPiAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHJzaXplLCB3c2l6ZTsN Cj4gICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB0aW1lbywgcmV0cmFuczsNCj4gQEAg LTEwNiw4ICsxMDEsNiBAQCBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgew0KPiAgICAgICAgIGNoYXIg ICAgICAgICAgICAgICAgICAgICpmc2NhY2hlX3VuaXE7DQo+ICAgICAgICAgdW5zaWduZWQgc2hv cnQgICAgICAgICAgcHJvdG9mYW1pbHk7DQo+ICAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAg ICAgbW91bnRmYW1pbHk7DQo+IC0gICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgbmVlZF9t b3VudDsNCj4gLSAgICAgICBib29sICAgICAgICAgICAgICAgICAgICBzbG9wcHk7DQo+IA0KPiAg ICAgICAgIHN0cnVjdCB7DQo+ICAgICAgICAgICAgICAgICB1bmlvbiB7DQo+IEBAIC0xMzEsMTQg KzEyNCwzMSBAQCBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgew0KPiAgICAgICAgICAgICAgICAgY2hh ciAgICAgICAgICAgICAgICAgICAgKmV4cG9ydF9wYXRoOw0KPiAgICAgICAgICAgICAgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgcG9ydDsNCj4gICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo b3J0ICAgICAgICAgIHByb3RvY29sOw0KPiArICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg ICAgICAgICAgZXhwb3J0X3BhdGhfbGVuOw0KPiAgICAgICAgIH0gbmZzX3NlcnZlcjsNCj4gDQo+ IC0gICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKmxzbV9vcHRzOw0KPiAtICAgICAgIHN0 cnVjdCBuZXQgICAgICAgICAgICAgICpuZXQ7DQo+IC0NCj4gLSAgICAgICBjaGFyICAgICAgICAg ICAgICAgICAgICBidWZbMzJdOyAgICAgICAgLyogUGFyc2UgYnVmZmVyICovDQo+ICsgICAgICAg c3RydWN0IG5mc19maCAgICAgICAgICAgKm1udGZoOw0KPiArICAgICAgIHN0cnVjdCBuZnNfc2Vy dmVyICAgICAgICpzZXJ2ZXI7DQo+ICsgICAgICAgc3RydWN0IG5mc19zdWJ2ZXJzaW9uICAgKm5m c19tb2Q7DQo+ICsNCj4gKyAgICAgICAvKiBJbmZvcm1hdGlvbiBmb3IgYSBjbG9uZWQgbW91bnQu ICovDQo+ICsgICAgICAgc3RydWN0IG5mc19jbG9uZV9tb3VudCB7DQo+ICsgICAgICAgICAgICAg ICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgICAgICAqc2I7DQo+ICsgICAgICAgICAgICAgICBzdHJ1Y3Qg ZGVudHJ5ICAgICAgICAgICAqZGVudHJ5Ow0KPiArICAgICAgICAgICAgICAgc3RydWN0IG5mc19m YXR0ciAgICAgICAgKmZhdHRyOw0KPiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAg ICAgICAgaW5oZXJpdGVkX2JzaXplOw0KPiArICAgICAgIH0gY2xvbmVfZGF0YTsNCj4gIH07DQo+ IA0KPiArI2RlZmluZSBuZnNfZXJyb3JmKGZjLCBmbXQsIC4uLikgZXJyb3JmKGZjLCBmbXQsICMj IF9fVkFfQVJHU19fKQ0KPiArI2RlZmluZSBuZnNfaW52YWxmKGZjLCBmbXQsIC4uLikgaW52YWxm KGZjLCBmbXQsICMjIF9fVkFfQVJHU19fKQ0KPiArI2RlZmluZSBuZnNfd2FybmYoZmMsIGZtdCwg Li4uKSB3YXJuZihmYywgZm10LCAjIyBfX1ZBX0FSR1NfXykNCj4gKw0KPiArc3RhdGljIGlubGlu ZSBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKm5mc19mYzJjb250ZXh0KGNvbnN0IHN0cnVjdCBmc19j b250ZXh0DQo+ICpmYykNCj4gK3sNCj4gKyAgICAgICByZXR1cm4gZmMtPmZzX3ByaXZhdGU7DQo+ ICt9DQo+ICsNCj4gIC8qIG1vdW50X2NsbnQuYyAqLw0KPiAgc3RydWN0IG5mc19tb3VudF9yZXF1 ZXN0IHsNCj4gICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgICAgICAqc2FwOw0KPiBAQCAtMTU0 LDE1ICsxNjQsNiBAQCBzdHJ1Y3QgbmZzX21vdW50X3JlcXVlc3Qgew0KPiAgICAgICAgIHN0cnVj dCBuZXQgICAgICAgICAgICAgICpuZXQ7DQo+ICB9Ow0KPiANCj4gLXN0cnVjdCBuZnNfbW91bnRf aW5mbyB7DQo+IC0gICAgICAgdW5zaWduZWQgaW50IGluaGVyaXRlZF9ic2l6ZTsNCj4gLSAgICAg ICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eDsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX2Nsb25l X21vdW50ICpjbG9uZWQ7DQo+IC0gICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsNCj4g LSAgICAgICBzdHJ1Y3QgbmZzX2ZoICptbnRmaDsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX3N1YnZl cnNpb24gKm5mc19tb2Q7DQo+IC19Ow0KPiAtDQo+ICBleHRlcm4gaW50IG5mc19tb3VudChzdHJ1 Y3QgbmZzX21vdW50X3JlcXVlc3QgKmluZm8pOw0KPiAgZXh0ZXJuIHZvaWQgbmZzX3Vtb3VudChj b25zdCBzdHJ1Y3QgbmZzX21vdW50X3JlcXVlc3QgKmluZm8pOw0KPiANCj4gQEAgLTE4OCwxMCAr MTg5LDkgQEAgZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICpuZnM0X2ZpbmRfY2xpZW50X2lkZW50 KHN0cnVjdA0KPiBuZXQgKiwgaW50KTsNCj4gIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqDQo+ ICBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBz b2NrYWRkciAqLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnM0 X3Nlc3Npb25pZCAqLCB1MzIpOw0KPiAtZXh0ZXJuIHN0cnVjdCBuZnNfc2VydmVyICpuZnNfY3Jl YXRlX3NlcnZlcihzdHJ1Y3QgbmZzX21vdW50X2luZm8gKik7DQo+IC1leHRlcm4gc3RydWN0IG5m c19zZXJ2ZXIgKm5mczRfY3JlYXRlX3NlcnZlcihzdHJ1Y3QgbmZzX21vdW50X2luZm8gKik7DQo+ IC1leHRlcm4gc3RydWN0IG5mc19zZXJ2ZXIgKm5mczRfY3JlYXRlX3JlZmVycmFsX3NlcnZlcihz dHJ1Y3QgbmZzX2Nsb25lX21vdW50DQo+ICosDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZmggKik7DQo+ICtleHRlcm4g c3RydWN0IG5mc19zZXJ2ZXIgKm5mc19jcmVhdGVfc2VydmVyKHN0cnVjdCBmc19jb250ZXh0ICop Ow0KPiArZXh0ZXJuIHN0cnVjdCBuZnNfc2VydmVyICpuZnM0X2NyZWF0ZV9zZXJ2ZXIoc3RydWN0 IGZzX2NvbnRleHQgKik7DQo+ICtleHRlcm4gc3RydWN0IG5mc19zZXJ2ZXIgKm5mczRfY3JlYXRl X3JlZmVycmFsX3NlcnZlcihzdHJ1Y3QgZnNfY29udGV4dCAqKTsNCj4gIGV4dGVybiBpbnQgbmZz NF91cGRhdGVfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIGNvbnN0IGNoYXINCj4g Kmhvc3RuYW1lLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNvY2thZGRyICpzYXAsIHNpemVfdCBzYWxlbiwNCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXQgKm5ldCk7DQo+IEBAIC0yNDIsMjIgKzI0Miw4 IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNfcHJvY19leGl0KHZvaWQpDQo+ICBleHRlcm4g Y29uc3Qgc3RydWN0IHN2Y192ZXJzaW9uIG5mczRfY2FsbGJhY2tfdmVyc2lvbjE7DQo+ICBleHRl cm4gY29uc3Qgc3RydWN0IHN2Y192ZXJzaW9uIG5mczRfY2FsbGJhY2tfdmVyc2lvbjQ7DQo+IA0K PiAtc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvcjsNCj4gLQ0KPiAtLyogbW91bnQuYyAqLw0K PiAtI2RlZmluZSBORlNfVEVYVF9EQVRBICAgICAgICAgIDENCj4gLQ0KPiAtZXh0ZXJuIHN0cnVj dCBuZnNfZnNfY29udGV4dCAqbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKHZvaWQpOw0KPiAt ZXh0ZXJuIHZvaWQgbmZzX2ZyZWVfcGFyc2VkX21vdW50X2RhdGEoc3RydWN0IG5mc19mc19jb250 ZXh0ICpjdHgpOw0KPiAtZXh0ZXJuIGludCBuZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpy YXcsIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4KTsNCj4gLWV4dGVybiBpbnQgbmZzX3ZhbGlk YXRlX21vdW50X2RhdGEoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0aW9ucywNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCwNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICptbnRmaCwN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZfbmFt ZSk7DQo+IC1leHRlcm4gaW50IG5mc192YWxpZGF0ZV90ZXh0X21vdW50X2RhdGEodm9pZCAqb3B0 aW9ucywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBu ZnNfZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUpOw0KPiArLyogZnNfY29udGV4dC5jICovDQo+ICtl eHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzX2ZzX3R5cGU7DQo+IA0KPiAgLyogcGFn ZWxpc3QuYyAqLw0KPiAgZXh0ZXJuIGludCBfX2luaXQgbmZzX2luaXRfbmZzcGFnZWNhY2hlKHZv aWQpOw0KPiBAQCAtNDE4LDE0ICs0MDQsOSBAQCBleHRlcm4gaW50IG5mc193YWl0X2F0b21pY19r aWxsYWJsZShhdG9taWNfdCAqcCwgdW5zaWduZWQNCj4gaW50IG1vZGUpOw0KPiANCj4gIC8qIHN1 cGVyLmMgKi8NCj4gIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuZnNfc29w czsNCj4gLWV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnNfZnNfdHlwZTsNCj4gLWV4 dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnNfcHJlcGFyZWRfZnNfdHlwZTsNCj4gLSNp ZiBJU19FTkFCTEVEKENPTkZJR19ORlNfVjQpDQo+IC1leHRlcm4gc3RydWN0IGZpbGVfc3lzdGVt X3R5cGUgbmZzNF9yZWZlcnJhbF9mc190eXBlOw0KPiAtI2VuZGlmDQo+ICBib29sIG5mc19hdXRo X2luZm9fbWF0Y2goY29uc3Qgc3RydWN0IG5mc19hdXRoX2luZm8gKiwgcnBjX2F1dGhmbGF2b3Jf dCk7DQo+IC1zdHJ1Y3QgZGVudHJ5ICpuZnNfdHJ5X21vdW50KGludCwgY29uc3QgY2hhciAqLCBz dHJ1Y3QgbmZzX21vdW50X2luZm8gKik7DQo+IC1zdHJ1Y3QgZGVudHJ5ICpuZnNfZnNfbW91bnQo c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiwgaW50LCBjb25zdCBjaGFyICosDQo+IHZvaWQgKik7 DQo+ICtpbnQgbmZzX3RyeV9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqKTsNCj4gK2ludCBu ZnNfZ2V0X3RyZWVfY29tbW9uKHN0cnVjdCBmc19jb250ZXh0ICopOw0KPiAgdm9pZCBuZnNfa2ls bF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7DQo+IA0KPiAgZXh0ZXJuIHN0cnVjdCBycGNf c3RhdCBuZnNfcnBjc3RhdDsNCj4gQEAgLTQ1MywxOCArNDM0LDEzIEBAIHN0YXRpYyBpbmxpbmUg Ym9vbCBuZnNfZmlsZV9pb19pc19idWZmZXJlZChzdHJ1Y3QNCj4gbmZzX2lub2RlICpuZnNpKQ0K PiAgZXh0ZXJuIGNoYXIgKm5mc19wYXRoKGNoYXIgKipwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnks DQo+ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNzaXplX3QgYnVmbGVuLCB1 bnNpZ25lZCBmbGFncyk7DQo+ICBleHRlcm4gc3RydWN0IHZmc21vdW50ICpuZnNfZF9hdXRvbW91 bnQoc3RydWN0IHBhdGggKnBhdGgpOw0KPiAtc3RydWN0IHZmc21vdW50ICpuZnNfc3VibW91bnQo c3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IGRlbnRyeSAqLA0KPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZmF0dHIgKik7DQo+IC1z dHJ1Y3QgdmZzbW91bnQgKm5mc19kb19zdWJtb3VudChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBu ZnNfZmggKiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19m YXR0ciAqLCBycGNfYXV0aGZsYXZvcl90KTsNCj4gK2ludCBuZnNfc3VibW91bnQoc3RydWN0IGZz X2NvbnRleHQgKiwgc3RydWN0IG5mc19zZXJ2ZXIgKik7DQo+ICtpbnQgbmZzX2RvX3N1Ym1vdW50 KHN0cnVjdCBmc19jb250ZXh0ICopOw0KPiANCj4gIC8qIGdldHJvb3QuYyAqLw0KPiAtZXh0ZXJu IHN0cnVjdCBkZW50cnkgKm5mc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0 IG5mc19maCAqLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKik7DQo+ICtleHRlcm4gaW50IG5mc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMs IHN0cnVjdCBmc19jb250ZXh0ICpmYyk7DQo+ICAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0 KQ0KPiAtZXh0ZXJuIHN0cnVjdCBkZW50cnkgKm5mczRfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Js b2NrICosIHN0cnVjdCBuZnNfZmggKiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqKTsNCj4gLQ0KPiArZXh0ZXJuIGludCBuZnM0X2dldF9yb290KHN0 cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmNmZyk7DQo+ICBleHRlcm4g aW50IG5mczRfZ2V0X3Jvb3RmaChzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZz X2ZoICptbnRmaCwNCj4gYm9vbCk7DQo+ICAjZW5kaWYNCj4gDQo+IEBAIC00ODMsNyArNDU5LDcg QEAgaW50ICBuZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5 ICopOw0KPiAgaW50ICBuZnNfc2hvd19kZXZuYW1lKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3Qg ZGVudHJ5ICopOw0KPiAgaW50ICBuZnNfc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1 Y3QgZGVudHJ5ICopOw0KPiAgaW50ICBuZnNfc2hvd19zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKiwg c3RydWN0IGRlbnRyeSAqKTsNCj4gLWludCBuZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiLCBpbnQgKmZsYWdzLCBjaGFyICpyYXdfZGF0YSk7DQo+ICtpbnQgIG5mc19yZWNvbmZpZ3Vy ZShzdHJ1Y3QgZnNfY29udGV4dCAqKTsNCj4gDQo+ICAvKiB3cml0ZS5jICovDQo+ICBleHRlcm4g dm9pZCBuZnNfcGFnZWlvX2luaXRfd3JpdGUoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAq cGdpbywNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uYW1lc3BhY2UuYyBiL2ZzL25mcy9uYW1lc3Bh Y2UuYw0KPiBpbmRleCAxYzRjYjg5MTRiMjAuLjY2YWJhMzllM2YyNyAxMDA2NDQNCj4gLS0tIGEv ZnMvbmZzL25hbWVzcGFjZS5jDQo+ICsrKyBiL2ZzL25mcy9uYW1lc3BhY2UuYw0KPiBAQCAtMTM5 LDMxICsxMzksNjIgQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZzX3BhdGgpOw0KPiAgICovDQo+ICBz dHJ1Y3QgdmZzbW91bnQgKm5mc19kX2F1dG9tb3VudChzdHJ1Y3QgcGF0aCAqcGF0aCkNCj4gIHsN Cj4gLSAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udDsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2Zz X2NvbnRleHQgKmN0eDsNCj4gKyAgICAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmM7DQo+ICsgICAg ICAgc3RydWN0IHZmc21vdW50ICptbnQgPSBFUlJfUFRSKC1FTk9NRU0pOw0KPiAgICAgICAgIHN0 cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGRfaW5vZGUocGF0aC0+ZGVudHJ5 KSk7DQo+IC0gICAgICAgc3RydWN0IG5mc19maCAqZmggPSBOVUxMOw0KPiAtICAgICAgIHN0cnVj dCBuZnNfZmF0dHIgKmZhdHRyID0gTlVMTDsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2NsaWVudCAq Y2xpZW50ID0gc2VydmVyLT5uZnNfY2xpZW50Ow0KPiArICAgICAgIGludCByZXQ7DQo+IA0KPiAg ICAgICAgIGlmIChJU19ST09UKHBhdGgtPmRlbnRyeSkpDQo+ICAgICAgICAgICAgICAgICByZXR1 cm4gRVJSX1BUUigtRVNUQUxFKTsNCj4gDQo+IC0gICAgICAgbW50ID0gRVJSX1BUUigtRU5PTUVN KTsNCj4gLSAgICAgICBmaCA9IG5mc19hbGxvY19maGFuZGxlKCk7DQo+IC0gICAgICAgZmF0dHIg PSBuZnNfYWxsb2NfZmF0dHIoKTsNCj4gLSAgICAgICBpZiAoZmggPT0gTlVMTCB8fCBmYXR0ciA9 PSBOVUxMKQ0KPiAtICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ICsgICAgICAgLyogT3BlbiBh IG5ldyBmaWxlc3lzdGVtIGNvbnRleHQsIHRyYW5zZmVycmluZyBwYXJhbWV0ZXJzIGZyb20gdGhl DQo+ICsgICAgICAgICogcGFyZW50IHN1cGVyYmxvY2ssIGluY2x1ZGluZyB0aGUgbmV0d29yayBu YW1lc3BhY2UuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgZmMgPSBmc19jb250ZXh0X2Zvcl9z dWJtb3VudCgmbmZzX2ZzX3R5cGUsIHBhdGgtPmRlbnRyeSk7DQo+ICsgICAgICAgaWYgKElTX0VS UihmYykpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX0NBU1QoZmMpOw0KPiANCj4gLSAg ICAgICBtbnQgPSBzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPnN1Ym1vdW50KHNlcnZlciwg cGF0aC0+ZGVudHJ5LCBmaCwNCj4gZmF0dHIpOw0KPiArICAgICAgIGN0eCA9IG5mc19mYzJjb250 ZXh0KGZjKTsNCj4gKyAgICAgICBjdHgtPmNsb25lX2RhdGEuZGVudHJ5ICA9IHBhdGgtPmRlbnRy eTsNCj4gKyAgICAgICBjdHgtPmNsb25lX2RhdGEuc2IgICAgICA9IHBhdGgtPmRlbnRyeS0+ZF9z YjsNCj4gKyAgICAgICBjdHgtPmNsb25lX2RhdGEuZmF0dHIgICA9IG5mc19hbGxvY19mYXR0cigp Ow0KPiArICAgICAgIGlmICghY3R4LT5jbG9uZV9kYXRhLmZhdHRyKQ0KPiArICAgICAgICAgICAg ICAgZ290byBvdXRfZmM7DQo+ICsNCj4gKyAgICAgICBpZiAoZmMtPm5ldF9ucyAhPSBjbGllbnQt PmNsX25ldCkgew0KPiArICAgICAgICAgICAgICAgcHV0X25ldChmYy0+bmV0X25zKTsNCj4gKyAg ICAgICAgICAgICAgIGZjLT5uZXRfbnMgPSBnZXRfbmV0KGNsaWVudC0+Y2xfbmV0KTsNCj4gKyAg ICAgICB9DQo+ICsNCj4gKyAgICAgICAvKiBmb3Igc3VibW91bnRzIHdlIHdhbnQgdGhlIHNhbWUg c2VydmVyOyByZWZlcnJhbHMgd2lsbCByZWFzc2lnbiAqLw0KPiArICAgICAgIG1lbWNweSgmY3R4 LT5uZnNfc2VydmVyLmFkZHJlc3MsICZjbGllbnQtPmNsX2FkZHIsIGNsaWVudC0NCj4gPmNsX2Fk ZHJsZW4pOw0KPiArICAgICAgIGN0eC0+bmZzX3NlcnZlci5hZGRybGVuID0gY2xpZW50LT5jbF9h ZGRybGVuOw0KPiArICAgICAgIGN0eC0+bmZzX3NlcnZlci5wb3J0ICAgID0gc2VydmVyLT5wb3J0 Ow0KPiArDQo+ICsgICAgICAgY3R4LT52ZXJzaW9uICAgICAgICAgICAgPSBjbGllbnQtPnJwY19v cHMtPnZlcnNpb247DQo+ICsgICAgICAgY3R4LT5taW5vcnZlcnNpb24gICAgICAgPSBjbGllbnQt PmNsX21pbm9ydmVyc2lvbjsNCj4gKyAgICAgICBjdHgtPm5mc19tb2QgICAgICAgICAgICA9IGNs aWVudC0+Y2xfbmZzX21vZDsNCj4gKyAgICAgICBfX21vZHVsZV9nZXQoY3R4LT5uZnNfbW9kLT5v d25lcik7DQo+ICsNCj4gKyAgICAgICByZXQgPSBjbGllbnQtPnJwY19vcHMtPnN1Ym1vdW50KGZj LCBzZXJ2ZXIpOw0KPiArICAgICAgIGlmIChyZXQgPCAwKSB7DQo+ICsgICAgICAgICAgICAgICBt bnQgPSBFUlJfUFRSKHJldCk7DQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9mYzsNCj4gKyAg ICAgICB9DQo+ICsNCj4gKyAgICAgICB1cF93cml0ZSgmZmMtPnJvb3QtPmRfc2ItPnNfdW1vdW50 KTsNCj4gKyAgICAgICBtbnQgPSB2ZnNfY3JlYXRlX21vdW50KGZjKTsNCj4gICAgICAgICBpZiAo SVNfRVJSKG1udCkpDQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gKyAgICAgICAgICAg ICAgIGdvdG8gb3V0X2ZjOw0KPiANCj4gICAgICAgICBtbnRnZXQobW50KTsgLyogcHJldmVudCBp bW1lZGlhdGUgZXhwaXJhdGlvbiAqLw0KPiAgICAgICAgIG1udF9zZXRfZXhwaXJ5KG1udCwgJm5m c19hdXRvbW91bnRfbGlzdCk7DQo+ICAgICAgICAgc2NoZWR1bGVfZGVsYXllZF93b3JrKCZuZnNf YXV0b21vdW50X3Rhc2ssDQo+IG5mc19tb3VudHBvaW50X2V4cGlyeV90aW1lb3V0KTsNCj4gDQo+ IC1vdXQ6DQo+IC0gICAgICAgbmZzX2ZyZWVfZmF0dHIoZmF0dHIpOw0KPiAtICAgICAgIG5mc19m cmVlX2ZoYW5kbGUoZmgpOw0KPiArb3V0X2ZjOg0KPiArICAgICAgIHB1dF9mc19jb250ZXh0KGZj KTsNCj4gICAgICAgICByZXR1cm4gbW50Ow0KPiAgfQ0KPiANCj4gQEAgLTIxOCw2MSArMjQ5LDYy IEBAIHZvaWQgbmZzX3JlbGVhc2VfYXV0b21vdW50X3RpbWVyKHZvaWQpDQo+ICAgKiBAYXV0aGZs YXZvcjogc2VjdXJpdHkgZmxhdm9yIHRvIHVzZSB3aGVuIHBlcmZvcm1pbmcgdGhlIG1vdW50DQo+ ICAgKg0KPiAgICovDQo+IC1zdHJ1Y3QgdmZzbW91bnQgKm5mc19kb19zdWJtb3VudChzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuZnNfZmggKmZoLA0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0ciwgcnBjX2F1dGhmbGF2b3JfdA0K PiBhdXRoZmxhdm9yKQ0KPiAraW50IG5mc19kb19zdWJtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAq ZmMpDQo+ICB7DQo+IC0gICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9z YjsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX2Nsb25lX21vdW50IG1vdW50ZGF0YSA9IHsNCj4gLSAg ICAgICAgICAgICAgIC5zYiA9IHNiLA0KPiAtICAgICAgICAgICAgICAgLmRlbnRyeSA9IGRlbnRy eSwNCj4gLSAgICAgICAgICAgICAgIC5hdXRoZmxhdm9yID0gYXV0aGZsYXZvciwNCj4gLSAgICAg ICB9Ow0KPiAtICAgICAgIHN0cnVjdCBuZnNfbW91bnRfaW5mbyBtb3VudF9pbmZvID0gew0KPiAt ICAgICAgICAgICAgICAgLmluaGVyaXRlZF9ic2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzLA0K PiAtICAgICAgICAgICAgICAgLmNsb25lZCA9ICZtb3VudGRhdGEsDQo+IC0gICAgICAgICAgICAg ICAubW50ZmggPSBmaCwNCj4gLSAgICAgICAgICAgICAgIC5uZnNfbW9kID0gTkZTX1NCKHNiKS0+ bmZzX2NsaWVudC0+Y2xfbmZzX21vZCwNCj4gLSAgICAgICB9Ow0KPiArICAgICAgIHN0cnVjdCBu ZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiArICAgICAgIHN0cnVj dCBkZW50cnkgKmRlbnRyeSA9IGN0eC0+Y2xvbmVfZGF0YS5kZW50cnk7DQo+ICAgICAgICAgc3Ry dWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsNCj4gLSAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udDsN Cj4gLSAgICAgICBjaGFyICpwYWdlID0gKGNoYXIgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9VU0VS KTsNCj4gLSAgICAgICBjaGFyICpkZXZuYW1lOw0KPiArICAgICAgIGNoYXIgKmJ1ZmZlciwgKnA7 DQo+ICsgICAgICAgaW50IHJldDsNCj4gDQo+IC0gICAgICAgaWYgKHBhZ2UgPT0gTlVMTCkNCj4g LSAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiArICAgICAgIC8qIGNy ZWF0ZSBhIG5ldyB2b2x1bWUgcmVwcmVzZW50YXRpb24gKi8NCj4gKyAgICAgICBzZXJ2ZXIgPSBj dHgtPm5mc19tb2QtPnJwY19vcHMtPmNsb25lX3NlcnZlcihORlNfU0IoY3R4LQ0KPiA+Y2xvbmVf ZGF0YS5zYiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3R4LT5tbnRmaCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjdHgtPmNsb25lX2RhdGEuZmF0dHIsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zZWxlY3RlZF9m bGF2b3IpOw0KPiANCj4gLSAgICAgICBzZXJ2ZXIgPSBtb3VudF9pbmZvLm5mc19tb2QtPnJwY19v cHMtPmNsb25lX3NlcnZlcihORlNfU0Ioc2IpLCBmaCwNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXR0ciwgYXV0aGZsYXZvcik7 DQo+ICAgICAgICAgaWYgKElTX0VSUihzZXJ2ZXIpKQ0KPiAtICAgICAgICAgICAgICAgcmV0dXJu IEVSUl9DQVNUKHNlcnZlcik7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihzZXJ2 ZXIpOw0KPiANCj4gLSAgICAgICBtb3VudF9pbmZvLnNlcnZlciA9IHNlcnZlcjsNCj4gKyAgICAg ICBjdHgtPnNlcnZlciA9IHNlcnZlcjsNCj4gDQo+IC0gICAgICAgZGV2bmFtZSA9IG5mc19kZXZu YW1lKGRlbnRyeSwgcGFnZSwgUEFHRV9TSVpFKTsNCj4gLSAgICAgICBpZiAoSVNfRVJSKGRldm5h bWUpKQ0KPiAtICAgICAgICAgICAgICAgbW50ID0gRVJSX0NBU1QoZGV2bmFtZSk7DQo+IC0gICAg ICAgZWxzZQ0KPiAtICAgICAgICAgICAgICAgbW50ID0gdmZzX3N1Ym1vdW50KGRlbnRyeSwgJm5m c19wcmVwYXJlZF9mc190eXBlLCBkZXZuYW1lLA0KPiAmbW91bnRfaW5mbyk7DQo+ICsgICAgICAg YnVmZmVyID0ga21hbGxvYyg0MDk2LCBHRlBfVVNFUik7DQo+ICsgICAgICAgaWYgKCFidWZmZXIp DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gDQo+IC0gICAgICAgaWYgKG1v dW50X2luZm8uc2VydmVyKQ0KPiAtICAgICAgICAgICAgICAgbmZzX2ZyZWVfc2VydmVyKG1vdW50 X2luZm8uc2VydmVyKTsNCj4gLSAgICAgICBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7 DQo+IC0gICAgICAgcmV0dXJuIG1udDsNCj4gKyAgICAgICBjdHgtPmludGVybmFsICAgICAgICAg ICA9IHRydWU7DQo+ICsgICAgICAgY3R4LT5jbG9uZV9kYXRhLmluaGVyaXRlZF9ic2l6ZSA9IGN0 eC0+Y2xvbmVfZGF0YS5zYi0NCj4gPnNfYmxvY2tzaXplX2JpdHM7DQo+ICsNCj4gKyAgICAgICBw ID0gbmZzX2Rldm5hbWUoZGVudHJ5LCBidWZmZXIsIDQwOTYpOw0KPiArICAgICAgIGlmIChJU19F UlIocCkpIHsNCj4gKyAgICAgICAgICAgICAgIG5mc19lcnJvcmYoZmMsICJORlM6IENvdWxkbid0 IGRldGVybWluZSBzdWJtb3VudCBwYXRobmFtZSIpOw0KPiArICAgICAgICAgICAgICAgcmV0ID0g UFRSX0VSUihwKTsNCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgcmV0ID0g dmZzX3BhcnNlX2ZzX3N0cmluZyhmYywgInNvdXJjZSIsIHAsIGJ1ZmZlciArIDQwOTYgLSBwKTsN Cj4gKyAgICAgICAgICAgICAgIGlmICghcmV0KQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXQgPSB2ZnNfZ2V0X3RyZWUoZmMpOw0KPiArICAgICAgIH0NCj4gKyAgICAgICBrZnJlZShidWZm ZXIpOw0KPiArICAgICAgIHJldHVybiByZXQ7DQo+ICB9DQo+ICBFWFBPUlRfU1lNQk9MX0dQTChu ZnNfZG9fc3VibW91bnQpOw0KPiANCj4gLXN0cnVjdCB2ZnNtb3VudCAqbmZzX3N1Ym1vdW50KHN0 cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBkZW50cnkNCj4gKmRlbnRyeSwNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19maCAqZmgsIHN0cnVjdCBuZnNf ZmF0dHIgKmZhdHRyKQ0KPiAraW50IG5mc19zdWJtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMs IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpDQo+ICB7DQo+IC0gICAgICAgaW50IGVycjsNCj4g KyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsN Cj4gKyAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBjdHgtPmNsb25lX2RhdGEuZGVudHJ5 Ow0KPiAgICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7 DQo+ICsgICAgICAgaW50IGVycjsNCj4gDQo+ICAgICAgICAgLyogTG9vayBpdCB1cCBhZ2FpbiB0 byBnZXQgaXRzIGF0dHJpYnV0ZXMgKi8NCj4gLSAgICAgICBlcnIgPSBzZXJ2ZXItPm5mc19jbGll bnQtPnJwY19vcHMtPmxvb2t1cChkX2lub2RlKHBhcmVudCksICZkZW50cnktDQo+ID5kX25hbWUs IGZoLCBmYXR0ciwgTlVMTCk7DQo+ICsgICAgICAgZXJyID0gc2VydmVyLT5uZnNfY2xpZW50LT5y cGNfb3BzLT5sb29rdXAoZF9pbm9kZShwYXJlbnQpLCAmZGVudHJ5LQ0KPiA+ZF9uYW1lLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bW50 ZmgsIGN0eC0NCj4gPmNsb25lX2RhdGEuZmF0dHIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7DQo+ICAgICAgICAgZHB1dChwYXJlbnQp Ow0KPiAgICAgICAgIGlmIChlcnIgIT0gMCkNCj4gLSAgICAgICAgICAgICAgIHJldHVybiBFUlJf UFRSKGVycik7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPiANCj4gLSAgICAgICBy ZXR1cm4gbmZzX2RvX3N1Ym1vdW50KGRlbnRyeSwgZmgsIGZhdHRyLCBzZXJ2ZXItPmNsaWVudC0+ Y2xfYXV0aC0NCj4gPmF1X2ZsYXZvcik7DQo+ICsgICAgICAgY3R4LT5zZWxlY3RlZF9mbGF2b3Ig PSBzZXJ2ZXItPmNsaWVudC0+Y2xfYXV0aC0+YXVfZmxhdm9yOw0KPiArICAgICAgIHJldHVybiBu ZnNfZG9fc3VibW91bnQoZmMpOw0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTF9HUEwobmZzX3N1Ym1v dW50KTsNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzX2ZzLmggYi9mcy9uZnMvbmZzM19mcy5o DQo+IGluZGV4IDA5NjAyZGMxODg5Zi4uMWI5NTBiNjZiM2JiIDEwMDY0NA0KPiAtLS0gYS9mcy9u ZnMvbmZzM19mcy5oDQo+ICsrKyBiL2ZzL25mcy9uZnMzX2ZzLmgNCj4gQEAgLTI3LDcgKzI3LDcg QEAgc3RhdGljIGlubGluZSBpbnQgbmZzM19wcm9jX3NldGFjbHMoc3RydWN0IGlub2RlICppbm9k ZSwNCj4gc3RydWN0IHBvc2l4X2FjbCAqYWNsLA0KPiAgI2VuZGlmIC8qIENPTkZJR19ORlNfVjNf QUNMICovDQo+IA0KPiAgLyogbmZzM2NsaWVudC5jICovDQo+IC1zdHJ1Y3QgbmZzX3NlcnZlciAq bmZzM19jcmVhdGVfc2VydmVyKHN0cnVjdCBuZnNfbW91bnRfaW5mbyAqKTsNCj4gK3N0cnVjdCBu ZnNfc2VydmVyICpuZnMzX2NyZWF0ZV9zZXJ2ZXIoc3RydWN0IGZzX2NvbnRleHQgKik7DQo+ICBz dHJ1Y3QgbmZzX3NlcnZlciAqbmZzM19jbG9uZV9zZXJ2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKiwg c3RydWN0IG5mc19maCAqLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IG5mc19mYXR0ciAqLCBycGNfYXV0aGZsYXZvcl90KTsNCj4gDQo+IGRpZmYgLS1naXQg YS9mcy9uZnMvbmZzM2NsaWVudC5jIGIvZnMvbmZzL25mczNjbGllbnQuYw0KPiBpbmRleCAzNjJj MzU0OWEyMTcuLjczZjZlZTkzNDc5YyAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL25mczNjbGllbnQu Yw0KPiArKysgYi9mcy9uZnMvbmZzM2NsaWVudC5jDQo+IEBAIC00NSw5ICs0NSwxMCBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgbmZzX2luaXRfc2VydmVyX2FjbGNsaWVudChzdHJ1Y3QNCj4gbmZzX3Nl cnZlciAqc2VydmVyKQ0KPiAgfQ0KPiAgI2VuZGlmDQo+IA0KPiAtc3RydWN0IG5mc19zZXJ2ZXIg Km5mczNfY3JlYXRlX3NlcnZlcihzdHJ1Y3QgbmZzX21vdW50X2luZm8gKm1vdW50X2luZm8pDQo+ ICtzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzM19jcmVhdGVfc2VydmVyKHN0cnVjdCBmc19jb250ZXh0 ICpmYykNCj4gIHsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gbmZzX2Ny ZWF0ZV9zZXJ2ZXIobW91bnRfaW5mbyk7DQo+ICsgICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNl cnZlciA9IG5mc19jcmVhdGVfc2VydmVyKGZjKTsNCj4gKw0KPiAgICAgICAgIC8qIENyZWF0ZSBh IGNsaWVudCBSUEMgaGFuZGxlIGZvciB0aGUgTkZTIHYzIEFDTCBtYW5hZ2VtZW50IGludGVyZmFj ZQ0KPiAqLw0KPiAgICAgICAgIGlmICghSVNfRVJSKHNlcnZlcikpDQo+ICAgICAgICAgICAgICAg ICBuZnNfaW5pdF9zZXJ2ZXJfYWNsY2xpZW50KHNlcnZlcik7DQo+IGRpZmYgLS1naXQgYS9mcy9u ZnMvbmZzM3Byb2MuYyBiL2ZzL25mcy9uZnMzcHJvYy5jDQo+IGluZGV4IGEzYWQyZDQ2ZmQ0Mi4u OTEyYTBiMGM5YmI5IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvbmZzM3Byb2MuYw0KPiArKysgYi9m cy9uZnMvbmZzM3Byb2MuYw0KPiBAQCAtOTYzLDcgKzk2Myw3IEBAIGNvbnN0IHN0cnVjdCBuZnNf cnBjX29wcyBuZnNfdjNfY2xpZW50b3BzID0gew0KPiAgICAgICAgIC5ubG1jbG50X29wcyAgICA9 ICZubG1jbG50X2ZsX2Nsb3NlX2xvY2tfb3BzLA0KPiAgICAgICAgIC5nZXRyb290ICAgICAgICA9 IG5mczNfcHJvY19nZXRfcm9vdCwNCj4gICAgICAgICAuc3VibW91bnQgICAgICAgPSBuZnNfc3Vi bW91bnQsDQo+IC0gICAgICAgLnRyeV9tb3VudCAgICAgID0gbmZzX3RyeV9tb3VudCwNCj4gKyAg ICAgICAudHJ5X2dldF90cmVlICAgPSBuZnNfdHJ5X2dldF90cmVlLA0KPiAgICAgICAgIC5nZXRh dHRyICAgICAgICA9IG5mczNfcHJvY19nZXRhdHRyLA0KPiAgICAgICAgIC5zZXRhdHRyICAgICAg ICA9IG5mczNfcHJvY19zZXRhdHRyLA0KPiAgICAgICAgIC5sb29rdXAgICAgICAgICA9IG5mczNf cHJvY19sb29rdXAsDQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25m czRfZnMuaA0KPiBpbmRleCAwYmQ4YTVmYzE0MGIuLmU2MjRhODVkODE4YyAxMDA2NDQNCj4gLS0t IGEvZnMvbmZzL25mczRfZnMuaA0KPiArKysgYi9mcy9uZnMvbmZzNF9mcy5oDQo+IEBAIC0yNjgs MTQgKzI2OCwxMyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zDQo+IG5m czRfZGVudHJ5X29wZXJhdGlvbnM7DQo+ICBpbnQgbmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9k ZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBmaWxlICosDQo+ICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQsIHVtb2RlX3QpOw0KPiANCj4gLS8qIHN1cGVyLmMgKi8NCj4gKy8qIGZzX2Nv bnRleHQuYyAqLw0KPiAgZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG5mczRfZnNfdHlw ZTsNCj4gDQo+ICAvKiBuZnM0bmFtZXNwYWNlLmMgKi8NCj4gIHN0cnVjdCBycGNfY2xudCAqbmZz NF9uZWdvdGlhdGVfc2VjdXJpdHkoc3RydWN0IHJwY19jbG50ICosIHN0cnVjdCBpbm9kZSAqLA0K PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBx c3RyICopOw0KPiAtc3RydWN0IHZmc21vdW50ICpuZnM0X3N1Ym1vdW50KHN0cnVjdCBuZnNfc2Vy dmVyICosIHN0cnVjdCBkZW50cnkgKiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBuZnNfZmggKiwgc3RydWN0IG5mc19mYXR0ciAqKTsNCj4gK2ludCBuZnM0X3N1Ym1v dW50KHN0cnVjdCBmc19jb250ZXh0ICosIHN0cnVjdCBuZnNfc2VydmVyICopOw0KPiAgaW50IG5m czRfcmVwbGFjZV90cmFuc3BvcnQoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwNCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbnMg KmxvY2F0aW9ucyk7DQo+IA0KPiBAQCAtNTE2LDcgKzUxNSw2IEBAIGV4dGVybiBjb25zdCBuZnM0 X3N0YXRlaWQgaW52YWxpZF9zdGF0ZWlkOw0KPiAgLyogbmZzNHN1cGVyLmMgKi8NCj4gIHN0cnVj dCBuZnNfbW91bnRfaW5mbzsNCj4gIGV4dGVybiBzdHJ1Y3QgbmZzX3N1YnZlcnNpb24gbmZzX3Y0 Ow0KPiAtc3RydWN0IGRlbnRyeSAqbmZzNF90cnlfbW91bnQoaW50LCBjb25zdCBjaGFyICosIHN0 cnVjdCBuZnNfbW91bnRfaW5mbyAqKTsNCj4gIGV4dGVybiBib29sIG5mczRfZGlzYWJsZV9pZG1h cHBpbmc7DQo+ICBleHRlcm4gdW5zaWduZWQgc2hvcnQgbWF4X3Nlc3Npb25fc2xvdHM7DQo+ICBl eHRlcm4gdW5zaWduZWQgc2hvcnQgbWF4X3Nlc3Npb25fY2Jfc2xvdHM7DQo+IEBAIC01MjYsNiAr NTI0LDkgQEAgZXh0ZXJuIGJvb2wgcmVjb3Zlcl9sb3N0X2xvY2tzOw0KPiAgI2RlZmluZSBORlM0 X0NMSUVOVF9JRF9VTklRX0xFTiAgICAgICAgICAgICAgICAoNjQpDQo+ICBleHRlcm4gY2hhciBu ZnM0X2NsaWVudF9pZF91bmlxdWlmaWVyW05GUzRfQ0xJRU5UX0lEX1VOSVFfTEVOXTsNCj4gDQo+ ICtleHRlcm4gaW50IG5mczRfdHJ5X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICopOw0KPiAr ZXh0ZXJuIGludCBuZnM0X2dldF9yZWZlcnJhbF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICopOw0K PiArDQo+ICAvKiBuZnM0c3lzY3RsLmMgKi8NCj4gICNpZmRlZiBDT05GSUdfU1lTQ1RMDQo+ICBp bnQgbmZzNF9yZWdpc3Rlcl9zeXNjdGwodm9pZCk7DQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvbmZz NGNsaWVudC5jIGIvZnMvbmZzL25mczRjbGllbnQuYw0KPiBpbmRleCBlMDVmNzU0ZDFlYjEuLmMz NDAyN2NjOGRhOSAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL25mczRjbGllbnQuYw0KPiArKysgYi9m cy9uZnMvbmZzNGNsaWVudC5jDQo+IEBAIC0xMDQyLDkgKzEwNDIsOSBAQCBzdGF0aWMgaW50IG5m czRfc2VydmVyX2NvbW1vbl9zZXR1cChzdHJ1Y3QgbmZzX3NlcnZlcg0KPiAqc2VydmVyLA0KPiAg LyoNCj4gICAqIENyZWF0ZSBhIHZlcnNpb24gNCB2b2x1bWUgcmVjb3JkDQo+ICAgKi8NCj4gLXN0 YXRpYyBpbnQgbmZzNF9pbml0X3NlcnZlcihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLA0KPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgpDQo+ ICtzdGF0aWMgaW50IG5mczRfaW5pdF9zZXJ2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwg c3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29u dGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiAgICAgICAgIHN0cnVjdCBycGNfdGlt ZW91dCB0aW1lcGFybXM7DQo+ICAgICAgICAgaW50IGVycm9yOw0KPiANCj4gQEAgLTEwNjYsMTQg KzEwNjYsMTQgQEAgc3RhdGljIGludCBuZnM0X2luaXRfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVy ICpzZXJ2ZXIsDQo+IA0KPiAgICAgICAgIC8qIEdldCBhIGNsaWVudCByZWNvcmQgKi8NCj4gICAg ICAgICBlcnJvciA9IG5mczRfc2V0X2NsaWVudChzZXJ2ZXIsDQo+IC0gICAgICAgICAgICAgICAg ICAgICAgIGN0eC0+bmZzX3NlcnZlci5ob3N0bmFtZSwNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZjdHgtPm5mc19zZXJ2ZXIuYWRkcmVzcywNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmFkZHJsZW4sDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgIGN0eC0+Y2xpZW50X2FkZHJlc3MsDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCwNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgJnRpbWVwYXJtcywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5taW5vcnZl cnNpb24sDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bmV0KTsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNzLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5hZGRybGVuLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y2xpZW50X2FkZHJlc3MsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLnByb3RvY29s LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aW1lcGFybXMsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5taW5vcnZlcnNpb24sDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZmMtPm5ldF9ucyk7DQo+ICAgICAgICAgaWYgKGVycm9y IDwgMCkNCj4gICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsNCj4gDQo+IEBAIC0xMDk2LDEw ICsxMDk2LDkgQEAgc3RhdGljIGludCBuZnM0X2luaXRfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVy ICpzZXJ2ZXIsDQo+ICAgKiBDcmVhdGUgYSB2ZXJzaW9uIDQgdm9sdW1lIHJlY29yZA0KPiAgICog LSBrZXllZCBvbiBzZXJ2ZXIgYW5kIEZTSUQNCj4gICAqLw0KPiAtLypzdHJ1Y3QgbmZzX3NlcnZl ciAqbmZzNF9jcmVhdGVfc2VydmVyKGNvbnN0IHN0cnVjdCBuZnNfZnNfY29udGV4dCAqZGF0YSwN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICpt bnRmaCkqLw0KPiAtc3RydWN0IG5mc19zZXJ2ZXIgKm5mczRfY3JlYXRlX3NlcnZlcihzdHJ1Y3Qg bmZzX21vdW50X2luZm8gKm1vdW50X2luZm8pDQo+ICtzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzNF9j cmVhdGVfc2VydmVyKHN0cnVjdCBmc19jb250ZXh0ICpmYykNCj4gIHsNCj4gKyAgICAgICBzdHJ1 Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4gICAgICAgICBz dHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOw0KPiAgICAgICAgIGJvb2wgYXV0aF9wcm9iZTsNCj4g ICAgICAgICBpbnQgZXJyb3I7DQo+IEBAIC0xMTEwLDE0ICsxMTA5LDE0IEBAIHN0cnVjdCBuZnNf c2VydmVyICpuZnM0X2NyZWF0ZV9zZXJ2ZXIoc3RydWN0DQo+IG5mc19tb3VudF9pbmZvICptb3Vu dF9pbmZvKQ0KPiANCj4gICAgICAgICBzZXJ2ZXItPmNyZWQgPSBnZXRfY3JlZChjdXJyZW50X2Ny ZWQoKSk7DQo+IA0KPiAtICAgICAgIGF1dGhfcHJvYmUgPSBtb3VudF9pbmZvLT5jdHgtPmF1dGhf aW5mby5mbGF2b3JfbGVuIDwgMTsNCj4gKyAgICAgICBhdXRoX3Byb2JlID0gY3R4LT5hdXRoX2lu Zm8uZmxhdm9yX2xlbiA8IDE7DQo+IA0KPiAgICAgICAgIC8qIHNldCB1cCB0aGUgZ2VuZXJhbCBS UEMgY2xpZW50ICovDQo+IC0gICAgICAgZXJyb3IgPSBuZnM0X2luaXRfc2VydmVyKHNlcnZlciwg bW91bnRfaW5mby0+Y3R4KTsNCj4gKyAgICAgICBlcnJvciA9IG5mczRfaW5pdF9zZXJ2ZXIoc2Vy dmVyLCBmYyk7DQo+ICAgICAgICAgaWYgKGVycm9yIDwgMCkNCj4gICAgICAgICAgICAgICAgIGdv dG8gZXJyb3I7DQo+IA0KPiAtICAgICAgIGVycm9yID0gbmZzNF9zZXJ2ZXJfY29tbW9uX3NldHVw KHNlcnZlciwgbW91bnRfaW5mby0+bW50ZmgsDQo+IGF1dGhfcHJvYmUpOw0KPiArICAgICAgIGVy cm9yID0gbmZzNF9zZXJ2ZXJfY29tbW9uX3NldHVwKHNlcnZlciwgY3R4LT5tbnRmaCwgYXV0aF9w cm9iZSk7DQo+ICAgICAgICAgaWYgKGVycm9yIDwgMCkNCj4gICAgICAgICAgICAgICAgIGdvdG8g ZXJyb3I7DQo+IA0KPiBAQCAtMTEzMSw5ICsxMTMwLDkgQEAgc3RydWN0IG5mc19zZXJ2ZXIgKm5m czRfY3JlYXRlX3NlcnZlcihzdHJ1Y3QNCj4gbmZzX21vdW50X2luZm8gKm1vdW50X2luZm8pDQo+ ICAvKg0KPiAgICogQ3JlYXRlIGFuIE5GUzQgcmVmZXJyYWwgc2VydmVyIHJlY29yZA0KPiAgICov DQo+IC1zdHJ1Y3QgbmZzX3NlcnZlciAqbmZzNF9jcmVhdGVfcmVmZXJyYWxfc2VydmVyKHN0cnVj dCBuZnNfY2xvbmVfbW91bnQgKmRhdGEsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19maCAqbW50ZmgpDQo+ICtzdHJ1Y3QgbmZzX3Nl cnZlciAqbmZzNF9jcmVhdGVfcmVmZXJyYWxfc2VydmVyKHN0cnVjdCBmc19jb250ZXh0ICpmYykN Cj4gIHsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250 ZXh0KGZjKTsNCj4gICAgICAgICBzdHJ1Y3QgbmZzX2NsaWVudCAqcGFyZW50X2NsaWVudDsNCj4g ICAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCAqcGFyZW50X3NlcnZlcjsNCj4gICAg ICAgICBib29sIGF1dGhfcHJvYmU7DQo+IEBAIC0xMTQzLDcgKzExNDIsNyBAQCBzdHJ1Y3QgbmZz X3NlcnZlciAqbmZzNF9jcmVhdGVfcmVmZXJyYWxfc2VydmVyKHN0cnVjdA0KPiBuZnNfY2xvbmVf bW91bnQgKmRhdGEsDQo+ICAgICAgICAgaWYgKCFzZXJ2ZXIpDQo+ICAgICAgICAgICAgICAgICBy ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gDQo+IC0gICAgICAgcGFyZW50X3NlcnZlciA9IE5G U19TQihkYXRhLT5zYik7DQo+ICsgICAgICAgcGFyZW50X3NlcnZlciA9IE5GU19TQihjdHgtPmNs b25lX2RhdGEuc2IpOw0KPiAgICAgICAgIHBhcmVudF9jbGllbnQgPSBwYXJlbnRfc2VydmVyLT5u ZnNfY2xpZW50Ow0KPiANCj4gICAgICAgICBzZXJ2ZXItPmNyZWQgPSBnZXRfY3JlZChwYXJlbnRf c2VydmVyLT5jcmVkKTsNCj4gQEAgLTExNTMsMTAgKzExNTIsMTEgQEAgc3RydWN0IG5mc19zZXJ2 ZXIgKm5mczRfY3JlYXRlX3JlZmVycmFsX3NlcnZlcihzdHJ1Y3QNCj4gbmZzX2Nsb25lX21vdW50 ICpkYXRhLA0KPiANCj4gICAgICAgICAvKiBHZXQgYSBjbGllbnQgcmVwcmVzZW50YXRpb24gKi8N Cj4gICNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfWFBSVF9SRE1BKQ0KPiAtICAgICAgIHJw Y19zZXRfcG9ydChkYXRhLT5hZGRyLCBORlNfUkRNQV9QT1JUKTsNCj4gLSAgICAgICBlcnJvciA9 IG5mczRfc2V0X2NsaWVudChzZXJ2ZXIsIGRhdGEtPmhvc3RuYW1lLA0KPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGEtPmFkZHIsDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGF0YS0+YWRkcmxlbiwNCj4gKyAgICAgICBycGNfc2V0X3BvcnQoJmN0eC0+bmZz X3NlcnZlci5hZGRyZXNzLCBORlNfUkRNQV9QT1JUKTsNCj4gKyAgICAgICBlcnJvciA9IG5mczRf c2V0X2NsaWVudChzZXJ2ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4 LT5uZnNfc2VydmVyLmhvc3RuYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZjdHgtPm5mc19zZXJ2ZXIuYWRkcmVzcywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdHgtPm5mc19zZXJ2ZXIuYWRkcmxlbiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYXJlbnRfY2xpZW50LT5jbF9pcGFkZHIsDQo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgWFBSVF9UUkFOU1BPUlRfUkRNQSwNCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXJlbnRfc2VydmVyLT5jbGllbnQtPmNsX3RpbWVvdXQsDQo+IEBAIC0xMTY2 LDEwICsxMTY2LDExIEBAIHN0cnVjdCBuZnNfc2VydmVyICpuZnM0X2NyZWF0ZV9yZWZlcnJhbF9z ZXJ2ZXIoc3RydWN0DQo+IG5mc19jbG9uZV9tb3VudCAqZGF0YSwNCj4gICAgICAgICAgICAgICAg IGdvdG8gaW5pdF9zZXJ2ZXI7DQo+ICAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfU1VOUlBD X1hQUlRfUkRNQSkgKi8NCj4gDQo+IC0gICAgICAgcnBjX3NldF9wb3J0KGRhdGEtPmFkZHIsIE5G U19QT1JUKTsNCj4gLSAgICAgICBlcnJvciA9IG5mczRfc2V0X2NsaWVudChzZXJ2ZXIsIGRhdGEt Pmhvc3RuYW1lLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmFkZHIs DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+YWRkcmxlbiwNCj4gKyAg ICAgICBycGNfc2V0X3BvcnQoJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNzLCBORlNfUE9SVCk7DQo+ ICsgICAgICAgZXJyb3IgPSBuZnM0X3NldF9jbGllbnQoc2VydmVyLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5ob3N0bmFtZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5uZnNfc2VydmVyLmFkZHJlc3MsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmFkZHJsZW4sDQo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X2NsaWVudC0+Y2xfaXBhZGRyLA0K PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQUlRfVFJBTlNQT1JUX1RDUCwNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfc2VydmVyLT5jbGllbnQtPmNs X3RpbWVvdXQsDQo+IEBAIC0xMTgxLDEzICsxMTgyLDE0IEBAIHN0cnVjdCBuZnNfc2VydmVyICpu ZnM0X2NyZWF0ZV9yZWZlcnJhbF9zZXJ2ZXIoc3RydWN0DQo+IG5mc19jbG9uZV9tb3VudCAqZGF0 YSwNCj4gICNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfWFBSVF9SRE1BKQ0KPiAgaW5pdF9z ZXJ2ZXI6DQo+ICAjZW5kaWYNCj4gLSAgICAgICBlcnJvciA9IG5mc19pbml0X3NlcnZlcl9ycGNj bGllbnQoc2VydmVyLCBwYXJlbnRfc2VydmVyLT5jbGllbnQtDQo+ID5jbF90aW1lb3V0LCBkYXRh LT5hdXRoZmxhdm9yKTsNCj4gKyAgICAgICBlcnJvciA9IG5mc19pbml0X3NlcnZlcl9ycGNjbGll bnQoc2VydmVyLCBwYXJlbnRfc2VydmVyLT5jbGllbnQtDQo+ID5jbF90aW1lb3V0LA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnNlbGVjdGVkX2ZsYXZv cik7DQo+ICAgICAgICAgaWYgKGVycm9yIDwgMCkNCj4gICAgICAgICAgICAgICAgIGdvdG8gZXJy b3I7DQo+IA0KPiAgICAgICAgIGF1dGhfcHJvYmUgPSBwYXJlbnRfc2VydmVyLT5hdXRoX2luZm8u Zmxhdm9yX2xlbiA8IDE7DQo+IA0KPiAtICAgICAgIGVycm9yID0gbmZzNF9zZXJ2ZXJfY29tbW9u X3NldHVwKHNlcnZlciwgbW50ZmgsIGF1dGhfcHJvYmUpOw0KPiArICAgICAgIGVycm9yID0gbmZz NF9zZXJ2ZXJfY29tbW9uX3NldHVwKHNlcnZlciwgY3R4LT5tbnRmaCwgYXV0aF9wcm9iZSk7DQo+ ICAgICAgICAgaWYgKGVycm9yIDwgMCkNCj4gICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+ IA0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYyBiL2ZzL25mcy9uZnM0bmFt ZXNwYWNlLmMNCj4gaW5kZXggMmU0NjBjMzNhZTQ4Li4zNzk5OTkyNTA0MGEgMTAwNjQ0DQo+IC0t LSBhL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMNCj4gKysrIGIvZnMvbmZzL25mczRuYW1lc3BhY2Uu Yw0KPiBAQCAtOCw2ICs4LDcgQEANCj4gICAqIE5GU3Y0IG5hbWVzcGFjZQ0KPiAgICovDQo+IA0K PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5o Pg0KPiAgI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+DQo+ICAjaW5jbHVkZSA8bGludXgvbmFtZWku aD4NCj4gQEAgLTIxLDM3ICsyMiw2NCBAQA0KPiAgI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4NCj4g ICNpbmNsdWRlICJpbnRlcm5hbC5oIg0KPiAgI2luY2x1ZGUgIm5mczRfZnMuaCINCj4gKyNpbmNs dWRlICJuZnMuaCINCj4gICNpbmNsdWRlICJkbnNfcmVzb2x2ZS5oIg0KPiANCj4gICNkZWZpbmUg TkZTREJHX0ZBQ0lMSVRZICAgICAgICAgICAgICAgIE5GU0RCR19WRlMNCj4gDQo+ICsvKg0KPiAr ICogV29yayBvdXQgdGhlIGxlbmd0aCB0aGF0IGFuIE5GU3Y0IHBhdGggd291bGQgcmVuZGVyIHRv IGFzIGEgc3RhbmRhcmQgcG9zaXgNCj4gKyAqIHBhdGgsIHdpdGggYSBsZWFkaW5nIHNsYXNoIGJ1 dCBubyB0ZXJtaW5hdGluZyBzbGFzaC4NCj4gKyAqLw0KPiArc3RhdGljIHNzaXplX3QgbmZzNF9w YXRobmFtZV9sZW4oY29uc3Qgc3RydWN0IG5mczRfcGF0aG5hbWUgKnBhdGhuYW1lKQ0KPiArew0K PiArICAgICAgIHNzaXplX3QgbGVuID0gMDsNCj4gKyAgICAgICBpbnQgaTsNCj4gKw0KPiArICAg ICAgIGZvciAoaSA9IDA7IGkgPCBwYXRobmFtZS0+bmNvbXBvbmVudHM7IGkrKykgew0KPiArICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5mczRfc3RyaW5nICpjb21wb25lbnQgPSAmcGF0aG5h bWUtDQo+ID5jb21wb25lbnRzW2ldOw0KPiArDQo+ICsgICAgICAgICAgICAgICBpZiAoY29tcG9u ZW50LT5sZW4gPiBOQU1FX01BWCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byB0b29f bG9uZzsNCj4gKyAgICAgICAgICAgICAgIGxlbiArPSAxICsgY29tcG9uZW50LT5sZW47IC8qIEFk ZGluZyAiL2ZvbyIgKi8NCj4gKyAgICAgICAgICAgICAgIGlmIChsZW4gPiBQQVRIX01BWCkNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgZ290byB0b29fbG9uZzsNCj4gKyAgICAgICB9DQo+ICsg ICAgICAgcmV0dXJuIGxlbjsNCj4gKw0KPiArdG9vX2xvbmc6DQo+ICsgICAgICAgcmV0dXJuIC1F TkFNRVRPT0xPTkc7DQo+ICt9DQo+ICsNCj4gIC8qDQo+ICAgKiBDb252ZXJ0IHRoZSBORlN2NCBw YXRobmFtZSBjb21wb25lbnRzIGludG8gYSBzdGFuZGFyZCBwb3NpeCBwYXRoLg0KPiAtICoNCj4g LSAqIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyB3aWxsIGJlIHBsYWNlZCBhdCB0aGUg ZW5kIG9mIHRoZSBidWZmZXINCj4gICAqLw0KPiAtc3RhdGljIGlubGluZSBjaGFyICpuZnM0X3Bh dGhuYW1lX3N0cmluZyhjb25zdCBzdHJ1Y3QgbmZzNF9wYXRobmFtZQ0KPiAqcGF0aG5hbWUsDQo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBz c2l6ZV90IGJ1ZmxlbikNCj4gK3N0YXRpYyBjaGFyICpuZnM0X3BhdGhuYW1lX3N0cmluZyhjb25z dCBzdHJ1Y3QgbmZzNF9wYXRobmFtZSAqcGF0aG5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX2xlbikNCj4gIHsNCj4gLSAgICAgICBjaGFy ICplbmQgPSBidWZmZXIgKyBidWZsZW47DQo+IC0gICAgICAgaW50IG47DQo+ICsgICAgICAgc3Np emVfdCBsZW47DQo+ICsgICAgICAgY2hhciAqYnVmLCAqcDsNCj4gKyAgICAgICBpbnQgaTsNCj4g Kw0KPiArICAgICAgIGxlbiA9IG5mczRfcGF0aG5hbWVfbGVuKHBhdGhuYW1lKTsNCj4gKyAgICAg ICBpZiAobGVuIDwgMCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKGxlbik7DQo+ ICsgICAgICAgKl9sZW4gPSBsZW47DQo+IA0KPiAtICAgICAgICotLWVuZCA9ICdcMCc7DQo+IC0g ICAgICAgYnVmbGVuLS07DQo+IC0NCj4gLSAgICAgICBuID0gcGF0aG5hbWUtPm5jb21wb25lbnRz Ow0KPiAtICAgICAgIHdoaWxlICgtLW4gPj0gMCkgew0KPiAtICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IG5mczRfc3RyaW5nICpjb21wb25lbnQgPSAmcGF0aG5hbWUtDQo+ID5jb21wb25lbnRz W25dOw0KPiAtICAgICAgICAgICAgICAgYnVmbGVuIC09IGNvbXBvbmVudC0+bGVuICsgMTsNCj4g LSAgICAgICAgICAgICAgIGlmIChidWZsZW4gPCAwKQ0KPiAtICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIEVsb25nOw0KPiAtICAgICAgICAgICAgICAgZW5kIC09IGNvbXBvbmVudC0+bGVuOw0K PiAtICAgICAgICAgICAgICAgbWVtY3B5KGVuZCwgY29tcG9uZW50LT5kYXRhLCBjb21wb25lbnQt Pmxlbik7DQo+IC0gICAgICAgICAgICAgICAqLS1lbmQgPSAnLyc7DQo+ICsgICAgICAgcCA9IGJ1 ZiA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7DQo+ICsgICAgICAgaWYgKCFidWYpDQo+ ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gKw0KPiArICAgICAg IGZvciAoaSA9IDA7IGkgPCBwYXRobmFtZS0+bmNvbXBvbmVudHM7IGkrKykgew0KPiArICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IG5mczRfc3RyaW5nICpjb21wb25lbnQgPSAmcGF0aG5hbWUt DQo+ID5jb21wb25lbnRzW2ldOw0KPiArDQo+ICsgICAgICAgICAgICAgICAqcCsrID0gJy8nOw0K PiArICAgICAgICAgICAgICAgbWVtY3B5KHAsIGNvbXBvbmVudC0+ZGF0YSwgY29tcG9uZW50LT5s ZW4pOw0KPiArICAgICAgICAgICAgICAgcCArPSBjb21wb25lbnQtPmxlbjsNCj4gICAgICAgICB9 DQo+IC0gICAgICAgcmV0dXJuIGVuZDsNCj4gLUVsb25nOg0KPiAtICAgICAgIHJldHVybiBFUlJf UFRSKC1FTkFNRVRPT0xPTkcpOw0KPiArDQo+ICsgICAgICAgKnAgPSAwOw0KPiArICAgICAgIHJl dHVybiBidWY7DQo+ICB9DQo+IA0KPiAgLyoNCj4gQEAgLTEwMCwyMSArMTI4LDI1IEBAIHN0YXRp YyBjaGFyICpuZnM0X3BhdGgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyDQo+ICpidWZmZXIs IHNzaXplX3QgYnVmbGVuKQ0KPiAgICovDQo+ICBzdGF0aWMgaW50IG5mczRfdmFsaWRhdGVfZnNw YXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbnMgKmxvY2F0aW9ucywNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwYWdlLCBjaGFyICpwYWdlMikNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCkN Cj4gIHsNCj4gLSAgICAgICBjb25zdCBjaGFyICpwYXRoLCAqZnNfcGF0aDsNCj4gKyAgICAgICBj b25zdCBjaGFyICpwYXRoOw0KPiArICAgICAgIGNoYXIgKmJ1ZjsNCj4gKyAgICAgICBpbnQgbjsN Cj4gDQo+IC0gICAgICAgcGF0aCA9IG5mczRfcGF0aChkZW50cnksIHBhZ2UsIFBBR0VfU0laRSk7 DQo+IC0gICAgICAgaWYgKElTX0VSUihwYXRoKSkNCj4gKyAgICAgICBidWYgPSBrbWFsbG9jKDQw OTYsIEdGUF9LRVJORUwpOw0KPiArICAgICAgIHBhdGggPSBuZnM0X3BhdGgoZGVudHJ5LCBidWYs IDQwOTYpOw0KPiArICAgICAgIGlmIChJU19FUlIocGF0aCkpIHsNCj4gKyAgICAgICAgICAgICAg IGtmcmVlKGJ1Zik7DQo+ICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwYXRoKTsNCj4g KyAgICAgICB9DQo+IA0KPiAtICAgICAgIGZzX3BhdGggPSBuZnM0X3BhdGhuYW1lX3N0cmluZygm bG9jYXRpb25zLT5mc19wYXRoLCBwYWdlMiwgUEFHRV9TSVpFKTsNCj4gLSAgICAgICBpZiAoSVNf RVJSKGZzX3BhdGgpKQ0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoZnNfcGF0aCk7 DQo+IC0NCj4gLSAgICAgICBpZiAoc3RybmNtcChwYXRoLCBmc19wYXRoLCBzdHJsZW4oZnNfcGF0 aCkpICE9IDApIHsNCj4gKyAgICAgICBuID0gc3RybmNtcChwYXRoLCBjdHgtPm5mc19zZXJ2ZXIu ZXhwb3J0X3BhdGgsDQo+ICsgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmV4cG9y dF9wYXRoX2xlbik7DQo+ICsgICAgICAga2ZyZWUoYnVmKTsNCj4gKyAgICAgICBpZiAobiAhPSAw KSB7DQo+ICAgICAgICAgICAgICAgICBkcHJpbnRrKCIlczogcGF0aCAlcyBkb2VzIG5vdCBiZWdp biB3aXRoIGZzcm9vdCAlc1xuIiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18s IHBhdGgsIGZzX3BhdGgpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcGF0 aCwgY3R4LT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoKTsNCj4gICAgICAgICAgICAgICAgIHJldHVy biAtRU5PRU5UOw0KPiAgICAgICAgIH0NCj4gDQo+IEBAIC0yMzYsNTUgKzI2OCw3MCBAQCBuZnM0 X25lZ290aWF0ZV9zZWN1cml0eShzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdA0KPiBpbm9k ZSAqaW5vZGUsDQo+ICAgICAgICAgcmV0dXJuIG5ldzsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgc3Ry dWN0IHZmc21vdW50ICp0cnlfbG9jYXRpb24oc3RydWN0IG5mc19jbG9uZV9tb3VudCAqbW91bnRk YXRhLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcGFnZSwg Y2hhciAqcGFnZTIsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbiAqbG9jYXRpb24pDQo+ICtzdGF0aWMgaW50IHRyeV9s b2NhdGlvbihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9uICpsb2NhdGlvbikNCj4gIHsNCj4gLSAgICAg ICBjb25zdCBzaXplX3QgYWRkcl9idWZzaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9y YWdlKTsNCj4gLSAgICAgICBzdHJ1Y3QgbmV0ICpuZXQgPSBycGNfbmV0X25zKE5GU19TQihtb3Vu dGRhdGEtPnNiKS0+Y2xpZW50KTsNCj4gLSAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IEVS Ul9QVFIoLUVOT0VOVCk7DQo+IC0gICAgICAgY2hhciAqbW50X3BhdGg7DQo+IC0gICAgICAgdW5z aWduZWQgaW50IG1heGJ1ZmxlbjsNCj4gLSAgICAgICB1bnNpZ25lZCBpbnQgczsNCj4gKyAgICAg ICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4gKyAg ICAgICB1bnNpZ25lZCBpbnQgbGVuLCBzOw0KPiArICAgICAgIGNoYXIgKnNvdXJjZSwgKnA7DQo+ ICsgICAgICAgaW50IHJldCA9IC1FTk9FTlQ7DQo+ICsNCj4gKyAgICAgICAvKiBBbGxvY2F0ZSBh IGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhvbGQgYW55IG9mIHRoZSBob3N0bmFtZXMgcGx1cyBhDQo+ ICsgICAgICAgICogdGVybWluYXRpbmcgY2hhciBhbmQgYWxzbyBhIGJ1ZmZlciBiaWcgZW5vdWdo IHRvIGhvbGQgdGhlIGhvc3RuYW1lDQo+ICsgICAgICAgICogcGx1cyBhIGNvbG9uIHBsdXMgdGhl IHBhdGguDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgbGVuID0gMDsNCj4gKyAgICAgICBmb3Ig KHMgPSAwOyBzIDwgbG9jYXRpb24tPm5zZXJ2ZXJzOyBzKyspIHsNCj4gKyAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBuZnM0X3N0cmluZyAqYnVmID0gJmxvY2F0aW9uLT5zZXJ2ZXJzW3NdOw0K PiArICAgICAgICAgICAgICAgaWYgKGJ1Zi0+bGVuID4gbGVuKQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICBsZW4gPSBidWYtPmxlbjsNCj4gKyAgICAgICB9DQo+IA0KPiAtICAgICAgIG1udF9w YXRoID0gbmZzNF9wYXRobmFtZV9zdHJpbmcoJmxvY2F0aW9uLT5yb290cGF0aCwgcGFnZTIsDQo+ IFBBR0VfU0laRSk7DQo+IC0gICAgICAgaWYgKElTX0VSUihtbnRfcGF0aCkpDQo+IC0gICAgICAg ICAgICAgICByZXR1cm4gRVJSX0NBU1QobW50X3BhdGgpOw0KPiAtICAgICAgIG1vdW50ZGF0YS0+ bW50X3BhdGggPSBtbnRfcGF0aDsNCj4gLSAgICAgICBtYXhidWZsZW4gPSBtbnRfcGF0aCAtIDEg LSBwYWdlMjsNCj4gKyAgICAgICBrZnJlZShjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUpOw0KPiAr ICAgICAgIGN0eC0+bmZzX3NlcnZlci5ob3N0bmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tF Uk5FTCk7DQo+ICsgICAgICAgaWYgKCFjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUpDQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gDQo+IC0gICAgICAgbW91bnRkYXRhLT5hZGRy ID0ga21hbGxvYyhhZGRyX2J1ZnNpemUsIEdGUF9LRVJORUwpOw0KPiAtICAgICAgIGlmIChtb3Vu dGRhdGEtPmFkZHIgPT0gTlVMTCkNCj4gLSAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOw0KPiArICAgICAgIHNvdXJjZSA9IGttYWxsb2MobGVuICsgMSArIGN0eC0+bmZzX3Nl cnZlci5leHBvcnRfcGF0aF9sZW4gKyAxLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgR0ZQ X0tFUk5FTCk7DQo+ICsgICAgICAgaWYgKCFzb3VyY2UpDQo+ICsgICAgICAgICAgICAgICByZXR1 cm4gLUVOT01FTTsNCj4gDQo+ICsgICAgICAga2ZyZWUoZmMtPnNvdXJjZSk7DQo+ICsgICAgICAg ZmMtPnNvdXJjZSA9IHNvdXJjZTsNCj4gICAgICAgICBmb3IgKHMgPSAwOyBzIDwgbG9jYXRpb24t Pm5zZXJ2ZXJzOyBzKyspIHsNCj4gICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZnM0X3N0 cmluZyAqYnVmID0gJmxvY2F0aW9uLT5zZXJ2ZXJzW3NdOw0KPiANCj4gLSAgICAgICAgICAgICAg IGlmIChidWYtPmxlbiA8PSAwIHx8IGJ1Zi0+bGVuID49IG1heGJ1ZmxlbikNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgY29udGludWU7DQo+IC0NCj4gICAgICAgICAgICAgICAgIGlmIChtZW1j aHIoYnVmLT5kYXRhLCBJUFY2X1NDT1BFX0RFTElNSVRFUiwgYnVmLT5sZW4pKQ0KPiAgICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gDQo+IC0gICAgICAgICAgICAgICBtb3VudGRh dGEtPmFkZHJsZW4gPSBuZnNfcGFyc2Vfc2VydmVyX25hbWUoYnVmLT5kYXRhLCBidWYtDQo+ID5s ZW4sDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91bnRkYXRhLT5hZGRyLCBh ZGRyX2J1ZnNpemUsIG5ldCk7DQo+IC0gICAgICAgICAgICAgICBpZiAobW91bnRkYXRhLT5hZGRy bGVuID09IDApDQo+ICsgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIG5mc19wYXJzZV9zZXJ2ZXJfbmFtZShidWYtPmRhdGEs IGJ1Zi0+bGVuLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0eC0NCj4gPm5mc19zZXJ2ZXIuX2FkZHJlc3Mp LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmMtPm5l dF9ucyk7DQo+ICsgICAgICAgICAgICAgICBpZiAoY3R4LT5uZnNfc2VydmVyLmFkZHJsZW4gPT0g MCkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+IA0KPiAtICAgICAgICAg ICAgICAgbWVtY3B5KHBhZ2UyLCBidWYtPmRhdGEsIGJ1Zi0+bGVuKTsNCj4gLSAgICAgICAgICAg ICAgIHBhZ2UyW2J1Zi0+bGVuXSA9ICdcMCc7DQo+IC0gICAgICAgICAgICAgICBtb3VudGRhdGEt Pmhvc3RuYW1lID0gcGFnZTI7DQo+ICsgICAgICAgICAgICAgICBycGNfc2V0X3BvcnQoJmN0eC0+ bmZzX3NlcnZlci5hZGRyZXNzLCBORlNfUE9SVCk7DQo+IA0KPiAtICAgICAgICAgICAgICAgc25w cmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXM6JXMiLA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1vdW50ZGF0YS0+aG9zdG5hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbW91bnRkYXRhLT5tbnRfcGF0aCk7DQo+ICsgICAgICAgICAgICAgICBtZW1jcHko Y3R4LT5uZnNfc2VydmVyLmhvc3RuYW1lLCBidWYtPmRhdGEsIGJ1Zi0+bGVuKTsNCj4gKyAgICAg ICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5ob3N0bmFtZVtidWYtPmxlbl0gPSAnXDAnOw0KPiAN Cj4gLSAgICAgICAgICAgICAgIG1udCA9IHZmc19zdWJtb3VudChtb3VudGRhdGEtPmRlbnRyeSwg Jm5mczRfcmVmZXJyYWxfZnNfdHlwZSwNCj4gcGFnZSwgbW91bnRkYXRhKTsNCj4gLSAgICAgICAg ICAgICAgIGlmICghSVNfRVJSKG1udCkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgICAgICAgICAgcCA9IHNvdXJjZTsNCj4gKyAgICAgICAgICAgICAgIG1lbWNw eShwLCBidWYtPmRhdGEsIGJ1Zi0+bGVuKTsNCj4gKyAgICAgICAgICAgICAgIHAgKz0gYnVmLT5s ZW47DQo+ICsgICAgICAgICAgICAgICAqcCsrID0gJzonOw0KPiArICAgICAgICAgICAgICAgbWVt Y3B5KHAsIGN0eC0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCwgY3R4LQ0KPiA+bmZzX3NlcnZlci5l eHBvcnRfcGF0aF9sZW4pOw0KPiArICAgICAgICAgICAgICAgcCArPSBjdHgtPm5mc19zZXJ2ZXIu ZXhwb3J0X3BhdGhfbGVuOw0KPiArICAgICAgICAgICAgICAgKnAgPSAwOw0KPiArDQo+ICsgICAg ICAgICAgICAgICByZXQgPSBuZnM0X2dldF9yZWZlcnJhbF90cmVlKGZjKTsNCj4gKyAgICAgICAg ICAgICAgIGlmIChyZXQgPT0gMCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+ICAgICAgICAgfQ0KPiAtICAgICAgIGtmcmVlKG1vdW50ZGF0YS0+YWRkcik7DQo+IC0gICAg ICAgcmV0dXJuIG1udDsNCj4gKw0KPiArICAgICAgIHJldHVybiByZXQ7DQo+ICB9DQo+IA0KPiAg LyoqDQo+IEBAIC0yOTMsMzggKzM0MCwzMSBAQCBzdGF0aWMgc3RydWN0IHZmc21vdW50ICp0cnlf bG9jYXRpb24oc3RydWN0DQo+IG5mc19jbG9uZV9tb3VudCAqbW91bnRkYXRhLA0KPiAgICogQGxv Y2F0aW9uczogYXJyYXkgb2YgTkZTdjQgc2VydmVyIGxvY2F0aW9uIGluZm9ybWF0aW9uDQo+ICAg Kg0KPiAgICovDQo+IC1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpuZnNfZm9sbG93X3JlZmVycmFs KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbnMNCj4gKmxvY2F0aW9u cykNCj4gK3N0YXRpYyBpbnQgbmZzX2ZvbGxvd19yZWZlcnJhbChzdHJ1Y3QgZnNfY29udGV4dCAq ZmMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9m c19sb2NhdGlvbnMgKmxvY2F0aW9ucykNCj4gIHsNCj4gLSAgICAgICBzdHJ1Y3QgdmZzbW91bnQg Km1udCA9IEVSUl9QVFIoLUVOT0VOVCk7DQo+IC0gICAgICAgc3RydWN0IG5mc19jbG9uZV9tb3Vu dCBtb3VudGRhdGEgPSB7DQo+IC0gICAgICAgICAgICAgICAuc2IgPSBkZW50cnktPmRfc2IsDQo+ IC0gICAgICAgICAgICAgICAuZGVudHJ5ID0gZGVudHJ5LA0KPiAtICAgICAgICAgICAgICAgLmF1 dGhmbGF2b3IgPSBORlNfU0IoZGVudHJ5LT5kX3NiKS0+Y2xpZW50LT5jbF9hdXRoLQ0KPiA+YXVf Zmxhdm9yLA0KPiAtICAgICAgIH07DQo+IC0gICAgICAgY2hhciAqcGFnZSA9IE5VTEwsICpwYWdl MiA9IE5VTEw7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBuZnNfZmMy Y29udGV4dChmYyk7DQo+ICsgICAgICAgY2hhciAqZXhwb3J0X3BhdGg7DQo+ICAgICAgICAgaW50 IGxvYywgZXJyb3I7DQo+IA0KPiAgICAgICAgIGlmIChsb2NhdGlvbnMgPT0gTlVMTCB8fCBsb2Nh dGlvbnMtPm5sb2NhdGlvbnMgPD0gMCkNCj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7DQo+IA0KPiAtICAgICAgIGRwcmludGsoIiVz OiByZWZlcnJhbCBhdCAlcGQyXG4iLCBfX2Z1bmNfXywgZGVudHJ5KTsNCj4gKyAgICAgICBkcHJp bnRrKCIlczogcmVmZXJyYWwgYXQgJXBkMlxuIiwgX19mdW5jX18sIGN0eC0+Y2xvbmVfZGF0YS5k ZW50cnkpOw0KPiANCj4gLSAgICAgICBwYWdlID0gKGNoYXIgKikgX19nZXRfZnJlZV9wYWdlKEdG UF9VU0VSKTsNCj4gLSAgICAgICBpZiAoIXBhZ2UpDQo+IC0gICAgICAgICAgICAgICBnb3RvIG91 dDsNCj4gKyAgICAgICBleHBvcnRfcGF0aCA9IG5mczRfcGF0aG5hbWVfc3RyaW5nKCZsb2NhdGlv bnMtPmZzX3BhdGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmY3R4LT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoX2xlbik7DQo+ICsgICAgICAgaWYgKElTX0VS UihleHBvcnRfcGF0aCkpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihleHBvcnRf cGF0aCk7DQo+IA0KPiAtICAgICAgIHBhZ2UyID0gKGNoYXIgKikgX19nZXRfZnJlZV9wYWdlKEdG UF9VU0VSKTsNCj4gLSAgICAgICBpZiAoIXBhZ2UyKQ0KPiAtICAgICAgICAgICAgICAgZ290byBv dXQ7DQo+ICsgICAgICAgY3R4LT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoID0gZXhwb3J0X3BhdGg7 DQo+IA0KPiAgICAgICAgIC8qIEVuc3VyZSBmcyBwYXRoIGlzIGEgcHJlZml4IG9mIGN1cnJlbnQg ZGVudHJ5IHBhdGggKi8NCj4gLSAgICAgICBlcnJvciA9IG5mczRfdmFsaWRhdGVfZnNwYXRoKGRl bnRyeSwgbG9jYXRpb25zLCBwYWdlLCBwYWdlMik7DQo+IC0gICAgICAgaWYgKGVycm9yIDwgMCkg ew0KPiAtICAgICAgICAgICAgICAgbW50ID0gRVJSX1BUUihlcnJvcik7DQo+IC0gICAgICAgICAg ICAgICBnb3RvIG91dDsNCj4gLSAgICAgICB9DQo+ICsgICAgICAgZXJyb3IgPSBuZnM0X3ZhbGlk YXRlX2ZzcGF0aChjdHgtPmNsb25lX2RhdGEuZGVudHJ5LCBsb2NhdGlvbnMsIGN0eCk7DQo+ICsg ICAgICAgaWYgKGVycm9yIDwgMCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsNCj4g DQo+ICsgICAgICAgZXJyb3IgPSAtRU5PRU5UOw0KPiAgICAgICAgIGZvciAobG9jID0gMDsgbG9j IDwgbG9jYXRpb25zLT5ubG9jYXRpb25zOyBsb2MrKykgew0KPiAgICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxvY2F0aW9uID0gJmxvY2F0aW9ucy0NCj4gPmxv Y2F0aW9uc1tsb2NdOw0KPiANCj4gQEAgLTMzMiwxNSArMzcyLDEyIEBAIHN0YXRpYyBzdHJ1Y3Qg dmZzbW91bnQgKm5mc19mb2xsb3dfcmVmZXJyYWwoc3RydWN0DQo+IGRlbnRyeSAqZGVudHJ5LA0K PiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5yb290cGF0aC5uY29tcG9uZW50cyA9PSAw KQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gDQo+IC0gICAgICAgICAg ICAgICBtbnQgPSB0cnlfbG9jYXRpb24oJm1vdW50ZGF0YSwgcGFnZSwgcGFnZTIsIGxvY2F0aW9u KTsNCj4gLSAgICAgICAgICAgICAgIGlmICghSVNfRVJSKG1udCkpDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAgICAgZXJyb3IgPSB0cnlfbG9jYXRpb24o ZmMsIGxvY2F0aW9uKTsNCj4gKyAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSAwKQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gICAgICAgICB9DQo+IA0KPiAtb3V0Og0K PiAtICAgICAgIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7DQo+IC0gICAgICAgZnJl ZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlMik7DQo+IC0gICAgICAgcmV0dXJuIG1udDsNCj4g KyAgICAgICByZXR1cm4gZXJyb3I7DQo+ICB9DQo+IA0KPiAgLyoNCj4gQEAgLTM0OCw3MSArMzg1 LDczIEBAIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm5mc19mb2xsb3dfcmVmZXJyYWwoc3RydWN0 DQo+IGRlbnRyeSAqZGVudHJ5LA0KPiAgICogQGRlbnRyeSAtIGRlbnRyeSBvZiByZWZlcnJhbA0K PiAgICoNCj4gICAqLw0KPiAtc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbmZzX2RvX3JlZm1vdW50 KHN0cnVjdCBycGNfY2xudCAqY2xpZW50LCBzdHJ1Y3QNCj4gZGVudHJ5ICpkZW50cnkpDQo+ICtz dGF0aWMgaW50IG5mc19kb19yZWZtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBy cGNfY2xudCAqY2xpZW50KQ0KPiAgew0KPiAtICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50ID0g RVJSX1BUUigtRU5PTUVNKTsNCj4gLSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7DQo+ICsg ICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ ICsgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqcGFyZW50Ow0KPiAgICAgICAgIHN0cnVj dCBuZnM0X2ZzX2xvY2F0aW9ucyAqZnNfbG9jYXRpb25zID0gTlVMTDsNCj4gICAgICAgICBzdHJ1 Y3QgcGFnZSAqcGFnZTsNCj4gLSAgICAgICBpbnQgZXJyOw0KPiArICAgICAgIGludCBlcnIgPSAt RU5PTUVNOw0KPiANCj4gICAgICAgICAvKiBCVUdfT04oSVNfUk9PVChkZW50cnkpKTsgKi8NCj4g ICAgICAgICBwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsNCj4gLSAgICAgICBpZiAocGFn ZSA9PSBOVUxMKQ0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIG1udDsNCj4gKyAgICAgICBpZiAo IXBhZ2UpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gDQo+ICAgICAgICAg ZnNfbG9jYXRpb25zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mczRfZnNfbG9jYXRpb25zKSwg R0ZQX0tFUk5FTCk7DQo+IC0gICAgICAgaWYgKGZzX2xvY2F0aW9ucyA9PSBOVUxMKQ0KPiArICAg ICAgIGlmICghZnNfbG9jYXRpb25zKQ0KPiAgICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZTsN Cj4gDQo+ICAgICAgICAgLyogR2V0IGxvY2F0aW9ucyAqLw0KPiAtICAgICAgIG1udCA9IEVSUl9Q VFIoLUVOT0VOVCk7DQo+IC0NCj4gKyAgICAgICBkZW50cnkgPSBjdHgtPmNsb25lX2RhdGEuZGVu dHJ5Ow0KPiAgICAgICAgIHBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7DQo+ICAgICAgICAg ZHByaW50aygiJXM6IGdldHRpbmcgbG9jYXRpb25zIGZvciAlcGQyXG4iLA0KPiAgICAgICAgICAg ICAgICAgX19mdW5jX18sIGRlbnRyeSk7DQo+IA0KPiAgICAgICAgIGVyciA9IG5mczRfcHJvY19m c19sb2NhdGlvbnMoY2xpZW50LCBkX2lub2RlKHBhcmVudCksICZkZW50cnktPmRfbmFtZSwgDQo+ IGZzX2xvY2F0aW9ucywgcGFnZSk7DQo+ICAgICAgICAgZHB1dChwYXJlbnQpOw0KPiAtICAgICAg IGlmIChlcnIgIT0gMCB8fA0KPiAtICAgICAgICAgICBmc19sb2NhdGlvbnMtPm5sb2NhdGlvbnMg PD0gMCB8fA0KPiArICAgICAgIGlmIChlcnIgIT0gMCkNCj4gKyAgICAgICAgICAgICAgIGdvdG8g b3V0X2ZyZWVfMjsNCj4gKw0KPiArICAgICAgIGVyciA9IC1FTk9FTlQ7DQo+ICsgICAgICAgaWYg KGZzX2xvY2F0aW9ucy0+bmxvY2F0aW9ucyA8PSAwIHx8DQo+ICAgICAgICAgICAgIGZzX2xvY2F0 aW9ucy0+ZnNfcGF0aC5uY29tcG9uZW50cyA8PSAwKQ0KPiAtICAgICAgICAgICAgICAgZ290byBv dXRfZnJlZTsNCj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X2ZyZWVfMjsNCj4gDQo+IC0gICAg ICAgbW50ID0gbmZzX2ZvbGxvd19yZWZlcnJhbChkZW50cnksIGZzX2xvY2F0aW9ucyk7DQo+ICsg ICAgICAgZXJyID0gbmZzX2ZvbGxvd19yZWZlcnJhbChmYywgZnNfbG9jYXRpb25zKTsNCj4gK291 dF9mcmVlXzI6DQo+ICsgICAgICAga2ZyZWUoZnNfbG9jYXRpb25zKTsNCj4gIG91dF9mcmVlOg0K PiAgICAgICAgIF9fZnJlZV9wYWdlKHBhZ2UpOw0KPiAtICAgICAgIGtmcmVlKGZzX2xvY2F0aW9u cyk7DQo+IC0gICAgICAgcmV0dXJuIG1udDsNCj4gKyAgICAgICByZXR1cm4gZXJyOw0KPiAgfQ0K PiANCj4gLXN0cnVjdCB2ZnNtb3VudCAqbmZzNF9zdWJtb3VudChzdHJ1Y3QgbmZzX3NlcnZlciAq c2VydmVyLCBzdHJ1Y3QgZGVudHJ5DQo+ICpkZW50cnksDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICpmaCwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpDQo+ ICtpbnQgbmZzNF9zdWJtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBuZnNfc2Vy dmVyICpzZXJ2ZXIpDQo+ICB7DQo+IC0gICAgICAgcnBjX2F1dGhmbGF2b3JfdCBmbGF2b3IgPSBz ZXJ2ZXItPmNsaWVudC0+Y2xfYXV0aC0+YXVfZmxhdm9yOw0KPiArICAgICAgIHN0cnVjdCBuZnNf ZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiArICAgICAgIHN0cnVjdCBk ZW50cnkgKmRlbnRyeSA9IGN0eC0+Y2xvbmVfZGF0YS5kZW50cnk7DQo+ICAgICAgICAgc3RydWN0 IGRlbnRyeSAqcGFyZW50ID0gZGdldF9wYXJlbnQoZGVudHJ5KTsNCj4gICAgICAgICBzdHJ1Y3Qg aW5vZGUgKmRpciA9IGRfaW5vZGUocGFyZW50KTsNCj4gICAgICAgICBjb25zdCBzdHJ1Y3QgcXN0 ciAqbmFtZSA9ICZkZW50cnktPmRfbmFtZTsNCj4gICAgICAgICBzdHJ1Y3QgcnBjX2NsbnQgKmNs aWVudDsNCj4gLSAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udDsNCj4gKyAgICAgICBpbnQgcmV0 Ow0KPiANCj4gICAgICAgICAvKiBMb29rIGl0IHVwIGFnYWluIHRvIGdldCBpdHMgYXR0cmlidXRl cyBhbmQgc2VjIGZsYXZvciAqLw0KPiAtICAgICAgIGNsaWVudCA9IG5mczRfcHJvY19sb29rdXBf bW91bnRwb2ludChkaXIsIG5hbWUsIGZoLCBmYXR0cik7DQo+ICsgICAgICAgY2xpZW50ID0gbmZz NF9wcm9jX2xvb2t1cF9tb3VudHBvaW50KGRpciwgbmFtZSwgY3R4LT5tbnRmaCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5jbG9uZV9kYXRhLmZh dHRyKTsNCj4gICAgICAgICBkcHV0KHBhcmVudCk7DQo+ICAgICAgICAgaWYgKElTX0VSUihjbGll bnQpKQ0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9DQVNUKGNsaWVudCk7DQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gUFRSX0VSUihjbGllbnQpOw0KPiANCj4gLSAgICAgICBpZiAoZmF0 dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVjRfUkVGRVJSQUwpIHsNCj4gLSAgICAgICAgICAg ICAgIG1udCA9IG5mc19kb19yZWZtb3VudChjbGllbnQsIGRlbnRyeSk7DQo+IC0gICAgICAgICAg ICAgICBnb3RvIG91dDsNCj4gKyAgICAgICBpZiAoY3R4LT5jbG9uZV9kYXRhLmZhdHRyLT52YWxp ZCAmIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMKSB7DQo+ICsgICAgICAgICAgICAgICByZXQg PSBuZnNfZG9fcmVmbW91bnQoZmMsIGNsaWVudCk7DQo+ICsgICAgICAgfSBlbHNlIHsNCj4gKyAg ICAgICAgICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxhdm9yID0gY2xpZW50LT5jbF9hdXRoLT5hdV9m bGF2b3I7DQo+ICsgICAgICAgICAgICAgICByZXQgPSBuZnNfZG9fc3VibW91bnQoZmMpOw0KPiAg ICAgICAgIH0NCj4gDQo+IC0gICAgICAgaWYgKGNsaWVudC0+Y2xfYXV0aC0+YXVfZmxhdm9yICE9 IGZsYXZvcikNCj4gLSAgICAgICAgICAgICAgIGZsYXZvciA9IGNsaWVudC0+Y2xfYXV0aC0+YXVf Zmxhdm9yOw0KPiAtICAgICAgIG1udCA9IG5mc19kb19zdWJtb3VudChkZW50cnksIGZoLCBmYXR0 ciwgZmxhdm9yKTsNCj4gLW91dDoNCj4gICAgICAgICBycGNfc2h1dGRvd25fY2xpZW50KGNsaWVu dCk7DQo+IC0gICAgICAgcmV0dXJuIG1udDsNCj4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiAgfQ0K PiANCj4gIC8qDQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0 cHJvYy5jDQo+IGluZGV4IGMyOWNiZWY2YjUzZi4uMGVkNDdkNThhODk0IDEwMDY0NA0KPiAtLS0g YS9mcy9uZnMvbmZzNHByb2MuYw0KPiArKysgYi9mcy9uZnMvbmZzNHByb2MuYw0KPiBAQCAtOTg0 Niw3ICs5ODQ2LDcgQEAgY29uc3Qgc3RydWN0IG5mc19ycGNfb3BzIG5mc192NF9jbGllbnRvcHMg PSB7DQo+ICAgICAgICAgLmZpbGVfb3BzICAgICAgID0gJm5mczRfZmlsZV9vcGVyYXRpb25zLA0K PiAgICAgICAgIC5nZXRyb290ICAgICAgICA9IG5mczRfcHJvY19nZXRfcm9vdCwNCj4gICAgICAg ICAuc3VibW91bnQgICAgICAgPSBuZnM0X3N1Ym1vdW50LA0KPiAtICAgICAgIC50cnlfbW91bnQg ICAgICA9IG5mczRfdHJ5X21vdW50LA0KPiArICAgICAgIC50cnlfZ2V0X3RyZWUgICA9IG5mczRf dHJ5X2dldF90cmVlLA0KPiAgICAgICAgIC5nZXRhdHRyICAgICAgICA9IG5mczRfcHJvY19nZXRh dHRyLA0KPiAgICAgICAgIC5zZXRhdHRyICAgICAgICA9IG5mczRfcHJvY19zZXRhdHRyLA0KPiAg ICAgICAgIC5sb29rdXAgICAgICAgICA9IG5mczRfcHJvY19sb29rdXAsDQo+IGRpZmYgLS1naXQg YS9mcy9uZnMvbmZzNHN1cGVyLmMgYi9mcy9uZnMvbmZzNHN1cGVyLmMNCj4gaW5kZXggNDhhOWYx OTkwNGUwLi4wMjQwNDI5ZWM1OTYgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnM0c3VwZXIuYw0K PiArKysgYi9mcy9uZnMvbmZzNHN1cGVyLmMNCj4gQEAgLTMsNiArMyw3IEBADQo+ICAgKi8NCj4g ICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvbW91bnQuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9uZnM0X21vdW50 Lmg+DQo+ICAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+DQo+ICAjaW5jbHVkZSAiZGVsZWdhdGlv bi5oIg0KPiBAQCAtMTcsMTYgKzE4LDYgQEANCj4gDQo+ICBzdGF0aWMgaW50IG5mczRfd3JpdGVf aW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sDQo+ICp3 YmMpOw0KPiAgc3RhdGljIHZvaWQgbmZzNF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2Rl KTsNCj4gLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuZnM0X3JlZmVycmFsX21vdW50KHN0cnVjdCBm aWxlX3N5c3RlbV90eXBlICpmc190eXBlLA0KPiAtICAgICAgIGludCBmbGFncywgY29uc3QgY2hh ciAqZGV2X25hbWUsIHZvaWQgKnJhd19kYXRhKTsNCj4gLQ0KPiAtc3RydWN0IGZpbGVfc3lzdGVt X3R5cGUgbmZzNF9yZWZlcnJhbF9mc190eXBlID0gew0KPiAtICAgICAgIC5vd25lciAgICAgICAg ICA9IFRISVNfTU9EVUxFLA0KPiAtICAgICAgIC5uYW1lICAgICAgICAgICA9ICJuZnM0IiwNCj4g LSAgICAgICAubW91bnQgICAgICAgICAgPSBuZnM0X3JlZmVycmFsX21vdW50LA0KPiAtICAgICAg IC5raWxsX3NiICAgICAgICA9IG5mc19raWxsX3N1cGVyLA0KPiAtICAgICAgIC5mc19mbGFncyAg ICAgICA9IEZTX1JFTkFNRV9ET0VTX0RfTU9WRXxGU19CSU5BUllfTU9VTlREQVRBLA0KPiAtfTsN Cj4gDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbmZzNF9zb3BzID0g ew0KPiAgICAgICAgIC5hbGxvY19pbm9kZSAgICA9IG5mc19hbGxvY19pbm9kZSwNCj4gQEAgLTQw LDE2ICszMSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbmZzNF9z b3BzID0gew0KPiAgICAgICAgIC5zaG93X2Rldm5hbWUgICA9IG5mc19zaG93X2Rldm5hbWUsDQo+ ICAgICAgICAgLnNob3dfcGF0aCAgICAgID0gbmZzX3Nob3dfcGF0aCwNCj4gICAgICAgICAuc2hv d19zdGF0cyAgICAgPSBuZnNfc2hvd19zdGF0cywNCj4gLSAgICAgICAucmVtb3VudF9mcyAgICAg PSBuZnNfcmVtb3VudCwNCj4gIH07DQo+IA0KPiAgc3RydWN0IG5mc19zdWJ2ZXJzaW9uIG5mc192 NCA9IHsNCj4gLSAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwNCj4gLSAgICAgICAubmZzX2Zz ICAgPSAmbmZzNF9mc190eXBlLA0KPiAtICAgICAgIC5ycGNfdmVycyA9ICZuZnNfdmVyc2lvbjQs DQo+IC0gICAgICAgLnJwY19vcHMgID0gJm5mc192NF9jbGllbnRvcHMsDQo+IC0gICAgICAgLnNv cHMgICAgID0gJm5mczRfc29wcywNCj4gLSAgICAgICAueGF0dHIgICAgPSBuZnM0X3hhdHRyX2hh bmRsZXJzLA0KPiArICAgICAgIC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLA0KPiArICAg ICAgIC5uZnNfZnMgICAgICAgICA9ICZuZnM0X2ZzX3R5cGUsDQo+ICsgICAgICAgLnJwY192ZXJz ICAgICAgID0gJm5mc192ZXJzaW9uNCwNCj4gKyAgICAgICAucnBjX29wcyAgICAgICAgPSAmbmZz X3Y0X2NsaWVudG9wcywNCj4gKyAgICAgICAuc29wcyAgICAgICAgICAgPSAmbmZzNF9zb3BzLA0K PiArICAgICAgIC54YXR0ciAgICAgICAgICA9IG5mczRfeGF0dHJfaGFuZGxlcnMsDQo+ICB9Ow0K PiANCj4gIHN0YXRpYyBpbnQgbmZzNF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz dHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wNCj4gKndiYykNCj4gQEAgLTE0NiwxMDUgKzEzNiwxMjUg QEAgc3RhdGljIHZvaWQgbmZzX3JlZmVycmFsX2xvb3BfdW5wcm90ZWN0KHZvaWQpDQo+ICAgICAg ICAga2ZyZWUocCk7DQo+ICB9DQo+IA0KPiAtc3RhdGljIHN0cnVjdCBkZW50cnkgKmRvX25mczRf bW91bnQoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgaW50IGZsYWdzLA0KPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX21vdW50X2luZm8gKmluZm8sDQo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1l LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpleHBv cnRfcGF0aCkNCj4gK3N0YXRpYyBpbnQgZG9fbmZzNF9tb3VudChzdHJ1Y3QgbmZzX3NlcnZlciAq c2VydmVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZj LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpleHBvcnRfcGF0aCkNCj4gIHsNCj4g KyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKnJvb3RfY3R4Ow0KPiArICAgICAgIHN0cnVj dCBmc19jb250ZXh0ICpyb290X2ZjOw0KPiAgICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqcm9vdF9t bnQ7DQo+ICAgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5Ow0KPiAtICAgICAgIGNoYXIgKnJv b3RfZGV2bmFtZTsNCj4gLSAgICAgICBpbnQgZXJyOw0KPiAgICAgICAgIHNpemVfdCBsZW47DQo+ ICsgICAgICAgaW50IHJldDsNCj4gKw0KPiArICAgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgcGFy YW0gPSB7DQo+ICsgICAgICAgICAgICAgICAua2V5ICAgID0gInNvdXJjZSIsDQo+ICsgICAgICAg ICAgICAgICAudHlwZSAgID0gZnNfdmFsdWVfaXNfc3RyaW5nLA0KPiArICAgICAgICAgICAgICAg LmRpcmZkICA9IC0xLA0KPiArICAgICAgIH07DQo+IA0KPiAgICAgICAgIGlmIChJU19FUlIoc2Vy dmVyKSkNCj4gLSAgICAgICAgICAgICAgIHJldHVybiBFUlJfQ0FTVChzZXJ2ZXIpOw0KPiArICAg ICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoc2VydmVyKTsNCj4gDQo+IC0gICAgICAgbGVuID0g c3RybGVuKGhvc3RuYW1lKSArIDU7DQo+IC0gICAgICAgcm9vdF9kZXZuYW1lID0ga21hbGxvYyhs ZW4sIEdGUF9LRVJORUwpOw0KPiAtICAgICAgIGlmIChyb290X2Rldm5hbWUgPT0gTlVMTCkgew0K PiArICAgICAgIHJvb3RfZmMgPSB2ZnNfZHVwX2ZzX2NvbnRleHQoZmMpOw0KPiArICAgICAgIGlm IChJU19FUlIocm9vdF9mYykpIHsNCj4gICAgICAgICAgICAgICAgIG5mc19mcmVlX3NlcnZlcihz ZXJ2ZXIpOw0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ICsg ICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihyb290X2ZjKTsNCj4gKyAgICAgICB9DQo+ICsg ICAgICAga2ZyZWUocm9vdF9mYy0+c291cmNlKTsNCj4gKyAgICAgICByb290X2ZjLT5zb3VyY2Ug PSBOVUxMOw0KPiArDQo+ICsgICAgICAgcm9vdF9jdHggPSBuZnNfZmMyY29udGV4dChyb290X2Zj KTsNCj4gKyAgICAgICByb290X2N0eC0+aW50ZXJuYWwgPSB0cnVlOw0KPiArICAgICAgIHJvb3Rf Y3R4LT5zZXJ2ZXIgPSBzZXJ2ZXI7DQo+ICsgICAgICAgLyogV2UgbGVhdmUgZXhwb3J0X3BhdGgg dW5zZXQgYXMgaXQncyBub3QgdXNlZCB0byBmaW5kIHRoZSByb290LiAqLw0KPiArDQo+ICsgICAg ICAgbGVuID0gc3RybGVuKGhvc3RuYW1lKSArIDU7DQo+ICsgICAgICAgcGFyYW0uc3RyaW5nID0g a21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOw0KPiArICAgICAgIGlmIChwYXJhbS5zdHJpbmcgPT0g TlVMTCkgew0KPiArICAgICAgICAgICAgICAgcHV0X2ZzX2NvbnRleHQocm9vdF9mYyk7DQo+ICsg ICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gICAgICAgICB9DQo+IA0KPiAgICAgICAg IC8qIERvZXMgaG9zdG5hbWUgbmVlZHMgdG8gYmUgZW5jbG9zZWQgaW4gYnJhY2tldHM/ICovDQo+ ICAgICAgICAgaWYgKHN0cmNocihob3N0bmFtZSwgJzonKSkNCj4gLSAgICAgICAgICAgICAgIHNu cHJpbnRmKHJvb3RfZGV2bmFtZSwgbGVuLCAiWyVzXTovIiwgaG9zdG5hbWUpOw0KPiArICAgICAg ICAgICAgICAgcGFyYW0uc2l6ZSA9IHNucHJpbnRmKHBhcmFtLnN0cmluZywgbGVuLCAiWyVzXTov IiwgaG9zdG5hbWUpOw0KPiAgICAgICAgIGVsc2UNCj4gLSAgICAgICAgICAgICAgIHNucHJpbnRm KHJvb3RfZGV2bmFtZSwgbGVuLCAiJXM6LyIsIGhvc3RuYW1lKTsNCj4gLSAgICAgICBpbmZvLT5z ZXJ2ZXIgPSBzZXJ2ZXI7DQo+IC0gICAgICAgcm9vdF9tbnQgPSB2ZnNfa2Vybl9tb3VudCgmbmZz X3ByZXBhcmVkX2ZzX3R5cGUsIGZsYWdzLCByb290X2Rldm5hbWUsDQo+IGluZm8pOw0KPiAtICAg ICAgIGlmIChpbmZvLT5zZXJ2ZXIpDQo+IC0gICAgICAgICAgICAgICBuZnNfZnJlZV9zZXJ2ZXIo aW5mby0+c2VydmVyKTsNCj4gLSAgICAgICBpbmZvLT5zZXJ2ZXIgPSBOVUxMOw0KPiAtICAgICAg IGtmcmVlKHJvb3RfZGV2bmFtZSk7DQo+ICsgICAgICAgICAgICAgICBwYXJhbS5zaXplID0gc25w cmludGYocGFyYW0uc3RyaW5nLCBsZW4sICIlczovIiwgaG9zdG5hbWUpOw0KPiArICAgICAgIHJl dCA9IHZmc19wYXJzZV9mc19wYXJhbShyb290X2ZjLCAmcGFyYW0pOw0KPiArICAgICAgIGtmcmVl KHBhcmFtLnN0cmluZyk7DQo+ICsgICAgICAgaWYgKHJldCA8IDApIHsNCj4gKyAgICAgICAgICAg ICAgIHB1dF9mc19jb250ZXh0KHJvb3RfZmMpOw0KPiArICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgcm9vdF9tbnQgPSBmY19tb3VudChyb290X2ZjKTsN Cj4gKyAgICAgICBwdXRfZnNfY29udGV4dChyb290X2ZjKTsNCj4gDQo+ICAgICAgICAgaWYgKElT X0VSUihyb290X21udCkpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gRVJSX0NBU1Qocm9vdF9t bnQpOw0KPiArICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocm9vdF9tbnQpOw0KPiANCj4g LSAgICAgICBlcnIgPSBuZnNfcmVmZXJyYWxfbG9vcF9wcm90ZWN0KCk7DQo+IC0gICAgICAgaWYg KGVycikgew0KPiArICAgICAgIHJldCA9IG5mc19yZWZlcnJhbF9sb29wX3Byb3RlY3QoKTsNCj4g KyAgICAgICBpZiAocmV0KSB7DQo+ICAgICAgICAgICAgICAgICBtbnRwdXQocm9vdF9tbnQpOw0K PiAtICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoZXJyKTsNCj4gKyAgICAgICAgICAgICAg IHJldHVybiByZXQ7DQo+ICAgICAgICAgfQ0KPiANCj4gICAgICAgICBkZW50cnkgPSBtb3VudF9z dWJ0cmVlKHJvb3RfbW50LCBleHBvcnRfcGF0aCk7DQo+ICAgICAgICAgbmZzX3JlZmVycmFsX2xv b3BfdW5wcm90ZWN0KCk7DQo+IA0KPiAtICAgICAgIHJldHVybiBkZW50cnk7DQo+ICsgICAgICAg aWYgKElTX0VSUihkZW50cnkpKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoZGVu dHJ5KTsNCj4gKw0KPiArICAgICAgIGZjLT5yb290ID0gZGVudHJ5Ow0KPiArICAgICAgIHJldHVy biAwOw0KPiAgfQ0KPiANCj4gLXN0cnVjdCBkZW50cnkgKm5mczRfdHJ5X21vdW50KGludCBmbGFn cywgY29uc3QgY2hhciAqZGV2X25hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBuZnNfbW91bnRfaW5mbyAqbW91bnRfaW5mbykNCj4gK2ludCBuZnM0X3RyeV9nZXRf dHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpDQo+ICB7DQo+IC0gICAgICAgc3RydWN0IG5mc19m c19jb250ZXh0ICpjdHggPSBtb3VudF9pbmZvLT5jdHg7DQo+IC0gICAgICAgc3RydWN0IGRlbnRy eSAqcmVzOw0KPiAtDQo+IC0gICAgICAgZGZwcmludGsoTU9VTlQsICItLT4gbmZzNF90cnlfbW91 bnQoKVxuIik7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBuZnNfZmMy Y29udGV4dChmYyk7DQo+ICsgICAgICAgaW50IGVycjsNCj4gDQo+IC0gICAgICAgcmVzID0gZG9f bmZzNF9tb3VudChuZnM0X2NyZWF0ZV9zZXJ2ZXIobW91bnRfaW5mbyksDQo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICBmbGFncywgbW91bnRfaW5mbywNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5ob3N0bmFtZSwNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCk7DQo+ICsgICAgICAgZGZwcmlu dGsoTU9VTlQsICItLT4gbmZzNF90cnlfZ2V0X3RyZWUoKVxuIik7DQo+IA0KPiAtICAgICAgIGRm cHJpbnRrKE1PVU5ULCAiPC0tIG5mczRfdHJ5X21vdW50KCkgPSAlZCVzXG4iLA0KPiAtICAgICAg ICAgICAgICAgIFBUUl9FUlJfT1JfWkVSTyhyZXMpLA0KPiAtICAgICAgICAgICAgICAgIElTX0VS UihyZXMpID8gIiBbZXJyb3JdIiA6ICIiKTsNCj4gLSAgICAgICByZXR1cm4gcmVzOw0KPiArICAg ICAgIC8qIFdlIGNyZWF0ZSBhIG1vdW50IGZvciB0aGUgc2VydmVyJ3Mgcm9vdCwgd2FsayB0byB0 aGUgcmVxdWVzdGVkDQo+ICsgICAgICAgICogbG9jYXRpb24gYW5kIHRoZW4gY3JlYXRlIGFub3Ro ZXIgbW91bnQgZm9yIHRoYXQuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgZXJyPSBkb19uZnM0 X21vdW50KG5mczRfY3JlYXRlX3NlcnZlcihmYyksDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIGZjLCBjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIGN0eC0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCk7DQo+ICsgICAgICAgaWYgKGVycikg ew0KPiArICAgICAgICAgICAgICAgbmZzX2Vycm9yZihmYywgIk5GUzQ6IENvdWxkbid0IGZvbGxv dyByZW1vdGUgcGF0aCIpOw0KPiArICAgICAgICAgICAgICAgZGZwcmludGsoTU9VTlQsICI8LS0g bmZzNF90cnlfbW91bnQoKSA9ICVkIFtlcnJvcl1cbiIsIGVycik7DQo+ICsgICAgICAgfSBlbHNl IHsNCj4gKyAgICAgICAgICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiPC0tIG5mczRfdHJ5X2dldF90 cmVlKCkgPSAwXG4iKTsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgcmV0dXJuIGVycjsNCj4gIH0N Cj4gDQo+ICAvKg0KPiAgICogQ3JlYXRlIGFuIE5GUzQgc2VydmVyIHJlY29yZCBvbiByZWZlcnJh bCB0cmF2ZXJzYWwNCj4gICAqLw0KPiAtc3RhdGljIHN0cnVjdCBkZW50cnkgKm5mczRfcmVmZXJy YWxfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsDQo+IC0gICAgICAgICAg ICAgICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpyYXdfZGF0YSkNCj4g K2ludCBuZnM0X2dldF9yZWZlcnJhbF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykNCj4gIHsN Cj4gLSAgICAgICBzdHJ1Y3QgbmZzX2Nsb25lX21vdW50ICpkYXRhID0gcmF3X2RhdGE7DQo+IC0g ICAgICAgc3RydWN0IG5mc19tb3VudF9pbmZvIG1vdW50X2luZm8gPSB7DQo+IC0gICAgICAgICAg ICAgICAuY2xvbmVkID0gZGF0YSwNCj4gLSAgICAgICAgICAgICAgIC5uZnNfbW9kID0gJm5mc192 NCwNCj4gLSAgICAgICB9Ow0KPiAtICAgICAgIHN0cnVjdCBkZW50cnkgKnJlczsNCj4gKyAgICAg ICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4gKyAg ICAgICBpbnQgZXJyOw0KPiANCj4gICAgICAgICBkcHJpbnRrKCItLT4gbmZzNF9yZWZlcnJhbF9t b3VudCgpXG4iKTsNCj4gDQo+IC0gICAgICAgbW91bnRfaW5mby5tbnRmaCA9IG5mc19hbGxvY19m aGFuZGxlKCk7DQo+IC0gICAgICAgaWYgKCFtb3VudF9pbmZvLm1udGZoKQ0KPiAtICAgICAgICAg ICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+IC0NCj4gLSAgICAgICByZXMgPSBkb19u ZnM0X21vdW50KG5mczRfY3JlYXRlX3JlZmVycmFsX3NlcnZlcihtb3VudF9pbmZvLmNsb25lZCwN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtb3VudF9pbmZvLm1udGZoKSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdz LCAmbW91bnRfaW5mbywgZGF0YS0+aG9zdG5hbWUsIGRhdGEtDQo+ID5tbnRfcGF0aCk7DQo+IC0N Cj4gLSAgICAgICBkcHJpbnRrKCI8LS0gbmZzNF9yZWZlcnJhbF9tb3VudCgpID0gJWQlc1xuIiwN Cj4gLSAgICAgICAgICAgICAgIFBUUl9FUlJfT1JfWkVSTyhyZXMpLA0KPiAtICAgICAgICAgICAg ICAgSVNfRVJSKHJlcykgPyAiIFtlcnJvcl0iIDogIiIpOw0KPiAtDQo+IC0gICAgICAgbmZzX2Zy ZWVfZmhhbmRsZShtb3VudF9pbmZvLm1udGZoKTsNCj4gLSAgICAgICByZXR1cm4gcmVzOw0KPiAr ICAgICAgIC8qIGNyZWF0ZSBhIG5ldyB2b2x1bWUgcmVwcmVzZW50YXRpb24gKi8NCj4gKyAgICAg ICBlcnIgPSBkb19uZnM0X21vdW50KG5mczRfY3JlYXRlX3JlZmVycmFsX3NlcnZlcihmYyksDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBmYywgY3R4LT5uZnNfc2VydmVyLmhvc3RuYW1l LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmV4cG9ydF9w YXRoKTsNCj4gKyAgICAgICBpZiAoZXJyKSB7DQo+ICsgICAgICAgICAgICAgICBuZnNfZXJyb3Jm KGZjLCAiTkZTNDogQ291bGRuJ3QgZm9sbG93IHJlbW90ZSBwYXRoIik7DQo+ICsgICAgICAgICAg ICAgICBkZnByaW50ayhNT1VOVCwgIjwtLSBuZnM0X3JlZmVycmFsX21vdW50KCkgPSAlZCBbZXJy b3JdXG4iLA0KPiBlcnIpOw0KPiArICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICBk ZnByaW50ayhNT1VOVCwgIjwtLSBuZnM0X2dldF9yZWZlcnJhbF90cmVlKCkgPSAwXG4iKTsNCj4g KyAgICAgICB9DQo+ICsgICAgICAgcmV0dXJuIGVycjsNCj4gIH0NCj4gDQo+IC0NCj4gIHN0YXRp YyBpbnQgX19pbml0IGluaXRfbmZzX3Y0KHZvaWQpDQo+ICB7DQo+ICAgICAgICAgaW50IGVycjsN Cj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9wcm9jLmMgYi9mcy9uZnMvcHJvYy5jDQo+IGluZGV4IDU1 NTJmYThiNmUxMi4uMDNiMTc1ZmQ5NGI5IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvcHJvYy5jDQo+ ICsrKyBiL2ZzL25mcy9wcm9jLmMNCj4gQEAgLTcwNyw3ICs3MDcsNyBAQCBjb25zdCBzdHJ1Y3Qg bmZzX3JwY19vcHMgbmZzX3YyX2NsaWVudG9wcyA9IHsNCj4gICAgICAgICAuZmlsZV9vcHMgICAg ICAgPSAmbmZzX2ZpbGVfb3BlcmF0aW9ucywNCj4gICAgICAgICAuZ2V0cm9vdCAgICAgICAgPSBu ZnNfcHJvY19nZXRfcm9vdCwNCj4gICAgICAgICAuc3VibW91bnQgICAgICAgPSBuZnNfc3VibW91 bnQsDQo+IC0gICAgICAgLnRyeV9tb3VudCAgICAgID0gbmZzX3RyeV9tb3VudCwNCj4gKyAgICAg ICAudHJ5X2dldF90cmVlICAgPSBuZnNfdHJ5X2dldF90cmVlLA0KPiAgICAgICAgIC5nZXRhdHRy ICAgICAgICA9IG5mc19wcm9jX2dldGF0dHIsDQo+ICAgICAgICAgLnNldGF0dHIgICAgICAgID0g bmZzX3Byb2Nfc2V0YXR0ciwNCj4gICAgICAgICAubG9va3VwICAgICAgICAgPSBuZnNfcHJvY19s b29rdXAsDQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jDQo+ IGluZGV4IDVjOGNmMGUzNTE0MS4uYzQ1NWViZWVhZGM5IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMv c3VwZXIuYw0KPiArKysgYi9mcy9uZnMvc3VwZXIuYw0KPiBAQCAtNjksMjggKzY5LDYgQEANCj4g DQo+ICAjZGVmaW5lIE5GU0RCR19GQUNJTElUWSAgICAgICAgICAgICAgICBORlNEQkdfVkZTDQo+ IA0KPiAtc3RhdGljIHN0cnVjdCBkZW50cnkgKm5mc19wcmVwYXJlZF9tb3VudChzdHJ1Y3QgZmls ZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwNCj4gLSAgICAgICAgICAgICAgIGludCBmbGFncywgY29u c3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKnJhd19kYXRhKTsNCj4gLQ0KPiAtc3RydWN0IGZpbGVf c3lzdGVtX3R5cGUgbmZzX2ZzX3R5cGUgPSB7DQo+IC0gICAgICAgLm93bmVyICAgICAgICAgID0g VEhJU19NT0RVTEUsDQo+IC0gICAgICAgLm5hbWUgICAgICAgICAgID0gIm5mcyIsDQo+IC0gICAg ICAgLm1vdW50ICAgICAgICAgID0gbmZzX2ZzX21vdW50LA0KPiAtICAgICAgIC5raWxsX3NiICAg ICAgICA9IG5mc19raWxsX3N1cGVyLA0KPiAtICAgICAgIC5mc19mbGFncyAgICAgICA9IEZTX1JF TkFNRV9ET0VTX0RfTU9WRXxGU19CSU5BUllfTU9VTlREQVRBLA0KPiAtfTsNCj4gLU1PRFVMRV9B TElBU19GUygibmZzIik7DQo+IC1FWFBPUlRfU1lNQk9MX0dQTChuZnNfZnNfdHlwZSk7DQo+IC0N Cj4gLXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG5mc19wcmVwYXJlZF9mc190eXBlID0gew0KPiAt ICAgICAgIC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLA0KPiAtICAgICAgIC5uYW1lICAg ICAgICAgICA9ICJuZnMiLA0KPiAtICAgICAgIC5tb3VudCAgICAgICAgICA9IG5mc19wcmVwYXJl ZF9tb3VudCwNCj4gLSAgICAgICAua2lsbF9zYiAgICAgICAgPSBuZnNfa2lsbF9zdXBlciwNCj4g LSAgICAgICAuZnNfZmxhZ3MgICAgICAgPSBGU19SRU5BTUVfRE9FU19EX01PVkV8RlNfQklOQVJZ X01PVU5UREFUQSwNCj4gLX07DQo+IC1FWFBPUlRfU1lNQk9MX0dQTChuZnNfcHJlcGFyZWRfZnNf dHlwZSk7DQo+IC0NCj4gIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG5mc19zb3BzID0g ew0KPiAgICAgICAgIC5hbGxvY19pbm9kZSAgICA9IG5mc19hbGxvY19pbm9kZSwNCj4gICAgICAg ICAuZnJlZV9pbm9kZSAgICAgPSBuZnNfZnJlZV9pbm9kZSwNCj4gQEAgLTEwMywyMiArODEsMTAg QEAgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbmZzX3NvcHMgPSB7DQo+ICAgICAgICAg LnNob3dfZGV2bmFtZSAgID0gbmZzX3Nob3dfZGV2bmFtZSwNCj4gICAgICAgICAuc2hvd19wYXRo ICAgICAgPSBuZnNfc2hvd19wYXRoLA0KPiAgICAgICAgIC5zaG93X3N0YXRzICAgICA9IG5mc19z aG93X3N0YXRzLA0KPiAtICAgICAgIC5yZW1vdW50X2ZzICAgICA9IG5mc19yZW1vdW50LA0KPiAg fTsNCj4gIEVYUE9SVF9TWU1CT0xfR1BMKG5mc19zb3BzKTsNCj4gDQo+ICAjaWYgSVNfRU5BQkxF RChDT05GSUdfTkZTX1Y0KQ0KPiAtc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzNF9mc190eXBl ID0gew0KPiAtICAgICAgIC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLA0KPiAtICAgICAg IC5uYW1lICAgICAgICAgICA9ICJuZnM0IiwNCj4gLSAgICAgICAubW91bnQgICAgICAgICAgPSBu ZnNfZnNfbW91bnQsDQo+IC0gICAgICAgLmtpbGxfc2IgICAgICAgID0gbmZzX2tpbGxfc3VwZXIs DQo+IC0gICAgICAgLmZzX2ZsYWdzICAgICAgID0gRlNfUkVOQU1FX0RPRVNfRF9NT1ZFfEZTX0JJ TkFSWV9NT1VOVERBVEEsDQo+IC19Ow0KPiAtTU9EVUxFX0FMSUFTX0ZTKCJuZnM0Iik7DQo+IC1N T0RVTEVfQUxJQVMoIm5mczQiKTsNCj4gLUVYUE9SVF9TWU1CT0xfR1BMKG5mczRfZnNfdHlwZSk7 DQo+IC0NCj4gIHN0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX25mczRfZnModm9pZCkNCj4gIHsN Cj4gICAgICAgICByZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmbmZzNF9mc190eXBlKTsNCj4g QEAgLTcxNCwxMSArNjgwLDExIEBAIGJvb2wgbmZzX2F1dGhfaW5mb19tYXRjaChjb25zdCBzdHJ1 Y3QgbmZzX2F1dGhfaW5mbw0KPiAqYXV0aF9pbmZvLA0KPiAgRVhQT1JUX1NZTUJPTF9HUEwobmZz X2F1dGhfaW5mb19tYXRjaCk7DQo+IA0KPiAgLyoNCj4gLSAqIEVuc3VyZSB0aGF0IGEgc3BlY2lm aWVkIGF1dGh0eXBlIGluIGNmZy0+YXV0aF9pbmZvIGlzIHN1cHBvcnRlZCBieQ0KPiAtICogdGhl IHNlcnZlci4gUmV0dXJucyAwIGFuZCBzZXRzIGNmZy0+c2VsZWN0ZWRfZmxhdm9yIGlmIGl0J3Mg b2ssIGFuZA0KPiArICogRW5zdXJlIHRoYXQgYSBzcGVjaWZpZWQgYXV0aHR5cGUgaW4gY3R4LT5h dXRoX2luZm8gaXMgc3VwcG9ydGVkIGJ5DQo+ICsgKiB0aGUgc2VydmVyLiBSZXR1cm5zIDAgYW5k IHNldHMgY3R4LT5zZWxlY3RlZF9mbGF2b3IgaWYgaXQncyBvaywgYW5kDQo+ICAgKiAtRUFDQ0VT IGlmIG5vdC4NCj4gICAqLw0KPiAtc3RhdGljIGludCBuZnNfdmVyaWZ5X2F1dGhmbGF2b3JzKHN0 cnVjdCBuZnNfZnNfY29udGV4dCAqY2ZnLA0KPiArc3RhdGljIGludCBuZnNfdmVyaWZ5X2F1dGhm bGF2b3JzKHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcnBjX2F1dGhmbGF2b3JfdCAqc2VydmVyX2F1dGhsaXN0LA0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50KQ0KPiAgew0K PiBAQCAtNzQxLDcgKzcwNyw3IEBAIHN0YXRpYyBpbnQgbmZzX3ZlcmlmeV9hdXRoZmxhdm9ycyhz dHJ1Y3QgbmZzX2ZzX2NvbnRleHQNCj4gKmNmZywNCj4gICAgICAgICBmb3IgKGkgPSAwOyBpIDwg Y291bnQ7IGkrKykgew0KPiAgICAgICAgICAgICAgICAgZmxhdm9yID0gc2VydmVyX2F1dGhsaXN0 W2ldOw0KPiANCj4gLSAgICAgICAgICAgICAgIGlmIChuZnNfYXV0aF9pbmZvX21hdGNoKCZjZmct PmF1dGhfaW5mbywgZmxhdm9yKSkNCj4gKyAgICAgICAgICAgICAgIGlmIChuZnNfYXV0aF9pbmZv X21hdGNoKCZjdHgtPmF1dGhfaW5mbywgZmxhdm9yKSkNCj4gICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBvdXQ7DQo+IA0KPiAgICAgICAgICAgICAgICAgaWYgKGZsYXZvciA9PSBSUENfQVVU SF9OVUxMKQ0KPiBAQCAtNzQ5LDcgKzcxNSw3IEBAIHN0YXRpYyBpbnQgbmZzX3ZlcmlmeV9hdXRo Zmxhdm9ycyhzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQNCj4gKmNmZywNCj4gICAgICAgICB9DQo+IA0K PiAgICAgICAgIGlmIChmb3VuZF9hdXRoX251bGwpIHsNCj4gLSAgICAgICAgICAgICAgIGZsYXZv ciA9IGNmZy0+YXV0aF9pbmZvLmZsYXZvcnNbMF07DQo+ICsgICAgICAgICAgICAgICBmbGF2b3Ig PSBjdHgtPmF1dGhfaW5mby5mbGF2b3JzWzBdOw0KPiAgICAgICAgICAgICAgICAgZ290byBvdXQ7 DQo+ICAgICAgICAgfQ0KPiANCj4gQEAgLTc1OCw4ICs3MjQsOCBAQCBzdGF0aWMgaW50IG5mc192 ZXJpZnlfYXV0aGZsYXZvcnMoc3RydWN0IG5mc19mc19jb250ZXh0DQo+ICpjZmcsDQo+ICAgICAg ICAgcmV0dXJuIC1FQUNDRVM7DQo+IA0KPiAgb3V0Og0KPiAtICAgICAgIGNmZy0+c2VsZWN0ZWRf Zmxhdm9yID0gZmxhdm9yOw0KPiAtICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZTOiB1c2luZyBh dXRoIGZsYXZvciAldVxuIiwgY2ZnLT5zZWxlY3RlZF9mbGF2b3IpOw0KPiArICAgICAgIGN0eC0+ c2VsZWN0ZWRfZmxhdm9yID0gZmxhdm9yOw0KPiArICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZT OiB1c2luZyBhdXRoIGZsYXZvciAldVxuIiwgY3R4LT5zZWxlY3RlZF9mbGF2b3IpOw0KPiAgICAg ICAgIHJldHVybiAwOw0KPiAgfQ0KPiANCj4gQEAgLTc2Nyw1MCArNzMzLDUxIEBAIHN0YXRpYyBp bnQgbmZzX3ZlcmlmeV9hdXRoZmxhdm9ycyhzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQNCj4gKmNmZywN Cj4gICAqIFVzZSB0aGUgcmVtb3RlIHNlcnZlcidzIE1PVU5UIHNlcnZpY2UgdG8gcmVxdWVzdCB0 aGUgTkZTIGZpbGUgaGFuZGxlDQo+ICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBw YXRoLg0KPiAgICovDQo+IC1zdGF0aWMgaW50IG5mc19yZXF1ZXN0X21vdW50KHN0cnVjdCBuZnNf ZnNfY29udGV4dCAqY2ZnLA0KPiArc3RhdGljIGludCBuZnNfcmVxdWVzdF9tb3VudChzdHJ1Y3Qg ZnNfY29udGV4dCAqZmMsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5m c19maCAqcm9vdF9maCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNfYXV0aGZs YXZvcl90ICpzZXJ2ZXJfYXV0aGxpc3QsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50ICpzZXJ2ZXJfYXV0aGxpc3RfbGVuKQ0KPiAgew0KPiArICAgICAgIHN0cnVj dCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiAgICAgICAgIHN0 cnVjdCBuZnNfbW91bnRfcmVxdWVzdCByZXF1ZXN0ID0gew0KPiAgICAgICAgICAgICAgICAgLnNh cCAgICAgICAgICAgID0gKHN0cnVjdCBzb2NrYWRkciAqKQ0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2ZnLT5tb3VudF9zZXJ2ZXIuYWRkcmVzcywN Cj4gLSAgICAgICAgICAgICAgIC5kaXJwYXRoICAgICAgICA9IGNmZy0+bmZzX3NlcnZlci5leHBv cnRfcGF0aCwNCj4gLSAgICAgICAgICAgICAgIC5wcm90b2NvbCAgICAgICA9IGNmZy0+bW91bnRf c2VydmVyLnByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmY3R4LT5tb3VudF9zZXJ2ZXIuYWRkcmVzcywNCj4gKyAgICAgICAgICAgICAg IC5kaXJwYXRoICAgICAgICA9IGN0eC0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCwNCj4gKyAgICAg ICAgICAgICAgIC5wcm90b2NvbCAgICAgICA9IGN0eC0+bW91bnRfc2VydmVyLnByb3RvY29sLA0K PiAgICAgICAgICAgICAgICAgLmZoICAgICAgICAgICAgID0gcm9vdF9maCwNCj4gLSAgICAgICAg ICAgICAgIC5ub3Jlc3Zwb3J0ICAgICA9IGNmZy0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9SRVNWUE9S VCwNCj4gKyAgICAgICAgICAgICAgIC5ub3Jlc3Zwb3J0ICAgICA9IGN0eC0+ZmxhZ3MgJiBORlNf TU9VTlRfTk9SRVNWUE9SVCwNCj4gICAgICAgICAgICAgICAgIC5hdXRoX2ZsYXZfbGVuICA9IHNl cnZlcl9hdXRobGlzdF9sZW4sDQo+ICAgICAgICAgICAgICAgICAuYXV0aF9mbGF2cyAgICAgPSBz ZXJ2ZXJfYXV0aGxpc3QsDQo+IC0gICAgICAgICAgICAgICAubmV0ICAgICAgICAgICAgPSBjZmct Pm5ldCwNCj4gKyAgICAgICAgICAgICAgIC5uZXQgICAgICAgICAgICA9IGZjLT5uZXRfbnMsDQo+ ICAgICAgICAgfTsNCj4gICAgICAgICBpbnQgc3RhdHVzOw0KPiANCj4gLSAgICAgICBpZiAoY2Zn LT5tb3VudF9zZXJ2ZXIudmVyc2lvbiA9PSAwKSB7DQo+IC0gICAgICAgICAgICAgICBzd2l0Y2gg KGNmZy0+dmVyc2lvbikgew0KPiArICAgICAgIGlmIChjdHgtPm1vdW50X3NlcnZlci52ZXJzaW9u ID09IDApIHsNCj4gKyAgICAgICAgICAgICAgIHN3aXRjaCAoY3R4LT52ZXJzaW9uKSB7DQo+ICAg ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2ZnLT5tb3VudF9zZXJ2ZXIudmVyc2lvbiA9IE5GU19NTlQzX1ZFUlNJT047DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5tb3VudF9zZXJ2ZXIudmVyc2lv biA9IE5GU19NTlQzX1ZFUlNJT047DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjZmctPm1vdW50X3NlcnZlci52ZXJzaW9uID0gTkZTX01OVF9W RVJTSU9OOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bW91bnRfc2Vy dmVyLnZlcnNpb24gPSBORlNfTU5UX1ZFUlNJT047DQo+ICAgICAgICAgICAgICAgICB9DQo+ICAg ICAgICAgfQ0KPiAtICAgICAgIHJlcXVlc3QudmVyc2lvbiA9IGNmZy0+bW91bnRfc2VydmVyLnZl cnNpb247DQo+ICsgICAgICAgcmVxdWVzdC52ZXJzaW9uID0gY3R4LT5tb3VudF9zZXJ2ZXIudmVy c2lvbjsNCj4gDQo+IC0gICAgICAgaWYgKGNmZy0+bW91bnRfc2VydmVyLmhvc3RuYW1lKQ0KPiAt ICAgICAgICAgICAgICAgcmVxdWVzdC5ob3N0bmFtZSA9IGNmZy0+bW91bnRfc2VydmVyLmhvc3Ru YW1lOw0KPiArICAgICAgIGlmIChjdHgtPm1vdW50X3NlcnZlci5ob3N0bmFtZSkNCj4gKyAgICAg ICAgICAgICAgIHJlcXVlc3QuaG9zdG5hbWUgPSBjdHgtPm1vdW50X3NlcnZlci5ob3N0bmFtZTsN Cj4gICAgICAgICBlbHNlDQo+IC0gICAgICAgICAgICAgICByZXF1ZXN0Lmhvc3RuYW1lID0gY2Zn LT5uZnNfc2VydmVyLmhvc3RuYW1lOw0KPiArICAgICAgICAgICAgICAgcmVxdWVzdC5ob3N0bmFt ZSA9IGN0eC0+bmZzX3NlcnZlci5ob3N0bmFtZTsNCj4gDQo+ICAgICAgICAgLyoNCj4gICAgICAg ICAgKiBDb25zdHJ1Y3QgdGhlIG1vdW50IHNlcnZlcidzIGFkZHJlc3MuDQo+ICAgICAgICAgICov DQo+IC0gICAgICAgaWYgKGNmZy0+bW91bnRfc2VydmVyLmFkZHJlc3Muc2FfZmFtaWx5ID09IEFG X1VOU1BFQykgew0KPiAtICAgICAgICAgICAgICAgbWVtY3B5KHJlcXVlc3Quc2FwLCAmY2ZnLT5u ZnNfc2VydmVyLmFkZHJlc3MsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgY2ZnLT5uZnNfc2Vy dmVyLmFkZHJsZW4pOw0KPiAtICAgICAgICAgICAgICAgY2ZnLT5tb3VudF9zZXJ2ZXIuYWRkcmxl biA9IGNmZy0+bmZzX3NlcnZlci5hZGRybGVuOw0KPiArICAgICAgIGlmIChjdHgtPm1vdW50X3Nl cnZlci5hZGRyZXNzLnNhX2ZhbWlseSA9PSBBRl9VTlNQRUMpIHsNCj4gKyAgICAgICAgICAgICAg IG1lbWNweShyZXF1ZXN0LnNhcCwgJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNzLA0KPiArICAgICAg ICAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5hZGRybGVuKTsNCj4gKyAgICAgICAgICAg ICAgIGN0eC0+bW91bnRfc2VydmVyLmFkZHJsZW4gPSBjdHgtPm5mc19zZXJ2ZXIuYWRkcmxlbjsN Cj4gICAgICAgICB9DQo+IC0gICAgICAgcmVxdWVzdC5zYWxlbiA9IGNmZy0+bW91bnRfc2VydmVy LmFkZHJsZW47DQo+IC0gICAgICAgbmZzX3NldF9wb3J0KHJlcXVlc3Quc2FwLCAmY2ZnLT5tb3Vu dF9zZXJ2ZXIucG9ydCwgMCk7DQo+ICsgICAgICAgcmVxdWVzdC5zYWxlbiA9IGN0eC0+bW91bnRf c2VydmVyLmFkZHJsZW47DQo+ICsgICAgICAgbmZzX3NldF9wb3J0KHJlcXVlc3Quc2FwLCAmY3R4 LT5tb3VudF9zZXJ2ZXIucG9ydCwgMCk7DQo+IA0KPiAgICAgICAgIC8qDQo+ICAgICAgICAgICog Tm93IGFzayB0aGUgbW91bnQgc2VydmVyIHRvIG1hcCBvdXIgZXhwb3J0IHBhdGgNCj4gQEAgLTgy NiwyMCArNzkzLDE4IEBAIHN0YXRpYyBpbnQgbmZzX3JlcXVlc3RfbW91bnQoc3RydWN0IG5mc19m c19jb250ZXh0ICpjZmcsDQo+ICAgICAgICAgcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiAtc3RhdGlj IHN0cnVjdCBuZnNfc2VydmVyICpuZnNfdHJ5X21vdW50X3JlcXVlc3Qoc3RydWN0IG5mc19tb3Vu dF9pbmZvDQo+ICptb3VudF9pbmZvKQ0KPiArc3RhdGljIHN0cnVjdCBuZnNfc2VydmVyICpuZnNf dHJ5X21vdW50X3JlcXVlc3Qoc3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0KPiArICAgICAg IHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiAgICAg ICAgIGludCBzdGF0dXM7DQo+ICAgICAgICAgdW5zaWduZWQgaW50IGk7DQo+ICAgICAgICAgYm9v bCB0cmllZF9hdXRoX3VuaXggPSBmYWxzZTsNCj4gICAgICAgICBib29sIGF1dGhfbnVsbF9pbl9s aXN0ID0gZmFsc2U7DQo+ICAgICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IEVSUl9Q VFIoLUVBQ0NFUyk7DQo+IC0gICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBtb3Vu dF9pbmZvLT5jdHg7DQo+ICAgICAgICAgcnBjX2F1dGhmbGF2b3JfdCBhdXRobGlzdFtORlNfTUFY X1NFQ0ZMQVZPUlNdOw0KPiAgICAgICAgIHVuc2lnbmVkIGludCBhdXRobGlzdF9sZW4gPSBBUlJB WV9TSVpFKGF1dGhsaXN0KTsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX3N1YnZlcnNpb24gKm5mc19t b2QgPSBtb3VudF9pbmZvLT5uZnNfbW9kOw0KPiANCj4gLSAgICAgICBzdGF0dXMgPSBuZnNfcmVx dWVzdF9tb3VudChjdHgsIG1vdW50X2luZm8tPm1udGZoLCBhdXRobGlzdCwNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdXRobGlzdF9sZW4pOw0KPiArICAgICAg IHN0YXR1cyA9IG5mc19yZXF1ZXN0X21vdW50KGZjLCBjdHgtPm1udGZoLCBhdXRobGlzdCwgJmF1 dGhsaXN0X2xlbik7DQo+ICAgICAgICAgaWYgKHN0YXR1cykNCj4gICAgICAgICAgICAgICAgIHJl dHVybiBFUlJfUFRSKHN0YXR1cyk7DQo+IA0KPiBAQCAtODUzLDcgKzgxOCw3IEBAIHN0YXRpYyBz dHJ1Y3QgbmZzX3NlcnZlciAqbmZzX3RyeV9tb3VudF9yZXF1ZXN0KHN0cnVjdA0KPiBuZnNfbW91 bnRfaW5mbyAqbW91bnRfaW5mDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnNlbGVj dGVkX2ZsYXZvcik7DQo+ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKQ0KPiAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUihzdGF0dXMpOw0KPiAtICAgICAgICAgICAgICAg cmV0dXJuIG5mc19tb2QtPnJwY19vcHMtPmNyZWF0ZV9zZXJ2ZXIobW91bnRfaW5mbyk7DQo+ICsg ICAgICAgICAgICAgICByZXR1cm4gY3R4LT5uZnNfbW9kLT5ycGNfb3BzLT5jcmVhdGVfc2VydmVy KGZjKTsNCj4gICAgICAgICB9DQo+IA0KPiAgICAgICAgIC8qDQo+IEBAIC04ODAsNyArODQ1LDcg QEAgc3RhdGljIHN0cnVjdCBuZnNfc2VydmVyICpuZnNfdHJ5X21vdW50X3JlcXVlc3Qoc3RydWN0 DQo+IG5mc19tb3VudF9pbmZvICptb3VudF9pbmYNCj4gICAgICAgICAgICAgICAgIH0NCj4gICAg ICAgICAgICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZTOiBhdHRlbXB0aW5nIHRvIHVzZSBhdXRo IGZsYXZvciAldVxuIiwNCj4gZmxhdm9yKTsNCj4gICAgICAgICAgICAgICAgIGN0eC0+c2VsZWN0 ZWRfZmxhdm9yID0gZmxhdm9yOw0KPiAtICAgICAgICAgICAgICAgc2VydmVyID0gbmZzX21vZC0+ cnBjX29wcy0+Y3JlYXRlX3NlcnZlcihtb3VudF9pbmZvKTsNCj4gKyAgICAgICAgICAgICAgIHNl cnZlciA9IGN0eC0+bmZzX21vZC0+cnBjX29wcy0+Y3JlYXRlX3NlcnZlcihmYyk7DQo+ICAgICAg ICAgICAgICAgICBpZiAoIUlTX0VSUihzZXJ2ZXIpKQ0KPiAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gc2VydmVyOw0KPiAgICAgICAgIH0NCj4gQEAgLTg5NiwyMyArODYxLDIyIEBAIHN0 YXRpYyBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzX3RyeV9tb3VudF9yZXF1ZXN0KHN0cnVjdA0KPiBu ZnNfbW91bnRfaW5mbyAqbW91bnRfaW5mDQo+ICAgICAgICAgLyogTGFzdCBjaGFuY2UhIFRyeSBB VVRIX1VOSVggKi8NCj4gICAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogYXR0ZW1wdGluZyB0 byB1c2UgYXV0aCBmbGF2b3IgJXVcbiIsDQo+IFJQQ19BVVRIX1VOSVgpOw0KPiAgICAgICAgIGN0 eC0+c2VsZWN0ZWRfZmxhdm9yID0gUlBDX0FVVEhfVU5JWDsNCj4gLSAgICAgICByZXR1cm4gbmZz X21vZC0+cnBjX29wcy0+Y3JlYXRlX3NlcnZlcihtb3VudF9pbmZvKTsNCj4gKyAgICAgICByZXR1 cm4gY3R4LT5uZnNfbW9kLT5ycGNfb3BzLT5jcmVhdGVfc2VydmVyKGZjKTsNCj4gIH0NCj4gDQo+ IC1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmZzX2ZzX21vdW50X2NvbW1vbihpbnQsIGNvbnN0IGNo YXIgKiwgc3RydWN0DQo+IG5mc19tb3VudF9pbmZvICopOw0KPiAtDQo+IC1zdHJ1Y3QgZGVudHJ5 ICpuZnNfdHJ5X21vdW50KGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19tb3VudF9pbmZvICptb3VudF9pbmZv KQ0KPiAraW50IG5mc190cnlfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0K PiAtICAgICAgIHN0cnVjdCBuZnNfc3VidmVyc2lvbiAqbmZzX21vZCA9IG1vdW50X2luZm8tPm5m c19tb2Q7DQo+IC0gICAgICAgaWYgKG1vdW50X2luZm8tPmN0eC0+bmVlZF9tb3VudCkNCj4gLSAg ICAgICAgICAgICAgIG1vdW50X2luZm8tPnNlcnZlciA9IG5mc190cnlfbW91bnRfcmVxdWVzdCht b3VudF9pbmZvKTsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19m YzJjb250ZXh0KGZjKTsNCj4gKw0KPiArICAgICAgIGlmIChjdHgtPm5lZWRfbW91bnQpDQo+ICsg ICAgICAgICAgICAgICBjdHgtPnNlcnZlciA9IG5mc190cnlfbW91bnRfcmVxdWVzdChmYyk7DQo+ ICAgICAgICAgZWxzZQ0KPiAtICAgICAgICAgICAgICAgbW91bnRfaW5mby0+c2VydmVyID0gbmZz X21vZC0+cnBjX29wcy0NCj4gPmNyZWF0ZV9zZXJ2ZXIobW91bnRfaW5mbyk7DQo+ICsgICAgICAg ICAgICAgICBjdHgtPnNlcnZlciA9IGN0eC0+bmZzX21vZC0+cnBjX29wcy0+Y3JlYXRlX3NlcnZl cihmYyk7DQo+IA0KPiAtICAgICAgIHJldHVybiBuZnNfZnNfbW91bnRfY29tbW9uKGZsYWdzLCBk ZXZfbmFtZSwgbW91bnRfaW5mbyk7DQo+ICsgICAgICAgcmV0dXJuIG5mc19nZXRfdHJlZV9jb21t b24oZmMpOw0KPiAgfQ0KPiAtRVhQT1JUX1NZTUJPTF9HUEwobmZzX3RyeV9tb3VudCk7DQo+ICtF WFBPUlRfU1lNQk9MX0dQTChuZnNfdHJ5X2dldF90cmVlKTsNCj4gKw0KPiANCj4gICNkZWZpbmUg TkZTX1JFTU9VTlRfQ01QX0ZMQUdNQVNLIH4oTkZTX01PVU5UX0lOVFIgXA0KPiAgICAgICAgICAg ICAgICAgfCBORlNfTU9VTlRfU0VDVVJFIFwNCj4gQEAgLTk1MiwxNSArOTE2LDExIEBAIG5mc19j b21wYXJlX3JlbW91bnRfZGF0YShzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcywNCj4gICAgICAgICBy ZXR1cm4gMDsNCj4gIH0NCj4gDQo+IC1pbnQNCj4gLW5mc19yZW1vdW50KHN0cnVjdCBzdXBlcl9i bG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKnJhd19kYXRhKQ0KPiAraW50IG5mc19yZWNvbmZp Z3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpDQo+ICB7DQo+IC0gICAgICAgaW50IGVycm9yOw0K PiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMp Ow0KPiArICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmYy0+cm9vdC0+ZF9zYjsNCj4g ICAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IHNiLT5zX2ZzX2luZm87DQo+IC0gICAg ICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHg7DQo+IC0gICAgICAgc3RydWN0IG5mc19tb3Vu dF9kYXRhICpvcHRpb25zID0gKHN0cnVjdCBuZnNfbW91bnRfZGF0YSAqKXJhd19kYXRhOw0KPiAt ICAgICAgIHN0cnVjdCBuZnM0X21vdW50X2RhdGEgKm9wdGlvbnM0ID0gKHN0cnVjdCBuZnM0X21v dW50X2RhdGEgKilyYXdfZGF0YTsNCj4gLSAgICAgICB1MzIgbmZzdmVycyA9IG5mc3MtPm5mc19j bGllbnQtPnJwY19vcHMtPnZlcnNpb247DQo+IA0KPiAgICAgICAgIHN5bmNfZmlsZXN5c3RlbShz Yik7DQo+IA0KPiBAQCAtOTcwLDY0ICs5MzAsMzAgQEAgbmZzX3JlbW91bnQoc3RydWN0IHN1cGVy X2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhcg0KPiAqcmF3X2RhdGEpDQo+ICAgICAgICAgICog b25lcyB3ZXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiBGYWxsIGJhY2sgdG8gbGVnYWN5IGJlaGF2 aW9yIGFuZA0KPiAgICAgICAgICAqIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuDQo+ICAgICAgICAgICov DQo+IC0gICAgICAgaWYgKChuZnN2ZXJzID09IDQgJiYgKCFvcHRpb25zNCB8fCBvcHRpb25zNC0+ dmVyc2lvbiA9PSAxKSkgfHwNCj4gLSAgICAgICAgICAgKG5mc3ZlcnMgPD0gMyAmJiAoIW9wdGlv bnMgfHwgKG9wdGlvbnMtPnZlcnNpb24gPj0gMSAmJg0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy0+dmVyc2lvbiA8PSA2KSkpKQ0KPiArICAgICAg IGlmIChjdHgtPnNraXBfcmVjb25maWdfb3B0aW9uX2NoZWNrKQ0KPiAgICAgICAgICAgICAgICAg cmV0dXJuIDA7DQo+IA0KPiAtICAgICAgIGN0eCA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0 YSgpOw0KPiAtICAgICAgIGlmIChjdHggPT0gTlVMTCkNCj4gLSAgICAgICAgICAgICAgIHJldHVy biAtRU5PTUVNOw0KPiAtDQo+IC0gICAgICAgLyogZmlsbCBvdXQgc3RydWN0IHdpdGggdmFsdWVz IGZyb20gZXhpc3RpbmcgbW91bnQgKi8NCj4gLSAgICAgICBjdHgtPmZsYWdzID0gbmZzcy0+Zmxh Z3M7DQo+IC0gICAgICAgY3R4LT5yc2l6ZSA9IG5mc3MtPnJzaXplOw0KPiAtICAgICAgIGN0eC0+ d3NpemUgPSBuZnNzLT53c2l6ZTsNCj4gLSAgICAgICBjdHgtPnJldHJhbnMgPSBuZnNzLT5jbGll bnQtPmNsX3RpbWVvdXQtPnRvX3JldHJpZXM7DQo+IC0gICAgICAgY3R4LT5zZWxlY3RlZF9mbGF2 b3IgPSBuZnNzLT5jbGllbnQtPmNsX2F1dGgtPmF1X2ZsYXZvcjsNCj4gLSAgICAgICBjdHgtPmFj cmVnbWluID0gbmZzcy0+YWNyZWdtaW4gLyBIWjsNCj4gLSAgICAgICBjdHgtPmFjcmVnbWF4ID0g bmZzcy0+YWNyZWdtYXggLyBIWjsNCj4gLSAgICAgICBjdHgtPmFjZGlybWluID0gbmZzcy0+YWNk aXJtaW4gLyBIWjsNCj4gLSAgICAgICBjdHgtPmFjZGlybWF4ID0gbmZzcy0+YWNkaXJtYXggLyBI WjsNCj4gLSAgICAgICBjdHgtPnRpbWVvID0gMTBVICogbmZzcy0+Y2xpZW50LT5jbF90aW1lb3V0 LT50b19pbml0dmFsIC8gSFo7DQo+IC0gICAgICAgY3R4LT5uZnNfc2VydmVyLnBvcnQgPSBuZnNz LT5wb3J0Ow0KPiAtICAgICAgIGN0eC0+bmZzX3NlcnZlci5hZGRybGVuID0gbmZzcy0+bmZzX2Ns aWVudC0+Y2xfYWRkcmxlbjsNCj4gLSAgICAgICBjdHgtPnZlcnNpb24gPSBuZnN2ZXJzOw0KPiAt ICAgICAgIGN0eC0+bWlub3J2ZXJzaW9uID0gbmZzcy0+bmZzX2NsaWVudC0+Y2xfbWlub3J2ZXJz aW9uOw0KPiAtICAgICAgIGN0eC0+bmV0ID0gY3VycmVudC0+bnNwcm94eS0+bmV0X25zOw0KPiAt ICAgICAgIG1lbWNweSgmY3R4LT5uZnNfc2VydmVyLmFkZHJlc3MsICZuZnNzLT5uZnNfY2xpZW50 LT5jbF9hZGRyLA0KPiAtICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmFkZHJsZW4pOw0K PiAtDQo+IC0gICAgICAgLyogb3ZlcndyaXRlIHRob3NlIHZhbHVlcyB3aXRoIGFueSB0aGF0IHdl cmUgc3BlY2lmaWVkICovDQo+IC0gICAgICAgZXJyb3IgPSAtRUlOVkFMOw0KPiAtICAgICAgIGlm ICghbmZzX3BhcnNlX21vdW50X29wdGlvbnMoKGNoYXIgKilvcHRpb25zLCBjdHgpKQ0KPiAtICAg ICAgICAgICAgICAgZ290byBvdXQ7DQo+IC0NCj4gICAgICAgICAvKg0KPiAgICAgICAgICAqIG5v YWMgaXMgYSBzcGVjaWFsIGNhc2UuIEl0IGltcGxpZXMgLW8gc3luYywgYnV0IHRoYXQncyBub3QN Cj4gLSAgICAgICAgKiBuZWNlc3NhcmlseSByZWZsZWN0ZWQgaW4gdGhlIG10YWIgb3B0aW9ucy4g ZG9fcmVtb3VudF9zYg0KPiArICAgICAgICAqIG5lY2Vzc2FyaWx5IHJlZmxlY3RlZCBpbiB0aGUg bXRhYiBvcHRpb25zLiByZWNvbmZpZ3VyZV9zdXBlcg0KPiAgICAgICAgICAqIHdpbGwgY2xlYXIg U0JfU1lOQ0hST05PVVMgaWYgLW8gc3luYyB3YXNuJ3Qgc3BlY2lmaWVkIGluIHRoZQ0KPiAgICAg ICAgICAqIHJlbW91bnQgb3B0aW9ucywgc28gd2UgaGF2ZSB0byBleHBsaWNpdGx5IHJlc2V0IGl0 Lg0KPiAgICAgICAgICAqLw0KPiAtICAgICAgIGlmIChjdHgtPmZsYWdzICYgTkZTX01PVU5UX05P QUMpDQo+IC0gICAgICAgICAgICAgICAqZmxhZ3MgfD0gU0JfU1lOQ0hST05PVVM7DQo+ICsgICAg ICAgaWYgKGN0eC0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9BQykgew0KPiArICAgICAgICAgICAgICAg ZmMtPnNiX2ZsYWdzIHw9IFNCX1NZTkNIUk9OT1VTOw0KPiArICAgICAgICAgICAgICAgZmMtPnNi X2ZsYWdzX21hc2sgfD0gU0JfU1lOQ0hST05PVVM7DQo+ICsgICAgICAgfQ0KPiANCj4gICAgICAg ICAvKiBjb21wYXJlIG5ldyBtb3VudCBvcHRpb25zIHdpdGggb2xkIG9uZXMgKi8NCj4gLSAgICAg ICBlcnJvciA9IG5mc19jb21wYXJlX3JlbW91bnRfZGF0YShuZnNzLCBjdHgpOw0KPiAtICAgICAg IGlmICghZXJyb3IpDQo+IC0gICAgICAgICAgICAgICBlcnJvciA9IHNlY3VyaXR5X3NiX3JlbW91 bnQoc2IsIGN0eC0+bHNtX29wdHMpOw0KPiAtb3V0Og0KPiAtICAgICAgIG5mc19mcmVlX3BhcnNl ZF9tb3VudF9kYXRhKGN0eCk7DQo+IC0gICAgICAgcmV0dXJuIGVycm9yOw0KPiArICAgICAgIHJl dHVybiBuZnNfY29tcGFyZV9yZW1vdW50X2RhdGEobmZzcywgY3R4KTsNCj4gIH0NCj4gLUVYUE9S VF9TWU1CT0xfR1BMKG5mc19yZW1vdW50KTsNCj4gK0VYUE9SVF9TWU1CT0xfR1BMKG5mc19yZWNv bmZpZ3VyZSk7DQo+IA0KPiAgLyoNCj4gICAqIEZpbmlzaCBzZXR0aW5nIHVwIGFuIE5GUyBzdXBl cmJsb2NrDQo+ICAgKi8NCj4gLXN0YXRpYyB2b2lkIG5mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IsIHN0cnVjdCBuZnNfbW91bnRfaW5mbw0KPiAqbW91bnRfaW5mbykNCj4gK3N0 YXRpYyB2b2lkIG5mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBu ZnNfZnNfY29udGV4dA0KPiAqY3R4KQ0KPiAgew0KPiAtICAgICAgIHN0cnVjdCBuZnNfZnNfY29u dGV4dCAqY3R4ID0gbW91bnRfaW5mby0+Y3R4Ow0KPiAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVy ICpzZXJ2ZXIgPSBORlNfU0Ioc2IpOw0KPiANCj4gICAgICAgICBzYi0+c19ibG9ja3NpemVfYml0 cyA9IDA7DQo+IEBAIC0xMDU5LDEzICs5ODUsMTQgQEAgc3RhdGljIHZvaWQgbmZzX2ZpbGxfc3Vw ZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwNCj4gc3RydWN0IG5mc19tb3VudF9pbmZvICptb3Vu dF8NCj4gICAgICAgICBuZnNfc3VwZXJfc2V0X21heGJ5dGVzKHNiLCBzZXJ2ZXItPm1heGZpbGVz aXplKTsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgaW50IG5mc19jb21wYXJlX21vdW50X29wdGlvbnMo Y29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdA0KPiBzdHJ1Y3QgbmZzX3NlcnZlciAq YiwgaW50IGZsYWdzKQ0KPiArc3RhdGljIGludCBuZnNfY29tcGFyZV9tb3VudF9vcHRpb25zKGNv bnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QNCj4gc3RydWN0IG5mc19zZXJ2ZXIgKmIs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZnNf Y29udGV4dCAqZmMpDQo+ICB7DQo+ICAgICAgICAgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKmEg PSBzLT5zX2ZzX2luZm87DQo+ICAgICAgICAgY29uc3Qgc3RydWN0IHJwY19jbG50ICpjbG50X2Eg PSBhLT5jbGllbnQ7DQo+ICAgICAgICAgY29uc3Qgc3RydWN0IHJwY19jbG50ICpjbG50X2IgPSBi LT5jbGllbnQ7DQo+IA0KPiAtICAgICAgIGlmICgocy0+c19mbGFncyAmIE5GU19NU19NQVNLKSAh PSAoZmxhZ3MgJiBORlNfTVNfTUFTSykpDQo+ICsgICAgICAgaWYgKChzLT5zX2ZsYWdzICYgTkZT X1NCX01BU0spICE9IChmYy0+c2JfZmxhZ3MgJiBORlNfU0JfTUFTSykpDQo+ICAgICAgICAgICAg ICAgICBnb3RvIEVidXN5Ow0KPiAgICAgICAgIGlmIChhLT5uZnNfY2xpZW50ICE9IGItPm5mc19j bGllbnQpDQo+ICAgICAgICAgICAgICAgICBnb3RvIEVidXN5Ow0KPiBAQCAtMTA5MCwxOSArMTAx NywxMSBAQCBzdGF0aWMgaW50IG5mc19jb21wYXJlX21vdW50X29wdGlvbnMoY29uc3Qgc3RydWN0 DQo+IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBzdHJ1Y3Qgbg0KPiAgICAgICAgIHJldHVybiAwOw0K PiAgfQ0KPiANCj4gLXN0cnVjdCBuZnNfc2JfbW91bnRkYXRhIHsNCj4gLSAgICAgICBzdHJ1Y3Qg bmZzX3NlcnZlciAqc2VydmVyOw0KPiAtICAgICAgIGludCBtbnRmbGFnczsNCj4gLX07DQo+IC0N Cj4gLXN0YXRpYyBpbnQgbmZzX3NldF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHZvaWQg KmRhdGEpDQo+ICtzdGF0aWMgaW50IG5mc19zZXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpz LCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpDQo+ICB7DQo+IC0gICAgICAgc3RydWN0IG5mc19zYl9t b3VudGRhdGEgKnNiX21udGRhdGEgPSBkYXRhOw0KPiAtICAgICAgIHN0cnVjdCBuZnNfc2VydmVy ICpzZXJ2ZXIgPSBzYl9tbnRkYXRhLT5zZXJ2ZXI7DQo+ICsgICAgICAgc3RydWN0IG5mc19zZXJ2 ZXIgKnNlcnZlciA9IGZjLT5zX2ZzX2luZm87DQo+ICAgICAgICAgaW50IHJldDsNCj4gDQo+IC0g ICAgICAgcy0+c19mbGFncyA9IHNiX21udGRhdGEtPm1udGZsYWdzOw0KPiAtICAgICAgIHMtPnNf ZnNfaW5mbyA9IHNlcnZlcjsNCj4gICAgICAgICBzLT5zX2Rfb3AgPSBzZXJ2ZXItPm5mc19jbGll bnQtPnJwY19vcHMtPmRlbnRyeV9vcHM7DQo+ICAgICAgICAgcmV0ID0gc2V0X2Fub25fc3VwZXIo cywgc2VydmVyKTsNCj4gICAgICAgICBpZiAocmV0ID09IDApDQo+IEBAIC0xMTY3LDExICsxMDg2 LDkgQEAgc3RhdGljIGludCBuZnNfY29tcGFyZV91c2VybnMoY29uc3Qgc3RydWN0IG5mc19zZXJ2 ZXINCj4gKm9sZCwNCj4gICAgICAgICByZXR1cm4gMTsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgaW50 IG5mc19jb21wYXJlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpDQo+ ICtzdGF0aWMgaW50IG5mc19jb21wYXJlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0 cnVjdCBmc19jb250ZXh0ICpmYykNCj4gIHsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX3NiX21vdW50 ZGF0YSAqc2JfbW50ZGF0YSA9IGRhdGE7DQo+IC0gICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNl cnZlciA9IHNiX21udGRhdGEtPnNlcnZlciwgKm9sZCA9IE5GU19TQihzYik7DQo+IC0gICAgICAg aW50IG1udGZsYWdzID0gc2JfbW50ZGF0YS0+bW50ZmxhZ3M7DQo+ICsgICAgICAgc3RydWN0IG5m c19zZXJ2ZXIgKnNlcnZlciA9IGZjLT5zX2ZzX2luZm8sICpvbGQgPSBORlNfU0Ioc2IpOw0KPiAN Cj4gICAgICAgICBpZiAoIW5mc19jb21wYXJlX3N1cGVyX2FkZHJlc3Mob2xkLCBzZXJ2ZXIpKQ0K PiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+IEBAIC0xMTgyLDEzICsxMDk5LDEyIEBAIHN0 YXRpYyBpbnQgbmZzX2NvbXBhcmVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwNCj4gdm9p ZCAqZGF0YSkNCj4gICAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiAgICAgICAgIGlmICghbmZz X2NvbXBhcmVfdXNlcm5zKG9sZCwgc2VydmVyKSkNCj4gICAgICAgICAgICAgICAgIHJldHVybiAw Ow0KPiAtICAgICAgIHJldHVybiBuZnNfY29tcGFyZV9tb3VudF9vcHRpb25zKHNiLCBzZXJ2ZXIs IG1udGZsYWdzKTsNCj4gKyAgICAgICByZXR1cm4gbmZzX2NvbXBhcmVfbW91bnRfb3B0aW9ucyhz Yiwgc2VydmVyLCBmYyk7DQo+ICB9DQo+IA0KPiAgI2lmZGVmIENPTkZJR19ORlNfRlNDQUNIRQ0K PiAgc3RhdGljIHZvaWQgbmZzX2dldF9jYWNoZV9jb29raWUoc3RydWN0IHN1cGVyX2Jsb2NrICpz YiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19mc19jb250 ZXh0ICpjdHgsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNf Y2xvbmVfbW91bnQgKmNsb25lZCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgpDQo+ICB7DQo+ICAgICAgICAgc3RydWN0IG5mc19z ZXJ2ZXIgKm5mc3MgPSBORlNfU0Ioc2IpOw0KPiAgICAgICAgIGNoYXIgKnVuaXEgPSBOVUxMOw0K PiBAQCAtMTE5Nyw2OCArMTExMyw3MCBAQCBzdGF0aWMgdm9pZCBuZnNfZ2V0X2NhY2hlX2Nvb2tp ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sNCj4gKnNiLA0KPiAgICAgICAgIG5mc3MtPmZzY2FjaGVfa2V5 ID0gTlVMTDsNCj4gICAgICAgICBuZnNzLT5mc2NhY2hlID0gTlVMTDsNCj4gDQo+IC0gICAgICAg aWYgKGN0eCkgew0KPiArICAgICAgIGlmICghY3R4KQ0KPiArICAgICAgICAgICAgICAgcmV0dXJu Ow0KPiArDQo+ICsgICAgICAgaWYgKGN0eC0+Y2xvbmVfZGF0YS5zYikgew0KPiArICAgICAgICAg ICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKm1udF9zID0gTkZTX1NCKGN0eC0+Y2xvbmVfZGF0YS5z Yik7DQo+ICsgICAgICAgICAgICAgICBpZiAoIShtbnRfcy0+b3B0aW9ucyAmIE5GU19PUFRJT05f RlNDQUNIRSkpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCj4gKyAgICAgICAg ICAgICAgIGlmIChtbnRfcy0+ZnNjYWNoZV9rZXkpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgdW5pcSA9IG1udF9zLT5mc2NhY2hlX2tleS0+a2V5LnVuaXF1aWZpZXI7DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHVsZW4gPSBtbnRfcy0+ZnNjYWNoZV9rZXktPmtleS51bmlxX2xlbjsN Cj4gKyAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICB9IGVsc2Ugew0KPiAgICAgICAgICAgICAg ICAgaWYgKCEoY3R4LT5vcHRpb25zICYgTkZTX09QVElPTl9GU0NBQ0hFKSkNCj4gICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuOw0KPiAgICAgICAgICAgICAgICAgaWYgKGN0eC0+ZnNjYWNo ZV91bmlxKSB7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXEgPSBjdHgtPmZzY2FjaGVf dW5pcTsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgdWxlbiA9IHN0cmxlbihjdHgtPmZzY2Fj aGVfdW5pcSk7DQo+ICAgICAgICAgICAgICAgICB9DQo+IC0gICAgICAgfSBlbHNlIGlmIChjbG9u ZWQpIHsNCj4gLSAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICptbnRfcyA9IE5GU19T QihjbG9uZWQtPnNiKTsNCj4gLSAgICAgICAgICAgICAgIGlmICghKG1udF9zLT5vcHRpb25zICYg TkZTX09QVElPTl9GU0NBQ0hFKSkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0K PiAtICAgICAgICAgICAgICAgaWYgKG1udF9zLT5mc2NhY2hlX2tleSkgew0KPiAtICAgICAgICAg ICAgICAgICAgICAgICB1bmlxID0gbW50X3MtPmZzY2FjaGVfa2V5LT5rZXkudW5pcXVpZmllcjsN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgdWxlbiA9IG1udF9zLT5mc2NhY2hlX2tleS0+a2V5 LnVuaXFfbGVuOw0KPiAtICAgICAgICAgICAgICAgfTsNCj4gLSAgICAgICB9IGVsc2UNCj4gICAg ICAgICAgICAgICAgIHJldHVybjsNCj4gKyAgICAgICB9DQo+IA0KPiAgICAgICAgIG5mc19mc2Nh Y2hlX2dldF9zdXBlcl9jb29raWUoc2IsIHVuaXEsIHVsZW4pOw0KPiAgfQ0KPiAgI2Vsc2UNCj4g IHN0YXRpYyB2b2lkIG5mc19nZXRfY2FjaGVfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Is DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4 dCAqcGFyc2VkLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZz X2Nsb25lX21vdW50ICpjbG9uZWQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4KQ0KPiAgew0KPiAgfQ0KPiAgI2VuZGlmDQo+IA0K PiAtc3RhdGljIHN0cnVjdCBkZW50cnkgKm5mc19mc19tb3VudF9jb21tb24oaW50IGZsYWdzLCBj b25zdCBjaGFyICpkZXZfbmFtZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbmZzX21vdW50X2luZm8gKm1vdW50X2luZm8pDQo+ICtpbnQgbmZzX2dldF90cmVl X2NvbW1vbihzdHJ1Y3QgZnNfY29udGV4dCAqZmMpDQo+ICB7DQo+ICsgICAgICAgc3RydWN0IG5m c19mc19jb250ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICAgICAgICAgc3RydWN0 IHN1cGVyX2Jsb2NrICpzOw0KPiAtICAgICAgIHN0cnVjdCBkZW50cnkgKm1udHJvb3QgPSBFUlJf UFRSKC1FTk9NRU0pOw0KPiAtICAgICAgIGludCAoKmNvbXBhcmVfc3VwZXIpKHN0cnVjdCBzdXBl cl9ibG9jayAqLCB2b2lkICopID0NCj4gbmZzX2NvbXBhcmVfc3VwZXI7DQo+IC0gICAgICAgc3Ry dWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IG1vdW50X2luZm8tPnNlcnZlcjsNCj4gKyAgICAgICBp bnQgKCpjb21wYXJlX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRl eHQgKikgPQ0KPiBuZnNfY29tcGFyZV9zdXBlcjsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX3NlcnZl ciAqc2VydmVyID0gY3R4LT5zZXJ2ZXI7DQo+ICAgICAgICAgdW5zaWduZWQgbG9uZyBrZmxhZ3Mg PSAwLCBrZmxhZ3Nfb3V0ID0gMDsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX3NiX21vdW50ZGF0YSBz Yl9tbnRkYXRhID0gew0KPiAtICAgICAgICAgICAgICAgLm1udGZsYWdzID0gZmxhZ3MsDQo+IC0g ICAgICAgICAgICAgICAuc2VydmVyID0gc2VydmVyLA0KPiAtICAgICAgIH07DQo+ICAgICAgICAg aW50IGVycm9yOw0KPiANCj4gLSAgICAgICBtb3VudF9pbmZvLT5zZXJ2ZXIgPSBOVUxMOw0KPiAr ICAgICAgIGN0eC0+c2VydmVyID0gTlVMTDsNCj4gICAgICAgICBpZiAoSVNfRVJSKHNlcnZlcikp DQo+IC0gICAgICAgICAgICAgICByZXR1cm4gRVJSX0NBU1Qoc2VydmVyKTsNCj4gKyAgICAgICAg ICAgICAgIHJldHVybiBQVFJfRVJSKHNlcnZlcik7DQo+IA0KPiAgICAgICAgIGlmIChzZXJ2ZXIt PmZsYWdzICYgTkZTX01PVU5UX1VOU0hBUkVEKQ0KPiAgICAgICAgICAgICAgICAgY29tcGFyZV9z dXBlciA9IE5VTEw7DQo+IA0KPiAgICAgICAgIC8qIC1vIG5vYWMgaW1wbGllcyAtbyBzeW5jICov DQo+ICAgICAgICAgaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9BQykNCj4gLSAgICAg ICAgICAgICAgIHNiX21udGRhdGEubW50ZmxhZ3MgfD0gU0JfU1lOQ0hST05PVVM7DQo+ICsgICAg ICAgICAgICAgICBmYy0+c2JfZmxhZ3MgfD0gU0JfU1lOQ0hST05PVVM7DQo+IA0KPiAtICAgICAg IGlmIChtb3VudF9pbmZvLT5jbG9uZWQgIT0gTlVMTCAmJiBtb3VudF9pbmZvLT5jbG9uZWQtPnNi ICE9IE5VTEwpDQo+IC0gICAgICAgICAgICAgICBpZiAobW91bnRfaW5mby0+Y2xvbmVkLT5zYi0+ c19mbGFncyAmIFNCX1NZTkNIUk9OT1VTKQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICBzYl9t bnRkYXRhLm1udGZsYWdzIHw9IFNCX1NZTkNIUk9OT1VTOw0KPiArICAgICAgIGlmIChjdHgtPmNs b25lX2RhdGEuc2IpDQo+ICsgICAgICAgICAgICAgICBpZiAoY3R4LT5jbG9uZV9kYXRhLnNiLT5z X2ZsYWdzICYgU0JfU1lOQ0hST05PVVMpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGZjLT5z Yl9mbGFncyB8PSBTQl9TWU5DSFJPTk9VUzsNCj4gKw0KPiArICAgICAgIGlmIChzZXJ2ZXItPmNh cHMgJiBORlNfQ0FQX1NFQ1VSSVRZX0xBQkVMKQ0KPiArICAgICAgICAgICAgICAgZmMtPmxzbV9m bGFncyB8PSBTRUNVUklUWV9MU01fTkFUSVZFX0xBQkVMUzsNCj4gDQo+ICAgICAgICAgLyogR2V0 IGEgc3VwZXJibG9jayAtIG5vdGUgdGhhdCB3ZSBtYXkgZW5kIHVwIHNoYXJpbmcgb25lIHRoYXQg YWxyZWFkeQ0KPiBleGlzdHMgKi8NCj4gLSAgICAgICBzID0gc2dldChtb3VudF9pbmZvLT5uZnNf bW9kLT5uZnNfZnMsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIsDQo+IC0gICAgICAgICAg ICAgICAgZmxhZ3MsICZzYl9tbnRkYXRhKTsNCj4gKyAgICAgICBmYy0+c19mc19pbmZvID0gc2Vy dmVyOw0KPiArICAgICAgIHMgPSBzZ2V0X2ZjKGZjLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1 cGVyKTsNCj4gKyAgICAgICBmYy0+c19mc19pbmZvID0gTlVMTDsNCj4gICAgICAgICBpZiAoSVNf RVJSKHMpKSB7DQo+IC0gICAgICAgICAgICAgICBtbnRyb290ID0gRVJSX0NBU1Qocyk7DQo+ICsg ICAgICAgICAgICAgICBlcnJvciA9IFBUUl9FUlIocyk7DQo+ICsgICAgICAgICAgICAgICBuZnNf ZXJyb3JmKGZjLCAiTkZTOiBDb3VsZG4ndCBnZXQgc3VwZXJibG9jayIpOw0KPiAgICAgICAgICAg ICAgICAgZ290byBvdXRfZXJyX25vc2I7DQo+ICAgICAgICAgfQ0KPiANCj4gQEAgLTEyNjgsNDQg KzExODYsNDEgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5mc19mc19tb3VudF9jb21tb24oaW50 IGZsYWdzLA0KPiBjb25zdCBjaGFyICpkZXZfbmFtZSwNCj4gICAgICAgICB9IGVsc2Ugew0KPiAg ICAgICAgICAgICAgICAgZXJyb3IgPSBzdXBlcl9zZXR1cF9iZGlfbmFtZShzLCAiJXU6JXUiLCBN QUpPUihzZXJ2ZXItPnNfZGV2KSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTUlOT1Ioc2VydmVyLT5zX2RldikpOw0KPiAtICAgICAgICAgICAgICAgaWYg KGVycm9yKSB7DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIG1udHJvb3QgPSBFUlJfUFRSKGVy cm9yKTsNCj4gKyAgICAgICAgICAgICAgIGlmIChlcnJvcikNCj4gICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBlcnJvcl9zcGxhdF9zdXBlcjsNCj4gLSAgICAgICAgICAgICAgIH0NCj4gICAg ICAgICAgICAgICAgIHMtPnNfYmRpLT5yYV9wYWdlcyA9IHNlcnZlci0+cnBhZ2VzICogTkZTX01B WF9SRUFEQUhFQUQ7DQo+ICAgICAgICAgICAgICAgICBzZXJ2ZXItPnN1cGVyID0gczsNCj4gICAg ICAgICB9DQo+IA0KPiAgICAgICAgIGlmICghcy0+c19yb290KSB7DQo+IC0gICAgICAgICAgICAg ICB1bnNpZ25lZCBic2l6ZSA9IG1vdW50X2luZm8tPmluaGVyaXRlZF9ic2l6ZTsNCj4gKyAgICAg ICAgICAgICAgIHVuc2lnbmVkIGJzaXplID0gY3R4LT5jbG9uZV9kYXRhLmluaGVyaXRlZF9ic2l6 ZTsNCj4gICAgICAgICAgICAgICAgIC8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9u ICovDQo+IC0gICAgICAgICAgICAgICBuZnNfZmlsbF9zdXBlcihzLCBtb3VudF9pbmZvKTsNCj4g KyAgICAgICAgICAgICAgIG5mc19maWxsX3N1cGVyKHMsIGN0eCk7DQo+ICAgICAgICAgICAgICAg ICBpZiAoYnNpemUpIHsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgcy0+c19ibG9ja3NpemVf Yml0cyA9IGJzaXplOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zX2Jsb2Nrc2l6ZSA9 IDFVIDw8IGJzaXplOw0KPiAgICAgICAgICAgICAgICAgfQ0KPiAtICAgICAgICAgICAgICAgbmZz X2dldF9jYWNoZV9jb29raWUocywgbW91bnRfaW5mby0+Y3R4LCBtb3VudF9pbmZvLT5jbG9uZWQp Ow0KPiAtICAgICAgICAgICAgICAgaWYgKCEoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9VTlNI QVJFRCkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIHMtPnNfaWZsYWdzIHw9IFNCX0lfTVVM VElST09UOw0KPiArICAgICAgICAgICAgICAgbmZzX2dldF9jYWNoZV9jb29raWUocywgY3R4KTsN Cj4gICAgICAgICB9DQo+IA0KPiAtICAgICAgIG1udHJvb3QgPSBuZnNfZ2V0X3Jvb3QocywgbW91 bnRfaW5mby0+bW50ZmgsIGRldl9uYW1lKTsNCj4gLSAgICAgICBpZiAoSVNfRVJSKG1udHJvb3Qp KQ0KPiArICAgICAgIGVycm9yID0gbmZzX2dldF9yb290KHMsIGZjKTsNCj4gKyAgICAgICBpZiAo ZXJyb3IgPCAwKSB7DQo+ICsgICAgICAgICAgICAgICBuZnNfZXJyb3JmKGZjLCAiTkZTOiBDb3Vs ZG4ndCBnZXQgcm9vdCBkZW50cnkiKTsNCj4gICAgICAgICAgICAgICAgIGdvdG8gZXJyb3Jfc3Bs YXRfc3VwZXI7DQo+IC0NCj4gKyAgICAgICB9DQo+IA0KPiAgICAgICAgIGlmIChORlNfU0Iocykt PmNhcHMgJiBORlNfQ0FQX1NFQ1VSSVRZX0xBQkVMKQ0KPiAgICAgICAgICAgICAgICAga2ZsYWdz IHw9IFNFQ1VSSVRZX0xTTV9OQVRJVkVfTEFCRUxTOw0KPiAtICAgICAgIGlmIChtb3VudF9pbmZv LT5jbG9uZWQpIHsNCj4gLSAgICAgICAgICAgICAgIGlmIChkX2lub2RlKG1udHJvb3QpLT5pX2Zv cCAhPSAmbmZzX2Rpcl9vcGVyYXRpb25zKSB7DQo+ICsgICAgICAgaWYgKGN0eC0+Y2xvbmVfZGF0 YS5zYikgew0KPiArICAgICAgICAgICAgICAgaWYgKGRfaW5vZGUoZmMtPnJvb3QpLT5pX2ZvcCAh PSAmbmZzX2Rpcl9vcGVyYXRpb25zKSB7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y ID0gLUVTVEFMRTsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9zcGxhdF9y b290Ow0KPiAgICAgICAgICAgICAgICAgfQ0KPiAgICAgICAgICAgICAgICAgLyogY2xvbmUgYW55 IGxzbSBzZWN1cml0eSBvcHRpb25zIGZyb20gdGhlIHBhcmVudCB0byB0aGUgbmV3DQo+IHNiICov DQo+IC0gICAgICAgICAgICAgICBlcnJvciA9IHNlY3VyaXR5X3NiX2Nsb25lX21udF9vcHRzKG1v dW50X2luZm8tPmNsb25lZC0+c2IsIHMsDQo+IGtmbGFncywNCj4gKyAgICAgICAgICAgICAgIGVy cm9yID0gc2VjdXJpdHlfc2JfY2xvbmVfbW50X29wdHMoY3R4LT5jbG9uZV9kYXRhLnNiLCBzLA0K PiBrZmxhZ3MsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtmbGFnc19vdXQp Ow0KPiAgICAgICAgIH0gZWxzZSB7DQo+IC0gICAgICAgICAgICAgICBlcnJvciA9IHNlY3VyaXR5 X3NiX3NldF9tbnRfb3B0cyhzLCBtb3VudF9pbmZvLT5jdHgtPmxzbV9vcHRzLA0KPiArICAgICAg ICAgICAgICAgZXJyb3IgPSBzZWN1cml0eV9zYl9zZXRfbW50X29wdHMocywgZmMtPnNlY3VyaXR5 LA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtmbGFncywgJmtmbGFnc19vdXQpOw0KPiAgICAgICAgIH0NCj4gICAgICAgICBpZiAoZXJy b3IpDQo+IEBAIC0xMzEzLDY3ICsxMjI4LDI1IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuZnNf ZnNfbW91bnRfY29tbW9uKGludCBmbGFncywNCj4gY29uc3QgY2hhciAqZGV2X25hbWUsDQo+ICAg ICAgICAgaWYgKE5GU19TQihzKS0+Y2FwcyAmIE5GU19DQVBfU0VDVVJJVFlfTEFCRUwgJiYNCj4g ICAgICAgICAgICAgICAgICEoa2ZsYWdzX291dCAmIFNFQ1VSSVRZX0xTTV9OQVRJVkVfTEFCRUxT KSkNCj4gICAgICAgICAgICAgICAgIE5GU19TQihzKS0+Y2FwcyAmPSB+TkZTX0NBUF9TRUNVUklU WV9MQUJFTDsNCj4gLSAgICAgICBpZiAoZXJyb3IpDQo+IC0gICAgICAgICAgICAgICBnb3RvIGVy cm9yX3NwbGF0X3Jvb3Q7DQo+IA0KPiAgICAgICAgIHMtPnNfZmxhZ3MgfD0gU0JfQUNUSVZFOw0K PiArICAgICAgIGVycm9yID0gMDsNCj4gDQo+ICBvdXQ6DQo+IC0gICAgICAgcmV0dXJuIG1udHJv b3Q7DQo+ICsgICAgICAgcmV0dXJuIGVycm9yOw0KPiANCj4gIG91dF9lcnJfbm9zYjoNCj4gICAg ICAgICBuZnNfZnJlZV9zZXJ2ZXIoc2VydmVyKTsNCj4gICAgICAgICBnb3RvIG91dDsNCj4gDQo+ ICBlcnJvcl9zcGxhdF9yb290Og0KPiAtICAgICAgIGRwdXQobW50cm9vdCk7DQo+IC0gICAgICAg bW50cm9vdCA9IEVSUl9QVFIoZXJyb3IpOw0KPiArICAgICAgIGRwdXQoZmMtPnJvb3QpOw0KPiAr ICAgICAgIGZjLT5yb290ID0gTlVMTDsNCj4gIGVycm9yX3NwbGF0X3N1cGVyOg0KPiAgICAgICAg IGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHMpOw0KPiAgICAgICAgIGdvdG8gb3V0Ow0KPiAgfQ0K PiANCj4gLXN0cnVjdCBkZW50cnkgKm5mc19mc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlw ZSAqZnNfdHlwZSwNCj4gLSAgICAgICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2 b2lkICpyYXdfZGF0YSkNCj4gLXsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX21vdW50X2luZm8gbW91 bnRfaW5mbyA9IHsNCj4gLSAgICAgICB9Ow0KPiAtICAgICAgIHN0cnVjdCBkZW50cnkgKm1udHJv b3QgPSBFUlJfUFRSKC1FTk9NRU0pOw0KPiAtICAgICAgIHN0cnVjdCBuZnNfc3VidmVyc2lvbiAq bmZzX21vZDsNCj4gLSAgICAgICBpbnQgZXJyb3I7DQo+IC0NCj4gLSAgICAgICBtb3VudF9pbmZv LmN0eCA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSgpOw0KPiAtICAgICAgIG1vdW50X2lu Zm8ubW50ZmggPSBuZnNfYWxsb2NfZmhhbmRsZSgpOw0KPiAtICAgICAgIGlmIChtb3VudF9pbmZv LmN0eCA9PSBOVUxMIHx8IG1vdW50X2luZm8ubW50ZmggPT0gTlVMTCkNCj4gLSAgICAgICAgICAg ICAgIGdvdG8gb3V0Ow0KPiAtDQo+IC0gICAgICAgLyogVmFsaWRhdGUgdGhlIG1vdW50IGRhdGEg Ki8NCj4gLSAgICAgICBlcnJvciA9IG5mc192YWxpZGF0ZV9tb3VudF9kYXRhKGZzX3R5cGUsIHJh d19kYXRhLCBtb3VudF9pbmZvLmN0eCwNCj4gbW91bnRfaW5mby5tbnRmaCwgZGV2X25hbWUpOw0K PiAtICAgICAgIGlmIChlcnJvciA9PSBORlNfVEVYVF9EQVRBKQ0KPiAtICAgICAgICAgICAgICAg ZXJyb3IgPSBuZnNfdmFsaWRhdGVfdGV4dF9tb3VudF9kYXRhKHJhd19kYXRhLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdW50X2luZm8u Y3R4LA0KPiBkZXZfbmFtZSk7DQo+IC0gICAgICAgaWYgKGVycm9yIDwgMCkgew0KPiAtICAgICAg ICAgICAgICAgbW50cm9vdCA9IEVSUl9QVFIoZXJyb3IpOw0KPiAtICAgICAgICAgICAgICAgZ290 byBvdXQ7DQo+IC0gICAgICAgfQ0KPiAtDQo+IC0gICAgICAgbmZzX21vZCA9IGdldF9uZnNfdmVy c2lvbihtb3VudF9pbmZvLmN0eC0+dmVyc2lvbik7DQo+IC0gICAgICAgaWYgKElTX0VSUihuZnNf bW9kKSkgew0KPiAtICAgICAgICAgICAgICAgbW50cm9vdCA9IEVSUl9DQVNUKG5mc19tb2QpOw0K PiAtICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+IC0gICAgICAgfQ0KPiAtICAgICAgIG1vdW50 X2luZm8ubmZzX21vZCA9IG5mc19tb2Q7DQo+IC0NCj4gLSAgICAgICBtbnRyb290ID0gbmZzX21v ZC0+cnBjX29wcy0+dHJ5X21vdW50KGZsYWdzLCBkZXZfbmFtZSwgJm1vdW50X2luZm8pOw0KPiAt DQo+IC0gICAgICAgcHV0X25mc192ZXJzaW9uKG5mc19tb2QpOw0KPiAtb3V0Og0KPiAtICAgICAg IG5mc19mcmVlX3BhcnNlZF9tb3VudF9kYXRhKG1vdW50X2luZm8uY3R4KTsNCj4gLSAgICAgICBu ZnNfZnJlZV9maGFuZGxlKG1vdW50X2luZm8ubW50ZmgpOw0KPiAtICAgICAgIHJldHVybiBtbnRy b290Ow0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTF9HUEwobmZzX2ZzX21vdW50KTsNCj4gLQ0KPiAg LyoNCj4gICAqIERlc3Ryb3kgYW4gTkZTMi8zIHN1cGVyYmxvY2sNCj4gICAqLw0KPiBAQCAtMTM5 MSwxNyArMTI2NCw2IEBAIHZvaWQgbmZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpz KQ0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTF9HUEwobmZzX2tpbGxfc3VwZXIpOw0KPiANCj4gLS8q DQo+IC0gKiBJbnRlcm5hbCB1c2Ugb25seTogbW91bnRfaW5mbyBpcyBhbHJlYWR5IHNldCB1cCBi eSBjYWxsZXIuDQo+IC0gKiBVc2VkIGZvciBtb3VudHBvaW50IGNyb3NzaW5ncyBhbmQgZm9yIG5m czQgcm9vdC4NCj4gLSAqLw0KPiAtc3RhdGljIHN0cnVjdCBkZW50cnkgKg0KPiAtbmZzX3ByZXBh cmVkX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsDQo+ IC0gICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqcmF3X2RhdGEp DQo+IC17DQo+IC0gICAgICAgcmV0dXJuIG5mc19mc19tb3VudF9jb21tb24oZmxhZ3MsIGRldl9u YW1lLCByYXdfZGF0YSk7DQo+IC19DQo+IC0NCj4gICNpZiBJU19FTkFCTEVEKENPTkZJR19ORlNf VjQpDQo+IA0KPiAgLyoNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIv aW5jbHVkZS9saW51eC9uZnNfeGRyLmgNCj4gaW5kZXggODJiZGI5MWRhMmFlLi5lZDlmMjE1ZDAz ZWEgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oDQo+ICsrKyBiL2luY2x1 ZGUvbGludXgvbmZzX3hkci5oDQo+IEBAIC0xNjIyLDYgKzE2MjIsNyBAQCBzdHJ1Y3QgbmZzX3N1 YnZlcnNpb247DQo+ICBzdHJ1Y3QgbmZzX21vdW50X2luZm87DQo+ICBzdHJ1Y3QgbmZzX2NsaWVu dF9pbml0ZGF0YTsNCj4gIHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3I7DQo+ICtzdHJ1Y3Qg ZnNfY29udGV4dDsNCj4gDQo+ICAvKg0KPiAgICogUlBDIHByb2NlZHVyZSB2ZWN0b3IgZm9yIE5G U3YyL05GU3YzIGRlbXV4aW5nDQo+IEBAIC0xNjM2LDkgKzE2MzcsOCBAQCBzdHJ1Y3QgbmZzX3Jw Y19vcHMgew0KPiANCj4gICAgICAgICBpbnQgICAgICgqZ2V0cm9vdCkgKHN0cnVjdCBuZnNfc2Vy dmVyICosIHN0cnVjdCBuZnNfZmggKiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBuZnNfZnNpbmZvICopOw0KPiAtICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqKCpzdWJtb3Vu dCkgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBkZW50cnkgKiwNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZmF0 dHIgKik7DQo+IC0gICAgICAgc3RydWN0IGRlbnRyeSAqKCp0cnlfbW91bnQpIChpbnQsIGNvbnN0 IGNoYXIgKiwgc3RydWN0IG5mc19tb3VudF9pbmZvDQo+ICopOw0KPiArICAgICAgIGludCAgICAg KCpzdWJtb3VudCkgKHN0cnVjdCBmc19jb250ZXh0ICosIHN0cnVjdCBuZnNfc2VydmVyICopOw0K PiArICAgICAgIGludCAgICAgKCp0cnlfZ2V0X3RyZWUpIChzdHJ1Y3QgZnNfY29udGV4dCAqKTsN Cj4gICAgICAgICBpbnQgICAgICgqZ2V0YXR0cikgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVj dCBuZnNfZmggKiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZmF0 dHIgKiwgc3RydWN0IG5mczRfbGFiZWwgKiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBpbm9kZSAqKTsNCj4gQEAgLTE3MDUsNyArMTcwNSw3IEBAIHN0cnVjdCBuZnNfcnBj X29wcyB7DQo+ICAgICAgICAgc3RydWN0IG5mc19jbGllbnQgKigqaW5pdF9jbGllbnQpIChzdHJ1 Y3QgbmZzX2NsaWVudCAqLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBuZnNfY2xpZW50X2luaXRkYXRhICopOw0KPiAgICAgICAgIHZvaWQgICAgKCpmcmVl X2NsaWVudCkgKHN0cnVjdCBuZnNfY2xpZW50ICopOw0KPiAtICAgICAgIHN0cnVjdCBuZnNfc2Vy dmVyICooKmNyZWF0ZV9zZXJ2ZXIpKHN0cnVjdCBuZnNfbW91bnRfaW5mbyAqKTsNCj4gKyAgICAg ICBzdHJ1Y3QgbmZzX3NlcnZlciAqKCpjcmVhdGVfc2VydmVyKShzdHJ1Y3QgZnNfY29udGV4dCAq KTsNCj4gICAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciAqKCpjbG9uZV9zZXJ2ZXIpKHN0cnVjdCBu ZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmgNCj4gKiwNCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZmF0dHIgKiwNCj4gcnBjX2F1dGhmbGF2 b3JfdCk7DQo+ICB9Ow0KPiANCg==