From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 2E4D347254 for ; Sat, 2 Sep 2023 16:10:16 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 01AFF68C813; Sat, 2 Sep 2023 19:08:40 +0300 (EEST) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2069.outbound.protection.outlook.com [40.92.52.69]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 42D1268C77A for ; Sat, 2 Sep 2023 19:08:33 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WHb4Rj0CRF2h8ZJ+kxeakVhtZjnRY3asOs0h45OTSqJf9sqkhcEtGuIAI/0mGWHuDk/NTANvsaUoLvAPTa3c2hyi/MrNxXnTVsnjlVDQKLrKLaH65unMXSsKNVDnXXzTjaBd03EpLIm4poOYVBxk65rzLNXlBacrQ+TQWVEaefucFUljN+/C38hKmSVicDn/EL9KGScuNfM7EUNbMIdbAa88Fs4mENPrbCuj11vYzu7qMETupaHL59YIN8IK5VIZRRK3a64ngyfmkdUPY4mVqAQpmcRxXaPTpGbwjmwu/doYUm2+k99NXMEtkPdRtjaAKSfR2pf6L1qatpZdkhc3KQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qwv+m6T+c/yny7zSkGUUlOcLalatSTlD7YXWZ0bcYKY=; b=dd5b8jusAxURskDbED4xjxgJ0TCYBy6z8oNAu/C06ay0jqzZm/VnHP4tWinBbqTtg+I1fx6BFAiRDCmg1MM0bsRcsUXupicEKEvYJA6pux0Wa4jMpQ8qJTwiKl3KA7L1GZdhVJD9u+MxtrwlcvhecB8WB3nvZ5xxkoWuu8lHb8kZfGDD7NZWjy1Z3GT4Qwbt2BaQEe7fwa0Hn91+D8M22MuilINJIlj2J9T+7o97yM9P//IuzNu959lBlKg/4pzJAkJNONZsNpmi0NaV57hgymL7Q4BPCR8rjtfvArEUFC9UbGuQgXLm7dTg9azOnOidgKE6Y+o9AIxUgCmJRaTXUg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qwv+m6T+c/yny7zSkGUUlOcLalatSTlD7YXWZ0bcYKY=; b=Y/J4l1oHyQN+Ao0rmktwVGptwbOnoNTIDoXVtUvuHemiuqxLL/v/+h3OJrr4T4SmQRaQAX2A2n44x+Nl05MQRmukDWeXx5dAESHZkzU4UOuG5xxcUHDAEN8SfmVS2eeu3e5FP2JHaucwh5fuEJ/9/elgZiTQ+0Sj1E/Zz1jSedjMMa28fCeN9Rgmy7jg7sqSwFboFAyOVpUgenZkKE/pfBK39j+t3C3ugqNN/oAO4iHVijfaKJgwsYpFtKNsqPy+XAWhbThhO8XFPIHnJF40vSN199YuD0yxEtCd/DnmL6cBCsqydqkrXIVHH5DqVWWEtZN6MEHN1ajUlyS561hA5w== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB4030.apcprd06.prod.outlook.com (2603:1096:400:24::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.27; Sat, 2 Sep 2023 16:08:17 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::f1a4:bbff:7592:ee31]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::f1a4:bbff:7592:ee31%5]) with mapi id 15.20.6745.030; Sat, 2 Sep 2023 16:08:17 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Sep 2023 00:07:37 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230902160741.19197-1-nuomi2021@gmail.com> References: <20230902160741.19197-1-nuomi2021@gmail.com> X-TMN: [g1Cei84azjH321lRUyYqizSpPROL/EbT] X-ClientProxiedBy: TYCP286CA0242.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::9) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20230902160741.19197-10-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB4030:EE_ X-MS-Office365-Filtering-Correlation-Id: 293919ed-3359-4df3-628e-08dbabced15e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 76Jo34dVILUvBVZqdUQ0WA7rXaZStrmukUuqcGCAvWSziat3KHlMLMX9l5hX+7OWQ7y7tNqrAJPn4bDn4N8bCbpKlfcsfpAWJ0Xsv1aRsFloVMXjDFKO2nVuR+4gjcWp8jut47A2jyQLr1fzCtoBOQYwvgF86r+h4owDRV7aZAnC4uIVvZ0FXoaIAKylo2SkJVXVczZjE0tF4vhBU+J2iBMyDwSQ4AP5OpHiXOXNOLsGulHt+4b4fq+OAv+EkxD2EIbwZYj6Fpyt9mPC3ZfVoayBfy5ikTbSBWL0FwFDLKZrknq06RGYHtCTtXibbNaDcaX9i3urZ3t95g/YtknEIvtFR1rk/r7N+ceeRGoUc+PenNjHkPp5wBHuvLdCI5Zny6H8GVu6lvjZnrV3pY2ceyKAzXILy1QqPBtNKSQZ02r21+L6n0T3pLPG1trjdSr4AOqTlTQW54VNn4HieSzdAeXfVZ46+K3Manfmsi8e/8ZnpzI3hr/xVtjqRCTEFJXcy/nJyiq8e7z25xan1KSi/leY1jf0VPKOtO9uqjxXHpww9jJAu7PZh9VSFnhEO/xqlSKnSg9utcV3fx6vDdxgYDTZtN5hZEiCgqbagv4FrVo= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c29YUytnL0JvRWJHaGdIWC82VndyM2J0TFhUVjQ0aDc2TFJMMTJoUUcwV2Jp?= =?utf-8?B?cGlrSDY0aDhJZGhSbnJEWStCMDlIYStZTlYrSThOT0x4TUxiT2lsMWFNM2tq?= =?utf-8?B?bGMrcXVQM1ZpN2M0UXBFSWxQQ0dmM2xIOTJPUUorMi9BcWFSdGdmNERJbjBr?= =?utf-8?B?MGpuRXIvV2JnazJPNjFNTUVGMlpTUis1U3A1UFNiK1JDbnBtekZUbUw4OHhV?= =?utf-8?B?eTFKL2M2WmsrTExxNVlkNEJVRHlOUlN6cXVHR1ZpQ2UvaVBkVTZrRTVIY20r?= =?utf-8?B?SENBaEFCRVdmbU9GQWp2L29jU1BTbUI4bEtOU29oUi9ZSGNHaGdVZDh3T1o2?= =?utf-8?B?cXIyMjJrWCtJYmxVVDdkbS80T2huYUVqc0tKUXdVbTJlOXdaSEk1N2dqZmhN?= =?utf-8?B?NmFxY0w5Wi9jcVdiQWxmVDNIZjhEMU1nZ1hobzA0dnRndEFRK1ExcTY5djUy?= =?utf-8?B?NTA0YUVTS24vNHJZT1h3c3o3UVROYmExWEY1NHhRYlVzcWVxVEE1TlhxaEJp?= =?utf-8?B?akZoMER3R1lKYm9Obyt6QXRYTTdJZ0JzWm5KQjVaZlBsei9JQXcyZXMwWGVH?= =?utf-8?B?dE0rcnRrQkNmU3Rpa1ZwRi9qZG14Q04zeVRYYmFhTWlQakdZTmI0V2VoOG1m?= =?utf-8?B?YmtCem1SV3hsNGVtWWg4OHVWRkRpNmJTN0gxcEdLdTZvSG1MUVFtVFJGMjVI?= =?utf-8?B?SGwrN24rNDdoc24zSHRrSmVKNHZzM21iOEk5L29GTVBrN3FMY1l1N2RYTmF1?= =?utf-8?B?RCthNWU1QTRSeUhJOUZvSXlIYUoyRHhHZXpnQmtWd3ZhTFdBZ0w0dEUzMXpU?= =?utf-8?B?Z1NreGYyWVlhWUNHcU1nNWJvQlVTRTBla3czQmcyVWVQaVk1dGhxS1N3WVVa?= =?utf-8?B?MUordTN2M2lZRFVzNG1IcXNldUZta25TdU5VdXpqaStBYmhkZXJqRFRpL1RY?= =?utf-8?B?UDExdTBvWTkvTk03dkMrbG1MNUxVY1pqNUdGOWQ2aE44N1VMSWQzTi9OQThl?= =?utf-8?B?cjRkcXdGVkRCN2doZzArbWswcWJ0dlVMNTlDejNUd1c3SHlwbzRaRWVheC91?= =?utf-8?B?N0NsTmhmTVJIcnFNNVBsRE1Ud2kyeXhIQWZvclp3V2x3Ukg5aTFOTlBMSnVV?= =?utf-8?B?WVEzbGpxRWRjRUVCZTdGMFpsaFJzSXRHWEppUERCQlk1bDk5dmdQRnVqcFJ2?= =?utf-8?B?eDNRZTVoV3hwV1RxTk5ramVlRk4zNmtIK2c3N3lJZ2tuV2YxMHB3N0E2aE1j?= =?utf-8?B?ekUvVU5SblNEMEorS3grbnVYeTZRUjlqZGpqbUhOSzhNNjg5VVh6TjVVWkRt?= =?utf-8?B?ekJnV1RCamk4aXdWUHkrVnVDZWZlbXlHY2FyN0VhK3BnUmd2VnFHVjZGcU9v?= =?utf-8?B?Y2tmY2t1MEdVVnc0QnhPNVhVQlRXZzUrN0I0RG9KdDVyTnlFalNNNnN3VzNT?= =?utf-8?B?M3dVUTNaOTh4cERHSjR2L0Fzc3lFcDBlK3FMQURBa1RidFA3OGFRTzVRall3?= =?utf-8?B?ZnNCSG15cFJHQ0w1N2kxWk1OWloyNFFEVE03SXlVbWh4RnVRM3VLWG95dUpL?= =?utf-8?B?QWJnalB3VmhsZnpiN0o5TkRNbUVlTVdxcXpFRWkyWWs4dGljM3dIMWp6Mktw?= =?utf-8?B?OTQyODE2UWRVVjlObEZIaEkzeUtrTUhZRklyTjdHNHJzb1RDTHZwWDltbVJO?= =?utf-8?Q?EL1UAKqyYD54f350zVyq?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 293919ed-3359-4df3-628e-08dbabced15e X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2023 16:08:17.0415 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB4030 Subject: [FFmpeg-devel] [PATCH v3 10/14] vvcdec: add LMCS, Deblocking, SAO, and ALF filters X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Nuo Mi Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAxICsKIGxpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuaCAgICAgICAgICAgICB8ICAgIDIgKwogbGliYXZjb2RlYy92dmMv dnZjX2ZpbHRlci5jICAgICAgICAgIHwgMTM0NyArKysrKysrKysrKysrKysrKysrKysrKysrKwog bGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oICAgICAgICAgIHwgICA3MCArKwogbGliYXZjb2Rl Yy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jIHwgMTEzNSArKysrKysrKysrKysrKysrKysrKysr CiA1IGZpbGVzIGNoYW5nZWQsIDI1NTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29k ZWMvdnZjL3Z2Y19maWx0ZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2 Y19maWx0ZXJfdGVtcGxhdGUuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxl IGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggMTUzMTJmZDIzNi4uMjU1OWRlOTQyOSAx MDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy92dmMv TWFrZWZpbGUKQEAgLTUsNiArNSw3IEBAIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAg ICAgICs9ICB2dmMvdnZjZGVjLm8gICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19jYWJhYy5vICAgICAgICAgXAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfY3R1Lm8gICAgICAgICAgIFwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2RhdGEubyAgICAg ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19m aWx0ZXIubyAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZ2Yy92dmNfaW50ZXIubyAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2dmMvdnZjX2ludHJhLm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pdHhfMWQubyAgICAgICAgXApkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCmlu ZGV4IGU5MTJkMjViNjIuLjYxMDNhNmM0ZWEgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2 Y19jdHUuaAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKQEAgLTQwNiw1ICs0MDYsNyBA QCBzdHJ1Y3QgQUxGUGFyYW1zIHsKIHZvaWQgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxl KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwLCBpbnQgdywgaW50IGgpOwogdm9p ZCBmZl92dmNfZGVjb2RlX25laWdoYm91cihWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeF9jdGIs IGludCB5X2N0YiwgaW50IHJ4LCBpbnQgcnksIGludCBycyk7CiB2b2lkIGZmX3Z2Y19jdHVfZnJl ZV9jdXMoQ1RVICpjdHUpOworaW50IGZmX3Z2Y19nZXRfcVB5KGNvbnN0IFZWQ0ZyYW1lQ29udGV4 dCAqZmMsIGludCB4YywgaW50IHljKTsKIHZvaWQgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihF bnRyeVBvaW50ICplcCwgaW50IGJpdF9kZXB0aCwgaW50IHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0 aW9uX2VuYWJsZWRfZmxhZyk7CisKICNlbmRpZiAvLyBBVkNPREVDX1ZWQ19DVFVfSApkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2Zp bHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmMxYjk3NzljYzUK LS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmMKQEAgLTAsMCAr MSwxMzQ3IEBACisvKgorICogVlZDIGZpbHRlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg TnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRl ICJ2dmNfY3R1LmgiCisjaW5jbHVkZSAidnZjX2RhdGEuaCIKKyNpbmNsdWRlICJ2dmNfZmlsdGVy LmgiCisjaW5jbHVkZSAidnZjX3JlZnMuaCIKKworI2RlZmluZSBMRUZUICAgICAgICAwCisjZGVm aW5lIFRPUCAgICAgICAgIDEKKyNkZWZpbmUgUklHSFQgICAgICAgMgorI2RlZmluZSBCT1RUT00g ICAgICAzCisjZGVmaW5lIE1BWF9FREdFUyAgIDQKKworLy9UYWJsZSA0MyBEZXJpdmF0aW9uIG9m IHRocmVzaG9sZCB2YXJpYWJsZXMgYmV0YScgYW5kIHRjJyBmcm9tIGlucHV0IFEKK3N0YXRpYyBj b25zdCB1aW50MTZfdCB0Y3RhYmxlWzY2XSA9IHsKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs CisgICAgICAwLCAgIDAsICAgMywgICA0LCAgIDQsICAgNCwgICA0LCAgIDUsICAgNSwgICA1LCAg IDUsICAgNywgICA3LCAgIDgsICAgOSwgIDEwLAorICAgICAxMCwgIDExLCAgMTMsICAxNCwgIDE1 LCAgMTcsICAxOSwgIDIxLCAgMjQsICAyNSwgIDI5LCAgMzMsICAzNiwgIDQxLCAgNDUsICA1MSwK KyAgICAgNTcsICA2NCwgIDcxLCAgODAsICA4OSwgMTAwLCAxMTIsIDEyNSwgMTQxLCAxNTcsIDE3 NywgMTk4LCAyMjIsIDI1MCwgMjgwLCAzMTQsCisgICAgMzUyLCAzOTUsCisKK307CisKKy8vVGFi bGUgNDMgRGVyaXZhdGlvbiBvZiB0aHJlc2hvbGQgdmFyaWFibGVzIGJldGEnIGFuZCB0YycgZnJv bSBpbnB1dCBRCitzdGF0aWMgY29uc3QgdWludDhfdCBiZXRhdGFibGVbNjRdID0geworICAgICAg MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs ICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAg MTIsICAxMywgIDE0LCAgMTUsICAxNiwgIDE3LCAgMTgsICAyMCwgIDIyLCAgMjQsCisgICAgIDI2 LCAgMjgsICAzMCwgIDMyLCAgMzQsICAzNiwgIDM4LCAgNDAsICA0MiwgIDQ0LCAgNDYsICA0OCwg IDUwLCAgNTIsICA1NCwgIDU2LAorICAgICA1OCwgIDYwLCAgNjIsICA2NCwgIDY2LCAgNjgsICA3 MCwgIDcyLCAgNzQsICA3NiwgIDc4LCAgODAsICA4MiwgIDg0LCAgODYsICA4OCwKK307CisKKwor c3RhdGljIGludCBnZXRfcVBjKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCB4 MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgY2hyb21hKQoreworICAgIGNvbnN0IGludCB4ICAg ICAgICAgICAgID0geDAgPj4gTUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IHkgICAgICAgICAg ICAgPSB5MCA+PiBNSU5fVFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoICA9IGZj LT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICByZXR1cm4gZmMtPnRhYi5xcFtjaHJvbWFdW3gg KyB5ICogbWluX3R1X3dpZHRoXTsKK30KKworc3RhdGljIHZvaWQgY29weV9jdGIodWludDhfdCAq ZHN0LCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdo dCwKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IHNyY19z dHJpZGUpCit7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAg ICBtZW1jcHkoZHN0LCBzcmMsIHdpZHRoKTsKKworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsK KyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb3B5 X3BpeGVsKHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgcGl4ZWxf c2hpZnQpCit7CisgICAgaWYgKHBpeGVsX3NoaWZ0KQorICAgICAgICAqKHVpbnQxNl90ICopZHN0 ID0gKih1aW50MTZfdCAqKXNyYzsKKyAgICBlbHNlCisgICAgICAgICpkc3QgPSAqc3JjOworfQor CitzdGF0aWMgdm9pZCBjb3B5X3ZlcnQodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMs IGNvbnN0IGludCBwaXhlbF9zaGlmdCwgY29uc3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBwdHJk aWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUpCit7CisgICAgaW50 IGk7CisgICAgaWYgKHBpeGVsX3NoaWZ0ID09IDApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IGhlaWdodDsgaSsrKSB7CisgICAgICAgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgICAgICAgIGRz dCArPSBkc3Rfc3RyaWRlOworICAgICAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgICAg IH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsK KyAgICAgICAgICAgICoodWludDE2X3QgKilkc3QgPSAqKHVpbnQxNl90ICopc3JjOworICAgICAg ICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsK KyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgY29weV9jdGJfdG9faHYoVlZDRnJh bWVDb250ZXh0ICpmYywgY29uc3QgdWludDhfdCAqc3JjLAorICAgIGNvbnN0IHB0cmRpZmZfdCBz cmNfc3RyaWRlLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCB3aWR0aCwgY29u c3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBpbnQgY19pZHgsIGNvbnN0IGludCB4X2N0YiwgY29u c3QgaW50IHlfY3RiKQoreworICAgIGludCBwcyA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0Owor ICAgIGludCB3ICA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lk eF07CisgICAgaW50IGggID0gZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlm dFtjX2lkeF07CisKKyAgICAvKiBjb3B5IGhvcml6b250YWwgZWRnZXMgKi8KKyAgICBtZW1jcHko ZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hbY19pZHhdICsgKCgoMiAqIHlfY3RiKSAqIHcgKyB4 KSA8PCBwcyksCisgICAgICAgIHNyYywgd2lkdGggPDwgcHMpOworICAgIG1lbWNweShmYy0+dGFi LnNhb19waXhlbF9idWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9jdGIgKyAxKSAqIHcgKyB4KSA8 PCBwcyksCisgICAgICAgIHNyYyArIHNyY19zdHJpZGUgKiAoaGVpZ2h0IC0gMSksIHdpZHRoIDw8 IHBzKTsKKworICAgIC8qIGNvcHkgdmVydGljYWwgZWRnZXMgKi8KKyAgICBjb3B5X3ZlcnQoZmMt PnRhYi5zYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhdICsgKCgoMiAqIHhfY3RiKSAqIGggKyB5KSA8 PCBwcyksIHNyYywgcHMsIGhlaWdodCwgMSA8PCBwcywgc3JjX3N0cmlkZSk7CisKKyAgICBjb3B5 X3ZlcnQoZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhdICsgKCgoMiAqIHhfY3RiICsg MSkgKiBoICsgeSkgPDwgcHMpLCBzcmMgKyAoKHdpZHRoIC0gMSkgPDwgcHMpLCBwcywgaGVpZ2h0 LCAxIDw8IHBzLCBzcmNfc3RyaWRlKTsKK30KKwordm9pZCBmZl92dmNfc2FvX2ZpbHRlcihWVkNM b2NhbENvbnRleHQgKmxjLCBpbnQgeCwgaW50IHkpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpm YyAgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50IGN0Yl9zaXplX3kgPSBmYy0+cHMuc3BzLT5jdGJf c2l6ZV95OworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHNhb190YWJbMTZdID0geyAwLCAxLCAy LCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA4LCA4IH07CisgICAgaW50IGNfaWR4 OworICAgIGludCBlZGdlc1s0XTsgIC8vIDAgbGVmdCAxIHRvcCAyIHJpZ2h0IDMgYm90dG9tCisg ICAgaW50IHhfY3RiICAgICAgICAgICAgICAgID0geCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9z aXplX3k7CisgICAgaW50IHlfY3RiICAgICAgICAgICAgICAgID0geSA+PiBmYy0+cHMuc3BzLT5j dGJfbG9nMl9zaXplX3k7CisgICAgU0FPUGFyYW1zICpzYW8gICAgICAgICAgID0gJkNUQihmYy0+ dGFiLnNhbywgeF9jdGIsIHlfY3RiKTsKKyAgICAvLyBmbGFncyBpbmRpY2F0aW5nIHVuZmlsdGVy YWJsZSBlZGdlcworICAgIHVpbnQ4X3QgdmVydF9lZGdlW10gICAgICA9IHsgMCwgMCB9OworICAg IHVpbnQ4X3QgaG9yaXpfZWRnZVtdICAgICA9IHsgMCwgMCB9OworICAgIHVpbnQ4X3QgZGlhZ19l ZGdlW10gICAgICA9IHsgMCwgMCwgMCwgMCB9OworICAgIHVpbnQ4X3QgbGZhc2UgICAgICAgICAg ICA9IGZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRf ZmxhZzsKKyAgICB1aW50OF90IG5vX3RpbGVfZmlsdGVyICAgPSBmYy0+cHMucHBzLT5yLT5udW1f dGlsZXNfaW5fcGljID4gMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmYy0+ cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZzsKKyAg ICB1aW50OF90IHJlc3RvcmUgICAgICAgICAgPSBub190aWxlX2ZpbHRlciB8fCAhbGZhc2U7Cisg ICAgdWludDhfdCBsZWZ0X3RpbGVfZWRnZSAgID0gMDsKKyAgICB1aW50OF90IHJpZ2h0X3RpbGVf ZWRnZSAgPSAwOworICAgIHVpbnQ4X3QgdXBfdGlsZV9lZGdlICAgICA9IDA7CisgICAgdWludDhf dCBib3R0b21fdGlsZV9lZGdlID0gMDsKKworICAgIGVkZ2VzW0xFRlRdICAgPSB4X2N0YiA9PSAw OworICAgIGVkZ2VzW1RPUF0gICAgPSB5X2N0YiA9PSAwOworICAgIGVkZ2VzW1JJR0hUXSAgPSB4 X2N0YiA9PSBmYy0+cHMucHBzLT5jdGJfd2lkdGggIC0gMTsKKyAgICBlZGdlc1tCT1RUT01dID0g eV9jdGIgPT0gZmMtPnBzLnBwcy0+Y3RiX2hlaWdodCAtIDE7CisKKyAgICBpZiAocmVzdG9yZSkg eworICAgICAgICBpZiAoIWVkZ2VzW0xFRlRdKSB7CisgICAgICAgICAgICBsZWZ0X3RpbGVfZWRn ZSAgPSBub190aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3hfY3RiXSA9 PSB4X2N0YjsKKyAgICAgICAgICAgIHZlcnRfZWRnZVswXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZj LT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwg eF9jdGIgLSAxLCB5X2N0YikpIHx8IGxlZnRfdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAg IGlmICghZWRnZXNbUklHSFRdKSB7CisgICAgICAgICAgICByaWdodF90aWxlX2VkZ2UgPSBub190 aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3hfY3RiXSAhPSBmYy0+cHMu cHBzLT5jdGJfdG9fY29sX2JkW3hfY3RiICsgMV07CisgICAgICAgICAgICB2ZXJ0X2VkZ2VbMV0g ICAgPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBD VEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiICsgMSwgeV9jdGIpKSB8fCByaWdodF90aWxlX2Vk Z2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdlc1tUT1BdKSB7CisgICAgICAgICAgICB1 cF90aWxlX2VkZ2UgICAgID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX3Jv d19iZFt5X2N0Yl0gPT0geV9jdGI7CisgICAgICAgICAgICBob3Jpel9lZGdlWzBdICAgID0gKCFs ZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50 YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIgLSAxKSkgfHwgdXBfdGlsZV9lZGdlOworICAgICAg ICB9CisgICAgICAgIGlmICghZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgYm90dG9tX3Rp bGVfZWRnZSA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbeV9j dGJdICE9IGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbeV9jdGIgKyAxXTsKKyAgICAgICAgICAg IGhvcml6X2VkZ2VbMV0gICAgPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9j dGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YiArIDEpKSB8 fCBib3R0b21fdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbTEVGVF0g JiYgIWVkZ2VzW1RPUF0pIHsKKyAgICAgICAgICAgIGRpYWdfZWRnZVswXSA9ICghbGZhc2UgJiYg Q1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNl X2lkeCwgeF9jdGIgLSAxLCB5X2N0YiAtIDEpKSB8fCBsZWZ0X3RpbGVfZWRnZSB8fCB1cF90aWxl X2VkZ2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdlc1tUT1BdICYmICFlZGdlc1tSSUdI VF0pIHsKKyAgICAgICAgICAgIGRpYWdfZWRnZVsxXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIu c2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIg KyAxLCB5X2N0YiAtIDEpKSB8fCByaWdodF90aWxlX2VkZ2UgfHwgdXBfdGlsZV9lZGdlOworICAg ICAgICB9CisgICAgICAgIGlmICghZWRnZXNbUklHSFRdICYmICFlZGdlc1tCT1RUT01dKSB7Cisg ICAgICAgICAgICBkaWFnX2VkZ2VbMl0gPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lk eCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiICsgMSwgeV9j dGIgKyAxKSkgfHwgcmlnaHRfdGlsZV9lZGdlIHx8IGJvdHRvbV90aWxlX2VkZ2U7CisgICAgICAg IH0KKyAgICAgICAgaWYgKCFlZGdlc1tMRUZUXSAmJiAhZWRnZXNbQk9UVE9NXSkgeworICAgICAg ICAgICAgZGlhZ19lZGdlWzNdID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhf Y3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiAtIDEsIHlfY3RiICsg MSkpIHx8IGxlZnRfdGlsZV9lZGdlIHx8IGJvdHRvbV90aWxlX2VkZ2U7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBmb3IgKGNfaWR4ID0gMDsgY19pZHggPCAoZmMtPnBzLnNwcy0+ci0+c3BzX2No cm9tYV9mb3JtYXRfaWRjID8gMyA6IDEpOyBjX2lkeCsrKSB7CisgICAgICAgIGludCB4MCAgICAg ICA9IHggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgaW50IHkwICAgICAg ID0geSA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBwdHJkaWZmX3Qgc3Jj X3N0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAgICAgICBpbnQgY3RiX3Np emVfaCA9IGN0Yl9zaXplX3kgPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAg aW50IGN0Yl9zaXplX3YgPSBjdGJfc2l6ZV95ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07 CisgICAgICAgIGludCB3aWR0aCAgICA9IEZGTUlOKGN0Yl9zaXplX2gsIChmYy0+cHMuc3BzLT53 aWR0aCAgPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XSkgLSB4MCk7CisgICAgICAgIGludCBo ZWlnaHQgICA9IEZGTUlOKGN0Yl9zaXplX3YsIChmYy0+cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBz LnNwcy0+dnNoaWZ0W2NfaWR4XSkgLSB5MCk7CisgICAgICAgIGludCB0YWIgICAgICA9IHNhb190 YWJbKEZGQUxJR04od2lkdGgsIDgpID4+IDMpIC0gMV07CisgICAgICAgIHVpbnQ4X3QgKnNyYyA9 ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdW3kwICogc3JjX3N0cmlkZSArICh4MCA8PCBmYy0+cHMu c3BzLT5waXhlbF9zaGlmdCldOworICAgICAgICBwdHJkaWZmX3QgZHN0X3N0cmlkZTsKKyAgICAg ICAgdWludDhfdCAqZHN0OworCisgICAgICAgIHN3aXRjaCAoc2FvLT50eXBlX2lkeFtjX2lkeF0p IHsKKyAgICAgICAgY2FzZSBTQU9fQkFORDoKKyAgICAgICAgICAgIGNvcHlfY3RiX3RvX2h2KGZj LCBzcmMsIHNyY19zdHJpZGUsIHgwLCB5MCwgd2lkdGgsIGhlaWdodCwgY19pZHgsIHhfY3RiLCB5 X2N0Yik7CisgICAgICAgICAgICBmYy0+dnZjZHNwLnNhby5iYW5kX2ZpbHRlclt0YWJdKHNyYywg c3JjLCBzcmNfc3RyaWRlLCBzcmNfc3RyaWRlLAorICAgICAgICAgICAgICAgIHNhby0+b2Zmc2V0 X3ZhbFtjX2lkeF0sIHNhby0+YmFuZF9wb3NpdGlvbltjX2lkeF0sIHdpZHRoLCBoZWlnaHQpOwor ICAgICAgICAgICAgc2FvLT50eXBlX2lkeFtjX2lkeF0gPSBTQU9fQVBQTElFRDsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNBT19FREdFOgorICAgICAgICB7CisgICAgICAgICAg ICBpbnQgdyA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07 CisgICAgICAgICAgICBpbnQgaCA9IGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52 c2hpZnRbY19pZHhdOworICAgICAgICAgICAgaW50IHNoID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hp ZnQ7CisgICAgICAgICAgICBpbnQgbGVmdF9waXhlbHMsIHJpZ2h0X3BpeGVsczsKKworICAgICAg ICAgICAgZHN0X3N0cmlkZSA9IDIqTUFYX1BCX1NJWkUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElO R19TSVpFOworICAgICAgICAgICAgZHN0ID0gbGMtPnNhb19idWZmZXIgKyBkc3Rfc3RyaWRlICsg QVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRTsKKworICAgICAgICAgICAgaWYgKCFlZGdlc1tU T1BdKSB7CisgICAgICAgICAgICAgICAgaW50IGxlZnQgPSAxIC0gZWRnZXNbTEVGVF07CisgICAg ICAgICAgICAgICAgaW50IHJpZ2h0ID0gMSAtIGVkZ2VzW1JJR0hUXTsKKyAgICAgICAgICAgICAg ICBjb25zdCB1aW50OF90ICpzcmMxWzJdOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdDE7 CisgICAgICAgICAgICAgICAgaW50IHNyY19pZHgsIHBvczsKKworICAgICAgICAgICAgICAgIGRz dDEgPSBkc3QgLSBkc3Rfc3RyaWRlIC0gKGxlZnQgPDwgc2gpOworICAgICAgICAgICAgICAgIHNy YzFbMF0gPSBzcmMgLSBzcmNfc3RyaWRlIC0gKGxlZnQgPDwgc2gpOworICAgICAgICAgICAgICAg IHNyYzFbMV0gPSBmYy0+dGFiLnNhb19waXhlbF9idWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9j dGIgLSAxKSAqIHcgKyB4MCAtIGxlZnQpIDw8IHNoKTsKKyAgICAgICAgICAgICAgICBwb3MgPSAw OworICAgICAgICAgICAgICAgIGlmIChsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIHNyY19p ZHggPSAoQ1RCKGZjLT50YWIuc2FvLCB4X2N0Yi0xLCB5X2N0Yi0xKS50eXBlX2lkeFtjX2lkeF0g PT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQU9fQVBQTElFRCk7CisgICAgICAg ICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSwgc3JjMVtzcmNfaWR4XSwgc2gpOworICAgICAg ICAgICAgICAgICAgICBwb3MgKz0gKDEgPDwgc2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBzcmNfaWR4ID0gKENUQihmYy0+dGFiLnNhbywgeF9jdGIsIHlfY3RiLTEpLnR5 cGVfaWR4W2NfaWR4XSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FPX0FQUExJRUQp OworICAgICAgICAgICAgICAgIG1lbWNweShkc3QxICsgcG9zLCBzcmMxW3NyY19pZHhdICsgcG9z LCB3aWR0aCA8PCBzaCk7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7CisgICAgICAgICAg ICAgICAgICAgIHBvcyArPSB3aWR0aCA8PCBzaDsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2lk eCA9IChDVEIoZmMtPnRhYi5zYW8sIHhfY3RiKzEsIHlfY3RiLTEpLnR5cGVfaWR4W2NfaWR4XSA9 PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBT19BUFBMSUVEKTsKKyAgICAgICAg ICAgICAgICAgICAgY29weV9waXhlbChkc3QxICsgcG9zLCBzcmMxW3NyY19pZHhdICsgcG9zLCBz aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFl ZGdlc1tCT1RUT01dKSB7CisgICAgICAgICAgICAgICAgaW50IGxlZnQgPSAxIC0gZWRnZXNbTEVG VF07CisgICAgICAgICAgICAgICAgaW50IHJpZ2h0ID0gMSAtIGVkZ2VzW1JJR0hUXTsKKyAgICAg ICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMxWzJdOworICAgICAgICAgICAgICAgIHVpbnQ4 X3QgKmRzdDE7CisgICAgICAgICAgICAgICAgaW50IHNyY19pZHgsIHBvczsKKworICAgICAgICAg ICAgICAgIGRzdDEgPSBkc3QgKyBoZWlnaHQgKiBkc3Rfc3RyaWRlIC0gKGxlZnQgPDwgc2gpOwor ICAgICAgICAgICAgICAgIHNyYzFbMF0gPSBzcmMgKyBoZWlnaHQgKiBzcmNfc3RyaWRlIC0gKGxl ZnQgPDwgc2gpOworICAgICAgICAgICAgICAgIHNyYzFbMV0gPSBmYy0+dGFiLnNhb19waXhlbF9i dWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9jdGIgKyAyKSAqIHcgKyB4MCAtIGxlZnQpIDw8IHNo KTsKKyAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAgIGlmIChsZWZ0KSB7 CisgICAgICAgICAgICAgICAgICAgIHNyY19pZHggPSAoQ1RCKGZjLT50YWIuc2FvLCB4X2N0Yi0x LCB5X2N0YisxKS50eXBlX2lkeFtjX2lkeF0gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTQU9fQVBQTElFRCk7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSwg c3JjMVtzcmNfaWR4XSwgc2gpOworICAgICAgICAgICAgICAgICAgICBwb3MgKz0gKDEgPDwgc2gp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcmNfaWR4ID0gKENUQihmYy0+ dGFiLnNhbywgeF9jdGIsIHlfY3RiKzEpLnR5cGVfaWR4W2NfaWR4XSA9PQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgU0FPX0FQUExJRUQpOworICAgICAgICAgICAgICAgIG1lbWNweShkc3Qx ICsgcG9zLCBzcmMxW3NyY19pZHhdICsgcG9zLCB3aWR0aCA8PCBzaCk7CisgICAgICAgICAgICAg ICAgaWYgKHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIHBvcyArPSB3aWR0aCA8PCBzaDsK KyAgICAgICAgICAgICAgICAgICAgc3JjX2lkeCA9IChDVEIoZmMtPnRhYi5zYW8sIHhfY3RiKzEs IHlfY3RiKzEpLnR5cGVfaWR4W2NfaWR4XSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNBT19BUFBMSUVEKTsKKyAgICAgICAgICAgICAgICAgICAgY29weV9waXhlbChkc3QxICsg cG9zLCBzcmMxW3NyY19pZHhdICsgcG9zLCBzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgbGVmdF9waXhlbHMgPSAwOworICAgICAgICAgICAgaWYgKCFl ZGdlc1tMRUZUXSkgeworICAgICAgICAgICAgICAgIGlmIChDVEIoZmMtPnRhYi5zYW8sIHhfY3Ri LTEsIHlfY3RiKS50eXBlX2lkeFtjX2lkeF0gPT0gU0FPX0FQUExJRUQpIHsKKyAgICAgICAgICAg ICAgICAgICAgY29weV92ZXJ0KGRzdCAtICgxIDw8IHNoKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl92W2NfaWR4XSArICgoKDIgKiB4X2N0 YiAtIDEpICogaCArIHkwKSA8PCBzaCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCAxIDw8IHNoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICBsZWZ0X3BpeGVscyA9IDE7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmlnaHRfcGl4ZWxzID0gMDsKKyAgICAgICAg ICAgIGlmICghZWRnZXNbUklHSFRdKSB7CisgICAgICAgICAgICAgICAgaWYgKENUQihmYy0+dGFi LnNhbywgeF9jdGIrMSwgeV9jdGIpLnR5cGVfaWR4W2NfaWR4XSA9PSBTQU9fQVBQTElFRCkgewor ICAgICAgICAgICAgICAgICAgICBjb3B5X3ZlcnQoZHN0ICsgKHdpZHRoIDw8IHNoKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl92W2NfaWR4 XSArICgoKDIgKiB4X2N0YiArIDIpICogaCArIHkwKSA8PCBzaCksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCAxIDw8IHNoKTsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByaWdodF9waXhlbHMgPSAxOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29weV9jdGIo ZHN0IC0gKGxlZnRfcGl4ZWxzIDw8IHNoKSwKKyAgICAgICAgICAgICAgICAgICAgIHNyYyAtIChs ZWZ0X3BpeGVscyA8PCBzaCksCisgICAgICAgICAgICAgICAgICAgICAod2lkdGggKyBsZWZ0X3Bp eGVscyArIHJpZ2h0X3BpeGVscykgPDwgc2gsCisgICAgICAgICAgICAgICAgICAgICBoZWlnaHQs IGRzdF9zdHJpZGUsIHNyY19zdHJpZGUpOworCisgICAgICAgICAgICBjb3B5X2N0Yl90b19odihm Yywgc3JjLCBzcmNfc3RyaWRlLCB4MCwgeTAsIHdpZHRoLCBoZWlnaHQsIGNfaWR4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgeF9jdGIsIHlfY3RiKTsKKyAgICAgICAgICAgIGZjLT52dmNk c3Auc2FvLmVkZ2VfZmlsdGVyW3RhYl0oc3JjLCBkc3QsIHNyY19zdHJpZGUsIHNhby0+b2Zmc2V0 X3ZhbFtjX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNhby0+ZW9fY2xhc3NbY19pZHhdLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGZjLT52 dmNkc3Auc2FvLmVkZ2VfcmVzdG9yZVtyZXN0b3JlXShzcmMsIGRzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHJpZGUsIGRzdF9zdHJpZGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlcywgd2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln aHQsIGNfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmVydF9lZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaG9yaXpfZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpYWdfZWRnZSk7CisgICAgICAgICAgICBzYW8tPnR5cGVfaWR4W2NfaWR4XSA9 IFNBT19BUFBMSUVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KK30KKworI2RlZmluZSBUQUJfQlModCwgeCwgeSkgICAgICh0KVsoKHkpID4+IDIpICog KGZjLT50YWIuYnNfd2lkdGgpICsgKCh4KSA+PiAyKV0KKyNkZWZpbmUgVEFCX01BWF9MRU4odCwg eCwgeSkgICh0KVsoKHkpID4+IDIpICogKGZjLT50YWIuYnNfd2lkdGgpICsgKCh4KSA+PiAyKV0K KworLy84IHNhbXBsZXMgYSB0aW1lCisjZGVmaW5lIERFQkxPQ0tfU1RFUCAgICAgICAgICAgIDgK KyNkZWZpbmUgTFVNQV9HUklEICAgICAgICAgICAgICAgNAorI2RlZmluZSBDSFJPTUFfR1JJRCAg ICAgICAgICAgICA4CisKK3N0YXRpYyBpbnQgYm91bmRhcnlfc3RyZW5ndGgoY29uc3QgVlZDTG9j YWxDb250ZXh0ICpsYywgTXZGaWVsZCAqY3VyciwgTXZGaWVsZCAqbmVpZ2gsCisgICAgY29uc3Qg UmVmUGljTGlzdCAqbmVpZ2hfcnBsKQoreworICAgIFJlZlBpY0xpc3QgKnJwbCA9IGxjLT5zYy0+ cnBsOworICAgIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfQkkgJiYgIG5laWdoLT5wcmVkX2Zs YWcgPT0gUEZfQkkpIHsKKyAgICAgICAgLy8gc2FtZSBMMCBhbmQgTDEKKyAgICAgICAgaWYgKHJw bFswXS5saXN0W2N1cnItPnJlZl9pZHhbMF1dID09IG5laWdoX3JwbFswXS5saXN0W25laWdoLT5y ZWZfaWR4WzBdXSAgJiYKKyAgICAgICAgICAgIHJwbFswXS5saXN0W2N1cnItPnJlZl9pZHhbMF1d ID09IHJwbFsxXS5saXN0W2N1cnItPnJlZl9pZHhbMV1dICYmCisgICAgICAgICAgICBuZWlnaF9y cGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV0gPT0gbmVpZ2hfcnBsWzFdLmxpc3RbbmVpZ2gt PnJlZl9pZHhbMV1dKSB7CisgICAgICAgICAgICBpZiAoKEZGQUJTKG5laWdoLT5tdlswXS54IC0g Y3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0ueSAtIGN1cnItPm12WzBd LnkpID49IDggfHwKKyAgICAgICAgICAgICAgICAgRkZBQlMobmVpZ2gtPm12WzFdLnggLSBjdXJy LT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vyci0+bXZbMV0ueSkg Pj0gOCkgJiYKKyAgICAgICAgICAgICAgICAoRkZBQlMobmVpZ2gtPm12WzFdLnggLSBjdXJyLT5t dlswXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vyci0+bXZbMF0ueSkgPj0g OCB8fAorICAgICAgICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzFd LngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KSkK KyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChuZWlnaF9ycGxbMF0ubGlzdFtuZWln aC0+cmVmX2lkeFswXV0gPT0gcnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gJiYKKyAgICAg ICAgICAgICAgICAgICBuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV0gPT0gcnBs WzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAgICAgIGlmIChGRkFCUyhuZWln aC0+bXZbMF0ueCAtIGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzBdLnkg LSBjdXJyLT5tdlswXS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAgRkZBQlMobmVpZ2gtPm12 WzFdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vy ci0+bXZbMV0ueSkgPj0gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChuZWln aF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV0gPT0gcnBsWzBdLmxpc3RbY3Vyci0+cmVm X2lkeFswXV0gJiYKKyAgICAgICAgICAgICAgICAgICBuZWlnaF9ycGxbMF0ubGlzdFtuZWlnaC0+ cmVmX2lkeFswXV0gPT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAg ICAgIGlmIChGRkFCUyhuZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzBdLngpID49IDggfHwgRkZB QlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8CisgICAgICAgICAgICAg ICAgRkZBQlMobmVpZ2gtPm12WzBdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5l aWdoLT5tdlswXS55IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkKKyAgICAgICAgICAgICAgICByZXR1 cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfSBlbHNl IGlmICgoY3Vyci0+cHJlZF9mbGFnICE9IFBGX0JJKSAmJiAobmVpZ2gtPnByZWRfZmxhZyAhPSBQ Rl9CSSkpeyAvLyAxIE1WCisgICAgICAgIE12IEEsIEI7CisgICAgICAgIGludCByZWZfQSwgcmVm X0I7CisKKyAgICAgICAgaWYgKGN1cnItPnByZWRfZmxhZyAmIDEpIHsKKyAgICAgICAgICAgIEEg ICAgID0gY3Vyci0+bXZbMF07CisgICAgICAgICAgICByZWZfQSA9IHJwbFswXS5saXN0W2N1cnIt PnJlZl9pZHhbMF1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQSAgICAgPSBjdXJy LT5tdlsxXTsKKyAgICAgICAgICAgIHJlZl9BID0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsx XV07CisgICAgICAgIH0KKworICAgICAgICBpZiAobmVpZ2gtPnByZWRfZmxhZyAmIDEpIHsKKyAg ICAgICAgICAgIEIgICAgID0gbmVpZ2gtPm12WzBdOworICAgICAgICAgICAgcmVmX0IgPSBuZWln aF9ycGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV07CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBCICAgICA9IG5laWdoLT5tdlsxXTsKKyAgICAgICAgICAgIHJlZl9CID0gbmVpZ2hf cnBsWzFdLmxpc3RbbmVpZ2gtPnJlZl9pZHhbMV1dOworICAgICAgICB9CisKKyAgICAgICAgaWYg KHJlZl9BID09IHJlZl9CKSB7CisgICAgICAgICAgICBpZiAoRkZBQlMoQS54IC0gQi54KSA+PSA4 IHx8IEZGQUJTKEEueSAtIEIueSkgPj0gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNl CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworLy9w YXJ0IG9mIDguOC4zLjMgRGVyaXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5zZm9ybSBibG9jayBib3Vu ZGFyeQorc3RhdGljIHZvaWQgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3RoX2x1bWEoY29uc3QgVlZD RnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHF4LCBjb25zdCBpbnQgcXksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfaW50cmEsIGNvbnN0 IGludCBoYXNfc3ViYmxvY2ssIGNvbnN0IGludCB2ZXJ0aWNhbCwgdWludDhfdCAqbWF4X2xlbl9w LCB1aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgaW50IHB4ID0gIHZlcnRpY2FsID8g cXggLSAxIDogcXg7CisgICAgY29uc3QgaW50IHB5ID0gIXZlcnRpY2FsID8gcXkgLSAxIDogcXk7 CisgICAgY29uc3QgdWludDhfdCAqdGJfc2l6ZSA9IHZlcnRpY2FsID8gZmMtPnRhYi50Yl93aWR0 aFtMVU1BXSA6IGZjLT50YWIudGJfaGVpZ2h0W0xVTUFdOworICAgIGNvbnN0IGludCBzaXplX3Ag PSB0Yl9zaXplWyhweSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGgg KyAocHggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgc2l6ZV9xID0gdGJfc2l6ZVso cXkgPj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgKHF4ID4+IE1J Tl9UVV9MT0cyKV07CisgICAgY29uc3QgaW50IG1pbl9jYl9sb2cyID0gZmMtPnBzLnNwcy0+bWlu X2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBvZmZfcCA9IChweSA+PiBtaW5fY2JfbG9n MikgKiBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGggKyAocHggPj4gbWluX2NiX2xvZzIpOworICAg IGlmIChzaXplX3AgPD0gNCB8fCBzaXplX3EgPD0gNCkgeworICAgICAgICAqbWF4X2xlbl9wID0g Km1heF9sZW5fcSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKm1heF9sZW5fcCA9ICptYXhf bGVuX3EgPSAzOworICAgICAgICBpZiAoc2l6ZV9wID49IDMyKQorICAgICAgICAgICAgKm1heF9s ZW5fcCA9IDc7CisgICAgICAgIGlmIChzaXplX3EgPj0gMzIpCisgICAgICAgICAgICAqbWF4X2xl bl9xID0gNzsKKyAgICB9CisgICAgaWYgKGhhc19zdWJibG9jaykKKyAgICAgICAgKm1heF9sZW5f cSA9IEZGTUlOKDUsICptYXhfbGVuX3EpOworICAgIGlmIChmYy0+dGFiLm1zZltvZmZfcF0gfHwg ZmMtPnRhYi5pYWZbb2ZmX3BdKQorICAgICAgICAqbWF4X2xlbl9wID0gRkZNSU4oNSwgKm1heF9s ZW5fcCk7Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX3N1YmJsb2NrX2JzX3ZlcnRpY2Fs KGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IGNiX3gsIGNvbnN0IGlu dCBjYl95LCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25z dCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAgKmZjICA9IGxjLT5m YzsKKyAgICBNdkZpZWxkICp0YWJfbXZmICAgICAgICAgICAgPSBmYy0+dGFiLm12ZjsKKyAgICBS ZWZQaWNMaXN0ICpycGwgICAgICAgICAgICAgPSBsYy0+c2MtPnJwbDsKKyAgICBjb25zdCBpbnQg bWluX3B1X3dpZHRoICAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3Qg aW50IGxvZzJfbWluX3B1X3NpemUgID0gTUlOX1BVX0xPRzI7CisgICAgdWludDhfdCBtYXhfbGVu X3AsIG1heF9sZW5fcTsKKyAgICBpbnQgYnMsIGksIGo7CisKKyAgICAvLyBicyBmb3IgVFUgaW50 ZXJuYWwgdmVydGljYWwgUFUgYm91bmRhcmllcworICAgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7 IGogKz0gNCkgeworICAgICAgICBpbnQgeV9wdSA9ICh5MCArIGopID4+IGxvZzJfbWluX3B1X3Np emU7CisKKyAgICAgICAgZm9yIChpID0gOCAtICgoeDAgLSBjYl94KSAlIDgpOyBpIDwgd2lkdGg7 IGkgKz0gOCkgeworICAgICAgICAgICAgaW50IHhwX3B1ID0gKHgwICsgaSAtIDEpID4+IGxvZzJf bWluX3B1X3NpemU7CisgICAgICAgICAgICBpbnQgeHFfcHUgPSAoeDAgKyBpKSAgICAgPj4gbG9n Ml9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1 ICogbWluX3B1X3dpZHRoICsgeHBfcHVdOworICAgICAgICAgICAgTXZGaWVsZCAqY3VyciA9ICZ0 YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cV9wdV07CisgICAgICAgICAgICBjb25zdCBp bnQgeCA9IHgwICsgaTsKKyAgICAgICAgICAgIGNvbnN0IGludCB5ID0geTAgKyBqOworCisgICAg ICAgICAgICBicyA9IGJvdW5kYXJ5X3N0cmVuZ3RoKGxjLCBjdXJyLCBsZWZ0LCBycGwpOworICAg ICAgICAgICAgVEFCX0JTKGZjLT50YWIudmVydGljYWxfYnNbTFVNQV0sIHgsIHkpID0gYnM7CisK KworICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMDsKKyAgICAgICAgICAgIGlm IChpID09IDQgfHwgaSA9PSB3aWR0aCAtIDQpCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0g bWF4X2xlbl9xID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gOCB8fCBpID09IHdpZHRo IC0gOCkKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAyOworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDM7CisK KyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxfcCwgeCwgeSkgPSBtYXhf bGVuX3A7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3EsIHgsIHkp ID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2dmNfZGVi bG9ja19zdWJibG9ja19ic19ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisg ICAgY29uc3QgaW50IGNiX3gsIGNvbnN0IGludCBjYl95LCBjb25zdCBpbnQgeDAsIGNvbnN0IGlu dCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZW Q0ZyYW1lQ29udGV4dCAgKmZjICA9IGxjLT5mYzsKKyAgICBNdkZpZWxkKiB0YWJfbXZmICAgICAg ICAgICAgPSBmYy0+dGFiLm12ZjsKKyAgICBSZWZQaWNMaXN0KiBycGwgICAgICAgICAgICAgPSBs Yy0+c2MtPnJwbDsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICAgPSBmYy0+cHMucHBz LT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUgID0gTUlOX1BV X0xPRzI7CisgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKyAgICBpbnQgYnMsIGks IGo7CisKKyAgICAvLyBicyBmb3IgVFUgaW50ZXJuYWwgaG9yaXpvbnRhbCBQVSBib3VuZGFyaWVz CisgICAgZm9yIChqID0gOCAtICgoeTAgLSBjYl95KSAlIDgpOyBqIDwgaGVpZ2h0OyBqICs9IDgp IHsKKyAgICAgICAgaW50IHlwX3B1ID0gKHkwICsgaiAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7 CisgICAgICAgIGludCB5cV9wdSA9ICh5MCArIGopICAgICA+PiBsb2cyX21pbl9wdV9zaXplOwor CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7CisgICAgICAgICAgICBp bnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBNdkZp ZWxkICp0b3AgID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAg ICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0aCArIHhf cHVdOworICAgICAgICAgICAgY29uc3QgaW50IHggPSB4MCArIGk7CisgICAgICAgICAgICBjb25z dCBpbnQgeSA9IHkwICsgajsKKworICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChs YywgY3VyciwgdG9wLCBycGwpOworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIuaG9yaXpvbnRh bF9ic1tMVU1BXSwgeCwgeSkgPSBiczsKKworICAgICAgICAgICAgLy9maXhtZToKKyAgICAgICAg ICAgIC8vZWRnZVRiRmxhZ3NbIHgg4oiSIHNiVyBdWyB5IF0gaXMgZXF1YWwgdG8gMQorICAgICAg ICAgICAgLy9lZGdlVGJGbGFnc1sgeCArIHNiVyBdWyB5IF0gaXMgZXF1YWwgdG8gMQorICAgICAg ICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMDsKKyAgICAgICAgICAgIGlmIChqID09IDQg fHwgaiA9PSBoZWlnaHQgLSA0KQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5f cSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChqID09IDggfHwgaiA9PSBoZWlnaHQgLSA4KQor ICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDI7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMzsKKyAgICAgICAg ICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9wLCB4LCB5KSA9IG1heF9sZW5fcDsK KyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9xLCB4LCB5KSA9IG1h eF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KKworfQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9j a19ic19sdW1hX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3Qg aW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkK K3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICA9IGxjLT5mYzsKKyAgICBNdkZpZWxk ICp0YWJfbXZmICAgICAgICAgICA9IGZjLT50YWIubXZmOworICAgIGNvbnN0IGludCBsb2cyX21p bl9wdV9zaXplID0gTUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3R1X3NpemUg PSBNSU5fVFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICA9IGZjLT5wcy5w cHMtPm1pbl9wdV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoICAgICA9IGZjLT5w cy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX2NiX2xvZzIgICAgICA9IGZj LT5wcy5zcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgbWluX2NiX3dpZHRo ICAgICA9IGZjLT5wcy5wcHMtPm1pbl9jYl93aWR0aDsKKyAgICBpbnQgaXNfaW50cmEgPSB0YWJf bXZmWyh5MCA+PiBsb2cyX21pbl9wdV9zaXplKSAqIG1pbl9wdV93aWR0aCArCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAoeDAgPj4gbG9nMl9taW5fcHVfc2l6ZSldLnByZWRfZmxhZyA9PSBQ Rl9JTlRSQTsKKyAgICBpbnQgYm91bmRhcnlfbGVmdDsKKyAgICBpbnQgaSwgYnMsIGhhc192ZXJ0 aWNhbF9zYiA9IDA7CisgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKworICAgIGNv bnN0IGludCBvZmZfcSAgICAgICAgICAgID0gKHkwID4+IG1pbl9jYl9sb2cyKSAqIG1pbl9jYl93 aWR0aCArICh4MCA+PiBtaW5fY2JfbG9nMik7CisgICAgY29uc3QgaW50IGNiX3ggICAgICAgICAg ICAgPSBmYy0+dGFiLmNiX3Bvc194W0xVTUFdW29mZl9xXTsKKyAgICBjb25zdCBpbnQgY2JfeSAg ICAgICAgICAgICA9IGZjLT50YWIuY2JfcG9zX3lbTFVNQV1bb2ZmX3FdOworICAgIGNvbnN0IGlu dCBjYl93aWR0aCAgICAgICAgID0gZmMtPnRhYi5jYl93aWR0aFtMVU1BXVtvZmZfcV07CisKKyAg ICBpZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltvZmZfcV0gfHwgZmMt PnRhYi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgaGFzX3ZlcnRpY2FsX3NiICAgPSBjYl93aWR0 aCAgPiA4OworICAgIH0KKworICAgIC8vIGJzIGZvciB2ZXJ0aWNhbCBUVSBib3VuZGFyaWVzCisg ICAgYm91bmRhcnlfbGVmdCA9IHgwID4gMCAmJiAhKHgwICYgMyk7CisgICAgaWYgKGJvdW5kYXJ5 X2xlZnQgJiYKKyAgICAgICAgKCghZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9z c19zbGljZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3Mg JiBCT1VOREFSWV9MRUZUX1NMSUNFICYmCisgICAgICAgICAgICAoeDAgJSAoMSA8PCBmYy0+cHMu c3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgICAgKCFmYy0+cHMucHBz LT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAg ICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFICYmCisgICAgICAg ICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSkpCisg ICAgICAgIGJvdW5kYXJ5X2xlZnQgPSAwOworCisgICAgaWYgKGJvdW5kYXJ5X2xlZnQpIHsKKyAg ICAgICAgY29uc3QgUmVmUGljTGlzdCAqcnBsX2xlZnQgPQorICAgICAgICAgICAgKGxjLT5ib3Vu ZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJQ0UpID8gZmZfdnZjX2dldF9yZWZfbGlzdChm YywgZmMtPnJlZiwgeDAgLSAxLCB5MCkgOiBsYy0+c2MtPnJwbDsKKyAgICAgICAgaW50IHhwX3B1 ID0gKHgwIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHhxX3B1ID0gIHgw ICAgICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHhwX3R1ID0gKHgwIC0gMSkg Pj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgaW50IHhxX3R1ID0gIHgwICAgICAgPj4gbG9n Ml9taW5fdHVfc2l6ZTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpICs9IDQp IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBvZmZfeCA9IGNiX3ggLSB4MDsKKyAgICAgICAgICAg IGludCB5X3B1ICAgICAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAg ICAgaW50IHlfdHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAg ICAgICBNdkZpZWxkICpsZWZ0ID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhwX3B1 XTsKKyAgICAgICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dp ZHRoICsgeHFfcHVdOworICAgICAgICAgICAgdWludDhfdCBsZWZ0X2NiZl9sdW1hID0gZmMtPnRh Yi50dV9jb2RlZF9mbGFnW0xVTUFdW3lfdHUgKiBtaW5fdHVfd2lkdGggKyB4cF90dV07CisgICAg ICAgICAgICB1aW50OF90IGN1cnJfY2JmX2x1bWEgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVN QV1beV90dSAqIG1pbl90dV93aWR0aCArIHhxX3R1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgcGNt ZiAgICAgICAgICA9IGZjLT50YWIucGNtZltMVU1BXVt5X3R1ICogbWluX3R1X3dpZHRoICsgeHBf dHVdICYmCisgICAgICAgICAgICAgICAgZmMtPnRhYi5wY21mW0xVTUFdW3lfdHUgKiBtaW5fdHVf d2lkdGggKyB4cV90dV07CisKKyAgICAgICAgICAgIGlmIChwY21mKQorICAgICAgICAgICAgICAg IGJzID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9JTlRS QSB8fCBsZWZ0LT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IGxl ZnQtPmNpaXBfZmxhZykKKyAgICAgICAgICAgICAgICBicyA9IDI7CisgICAgICAgICAgICBlbHNl IGlmIChjdXJyX2NiZl9sdW1hIHx8IGxlZnRfY2JmX2x1bWEpCisgICAgICAgICAgICAgICAgYnMg PSAxOworICAgICAgICAgICAgZWxzZSBpZiAob2ZmX3ggJiYgKChvZmZfeCAlIDgpIHx8ICFoYXNf dmVydGljYWxfc2IpKQorICAgICAgICAgICAgICAgIGJzID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8vL2luc2lkZSBhIGN1LCBub3QgYWxpZ25lZCB0byA4IG9yIHdp dGggbm8gc3ViYmxvY2tzCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnMgPSBi b3VuZGFyeV9zdHJlbmd0aChsYywgY3VyciwgbGVmdCwgcnBsX2xlZnQpOworCisgICAgICAgICAg ICBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tMVU1BXSwgeDAsICh5MCArIGkpKSA9IGJzOwor CisgICAgICAgICAgICBkZXJpdmVfbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShmYywgeDAsIHkwICsg aSwgaXNfaW50cmEsIGhhc192ZXJ0aWNhbF9zYiwgMSwgJm1heF9sZW5fcCwgJm1heF9sZW5fcSk7 CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3AsIHgwLCB5MCArIGkp ID0gbWF4X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0aWNhbF9x LCB4MCwgeTAgKyBpKSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh aXNfaW50cmEpIHsKKyAgICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9xXSB8fCBmYy0+dGFiLmlh ZltvZmZfcV0pCisgICAgICAgICAgICB2dmNfZGVibG9ja19zdWJibG9ja19ic192ZXJ0aWNhbChs YywgY2JfeCwgY2JfeSwgeDAsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisKK30KK3N0YXRp YyB2b2lkIHZ2Y19kZWJsb2NrX2JzX2x1bWFfaG9yaXpvbnRhbChjb25zdCBWVkNMb2NhbENvbnRl eHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgs IGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgPSBs Yy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgPSBmYy0+dGFiLm12ZjsKKyAg ICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGlu dCBsb2cyX21pbl90dV9zaXplID0gTUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93 aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1pbl90 dV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1p bl9jYl9sb2cyICAgICAgPSBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgY29u c3QgaW50IG1pbl9jYl93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGg7CisgICAg aW50IGlzX2ludHJhID0gdGFiX212ZlsoeTAgPj4gbG9nMl9taW5fcHVfc2l6ZSkgKiBtaW5fcHVf d2lkdGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHgwID4+IGxvZzJfbWluX3B1X3Np emUpXS5wcmVkX2ZsYWcgPT0gUEZfSU5UUkE7CisgICAgaW50IGJvdW5kYXJ5X3VwcGVyOworICAg IGludCBpLCBicywgaGFzX2hvcml6b250YWxfc2IgPSAwOworICAgIHVpbnQ4X3QgbWF4X2xlbl9w LCBtYXhfbGVuX3E7CisKKyAgICBjb25zdCBpbnQgb2ZmX3EgICAgICAgICAgICA9ICh5MCA+PiBt aW5fY2JfbG9nMikgKiBtaW5fY2Jfd2lkdGggKyAoeDAgPj4gbWluX2NiX2xvZzIpOworICAgIGNv bnN0IGludCBjYl94ICAgICAgICAgICAgID0gZmMtPnRhYi5jYl9wb3NfeFtMVU1BXVtvZmZfcV07 CisgICAgY29uc3QgaW50IGNiX3kgICAgICAgICAgICAgPSBmYy0+dGFiLmNiX3Bvc195W0xVTUFd W29mZl9xXTsKKyAgICBjb25zdCBpbnQgY2JfaGVpZ2h0ICAgICAgICA9IGZjLT50YWIuY2JfaGVp Z2h0W0xVTUFdW29mZl9xXTsKKworICAgIGlmICghaXNfaW50cmEpIHsKKyAgICAgICAgaWYgKGZj LT50YWIubXNmW29mZl9xXSB8fCBmYy0+dGFiLmlhZltvZmZfcV0pCisgICAgICAgICAgICBoYXNf aG9yaXpvbnRhbF9zYiA9IGNiX2hlaWdodCA+IDg7CisgICAgfQorCisgICAgYm91bmRhcnlfdXBw ZXIgPSB5MCA+IDAgJiYgISh5MCAmIDMpOworICAgIGlmIChib3VuZGFyeV91cHBlciAmJgorICAg ICAgICAoKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFi bGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQ UEVSX1NMSUNFICYmCisgICAgICAgICAgICAoeTAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9n Ml9zaXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgICAgKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9v cF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJv dW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfVElMRSAmJgorICAgICAgICAgICAgKHkwICUg KDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkpKQorICAgICAgICBib3Vu ZGFyeV91cHBlciA9IDA7CisKKyAgICBpZiAoYm91bmRhcnlfdXBwZXIpIHsKKyAgICAgICAgY29u c3QgUmVmUGljTGlzdCAqcnBsX3RvcCA9CisgICAgICAgICAgICAobGMtPmJvdW5kYXJ5X2ZsYWdz ICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpID8gZmZfdnZjX2dldF9yZWZfbGlzdChmYywgZmMtPnJl ZiwgeDAsIHkwIC0gMSkgOiBsYy0+c2MtPnJwbDsKKyAgICAgICAgaW50IHlwX3B1ID0gKHkwIC0g MSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3B1ID0gIHkwICAgICAgPj4g bG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHlwX3R1ID0gKHkwIC0gMSkgPj4gbG9nMl9t aW5fdHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3R1ID0gIHkwICAgICAgPj4gbG9nMl9taW5fdHVf c2l6ZTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkgKz0gNCkgeworICAgICAg ICAgICAgY29uc3QgaW50IG9mZl95ID0geTAgLSBjYl95OworICAgICAgICAgICAgaW50IHhfcHUg PSAoeDAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgaW50IHhfdHUgPSAo eDAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAgTXZGaWVsZCAqdG9wICA9 ICZ0YWJfbXZmW3lwX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07CisgICAgICAgICAgICBNdkZp ZWxkICpjdXJyID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAg ICAgICAgIHVpbnQ4X3QgdG9wX2NiZl9sdW1hICA9IGZjLT50YWIudHVfY29kZWRfZmxhZ1tMVU1B XVt5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdOworICAgICAgICAgICAgdWludDhfdCBjdXJy X2NiZl9sdW1hID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW0xVTUFdW3lxX3R1ICogbWluX3R1X3dp ZHRoICsgeF90dV07CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgICAgPSBmYy0+dGFi LnBjbWZbTFVNQV1beXBfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1XSAmJgorICAgICAgICAgICAg ICAgIGZjLT50YWIucGNtZltMVU1BXVt5cV90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdOworCisg ICAgICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICBicyA9IDA7CisgICAgICAgICAg ICBlbHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgdG9wLT5wcmVkX2ZsYWcg PT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IHRvcC0+Y2lpcF9mbGFnKQorICAgICAg ICAgICAgICAgIGJzID0gMjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJfY2JmX2x1bWEgfHwg dG9wX2NiZl9sdW1hKQorICAgICAgICAgICAgICAgIGJzID0gMTsKKyAgICAgICAgICAgIGVsc2Ug aWYgKG9mZl95ICYmICgob2ZmX3kgJSA4KSB8fCAhaGFzX2hvcml6b250YWxfc2IpKQorICAgICAg ICAgICAgICAgIGJzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9p bnNpZGUgYSBjdSwgbm90IGFsaWduZWQgdG8gOCBvciB3aXRoIG5vIHN1YmJsb2NrcworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJzID0gYm91bmRhcnlfc3RyZW5ndGgobGMsIGN1 cnIsIHRvcCwgcnBsX3RvcCk7CisKKyAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFiLmhvcml6b250 YWxfYnNbTFVNQV0sIHgwICsgaSwgeTApID0gYnM7CisKKyAgICAgICAgICAgIGRlcml2ZV9tYXhf ZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCB4MCArIGksIHkwLCBpc19pbnRyYSwgaGFzX2hvcml6b250 YWxfc2IsIDAsICZtYXhfbGVuX3AsICZtYXhfbGVuX3EpOworICAgICAgICAgICAgVEFCX01BWF9M RU4oZmMtPnRhYi5ob3Jpem9udGFsX3AsIHgwICsgaSwgeTApID0gbWF4X2xlbl9wOworICAgICAg ICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9udGFsX3EsIHgwICsgaSwgeTApID0gbWF4 X2xlbl9xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc19pbnRyYSkgeworICAgICAg ICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50YWIuaWFmW29mZl9xXSkKKyAgICAgICAg ICAgIHZ2Y19kZWJsb2NrX3N1YmJsb2NrX2JzX2hvcml6b250YWwobGMsIGNiX3gsIGNiX3ksIHgw LCB5MCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9j a19ic19jaHJvbWFfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25z dCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0 KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIE12Rmll bGQgKnRhYl9tdmYgICAgICAgICAgID0gZmMtPnRhYi5tdmY7CisgICAgY29uc3QgaW50IGxvZzJf bWluX3B1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fdHVfc2l6 ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgID0gZmMtPnBz LnBwcy0+bWluX3B1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggICAgID0gZmMt PnBzLnBwcy0+bWluX3R1X3dpZHRoOworICAgIGludCBib3VuZGFyeV9sZWZ0LCBpOworCisgICAg Ly8gYnMgZm9yIHZlcnRpY2FsIFRVIGJvdW5kYXJpZXMKKyAgICBib3VuZGFyeV9sZWZ0ID0geDAg PiAwICYmICEoeDAgJiAoKENIUk9NQV9HUklEIDw8IGZjLT5wcy5zcHMtPmhzaGlmdFsxXSkgLSAx KSk7CisgICAgaWYgKGJvdW5kYXJ5X2xlZnQgJiYKKyAgICAgICAgKCghZmMtPnBzLnBwcy0+ci0+ cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAg bGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9TTElDRSAmJgorICAgICAgICAgICh4 MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApIHx8CisgICAgICAg ICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9m bGFnICYmCisgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxF ICYmCisgICAgICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkg PT0gMCkpKQorICAgICAgICBib3VuZGFyeV9sZWZ0ID0gMDsKKworICAgIGlmIChib3VuZGFyeV9s ZWZ0KSB7CisgICAgICAgIGludCB4cF9wdSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7 CisgICAgICAgIGludCB4cV9wdSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAg ICAgIGludCB4cF90dSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgIGlu dCB4cV90dSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IGhlaWdodDsgaSArPSAyKSB7CisgICAgICAgICAgICBpbnQgeV9wdSAgICAgID0g KHkwICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGludCB5X3R1ICAgICAg PSAoeTAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAgTXZGaWVsZCAqbGVm dCA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cF9wdV07CisgICAgICAgICAgICBN dkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhxX3B1XTsKKyAg ICAgICAgICAgIGNvbnN0IGludCBsZWZ0X3R1ID0geV90dSAqIG1pbl90dV93aWR0aCArIHhwX3R1 OworICAgICAgICAgICAgY29uc3QgaW50IGN1cnJfdHUgPSB5X3R1ICogbWluX3R1X3dpZHRoICsg eHFfdHU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgPSBmYy0+dGFiLnBjbWZbQ0hS T01BXVtsZWZ0X3R1XSAmJiBmYy0+dGFiLnBjbWZbQ0hST01BXVtjdXJyX3R1XTsKKworICAgICAg ICAgICAgZm9yIChpbnQgYyA9IENCOyBjIDw9IENSOyBjKyspIHsKKyAgICAgICAgICAgICAgICB1 aW50OF90IGNiZiAgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bbGVmdF90dV0gfAorICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bY3Vycl90dV0gfAorICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1tsZWZ0X3R1 XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVfam9pbnRfY2Jjcl9yZXNpZHVhbF9m bGFnW2N1cnJfdHVdOworICAgICAgICAgICAgICAgIGludCBicyA9IDA7CisKKyAgICAgICAgICAg ICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAwOworICAgICAgICAgICAg ICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBsZWZ0LT5wcmVkX2Zs YWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IGxlZnQtPmNpaXBfZmxhZykKKyAg ICAgICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNiZikK KyAgICAgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgICAgIFRBQl9CUyhmYy0+ dGFiLnZlcnRpY2FsX2JzW2NdLCB4MCwgKHkwICsgaSkpID0gYnM7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX2JzX2Nocm9tYV9o b3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBj b25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBj b25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIE12RmllbGQgKnRhYl9tdmYg PSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9M T0cyOworICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1BVX0xPRzI7CisgICAg Y29uc3QgaW50IG1pbl9wdV93aWR0aCA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAgICBj b25zdCBpbnQgbWluX3R1X3dpZHRoID0gZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoOworICAgIGlu dCBib3VuZGFyeV91cHBlcjsKKyAgICBpbnQgaTsKKworICAgIGJvdW5kYXJ5X3VwcGVyID0geTAg PiAwICYmICEoeTAgJiAoKENIUk9NQV9HUklEIDw8IGZjLT5wcy5zcHMtPnZzaGlmdFsxXSkgLSAx KSk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyICYmCisgICAgICAgICgoIWZjLT5wcy5wcHMtPnIt PnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAg ICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UgJiYKKyAgICAgICAg ICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApIHx8Cisg ICAgICAgICAgICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNf ZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9V TkRBUllfVVBQRVJfVElMRSAmJgorICAgICAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5z cHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRhcnlfdXBwZXIgPSAw OworCisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyKSB7CisgICAgICAgIGludCB5cF9wdSA9ICh5MCAt IDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB5cV9wdSA9IHkwID4+IGxvZzJf bWluX3B1X3NpemU7CisgICAgICAgIGludCB5cF90dSA9ICh5MCAtIDEpID4+IGxvZzJfbWluX3R1 X3NpemU7CisgICAgICAgIGludCB5cV90dSA9IHkwID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpICs9IDIpIHsKKyAgICAgICAgICAgIGludCB4 X3B1ID0gKHgwICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGludCB4X3R1 ID0gKHgwICsgaSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgICAgIE12RmllbGQgKnRv cCA9ICZ0YWJfbXZmW3lwX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07CisgICAgICAgICAgICBN dkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAg ICAgICAgICAgIGNvbnN0IGludCB0b3BfdHUgPSB5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHU7 CisgICAgICAgICAgICBjb25zdCBpbnQgY3Vycl90dSA9IHlxX3R1ICogbWluX3R1X3dpZHRoICsg eF90dTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgcGNtZiA9IGZjLT50YWIucGNtZltDSFJP TUFdW3RvcF90dV0gJiYgZmMtPnRhYi5wY21mW0NIUk9NQV1bY3Vycl90dV07CisKKyAgICAgICAg ICAgIGZvciAoaW50IGMgPSBDQjsgYyA8PSBDUjsgYysrKSB7CisgICAgICAgICAgICAgICAgdWlu dDhfdCBjYmYgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bdG9wX3R1XSB8CisgICAgICAgICAg ICAgICAgICAgIGZjLT50YWIudHVfY29kZWRfZmxhZ1tjXVtjdXJyX3R1XSB8CisgICAgICAgICAg ICAgICAgICAgIGZjLT50YWIudHVfam9pbnRfY2Jjcl9yZXNpZHVhbF9mbGFnW3RvcF90dV0gfAor ICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1tj dXJyX3R1XTsKKyAgICAgICAgICAgICAgICBpbnQgYnMgPSAwOworCisgICAgICAgICAgICAgICAg aWYgKHBjbWYpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMDsKKyAgICAgICAgICAgICAgICBl bHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgdG9wLT5wcmVkX2ZsYWcgPT0g UEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IHRvcC0+Y2lpcF9mbGFnKQorICAgICAgICAg ICAgICAgICAgICBicyA9IDI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2JmKQorICAgICAg ICAgICAgICAgICAgICBicyA9IDE7CisgICAgICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIuaG9y aXpvbnRhbF9ic1tjXSwgeDAgKyBpLCB5MCkgPSBiczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KK30KKwordHlwZWRlZiB2b2lkICgqZGVibG9ja19ic19mbikoY29uc3QgVlZDTG9j YWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsCisgICAgY29uc3QgaW50 IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KTsKKworc3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfYnMo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNv bnN0IGludCB2ZXJ0aWNhbCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMt PmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IFZW Q1BQUyAqcHBzICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCBjdGJfc2l6ZSAgPSBzcHMt PmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHhfZW5kICAgICA9IEZGTUlOKHgwICsgY3RiX3Np emUsIHBwcy0+d2lkdGgpID4+IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCB5X2VuZCAgICAg PSBGRk1JTih5MCArIGN0Yl9zaXplLCBwcHMtPmhlaWdodCkgPj4gTUlOX1RVX0xPRzI7CisgICAg ZGVibG9ja19ic19mbiBkZWJsb2NrX2JzWzJdWzJdID0geworICAgICAgICB7IHZ2Y19kZWJsb2Nr X2JzX2x1bWFfaG9yaXpvbnRhbCwgdnZjX2RlYmxvY2tfYnNfY2hyb21hX2hvcml6b250YWwgfSwK KyAgICAgICAgeyB2dmNfZGVibG9ja19ic19sdW1hX3ZlcnRpY2FsLCAgIHZ2Y19kZWJsb2NrX2Jz X2Nocm9tYV92ZXJ0aWNhbCAgIH0KKyAgICB9OworCisgICAgZm9yIChpbnQgaXNfY2hyb21hID0g MDsgaXNfY2hyb21hIDw9IDE7IGlzX2Nocm9tYSsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyA9 IHNwcy0+aHNoaWZ0W2lzX2Nocm9tYV07CisgICAgICAgIGNvbnN0IGludCB2cyA9IHNwcy0+dnNo aWZ0W2lzX2Nocm9tYV07CisgICAgICAgIGZvciAoaW50IHkgPSB5MCA+PiBNSU5fVFVfTE9HMjsg eSA8IHlfZW5kOyB5KyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSB4MCA+PiBNSU5fVFVf TE9HMjsgeCA8IHhfZW5kOyB4KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgb2ZmID0g eSAqIGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aCArIHg7CisgICAgICAgICAgICAgICAgaWYgKChm Yy0+dGFiLnRiX3Bvc194MFtpc19jaHJvbWFdW29mZl0gPj4gTUlOX1RVX0xPRzIpID09IHggJiYg KGZjLT50YWIudGJfcG9zX3kwW2lzX2Nocm9tYV1bb2ZmXSA+PiBNSU5fVFVfTE9HMikgPT0geSkg eworICAgICAgICAgICAgICAgICAgICBkZWJsb2NrX2JzW3ZlcnRpY2FsXVtpc19jaHJvbWFdKGxj LCB4IDw8IE1JTl9UVV9MT0cyLCB5IDw8IE1JTl9UVV9MT0cyLAorICAgICAgICAgICAgICAgICAg ICAgICAgZmMtPnRhYi50Yl93aWR0aFtpc19jaHJvbWFdW29mZl0gPDwgaHMsIGZjLT50YWIudGJf aGVpZ2h0W2lzX2Nocm9tYV1bb2ZmXSA8PCB2cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvL3BhcnQgb2YgOC44LjMuMyBEZXJpdmF0 aW9uIHByb2Nlc3Mgb2YgdHJhbnNmb3JtIGJsb2NrIGJvdW5kYXJ5CitzdGF0aWMgdm9pZCBtYXhf ZmlsdGVyX2xlbmd0aF9sdW1hKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBx eCwgY29uc3QgaW50IHF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBpbnQgdmVydGljYWwsIHVpbnQ4X3QgKm1heF9sZW5fcCwgdWludDhfdCAqbWF4X2xlbl9xKQor eworICAgIGNvbnN0IHVpbnQ4X3QgKnRhYl9sZW5fcCA9IHZlcnRpY2FsID8gZmMtPnRhYi52ZXJ0 aWNhbF9wIDogZmMtPnRhYi5ob3Jpem9udGFsX3A7CisgICAgY29uc3QgdWludDhfdCAqdGFiX2xl bl9xID0gdmVydGljYWwgPyBmYy0+dGFiLnZlcnRpY2FsX3EgOiBmYy0+dGFiLmhvcml6b250YWxf cTsKKyAgICAqbWF4X2xlbl9wID0gVEFCX01BWF9MRU4odGFiX2xlbl9wLCBxeCwgcXkpOworICAg ICptYXhfbGVuX3EgPSBUQUJfTUFYX0xFTih0YWJfbGVuX3EsIHF4LCBxeSk7Cit9CisKKy8vcGFy dCBvZiA4LjguMy4zIERlcml2YXRpb24gcHJvY2VzcyBvZiB0cmFuc2Zvcm0gYmxvY2sgYm91bmRh cnkKK3N0YXRpYyB2b2lkIG1heF9maWx0ZXJfbGVuZ3RoX2Nocm9tYShjb25zdCBWVkNGcmFtZUNv bnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgdmVydGljYWwsIGNvbnN0IGludCBob3Jpem9u dGFsX2N0dV9lZGdlLCBjb25zdCBpbnQgYnMsIHVpbnQ4X3QgKm1heF9sZW5fcCwgdWludDhfdCAq bWF4X2xlbl9xKQoreworICAgIGNvbnN0IGludCBweCA9ICB2ZXJ0aWNhbCA/IHF4IC0gMSA6IHF4 OworICAgIGNvbnN0IGludCBweSA9ICF2ZXJ0aWNhbCA/IHF5IC0gMSA6IHF5OworICAgIGNvbnN0 IHVpbnQ4X3QgKnRiX3NpemUgPSB2ZXJ0aWNhbCA/IGZjLT50YWIudGJfd2lkdGhbQ0hST01BXSA6 IGZjLT50YWIudGJfaGVpZ2h0W0NIUk9NQV07CisKKyAgICBjb25zdCBpbnQgc2l6ZV9wID0gdGJf c2l6ZVsocHkgPj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgKHB4 ID4+IE1JTl9UVV9MT0cyKV07CisgICAgY29uc3QgaW50IHNpemVfcSA9IHRiX3NpemVbKHF5ID4+ IE1JTl9UVV9MT0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aCArIChxeCA+PiBNSU5fVFVf TE9HMildOworICAgIGlmIChzaXplX3AgPj0gOCAmJiBzaXplX3EgPj0gOCkgeworICAgICAgICAq bWF4X2xlbl9wID0gKm1heF9sZW5fcSA9IDM7CisgICAgICAgIGlmIChob3Jpem9udGFsX2N0dV9l ZGdlKQorICAgICAgICAgICAgKm1heF9sZW5fcCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAg Ly9wYXJ0IG9mIDguOC4zLjYuNCBEZWNpc2lvbiBwcm9jZXNzIGZvciBjaHJvbWEgYmxvY2sgZWRn ZXMKKyAgICAgICAgKm1heF9sZW5fcCA9ICptYXhfbGVuX3EgPSAoYnMgPT0gMik7CisgICAgfQor fQorCitzdGF0aWMgdm9pZCBtYXhfZmlsdGVyX2xlbmd0aChjb25zdCBWVkNGcmFtZUNvbnRleHQg KmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAgICBjb25zdCBpbnQgY19pZHgsIGNv bnN0IGludCB2ZXJ0aWNhbCwgY29uc3QgaW50IGhvcml6b250YWxfY3R1X2VkZ2UsIGNvbnN0IGlu dCBicywgdWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgaWYg KCFjX2lkeCkKKyAgICAgICAgbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShmYywgcXgsIHF5LCB2ZXJ0 aWNhbCwgbWF4X2xlbl9wLCBtYXhfbGVuX3EpOworICAgIGVsc2UKKyAgICAgICAgbWF4X2ZpbHRl cl9sZW5ndGhfY2hyb21hKGZjLCBxeCwgcXksIHZlcnRpY2FsLCBob3Jpem9udGFsX2N0dV9lZGdl LCBicywgbWF4X2xlbl9wLCBtYXhfbGVuX3EpOworfQorCisjZGVmaW5lIFRDX0NBTEMocXAsIGJz KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg dGN0YWJsZVthdl9jbGlwKChxcCkgKyBERUZBVUxUX0lOVFJBX1RDX09GRlNFVCAqICgoYnMpIC0g MSkgKyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICh0Y19vZmZzZXQgJiAtMiksICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIDAsIE1B WF9RUCArIERFRkFVTFRfSU5UUkFfVENfT0ZGU0VUKV0KKworLy8gcGFydCBvZiA4LjguMy42LjIg RGVjaXNpb24gcHJvY2VzcyBmb3IgbHVtYSBibG9jayBlZGdlcworc3RhdGljIGludCBnZXRfcXBf eShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGlu dCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IHZlcnRpY2FsKQoreworICAgIGNvbnN0IFZWQ1NQ UyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCBxcCAgICAgICAgPSAoZmZfdnZj X2dldF9xUHkoZmMsIHggLSB2ZXJ0aWNhbCwgeSAtICF2ZXJ0aWNhbCkgKyBmZl92dmNfZ2V0X3FQ eShmYywgeCwgeSkgKyAxKSA+PiAxOworICAgIGludCBxcF9vZmZzZXQgICAgICAgPSAwOworICAg IGludCBsZXZlbDsKKworICAgIGlmICghc3BzLT5yLT5zcHNfbGFkZl9lbmFibGVkX2ZsYWcpCisg ICAgICAgIHJldHVybiBxcDsKKworICAgIGxldmVsID0gZmMtPnZ2Y2RzcC5sZi5sYWRmX2xldmVs W3ZlcnRpY2FsXShzcmMsIGZjLT5mcmFtZS0+bGluZXNpemVbTFVNQV0pOworICAgIHFwX29mZnNl dCA9IHNwcy0+ci0+c3BzX2xhZGZfbG93ZXN0X2ludGVydmFsX3FwX29mZnNldDsKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IHNwcy0+bnVtX2xhZGZfaW50ZXJ2YWxzIC0gMSAmJiBsZXZlbCA+IHNw cy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpICsgMV07IGkrKykKKyAgICAgICAgcXBfb2Zm c2V0ID0gc3BzLT5yLT5zcHNfbGFkZl9xcF9vZmZzZXRbaV07CisKKyAgICByZXR1cm4gcXAgKyBx cF9vZmZzZXQ7Cit9CisKKy8vIHBhcnQgb2YgOC44LjMuNi4yIERlY2lzaW9uIHByb2Nlc3MgZm9y IGx1bWEgYmxvY2sgZWRnZXMKK3N0YXRpYyBpbnQgZ2V0X3FwX2MoY29uc3QgVlZDRnJhbWVDb250 ZXh0ICpmYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgY19pZHgsIGNvbnN0 IGludCB2ZXJ0aWNhbCkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsK KyAgICByZXR1cm4gKGdldF9xUGMoZmMsIHggLSB2ZXJ0aWNhbCwgeSAtICF2ZXJ0aWNhbCwgY19p ZHgpICsgZ2V0X3FQYyhmYywgeCwgeSwgY19pZHgpIC0gMiAqIHNwcy0+cXBfYmRfb2Zmc2V0ICsg MSkgPj4gMTsKK30KKworc3RhdGljIGludCBnZXRfcXAoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpm YywgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGlu dCBjX2lkeCwgY29uc3QgaW50IHZlcnRpY2FsKQoreworICAgIGlmICghY19pZHgpCisgICAgICAg IHJldHVybiBnZXRfcXBfeShmYywgc3JjLCB4LCB5LCB2ZXJ0aWNhbCk7CisgICAgcmV0dXJuIGdl dF9xcF9jKGZjLCB4LCB5LCBjX2lkeCwgdmVydGljYWwpOworfQorCit2b2lkIGZmX3Z2Y19kZWJs b2NrX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwKQor eworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpz cHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGNfZW5kICAgICA9IHNwcy0+ci0+c3Bz X2Nocm9tYV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKyAgICB1aW50 OF90ICpzcmM7CisgICAgaW50IHgsIHksIHFwOworCisgICAgLy9ub3QgdXNlIHRoaXMgeWV0LCBt YXkgbmVlZGVkIGJ5IHBsdC4KKyAgICBjb25zdCB1aW50OF90IG5vX3BbNF0gPSB7IDAgfTsKKyAg ICBjb25zdCB1aW50OF90IG5vX3FbNF0gPSB7IDAgfSA7CisKKyAgICBpbnQgY3RiX2xvZzJfc2l6 ZV95ID0gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGludCB4X2VuZCwgeV9lbmQ7 CisgICAgaW50IGN0Yl9zaXplID0gMSA8PCBjdGJfbG9nMl9zaXplX3k7CisgICAgaW50IGN0YiA9 ICh4MCA+PiBjdGJfbG9nMl9zaXplX3kpICsKKyAgICAgICAgKHkwID4+IGN0Yl9sb2cyX3NpemVf eSkgKiBmYy0+cHMucHBzLT5jdGJfd2lkdGg7CisgICAgREJQYXJhbXMgICpwYXJhbXMgPSBmYy0+ dGFiLmRlYmxvY2sgKyBjdGI7CisKKyAgICB2dmNfZGVibG9ja19icyhsYywgeDAsIHkwLCAxKTsK KworICAgIHhfZW5kID0geDAgKyBjdGJfc2l6ZTsKKyAgICBpZiAoeF9lbmQgPiBmYy0+cHMuc3Bz LT53aWR0aCkKKyAgICAgICAgeF9lbmQgPSBmYy0+cHMuc3BzLT53aWR0aDsKKyAgICB5X2VuZCA9 IHkwICsgY3RiX3NpemU7CisgICAgaWYgKHlfZW5kID4gZmMtPnBzLnNwcy0+aGVpZ2h0KQorICAg ICAgICB5X2VuZCA9IGZjLT5wcy5zcHMtPmhlaWdodDsKKworICAgIGZvciAoaW50IGNfaWR4ID0g MDsgY19pZHggPCBjX2VuZDsgY19pZHgrKykgeworICAgICAgICBjb25zdCBpbnQgaHMgICAgICAg ICAgICA9IHNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHZzICAgICAgICAg ICAgPSBzcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBncmlkICAgICAgICAg ID0gY19pZHggPyAoQ0hST01BX0dSSUQgPDwgaHMpIDogTFVNQV9HUklEOworICAgICAgICBjb25z dCBpbnQgdGNfb2Zmc2V0ICAgICA9IHBhcmFtcy0+dGNfb2Zmc2V0W2NfaWR4XTsKKyAgICAgICAg Y29uc3QgaW50IGJldGFfb2Zmc2V0ICAgPSBwYXJhbXMtPmJldGFfb2Zmc2V0W2NfaWR4XTsKKwor ICAgICAgICBmb3IgKHkgPSB5MDsgeSA8IHlfZW5kOyB5ICs9IChERUJMT0NLX1NURVAgPDwgdnMp KSB7CisgICAgICAgICAgICBmb3IgKHggPSB4MCA/IHgwIDogZ3JpZDsgeCA8IHhfZW5kOyB4ICs9 IGdyaWQpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGJzWzRdLCBiZXRhWzRdLCB0Y1s0XSwg YWxsX3plcm9fYnMgPSAxOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWF4X2xlbl9wWzRdLCBt YXhfbGVuX3FbNF07CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IERFQkxP Q0tfU1RFUCA+PiAoMiAtIHZzKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu dCBkeSA9IGkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgYnNbaV0gPSAoeSArIGR5IDwgeV9l bmQpID8gVEFCX0JTKGZjLT50YWIudmVydGljYWxfYnNbY19pZHhdLCB4LCB5ICsgZHkpIDogMDsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGJzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVsoKHkgKyBkeSkgPj4gdnMpICogZmMtPmZy YW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKHggPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3No aWZ0KV07CisgICAgICAgICAgICAgICAgICAgICAgICBxcCA9IGdldF9xcChmYywgc3JjLCB4LCB5 ICsgZHksIGNfaWR4LCAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYmV0YVtpXSA9IGJl dGF0YWJsZVthdl9jbGlwKHFwICsgYmV0YV9vZmZzZXQsIDAsIE1BWF9RUCldOworCisgICAgICAg ICAgICAgICAgICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aChmYywgeCwgeSArIGR5LCBjX2lkeCwg MSwgMCwgYnNbaV0sICZtYXhfbGVuX3BbaV0sICZtYXhfbGVuX3FbaV0pOworICAgICAgICAgICAg ICAgICAgICAgICAgYWxsX3plcm9fYnMgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIHRjW2ldID0gYnNbaV0gPyBUQ19DQUxDKHFwLCBic1tpXSkgOiAwOwor ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYWxsX3plcm9fYnMpIHsK KyAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1bKHkgPj4g dnMpICogZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKHggPj4gaHMpIDw8IGZjLT5wcy5z cHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgICAgICAgICAgICAgIGlmICghY19pZHgpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2x1bWFbMV0oc3JjLCBm Yy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi ZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIDApOworICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZmMtPnZ2Y2RzcC5s Zi5maWx0ZXJfY2hyb21hWzFdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwg bWF4X2xlbl9xLCB2cyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZmZfdnZjX2RlYmxv Y2tfaG9yaXpvbnRhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCkK K3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAq c3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCBjX2VuZCAgICAgPSBmYy0+cHMuc3Bz LT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgOiAxOwor ICAgIHVpbnQ4X3QqIHNyYzsKKyAgICBpbnQgeCwgeSwgcXA7CisKKyAgICAvL25vdCB1c2UgdGhp cyB5ZXQsIG1heSBuZWVkZWQgYnkgcGx0LgorICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcFs0XSA9IHsg MCB9OworICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcVs0XSA9IHsgMCB9IDsKKworICAgIGludCBjdGJf bG9nMl9zaXplX3kgPSBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgaW50IHhfZW5k LCB4X2VuZDIsIHlfZW5kOworICAgIGludCBjdGJfc2l6ZSA9IDEgPDwgY3RiX2xvZzJfc2l6ZV95 OworICAgIGludCBjdGIgPSAoeDAgPj4gY3RiX2xvZzJfc2l6ZV95KSArCisgICAgICAgICh5MCA+ PiBjdGJfbG9nMl9zaXplX3kpICogZmMtPnBzLnBwcy0+Y3RiX3dpZHRoOworCisgICAgdnZjX2Rl YmxvY2tfYnMobGMsIHgwLCB5MCwgMCk7CisKKyAgICB4X2VuZCA9IHgwICsgY3RiX3NpemU7Cisg ICAgaWYgKHhfZW5kID4gZmMtPnBzLnNwcy0+d2lkdGgpCisgICAgICAgIHhfZW5kID0gZmMtPnBz LnNwcy0+d2lkdGg7CisgICAgeV9lbmQgPSB5MCArIGN0Yl9zaXplOworICAgIGlmICh5X2VuZCA+ IGZjLT5wcy5zcHMtPmhlaWdodCkKKyAgICAgICAgeV9lbmQgPSBmYy0+cHMuc3BzLT5oZWlnaHQ7 CisKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAg ICAgICAgY29uc3QgaW50IGhzICAgICAgICAgICAgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAg ICAgIGNvbnN0IGludCB2cyAgICAgICAgICAgID0gc3BzLT52c2hpZnRbY19pZHhdOworICAgICAg ICBjb25zdCBpbnQgZ3JpZCAgICAgICAgICA9IGNfaWR4ID8gKENIUk9NQV9HUklEIDw8IHZzKSA6 IExVTUFfR1JJRDsKKworICAgICAgICB4X2VuZDIgPSB4X2VuZCA9PSBmYy0+cHMuc3BzLT53aWR0 aCA/IHhfZW5kIDogeF9lbmQgLSAoREVCTE9DS19TVEVQIDw8IGhzKTsKKworICAgICAgICBmb3Ig KHkgPSB5MDsgeSA8IHlfZW5kOyB5ICs9IGdyaWQpIHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4 X3QgaG9yaXpvbnRhbF9jdHVfZWRnZSA9ICEoeSAlIGZjLT5wcy5zcHMtPmN0Yl9zaXplX3kpOwor ICAgICAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg ICAgICBmb3IgKHggPSB4MCA/IHgwIC0gKERFQkxPQ0tfU1RFUCA8PCBocykgOiAwOyB4IDwgeF9l bmQyOyB4ICs9IChERUJMT0NLX1NURVAgPDwgaHMpKSB7CisgICAgICAgICAgICAgICAgaW50MzJf dCBic1s0XSwgYmV0YVs0XSwgdGNbNF0sIGFsbF96ZXJvX2JzID0gMTsKKyAgICAgICAgICAgICAg ICB1aW50OF90IG1heF9sZW5fcFs0XSwgbWF4X2xlbl9xWzRdOworCisgICAgICAgICAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBERUJMT0NLX1NURVAgPj4gKDIgLSBocyk7IGkrKykgeworICAg ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHggPSBpIDw8IDI7CisgICAgICAgICAgICAgICAg ICAgIGNvbnN0IERCUGFyYW1zICpwYXJhbXMgPSBmYy0+dGFiLmRlYmxvY2sgKyBjdGIgLSAoeCAr IGR4IDwgeDApOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYmV0YV9vZmZzZXQgPSBw YXJhbXMtPmJldGFfb2Zmc2V0W2NfaWR4XTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50 IHRjX29mZnNldCA9IHBhcmFtcy0+dGNfb2Zmc2V0W2NfaWR4XTsKKworICAgICAgICAgICAgICAg ICAgICBic1tpXSA9ICh4ICsgZHggPCB4X2VuZDIgKSA/IFRBQl9CUyhmYy0+dGFiLmhvcml6b250 YWxfYnNbY19pZHhdLCB4ICsgZHgsIHkpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJz W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2Nf aWR4XVsoeSA+PiB2cykgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSArICgoKHggKyBkeCk+ PiBocykgPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHFwID0gZ2V0X3FwKGZjLCBzcmMsIHggKyBkeCwgeSwgY19pZHgsIDApOworCisgICAgICAg ICAgICAgICAgICAgICAgICBiZXRhW2ldID0gYmV0YXRhYmxlW2F2X2NsaXAocXAgKyBiZXRhX29m ZnNldCwgMCwgTUFYX1FQKV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9maWx0ZXJf bGVuZ3RoKGZjLCB4ICsgZHgsIHksIGNfaWR4LCAwLCBob3Jpem9udGFsX2N0dV9lZGdlLCBic1tp XSwgJm1heF9sZW5fcFtpXSwgJm1heF9sZW5fcVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICBhbGxfemVyb19icyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgdGNbaV0gPSBic1tpXSA/IFRDX0NBTEMocXAsIGJzW2ldKSA6IDA7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYWxsX3plcm9fYnMpIHsKKyAgICAgICAgICAg ICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1bKHkgPj4gdnMpICogZmMtPmZy YW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKHggPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3No aWZ0KV07CisgICAgICAgICAgICAgICAgICAgIGlmICghY19pZHgpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2x1bWFbMF0oc3JjLCBmYy0+ZnJhbWUtPmxp bmVzaXplW2NfaWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXRhLCB0Yywgbm9f cCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcml6b250YWxfY3R1X2VkZ2UpOworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZmMtPnZ2 Y2RzcC5sZi5maWx0ZXJfY2hyb21hWzBdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3AsIG5vX3EsIG1heF9s ZW5fcCwgbWF4X2xlbl9xLCBocyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IGFsZl9jb3B5X2JvcmRlcih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBj b25zdCBpbnQgcGl4ZWxfc2hpZnQsIGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3Qg cHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlKQoreworICAg IHdpZHRoIDw8PSBwaXhlbF9zaGlmdDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsg aSsrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGgpOworICAgICAgICBkc3QgKz0g ZHN0X3N0cmlkZTsKKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBhbGZfZXh0ZW5kX3ZlcnQodWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3Ny YywKKyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50 IGhlaWdodCwgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICBpZiAocGl4ZWxfc2hpZnQgPT0gMCkg eworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgICAg ICBtZW1zZXQoX2RzdCwgKl9zcmMsIHdpZHRoKTsKKyAgICAgICAgICAgIF9zcmMgKz0gc3RyaWRl OworICAgICAgICAgICAgX2RzdCArPSBzdHJpZGU7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor ICAgICAgICBjb25zdCB1aW50MTZfdCAqc3JjID0gKGNvbnN0IHVpbnQxNl90ICopX3NyYzsKKyAg ICAgICAgdWludDE2X3QgKmRzdCA9ICh1aW50MTZfdCAqKV9kc3Q7CisgICAgICAgIHN0cmlkZSA+ Pj0gcGl4ZWxfc2hpZnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkr KykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3aWR0aDsgaisrKQorICAgICAg ICAgICAgICAgIGRzdFtqXSA9ICpzcmM7CisgICAgICAgICAgICBzcmMgKz0gc3RyaWRlOworICAg ICAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZv aWQgYWxmX2V4dGVuZF9ob3J6KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLAorICAg IGNvbnN0IGludCBwaXhlbF9zaGlmdCwgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25z dCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHdpZHRoIDw8PSBwaXhlbF9zaGlmdDsKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNy Yywgd2lkdGgpOworICAgICAgICBkc3QgKz0gc3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZv aWQgYWxmX2NvcHlfY3RiX3RvX2h2KFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3Qg KnNyYywgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29uc3QgaW50IHgsIGNvbnN0 IGludCB5LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCB4X2N0 YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQgY19pZHgpCit7CisgICAgY29uc3QgaW50IHBz ICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBjb25zdCBpbnQgdyAg ICAgICAgICAgICA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lk eF07CisgICAgY29uc3QgaW50IGggICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5oZWlnaHQgPj4g ZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgYm9yZGVyX3BpeGVscyA9 IChjX2lkeCA9PSAwKSA/IEFMRl9CT1JERVJfTFVNQSA6IEFMRl9CT1JERVJfQ0hST01BOworICAg IGNvbnN0IGludCBvZmZzZXRfaFtdICAgID0geyAwLCBoZWlnaHQgLSBib3JkZXJfcGl4ZWxzIH07 CisgICAgY29uc3QgaW50IG9mZnNldF92W10gICAgPSB7IDAsIHdpZHRoICAtIGJvcmRlcl9waXhl bHMgfTsKKworICAgIC8qIGNvcHkgaG9yaXpvbnRhbCBlZGdlcyAqLworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMob2Zmc2V0X2gpOyBpKyspIHsKKyAgICAgICAgYWxmX2Nv cHlfYm9yZGVyKGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVtpXSArICgoYm9yZGVy X3BpeGVscyAqIHlfY3RiICogdyArIHgpPDwgcHMpLAorICAgICAgICAgICAgc3JjICsgb2Zmc2V0 X2hbaV0gKiBzcmNfc3RyaWRlLCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMsIHcgPDwgcHMsIHNy Y19zdHJpZGUpOworICAgIH0KKyAgICAvKiBjb3B5IHZlcnRpY2FsIGVkZ2VzICovCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhvZmZzZXRfdik7IGkrKykgeworICAgICAg ICBhbGZfY29weV9ib3JkZXIoZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVyX3ZbY19pZHhdW2ldICsg KChoICogeF9jdGIgKyB5KSAqIChib3JkZXJfcGl4ZWxzIDw8IHBzKSksCisgICAgICAgICAgICBz cmMgKyAob2Zmc2V0X3ZbaV0gPDwgcHMpLCBwcywgYm9yZGVyX3BpeGVscywgaGVpZ2h0LCBib3Jk ZXJfcGl4ZWxzIDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFs Zl9maWxsX2JvcmRlcl9oKHVpbnQ4X3QgKmRzdCwgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUs IGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29u c3QgdWludDhfdCAqYm9yZGVyLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBib3JkZXJfcGl4 ZWxzLCBjb25zdCBpbnQgcHMsIGNvbnN0IGludCBlZGdlKQoreworICAgIGlmIChlZGdlKQorICAg ICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBib3JkZXIsIHBzLCB3aWR0aCwgYm9yZGVyX3BpeGVs cywgZHN0X3N0cmlkZSk7CisgICAgZWxzZQorICAgICAgICBhbGZfY29weV9ib3JkZXIoZHN0LCBz cmMsIHBzLCB3aWR0aCwgYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7Cit9 CisKK3N0YXRpYyB2b2lkIGFsZl9maWxsX2JvcmRlcl92KHVpbnQ4X3QgKmRzdCwgY29uc3QgcHRy ZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBjb25zdCB1aW50OF90 ICpib3JkZXIsIGNvbnN0IGludCBib3JkZXJfcGl4ZWxzLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25z dCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCAqZWRnZXMsIGNvbnN0IGludCBlZGdlKQorewor ICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gKGJvcmRlcl9waXhlbHMgPDwgcGl4ZWxf c2hpZnQpOworCisgICAgaWYgKGVkZ2UpIHsKKyAgICAgICAgYWxmX2V4dGVuZF92ZXJ0KGRzdCwg Ym9yZGVyLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgaGVpZ2h0ICsgMiAqIGJvcmRlcl9w aXhlbHMsIGRzdF9zdHJpZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy9sZWZ0 L3JpZ2h0CisgICAgYWxmX2NvcHlfYm9yZGVyKGRzdCArIGRzdF9zdHJpZGUgKiBib3JkZXJfcGl4 ZWxzICogZWRnZXNbVE9QXSwgc3JjICsgc3JjX3N0cmlkZSAqIGJvcmRlcl9waXhlbHMgKiBlZGdl c1tUT1BdLAorICAgICAgICBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgaGVpZ2h0ICsgKCFl ZGdlc1tUT1BdICsgIWVkZ2VzW0JPVFRPTV0pICogYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSwg c3JjX3N0cmlkZSk7CisKKyAgICAvL3RvcCBsZWZ0L3JpZ2h0CisgICAgaWYgKGVkZ2VzW1RPUF0p CisgICAgICAgIGFsZl9leHRlbmRfaG9yeihkc3QsIGRzdCArIGRzdF9zdHJpZGUgKiBib3JkZXJf cGl4ZWxzLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgYm9yZGVyX3BpeGVscywgZHN0X3N0 cmlkZSk7CisKKyAgICAvL2JvdHRvbSBsZWZ0L3JpZ2h0CisgICAgaWYgKGVkZ2VzW0JPVFRPTV0p IHsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGUgKiAoYm9yZGVyX3BpeGVscyArIGhlaWdodCk7 CisgICAgICAgIGFsZl9leHRlbmRfaG9yeihkc3QsIGRzdCAtIGRzdF9zdHJpZGUsIHBpeGVsX3No aWZ0LCBib3JkZXJfcGl4ZWxzLCBib3JkZXJfcGl4ZWxzLCBkc3Rfc3RyaWRlKTsKKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIGFsZl9wcmVwYXJlX2J1ZmZlcihWVkNGcmFtZUNvbnRleHQgKmZjLCB1 aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50 IHksCisgICAgY29uc3QgaW50IHhfY3RiLCBjb25zdCBpbnQgeV9jdGIsIGNvbnN0IGludCB3aWR0 aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0 cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50ICplZGdl cykKK3sKKyAgICBjb25zdCBpbnQgcHMgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBj b25zdCBpbnQgdyA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lk eF07CisgICAgY29uc3QgaW50IGggPSBmYy0+cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBzLnNwcy0+ dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgYm9yZGVyX3BpeGVscyA9IGNfaWR4ID09IDAg PyBBTEZfQk9SREVSX0xVTUEgOiBBTEZfQk9SREVSX0NIUk9NQTsKKyAgICB1aW50OF90ICpkc3Qs ICpzcmM7CisKKyAgICBjb3B5X2N0YihfZHN0LCBfc3JjLCB3aWR0aCA8PCBwcywgaGVpZ2h0LCBk c3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKKworICAgIC8vdG9wCisgICAgc3JjID0gZmMtPnRhYi5h bGZfcGl4ZWxfYnVmZmVyX2hbY19pZHhdWzFdICsgKCgoYm9yZGVyX3BpeGVscyAqICh5X2N0YiAt IDEpKSAqIHcgKyB4KSA8PCBwcyk7CisgICAgZHN0ID0gX2RzdCAtIGJvcmRlcl9waXhlbHMgKiBk c3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRlcl9oKGRzdCwgZHN0X3N0cmlkZSwgc3JjLCB3 ICA8PCBwcywgX2RzdCwgd2lkdGgsIGJvcmRlcl9waXhlbHMsIHBzLCBlZGdlc1tUT1BdKTsKKwor ICAgIC8vYm90dG9tCisgICAgc3JjID0gZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVyX2hbY19pZHhd WzBdICsgKChib3JkZXJfcGl4ZWxzICogKHlfY3RiICsgMSkgKiB3ICsgeCkgPDwgcHMpOworICAg IGRzdCA9IF9kc3QgKyBoZWlnaHQgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRlcl9o KGRzdCwgZHN0X3N0cmlkZSwgc3JjLCB3ICA8PCBwcywgX2RzdCArIChoZWlnaHQgLSAxKSAqIGRz dF9zdHJpZGUsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCBwcywgZWRnZXNbQk9UVE9NXSk7CisKKwor ICAgIC8vbGVmdAorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl92W2NfaWR4XVsx XSArIChoICogKHhfY3RiIC0gMSkgKyB5IC0gYm9yZGVyX3BpeGVscykgKiAoYm9yZGVyX3BpeGVs cyA8PCBwcyk7CisgICAgZHN0ID0gX2RzdCAtIChib3JkZXJfcGl4ZWxzIDw8IHBzKSAtIGJvcmRl cl9waXhlbHMgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRlcl92KGRzdCwgZHN0X3N0 cmlkZSwgc3JjLCAgZHN0ICsgKGJvcmRlcl9waXhlbHMgPDwgcHMpLCBib3JkZXJfcGl4ZWxzLCBo ZWlnaHQsIHBzLCBlZGdlcywgZWRnZXNbTEVGVF0pOworCisgICAgLy9yaWdodAorICAgIHNyYyA9 IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl92W2NfaWR4XVswXSArIChoICogKHhfY3RiICsgMSkg KyB5IC0gYm9yZGVyX3BpeGVscykgKiAoYm9yZGVyX3BpeGVscyA8PCBwcyk7CisgICAgZHN0ID0g X2RzdCArICh3aWR0aCA8PCBwcykgLSBib3JkZXJfcGl4ZWxzICogZHN0X3N0cmlkZTsKKyAgICBh bGZfZmlsbF9ib3JkZXJfdihkc3QsIGRzdF9zdHJpZGUsIHNyYywgIGRzdCAtICgxIDw8IHBzKSwg Ym9yZGVyX3BpeGVscywgaGVpZ2h0LCBwcywgZWRnZXMsIGVkZ2VzW1JJR0hUXSk7Cit9CisKKyNk ZWZpbmUgQUxGX01BWF9CTE9DS1NfSU5fQ1RVICAgKE1BWF9DVFVfU0laRSAqIE1BWF9DVFVfU0la RSAvIEFMRl9CTE9DS19TSVpFIC8gQUxGX0JMT0NLX1NJWkUpCisjZGVmaW5lIEFMRl9NQVhfRklM VEVSX1NJWkUgICAgIChBTEZfTUFYX0JMT0NLU19JTl9DVFUgKiBBTEZfTlVNX0NPRUZGX0xVTUEp CisKK3N0YXRpYyB2b2lkIGFsZl9nZXRfY29lZmZfYW5kX2NsaXAoVlZDTG9jYWxDb250ZXh0ICps YywgaW50MTZfdCAqY29lZmYsIGludDE2X3QgKmNsaXAsCisgICAgY29uc3QgdWludDhfdCAqc3Jj LCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgdmJfcG9z LCBBTEZQYXJhbXMgKmFsZikKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgICAg ID0gbGMtPmZjOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+c2Mt PnNoLnI7CisgICAgdWludDhfdCBmaXhlZF9jbGlwX3NldFtBTEZfTlVNX0ZJTFRFUlNfTFVNQV1b QUxGX05VTV9DT0VGRl9MVU1BXSA9IHsgMCB9OworICAgIGNvbnN0IGludDE2X3QgKmNvZWZmX3Nl dDsKKyAgICBjb25zdCB1aW50OF90ICpjbGlwX2lkeF9zZXQ7CisgICAgY29uc3QgdWludDhfdCAq Y2xhc3NfdG9fZmlsdDsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IHdpZHRoICogaGVpZ2h0IC8gQUxG X0JMT0NLX1NJWkUgLyBBTEZfQkxPQ0tfU0laRTsKKyAgICBpbnQgY2xhc3NfaWR4W0FMRl9NQVhf QkxPQ0tTX0lOX0NUVV07CisgICAgaW50IHRyYW5zcG9zZV9pZHhbQUxGX01BWF9CTE9DS1NfSU5f Q1RVXTsKKworICAgIGlmIChhbGYtPmN0Yl9maWx0X3NldF9pZHhfeSA8IDE2KSB7CisgICAgICAg IGNvZWZmX3NldCAgICAgICAgICAgPSAmZmZfdnZjX2FsZl9maXhfZmlsdF9jb2VmZlswXVswXTsK KyAgICAgICAgY2xpcF9pZHhfc2V0ICAgICAgICA9ICZmaXhlZF9jbGlwX3NldFswXVswXTsKKyAg ICAgICAgY2xhc3NfdG9fZmlsdCAgICAgICA9IGZmX3Z2Y19hbGZfY2xhc3NfdG9fZmlsdF9tYXBb YWxmLT5jdGJfZmlsdF9zZXRfaWR4X3ldOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGlu dCBpZCAgICAgICAgPSByc2gtPnNoX2FsZl9hcHNfaWRfbHVtYVthbGYtPmN0Yl9maWx0X3NldF9p ZHhfeSAtIDE2XTsKKyAgICAgICAgY29uc3QgVlZDQUxGICphcHMgICA9IChWVkNBTEYgKilmYy0+ cHMuYWxmX2xpc3RbaWRdLT5kYXRhOworICAgICAgICBjb2VmZl9zZXQgICAgICAgICAgID0gJmFw cy0+bHVtYV9jb2VmZlswXVswXTsKKyAgICAgICAgY2xpcF9pZHhfc2V0ICAgICAgICA9ICZhcHMt Pmx1bWFfY2xpcF9pZHhbMF1bMF07CisgICAgICAgIGNsYXNzX3RvX2ZpbHQgICAgICAgPSBmZl92 dmNfYWxmX2Fwc19jbGFzc190b19maWx0X21hcDsKKyAgICB9CisgICAgZmMtPnZ2Y2RzcC5hbGYu Y2xhc3NpZnkoY2xhc3NfaWR4LCB0cmFuc3Bvc2VfaWR4LCBzcmMsIHNyY19zdHJpZGUsIHdpZHRo LCBoZWlnaHQsCisgICAgICAgIHZiX3BvcywgbGMtPmFsZl9ncmFkaWVudF90bXApOworICAgIGZj LT52dmNkc3AuYWxmLnJlY29uX2NvZWZmX2FuZF9jbGlwKGNvZWZmLCBjbGlwLCBjbGFzc19pZHgs IHRyYW5zcG9zZV9pZHgsIHNpemUsCisgICAgICAgIGNvZWZmX3NldCwgY2xpcF9pZHhfc2V0LCBj bGFzc190b19maWx0KTsKK30KKworc3RhdGljIHZvaWQgYWxmX2ZpbHRlcl9sdW1hKFZWQ0xvY2Fs Q29udGV4dCAqbGMsIHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLAorICAgIGNvbnN0 IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3Qg aW50IHgwLCBjb25zdCBpbnQgeTAsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVp Z2h0LCBjb25zdCBpbnQgX3ZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgY29uc3QgVlZD RnJhbWVDb250ZXh0ICpmYyAgID0gbGMtPmZjOworICAgIGludCB2Yl9wb3MgICAgICAgICAgICAg ICAgICA9IF92Yl9wb3MgLSB5MDsKKyAgICBpbnQxNl90ICpjb2VmZiAgICAgICAgICAgICAgID0g KGludDE2X3QqKWxjLT50bXA7CisgICAgaW50MTZfdCAqY2xpcCAgICAgICAgICAgICAgID0gKGlu dDE2X3QgKilsYy0+dG1wMTsKKworICAgIGF2X2Fzc2VydDAoQUxGX01BWF9GSUxURVJfU0laRSA8 PSBzaXplb2YobGMtPnRtcCkpOworICAgIGF2X2Fzc2VydDAoQUxGX01BWF9GSUxURVJfU0laRSAq IHNpemVvZihpbnQxNl90KSA8PSBzaXplb2YobGMtPnRtcDEpKTsKKworICAgIGFsZl9nZXRfY29l ZmZfYW5kX2NsaXAobGMsIGNvZWZmLCBjbGlwLCBzcmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWln aHQsIHZiX3BvcywgYWxmKTsKKyAgICBmYy0+dnZjZHNwLmFsZi5maWx0ZXJbTFVNQV0oZHN0LCBk c3Rfc3RyaWRlLCBzcmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIGNvZWZmLCBjbGlwLCB2 Yl9wb3MpOworfQorCitzdGF0aWMgaW50IGFsZl9jbGlwX2Zyb21faWR4KGNvbnN0IFZWQ0ZyYW1l Q29udGV4dCAqZmMsIGNvbnN0IGludCBpZHgpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9 IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IG9mZnNldFtdID0gezAsIDMsIDUsIDd9OworCisg ICAgcmV0dXJuIDEgPDwgKHNwcy0+Yml0X2RlcHRoIC0gb2Zmc2V0W2lkeF0pOworfQorCitzdGF0 aWMgdm9pZCBhbGZfZmlsdGVyX2Nocm9tYShWVkNMb2NhbENvbnRleHQgKmxjLCB1aW50OF90ICpk c3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwg Y29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsIGNvbnN0IGludCBjX2lkeCwKKyAgICBjb25zdCBp bnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCB2Yl9wb3MsIEFMRlBhcmFtcyAq YWxmKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgICAgICAgICAgPSBsYy0+ZmM7Cisg ICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5zYy0+c2gucjsKKyAgICBj b25zdCBWVkNBTEYgKmFwcyAgICAgICAgICAgICAgID0gKFZWQ0FMRiAqKWZjLT5wcy5hbGZfbGlz dFtyc2gtPnNoX2FsZl9hcHNfaWRfY2hyb21hXS0+ZGF0YTsKKyAgICBjb25zdCBpbnQgaWR4ICAg ICAgICAgICAgICAgICAgID0gYWxmLT5hbGZfY3RiX2ZpbHRlcl9hbHRfaWR4W2NfaWR4IC0gMV07 CisgICAgY29uc3QgaW50MTZfdCAqY29lZmYgICAgICAgID0gYXBzLT5jaHJvbWFfY29lZmZbaWR4 XTsKKyAgICBpbnQxNl90IGNsaXBbQUxGX05VTV9DT0VGRl9DSFJPTUFdOworCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBBTEZfTlVNX0NPRUZGX0NIUk9NQTsgaSsrKQorICAgICAgICBjbGlwW2ld ID0gYWxmX2NsaXBfZnJvbV9pZHgoZmMsIGFwcy0+Y2hyb21hX2NsaXBfaWR4W2lkeF1baV0pOwor CisgICAgZmMtPnZ2Y2RzcC5hbGYuZmlsdGVyW0NIUk9NQV0oZHN0LCBkc3Rfc3RyaWRlLCBzcmMs IHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIGNvZWZmLCBjbGlwLCB2Yl9wb3MpOworfQorCitz dGF0aWMgdm9pZCBhbGZfZmlsdGVyX2NjKFZWQ0xvY2FsQ29udGV4dCAqbGMsIHVpbnQ4X3QgKmRz dCwgY29uc3QgdWludDhfdCAqbHVtYSwKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwg Y29uc3QgcHRyZGlmZl90IGx1bWFfc3RyaWRlLCBjb25zdCBpbnQgY19pZHgsCisgICAgY29uc3Qg aW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgaHMsIGNvbnN0IGludCB2cywg Y29uc3QgaW50IHZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgVlZDRnJhbWVDb250ZXh0 ICpmYyAgICAgICAgICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIg KnJzaCAgID0gbGMtPnNjLT5zaC5yOworICAgIGNvbnN0IGludCBpZHggICAgICAgICAgICAgICAg ICAgPSBjX2lkeCAtIDE7CisgICAgY29uc3QgaW50IGNjX2Fwc19pZCAgICAgICAgICAgICA9IGNf aWR4ID09IENCID8gcnNoLT5zaF9hbGZfY2NfY2JfYXBzX2lkIDogcnNoLT5zaF9hbGZfY2NfY3Jf YXBzX2lkOworICAgIEFWQnVmZmVyUmVmICphcHNfYnVmICAgICAgICAgICAgPSBmYy0+cHMuYWxm X2xpc3RbY2NfYXBzX2lkXTsKKworICAgIGlmIChhcHNfYnVmKSB7CisgICAgICAgIGNvbnN0IFZW Q0FMRiAqYXBzICAgID0gKFZWQ0FMRiAqKWFwc19idWYtPmRhdGE7CisgICAgICAgIGNvbnN0IGlu dDE2X3QgKmNvZWZmID0gYXBzLT5jY19jb2VmZltpZHhdW2FsZi0+Y3RiX2NjX2lkY1tpZHhdIC0g MV07CisKKyAgICAgICAgZmMtPnZ2Y2RzcC5hbGYuZmlsdGVyX2NjKGRzdCwgZHN0X3N0cmlkZSwg bHVtYSwgbHVtYV9zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIGhzLCB2cywgY29lZmYsIHZiX3Bvcyk7 CisgICAgfQorfQorCit2b2lkIGZmX3Z2Y19hbGZfY29weV9jdHVfdG9faHYoVlZDTG9jYWxDb250 ZXh0KiBsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250 ZXh0ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50IHhfY3RiICAgICAgICAgPSB4MCA+ PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IHlfY3RiICAgICAg ICAgPSB5MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IGN0 Yl9zaXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCBwcyAg ICAgICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29uc3QgaW50IGNfZW5k ICAgICAgICAgPSBmYy0+cHMuc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFY X1NBTVBMRV9BUlJBWVMgOiAxOworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IGNf ZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgPSBmYy0+cHMuc3Bz LT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgID0gZmMtPnBzLnNw cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHggICAgICAgICA9IHgwID4+IGhz OworICAgICAgICBjb25zdCBpbnQgeSAgICAgICAgID0geTAgPj4gdnM7CisgICAgICAgIGNvbnN0 IGludCB3aWR0aCAgICAgPSBGRk1JTihmYy0+cHMuc3BzLT53aWR0aCAtIHgwLCBjdGJfc2l6ZV95 KSA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IGhlaWdodCAgICA9IEZGTUlOKGZjLT5wcy5zcHMt PmhlaWdodCAtIHkwLCBjdGJfc2l6ZV95KSA+PiB2czsKKworICAgICAgICBjb25zdCBpbnQgc3Jj X3N0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAgICAgICB1aW50OF90KiBz cmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5ICogc3JjX3N0cmlkZSArICh4IDw8IHBzKV07 CisKKyAgICAgICAgYWxmX2NvcHlfY3RiX3RvX2h2KGZjLCBzcmMsIHNyY19zdHJpZGUsIHgsIHks IHdpZHRoLCBoZWlnaHQsIHhfY3RiLCB5X2N0YiwgY19pZHgpOworICAgIH0KK30KKwordm9pZCBm Zl92dmNfYWxmX2ZpbHRlcihWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0 IGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBj b25zdCBWVkNQUFMgKnBwcyAgICAgICA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgaW50IHhfY3Ri ICAgICAgICAgPSB4MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3Qg aW50IHlfY3RiICAgICAgICAgPSB5MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7Cisg ICAgY29uc3QgaW50IGN0Yl9zaXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAg IGNvbnN0IGludCBwcyAgICAgICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAg Y29uc3QgaW50IHBhZGRlZF9zdHJpZGUgPSBFREdFX0VNVV9CVUZGRVJfU1RSSURFIDw8IHBzOwor ICAgIGNvbnN0IGludCBwYWRkZWRfb2Zmc2V0ID0gcGFkZGVkX3N0cmlkZSAqIEFMRl9QQURESU5H X1NJWkUgKyAoQUxGX1BBRERJTkdfU0laRSA8PCBwcyk7CisgICAgY29uc3QgaW50IGNfZW5kICAg ICAgICAgPSBmYy0+cHMuc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFYX1NB TVBMRV9BUlJBWVMgOiAxOworICAgIEFMRlBhcmFtcyAqYWxmICAgICAgICAgID0gJkNUQihmYy0+ dGFiLmFsZiwgeF9jdGIsIHlfY3RiKTsKKyAgICBpbnQgZWRnZXNbTUFYX0VER0VTXSAgICA9IHsg eF9jdGIgPT0gMCwgeV9jdGIgPT0gMCwgeF9jdGIgPT0gcHBzLT5jdGJfd2lkdGggLSAxLCB5X2N0 YiA9PSBwcHMtPmN0Yl9oZWlnaHQgLSAxIH07CisKKyAgICBpZiAoIXBwcy0+ci0+cHBzX2xvb3Bf ZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgZWRnZXNbTEVGVF0g PSBlZGdlc1tMRUZUXSB8fCAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxF KTsKKyAgICAgICAgZWRnZXNbVE9QXSAgPSBlZGdlc1tUT1BdIHx8IChsYy0+Ym91bmRhcnlfZmxh Z3MgJiBCT1VOREFSWV9VUFBFUl9USUxFKTsKKyAgICAgICAgZWRnZXNbUklHSFRdID0gZWRnZXNb UklHSFRdIHx8IHBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0Yl0gIT0gcHBzLT5jdGJfdG9fY29sX2Jk W3hfY3RiICsgMV07CisgICAgICAgIGVkZ2VzW0JPVFRPTV0gPSBlZGdlc1tCT1RUT01dIHx8IHBw cy0+Y3RiX3RvX3Jvd19iZFt5X2N0Yl0gIT0gcHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiICsgMV07 CisgICAgfQorCisgICAgaWYgKCFwcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2Vz X2VuYWJsZWRfZmxhZykgeworICAgICAgICBlZGdlc1tMRUZUXSA9IGVkZ2VzW0xFRlRdIHx8IChs Yy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1NMSUNFKTsKKyAgICAgICAgZWRnZXNb VE9QXSA9IGVkZ2VzW1RPUF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVS X1NMSUNFKTsKKyAgICAgICAgZWRnZXNbUklHSFRdID0gZWRnZXNbUklHSFRdIHx8IENUQihmYy0+ dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhf Y3RiICsgMSwgeV9jdGIpOworICAgICAgICBlZGdlc1tCT1RUT01dID0gZWRnZXNbQk9UVE9NXSB8 fCBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xp Y2VfaWR4LCB4X2N0YiwgeV9jdGIgKyAxKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBjX2lkeCA9 IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzID0gZmMt PnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHZzID0gZmMtPnBzLnNw cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9zaXplX2ggPSBjdGJfc2l6 ZV95ID4+IGhzOworICAgICAgICBjb25zdCBpbnQgY3RiX3NpemVfdiA9IGN0Yl9zaXplX3kgPj4g dnM7CisgICAgICAgIGNvbnN0IGludCB4ID0geDAgPj4gaHM7CisgICAgICAgIGNvbnN0IGludCB5 ID0geTAgPj4gdnM7CisgICAgICAgIGNvbnN0IGludCBwaWNfd2lkdGggPSBmYy0+cHMuc3BzLT53 aWR0aCA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IHBpY19oZWlnaHQgPSBmYy0+cHMuc3BzLT5o ZWlnaHQgPj4gdnM7CisgICAgICAgIGNvbnN0IGludCB3aWR0aCAgPSBGRk1JTihwaWNfd2lkdGgg IC0geCwgY3RiX3NpemVfaCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSBGRk1JTihwaWNf aGVpZ2h0IC0geSwgY3RiX3NpemVfdik7CisgICAgICAgIGNvbnN0IGludCBzcmNfc3RyaWRlID0g ZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIHVpbnQ4X3QgKnNyYyA9ICZmYy0+ ZnJhbWUtPmRhdGFbY19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgcHMpXTsKKyAgICAgICAg dWludDhfdCAqcGFkZGVkOworCisgICAgICAgIGlmIChhbGYtPmN0Yl9mbGFnW2NfaWR4XSB8fCAo IWNfaWR4ICYmIChhbGYtPmN0Yl9jY19pZGNbMF0gfHwgYWxmLT5jdGJfY2NfaWRjWzFdKSkpIHsK KyAgICAgICAgICAgIHBhZGRlZCA9IChjX2lkeCA/IGxjLT5hbGZfYnVmZmVyX2Nocm9tYSA6IGxj LT5hbGZfYnVmZmVyX2x1bWEpICsgcGFkZGVkX29mZnNldDsKKyAgICAgICAgICAgIGFsZl9wcmVw YXJlX2J1ZmZlcihmYywgcGFkZGVkLCBzcmMsIHgsIHksIHhfY3RiLCB5X2N0Yiwgd2lkdGgsIGhl aWdodCwKKyAgICAgICAgICAgICAgICBwYWRkZWRfc3RyaWRlLCBzcmNfc3RyaWRlLCBjX2lkeCwg ZWRnZXMpOworICAgICAgICB9CisgICAgICAgIGlmIChhbGYtPmN0Yl9mbGFnW2NfaWR4XSkgewor ICAgICAgICAgICAgaWYgKCFjX2lkeCkgIHsKKyAgICAgICAgICAgICAgICBhbGZfZmlsdGVyX2x1 bWEobGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRfc3RyaWRlLCB4LCB5LAorICAg ICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCB5ICsgY3RiX3NpemVfdiAtIEFMRl9WQl9Q T1NfQUJPVkVfTFVNQSwgYWxmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgYWxmX2ZpbHRlcl9jaHJvbWEobGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRf c3RyaWRlLCBjX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgY3RiX3Np emVfdiAtIEFMRl9WQl9QT1NfQUJPVkVfQ0hST01BLCBhbGYpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGlmIChjX2lkeCAmJiBhbGYtPmN0Yl9jY19pZGNbY19pZHggLSAxXSkg eworICAgICAgICAgICAgcGFkZGVkID0gbGMtPmFsZl9idWZmZXJfbHVtYSArIHBhZGRlZF9vZmZz ZXQ7CisgICAgICAgICAgICBhbGZfZmlsdGVyX2NjKGxjLCBzcmMsIHBhZGRlZCwgc3JjX3N0cmlk ZSwgcGFkZGVkX3N0cmlkZSwgY19pZHgsCisgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwg aHMsIHZzLCAoY3RiX3NpemVfdiA8PCB2cykgLSBBTEZfVkJfUE9TX0FCT1ZFX0xVTUEsIGFsZik7 CisgICAgICAgIH0KKworICAgICAgICBhbGYtPmFwcGxpZWRbY19pZHhdID0gMTsKKyAgICB9Cit9 CisKKwordm9pZCBmZl92dmNfbG1jc19maWx0ZXIoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgaW50IHgsIGNvbnN0IGludCB5KQoreworICAgIGNvbnN0IFNsaWNlQ29udGV4dCAqc2Mg PSBsYy0+c2M7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBj b25zdCBpbnQgY3RiX3NpemUgID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBp bnQgd2lkdGggICAgID0gRkZNSU4oZmMtPnBzLnBwcy0+d2lkdGggIC0geCwgY3RiX3NpemUpOwor ICAgIGNvbnN0IGludCBoZWlnaHQgICAgPSBGRk1JTihmYy0+cHMucHBzLT5oZWlnaHQgLSB5LCBj dGJfc2l6ZSk7CisgICAgdWludDhfdCAqZGF0YSAgICAgICA9IGZjLT5mcmFtZS0+ZGF0YVtMVU1B XSArIHkgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdICsgKHggPDwgZmMtPnBzLnNwcy0+cGl4 ZWxfc2hpZnQpOworICAgIGlmIChzYy0+c2guci0+c2hfbG1jc191c2VkX2ZsYWcpCisgICAgICAg IGZjLT52dmNkc3AubG1jcy5maWx0ZXIoZGF0YSwgZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSwg d2lkdGgsIGhlaWdodCwgZmMtPnBzLmxtY3MuaW52X2x1dCk7Cit9CmRpZmYgLS1naXQgYS9saWJh dmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMmZiZmFhMjNiMQotLS0gL2Rldi9u dWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuaApAQCAtMCwwICsxLDcwIEBACisv KgorICogVlZDIGZpbHRlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTnVvIE1pCisgKgor ICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2lmbmRlZiBBVkNPREVDX1ZW Q19GSUxURVJfSAorI2RlZmluZSBBVkNPREVDX1ZWQ19GSUxURVJfSAorCisjaW5jbHVkZSAidnZj ZGVjLmgiCisKKy8qKgorICogbG1jcyBmaWx0ZXIgZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBs b2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSB4MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RV CisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBmb3IgdGhlIENUVQorICovCit2b2lkIGZmX3Z2Y19s bWNzX2ZpbHRlcihjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0 IGludCB5MCk7CisKKy8qKgorICogdmVydGljYWwgZGVibG9jayBmaWx0ZXIgZm9yIHRoZSBDVFUK KyAqIEBwYXJhbSBsYyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSB4MCB4IHBvc2l0 aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBmb3IgdGhlIENUVQorICov Cit2b2lkIGZmX3Z2Y19kZWJsb2NrX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMs IGludCB4MCwgaW50IHkwKTsKKworLyoqCisgKiBob3Jpem9udGFsIGRlYmxvY2sgZmlsdGVyIGZv ciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0g eDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRo ZSBDVFUKKyAqLwordm9pZCBmZl92dmNfZGVibG9ja19ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwKTsKKworLyoqCisgKiBzYW8gZmlsdGVyIGZvciB0 aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAg eCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBD VFUKKyAqLwordm9pZCBmZl92dmNfc2FvX2ZpbHRlcihWVkNMb2NhbENvbnRleHQgKmxjLCBjb25z dCBpbnQgeDAsIGNvbnN0IGludCB5MCk7CisKK3ZvaWQgZmZfdnZjX2FsZl9jb3B5X2N0dV90b19o dihWVkNMb2NhbENvbnRleHQqIGxjLCBpbnQgeDAsIGludCB5MCk7CisKKy8qKgorICogYWxmIGZp bHRlciBmb3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICog QHBhcmFtIHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9u IGZvciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX2FsZl9maWx0ZXIoVlZDTG9jYWxDb250ZXh0 ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApOworCisjZW5kaWYgLy8gQVZDT0RFQ19W VkNfQ1RVX0gKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXJfdGVtcGxhdGUu YyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXJfdGVtcGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5hNGYxNzkyZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGli YXZjb2RlYy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jCkBAIC0wLDAgKzEsMTEzNSBAQAorLyoK KyAqIFZWQyBmaWx0ZXJzIERTUAorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBOdW8gTWkKKyAq CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworc3RhdGljIHZvaWQgRlVOQyhs bWNzX2ZpbHRlcl9sdW1hKSh1aW50OF90ICpfZHN0LCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29u c3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCB1aW50OF90ICpfbHV0KQorewor ICAgIGNvbnN0IHBpeGVsICpsdXQgPSAoY29uc3QgcGl4ZWwgKilfbHV0OworICAgIHBpeGVsICpk c3QgPSAocGl4ZWwqKV9kc3Q7CisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisg ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4 ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICBkc3RbeF0gPSBsdXRbZHN0W3hdXTsK KyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5D KHNhb19iYW5kX2ZpbHRlcikodWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3NyYywgcHRy ZGlmZl90IGRzdF9zdHJpZGUsIHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludDE2 X3QgKnNhb19vZmZzZXRfdmFsLCBjb25zdCBpbnQgc2FvX2xlZnRfY2xhc3MsIGNvbnN0IGludCB3 aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBwaXhlbCAqZHN0ICAgICAgID0gKHBpeGVs ICopX2RzdDsKKyAgICBjb25zdCBwaXhlbCAqc3JjID0gKHBpeGVsICopX3NyYzsKKyAgICBpbnQg b2Zmc2V0X3RhYmxlWzMyXSA9IHsgMCB9OworICAgIGludCBrLCB5LCB4OworICAgIGludCBzaGlm dCAgPSBCSVRfREVQVEggLSA1OworCisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOwor ICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAoayA9IDA7IGsgPCA0 OyBrKyspCisgICAgICAgIG9mZnNldF90YWJsZVsoayArIHNhb19sZWZ0X2NsYXNzKSAmIDMxXSA9 IHNhb19vZmZzZXRfdmFsW2sgKyAxXTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp IHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICBkc3Rb eF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNldF90YWJsZVtzcmNbeF0gPj4gc2hpZnRd KTsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRl OworICAgIH0KK30KKworI2RlZmluZSBDTVAoYSwgYikgKCgoYSkgPiAoYikpIC0gKChhKSA8IChi KSkpCisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfZmlsdGVyKSh1aW50OF90ICpfZHN0LCBj b25zdCB1aW50OF90ICpfc3JjLCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwKKyAgICBjb25zdCBpbnQx Nl90ICpzYW9fb2Zmc2V0X3ZhbCwgY29uc3QgaW50IGVvLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0 IGludCBoZWlnaHQpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgZWRnZV9pZHhbXSA9IHsg MSwgMiwgMCwgMywgNCB9OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgcG9zWzRdWzJdWzJdID0g eworICAgICAgICB7IHsgLTEsICAwIH0sIHsgIDEsIDAgfSB9LCAvLyBob3Jpem9udGFsCisgICAg ICAgIHsgeyAgMCwgLTEgfSwgeyAgMCwgMSB9IH0sIC8vIHZlcnRpY2FsCisgICAgICAgIHsgeyAt MSwgLTEgfSwgeyAgMSwgMSB9IH0sIC8vIDQ1IGRlZ3JlZQorICAgICAgICB7IHsgIDEsIC0xIH0s IHsgLTEsIDEgfSB9LCAvLyAxMzUgZGVncmVlCisgICAgfTsKKyAgICBwaXhlbCAqZHN0ICAgICAg ICAgID0gKHBpeGVsICopX2RzdDsKKyAgICBjb25zdCBwaXhlbCAqc3JjICAgID0gKHBpeGVsICop X3NyYzsKKyAgICBpbnQgYV9zdHJpZGUsIGJfc3RyaWRlOworICAgIGludCB4LCB5OworICAgIHB0 cmRpZmZfdCBzcmNfc3RyaWRlID0gKDIgKiBNQVhfUEJfU0laRSArIEFWX0lOUFVUX0JVRkZFUl9Q QURESU5HX1NJWkUpIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihw aXhlbCk7CisKKyAgICBhX3N0cmlkZSA9IHBvc1tlb11bMF1bMF0gKyBwb3NbZW9dWzBdWzFdICog c3JjX3N0cmlkZTsKKyAgICBiX3N0cmlkZSA9IHBvc1tlb11bMV1bMF0gKyBwb3NbZW9dWzFdWzFd ICogc3JjX3N0cmlkZTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAg ICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIGludCBkaWZmMCA9 IENNUChzcmNbeF0sIHNyY1t4ICsgYV9zdHJpZGVdKTsKKyAgICAgICAgICAgIGludCBkaWZmMSA9 IENNUChzcmNbeF0sIHNyY1t4ICsgYl9zdHJpZGVdKTsKKyAgICAgICAgICAgIGludCBvZmZzZXRf dmFsICAgICAgICA9IGVkZ2VfaWR4WzIgKyBkaWZmMCArIGRpZmYxXTsKKyAgICAgICAgICAgIGRz dFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hdICsgc2FvX29mZnNldF92YWxbb2Zmc2V0X3ZhbF0p OworICAgICAgICB9CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgICAgICBkc3QgKz0g ZHN0X3N0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfcmVzdG9y ZV8wKSh1aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLAorICAgIHB0cmRpZmZfdCBk c3Rfc3RyaWRlLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgU0FPUGFyYW1zICpzYW8sCisg ICAgY29uc3QgaW50ICpib3JkZXJzLCBjb25zdCBpbnQgX3dpZHRoLCBjb25zdCBpbnQgX2hlaWdo dCwgY29uc3QgaW50IGNfaWR4LAorICAgIGNvbnN0IHVpbnQ4X3QgKnZlcnRfZWRnZSwgY29uc3Qg dWludDhfdCAqaG9yaXpfZWRnZSwgY29uc3QgdWludDhfdCAqZGlhZ19lZGdlKQoreworICAgIGlu dCB4LCB5OworICAgIHBpeGVsICpkc3QgICAgICAgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilf ZHN0OworICAgIGNvbnN0IHBpeGVsICpzcmMgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilfc3Jj OworICAgIGNvbnN0IGludDE2X3QgKnNhb19vZmZzZXRfdmFsICAgPSBzYW8tPm9mZnNldF92YWxb Y19pZHhdOworICAgIGNvbnN0IGludCBzYW9fZW9fY2xhc3MgICAgICAgICAgPSBzYW8tPmVvX2Ns YXNzW2NfaWR4XTsKKyAgICBpbnQgaW5pdF94ID0gMCwgd2lkdGggPSBfd2lkdGgsIGhlaWdodCA9 IF9oZWlnaHQ7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0 cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9f VkVSVCkgeworICAgICAgICBpZiAoYm9yZGVyc1swXSkgeworICAgICAgICAgICAgaW50IG9mZnNl dF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBo ZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlkZV0gPSBhdl9j bGlwX3BpeGVsKHNyY1t5ICogc3JjX3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGluaXRfeCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvcmRl cnNbMl0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29mZnNldF92YWxbMF07 CisgICAgICAgICAgICBpbnQgb2Zmc2V0ICAgICA9IHdpZHRoIC0gMTsKKyAgICAgICAgICAgIGZv ciAoeCA9IDA7IHggPCBoZWlnaHQ7IHgrKykgeworICAgICAgICAgICAgICAgIGRzdFt4ICogZHN0 X3N0cmlkZSArIG9mZnNldF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4ICogc3JjX3N0cmlkZSArIG9m ZnNldF0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdpZHRoLS07 CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9SSVop IHsKKyAgICAgICAgaWYgKGJvcmRlcnNbMV0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFs ID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3g7IHggPCB3 aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hd ICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvcmRlcnNbM10pIHsKKyAg ICAgICAgICAgIGludCBvZmZzZXRfdmFsICAgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAg ICAgIHB0cmRpZmZfdCB5X2RzdF9zdHJpZGUgPSBkc3Rfc3RyaWRlICogKGhlaWdodCAtIDEpOwor ICAgICAgICAgICAgcHRyZGlmZl90IHlfc3JjX3N0cmlkZSA9IHNyY19zdHJpZGUgKiAoaGVpZ2h0 IC0gMSk7CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3g7IHggPCB3aWR0aDsgeCsrKQorICAg ICAgICAgICAgICAgIGRzdFt4ICsgeV9kc3Rfc3RyaWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3gg KyB5X3NyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICBoZWlnaHQtLTsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzEp KHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsCisgICAgcHRyZGlmZl90IGRzdF9z dHJpZGUsIHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBTQU9QYXJhbXMgKnNhbywKKyAgICBj b25zdCBpbnQgKmJvcmRlcnMsIGNvbnN0IGludCBfd2lkdGgsIGNvbnN0IGludCBfaGVpZ2h0LCBj b25zdCBpbnQgY19pZHgsCisgICAgY29uc3QgdWludDhfdCAqdmVydF9lZGdlLCBjb25zdCB1aW50 OF90ICpob3Jpel9lZGdlLCBjb25zdCB1aW50OF90ICpkaWFnX2VkZ2UpCit7CisgICAgaW50IHgs IHk7CisgICAgcGl4ZWwgKmRzdCAgICAgICAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9kc3Q7 CisgICAgY29uc3QgcGl4ZWwgKnNyYyAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7Cisg ICAgY29uc3QgaW50MTZfdCAqc2FvX29mZnNldF92YWwgICA9IHNhby0+b2Zmc2V0X3ZhbFtjX2lk eF07CisgICAgY29uc3QgaW50IHNhb19lb19jbGFzcyAgICAgICAgICA9IHNhby0+ZW9fY2xhc3Nb Y19pZHhdOworICAgIGludCBpbml0X3ggPSAwLCBpbml0X3kgPSAwLCB3aWR0aCA9IF93aWR0aCwg aGVpZ2h0ID0gX2hlaWdodDsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAg ICBzcmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBpZiAoc2FvX2VvX2NsYXNzICE9 IFNBT19FT19WRVJUKSB7CisgICAgICAgIGlmIChib3JkZXJzWzBdKSB7CisgICAgICAgICAgICBp bnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgZm9yICh5ID0g MDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAgICAgICAgZHN0W3kgKiBkc3Rfc3RyaWRl XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3kgKiBzcmNfc3RyaWRlXSArIG9mZnNldF92YWwpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaW5pdF94ID0gMTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoYm9yZGVyc1syXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0 X3ZhbFswXTsKKyAgICAgICAgICAgIGludCBvZmZzZXQgICAgID0gd2lkdGggLSAxOworICAgICAg ICAgICAgZm9yICh4ID0gMDsgeCA8IGhlaWdodDsgeCsrKSB7CisgICAgICAgICAgICAgICAgZHN0 W3ggKiBkc3Rfc3RyaWRlICsgb2Zmc2V0XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3ggKiBzcmNfc3Ry aWRlICsgb2Zmc2V0XSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg d2lkdGgtLTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2FvX2VvX2NsYXNzICE9IFNBT19F T19IT1JJWikgeworICAgICAgICBpZiAoYm9yZGVyc1sxXSkgeworICAgICAgICAgICAgaW50IG9m ZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRf eDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3hdID0gYXZfY2xpcF9waXhl bChzcmNbeF0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIGluaXRfeSA9IDE7CisgICAgICAg IH0KKyAgICAgICAgaWYgKGJvcmRlcnNbM10pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFs ICAgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIHB0cmRpZmZfdCB5X2RzdF9zdHJp ZGUgPSBkc3Rfc3RyaWRlICogKGhlaWdodCAtIDEpOworICAgICAgICAgICAgcHRyZGlmZl90IHlf c3JjX3N0cmlkZSA9IHNyY19zdHJpZGUgKiAoaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBmb3Ig KHggPSBpbml0X3g7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFt4ICsgeV9k c3Rfc3RyaWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3ggKyB5X3NyY19zdHJpZGVdICsgb2Zmc2V0 X3ZhbCk7CisgICAgICAgICAgICBoZWlnaHQtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsK KyAgICAgICAgaW50IHNhdmVfdXBwZXJfbGVmdCAgPSAhZGlhZ19lZGdlWzBdICYmIHNhb19lb19j bGFzcyA9PSBTQU9fRU9fMTM1RCAmJiAhYm9yZGVyc1swXSAmJiAhYm9yZGVyc1sxXTsKKyAgICAg ICAgaW50IHNhdmVfdXBwZXJfcmlnaHQgPSAhZGlhZ19lZGdlWzFdICYmIHNhb19lb19jbGFzcyA9 PSBTQU9fRU9fNDVEICAmJiAhYm9yZGVyc1sxXSAmJiAhYm9yZGVyc1syXTsKKyAgICAgICAgaW50 IHNhdmVfbG93ZXJfcmlnaHQgPSAhZGlhZ19lZGdlWzJdICYmIHNhb19lb19jbGFzcyA9PSBTQU9f RU9fMTM1RCAmJiAhYm9yZGVyc1syXSAmJiAhYm9yZGVyc1szXTsKKyAgICAgICAgaW50IHNhdmVf bG93ZXJfbGVmdCAgPSAhZGlhZ19lZGdlWzNdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fNDVE ICAmJiAhYm9yZGVyc1swXSAmJiAhYm9yZGVyc1szXTsKKworICAgICAgICAvLyBSZXN0b3JlIHBp eGVscyB0aGF0IGNhbid0IGJlIG1vZGlmaWVkCisgICAgICAgIGlmICh2ZXJ0X2VkZ2VbMF0gJiYg c2FvX2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7CisgICAgICAgICAgICBmb3IgKHkgPSBpbml0 X3kgKyBzYXZlX3VwcGVyX2xlZnQ7IHkgPCBoZWlnaHQgLSBzYXZlX2xvd2VyX2xlZnQ7IHkrKykK KyAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJpZGVdID0gc3JjW3kgKiBzcmNfc3RyaWRl XTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmVydF9lZGdlWzFdICYmIHNhb19lb19jbGFzcyAh PSBTQU9fRU9fVkVSVCkgeworICAgICAgICAgICAgZm9yICh5ID0gaW5pdF95ICsgc2F2ZV91cHBl cl9yaWdodDsgeSA8IGhlaWdodCAtIHNhdmVfbG93ZXJfcmlnaHQ7IHkrKykKKyAgICAgICAgICAg ICAgICBkc3RbeSAqIGRzdF9zdHJpZGUgKyB3aWR0aCAtIDFdID0gc3JjW3kgKiBzcmNfc3RyaWRl ICsgd2lkdGggLSAxXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChob3Jpel9lZGdlWzBdICYm IHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9SSVopIHsKKyAgICAgICAgICAgIGZvciAoeCA9IGlu aXRfeCArIHNhdmVfdXBwZXJfbGVmdDsgeCA8IHdpZHRoIC0gc2F2ZV91cHBlcl9yaWdodDsgeCsr KQorICAgICAgICAgICAgICAgIGRzdFt4XSA9IHNyY1t4XTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoaG9yaXpfZWRnZVsxXSAmJiBzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAg ICAgICAgICBmb3IgKHggPSBpbml0X3ggKyBzYXZlX2xvd2VyX2xlZnQ7IHggPCB3aWR0aCAtIHNh dmVfbG93ZXJfcmlnaHQ7IHgrKykKKyAgICAgICAgICAgICAgICBkc3RbKGhlaWdodCAtIDEpICog ZHN0X3N0cmlkZSArIHhdID0gc3JjWyhoZWlnaHQgLSAxKSAqIHNyY19zdHJpZGUgKyB4XTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoZGlhZ19lZGdlWzBdICYmIHNhb19lb19jbGFzcyA9PSBTQU9f RU9fMTM1RCkKKyAgICAgICAgICAgIGRzdFswXSA9IHNyY1swXTsKKyAgICAgICAgaWYgKGRpYWdf ZWRnZVsxXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzQ1RCkKKyAgICAgICAgICAgIGRzdFt3 aWR0aCAtIDFdID0gc3JjW3dpZHRoIC0gMV07CisgICAgICAgIGlmIChkaWFnX2VkZ2VbMl0gJiYg c2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEKQorICAgICAgICAgICAgZHN0W2RzdF9zdHJpZGUg KiAoaGVpZ2h0IC0gMSkgKyB3aWR0aCAtIDFdID0gc3JjW3NyY19zdHJpZGUgKiAoaGVpZ2h0IC0g MSkgKyB3aWR0aCAtIDFdOworICAgICAgICBpZiAoZGlhZ19lZGdlWzNdICYmIHNhb19lb19jbGFz cyA9PSBTQU9fRU9fNDVEKQorICAgICAgICAgICAgZHN0W2RzdF9zdHJpZGUgKiAoaGVpZ2h0IC0g MSldID0gc3JjW3NyY19zdHJpZGUgKiAoaGVpZ2h0IC0gMSldOworCisgICAgfQorfQorCisjdW5k ZWYgQ01QCisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludDE2X3QgRlVOQyhhbGZfY2xpcCko cGl4ZWwgY3VyciwgcGl4ZWwgdjAsIHBpeGVsIHYxLCBpbnQxNl90IGNsaXApCit7CisgICAgcmV0 dXJuIGF2X2NsaXAodjAgLSBjdXJyLCAtY2xpcCwgY2xpcCkgKyBhdl9jbGlwKHYxIC0gY3Vyciwg LWNsaXAsIGNsaXApOworfQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9maWx0ZXJfbHVtYSkodWlu dDhfdCAqX2RzdCwgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIHB0 cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdo dCwgY29uc3QgaW50MTZfdCAqZmlsdGVyLCBjb25zdCBpbnQxNl90ICpjbGlwLCBjb25zdCBpbnQg dmJfcG9zKQoreworICAgIGNvbnN0IHBpeGVsICpzcmMgICAgPSAocGl4ZWwgKilfc3JjOworICAg IGNvbnN0IGludCBzaGlmdCAgICAgPSA3OworICAgIGNvbnN0IGludCBvZmZzZXQgICAgPSAxIDw8 ICggc2hpZnQgLSAxICk7CisgICAgY29uc3QgaW50IHZiX2Fib3ZlICA9IHZiX3BvcyAtIDQ7Cisg ICAgY29uc3QgaW50IHZiX2JlbG93ICA9IHZiX3BvcyArIDM7CisKKyAgICBkc3Rfc3RyaWRlIC89 IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAg Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAg ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnMwID0gc3JjICsgeSAqIHNyY19zdHJpZGUgKyB4OworICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnMxID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnMyID0gczAgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4 ZWwgKnMzID0gczEgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM0ID0g czIgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM1ID0gczMgKyBzcmNf c3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM2ID0gczQgLSBzcmNfc3RyaWRlOwor CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEFMRl9CTE9DS19TSVpFOyBpKyspIHsK KyAgICAgICAgICAgICAgICBwaXhlbCAqZHN0ID0gKHBpeGVsICopX2RzdCArICh5ICsgaSkgKiBk c3Rfc3RyaWRlICsgeDsKKworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCA9IHMwICsg aSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxID0gczEgKyBp ICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDIgPSBzMiArIGkg KiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMyA9IHMzICsgaSAq IHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA0ID0gczQgKyBpICog c3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDUgPSBzNSArIGkgKiBz cmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNiA9IHM2ICsgaSAqIHNy Y19zdHJpZGU7CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9hYm92ZSA9 ICh5ICsgaSA8ICB2Yl9wb3MpICYmICh5ICsgaSA+PSB2Yl9wb3MgLSAxKTsKKyAgICAgICAgICAg ICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9iZWxvdyA9ICh5ICsgaSA+PSB2Yl9wb3MpICYmICh5 ICsgaSA8PSB2Yl9wb3MpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiID0g aXNfbmVhcl92Yl9hYm92ZSB8fCBpc19uZWFyX3ZiX2JlbG93OworCisgICAgICAgICAgICAgICAg aWYgKCh5ICsgaSA8IHZiX3BvcykgJiYgKCh5ICsgaSkgPj0gdmJfYWJvdmUpKSB7CisgICAgICAg ICAgICAgICAgICAgIHAxID0gKHkgKyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMTsKKyAgICAg ICAgICAgICAgICAgICAgcDMgPSAoeSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMSA6IHAzOworICAg ICAgICAgICAgICAgICAgICBwNSA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHAzIDogcDU7CisK KyAgICAgICAgICAgICAgICAgICAgcDIgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAy OworICAgICAgICAgICAgICAgICAgICBwNCA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAyIDog cDQ7CisgICAgICAgICAgICAgICAgICAgIHA2ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDQg OiBwNjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh5ICsgaSA+PSB2Yl9wb3MpICYmICgo eSArIGkpIDw9IHZiX2JlbG93KSkgeworICAgICAgICAgICAgICAgICAgICBwMiA9ICh5ICsgaSA9 PSB2Yl9wb3MgICAgKSA/IHAwIDogcDI7CisgICAgICAgICAgICAgICAgICAgIHA0ID0gKHkgKyBp IDw9IHZiX3BvcyArIDEpID8gcDIgOiBwNDsKKyAgICAgICAgICAgICAgICAgICAgcDYgPSAoeSAr IGkgPD0gdmJfcG9zICsgMikgPyBwNCA6IHA2OworCisgICAgICAgICAgICAgICAgICAgIHAxID0g KHkgKyBpID09IHZiX3BvcyAgICApID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAgICAgICAgcDMg PSAoeSArIGkgPD0gdmJfcG9zICsgMSkgPyBwMSA6IHAzOworICAgICAgICAgICAgICAgICAgICBw NSA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHAzIDogcDU7CisgICAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBBTEZfQkxPQ0tfU0laRTsgaisr KSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgICAgICAg ICBjb25zdCBwaXhlbCBjdXJyID0gKnAwOworCisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbMF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDVbKzBdLCBwNlsrMF0sIGNsaXBbMF0p OworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFdICAqIEZVTkMoYWxmX2NsaXAp KGN1cnIsIHAzWysxXSwgcDRbLTFdLCBjbGlwWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt ICs9IGZpbHRlclsyXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1srMF0sIHA0WyswXSwgY2xp cFsyXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbM10gICogRlVOQyhhbGZf Y2xpcCkoY3VyciwgcDNbLTFdLCBwNFsrMV0sIGNsaXBbM10pOworICAgICAgICAgICAgICAgICAg ICBzdW0gKz0gZmlsdGVyWzRdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWysyXSwgcDJbLTJd LCBjbGlwWzRdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls1XSAgKiBGVU5D KGFsZl9jbGlwKShjdXJyLCBwMVsrMV0sIHAyWy0xXSwgY2xpcFs1XSk7CisgICAgICAgICAgICAg ICAgICAgIHN1bSArPSBmaWx0ZXJbNl0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbKzBdLCBw MlsrMF0sIGNsaXBbNl0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzddICAq IEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWy0xXSwgcDJbKzFdLCBjbGlwWzddKTsKKyAgICAgICAg ICAgICAgICAgICAgc3VtICs9IGZpbHRlcls4XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVst Ml0sIHAyWysyXSwgY2xpcFs4XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJb OV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzNdLCBwMFstM10sIGNsaXBbOV0pOworICAg ICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzEwXSAqIEZVTkMoYWxmX2NsaXApKGN1cnIs IHAwWysyXSwgcDBbLTJdLCBjbGlwWzEwXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbMTFdICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzFdLCBwMFstMV0sIGNsaXBbMTFd KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX25lYXJfdmIpCisgICAgICAgICAgICAg ICAgICAgICAgICBzdW0gPSAoc3VtICsgb2Zmc2V0KSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSArICgxIDw8ICgo c2hpZnQgKyAzKSAtIDEpKSkgPj4gKHNoaWZ0ICsgMyk7CisgICAgICAgICAgICAgICAgICAgIHN1 bSArPSBjdXJyOworICAgICAgICAgICAgICAgICAgICBkc3Rbal0gPSBDTElQKHN1bSk7CisKKyAg ICAgICAgICAgICAgICAgICAgcDArKzsKKyAgICAgICAgICAgICAgICAgICAgcDErKzsKKyAgICAg ICAgICAgICAgICAgICAgcDIrKzsKKyAgICAgICAgICAgICAgICAgICAgcDMrKzsKKyAgICAgICAg ICAgICAgICAgICAgcDQrKzsKKyAgICAgICAgICAgICAgICAgICAgcDUrKzsKKyAgICAgICAgICAg ICAgICAgICAgcDYrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBmaWx0ZXIgKz0gQUxGX05VTV9DT0VGRl9MVU1BOworICAgICAgICAgICAgY2xpcCArPSBB TEZfTlVNX0NPRUZGX0xVTUE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZV TkMoYWxmX2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QqIF9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRl LCBjb25zdCB1aW50OF90KiBfc3JjLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBp bnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludDE2X3QqIGZpbHRlciwgY29uc3Qg aW50MTZfdCogY2xpcCwgY29uc3QgaW50IHZiX3BvcykKK3sKKyAgICBjb25zdCBwaXhlbCAqc3Jj ID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBpbnQgc2hpZnQgID0gNzsKKyAgICBjb25zdCBp bnQgb2Zmc2V0ID0gMSA8PCAoIHNoaWZ0IC0gMSApOworICAgIGNvbnN0IGludCB2Yl9hYm92ZSAg PSB2Yl9wb3MgLSAyOworICAgIGNvbnN0IGludCB2Yl9iZWxvdyAgPSB2Yl9wb3MgKyAxOworCisg ICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9m KHBpeGVsKTsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IEFMRl9CTE9D S19TSVpFKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gQUxGX0JM T0NLX1NJWkUpIHsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMCA9IHNyYyArIHkgKiBzcmNf c3RyaWRlICsgeDsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMSA9IHMwICsgc3JjX3N0cmlk ZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMiA9IHMwIC0gc3JjX3N0cmlkZTsKKyAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpzMyA9IHMxICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNv bnN0IHBpeGVsICpzNCA9IHMyIC0gc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpzNSA9IHMzICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNiA9IHM0 IC0gc3JjX3N0cmlkZTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfQkxP Q0tfU0laRTsgaSsrKSB7CisgICAgICAgICAgICAgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCAqKV9k c3QgKyAoeSArIGkpICogZHN0X3N0cmlkZSArIHg7CisKKyAgICAgICAgICAgICAgICBjb25zdCBw aXhlbCAqcDAgPSBzMCArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBp eGVsICpwMSA9IHMxICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4 ZWwgKnAyID0gczIgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhl bCAqcDMgPSBzMyArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpwNCA9IHM0ICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwg KnA1ID0gczUgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAq cDYgPSBzNiArIGkgKiBzcmNfc3RyaWRlOworCisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlz X25lYXJfdmJfYWJvdmUgPSAoeSArIGkgPCAgdmJfcG9zKSAmJiAoeSArIGkgPj0gdmJfcG9zIC0g MSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlzX25lYXJfdmJfYmVsb3cgPSAoeSArIGkg Pj0gdmJfcG9zKSAmJiAoeSArIGkgPD0gdmJfcG9zKTsKKyAgICAgICAgICAgICAgICBjb25zdCBp bnQgaXNfbmVhcl92YiA9IGlzX25lYXJfdmJfYWJvdmUgfHwgaXNfbmVhcl92Yl9iZWxvdzsKKwor ICAgICAgICAgICAgICAgIGlmICgoeSArIGkgPCB2Yl9wb3MpICYmICgoeSArIGkpID49IHZiX2Fi b3ZlKSkgeworICAgICAgICAgICAgICAgICAgICBwMSA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/ IHAwIDogcDE7CisgICAgICAgICAgICAgICAgICAgIHAzID0gKHkgKyBpID49IHZiX3BvcyAtIDIp ID8gcDEgOiBwMzsKKyAgICAgICAgICAgICAgICAgICAgcDUgPSAoeSArIGkgPj0gdmJfcG9zIC0g MykgPyBwMyA6IHA1OworCisgICAgICAgICAgICAgICAgICAgIHAyID0gKHkgKyBpID09IHZiX3Bv cyAtIDEpID8gcDAgOiBwMjsKKyAgICAgICAgICAgICAgICAgICAgcDQgPSAoeSArIGkgPj0gdmJf cG9zIC0gMikgPyBwMiA6IHA0OworICAgICAgICAgICAgICAgICAgICBwNiA9ICh5ICsgaSA+PSB2 Yl9wb3MgLSAzKSA/IHA0IDogcDY7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoeSArIGkg Pj0gdmJfcG9zKSAmJiAoKHkgKyBpKSA8PSB2Yl9iZWxvdykpIHsKKyAgICAgICAgICAgICAgICAg ICAgcDIgPSAoeSArIGkgPT0gdmJfcG9zICAgICkgPyBwMCA6IHAyOworICAgICAgICAgICAgICAg ICAgICBwNCA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAxKSA/IHAyIDogcDQ7CisgICAgICAgICAgICAg ICAgICAgIHA2ID0gKHkgKyBpIDw9IHZiX3BvcyArIDIpID8gcDQgOiBwNjsKKworICAgICAgICAg ICAgICAgICAgICBwMSA9ICh5ICsgaSA9PSB2Yl9wb3MgICAgKSA/IHAwIDogcDE7CisgICAgICAg ICAgICAgICAgICAgIHAzID0gKHkgKyBpIDw9IHZiX3BvcyArIDEpID8gcDEgOiBwMzsKKyAgICAg ICAgICAgICAgICAgICAgcDUgPSAoeSArIGkgPD0gdmJfcG9zICsgMikgPyBwMyA6IHA1OworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQUxG X0JMT0NLX1NJWkU7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgY3VyciA9ICpwMDsKKworICAgICAgICAgICAg ICAgICAgICBzdW0gKz0gZmlsdGVyWzBdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAzWyswXSwg cDRbKzBdLCBjbGlwWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclsxXSAg KiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMV0sIHAyWy0xXSwgY2xpcFsxXSk7CisgICAgICAg ICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMl0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFb KzBdLCBwMlsrMF0sIGNsaXBbMl0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzNdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWy0xXSwgcDJbKzFdLCBjbGlwWzNdKTsKKyAg ICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls0XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJy LCBwMFsrMl0sIHAwWy0yXSwgY2xpcFs0XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbNV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzFdLCBwMFstMV0sIGNsaXBbNV0p OworCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNfbmVhcl92YikKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN1bSA9IChzdW0gKyBvZmZzZXQpID4+IHNoaWZ0OworICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gPSAoc3VtICsgKDEgPDwgKChz aGlmdCArIDMpIC0gMSkpKSA+PiAoc2hpZnQgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt ICs9IGN1cnI7CisgICAgICAgICAgICAgICAgICAgIGRzdFtqXSA9IENMSVAoc3VtKTsKKworICAg ICAgICAgICAgICAgICAgICBwMCsrOworICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAg ICAgICAgICAgICAgICBwMisrOworICAgICAgICAgICAgICAgICAgICBwMysrOworICAgICAgICAg ICAgICAgICAgICBwNCsrOworICAgICAgICAgICAgICAgICAgICBwNSsrOworICAgICAgICAgICAg ICAgICAgICBwNisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2NjKSh1aW50OF90ICpf ZHN0LCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgdWludDhfdCAqX2x1bWEsIGNvbnN0IHB0 cmRpZmZfdCBsdW1hX3N0cmlkZSwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWln aHQsIGNvbnN0IGludCBocywgY29uc3QgaW50IHZzLCBjb25zdCBpbnQxNl90ICpmaWx0ZXIsIGNv bnN0IGludCB2Yl9wb3MpCit7CisgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSA9IGx1bWFfc3Ry aWRlIC8gc2l6ZW9mKHBpeGVsKTsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsK KworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChp bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAg ICAgICAgICAgIHBpeGVsICpkc3QgID0gKHBpeGVsICopX2RzdCAgKyB5ICogZHN0X3N0cmlkZSAr IHg7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqc3JjICA9IChwaXhlbCAqKV9sdW1hICsgKHkg PDwgdnMpICogc3RyaWRlICsgKHggPDwgaHMpOworCisgICAgICAgICAgICBjb25zdCBwaXhlbCAq czAgPSBzcmMgLSBzdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczEgPSBzcmM7Cisg ICAgICAgICAgICBjb25zdCBwaXhlbCAqczIgPSBzcmMgKyBzdHJpZGU7CisgICAgICAgICAgICBj b25zdCBwaXhlbCAqczMgPSBzcmMgKyAyICogc3RyaWRlOworCisgICAgICAgICAgICBjb25zdCBp bnQgcG9zID0geSA8PCB2czsKKyAgICAgICAgICAgIGlmICghdnMgJiYgKHBvcyA9PSB2Yl9wb3Mg fHwgcG9zID09IHZiX3BvcyArIDEpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg ICAgICAgICBpZiAocG9zID09ICh2Yl9wb3MgLSAyKSB8fCBwb3MgPT0gKHZiX3BvcyArIDEpKQor ICAgICAgICAgICAgICAgIHMzID0gczI7CisgICAgICAgICAgICBlbHNlICBpZiAocG9zID09ICh2 Yl9wb3MgLSAxKSB8fCBwb3MgPT0gdmJfcG9zKQorICAgICAgICAgICAgICAgIHMzID0gczIgPSBz MCA9IHMxOworCisKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMF0gKiAoKnMwIC0gKnNyYyk7 CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFdICogKCooczEgLSAxKSAtICpzcmMpOworICAg ICAgICAgICAgc3VtICs9IGZpbHRlclsyXSAqICgqKHMxICsgMSkgLSAqc3JjKTsKKyAgICAgICAg ICAgIHN1bSArPSBmaWx0ZXJbM10gKiAoKihzMiAtIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBz dW0gKz0gZmlsdGVyWzRdICogKCpzMiAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRl cls1XSAqICgqKHMyICsgMSkgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNl0g KiAoKnMzIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gPSBhdl9jbGlwKChzdW0gKyA2NCkgPj4g NywgLSgxIDw8IChCSVRfREVQVEggLSAxKSksICgxIDw8IChCSVRfREVQVEggLSAxKSkgLSAxKTsK KyAgICAgICAgICAgIHN1bSArPSAqZHN0OworICAgICAgICAgICAgKmRzdCA9IGF2X2NsaXBfcGl4 ZWwoc3VtKTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2RlZmluZSBBTEZfRElSX1ZFUlQgICAg ICAgIDAKKyNkZWZpbmUgQUxGX0RJUl9IT1JaICAgICAgICAxCisjZGVmaW5lIEFMRl9ESVJfRElH QTAgICAgICAgMgorI2RlZmluZSBBTEZfRElSX0RJR0ExICAgICAgIDMKKworc3RhdGljIHZvaWQg RlVOQyhhbGZfZ2V0X2lkeCkoaW50ICpjbGFzc19pZHgsIGludCAqdHJhbnNwb3NlX2lkeCwgY29u c3QgaW50ICpzdW0sIGNvbnN0IGludCBhYykKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGFyZ192 YXJbXSA9IHswLCAxLCAyLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCA0IH07 CisKKyAgICBpbnQgaHYwLCBodjEsIGRpcl9odiwgZDAsIGQxLCBkaXJfZCwgaHZkMSwgaHZkMCwg c3VtX2h2LCBkaXIxOworCisgICAgZGlyX2h2ID0gc3VtW0FMRl9ESVJfVkVSVF0gPD0gc3VtW0FM Rl9ESVJfSE9SWl07CisgICAgaHYxICAgID0gRkZNQVgoc3VtW0FMRl9ESVJfVkVSVF0sIHN1bVtB TEZfRElSX0hPUlpdKTsKKyAgICBodjAgICAgPSBGRk1JTihzdW1bQUxGX0RJUl9WRVJUXSwgc3Vt W0FMRl9ESVJfSE9SWl0pOworCisgICAgZGlyX2QgID0gc3VtW0FMRl9ESVJfRElHQTBdIDw9IHN1 bVtBTEZfRElSX0RJR0ExXTsKKyAgICBkMSAgICAgPSBGRk1BWChzdW1bQUxGX0RJUl9ESUdBMF0s IHN1bVtBTEZfRElSX0RJR0ExXSk7CisgICAgZDAgICAgID0gRkZNSU4oc3VtW0FMRl9ESVJfRElH QTBdLCBzdW1bQUxGX0RJUl9ESUdBMV0pOworCisgICAgLy9wcm9tb3RlIHRvIGF2b2lkIG92ZXJm bG93CisgICAgZGlyMSA9ICh1aW50NjRfdClkMSAqIGh2MCA8PSAodWludDY0X3QpaHYxICogZDA7 CisgICAgaHZkMSA9IGRpcjEgPyBodjEgOiBkMTsKKyAgICBodmQwID0gZGlyMSA/IGh2MCA6IGQw OworCisgICAgc3VtX2h2ID0gc3VtW0FMRl9ESVJfSE9SWl0gKyBzdW1bQUxGX0RJUl9WRVJUXTsK KyAgICAqY2xhc3NfaWR4ID0gYXJnX3Zhclthdl9jbGlwX3VpbnRwMihzdW1faHYgKiBhYyA+PiAo QklUX0RFUFRIIC0gMSksIDQpXTsKKyAgICBpZiAoaHZkMSAqIDIgPiA5ICogaHZkMCkKKyAgICAg ICAgKmNsYXNzX2lkeCArPSAoKGRpcjEgPDwgMSkgKyAyKSAqIDU7CisgICAgZWxzZSBpZiAoaHZk MSA+IDIgKiBodmQwKQorICAgICAgICAqY2xhc3NfaWR4ICs9ICgoZGlyMSA8PCAxKSArIDEpICog NTsKKworICAgICp0cmFuc3Bvc2VfaWR4ID0gZGlyX2QgKiAyICsgZGlyX2h2OworfQorCitzdGF0 aWMgdm9pZCBGVU5DKGFsZl9jbGFzc2lmeSkoaW50ICpjbGFzc19pZHgsIGludCAqdHJhbnNwb3Nl X2lkeCwKKyAgICBjb25zdCB1aW50OF90ICpfc3JjLCBjb25zdCBwdHJkaWZmX3QgX3NyY19zdHJp ZGUsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBpbnQgdmJf cG9zLCBpbnQgKmdyYWRpZW50X3RtcCkKK3sKKyAgICBpbnQgKmdyYWQ7CisKKyAgICBjb25zdCBp bnQgaCA9IGhlaWdodCArIEFMRl9HUkFESUVOVF9CT1JERVIgKiAyOworICAgIGNvbnN0IGludCB3 ID0gd2lkdGggICsgQUxGX0dSQURJRU5UX0JPUkRFUiAqIDI7CisgICAgY29uc3QgaW50IHNpemUg PSAoQUxGX0JMT0NLX1NJWkUgKyBBTEZfR1JBRElFTlRfQk9SREVSICogMikgLyBBTEZfR1JBRElF TlRfU1RFUDsKKyAgICBjb25zdCBpbnQgZ3N0cmlkZSA9ICh3IC8gQUxGX0dSQURJRU5UX1NURVAp ICogQUxGX05VTV9ESVI7CisKKyAgICBjb25zdCBwaXhlbCAqc3JjICAgICAgICAgICA9IChjb25z dCBwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUgPSBfc3JjX3N0 cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgc3JjIC09IChBTEZfR1JBRElFTlRfQk9SREVSICsg MSkgKiBzcmNfc3RyaWRlICsgQUxGX0dSQURJRU5UX0JPUkRFUjsKKworICAgIGdyYWQgPSBncmFk aWVudF90bXA7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5ICs9IEFMRl9HUkFESUVOVF9T VEVQKSB7CisgICAgICAgIGNvbnN0IHBpeGVsICpzMCAgPSBzcmMgKyB5ICogc3JjX3N0cmlkZTsK KyAgICAgICAgY29uc3QgcGl4ZWwgKnMxICA9IHMwICsgc3JjX3N0cmlkZTsKKyAgICAgICAgY29u c3QgcGl4ZWwgKnMyICA9IHMxICsgc3JjX3N0cmlkZTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnMz ICA9IHMyICsgc3JjX3N0cmlkZTsKKworICAgICAgICBpZiAoeSA9PSB2Yl9wb3MpICAgICAgICAg IC8vYWJvdmUKKyAgICAgICAgICAgIHMzID0gczI7CisgICAgICAgIGVsc2UgaWYgKHkgPT0gdmJf cG9zICsgQUxGX0dSQURJRU5UX0JPUkRFUikKKyAgICAgICAgICAgIHMwID0gczE7CisKKyAgICAg ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4ICs9IEFMRl9HUkFESUVOVF9TVEVQKSB7CisgICAg ICAgICAgICAvL3R3byBwb2ludHMgYSB0aW1lCisgICAgICAgICAgICBjb25zdCBwaXhlbCAqYTAg ID0gczAgKyB4OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAwICA9IHMxICsgeDsKKyAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpiMCAgPSBzMiArIHg7CisgICAgICAgICAgICBjb25zdCBpbnQg dmFsMCAgID0gKCpwMCkgPDwgMTsKKworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmExICA9IHMx ICsgeCArIDE7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDEgID0gczIgKyB4ICsgMTsKKyAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpiMSAgPSBzMyArIHggKyAxOworICAgICAgICAgICAgY29u c3QgaW50IHZhbDEgICA9ICgqcDEpIDw8IDE7CisKKyAgICAgICAgICAgIGdyYWRbQUxGX0RJUl9W RVJUXSAgPSBGRkFCUyh2YWwwIC0gKmEwIC0gKmIwKSArIEZGQUJTKHZhbDEgLSAqYTEgLSAqYjEp OworICAgICAgICAgICAgZ3JhZFtBTEZfRElSX0hPUlpdICA9IEZGQUJTKHZhbDAgLSAqKHAwIC0g MSkgLSAqKHAwICsgMSkpICsgRkZBQlModmFsMSAtICoocDEgLSAxKSAtICoocDEgKyAxKSk7Cisg ICAgICAgICAgICBncmFkW0FMRl9ESVJfRElHQTBdID0gRkZBQlModmFsMCAtICooYTAgLSAxKSAt ICooYjAgKyAxKSkgKyBGRkFCUyh2YWwxIC0gKihhMSAtIDEpIC0gKihiMSArIDEpKTsKKyAgICAg ICAgICAgIGdyYWRbQUxGX0RJUl9ESUdBMV0gPSBGRkFCUyh2YWwwIC0gKihhMCArIDEpIC0gKihi MCAtIDEpKSArIEZGQUJTKHZhbDEgLSAqKGExICsgMSkgLSAqKGIxIC0gMSkpOworICAgICAgICAg ICAgZ3JhZCArPSBBTEZfTlVNX0RJUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50 IHkgPSAwOyB5IDwgaGVpZ2h0IDsgeSArPSBBTEZfQkxPQ0tfU0laRSApIHsKKyAgICAgICAgaW50 IHN0YXJ0ID0gMDsKKyAgICAgICAgaW50IGVuZCAgID0gKEFMRl9CTE9DS19TSVpFICsgQUxGX0dS QURJRU5UX0JPUkRFUiAqIDIpIC8gQUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgIGludCBhYyAg ICA9IDI7CisgICAgICAgIGlmICh5ICsgQUxGX0JMT0NLX1NJWkUgPT0gdmJfcG9zKSB7CisgICAg ICAgICAgICBlbmQgLT0gQUxGX0dSQURJRU5UX0JPUkRFUiAvIEFMRl9HUkFESUVOVF9TVEVQOwor ICAgICAgICAgICAgYWMgPSAzOworICAgICAgICB9IGVsc2UgaWYgKHkgPT0gdmJfcG9zKSB7Cisg ICAgICAgICAgICBzdGFydCArPSBBTEZfR1JBRElFTlRfQk9SREVSIC8gQUxGX0dSQURJRU5UX1NU RVA7CisgICAgICAgICAgICBhYyA9IDM7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgeCA9 IDA7IHggPCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICAgICAgY29uc3Qg aW50IHhnID0geCAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAgICAgICAgY29uc3QgaW50IHln ID0geSAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAgICAgICAgaW50IHN1bVtBTEZfTlVNX0RJ Ul0gPSB7IDAgfTsKKworICAgICAgICAgICAgZ3JhZCA9IGdyYWRpZW50X3RtcCArICh5ZyArIHN0 YXJ0KSAqIGdzdHJpZGUgKyB4ZyAqIEFMRl9OVU1fRElSOworICAgICAgICAgICAgLy90b2RvOiBv cHRpbWl6ZSB0aGlzIGxvb3AKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVu ZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKysp IHsKKyAgICAgICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfVkVSVF0gICs9IGdyYWRbQUxGX0RJ Ul9WRVJUXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfSE9SWl0gICs9IGdyYWRb QUxGX0RJUl9IT1JaXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfRElHQTBdICs9 IGdyYWRbQUxGX0RJUl9ESUdBMF07CisgICAgICAgICAgICAgICAgICAgIHN1bVtBTEZfRElSX0RJ R0ExXSArPSBncmFkW0FMRl9ESVJfRElHQTFdOworICAgICAgICAgICAgICAgICAgICBncmFkICs9 IEFMRl9OVU1fRElSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBncmFkICs9 IGdzdHJpZGUgLSBzaXplICogQUxGX05VTV9ESVI7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBGVU5DKGFsZl9nZXRfaWR4KShjbGFzc19pZHgsIHRyYW5zcG9zZV9pZHgsIHN1bSwgYWMpOwor CisgICAgICAgICAgICBjbGFzc19pZHgrKzsKKyAgICAgICAgICAgIHRyYW5zcG9zZV9pZHgrKzsK KyAgICAgICAgfQorICAgIH0KKworfQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9yZWNvbl9jb2Vm Zl9hbmRfY2xpcCkoaW50MTZfdCAqY29lZmYsIGludDE2X3QgKmNsaXAsCisgICAgY29uc3QgaW50 ICpjbGFzc19pZHgsIGNvbnN0IGludCAqdHJhbnNwb3NlX2lkeCwgY29uc3QgaW50IHNpemUsCisg ICAgY29uc3QgaW50MTZfdCAqY29lZmZfc2V0LCBjb25zdCB1aW50OF90ICpjbGlwX2lkeF9zZXQs IGNvbnN0IHVpbnQ4X3QgKmNsYXNzX3RvX2ZpbHQpCit7CisgICAgY29uc3Qgc3RhdGljIGludCBp bmRleFtdW0FMRl9OVU1fQ09FRkZfTFVNQV0gPSB7CisgICAgICAgIHsgMCwgMSwgMiwgMywgNCwg NSwgNiwgNywgOCwgOSwgMTAsIDExIH0sCisgICAgICAgIHsgOSwgNCwgMTAsIDgsIDEsIDUsIDEx LCA3LCAzLCAwLCAyLCA2IH0sCisgICAgICAgIHsgMCwgMywgMiwgMSwgOCwgNywgNiwgNSwgNCwg OSwgMTAsIDExIH0sCisgICAgICAgIHsgOSwgOCwgMTAsIDQsIDMsIDcsIDExLCA1LCAxLCAwLCAy LCA2IH0sCisgICAgfTsKKworICAgIGNvbnN0IGludDE2X3QgY2xpcF9zZXRbXSA9IHsKKyAgICAg ICAgMSA8PCBCSVRfREVQVEgsIDEgPDwgKEJJVF9ERVBUSCAtIDMpLCAxIDw8IChCSVRfREVQVEgg LSA1KSwgMSA8PCAoQklUX0RFUFRIIC0gNykKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgY29uc3QgaW50MTZfdCAgKnNyY19jb2VmZiA9IGNv ZWZmX3NldCArIGNsYXNzX3RvX2ZpbHRbY2xhc3NfaWR4W2ldXSAqIEFMRl9OVU1fQ09FRkZfTFVN QTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqY2xpcF9pZHggID0gY2xpcF9pZHhfc2V0ICsgY2xh c3NfaWR4W2ldICogQUxGX05VTV9DT0VGRl9MVU1BOworCisgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgQUxGX05VTV9DT0VGRl9MVU1BOyBqKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBp ZHggPSBpbmRleFt0cmFuc3Bvc2VfaWR4W2ldXVtqXTsKKyAgICAgICAgICAgICpjb2VmZisrID0g c3JjX2NvZWZmW2lkeF07CisgICAgICAgICAgICAqY2xpcCsrICA9IGNsaXBfc2V0W2NsaXBfaWR4 W2lkeF1dOworICAgICAgICB9CisgICAgfQorfQorCisjdW5kZWYgQUxGX0RJUl9IT1JaCisjdW5k ZWYgQUxGX0RJUl9WRVJUCisjdW5kZWYgQUxGX0RJUl9ESUdBMAorI3VuZGVmIEFMRl9ESVJfRElH QTEKKworLy8gbGluZSB6ZXJvCisjZGVmaW5lIFA3IHBpeFstOCAqIHhzdHJpZGVdCisjZGVmaW5l IFA2IHBpeFstNyAqIHhzdHJpZGVdCisjZGVmaW5lIFA1IHBpeFstNiAqIHhzdHJpZGVdCisjZGVm aW5lIFA0IHBpeFstNSAqIHhzdHJpZGVdCisjZGVmaW5lIFAzIHBpeFstNCAqIHhzdHJpZGVdCisj ZGVmaW5lIFAyIHBpeFstMyAqIHhzdHJpZGVdCisjZGVmaW5lIFAxIHBpeFstMiAqIHhzdHJpZGVd CisjZGVmaW5lIFAwIHBpeFstMSAqIHhzdHJpZGVdCisjZGVmaW5lIFEwIHBpeFswICogeHN0cmlk ZV0KKyNkZWZpbmUgUTEgcGl4WzEgKiB4c3RyaWRlXQorI2RlZmluZSBRMiBwaXhbMiAqIHhzdHJp ZGVdCisjZGVmaW5lIFEzIHBpeFszICogeHN0cmlkZV0KKyNkZWZpbmUgUTQgcGl4WzQgKiB4c3Ry aWRlXQorI2RlZmluZSBRNSBwaXhbNSAqIHhzdHJpZGVdCisjZGVmaW5lIFE2IHBpeFs2ICogeHN0 cmlkZV0KKyNkZWZpbmUgUTcgcGl4WzcgKiB4c3RyaWRlXQorI2RlZmluZSBQKHgpIHBpeFsoLSh4 KS0xKSAqIHhzdHJpZGVdCisjZGVmaW5lIFEoeCkgcGl4Wyh4KSAgICAgICogeHN0cmlkZV0KKwor Ly8gbGluZSB0aHJlZS4gdXNlZCBvbmx5IGZvciBkZWJsb2NraW5nIGRlY2lzaW9uCisjZGVmaW5l IFRQNyBwaXhbLTggKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQNiBwaXhbLTcg KiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQNSBwaXhbLTYgKiB4c3RyaWRlICsg MyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQNCBwaXhbLTUgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVd CisjZGVmaW5lIFRQMyBwaXhbLTQgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQ MiBwaXhbLTMgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMSBwaXhbLTIgKiB4 c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMCBwaXhbLTEgKiB4c3RyaWRlICsgMyAq IHlzdHJpZGVdCisjZGVmaW5lIFRRMCBwaXhbMCAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisj ZGVmaW5lIFRRMSBwaXhbMSAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRMiBw aXhbMiAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRMyBwaXhbMyAgKiB4c3Ry aWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNCBwaXhbNCAgKiB4c3RyaWRlICsgMyAqIHlz dHJpZGVdCisjZGVmaW5lIFRRNSBwaXhbNSAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVm aW5lIFRRNiBwaXhbNiAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNyBwaXhb NyAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQKHgpIHBpeFsoLSh4KS0xKSAq IHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFEoeCkgcGl4Wyh4KSAgICAgICogeHN0 cmlkZSArIDMgKiB5c3RyaWRlXQorCisjZGVmaW5lIEZQMyBwaXhbLTQgKiB4c3RyaWRlICsgMSAq IHlzdHJpZGVdCisjZGVmaW5lIEZQMiBwaXhbLTMgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisj ZGVmaW5lIEZQMSBwaXhbLTIgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZQMCBw aXhbLTEgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMCBwaXhbMCAgKiB4c3Ry aWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMSBwaXhbMSAgKiB4c3RyaWRlICsgMSAqIHlz dHJpZGVdCisjZGVmaW5lIEZRMiBwaXhbMiAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVm aW5lIEZRMyBwaXhbMyAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisKK3N0YXRpYyB2b2lkIEZV TkMobG9vcF9maWx0ZXJfbHVtYV9sYXJnZSkocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90IHhz dHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLCBjb25zdCBpbnQzMl90IHRjLAorICAgIGNv bnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xLCBjb25zdCB1aW50OF90IG1heF9s ZW5fcCwgY29uc3QgdWludDhfdCBtYXhfbGVuX3EpCit7CisgICAgZm9yIChpbnQgZCA9IDA7IGQg PCA0OyBkKyspIHsKKyAgICAgICAgY29uc3QgaW50IHA2ID0gUDY7CisgICAgICAgIGNvbnN0IGlu dCBwNSA9IFA1OworICAgICAgICBjb25zdCBpbnQgcDQgPSBQNDsKKyAgICAgICAgY29uc3QgaW50 IHAzID0gUDM7CisgICAgICAgIGNvbnN0IGludCBwMiA9IFAyOworICAgICAgICBjb25zdCBpbnQg cDEgPSBQMTsKKyAgICAgICAgY29uc3QgaW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBx MCA9IFEwOworICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAgICAgICAgY29uc3QgaW50IHEy ID0gUTI7CisgICAgICAgIGNvbnN0IGludCBxMyA9IFEzOworICAgICAgICBjb25zdCBpbnQgcTQg PSBRNDsKKyAgICAgICAgY29uc3QgaW50IHE1ID0gUTU7CisgICAgICAgIGNvbnN0IGludCBxNiA9 IFE2OworICAgICAgICBpbnQgbTsKKyAgICAgICAgaWYgKG1heF9sZW5fcCA9PSA1ICYmIG1heF9s ZW5fcSA9PSA1KQorICAgICAgICAgICAgbSA9IChwNCArIHAzICsgMiAqIChwMiArIHAxICsgcDAg KyBxMCArIHExICsgcTIpICsgcTMgKyBxNCArIDgpID4+IDQ7CisgICAgICAgIGVsc2UgaWYgKG1h eF9sZW5fcCA9PSBtYXhfbGVuX3EpCisgICAgICAgICAgICBtID0gKHA2ICsgcDUgKyBwNCArIHAz ICsgcDIgKyBwMSArIDIgKiAocDAgKyBxMCkgKyBxMSArIHEyICsgcTMgKyBxNCArIHE1ICsgcTYg KyA4KSA+PiA0OworICAgICAgICBlbHNlIGlmIChtYXhfbGVuX3AgKyBtYXhfbGVuX3EgPT0gMTIp CisgICAgICAgICAgICBtID0gKHA1ICsgcDQgKyBwMyArIHAyICsgMiAqIChwMSArIHAwICsgcTAg KyBxMSkgKyBxMiArIHEzICsgcTQgKyBxNSArIDgpID4+IDQ7CisgICAgICAgIGVsc2UgaWYgKG1h eF9sZW5fcCArIG1heF9sZW5fcSA9PSA4KQorICAgICAgICAgICAgbSA9IChwMyArIHAyICsgcDEg KyBwMCArIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4gMzsKKyAgICAgICAgZWxzZSBpZiAobWF4 X2xlbl9xID09IDcpCisgICAgICAgICAgICBtID0gKDIgKiAocDIgKyBwMSArIHAwICsgcTApICsg cDAgKyBwMSArIHExICsgcTIgKyBxMyArIHE0ICsgcTUgKyBxNiArIDgpID4+IDQ7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgIG0gPSAocDYgKyBwNSArIHA0ICsgcDMgKyBwMiArIHAxICsgMiAq IChxMiArIHExICsgcTAgKyBwMCkgKyBxMCArIHExICsgOCkgPj4gNDsKKyAgICAgICAgaWYgKCFu b19wKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcmVmcCA9IChQKG1heF9sZW5fcCkgKyBQKG1h eF9sZW5fcCAtIDEpICsgMSkgPj4gMTsKKyAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPT0gMykg eworICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgobSAqIDUzICsgcmVmcCAqIDEx ICsgMzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAg ICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnAgKiAzMiArIDMyKSA+ PiA2KSAtIHAxLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAg ICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogMTEgKyByZWZwICogNTMgKyAzMikgPj4gNikgLSBw MiwgLSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgfSBlbHNlIGlm IChtYXhfbGVuX3AgPT0gNSkgeworICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgo bSAqIDU4ICsgcmVmcCAqICA2ICsgMzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMg KiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiA0NSAr IHJlZnAgKiAxOSArIDMyKSA+PiA2KSAtIHAxLCAtKHRjICogNSA+PiAxKSwgKHRjICogNSA+PiAx KSk7CisgICAgICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogMzIgKyByZWZwICog MzIgKyAzMikgPj4gNikgLSBwMiwgLSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAg ICAgICAgICAgICAgIFAzID0gcDMgKyBhdl9jbGlwKCgobSAqIDE5ICsgcmVmcCAqIDQ1ICsgMzIp ID4+IDYpIC0gcDMsIC0odGMgKiAzID4+IDEpLCAodGMgKiAzID4+IDEpKTsKKyAgICAgICAgICAg ICAgICBQNCA9IHA0ICsgYXZfY2xpcCgoKG0gKiAgNiArIHJlZnAgKiA1OCArIDMyKSA+PiA2KSAt IHA0LCAtKHRjICogMiA+PiAxKSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgobSAqIDU5ICsgcmVmcCAqICA1 ICsgMzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAg ICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiA1MCArIHJlZnAgKiAxNCArIDMyKSA+ PiA2KSAtIHAxLCAtKHRjICogNSA+PiAxKSwgKHRjICogNSA+PiAxKSk7CisgICAgICAgICAgICAg ICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogNDEgKyByZWZwICogMjMgKyAzMikgPj4gNikgLSBw MiwgLSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFAzID0g cDMgKyBhdl9jbGlwKCgobSAqIDMyICsgcmVmcCAqIDMyICsgMzIpID4+IDYpIC0gcDMsIC0odGMg KiAzID4+IDEpLCAodGMgKiAzID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQNCA9IHA0ICsgYXZf Y2xpcCgoKG0gKiAyMyArIHJlZnAgKiA0MSArIDMyKSA+PiA2KSAtIHA0LCAtKHRjICogMiA+PiAx KSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDUgPSBwNSArIGF2X2NsaXAoKCht ICogMTQgKyByZWZwICogNTAgKyAzMikgPj4gNikgLSBwNSwgLSh0YyAqIDEgPj4gMSksICh0YyAq IDEgPj4gMSkpOworICAgICAgICAgICAgICAgIFA2ID0gcDYgKyBhdl9jbGlwKCgobSAqICA1ICsg cmVmcCAqIDU5ICsgMzIpID4+IDYpIC0gcDYsIC0odGMgKiAxID4+IDEpLCAodGMgKiAxID4+IDEp KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW5vX3EpIHsKKyAgICAg ICAgICAgIGNvbnN0IGludCByZWZxID0gKFEobWF4X2xlbl9xKSArIFEobWF4X2xlbl9xIC0gMSkg KyAxKSA+PiAxOworICAgICAgICAgICAgaWYgKG1heF9sZW5fcSA9PSAzKSB7CisgICAgICAgICAg ICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChtICogNTMgKyByZWZxICogMTEgKyAzMikgPj4gNikg LSBxMCwgIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBR MSA9IHExICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAzMiArIDMyKSA+PiA2KSAtIHExLCAg LSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFEyID0gcTIg KyBhdl9jbGlwKCgobSAqIDExICsgcmVmcSAqIDUzICsgMzIpID4+IDYpIC0gcTIsICAtKHRjICog MiA+PiAxKSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1heF9sZW5f cSA9PSA1KSB7CisgICAgICAgICAgICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChtICogNTggKyBy ZWZxICogIDYgKyAzMikgPj4gNikgLSBxMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkp OworICAgICAgICAgICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgobSAqIDQ1ICsgcmVmcSAqIDE5 ICsgMzIpID4+IDYpIC0gcTEsIC0odGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAg ICAgICAgICAgICBRMiA9IHEyICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAzMiArIDMyKSA+ PiA2KSAtIHEyLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAg ICAgUTMgPSBxMyArIGF2X2NsaXAoKChtICogMTkgKyByZWZxICogNDUgKyAzMikgPj4gNikgLSBx MywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgIFE0ID0g cTQgKyBhdl9jbGlwKCgobSAqICA2ICsgcmVmcSAqIDU4ICsgMzIpID4+IDYpIC0gcTQsIC0odGMg KiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChtICogNTkgKyByZWZxICogIDUgKyAzMikgPj4g NikgLSBxMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAg IFExID0gcTEgKyBhdl9jbGlwKCgobSAqIDUwICsgcmVmcSAqIDE0ICsgMzIpID4+IDYpIC0gcTEs IC0odGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMiA9IHEy ICsgYXZfY2xpcCgoKG0gKiA0MSArIHJlZnEgKiAyMyArIDMyKSA+PiA2KSAtIHEyLCAtKHRjICog NCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTMgPSBxMyArIGF2X2Ns aXAoKChtICogMzIgKyByZWZxICogMzIgKyAzMikgPj4gNikgLSBxMywgLSh0YyAqIDMgPj4gMSks ICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgIFE0ID0gcTQgKyBhdl9jbGlwKCgobSAq IDIzICsgcmVmcSAqIDQxICsgMzIpID4+IDYpIC0gcTQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAy ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRNSA9IHE1ICsgYXZfY2xpcCgoKG0gKiAxNCArIHJl ZnEgKiA1MCArIDMyKSA+PiA2KSAtIHE1LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7 CisgICAgICAgICAgICAgICAgUTYgPSBxNiArIGF2X2NsaXAoKChtICogIDUgKyByZWZxICogNTkg KyAzMikgPj4gNikgLSBxNiwgLSh0YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAgICAg ICAgICAgfQorCisgICAgICAgIH0KKyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBGVU5DKGxvb3BfZmlsdGVyX2x1bWFfc3Ryb25nKShwaXhlbCAqcGl4LCBj b25zdCBwdHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUsIGNvbnN0IGlu dDMyX3QgdGMsCisgICAgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7 CisgICAgY29uc3QgaW50IHRjMiA9IHRjIDw8IDE7CisgICAgY29uc3QgaW50IHRjMyA9IHRjICog MzsKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICBjb25zdCBpbnQg cDMgPSBQMzsKKyAgICAgICAgY29uc3QgaW50IHAyID0gUDI7CisgICAgICAgIGNvbnN0IGludCBw MSA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IHEw ID0gUTA7CisgICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQgcTIg PSBRMjsKKyAgICAgICAgY29uc3QgaW50IHEzID0gUTM7CisgICAgICAgIGlmICghbm9fcCkgewor ICAgICAgICAgICAgUDAgPSBwMCArIGF2X2NsaXAoKChwMiArIDIgKiBwMSArIDIgKiBwMCArIDIg KiBxMCArIHExICsgNCkgPj4gMykgLSBwMCwgLXRjMywgdGMzKTsKKyAgICAgICAgICAgIFAxID0g cDEgKyBhdl9jbGlwKCgocDIgKyBwMSArIHAwICsgcTAgKyAyKSA+PiAyKSAtIHAxLCAtdGMyLCB0 YzIpOworICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAoKCgyICogcDMgKyAzICogcDIgKyBw MSArIHAwICsgcTAgKyA0KSA+PiAzKSAtIHAyLCAtdGMsIHRjKTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoIW5vX3EpIHsKKyAgICAgICAgICAgIFEwID0gcTAgKyBhdl9jbGlwKCgocDEgKyAyICog cDAgKyAyICogcTAgKyAyICogcTEgKyBxMiArIDQpID4+IDMpIC0gcTAsIC10YzMsIHRjMyk7Cisg ICAgICAgICAgICBRMSA9IHExICsgYXZfY2xpcCgoKHAwICsgcTAgKyBxMSArIHEyICsgMikgPj4g MikgLSBxMSwgLXRjMiwgdGMyKTsKKyAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgoMiAq IHEzICsgMyAqIHEyICsgcTEgKyBxMCArIHAwICsgNCkgPj4gMykgLSBxMiwgLXRjLCB0Yyk7Cisg ICAgICAgIH0KKyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBGVU5DKGxvb3BfZmlsdGVyX2x1bWFfd2VhaykocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90 IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgdGMs IGNvbnN0IGludDMyX3QgYmV0YSwgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5v X3EsIGNvbnN0IGludCBuZF9wLCBjb25zdCBpbnQgbmRfcSkKK3sKKyAgICBjb25zdCBpbnQgdGNf MiA9IHRjID4+IDE7CisgICAgZm9yIChpbnQgZCA9IDA7IGQgPCA0OyBkKyspIHsKKyAgICAgICAg Y29uc3QgaW50IHAyID0gUDI7CisgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBj b25zdCBpbnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNv bnN0IGludCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgaW50 IGRlbHRhMCA9ICg5ICogKHEwIC0gcDApIC0gMyAqIChxMSAtIHAxKSArIDgpID4+IDQ7CisgICAg ICAgIGlmIChhYnMoZGVsdGEwKSA8IDEwICogdGMpIHsKKyAgICAgICAgICAgIGRlbHRhMCA9IGF2 X2NsaXAoZGVsdGEwLCAtdGMsIHRjKTsKKyAgICAgICAgICAgIGlmICghbm9fcCkKKyAgICAgICAg ICAgICAgICBQMCA9IGF2X2NsaXBfcGl4ZWwocDAgKyBkZWx0YTApOworICAgICAgICAgICAgaWYg KCFub19xKQorICAgICAgICAgICAgICAgIFEwID0gYXZfY2xpcF9waXhlbChxMCAtIGRlbHRhMCk7 CisgICAgICAgICAgICBpZiAoIW5vX3AgJiYgbmRfcCA+IDEpIHsKKyAgICAgICAgICAgICAgICBj b25zdCBpbnQgZGVsdGFwMSA9IGF2X2NsaXAoKCgocDIgKyBwMCArIDEpID4+IDEpIC0gcDEgKyBk ZWx0YTApID4+IDEsIC10Y18yLCB0Y18yKTsKKyAgICAgICAgICAgICAgICBQMSA9IGF2X2NsaXBf cGl4ZWwocDEgKyBkZWx0YXAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbm9f cSAmJiBuZF9xID4gMSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBkZWx0YXExID0gYXZf Y2xpcCgoKChxMiArIHEwICsgMSkgPj4gMSkgLSBxMSAtIGRlbHRhMCkgPj4gMSwgLXRjXzIsIHRj XzIpOworICAgICAgICAgICAgICAgIFExID0gYXZfY2xpcF9waXhlbChxMSArIGRlbHRhcTEpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgIH0K KworfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9sdW1hKSh1aW50OF90KiBf cGl4LCBwdHJkaWZmX3QgX3hzdHJpZGUsIHB0cmRpZmZfdCBfeXN0cmlkZSwKKyAgICBjb25zdCBp bnQzMl90ICpfYmV0YSwgY29uc3QgaW50MzJfdCAqX3RjLCBjb25zdCB1aW50OF90ICpfbm9fcCwg Y29uc3QgdWludDhfdCAqX25vX3EsCisgICAgY29uc3QgdWludDhfdCAqX21heF9sZW5fcCwgY29u c3QgdWludDhfdCAqX21heF9sZW5fcSwgaW50IGhvcl9jdHVfZWRnZSkKK3sKKyAgICBjb25zdCBw dHJkaWZmX3QgeHN0cmlkZSA9IF94c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBjb25zdCBw dHJkaWZmX3QgeXN0cmlkZSA9IF95c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIHBpeGVsKiBwaXggICAgICA9IChwaXhl bCopX3BpeCArIGkgKiA0ICogeXN0cmlkZTsKKyAgICAgICAgY29uc3QgaW50IGRwMCAgID0gYWJz KFAyIC0gMiAqIFAxICsgUDApOworICAgICAgICBjb25zdCBpbnQgZHEwICAgPSBhYnMoUTIgLSAy ICogUTEgKyBRMCk7CisgICAgICAgIGNvbnN0IGludCBkcDMgICA9IGFicyhUUDIgLSAyICogVFAx ICsgVFAwKTsKKyAgICAgICAgY29uc3QgaW50IGRxMyAgID0gYWJzKFRRMiAtIDIgKiBUUTEgKyBU UTApOworICAgICAgICBjb25zdCBpbnQgZDAgICAgPSBkcDAgKyBkcTA7CisgICAgICAgIGNvbnN0 IGludCBkMyAgICA9IGRwMyArIGRxMzsKKyNpZiBCSVRfREVQVEggPCAxMAorICAgICAgICBjb25z dCBpbnQgdGMgICAgPSAoX3RjW2ldICsgKDEgPDwgKDkgLSBCSVRfREVQVEgpKSkgPj4gKDEwIC0g QklUX0RFUFRIKTsKKyNlbHNlCisgICAgICAgIGNvbnN0IGludCB0YyAgICA9IF90Y1tpXSA8PCAo QklUX0RFUFRIIC0gMTApOworI2VuZGlmCisgICAgICAgIGNvbnN0IGludCB0YzI1ICA9ICgodGMg KiA1ICsgMSkgPj4gMSk7CisKKyAgICAgICAgY29uc3QgaW50IG5vX3AgID0gX25vX3BbaV07Cisg ICAgICAgIGNvbnN0IGludCBub19xICA9IF9ub19xW2ldOworCisgICAgICAgIGludCBtYXhfbGVu X3AgICA9IF9tYXhfbGVuX3BbaV07CisgICAgICAgIGludCBtYXhfbGVuX3EgICA9IF9tYXhfbGVu X3FbaV07CisKKyAgICAgICAgY29uc3QgaW50IGxhcmdlX3AgPSAobWF4X2xlbl9wID4gMyAmJiAh aG9yX2N0dV9lZGdlKTsKKyAgICAgICAgY29uc3QgaW50IGxhcmdlX3EgPSBtYXhfbGVuX3EgPiAz OworICAgICAgICBjb25zdCBpbnQgYmV0YSA9IF9iZXRhW2ldIDw8IEJJVF9ERVBUSCAtIDg7CisK KyAgICAgICAgY29uc3QgaW50IGJldGFfMyA9IGJldGEgPj4gMzsKKyAgICAgICAgY29uc3QgaW50 IGJldGFfMiA9IGJldGEgPj4gMjsKKworICAgICAgICBpZiAoIXRjKQorICAgICAgICAgICAgY29u dGludWU7CisKKyAgICAgICAgaWYgKGxhcmdlX3AgfHwgbGFyZ2VfcSkgeworICAgICAgICAgICAg Y29uc3QgaW50IGRwMGwgPSBsYXJnZV9wID8gKChkcDAgKyBhYnMoUDUgLSAyICogUDQgKyBQMykg KyAxKSA+PiAxKSA6IGRwMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcTBsID0gbGFyZ2VfcSA/ ICgoZHEwICsgYWJzKFE1IC0gMiAqIFE0ICsgUTMpICsgMSkgPj4gMSkgOiBkcTA7CisgICAgICAg ICAgICBjb25zdCBpbnQgZHAzbCA9IGxhcmdlX3AgPyAoKGRwMyArIGFicyhUUDUgLSAyICogVFA0 ICsgVFAzKSArIDEpID4+IDEpIDogZHAzOworICAgICAgICAgICAgY29uc3QgaW50IGRxM2wgPSBs YXJnZV9xID8gKChkcTMgKyBhYnMoVFE1IC0gMiAqIFRRNCArIFRRMykgKyAxKSA+PiAxKSA6IGRx MzsKKyAgICAgICAgICAgIGNvbnN0IGludCBkMGwgPSBkcDBsICsgZHEwbDsKKyAgICAgICAgICAg IGNvbnN0IGludCBkM2wgPSBkcDNsICsgZHEzbDsKKyAgICAgICAgICAgIGNvbnN0IGludCBiZXRh NTMgPSBiZXRhICogMyA+PiA1OworICAgICAgICAgICAgY29uc3QgaW50IGJldGFfNCA9IGJldGEg Pj4gNDsKKyAgICAgICAgICAgIG1heF9sZW5fcCA9IGxhcmdlX3AgPyBtYXhfbGVuX3AgOiAzOwor ICAgICAgICAgICAgbWF4X2xlbl9xID0gbGFyZ2VfcSA/IG1heF9sZW5fcSA6IDM7CisKKyAgICAg ICAgICAgIGlmIChkMGwgKyBkM2wgPCBiZXRhKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50 IHNwMGwgPSBhYnMoUDMgLSBQMCkgKyAobWF4X2xlbl9wID09IDcgPyBhYnMoUDcgLSBQNiAtIFA1 ICsgUDQpIDogMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNxMGwgPSBhYnMoUTAgLSBR MykgKyAobWF4X2xlbl9xID09IDcgPyBhYnMoUTQgLSBRNSAtIFE2ICsgUTcpIDogMCk7CisgICAg ICAgICAgICAgICAgY29uc3QgaW50IHNwM2wgPSBhYnMoVFAzIC0gVFAwKSArIChtYXhfbGVuX3Ag PT0gNyA/IGFicyhUUDcgLSBUUDYgLSBUUDUgKyBUUDQpIDogMCk7CisgICAgICAgICAgICAgICAg Y29uc3QgaW50IHNxM2wgPSBhYnMoVFEwIC0gVFEzKSArIChtYXhfbGVuX3EgPT0gNyA/IGFicyhU UTQgLSBUUTUgLSBUUTYgKyBUUTcpIDogMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNw MCA9IGxhcmdlX3AgPyAoKHNwMGwgKyBhYnMoUDMgLSAgIFAobWF4X2xlbl9wKSkgKyAxKSA+PiAx KSA6IHNwMGw7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNwMyA9IGxhcmdlX3AgPyAoKHNw M2wgKyBhYnMoVFAzIC0gVFAobWF4X2xlbl9wKSkgKyAxKSA+PiAxKSA6IHNwM2w7CisgICAgICAg ICAgICAgICAgY29uc3QgaW50IHNxMCA9IGxhcmdlX3EgPyAoKHNxMGwgKyBhYnMoUTMgLSAgIFEo bWF4X2xlbl9xKSkgKyAxKSA+PiAxKSA6IHNxMGw7CisgICAgICAgICAgICAgICAgY29uc3QgaW50 IHNxMyA9IGxhcmdlX3EgPyAoKHNxM2wgKyBhYnMoVFEzIC0gVFEobWF4X2xlbl9xKSkgKyAxKSA+ PiAxKSA6IHNxM2w7CisgICAgICAgICAgICAgICAgaWYgKHNwMCArIHNxMCA8IGJldGE1MyAmJiBh YnMoUDAgLSBRMCkgPCB0YzI1ICYmCisgICAgICAgICAgICAgICAgICAgIHNwMyArIHNxMyA8IGJl dGE1MyAmJiBhYnMoVFAwIC0gVFEwKSA8IHRjMjUgJiYKKyAgICAgICAgICAgICAgICAgICAgKGQw bCA8PCAxKSA8IGJldGFfNCAmJiAoZDNsIDw8IDEpIDwgYmV0YV80KSB7CisgICAgICAgICAgICAg ICAgICAgIEZVTkMobG9vcF9maWx0ZXJfbHVtYV9sYXJnZSkocGl4LCB4c3RyaWRlLCB5c3RyaWRl LCB0Yywgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EpOworICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgaWYgKGQwICsgZDMgPCBiZXRhKSB7CisgICAgICAgICAgICBpZiAobWF4X2xl bl9wID4gMiAmJiBtYXhfbGVuX3EgPiAyICYmCisgICAgICAgICAgICAgICAgYWJzKFAzIC0gUDAp ICsgYWJzKFEzIC0gUTApIDwgYmV0YV8zICYmIGFicyhQMCAtIFEwKSA8IHRjMjUgJiYKKyAgICAg ICAgICAgICAgICBhYnMoVFAzIC0gVFAwKSArIGFicyhUUTMgLSBUUTApIDwgYmV0YV8zICYmIGFi cyhUUDAgLSBUUTApIDwgdGMyNSAmJgorICAgICAgICAgICAgICAgIChkMCA8PCAxKSA8IGJldGFf MiAmJiAoZDMgPDwgMSkgPCBiZXRhXzIpIHsKKyAgICAgICAgICAgICAgICBGVU5DKGxvb3BfZmls dGVyX2x1bWFfc3Ryb25nKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHRjLCBub19wLCBub19xKTsK KyAgICAgICAgICAgIH0gZWxzZSB7IC8vIHdlYWsgZmlsdGVyaW5nCisgICAgICAgICAgICAgICAg aW50IG5kX3AgPSAxOworICAgICAgICAgICAgICAgIGludCBuZF9xID0gMTsKKyAgICAgICAgICAg ICAgICBpZiAobWF4X2xlbl9wID4gMSAmJiBtYXhfbGVuX3EgPiAxKSB7CisgICAgICAgICAgICAg ICAgICAgIGlmIChkcDAgKyBkcDMgPCAoKGJldGEgKyAoYmV0YSA+PiAxKSkgPj4gMykpCisgICAg ICAgICAgICAgICAgICAgICAgICBuZF9wID0gMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRx MCArIGRxMyA8ICgoYmV0YSArIChiZXRhID4+IDEpKSA+PiAzKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgIG5kX3EgPSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGVU5D KGxvb3BfZmlsdGVyX2x1bWFfd2VhaykocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCB0YywgYmV0YSwg bm9fcCwgbm9fcSwgbmRfcCwgbmRfcSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZykocGl4ZWwg KnBpeCwgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLAor ICAgIGNvbnN0IGludCBzaXplLCBjb25zdCBpbnQzMl90IHRjLCBjb25zdCB1aW50OF90IG5vX3As IGNvbnN0IHVpbnQ4X3Qgbm9fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IHNpemU7IGQr KykgeworICAgICAgICBjb25zdCBpbnQgcDMgPSBQMzsKKyAgICAgICAgY29uc3QgaW50IHAyID0g UDI7CisgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgPSBQ MDsKKyAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNvbnN0IGludCBxMSA9IFEx OworICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgY29uc3QgaW50IHEzID0gUTM7 CisgICAgICAgIGlmICghbm9fcCkgeworICAgICAgICAgICAgUDAgPSBhdl9jbGlwKChwMyArIHAy ICsgcDEgKyAyICogcDAgKyBxMCArIHExICsgcTIgKyA0KSA+PiAzLCBwMCAtIHRjLCBwMCArIHRj KTsKKyAgICAgICAgICAgIFAxID0gYXZfY2xpcCgoMiAqIHAzICsgcDIgKyAyICogcDEgKyBwMCAr IHEwICsgcTEgKyA0KSA+PiAzLCBwMSAtIHRjLCBwMSArIHRjKTsKKyAgICAgICAgICAgIFAyID0g YXZfY2xpcCgoMyAqIHAzICsgMiAqIHAyICsgcDEgKyBwMCArIHEwICsgNCkgPj4gMywgcDIgLSB0 YywgcDIgKyB0YyApOworICAgICAgICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAg ICAgUTAgPSBhdl9jbGlwKChwMiArIHAxICsgcDAgKyAyICogcTAgKyBxMSArIHEyICsgcTMgKyA0 KSA+PiAzLCBxMCAtIHRjLCBxMCArIHRjKTsKKyAgICAgICAgICAgIFExID0gYXZfY2xpcCgocDEg KyBwMCArIHEwICsgMiAqIHExICsgcTIgKyAyICogcTMgKyA0KSA+PiAzLCBxMSAtIHRjLCBxMSAr IHRjKTsKKyAgICAgICAgICAgIFEyID0gYXZfY2xpcCgocDAgKyBxMCArIHExICsgMiAqIHEyICsg MyAqIHEzICsgNCkgPj4gMywgcTIgLSB0YywgcTIgKyB0Yyk7CisgICAgICAgIH0KKyAgICAgICAg cGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGxvb3BfZmlsdGVy X2Nocm9tYV9zdHJvbmdfb25lX3NpZGUpKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3Ry aWRlLCBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSwKKyAgICBjb25zdCBpbnQgc2l6ZSwgY29uc3Qg aW50MzJfdCB0YywgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7Cisg ICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzaXplOyBkKyspIHsKKyAgICAgICAgY29uc3QgaW50IHAx ID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAg PSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9 IFEyOworICAgICAgICBjb25zdCBpbnQgcTMgPSBRMzsKKyAgICAgICAgaWYgKCFub19wKSB7Cisg ICAgICAgICAgICBQMCA9IGF2X2NsaXAoKDMgKiBwMSArIDIgKiBwMCArIHEwICsgcTEgKyBxMiAr IDQpID4+IDMsIHAwIC0gdGMsIHAwICsgdGMpOworICAgICAgICB9CisgICAgICAgIGlmICghbm9f cSkgeworICAgICAgICAgICAgUTAgPSBhdl9jbGlwKCgyICogcDEgKyBwMCArIDIgKiBxMCArIHEx ICsgcTIgKyBxMyArIDQpID4+IDMsIHEwIC0gdGMsIHEwICsgdGMpOworICAgICAgICAgICAgUTEg PSBhdl9jbGlwKChwMSArIHAwICsgcTAgKyAyICogcTEgKyBxMiArIDIgKiBxMyArIDQpID4+IDMs IHExIC0gdGMsIHExICsgdGMpOworICAgICAgICAgICAgUTIgPSBhdl9jbGlwKChwMCArIHEwICsg cTEgKyAyICogcTIgKyAzICogcTMgKyA0KSA+PiAzLCBxMiAtIHRjLCBxMiArIHRjKTsKKyAgICAg ICAgfQorICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZV TkMobG9vcF9maWx0ZXJfY2hyb21hX3dlYWspKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4 c3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSwKKyAgICBjb25zdCBpbnQgc2l6ZSwgY29u c3QgaW50MzJfdCB0YywgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7 CisgICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzaXplOyBkKyspIHsKKyAgICAgICAgaW50IGRlbHRh MDsKKyAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAw OworICAgICAgICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7 CisgICAgICAgIGRlbHRhMCA9IGF2X2NsaXAoKCgocTAgLSBwMCkgKiA0KSArIHAxIC0gcTEgKyA0 KSA+PiAzLCAtdGMsIHRjKTsKKyAgICAgICAgaWYgKCFub19wKQorICAgICAgICAgICAgUDAgPSBh dl9jbGlwX3BpeGVsKHAwICsgZGVsdGEwKTsKKyAgICAgICAgaWYgKCFub19xKQorICAgICAgICAg ICAgUTAgPSBhdl9jbGlwX3BpeGVsKHEwIC0gZGVsdGEwKTsKKyAgICAgICAgcGl4ICs9IHlzdHJp ZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9jaHJvbWEp KHVpbnQ4X3QgKl9waXgsIGNvbnN0IHB0cmRpZmZfdCAgX3hzdHJpZGUsIGNvbnN0IHB0cmRpZmZf dCBfeXN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90ICpfYmV0YSwgY29uc3QgaW50MzJfdCAqX3Rj LCBjb25zdCB1aW50OF90ICpfbm9fcCwgY29uc3QgdWludDhfdCAqX25vX3EsCisgICAgY29uc3Qg dWludDhfdCAqX21heF9sZW5fcCwgY29uc3QgdWludDhfdCAqX21heF9sZW5fcSwgY29uc3QgaW50 IHNoaWZ0KQoreworICAgIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlID0gX3hzdHJpZGUgLyBzaXpl b2YocGl4ZWwpOworICAgIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlID0gX3lzdHJpZGUgLyBzaXpl b2YocGl4ZWwpOworICAgIGNvbnN0IGludCBzaXplICAgICAgICAgID0gc2hpZnQgPyAyIDogNDsK KyAgICBjb25zdCBpbnQgZW5kICAgICAgICAgICA9IDggLyBzaXplOyAgICAgICAgIC8vIDggc2Ft cGxlcyBhIGxvb3AKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW5kOyBpKyspIHsKKyAgICAg ICAgcGl4ZWwgKnBpeCAgICAgICAgICA9IChwaXhlbCAqKV9waXggKyBpICogc2l6ZSAqIHlzdHJp ZGU7CisgICAgICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcCAgPSBfbm9fcFtpXTsKKyAgICAgICAgY29u c3QgdWludDhfdCBub19xICA9IF9ub19xW2ldOworICAgICAgICBjb25zdCBpbnQgYmV0YSAgICAg ID0gX2JldGFbaV0gPDwgKEJJVF9ERVBUSCAtIDgpOworICAgICAgICBjb25zdCBpbnQgYmV0YV8z ICAgID0gYmV0YSA+PiAzOworICAgICAgICBjb25zdCBpbnQgYmV0YV8yICAgID0gYmV0YSA+PiAy OworCisjaWYgQklUX0RFUFRIIDwgMTAKKyAgICAgICAgY29uc3QgaW50IHRjID0gKF90Y1tpXSAr ICgxIDw8ICg5IC0gQklUX0RFUFRIKSkpID4+ICgxMCAtIEJJVF9ERVBUSCk7CisjZWxzZQorICAg ICAgICBjb25zdCBpbnQgdGMgPSBfdGNbaV0gPDwgKEJJVF9ERVBUSCAtIDEwKTsKKyNlbmRpZgor ICAgICAgICBjb25zdCBpbnQgdGMyNSAgICAgID0gKCh0YyAqIDUgKyAxKSA+PiAxKTsKKworICAg ICAgICB1aW50OF90IG1heF9sZW5fcCAgID0gX21heF9sZW5fcFtpXTsKKyAgICAgICAgdWludDhf dCBtYXhfbGVuX3EgICA9IF9tYXhfbGVuX3FbaV07CisKKyAgICAgICAgaWYgKCFtYXhfbGVuX3Ag fHwgIW1heF9sZW5fcSB8fCAhdGMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp ZiAobWF4X2xlbl9xID09IDMpeworICAgICAgICAgICAgY29uc3QgaW50IHAxbiAgPSBzaGlmdCA/ IEZQMSA6IFRQMTsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMm4gPSBtYXhfbGVuX3AgPT0gMSA/ IHAxbiA6IChzaGlmdCA/IEZQMiA6IFRQMik7CisgICAgICAgICAgICBjb25zdCBpbnQgcDBuICA9 IHNoaWZ0ID8gRlAwIDogVFAwOworICAgICAgICAgICAgY29uc3QgaW50IHEwbiAgPSBzaGlmdCA/ IEZRMCA6IFRRMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBxMW4gID0gc2hpZnQgPyBGUTEgOiBU UTE7CisgICAgICAgICAgICBjb25zdCBpbnQgcTJuICA9IHNoaWZ0ID8gRlEyIDogVFEyOworICAg ICAgICAgICAgY29uc3QgaW50IHAzICAgPSBtYXhfbGVuX3AgPT0gMSA/IFAxIDogUDM7CisgICAg ICAgICAgICBjb25zdCBpbnQgcDIgICA9IG1heF9sZW5fcCA9PSAxID8gUDEgOiBQMjsKKyAgICAg ICAgICAgIGNvbnN0IGludCBwMSAgID0gUDE7CisgICAgICAgICAgICBjb25zdCBpbnQgcDAgICA9 IFAwOworICAgICAgICAgICAgY29uc3QgaW50IGRwMCAgPSBhYnMocDIgLSAyICogcDEgKyBwMCk7 CisgICAgICAgICAgICBjb25zdCBpbnQgZHEwICA9IGFicyhRMiAtIDIgKiBRMSArIFEwKTsKKwor ICAgICAgICAgICAgY29uc3QgaW50IGRwMSA9IGFicyhwMm4gLSAyICogcDFuICsgcDBuKTsKKyAg ICAgICAgICAgIGNvbnN0IGludCBkcTEgPSBhYnMocTJuIC0gMiAqIHExbiArIHEwbik7CisgICAg ICAgICAgICBjb25zdCBpbnQgZDAgID0gZHAwICsgZHEwOworICAgICAgICAgICAgY29uc3QgaW50 IGQxICA9IGRwMSArIGRxMTsKKworICAgICAgICAgICAgaWYgKGQwICsgZDEgPCBiZXRhKSB7Cisg ICAgICAgICAgICAgICAgY29uc3QgaW50IHAzbiA9IG1heF9sZW5fcCA9PSAxID8gcDFuIDogKHNo aWZ0ID8gRlAzIDogVFAzKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcTNuID0gc2hpZnQg PyBGUTMgOiBUUTM7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGRzYW0wID0gKGQwIDw8IDEp IDwgYmV0YV8yICYmIChhYnMocDMgLSBwMCkgKyBhYnMoUTAgLSBRMykgICAgIDwgYmV0YV8zKSAm JgorICAgICAgICAgICAgICAgICAgICBhYnMocDAgLSBRMCkgICA8IHRjMjU7CisgICAgICAgICAg ICAgICAgY29uc3QgaW50IGRzYW0xID0gKGQxIDw8IDEpIDwgYmV0YV8yICYmIChhYnMocDNuIC0g cDBuKSArIGFicyhxMG4gLSBxM24pIDwgYmV0YV8zKSAmJgorICAgICAgICAgICAgICAgICAgICBh YnMocDBuIC0gcTBuKSA8IHRjMjU7CisgICAgICAgICAgICAgICAgaWYgKCFkc2FtMCB8fCAhZHNh bTEpCisgICAgICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9 IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF4X2xlbl9wID09 IDMgJiYgbWF4X2xlbl9xID09IDMpCisgICAgICAgICAgICBGVU5DKGxvb3BfZmlsdGVyX2Nocm9t YV9zdHJvbmcpKHBpeCwgeHN0cmlkZSwgeXN0cmlkZSwgc2l6ZSwgdGMsIG5vX3AsIG5vX3EpOwor ICAgICAgICBlbHNlIGlmIChtYXhfbGVuX3EgPT0gMykKKyAgICAgICAgICAgIEZVTkMobG9vcF9m aWx0ZXJfY2hyb21hX3N0cm9uZ19vbmVfc2lkZSkocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCBzaXpl LCB0Yywgbm9fcCwgbm9fcSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEZVTkMobG9vcF9m aWx0ZXJfY2hyb21hX3dlYWspKHBpeCwgeHN0cmlkZSwgeXN0cmlkZSwgc2l6ZSwgdGMsIG5vX3As IG5vX3EpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9j aHJvbWEpKHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90 ICpiZXRhLCBjb25zdCBpbnQzMl90ICp0YywgY29uc3QgdWludDhfdCAqbm9fcCwgY29uc3QgdWlu dDhfdCAqbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICptYXhfbGVuX3AsIGNvbnN0IHVpbnQ4X3Qg Km1heF9sZW5fcSwgaW50IHNoaWZ0KQoreworICAgIEZVTkModnZjX2xvb3BfZmlsdGVyX2Nocm9t YSkocGl4LCBzdHJpZGUsIHNpemVvZihwaXhlbCksIGJldGEsIHRjLAorICAgICAgICBub19wLCBu b19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgc2hpZnQpOworfQorCitzdGF0aWMgdm9pZCBGVU5D KHZ2Y192X2xvb3BfZmlsdGVyX2Nocm9tYSkodWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRl LAorICAgIGNvbnN0IGludDMyX3QgKmJldGEsIGNvbnN0IGludDMyX3QgKnRjLCBjb25zdCB1aW50 OF90ICpub19wLCBjb25zdCB1aW50OF90ICpub19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9s ZW5fcCwgY29uc3QgdWludDhfdCAqbWF4X2xlbl9xLCBpbnQgc2hpZnQpCit7CisgICAgRlVOQyh2 dmNfbG9vcF9maWx0ZXJfY2hyb21hKShwaXgsIHNpemVvZihwaXhlbCksIHN0cmlkZSwgYmV0YSwg dGMsCisgICAgICAgIG5vX3AsIG5vX3EsICBtYXhfbGVuX3AsIG1heF9sZW5fcSwgc2hpZnQpOwor fQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19oX2xvb3BfZmlsdGVyX2x1bWEpKHVpbnQ4X3QgKnBp eCwgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90ICpiZXRhLCBjb25zdCBpbnQz Ml90ICp0YywgY29uc3QgdWludDhfdCAqbm9fcCwgY29uc3QgdWludDhfdCAqbm9fcSwKKyAgICBj b25zdCB1aW50OF90ICptYXhfbGVuX3AsIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcSwgaW50IGhv cl9jdHVfZWRnZSkKK3sKKyAgICBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9sdW1hKShwaXgsIHN0cmlk ZSwgc2l6ZW9mKHBpeGVsKSwgYmV0YSwgdGMsCisgICAgICAgIG5vX3AsIG5vX3EsIG1heF9sZW5f cCwgbWF4X2xlbl9xLCBob3JfY3R1X2VkZ2UpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y192 X2xvb3BfZmlsdGVyX2x1bWEpKHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBj b25zdCBpbnQzMl90ICpiZXRhLCBjb25zdCBpbnQzMl90ICp0YywgY29uc3QgdWludDhfdCAqbm9f cCwgY29uc3QgdWludDhfdCAqbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICptYXhfbGVuX3AsIGNv bnN0IHVpbnQ4X3QgKm1heF9sZW5fcSwgaW50IGhvcl9jdHVfZWRnZSkKK3sKKyAgICBGVU5DKHZ2 Y19sb29wX2ZpbHRlcl9sdW1hKShwaXgsIHNpemVvZihwaXhlbCksIHN0cmlkZSwgYmV0YSwgdGMs CisgICAgICAgIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBob3JfY3R1X2VkZ2Up OworfQorCitzdGF0aWMgaW50IEZVTkModnZjX2xvb3BfbGFkZl9sZXZlbCkoY29uc3QgdWludDhf dCAqX3BpeCwgY29uc3QgcHRyZGlmZl90IF94c3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgX3lzdHJp ZGUpCit7CisgICAgY29uc3QgcGl4ZWwgKnBpeCAgICAgICAgPSAocGl4ZWwgKilfcGl4OworICAg IGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlID0gX3hzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAg IGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlID0gX3lzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAg IHJldHVybiAoUDAgKyBUUDAgKyBRMCArIFRRMCkgPj4gMjsKK30KKworc3RhdGljIGludCBGVU5D KHZ2Y19oX2xvb3BfbGFkZl9sZXZlbCkoY29uc3QgdWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3Ry aWRlKQoreworICAgIHJldHVybiBGVU5DKHZ2Y19sb29wX2xhZGZfbGV2ZWwpKHBpeCwgc3RyaWRl LCBzaXplb2YocGl4ZWwpKTsKK30KKworc3RhdGljIGludCBGVU5DKHZ2Y192X2xvb3BfbGFkZl9s ZXZlbCkoY29uc3QgdWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHJldHVy biBGVU5DKHZ2Y19sb29wX2xhZGZfbGV2ZWwpKHBpeCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRlKTsK K30KKworI3VuZGVmIFA3CisjdW5kZWYgUDYKKyN1bmRlZiBQNQorI3VuZGVmIFA0CisjdW5kZWYg UDMKKyN1bmRlZiBQMgorI3VuZGVmIFAxCisjdW5kZWYgUDAKKyN1bmRlZiBRMAorI3VuZGVmIFEx CisjdW5kZWYgUTIKKyN1bmRlZiBRMworI3VuZGVmIFE0CisjdW5kZWYgUTUKKyN1bmRlZiBRNgor I3VuZGVmIFE3CisKKyN1bmRlZiBUUDcKKyN1bmRlZiBUUDYKKyN1bmRlZiBUUDUKKyN1bmRlZiBU UDQKKyN1bmRlZiBUUDMKKyN1bmRlZiBUUDIKKyN1bmRlZiBUUDEKKyN1bmRlZiBUUDAKKyN1bmRl ZiBUUTAKKyN1bmRlZiBUUTEKKyN1bmRlZiBUUTIKKyN1bmRlZiBUUTMKKyN1bmRlZiBUUTQKKyN1 bmRlZiBUUTUKKyN1bmRlZiBUUTYKKyN1bmRlZiBUUTcKKworc3RhdGljIHZvaWQgRlVOQyhmZl92 dmNfbG1jc19kc3BfaW5pdCkoVlZDTE1DU0RTUENvbnRleHQgKmNvbnN0IGxtY3MpCit7CisgICAg bG1jcy0+ZmlsdGVyID0gRlVOQyhsbWNzX2ZpbHRlcl9sdW1hKTsKK30KKworc3RhdGljIHZvaWQg RlVOQyhmZl92dmNfbGZfZHNwX2luaXQpKFZWQ0xGRFNQQ29udGV4dCAqY29uc3QgbGYpCit7Cisg ICAgbGYtPmxhZGZfbGV2ZWxbMF0gICAgICA9IEZVTkModnZjX2hfbG9vcF9sYWRmX2xldmVsKTsK KyAgICBsZi0+bGFkZl9sZXZlbFsxXSAgICAgID0gRlVOQyh2dmNfdl9sb29wX2xhZGZfbGV2ZWwp OworICAgIGxmLT5maWx0ZXJfbHVtYVswXSAgICAgPSBGVU5DKHZ2Y19oX2xvb3BfZmlsdGVyX2x1 bWEpOworICAgIGxmLT5maWx0ZXJfbHVtYVsxXSAgICAgPSBGVU5DKHZ2Y192X2xvb3BfZmlsdGVy X2x1bWEpOworICAgIGxmLT5maWx0ZXJfY2hyb21hWzBdICAgPSBGVU5DKHZ2Y19oX2xvb3BfZmls dGVyX2Nocm9tYSk7CisgICAgbGYtPmZpbHRlcl9jaHJvbWFbMV0gICA9IEZVTkModnZjX3ZfbG9v cF9maWx0ZXJfY2hyb21hKTsKK30KKworc3RhdGljIHZvaWQgRlVOQyhmZl92dmNfc2FvX2RzcF9p bml0KShWVkNTQU9EU1BDb250ZXh0ICpjb25zdCBzYW8pCit7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBGRl9BUlJBWV9FTEVNUyhzYW8tPmJhbmRfZmlsdGVyKTsgaSsrKQorICAgICAgICBzYW8t PmJhbmRfZmlsdGVyW2ldID0gRlVOQyhzYW9fYmFuZF9maWx0ZXIpOworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoc2FvLT5lZGdlX2ZpbHRlcik7IGkrKykKKyAgICAgICAg c2FvLT5lZGdlX2ZpbHRlcltpXSA9IEZVTkMoc2FvX2VkZ2VfZmlsdGVyKTsKKyAgICBzYW8tPmVk Z2VfcmVzdG9yZVswXSA9IEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8wKTsKKyAgICBzYW8tPmVkZ2Vf cmVzdG9yZVsxXSA9IEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8xKTsKK30KKworc3RhdGljIHZvaWQg RlVOQyhmZl92dmNfYWxmX2RzcF9pbml0KShWVkNBTEZEU1BDb250ZXh0ICpjb25zdCBhbGYpCit7 CisgICAgYWxmLT5maWx0ZXJbTFVNQV0gICAgPSBGVU5DKGFsZl9maWx0ZXJfbHVtYSk7CisgICAg YWxmLT5maWx0ZXJbQ0hST01BXSAgPSBGVU5DKGFsZl9maWx0ZXJfY2hyb21hKTsKKyAgICBhbGYt PmZpbHRlcl9jYyAgICAgICA9IEZVTkMoYWxmX2ZpbHRlcl9jYyk7CisgICAgYWxmLT5jbGFzc2lm eSAgICAgICAgPSBGVU5DKGFsZl9jbGFzc2lmeSk7CisgICAgYWxmLT5yZWNvbl9jb2VmZl9hbmRf Y2xpcCA9IEZVTkMoYWxmX3JlY29uX2NvZWZmX2FuZF9jbGlwKTsKK30KLS0gCjIuMjUuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVs IG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcv bWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5r IGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo=