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 A492546CD1 for ; Fri, 7 Jul 2023 14:22:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F2DFA68C825; Fri, 7 Jul 2023 17:22:10 +0300 (EEST) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2035.outbound.protection.outlook.com [40.92.52.35]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7922868C7F8 for ; Fri, 7 Jul 2023 17:22:04 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Obf8VQJkokFacjh9eoJldgG4X3U4F2OxWtZsFPh9JhcuGPOsIEZ0OlX8EAKu560dWJFbUxTC2BteYp/pzkBNXkhNB2AjGnky+mSWkRSNC/sJ/AvwTD+n3pF9xe9n4yEPuMHTxnAmzwLnn+YLi6siUvZfcEf4+O5nQSvl++HOIoBx82jKeXnislRptqzfOcemuAgm/z14I5nBN0PzZXAd5yvQUO9oI0Ud/Z04oHu08l8i6bilgxJCUF1EzsI34WXKneGvmTuGk4FlZK2yEngklywpOFDc58wKavGECznn7yJrp+7gME6UptA54z/QbNKCR99NaZs2bB6EYTm7uzZdHw== 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=6PP9Kn9q5jnsol6rfZF1UlJdOFPZLDECuDAHZN3EooU=; b=jq/T/dX6wQZRnf6hnfhjeymk6oedope0AcAzYToY4/beIMl2e2I/zkrNjUyD942xmunZ1UW+f4iNkZMCmTvjKApqi2dijxoAZla7pl7l7qsZ9ztSWyZnMp7ar/gbvvXazJbwyiwBhxK9bXvjMK6wezOpLoxqe8G2nXsakgA6rKf7bikTapHfSD5HsDv9CZc1lY9AEEP35hqhX50KvnJUX46pzTvfoAOgCwCsbh2muSxhT61oZGJvOqz08if+dLzmUMvbCXvgqevCNtUMRsYIsW871liGrLsrXY5FWgX0ggLMJW+Y/c3BQ0nWWDqTfKXtvzFCSK3d9KKC8W17nslYKw== 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=6PP9Kn9q5jnsol6rfZF1UlJdOFPZLDECuDAHZN3EooU=; b=SOZpXbCu2Vq4c/DCqXfcPF46QbxFGxrfd0dXQ3MZ1cfUsPNcOPjqfFOLi6wfFpMfR0VwD0S+C6JdVINQg4Ff2ZsyjWnSzpskUcQYmqgupCd120gN4OCNqT55WVUDeW4eiedvHi3Qzm9AswRxNrYq5FSZSh0dk2LpXMVJQVcy1wC8vVKv3gVScBaiw3U0UwJWoBvGVNg6loc/jzT4pCTBEKLR2+q89+wnvFoCW1CgnfmxdSp2rFORa98HWQnKDegcH2IWne865q62EjKxJ/FhbUwOyiJQ9zJLqE7EtAjr0hojClC63kdR4MPH0LsyvfvmnX0Qid5u83MGNVmmQp6RTw== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by KL1PR0601MB5445.apcprd06.prod.outlook.com (2603:1096:820:c0::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.25; Fri, 7 Jul 2023 14:05:58 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::7d80:1294:fd54:a7f]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::7d80:1294:fd54:a7f%7]) with mapi id 15.20.6565.016; Fri, 7 Jul 2023 14:05:57 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 Jul 2023 22:05:35 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230707140540.10279-1-nuomi2021@gmail.com> References: <20230707140540.10279-1-nuomi2021@gmail.com> X-TMN: [k2tBH/z+loKhVF4tjv35EUvUM1F9HKft] X-ClientProxiedBy: TYCP286CA0251.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::20) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20230707140540.10279-10-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|KL1PR0601MB5445:EE_ X-MS-Office365-Filtering-Correlation-Id: 74fc2d0e-77c1-4cd2-c358-08db7ef3494b X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7QSnbca8WC4+tMi7xgk0XsyXPGN+i8oeDJY7bP2PyhDSQIsrwj25p1uEcOTeOoYmxvdmBdbxu9jTQHhr1EmD3MxOqh0xjpdTSXwdCm7UUYaxIuGZmD/PDpuEi4lpYjzLXUEeC1LWe9QrKN79W5kF+Mox2J31Ag4zBOTzWmamkb4Q8qF98J4954wkbm1R+nZj/rwTBy46wgUSWCICe/vPoFTwBF3UPkmqHiVNYQSuy5DnRDMRQyAPanL2vQeS7yrdALFNGRr65W/TGyOfS1TQjoJJ35Ae2TO3uTvGth0CfabWfgbd2kLBzUHAUmnl/wXPr+C3112dc+iivZhyViMI28n8paAalz2s/J75SHDEJbYonD4yT1o8ilnl20J4eyWzZeAOdJkRtfFydDLwYdmKFEmQrsv/Wb73VX10KskOu6QQhhN0cMeGDvULHVjbVZWt73+iD1PJj6dip2Cc2EIRkFoxu+53liAwRT+LPhnJ5gs9Ec0BugkMBzK7xXIOUBNfGGJKnxQdX8piD+rd8AqHnT5sKKKZBEIogbp6dVjg+u1Y43nNZyxMDNJyHSv9wHrQN01knyLWkcyBCfD8fkRCMZIntcvcfpe1tjFUg+gzVPF84SIhJgReE1g7tF+jMaDU X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UXBtTDBjdHJUYnVKZTI0SE4xMk1BbFE0MGQ3MGM3YmRtbjZsQm5tTDhyUjB1?= =?utf-8?B?UXIzZnBTRnBJWTNKbG1ZVC9nQ1ZKZ0k4Mkpwci9qeW5LU2V5WTIwVU43NitX?= =?utf-8?B?VHkxZmhjZDB4Nzh2WkpuZ1hTLzkzdmY0NDhxdWUraDEwUEVyVDZqQlNDQzlI?= =?utf-8?B?Qmcyc2o4UFJlc25lYkliN3l1dkhBdE40d2lFa2xTbVVqcnR4KytJR1dWWnR4?= =?utf-8?B?TDVCVGlyNDMxOEl1WldBb3BhV1VHeTc5djVPKzVQRFU4USt2NWVJeFl4ZENQ?= =?utf-8?B?dzAvb20vc2MwSGFzT3hxZHJaT3dUZGgzOGZhTlVITmRxTTFQOTlvUkR1S2Rj?= =?utf-8?B?VkFRQlEwNUs1VXhoWkxsTGRNNUQzVFZMVy8vU3dzYlorYzZQVDBHVlRmUk9l?= =?utf-8?B?NUxiNXpkbFlwQ2JaZldaL01SMEZ2akpCZnNZR3VtaVk0Ymp0TXg0ZExGNThz?= =?utf-8?B?UkswdDdydnBXWFVkM1g1TGcxSC9sb0dRVCt2dzFGR2FlVnNrbWE2bDZCd2Rx?= =?utf-8?B?ZC82ZzlPT3VYWUhXNHR0cXV4MkhqWVVZbENFaHc4cHRrbmxKSE1KaUJGRXJ3?= =?utf-8?B?Vk9FSU9KdDNaVGtqL1UrbHROYmhpQVh4RzFhdXl3YThnblZNcTIrMUNRSVpF?= =?utf-8?B?aEtlL1lob1hSMENIRm1mOWtETnFxM21ISEloTTVpenQ4dEdXY0NDV1crZ0ZV?= =?utf-8?B?R3V2MnpZTFl3eGIvOTc0STFDcXJFM3p1eU53R2pMUEJKYXgxK0lSZ1dnZ0xT?= =?utf-8?B?R2dEMFMybHBrNHNMdWRoSUpsSnZrQUlOTG5uY1F5MG5Tc1ZpN2tLam5kdldx?= =?utf-8?B?MStGaHU1S1h2cTZUNHVHYmIvQjI4Mld6alp1QVNnays4VUZySW1tZWtsUkxN?= =?utf-8?B?czBxS0dxMnh0eXFJRnoyaDkvMDNQcUtxbUt2K0pqSjQvMS9xMjRKc2JDaDNX?= =?utf-8?B?RDdseGx1TTNhSkh1TjhQNFZSU3RmLzVlN25CeW9uMFBuQnVTemRCMXl4Rk1o?= =?utf-8?B?MWtHOWpsdCt0b29BdXpRTndYalB1WDRMKzJNdTE1Umd4Y3NIemp1M0dVNXgy?= =?utf-8?B?d2w0S0g2TkRFblo0VHdSR2pWVGVVMDk3NGs4ZkEvWWNOTkdZSWhzeWFCMloz?= =?utf-8?B?Z09NQTh2MlZjamFoT3F3Lyt6aGg5aXVVR2JvNlUwOEtKNkZVZVl0MnBOVjVx?= =?utf-8?B?NGNWbERNUzBsK2NxaHdPeEZFd3ptcDBTVzU0a3RacnFsTkZjRExtRUh4M2Jk?= =?utf-8?B?QkNNVzdXTFRpcElKT3MrSjNNMGlZR0hQMFROb2U0NlUvVDZTUVdERmx1TnM0?= =?utf-8?B?QmhOU1NJWW9Ra1NUTW05Z2F2NlRUeUMvdUl4V2Npdy9NV2FtWE9MZXZJWE12?= =?utf-8?B?Z1d4YkdqazVra1hPekJJMVg2SVI2S0VzZHpqZWV0NTg0V3pFdllRWXhXY2tw?= =?utf-8?B?U09GUThDb0xERnd3MTZQMnZoNHFzcC9ES3JKemMzZDI5bzVWbzZVTVl2MDQ3?= =?utf-8?B?TzBxR05qeDd4bXZscGdaOUpjb0FFSUhLbzVPY1Rvd1lQQ0g3Z3ZxY1J2dU1N?= =?utf-8?B?RHVWWlRpZGxEMDk2WDEvQjBHWWI2NG0xeXRmbjBZZmhsaXFCdHBCNVI3WFVz?= =?utf-8?B?cFRNOENOejhVUVU5UmF5SVJJLy8zOXFtZDJnR2QrZS8wVTF2bUtEU0ExRGtK?= =?utf-8?Q?tdYOzW/KN1zeainbtCv/?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74fc2d0e-77c1-4cd2-c358-08db7ef3494b X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2023 14:05:57.9247 (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: KL1PR0601MB5445 Subject: [FFmpeg-devel] [PATCH v2 09/14] vvcdec: add intra prediction 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDMgKy0KIGxpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuYyAgICAgICAgICAgIHwgICAzOSArCiBsaWJhdmNvZGVjL3Z2Yy92 dmNfY3R1LmggICAgICAgICAgICB8ICAgIDIgKwogbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMg ICAgICAgICAgfCAgNzcxICsrKysrKysrKysrKysrKysrKysrCiBsaWJhdmNvZGVjL3Z2Yy92dmNf aW50cmEuaCAgICAgICAgICB8ICAgNDkgKysKIGxpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYV90ZW1w bGF0ZS5jIHwgMTAxOCArKysrKysrKysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdl ZCwgMTg4MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVj L3Z2Yy92dmNfaW50cmEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2Y19p bnRyYV90ZW1wbGF0ZS5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUgYi9s aWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQppbmRleCA2ZmZlZDkxZTc4Li44MzAyMWU0OTUzIDEwMDY0 NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL3Z2Yy9NYWtl ZmlsZQpAQCAtNyw3ICs3LDggQEAgT0JKUy0kKENPTkZJR19WVkNfREVDT0RFUikgICAgICAgICAg Kz0gIHZ2Yy92dmNkZWMubyAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2dmMvdnZjX2N0dS5vICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19kYXRhLm8gICAgICAgICAgXAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfaW50ZXIubyAgICAgICAg IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ludHJh Lm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZj L3Z2Y19pdHhfMWQubyAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZ2Yy92dmNfbXZzLm8gICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2dmMvdnZjX3BzLm8gICAgICAgICAgICBcCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19yZWZzLm8KXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZj L3Z2Y19yZWZzLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuYyBiL2xpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuYwppbmRleCBjZmUyNjc1NmZlLi5kNDZhNTIyYTBkIDEwMDY0NAot LS0gYS9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmMKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0 dS5jCkBAIC0yNCw2ICsyNCwzNSBAQAogI2luY2x1ZGUgInZ2Y19jdHUuaCIKICNpbmNsdWRlICJ2 dmNfbXZzLmgiCiAKK3ZvaWQgZmZfdnZjX2RlY29kZV9uZWlnaGJvdXIoVlZDTG9jYWxDb250ZXh0 ICpsYywgY29uc3QgaW50IHhfY3RiLCBjb25zdCBpbnQgeV9jdGIsCisgICAgY29uc3QgaW50IHJ4 LCBjb25zdCBpbnQgcnksIGNvbnN0IGludCBycykKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZj ID0gbGMtPmZjOworICAgIGNvbnN0IGludCBjdGJfc2l6ZSAgICAgICAgID0gZmMtPnBzLnNwcy0+ Y3RiX3NpemVfeTsKKworICAgIGxjLT5lbmRfb2ZfdGlsZXNfeCA9IGZjLT5wcy5zcHMtPndpZHRo OworICAgIGxjLT5lbmRfb2ZfdGlsZXNfeSA9IGZjLT5wcy5zcHMtPmhlaWdodDsKKyAgICBpZiAo ZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFtyeF0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9i ZFtyeCArIDFdKQorICAgICAgICBsYy0+ZW5kX29mX3RpbGVzX3ggPSBGRk1JTih4X2N0YiArIGN0 Yl9zaXplLCBsYy0+ZW5kX29mX3RpbGVzX3gpOworICAgIGlmIChmYy0+cHMucHBzLT5jdGJfdG9f cm93X2JkW3J5XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3J5ICsgMV0pCisgICAgICAg IGxjLT5lbmRfb2ZfdGlsZXNfeSA9IEZGTUlOKHlfY3RiICsgY3RiX3NpemUsIGxjLT5lbmRfb2Zf dGlsZXNfeSk7CisKKyAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgPSAwOworICAgIGlmIChyeCA+IDAg JiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFtyeF0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX2Nv bF9iZFtyeCAtIDFdKQorICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgfD0gQk9VTkRBUllfTEVG VF9USUxFOworICAgIGlmIChyeCA+IDAgJiYgZmMtPnRhYi5zbGljZV9pZHhbcnNdICE9IGZjLT50 YWIuc2xpY2VfaWR4W3JzIC0gMV0pCisgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyB8PSBCT1VO REFSWV9MRUZUX1NMSUNFOworICAgIGlmIChyeSA+IDAgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX3Jv d19iZFtyeV0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFtyeSAtIDFdKQorICAgICAgICBs Yy0+Ym91bmRhcnlfZmxhZ3MgfD0gQk9VTkRBUllfVVBQRVJfVElMRTsKKyAgICBpZiAocnkgPiAw ICYmIGZjLT50YWIuc2xpY2VfaWR4W3JzXSAhPSBmYy0+dGFiLnNsaWNlX2lkeFtycyAtIGZjLT5w cy5wcHMtPmN0Yl93aWR0aF0pCisgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyB8PSBCT1VOREFS WV9VUFBFUl9TTElDRTsKKyAgICBsYy0+Y3RiX2xlZnRfZmxhZyA9IHJ4ID4gMCAmJiAhKGxjLT5i b3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfVElMRSk7CisgICAgbGMtPmN0Yl91cF9mbGFn ICAgPSByeSA+IDAgJiYgIShsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxF KSAmJiAhKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1NMSUNFKTsKKyAgICBs Yy0+Y3RiX3VwX3JpZ2h0X2ZsYWcgPSBsYy0+Y3RiX3VwX2ZsYWcgJiYgKGZjLT5wcy5wcHMtPmN0 Yl90b19jb2xfYmRbcnhdID09IGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbcnggKyAxXSkgJiYK KyAgICAgICAgKGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbcnldID09IGZjLT5wcy5wcHMtPmN0 Yl90b19yb3dfYmRbcnkgLSAxXSk7CisgICAgbGMtPmN0Yl91cF9sZWZ0X2ZsYWcgPSBsYy0+Y3Ri X2xlZnRfZmxhZyAmJiBsYy0+Y3RiX3VwX2ZsYWc7Cit9CisKIHZvaWQgZmZfdnZjX3NldF9uZWln aGJvdXJfYXZhaWxhYmxlKFZWQ0xvY2FsQ29udGV4dCAqbGMsCiAgICAgY29uc3QgaW50IHgwLCBj b25zdCBpbnQgeTAsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKIHsKQEAgLTM5LDYgKzY4LDE2 IEBAIHZvaWQgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKFZWQ0xvY2FsQ29udGV4dCAq bGMsCiAgICAgbGMtPm5hLmNhbmRfdXBfcmlnaHQgPSBsYy0+bmEuY2FuZF91cF9yaWdodF9zYXAg JiYgKHgwICsgdykgPCBsYy0+ZW5kX29mX3RpbGVzX3g7CiB9CiAKK3ZvaWQgZmZfdnZjX2N0dV9m cmVlX2N1cyhDVFUgKmN0dSkKK3sKKyAgICB3aGlsZSAoY3R1LT5jdXMpIHsKKyAgICAgICAgQ29k aW5nVW5pdCAqY3UgICAgICA9IGN0dS0+Y3VzOworICAgICAgICBBVkJ1ZmZlclJlZiAqYnVmICAg ID0gY3UtPmJ1ZjsKKworICAgICAgICBjdHUtPmN1cyA9IGN0dS0+Y3VzLT5uZXh0OworICAgICAg ICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7CisgICAgfQorfQogCiB2b2lkIGZmX3Z2Y19lcF9pbml0 X3N0YXRfY29lZmYoRW50cnlQb2ludCAqZXAsCiAJY29uc3QgaW50IGJpdF9kZXB0aCwgY29uc3Qg aW50IHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJsZWRfZmxhZykKZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaCBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaAppbmRl eCBlZTIyZjY2N2M3Li43NjJhYzU3ZjBhIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy92dmNf Y3R1LmgKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCkBAIC00MDIsNSArNDAyLDcgQEAg c3RydWN0IEFMRlBhcmFtcyB7CiAKIC8vdXRpbHMKIHZvaWQgZmZfdnZjX3NldF9uZWlnaGJvdXJf YXZhaWxhYmxlKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwLCBpbnQgdywgaW50 IGgpOwordm9pZCBmZl92dmNfZGVjb2RlX25laWdoYm91cihWVkNMb2NhbENvbnRleHQgKmxjLCBp bnQgeF9jdGIsIGludCB5X2N0YiwgaW50IHJ4LCBpbnQgcnksIGludCBycyk7Cit2b2lkIGZmX3Z2 Y19jdHVfZnJlZV9jdXMoQ1RVICpjdHUpOwogdm9pZCBmZl92dmNfZXBfaW5pdF9zdGF0X2NvZWZm KEVudHJ5UG9pbnQgKmVwLCBpbnQgYml0X2RlcHRoLCBpbnQgcGVyc2lzdGVudF9yaWNlX2FkYXB0 YXRpb25fZW5hYmxlZF9mbGFnKTsKICNlbmRpZiAvLyBBVkNPREVDX1ZWQ19DVFVfSApkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMgYi9saWJhdmNvZGVjL3Z2Yy92dmNfaW50 cmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40MjQzZDc4ODZiCi0t LSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMKQEAgLTAsMCArMSw3 NzEgQEAKKy8qCisgKiBWVkMgaW50cmEgcHJlZGljdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykg MjAyMSBOdW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lu Y2x1ZGUgInZ2Y19kYXRhLmgiCisjaW5jbHVkZSAidnZjX2ludGVyLmgiCisjaW5jbHVkZSAidnZj X2ludHJhLmgiCisjaW5jbHVkZSAidnZjX2l0eF8xZC5oIgorCitzdGF0aWMgaW50IGlzX2NjbG0o ZW51bSBJbnRyYVByZWRNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGUgPT0gSU5UUkFfTFRf Q0NMTSB8fCBtb2RlID09IElOVFJBX0xfQ0NMTSB8fCBtb2RlID09IElOVFJBX1RfQ0NMTTsKK30K Kworc3RhdGljIGludCBkZXJpdmVfaWxmbnN0X3ByZWRfbW9kZV9pbnRyYShjb25zdCBWVkNMb2Nh bENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1CbG9jayAqdGIpCit7CisgICAgY29uc3QgVlZD RnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5w cy5zcHM7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgICAgPSBsYy0+Y3U7CisgICAg Y29uc3QgaW50IHhfdGIgICAgICAgICAgICAgICAgPSB0Yi0+eDAgPj4gZmMtPnBzLnNwcy0+bWlu X2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5X3RiICAgICAgICAgICAgICAgID0gdGIt PnkwID4+IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeF9j ICAgICAgICAgICAgICAgICA9ICh0Yi0+eDAgKyAodGItPnRiX3dpZHRoIDw8IHNwcy0+aHNoaWZ0 WzFdID4+IDEpICkgPj4gZmMtPnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0 IGludCB5X2MgICAgICAgICAgICAgICAgID0gKHRiLT55MCArICh0Yi0+dGJfaGVpZ2h0IDw8IHNw cy0+dnNoaWZ0WzFdID4+IDEpKSA+PiBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7Cisg ICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgICAgPSBmYy0+cHMucHBzLT5taW5fY2Jfd2lk dGg7CisgICAgY29uc3QgaW50IGludHJhX21pcF9mbGFnICAgICAgPSBTQU1QTEVfQ1RCKGZjLT50 YWIuaW1mLCB4X3RiLCB5X3RiKTsKKyAgICBpbnQgcHJlZF9tb2RlX2ludHJhID0gdGItPmNfaWR4 ID09IDAgPyBjdS0+aW50cmFfcHJlZF9tb2RlX3kgOiBjdS0+aW50cmFfcHJlZF9tb2RlX2M7Cisg ICAgaWYgKGludHJhX21pcF9mbGFnICYmICF0Yi0+Y19pZHgpIHsKKyAgICAgICAgcHJlZF9tb2Rl X2ludHJhID0gSU5UUkFfUExBTkFSOworICAgIH0gZWxzZSBpZiAoaXNfY2NsbShwcmVkX21vZGVf aW50cmEpKSB7CisgICAgICAgIGludCBpbnRyYV9taXBfZmxhZ19jID0gU0FNUExFX0NUQihmYy0+ dGFiLmltZiwgeF9jLCB5X2MpOworICAgICAgICBpbnQgY3VfcHJlZF9tb2RlID0gU0FNUExFX0NU QihmYy0+dGFiLmNwbVswXSwgeF9jLCB5X2MpOworICAgICAgICBpZiAoaW50cmFfbWlwX2ZsYWdf YykgeworICAgICAgICAgICAgcHJlZF9tb2RlX2ludHJhID0gSU5UUkFfUExBTkFSOworICAgICAg ICB9IGVsc2UgaWYgKGN1X3ByZWRfbW9kZSA9PSBNT0RFX0lCQyB8fCBjdV9wcmVkX21vZGUgPT0g TU9ERV9QTFQpIHsKKyAgICAgICAgICAgIHByZWRfbW9kZV9pbnRyYSA9IElOVFJBX0RDOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJlZF9tb2RlX2ludHJhID0gU0FNUExFX0NUQihm Yy0+dGFiLmlwbSwgeF9jLCB5X2MpOworICAgICAgICB9CisgICAgfQorICAgIHByZWRfbW9kZV9p bnRyYSA9IGZmX3Z2Y193aWRlX2FuZ2xlX21vZGVfbWFwcGluZyhjdSwgdGItPnRiX3dpZHRoLCB0 Yi0+dGJfaGVpZ2h0LCB0Yi0+Y19pZHgsIHByZWRfbW9kZV9pbnRyYSk7CisKKyAgICByZXR1cm4g cHJlZF9tb2RlX2ludHJhOworfQorCisvLzguNy40IFRyYW5zZm9ybWF0aW9uIHByb2Nlc3MgZm9y IHNjYWxlZCB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitzdGF0aWMgdm9pZCBpbGZuc3RfdHJhbnNm b3JtKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIFRyYW5zZm9ybUJsb2NrICp0YikKK3sKKyAg ICBjb25zdCBWVkNTUFMgKnNwcyAgICAgICAgICAgPSBsYy0+ZmMtPnBzLnNwczsKKyAgICBjb25z dCBDb2RpbmdVbml0ICpjdSAgICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHcgICAgICAg ICAgICAgICAgID0gdGItPnRiX3dpZHRoOworICAgIGNvbnN0IGludCBoICAgICAgICAgICAgICAg ICA9IHRiLT50Yl9oZWlnaHQ7CisgICAgY29uc3QgaW50IG5fbGZuc3Rfb3V0X3NpemUgID0gKHcg Pj0gOCAmJiBoID49IDgpID8gNDggOiAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBu TGZuc3RPdXRTaXplCisgICAgY29uc3QgaW50IGxvZzJfbGZuc3Rfc2l6ZSAgID0gKHcgPj0gOCAm JiBoID49IDgpID8gMyA6IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBsb2cyTGZu c3RTaXplCisgICAgY29uc3QgaW50IG5fbGZuc3Rfc2l6ZSAgICAgID0gMSA8PCBsb2cyX2xmbnN0 X3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBuTGZuc3RTaXplCisg ICAgY29uc3QgaW50IG5vbl96ZXJvX3NpemUgICAgID0gKCh3ID09IDggJiYgaCA9PSA4KSB8fCAo dyA9PSA0ICYmIGggPT0gNCkpID8gOCA6IDE2OyAgLy8vPCBub25aZXJvU2l6ZQorICAgIGNvbnN0 IGludCBwcmVkX21vZGVfaW50cmEgICA9IGRlcml2ZV9pbGZuc3RfcHJlZF9tb2RlX2ludHJhKGxj LCB0Yik7CisgICAgY29uc3QgaW50IHRyYW5zcG9zZSAgICAgICAgID0gcHJlZF9tb2RlX2ludHJh ID4gMzQ7CisgICAgaW50IHVbMTZdLCB2WzQ4XTsKKworICAgIGZvciAoaW50IHggPSAwOyB4IDwg bm9uX3plcm9fc2l6ZTsgeCsrKSB7CisgICAgICAgIGludCB4YyA9IGZmX3Z2Y19kaWFnX3NjYW5f eFsyXVsyXVt4XTsKKyAgICAgICAgaW50IHljID0gZmZfdnZjX2RpYWdfc2Nhbl95WzJdWzJdW3hd OworICAgICAgICB1W3hdID0gdGItPmNvZWZmc1t3ICogeWMgKyB4Y107CisgICAgfQorICAgIGZm X3Z2Y19pbnZfbGZuc3RfMWQodiwgdSwgbm9uX3plcm9fc2l6ZSwgbl9sZm5zdF9vdXRfc2l6ZSwg cHJlZF9tb2RlX2ludHJhLAorICAgICAgICAgICAgICAgICAgICAgICAgY3UtPmxmbnN0X2lkeCwg c3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSk7CisgICAgaWYgKHRyYW5zcG9zZSkgeworICAgICAg ICBpbnQgKmRzdCA9IHRiLT5jb2VmZnM7CisgICAgICAgIGNvbnN0IGludCAqc3JjID0gdjsKKyAg ICAgICAgaWYgKG5fbGZuc3Rfc2l6ZSA9PSA0KSB7CisgICAgICAgICAgICBmb3IgKGludCB5ID0g MDsgeSA8IDQ7IHkrKykgeworICAgICAgICAgICAgICAgIGRzdFswXSA9IHNyY1swXTsKKyAgICAg ICAgICAgICAgICBkc3RbMV0gPSBzcmNbNF07CisgICAgICAgICAgICAgICAgZHN0WzJdID0gc3Jj WzhdOworICAgICAgICAgICAgICAgIGRzdFszXSA9IHNyY1sxMl07CisgICAgICAgICAgICAgICAg c3JjKys7CisgICAgICAgICAgICAgICAgZHN0ICs9IHc7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IDg7IHkrKykgeworICAg ICAgICAgICAgICAgIGRzdFswXSA9IHNyY1swXTsKKyAgICAgICAgICAgICAgICBkc3RbMV0gPSBz cmNbOF07CisgICAgICAgICAgICAgICAgZHN0WzJdID0gc3JjWzE2XTsKKyAgICAgICAgICAgICAg ICBkc3RbM10gPSBzcmNbMjRdOworICAgICAgICAgICAgICAgIGlmICh5IDwgNCkgeworICAgICAg ICAgICAgICAgICAgICBkc3RbNF0gPSBzcmNbMzJdOworICAgICAgICAgICAgICAgICAgICBkc3Rb NV0gPSBzcmNbMzZdOworICAgICAgICAgICAgICAgICAgICBkc3RbNl0gPSBzcmNbNDBdOworICAg ICAgICAgICAgICAgICAgICBkc3RbN10gPSBzcmNbNDRdOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBzcmMrKzsKKyAgICAgICAgICAgICAgICBkc3QgKz0gdzsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ICpkc3QgPSB0Yi0+ Y29lZmZzOworICAgICAgICBjb25zdCBpbnQgKnNyYyA9IHY7CisgICAgICAgIGZvciAoaW50IHkg PSAwOyB5IDwgbl9sZm5zdF9zaXplOyB5KyspIHsKKyAgICAgICAgICAgIGludCBzaXplID0gKHkg PCA0KSA/IG5fbGZuc3Rfc2l6ZSA6IDQ7CisgICAgICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHNp emUgKiBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBzcmMgKz0gc2l6ZTsKKyAgICAgICAgICAg IGRzdCArPSB3OworICAgICAgICB9CisgICAgfQorICAgIHRiLT5tYXhfc2Nhbl94ID0gbl9sZm5z dF9zaXplIC0gMTsKKyAgICB0Yi0+bWF4X3NjYW5feSA9IG5fbGZuc3Rfc2l6ZSAtIDE7Cit9CisK Ky8vcGFydCBvZiA4LjcuNCBUcmFuc2Zvcm1hdGlvbiBwcm9jZXNzIGZvciBzY2FsZWQgdHJhbnNm b3JtIGNvZWZmaWNpZW50cworc3RhdGljIHZvaWQgZGVyaXZlX3RyYW5zZm9ybV90eXBlKGNvbnN0 IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IFRy YW5zZm9ybUJsb2NrICp0YiwgZW51bSBUeFR5cGUgKnRyaCwgZW51bSBUeFR5cGUgKnRydikKK3sK KyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSA9IGxjLT5jdTsKKyAgICBzdGF0aWMgY29uc3QgZW51 bSBUeFR5cGUgbXRzX3RvX3RyaFtdID0ge0RDVDIsIERTVDcsIERDVDgsIERTVDcsIERDVDh9Owor ICAgIHN0YXRpYyBjb25zdCBlbnVtIFR4VHlwZSBtdHNfdG9fdHJ2W10gPSB7RENUMiwgRFNUNywg RFNUNywgRENUOCwgRENUOH07CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgPSBmYy0+cHMu c3BzOworICAgIGludCBpbXBsaWNpdF9tdHNfZW5hYmxlZCA9IDA7CisgICAgaWYgKHRiLT5jX2lk eCB8fCAoY3UtPmlzcF9zcGxpdF90eXBlICE9IElTUF9OT19TUExJVCAmJiBjdS0+bGZuc3RfaWR4 KSkgeworICAgICAgICAqdHJoID0gKnRydiA9IERDVDI7CisgICAgICAgIHJldHVybjsKKyAgICB9 CisKKyAgICBpZiAoc3BzLT5tdHNfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIGlmIChjdS0+aXNw X3NwbGl0X3R5cGUgIT0gSVNQX05PX1NQTElUIHx8CisgICAgICAgICAgICAoY3UtPnNidF9mbGFn ICYmIEZGTUFYKHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdodCkgPD0gMzIpIHx8CisgICAgICAg ICAgICAoIXNwcy0+ZXhwbGljaXRfbXRzX2ludHJhX2VuYWJsZWRfZmxhZyAmJiBjdS0+cHJlZF9t b2RlID09IE1PREVfSU5UUkEgJiYKKyAgICAgICAgICAgICFjdS0+bGZuc3RfaWR4ICYmICFjdS0+ aW50cmFfbWlwX2ZsYWcpKSB7CisgICAgICAgICAgICBpbXBsaWNpdF9tdHNfZW5hYmxlZCA9IDE7 CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGltcGxpY2l0X210c19lbmFibGVkKSB7CisgICAg ICAgIGNvbnN0IGludCB3ID0gdGItPnRiX3dpZHRoOworICAgICAgICBjb25zdCBpbnQgaCA9IHRi LT50Yl9oZWlnaHQ7CisgICAgICAgIGlmIChjdS0+c2J0X2ZsYWcpIHsKKyAgICAgICAgICAgICp0 cmggPSAoY3UtPnNidF9ob3Jpem9udGFsX2ZsYWcgIHx8IGN1LT5zYnRfcG9zX2ZsYWcpID8gRFNU NyA6IERDVDg7CisgICAgICAgICAgICAqdHJ2ID0gKCFjdS0+c2J0X2hvcml6b250YWxfZmxhZyB8 fCBjdS0+c2J0X3Bvc19mbGFnKSA/IERTVDcgOiBEQ1Q4OworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgKnRyaCA9ICh3ID49IDQgJiYgdyA8PSAxNikgPyBEU1Q3IDogRENUMjsKKyAgICAg ICAgICAgICp0cnYgPSAoaCA+PSA0ICYmIGggPD0gMTYpID8gRFNUNyA6IERDVDI7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAqdHJoID0gbXRzX3RvX3RyaFtjdS0+bXRz X2lkeF07CisgICAgKnRydiA9IG10c190b190cnZbY3UtPm10c19pZHhdOworfQorCitzdGF0aWMg dm9pZCBhZGRfcmVzaWR1YWxfZm9yX2pvaW50X2NvZGluZ19jaHJvbWEoVlZDTG9jYWxDb250ZXh0 ICpsYywKKyAgICBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiLCBj b25zdCBpbnQgY2hyb21hX3NjYWxlKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMg ID0gbGMtPmZjOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1ID0gbGMtPmN1OworICAgIGNvbnN0 IGludCBjX3NpZ24gPSAxIC0gMiAqIGZjLT5wcy5waC0+am9pbnRfY2Jjcl9zaWduX2ZsYWc7Cisg ICAgY29uc3QgaW50IHNoaWZ0ICA9IHR1LT5jb2RlZF9mbGFnWzFdIF4gdHUtPmNvZGVkX2ZsYWdb Ml07CisgICAgY29uc3QgaW50IGNfaWR4ICA9IDEgKyB0dS0+Y29kZWRfZmxhZ1sxXTsKKyAgICBj b25zdCBwdHJkaWZmX3Qgc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAg Y29uc3QgaW50IGhzID0gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQg dnMgPSBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgIHVpbnQ4X3QgKmRzdCA9ICZmYy0+ ZnJhbWUtPmRhdGFbY19pZHhdWyh0Yi0+eTAgPj4gdnMpICogc3RyaWRlICsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodGItPngwID4+IGhzKSA8PCBmYy0+cHMu c3BzLT5waXhlbF9zaGlmdCldOworICAgIGlmIChjaHJvbWFfc2NhbGUpIHsKKyAgICAgICAgZmMt PnZ2Y2RzcC5pdHgucHJlZF9yZXNpZHVhbF9qb2ludCh0Yi0+Y29lZmZzLCB0Yi0+dGJfd2lkdGgs IHRiLT50Yl9oZWlnaHQsIGNfc2lnbiwgc2hpZnQpOworICAgICAgICBmYy0+dnZjZHNwLmludHJh LmxtY3Nfc2NhbGVfY2hyb21hKGxjLCB0Yi0+Y29lZmZzLCB0Yi0+Y29lZmZzLCB0Yi0+dGJfd2lk dGgsIHRiLT50Yl9oZWlnaHQsIGN1LT54MCwgY3UtPnkwKTsKKyAgICAgICAgZmMtPnZ2Y2RzcC5p dHguYWRkX3Jlc2lkdWFsKGRzdCwgdGItPmNvZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVp Z2h0LCBzdHJpZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZjLT52dmNkc3AuaXR4LmFkZF9y ZXNpZHVhbF9qb2ludChkc3QsIHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdo dCwgc3RyaWRlLCBjX3NpZ24sIHNoaWZ0KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgYWRkX3Jl Y29uc3RydWN0ZWRfYXJlYShWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgY2hfdHlwZSwg Y29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKK3sK KyAgICBjb25zdCBWVkNTUFMgKnNwcyAgICAgICA9IGxjLT5mYy0+cHMuc3BzOworICAgIGNvbnN0 IGludCBocyA9IHNwcy0+aHNoaWZ0W2NoX3R5cGVdOworICAgIGNvbnN0IGludCB2cyA9IHNwcy0+ dnNoaWZ0W2NoX3R5cGVdOworICAgIFJlY29uc3RydWN0ZWRBcmVhICphOworCisgICAgaWYgKGxj LT5udW1fcmFzW2NoX3R5cGVdID49IEZGX0FSUkFZX0VMRU1TKGxjLT5yYXNbY2hfdHlwZV0pKQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIGEgPSAmbGMtPnJhc1tj aF90eXBlXVtsYy0+bnVtX3Jhc1tjaF90eXBlXV07CisgICAgYS0+eCA9IHgwID4+IGhzOworICAg IGEtPnkgPSB5MCA+PiB2czsKKyAgICBhLT53ID0gdyA+PiBoczsKKyAgICBhLT5oID0gaCA+PiB2 czsKKyAgICBsYy0+bnVtX3Jhc1tjaF90eXBlXSsrOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIGFkZF90dV9hcmVhKGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBpbnQgKngwLCBp bnQgKnkwLCBpbnQgKncsIGludCAqaCkKK3sKKyAgICAqeDAgPSB0dS0+eDA7CisgICAgKnkwID0g dHUtPnkwOworICAgICp3ID0gdHUtPndpZHRoOworICAgICpoID0gdHUtPmhlaWdodDsKK30KKwor I2RlZmluZSBNSU5fSVNQX1BSRURfV0lEVEggNAorc3RhdGljIGludCBnZXRfbHVtYV9wcmVkaWN0 X3VuaXQoY29uc3QgQ29kaW5nVW5pdCAqY3UsIGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBjb25z dCBpbnQgaWR4LCBpbnQgKngwLCBpbnQgKnkwLCBpbnQgKncsIGludCAqaCkKK3sKKyAgICBpbnQg aGFzX2x1bWEgPSAxOworICAgIGFkZF90dV9hcmVhKHR1LCB4MCwgeTAsIHcsIGgpOworICAgIGlm IChjdS0+aXNwX3NwbGl0X3R5cGUgPT0gSVNQX1ZFUl9TUExJVCAmJiB0dS0+d2lkdGggPCBNSU5f SVNQX1BSRURfV0lEVEgpIHsKKyAgICAgICAgKncgPSBNSU5fSVNQX1BSRURfV0lEVEg7CisgICAg ICAgIGhhc19sdW1hID0gIShpZHggJSAoTUlOX0lTUF9QUkVEX1dJRFRIIC8gdHUtPndpZHRoKSk7 CisgICAgfQorICAgIHJldHVybiBoYXNfbHVtYTsKK30KKworc3RhdGljIGludCBnZXRfY2hyb21h X3ByZWRpY3RfdW5pdChjb25zdCBDb2RpbmdVbml0ICpjdSwgY29uc3QgVHJhbnNmb3JtVW5pdCAq dHUsIGNvbnN0IGludCBpZHgsIGludCAqeDAsIGludCAqeTAsIGludCAqdywgaW50ICpoKQorewor ICAgIGlmIChjdS0+aXNwX3NwbGl0X3R5cGUgPT0gSVNQX05PX1NQTElUKSB7CisgICAgICAgIGFk ZF90dV9hcmVhKHR1LCB4MCwgeTAsIHcsIGgpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cisg ICAgaWYgKGlkeCA9PSBjdS0+bnVtX2ludHJhX3N1YnBhcnRpdGlvbnMgLSAxKSB7CisgICAgICAg ICp4MCA9IGN1LT54MDsKKyAgICAgICAgKnkwID0gY3UtPnkwOworICAgICAgICAqdyA9IGN1LT5j Yl93aWR0aDsKKyAgICAgICAgKmggPSBjdS0+Y2JfaGVpZ2h0OworICAgICAgICByZXR1cm4gMTsK KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8vOC40LjUuMSBHZW5lcmFsIGRlY29kaW5nIHBy b2Nlc3MgZm9yIGludHJhIGJsb2Nrcworc3RhdGljIHZvaWQgcHJlZGljdF9pbnRyYShWVkNMb2Nh bENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgY29uc3QgaW50IGlkeCwgY29u c3QgaW50IHRhcmdldF9jaF90eXBlKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMg ICAgICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSAgICAgICAgPSBsYy0+ Y3U7CisgICAgY29uc3QgVlZDVHJlZVR5cGUgdHJlZV90eXBlID0gY3UtPnRyZWVfdHlwZTsKKyAg ICBpbnQgeDAsIHkwLCB3LCBoOworICAgIGlmIChjdS0+cHJlZF9tb2RlICE9IE1PREVfSU5UUkEp IHsKKyAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShsYywgdGFyZ2V0X2NoX3R5cGUsIHR1 LT54MCwgdHUtPnkwLCB0dS0+d2lkdGgsIHR1LT5oZWlnaHQpOworICAgICAgICByZXR1cm47Cisg ICAgfQorICAgIGlmICghdGFyZ2V0X2NoX3R5cGUgJiYgdHJlZV90eXBlICE9IERVQUxfVFJFRV9D SFJPTUEpIHsKKyAgICAgICAgaWYgKGdldF9sdW1hX3ByZWRpY3RfdW5pdChjdSwgdHUsIGlkeCwg JngwLCAmeTAsICZ3LCAmaCkpIHsKKyAgICAgICAgICAgIGZmX3Z2Y19zZXRfbmVpZ2hib3VyX2F2 YWlsYWJsZShsYywgeDAsIHkwLCB3LCBoKTsKKyAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEu aW50cmFfcHJlZChsYywgeDAsIHkwLCB3LCBoLCAwKTsKKyAgICAgICAgICAgIGFkZF9yZWNvbnN0 cnVjdGVkX2FyZWEobGMsIDAsIHgwLCB5MCwgdywgaCk7CisgICAgICAgIH0KKyAgICB9CisgICAg aWYgKHRhcmdldF9jaF90eXBlICYmIHRyZWVfdHlwZSAhPSBEVUFMX1RSRUVfTFVNQSkgeworICAg ICAgICBpZiAoZ2V0X2Nocm9tYV9wcmVkaWN0X3VuaXQoY3UsIHR1LCBpZHgsICZ4MCwgJnkwLCAm dywgJmgpKXsKKyAgICAgICAgICAgIGZmX3Z2Y19zZXRfbmVpZ2hib3VyX2F2YWlsYWJsZShsYywg eDAsIHkwLCB3LCBoKTsKKyAgICAgICAgICAgIGlmIChpc19jY2xtKGN1LT5pbnRyYV9wcmVkX21v ZGVfYykpIHsKKyAgICAgICAgICAgICAgICBmYy0+dnZjZHNwLmludHJhLmludHJhX2NjbG1fcHJl ZChsYywgeDAsIHkwLCB3LCBoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgZmMtPnZ2Y2RzcC5pbnRyYS5pbnRyYV9wcmVkKGxjLCB4MCwgeTAsIHcsIGgsIDEpOworICAg ICAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEuaW50cmFfcHJlZChsYywgeDAsIHkwLCB3LCBo LCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZF9yZWNvbnN0cnVjdGVkX2FyZWEo bGMsIDEsIHgwLCB5MCwgdywgaCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IHNjYWxlX2NsaXAoaW50ICpjb2VmZiwgY29uc3QgaW50IG56dywgY29uc3QgaW50IHcsIGNvbnN0 IGludCBoLAorICAgIGNvbnN0IGludCBzaGlmdCwgY29uc3QgaW50IGxvZzJfdHJhbnNmb3JtX3Jh bmdlKQoreworICAgIGNvbnN0IGludCBhZGQgPSAxIDw8IChzaGlmdCAtIDEpOworICAgIGZvciAo aW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGludCAqcCA9IGNvZWZmICsgeSAqIHc7 CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnp3OyB4KyspIHsKKyAgICAgICAgICAgICpw ID0gYXZfY2xpcF9pbnRwMigoKnAgKyBhZGQpID4+IHNoaWZ0LCBsb2cyX3RyYW5zZm9ybV9yYW5n ZSk7CisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0KHAsIDAsIHNp emVvZigqcCkgKiAodyAtIG56dykpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2NhbGUoaW50 ICpvdXQsIGNvbnN0IGludCAqaW4sIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgaW50 IHNoaWZ0KQoreworICAgIGNvbnN0IGludCBhZGQgPSAxIDw8IChzaGlmdCAtIDEpOworICAgIGZv ciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg dzsgeCsrKSB7CisgICAgICAgICAgICBpbnQgKm8gPSBvdXQgKyB5ICogdyArIHg7CisgICAgICAg ICAgICBjb25zdCBpbnQgKmkgPSBpbiArIHkgKiB3ICsgeDsKKyAgICAgICAgICAgICpvID0gKCpp ICsgYWRkKSA+PiBzaGlmdDsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gcGFydCBvZiA4Ljcu MyBTY2FsaW5nIHByb2Nlc3MgZm9yIHRyYW5zZm9ybSBjb2VmZmljaWVudHMKK3N0YXRpYyB2b2lk IGRlcml2ZV9xcChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1Vbml0 ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgICAg ICAgICA9IGxjLT5mYy0+cHMuc3BzOworICAgIGNvbnN0IFZWQ1NIICpzaCAgICAgICAgICAgICA9 ICZsYy0+c2MtPnNoOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1ICAgICAgICA9IGxjLT5jdTsK KyAgICBpbnQgcXAsIHFwX2FjdF9vZmZzZXQ7CisKKyAgICBpZiAodGItPmNfaWR4ID09IDApIHsK KyAgICAgICAgLy9maXggbWUKKyAgICAgICAgcXAgPSBjdS0+cXBbTFVNQV0gKyBzcHMtPnFwX2Jk X29mZnNldDsKKyAgICAgICAgcXBfYWN0X29mZnNldCA9IGN1LT5hY3RfZW5hYmxlZF9mbGFnID8g LTUgOiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGludCBpc19qY2JjciA9IHR1LT5q b2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWcgJiYgdHUtPmNvZGVkX2ZsYWdbQ0JdICYmIHR1LT5jb2Rl ZF9mbGFnW0NSXTsKKyAgICAgICAgY29uc3QgaW50IGlkeCA9IGlzX2pjYmNyID8gSkNCQ1IgOiB0 Yi0+Y19pZHg7CisgICAgICAgIHFwID0gY3UtPnFwW2lkeF07CisgICAgICAgIHFwX2FjdF9vZmZz ZXQgPSBjdS0+YWN0X2VuYWJsZWRfZmxhZyA/IDEgOiAwOworICAgIH0KKyAgICBpZiAodGItPnRz KSB7CisgICAgICAgIGNvbnN0IGludCBxcF9wcmltZV90c19taW4gPSA0ICsgNiAqIHNwcy0+bWlu X3FwX3ByaW1lX3RzOworCisgICAgICAgIHRiLT5xcCA9IGF2X2NsaXAocXAgKyBxcF9hY3Rfb2Zm c2V0LCBxcF9wcmltZV90c19taW4sIDYzICsgc3BzLT5xcF9iZF9vZmZzZXQpOworICAgICAgICB0 Yi0+cmVjdF9ub25fdHNfZmxhZyA9IDA7CisgICAgICAgIHRiLT5iZF9zaGlmdCA9IDEwOworICAg IH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGludCBsb2dfc3VtID0gdGItPmxvZzJfdGJfd2lkdGgg KyB0Yi0+bG9nMl90Yl9oZWlnaHQ7CisgICAgICAgIGNvbnN0IGludCByZWN0X25vbl90c19mbGFn ID0gbG9nX3N1bSAmIDE7CisKKyAgICAgICAgdGItPnFwID0gYXZfY2xpcChxcCArIHFwX2FjdF9v ZmZzZXQsIDAsIDYzICsgc3BzLT5xcF9iZF9vZmZzZXQpOworICAgICAgICB0Yi0+cmVjdF9ub25f dHNfZmxhZyA9IHJlY3Rfbm9uX3RzX2ZsYWc7CisgICAgICAgIHRiLT5iZF9zaGlmdCA9IHNwcy0+ Yml0X2RlcHRoICsgcmVjdF9ub25fdHNfZmxhZyArIChsb2dfc3VtIC8gMikKKyAgICAgICAgICAg ICAgICAgICAgICsgMTAgLSBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlICsgc2gtPmRlcF9xdWFu dF91c2VkX2ZsYWc7CisgICAgfQorICAgIHRiLT5iZF9vZmZzZXQgPSAoMSA8PCB0Yi0+YmRfc2hp ZnQpID4+IDE7Cit9CisKKy8vOC43LjMgU2NhbGluZyBwcm9jZXNzIGZvciB0cmFuc2Zvcm0gY29l ZmZpY2llbnRzCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgZGVyaXZlX3NjYWxlKGNvbnN0 IFRyYW5zZm9ybUJsb2NrICp0YiwgY29uc3QgaW50IHNoX2RlcF9xdWFudF91c2VkX2ZsYWcpCit7 CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgcmVtNls2MyArIDIgKiA2ICsgMV0gPSB7CisgICAg ICAgIDAsIDEsIDIsIDMsIDQsIDUsIDAsIDEsIDIsIDMsIDQsIDUsIDAsIDEsIDIsIDMsIDQsIDUs IDAsIDEsIDIsCisgICAgICAgIDMsIDQsIDUsIDAsIDEsIDIsIDMsIDQsIDUsIDAsIDEsIDIsIDMs IDQsIDUsIDAsIDEsIDIsIDMsIDQsIDUsCisgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDAsIDEs IDIsIDMsIDQsIDUsIDAsIDEsIDIsIDMsIDQsIDUsIDAsIDEsIDIsIDMsCisgICAgICAgIDQsIDUs IDAsIDEsIDIsIDMsIDQsIDUsIDAsIDEsIDIsIDMKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0 IHVpbnQ4X3QgZGl2Nls2MyArIDIgKiA2ICsgMV0gPSB7CisgICAgICAgIDAsIDAsIDAsIDAsIDAs IDAsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDIsIDMsICAzLCAgMywKKyAgICAg ICAgMywgMywgMywgNCwgNCwgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgNiwgNiwg NiwgIDYsICA2LAorICAgICAgICA3LCA3LCA3LCA3LCA3LCA3LCA4LCA4LCA4LCA4LCA4LCA4LCA5 LCA5LCA5LCA5LCA5LCA5LCAxMCwgMTAsIDEwLCAxMCwKKyAgICAgICAgMTAsIDEwLCAxMSwgMTEs IDExLCAxMSwgMTEsIDExLCAxMiwgMTIsIDEyLCAxMgorICAgIH07CisKKyAgICBjb25zdCBzdGF0 aWMgaW50IGxldmVsX3NjYWxlWzJdWzZdID0geworICAgICAgICB7IDQwLCA0NSwgNTEsIDU3LCA2 NCwgNzIgfSwKKyAgICAgICAgeyA1NywgNjQsIDcyLCA4MCwgOTAsIDEwMiB9CisgICAgfTsKKyAg ICBjb25zdCBpbnQgYWRkaW4gPSBzaF9kZXBfcXVhbnRfdXNlZF9mbGFnICYmICF0Yi0+dHM7Cisg ICAgY29uc3QgaW50IHFwICAgID0gdGItPnFwICsgYWRkaW47CisKKyAgICByZXR1cm4gbGV2ZWxf c2NhbGVbdGItPnJlY3Rfbm9uX3RzX2ZsYWddW3JlbTZbcXBdXSA8PCBkaXY2W3FwXTsKK30KKwor Ly84LjcuMyBTY2FsaW5nIHByb2Nlc3MgZm9yIHRyYW5zZm9ybSBjb2VmZmljaWVudHMKK3N0YXRp YyBjb25zdCB1aW50OF90KiBkZXJpdmVfc2NhbGVfbShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxj LCBjb25zdCBUcmFuc2Zvcm1CbG9jayAqdGIsIHVpbnQ4X3QgKnNjYWxlX20pCit7CisgICAgLy9U YWJsZSAzOCDigJMgU3BlY2lmaWNhdGlvbiBvZiB0aGUgc2NhbGluZyBtYXRyaXggaWRlbnRpZmll ciB2YXJpYWJsZSBpZCBhY2NvcmRpbmcgdG8gcHJlZE1vZGUsIGNJZHgsIG5UYlcsIGFuZCBuVGJI CisgICAgY29uc3QgaW50IGlkc1syXVszXVs2XSA9IHsKKyAgICAgICAgeworICAgICAgICAgICAg eyAgMCwgIDIsICA4LCAxNCwgMjAsIDI2IH0sCisgICAgICAgICAgICB7ICAwLCAgMywgIDksIDE1 LCAyMSwgMjEgfSwKKyAgICAgICAgICAgIHsgIDAsICA0LCAxMCwgMTYsIDIyLCAyMiB9CisgICAg ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIHsgIDAsICA1LCAxMSwgMTcsIDIzLCAyNyB9 LAorICAgICAgICAgICAgeyAgMCwgIDYsIDEyLCAxOCwgMjQsIDI0IH0sCisgICAgICAgICAgICB7 ICAxLCAgNywgMTMsIDE5LCAyNSwgMjUgfSwKKyAgICAgICAgfQorICAgIH07CisgICAgY29uc3Qg VlZDRnJhbWVQYXJhbVNldHMgKnBzID0gJmxjLT5mYy0+cHM7CisgICAgY29uc3QgVlZDU1BTICpz cHMgICAgICAgICAgID0gcHMtPnNwczsKKyAgICBjb25zdCBWVkNTSCAqc2ggICAgICAgICAgICAg PSAmbGMtPnNjLT5zaDsKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSAgICAgICAgPSBsYy0+Y3U7 CisgICAgY29uc3QgQVZCdWZmZXJSZWYgKnJlZjsKKyAgICBjb25zdCBWVkNTY2FsaW5nTGlzdCAq c2w7CisgICAgY29uc3QgaW50IGlkID0gaWRzW2N1LT5wcmVkX21vZGUgIT0gTU9ERV9JTlRSQV1b dGItPmNfaWR4XVtGRk1BWCh0Yi0+bG9nMl90Yl9oZWlnaHQsIHRiLT5sb2cyX3RiX3dpZHRoKSAt IDFdOworICAgIGNvbnN0IGludCBsb2cyX21hdHJpeF9zaXplID0gKGlkIDwgMikgPyAxIDogKGlk IDwgOCkgPyAyIDogMzsKKyAgICB1aW50OF90ICpwID0gc2NhbGVfbTsKKworICAgIGF2X2Fzc2Vy dDAoIXNwcy0+c2NhbGluZ19tYXRyaXhfZm9yX2FsdGVybmF0aXZlX2NvbG91cl9zcGFjZV9kaXNh YmxlZF9mbGFnKTsKKworICAgIGlmICghc2gtPmV4cGxpY2l0X3NjYWxpbmdfbGlzdF91c2VkX2Zs YWcgfHwgdGItPnRzIHx8CisgICAgICAgIHNwcy0+c2NhbGluZ19tYXRyaXhfZm9yX2xmbnN0X2Rp c2FibGVkX2ZsYWcgJiYgY3UtPmFwcGx5X2xmbnN0X2ZsYWdbdGItPmNfaWR4XSkKKyAgICAgICAg cmV0dXJuIGZmX3Z2Y19kZWZhdWx0X3NjYWxlX207CisKKyAgICByZWYgPSBwcy0+c2NhbGluZ19s aXN0W3BzLT5waC0+c2NhbGluZ19saXN0X2Fwc19pZF07CisgICAgaWYgKCFyZWYgfHwgIXJlZi0+ ZGF0YSkgeworICAgICAgICBhdl9sb2cobGMtPmZjLT5hdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJi dWc6IG5vIHNjYWxpbmcgbGlzdCBhcHMsIGlkID0gJWQiLCBwcy0+cGgtPnNjYWxpbmdfbGlzdF9h cHNfaWQpOworICAgICAgICByZXR1cm4gZmZfdnZjX2RlZmF1bHRfc2NhbGVfbTsKKyAgICB9CisK KyAgICBzbCA9IChjb25zdCBWVkNTY2FsaW5nTGlzdCAqKXJlZi0+ZGF0YTsKKyAgICBmb3IgKGlu dCB5ID0gdGItPm1pbl9zY2FuX3k7IHkgPD0gdGItPm1heF9zY2FuX3k7IHkrKykgeworICAgICAg ICBjb25zdCBpbnQgb2ZmID0geSA8PCBsb2cyX21hdHJpeF9zaXplID4+IHRiLT5sb2cyX3RiX2hl aWdodCA8PCBsb2cyX21hdHJpeF9zaXplOworICAgICAgICBjb25zdCB1aW50OF90ICptID0gJnNs LT5zY2FsaW5nX21hdHJpeF9yZWNbaWRdW29mZl07CisKKyAgICAgICAgZm9yIChpbnQgeCA9IHRi LT5taW5fc2Nhbl94OyB4IDw9IHRiLT5tYXhfc2Nhbl94OyB4KyspCisgICAgICAgICAgICAqcCsr ID0gbVt4IDw8IGxvZzJfbWF0cml4X3NpemUgPj4gdGItPmxvZzJfdGJfd2lkdGhdOworICAgIH0K KyAgICBpZiAoaWQgPj0gU0xfU1RBUlRfMTZ4MTYgJiYgIXRiLT5taW5fc2Nhbl94ICYmICF0Yi0+ bWluX3NjYW5feSkKKyAgICAgICAgKnNjYWxlX20gPSBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVj W2lkIC0gU0xfU1RBUlRfMTZ4MTZdOworCisgICAgcmV0dXJuIHNjYWxlX207Cit9CisKKy8vOC43 LjMgU2NhbGluZyBwcm9jZXNzIGZvciB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitzdGF0aWMgYXZf YWx3YXlzX2lubGluZSBpbnQgc2NhbGVfY29lZmYoY29uc3QgVHJhbnNmb3JtQmxvY2sgKnRiLCBp bnQgY29lZmYsCisgICAgY29uc3QgaW50IHNjYWxlLCBjb25zdCBpbnQgc2NhbGVfbSwgY29uc3Qg aW50IGxvZzJfdHJhbnNmb3JtX3JhbmdlKQoreworICAgIGNvZWZmID0gKGNvZWZmICogc2NhbGUg KiBzY2FsZV9tICsgdGItPmJkX29mZnNldCkgPj4gdGItPmJkX3NoaWZ0OworICAgIGNvZWZmID0g YXZfY2xpcF9pbnRwMihjb2VmZiwgbG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAgIHJldHVybiBj b2VmZjsKK30KKworc3RhdGljIHZvaWQgZGVxdWFudChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxj LCBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiKQoreworICAgIHVp bnQ4X3QgdG1wW01BWF9UQl9TSVpFICogTUFYX1RCX1NJWkVdOworICAgIGNvbnN0IFZWQ1NIICpz aCAgICAgICAgID0gJmxjLT5zYy0+c2g7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgPSBs Yy0+ZmMtPnBzLnNwczsKKyAgICBjb25zdCB1aW50OF90ICpzY2FsZV9tICA9IGRlcml2ZV9zY2Fs ZV9tKGxjLCB0YiwgdG1wKTsKKyAgICBpbnQgc2NhbGU7CisKKyAgICBkZXJpdmVfcXAobGMsIHR1 LCB0Yik7CisgICAgc2NhbGUgPSBkZXJpdmVfc2NhbGUodGIsIHNoLT5kZXBfcXVhbnRfdXNlZF9m bGFnKTsKKworICAgIGZvciAoaW50IHkgPSB0Yi0+bWluX3NjYW5feTsgeSA8PSB0Yi0+bWF4X3Nj YW5feTsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSB0Yi0+bWluX3NjYW5feDsgeCA8PSB0 Yi0+bWF4X3NjYW5feDsgeCsrKSB7CisgICAgICAgICAgICBpbnQgKmNvZWZmID0gdGItPmNvZWZm cyArIHkgKiB0Yi0+dGJfd2lkdGggKyB4OworCisgICAgICAgICAgICBpZiAoKmNvZWZmKQorICAg ICAgICAgICAgICAgICpjb2VmZiA9IHNjYWxlX2NvZWZmKHRiLCAqY29lZmYsIHNjYWxlLCAqc2Nh bGVfbSwgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSk7CisgICAgICAgICAgICBzY2FsZV9tKys7 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGl0eF8yZChjb25zdCBWVkNGcmFt ZUNvbnRleHQgKmZjLCBUcmFuc2Zvcm1CbG9jayAqdGIsIGNvbnN0IGVudW0gVHhUeXBlIHRyaCwg Y29uc3QgZW51bSBUeFR5cGUgdHJ2LCBpbnQgKnRlbXApCit7CisgICAgY29uc3QgVlZDU1BTICpz cHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IHcgICAgICAgICA9IHRiLT50Yl93aWR0 aDsKKyAgICBjb25zdCBpbnQgaCAgICAgICAgID0gdGItPnRiX2hlaWdodDsKKyAgICBjb25zdCBp bnQgbnp3ICAgICAgID0gdGItPm1heF9zY2FuX3ggKyAxOworCisgICAgZm9yIChpbnQgeCA9IDA7 IHggPCBuenc7IHgrKykKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguaXR4W3Rydl1bdGItPmxvZzJf dGJfaGVpZ2h0IC0gMV0odGVtcCArIHgsIHcsIHRiLT5jb2VmZnMgKyB4LCB3KTsKKyAgICBzY2Fs ZV9jbGlwKHRlbXAsIG56dywgdywgaCwgNywgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSk7CisK KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHgu aXR4W3RyaF1bdGItPmxvZzJfdGJfd2lkdGggLSAxXSh0Yi0+Y29lZmZzICsgeSAqIHcsIDEsIHRl bXAgKyB5ICogdywgMSk7CisgICAgc2NhbGUodGItPmNvZWZmcywgdGItPmNvZWZmcywgdywgaCwg NSArIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UgLSBzcHMtPmJpdF9kZXB0aCk7Cit9CisKK3N0 YXRpYyB2b2lkIGl0eF8xZChjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBUcmFuc2Zvcm1CbG9j ayAqdGIsIGNvbnN0IGVudW0gVHhUeXBlIHRyaCwgY29uc3QgZW51bSBUeFR5cGUgdHJ2LCBpbnQg ICp0ZW1wKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNv bnN0IGludCB3ICAgICAgICAgPSB0Yi0+dGJfd2lkdGg7CisgICAgY29uc3QgaW50IGggICAgICAg ICA9IHRiLT50Yl9oZWlnaHQ7CisKKyAgICBpZiAodyA+IDEpCisgICAgICAgIGZjLT52dmNkc3Au aXR4Lml0eFt0cmhdW3RiLT5sb2cyX3RiX3dpZHRoIC0gMV0odGVtcCwgMSwgdGItPmNvZWZmcywg MSk7CisgICAgZWxzZQorICAgICAgICBmYy0+dnZjZHNwLml0eC5pdHhbdHJ2XVt0Yi0+bG9nMl90 Yl9oZWlnaHQgLSAxXSh0ZW1wLCAxLCB0Yi0+Y29lZmZzLCAxKTsKKyAgICBzY2FsZSh0Yi0+Y29l ZmZzLCB0ZW1wLCB3LCBoLCA2ICsgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSAtIHNwcy0+Yml0 X2RlcHRoKTsKK30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtX2JkcGNtKFRyYW5zZm9ybUJsb2Nr ICp0YiwgY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgQ29kaW5nVW5pdCAqY3UpCit7 CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgID0gbGMtPmZjLT5wcy5zcHM7CisgICAgY29u c3QgSW50cmFQcmVkTW9kZSBtb2RlID0gdGItPmNfaWR4ID8gY3UtPmludHJhX3ByZWRfbW9kZV9j IDogY3UtPmludHJhX3ByZWRfbW9kZV95OworICAgIGNvbnN0IGludCB2ZXJ0aWNhbCAgICAgICA9 IG1vZGUgPT0gSU5UUkFfVkVSVDsKKyAgICBsYy0+ZmMtPnZ2Y2RzcC5pdHgudHJhbnNmb3JtX2Jk cGNtKHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdodCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLCBzcHMtPmxvZzJfdHJhbnNmb3Jt X3JhbmdlKTsKKyAgICBpZiAodmVydGljYWwpCisgICAgICAgIHRiLT5tYXhfc2Nhbl95ID0gdGIt PnRiX2hlaWdodCAtIDE7CisgICAgZWxzZQorICAgICAgICB0Yi0+bWF4X3NjYW5feCA9IHRiLT50 Yl93aWR0aCAtIDE7Cit9CisKK3N0YXRpYyB2b2lkIGl0cmFuc2Zvcm0oVlZDTG9jYWxDb250ZXh0 ICpsYywgVHJhbnNmb3JtVW5pdCAqdHUsIGNvbnN0IGludCB0dV9pZHgsIGNvbnN0IGludCB0YXJn ZXRfY2hfdHlwZSkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgPSBsYy0+ZmM7 CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgID0gZmMtPnBzLnNwczsKKyAgICBjb25z dCBWVkNTSCAqc2ggICAgICAgICAgICAgPSAmbGMtPnNjLT5zaDsKKyAgICBjb25zdCBDb2RpbmdV bml0ICpjdSAgICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHBzICAgICAgICAgICAgICAg ID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgREVDTEFSRV9BTElHTkVEKDMyLCBpbnQs IHRlbXApW01BWF9UQl9TSVpFICogTUFYX1RCX1NJWkVdOworCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCB0dS0+bmJfdGJzOyBpKyspIHsKKyAgICAgICAgVHJhbnNmb3JtQmxvY2sgKnRiICA9ICZ0 dS0+dGJzW2ldOworICAgICAgICBjb25zdCBpbnQgY19pZHggICAgID0gdGItPmNfaWR4OworICAg ICAgICBjb25zdCBpbnQgY2hfdHlwZSAgID0gY19pZHggPiAwOworCisgICAgICAgIGlmIChjaF90 eXBlID09IHRhcmdldF9jaF90eXBlICYmIHRiLT5oYXNfY29lZmZzKSB7CisgICAgICAgICAgICBj b25zdCBpbnQgdyAgICAgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICAgICAgICAgIGNvbnN0 IGludCBoICAgICAgICAgICAgID0gdGItPnRiX2hlaWdodDsKKyAgICAgICAgICAgIGNvbnN0IGlu dCBjaHJvbWFfc2NhbGUgID0gY2hfdHlwZSAmJiBzaC0+bG1jc191c2VkX2ZsYWcgJiYgZmMtPnBz LnBoLT5jaHJvbWFfcmVzaWR1YWxfc2NhbGVfZmxhZyAmJiAodyAqIGggPiA0KTsKKyAgICAgICAg ICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07 CisgICAgICAgICAgICBjb25zdCBpbnQgaHMgICAgICAgICAgICA9IHNwcy0+aHNoaWZ0W2NfaWR4 XTsKKyAgICAgICAgICAgIGNvbnN0IGludCB2cyAgICAgICAgICAgID0gc3BzLT52c2hpZnRbY19p ZHhdOworICAgICAgICAgICAgdWludDhfdCAqZHN0ICAgICAgICAgICAgPSAmZmMtPmZyYW1lLT5k YXRhW2NfaWR4XVsodGItPnkwID4+IHZzKSAqIHN0cmlkZSArICgodGItPngwID4+IGhzKSA8PCBw cyldOworCisgICAgICAgICAgICBpZiAoY3UtPmJkcGNtX2ZsYWdbdGItPmNfaWR4XSkKKyAgICAg ICAgICAgICAgICB0cmFuc2Zvcm1fYmRwY20odGIsIGxjLCBjdSk7CisgICAgICAgICAgICBkZXF1 YW50KGxjLCB0dSwgdGIpOworICAgICAgICAgICAgaWYgKCF0Yi0+dHMpIHsKKyAgICAgICAgICAg ICAgICBlbnVtIFR4VHlwZSB0cmgsIHRydjsKKworICAgICAgICAgICAgICAgIGlmIChjdS0+YXBw bHlfbGZuc3RfZmxhZ1tjX2lkeF0pCisgICAgICAgICAgICAgICAgICAgIGlsZm5zdF90cmFuc2Zv cm0obGMsIHRiKTsKKyAgICAgICAgICAgICAgICBkZXJpdmVfdHJhbnNmb3JtX3R5cGUoZmMsIGxj LCB0YiwgJnRyaCwgJnRydik7CisgICAgICAgICAgICAgICAgaWYgKHcgPiAxICYmIGggPiAxKQor ICAgICAgICAgICAgICAgICAgICBpdHhfMmQoZmMsIHRiLCB0cmgsIHRydiwgdGVtcCk7CisgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpdHhfMWQoZmMsIHRiLCB0cmgs IHRydiwgdGVtcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaHJvbWFfc2Nh bGUpCisgICAgICAgICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5sbWNzX3NjYWxlX2Nocm9tYShs YywgdGVtcCwgdGItPmNvZWZmcywgdywgaCwgY3UtPngwLCBjdS0+eTApOworICAgICAgICAgICAg ZmMtPnZ2Y2RzcC5pdHguYWRkX3Jlc2lkdWFsKGRzdCwgY2hyb21hX3NjYWxlID8gdGVtcCA6IHRi LT5jb2VmZnMsIHcsIGgsIHN0cmlkZSk7CisKKyAgICAgICAgICAgIGlmICh0dS0+am9pbnRfY2Jj cl9yZXNpZHVhbF9mbGFnICYmIHRiLT5jX2lkeCkKKyAgICAgICAgICAgICAgICBhZGRfcmVzaWR1 YWxfZm9yX2pvaW50X2NvZGluZ19jaHJvbWEobGMsIHR1LCB0YiwgY2hyb21hX3NjYWxlKTsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludCByZWNvbnN0cnVjdChWVkNMb2NhbENvbnRl eHQgKmxjKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgQ29kaW5n VW5pdCAqY3UgICAgICA9IGxjLT5jdTsKKyAgICBjb25zdCBpbnQgc3RhcnQgICAgID0gY3UtPnRy ZWVfdHlwZSA9PSBEVUFMX1RSRUVfQ0hST01BOworICAgIGNvbnN0IGludCBlbmQgICAgICAgPSBm Yy0+cHMuc3BzLT5jaHJvbWFfZm9ybWF0X2lkYyAmJiAoY3UtPnRyZWVfdHlwZSAhPSBEVUFMX1RS RUVfTFVNQSk7CisKKyAgICBmb3IgKGludCBjaF90eXBlID0gc3RhcnQ7IGNoX3R5cGUgPD0gZW5k OyBjaF90eXBlKyspIHsKKyAgICAgICAgVHJhbnNmb3JtVW5pdCAqdHUgPSBjdS0+dHVzLmhlYWQ7 CisgICAgICAgIGZvciAoaW50IGkgPSAwOyB0dTsgaSsrKSB7CisgICAgICAgICAgICBwcmVkaWN0 X2ludHJhKGxjLCB0dSwgaSwgY2hfdHlwZSk7CisgICAgICAgICAgICBpdHJhbnNmb3JtKGxjLCB0 dSwgaSwgY2hfdHlwZSk7CisgICAgICAgICAgICB0dSA9IHR1LT5uZXh0OworICAgICAgICB9Cisg ICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgZmZfdnZjX3JlY29uc3RydWN0KFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGNvbnN0IGludCBycywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnkpCit7 CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgID0gbGMtPmZjOworICAgIGNvbnN0IFZW Q1NQUyAqc3BzICAgICAgICAgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IHhfY3RiICAg ICAgICAgICAgID0gcnggPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IHlf Y3RiICAgICAgICAgICAgID0gcnkgPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgQ1RVICpj dHUgICAgICAgICAgICAgICAgICAgID0gZmMtPnRhYi5jdHVzICsgcnM7CisgICAgQ29kaW5nVW5p dCAqY3UgICAgICAgICAgICAgID0gY3R1LT5jdXM7CisgICAgaW50IHJldCAgICAgICAgICAgICAg ICAgICAgID0gMDsKKworICAgIGxjLT5udW1fcmFzWzBdID0gbGMtPm51bV9yYXNbMV0gPSAwOwor ICAgIGxjLT5sbWNzLnhfdnBkdSA9IC0xOworICAgIGxjLT5sbWNzLnlfdnBkdSA9IC0xOworICAg IGZmX3Z2Y19kZWNvZGVfbmVpZ2hib3VyKGxjLCB4X2N0YiwgeV9jdGIsIHJ4LCByeSwgcnMpOwor ICAgIHdoaWxlIChjdSkgeworICAgICAgICBsYy0+Y3UgPSBjdTsKKworICAgICAgICBpZiAoY3Ut PmNpaXBfZmxhZykKKyAgICAgICAgICAgIGZmX3Z2Y19wcmVkaWN0X2NpaXAobGMpOworICAgICAg ICBpZiAoY3UtPmNvZGVkX2ZsYWcpIHsKKyAgICAgICAgICAgIHJldCA9IHJlY29uc3RydWN0KGxj KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZF9yZWNvbnN0cnVjdGVkX2FyZWEo bGMsIExVTUEsIGN1LT54MCwgY3UtPnkwLCBjdS0+Y2Jfd2lkdGgsIGN1LT5jYl9oZWlnaHQpOwor ICAgICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShsYywgQ0hST01BLCBjdS0+eDAsIGN1 LT55MCwgY3UtPmNiX3dpZHRoLCBjdS0+Y2JfaGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICBj dSA9IGN1LT5uZXh0OworICAgIH0KKyAgICBmZl92dmNfY3R1X2ZyZWVfY3VzKGN0dSk7CisgICAg cmV0dXJuIHJldDsKK30KKworaW50IGZmX3Z2Y19nZXRfbWlwX3NpemVfaWQoY29uc3QgaW50IHcs IGNvbnN0IGludCBoKQoreworICAgIGlmICh3ID09IDQgJiYgaCA9PSA0KQorICAgICAgICByZXR1 cm4gMDsKKyAgICBpZiAoKHcgPT0gNCB8fCBoID09IDQpIHx8ICh3ID09IDggJiYgaCA9PSA4KSkK KyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDI7Cit9CisKK2ludCBmZl92dmNfbnNjYWxl X2Rlcml2ZShjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBtb2RlKQoreworICAg IGludCBzaWRlX3NpemUsIG5zY2FsZTsKKyAgICBhdl9hc3NlcnQwKG1vZGUgPCBJTlRSQV9MVF9D Q0xNICYmICEobW9kZSA+IElOVFJBX0hPUlogJiYgbW9kZSA8IElOVFJBX1ZFUlQpKTsKKyAgICBp ZiAobW9kZSA9PSBJTlRSQV9QTEFOQVIgfHwgbW9kZSA9PSBJTlRSQV9EQyB8fAorICAgICAgICBt b2RlID09IElOVFJBX0hPUlogfHwgbW9kZSA9PSBJTlRSQV9WRVJUKSB7CisgICAgICAgIG5zY2Fs ZSA9IChhdl9sb2cyKHcpICsgYXZfbG9nMihoKSAtIDIpID4+IDI7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgY29uc3QgaW50IGludHJhX3ByZWRfYW5nbGUgPSBmZl92dmNfaW50cmFfcHJlZF9hbmds ZV9kZXJpdmUobW9kZSk7CisgICAgICAgIGNvbnN0IGludCBpbnZfYW5nbGUgICAgICAgID0gZmZf dnZjX2ludHJhX2ludl9hbmdsZV9kZXJpdmUoaW50cmFfcHJlZF9hbmdsZSk7CisgICAgICAgIGlm IChtb2RlID49IElOVFJBX1ZFUlQpCisgICAgICAgICAgICBzaWRlX3NpemUgPSBoOworICAgICAg ICBpZiAobW9kZSA8PSBJTlRSQV9IT1JaKQorICAgICAgICAgICAgc2lkZV9zaXplID0gdzsKKyAg ICAgICAgbnNjYWxlID0gRkZNSU4oMiwgYXZfbG9nMihzaWRlX3NpemUpIC0gYXZfbG9nMigzICog aW52X2FuZ2xlIC0gMikgKyA4KTsKKyAgICB9CisgICAgcmV0dXJuIG5zY2FsZTsKK30KKworaW50 IGZmX3Z2Y19uZWVkX3BkcGMoY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCB1aW50OF90 IGJkcGNtX2ZsYWcsIGNvbnN0IGludCBtb2RlLCBjb25zdCBpbnQgcmVmX2lkeCkKK3sKKyAgICBh dl9hc3NlcnQwKG1vZGUgPCBJTlRSQV9MVF9DQ0xNKTsKKyAgICBpZiAoKHcgPj0gNCAmJiBoID49 IDQpICYmICFyZWZfaWR4ICYmICFiZHBjbV9mbGFnKSB7CisgICAgICAgIGludCBuc2NhbGU7Cisg ICAgICAgIGlmIChtb2RlID09IElOVFJBX1BMQU5BUiB8fCBtb2RlID09IElOVFJBX0RDIHx8Cisg ICAgICAgICAgICBtb2RlID09IElOVFJBX0hPUlogfHwgbW9kZSA9PSBJTlRSQV9WRVJUKQorICAg ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChtb2RlID4gSU5UUkFfSE9SWiAmJiBtb2Rl IDwgSU5UUkFfVkVSVCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBuc2NhbGUgPSBm Zl92dmNfbnNjYWxlX2Rlcml2ZSh3LCBoLCBtb2RlKTsKKyAgICAgICAgcmV0dXJuIG5zY2FsZSA+ PSAwOworCisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgUmVjb25zdHJ1 Y3RlZEFyZWEqIGdldF9yZWNvbnN0cnVjdGVkX2FyZWEoY29uc3QgVlZDTG9jYWxDb250ZXh0ICps YywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgY19pZHgpCit7CisgICAgY29u c3QgaW50IGNoX3R5cGUgPSBjX2lkeCA+IDA7CisgICAgZm9yIChpbnQgaSA9IGxjLT5udW1fcmFz W2NoX3R5cGVdIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgY29uc3QgUmVjb25zdHJ1Y3Rl ZEFyZWEqIGEgPSAmbGMtPnJhc1tjaF90eXBlXVtpXTsKKyAgICAgICAgY29uc3QgaW50IHIgPSAo YS0+eCArIGEtPncpOworICAgICAgICBjb25zdCBpbnQgYiA9IChhLT55ICsgYS0+aCk7CisgICAg ICAgIGlmIChhLT54IDw9IHggJiYgeCA8IHIgJiYgYS0+eSA8PSB5ICYmIHkgPCBiKQorICAgICAg ICAgICAgcmV0dXJuIGE7CisKKyAgICAgICAgLy9pdCdzIHRvbyBmYXIgYXdheSwgbm8gbmVlZCBj aGVjayBpdDsKKyAgICAgICAgaWYgKHggPj0gciAmJiB5ID49IGIpCisgICAgICAgICAgICBicmVh azsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBmZl92dmNfZ2V0X3RvcF9hdmFp bGFibGUoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5 LCBpbnQgdGFyZ2V0X3NpemUsIGNvbnN0IGludCBjX2lkeCkKK3sKKyAgICBjb25zdCBWVkNGcmFt ZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNw czsKKyAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50 IHZzID0gc3BzLT52c2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBsb2cyX2N0Yl9zaXplX3Yg ICA9IHNwcy0+Y3RiX2xvZzJfc2l6ZV95IC0gdnM7CisgICAgY29uc3QgaW50IGVuZF9vZl9jdGJf eCAgICAgID0gKChsYy0+Y3UtPngwID4+IHNwcy0+Y3RiX2xvZzJfc2l6ZV95KSArIDEpIDw8IHNw cy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5MGIgICAgICAgICAgICAgICA9IGF2 X21vZF91aW50cDIoeSwgbG9nMl9jdGJfc2l6ZV92KTsKKyAgICBjb25zdCBpbnQgbWF4X3ggICAg ICAgICAgICAgPSBGRk1JTihmYy0+cHMucHBzLT53aWR0aCwgZW5kX29mX2N0Yl94KSA+PiBoczsK KyAgICBjb25zdCBSZWNvbnN0cnVjdGVkQXJlYSAqYTsKKyAgICBpbnQgcHggPSB4OworCisgICAg aWYgKCF5MGIpIHsKKyAgICAgICAgaWYgKCFsYy0+Y3RiX3VwX2ZsYWcpCisgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgdGFyZ2V0X3NpemUgPSBGRk1JTih0YXJnZXRfc2l6ZSwgKGxjLT5l bmRfb2ZfdGlsZXNfeCA+PiBocykgLSB4KTsKKyAgICAgICAgaWYgKHNwcy0+ZW50cm9weV9jb2Rp bmdfc3luY19lbmFibGVkX2ZsYWcpCisgICAgICAgICAgICB0YXJnZXRfc2l6ZSA9IEZGTUlOKHRh cmdldF9zaXplLCAoZW5kX29mX2N0Yl94ID4+IGhzKSAtIHgpOworICAgICAgICByZXR1cm4gdGFy Z2V0X3NpemU7CisgICAgfQorCisgICAgdGFyZ2V0X3NpemUgPSBGRk1BWCgwLCBGRk1JTih0YXJn ZXRfc2l6ZSwgbWF4X3ggLSB4KSk7CisgICAgd2hpbGUgKHRhcmdldF9zaXplID4gMCAmJiAoYSA9 IGdldF9yZWNvbnN0cnVjdGVkX2FyZWEobGMsIHB4LCB5IC0gMSwgY19pZHgpKSkgeworICAgICAg ICBjb25zdCBpbnQgc3ogPSBGRk1JTih0YXJnZXRfc2l6ZSwgYS0+eCArIGEtPncgLSBweCk7Cisg ICAgICAgIHB4ICs9IHN6OworICAgICAgICB0YXJnZXRfc2l6ZSAtPSBzejsKKyAgICB9CisgICAg cmV0dXJuIHB4IC0geDsKK30KKworaW50IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUoY29uc3Qg VlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBpbnQgdGFyZ2V0 X3NpemUsIGNvbnN0IGludCBjX2lkeCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZj ID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsKKyAgICBjb25z dCBpbnQgaHMgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHZzID0gc3BzLT52 c2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBsb2cyX2N0Yl9zaXplX2ggICA9ICBzcHMtPmN0 Yl9sb2cyX3NpemVfeSAtIGhzOworICAgIGNvbnN0IGludCB4MGIgICAgICAgICAgICAgICA9IGF2 X21vZF91aW50cDIoeCwgbG9nMl9jdGJfc2l6ZV9oKTsKKyAgICBjb25zdCBpbnQgZW5kX29mX2N0 Yl95ICAgICAgPSAoKGxjLT5jdS0+eTAgPj4gc3BzLT5jdGJfbG9nMl9zaXplX3kpICsgMSkgPDwg c3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IG1heF95ICAgICAgICAgICAgID0g RkZNSU4oZmMtPnBzLnBwcy0+aGVpZ2h0LCBlbmRfb2ZfY3RiX3kpID4+IHZzOworICAgIGNvbnN0 IFJlY29uc3RydWN0ZWRBcmVhICphOworICAgIGludCAgcHkgPSB5OworCisgICAgaWYgKCF4MGIg JiYgIWxjLT5jdGJfbGVmdF9mbGFnKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHRhcmdldF9z aXplID0gRkZNQVgoMCwgRkZNSU4odGFyZ2V0X3NpemUsIG1heF95IC0geSkpOworICAgIGlmICgh eDBiKQorICAgICAgICByZXR1cm4gdGFyZ2V0X3NpemU7CisKKyAgICB3aGlsZSAodGFyZ2V0X3Np emUgPiAwICYmIChhID0gZ2V0X3JlY29uc3RydWN0ZWRfYXJlYShsYywgeCAtIDEsIHB5LCBjX2lk eCkpKSB7CisgICAgICAgIGNvbnN0IGludCBzeiA9IEZGTUlOKHRhcmdldF9zaXplLCBhLT55ICsg YS0+aCAtIHB5KTsKKyAgICAgICAgcHkgKz0gc3o7CisgICAgICAgIHRhcmdldF9zaXplIC09IHN6 OworICAgIH0KKyAgICByZXR1cm4gcHkgLSB5OworfQorCitzdGF0aWMgaW50IGxlc3MoY29uc3Qg dm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKyAgICByZXR1cm4gKihjb25zdCBpbnQqKWEgLSAq KGNvbnN0IGludCopYjsKK30KKworaW50IGZmX3Z2Y19yZWZfZmlsdGVyX2ZsYWdfZGVyaXZlKGNv bnN0IGludCBtb2RlKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgbW9kZXNbXSA9IHsgLTE0LCAt MTIsIC0xMCwgLTYsIElOVFJBX1BMQU5BUiwgMiwgMzQsIDY2LCA3MiwgNzYsIDc4LCA4MH07Cisg ICAgcmV0dXJuIGJzZWFyY2goJm1vZGUsIG1vZGVzLCBGRl9BUlJBWV9FTEVNUyhtb2RlcyksIHNp emVvZihpbnQpLCBsZXNzKSAhPSBOVUxMOworfQorCitpbnQgZmZfdnZjX2ludHJhX3ByZWRfYW5n bGVfZGVyaXZlKGNvbnN0IGludCBwcmVkX21vZGUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBh bmdsZXNbXSA9IHsKKyAgICAgICAgICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNiwgICA4LCAg MTAsICAxMiwgIDE0LCAgMTYsICAxOCwgIDIwLCAgMjMsICAyNiwgMjksCisgICAgICAgICAzMiwg IDM1LCAgMzksICA0NSwgIDUxLCAgNTcsICA2NCwgIDczLCAgODYsIDEwMiwgMTI4LCAxNzEsIDI1 NiwgMzQxLCA1MTIKKyAgICB9OworICAgIGludCBzaWduID0gMSwgaWR4LCBpbnRyYV9wcmVkX2Fu Z2xlOworICAgIGlmIChwcmVkX21vZGUgPiBJTlRSQV9ESUFHKSB7CisgICAgICAgIGlkeCA9IHBy ZWRfbW9kZSAtIElOVFJBX1ZFUlQ7CisgICAgfSBlbHNlIGlmIChwcmVkX21vZGUgPiAwKSB7Cisg ICAgICAgIGlkeCA9IElOVFJBX0hPUlogLSBwcmVkX21vZGU7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgaWR4ID0gSU5UUkFfSE9SWiAtIDIgLSBwcmVkX21vZGU7CisgICAgfQorICAgIGlmIChpZHgg PCAwKSB7CisgICAgICAgIGlkeCA9IC1pZHg7CisgICAgICAgIHNpZ24gPSAtMTsKKyAgICB9Cisg ICAgaW50cmFfcHJlZF9hbmdsZSA9IHNpZ24gKiBhbmdsZXNbaWR4XTsKKyAgICByZXR1cm4gaW50 cmFfcHJlZF9hbmdsZTsKK30KKworI2RlZmluZSBST1VORChmKSAoaW50KShmIDwgMCA/IC0oLWYg KyAwLjUpIDogKGYgKyAwLjUpKQoraW50IGZmX3Z2Y19pbnRyYV9pbnZfYW5nbGVfZGVyaXZlKGNv bnN0IGludCBpbnRyYV9wcmVkX2FuZ2xlKQoreworICAgIGZsb2F0IGludl9hbmdsZTsKKyAgICBh dl9hc3NlcnQwKGludHJhX3ByZWRfYW5nbGUpOworICAgIGludl9hbmdsZSA9IDMyICogNTEyLjAg LyBpbnRyYV9wcmVkX2FuZ2xlOworICAgIHJldHVybiBST1VORChpbnZfYW5nbGUpOworfQorCisv LzguNC41LjIuNyBXaWRlIGFuZ2xlIGludHJhIHByZWRpY3Rpb24gbW9kZSBtYXBwaW5nIHByb2Nl cworaW50IGZmX3Z2Y193aWRlX2FuZ2xlX21vZGVfbWFwcGluZyhjb25zdCBDb2RpbmdVbml0ICpj dSwKKyAgICBjb25zdCBpbnQgdGJfd2lkdGgsIGNvbnN0IGludCB0Yl9oZWlnaHQsIGNvbnN0IGlu dCBjX2lkeCwgaW50IHByZWRfbW9kZV9pbnRyYSkKK3sKKyAgICBpbnQgbncsIG5oLCB3aF9yYXRp bywgbWluLCBtYXg7CisKKyAgICBpZiAoY3UtPmlzcF9zcGxpdF90eXBlID09IElTUF9OT19TUExJ VCB8fCBjX2lkeCkgeworICAgICAgICBudyA9IHRiX3dpZHRoOworICAgICAgICBuaCA9IHRiX2hl aWdodDsKKyAgICB9IGVsc2UgeworICAgICAgICBudyA9IGN1LT5jYl93aWR0aDsKKyAgICAgICAg bmggPSBjdS0+Y2JfaGVpZ2h0OworICAgIH0KKyAgICB3aF9yYXRpbyAgICA9IEZGQUJTKGZmX2xv ZzIobncpIC0gZmZfbG9nMihuaCkpOworICAgIG1heCAgICAgICAgID0gKHdoX3JhdGlvID4gMSkg PyAoOCAgKyAyICogd2hfcmF0aW8pIDogODsKKyAgICBtaW4gICAgICAgICA9ICh3aF9yYXRpbyA+ IDEpID8gKDYwIC0gMiAqIHdoX3JhdGlvKSA6IDYwOworCisgICAgaWYgKG53ID4gbmggJiYgcHJl ZF9tb2RlX2ludHJhID49MiAmJiBwcmVkX21vZGVfaW50cmEgPCBtYXgpCisgICAgICAgIHByZWRf bW9kZV9pbnRyYSArPSA2NTsKKyAgICBlbHNlIGlmIChuaCA+IG53ICYmIHByZWRfbW9kZV9pbnRy YSA8PSA2NiAmJiBwcmVkX21vZGVfaW50cmEgPiBtaW4pCisgICAgICAgIHByZWRfbW9kZV9pbnRy YSAtPSA2NzsKKyAgICByZXR1cm4gcHJlZF9tb2RlX2ludHJhOworfQpkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy92dmMvdnZjX2ludHJhLmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfaW50cmEuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xMmQwZGFlODAxCi0tLSAvZGV2L251 bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmgKQEAgLTAsMCArMSw0OSBAQAorLyoK KyAqIFZWQyBpbnRyYSBwcmVkaWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxIE51byBN aQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2lmbmRlZiBBVkNPREVD X1ZWQ19JTlRSQV9ICisjZGVmaW5lIEFWQ09ERUNfVlZDX0lOVFJBX0gKKworI2luY2x1ZGUgInZ2 Y19jdHUuaCIKKworLyoqCisgKiByZWNvbnN0cnVjdCBhIENUVQorICogQHBhcmFtIGxjIGxvY2Fs IGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHJzIHJhc3RlciBvcmRlciBmb3IgdGhlIENUVS4K KyAqIEBwYXJhbSByeCByYXN0ZXIgb3JkZXIgeCBmb3IgdGhlIENUVS4KKyAqIEBwYXJhbSByeSBy YXN0ZXIgb3JkZXIgeSBmb3IgdGhlIENUVS4KKyAqIEByZXR1cm4gQVZFUlJPUgorICovCitpbnQg ZmZfdnZjX3JlY29uc3RydWN0KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCBycywgY29u c3QgaW50IHJ4LCBjb25zdCBpbnQgcnkpOworCisvL3V0aWxzIGZvciB2dmNfaW50cmFfdGVtcGxh dGUKK2ludCBmZl92dmNfZ2V0X3RvcF9hdmFpbGFibGUoY29uc3QgVlZDTG9jYWxDb250ZXh0ICps YywgaW50IHgwLCBpbnQgeTAsIGludCB0YXJnZXRfc2l6ZSwgaW50IGNfaWR4KTsKK2ludCBmZl92 dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwg aW50IHkwLCBpbnQgdGFyZ2V0X3NpemUsIGludCBjX2lkeCk7CitpbnQgZmZfdnZjX2dldF9taXBf c2l6ZV9pZChpbnQgdywgaW50IGgpOworaW50IGZmX3Z2Y19uZWVkX3BkcGMoaW50IHcsIGludCBo LCB1aW50OF90IGJkcGNtX2ZsYWcsIGludCBtb2RlLCBpbnQgcmVmX2lkeCk7CitpbnQgZmZfdnZj X25zY2FsZV9kZXJpdmUoaW50IHcsIGludCBoLCBpbnQgbW9kZSk7CitpbnQgZmZfdnZjX3JlZl9m aWx0ZXJfZmxhZ19kZXJpdmUoaW50IG1vZGUpOworaW50IGZmX3Z2Y19pbnRyYV9wcmVkX2FuZ2xl X2Rlcml2ZShpbnQgcHJlZF9tb2RlKTsKK2ludCBmZl92dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2 ZShpbnQgcHJlZF9tb2RlKTsKK2ludCBmZl92dmNfd2lkZV9hbmdsZV9tb2RlX21hcHBpbmcoY29u c3QgQ29kaW5nVW5pdCAqY3UsCisgICAgaW50IHRiX3dpZHRoLCBpbnQgdGJfaGVpZ2h0LCBpbnQg Y19pZHgsIGludCBwcmVkX21vZGVfaW50cmEpOworCisjZW5kaWYgLy8gQVZDT0RFQ19WVkNfSU5U UkFfSApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhX3RlbXBsYXRlLmMgYi9s aWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVtcGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi5mNGU0MmJmNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2Rl Yy92dmMvdnZjX2ludHJhX3RlbXBsYXRlLmMKQEAgLTAsMCArMSwxMDE4IEBACisvKgorICogVlZD IGludHJhIHByZWRpY3Rpb24gRFNQCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjMgTnVv bWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxp YmF2Y29kZWMvYml0X2RlcHRoX3RlbXBsYXRlLmMiCisKKyNpbmNsdWRlICJ2dmNfZGF0YS5oIgor I2luY2x1ZGUgInZ2Y19pbnRyYS5oIgorCisjZGVmaW5lIFBPUyh4LCB5KSBzcmNbKHgpICsgc3Ry aWRlICogKHkpXQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9saW5l YXJfcHJlZCkoVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAs CisgICAgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwaXhlbCogcGRzeSwgY29uc3Qg aW50ICphLCBjb25zdCBpbnQgKmIsIGNvbnN0IGludCAqaykKK3sKKyAgICBjb25zdCBWVkNTUFMg KnNwcyA9IGZjLT5wcy5zcHM7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWVkNfTUFYX1NBTVBM RV9BUlJBWVMgLSAxOyBpKyspIHsKKyAgICAgICAgY29uc3QgaW50IGNfaWR4ID0gaSArIDE7Cisg ICAgICAgIGNvbnN0IGludCB4ID0geDAgPj4gc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBj b25zdCBpbnQgeSA9IHkwID4+IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgcHRy ZGlmZl90IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdIC8gc2l6ZW9mKHBpeGVs KTsKKyAgICAgICAgcGl4ZWwgKnNyYyA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRhW2NfaWR4XSAr IHggKyB5ICogc3RyaWRlOworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgewor ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgICAg ICBjb25zdCBpbnQgZHN5ID0gcGRzeVt5ICogdyArIHhdOworICAgICAgICAgICAgICAgIGNvbnN0 IGludCBwcmVkID0gKChkc3kgKiBhW2ldKSA+PiBrW2ldKSArIGJbaV07CisgICAgICAgICAgICAg ICAgUE9TKHgsIHkpID0gQ0xJUChwcmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KK30KKworI2RlZmluZSBNQVhfUElDS19QT1MgNAorI2RlZmluZSBUT1AgIDAKKyNkZWZpbmUg TEVGVCAxCisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX2dldF9wYXJh bXNfZGVmYXVsdCkoaW50ICphLCBpbnQgKmIsIGludCAqaykKK3sKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IDI7IGkrKykgeworICAgICAgICBhW2ldID0ga1tpXSA9IDA7CisgICAgICAgIGJbaV0g PSAxIDw8IChCSVRfREVQVEggLSAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5s aW5lIGludCBGVU5DKGNjbG1fZ2V0X3NlbGVjdF9wb3MpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAq bGMsCisgICAgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgdywgY29uc3QgaW50 IGgsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBpbnQgYXZhaWxfbCwKKyAgICBpbnQgY250WzJd LCBpbnQgcG9zWzJdW01BWF9QSUNLX1BPU10pCit7CisgICAgY29uc3QgZW51bSBJbnRyYVByZWRN b2RlIG1vZGUgPSBsYy0+Y3UtPmludHJhX3ByZWRfbW9kZV9jOworICAgIGNvbnN0IGludCBudW1f aXM0ID0gIWF2YWlsX3QgfHwgIWF2YWlsX2wgfHwgbW9kZSAhPSBJTlRSQV9MVF9DQ0xNOworICAg IGludCBudW1fc2FtcFsyXTsKKworICAgIGlmIChtb2RlID09IElOVFJBX0xUX0NDTE0pIHsKKyAg ICAgICAgbnVtX3NhbXBbVE9QXSAgPSBhdmFpbF90ID8gdyA6IDA7CisgICAgICAgIG51bV9zYW1w W0xFRlRdID0gYXZhaWxfbCA/IGggOiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG51bV9zYW1w W1RPUF0gPSAoYXZhaWxfdCAmJiBtb2RlID09IElOVFJBX1RfQ0NMTSkgPyBmZl92dmNfZ2V0X3Rv cF9hdmFpbGFibGUobGMsICB4LCB5LCB3ICsgRkZNSU4odywgaCksIDEpIDogMDsKKyAgICAgICAg bnVtX3NhbXBbTEVGVF0gPSAoYXZhaWxfbCAmJiBtb2RlID09IElOVFJBX0xfQ0NMTSkgPyBmZl92 dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGxjLCB4LCB5LCBoICsgRkZNSU4odywgaCksIDEpIDogMDsK KyAgICB9CisgICAgaWYgKCFudW1fc2FtcFtUT1BdICYmICFudW1fc2FtcFtMRUZUXSkgeworICAg ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IFRPUDsgaSA8PSBMRUZUOyBp KyspIHsKKyAgICAgICAgY29uc3QgaW50IHN0YXJ0ID0gbnVtX3NhbXBbaV0gPj4gKDIgKyBudW1f aXM0KTsKKyAgICAgICAgY29uc3QgaW50IHN0ZXAgID0gRkZNQVgoMSwgbnVtX3NhbXBbaV0gPj4g KDEgKyBudW1faXM0KSkgOworICAgICAgICBjbnRbaV0gPSBGRk1JTihudW1fc2FtcFtpXSwgKDEg KyBudW1faXM0KSA8PCAxKTsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjbnRbaV07IGMr KykKKyAgICAgICAgICAgIHBvc1tpXVtjXSA9IHN0YXJ0ICsgYyAqIHN0ZXA7CisgICAgfQorICAg IHJldHVybiAxOworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9z ZWxlY3RfbHVtYV80NDQpKGNvbnN0IHBpeGVsICpzcmMsIGNvbnN0IGludCBzdGVwLAorICAgIGNv bnN0IGludCBjbnQsIGNvbnN0IGludCBwb3NbTUFYX1BJQ0tfUE9TXSwgIHBpeGVsICpzZWxfbHVt YSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNudDsgaSsrKQorICAgICAgICBzZWxfbHVt YVtpXSA9IHNyY1twb3NbaV0gKiBzdGVwXTsKK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUg dm9pZCBGVU5DKGNjbG1fc2VsZWN0X2x1bWEpKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsCisg ICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBp bnQgYXZhaWxfbCwgY29uc3QgaW50IGNudFsyXSwgY29uc3QgaW50IHBvc1syXVtNQVhfUElDS19Q T1NdLAorICAgIHBpeGVsICpzZWxfbHVtYSkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZj LT5wcy5zcHM7CisKKyAgICBjb25zdCBpbnQgYl9jdHVfYm91bmRhcnkgPSAhYXZfbW9kX3VpbnRw Mih5MCwgc3BzLT5jdGJfbG9nMl9zaXplX3kpOworICAgIGNvbnN0IGludCBocyA9IHNwcy0+aHNo aWZ0WzFdOworICAgIGNvbnN0IGludCB2cyA9IHNwcy0+dnNoaWZ0WzFdOworICAgIGNvbnN0IHB0 cmRpZmZfdCBzdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplWzBdIC8gc2l6ZW9mKHBpeGVsKTsK KworICAgIGlmICghaHMgJiYgIXZzKSB7CisgICAgICAgIGNvbnN0IHBpeGVsKiBzcmMgPSAocGl4 ZWwqKWZjLT5mcmFtZS0+ZGF0YVswXSArIHgwICsgeTAgKiBzdHJpZGU7CisgICAgICAgIEZVTkMo Y2NsbV9zZWxlY3RfbHVtYV80NDQpKHNyYyAtIGF2YWlsX3QgKiBzdHJpZGUsIDEsIGNudFtUT1Bd LCBwb3NbVE9QXSwgc2VsX2x1bWEpOworICAgICAgICBGVU5DKGNjbG1fc2VsZWN0X2x1bWFfNDQ0 KShzcmMgLSBhdmFpbF9sLCBzdHJpZGUsIGNudFtMRUZUXSwgcG9zW0xFRlRdLCBzZWxfbHVtYSAr IGNudFtUT1BdKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyB0b3AKKyAgICAgICAgaWYgKHZz ICYmICFiX2N0dV9ib3VuZGFyeSkgeworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnNvdXJjZSA9 IChwaXhlbCAqKWZjLT5mcmFtZS0+ZGF0YVswXSArIHgwICsgKHkwIC0gMikgKiBzdHJpZGU7Cisg ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNudFtUT1BdOyBpKyspIHsKKyAgICAgICAg ICAgICAgICBjb25zdCBpbnQgeCA9IHBvc1tUT1BdW2ldIDw8IGhzOworICAgICAgICAgICAgICAg IGNvbnN0IHBpeGVsICpzcmMgPSBzb3VyY2UgKyB4OworICAgICAgICAgICAgICAgIGNvbnN0IGlu dCBoYXNfbGVmdCA9IHggfHwgYXZhaWxfbDsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCBs ID0gaGFzX2xlZnQgPyBQT1MoLTEsIDApIDogUE9TKDAsIDApOworICAgICAgICAgICAgICAgIGlm IChzcHMtPmNocm9tYV92ZXJ0aWNhbF9jb2xsb2NhdGVkX2ZsYWcpIHsKKyAgICAgICAgICAgICAg ICAgICAgc2VsX2x1bWFbaV0gPSAoUE9TKDAsIC0xKSArIGwgKyA0ICogUE9TKDAsIDApICsgUE9T KDEsIDApICsgUE9TKDAsIDEpICsgNCkgPj4gMzsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCBsMSA9IGhhc19sZWZ0ID8gUE9TKC0xLCAx KSA6IFBPUygwLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsX2x1bWFbaV0gPSAobCArIGwx ICsgMiAqIChQT1MoMCwgMCkgKyBQT1MoMCwgMSkpICsgUE9TKDEsIDApICsgUE9TKDEsIDEpICsg NCkgPj4gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqc291cmNlID0gKHBpeGVsKilmYy0+ZnJhbWUt PmRhdGFbMF0gKyB4MCArICh5MCAtIDEpICogc3RyaWRlOworICAgICAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBjbnRbVE9QXTsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHgg PSBwb3NbVE9QXVtpXSA8PCBoczsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqc3JjID0g c291cmNlICsgeDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaGFzX2xlZnQgPSB4IHx8IGF2 YWlsX2w7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgbCA9IGhhc19sZWZ0ID8gUE9TKC0x LCAwKSA6IFBPUygwLCAwKTsKKyAgICAgICAgICAgICAgICBzZWxfbHVtYVtpXSA9IChsICsgMiAq IFBPUygwLCAwKSArIFBPUygxLCAwKSArIDIpID4+IDI7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKworICAgICAgICAvLyBsZWZ0CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpsZWZ0OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnNvdXJjZSA9IChwaXhlbCAqKWZjLT5m cmFtZS0+ZGF0YVswXSArIHgwICsgeTAgKiBzdHJpZGUgLSAoMSArIGhzKSAqIGF2YWlsX2w7Cisg ICAgICAgICAgICBsZWZ0ID0gc291cmNlIC0gYXZhaWxfbDsKKworICAgICAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBjbnRbTEVGVF07IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGlu dCB5ID0gcG9zW0xFRlRdW2ldIDw8IHZzOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBvZmZz ZXQgPSB5ICogc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpsICAgPSBsZWZ0 ICsgb2Zmc2V0OworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgPSBzb3VyY2UgKyBv ZmZzZXQ7CisgICAgICAgICAgICAgICAgcGl4ZWwgcHJlZDsKKyAgICAgICAgICAgICAgICBpZiAo IXZzKSB7CisgICAgICAgICAgICAgICAgICAgIHByZWQgPSAoKmwgKyAyICogUE9TKDAsIDApICsg UE9TKDEsIDApICsgMikgPj4gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICBpZiAoc3BzLT5jaHJvbWFfdmVydGljYWxfY29sbG9jYXRlZF9mbGFnKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaGFzX3RvcCA9IHkgfHwgYXZhaWxfdDsK KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIHQgPSBoYXNfdG9wID8gUE9TKDAs IC0xKSA6IFBPUygwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWQgPSAoKmwgKyB0 ICsgNCAqIFBPUygwLCAwKSArIFBPUygxLCAwKSArIFBPUygwLCAxKSArIDQpID4+IDM7CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVkID0g KCpsICsgKihsICsgc3RyaWRlKSArIDIgKiBQT1MoMCwgMCkgKyAyICogUE9TKDAsIDEpICsgUE9T KDEsIDApICsgUE9TKDEsIDEpICsgNCkgPj4gMzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZWxfbHVtYVtpICsgY250W1RPUF1dID0g cHJlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGF2X2Fs d2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fc2VsZWN0X2Nocm9tYSkoY29uc3QgVlZDRnJhbWVD b250ZXh0ICpmYywKKyAgICBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjbnRb Ml0sIGNvbnN0IGludCBwb3NbMl1bTUFYX1BJQ0tfUE9TXSwKKyAgICBwaXhlbCBzZWxbXVtNQVhf UElDS19QT1MgKiAyXSkKK3sKKyAgICBmb3IgKGludCBjX2lkeCA9IDE7IGNfaWR4IDwgVlZDX01B WF9TQU1QTEVfQVJSQVlTOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJp ZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSAvIHNpemVvZihwaXhlbCk7CisKKyAgICAg ICAgLy90b3AKKyAgICAgICAgY29uc3QgcGl4ZWwgKnNyYyA9IChwaXhlbCopZmMtPmZyYW1lLT5k YXRhW2NfaWR4XSArIHggKyAoeSAtIDEpKiBzdHJpZGU7CisgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgY250W1RPUF07IGkrKykgeworICAgICAgICAgICAgc2VsW2NfaWR4XVtpXSA9IHNyY1tw b3NbVE9QXVtpXV07CisgICAgICAgIH0KKworICAgICAgICAvL2xlZnQKKyAgICAgICAgc3JjID0g KHBpeGVsKilmYy0+ZnJhbWUtPmRhdGFbY19pZHhdICsgeCAtIDEgKyB5ICogc3RyaWRlOworICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNudFtMRUZUXTsgaSsrKSB7CisgICAgICAgICAgICBz ZWxbY19pZHhdW2kgKyBjbnRbVE9QXV0gPSBzcmNbcG9zW0xFRlRdW2ldICogc3RyaWRlXTsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IEZVTkMoY2Ns bV9zZWxlY3Rfc2FtcGxlcykoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBp bnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQg YXZhaWxfdCwgY29uc3QgaW50IGF2YWlsX2wsCisgICAgcGl4ZWwgc2VsW11bTUFYX1BJQ0tfUE9T ICogMl0pCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBj b25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgeCAgPSB4MCA+ PiBzcHMtPmhzaGlmdFsxXTsKKyAgICBjb25zdCBpbnQgeSAgPSB5MCA+PiBzcHMtPnZzaGlmdFsx XTsKKyAgICBpbnQgY250WzJdLCBwb3NbMl1bTUFYX1BJQ0tfUE9TXTsKKworICAgIGlmICghRlVO QyhjY2xtX2dldF9zZWxlY3RfcG9zKShsYywgeCwgeSwgdywgaCwgYXZhaWxfdCwgYXZhaWxfbCwg Y250LCBwb3MpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZVTkMoY2NsbV9zZWxlY3RfbHVt YSkoZmMsIHgwLCB5MCwgYXZhaWxfdCwgYXZhaWxfbCwgY250LCBwb3MsIHNlbFtMVU1BXSk7Cisg ICAgRlVOQyhjY2xtX3NlbGVjdF9jaHJvbWEpKGZjLCB4LCB5LCBjbnQsIHBvcywgc2VsKTsKKwor ICAgIGlmIChjbnRbVE9QXSArIGNudFtMRUZUXSA9PSAyKSB7CisgICAgICAgIGZvciAoaW50IGNf aWR4ID0gMDsgY19pZHggPCBWVkNfTUFYX1NBTVBMRV9BUlJBWVM7IGNfaWR4KyspIHsKKyAgICAg ICAgICAgIHNlbFtjX2lkeF1bM10gPSBzZWxbY19pZHhdWzBdOworICAgICAgICAgICAgc2VsW2Nf aWR4XVsyXSA9IHNlbFtjX2lkeF1bMV07CisgICAgICAgICAgICBzZWxbY19pZHhdWzBdID0gc2Vs W2NfaWR4XVsxXTsKKyAgICAgICAgICAgIHNlbFtjX2lkeF1bMV0gPSBzZWxbY19pZHhdWzNdOwor ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lu bGluZSB2b2lkIEZVTkMoY2NsbV9nZXRfbWluX21heCkoCisgICAgY29uc3QgcGl4ZWwgc2VsW11b TUFYX1BJQ0tfUE9TICogMl0sIGludCAqbWluLCBpbnQgKm1heCkKK3sKKyAgICBpbnQgbWluX2dy cF9pZHhbXSA9IHsgMCwgMiB9OworICAgIGludCBtYXhfZ3JwX2lkeFtdID0geyAxLCAzIH07CisK KyAgICBpZiAoc2VsW0xVTUFdW21pbl9ncnBfaWR4WzBdXSA+IHNlbFtMVU1BXVttaW5fZ3JwX2lk eFsxXV0pCisgICAgICAgIEZGU1dBUChpbnQsIG1pbl9ncnBfaWR4WzBdLCBtaW5fZ3JwX2lkeFsx XSk7CisgICAgaWYgKHNlbFtMVU1BXVttYXhfZ3JwX2lkeFswXV0gPiBzZWxbTFVNQV1bbWF4X2dy cF9pZHhbMV1dKQorICAgICAgICBGRlNXQVAoaW50LCBtYXhfZ3JwX2lkeFswXSwgbWF4X2dycF9p ZHhbMV0pOworICAgIGlmIChzZWxbTFVNQV1bbWluX2dycF9pZHhbMF1dID4gc2VsW0xVTUFdW21h eF9ncnBfaWR4WzFdXSkgeworICAgICAgICBGRlNXQVAoaW50LCBtaW5fZ3JwX2lkeFswXSwgbWF4 X2dycF9pZHhbMF0pOworICAgICAgICBGRlNXQVAoaW50LCBtaW5fZ3JwX2lkeFsxXSwgbWF4X2dy cF9pZHhbMV0pOworICAgIH0KKyAgICBpZiAoc2VsW0xVTUFdW21pbl9ncnBfaWR4WzFdXSA+IHNl bFtMVU1BXVttYXhfZ3JwX2lkeFswXV0pCisgICAgICAgIEZGU1dBUChpbnQsIG1pbl9ncnBfaWR4 WzFdLCBtYXhfZ3JwX2lkeFswXSk7CisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IFZW Q19NQVhfU0FNUExFX0FSUkFZUzsgY19pZHgrKykgeworICAgICAgICBtYXhbY19pZHhdID0gKHNl bFtjX2lkeF1bbWF4X2dycF9pZHhbMF1dICsgc2VsW2NfaWR4XVttYXhfZ3JwX2lkeFsxXV0gKyAx KSA+PiAxOworICAgICAgICBtaW5bY19pZHhdID0gKHNlbFtjX2lkeF1bbWluX2dycF9pZHhbMF1d ICsgc2VsW2NfaWR4XVttaW5fZ3JwX2lkeFsxXV0gKyAxKSA+PiAxOworICAgIH0KK30KKworc3Rh dGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fZ2V0X3BhcmFtcykoY29uc3QgVlZD TG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3Qg aW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZhaWxfdCwgY29uc3QgaW50IGF2YWlsX2ws CisgICAgaW50ICphLCBpbnQgKmIsIGludCAqaykKK3sKKyAgICBwaXhlbCBzZWxbVlZDX01BWF9T QU1QTEVfQVJSQVlTXVtNQVhfUElDS19QT1MgKiAyXTsKKyAgICBpbnQgbWF4W1ZWQ19NQVhfU0FN UExFX0FSUkFZU10sIG1pbltWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIGludCBkaWZmOwor CisgICAgaWYgKCFGVU5DKGNjbG1fc2VsZWN0X3NhbXBsZXMpKGxjLCB4MCwgeTAsIHcsIGgsIGF2 YWlsX3QsIGF2YWlsX2wsIHNlbCkpIHsKKyAgICAgICAgRlVOQyhjY2xtX2dldF9wYXJhbXNfZGVm YXVsdCkoYSwgYiwgayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVU5DKGNjbG1f Z2V0X21pbl9tYXgpKHNlbCwgbWluLCBtYXgpOworCisgICAgZGlmZiA9IG1heFtMVU1BXSAtIG1p bltMVU1BXTsKKyAgICBpZiAoZGlmZiA9PSAwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgMjsgaSsrKSB7CisgICAgICAgICAgICBhW2ldID0ga1tpXSA9IDA7CisgICAgICAgICAgICBi W2ldID0gbWluW2kgKyAxXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAg IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIGNvbnN0IHN0YXRpYyBpbnQg ZGl2X3NpZ190YWJsZVtdID0gezAsIDcsIDYsIDUsIDUsIDQsIDQsIDMsIDMsIDIsIDIsIDEsIDEs IDEsIDEsIDB9OworICAgICAgICBjb25zdCBpbnQgZGlmZmMgPSBtYXhbaSArIDFdIC0gbWluW2kg KyAxXTsKKyAgICAgICAgaW50ICB4ID0gYXZfbG9nMihkaWZmKTsKKyAgICAgICAgaW50ICB5LCB2 LCBzaWduLCBhZGQ7CisgICAgICAgIGNvbnN0IGludCBub3JtX2RpZmYgPSAoKGRpZmYgPDwgNCkg Pj4geCkgJiAxNTsKKyAgICAgICAgeCArPSAobm9ybV9kaWZmKSA/IDEgOiAwOworICAgICAgICB5 ID0gYWJzKGRpZmZjKSA+IDAgPyBhdl9sb2cyKGFicyhkaWZmYykpICsgMSA6IDA7CisgICAgICAg IHYgPSBkaXZfc2lnX3RhYmxlW25vcm1fZGlmZl0gfCA4OworICAgICAgICBhZGQgPSAoMSA8PCB5 ID4+IDEpOworICAgICAgICBhW2ldID0gKGRpZmZjICogdiArIGFkZCkgPj4geTsKKyAgICAgICAg a1tpXSA9IEZGTUFYKDEsIDMgKyB4IC15KTsKKyAgICAgICAgc2lnbiA9IGFbaV0gPCAwID8gLTEg OiAoYVtpXSA+IDApOworICAgICAgICBhW2ldID0gKCgzICsgeCAtIHkpIDwgMSkgPyAgc2lnbiAq IDE1IDogYVtpXTsKKyAgICAgICAgYltpXSA9IG1pbltpICsgMV0gLSAoKGFbaV0gKiBtaW5bMF0p ID4+IGtbaV0pOworICAgIH0KKworfQorCisjdW5kZWYgVE9QCisjdW5kZWYgTEVGVAorCitzdGF0 aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9nZXRfbHVtYV9yZWNfcGl4ZWxzKShj b25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkw LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBpbnQg YXZhaWxfbCwKKyAgICBwaXhlbCAqcGRzeSkKK3sKKyAgICBjb25zdCBpbnQgaHMgICAgICAgICAg ICA9IGZjLT5wcy5zcHMtPmhzaGlmdFsxXTsKKyAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9 IGZjLT5wcy5zcHMtPnZzaGlmdFsxXTsKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlICA9IGZj LT5mcmFtZS0+bGluZXNpemVbMF0gLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0IHBpeGVsICpz b3VyY2UgICAgID0gKHBpeGVsKilmYy0+ZnJhbWUtPmRhdGFbMF0gKyB4MCArIHkwICogc3RyaWRl OworICAgIGNvbnN0IHBpeGVsICpsZWZ0ICAgICAgID0gc291cmNlIC0gYXZhaWxfbDsKKyAgICBj b25zdCBwaXhlbCAqdG9wICAgICAgICA9IHNvdXJjZSAtIGF2YWlsX3QgKiBzdHJpZGU7CisKKyAg ICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7CisgICAgaWYgKCFocyAmJiAhdnMpIHsK KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyBpKyspCisgICAgICAgICAgICBtZW1jcHko cGRzeSArIGkgKiB3LCBzb3VyY2UgKyBpICogc3RyaWRlLCB3ICogc2l6ZW9mKHBpeGVsKSk7Cisg ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyBpKyspIHsK KyAgICAgICAgY29uc3QgcGl4ZWwgKnNyYyAgPSBzb3VyY2U7CisgICAgICAgIGNvbnN0IHBpeGVs ICpsID0gbGVmdDsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnQgPSB0b3A7CisgICAgICAgIGlmICgh dnMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdzsgaisrKSB7CisgICAgICAg ICAgICAgICAgcGl4ZWwgcHJlZCAgPSAoKmwgKyAyICogUE9TKDAsIDApICsgUE9TKDEsIDApICsg MikgPj4gMjsKKyAgICAgICAgICAgICAgICBwZHN5W2kgKiB3ICsgal0gPSBwcmVkOworICAgICAg ICAgICAgICAgIHNyYyArPSAyOworICAgICAgICAgICAgICAgIGwgPSBzcmMgLSAxOworICAgICAg ICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3BzLT5jaHJvbWFf dmVydGljYWxfY29sbG9jYXRlZF9mbGFnKSAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGog PSAwOyBqIDwgdzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsIHByZWQgID0gKCps ICsgKnQgKyA0ICogUE9TKDAsIDApICsgUE9TKDEsIDApICsgUE9TKDAsIDEpICsgNCkgPj4gMzsK KyAgICAgICAgICAgICAgICAgICAgcGRzeVtpICogdyArIGpdID0gcHJlZDsKKyAgICAgICAgICAg ICAgICAgICAgc3JjICs9IDI7CisgICAgICAgICAgICAgICAgICAgIHQgKz0gMjsKKyAgICAgICAg ICAgICAgICAgICAgbCA9IHNyYyAtIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHc7IGorKykgewor ICAgICAgICAgICAgICAgICAgICBwaXhlbCBwcmVkICA9ICgqbCArICoobCArIHN0cmlkZSkgKyAy ICogUE9TKDAsIDApICsgMiAqIFBPUygwLCAxKSArIFBPUygxLCAwKSArIFBPUygxLCAxKSArIDQp ID4+IDM7CisKKyAgICAgICAgICAgICAgICAgICAgcGRzeVtpICogdyArIGpdID0gcHJlZDsKKyAg ICAgICAgICAgICAgICAgICAgc3JjICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGwgPSBzcmMg LSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBzb3VyY2UgKz0gKHN0cmlkZSA8PCB2cyk7CisgICAgICAgIGxlZnQgICArPSAoc3RyaWRlIDw8 IHZzKTsKKyAgICAgICAgdG9wICAgID0gc291cmNlIC0gc3RyaWRlOworICAgIH0KK30KKworc3Rh dGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fcHJlZF9kZWZhdWx0KShWVkNGcmFt ZUNvbnRleHQgKmZjLAorICAgIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IHcs IGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZhaWxfdCwgY29uc3QgaW50IGF2YWlsX2wpCit7Cisg ICAgZm9yIChpbnQgY19pZHggPSAxOyBjX2lkeCA8IFZWQ19NQVhfU0FNUExFX0FSUkFZUzsgY19p ZHgrKykgeworICAgICAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlID0gZmMtPmZyYW1lLT5saW5l c2l6ZVtjX2lkeF0gLyBzaXplb2YocGl4ZWwpOworICAgICAgICBwaXhlbCAqZHN0ID0gKHBpeGVs KilmYy0+ZnJhbWUtPmRhdGFbY19pZHhdICsgeCArIHkgKiBzdHJpZGU7CisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgaDsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IHc7IGorKykgeworICAgICAgICAgICAgICAgIGRzdFtqXSA9IDEgPDwgKEJJVF9ERVBUSCAtIDEp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICAgICAgfQor ICAgIH0KK30KKworLy84LjQuNS4yLjE0IFNwZWNpZmljYXRpb24gb2YgSU5UUkFfTFRfQ0NMTSwg SU5UUkFfTF9DQ0xNIGFuZCBJTlRSQV9UX0NDTE0gaW50cmEgcHJlZGljdGlvbiBtb2RlCitzdGF0 aWMgdm9pZCBGVU5DKGludHJhX2NjbG1fcHJlZCkoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBp bnQgaGVpZ2h0KQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAg IGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgYXZhaWxfdCA9 IGZmX3Z2Y19nZXRfdG9wX2F2YWlsYWJsZShsYywgeDAsIHkwLCAxLCAwKTsKKyAgICBjb25zdCBp bnQgYXZhaWxfbCA9IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUobGMsIHgwLCB5MCwgMSwgMCk7 CisgICAgY29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbMV07CisgICAgY29uc3QgaW50IHZzID0g c3BzLT52c2hpZnRbMV07CisgICAgY29uc3QgaW50IHggID0geDAgPj4gaHM7CisgICAgY29uc3Qg aW50IHkgID0geTAgPj4gdnM7CisgICAgY29uc3QgaW50IHcgID0gd2lkdGggPj4gaHM7CisgICAg Y29uc3QgaW50IGggID0gaGVpZ2h0ID4+IHZzOworICAgIGludCBhWzJdLCBiWzJdLCBrWzJdOwor CisgICAgcGl4ZWwgZHN5W01BWF9UQl9TSVpFICogTUFYX1RCX1NJWkVdOworICAgIGlmICghYXZh aWxfdCAmJiAhYXZhaWxfbCkgeworICAgICAgICBGVU5DKGNjbG1fcHJlZF9kZWZhdWx0KShmYywg eCwgeSwgdywgaCwgYXZhaWxfdCwgYXZhaWxfbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg ICAgRlVOQyhjY2xtX2dldF9sdW1hX3JlY19waXhlbHMpKGZjLCB4MCwgeTAsIHcsIGgsIGF2YWls X3QsIGF2YWlsX2wsIGRzeSk7CisgICAgRlVOQyhjY2xtX2dldF9wYXJhbXMpIChsYywgeDAsIHkw LCB3LCBoLCBhdmFpbF90LCBhdmFpbF9sLCBhLCBiLCBrKTsKKyAgICBGVU5DKGNjbG1fbGluZWFy X3ByZWQpKGZjLCB4MCwgeTAsIHcsIGgsIGRzeSwgYSwgYiwgayk7Cit9CisKK3N0YXRpYyBpbnQg RlVOQyhsbWNzX3N1bV9zYW1wbGVzKShjb25zdCBwaXhlbCAqc3RhcnQsIHB0cmRpZmZfdCBzdHJp ZGUsIGNvbnN0IGludCBhdmFpbCwgY29uc3QgaW50IHRhcmdldF9zaXplKQoreworICAgIGNvbnN0 IGludCBzaXplID0gRkZNSU4oYXZhaWwsIHRhcmdldF9zaXplKTsKKyAgICBpbnQgc3VtID0gMDsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBzdW0gKz0gKnN0 YXJ0OworICAgICAgICBzdGFydCArPSBzdHJpZGU7CisgICAgfQorICAgIHN1bSArPSAqKHN0YXJ0 IC0gc3RyaWRlKSAqICh0YXJnZXRfc2l6ZSAtIHNpemUpOworICAgIHJldHVybiBzdW07Cit9CisK Ky8vIDguNy41LjMgUGljdHVyZSByZWNvbnN0cnVjdGlvbiB3aXRoIGx1bWEgZGVwZW5kZW50IGNo cm9tYSByZXNpZHVhbCBzY2FsaW5nIHByb2Nlc3MgZm9yIGNocm9tYSBzYW1wbGVzCitzdGF0aWMg aW50IEZVTkMobG1jc19kZXJpdmVfY2hyb21hX3NjYWxlKShWVkNMb2NhbENvbnRleHQgKmxjLCBj b25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjID0g bGMtPmZjOworICAgIGNvbnN0IFZWQ1BIICpwaCAgICAgPSBmYy0+cHMucGg7CisgICAgY29uc3Qg aW50IHNpemVfeSA9IEZGTUlOKGZjLT5wcy5zcHMtPmN0Yl9zaXplX3ksIDY0KTsKKworICAgIGNv bnN0IGludCB4ID0geDAgJiB+KHNpemVfeSAtIDEpOworICAgIGNvbnN0IGludCB5ID0geTAgJiB+ KHNpemVfeSAtIDEpOworICAgIGlmIChsYy0+bG1jcy54X3ZwZHUgIT0geCB8fCBsYy0+bG1jcy55 X3ZwZHUgIT0geSkgeworICAgICAgICBpbnQgY250ID0gMCwgbHVtYSA9IDAsIGk7CisgICAgICAg IGNvbnN0IHBpeGVsICpzcmMgPSAoY29uc3QgcGl4ZWwgKikoZmMtPmZyYW1lLT5kYXRhW0xVTUFd ICsgeSAqIGZjLT5mcmFtZS0+bGluZXNpemVbTFVNQV0gKyAoeCA8PCBmYy0+cHMuc3BzLT5waXhl bF9zaGlmdCkpOworICAgICAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlID0gZmMtPmZyYW1lLT5s aW5lc2l6ZVtMVU1BXSAvIHNpemVvZihwaXhlbCk7CisgICAgICAgIGNvbnN0IGludCBhdmFpbF90 ID0gZmZfdnZjX2dldF90b3BfYXZhaWxhYmxlIChsYywgeCwgeSwgMSwgMCk7CisgICAgICAgIGNv bnN0IGludCBhdmFpbF9sID0gZmZfdnZjX2dldF9sZWZ0X2F2YWlsYWJsZShsYywgeCwgeSwgMSwg MCk7CisgICAgICAgIGlmIChhdmFpbF9sKSB7CisgICAgICAgICAgICBsdW1hICs9IEZVTkMobG1j c19zdW1fc2FtcGxlcykoc3JjIC0gMSwgc3RyaWRlLCBmYy0+cHMucHBzLT5oZWlnaHQgLSB5LCBz aXplX3kpOworICAgICAgICAgICAgY250ID0gc2l6ZV95OworICAgICAgICB9CisgICAgICAgIGlm IChhdmFpbF90KSB7CisgICAgICAgICAgICBsdW1hICs9IEZVTkMobG1jc19zdW1fc2FtcGxlcyko c3JjIC0gc3RyaWRlLCAxLCBmYy0+cHMucHBzLT53aWR0aCAtIHgsIHNpemVfeSk7CisgICAgICAg ICAgICBjbnQgKz0gc2l6ZV95OworICAgICAgICB9CisgICAgICAgIGlmIChjbnQpCisgICAgICAg ICAgICBsdW1hID0gKGx1bWEgKyAoY250ID4+IDEpKSA+PiBhdl9sb2cyKGNudCk7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgIGx1bWEgPSAxIDw8IChCSVRfREVQVEggLSAxKTsKKworICAgICAg ICBmb3IgKGkgPSBwaC0+bG1jc19taW5fYmluX2lkeDsgaSA8PSBwaC0+bG1jc19tYXhfYmluX2lk eDsgaSsrKSB7CisgICAgICAgICAgICBpZiAobHVtYSA8IHBoLT5sbWNzX3Bpdm90W2kgKyAxXSkK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpID0gRkZNSU4oaSwg TE1DU19NQVhfQklOX1NJWkUgLSAxKTsKKworICAgICAgICBsYy0+bG1jcy5jaHJvbWFfc2NhbGUg PSBwaC0+bG1jc19jaHJvbWFfc2NhbGVfY29lZmZbaV07CisgICAgICAgIGxjLT5sbWNzLnhfdnBk dSA9IHg7CisgICAgICAgIGxjLT5sbWNzLnlfdnBkdSA9IHk7CisgICAgfQorICAgIHJldHVybiBs Yy0+bG1jcy5jaHJvbWFfc2NhbGU7Cit9CisKKy8vIDguNy41LjMgUGljdHVyZSByZWNvbnN0cnVj dGlvbiB3aXRoIGx1bWEgZGVwZW5kZW50IGNocm9tYSByZXNpZHVhbCBzY2FsaW5nIHByb2Nlc3Mg Zm9yIGNocm9tYSBzYW1wbGVzCitzdGF0aWMgdm9pZCBGVU5DKGxtY3Nfc2NhbGVfY2hyb21hKShW VkNMb2NhbENvbnRleHQgKmxjLCBpbnQgKmRzdCwgY29uc3QgaW50ICpjb2VmZiwKKyAgICBjb25z dCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCB4MF9jdSwgY29uc3QgaW50 IHkwX2N1KQoreworICAgIGNvbnN0IGludCBjaHJvbWFfc2NhbGUgPSBGVU5DKGxtY3NfZGVyaXZl X2Nocm9tYV9zY2FsZSkobGMsIHgwX2N1LCB5MF9jdSk7CisKKyAgICBmb3IgKGludCB5ID0gMDsg eSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr KykgeworICAgICAgICAgICAgY29uc3QgaW50IGMgPSBhdl9jbGlwX2ludHAyKCpjb2VmZiwgQklU X0RFUFRIKTsKKworICAgICAgICAgICAgaWYgKGMgPiAwKQorICAgICAgICAgICAgICAgICpkc3Qg PSAoYyAqIGNocm9tYV9zY2FsZSArICgxIDw8IDEwKSkgPj4gMTE7CisgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgKmRzdCA9IC0oKC1jICogY2hyb21hX3NjYWxlICsgKDEgPDwgMTAp KSA+PiAxMSk7CisgICAgICAgICAgICBjb2VmZisrOworICAgICAgICAgICAgZHN0Kys7CisgICAg ICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhyZWZf ZmlsdGVyKShjb25zdCBwaXhlbCAqbGVmdCwgY29uc3QgcGl4ZWwgKnRvcCwKKyAgICBwaXhlbCAq ZmlsdGVyZWRfbGVmdCwgcGl4ZWwgKmZpbHRlcmVkX3RvcCwgY29uc3QgaW50IGxlZnRfc2l6ZSwg Y29uc3QgaW50IHRvcF9zaXplLAorICAgIGNvbnN0IGludCB1bmZpbHRlcl9sYXN0X29uZSkKK3sK KyAgICBmaWx0ZXJlZF9sZWZ0Wy0xXSA9IGZpbHRlcmVkX3RvcFstMV0gPSAobGVmdFswXSArICAy ICogbGVmdFstMV0gKyB0b3BbMF0gKyAyICkgPj4gMjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IGxlZnRfc2l6ZSAtIHVuZmlsdGVyX2xhc3Rfb25lOyBpKyspIHsKKyAgICAgICAgZmlsdGVyZWRf bGVmdFtpXSA9IChsZWZ0W2ktIDFdICsgMiAqIGxlZnRbaV0gKyBsZWZ0W2kgKyAxXSArIDIpID4+ IDI7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9wX3NpemUgLSB1bmZpbHRlcl9s YXN0X29uZTsgaSsrKSB7CisgICAgICAgIGZpbHRlcmVkX3RvcFtpXSA9ICh0b3BbaS0xXSArIDIg KiB0b3BbaV0gKyB0b3BbaSArIDFdICsgMikgPj4gMjsKKyAgICB9CisgICAgaWYgKHVuZmlsdGVy X2xhc3Rfb25lKSB7CisgICAgICAgIGZpbHRlcmVkX3RvcFt0b3Bfc2l6ZSAtIDFdID0gdG9wW3Rv cF9zaXplIC0gMV07CisgICAgICAgIGZpbHRlcmVkX2xlZnRbbGVmdF9zaXplIC0gMV0gPSBsZWZ0 W2xlZnRfc2l6ZSAtIDFdOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9p ZCBGVU5DKHByZXBhcmVfaW50cmFfZWRnZV9wYXJhbXMpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAq bGMsCisgICAgSW50cmFFZGdlUGFyYW1zKiBlZGdlLCBjb25zdCBwaXhlbCAqc3JjLCBjb25zdCBw dHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBp bnQgY19pZHgsIGNvbnN0IGludCBpc19pbnRyYV9taXAsCisgICAgY29uc3QgaW50IG1vZGUsIGNv bnN0IGludCByZWZfaWR4LCBjb25zdCBpbnQgbmVlZF9wZHBjKQoreworI2RlZmluZSBFWFRFTkQo cHRyLCB2YWwsIGxlbikgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICBmb3IgKGkgPSAwOyBpIDwgKGxlbik7IGkrKykgICAgICAgXAorICAgICAg ICAqKHB0ciArIGkpID0gdmFsOyAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorICAgIGNvbnN0 IENvZGluZ1VuaXQgKmN1ID0gbGMtPmN1OworICAgIGNvbnN0IGludCByZWZfZmlsdGVyX2ZsYWcg PSBpc19pbnRyYV9taXAgPyAwIDogZmZfdnZjX3JlZl9maWx0ZXJfZmxhZ19kZXJpdmUobW9kZSk7 CisgICAgY29uc3QgaW50IGZpbHRlcl9mbGFnID0gIXJlZl9pZHggJiYgdyAqIGggPiAzMiAmJiAh Y19pZHggJiYKKyAgICAgICAgY3UtPmlzcF9zcGxpdF90eXBlID09IElTUF9OT19TUExJVCAmJiBy ZWZfZmlsdGVyX2ZsYWc7CisgICAgaW50IGNhbmRfdXBfbGVmdCAgICAgID0gbGMtPm5hLmNhbmRf dXBfbGVmdDsKKyAgICBwaXhlbCAgKmxlZnQgICAgICAgICAgPSAocGl4ZWwqKWVkZ2UtPmxlZnRf YXJyYXkgKyBNQVhfVEJfU0laRSArIDM7CisgICAgcGl4ZWwgICp0b3AgICAgICAgICAgID0gKHBp eGVsKillZGdlLT50b3BfYXJyYXkgICsgTUFYX1RCX1NJWkUgKyAzOworICAgIHBpeGVsICAqZmls dGVyZWRfbGVmdCA9IChwaXhlbCopZWRnZS0+ZmlsdGVyZWRfbGVmdF9hcnJheSArIE1BWF9UQl9T SVpFICsgMzsKKyAgICBwaXhlbCAgKmZpbHRlcmVkX3RvcCAgPSAocGl4ZWwqKWVkZ2UtPmZpbHRl cmVkX3RvcF9hcnJheSAgKyBNQVhfVEJfU0laRSArIDM7CisgICAgY29uc3QgaW50IHJlZl9saW5l ID0gcmVmX2lkeCA9PSAzID8gLTQgOiAoLTEgLSByZWZfaWR4KTsKKyAgICBpbnQgbGVmdF9zaXpl LCB0b3Bfc2l6ZSwgdW5maWx0ZXJfbGVmdF9zaXplLCB1bmZpbHRlcl90b3Bfc2l6ZTsKKyAgICBp bnQgbGVmdF9hdmFpbGFibGUsIHRvcF9hdmFpbGFibGU7CisgICAgaW50IHJlZncsIHJlZmg7Cisg ICAgaW50IGludHJhX3ByZWRfYW5nbGUsIGludl9hbmdsZTsKKyAgICBpbnQgaTsKKworICAgIGlm IChpc19pbnRyYV9taXAgfHwgbW9kZSA9PSBJTlRSQV9QTEFOQVIpIHsKKyAgICAgICAgbGVmdF9z aXplID0gaCArIDE7CisgICAgICAgIHRvcF9zaXplICA9IHcgKyAxOworICAgICAgICB1bmZpbHRl cl9sZWZ0X3NpemUgPSBsZWZ0X3NpemUgKyBmaWx0ZXJfZmxhZzsKKyAgICAgICAgdW5maWx0ZXJf dG9wX3NpemUgID0gdG9wX3NpemUgICsgZmlsdGVyX2ZsYWc7CisgICAgfSBlbHNlIGlmIChtb2Rl ID09IElOVFJBX0RDKSB7CisgICAgICAgIHVuZmlsdGVyX2xlZnRfc2l6ZSA9IGxlZnRfc2l6ZSA9 IGg7CisgICAgICAgIHVuZmlsdGVyX3RvcF9zaXplID0gdG9wX3NpemUgID0gdzsKKyAgICB9IGVs c2UgaWYgKG1vZGUgPT0gSU5UUkFfVkVSVCkgeworICAgICAgICAvL3dlIG1heSBuZWVkIDEgcGl4 ZWwgdG8gcHJlZGljdCB0aGUgdG9wIGxlZnQuCisgICAgICAgIHVuZmlsdGVyX2xlZnRfc2l6ZSA9 IGxlZnRfc2l6ZSA9IG5lZWRfcGRwYyA/IGggOiAxOworICAgICAgICB1bmZpbHRlcl90b3Bfc2l6 ZSA9IHRvcF9zaXplICA9IHc7CisgICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX0hPUlopIHsK KyAgICAgICAgdW5maWx0ZXJfbGVmdF9zaXplID0gbGVmdF9zaXplID0gaDsKKyAgICAgICAgLy9l dmVuIG5lZWRfcGRwYyA9PSAwLCB3ZSBtYXkgbmVlZCAxIHBpeGVsIHRvIHByZWRpY3QgdGhlIHRv cCBsZWZ0LgorICAgICAgICB1bmZpbHRlcl90b3Bfc2l6ZSA9IHRvcF9zaXplID0gbmVlZF9wZHBj ID8gdyA6IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGN1LT5pc3Bfc3BsaXRfdHlwZSA9 PSBJU1BfTk9fU1BMSVQgfHwgY19pZHgpIHsKKyAgICAgICAgICAgIHJlZncgPSB3ICogMjsKKyAg ICAgICAgICAgIHJlZmggPSBoICogMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl ZncgPSBjdS0+Y2Jfd2lkdGggKyB3OworICAgICAgICAgICAgcmVmaCA9IGN1LT5jYl9oZWlnaHQg KyBoOworICAgICAgICB9CisgICAgICAgIGludHJhX3ByZWRfYW5nbGUgPSBmZl92dmNfaW50cmFf cHJlZF9hbmdsZV9kZXJpdmUobW9kZSk7CisgICAgICAgIGludl9hbmdsZSA9IGZmX3Z2Y19pbnRy YV9pbnZfYW5nbGVfZGVyaXZlKGludHJhX3ByZWRfYW5nbGUpOworICAgICAgICB1bmZpbHRlcl90 b3Bfc2l6ZSA9IHRvcF9zaXplICA9IHJlZnc7CisgICAgICAgIHVuZmlsdGVyX2xlZnRfc2l6ZSA9 IGxlZnRfc2l6ZSA9IHJlZmg7CisgICAgfQorCisgICAgbGVmdF9hdmFpbGFibGUgPSBmZl92dmNf Z2V0X2xlZnRfYXZhaWxhYmxlKGxjLCB4LCB5LCB1bmZpbHRlcl9sZWZ0X3NpemUsIGNfaWR4KTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgbGVmdF9hdmFpbGFibGU7IGkrKykKKyAgICAgICAgbGVmdFtp XSA9IFBPUyhyZWZfbGluZSwgaSk7CisKKyAgICB0b3BfYXZhaWxhYmxlID0gZmZfdnZjX2dldF90 b3BfYXZhaWxhYmxlKGxjLCB4LCB5LCB1bmZpbHRlcl90b3Bfc2l6ZSwgY19pZHgpOworICAgIG1l bWNweSh0b3AsIHNyYyArIHJlZl9saW5lICogc3RyaWRlLCB0b3BfYXZhaWxhYmxlICogc2l6ZW9m KHBpeGVsKSk7CisKKyAgICBmb3IgKGludCBpID0gLTE7IGkgPj0gcmVmX2xpbmU7IGktLSkgewor ICAgICAgICBpZiAoY2FuZF91cF9sZWZ0KSB7CisgICAgICAgICAgICBsZWZ0W2ldID0gUE9TKHJl Zl9saW5lLCBpKTsKKyAgICAgICAgICAgIHRvcFtpXSAgPSBQT1MoaSwgcmVmX2xpbmUpOworICAg ICAgICB9IGVsc2UgaWYgKGxlZnRfYXZhaWxhYmxlKSB7CisgICAgICAgICAgICBsZWZ0W2ldID0g dG9wW2ldID0gbGVmdFswXTsKKyAgICAgICAgfSBlbHNlIGlmICh0b3BfYXZhaWxhYmxlKSB7Cisg ICAgICAgICAgICBsZWZ0W2ldID0gdG9wW2ldID0gdG9wWzBdOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgbGVmdFtpXSA9IHRvcFtpXSA9IDEgPDwgKEJJVF9ERVBUSCAtIDEpOworICAg ICAgICB9CisgICAgfQorCisgICAgRVhURU5EKHRvcCArIHRvcF9hdmFpbGFibGUsIHRvcFt0b3Bf YXZhaWxhYmxlLTFdLCB1bmZpbHRlcl90b3Bfc2l6ZSAtIHRvcF9hdmFpbGFibGUpOworICAgIEVY VEVORChsZWZ0ICsgbGVmdF9hdmFpbGFibGUsIGxlZnRbbGVmdF9hdmFpbGFibGUtMV0sIHVuZmls dGVyX2xlZnRfc2l6ZSAtIGxlZnRfYXZhaWxhYmxlKTsKKworICAgIGlmIChyZWZfZmlsdGVyX2Zs YWcpIHsKKyAgICAgICAgaWYgKCFyZWZfaWR4ICYmIHcgKiBoID4gMzIgJiYgIWNfaWR4ICYmIGN1 LT5pc3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9fU1BMSVQgKSB7CisgICAgICAgICAgICBjb25zdCBp bnQgdW5maWx0ZXJfbGFzdF9vbmUgPSBsZWZ0X3NpemUgPT0gdW5maWx0ZXJfbGVmdF9zaXplOwor ICAgICAgICAgICAgRlVOQyhyZWZfZmlsdGVyKShsZWZ0LCB0b3AsIGZpbHRlcmVkX2xlZnQsIGZp bHRlcmVkX3RvcCwgdW5maWx0ZXJfbGVmdF9zaXplLCB1bmZpbHRlcl90b3Bfc2l6ZSwgdW5maWx0 ZXJfbGFzdF9vbmUpOworICAgICAgICAgICAgbGVmdCA9IGZpbHRlcmVkX2xlZnQ7CisgICAgICAg ICAgICB0b3AgID0gZmlsdGVyZWRfdG9wOworICAgICAgICB9CisgICAgfQorICAgIGlmICghaXNf aW50cmFfbWlwICYmIG1vZGUgIT0gSU5UUkFfUExBTkFSICYmIG1vZGUgIT0gSU5UUkFfREMpIHsK KyAgICAgICAgaWYgKHJlZl9maWx0ZXJfZmxhZyB8fCByZWZfaWR4IHx8IGN1LT5pc3Bfc3BsaXRf dHlwZSAhPSBJU1BfTk9fU1BMSVQpIHsKKyAgICAgICAgICAgIGVkZ2UtPmZpbHRlcl9mbGFnID0g MDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBtaW5fZGlzdF92ZXJf aG9yID0gRkZNSU4oYWJzKG1vZGUgLSA1MCksIGFicyhtb2RlIC0gMTgpKTsKKyAgICAgICAgICAg IGNvbnN0IGludCBpbnRyYV9ob3JfdmVyX2Rpc3RfdGhyZXNbXSA9IHsyNCwgMTQsIDIsIDAsIDB9 OworICAgICAgICAgICAgY29uc3QgaW50IG50YnMgPSAoYXZfbG9nMih3KSArIGF2X2xvZzIoaCkp ID4+IDE7CisgICAgICAgICAgICBlZGdlLT5maWx0ZXJfZmxhZyA9IG1pbl9kaXN0X3Zlcl9ob3Ig PiBpbnRyYV9ob3JfdmVyX2Rpc3RfdGhyZXNbbnRicyAtIDJdOworICAgICAgICB9CisKKyAgICAg ICAgaWYgKG1vZGUgIT0gSU5UUkFfVkVSVCAmJiBtb2RlICE9IElOVFJBX0hPUlopIHsKKyAgICAg ICAgICAgIGlmIChtb2RlID49IElOVFJBX0RJQUcpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50 cmFfcHJlZF9hbmdsZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgKnAgPSB0b3Ag LSAocmVmX2lkeCArIDEpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gLWg7IHgg PCAwOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpZHggPSAtMSAt IHJlZl9pZHggKyBGRk1JTigoeCppbnZfYW5nbGUgKyAyNTYpID4+IDksIGgpOworICAgICAgICAg ICAgICAgICAgICAgICAgcFt4XSA9IGxlZnRbaWR4XTsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg PSByZWZ3OyBpIDw9IHJlZncgKyBGRk1BWCgxLCB3L2gpICogcmVmX2lkeCArIDE7IGkrKykKKyAg ICAgICAgICAgICAgICAgICAgICAgIHRvcFtpXSA9IHRvcFtyZWZ3IC0gMV07CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50cmFf cHJlZF9hbmdsZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgKnAgPSBsZWZ0IC0g KHJlZl9pZHggKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IC13OyB4IDwg MDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaWR4ID0gLTEgLSBy ZWZfaWR4ICsgRkZNSU4oKHgqaW52X2FuZ2xlICsgMjU2KSA+PiA5LCB3KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHBbeF0gPSB0b3BbaWR4XTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBy ZWZoOyBpIDw9IHJlZmggKyBGRk1BWCgxLCBoL3cpICogcmVmX2lkeCArIDE7IGkrKykKKyAgICAg ICAgICAgICAgICAgICAgICAgIGxlZnRbaV0gPSBsZWZ0W3JlZmggLSAxXTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWRnZS0+bGVmdCA9 ICh1aW50OF90KilsZWZ0OworICAgIGVkZ2UtPnRvcCAgPSAodWludDhfdCopdG9wOworfQorCisv LzguNC4xIEdlbmVyYWwgZGVjb2RpbmcgcHJvY2VzcyBmb3IgY29kaW5nIHVuaXRzIGNvZGVkIGlu IGludHJhIHByZWRpY3Rpb24gbW9kZQorc3RhdGljIHZvaWQgRlVOQyhpbnRyYV9wcmVkKShjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwKKyAgICBjb25zdCBpbnQgd2lk dGgsIGNvbnN0IGludCBoZWlnaHQsIGludCBjX2lkeCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQg KmZjICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7Cisg ICAgY29uc3QgVlZDUFBTICpwcHMgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IENvZGluZ1VuaXQg KmN1ID0gbGMtPmN1OworICAgIGNvbnN0IGludCBsb2cyX21pbl9jYl9zaXplICAgID0gc3BzLT5t aW5fY2JfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgICAgPSBw cHMtPm1pbl9jYl93aWR0aDsKKyAgICBjb25zdCBpbnQgeF9jYiAgICAgICAgICAgICAgICA9IHgw ID4+IGxvZzJfbWluX2NiX3NpemU7CisgICAgY29uc3QgaW50IHlfY2IgICAgICAgICAgICAgICAg PSB5MCA+PiBsb2cyX21pbl9jYl9zaXplOworCisgICAgY29uc3QgaW50IGhzaGlmdCA9IGZjLT5w cy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHZzaGlmdCA9IGZjLT5wcy5zcHMt PnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHggPSB4MCA+PiBoc2hpZnQ7CisgICAgY29u c3QgaW50IHkgPSB5MCA+PiB2c2hpZnQ7CisgICAgY29uc3QgaW50IHcgPSB3aWR0aCA+PiBoc2hp ZnQ7CisgICAgY29uc3QgaW50IGggPSBoZWlnaHQgPj4gdnNoaWZ0OworICAgIGNvbnN0IHB0cmRp ZmZfdCBzdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSAvIHNpemVvZihwaXhlbCk7 CisKKyAgICBjb25zdCBpbnQgcHJlZF9tb2RlID0gY19pZHggPyBjdS0+aW50cmFfcHJlZF9tb2Rl X2MgOiBjdS0+aW50cmFfcHJlZF9tb2RlX3k7CisgICAgY29uc3QgaW50IG1vZGUgPSBmZl92dmNf d2lkZV9hbmdsZV9tb2RlX21hcHBpbmcoY3UsIHcsIGgsIGNfaWR4LCBwcmVkX21vZGUpOworCisg ICAgY29uc3QgaW50IGludHJhX21pcF9mbGFnICA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pbWYsIHhf Y2IsIHlfY2IpOworICAgIGNvbnN0IGludCBpc19pbnRyYV9taXAgICAgPSBpbnRyYV9taXBfZmxh ZyAmJiAoIWNfaWR4IHx8IGN1LT5taXBfY2hyb21hX2RpcmVjdF9mbGFnKTsKKyAgICBjb25zdCBp bnQgcmVmX2lkeCA9IGNfaWR4ID8gMCA6IGN1LT5pbnRyYV9sdW1hX3JlZl9pZHg7CisgICAgY29u c3QgaW50IG5lZWRfcGRwYyA9IGZmX3Z2Y19uZWVkX3BkcGModywgaCwgY3UtPmJkcGNtX2ZsYWdb Y19pZHhdLCBtb2RlLCByZWZfaWR4KTsKKworCisgICAgcGl4ZWwgKnNyYyA9IChwaXhlbCopZmMt PmZyYW1lLT5kYXRhW2NfaWR4XSArIHggKyB5ICogc3RyaWRlOworICAgIEludHJhRWRnZVBhcmFt cyBlZGdlOworCisgICAgRlVOQyhwcmVwYXJlX2ludHJhX2VkZ2VfcGFyYW1zKShsYywgJmVkZ2Us IHNyYywgc3RyaWRlLCB4LCB5LCB3LCBoLCBjX2lkeCwgaXNfaW50cmFfbWlwLCBtb2RlLCByZWZf aWR4LCBuZWVkX3BkcGMpOworCisgICAgaWYgKGlzX2ludHJhX21pcCkgeworICAgICAgICBpbnQg aW50cmFfbWlwX3RyYW5zcG9zZWRfZmxhZyA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pbXRmLCB4X2Ni LCB5X2NiKTsKKyAgICAgICAgaW50IGludHJhX21pcF9tb2RlID0gU0FNUExFX0NUQihmYy0+dGFi LmltbSwgeF9jYiwgeV9jYik7CisKKyAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5wcmVkX21pcCgo dWludDhfdCAqKXNyYywgZWRnZS50b3AsIGVkZ2UubGVmdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgIHcsIGgsIHN0cmlkZSwgaW50cmFfbWlwX21vZGUsIGludHJhX21pcF90cmFuc3Bvc2VkX2Zs YWcpOworICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRSQV9QTEFOQVIpIHsKKyAgICAgICAgZmMt PnZ2Y2RzcC5pbnRyYS5wcmVkX3BsYW5hcigodWludDhfdCAqKXNyYywgZWRnZS50b3AsIGVkZ2Uu bGVmdCwgdywgaCwgc3RyaWRlKTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFfREMpIHsK KyAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5wcmVkX2RjKCh1aW50OF90ICopc3JjLCBlZGdlLnRv cCwgZWRnZS5sZWZ0LCB3LCBoLCBzdHJpZGUpOworICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRS QV9WRVJUKSB7CisgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF92KCh1aW50OF90ICopc3Jj LCBlZGdlLnRvcCwgdywgaCwgc3RyaWRlKTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFf SE9SWikgeworICAgICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfaCgodWludDhfdCAqKXNyYywg ZWRnZS5sZWZ0LCB3LCBoLCBzdHJpZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtb2Rl ID49IElOVFJBX0RJQUcpIHsKKyAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF9hbmd1 bGFyX3YoKHVpbnQ4X3QgKilzcmMsIGVkZ2UudG9wLCBlZGdlLmxlZnQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdywgaCwgc3RyaWRlLCBjX2lkeCwgbW9kZSwgcmVmX2lkeCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLmZpbHRlcl9mbGFnLCBuZWVk X3BkcGMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5w cmVkX2FuZ3VsYXJfaCgodWludDhfdCAqKXNyYywgZWRnZS50b3AsIGVkZ2UubGVmdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBzdHJpZGUsIGNfaWR4LCBtb2RlLCBy ZWZfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UuZmlsdGVyX2Zs YWcsIG5lZWRfcGRwYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5lZWRfcGRwYykgewor ICAgICAgICAvLzguNC41LjIuMTUgUG9zaXRpb24tZGVwZW5kZW50IGludHJhIHByZWRpY3Rpb24g c2FtcGxlIGZpbHRlcmluZyBwcm9jZXNzCisgICAgICAgIGlmICghaXNfaW50cmFfbWlwICYmICht b2RlID09IElOVFJBX1BMQU5BUiB8fCBtb2RlID09IElOVFJBX0RDIHx8CisgICAgICAgICAgICBt b2RlID09IElOVFJBX1ZFUlQgfHwgbW9kZSA9PSBJTlRSQV9IT1JaKSkgeworICAgICAgICAgICAg Y29uc3QgaW50IHNjYWxlID0gKGF2X2xvZzIodykgKyBhdl9sb2cyKGgpIC0gMikgPj4gMjsKKyAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpsZWZ0ID0gKHBpeGVsKillZGdlLmxlZnQ7CisgICAgICAg ICAgICBjb25zdCBwaXhlbCAqdG9wICA9IChwaXhlbCopZWRnZS50b3A7CisgICAgICAgICAgICBm b3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHgg PSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBsLCB0LCB3bCwgd3Qs IHByZWQ7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsIHZhbDsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKG1vZGUgPT0gSU5UUkFfUExBTkFSIHx8IG1vZGUgPT0gSU5UUkFfREMpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGwgID0gbGVmdFt5XTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHQgPSB0b3BbeF07CisgICAgICAgICAgICAgICAgICAgICAgICB3bCA9IDMyID4+IEZGTUlOKCh4 IDw8IDEpID4+IHNjYWxlLCAzMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3dCA9IDMyID4+ IEZGTUlOKCh5IDw8IDEpID4+IHNjYWxlLCAzMSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsICA9IGxlZnRbeV0gLSBsZWZ0Wy0xXSArIFBP Uyh4LHkpOworICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHRvcFt4XSAtIHRvcFstMV0gKyBQ T1MoeCx5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsID0gKG1vZGUgPT0gSU5UUkFfVkVS VCkgPyAgKDMyID4+IEZGTUlOKCh4IDw8IDEpID4+IHNjYWxlLCAzMSkpIDogMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHd0ID0gKG1vZGUgPT0gSU5UUkFfSE9SWikgPyAgKDMyID4+IEZGTUlO KCh5IDw8IDEpID4+IHNjYWxlLCAzMSkpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICB2YWwgPSBQT1MoeCwgeSk7CisgICAgICAgICAgICAgICAgICAgIHBy ZWQgID0gdmFsICsgKCh3bCAqIChsIC0gdmFsKSArIHd0ICogKHQgLSB2YWwpICsgMzIpID4+IDYp OworICAgICAgICAgICAgICAgICAgICBQT1MoeCwgeSkgPSBDTElQKHByZWQpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworLy84LjQuNS4y LjExIFNwZWNpZmljYXRpb24gb2YgSU5UUkFfUExBTkFSIGludHJhIHByZWRpY3Rpb24gbW9kZQor c3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKHByZWRfcGxhbmFyKSh1aW50OF90ICpf c3JjLCBjb25zdCB1aW50OF90ICpfdG9wLAorICAgIGNvbnN0IHVpbnQ4X3QgKl9sZWZ0LCBjb25z dCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgaW50 IHgsIHk7CisgICAgcGl4ZWwgKnNyYyAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0 IHBpeGVsICp0b3AgID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBjb25zdCBwaXhlbCAqbGVm dCA9IChjb25zdCBwaXhlbCAqKV9sZWZ0OworICAgIGNvbnN0IGludCBsb2d3ICA9IGF2X2xvZzIo dyk7CisgICAgY29uc3QgaW50IGxvZ2ggID0gYXZfbG9nMihoKTsKKyAgICBjb25zdCBpbnQgc2l6 ZSAgPSAgdyAqIGg7CisgICAgY29uc3QgaW50IHNoaWZ0ID0gKGxvZ3cgKyBsb2doICsgMSk7Cisg ICAgZm9yICh5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBmb3IgKHggPSAwOyB4IDwgdzsg eCsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlZF92ID0gKChoIC0gMSAtIHkpICogdG9w W3hdICArICh5ICsgMSkgKiBsZWZ0W2hdKSA8PCBsb2d3OworICAgICAgICAgICAgY29uc3QgaW50 IHByZWRfaCA9ICgodyAtIDEgLSB4KSAqIGxlZnRbeV0gKyAoeCArIDEpICogdG9wW3ddKSA8PCBs b2doOworICAgICAgICAgICAgY29uc3QgaW50IHByZWQgPSAocHJlZF92ICsgcHJlZF9oICsgc2l6 ZSkgPj4gc2hpZnQ7CisgICAgICAgICAgICBQT1MoeCwgeSkgPSBwcmVkOworICAgICAgICB9Cisg ICAgfQorfQorCisvLzguNC41LjIuMyBNSVAgYm91bmRhcnkgc2FtcGxlIGRvd25zYW1wbGluZyBw cm9jZXNzCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMobWlwX2Rvd25zYW1wbGlu ZykoaW50ICpyZWR1Y2VkLCBjb25zdCBpbnQgYm91bmRhcnlfc2l6ZSwKKyAgICBjb25zdCBwaXhl bCAqcmVmLCBjb25zdCBpbnQgbl90Yl9zKQoreworICAgIGNvbnN0IGludCBiX2R3biA9IG5fdGJf cyAvIGJvdW5kYXJ5X3NpemU7CisgICAgY29uc3QgaW50IGxvZzIgPSBhdl9sb2cyKGJfZHduKTsK KworICAgIGlmIChib3VuZGFyeV9zaXplID09IG5fdGJfcykgeworICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IG5fdGJfczsgaSsrKQorICAgICAgICAgICAgcmVkdWNlZFtpXSA9IHJlZltpXTsK KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJvdW5kYXJ5 X3NpemU7IGkrKykgeworICAgICAgICBpbnQgcjsKKyAgICAgICAgciA9ICpyZWYrKzsKKyAgICAg ICAgZm9yIChpbnQgaiA9IDE7IGogPCBiX2R3bjsgaisrKQorICAgICAgICAgICAgciArPSAqcmVm Kys7CisgICAgICAgIHJlZHVjZWRbaV0gPSAociArICgxIDw8IChsb2cyIC0gMSkpKSA+PiBsb2cy OworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKG1pcF9yZWR1 Y2VkX3ByZWQpKHBpeGVsICpzcmMsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUsCisgICAgY29uc3Qg aW50IHVwX2hvciwgY29uc3QgaW50IHVwX3ZlciwgY29uc3QgaW50IHByZWRfc2l6ZSwgY29uc3Qg aW50ICpyZWR1Y2VkLCBjb25zdCBpbnQgcmVkdWNlZF9zaXplLAorICAgIGNvbnN0IGludCBvdywg Y29uc3QgaW50IHRlbXAwLCBjb25zdCB1aW50OF90ICptYXRyaXgsIGludCBpc190cmFuc3Bvc2Vk KQoreworICAgIHNyYyA9ICZQT1ModXBfaG9yIC0gMSwgdXBfdmVyIC0gMSk7CisgICAgZm9yIChp bnQgeSA9IDA7IHkgPCBwcmVkX3NpemU7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsg eCA8IHByZWRfc2l6ZTsgeCsrKSB7CisgICAgICAgICAgICBpbnQgcHJlZCA9IDA7CisgICAgICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZHVjZWRfc2l6ZTsgaSsrKQorICAgICAgICAgICAg ICAgIHByZWQgKz0gcmVkdWNlZFtpXSAqIG1hdHJpeFtpXTsKKyAgICAgICAgICAgIG1hdHJpeCAr PSByZWR1Y2VkX3NpemU7CisgICAgICAgICAgICBwcmVkID0gKChwcmVkICsgb3cpID4+IDYpICsg dGVtcDA7CisgICAgICAgICAgICBwcmVkID0gYXZfY2xpcChwcmVkLCAwLCAoMTw8QklUX0RFUFRI KSAtIDEpOworICAgICAgICAgICAgaWYgKGlzX3RyYW5zcG9zZWQpCisgICAgICAgICAgICAgICAg UE9TKHkgKiB1cF9ob3IsIHggKiB1cF92ZXIpID0gcHJlZDsKKyAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICBQT1MoeCAqIHVwX2hvciwgeSAqIHVwX3ZlcikgPSBwcmVkOworICAgICAg ICB9CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMobWlwX3Vw c2FtcGxpbmdfMWQpKHBpeGVsICpkc3QsIGNvbnN0IGludCBkc3Rfc3RlcCwgY29uc3QgaW50IGRz dF9zdHJpZGUsIGNvbnN0IGludCBkc3RfaGVpZ2h0LCBjb25zdCBpbnQgZmFjdG9yLAorICAgIGNv bnN0IHBpeGVsICpib3VuZGFyeSwgY29uc3QgaW50IGJvdW5kYXJ5X3N0ZXAsICBjb25zdCBpbnQg cHJlZF9zaXplKQoreworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkc3RfaGVpZ2h0OyBpKysp IHsKKyAgICAgICAgY29uc3QgcGl4ZWwgKmJlZm9yZSA9IGJvdW5kYXJ5OworICAgICAgICBjb25z dCBwaXhlbCAqYWZ0ZXIgID0gZHN0IC0gZHN0X3N0ZXA7CisgICAgICAgIHBpeGVsICpkID0gZHN0 OworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHByZWRfc2l6ZTsgaisrKSB7CisgICAgICAg ICAgICBhZnRlciArPSBkc3Rfc3RlcCAqIGZhY3RvcjsKKyAgICAgICAgICAgIGZvciAoaW50IGsg PSAxOyBrIDwgZmFjdG9yOyBrKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgbWlkID0gKGZhY3Rv ciAtIGspICogKCpiZWZvcmUpICsgayAqICgqYWZ0ZXIpOworICAgICAgICAgICAgICAgICpkID0g KG1pZCArIGZhY3RvciAvIDIpIC8gZmFjdG9yOworICAgICAgICAgICAgICAgIGQgKz0gZHN0X3N0 ZXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiZWZvcmUgPSBhZnRlcjsKKyAgICAgICAg ICAgIGQgKz0gZHN0X3N0ZXA7CisgICAgICAgIH0KKyAgICAgICAgYm91bmRhcnkgKz0gYm91bmRh cnlfc3RlcDsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgfQorfQorCisvLzguNC41 LjIuMiBNYXRyaXgtYmFzZWQgaW50cmEgc2FtcGxlIHByZWRpY3Rpb24KK3N0YXRpYyBhdl9hbHdh eXNfaW5saW5lIHZvaWQgRlVOQyhwcmVkX21pcCkodWludDhfdCAqX3NyYywgY29uc3QgdWludDhf dCAqX3RvcCwKKyAgICBjb25zdCB1aW50OF90ICpfbGVmdCwgY29uc3QgaW50IHcsIGNvbnN0IGlu dCBoLCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGludCBtb2RlX2lkLCBpbnQgaXNfdHJh bnNwb3NlZCkKK3sKKyAgICBwaXhlbCAqc3JjICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAg Y29uc3QgcGl4ZWwgKnRvcCAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGNvbnN0IHBpeGVs ICpsZWZ0ID0gKGNvbnN0IHBpeGVsICopX2xlZnQ7CisKKyAgICBjb25zdCBpbnQgc2l6ZV9pZCA9 IGZmX3Z2Y19nZXRfbWlwX3NpemVfaWQodywgaCk7CisgICAgc3RhdGljIGNvbnN0IGludCBib3Vu ZGFyeV9zaXplc1tdID0gezIsIDQsIDR9OworICAgIHN0YXRpYyBjb25zdCBpbnQgcHJlZF9zaXpl c1tdID0gezQsIDQsIDh9OworICAgIGNvbnN0IGludCBib3VuZGFyeV9zaXplID0gYm91bmRhcnlf c2l6ZXNbc2l6ZV9pZF07CisgICAgY29uc3QgaW50IHByZWRfc2l6ZSAgICAgPSBwcmVkX3NpemVz W3NpemVfaWRdOworICAgIGNvbnN0IGludCBpbl9zaXplID0gMiAqIGJvdW5kYXJ5X3NpemUgLSAo KHNpemVfaWQgPT0gMikgPyAxIDogMCk7CisgICAgY29uc3QgdWludDhfdCAqbWF0cml4ID0gZmZf dnZjX2dldF9taXBfbWF0cml4KHNpemVfaWQsIG1vZGVfaWQpOworICAgIGNvbnN0IGludCB1cF9o b3IgPSB3IC8gcHJlZF9zaXplOworICAgIGNvbnN0IGludCB1cF92ZXIgPSBoIC8gcHJlZF9zaXpl OworCisgICAgaW50IHJlZHVjZWRbMTZdOworICAgIGludCAqcmVkX3QgID0gcmVkdWNlZDsKKyAg ICBpbnQgKnJlZF9sICA9IHJlZHVjZWQgKyBib3VuZGFyeV9zaXplOworICAgIGludCBvZmYgPSAx LCBvdyA9IDA7CisgICAgaW50IHRlbXAwOworCisgICAgaWYgKGlzX3RyYW5zcG9zZWQpIHsKKyAg ICAgICAgRkZTV0FQKGludCosIHJlZF90LCByZWRfbCk7CisgICAgfQorICAgIEZVTkMobWlwX2Rv d25zYW1wbGluZykocmVkX3QsIGJvdW5kYXJ5X3NpemUsIHRvcCwgdyk7CisgICAgRlVOQyhtaXBf ZG93bnNhbXBsaW5nKShyZWRfbCwgYm91bmRhcnlfc2l6ZSwgbGVmdCwgaCk7CisKKyAgICB0ZW1w MCA9IHJlZHVjZWRbMF07CisgICAgaWYgKHNpemVfaWQgIT0gMikgeworICAgICAgICBvZmYgPSAw OworICAgICAgICBvdyA9ICgxIDw8IChCSVRfREVQVEggLSAxKSkgLSB0ZW1wMDsKKyAgICB9IGVs c2UgeworICAgICAgICBvdyA9IHJlZHVjZWRbMV0gLSB0ZW1wMDsKKyAgICB9CisgICAgcmVkdWNl ZFswXSA9IG93OworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgaW5fc2l6ZTsgaSsrKSB7CisgICAg ICAgIHJlZHVjZWRbaV0gPSByZWR1Y2VkW2kgKyBvZmZdIC0gdGVtcDA7CisgICAgICAgIG93ICs9 IHJlZHVjZWRbaV07CisgICAgfQorICAgIG93ID0gMzIgLSAzMiAqIG93OworCisgICAgRlVOQyht aXBfcmVkdWNlZF9wcmVkKShzcmMsIHN0cmlkZSwgdXBfaG9yLCB1cF92ZXIsIHByZWRfc2l6ZSwg cmVkdWNlZCwgaW5fc2l6ZSwgb3csIHRlbXAwLCBtYXRyaXgsIGlzX3RyYW5zcG9zZWQpOworICAg IGlmICh1cF9ob3IgPiAxIHx8IHVwX3ZlciA+IDEpIHsKKyAgICAgICAgaWYgKHVwX2hvciA+IDEp CisgICAgICAgICAgICBGVU5DKG1pcF91cHNhbXBsaW5nXzFkKSgmUE9TKDAsIHVwX3ZlciAtIDEp LCAxLCB1cF92ZXIgKiBzdHJpZGUsIHByZWRfc2l6ZSwgdXBfaG9yLCBsZWZ0ICsgdXBfdmVyIC0g MSwgdXBfdmVyLCBwcmVkX3NpemUpOworICAgICAgICBpZiAodXBfdmVyID4gMSkKKyAgICAgICAg ICAgIEZVTkMobWlwX3Vwc2FtcGxpbmdfMWQpKHNyYywgc3RyaWRlLCAxLCB3LCB1cF92ZXIsIHRv cCwgMSwgcHJlZF9zaXplKTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHBp eGVsIEZVTkMocHJlZF9kY192YWwpKGNvbnN0IHBpeGVsICp0b3AsIGNvbnN0IHBpeGVsICpsZWZ0 LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKK3sKKyAgICBwaXhlbCBkY192YWw7Cisg ICAgaW50IHN1bSA9IDA7CisgICAgdW5zaWduZWQgaW50IG9mZnNldCA9ICh3ID09IGgpID8gKHcg PDwgMSkgOiBGRk1BWCh3LCBoKTsKKyAgICBjb25zdCBpbnQgc2hpZnQgPSBhdl9sb2cyKG9mZnNl dCk7CisgICAgb2Zmc2V0ID4+PSAxOworICAgIGlmICh3ID49IGgpIHsKKyAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCB3OyBpKyspCisgICAgICAgICAgICBzdW0gKz0gdG9wW2ldOworICAgIH0K KyAgICBpZiAodyA8PSBoKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaDsgaSsrKQor ICAgICAgICAgICAgc3VtICs9IGxlZnRbaV07CisgICAgfQorICAgIGRjX3ZhbCA9IChzdW0gKyBv ZmZzZXQpID4+IHNoaWZ0OworICAgIHJldHVybiBkY192YWw7Cit9CisKKy8vOC40LjUuMi4xMiBT cGVjaWZpY2F0aW9uIG9mIElOVFJBX0RDIGludHJhIHByZWRpY3Rpb24gbW9kZQorc3RhdGljIGF2 X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKHByZWRfZGMpKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVp bnQ4X3QgKl90b3AsCisgICAgY29uc3QgdWludDhfdCAqX2xlZnQsIGNvbnN0IGludCB3LCBjb25z dCBpbnQgaCwgY29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICBpbnQgeCwgeTsKKyAgICBw aXhlbCAqc3JjICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBwaXhlbCAqdG9w ICAgID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAgID0gKGNv bnN0IHBpeGVsICopX2xlZnQ7CisgICAgY29uc3QgcGl4ZWwgZGMgICAgICA9IEZVTkMocHJlZF9k Y192YWwpKHRvcCwgbGVmdCwgdywgaCk7CisgICAgY29uc3QgcGl4ZWw0IGEgICAgICA9IFBJWEVM X1NQTEFUX1g0KGRjKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIHBp eGVsICpzID0gc3JjOworICAgICAgICBmb3IgKHggPSAwOyB4IDwgdzsgeCArPSA0KSB7CisgICAg ICAgICAgICBBVl9XTjRQKHMsIGEpOworICAgICAgICAgICAgcyArPSA0OworICAgICAgICB9Cisg ICAgICAgIHNyYyArPSBzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGlu ZSB2b2lkIEZVTkMocHJlZF92KSh1aW50OF90ICpfc3JjLCBjb25zdCB1aW50OF90ICpfdG9wLAor ICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sK KyAgICBwaXhlbCAqc3JjICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBwaXhl bCAqdG9wICAgID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8 IGg7IHkrKykgeworICAgICAgICBtZW1jcHkoc3JjLCB0b3AsIHNpemVvZihwaXhlbCkgICogdyk7 CisgICAgICAgIHNyYyArPSBzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHBy ZWRfaCkodWludDhfdCAqX3NyYywgY29uc3QgdWludDhfdCAqX2xlZnQsIGNvbnN0IGludCB3LCBj b25zdCBpbnQgaCwKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHBpeGVsICpz cmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IHBpeGVsICpsZWZ0ICAgID0g KGNvbnN0IHBpeGVsICopX2xlZnQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsK KyAgICAgICAgY29uc3QgcGl4ZWw0IGEgPSBQSVhFTF9TUExBVF9YNChsZWZ0W3ldKTsKKyAgICAg ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4ICs9IDQpIHsKKyAgICAgICAgICAgIEFWX1dONFAo JlBPUyh4LCB5KSwgYSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vOC40LjUuMi4xMyBTcGVj aWZpY2F0aW9uIG9mIElOVFJBX0FOR1VMQVIyLi5JTlRSQV9BTkdVTEFSNjYgaW50cmEgcHJlZGlj dGlvbiBtb2Rlcworc3RhdGljIHZvaWQgRlVOQyhwcmVkX2FuZ3VsYXJfdikodWludDhfdCAqX3Ny YywgY29uc3QgdWludDhfdCAqX3RvcCwgY29uc3QgdWludDhfdCAqX2xlZnQsCisgICAgY29uc3Qg aW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlLCBjb25zdCBpbnQgY19p ZHgsIGNvbnN0IGludCBtb2RlLAorICAgIGNvbnN0IGludCByZWZfaWR4LCBjb25zdCBpbnQgZmls dGVyX2ZsYWcsIGNvbnN0IGludCBuZWVkX3BkcGMpCit7CisgICAgcGl4ZWwgKnNyYyAgICAgICAg ICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4ZWwgKmxlZnQgICA9IChjb25zdCBwaXhl bCAqKV9sZWZ0OworICAgIGNvbnN0IHBpeGVsICp0b3AgICAgPSAoY29uc3QgcGl4ZWwgKilfdG9w IC0gKDEgKyByZWZfaWR4KTsKKyAgICBjb25zdCBpbnQgaW50cmFfcHJlZF9hbmdsZSA9IGZmX3Z2 Y19pbnRyYV9wcmVkX2FuZ2xlX2Rlcml2ZShtb2RlKTsKKyAgICBpbnQgcG9zID0gKDEgKyByZWZf aWR4KSAqIGludHJhX3ByZWRfYW5nbGU7CisgICAgY29uc3QgaW50IGRwID0gaW50cmFfcHJlZF9h bmdsZTsKKyAgICBjb25zdCBpbnQgaXNfbHVtYSA9ICFjX2lkeDsKKyAgICBpbnQgbnNjYWxlLCBp bnZfYW5nbGU7CisKKyAgICBpZiAobmVlZF9wZHBjKSB7CisgICAgICAgIGludl9hbmdsZSA9IGZm X3Z2Y19pbnRyYV9pbnZfYW5nbGVfZGVyaXZlKGludHJhX3ByZWRfYW5nbGUpOworICAgICAgICBu c2NhbGUgPSBmZl92dmNfbnNjYWxlX2Rlcml2ZSh3LCBoLCBtb2RlKTsKKyAgICB9CisKKyAgICBm b3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBjb25zdCBpbnQgaWR4ICAgPSAo cG9zID4+IDUpICsgcmVmX2lkeDsKKyAgICAgICAgY29uc3QgaW50IGZhY3QgPSBwb3MgJiAzMTsK KyAgICAgICAgaWYgKCFmYWN0ICYmICghaXNfbHVtYSB8fCAhZmlsdGVyX2ZsYWcpKSB7CisgICAg ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgICAgIGNv bnN0IHBpeGVsICpwID0gdG9wICsgeCArIGlkeCArIDE7CisgICAgICAgICAgICAgICAgY29uc3Qg cGl4ZWwgcHJlZCA9IHBbMF07CisgICAgICAgICAgICAgICAgUE9TKHgsIHkpID0gcHJlZDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghY19pZHgpIHsK KyAgICAgICAgICAgICAgICBjb25zdCBpbnQ4X3QqIGYgPSBmaWx0ZXJfZmxhZyA/IGZmX3Z2Y19m aWx0ZXJfZ1tmYWN0XSA6IGZmX3Z2Y19maWx0ZXJfY1tmYWN0XTsKKyAgICAgICAgICAgICAgICBm b3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBw aXhlbCAqcCA9IHRvcCArIHggKyBpZHg7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBw cmVkID0gKHBbMF0gKiBmWzBdICsgcFsxXSAqIGZbMV0gKworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBbMl0gKiBmWzJdICsgcFszXSAqIGZbM10gKyAzMikgPj4gNjsK KyAgICAgICAgICAgICAgICAgICAgUE9TKHgsIHkpID0gYXZfY2xpcF9waXhlbChwcmVkKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZv ciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBp eGVsICpwID0gdG9wICsgeCArIGlkeCArIDE7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBp eGVsIHByZWQgPSAoKDMyIC0gZmFjdCkgKiBwWzBdICsgZmFjdCAqIHBbMV0gKyAxNikgPj4gNTsK KyAgICAgICAgICAgICAgICAgICAgUE9TKHgsIHkpID0gcHJlZDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5lZWRfcGRwYykgeworICAg ICAgICAgICAgaW50IGludl9hbmdsZV9zdW0gPSAyNTYgKyBpbnZfYW5nbGU7CisgICAgICAgICAg ICBmb3IgKGludCB4ID0gMDsgeCA8IEZGTUlOKHcsIDMgPDwgbnNjYWxlKTsgeCsrKSB7CisgICAg ICAgICAgICAgICAgY29uc3QgcGl4ZWwgbCAgID0gbGVmdFt5ICsgKGludl9hbmdsZV9zdW0gPj4g OSldOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIHZhbCA9IFBPUyh4LCB5KTsKKyAgICAg ICAgICAgICAgICBjb25zdCBpbnQgd2wgICAgPSAzMiA+PiAoKHggPDwgMSkgPj4gbnNjYWxlKTsK KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcHJlZCAgPSB2YWwgKyAoKChsIC0gdmFsKSAqIHds ICsgMzIpID4+IDYpOworICAgICAgICAgICAgICAgIFBPUyh4LCB5KSA9IENMSVAocHJlZCk7Cisg ICAgICAgICAgICAgICAgaW52X2FuZ2xlX3N1bSArPSBpbnZfYW5nbGU7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgcG9zICs9IGRwOworICAgIH0KK30KKworLy84LjQuNS4yLjEz IFNwZWNpZmljYXRpb24gb2YgSU5UUkFfQU5HVUxBUjIuLklOVFJBX0FOR1VMQVI2NiBpbnRyYSBw cmVkaWN0aW9uIG1vZGVzCitzdGF0aWMgdm9pZCBGVU5DKHByZWRfYW5ndWxhcl9oKSh1aW50OF90 ICpfc3JjLCBjb25zdCB1aW50OF90ICpfdG9wLCBjb25zdCB1aW50OF90ICpfbGVmdCwKKyAgICBj b25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUsIGNvbnN0IGlu dCBjX2lkeCwgY29uc3QgaW50IG1vZGUsCisgICAgY29uc3QgaW50IHJlZl9pZHgsIGNvbnN0IGlu dCBmaWx0ZXJfZmxhZywgY29uc3QgaW50IG5lZWRfcGRwYykKK3sKKyAgICBwaXhlbCAqc3JjICAg ICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAgID0gKGNvbnN0 IHBpeGVsICopX2xlZnQgLSAoMSArIHJlZl9pZHgpOworICAgIGNvbnN0IHBpeGVsICp0b3AgICAg PSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGNvbnN0IGludCBpc19sdW1hID0gIWNfaWR4Owor ICAgIGNvbnN0IGludCBpbnRyYV9wcmVkX2FuZ2xlID0gZmZfdnZjX2ludHJhX3ByZWRfYW5nbGVf ZGVyaXZlKG1vZGUpOworICAgIGNvbnN0IGludCBkcCA9IGludHJhX3ByZWRfYW5nbGU7CisgICAg aW50IG5zY2FsZSA9IDAsIGludl9hbmdsZSwgaW52X2FuZ2xlX3N1bTsKKworICAgIGlmIChuZWVk X3BkcGMpIHsKKyAgICAgICAgaW52X2FuZ2xlID0gZmZfdnZjX2ludHJhX2ludl9hbmdsZV9kZXJp dmUoaW50cmFfcHJlZF9hbmdsZSk7CisgICAgICAgIGludl9hbmdsZV9zdW0gPSAyNTYgKyBpbnZf YW5nbGU7CisgICAgICAgIG5zY2FsZSA9IGZmX3Z2Y19uc2NhbGVfZGVyaXZlKHcsIGgsIG1vZGUp OworICAgIH0KKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGlu dCBwb3MgPSAoMSArIHJlZl9pZHgpICogaW50cmFfcHJlZF9hbmdsZTsKKyAgICAgICAgaW50IHd0 OworICAgICAgICBpZiAobmVlZF9wZHBjKQorICAgICAgICAgICAgd3QgPSAoMzIgPj4gKCh5ICog MikgPj4gbnNjYWxlKSk7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsK KyAgICAgICAgICAgIGNvbnN0IGludCBpZHggID0gKHBvcyA+PiA1KSArIHJlZl9pZHg7CisgICAg ICAgICAgICBjb25zdCBpbnQgZmFjdCA9IHBvcyAmIDMxOworICAgICAgICAgICAgY29uc3QgcGl4 ZWwgKnAgPSBsZWZ0ICsgeSArIGlkeDsKKyAgICAgICAgICAgIGludCBwcmVkOworICAgICAgICAg ICAgaWYgKCFmYWN0ICYmICghaXNfbHVtYSB8fCAhZmlsdGVyX2ZsYWcpKSB7CisgICAgICAgICAg ICAgICAgcHJlZCA9IHBbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IGlmICghY19pZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50OF90KiBmID0gZmls dGVyX2ZsYWcgPyBmZl92dmNfZmlsdGVyX2dbZmFjdF0gOiBmZl92dmNfZmlsdGVyX2NbZmFjdF0g OworICAgICAgICAgICAgICAgICAgICBwcmVkID0gKHBbMF0gKiBmWzBdICsgcFsxXSAqIGZbMV0g KyBwWzJdICogZlsyXSArIHBbM10gKiBmWzNdICsgMzIpID4+IDY7CisgICAgICAgICAgICAgICAg ICAgIHByZWQgPSBDTElQKHByZWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIHByZWQgPSAoKDMyIC0gZmFjdCkgKiBwWzFdICsgZmFjdCAqIHBbMl0gKyAx NikgPj4gNTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAobmVlZF9wZHBjKSB7CisgICAgICAgICAgICAgICAgaWYgKHkgPCAoMyA8PCBuc2NhbGUpKSB7 CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIHQgPSB0b3BbeCArIChpbnZfYW5nbGVf c3VtID4+IDkpXTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZCA9IENMSVAocHJlZCArICgoKHQg LSBwcmVkKSAqIHd0ICsgMzIpID4+IDYpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBQT1MoeCwgeSkgPSBwcmVkOworICAgICAgICAgICAgcG9zICs9IGRw OworICAgICAgICB9CisgICAgICAgIGlmIChuZWVkX3BkcGMpCisgICAgICAgICAgICBpbnZfYW5n bGVfc3VtICs9IGludl9hbmdsZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoZmZfdnZj X2ludHJhX2RzcF9pbml0KShWVkNJbnRyYURTUENvbnRleHQgKmNvbnN0IGludHJhKQoreworICAg IGludHJhLT5sbWNzX3NjYWxlX2Nocm9tYSAgPSBGVU5DKGxtY3Nfc2NhbGVfY2hyb21hKTsKKyAg ICBpbnRyYS0+aW50cmFfY2NsbV9wcmVkICAgID0gRlVOQyhpbnRyYV9jY2xtX3ByZWQpOworICAg IGludHJhLT5pbnRyYV9wcmVkICAgICAgICAgPSBGVU5DKGludHJhX3ByZWQpOworICAgIGludHJh LT5wcmVkX3BsYW5hciAgICAgICAgPSBGVU5DKHByZWRfcGxhbmFyKTsKKyAgICBpbnRyYS0+cHJl ZF9taXAgICAgICAgICAgID0gRlVOQyhwcmVkX21pcCk7CisgICAgaW50cmEtPnByZWRfZGMgICAg ICAgICAgICA9IEZVTkMocHJlZF9kYyk7CisgICAgaW50cmEtPnByZWRfdiAgICAgICAgICAgICA9 IEZVTkMocHJlZF92KTsKKyAgICBpbnRyYS0+cHJlZF9oICAgICAgICAgICAgID0gRlVOQyhwcmVk X2gpOworICAgIGludHJhLT5wcmVkX2FuZ3VsYXJfdiAgICAgPSBGVU5DKHByZWRfYW5ndWxhcl92 KTsKKyAgICBpbnRyYS0+cHJlZF9hbmd1bGFyX2ggICAgID0gRlVOQyhwcmVkX2FuZ3VsYXJfaCk7 Cit9Ci0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcK aHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1 YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RA ZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K