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 5CDB44804B for ; Sun, 10 Dec 2023 12:55:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7524668D110; Sun, 10 Dec 2023 14:53:51 +0200 (EET) Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2071.outbound.protection.outlook.com [40.92.53.71]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 99AF268D0F9 for ; Sun, 10 Dec 2023 14:53:47 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S51fY4z8a6A8YcUgaIjA+IzyJnDl8VkbSDqbre4EVNd5f84hj1r4R8NKEc09oS+Qmcr0UbsXSO1IRTAvFyRjGzVGrKUhDobaqg7YblVGZb03JPbCJ/1LYA4wBA9VXS6Alq34WgGz+nrCufCFGjDLTw/XkGuYkZ8uhdwPlrIQVf2ZYAjEF3LRYPZJxP46XEVZwhXWlcLxcerd4mV9DbrEwGTwyMRdc8psSp2tSyT/IhPi2CmTFG291Qi1iq+1RGs+pthaJ/1s8dIO/UpdrmikT0YGNdBzGVWNxVsyS/9VzkBVWVUfSt2pkf2+B4NQpXd92UqGedgvCKbhZH+nMJ0IhQ== 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=NYWxI8GOgaiRTLgq0r45ceNaCjnCfRM+N008Z9+EtKs=; b=P59Czac7boqzXKdFzN2+TDkRYp/7yRhzHTcI+YLiW5L60Xa8OV4TybJneTxnSEZfCoa0N0JdE5/1UJ0EVAh2UfjRye9vRBlWeCtSz/aeJgOWJg4BbVaCEqKXQwYj1k9l+nlAX9NkfuWP0OTVbzxluLj7tspNqB93K1OMyk9PFqI9kS7iVeGYSlec9KbUMRUUBA7GDFb/K5DtuS6DARq/E1+0/GF1egDq2QR2N4iWoutfYf1J2poJ7Wklsfzz+UopVB9kQ7gsND0+qTWrE9IXglGFyN1nB8uMdDwuOmFVzdkaouEh/uvvA6eZyuIM3IJtgtu5OmwOOPiCp4Meelm41A== 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=NYWxI8GOgaiRTLgq0r45ceNaCjnCfRM+N008Z9+EtKs=; b=Uk73IcuQKlrtNJfhCF7H0v5wdnt4qNESXe1BB4Rei5Mh2o0crdwg697P1TibKiHY/j4oy0ENM90BRIxUZMpiDJ9zVoPfZH+465N+Fgmvpd2roywkPIPxYFuRTjgOCXmtHNLfaRABj2/q0645rd4e8z5XY91SnvAdJiwMUeWV1yYQFjRb06XI13nyhfz8P4c9/wWs2sPO+rOxeK8psmP7E7LK5UMHxMe+XhwLZ5e8fZaHYkcnqCNjPkqGFwR8+kaULWXTk5Bd5zSWvg62qGdEnO5j1rMi9N3fGztr6MEXuVsYnHd6cpuTmAr7fRmOPmJ3pyc1T8tYuSg6a95Zyd6oRA== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by SEZPR06MB7644.apcprd06.prod.outlook.com (2603:1096:101:249::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.30; Sun, 10 Dec 2023 12:53:28 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::80b3:be24:949c:e49f]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::80b3:be24:949c:e49f%4]) with mapi id 15.20.7068.030; Sun, 10 Dec 2023 12:53:28 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 10 Dec 2023 20:53:04 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231210125308.1838-1-nuomi2021@gmail.com> References: <20231210125308.1838-1-nuomi2021@gmail.com> X-TMN: [LynSx8KGdiBqi3sPtIL5mEG4yNibMD2o] X-ClientProxiedBy: TY2PR02CA0031.apcprd02.prod.outlook.com (2603:1096:404:a6::19) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231210125308.1838-10-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|SEZPR06MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: beacf594-5fec-4f03-b9a6-08dbf97f0177 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LawMKWFbOXpej27hZEih1dfY2xHtRLNS7u4uKXrH/K0CpjUdL4BAMT+4tvrHra3nS4vXHwpEvQuUqJdiTI66SvV65HJgmpgfzDYw0YZChp3Xztn48G0PvZNv14iRWvRWY4AN4d72wO1gW4+/2Gk9U/M5vDFBoRTsbxoHCfT2ubtSiGng9CbXdUH6lPEO1DdWhZSOV7Z7M7ARS7/oayl0dzUa0OxG3UFmFbzDdovs3apWQ9hmMpOurMAiRMxMpLotLkgMY3p/NxfmMClh0aFVCniWBZ8/Gga//NayRfPtU/IkGO/Bha2zzKPe3xCOAN8mHoqWn4fhP0m63Q22r+GjvWbUrtFhzPSDkFBRp/zON+1ffVUV7PZdliZPRQg0P3kvlvmKxFx8e5IrpwBXm9gIaEXL2Jqn9Ahsc3oPSVbfrLySaDRN6prm8kBf5AjfdljqEHFxdYh9hHMrUYGTenThJSV9ymWeKZ0ylmcxyDbYgbYkMNiWMq/ONFmBYPikoc+KiIYxoUQWmULh7OLVxKnw1dNZtVGSCc1Fh+a2ZOChs7cOLwKw1FYJQHsRFRQKkC9nKueczgZWWEa8qZ1LjYZVjHzFuvCEIB9w9H9XC4woF0c= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UFNHOVU1a1Nob0c5U3poUGtiTXVYanJkQ29vR0c5ZFd6R2w4OHdaTHhKaHBF?= =?utf-8?B?T1FscTdJYm8wOGhpSTRRamRZa29VWHFUNzRUUTAxL1F1ZzZlekVUeTkyWUUw?= =?utf-8?B?SE1pWWxHbmdROWxXa2U5NmZmT0ladWRjYzVmeFV6U3hxOEtrRVNPMmd0dTdC?= =?utf-8?B?emtrWjhST01HSmZEUENrSVJiSmVrTmg5UzNmVWlTdWVCbEpzV2pnUW9TdW5M?= =?utf-8?B?bllwZGwwdEt2bXB5bCszcHN0d0huOUxiS1VLR2V0SmFqbCtKSk9jT1lONEZz?= =?utf-8?B?aHJvUnY3ZzViTUJGSEdWZkJuUVFpRTRxNUlCNGpEajhoam9ab2l1YTNGN1hT?= =?utf-8?B?QThNR3QrUVdKRTducmtQbjhTbnBtQ2xWSS8zNGdiVCtGRkdzTTBKS3dIUkU1?= =?utf-8?B?akpzdmM0RlBwalloNDdpTVNzN2pKV3JpU1FOa3hMSnNQc3Q2OHJDc3BUdlVw?= =?utf-8?B?M0hLL3ZvVU5CMlhXSnlleTVhcTV3eTNGZXptc2JjQlBqdXpuZElOQS9sSk5F?= =?utf-8?B?VENucUwxVU1vTWRxZmJaUDJiTnhVUklnRVlWbmhvZCtlNHBJZEYwWGMvY0VX?= =?utf-8?B?NHFUUDZLRjM2SDNzbGVLSFdWaVRpNW5FdGl4MWNROHdpbVpRQ2tCMlZGTXo2?= =?utf-8?B?bXRwdUk5djB3aS9ZYzQ4dC9XUkt2a0JMbWc4NG1DVVNHaWVHTnhabWRodHc2?= =?utf-8?B?MXkyeDB6VDdRaWptTTZKbHB1MTJTaDA1YkJ6YnJ2Rjd0N2NRNDYzSUswQ2tX?= =?utf-8?B?UDEweVNiM3J5U1NwOUVxemduU290UjV1R1NoTHRzc2JsaXVhRFRjNkc2bUp2?= =?utf-8?B?U0lPVzRtNW9aMEpreXBsb3JVR2s3eGRSdFVDSEY4b1lWaWV5eGF6b3AvQ2Vp?= =?utf-8?B?YWhVYlJQSURhRHN0YTk1Vm1JaWx4OWVtNTVINlRtS09Rc2dNOGdWR1hBMjl5?= =?utf-8?B?M01mMUJWRlcrY2ZWVUl2M3RvUmdRRFBnTDU3RHg3V242WGFTTUs0cFQyVzlE?= =?utf-8?B?c0J3MWRGSFNTTFp5Z1dEcWtuY0pjSWpLa3lKd3NQNkZqR1ZsMXhuS1dyV1lZ?= =?utf-8?B?SlNpVFY1Y3FjQU1oYUVsR3lTM251ellJSEdOYUMzamphaW5ZSzgrN1J3bmlq?= =?utf-8?B?VWtKUm82d21UbUhtVUIxZkNZbGlUb1dSMEI2MTd4VTBWSjlXcjRGNXdiMDZL?= =?utf-8?B?OHpDRGhzRXlPSjgrRHp5bWZSd0w3V2hBOU9nUnJvT1FOR0lsY3VpSFJLTThN?= =?utf-8?B?blRuOFo0aW1jUzVFOGc0QXFhMSsyZ28wb3FlU3o5Mzc1aEs2TnhhSXdZaVVK?= =?utf-8?B?K3JxZkNObHlDVndSbnQzbmdNQWxHMzB0S2FyRlpkQkZReDVpWWpqTm5hWEFP?= =?utf-8?B?Vk1wOFFZcnVZeERFa1NKV0lGVUx4ZmJvQ2hOMEdPeHhCTndKRjBCSExEdHJo?= =?utf-8?B?MlUrTm1LN1pSM2pVYUZwSjJrTkd4d0cvN2hZR2t4SU5vTEVjSE1UcExreEls?= =?utf-8?B?bWdidjVmNWZYREU2WFJWckh2eWVUYlo2QnNqdGYyR2V0SmtjQ25KQzc0WnlD?= =?utf-8?B?dVNZNW9HM25qeXlSWDFKVEdlZ0ViT1p3RndyY2RPMmVSZUhSTmVkdzNLM05Q?= =?utf-8?B?L1dWQitUemVBQmo1Y0RHUU9weGdNMHdPUFZWYVljdml6QlN2UFArUHVlQmFu?= =?utf-8?Q?qMZWhTeE/CV3L1XvvXEn?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: beacf594-5fec-4f03-b9a6-08dbf97f0177 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Dec 2023 12:53:28.6108 (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: SEZPR06MB7644 Subject: [FFmpeg-devel] [PATCH v7 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 Y29kZWMvdnZjL3Z2Y19jdHUuaCAgICAgICAgICAgICB8ICAgIDEgKwogbGliYXZjb2RlYy92dmMv dnZjX2ZpbHRlci5jICAgICAgICAgIHwgMTM0OCArKysrKysrKysrKysrKysrKysrKysrKysrKwog bGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oICAgICAgICAgIHwgICA3MSArKwogbGliYXZjb2Rl Yy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jIHwgMTEzNSArKysrKysrKysrKysrKysrKysrKysr CiA1IGZpbGVzIGNoYW5nZWQsIDI1NTYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29k ZWMvdnZjL3Z2Y19maWx0ZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2 Y19maWx0ZXJfdGVtcGxhdGUuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxl IGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggM2IxYWM3MjAyOS4uOWU3ZmVmN2QzOCAx MDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy92dmMv TWFrZWZpbGUKQEAgLTUsNiArNSw3IEBAIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAg ICAgICs9ICB2dmMvdnZjZGVjLm8gICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19jYWJhYy5vICAgICAgICAgXAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfY3R1Lm8gICAgICAgICAgIFwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2RhdGEubyAgICAg ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19m aWx0ZXIubyAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZ2Yy92dmNfaW50ZXIubyAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2dmMvdnZjX2ludHJhLm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pdHhfMWQubyAgICAgICAgXApkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCmlu ZGV4IDU3NzEzNmIyZTIuLmU5YjE1Nzc5NWMgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2 Y19jdHUuaAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKQEAgLTQ2Miw2ICs0NjIsNyBA QCB0eXBlZGVmIHN0cnVjdCBBTEZQYXJhbXMgewogdm9pZCBmZl92dmNfc2V0X25laWdoYm91cl9h dmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB3LCBpbnQg aCk7CiB2b2lkIGZmX3Z2Y19kZWNvZGVfbmVpZ2hib3VyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGlu dCB4X2N0YiwgaW50IHlfY3RiLCBpbnQgcngsIGludCByeSwgaW50IHJzKTsKIHZvaWQgZmZfdnZj X2N0dV9mcmVlX2N1cyhDVFUgKmN0dSk7CitpbnQgZmZfdnZjX2dldF9xUHkoY29uc3QgVlZDRnJh bWVDb250ZXh0ICpmYywgaW50IHhjLCBpbnQgeWMpOwogdm9pZCBmZl92dmNfZXBfaW5pdF9zdGF0 X2NvZWZmKEVudHJ5UG9pbnQgKmVwLCBpbnQgYml0X2RlcHRoLCBpbnQgcGVyc2lzdGVudF9yaWNl X2FkYXB0YXRpb25fZW5hYmxlZF9mbGFnKTsKIAogI2VuZGlmIC8vIEFWQ09ERUNfVlZDX1ZWQ19D VFVfSApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5jIGIvbGliYXZjb2Rl Yy92dmMvdnZjX2ZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjA0NTZiMzBkY2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVy LmMKQEAgLTAsMCArMSwxMzQ4IEBACisvKgorICogVlZDIGZpbHRlcnMKKyAqCisgKiBDb3B5cmln aHQgKEMpIDIwMjEgTnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov CisjaW5jbHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCisKKyNpbmNsdWRlICJ2dmNfY3R1LmgiCisj aW5jbHVkZSAidnZjX2RhdGEuaCIKKyNpbmNsdWRlICJ2dmNfZmlsdGVyLmgiCisjaW5jbHVkZSAi dnZjX3JlZnMuaCIKKworI2RlZmluZSBMRUZUICAgICAgICAwCisjZGVmaW5lIFRPUCAgICAgICAg IDEKKyNkZWZpbmUgUklHSFQgICAgICAgMgorI2RlZmluZSBCT1RUT00gICAgICAzCisjZGVmaW5l IE1BWF9FREdFUyAgIDQKKworI2RlZmluZSBERUZBVUxUX0lOVFJBX1RDX09GRlNFVCAyCisKKy8v VGFibGUgNDMgRGVyaXZhdGlvbiBvZiB0aHJlc2hvbGQgdmFyaWFibGVzIGJldGEnIGFuZCB0Yycg ZnJvbSBpbnB1dCBRCitzdGF0aWMgY29uc3QgdWludDE2X3QgdGN0YWJsZVs2Nl0gPSB7CisgICAg ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDMsICAgNCwgICA0LCAgIDQs ICAgNCwgICA1LCAgIDUsICAgNSwgICA1LCAgIDcsICAgNywgICA4LCAgIDksICAxMCwKKyAgICAg MTAsICAxMSwgIDEzLCAgMTQsICAxNSwgIDE3LCAgMTksICAyMSwgIDI0LCAgMjUsICAyOSwgIDMz LCAgMzYsICA0MSwgIDQ1LCAgNTEsCisgICAgIDU3LCAgNjQsICA3MSwgIDgwLCAgODksIDEwMCwg MTEyLCAxMjUsIDE0MSwgMTU3LCAxNzcsIDE5OCwgMjIyLCAyNTAsIDI4MCwgMzE0LAorICAgIDM1 MiwgMzk1LAorCit9OworCisvL1RhYmxlIDQzIERlcml2YXRpb24gb2YgdGhyZXNob2xkIHZhcmlh YmxlcyBiZXRhJyBhbmQgdGMnIGZyb20gaW5wdXQgUQorc3RhdGljIGNvbnN0IHVpbnQ4X3QgYmV0 YXRhYmxlWzY0XSA9IHsKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgICA2LCAgIDcs ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LCAgMTYsICAxNywgIDE4LCAg MjAsICAyMiwgIDI0LAorICAgICAyNiwgIDI4LCAgMzAsICAzMiwgIDM0LCAgMzYsICAzOCwgIDQw LCAgNDIsICA0NCwgIDQ2LCAgNDgsICA1MCwgIDUyLCAgNTQsICA1NiwKKyAgICAgNTgsICA2MCwg IDYyLCAgNjQsICA2NiwgIDY4LCAgNzAsICA3MiwgIDc0LCAgNzYsICA3OCwgIDgwLCAgODIsICA4 NCwgIDg2LCAgODgsCit9OworCisKK3N0YXRpYyBpbnQgZ2V0X3FQYyhjb25zdCBWVkNGcmFtZUNv bnRleHQgKmZjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IGNocm9tYSkK K3sKKyAgICBjb25zdCBpbnQgeCAgICAgICAgICAgICA9IHgwID4+IE1JTl9UVV9MT0cyOworICAg IGNvbnN0IGludCB5ICAgICAgICAgICAgID0geTAgPj4gTUlOX1RVX0xPRzI7CisgICAgY29uc3Qg aW50IG1pbl90dV93aWR0aCAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgcmV0dXJu IGZjLT50YWIucXBbY2hyb21hXVt4ICsgeSAqIG1pbl90dV93aWR0aF07Cit9CisKK3N0YXRpYyB2 b2lkIGNvcHlfY3RiKHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQg d2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUs IGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlKQoreworICAgIGZvciAoaW50IHkgPSAwOyB5IDwg aGVpZ2h0OyB5KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCk7CisKKyAgICAg ICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgIH0K K30KKworc3RhdGljIHZvaWQgY29weV9waXhlbCh1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3Qg KnNyYywgY29uc3QgaW50IHBpeGVsX3NoaWZ0KQoreworICAgIGlmIChwaXhlbF9zaGlmdCkKKyAg ICAgICAgKih1aW50MTZfdCAqKWRzdCA9ICoodWludDE2X3QgKilzcmM7CisgICAgZWxzZQorICAg ICAgICAqZHN0ID0gKnNyYzsKK30KKworc3RhdGljIHZvaWQgY29weV92ZXJ0KHVpbnQ4X3QgKmRz dCwgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCBo ZWlnaHQsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBz cmNfc3RyaWRlKQoreworICAgIGlmIChwaXhlbF9zaGlmdCA9PSAwKSB7CisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgICpkc3QgPSAqc3JjOwor ICAgICAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBzcmMgKz0gc3JjX3N0 cmlkZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgICoodWludDE2X3QgKilkc3QgPSAqKHVpbnQx Nl90ICopc3JjOworICAgICAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBz cmMgKz0gc3JjX3N0cmlkZTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgY29w eV9jdGJfdG9faHYoVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgdWludDhfdCAqc3JjLAorICAg IGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNv bnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBpbnQgY19pZHgsIGNv bnN0IGludCB4X2N0YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQgdG9wKQoreworICAgIGlu dCBwcyA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0OworICAgIGludCB3ICA9IGZjLT5wcy5zcHMt PndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgaW50IGggID0gZmMtPnBz LnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisKKyAgICBpZiAodG9w KSB7CisgICAgICAgIC8qIHRvcCAqLworICAgICAgICBtZW1jcHkoZmMtPnRhYi5zYW9fcGl4ZWxf YnVmZmVyX2hbY19pZHhdICsgKCgoMiAqIHlfY3RiKSAqIHcgKyB4KSA8PCBwcyksCisgICAgICAg ICAgICBzcmMsIHdpZHRoIDw8IHBzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBib3R0b20g Ki8KKyAgICAgICAgbWVtY3B5KGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XSArICgo KDIgKiB5X2N0YiArIDEpICogdyArIHgpIDw8IHBzKSwKKyAgICAgICAgICAgIHNyYyArIHNyY19z dHJpZGUgKiAoaGVpZ2h0IC0gMSksIHdpZHRoIDw8IHBzKTsKKworICAgICAgICAvKiBjb3B5IHZl cnRpY2FsIGVkZ2VzICovCisgICAgICAgIGNvcHlfdmVydChmYy0+dGFiLnNhb19waXhlbF9idWZm ZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIpICogaCArIHkpIDw8IHBzKSwgc3JjLCBwcywgaGVp Z2h0LCAxIDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICAgICAgY29weV92ZXJ0KGZjLT50YWIuc2Fv X3BpeGVsX2J1ZmZlcl92W2NfaWR4XSArICgoKDIgKiB4X2N0YiArIDEpICogaCArIHkpIDw8IHBz KSwgc3JjICsgKCh3aWR0aCAtIDEpIDw8IHBzKSwgcHMsIGhlaWdodCwgMSA8PCBwcywgc3JjX3N0 cmlkZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzYW9fY29weV9jdGJfdG9faHYoVlZDTG9j YWxDb250ZXh0ICpsYywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnksIGNvbnN0IGludCB0b3Ap Cit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50 IGN0Yl9zaXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCB4 MCAgICAgICAgICAgID0gcnggPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNv bnN0IGludCB5MCAgICAgICAgICAgID0gcnkgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95 OworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IChmYy0+cHMuc3BzLT5yLT5zcHNf Y2hyb21hX2Zvcm1hdF9pZGMgPyAzIDogMSk7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50 IHggICAgICAgICAgICAgICAgPSB4MCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAg ICAgICBjb25zdCBpbnQgeSAgICAgICAgICAgICAgICA9IHkwID4+IGZjLT5wcy5zcHMtPnZzaGlm dFtjX2lkeF07CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gZmMtPmZyYW1l LT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBjdGJfc2l6ZV9oICAgICAgID0g Y3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBp bnQgY3RiX3NpemVfdiAgICAgICA9IGN0Yl9zaXplX3kgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2Nf aWR4XTsKKyAgICAgICAgY29uc3QgaW50IHdpZHRoICAgICAgICAgICAgPSBGRk1JTihjdGJfc2l6 ZV9oLCAoZmMtPnBzLnNwcy0+d2lkdGggID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF0pIC0g eCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgICAgICAgICAgID0gRkZNSU4oY3RiX3NpemVf diwgKGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdKSAtIHkp OworICAgICAgICB1aW50OF90ICpzcmMgICAgICAgICAgICAgICA9ICZmYy0+ZnJhbWUtPmRhdGFb Y19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsK KyAgICAgICAgY29weV9jdGJfdG9faHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeCwgeSwgd2lkdGgs IGhlaWdodCwgY19pZHgsIHJ4LCByeSwgdG9wKTsKKyAgICB9CisKK30KKwordm9pZCBmZl92dmNf c2FvX2NvcHlfY3RiX3RvX2h2KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCByeCwgY29u c3QgaW50IHJ5LCBjb25zdCBpbnQgbGFzdF9yb3cpCit7CisgICAgaWYgKHJ5KQorICAgICAgICBz YW9fY29weV9jdGJfdG9faHYobGMsIHJ4LCByeSAtIDEsIDApOworCisgICAgc2FvX2NvcHlfY3Ri X3RvX2h2KGxjLCByeCwgcnksIDEpOworCisgICAgaWYgKGxhc3Rfcm93KQorICAgICAgICBzYW9f Y29weV9jdGJfdG9faHYobGMsIHJ4LCByeSwgMCk7Cit9CisKK3ZvaWQgZmZfdnZjX3Nhb19maWx0 ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgsIGludCB5KQoreworICAgIFZWQ0ZyYW1lQ29u dGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ID0gZmMtPnBzLnNw cy0+Y3RiX3NpemVfeTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBzYW9fdGFiWzE2XSA9IHsg MCwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCB9OworICAgIGlu dCBjX2lkeDsKKyAgICBpbnQgZWRnZXNbNF07ICAvLyAwIGxlZnQgMSB0b3AgMiByaWdodCAzIGJv dHRvbQorICAgIGludCB4X2N0YiAgICAgICAgICAgICAgICA9IHggPj4gZmMtPnBzLnNwcy0+Y3Ri X2xvZzJfc2l6ZV95OworICAgIGludCB5X2N0YiAgICAgICAgICAgICAgICA9IHkgPj4gZmMtPnBz LnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIFNBT1BhcmFtcyAqc2FvICAgICAgICAgICA9ICZD VEIoZmMtPnRhYi5zYW8sIHhfY3RiLCB5X2N0Yik7CisgICAgLy8gZmxhZ3MgaW5kaWNhdGluZyB1 bmZpbHRlcmFibGUgZWRnZXMKKyAgICB1aW50OF90IHZlcnRfZWRnZVtdICAgICAgPSB7IDAsIDAg fTsKKyAgICB1aW50OF90IGhvcml6X2VkZ2VbXSAgICAgPSB7IDAsIDAgfTsKKyAgICB1aW50OF90 IGRpYWdfZWRnZVtdICAgICAgPSB7IDAsIDAsIDAsIDAgfTsKKyAgICB1aW50OF90IGxmYXNlICAg ICAgICAgICAgPSBmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19l bmFibGVkX2ZsYWc7CisgICAgdWludDhfdCBub190aWxlX2ZpbHRlciAgID0gZmMtPnBzLnBwcy0+ ci0+bnVtX3RpbGVzX2luX3BpYyA+IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAhZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2Zs YWc7CisgICAgdWludDhfdCByZXN0b3JlICAgICAgICAgID0gbm9fdGlsZV9maWx0ZXIgfHwgIWxm YXNlOworICAgIHVpbnQ4X3QgbGVmdF90aWxlX2VkZ2UgICA9IDA7CisgICAgdWludDhfdCByaWdo dF90aWxlX2VkZ2UgID0gMDsKKyAgICB1aW50OF90IHVwX3RpbGVfZWRnZSAgICAgPSAwOworICAg IHVpbnQ4X3QgYm90dG9tX3RpbGVfZWRnZSA9IDA7CisKKyAgICBlZGdlc1tMRUZUXSAgID0geF9j dGIgPT0gMDsKKyAgICBlZGdlc1tUT1BdICAgID0geV9jdGIgPT0gMDsKKyAgICBlZGdlc1tSSUdI VF0gID0geF9jdGIgPT0gZmMtPnBzLnBwcy0+Y3RiX3dpZHRoICAtIDE7CisgICAgZWRnZXNbQk9U VE9NXSA9IHlfY3RiID09IGZjLT5wcy5wcHMtPmN0Yl9oZWlnaHQgLSAxOworCisgICAgaWYgKHJl c3RvcmUpIHsKKyAgICAgICAgaWYgKCFlZGdlc1tMRUZUXSkgeworICAgICAgICAgICAgbGVmdF90 aWxlX2VkZ2UgID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4 X2N0Yl0gPT0geF9jdGI7CisgICAgICAgICAgICB2ZXJ0X2VkZ2VbMF0gICAgPSAoIWxmYXNlICYm IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGlj ZV9pZHgsIHhfY3RiIC0gMSwgeV9jdGIpKSB8fCBsZWZ0X3RpbGVfZWRnZTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgcmlnaHRfdGlsZV9lZGdl ID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0Yl0gIT0g ZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0YiArIDFdOworICAgICAgICAgICAgdmVydF9l ZGdlWzFdICAgID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0 YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiArIDEsIHlfY3RiKSkgfHwgcmlnaHRf dGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbVE9QXSkgeworICAgICAg ICAgICAgdXBfdGlsZV9lZGdlICAgICA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0 Yl90b19yb3dfYmRbeV9jdGJdID09IHlfY3RiOworICAgICAgICAgICAgaG9yaXpfZWRnZVswXSAg ICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENU QihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiIC0gMSkpIHx8IHVwX3RpbGVfZWRnZTsK KyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAgICAgIGJv dHRvbV90aWxlX2VkZ2UgPSBub190aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBzLT5jdGJfdG9fcm93 X2JkW3lfY3RiXSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiICsgMV07CisgICAg ICAgICAgICBob3Jpel9lZGdlWzFdICAgID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9p ZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIg KyAxKSkgfHwgYm90dG9tX3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2Vz W0xFRlRdICYmICFlZGdlc1tUT1BdKSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbMF0gPSAoIWxm YXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRh Yi5zbGljZV9pZHgsIHhfY3RiIC0gMSwgeV9jdGIgLSAxKSkgfHwgbGVmdF90aWxlX2VkZ2UgfHwg dXBfdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbVE9QXSAmJiAhZWRn ZXNbUklHSFRdKSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbMV0gPSAoIWxmYXNlICYmIENUQihm Yy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgs IHhfY3RiICsgMSwgeV9jdGIgLSAxKSkgfHwgcmlnaHRfdGlsZV9lZGdlIHx8IHVwX3RpbGVfZWRn ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSAmJiAhZWRnZXNbQk9UVE9N XSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzJdID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5z bGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiAr IDEsIHlfY3RiICsgMSkpIHx8IHJpZ2h0X3RpbGVfZWRnZSB8fCBib3R0b21fdGlsZV9lZGdlOwor ICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbTEVGVF0gJiYgIWVkZ2VzW0JPVFRPTV0pIHsK KyAgICAgICAgICAgIGRpYWdfZWRnZVszXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2Vf aWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgLSAxLCB5 X2N0YiArIDEpKSB8fCBsZWZ0X3RpbGVfZWRnZSB8fCBib3R0b21fdGlsZV9lZGdlOworICAgICAg ICB9CisgICAgfQorCisgICAgZm9yIChjX2lkeCA9IDA7IGNfaWR4IDwgKGZjLT5wcy5zcHMtPnIt PnNwc19jaHJvbWFfZm9ybWF0X2lkYyA/IDMgOiAxKTsgY19pZHgrKykgeworICAgICAgICBpbnQg eDAgICAgICAgPSB4ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGludCB5 MCAgICAgICA9IHkgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgcHRyZGlm Zl90IHNyY19zdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICAgICAgaW50 IGN0Yl9zaXplX2ggPSBjdGJfc2l6ZV95ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07Cisg ICAgICAgIGludCBjdGJfc2l6ZV92ID0gY3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT52c2hpZnRb Y19pZHhdOworICAgICAgICBpbnQgd2lkdGggICAgPSBGRk1JTihjdGJfc2l6ZV9oLCAoZmMtPnBz LnNwcy0+d2lkdGggID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF0pIC0geDApOworICAgICAg ICBpbnQgaGVpZ2h0ICAgPSBGRk1JTihjdGJfc2l6ZV92LCAoZmMtPnBzLnNwcy0+aGVpZ2h0ID4+ IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF0pIC0geTApOworICAgICAgICBpbnQgdGFiICAgICAg PSBzYW9fdGFiWyhGRkFMSUdOKHdpZHRoLCA4KSA+PiAzKSAtIDFdOworICAgICAgICB1aW50OF90 ICpzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5MCAqIHNyY19zdHJpZGUgKyAoeDAgPDwg ZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgcHRyZGlmZl90IGRzdF9zdHJpZGU7 CisgICAgICAgIHVpbnQ4X3QgKmRzdDsKKworICAgICAgICBzd2l0Y2ggKHNhby0+dHlwZV9pZHhb Y19pZHhdKSB7CisgICAgICAgIGNhc2UgU0FPX0JBTkQ6CisgICAgICAgICAgICBmYy0+dnZjZHNw LnNhby5iYW5kX2ZpbHRlclt0YWJdKHNyYywgc3JjLCBzcmNfc3RyaWRlLCBzcmNfc3RyaWRlLAor ICAgICAgICAgICAgICAgIHNhby0+b2Zmc2V0X3ZhbFtjX2lkeF0sIHNhby0+YmFuZF9wb3NpdGlv bltjX2lkeF0sIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgU0FPX0VER0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB3ID0gZmMtPnBzLnNwcy0+ d2lkdGggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgICAgIGludCBoID0g ZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAg ICAgICBpbnQgc2ggPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKworICAgICAgICAgICAgZHN0 X3N0cmlkZSA9IDIqTUFYX1BCX1NJWkUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFOwor ICAgICAgICAgICAgZHN0ID0gbGMtPnNhb19idWZmZXIgKyBkc3Rfc3RyaWRlICsgQVZfSU5QVVRf QlVGRkVSX1BBRERJTkdfU0laRTsKKworICAgICAgICAgICAgaWYgKCFlZGdlc1tUT1BdKSB7Cisg ICAgICAgICAgICAgICAgaW50IGxlZnQgPSAxIC0gZWRnZXNbTEVGVF07CisgICAgICAgICAgICAg ICAgaW50IHJpZ2h0ID0gMSAtIGVkZ2VzW1JJR0hUXTsKKyAgICAgICAgICAgICAgICBjb25zdCB1 aW50OF90ICpzcmMxOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdDE7CisgICAgICAgICAg ICAgICAgaW50IHBvczsKKworICAgICAgICAgICAgICAgIGRzdDEgPSBkc3QgLSBkc3Rfc3RyaWRl IC0gKGxlZnQgPDwgc2gpOworICAgICAgICAgICAgICAgIHNyYzEgPSBmYy0+dGFiLnNhb19waXhl bF9idWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9jdGIgLSAxKSAqIHcgKyB4MCAtIGxlZnQpIDw8 IHNoKTsKKyAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAgIGlmIChsZWZ0 KSB7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSwgc3JjMSwgc2gpOworICAg ICAgICAgICAgICAgICAgICBwb3MgKz0gKDEgPDwgc2gpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBtZW1jcHkoZHN0MSArIHBvcywgc3JjMSArIHBvcywgd2lkdGggPDwgc2gp OworICAgICAgICAgICAgICAgIGlmIChyaWdodCkgeworICAgICAgICAgICAgICAgICAgICBwb3Mg Kz0gd2lkdGggPDwgc2g7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSArIHBv cywgc3JjMSArIHBvcywgc2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICghZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgICAgIGludCBsZWZ0 ID0gMSAtIGVkZ2VzW0xFRlRdOworICAgICAgICAgICAgICAgIGludCByaWdodCA9IDEgLSBlZGdl c1tSSUdIVF07CisgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjMTsKKyAgICAgICAg ICAgICAgICB1aW50OF90ICpkc3QxOworICAgICAgICAgICAgICAgIGludCBwb3M7CisKKyAgICAg ICAgICAgICAgICBkc3QxID0gZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlkZSAtIChsZWZ0IDw8IHNo KTsKKyAgICAgICAgICAgICAgICBzcmMxID0gZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hbY19p ZHhdICsgKCgoMiAqIHlfY3RiICsgMikgKiB3ICsgeDAgLSBsZWZ0KSA8PCBzaCk7CisgICAgICAg ICAgICAgICAgcG9zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobGVmdCkgeworICAgICAgICAg ICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEsIHNyYzEsIHNoKTsKKyAgICAgICAgICAgICAgICAg ICAgcG9zICs9ICgxIDw8IHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg bWVtY3B5KGRzdDEgKyBwb3MsIHNyYzEgKyBwb3MsIHdpZHRoIDw8IHNoKTsKKyAgICAgICAgICAg ICAgICBpZiAocmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zICs9IHdpZHRoIDw8IHNo OworICAgICAgICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEgKyBwb3MsIHNyYzEgKyBwb3Ms IHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo IWVkZ2VzW0xFRlRdKSB7CisgICAgICAgICAgICAgICAgY29weV92ZXJ0KGRzdCAtICgxIDw8IHNo KSwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhd ICsgKCgoMiAqIHhfY3RiIC0gMSkgKiBoICsgeTApIDw8IHNoKSwKKyAgICAgICAgICAgICAgICAg ICAgc2gsIGhlaWdodCwgZHN0X3N0cmlkZSwgMSA8PCBzaCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgICAgIGNvcHlfdmVydChk c3QgKyAod2lkdGggPDwgc2gpLAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnNhb19waXhl bF9idWZmZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIgKyAyKSAqIGggKyB5MCkgPDwgc2gpLAor ICAgICAgICAgICAgICAgICAgICBzaCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCAxIDw8IHNoKTsKKyAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29weV9jdGIoZHN0LCBzcmMsICB3aWR0aCA8PCBz aCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKKyAgICAgICAgICAgIGZjLT52dmNk c3Auc2FvLmVkZ2VfZmlsdGVyW3RhYl0oc3JjLCBkc3QsIHNyY19zdHJpZGUsIHNhby0+b2Zmc2V0 X3ZhbFtjX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNhby0+ZW9fY2xhc3NbY19pZHhdLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGZjLT52 dmNkc3Auc2FvLmVkZ2VfcmVzdG9yZVtyZXN0b3JlXShzcmMsIGRzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHJpZGUsIGRzdF9zdHJpZGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlcywgd2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln aHQsIGNfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmVydF9lZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaG9yaXpfZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpYWdfZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorfQorCisjZGVmaW5lIFRBQl9CUyh0LCB4LCB5KSAgICAgKHQpWygoeSkg Pj4gMikgKiAoZmMtPnRhYi5ic193aWR0aCkgKyAoKHgpID4+IDIpXQorI2RlZmluZSBUQUJfTUFY X0xFTih0LCB4LCB5KSAgKHQpWygoeSkgPj4gMikgKiAoZmMtPnRhYi5ic193aWR0aCkgKyAoKHgp ID4+IDIpXQorCisvLzggc2FtcGxlcyBhIHRpbWUKKyNkZWZpbmUgREVCTE9DS19TVEVQICAgICAg ICAgICAgOAorI2RlZmluZSBMVU1BX0dSSUQgICAgICAgICAgICAgICA0CisjZGVmaW5lIENIUk9N QV9HUklEICAgICAgICAgICAgIDgKKworc3RhdGljIGludCBib3VuZGFyeV9zdHJlbmd0aChjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLCBNdkZpZWxkICpjdXJyLCBNdkZpZWxkICpuZWlnaCwKKyAg ICBjb25zdCBSZWZQaWNMaXN0ICpuZWlnaF9ycGwpCit7CisgICAgUmVmUGljTGlzdCAqcnBsID0g bGMtPnNjLT5ycGw7CisgICAgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9CSSAmJiAgbmVpZ2gt PnByZWRfZmxhZyA9PSBQRl9CSSkgeworICAgICAgICAvLyBzYW1lIEwwIGFuZCBMMQorICAgICAg ICBpZiAocnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gPT0gbmVpZ2hfcnBsWzBdLmxpc3Rb bmVpZ2gtPnJlZl9pZHhbMF1dICAmJgorICAgICAgICAgICAgcnBsWzBdLmxpc3RbY3Vyci0+cmVm X2lkeFswXV0gPT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0gJiYKKyAgICAgICAgICAg IG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXSA9PSBuZWlnaF9ycGxbMV0ubGlz dFtuZWlnaC0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAgICAgIGlmICgoRkZBQlMobmVpZ2gtPm12 WzBdLnggLSBjdXJyLT5tdlswXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlswXS55IC0gY3Vy ci0+bXZbMF0ueSkgPj0gOCB8fAorICAgICAgICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMV0u eCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5t dlsxXS55KSA+PSA4KSAmJgorICAgICAgICAgICAgICAgIChGRkFCUyhuZWlnaC0+bXZbMV0ueCAt IGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlsw XS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAgIEZGQUJTKG5laWdoLT5tdlswXS54IC0gY3Vy ci0+bXZbMV0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0ueSAtIGN1cnItPm12WzFdLnkp ID49IDgpKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgaWYgKG5laWdoX3JwbFswXS5s aXN0W25laWdoLT5yZWZfaWR4WzBdXSA9PSBycGxbMF0ubGlzdFtjdXJyLT5yZWZfaWR4WzBdXSAm JgorICAgICAgICAgICAgICAgICAgIG5laWdoX3JwbFsxXS5saXN0W25laWdoLT5yZWZfaWR4WzFd XSA9PSBycGxbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXSkgeworICAgICAgICAgICAgaWYgKEZG QUJTKG5laWdoLT5tdlswXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+ bXZbMF0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICBGRkFCUyhu ZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFd LnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2Ug aWYgKG5laWdoX3JwbFsxXS5saXN0W25laWdoLT5yZWZfaWR4WzFdXSA9PSBycGxbMF0ubGlzdFtj dXJyLT5yZWZfaWR4WzBdXSAmJgorICAgICAgICAgICAgICAgICAgIG5laWdoX3JwbFswXS5saXN0 W25laWdoLT5yZWZfaWR4WzBdXSA9PSBycGxbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXSkgewor ICAgICAgICAgICAgaWYgKEZGQUJTKG5laWdoLT5tdlsxXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0g OCB8fCBGRkFCUyhuZWlnaC0+bXZbMV0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAg ICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwg RkZBQlMobmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KQorICAgICAgICAgICAg ICAgIHJldHVybiAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgaWYgKChjdXJyLT5wcmVkX2ZsYWcgIT0gUEZfQkkpICYmIChuZWlnaC0+cHJlZF9m bGFnICE9IFBGX0JJKSl7IC8vIDEgTVYKKyAgICAgICAgTXYgQSwgQjsKKyAgICAgICAgaW50IHJl Zl9BLCByZWZfQjsKKworICAgICAgICBpZiAoY3Vyci0+cHJlZF9mbGFnICYgMSkgeworICAgICAg ICAgICAgQSAgICAgPSBjdXJyLT5tdlswXTsKKyAgICAgICAgICAgIHJlZl9BID0gcnBsWzBdLmxp c3RbY3Vyci0+cmVmX2lkeFswXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBICAg ICA9IGN1cnItPm12WzFdOworICAgICAgICAgICAgcmVmX0EgPSBycGxbMV0ubGlzdFtjdXJyLT5y ZWZfaWR4WzFdXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZWlnaC0+cHJlZF9mbGFnICYg MSkgeworICAgICAgICAgICAgQiAgICAgPSBuZWlnaC0+bXZbMF07CisgICAgICAgICAgICByZWZf QiA9IG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIEIgICAgID0gbmVpZ2gtPm12WzFdOworICAgICAgICAgICAgcmVmX0Ig PSBuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV07CisgICAgICAgIH0KKworICAg ICAgICBpZiAocmVmX0EgPT0gcmVmX0IpIHsKKyAgICAgICAgICAgIGlmIChGRkFCUyhBLnggLSBC LngpID49IDggfHwgRkZBQlMoQS55IC0gQi55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVy biAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAxOwor fQorCisvL3BhcnQgb2YgOC44LjMuMyBEZXJpdmF0aW9uIHByb2Nlc3Mgb2YgdHJhbnNmb3JtIGJs b2NrIGJvdW5kYXJ5CitzdGF0aWMgdm9pZCBkZXJpdmVfbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShj b25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19pbnRy YSwgY29uc3QgaW50IGhhc19zdWJibG9jaywgY29uc3QgaW50IHZlcnRpY2FsLCB1aW50OF90ICpt YXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBjb25zdCBpbnQgcHggPSAgdmVy dGljYWwgPyBxeCAtIDEgOiBxeDsKKyAgICBjb25zdCBpbnQgcHkgPSAhdmVydGljYWwgPyBxeSAt IDEgOiBxeTsKKyAgICBjb25zdCB1aW50OF90ICp0Yl9zaXplID0gdmVydGljYWwgPyBmYy0+dGFi LnRiX3dpZHRoW0xVTUFdIDogZmMtPnRhYi50Yl9oZWlnaHRbTFVNQV07CisgICAgY29uc3QgaW50 IHNpemVfcCA9IHRiX3NpemVbKHB5ID4+IE1JTl9UVV9MT0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90 dV93aWR0aCArIChweCA+PiBNSU5fVFVfTE9HMildOworICAgIGNvbnN0IGludCBzaXplX3EgPSB0 Yl9zaXplWyhxeSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAo cXggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgbWluX2NiX2xvZzIgPSBmYy0+cHMu c3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IG9mZl9wID0gKHB5ID4+IG1p bl9jYl9sb2cyKSAqIGZjLT5wcy5wcHMtPm1pbl9jYl93aWR0aCArIChweCA+PiBtaW5fY2JfbG9n Mik7CisgICAgaWYgKHNpemVfcCA8PSA0IHx8IHNpemVfcSA8PSA0KSB7CisgICAgICAgICptYXhf bGVuX3AgPSAqbWF4X2xlbl9xID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAqbWF4X2xlbl9w ID0gKm1heF9sZW5fcSA9IDM7CisgICAgICAgIGlmIChzaXplX3AgPj0gMzIpCisgICAgICAgICAg ICAqbWF4X2xlbl9wID0gNzsKKyAgICAgICAgaWYgKHNpemVfcSA+PSAzMikKKyAgICAgICAgICAg ICptYXhfbGVuX3EgPSA3OworICAgIH0KKyAgICBpZiAoaGFzX3N1YmJsb2NrKQorICAgICAgICAq bWF4X2xlbl9xID0gRkZNSU4oNSwgKm1heF9sZW5fcSk7CisgICAgaWYgKGZjLT50YWIubXNmW29m Zl9wXSB8fCBmYy0+dGFiLmlhZltvZmZfcF0pCisgICAgICAgICptYXhfbGVuX3AgPSBGRk1JTig1 LCAqbWF4X2xlbl9wKTsKK30KKworc3RhdGljIHZvaWQgZGVibG9ja19zdWJibG9ja19ic192ZXJ0 aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCBjYl94LCBjb25z dCBpbnQgY2JfeSwgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwg Y29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgICpmYyAgPSBs Yy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgID0gZmMtPnRhYi5tdmY7Cisg ICAgUmVmUGljTGlzdCAqcnBsICAgICAgICAgICAgID0gbGMtPnNjLT5ycGw7CisgICAgY29uc3Qg aW50IG1pbl9wdV93aWR0aCAgICAgID0gZmMtPnBzLnBwcy0+bWluX3B1X3dpZHRoOworICAgIGNv bnN0IGludCBsb2cyX21pbl9wdV9zaXplICA9IE1JTl9QVV9MT0cyOworICAgIHVpbnQ4X3QgbWF4 X2xlbl9wLCBtYXhfbGVuX3E7CisgICAgaW50IGJzLCBpLCBqOworCisgICAgLy8gYnMgZm9yIFRV IGludGVybmFsIHZlcnRpY2FsIFBVIGJvdW5kYXJpZXMKKyAgICBmb3IgKGogPSAwOyBqIDwgaGVp Z2h0OyBqICs9IDQpIHsKKyAgICAgICAgaW50IHlfcHUgPSAoeTAgKyBqKSA+PiBsb2cyX21pbl9w dV9zaXplOworCisgICAgICAgIGZvciAoaSA9IDggLSAoKHgwIC0gY2JfeCkgJSA4KTsgaSA8IHdp ZHRoOyBpICs9IDgpIHsKKyAgICAgICAgICAgIGludCB4cF9wdSA9ICh4MCArIGkgLSAxKSA+PiBs b2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgaW50IHhxX3B1ID0gKHgwICsgaSkgICAgID4+ IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxkICpsZWZ0ID0gJnRhYl9tdmZb eV9wdSAqIG1pbl9wdV93aWR0aCArIHhwX3B1XTsKKyAgICAgICAgICAgIE12RmllbGQgKmN1cnIg PSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dpZHRoICsgeHFfcHVdOworICAgICAgICAgICAgY29u c3QgaW50IHggPSB4MCArIGk7CisgICAgICAgICAgICBjb25zdCBpbnQgeSA9IHkwICsgajsKKwor ICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChsYywgY3VyciwgbGVmdCwgcnBsKTsK KyAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFiLnZlcnRpY2FsX2JzW0xVTUFdLCB4LCB5KSA9IGJz OworCisKKyAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDA7CisgICAgICAgICAg ICBpZiAoaSA9PSA0IHx8IGkgPT0gd2lkdGggLSA0KQorICAgICAgICAgICAgICAgIG1heF9sZW5f cCA9IG1heF9sZW5fcSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChpID09IDggfHwgaSA9PSB3 aWR0aCAtIDgpCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMjsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAz OworCisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3AsIHgsIHkpID0g bWF4X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0aWNhbF9xLCB4 LCB5KSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZGVi 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 eF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KKworfQorCitzdGF0aWMgdm9pZCBkZWJsb2NrX2Jz X2x1bWFfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQg eDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQorewor ICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIE12RmllbGQgKnRh Yl9tdmYgICAgICAgICAgID0gZmMtPnRhYi5tdmY7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1 X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fdHVfc2l6ZSA9IE1J Tl9UVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgID0gZmMtPnBzLnBwcy0+ bWluX3B1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggICAgID0gZmMtPnBzLnBw cy0+bWluX3R1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMiAgICAgID0gZmMtPnBz LnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAg ID0gZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGludCBpc19pbnRyYSA9IHRhYl9tdmZb KHkwID4+IGxvZzJfbWluX3B1X3NpemUpICogbWluX3B1X3dpZHRoICsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICh4MCA+PiBsb2cyX21pbl9wdV9zaXplKV0ucHJlZF9mbGFnID09IFBGX0lO VFJBOworICAgIGludCBib3VuZGFyeV9sZWZ0OworICAgIGludCBoYXNfdmVydGljYWxfc2IgPSAw OworICAgIHVpbnQ4X3QgbWF4X2xlbl9wLCBtYXhfbGVuX3E7CisKKyAgICBjb25zdCBpbnQgb2Zm X3EgICAgICAgICAgICA9ICh5MCA+PiBtaW5fY2JfbG9nMikgKiBtaW5fY2Jfd2lkdGggKyAoeDAg Pj4gbWluX2NiX2xvZzIpOworICAgIGNvbnN0IGludCBjYl94ICAgICAgICAgICAgID0gZmMtPnRh Yi5jYl9wb3NfeFtMVU1BXVtvZmZfcV07CisgICAgY29uc3QgaW50IGNiX3kgICAgICAgICAgICAg PSBmYy0+dGFiLmNiX3Bvc195W0xVTUFdW29mZl9xXTsKKyAgICBjb25zdCBpbnQgY2Jfd2lkdGgg ICAgICAgICA9IGZjLT50YWIuY2Jfd2lkdGhbTFVNQV1bb2ZmX3FdOworCisgICAgaWYgKCFpc19p bnRyYSkgeworICAgICAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50YWIuaWFmW29m Zl9xXSkKKyAgICAgICAgICAgIGhhc192ZXJ0aWNhbF9zYiAgID0gY2Jfd2lkdGggID4gODsKKyAg ICB9CisKKyAgICAvLyBicyBmb3IgdmVydGljYWwgVFUgYm91bmRhcmllcworICAgIGJvdW5kYXJ5 X2xlZnQgPSB4MCA+IDAgJiYgISh4MCAmIDMpOworICAgIGlmIChib3VuZGFyeV9sZWZ0ICYmCisg ICAgICAgICgoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2Vu YWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllf TEVGVF9TTElDRSAmJgorICAgICAgICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xv ZzJfc2l6ZV95KSkgPT0gMCkgfHwKKyAgICAgICAgICAgICghZmMtPnBzLnBwcy0+ci0+cHBzX2xv b3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5i b3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfVElMRSAmJgorICAgICAgICAgICAgKHgwICUg KDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkpKQorICAgICAgICBib3Vu ZGFyeV9sZWZ0ID0gMDsKKworICAgIGlmIChib3VuZGFyeV9sZWZ0KSB7CisgICAgICAgIGNvbnN0 IFJlZlBpY0xpc3QgKnJwbF9sZWZ0ID0KKyAgICAgICAgICAgIChsYy0+Ym91bmRhcnlfZmxhZ3Mg JiBCT1VOREFSWV9MRUZUX1NMSUNFKSA/IGZmX3Z2Y19nZXRfcmVmX2xpc3QoZmMsIGZjLT5yZWYs IHgwIC0gMSwgeTApIDogbGMtPnNjLT5ycGw7CisgICAgICAgIGludCB4cF9wdSA9ICh4MCAtIDEp ID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB4cV9wdSA9ICB4MCAgICAgID4+IGxv ZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB4cF90dSA9ICh4MCAtIDEpID4+IGxvZzJfbWlu X3R1X3NpemU7CisgICAgICAgIGludCB4cV90dSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3R1X3Np emU7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkgKz0gNCkgeworICAg ICAgICAgICAgaW50IGJzOworICAgICAgICAgICAgY29uc3QgaW50IG9mZl94ID0gY2JfeCAtIHgw OworICAgICAgICAgICAgaW50IHlfcHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3B1X3Np emU7CisgICAgICAgICAgICBpbnQgeV90dSAgICAgID0gKHkwICsgaSkgPj4gbG9nMl9taW5fdHVf c2l6ZTsKKyAgICAgICAgICAgIE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1 X3dpZHRoICsgeHBfcHVdOworICAgICAgICAgICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lf cHUgKiBtaW5fcHVfd2lkdGggKyB4cV9wdV07CisgICAgICAgICAgICB1aW50OF90IGxlZnRfY2Jm X2x1bWEgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVNQV1beV90dSAqIG1pbl90dV93aWR0aCAr IHhwX3R1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3Vycl9jYmZfbHVtYSA9IGZjLT50YWIudHVf Y29kZWRfZmxhZ1tMVU1BXVt5X3R1ICogbWluX3R1X3dpZHRoICsgeHFfdHVdOworICAgICAgICAg ICAgdWludDhfdCBwY21mICAgICAgICAgID0gZmMtPnRhYi5wY21mW0xVTUFdW3lfdHUgKiBtaW5f dHVfd2lkdGggKyB4cF90dV0gJiYKKyAgICAgICAgICAgICAgICBmYy0+dGFiLnBjbWZbTFVNQV1b eV90dSAqIG1pbl90dV93aWR0aCArIHhxX3R1XTsKKworICAgICAgICAgICAgaWYgKHBjbWYpCisg ICAgICAgICAgICAgICAgYnMgPSAwOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+cHJlZF9m bGFnID09IFBGX0lOVFJBIHx8IGxlZnQtPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJyLT5j aWlwX2ZsYWcgfHwgbGVmdC0+Y2lpcF9mbGFnKQorICAgICAgICAgICAgICAgIGJzID0gMjsKKyAg ICAgICAgICAgIGVsc2UgaWYgKGN1cnJfY2JmX2x1bWEgfHwgbGVmdF9jYmZfbHVtYSkKKyAgICAg ICAgICAgICAgICBicyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZfeCAmJiAoKG9mZl94 ICUgOCkgfHwgIWhhc192ZXJ0aWNhbF9zYikpCisgICAgICAgICAgICAgICAgYnMgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vaW5zaWRlIGEgY3UsIG5vdCBhbGln bmVkIHRvIDggb3Igd2l0aCBubyBzdWJibG9ja3MKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICBicyA9IGJvdW5kYXJ5X3N0cmVuZ3RoKGxjLCBjdXJyLCBsZWZ0LCBycGxfbGVmdCk7 CisKKyAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFiLnZlcnRpY2FsX2JzW0xVTUFdLCB4MCwgKHkw ICsgaSkpID0gYnM7CisKKyAgICAgICAgICAgIGRlcml2ZV9tYXhfZmlsdGVyX2xlbmd0aF9sdW1h KGZjLCB4MCwgeTAgKyBpLCBpc19pbnRyYSwgaGFzX3ZlcnRpY2FsX3NiLCAxLCAmbWF4X2xlbl9w LCAmbWF4X2xlbl9xKTsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxf cCwgeDAsIHkwICsgaSkgPSBtYXhfbGVuX3A7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+ dGFiLnZlcnRpY2FsX3EsIHgwLCB5MCArIGkpID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAg fQorCisgICAgaWYgKCFpc19pbnRyYSkgeworICAgICAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3Fd IHx8IGZjLT50YWIuaWFmW29mZl9xXSkKKyAgICAgICAgICAgIGRlYmxvY2tfc3ViYmxvY2tfYnNf dmVydGljYWwobGMsIGNiX3gsIGNiX3ksIHgwLCB5MCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQor Cit9CitzdGF0aWMgdm9pZCBkZWJsb2NrX2JzX2x1bWFfaG9yaXpvbnRhbChjb25zdCBWVkNMb2Nh bENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQg d2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpm YyAgPSBsYy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgPSBmYy0+dGFiLm12 ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNv bnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IG1p bl9wdV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50 IG1pbl90dV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgY29uc3Qg aW50IG1pbl9jYl9sb2cyICAgICAgPSBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7Cisg ICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGg7 CisgICAgaW50IGlzX2ludHJhID0gdGFiX212ZlsoeTAgPj4gbG9nMl9taW5fcHVfc2l6ZSkgKiBt aW5fcHVfd2lkdGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHgwID4+IGxvZzJfbWlu X3B1X3NpemUpXS5wcmVkX2ZsYWcgPT0gUEZfSU5UUkE7CisgICAgaW50IGJvdW5kYXJ5X3VwcGVy OworICAgIGludCBoYXNfaG9yaXpvbnRhbF9zYiA9IDA7CisgICAgdWludDhfdCBtYXhfbGVuX3As IG1heF9sZW5fcTsKKworICAgIGNvbnN0IGludCBvZmZfcSAgICAgICAgICAgID0gKHkwID4+IG1p bl9jYl9sb2cyKSAqIG1pbl9jYl93aWR0aCArICh4MCA+PiBtaW5fY2JfbG9nMik7CisgICAgY29u c3QgaW50IGNiX3ggICAgICAgICAgICAgPSBmYy0+dGFiLmNiX3Bvc194W0xVTUFdW29mZl9xXTsK KyAgICBjb25zdCBpbnQgY2JfeSAgICAgICAgICAgICA9IGZjLT50YWIuY2JfcG9zX3lbTFVNQV1b b2ZmX3FdOworICAgIGNvbnN0IGludCBjYl9oZWlnaHQgICAgICAgID0gZmMtPnRhYi5jYl9oZWln aHRbTFVNQV1bb2ZmX3FdOworCisgICAgaWYgKCFpc19pbnRyYSkgeworICAgICAgICBpZiAoZmMt PnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50YWIuaWFmW29mZl9xXSkKKyAgICAgICAgICAgIGhhc19o b3Jpem9udGFsX3NiID0gY2JfaGVpZ2h0ID4gODsKKyAgICB9CisKKyAgICBib3VuZGFyeV91cHBl ciA9IHkwID4gMCAmJiAhKHkwICYgMyk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyICYmCisgICAg ICAgICgoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJs ZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQ RVJfU0xJQ0UgJiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cy X3NpemVfeSkpID09IDApIHx8CisgICAgICAgICAgICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29w X2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICBsYy0+Ym91 bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxFICYmCisgICAgICAgICAgICAoeTAgJSAo MSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSkpCisgICAgICAgIGJvdW5k YXJ5X3VwcGVyID0gMDsKKworICAgIGlmIChib3VuZGFyeV91cHBlcikgeworICAgICAgICBjb25z dCBSZWZQaWNMaXN0ICpycGxfdG9wID0KKyAgICAgICAgICAgIChsYy0+Ym91bmRhcnlfZmxhZ3Mg JiBCT1VOREFSWV9VUFBFUl9TTElDRSkgPyBmZl92dmNfZ2V0X3JlZl9saXN0KGZjLCBmYy0+cmVm LCB4MCwgeTAgLSAxKSA6IGxjLT5zYy0+cnBsOworICAgICAgICBpbnQgeXBfcHUgPSAoeTAgLSAx KSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXFfcHUgPSAgeTAgICAgICA+PiBs b2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXBfdHUgPSAoeTAgLSAxKSA+PiBsb2cyX21p bl90dV9zaXplOworICAgICAgICBpbnQgeXFfdHUgPSAgeTAgICAgICA+PiBsb2cyX21pbl90dV9z aXplOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkgKz0gNCkgeworICAg ICAgICAgICAgaW50IGJzOworICAgICAgICAgICAgY29uc3QgaW50IG9mZl95ID0geTAgLSBjYl95 OworICAgICAgICAgICAgaW50IHhfcHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOwor ICAgICAgICAgICAgaW50IHhfdHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAg ICAgICAgICAgTXZGaWVsZCAqdG9wICA9ICZ0YWJfbXZmW3lwX3B1ICogbWluX3B1X3dpZHRoICsg eF9wdV07CisgICAgICAgICAgICBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5f cHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgdG9wX2NiZl9sdW1hICA9IGZj LT50YWIudHVfY29kZWRfZmxhZ1tMVU1BXVt5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdOwor ICAgICAgICAgICAgdWludDhfdCBjdXJyX2NiZl9sdW1hID0gZmMtPnRhYi50dV9jb2RlZF9mbGFn W0xVTUFdW3lxX3R1ICogbWluX3R1X3dpZHRoICsgeF90dV07CisgICAgICAgICAgICBjb25zdCB1 aW50OF90IHBjbWYgICAgPSBmYy0+dGFiLnBjbWZbTFVNQV1beXBfdHUgKiBtaW5fdHVfd2lkdGgg KyB4X3R1XSAmJgorICAgICAgICAgICAgICAgIGZjLT50YWIucGNtZltMVU1BXVt5cV90dSAqIG1p bl90dV93aWR0aCArIHhfdHVdOworCisgICAgICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAg ICAgICBicyA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZf SU5UUkEgfHwgdG9wLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8 IHRvcC0+Y2lpcF9mbGFnKQorICAgICAgICAgICAgICAgIGJzID0gMjsKKyAgICAgICAgICAgIGVs c2UgaWYgKGN1cnJfY2JmX2x1bWEgfHwgdG9wX2NiZl9sdW1hKQorICAgICAgICAgICAgICAgIGJz ID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZl95ICYmICgob2ZmX3kgJSA4KSB8fCAhaGFz X2hvcml6b250YWxfc2IpKQorICAgICAgICAgICAgICAgIGJzID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy9pbnNpZGUgYSBjdSwgbm90IGFsaWduZWQgdG8gOCBvciB3 aXRoIG5vIHN1YmJsb2NrcworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJzID0g Ym91bmRhcnlfc3RyZW5ndGgobGMsIGN1cnIsIHRvcCwgcnBsX3RvcCk7CisKKyAgICAgICAgICAg IFRBQl9CUyhmYy0+dGFiLmhvcml6b250YWxfYnNbTFVNQV0sIHgwICsgaSwgeTApID0gYnM7CisK KyAgICAgICAgICAgIGRlcml2ZV9tYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCB4MCArIGksIHkw LCBpc19pbnRyYSwgaGFzX2hvcml6b250YWxfc2IsIDAsICZtYXhfbGVuX3AsICZtYXhfbGVuX3Ep OworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9udGFsX3AsIHgwICsgaSwg eTApID0gbWF4X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9u dGFsX3EsIHgwICsgaSwgeTApID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAgfQorCisgICAg aWYgKCFpc19pbnRyYSkgeworICAgICAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50 YWIuaWFmW29mZl9xXSkKKyAgICAgICAgICAgIGRlYmxvY2tfc3ViYmxvY2tfYnNfaG9yaXpvbnRh bChsYywgY2JfeCwgY2JfeSwgeDAsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkIGRlYmxvY2tfYnNfY2hyb21hX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4 dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwg Y29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICA9IGxj LT5mYzsKKyAgICBNdkZpZWxkICp0YWJfbXZmICAgICAgICAgICA9IGZjLT50YWIubXZmOworICAg IGNvbnN0IGludCBsb2cyX21pbl9wdV9zaXplID0gTUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50 IGxvZzJfbWluX3R1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dp ZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1 X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICBpbnQgYm91bmRhcnlf bGVmdCwgaTsKKworICAgIC8vIGJzIGZvciB2ZXJ0aWNhbCBUVSBib3VuZGFyaWVzCisgICAgYm91 bmRhcnlfbGVmdCA9IHgwID4gMCAmJiAhKHgwICYgKChDSFJPTUFfR1JJRCA8PCBmYy0+cHMuc3Bz LT5oc2hpZnRbMV0pIC0gMSkpOworICAgIGlmIChib3VuZGFyeV9sZWZ0ICYmCisgICAgICAgICgo IWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxh ZyAmJgorICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJQ0Ug JiYKKyAgICAgICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9 PSAwKSB8fAorICAgICAgICAgKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3Nz X3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJP VU5EQVJZX0xFRlRfVElMRSAmJgorICAgICAgICAgICh4MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0 Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRhcnlfbGVmdCA9IDA7CisKKyAg ICBpZiAoYm91bmRhcnlfbGVmdCkgeworICAgICAgICBpbnQgeHBfcHUgPSAoeDAgLSAxKSA+PiBs b2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeHFfcHUgPSAgeDAgICAgICA+PiBsb2cyX21p bl9wdV9zaXplOworICAgICAgICBpbnQgeHBfdHUgPSAoeDAgLSAxKSA+PiBsb2cyX21pbl90dV9z aXplOworICAgICAgICBpbnQgeHFfdHUgPSAgeDAgICAgICA+PiBsb2cyX21pbl90dV9zaXplOwor CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkgKz0gMikgeworICAgICAgICAgICAg aW50IHlfcHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAg ICBpbnQgeV90dSAgICAgID0gKHkwICsgaSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAg ICAgIE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dpZHRoICsgeHBfcHVd OworICAgICAgICAgICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lk dGggKyB4cV9wdV07CisgICAgICAgICAgICBjb25zdCBpbnQgbGVmdF90dSA9IHlfdHUgKiBtaW5f dHVfd2lkdGggKyB4cF90dTsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdXJyX3R1ID0geV90dSAq IG1pbl90dV93aWR0aCArIHhxX3R1OworICAgICAgICAgICAgY29uc3QgdWludDhfdCBwY21mID0g ZmMtPnRhYi5wY21mW0NIUk9NQV1bbGVmdF90dV0gJiYgZmMtPnRhYi5wY21mW0NIUk9NQV1bY3Vy cl90dV07CisKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSBDQjsgYyA8PSBDUjsgYysrKSB7Cisg ICAgICAgICAgICAgICAgdWludDhfdCBjYmYgID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW2xl ZnRfdHVdIHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW2N1 cnJfdHVdIHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lk dWFsX2ZsYWdbbGVmdF90dV0gfAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50 X2NiY3JfcmVzaWR1YWxfZmxhZ1tjdXJyX3R1XTsKKyAgICAgICAgICAgICAgICBpbnQgYnMgPSAw OworCisgICAgICAgICAgICAgICAgaWYgKHBjbWYpCisgICAgICAgICAgICAgICAgICAgIGJzID0g MDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEg fHwgbGVmdC0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCBsZWZ0 LT5jaWlwX2ZsYWcpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMjsKKyAgICAgICAgICAgICAg ICBlbHNlIGlmIChjYmYpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMTsKKyAgICAgICAgICAg ICAgICBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tjXSwgeDAsICh5MCArIGkpKSA9IGJzOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkZWJsb2Nr X2JzX2Nocm9tYV9ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29u c3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdo dCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIE12Rmll bGQgKnRhYl9tdmYgPSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6 ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1BV X0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93aWR0aCA9IGZjLT5wcy5wcHMtPm1pbl9wdV93 aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoID0gZmMtPnBzLnBwcy0+bWluX3R1X3dp ZHRoOworICAgIGludCBib3VuZGFyeV91cHBlcjsKKworICAgIGJvdW5kYXJ5X3VwcGVyID0geTAg PiAwICYmICEoeTAgJiAoKENIUk9NQV9HUklEIDw8IGZjLT5wcy5zcHMtPnZzaGlmdFsxXSkgLSAx KSk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyICYmCisgICAgICAgICgoIWZjLT5wcy5wcHMtPnIt PnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAg ICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UgJiYKKyAgICAgICAg ICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApIHx8Cisg ICAgICAgICAgICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNf ZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9V TkRBUllfVVBQRVJfVElMRSAmJgorICAgICAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5z cHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRhcnlfdXBwZXIgPSAw OworCisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyKSB7CisgICAgICAgIGludCB5cF9wdSA9ICh5MCAt IDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB5cV9wdSA9IHkwID4+IGxvZzJf bWluX3B1X3NpemU7CisgICAgICAgIGludCB5cF90dSA9ICh5MCAtIDEpID4+IGxvZzJfbWluX3R1 X3NpemU7CisgICAgICAgIGludCB5cV90dSA9IHkwID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArPSAyKSB7CisgICAgICAgICAgICBp bnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBpbnQg eF90dSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxk ICp0b3AgPSAmdGFiX212Zlt5cF9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVdOworICAgICAgICAg ICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lxX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07 CisgICAgICAgICAgICBjb25zdCBpbnQgdG9wX3R1ID0geXBfdHUgKiBtaW5fdHVfd2lkdGggKyB4 X3R1OworICAgICAgICAgICAgY29uc3QgaW50IGN1cnJfdHUgPSB5cV90dSAqIG1pbl90dV93aWR0 aCArIHhfdHU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgPSBmYy0+dGFiLnBjbWZb Q0hST01BXVt0b3BfdHVdICYmIGZjLT50YWIucGNtZltDSFJPTUFdW2N1cnJfdHVdOworCisgICAg ICAgICAgICBmb3IgKGludCBjID0gQ0I7IGMgPD0gQ1I7IGMrKykgeworICAgICAgICAgICAgICAg IHVpbnQ4X3QgY2JmID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW3RvcF90dV0gfAorICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bY3Vycl90dV0gfAorICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1t0b3BfdHVd IHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lkdWFsX2Zs YWdbY3Vycl90dV07CisgICAgICAgICAgICAgICAgaW50IGJzID0gMDsKKworICAgICAgICAgICAg ICAgIGlmIChwY21mKQorICAgICAgICAgICAgICAgICAgICBicyA9IDA7CisgICAgICAgICAgICAg ICAgZWxzZSBpZiAoY3Vyci0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IHRvcC0+cHJlZF9mbGFn ID09IFBGX0lOVFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCB0b3AtPmNpaXBfZmxhZykKKyAgICAg ICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNiZikKKyAg ICAgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFi Lmhvcml6b250YWxfYnNbY10sIHgwICsgaSwgeTApID0gYnM7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9Cit9CisKK3R5cGVkZWYgdm9pZCAoKmRlYmxvY2tfYnNfZm4pKGNvbnN0IFZW Q0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLAorICAgIGNvbnN0 IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCk7CisKK3N0YXRpYyB2b2lkIGRlYmxvY2tfYnMo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNv bnN0IGludCB2ZXJ0aWNhbCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMt PmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IFZW Q1BQUyAqcHBzICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCBjdGJfc2l6ZSAgPSBzcHMt PmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHhfZW5kICAgICA9IEZGTUlOKHgwICsgY3RiX3Np emUsIHBwcy0+d2lkdGgpID4+IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCB5X2VuZCAgICAg PSBGRk1JTih5MCArIGN0Yl9zaXplLCBwcHMtPmhlaWdodCkgPj4gTUlOX1RVX0xPRzI7CisgICAg ZGVibG9ja19ic19mbiBkZWJsb2NrX2JzWzJdWzJdID0geworICAgICAgICB7IGRlYmxvY2tfYnNf bHVtYV9ob3Jpem9udGFsLCBkZWJsb2NrX2JzX2Nocm9tYV9ob3Jpem9udGFsIH0sCisgICAgICAg IHsgZGVibG9ja19ic19sdW1hX3ZlcnRpY2FsLCAgIGRlYmxvY2tfYnNfY2hyb21hX3ZlcnRpY2Fs ICAgfQorICAgIH07CisKKyAgICBmb3IgKGludCBpc19jaHJvbWEgPSAwOyBpc19jaHJvbWEgPD0g MTsgaXNfY2hyb21hKyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbaXNf Y2hyb21hXTsKKyAgICAgICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbaXNfY2hyb21hXTsK KyAgICAgICAgZm9yIChpbnQgeSA9IHkwID4+IE1JTl9UVV9MT0cyOyB5IDwgeV9lbmQ7IHkrKykg eworICAgICAgICAgICAgZm9yIChpbnQgeCA9IHgwID4+IE1JTl9UVV9MT0cyOyB4IDwgeF9lbmQ7 IHgrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBvZmYgPSB5ICogZmMtPnBzLnBwcy0+ bWluX3R1X3dpZHRoICsgeDsKKyAgICAgICAgICAgICAgICBpZiAoKGZjLT50YWIudGJfcG9zX3gw W2lzX2Nocm9tYV1bb2ZmXSA+PiBNSU5fVFVfTE9HMikgPT0geCAmJiAoZmMtPnRhYi50Yl9wb3Nf eTBbaXNfY2hyb21hXVtvZmZdID4+IE1JTl9UVV9MT0cyKSA9PSB5KSB7CisgICAgICAgICAgICAg ICAgICAgIGRlYmxvY2tfYnNbdmVydGljYWxdW2lzX2Nocm9tYV0obGMsIHggPDwgTUlOX1RVX0xP RzIsIHkgPDwgTUlOX1RVX0xPRzIsCisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnRi X3dpZHRoW2lzX2Nocm9tYV1bb2ZmXSA8PCBocywgZmMtPnRhYi50Yl9oZWlnaHRbaXNfY2hyb21h XVtvZmZdIDw8IHZzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9Cit9CisKKy8vcGFydCBvZiA4LjguMy4zIERlcml2YXRpb24gcHJvY2VzcyBvZiB0 cmFuc2Zvcm0gYmxvY2sgYm91bmRhcnkKK3N0YXRpYyB2b2lkIG1heF9maWx0ZXJfbGVuZ3RoX2x1 bWEoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHF4LCBjb25zdCBpbnQgcXks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB2ZXJ0aWNhbCwg dWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgdWlu dDhfdCAqdGFiX2xlbl9wID0gdmVydGljYWwgPyBmYy0+dGFiLnZlcnRpY2FsX3AgOiBmYy0+dGFi Lmhvcml6b250YWxfcDsKKyAgICBjb25zdCB1aW50OF90ICp0YWJfbGVuX3EgPSB2ZXJ0aWNhbCA/ IGZjLT50YWIudmVydGljYWxfcSA6IGZjLT50YWIuaG9yaXpvbnRhbF9xOworICAgICptYXhfbGVu X3AgPSBUQUJfTUFYX0xFTih0YWJfbGVuX3AsIHF4LCBxeSk7CisgICAgKm1heF9sZW5fcSA9IFRB Ql9NQVhfTEVOKHRhYl9sZW5fcSwgcXgsIHF5KTsKK30KKworLy9wYXJ0IG9mIDguOC4zLjMgRGVy aXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5zZm9ybSBibG9jayBib3VuZGFyeQorc3RhdGljIHZvaWQg bWF4X2ZpbHRlcl9sZW5ndGhfY2hyb21hKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0 IGludCBxeCwgY29uc3QgaW50IHF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGludCB2ZXJ0aWNhbCwgY29uc3QgaW50IGhvcml6b250YWxfY3R1X2VkZ2UsIGNv bnN0IGludCBicywgdWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7Cisg ICAgY29uc3QgaW50IHB4ID0gIHZlcnRpY2FsID8gcXggLSAxIDogcXg7CisgICAgY29uc3QgaW50 IHB5ID0gIXZlcnRpY2FsID8gcXkgLSAxIDogcXk7CisgICAgY29uc3QgdWludDhfdCAqdGJfc2l6 ZSA9IHZlcnRpY2FsID8gZmMtPnRhYi50Yl93aWR0aFtDSFJPTUFdIDogZmMtPnRhYi50Yl9oZWln aHRbQ0hST01BXTsKKworICAgIGNvbnN0IGludCBzaXplX3AgPSB0Yl9zaXplWyhweSA+PiBNSU5f VFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAocHggPj4gTUlOX1RVX0xPRzIp XTsKKyAgICBjb25zdCBpbnQgc2l6ZV9xID0gdGJfc2l6ZVsocXkgPj4gTUlOX1RVX0xPRzIpICog ZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgKHF4ID4+IE1JTl9UVV9MT0cyKV07CisgICAgaWYg KHNpemVfcCA+PSA4ICYmIHNpemVfcSA+PSA4KSB7CisgICAgICAgICptYXhfbGVuX3AgPSAqbWF4 X2xlbl9xID0gMzsKKyAgICAgICAgaWYgKGhvcml6b250YWxfY3R1X2VkZ2UpCisgICAgICAgICAg ICAqbWF4X2xlbl9wID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAvL3BhcnQgb2YgOC44LjMu Ni40IERlY2lzaW9uIHByb2Nlc3MgZm9yIGNocm9tYSBibG9jayBlZGdlcworICAgICAgICAqbWF4 X2xlbl9wID0gKm1heF9sZW5fcSA9IChicyA9PSAyKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IG1heF9maWx0ZXJfbGVuZ3RoKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBx eCwgY29uc3QgaW50IHF5LAorICAgIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IHZlcnRpY2Fs LCBjb25zdCBpbnQgaG9yaXpvbnRhbF9jdHVfZWRnZSwgY29uc3QgaW50IGJzLCB1aW50OF90ICpt YXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBpZiAoIWNfaWR4KQorICAgICAg ICBtYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCBxeCwgcXksIHZlcnRpY2FsLCBtYXhfbGVuX3As IG1heF9sZW5fcSk7CisgICAgZWxzZQorICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aF9jaHJvbWEo ZmMsIHF4LCBxeSwgdmVydGljYWwsIGhvcml6b250YWxfY3R1X2VkZ2UsIGJzLCBtYXhfbGVuX3As IG1heF9sZW5fcSk7Cit9CisKKyNkZWZpbmUgVENfQ0FMQyhxcCwgYnMpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Y3RhYmxlW2F2X2NsaXAo KHFwKSArIERFRkFVTFRfSU5UUkFfVENfT0ZGU0VUICogKChicykgLSAxKSArICAgICAgIFwKKyAg ICAgICAgICAgICAgICAgICAgKHRjX29mZnNldCAmIC0yKSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgMCwgTUFYX1FQICsgREVGQVVMVF9J TlRSQV9UQ19PRkZTRVQpXQorCisvLyBwYXJ0IG9mIDguOC4zLjYuMiBEZWNpc2lvbiBwcm9jZXNz IGZvciBsdW1hIGJsb2NrIGVkZ2VzCitzdGF0aWMgaW50IGdldF9xcF95KGNvbnN0IFZWQ0ZyYW1l Q29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5 LCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5w cy5zcHM7CisgICAgY29uc3QgaW50IHFwICAgICAgICA9IChmZl92dmNfZ2V0X3FQeShmYywgeCAt IHZlcnRpY2FsLCB5IC0gIXZlcnRpY2FsKSArIGZmX3Z2Y19nZXRfcVB5KGZjLCB4LCB5KSArIDEp ID4+IDE7CisgICAgaW50IHFwX29mZnNldCAgICAgICA9IDA7CisgICAgaW50IGxldmVsOworCisg ICAgaWYgKCFzcHMtPnItPnNwc19sYWRmX2VuYWJsZWRfZmxhZykKKyAgICAgICAgcmV0dXJuIHFw OworCisgICAgbGV2ZWwgPSBmYy0+dnZjZHNwLmxmLmxhZGZfbGV2ZWxbdmVydGljYWxdKHNyYywg ZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSk7CisgICAgcXBfb2Zmc2V0ID0gc3BzLT5yLT5zcHNf bGFkZl9sb3dlc3RfaW50ZXJ2YWxfcXBfb2Zmc2V0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg c3BzLT5udW1fbGFkZl9pbnRlcnZhbHMgLSAxICYmIGxldmVsID4gc3BzLT5sYWRmX2ludGVydmFs X2xvd2VyX2JvdW5kW2kgKyAxXTsgaSsrKQorICAgICAgICBxcF9vZmZzZXQgPSBzcHMtPnItPnNw c19sYWRmX3FwX29mZnNldFtpXTsKKworICAgIHJldHVybiBxcCArIHFwX29mZnNldDsKK30KKwor Ly8gcGFydCBvZiA4LjguMy42LjIgRGVjaXNpb24gcHJvY2VzcyBmb3IgbHVtYSBibG9jayBlZGdl cworc3RhdGljIGludCBnZXRfcXBfYyhjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBp bnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IHZlcnRpY2FsKQor eworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIHJldHVybiAoZ2V0 X3FQYyhmYywgeCAtIHZlcnRpY2FsLCB5IC0gIXZlcnRpY2FsLCBjX2lkeCkgKyBnZXRfcVBjKGZj LCB4LCB5LCBjX2lkeCkgLSAyICogc3BzLT5xcF9iZF9vZmZzZXQgKyAxKSA+PiAxOworfQorCitz dGF0aWMgaW50IGdldF9xcChjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCB1aW50OF90 ICpzcmMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IGNfaWR4LCBjb25zdCBp bnQgdmVydGljYWwpCit7CisgICAgaWYgKCFjX2lkeCkKKyAgICAgICAgcmV0dXJuIGdldF9xcF95 KGZjLCBzcmMsIHgsIHksIHZlcnRpY2FsKTsKKyAgICByZXR1cm4gZ2V0X3FwX2MoZmMsIHgsIHks IGNfaWR4LCB2ZXJ0aWNhbCk7Cit9CisKK3ZvaWQgZmZfdnZjX2RlYmxvY2tfdmVydGljYWwoY29u c3QgVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVD b250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNw czsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgID0gc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9p ZGMgPyBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgOiAxOworICAgIHVpbnQ4X3QgKnNyYzsKKyAgICBp bnQgeCwgeSwgcXA7CisKKyAgICAvL25vdCB1c2UgdGhpcyB5ZXQsIG1heSBuZWVkZWQgYnkgcGx0 LgorICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcFs0XSA9IHsgMCB9OworICAgIGNvbnN0IHVpbnQ4X3Qg bm9fcVs0XSA9IHsgMCB9IDsKKworICAgIGludCBjdGJfbG9nMl9zaXplX3kgPSBmYy0+cHMuc3Bz LT5jdGJfbG9nMl9zaXplX3k7CisgICAgaW50IHhfZW5kLCB5X2VuZDsKKyAgICBpbnQgY3RiX3Np emUgPSAxIDw8IGN0Yl9sb2cyX3NpemVfeTsKKyAgICBpbnQgY3RiID0gKHgwID4+IGN0Yl9sb2cy X3NpemVfeSkgKworICAgICAgICAoeTAgPj4gY3RiX2xvZzJfc2l6ZV95KSAqIGZjLT5wcy5wcHMt PmN0Yl93aWR0aDsKKyAgICBEQlBhcmFtcyAgKnBhcmFtcyA9IGZjLT50YWIuZGVibG9jayArIGN0 YjsKKworICAgIGRlYmxvY2tfYnMobGMsIHgwLCB5MCwgMSk7CisKKyAgICB4X2VuZCA9IHgwICsg Y3RiX3NpemU7CisgICAgaWYgKHhfZW5kID4gZmMtPnBzLnNwcy0+d2lkdGgpCisgICAgICAgIHhf ZW5kID0gZmMtPnBzLnNwcy0+d2lkdGg7CisgICAgeV9lbmQgPSB5MCArIGN0Yl9zaXplOworICAg IGlmICh5X2VuZCA+IGZjLT5wcy5zcHMtPmhlaWdodCkKKyAgICAgICAgeV9lbmQgPSBmYy0+cHMu c3BzLT5oZWlnaHQ7CisKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNf aWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzICAgICAgICAgICAgPSBzcHMtPmhzaGlmdFtj X2lkeF07CisgICAgICAgIGNvbnN0IGludCB2cyAgICAgICAgICAgID0gc3BzLT52c2hpZnRbY19p ZHhdOworICAgICAgICBjb25zdCBpbnQgZ3JpZCAgICAgICAgICA9IGNfaWR4ID8gKENIUk9NQV9H UklEIDw8IGhzKSA6IExVTUFfR1JJRDsKKyAgICAgICAgY29uc3QgaW50IHRjX29mZnNldCAgICAg PSBwYXJhbXMtPnRjX29mZnNldFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBiZXRhX29mZnNl dCAgID0gcGFyYW1zLT5iZXRhX29mZnNldFtjX2lkeF07CisKKyAgICAgICAgZm9yICh5ID0geTA7 IHkgPCB5X2VuZDsgeSArPSAoREVCTE9DS19TVEVQIDw8IHZzKSkgeworICAgICAgICAgICAgZm9y ICh4ID0geDAgPyB4MCA6IGdyaWQ7IHggPCB4X2VuZDsgeCArPSBncmlkKSB7CisgICAgICAgICAg ICAgICAgaW50MzJfdCBic1s0XSwgYmV0YVs0XSwgdGNbNF0sIGFsbF96ZXJvX2JzID0gMTsKKyAg ICAgICAgICAgICAgICB1aW50OF90IG1heF9sZW5fcFs0XSwgbWF4X2xlbl9xWzRdOworCisgICAg ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBERUJMT0NLX1NURVAgPj4gKDIgLSB2cyk7 IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHkgPSBpIDw8IDI7CisgICAg ICAgICAgICAgICAgICAgIGJzW2ldID0gKHkgKyBkeSA8IHlfZW5kKSA/IFRBQl9CUyhmYy0+dGFi LnZlcnRpY2FsX2JzW2NfaWR4XSwgeCwgeSArIGR5KSA6IDA7CisgICAgICAgICAgICAgICAgICAg IGlmIChic1tpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ ZGF0YVtjX2lkeF1bKCh5ICsgZHkpID4+IHZzKSAqIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhd ICsgKCh4ID4+IGhzKSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOworICAgICAgICAgICAg ICAgICAgICAgICAgcXAgPSBnZXRfcXAoZmMsIHNyYywgeCwgeSArIGR5LCBjX2lkeCwgMSk7CisK KyAgICAgICAgICAgICAgICAgICAgICAgIGJldGFbaV0gPSBiZXRhdGFibGVbYXZfY2xpcChxcCAr IGJldGFfb2Zmc2V0LCAwLCBNQVhfUVApXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWF4 X2ZpbHRlcl9sZW5ndGgoZmMsIHgsIHkgKyBkeSwgY19pZHgsIDEsIDAsIGJzW2ldLCAmbWF4X2xl bl9wW2ldLCAmbWF4X2xlbl9xW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbF96ZXJv X2JzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0Y1tp XSA9IGJzW2ldID8gVENfQ0FMQyhxcCwgYnNbaV0pIDogMDsKKyAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICBpZiAoIWFsbF96ZXJvX2JzKSB7CisgICAgICAgICAgICAgICAgICAg IHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdWyh5ID4+IHZzKSAqIGZjLT5mcmFtZS0+bGlu ZXNpemVbY19pZHhdICsgKCh4ID4+IGhzKSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOwor ICAgICAgICAgICAgICAgICAgICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBmYy0+dnZjZHNwLmxmLmZpbHRlcl9sdW1hWzFdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtj X2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3AsIG5vX3Es IG1heF9sZW5fcCwgbWF4X2xlbl9xLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2Nocm9tYVsxXShz cmMsIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJldGEsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgdnMpOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorfQorCit2b2lkIGZmX3Z2Y19kZWJsb2NrX2hvcml6b250YWwoY29uc3Qg VlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250 ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsK KyAgICBjb25zdCBpbnQgY19lbmQgICAgID0gZmMtPnBzLnNwcy0+ci0+c3BzX2Nocm9tYV9mb3Jt YXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKyAgICB1aW50OF90KiBzcmM7Cisg ICAgaW50IHgsIHksIHFwOworCisgICAgLy9ub3QgdXNlIHRoaXMgeWV0LCBtYXkgbmVlZGVkIGJ5 IHBsdC4KKyAgICBjb25zdCB1aW50OF90IG5vX3BbNF0gPSB7IDAgfTsKKyAgICBjb25zdCB1aW50 OF90IG5vX3FbNF0gPSB7IDAgfSA7CisKKyAgICBpbnQgY3RiX2xvZzJfc2l6ZV95ID0gZmMtPnBz LnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGludCB4X2VuZCwgeV9lbmQ7CisgICAgaW50IGN0 Yl9zaXplID0gMSA8PCBjdGJfbG9nMl9zaXplX3k7CisgICAgaW50IGN0YiA9ICh4MCA+PiBjdGJf bG9nMl9zaXplX3kpICsKKyAgICAgICAgKHkwID4+IGN0Yl9sb2cyX3NpemVfeSkgKiBmYy0+cHMu cHBzLT5jdGJfd2lkdGg7CisKKyAgICBkZWJsb2NrX2JzKGxjLCB4MCwgeTAsIDApOworCisgICAg eF9lbmQgPSB4MCArIGN0Yl9zaXplOworICAgIGlmICh4X2VuZCA+IGZjLT5wcy5zcHMtPndpZHRo KQorICAgICAgICB4X2VuZCA9IGZjLT5wcy5zcHMtPndpZHRoOworICAgIHlfZW5kID0geTAgKyBj dGJfc2l6ZTsKKyAgICBpZiAoeV9lbmQgPiBmYy0+cHMuc3BzLT5oZWlnaHQpCisgICAgICAgIHlf ZW5kID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lk eCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgICAgID0g c3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9IHNw cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGdyaWQgICAgICAgICAgPSBjX2lk eCA/IChDSFJPTUFfR1JJRCA8PCB2cykgOiBMVU1BX0dSSUQ7CisKKyAgICAgICAgZm9yICh5ID0g eTA7IHkgPCB5X2VuZDsgeSArPSBncmlkKSB7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IGhv cml6b250YWxfY3R1X2VkZ2UgPSAhKHkgJSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95KTsKKyAgICAg ICAgICAgIGlmICgheSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg Zm9yICh4ID0geDAgPyB4MDogMDsgeCA8IHhfZW5kOyB4ICs9IChERUJMT0NLX1NURVAgPDwgaHMp KSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBic1s0XSwgYmV0YVs0XSwgdGNbNF0sIGFsbF96 ZXJvX2JzID0gMTsKKyAgICAgICAgICAgICAgICB1aW50OF90IG1heF9sZW5fcFs0XSwgbWF4X2xl bl9xWzRdOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBERUJMT0NLX1NU RVAgPj4gKDIgLSBocyk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHgg PSBpIDw8IDI7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IERCUGFyYW1zICpwYXJhbXMgPSBm Yy0+dGFiLmRlYmxvY2sgKyBjdGIgLSAoeCArIGR4IDwgeDApOworICAgICAgICAgICAgICAgICAg ICBjb25zdCBpbnQgYmV0YV9vZmZzZXQgPSBwYXJhbXMtPmJldGFfb2Zmc2V0W2NfaWR4XTsKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHRjX29mZnNldCA9IHBhcmFtcy0+dGNfb2Zmc2V0 W2NfaWR4XTsKKworICAgICAgICAgICAgICAgICAgICBic1tpXSA9ICh4ICsgZHggPCB4X2VuZCkg PyBUQUJfQlMoZmMtPnRhYi5ob3Jpem9udGFsX2JzW2NfaWR4XSwgeCArIGR4LCB5KSA6IDA7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChic1tpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg c3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1bKHkgPj4gdnMpICogZmMtPmZyYW1lLT5saW5l c2l6ZVtjX2lkeF0gKyAoKCh4ICsgZHgpPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0 KV07CisgICAgICAgICAgICAgICAgICAgICAgICBxcCA9IGdldF9xcChmYywgc3JjLCB4ICsgZHgs IHksIGNfaWR4LCAwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYmV0YVtpXSA9IGJldGF0 YWJsZVthdl9jbGlwKHFwICsgYmV0YV9vZmZzZXQsIDAsIE1BWF9RUCldOworCisgICAgICAgICAg ICAgICAgICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aChmYywgeCArIGR4LCB5LCBjX2lkeCwgMCwg aG9yaXpvbnRhbF9jdHVfZWRnZSwgYnNbaV0sICZtYXhfbGVuX3BbaV0sICZtYXhfbGVuX3FbaV0p OworICAgICAgICAgICAgICAgICAgICAgICAgYWxsX3plcm9fYnMgPSAwOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRjW2ldID0gYnNbaV0gPyBUQ19DQUxDKHFw LCBic1tpXSkgOiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFs bF96ZXJvX2JzKSB7CisgICAgICAgICAgICAgICAgICAgIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFb Y19pZHhdWyh5ID4+IHZzKSAqIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdICsgKCh4ID4+IGhz KSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOworICAgICAgICAgICAgICAgICAgICBpZiAo IWNfaWR4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+dnZjZHNwLmxmLmZpbHRlcl9s dW1hWzBdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBo b3Jpem9udGFsX2N0dV9lZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2Nocm9tYVswXShzcmMsIGZj LT5mcmFtZS0+bGluZXNpemVbY19pZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJl dGEsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgaHMpOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfY29weV9ib3JkZXIodWludDhfdCAqZHN0LCBj b25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBpbnQgd2lkdGgs IGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJk aWZmX3Qgc3JjX3N0cmlkZSkKK3sKKyAgICB3aWR0aCA8PD0gcGl4ZWxfc2hpZnQ7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMs IHdpZHRoKTsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNf c3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2V4dGVuZF92ZXJ0KHVpbnQ4X3Qg Kl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsCisgICAgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBj b25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIHB0cmRpZmZfdCBzdHJpZGUpCit7Cisg ICAgaWYgKHBpeGVsX3NoaWZ0ID09IDApIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBo ZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgbWVtc2V0KF9kc3QsICpfc3JjLCB3aWR0aCk7Cisg ICAgICAgICAgICBfc3JjICs9IHN0cmlkZTsKKyAgICAgICAgICAgIF9kc3QgKz0gc3RyaWRlOwor ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgdWludDE2X3QgKnNyYyA9IChj b25zdCB1aW50MTZfdCAqKV9zcmM7CisgICAgICAgIHVpbnQxNl90ICpkc3QgPSAodWludDE2X3Qg KilfZHN0OworICAgICAgICBzdHJpZGUgPj49IHBpeGVsX3NoaWZ0OworCisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgd2lkdGg7IGorKykKKyAgICAgICAgICAgICAgICBkc3Rbal0gPSAqc3JjOworICAgICAg ICAgICAgc3JjICs9IHN0cmlkZTsKKyAgICAgICAgICAgIGRzdCArPSBzdHJpZGU7CisgICAgICAg IH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9leHRlbmRfaG9yeih1aW50OF90ICpkc3Qs IGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGludCB3aWR0 aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICB3aWR0 aCA8PD0gcGl4ZWxfc2hpZnQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykg eworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHdpZHRoKTsKKyAgICAgICAgZHN0ICs9IHN0cmlk ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9jb3B5X2N0Yl90b19odihWVkNGcmFtZUNv bnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRl LAorICAgIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBp bnQgaGVpZ2h0LCBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YiwgY29uc3QgaW50IGNf aWR4KQoreworICAgIGNvbnN0IGludCBwcyAgICAgICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxf c2hpZnQ7CisgICAgY29uc3QgaW50IHcgICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT53aWR0aCA+ PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBoICAgICAgICAgICAg ID0gZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAg Y29uc3QgaW50IGJvcmRlcl9waXhlbHMgPSAoY19pZHggPT0gMCkgPyBBTEZfQk9SREVSX0xVTUEg OiBBTEZfQk9SREVSX0NIUk9NQTsKKyAgICBjb25zdCBpbnQgb2Zmc2V0X2hbXSAgICA9IHsgMCwg aGVpZ2h0IC0gYm9yZGVyX3BpeGVscyB9OworICAgIGNvbnN0IGludCBvZmZzZXRfdltdICAgID0g eyAwLCB3aWR0aCAgLSBib3JkZXJfcGl4ZWxzIH07CisKKyAgICAvKiBjb3B5IGhvcml6b250YWwg ZWRnZXMgKi8KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKG9mZnNldF9o KTsgaSsrKSB7CisgICAgICAgIGFsZl9jb3B5X2JvcmRlcihmYy0+dGFiLmFsZl9waXhlbF9idWZm ZXJfaFtjX2lkeF1baV0gKyAoKGJvcmRlcl9waXhlbHMgKiB5X2N0YiAqIHcgKyB4KTw8IHBzKSwK KyAgICAgICAgICAgIHNyYyArIG9mZnNldF9oW2ldICogc3JjX3N0cmlkZSwgcHMsIHdpZHRoLCBi b3JkZXJfcGl4ZWxzLCB3IDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICB9CisgICAgLyogY29weSB2 ZXJ0aWNhbCBlZGdlcyAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMo b2Zmc2V0X3YpOyBpKyspIHsKKyAgICAgICAgYWxmX2NvcHlfYm9yZGVyKGZjLT50YWIuYWxmX3Bp eGVsX2J1ZmZlcl92W2NfaWR4XVtpXSArICgoaCAqIHhfY3RiICsgeSkgKiAoYm9yZGVyX3BpeGVs cyA8PCBwcykpLAorICAgICAgICAgICAgc3JjICsgKG9mZnNldF92W2ldIDw8IHBzKSwgcHMsIGJv cmRlcl9waXhlbHMsIGhlaWdodCwgYm9yZGVyX3BpeGVscyA8PCBwcywgc3JjX3N0cmlkZSk7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfZmlsbF9ib3JkZXJfaCh1aW50OF90ICpkc3QsIGNv bnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IHB0cmRp ZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IHVpbnQ4X3QgKmJvcmRlciwgY29uc3QgaW50IHdp ZHRoLCBjb25zdCBpbnQgYm9yZGVyX3BpeGVscywgY29uc3QgaW50IHBzLCBjb25zdCBpbnQgZWRn ZSkKK3sKKyAgICBpZiAoZWRnZSkKKyAgICAgICAgYWxmX2V4dGVuZF9ob3J6KGRzdCwgYm9yZGVy LCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUpOworICAgIGVsc2UKKyAgICAg ICAgYWxmX2NvcHlfYm9yZGVyKGRzdCwgc3JjLCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMsIGRz dF9zdHJpZGUsIHNyY19zdHJpZGUpOworfQorCitzdGF0aWMgdm9pZCBhbGZfZmlsbF9ib3JkZXJf dih1aW50OF90ICpkc3QsIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90 ICpzcmMsCisgICAgY29uc3QgdWludDhfdCAqYm9yZGVyLCBjb25zdCBpbnQgYm9yZGVyX3BpeGVs cywgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBjb25zdCBpbnQgKmVk Z2VzLCBjb25zdCBpbnQgZWRnZSkKK3sKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSA9 IChib3JkZXJfcGl4ZWxzIDw8IHBpeGVsX3NoaWZ0KTsKKworICAgIGlmIChlZGdlKSB7CisgICAg ICAgIGFsZl9leHRlbmRfdmVydChkc3QsIGJvcmRlciwgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhl bHMsIGhlaWdodCArIDIgKiBib3JkZXJfcGl4ZWxzLCBkc3Rfc3RyaWRlKTsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIC8vbGVmdC9yaWdodAorICAgIGFsZl9jb3B5X2JvcmRlcihkc3Qg KyBkc3Rfc3RyaWRlICogYm9yZGVyX3BpeGVscyAqIGVkZ2VzW1RPUF0sIHNyYyArIHNyY19zdHJp ZGUgKiBib3JkZXJfcGl4ZWxzICogZWRnZXNbVE9QXSwKKyAgICAgICAgcGl4ZWxfc2hpZnQsIGJv cmRlcl9waXhlbHMsIGhlaWdodCArICghZWRnZXNbVE9QXSArICFlZGdlc1tCT1RUT01dKSAqIGJv cmRlcl9waXhlbHMsIGRzdF9zdHJpZGUsIHNyY19zdHJpZGUpOworCisgICAgLy90b3AgbGVmdC9y aWdodAorICAgIGlmIChlZGdlc1tUT1BdKQorICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBk c3QgKyBkc3Rfc3RyaWRlICogYm9yZGVyX3BpeGVscywgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhl bHMsIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUpOworCisgICAgLy9ib3R0b20gbGVmdC9yaWdo dAorICAgIGlmIChlZGdlc1tCT1RUT01dKSB7CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlICog KGJvcmRlcl9waXhlbHMgKyBoZWlnaHQpOworICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBk c3QgLSBkc3Rfc3RyaWRlLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgYm9yZGVyX3BpeGVs cywgZHN0X3N0cmlkZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfcHJlcGFyZV9idWZm ZXIoVlZDRnJhbWVDb250ZXh0ICpmYywgdWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3Ny YywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LAorICAgIGNvbnN0IGludCB4X2N0YiwgY29uc3Qg aW50IHlfY3RiLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHB0cmRp ZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBp bnQgY19pZHgsIGNvbnN0IGludCAqZWRnZXMpCit7CisgICAgY29uc3QgaW50IHBzID0gZmMtPnBz LnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29uc3QgaW50IHcgPSBmYy0+cHMuc3BzLT53aWR0aCA+ PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBoID0gZmMtPnBzLnNw cy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGJv cmRlcl9waXhlbHMgPSBjX2lkeCA9PSAwID8gQUxGX0JPUkRFUl9MVU1BIDogQUxGX0JPUkRFUl9D SFJPTUE7CisgICAgdWludDhfdCAqZHN0LCAqc3JjOworCisgICAgY29weV9jdGIoX2RzdCwgX3Ny Yywgd2lkdGggPDwgcHMsIGhlaWdodCwgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7CisKKyAgICAv L3RvcAorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVsxXSArICgo KGJvcmRlcl9waXhlbHMgKiAoeV9jdGIgLSAxKSkgKiB3ICsgeCkgPDwgcHMpOworICAgIGRzdCA9 IF9kc3QgLSBib3JkZXJfcGl4ZWxzICogZHN0X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJf aChkc3QsIGRzdF9zdHJpZGUsIHNyYywgdyAgPDwgcHMsIF9kc3QsIHdpZHRoLCBib3JkZXJfcGl4 ZWxzLCBwcywgZWRnZXNbVE9QXSk7CisKKyAgICAvL2JvdHRvbQorICAgIHNyYyA9IGZjLT50YWIu YWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVswXSArICgoYm9yZGVyX3BpeGVscyAqICh5X2N0YiAr IDEpICogdyArIHgpIDw8IHBzKTsKKyAgICBkc3QgPSBfZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlk ZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfaChkc3QsIGRzdF9zdHJpZGUsIHNyYywgdyAgPDwgcHMs IF9kc3QgKyAoaGVpZ2h0IC0gMSkgKiBkc3Rfc3RyaWRlLCB3aWR0aCwgYm9yZGVyX3BpeGVscywg cHMsIGVkZ2VzW0JPVFRPTV0pOworCisKKyAgICAvL2xlZnQKKyAgICBzcmMgPSBmYy0+dGFiLmFs Zl9waXhlbF9idWZmZXJfdltjX2lkeF1bMV0gKyAoaCAqICh4X2N0YiAtIDEpICsgeSAtIGJvcmRl cl9waXhlbHMpICogKGJvcmRlcl9waXhlbHMgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgLSAoYm9y ZGVyX3BpeGVscyA8PCBwcykgLSBib3JkZXJfcGl4ZWxzICogZHN0X3N0cmlkZTsKKyAgICBhbGZf ZmlsbF9ib3JkZXJfdihkc3QsIGRzdF9zdHJpZGUsIHNyYywgIGRzdCArIChib3JkZXJfcGl4ZWxz IDw8IHBzKSwgYm9yZGVyX3BpeGVscywgaGVpZ2h0LCBwcywgZWRnZXMsIGVkZ2VzW0xFRlRdKTsK KworICAgIC8vcmlnaHQKKyAgICBzcmMgPSBmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfdltjX2lk eF1bMF0gKyAoaCAqICh4X2N0YiArIDEpICsgeSAtIGJvcmRlcl9waXhlbHMpICogKGJvcmRlcl9w aXhlbHMgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgKyAod2lkdGggPDwgcHMpIC0gYm9yZGVyX3Bp eGVscyAqIGRzdF9zdHJpZGU7CisgICAgYWxmX2ZpbGxfYm9yZGVyX3YoZHN0LCBkc3Rfc3RyaWRl LCBzcmMsICBkc3QgLSAoMSA8PCBwcyksIGJvcmRlcl9waXhlbHMsIGhlaWdodCwgcHMsIGVkZ2Vz LCBlZGdlc1tSSUdIVF0pOworfQorCisjZGVmaW5lIEFMRl9NQVhfQkxPQ0tTX0lOX0NUVSAgIChN QVhfQ1RVX1NJWkUgKiBNQVhfQ1RVX1NJWkUgLyBBTEZfQkxPQ0tfU0laRSAvIEFMRl9CTE9DS19T SVpFKQorI2RlZmluZSBBTEZfTUFYX0ZJTFRFUl9TSVpFICAgICAoQUxGX01BWF9CTE9DS1NfSU5f Q1RVICogQUxGX05VTV9DT0VGRl9MVU1BKQorCitzdGF0aWMgdm9pZCBhbGZfZ2V0X2NvZWZmX2Fu ZF9jbGlwKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludDE2X3QgKmNvZWZmLCBpbnQxNl90ICpjbGlw LAorICAgIGNvbnN0IHVpbnQ4X3QgKnNyYywgcHRyZGlmZl90IHNyY19zdHJpZGUsIGludCB3aWR0 aCwgaW50IGhlaWdodCwgaW50IHZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgY29uc3Qg VlZDRnJhbWVDb250ZXh0ICpmYyAgICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBIMjY2UmF3U2xp Y2VIZWFkZXIgKnJzaCAgID0gbGMtPnNjLT5zaC5yOworICAgIHVpbnQ4X3QgZml4ZWRfY2xpcF9z ZXRbQUxGX05VTV9GSUxURVJTX0xVTUFdW0FMRl9OVU1fQ09FRkZfTFVNQV0gPSB7IDAgfTsKKyAg ICBjb25zdCBpbnQxNl90ICpjb2VmZl9zZXQ7CisgICAgY29uc3QgdWludDhfdCAqY2xpcF9pZHhf c2V0OworICAgIGNvbnN0IHVpbnQ4X3QgKmNsYXNzX3RvX2ZpbHQ7CisgICAgY29uc3QgaW50IHNp emUgPSB3aWR0aCAqIGhlaWdodCAvIEFMRl9CTE9DS19TSVpFIC8gQUxGX0JMT0NLX1NJWkU7Cisg ICAgaW50IGNsYXNzX2lkeFtBTEZfTUFYX0JMT0NLU19JTl9DVFVdOworICAgIGludCB0cmFuc3Bv c2VfaWR4W0FMRl9NQVhfQkxPQ0tTX0lOX0NUVV07CisKKyAgICBpZiAoYWxmLT5jdGJfZmlsdF9z ZXRfaWR4X3kgPCAxNikgeworICAgICAgICBjb2VmZl9zZXQgICAgICAgICAgID0gJmZmX3Z2Y19h bGZfZml4X2ZpbHRfY29lZmZbMF1bMF07CisgICAgICAgIGNsaXBfaWR4X3NldCAgICAgICAgPSAm Zml4ZWRfY2xpcF9zZXRbMF1bMF07CisgICAgICAgIGNsYXNzX3RvX2ZpbHQgICAgICAgPSBmZl92 dmNfYWxmX2NsYXNzX3RvX2ZpbHRfbWFwW2FsZi0+Y3RiX2ZpbHRfc2V0X2lkeF95XTsKKyAgICB9 IGVsc2UgeworICAgICAgICBjb25zdCBpbnQgaWQgICAgICAgID0gcnNoLT5zaF9hbGZfYXBzX2lk X2x1bWFbYWxmLT5jdGJfZmlsdF9zZXRfaWR4X3kgLSAxNl07CisgICAgICAgIGNvbnN0IFZWQ0FM RiAqYXBzICAgPSBmYy0+cHMuYWxmX2xpc3RbaWRdOworICAgICAgICBjb2VmZl9zZXQgICAgICAg ICAgID0gJmFwcy0+bHVtYV9jb2VmZlswXVswXTsKKyAgICAgICAgY2xpcF9pZHhfc2V0ICAgICAg ICA9ICZhcHMtPmx1bWFfY2xpcF9pZHhbMF1bMF07CisgICAgICAgIGNsYXNzX3RvX2ZpbHQgICAg ICAgPSBmZl92dmNfYWxmX2Fwc19jbGFzc190b19maWx0X21hcDsKKyAgICB9CisgICAgZmMtPnZ2 Y2RzcC5hbGYuY2xhc3NpZnkoY2xhc3NfaWR4LCB0cmFuc3Bvc2VfaWR4LCBzcmMsIHNyY19zdHJp ZGUsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgIHZiX3BvcywgbGMtPmFsZl9ncmFkaWVudF90bXAp OworICAgIGZjLT52dmNkc3AuYWxmLnJlY29uX2NvZWZmX2FuZF9jbGlwKGNvZWZmLCBjbGlwLCBj bGFzc19pZHgsIHRyYW5zcG9zZV9pZHgsIHNpemUsCisgICAgICAgIGNvZWZmX3NldCwgY2xpcF9p ZHhfc2V0LCBjbGFzc190b19maWx0KTsKK30KKworc3RhdGljIHZvaWQgYWxmX2ZpbHRlcl9sdW1h KFZWQ0xvY2FsQ29udGV4dCAqbGMsIHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLAor ICAgIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlk ZSwgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25z dCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgX3ZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAg Y29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgID0gbGMtPmZjOworICAgIGludCB2Yl9wb3MgICAg ICAgICAgICAgICAgICA9IF92Yl9wb3MgLSB5MDsKKyAgICBpbnQxNl90ICpjb2VmZiAgICAgICAg ICAgICAgID0gKGludDE2X3QqKWxjLT50bXA7CisgICAgaW50MTZfdCAqY2xpcCAgICAgICAgICAg ICAgID0gKGludDE2X3QgKilsYy0+dG1wMTsKKworICAgIGF2X2Fzc2VydDAoQUxGX01BWF9GSUxU RVJfU0laRSA8PSBzaXplb2YobGMtPnRtcCkpOworICAgIGF2X2Fzc2VydDAoQUxGX01BWF9GSUxU RVJfU0laRSAqIHNpemVvZihpbnQxNl90KSA8PSBzaXplb2YobGMtPnRtcDEpKTsKKworICAgIGFs Zl9nZXRfY29lZmZfYW5kX2NsaXAobGMsIGNvZWZmLCBjbGlwLCBzcmMsIHNyY19zdHJpZGUsIHdp ZHRoLCBoZWlnaHQsIHZiX3BvcywgYWxmKTsKKyAgICBmYy0+dnZjZHNwLmFsZi5maWx0ZXJbTFVN QV0oZHN0LCBkc3Rfc3RyaWRlLCBzcmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIGNvZWZm LCBjbGlwLCB2Yl9wb3MpOworfQorCitzdGF0aWMgaW50IGFsZl9jbGlwX2Zyb21faWR4KGNvbnN0 IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBpZHgpCit7CisgICAgY29uc3QgVlZDU1BT ICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IG9mZnNldFtdID0gezAsIDMsIDUs IDd9OworCisgICAgcmV0dXJuIDEgPDwgKHNwcy0+Yml0X2RlcHRoIC0gb2Zmc2V0W2lkeF0pOwor fQorCitzdGF0aWMgdm9pZCBhbGZfZmlsdGVyX2Nocm9tYShWVkNMb2NhbENvbnRleHQgKmxjLCB1 aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0 X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsIGNvbnN0IGludCBjX2lkeCwKKyAg ICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCB2Yl9wb3MsIEFM RlBhcmFtcyAqYWxmKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgICAgICAgICAgPSBs Yy0+ZmM7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5zYy0+c2gu cjsKKyAgICBjb25zdCBWVkNBTEYgKmFwcyAgICAgICAgICAgICAgID0gZmMtPnBzLmFsZl9saXN0 W3JzaC0+c2hfYWxmX2Fwc19pZF9jaHJvbWFdOworICAgIGNvbnN0IGludCBpZHggICAgICAgICAg ICAgICAgICAgPSBhbGYtPmFsZl9jdGJfZmlsdGVyX2FsdF9pZHhbY19pZHggLSAxXTsKKyAgICBj b25zdCBpbnQxNl90ICpjb2VmZiAgICAgICAgICAgID0gYXBzLT5jaHJvbWFfY29lZmZbaWR4XTsK KyAgICBpbnQxNl90IGNsaXBbQUxGX05VTV9DT0VGRl9DSFJPTUFdOworCisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBBTEZfTlVNX0NPRUZGX0NIUk9NQTsgaSsrKQorICAgICAgICBjbGlwW2ldID0g YWxmX2NsaXBfZnJvbV9pZHgoZmMsIGFwcy0+Y2hyb21hX2NsaXBfaWR4W2lkeF1baV0pOworCisg ICAgZmMtPnZ2Y2RzcC5hbGYuZmlsdGVyW0NIUk9NQV0oZHN0LCBkc3Rfc3RyaWRlLCBzcmMsIHNy Y19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIGNvZWZmLCBjbGlwLCB2Yl9wb3MpOworfQorCitzdGF0 aWMgdm9pZCBhbGZfZmlsdGVyX2NjKFZWQ0xvY2FsQ29udGV4dCAqbGMsIHVpbnQ4X3QgKmRzdCwg Y29uc3QgdWludDhfdCAqbHVtYSwKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29u c3QgcHRyZGlmZl90IGx1bWFfc3RyaWRlLCBjb25zdCBpbnQgY19pZHgsCisgICAgY29uc3QgaW50 IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgaHMsIGNvbnN0IGludCB2cywgY29u c3QgaW50IHZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpm YyAgICAgICAgICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKnJz aCAgID0gbGMtPnNjLT5zaC5yOworICAgIGNvbnN0IGludCBpZHggICAgICAgICAgICAgICAgICAg PSBjX2lkeCAtIDE7CisgICAgY29uc3QgaW50IGNjX2Fwc19pZCAgICAgICAgICAgICA9IGNfaWR4 ID09IENCID8gcnNoLT5zaF9hbGZfY2NfY2JfYXBzX2lkIDogcnNoLT5zaF9hbGZfY2NfY3JfYXBz X2lkOworICAgIGNvbnN0IFZWQ0FMRiAqYXBzICAgICAgICAgICAgICAgPSBmYy0+cHMuYWxmX2xp c3RbY2NfYXBzX2lkXTsKKworICAgIGlmIChhcHMpIHsKKyAgICAgICAgY29uc3QgaW50MTZfdCAq Y29lZmYgPSBhcHMtPmNjX2NvZWZmW2lkeF1bYWxmLT5jdGJfY2NfaWRjW2lkeF0gLSAxXTsKKwor ICAgICAgICBmYy0+dnZjZHNwLmFsZi5maWx0ZXJfY2MoZHN0LCBkc3Rfc3RyaWRlLCBsdW1hLCBs dW1hX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwgaHMsIHZzLCBjb2VmZiwgdmJfcG9zKTsKKyAgICB9 Cit9CisKK3ZvaWQgZmZfdnZjX2FsZl9jb3B5X2N0dV90b19odihWVkNMb2NhbENvbnRleHQqIGxj LCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZj ICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBpbnQgeF9jdGIgICAgICAgICA9IHgwID4+IGZjLT5w cy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9jdGIgICAgICAgICA9IHkw ID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgY3RiX3NpemVf eSAgICA9IGZjLT5wcy5zcHMtPmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHBzICAgICAgICAg ICAgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgICAg ICA9IGZjLT5wcy5zcHMtPnItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FNUExF X0FSUkFZUyA6IDE7CisKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNf aWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzICAgICAgICA9IGZjLT5wcy5zcHMtPmhzaGlm dFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCB2cyAgICAgICAgPSBmYy0+cHMuc3BzLT52c2hp ZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgeCAgICAgICAgID0geDAgPj4gaHM7CisgICAg ICAgIGNvbnN0IGludCB5ICAgICAgICAgPSB5MCA+PiB2czsKKyAgICAgICAgY29uc3QgaW50IHdp ZHRoICAgICA9IEZGTUlOKGZjLT5wcy5zcHMtPndpZHRoIC0geDAsIGN0Yl9zaXplX3kpID4+IGhz OworICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ICAgID0gRkZNSU4oZmMtPnBzLnNwcy0+aGVpZ2h0 IC0geTAsIGN0Yl9zaXplX3kpID4+IHZzOworCisgICAgICAgIGNvbnN0IGludCBzcmNfc3RyaWRl ID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIHVpbnQ4X3QqIHNyYyA9ICZm Yy0+ZnJhbWUtPmRhdGFbY19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgcHMpXTsKKworICAg ICAgICBhbGZfY29weV9jdGJfdG9faHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeCwgeSwgd2lkdGgs IGhlaWdodCwgeF9jdGIsIHlfY3RiLCBjX2lkeCk7CisgICAgfQorfQorCit2b2lkIGZmX3Z2Y19h bGZfZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkw KQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0IFZW Q1BQUyAqcHBzICAgICAgID0gZmMtPnBzLnBwczsKKyAgICBjb25zdCBpbnQgeF9jdGIgICAgICAg ICA9IHgwID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9j dGIgICAgICAgICA9IHkwID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25z dCBpbnQgY3RiX3NpemVfeSAgICA9IGZjLT5wcy5zcHMtPmN0Yl9zaXplX3k7CisgICAgY29uc3Qg aW50IHBzICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBjb25zdCBp bnQgcGFkZGVkX3N0cmlkZSA9IEVER0VfRU1VX0JVRkZFUl9TVFJJREUgPDwgcHM7CisgICAgY29u c3QgaW50IHBhZGRlZF9vZmZzZXQgPSBwYWRkZWRfc3RyaWRlICogQUxGX1BBRERJTkdfU0laRSAr IChBTEZfUEFERElOR19TSVpFIDw8IHBzKTsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgICAgICA9 IGZjLT5wcy5zcHMtPnItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FNUExFX0FS UkFZUyA6IDE7CisgICAgQUxGUGFyYW1zICphbGYgICAgICAgICAgPSAmQ1RCKGZjLT50YWIuYWxm LCB4X2N0YiwgeV9jdGIpOworICAgIGludCBlZGdlc1tNQVhfRURHRVNdICAgID0geyB4X2N0YiA9 PSAwLCB5X2N0YiA9PSAwLCB4X2N0YiA9PSBwcHMtPmN0Yl93aWR0aCAtIDEsIHlfY3RiID09IHBw cy0+Y3RiX2hlaWdodCAtIDEgfTsKKworICAgIGlmICghcHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJf YWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZykgeworICAgICAgICBlZGdlc1tMRUZUXSA9IGVkZ2Vz W0xFRlRdIHx8IChsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1RJTEUpOworICAg ICAgICBlZGdlc1tUT1BdICA9IGVkZ2VzW1RPUF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJP VU5EQVJZX1VQUEVSX1RJTEUpOworICAgICAgICBlZGdlc1tSSUdIVF0gPSBlZGdlc1tSSUdIVF0g fHwgcHBzLT5jdGJfdG9fY29sX2JkW3hfY3RiXSAhPSBwcHMtPmN0Yl90b19jb2xfYmRbeF9jdGIg KyAxXTsKKyAgICAgICAgZWRnZXNbQk9UVE9NXSA9IGVkZ2VzW0JPVFRPTV0gfHwgcHBzLT5jdGJf dG9fcm93X2JkW3lfY3RiXSAhPSBwcHMtPmN0Yl90b19yb3dfYmRbeV9jdGIgKyAxXTsKKyAgICB9 CisKKyAgICBpZiAoIXBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxl ZF9mbGFnKSB7CisgICAgICAgIGVkZ2VzW0xFRlRdID0gZWRnZXNbTEVGVF0gfHwgKGxjLT5ib3Vu ZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJQ0UpOworICAgICAgICBlZGdlc1tUT1BdID0g ZWRnZXNbVE9QXSB8fCAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0Up OworICAgICAgICBlZGdlc1tSSUdIVF0gPSBlZGdlc1tSSUdIVF0gfHwgQ1RCKGZjLT50YWIuc2xp Y2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgKyAx LCB5X2N0Yik7CisgICAgICAgIGVkZ2VzW0JPVFRPTV0gPSBlZGdlc1tCT1RUT01dIHx8IENUQihm Yy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgs IHhfY3RiLCB5X2N0YiArIDEpOworICAgIH0KKworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19p ZHggPCBjX2VuZDsgY19pZHgrKykgeworICAgICAgICBjb25zdCBpbnQgaHMgPSBmYy0+cHMuc3Bz LT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMgPSBmYy0+cHMuc3BzLT52c2hp ZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgY3RiX3NpemVfaCA9IGN0Yl9zaXplX3kgPj4g aHM7CisgICAgICAgIGNvbnN0IGludCBjdGJfc2l6ZV92ID0gY3RiX3NpemVfeSA+PiB2czsKKyAg ICAgICAgY29uc3QgaW50IHggPSB4MCA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IHkgPSB5MCA+ PiB2czsKKyAgICAgICAgY29uc3QgaW50IHBpY193aWR0aCA9IGZjLT5wcy5zcHMtPndpZHRoID4+ IGhzOworICAgICAgICBjb25zdCBpbnQgcGljX2hlaWdodCA9IGZjLT5wcy5zcHMtPmhlaWdodCA+ PiB2czsKKyAgICAgICAgY29uc3QgaW50IHdpZHRoICA9IEZGTUlOKHBpY193aWR0aCAgLSB4LCBj dGJfc2l6ZV9oKTsKKyAgICAgICAgY29uc3QgaW50IGhlaWdodCA9IEZGTUlOKHBpY19oZWlnaHQg LSB5LCBjdGJfc2l6ZV92KTsKKyAgICAgICAgY29uc3QgaW50IHNyY19zdHJpZGUgPSBmYy0+ZnJh bWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICAgICAgdWludDhfdCAqc3JjID0gJmZjLT5mcmFtZS0+ ZGF0YVtjX2lkeF1beSAqIHNyY19zdHJpZGUgKyAoeCA8PCBwcyldOworICAgICAgICB1aW50OF90 ICpwYWRkZWQ7CisKKyAgICAgICAgaWYgKGFsZi0+Y3RiX2ZsYWdbY19pZHhdIHx8ICghY19pZHgg JiYgKGFsZi0+Y3RiX2NjX2lkY1swXSB8fCBhbGYtPmN0Yl9jY19pZGNbMV0pKSkgeworICAgICAg ICAgICAgcGFkZGVkID0gKGNfaWR4ID8gbGMtPmFsZl9idWZmZXJfY2hyb21hIDogbGMtPmFsZl9i dWZmZXJfbHVtYSkgKyBwYWRkZWRfb2Zmc2V0OworICAgICAgICAgICAgYWxmX3ByZXBhcmVfYnVm ZmVyKGZjLCBwYWRkZWQsIHNyYywgeCwgeSwgeF9jdGIsIHlfY3RiLCB3aWR0aCwgaGVpZ2h0LAor ICAgICAgICAgICAgICAgIHBhZGRlZF9zdHJpZGUsIHNyY19zdHJpZGUsIGNfaWR4LCBlZGdlcyk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsZi0+Y3RiX2ZsYWdbY19pZHhdKSB7CisgICAgICAg ICAgICBpZiAoIWNfaWR4KSAgeworICAgICAgICAgICAgICAgIGFsZl9maWx0ZXJfbHVtYShsYywg c3JjLCBwYWRkZWQsIHNyY19zdHJpZGUsIHBhZGRlZF9zdHJpZGUsIHgsIHksCisgICAgICAgICAg ICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIHkgKyBjdGJfc2l6ZV92IC0gQUxGX1ZCX1BPU19BQk9W RV9MVU1BLCBhbGYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhbGZf ZmlsdGVyX2Nocm9tYShsYywgc3JjLCBwYWRkZWQsIHNyY19zdHJpZGUsIHBhZGRlZF9zdHJpZGUs IGNfaWR4LAorICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBjdGJfc2l6ZV92IC0g QUxGX1ZCX1BPU19BQk9WRV9DSFJPTUEsIGFsZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgaWYgKGNfaWR4ICYmIGFsZi0+Y3RiX2NjX2lkY1tjX2lkeCAtIDFdKSB7CisgICAg ICAgICAgICBwYWRkZWQgPSBsYy0+YWxmX2J1ZmZlcl9sdW1hICsgcGFkZGVkX29mZnNldDsKKyAg ICAgICAgICAgIGFsZl9maWx0ZXJfY2MobGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRk ZWRfc3RyaWRlLCBjX2lkeCwKKyAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBocywgdnMs IChjdGJfc2l6ZV92IDw8IHZzKSAtIEFMRl9WQl9QT1NfQUJPVkVfTFVNQSwgYWxmKTsKKyAgICAg ICAgfQorCisgICAgICAgIGFsZi0+YXBwbGllZFtjX2lkeF0gPSAxOworICAgIH0KK30KKworCit2 b2lkIGZmX3Z2Y19sbWNzX2ZpbHRlcihjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBp bnQgeCwgY29uc3QgaW50IHkpCit7CisgICAgY29uc3QgU2xpY2VDb250ZXh0ICpzYyA9IGxjLT5z YzsKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IGlu dCBjdGJfc2l6ZSAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCB3aWR0 aCAgICAgPSBGRk1JTihmYy0+cHMucHBzLT53aWR0aCAgLSB4LCBjdGJfc2l6ZSk7CisgICAgY29u c3QgaW50IGhlaWdodCAgICA9IEZGTUlOKGZjLT5wcy5wcHMtPmhlaWdodCAtIHksIGN0Yl9zaXpl KTsKKyAgICB1aW50OF90ICpkYXRhICAgICAgID0gZmMtPmZyYW1lLT5kYXRhW0xVTUFdICsgeSAq IGZjLT5mcmFtZS0+bGluZXNpemVbTFVNQV0gKyAoeCA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlm dCk7CisgICAgaWYgKHNjLT5zaC5yLT5zaF9sbWNzX3VzZWRfZmxhZykKKyAgICAgICAgZmMtPnZ2 Y2RzcC5sbWNzLmZpbHRlcihkYXRhLCBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdLCB3aWR0aCwg aGVpZ2h0LCBmYy0+cHMubG1jcy5pbnZfbHV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv dnZjL3Z2Y19maWx0ZXIuaCBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yYWU0YzMzZTJkCi0tLSAvZGV2L251bGwKKysr IGIvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBW VkMgZmlsdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBOdW8gTWkKKyAqCisgKgorICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaWZuZGVmIEFWQ09ERUNfVlZDX1ZWQ19G SUxURVJfSAorI2RlZmluZSBBVkNPREVDX1ZWQ19WVkNfRklMVEVSX0gKKworI2luY2x1ZGUgInZ2 Y2RlYy5oIgorCisvKioKKyAqIGxtY3MgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMg bG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhlIENU VQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92dmNf bG1jc19maWx0ZXIoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25z dCBpbnQgeTApOworCisvKioKKyAqIHZlcnRpY2FsIGRlYmxvY2sgZmlsdGVyIGZvciB0aGUgQ1RV CisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3Np dGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAq Lwordm9pZCBmZl92dmNfZGVibG9ja192ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxj LCBpbnQgeDAsIGludCB5MCk7CisKKy8qKgorICogaG9yaXpvbnRhbCBkZWJsb2NrIGZpbHRlciBm b3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFt IHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0 aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX2RlYmxvY2tfaG9yaXpvbnRhbChjb25zdCBWVkNMb2Nh bENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCk7CisKKy8qKgorICogc2FvIGZpbHRlciBmb3Ig dGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHgw IHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUg Q1RVCisgKi8KK3ZvaWQgZmZfdnZjX3Nhb19maWx0ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgY29u c3QgaW50IHgwLCBjb25zdCBpbnQgeTApOworCit2b2lkIGZmX3Z2Y19zYW9fY29weV9jdGJfdG9f aHYoVlZDTG9jYWxDb250ZXh0KiBsYywgaW50IHJ4LCBpbnQgcnksIGludCBsYXN0X3Jvdyk7Cit2 b2lkIGZmX3Z2Y19hbGZfY29weV9jdHVfdG9faHYoVlZDTG9jYWxDb250ZXh0KiBsYywgaW50IHgw LCBpbnQgeTApOworCisvKioKKyAqIGFsZiBmaWx0ZXIgZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBs YyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSB4MCB4IHBvc2l0aW9uIGZvciB0aGUg Q1RVCisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBmb3IgdGhlIENUVQorICovCit2b2lkIGZmX3Z2 Y19hbGZfZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50 IHkwKTsKKworI2VuZGlmIC8vIEFWQ09ERUNfVlZDX1ZWQ19DVFVfSApkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2Zp bHRlcl90ZW1wbGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmE0 ZjE3OTJlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyX3Rl bXBsYXRlLmMKQEAgLTAsMCArMSwxMTM1IEBACisvKgorICogVlZDIGZpbHRlcnMgRFNQCisgKgor ICogQ29weXJpZ2h0IChDKSAyMDIyIE51byBNaQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKKyAqLworCitzdGF0aWMgdm9pZCBGVU5DKGxtY3NfZmlsdGVyX2x1bWEpKHVpbnQ4X3Qg Kl9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBo ZWlnaHQsIGNvbnN0IHVpbnQ4X3QgKl9sdXQpCit7CisgICAgY29uc3QgcGl4ZWwgKmx1dCA9IChj b25zdCBwaXhlbCAqKV9sdXQ7CisgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCopX2RzdDsKKyAgICBk c3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl aWdodDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAg ICAgICAgICAgIGRzdFt4XSA9IGx1dFtkc3RbeF1dOworICAgICAgICBkc3QgKz0gZHN0X3N0cmlk ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2JhbmRfZmlsdGVyKSh1aW50OF90 ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgcHRyZGlm Zl90IHNyY19zdHJpZGUsCisgICAgY29uc3QgaW50MTZfdCAqc2FvX29mZnNldF92YWwsIGNvbnN0 IGludCBzYW9fbGVmdF9jbGFzcywgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQor eworICAgIHBpeGVsICpkc3QgICAgICAgPSAocGl4ZWwgKilfZHN0OworICAgIGNvbnN0IHBpeGVs ICpzcmMgPSAocGl4ZWwgKilfc3JjOworICAgIGludCBvZmZzZXRfdGFibGVbMzJdID0geyAwIH07 CisgICAgaW50IGssIHksIHg7CisgICAgaW50IHNoaWZ0ICA9IEJJVF9ERVBUSCAtIDU7CisKKyAg ICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXplb2Yo cGl4ZWwpOworCisgICAgZm9yIChrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgb2Zmc2V0X3Rh YmxlWyhrICsgc2FvX2xlZnRfY2xhc3MpICYgMzFdID0gc2FvX29mZnNldF92YWxbayArIDFdOwor ICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKHggPSAwOyB4 IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hd ICsgb2Zmc2V0X3RhYmxlW3NyY1t4XSA+PiBzaGlmdF0pOworICAgICAgICBkc3QgKz0gZHN0X3N0 cmlkZTsKKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgfQorfQorCisjZGVmaW5lIENN UChhLCBiKSAoKChhKSA+IChiKSkgLSAoKGEpIDwgKGIpKSkKKworc3RhdGljIHZvaWQgRlVOQyhz YW9fZWRnZV9maWx0ZXIpKHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIHB0cmRp ZmZfdCBkc3Rfc3RyaWRlLAorICAgIGNvbnN0IGludDE2X3QgKnNhb19vZmZzZXRfdmFsLCBjb25z dCBpbnQgZW8sIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBzdGF0 aWMgY29uc3QgdWludDhfdCBlZGdlX2lkeFtdID0geyAxLCAyLCAwLCAzLCA0IH07CisgICAgc3Rh dGljIGNvbnN0IGludDhfdCBwb3NbNF1bMl1bMl0gPSB7CisgICAgICAgIHsgeyAtMSwgIDAgfSwg eyAgMSwgMCB9IH0sIC8vIGhvcml6b250YWwKKyAgICAgICAgeyB7ICAwLCAtMSB9LCB7ICAwLCAx IH0gfSwgLy8gdmVydGljYWwKKyAgICAgICAgeyB7IC0xLCAtMSB9LCB7ICAxLCAxIH0gfSwgLy8g NDUgZGVncmVlCisgICAgICAgIHsgeyAgMSwgLTEgfSwgeyAtMSwgMSB9IH0sIC8vIDEzNSBkZWdy ZWUKKyAgICB9OworICAgIHBpeGVsICpkc3QgICAgICAgICAgPSAocGl4ZWwgKilfZHN0OworICAg IGNvbnN0IHBpeGVsICpzcmMgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGludCBhX3N0cmlkZSwg Yl9zdHJpZGU7CisgICAgaW50IHgsIHk7CisgICAgcHRyZGlmZl90IHNyY19zdHJpZGUgPSAoMiAq IE1BWF9QQl9TSVpFICsgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSkgLyBzaXplb2YocGl4 ZWwpOworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGFfc3RyaWRlID0g cG9zW2VvXVswXVswXSArIHBvc1tlb11bMF1bMV0gKiBzcmNfc3RyaWRlOworICAgIGJfc3RyaWRl ID0gcG9zW2VvXVsxXVswXSArIHBvc1tlb11bMV1bMV0gKiBzcmNfc3RyaWRlOworICAgIGZvciAo eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7 IHgrKykgeworICAgICAgICAgICAgaW50IGRpZmYwID0gQ01QKHNyY1t4XSwgc3JjW3ggKyBhX3N0 cmlkZV0pOworICAgICAgICAgICAgaW50IGRpZmYxID0gQ01QKHNyY1t4XSwgc3JjW3ggKyBiX3N0 cmlkZV0pOworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgICAgICAgID0gZWRnZV9pZHhbMiAr IGRpZmYwICsgZGlmZjFdOworICAgICAgICAgICAgZHN0W3hdID0gYXZfY2xpcF9waXhlbChzcmNb eF0gKyBzYW9fb2Zmc2V0X3ZhbFtvZmZzZXRfdmFsXSk7CisgICAgICAgIH0KKyAgICAgICAgc3Jj ICs9IHNyY19zdHJpZGU7CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzApKHVpbnQ4X3QgKl9kc3QsIGNvbnN0 IHVpbnQ4X3QgKl9zcmMsCisgICAgcHRyZGlmZl90IGRzdF9zdHJpZGUsIHB0cmRpZmZfdCBzcmNf c3RyaWRlLCBjb25zdCBTQU9QYXJhbXMgKnNhbywKKyAgICBjb25zdCBpbnQgKmJvcmRlcnMsIGNv bnN0IGludCBfd2lkdGgsIGNvbnN0IGludCBfaGVpZ2h0LCBjb25zdCBpbnQgY19pZHgsCisgICAg Y29uc3QgdWludDhfdCAqdmVydF9lZGdlLCBjb25zdCB1aW50OF90ICpob3Jpel9lZGdlLCBjb25z dCB1aW50OF90ICpkaWFnX2VkZ2UpCit7CisgICAgaW50IHgsIHk7CisgICAgcGl4ZWwgKmRzdCAg ICAgICAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9kc3Q7CisgICAgY29uc3QgcGl4ZWwgKnNy YyAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgaW50MTZfdCAqc2Fv X29mZnNldF92YWwgICA9IHNhby0+b2Zmc2V0X3ZhbFtjX2lkeF07CisgICAgY29uc3QgaW50IHNh b19lb19jbGFzcyAgICAgICAgICA9IHNhby0+ZW9fY2xhc3NbY19pZHhdOworICAgIGludCBpbml0 X3ggPSAwLCB3aWR0aCA9IF93aWR0aCwgaGVpZ2h0ID0gX2hlaWdodDsKKworICAgIGRzdF9zdHJp ZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBzcmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisK KyAgICBpZiAoc2FvX2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7CisgICAgICAgIGlmIChib3Jk ZXJzWzBdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBd OworICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAg ICAgICAgZHN0W3kgKiBkc3Rfc3RyaWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3kgKiBzcmNfc3Ry aWRlXSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5pdF94ID0g MTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm9yZGVyc1syXSkgeworICAgICAgICAgICAgaW50 IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGludCBvZmZzZXQg ICAgID0gd2lkdGggLSAxOworICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGhlaWdodDsgeCsr KSB7CisgICAgICAgICAgICAgICAgZHN0W3ggKiBkc3Rfc3RyaWRlICsgb2Zmc2V0XSA9IGF2X2Ns aXBfcGl4ZWwoc3JjW3ggKiBzcmNfc3RyaWRlICsgb2Zmc2V0XSArIG9mZnNldF92YWwpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgd2lkdGgtLTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoc2FvX2VvX2NsYXNzICE9IFNBT19FT19IT1JJWikgeworICAgICAgICBpZiAoYm9yZGVyc1sx XSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAg ICAgICAgICAgIGZvciAoeCA9IGluaXRfeDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAg ICAgZHN0W3hdID0gYXZfY2xpcF9waXhlbChzcmNbeF0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoYm9yZGVyc1szXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwg ICA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgcHRyZGlmZl90IHlfZHN0X3N0cmlk ZSA9IGRzdF9zdHJpZGUgKiAoaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBwdHJkaWZmX3QgeV9z cmNfc3RyaWRlID0gc3JjX3N0cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIGZvciAo eCA9IGluaXRfeDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3ggKyB5X2Rz dF9zdHJpZGVdID0gYXZfY2xpcF9waXhlbChzcmNbeCArIHlfc3JjX3N0cmlkZV0gKyBvZmZzZXRf dmFsKTsKKyAgICAgICAgICAgIGhlaWdodC0tOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBGVU5DKHNhb19lZGdlX3Jlc3RvcmVfMSkodWludDhfdCAqX2RzdCwgY29uc3QgdWlu dDhfdCAqX3NyYywKKyAgICBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgcHRyZGlmZl90IHNyY19zdHJp ZGUsIGNvbnN0IFNBT1BhcmFtcyAqc2FvLAorICAgIGNvbnN0IGludCAqYm9yZGVycywgY29uc3Qg aW50IF93aWR0aCwgY29uc3QgaW50IF9oZWlnaHQsIGNvbnN0IGludCBjX2lkeCwKKyAgICBjb25z dCB1aW50OF90ICp2ZXJ0X2VkZ2UsIGNvbnN0IHVpbnQ4X3QgKmhvcml6X2VkZ2UsIGNvbnN0IHVp bnQ4X3QgKmRpYWdfZWRnZSkKK3sKKyAgICBpbnQgeCwgeTsKKyAgICBwaXhlbCAqZHN0ICAgICAg ICAgICAgICAgICAgICAgID0gKHBpeGVsICopX2RzdDsKKyAgICBjb25zdCBwaXhlbCAqc3JjICAg ICAgICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBpbnQxNl90ICpzYW9fb2Zm c2V0X3ZhbCAgID0gc2FvLT5vZmZzZXRfdmFsW2NfaWR4XTsKKyAgICBjb25zdCBpbnQgc2FvX2Vv X2NsYXNzICAgICAgICAgID0gc2FvLT5lb19jbGFzc1tjX2lkeF07CisgICAgaW50IGluaXRfeCA9 IDAsIGluaXRfeSA9IDAsIHdpZHRoID0gX3dpZHRoLCBoZWlnaHQgPSBfaGVpZ2h0OworCisgICAg ZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBp eGVsKTsKKworICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZFUlQpIHsKKyAgICAgICAg aWYgKGJvcmRlcnNbMF0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29mZnNl dF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAg ICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhlbChzcmNbeSAq IHNyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp bml0X3ggPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzJdKSB7CisgICAgICAg ICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgaW50 IG9mZnNldCAgICAgPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgaGVp Z2h0OyB4KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeCAqIGRzdF9zdHJpZGUgKyBvZmZzZXRd ID0gYXZfY2xpcF9waXhlbChzcmNbeCAqIHNyY19zdHJpZGUgKyBvZmZzZXRdICsgb2Zmc2V0X3Zh bCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aC0tOworICAgICAgICB9CisgICAg fQorICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAgICAgIGlmIChi b3JkZXJzWzFdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFs WzBdOworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgrKykKKyAgICAg ICAgICAgICAgICBkc3RbeF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNldF92YWwpOwor ICAgICAgICAgICAgaW5pdF95ID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm9yZGVyc1sz XSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgICA9IHNhb19vZmZzZXRfdmFsWzBdOwor ICAgICAgICAgICAgcHRyZGlmZl90IHlfZHN0X3N0cmlkZSA9IGRzdF9zdHJpZGUgKiAoaGVpZ2h0 IC0gMSk7CisgICAgICAgICAgICBwdHJkaWZmX3QgeV9zcmNfc3RyaWRlID0gc3JjX3N0cmlkZSAq IChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeDsgeCA8IHdpZHRoOyB4 KyspCisgICAgICAgICAgICAgICAgZHN0W3ggKyB5X2RzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhl bChzcmNbeCArIHlfc3JjX3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIGhlaWdo dC0tOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBpbnQgc2F2ZV91cHBlcl9s ZWZ0ICA9ICFkaWFnX2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEICYmICFi b3JkZXJzWzBdICYmICFib3JkZXJzWzFdOworICAgICAgICBpbnQgc2F2ZV91cHBlcl9yaWdodCA9 ICFkaWFnX2VkZ2VbMV0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQgICYmICFib3JkZXJz WzFdICYmICFib3JkZXJzWzJdOworICAgICAgICBpbnQgc2F2ZV9sb3dlcl9yaWdodCA9ICFkaWFn X2VkZ2VbMl0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEICYmICFib3JkZXJzWzJdICYm ICFib3JkZXJzWzNdOworICAgICAgICBpbnQgc2F2ZV9sb3dlcl9sZWZ0ICA9ICFkaWFnX2VkZ2Vb M10gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQgICYmICFib3JkZXJzWzBdICYmICFib3Jk ZXJzWzNdOworCisgICAgICAgIC8vIFJlc3RvcmUgcGl4ZWxzIHRoYXQgY2FuJ3QgYmUgbW9kaWZp ZWQKKyAgICAgICAgaWYgKHZlcnRfZWRnZVswXSAmJiBzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZF UlQpIHsKKyAgICAgICAgICAgIGZvciAoeSA9IGluaXRfeSArIHNhdmVfdXBwZXJfbGVmdDsgeSA8 IGhlaWdodCAtIHNhdmVfbG93ZXJfbGVmdDsgeSsrKQorICAgICAgICAgICAgICAgIGRzdFt5ICog ZHN0X3N0cmlkZV0gPSBzcmNbeSAqIHNyY19zdHJpZGVdOworICAgICAgICB9CisgICAgICAgIGlm ICh2ZXJ0X2VkZ2VbMV0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7CisgICAgICAg ICAgICBmb3IgKHkgPSBpbml0X3kgKyBzYXZlX3VwcGVyX3JpZ2h0OyB5IDwgaGVpZ2h0IC0gc2F2 ZV9sb3dlcl9yaWdodDsgeSsrKQorICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlkZSAr IHdpZHRoIC0gMV0gPSBzcmNbeSAqIHNyY19zdHJpZGUgKyB3aWR0aCAtIDFdOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKGhvcml6X2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19FT19I T1JJWikgeworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94ICsgc2F2ZV91cHBlcl9sZWZ0OyB4 IDwgd2lkdGggLSBzYXZlX3VwcGVyX3JpZ2h0OyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3hd ID0gc3JjW3hdOworICAgICAgICB9CisgICAgICAgIGlmIChob3Jpel9lZGdlWzFdICYmIHNhb19l b19jbGFzcyAhPSBTQU9fRU9fSE9SSVopIHsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeCAr IHNhdmVfbG93ZXJfbGVmdDsgeCA8IHdpZHRoIC0gc2F2ZV9sb3dlcl9yaWdodDsgeCsrKQorICAg ICAgICAgICAgICAgIGRzdFsoaGVpZ2h0IC0gMSkgKiBkc3Rfc3RyaWRlICsgeF0gPSBzcmNbKGhl aWdodCAtIDEpICogc3JjX3N0cmlkZSArIHhdOworICAgICAgICB9CisgICAgICAgIGlmIChkaWFn X2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEKQorICAgICAgICAgICAgZHN0 WzBdID0gc3JjWzBdOworICAgICAgICBpZiAoZGlhZ19lZGdlWzFdICYmIHNhb19lb19jbGFzcyA9 PSBTQU9fRU9fNDVEKQorICAgICAgICAgICAgZHN0W3dpZHRoIC0gMV0gPSBzcmNbd2lkdGggLSAx XTsKKyAgICAgICAgaWYgKGRpYWdfZWRnZVsyXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzEz NUQpCisgICAgICAgICAgICBkc3RbZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKSArIHdpZHRoIC0g MV0gPSBzcmNbc3JjX3N0cmlkZSAqIChoZWlnaHQgLSAxKSArIHdpZHRoIC0gMV07CisgICAgICAg IGlmIChkaWFnX2VkZ2VbM10gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQpCisgICAgICAg ICAgICBkc3RbZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKV0gPSBzcmNbc3JjX3N0cmlkZSAqICho ZWlnaHQgLSAxKV07CisKKyAgICB9Cit9CisKKyN1bmRlZiBDTVAKKworc3RhdGljIGF2X2Fsd2F5 c19pbmxpbmUgaW50MTZfdCBGVU5DKGFsZl9jbGlwKShwaXhlbCBjdXJyLCBwaXhlbCB2MCwgcGl4 ZWwgdjEsIGludDE2X3QgY2xpcCkKK3sKKyAgICByZXR1cm4gYXZfY2xpcCh2MCAtIGN1cnIsIC1j bGlwLCBjbGlwKSArIGF2X2NsaXAodjEgLSBjdXJyLCAtY2xpcCwgY2xpcCk7Cit9CisKK3N0YXRp YyB2b2lkIEZVTkMoYWxmX2ZpbHRlcl9sdW1hKSh1aW50OF90ICpfZHN0LCBwdHJkaWZmX3QgZHN0 X3N0cmlkZSwgY29uc3QgdWludDhfdCAqX3NyYywgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAg Y29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQxNl90ICpmaWx0ZXIs IGNvbnN0IGludDE2X3QgKmNsaXAsIGNvbnN0IGludCB2Yl9wb3MpCit7CisgICAgY29uc3QgcGl4 ZWwgKnNyYyAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgaW50IHNoaWZ0ICAgICA9IDc7 CisgICAgY29uc3QgaW50IG9mZnNldCAgICA9IDEgPDwgKCBzaGlmdCAtIDEgKTsKKyAgICBjb25z dCBpbnQgdmJfYWJvdmUgID0gdmJfcG9zIC0gNDsKKyAgICBjb25zdCBpbnQgdmJfYmVsb3cgID0g dmJfcG9zICsgMzsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBzcmNf c3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo dDsgeSArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp ZHRoOyB4ICs9IEFMRl9CTE9DS19TSVpFKSB7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczAg PSBzcmMgKyB5ICogc3JjX3N0cmlkZSArIHg7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczEg PSBzMCArIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczIgPSBzMCAtIHNy Y19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczMgPSBzMSArIHNyY19zdHJpZGU7 CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczQgPSBzMiAtIHNyY19zdHJpZGU7CisgICAgICAg ICAgICBjb25zdCBwaXhlbCAqczUgPSBzMyArIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25z dCBwaXhlbCAqczYgPSBzNCAtIHNyY19zdHJpZGU7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgQUxGX0JMT0NLX1NJWkU7IGkrKykgeworICAgICAgICAgICAgICAgIHBpeGVsICpk c3QgPSAocGl4ZWwgKilfZHN0ICsgKHkgKyBpKSAqIGRzdF9zdHJpZGUgKyB4OworCisgICAgICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnAwID0gczAgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAg ICAgICAgICBjb25zdCBwaXhlbCAqcDEgPSBzMSArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpwMiA9IHMyICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAg ICAgICAgY29uc3QgcGl4ZWwgKnAzID0gczMgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAg ICAgICBjb25zdCBwaXhlbCAqcDQgPSBzNCArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAg ICAgIGNvbnN0IHBpeGVsICpwNSA9IHM1ICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAg ICAgY29uc3QgcGl4ZWwgKnA2ID0gczYgKyBpICogc3JjX3N0cmlkZTsKKworICAgICAgICAgICAg ICAgIGNvbnN0IGludCBpc19uZWFyX3ZiX2Fib3ZlID0gKHkgKyBpIDwgIHZiX3BvcykgJiYgKHkg KyBpID49IHZiX3BvcyAtIDEpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3Zi X2JlbG93ID0gKHkgKyBpID49IHZiX3BvcykgJiYgKHkgKyBpIDw9IHZiX3Bvcyk7CisgICAgICAg ICAgICAgICAgY29uc3QgaW50IGlzX25lYXJfdmIgPSBpc19uZWFyX3ZiX2Fib3ZlIHx8IGlzX25l YXJfdmJfYmVsb3c7CisKKyAgICAgICAgICAgICAgICBpZiAoKHkgKyBpIDwgdmJfcG9zKSAmJiAo KHkgKyBpKSA+PSB2Yl9hYm92ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcDEgPSAoeSArIGkg PT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAxOworICAgICAgICAgICAgICAgICAgICBwMyA9ICh5ICsg aSA+PSB2Yl9wb3MgLSAyKSA/IHAxIDogcDM7CisgICAgICAgICAgICAgICAgICAgIHA1ID0gKHkg KyBpID49IHZiX3BvcyAtIDMpID8gcDMgOiBwNTsKKworICAgICAgICAgICAgICAgICAgICBwMiA9 ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/IHAwIDogcDI7CisgICAgICAgICAgICAgICAgICAgIHA0 ID0gKHkgKyBpID49IHZiX3BvcyAtIDIpID8gcDIgOiBwNDsKKyAgICAgICAgICAgICAgICAgICAg cDYgPSAoeSArIGkgPj0gdmJfcG9zIC0gMykgPyBwNCA6IHA2OworICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoKHkgKyBpID49IHZiX3BvcykgJiYgKCh5ICsgaSkgPD0gdmJfYmVsb3cpKSB7Cisg ICAgICAgICAgICAgICAgICAgIHAyID0gKHkgKyBpID09IHZiX3BvcyAgICApID8gcDAgOiBwMjsK KyAgICAgICAgICAgICAgICAgICAgcDQgPSAoeSArIGkgPD0gdmJfcG9zICsgMSkgPyBwMiA6IHA0 OworICAgICAgICAgICAgICAgICAgICBwNiA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHA0IDog cDY7CisKKyAgICAgICAgICAgICAgICAgICAgcDEgPSAoeSArIGkgPT0gdmJfcG9zICAgICkgPyBw MCA6IHAxOworICAgICAgICAgICAgICAgICAgICBwMyA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAxKSA/ IHAxIDogcDM7CisgICAgICAgICAgICAgICAgICAgIHA1ID0gKHkgKyBpIDw9IHZiX3BvcyArIDIp ID8gcDMgOiBwNTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGlu dCBqID0gMDsgaiA8IEFMRl9CTE9DS19TSVpFOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAg aW50IHN1bSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIGN1cnIgPSAqcDA7 CisKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclswXSAgKiBGVU5DKGFsZl9jbGlw KShjdXJyLCBwNVsrMF0sIHA2WyswXSwgY2xpcFswXSk7CisgICAgICAgICAgICAgICAgICAgIHN1 bSArPSBmaWx0ZXJbMV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDNbKzFdLCBwNFstMV0sIGNs aXBbMV0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzJdICAqIEZVTkMoYWxm X2NsaXApKGN1cnIsIHAzWyswXSwgcDRbKzBdLCBjbGlwWzJdKTsKKyAgICAgICAgICAgICAgICAg ICAgc3VtICs9IGZpbHRlclszXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1stMV0sIHA0Wysx XSwgY2xpcFszXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNF0gICogRlVO QyhhbGZfY2xpcCkoY3VyciwgcDFbKzJdLCBwMlstMl0sIGNsaXBbNF0pOworICAgICAgICAgICAg ICAgICAgICBzdW0gKz0gZmlsdGVyWzVdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWysxXSwg cDJbLTFdLCBjbGlwWzVdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls2XSAg KiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMF0sIHAyWyswXSwgY2xpcFs2XSk7CisgICAgICAg ICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbN10gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFb LTFdLCBwMlsrMV0sIGNsaXBbN10pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzhdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWy0yXSwgcDJbKzJdLCBjbGlwWzhdKTsKKyAg ICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls5XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJy LCBwMFsrM10sIHAwWy0zXSwgY2xpcFs5XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbMTBdICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzJdLCBwMFstMl0sIGNsaXBbMTBd KTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclsxMV0gKiBGVU5DKGFsZl9jbGlw KShjdXJyLCBwMFsrMV0sIHAwWy0xXSwgY2xpcFsxMV0pOworCisgICAgICAgICAgICAgICAgICAg IGlmICghaXNfbmVhcl92YikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IChzdW0gKyBv ZmZzZXQpID4+IHNoaWZ0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgICAgICAgICBzdW0gPSAoc3VtICsgKDEgPDwgKChzaGlmdCArIDMpIC0gMSkpKSA+PiAoc2hp ZnQgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGN1cnI7CisgICAgICAgICAgICAg ICAgICAgIGRzdFtqXSA9IENMSVAoc3VtKTsKKworICAgICAgICAgICAgICAgICAgICBwMCsrOwor ICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAgICAgICAgICAgICAgICBwMisrOworICAg ICAgICAgICAgICAgICAgICBwMysrOworICAgICAgICAgICAgICAgICAgICBwNCsrOworICAgICAg ICAgICAgICAgICAgICBwNSsrOworICAgICAgICAgICAgICAgICAgICBwNisrOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciArPSBBTEZfTlVNX0NP RUZGX0xVTUE7CisgICAgICAgICAgICBjbGlwICs9IEFMRl9OVU1fQ09FRkZfTFVNQTsKKyAgICAg ICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2Nocm9tYSkodWlu dDhfdCogX2RzdCwgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QqIF9zcmMsIHB0 cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdo dCwgY29uc3QgaW50MTZfdCogZmlsdGVyLCBjb25zdCBpbnQxNl90KiBjbGlwLCBjb25zdCBpbnQg dmJfcG9zKQoreworICAgIGNvbnN0IHBpeGVsICpzcmMgPSAocGl4ZWwgKilfc3JjOworICAgIGNv bnN0IGludCBzaGlmdCAgPSA3OworICAgIGNvbnN0IGludCBvZmZzZXQgPSAxIDw8ICggc2hpZnQg LSAxICk7CisgICAgY29uc3QgaW50IHZiX2Fib3ZlICA9IHZiX3BvcyAtIDI7CisgICAgY29uc3Qg aW50IHZiX2JlbG93ICA9IHZiX3BvcyArIDE7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihw aXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQg eSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAgZm9yIChp bnQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnMwID0gc3JjICsgeSAqIHNyY19zdHJpZGUgKyB4OworICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnMxID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4 ZWwgKnMyID0gczAgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMzID0g czEgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM0ID0gczIgLSBzcmNf c3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM1ID0gczMgKyBzcmNfc3RyaWRlOwor ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM2ID0gczQgLSBzcmNfc3RyaWRlOworCisgICAgICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IEFMRl9CTE9DS19TSVpFOyBpKyspIHsKKyAgICAgICAg ICAgICAgICBwaXhlbCAqZHN0ID0gKHBpeGVsICopX2RzdCArICh5ICsgaSkgKiBkc3Rfc3RyaWRl ICsgeDsKKworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCA9IHMwICsgaSAqIHNyY19z dHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxID0gczEgKyBpICogc3JjX3N0 cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDIgPSBzMiArIGkgKiBzcmNfc3Ry aWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMyA9IHMzICsgaSAqIHNyY19zdHJp ZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA0ID0gczQgKyBpICogc3JjX3N0cmlk ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDUgPSBzNSArIGkgKiBzcmNfc3RyaWRl OworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNiA9IHM2ICsgaSAqIHNyY19zdHJpZGU7 CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9hYm92ZSA9ICh5ICsgaSA8 ICB2Yl9wb3MpICYmICh5ICsgaSA+PSB2Yl9wb3MgLSAxKTsKKyAgICAgICAgICAgICAgICBjb25z dCBpbnQgaXNfbmVhcl92Yl9iZWxvdyA9ICh5ICsgaSA+PSB2Yl9wb3MpICYmICh5ICsgaSA8PSB2 Yl9wb3MpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiID0gaXNfbmVhcl92 Yl9hYm92ZSB8fCBpc19uZWFyX3ZiX2JlbG93OworCisgICAgICAgICAgICAgICAgaWYgKCh5ICsg aSA8IHZiX3BvcykgJiYgKCh5ICsgaSkgPj0gdmJfYWJvdmUpKSB7CisgICAgICAgICAgICAgICAg ICAgIHAxID0gKHkgKyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAg ICAgICAgcDMgPSAoeSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMSA6IHAzOworICAgICAgICAgICAg ICAgICAgICBwNSA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHAzIDogcDU7CisKKyAgICAgICAg ICAgICAgICAgICAgcDIgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAyOworICAgICAg ICAgICAgICAgICAgICBwNCA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAyIDogcDQ7CisgICAg ICAgICAgICAgICAgICAgIHA2ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDQgOiBwNjsKKyAg ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh5ICsgaSA+PSB2Yl9wb3MpICYmICgoeSArIGkpIDw9 IHZiX2JlbG93KSkgeworICAgICAgICAgICAgICAgICAgICBwMiA9ICh5ICsgaSA9PSB2Yl9wb3Mg ICAgKSA/IHAwIDogcDI7CisgICAgICAgICAgICAgICAgICAgIHA0ID0gKHkgKyBpIDw9IHZiX3Bv cyArIDEpID8gcDIgOiBwNDsKKyAgICAgICAgICAgICAgICAgICAgcDYgPSAoeSArIGkgPD0gdmJf cG9zICsgMikgPyBwNCA6IHA2OworCisgICAgICAgICAgICAgICAgICAgIHAxID0gKHkgKyBpID09 IHZiX3BvcyAgICApID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAgICAgICAgcDMgPSAoeSArIGkg PD0gdmJfcG9zICsgMSkgPyBwMSA6IHAzOworICAgICAgICAgICAgICAgICAgICBwNSA9ICh5ICsg aSA8PSB2Yl9wb3MgKyAyKSA/IHAzIDogcDU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBBTEZfQkxPQ0tfU0laRTsgaisrKSB7CisgICAg ICAgICAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgICAgICAgICBjb25zdCBw aXhlbCBjdXJyID0gKnAwOworCisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMF0g ICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDNbKzBdLCBwNFsrMF0sIGNsaXBbMF0pOworICAgICAg ICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAx WysxXSwgcDJbLTFdLCBjbGlwWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRl clsyXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMF0sIHAyWyswXSwgY2xpcFsyXSk7Cisg ICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbM10gICogRlVOQyhhbGZfY2xpcCkoY3Vy ciwgcDFbLTFdLCBwMlsrMV0sIGNsaXBbM10pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0g ZmlsdGVyWzRdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAwWysyXSwgcDBbLTJdLCBjbGlwWzRd KTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls1XSAgKiBGVU5DKGFsZl9jbGlw KShjdXJyLCBwMFsrMV0sIHAwWy0xXSwgY2xpcFs1XSk7CisKKyAgICAgICAgICAgICAgICAgICAg aWYgKCFpc19uZWFyX3ZiKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSArIG9m ZnNldCkgPj4gc2hpZnQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN1bSA9IChzdW0gKyAoMSA8PCAoKHNoaWZ0ICsgMykgLSAxKSkpID4+IChzaGlm dCArIDMpOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gY3VycjsKKyAgICAgICAgICAgICAg ICAgICAgZHN0W2pdID0gQ0xJUChzdW0pOworCisgICAgICAgICAgICAgICAgICAgIHAwKys7Cisg ICAgICAgICAgICAgICAgICAgIHAxKys7CisgICAgICAgICAgICAgICAgICAgIHAyKys7CisgICAg ICAgICAgICAgICAgICAgIHAzKys7CisgICAgICAgICAgICAgICAgICAgIHA0Kys7CisgICAgICAg ICAgICAgICAgICAgIHA1Kys7CisgICAgICAgICAgICAgICAgICAgIHA2Kys7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBGVU5DKGFsZl9maWx0ZXJfY2MpKHVpbnQ4X3QgKl9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRl LCBjb25zdCB1aW50OF90ICpfbHVtYSwgY29uc3QgcHRyZGlmZl90IGx1bWFfc3RyaWRlLAorICAg IGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IGhzLCBjb25zdCBp bnQgdnMsIGNvbnN0IGludDE2X3QgKmZpbHRlciwgY29uc3QgaW50IHZiX3BvcykKK3sKKyAgICBj b25zdCBwdHJkaWZmX3Qgc3RyaWRlID0gbHVtYV9zdHJpZGUgLyBzaXplb2YocGl4ZWwpOworCisg ICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkg PCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp IHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgcGl4ZWwgKmRzdCAgPSAo cGl4ZWwgKilfZHN0ICArIHkgKiBkc3Rfc3RyaWRlICsgeDsKKyAgICAgICAgICAgIGNvbnN0IHBp eGVsICpzcmMgID0gKHBpeGVsICopX2x1bWEgKyAoeSA8PCB2cykgKiBzdHJpZGUgKyAoeCA8PCBo cyk7CisKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMCA9IHNyYyAtIHN0cmlkZTsKKyAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpzMSA9IHNyYzsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpz MiA9IHNyYyArIHN0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMyA9IHNyYyArIDIg KiBzdHJpZGU7CisKKyAgICAgICAgICAgIGNvbnN0IGludCBwb3MgPSB5IDw8IHZzOworICAgICAg ICAgICAgaWYgKCF2cyAmJiAocG9zID09IHZiX3BvcyB8fCBwb3MgPT0gdmJfcG9zICsgMSkpCisg ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChwb3MgPT0gKHZiX3Bv cyAtIDIpIHx8IHBvcyA9PSAodmJfcG9zICsgMSkpCisgICAgICAgICAgICAgICAgczMgPSBzMjsK KyAgICAgICAgICAgIGVsc2UgIGlmIChwb3MgPT0gKHZiX3BvcyAtIDEpIHx8IHBvcyA9PSB2Yl9w b3MpCisgICAgICAgICAgICAgICAgczMgPSBzMiA9IHMwID0gczE7CisKKworICAgICAgICAgICAg c3VtICs9IGZpbHRlclswXSAqICgqczAgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0 ZXJbMV0gKiAoKihzMSAtIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzJd ICogKCooczEgKyAxKSAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRlclszXSAqICgq KHMyIC0gMSkgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNF0gKiAoKnMyIC0g KnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzVdICogKCooczIgKyAxKSAtICpzcmMp OworICAgICAgICAgICAgc3VtICs9IGZpbHRlcls2XSAqICgqczMgLSAqc3JjKTsKKyAgICAgICAg ICAgIHN1bSA9IGF2X2NsaXAoKHN1bSArIDY0KSA+PiA3LCAtKDEgPDwgKEJJVF9ERVBUSCAtIDEp KSwgKDEgPDwgKEJJVF9ERVBUSCAtIDEpKSAtIDEpOworICAgICAgICAgICAgc3VtICs9ICpkc3Q7 CisgICAgICAgICAgICAqZHN0ID0gYXZfY2xpcF9waXhlbChzdW0pOworICAgICAgICB9CisgICAg fQorfQorCisjZGVmaW5lIEFMRl9ESVJfVkVSVCAgICAgICAgMAorI2RlZmluZSBBTEZfRElSX0hP UlogICAgICAgIDEKKyNkZWZpbmUgQUxGX0RJUl9ESUdBMCAgICAgICAyCisjZGVmaW5lIEFMRl9E SVJfRElHQTEgICAgICAgMworCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9nZXRfaWR4KShpbnQgKmNs YXNzX2lkeCwgaW50ICp0cmFuc3Bvc2VfaWR4LCBjb25zdCBpbnQgKnN1bSwgY29uc3QgaW50IGFj KQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgYXJnX3ZhcltdID0gezAsIDEsIDIsIDIsIDIsIDIs IDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDQgfTsKKworICAgIGludCBodjAsIGh2MSwgZGly X2h2LCBkMCwgZDEsIGRpcl9kLCBodmQxLCBodmQwLCBzdW1faHYsIGRpcjE7CisKKyAgICBkaXJf aHYgPSBzdW1bQUxGX0RJUl9WRVJUXSA8PSBzdW1bQUxGX0RJUl9IT1JaXTsKKyAgICBodjEgICAg PSBGRk1BWChzdW1bQUxGX0RJUl9WRVJUXSwgc3VtW0FMRl9ESVJfSE9SWl0pOworICAgIGh2MCAg ICA9IEZGTUlOKHN1bVtBTEZfRElSX1ZFUlRdLCBzdW1bQUxGX0RJUl9IT1JaXSk7CisKKyAgICBk aXJfZCAgPSBzdW1bQUxGX0RJUl9ESUdBMF0gPD0gc3VtW0FMRl9ESVJfRElHQTFdOworICAgIGQx ICAgICA9IEZGTUFYKHN1bVtBTEZfRElSX0RJR0EwXSwgc3VtW0FMRl9ESVJfRElHQTFdKTsKKyAg ICBkMCAgICAgPSBGRk1JTihzdW1bQUxGX0RJUl9ESUdBMF0sIHN1bVtBTEZfRElSX0RJR0ExXSk7 CisKKyAgICAvL3Byb21vdGUgdG8gYXZvaWQgb3ZlcmZsb3cKKyAgICBkaXIxID0gKHVpbnQ2NF90 KWQxICogaHYwIDw9ICh1aW50NjRfdClodjEgKiBkMDsKKyAgICBodmQxID0gZGlyMSA/IGh2MSA6 IGQxOworICAgIGh2ZDAgPSBkaXIxID8gaHYwIDogZDA7CisKKyAgICBzdW1faHYgPSBzdW1bQUxG X0RJUl9IT1JaXSArIHN1bVtBTEZfRElSX1ZFUlRdOworICAgICpjbGFzc19pZHggPSBhcmdfdmFy W2F2X2NsaXBfdWludHAyKHN1bV9odiAqIGFjID4+IChCSVRfREVQVEggLSAxKSwgNCldOworICAg IGlmIChodmQxICogMiA+IDkgKiBodmQwKQorICAgICAgICAqY2xhc3NfaWR4ICs9ICgoZGlyMSA8 PCAxKSArIDIpICogNTsKKyAgICBlbHNlIGlmIChodmQxID4gMiAqIGh2ZDApCisgICAgICAgICpj bGFzc19pZHggKz0gKChkaXIxIDw8IDEpICsgMSkgKiA1OworCisgICAgKnRyYW5zcG9zZV9pZHgg PSBkaXJfZCAqIDIgKyBkaXJfaHY7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2NsYXNzaWZ5 KShpbnQgKmNsYXNzX2lkeCwgaW50ICp0cmFuc3Bvc2VfaWR4LAorICAgIGNvbnN0IHVpbnQ4X3Qg Kl9zcmMsIGNvbnN0IHB0cmRpZmZfdCBfc3JjX3N0cmlkZSwgY29uc3QgaW50IHdpZHRoLCBjb25z dCBpbnQgaGVpZ2h0LAorICAgIGNvbnN0IGludCB2Yl9wb3MsIGludCAqZ3JhZGllbnRfdG1wKQor eworICAgIGludCAqZ3JhZDsKKworICAgIGNvbnN0IGludCBoID0gaGVpZ2h0ICsgQUxGX0dSQURJ RU5UX0JPUkRFUiAqIDI7CisgICAgY29uc3QgaW50IHcgPSB3aWR0aCAgKyBBTEZfR1JBRElFTlRf Qk9SREVSICogMjsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IChBTEZfQkxPQ0tfU0laRSArIEFMRl9H UkFESUVOVF9CT1JERVIgKiAyKSAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgIGNvbnN0IGludCBn c3RyaWRlID0gKHcgLyBBTEZfR1JBRElFTlRfU1RFUCkgKiBBTEZfTlVNX0RJUjsKKworICAgIGNv bnN0IHBpeGVsICpzcmMgICAgICAgICAgID0gKGNvbnN0IHBpeGVsICopX3NyYzsKKyAgICBjb25z dCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSA9IF9zcmNfc3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAg ICBzcmMgLT0gKEFMRl9HUkFESUVOVF9CT1JERVIgKyAxKSAqIHNyY19zdHJpZGUgKyBBTEZfR1JB RElFTlRfQk9SREVSOworCisgICAgZ3JhZCA9IGdyYWRpZW50X3RtcDsKKyAgICBmb3IgKGludCB5 ID0gMDsgeSA8IGg7IHkgKz0gQUxGX0dSQURJRU5UX1NURVApIHsKKyAgICAgICAgY29uc3QgcGl4 ZWwgKnMwICA9IHNyYyArIHkgKiBzcmNfc3RyaWRlOworICAgICAgICBjb25zdCBwaXhlbCAqczEg ID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICBjb25zdCBwaXhlbCAqczIgID0gczEgKyBzcmNf c3RyaWRlOworICAgICAgICBjb25zdCBwaXhlbCAqczMgID0gczIgKyBzcmNfc3RyaWRlOworCisg ICAgICAgIGlmICh5ID09IHZiX3BvcykgICAgICAgICAgLy9hYm92ZQorICAgICAgICAgICAgczMg PSBzMjsKKyAgICAgICAgZWxzZSBpZiAoeSA9PSB2Yl9wb3MgKyBBTEZfR1JBRElFTlRfQk9SREVS KQorICAgICAgICAgICAgczAgPSBzMTsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7 IHggKz0gQUxGX0dSQURJRU5UX1NURVApIHsKKyAgICAgICAgICAgIC8vdHdvIHBvaW50cyBhIHRp bWUKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICphMCAgPSBzMCArIHg7CisgICAgICAgICAgICBj b25zdCBwaXhlbCAqcDAgID0gczEgKyB4OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmIwICA9 IHMyICsgeDsKKyAgICAgICAgICAgIGNvbnN0IGludCB2YWwwICAgPSAoKnAwKSA8PCAxOworCisg ICAgICAgICAgICBjb25zdCBwaXhlbCAqYTEgID0gczEgKyB4ICsgMTsKKyAgICAgICAgICAgIGNv bnN0IHBpeGVsICpwMSAgPSBzMiArIHggKyAxOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmIx ICA9IHMzICsgeCArIDE7CisgICAgICAgICAgICBjb25zdCBpbnQgdmFsMSAgID0gKCpwMSkgPDwg MTsKKworICAgICAgICAgICAgZ3JhZFtBTEZfRElSX1ZFUlRdICA9IEZGQUJTKHZhbDAgLSAqYTAg LSAqYjApICsgRkZBQlModmFsMSAtICphMSAtICpiMSk7CisgICAgICAgICAgICBncmFkW0FMRl9E SVJfSE9SWl0gID0gRkZBQlModmFsMCAtICoocDAgLSAxKSAtICoocDAgKyAxKSkgKyBGRkFCUyh2 YWwxIC0gKihwMSAtIDEpIC0gKihwMSArIDEpKTsKKyAgICAgICAgICAgIGdyYWRbQUxGX0RJUl9E SUdBMF0gPSBGRkFCUyh2YWwwIC0gKihhMCAtIDEpIC0gKihiMCArIDEpKSArIEZGQUJTKHZhbDEg LSAqKGExIC0gMSkgLSAqKGIxICsgMSkpOworICAgICAgICAgICAgZ3JhZFtBTEZfRElSX0RJR0Ex XSA9IEZGQUJTKHZhbDAgLSAqKGEwICsgMSkgLSAqKGIwIC0gMSkpICsgRkZBQlModmFsMSAtICoo YTEgKyAxKSAtICooYjEgLSAxKSk7CisgICAgICAgICAgICBncmFkICs9IEFMRl9OVU1fRElSOwor ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgOyB5ICs9 IEFMRl9CTE9DS19TSVpFICkgeworICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBpbnQg ZW5kICAgPSAoQUxGX0JMT0NLX1NJWkUgKyBBTEZfR1JBRElFTlRfQk9SREVSICogMikgLyBBTEZf R1JBRElFTlRfU1RFUDsKKyAgICAgICAgaW50IGFjICAgID0gMjsKKyAgICAgICAgaWYgKHkgKyBB TEZfQkxPQ0tfU0laRSA9PSB2Yl9wb3MpIHsKKyAgICAgICAgICAgIGVuZCAtPSBBTEZfR1JBRElF TlRfQk9SREVSIC8gQUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgICAgICBhYyA9IDM7CisgICAg ICAgIH0gZWxzZSBpZiAoeSA9PSB2Yl9wb3MpIHsKKyAgICAgICAgICAgIHN0YXJ0ICs9IEFMRl9H UkFESUVOVF9CT1JERVIgLyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICAgICAgICAgIGFjID0gMzsK KyAgICAgICAgfQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IEFMRl9C TE9DS19TSVpFKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgeGcgPSB4IC8gQUxGX0dSQURJRU5U X1NURVA7CisgICAgICAgICAgICBjb25zdCBpbnQgeWcgPSB5IC8gQUxGX0dSQURJRU5UX1NURVA7 CisgICAgICAgICAgICBpbnQgc3VtW0FMRl9OVU1fRElSXSA9IHsgMCB9OworCisgICAgICAgICAg ICBncmFkID0gZ3JhZGllbnRfdG1wICsgKHlnICsgc3RhcnQpICogZ3N0cmlkZSArIHhnICogQUxG X05VTV9ESVI7CisgICAgICAgICAgICAvL3RvZG86IG9wdGltaXplIHRoaXMgbG9vcAorICAgICAg ICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKyAgICAgICAgICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICBz dW1bQUxGX0RJUl9WRVJUXSAgKz0gZ3JhZFtBTEZfRElSX1ZFUlRdOworICAgICAgICAgICAgICAg ICAgICBzdW1bQUxGX0RJUl9IT1JaXSAgKz0gZ3JhZFtBTEZfRElSX0hPUlpdOworICAgICAgICAg ICAgICAgICAgICBzdW1bQUxGX0RJUl9ESUdBMF0gKz0gZ3JhZFtBTEZfRElSX0RJR0EwXTsKKyAg ICAgICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfRElHQTFdICs9IGdyYWRbQUxGX0RJUl9ESUdB MV07CisgICAgICAgICAgICAgICAgICAgIGdyYWQgKz0gQUxGX05VTV9ESVI7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGdyYWQgKz0gZ3N0cmlkZSAtIHNpemUgKiBBTEZfTlVN X0RJUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZVTkMoYWxmX2dldF9pZHgpKGNsYXNz X2lkeCwgdHJhbnNwb3NlX2lkeCwgc3VtLCBhYyk7CisKKyAgICAgICAgICAgIGNsYXNzX2lkeCsr OworICAgICAgICAgICAgdHJhbnNwb3NlX2lkeCsrOworICAgICAgICB9CisgICAgfQorCit9CisK K3N0YXRpYyB2b2lkIEZVTkMoYWxmX3JlY29uX2NvZWZmX2FuZF9jbGlwKShpbnQxNl90ICpjb2Vm ZiwgaW50MTZfdCAqY2xpcCwKKyAgICBjb25zdCBpbnQgKmNsYXNzX2lkeCwgY29uc3QgaW50ICp0 cmFuc3Bvc2VfaWR4LCBjb25zdCBpbnQgc2l6ZSwKKyAgICBjb25zdCBpbnQxNl90ICpjb2VmZl9z ZXQsIGNvbnN0IHVpbnQ4X3QgKmNsaXBfaWR4X3NldCwgY29uc3QgdWludDhfdCAqY2xhc3NfdG9f ZmlsdCkKK3sKKyAgICBjb25zdCBzdGF0aWMgaW50IGluZGV4W11bQUxGX05VTV9DT0VGRl9MVU1B XSA9IHsKKyAgICAgICAgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEgfSwK KyAgICAgICAgeyA5LCA0LCAxMCwgOCwgMSwgNSwgMTEsIDcsIDMsIDAsIDIsIDYgfSwKKyAgICAg ICAgeyAwLCAzLCAyLCAxLCA4LCA3LCA2LCA1LCA0LCA5LCAxMCwgMTEgfSwKKyAgICAgICAgeyA5 LCA4LCAxMCwgNCwgMywgNywgMTEsIDUsIDEsIDAsIDIsIDYgfSwKKyAgICB9OworCisgICAgY29u c3QgaW50MTZfdCBjbGlwX3NldFtdID0geworICAgICAgICAxIDw8IEJJVF9ERVBUSCwgMSA8PCAo QklUX0RFUFRIIC0gMyksIDEgPDwgKEJJVF9ERVBUSCAtIDUpLCAxIDw8IChCSVRfREVQVEggLSA3 KQorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAg ICBjb25zdCBpbnQxNl90ICAqc3JjX2NvZWZmID0gY29lZmZfc2V0ICsgY2xhc3NfdG9fZmlsdFtj bGFzc19pZHhbaV1dICogQUxGX05VTV9DT0VGRl9MVU1BOworICAgICAgICBjb25zdCB1aW50OF90 ICpjbGlwX2lkeCAgPSBjbGlwX2lkeF9zZXQgKyBjbGFzc19pZHhbaV0gKiBBTEZfTlVNX0NPRUZG X0xVTUE7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBBTEZfTlVNX0NPRUZGX0xVTUE7 IGorKykgeworICAgICAgICAgICAgY29uc3QgaW50IGlkeCA9IGluZGV4W3RyYW5zcG9zZV9pZHhb aV1dW2pdOworICAgICAgICAgICAgKmNvZWZmKysgPSBzcmNfY29lZmZbaWR4XTsKKyAgICAgICAg ICAgICpjbGlwKysgID0gY2xpcF9zZXRbY2xpcF9pZHhbaWR4XV07CisgICAgICAgIH0KKyAgICB9 Cit9CisKKyN1bmRlZiBBTEZfRElSX0hPUloKKyN1bmRlZiBBTEZfRElSX1ZFUlQKKyN1bmRlZiBB TEZfRElSX0RJR0EwCisjdW5kZWYgQUxGX0RJUl9ESUdBMQorCisvLyBsaW5lIHplcm8KKyNkZWZp bmUgUDcgcGl4Wy04ICogeHN0cmlkZV0KKyNkZWZpbmUgUDYgcGl4Wy03ICogeHN0cmlkZV0KKyNk ZWZpbmUgUDUgcGl4Wy02ICogeHN0cmlkZV0KKyNkZWZpbmUgUDQgcGl4Wy01ICogeHN0cmlkZV0K KyNkZWZpbmUgUDMgcGl4Wy00ICogeHN0cmlkZV0KKyNkZWZpbmUgUDIgcGl4Wy0zICogeHN0cmlk ZV0KKyNkZWZpbmUgUDEgcGl4Wy0yICogeHN0cmlkZV0KKyNkZWZpbmUgUDAgcGl4Wy0xICogeHN0 cmlkZV0KKyNkZWZpbmUgUTAgcGl4WzAgKiB4c3RyaWRlXQorI2RlZmluZSBRMSBwaXhbMSAqIHhz dHJpZGVdCisjZGVmaW5lIFEyIHBpeFsyICogeHN0cmlkZV0KKyNkZWZpbmUgUTMgcGl4WzMgKiB4 c3RyaWRlXQorI2RlZmluZSBRNCBwaXhbNCAqIHhzdHJpZGVdCisjZGVmaW5lIFE1IHBpeFs1ICog eHN0cmlkZV0KKyNkZWZpbmUgUTYgcGl4WzYgKiB4c3RyaWRlXQorI2RlZmluZSBRNyBwaXhbNyAq IHhzdHJpZGVdCisjZGVmaW5lIFAoeCkgcGl4WygtKHgpLTEpICogeHN0cmlkZV0KKyNkZWZpbmUg USh4KSBwaXhbKHgpICAgICAgKiB4c3RyaWRlXQorCisvLyBsaW5lIHRocmVlLiB1c2VkIG9ubHkg Zm9yIGRlYmxvY2tpbmcgZGVjaXNpb24KKyNkZWZpbmUgVFA3IHBpeFstOCAqIHhzdHJpZGUgKyAz ICogeXN0cmlkZV0KKyNkZWZpbmUgVFA2IHBpeFstNyAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0K KyNkZWZpbmUgVFA1IHBpeFstNiAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFA0 IHBpeFstNSAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFAzIHBpeFstNCAqIHhz dHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFAyIHBpeFstMyAqIHhzdHJpZGUgKyAzICog eXN0cmlkZV0KKyNkZWZpbmUgVFAxIHBpeFstMiAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNk ZWZpbmUgVFAwIHBpeFstMSAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFEwIHBp eFswICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFExIHBpeFsxICAqIHhzdHJp ZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFEyIHBpeFsyICAqIHhzdHJpZGUgKyAzICogeXN0 cmlkZV0KKyNkZWZpbmUgVFEzIHBpeFszICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZp bmUgVFE0IHBpeFs0ICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFE1IHBpeFs1 ICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFE2IHBpeFs2ICAqIHhzdHJpZGUg KyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFE3IHBpeFs3ICAqIHhzdHJpZGUgKyAzICogeXN0cmlk ZV0KKyNkZWZpbmUgVFAoeCkgcGl4WygtKHgpLTEpICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQor I2RlZmluZSBUUSh4KSBwaXhbKHgpICAgICAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisKKyNk ZWZpbmUgRlAzIHBpeFstNCAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlAyIHBp eFstMyAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlAxIHBpeFstMiAqIHhzdHJp ZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlAwIHBpeFstMSAqIHhzdHJpZGUgKyAxICogeXN0 cmlkZV0KKyNkZWZpbmUgRlEwIHBpeFswICAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZp bmUgRlExIHBpeFsxICAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlEyIHBpeFsy ICAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlEzIHBpeFszICAqIHhzdHJpZGUg KyAxICogeXN0cmlkZV0KKworc3RhdGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9sdW1hX2xhcmdl KShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IHlz dHJpZGUsIGNvbnN0IGludDMyX3QgdGMsCisgICAgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1 aW50OF90IG5vX3EsIGNvbnN0IHVpbnQ4X3QgbWF4X2xlbl9wLCBjb25zdCB1aW50OF90IG1heF9s ZW5fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICBjb25z dCBpbnQgcDYgPSBQNjsKKyAgICAgICAgY29uc3QgaW50IHA1ID0gUDU7CisgICAgICAgIGNvbnN0 IGludCBwNCA9IFA0OworICAgICAgICBjb25zdCBpbnQgcDMgPSBQMzsKKyAgICAgICAgY29uc3Qg aW50IHAyID0gUDI7CisgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBjb25zdCBp bnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNvbnN0IGlu dCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgY29uc3QgaW50 IHEzID0gUTM7CisgICAgICAgIGNvbnN0IGludCBxNCA9IFE0OworICAgICAgICBjb25zdCBpbnQg cTUgPSBRNTsKKyAgICAgICAgY29uc3QgaW50IHE2ID0gUTY7CisgICAgICAgIGludCBtOworICAg ICAgICBpZiAobWF4X2xlbl9wID09IDUgJiYgbWF4X2xlbl9xID09IDUpCisgICAgICAgICAgICBt ID0gKHA0ICsgcDMgKyAyICogKHAyICsgcDEgKyBwMCArIHEwICsgcTEgKyBxMikgKyBxMyArIHE0 ICsgOCkgPj4gNDsKKyAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9wID09IG1heF9sZW5fcSkKKyAg ICAgICAgICAgIG0gPSAocDYgKyBwNSArIHA0ICsgcDMgKyBwMiArIHAxICsgMiAqIChwMCArIHEw KSArIHExICsgcTIgKyBxMyArIHE0ICsgcTUgKyBxNiArIDgpID4+IDQ7CisgICAgICAgIGVsc2Ug aWYgKG1heF9sZW5fcCArIG1heF9sZW5fcSA9PSAxMikKKyAgICAgICAgICAgIG0gPSAocDUgKyBw NCArIHAzICsgcDIgKyAyICogKHAxICsgcDAgKyBxMCArIHExKSArIHEyICsgcTMgKyBxNCArIHE1 ICsgOCkgPj4gNDsKKyAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9wICsgbWF4X2xlbl9xID09IDgp CisgICAgICAgICAgICBtID0gKHAzICsgcDIgKyBwMSArIHAwICsgcTAgKyBxMSArIHEyICsgcTMg KyA0KSA+PiAzOworICAgICAgICBlbHNlIGlmIChtYXhfbGVuX3EgPT0gNykKKyAgICAgICAgICAg IG0gPSAoMiAqIChwMiArIHAxICsgcDAgKyBxMCkgKyBwMCArIHAxICsgcTEgKyBxMiArIHEzICsg cTQgKyBxNSArIHE2ICsgOCkgPj4gNDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbSA9IChw NiArIHA1ICsgcDQgKyBwMyArIHAyICsgcDEgKyAyICogKHEyICsgcTEgKyBxMCArIHAwKSArIHEw ICsgcTEgKyA4KSA+PiA0OworICAgICAgICBpZiAoIW5vX3ApIHsKKyAgICAgICAgICAgIGNvbnN0 IGludCByZWZwID0gKFAobWF4X2xlbl9wKSArIFAobWF4X2xlbl9wIC0gMSkgKyAxKSA+PiAxOwor ICAgICAgICAgICAgaWYgKG1heF9sZW5fcCA9PSAzKSB7CisgICAgICAgICAgICAgICAgUDAgPSBw MCArIGF2X2NsaXAoKChtICogNTMgKyByZWZwICogMTEgKyAzMikgPj4gNikgLSBwMCwgLSh0YyAq IDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFAxID0gcDEgKyBhdl9j bGlwKCgobSAqIDMyICsgcmVmcCAqIDMyICsgMzIpID4+IDYpIC0gcDEsIC0odGMgKiA0ID4+IDEp LCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgoKG0g KiAxMSArIHJlZnAgKiA1MyArIDMyKSA+PiA2KSAtIHAyLCAtKHRjICogMiA+PiAxKSwgKHRjICog MiA+PiAxKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1heF9sZW5fcCA9PSA1KSB7CisgICAg ICAgICAgICAgICAgUDAgPSBwMCArIGF2X2NsaXAoKChtICogNTggKyByZWZwICogIDYgKyAzMikg Pj4gNikgLSBwMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAg ICAgIFAxID0gcDEgKyBhdl9jbGlwKCgobSAqIDQ1ICsgcmVmcCAqIDE5ICsgMzIpID4+IDYpIC0g cDEsIC0odGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMiA9 IHAyICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnAgKiAzMiArIDMyKSA+PiA2KSAtIHAyLCAtKHRj ICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDMgPSBwMyArIGF2 X2NsaXAoKChtICogMTkgKyByZWZwICogNDUgKyAzMikgPj4gNikgLSBwMywgLSh0YyAqIDMgPj4g MSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgIFA0ID0gcDQgKyBhdl9jbGlwKCgo bSAqICA2ICsgcmVmcCAqIDU4ICsgMzIpID4+IDYpIC0gcDQsIC0odGMgKiAyID4+IDEpLCAodGMg KiAyID4+IDEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUDAgPSBw MCArIGF2X2NsaXAoKChtICogNTkgKyByZWZwICogIDUgKyAzMikgPj4gNikgLSBwMCwgLSh0YyAq IDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFAxID0gcDEgKyBhdl9j bGlwKCgobSAqIDUwICsgcmVmcCAqIDE0ICsgMzIpID4+IDYpIC0gcDEsIC0odGMgKiA1ID4+IDEp LCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgoKG0g KiA0MSArIHJlZnAgKiAyMyArIDMyKSA+PiA2KSAtIHAyLCAtKHRjICogNCA+PiAxKSwgKHRjICog NCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDMgPSBwMyArIGF2X2NsaXAoKChtICogMzIgKyBy ZWZwICogMzIgKyAzMikgPj4gNikgLSBwMywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkp OworICAgICAgICAgICAgICAgIFA0ID0gcDQgKyBhdl9jbGlwKCgobSAqIDIzICsgcmVmcCAqIDQx ICsgMzIpID4+IDYpIC0gcDQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAg ICAgICAgICAgICBQNSA9IHA1ICsgYXZfY2xpcCgoKG0gKiAxNCArIHJlZnAgKiA1MCArIDMyKSA+ PiA2KSAtIHA1LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAgICAg ICAgUDYgPSBwNiArIGF2X2NsaXAoKChtICogIDUgKyByZWZwICogNTkgKyAzMikgPj4gNikgLSBw NiwgLSh0YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAgICAgY29uc3QgaW50IHJlZnEgPSAo UShtYXhfbGVuX3EpICsgUShtYXhfbGVuX3EgLSAxKSArIDEpID4+IDE7CisgICAgICAgICAgICBp ZiAobWF4X2xlbl9xID09IDMpIHsKKyAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xpcCgo KG0gKiA1MyArIHJlZnEgKiAxMSArIDMyKSA+PiA2KSAtIHEwLCAgLSh0YyAqIDYgPj4gMSksICh0 YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgobSAqIDMy ICsgcmVmcSAqIDMyICsgMzIpID4+IDYpIC0gcTEsICAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+ PiAxKSk7CisgICAgICAgICAgICAgICAgUTIgPSBxMiArIGF2X2NsaXAoKChtICogMTEgKyByZWZx ICogNTMgKyAzMikgPj4gNikgLSBxMiwgIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4X2xlbl9xID09IDUpIHsKKyAgICAgICAgICAgICAg ICBRMCA9IHEwICsgYXZfY2xpcCgoKG0gKiA1OCArIHJlZnEgKiAgNiArIDMyKSA+PiA2KSAtIHEw LCAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTEgPSBx MSArIGF2X2NsaXAoKChtICogNDUgKyByZWZxICogMTkgKyAzMikgPj4gNikgLSBxMSwgLSh0YyAq IDUgPj4gMSksICh0YyAqIDUgPj4gMSkpOworICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9j bGlwKCgobSAqIDMyICsgcmVmcSAqIDMyICsgMzIpID4+IDYpIC0gcTIsIC0odGMgKiA0ID4+IDEp LCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMyA9IHEzICsgYXZfY2xpcCgoKG0g KiAxOSArIHJlZnEgKiA0NSArIDMyKSA+PiA2KSAtIHEzLCAtKHRjICogMyA+PiAxKSwgKHRjICog MyA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTQgPSBxNCArIGF2X2NsaXAoKChtICogIDYgKyBy ZWZxICogNTggKyAzMikgPj4gNikgLSBxNCwgLSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4gMSkp OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xp cCgoKG0gKiA1OSArIHJlZnEgKiAgNSArIDMyKSA+PiA2KSAtIHEwLCAtKHRjICogNiA+PiAxKSwg KHRjICogNiA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTEgPSBxMSArIGF2X2NsaXAoKChtICog NTAgKyByZWZxICogMTQgKyAzMikgPj4gNikgLSBxMSwgLSh0YyAqIDUgPj4gMSksICh0YyAqIDUg Pj4gMSkpOworICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgobSAqIDQxICsgcmVm cSAqIDIzICsgMzIpID4+IDYpIC0gcTIsIC0odGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+IDEpKTsK KyAgICAgICAgICAgICAgICBRMyA9IHEzICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAzMiAr IDMyKSA+PiA2KSAtIHEzLCAtKHRjICogMyA+PiAxKSwgKHRjICogMyA+PiAxKSk7CisgICAgICAg ICAgICAgICAgUTQgPSBxNCArIGF2X2NsaXAoKChtICogMjMgKyByZWZxICogNDEgKyAzMikgPj4g NikgLSBxNCwgLSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgICAg IFE1ID0gcTUgKyBhdl9jbGlwKCgobSAqIDE0ICsgcmVmcSAqIDUwICsgMzIpID4+IDYpIC0gcTUs IC0odGMgKiAxID4+IDEpLCAodGMgKiAxID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRNiA9IHE2 ICsgYXZfY2xpcCgoKG0gKiAgNSArIHJlZnEgKiA1OSArIDMyKSA+PiA2KSAtIHE2LCAtKHRjICog MSA+PiAxKSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAg ICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9m aWx0ZXJfbHVtYV9zdHJvbmcpKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlLCBj b25zdCBwdHJkaWZmX3QgeXN0cmlkZSwgY29uc3QgaW50MzJfdCB0YywKKyAgICBjb25zdCB1aW50 OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSkKK3sKKyAgICBjb25zdCBpbnQgdGMyID0gdGMg PDwgMTsKKyAgICBjb25zdCBpbnQgdGMzID0gdGMgKiAzOworICAgIGZvciAoaW50IGQgPSAwOyBk IDwgNDsgZCsrKSB7CisgICAgICAgIGNvbnN0IGludCBwMyA9IFAzOworICAgICAgICBjb25zdCBp bnQgcDIgPSBQMjsKKyAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0IGlu dCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3QgaW50 IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICBjb25zdCBpbnQg cTMgPSBRMzsKKyAgICAgICAgaWYgKCFub19wKSB7CisgICAgICAgICAgICBQMCA9IHAwICsgYXZf Y2xpcCgoKHAyICsgMiAqIHAxICsgMiAqIHAwICsgMiAqIHEwICsgcTEgKyA0KSA+PiAzKSAtIHAw LCAtdGMzLCB0YzMpOworICAgICAgICAgICAgUDEgPSBwMSArIGF2X2NsaXAoKChwMiArIHAxICsg cDAgKyBxMCArIDIpID4+IDIpIC0gcDEsIC10YzIsIHRjMik7CisgICAgICAgICAgICBQMiA9IHAy ICsgYXZfY2xpcCgoKDIgKiBwMyArIDMgKiBwMiArIHAxICsgcDAgKyBxMCArIDQpID4+IDMpIC0g cDIsIC10YywgdGMpOworICAgICAgICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAg ICAgUTAgPSBxMCArIGF2X2NsaXAoKChwMSArIDIgKiBwMCArIDIgKiBxMCArIDIgKiBxMSArIHEy ICsgNCkgPj4gMykgLSBxMCwgLXRjMywgdGMzKTsKKyAgICAgICAgICAgIFExID0gcTEgKyBhdl9j bGlwKCgocDAgKyBxMCArIHExICsgcTIgKyAyKSA+PiAyKSAtIHExLCAtdGMyLCB0YzIpOworICAg ICAgICAgICAgUTIgPSBxMiArIGF2X2NsaXAoKCgyICogcTMgKyAzICogcTIgKyBxMSArIHEwICsg cDAgKyA0KSA+PiAzKSAtIHEyLCAtdGMsIHRjKTsKKyAgICAgICAgfQorICAgICAgICBwaXggKz0g eXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfbHVtYV93 ZWFrKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90 IHlzdHJpZGUsCisgICAgY29uc3QgaW50MzJfdCB0YywgY29uc3QgaW50MzJfdCBiZXRhLCBjb25z dCB1aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSwgY29uc3QgaW50IG5kX3AsIGNvbnN0 IGludCBuZF9xKQoreworICAgIGNvbnN0IGludCB0Y18yID0gdGMgPj4gMTsKKyAgICBmb3IgKGlu dCBkID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICBjb25zdCBpbnQgcDIgPSBQMjsKKyAgICAg ICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAg ICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAg IGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICBpbnQgZGVsdGEwID0gKDkgKiAocTAgLSBwMCkg LSAzICogKHExIC0gcDEpICsgOCkgPj4gNDsKKyAgICAgICAgaWYgKGFicyhkZWx0YTApIDwgMTAg KiB0YykgeworICAgICAgICAgICAgZGVsdGEwID0gYXZfY2xpcChkZWx0YTAsIC10YywgdGMpOwor ICAgICAgICAgICAgaWYgKCFub19wKQorICAgICAgICAgICAgICAgIFAwID0gYXZfY2xpcF9waXhl bChwMCArIGRlbHRhMCk7CisgICAgICAgICAgICBpZiAoIW5vX3EpCisgICAgICAgICAgICAgICAg UTAgPSBhdl9jbGlwX3BpeGVsKHEwIC0gZGVsdGEwKTsKKyAgICAgICAgICAgIGlmICghbm9fcCAm JiBuZF9wID4gMSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBkZWx0YXAxID0gYXZfY2xp cCgoKChwMiArIHAwICsgMSkgPj4gMSkgLSBwMSArIGRlbHRhMCkgPj4gMSwgLXRjXzIsIHRjXzIp OworICAgICAgICAgICAgICAgIFAxID0gYXZfY2xpcF9waXhlbChwMSArIGRlbHRhcDEpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFub19xICYmIG5kX3EgPiAxKSB7CisgICAgICAg ICAgICAgICAgY29uc3QgaW50IGRlbHRhcTEgPSBhdl9jbGlwKCgoKHEyICsgcTAgKyAxKSA+PiAx KSAtIHExIC0gZGVsdGEwKSA+PiAxLCAtdGNfMiwgdGNfMik7CisgICAgICAgICAgICAgICAgUTEg PSBhdl9jbGlwX3BpeGVsKHExICsgZGVsdGFxMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorCit9CisKK3N0YXRpYyB2b2lkIEZVTkMo dnZjX2xvb3BfZmlsdGVyX2x1bWEpKHVpbnQ4X3QqIF9waXgsIHB0cmRpZmZfdCBfeHN0cmlkZSwg cHRyZGlmZl90IF95c3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgKl9iZXRhLCBjb25zdCBpbnQz Ml90ICpfdGMsIGNvbnN0IHVpbnQ4X3QgKl9ub19wLCBjb25zdCB1aW50OF90ICpfbm9fcSwKKyAg ICBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9wLCBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9xLCBp bnQgaG9yX2N0dV9lZGdlKQoreworICAgIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlID0gX3hzdHJp ZGUgLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlID0gX3lzdHJp ZGUgLyBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsK KyAgICAgICAgcGl4ZWwqIHBpeCAgICAgID0gKHBpeGVsKilfcGl4ICsgaSAqIDQgKiB5c3RyaWRl OworICAgICAgICBjb25zdCBpbnQgZHAwICAgPSBhYnMoUDIgLSAyICogUDEgKyBQMCk7CisgICAg ICAgIGNvbnN0IGludCBkcTAgICA9IGFicyhRMiAtIDIgKiBRMSArIFEwKTsKKyAgICAgICAgY29u c3QgaW50IGRwMyAgID0gYWJzKFRQMiAtIDIgKiBUUDEgKyBUUDApOworICAgICAgICBjb25zdCBp bnQgZHEzICAgPSBhYnMoVFEyIC0gMiAqIFRRMSArIFRRMCk7CisgICAgICAgIGNvbnN0IGludCBk MCAgICA9IGRwMCArIGRxMDsKKyAgICAgICAgY29uc3QgaW50IGQzICAgID0gZHAzICsgZHEzOwor I2lmIEJJVF9ERVBUSCA8IDEwCisgICAgICAgIGNvbnN0IGludCB0YyAgICA9IChfdGNbaV0gKyAo MSA8PCAoOSAtIEJJVF9ERVBUSCkpKSA+PiAoMTAgLSBCSVRfREVQVEgpOworI2Vsc2UKKyAgICAg ICAgY29uc3QgaW50IHRjICAgID0gX3RjW2ldIDw8IChCSVRfREVQVEggLSAxMCk7CisjZW5kaWYK KyAgICAgICAgY29uc3QgaW50IHRjMjUgID0gKCh0YyAqIDUgKyAxKSA+PiAxKTsKKworICAgICAg ICBjb25zdCBpbnQgbm9fcCAgPSBfbm9fcFtpXTsKKyAgICAgICAgY29uc3QgaW50IG5vX3EgID0g X25vX3FbaV07CisKKyAgICAgICAgaW50IG1heF9sZW5fcCAgID0gX21heF9sZW5fcFtpXTsKKyAg ICAgICAgaW50IG1heF9sZW5fcSAgID0gX21heF9sZW5fcVtpXTsKKworICAgICAgICBjb25zdCBp bnQgbGFyZ2VfcCA9IChtYXhfbGVuX3AgPiAzICYmICFob3JfY3R1X2VkZ2UpOworICAgICAgICBj b25zdCBpbnQgbGFyZ2VfcSA9IG1heF9sZW5fcSA+IDM7CisgICAgICAgIGNvbnN0IGludCBiZXRh ID0gX2JldGFbaV0gPDwgQklUX0RFUFRIIC0gODsKKworICAgICAgICBjb25zdCBpbnQgYmV0YV8z ID0gYmV0YSA+PiAzOworICAgICAgICBjb25zdCBpbnQgYmV0YV8yID0gYmV0YSA+PiAyOworCisg ICAgICAgIGlmICghdGMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobGFy Z2VfcCB8fCBsYXJnZV9xKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgZHAwbCA9IGxhcmdlX3Ag PyAoKGRwMCArIGFicyhQNSAtIDIgKiBQNCArIFAzKSArIDEpID4+IDEpIDogZHAwOworICAgICAg ICAgICAgY29uc3QgaW50IGRxMGwgPSBsYXJnZV9xID8gKChkcTAgKyBhYnMoUTUgLSAyICogUTQg KyBRMykgKyAxKSA+PiAxKSA6IGRxMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcDNsID0gbGFy Z2VfcCA/ICgoZHAzICsgYWJzKFRQNSAtIDIgKiBUUDQgKyBUUDMpICsgMSkgPj4gMSkgOiBkcDM7 CisgICAgICAgICAgICBjb25zdCBpbnQgZHEzbCA9IGxhcmdlX3EgPyAoKGRxMyArIGFicyhUUTUg LSAyICogVFE0ICsgVFEzKSArIDEpID4+IDEpIDogZHEzOworICAgICAgICAgICAgY29uc3QgaW50 IGQwbCA9IGRwMGwgKyBkcTBsOworICAgICAgICAgICAgY29uc3QgaW50IGQzbCA9IGRwM2wgKyBk cTNsOworICAgICAgICAgICAgY29uc3QgaW50IGJldGE1MyA9IGJldGEgKiAzID4+IDU7CisgICAg ICAgICAgICBjb25zdCBpbnQgYmV0YV80ID0gYmV0YSA+PiA0OworICAgICAgICAgICAgbWF4X2xl bl9wID0gbGFyZ2VfcCA/IG1heF9sZW5fcCA6IDM7CisgICAgICAgICAgICBtYXhfbGVuX3EgPSBs YXJnZV9xID8gbWF4X2xlbl9xIDogMzsKKworICAgICAgICAgICAgaWYgKGQwbCArIGQzbCA8IGJl dGEpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3AwbCA9IGFicyhQMyAtIFAwKSArICht YXhfbGVuX3AgPT0gNyA/IGFicyhQNyAtIFA2IC0gUDUgKyBQNCkgOiAwKTsKKyAgICAgICAgICAg ICAgICBjb25zdCBpbnQgc3EwbCA9IGFicyhRMCAtIFEzKSArIChtYXhfbGVuX3EgPT0gNyA/IGFi cyhRNCAtIFE1IC0gUTYgKyBRNykgOiAwKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3Az bCA9IGFicyhUUDMgLSBUUDApICsgKG1heF9sZW5fcCA9PSA3ID8gYWJzKFRQNyAtIFRQNiAtIFRQ NSArIFRQNCkgOiAwKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3EzbCA9IGFicyhUUTAg LSBUUTMpICsgKG1heF9sZW5fcSA9PSA3ID8gYWJzKFRRNCAtIFRRNSAtIFRRNiArIFRRNykgOiAw KTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3AwID0gbGFyZ2VfcCA/ICgoc3AwbCArIGFi cyhQMyAtICAgUChtYXhfbGVuX3ApKSArIDEpID4+IDEpIDogc3AwbDsKKyAgICAgICAgICAgICAg ICBjb25zdCBpbnQgc3AzID0gbGFyZ2VfcCA/ICgoc3AzbCArIGFicyhUUDMgLSBUUChtYXhfbGVu X3ApKSArIDEpID4+IDEpIDogc3AzbDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3EwID0g bGFyZ2VfcSA/ICgoc3EwbCArIGFicyhRMyAtICAgUShtYXhfbGVuX3EpKSArIDEpID4+IDEpIDog c3EwbDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3EzID0gbGFyZ2VfcSA/ICgoc3EzbCAr IGFicyhUUTMgLSBUUShtYXhfbGVuX3EpKSArIDEpID4+IDEpIDogc3EzbDsKKyAgICAgICAgICAg ICAgICBpZiAoc3AwICsgc3EwIDwgYmV0YTUzICYmIGFicyhQMCAtIFEwKSA8IHRjMjUgJiYKKyAg ICAgICAgICAgICAgICAgICAgc3AzICsgc3EzIDwgYmV0YTUzICYmIGFicyhUUDAgLSBUUTApIDwg dGMyNSAmJgorICAgICAgICAgICAgICAgICAgICAoZDBsIDw8IDEpIDwgYmV0YV80ICYmIChkM2wg PDwgMSkgPCBiZXRhXzQpIHsKKyAgICAgICAgICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRlcl9s dW1hX2xhcmdlKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHRjLCBub19wLCBub19xLCBtYXhfbGVu X3AsIG1heF9sZW5fcSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZDAgKyBkMyA8 IGJldGEpIHsKKyAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPiAyICYmIG1heF9sZW5fcSA+IDIg JiYKKyAgICAgICAgICAgICAgICBhYnMoUDMgLSBQMCkgKyBhYnMoUTMgLSBRMCkgPCBiZXRhXzMg JiYgYWJzKFAwIC0gUTApIDwgdGMyNSAmJgorICAgICAgICAgICAgICAgIGFicyhUUDMgLSBUUDAp ICsgYWJzKFRRMyAtIFRRMCkgPCBiZXRhXzMgJiYgYWJzKFRQMCAtIFRRMCkgPCB0YzI1ICYmCisg ICAgICAgICAgICAgICAgKGQwIDw8IDEpIDwgYmV0YV8yICYmIChkMyA8PCAxKSA8IGJldGFfMikg eworICAgICAgICAgICAgICAgIEZVTkMobG9vcF9maWx0ZXJfbHVtYV9zdHJvbmcpKHBpeCwgeHN0 cmlkZSwgeXN0cmlkZSwgdGMsIG5vX3AsIG5vX3EpOworICAgICAgICAgICAgfSBlbHNlIHsgLy8g d2VhayBmaWx0ZXJpbmcKKyAgICAgICAgICAgICAgICBpbnQgbmRfcCA9IDE7CisgICAgICAgICAg ICAgICAgaW50IG5kX3EgPSAxOworICAgICAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPiAxICYm IG1heF9sZW5fcSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRwMCArIGRwMyA8ICgo YmV0YSArIChiZXRhID4+IDEpKSA+PiAzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5kX3Ag PSAyOworICAgICAgICAgICAgICAgICAgICBpZiAoZHEwICsgZHEzIDwgKChiZXRhICsgKGJldGEg Pj4gMSkpID4+IDMpKQorICAgICAgICAgICAgICAgICAgICAgICAgbmRfcSA9IDI7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZVTkMobG9vcF9maWx0ZXJfbHVtYV93ZWFrKShw aXgsIHhzdHJpZGUsIHlzdHJpZGUsIHRjLCBiZXRhLCBub19wLCBub19xLCBuZF9wLCBuZF9xKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhs b29wX2ZpbHRlcl9jaHJvbWFfc3Ryb25nKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0 cmlkZSwgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUsCisgICAgY29uc3QgaW50IHNpemUsIGNvbnN0 IGludDMyX3QgdGMsIGNvbnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xKQorewor ICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc2l6ZTsgZCsrKSB7CisgICAgICAgIGNvbnN0IGludCBw MyA9IFAzOworICAgICAgICBjb25zdCBpbnQgcDIgPSBQMjsKKyAgICAgICAgY29uc3QgaW50IHAx ID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAg PSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9 IFEyOworICAgICAgICBjb25zdCBpbnQgcTMgPSBRMzsKKyAgICAgICAgaWYgKCFub19wKSB7Cisg ICAgICAgICAgICBQMCA9IGF2X2NsaXAoKHAzICsgcDIgKyBwMSArIDIgKiBwMCArIHEwICsgcTEg KyBxMiArIDQpID4+IDMsIHAwIC0gdGMsIHAwICsgdGMpOworICAgICAgICAgICAgUDEgPSBhdl9j bGlwKCgyICogcDMgKyBwMiArIDIgKiBwMSArIHAwICsgcTAgKyBxMSArIDQpID4+IDMsIHAxIC0g dGMsIHAxICsgdGMpOworICAgICAgICAgICAgUDIgPSBhdl9jbGlwKCgzICogcDMgKyAyICogcDIg KyBwMSArIHAwICsgcTAgKyA0KSA+PiAzLCBwMiAtIHRjLCBwMiArIHRjICk7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCFub19xKSB7CisgICAgICAgICAgICBRMCA9IGF2X2NsaXAoKHAyICsgcDEg KyBwMCArIDIgKiBxMCArIHExICsgcTIgKyBxMyArIDQpID4+IDMsIHEwIC0gdGMsIHEwICsgdGMp OworICAgICAgICAgICAgUTEgPSBhdl9jbGlwKChwMSArIHAwICsgcTAgKyAyICogcTEgKyBxMiAr IDIgKiBxMyArIDQpID4+IDMsIHExIC0gdGMsIHExICsgdGMpOworICAgICAgICAgICAgUTIgPSBh dl9jbGlwKChwMCArIHEwICsgcTEgKyAyICogcTIgKyAzICogcTMgKyA0KSA+PiAzLCBxMiAtIHRj LCBxMiArIHRjKTsKKyAgICAgICAgfQorICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZ19vbmVfc2lkZSko cGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3Ry aWRlLAorICAgIGNvbnN0IGludCBzaXplLCBjb25zdCBpbnQzMl90IHRjLCBjb25zdCB1aW50OF90 IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IHNp emU7IGQrKykgeworICAgICAgICBjb25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgY29uc3QgaW50 IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICBjb25zdCBpbnQg cTEgPSBRMTsKKyAgICAgICAgY29uc3QgaW50IHEyID0gUTI7CisgICAgICAgIGNvbnN0IGludCBx MyA9IFEzOworICAgICAgICBpZiAoIW5vX3ApIHsKKyAgICAgICAgICAgIFAwID0gYXZfY2xpcCgo MyAqIHAxICsgMiAqIHAwICsgcTAgKyBxMSArIHEyICsgNCkgPj4gMywgcDAgLSB0YywgcDAgKyB0 Yyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFub19xKSB7CisgICAgICAgICAgICBRMCA9IGF2 X2NsaXAoKDIgKiBwMSArIHAwICsgMiAqIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4gMywgcTAg LSB0YywgcTAgKyB0Yyk7CisgICAgICAgICAgICBRMSA9IGF2X2NsaXAoKHAxICsgcDAgKyBxMCAr IDIgKiBxMSArIHEyICsgMiAqIHEzICsgNCkgPj4gMywgcTEgLSB0YywgcTEgKyB0Yyk7CisgICAg ICAgICAgICBRMiA9IGF2X2NsaXAoKHAwICsgcTAgKyBxMSArIDIgKiBxMiArIDMgKiBxMyArIDQp ID4+IDMsIHEyIC0gdGMsIHEyICsgdGMpOworICAgICAgICB9CisgICAgICAgIHBpeCArPSB5c3Ry aWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfd2Vh aykocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5 c3RyaWRlLAorICAgIGNvbnN0IGludCBzaXplLCBjb25zdCBpbnQzMl90IHRjLCBjb25zdCB1aW50 OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8 IHNpemU7IGQrKykgeworICAgICAgICBpbnQgZGVsdGEwOworICAgICAgICBjb25zdCBpbnQgcDEg PSBQMTsKKyAgICAgICAgY29uc3QgaW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBxMCA9 IFEwOworICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAgICAgICAgZGVsdGEwID0gYXZfY2xp cCgoKChxMCAtIHAwKSAqIDQpICsgcDEgLSBxMSArIDQpID4+IDMsIC10YywgdGMpOworICAgICAg ICBpZiAoIW5vX3ApCisgICAgICAgICAgICBQMCA9IGF2X2NsaXBfcGl4ZWwocDAgKyBkZWx0YTAp OworICAgICAgICBpZiAoIW5vX3EpCisgICAgICAgICAgICBRMCA9IGF2X2NsaXBfcGl4ZWwocTAg LSBkZWx0YTApOworICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkIEZVTkModnZjX2xvb3BfZmlsdGVyX2Nocm9tYSkodWludDhfdCAqX3BpeCwgY29uc3QgcHRy ZGlmZl90ICBfeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IF95c3RyaWRlLAorICAgIGNvbnN0IGlu dDMyX3QgKl9iZXRhLCBjb25zdCBpbnQzMl90ICpfdGMsIGNvbnN0IHVpbnQ4X3QgKl9ub19wLCBj b25zdCB1aW50OF90ICpfbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9wLCBjb25z dCB1aW50OF90ICpfbWF4X2xlbl9xLCBjb25zdCBpbnQgc2hpZnQpCit7CisgICAgY29uc3QgcHRy ZGlmZl90IHhzdHJpZGUgPSBfeHN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3QgcHRy ZGlmZl90IHlzdHJpZGUgPSBfeXN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3QgaW50 IHNpemUgICAgICAgICAgPSBzaGlmdCA/IDIgOiA0OworICAgIGNvbnN0IGludCBlbmQgICAgICAg ICAgID0gOCAvIHNpemU7ICAgICAgICAgLy8gOCBzYW1wbGVzIGEgbG9vcAorCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBlbmQ7IGkrKykgeworICAgICAgICBwaXhlbCAqcGl4ICAgICAgICAgID0g KHBpeGVsICopX3BpeCArIGkgKiBzaXplICogeXN0cmlkZTsKKyAgICAgICAgY29uc3QgdWludDhf dCBub19wICA9IF9ub19wW2ldOworICAgICAgICBjb25zdCB1aW50OF90IG5vX3EgID0gX25vX3Fb aV07CisgICAgICAgIGNvbnN0IGludCBiZXRhICAgICAgPSBfYmV0YVtpXSA8PCAoQklUX0RFUFRI IC0gOCk7CisgICAgICAgIGNvbnN0IGludCBiZXRhXzMgICAgPSBiZXRhID4+IDM7CisgICAgICAg IGNvbnN0IGludCBiZXRhXzIgICAgPSBiZXRhID4+IDI7CisKKyNpZiBCSVRfREVQVEggPCAxMAor ICAgICAgICBjb25zdCBpbnQgdGMgPSAoX3RjW2ldICsgKDEgPDwgKDkgLSBCSVRfREVQVEgpKSkg Pj4gKDEwIC0gQklUX0RFUFRIKTsKKyNlbHNlCisgICAgICAgIGNvbnN0IGludCB0YyA9IF90Y1tp XSA8PCAoQklUX0RFUFRIIC0gMTApOworI2VuZGlmCisgICAgICAgIGNvbnN0IGludCB0YzI1ICAg ICAgPSAoKHRjICogNSArIDEpID4+IDEpOworCisgICAgICAgIHVpbnQ4X3QgbWF4X2xlbl9wICAg PSBfbWF4X2xlbl9wW2ldOworICAgICAgICB1aW50OF90IG1heF9sZW5fcSAgID0gX21heF9sZW5f cVtpXTsKKworICAgICAgICBpZiAoIW1heF9sZW5fcCB8fCAhbWF4X2xlbl9xIHx8ICF0YykKKyAg ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChtYXhfbGVuX3EgPT0gMyl7CisgICAg ICAgICAgICBjb25zdCBpbnQgcDFuICA9IHNoaWZ0ID8gRlAxIDogVFAxOworICAgICAgICAgICAg Y29uc3QgaW50IHAybiA9IG1heF9sZW5fcCA9PSAxID8gcDFuIDogKHNoaWZ0ID8gRlAyIDogVFAy KTsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMG4gID0gc2hpZnQgPyBGUDAgOiBUUDA7CisgICAg ICAgICAgICBjb25zdCBpbnQgcTBuICA9IHNoaWZ0ID8gRlEwIDogVFEwOworICAgICAgICAgICAg Y29uc3QgaW50IHExbiAgPSBzaGlmdCA/IEZRMSA6IFRRMTsKKyAgICAgICAgICAgIGNvbnN0IGlu dCBxMm4gID0gc2hpZnQgPyBGUTIgOiBUUTI7CisgICAgICAgICAgICBjb25zdCBpbnQgcDMgICA9 IG1heF9sZW5fcCA9PSAxID8gUDEgOiBQMzsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMiAgID0g bWF4X2xlbl9wID09IDEgPyBQMSA6IFAyOworICAgICAgICAgICAgY29uc3QgaW50IHAxICAgPSBQ MTsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMCAgID0gUDA7CisgICAgICAgICAgICBjb25zdCBp bnQgZHAwICA9IGFicyhwMiAtIDIgKiBwMSArIHAwKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBk cTAgID0gYWJzKFEyIC0gMiAqIFExICsgUTApOworCisgICAgICAgICAgICBjb25zdCBpbnQgZHAx ID0gYWJzKHAybiAtIDIgKiBwMW4gKyBwMG4pOworICAgICAgICAgICAgY29uc3QgaW50IGRxMSA9 IGFicyhxMm4gLSAyICogcTFuICsgcTBuKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBkMCAgPSBk cDAgKyBkcTA7CisgICAgICAgICAgICBjb25zdCBpbnQgZDEgID0gZHAxICsgZHExOworCisgICAg ICAgICAgICBpZiAoZDAgKyBkMSA8IGJldGEpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQg cDNuID0gbWF4X2xlbl9wID09IDEgPyBwMW4gOiAoc2hpZnQgPyBGUDMgOiBUUDMpOworICAgICAg ICAgICAgICAgIGNvbnN0IGludCBxM24gPSBzaGlmdCA/IEZRMyA6IFRRMzsKKyAgICAgICAgICAg ICAgICBjb25zdCBpbnQgZHNhbTAgPSAoZDAgPDwgMSkgPCBiZXRhXzIgJiYgKGFicyhwMyAtIHAw KSArIGFicyhRMCAtIFEzKSAgICAgPCBiZXRhXzMpICYmCisgICAgICAgICAgICAgICAgICAgIGFi cyhwMCAtIFEwKSAgIDwgdGMyNTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHNhbTEgPSAo ZDEgPDwgMSkgPCBiZXRhXzIgJiYgKGFicyhwM24gLSBwMG4pICsgYWJzKHEwbiAtIHEzbikgPCBi ZXRhXzMpICYmCisgICAgICAgICAgICAgICAgICAgIGFicyhwMG4gLSBxMG4pIDwgdGMyNTsKKyAg ICAgICAgICAgICAgICBpZiAoIWRzYW0wIHx8ICFkc2FtMSkKKyAgICAgICAgICAgICAgICAgICAg bWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorCisgICAgICAgIGlmIChtYXhfbGVuX3AgPT0gMyAmJiBtYXhfbGVuX3EgPT0gMykKKyAg ICAgICAgICAgIEZVTkMobG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZykocGl4LCB4c3RyaWRlLCB5 c3RyaWRlLCBzaXplLCB0Yywgbm9fcCwgbm9fcSk7CisgICAgICAgIGVsc2UgaWYgKG1heF9sZW5f cSA9PSAzKQorICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfc3Ryb25nX29uZV9z aWRlKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHNpemUsIHRjLCBub19wLCBub19xKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfd2VhaykocGl4LCB4 c3RyaWRlLCB5c3RyaWRlLCBzaXplLCB0Yywgbm9fcCwgbm9fcSk7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBGVU5DKHZ2Y19oX2xvb3BfZmlsdGVyX2Nocm9tYSkodWludDhfdCAqcGl4LCBwdHJk aWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgKmJldGEsIGNvbnN0IGludDMyX3QgKnRj LCBjb25zdCB1aW50OF90ICpub19wLCBjb25zdCB1aW50OF90ICpub19xLAorICAgIGNvbnN0IHVp bnQ4X3QgKm1heF9sZW5fcCwgY29uc3QgdWludDhfdCAqbWF4X2xlbl9xLCBpbnQgc2hpZnQpCit7 CisgICAgRlVOQyh2dmNfbG9vcF9maWx0ZXJfY2hyb21hKShwaXgsIHN0cmlkZSwgc2l6ZW9mKHBp eGVsKSwgYmV0YSwgdGMsCisgICAgICAgIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9x LCBzaGlmdCk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfY2hyb21h KSh1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUsCisgICAgY29uc3QgaW50MzJfdCAqYmV0 YSwgY29uc3QgaW50MzJfdCAqdGMsIGNvbnN0IHVpbnQ4X3QgKm5vX3AsIGNvbnN0IHVpbnQ4X3Qg Km5vX3EsCisgICAgY29uc3QgdWludDhfdCAqbWF4X2xlbl9wLCBjb25zdCB1aW50OF90ICptYXhf bGVuX3EsIGludCBzaGlmdCkKK3sKKyAgICBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9jaHJvbWEpKHBp eCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRlLCBiZXRhLCB0YywKKyAgICAgICAgbm9fcCwgbm9fcSwg IG1heF9sZW5fcCwgbWF4X2xlbl9xLCBzaGlmdCk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZj X2hfbG9vcF9maWx0ZXJfbHVtYSkodWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlLAorICAg IGNvbnN0IGludDMyX3QgKmJldGEsIGNvbnN0IGludDMyX3QgKnRjLCBjb25zdCB1aW50OF90ICpu b19wLCBjb25zdCB1aW50OF90ICpub19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcCwg Y29uc3QgdWludDhfdCAqbWF4X2xlbl9xLCBpbnQgaG9yX2N0dV9lZGdlKQoreworICAgIEZVTkMo dnZjX2xvb3BfZmlsdGVyX2x1bWEpKHBpeCwgc3RyaWRlLCBzaXplb2YocGl4ZWwpLCBiZXRhLCB0 YywKKyAgICAgICAgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcl9jdHVfZWRn ZSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfbHVtYSkodWludDhf dCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgKmJldGEsIGNvbnN0 IGludDMyX3QgKnRjLCBjb25zdCB1aW50OF90ICpub19wLCBjb25zdCB1aW50OF90ICpub19xLAor ICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcCwgY29uc3QgdWludDhfdCAqbWF4X2xlbl9xLCBp bnQgaG9yX2N0dV9lZGdlKQoreworICAgIEZVTkModnZjX2xvb3BfZmlsdGVyX2x1bWEpKHBpeCwg c2l6ZW9mKHBpeGVsKSwgc3RyaWRlLCBiZXRhLCB0YywKKyAgICAgICAgbm9fcCwgbm9fcSwgbWF4 X2xlbl9wLCBtYXhfbGVuX3EsIGhvcl9jdHVfZWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgRlVOQyh2 dmNfbG9vcF9sYWRmX2xldmVsKShjb25zdCB1aW50OF90ICpfcGl4LCBjb25zdCBwdHJkaWZmX3Qg X3hzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBfeXN0cmlkZSkKK3sKKyAgICBjb25zdCBwaXhlbCAq cGl4ICAgICAgICA9IChwaXhlbCAqKV9waXg7CisgICAgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUg PSBfeHN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUg PSBfeXN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgcmV0dXJuIChQMCArIFRQMCArIFEwICsg VFEwKSA+PiAyOworfQorCitzdGF0aWMgaW50IEZVTkModnZjX2hfbG9vcF9sYWRmX2xldmVsKShj b25zdCB1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgcmV0dXJuIEZVTkMo dnZjX2xvb3BfbGFkZl9sZXZlbCkocGl4LCBzdHJpZGUsIHNpemVvZihwaXhlbCkpOworfQorCitz dGF0aWMgaW50IEZVTkModnZjX3ZfbG9vcF9sYWRmX2xldmVsKShjb25zdCB1aW50OF90ICpwaXgs IHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgcmV0dXJuIEZVTkModnZjX2xvb3BfbGFkZl9sZXZl bCkocGl4LCBzaXplb2YocGl4ZWwpLCBzdHJpZGUpOworfQorCisjdW5kZWYgUDcKKyN1bmRlZiBQ NgorI3VuZGVmIFA1CisjdW5kZWYgUDQKKyN1bmRlZiBQMworI3VuZGVmIFAyCisjdW5kZWYgUDEK KyN1bmRlZiBQMAorI3VuZGVmIFEwCisjdW5kZWYgUTEKKyN1bmRlZiBRMgorI3VuZGVmIFEzCisj dW5kZWYgUTQKKyN1bmRlZiBRNQorI3VuZGVmIFE2CisjdW5kZWYgUTcKKworI3VuZGVmIFRQNwor I3VuZGVmIFRQNgorI3VuZGVmIFRQNQorI3VuZGVmIFRQNAorI3VuZGVmIFRQMworI3VuZGVmIFRQ MgorI3VuZGVmIFRQMQorI3VuZGVmIFRQMAorI3VuZGVmIFRRMAorI3VuZGVmIFRRMQorI3VuZGVm IFRRMgorI3VuZGVmIFRRMworI3VuZGVmIFRRNAorI3VuZGVmIFRRNQorI3VuZGVmIFRRNgorI3Vu ZGVmIFRRNworCitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19sbWNzX2RzcF9pbml0KShWVkNMTUNT RFNQQ29udGV4dCAqY29uc3QgbG1jcykKK3sKKyAgICBsbWNzLT5maWx0ZXIgPSBGVU5DKGxtY3Nf ZmlsdGVyX2x1bWEpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19sZl9kc3BfaW5pdCko VlZDTEZEU1BDb250ZXh0ICpjb25zdCBsZikKK3sKKyAgICBsZi0+bGFkZl9sZXZlbFswXSAgICAg ID0gRlVOQyh2dmNfaF9sb29wX2xhZGZfbGV2ZWwpOworICAgIGxmLT5sYWRmX2xldmVsWzFdICAg ICAgPSBGVU5DKHZ2Y192X2xvb3BfbGFkZl9sZXZlbCk7CisgICAgbGYtPmZpbHRlcl9sdW1hWzBd ICAgICA9IEZVTkModnZjX2hfbG9vcF9maWx0ZXJfbHVtYSk7CisgICAgbGYtPmZpbHRlcl9sdW1h WzFdICAgICA9IEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfbHVtYSk7CisgICAgbGYtPmZpbHRlcl9j aHJvbWFbMF0gICA9IEZVTkModnZjX2hfbG9vcF9maWx0ZXJfY2hyb21hKTsKKyAgICBsZi0+Zmls dGVyX2Nocm9tYVsxXSAgID0gRlVOQyh2dmNfdl9sb29wX2ZpbHRlcl9jaHJvbWEpOworfQorCitz dGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19zYW9fZHNwX2luaXQpKFZWQ1NBT0RTUENvbnRleHQgKmNv bnN0IHNhbykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHNhby0+ YmFuZF9maWx0ZXIpOyBpKyspCisgICAgICAgIHNhby0+YmFuZF9maWx0ZXJbaV0gPSBGVU5DKHNh b19iYW5kX2ZpbHRlcik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhz YW8tPmVkZ2VfZmlsdGVyKTsgaSsrKQorICAgICAgICBzYW8tPmVkZ2VfZmlsdGVyW2ldID0gRlVO QyhzYW9fZWRnZV9maWx0ZXIpOworICAgIHNhby0+ZWRnZV9yZXN0b3JlWzBdID0gRlVOQyhzYW9f ZWRnZV9yZXN0b3JlXzApOworICAgIHNhby0+ZWRnZV9yZXN0b3JlWzFdID0gRlVOQyhzYW9fZWRn ZV9yZXN0b3JlXzEpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19hbGZfZHNwX2luaXQp KFZWQ0FMRkRTUENvbnRleHQgKmNvbnN0IGFsZikKK3sKKyAgICBhbGYtPmZpbHRlcltMVU1BXSAg ICA9IEZVTkMoYWxmX2ZpbHRlcl9sdW1hKTsKKyAgICBhbGYtPmZpbHRlcltDSFJPTUFdICA9IEZV TkMoYWxmX2ZpbHRlcl9jaHJvbWEpOworICAgIGFsZi0+ZmlsdGVyX2NjICAgICAgID0gRlVOQyhh bGZfZmlsdGVyX2NjKTsKKyAgICBhbGYtPmNsYXNzaWZ5ICAgICAgICA9IEZVTkMoYWxmX2NsYXNz aWZ5KTsKKyAgICBhbGYtPnJlY29uX2NvZWZmX2FuZF9jbGlwID0gRlVOQyhhbGZfcmVjb25fY29l ZmZfYW5kX2NsaXApOworfQotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZl bEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1k ZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1k ZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==