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 5E8EF46B12 for ; Mon, 1 Jan 2024 14:13:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0F3CE68CCC8; Mon, 1 Jan 2024 16:13:33 +0200 (EET) Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01olkn2103.outbound.protection.outlook.com [40.92.107.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C069F68CC0B for ; Mon, 1 Jan 2024 16:13:25 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hlYH/fTEviIDvRt0Xa6lvtuiqeb0ThaBMtuZYojJWybmR1DeWTAUHOpTys3Epv4eD1DKHuzijX6dBXTETaMM+ejVeqGL0E6oaSfJBCQz2nYGwIiHwL/EXjksaI0BzFd9zhS3U2TnI3obmmTlozr7JLAhIL6DqwHmYsB37yswHHZktaBlWdsiRlQbYn6pPPMxes9hOPdHfgSV086eSdnjePFf6LLp2gcXbwKnIgvmIbDp4fiTTRuwvAoFpDpGp8EDo3AM7IJwqTkwcR97fmzH/NSOwIUOHDFZ4JYhqQt3Fgijz4jf3kMEzfg2WXSYHXirFl5SUWjRdu/+mBgI7a3tQw== 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=Fl4a1btzZkuG11XAmHLNGO5E4fvcxNqt1IduC+OKsHk=; b=UJt+YZ9b4gm3kJczDFMTqGBYEujGhoueWFWRKYpwgVGaEHSyfQT40oNlHYP2dTqpNejXVxxON11x6/Lo4nCu5tCnjlU6hKX3Nj3mvfwuzV9LNNAl38yhXUIq0Bg91xNi37D9y8lJWaKW9Ao63lRwiCabyxYmRaT3Blecrw5a9kpVNn4PCsO1ig8r82MxDYxJwsD2jVv7DRzw+klZ7alhvLYny+U9os4ePQfqTpMvrbvvhtsl01s2s4NBMqvUb4vAbg1HpEM/R6SLjCRDUh8kH2+D6PrmvqCchqLLKA8TFfJW/fCDzMyEiR6mVlgdKy1OwadXPqbphY1ad9HCC3O5uA== 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=Fl4a1btzZkuG11XAmHLNGO5E4fvcxNqt1IduC+OKsHk=; b=s9Kdlz9OszkBioW4h9fY7slIKnO6vFstpFktPEfz2nWYS/d3EWz40JwfIfUXBrZqqEh6LRlpSzzX0QWZiERvRWkR6ofzt4k+pLmGF7zezg2Mb3CGRAAgSfjGUcxgyTpZu+FDnovpZAg3AtsPtKRL+vjBtKv83bdHRp2HdgY5V74P5+roMfgdm1iVUg9QOhloqDKw42jrhKlk3xqZ4DK/monqN1+fSBegbnjXTnAKGMmS0jUaP+4p8L5M0FOMMmzz9RNP9M/WpTDUrtY9p+9/Cs2USm77yEIx23FLXum1PT7egjGMJ+pBSL9Irt+EfU+48BlFkPy6jcQkXQrhCB/QlQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB3965.apcprd06.prod.outlook.com (2603:1096:400:23::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.25; Mon, 1 Jan 2024 14:13:18 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%6]) with mapi id 15.20.7135.023; Mon, 1 Jan 2024 14:13:18 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Mon, 1 Jan 2024 22:12:28 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240101141239.6623-1-nuomi2021@gmail.com> References: <20240101141239.6623-1-nuomi2021@gmail.com> X-TMN: [d7WmxKXWlcLUtnNodGFNxIp1RHZqrmz3] X-ClientProxiedBy: SI1PR02CA0012.apcprd02.prod.outlook.com (2603:1096:4:1f7::8) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240101141239.6623-3-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB3965:EE_ X-MS-Office365-Filtering-Correlation-Id: e39b671c-0de8-4f6b-a6a5-08dc0ad3cd59 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uesqCw9L9MIg5noY393enVcmphABpiJ2FXNsd3tf8CQNDV6zAfAIwkU+xW9dog3Q/PZY/mAfWx3/0UKNR+hTZT8lfjIod4CIo+ypFgvSda1hkGchAD4gNhJ/mp2NbMxPQUIcF+HxDsqaHM65tCJ/PpDJ/BnwSQlQA2aRmXeW+J4DNNxKFHUTVZ1v3SfIxeLnWqLI4yfq1iSjTYjxBCBUVjro8THJ/CjP52dz1OwFhYN79CjD1gKj0SWiRyl2jACGf0jNjtsx6JXHogTvLlgEJIGPahchXzYZI3CpP7HwQfTA7ygIJ7BfB3FFAOx/BsEfeoUoEUYIkLuKtZMUn1M/048ChJ0TolRKET64bqy+Blt+S9Xjp2moLmv5fjUWdqOT1v1bNpO0fUUt3veGrvay4tsTO6KKazb+Hk1FdFTwugGcaGPPPB9b8K7mzHktuoFyuzdclqbg3+dQbpqXM5R0LKCxZ9jJpTbSuZRPr4dfEYqR6Dy6g8+r7cXei9ztkJ/PDYO7JJyU9AYwJ02kvGUpVZF/Znw7z1vBepsrbxP6vGZ124HZhMkuacDPN2FqPQwEBoy1OUbCpB5o9DMrSFOodXix9k9U4FMjJbbMGJq2IWUjX1qSMM1HHGh+6O+fzNce X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dFpjRUN2RW0vT2xvNHlVNE14UDcveW9ucUpZYXRJREttejRxNTJhTjFyWlgz?= =?utf-8?B?L29IM1JVa1FSN2d3VXMzNUZBWjY0VWZTY2JIb00wU1VlWDUwZEFsNVZzeXJW?= =?utf-8?B?b1RrUmdScDhsNFF5RkFaMnRXL3lTMS9QdWtreGtwTjdrb3haM1Q0TnJwUVdI?= =?utf-8?B?QnFQVm5ZcTBkZkZBZVJpZk9XWGR5T1NjeUhYSThBSzF3dWdqUFZybXBNSTJm?= =?utf-8?B?TkJOU2FNVTRUMGFBRU1DUE11N01UbWlNbGZBbDBqdHp6bHB2MG9FbmJhekxH?= =?utf-8?B?dlRDMVRldWRkcGZwYVc5aVk0OTg0Y2ZlNkhJcHFEQ2JNMmJqSS8vREhXL0E3?= =?utf-8?B?Q0pQRnVqcU04VkhWaTdjTHZzdy92STdiMmxuejJzd1ZoUkZwZWhzUU9jWEll?= =?utf-8?B?b3ExR3NRb3ZVSFFtMG9VV3EwTytJWlAzS2w3OENJSHI5bzErKzRJNzNVbGRW?= =?utf-8?B?SU9JRjRzeXc4MVF0cXRsM0p3WVlhYVorZW1KeEwxd3FaamlXRXkxMnh2bWJj?= =?utf-8?B?ODNjNUF4VDhBaTRuUFJrL2Eycnl4R1hnUWUxQjZMb0hXb0tWdFVhQU9TQmF6?= =?utf-8?B?K2U2aTFLQStTSml4cUZldld6WWkxWVdjUTFUWG11QncvRm40V0puMnhxbkxq?= =?utf-8?B?dFVWYTVSK1pXUTBBS1cweVREdlRwZzJzN2VLb1lqTjY0MW9XVWUrQUlGd0hp?= =?utf-8?B?bkluOU5vVVF6cGcySkViL01vc2l0OVJtSFR1L0dpTVJuSjlsdlhGR1VVa2ps?= =?utf-8?B?Nk5UWEJsUzBIVkNweTVuVnR0cHByWTFMRlFhK0JYbzNIUWNia2RQczJjcEZS?= =?utf-8?B?VXMvTUNNWjJDcjVvaHdpalpsOE94SDVzWVNsRlcwLzN1eWkzWHNXbHVRQWFo?= =?utf-8?B?WFhBWERqSHJEWERwSjVnZGJ6UjNxb2dleHZqRC9FUTg3eW4xT1g4UldJbS92?= =?utf-8?B?SnY2V2lxWEdsc3lhdHp6ZHRRUjNMY1I0KzRORHVBNXc0THp0d2FRUU02L1Yr?= =?utf-8?B?OTZTK2RaejBXcGc3cG9mSENKcmZYSEcvSy9ONElLSVltM2ZDc1BtMUZ4SC9Y?= =?utf-8?B?ejJUZ3BKcEtsWHMvNVhsK2IxYkFpVnZjMmNrLzY3MzFCZTBFRGREalE2LzJZ?= =?utf-8?B?MjNzS3lMbndOSXEyc3UxN2NQcW9Ocm5RSnVRbk5QTCtheXZtaWhZTk5tNXJS?= =?utf-8?B?eXZaTEwrUHgxN2lMbkFxLzR5bHVWeG1BVHdEbjkwL0xGNFpnQ1ppMzZ4ZHdP?= =?utf-8?B?OUxKWFJUZVY0N0VsMU5WdFJERTZzTVZkUm9sV2pvQmNpdGJQQmpNYlJnM1dU?= =?utf-8?B?ZWwrQVZKYmR6UFE5VHViQ3lzRW50N29tWkxReFdpQ0xJbEkrRmdoZXRoc0Nv?= =?utf-8?B?R3A4N003Vm5ibmFXVk93ZmhKeVVBcWV4TDlwZUR5V3VXSCtEb1czU3QvTUN1?= =?utf-8?B?MzVPVGhWVmlwMUdGTExXRkp2V1dwRjc3eDFWaU40ZXk5WWRBN1FJdUp2TU9H?= =?utf-8?B?c0t5TXFMMDc3YWEySVl2djh1NjY2Tm4zYzRoak9SNHJLN0lEVVVaUUlnUTU3?= =?utf-8?B?OFZha0JUOTJ4bktwYkwzZ2RxYVdaVXZyazBEWkpzVThRQkNYUTZya1oyRE85?= =?utf-8?B?UndzMFJYMUh4eFpVdEl1OFhqM0V6Unk5eW40OVRGUHF4c0pXL1JZRFl5YUpK?= =?utf-8?Q?zhW6+Fyc+bMG4aJJLprQ?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e39b671c-0de8-4f6b-a6a5-08dc0ad3cd59 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jan 2024 14:13:18.1606 (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: TYZPR06MB3965 Subject: [FFmpeg-devel] [PATCH v9 02/13] 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: Frank Plowman , Nuo Mi , Xu Mu , Shaun Loo , Wu Jianhua 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: Q28tYXV0aG9yZWQtYnk6IFh1IE11IDx0b3h1bXVAb3V0bG9vay5jb20+CkNvLWF1dGhvcmVkLWJ5 OiBGcmFuayBQbG93bWFuIDxwb3N0QGZyYW5rcGxvd21hbi5jb20+CkNvLWF1dGhvcmVkLWJ5OiBT aGF1biBMb28gPHNoYXVubG9vMTBAZ21haWwuY29tPgpDby1hdXRob3JlZC1ieTogV3UgSmlhbmh1 YSA8dG9xc3h3QG91dGxvb2suY29tPgotLS0KIGxpYmF2Y29kZWMvdnZjL01ha2VmaWxlIHwgICAg MSArCiBsaWJhdmNvZGVjL3Z2Yy92dmNfcHMuYyB8IDExNTAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBsaWJhdmNvZGVjL3Z2Yy92dmNfcHMuaCB8ICAyNjMgKysrKysr KysrCiBsaWJhdmNvZGVjL3Z2Yy92dmNkZWMuaCB8ICAyMTQgKysrKysrKysKIDQgZmlsZXMgY2hh bmdlZCwgMTYyOCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92 dmMvdnZjX3BzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNfcHMuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2Y2RlYy5oCgpkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy92dmMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQppbmRleCAx NzJiMTEzM2IxLi4wZTk4MTY1ODFkIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy9NYWtlZmls ZQorKysgYi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQpAQCAtMiwzICsyLDQgQEAgY2xlYW46Ogog CSQoUk0pICQoQ0xFQU5TVUZGSVhFUzolPWxpYmF2Y29kZWMvdnZjLyUpCiAKIE9CSlMtJChDT05G SUdfVlZDX0RFQ09ERVIpICAgICAgICAgICs9ICB2dmMvdnZjX2RhdGEubyAgICAgICAgICBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19wcy5vICAgICAg ICAgICAgXApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMgYi9saWJhdmNvZGVj L3Z2Yy92dmNfcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hYzk2 ZWQ5ZjQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKQEAgLTAs MCArMSwxMTUwIEBACisvKgorICogVlZDIHBhcmFtZXRlciBzZXQgcGFyc2VyCisgKgorICogQ29w eXJpZ2h0IChDKSAyMDIzIE51byBNaQorICogQ29weXJpZ2h0IChDKSAyMDIyIFh1IE11CisgKgor ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSAibGliYXZjb2RlYy9j YnNfaDI2Ni5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgorI2luY2x1ZGUgImxp YmF2Y29kZWMvcmVmc3RydWN0LmgiCisjaW5jbHVkZSAidnZjX2RhdGEuaCIKKyNpbmNsdWRlICJ2 dmNfcHMuaCIKKyNpbmNsdWRlICJ2dmNkZWMuaCIKKworc3RhdGljIGludCBzcHNfbWFwX3BpeGVs X2Zvcm1hdChWVkNTUFMgKnNwcywgdm9pZCAqbG9nX2N0eCkKK3sKKyAgICBjb25zdCBIMjY2UmF3 U1BTICpyID0gc3BzLT5yOworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYzsKKwor ICAgIHN3aXRjaCAoc3BzLT5iaXRfZGVwdGgpIHsKKyAgICBjYXNlIDg6CisgICAgICAgIGlmIChy LT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMCkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9H UkFZODsKKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAxKSBzcHMtPnBp eF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFA7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zv cm1hdF9pZGMgPT0gMikgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQOworICAgICAg ICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJ WF9GTVRfWVVWNDQ0UDsKKyAgICAgICBicmVhazsKKyAgICBjYXNlIDEwOgorICAgICAgICBpZiAo ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDApIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRf R1JBWTEwOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDEpIHNwcy0+ cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwOworICAgICAgICBpZiAoci0+c3BzX2Nocm9t YV9mb3JtYXRfaWRjID09IDIpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIyUDEwOwor ICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+cGl4X2ZtdCA9 IEFWX1BJWF9GTVRfWVVWNDQ0UDEwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDEyOgorICAg ICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDApIHNwcy0+cGl4X2ZtdCA9IEFW X1BJWF9GTVRfR1JBWTEyOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09 IDEpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEyOworICAgICAgICBpZiAoci0+ c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDIpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVW NDIyUDEyOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+ cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEyOworICAgICAgICBicmVhazsKKyAgICBkZWZh dWx0OgorICAgICAgICBhdl9sb2cobG9nX2N0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAg ICAgIlRoZSBmb2xsb3dpbmcgYml0LWRlcHRocyBhcmUgY3VycmVudGx5IHNwZWNpZmllZDogOCwg MTAsIDEyIGJpdHMsICIKKyAgICAgICAgICAgICAgICJjaHJvbWFfZm9ybWF0X2lkYyBpcyAlZCwg ZGVwdGggaXMgJWRcbiIsCisgICAgICAgICAgICAgICByLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMs IHNwcy0+Yml0X2RlcHRoKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgfQorCisgICAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoc3BzLT5waXhfZm10KTsKKyAg ICBpZiAoIWRlc2MpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICBzcHMt PmhzaGlmdFswXSA9IHNwcy0+dnNoaWZ0WzBdID0gMDsKKyAgICBzcHMtPmhzaGlmdFsyXSA9IHNw cy0+aHNoaWZ0WzFdID0gZGVzYy0+bG9nMl9jaHJvbWFfdzsKKyAgICBzcHMtPnZzaGlmdFsyXSA9 IHNwcy0+dnNoaWZ0WzFdID0gZGVzYy0+bG9nMl9jaHJvbWFfaDsKKworICAgIHNwcy0+cGl4ZWxf c2hpZnQgPSBzcHMtPmJpdF9kZXB0aCA+IDg7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBzcHNfYml0X2RlcHRoKFZWQ1NQUyAqc3BzLCB2b2lkICpsb2dfY3R4KQoreworICAgIGNv bnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7CisKKyAgICBzcHMtPmJpdF9kZXB0aCA9IHItPnNw c19iaXRkZXB0aF9taW51czggKyA4OworICAgIHNwcy0+cXBfYmRfb2Zmc2V0ID0gNiAqIChzcHMt PmJpdF9kZXB0aCAtIDgpOworICAgIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UgPQorICAgICAg ICByLT5zcHNfZXh0ZW5kZWRfcHJlY2lzaW9uX2ZsYWcgPyBGRk1BWCgxNSwgRkZNSU4oMjAsIHNw cy0+Yml0X2RlcHRoICsgNikpIDogMTU7CisgICAgcmV0dXJuIHNwc19tYXBfcGl4ZWxfZm9ybWF0 KHNwcywgbG9nX2N0eCk7Cit9CisKK3N0YXRpYyBpbnQgc3BzX2Nocm9tYV9xcF90YWJsZShWVkNT UFMgKnNwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworICAgIGNvbnN0 IGludCBudW1fcXBfdGFibGVzID0gci0+c3BzX3NhbWVfcXBfdGFibGVfZm9yX2Nocm9tYV9mbGFn ID8KKyAgICAgICAgMSA6IChyLT5zcHNfam9pbnRfY2Jjcl9lbmFibGVkX2ZsYWcgPyAzIDogMik7 CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9xcF90YWJsZXM7IGkrKykgeworICAgICAg ICBpbnQgbnVtX3BvaW50c19pbl9xcF90YWJsZTsKKyAgICAgICAgaW50OF90IHFwX2luW1ZWQ19N QVhfUE9JTlRTX0lOX1FQX1RBQkxFXSwgcXBfb3V0W1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxF XTsKKyAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhX3FwX2luW1ZWQ19NQVhfUE9JTlRTX0lOX1FQ X1RBQkxFXTsKKyAgICAgICAgaW50IG9mZiA9IHNwcy0+cXBfYmRfb2Zmc2V0OworCisgICAgICAg IG51bV9wb2ludHNfaW5fcXBfdGFibGUgPSByLT5zcHNfbnVtX3BvaW50c19pbl9xcF90YWJsZV9t aW51czFbaV0gKyAxOworCisgICAgICAgIHFwX291dFswXSA9IHFwX2luWzBdID0gci0+c3BzX3Fw X3RhYmxlX3N0YXJ0X21pbnVzMjZbaV0gKyAyNjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBudW1fcG9pbnRzX2luX3FwX3RhYmxlOyBqKysgKSB7CisgICAgICAgICAgICBkZWx0YV9xcF9p bltqXSA9IHItPnNwc19kZWx0YV9xcF9pbl92YWxfbWludXMxW2ldW2pdICsgMTsKKyAgICAgICAg ICAgIHFwX2luW2orMV0gPSBxcF9pbltqXSArIGRlbHRhX3FwX2luW2pdOworICAgICAgICAgICAg cXBfb3V0W2orMV0gPSBxcF9vdXRbal0gKyAoci0+c3BzX2RlbHRhX3FwX2luX3ZhbF9taW51czFb aV1bal0gXiByLT5zcHNfZGVsdGFfcXBfZGlmZl92YWxbaV1bal0pOworICAgICAgICB9CisgICAg ICAgIHNwcy0+Y2hyb21hX3FwX3RhYmxlW2ldW3FwX2luWzBdICsgb2ZmXSA9IHFwX291dFswXTsK KyAgICAgICAgZm9yIChpbnQgayA9IHFwX2luWzBdIC0gMSArIG9mZjsgayA+PSAwOyBrLS0pCisg ICAgICAgICAgICBzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrXSA9IGF2X2NsaXAoc3BzLT5jaHJv bWFfcXBfdGFibGVbaV1baysxXS0xLCAtb2ZmLCA2Myk7CisKKyAgICAgICAgZm9yIChpbnQgaiAg PSAwOyBqIDwgbnVtX3BvaW50c19pbl9xcF90YWJsZTsgaisrKSB7CisgICAgICAgICAgICBpbnQg c2ggPSBkZWx0YV9xcF9pbltqXSA+PiAxOworICAgICAgICAgICAgZm9yIChpbnQgayA9IHFwX2lu W2pdICsgMSArIG9mZiwgbSA9IDE7IGsgPD0gcXBfaW5baisxXSArIG9mZjsgaysrLCBtKyspIHsK KyAgICAgICAgICAgICAgICBzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrXSA9IHNwcy0+Y2hyb21h X3FwX3RhYmxlW2ldW3FwX2luW2pdICsgb2ZmXSArCisgICAgICAgICAgICAgICAgICAgICgocXBf b3V0W2orMV0gLSBxcF9vdXRbal0pICogbSArIHNoKSAvIGRlbHRhX3FwX2luW2pdOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGsgPSBxcF9pbltudW1fcG9pbnRz X2luX3FwX3RhYmxlXSArIDEgKyBvZmY7IGsgPD0gNjMgKyBvZmY7IGsrKykKKyAgICAgICAgICAg IHNwcy0+Y2hyb21hX3FwX3RhYmxlW2ldW2tdICA9IGF2X2NsaXAoc3BzLT5jaHJvbWFfcXBfdGFi bGVbaV1bay0xXSArIDEsIC1zcHMtPnFwX2JkX29mZnNldCwgNjMpOworICAgIH0KKyAgICBpZiAo ci0+c3BzX3NhbWVfcXBfdGFibGVfZm9yX2Nocm9tYV9mbGFnKSB7CisgICAgICAgIG1lbWNweSgm c3BzLT5jaHJvbWFfcXBfdGFibGVbMV0sICZzcHMtPmNocm9tYV9xcF90YWJsZVswXSwgc2l6ZW9m KHNwcy0+Y2hyb21hX3FwX3RhYmxlWzBdKSk7CisgICAgICAgIG1lbWNweSgmc3BzLT5jaHJvbWFf cXBfdGFibGVbMl0sICZzcHMtPmNocm9tYV9xcF90YWJsZVswXSwgc2l6ZW9mKHNwcy0+Y2hyb21h X3FwX3RhYmxlWzBdKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IHNwc19wb2MoVlZDU1BTICpzcHMpCit7CisgICAgc3BzLT5tYXhfcGljX29yZGVyX2NudF9sc2Ig PSAxIDw8IChzcHMtPnItPnNwc19sb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51czQgKyA0 KTsKK30KKworc3RhdGljIHZvaWQgc3BzX2ludGVyKFZWQ1NQUyAqc3BzKQoreworICAgIGNvbnN0 IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7CisKKyAgICBzcHMtPm1heF9udW1fbWVyZ2VfY2FuZCAg ICAgPSA2IC0gci0+c3BzX3NpeF9taW51c19tYXhfbnVtX21lcmdlX2NhbmQ7CisgICAgc3BzLT5t YXhfbnVtX2liY19tZXJnZV9jYW5kID0gNiAtIHItPnNwc19zaXhfbWludXNfbWF4X251bV9pYmNf bWVyZ2VfY2FuZDsKKworICAgIGlmIChzcHMtPnItPnNwc19ncG1fZW5hYmxlZF9mbGFnKSB7Cisg ICAgICAgIHNwcy0+bWF4X251bV9ncG1fbWVyZ2VfY2FuZCA9IDI7CisgICAgICAgIGlmIChzcHMt Pm1heF9udW1fbWVyZ2VfY2FuZCA+PSAzKQorICAgICAgICAgICAgc3BzLT5tYXhfbnVtX2dwbV9t ZXJnZV9jYW5kID0gc3BzLT5tYXhfbnVtX21lcmdlX2NhbmQgLSByLT5zcHNfbWF4X251bV9tZXJn ZV9jYW5kX21pbnVzX21heF9udW1fZ3BtX2NhbmQ7CisgICAgfQorCisgICAgc3BzLT5sb2cyX3Bh cmFsbGVsX21lcmdlX2xldmVsID0gci0+c3BzX2xvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWxfbWlu dXMyICsgMjsKK30KKworc3RhdGljIHZvaWQgc3BzX3BhcnRpdGlvbl9jb25zdHJhaW50cyhWVkNT UFMqIHNwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworCisgICAgc3Bz LT5jdGJfbG9nMl9zaXplX3kgICAgPSByLT5zcHNfbG9nMl9jdHVfc2l6ZV9taW51czUgKyA1Owor ICAgIHNwcy0+Y3RiX3NpemVfeSAgICAgICAgID0gMSA8PCBzcHMtPmN0Yl9sb2cyX3NpemVfeTsK KyAgICBzcHMtPm1pbl9jYl9sb2cyX3NpemVfeSA9IHItPnNwc19sb2cyX21pbl9sdW1hX2NvZGlu Z19ibG9ja19zaXplX21pbnVzMiArIDI7CisgICAgc3BzLT5taW5fY2Jfc2l6ZV95ICAgICAgPSAx IDw8IHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIHNwcy0+bWF4X3RiX3NpemVfeSAgICAg ID0gMSA8PCAoci0+c3BzX21heF9sdW1hX3RyYW5zZm9ybV9zaXplXzY0X2ZsYWcgPyA2IDogNSk7 CisgICAgc3BzLT5tYXhfdHNfc2l6ZSAgICAgICAgPSAxIDw8IChyLT5zcHNfbG9nMl90cmFuc2Zv cm1fc2tpcF9tYXhfc2l6ZV9taW51czIgKyAyKTsKK30KKworc3RhdGljIHZvaWQgc3BzX2xhZGYo VlZDU1BTKiBzcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsKKworICAg IGlmIChyLT5zcHNfbGFkZl9lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgc3BzLT5udW1fbGFkZl9p bnRlcnZhbHMgPSByLT5zcHNfbnVtX2xhZGZfaW50ZXJ2YWxzX21pbnVzMiArIDI7CisgICAgICAg IHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFswXSA9IDA7CisgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgc3BzLT5udW1fbGFkZl9pbnRlcnZhbHMgLSAxOyBpKyspIHsKKyAgICAgICAg ICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpICsgMV0gPQorICAgICAgICAgICAg ICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpXSArIHItPnNwc19sYWRmX2RlbHRh X3RocmVzaG9sZF9taW51czFbaV0gKyAxOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg aW50IHNwc19kZXJpdmUoVlZDU1BTICpzcHMsIHZvaWQgKmxvZ19jdHgpCit7CisgICAgaW50IHJl dDsKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworCisgICAgc3BzLT53aWR0aCAg PSByLT5zcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZXM7CisgICAgc3BzLT5oZWlnaHQg PSByLT5zcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGVzOworCisgICAgcmV0ID0gc3Bz X2JpdF9kZXB0aChzcHMsIGxvZ19jdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1 cm4gcmV0OworICAgIHNwc19wb2Moc3BzKTsKKyAgICBzcHNfaW50ZXIoc3BzKTsKKyAgICBzcHNf cGFydGl0aW9uX2NvbnN0cmFpbnRzKHNwcyk7CisgICAgc3BzX2xhZGYoc3BzKTsKKyAgICBpZiAo ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjICE9IDApCisgICAgICAgIHNwc19jaHJvbWFfcXBfdGFi bGUoc3BzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcHNfZnJlZShGRlJl ZlN0cnVjdE9wYXF1ZSBvcGFxdWUsIHZvaWQgKm9iaikKK3sKKyAgICBWVkNTUFMgKnNwcyA9IG9i ajsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnNwcy0+cik7Cit9CisKK3N0YXRpYyBjb25zdCBW VkNTUFMgKnNwc19hbGxvYyhjb25zdCBIMjY2UmF3U1BTICpyc3BzLCB2b2lkICpsb2dfY3R4KQor eworICAgIGludCByZXQ7CisgICAgVlZDU1BTICpzcHMgPSBmZl9yZWZzdHJ1Y3RfYWxsb2NfZXh0 KHNpemVvZigqc3BzKSwgMCwgTlVMTCwgc3BzX2ZyZWUpOworCisgICAgaWYgKCFzcHMpCisgICAg ICAgIHJldHVybiBOVUxMOworCisgICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJnNwcy0+ciwgcnNw cyk7CisKKyAgICByZXQgPSBzcHNfZGVyaXZlKHNwcywgbG9nX2N0eCk7CisgICAgaWYgKHJldCA8 IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJldHVybiBzcHM7CisKK2ZhaWw6CisgICAg ZmZfcmVmc3RydWN0X3VucmVmKCZzcHMpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMg aW50IGRlY29kZV9zcHMoVlZDUGFyYW1TZXRzICpwcywgY29uc3QgSDI2NlJhd1NQUyAqcnNwcywg dm9pZCAqbG9nX2N0eCkKK3sKKyAgICBjb25zdCBpbnQgc3BzX2lkICAgICAgICA9IHJzcHMtPnNw c19zZXFfcGFyYW1ldGVyX3NldF9pZDsKKyAgICBjb25zdCBWVkNTUFMgKm9sZF9zcHMgICA9IHBz LT5zcHNfbGlzdFtzcHNfaWRdOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzOworCisgICAgaWYgKG9s ZF9zcHMgJiYgb2xkX3Nwcy0+ciA9PSByc3BzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNw cyA9IHNwc19hbGxvYyhyc3BzLCBsb2dfY3R4KTsKKyAgICBpZiAoIXNwcykKKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMtPnNwc19s aXN0W3Nwc19pZF0pOworICAgIHBzLT5zcHNfbGlzdFtzcHNfaWRdID0gc3BzOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBwc19jaHJvbWFfcXBfb2Zmc2V0KFZWQ1BQUyAqcHBz KQoreworICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldFtDQiAtIDFdICAgPSBwcHMtPnItPnBwc19j Yl9xcF9vZmZzZXQ7CisgICAgcHBzLT5jaHJvbWFfcXBfb2Zmc2V0W0NSIC0gMV0gICA9IHBwcy0+ ci0+cHBzX2NyX3FwX29mZnNldDsKKyAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRbSkNCQ1IgLSAx XT0gcHBzLT5yLT5wcHNfam9pbnRfY2Jjcl9xcF9vZmZzZXRfdmFsdWU7CisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA2OyBpKyspIHsKKyAgICAgICAgcHBzLT5jaHJvbWFfcXBfb2Zmc2V0X2xpc3Rb aV1bQ0IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY2JfcXBfb2Zmc2V0X2xpc3RbaV07CisgICAgICAg IHBwcy0+Y2hyb21hX3FwX29mZnNldF9saXN0W2ldW0NSIC0gMV0gICA9IHBwcy0+ci0+cHBzX2Ny X3FwX29mZnNldF9saXN0W2ldOworICAgICAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdFtp XVtKQ0JDUiAtIDFdPSBwcHMtPnItPnBwc19qb2ludF9jYmNyX3FwX29mZnNldF9saXN0W2ldOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgcHBzX3dpZHRoX2hlaWdodChWVkNQUFMgKnBwcywgY29u c3QgVlZDU1BTICpzcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKwor ICAgIHBwcy0+d2lkdGggICAgICAgICAgPSByLT5wcHNfcGljX3dpZHRoX2luX2x1bWFfc2FtcGxl czsKKyAgICBwcHMtPmhlaWdodCAgICAgICAgID0gci0+cHBzX3BpY19oZWlnaHRfaW5fbHVtYV9z YW1wbGVzOworCisgICAgcHBzLT5jdGJfd2lkdGggICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+ d2lkdGgsICBzcHMtPmN0Yl9sb2cyX3NpemVfeSk7CisgICAgcHBzLT5jdGJfaGVpZ2h0ICAgICA9 IEFWX0NFSUxfUlNISUZUKHBwcy0+aGVpZ2h0LCBzcHMtPmN0Yl9sb2cyX3NpemVfeSk7CisgICAg cHBzLT5jdGJfY291bnQgICAgICA9IHBwcy0+Y3RiX3dpZHRoICogcHBzLT5jdGJfaGVpZ2h0Owor CisgICAgcHBzLT5taW5fY2Jfd2lkdGggICA9IHBwcy0+d2lkdGggID4+IHNwcy0+bWluX2NiX2xv ZzJfc2l6ZV95OworICAgIHBwcy0+bWluX2NiX2hlaWdodCAgPSBwcHMtPmhlaWdodCA+PiBzcHMt Pm1pbl9jYl9sb2cyX3NpemVfeTsKKworICAgIHBwcy0+bWluX3B1X3dpZHRoICAgPSBwcHMtPndp ZHRoICA+PiBNSU5fUFVfTE9HMjsKKyAgICBwcHMtPm1pbl9wdV9oZWlnaHQgID0gcHBzLT5oZWln aHQgPj4gTUlOX1BVX0xPRzI7CisgICAgcHBzLT5taW5fdHVfd2lkdGggICA9IHBwcy0+d2lkdGgg ID4+IE1JTl9UVV9MT0cyOworICAgIHBwcy0+bWluX3R1X2hlaWdodCAgPSBwcHMtPmhlaWdodCA+ PiBNSU5fVFVfTE9HMjsKKworICAgIHBwcy0+d2lkdGgzMiAgICAgICAgPSBBVl9DRUlMX1JTSElG VChwcHMtPndpZHRoLCAgNSk7CisgICAgcHBzLT5oZWlnaHQzMiAgICAgICA9IEFWX0NFSUxfUlNI SUZUKHBwcy0+aGVpZ2h0LCA1KTsKKyAgICBwcHMtPndpZHRoNjQgICAgICAgID0gQVZfQ0VJTF9S U0hJRlQocHBzLT53aWR0aCwgIDYpOworICAgIHBwcy0+aGVpZ2h0NjQgICAgICAgPSBBVl9DRUlM X1JTSElGVChwcHMtPmhlaWdodCwgNik7Cit9CisKK3N0YXRpYyBpbnQgcHBzX2JkKFZWQ1BQUyAq cHBzKQoreworICAgIGNvbnN0IEgyNjZSYXdQUFMgKnIgPSBwcHMtPnI7CisKKyAgICBwcHMtPmNv bF9iZCAgICAgICAgPSBhdl9jYWxsb2Moci0+bnVtX3RpbGVfY29sdW1ucyAgKyAxLCBzaXplb2Yo KnBwcy0+Y29sX2JkKSk7CisgICAgcHBzLT5yb3dfYmQgICAgICAgID0gYXZfY2FsbG9jKHItPm51 bV90aWxlX3Jvd3MgICsgMSwgICAgc2l6ZW9mKCpwcHMtPnJvd19iZCkpOworICAgIHBwcy0+Y3Ri X3RvX2NvbF9iZCA9IGF2X2NhbGxvYyhwcHMtPmN0Yl93aWR0aCAgKyAxLCAgICAgIHNpemVvZigq cHBzLT5jdGJfdG9fY29sX2JkKSk7CisgICAgcHBzLT5jdGJfdG9fcm93X2JkID0gYXZfY2FsbG9j KHBwcy0+Y3RiX2hlaWdodCArIDEsICAgICAgc2l6ZW9mKCpwcHMtPmN0Yl90b19jb2xfYmQpKTsK KyAgICBpZiAoIXBwcy0+Y29sX2JkIHx8ICFwcHMtPnJvd19iZCB8fCAhcHBzLT5jdGJfdG9fY29s X2JkIHx8ICFwcHMtPmN0Yl90b19yb3dfYmQpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisKKyAgICBmb3IgKGludCBpID0gMCwgaiA9IDA7IGkgPCByLT5udW1fdGlsZV9jb2x1bW5z OyBpKyspIHsKKyAgICAgICAgcHBzLT5jb2xfYmRbaV0gPSBqOworICAgICAgICBqICs9IHItPmNv bF93aWR0aF92YWxbaV07CisgICAgICAgIGZvciAoaW50IGsgPSBwcHMtPmNvbF9iZFtpXTsgayA8 IGo7IGsrKykKKyAgICAgICAgICAgIHBwcy0+Y3RiX3RvX2NvbF9iZFtrXSA9IHBwcy0+Y29sX2Jk W2ldOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHItPm51bV90aWxl X3Jvd3M7IGkrKykgeworICAgICAgICBwcHMtPnJvd19iZFtpXSA9IGo7CisgICAgICAgIGogKz0g ci0+cm93X2hlaWdodF92YWxbaV07CisgICAgICAgIGZvciAoaW50IGsgPSBwcHMtPnJvd19iZFtp XTsgayA8IGo7IGsrKykKKyAgICAgICAgICAgIHBwcy0+Y3RiX3RvX3Jvd19iZFtrXSA9IHBwcy0+ cm93X2JkW2ldOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IG5leHRf dGlsZV9pZHgoaW50IHRpbGVfaWR4LCBjb25zdCBpbnQgaSwgY29uc3QgSDI2NlJhd1BQUyAqcikK K3sKKyAgICBpZiAoci0+cHBzX3RpbGVfaWR4X2RlbHRhX3ByZXNlbnRfZmxhZykgeworICAgICAg ICB0aWxlX2lkeCArPSByLT5wcHNfdGlsZV9pZHhfZGVsdGFfdmFsW2ldOworICAgIH0gZWxzZSB7 CisgICAgICAgIHRpbGVfaWR4ICs9IHItPnBwc19zbGljZV93aWR0aF9pbl90aWxlc19taW51czFb aV0gKyAxOworICAgICAgICBpZiAodGlsZV9pZHggJSByLT5udW1fdGlsZV9jb2x1bW5zID09IDAp CisgICAgICAgICAgICB0aWxlX2lkeCArPSAoci0+cHBzX3NsaWNlX2hlaWdodF9pbl90aWxlc19t aW51czFbaV0pICogci0+bnVtX3RpbGVfY29sdW1uczsKKyAgICB9CisgICAgcmV0dXJuIHRpbGVf aWR4OworfQorCitzdGF0aWMgdm9pZCB0aWxlX3h5KGludCAqdGlsZV94LCBpbnQgKnRpbGVfeSwg Y29uc3QgaW50IHRpbGVfaWR4LCBjb25zdCBWVkNQUFMgKnBwcykKK3sKKyAgICAqdGlsZV94ID0g dGlsZV9pZHggJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7CisgICAgKnRpbGVfeSA9IHRpbGVf aWR4IC8gcHBzLT5yLT5udW1fdGlsZV9jb2x1bW5zOworfQorCitzdGF0aWMgdm9pZCBjdHVfeHko aW50ICpjdHVfeCwgaW50ICpjdHVfeSwgY29uc3QgaW50IHRpbGVfeCwgY29uc3QgaW50IHRpbGVf eSwgY29uc3QgVlZDUFBTICpwcHMpCit7CisgICAgKmN0dV94ID0gcHBzLT5jb2xfYmRbdGlsZV94 XTsKKyAgICAqY3R1X3kgPSBwcHMtPnJvd19iZFt0aWxlX3ldOworfQorCitzdGF0aWMgaW50IGN0 dV9ycyhjb25zdCBpbnQgY3R1X3gsIGNvbnN0IGludCBjdHVfeSwgY29uc3QgVlZDUFBTICpwcHMp Cit7CisgICAgcmV0dXJuIHBwcy0+Y3RiX3dpZHRoICogY3R1X3kgKyBjdHVfeDsKK30KKworc3Rh dGljIGludCBwcHNfYWRkX2N0dXMoVlZDUFBTICpwcHMsIGludCAqb2ZmLCBjb25zdCBpbnQgY3R1 X3gsIGNvbnN0IGludCBjdHVfeSwKKyAgICBjb25zdCBpbnQgdywgY29uc3QgaW50IGgpCit7Cisg ICAgaW50IHN0YXJ0ID0gKm9mZjsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgewor ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgcHBzLT5j dGJfYWRkcl9pbl9zbGljZVsqb2ZmXSA9IGN0dV9ycyhjdHVfeCArIHgsIGN0dV95ICsgeSwgcHBz KTsKKyAgICAgICAgICAgICgqb2ZmKSsrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAq b2ZmIC0gc3RhcnQ7Cit9CisKK3N0YXRpYyBpbnQgcHBzX29uZV90aWxlX3NsaWNlcyhWVkNQUFMg KnBwcywgY29uc3QgaW50IHRpbGVfaWR4LCBpbnQgaSwgaW50ICpvZmYpCit7CisgICAgY29uc3Qg SDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LCBjdHVfeV9lbmQs IHRpbGVfeCwgdGlsZV95OworCisgICAgdGlsZV94eSgmdGlsZV94LCAmdGlsZV95LCB0aWxlX2lk eCwgcHBzKTsKKyAgICBjdHVfeHkoJmN0dV94LCAmY3R1X3ksIHRpbGVfeCwgdGlsZV95LCBwcHMp OworICAgIGN0dV95X2VuZCA9IGN0dV95ICsgci0+cm93X2hlaWdodF92YWxbdGlsZV95XTsKKyAg ICB3aGlsZSAoY3R1X3kgPCBjdHVfeV9lbmQpIHsKKyAgICAgICAgcHBzLT5zbGljZV9zdGFydF9v ZmZzZXRbaV0gPSAqb2ZmOworICAgICAgICBwcHMtPm51bV9jdHVzX2luX3NsaWNlW2ldID0gcHBz X2FkZF9jdHVzKHBwcywgb2ZmLCBjdHVfeCwgY3R1X3ksCisgICAgICAgICAgICByLT5jb2xfd2lk dGhfdmFsW3RpbGVfeF0sIHItPnNsaWNlX2hlaWdodF9pbl9jdHVzW2ldKTsKKyAgICAgICAgY3R1 X3kgKz0gci0+c2xpY2VfaGVpZ2h0X2luX2N0dXNbaSsrXTsKKyAgICB9CisgICAgaS0tOworICAg IHJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBwcHNfbXVsdGlfdGlsZXNfc2xpY2UoVlZDUFBT ICpwcHMsIGNvbnN0IGludCB0aWxlX2lkeCwgY29uc3QgaW50IGksIGludCAqb2ZmKQoreworICAg IGNvbnN0IEgyNjZSYXdQUFMgKnIgPSBwcHMtPnI7CisgICAgaW50IGN0dV94LCBjdHVfeSx0aWxl X3gsIHRpbGVfeTsKKworICAgIHRpbGVfeHkoJnRpbGVfeCwgJnRpbGVfeSwgdGlsZV9pZHgsIHBw cyk7CisgICAgcHBzLT5zbGljZV9zdGFydF9vZmZzZXRbaV0gPSAqb2ZmOworICAgIHBwcy0+bnVt X2N0dXNfaW5fc2xpY2VbaV0gPSAwOworICAgIGZvciAoaW50IHR5ID0gdGlsZV95OyB0eSA8PSB0 aWxlX3kgKyByLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3RpbGVzX21pbnVzMVtpXTsgdHkrKykgewor ICAgICAgICBmb3IgKGludCB0eCA9IHRpbGVfeDsgdHggPD0gdGlsZV94ICsgci0+cHBzX3NsaWNl X3dpZHRoX2luX3RpbGVzX21pbnVzMVtpXTsgdHgrKykgeworICAgICAgICAgICAgY3R1X3h5KCZj dHVfeCwgJmN0dV95LCB0eCwgdHksIHBwcyk7CisgICAgICAgICAgICBwcHMtPm51bV9jdHVzX2lu X3NsaWNlW2ldICs9IHBwc19hZGRfY3R1cyhwcHMsIG9mZiwgY3R1X3gsIGN0dV95LAorICAgICAg ICAgICAgICAgIHItPmNvbF93aWR0aF92YWxbdHhdLCByLT5yb3dfaGVpZ2h0X3ZhbFt0eV0pOwor ICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwcHNfcmVjdF9zbGljZShWVkNQUFMq IHBwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3UFBTKiByID0gcHBzLT5yOworICAgIGludCB0aWxl X2lkeCA9IDAsIG9mZiA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHItPnBwc19udW1f c2xpY2VzX2luX3BpY19taW51czEgKyAxOyBpKyspIHsKKyAgICAgICAgaWYgKCFyLT5wcHNfc2xp Y2Vfd2lkdGhfaW5fdGlsZXNfbWludXMxW2ldICYmCisgICAgICAgICAgICAhci0+cHBzX3NsaWNl X2hlaWdodF9pbl90aWxlc19taW51czFbaV0pIHsKKyAgICAgICAgICAgIGkgPSBwcHNfb25lX3Rp bGVfc2xpY2VzKHBwcywgdGlsZV9pZHgsIGksICZvZmYpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgcHBzX211bHRpX3RpbGVzX3NsaWNlKHBwcywgdGlsZV9pZHgsIGksICZvZmYpOwor CisgICAgICAgIH0KKyAgICAgICAgdGlsZV9pZHggPSBuZXh0X3RpbGVfaWR4KHRpbGVfaWR4LCBp LCByKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBwc19ub19yZWN0X3NsaWNlKFZWQ1BQUyog cHBzKQoreworICAgIGNvbnN0IEgyNjZSYXdQUFMqIHIgPSBwcHMtPnI7CisgICAgaW50IGN0dV94 LCBjdHVfeSwgb2ZmID0gMDsKKworICAgIGZvciAoaW50IHRpbGVfeSA9IDA7IHRpbGVfeSA8IHIt Pm51bV90aWxlX3Jvd3M7IHRpbGVfeSsrKSB7CisgICAgICAgIGZvciAoaW50IHRpbGVfeCA9IDA7 IHRpbGVfeCA8IHItPm51bV90aWxlX2NvbHVtbnM7IHRpbGVfeCsrKSB7CisgICAgICAgICAgICBj dHVfeHkoJmN0dV94LCAmY3R1X3ksIHRpbGVfeCwgdGlsZV95LCBwcHMpOworICAgICAgICAgICAg cHBzX2FkZF9jdHVzKHBwcywgJm9mZiwgY3R1X3gsIGN0dV95LCByLT5jb2xfd2lkdGhfdmFsW3Rp bGVfeF0sIHItPnJvd19oZWlnaHRfdmFsW3RpbGVfeV0pOworICAgICAgICB9CisgICAgfQorfQor CitzdGF0aWMgaW50IHBwc19zbGljZV9tYXAoVlZDUFBTICpwcHMpCit7CisgICAgcHBzLT5jdGJf YWRkcl9pbl9zbGljZSA9IGF2X2NhbGxvYyhwcHMtPmN0Yl9jb3VudCwgc2l6ZW9mKCpwcHMtPmN0 Yl9hZGRyX2luX3NsaWNlKSk7CisgICAgaWYgKCFwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKQorICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgaWYgKHBwcy0+ci0+cHBzX3JlY3Rf c2xpY2VfZmxhZykKKyAgICAgICAgcHBzX3JlY3Rfc2xpY2UocHBzKTsKKyAgICBlbHNlCisgICAg ICAgIHBwc19ub19yZWN0X3NsaWNlKHBwcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgcHBzX3JlZl93cmFwYXJvdW5kX29mZnNldChWVkNQUFMgKnBwcywgY29uc3QgVlZDU1BT ICpzcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKworICAgIGlmIChy LT5wcHNfcmVmX3dyYXBhcm91bmRfZW5hYmxlZF9mbGFnKQorICAgICAgICBwcHMtPnJlZl93cmFw YXJvdW5kX29mZnNldCA9IChwcHMtPndpZHRoIC8gc3BzLT5taW5fY2Jfc2l6ZV95KSAtIHItPnBw c19waWNfd2lkdGhfbWludXNfd3JhcGFyb3VuZF9vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHBz X2Rlcml2ZShWVkNQUFMgKnBwcywgY29uc3QgVlZDU1BTICpzcHMpCit7CisgICAgaW50IHJldDsK KworICAgIHBwc19jaHJvbWFfcXBfb2Zmc2V0KHBwcyk7CisgICAgcHBzX3dpZHRoX2hlaWdodChw cHMsIHNwcyk7CisKKyAgICByZXQgPSBwcHNfYmQocHBzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAg ICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IHBwc19zbGljZV9tYXAocHBzKTsKKyAgICBp ZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHBwc19yZWZfd3JhcGFyb3Vu ZF9vZmZzZXQocHBzLCBzcHMpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBw c19mcmVlKEZGUmVmU3RydWN0T3BhcXVlIG9wYXF1ZSwgdm9pZCAqb2JqKQoreworICAgIFZWQ1BQ UyAqcHBzID0gb2JqOworCisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZwcHMtPnIpOworCisgICAg YXZfZnJlZXAoJnBwcy0+Y29sX2JkKTsKKyAgICBhdl9mcmVlcCgmcHBzLT5yb3dfYmQpOworICAg IGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19jb2xfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90 b19yb3dfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKTsKK30KKwor c3RhdGljIGNvbnN0IFZWQ1BQUyAqcHBzX2FsbG9jKGNvbnN0IEgyNjZSYXdQUFMgKnJwcHMsIGNv bnN0IFZWQ1NQUyAqc3BzKQoreworICAgIGludCByZXQ7CisgICAgVlZDUFBTICpwcHMgPSBmZl9y ZWZzdHJ1Y3RfYWxsb2NfZXh0KHNpemVvZigqcHBzKSwgMCwgTlVMTCwgcHBzX2ZyZWUpOworCisg ICAgaWYgKCFwcHMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZmZfcmVmc3RydWN0X3Jl cGxhY2UoJnBwcy0+ciwgcnBwcyk7CisKKyAgICByZXQgPSBwcHNfZGVyaXZlKHBwcywgc3BzKTsK KyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcmV0dXJuIHBwczsK KworZmFpbDoKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBwcyk7CisgICAgcmV0dXJuIE5VTEw7 Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3BwcyhWVkNQYXJhbVNldHMgKnBzLCBjb25zdCBIMjY2 UmF3UFBTICpycHBzKQoreworICAgIGludCByZXQgICAgICAgICAgICAgICAgID0gMDsKKyAgICBj b25zdCBpbnQgcHBzX2lkICAgICAgICA9IHJwcHMtPnBwc19waWNfcGFyYW1ldGVyX3NldF9pZDsK KyAgICBjb25zdCBpbnQgc3BzX2lkICAgICAgICA9IHJwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3Nl dF9pZDsKKyAgICBjb25zdCBWVkNQUFMgKm9sZF9wcHMgICA9IHBzLT5wcHNfbGlzdFtwcHNfaWRd OworICAgIGNvbnN0IFZWQ1BQUyAqcHBzOworCisgICAgaWYgKG9sZF9wcHMgJiYgb2xkX3Bwcy0+ ciA9PSBycHBzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBwcyA9IHBwc19hbGxvYyhycHBz LCBwcy0+c3BzX2xpc3Rbc3BzX2lkXSk7CisgICAgaWYgKCFwcHMpCisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBzLT5wcHNfbGlzdFtw cHNfaWRdKTsKKyAgICBwcy0+cHBzX2xpc3RbcHBzX2lkXSA9IHBwczsKKworICAgIHJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3BzKFZWQ1BhcmFtU2V0cyAqcHMsIGNvbnN0IENv ZGVkQml0c3RyZWFtSDI2NkNvbnRleHQgKmgyNjYsIHZvaWQgKmxvZ19jdHgpCit7CisgICAgY29u c3QgSDI2NlJhd1BpY3R1cmVIZWFkZXIgKnBoID0gaDI2Ni0+cGg7CisgICAgY29uc3QgSDI2NlJh d1BQUyAqcnBwczsKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyc3BzOworICAgIGludCByZXQ7CisK KyAgICBpZiAoIXBoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAg IHJwcHMgPSBoMjY2LT5wcHNbcGgtPnBoX3BpY19wYXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBpZiAo IXJwcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgcnNwcyA9 IGgyNjYtPnNwc1tycHBzLT5wcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRdOworICAgIGlmICghcnNw cykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICByZXQgPSBkZWNv ZGVfc3BzKHBzLCByc3BzLCBsb2dfY3R4KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0 dXJuIHJldDsKKworICAgIHJldCA9IGRlY29kZV9wcHMocHMsIHJwcHMpOworICAgIGlmIChyZXQg PCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUg V0VJR0hUX1RBQkxFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHctPm5iX3dlaWdo dHNbTCMjeF0gPSByLT5udW1fd2VpZ2h0c19sIyN4OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yIChpbnQgaSA9IDA7IGkg PCB3LT5uYl93ZWlnaHRzW0wjI3hdOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdy0+d2VpZ2h0X2ZsYWdbTCMjeF1b TFVNQV1baV0gICAgID0gci0+bHVtYV93ZWlnaHRfbCMjeCMjX2ZsYWdbaV07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB3LT53ZWlnaHRfZmxhZ1tMIyN4XVtDSFJPTUFd W2ldICAgPSByLT5jaHJvbWFfd2VpZ2h0X2wjI3gjI19mbGFnW2ldOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgIHctPndlaWdodFtMIyN4XVtMVU1BXVtpXSAgICAgICAgICA9 IGRlbm9tW0xVTUFdICsgci0+ZGVsdGFfbHVtYV93ZWlnaHRfbCMjeFtpXTsgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgdy0+b2Zmc2V0W0wjI3hdW0xVTUFdW2ldICAgICAgICAgID0gci0+bHVt YV9vZmZzZXRfbCMjeFtpXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBmb3IgKGludCBqID0gQ0I7IGogPD0gQ1I7IGorKykgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICB3LT53ZWlnaHRbTCMjeF1bal1baV0gICAgICAgICA9IGRlbm9tW0NIUk9NQV0gKyByLT5k ZWx0YV9jaHJvbWFfd2VpZ2h0X2wjI3hbaV1baiAtIDFdOyAgICAgIFwKKyAgICAgICAgICAgIHct Pm9mZnNldFtMIyN4XVtqXVtpXSAgICAgICAgID0gMTI4ICsgci0+ZGVsdGFfY2hyb21hX29mZnNl dF9sIyN4W2ldW2ogLSAxXTsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdy0+b2Zmc2V0 W0wjI3hdW2pdW2ldICAgICAgICAtPSAoMTI4ICogdy0+d2VpZ2h0W0wjI3hdW2pdW2ldKSA+PiB3 LT5sb2cyX2Rlbm9tW0NIUk9NQV07ICAgICBcCisgICAgICAgICAgICB3LT5vZmZzZXRbTCMjeF1b al1baV0gICAgICAgICA9IGF2X2NsaXBfaW50cDIody0+b2Zmc2V0W0wjI3hdW2pdW2ldLCA3KTsg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisKK3N0YXRpYyB2b2lkIHByZWRfd2VpZ2h0X3RhYmxlKFByZWRXZWlnaHRUYWJsZSAq dywgY29uc3QgSDI2NlJhd1ByZWRXZWlnaHRUYWJsZSAqcikKK3sKKyAgICBpbnQgZGVub21bMl07 CisKKyAgICB3LT5sb2cyX2Rlbm9tW0xVTUFdID0gci0+bHVtYV9sb2cyX3dlaWdodF9kZW5vbTsK KyAgICB3LT5sb2cyX2Rlbm9tW0NIUk9NQV0gPSB3LT5sb2cyX2Rlbm9tW0xVTUFdICsgci0+ZGVs dGFfY2hyb21hX2xvZzJfd2VpZ2h0X2Rlbm9tOworICAgIGRlbm9tW0xVTUFdID0gMSA8PCB3LT5s b2cyX2Rlbm9tW0xVTUFdOworICAgIGRlbm9tW0NIUk9NQV0gPSAxIDw8IHctPmxvZzJfZGVub21b Q0hST01BXTsKKyAgICBXRUlHSFRfVEFCTEUoMCkKKyAgICBXRUlHSFRfVEFCTEUoMSkKK30KKwor Ly8gOC4zLjEgRGVjb2RpbmcgcHJvY2VzcyBmb3IgcGljdHVyZSBvcmRlciBjb3VudAorc3RhdGlj IGludCBwaF9jb21wdXRlX3BvYyhjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGgsIGNvbnN0 IEgyNjZSYXdTUFMgKnNwcywgY29uc3QgaW50IHBvY190aWQwLCBjb25zdCBpbnQgaXNfY2x2c3Mp Cit7CisgICAgY29uc3QgaW50IG1heF9wb2NfbHNiICAgICAgID0gMSA8PCAoc3BzLT5zcHNfbG9n Ml9tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0ICsgNCk7CisgICAgY29uc3QgaW50IHByZXZf cG9jX2xzYiAgICAgID0gcG9jX3RpZDAgJSBtYXhfcG9jX2xzYjsKKyAgICBjb25zdCBpbnQgcHJl dl9wb2NfbXNiICAgICAgPSBwb2NfdGlkMCAtIHByZXZfcG9jX2xzYjsKKyAgICBjb25zdCBpbnQg cG9jX2xzYiAgICAgICAgICAgPSBwaC0+cGhfcGljX29yZGVyX2NudF9sc2I7CisgICAgaW50IHBv Y19tc2I7CisKKyAgICBpZiAocGgtPnBoX3BvY19tc2JfY3ljbGVfcHJlc2VudF9mbGFnKSB7Cisg ICAgICAgIHBvY19tc2IgPSBwaC0+cGhfcG9jX21zYl9jeWNsZV92YWwgKiBtYXhfcG9jX2xzYjsK KyAgICB9IGVsc2UgaWYgKGlzX2NsdnNzKSB7CisgICAgICAgIHBvY19tc2IgPSAwOworICAgIH0g ZWxzZSB7CisgICAgICAgIGlmIChwb2NfbHNiIDwgcHJldl9wb2NfbHNiICYmIHByZXZfcG9jX2xz YiAtIHBvY19sc2IgPj0gbWF4X3BvY19sc2IgLyAyKQorICAgICAgICAgICAgcG9jX21zYiA9IHBy ZXZfcG9jX21zYiArIG1heF9wb2NfbHNiOworICAgICAgICBlbHNlIGlmIChwb2NfbHNiID4gcHJl dl9wb2NfbHNiICYmIHBvY19sc2IgLSBwcmV2X3BvY19sc2IgPiBtYXhfcG9jX2xzYiAvIDIpCisg ICAgICAgICAgICBwb2NfbXNiID0gcHJldl9wb2NfbXNiIC0gbWF4X3BvY19sc2I7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgIHBvY19tc2IgPSBwcmV2X3BvY19tc2I7CisgICAgfQorCisgICAg cmV0dXJuIHBvY19tc2IgKyBwb2NfbHNiOworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB1 aW50MTZfdCBsbWNzX2Rlcml2ZV9sdXRfc2FtcGxlKHVpbnQxNl90IHNhbXBsZSwKKyAgICB1aW50 MTZfdCAqcGl2b3QxLCB1aW50MTZfdCAqcGl2b3QyLCB1aW50MTZfdCAqc2NhbGVfY29lZmYsIGNv bnN0IGludCBpZHgsIGNvbnN0IGludCBtYXgpCit7CisgICAgY29uc3QgaW50IGx1dF9zYW1wbGUg PQorICAgICAgICBwaXZvdDFbaWR4XSArICgoc2NhbGVfY29lZmZbaWR4XSAqIChzYW1wbGUgLSBw aXZvdDJbaWR4XSkgKyAoMTw8IDEwKSkgPj4gMTEpOworICAgIHJldHVybiBhdl9jbGlwKGx1dF9z YW1wbGUsIDAsIG1heCAtIDEpOworfQorCisvLzguOC4yLjIgSW52ZXJzZSBtYXBwaW5nIHByb2Nl c3MgZm9yIGEgbHVtYSBzYW1wbGUKK3N0YXRpYyBpbnQgbG1jc19kZXJpdmVfbHV0KFZWQ0xNQ1Mg KmxtY3MsIGNvbnN0IEgyNjZSYXdBUFMgKnJsbWNzLCBjb25zdCBIMjY2UmF3U1BTICpzcHMpCit7 CisgICAgY29uc3QgaW50IGJpdF9kZXB0aCA9IChzcHMtPnNwc19iaXRkZXB0aF9taW51czggKyA4 KTsKKyAgICBjb25zdCBpbnQgbWF4ICAgICAgID0gKDEgPDwgYml0X2RlcHRoKTsKKyAgICBjb25z dCBpbnQgb3JnX2N3ICAgID0gbWF4IC8gTE1DU19NQVhfQklOX1NJWkU7CisgICAgY29uc3QgaW50 IHNoaWZ0ICAgICA9IGF2X2xvZzIob3JnX2N3KTsKKyAgICBjb25zdCBpbnQgb2ZmICAgICAgID0g MSA8PCAoc2hpZnQgLSAxKTsKKyAgICBpbnQgY3dbTE1DU19NQVhfQklOX1NJWkVdOworICAgIHVp bnQxNl90IGlucHV0X3Bpdm90W0xNQ1NfTUFYX0JJTl9TSVpFXTsKKyAgICB1aW50MTZfdCBzY2Fs ZV9jb2VmZltMTUNTX01BWF9CSU5fU0laRV07CisgICAgdWludDE2X3QgaW52X3NjYWxlX2NvZWZm W0xNQ1NfTUFYX0JJTl9TSVpFXTsKKyAgICBpbnQgaSwgZGVsdGFfY3JzOworICAgIGlmIChiaXRf ZGVwdGggPiBMTUNTX01BWF9CSVRfREVQVEgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENI V0VMQ09NRTsKKworICAgIGlmICghcmxtY3MpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworCisgICAgbG1jcy0+bWluX2Jpbl9pZHggPSBybG1jcy0+bG1jc19taW5fYmluX2lk eDsKKyAgICBsbWNzLT5tYXhfYmluX2lkeCA9IExNQ1NfTUFYX0JJTl9TSVpFIC0gMSAtIHJsbWNz LT5sbWNzX21pbl9iaW5faWR4OworCisgICAgbWVtc2V0KGN3LCAwLCBzaXplb2YoY3cpKTsKKyAg ICBmb3IgKGludCBpID0gbG1jcy0+bWluX2Jpbl9pZHg7IGkgPD0gbG1jcy0+bWF4X2Jpbl9pZHg7 IGkrKykKKyAgICAgICAgY3dbaV0gPSBvcmdfY3cgKyAoMSAtIDIgKiBybG1jcy0+bG1jc19kZWx0 YV9zaWduX2N3X2ZsYWdbaV0pICogcmxtY3MtPmxtY3NfZGVsdGFfYWJzX2N3W2ldOworCisgICAg ZGVsdGFfY3JzID0gKDEgLSAyICogcmxtY3MtPmxtY3NfZGVsdGFfc2lnbl9jcnNfZmxhZykgKiBy bG1jcy0+bG1jc19kZWx0YV9hYnNfY3JzOworCisgICAgbG1jcy0+cGl2b3RbMF0gPSAwOworICAg IGZvciAoaSA9IDA7IGkgPCBMTUNTX01BWF9CSU5fU0laRTsgaSsrKSB7CisgICAgICAgIGlucHV0 X3Bpdm90W2ldICAgICAgICA9IGkgKiBvcmdfY3c7CisgICAgICAgIGxtY3MtPnBpdm90W2kgKyAx XSA9IGxtY3MtPnBpdm90W2ldICsgY3dbaV07CisgICAgICAgIHNjYWxlX2NvZWZmW2ldICAgICAg ICA9IChjd1tpXSAqICgxIDw8IDExKSArICBvZmYpID4+IHNoaWZ0OworICAgICAgICBpZiAoY3db aV0gPT0gMCkgeworICAgICAgICAgICAgaW52X3NjYWxlX2NvZWZmW2ldID0gMDsKKyAgICAgICAg ICAgIGxtY3MtPmNocm9tYV9zY2FsZV9jb2VmZltpXSA9ICgxIDw8IDExKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGludl9zY2FsZV9jb2VmZltpXSA9IG9yZ19jdyAqICgxIDw8IDEx KSAvIGN3W2ldOworICAgICAgICAgICAgbG1jcy0+Y2hyb21hX3NjYWxlX2NvZWZmW2ldID0gb3Jn X2N3ICogKDEgPDwgMTEpIC8gKGN3W2ldICsgZGVsdGFfY3JzKTsKKyAgICAgICAgfQorICAgIH0K KworICAgIC8vZGVyaXZlIGxtY3NfZndkX2x1dAorICAgIGZvciAodWludDE2X3Qgc2FtcGxlID0g MDsgc2FtcGxlIDwgbWF4OyBzYW1wbGUrKykgeworICAgICAgICBjb25zdCBpbnQgaWR4X3kgPSBz YW1wbGUgLyBvcmdfY3c7CisgICAgICAgIGNvbnN0IHVpbnQxNl90IGZ3ZF9zYW1wbGUgPSBsbWNz X2Rlcml2ZV9sdXRfc2FtcGxlKHNhbXBsZSwgbG1jcy0+cGl2b3QsCisgICAgICAgICAgICBpbnB1 dF9waXZvdCwgc2NhbGVfY29lZmYsIGlkeF95LCBtYXgpOworICAgICAgICBpZiAoYml0X2RlcHRo ID4gOCkKKyAgICAgICAgICAgICgodWludDE2X3QgKilsbWNzLT5md2RfbHV0KVtzYW1wbGVdID0g ZndkX3NhbXBsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG1jcy0+ZndkX2x1dFtzYW1w bGVdID0gZndkX3NhbXBsZTsKKworICAgIH0KKworICAgIC8vZGVyaXZlIGxtY3NfaW52X2x1dAor ICAgIGkgPSBsbWNzLT5taW5fYmluX2lkeDsKKyAgICBmb3IgKHVpbnQxNl90IHNhbXBsZSA9IDA7 IHNhbXBsZSA8IG1heDsgc2FtcGxlKyspIHsKKyAgICAgICAgdWludDE2X3QgaW52X3NhbXBsZTsK KyAgICAgICAgd2hpbGUgKHNhbXBsZSA+PSBsbWNzLT5waXZvdFtpICsgMV0gJiYgaSA8PSBsbWNz LT5tYXhfYmluX2lkeCkKKyAgICAgICAgICAgIGkrKzsKKworICAgICAgICBpbnZfc2FtcGxlID0g bG1jc19kZXJpdmVfbHV0X3NhbXBsZShzYW1wbGUsIGlucHV0X3Bpdm90LCBsbWNzLT5waXZvdCwK KyAgICAgICAgICAgIGludl9zY2FsZV9jb2VmZiwgaSwgbWF4KTsKKworICAgICAgICBpZiAoYml0 X2RlcHRoID4gOCkKKyAgICAgICAgICAgICgodWludDE2X3QgKilsbWNzLT5pbnZfbHV0KVtzYW1w bGVdID0gaW52X3NhbXBsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG1jcy0+aW52X2x1 dFtzYW1wbGVdID0gaW52X3NhbXBsZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBwaF9tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQoY29uc3QgSDI2NlJhd1NQUyAq c3BzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGgpCit7CisgICAgaWYgKHNwcy0+c3Bz X2FmZmluZV9lbmFibGVkX2ZsYWcpCisgICAgICAgIHJldHVybiA1IC0gc3BzLT5zcHNfZml2ZV9t aW51c19tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQ7CisgICAgcmV0dXJuIHNwcy0+c3BzX3Ni dG12cF9lbmFibGVkX2ZsYWcgJiYgcGgtPnBoX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWc7Cit9 CisKK3N0YXRpYyBpbnQgcGhfZGVyaXZlKFZWQ1BIICpwaCwgY29uc3QgSDI2NlJhd1NQUyAqc3Bz LCBjb25zdCBIMjY2UmF3UFBTICpwcHMsIGNvbnN0IGludCBwb2NfdGlkMCwgY29uc3QgaW50IGlz X2NsdnNzKQoreworICAgIHBoLT5tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQgPSBwaF9tYXhf bnVtX3N1YmJsb2NrX21lcmdlX2NhbmQoc3BzLCBwaC0+cik7CisKKyAgICBwaC0+cG9jID0gcGhf Y29tcHV0ZV9wb2MocGgtPnIsIHNwcywgcG9jX3RpZDAsIGlzX2NsdnNzKTsKKworICAgIGlmIChw cHMtPnBwc193cF9pbmZvX2luX3BoX2ZsYWcpCisgICAgICAgIHByZWRfd2VpZ2h0X3RhYmxlKCZw aC0+cHd0LCAmcGgtPnItPnBoX3ByZWRfd2VpZ2h0X3RhYmxlKTsKKworICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGRlY29kZV9waChWVkNGcmFtZVBhcmFtU2V0cyAqZnBzLCBjb25zdCBI MjY2UmF3UGljdHVyZUhlYWRlciAqcnBoLCB2b2lkICpycGhfcmVmLAorICAgIGNvbnN0IGludCBw b2NfdGlkMCwgY29uc3QgaW50IGlzX2NsdnNzKQoreworICAgIGludCByZXQ7CisgICAgVlZDUEgg KnBoID0gJmZwcy0+cGg7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqc3BzID0gZnBzLT5zcHMtPnI7 CisgICAgY29uc3QgSDI2NlJhd1BQUyAqcHBzID0gZnBzLT5wcHMtPnI7CisKKyAgICBwaC0+ciA9 IHJwaDsKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmcGgtPnJyZWYsIHJwaF9yZWYpOworICAg IHJldCA9IHBoX2Rlcml2ZShwaCwgc3BzLCBwcHMsIHBvY190aWQwLCBpc19jbHZzcyk7CisgICAg aWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBkZWNvZGVfZnJhbWVfcHMoVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgY29uc3Qg VlZDUGFyYW1TZXRzICpwcywKKyAgICBjb25zdCBDb2RlZEJpdHN0cmVhbUgyNjZDb250ZXh0ICpo MjY2LCBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19jbHZzcykKK3sKKyAgICBjb25z dCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGggPSBoMjY2LT5waDsKKyAgICBjb25zdCBIMjY2UmF3 UFBTICpycHBzOworICAgIGludCByZXQ7CisKKyAgICBpZiAoIXBoKQorICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHJwcHMgPSBoMjY2LT5wcHNbcGgtPnBoX3BpY19w YXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBpZiAoIXJwcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworCisgICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJmZwcy0+c3BzLCBwcy0+ c3BzX2xpc3RbcnBwcy0+cHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXSk7CisgICAgZmZfcmVmc3Ry dWN0X3JlcGxhY2UoJmZwcy0+cHBzLCBwcy0+cHBzX2xpc3RbcnBwcy0+cHBzX3BpY19wYXJhbWV0 ZXJfc2V0X2lkXSk7CisKKyAgICByZXQgPSBkZWNvZGVfcGgoZnBzLCBwaCwgaDI2Ni0+cGhfcmVm LCBwb2NfdGlkMCwgaXNfY2x2c3MpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgaWYgKHBoLT5waF9leHBsaWNpdF9zY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFn KQorICAgICAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmZnBzLT5zbCwgcHMtPnNjYWxpbmdfbGlz dFtwaC0+cGhfc2NhbGluZ19saXN0X2Fwc19pZF0pOworCisgICAgaWYgKHBoLT5waF9sbWNzX2Vu YWJsZWRfZmxhZykgeworICAgICAgICByZXQgPSBsbWNzX2Rlcml2ZV9sdXQoJmZwcy0+bG1jcywg cHMtPmxtY3NfbGlzdFtwaC0+cGhfbG1jc19hcHNfaWRdLCBmcHMtPnNwcy0+cik7CisgICAgICAg IGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGZwcy0+YWxmX2xpc3QpOyBpKyspCisgICAg ICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZmcHMtPmFsZl9saXN0W2ldLCBwcy0+YWxmX2xpc3Rb aV0pOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9yZWNvdmVyeV9m bGFnKFZWQ0NvbnRleHQgKnMpCit7CisgICAgaWYgKElTX0lEUihzKSkKKyAgICAgICAgcy0+bm9f b3V0cHV0X2JlZm9yZV9yZWNvdmVyeV9mbGFnID0gMDsKKyAgICBlbHNlIGlmIChJU19DUkEocykg fHwgSVNfR0RSKHMpKQorICAgICAgICBzLT5ub19vdXRwdXRfYmVmb3JlX3JlY292ZXJ5X2ZsYWcg PSBzLT5sYXN0X2VvczsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX3JlY292ZXJ5X3BvYyhWVkND b250ZXh0ICpzLCBjb25zdCBWVkNQSCAqcGgpCit7CisgICAgaWYgKHMtPm5vX291dHB1dF9iZWZv cmVfcmVjb3ZlcnlfZmxhZykgeworICAgICAgICBpZiAoSVNfR0RSKHMpKQorICAgICAgICAgICAg cy0+Z2RyX3JlY292ZXJ5X3BvaW50X3BvYyA9IHBoLT5wb2MgKyBwaC0+ci0+cGhfcmVjb3Zlcnlf cG9jX2NudDsKKyAgICAgICAgaWYgKCFHRFJfSVNfUkVDT1ZFUkVEKHMpICYmIHMtPmdkcl9yZWNv dmVyeV9wb2ludF9wb2MgPD0gcGgtPnBvYykKKyAgICAgICAgICAgIEdEUl9TRVRfUkVDT1ZFUkVE KHMpOworICAgIH0KK30KKworaW50IGZmX3Z2Y19kZWNvZGVfZnJhbWVfcHMoVlZDRnJhbWVQYXJh bVNldHMgKmZwcywgc3RydWN0IFZWQ0NvbnRleHQgKnMpCit7CisgICAgaW50IHJldCA9IDA7Cisg ICAgVlZDUGFyYW1TZXRzICpwcyAgICAgICAgICAgICAgICAgICAgICAgID0gJnMtPnBzOworICAg IGNvbnN0IENvZGVkQml0c3RyZWFtSDI2NkNvbnRleHQgKmgyNjYgICA9IHMtPmNiYy0+cHJpdl9k YXRhOworCisgICAgcmV0ID0gZGVjb2RlX3BzKHBzLCBoMjY2LCBzLT5hdmN0eCk7CisgICAgaWYg KHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBkZWNvZGVfcmVjb3ZlcnlfZmxh ZyhzKTsKKyAgICByZXQgPSBkZWNvZGVfZnJhbWVfcHMoZnBzLCBwcywgaDI2Niwgcy0+cG9jX3Rp ZDAsIElTX0NMVlNTKHMpKTsKKyAgICBkZWNvZGVfcmVjb3ZlcnlfcG9jKHMsICZmcHMtPnBoKTsK KyAgICByZXR1cm4gcmV0OworfQorCit2b2lkIGZmX3Z2Y19mcmFtZV9wc19mcmVlKFZWQ0ZyYW1l UGFyYW1TZXRzICpmcHMpCit7CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZmcHMtPnNwcyk7Cisg ICAgZmZfcmVmc3RydWN0X3VucmVmKCZmcHMtPnBwcyk7CisgICAgZmZfcmVmc3RydWN0X3VucmVm KCZmcHMtPnBoLnJyZWYpOworICAgIGZmX3JlZnN0cnVjdF91bnJlZigmZnBzLT5zbCk7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhmcHMtPmFsZl9saXN0KTsgaSsrKQor ICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmZwcy0+YWxmX2xpc3RbaV0pOworfQorCit2b2lk IGZmX3Z2Y19wc191bmluaXQoVlZDUGFyYW1TZXRzICpwcykKK3sKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5zY2FsaW5nX2xpc3QpOyBpKyspCisgICAgICAgIGZm X3JlZnN0cnVjdF91bnJlZigmcHMtPnNjYWxpbmdfbGlzdFtpXSk7CisgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhwcy0+bG1jc19saXN0KTsgaSsrKQorICAgICAgICBmZl9y ZWZzdHJ1Y3RfdW5yZWYoJnBzLT5sbWNzX2xpc3RbaV0pOworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgRkZfQVJSQVlfRUxFTVMocHMtPmFsZl9saXN0KTsgaSsrKQorICAgICAgICBmZl9yZWZzdHJ1 Y3RfdW5yZWYoJnBzLT5hbGZfbGlzdFtpXSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9B UlJBWV9FTEVNUyhwcy0+c3BzX2xpc3QpOyBpKyspCisgICAgICAgIGZmX3JlZnN0cnVjdF91bnJl ZigmcHMtPnNwc19saXN0W2ldKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VM RU1TKHBzLT5wcHNfbGlzdCk7IGkrKykKKyAgICAgICAgZmZfcmVmc3RydWN0X3VucmVmKCZwcy0+ cHBzX2xpc3RbaV0pOworfQorCitlbnVtIHsKKyAgICBBUFNfQUxGLAorICAgIEFQU19MTUNTLAor ICAgIEFQU19TQ0FMSU5HLAorfTsKKworc3RhdGljIHZvaWQgYWxmX2NvZWZmKGludDE2X3QgKmNv ZWZmLAorICAgIGNvbnN0IHVpbnQ4X3QgKmFicywgY29uc3QgdWludDhfdCAqc2lnbiwgY29uc3Qg aW50IHNpemUpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAg IGNvZWZmW2ldID0gKDEgLSAyICogc2lnbltpXSkgKiBhYnNbaV07Cit9CisKK3N0YXRpYyB2b2lk IGFsZl9jb2VmZl9jYyhpbnQxNl90ICpjb2VmZiwKKyAgICBjb25zdCB1aW50OF90ICptYXBwZWRf YWJzLCBjb25zdCB1aW50OF90ICpzaWduKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQUxG X05VTV9DT0VGRl9DQzsgaSsrKSB7CisgICAgICAgIGludCBjID0gbWFwcGVkX2Fic1tpXTsKKyAg ICAgICAgaWYgKGMpCisgICAgICAgICAgICBjID0gKDEgLSAyICogc2lnbltpXSkgKiAoMSA8PCAo YyAtIDEpKTsKKyAgICAgICAgY29lZmZbaV0gPSBjOworICAgIH0KK30KKworc3RhdGljIHZvaWQg YWxmX2x1bWEoVlZDQUxGICphbGYsIGNvbnN0IEgyNjZSYXdBUFMgKmFwcykKK3sKKyAgICBpZiAo IWFwcy0+YWxmX2x1bWFfZmlsdGVyX3NpZ25hbF9mbGFnKQorICAgICAgICByZXR1cm47CisKKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IEFMRl9OVU1fRklMVEVSU19MVU1BOyBpKyspIHsKKyAgICAg ICAgY29uc3QgaW50IHJlZiAgICAgICA9IGFwcy0+YWxmX2x1bWFfY29lZmZfZGVsdGFfaWR4W2ld OworICAgICAgICBjb25zdCB1aW50OF90ICphYnMgID0gYXBzLT5hbGZfbHVtYV9jb2VmZl9hYnNb cmVmXTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc2lnbiA9IGFwcy0+YWxmX2x1bWFfY29lZmZf c2lnbltyZWZdOworCisgICAgICAgIGFsZl9jb2VmZihhbGYtPmx1bWFfY29lZmZbaV0sIGFicywg c2lnbiwgQUxGX05VTV9DT0VGRl9MVU1BKTsKKyAgICAgICAgbWVtY3B5KGFsZi0+bHVtYV9jbGlw X2lkeFtpXSwgYXBzLT5hbGZfbHVtYV9jbGlwX2lkeFtyZWZdLAorICAgICAgICAgICAgc2l6ZW9m KGFsZi0+bHVtYV9jbGlwX2lkeFtpXSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2No cm9tYShWVkNBTEYgKmFsZiwgY29uc3QgSDI2NlJhd0FQUyAqYXBzKQoreworICAgIGlmICghYXBz LT5hbGZfY2hyb21hX2ZpbHRlcl9zaWduYWxfZmxhZykKKyAgICAgICAgcmV0dXJuOworCisgICAg YWxmLT5udW1fY2hyb21hX2ZpbHRlcnMgID0gYXBzLT5hbGZfY2hyb21hX251bV9hbHRfZmlsdGVy c19taW51czEgKyAxOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxmLT5udW1fY2hyb21hX2Zp bHRlcnM7IGkrKykgeworICAgICAgICBjb25zdCB1aW50OF90ICphYnMgID0gYXBzLT5hbGZfY2hy b21hX2NvZWZmX2Fic1tpXTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc2lnbiA9IGFwcy0+YWxm X2Nocm9tYV9jb2VmZl9zaWduW2ldOworCisgICAgICAgIGFsZl9jb2VmZihhbGYtPmNocm9tYV9j b2VmZltpXSwgYWJzLCBzaWduLCBBTEZfTlVNX0NPRUZGX0NIUk9NQSk7CisgICAgICAgIG1lbWNw eShhbGYtPmNocm9tYV9jbGlwX2lkeFtpXSwgYXBzLT5hbGZfY2hyb21hX2NsaXBfaWR4W2ldLAor ICAgICAgICAgICAgc2l6ZW9mKGFsZi0+Y2hyb21hX2NsaXBfaWR4W2ldKSk7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBhbGZfY2MoVlZDQUxGICphbGYsIGNvbnN0IEgyNjZSYXdBUFMgKmFwcykK K3sKKyAgICBjb25zdCB1aW50OF90ICgqYWJzW10pW0FMRl9OVU1fQ09FRkZfQ0NdID0KKyAgICAg ICAgeyBhcHMtPmFsZl9jY19jYl9tYXBwZWRfY29lZmZfYWJzLCBhcHMtPmFsZl9jY19jcl9tYXBw ZWRfY29lZmZfYWJzIH07CisgICAgY29uc3QgdWludDhfdCAoKnNpZ25bXSlbQUxGX05VTV9DT0VG Rl9DQ10gPQorICAgICAgICB7YXBzLT5hbGZfY2NfY2JfY29lZmZfc2lnbiwgYXBzLT5hbGZfY2Nf Y3JfY29lZmZfc2lnbiB9OworICAgIGNvbnN0IGludCBzaWduYWxlZFtdID0geyBhcHMtPmFsZl9j Y19jYl9maWx0ZXJfc2lnbmFsX2ZsYWcsIGFwcy0+YWxmX2NjX2NyX2ZpbHRlcl9zaWduYWxfZmxh Z307CisKKyAgICBhbGYtPm51bV9jY19maWx0ZXJzWzBdID0gYXBzLT5hbGZfY2NfY2JfZmlsdGVy c19zaWduYWxsZWRfbWludXMxICsgMTsKKyAgICBhbGYtPm51bV9jY19maWx0ZXJzWzFdID0gYXBz LT5hbGZfY2NfY3JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMTsKKworICAgIGZvciAoaW50 IGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7CisgICAgICAgIGlmIChzaWduYWxlZFtpZHhdKSB7 CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsZi0+bnVtX2NjX2ZpbHRlcnNbaWR4 XTsgaSsrKQorICAgICAgICAgICAgICAgIGFsZl9jb2VmZl9jYyhhbGYtPmNjX2NvZWZmW2lkeF1b aV0sIGFic1tpZHhdW2ldLCBzaWduW2lkeF1baV0pOworICAgICAgICB9CisgICAgfQorfQorCitz dGF0aWMgdm9pZCBhbGZfZGVyaXZlKFZWQ0FMRiAqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMp Cit7CisgICAgYWxmX2x1bWEoYWxmLCBhcHMpOworICAgIGFsZl9jaHJvbWEoYWxmLCBhcHMpOwor ICAgIGFsZl9jYyhhbGYsIGFwcyk7Cit9CisKK3N0YXRpYyBpbnQgYXBzX2RlY29kZV9hbGYoY29u c3QgVlZDQUxGICoqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgVlZDQUxGICph ID0gZmZfcmVmc3RydWN0X2FsbG9jeihzaXplb2YoKmEpKTsKKyAgICBpZiAoIWEpCisgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBhbGZfZGVyaXZlKGEsIGFwcyk7CisgICAg ZmZfcmVmc3RydWN0X3JlcGxhY2UoYWxmLCBhKTsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmEp OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfbHVtYV9saXN0KGNvbnN0IGlu dCBpZCkKK3sKKyAgICByZXR1cm4gaWQgJSBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgPT0gU0xfU1RB UlRfNHg0IHx8IGlkID09IFNMX1NUQVJUXzY0eDY0ICsgMTsKK30KKworc3RhdGljIGludCBkZXJp dmVfbWF0cml4X3NpemUoY29uc3QgaW50IGlkKQoreworICAgIHJldHVybiBpZCA8IFNMX1NUQVJU XzR4NCA/IDIgOiAoaWQgPCBTTF9TVEFSVF84eDggPyA0IDogOCk7Cit9CisKKy8vIDcuNC4zLjIw IFNjYWxpbmcgbGlzdCBkYXRhIHNlbWFudGljcworc3RhdGljIHZvaWQgc2NhbGluZ19kZXJpdmUo VlZDU2NhbGluZ0xpc3QgKnNsLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgZm9yIChp bnQgaWQgPSAwOyBpZCA8IFNMX01BWF9JRDsgaWQrKykgeworICAgICAgICBjb25zdCBpbnQgbWF0 cml4X3NpemUgICA9IGRlcml2ZV9tYXRyaXhfc2l6ZShpZCk7CisgICAgICAgIGNvbnN0IGludCBs b2cyX3NpemUgICAgID0gbG9nMihtYXRyaXhfc2l6ZSk7CisgICAgICAgIGNvbnN0IGludCBsaXN0 X3NpemUgICAgID0gbWF0cml4X3NpemUgKiBtYXRyaXhfc2l6ZTsKKyAgICAgICAgaW50IGNvZWZm W1NMX01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0laRV07CisgICAgICAgIGNvbnN0 IHVpbnQ4X3QgKnByZWQ7CisgICAgICAgIGNvbnN0IGludCAqc2NhbGluZ19saXN0OworICAgICAg ICBpbnQgZGMgPSAwOworCisgICAgICAgIGlmIChhcHMtPmFwc19jaHJvbWFfcHJlc2VudF9mbGFn IHx8IGlzX2x1bWFfbGlzdChpZCkpIHsKKyAgICAgICAgICAgIGlmICghYXBzLT5zY2FsaW5nX2xp c3RfY29weV9tb2RlX2ZsYWdbaWRdKSB7CisgICAgICAgICAgICAgICAgaW50IG5leHRfY29lZiA9 IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoaWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAg ICAgICAgICAgICAgIGRjID0gbmV4dF9jb2VmID0gYXBzLT5zY2FsaW5nX2xpc3RfZGNfY29lZltp ZCAtIFNMX1NUQVJUXzE2eDE2XTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbGlzdF9zaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHggPSBm Zl92dmNfZGlhZ19zY2FuX3hbM11bM11baV07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu dCB5ID0gZmZfdnZjX2RpYWdfc2Nhbl95WzNdWzNdW2ldOworCisgICAgICAgICAgICAgICAgICAg IGlmICghKGlkID49IFNMX1NUQVJUXzY0eDY0ICYmIHggPj0gNCAmJiB5ID49IDQpKQorICAgICAg ICAgICAgICAgICAgICAgICAgbmV4dF9jb2VmICs9IGFwcy0+c2NhbGluZ19saXN0X2RlbHRhX2Nv ZWZbaWRdW2ldOworICAgICAgICAgICAgICAgICAgICBjb2VmZltpXSA9IG5leHRfY29lZjsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL2Rj CisgICAgICAgIGlmIChpZCA+PSBTTF9TVEFSVF8xNngxNikgeworICAgICAgICAgICAgaWYgKCFh cHMtPnNjYWxpbmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+c2NhbGluZ19saXN0 X3ByZWRfbW9kZV9mbGFnW2lkXSkgeworICAgICAgICAgICAgICAgIHNsLT5zY2FsaW5nX21hdHJp eF9kY19yZWNbaWQgLSBTTF9TVEFSVF8xNngxNl0gPSA4OworICAgICAgICAgICAgfSBlbHNlIGlm ICghYXBzLT5zY2FsaW5nX2xpc3RfcHJlZF9pZF9kZWx0YVtpZF0pIHsKKyAgICAgICAgICAgICAg ICBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZdID0gMTY7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCByZWZfaWQgPSBp ZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdOworICAgICAgICAgICAgICAg IGlmIChyZWZfaWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAgICAgICAgICAgICAgIGRjICs9 IHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNbcmVmX2lkIC0gU0xfU1RBUlRfMTZ4MTZdOworICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGMgKz0gc2wtPnNjYWxpbmdf bWF0cml4X3JlY1tyZWZfaWRdWzBdOworICAgICAgICAgICAgICAgIHNsLT5zY2FsaW5nX21hdHJp eF9kY19yZWNbaWQgLSBTTF9TVEFSVF8xNngxNl0gPSBkYyAmIDI1NTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorCisgICAgICAgIC8vYWMKKyAgICAgICAgc2NhbGluZ19saXN0ID0gYXBzLT5z Y2FsaW5nX2xpc3RfY29weV9tb2RlX2ZsYWdbaWRdID8gZmZfdnZjX3NjYWxpbmdfbGlzdDAgOiBj b2VmZjsKKyAgICAgICAgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0g JiYgIWFwcy0+c2NhbGluZ19saXN0X3ByZWRfbW9kZV9mbGFnW2lkXSkKKyAgICAgICAgICAgIHBy ZWQgPSBmZl92dmNfc2NhbGluZ19wcmVkXzg7CisgICAgICAgIGVsc2UgaWYgKCFhcHMtPnNjYWxp bmdfbGlzdF9wcmVkX2lkX2RlbHRhW2lkXSkKKyAgICAgICAgICAgIHByZWQgPSBmZl92dmNfc2Nh bGluZ19wcmVkXzE2OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmVkID0gc2wtPnNjYWxp bmdfbWF0cml4X3JlY1tpZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdXTsK KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0X3NpemU7IGkrKykgeworICAgICAgICAg ICAgY29uc3QgaW50IHggPSBmZl92dmNfZGlhZ19zY2FuX3hbbG9nMl9zaXplXVtsb2cyX3NpemVd W2ldOworICAgICAgICAgICAgY29uc3QgaW50IHkgPSBmZl92dmNfZGlhZ19zY2FuX3lbbG9nMl9z aXplXVtsb2cyX3NpemVdW2ldOworICAgICAgICAgICAgY29uc3QgaW50IG9mZiA9IHkgKiBtYXRy aXhfc2l6ZSArIHg7CisgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRyaXhfcmVjW2lkXVtvZmZd ID0gKHByZWRbb2ZmXSArIHNjYWxpbmdfbGlzdFtpXSkgJiAyNTU7CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyBpbnQgYXBzX2RlY29kZV9zY2FsaW5nKGNvbnN0IFZWQ1NjYWxpbmdMaXN0 ICoqc2NhbGluZywgY29uc3QgSDI2NlJhd0FQUyAqYXBzKQoreworICAgIFZWQ1NjYWxpbmdMaXN0 ICpzbCA9IGZmX3JlZnN0cnVjdF9hbGxvY3ooc2l6ZW9mKCpzbCkpOworICAgIGlmICghc2wpCisg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBzY2FsaW5nX2Rlcml2ZShzbCwg YXBzKTsKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZShzY2FsaW5nLCBzbCk7CisgICAgZmZfcmVm c3RydWN0X3VucmVmKCZzbCk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3Z2Y19kZWNv ZGVfYXBzKFZWQ1BhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCkK K3sKKyAgICBjb25zdCBIMjY2UmF3QVBTICphcHMgPSB1bml0LT5jb250ZW50X3JlZjsKKyAgICBp bnQgcmV0ICAgICAgICAgICAgICAgPSAwOworCisgICAgaWYgKCFhcHMpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgc3dpdGNoIChhcHMtPmFwc19wYXJhbXNfdHlw ZSkgeworICAgICAgICBjYXNlIEFQU19BTEY6CisgICAgICAgICAgICByZXQgPSBhcHNfZGVjb2Rl X2FsZigmcHMtPmFsZl9saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0s IGFwcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUFNfTE1DUzoKKyAgICAg ICAgICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZwcy0+bG1jc19saXN0W2Fwcy0+YXBzX2FkYXB0 YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFwcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSBBUFNfU0NBTElORzoKKyAgICAgICAgICAgIHJldCA9IGFwc19kZWNvZGVfc2NhbGlu ZygmcHMtPnNjYWxpbmdfbGlzdFthcHMtPmFwc19hZGFwdGF0aW9uX3BhcmFtZXRlcl9zZXRfaWRd LCBhcHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgc2hfc2xpY2VfYWRkcmVzcyhWVkNTSCAqc2gsIGNvbnN0IEgyNjZSYXdT UFMgKnNwcywgY29uc3QgVlZDUFBTICpwcHMpCit7CisgICAgY29uc3QgaW50IHNsaWNlX2FkZHJl c3MgICAgID0gc2gtPnItPnNoX3NsaWNlX2FkZHJlc3M7CisKKyAgICBpZiAocHBzLT5yLT5wcHNf cmVjdF9zbGljZV9mbGFnKSB7CisgICAgICAgIGludCBwaWNfbGV2ZWxfc2xpY2VfaWR4ID0gc2xp Y2VfYWRkcmVzczsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaC0+ci0+Y3Vycl9zdWJw aWNfaWR4OyBqKyspCisgICAgICAgICAgICBwaWNfbGV2ZWxfc2xpY2VfaWR4ICs9IHBwcy0+ci0+ bnVtX3NsaWNlc19pbl9zdWJwaWNbal07CisgICAgICAgIHNoLT5jdGJfYWRkcl9pbl9jdXJyX3Ns aWNlID0gcHBzLT5jdGJfYWRkcl9pbl9zbGljZSArIHBwcy0+c2xpY2Vfc3RhcnRfb2Zmc2V0W3Bp Y19sZXZlbF9zbGljZV9pZHhdOworICAgICAgICBzaC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZSA9 IHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbcGljX2xldmVsX3NsaWNlX2lkeF07CisgICAgfSBlbHNl IHsKKyAgICAgICAgaW50IHRpbGVfeCA9IHNsaWNlX2FkZHJlc3MgJSBwcHMtPnItPm51bV90aWxl X2NvbHVtbnM7CisgICAgICAgIGludCB0aWxlX3kgPSBzbGljZV9hZGRyZXNzIC8gcHBzLT5yLT5u dW1fdGlsZV9jb2x1bW5zOworICAgICAgICBjb25zdCBpbnQgc2xpY2Vfc3RhcnRfY3RiID0gcHBz LT5yb3dfYmRbdGlsZV95XSAqIHBwcy0+Y3RiX3dpZHRoICsgcHBzLT5jb2xfYmRbdGlsZV94XSAq IHBwcy0+ci0+cm93X2hlaWdodF92YWxbdGlsZV95XTsKKworICAgICAgICBzaC0+Y3RiX2FkZHJf aW5fY3Vycl9zbGljZSA9IHBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UgKyBzbGljZV9zdGFydF9jdGI7 CisKKyAgICAgICAgc2gtPm51bV9jdHVzX2luX2N1cnJfc2xpY2UgPSAwOworICAgICAgICBmb3Ig KGludCB0aWxlX2lkeCA9IHNsaWNlX2FkZHJlc3M7IHRpbGVfaWR4IDw9IHNsaWNlX2FkZHJlc3Mg KyBzaC0+ci0+c2hfbnVtX3RpbGVzX2luX3NsaWNlX21pbnVzMTsgdGlsZV9pZHgrKykgeworICAg ICAgICAgICAgdGlsZV94ID0gdGlsZV9pZHggJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7Cisg ICAgICAgICAgICB0aWxlX3kgPSB0aWxlX2lkeCAvIHBwcy0+ci0+bnVtX3RpbGVfY29sdW1uczsK KyAgICAgICAgICAgIHNoLT5udW1fY3R1c19pbl9jdXJyX3NsaWNlICs9IHBwcy0+ci0+cm93X2hl aWdodF92YWxbdGlsZV95XSAqIHBwcy0+ci0+Y29sX3dpZHRoX3ZhbFt0aWxlX3hdOworICAgICAg ICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzaF9xcF95KFZWQ1NIICpzaCwgY29uc3QgSDI2 NlJhd1BQUyAqcHBzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGgpCit7CisgICAgY29u c3QgaW50IGluaXRfcXAgPSBwcHMtPnBwc19pbml0X3FwX21pbnVzMjYgKyAyNjsKKworICAgIGlm ICghcHBzLT5wcHNfcXBfZGVsdGFfaW5mb19pbl9waF9mbGFnKQorICAgICAgICBzaC0+c2xpY2Vf cXBfeSA9IGluaXRfcXAgKyBzaC0+ci0+c2hfcXBfZGVsdGE7CisgICAgZWxzZQorICAgICAgICBz aC0+c2xpY2VfcXBfeSA9IGluaXRfcXAgKyBwaC0+cGhfcXBfZGVsdGE7Cit9CisKK3N0YXRpYyB2 b2lkIHNoX2ludGVyKFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2 UmF3UFBTICpwcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBzaC0+ cjsKKworICAgIGlmICghcHBzLT5wcHNfd3BfaW5mb19pbl9waF9mbGFnICYmCisgICAgICAgICgo cHBzLT5wcHNfd2VpZ2h0ZWRfcHJlZF9mbGFnICYmIElTX1AocnNoKSkgfHwKKyAgICAgICAgIChw cHMtPnBwc193ZWlnaHRlZF9iaXByZWRfZmxhZyAmJiBJU19CKHJzaCkpKSkKKyAgICAgICAgcHJl ZF93ZWlnaHRfdGFibGUoJnNoLT5wd3QsICZyc2gtPnNoX3ByZWRfd2VpZ2h0X3RhYmxlKTsKK30K Kworc3RhdGljIHZvaWQgc2hfZGVibG9ja19vZmZzZXRzKFZWQ1NIICpzaCkKK3sKKyAgICBjb25z dCBIMjY2UmF3U2xpY2VIZWFkZXIgKnIgPSBzaC0+cjsKKworICAgIGlmICghci0+c2hfZGVibG9j a2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZykgeworICAgICAgICBzaC0+ZGVibG9jay5iZXRhX29m ZnNldFtMVU1BXSA9IHItPnNoX2x1bWFfYmV0YV9vZmZzZXRfZGl2MiA8PCAxOworICAgICAgICBz aC0+ZGVibG9jay50Y19vZmZzZXRbTFVNQV0gICA9IHItPnNoX2x1bWFfdGNfb2Zmc2V0X2RpdjIg PDwgMTsKKyAgICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZzZXRbQ0JdICAgPSByLT5zaF9jYl9i ZXRhX29mZnNldF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5kZWJsb2NrLnRjX29mZnNldFtDQl0g ICAgID0gci0+c2hfY2JfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAgICAgICAgc2gtPmRlYmxvY2su YmV0YV9vZmZzZXRbQ1JdICAgPSByLT5zaF9jcl9iZXRhX29mZnNldF9kaXYyIDw8IDE7CisgICAg ICAgIHNoLT5kZWJsb2NrLnRjX29mZnNldFtDUl0gICAgID0gci0+c2hfY3JfdGNfb2Zmc2V0X2Rp djIgPDwgMTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNoX3BhcnRpdGlvbl9jb25zdHJhaW50 cyhWVkNTSCAqc2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywgY29uc3QgSDI2NlJhd1BpY3R1cmVI ZWFkZXIgKnBoKQoreworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMl9zaXplX3kgPSBzcHMtPnNw c19sb2cyX21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMiArIDI7CisgICAgaW50IG1p bl9xdF9sb2cyX3NpemVfeVsyXTsKKworICAgIGlmIChJU19JKHNoLT5yKSkgeworICAgICAgICBt aW5fcXRfbG9nMl9zaXplX3lbTFVNQV0gICAgICAgID0gKG1pbl9jYl9sb2cyX3NpemVfeSArIHBo LT5waF9sb2cyX2RpZmZfbWluX3F0X21pbl9jYl9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAg bWluX3F0X2xvZzJfc2l6ZV95W0NIUk9NQV0gICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBw aC0+cGhfbG9nMl9kaWZmX21pbl9xdF9taW5fY2JfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAg ICAgICBzaC0+bWF4X2J0X3NpemVbTFVNQV0gICAgICAgICAgID0gMSA8PCAobWluX3F0X2xvZzJf c2l6ZV95W0xVTUFdICArIHBoLT5waF9sb2cyX2RpZmZfbWF4X2J0X21pbl9xdF9pbnRyYV9zbGlj ZV9sdW1hKTsKKyAgICAgICAgc2gtPm1heF9idF9zaXplW0NIUk9NQV0gICAgICAgICA9IDEgPDwg KG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5f cXRfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+bWF4X3R0X3NpemVbTFVNQV0g ICAgICAgICAgID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W0xVTUFdICArIHBoLT5waF9sb2cy X2RpZmZfbWF4X3R0X21pbl9xdF9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgc2gtPm1heF90 dF9zaXplW0NIUk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFd KyBwaC0+cGhfbG9nMl9kaWZmX21heF90dF9taW5fcXRfaW50cmFfc2xpY2VfY2hyb21hKTsKKwor ICAgICAgICBzaC0+bWF4X210dF9kZXB0aFtMVU1BXSAgICAgICAgID0gcGgtPnBoX21heF9tdHRf aGllcmFyY2h5X2RlcHRoX2ludHJhX3NsaWNlX2x1bWE7CisgICAgICAgIHNoLT5tYXhfbXR0X2Rl cHRoW0NIUk9NQV0gICAgICAgPSBwaC0+cGhfbWF4X210dF9oaWVyYXJjaHlfZGVwdGhfaW50cmFf c2xpY2VfY2hyb21hOworCisgICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAg PSBwaC0+cGhfY3VfcXBfZGVsdGFfc3ViZGl2X2ludHJhX3NsaWNlOworICAgICAgICBzaC0+Y3Vf Y2hyb21hX3FwX29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3Vi ZGl2X2ludHJhX3NsaWNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBMVU1B OyBpIDw9IENIUk9NQTsgaSsrKSAgeworICAgICAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95W2ld ICAgICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9xdF9t aW5fY2JfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9idF9zaXplW2ldICAgICAg ICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21h eF9idF9taW5fcXRfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF90dF9zaXplW2ld ICAgICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9k aWZmX21heF90dF9taW5fcXRfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9tdHRf ZGVwdGhbaV0gICAgICAgICA9IHBoLT5waF9tYXhfbXR0X2hpZXJhcmNoeV9kZXB0aF9pbnRlcl9z bGljZTsKKyAgICAgICAgfQorCisgICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAg ICAgPSBwaC0+cGhfY3VfcXBfZGVsdGFfc3ViZGl2X2ludGVyX3NsaWNlOworICAgICAgICBzaC0+ Y3VfY2hyb21hX3FwX29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRf c3ViZGl2X2ludGVyX3NsaWNlOworICAgIH0KKworICAgIHNoLT5taW5fcXRfc2l6ZVtMVU1BXSAg ID0gMSA8PCBtaW5fcXRfbG9nMl9zaXplX3lbTFVNQV07CisgICAgc2gtPm1pbl9xdF9zaXplW0NI Uk9NQV0gPSAxIDw8IG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdOworfQorCitzdGF0aWMgdm9p ZCBzaF9lbnRyeV9wb2ludHMoVlZDU0ggKnNoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0 IFZWQ1BQUyAqcHBzKQoreworICAgIGlmIChzcHMtPnNwc19lbnRyeV9wb2ludF9vZmZzZXRzX3By ZXNlbnRfZmxhZykgeworICAgICAgICBmb3IgKGludCBpID0gMSwgaiA9IDA7IGkgPCBzaC0+bnVt X2N0dXNfaW5fY3Vycl9zbGljZTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlX2N0 Yl9hZGRyX3ggPSBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9zbGljZVtpIC0gMV0gJSBwcHMtPmN0Yl93 aWR0aDsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcmVfY3RiX2FkZHJfeSA9IHNoLT5jdGJfYWRk cl9pbl9jdXJyX3NsaWNlW2kgLSAxXSAvIHBwcy0+Y3RiX3dpZHRoOworICAgICAgICAgICAgY29u c3QgaW50IGN0Yl9hZGRyX3ggICAgID0gc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2VbaV0gJSBw cHMtPmN0Yl93aWR0aDsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdGJfYWRkcl95ICAgICA9IHNo LT5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlW2ldIC8gcHBzLT5jdGJfd2lkdGg7CisgICAgICAgICAg ICBpZiAocHBzLT5jdGJfdG9fcm93X2JkW2N0Yl9hZGRyX3ldICE9IHBwcy0+Y3RiX3RvX3Jvd19i ZFtwcmVfY3RiX2FkZHJfeV0gfHwKKyAgICAgICAgICAgICAgICBwcHMtPmN0Yl90b19jb2xfYmRb Y3RiX2FkZHJfeF0gIT0gcHBzLT5jdGJfdG9fY29sX2JkW3ByZV9jdGJfYWRkcl94XSB8fAorICAg ICAgICAgICAgICAgIChjdGJfYWRkcl95ICE9IHByZV9jdGJfYWRkcl95ICYmIHNwcy0+c3BzX2Vu dHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnKSkgeworICAgICAgICAgICAgICAgIHNoLT5l bnRyeV9wb2ludF9zdGFydF9jdHVbaisrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9Cit9CisKK3N0YXRpYyBpbnQgc2hfZGVyaXZlKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJh bWVQYXJhbVNldHMgKmZwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpzcHMgICAgICAgICAg ID0gZnBzLT5zcHMtPnI7CisgICAgY29uc3QgSDI2NlJhd1BQUyAqcHBzICAgICAgICAgICA9IGZw cy0+cHBzLT5yOworICAgIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCAgPSBmcHMtPnBo LnI7CisKKyAgICBzaF9zbGljZV9hZGRyZXNzKHNoLCBzcHMsIGZwcy0+cHBzKTsKKyAgICBzaF9p bnRlcihzaCwgc3BzLCBwcHMpOworICAgIHNoX3FwX3koc2gsIHBwcywgcGgpOworICAgIHNoX2Rl YmxvY2tfb2Zmc2V0cyhzaCk7CisgICAgc2hfcGFydGl0aW9uX2NvbnN0cmFpbnRzKHNoLCBzcHMs IHBoKTsKKyAgICBzaF9lbnRyeV9wb2ludHMoc2gsIHNwcywgZnBzLT5wcHMpOworCisgICAgcmV0 dXJuIDA7Cit9CisKK2ludCBmZl92dmNfZGVjb2RlX3NoKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJh bWVQYXJhbVNldHMgKmZwcywgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0ICp1bml0KQoreworICAg IGludCByZXQ7CisKKyAgICBpZiAoIWZwcy0+c3BzIHx8ICFmcHMtPnBwcykKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmc2gt PnIsIHVuaXQtPmNvbnRlbnRfcmVmKTsKKworICAgIHJldCA9IHNoX2Rlcml2ZShzaCwgZnBzKTsK KyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX3BzLmggYi9saWJhdmNvZGVjL3Z2Yy92 dmNfcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lZGU0ZTc0MDA5 Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmgKQEAgLTAsMCArMSwy NjMgQEAKKy8qCisgKiBWVkMgcGFyYW1ldGVyIHNldCBwYXJzZXIKKyAqCisgKiBDb3B5cmlnaHQg KEMpIDIwMjMgTnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoK KyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisK KyNpZm5kZWYgQVZDT0RFQ19WVkNfVlZDX1BTX0gKKyNkZWZpbmUgQVZDT0RFQ19WVkNfVlZDX1BT X0gKKworI2luY2x1ZGUgImxpYmF2Y29kZWMvY2JzX2gyNjYuaCIKKyNpbmNsdWRlICJsaWJhdmNv ZGVjL3Z2Yy5oIgorCisjZGVmaW5lIElTX0lEUihzKSAgKChzKS0+dmNsX3VuaXRfdHlwZSA9PSBW VkNfSURSX1dfUkFETCB8fCAocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX0lEUl9OX0xQKQorI2Rl ZmluZSBJU19DUkEocykgICgocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX0NSQV9OVVQpCisjZGVm aW5lIElTX0lSQVAocykgKElTX0lEUihzKSB8fCBJU19DUkEocykpCisjZGVmaW5lIElTX0dEUihz KSAgKChzKS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfR0RSX05VVCkKKyNkZWZpbmUgSVNfQ1ZTUyhz KSAoSVNfSVJBUChzKXx8IElTX0dEUihzKSkKKyNkZWZpbmUgSVNfQ0xWU1MocykgKElTX0NWU1Mo cykgJiYgcy0+bm9fb3V0cHV0X2JlZm9yZV9yZWNvdmVyeV9mbGFnKQorI2RlZmluZSBJU19SQVNM KHMpICgocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX1JBU0xfTlVUKQorI2RlZmluZSBJU19SQURM KHMpICgocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX1JBRExfTlVUKQorCisjZGVmaW5lIElTX0ko cnNoKSAoKHJzaCktPnNoX3NsaWNlX3R5cGUgPT0gVlZDX1NMSUNFX1RZUEVfSSkKKyNkZWZpbmUg SVNfUChyc2gpICgocnNoKS0+c2hfc2xpY2VfdHlwZSA9PSBWVkNfU0xJQ0VfVFlQRV9QKQorI2Rl ZmluZSBJU19CKHJzaCkgKChyc2gpLT5zaF9zbGljZV90eXBlID09IFZWQ19TTElDRV9UWVBFX0Ip CisKKyNkZWZpbmUgSU5WX1BPQyBJTlRfTUlOCisjZGVmaW5lIEdEUl9JU19SRUNPVkVSRUQocykg IChzLT5nZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID09IElOVl9QT0MpCisjZGVmaW5lIEdEUl9TRVRf UkVDT1ZFUkVEKHMpIChzLT5nZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID0gIElOVl9QT0MpCisKKyNk ZWZpbmUgTE1DU19NQVhfQklUX0RFUFRIICAxMgorI2RlZmluZSBMTUNTX01BWF9MVVRfU0laRSAg ICgxIDw8IExNQ1NfTUFYX0JJVF9ERVBUSCkKKyNkZWZpbmUgTE1DU19NQVhfQklOX1NJWkUgICAx NgorI2RlZmluZSBMQURGX01BWF9JTlRFUlZBTCAgIDUKKworZW51bSB7CisgICAgQ0hST01BX0ZP Uk1BVF9NT05PLAorICAgIENIUk9NQV9GT1JNQVRfNDIwLAorICAgIENIUk9NQV9GT1JNQVRfNDIy LAorICAgIENIUk9NQV9GT1JNQVRfNDQ0LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDU1BTIHsK KyAgICBjb25zdCBIMjY2UmF3U1BTICpyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisKKyAgICAvL2Rlcml2ZWQgdmFs dWVzCisgICAgdWludDE2X3QgICAgd2lkdGg7CisgICAgdWludDE2X3QgICAgaGVpZ2h0OworICAg IHVpbnQ4X3QgICAgIGhzaGlmdFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIHVpbnQ4X3Qg ICAgIHZzaGlmdFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIHVpbnQzMl90ICAgIG1heF9w aWNfb3JkZXJfY250X2xzYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4UGlj T3JkZXJDbnRMc2IKKworICAgIHVpbnQ4X3QgICAgIHBpeGVsX3NoaWZ0OworICAgIGVudW0gQVZQ aXhlbEZvcm1hdCBwaXhfZm10OworCisgICAgdWludDhfdCAgICAgYml0X2RlcHRoOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQml0RGVwdGgKKyAgICB1aW50 OF90ICAgICBxcF9iZF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCBRcEJkT2Zmc2V0CisgICAgdWludDhfdCAgICAgY3RiX2xvZzJfc2l6ZV95OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3RiTG9nMlNpemVZCisgICAgdWlu dDhfdCAgICAgY3RiX3NpemVfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vLzwgQ3RiU2l6ZVkKKyAgICB1aW50OF90ICAgICBtaW5fY2JfbG9nMl9zaXplX3k7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNaW5DYkxvZzJTaXplWQorICAgIHVp bnQ4X3QgICAgIG1pbl9jYl9zaXplX3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88IE1pbkNiU2l6ZVkKKyAgICB1aW50OF90ICAgICBtYXhfdGJfc2l6ZV95OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXhUYlNpemVZCisgICAgdWlu dDhfdCAgICAgbWF4X3RzX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vLzwgTWF4VHNTaXplCisgICAgdWludDhfdCAgICAgbWF4X251bV9tZXJnZV9jYW5kOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TnVtTWVyZ2VDYW5kCisgICAg dWludDhfdCAgICAgbWF4X251bV9pYmNfbWVyZ2VfY2FuZDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgTWF4TnVtSWJjTWVyZ2VDYW5kCisgICAgdWludDhfdCAgICAgbWF4X251bV9n cG1fbWVyZ2VfY2FuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TnVtR3Bt TWVyZ2VDYW5kCisgICAgdWludDhfdCAgICAgbnVtX2xhZGZfaW50ZXJ2YWxzOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgc3BzX251bV9sYWRmX2ludGVydmFsc19taW51czIg KyAyOworICAgIHVpbnQzMl90ICAgIGxhZGZfaW50ZXJ2YWxfbG93ZXJfYm91bmRbTEFERl9NQVhf SU5URVJWQUxdOyAgICAgICAvLy88IFNwc0xhZGZJbnRlcnZhbExvd2VyQm91bmRbXQorICAgIHVp bnQ4X3QgICAgIGxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWw7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88IHNwc19sb2cyX3BhcmFsbGVsX21lcmdlX2xldmVsX21pbnVzMiArIDI7CisgICAg dWludDhfdCAgICAgbG9nMl90cmFuc2Zvcm1fcmFuZ2U7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgTG9nMlRyYW5zZm9ybVJhbmdlCisgICAgaW50OF90ICAgICAgY2hyb21hX3Fw X3RhYmxlWzNdW1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxFXTsgICAgIC8vLzwgQ2hyb21hUXBU YWJsZQorfSBWVkNTUFM7CisKK3R5cGVkZWYgc3RydWN0IERCUGFyYW1zIHsKKyAgICBpbnQ4X3Qg YmV0YV9vZmZzZXRbVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAgICBpbnQ4X3QgdGNfb2Zmc2V0 W1ZWQ19NQVhfU0FNUExFX0FSUkFZU107Cit9IERCUGFyYW1zOworCit0eXBlZGVmIHN0cnVjdCBW VkNQUFMgeworICAgIGNvbnN0IEgyNjZSYXdQUFMgKnI7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKKworICAgIC8vZGVy aXZlZCB2YWx1ZTsKKyAgICBpbnQ4X3QgICBjaHJvbWFfcXBfb2Zmc2V0WzNdOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBwcHNfY2JfcXBfb2Zmc2V0LCBwcHNfY3JfcXBf b2Zmc2V0LCBwcHNfam9pbnRfY2Jjcl9xcF9vZmZzZXRfdmFsdWUKKyAgICBpbnQ4X3QgICBjaHJv bWFfcXBfb2Zmc2V0X2xpc3RbNl1bM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBw cHNfY2JfcXBfb2Zmc2V0X2xpc3QsIHBwc19jcl9xcF9vZmZzZXRfbGlzdCwgcHBzX2pvaW50X2Ni Y3JfcXBfb2Zmc2V0X2xpc3QKKworICAgIHVpbnQxNl90IHdpZHRoOworICAgIHVpbnQxNl90IGhl aWdodDsKKworICAgIHVpbnQxNl90IHNsaWNlX3N0YXJ0X29mZnNldFtWVkNfTUFYX1NMSUNFU107 CisgICAgdWludDE2X3QgbnVtX2N0dXNfaW5fc2xpY2UgW1ZWQ19NQVhfU0xJQ0VTXTsKKworICAg IHVpbnQxNl90IG1pbl9jYl93aWR0aDsKKyAgICB1aW50MTZfdCBtaW5fY2JfaGVpZ2h0OworCisg ICAgdWludDE2X3QgY3RiX3dpZHRoOworICAgIHVpbnQxNl90IGN0Yl9oZWlnaHQ7CisgICAgdWlu dDMyX3QgY3RiX2NvdW50OworCisgICAgdWludDE2X3QgbWluX3B1X3dpZHRoOworICAgIHVpbnQx Nl90IG1pbl9wdV9oZWlnaHQ7CisgICAgdWludDE2X3QgbWluX3R1X3dpZHRoOworICAgIHVpbnQx Nl90IG1pbl90dV9oZWlnaHQ7CisKKyAgICB1aW50MzJfdCAqY3RiX2FkZHJfaW5fc2xpY2U7ICAg ICAgICAgICAgLy8vPCBDdGJBZGRySW5DdXJyU2xpY2UgZm9yIGVudGlyZSBwaWN0dXJlCisgICAg dWludDE2X3QgKmNvbF9iZDsKKyAgICB1aW50MTZfdCAqcm93X2JkOworICAgIHVpbnQxNl90ICpj dGJfdG9fY29sX2JkOworICAgIHVpbnQxNl90ICpjdGJfdG9fcm93X2JkOworCisgICAgdWludDE2 X3Qgd2lkdGgzMjsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgd2lkdGggIGluIDMyIHBpeGVs cworICAgIHVpbnQxNl90IGhlaWdodDMyOyAgICAgICAgICAgICAgICAgICAgICAvLy88IGhlaWdo dCBpbiAzMiBwaXhlbHMKKyAgICB1aW50MTZfdCB3aWR0aDY0OyAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCB3aWR0aCAgaW4gNjQgcGl4ZWxzCisgICAgdWludDE2X3QgaGVpZ2h0NjQ7ICAgICAg ICAgICAgICAgICAgICAgIC8vLzwgaGVpZ2h0IGluIDY0IHBpeGVscworCisgICAgdWludDE2X3Qg cmVmX3dyYXBhcm91bmRfb2Zmc2V0OyAgICAgICAgIC8vLzwgUHBzUmVmV3JhcGFyb3VuZE9mZnNl dAorCit9IFZWQ1BQUzsKKworI2RlZmluZSBNQVhfV0VJR0hUUyAxNQordHlwZWRlZiBzdHJ1Y3Qg UHJlZFdlaWdodFRhYmxlIHsKKyAgICB1aW50OF90IGxvZzJfZGVub21bMl07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IGx1bWFfbG9nMl93ZWlnaHRfZGVub20sIENo cm9tYUxvZzJXZWlnaHREZW5vbQorCisgICAgdWludDhfdCBuYl93ZWlnaHRzWzJdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBudW1fbDBfd2VpZ2h0cywgbnVtX2wx X3dlaWdodHMKKyAgICB1aW50OF90IHdlaWdodF9mbGFnWzJdWzJdW01BWF9XRUlHSFRTXTsgICAg ICAgICAgICAgICAgICAgICAvLy88IGx1bWFfd2VpZ2h0X2wwX2ZsYWcsIGNocm9tYV93ZWlnaHRf bDBfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy88IGx1bWFfd2VpZ2h0X2wxX2ZsYWcsIGNocm9tYV93ZWlnaHRf bDFfZmxhZywKKyAgICBpbnQxNl90IHdlaWdodFsyXVtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdW01B WF9XRUlHSFRTXTsgICAgICAvLy88IEx1bWFXZWlnaHRMMCwgTHVtYVdlaWdodEwxLCBDaHJvbWFX ZWlnaHRMMCwgQ2hyb21hV2VpZ2h0TDEKKyAgICBpbnQxNl90IG9mZnNldFsyXVtWVkNfTUFYX1NB TVBMRV9BUlJBWVNdW01BWF9XRUlHSFRTXTsgICAgICAvLy88IGx1bWFfb2Zmc2V0X2wwLCBsdW1h X29mZnNldF9sMSwgQ2hyb21hT2Zmc2V0TDAsIENocm9tYU9mZnNldEwxCit9IFByZWRXZWlnaHRU YWJsZTsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDUEggeworICAgIGNvbnN0IEgyNjZSYXdQaWN0dXJl SGVhZGVyICpyOworICAgIHZvaWQgKnJyZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZSwgYmFja2luZyBwaCBhYm92ZQorCisgICAg Ly9kZXJpdmVkIHZhbHVlcworICAgIHVpbnQzMl90IG1heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2Fu ZDsgICAgICAgICAgIC8vLzwgTWF4TnVtU3ViYmxvY2tNZXJnZUNhbmQKKyAgICBpbnQzMl90ICBw b2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFBpY09yZGVyQ250VmFs CisgICAgUHJlZFdlaWdodFRhYmxlIHB3dDsKK30gVlZDUEg7CisKKyNkZWZpbmUgQUxGX05VTV9G SUxURVJTX0xVTUEgICAgMjUKKyNkZWZpbmUgQUxGX05VTV9GSUxURVJTX0NIUk9NQSAgIDgKKyNk ZWZpbmUgQUxGX05VTV9GSUxURVJTX0NDICAgICAgIDUKKworI2RlZmluZSBBTEZfTlVNX0NPRUZG X0xVTUEgICAgICAxMgorI2RlZmluZSBBTEZfTlVNX0NPRUZGX0NIUk9NQSAgICAgNgorI2RlZmlu ZSBBTEZfTlVNX0NPRUZGX0NDICAgICAgICAgNworCit0eXBlZGVmIHN0cnVjdCBWVkNBTEYgewor ICAgIGludDE2X3QgbHVtYV9jb2VmZiAgICAgW0FMRl9OVU1fRklMVEVSU19MVU1BXVtBTEZfTlVN X0NPRUZGX0xVTUFdOworICAgIHVpbnQ4X3QgbHVtYV9jbGlwX2lkeCAgW0FMRl9OVU1fRklMVEVS U19MVU1BXVtBTEZfTlVNX0NPRUZGX0xVTUFdOworCisgICAgdWludDhfdCBudW1fY2hyb21hX2Zp bHRlcnM7CisgICAgaW50MTZfdCBjaHJvbWFfY29lZmYgICBbQUxGX05VTV9GSUxURVJTX0NIUk9N QV1bQUxGX05VTV9DT0VGRl9DSFJPTUFdOworICAgIHVpbnQ4X3QgY2hyb21hX2NsaXBfaWR4W0FM Rl9OVU1fRklMVEVSU19DSFJPTUFdW0FMRl9OVU1fQ09FRkZfQ0hST01BXTsKKworICAgIHVpbnQ4 X3QgbnVtX2NjX2ZpbHRlcnNbMl07ICAgICAgICAvLy88IGFsZl9jY19jYl9maWx0ZXJzX3NpZ25h bGxlZF9taW51czEgKyAxLCBhbGZfY2NfY3JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMQor ICAgIGludDE2X3QgY2NfY29lZmZbMl1bQUxGX05VTV9GSUxURVJTX0NDXVtBTEZfTlVNX0NPRUZG X0NDXTsKK30gVlZDQUxGOworCitlbnVtIHsKKyAgU0xfU1RBUlRfMngyICAgID0gMCwKKyAgU0xf U1RBUlRfNHg0ICAgID0gMiwKKyAgU0xfU1RBUlRfOHg4ICAgID0gOCwKKyAgU0xfU1RBUlRfMTZ4 MTYgID0gMTQsCisgIFNMX1NUQVJUXzMyeDMyICA9IDIwLAorICBTTF9TVEFSVF82NHg2NCAgPSAy NiwKKyAgU0xfTUFYX0lEICAgICAgID0gMjgsCit9OworCisjZGVmaW5lIFNMX01BWF9NQVRSSVhf U0laRSA4CisKK3R5cGVkZWYgc3RydWN0IFZWQ1NjYWxpbmdMaXN0IHsKKyAgICB1aW50OF90IHNj YWxpbmdfbWF0cml4X3JlY1tTTF9NQVhfSURdW1NMX01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9N QVRSSVhfU0laRV07ICAvLy88IFNjYWxpbmdNYXRyaXhSZWMKKyAgICB1aW50OF90IHNjYWxpbmdf bWF0cml4X2RjX3JlY1tTTF9NQVhfSUQgLSBTTF9TVEFSVF8xNngxNl07ICAgICAgICAgICAgICAg ICAgICAgICAvLy88IFNjYWxpbmdNYXRyaXhEY1JlY1tyZWZJZCDiiJIgMTRdCit9IFZWQ1NjYWxp bmdMaXN0OworCit0eXBlZGVmIHN0cnVjdCBWVkNMTUNTIHsKKyAgICB1aW50OF90ICBtaW5fYmlu X2lkeDsKKyAgICB1aW50OF90ICBtYXhfYmluX2lkeDsKKworICAgIC8vKjIgZm9yIGhpZ2ggZGVw dGgKKyAgICB1aW50OF90ICBmd2RfbHV0W0xNQ1NfTUFYX0xVVF9TSVpFICogMl07CisgICAgdWlu dDhfdCAgaW52X2x1dFtMTUNTX01BWF9MVVRfU0laRSAqIDJdOworCisgICAgdWludDE2X3QgcGl2 b3RbTE1DU19NQVhfQklOX1NJWkUgKyAxXTsKKyAgICB1aW50MTZfdCBjaHJvbWFfc2NhbGVfY29l ZmZbTE1DU19NQVhfQklOX1NJWkVdOworfSBWVkNMTUNTOworCisjZGVmaW5lIFZWQ19NQVhfQUxG X0NPVU5UICAgICAgICA4CisjZGVmaW5lIFZWQ19NQVhfTE1DU19DT1VOVCAgICAgICA0CisjZGVm aW5lIFZWQ19NQVhfU0xfQ09VTlQgICAgICAgICA4CisKK3R5cGVkZWYgc3RydWN0IFZWQ1BhcmFt U2V0cyB7CisgICAgY29uc3QgVlZDU1BTICAgICAgICAgICAgKnNwc19saXN0W1ZWQ19NQVhfU1BT X0NPVU5UXTsgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgY29uc3QgVlZDUFBT ICAgICAgICAgICAgKnBwc19saXN0W1ZWQ19NQVhfUFBTX0NPVU5UXTsgICAgICAgLy8vPCBSZWZT dHJ1Y3QgcmVmZXJlbmNlCisgICAgY29uc3QgVlZDQUxGICAgICAgICAgICAgKmFsZl9saXN0W1ZW Q19NQVhfQUxGX0NPVU5UXTsgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgY29u c3QgSDI2NlJhd0FQUyAgICAgICAgKmxtY3NfbGlzdFtWVkNfTUFYX0xNQ1NfQ09VTlRdOyAgICAg Ly8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgY29uc3QgVlZDU2NhbGluZ0xpc3QgICAgKnNj YWxpbmdfbGlzdFtWVkNfTUFYX1NMX0NPVU5UXTsgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNl Cit9IFZWQ1BhcmFtU2V0czsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDRnJhbWVQYXJhbVNldHMgewor ICAgIGNvbnN0IFZWQ1NQUyAgICAgICAgICAgKnNwczsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQorICAgIGNvbnN0IFZWQ1BQUyAgICAgICAg ICAgKnBwczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUmVmU3RydWN0IHJl ZmVyZW5jZQorICAgIFZWQ1BIICAgICAgICAgICAgICAgICAgIHBoOworICAgIGNvbnN0IFZWQ0FM RiAgICAgICAgICAgKmFsZl9saXN0W1ZWQ19NQVhfQUxGX0NPVU5UXTsgICAgICAgIC8vLzwgUmVm U3RydWN0IHJlZmVyZW5jZQorICAgIFZWQ0xNQ1MgICAgICAgICAgICAgICAgIGxtY3M7CisgICAg Y29uc3QgVlZDU2NhbGluZ0xpc3QgICAqc2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCit9IFZWQ0ZyYW1lUGFyYW1TZXRzOworCit0eXBl ZGVmIHN0cnVjdCBWVkNTSCB7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKKworICAgIC8v IGRlcml2ZWQgdmFsdWVzCisgICAgLy8gY3R1IGFkZHJlc3MKKyAgICB1aW50MzJfdCAgICAgICAg bnVtX2N0dXNfaW5fY3Vycl9zbGljZTsgICAgICAgICAgICAgICAgIC8vLzwgTnVtQ3R1c0luQ3Vy clNsaWNlCisgICAgY29uc3QgdWludDMyX3QqIGN0Yl9hZGRyX2luX2N1cnJfc2xpY2U7ICAgICAg ICAgICAgICAgICAvLy88IEN0YkFkZHJJbkN1cnJTbGljZQorCisgICAgLy8gaW50ZXIKKyAgICBQ cmVkV2VpZ2h0VGFibGUgcHd0OworICAgIGludDhfdCAgIHJlZl9pZHhfc3ltWzJdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZWZJZHhTeW1MMCwgUmVmSWR4U3ltTDEKKwor ICAgIC8vIHFwX3kKKyAgICBpbnQ4X3QgICBzbGljZV9xcF95OyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vLzwgU2xpY2VRcFkKKworICAgIC8vIGRlYmxvY2tfb2Zmc2V0cwor ICAgIERCUGFyYW1zIGRlYmxvY2s7CisKKyAgICAvLyBwYXJ0aXRpb24gY29uc3RyYWlucworICAg IHVpbnQ4X3QgIG1pbl9xdF9zaXplWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8vPCBNaW5RdFNpemVZLCBNaW5RdFNpemVDCisgICAgdWludDhfdCAgbWF4X2J0X3NpemVbMl07 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heEJ0U2l6ZVksIE1heEJ0U2l6 ZUMKKyAgICB1aW50OF90ICBtYXhfdHRfc2l6ZVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgTWF4VHRTaXplWSwgTWF4VHRTaXplQworICAgIHVpbnQ4X3QgIG1heF9tdHRf ZGVwdGhbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXhNdHREZXB0aFks IE1heE10dERlcHRoQworICAgIHVpbnQ4X3QgIGN1X3FwX2RlbHRhX3N1YmRpdjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8vPCBDdVFwRGVsdGFTdWJkaXYKKyAgICB1aW50OF90ICBjdV9j aHJvbWFfcXBfb2Zmc2V0X3N1YmRpdjsgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3VDaHJvbWFR cE9mZnNldFN1YmRpdgorCisgICAgLy8gZW50cmllcworICAgIHVpbnQzMl90IGVudHJ5X3BvaW50 X3N0YXJ0X2N0dVtWVkNfTUFYX0VOVFJZX1BPSU5UU107ICAgLy8vPCBlbnRyeSBwb2ludCBzdGFy dCBpbiBjdHVfYWRkcgorfSBWVkNTSDsKKworc3RydWN0IFZWQ0NvbnRleHQ7CisKK2ludCBmZl92 dmNfZGVjb2RlX2ZyYW1lX3BzKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMsIHN0cnVjdCBWVkNDb250 ZXh0ICpzKTsKK2ludCBmZl92dmNfZGVjb2RlX2FwcyhWVkNQYXJhbVNldHMgKnBzLCBjb25zdCBD b2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQpOworaW50IGZmX3Z2Y19kZWNvZGVfc2goVlZDU0ggKnNo LCBjb25zdCBWVkNGcmFtZVBhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAq dW5pdCk7Cit2b2lkIGZmX3Z2Y19mcmFtZV9wc19mcmVlKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMp Owordm9pZCBmZl92dmNfcHNfdW5pbml0KFZWQ1BhcmFtU2V0cyAqcHMpOworCisjZW5kaWYgLyog QVZDT0RFQ19WVkNfVlZDX1BTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y2Rl Yy5oIGIvbGliYXZjb2RlYy92dmMvdnZjZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uY2RlOWIyYzk2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZj L3Z2Y2RlYy5oCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogVlZDIHZpZGVvIGRlY29kZXIKKyAq CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgTnVvIE1pCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgWHUg TXUKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVkNP REVDX1ZWQ19WVkNERUNfSAorI2RlZmluZSBBVkNPREVDX1ZWQ19WVkNERUNfSAorCisjaW5jbHVk ZSAibGliYXZjb2RlYy92dmMuaCIKKworI2luY2x1ZGUgInZ2Y19wcy5oIgorCisjZGVmaW5lIExV TUEgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0hST01BICAgICAgICAgICAgICAgICAg MQorI2RlZmluZSBDQiAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSICAgICAgICAg ICAgICAgICAgICAgIDIKKyNkZWZpbmUgSkNCQ1IgICAgICAgICAgICAgICAgICAgMworCisjZGVm aW5lIE1JTl9UVV9MT0cyICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg TWluVGJMb2cyU2l6ZVkKKyNkZWZpbmUgTUlOX1BVX0xPRzIgICAgICAgICAgICAgMgorCisjZGVm aW5lIEwwICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTDEgICAgICAgICAgICAgICAg ICAgICAgMQorCit0eXBlZGVmIHN0cnVjdCBSZWZQaWNMaXN0IHsKKyAgICBzdHJ1Y3QgVlZDRnJh bWUgKnJlZltWVkNfTUFYX1JFRl9FTlRSSUVTXTsKKyAgICBpbnQgbGlzdFtWVkNfTUFYX1JFRl9F TlRSSUVTXTsKKyAgICBpbnQgaXNMb25nVGVybVtWVkNfTUFYX1JFRl9FTlRSSUVTXTsKKyAgICBp bnQgbmJfcmVmczsKK30gUmVmUGljTGlzdDsKKwordHlwZWRlZiBzdHJ1Y3QgUmVmUGljTGlzdFRh YiB7CisgICAgUmVmUGljTGlzdCByZWZQaWNMaXN0WzJdOworfSBSZWZQaWNMaXN0VGFiOworCit0 eXBlZGVmIHN0cnVjdCBWVkNGcmFtZSB7CisgICAgc3RydWN0IEFWRnJhbWUgKmZyYW1lOworCisg ICAgc3RydWN0IE12RmllbGQgKnRhYl9kbXZyX212ZjsgICAgICAgICAgICAgICAvLy88IFJlZlN0 cnVjdCByZWZlcmVuY2UKKyAgICBSZWZQaWNMaXN0VGFiICoqcnBsX3RhYjsgICAgICAgICAgICAg ICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQorICAgIFJlZlBpY0xpc3RUYWIgICpycGw7 ICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgaW50 IG5iX3JwbF9lbGVtczsKKworICAgIGludCBjdGJfY291bnQ7CisKKyAgICBpbnQgcG9jOworCisg ICAgc3RydWN0IFZWQ0ZyYW1lICpjb2xsb2NhdGVkX3JlZjsKKworICAgIHN0cnVjdCBGcmFtZVBy b2dyZXNzICpwcm9ncmVzczsgICAgICAgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisK KyAgICAvKioKKyAgICAgKiBBIHNlcXVlbmNlIGNvdW50ZXIsIHNvIHRoYXQgb2xkIGZyYW1lcyBh cmUgb3V0cHV0IGZpcnN0CisgICAgICogYWZ0ZXIgYSBQT0MgcmVzZXQKKyAgICAgKi8KKyAgICB1 aW50MTZfdCBzZXF1ZW5jZTsKKyAgICAvKioKKyAgICAgKiBBIGNvbWJpbmF0aW9uIG9mIFZWQ19G UkFNRV9GTEFHXyoKKyAgICAgKi8KKyAgICB1aW50OF90IGZsYWdzOworfSBWVkNGcmFtZTsKKwor dHlwZWRlZiBzdHJ1Y3QgU2xpY2VDb250ZXh0IHsKKyAgICBpbnQgc2xpY2VfaWR4OworICAgIHN0 cnVjdCBFbnRyeVBvaW50ICplcHM7CisgICAgaW50IG5iX2VwczsKKyAgICBSZWZQaWNMaXN0ICpy cGw7CisgICAgdm9pZCAqcmVmOyAgICAgICAgICAgICAgICAgICAgICAvLy88IFJlZlN0cnVjdCBy ZWZlcmVuY2UsIGJhY2tpbmcgc2xpY2UgZGF0YQorfSBTbGljZUNvbnRleHQ7CisKK3R5cGVkZWYg c3RydWN0IFZWQ0ZyYW1lQ29udGV4dCB7CisgICAgdm9pZCAqbG9nX2N0eDsKKworICAgIC8vICsx IGZvciB0aGUgY3VycmVudCBmcmFtZQorICAgIFZWQ0ZyYW1lIERQQltWVkNfTUFYX0RQQl9TSVpF ICsgMV07CisKKyAgICBzdHJ1Y3QgQVZGcmFtZSAqZnJhbWU7CisgICAgc3RydWN0IEFWRnJhbWUg Km91dHB1dF9mcmFtZTsKKworICAgIFNsaWNlQ29udGV4dCAgKipzbGljZXM7CisgICAgaW50IG5i X3NsaWNlczsKKyAgICBpbnQgbmJfc2xpY2VzX2FsbG9jYXRlZDsKKworICAgIFZWQ0ZyYW1lICpy ZWY7CisKKyAgICBzdHJ1Y3QgVlZDRnJhbWVUaHJlYWQgKmZ0OworCisgICAgdWludDY0X3QgZGVj b2RlX29yZGVyOworCisgICAgc3RydWN0IEZGUmVmU3RydWN0UG9vbCAqdGFiX2RtdnJfbXZmX3Bv b2w7CisgICAgc3RydWN0IEZGUmVmU3RydWN0UG9vbCAqcnBsX3RhYl9wb29sOworCisgICAgc3Ry dWN0IEZGUmVmU3RydWN0UG9vbCAqY3VfcG9vbDsKKyAgICBzdHJ1Y3QgRkZSZWZTdHJ1Y3RQb29s ICp0dV9wb29sOworCisgICAgc3RydWN0IHsKKyAgICAgICAgaW50MTZfdCAqc2xpY2VfaWR4Owor CisgICAgICAgIGludCAgICAgKmNiX3Bvc194WzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vLzwgQ2JQb3NYW11bXVtdCisgICAgICAgIGludCAgICAgKmNiX3Bvc195WzJdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgQ2JQb3NZW11bXVtdCisgICAgICAgIHVpbnQ4X3QgKmNi X3dpZHRoWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ2JXaWR0aFtdW11bXQor ICAgICAgICB1aW50OF90ICpjYl9oZWlnaHRbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAv Ly88IENiSGVpZ2h0W11bXVtdCisgICAgICAgIHVpbnQ4X3QgKmNxdF9kZXB0aFsyXTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgQ3F0RGVwdGhbXVtdW10KKyAgICAgICAgaW50OF90ICAq cXBbVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKworICAgICAgICB1aW50OF90ICpza2lwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEN1U2tpcEZsYWdbXVtdCisgICAgICAg IHVpbnQ4X3QgKmlzcG1mOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgaW50 cmFfc3ViX3BhcnRpdGlvbnNfbW9kZV9mbGFnCisgICAgICAgIHVpbnQ4X3QgKm1zbVsyXTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTXR0U3BsaXRNb2RlW11bXVtdIGluIDMy IHBpeGVscworICAgICAgICB1aW50OF90ICppbWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLy88IEludHJhTWlwRmxhZ1tdW10KKyAgICAgICAgdWludDhfdCAqaW10ZjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBpbnRyYV9taXBfdHJhbnNwb3NlZF9m bGFnW11bXQorICAgICAgICB1aW50OF90ICppbW07ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLy88IGludHJhX21pcF9tb2RlW11bXQorICAgICAgICB1aW50OF90ICppcG07ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEludHJhUHJlZE1vZGVZW11bXQor ICAgICAgICB1aW50OF90ICpjcG1bMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv Ly88IEN1UHJlZE1vZGVbXVtdW10KKyAgICAgICAgdWludDhfdCAqbXNmOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8vPCBNZXJnZVN1YmJsb2NrRmxhZ1tdW10KKyAgICAgICAg dWludDhfdCAqaWFmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBJbnRl ckFmZmluZUZsYWdbXVtdCisgICAgICAgIHVpbnQ4X3QgKm1taTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vLzwgTW90aW9uTW9kZWxJZGNbXVtdCisgICAgICAgIHN0cnVjdCBN diAgICAgICpjcF9tdlsyXTsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3BNdkxYW11bXVtd W01BWF9DT05UUk9MX1BPSU5UU107CisgICAgICAgIHN0cnVjdCBNdkZpZWxkICptdmY7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTXZEbXZyTDAsIE12RG12ckwxCisKKyAgICAgICAg dWludDhfdCAqdHVfY29kZWRfZmxhZ1tWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOyAgLy8vPCB0dV95 X2NvZGVkX2ZsYWdbXVtdLCAgdHVfY2JfY29kZWRfZmxhZ1tdW10sICB0dV9jcl9jb2RlZF9mbGFn W11bXQorICAgICAgICB1aW50OF90ICp0dV9qb2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWc7ICAgICAg ICAgICAvLy88IHR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1tdW10KKyAgICAgICAgaW50ICAg ICAqdGJfcG9zX3gwWzJdOworICAgICAgICBpbnQgICAgICp0Yl9wb3NfeTBbMl07CisgICAgICAg IHVpbnQ4X3QgKnRiX3dpZHRoWzJdOworICAgICAgICB1aW50OF90ICp0Yl9oZWlnaHRbMl07Cisg ICAgICAgIHVpbnQ4X3QgKnBjbWZbMl07CisKKyAgICAgICAgdWludDhfdCAqaG9yaXpvbnRhbF9i c1tWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgICAgICB1aW50OF90ICp2ZXJ0aWNhbF9ic1tW VkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgICAgICB1aW50OF90ICpob3Jpem9udGFsX3A7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvLy88IGhvcml6b250YWwgbWF4RmlsdGVyTGVuZ3RoUHMg Zm9yIGx1bWEKKyAgICAgICAgdWludDhfdCAqaG9yaXpvbnRhbF9xOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBob3Jpem9udGFsIG1heEZpbHRlckxlbmd0aFFzIGZvciBsdW1hCisgICAg ICAgIHVpbnQ4X3QgKnZlcnRpY2FsX3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg dmVydGljYWwgICBtYXhGaWx0ZXJMZW5ndGhQcyBmb3IgbHVtYQorICAgICAgICB1aW50OF90ICp2 ZXJ0aWNhbF9xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IHZlcnRpY2FsICAgbWF4 RmlsdGVyTGVuZ3RoUXMgZm9yIGx1bWEKKworICAgICAgICB1aW50OF90ICpzYW9fcGl4ZWxfYnVm ZmVyX2hbVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAgICAgICAgdWludDhfdCAqc2FvX3BpeGVs X2J1ZmZlcl92W1ZWQ19NQVhfU0FNUExFX0FSUkFZU107CisgICAgICAgIHVpbnQ4X3QgKmFsZl9w aXhlbF9idWZmZXJfaFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdWzJdOworICAgICAgICB1aW50OF90 ICphbGZfcGl4ZWxfYnVmZmVyX3ZbVlZDX01BWF9TQU1QTEVfQVJSQVlTXVsyXTsKKworICAgICAg ICBpbnQgICAgICAgICAqY29lZmZzOworICAgICAgICBzdHJ1Y3QgQ1RVICAqY3R1czsKKworICAg ICAgICAvL3VzZWQgaW4gYXJyYXlzX2luaXQgb25seQorICAgICAgICBzdHJ1Y3QgeworICAgICAg ICAgICAgaW50IGN0dV9jb3VudDsKKyAgICAgICAgICAgIGludCBjdHVfc2l6ZTsKKyAgICAgICAg ICAgIGludCBwaWNfc2l6ZV9pbl9taW5fY2I7CisgICAgICAgICAgICBpbnQgcGljX3NpemVfaW5f bWluX3B1OworICAgICAgICAgICAgaW50IHBpY19zaXplX2luX21pbl90dTsKKyAgICAgICAgICAg IGludCBjdHVfd2lkdGg7CisgICAgICAgICAgICBpbnQgY3R1X2hlaWdodDsKKyAgICAgICAgICAg IGludCB3aWR0aDsKKyAgICAgICAgICAgIGludCBoZWlnaHQ7CisgICAgICAgICAgICBpbnQgY2hy b21hX2Zvcm1hdF9pZGM7CisgICAgICAgICAgICBpbnQgcGl4ZWxfc2hpZnQ7CisgICAgICAgICAg ICBpbnQgYnNfd2lkdGg7CisgICAgICAgICAgICBpbnQgYnNfaGVpZ2h0OworICAgICAgICB9IHN6 OworICAgIH0gdGFiOworfSBWVkNGcmFtZUNvbnRleHQ7CisKK3R5cGVkZWYgc3RydWN0IFZWQ0Nv bnRleHQgeworICAgIHN0cnVjdCBBVkNvZGVjQ29udGV4dCAqYXZjdHg7CisKKyAgICBDb2RlZEJp dHN0cmVhbUNvbnRleHQgKmNiYzsKKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50IGN1cnJlbnRf ZnJhbWU7CisKKyAgICBWVkNQYXJhbVNldHMgcHM7CisKKyAgICBpbnQgdGVtcG9yYWxfaWQ7ICAg ICAgICAvLy88IHRlbXBvcmFsX2lkX3BsdXMxIC0gMQorICAgIGludCBwb2NfdGlkMDsKKworICAg IGludCBlb3M7ICAgICAgICAgICAgICAgIC8vLzwgY3VycmVudCBwYWNrZXQgY29udGFpbnMgYW4g RU9TL0VPQiBOQUwKKyAgICBpbnQgbGFzdF9lb3M7ICAgICAgICAgICAvLy88IGxhc3QgcGFja2V0 IGNvbnRhaW5zIGFuIEVPUy9FT0IgTkFMCisKKyAgICBlbnVtIFZWQ05BTFVuaXRUeXBlIHZjbF91 bml0X3R5cGU7CisgICAgaW50IG5vX291dHB1dF9iZWZvcmVfcmVjb3ZlcnlfZmxhZzsgLy8vPCBO b091dHB1dEJlZm9yZVJlY292ZXJ5RmxhZworICAgIGludCBnZHJfcmVjb3ZlcnlfcG9pbnRfcG9j OyAgICAgICAgIC8vLzwgcmVjb3ZlcnlQb2ludFBvY1ZhbAorCisgICAgLyoqCisgICAgICogU2Vx dWVuY2UgY291bnRlcnMgZm9yIGRlY29kZWQgYW5kIG91dHB1dCBmcmFtZXMsIHNvIHRoYXQgb2xk CisgICAgICogZnJhbWVzIGFyZSBvdXRwdXQgZmlyc3QgYWZ0ZXIgYSBQT0MgcmVzZXQKKyAgICAg Ki8KKyAgICB1aW50MTZfdCBzZXFfZGVjb2RlOworICAgIHVpbnQxNl90IHNlcV9vdXRwdXQ7CisK KyAgICBzdHJ1Y3QgQVZFeGVjdXRvciAqZXhlY3V0b3I7CisKKyAgICBWVkNGcmFtZUNvbnRleHQg KmZjczsKKyAgICBpbnQgbmJfZmNzOworCisgICAgdWludDY0X3QgbmJfZnJhbWVzOyAgICAgLy8v PCBwcm9jZXNzZWQgZnJhbWVzCisgICAgaW50IG5iX2RlbGF5ZWQ7ICAgICAgICAgLy8vPCBkZWxh eWVkIGZyYW1lcworfSAgVlZDQ29udGV4dCA7CisKKyNlbmRpZiAvKiBBVkNPREVDX1ZWQ19WVkNE RUNfSCAqLwotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==