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 486364849F for ; Tue, 5 Dec 2023 14:46:10 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4F8CA68CDEC; Tue, 5 Dec 2023 16:46:04 +0200 (EET) Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01olkn2011.outbound.protection.outlook.com [40.92.107.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E491368CDBB for ; Tue, 5 Dec 2023 16:45:56 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dWfKYr5ovpvlPSazqdsPJ57c/ZVmwkv9mznduU3vbKMlJlyCz+maStPerXGyICOyZ4ST/5RhXWBEX7q56rSlR7fknLesmBUkIuY4qaYSMltnudZ6tWfBy5Wc2H/K0+XGBTOQYxAIiZfnkrokS3cFz7zlgN5QHNIObJXS8gnAgJetDQI5yY5/Y22pv7iu/668efLr/XGUY8KZCUK75qXFKb1vt46SlEPB/ZJGBq39YwyzOiIkHi/xc9yudZI7fG07wezWgSbIRKjbWBIfrPhq+G8iwQigWbkmzmKBYs6SyROQxhhb6UpDf5xQEO+6PvriRfdMlCfLBVuJN6LzOxRHxQ== 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=lfPO1YL+2lZeNQcEFJDqs+kY3RlhHSglejqUMsRLlt4=; b=cd06y4dHwuA/iojvOr7h3gFCVuA1lozkimC+Tm9/BZFsQ3E/Y9Kp7i5n2LQ7/HgJtAsNHTKWVDVEMvEn84zTSWbF9iLrcPuOpXP9rgHZEVNVYmn5w+DTm4b5Ec/WfHX0iQuMLatAEvK5aQdNJnwZJjP3iLH4EdDGwKEZlQamjvTocFmpVGuLfcT9HgvL0PsrAtmsupzOHv/wJkpJBcekfd1e9BJXlqz4uqbFTskmY0CPyitDSmL/R9WAqu7dq8lgGGm45okWc84U7Owvgg2DbFIxhHh9r6UxXTf5QohRylu8lA+pzQTauXthMzJHgXAZo+auWhNigkJVqPvTlNRv/A== 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=lfPO1YL+2lZeNQcEFJDqs+kY3RlhHSglejqUMsRLlt4=; b=W2VeS5i9dfJpVR68o0MGa4TyVHq+W0e04KtxJhxs65q6wiFU6agLJP6UKrOu0+BcFVsT4UzCsOrBNUs/Vc37Q4zs5goTsmTVXjZm7yC7tUTbWjxD5eic80fKEFlnBCmj5pARHZkVDCYT8CiqKy6kFRkZcmQYXLnE6+ST6vU1s/3M/ZNcDNyanGwCxF4TM4gKQ7FlU2o19r9d99i76hVW6/iIp0L6oVEUKkh2m8E6Y6m6738tZBVI8yoUVdw/ONuftcDWkLtidRaDac9ROCCxbvQlk1pIxd2GJMq+qOP+OSPFXVrmI72kxpIe68l0qW/5RN8gELcFivDuvwTgORuisw== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB6747.apcprd06.prod.outlook.com (2603:1096:400:45d::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.34; Tue, 5 Dec 2023 14:45:48 +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.7046.034; Tue, 5 Dec 2023 14:45:48 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Dec 2023 22:45:08 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231205144519.7334-1-nuomi2021@gmail.com> References: <20231205144519.7334-1-nuomi2021@gmail.com> X-TMN: [fx19jIa8sCjL4DxiA1t4VmUbUj5jtnME] X-ClientProxiedBy: SG3P274CA0015.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::27) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231205144519.7334-3-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB6747:EE_ X-MS-Office365-Filtering-Correlation-Id: 056d3631-8be8-415c-b587-08dbf5a0de8e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PN2jinoL5PmICvA478IMm/MOZBGEsB0kTaw/aEYS5w/VWsIvYYQB7tAZEpXlO4lZh9cVwJPzIxFlwN6y0zJHQLzi3oEfx4ZXOEbiGYNRkpQsBQ2aOChM5gDgQHFbtnaPpjmO+4sjC4DyhU+aqFcwn36Jsv/Wsi+zFnlTHHWoc0uPIarB55TmAURTfKusl3dGEr8sH8Sa1O+qNhTwD4SV8SColbFuQlRoFdM28S/S7E74vFdsIBEkpVkWCEBt4OI2K6PL9XzuBDMgNqG3KSTHoQEeAX0RS7wla+6Lw82xQY4kYWV6zfe3UwJC39qqeGdt6Xppdwo+5V48Sk4PvmuS+ud0/vPWjCdVSdFJhAam/h12+vaJDYLeqPRpqOejookCvsNahA5qFUsBiNvXcESMRvfoEsu4S+Ph34nAhm6xyrla7++xYY2bUINTeFKW4zCrZBrNuQQ2pymtUX1cIMKANTDu8gTNv/I76yo/cXnFW9QP314g007HMCdAEHHQPa1NK2ctzpuh8QDpXknRsvtKtuQsQCtS4tGkK4fGVXl6UbO9bw0yyjZh35OFEUUxZhyb4e3Xl+w82QsJUfOzZDHvVBgPY//Bq0125tXesfOat9JReMpTgMn2VobUkVW11mb+ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MTYwV0YzSDlKUDhINU1jVlRHOERKanFoM2lDOW1FSkdjUGJjR29hdlc0U1JO?= =?utf-8?B?bzFXZWk5Wkd5V1Vqa0ZTckNwcmtTTlYvamVtNmFnYk9GWThqdjNiWXRBWEFK?= =?utf-8?B?RFhFU3RadHUyazFzQ1VlNFFJMFpCL2hCeTkyUUxYclhOa0hGTUE3TU1ZcDlV?= =?utf-8?B?R0psZTM1d05hWEJJSXRaSThiNXJCN3ExRXdQOWhVNGpnMVM3K1lMaFFHamYr?= =?utf-8?B?OFhIRm10SzJCajViK3FhZTJQMFVUNm9HMkJabE1KbytpYTZxNmZ6UFBUekha?= =?utf-8?B?NHhUK2U1NmVUN3ZCRll0WjllNGdJRytGTk10ZGZBanFaeHNHd0JkdENqVTZU?= =?utf-8?B?MFhBTkM5cDhURXlUdUpHM2lReFA4cWxiTWFjUDhRWnZsbzF6bzdJQkR0N0pk?= =?utf-8?B?YTN2blJUTlhKcExjQzFhOFdFeDBQRStRQW1Zb3hoK1RaNnJiUGFWZ2hNY1dm?= =?utf-8?B?U3BoZStRY3NWWnhaUng3OFVocm1mTGtlelNHeTRpZitybkJocENISTRNZlM3?= =?utf-8?B?VGxlVnFSaEg1dUxHc2Voam9TaG0rb1JhZFVQZXJ5VEZRWDdJTUpHNmJ0Mi95?= =?utf-8?B?OS9YNFRIS0lBdy84R3A5R1BkWGJ0ZVJjOHBkcnRDOHFHMU9zOXpDRi9pQWVU?= =?utf-8?B?WDVya0JaR1dQZXcxRVIwOVUzbEQ0YmNzRkwxRmszeG9COThaelRPQVBzbUc5?= =?utf-8?B?dllyMEVqd0cvNXAyeGpKT01mV2YxNVkvUmYwZkxWQm9sa1AzS21OQWJkbzZn?= =?utf-8?B?enphSnVPdmhjRE9Vcmk4RWRjN00zb3JuWk11OXF0QW13S1BhQmhIa21jVk5P?= =?utf-8?B?WEtkL2hHaFlYa1p2ekhyUzFPN3Nqb0NPYmUvMHA3eHkrdUxFcnVvL3BzZHJJ?= =?utf-8?B?OEkwRGFNWDk0Y3NJSXBjc3Z5TlU0MDNkZ09zTHFieFdvR0hSS28vVDQ5OGFz?= =?utf-8?B?UjB3SnNKZVhXM2tuYUNqcHlzbTFjSXV2Uk5qVCtVWi9LVGhVTW5vSVRTdjJ6?= =?utf-8?B?SHY5UXg4RmU2TG9oREgwWlJHc1M1NHM5S3hWN0hJRkJNaWxsMlNjRCsyVXM5?= =?utf-8?B?RXBGUkhQd1pJcGRieEFTQUhMRDdpOEJsWHVTaXovNTZyN2Ewa0RzU1gxL3ZX?= =?utf-8?B?RHNHNVFaajV5ZXdnTmtYbDlCbWZDaDJEdDVxUzFSSm9CNkF4bDNIa3JQWHdy?= =?utf-8?B?bUpOaFMzc0hWTGhKK1pWWThrak5uM1F5b0lpUjA1bjU3V2JBeGtOYytKN3Fn?= =?utf-8?B?eHlVSTBBQzAwUm1wUE80RWVnQVFuc0JKeTJXam9JRHZwRDA0TnVndnhqbWd0?= =?utf-8?B?a25nVnRsMnlkNFE5MFlXUlJDaTJMUGNmRzAwWkFvb1ZUcGt4emxnQmJTV1pJ?= =?utf-8?B?bHgrWkY1M2Ixc1YxNXYybzNBQVY5MGZKKzlTb0NQTHNsVVRrVlVvcFRKNmNG?= =?utf-8?B?YXRlYmpNdmxSTytTcWFsQnlHeEhwem1JbHZDRTZlTDRJTFAyMFNxZ0ptTmxH?= =?utf-8?B?REl5QUtNcks5QTRIUUdBWUUyK1M1WkI1WjRDNnhxVnl3OFdRelRoMWxoTzRF?= =?utf-8?B?M2tWb0poUFdqU05sR3J6cmk2Z2F2SThUMTZNYjZGL0FSekdibFhqSFMxSmEv?= =?utf-8?B?ZS93ekdCVnpkcGNEOHA3SFJyOWl3QytOMjNyT25zSlcreWFmRFh5NGFEWUlh?= =?utf-8?Q?EEj8x0uG4HRrW2toYrop?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 056d3631-8be8-415c-b587-08dbf5a0de8e X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Dec 2023 14:45:48.2894 (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: TYZPR06MB6747 Subject: [FFmpeg-devel] [PATCH v6 03/14] vvcdec: add parameter parser for sps, pps, ph, sh 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSB8ICAgIDEgKwogbGliYXZjb2RlYy92dmMvdnZj X3BzLmMgfCAxMTQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGli YXZjb2RlYy92dmMvdnZjX3BzLmggfCAgMjYzICsrKysrKysrKwogbGliYXZjb2RlYy92dmMvdnZj ZGVjLmggfCAgICA3ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTQyMCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmNvZGVjL3Z2Yy92dmNfcHMuaAoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01h a2VmaWxlIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggOGE1YzY2YWIxMy4uYjJiMTg3 YWM2ZiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2Rl Yy92dmMvTWFrZWZpbGUKQEAgLTMsMyArMyw0IEBAIGNsZWFuOjoKIAogT0JKUy0kKENPTkZJR19W VkNfREVDT0RFUikgICAgICAgICAgKz0gIHZ2Yy92dmNkZWMubyAgICAgICAgICAgIFwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2RhdGEubyAgICAgICAg ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19wcy5v ICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMgYi9saWJh dmNvZGVjL3Z2Yy92dmNfcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li4yODRlNzQwNmMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMK QEAgLTAsMCArMSwxMTQ5IEBACisvKgorICogVlZDIHBhcmFtZXRlciBzZXQgcGFyc2VyCisgKgor ICogQ29weXJpZ2h0IChDKSAyMDIzIE51byBNaQorICogQ29weXJpZ2h0IChDKSAyMDIyIFh1IE11 CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSAibGliYXZj b2RlYy9jYnNfaDI2Ni5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgorI2luY2x1 ZGUgImxpYmF2Y29kZWMvcmVmc3RydWN0LmgiCisjaW5jbHVkZSAidnZjX2RhdGEuaCIKKyNpbmNs dWRlICJ2dmNfcHMuaCIKKyNpbmNsdWRlICJ2dmNkZWMuaCIKKworc3RhdGljIGludCBzcHNfbWFw X3BpeGVsX2Zvcm1hdChWVkNTUFMgKnNwcywgdm9pZCAqbG9nX2N0eCkKK3sKKyAgICBjb25zdCBI MjY2UmF3U1BTICpyID0gc3BzLT5yOworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVz YzsKKworICAgIHN3aXRjaCAoc3BzLT5iaXRfZGVwdGgpIHsKKyAgICBjYXNlIDg6CisgICAgICAg IGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMCkgc3BzLT5waXhfZm10ID0gQVZfUElY X0ZNVF9HUkFZODsKKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAxKSBz cHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFA7CisgICAgICAgIGlmIChyLT5zcHNfY2hy b21hX2Zvcm1hdF9pZGMgPT0gMikgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQOwor ICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+cGl4X2ZtdCA9 IEFWX1BJWF9GTVRfWVVWNDQ0UDsKKyAgICAgICBicmVhazsKKyAgICBjYXNlIDEwOgorICAgICAg ICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDApIHNwcy0+cGl4X2ZtdCA9IEFWX1BJ WF9GTVRfR1JBWTEwOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDEp IHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwOworICAgICAgICBpZiAoci0+c3Bz X2Nocm9tYV9mb3JtYXRfaWRjID09IDIpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIy UDEwOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+cGl4 X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDEy OgorICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDApIHNwcy0+cGl4X2Zt dCA9IEFWX1BJWF9GTVRfR1JBWTEyOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRf aWRjID09IDEpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEyOworICAgICAgICBp ZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDIpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9G TVRfWVVWNDIyUDEyOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMp IHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEyOworICAgICAgICBicmVhazsKKyAg ICBkZWZhdWx0OgorICAgICAgICBhdl9sb2cobG9nX2N0eCwgQVZfTE9HX0VSUk9SLAorICAgICAg ICAgICAgICAgIlRoZSBmb2xsb3dpbmcgYml0LWRlcHRocyBhcmUgY3VycmVudGx5IHNwZWNpZmll ZDogOCwgMTAsIDEyIGJpdHMsICIKKyAgICAgICAgICAgICAgICJjaHJvbWFfZm9ybWF0X2lkYyBp cyAlZCwgZGVwdGggaXMgJWRcbiIsCisgICAgICAgICAgICAgICByLT5zcHNfY2hyb21hX2Zvcm1h dF9pZGMsIHNwcy0+Yml0X2RlcHRoKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgfQorCisgICAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoc3BzLT5waXhfZm10 KTsKKyAgICBpZiAoIWRlc2MpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAg ICBzcHMtPmhzaGlmdFswXSA9IHNwcy0+dnNoaWZ0WzBdID0gMDsKKyAgICBzcHMtPmhzaGlmdFsy XSA9IHNwcy0+aHNoaWZ0WzFdID0gZGVzYy0+bG9nMl9jaHJvbWFfdzsKKyAgICBzcHMtPnZzaGlm dFsyXSA9IHNwcy0+dnNoaWZ0WzFdID0gZGVzYy0+bG9nMl9jaHJvbWFfaDsKKworICAgIHNwcy0+ cGl4ZWxfc2hpZnQgPSBzcHMtPmJpdF9kZXB0aCA+IDg7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBzcHNfYml0X2RlcHRoKFZWQ1NQUyAqc3BzLCB2b2lkICpsb2dfY3R4KQorewor ICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7CisKKyAgICBzcHMtPmJpdF9kZXB0aCA9 IHItPnNwc19iaXRkZXB0aF9taW51czggKyA4OworICAgIHNwcy0+cXBfYmRfb2Zmc2V0ID0gNiAq IChzcHMtPmJpdF9kZXB0aCAtIDgpOworICAgIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UgPQor ICAgICAgICByLT5zcHNfZXh0ZW5kZWRfcHJlY2lzaW9uX2ZsYWcgPyBGRk1BWCgxNSwgRkZNSU4o MjAsIHNwcy0+Yml0X2RlcHRoICsgNikpIDogMTU7CisgICAgcmV0dXJuIHNwc19tYXBfcGl4ZWxf Zm9ybWF0KHNwcywgbG9nX2N0eCk7Cit9CisKK3N0YXRpYyBpbnQgc3BzX2Nocm9tYV9xcF90YWJs ZShWVkNTUFMgKnNwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworICAg IGNvbnN0IGludCBudW1fcXBfdGFibGVzID0gci0+c3BzX3NhbWVfcXBfdGFibGVfZm9yX2Nocm9t YV9mbGFnID8KKyAgICAgICAgMSA6IChyLT5zcHNfam9pbnRfY2Jjcl9lbmFibGVkX2ZsYWcgPyAz IDogMik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9xcF90YWJsZXM7IGkrKykgewor ICAgICAgICBpbnQgbnVtX3BvaW50c19pbl9xcF90YWJsZTsKKyAgICAgICAgaW50OF90IHFwX2lu W1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxFXSwgcXBfb3V0W1ZWQ19NQVhfUE9JTlRTX0lOX1FQ X1RBQkxFXTsKKyAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhX3FwX2luW1ZWQ19NQVhfUE9JTlRT X0lOX1FQX1RBQkxFXTsKKyAgICAgICAgaW50IG9mZiA9IHNwcy0+cXBfYmRfb2Zmc2V0OworCisg ICAgICAgIG51bV9wb2ludHNfaW5fcXBfdGFibGUgPSByLT5zcHNfbnVtX3BvaW50c19pbl9xcF90 YWJsZV9taW51czFbaV0gKyAxOworCisgICAgICAgIHFwX291dFswXSA9IHFwX2luWzBdID0gci0+ c3BzX3FwX3RhYmxlX3N0YXJ0X21pbnVzMjZbaV0gKyAyNjsKKyAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBudW1fcG9pbnRzX2luX3FwX3RhYmxlOyBqKysgKSB7CisgICAgICAgICAgICBkZWx0 YV9xcF9pbltqXSA9IHItPnNwc19kZWx0YV9xcF9pbl92YWxfbWludXMxW2ldW2pdICsgMTsKKyAg ICAgICAgICAgIHFwX2luW2orMV0gPSBxcF9pbltqXSArIGRlbHRhX3FwX2luW2pdOworICAgICAg ICAgICAgcXBfb3V0W2orMV0gPSBxcF9vdXRbal0gKyAoci0+c3BzX2RlbHRhX3FwX2luX3ZhbF9t aW51czFbaV1bal0gXiByLT5zcHNfZGVsdGFfcXBfZGlmZl92YWxbaV1bal0pOworICAgICAgICB9 CisgICAgICAgIHNwcy0+Y2hyb21hX3FwX3RhYmxlW2ldW3FwX2luWzBdICsgb2ZmXSA9IHFwX291 dFswXTsKKyAgICAgICAgZm9yIChpbnQgayA9IHFwX2luWzBdIC0gMSArIG9mZjsgayA+PSAwOyBr LS0pCisgICAgICAgICAgICBzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrXSA9IGF2X2NsaXAoc3Bz LT5jaHJvbWFfcXBfdGFibGVbaV1baysxXS0xLCAtb2ZmLCA2Myk7CisKKyAgICAgICAgZm9yIChp bnQgaiAgPSAwOyBqIDwgbnVtX3BvaW50c19pbl9xcF90YWJsZTsgaisrKSB7CisgICAgICAgICAg ICBpbnQgc2ggPSBkZWx0YV9xcF9pbltqXSA+PiAxOworICAgICAgICAgICAgZm9yIChpbnQgayA9 IHFwX2luW2pdICsgMSArIG9mZiwgbSA9IDE7IGsgPD0gcXBfaW5baisxXSArIG9mZjsgaysrLCBt KyspIHsKKyAgICAgICAgICAgICAgICBzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrXSA9IHNwcy0+ Y2hyb21hX3FwX3RhYmxlW2ldW3FwX2luW2pdICsgb2ZmXSArCisgICAgICAgICAgICAgICAgICAg ICgocXBfb3V0W2orMV0gLSBxcF9vdXRbal0pICogbSArIHNoKSAvIGRlbHRhX3FwX2luW2pdOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGsgPSBxcF9pbltudW1f cG9pbnRzX2luX3FwX3RhYmxlXSArIDEgKyBvZmY7IGsgPD0gNjMgKyBvZmY7IGsrKykKKyAgICAg ICAgICAgIHNwcy0+Y2hyb21hX3FwX3RhYmxlW2ldW2tdICA9IGF2X2NsaXAoc3BzLT5jaHJvbWFf cXBfdGFibGVbaV1bay0xXSArIDEsIC1zcHMtPnFwX2JkX29mZnNldCwgNjMpOworICAgIH0KKyAg ICBpZiAoci0+c3BzX3NhbWVfcXBfdGFibGVfZm9yX2Nocm9tYV9mbGFnKSB7CisgICAgICAgIG1l bWNweSgmc3BzLT5jaHJvbWFfcXBfdGFibGVbMV0sICZzcHMtPmNocm9tYV9xcF90YWJsZVswXSwg c2l6ZW9mKHNwcy0+Y2hyb21hX3FwX3RhYmxlWzBdKSk7CisgICAgICAgIG1lbWNweSgmc3BzLT5j aHJvbWFfcXBfdGFibGVbMl0sICZzcHMtPmNocm9tYV9xcF90YWJsZVswXSwgc2l6ZW9mKHNwcy0+ Y2hyb21hX3FwX3RhYmxlWzBdKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIHNwc19wb2MoVlZDU1BTICpzcHMpCit7CisgICAgc3BzLT5tYXhfcGljX29yZGVyX2Nu dF9sc2IgPSAxIDw8IChzcHMtPnItPnNwc19sb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51 czQgKyA0KTsKK30KKworc3RhdGljIHZvaWQgc3BzX2ludGVyKFZWQ1NQUyAqc3BzKQoreworICAg IGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7CisKKyAgICBzcHMtPm1heF9udW1fbWVyZ2Vf Y2FuZCAgICAgPSA2IC0gci0+c3BzX3NpeF9taW51c19tYXhfbnVtX21lcmdlX2NhbmQ7CisgICAg c3BzLT5tYXhfbnVtX2liY19tZXJnZV9jYW5kID0gNiAtIHItPnNwc19zaXhfbWludXNfbWF4X251 bV9pYmNfbWVyZ2VfY2FuZDsKKworICAgIGlmIChzcHMtPnItPnNwc19ncG1fZW5hYmxlZF9mbGFn KSB7CisgICAgICAgIHNwcy0+bWF4X251bV9ncG1fbWVyZ2VfY2FuZCA9IDI7CisgICAgICAgIGlm IChzcHMtPm1heF9udW1fbWVyZ2VfY2FuZCA+PSAzKQorICAgICAgICAgICAgc3BzLT5tYXhfbnVt X2dwbV9tZXJnZV9jYW5kID0gc3BzLT5tYXhfbnVtX21lcmdlX2NhbmQgLSByLT5zcHNfbWF4X251 bV9tZXJnZV9jYW5kX21pbnVzX21heF9udW1fZ3BtX2NhbmQ7CisgICAgfQorCisgICAgc3BzLT5s b2cyX3BhcmFsbGVsX21lcmdlX2xldmVsID0gci0+c3BzX2xvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2 ZWxfbWludXMyICsgMjsKK30KKworc3RhdGljIHZvaWQgc3BzX3BhcnRpdGlvbl9jb25zdHJhaW50 cyhWVkNTUFMqIHNwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworCisg ICAgc3BzLT5jdGJfbG9nMl9zaXplX3kgICAgPSByLT5zcHNfbG9nMl9jdHVfc2l6ZV9taW51czUg KyA1OworICAgIHNwcy0+Y3RiX3NpemVfeSAgICAgICAgID0gMSA8PCBzcHMtPmN0Yl9sb2cyX3Np emVfeTsKKyAgICBzcHMtPm1pbl9jYl9sb2cyX3NpemVfeSA9IHItPnNwc19sb2cyX21pbl9sdW1h X2NvZGluZ19ibG9ja19zaXplX21pbnVzMiArIDI7CisgICAgc3BzLT5taW5fY2Jfc2l6ZV95ICAg ICAgPSAxIDw8IHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIHNwcy0+bWF4X3RiX3NpemVf eSAgICAgID0gMSA8PCAoci0+c3BzX21heF9sdW1hX3RyYW5zZm9ybV9zaXplXzY0X2ZsYWcgPyA2 IDogNSk7CisgICAgc3BzLT5tYXhfdHNfc2l6ZSAgICAgICAgPSAxIDw8IChyLT5zcHNfbG9nMl90 cmFuc2Zvcm1fc2tpcF9tYXhfc2l6ZV9taW51czIgKyAyKTsKK30KKworc3RhdGljIHZvaWQgc3Bz X2xhZGYoVlZDU1BTKiBzcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsK KworICAgIGlmIChyLT5zcHNfbGFkZl9lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgc3BzLT5udW1f bGFkZl9pbnRlcnZhbHMgPSByLT5zcHNfbnVtX2xhZGZfaW50ZXJ2YWxzX21pbnVzMiArIDI7Cisg ICAgICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFswXSA9IDA7CisgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgc3BzLT5udW1fbGFkZl9pbnRlcnZhbHMgLSAxOyBpKyspIHsKKyAg ICAgICAgICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpICsgMV0gPQorICAgICAg ICAgICAgICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpXSArIHItPnNwc19sYWRm X2RlbHRhX3RocmVzaG9sZF9taW51czFbaV0gKyAxOworICAgICAgICB9CisgICAgfQorfQorCitz dGF0aWMgaW50IHNwc19kZXJpdmUoVlZDU1BTICpzcHMsIHZvaWQgKmxvZ19jdHgpCit7CisgICAg aW50IHJldDsKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworCisgICAgc3BzLT53 aWR0aCAgPSByLT5zcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZXM7CisgICAgc3BzLT5o ZWlnaHQgPSByLT5zcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGVzOworCisgICAgcmV0 ID0gc3BzX2JpdF9kZXB0aChzcHMsIGxvZ19jdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAg ICByZXR1cm4gcmV0OworICAgIHNwc19wb2Moc3BzKTsKKyAgICBzcHNfaW50ZXIoc3BzKTsKKyAg ICBzcHNfcGFydGl0aW9uX2NvbnN0cmFpbnRzKHNwcyk7CisgICAgc3BzX2xhZGYoc3BzKTsKKyAg ICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjICE9IDApCisgICAgICAgIHNwc19jaHJvbWFf cXBfdGFibGUoc3BzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcHNfZnJl ZShGRlJlZlN0cnVjdE9wYXF1ZSBvcGFxdWUsIHZvaWQgKm9iaikKK3sKKyAgICBWVkNTUFMgKnNw cyA9IChWVkNTUFMqKW9iajsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnNwcy0+cik7Cit9CisK K3N0YXRpYyBjb25zdCBWVkNTUFMgKnNwc19hbGxvYyhjb25zdCBIMjY2UmF3U1BTICpyc3BzLCB2 b2lkICpsb2dfY3R4KQoreworICAgIGludCByZXQ7CisgICAgVlZDU1BTICpzcHMgPSBmZl9yZWZz dHJ1Y3RfYWxsb2NfZXh0KHNpemVvZigqc3BzKSwgMCwgTlVMTCwgc3BzX2ZyZWUpOworCisgICAg ZmZfcmVmc3RydWN0X3JlcGxhY2UoJnNwcy0+ciwgcnNwcyk7CisKKyAgICByZXQgPSBzcHNfZGVy aXZlKHNwcywgbG9nX2N0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZmFpbDsK KworICAgIHJldHVybiBzcHM7CisKK2ZhaWw6CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZzcHMp OworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRlY29kZV9zcHMoVlZDUGFyYW1T ZXRzICpwcywgY29uc3QgSDI2NlJhd1NQUyAqcnNwcywgdm9pZCAqbG9nX2N0eCkKK3sKKyAgICBj b25zdCBpbnQgc3BzX2lkICAgICAgICA9IHJzcHMtPnNwc19zZXFfcGFyYW1ldGVyX3NldF9pZDsK KyAgICBjb25zdCBWVkNTUFMgKm9sZF9zcHMgICA9IHBzLT5zcHNfbGlzdFtzcHNfaWRdOworICAg IGNvbnN0IFZWQ1NQUyAqc3BzOworCisgICAgaWYgKG9sZF9zcHMgJiYgb2xkX3Nwcy0+ciA9PSBy c3BzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNwcyA9IHNwc19hbGxvYyhyc3BzLCBsb2df Y3R4KTsKKyAgICBpZiAoIXNwcykKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKwor ICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZwcy0+c3BzX2xpc3Rbc3BzX2lkXSwgc3BzKTsKKyAg ICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnNwcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgcHBzX2Nocm9tYV9xcF9vZmZzZXQoVlZDUFBTICpwcHMpCit7CisgICAgcHBzLT5jaHJv bWFfcXBfb2Zmc2V0W0NCIC0gMV0gICA9IHBwcy0+ci0+cHBzX2NiX3FwX29mZnNldDsKKyAgICBw cHMtPmNocm9tYV9xcF9vZmZzZXRbQ1IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY3JfcXBfb2Zmc2V0 OworICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldFtKQ0JDUiAtIDFdPSBwcHMtPnItPnBwc19qb2lu dF9jYmNyX3FwX29mZnNldF92YWx1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykg eworICAgICAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdFtpXVtDQiAtIDFdICAgPSBwcHMt PnItPnBwc19jYl9xcF9vZmZzZXRfbGlzdFtpXTsKKyAgICAgICAgcHBzLT5jaHJvbWFfcXBfb2Zm c2V0X2xpc3RbaV1bQ1IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY3JfcXBfb2Zmc2V0X2xpc3RbaV07 CisgICAgICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldF9saXN0W2ldW0pDQkNSIC0gMV09IHBwcy0+ ci0+cHBzX2pvaW50X2NiY3JfcXBfb2Zmc2V0X2xpc3RbaV07CisgICAgfQorfQorCitzdGF0aWMg dm9pZCBwcHNfd2lkdGhfaGVpZ2h0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKK3sK KyAgICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBzLT5yOworCisgICAgcHBzLT53aWR0aCAgICAg ICAgICA9IHItPnBwc19waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOworICAgIHBwcy0+aGVpZ2h0 ICAgICAgICAgPSByLT5wcHNfcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXM7CisKKyAgICBwcHMt PmN0Yl93aWR0aCAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT53aWR0aCwgIHNwcy0+Y3RiX2xv ZzJfc2l6ZV95KTsKKyAgICBwcHMtPmN0Yl9oZWlnaHQgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBz LT5oZWlnaHQsIHNwcy0+Y3RiX2xvZzJfc2l6ZV95KTsKKyAgICBwcHMtPmN0Yl9jb3VudCAgICAg ID0gcHBzLT5jdGJfd2lkdGggKiBwcHMtPmN0Yl9oZWlnaHQ7CisKKyAgICBwcHMtPm1pbl9jYl93 aWR0aCAgID0gcHBzLT53aWR0aCAgPj4gc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgcHBz LT5taW5fY2JfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95 OworCisgICAgcHBzLT5taW5fcHVfd2lkdGggICA9IHBwcy0+d2lkdGggID4+IE1JTl9QVV9MT0cy OworICAgIHBwcy0+bWluX3B1X2hlaWdodCAgPSBwcHMtPmhlaWdodCA+PiBNSU5fUFVfTE9HMjsK KyAgICBwcHMtPm1pbl90dV93aWR0aCAgID0gcHBzLT53aWR0aCAgPj4gTUlOX1RVX0xPRzI7Cisg ICAgcHBzLT5taW5fdHVfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IE1JTl9UVV9MT0cyOworCisg ICAgcHBzLT53aWR0aDMyICAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+d2lkdGgsICA1KTsK KyAgICBwcHMtPmhlaWdodDMyICAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT5oZWlnaHQsIDUp OworICAgIHBwcy0+d2lkdGg2NCAgICAgICAgPSBBVl9DRUlMX1JTSElGVChwcHMtPndpZHRoLCAg Nik7CisgICAgcHBzLT5oZWlnaHQ2NCAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+aGVpZ2h0 LCA2KTsKK30KKworc3RhdGljIGludCBwcHNfYmQoVlZDUFBTICpwcHMpCit7CisgICAgY29uc3Qg SDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKworICAgIHBwcy0+Y29sX2JkICAgICAgICA9IGF2X2Nh bGxvYyhyLT5udW1fdGlsZV9jb2x1bW5zICArIDEsIHNpemVvZigqcHBzLT5jb2xfYmQpKTsKKyAg ICBwcHMtPnJvd19iZCAgICAgICAgPSBhdl9jYWxsb2Moci0+bnVtX3RpbGVfcm93cyAgKyAxLCAg ICBzaXplb2YoKnBwcy0+cm93X2JkKSk7CisgICAgcHBzLT5jdGJfdG9fY29sX2JkID0gYXZfY2Fs bG9jKHBwcy0+Y3RiX3dpZHRoICArIDEsICAgICAgc2l6ZW9mKCpwcHMtPmN0Yl90b19jb2xfYmQp KTsKKyAgICBwcHMtPmN0Yl90b19yb3dfYmQgPSBhdl9jYWxsb2MocHBzLT5jdGJfaGVpZ2h0ICsg MSwgICAgICBzaXplb2YoKnBwcy0+Y3RiX3RvX2NvbF9iZCkpOworICAgIGlmICghcHBzLT5jb2xf YmQgfHwgIXBwcy0+cm93X2JkIHx8ICFwcHMtPmN0Yl90b19jb2xfYmQgfHwgIXBwcy0+Y3RiX3Rv X3Jvd19iZCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZvciAoaW50 IGkgPSAwLCBqID0gMDsgaSA8IHItPm51bV90aWxlX2NvbHVtbnM7IGkrKykgeworICAgICAgICBw cHMtPmNvbF9iZFtpXSA9IGo7CisgICAgICAgIGogKz0gci0+Y29sX3dpZHRoX3ZhbFtpXTsKKyAg ICAgICAgZm9yIChpbnQgayA9IHBwcy0+Y29sX2JkW2ldOyBrIDwgajsgaysrKQorICAgICAgICAg ICAgcHBzLT5jdGJfdG9fY29sX2JkW2tdID0gcHBzLT5jb2xfYmRbaV07CisgICAgfQorCisgICAg Zm9yIChpbnQgaSA9IDAsIGogPSAwOyBpIDwgci0+bnVtX3RpbGVfcm93czsgaSsrKSB7CisgICAg ICAgIHBwcy0+cm93X2JkW2ldID0gajsKKyAgICAgICAgaiArPSByLT5yb3dfaGVpZ2h0X3ZhbFtp XTsKKyAgICAgICAgZm9yIChpbnQgayA9IHBwcy0+cm93X2JkW2ldOyBrIDwgajsgaysrKQorICAg ICAgICAgICAgcHBzLT5jdGJfdG9fcm93X2JkW2tdID0gcHBzLT5yb3dfYmRbaV07CisgICAgfQor ICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgbmV4dF90aWxlX2lkeChpbnQgdGlsZV9p ZHgsIGNvbnN0IGludCBpLCBjb25zdCBIMjY2UmF3UFBTICpyKQoreworICAgIGlmIChyLT5wcHNf dGlsZV9pZHhfZGVsdGFfcHJlc2VudF9mbGFnKSB7CisgICAgICAgIHRpbGVfaWR4ICs9IHItPnBw c190aWxlX2lkeF9kZWx0YV92YWxbaV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGlsZV9pZHgg Kz0gci0+cHBzX3NsaWNlX3dpZHRoX2luX3RpbGVzX21pbnVzMVtpXSArIDE7CisgICAgICAgIGlm ICh0aWxlX2lkeCAlIHItPm51bV90aWxlX2NvbHVtbnMgPT0gMCkKKyAgICAgICAgICAgIHRpbGVf aWR4ICs9IChyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3RpbGVzX21pbnVzMVtpXSkgKiByLT5udW1f dGlsZV9jb2x1bW5zOworICAgIH0KKyAgICByZXR1cm4gdGlsZV9pZHg7Cit9CisKK3N0YXRpYyB2 b2lkIHRpbGVfeHkoaW50ICp0aWxlX3gsIGludCAqdGlsZV95LCBjb25zdCBpbnQgdGlsZV9pZHgs IGNvbnN0IFZWQ1BQUyAqcHBzKQoreworICAgICp0aWxlX3ggPSB0aWxlX2lkeCAlIHBwcy0+ci0+ bnVtX3RpbGVfY29sdW1uczsKKyAgICAqdGlsZV95ID0gdGlsZV9pZHggLyBwcHMtPnItPm51bV90 aWxlX2NvbHVtbnM7Cit9CisKK3N0YXRpYyB2b2lkIGN0dV94eShpbnQgKmN0dV94LCBpbnQgKmN0 dV95LCBjb25zdCBpbnQgdGlsZV94LCBjb25zdCBpbnQgdGlsZV95LCBjb25zdCBWVkNQUFMgKnBw cykKK3sKKyAgICAqY3R1X3ggPSBwcHMtPmNvbF9iZFt0aWxlX3hdOworICAgICpjdHVfeSA9IHBw cy0+cm93X2JkW3RpbGVfeV07Cit9CisKK3N0YXRpYyBpbnQgY3R1X3JzKGNvbnN0IGludCBjdHVf eCwgY29uc3QgaW50IGN0dV95LCBjb25zdCBWVkNQUFMgKnBwcykKK3sKKyAgICByZXR1cm4gcHBz LT5jdGJfd2lkdGggKiBjdHVfeSArIGN0dV94OworfQorCitzdGF0aWMgaW50IHBwc19hZGRfY3R1 cyhWVkNQUFMgKnBwcywgaW50ICpvZmYsIGNvbnN0IGludCBjdHVfeCwgY29uc3QgaW50IGN0dV95 LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKK3sKKyAgICBpbnQgc3RhcnQgPSAqb2Zm OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHgg PSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICBwcHMtPmN0Yl9hZGRyX2luX3NsaWNlWypv ZmZdID0gY3R1X3JzKGN0dV94ICsgeCwgY3R1X3kgKyB5LCBwcHMpOworICAgICAgICAgICAgKCpv ZmYpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICpvZmYgLSBzdGFydDsKK30KKwor c3RhdGljIGludCBwcHNfb25lX3RpbGVfc2xpY2VzKFZWQ1BQUyAqcHBzLCBjb25zdCBpbnQgdGls ZV9pZHgsIGludCBpLCBpbnQgKm9mZikKK3sKKyAgICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBz LT5yOworICAgIGludCBjdHVfeCwgY3R1X3ksIGN0dV95X2VuZCwgdGlsZV94LCB0aWxlX3k7CisK KyAgICB0aWxlX3h5KCZ0aWxlX3gsICZ0aWxlX3ksIHRpbGVfaWR4LCBwcHMpOworICAgIGN0dV94 eSgmY3R1X3gsICZjdHVfeSwgdGlsZV94LCB0aWxlX3ksIHBwcyk7CisgICAgY3R1X3lfZW5kID0g Y3R1X3kgKyByLT5yb3dfaGVpZ2h0X3ZhbFt0aWxlX3ldOworICAgIHdoaWxlIChjdHVfeSA8IGN0 dV95X2VuZCkgeworICAgICAgICBwcHMtPnNsaWNlX3N0YXJ0X29mZnNldFtpXSA9ICpvZmY7Cisg ICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gPSBwcHNfYWRkX2N0dXMocHBzLCBvZmYs IGN0dV94LCBjdHVfeSwKKyAgICAgICAgICAgIHItPmNvbF93aWR0aF92YWxbdGlsZV94XSwgci0+ c2xpY2VfaGVpZ2h0X2luX2N0dXNbaV0pOworICAgICAgICBjdHVfeSArPSByLT5zbGljZV9oZWln aHRfaW5fY3R1c1tpKytdOworICAgIH0KKyAgICBpLS07CisgICAgcmV0dXJuIGk7Cit9CisKK3N0 YXRpYyB2b2lkIHBwc19tdWx0aV90aWxlc19zbGljZShWVkNQUFMgKnBwcywgY29uc3QgaW50IHRp bGVfaWR4LCBjb25zdCBpbnQgaSwgaW50ICpvZmYpCit7CisgICAgY29uc3QgSDI2NlJhd1BQUyAq ciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LHRpbGVfeCwgdGlsZV95OworCisgICAg dGlsZV94eSgmdGlsZV94LCAmdGlsZV95LCB0aWxlX2lkeCwgcHBzKTsKKyAgICBwcHMtPnNsaWNl X3N0YXJ0X29mZnNldFtpXSA9ICpvZmY7CisgICAgcHBzLT5udW1fY3R1c19pbl9zbGljZVtpXSA9 IDA7CisgICAgZm9yIChpbnQgdHkgPSB0aWxlX3k7IHR5IDw9IHRpbGVfeSArIHItPnBwc19zbGlj ZV9oZWlnaHRfaW5fdGlsZXNfbWludXMxW2ldOyB0eSsrKSB7CisgICAgICAgIGZvciAoaW50IHR4 ID0gdGlsZV94OyB0eCA8PSB0aWxlX3ggKyByLT5wcHNfc2xpY2Vfd2lkdGhfaW5fdGlsZXNfbWlu dXMxW2ldOyB0eCsrKSB7CisgICAgICAgICAgICBjdHVfeHkoJmN0dV94LCAmY3R1X3ksIHR4LCB0 eSwgcHBzKTsKKyAgICAgICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gKz0gcHBzX2Fk ZF9jdHVzKHBwcywgb2ZmLCBjdHVfeCwgY3R1X3ksCisgICAgICAgICAgICAgICAgci0+Y29sX3dp ZHRoX3ZhbFt0eF0sIHItPnJvd19oZWlnaHRfdmFsW3R5XSk7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIHBwc19yZWN0X3NsaWNlKFZWQ1BQUyogcHBzKQoreworICAgIGNvbnN0 IEgyNjZSYXdQUFMqIHIgPSBwcHMtPnI7CisgICAgaW50IHRpbGVfaWR4ID0gMCwgb2ZmID0gMDsK KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgci0+cHBzX251bV9zbGljZXNfaW5fcGljX21pbnVz MSArIDE7IGkrKykgeworICAgICAgICBpZiAoIXItPnBwc19zbGljZV93aWR0aF9pbl90aWxlc19t aW51czFbaV0gJiYKKyAgICAgICAgICAgICFyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3RpbGVzX21p bnVzMVtpXSkgeworICAgICAgICAgICAgaSA9IHBwc19vbmVfdGlsZV9zbGljZXMocHBzLCB0aWxl X2lkeCwgaSwgJm9mZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcHNfbXVsdGlf dGlsZXNfc2xpY2UocHBzLCB0aWxlX2lkeCwgaSwgJm9mZik7CisKKyAgICAgICAgfQorICAgICAg ICB0aWxlX2lkeCA9IG5leHRfdGlsZV9pZHgodGlsZV9pZHgsIGksIHIpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgcHBzX25vX3JlY3Rfc2xpY2UoVlZDUFBTKiBwcHMpCit7CisgICAgY29uc3Qg SDI2NlJhd1BQUyogciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LCBvZmYgPSAwOwor CisgICAgZm9yIChpbnQgdGlsZV95ID0gMDsgdGlsZV95IDwgci0+bnVtX3RpbGVfcm93czsgdGls ZV95KyspIHsKKyAgICAgICAgZm9yIChpbnQgdGlsZV94ID0gMDsgdGlsZV94IDwgci0+bnVtX3Rp bGVfY29sdW1uczsgdGlsZV94KyspIHsKKyAgICAgICAgICAgIGN0dV94eSgmY3R1X3gsICZjdHVf eSwgdGlsZV94LCB0aWxlX3ksIHBwcyk7CisgICAgICAgICAgICBwcHNfYWRkX2N0dXMocHBzLCAm b2ZmLCBjdHVfeCwgY3R1X3ksIHItPmNvbF93aWR0aF92YWxbdGlsZV94XSwgci0+cm93X2hlaWdo dF92YWxbdGlsZV95XSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcHBzX3Ns aWNlX21hcChWVkNQUFMgKnBwcykKK3sKKyAgICBwcHMtPmN0Yl9hZGRyX2luX3NsaWNlID0gYXZf Y2FsbG9jKHBwcy0+Y3RiX2NvdW50LCBzaXplb2YoKnBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UpKTsK KyAgICBpZiAoIXBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UpCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGljZV9mbGFnKQorICAgICAg ICBwcHNfcmVjdF9zbGljZShwcHMpOworICAgIGVsc2UKKyAgICAgICAgcHBzX25vX3JlY3Rfc2xp Y2UocHBzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcHNfcmVmX3dyYXBh cm91bmRfb2Zmc2V0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKK3sKKyAgICBjb25z dCBIMjY2UmF3UFBTICpyID0gcHBzLT5yOworCisgICAgaWYgKHItPnBwc19yZWZfd3JhcGFyb3Vu ZF9lbmFibGVkX2ZsYWcpCisgICAgICAgIHBwcy0+cmVmX3dyYXBhcm91bmRfb2Zmc2V0ID0gKHBw cy0+d2lkdGggLyBzcHMtPm1pbl9jYl9zaXplX3kpIC0gci0+cHBzX3BpY193aWR0aF9taW51c193 cmFwYXJvdW5kX29mZnNldDsKK30KKworc3RhdGljIGludCBwcHNfZGVyaXZlKFZWQ1BQUyAqcHBz LCBjb25zdCBWVkNTUFMgKnNwcykKK3sKKyAgICBpbnQgcmV0OworCisgICAgcHBzX2Nocm9tYV9x cF9vZmZzZXQocHBzKTsKKyAgICBwcHNfd2lkdGhfaGVpZ2h0KHBwcywgc3BzKTsKKworICAgIHJl dCA9IHBwc19iZChwcHMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0Owor CisgICAgcmV0ID0gcHBzX3NsaWNlX21hcChwcHMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAg ICByZXR1cm4gcmV0OworCisgICAgcHBzX3JlZl93cmFwYXJvdW5kX29mZnNldChwcHMsIHNwcyk7 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHBzX2ZyZWUoRkZSZWZTdHJ1Y3RP cGFxdWUgb3BhcXVlLCB2b2lkICpvYmopCit7CisgICAgVlZDUFBTICpwcHMgPSAoVlZDUFBTICop b2JqOworCisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZwcHMtPnIpOworCisgICAgYXZfZnJlZXAo JnBwcy0+Y29sX2JkKTsKKyAgICBhdl9mcmVlcCgmcHBzLT5yb3dfYmQpOworICAgIGF2X2ZyZWVw KCZwcHMtPmN0Yl90b19jb2xfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19yb3dfYmQp OworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKTsKK30KKworc3RhdGljIGNv bnN0IFZWQ1BQUyAqcHBzX2FsbG9jKGNvbnN0IEgyNjZSYXdQUFMgKnJwcHMsIGNvbnN0IFZWQ1NQ UyAqc3BzKQoreworICAgIGludCByZXQ7CisgICAgVlZDUFBTICpwcHMgPSBmZl9yZWZzdHJ1Y3Rf YWxsb2NfZXh0KHNpemVvZigqcHBzKSwgMCwgTlVMTCwgcHBzX2ZyZWUpOworCisgICAgaWYgKCFw cHMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJnBw cy0+ciwgcnBwcyk7CisKKyAgICByZXQgPSBwcHNfZGVyaXZlKHBwcywgc3BzKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcmV0dXJuIHBwczsKKworZmFpbDoK KyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBwcyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0 YXRpYyBpbnQgZGVjb2RlX3BwcyhWVkNQYXJhbVNldHMgKnBzLCBjb25zdCBIMjY2UmF3UFBTICpy cHBzKQoreworICAgIGludCByZXQgICAgICAgICAgICAgICAgID0gMDsKKyAgICBjb25zdCBpbnQg cHBzX2lkICAgICAgICA9IHJwcHMtPnBwc19waWNfcGFyYW1ldGVyX3NldF9pZDsKKyAgICBjb25z dCBpbnQgc3BzX2lkICAgICAgICA9IHJwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZDsKKyAg ICBjb25zdCBWVkNQUFMgKm9sZF9wcHMgICA9IHBzLT5wcHNfbGlzdFtwcHNfaWRdOworICAgIGNv bnN0IFZWQ1BQUyAqcHBzOworCisgICAgaWYgKG9sZF9wcHMgJiYgb2xkX3Bwcy0+ciA9PSBycHBz KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBwcyA9IHBwc19hbGxvYyhycHBzLCBwcy0+c3Bz X2xpc3Rbc3BzX2lkXSk7CisgICAgaWYgKCFwcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmcHMtPnBwc19saXN0W3Bwc19pZF0s IHBwcyk7CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZwcHMpOworCisgICAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCBkZWNvZGVfcHMoVlZDUGFyYW1TZXRzICpwcywgY29uc3QgQ29kZWRC aXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2Niwgdm9pZCAqbG9nX2N0eCkKK3sKKyAgICBjb25zdCBI MjY2UmF3UGljdHVyZUhlYWRlciAqcGggPSBoMjY2LT5waDsKKyAgICBjb25zdCBIMjY2UmF3UFBT ICpycHBzOworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnJzcHM7CisgICAgaW50IHJldDsKKworICAg IGlmICghcGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgcnBw cyA9IGgyNjYtPnBwc1twaC0+cGhfcGljX3BhcmFtZXRlcl9zZXRfaWRdOworICAgIGlmICghcnBw cykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICByc3BzID0gaDI2 Ni0+c3BzW3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZF07CisgICAgaWYgKCFyc3BzKQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHJldCA9IGRlY29kZV9z cHMocHMsIHJzcHMsIGxvZ19jdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgcmV0ID0gZGVjb2RlX3BwcyhwcywgcnBwcyk7CisgICAgaWYgKHJldCA8IDAp CisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBXRUlH SFRfVEFCTEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdy0+bmJfd2VpZ2h0c1tM IyN4XSA9IHItPm51bV93ZWlnaHRzX2wjI3g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHct Pm5iX3dlaWdodHNbTCMjeF07IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB3LT53ZWlnaHRfZmxhZ1tMIyN4XVtMVU1B XVtpXSAgICAgPSByLT5sdW1hX3dlaWdodF9sIyN4IyNfZmxhZ1tpXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIHctPndlaWdodF9mbGFnW0wjI3hdW0NIUk9NQV1baV0g ICA9IHItPmNocm9tYV93ZWlnaHRfbCMjeCMjX2ZsYWdbaV07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgdy0+d2VpZ2h0W0wjI3hdW0xVTUFdW2ldICAgICAgICAgID0gZGVu b21bTFVNQV0gKyByLT5kZWx0YV9sdW1hX3dlaWdodF9sIyN4W2ldOyAgICAgICAgICAgICAgICAg XAorICAgICAgICB3LT5vZmZzZXRbTCMjeF1bTFVNQV1baV0gICAgICAgICAgPSByLT5sdW1hX29m ZnNldF9sIyN4W2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgIGZvciAoaW50IGogPSBDQjsgaiA8PSBDUjsgaisrKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg IHctPndlaWdodFtMIyN4XVtqXVtpXSAgICAgICAgID0gZGVub21bQ0hST01BXSArIHItPmRlbHRh X2Nocm9tYV93ZWlnaHRfbCMjeFtpXVtqIC0gMV07ICAgICAgXAorICAgICAgICAgICAgdy0+b2Zm c2V0W0wjI3hdW2pdW2ldICAgICAgICAgPSAxMjggKyByLT5kZWx0YV9jaHJvbWFfb2Zmc2V0X2wj I3hbaV1baiAtIDFdOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB3LT5vZmZzZXRbTCMj eF1bal1baV0gICAgICAgIC09ICgxMjggKiB3LT53ZWlnaHRbTCMjeF1bal1baV0pID4+IHctPmxv ZzJfZGVub21bQ0hST01BXTsgICAgIFwKKyAgICAgICAgICAgIHctPm9mZnNldFtMIyN4XVtqXVtp XSAgICAgICAgID0gYXZfY2xpcF9pbnRwMih3LT5vZmZzZXRbTCMjeF1bal1baV0sIDcpOyAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKworc3RhdGljIHZvaWQgcHJlZF93ZWlnaHRfdGFibGUoUHJlZFdlaWdodFRhYmxlICp3LCBj b25zdCBIMjY2UmF3UHJlZFdlaWdodFRhYmxlICpyKQoreworICAgIGludCBkZW5vbVsyXTsKKwor ICAgIHctPmxvZzJfZGVub21bTFVNQV0gPSByLT5sdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tOworICAg IHctPmxvZzJfZGVub21bQ0hST01BXSA9IHctPmxvZzJfZGVub21bTFVNQV0gKyByLT5kZWx0YV9j aHJvbWFfbG9nMl93ZWlnaHRfZGVub207CisgICAgZGVub21bTFVNQV0gPSAxIDw8IHctPmxvZzJf ZGVub21bTFVNQV07CisgICAgZGVub21bQ0hST01BXSA9IDEgPDwgdy0+bG9nMl9kZW5vbVtDSFJP TUFdOworICAgIFdFSUdIVF9UQUJMRSgwKQorICAgIFdFSUdIVF9UQUJMRSgxKQorfQorCisvLyA4 LjMuMSBEZWNvZGluZyBwcm9jZXNzIGZvciBwaWN0dXJlIG9yZGVyIGNvdW50CitzdGF0aWMgaW50 IHBoX2NvbXB1dGVfcG9jKGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCwgY29uc3QgSDI2 NlJhd1NQUyAqc3BzLCBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19jbHZzcykKK3sK KyAgICBjb25zdCBpbnQgbWF4X3BvY19sc2IgICAgICAgPSAxIDw8IChzcHMtPnNwc19sb2cyX21h eF9waWNfb3JkZXJfY250X2xzYl9taW51czQgKyA0KTsKKyAgICBjb25zdCBpbnQgcHJldl9wb2Nf bHNiICAgICAgPSBwb2NfdGlkMCAlIG1heF9wb2NfbHNiOworICAgIGNvbnN0IGludCBwcmV2X3Bv Y19tc2IgICAgICA9IHBvY190aWQwIC0gcHJldl9wb2NfbHNiOworICAgIGNvbnN0IGludCBwb2Nf bHNiICAgICAgICAgICA9IHBoLT5waF9waWNfb3JkZXJfY250X2xzYjsKKyAgICBpbnQgcG9jX21z YjsKKworICAgIGlmIChwaC0+cGhfcG9jX21zYl9jeWNsZV9wcmVzZW50X2ZsYWcpIHsKKyAgICAg ICAgcG9jX21zYiA9IHBoLT5waF9wb2NfbXNiX2N5Y2xlX3ZhbCAqIG1heF9wb2NfbHNiOworICAg IH0gZWxzZSBpZiAoaXNfY2x2c3MpIHsKKyAgICAgICAgcG9jX21zYiA9IDA7CisgICAgfSBlbHNl IHsKKyAgICAgICAgaWYgKHBvY19sc2IgPCBwcmV2X3BvY19sc2IgJiYgcHJldl9wb2NfbHNiIC0g cG9jX2xzYiA+PSBtYXhfcG9jX2xzYiAvIDIpCisgICAgICAgICAgICBwb2NfbXNiID0gcHJldl9w b2NfbXNiICsgbWF4X3BvY19sc2I7CisgICAgICAgIGVsc2UgaWYgKHBvY19sc2IgPiBwcmV2X3Bv Y19sc2IgJiYgcG9jX2xzYiAtIHByZXZfcG9jX2xzYiA+IG1heF9wb2NfbHNiIC8gMikKKyAgICAg ICAgICAgIHBvY19tc2IgPSBwcmV2X3BvY19tc2IgLSBtYXhfcG9jX2xzYjsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgcG9jX21zYiA9IHByZXZfcG9jX21zYjsKKyAgICB9CisKKyAgICByZXR1 cm4gcG9jX21zYiArIHBvY19sc2I7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHVpbnQx Nl90IGxtY3NfZGVyaXZlX2x1dF9zYW1wbGUodWludDE2X3Qgc2FtcGxlLAorICAgIHVpbnQxNl90 ICpwaXZvdDEsIHVpbnQxNl90ICpwaXZvdDIsIHVpbnQxNl90ICpzY2FsZV9jb2VmZiwgY29uc3Qg aW50IGlkeCwgY29uc3QgaW50IG1heCkKK3sKKyAgICBjb25zdCBpbnQgbHV0X3NhbXBsZSA9Cisg ICAgICAgIHBpdm90MVtpZHhdICsgKChzY2FsZV9jb2VmZltpZHhdICogKHNhbXBsZSAtIHBpdm90 MltpZHhdKSArICgxPDwgMTApKSA+PiAxMSk7CisgICAgcmV0dXJuIGF2X2NsaXAobHV0X3NhbXBs ZSwgMCwgbWF4IC0gMSk7Cit9CisKKy8vOC44LjIuMiBJbnZlcnNlIG1hcHBpbmcgcHJvY2VzcyBm b3IgYSBsdW1hIHNhbXBsZQorc3RhdGljIGludCBsbWNzX2Rlcml2ZV9sdXQoVlZDTE1DUyAqbG1j cywgY29uc3QgSDI2NlJhd0FQUyAqcmxtY3MsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcykKK3sKKyAg ICBjb25zdCBpbnQgYml0X2RlcHRoID0gKHNwcy0+c3BzX2JpdGRlcHRoX21pbnVzOCArIDgpOwor ICAgIGNvbnN0IGludCBtYXggICAgICAgPSAoMSA8PCBiaXRfZGVwdGgpOworICAgIGNvbnN0IGlu dCBvcmdfY3cgICAgPSBtYXggLyBMTUNTX01BWF9CSU5fU0laRTsKKyAgICBjb25zdCBpbnQgc2hp ZnQgICAgID0gYXZfbG9nMihvcmdfY3cpOworICAgIGNvbnN0IGludCBvZmYgICAgICAgPSAxIDw8 IChzaGlmdCAtIDEpOworICAgIGludCBjd1tMTUNTX01BWF9CSU5fU0laRV07CisgICAgdWludDE2 X3QgaW5wdXRfcGl2b3RbTE1DU19NQVhfQklOX1NJWkVdOworICAgIHVpbnQxNl90IHNjYWxlX2Nv ZWZmW0xNQ1NfTUFYX0JJTl9TSVpFXTsKKyAgICB1aW50MTZfdCBpbnZfc2NhbGVfY29lZmZbTE1D U19NQVhfQklOX1NJWkVdOworICAgIGludCBpLCBkZWx0YV9jcnM7CisgICAgaWYgKGJpdF9kZXB0 aCA+IExNQ1NfTUFYX0JJVF9ERVBUSCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxD T01FOworCisgICAgaWYgKCFybG1jcykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisKKyAgICBsbWNzLT5taW5fYmluX2lkeCA9IHJsbWNzLT5sbWNzX21pbl9iaW5faWR4Owor ICAgIGxtY3MtPm1heF9iaW5faWR4ID0gTE1DU19NQVhfQklOX1NJWkUgLSAxIC0gcmxtY3MtPmxt Y3NfbWluX2Jpbl9pZHg7CisKKyAgICBtZW1zZXQoY3csIDAsIHNpemVvZihjdykpOworICAgIGZv ciAoaW50IGkgPSBsbWNzLT5taW5fYmluX2lkeDsgaSA8PSBsbWNzLT5tYXhfYmluX2lkeDsgaSsr KQorICAgICAgICBjd1tpXSA9IG9yZ19jdyArICgxIC0gMiAqIHJsbWNzLT5sbWNzX2RlbHRhX3Np Z25fY3dfZmxhZ1tpXSkgKiBybG1jcy0+bG1jc19kZWx0YV9hYnNfY3dbaV07CisKKyAgICBkZWx0 YV9jcnMgPSAoMSAtIDIgKiBybG1jcy0+bG1jc19kZWx0YV9zaWduX2Nyc19mbGFnKSAqIHJsbWNz LT5sbWNzX2RlbHRhX2Fic19jcnM7CisKKyAgICBsbWNzLT5waXZvdFswXSA9IDA7CisgICAgZm9y IChpID0gMDsgaSA8IExNQ1NfTUFYX0JJTl9TSVpFOyBpKyspIHsKKyAgICAgICAgaW5wdXRfcGl2 b3RbaV0gICAgICAgID0gaSAqIG9yZ19jdzsKKyAgICAgICAgbG1jcy0+cGl2b3RbaSArIDFdID0g bG1jcy0+cGl2b3RbaV0gKyBjd1tpXTsKKyAgICAgICAgc2NhbGVfY29lZmZbaV0gICAgICAgID0g KGN3W2ldICogKDEgPDwgMTEpICsgIG9mZikgPj4gc2hpZnQ7CisgICAgICAgIGlmIChjd1tpXSA9 PSAwKSB7CisgICAgICAgICAgICBpbnZfc2NhbGVfY29lZmZbaV0gPSAwOworICAgICAgICAgICAg bG1jcy0+Y2hyb21hX3NjYWxlX2NvZWZmW2ldID0gKDEgPDwgMTEpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgaW52X3NjYWxlX2NvZWZmW2ldID0gb3JnX2N3ICogKDEgPDwgMTEpIC8g Y3dbaV07CisgICAgICAgICAgICBsbWNzLT5jaHJvbWFfc2NhbGVfY29lZmZbaV0gPSBvcmdfY3cg KiAoMSA8PCAxMSkgLyAoY3dbaV0gKyBkZWx0YV9jcnMpOworICAgICAgICB9CisgICAgfQorCisg ICAgLy9kZXJpdmUgbG1jc19md2RfbHV0CisgICAgZm9yICh1aW50MTZfdCBzYW1wbGUgPSAwOyBz YW1wbGUgPCBtYXg7IHNhbXBsZSsrKSB7CisgICAgICAgIGNvbnN0IGludCBpZHhfeSA9IHNhbXBs ZSAvIG9yZ19jdzsKKyAgICAgICAgY29uc3QgdWludDE2X3QgZndkX3NhbXBsZSA9IGxtY3NfZGVy aXZlX2x1dF9zYW1wbGUoc2FtcGxlLCBsbWNzLT5waXZvdCwKKyAgICAgICAgICAgIGlucHV0X3Bp dm90LCBzY2FsZV9jb2VmZiwgaWR4X3ksIG1heCk7CisgICAgICAgIGlmIChiaXRfZGVwdGggPiA4 KQorICAgICAgICAgICAgKCh1aW50MTZfdCAqKWxtY3MtPmZ3ZF9sdXQpW3NhbXBsZV0gPSBmd2Rf c2FtcGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsbWNzLT5md2RfbHV0W3NhbXBsZV0g PSBmd2Rfc2FtcGxlOworCisgICAgfQorCisgICAgLy9kZXJpdmUgbG1jc19pbnZfbHV0CisgICAg aSA9IGxtY3MtPm1pbl9iaW5faWR4OworICAgIGZvciAodWludDE2X3Qgc2FtcGxlID0gMDsgc2Ft cGxlIDwgbWF4OyBzYW1wbGUrKykgeworICAgICAgICB1aW50MTZfdCBpbnZfc2FtcGxlOworICAg ICAgICB3aGlsZSAoc2FtcGxlID49IGxtY3MtPnBpdm90W2kgKyAxXSAmJiBpIDw9IGxtY3MtPm1h eF9iaW5faWR4KQorICAgICAgICAgICAgaSsrOworCisgICAgICAgIGludl9zYW1wbGUgPSBsbWNz X2Rlcml2ZV9sdXRfc2FtcGxlKHNhbXBsZSwgaW5wdXRfcGl2b3QsIGxtY3MtPnBpdm90LAorICAg ICAgICAgICAgaW52X3NjYWxlX2NvZWZmLCBpLCBtYXgpOworCisgICAgICAgIGlmIChiaXRfZGVw dGggPiA4KQorICAgICAgICAgICAgKCh1aW50MTZfdCAqKWxtY3MtPmludl9sdXQpW3NhbXBsZV0g PSBpbnZfc2FtcGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsbWNzLT5pbnZfbHV0W3Nh bXBsZV0gPSBpbnZfc2FtcGxlOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IHBoX21heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2FuZChjb25zdCBIMjY2UmF3U1BTICpzcHMs IGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCkKK3sKKyAgICBpZiAoc3BzLT5zcHNfYWZm aW5lX2VuYWJsZWRfZmxhZykKKyAgICAgICAgcmV0dXJuIDUgLSBzcHMtPnNwc19maXZlX21pbnVz X21heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2FuZDsKKyAgICByZXR1cm4gc3BzLT5zcHNfc2J0bXZw X2VuYWJsZWRfZmxhZyAmJiBwaC0+cGhfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZzsKK30KKwor c3RhdGljIGludCBwaF9kZXJpdmUoVlZDUEggKnBoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNv bnN0IEgyNjZSYXdQUFMgKnBwcywgY29uc3QgaW50IHBvY190aWQwLCBjb25zdCBpbnQgaXNfY2x2 c3MpCit7CisgICAgcGgtPm1heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2FuZCA9IHBoX21heF9udW1f c3ViYmxvY2tfbWVyZ2VfY2FuZChzcHMsIHBoLT5yKTsKKworICAgIHBoLT5wb2MgPSBwaF9jb21w dXRlX3BvYyhwaC0+ciwgc3BzLCBwb2NfdGlkMCwgaXNfY2x2c3MpOworCisgICAgaWYgKHBwcy0+ cHBzX3dwX2luZm9faW5fcGhfZmxhZykKKyAgICAgICAgcHJlZF93ZWlnaHRfdGFibGUoJnBoLT5w d3QsICZwaC0+ci0+cGhfcHJlZF93ZWlnaHRfdGFibGUpOworCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZGVjb2RlX3BoKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMsIGNvbnN0IEgyNjZS YXdQaWN0dXJlSGVhZGVyICpycGgsIHZvaWQgKnJwaF9yZWYsCisgICAgY29uc3QgaW50IHBvY190 aWQwLCBjb25zdCBpbnQgaXNfY2x2c3MpCit7CisgICAgaW50IHJldDsKKyAgICBWVkNQSCAqcGgg PSAmZnBzLT5waDsKKyAgICBjb25zdCBIMjY2UmF3U1BTICpzcHMgPSBmcHMtPnNwcy0+cjsKKyAg ICBjb25zdCBIMjY2UmF3UFBTICpwcHMgPSBmcHMtPnBwcy0+cjsKKworICAgIHBoLT5yID0gcnBo OworICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZwaC0+cnJlZiwgcnBoX3JlZik7CisgICAgcmV0 ID0gcGhfZGVyaXZlKHBoLCBzcHMsIHBwcywgcG9jX3RpZDAsIGlzX2NsdnNzKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGRlY29kZV9mcmFtZV9wcyhWVkNGcmFtZVBhcmFtU2V0cyAqZnBzLCBjb25zdCBWVkNQ YXJhbVNldHMgKnBzLAorICAgIGNvbnN0IENvZGVkQml0c3RyZWFtSDI2NkNvbnRleHQgKmgyNjYs IGNvbnN0IGludCBwb2NfdGlkMCwgY29uc3QgaW50IGlzX2NsdnNzKQoreworICAgIGNvbnN0IEgy NjZSYXdQaWN0dXJlSGVhZGVyICpwaCA9IGgyNjYtPnBoOworICAgIGNvbnN0IEgyNjZSYXdQUFMg KnJwcHM7CisgICAgaW50IHJldDsKKworICAgIGlmICghcGgpCisgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOworCisgICAgcnBwcyA9IGgyNjYtPnBwc1twaC0+cGhfcGljX3BhcmFt ZXRlcl9zZXRfaWRdOworICAgIGlmICghcnBwcykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmZnBzLT5zcHMsIHBzLT5zcHNf bGlzdFtycHBzLT5wcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRdKTsKKyAgICBmZl9yZWZzdHJ1Y3Rf cmVwbGFjZSgmZnBzLT5wcHMsIHBzLT5wcHNfbGlzdFtycHBzLT5wcHNfcGljX3BhcmFtZXRlcl9z ZXRfaWRdKTsKKworICAgIHJldCA9IGRlY29kZV9waChmcHMsIHBoLCBoMjY2LT5waF9yZWYsIHBv Y190aWQwLCBpc19jbHZzcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7 CisKKyAgICBpZiAocGgtPnBoX2V4cGxpY2l0X3NjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWcpCisg ICAgICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZmcHMtPnNsLCBwcy0+c2NhbGluZ19saXN0W3Bo LT5waF9zY2FsaW5nX2xpc3RfYXBzX2lkXSk7CisKKyAgICBpZiAocGgtPnBoX2xtY3NfZW5hYmxl ZF9mbGFnKSB7CisgICAgICAgIHJldCA9IGxtY3NfZGVyaXZlX2x1dCgmZnBzLT5sbWNzLCBwcy0+ bG1jc19saXN0W3BoLT5waF9sbWNzX2Fwc19pZF0sIGZwcy0+c3BzLT5yKTsKKyAgICAgICAgaWYg KHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoZnBzLT5hbGZfbGlzdCk7IGkrKykKKyAgICAgICAg ZmZfcmVmc3RydWN0X3JlcGxhY2UoJmZwcy0+YWxmX2xpc3RbaV0sIHBzLT5hbGZfbGlzdFtpXSk7 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX3JlY292ZXJ5X2ZsYWco VlZDQ29udGV4dCAqcykKK3sKKyAgICBpZiAoSVNfSURSKHMpKQorICAgICAgICBzLT5ub19vdXRw dXRfYmVmb3JlX3JlY292ZXJ5X2ZsYWcgPSAwOworICAgIGVsc2UgaWYgKElTX0NSQShzKSB8fCBJ U19HRFIocykpCisgICAgICAgIHMtPm5vX291dHB1dF9iZWZvcmVfcmVjb3ZlcnlfZmxhZyA9IHMt Pmxhc3RfZW9zOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfcmVjb3ZlcnlfcG9jKFZWQ0NvbnRl eHQgKnMsIGNvbnN0IFZWQ1BIICpwaCkKK3sKKyAgICBpZiAocy0+bm9fb3V0cHV0X2JlZm9yZV9y ZWNvdmVyeV9mbGFnKSB7CisgICAgICAgIGlmIChJU19HRFIocykpCisgICAgICAgICAgICBzLT5n ZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID0gcGgtPnBvYyArIHBoLT5yLT5waF9yZWNvdmVyeV9wb2Nf Y250OworICAgICAgICBpZiAoIUdEUl9JU19SRUNPVkVSRUQocykgJiYgcy0+Z2RyX3JlY292ZXJ5 X3BvaW50X3BvYyA8PSBwaC0+cG9jKQorICAgICAgICAgICAgR0RSX1NFVF9SRUNPVkVSRUQocyk7 CisgICAgfQorfQorCitpbnQgZmZfdnZjX2RlY29kZV9mcmFtZV9wcyhWVkNGcmFtZVBhcmFtU2V0 cyAqZnBzLCBzdHJ1Y3QgVlZDQ29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBW VkNQYXJhbVNldHMgKnBzICAgICAgICAgICAgICAgICAgICAgICAgPSAmcy0+cHM7CisgICAgY29u c3QgQ29kZWRCaXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2NiAgID0gcy0+Y2JjLT5wcml2X2RhdGE7 CisKKyAgICByZXQgPSBkZWNvZGVfcHMocHMsIGgyNjYsIHMtPmF2Y3R4KTsKKyAgICBpZiAocmV0 IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGRlY29kZV9yZWNvdmVyeV9mbGFnKHMp OworICAgIHJldCA9IGRlY29kZV9mcmFtZV9wcyhmcHMsIHBzLCBoMjY2LCBzLT5wb2NfdGlkMCwg SVNfQ0xWU1MocykpOworICAgIGRlY29kZV9yZWNvdmVyeV9wb2MocywgJmZwcy0+cGgpOworICAg IHJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmZfdnZjX2ZyYW1lX3BzX2ZyZWUoVlZDRnJhbWVQYXJh bVNldHMgKmZwcykKK3sKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmZwcy0+c3BzKTsKKyAgICBm Zl9yZWZzdHJ1Y3RfdW5yZWYoJmZwcy0+cHBzKTsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmZw cy0+cGgucnJlZik7CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZmcHMtPnNsKTsKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGZwcy0+YWxmX2xpc3QpOyBpKyspCisgICAg ICAgIGZmX3JlZnN0cnVjdF91bnJlZigmZnBzLT5hbGZfbGlzdFtpXSk7Cit9CisKK3ZvaWQgZmZf dnZjX3BzX3VuaW5pdChWVkNQYXJhbVNldHMgKnBzKQoreworICAgIGludCBpOworCisgICAgZm9y IChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5zY2FsaW5nX2xpc3QpOyBpKyspCisgICAg ICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMtPnNjYWxpbmdfbGlzdFtpXSk7CisgICAgZm9yIChp ID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5sbWNzX2xpc3QpOyBpKyspCisgICAgICAgIGZm X3JlZnN0cnVjdF91bnJlZigmcHMtPmxtY3NfbGlzdFtpXSk7CisgICAgZm9yIChpID0gMDsgaSA8 IEZGX0FSUkFZX0VMRU1TKHBzLT5hbGZfbGlzdCk7IGkrKykKKyAgICAgICAgZmZfcmVmc3RydWN0 X3VucmVmKCZwcy0+YWxmX2xpc3RbaV0pOworICAgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9F TEVNUyhwcy0+c3BzX2xpc3QpOyBpKyspCisgICAgICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMt PnNwc19saXN0W2ldKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMocHMtPnBw c19saXN0KTsgaSsrKQorICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBzLT5wcHNfbGlzdFtp XSk7Cit9CisKK2VudW0geworICAgIEFQU19BTEYsCisgICAgQVBTX0xNQ1MsCisgICAgQVBTX1ND QUxJTkcsCit9OworCitzdGF0aWMgdm9pZCBhbGZfY29lZmYoaW50MTZfdCAqY29lZmYsCisgICAg Y29uc3QgdWludDhfdCAqYWJzLCBjb25zdCB1aW50OF90ICpzaWduLCBjb25zdCBpbnQgc2l6ZSkK K3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgY29lZmZbaV0g PSAoMSAtIDIgKiBzaWduW2ldKSAqIGFic1tpXTsKK30KKworc3RhdGljIHZvaWQgYWxmX2NvZWZm X2NjKGludDE2X3QgKmNvZWZmLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1hcHBlZF9hYnMsIGNvbnN0 IHVpbnQ4X3QgKnNpZ24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfTlVNX0NPRUZG X0NDOyBpKyspIHsKKyAgICAgICAgaW50IGMgPSBtYXBwZWRfYWJzW2ldOzsKKyAgICAgICAgaWYg KGMpCisgICAgICAgICAgICBjID0gKDEgLSAyICogc2lnbltpXSkgKiAoMSA8PCAoYyAtIDEpKTsK KyAgICAgICAgY29lZmZbaV0gPSBjOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2x1bWEo VlZDQUxGICphbGYsIGNvbnN0IEgyNjZSYXdBUFMgKmFwcykKK3sKKyAgICBpZiAoIWFwcy0+YWxm X2x1bWFfZmlsdGVyX3NpZ25hbF9mbGFnKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IEFMRl9OVU1fRklMVEVSU19MVU1BOyBpKyspIHsKKyAgICAgICAgY29uc3Qg aW50IHJlZiAgICAgICA9IGFwcy0+YWxmX2x1bWFfY29lZmZfZGVsdGFfaWR4W2ldOworICAgICAg ICBjb25zdCB1aW50OF90ICphYnMgID0gYXBzLT5hbGZfbHVtYV9jb2VmZl9hYnNbcmVmXTsKKyAg ICAgICAgY29uc3QgdWludDhfdCAqc2lnbiA9IGFwcy0+YWxmX2x1bWFfY29lZmZfc2lnbltyZWZd OworCisgICAgICAgIGFsZl9jb2VmZihhbGYtPmx1bWFfY29lZmZbaV0sIGFicywgc2lnbiwgQUxG X05VTV9DT0VGRl9MVU1BKTsKKyAgICAgICAgbWVtY3B5KGFsZi0+bHVtYV9jbGlwX2lkeFtpXSwg YXBzLT5hbGZfbHVtYV9jbGlwX2lkeFtyZWZdLAorICAgICAgICAgICAgc2l6ZW9mKGFsZi0+bHVt YV9jbGlwX2lkeFtpXSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2Nocm9tYShWVkNB TEYgKmFsZiwgY29uc3QgSDI2NlJhd0FQUyAqYXBzKQoreworICAgIGlmICghYXBzLT5hbGZfY2hy b21hX2ZpbHRlcl9zaWduYWxfZmxhZykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWxmLT5udW1f Y2hyb21hX2ZpbHRlcnMgID0gYXBzLT5hbGZfY2hyb21hX251bV9hbHRfZmlsdGVyc19taW51czEg KyAxOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxmLT5udW1fY2hyb21hX2ZpbHRlcnM7IGkr KykgeworICAgICAgICBjb25zdCB1aW50OF90ICphYnMgID0gYXBzLT5hbGZfY2hyb21hX2NvZWZm X2Fic1tpXTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc2lnbiA9IGFwcy0+YWxmX2Nocm9tYV9j b2VmZl9zaWduW2ldOworCisgICAgICAgIGFsZl9jb2VmZihhbGYtPmNocm9tYV9jb2VmZltpXSwg YWJzLCBzaWduLCBBTEZfTlVNX0NPRUZGX0NIUk9NQSk7CisgICAgICAgIG1lbWNweShhbGYtPmNo cm9tYV9jbGlwX2lkeFtpXSwgYXBzLT5hbGZfY2hyb21hX2NsaXBfaWR4W2ldLAorICAgICAgICAg ICAgc2l6ZW9mKGFsZi0+Y2hyb21hX2NsaXBfaWR4W2ldKSk7CisgICAgfQorfQorCitzdGF0aWMg dm9pZCBhbGZfY2MoVlZDQUxGICphbGYsIGNvbnN0IEgyNjZSYXdBUFMgKmFwcykKK3sKKyAgICBj b25zdCB1aW50OF90ICgqYWJzW10pW0FMRl9OVU1fQ09FRkZfQ0NdID0KKyAgICAgICAgeyBhcHMt PmFsZl9jY19jYl9tYXBwZWRfY29lZmZfYWJzLCBhcHMtPmFsZl9jY19jcl9tYXBwZWRfY29lZmZf YWJzIH07CisgICAgY29uc3QgdWludDhfdCAoKnNpZ25bXSlbQUxGX05VTV9DT0VGRl9DQ10gPQor ICAgICAgICB7YXBzLT5hbGZfY2NfY2JfY29lZmZfc2lnbiwgYXBzLT5hbGZfY2NfY3JfY29lZmZf c2lnbiB9OworICAgIGNvbnN0IGludCBzaWduYWxlZFtdID0geyBhcHMtPmFsZl9jY19jYl9maWx0 ZXJfc2lnbmFsX2ZsYWcsIGFwcy0+YWxmX2NjX2NyX2ZpbHRlcl9zaWduYWxfZmxhZ307CisKKyAg ICBhbGYtPm51bV9jY19maWx0ZXJzWzBdID0gYXBzLT5hbGZfY2NfY2JfZmlsdGVyc19zaWduYWxs ZWRfbWludXMxICsgMTsKKyAgICBhbGYtPm51bV9jY19maWx0ZXJzWzFdID0gYXBzLT5hbGZfY2Nf Y3JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMTsKKworICAgIGZvciAoaW50IGlkeCA9IDA7 IGlkeCA8IDI7IGlkeCsrKSB7CisgICAgICAgIGlmIChzaWduYWxlZFtpZHhdKSB7CisgICAgICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsZi0+bnVtX2NjX2ZpbHRlcnNbaWR4XTsgaSsrKQor ICAgICAgICAgICAgICAgIGFsZl9jb2VmZl9jYyhhbGYtPmNjX2NvZWZmW2lkeF1baV0sIGFic1tp ZHhdW2ldLCBzaWduW2lkeF1baV0pOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBhbGZfZGVyaXZlKFZWQ0FMRiAqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAg YWxmX2x1bWEoYWxmLCBhcHMpOworICAgIGFsZl9jaHJvbWEoYWxmLCBhcHMpOworICAgIGFsZl9j YyhhbGYsIGFwcyk7Cit9CisKK3N0YXRpYyBpbnQgYXBzX2RlY29kZV9hbGYoY29uc3QgVlZDQUxG ICoqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgVlZDQUxGICphID0gZmZfcmVm c3RydWN0X2FsbG9jeihzaXplb2YoKmEpKTsKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisKKyAgICBhbGZfZGVyaXZlKGEsIGFwcyk7CisgICAgZmZfcmVmc3Ry dWN0X3JlcGxhY2UoYWxmLCBhKTsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmEpOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfbHVtYV9saXN0KGNvbnN0IGludCBpZCkKK3sK KyAgICByZXR1cm4gaWQgJSBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgPT0gU0xfU1RBUlRfNHg0IHx8 IGlkID09IFNMX1NUQVJUXzY0eDY0ICsgMTsKK30KKworc3RhdGljIGludCBkZXJpdmVfbWF0cml4 X3NpemUoY29uc3QgaW50IGlkKQoreworICAgIHJldHVybiBpZCA8IFNMX1NUQVJUXzR4NCA/IDIg OiAoaWQgPCBTTF9TVEFSVF84eDggPyA0IDogOCk7Cit9CisKKy8vIDcuNC4zLjIwIFNjYWxpbmcg bGlzdCBkYXRhIHNlbWFudGljcworc3RhdGljIHZvaWQgc2NhbGluZ19kZXJpdmUoVlZDU2NhbGlu Z0xpc3QgKnNsLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgZm9yIChpbnQgaWQgPSAw OyBpZCA8IFNMX01BWF9JRDsgaWQrKykgeworICAgICAgICBjb25zdCBpbnQgbWF0cml4X3NpemUg ICA9IGRlcml2ZV9tYXRyaXhfc2l6ZShpZCk7CisgICAgICAgIGNvbnN0IGludCBsb2cyX3NpemUg ICAgID0gbG9nMihtYXRyaXhfc2l6ZSk7CisgICAgICAgIGNvbnN0IGludCBsaXN0X3NpemUgICAg ID0gbWF0cml4X3NpemUgKiBtYXRyaXhfc2l6ZTsKKyAgICAgICAgaW50IGNvZWZmW1NMX01BWF9N QVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0laRV07CisgICAgICAgIGNvbnN0IHVpbnQ4X3Qg KnByZWQ7CisgICAgICAgIGNvbnN0IGludCAqc2NhbGluZ19saXN0OworICAgICAgICBpbnQgZGMg PSAwOworCisgICAgICAgIGlmIChhcHMtPmFwc19jaHJvbWFfcHJlc2VudF9mbGFnIHx8IGlzX2x1 bWFfbGlzdChpZCkpIHsKKyAgICAgICAgICAgIGlmICghYXBzLT5zY2FsaW5nX2xpc3RfY29weV9t b2RlX2ZsYWdbaWRdKSB7CisgICAgICAgICAgICAgICAgaW50IG5leHRfY29lZiA9IDA7CisKKyAg ICAgICAgICAgICAgICBpZiAoaWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAgICAgICAgICAg ICAgIGRjID0gbmV4dF9jb2VmID0gYXBzLT5zY2FsaW5nX2xpc3RfZGNfY29lZltpZCAtIFNMX1NU QVJUXzE2eDE2XTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdF9z aXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHggPSBmZl92dmNfZGlh Z19zY2FuX3hbM11bM11baV07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB5ID0gZmZf dnZjX2RpYWdfc2Nhbl95WzNdWzNdW2ldOworCisgICAgICAgICAgICAgICAgICAgIGlmICghKGlk ID49IFNMX1NUQVJUXzY0eDY0ICYmIHggPj0gNCAmJiB5ID49IDQpKQorICAgICAgICAgICAgICAg ICAgICAgICAgbmV4dF9jb2VmICs9IGFwcy0+c2NhbGluZ19saXN0X2RlbHRhX2NvZWZbaWRdW2ld OworICAgICAgICAgICAgICAgICAgICBjb2VmZltpXSA9IG5leHRfY29lZjsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL2RjCisgICAgICAg IGlmIChpZCA+PSBTTF9TVEFSVF8xNngxNikgeworICAgICAgICAgICAgaWYgKCFhcHMtPnNjYWxp bmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+c2NhbGluZ19saXN0X3ByZWRfbW9k ZV9mbGFnW2lkXSkgeworICAgICAgICAgICAgICAgIHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNb aWQgLSBTTF9TVEFSVF8xNngxNl0gPSA4OworICAgICAgICAgICAgfSBlbHNlIGlmICghYXBzLT5z Y2FsaW5nX2xpc3RfcHJlZF9pZF9kZWx0YVtpZF0pIHsKKyAgICAgICAgICAgICAgICBzbC0+c2Nh bGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZdID0gMTY7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCByZWZfaWQgPSBpZCAtIGFwcy0+ c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdOworICAgICAgICAgICAgICAgIGlmIChyZWZf aWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAgICAgICAgICAgICAgIGRjICs9IHNsLT5zY2Fs aW5nX21hdHJpeF9kY19yZWNbcmVmX2lkIC0gU0xfU1RBUlRfMTZ4MTZdOworICAgICAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGMgKz0gc2wtPnNjYWxpbmdfbWF0cml4X3Jl Y1tyZWZfaWRdWzBdOworICAgICAgICAgICAgICAgIHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNb aWQgLSBTTF9TVEFSVF8xNngxNl0gPSBkYyAmIDI1NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorCisgICAgICAgIC8vYWMKKyAgICAgICAgc2NhbGluZ19saXN0ID0gYXBzLT5zY2FsaW5nX2xp c3RfY29weV9tb2RlX2ZsYWdbaWRdID8gZmZfdnZjX3NjYWxpbmdfbGlzdDAgOiBjb2VmZjsKKyAg ICAgICAgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+ c2NhbGluZ19saXN0X3ByZWRfbW9kZV9mbGFnW2lkXSkKKyAgICAgICAgICAgIHByZWQgPSBmZl92 dmNfc2NhbGluZ19wcmVkXzg7CisgICAgICAgIGVsc2UgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9w cmVkX2lkX2RlbHRhW2lkXSkKKyAgICAgICAgICAgIHByZWQgPSBmZl92dmNfc2NhbGluZ19wcmVk XzE2OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmVkID0gc2wtPnNjYWxpbmdfbWF0cml4 X3JlY1tpZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdXTsKKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0X3NpemU7IGkrKykgeworICAgICAgICAgICAgY29uc3Qg aW50IHggPSBmZl92dmNfZGlhZ19zY2FuX3hbbG9nMl9zaXplXVtsb2cyX3NpemVdW2ldOworICAg ICAgICAgICAgY29uc3QgaW50IHkgPSBmZl92dmNfZGlhZ19zY2FuX3lbbG9nMl9zaXplXVtsb2cy X3NpemVdW2ldOworICAgICAgICAgICAgY29uc3QgaW50IG9mZiA9IHkgKiBtYXRyaXhfc2l6ZSAr IHg7CisgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRyaXhfcmVjW2lkXVtvZmZdID0gKHByZWRb b2ZmXSArIHNjYWxpbmdfbGlzdFtpXSkgJiAyNTU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0 YXRpYyBpbnQgYXBzX2RlY29kZV9zY2FsaW5nKGNvbnN0IFZWQ1NjYWxpbmdMaXN0ICoqc2NhbGlu ZywgY29uc3QgSDI2NlJhd0FQUyAqYXBzKQoreworICAgIFZWQ1NjYWxpbmdMaXN0ICpzbCA9IGZm X3JlZnN0cnVjdF9hbGxvY3ooc2l6ZW9mKCpzbCkpOworICAgIGlmICghc2wpCisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBzY2FsaW5nX2Rlcml2ZShzbCwgYXBzKTsKKyAg ICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZShzY2FsaW5nLCBzbCk7CisgICAgZmZfcmVmc3RydWN0X3Vu cmVmKCZzbCk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3Z2Y19kZWNvZGVfYXBzKFZW Q1BhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCkKK3sKKyAgICBj b25zdCBIMjY2UmF3QVBTICphcHMgPSB1bml0LT5jb250ZW50X3JlZjsKKyAgICBpbnQgcmV0ICAg ICAgICAgICAgICAgPSAwOworCisgICAgaWYgKCFhcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworCisgICAgc3dpdGNoIChhcHMtPmFwc19wYXJhbXNfdHlwZSkgeworICAg ICAgICBjYXNlIEFQU19BTEY6CisgICAgICAgICAgICByZXQgPSBhcHNfZGVjb2RlX2FsZigmcHMt PmFsZl9saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFwcyk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUFNfTE1DUzoKKyAgICAgICAgICAgIGZm X3JlZnN0cnVjdF9yZXBsYWNlKCZwcy0+bG1jc19saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFy YW1ldGVyX3NldF9pZF0sIGFwcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB UFNfU0NBTElORzoKKyAgICAgICAgICAgIHJldCA9IGFwc19kZWNvZGVfc2NhbGluZygmcHMtPnNj YWxpbmdfbGlzdFthcHMtPmFwc19hZGFwdGF0aW9uX3BhcmFtZXRlcl9zZXRfaWRdLCBhcHMpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgc2hfc2xpY2VfYWRkcmVzcyhWVkNTSCAqc2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywg Y29uc3QgVlZDUFBTICpwcHMpCit7CisgICAgY29uc3QgaW50IHNsaWNlX2FkZHJlc3MgICAgID0g c2gtPnItPnNoX3NsaWNlX2FkZHJlc3M7CisKKyAgICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGlj ZV9mbGFnKSB7CisgICAgICAgIGludCBwaWNfbGV2ZWxfc2xpY2VfaWR4ID0gc2xpY2VfYWRkcmVz czsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaC0+ci0+Y3Vycl9zdWJwaWNfaWR4OyBq KyspCisgICAgICAgICAgICBwaWNfbGV2ZWxfc2xpY2VfaWR4ICs9IHBwcy0+ci0+bnVtX3NsaWNl c19pbl9zdWJwaWNbal07CisgICAgICAgIHNoLT5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlID0gcHBz LT5jdGJfYWRkcl9pbl9zbGljZSArIHBwcy0+c2xpY2Vfc3RhcnRfb2Zmc2V0W3BpY19sZXZlbF9z bGljZV9pZHhdOworICAgICAgICBzaC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZSA9IHBwcy0+bnVt X2N0dXNfaW5fc2xpY2VbcGljX2xldmVsX3NsaWNlX2lkeF07CisgICAgfSBlbHNlIHsKKyAgICAg ICAgaW50IHRpbGVfeCA9IHNsaWNlX2FkZHJlc3MgJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7 CisgICAgICAgIGludCB0aWxlX3kgPSBzbGljZV9hZGRyZXNzIC8gcHBzLT5yLT5udW1fdGlsZV9j b2x1bW5zOworICAgICAgICBjb25zdCBpbnQgc2xpY2Vfc3RhcnRfY3RiID0gcHBzLT5yb3dfYmRb dGlsZV95XSAqIHBwcy0+Y3RiX3dpZHRoICsgcHBzLT5jb2xfYmRbdGlsZV94XSAqIHBwcy0+ci0+ cm93X2hlaWdodF92YWxbdGlsZV95XTsKKworICAgICAgICBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9z bGljZSA9IHBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UgKyBzbGljZV9zdGFydF9jdGI7CisKKyAgICAg ICAgc2gtPm51bV9jdHVzX2luX2N1cnJfc2xpY2UgPSAwOworICAgICAgICBmb3IgKGludCB0aWxl X2lkeCA9IHNsaWNlX2FkZHJlc3M7IHRpbGVfaWR4IDw9IHNsaWNlX2FkZHJlc3MgKyBzaC0+ci0+ c2hfbnVtX3RpbGVzX2luX3NsaWNlX21pbnVzMTsgdGlsZV9pZHgrKykgeworICAgICAgICAgICAg dGlsZV94ID0gdGlsZV9pZHggJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7CisgICAgICAgICAg ICB0aWxlX3kgPSB0aWxlX2lkeCAvIHBwcy0+ci0+bnVtX3RpbGVfY29sdW1uczsKKyAgICAgICAg ICAgIHNoLT5udW1fY3R1c19pbl9jdXJyX3NsaWNlICs9IHBwcy0+ci0+cm93X2hlaWdodF92YWxb dGlsZV95XSAqIHBwcy0+ci0+Y29sX3dpZHRoX3ZhbFt0aWxlX3hdOworICAgICAgICB9CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBzaF9xcF95KFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1BQUyAq cHBzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGgpCit7CisgICAgY29uc3QgaW50IGlu aXRfcXAgPSBwcHMtPnBwc19pbml0X3FwX21pbnVzMjYgKyAyNjsKKworICAgIGlmICghcHBzLT5w cHNfcXBfZGVsdGFfaW5mb19pbl9waF9mbGFnKQorICAgICAgICBzaC0+c2xpY2VfcXBfeSA9IGlu aXRfcXAgKyBzaC0+ci0+c2hfcXBfZGVsdGE7CisgICAgZWxzZQorICAgICAgICBzaC0+c2xpY2Vf cXBfeSA9IGluaXRfcXAgKyBwaC0+cGhfcXBfZGVsdGE7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2lu dGVyKFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UFBTICpw cHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBzaC0+cjsKKworICAg IGlmICghcHBzLT5wcHNfd3BfaW5mb19pbl9waF9mbGFnICYmCisgICAgICAgICgocHBzLT5wcHNf d2VpZ2h0ZWRfcHJlZF9mbGFnICYmIElTX1AocnNoKSkgfHwKKyAgICAgICAgIChwcHMtPnBwc193 ZWlnaHRlZF9iaXByZWRfZmxhZyAmJiBJU19CKHJzaCkpKSkKKyAgICAgICAgcHJlZF93ZWlnaHRf dGFibGUoJnNoLT5wd3QsICZyc2gtPnNoX3ByZWRfd2VpZ2h0X3RhYmxlKTsKK30KKworc3RhdGlj IHZvaWQgc2hfZGVibG9ja19vZmZzZXRzKFZWQ1NIICpzaCkKK3sKKyAgICBjb25zdCBIMjY2UmF3 U2xpY2VIZWFkZXIgKnIgPSBzaC0+cjsKKworICAgIGlmICghci0+c2hfZGVibG9ja2luZ19maWx0 ZXJfZGlzYWJsZWRfZmxhZykgeworICAgICAgICBzaC0+ZGVibG9jay5iZXRhX29mZnNldFtMVU1B XSA9IHItPnNoX2x1bWFfYmV0YV9vZmZzZXRfZGl2MiA8PCAxOworICAgICAgICBzaC0+ZGVibG9j ay50Y19vZmZzZXRbTFVNQV0gICA9IHItPnNoX2x1bWFfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAg ICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZzZXRbQ0JdICAgPSByLT5zaF9jYl9iZXRhX29mZnNl dF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5kZWJsb2NrLnRjX29mZnNldFtDQl0gICAgID0gci0+ c2hfY2JfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAgICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZz ZXRbQ1JdICAgPSByLT5zaF9jcl9iZXRhX29mZnNldF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5k ZWJsb2NrLnRjX29mZnNldFtDUl0gICAgID0gci0+c2hfY3JfdGNfb2Zmc2V0X2RpdjIgPDwgMTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNoX3BhcnRpdGlvbl9jb25zdHJhaW50cyhWVkNTSCAq c2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywgY29uc3QgSDI2NlJhd1BpY3R1cmVIZWFkZXIgKnBo KQoreworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMl9zaXplX3kgPSBzcHMtPnNwc19sb2cyX21p bl9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMiArIDI7CisgICAgaW50IG1pbl9xdF9sb2cy X3NpemVfeVsyXTsKKworICAgIGlmIChJU19JKHNoLT5yKSkgeworICAgICAgICBtaW5fcXRfbG9n Ml9zaXplX3lbTFVNQV0gICAgICAgID0gKG1pbl9jYl9sb2cyX3NpemVfeSArIHBoLT5waF9sb2cy X2RpZmZfbWluX3F0X21pbl9jYl9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgbWluX3F0X2xv ZzJfc2l6ZV95W0NIUk9NQV0gICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9n Ml9kaWZmX21pbl9xdF9taW5fY2JfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+ bWF4X2J0X3NpemVbTFVNQV0gICAgICAgICAgID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W0xV TUFdICArIHBoLT5waF9sb2cyX2RpZmZfbWF4X2J0X21pbl9xdF9pbnRyYV9zbGljZV9sdW1hKTsK KyAgICAgICAgc2gtPm1heF9idF9zaXplW0NIUk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9s b2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5fcXRfaW50cmFf c2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+bWF4X3R0X3NpemVbTFVNQV0gICAgICAgICAg ID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W0xVTUFdICArIHBoLT5waF9sb2cyX2RpZmZfbWF4 X3R0X21pbl9xdF9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgc2gtPm1heF90dF9zaXplW0NI Uk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhf bG9nMl9kaWZmX21heF90dF9taW5fcXRfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBz aC0+bWF4X210dF9kZXB0aFtMVU1BXSAgICAgICAgID0gcGgtPnBoX21heF9tdHRfaGllcmFyY2h5 X2RlcHRoX2ludHJhX3NsaWNlX2x1bWE7CisgICAgICAgIHNoLT5tYXhfbXR0X2RlcHRoW0NIUk9N QV0gICAgICAgPSBwaC0+cGhfbWF4X210dF9oaWVyYXJjaHlfZGVwdGhfaW50cmFfc2xpY2VfY2hy b21hOworCisgICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAgPSBwaC0+cGhf Y3VfcXBfZGVsdGFfc3ViZGl2X2ludHJhX3NsaWNlOworICAgICAgICBzaC0+Y3VfY2hyb21hX3Fw X29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2X2ludHJh X3NsaWNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBMVU1BOyBpIDw9IENI Uk9NQTsgaSsrKSAgeworICAgICAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95W2ldICAgICAgICA9 IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9xdF9taW5fY2JfaW50 ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9idF9zaXplW2ldICAgICAgICAgICA9IDEg PDwgKG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5f cXRfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF90dF9zaXplW2ldICAgICAgICAg ICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF90 dF9taW5fcXRfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9tdHRfZGVwdGhbaV0g ICAgICAgICA9IHBoLT5waF9tYXhfbXR0X2hpZXJhcmNoeV9kZXB0aF9pbnRlcl9zbGljZTsKKyAg ICAgICAgfQorCisgICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAgPSBwaC0+ cGhfY3VfcXBfZGVsdGFfc3ViZGl2X2ludGVyX3NsaWNlOworICAgICAgICBzaC0+Y3VfY2hyb21h X3FwX29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2X2lu dGVyX3NsaWNlOworICAgIH0KKworICAgIHNoLT5taW5fcXRfc2l6ZVtMVU1BXSAgID0gMSA8PCBt aW5fcXRfbG9nMl9zaXplX3lbTFVNQV07CisgICAgc2gtPm1pbl9xdF9zaXplW0NIUk9NQV0gPSAx IDw8IG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdOworfQorCitzdGF0aWMgdm9pZCBzaF9lbnRy eV9wb2ludHMoVlZDU0ggKnNoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0IFZWQ1BQUyAq cHBzKQoreworICAgIGlmIChzcHMtPnNwc19lbnRyeV9wb2ludF9vZmZzZXRzX3ByZXNlbnRfZmxh ZykgeworICAgICAgICBmb3IgKGludCBpID0gMSwgaiA9IDA7IGkgPCBzaC0+bnVtX2N0dXNfaW5f Y3Vycl9zbGljZTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlX2N0Yl9hZGRyX3gg PSBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9zbGljZVtpIC0gMV0gJSBwcHMtPmN0Yl93aWR0aDsKKyAg ICAgICAgICAgIGNvbnN0IGludCBwcmVfY3RiX2FkZHJfeSA9IHNoLT5jdGJfYWRkcl9pbl9jdXJy X3NsaWNlW2kgLSAxXSAvIHBwcy0+Y3RiX3dpZHRoOworICAgICAgICAgICAgY29uc3QgaW50IGN0 Yl9hZGRyX3ggICAgID0gc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2VbaV0gJSBwcHMtPmN0Yl93 aWR0aDsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdGJfYWRkcl95ICAgICA9IHNoLT5jdGJfYWRk cl9pbl9jdXJyX3NsaWNlW2ldIC8gcHBzLT5jdGJfd2lkdGg7CisgICAgICAgICAgICBpZiAocHBz LT5jdGJfdG9fcm93X2JkW2N0Yl9hZGRyX3ldICE9IHBwcy0+Y3RiX3RvX3Jvd19iZFtwcmVfY3Ri X2FkZHJfeV0gfHwKKyAgICAgICAgICAgICAgICBwcHMtPmN0Yl90b19jb2xfYmRbY3RiX2FkZHJf eF0gIT0gcHBzLT5jdGJfdG9fY29sX2JkW3ByZV9jdGJfYWRkcl94XSB8fAorICAgICAgICAgICAg ICAgIChjdGJfYWRkcl95ICE9IHByZV9jdGJfYWRkcl95ICYmIHNwcy0+c3BzX2VudHJvcHlfY29k aW5nX3N5bmNfZW5hYmxlZF9mbGFnKSkgeworICAgICAgICAgICAgICAgIHNoLT5lbnRyeV9wb2lu dF9zdGFydF9jdHVbaisrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyBpbnQgc2hfZGVyaXZlKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNl dHMgKmZwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpzcHMgICAgICAgICAgID0gZnBzLT5z cHMtPnI7CisgICAgY29uc3QgSDI2NlJhd1BQUyAqcHBzICAgICAgICAgICA9IGZwcy0+cHBzLT5y OworICAgIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCAgPSBmcHMtPnBoLnI7CisKKyAg ICBzaF9zbGljZV9hZGRyZXNzKHNoLCBzcHMsIGZwcy0+cHBzKTsKKyAgICBzaF9pbnRlcihzaCwg c3BzLCBwcHMpOworICAgIHNoX3FwX3koc2gsIHBwcywgcGgpOworICAgIHNoX2RlYmxvY2tfb2Zm c2V0cyhzaCk7CisgICAgc2hfcGFydGl0aW9uX2NvbnN0cmFpbnRzKHNoLCBzcHMsIHBoKTsKKyAg ICBzaF9lbnRyeV9wb2ludHMoc2gsIHNwcywgZnBzLT5wcHMpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK2ludCBmZl92dmNfZGVjb2RlX3NoKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNl dHMgKmZwcywgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0ICp1bml0KQoreworICAgIGludCByZXQ7 CisKKyAgICBpZiAoIWZwcy0+c3BzIHx8ICFmcHMtPnBwcykKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmc2gtPnIsIHVuaXQt PmNvbnRlbnRfcmVmKTsKKworICAgIHJldCA9IHNoX2Rlcml2ZShzaCwgZnBzKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX3BzLmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfcHMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lZGU0ZTc0MDA5Ci0tLSAvZGV2 L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8q CisgKiBWVkMgcGFyYW1ldGVyIHNldCBwYXJzZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMg TnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYg QVZDT0RFQ19WVkNfVlZDX1BTX0gKKyNkZWZpbmUgQVZDT0RFQ19WVkNfVlZDX1BTX0gKKworI2lu Y2x1ZGUgImxpYmF2Y29kZWMvY2JzX2gyNjYuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3Z2Yy5o IgorCisjZGVmaW5lIElTX0lEUihzKSAgKChzKS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfSURSX1df UkFETCB8fCAocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX0lEUl9OX0xQKQorI2RlZmluZSBJU19D UkEocykgICgocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX0NSQV9OVVQpCisjZGVmaW5lIElTX0lS QVAocykgKElTX0lEUihzKSB8fCBJU19DUkEocykpCisjZGVmaW5lIElTX0dEUihzKSAgKChzKS0+ dmNsX3VuaXRfdHlwZSA9PSBWVkNfR0RSX05VVCkKKyNkZWZpbmUgSVNfQ1ZTUyhzKSAoSVNfSVJB UChzKXx8IElTX0dEUihzKSkKKyNkZWZpbmUgSVNfQ0xWU1MocykgKElTX0NWU1MocykgJiYgcy0+ bm9fb3V0cHV0X2JlZm9yZV9yZWNvdmVyeV9mbGFnKQorI2RlZmluZSBJU19SQVNMKHMpICgocykt PnZjbF91bml0X3R5cGUgPT0gVlZDX1JBU0xfTlVUKQorI2RlZmluZSBJU19SQURMKHMpICgocykt PnZjbF91bml0X3R5cGUgPT0gVlZDX1JBRExfTlVUKQorCisjZGVmaW5lIElTX0kocnNoKSAoKHJz aCktPnNoX3NsaWNlX3R5cGUgPT0gVlZDX1NMSUNFX1RZUEVfSSkKKyNkZWZpbmUgSVNfUChyc2gp ICgocnNoKS0+c2hfc2xpY2VfdHlwZSA9PSBWVkNfU0xJQ0VfVFlQRV9QKQorI2RlZmluZSBJU19C KHJzaCkgKChyc2gpLT5zaF9zbGljZV90eXBlID09IFZWQ19TTElDRV9UWVBFX0IpCisKKyNkZWZp bmUgSU5WX1BPQyBJTlRfTUlOCisjZGVmaW5lIEdEUl9JU19SRUNPVkVSRUQocykgIChzLT5nZHJf cmVjb3ZlcnlfcG9pbnRfcG9jID09IElOVl9QT0MpCisjZGVmaW5lIEdEUl9TRVRfUkVDT1ZFUkVE KHMpIChzLT5nZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID0gIElOVl9QT0MpCisKKyNkZWZpbmUgTE1D U19NQVhfQklUX0RFUFRIICAxMgorI2RlZmluZSBMTUNTX01BWF9MVVRfU0laRSAgICgxIDw8IExN Q1NfTUFYX0JJVF9ERVBUSCkKKyNkZWZpbmUgTE1DU19NQVhfQklOX1NJWkUgICAxNgorI2RlZmlu ZSBMQURGX01BWF9JTlRFUlZBTCAgIDUKKworZW51bSB7CisgICAgQ0hST01BX0ZPUk1BVF9NT05P LAorICAgIENIUk9NQV9GT1JNQVRfNDIwLAorICAgIENIUk9NQV9GT1JNQVRfNDIyLAorICAgIENI Uk9NQV9GT1JNQVRfNDQ0LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDU1BTIHsKKyAgICBjb25z dCBIMjY2UmF3U1BTICpyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisKKyAgICAvL2Rlcml2ZWQgdmFsdWVzCisgICAg dWludDE2X3QgICAgd2lkdGg7CisgICAgdWludDE2X3QgICAgaGVpZ2h0OworICAgIHVpbnQ4X3Qg ICAgIGhzaGlmdFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIHVpbnQ4X3QgICAgIHZzaGlm dFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIHVpbnQzMl90ICAgIG1heF9waWNfb3JkZXJf Y250X2xzYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4UGljT3JkZXJDbnRM c2IKKworICAgIHVpbnQ4X3QgICAgIHBpeGVsX3NoaWZ0OworICAgIGVudW0gQVZQaXhlbEZvcm1h dCBwaXhfZm10OworCisgICAgdWludDhfdCAgICAgYml0X2RlcHRoOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQml0RGVwdGgKKyAgICB1aW50OF90ICAgICBx cF9iZF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBR cEJkT2Zmc2V0CisgICAgdWludDhfdCAgICAgY3RiX2xvZzJfc2l6ZV95OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3RiTG9nMlNpemVZCisgICAgdWludDhfdCAgICAg Y3RiX3NpemVfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg Q3RiU2l6ZVkKKyAgICB1aW50OF90ICAgICBtaW5fY2JfbG9nMl9zaXplX3k7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8vPCBNaW5DYkxvZzJTaXplWQorICAgIHVpbnQ4X3QgICAg IG1pbl9jYl9zaXplX3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88 IE1pbkNiU2l6ZVkKKyAgICB1aW50OF90ICAgICBtYXhfdGJfc2l6ZV95OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXhUYlNpemVZCisgICAgdWludDhfdCAgICAg bWF4X3RzX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg TWF4VHNTaXplCisgICAgdWludDhfdCAgICAgbWF4X251bV9tZXJnZV9jYW5kOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TnVtTWVyZ2VDYW5kCisgICAgdWludDhfdCAg ICAgbWF4X251bV9pYmNfbWVyZ2VfY2FuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgTWF4TnVtSWJjTWVyZ2VDYW5kCisgICAgdWludDhfdCAgICAgbWF4X251bV9ncG1fbWVyZ2Vf Y2FuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TnVtR3BtTWVyZ2VDYW5k CisgICAgdWludDhfdCAgICAgbnVtX2xhZGZfaW50ZXJ2YWxzOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgc3BzX251bV9sYWRmX2ludGVydmFsc19taW51czIgKyAyOworICAg IHVpbnQzMl90ICAgIGxhZGZfaW50ZXJ2YWxfbG93ZXJfYm91bmRbTEFERl9NQVhfSU5URVJWQUxd OyAgICAgICAvLy88IFNwc0xhZGZJbnRlcnZhbExvd2VyQm91bmRbXQorICAgIHVpbnQ4X3QgICAg IGxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88 IHNwc19sb2cyX3BhcmFsbGVsX21lcmdlX2xldmVsX21pbnVzMiArIDI7CisgICAgdWludDhfdCAg ICAgbG9nMl90cmFuc2Zvcm1fcmFuZ2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgTG9nMlRyYW5zZm9ybVJhbmdlCisgICAgaW50OF90ICAgICAgY2hyb21hX3FwX3RhYmxlWzNd W1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxFXTsgICAgIC8vLzwgQ2hyb21hUXBUYWJsZQorfSBW VkNTUFM7CisKK3R5cGVkZWYgc3RydWN0IERCUGFyYW1zIHsKKyAgICBpbnQ4X3QgYmV0YV9vZmZz ZXRbVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAgICBpbnQ4X3QgdGNfb2Zmc2V0W1ZWQ19NQVhf U0FNUExFX0FSUkFZU107Cit9IERCUGFyYW1zOworCit0eXBlZGVmIHN0cnVjdCBWVkNQUFMgewor ICAgIGNvbnN0IEgyNjZSYXdQUFMgKnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKKworICAgIC8vZGVyaXZlZCB2YWx1 ZTsKKyAgICBpbnQ4X3QgICBjaHJvbWFfcXBfb2Zmc2V0WzNdOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vPCBwcHNfY2JfcXBfb2Zmc2V0LCBwcHNfY3JfcXBfb2Zmc2V0LCBw cHNfam9pbnRfY2Jjcl9xcF9vZmZzZXRfdmFsdWUKKyAgICBpbnQ4X3QgICBjaHJvbWFfcXBfb2Zm c2V0X2xpc3RbNl1bM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBwcHNfY2JfcXBf b2Zmc2V0X2xpc3QsIHBwc19jcl9xcF9vZmZzZXRfbGlzdCwgcHBzX2pvaW50X2NiY3JfcXBfb2Zm c2V0X2xpc3QKKworICAgIHVpbnQxNl90IHdpZHRoOworICAgIHVpbnQxNl90IGhlaWdodDsKKwor ICAgIHVpbnQxNl90IHNsaWNlX3N0YXJ0X29mZnNldFtWVkNfTUFYX1NMSUNFU107CisgICAgdWlu dDE2X3QgbnVtX2N0dXNfaW5fc2xpY2UgW1ZWQ19NQVhfU0xJQ0VTXTsKKworICAgIHVpbnQxNl90 IG1pbl9jYl93aWR0aDsKKyAgICB1aW50MTZfdCBtaW5fY2JfaGVpZ2h0OworCisgICAgdWludDE2 X3QgY3RiX3dpZHRoOworICAgIHVpbnQxNl90IGN0Yl9oZWlnaHQ7CisgICAgdWludDMyX3QgY3Ri X2NvdW50OworCisgICAgdWludDE2X3QgbWluX3B1X3dpZHRoOworICAgIHVpbnQxNl90IG1pbl9w dV9oZWlnaHQ7CisgICAgdWludDE2X3QgbWluX3R1X3dpZHRoOworICAgIHVpbnQxNl90IG1pbl90 dV9oZWlnaHQ7CisKKyAgICB1aW50MzJfdCAqY3RiX2FkZHJfaW5fc2xpY2U7ICAgICAgICAgICAg Ly8vPCBDdGJBZGRySW5DdXJyU2xpY2UgZm9yIGVudGlyZSBwaWN0dXJlCisgICAgdWludDE2X3Qg KmNvbF9iZDsKKyAgICB1aW50MTZfdCAqcm93X2JkOworICAgIHVpbnQxNl90ICpjdGJfdG9fY29s X2JkOworICAgIHVpbnQxNl90ICpjdGJfdG9fcm93X2JkOworCisgICAgdWludDE2X3Qgd2lkdGgz MjsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgd2lkdGggIGluIDMyIHBpeGVscworICAgIHVp bnQxNl90IGhlaWdodDMyOyAgICAgICAgICAgICAgICAgICAgICAvLy88IGhlaWdodCBpbiAzMiBw aXhlbHMKKyAgICB1aW50MTZfdCB3aWR0aDY0OyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB3 aWR0aCAgaW4gNjQgcGl4ZWxzCisgICAgdWludDE2X3QgaGVpZ2h0NjQ7ICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgaGVpZ2h0IGluIDY0IHBpeGVscworCisgICAgdWludDE2X3QgcmVmX3dyYXBh cm91bmRfb2Zmc2V0OyAgICAgICAgIC8vLzwgUHBzUmVmV3JhcGFyb3VuZE9mZnNldAorCit9IFZW Q1BQUzsKKworI2RlZmluZSBNQVhfV0VJR0hUUyAxNQordHlwZWRlZiBzdHJ1Y3QgUHJlZFdlaWdo dFRhYmxlIHsKKyAgICB1aW50OF90IGxvZzJfZGVub21bMl07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy88IGx1bWFfbG9nMl93ZWlnaHRfZGVub20sIENocm9tYUxvZzJX ZWlnaHREZW5vbQorCisgICAgdWludDhfdCBuYl93ZWlnaHRzWzJdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8vPCBudW1fbDBfd2VpZ2h0cywgbnVtX2wxX3dlaWdodHMK KyAgICB1aW50OF90IHdlaWdodF9mbGFnWzJdWzJdW01BWF9XRUlHSFRTXTsgICAgICAgICAgICAg ICAgICAgICAvLy88IGx1bWFfd2VpZ2h0X2wwX2ZsYWcsIGNocm9tYV93ZWlnaHRfbDBfZmxhZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLy88IGx1bWFfd2VpZ2h0X2wxX2ZsYWcsIGNocm9tYV93ZWlnaHRfbDFfZmxhZywK KyAgICBpbnQxNl90IHdlaWdodFsyXVtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdW01BWF9XRUlHSFRT XTsgICAgICAvLy88IEx1bWFXZWlnaHRMMCwgTHVtYVdlaWdodEwxLCBDaHJvbWFXZWlnaHRMMCwg Q2hyb21hV2VpZ2h0TDEKKyAgICBpbnQxNl90IG9mZnNldFsyXVtWVkNfTUFYX1NBTVBMRV9BUlJB WVNdW01BWF9XRUlHSFRTXTsgICAgICAvLy88IGx1bWFfb2Zmc2V0X2wwLCBsdW1hX29mZnNldF9s MSwgQ2hyb21hT2Zmc2V0TDAsIENocm9tYU9mZnNldEwxCit9IFByZWRXZWlnaHRUYWJsZTsKKwor dHlwZWRlZiBzdHJ1Y3QgVlZDUEggeworICAgIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpy OworICAgIHZvaWQgKnJyZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgUmVmU3RydWN0IHJlZmVyZW5jZSwgYmFja2luZyBwaCBhYm92ZQorCisgICAgLy9kZXJpdmVk IHZhbHVlcworICAgIHVpbnQzMl90IG1heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2FuZDsgICAgICAg ICAgIC8vLzwgTWF4TnVtU3ViYmxvY2tNZXJnZUNhbmQKKyAgICBpbnQzMl90ICBwb2M7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFBpY09yZGVyQ250VmFsCisgICAgUHJl ZFdlaWdodFRhYmxlIHB3dDsKK30gVlZDUEg7CisKKyNkZWZpbmUgQUxGX05VTV9GSUxURVJTX0xV TUEgICAgMjUKKyNkZWZpbmUgQUxGX05VTV9GSUxURVJTX0NIUk9NQSAgIDgKKyNkZWZpbmUgQUxG X05VTV9GSUxURVJTX0NDICAgICAgIDUKKworI2RlZmluZSBBTEZfTlVNX0NPRUZGX0xVTUEgICAg ICAxMgorI2RlZmluZSBBTEZfTlVNX0NPRUZGX0NIUk9NQSAgICAgNgorI2RlZmluZSBBTEZfTlVN X0NPRUZGX0NDICAgICAgICAgNworCit0eXBlZGVmIHN0cnVjdCBWVkNBTEYgeworICAgIGludDE2 X3QgbHVtYV9jb2VmZiAgICAgW0FMRl9OVU1fRklMVEVSU19MVU1BXVtBTEZfTlVNX0NPRUZGX0xV TUFdOworICAgIHVpbnQ4X3QgbHVtYV9jbGlwX2lkeCAgW0FMRl9OVU1fRklMVEVSU19MVU1BXVtB TEZfTlVNX0NPRUZGX0xVTUFdOworCisgICAgdWludDhfdCBudW1fY2hyb21hX2ZpbHRlcnM7Cisg ICAgaW50MTZfdCBjaHJvbWFfY29lZmYgICBbQUxGX05VTV9GSUxURVJTX0NIUk9NQV1bQUxGX05V TV9DT0VGRl9DSFJPTUFdOworICAgIHVpbnQ4X3QgY2hyb21hX2NsaXBfaWR4W0FMRl9OVU1fRklM VEVSU19DSFJPTUFdW0FMRl9OVU1fQ09FRkZfQ0hST01BXTsKKworICAgIHVpbnQ4X3QgbnVtX2Nj X2ZpbHRlcnNbMl07ICAgICAgICAvLy88IGFsZl9jY19jYl9maWx0ZXJzX3NpZ25hbGxlZF9taW51 czEgKyAxLCBhbGZfY2NfY3JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMQorICAgIGludDE2 X3QgY2NfY29lZmZbMl1bQUxGX05VTV9GSUxURVJTX0NDXVtBTEZfTlVNX0NPRUZGX0NDXTsKK30g VlZDQUxGOworCitlbnVtIHsKKyAgU0xfU1RBUlRfMngyICAgID0gMCwKKyAgU0xfU1RBUlRfNHg0 ICAgID0gMiwKKyAgU0xfU1RBUlRfOHg4ICAgID0gOCwKKyAgU0xfU1RBUlRfMTZ4MTYgID0gMTQs CisgIFNMX1NUQVJUXzMyeDMyICA9IDIwLAorICBTTF9TVEFSVF82NHg2NCAgPSAyNiwKKyAgU0xf TUFYX0lEICAgICAgID0gMjgsCit9OworCisjZGVmaW5lIFNMX01BWF9NQVRSSVhfU0laRSA4CisK K3R5cGVkZWYgc3RydWN0IFZWQ1NjYWxpbmdMaXN0IHsKKyAgICB1aW50OF90IHNjYWxpbmdfbWF0 cml4X3JlY1tTTF9NQVhfSURdW1NMX01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0la RV07ICAvLy88IFNjYWxpbmdNYXRyaXhSZWMKKyAgICB1aW50OF90IHNjYWxpbmdfbWF0cml4X2Rj X3JlY1tTTF9NQVhfSUQgLSBTTF9TVEFSVF8xNngxNl07ICAgICAgICAgICAgICAgICAgICAgICAv Ly88IFNjYWxpbmdNYXRyaXhEY1JlY1tyZWZJZCDiiJIgMTRdCit9IFZWQ1NjYWxpbmdMaXN0Owor Cit0eXBlZGVmIHN0cnVjdCBWVkNMTUNTIHsKKyAgICB1aW50OF90ICBtaW5fYmluX2lkeDsKKyAg ICB1aW50OF90ICBtYXhfYmluX2lkeDsKKworICAgIC8vKjIgZm9yIGhpZ2ggZGVwdGgKKyAgICB1 aW50OF90ICBmd2RfbHV0W0xNQ1NfTUFYX0xVVF9TSVpFICogMl07CisgICAgdWludDhfdCAgaW52 X2x1dFtMTUNTX01BWF9MVVRfU0laRSAqIDJdOworCisgICAgdWludDE2X3QgcGl2b3RbTE1DU19N QVhfQklOX1NJWkUgKyAxXTsKKyAgICB1aW50MTZfdCBjaHJvbWFfc2NhbGVfY29lZmZbTE1DU19N QVhfQklOX1NJWkVdOworfSBWVkNMTUNTOworCisjZGVmaW5lIFZWQ19NQVhfQUxGX0NPVU5UICAg ICAgICA4CisjZGVmaW5lIFZWQ19NQVhfTE1DU19DT1VOVCAgICAgICA0CisjZGVmaW5lIFZWQ19N QVhfU0xfQ09VTlQgICAgICAgICA4CisKK3R5cGVkZWYgc3RydWN0IFZWQ1BhcmFtU2V0cyB7Cisg ICAgY29uc3QgVlZDU1BTICAgICAgICAgICAgKnNwc19saXN0W1ZWQ19NQVhfU1BTX0NPVU5UXTsg ICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgY29uc3QgVlZDUFBTICAgICAgICAg ICAgKnBwc19saXN0W1ZWQ19NQVhfUFBTX0NPVU5UXTsgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVm ZXJlbmNlCisgICAgY29uc3QgVlZDQUxGICAgICAgICAgICAgKmFsZl9saXN0W1ZWQ19NQVhfQUxG X0NPVU5UXTsgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgY29uc3QgSDI2NlJh d0FQUyAgICAgICAgKmxtY3NfbGlzdFtWVkNfTUFYX0xNQ1NfQ09VTlRdOyAgICAgLy8vPCBSZWZT dHJ1Y3QgcmVmZXJlbmNlCisgICAgY29uc3QgVlZDU2NhbGluZ0xpc3QgICAgKnNjYWxpbmdfbGlz dFtWVkNfTUFYX1NMX0NPVU5UXTsgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCit9IFZWQ1Bh cmFtU2V0czsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDRnJhbWVQYXJhbVNldHMgeworICAgIGNvbnN0 IFZWQ1NQUyAgICAgICAgICAgKnNwczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgUmVmU3RydWN0IHJlZmVyZW5jZQorICAgIGNvbnN0IFZWQ1BQUyAgICAgICAgICAgKnBwczsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQor ICAgIFZWQ1BIICAgICAgICAgICAgICAgICAgIHBoOworICAgIGNvbnN0IFZWQ0FMRiAgICAgICAg ICAgKmFsZl9saXN0W1ZWQ19NQVhfQUxGX0NPVU5UXTsgICAgICAgIC8vLzwgUmVmU3RydWN0IHJl ZmVyZW5jZQorICAgIFZWQ0xNQ1MgICAgICAgICAgICAgICAgIGxtY3M7CisgICAgY29uc3QgVlZD U2NhbGluZ0xpc3QgICAqc2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBS ZWZTdHJ1Y3QgcmVmZXJlbmNlCit9IFZWQ0ZyYW1lUGFyYW1TZXRzOworCit0eXBlZGVmIHN0cnVj dCBWVkNTSCB7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKKworICAgIC8vIGRlcml2ZWQg dmFsdWVzCisgICAgLy8gY3R1IGFkZHJlc3MKKyAgICB1aW50MzJfdCAgICAgICAgbnVtX2N0dXNf aW5fY3Vycl9zbGljZTsgICAgICAgICAgICAgICAgIC8vLzwgTnVtQ3R1c0luQ3VyclNsaWNlCisg ICAgY29uc3QgdWludDMyX3QqIGN0Yl9hZGRyX2luX2N1cnJfc2xpY2U7ICAgICAgICAgICAgICAg ICAvLy88IEN0YkFkZHJJbkN1cnJTbGljZQorCisgICAgLy8gaW50ZXIKKyAgICBQcmVkV2VpZ2h0 VGFibGUgcHd0OworICAgIGludDhfdCAgIHJlZl9pZHhfc3ltWzJdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vPCBSZWZJZHhTeW1MMCwgUmVmSWR4U3ltTDEKKworICAgIC8vIHFw X3kKKyAgICBpbnQ4X3QgICBzbGljZV9xcF95OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgU2xpY2VRcFkKKworICAgIC8vIGRlYmxvY2tfb2Zmc2V0cworICAgIERCUGFy YW1zIGRlYmxvY2s7CisKKyAgICAvLyBwYXJ0aXRpb24gY29uc3RyYWlucworICAgIHVpbnQ4X3Qg IG1pbl9xdF9zaXplWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNaW5R dFNpemVZLCBNaW5RdFNpemVDCisgICAgdWludDhfdCAgbWF4X2J0X3NpemVbMl07ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heEJ0U2l6ZVksIE1heEJ0U2l6ZUMKKyAgICB1 aW50OF90ICBtYXhfdHRfc2l6ZVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgTWF4VHRTaXplWSwgTWF4VHRTaXplQworICAgIHVpbnQ4X3QgIG1heF9tdHRfZGVwdGhbMl07 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXhNdHREZXB0aFksIE1heE10dERl cHRoQworICAgIHVpbnQ4X3QgIGN1X3FwX2RlbHRhX3N1YmRpdjsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBDdVFwRGVsdGFTdWJkaXYKKyAgICB1aW50OF90ICBjdV9jaHJvbWFfcXBf b2Zmc2V0X3N1YmRpdjsgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3VDaHJvbWFRcE9mZnNldFN1 YmRpdgorCisgICAgLy8gZW50cmllcworICAgIHVpbnQzMl90IGVudHJ5X3BvaW50X3N0YXJ0X2N0 dVtWVkNfTUFYX0VOVFJZX1BPSU5UU107ICAgLy8vPCBlbnRyeSBwb2ludCBzdGFydCBpbiBjdHVf YWRkcgorfSBWVkNTSDsKKworc3RydWN0IFZWQ0NvbnRleHQ7CisKK2ludCBmZl92dmNfZGVjb2Rl X2ZyYW1lX3BzKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMsIHN0cnVjdCBWVkNDb250ZXh0ICpzKTsK K2ludCBmZl92dmNfZGVjb2RlX2FwcyhWVkNQYXJhbVNldHMgKnBzLCBjb25zdCBDb2RlZEJpdHN0 cmVhbVVuaXQgKnVuaXQpOworaW50IGZmX3Z2Y19kZWNvZGVfc2goVlZDU0ggKnNoLCBjb25zdCBW VkNGcmFtZVBhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCk7Cit2 b2lkIGZmX3Z2Y19mcmFtZV9wc19mcmVlKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMpOwordm9pZCBm Zl92dmNfcHNfdW5pbml0KFZWQ1BhcmFtU2V0cyAqcHMpOworCisjZW5kaWYgLyogQVZDT0RFQ19W VkNfVlZDX1BTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y2RlYy5oIGIvbGli YXZjb2RlYy92dmMvdnZjZGVjLmgKaW5kZXggNzIwZDU4NWZkNC4uNmIxMDIxYTNiZSAxMDA2NDQK LS0tIGEvbGliYXZjb2RlYy92dmMvdnZjZGVjLmgKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjZGVj LmgKQEAgLTI2LDYgKzI2LDggQEAKIAogI2luY2x1ZGUgImxpYmF2Y29kZWMvdnZjLmgiCiAKKyNp bmNsdWRlICJ2dmNfcHMuaCIKKwogI2RlZmluZSBMVU1BICAgICAgICAgICAgICAgICAgICAwCiAj ZGVmaW5lIENIUk9NQSAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgQ0IgICAgICAgICAgICAg ICAgICAgICAgMQpAQCAtMTc1LDYgKzE3NywxMSBAQCB0eXBlZGVmIHN0cnVjdCBWVkNGcmFtZUNv bnRleHQgewogdHlwZWRlZiBzdHJ1Y3QgVlZDQ29udGV4dCB7CiAgICAgc3RydWN0IEFWQ29kZWND b250ZXh0ICphdmN0eDsKIAorICAgIENvZGVkQml0c3RyZWFtQ29udGV4dCAqY2JjOworICAgIENv ZGVkQml0c3RyZWFtRnJhZ21lbnQgY3VycmVudF9mcmFtZTsKKworICAgIFZWQ1BhcmFtU2V0cyBw czsKKwogICAgIGludCB0ZW1wb3JhbF9pZDsgICAgICAgIC8vLzwgdGVtcG9yYWxfaWRfcGx1czEg LSAxCiAgICAgaW50IHBvY190aWQwOwogCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZt cGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8v ZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwK ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl Ii4K