From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2062.outbound.protection.outlook.com [40.107.94.62]) by sourceware.org (Postfix) with ESMTPS id 9A4D23858417 for ; Mon, 23 Aug 2021 05:35:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9A4D23858417 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CoRdg8uojPeAngrcG8Tvq+3zr7rWbtFTULBW5yx5mC6vcEvoPJEG5BktuEFY4b7Xc4Y3Wqx9u0T+2g9NXuNwTCar5CRAGwa8g86jVIl8B7IdwNXVyU8OOjXJZDBu4Ja1q2l2cNBRWSohzud92XyPpUuO2WbqGUcBNLkd5iX+XCpZPUzYrC3j1x+PdD+Z0Vf8eE3FRKZrsvGabyQIbxGUm1HyZBGzV/F/3iPFxP9pKusQCN7XA3JtZEh5OIygyKduNoWi8DfvW+JRhdGDp2xzpPzAHZ/fwEBDPGkaLCVYzSZVhZZTcYVvFQ9Cwgef12EX8i470hlODBWBJnmQMn8+1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=54iT16dL7lP8pNFZLLwsZAPRtW4a+UI5+Igs58qG/I0=; b=hpmU09yNrY4AVIZeXksp8Dp66b0Fcxp3qMfED6M89qVCJiCf9p0r0WG30DaQrclVB2MIl4xltmhsRn6P2s2UIOr6kK5XwJZI4pIqZJHqW7Olo91EcqjJQJ4RR2dYUhC8LcBwYF/XzX7FCX4cP7LEzdsJnT3sl9CHTa4IhFPgcc3cyKPemnvAwe0j7npcrqB5mJ4FFM0uwYZEwphVUls1KdpuxRXrX279SCIiYB2kObwTMR12mSVyPs5eERAZeUUxMELQG4c4xHP6yGtxjedcArM3uInBmt0X1nCXz25ealXVrZtadqVFRskKTz2ruPek+6DXf0LBFDo84ZDKspi61g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none Received: from CO6PR12MB5491.namprd12.prod.outlook.com (2603:10b6:303:13b::8) by CO6PR12MB5425.namprd12.prod.outlook.com (2603:10b6:303:13e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19; Mon, 23 Aug 2021 05:35:48 +0000 Received: from CO6PR12MB5491.namprd12.prod.outlook.com ([fe80::e5bf:5ad4:1dd9:29f]) by CO6PR12MB5491.namprd12.prod.outlook.com ([fe80::e5bf:5ad4:1dd9:29f%5]) with mapi id 15.20.4436.024; Mon, 23 Aug 2021 05:35:48 +0000 From: "Sharma, Alok Kumar" To: "dwz@sourceware.org" CC: "George, Jini Susan" , "Achra, Nitika" , "E, Nagajyothi" , "Joseph, Ancel" Subject: [PATCH] Split DWARF support for DWZ Thread-Topic: [PATCH] Split DWARF support for DWZ Thread-Index: AdeX4GawcXtVk+E3Rqi2r/186EFahw== Date: Mon, 23 Aug 2021 05:35:47 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_64e4cbe8-b4f6-45dc-bcba-6123dfd2d8bf_Enabled=true; MSIP_Label_64e4cbe8-b4f6-45dc-bcba-6123dfd2d8bf_SetDate=2021-08-23T05:27:49Z; MSIP_Label_64e4cbe8-b4f6-45dc-bcba-6123dfd2d8bf_Method=Privileged; MSIP_Label_64e4cbe8-b4f6-45dc-bcba-6123dfd2d8bf_Name=Non-Business-AIP 2.0; MSIP_Label_64e4cbe8-b4f6-45dc-bcba-6123dfd2d8bf_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_64e4cbe8-b4f6-45dc-bcba-6123dfd2d8bf_ActionId=506e7003-7bce-474b-b696-a833b1702a16; MSIP_Label_64e4cbe8-b4f6-45dc-bcba-6123dfd2d8bf_ContentBits=0 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 83b3ca26-75f6-49a9-1c8f-08d965f7dca1 x-ms-traffictypediagnostic: CO6PR12MB5425: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:366; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 54Y7xpjzPl0ZNi4AOrGtDV+vn135QHak20wL2GJDv4tGuHWzLMxvDxNQqEfv5xneTQ5vmLBEwYKQxrXdLvtXFEAJdgrU2uw0H2sX73qGEfpwzJKB8oPcjI9O61bMVO5oL+6WrvP+A7SHTnj3vLltvhr21V+qcn8iy1mk7F7kDkLrhhdnpg8SFEDwAYt08jryzQBqs6GtzE68EhnIPLebi8QAb4kjYoI1ptfs/1xv9itCnD+OO/C384qan8k/yq8jtaxdef+1gS3REHv++mQnvpeLVlpK3Dq2m3GMG/050sn5YRFBRB23d0tyDb9PvZh17i82E+dUV0T71d9qiKL8xvT+H6d3Gl2wsmdyIjrbFZgux4WR/IYCByPqbMlmwRbkkalXaqrX86Fh8J4gA1zY4GpE7gEFFzeyAyNttfKjN1h419Wq/K0pqc5i8LCqSULC0vt978Y2h/q6fWjdqOoz1b4bN+0jgFw3C5qKWlEUkONFTlaqil68EmynWTUfE/2qfxXR9Fa+27z9h3Ddce0Eda8IalA/pdK2jxXeBosfcBXp5Z8RRGKnD4rc165fqHPAvihoKc/T0t89o6AzEFUObIFQwthhR2gYdME0Es1+to0LjiTdAm0Eg0RgLBm8EdTudn2xcW8mzzBf78CbpqATOIUE+U0H5/HKwy131wo5JqXx3EybWHGr556+N+ue9nJgGLSnF0RUNfoc3KjRJeKT7g== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR12MB5491.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(508600001)(38070700005)(76116006)(8936002)(5660300002)(86362001)(6506007)(83380400001)(66946007)(186003)(99936003)(66616009)(66476007)(66556008)(64756008)(66446008)(7696005)(52536014)(4326008)(6916009)(54906003)(316002)(2906002)(38100700002)(122000001)(9686003)(8676002)(71200400001)(55016002)(33656002)(26005); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?PDVhpP/tXZx5yzcTxkw5JMd2hq/EGd5n0LrqsRfPmxIfccyZQncKgxCebifi?= =?us-ascii?Q?nRgTOE9FwAOm+wcTg0WaL2wwlyv3FllbDiqah9j1ICJBPdsrq93ZNOwDeAeg?= =?us-ascii?Q?2WTnlvPpbMx9AWC07y2VZmYF2oTNVKUMNmTntZKMAlrQGOtc20KyomD74bka?= =?us-ascii?Q?MEa6VkJBVHAPPGTrD5ENp/L6BMtPwDmIgpcudFNTI/hLfeUarsPpj2aOPPSa?= =?us-ascii?Q?sCt/vitHA6+fMSvn+eMdo0bJT1hfYchwAgEFeXKlw/OEuDwwqtT9ZWIT50js?= =?us-ascii?Q?nbnXESG6zUYmz4eLPkDzCoknXehRMT9TcNhBmOFvWoib2qA1s8n4n5xppIwU?= =?us-ascii?Q?xFUP57uaU2BEfNRut0mGbeK8A6lmYMK9B0R/2rF1qa0vtlNedi7yo9DFhOoj?= =?us-ascii?Q?rCY32ufPynbfNWCfkRMTE3pyZhjPq0AVCYni1VAji1KtJJM8p/f5H4DbnSWj?= =?us-ascii?Q?vJQshHrEVB5PtPUUEnq/vBulNJQzLx+wpoUflOAFuhNL4cImCnCtsuqgW6/G?= =?us-ascii?Q?/fktjWzeS5aMZ1AwqTzOKM8dA56I4LF2W6KStF0zsOjfHaSvtOKp7aLG5pgY?= =?us-ascii?Q?Lw1BihNSDGO0uyzsN/rblO1E6rutwg9Yco2v7in5xWysfafyIjAlLkfm+Rmp?= =?us-ascii?Q?elnQ6zvkQJtab1+g9VuPie8utTDoMQGqpi7axWLTRPTy4g8mY9EMBE7dgdHa?= =?us-ascii?Q?11zE96gyp9gqEXoNYbrZRvIll3fjyH5iWDWhDZrLBCoz7m1XnFAzfL8c5NSj?= =?us-ascii?Q?LHT6nCpQ+/RvV8lB/uUWIbW78bQJ/UHMxVivLB3GfYQ9Dmm0foFHHaNaqtkZ?= =?us-ascii?Q?pmBtdC7vu0T8L3Nu2k/wfytBrQjkQ1Ys6pDNjy6RdkEpYdu6iKVsg20YjlZV?= =?us-ascii?Q?Ta/Qzn1HPYln+i7Sy8+pa2xEfxxYaCJM9tX2rVjWDz1sgtfMTriZ2GtbGdtZ?= =?us-ascii?Q?ufAtJ3UPiZAoNNlr4GCBpMxShQUClgGSS5+ioRCvHVjT1eZf1qalnpegI2Y1?= =?us-ascii?Q?d3KxO+Lrk9Cvx1rv+7xMPTsSr97PoeesjwUEgiciAlooVItplLZBUvLnMx6b?= =?us-ascii?Q?Q33EobQ2c1n1g6Byxb3ZQH8BqrOj9U3gFFs9UPIMLiRWLKck782qRzRuy2s+?= =?us-ascii?Q?VL9PJW4NyeQY5sbTT62i8jTMyglnUA38BF5TFbOmSuBpsqEaCTk/dq/yfIdc?= =?us-ascii?Q?PNbNktQXjnzyvsX5x0q2MSIwPma4myqlue9GBJD35dKh/J33H8vtFYhCGBow?= =?us-ascii?Q?dwPu1Z4WNaCZsKsW+mqErE6Mr2lce/eg7+jgcpMto/cYbPwoe74crEqt6YAj?= =?us-ascii?Q?sDs=3D?= Content-Type: multipart/mixed; boundary="_002_CO6PR12MB5491CA84BD1DAE3F60259DF69EC49CO6PR12MB5491namp_" MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR12MB5491.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 83b3ca26-75f6-49a9-1c8f-08d965f7dca1 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Aug 2021 05:35:47.9761 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 2l23ltDJ5k65LSYEp2rB+IwjHfuGkutuGNCfEZEVEykqEN+QVd57fADrRHXzRrC7DivS5G5/kc9nVHMQiZoj+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR12MB5425 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_PASS, TXREP, T_SPF_HELO_TEMPERROR autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: dwz@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Dwz mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Aug 2021 05:36:01 -0000 --_002_CO6PR12MB5491CA84BD1DAE3F60259DF69EC49CO6PR12MB5491namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi all, I request you to please review the source modification done to support spli= t DWARF. Existing DWZ when deals with executable having split DWARF information in separate file (DW_AT_GNU_dwo_name/DW_AT_dwo_name), it ignores the separate file and only attempts to optimize main executable which has very less information as almost all the debug information is present in sepaterate file. Now DWZ is modified to extract the separate file name from atributes DW_AT_GNU_dwo_name/DW_AT_dwo_name in main executable and calls function DWZ on separate file as well. While processing DWO file, information is read from corresponding ".dwo= " sections in place of original one. This is assisted by macros DEFINE_DEBUG (defining section enum) and DEFINE_SECTION (defining secti= on names along with other fields) in a way that very next section to the original one is the ".dwo" variant of it. When we process DWO file we access section using macro "INDEX(DEBUG_SECTION)", which is defined as "(DEBUG_SECTION + is_dwo_file)". This way we avoid any duplicacy and use existing code. Regards, Alok --_002_CO6PR12MB5491CA84BD1DAE3F60259DF69EC49CO6PR12MB5491namp_ Content-Type: application/octet-stream; name="0001-Split-DWARF-support-for-DWZ.patch" Content-Description: 0001-Split-DWARF-support-for-DWZ.patch Content-Disposition: attachment; filename="0001-Split-DWARF-support-for-DWZ.patch"; size=81705; creation-date="Mon, 23 Aug 2021 05:30:42 GMT"; modification-date="Mon, 23 Aug 2021 05:26:57 GMT" Content-Transfer-Encoding: base64 RnJvbSBiM2Y1ZWQ5OTA4NWEwODQ1NWMxMzY4OGYyMTRlMTBhMWYyMmM1NzBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbG9rIEt1bWFyIFNoYXJtYSA8QWxva0t1bWFyLlNoYXJtYUBh bWQuY29tPgpEYXRlOiBGcmksIDEyIEZlYiAyMDIxIDE2OjQ0OjA0ICswNTMwClN1YmplY3Q6IFtQ QVRDSCAxLzldIFNwbGl0IERXQVJGIHN1cHBvcnQgZm9yIERXWgoKRXhpc3RpbmcgRFdaIHdoZW4g ZGVhbHMgd2l0aCBleGVjdXRhYmxlIGhhdmluZyBzcGxpdCBEV0FSRiBpbmZvcm1hdGlvbgppbiBz ZXBhcmF0ZSBmaWxlIChEV19BVF9HTlVfZHdvX25hbWUvRFdfQVRfZHdvX25hbWUpLCBpdCBpZ25v cmVzIHRoZQpzZXBhcmF0ZSBmaWxlIGFuZCBvbmx5IGF0dGVtcHRzIHRvIG9wdGltaXplIG1haW4g ZXhlY3V0YWJsZSB3aGljaCBoYXMKdmVyeSBsZXNzIGluZm9ybWF0aW9uIGFzIGFsbW9zdCBhbGwg dGhlIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByZXNlbnQKaW4gc2VwYXRlcmF0ZSBmaWxlLgoKTm93 IERXWiBpcyBtb2RpZmllZCB0byBleHRyYWN0IHRoZSBzZXBhcmF0ZSBmaWxlIG5hbWUgZnJvbQph dHJpYnV0ZXMgRFdfQVRfR05VX2R3b19uYW1lL0RXX0FUX2R3b19uYW1lIGluIG1haW4gZXhlY3V0 YWJsZSBhbmQKY2FsbHMgZnVuY3Rpb24gRFdaIG9uIHNlcGFyYXRlIGZpbGUgYXMgd2VsbC4KCldo aWxlIHByb2Nlc3NpbmcgRFdPIGZpbGUsIGluZm9ybWF0aW9uIGlzIHJlYWQgZnJvbSBjb3JyZXNw b25kaW5nICIuZHdvIgpzZWN0aW9ucyBpbiBwbGFjZSBvZiBvcmlnaW5hbCBvbmUuIFRoaXMgaXMg YXNzaXN0ZWQgYnkgbWFjcm9zCkRFRklORV9ERUJVRyAoZGVmaW5pbmcgc2VjdGlvbiBlbnVtKSBh bmQgREVGSU5FX1NFQ1RJT04gKGRlZmluaW5nIHNlY3Rpb24KbmFtZXMgYWxvbmcgd2l0aCBvdGhl ciBmaWVsZHMpIGluIGEgd2F5IHRoYXQgdmVyeSBuZXh0IHNlY3Rpb24gdG8gdGhlCm9yaWdpbmFs IG9uZSBpcyB0aGUgIi5kd28iIHZhcmlhbnQgb2YgaXQuIFdoZW4gd2UgcHJvY2VzcyBEV08gZmls ZSB3ZQphY2Nlc3Mgc2VjdGlvbiB1c2luZyBtYWNybyAiSU5ERVgoREVCVUdfU0VDVElPTikiLCB3 aGljaCBpcyBkZWZpbmVkIGFzCiIoREVCVUdfU0VDVElPTiArIGlzX2R3b19maWxlKSIuIFRoaXMg d2F5IHdlIGF2b2lkIGFueSBkdXBsaWNhY3kgYW5kCnVzZSBleGlzdGluZyBjb2RlLgotLS0KIGR3 ei5jIHwgODUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0NjEgaW5zZXJ0aW9ucygrKSwgMzkyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2R3ei5jIGIvZHd6LmMKaW5kZXggYTNiMjg5Zi4uODdkNTI2 YiAxMDA2NDQKLS0tIGEvZHd6LmMKKysrIGIvZHd6LmMKQEAgLTExMiw2ICsxMTIsMTUgQEAKICMg ZGVmaW5lIE5UX0dOVV9CVUlMRF9JRCAzCiAjZW5kaWYKIAorLyogTmFtZSBvZiBEV08gZmlsZSBp cyBzdG9yZWQgaW4gJ2R3b2ZpbGUnIGZyb20gRFdfQVRfZHdvX25hbWUgb3IKKyAgIERXX0FUX0dO VV9kd29fbmFtZSBvZiBEV19UQUdfY29tcGlsZV91bml0IGRpZSBmcm9tIG1haW4gZXhlY3V0YWJs ZS4gICovCitzdGF0aWMgY2hhciAqZHdvZmlsZSA9IE5VTEw7CisKKy8qIElmICdkd29maWxlJyBp cyBmb3VuZCBpbiBEV19UQUdfY29tcGlsZV91bml0LCBhZGRpdGlvbmFsbHkgZHd6IGlzIGNhbGxl ZAorICAgZm9yICdkd29maWxlJyBhcyB3ZWxsLCB3aGljaCBoYXMgYWxsIHRoZSBkZWJ1ZyBpbmZv IGFuZCBvcHBvcnR1aXR5IGZvcgorICAgb3B0aW1pemF0aW9ucy4gICovCitzdGF0aWMgaW50IGlz X2R3b19maWxlID0gZmFsc2U7CisKIC8qIFByaW50IG1lbW9yeSBhbW91bnQgTSAoaW4ga2IpIGlu IGJvdGggZXhhY3QgYW5kIGh1bWFuIHJlYWRhYmxlLCBsaWtlIHNvOgogICAgMTM4MjUwOCAoMS4z RykuICAqLwogc3RhdGljIHZvaWQKQEAgLTcxMiwzNiArNzIxLDU1IEBAIGdldF9EV19MTkNUX3N0 ciAodW5zaWduZWQgaW50IGxuY3QpCiAgIHJldHVybiBidWY7CiB9CiAKKy8qIFRoZSBtYWNybyBE RUZJTkVfREVCVUcgaXMgdXNlZCB0byBkZWNsYXJlIGR3byB2YXJpYW50IGFsb25nIHdpdGggb3Jp Z2luYWwKKyAgIGVudW0uICBFeCB7REVCVUdfSU5GTywgREVCVUdfSU5GT19EV08sIERFQlVHX0FC QlJFViwgREVCVUdfQUJCUkVWX0RXTywgLi4uICovCisjZGVmaW5lIERFRklORV9ERUJVRyhraW5k KSBraW5kLCBraW5kIyNfRFdPCiAvKiBUaGlzIG11c3QgbWF0Y2ggdGhlIGRlYnVnX3NlY3Rpb25z IGFycmF5IGNvbnRlbnQKICAgIGJlbG93LiAgKi8KIGVudW0gZGVidWdfc2VjdGlvbl9raW5kCiB7 Ci0gIERFQlVHX0lORk8sCi0gIERFQlVHX0FCQlJFViwKLSAgREVCVUdfTElORSwKLSAgREVCVUdf U1RSLAotICBERUJVR19NQUNSTywKLSAgREVCVUdfVFlQRVMsCi0gIERFQlVHX0FSQU5HRVMsCi0g IERFQlVHX1BVQk5BTUVTLAotICBERUJVR19QVUJUWVBFUywKLSAgREVCVUdfR05VX1BVQk5BTUVT LAotICBERUJVR19HTlVfUFVCVFlQRVMsCi0gIERFQlVHX01BQ0lORk8sCi0gIERFQlVHX0xPQywK LSAgREVCVUdfTE9DTElTVFMsCi0gIERFQlVHX0ZSQU1FLAotICBERUJVR19SQU5HRVMsCi0gIERF QlVHX1JOR0xJU1RTLAotICBERUJVR19MSU5FX1NUUiwKLSAgREVCVUdfU1VQLAotICBERUJVR19H REJfU0NSSVBUUywKLSAgR0RCX0lOREVYLAotICBHTlVfREVCVUdBTFRMSU5LLAorICBERUZJTkVf REVCVUcoREVCVUdfSU5GTyksCisgIERFRklORV9ERUJVRyhERUJVR19BQkJSRVYpLAorICBERUZJ TkVfREVCVUcoREVCVUdfTElORSksCisgIERFRklORV9ERUJVRyhERUJVR19TVFIpLAorICBERUZJ TkVfREVCVUcoREVCVUdfTUFDUk8pLAorICBERUZJTkVfREVCVUcoREVCVUdfVFlQRVMpLAorICBE RUZJTkVfREVCVUcoREVCVUdfQVJBTkdFUyksCisgIERFRklORV9ERUJVRyhERUJVR19QVUJOQU1F UyksCisgIERFRklORV9ERUJVRyhERUJVR19QVUJUWVBFUyksCisgIERFRklORV9ERUJVRyhERUJV R19HTlVfUFVCTkFNRVMpLAorICBERUZJTkVfREVCVUcoREVCVUdfR05VX1BVQlRZUEVTKSwKKyAg REVGSU5FX0RFQlVHKERFQlVHX01BQ0lORk8pLAorICBERUZJTkVfREVCVUcoREVCVUdfTE9DKSwK KyAgREVGSU5FX0RFQlVHKERFQlVHX0xPQ0xJU1RTKSwKKyAgREVGSU5FX0RFQlVHKERFQlVHX0ZS QU1FKSwKKyAgREVGSU5FX0RFQlVHKERFQlVHX1JBTkdFUyksCisgIERFRklORV9ERUJVRyhERUJV R19STkdMSVNUUyksCisgIERFRklORV9ERUJVRyhERUJVR19MSU5FX1NUUiksCisgIERFRklORV9E RUJVRyhERUJVR19TVVApLAorICBERUZJTkVfREVCVUcoREVCVUdfR0RCX1NDUklQVFMpLAorICBE RUZJTkVfREVCVUcoR0RCX0lOREVYKSwKKyAgREVGSU5FX0RFQlVHKEdOVV9ERUJVR0FMVExJTksp LAogICBTRUNUSU9OX0NPVU5ULAotICBTQVZFRF9TRUNUSU9OUyA9IERFQlVHX1RZUEVTICsgMQor ICBTQVZFRF9TRUNUSU9OUyA9IERFQlVHX1RZUEVTX0RXTyArIDEsCiB9OwogCisvKiBNYWNybyBE RUZJTkVfREVCVUcgc3VyZSAiLmR3byIgc2VjdGlvbnMgYXJlIHByZXNldmVkIGp1c3QgbmV4dCB0 byB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgb3JpZ2luYWwgc2VjdGlvbi4gaXNfZHdvX2ZpbGUgaXMg MSB3aGVuIHByb2Nlc3NpbmcgZHdvIGZpbGUgICovCisjZGVmaW5lIElOREVYKERFQlVHX1NFQ1RJ T04pIChERUJVR19TRUNUSU9OICsgaXNfZHdvX2ZpbGUpCisKKy8qIE9yaWdpbmFsIGFuZCBjb3Jy ZXNwb25kaW5nIC5kd28gc2VjdGlvbnMgYXJlIGtlcHQgdG9nZXRoZXIuCisgICBFeC4KKyAgICAg ICAgeyIuZGVidWdfaW5mbyIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwKKyAgICAgICAgeyIuZGVi dWdfaW5mby5kd28iLCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0sCisgICAgICAgIHsiLmRlYnVnX2Fi YnJldiIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwKKyAgICAgICAgeyIuZGVidWdfYWJicmV2LmR3 byIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwKKyovCisKKyNkZWZpbmUgREVGSU5FX1NFQ1RJT04o bmFtZSkgXAorICAgICAgICB7I25hbWUsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwgXAorICAgICAg ICB7I25hbWUiLmR3byIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfQorCiAvKiBEZXRhaWxzIGFib3V0 IHN0YW5kYXJkIERXQVJGIHNlY3Rpb25zLiAgKi8KIHN0YXRpYyBzdHJ1Y3QKIHsKQEAgLTc1Mywy OCArNzgxLDI4IEBAIHN0YXRpYyBzdHJ1Y3QKICAgaW50IHNlYzsKIH0gZGVidWdfc2VjdGlvbnNb XSA9CiAgIHsKLSAgICB7ICIuZGVidWdfaW5mbyIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwKLSAg ICB7ICIuZGVidWdfYWJicmV2IiwgTlVMTCwgTlVMTCwgMCwgMCwgMCB9LAotICAgIHsgIi5kZWJ1 Z19saW5lIiwgTlVMTCwgTlVMTCwgMCwgMCwgMCB9LAotICAgIHsgIi5kZWJ1Z19zdHIiLCBOVUxM LCBOVUxMLCAwLCAwLCAwIH0sCi0gICAgeyAiLmRlYnVnX21hY3JvIiwgTlVMTCwgTlVMTCwgMCwg MCwgMCB9LAotICAgIHsgIi5kZWJ1Z190eXBlcyIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwKLSAg ICB7ICIuZGVidWdfYXJhbmdlcyIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwKLSAgICB7ICIuZGVi dWdfcHVibmFtZXMiLCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0sCi0gICAgeyAiLmRlYnVnX3B1YnR5 cGVzIiwgTlVMTCwgTlVMTCwgMCwgMCwgMCB9LAotICAgIHsgIi5kZWJ1Z19nbnVfcHVibmFtZXMi LCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0sCi0gICAgeyAiLmRlYnVnX2dudV9wdWJ0eXBlcyIsIE5V TEwsIE5VTEwsIDAsIDAsIDAgfSwKLSAgICB7ICIuZGVidWdfbWFjaW5mbyIsIE5VTEwsIE5VTEws IDAsIDAsIDAgfSwKLSAgICB7ICIuZGVidWdfbG9jIiwgTlVMTCwgTlVMTCwgMCwgMCwgMCB9LAot ICAgIHsgIi5kZWJ1Z19sb2NsaXN0cyIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwKLSAgICB7ICIu ZGVidWdfZnJhbWUiLCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0sCi0gICAgeyAiLmRlYnVnX3Jhbmdl cyIsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfSwKLSAgICB7ICIuZGVidWdfcm5nbGlzdHMiLCBOVUxM LCBOVUxMLCAwLCAwLCAwIH0sCi0gICAgeyAiLmRlYnVnX2xpbmVfc3RyIiwgTlVMTCwgTlVMTCwg MCwgMCwgMCB9LAotICAgIHsgIi5kZWJ1Z19zdXAiLCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0sCi0g ICAgeyAiLmRlYnVnX2dkYl9zY3JpcHRzIiwgTlVMTCwgTlVMTCwgMCwgMCwgMCB9LAotICAgIHsg Ii5nZGJfaW5kZXgiLCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0sCi0gICAgeyAiLmdudV9kZWJ1Z2Fs dGxpbmsiLCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0sCisgICAgREVGSU5FX1NFQ1RJT04oLmRlYnVn X2luZm8pLAorICAgIERFRklORV9TRUNUSU9OKC5kZWJ1Z19hYmJyZXYpLAorICAgIERFRklORV9T RUNUSU9OKC5kZWJ1Z19saW5lKSwKKyAgICBERUZJTkVfU0VDVElPTiguZGVidWdfc3RyKSwKKyAg ICBERUZJTkVfU0VDVElPTiguZGVidWdfbWFjcm8pLAorICAgIERFRklORV9TRUNUSU9OKC5kZWJ1 Z190eXBlcyksCisgICAgREVGSU5FX1NFQ1RJT04oLmRlYnVnX2FyYW5nZXMpLAorICAgIERFRklO RV9TRUNUSU9OKC5kZWJ1Z19wdWJuYW1lcyksCisgICAgREVGSU5FX1NFQ1RJT04oLmRlYnVnX3B1 YnR5cGVzKSwKKyAgICBERUZJTkVfU0VDVElPTiguZGVidWdfZ251X3B1Ym5hbWVzKSwKKyAgICBE RUZJTkVfU0VDVElPTiguZGVidWdfZ251X3B1YnR5cGVzKSwKKyAgICBERUZJTkVfU0VDVElPTigu ZGVidWdfbWFjaW5mbyksCisgICAgREVGSU5FX1NFQ1RJT04oLmRlYnVnX2xvYyksCisgICAgREVG SU5FX1NFQ1RJT04oLmRlYnVnX2xvY2xpc3RzKSwKKyAgICBERUZJTkVfU0VDVElPTiguZGVidWdf ZnJhbWUpLAorICAgIERFRklORV9TRUNUSU9OKC5kZWJ1Z19yYW5nZXMpLAorICAgIERFRklORV9T RUNUSU9OKC5kZWJ1Z19ybmdsaXN0cyksCisgICAgREVGSU5FX1NFQ1RJT04oLmRlYnVnX2xpbmVf c3RyKSwKKyAgICBERUZJTkVfU0VDVElPTiguZGVidWdfc3VwKSwKKyAgICBERUZJTkVfU0VDVElP TiguZGVidWdfZ2RiX3NjcmlwdHMpLAorICAgIERFRklORV9TRUNUSU9OKC5nZGJfaW5kZXgpLAor ICAgIERFRklORV9TRUNUSU9OKC5nbnVfZGVidWdhbHRsaW5rKSwKICAgICB7IE5VTEwsIE5VTEws IE5VTEwsIDAsIDAsIDAgfQogICB9OwogCkBAIC0xMzgwLDkgKzE0MDgsOSBAQCBza2lwX2F0dHJf bm9fZHdfZm9ybV9pbmRpcmVjdCAodW5zaWduZWQgaW50IGN1X3ZlcnNpb24sIHVpbnQzMl90IGZv cm0sCiBzdGF0aWMgaW50CiByZWFkX2RlYnVnX2xpbmUgKERTTyAqZHNvLCBkd19jdV9yZWYgY3Us IHVpbnQzMl90IG9mZikKIHsKLSAgdW5zaWduZWQgY2hhciAqcHRyID0gZGVidWdfc2VjdGlvbnNb REVCVUdfTElORV0uZGF0YSwgKmRpciwgKmZpbGU7CisgIHVuc2lnbmVkIGNoYXIgKnB0ciA9IGRl YnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0xJTkUpXS5kYXRhLCAqZGlyLCAqZmlsZTsKICAgdW5z aWduZWQgY2hhciAqKmRpcnQ7Ci0gIHVuc2lnbmVkIGNoYXIgKmVuZHNlYyA9IHB0ciArIGRlYnVn X3NlY3Rpb25zW0RFQlVHX0xJTkVdLnNpemU7CisgIHVuc2lnbmVkIGNoYXIgKmVuZHNlYyA9IHB0 ciArIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0xJTkUpXS5zaXplOwogICB1bnNpZ25lZCBj aGFyICplbmRjdSwgKmVuZHByb2w7CiAgIHVuc2lnbmVkIGNoYXIgb3Bjb2RlX2Jhc2U7CiAgIHVu c2lnbmVkIGludCBjdWxlbjsKQEAgLTEzOTcsNyArMTQyNSw3IEBAIHJlYWRfZGVidWdfbGluZSAo RFNPICpkc28sIGR3X2N1X3JlZiBjdSwgdWludDMyX3Qgb2ZmKQogICBpbnQgc2l6ZV9uZHggPSAt MTsKICAgdWludDE2X3QgZWxlbXNbMjU2XTsKIAotICBpZiAob2ZmID49IGRlYnVnX3NlY3Rpb25z W0RFQlVHX0xJTkVdLnNpemUgLSA0KQorICBpZiAob2ZmID49IGRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX0xJTkUpXS5zaXplIC0gNCkKICAgICB7CiAgICAgICBlcnJvciAoMCwgMCwgIiVzOiAu ZGVidWdfbGluZSByZWZlcmVuY2UgYWJvdmUgZW5kIG9mIHNlY3Rpb24iLAogCSAgICAgZHNvLT5m aWxlbmFtZSk7CkBAIC0xNTUxLDIyICsxNTc5LDIyIEBAIHJlYWRfZGVidWdfbGluZSAoRFNPICpk c28sIGR3X2N1X3JlZiBjdSwgdWludDMyX3Qgb2ZmKQogCQkgICAgY2FzZSBEV19GT1JNX3N0cnA6 CiAJCSAgICAgIHsKIAkJCXVuc2lnbmVkIGludCBzdHJwID0gZG9fcmVhZF8zMiAocHRyKTsKLQkJ CWlmIChzdHJwID49IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uc2l6ZSkKKwkJCWlmIChzdHJw ID49IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLnNpemUpCiAJCQkgIGQgPSBOVUxM OwogCQkJZWxzZQogCQkJICBkID0gKCh1bnNpZ25lZCBjaGFyICopCi0JCQkgICAgICAgZGVidWdf c2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhCisJCQkgICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgo REVCVUdfU1RSKV0uZGF0YQogCQkJICAgICAgICsgc3RycCk7CiAJCSAgICAgIH0KIAkJICAgICAg YnJlYWs7CiAJCSAgICBjYXNlIERXX0ZPUk1fbGluZV9zdHJwOgogCQkgICAgICB7CiAJCQl1bnNp Z25lZCBpbnQgbGluZV9zdHJwID0gZG9fcmVhZF8zMiAocHRyKTsKLQkJCWlmIChsaW5lX3N0cnAg Pj0gZGVidWdfc2VjdGlvbnNbREVCVUdfTElORV9TVFJdLnNpemUpCisJCQlpZiAobGluZV9zdHJw ID49IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0xJTkVfU1RSKV0uc2l6ZSkKIAkJCSAgZCA9 IE5VTEw7CiAJCQllbHNlCiAJCQkgIGQgPSAoKHVuc2lnbmVkIGNoYXIgKikKLQkJCSAgICAgICBk ZWJ1Z19zZWN0aW9uc1tERUJVR19MSU5FX1NUUl0uZGF0YQorCQkJICAgICAgIGRlYnVnX3NlY3Rp b25zW0lOREVYKERFQlVHX0xJTkVfU1RSKV0uZGF0YQogCQkJICAgICAgICsgbGluZV9zdHJwKTsK IAkJICAgICAgfQogCQkgICAgICBicmVhazsKQEAgLTE3NzQsMTEgKzE4MDIsMTEgQEAgcmVhZF9k ZWJ1Z19saW5lIChEU08gKmRzbywgZHdfY3VfcmVmIGN1LCB1aW50MzJfdCBvZmYpCiAJCSAgICBj YXNlIERXX0ZPUk1fc3RycDoKIAkJICAgICAgewogCQkJdW5zaWduZWQgaW50IHN0cnAgPSBkb19y ZWFkXzMyIChwdHIpOwotCQkJaWYgKHN0cnAgPj0gZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5z aXplKQorCQkJaWYgKHN0cnAgPj0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uc2l6 ZSkKIAkJCSAgZiA9IE5VTEw7CiAJCQllbHNlCiAJCQkgIHsKLQkJCSAgICBmID0gKChjaGFyICop IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YQorCQkJICAgIGYgPSAoKGNoYXIgKikgZGVi dWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uZGF0YQogCQkJCSArIHN0cnApOwogCQkJICAg IGVuZCA9IGYgKyBzdHJsZW4gKGYpICsgMTsKIAkJCSAgfQpAQCAtMTc4NywxMSArMTgxNSwxMSBA QCByZWFkX2RlYnVnX2xpbmUgKERTTyAqZHNvLCBkd19jdV9yZWYgY3UsIHVpbnQzMl90IG9mZikK IAkJICAgIGNhc2UgRFdfRk9STV9saW5lX3N0cnA6CiAJCSAgICAgIHsKIAkJCXVuc2lnbmVkIGlu dCBsaW5lX3N0cnAgPSBkb19yZWFkXzMyIChwdHIpOwotCQkJaWYgKGxpbmVfc3RycCA+PSBkZWJ1 Z19zZWN0aW9uc1tERUJVR19MSU5FX1NUUl0uc2l6ZSkKKwkJCWlmIChsaW5lX3N0cnAgPj0gZGVi dWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTElORV9TVFIpXS5zaXplKQogCQkJICBmID0gTlVMTDsK IAkJCWVsc2UKIAkJCSAgewotCQkJICAgIGYgPSAoKGNoYXIgKikgZGVidWdfc2VjdGlvbnNbREVC VUdfTElORV9TVFJdLmRhdGEKKwkJCSAgICBmID0gKChjaGFyICopIGRlYnVnX3NlY3Rpb25zW0lO REVYKERFQlVHX0xJTkVfU1RSKV0uZGF0YQogCQkJCSArIGxpbmVfc3RycCk7CiAJCQkgICAgZW5k ID0gZiArIHN0cmxlbiAoZikgKyAxOwogCQkJICB9CkBAIC0xODgzLDcgKzE5MTEsOCBAQCBzdGF0 aWMgdW5zaWduZWQgaW50CiBlc3RpbWF0ZV9ucl9kaWVzICh2b2lkKQogewogICB1bnNpZ25lZCBp bnQgYXZlcmFnZV9kaWVfc2l6ZSA9IDExOwotICB1bnNpZ25lZCBpbnQgbnJfZGllcyA9IGRlYnVn X3NlY3Rpb25zW0RFQlVHX0lORk9dLnNpemUgLyBhdmVyYWdlX2RpZV9zaXplOworICB1bnNpZ25l ZCBpbnQgbnJfZGllcyA9CisgICAgICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0u c2l6ZSAvIGF2ZXJhZ2VfZGllX3NpemU7CiAgIHJldHVybiBucl9kaWVzOwogfQogCkBAIC0yMTAw LDExICsyMTI5LDExIEBAIGdldF9BVCAoZHdfZGllX3JlZiBkaWUsIGVudW0gZHdhcmZfYXR0cmli dXRlIGF0LCBlbnVtIGR3YXJmX2Zvcm0gKmZvcm1wKQogICB1bnNpZ25lZCBjaGFyICpwdHI7CiAg IGR3X2N1X3JlZiBjdSA9IGRpZV9jdSAoZGllKTsKICAgaWYgKHVubGlrZWx5IChmaV9tdWx0aWZp bGUpICYmIGN1LT5jdV9raW5kID09IENVX0FMVCkKLSAgICBwdHIgPSBhbHRfZGF0YVtERUJVR19J TkZPXTsKKyAgICBwdHIgPSBhbHRfZGF0YVtJTkRFWChERUJVR19JTkZPKV07CiAgIGVsc2UgaWYg KGN1LT5jdV9raW5kID09IENVX1RZUEVTKQotICAgIHB0ciA9IGRlYnVnX3NlY3Rpb25zW0RFQlVH X1RZUEVTXS5kYXRhOworICAgIHB0ciA9IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0lORk8p XS5kYXRhOwogICBlbHNlCi0gICAgcHRyID0gZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10uZGF0 YTsKKyAgICBwdHIgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0uZGF0YTsKICAg cHRyICs9IGRpZS0+ZGllX29mZnNldDsKICAgc2tpcF9sZWIxMjggKHB0cik7CiAgIGZvciAoaSA9 IDA7IGkgPCB0LT5uYXR0cjsgKytpKQpAQCAtMjE5MywyMSArMjIyMiwyMSBAQCBnZXRfQVRfc3Ry aW5nIChkd19kaWVfcmVmIGRpZSwgZW51bSBkd2FyZl9hdHRyaWJ1dGUgYXQpCiAJdW5zaWduZWQg aW50IHN0cnAgPSByZWFkXzMyIChwdHIpOwogCWlmICh1bmxpa2VseSAoZmlfbXVsdGlmaWxlKSAm JiBkaWVfY3UgKGRpZSktPmN1X2tpbmQgPT0gQ1VfQUxUKQogCSAgewotCSAgICBpZiAoc3RycCA+ PSBhbHRfc2l6ZVtERUJVR19TVFJdKQorCSAgICBpZiAoc3RycCA+PSBhbHRfc2l6ZVtJTkRFWChE RUJVR19TVFIpXSkKIAkgICAgICByZXR1cm4gTlVMTDsKLQkgICAgcmV0dXJuIChjaGFyICopIGFs dF9kYXRhW0RFQlVHX1NUUl0gKyBzdHJwOworCSAgICByZXR1cm4gKGNoYXIgKikgYWx0X2RhdGFb SU5ERVgoREVCVUdfU1RSKV0gKyBzdHJwOwogCSAgfQotCWlmIChzdHJwID49IGRlYnVnX3NlY3Rp b25zW0RFQlVHX1NUUl0uc2l6ZSkKKwlpZiAoc3RycCA+PSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChE RUJVR19TVFIpXS5zaXplKQogCSAgcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIChjaGFyICopIGRlYnVn X3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YSArIHN0cnA7CisJcmV0dXJuIChjaGFyICopIGRlYnVn X3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRhdGEgKyBzdHJwOwogICAgICAgfQogICAgIGNh c2UgRFdfRk9STV9saW5lX3N0cnA6CiAgICAgICB7CiAJdW5zaWduZWQgaW50IGxpbmVfc3RycCA9 IHJlYWRfMzIgKHB0cik7Ci0JaWYgKGxpbmVfc3RycCA+PSBkZWJ1Z19zZWN0aW9uc1tERUJVR19M SU5FX1NUUl0uc2l6ZSkKKwlpZiAobGluZV9zdHJwID49IGRlYnVnX3NlY3Rpb25zW0lOREVYKERF QlVHX0xJTkVfU1RSKV0uc2l6ZSkKIAkgIHJldHVybiBOVUxMOwogCWVsc2UKLQkgIHJldHVybiAo Y2hhciAqKSBkZWJ1Z19zZWN0aW9uc1tERUJVR19MSU5FX1NUUl0uZGF0YSArIGxpbmVfc3RycDsK KwkgIHJldHVybiAoY2hhciAqKSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19MSU5FX1NUUild LmRhdGEgKyBsaW5lX3N0cnA7CiAgICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiBO VUxMOwpAQCAtMjY4Miw3ICsyNzExLDcgQEAgcmVhZF9sb2NsaXN0X2xvd19tZW1fcGhhc2UxIChE U08gKmRzbywgZHdfY3VfcmVmIGN1LCBkd19kaWVfcmVmIGRpZSwKICAgc2l6ZV90IGxlbiA9IDA7 CiAgIGludCBzZWM7CiAKLSAgc2VjID0gY3UtPmN1X3ZlcnNpb24gPCA1ID8gREVCVUdfTE9DIDog REVCVUdfTE9DTElTVFM7CisgIHNlYyA9IGN1LT5jdV92ZXJzaW9uIDwgNSA/IElOREVYKERFQlVH X0xPQykgOiBJTkRFWChERUJVR19MT0NMSVNUUyk7CiAgIHB0ciA9IGRlYnVnX3NlY3Rpb25zW3Nl Y10uZGF0YTsKICAgaWYgKHB0ciA9PSBOVUxMKQogICAgIHsKQEAgLTI3MDIsNyArMjczMSw3IEBA IHJlYWRfbG9jbGlzdF9sb3dfbWVtX3BoYXNlMSAoRFNPICpkc28sIGR3X2N1X3JlZiBjdSwgZHdf ZGllX3JlZiBkaWUsCiBhZ2FpbjoKICAgd2hpbGUgKHB0ciA8IGVuZHNlYykKICAgICB7Ci0gICAg ICBpZiAoc2VjID09IERFQlVHX0xPQykKKyAgICAgIGlmIChzZWMgPT0gSU5ERVgoREVCVUdfTE9D KSkKIAl7CiAJICBsb3cgPSByZWFkX3NpemUgKHB0ciwgcHRyX3NpemUpOwogCSAgaGlnaCA9IHJl YWRfc2l6ZSAocHRyICsgcHRyX3NpemUsIHB0cl9zaXplKTsKQEAgLTI5MzgsNyArMjk2Nyw3IEBA IHJlYWRfbG9jbGlzdCAoRFNPICpkc28sIGR3X2N1X3JlZiBjdSwgZHdfZGllX3JlZiBkaWUsIEdF bGZfQWRkciBvZmZzZXQpCiAgIGJvb2wgbmVlZF9hZGp1c3QgPSBmYWxzZTsKIAogICBkaWUtPmRp ZV9ja19zdGF0ZSA9IENLX0JBRDsKLSAgc2VjID0gY3UtPmN1X3ZlcnNpb24gPCA1ID8gREVCVUdf TE9DIDogREVCVUdfTE9DTElTVFM7CisgIHNlYyA9IGN1LT5jdV92ZXJzaW9uIDwgNSA/IElOREVY KERFQlVHX0xPQykgOiBJTkRFWChERUJVR19MT0NMSVNUUyk7CiAgIHB0ciA9IGRlYnVnX3NlY3Rp b25zW3NlY10uZGF0YTsKICAgaWYgKHB0ciA9PSBOVUxMKQogICAgIHsKQEAgLTI5NTgsNyArMjk4 Nyw3IEBAIHJlYWRfbG9jbGlzdCAoRFNPICpkc28sIGR3X2N1X3JlZiBjdSwgZHdfZGllX3JlZiBk aWUsIEdFbGZfQWRkciBvZmZzZXQpCiBhZ2FpbjoKICAgd2hpbGUgKHB0ciA8IGVuZHNlYykKICAg ICB7Ci0gICAgICBpZiAoY3UtPmN1X3ZlcnNpb24gPCA1KQorICAgICAgaWYgKGN1LT5jdV92ZXJz aW9uIDwgNSAmJiAhaXNfZHdvX2ZpbGUpCiAJewogCSAgbG93ID0gcmVhZF9zaXplIChwdHIsIHB0 cl9zaXplKTsKIAkgIGhpZ2ggPSByZWFkX3NpemUgKHB0ciArIHB0cl9zaXplLCBwdHJfc2l6ZSk7 CkBAIC0zMDYwLDcgKzMwODksNyBAQCBkb25lOgogICAgICAgYWRqLnN0YXJ0X29mZnNldCA9IG9m ZnNldDsKICAgICAgIGFkai5lbmRfb2Zmc2V0ID0gcHRyIC0gZGVidWdfc2VjdGlvbnNbc2VjXS5k YXRhOwogICAgICAgYWRqLmN1ID0gY3U7Ci0gICAgICBpZiAoc2VjID09IERFQlVHX0xPQykKKyAg ICAgIGlmIChzZWMgPT0gSU5ERVgoREVCVUdfTE9DKSkKIAl7CiAJICBpZiAobG9jX2h0YWIgPT0g TlVMTCkKIAkgICAgewpAQCAtMzE1NCw3ICszMTgzLDcgQEAgc2V0X2RpZV9vZHJfc3RhdGUgKGR3 X2N1X3JlZiBjdSwgZHdfZGllX3JlZiBkaWUpCiAgICAgICByZXR1cm47CiAgICAgfQogCi0gIHB0 ciA9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lORk9dLmRhdGEgKyBkaWUtPmRpZV9vZmZzZXQ7Cisg IHB0ciA9IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5kYXRhICsgZGllLT5kaWVf b2Zmc2V0OwogICBza2lwX2xlYjEyOCAocHRyKTsKIAogICB0ID0gZGllLT5kaWVfYWJicmV2OwpA QCAtMzI1MCw3ICszMjc5LDcgQEAgY2hlY2tzdW1fZGllIChEU08gKmRzbywgZHdfY3VfcmVmIGN1 LCBkd19kaWVfcmVmIHRvcF9kaWUsIGR3X2RpZV9yZWYgZGllKQogICAgICAgfHwgZGllLT5kaWVf dGFnID09IERXX1RBR19pbXBvcnRlZF91bml0KQogICAgIGRpZS0+ZGllX2NrX3N0YXRlID0gQ0tf QkFEOwogICB0ID0gZGllLT5kaWVfYWJicmV2OwotICBwdHIgPSBkZWJ1Z19zZWN0aW9uc1tERUJV R19JTkZPXS5kYXRhICsgZGllLT5kaWVfb2Zmc2V0OworICBwdHIgPSBkZWJ1Z19zZWN0aW9uc1tJ TkRFWChERUJVR19JTkZPKV0uZGF0YSArIGRpZS0+ZGllX29mZnNldDsKICAgc2tpcF9sZWIxMjgg KHB0cik7CiAgIHMgPSBkaWUtPmRpZV90YWc7CiAgIGRpZS0+dS5wMS5kaWVfaGFzaCA9IGl0ZXJh dGl2ZV9oYXNoX29iamVjdCAocywgZGllLT51LnAxLmRpZV9oYXNoKTsKQEAgLTMzODgsNyArMzQx Nyw3IEBAIGNoZWNrc3VtX2RpZSAoRFNPICpkc28sIGR3X2N1X3JlZiBjdSwgZHdfZGllX3JlZiB0 b3BfZGllLCBkd19kaWVfcmVmIGRpZSkKIAkgICAgewogCSAgICAgIHVuc2lnbmVkIGNoYXIgKm5l d19wdHIgPSBwdHI7CiAJICAgICAgcHRyID0gb2xkX3B0cjsKLQkgICAgICBpZiAodmFsdWUgPiBj dS0+Y3VfbmZpbGVzKQorCSAgICAgIGlmICghaXNfZHdvX2ZpbGUgJiYgKHZhbHVlID4gY3UtPmN1 X25maWxlcykpCiAJCXsKIAkJICBlcnJvciAoMCwgMCwgIiVzOiBJbnZhbGlkICVzIGZpbGUgbnVt YmVyICVkIiwKIAkJCSBkc28tPmZpbGVuYW1lLCBnZXRfRFdfQVRfc3RyICh0LT5hdHRyW2ldLmF0 dHIpLApAQCAtMzM5Nyw3ICszNDI2LDcgQEAgY2hlY2tzdW1fZGllIChEU08gKmRzbywgZHdfY3Vf cmVmIGN1LCBkd19kaWVfcmVmIHRvcF9kaWUsIGR3X2RpZV9yZWYgZGllKQogCQl9CiAJICAgICAg aWYgKHZhbHVlID09IDApCiAJCWhhbmRsZWQgPSBmYWxzZTsKLQkgICAgICBlbHNlIGlmICghaWdu b3JlX2xvY3VzICYmIGRpZS0+ZGllX2NrX3N0YXRlICE9IENLX0JBRCkKKwkgICAgICBlbHNlIGlm ICghaXNfZHdvX2ZpbGUgJiYgIWlnbm9yZV9sb2N1cyAmJiBkaWUtPmRpZV9ja19zdGF0ZSAhPSBD S19CQUQpCiAJCXsKIAkJICBzdHJ1Y3QgZHdfZmlsZSAqY3VfZmlsZSA9ICZjdS0+Y3VfZmlsZXNb dmFsdWUgLSAxXTsKIAkJICBzaXplX3QgZmlsZV9sZW4gPSBzdHJsZW4gKGN1X2ZpbGUtPmZpbGUp OwpAQCAtMzY1MSwxMSArMzY4MCwxMSBAQCBjaGVja3N1bV9kaWUgKERTTyAqZHNvLCBkd19jdV9y ZWYgY3UsIGR3X2RpZV9yZWYgdG9wX2RpZSwgZHdfZGllX3JlZiBkaWUpCiAJICAgICAgJiYgZGll LT5kaWVfY2tfc3RhdGUgIT0gQ0tfQkFEKQogCSAgICB7CiAJICAgICAgdmFsdWUgPSByZWFkXzMy IChwdHIpOwotCSAgICAgIGlmICh2YWx1ZSA+PSBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLnNp emUpCisJICAgICAgaWYgKHZhbHVlID49IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUild LnNpemUpCiAJCWRpZS0+ZGllX2NrX3N0YXRlID0gQ0tfQkFEOwogCSAgICAgIGVsc2UKIAkJewot CQkgIHVuc2lnbmVkIGNoYXIgKnAgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLmRhdGEgKyB2 YWx1ZTsKKwkJICB1bnNpZ25lZCBjaGFyICpwID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf U1RSKV0uZGF0YSArIHZhbHVlOwogCQkgIHVuc2lnbmVkIGludCBsID0gc3RybGVuICgoY2hhciAq KSBwKSArIDE7CiAJCSAgcyA9IHQtPmF0dHJbaV0uYXR0cjsKIAkJICBkaWUtPnUucDEuZGllX2hh c2gKQEAgLTM5ODMsNyArNDAxMiw3IEBAIGNoZWNrc3VtX3JlZl9kaWUgKGR3X2N1X3JlZiBjdSwg ZHdfZGllX3JlZiB0b3BfZGllLCBkd19kaWVfcmVmIGRpZSwKIAl9CiAgIGlmIChpID09IC0xVSkK ICAgICB7Ci0gICAgICBwdHIgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19JTkZPXS5kYXRhICsgZGll LT5kaWVfb2Zmc2V0OworICAgICAgcHRyID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5G TyldLmRhdGEgKyBkaWUtPmRpZV9vZmZzZXQ7CiAgICAgICBza2lwX2xlYjEyOCAocHRyKTsKICAg ICAgIGZvciAoaSA9IDA7IGkgPCB0LT5uYXR0cjsgKytpKQogCXsKQEAgLTQzNjAsOSArNDM4OSw5 IEBAIGV4cGFuZF9jaGlsZCAoZHdfZGllX3JlZiB0b3BfZGllLCBib29sIGNoZWNrc3VtKQogICB1 bnNpZ25lZCBpbnQgdGljayA9IGNoZWNrc3VtID8gdG9wX2RpZS0+dS5wMS5kaWVfZW50ZXIgKyAx IDogMDsKIAogICBpZiAodW5saWtlbHkgKGN1LT5jdV9raW5kID09IENVX1RZUEVTKSkKLSAgICBi YXNlID0gZGVidWdfc2VjdGlvbnNbREVCVUdfVFlQRVNdLmRhdGE7CisgICAgYmFzZSA9IGRlYnVn X3NlY3Rpb25zW0lOREVYKERFQlVHX1RZUEVTKV0uZGF0YTsKICAgZWxzZQotICAgIGJhc2UgPSBk ZWJ1Z19zZWN0aW9uc1tERUJVR19JTkZPXS5kYXRhOworICAgIGJhc2UgPSBkZWJ1Z19zZWN0aW9u c1tJTkRFWChERUJVR19JTkZPKV0uZGF0YTsKICAgcHRyID0gYmFzZSArIHRvcF9kaWUtPmRpZV9v ZmZzZXQ7CiAgIGlmIChsaWtlbHkgKGNoZWNrc3VtKSkKICAgICBwdHIgKz0gdG9wX2RpZS0+ZGll X3NpemU7CkBAIC00NTU0LDIwICs0NTgzLDIwIEBAIGRpZV9lcV8xIChkd19jdV9yZWYgY3UxLCBk d19jdV9yZWYgY3UyLAogICB0MiA9IGRpZTItPmRpZV9hYmJyZXY7CiAgIGlmIChsaWtlbHkgKCFm aV9tdWx0aWZpbGUpKQogICAgIHsKLSAgICAgIHB0cjEgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19J TkZPXS5kYXRhICsgZGllMS0+ZGllX29mZnNldDsKLSAgICAgIHB0cjIgPSBkZWJ1Z19zZWN0aW9u c1tERUJVR19JTkZPXS5kYXRhICsgZGllMi0+ZGllX29mZnNldDsKKyAgICAgIHB0cjEgPSBkZWJ1 Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0uZGF0YSArIGRpZTEtPmRpZV9vZmZzZXQ7Cisg ICAgICBwdHIyID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLmRhdGEgKyBkaWUy LT5kaWVfb2Zmc2V0OwogICAgIH0KICAgZWxzZQogICAgIHsKICAgICAgIGlmIChjdTEtPmN1X2tp bmQgPT0gQ1VfQUxUKQotCXB0cjEgPSBhbHRfZGF0YVtERUJVR19JTkZPXTsKKwlwdHIxID0gYWx0 X2RhdGFbSU5ERVgoREVCVUdfSU5GTyldOwogICAgICAgZWxzZQotCXB0cjEgPSBkZWJ1Z19zZWN0 aW9uc1tERUJVR19JTkZPXS5kYXRhOworCXB0cjEgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJV R19JTkZPKV0uZGF0YTsKICAgICAgIHB0cjEgKz0gZGllMS0+ZGllX29mZnNldDsKICAgICAgIGlm IChjdTItPmN1X2tpbmQgPT0gQ1VfQUxUKQotCXB0cjIgPSBhbHRfZGF0YVtERUJVR19JTkZPXTsK KwlwdHIyID0gYWx0X2RhdGFbSU5ERVgoREVCVUdfSU5GTyldOwogICAgICAgZWxzZQotCXB0cjIg PSBkZWJ1Z19zZWN0aW9uc1tERUJVR19JTkZPXS5kYXRhOworCXB0cjIgPSBkZWJ1Z19zZWN0aW9u c1tJTkRFWChERUJVR19JTkZPKV0uZGF0YTsKICAgICAgIHB0cjIgKz0gZGllMi0+ZGllX29mZnNl dDsKICAgICB9CiAgIHNraXBfbGViMTI4IChwdHIxKTsKQEAgLTQ5MTEsMjAgKzQ5NDAsMjAgQEAg ZGllX2VxXzEgKGR3X2N1X3JlZiBjdTEsIGR3X2N1X3JlZiBjdTIsCiAJICAgICAgaWYgKGZpX211 bHRpZmlsZSkKIAkJewogCQkgIGlmIChzdHJjbXAgKChjaGFyICopIChjdTEtPmN1X2tpbmQgPT0g Q1VfQUxUCi0JCQkJCT8gYWx0X2RhdGFbREVCVUdfU1RSXQotCQkJCQk6IGRlYnVnX3NlY3Rpb25z W0RFQlVHX1NUUl0uZGF0YSkKKwkJCQkJPyBhbHRfZGF0YVtJTkRFWChERUJVR19TVFIpXQorCQkJ CQk6IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRhdGEpCiAJCQkgICAgICArIHZh bHVlMSwKIAkJCSAgICAgIChjaGFyICopIChjdTItPmN1X2tpbmQgPT0gQ1VfQUxUCi0JCQkJCT8g YWx0X2RhdGFbREVCVUdfU1RSXQotCQkJCQk6IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0 YSkKKwkJCQkJPyBhbHRfZGF0YVtJTkRFWChERUJVR19TVFIpXQorCQkJCQk6IGRlYnVnX3NlY3Rp b25zW0lOREVYKERFQlVHX1NUUildLmRhdGEpCiAJCQkgICAgICArIHZhbHVlMikgIT0gMCkKIAkJ ICAgIEZBSUw7CiAJCSAgaSsrOwogCQkgIGorKzsKIAkJICBjb250aW51ZTsKIAkJfQotCSAgICAg IGlmIChzdHJjbXAgKChjaGFyICopIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YSArIHZh bHVlMSwKLQkJCSAgKGNoYXIgKikgZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhICsgdmFs dWUyKQorCSAgICAgIGlmIChzdHJjbXAgKChjaGFyICopIGRlYnVnX3NlY3Rpb25zW0lOREVYKERF QlVHX1NUUildLmRhdGEgKyB2YWx1ZTEsCisJCQkgIChjaGFyICopIGRlYnVnX3NlY3Rpb25zW0lO REVYKERFQlVHX1NUUildLmRhdGEgKyB2YWx1ZTIpCiAJCSAgIT0gMCkKIAkJRkFJTDsKIAkgICAg ICBpKys7CkBAIC01NTMyLDggKzU1NjEsOCBAQCBzdHJwX2VxMiAoY29uc3Qgdm9pZCAqcCwgY29u c3Qgdm9pZCAqcSkKICAgc3RydWN0IHN0cnBfZW50cnkgKnMxID0gKHN0cnVjdCBzdHJwX2VudHJ5 ICopcDsKICAgc3RydWN0IHN0cnBfZW50cnkgKnMyID0gKHN0cnVjdCBzdHJwX2VudHJ5ICopcTsK IAotICByZXR1cm4gc3RyY21wICgoY2hhciAqKSBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLmRh dGEgKyBzMS0+b2ZmLAotCQkgKGNoYXIgKikgZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRh ICsgczItPm9mZikgPT0gMDsKKyAgcmV0dXJuIHN0cmNtcCAoKGNoYXIgKikgZGVidWdfc2VjdGlv bnNbSU5ERVgoREVCVUdfU1RSKV0uZGF0YSArIHMxLT5vZmYsCisJCSAoY2hhciAqKSBkZWJ1Z19z ZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5kYXRhICsgczItPm9mZikgPT0gMDsKIH0KIAogLyog SGFzaCBmdW5jdGlvbiBpbiBzdHJwX2h0YWIgdXNlZCBmcm9tIGZpbmFsaXplX3N0cnAgb253YXJk cywKQEAgLTU1NjksNyArNTU5OCw3IEBAIG5vdGVfc3RycF9vZmZzZXQgKHVuc2lnbmVkIGludCBv ZmYpCiAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwogICAgICAgaGFzaHZhbF90IGhhc2g7CiAKLSAg ICAgIHAgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLmRhdGEgKyBvZmY7CisgICAgICBwID0g ZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uZGF0YSArIG9mZjsKICAgICAgIGxlbiA9 IHN0cmxlbiAoKGNoYXIgKikgcCk7CiAgICAgICBoYXNoID0gaXRlcmF0aXZlX2hhc2ggKHAsIGxl biwgMCk7CiAgICAgICBpZiAoYWx0X3N0cnBfaHRhYikKQEAgLTU1NzksNyArNTYwOCw3IEBAIG5v dGVfc3RycF9vZmZzZXQgKHVuc2lnbmVkIGludCBvZmYpCiAJfQogICAgICAgaWYgKHN0cnBfaHRh YiA9PSBOVUxMKQogCXsKLQkgIHVuc2lnbmVkIGludCBzdHJwX2NvdW50ID0gZGVidWdfc2VjdGlv bnNbREVCVUdfU1RSXS5zaXplIC8gNjQ7CisJICB1bnNpZ25lZCBpbnQgc3RycF9jb3VudCA9IGRl YnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLnNpemUgLyA2NDsKIAogCSAgaWYgKHN0cnBf Y291bnQgPCAxMDApCiAJICAgIHN0cnBfY291bnQgPSAxMDA7CkBAIC01NjAxLDkgKzU2MzAsOSBA QCBub3RlX3N0cnBfb2Zmc2V0ICh1bnNpZ25lZCBpbnQgb2ZmKQogCX0KICAgICAgIHJldHVybjsK ICAgICB9Ci0gIGlmIChvZmYgPj0gZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5zaXplIHx8IG9m ZiA9PSAwKQorICBpZiAob2ZmID49IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLnNp emUgfHwgb2ZmID09IDApCiAgICAgcmV0dXJuOwotICBpZiAoZGVidWdfc2VjdGlvbnNbREVCVUdf U1RSXS5kYXRhW29mZiAtIDFdID09ICdcMCcpCisgIGlmIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChE RUJVR19TVFIpXS5kYXRhW29mZiAtIDFdID09ICdcMCcpCiAgICAgcmV0dXJuOwogICBpZiAoc3Ry cF9odGFiID09IE5VTEwpCiAgICAgewpAQCAtNTYxMiw3ICs1NjQxLDcgQEAgbm90ZV9zdHJwX29m ZnNldCAodW5zaWduZWQgaW50IG9mZikKICAgICAgIHN0cnBfaHRhYiA9IGh0YWJfdHJ5X2NyZWF0 ZSAoNTAsIHN0cnBfaGFzaCwgc3RycF9lcSwgTlVMTCk7CiAgICAgICBpZiAoc3RycF9odGFiID09 IE5VTEwpCiAJZHd6X29vbSAoKTsKLSAgICAgIG1heF9zdHJwX29mZiA9IGRlYnVnX3NlY3Rpb25z W0RFQlVHX1NUUl0uc2l6ZTsKKyAgICAgIG1heF9zdHJwX29mZiA9IGRlYnVnX3NlY3Rpb25zW0lO REVYKERFQlVHX1NUUildLnNpemU7CiAgICAgfQogICBzZS5vZmYgPSBvZmY7CiAgIHNsb3QgPSBo dGFiX2ZpbmRfc2xvdF93aXRoX2hhc2ggKHN0cnBfaHRhYiwgJnNlLCBvZmYsIElOU0VSVCk7CkBA IC01NjIzLDcgKzU2NTIsNyBAQCBub3RlX3N0cnBfb2Zmc2V0ICh1bnNpZ25lZCBpbnQgb2ZmKQog ICAgICAgc3RydWN0IHN0cnBfZW50cnkgKnMgPSBwb29sX2FsbG9jIChzdHJwX2VudHJ5LCBzaXpl b2YgKCpzKSk7CiAgICAgICBzLT5vZmYgPSBvZmY7CiAgICAgICBzLT5uZXdfb2ZmID0gbWF4X3N0 cnBfb2ZmOwotICAgICAgbWF4X3N0cnBfb2ZmICs9IHN0cmxlbiAoKGNoYXIgKikgZGVidWdfc2Vj dGlvbnNbREVCVUdfU1RSXS5kYXRhCisgICAgICBtYXhfc3RycF9vZmYgKz0gc3RybGVuICgoY2hh ciAqKSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5kYXRhCiAJCQkgICAgICArIG9m ZikgKyAxOwogICAgICAgaWYgKG1heF9zdHJwX29mZiA8IHMtPm5ld19vZmYpCiAJewpAQCAtNTY1 MSw3ICs1NjgwLDcgQEAgbG9va3VwX3N0cnBfb2Zmc2V0ICh1bnNpZ25lZCBpbnQgb2ZmKQogICAg ICAgdW5zaWduZWQgaW50IGxlbjsKICAgICAgIGhhc2h2YWxfdCBoYXNoOwogCi0gICAgICBwID0g ZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhICsgb2ZmOworICAgICAgcCA9IGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRhdGEgKyBvZmY7CiAgICAgICBsZW4gPSBzdHJsZW4g KChjaGFyICopIHApOwogICAgICAgaGFzaCA9IGl0ZXJhdGl2ZV9oYXNoIChwLCBsZW4sIDApOwog ICAgICAgaWYgKGFsdF9zdHJwX2h0YWIpCkBAIC01NjU5LDE2ICs1Njg4LDE2IEBAIGxvb2t1cF9z dHJwX29mZnNldCAodW5zaWduZWQgaW50IG9mZikKIAkgIHVuc2lnbmVkIGNoYXIgKnEgPSAodW5z aWduZWQgY2hhciAqKQogCQkJICAgICBodGFiX2ZpbmRfd2l0aF9oYXNoIChhbHRfc3RycF9odGFi LCBwLCBoYXNoKTsKIAkgIGlmIChxICE9IE5VTEwpCi0JICAgIHJldHVybiBxIC0gYWx0X2RhdGFb REVCVUdfU1RSXTsKKwkgICAgcmV0dXJuIHEgLSBhbHRfZGF0YVtJTkRFWChERUJVR19TVFIpXTsK IAl9CiAgICAgICBhc3NlcnQgKHN0cnBfaHRhYik7CiAgICAgICBwID0gKHVuc2lnbmVkIGNoYXIg KikgaHRhYl9maW5kX3dpdGhfaGFzaCAoc3RycF9odGFiLCBwLCBoYXNoKTsKICAgICAgIGFzc2Vy dCAocCAhPSBOVUxMKTsKLSAgICAgIHJldHVybiBwIC0gZGVidWdfc2VjdGlvbnNbREVCVUdfU1RS XS5uZXdfZGF0YTsKKyAgICAgIHJldHVybiBwIC0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf U1RSKV0ubmV3X2RhdGE7CiAgICAgfQotICBpZiAob2ZmID49IGRlYnVnX3NlY3Rpb25zW0RFQlVH X1NUUl0uc2l6ZSB8fCBvZmYgPT0gMCkKKyAgaWYgKG9mZiA+PSBkZWJ1Z19zZWN0aW9uc1tJTkRF WChERUJVR19TVFIpXS5zaXplIHx8IG9mZiA9PSAwKQogICAgIHJldHVybiBvZmYgKyBtdWx0aV9z dHJfb2ZmOwotICBpZiAoZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhW29mZiAtIDFdID09 ICdcMCcpCisgIGlmIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5kYXRhW29mZiAt IDFdID09ICdcMCcpCiAgICAgcmV0dXJuIG9mZiArIG11bHRpX3N0cl9vZmY7CiAgIHNlLm9mZiA9 IG9mZjsKICAgcyA9IChzdHJ1Y3Qgc3RycF9lbnRyeSAqKSBodGFiX2ZpbmRfd2l0aF9oYXNoIChz dHJwX2h0YWIsICZzZSwgb2ZmKTsKQEAgLTU2OTIsNyArNTcyMSw3IEBAIG5vdGVfc3RycF9vZmZz ZXQyICh1bnNpZ25lZCBpbnQgb2ZmKQogCiAgICAgICBpZiAoYWx0X3N0cnBfaHRhYikKIAl7Ci0J ICBwID0gZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhICsgb2ZmOworCSAgcCA9IGRlYnVn X3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRhdGEgKyBvZmY7CiAJICBsZW4gPSBzdHJsZW4g KChjaGFyICopIHApOwogCSAgaGFzaCA9IGl0ZXJhdGl2ZV9oYXNoIChwLCBsZW4sIDApOwogCSAg aWYgKGh0YWJfZmluZF93aXRoX2hhc2ggKGFsdF9zdHJwX2h0YWIsIHAsIGhhc2gpKQpAQCAtNTcw MCw5ICs1NzI5LDkgQEAgbm90ZV9zdHJwX29mZnNldDIgKHVuc2lnbmVkIGludCBvZmYpCiAJfQog ICAgICAgcmV0dXJuIERXX0ZPUk1fc3RycDsKICAgICB9Ci0gIGlmIChvZmYgPj0gZGVidWdfc2Vj dGlvbnNbREVCVUdfU1RSXS5zaXplKQorICBpZiAob2ZmID49IGRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX1NUUildLnNpemUpCiAgICAgcmV0dXJuIERXX0ZPUk1fc3RycDsKLSAgcCA9IGRlYnVn X3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YSArIG9mZjsKKyAgcCA9IGRlYnVnX3NlY3Rpb25zW0lO REVYKERFQlVHX1NUUildLmRhdGEgKyBvZmY7CiAgIHEgPSAodW5zaWduZWQgY2hhciAqKSBzdHJj aHIgKChjaGFyICopIHAsICdcMCcpOwogICBoYXNoID0gaXRlcmF0aXZlX2hhc2ggKHAsIHEgLSBw LCAwKTsKICAgc2Uub2ZmID0gb2ZmOwpAQCAtNTczNCw4ICs1NzYzLDggQEAgc3RycmV2Y21wIChj b25zdCB2b2lkICpwLCBjb25zdCB2b2lkICpxKQogICB1bnNpZ25lZCBpbnQgbGVuMSA9IHMxLT5u ZXdfb2ZmICYgfjFVOwogICB1bnNpZ25lZCBpbnQgbGVuMiA9IHMyLT5uZXdfb2ZmICYgfjFVOwog ICB1bnNpZ25lZCBpbnQgbGVuOwotICB1bnNpZ25lZCBjaGFyICpwMSA9IGRlYnVnX3NlY3Rpb25z W0RFQlVHX1NUUl0uZGF0YSArIHMxLT5vZmY7Ci0gIHVuc2lnbmVkIGNoYXIgKnAyID0gZGVidWdf c2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhICsgczItPm9mZjsKKyAgdW5zaWduZWQgY2hhciAqcDEg PSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5kYXRhICsgczEtPm9mZjsKKyAgdW5z aWduZWQgY2hhciAqcDIgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5kYXRhICsg czItPm9mZjsKIAogICBpZiAocDFbbGVuMV0pCiAgICAgbGVuMSsrOwpAQCAtNTc3OSw4ICs1ODA4 LDggQEAgZmluYWxpemVfc3RycCAoYm9vbCBidWlsZF90YWlsX29mZnNldF9saXN0KQogCiAgIGlm IChzdHJwX2h0YWIgPT0gTlVMTCkKICAgICB7Ci0gICAgICBkZWJ1Z19zZWN0aW9uc1tERUJVR19T VFJdLm5ld19kYXRhID0gTlVMTDsKLSAgICAgIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0ubmV3 X3NpemUgPSAwOworICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0ubmV3X2Rh dGEgPSBOVUxMOworICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0ubmV3X3Np emUgPSAwOwogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICBjb3VudCA9IGh0YWJfZWxlbWVu dHMgKHN0cnBfaHRhYik7CkBAIC01NzkwLDcgKzU4MTksNyBAQCBmaW5hbGl6ZV9zdHJwIChib29s IGJ1aWxkX3RhaWxfb2Zmc2V0X2xpc3QpCiAgIGh0YWJfdHJhdmVyc2UgKHN0cnBfaHRhYiwgbGlz dF9zdHJwX2VudHJpZXMsICh2b2lkICopICZlbmQpOwogICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7 IGkrKykKICAgICB7Ci0gICAgICB1bnNpZ25lZCBpbnQgbGVuID0gc3RybGVuICgoY2hhciAqKSBk ZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLmRhdGEKKyAgICAgIHVuc2lnbmVkIGludCBsZW4gPSBz dHJsZW4gKChjaGFyICopIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRhdGEKIAkJ CQkgKyBhcnJbaV0tPm9mZik7CiAgICAgICBhcnJbaV0tPm5ld19vZmYgPSAobGVuICYgfjFVKSB8 IChhcnJbaV0tPm5ld19vZmYgJiAxKTsKICAgICB9CkBAIC01ODEwLDcgKzU4MzksNyBAQCBmaW5h bGl6ZV9zdHJwIChib29sIGJ1aWxkX3RhaWxfb2Zmc2V0X2xpc3QpCiAJdW5zaWduZWQgaW50IGxl bjEsIGxlbjIsIGxhc3RsZW4sIGo7CiAJdW5zaWduZWQgY2hhciAqcDEsICpwMjsKIAlsZW4xID0g YXJyW2ldLT5uZXdfb2ZmICYgfjFVOwotCXAxID0gZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5k YXRhICsgYXJyW2ldLT5vZmY7CisJcDEgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIp XS5kYXRhICsgYXJyW2ldLT5vZmY7CiAJaWYgKHAxW2xlbjFdKQogCSAgbGVuMSsrOwogCWxhc3Rs ZW4gPSBsZW4xOwpAQCAtNTgxOSw3ICs1ODQ4LDcgQEAgZmluYWxpemVfc3RycCAoYm9vbCBidWls ZF90YWlsX29mZnNldF9saXN0KQogCWZvciAoaiA9IGkgKyAxOyBqIDwgY291bnQ7IGorKykKIAkg IHsKIAkgICAgbGVuMiA9IGFycltqXS0+bmV3X29mZiAmIH4xVTsKLQkgICAgcDIgPSBkZWJ1Z19z ZWN0aW9uc1tERUJVR19TVFJdLmRhdGEgKyBhcnJbal0tPm9mZjsKKwkgICAgcDIgPSBkZWJ1Z19z ZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5kYXRhICsgYXJyW2pdLT5vZmY7CiAJICAgIGlmIChw MltsZW4yXSkKIAkgICAgICBsZW4yKys7CiAJICAgIGlmIChsZW4yID49IGxhc3RsZW4pCkBAIC01 ODMyLDEwICs1ODYxLDEwIEBAIGZpbmFsaXplX3N0cnAgKGJvb2wgYnVpbGRfdGFpbF9vZmZzZXRf bGlzdCkKIAkgIH0KIAlpID0gaiAtIDE7CiAgICAgICB9Ci0gIGRlYnVnX3NlY3Rpb25zW0RFQlVH X1NUUl0ubmV3X2RhdGEgPSBtYWxsb2MgKHN0cnBfaW5kZXgpOwotICBpZiAoZGVidWdfc2VjdGlv bnNbREVCVUdfU1RSXS5uZXdfZGF0YSA9PSBOVUxMKQorICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChE RUJVR19TVFIpXS5uZXdfZGF0YSA9IG1hbGxvYyAoc3RycF9pbmRleCk7CisgIGlmIChkZWJ1Z19z ZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5uZXdfZGF0YSA9PSBOVUxMKQogICAgIGR3el9vb20g KCk7Ci0gIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0ubmV3X3NpemUgPSBzdHJwX2luZGV4Owor ICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5uZXdfc2l6ZSA9IHN0cnBfaW5kZXg7 CiAgIHN0cnBfaHRhYiA9IGh0YWJfdHJ5X2NyZWF0ZSAobmV3X2NvdW50IDwgMzIgPyAzMiA6IG5l d19jb3VudCwKIAkJCSAgICAgICBzdHJwX2hhc2gzLCBzdHJwX2VxMywgTlVMTCk7CiAgIGlmIChz dHJwX2h0YWIgPT0gTlVMTCkKQEAgLTU4NDgsMTcgKzU4NzcsMTcgQEAgZmluYWxpemVfc3RycCAo Ym9vbCBidWlsZF90YWlsX29mZnNldF9saXN0KQogICAgICAgaWYgKHRhaWxfb2Zmc2V0X2xpc3Qg PT0gTUFQX0ZBSUxFRCkKIAlkd3pfb29tICgpOwogICAgIH0KLSAgZm9yIChpID0gMCwgayA9IDAs IHAgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLm5ld19kYXRhOyBpIDwgY291bnQ7IGkrKykK KyAgZm9yIChpID0gMCwgayA9IDAsIHAgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIp XS5uZXdfZGF0YTsgaSA8IGNvdW50OyBpKyspCiAgICAgaWYgKGFycltpXS0+b2ZmID09IC0xVSAm JiBhcnJbaV0tPm5ld19vZmYgPT0gLTFVKQogICAgICAgY29udGludWU7CiAgICAgZWxzZQogICAg ICAgewotCXVuc2lnbmVkIGludCBsZW4gPSBzdHJsZW4gKChjaGFyICopIGRlYnVnX3NlY3Rpb25z W0RFQlVHX1NUUl0uZGF0YQorCXVuc2lnbmVkIGludCBsZW4gPSBzdHJsZW4gKChjaGFyICopIGRl YnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRhdGEKIAkJCQkgICArIGFycltpXS0+b2Zm KSArIDE7CiAJdW5zaWduZWQgaW50IGo7CiAJdm9pZCAqKnNsb3Q7CiAKLQltZW1jcHkgKHAsIGRl YnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YSArIGFycltpXS0+b2ZmLCBsZW4pOworCW1lbWNw eSAocCwgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uZGF0YSArIGFycltpXS0+b2Zm LCBsZW4pOwogCXNsb3QgPSBodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2ggKHN0cnBfaHRhYiwgcCwK IAkJCQkJIGl0ZXJhdGl2ZV9oYXNoIChwLCBsZW4gLSAxLCAwKSwKIAkJCQkJIElOU0VSVCk7CkBA IC01ODg2LDcgKzU5MTUsNyBAQCBmaW5hbGl6ZV9zdHJwIChib29sIGJ1aWxkX3RhaWxfb2Zmc2V0 X2xpc3QpCiAJcCArPSBsZW47CiAJaSA9IGogLSAxOwogICAgICAgfQotICBhc3NlcnQgKHAgPT0g ZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5uZXdfZGF0YSArIHN0cnBfaW5kZXgpOworICBhc3Nl cnQgKHAgPT0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0ubmV3X2RhdGEgKyBzdHJw X2luZGV4KTsKICAgaWYgKHRhaWxfb2Zmc2V0X2xpc3QgIT0gTlVMTCkKICAgICB7CiAgICAgICB0 YWlsX29mZnNldF9saXN0W2srK10gPSAwOwpAQCAtNTkzNCw5ICs1OTYzLDkgQEAgbWFya19yZWZz IChkd19jdV9yZWYgY3UsIGR3X2RpZV9yZWYgdG9wX2RpZSwgZHdfZGllX3JlZiBkaWUsIGludCBt b2RlKQogICBpZiAoaSA9PSAtMVUpCiAgICAgewogICAgICAgaWYgKHVubGlrZWx5IChjdS0+Y3Vf a2luZCA9PSBDVV9UWVBFUykpCi0JcHRyID0gZGVidWdfc2VjdGlvbnNbREVCVUdfVFlQRVNdLmRh dGE7CisJcHRyID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfVFlQRVMpXS5kYXRhOwogICAg ICAgZWxzZQotCXB0ciA9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lORk9dLmRhdGE7CisJcHRyID0g ZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLmRhdGE7CiAgICAgICBwdHIgKz0gZGll LT5kaWVfb2Zmc2V0OwogICAgICAgc2tpcF9sZWIxMjggKHB0cik7CiAgICAgICBmb3IgKGkgPSAw OyBpIDwgdC0+bmF0dHI7ICsraSkKQEAgLTYyODEsNyArNjMxMCw3IEBAIHRyeV9kZWJ1Z19pbmZv IChEU08gKmRzbykKICAgc3RydWN0IGFiYnJldl90YWcgdGFnLCAqdDsKICAgdW5zaWduZWQgaW50 IG5kaWVzOwogICB1bnNpZ25lZCByZXQgPSAxOwotICBpbnQga2luZCA9IERFQlVHX0lORk87Cisg IGludCBraW5kID0gSU5ERVgoREVCVUdfSU5GTyk7CiAgIGJvb2wgbG93X21lbV9kaWVfbGltaXRf aGl0ID0gZmFsc2U7CiAKICAgaWYgKHVubGlrZWx5IChwcm9ncmVzc19wKSkKQEAgLTYzMDIsNyAr NjMzMSw3IEBAIHRyeV9kZWJ1Z19pbmZvIChEU08gKmRzbykKICAgICAgIGludCBjdV92ZXJzaW9u OwogCiAgICAgICAvKiBOb3RlIGhlYWRlciBpcyBvbmUgYmlnZ2VyIHdpdGggRFdBUkYgdmVyc2lv biA1LiAgKi8KLSAgICAgIGlmIChwdHIgKyAoa2luZCA9PSBERUJVR19UWVBFUyA/IDIzIDogMTEp ID4gZW5kc2VjKQorICAgICAgaWYgKHB0ciArIChraW5kID09IElOREVYKERFQlVHX1RZUEVTKSA/ IDIzIDogMTEpID4gZW5kc2VjKQogCXsKIAkgIGVycm9yICgwLCAwLCAiJXM6ICVzIENVIGhlYWRl ciB0b28gc21hbGwiLCBkc28tPmZpbGVuYW1lLAogCQkgZGVidWdfc2VjdGlvbnNba2luZF0ubmFt ZSk7CkBAIC02MzI2LDcgKzYzNTUsNyBAQCB0cnlfZGVidWdfaW5mbyAoRFNPICpkc28pCiAJfQog CiAgICAgICBjdV92ZXJzaW9uID0gcmVhZF8xNiAocHRyKTsKLSAgICAgIGlmIChraW5kID09IERF QlVHX1RZUEVTICYmIChjdV92ZXJzaW9uIDwgMiB8fCBjdV92ZXJzaW9uID4gNCkpCisgICAgICBp ZiAoa2luZCA9PSBJTkRFWChERUJVR19UWVBFUykgJiYgKGN1X3ZlcnNpb24gPCAyIHx8IGN1X3Zl cnNpb24gPiA0KSkKIAl7CiAJICBlcnJvciAoMCwgMCwgIiVzOiBEV0FSRiB2ZXJzaW9uICVkIGlu IC5kZWJ1Z190eXBlcyB1bmhhbmRsZWQiLAogCQkgZHNvLT5maWxlbmFtZSwgY3VfdmVyc2lvbik7 CkBAIC02MzQ5LDkgKzYzNzgsOSBAQCB0cnlfZGVidWdfaW5mbyAoRFNPICpkc28pCiAgICAgICBl bHNlCiAJewogCSAgdmFsdWUgPSByZWFkXzMyIChwdHIpOwotCSAgaWYgKHZhbHVlID49IGRlYnVn X3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0uc2l6ZSkKKwkgIGlmICh2YWx1ZSA+PSBkZWJ1Z19zZWN0 aW9uc1tJTkRFWChERUJVR19BQkJSRVYpXS5zaXplKQogCSAgICB7Ci0JICAgICAgaWYgKGRlYnVn X3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0uZGF0YSA9PSBOVUxMKQorCSAgICAgIGlmIChkZWJ1Z19z ZWN0aW9uc1tJTkRFWChERUJVR19BQkJSRVYpXS5kYXRhID09IE5VTEwpCiAJCWVycm9yICgwLCAw LCAiJXM6IC5kZWJ1Z19hYmJyZXYgbm90IHByZXNlbnQiLCBkc28tPmZpbGVuYW1lKTsKIAkgICAg ICBlbHNlCiAJCWVycm9yICgwLCAwLCAiJXM6IERXQVJGIENVIGFiYnJldiBvZmZzZXQgdG9vIGxh cmdlIiwKQEAgLTYzODcsOSArNjQxNiw5IEBAIHRyeV9kZWJ1Z19pbmZvIChEU08gKmRzbykKIAkg ICAgICBnb3RvIGZhaWw7CiAJICAgIH0KIAkgIHZhbHVlID0gcmVhZF8zMiAocHRyKTsKLQkgIGlm ICh2YWx1ZSA+PSBkZWJ1Z19zZWN0aW9uc1tERUJVR19BQkJSRVZdLnNpemUpCisJICBpZiAodmFs dWUgPj0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJCUkVWKV0uc2l6ZSkKIAkgICAgewot CSAgICAgIGlmIChkZWJ1Z19zZWN0aW9uc1tERUJVR19BQkJSRVZdLmRhdGEgPT0gTlVMTCkKKwkg ICAgICBpZiAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJCUkVWKV0uZGF0YSA9PSBOVUxM KQogCQllcnJvciAoMCwgMCwgIiVzOiAuZGVidWdfYWJicmV2IG5vdCBwcmVzZW50IiwgZHNvLT5m aWxlbmFtZSk7CiAJICAgICAgZWxzZQogCQllcnJvciAoMCwgMCwgIiVzOiBEV0FSRiBDVSBhYmJy ZXYgb2Zmc2V0IHRvbyBsYXJnZSIsCkBAIC02NDAzLDcgKzY0MzIsOCBAQCB0cnlfZGVidWdfaW5m byAoRFNPICpkc28pCiAJICBpZiAoYWJicmV2KQogCSAgICBodGFiX2RlbGV0ZSAoYWJicmV2KTsK IAkgIGFiYnJldgotCSAgICA9IHJlYWRfYWJicmV2IChkc28sIGRlYnVnX3NlY3Rpb25zW0RFQlVH X0FCQlJFVl0uZGF0YSArIHZhbHVlKTsKKwkgICAgPSByZWFkX2FiYnJldiAoZHNvLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJCUkVWKV0u ZGF0YSArIHZhbHVlKTsKIAkgIGlmIChhYmJyZXYgPT0gTlVMTCkKIAkgICAgewogCSAgICAgIGVy cm9yICgwLCAwLCAiJXM6IENvdWxkbid0IHJlYWQgYWJicmV2IGF0IG9mZnNldCAweCV4IiwKQEAg LTY0OTksMTIgKzY1MjksMTIgQEAgcmVhZF9kZWJ1Z19pbmZvIChEU08gKmRzbywgaW50IGtpbmQs IHVuc2lnbmVkIGludCAqZGllX2NvdW50KQogICBzdHJ1Y3QgYWJicmV2X3RhZyB0YWcsICp0Owog ICB1bnNpZ25lZCBpbnQgY3VfY2h1bmsgPSAwOwogICBkd19jdV9yZWYgY3VfdGFpbCA9IE5VTEws IGN1X2NvbGxhcHNlID0gTlVMTDsKLSAgdW5zaWduZWQgaW50IGN1X2tpbmQgPSByZF9tdWx0aWZp bGUgPyBDVV9BTFQKLQkJCSA6IGtpbmQgPT0gREVCVUdfVFlQRVMgPyBDVV9UWVBFUyA6IENVX05P Uk1BTDsKKyAgdW5zaWduZWQgaW50IGN1X2tpbmQgPQorICAgICAgcmRfbXVsdGlmaWxlID8gQ1Vf QUxUIDoga2luZCA9PSBJTkRFWChERUJVR19UWVBFUykgPyBDVV9UWVBFUyA6IENVX05PUk1BTDsK ICAgdm9pZCAqdG9fZnJlZSA9IE5VTEw7CiAgIGludCByZXQgPSAxOwogICB1bnNpZ25lZCBpbnQg bmRpZXM7Ci0gIGJvb2wgbG93X21lbV9waGFzZTEgPSBsb3dfbWVtICYmIGtpbmQgPT0gREVCVUdf SU5GTzsKKyAgYm9vbCBsb3dfbWVtX3BoYXNlMSA9IGxvd19tZW0gJiYga2luZCA9PSBJTkRFWChE RUJVR19JTkZPKTsKICAgc3RydWN0IGR3X2N1IGN1X2J1ZjsKICAgc3RydWN0IGR3X2RpZSBkaWVf YnVmOwogICBib29sIGxhbmdfcCA9IG9kciB8fCB1bmlfbGFuZ19wOwpAQCAtNjUxNCw3ICs2NTQ0 LDcgQEAgcmVhZF9kZWJ1Z19pbmZvIChEU08gKmRzbywgaW50IGtpbmQsIHVuc2lnbmVkIGludCAq ZGllX2NvdW50KQogICAgIG9kcl9waGFzZSA9IDE7CiAKICAgdW5zaWduZWQgaW50IGVzdGltYXRl ZF9ucl9kaWVzID0gZXN0aW1hdGVfbnJfZGllcyAoKTsKLSAgaWYgKGtpbmQgPT0gREVCVUdfSU5G TworICBpZiAoKGtpbmQgPT0gSU5ERVgoREVCVUdfSU5GTykpCiAgICAgICAmJiBtdWx0aWZpbGVf bW9kZSA9PSAwCiAgICAgICAmJiBkaWVfY291bnRfbWV0aG9kID09IGVzdGltYXRlKQogICAgIHsK QEAgLTY1MzYsMTEgKzY1NjYsMTEgQEAgcmVhZF9kZWJ1Z19pbmZvIChEU08gKmRzbywgaW50IGtp bmQsIHVuc2lnbmVkIGludCAqZGllX2NvdW50KQogICAgIHsKICAgICAgIHJlcG9ydF9wcm9ncmVz cyAoKTsKICAgICAgIGZwcmludGYgKHN0ZGVyciwgInJlYWRfZGVidWdfaW5mbyAlcyVzXG4iLAot CSAgICAgICBraW5kID09IERFQlVHX0lORk8gPyAiLmRlYnVnX2luZm8iIDogIi5kZWJ1Z190eXBl cyIsCi0JICAgICAgIGxvd19tZW0gJiYga2luZCA9PSBERUJVR19JTkZPID8gIiAobG93LW1lbSki IDogIiIpOworCSAgICAgICBraW5kID09IElOREVYKERFQlVHX0lORk8pID8gIi5kZWJ1Z19pbmZv IiA6ICIuZGVidWdfdHlwZXMiLAorCSAgICAgICBsb3dfbWVtICYmIGtpbmQgPT0gSU5ERVgoREVC VUdfSU5GTykgPyAiIChsb3ctbWVtKSIgOiAiIik7CiAgICAgfQogCi0gIGlmIChsaWtlbHkgKCFm aV9tdWx0aWZpbGUgJiYga2luZCAhPSBERUJVR19UWVBFUykpCisgIGlmIChsaWtlbHkgKCFmaV9t dWx0aWZpbGUgJiYga2luZCAhPSBJTkRFWChERUJVR19UWVBFUykpKQogICAgIHsKICAgICAgIGR1 cF9odGFiID0gaHRhYl90cnlfY3JlYXRlICgxMDAwMDAsIGRpZV9oYXNoLCBkaWVfZXEsIE5VTEwp OwogICAgICAgaWYgKGR1cF9odGFiID09IE5VTEwpCkBAIC02NTczLDcgKzY2MDMsNyBAQCByZWFk X2RlYnVnX2luZm8gKERTTyAqZHNvLCBpbnQga2luZCwgdW5zaWduZWQgaW50ICpkaWVfY291bnQp CiAgICAgICB1bnNpZ25lZCBpbnQgdHlwZV9vZmZzZXQgPSAwOwogCiAgICAgICAvKiBOb3RlIGhl YWRlciBpcyBvbmUgYmlnZ2VyIHdpdGggRFdBUkYgdmVyc2lvbiA1LiAgKi8KLSAgICAgIGlmIChw dHIgKyAoa2luZCA9PSBERUJVR19UWVBFUyA/IDIzIDogMTEpID4gZW5kc2VjKQorICAgICAgaWYg KHB0ciArIChraW5kID09IElOREVYKERFQlVHX1RZUEVTKSA/IDIzIDogMTEpID4gZW5kc2VjKQog CXsKIAkgIGVycm9yICgwLCAwLCAiJXM6ICVzIENVIGhlYWRlciB0b28gc21hbGwiLCBkc28tPmZp bGVuYW1lLAogCQkgZGVidWdfc2VjdGlvbnNba2luZF0ubmFtZSk7CkBAIC02NTk3LDcgKzY2Mjcs NyBAQCByZWFkX2RlYnVnX2luZm8gKERTTyAqZHNvLCBpbnQga2luZCwgdW5zaWduZWQgaW50ICpk aWVfY291bnQpCiAJfQogCiAgICAgICBjdV92ZXJzaW9uID0gcmVhZF8xNiAocHRyKTsKLSAgICAg IGlmIChraW5kID09IERFQlVHX1RZUEVTICYmIChjdV92ZXJzaW9uIDwgMiB8fCBjdV92ZXJzaW9u ID4gNCkpCisgICAgICBpZiAoa2luZCA9PSBJTkRFWChERUJVR19UWVBFUykgJiYgKGN1X3ZlcnNp b24gPCAyIHx8IGN1X3ZlcnNpb24gPiA0KSkKIAl7CiAJICBlcnJvciAoMCwgMCwgIiVzOiBEV0FS RiB2ZXJzaW9uICVkIGluIC5kZWJ1Z190eXBlcyB1bmhhbmRsZWQiLAogCQkgZHNvLT5maWxlbmFt ZSwgY3VfdmVyc2lvbik7CkBAIC02NjIzLDkgKzY2NTMsOSBAQCByZWFkX2RlYnVnX2luZm8gKERT TyAqZHNvLCBpbnQga2luZCwgdW5zaWduZWQgaW50ICpkaWVfY291bnQpCiAgICAgICBlbHNlCiAJ ewogCSAgdmFsdWUgPSByZWFkXzMyIChwdHIpOwotCSAgaWYgKHZhbHVlID49IGRlYnVnX3NlY3Rp b25zW0RFQlVHX0FCQlJFVl0uc2l6ZSkKKwkgIGlmICh2YWx1ZSA+PSBkZWJ1Z19zZWN0aW9uc1tJ TkRFWChERUJVR19BQkJSRVYpXS5zaXplKQogCSAgICB7Ci0JICAgICAgaWYgKGRlYnVnX3NlY3Rp b25zW0RFQlVHX0FCQlJFVl0uZGF0YSA9PSBOVUxMKQorCSAgICAgIGlmIChkZWJ1Z19zZWN0aW9u c1tJTkRFWChERUJVR19BQkJSRVYpXS5kYXRhID09IE5VTEwpCiAJCWVycm9yICgwLCAwLCAiJXM6 IC5kZWJ1Z19hYmJyZXYgbm90IHByZXNlbnQiLCBkc28tPmZpbGVuYW1lKTsKIAkgICAgICBlbHNl CiAJCWVycm9yICgwLCAwLCAiJXM6IERXQVJGIENVIGFiYnJldiBvZmZzZXQgdG9vIGxhcmdlIiwK QEAgLTY2NjEsOSArNjY5MSw5IEBAIHJlYWRfZGVidWdfaW5mbyAoRFNPICpkc28sIGludCBraW5k LCB1bnNpZ25lZCBpbnQgKmRpZV9jb3VudCkKIAkgICAgICBnb3RvIGZhaWw7CiAJICAgIH0KIAkg IHZhbHVlID0gcmVhZF8zMiAocHRyKTsKLQkgIGlmICh2YWx1ZSA+PSBkZWJ1Z19zZWN0aW9uc1tE RUJVR19BQkJSRVZdLnNpemUpCisJICBpZiAodmFsdWUgPj0gZGVidWdfc2VjdGlvbnNbSU5ERVgo REVCVUdfQUJCUkVWKV0uc2l6ZSkKIAkgICAgewotCSAgICAgIGlmIChkZWJ1Z19zZWN0aW9uc1tE RUJVR19BQkJSRVZdLmRhdGEgPT0gTlVMTCkKKwkgICAgICBpZiAoZGVidWdfc2VjdGlvbnNbSU5E RVgoREVCVUdfQUJCUkVWKV0uZGF0YSA9PSBOVUxMKQogCQllcnJvciAoMCwgMCwgIiVzOiAuZGVi dWdfYWJicmV2IG5vdCBwcmVzZW50IiwgZHNvLT5maWxlbmFtZSk7CiAJICAgICAgZWxzZQogCQll cnJvciAoMCwgMCwgIiVzOiBEV0FSRiBDVSBhYmJyZXYgb2Zmc2V0IHRvbyBsYXJnZSIsCkBAIC02 NzM0LDcgKzY3NjQsOCBAQCByZWFkX2RlYnVnX2luZm8gKERTTyAqZHNvLCBpbnQga2luZCwgdW5z aWduZWQgaW50ICpkaWVfY291bnQpCiAJICAgIHsKIAkgICAgICAqc2xvdCA9ICh2b2lkICopICZt ZXRhX2FiYnJldl9mYWxsYmFjazsKIAkgICAgICBhYmJyZXYKLQkJPSByZWFkX2FiYnJldiAoZHNv LCBkZWJ1Z19zZWN0aW9uc1tERUJVR19BQkJSRVZdLmRhdGEgKyB2YWx1ZSk7CisJCT0gcmVhZF9h YmJyZXYgKGRzbywKKwkJCSAgICAgICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19BQkJSRVYp XS5kYXRhICsgdmFsdWUpOwogCSAgICAgIGlmIChhYmJyZXYgPT0gTlVMTCkKIAkJZ290byBmYWls OwogCSAgICAgIG1wID0gKHN0cnVjdCBtZXRhX2FiYnJldl9lbnRyeSAqKQpAQCAtNjc0OSw3ICs2 NzgwLDggQEAgcmVhZF9kZWJ1Z19pbmZvIChEU08gKmRzbywgaW50IGtpbmQsIHVuc2lnbmVkIGlu dCAqZGllX2NvdW50KQogCSAgaWYgKGFiYnJldikKIAkgICAgaHRhYl9kZWxldGUgKGFiYnJldik7 CiAJICBhYmJyZXYKLQkgICAgPSByZWFkX2FiYnJldiAoZHNvLCBkZWJ1Z19zZWN0aW9uc1tERUJV R19BQkJSRVZdLmRhdGEgKyB2YWx1ZSk7CisJICAgID0gcmVhZF9hYmJyZXYgKGRzbywKKwkJCSAg IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0FCQlJFVildLmRhdGEgKyB2YWx1ZSk7CiAJICBp ZiAoYWJicmV2ID09IE5VTEwpCiAJICAgIHsKIAkgICAgICBlcnJvciAoMCwgMCwgIiVzOiBDb3Vs ZG4ndCByZWFkIGFiYnJldiBhdCBvZmZzZXQgMHgleCIsCkBAIC02NzYwLDcgKzY3OTIsNyBAQCBy ZWFkX2RlYnVnX2luZm8gKERTTyAqZHNvLCBpbnQga2luZCwgdW5zaWduZWQgaW50ICpkaWVfY291 bnQpCiAJfQogICAgICAgbGFzdF9hYmJyZXZfb2Zmc2V0ID0gdmFsdWU7CiAKLSAgICAgIGlmICh1 bmxpa2VseSAoa2luZCA9PSBERUJVR19UWVBFUykpCisgICAgICBpZiAodW5saWtlbHkgKGtpbmQg PT0gSU5ERVgoREVCVUdfVFlQRVMpKSkKIAl7CiAJICBwdHIgKz0gODsKIAkgIHR5cGVfb2Zmc2V0 ID0gcmVhZF8zMiAocHRyKTsKQEAgLTY4MjYsNyArNjg1OCw3IEBAIHJlYWRfZGVidWdfaW5mbyAo RFNPICpkc28sIGludCBraW5kLCB1bnNpZ25lZCBpbnQgKmRpZV9jb3VudCkKIAkgICAgICBnb3Rv IGZhaWw7CiAJICAgIH0KIAkgIGlmIChsaWtlbHkgKCFvcF9tdWx0aWZpbGUgJiYgIXJkX211bHRp ZmlsZSAmJiAhZmlfbXVsdGlmaWxlKQotCSAgICAgICYmIGxpa2VseSAoa2luZCA9PSBERUJVR19J TkZPKSkKKwkgICAgICAmJiBsaWtlbHkgKGtpbmQgPT0gSU5ERVgoREVCVUdfSU5GTykpKQogCSAg ICB7CiAJICAgICAgaWYgKG5kaWVzID09IG1heF9kaWVfbGltaXQpCiAJCXsKQEAgLTcxMTIsNyAr NzE0NCw3IEBAIHJlYWRfZGVidWdfaW5mbyAoRFNPICpkc28sIGludCBraW5kLCB1bnNpZ25lZCBp bnQgKmRpZV9jb3VudCkKIAkgICAgewogCSAgICAgIGlmIChsb3dfbWVtX3BoYXNlMSkKIAkJY29u dGludWU7Ci0JICAgICAgaWYgKG9mZl9odGFiICE9IE5VTEwgJiYga2luZCA9PSBERUJVR19JTkZP KQorCSAgICAgIGlmIChvZmZfaHRhYiAhPSBOVUxMICYmIGtpbmQgPT0gSU5ERVgoREVCVUdfSU5G TykpCiAJCXsKIAkJICB2b2lkICoqc2xvdAogCQkgICAgPSBodGFiX2ZpbmRfc2xvdF93aXRoX2hh c2ggKG9mZl9odGFiLCBkaWUsIG9mZl9oYXNoIChkaWUpLApAQCAtNzE1OSw2ICs3MTkxLDMyIEBA IHJlYWRfZGVidWdfaW5mbyAoRFNPICpkc28sIGludCBraW5kLCB1bnNpZ25lZCBpbnQgKmRpZV9j b3VudCkKIAkgIGN1LT5jdV9kaWUtPmRpZV9yZW1vdmUgPSAxOwogCSAgY29udGludWU7CiAJfQor ICAgICAgY2hhciAqZHdvX25hbWUgPSBnZXRfQVRfc3RyaW5nIChjdS0+Y3VfZGllLCBEV19BVF9H TlVfZHdvX25hbWUpOworICAgICAgaWYgKCFkd29fbmFtZSkKKyAgICAgICAgZHdvX25hbWUgPSBn ZXRfQVRfc3RyaW5nIChjdS0+Y3VfZGllLCBEV19BVF9kd29fbmFtZSk7CisgICAgICBpZiAoZHdv X25hbWUpCisJeworCSAgaW50IGxlbjEgPSBzdHJsZW4oZHdvX25hbWUpOworCSAgaW50IGxlbjIg PSBzdHJsZW4oZHNvLT5maWxlbmFtZSk7CisgICAgICAgICAgaWYgKGxlbjIgPiA0ICYmIHN0cm5j bXAoZHNvLT5maWxlbmFtZSArIGxlbjIgLSA0LCAiLmR3byIsIDQpKQorCSAgICB7CisgICAgICAg ICAgICAgIGludCBsZW4gPSAwOworICAgICAgICAgICAgICBjaGFyICpwdHI7CisJICAgICAgaW50 IGxlbjMgPSAoY3UtPmN1X2NvbXBfZGlyICE9IE5VTEwgJiYgKmR3b19uYW1lICE9ICcvJykKKyAg ICAgICAgICAgICAgICAgICAgICAgICA/IChzdHJsZW4oY3UtPmN1X2NvbXBfZGlyKSArIDEpIDog MDsKKyAgICAgICAgICAgICAgbGVuID0gbGVuMSArIDEgKyBsZW4zOworICAgICAgICAgICAgICBk d29maWxlID0gbWFsbG9jIChsZW4pOworICAgICAgICAgICAgICBwdHIgPSBkd29maWxlOworICAg ICAgICAgICAgICBpZiAobGVuMyAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgIG1lbWNweShkd29maWxlLCBjdS0+Y3VfY29tcF9kaXIsIHN0cmxlbihjdS0+Y3VfY29t cF9kaXIpKTsKKyAgICAgICAgICAgICAgICAgIGR3b2ZpbGVbbGVuMy0xXSA9ICcvJzsKKyAgICAg ICAgICAgICAgICAgIHB0ciArPSBsZW4zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgbWVtY3B5KHB0ciwgZHdvX25hbWUsIGxlbjEgKyAxKTsKKwkgICAgfQorICAgICAgICB9CisK ICAgICAgIGVudW0gZHdhcmZfZm9ybSBmb3JtOwogICAgICAgZGVidWdfbGluZV9vZmYKIAk9IGdl dF9BVF9pbnQgKGN1LT5jdV9kaWUsIERXX0FUX3N0bXRfbGlzdCwgJnByZXNlbnQsICZmb3JtKTsK QEAgLTcxODcsNyArNzI0NSw3IEBAIHJlYWRfZGVidWdfaW5mbyAoRFNPICpkc28sIGludCBraW5k LCB1bnNpZ25lZCBpbnQgKmRpZV9jb3VudCkKIAl9CiAKICAgICAgIGlmIChsaWtlbHkgKCFvcF9t dWx0aWZpbGUgJiYgIXJkX211bHRpZmlsZSAmJiAhZmlfbXVsdGlmaWxlKQotCSAgJiYgbGlrZWx5 IChraW5kID09IERFQlVHX0lORk8pKQorCSAgJiYgbGlrZWx5IChraW5kID09IElOREVYKERFQlVH X0lORk8pKSkKIAl7CiAJICBpZiAoY2hlY2tzdW1fZGllIChkc28sIGN1LCBOVUxMLCBjdS0+Y3Vf ZGllKSkKIAkgICAgZ290byBmYWlsOwpAQCAtNzIxMyw3ICs3MjcxLDcgQEAgcmVhZF9kZWJ1Z19p bmZvIChEU08gKmRzbywgaW50IGtpbmQsIHVuc2lnbmVkIGludCAqZGllX2NvdW50KQogCSAgaWYg KGZpbmRfZHVwcyAoY3UtPmN1X2RpZSkpCiAJICAgIGdvdG8gZmFpbDsKIAl9Ci0gICAgICBpZiAo dW5saWtlbHkgKGtpbmQgPT0gREVCVUdfVFlQRVMpKQorICAgICAgaWYgKHVubGlrZWx5IChraW5k ID09IElOREVYKERFQlVHX1RZUEVTKSkpCiAJewogCSAgZHdfZGllX3JlZiByZWYgPSBvZmZfaHRh Yl9sb29rdXAgKGN1LCBjdS0+Y3Vfb2Zmc2V0ICsgdHlwZV9vZmZzZXQpOwogCSAgaWYgKHJlZiA9 PSBOVUxMKQpAQCAtNzI2Miw3ICs3MzIwLDcgQEAgcmVhZF9kZWJ1Z19pbmZvIChEU08gKmRzbywg aW50IGtpbmQsIHVuc2lnbmVkIGludCAqZGllX2NvdW50KQogICBlbHNlIGlmIChhYmJyZXYpCiAg ICAgaHRhYl9kZWxldGUgKGFiYnJldik7CiAKLSAgaWYgKHVubGlrZWx5IChraW5kID09IERFQlVH X1RZUEVTKSkKKyAgaWYgKHVubGlrZWx5IChraW5kID09IElOREVYKERFQlVHX1RZUEVTKSkpCiAg ICAgcmV0dXJuIDA7CiAKICAgaWYgKHVubGlrZWx5IChyZF9tdWx0aWZpbGUgfHwgZmlfbXVsdGlm aWxlKSkKQEAgLTczMjcsNyArNzM4NSw3IEBAIGZhaWw6CiAgICAgfQogICBlbHNlIGlmIChhYmJy ZXYpCiAgICAgaHRhYl9kZWxldGUgKGFiYnJldik7Ci0gIGlmIChkdXBfaHRhYiAmJiBraW5kID09 IERFQlVHX0lORk8pCisgIGlmIChkdXBfaHRhYiAmJiBraW5kID09IElOREVYKERFQlVHX0lORk8p KQogICAgIHsKICAgICAgIGh0YWJfZGVsZXRlIChkdXBfaHRhYik7CiAgICAgICBkdXBfaHRhYiA9 IE5VTEw7CkBAIC03NTE3LDkgKzc1NzUsOSBAQCBtYXJrX3NpbmdsZXRvbnMgKGR3X2N1X3JlZiBj dSwgZHdfZGllX3JlZiB0b3BfZGllLCBkd19kaWVfcmVmIGRpZSwKICAgICBnb3RvIGhhbmRsZV9j aGlsZHJlbjsKIAogICBpZiAodW5saWtlbHkgKGN1LT5jdV9raW5kID09IENVX1RZUEVTKSkKLSAg ICBwdHIgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19UWVBFU10uZGF0YTsKKyAgICBwdHIgPSBkZWJ1 Z19zZWN0aW9uc1tJTkRFWChERUJVR19UWVBFUyldLmRhdGE7CiAgIGVsc2UKLSAgICBwdHIgPSBk ZWJ1Z19zZWN0aW9uc1tERUJVR19JTkZPXS5kYXRhOworICAgIHB0ciA9IGRlYnVnX3NlY3Rpb25z W0lOREVYKERFQlVHX0lORk8pXS5kYXRhOwogICBwdHIgKz0gZGllLT5kaWVfb2Zmc2V0OwogICBz a2lwX2xlYjEyOCAocHRyKTsKICAgZm9yIChpID0gMDsgaSA8IHQtPm5hdHRyOyArK2kpCkBAIC05 OTU2LDggKzEwMDE0LDggQEAgbWFjcm9fZXEgKGNvbnN0IHZvaWQgKnAsIGNvbnN0IHZvaWQgKnEp CiAJICBzdHJwMiA9IHJlYWRfMzIgKHAyKTsKIAkgIGlmIChvcF9tdWx0aWZpbGUpCiAJICAgIHsK LQkgICAgICBpZiAoc3RyY21wICgoY2hhciAqKSBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLmRh dGEgKyBzdHJwMSwKLQkJCSAgKGNoYXIgKikgZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRh ICsgc3RycDIpCisJICAgICAgaWYgKHN0cmNtcCAoKGNoYXIgKikgZGVidWdfc2VjdGlvbnNbSU5E RVgoREVCVUdfU1RSKV0uZGF0YSArIHN0cnAxLAorCQkJICAoY2hhciAqKSBkZWJ1Z19zZWN0aW9u c1tJTkRFWChERUJVR19TVFIpXS5kYXRhICsgc3RycDIpCiAJCSAgIT0gMCkKIAkJcmV0dXJuIDA7 CiAJICAgIH0KQEAgLTk5NzgsNyArMTAwMzYsNyBAQCBtYWNyb19oYXNoMiAoY29uc3Qgdm9pZCAq cCkKIHsKICAgc3RydWN0IG1hY3JvX2VudHJ5ICptID0gKHN0cnVjdCBtYWNyb19lbnRyeSAqKXA7 CiAKLSAgcmV0dXJuIG0tPnB0ciAtIGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5kYXRhOwor ICByZXR1cm4gbS0+cHRyIC0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5kYXRh OwogfQogCiAvKiBFcXVhbGl0eSBmdW5jdGlvbiBpbiBtYWNyb19odGFiLiAgKi8KQEAgLTk5OTMs NyArMTAwNTEsNyBAQCBtYWNyb19lcTIgKGNvbnN0IHZvaWQgKnAsIGNvbnN0IHZvaWQgKnEpCiAv KiBQYXJzZSAuZGVidWdfbWFjcm8gc2VjdGlvbiwgZWl0aGVyIGR1cmluZyB3cml0ZV9tdWx0aWZp bGUKICAgIG9yIGR1cmluZyBmaV9tdWx0aWZpbGUgcGhhc2UuICBEdXJpbmcgd3JpdGVfbXVsdGlm aWxlIGl0CiAgICBzZWxlY3RzIHBvdGVudGlhbGx5IHNoYXJlYWJsZSAuZGVidWdfbWFjcm8gc2Vx dWVuY2VzIGFuZAotICAgd3JpdGVzIHRoZW0gaW50byBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNS T10ubmV3X2RhdGEKKyAgIHdyaXRlcyB0aGVtIGludG8gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVC VUdfTUFDUk8pXS5uZXdfZGF0YQogICAgYmxvY2sgaXQgYWxsb2NhdGVzLiAgRHVyaW5nIGZpX211 bHRpZmlsZSBpdCBwb3B1bGF0ZXMKICAgIG1hY3JvX2h0YWIuICBJbiBib3RoIGNhc2VzIGl0IGNh bGxzIG5vdGVfc3RycF9vZmZzZXQKICAgIG9uIERXX0ZPUk1fc3RycCBvZmZzZXRzLiAgKi8KQEAg LTEwMDA0LDkgKzEwMDYyLDkgQEAgcmVhZF9tYWNybyAoRFNPICpkc28pCiAgIHVuc2lnbmVkIGlu dCB2ZXJzaW9uLCBmbGFncywgb3AsIHN0cnA7CiAgIHN0cnVjdCBtYWNyb19lbnRyeSBtZSwgKm07 CiAKLSAgcHRyID0gZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLmRhdGE7Ci0gIGVuZHNlYyA9 IHB0ciArIGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5zaXplOwotICBkZWJ1Z19zZWN0aW9u c1tERUJVR19NQUNST10ubmV3X3NpemUgPSAwOworICBwdHIgPSBkZWJ1Z19zZWN0aW9uc1tJTkRF WChERUJVR19NQUNSTyldLmRhdGE7CisgIGVuZHNlYyA9IHB0ciArIGRlYnVnX3NlY3Rpb25zW0lO REVYKERFQlVHX01BQ1JPKV0uc2l6ZTsKKyAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFD Uk8pXS5uZXdfc2l6ZSA9IDA7CiAgIGlmICghd3JfbXVsdGlmaWxlKQogICAgIHsKICAgICAgIG1h Y3JvX2h0YWIgPSBodGFiX3RyeV9jcmVhdGUgKDUwLCBtYWNyb19oYXNoMiwgbWFjcm9fZXEyLCBO VUxMKTsKQEAgLTEwMDg0LDcgKzEwMTQyLDcgQEAgcmVhZF9tYWNybyAoRFNPICpkc28pCiAJCWhh c2ggPSBpdGVyYXRpdmVfaGFzaCAocywgcHRyIC0gNCAtIHMsIGhhc2gpOwogCSAgICAgIGlmIChj YW5fc2hhcmUpCiAJCXsKLQkJICB1bnNpZ25lZCBjaGFyICpwID0gZGVidWdfc2VjdGlvbnNbREVC VUdfU1RSXS5kYXRhICsgc3RycDsKKwkJICB1bnNpZ25lZCBjaGFyICpwID0gZGVidWdfc2VjdGlv bnNbSU5ERVgoREVCVUdfU1RSKV0uZGF0YSArIHN0cnA7CiAJCSAgdW5zaWduZWQgaW50IGxlbiA9 IHN0cmxlbiAoKGNoYXIgKikgcCk7CiAJCSAgaGFzaCA9IGl0ZXJhdGl2ZV9oYXNoIChwLCBsZW4s IGhhc2gpOwogCQkgIHMgPSBwdHI7CkBAIC0xMDEwOSw3ICsxMDE2Nyw3IEBAIHJlYWRfbWFjcm8g KERTTyAqZHNvKQogICAgICAgaWYgKHdyX211bHRpZmlsZSkKIAl7CiAJICBpZiAoY2FuX3NoYXJl KQotCSAgICBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3X3NpemUgKz0gcHRyIC0gc3Rh cnQ7CisJICAgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X3NpemUgKz0g cHRyIC0gc3RhcnQ7CiAJICBjb250aW51ZTsKIAl9CiAKQEAgLTEwMTI0LDE3ICsxMDE4MiwxNyBA QCByZWFkX21hY3JvIChEU08gKmRzbykKIAkgIGlmIChtID09IE5VTEwpCiAJICAgIGNhbl9zaGFy ZSA9IGZhbHNlOwogCSAgZWxzZQotCSAgICBtZS5oYXNoID0gbS0+cHRyIC0gYWx0X2RhdGFbREVC VUdfTUFDUk9dOworCSAgICBtZS5oYXNoID0gbS0+cHRyIC0gYWx0X2RhdGFbSU5ERVgoREVCVUdf TUFDUk8pXTsKIAl9CiAgICAgICBpZiAoIWNhbl9zaGFyZSkKIAl7CiAJICBtZS5sZW4gPSAwOwot CSAgbWUuaGFzaCA9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfc2l6ZTsKLQkgIGRl YnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfc2l6ZSArPSBwdHIgLSBzdGFydDsKKwkgIG1l Lmhhc2ggPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLm5ld19zaXplOworCSAg ZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5uZXdfc2l6ZSArPSBwdHIgLSBzdGFy dDsKIAl9CiAgICAgICBzbG90CiAJPSBodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2ggKG1hY3JvX2h0 YWIsICZtZSwKLQkJCQkgICAgbWUucHRyIC0gZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLmRh dGEsCisJCQkJICAgIG1lLnB0ciAtIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0u ZGF0YSwKIAkJCQkgICAgSU5TRVJUKTsKICAgICAgIGlmIChzbG90ID09IE5VTEwpCiAJZHd6X29v bSAoKTsKQEAgLTEwMTUwLDEyICsxMDIwOCwxMiBAQCByZWFkX21hY3JvIChEU08gKmRzbykKICAg aWYgKCF3cl9tdWx0aWZpbGUpCiAgICAgcmV0dXJuIDA7CiAKLSAgZGVidWdfc2VjdGlvbnNbREVC VUdfTUFDUk9dLm5ld19kYXRhCi0gICAgPSAodW5zaWduZWQgY2hhciAqKSBtYWxsb2MgKGRlYnVn X3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfc2l6ZSk7Ci0gIGlmIChkZWJ1Z19zZWN0aW9uc1tE RUJVR19NQUNST10ubmV3X2RhdGEgPT0gTlVMTCkKKyAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVC VUdfTUFDUk8pXS5uZXdfZGF0YQorICAgID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jIChkZWJ1 Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLm5ld19zaXplKTsKKyAgaWYgKGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X2RhdGEgPT0gTlVMTCkKICAgICBkd3pfb29t ICgpOwotICBkc3QgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3X2RhdGE7Ci0gIGZv ciAocHRyID0gZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLmRhdGE7IHB0ciA8IGVuZHNlYzsg KQorICBkc3QgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLm5ld19kYXRhOwor ICBmb3IgKHB0ciA9IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0uZGF0YTsgcHRy IDwgZW5kc2VjOyApCiAgICAgewogICAgICAgdW5zaWduZWQgY2hhciAqc3RhcnQgPSBwdHI7CiAg ICAgICBib29sIGNhbl9zaGFyZSA9IHRydWU7CkBAIC0xMDIzNiw4ICsxMDI5NCw4IEBAIHJlYWRf bWFjcm8gKERTTyAqZHNvKQogCSAgZHN0ICs9IHB0ciAtIHN0YXJ0OwogCX0KICAgICB9Ci0gIGFz c2VydCAoZHN0ID09IGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfZGF0YQotCQkgKyBk ZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3X3NpemUpOworICBhc3NlcnQgKGRzdCA9PSBk ZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLm5ld19kYXRhCisJCSArIGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X3NpemUpOwogCiAgIHJldHVybiAwOwogfQpA QCAtMTAyOTMsNyArMTAzNTEsNyBAQCBvcHRpbWl6ZV93cml0ZV9tYWNybyAodm9pZCAqKnNsb3Qs IHZvaWQgKmRhdGEpCiAgICBvciBkdXJpbmcgcmVhZF9tdWx0aWZpbGUuICBJdCBwYXJzZXMgLmRl YnVnX21hY3JvIHdyaXR0ZW4KICAgIGJ5IHdyaXRlX211bHRpZmlsZSwgc28gaXQgb25seSBjb250 YWlucyBzaGFyZWFibGUgc2VxdWVuY2VzLgogICAgRmluZCBkdXBsaWNhdGUgc2VxdWVuY2VzLCBk dXJpbmcgb3B0aW1pemVfbXVsdGlmaWxlIHdyaXRlIHRoZW0KLSAgIGludG8gZGVidWdfc2VjdGlv bnNbREVCVUdfTUFDUk9dLm5ld19kYXRhIGl0IGFsbG9jYXRlcywKKyAgIGludG8gZGVidWdfc2Vj dGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5uZXdfZGF0YSBpdCBhbGxvY2F0ZXMsCiAgICBkdXJp bmcgcmVhZF9tdWx0aWZpbGUganVzdCBwb3B1bGF0ZXMgbWFjcm9faHRhYiAoc29vbiB0byBiZQog ICAgYWx0X21hY3JvX2h0YWIpLiAgKi8KIHN0YXRpYyB2b2lkCkBAIC0xMDMwNywxNCArMTAzNjUs MTQgQEAgaGFuZGxlX21hY3JvICh2b2lkKQogICBpZiAobWFjcm9faHRhYiA9PSBOVUxMKQogICAg IGR3el9vb20gKCk7CiAKLSAgZW5kc2VjID0gZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLmRh dGEgKyBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10uc2l6ZTsKKyAgZW5kc2VjID0gZGVidWdf c2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5kYXRhICsgZGVidWdfc2VjdGlvbnNbREVCVUdf TUFDUk9dLnNpemU7CiAgIGlmIChvcF9tdWx0aWZpbGUpCiAgICAgewotICAgICAgZGVidWdfc2Vj dGlvbnNbREVCVUdfTUFDUk9dLm5ld19zaXplID0gMDsKKyAgICAgIGRlYnVnX3NlY3Rpb25zW0lO REVYKERFQlVHX01BQ1JPKV0ubmV3X3NpemUgPSAwOwogICAgICAgdG9fZnJlZSA9IG9ic3RhY2tf YWxsb2MgKCZvYiwgMSk7CiAgICAgfQogCi0gIGZvciAocHRyID0gZGVidWdfc2VjdGlvbnNbREVC VUdfTUFDUk9dLmRhdGE7IHB0ciA8IGVuZHNlYzsgKQorICBmb3IgKHB0ciA9IGRlYnVnX3NlY3Rp b25zW0lOREVYKERFQlVHX01BQ1JPKV0uZGF0YTsgcHRyIDwgZW5kc2VjOyApCiAgICAgewogICAg ICAgdW5zaWduZWQgY2hhciAqc3RhcnQgPSBwdHIsICpzID0gcHRyLCAqcDsKICAgICAgIGhhc2h2 YWxfdCBoYXNoID0gMDsKQEAgLTEwMzQwLDcgKzEwMzk4LDcgQEAgaGFuZGxlX21hY3JvICh2b2lk KQogCSAgICBjYXNlIERXX01BQ1JPX3VuZGVmX3N0cnA6CiAJICAgICAgc2tpcF9sZWIxMjggKHB0 cik7CiAJICAgICAgaGFzaCA9IGl0ZXJhdGl2ZV9oYXNoIChzLCBwdHIgLSBzLCBoYXNoKTsKLQkg ICAgICBwID0gZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhICsgcmVhZF8zMiAocHRyKTsK KwkgICAgICBwID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uZGF0YSArIHJlYWRf MzIgKHB0cik7CiAJICAgICAgbGVuID0gc3RybGVuICgoY2hhciAqKSBwKTsKIAkgICAgICBoYXNo ID0gaXRlcmF0aXZlX2hhc2ggKHAsIGxlbiwgaGFzaCk7CiAJICAgICAgaWYgKG9wX211bHRpZmls ZQpAQCAtMTAzNzAsNyArMTA0MjgsNyBAQCBoYW5kbGVfbWFjcm8gKHZvaWQpCiAJICBpZiAob3Bf bXVsdGlmaWxlICYmIChtLT5oYXNoICYgMSkgPT0gMCkKIAkgICAgewogCSAgICAgIG0tPmhhc2gg fD0gMTsKLQkgICAgICBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3X3NpemUgKz0gbWUu bGVuOworCSAgICAgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X3NpemUg Kz0gbWUubGVuOwogCSAgICB9CiAJfQogICAgICAgZWxzZSBpZiAob3BfbXVsdGlmaWxlKQpAQCAt MTAzODksMTUgKzEwNDQ3LDE1IEBAIGhhbmRsZV9tYWNybyAodm9pZCkKIAogICBpZiAob3BfbXVs dGlmaWxlKQogICAgIHsKLSAgICAgIGlmIChkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3 X3NpemUpCisgICAgICBpZiAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5uZXdf c2l6ZSkKIAl7CiAJICB1bnNpZ25lZCBjaGFyICpwOwotCSAgZGVidWdfc2VjdGlvbnNbREVCVUdf TUFDUk9dLm5ld19kYXRhCi0JICAgID0gbWFsbG9jIChkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNS T10ubmV3X3NpemUpOwotCSAgcCA9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfZGF0 YTsKKwkgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X2RhdGEKKwkgICAg PSBtYWxsb2MgKGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X3NpemUpOwor CSAgcCA9IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X2RhdGE7CiAJICBo dGFiX3RyYXZlcnNlIChtYWNyb19odGFiLCBvcHRpbWl6ZV93cml0ZV9tYWNybywgJnApOwotCSAg YXNzZXJ0IChwID09IGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfZGF0YQotCQkgICAg ICAgKyBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3X3NpemUpOworCSAgYXNzZXJ0IChw ID09IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X2RhdGEKKwkJICAgICAg ICsgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5uZXdfc2l6ZSk7CiAJICBodGFi X2RlbGV0ZSAobWFjcm9faHRhYik7CiAJICBtYWNyb19odGFiID0gTlVMTDsKIAl9CkBAIC0xMDQx MywxMyArMTA0NzEsMTMgQEAgd3JpdGVfbWFjcm8gKHZvaWQpCiAgIHVuc2lnbmVkIGludCBvcCwg c3RycDsKICAgc3RydWN0IG1hY3JvX2VudHJ5IG1lLCAqbTsKIAotICBlbmRzZWMgPSBkZWJ1Z19z ZWN0aW9uc1tERUJVR19NQUNST10uZGF0YSArIGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5z aXplOwotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3X2RhdGEKLSAgICA9ICh1bnNp Z25lZCBjaGFyICopIG1hbGxvYyAoZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLm5ld19zaXpl KTsKLSAgaWYgKGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfZGF0YSA9PSBOVUxMKQor ICBlbmRzZWMgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLmRhdGEgKyBkZWJ1 Z19zZWN0aW9uc1tERUJVR19NQUNST10uc2l6ZTsKKyAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVC VUdfTUFDUk8pXS5uZXdfZGF0YQorICAgID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jIChkZWJ1 Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLm5ld19zaXplKTsKKyAgaWYgKGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X2RhdGEgPT0gTlVMTCkKICAgICBkd3pfb29t ICgpOwotICBkc3QgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3X2RhdGE7Ci0gIGZv ciAocHRyID0gZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLmRhdGE7IHB0ciA8IGVuZHNlYzsg KQorICBkc3QgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLm5ld19kYXRhOwor ICBmb3IgKHB0ciA9IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0uZGF0YTsgcHRy IDwgZW5kc2VjOyApCiAgICAgewogICAgICAgdW5zaWduZWQgY2hhciAqcyA9IHB0cjsKICAgICAg IHVuc2lnbmVkIGNoYXIgZmxhZ3M7CkBAIC0xMDQyNyw3ICsxMDQ4NSw3IEBAIHdyaXRlX21hY3Jv ICh2b2lkKQogICAgICAgbWUucHRyID0gcHRyOwogICAgICAgbSA9IChzdHJ1Y3QgbWFjcm9fZW50 cnkgKikKIAkgIGh0YWJfZmluZF93aXRoX2hhc2ggKG1hY3JvX2h0YWIsICZtZSwKLQkJCSAgICAg ICBtZS5wdHIgLSBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10uZGF0YSk7CisJCQkgICAgICAg bWUucHRyIC0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5kYXRhKTsKICAgICAg IGlmIChtLT5sZW4pCiAJewogCSAgcHRyICs9IG0tPmxlbjsKQEAgLTEwNDg2LDExICsxMDU0NCwx MSBAQCB3cml0ZV9tYWNybyAodm9pZCkKIAkgICAgY2FzZSBEV19NQUNST19pbXBvcnQ6CiAJICAg ICAgbWVtY3B5IChkc3QsIHMsIHB0ciAtIDEgLSBzKTsKIAkgICAgICBkc3QgKz0gcHRyIC0gMSAt IHM7Ci0JICAgICAgbWUucHRyID0gZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLmRhdGEgKyBy ZWFkXzMyIChwdHIpOworCSAgICAgIG1lLnB0ciA9IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVH X01BQ1JPKV0uZGF0YSArIHJlYWRfMzIgKHB0cik7CiAJICAgICAgbSA9IChzdHJ1Y3QgbWFjcm9f ZW50cnkgKikKIAkJICBodGFiX2ZpbmRfd2l0aF9oYXNoIChtYWNyb19odGFiLCAmbWUsCiAJCQkJ ICAgICAgIG1lLnB0cgotCQkJCSAgICAgICAtIGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5k YXRhKTsKKwkJCQkgICAgICAgLSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLmRh dGEpOwogCSAgICAgIGlmIChtLT5sZW4pCiAJCSpkc3QgPSBEV19NQUNST19pbXBvcnRfc3VwOwog CSAgICAgIGVsc2UKQEAgLTEwNTA2LDggKzEwNTY0LDggQEAgd3JpdGVfbWFjcm8gKHZvaWQpCiAg ICAgICBtZW1jcHkgKGRzdCwgcywgcHRyIC0gcyk7CiAgICAgICBkc3QgKz0gcHRyIC0gczsKICAg ICB9Ci0gIGFzc2VydCAoZHN0ID09IGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfZGF0 YQotCQkgKyBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10ubmV3X3NpemUpOworICBhc3NlcnQg KGRzdCA9PSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLm5ld19kYXRhCisJCSAr IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X3NpemUpOwogfQogCiAvKiBD b21wdXRlIG5ldyBhYmJyZXZpYXRpb25zIGZvciBESUUgKHdpdGggcmVmZXJlbmNlIERJRSBSRUYp LgpAQCAtMTA1ODMsOCArMTA2NDEsOCBAQCBidWlsZF9hYmJyZXZzX2Zvcl9kaWUgKGh0YWJfdCBo LCBkd19jdV9yZWYgY3UsIGR3X2RpZV9yZWYgZGllLAogICAgIHsKICAgICAgIHVuc2lnbmVkIGNo YXIgKmJhc2UKIAk9IGN1LT5jdV9raW5kID09IENVX1RZUEVTCi0JICA/IGRlYnVnX3NlY3Rpb25z W0RFQlVHX1RZUEVTXS5kYXRhCi0JICA6IGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lORk9dLmRhdGE7 CisJICA/IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1RZUEVTKV0uZGF0YQorCSAgOiBkZWJ1 Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0uZGF0YTsKICAgICAgIHVuc2lnbmVkIGNoYXIg KnB0ciA9IGJhc2UgKyByZWYtPmRpZV9vZmZzZXQ7CiAgICAgICBzdHJ1Y3QgYWJicmV2X3RhZyAq cmVmdCA9IHJlZi0+ZGllX2FiYnJldjsKIApAQCAtMTA3MjAsNyArMTA3NzgsNyBAQCBidWlsZF9h YmJyZXZzX2Zvcl9kaWUgKGh0YWJfdCBoLCBkd19jdV9yZWYgY3UsIGR3X2RpZV9yZWYgZGllLAog CQkJICAgICBnZXRfRFdfQVRfc3RyIChyZWZ0LT5hdHRyW2ldLmF0dHIpKTsKIAkJICAgICAgcmV0 dXJuIDE7CiAJCSAgICB9Ci0JCSAgbWUucHRyID0gZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9d LmRhdGEgKyB2YWx1ZTsKKwkJICBtZS5wdHIgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19N QUNSTyldLmRhdGEgKyB2YWx1ZTsKIAkJICBtID0gKHN0cnVjdCBtYWNyb19lbnRyeSAqKQogCQkg ICAgaHRhYl9maW5kX3dpdGhfaGFzaCAobWFjcm9faHRhYiwgJm1lLCB2YWx1ZSk7CiAJCSAgaWYg KG0tPmxlbikKQEAgLTExODM3LDkgKzExODk1LDkgQEAgY29tcHV0ZV9hYmJyZXZzIChEU08gKmRz bykKIAkgICAgb3duZXIgPSBvd25lci0+dTEuY3VfbmV3X2FiYnJldl9vd25lcjsKIAkgIH0KICAg ICAgIH0KLSAgZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10ubmV3X3NpemUgPSB0b3RhbF9zaXpl OwotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19BQkJSRVZdLm5ld19zaXplID0gYWJicmV2X3NpemU7 Ci0gIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1RZUEVTXS5uZXdfc2l6ZSA9IHR5cGVzX3NpemU7Cisg IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5uZXdfc2l6ZSA9IHRvdGFsX3NpemU7 CisgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0FCQlJFVildLm5ld19zaXplID0gYWJicmV2 X3NpemU7CisgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1RZUEVTKV0ubmV3X3NpemUgPSB0 eXBlc19zaXplOwogICByZXR1cm4gMDsKIH0KIApAQCAtMTE4NjQsNyArMTE5MjIsNyBAQCBzdGF0 aWMgdm9pZAogd3JpdGVfYWJicmV2ICh2b2lkKQogewogICBkd19jdV9yZWYgY3U7Ci0gIHVuc2ln bmVkIGNoYXIgKmFiYnJldiA9IG1hbGxvYyAoZGVidWdfc2VjdGlvbnNbREVCVUdfQUJCUkVWXS5u ZXdfc2l6ZSk7CisgIHVuc2lnbmVkIGNoYXIgKmFiYnJldiA9IG1hbGxvYyAoZGVidWdfc2VjdGlv bnNbSU5ERVgoREVCVUdfQUJCUkVWKV0ubmV3X3NpemUpOwogICB1bnNpZ25lZCBjaGFyICpwdHIg PSBhYmJyZXY7CiAKICAgaWYgKHVubGlrZWx5IChwcm9ncmVzc19wKSkKQEAgLTExODc2LDcgKzEx OTM0LDcgQEAgd3JpdGVfYWJicmV2ICh2b2lkKQogICBpZiAoYWJicmV2ID09IE5VTEwpCiAgICAg ZHd6X29vbSAoKTsKIAotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19BQkJSRVZdLm5ld19kYXRhID0g YWJicmV2OworICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19BQkJSRVYpXS5uZXdfZGF0YSA9 IGFiYnJldjsKICAgZm9yIChjdSA9IGZpcnN0X2N1OyBjdTsgY3UgPSBjdS0+Y3VfbmV4dCkKICAg ICB7CiAgICAgICBzdHJ1Y3QgYWJicmV2X3RhZyAqKmFycjsKQEAgLTExOTE2LDcgKzExOTc0LDcg QEAgd3JpdGVfYWJicmV2ICh2b2lkKQogCSAgY3UtPmN1X25ld19hYmJyZXYgPSBOVUxMOwogCX0K ICAgICB9Ci0gIGFzc2VydCAoYWJicmV2ICsgZGVidWdfc2VjdGlvbnNbREVCVUdfQUJCUkVWXS5u ZXdfc2l6ZSA9PSBwdHIpOworICBhc3NlcnQgKGFiYnJldiArIGRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX0FCQlJFVildLm5ld19zaXplID09IHB0cik7CiB9CiAKIC8qIEFkanVzdCBEV0FSRiBl eHByZXNzaW9uIHN0YXJ0aW5nIGF0IFBUUiwgTEVOIGJ5dGVzIGxvbmcsIHJlZmVyZW5jZWQgYnkK QEAgLTEyMjQ1LDggKzEyMzAzLDggQEAgd3JpdGVfZGllICh1bnNpZ25lZCBjaGFyICpwdHIsIGR3 X2N1X3JlZiBjdSwgZHdfZGllX3JlZiBkaWUsCiAgICAgewogICAgICAgdW5zaWduZWQgY2hhciAq YmFzZQogCT0gY3UtPmN1X2tpbmQgPT0gQ1VfVFlQRVMKLQkgID8gZGVidWdfc2VjdGlvbnNbREVC VUdfVFlQRVNdLmRhdGEKLQkgIDogZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10uZGF0YTsKKwkg ID8gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfVFlQRVMpXS5kYXRhCisJICA6IGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5kYXRhOwogICAgICAgdW5zaWduZWQgY2hhciAqaW5w dHIgPSBiYXNlICsgcmVmLT5kaWVfb2Zmc2V0OwogICAgICAgc3RydWN0IGFiYnJldl90YWcgKnJl ZnQgPSByZWYtPmRpZV9hYmJyZXY7CiAgICAgICB1bnNpZ25lZCBpbnQgaSwgajsKQEAgLTEyMzE4 LDcgKzEyMzc2LDcgQEAgd3JpdGVfZGllICh1bnNpZ25lZCBjaGFyICpwdHIsIGR3X2N1X3JlZiBj dSwgZHdfZGllX3JlZiBkaWUsCiAJICAgICAgbWVtY3B5IChwdHIsIG9yaWdfcHRyLCBpbnB0ciAt IG9yaWdfcHRyKTsKIAkgICAgICBwdHIgKz0gaW5wdHIgLSBvcmlnX3B0cjsKIAkgICAgICB2YWx1 ZSA9IHJlYWRfMzIgKGlucHRyKTsKLQkgICAgICBtZS5wdHIgPSBkZWJ1Z19zZWN0aW9uc1tERUJV R19NQUNST10uZGF0YSArIHZhbHVlOworCSAgICAgIG1lLnB0ciA9IGRlYnVnX3NlY3Rpb25zW0lO REVYKERFQlVHX01BQ1JPKV0uZGF0YSArIHZhbHVlOwogCSAgICAgIG0gPSAoc3RydWN0IG1hY3Jv X2VudHJ5ICopCiAJCSAgaHRhYl9maW5kX3dpdGhfaGFzaCAobWFjcm9faHRhYiwgJm1lLCB2YWx1 ZSk7CiAJICAgICAgd3JpdGVfMzIgKHB0ciwgbS0+aGFzaCk7CkBAIC0xMjc5OSw3ICsxMjg1Nyw3 IEBAIHN0YXRpYyB2b2lkCiB3cml0ZV9pbmZvICh1bnNpZ25lZCBpbnQgKmRpZV9jb3VudCkKIHsK ICAgZHdfY3VfcmVmIGN1LCBjdV9uZXh0OwotICB1bnNpZ25lZCBjaGFyICppbmZvID0gbWFsbG9j IChkZWJ1Z19zZWN0aW9uc1tERUJVR19JTkZPXS5uZXdfc2l6ZSk7CisgIHVuc2lnbmVkIGNoYXIg KmluZm8gPSBtYWxsb2MgKGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5uZXdfc2l6 ZSk7CiAgIHVuc2lnbmVkIGNoYXIgKnB0ciA9IGluZm87CiAKICAgaWYgKHVubGlrZWx5IChwcm9n cmVzc19wKSkKQEAgLTEyODEyLDcgKzEyODcwLDcgQEAgd3JpdGVfaW5mbyAodW5zaWduZWQgaW50 ICpkaWVfY291bnQpCiAgICAgZHd6X29vbSAoKTsKICAgaWYgKGRpZV9jb3VudCkKICAgICAqZGll X2NvdW50ID0gMDsKLSAgZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10ubmV3X2RhdGEgPSBpbmZv OworICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0ubmV3X2RhdGEgPSBpbmZvOwog ICBjdSA9IGZpcnN0X2N1OwogICBpZiAodW5saWtlbHkgKGZpX211bHRpZmlsZSkpCiAgICAgd2hp bGUgKGN1CkBAIC0xMjgyMSw3ICsxMjg3OSw3IEBAIHdyaXRlX2luZm8gKHVuc2lnbmVkIGludCAq ZGllX2NvdW50KQogICAgICAgY3UgPSBjdS0+Y3VfbmV4dDsKICAgZm9yICg7IGN1OyBjdSA9IGN1 X25leHQpCiAgICAgewotICAgICAgdW5zaWduZWQgbG9uZyBuZXh0X29mZiA9IGRlYnVnX3NlY3Rp b25zW0RFQlVHX0lORk9dLm5ld19zaXplOworICAgICAgdW5zaWduZWQgbG9uZyBuZXh0X29mZiA9 IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5uZXdfc2l6ZTsKICAgICAgIC8qIEln bm9yZSAuZGVidWdfdHlwZXMgQ1VzLiAgKi8KICAgICAgIGlmIChjdS0+Y3Vfa2luZCA9PSBDVV9U WVBFUykKIAlicmVhazsKQEAgLTEyODY2LDcgKzEyOTI0LDcgQEAgd3JpdGVfaW5mbyAodW5zaWdu ZWQgaW50ICpkaWVfY291bnQpCiAgICAgICB3cml0ZV8zMiAocHRyLCAwKTsKICAgICAgIHdyaXRl XzggKHB0ciwgcHRyX3NpemUpOwogICAgIH0KLSAgYXNzZXJ0IChpbmZvICsgZGVidWdfc2VjdGlv bnNbREVCVUdfSU5GT10ubmV3X3NpemUgPT0gcHRyKTsKKyAgYXNzZXJ0IChpbmZvICsgZGVidWdf c2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLm5ld19zaXplID09IHB0cik7CiB9CiAKIC8qIEFk anVzdCAuZGVidWdfbG9jIHJhbmdlIGRldGVybWluZWQgYnkgKlNMT1QsIGNhbGxlZCB0aHJvdWdo CkBAIC0xMjg4MSw4ICsxMjkzOSw4IEBAIGFkanVzdF9sb2NsaXN0ICh2b2lkICoqc2xvdCwgdm9p ZCAqZGF0YSkKIAogICAodm9pZClkYXRhOwogCi0gIHB0ciA9IGRlYnVnX3NlY3Rpb25zW0RFQlVH X0xPQ10ubmV3X2RhdGEgKyBhZGotPnN0YXJ0X29mZnNldDsKLSAgZW5kc2VjID0gcHRyICsgZGVi dWdfc2VjdGlvbnNbREVCVUdfTE9DXS5zaXplOworICBwdHIgPSBkZWJ1Z19zZWN0aW9uc1tJTkRF WChERUJVR19MT0MpXS5uZXdfZGF0YSArIGFkai0+c3RhcnRfb2Zmc2V0OworICBlbmRzZWMgPSBw dHIgKyBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19MT0MpXS5zaXplOwogICB3aGlsZSAocHRy IDwgZW5kc2VjKQogICAgIHsKICAgICAgIGxvdyA9IHJlYWRfc2l6ZSAocHRyLCBwdHJfc2l6ZSk7 CkBAIC0xMjkxNyw4ICsxMjk3NSw4IEBAIGFkanVzdF9sb2NsaXN0cyAodm9pZCAqKnNsb3QsIHZv aWQgKmRhdGEpCiAKICAgKHZvaWQpZGF0YTsKIAotICBwdHIgPSBkZWJ1Z19zZWN0aW9uc1tERUJV R19MT0NMSVNUU10ubmV3X2RhdGEgKyBhZGotPnN0YXJ0X29mZnNldDsKLSAgZW5kc2VjID0gcHRy ICsgZGVidWdfc2VjdGlvbnNbREVCVUdfTE9DTElTVFNdLnNpemU7CisgIHB0ciA9IGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX0xPQ0xJU1RTKV0ubmV3X2RhdGEgKyBhZGotPnN0YXJ0X29mZnNl dDsKKyAgZW5kc2VjID0gcHRyICsgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTE9DTElTVFMp XS5zaXplOwogCiBhZ2FpbjoKICAgd2hpbGUgKHB0ciA8IGVuZHNlYykKQEAgLTEzMDAyLDExICsx MzA2MCwxMSBAQCB3cml0ZV9sb2MgKHZvaWQpCiAgIHVuc2lnbmVkIGNoYXIgKmxvYzsKICAgaWYg KGxvY19odGFiID09IE5VTEwpCiAgICAgcmV0dXJuOwotICBsb2MgPSBtYWxsb2MgKGRlYnVnX3Nl Y3Rpb25zW0RFQlVHX0xPQ10uc2l6ZSk7CisgIGxvYyA9IG1hbGxvYyAoZGVidWdfc2VjdGlvbnNb SU5ERVgoREVCVUdfTE9DKV0uc2l6ZSk7CiAgIGlmIChsb2MgPT0gTlVMTCkKICAgICBkd3pfb29t ICgpOwotICBtZW1jcHkgKGxvYywgZGVidWdfc2VjdGlvbnNbREVCVUdfTE9DXS5kYXRhLCBkZWJ1 Z19zZWN0aW9uc1tERUJVR19MT0NdLnNpemUpOwotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19MT0Nd Lm5ld19kYXRhID0gbG9jOworICBtZW1jcHkgKGxvYywgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVC VUdfTE9DKV0uZGF0YSwgZGVidWdfc2VjdGlvbnNbREVCVUdfTE9DXS5zaXplKTsKKyAgZGVidWdf c2VjdGlvbnNbSU5ERVgoREVCVUdfTE9DKV0ubmV3X2RhdGEgPSBsb2M7CiAgIGh0YWJfdHJhdmVy c2UgKGxvY19odGFiLCBhZGp1c3RfbG9jbGlzdCwgTlVMTCk7CiB9CiAKQEAgLTEzMDE4LDEyICsx MzA3NiwxMiBAQCB3cml0ZV9sb2NsaXN0cyAodm9pZCkKICAgdW5zaWduZWQgY2hhciAqbG9jOwog ICBpZiAobG9jbGlzdHNfaHRhYiA9PSBOVUxMKQogICAgIHJldHVybjsKLSAgbG9jID0gbWFsbG9j IChkZWJ1Z19zZWN0aW9uc1tERUJVR19MT0NMSVNUU10uc2l6ZSk7CisgIGxvYyA9IG1hbGxvYyAo ZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTE9DTElTVFMpXS5zaXplKTsKICAgaWYgKGxvYyA9 PSBOVUxMKQogICAgIGR3el9vb20gKCk7Ci0gIG1lbWNweSAobG9jLCBkZWJ1Z19zZWN0aW9uc1tE RUJVR19MT0NMSVNUU10uZGF0YSwKLQkgIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0xPQ0xJU1RTXS5z aXplKTsKLSAgZGVidWdfc2VjdGlvbnNbREVCVUdfTE9DTElTVFNdLm5ld19kYXRhID0gbG9jOwor ICBtZW1jcHkgKGxvYywgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTE9DTElTVFMpXS5kYXRh LAorCSAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTE9DTElTVFMpXS5zaXplKTsKKyAgZGVi dWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTE9DTElTVFMpXS5uZXdfZGF0YSA9IGxvYzsKICAgaHRh Yl90cmF2ZXJzZSAobG9jbGlzdHNfaHRhYiwgYWRqdXN0X2xvY2xpc3RzLCBOVUxMKTsKIH0KIApA QCAtMTMwMzUsMTYgKzEzMDkzLDE2IEBAIHdyaXRlX3R5cGVzICh2b2lkKQogICB1bnNpZ25lZCBj aGFyICp0eXBlcywgKnB0ciwgKmlucHRyOwogICBkd19kaWVfcmVmIHJlZjsKIAotICBpZiAoZGVi dWdfc2VjdGlvbnNbREVCVUdfVFlQRVNdLmRhdGEgPT0gTlVMTCkKKyAgaWYgKGRlYnVnX3NlY3Rp b25zW0lOREVYKERFQlVHX1RZUEVTKV0uZGF0YSA9PSBOVUxMKQogICAgIHJldHVybjsKLSAgdHlw ZXMgPSBtYWxsb2MgKGRlYnVnX3NlY3Rpb25zW0RFQlVHX1RZUEVTXS5uZXdfc2l6ZSk7CisgIHR5 cGVzID0gbWFsbG9jIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19UWVBFUyldLm5ld19zaXpl KTsKICAgaWYgKHR5cGVzID09IE5VTEwpCiAgICAgZHd6X29vbSAoKTsKLSAgZGVidWdfc2VjdGlv bnNbREVCVUdfVFlQRVNdLm5ld19kYXRhID0gdHlwZXM7CisgIGRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX1RZUEVTKV0ubmV3X2RhdGEgPSB0eXBlczsKICAgcHRyID0gdHlwZXM7CiAgIGZvciAo Y3UgPSBmaXJzdF9jdTsgY3U7IGN1ID0gY3UtPmN1X25leHQpCiAgICAgewotICAgICAgdW5zaWdu ZWQgbG9uZyBuZXh0X29mZiA9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1RZUEVTXS5uZXdfc2l6ZTsK KyAgICAgIHVuc2lnbmVkIGxvbmcgbmV4dF9vZmYgPSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJV R19UWVBFUyldLm5ld19zaXplOwogICAgICAgLyogSWdub3JlIC5kZWJ1Z19pbmZvIENVcy4gICov CiAgICAgICBpZiAoY3UtPmN1X2tpbmQgIT0gQ1VfVFlQRVMpCiAJY29udGludWU7CkBAIC0xMzA1 OCw3ICsxMzExNiw3IEBAIHdyaXRlX3R5cGVzICh2b2lkKQogICAgICAgd3JpdGVfMTYgKHB0ciwg Y3UtPmN1X3ZlcnNpb24pOwogICAgICAgd3JpdGVfMzIgKHB0ciwgY3UtPnUyLmN1X25ld19hYmJy ZXZfb2Zmc2V0KTsKICAgICAgIHdyaXRlXzggKHB0ciwgcHRyX3NpemUpOwotICAgICAgaW5wdHIg PSBkZWJ1Z19zZWN0aW9uc1tERUJVR19UWVBFU10uZGF0YSArIGN1LT5jdV9vZmZzZXQgKyAxOTsK KyAgICAgIGlucHRyID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfVFlQRVMpXS5kYXRhICsg Y3UtPmN1X29mZnNldCArIDE5OwogICAgICAgbWVtY3B5IChwdHIsIGlucHRyIC0gOCwgOCk7CiAg ICAgICBwdHIgKz0gODsKICAgICAgIHJlZiA9IG9mZl9odGFiX2xvb2t1cCAoY3UsIGN1LT5jdV9v ZmZzZXQgKyByZWFkXzMyIChpbnB0cikpOwpAQCAtMTMwNjksMjggKzEzMTI3LDI4IEBAIHdyaXRl X3R5cGVzICh2b2lkKQogICAgICAgaWYgKHVubGlrZWx5IChsb3dfbWVtKSkKIAljb2xsYXBzZV9j aGlsZHJlbiAoY3UsIGN1LT5jdV9kaWUpOwogICAgIH0KLSAgYXNzZXJ0ICh0eXBlcyArIGRlYnVn X3NlY3Rpb25zW0RFQlVHX1RZUEVTXS5uZXdfc2l6ZSA9PSBwdHIpOworICBhc3NlcnQgKHR5cGVz ICsgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfVFlQRVMpXS5uZXdfc2l6ZSA9PSBwdHIpOwog fQogCiAvKiBDb25zdHJ1Y3QgbmV3IC5kZWJ1Z19hcmFuZ2VzIHNlY3Rpb24gaW4gbWFsbG9jZWQg bWVtb3J5LAotICAgc3RvcmUgaXQgdG8gZGVidWdfc2VjdGlvbnNbREVCVUdfQVJBTkdFU10ubmV3 X2RhdGEuICAqLworICAgc3RvcmUgaXQgdG8gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQVJB TkdFUyldLm5ld19kYXRhLiAgKi8KIHN0YXRpYyBpbnQKIHdyaXRlX2FyYW5nZXMgKERTTyAqZHNv KQogewogICBkd19jdV9yZWYgY3UsIGN1Zmlyc3QgPSBOVUxMLCBjdWN1cjsKICAgdW5zaWduZWQg Y2hhciAqYXJhbmdlcywgKnB0ciwgKmVuZDsKIAotICBpZiAoZGVidWdfc2VjdGlvbnNbREVCVUdf QVJBTkdFU10uZGF0YSA9PSBOVUxMKQorICBpZiAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf QVJBTkdFUyldLmRhdGEgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKIAotICBhcmFuZ2VzID0gbWFs bG9jIChkZWJ1Z19zZWN0aW9uc1tERUJVR19BUkFOR0VTXS5zaXplKTsKKyAgYXJhbmdlcyA9IG1h bGxvYyAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQVJBTkdFUyldLnNpemUpOwogICBpZiAo YXJhbmdlcyA9PSBOVUxMKQogICAgIGR3el9vb20gKCk7Ci0gIG1lbWNweSAoYXJhbmdlcywgZGVi dWdfc2VjdGlvbnNbREVCVUdfQVJBTkdFU10uZGF0YSwKLQkgIGRlYnVnX3NlY3Rpb25zW0RFQlVH X0FSQU5HRVNdLnNpemUpOwotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19BUkFOR0VTXS5uZXdfZGF0 YSA9IGFyYW5nZXM7CisgIG1lbWNweSAoYXJhbmdlcywgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVC VUdfQVJBTkdFUyldLmRhdGEsCisJICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19BUkFOR0VT KV0uc2l6ZSk7CisgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0FSQU5HRVMpXS5uZXdfZGF0 YSA9IGFyYW5nZXM7CiAgIHB0ciA9IGFyYW5nZXM7Ci0gIGVuZCA9IGFyYW5nZXMgKyBkZWJ1Z19z ZWN0aW9uc1tERUJVR19BUkFOR0VTXS5zaXplOworICBlbmQgPSBhcmFuZ2VzICsgZGVidWdfc2Vj dGlvbnNbSU5ERVgoREVCVUdfQVJBTkdFUyldLnNpemU7CiAgIGZvciAoY3UgPSBmaXJzdF9jdTsg Y3U7IGN1ID0gY3UtPmN1X25leHQpCiAgICAgaWYgKGN1LT5jdV9raW5kICE9IENVX1BVKQogICAg ICAgYnJlYWs7CkBAIC0xMzE5NiwxMiArMTMyNTQsMTIgQEAgd3JpdGVfZ2RiX2luZGV4ICh2b2lk KQogICB1bnNpZ25lZCBpbnQgKnR1aW5kaWNlcyA9IE5VTEwsIHR1aWR4ID0gMCwgKmN1bWFwID0g TlVMTCwgaSwgaiwgazsKICAgYm9vbCBmYWlsID0gZmFsc2U7CiAKLSAgZGVidWdfc2VjdGlvbnNb R0RCX0lOREVYXS5uZXdfc2l6ZSA9IDA7CisgIGRlYnVnX3NlY3Rpb25zW0lOREVYKEdEQl9JTkRF WCldLm5ld19zaXplID0gMDsKICAgaWYgKGxpa2VseSAoIW9wX211bHRpZmlsZSkKLSAgICAgICYm IChkZWJ1Z19zZWN0aW9uc1tHREJfSU5ERVhdLmRhdGEgPT0gTlVMTAotCSAgfHwgZGVidWdfc2Vj dGlvbnNbR0RCX0lOREVYXS5zaXplIDwgMHgxOCkpCisgICAgICAmJiAoZGVidWdfc2VjdGlvbnNb SU5ERVgoR0RCX0lOREVYKV0uZGF0YSA9PSBOVUxMCisJICB8fCBkZWJ1Z19zZWN0aW9uc1tJTkRF WChHREJfSU5ERVgpXS5zaXplIDwgMHgxOCkpCiAgICAgcmV0dXJuOwotICBpbnB0ciA9ICh1bnNp Z25lZCBjaGFyICopIGRlYnVnX3NlY3Rpb25zW0dEQl9JTkRFWF0uZGF0YTsKKyAgaW5wdHIgPSAo dW5zaWduZWQgY2hhciAqKSBkZWJ1Z19zZWN0aW9uc1tJTkRFWChHREJfSU5ERVgpXS5kYXRhOwog ICBpZiAodW5saWtlbHkgKG9wX211bHRpZmlsZSkpCiAgICAgdmVyID0gbXVsdGlfZ2RiX2luZGV4 X3ZlcjsKICAgZWxzZQpAQCAtMTMyMjksMTIgKzEzMjg3LDEyIEBAIHdyaXRlX2dkYl9pbmRleCAo dm9pZCkKICAgaWYgKHVubGlrZWx5IChvcF9tdWx0aWZpbGUpKQogICAgIHsKICAgICAgIGFzc2Vy dCAobmN1cyA9PSAwICYmIG50dXMgPT0gMCk7Ci0gICAgICBkZWJ1Z19zZWN0aW9uc1tHREJfSU5E RVhdLm5ld19zaXplCisgICAgICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChHREJfSU5ERVgpXS5uZXdf c2l6ZQogCT0gMHgxOCArIG5wdXMgKiAxNiArIDE2OwotICAgICAgZ2RiX2luZGV4ID0gbWFsbG9j IChkZWJ1Z19zZWN0aW9uc1tHREJfSU5ERVhdLm5ld19zaXplKTsKKyAgICAgIGdkYl9pbmRleCA9 IG1hbGxvYyAoZGVidWdfc2VjdGlvbnNbSU5ERVgoR0RCX0lOREVYKV0ubmV3X3NpemUpOwogICAg ICAgaWYgKGdkYl9pbmRleCA9PSBOVUxMKQogCWR3el9vb20gKCk7Ci0gICAgICBkZWJ1Z19zZWN0 aW9uc1tHREJfSU5ERVhdLm5ld19kYXRhID0gZ2RiX2luZGV4OworICAgICAgZGVidWdfc2VjdGlv bnNbSU5ERVgoR0RCX0lOREVYKV0ubmV3X2RhdGEgPSBnZGJfaW5kZXg7CiAgICAgICAvKiBXcml0 ZSBuZXcgaGVhZGVyLiAgKi8KICAgICAgIGJ1Zl93cml0ZV9sZTMyIChnZGJfaW5kZXggKyAweDAw LCB2ZXIpOwogICAgICAgYnVmX3dyaXRlX2xlMzIgKGdkYl9pbmRleCArIDB4MDQsIDB4MTgpOwpA QCAtMTMyNDYsNyArMTMzMDQsNyBAQCB3cml0ZV9nZGJfaW5kZXggKHZvaWQpCiAgICAgICAvKiBX cml0ZSBuZXcgQ1UgbGlzdC4gICovCiAgICAgICBmb3IgKGN1ID0gZmlyc3RfY3U7IGN1OyBjdSA9 IGN1LT5jdV9uZXh0KQogCXsKLQkgIHVuc2lnbmVkIGxvbmcgbmV4dF9vZmYgPSBkZWJ1Z19zZWN0 aW9uc1tERUJVR19JTkZPXS5uZXdfc2l6ZTsKKwkgIHVuc2lnbmVkIGxvbmcgbmV4dF9vZmYgPSBk ZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0ubmV3X3NpemU7CiAJICBpZiAoY3UtPmN1 X25leHQpCiAJICAgIG5leHRfb2ZmID0gY3UtPmN1X25leHQtPmN1X25ld19vZmZzZXQ7CiAJICBi dWZfd3JpdGVfbGU2NCAocHRyLCBjdS0+Y3VfbmV3X29mZnNldCk7CkBAIC0xMzI3MSw3ICsxMzMy OSw3IEBAIHdyaXRlX2dkYl9pbmRleCAodm9pZCkKICAgICAgIHx8IGNvbnN0b2ZmIDwgc3ltYm9s b2ZmCiAgICAgICB8fCAoKGNvbnN0b2ZmIC0gc3ltYm9sb2ZmKSAmIChjb25zdG9mZiAtIHN5bWJv bG9mZiAtIDEpKSAhPSAwCiAgICAgICB8fCAoKGNvbnN0b2ZmIC0gc3ltYm9sb2ZmKSAmIDcpICE9 IDAKLSAgICAgIHx8IGRlYnVnX3NlY3Rpb25zW0dEQl9JTkRFWF0uc2l6ZSA8IGNvbnN0b2ZmKQor ICAgICAgfHwgZGVidWdfc2VjdGlvbnNbSU5ERVgoR0RCX0lOREVYKV0uc2l6ZSA8IGNvbnN0b2Zm KQogICAgIHJldHVybjsKICAgaW5wdHIgKz0gMHgxODsKICAgaWYgKG5kZWxjdXMpCkBAIC0xMzMy OCwxMiArMTMzODYsMTIgQEAgd3JpdGVfZ2RiX2luZGV4ICh2b2lkKQogICAgICAgJiYgbXVsdGlf Z2RiX2luZGV4X3ZlciA8IHZlcikKICAgICBtdWx0aV9nZGJfaW5kZXhfdmVyID0gdmVyOwogCi0g IGRlYnVnX3NlY3Rpb25zW0dEQl9JTkRFWF0ubmV3X3NpemUKLSAgICA9IGRlYnVnX3NlY3Rpb25z W0dEQl9JTkRFWF0uc2l6ZSArIG5wdXMgKiAxNiAtIG5kZWxjdXMgKiAxNjsKLSAgZ2RiX2luZGV4 ID0gbWFsbG9jIChkZWJ1Z19zZWN0aW9uc1tHREJfSU5ERVhdLm5ld19zaXplKTsKKyAgZGVidWdf c2VjdGlvbnNbSU5ERVgoR0RCX0lOREVYKV0ubmV3X3NpemUKKyAgICA9IGRlYnVnX3NlY3Rpb25z W0lOREVYKEdEQl9JTkRFWCldLnNpemUgKyBucHVzICogMTYgLSBuZGVsY3VzICogMTY7CisgIGdk Yl9pbmRleCA9IG1hbGxvYyAoZGVidWdfc2VjdGlvbnNbSU5ERVgoR0RCX0lOREVYKV0ubmV3X3Np emUpOwogICBpZiAoZ2RiX2luZGV4ID09IE5VTEwpCiAgICAgZHd6X29vbSAoKTsKLSAgZGVidWdf c2VjdGlvbnNbR0RCX0lOREVYXS5uZXdfZGF0YSA9IGdkYl9pbmRleDsKKyAgZGVidWdfc2VjdGlv bnNbSU5ERVgoR0RCX0lOREVYKV0ubmV3X2RhdGEgPSBnZGJfaW5kZXg7CiAgIC8qIFdyaXRlIG5l dyBoZWFkZXIuICAqLwogICBidWZfd3JpdGVfbGUzMiAoZ2RiX2luZGV4ICsgMHgwMCwgdmVyKTsK ICAgYnVmX3dyaXRlX2xlMzIgKGdkYl9pbmRleCArIDB4MDQsIGN1bGlzdG9mZik7CkBAIC0xMzM0 NSw3ICsxMzQwMyw3IEBAIHdyaXRlX2dkYl9pbmRleCAodm9pZCkKICAgLyogV3JpdGUgbmV3IENV IGxpc3QuICAqLwogICBmb3IgKGN1ID0gZmlyc3RfY3U7IGN1OyBjdSA9IGN1X25leHQpCiAgICAg ewotICAgICAgdW5zaWduZWQgbG9uZyBuZXh0X29mZiA9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lO Rk9dLm5ld19zaXplOworICAgICAgdW5zaWduZWQgbG9uZyBuZXh0X29mZiA9IGRlYnVnX3NlY3Rp b25zW0lOREVYKERFQlVHX0lORk8pXS5uZXdfc2l6ZTsKICAgICAgIGlmIChjdS0+Y3Vfa2luZCA9 PSBDVV9UWVBFUykKIAlicmVhazsKICAgICAgIGN1X25leHQgPSBjdS0+Y3VfbmV4dDsKQEAgLTEz MzcyLDcgKzEzNDMwLDcgQEAgd3JpdGVfZ2RiX2luZGV4ICh2b2lkKQogICAgICAgZHdfZGllX3Jl ZiByZWY7CiAgICAgICBhc3NlcnQgKGN1LT5jdV9raW5kID09IENVX1RZUEVTKTsKICAgICAgIGJ1 Zl93cml0ZV9sZTY0IChwdHIgKyB0dW9mZiwgY3UtPmN1X25ld19vZmZzZXQpOwotICAgICAgcCA9 IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1RZUEVTXS5kYXRhICsgY3UtPmN1X29mZnNldCArIDE5Owor ICAgICAgcCA9IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1RZUEVTKV0uZGF0YSArIGN1LT5j dV9vZmZzZXQgKyAxOTsKICAgICAgIHJlZiA9IG9mZl9odGFiX2xvb2t1cCAoY3UsIGN1LT5jdV9v ZmZzZXQgKyByZWFkXzMyIChwKSk7CiAgICAgICBhc3NlcnQgKHJlZiAmJiByZWYtPmRpZV9kdXAg PT0gTlVMTCk7CiAgICAgICBidWZfd3JpdGVfbGU2NCAocHRyICsgdHVvZmYgKyA4LCByZWYtPnUu cDIuZGllX25ld19vZmZzZXQpOwpAQCAtMTM0MDIsNyArMTM0NjAsNyBAQCB3cml0ZV9nZGJfaW5k ZXggKHZvaWQpCiAgIG1lbWNweSAocHRyLCBpbnB0ciwgY29uc3RvZmYgLSBzeW1ib2xvZmYpOwog ICAvKiBDbGVhciB0aGUgY29uc3QgcG9vbCBpbml0aWFsbHkuICAqLwogICBtZW1zZXQgKHB0ciAr IChjb25zdG9mZiAtIHN5bWJvbG9mZiksICdcMCcsCi0JICBkZWJ1Z19zZWN0aW9uc1tHREJfSU5E RVhdLnNpemUgLSBjb25zdG9mZik7CisJICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChHREJfSU5ERVgp XS5zaXplIC0gY29uc3RvZmYpOwogICBwdHIgPSBwdHIgKyAoY29uc3RvZmYgLSBzeW1ib2xvZmYp OwogICBlbmQgPSBpbnB0ciArIChjb25zdG9mZiAtIHN5bWJvbG9mZik7CiAgIC8qIEZpbmFsbHkg Y29weSBvdmVyIGNvbnN0IG9iamVjdHMgaW50byB0aGUgY29uc3QgcG9vbCwgc3RyaW5ncyBhcyBp cywKQEAgLTEzNDE1LDEyICsxMzQ3MywxMiBAQCB3cml0ZV9nZGJfaW5kZXggKHZvaWQpCiAgICAg ICBpbnB0ciArPSA4OwogICAgICAgaWYgKG5hbWUgPT0gMCAmJiBjdXZlYyA9PSAwKQogCWNvbnRp bnVlOwotICAgICAgaWYgKG5hbWUgPiBkZWJ1Z19zZWN0aW9uc1tHREJfSU5ERVhdLnNpemUgLSBj b25zdG9mZiAtIDEKLQkgIHx8IGN1dmVjID4gZGVidWdfc2VjdGlvbnNbR0RCX0lOREVYXS5zaXpl IC0gY29uc3RvZmYgLSA0KQorICAgICAgaWYgKG5hbWUgPiBkZWJ1Z19zZWN0aW9uc1tJTkRFWChH REJfSU5ERVgpXS5zaXplIC0gY29uc3RvZmYgLSAxCisJICB8fCBjdXZlYyA+IGRlYnVnX3NlY3Rp b25zW0lOREVYKEdEQl9JTkRFWCldLnNpemUgLSBjb25zdG9mZiAtIDQpCiAJewogCWZhaWw6CiAJ ICBmcmVlIChnZGJfaW5kZXgpOwotCSAgZGVidWdfc2VjdGlvbnNbR0RCX0lOREVYXS5uZXdfc2l6 ZSA9IDA7CisJICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChHREJfSU5ERVgpXS5uZXdfc2l6ZSA9IDA7 CiAJICByZXR1cm47CiAJfQogICAgICAgaWYgKHB0cltuYW1lXSA9PSAnXDAnKQpAQCAtMTM0Mjks NyArMTM0ODcsNyBAQCB3cml0ZV9nZGJfaW5kZXggKHZvaWQpCiAJICB3aGlsZSAoKnN0cmVuZCAh PSAnXDAnKQogCSAgICB7CiAJICAgICAgaWYgKHN0cmVuZCArIDEKLQkJICA9PSBlbmQgKyAoZGVi dWdfc2VjdGlvbnNbR0RCX0lOREVYXS5zaXplIC0gY29uc3RvZmYpKQorCQkgID09IGVuZCArIChk ZWJ1Z19zZWN0aW9uc1tJTkRFWChHREJfSU5ERVgpXS5zaXplIC0gY29uc3RvZmYpKQogCQlnb3Rv IGZhaWw7CiAJICAgICAgc3RyZW5kKys7CiAJICAgIH0KQEAgLTEzNDM5LDcgKzEzNDk3LDcgQEAg d3JpdGVfZ2RiX2luZGV4ICh2b2lkKQogCXsKIAkgIHVuc2lnbmVkIGludCBjb3VudCA9IGJ1Zl9y ZWFkX3VsZTMyIChlbmQgKyBjdXZlYyk7CiAJICBpZiAoY291bnQgKiA0Ci0JICAgICAgPiBkZWJ1 Z19zZWN0aW9uc1tHREJfSU5ERVhdLnNpemUgLSBjb25zdG9mZiAtIGN1dmVjIC0gNCkKKwkgICAg ICA+IGRlYnVnX3NlY3Rpb25zW0lOREVYKEdEQl9JTkRFWCldLnNpemUgLSBjb25zdG9mZiAtIGN1 dmVjIC0gNCkKIAkgICAgZ290byBmYWlsOwogCSAgYnVmX3dyaXRlX2xlMzIgKHB0ciArIGN1dmVj LCBjb3VudCk7CiAJICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKQEAgLTEzNDcxLDkgKzEz NTI5LDkgQEAgd3JpdGVfZ2RiX2luZGV4ICh2b2lkKQogICAgIG9ic3RhY2tfZnJlZSAoJm9iMiwg KHZvaWQgKikgdHVpbmRpY2VzKTsKICAgaWYgKGZhaWwpCiAgICAgewotICAgICAgZnJlZSAoZGVi dWdfc2VjdGlvbnNbR0RCX0lOREVYXS5uZXdfZGF0YSk7Ci0gICAgICBkZWJ1Z19zZWN0aW9uc1tH REJfSU5ERVhdLm5ld19kYXRhID0gTlVMTDsKLSAgICAgIGRlYnVnX3NlY3Rpb25zW0dEQl9JTkRF WF0ubmV3X3NpemUgPSAwOworICAgICAgZnJlZSAoZGVidWdfc2VjdGlvbnNbSU5ERVgoR0RCX0lO REVYKV0ubmV3X2RhdGEpOworICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoR0RCX0lOREVYKV0u bmV3X2RhdGEgPSBOVUxMOworICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoR0RCX0lOREVYKV0u bmV3X3NpemUgPSAwOwogICAgIH0KIH0KIApAQCAtMTM2MDEsNyArMTM2NTksNyBAQCByZWFkX2R3 YXJmIChEU08gKmRzbywgYm9vbCBxdWlldGVyLCB1bnNpZ25lZCBpbnQgKmRpZV9jb3VudCkKICAg ICAgIHJldHVybiAxOwogICAgIH0KIAotICBpZiAoZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10u ZGF0YSA9PSBOVUxMCisgIGlmIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0uZGF0 YSA9PSBOVUxMCiAgICAgICAmJiAhcmRfbXVsdGlmaWxlKQogICAgIHsKICAgICAgIGlmICghcXVp ZXRlcikKQEAgLTEzNjEwLDE0ICsxMzY2OCwxNCBAQCByZWFkX2R3YXJmIChEU08gKmRzbywgYm9v bCBxdWlldGVyLCB1bnNpZ25lZCBpbnQgKmRpZV9jb3VudCkKICAgICAgIHJldHVybiAzOwogICAg IH0KIAotICBpZiAoZGVidWdfc2VjdGlvbnNbREVCVUdfU1VQXS5kYXRhICE9IE5VTEwgJiYgIShk d2FyZl81ICYmIHJkX211bHRpZmlsZSkpCisgIGlmIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJV R19TVVApXS5kYXRhICE9IE5VTEwgJiYgIShkd2FyZl81ICYmIHJkX211bHRpZmlsZSkpCiAgICAg ewogICAgICAgZXJyb3IgKDAsIDAsICIlczogLmRlYnVnX3N1cCBzZWN0aW9uIGFscmVhZHkgcHJl c2VudCIsCiAJICAgICBkc28tPmZpbGVuYW1lKTsKICAgICAgIHJldHVybiAxOwogICAgIH0KIAot ICBpZiAoZGVidWdfc2VjdGlvbnNbR05VX0RFQlVHQUxUTElOS10uZGF0YSAhPSBOVUxMKQorICBp ZiAoZGVidWdfc2VjdGlvbnNbSU5ERVgoR05VX0RFQlVHQUxUTElOSyldLmRhdGEgIT0gTlVMTCkK ICAgICB7CiAgICAgICBlcnJvciAoMCwgMCwgIiVzOiAuZ251X2RlYnVnYWx0bGluayBzZWN0aW9u IGFscmVhZHkgcHJlc2VudCIsCiAJICAgICBkc28tPmZpbGVuYW1lKTsKQEAgLTEzNjI1LDcgKzEz NjgzLDcgQEAgcmVhZF9kd2FyZiAoRFNPICpkc28sIGJvb2wgcXVpZXRlciwgdW5zaWduZWQgaW50 ICpkaWVfY291bnQpCiAgICAgfQogCiAgIGludCByZXM7Ci0gIHJlcyA9IHJlYWRfZGVidWdfaW5m byAoZHNvLCBERUJVR19JTkZPLCBkaWVfY291bnQpOworICByZXMgPSByZWFkX2RlYnVnX2luZm8g KGRzbywgSU5ERVgoREVCVUdfSU5GTyksIGRpZV9jb3VudCk7CiAgIGlmIChyZXMgPT0gMCAmJiBz dGF0c19wKQogICAgIHByaW50X3BhcnNlX3N0YXRzICgpOwogICByZXR1cm4gcmVzOwpAQCAtMTM2 NjEsNyArMTM3MTksNyBAQCBmZG9wZW5fZHNvIChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpCiAg ICAgfQogCiAgIGlmIChlaGRyLmVfdHlwZSAhPSBFVF9EWU4gJiYgZWhkci5lX3R5cGUgIT0gRVRf RVhFQwotICAgICAgJiYgKCFyZF9tdWx0aWZpbGUgfHwgZWhkci5lX3R5cGUgIT0gRVRfUkVMKSkK KyAgICAgICYmICFpc19kd29fZmlsZSAmJiAoIXJkX211bHRpZmlsZSB8fCBlaGRyLmVfdHlwZSAh PSBFVF9SRUwpKQogICAgIHsKICAgICAgIGVycm9yICgwLCAwLCAiXCIlc1wiIGlzIG5vdCBhIHNo YXJlZCBsaWJyYXJ5IiwgbmFtZSk7CiAgICAgICBnb3RvIGVycm9yX291dDsKQEAgLTE0MTY2LDcg KzE0MjI0LDcgQEAgd3JpdGVfZHNvIChEU08gKmRzbywgY29uc3QgY2hhciAqZmlsZSwgc3RydWN0 IHN0YXQgKnN0LCBib29sIHNhdmVfdG9fdGVtcCkKIAkgYWxyZWFkeSBoYXMgdGhlIGNvcnJlY3Qg RUxGIGNsYXNzLiAgKi8KICAgICAgIHx8IG1lbWNweSAoZV9pZGVudCwgZHNvLT5laGRyLmVfaWRl bnQsIEVJX05JREVOVCkgPT0gTlVMTAogICAgICAgfHwgZ2VsZl91cGRhdGVfZWhkciAoZWxmLCAm ZWhkcikgPT0gMAotICAgICAgfHwgZ2VsZl9uZXdwaGRyIChlbGYsIGVoZHIuZV9waG51bSkgPT0g MCkKKyAgICAgIHx8ICgoZWhkci5lX3BobnVtID4gMCkgJiYgKGdlbGZfbmV3cGhkciAoZWxmLCBl aGRyLmVfcGhudW0pID09IDApKSkKICAgICB7CiAgICAgICBlcnJvciAoMCwgMCwgIkNvdWxkIG5v dCBjcmVhdGUgbmV3IEVMRiBoZWFkZXJzIik7CiAgICAgICB1bmxpbmsgKGZpbGUpOwpAQCAtMTQ0 MjksNyArMTQ0ODcsNyBAQCBwcm9wYWdhdGVfbXVsdGlmaWxlX3JlZnNfYmFja3dhcmQgKGR3X2N1 X3JlZiBjdSwgZHdfZGllX3JlZiB0b3BfZGllLAogICBpZiAoZGllLT5kaWVfb2Zmc2V0ID09IC0x VSkKICAgICByZXR1cm47CiAKLSAgcHRyID0gZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10uZGF0 YSArIGRpZS0+ZGllX29mZnNldDsKKyAgcHRyID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf SU5GTyldLmRhdGEgKyBkaWUtPmRpZV9vZmZzZXQ7CiAgIHNraXBfbGViMTI4IChwdHIpOwogICBm b3IgKGkgPSAwOyBpIDwgdC0+bmF0dHI7ICsraSkKICAgICB7CkBAIC0xNDU5MSwxNCArMTQ2NDks MTQgQEAgd3JpdGVfbXVsdGlmaWxlX3N0cnAgKHZvaWQpCiAgIGh0YWJfdHJhdmVyc2UgKHN0cnBf aHRhYiwgbGlzdF9zdHJwX2VudHJpZXMsICh2b2lkICopICZlbmQpOwogICBhc3NlcnQgKGFyciAr IGNvdW50ID09IGVuZCk7CiAgIHFzb3J0IChhcnIsIGNvdW50LCBzaXplb2YgKHN0cnVjdCBzdHJw X2VudHJ5ICopLCBzdHJwX29mZl9jbXApOwotICBidWZfYWxsb2MgPSBtYXhfc3RycF9vZmYgLSBk ZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLnNpemU7CisgIGJ1Zl9hbGxvYyA9IG1heF9zdHJwX29m ZiAtIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLnNpemU7CiAgIGlmIChidWZfYWxs b2MgPiAxMzEwNzIpCiAgICAgYnVmX2FsbG9jID0gMTMxMDcyOwogICBidWYgPSAodW5zaWduZWQg Y2hhciAqKSBvYnN0YWNrX2FsbG9jICgmb2IsIGJ1Zl9hbGxvYyk7CiAgIGJ1Zl9zaXplID0gMDsK ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewotICAgICAgdW5zaWduZWQgY2hh ciAqcCA9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YSArIGFycltpXS0+b2ZmOworICAg ICAgdW5zaWduZWQgY2hhciAqcCA9IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRh dGEgKyBhcnJbaV0tPm9mZjsKICAgICAgIHVuc2lnbmVkIGludCBsZW4gPSBzdHJsZW4gKChjaGFy ICopIHApICsgMTsKICAgICAgIGlmIChidWZfYWxsb2MgLSBidWZfc2l6ZSA8IGxlbikKIAl7CkBA IC0xNDY3NSw3ICsxNDczMyw3IEBAIGxpbmVfaWRfY21wIChjb25zdCB2b2lkICpwLCBjb25zdCB2 b2lkICpxKQogICAgaW50byB0aGUgdGVtcG9yYXJ5IC5kZWJ1Z19saW5lIGZpbGUgKGlmIGxpbmVf aHRhYiBpcyBub24tTlVMTCwgZmlsbAogICAgaXRzIGRpcmVjdG9yeSBhbmQgZmlsZSB0YWJsZSBm cm9tIGl0LCBvdGhlcndpc2UgZW1pdCBhbiBlbnRyeQogICAgd2l0aCBubyBkaXJlY3RvcmllcyBv ciBmaWxlcyksIGlmIG9wX211bHRpZmlsZSwgc3RvcmUgdGhlIGVudHJ5Ci0gICBpbnRvIGRlYnVn X3NlY3Rpb25zW0RFQlVHX0xJTkVdLm5ld19kYXRhIHdoaWNoIGl0IGFsbG9jYXRlcy4gICovCisg ICBpbnRvIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0xJTkUpXS5uZXdfZGF0YSB3aGljaCBp dCBhbGxvY2F0ZXMuICAqLwogc3RhdGljIGludAogd3JpdGVfbXVsdGlmaWxlX2xpbmUgKHZvaWQp CiB7CkBAIC0xNDc5NSwxMSArMTQ4NTMsMTEgQEAgd3JpdGVfbXVsdGlmaWxlX2xpbmUgKHZvaWQp CiAgIGxlbiA9IGhlYWRlcl9sZW4gKyBmaWxldGJsbGVuICsgZGlydGJsbGVuOwogICBpZiAodW5s aWtlbHkgKG9wX211bHRpZmlsZSkpCiAgICAgewotICAgICAgZGVidWdfc2VjdGlvbnNbREVCVUdf TElORV0ubmV3X3NpemUgPSBsZW47Ci0gICAgICBkZWJ1Z19zZWN0aW9uc1tERUJVR19MSU5FXS5u ZXdfZGF0YSA9IG1hbGxvYyAobGVuKTsKLSAgICAgIGlmIChkZWJ1Z19zZWN0aW9uc1tERUJVR19M SU5FXS5uZXdfZGF0YSA9PSBOVUxMKQorICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf TElORSldLm5ld19zaXplID0gbGVuOworICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf TElORSldLm5ld19kYXRhID0gbWFsbG9jIChsZW4pOworICAgICAgaWYgKGRlYnVnX3NlY3Rpb25z W0lOREVYKERFQlVHX0xJTkUpXS5uZXdfZGF0YSA9PSBOVUxMKQogCWR3el9vb20gKCk7Ci0gICAg ICBsaW5lID0gZGVidWdfc2VjdGlvbnNbREVCVUdfTElORV0ubmV3X2RhdGE7CisgICAgICBsaW5l ID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTElORSldLm5ld19kYXRhOwogICAgIH0KICAg ZWxzZQogICAgIHsKQEAgLTE1MDc2LDIwICsxNTEzNCwyMCBAQCB3cml0ZV9tdWx0aWZpbGVfMSAo RFNPICpkc28sIHN0cnVjdCBmaWxlX3Jlc3VsdCAqcmVzKQogCWZwcmludGYgKHN0ZGVyciwgIldy aXRlLW11bHRpZmlsZSAlc1xuIiwgZHNvLT5maWxlbmFtZSk7CiAgICAgICBpZiAoY29tcHV0ZV9h YmJyZXZzIChOVUxMKSkKIAlyZXQgPSAxOwotICAgICAgZWxzZSBpZiAoZGVidWdfc2VjdGlvbnNb REVCVUdfTUFDUk9dLmRhdGEgJiYgcmVhZF9tYWNybyAoZHNvKSkKKyAgICAgIGVsc2UgaWYgKGRl YnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0uZGF0YSAmJiByZWFkX21hY3JvIChkc28p KQogCXJldCA9IDE7CiAgICAgICBlbHNlIGlmICgodW5zaWduZWQgaW50KSAobXVsdGlfaW5mb19v ZmYKLQkJCSAgICAgICArIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lORk9dLm5ld19zaXplKQorCQkJ ICAgICAgICsgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLm5ld19zaXplKQogCSAg ICAgICA8IG11bHRpX2luZm9fb2ZmCiAJICAgICAgIHx8ICh1bnNpZ25lZCBpbnQpIChtdWx0aV9h YmJyZXZfb2ZmCi0JCQkJICArIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0ubmV3X3NpemUp CisJCQkJICArIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0FCQlJFVildLm5ld19zaXplKQog CQkgIDwgbXVsdGlfYWJicmV2X29mZgogCSAgICAgICB8fCAodW5zaWduZWQgaW50KSAobXVsdGlf c3RyX29mZgogCQkJCSAgKyAobWF4X3N0cnBfb2ZmID8gbWF4X3N0cnBfb2ZmCi0JCQkJICAgICA6 IGRlYnVnX3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0uc2l6ZSkpCisJCQkJICAgICA6IGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX0FCQlJFVildLnNpemUpKQogCQkgIDwgbXVsdGlfc3RyX29mZgog CSAgICAgICB8fCAodW5zaWduZWQgaW50KSAobXVsdGlfbWFjcm9fb2ZmCi0JCQkJICArIGRlYnVn X3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfc2l6ZSkKKwkJCQkgICsgZGVidWdfc2VjdGlvbnNb SU5ERVgoREVCVUdfTUFDUk8pXS5uZXdfc2l6ZSkKIAkJICA8IG11bHRpX21hY3JvX29mZikKIAl7 CiAJICBlcnJvciAoMCwgMCwgIk11bHRpZmlsZSB0ZW1wb3JhcnkgZmlsZXMgdG9vIGxhcmdlIik7 CkBAIC0xNTEwNSwyMCArMTUxNjMsMjAgQEAgd3JpdGVfbXVsdGlmaWxlXzEgKERTTyAqZHNvLCBz dHJ1Y3QgZmlsZV9yZXN1bHQgKnJlcykKIAkgICAgIGZpbGVzLiAgKi8KIAkgIG1maWxlID0gbXVs dGlmaWxlOwogCSAgbXVsdGlmaWxlID0gTlVMTDsKLQkgIGlmICh3cml0ZSAobXVsdGlfYWJicmV2 X2ZkLCBkZWJ1Z19zZWN0aW9uc1tERUJVR19BQkJSRVZdLm5ld19kYXRhLAotCQkgICAgIGRlYnVn X3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0ubmV3X3NpemUpCi0JICAgICAgIT0gKHNzaXplX3QpIGRl YnVnX3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0ubmV3X3NpemUKLQkgICAgICB8fCB3cml0ZSAobXVs dGlfaW5mb19mZCwgZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10ubmV3X2RhdGEsCi0JCQlkZWJ1 Z19zZWN0aW9uc1tERUJVR19JTkZPXS5uZXdfc2l6ZSkKLQkJICE9IChzc2l6ZV90KSBkZWJ1Z19z ZWN0aW9uc1tERUJVR19JTkZPXS5uZXdfc2l6ZQotCSAgICAgIHx8IHdyaXRlIChtdWx0aV9zdHJf ZmQsIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YSwKLQkJCWRlYnVnX3NlY3Rpb25zW0RF QlVHX1NUUl0uc2l6ZSkKLQkJICE9IChzc2l6ZV90KSBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJd LnNpemUKLQkgICAgICB8fCAoZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLm5ld19kYXRhCisJ ICBpZiAod3JpdGUgKG11bHRpX2FiYnJldl9mZCwgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf QUJCUkVWKV0ubmV3X2RhdGEsCisJCSAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJC UkVWKV0ubmV3X3NpemUpCisJICAgICAgIT0gKHNzaXplX3QpIGRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX0FCQlJFVildLm5ld19zaXplCisJICAgICAgfHwgd3JpdGUgKG11bHRpX2luZm9fZmQs IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5uZXdfZGF0YSwKKwkJCWRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5uZXdfc2l6ZSkKKwkJICE9IChzc2l6ZV90KSBkZWJ1 Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0ubmV3X3NpemUKKwkgICAgICB8fCB3cml0ZSAo bXVsdGlfc3RyX2ZkLCBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5kYXRhLAorCQkJ ZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uc2l6ZSkKKwkJICE9IChzc2l6ZV90KSBk ZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5zaXplCisJICAgICAgfHwgKGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X2RhdGEKIAkJICAmJiB3cml0ZSAobXVsdGlf bWFjcm9fZmQsCi0JCQkgICAgZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLm5ld19kYXRhLAot CQkJICAgIGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfc2l6ZSkKLQkJICAgICAhPSAo c3NpemVfdCkgZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLm5ld19zaXplKQorCQkJICAgIGRl YnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0ubmV3X2RhdGEsCisJCQkgICAgZGVidWdf c2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5uZXdfc2l6ZSkKKwkJICAgICAhPSAoc3NpemVf dCkgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5uZXdfc2l6ZSkKIAkgICAgICB8 fCAoc3RycF9odGFiICE9IE5VTEwgJiYgd3JpdGVfbXVsdGlmaWxlX3N0cnAgKCkpCiAJICAgICAg fHwgd3JpdGVfbXVsdGlmaWxlX2xpbmUgKCkpCiAJICAgIHsKQEAgLTE1MTI3LDExICsxNTE4NSwx MSBAQCB3cml0ZV9tdWx0aWZpbGVfMSAoRFNPICpkc28sIHN0cnVjdCBmaWxlX3Jlc3VsdCAqcmVz KQogCSAgICB9CiAJICBlbHNlCiAJICAgIHsKLQkgICAgICBtdWx0aV9pbmZvX29mZiArPSBkZWJ1 Z19zZWN0aW9uc1tERUJVR19JTkZPXS5uZXdfc2l6ZTsKLQkgICAgICBtdWx0aV9hYmJyZXZfb2Zm ICs9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0ubmV3X3NpemU7CisJICAgICAgbXVsdGlf aW5mb19vZmYgKz0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLm5ld19zaXplOwor CSAgICAgIG11bHRpX2FiYnJldl9vZmYgKz0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJC UkVWKV0ubmV3X3NpemU7CiAJICAgICAgbXVsdGlfc3RyX29mZiArPSBtYXhfc3RycF9vZmYgPyBt YXhfc3RycF9vZmYKLQkJCSAgICAgICA6IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uc2l6ZTsK LQkgICAgICBtdWx0aV9tYWNyb19vZmYgKz0gZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLm5l d19zaXplOworCQkJICAgICAgIDogZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uc2l6 ZTsKKwkgICAgICBtdWx0aV9tYWNyb19vZmYgKz0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf TUFDUk8pXS5uZXdfc2l6ZTsKIAkgICAgICBtdWx0aWZpbGUgPSBtZmlsZTsKIAkgICAgfQogCX0K QEAgLTE1MjkyLDYgKzE1MzUwLDcgQEAgZHd6IChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFy ICpvdXRmaWxlLCBzdHJ1Y3QgZmlsZV9yZXN1bHQgKnJlcykKICAgdW5zaWduZWQgaW50IGk7CiAg IHN0cnVjdCBzdGF0IHN0OwogCisgIGR3b2ZpbGUgPSBOVUxMOwogICBpZiAocmVzLT5yZXMgPT0g LTEpCiAgICAgcmV0dXJuIDE7CiAKQEAgLTE1MzUxLDcgKzE1NDEwLDcgQEAgZHd6IChjb25zdCBj aGFyICpmaWxlLCBjb25zdCBjaGFyICpvdXRmaWxlLCBzdHJ1Y3QgZmlsZV9yZXN1bHQgKnJlcykK IAkgICAgICAgfHwgKHVubGlrZWx5IChmaV9tdWx0aWZpbGUpCiAJCSAgICYmIChyZW1vdmVfZW1w dHlfcHVzICgpCiAJCSAgICAgICB8fCByZWFkX21hY3JvIChkc28pKSkKLQkgICAgICAgfHwgcmVh ZF9kZWJ1Z19pbmZvIChkc28sIERFQlVHX1RZUEVTLCBOVUxMKQorCSAgICAgICB8fCByZWFkX2Rl YnVnX2luZm8gKGRzbywgSU5ERVgoREVCVUdfVFlQRVMpLCBOVUxMKQogI2lmIERFVkVMCiAJICAg ICAgIHx8IGNsZWFyX3AyX2ZpZWxkICgpCiAjZW5kaWYKQEAgLTE1MzYyLDMwICsxNTQyMSwzMCBA QCBkd3ogKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKm91dGZpbGUsIHN0cnVjdCBmaWxl X3Jlc3VsdCAqcmVzKQogCSAgcmV0ID0gMTsKIAl9CiAgICAgICBlbHNlIGlmICghKGlnbm9yZV9z aXplIHx8IGZvcmNlX3ApCi0JICAgICAgICYmICgoZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10u bmV3X3NpemUKLQkJICAgICsgZGVidWdfc2VjdGlvbnNbREVCVUdfQUJCUkVWXS5uZXdfc2l6ZQot CQkgICAgKyBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLm5ld19zaXplCi0JCSAgICArIGRlYnVn X3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5uZXdfc2l6ZQotCQkgICAgKyBkZWJ1Z19zZWN0aW9uc1tE RUJVR19UWVBFU10ubmV3X3NpemUpCi0JCSAgID49IChkZWJ1Z19zZWN0aW9uc1tERUJVR19JTkZP XS5zaXplCi0JCSAgICAgICArIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0uc2l6ZQotCQkg ICAgICAgKyBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLnNpemUKLQkJICAgICAgICsgZGVidWdf c2VjdGlvbnNbREVCVUdfTUFDUk9dLnNpemUKLQkJICAgICAgICsgZGVidWdfc2VjdGlvbnNbREVC VUdfVFlQRVNdLnNpemUpKSkKKwkgICAgICAgJiYgKChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJV R19JTkZPKV0ubmV3X3NpemUKKwkJICAgICsgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJC UkVWKV0ubmV3X3NpemUKKwkJICAgICsgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0u bmV3X3NpemUKKwkJICAgICsgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5uZXdf c2l6ZQorCQkgICAgKyBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19UWVBFUyldLm5ld19zaXpl KQorCQkgICA+PSAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLnNpemUKKwkJICAg ICAgICsgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJCUkVWKV0uc2l6ZQorCQkgICAgICAg KyBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5zaXplCisJCSAgICAgICArIGRlYnVn X3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0uc2l6ZQorCQkgICAgICAgKyBkZWJ1Z19zZWN0 aW9uc1tJTkRFWChERUJVR19UWVBFUyldLnNpemUpKSkKIAl7CiAJICBpZiAoIXF1aWV0IHx8IG91 dGZpbGUgIT0gTlVMTCkKIAkgICAgZXJyb3IgKDAsIDAsICIlczogRFdBUkYgY29tcHJlc3Npb24g bm90IGJlbmVmaWNpYWwgIgogCQkJICItIG9sZCBzaXplICVsZCBuZXcgc2l6ZSAlbGQiLCBkc28t PmZpbGVuYW1lLAotCQkgICAodW5zaWduZWQgbG9uZykgKGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lO Rk9dLnNpemUKLQkJCQkgICAgKyBkZWJ1Z19zZWN0aW9uc1tERUJVR19BQkJSRVZdLnNpemUKLQkJ CQkgICAgKyBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLnNpemUKLQkJCQkgICAgKyBkZWJ1Z19z ZWN0aW9uc1tERUJVR19NQUNST10uc2l6ZQotCQkJCSAgICArIGRlYnVnX3NlY3Rpb25zW0RFQlVH X1RZUEVTXS5zaXplKSwKLQkJICAgKHVuc2lnbmVkIGxvbmcpIChkZWJ1Z19zZWN0aW9uc1tERUJV R19JTkZPXS5uZXdfc2l6ZQotCQkJCSAgICArIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0u bmV3X3NpemUKLQkJCQkgICAgKyBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLm5ld19zaXplCi0J CQkJICAgICsgZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLm5ld19zaXplCi0JCQkJICAgICsg ZGVidWdfc2VjdGlvbnNbREVCVUdfVFlQRVNdLm5ld19zaXplKSk7CisJCSAgICh1bnNpZ25lZCBs b25nKSAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLnNpemUKKwkJCQkgICAgKyBk ZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19BQkJSRVYpXS5zaXplCisJCQkJICAgICsgZGVidWdf c2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uc2l6ZQorCQkJCSAgICArIGRlYnVnX3NlY3Rpb25z W0lOREVYKERFQlVHX01BQ1JPKV0uc2l6ZQorCQkJCSAgICArIGRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX1RZUEVTKV0uc2l6ZSksCisJCSAgICh1bnNpZ25lZCBsb25nKSAoZGVidWdfc2VjdGlv bnNbSU5ERVgoREVCVUdfSU5GTyldLm5ld19zaXplCisJCQkJICAgICsgZGVidWdfc2VjdGlvbnNb SU5ERVgoREVCVUdfQUJCUkVWKV0ubmV3X3NpemUKKwkJCQkgICAgKyBkZWJ1Z19zZWN0aW9uc1tJ TkRFWChERUJVR19TVFIpXS5uZXdfc2l6ZQorCQkJCSAgICArIGRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX01BQ1JPKV0ubmV3X3NpemUKKwkJCQkgICAgKyBkZWJ1Z19zZWN0aW9uc1tJTkRFWChE RUJVR19UWVBFUyldLm5ld19zaXplKSk7CiAKIAkgIGlmIChtdWx0aWZpbGUgJiYgIWZpX211bHRp ZmlsZSAmJiAhbG93X21lbSkKIAkgICAgd3JpdGVfbXVsdGlmaWxlIChkc28sIHJlcyk7CkBAIC0x NTQ2Nyw3ICsxNTUyNiw3IEBAIGR3eiAoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqb3V0 ZmlsZSwgc3RydWN0IGZpbGVfcmVzdWx0ICpyZXMpCiAJCSAgICB9CiAJCX0KIAkgICAgICBsZW4g PSBzdHJsZW4gKG5hbWUpICsgMTsKLQkgICAgICBzZWNfa2luZCA9IGR3YXJmXzUgPyBERUJVR19T VVAgOiBHTlVfREVCVUdBTFRMSU5LOworCSAgICAgIHNlY19raW5kID0gZHdhcmZfNSA/IElOREVY KERFQlVHX1NVUCkgOiBJTkRFWChHTlVfREVCVUdBTFRMSU5LKTsKIAkgICAgICBkZWJ1Z19zZWN0 aW9uc1tzZWNfa2luZF0ubmV3X3NpemUKIAkJPSBsZW4gKyAweDE0ICsgKGR3YXJmXzUgPyA0IDog MCk7CiAJICAgICAgZGVidWdfc2VjdGlvbnNbc2VjX2tpbmRdLm5ld19kYXRhCkBAIC0xNTUxNywx NCArMTU1NzYsMTQgQEAgZHd6IChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpvdXRmaWxl LCBzdHJ1Y3QgZmlsZV9yZXN1bHQgKnJlcykKIAkgIHdyaXRlX2dkYl9pbmRleCAoKTsKIAkgIC8q IFRoZXNlIHNlY3Rpb25zIGFyZSBvcHRpb25hbCBhbmQgaXQgaXMgdW5jbGVhcgogCSAgICAgaG93 IHRvIGFkanVzdCB0aGVtLiAgSnVzdCByZW1vdmUgdGhlbS4gICovCi0JICBkZWJ1Z19zZWN0aW9u c1tERUJVR19QVUJOQU1FU10ubmV3X2RhdGEgPSBOVUxMOwotCSAgZGVidWdfc2VjdGlvbnNbREVC VUdfUFVCTkFNRVNdLm5ld19zaXplID0gMDsKLQkgIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1BVQlRZ UEVTXS5uZXdfZGF0YSA9IE5VTEw7Ci0JICBkZWJ1Z19zZWN0aW9uc1tERUJVR19QVUJUWVBFU10u bmV3X3NpemUgPSAwOwotCSAgZGVidWdfc2VjdGlvbnNbREVCVUdfR05VX1BVQk5BTUVTXS5uZXdf ZGF0YSA9IE5VTEw7Ci0JICBkZWJ1Z19zZWN0aW9uc1tERUJVR19HTlVfUFVCTkFNRVNdLm5ld19z aXplID0gMDsKLQkgIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0dOVV9QVUJUWVBFU10ubmV3X2RhdGEg PSBOVUxMOwotCSAgZGVidWdfc2VjdGlvbnNbREVCVUdfR05VX1BVQlRZUEVTXS5uZXdfc2l6ZSA9 IDA7CisJICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19QVUJOQU1FUyldLm5ld19kYXRhID0g TlVMTDsKKwkgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1BVQk5BTUVTKV0ubmV3X3NpemUg PSAwOworCSAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfUFVCVFlQRVMpXS5uZXdfZGF0YSA9 IE5VTEw7CisJICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19QVUJUWVBFUyldLm5ld19zaXpl ID0gMDsKKwkgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0dOVV9QVUJOQU1FUyldLm5ld19k YXRhID0gTlVMTDsKKwkgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0dOVV9QVUJOQU1FUyld Lm5ld19zaXplID0gMDsKKwkgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0dOVV9QVUJUWVBF UyldLm5ld19kYXRhID0gTlVMTDsKKwkgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0dOVV9Q VUJUWVBFUyldLm5ld19zaXplID0gMDsKIAogCSAgaWYgKG11bHRpZmlsZSAmJiAhZmlfbXVsdGlm aWxlICYmICFsb3dfbWVtKQogCSAgICB3cml0ZV9tdWx0aWZpbGUgKGRzbywgcmVzKTsKQEAgLTE1 NTY1LDYgKzE1NjI0LDEzIEBAIGR3eiAoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqb3V0 ZmlsZSwgc3RydWN0IGZpbGVfcmVzdWx0ICpyZXMpCiAgICAgICByZXQgPSAob3V0ZmlsZSAhPSBO VUxMKSA/IDEgOiAwOwogICAgICAgcmVzLT5yZXMgPSAtMTsKICAgICB9CisgIGlmIChkd29maWxl KSB7CisgICAgaXNfZHdvX2ZpbGUgPSB0cnVlOworICAgIHJldCA9IGR3eiAoZHdvZmlsZSwgTlVM TCwgcmVzKTsKKyAgICBmcmVlKGR3b2ZpbGUpOworICAgIGlzX2R3b19maWxlID0gZmFsc2U7Cisg IH0KKwogICByZXR1cm4gcmV0OwogfQogCkBAIC0xNTYzMywzNSArMTU2OTksMzUgQEAgb3B0aW1p emVfbXVsdGlmaWxlICh1bnNpZ25lZCBpbnQgKmRpZV9jb3VudCkKICAgICAgIHNoc3RydGFiID0g c2hzdHJ0YWJfZ251OwogICAgICAgc2hzdHJ0YWJfbGVuID0gc2l6ZW9mIHNoc3RydGFiX2dudTsK ICAgICB9Ci0gIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lORk9dLnNpemUgPSBtdWx0aV9pbmZvX29m ZjsKLSAgZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10uZGF0YQorICBkZWJ1Z19zZWN0aW9uc1tJ TkRFWChERUJVR19JTkZPKV0uc2l6ZSA9IG11bHRpX2luZm9fb2ZmOworICBkZWJ1Z19zZWN0aW9u c1tJTkRFWChERUJVR19JTkZPKV0uZGF0YQogICAgID0gKG11bHRpX2luZm9fb2ZmCiAgICAgICAg PyBtbWFwIChOVUxMLCBtdWx0aV9pbmZvX29mZiwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgbXVs dGlfaW5mb19mZCwgMCkKICAgICAgICA6IE5VTEwpOwotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19B QkJSRVZdLnNpemUgPSBtdWx0aV9hYmJyZXZfb2ZmOwotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19B QkJSRVZdLmRhdGEKKyAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJCUkVWKV0uc2l6ZSA9 IG11bHRpX2FiYnJldl9vZmY7CisgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0FCQlJFVild LmRhdGEKICAgICA9IChtdWx0aV9hYmJyZXZfb2ZmCiAgICAgICAgPyBtbWFwIChOVUxMLCBtdWx0 aV9hYmJyZXZfb2ZmLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLAogCSAgICAgICBtdWx0aV9hYmJy ZXZfZmQsIDApCiAgICAgICAgOiBOVUxMKTsKLSAgZGVidWdfc2VjdGlvbnNbREVCVUdfTElORV0u c2l6ZSA9IG11bHRpX2xpbmVfb2ZmOwotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19MSU5FXS5kYXRh CisgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0xJTkUpXS5zaXplID0gbXVsdGlfbGluZV9v ZmY7CisgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0xJTkUpXS5kYXRhCiAgICAgPSBtbWFw IChOVUxMLCBtdWx0aV9saW5lX29mZiwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgbXVsdGlfbGlu ZV9mZCwgMCk7Ci0gIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uc2l6ZSA9IG11bHRpX3N0cl9v ZmY7Ci0gIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YQorICBkZWJ1Z19zZWN0aW9uc1tJ TkRFWChERUJVR19TVFIpXS5zaXplID0gbXVsdGlfc3RyX29mZjsKKyAgZGVidWdfc2VjdGlvbnNb SU5ERVgoREVCVUdfU1RSKV0uZGF0YQogICAgID0gbXVsdGlfc3RyX29mZgogICAgICAgPyBtbWFw IChOVUxMLCBtdWx0aV9zdHJfb2ZmLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBtdWx0aV9zdHJf ZmQsIDApCiAgICAgICA6IE5VTEw7Ci0gIGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5zaXpl ID0gbXVsdGlfbWFjcm9fb2ZmOwotICBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10uZGF0YQor ICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLnNpemUgPSBtdWx0aV9tYWNyb19v ZmY7CisgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0uZGF0YQogICAgID0gbXVs dGlfbWFjcm9fb2ZmCiAgICAgICA/IG1tYXAgKE5VTEwsIG11bHRpX21hY3JvX29mZiwgUFJPVF9S RUFELCBNQVBfUFJJVkFURSwgbXVsdGlfbWFjcm9fZmQsIDApCiAgICAgICA6IE5VTEw7Ci0gIGlm IChkZWJ1Z19zZWN0aW9uc1tERUJVR19JTkZPXS5kYXRhID09IE1BUF9GQUlMRUQKLSAgICAgIHx8 IGRlYnVnX3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0uZGF0YSA9PSBNQVBfRkFJTEVECi0gICAgICB8 fCBkZWJ1Z19zZWN0aW9uc1tERUJVR19MSU5FXS5kYXRhID09IE1BUF9GQUlMRUQKLSAgICAgIHx8 IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YSA9PSBNQVBfRkFJTEVECi0gICAgICB8fCBk ZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10uZGF0YSA9PSBNQVBfRkFJTEVEKQorICBpZiAoZGVi dWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLmRhdGEgPT0gTUFQX0ZBSUxFRAorICAgICAg fHwgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfQUJCUkVWKV0uZGF0YSA9PSBNQVBfRkFJTEVE CisgICAgICB8fCBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19MSU5FKV0uZGF0YSA9PSBNQVBf RkFJTEVECisgICAgICB8fCBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5kYXRhID09 IE1BUF9GQUlMRUQKKyAgICAgIHx8IGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0u ZGF0YSA9PSBNQVBfRkFJTEVEKQogICAgIHsKICAgICAgIGVycm9yICgwLCAwLCAiRXJyb3IgbW1h cHBpbmcgbXVsdGktZmlsZSB0ZW1wb3JhcnkgZmlsZXMiKTsKICAgICBmYWlsOgpAQCAtMTU2NzMs MjMgKzE1NzM5LDIzIEBAIG9wdGltaXplX211bHRpZmlsZSAodW5zaWduZWQgaW50ICpkaWVfY291 bnQpCiAJICB1bmxpbmsgKG11bHRpZmlsZSk7CiAJICBjbG9zZSAodmZkKTsKIAl9Ci0gICAgICBp ZiAoZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10uZGF0YSAhPSBNQVBfRkFJTEVEKQotCW11bm1h cCAoZGVidWdfc2VjdGlvbnNbREVCVUdfSU5GT10uZGF0YSwKLQkJZGVidWdfc2VjdGlvbnNbREVC VUdfSU5GT10uc2l6ZSk7Ci0gICAgICBpZiAoZGVidWdfc2VjdGlvbnNbREVCVUdfQUJCUkVWXS5k YXRhICE9IE1BUF9GQUlMRUQpCi0JbXVubWFwIChkZWJ1Z19zZWN0aW9uc1tERUJVR19BQkJSRVZd LmRhdGEsCi0JCWRlYnVnX3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0uc2l6ZSk7Ci0gICAgICBpZiAo ZGVidWdfc2VjdGlvbnNbREVCVUdfTElORV0uZGF0YSAhPSBNQVBfRkFJTEVEKQotCW11bm1hcCAo ZGVidWdfc2VjdGlvbnNbREVCVUdfTElORV0uZGF0YSwKLQkJZGVidWdfc2VjdGlvbnNbREVCVUdf TElORV0uc2l6ZSk7Ci0gICAgICBpZiAoZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhICE9 IE1BUF9GQUlMRUQKLQkgICYmIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YSAhPSBOVUxM KQotCW11bm1hcCAoZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhLAotCQlkZWJ1Z19zZWN0 aW9uc1tERUJVR19TVFJdLnNpemUpOwotICAgICAgaWYgKGRlYnVnX3NlY3Rpb25zW0RFQlVHX01B Q1JPXS5kYXRhICE9IE1BUF9GQUlMRUQKLQkgICYmIGRlYnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JP XS5kYXRhICE9IE5VTEwpCi0JbXVubWFwIChkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10uZGF0 YSwKLQkJZGVidWdfc2VjdGlvbnNbREVCVUdfTUFDUk9dLnNpemUpOworICAgICAgaWYgKGRlYnVn X3NlY3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5kYXRhICE9IE1BUF9GQUlMRUQpCisJbXVubWFw IChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19JTkZPKV0uZGF0YSwKKwkJZGVidWdfc2VjdGlv bnNbSU5ERVgoREVCVUdfSU5GTyldLnNpemUpOworICAgICAgaWYgKGRlYnVnX3NlY3Rpb25zW0lO REVYKERFQlVHX0FCQlJFVildLmRhdGEgIT0gTUFQX0ZBSUxFRCkKKwltdW5tYXAgKGRlYnVnX3Nl Y3Rpb25zW0lOREVYKERFQlVHX0FCQlJFVildLmRhdGEsCisJCWRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX0FCQlJFVildLnNpemUpOworICAgICAgaWYgKGRlYnVnX3NlY3Rpb25zW0lOREVYKERF QlVHX0xJTkUpXS5kYXRhICE9IE1BUF9GQUlMRUQpCisJbXVubWFwIChkZWJ1Z19zZWN0aW9uc1tJ TkRFWChERUJVR19MSU5FKV0uZGF0YSwKKwkJZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTElO RSldLnNpemUpOworICAgICAgaWYgKGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRh dGEgIT0gTUFQX0ZBSUxFRAorCSAgJiYgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0u ZGF0YSAhPSBOVUxMKQorCW11bm1hcCAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0u ZGF0YSwKKwkJZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uc2l6ZSk7CisgICAgICBp ZiAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5kYXRhICE9IE1BUF9GQUlMRUQK KwkgICYmIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0uZGF0YSAhPSBOVUxMKQor CW11bm1hcCAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfTUFDUk8pXS5kYXRhLAorCQlkZWJ1 Z19zZWN0aW9uc1tJTkRFWChERUJVR19NQUNSTyldLnNpemUpOwogICAgICAgcmV0dXJuIC0xOwog ICAgIH0KIApAQCAtMTU3MjUsNyArMTU3OTEsNyBAQCBvcHRpbWl6ZV9tdWx0aWZpbGUgKHVuc2ln bmVkIGludCAqZGllX2NvdW50KQogICAgICAgb2JzdGFja19pbml0ICgmb2IpOwogICAgICAgb2Jz dGFja19pbml0ICgmb2IyKTsKIAotICAgICAgaWYgKHJlYWRfZGVidWdfaW5mbyAoZHNvLCBERUJV R19JTkZPLCBOVUxMKQorICAgICAgaWYgKHJlYWRfZGVidWdfaW5mbyAoZHNvLCBJTkRFWChERUJV R19JTkZPKSwgTlVMTCkKIAkgIHx8IHBhcnRpdGlvbl9kdXBzICgpKQogCWdvdG8gZmFpbDsKIApA QCAtMTU3MzksNyArMTU4MDUsNyBAQCBvcHRpbWl6ZV9tdWx0aWZpbGUgKHVuc2lnbmVkIGludCAq ZGllX2NvdW50KQogCiAgICAgICAqY3VwID0gTlVMTDsKIAotICAgICAgc3RycF9jb3VudCA9IGRl YnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uc2l6ZSAvIDY0OworICAgICAgc3RycF9jb3VudCA9IGRl YnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLnNpemUgLyA2NDsKICAgICAgIGlmIChzdHJw X2NvdW50IDwgNjQpCiAJc3RycF9jb3VudCA9IDY0OwogICAgICAgc3RycF9odGFiID0gaHRhYl90 cnlfY3JlYXRlIChzdHJwX2NvdW50LApAQCAtMTU3NDcsOCArMTU4MTMsOCBAQCBvcHRpbWl6ZV9t dWx0aWZpbGUgKHVuc2lnbmVkIGludCAqZGllX2NvdW50KQogICAgICAgaWYgKHN0cnBfaHRhYiA9 PSBOVUxMKQogCWR3el9vb20gKCk7CiAKLSAgICAgIGZvciAocCA9IGRlYnVnX3NlY3Rpb25zW0RF QlVHX1NUUl0uZGF0YTsKLQkgICBwIDwgZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5kYXRhICsg ZGVidWdfc2VjdGlvbnNbREVCVUdfU1RSXS5zaXplOworICAgICAgZm9yIChwID0gZGVidWdfc2Vj dGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uZGF0YTsKKwkgICBwIDwgZGVidWdfc2VjdGlvbnNbSU5E RVgoREVCVUdfU1RSKV0uZGF0YSArIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uc2l6ZTsKIAkg ICBwID0gcSArIDEpCiAJewogCSAgdm9pZCAqKnNsb3Q7CkBAIC0xNTc1Nyw3ICsxNTgyMyw3IEBA IG9wdGltaXplX211bHRpZmlsZSAodW5zaWduZWQgaW50ICpkaWVfY291bnQpCiAKIAkgIHEgPSAo dW5zaWduZWQgY2hhciAqKSBzdHJjaHIgKChjaGFyICopIHAsICdcMCcpOwogCSAgaGFzaCA9IGl0 ZXJhdGl2ZV9oYXNoIChwLCBxIC0gcCwgMCk7Ci0JICBzZS5vZmYgPSBwIC0gZGVidWdfc2VjdGlv bnNbREVCVUdfU1RSXS5kYXRhOworCSAgc2Uub2ZmID0gcCAtIGRlYnVnX3NlY3Rpb25zW0lOREVY KERFQlVHX1NUUildLmRhdGE7CiAJICBzZS5uZXdfb2ZmID0gaGFzaCAmIH4xVTsKIAkgIHNsb3Qg PSBodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2ggKHN0cnBfaHRhYiwgJnNlLCBzZS5uZXdfb2ZmLCBJ TlNFUlQpOwogCSAgaWYgKHNsb3QgPT0gTlVMTCkKQEAgLTE1Nzg4LDcgKzE1ODU0LDcgQEAgb3B0 aW1pemVfbXVsdGlmaWxlICh1bnNpZ25lZCBpbnQgKmRpZV9jb3VudCkKICAgICAgIGVsc2UKIAlz dHJwX3RhaWxfb2ZmX2xpc3QgPSBmaW5hbGl6ZV9zdHJwICh0cnVlKTsKIAotICAgICAgaWYgKGRl YnVnX3NlY3Rpb25zW0RFQlVHX01BQ1JPXS5kYXRhKQorICAgICAgaWYgKGRlYnVnX3NlY3Rpb25z W0lOREVYKERFQlVHX01BQ1JPKV0uZGF0YSkKIAloYW5kbGVfbWFjcm8gKCk7CiAgICAgfQogCkBA IC0xNTgwMCwxMiArMTU4NjYsMTIgQEAgb3B0aW1pemVfbXVsdGlmaWxlICh1bnNpZ25lZCBpbnQg KmRpZV9jb3VudCkKICAgc3VwcCA9IE5VTEw7CiAgIGlmIChkd2FyZl81KQogICAgIHsKLSAgICAg IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NVUF0ubmV3X3NpemUgPSAweDE0ICsgNTsKLSAgICAgIGRl YnVnX3NlY3Rpb25zW0RFQlVHX1NVUF0ubmV3X2RhdGEKLQk9IG1hbGxvYyAoZGVidWdfc2VjdGlv bnNbREVCVUdfU1VQXS5uZXdfc2l6ZSk7Ci0gICAgICBpZiAoZGVidWdfc2VjdGlvbnNbREVCVUdf U1VQXS5uZXdfZGF0YSA9PSBOVUxMKQorICAgICAgZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf U1VQKV0ubmV3X3NpemUgPSAweDE0ICsgNTsKKyAgICAgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERF QlVHX1NVUCldLm5ld19kYXRhCisJPSBtYWxsb2MgKGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVH X1NVUCldLm5ld19zaXplKTsKKyAgICAgIGlmIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19T VVApXS5uZXdfZGF0YSA9PSBOVUxMKQogCWR3el9vb20gKCk7Ci0gICAgICBzdXBwID0gZGVidWdf c2VjdGlvbnNbREVCVUdfU1VQXS5uZXdfZGF0YTsKKyAgICAgIHN1cHAgPSBkZWJ1Z19zZWN0aW9u c1tJTkRFWChERUJVR19TVVApXS5uZXdfZGF0YTsKICAgICAgIHdyaXRlXzE2IChzdXBwLCA1KTsK ICAgICAgIHdyaXRlXzggKHN1cHAsIDEpOwogICAgICAgd3JpdGVfOCAoc3VwcCwgMCk7CkBAIC0x NTkzMCw3ICsxNTk5Niw3IEBAIG9wdGltaXplX211bHRpZmlsZSAodW5zaWduZWQgaW50ICpkaWVf Y291bnQpCiAJICAgIGJyZWFrOwogCSAgfQogICAgICAgc2hkci5zaF9zaXplID0gZGVidWdfc2Vj dGlvbnNbaV0ubmV3X3NpemU7Ci0gICAgICBpZiAoaSA9PSBERUJVR19TVFIpCisgICAgICBpZiAo KGludClpID09IElOREVYKERFQlVHX1NUUikpCiAJewogCSAgc2hkci5zaF9mbGFncyA9IFNIRl9N RVJHRSB8IFNIRl9TVFJJTkdTOwogCSAgc2hkci5zaF9lbnRzaXplID0gMTsKQEAgLTE1OTg0LDE4 ICsxNjA1MCwyMSBAQCBvcHRpbWl6ZV9tdWx0aWZpbGUgKHVuc2lnbmVkIGludCAqZGllX2NvdW50 KQogCiAgIGlmIChkd2FyZl81KQogICAgIHsKLSAgICAgIGZyZWUgKGRlYnVnX3NlY3Rpb25zW0RF QlVHX1NVUF0ubmV3X2RhdGEpOwotICAgICAgZGVidWdfc2VjdGlvbnNbREVCVUdfU1VQXS5uZXdf ZGF0YSA9IE5VTEw7Ci0gICAgfQotICBtdW5tYXAgKGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lORk9d LmRhdGEsIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0lORk9dLnNpemUpOwotICBtdW5tYXAgKGRlYnVn X3NlY3Rpb25zW0RFQlVHX0FCQlJFVl0uZGF0YSwKLQkgIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0FC QlJFVl0uc2l6ZSk7Ci0gIG11bm1hcCAoZGVidWdfc2VjdGlvbnNbREVCVUdfTElORV0uZGF0YSwg ZGVidWdfc2VjdGlvbnNbREVCVUdfTElORV0uc2l6ZSk7Ci0gIGlmIChkZWJ1Z19zZWN0aW9uc1tE RUJVR19TVFJdLmRhdGEpCi0gICAgbXVubWFwIChkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLmRh dGEsIGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uc2l6ZSk7Ci0gIGlmIChkZWJ1Z19zZWN0aW9u c1tERUJVR19NQUNST10uZGF0YSkKLSAgICBtdW5tYXAgKGRlYnVnX3NlY3Rpb25zW0RFQlVHX01B Q1JPXS5kYXRhLAotCSAgICBkZWJ1Z19zZWN0aW9uc1tERUJVR19NQUNST10uc2l6ZSk7CisgICAg ICBmcmVlIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVVApXS5uZXdfZGF0YSk7CisgICAg ICBkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVVApXS5uZXdfZGF0YSA9IE5VTEw7CisgICAg fQorICBtdW5tYXAgKGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX0lORk8pXS5kYXRhLAorCSAg ZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfSU5GTyldLnNpemUpOworICBtdW5tYXAgKGRlYnVn X3NlY3Rpb25zW0lOREVYKERFQlVHX0FCQlJFVildLmRhdGEsCisJICBkZWJ1Z19zZWN0aW9uc1tJ TkRFWChERUJVR19BQkJSRVYpXS5zaXplKTsKKyAgbXVubWFwIChkZWJ1Z19zZWN0aW9uc1tJTkRF WChERUJVR19MSU5FKV0uZGF0YSwKKwkgIGRlYnVnX3NlY3Rpb25zW0RFQlVHX0xJTkVdLnNpemUp OworICBpZiAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uZGF0YSkKKyAgICBtdW5t YXAgKGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUildLmRhdGEsCisJICAgIGRlYnVnX3Nl Y3Rpb25zW0RFQlVHX1NUUl0uc2l6ZSk7CisgIGlmIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJV R19NQUNSTyldLmRhdGEpCisgICAgbXVubWFwIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19N QUNSTyldLmRhdGEsCisJICAgIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX01BQ1JPKV0uc2l6 ZSk7CiAKICAgZm9yIChpID0gMDsgZGVidWdfc2VjdGlvbnNbaV0ubmFtZTsgKytpKQogICAgIHsK QEAgLTE2MDU4LDEwICsxNjEyNywxMCBAQCByZWFkX211bHRpZmlsZSAoaW50IGZkLCB1bnNpZ25l ZCBpbnQgZGllX2NvdW50KQogICAgICAgaWYgKHJlYWRfZHdhcmYgKGRzbywgZmFsc2UsICZkaWVf Y291bnQpKQogCWdvdG8gZmFpbDsKIAotICAgICAgaWYgKGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NU Ul0uc2l6ZSkKKyAgICAgIGlmIChkZWJ1Z19zZWN0aW9uc1tJTkRFWChERUJVR19TVFIpXS5zaXpl KQogCXsKIAkgIHVuc2lnbmVkIGNoYXIgKnAsICpxOwotCSAgdW5zaWduZWQgaW50IHN0cnBfY291 bnQgPSBkZWJ1Z19zZWN0aW9uc1tERUJVR19TVFJdLnNpemUgLyA2NDsKKwkgIHVuc2lnbmVkIGlu dCBzdHJwX2NvdW50ID0gZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdfU1RSKV0uc2l6ZSAvIDY0 OwogCSAgdm9pZCAqKnNsb3Q7CiAJICB1bnNpZ25lZCBpbnQgKnBpOwogCkBAIC0xNjA3MCw5ICsx NjEzOSw5IEBAIHJlYWRfbXVsdGlmaWxlIChpbnQgZmQsIHVuc2lnbmVkIGludCBkaWVfY291bnQp CiAJICBzdHJwX2h0YWIgPSBodGFiX3RyeV9jcmVhdGUgKHN0cnBfY291bnQsIHN0cnBfaGFzaDMs IHN0cnBfZXEzLCBOVUxMKTsKIAkgIGlmIChzdHJwX2h0YWIgPT0gTlVMTCkKIAkgICAgZHd6X29v bSAoKTsKLQkgIGZvciAocCA9IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YTsKLQkgICAg ICAgcCA8IGRlYnVnX3NlY3Rpb25zW0RFQlVHX1NUUl0uZGF0YQotCQkgICArIGRlYnVnX3NlY3Rp b25zW0RFQlVHX1NUUl0uc2l6ZTsgcCA9IHEpCisJICBmb3IgKHAgPSBkZWJ1Z19zZWN0aW9uc1tJ TkRFWChERUJVR19TVFIpXS5kYXRhOworCSAgICAgICBwIDwgZGVidWdfc2VjdGlvbnNbSU5ERVgo REVCVUdfU1RSKV0uZGF0YQorCQkgICArIGRlYnVnX3NlY3Rpb25zW0lOREVYKERFQlVHX1NUUild LnNpemU7IHAgPSBxKQogCSAgICB7CiAJICAgICAgcSA9ICh1bnNpZ25lZCBjaGFyICopIHN0cmNo ciAoKGNoYXIgKikgcCwgJ1wwJykgKyAxOwogCSAgICAgIHNsb3QgPSBodGFiX2ZpbmRfc2xvdF93 aXRoX2hhc2ggKHN0cnBfaHRhYiwgcCwKQEAgLTE2MDg3LDcgKzE2MTU2LDcgQEAgcmVhZF9tdWx0 aWZpbGUgKGludCBmZCwgdW5zaWduZWQgaW50IGRpZV9jb3VudCkKIAkgICAgewogCSAgICAgIGZv ciAocGkgPSBzdHJwX3RhaWxfb2ZmX2xpc3Q7ICpwaTsgcGkrKykKIAkJewotCQkgIHAgPSBkZWJ1 Z19zZWN0aW9uc1tERUJVR19TVFJdLmRhdGEgKyAqcGk7CisJCSAgcCA9IGRlYnVnX3NlY3Rpb25z W0lOREVYKERFQlVHX1NUUildLmRhdGEgKyAqcGk7CiAJCSAgcSA9ICh1bnNpZ25lZCBjaGFyICop IHN0cmNociAoKGNoYXIgKikgcCwgJ1wwJyk7CiAJCSAgc2xvdCA9IGh0YWJfZmluZF9zbG90X3dp dGhfaGFzaCAoc3RycF9odGFiLCBwLAogCQkJCQkJICAgaXRlcmF0aXZlX2hhc2ggKHAsIHEgLSBw LApAQCAtMTYxMDMsNyArMTYxNzIsNyBAQCByZWFkX211bHRpZmlsZSAoaW50IGZkLCB1bnNpZ25l ZCBpbnQgZGllX2NvdW50KQogCSAgICB9CiAJfQogCi0gICAgICBpZiAoZGVidWdfc2VjdGlvbnNb REVCVUdfTUFDUk9dLmRhdGEpCisgICAgICBpZiAoZGVidWdfc2VjdGlvbnNbSU5ERVgoREVCVUdf TUFDUk8pXS5kYXRhKQogCWhhbmRsZV9tYWNybyAoKTsKIAogICAgICAgYWx0X3N0cnBfaHRhYiA9 IHN0cnBfaHRhYjsKLS0gCjIuMTcuMQoK --_002_CO6PR12MB5491CA84BD1DAE3F60259DF69EC49CO6PR12MB5491namp_--