From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTP id CD09D47EF0
	for <ffmpegdev@gitmailbox.com>; Sun, 31 Dec 2023 08:21:41 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E5F4D68CE3E;
	Sun, 31 Dec 2023 10:20:20 +0200 (EET)
Received: from APC01-PSA-obe.outbound.protection.outlook.com
 (mail-psaapc01olkn2068.outbound.protection.outlook.com [40.92.52.68])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B0E2F68CD8D
 for <ffmpeg-devel@ffmpeg.org>; Sun, 31 Dec 2023 10:20:09 +0200 (EET)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=N9KDa9QQeqTYTee9JS8meaGZwBkk1KH+icwXGgF1cUCFddJ6kNqyZBGecZbxRQqxYC1Joa6DZhrvOcnCJP0vGrHFp9f8N/abymUDVk/BHf+8+tfMXXpcqmsMsf+gBMe94XIf2JwyXxafXEfEIjjvvC2hSRfiDa2hpOy+kQQOpVxzVOsgF5z+zro9elNjpKZp8FLzQcNWw9C4H2o8ft7UWnpqB0r7F9QMA6pccUSVgPV6MBFLbadn8KsDYmD/0QRcQXJjaXHOrDgOv7BXw08LzPXPSqyT8tkv51Mx8JANKUBL2aU7ZTZXyh6Eu/Owin/rVeiNyUjB8jut5RpYVpdh3g==
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=rFvNzrizeJuIDnvnqv1w1Ts4jMMmdU015tJAf9Kgou4=;
 b=eYvdC6d4l3YkGD6kjvvWDqKYKGsnuA3sFhKXyZjEG0OHMFf7Yb47fiOpncLua1bzE7r+HPkNAE2s3a+hfD3yhvxrNxLCfQuphL8BXmgasnrcSMnXQrbUi9fATMECYBBtzDGLKMOmcN5MUDCoKIVEbAZfAF/LnQokz8CYKhKwCsyZHKJ1EjvxsFnQBYvOiucd84mRBSJi2gE84XKl+5+aakO7sVNwqpcG8NlSrP7ACqmcwtrS4ZUtvUvcab1mGqHaXNeXPjb3kA2aiQLCevw3da06ThNOONTD3bXzu53F052cLbcraP1Nmm3YeD7bksIBtIpxtvnds9Bs64M1xjiQvA==
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=rFvNzrizeJuIDnvnqv1w1Ts4jMMmdU015tJAf9Kgou4=;
 b=TVbV8wCC8+CSoLifgeDcyfFs9iGXUhiO2w74ciozNY66ZDu/gpQLrWGqzwdi9NR1AN59tw3CWiFWiA5ExYG/R7mzGGa+Naoh77To0YB7eB9FuwkCD93QDyJmXe+Yq/TkgsgFQN/FYggap1uanMZX7KXLTGchdJuUQm0I0AH3etQTZ/PI31jqMSEMyIBPtS5eW2gmPlpfImjaHe1RMjV+/Mp3BLLQeoiFBm1Rqtiwze9SD54PMvYkUE22KKwhxChgWM3yAz0Bw64Ddg1bcCuGHeI6iYjgWX1S4nCP+cNsg/iQO55rKZBA9GGZNCeNSz7Na/XHNlHjf4Q0CFPOQQMfCQ==
Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6)
 by JH0PR06MB6367.apcprd06.prod.outlook.com (2603:1096:990:c::8) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.21; Sun, 31 Dec
 2023 08:19:51 +0000
Received: from TYSPR06MB6433.apcprd06.prod.outlook.com
 ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com
 ([fe80::e139:fd7a:1b66:a3f7%6]) with mapi id 15.20.7135.023; Sun, 31 Dec 2023
 08:19:51 +0000
From: Nuo Mi <nuomi2021@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Date: Sun, 31 Dec 2023 16:18:53 +0800
Message-ID: <TYSPR06MB6433FC53E1C4C777B8FAC8A7AA63A@TYSPR06MB6433.apcprd06.prod.outlook.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20231231081858.1704-1-nuomi2021@gmail.com>
References: <20231231081858.1704-1-nuomi2021@gmail.com>
X-TMN: [0AiW9c/Kbzuwmqet7pxxLDN5S5bylvoe]
X-ClientProxiedBy: SI2PR02CA0039.apcprd02.prod.outlook.com
 (2603:1096:4:196::9) To TYSPR06MB6433.apcprd06.prod.outlook.com
 (2603:1096:400:47a::6)
X-Microsoft-Original-Message-ID: <20231231081858.1704-9-nuomi2021@gmail.com>
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 2
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|JH0PR06MB6367:EE_
X-MS-Office365-Filtering-Correlation-Id: b3089a88-fa6d-4832-cdaa-08dc09d9426c
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Z+IercmqZGlDN4lwAyiurKPGDm4Br0wea9XBJJl9IPwZFDptlW4txn2Los7haMVLQELzSlX6kmcPKd/hux8DWc1yCQND3XUsWggaI2CxQEg6dOM9qqZtseiKMjdGpfOI1rkg5q/ItAniXN4Ri72SnXui+6ociC3jwzloXDfGRMuh0uSphAzIT1RwyDiKpKajg+iwKUEUhEliDkOpg2ejp/V4kAzeq8YE0+p11KveJunYG75DJ23odJojyORKy4jFkf1b+I462U3zbcCzpX/hBKX9fzmCoW9qnxaE10ACF7zyqBCHVrAPWhVXAE3mlBcQEdK18XUJngChKBEFsR1m4OBv0Ey9wIzaIAUGlsbJQ9WHFgv/LzvESS+YwbLZFsBeySH0dA9CMDX0BYmRgV7GcZ4gNhDaqlWDuGrknwuOhqdkNDfhQPxGj0jSzXftcsn7MeX58Hoi2eufuifMHXJ3EqCZdvDZ6hZlC+fcbDvTPxCbfhzKGxyiLUXoDL9SuV7V3WJt77UmN1gLCSqVFJ3zsZbEBXSVdSAtS7ZdP6ox28BLAIPFTzbNA4xQH742zHMwJWjXPXYmGTiKtLfOFxwaBjQPs25eU51K1H2dEjXjJ+D2dDdTBGnKWx+fLEdCXvc4
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dEx3c3hnTjE4TmxLeUZlSFd6Q3JjaHpPZXZ4dDVKUjZEQUg5R3F0Z0RPZFhZ?=
 =?utf-8?B?aGlON0pyUWRhRklKdmxLYXNwNWVUcVZTZjZhVk01UzVpdk1Wbm45UmZKSjRR?=
 =?utf-8?B?VUtjUDlDSUxhZGM0eEFhc0lMSTFYMHkzN1lMdTNwL0d0VG4yL214QXNIV2Fn?=
 =?utf-8?B?SEluaE1PM0tvSGExZm8xMFVDdkdRSWVHZWd0MTYva0E3dWU3WW1wZDd5RHQ0?=
 =?utf-8?B?Sk94dFhQbjRJUlNBTzRMZnJXSnJIYkdVSGxDSS9tb2xLVVd2RmdoRjExbXkx?=
 =?utf-8?B?ajlqRkcwMzBkSUVqOEg5d1E4c3F6L2JYQVQ0MWJ1djRMd3VUTisxZEl4Qyt6?=
 =?utf-8?B?ZTAvSG5YTWRWNnhsTk9NSWV3M2VPS0l1eHYxVWFvVjgxVktpaGxVWkRmZ2dh?=
 =?utf-8?B?TW9WdU5oS0FkMUJ6dWRpRFM4OTg2ZHFxdDhPQ0tOR3QzU0dTeG9ZRnYxVzRB?=
 =?utf-8?B?a0RrRUtLL0J0RkF1Tnd5R1RXQlNoUjRnZmFlSGV0OVpnTEdUMlpMRzRSNjNt?=
 =?utf-8?B?RS9KYnpIY1VOMm13WEVJdnFVcDZITUVPUENvVHExck5oUTE3dC9PeER6ZTlX?=
 =?utf-8?B?YmFHSVplQ3VYQkJaNkptem9wUmtVUGozbWlZQzRySktZa0xyNTZQL2NBVGpE?=
 =?utf-8?B?cUpDbVdJVlhpZTNzUDRNQmh5OGhMNEdiMjdLQWdCRjRLNGoxUGdmLzdQSWli?=
 =?utf-8?B?WnVXR0ZzY29OZW1WRnRzVkFacUZacXI1MzVENTNBTi9wemx2NjNPMkxlUFR0?=
 =?utf-8?B?Q2dhcDg3eWZDY1RTQ01qSzJrUWdmNnI5T0xCUWNZN3JNeDFtWVNIbTVoYkM0?=
 =?utf-8?B?WWZoUGk2UkJ3Vk5paW9CaUJtU2pldWJUSkJXSVZQK3N1NWtmSFp1M0VLZUJS?=
 =?utf-8?B?QVBzZkZ3emY3dmlHMVZFRDE4RnZjLzRGdWlhVWNpYVBzWmNPR2FrdmtVRlNE?=
 =?utf-8?B?eWZORWFaRjYzK1h2WE10NElYT1VNOGhrQVA1Tkl1SExJdUt4T0J3aHRPK1RF?=
 =?utf-8?B?aGsvQ2UrTWZoclJOR25HQlEzdWdxMzgrSDZUOTdNQ05uTHlqWTdJMVJYWDg2?=
 =?utf-8?B?QWowTWNtVUszTGlxUWFCMXR6eFpaLytIVkpKWVVIK3hwNXU1SEI1WXpRaXF3?=
 =?utf-8?B?T1pCOXh3RmRObjZ2bHB3Uzl3ZmdUSXJvc1lhUnNFQkNNbFZ4SHcxelY1Nk1D?=
 =?utf-8?B?MmQ5TjgybmNEVDVpTkVVNGUrb0ROS0VEaXdHWVUvWUMveExCQldBSnU2ZnFu?=
 =?utf-8?B?czJGTFM2VzlUQU5ScWRtSEdLeHdVUEl1U3lIUFlrQ25xM09aMnZGeCtoSkRB?=
 =?utf-8?B?bk5XeEs1ZjgyMmNPWEVGK1JLZTJHdzN3SWlyRThsMlJ0Zzc3OFhFSFRoektT?=
 =?utf-8?B?OTU3ajBUV01jV0l6RzJUQW8zMzRSQUN1ZXd3aU9DaFdsRVdiWURQYlZ2TlNX?=
 =?utf-8?B?eDVRejFYUVA5dExPYysxeG1DM3AxRG5XeVl1WjIwVXZUQ3hNenJDaTVEVjVi?=
 =?utf-8?B?aUh4eUQ3OEtpcHIwUWJPVEF1eW91VnZYeXh3OTg5eTVVWjVmWG85MXN1R200?=
 =?utf-8?B?emNKWU40T3AvbklkOGhrQTFITmN3Qm00bVp5QXNKZEo0MWZmMkRhMmdRdDdQ?=
 =?utf-8?B?VmRBWlNadlVZcU1naEY5YjVaQnYyMElUMU9uT2VDZjlNUE92VEVhNkpRYkkv?=
 =?utf-8?Q?RW7cw5UjPWnYX9F4t0XR?=
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b3089a88-fa6d-4832-cdaa-08dc09d9426c
X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2023 08:19:50.9094 (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: JH0PR06MB6367
Subject: [FFmpeg-devel] [PATCH v8 08/13] 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 <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Cc: Nuo Mi <nuomi2021@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/TYSPR06MB6433FC53E1C4C777B8FAC8A7AA63A@TYSPR06MB6433.apcprd06.prod.outlook.com/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKwogbGliYXZj
b2RlYy92dmMvdnZjX2N0dS5jICAgICAgICAgICAgfCAgIDUwICsrCiBsaWJhdmNvZGVjL3Z2Yy92
dmNfY3R1LmggICAgICAgICAgICB8ICAgIDIgKwogbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMg
ICAgICAgICAgfCAgNzk3ICsrKysrKysrKysrKysrKysrKysrKwogbGliYXZjb2RlYy92dmMvdnZj
X2ludHJhLmggICAgICAgICAgfCAgIDQ5ICsrCiBsaWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVt
cGxhdGUuYyB8IDEwMTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5n
ZWQsIDE5MTQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZj
L3Z2Y19pbnRyYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX2ludHJh
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVtcGxhdGUu
YwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxlIGIvbGliYXZjb2RlYy92dmMv
TWFrZWZpbGUKaW5kZXggZDE4ZDFlMGY3ZS4uODFkZjE1ZjZlOCAxMDA2NDQKLS0tIGEvbGliYXZj
b2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKQEAgLTQsNiAr
NCw3IEBAIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAgICAgICs9ICB2dmMvdnZjX2Nh
YmFjLm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dnZjL3Z2Y19jdHUubyAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZ2Yy92dmNfZGF0YS5vICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ludGVyLm8gICAgICAgICBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pbnRyYS5vICAgICAgICAgXAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfaXR4XzFkLm8g
ICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZj
X212cy5vICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdnZjL3Z2Y19wcy5vICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMv
dnZjX2N0dS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5jCmluZGV4IDNkMzFiODYyYWUuLjYx
MzhkMmZjOWYgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuYworKysgYi9saWJh
dmNvZGVjL3Z2Yy92dmNfY3R1LmMKQEAgLTIwLDEwICsyMCw0MSBAQAogICogRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x
MzAxIFVTQQogICovCiAKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3JlZnN0cnVjdC5oIgorCiAjaW5j
bHVkZSAidnZjX2NhYmFjLmgiCiAjaW5jbHVkZSAidnZjX2N0dS5oIgogI2luY2x1ZGUgInZ2Y19t
dnMuaCIKIAordm9pZCBmZl92dmNfZGVjb2RlX25laWdoYm91cihWVkNMb2NhbENvbnRleHQgKmxj
LCBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YiwKKyAgICBjb25zdCBpbnQgcngsIGNv
bnN0IGludCByeSwgY29uc3QgaW50IHJzKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBs
Yy0+ZmM7CisgICAgY29uc3QgaW50IGN0Yl9zaXplICAgICAgICAgPSBmYy0+cHMuc3BzLT5jdGJf
c2l6ZV95OworCisgICAgbGMtPmVuZF9vZl90aWxlc194ID0gZmMtPnBzLnNwcy0+d2lkdGg7Cisg
ICAgbGMtPmVuZF9vZl90aWxlc195ID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworICAgIGlmIChmYy0+
cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4
ICsgMV0pCisgICAgICAgIGxjLT5lbmRfb2ZfdGlsZXNfeCA9IEZGTUlOKHhfY3RiICsgY3RiX3Np
emUsIGxjLT5lbmRfb2ZfdGlsZXNfeCk7CisgICAgaWYgKGZjLT5wcy5wcHMtPmN0Yl90b19yb3df
YmRbcnldICE9IGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbcnkgKyAxXSkKKyAgICAgICAgbGMt
PmVuZF9vZl90aWxlc195ID0gRkZNSU4oeV9jdGIgKyBjdGJfc2l6ZSwgbGMtPmVuZF9vZl90aWxl
c195KTsKKworICAgIGxjLT5ib3VuZGFyeV9mbGFncyA9IDA7CisgICAgaWYgKHJ4ID4gMCAmJiBm
Yy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2Jk
W3J4IC0gMV0pCisgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyB8PSBCT1VOREFSWV9MRUZUX1RJ
TEU7CisgICAgaWYgKHJ4ID4gMCAmJiBmYy0+dGFiLnNsaWNlX2lkeFtyc10gIT0gZmMtPnRhYi5z
bGljZV9pZHhbcnMgLSAxXSkKKyAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzIHw9IEJPVU5EQVJZ
X0xFRlRfU0xJQ0U7CisgICAgaWYgKHJ5ID4gMCAmJiBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2Jk
W3J5XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3J5IC0gMV0pCisgICAgICAgIGxjLT5i
b3VuZGFyeV9mbGFncyB8PSBCT1VOREFSWV9VUFBFUl9USUxFOworICAgIGlmIChyeSA+IDAgJiYg
ZmMtPnRhYi5zbGljZV9pZHhbcnNdICE9IGZjLT50YWIuc2xpY2VfaWR4W3JzIC0gZmMtPnBzLnBw
cy0+Y3RiX3dpZHRoXSkKKyAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzIHw9IEJPVU5EQVJZX1VQ
UEVSX1NMSUNFOworICAgIGxjLT5jdGJfbGVmdF9mbGFnID0gcnggPiAwICYmICEobGMtPmJvdW5k
YXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFKTsKKyAgICBsYy0+Y3RiX3VwX2ZsYWcgICA9
IHJ5ID4gMCAmJiAhKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1RJTEUpICYm
ICEobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpOworICAgIGxjLT5j
dGJfdXBfcmlnaHRfZmxhZyA9IGxjLT5jdGJfdXBfZmxhZyAmJiAoZmMtPnBzLnBwcy0+Y3RiX3Rv
X2NvbF9iZFtyeF0gPT0gZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFtyeCArIDFdKSAmJgorICAg
ICAgICAoZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFtyeV0gPT0gZmMtPnBzLnBwcy0+Y3RiX3Rv
X3Jvd19iZFtyeSAtIDFdKTsKKyAgICBsYy0+Y3RiX3VwX2xlZnRfZmxhZyA9IGxjLT5jdGJfbGVm
dF9mbGFnICYmIGxjLT5jdGJfdXBfZmxhZzsKK30KKwogdm9pZCBmZl92dmNfc2V0X25laWdoYm91
cl9hdmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywKICAgICBjb25zdCBpbnQgeDAsIGNvbnN0
IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoKQogewpAQCAtMzksNiArNzAsMjUgQEAg
dm9pZCBmZl92dmNfc2V0X25laWdoYm91cl9hdmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywK
ICAgICBsYy0+bmEuY2FuZF91cF9yaWdodCA9IGxjLT5uYS5jYW5kX3VwX3JpZ2h0X3NhcCAmJiAo
eDAgKyB3KSA8IGxjLT5lbmRfb2ZfdGlsZXNfeDsKIH0KIAordm9pZCBmZl92dmNfY3R1X2ZyZWVf
Y3VzKENUVSAqY3R1KQoreworICAgIENvZGluZ1VuaXQgKipjdXMgID0gJmN0dS0+Y3VzOworICAg
IHdoaWxlICgqY3VzKSB7CisgICAgICAgIENvZGluZ1VuaXQgKmN1ICAgICAgICAgID0gKmN1czsK
KyAgICAgICAgVHJhbnNmb3JtVW5pdCAqKmhlYWQgICAgPSAmY3UtPnR1cy5oZWFkOworCisgICAg
ICAgICpjdXMgPSBjdS0+bmV4dDsKKworICAgICAgICB3aGlsZSAoKmhlYWQpIHsKKyAgICAgICAg
ICAgIFRyYW5zZm9ybVVuaXQgKnR1ID0gKmhlYWQ7CisgICAgICAgICAgICAqaGVhZCA9IHR1LT5u
ZXh0OworICAgICAgICAgICAgZmZfcmVmc3RydWN0X3VucmVmKCZ0dSk7CisgICAgICAgIH0KKyAg
ICAgICAgY3UtPnR1cy50YWlsID0gTlVMTDsKKworICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYo
JmN1KTsKKyAgICB9Cit9CiAKIHZvaWQgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihFbnRyeVBv
aW50ICplcCwKIAljb25zdCBpbnQgYml0X2RlcHRoLCBjb25zdCBpbnQgcGVyc2lzdGVudF9yaWNl
X2FkYXB0YXRpb25fZW5hYmxlZF9mbGFnKQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZj
X2N0dS5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCmluZGV4IGQzNWI2ODBhZmYuLjQ3Yzlm
MTgxYmIgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaAorKysgYi9saWJhdmNv
ZGVjL3Z2Yy92dmNfY3R1LmgKQEAgLTQ2MSw2ICs0NjEsOCBAQCB0eXBlZGVmIHN0cnVjdCBBTEZQ
YXJhbXMgewogCiAvL3V0aWxzCiB2b2lkIGZmX3Z2Y19zZXRfbmVpZ2hib3VyX2F2YWlsYWJsZShW
VkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwgaW50IHcsIGludCBoKTsKK3ZvaWQg
ZmZfdnZjX2RlY29kZV9uZWlnaGJvdXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHhfY3RiLCBp
bnQgeV9jdGIsIGludCByeCwgaW50IHJ5LCBpbnQgcnMpOwordm9pZCBmZl92dmNfY3R1X2ZyZWVf
Y3VzKENUVSAqY3R1KTsKIHZvaWQgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihFbnRyeVBvaW50
ICplcCwgaW50IGJpdF9kZXB0aCwgaW50IHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJs
ZWRfZmxhZyk7CiAKICNlbmRpZiAvLyBBVkNPREVDX1ZWQ19WVkNfQ1RVX0gKZGlmZiAtLWdpdCBh
L2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDNkZTMxMmE3MQotLS0gL2Rl
di9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5jCkBAIC0wLDAgKzEsNzk3IEBA
CisvKgorICogVlZDIGludHJhIHByZWRpY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
TnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl
ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSAi
bGliYXZ1dGlsL2ZyYW1lLmgiCisKKyNpbmNsdWRlICJ2dmNfZGF0YS5oIgorI2luY2x1ZGUgInZ2
Y19pbnRlci5oIgorI2luY2x1ZGUgInZ2Y19pbnRyYS5oIgorI2luY2x1ZGUgInZ2Y19pdHhfMWQu
aCIKKworc3RhdGljIGludCBpc19jY2xtKGVudW0gSW50cmFQcmVkTW9kZSBtb2RlKQoreworICAg
IHJldHVybiBtb2RlID09IElOVFJBX0xUX0NDTE0gfHwgbW9kZSA9PSBJTlRSQV9MX0NDTE0gfHwg
bW9kZSA9PSBJTlRSQV9UX0NDTE07Cit9CisKK3N0YXRpYyBpbnQgZGVyaXZlX2lsZm5zdF9wcmVk
X21vZGVfaW50cmEoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgVHJhbnNmb3JtQmxv
Y2sgKnRiKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAg
Y29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1
ICAgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IGludCB4X3RiICAgICAgICAgICAgICAgID0g
dGItPngwID4+IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQg
eV90YiAgICAgICAgICAgICAgICA9IHRiLT55MCA+PiBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9z
aXplX3k7CisgICAgY29uc3QgaW50IHhfYyAgICAgICAgICAgICAgICAgPSAodGItPngwICsgKHRi
LT50Yl93aWR0aCA8PCBzcHMtPmhzaGlmdFsxXSA+PiAxKSApID4+IGZjLT5wcy5zcHMtPm1pbl9j
Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9jICAgICAgICAgICAgICAgICA9ICh0Yi0+
eTAgKyAodGItPnRiX2hlaWdodCA8PCBzcHMtPnZzaGlmdFsxXSA+PiAxKSkgPj4gZmMtPnBzLnNw
cy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAgICAg
ID0gZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGNvbnN0IGludCBpbnRyYV9taXBfZmxh
ZyAgICAgID0gU0FNUExFX0NUQihmYy0+dGFiLmltZiwgeF90YiwgeV90Yik7CisgICAgaW50IHBy
ZWRfbW9kZV9pbnRyYSA9IHRiLT5jX2lkeCA9PSAwID8gY3UtPmludHJhX3ByZWRfbW9kZV95IDog
Y3UtPmludHJhX3ByZWRfbW9kZV9jOworICAgIGlmIChpbnRyYV9taXBfZmxhZyAmJiAhdGItPmNf
aWR4KSB7CisgICAgICAgIHByZWRfbW9kZV9pbnRyYSA9IElOVFJBX1BMQU5BUjsKKyAgICB9IGVs
c2UgaWYgKGlzX2NjbG0ocHJlZF9tb2RlX2ludHJhKSkgeworICAgICAgICBpbnQgaW50cmFfbWlw
X2ZsYWdfYyA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pbWYsIHhfYywgeV9jKTsKKyAgICAgICAgaW50
IGN1X3ByZWRfbW9kZSA9IFNBTVBMRV9DVEIoZmMtPnRhYi5jcG1bMF0sIHhfYywgeV9jKTsKKyAg
ICAgICAgaWYgKGludHJhX21pcF9mbGFnX2MpIHsKKyAgICAgICAgICAgIHByZWRfbW9kZV9pbnRy
YSA9IElOVFJBX1BMQU5BUjsKKyAgICAgICAgfSBlbHNlIGlmIChjdV9wcmVkX21vZGUgPT0gTU9E
RV9JQkMgfHwgY3VfcHJlZF9tb2RlID09IE1PREVfUExUKSB7CisgICAgICAgICAgICBwcmVkX21v
ZGVfaW50cmEgPSBJTlRSQV9EQzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByZWRf
bW9kZV9pbnRyYSA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pcG0sIHhfYywgeV9jKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBwcmVkX21vZGVfaW50cmEgPSBmZl92dmNfd2lkZV9hbmdsZV9tb2RlX21h
cHBpbmcoY3UsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdodCwgdGItPmNfaWR4LCBwcmVkX21v
ZGVfaW50cmEpOworCisgICAgcmV0dXJuIHByZWRfbW9kZV9pbnRyYTsKK30KKworLy84LjcuNCBU
cmFuc2Zvcm1hdGlvbiBwcm9jZXNzIGZvciBzY2FsZWQgdHJhbnNmb3JtIGNvZWZmaWNpZW50cwor
c3RhdGljIHZvaWQgaWxmbnN0X3RyYW5zZm9ybShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBU
cmFuc2Zvcm1CbG9jayAqdGIpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgID0g
bGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgID0gbGMtPmN1
OworICAgIGNvbnN0IGludCB3ICAgICAgICAgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICBj
b25zdCBpbnQgaCAgICAgICAgICAgICAgICAgPSB0Yi0+dGJfaGVpZ2h0OworICAgIGNvbnN0IGlu
dCBuX2xmbnN0X291dF9zaXplICA9ICh3ID49IDggJiYgaCA+PSA4KSA/IDQ4IDogMTY7ICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vLzwgbkxmbnN0T3V0U2l6ZQorICAgIGNvbnN0IGludCBsb2cy
X2xmbnN0X3NpemUgICA9ICh3ID49IDggJiYgaCA+PSA4KSA/IDMgOiAyOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vLzwgbG9nMkxmbnN0U2l6ZQorICAgIGNvbnN0IGludCBuX2xmbnN0X3Np
emUgICAgICA9IDEgPDwgbG9nMl9sZm5zdF9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vLzwgbkxmbnN0U2l6ZQorICAgIGNvbnN0IGludCBub25femVyb19zaXplICAgICA9
ICgodyA9PSA4ICYmIGggPT0gOCkgfHwgKHcgPT0gNCAmJiBoID09IDQpKSA/IDggOiAxNjsgIC8v
Lzwgbm9uWmVyb1NpemUKKyAgICBjb25zdCBpbnQgcHJlZF9tb2RlX2ludHJhICAgPSBkZXJpdmVf
aWxmbnN0X3ByZWRfbW9kZV9pbnRyYShsYywgdGIpOworICAgIGNvbnN0IGludCB0cmFuc3Bvc2Ug
ICAgICAgICA9IHByZWRfbW9kZV9pbnRyYSA+IDM0OworICAgIGludCB1WzE2XSwgdls0OF07CisK
KyAgICBmb3IgKGludCB4ID0gMDsgeCA8IG5vbl96ZXJvX3NpemU7IHgrKykgeworICAgICAgICBp
bnQgeGMgPSBmZl92dmNfZGlhZ19zY2FuX3hbMl1bMl1beF07CisgICAgICAgIGludCB5YyA9IGZm
X3Z2Y19kaWFnX3NjYW5feVsyXVsyXVt4XTsKKyAgICAgICAgdVt4XSA9IHRiLT5jb2VmZnNbdyAq
IHljICsgeGNdOworICAgIH0KKyAgICBmZl92dmNfaW52X2xmbnN0XzFkKHYsIHUsIG5vbl96ZXJv
X3NpemUsIG5fbGZuc3Rfb3V0X3NpemUsIHByZWRfbW9kZV9pbnRyYSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGN1LT5sZm5zdF9pZHgsIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAg
IGlmICh0cmFuc3Bvc2UpIHsKKyAgICAgICAgaW50ICpkc3QgPSB0Yi0+Y29lZmZzOworICAgICAg
ICBjb25zdCBpbnQgKnNyYyA9IHY7CisgICAgICAgIGlmIChuX2xmbnN0X3NpemUgPT0gNCkgewor
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCA0OyB5KyspIHsKKyAgICAgICAgICAgICAg
ICBkc3RbMF0gPSBzcmNbMF07CisgICAgICAgICAgICAgICAgZHN0WzFdID0gc3JjWzRdOworICAg
ICAgICAgICAgICAgIGRzdFsyXSA9IHNyY1s4XTsKKyAgICAgICAgICAgICAgICBkc3RbM10gPSBz
cmNbMTJdOworICAgICAgICAgICAgICAgIHNyYysrOworICAgICAgICAgICAgICAgIGRzdCArPSB3
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCA4OyB5KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbMF0gPSBzcmNbMF07Cisg
ICAgICAgICAgICAgICAgZHN0WzFdID0gc3JjWzhdOworICAgICAgICAgICAgICAgIGRzdFsyXSA9
IHNyY1sxNl07CisgICAgICAgICAgICAgICAgZHN0WzNdID0gc3JjWzI0XTsKKyAgICAgICAgICAg
ICAgICBpZiAoeSA8IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzRdID0gc3JjWzMyXTsK
KyAgICAgICAgICAgICAgICAgICAgZHN0WzVdID0gc3JjWzM2XTsKKyAgICAgICAgICAgICAgICAg
ICAgZHN0WzZdID0gc3JjWzQwXTsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzddID0gc3JjWzQ0
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3JjKys7CisgICAgICAgICAg
ICAgICAgZHN0ICs9IHc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7
CisgICAgICAgIGludCAqZHN0ID0gdGItPmNvZWZmczsKKyAgICAgICAgY29uc3QgaW50ICpzcmMg
PSB2OworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG5fbGZuc3Rfc2l6ZTsgeSsrKSB7Cisg
ICAgICAgICAgICBpbnQgc2l6ZSA9ICh5IDwgNCkgPyBuX2xmbnN0X3NpemUgOiA0OworICAgICAg
ICAgICAgbWVtY3B5KGRzdCwgc3JjLCBzaXplICogc2l6ZW9mKGludCkpOworICAgICAgICAgICAg
c3JjICs9IHNpemU7CisgICAgICAgICAgICBkc3QgKz0gdzsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB0Yi0+bWF4X3NjYW5feCA9IG5fbGZuc3Rfc2l6ZSAtIDE7CisgICAgdGItPm1heF9zY2FuX3kg
PSBuX2xmbnN0X3NpemUgLSAxOworfQorCisvL3BhcnQgb2YgOC43LjQgVHJhbnNmb3JtYXRpb24g
cHJvY2VzcyBmb3Igc2NhbGVkIHRyYW5zZm9ybSBjb2VmZmljaWVudHMKK3N0YXRpYyB2b2lkIGRl
cml2ZV90cmFuc2Zvcm1fdHlwZShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBWVkNM
b2NhbENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1CbG9jayAqdGIsIGVudW0gVHhUeXBlICp0
cmgsIGVudW0gVHhUeXBlICp0cnYpCit7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgPSBsYy0+
Y3U7CisgICAgc3RhdGljIGNvbnN0IGVudW0gVHhUeXBlIG10c190b190cmhbXSA9IHtEQ1QyLCBE
U1Q3LCBEQ1Q4LCBEU1Q3LCBEQ1Q4fTsKKyAgICBzdGF0aWMgY29uc3QgZW51bSBUeFR5cGUgbXRz
X3RvX3RydltdID0ge0RDVDIsIERTVDcsIERTVDcsIERDVDgsIERDVDh9OworICAgIGNvbnN0IFZW
Q1NQUyAqc3BzICAgICAgID0gZmMtPnBzLnNwczsKKyAgICBpbnQgaW1wbGljaXRfbXRzX2VuYWJs
ZWQgPSAwOworICAgIGlmICh0Yi0+Y19pZHggfHwgKGN1LT5pc3Bfc3BsaXRfdHlwZSAhPSBJU1Bf
Tk9fU1BMSVQgJiYgY3UtPmxmbnN0X2lkeCkpIHsKKyAgICAgICAgKnRyaCA9ICp0cnYgPSBEQ1Qy
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNwcy0+ci0+c3BzX210c19lbmFi
bGVkX2ZsYWcpIHsKKyAgICAgICAgaWYgKGN1LT5pc3Bfc3BsaXRfdHlwZSAhPSBJU1BfTk9fU1BM
SVQgfHwKKyAgICAgICAgICAgIChjdS0+c2J0X2ZsYWcgJiYgRkZNQVgodGItPnRiX3dpZHRoLCB0
Yi0+dGJfaGVpZ2h0KSA8PSAzMikgfHwKKyAgICAgICAgICAgICghc3BzLT5yLT5zcHNfZXhwbGlj
aXRfbXRzX2ludHJhX2VuYWJsZWRfZmxhZyAmJiBjdS0+cHJlZF9tb2RlID09IE1PREVfSU5UUkEg
JiYKKyAgICAgICAgICAgICFjdS0+bGZuc3RfaWR4ICYmICFjdS0+aW50cmFfbWlwX2ZsYWcpKSB7
CisgICAgICAgICAgICBpbXBsaWNpdF9tdHNfZW5hYmxlZCA9IDE7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKGltcGxpY2l0X210c19lbmFibGVkKSB7CisgICAgICAgIGNvbnN0IGludCB3ID0g
dGItPnRiX3dpZHRoOworICAgICAgICBjb25zdCBpbnQgaCA9IHRiLT50Yl9oZWlnaHQ7CisgICAg
ICAgIGlmIChjdS0+c2J0X2ZsYWcpIHsKKyAgICAgICAgICAgICp0cmggPSAoY3UtPnNidF9ob3Jp
em9udGFsX2ZsYWcgIHx8IGN1LT5zYnRfcG9zX2ZsYWcpID8gRFNUNyA6IERDVDg7CisgICAgICAg
ICAgICAqdHJ2ID0gKCFjdS0+c2J0X2hvcml6b250YWxfZmxhZyB8fCBjdS0+c2J0X3Bvc19mbGFn
KSA/IERTVDcgOiBEQ1Q4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnRyaCA9ICh3
ID49IDQgJiYgdyA8PSAxNikgPyBEU1Q3IDogRENUMjsKKyAgICAgICAgICAgICp0cnYgPSAoaCA+
PSA0ICYmIGggPD0gMTYpID8gRFNUNyA6IERDVDI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAqdHJoID0gbXRzX3RvX3RyaFtjdS0+bXRzX2lkeF07CisgICAgKnRydiA9
IG10c190b190cnZbY3UtPm10c19pZHhdOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmVzaWR1YWxf
Zm9yX2pvaW50X2NvZGluZ19jaHJvbWEoVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBU
cmFuc2Zvcm1Vbml0ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiLCBjb25zdCBpbnQgY2hyb21hX3Nj
YWxlKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNv
bnN0IENvZGluZ1VuaXQgKmN1ID0gbGMtPmN1OworICAgIGNvbnN0IGludCBjX3NpZ24gPSAxIC0g
MiAqIGZjLT5wcy5waC5yLT5waF9qb2ludF9jYmNyX3NpZ25fZmxhZzsKKyAgICBjb25zdCBpbnQg
c2hpZnQgID0gdHUtPmNvZGVkX2ZsYWdbMV0gXiB0dS0+Y29kZWRfZmxhZ1syXTsKKyAgICBjb25z
dCBpbnQgY19pZHggID0gMSArIHR1LT5jb2RlZF9mbGFnWzFdOworICAgIGNvbnN0IHB0cmRpZmZf
dCBzdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICBjb25zdCBpbnQgaHMg
PSBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCB2cyA9IGZjLT5wcy5z
cHMtPnZzaGlmdFtjX2lkeF07CisgICAgdWludDhfdCAqZHN0ID0gJmZjLT5mcmFtZS0+ZGF0YVtj
X2lkeF1bKHRiLT55MCA+PiB2cykgKiBzdHJpZGUgKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCh0Yi0+eDAgPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3No
aWZ0KV07CisgICAgaWYgKGNocm9tYV9zY2FsZSkgeworICAgICAgICBmYy0+dnZjZHNwLml0eC5w
cmVkX3Jlc2lkdWFsX2pvaW50KHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdo
dCwgY19zaWduLCBzaGlmdCk7CisgICAgICAgIGZjLT52dmNkc3AuaW50cmEubG1jc19zY2FsZV9j
aHJvbWEobGMsIHRiLT5jb2VmZnMsIHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hl
aWdodCwgY3UtPngwLCBjdS0+eTApOworICAgICAgICBmYy0+dnZjZHNwLml0eC5hZGRfcmVzaWR1
YWwoZHN0LCB0Yi0+Y29lZmZzLCB0Yi0+dGJfd2lkdGgsIHRiLT50Yl9oZWlnaHQsIHN0cmlkZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguYWRkX3Jlc2lkdWFsX2pvaW50
KGRzdCwgdGItPmNvZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0LCBzdHJpZGUsIGNf
c2lnbiwgc2hpZnQpOworICAgIH0KK30KKworc3RhdGljIGludCBhZGRfcmVjb25zdHJ1Y3RlZF9h
cmVhKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCBjaF90eXBlLCBjb25zdCBpbnQgeDAs
IGNvbnN0IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoKQoreworICAgIGNvbnN0IFZW
Q1NQUyAqc3BzICAgICAgID0gbGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGhzID0gc3Bz
LT5oc2hpZnRbY2hfdHlwZV07CisgICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbY2hfdHlw
ZV07CisgICAgUmVjb25zdHJ1Y3RlZEFyZWEgKmE7CisKKyAgICBpZiAobGMtPm51bV9yYXNbY2hf
dHlwZV0gPj0gRkZfQVJSQVlfRUxFTVMobGMtPnJhc1tjaF90eXBlXSkpCisgICAgICAgIHJldHVy
biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgYSA9ICZsYy0+cmFzW2NoX3R5cGVdW2xjLT5u
dW1fcmFzW2NoX3R5cGVdXTsKKyAgICBhLT54ID0geDAgPj4gaHM7CisgICAgYS0+eSA9IHkwID4+
IHZzOworICAgIGEtPncgPSB3ID4+IGhzOworICAgIGEtPmggPSBoID4+IHZzOworICAgIGxjLT5u
dW1fcmFzW2NoX3R5cGVdKys7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRk
X3R1X2FyZWEoY29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIGludCAqeDAsIGludCAqeTAsIGludCAq
dywgaW50ICpoKQoreworICAgICp4MCA9IHR1LT54MDsKKyAgICAqeTAgPSB0dS0+eTA7CisgICAg
KncgPSB0dS0+d2lkdGg7CisgICAgKmggPSB0dS0+aGVpZ2h0OworfQorCisjZGVmaW5lIE1JTl9J
U1BfUFJFRF9XSURUSCA0CitzdGF0aWMgaW50IGdldF9sdW1hX3ByZWRpY3RfdW5pdChjb25zdCBD
b2RpbmdVbml0ICpjdSwgY29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIGNvbnN0IGludCBpZHgsIGlu
dCAqeDAsIGludCAqeTAsIGludCAqdywgaW50ICpoKQoreworICAgIGludCBoYXNfbHVtYSA9IDE7
CisgICAgYWRkX3R1X2FyZWEodHUsIHgwLCB5MCwgdywgaCk7CisgICAgaWYgKGN1LT5pc3Bfc3Bs
aXRfdHlwZSA9PSBJU1BfVkVSX1NQTElUICYmIHR1LT53aWR0aCA8IE1JTl9JU1BfUFJFRF9XSURU
SCkgeworICAgICAgICAqdyA9IE1JTl9JU1BfUFJFRF9XSURUSDsKKyAgICAgICAgaGFzX2x1bWEg
PSAhKGlkeCAlIChNSU5fSVNQX1BSRURfV0lEVEggLyB0dS0+d2lkdGgpKTsKKyAgICB9CisgICAg
cmV0dXJuIGhhc19sdW1hOworfQorCitzdGF0aWMgaW50IGdldF9jaHJvbWFfcHJlZGljdF91bml0
KGNvbnN0IENvZGluZ1VuaXQgKmN1LCBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgY29uc3QgaW50
IGlkeCwgaW50ICp4MCwgaW50ICp5MCwgaW50ICp3LCBpbnQgKmgpCit7CisgICAgaWYgKGN1LT5p
c3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9fU1BMSVQpIHsKKyAgICAgICAgYWRkX3R1X2FyZWEodHUs
IHgwLCB5MCwgdywgaCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaWR4ID09
IGN1LT5udW1faW50cmFfc3VicGFydGl0aW9ucyAtIDEpIHsKKyAgICAgICAgKngwID0gY3UtPngw
OworICAgICAgICAqeTAgPSBjdS0+eTA7CisgICAgICAgICp3ID0gY3UtPmNiX3dpZHRoOworICAg
ICAgICAqaCA9IGN1LT5jYl9oZWlnaHQ7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKworLy84LjQuNS4xIEdlbmVyYWwgZGVjb2RpbmcgcHJvY2VzcyBmb3IgaW50
cmEgYmxvY2tzCitzdGF0aWMgdm9pZCBwcmVkaWN0X2ludHJhKFZWQ0xvY2FsQ29udGV4dCAqbGMs
IGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBjb25zdCBpbnQgaWR4LCBjb25zdCBpbnQgdGFyZ2V0
X2NoX3R5cGUpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgICAgID0gbGMt
PmZjOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1ICAgICAgICA9IGxjLT5jdTsKKyAgICBjb25z
dCBWVkNUcmVlVHlwZSB0cmVlX3R5cGUgPSBjdS0+dHJlZV90eXBlOworICAgIGludCB4MCwgeTAs
IHcsIGg7CisgICAgaWYgKGN1LT5wcmVkX21vZGUgIT0gTU9ERV9JTlRSQSkgeworICAgICAgICBh
ZGRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCB0YXJnZXRfY2hfdHlwZSwgdHUtPngwLCB0dS0+eTAs
IHR1LT53aWR0aCwgdHUtPmhlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCF0YXJnZXRfY2hfdHlwZSAmJiB0cmVlX3R5cGUgIT0gRFVBTF9UUkVFX0NIUk9NQSkgeworICAg
ICAgICBpZiAoZ2V0X2x1bWFfcHJlZGljdF91bml0KGN1LCB0dSwgaWR4LCAmeDAsICZ5MCwgJncs
ICZoKSkgeworICAgICAgICAgICAgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKGxjLCB4
MCwgeTAsIHcsIGgpOworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5pbnRyYV9wcmVkKGxj
LCB4MCwgeTAsIHcsIGgsIDApOworICAgICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShs
YywgMCwgeDAsIHkwLCB3LCBoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodGFyZ2V0X2No
X3R5cGUgJiYgdHJlZV90eXBlICE9IERVQUxfVFJFRV9MVU1BKSB7CisgICAgICAgIGlmIChnZXRf
Y2hyb21hX3ByZWRpY3RfdW5pdChjdSwgdHUsIGlkeCwgJngwLCAmeTAsICZ3LCAmaCkpeworICAg
ICAgICAgICAgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKGxjLCB4MCwgeTAsIHcsIGgp
OworICAgICAgICAgICAgaWYgKGlzX2NjbG0oY3UtPmludHJhX3ByZWRfbW9kZV9jKSkgeworICAg
ICAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEuaW50cmFfY2NsbV9wcmVkKGxjLCB4MCwgeTAs
IHcsIGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmYy0+dnZjZHNw
LmludHJhLmludHJhX3ByZWQobGMsIHgwLCB5MCwgdywgaCwgMSk7CisgICAgICAgICAgICAgICAg
ZmMtPnZ2Y2RzcC5pbnRyYS5pbnRyYV9wcmVkKGxjLCB4MCwgeTAsIHcsIGgsIDIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShsYywgMSwgeDAsIHkw
LCB3LCBoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgc2NhbGVfY2xpcChp
bnQgKmNvZWZmLCBjb25zdCBpbnQgbnp3LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsCisgICAg
Y29uc3QgaW50IHNoaWZ0LCBjb25zdCBpbnQgbG9nMl90cmFuc2Zvcm1fcmFuZ2UpCit7CisgICAg
Y29uc3QgaW50IGFkZCA9IDEgPDwgKHNoaWZ0IC0gMSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoOyB5KyspIHsKKyAgICAgICAgaW50ICpwID0gY29lZmYgKyB5ICogdzsKKyAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBuenc7IHgrKykgeworICAgICAgICAgICAgKnAgPSBhdl9jbGlwX2lu
dHAyKCgqcCArIGFkZCkgPj4gc2hpZnQsIGxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKyAgICAgICAg
ICAgIHArKzsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSAqICh3
IC0gbnp3KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzY2FsZShpbnQgKm91dCwgY29uc3Qg
aW50ICppbiwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgc2hpZnQpCit7Cisg
ICAgY29uc3QgaW50IGFkZCA9IDEgPDwgKHNoaWZ0IC0gMSk7CisgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAg
ICAgICAgICAgIGludCAqbyA9IG91dCArIHkgKiB3ICsgeDsKKyAgICAgICAgICAgIGNvbnN0IGlu
dCAqaSA9IGluICsgeSAqIHcgKyB4OworICAgICAgICAgICAgKm8gPSAoKmkgKyBhZGQpID4+IHNo
aWZ0OworICAgICAgICB9CisgICAgfQorfQorCisvLyBwYXJ0IG9mIDguNy4zIFNjYWxpbmcgcHJv
Y2VzcyBmb3IgdHJhbnNmb3JtIGNvZWZmaWNpZW50cworc3RhdGljIHZvaWQgZGVyaXZlX3FwKGNv
bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBUcmFuc2Zv
cm1CbG9jayAqdGIpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IGxj
LT5mYy0+cHMuc3BzOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+
c2MtPnNoLnI7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgICAgICA9IGxjLT5jdTsK
KyAgICBpbnQgcXAsIHFwX2FjdF9vZmZzZXQ7CisKKyAgICBpZiAodGItPmNfaWR4ID09IDApIHsK
KyAgICAgICAgLy9maXggbWUKKyAgICAgICAgcXAgPSBjdS0+cXBbTFVNQV0gKyBzcHMtPnFwX2Jk
X29mZnNldDsKKyAgICAgICAgcXBfYWN0X29mZnNldCA9IGN1LT5hY3RfZW5hYmxlZF9mbGFnID8g
LTUgOiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGludCBpc19qY2JjciA9IHR1LT5q
b2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWcgJiYgdHUtPmNvZGVkX2ZsYWdbQ0JdICYmIHR1LT5jb2Rl
ZF9mbGFnW0NSXTsKKyAgICAgICAgY29uc3QgaW50IGlkeCA9IGlzX2pjYmNyID8gSkNCQ1IgOiB0
Yi0+Y19pZHg7CisgICAgICAgIHFwID0gY3UtPnFwW2lkeF07CisgICAgICAgIHFwX2FjdF9vZmZz
ZXQgPSBjdS0+YWN0X2VuYWJsZWRfZmxhZyA/IDEgOiAwOworICAgIH0KKyAgICBpZiAodGItPnRz
KSB7CisgICAgICAgIGNvbnN0IGludCBxcF9wcmltZV90c19taW4gPSA0ICsgNiAqIHNwcy0+ci0+
c3BzX21pbl9xcF9wcmltZV90czsKKworICAgICAgICB0Yi0+cXAgPSBhdl9jbGlwKHFwICsgcXBf
YWN0X29mZnNldCwgcXBfcHJpbWVfdHNfbWluLCA2MyArIHNwcy0+cXBfYmRfb2Zmc2V0KTsKKyAg
ICAgICAgdGItPnJlY3Rfbm9uX3RzX2ZsYWcgPSAwOworICAgICAgICB0Yi0+YmRfc2hpZnQgPSAx
MDsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBpbnQgbG9nX3N1bSA9IHRiLT5sb2cyX3Ri
X3dpZHRoICsgdGItPmxvZzJfdGJfaGVpZ2h0OworICAgICAgICBjb25zdCBpbnQgcmVjdF9ub25f
dHNfZmxhZyA9IGxvZ19zdW0gJiAxOworCisgICAgICAgIHRiLT5xcCA9IGF2X2NsaXAocXAgKyBx
cF9hY3Rfb2Zmc2V0LCAwLCA2MyArIHNwcy0+cXBfYmRfb2Zmc2V0KTsKKyAgICAgICAgdGItPnJl
Y3Rfbm9uX3RzX2ZsYWcgPSByZWN0X25vbl90c19mbGFnOworICAgICAgICB0Yi0+YmRfc2hpZnQg
PSBzcHMtPmJpdF9kZXB0aCArIHJlY3Rfbm9uX3RzX2ZsYWcgKyAobG9nX3N1bSAvIDIpCisgICAg
ICAgICAgICAgICAgICAgICArIDEwIC0gc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSArIHJzaC0+
c2hfZGVwX3F1YW50X3VzZWRfZmxhZzsKKyAgICB9CisgICAgdGItPmJkX29mZnNldCA9ICgxIDw8
IHRiLT5iZF9zaGlmdCkgPj4gMTsKK30KKworLy84LjcuMyBTY2FsaW5nIHByb2Nlc3MgZm9yIHRy
YW5zZm9ybSBjb2VmZmljaWVudHMKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBkZXJpdmVf
c2NhbGUoY29uc3QgVHJhbnNmb3JtQmxvY2sgKnRiLCBjb25zdCBpbnQgc2hfZGVwX3F1YW50X3Vz
ZWRfZmxhZykKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCByZW02WzYzICsgMiAqIDYgKyAx
XSA9IHsKKyAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwg
MiwgMywgNCwgNSwgMCwgMSwgMiwKKyAgICAgICAgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwg
MCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwKKyAgICAgICAgMCwgMSwgMiwgMywg
NCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywKKyAg
ICAgICAgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMworICAgIH07CisKKyAgICBz
dGF0aWMgY29uc3QgdWludDhfdCBkaXY2WzYzICsgMiAqIDYgKyAxXSA9IHsKKyAgICAgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMywgIDMs
ICAzLAorICAgICAgICAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA1LCA1
LCA2LCA2LCA2LCA2LCAgNiwgIDYsCisgICAgICAgIDcsIDcsIDcsIDcsIDcsIDcsIDgsIDgsIDgs
IDgsIDgsIDgsIDksIDksIDksIDksIDksIDksIDEwLCAxMCwgMTAsIDEwLAorICAgICAgICAxMCwg
MTAsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDEyLCAxMiwgMTIsIDEyCisgICAgfTsKKworICAg
IGNvbnN0IHN0YXRpYyBpbnQgbGV2ZWxfc2NhbGVbMl1bNl0gPSB7CisgICAgICAgIHsgNDAsIDQ1
LCA1MSwgNTcsIDY0LCA3MiB9LAorICAgICAgICB7IDU3LCA2NCwgNzIsIDgwLCA5MCwgMTAyIH0K
KyAgICB9OworICAgIGNvbnN0IGludCBhZGRpbiA9IHNoX2RlcF9xdWFudF91c2VkX2ZsYWcgJiYg
IXRiLT50czsKKyAgICBjb25zdCBpbnQgcXAgICAgPSB0Yi0+cXAgKyBhZGRpbjsKKworICAgIHJl
dHVybiBsZXZlbF9zY2FsZVt0Yi0+cmVjdF9ub25fdHNfZmxhZ11bcmVtNltxcF1dIDw8IGRpdjZb
cXBdOworfQorCisvLzguNy4zIFNjYWxpbmcgcHJvY2VzcyBmb3IgdHJhbnNmb3JtIGNvZWZmaWNp
ZW50cworc3RhdGljIGNvbnN0IHVpbnQ4X3QqIGRlcml2ZV9zY2FsZV9tKGNvbnN0IFZWQ0xvY2Fs
Q29udGV4dCAqbGMsIGNvbnN0IFRyYW5zZm9ybUJsb2NrICp0YiwgdWludDhfdCAqc2NhbGVfbSkK
K3sKKyAgICAvL1RhYmxlIDM4IOKAkyBTcGVjaWZpY2F0aW9uIG9mIHRoZSBzY2FsaW5nIG1hdHJp
eCBpZGVudGlmaWVyIHZhcmlhYmxlIGlkIGFjY29yZGluZyB0byBwcmVkTW9kZSwgY0lkeCwgblRi
VywgYW5kIG5UYkgKKyAgICBjb25zdCBpbnQgaWRzWzJdWzNdWzZdID0geworICAgICAgICB7Cisg
ICAgICAgICAgICB7ICAwLCAgMiwgIDgsIDE0LCAyMCwgMjYgfSwKKyAgICAgICAgICAgIHsgIDAs
ICAzLCAgOSwgMTUsIDIxLCAyMSB9LAorICAgICAgICAgICAgeyAgMCwgIDQsIDEwLCAxNiwgMjIs
IDIyIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgeyAgMCwgIDUsIDExLCAx
NywgMjMsIDI3IH0sCisgICAgICAgICAgICB7ICAwLCAgNiwgMTIsIDE4LCAyNCwgMjQgfSwKKyAg
ICAgICAgICAgIHsgIDEsICA3LCAxMywgMTksIDI1LCAyNSB9LAorICAgICAgICB9CisgICAgfTsK
KyAgICBjb25zdCBWVkNGcmFtZVBhcmFtU2V0cyAqcHMgICAgID0gJmxjLT5mYy0+cHM7CisgICAg
Y29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IHBzLT5zcHM7CisgICAgY29uc3QgSDI2
NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5zYy0+c2gucjsKKyAgICBjb25zdCBDb2RpbmdV
bml0ICpjdSAgICAgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IFZWQ1NjYWxpbmdMaXN0ICpz
bCAgICAgICAgPSBwcy0+c2w7CisgICAgY29uc3QgaW50IGlkID0gaWRzW2N1LT5wcmVkX21vZGUg
IT0gTU9ERV9JTlRSQV1bdGItPmNfaWR4XVtGRk1BWCh0Yi0+bG9nMl90Yl9oZWlnaHQsIHRiLT5s
b2cyX3RiX3dpZHRoKSAtIDFdOworICAgIGNvbnN0IGludCBsb2cyX21hdHJpeF9zaXplID0gKGlk
IDwgMikgPyAxIDogKGlkIDwgOCkgPyAyIDogMzsKKyAgICB1aW50OF90ICpwID0gc2NhbGVfbTsK
KworICAgIGF2X2Fzc2VydDAoIXNwcy0+ci0+c3BzX3NjYWxpbmdfbWF0cml4X2Zvcl9hbHRlcm5h
dGl2ZV9jb2xvdXJfc3BhY2VfZGlzYWJsZWRfZmxhZyk7CisKKyAgICBpZiAoIXJzaC0+c2hfZXhw
bGljaXRfc2NhbGluZ19saXN0X3VzZWRfZmxhZyB8fCB0Yi0+dHMgfHwKKyAgICAgICAgc3BzLT5y
LT5zcHNfc2NhbGluZ19tYXRyaXhfZm9yX2xmbnN0X2Rpc2FibGVkX2ZsYWcgJiYgY3UtPmFwcGx5
X2xmbnN0X2ZsYWdbdGItPmNfaWR4XSkKKyAgICAgICAgcmV0dXJuIGZmX3Z2Y19kZWZhdWx0X3Nj
YWxlX207CisKKyAgICBpZiAoIXNsKSB7CisgICAgICAgIGF2X2xvZyhsYy0+ZmMtPmxvZ19jdHgs
IEFWX0xPR19XQVJOSU5HLCAiYnVnOiBubyBzY2FsaW5nIGxpc3QgYXBzLCBpZCA9ICVkIiwgcHMt
PnBoLnItPnBoX3NjYWxpbmdfbGlzdF9hcHNfaWQpOworICAgICAgICByZXR1cm4gZmZfdnZjX2Rl
ZmF1bHRfc2NhbGVfbTsKKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0gdGItPm1pbl9zY2FuX3k7
IHkgPD0gdGItPm1heF9zY2FuX3k7IHkrKykgeworICAgICAgICBjb25zdCBpbnQgb2ZmID0geSA8
PCBsb2cyX21hdHJpeF9zaXplID4+IHRiLT5sb2cyX3RiX2hlaWdodCA8PCBsb2cyX21hdHJpeF9z
aXplOworICAgICAgICBjb25zdCB1aW50OF90ICptID0gJnNsLT5zY2FsaW5nX21hdHJpeF9yZWNb
aWRdW29mZl07CisKKyAgICAgICAgZm9yIChpbnQgeCA9IHRiLT5taW5fc2Nhbl94OyB4IDw9IHRi
LT5tYXhfc2Nhbl94OyB4KyspCisgICAgICAgICAgICAqcCsrID0gbVt4IDw8IGxvZzJfbWF0cml4
X3NpemUgPj4gdGItPmxvZzJfdGJfd2lkdGhdOworICAgIH0KKyAgICBpZiAoaWQgPj0gU0xfU1RB
UlRfMTZ4MTYgJiYgIXRiLT5taW5fc2Nhbl94ICYmICF0Yi0+bWluX3NjYW5feSkKKyAgICAgICAg
KnNjYWxlX20gPSBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZd
OworCisgICAgcmV0dXJuIHNjYWxlX207Cit9CisKKy8vOC43LjMgU2NhbGluZyBwcm9jZXNzIGZv
ciB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgc2Nh
bGVfY29lZmYoY29uc3QgVHJhbnNmb3JtQmxvY2sgKnRiLCBpbnQgY29lZmYsCisgICAgY29uc3Qg
aW50IHNjYWxlLCBjb25zdCBpbnQgc2NhbGVfbSwgY29uc3QgaW50IGxvZzJfdHJhbnNmb3JtX3Jh
bmdlKQoreworICAgIGNvZWZmID0gKGNvZWZmICogc2NhbGUgKiBzY2FsZV9tICsgdGItPmJkX29m
ZnNldCkgPj4gdGItPmJkX3NoaWZ0OworICAgIGNvZWZmID0gYXZfY2xpcF9pbnRwMihjb2VmZiwg
bG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAgIHJldHVybiBjb2VmZjsKK30KKworc3RhdGljIHZv
aWQgZGVxdWFudChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1Vbml0
ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiKQoreworICAgIHVpbnQ4X3QgdG1wW01BWF9UQl9TSVpF
ICogTUFYX1RCX1NJWkVdOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBs
Yy0+c2MtPnNoLnI7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IGxjLT5m
Yy0+cHMuc3BzOworICAgIGNvbnN0IHVpbnQ4X3QgKnNjYWxlX20gICAgICAgICAgPSBkZXJpdmVf
c2NhbGVfbShsYywgdGIsIHRtcCk7CisgICAgaW50IHNjYWxlOworCisgICAgZGVyaXZlX3FwKGxj
LCB0dSwgdGIpOworICAgIHNjYWxlID0gZGVyaXZlX3NjYWxlKHRiLCByc2gtPnNoX2RlcF9xdWFu
dF91c2VkX2ZsYWcpOworCisgICAgZm9yIChpbnQgeSA9IHRiLT5taW5fc2Nhbl95OyB5IDw9IHRi
LT5tYXhfc2Nhbl95OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHRiLT5taW5fc2Nhbl94
OyB4IDw9IHRiLT5tYXhfc2Nhbl94OyB4KyspIHsKKyAgICAgICAgICAgIGludCAqY29lZmYgPSB0
Yi0+Y29lZmZzICsgeSAqIHRiLT50Yl93aWR0aCArIHg7CisKKyAgICAgICAgICAgIGlmICgqY29l
ZmYpCisgICAgICAgICAgICAgICAgKmNvZWZmID0gc2NhbGVfY29lZmYodGIsICpjb2VmZiwgc2Nh
bGUsICpzY2FsZV9tLCBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKyAgICAgICAgICAgIHNj
YWxlX20rKzsKKyAgICAgICAgfQorICAgIH0KK30KKworLy90cmFuc21hdHJpeFswXVswXQorI2Rl
ZmluZSBEQ1RfQSA2NAorc3RhdGljIHZvaWQgaXR4XzJkKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAq
ZmMsIFRyYW5zZm9ybUJsb2NrICp0YiwgY29uc3QgZW51bSBUeFR5cGUgdHJoLCBjb25zdCBlbnVt
IFR4VHlwZSB0cnYpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7Cisg
ICAgY29uc3QgaW50IHcgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICBjb25zdCBpbnQgaCAg
ICAgICAgID0gdGItPnRiX2hlaWdodDsKKyAgICBjb25zdCBzaXplX3Qgbnp3ICAgID0gdGItPm1h
eF9zY2FuX3ggKyAxOworICAgIGNvbnN0IHNpemVfdCBuemggICAgPSB0Yi0+bWF4X3NjYW5feSAr
IDE7CisgICAgY29uc3QgaW50IHNoaWZ0W10gICA9IHsgNywgNSArIHNwcy0+bG9nMl90cmFuc2Zv
cm1fcmFuZ2UgLSBzcHMtPmJpdF9kZXB0aCB9OworCisgICAgaWYgKHcgPT0gaCAmJiBuencgPT0g
MSAmJiBuemggPT0gMSAmJiB0cmggPT0gRENUMiAmJiB0cnYgPT0gRENUMikgeworICAgICAgICBj
b25zdCBpbnQgYWRkW10gPSB7IDEgPDwgKHNoaWZ0WzBdIC0gMSksIDEgPDwgKHNoaWZ0WzFdIC0g
MSkgfTsKKyAgICAgICAgY29uc3QgaW50IHQgICAgID0gKHRiLT5jb2VmZnNbMF0gKiBEQ1RfQSAr
IGFkZFswXSkgPj4gc2hpZnRbMF07CisgICAgICAgIGNvbnN0IGludCBkYyAgICA9ICh0ICogRENU
X0EgKyBhZGRbMV0pID4+IHNoaWZ0WzFdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dyAqIGg7IGkrKykKKyAgICAgICAgICAgIHRiLT5jb2VmZnNbaV0gPSBkYzsKKworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBuenc7IHgrKykKKyAgICAg
ICAgZmMtPnZ2Y2RzcC5pdHguaXR4W3Rydl1bdGItPmxvZzJfdGJfaGVpZ2h0IC0gMV0odGItPmNv
ZWZmcyArIHgsIHcsIG56aCk7CisgICAgc2NhbGVfY2xpcCh0Yi0+Y29lZmZzLCBuencsIHcsIGgs
IHNoaWZ0WzBdLCBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKworICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaDsgeSsrKQorICAgICAgICBmYy0+dnZjZHNwLml0eC5pdHhbdHJoXVt0Yi0+bG9n
Ml90Yl93aWR0aCAtIDFdKHRiLT5jb2VmZnMgKyB5ICogdywgMSwgbnp3KTsKKyAgICBzY2FsZSh0
Yi0+Y29lZmZzLCB0Yi0+Y29lZmZzLCB3LCBoLCBzaGlmdFsxXSk7Cit9CisKK3N0YXRpYyB2b2lk
IGl0eF8xZChjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBUcmFuc2Zvcm1CbG9jayAqdGIsIGNv
bnN0IGVudW0gVHhUeXBlIHRyaCwgY29uc3QgZW51bSBUeFR5cGUgdHJ2KQoreworICAgIGNvbnN0
IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCB3ICAgICAgICAgPSB0
Yi0+dGJfd2lkdGg7CisgICAgY29uc3QgaW50IGggICAgICAgICA9IHRiLT50Yl9oZWlnaHQ7Cisg
ICAgY29uc3Qgc2l6ZV90IG56dyAgICA9IHRiLT5tYXhfc2Nhbl94ICsgMTsKKyAgICBjb25zdCBz
aXplX3QgbnpoICAgID0gdGItPm1heF9zY2FuX3kgKyAxOworCisgICAgaWYgKCh3ID4gMSAmJiBu
encgPT0gMSAmJiB0cmggPT0gRENUMikgfHwgKGggPiAxICYmIG56aCA9PSAxICYmIHRydiA9PSBE
Q1QyKSkgeworICAgICAgICBjb25zdCBpbnQgc2hpZnQgPSA2ICsgc3BzLT5sb2cyX3RyYW5zZm9y
bV9yYW5nZSAtIHNwcy0+Yml0X2RlcHRoOworICAgICAgICBjb25zdCBpbnQgYWRkICAgPSAxIDw8
IChzaGlmdCAtIDEpOworICAgICAgICBjb25zdCBpbnQgZGMgICAgPSAodGItPmNvZWZmc1swXSAq
IERDVF9BICsgYWRkKSA+PiBzaGlmdDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHcg
KiBoOyBpKyspCisgICAgICAgICAgICB0Yi0+Y29lZmZzW2ldID0gZGM7CisKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICh3ID4gMSkKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguaXR4
W3RyaF1bdGItPmxvZzJfdGJfd2lkdGggLSAxXSh0Yi0+Y29lZmZzLCAxLCBuencpOworICAgIGVs
c2UKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguaXR4W3Rydl1bdGItPmxvZzJfdGJfaGVpZ2h0IC0g
MV0odGItPmNvZWZmcywgMSwgbnpoKTsKKyAgICBzY2FsZSh0Yi0+Y29lZmZzLCB0Yi0+Y29lZmZz
LCB3LCBoLCA2ICsgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSAtIHNwcy0+Yml0X2RlcHRoKTsK
K30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtX2JkcGNtKFRyYW5zZm9ybUJsb2NrICp0YiwgY29u
c3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgQ29kaW5nVW5pdCAqY3UpCit7CisgICAgY29u
c3QgVlZDU1BTICpzcHMgICAgICAgID0gbGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3QgSW50cmFQ
cmVkTW9kZSBtb2RlID0gdGItPmNfaWR4ID8gY3UtPmludHJhX3ByZWRfbW9kZV9jIDogY3UtPmlu
dHJhX3ByZWRfbW9kZV95OworICAgIGNvbnN0IGludCB2ZXJ0aWNhbCAgICAgICA9IG1vZGUgPT0g
SU5UUkFfVkVSVDsKKyAgICBsYy0+ZmMtPnZ2Y2RzcC5pdHgudHJhbnNmb3JtX2JkcGNtKHRiLT5j
b2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLCBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlKTsK
KyAgICBpZiAodmVydGljYWwpCisgICAgICAgIHRiLT5tYXhfc2Nhbl95ID0gdGItPnRiX2hlaWdo
dCAtIDE7CisgICAgZWxzZQorICAgICAgICB0Yi0+bWF4X3NjYW5feCA9IHRiLT50Yl93aWR0aCAt
IDE7Cit9CisKK3N0YXRpYyB2b2lkIGl0cmFuc2Zvcm0oVlZDTG9jYWxDb250ZXh0ICpsYywgVHJh
bnNmb3JtVW5pdCAqdHUsIGNvbnN0IGludCB0dV9pZHgsIGNvbnN0IGludCB0YXJnZXRfY2hfdHlw
ZSkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgPSBsYy0+ZmM7CisgICAgY29u
c3QgVlZDU1BTICpzcHMgICAgICAgICAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBWVkNTSCAq
c2ggICAgICAgICAgICAgPSAmbGMtPnNjLT5zaDsKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSAg
ICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHBzICAgICAgICAgICAgICAgID0gZmMtPnBz
LnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgREVDTEFSRV9BTElHTkVEKDMyLCBpbnQsIHRlbXApW01B
WF9UQl9TSVpFICogTUFYX1RCX1NJWkVdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0dS0+
bmJfdGJzOyBpKyspIHsKKyAgICAgICAgVHJhbnNmb3JtQmxvY2sgKnRiICA9ICZ0dS0+dGJzW2ld
OworICAgICAgICBjb25zdCBpbnQgY19pZHggICAgID0gdGItPmNfaWR4OworICAgICAgICBjb25z
dCBpbnQgY2hfdHlwZSAgID0gY19pZHggPiAwOworCisgICAgICAgIGlmIChjaF90eXBlID09IHRh
cmdldF9jaF90eXBlICYmIHRiLT5oYXNfY29lZmZzKSB7CisgICAgICAgICAgICBjb25zdCBpbnQg
dyAgICAgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICAgICAgICAgIGNvbnN0IGludCBoICAg
ICAgICAgICAgID0gdGItPnRiX2hlaWdodDsKKyAgICAgICAgICAgIGNvbnN0IGludCBjaHJvbWFf
c2NhbGUgID0gY2hfdHlwZSAmJiBzaC0+ci0+c2hfbG1jc191c2VkX2ZsYWcgJiYgZmMtPnBzLnBo
LnItPnBoX2Nocm9tYV9yZXNpZHVhbF9zY2FsZV9mbGFnICYmICh3ICogaCA+IDQpOworICAgICAg
ICAgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSAgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4
XTsKKyAgICAgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgICAgID0gc3BzLT5oc2hpZnRbY19p
ZHhdOworICAgICAgICAgICAgY29uc3QgaW50IHZzICAgICAgICAgICAgPSBzcHMtPnZzaGlmdFtj
X2lkeF07CisgICAgICAgICAgICB1aW50OF90ICpkc3QgICAgICAgICAgICA9ICZmYy0+ZnJhbWUt
PmRhdGFbY19pZHhdWyh0Yi0+eTAgPj4gdnMpICogc3RyaWRlICsgKCh0Yi0+eDAgPj4gaHMpIDw8
IHBzKV07CisKKyAgICAgICAgICAgIGlmIChjdS0+YmRwY21fZmxhZ1t0Yi0+Y19pZHhdKQorICAg
ICAgICAgICAgICAgIHRyYW5zZm9ybV9iZHBjbSh0YiwgbGMsIGN1KTsKKyAgICAgICAgICAgIGRl
cXVhbnQobGMsIHR1LCB0Yik7CisgICAgICAgICAgICBpZiAoIXRiLT50cykgeworICAgICAgICAg
ICAgICAgIGVudW0gVHhUeXBlIHRyaCwgdHJ2OworCisgICAgICAgICAgICAgICAgaWYgKGN1LT5h
cHBseV9sZm5zdF9mbGFnW2NfaWR4XSkKKyAgICAgICAgICAgICAgICAgICAgaWxmbnN0X3RyYW5z
Zm9ybShsYywgdGIpOworICAgICAgICAgICAgICAgIGRlcml2ZV90cmFuc2Zvcm1fdHlwZShmYywg
bGMsIHRiLCAmdHJoLCAmdHJ2KTsKKyAgICAgICAgICAgICAgICBpZiAodyA+IDEgJiYgaCA+IDEp
CisgICAgICAgICAgICAgICAgICAgIGl0eF8yZChmYywgdGIsIHRyaCwgdHJ2KTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGl0eF8xZChmYywgdGIsIHRyaCwgdHJ2
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNocm9tYV9zY2FsZSkKKyAgICAg
ICAgICAgICAgICBmYy0+dnZjZHNwLmludHJhLmxtY3Nfc2NhbGVfY2hyb21hKGxjLCB0ZW1wLCB0
Yi0+Y29lZmZzLCB3LCBoLCBjdS0+eDAsIGN1LT55MCk7CisgICAgICAgICAgICBmYy0+dnZjZHNw
Lml0eC5hZGRfcmVzaWR1YWwoZHN0LCBjaHJvbWFfc2NhbGUgPyB0ZW1wIDogdGItPmNvZWZmcywg
dywgaCwgc3RyaWRlKTsKKworICAgICAgICAgICAgaWYgKHR1LT5qb2ludF9jYmNyX3Jlc2lkdWFs
X2ZsYWcgJiYgdGItPmNfaWR4KQorICAgICAgICAgICAgICAgIGFkZF9yZXNpZHVhbF9mb3Jfam9p
bnRfY29kaW5nX2Nocm9tYShsYywgdHUsIHRiLCBjaHJvbWFfc2NhbGUpOworICAgICAgICB9Cisg
ICAgfQorfQorCitzdGF0aWMgaW50IHJlY29uc3RydWN0KFZWQ0xvY2FsQ29udGV4dCAqbGMpCit7
CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBDb2RpbmdVbml0ICpjdSAg
ICAgID0gbGMtPmN1OworICAgIGNvbnN0IGludCBzdGFydCAgICAgPSBjdS0+dHJlZV90eXBlID09
IERVQUxfVFJFRV9DSFJPTUE7CisgICAgY29uc3QgaW50IGVuZCAgICAgICA9IGZjLT5wcy5zcHMt
PnItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyAmJiAoY3UtPnRyZWVfdHlwZSAhPSBEVUFMX1RSRUVf
TFVNQSk7CisKKyAgICBmb3IgKGludCBjaF90eXBlID0gc3RhcnQ7IGNoX3R5cGUgPD0gZW5kOyBj
aF90eXBlKyspIHsKKyAgICAgICAgVHJhbnNmb3JtVW5pdCAqdHUgPSBjdS0+dHVzLmhlYWQ7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyB0dTsgaSsrKSB7CisgICAgICAgICAgICBwcmVkaWN0X2lu
dHJhKGxjLCB0dSwgaSwgY2hfdHlwZSk7CisgICAgICAgICAgICBpdHJhbnNmb3JtKGxjLCB0dSwg
aSwgY2hfdHlwZSk7CisgICAgICAgICAgICB0dSA9IHR1LT5uZXh0OworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiAwOworfQorCitpbnQgZmZfdnZjX3JlY29uc3RydWN0KFZWQ0xvY2FsQ29u
dGV4dCAqbGMsIGNvbnN0IGludCBycywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnkpCit7Cisg
ICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQ
UyAqc3BzICAgICAgICAgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IHhfY3RiICAgICAg
ICAgICAgID0gcnggPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IHlfY3Ri
ICAgICAgICAgICAgID0gcnkgPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgQ1RVICpjdHUg
ICAgICAgICAgICAgICAgICAgID0gZmMtPnRhYi5jdHVzICsgcnM7CisgICAgQ29kaW5nVW5pdCAq
Y3UgICAgICAgICAgICAgID0gY3R1LT5jdXM7CisgICAgaW50IHJldCAgICAgICAgICAgICAgICAg
ICAgID0gMDsKKworICAgIGxjLT5udW1fcmFzWzBdID0gbGMtPm51bV9yYXNbMV0gPSAwOworICAg
IGxjLT5sbWNzLnhfdnBkdSA9IC0xOworICAgIGxjLT5sbWNzLnlfdnBkdSA9IC0xOworICAgIGZm
X3Z2Y19kZWNvZGVfbmVpZ2hib3VyKGxjLCB4X2N0YiwgeV9jdGIsIHJ4LCByeSwgcnMpOworICAg
IHdoaWxlIChjdSkgeworICAgICAgICBsYy0+Y3UgPSBjdTsKKworICAgICAgICBpZiAoY3UtPmNp
aXBfZmxhZykKKyAgICAgICAgICAgIGZmX3Z2Y19wcmVkaWN0X2NpaXAobGMpOworICAgICAgICBp
ZiAoY3UtPmNvZGVkX2ZsYWcpIHsKKyAgICAgICAgICAgIHJldCA9IHJlY29uc3RydWN0KGxjKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZF9yZWNvbnN0cnVjdGVkX2FyZWEobGMs
IExVTUEsIGN1LT54MCwgY3UtPnkwLCBjdS0+Y2Jfd2lkdGgsIGN1LT5jYl9oZWlnaHQpOworICAg
ICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShsYywgQ0hST01BLCBjdS0+eDAsIGN1LT55
MCwgY3UtPmNiX3dpZHRoLCBjdS0+Y2JfaGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICBjdSA9
IGN1LT5uZXh0OworICAgIH0KKyAgICBmZl92dmNfY3R1X2ZyZWVfY3VzKGN0dSk7CisgICAgcmV0
dXJuIHJldDsKK30KKworaW50IGZmX3Z2Y19nZXRfbWlwX3NpemVfaWQoY29uc3QgaW50IHcsIGNv
bnN0IGludCBoKQoreworICAgIGlmICh3ID09IDQgJiYgaCA9PSA0KQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoKHcgPT0gNCB8fCBoID09IDQpIHx8ICh3ID09IDggJiYgaCA9PSA4KSkKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDI7Cit9CisKK2ludCBmZl92dmNfbnNjYWxlX2Rl
cml2ZShjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBtb2RlKQoreworICAgIGlu
dCBzaWRlX3NpemUsIG5zY2FsZTsKKyAgICBhdl9hc3NlcnQwKG1vZGUgPCBJTlRSQV9MVF9DQ0xN
ICYmICEobW9kZSA+IElOVFJBX0hPUlogJiYgbW9kZSA8IElOVFJBX1ZFUlQpKTsKKyAgICBpZiAo
bW9kZSA9PSBJTlRSQV9QTEFOQVIgfHwgbW9kZSA9PSBJTlRSQV9EQyB8fAorICAgICAgICBtb2Rl
ID09IElOVFJBX0hPUlogfHwgbW9kZSA9PSBJTlRSQV9WRVJUKSB7CisgICAgICAgIG5zY2FsZSA9
IChhdl9sb2cyKHcpICsgYXZfbG9nMihoKSAtIDIpID4+IDI7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgY29uc3QgaW50IGludHJhX3ByZWRfYW5nbGUgPSBmZl92dmNfaW50cmFfcHJlZF9hbmdsZV9k
ZXJpdmUobW9kZSk7CisgICAgICAgIGNvbnN0IGludCBpbnZfYW5nbGUgICAgICAgID0gZmZfdnZj
X2ludHJhX2ludl9hbmdsZV9kZXJpdmUoaW50cmFfcHJlZF9hbmdsZSk7CisgICAgICAgIGlmICht
b2RlID49IElOVFJBX1ZFUlQpCisgICAgICAgICAgICBzaWRlX3NpemUgPSBoOworICAgICAgICBp
ZiAobW9kZSA8PSBJTlRSQV9IT1JaKQorICAgICAgICAgICAgc2lkZV9zaXplID0gdzsKKyAgICAg
ICAgbnNjYWxlID0gRkZNSU4oMiwgYXZfbG9nMihzaWRlX3NpemUpIC0gYXZfbG9nMigzICogaW52
X2FuZ2xlIC0gMikgKyA4KTsKKyAgICB9CisgICAgcmV0dXJuIG5zY2FsZTsKK30KKworaW50IGZm
X3Z2Y19uZWVkX3BkcGMoY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCB1aW50OF90IGJk
cGNtX2ZsYWcsIGNvbnN0IGludCBtb2RlLCBjb25zdCBpbnQgcmVmX2lkeCkKK3sKKyAgICBhdl9h
c3NlcnQwKG1vZGUgPCBJTlRSQV9MVF9DQ0xNKTsKKyAgICBpZiAoKHcgPj0gNCAmJiBoID49IDQp
ICYmICFyZWZfaWR4ICYmICFiZHBjbV9mbGFnKSB7CisgICAgICAgIGludCBuc2NhbGU7CisgICAg
ICAgIGlmIChtb2RlID09IElOVFJBX1BMQU5BUiB8fCBtb2RlID09IElOVFJBX0RDIHx8CisgICAg
ICAgICAgICBtb2RlID09IElOVFJBX0hPUlogfHwgbW9kZSA9PSBJTlRSQV9WRVJUKQorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChtb2RlID4gSU5UUkFfSE9SWiAmJiBtb2RlIDwg
SU5UUkFfVkVSVCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBuc2NhbGUgPSBmZl92
dmNfbnNjYWxlX2Rlcml2ZSh3LCBoLCBtb2RlKTsKKyAgICAgICAgcmV0dXJuIG5zY2FsZSA+PSAw
OworCisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgUmVjb25zdHJ1Y3Rl
ZEFyZWEqIGdldF9yZWNvbnN0cnVjdGVkX2FyZWEoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywg
Y29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgY19pZHgpCit7CisgICAgY29uc3Qg
aW50IGNoX3R5cGUgPSBjX2lkeCA+IDA7CisgICAgZm9yIChpbnQgaSA9IGxjLT5udW1fcmFzW2No
X3R5cGVdIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgY29uc3QgUmVjb25zdHJ1Y3RlZEFy
ZWEqIGEgPSAmbGMtPnJhc1tjaF90eXBlXVtpXTsKKyAgICAgICAgY29uc3QgaW50IHIgPSAoYS0+
eCArIGEtPncpOworICAgICAgICBjb25zdCBpbnQgYiA9IChhLT55ICsgYS0+aCk7CisgICAgICAg
IGlmIChhLT54IDw9IHggJiYgeCA8IHIgJiYgYS0+eSA8PSB5ICYmIHkgPCBiKQorICAgICAgICAg
ICAgcmV0dXJuIGE7CisKKyAgICAgICAgLy9pdCdzIHRvbyBmYXIgYXdheSwgbm8gbmVlZCBjaGVj
ayBpdDsKKyAgICAgICAgaWYgKHggPj0gciAmJiB5ID49IGIpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBmZl92dmNfZ2V0X3RvcF9hdmFpbGFi
bGUoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBp
bnQgdGFyZ2V0X3NpemUsIGNvbnN0IGludCBjX2lkeCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNv
bnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsK
KyAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHZz
ID0gc3BzLT52c2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBsb2cyX2N0Yl9zaXplX3YgICA9
IHNwcy0+Y3RiX2xvZzJfc2l6ZV95IC0gdnM7CisgICAgY29uc3QgaW50IGVuZF9vZl9jdGJfeCAg
ICAgID0gKChsYy0+Y3UtPngwID4+IHNwcy0+Y3RiX2xvZzJfc2l6ZV95KSArIDEpIDw8IHNwcy0+
Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5MGIgICAgICAgICAgICAgICA9IGF2X21v
ZF91aW50cDIoeSwgbG9nMl9jdGJfc2l6ZV92KTsKKyAgICBjb25zdCBpbnQgbWF4X3ggICAgICAg
ICAgICAgPSBGRk1JTihmYy0+cHMucHBzLT53aWR0aCwgZW5kX29mX2N0Yl94KSA+PiBoczsKKyAg
ICBjb25zdCBSZWNvbnN0cnVjdGVkQXJlYSAqYTsKKyAgICBpbnQgcHggPSB4OworCisgICAgaWYg
KCF5MGIpIHsKKyAgICAgICAgaWYgKCFsYy0+Y3RiX3VwX2ZsYWcpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgdGFyZ2V0X3NpemUgPSBGRk1JTih0YXJnZXRfc2l6ZSwgKGxjLT5lbmRf
b2ZfdGlsZXNfeCA+PiBocykgLSB4KTsKKyAgICAgICAgaWYgKHNwcy0+ci0+c3BzX2VudHJvcHlf
Y29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnKQorICAgICAgICAgICAgdGFyZ2V0X3NpemUgPSBGRk1J
Tih0YXJnZXRfc2l6ZSwgKGVuZF9vZl9jdGJfeCA+PiBocykgLSB4KTsKKyAgICAgICAgcmV0dXJu
IHRhcmdldF9zaXplOworICAgIH0KKworICAgIHRhcmdldF9zaXplID0gRkZNQVgoMCwgRkZNSU4o
dGFyZ2V0X3NpemUsIG1heF94IC0geCkpOworICAgIHdoaWxlICh0YXJnZXRfc2l6ZSA+IDAgJiYg
KGEgPSBnZXRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCBweCwgeSAtIDEsIGNfaWR4KSkpIHsKKyAg
ICAgICAgY29uc3QgaW50IHN6ID0gRkZNSU4odGFyZ2V0X3NpemUsIGEtPnggKyBhLT53IC0gcHgp
OworICAgICAgICBweCArPSBzejsKKyAgICAgICAgdGFyZ2V0X3NpemUgLT0gc3o7CisgICAgfQor
ICAgIHJldHVybiBweCAtIHg7Cit9CisKK2ludCBmZl92dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGNv
bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgaW50IHRh
cmdldF9zaXplLCBjb25zdCBpbnQgY19pZHgpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0
ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7CisgICAg
Y29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCB2cyA9IHNw
cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgbG9nMl9jdGJfc2l6ZV9oICAgPSAgc3Bz
LT5jdGJfbG9nMl9zaXplX3kgLSBoczsKKyAgICBjb25zdCBpbnQgeDBiICAgICAgICAgICAgICAg
PSBhdl9tb2RfdWludHAyKHgsIGxvZzJfY3RiX3NpemVfaCk7CisgICAgY29uc3QgaW50IGVuZF9v
Zl9jdGJfeSAgICAgID0gKChsYy0+Y3UtPnkwID4+IHNwcy0+Y3RiX2xvZzJfc2l6ZV95KSArIDEp
IDw8IHNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtYXhfeSAgICAgICAgICAg
ICA9IEZGTUlOKGZjLT5wcy5wcHMtPmhlaWdodCwgZW5kX29mX2N0Yl95KSA+PiB2czsKKyAgICBj
b25zdCBSZWNvbnN0cnVjdGVkQXJlYSAqYTsKKyAgICBpbnQgIHB5ID0geTsKKworICAgIGlmICgh
eDBiICYmICFsYy0+Y3RiX2xlZnRfZmxhZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0YXJn
ZXRfc2l6ZSA9IEZGTUFYKDAsIEZGTUlOKHRhcmdldF9zaXplLCBtYXhfeSAtIHkpKTsKKyAgICBp
ZiAoIXgwYikKKyAgICAgICAgcmV0dXJuIHRhcmdldF9zaXplOworCisgICAgd2hpbGUgKHRhcmdl
dF9zaXplID4gMCAmJiAoYSA9IGdldF9yZWNvbnN0cnVjdGVkX2FyZWEobGMsIHggLSAxLCBweSwg
Y19pZHgpKSkgeworICAgICAgICBjb25zdCBpbnQgc3ogPSBGRk1JTih0YXJnZXRfc2l6ZSwgYS0+
eSArIGEtPmggLSBweSk7CisgICAgICAgIHB5ICs9IHN6OworICAgICAgICB0YXJnZXRfc2l6ZSAt
PSBzejsKKyAgICB9CisgICAgcmV0dXJuIHB5IC0geTsKK30KKworc3RhdGljIGludCBsZXNzKGNv
bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisgICAgcmV0dXJuICooY29uc3QgaW50Kilh
IC0gKihjb25zdCBpbnQqKWI7Cit9CisKK2ludCBmZl92dmNfcmVmX2ZpbHRlcl9mbGFnX2Rlcml2
ZShjb25zdCBpbnQgbW9kZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1vZGVzW10gPSB7IC0x
NCwgLTEyLCAtMTAsIC02LCBJTlRSQV9QTEFOQVIsIDIsIDM0LCA2NiwgNzIsIDc2LCA3OCwgODB9
OworICAgIHJldHVybiBic2VhcmNoKCZtb2RlLCBtb2RlcywgRkZfQVJSQVlfRUxFTVMobW9kZXMp
LCBzaXplb2YoaW50KSwgbGVzcykgIT0gTlVMTDsKK30KKworaW50IGZmX3Z2Y19pbnRyYV9wcmVk
X2FuZ2xlX2Rlcml2ZShjb25zdCBpbnQgcHJlZF9tb2RlKQoreworICAgIHN0YXRpYyBjb25zdCBp
bnQgYW5nbGVzW10gPSB7CisgICAgICAgICAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDYsICAg
OCwgIDEwLCAgMTIsICAxNCwgIDE2LCAgMTgsICAyMCwgIDIzLCAgMjYsIDI5LAorICAgICAgICAg
MzIsICAzNSwgIDM5LCAgNDUsICA1MSwgIDU3LCAgNjQsICA3MywgIDg2LCAxMDIsIDEyOCwgMTcx
LCAyNTYsIDM0MSwgNTEyCisgICAgfTsKKyAgICBpbnQgc2lnbiA9IDEsIGlkeCwgaW50cmFfcHJl
ZF9hbmdsZTsKKyAgICBpZiAocHJlZF9tb2RlID4gSU5UUkFfRElBRykgeworICAgICAgICBpZHgg
PSBwcmVkX21vZGUgLSBJTlRSQV9WRVJUOworICAgIH0gZWxzZSBpZiAocHJlZF9tb2RlID4gMCkg
eworICAgICAgICBpZHggPSBJTlRSQV9IT1JaIC0gcHJlZF9tb2RlOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlkeCA9IElOVFJBX0hPUlogLSAyIC0gcHJlZF9tb2RlOworICAgIH0KKyAgICBpZiAo
aWR4IDwgMCkgeworICAgICAgICBpZHggPSAtaWR4OworICAgICAgICBzaWduID0gLTE7CisgICAg
fQorICAgIGludHJhX3ByZWRfYW5nbGUgPSBzaWduICogYW5nbGVzW2lkeF07CisgICAgcmV0dXJu
IGludHJhX3ByZWRfYW5nbGU7Cit9CisKKyNkZWZpbmUgUk9VTkQoZikgKGludCkoZiA8IDAgPyAt
KC1mICsgMC41KSA6IChmICsgMC41KSkKK2ludCBmZl92dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2
ZShjb25zdCBpbnQgaW50cmFfcHJlZF9hbmdsZSkKK3sKKyAgICBmbG9hdCBpbnZfYW5nbGU7Cisg
ICAgYXZfYXNzZXJ0MChpbnRyYV9wcmVkX2FuZ2xlKTsKKyAgICBpbnZfYW5nbGUgPSAzMiAqIDUx
Mi4wIC8gaW50cmFfcHJlZF9hbmdsZTsKKyAgICByZXR1cm4gUk9VTkQoaW52X2FuZ2xlKTsKK30K
KworLy84LjQuNS4yLjcgV2lkZSBhbmdsZSBpbnRyYSBwcmVkaWN0aW9uIG1vZGUgbWFwcGluZyBw
cm9jZXMKK2ludCBmZl92dmNfd2lkZV9hbmdsZV9tb2RlX21hcHBpbmcoY29uc3QgQ29kaW5nVW5p
dCAqY3UsCisgICAgY29uc3QgaW50IHRiX3dpZHRoLCBjb25zdCBpbnQgdGJfaGVpZ2h0LCBjb25z
dCBpbnQgY19pZHgsIGludCBwcmVkX21vZGVfaW50cmEpCit7CisgICAgaW50IG53LCBuaCwgd2hf
cmF0aW8sIG1pbiwgbWF4OworCisgICAgaWYgKGN1LT5pc3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9f
U1BMSVQgfHwgY19pZHgpIHsKKyAgICAgICAgbncgPSB0Yl93aWR0aDsKKyAgICAgICAgbmggPSB0
Yl9oZWlnaHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbncgPSBjdS0+Y2Jfd2lkdGg7CisgICAg
ICAgIG5oID0gY3UtPmNiX2hlaWdodDsKKyAgICB9CisgICAgd2hfcmF0aW8gICAgPSBGRkFCUyhm
Zl9sb2cyKG53KSAtIGZmX2xvZzIobmgpKTsKKyAgICBtYXggICAgICAgICA9ICh3aF9yYXRpbyA+
IDEpID8gKDggICsgMiAqIHdoX3JhdGlvKSA6IDg7CisgICAgbWluICAgICAgICAgPSAod2hfcmF0
aW8gPiAxKSA/ICg2MCAtIDIgKiB3aF9yYXRpbykgOiA2MDsKKworICAgIGlmIChudyA+IG5oICYm
IHByZWRfbW9kZV9pbnRyYSA+PTIgJiYgcHJlZF9tb2RlX2ludHJhIDwgbWF4KQorICAgICAgICBw
cmVkX21vZGVfaW50cmEgKz0gNjU7CisgICAgZWxzZSBpZiAobmggPiBudyAmJiBwcmVkX21vZGVf
aW50cmEgPD0gNjYgJiYgcHJlZF9tb2RlX2ludHJhID4gbWluKQorICAgICAgICBwcmVkX21vZGVf
aW50cmEgLT0gNjc7CisgICAgcmV0dXJuIHByZWRfbW9kZV9pbnRyYTsKK30KZGlmZiAtLWdpdCBh
L2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmI2NzQwMDhmOQotLS0gL2Rl
di9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5oCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBWVkMgaW50cmEgcHJlZGljdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBO
dW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVn
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpZm5kZWYgQVZD
T0RFQ19WVkNfVlZDX0lOVFJBX0gKKyNkZWZpbmUgQVZDT0RFQ19WVkNfVlZDX0lOVFJBX0gKKwor
I2luY2x1ZGUgInZ2Y19jdHUuaCIKKworLyoqCisgKiByZWNvbnN0cnVjdCBhIENUVQorICogQHBh
cmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHJzIHJhc3RlciBvcmRlciBm
b3IgdGhlIENUVS4KKyAqIEBwYXJhbSByeCByYXN0ZXIgb3JkZXIgeCBmb3IgdGhlIENUVS4KKyAq
IEBwYXJhbSByeSByYXN0ZXIgb3JkZXIgeSBmb3IgdGhlIENUVS4KKyAqIEByZXR1cm4gQVZFUlJP
UgorICovCitpbnQgZmZfdnZjX3JlY29uc3RydWN0KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0
IGludCBycywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnkpOworCisvL3V0aWxzIGZvciB2dmNf
aW50cmFfdGVtcGxhdGUKK2ludCBmZl92dmNfZ2V0X3RvcF9hdmFpbGFibGUoY29uc3QgVlZDTG9j
YWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB0YXJnZXRfc2l6ZSwgaW50IGNfaWR4
KTsKK2ludCBmZl92dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAq
bGMsIGludCB4MCwgaW50IHkwLCBpbnQgdGFyZ2V0X3NpemUsIGludCBjX2lkeCk7CitpbnQgZmZf
dnZjX2dldF9taXBfc2l6ZV9pZChpbnQgdywgaW50IGgpOworaW50IGZmX3Z2Y19uZWVkX3BkcGMo
aW50IHcsIGludCBoLCB1aW50OF90IGJkcGNtX2ZsYWcsIGludCBtb2RlLCBpbnQgcmVmX2lkeCk7
CitpbnQgZmZfdnZjX25zY2FsZV9kZXJpdmUoaW50IHcsIGludCBoLCBpbnQgbW9kZSk7CitpbnQg
ZmZfdnZjX3JlZl9maWx0ZXJfZmxhZ19kZXJpdmUoaW50IG1vZGUpOworaW50IGZmX3Z2Y19pbnRy
YV9wcmVkX2FuZ2xlX2Rlcml2ZShpbnQgcHJlZF9tb2RlKTsKK2ludCBmZl92dmNfaW50cmFfaW52
X2FuZ2xlX2Rlcml2ZShpbnQgcHJlZF9tb2RlKTsKK2ludCBmZl92dmNfd2lkZV9hbmdsZV9tb2Rl
X21hcHBpbmcoY29uc3QgQ29kaW5nVW5pdCAqY3UsCisgICAgaW50IHRiX3dpZHRoLCBpbnQgdGJf
aGVpZ2h0LCBpbnQgY19pZHgsIGludCBwcmVkX21vZGVfaW50cmEpOworCisjZW5kaWYgLy8gQVZD
T0RFQ19WVkNfVlZDX0lOVFJBX0gKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRy
YV90ZW1wbGF0ZS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhX3RlbXBsYXRlLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOWZiNDc1NDlkNQotLS0gL2Rldi9udWxs
CisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYV90ZW1wbGF0ZS5jCkBAIC0wLDAgKzEsMTAx
NSBAQAorLyoKKyAqIFZWQyBpbnRyYSBwcmVkaWN0aW9uIERTUAorICoKKyAqIENvcHlyaWdodCAo
QykgMjAyMS0yMDIzIE51b21pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor
ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov
CisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2JpdF9kZXB0aF90ZW1wbGF0ZS5jIgorCisjaW5jbHVk
ZSAidnZjX2ludHJhLmgiCisKKyNkZWZpbmUgUE9TKHgsIHkpIHNyY1soeCkgKyBzdHJpZGUgKiAo
eSldCisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX2xpbmVhcl9wcmVk
KShWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwKKyAgICBj
b25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHBpeGVsKiBwZHN5LCBjb25zdCBpbnQgKmEs
IGNvbnN0IGludCAqYiwgY29uc3QgaW50ICprKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0g
ZmMtPnBzLnNwczsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFZWQ19NQVhfU0FNUExFX0FSUkFZ
UyAtIDE7IGkrKykgeworICAgICAgICBjb25zdCBpbnQgY19pZHggPSBpICsgMTsKKyAgICAgICAg
Y29uc3QgaW50IHggPSB4MCA+PiBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IGlu
dCB5ID0geTAgPj4gc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBwdHJkaWZmX3Qg
c3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gLyBzaXplb2YocGl4ZWwpOworICAg
ICAgICBwaXhlbCAqc3JjID0gKHBpeGVsKilmYy0+ZnJhbWUtPmRhdGFbY19pZHhdICsgeCArIHkg
KiBzdHJpZGU7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgICAgIGNvbnN0
IGludCBkc3kgPSBwZHN5W3kgKiB3ICsgeF07CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHBy
ZWQgPSAoKGRzeSAqIGFbaV0pID4+IGtbaV0pICsgYltpXTsKKyAgICAgICAgICAgICAgICBQT1Mo
eCwgeSkgPSBDTElQKHByZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CisjZGVmaW5lIE1BWF9QSUNLX1BPUyA0CisjZGVmaW5lIFRPUCAgMAorI2RlZmluZSBMRUZUIDEK
Kworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fZ2V0X3BhcmFtc19kZWZh
dWx0KShpbnQgKmEsIGludCAqYiwgaW50ICprKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MjsgaSsrKSB7CisgICAgICAgIGFbaV0gPSBrW2ldID0gMDsKKyAgICAgICAgYltpXSA9IDEgPDwg
KEJJVF9ERVBUSCAtIDEpOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50
IEZVTkMoY2NsbV9nZXRfc2VsZWN0X3BvcykoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAg
ICBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29u
c3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBhdmFpbF9sLAorICAgIGludCBjbnRbMl0sIGludCBw
b3NbMl1bTUFYX1BJQ0tfUE9TXSkKK3sKKyAgICBjb25zdCBlbnVtIEludHJhUHJlZE1vZGUgbW9k
ZSA9IGxjLT5jdS0+aW50cmFfcHJlZF9tb2RlX2M7CisgICAgY29uc3QgaW50IG51bV9pczQgPSAh
YXZhaWxfdCB8fCAhYXZhaWxfbCB8fCBtb2RlICE9IElOVFJBX0xUX0NDTE07CisgICAgaW50IG51
bV9zYW1wWzJdOworCisgICAgaWYgKG1vZGUgPT0gSU5UUkFfTFRfQ0NMTSkgeworICAgICAgICBu
dW1fc2FtcFtUT1BdICA9IGF2YWlsX3QgPyB3IDogMDsKKyAgICAgICAgbnVtX3NhbXBbTEVGVF0g
PSBhdmFpbF9sID8gaCA6IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbnVtX3NhbXBbVE9QXSA9
IChhdmFpbF90ICYmIG1vZGUgPT0gSU5UUkFfVF9DQ0xNKSA/IGZmX3Z2Y19nZXRfdG9wX2F2YWls
YWJsZShsYywgIHgsIHksIHcgKyBGRk1JTih3LCBoKSwgMSkgOiAwOworICAgICAgICBudW1fc2Ft
cFtMRUZUXSA9IChhdmFpbF9sICYmIG1vZGUgPT0gSU5UUkFfTF9DQ0xNKSA/IGZmX3Z2Y19nZXRf
bGVmdF9hdmFpbGFibGUobGMsIHgsIHksIGggKyBGRk1JTih3LCBoKSwgMSkgOiAwOworICAgIH0K
KyAgICBpZiAoIW51bV9zYW1wW1RPUF0gJiYgIW51bV9zYW1wW0xFRlRdKSB7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICBmb3IgKGludCBpID0gVE9QOyBpIDw9IExFRlQ7IGkrKykgewor
ICAgICAgICBjb25zdCBpbnQgc3RhcnQgPSBudW1fc2FtcFtpXSA+PiAoMiArIG51bV9pczQpOwor
ICAgICAgICBjb25zdCBpbnQgc3RlcCAgPSBGRk1BWCgxLCBudW1fc2FtcFtpXSA+PiAoMSArIG51
bV9pczQpKSA7CisgICAgICAgIGNudFtpXSA9IEZGTUlOKG51bV9zYW1wW2ldLCAoMSArIG51bV9p
czQpIDw8IDEpOworICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNudFtpXTsgYysrKQorICAg
ICAgICAgICAgcG9zW2ldW2NdID0gc3RhcnQgKyBjICogc3RlcDsKKyAgICB9CisgICAgcmV0dXJu
IDE7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX3NlbGVjdF9s
dW1hXzQ0NCkoY29uc3QgcGl4ZWwgKnNyYywgY29uc3QgaW50IHN0ZXAsCisgICAgY29uc3QgaW50
IGNudCwgY29uc3QgaW50IHBvc1tNQVhfUElDS19QT1NdLCAgcGl4ZWwgKnNlbF9sdW1hKQorewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY250OyBpKyspCisgICAgICAgIHNlbF9sdW1hW2ldID0g
c3JjW3Bvc1tpXSAqIHN0ZXBdOworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZV
TkMoY2NsbV9zZWxlY3RfbHVtYSkoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywKKyAgICBjb25z
dCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBhdmFp
bF9sLCBjb25zdCBpbnQgY250WzJdLCBjb25zdCBpbnQgcG9zWzJdW01BWF9QSUNLX1BPU10sCisg
ICAgcGl4ZWwgKnNlbF9sdW1hKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNw
czsKKworICAgIGNvbnN0IGludCBiX2N0dV9ib3VuZGFyeSA9ICFhdl9tb2RfdWludHAyKHkwLCBz
cHMtPmN0Yl9sb2cyX3NpemVfeSk7CisgICAgY29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbMV07
CisgICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbMV07CisgICAgY29uc3QgcHRyZGlmZl90
IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbMF0gLyBzaXplb2YocGl4ZWwpOworCisgICAg
aWYgKCFocyAmJiAhdnMpIHsKKyAgICAgICAgY29uc3QgcGl4ZWwqIHNyYyA9IChwaXhlbCopZmMt
PmZyYW1lLT5kYXRhWzBdICsgeDAgKyB5MCAqIHN0cmlkZTsKKyAgICAgICAgRlVOQyhjY2xtX3Nl
bGVjdF9sdW1hXzQ0NCkoc3JjIC0gYXZhaWxfdCAqIHN0cmlkZSwgMSwgY250W1RPUF0sIHBvc1tU
T1BdLCBzZWxfbHVtYSk7CisgICAgICAgIEZVTkMoY2NsbV9zZWxlY3RfbHVtYV80NDQpKHNyYyAt
IGF2YWlsX2wsIHN0cmlkZSwgY250W0xFRlRdLCBwb3NbTEVGVF0sIHNlbF9sdW1hICsgY250W1RP
UF0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHRvcAorICAgICAgICBpZiAodnMgJiYgIWJf
Y3R1X2JvdW5kYXJ5KSB7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqc291cmNlID0gKHBpeGVs
ICopZmMtPmZyYW1lLT5kYXRhWzBdICsgeDAgKyAoeTAgLSAyKSAqIHN0cmlkZTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY250W1RPUF07IGkrKykgeworICAgICAgICAgICAgICAg
IGNvbnN0IGludCB4ID0gcG9zW1RPUF1baV0gPDwgaHM7CisgICAgICAgICAgICAgICAgY29uc3Qg
cGl4ZWwgKnNyYyA9IHNvdXJjZSArIHg7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGhhc19s
ZWZ0ID0geCB8fCBhdmFpbF9sOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIGwgPSBoYXNf
bGVmdCA/IFBPUygtMSwgMCkgOiBQT1MoMCwgMCk7CisgICAgICAgICAgICAgICAgaWYgKHNwcy0+
ci0+c3BzX2Nocm9tYV92ZXJ0aWNhbF9jb2xsb2NhdGVkX2ZsYWcpIHsKKyAgICAgICAgICAgICAg
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
ICAgICAgICAgICBpZiAoc3BzLT5yLT5zcHNfY2hyb21hX3ZlcnRpY2FsX2NvbGxvY2F0ZWRfZmxh
ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGhhc190b3AgPSB5IHx8IGF2
YWlsX3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCB0ID0gaGFzX3RvcCA/
IFBPUygwLCAtMSkgOiBQT1MoMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVkID0g
KCpsICsgdCArIDQgKiBQT1MoMCwgMCkgKyBQT1MoMSwgMCkgKyBQT1MoMCwgMSkgKyA0KSA+PiAz
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHJlZCA9ICgqbCArICoobCArIHN0cmlkZSkgKyAyICogUE9TKDAsIDApICsgMiAqIFBPUygwLCAx
KSArIFBPUygxLCAwKSArIFBPUygxLCAxKSArIDQpID4+IDM7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VsX2x1bWFbaSArIGNudFtU
T1BdXSA9IHByZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp
YyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX3NlbGVjdF9jaHJvbWEpKGNvbnN0IFZW
Q0ZyYW1lQ29udGV4dCAqZmMsCisgICAgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBp
bnQgY250WzJdLCBjb25zdCBpbnQgcG9zWzJdW01BWF9QSUNLX1BPU10sCisgICAgcGl4ZWwgc2Vs
W11bTUFYX1BJQ0tfUE9TICogMl0pCit7CisgICAgZm9yIChpbnQgY19pZHggPSAxOyBjX2lkeCA8
IFZWQ19NQVhfU0FNUExFX0FSUkFZUzsgY19pZHgrKykgeworICAgICAgICBjb25zdCBwdHJkaWZm
X3Qgc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gLyBzaXplb2YocGl4ZWwpOwor
CisgICAgICAgIC8vdG9wCisgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgPSAocGl4ZWwqKWZjLT5m
cmFtZS0+ZGF0YVtjX2lkeF0gKyB4ICsgKHkgLSAxKSogc3RyaWRlOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNudFtUT1BdOyBpKyspIHsKKyAgICAgICAgICAgIHNlbFtjX2lkeF1baV0g
PSBzcmNbcG9zW1RPUF1baV1dOworICAgICAgICB9CisKKyAgICAgICAgLy9sZWZ0CisgICAgICAg
IHNyYyA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRhW2NfaWR4XSArIHggLSAxICsgeSAqIHN0cmlk
ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbnRbTEVGVF07IGkrKykgeworICAgICAg
ICAgICAgc2VsW2NfaWR4XVtpICsgY250W1RPUF1dID0gc3JjW3Bvc1tMRUZUXVtpXSAqIHN0cmlk
ZV07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBG
VU5DKGNjbG1fc2VsZWN0X3NhbXBsZXMpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAg
Y29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29u
c3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBhdmFpbF9sLAorICAgIHBpeGVsIHNlbFtdW01BWF9Q
SUNLX1BPUyAqIDJdKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7
CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IHgg
ID0geDAgPj4gc3BzLT5oc2hpZnRbMV07CisgICAgY29uc3QgaW50IHkgID0geTAgPj4gc3BzLT52
c2hpZnRbMV07CisgICAgaW50IGNudFsyXSwgcG9zWzJdW01BWF9QSUNLX1BPU107CisKKyAgICBp
ZiAoIUZVTkMoY2NsbV9nZXRfc2VsZWN0X3BvcykobGMsIHgsIHksIHcsIGgsIGF2YWlsX3QsIGF2
YWlsX2wsIGNudCwgcG9zKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGVU5DKGNjbG1fc2Vs
ZWN0X2x1bWEpKGZjLCB4MCwgeTAsIGF2YWlsX3QsIGF2YWlsX2wsIGNudCwgcG9zLCBzZWxbTFVN
QV0pOworICAgIEZVTkMoY2NsbV9zZWxlY3RfY2hyb21hKShmYywgeCwgeSwgY250LCBwb3MsIHNl
bCk7CisKKyAgICBpZiAoY250W1RPUF0gKyBjbnRbTEVGVF0gPT0gMikgeworICAgICAgICBmb3Ig
KGludCBjX2lkeCA9IDA7IGNfaWR4IDwgVlZDX01BWF9TQU1QTEVfQVJSQVlTOyBjX2lkeCsrKSB7
CisgICAgICAgICAgICBzZWxbY19pZHhdWzNdID0gc2VsW2NfaWR4XVswXTsKKyAgICAgICAgICAg
IHNlbFtjX2lkeF1bMl0gPSBzZWxbY19pZHhdWzFdOworICAgICAgICAgICAgc2VsW2NfaWR4XVsw
XSA9IHNlbFtjX2lkeF1bMV07CisgICAgICAgICAgICBzZWxbY19pZHhdWzFdID0gc2VsW2NfaWR4
XVszXTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGF2X2Fs
d2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fZ2V0X21pbl9tYXgpKAorICAgIGNvbnN0IHBpeGVs
IHNlbFtdW01BWF9QSUNLX1BPUyAqIDJdLCBpbnQgKm1pbiwgaW50ICptYXgpCit7CisgICAgaW50
IG1pbl9ncnBfaWR4W10gPSB7IDAsIDIgfTsKKyAgICBpbnQgbWF4X2dycF9pZHhbXSA9IHsgMSwg
MyB9OworCisgICAgaWYgKHNlbFtMVU1BXVttaW5fZ3JwX2lkeFswXV0gPiBzZWxbTFVNQV1bbWlu
X2dycF9pZHhbMV1dKQorICAgICAgICBGRlNXQVAoaW50LCBtaW5fZ3JwX2lkeFswXSwgbWluX2dy
cF9pZHhbMV0pOworICAgIGlmIChzZWxbTFVNQV1bbWF4X2dycF9pZHhbMF1dID4gc2VsW0xVTUFd
W21heF9ncnBfaWR4WzFdXSkKKyAgICAgICAgRkZTV0FQKGludCwgbWF4X2dycF9pZHhbMF0sIG1h
eF9ncnBfaWR4WzFdKTsKKyAgICBpZiAoc2VsW0xVTUFdW21pbl9ncnBfaWR4WzBdXSA+IHNlbFtM
VU1BXVttYXhfZ3JwX2lkeFsxXV0pIHsKKyAgICAgICAgRkZTV0FQKGludCwgbWluX2dycF9pZHhb
MF0sIG1heF9ncnBfaWR4WzBdKTsKKyAgICAgICAgRkZTV0FQKGludCwgbWluX2dycF9pZHhbMV0s
IG1heF9ncnBfaWR4WzFdKTsKKyAgICB9CisgICAgaWYgKHNlbFtMVU1BXVttaW5fZ3JwX2lkeFsx
XV0gPiBzZWxbTFVNQV1bbWF4X2dycF9pZHhbMF1dKQorICAgICAgICBGRlNXQVAoaW50LCBtaW5f
Z3JwX2lkeFsxXSwgbWF4X2dycF9pZHhbMF0pOworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19p
ZHggPCBWVkNfTUFYX1NBTVBMRV9BUlJBWVM7IGNfaWR4KyspIHsKKyAgICAgICAgbWF4W2NfaWR4
XSA9IChzZWxbY19pZHhdW21heF9ncnBfaWR4WzBdXSArIHNlbFtjX2lkeF1bbWF4X2dycF9pZHhb
MV1dICsgMSkgPj4gMTsKKyAgICAgICAgbWluW2NfaWR4XSA9IChzZWxbY19pZHhdW21pbl9ncnBf
aWR4WzBdXSArIHNlbFtjX2lkeF1bbWluX2dycF9pZHhbMV1dICsgMSkgPj4gMTsKKyAgICB9Cit9
CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX2dldF9wYXJhbXMpKGNv
bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAs
IGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBh
dmFpbF9sLAorICAgIGludCAqYSwgaW50ICpiLCBpbnQgKmspCit7CisgICAgcGl4ZWwgc2VsW1ZW
Q19NQVhfU0FNUExFX0FSUkFZU11bTUFYX1BJQ0tfUE9TICogMl07CisgICAgaW50IG1heFtWVkNf
TUFYX1NBTVBMRV9BUlJBWVNdLCBtaW5bVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAgICBpbnQg
ZGlmZjsKKworICAgIGlmICghRlVOQyhjY2xtX3NlbGVjdF9zYW1wbGVzKShsYywgeDAsIHkwLCB3
LCBoLCBhdmFpbF90LCBhdmFpbF9sLCBzZWwpKSB7CisgICAgICAgIEZVTkMoY2NsbV9nZXRfcGFy
YW1zX2RlZmF1bHQpKGEsIGIsIGspOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlVO
QyhjY2xtX2dldF9taW5fbWF4KShzZWwsIG1pbiwgbWF4KTsKKworICAgIGRpZmYgPSBtYXhbTFVN
QV0gLSBtaW5bTFVNQV07CisgICAgaWYgKGRpZmYgPT0gMCkgeworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICAgICAgYVtpXSA9IGtbaV0gPSAwOworICAgICAg
ICAgICAgYltpXSA9IG1pbltpICsgMV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBjb25zdCBzdGF0
aWMgaW50IGRpdl9zaWdfdGFibGVbXSA9IHswLCA3LCA2LCA1LCA1LCA0LCA0LCAzLCAzLCAyLCAy
LCAxLCAxLCAxLCAxLCAwfTsKKyAgICAgICAgY29uc3QgaW50IGRpZmZjID0gbWF4W2kgKyAxXSAt
IG1pbltpICsgMV07CisgICAgICAgIGludCAgeCA9IGF2X2xvZzIoZGlmZik7CisgICAgICAgIGlu
dCAgeSwgdiwgc2lnbiwgYWRkOworICAgICAgICBjb25zdCBpbnQgbm9ybV9kaWZmID0gKChkaWZm
IDw8IDQpID4+IHgpICYgMTU7CisgICAgICAgIHggKz0gKG5vcm1fZGlmZikgPyAxIDogMDsKKyAg
ICAgICAgeSA9IGFicyhkaWZmYykgPiAwID8gYXZfbG9nMihhYnMoZGlmZmMpKSArIDEgOiAwOwor
ICAgICAgICB2ID0gZGl2X3NpZ190YWJsZVtub3JtX2RpZmZdIHwgODsKKyAgICAgICAgYWRkID0g
KDEgPDwgeSA+PiAxKTsKKyAgICAgICAgYVtpXSA9IChkaWZmYyAqIHYgKyBhZGQpID4+IHk7Cisg
ICAgICAgIGtbaV0gPSBGRk1BWCgxLCAzICsgeCAteSk7CisgICAgICAgIHNpZ24gPSBhW2ldIDwg
MCA/IC0xIDogKGFbaV0gPiAwKTsKKyAgICAgICAgYVtpXSA9ICgoMyArIHggLSB5KSA8IDEpID8g
IHNpZ24gKiAxNSA6IGFbaV07CisgICAgICAgIGJbaV0gPSBtaW5baSArIDFdIC0gKChhW2ldICog
bWluWzBdKSA+PiBrW2ldKTsKKyAgICB9CisKK30KKworI3VuZGVmIFRPUAorI3VuZGVmIExFRlQK
Kworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fZ2V0X2x1bWFfcmVjX3Bp
eGVscykoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywKKyAgICBjb25zdCBpbnQgeDAsIGNvbnN0
IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZhaWxfdCwgY29u
c3QgaW50IGF2YWlsX2wsCisgICAgcGl4ZWwgKnBkc3kpCit7CisgICAgY29uc3QgaW50IGhzICAg
ICAgICAgICAgPSBmYy0+cHMuc3BzLT5oc2hpZnRbMV07CisgICAgY29uc3QgaW50IHZzICAgICAg
ICAgICAgPSBmYy0+cHMuc3BzLT52c2hpZnRbMV07CisgICAgY29uc3QgcHRyZGlmZl90IHN0cmlk
ZSAgPSBmYy0+ZnJhbWUtPmxpbmVzaXplWzBdIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBjb25zdCBw
aXhlbCAqc291cmNlICAgICA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRhWzBdICsgeDAgKyB5MCAq
IHN0cmlkZTsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAgICAgICA9IHNvdXJjZSAtIGF2YWlsX2w7
CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgICAgICAgPSBzb3VyY2UgLSBhdmFpbF90ICogc3RyaWRl
OworCisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGlmICghaHMgJiYg
IXZzKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaDsgaSsrKQorICAgICAgICAgICAg
bWVtY3B5KHBkc3kgKyBpICogdywgc291cmNlICsgaSAqIHN0cmlkZSwgdyAqIHNpemVvZihwaXhl
bCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaDsg
aSsrKSB7CisgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgID0gc291cmNlOworICAgICAgICBjb25z
dCBwaXhlbCAqbCA9IGxlZnQ7CisgICAgICAgIGNvbnN0IHBpeGVsICp0ID0gdG9wOworICAgICAg
ICBpZiAoIXZzKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHc7IGorKykgewor
ICAgICAgICAgICAgICAgIHBpeGVsIHByZWQgID0gKCpsICsgMiAqIFBPUygwLCAwKSArIFBPUygx
LCAwKSArIDIpID4+IDI7CisgICAgICAgICAgICAgICAgcGRzeVtpICogdyArIGpdID0gcHJlZDsK
KyAgICAgICAgICAgICAgICBzcmMgKz0gMjsKKyAgICAgICAgICAgICAgICBsID0gc3JjIC0gMTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNwcy0+
ci0+c3BzX2Nocm9tYV92ZXJ0aWNhbF9jb2xsb2NhdGVkX2ZsYWcpICB7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCB3OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4
ZWwgcHJlZCAgPSAoKmwgKyAqdCArIDQgKiBQT1MoMCwgMCkgKyBQT1MoMSwgMCkgKyBQT1MoMCwg
MSkgKyA0KSA+PiAzOworICAgICAgICAgICAgICAgICAgICBwZHN5W2kgKiB3ICsgal0gPSBwcmVk
OworICAgICAgICAgICAgICAgICAgICBzcmMgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgdCAr
PSAyOworICAgICAgICAgICAgICAgICAgICBsID0gc3JjIC0gMTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgdzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsIHByZWQgID0gKCpsICsgKihs
ICsgc3RyaWRlKSArIDIgKiBQT1MoMCwgMCkgKyAyICogUE9TKDAsIDEpICsgUE9TKDEsIDApICsg
UE9TKDEsIDEpICsgNCkgPj4gMzsKKworICAgICAgICAgICAgICAgICAgICBwZHN5W2kgKiB3ICsg
al0gPSBwcmVkOworICAgICAgICAgICAgICAgICAgICBzcmMgKz0gMjsKKyAgICAgICAgICAgICAg
ICAgICAgbCA9IHNyYyAtIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHNvdXJjZSArPSAoc3RyaWRlIDw8IHZzKTsKKyAgICAgICAgbGVmdCAg
ICs9IChzdHJpZGUgPDwgdnMpOworICAgICAgICB0b3AgICAgPSBzb3VyY2UgLSBzdHJpZGU7Cisg
ICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9wcmVkX2Rl
ZmF1bHQpKFZWQ0ZyYW1lQ29udGV4dCAqZmMsCisgICAgY29uc3QgaW50IHgsIGNvbnN0IGludCB5
LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBpbnQg
YXZhaWxfbCkKK3sKKyAgICBmb3IgKGludCBjX2lkeCA9IDE7IGNfaWR4IDwgVlZDX01BWF9TQU1Q
TEVfQVJSQVlTOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgPSBm
Yy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSAvIHNpemVvZihwaXhlbCk7CisgICAgICAgIHBpeGVs
ICpkc3QgPSAocGl4ZWwqKWZjLT5mcmFtZS0+ZGF0YVtjX2lkeF0gKyB4ICsgeSAqIHN0cmlkZTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgdzsgaisrKSB7CisgICAgICAgICAgICAgICAgZHN0W2pdID0gMSA8PCAo
QklUX0RFUFRIIC0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkc3QgKz0gc3RyaWRl
OworICAgICAgICB9CisgICAgfQorfQorCisvLzguNC41LjIuMTQgU3BlY2lmaWNhdGlvbiBvZiBJ
TlRSQV9MVF9DQ0xNLCBJTlRSQV9MX0NDTE0gYW5kIElOVFJBX1RfQ0NMTSBpbnRyYSBwcmVkaWN0
aW9uIG1vZGUKK3N0YXRpYyB2b2lkIEZVTkMoaW50cmFfY2NsbV9wcmVkKShjb25zdCBWVkNMb2Nh
bENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwKKyAgICBjb25zdCBpbnQg
d2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAg
PSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0
IGludCBhdmFpbF90ID0gZmZfdnZjX2dldF90b3BfYXZhaWxhYmxlKGxjLCB4MCwgeTAsIDEsIDAp
OworICAgIGNvbnN0IGludCBhdmFpbF9sID0gZmZfdnZjX2dldF9sZWZ0X2F2YWlsYWJsZShsYywg
eDAsIHkwLCAxLCAwKTsKKyAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFsxXTsKKyAgICBj
b25zdCBpbnQgdnMgPSBzcHMtPnZzaGlmdFsxXTsKKyAgICBjb25zdCBpbnQgeCAgPSB4MCA+PiBo
czsKKyAgICBjb25zdCBpbnQgeSAgPSB5MCA+PiB2czsKKyAgICBjb25zdCBpbnQgdyAgPSB3aWR0
aCA+PiBoczsKKyAgICBjb25zdCBpbnQgaCAgPSBoZWlnaHQgPj4gdnM7CisgICAgaW50IGFbMl0s
IGJbMl0sIGtbMl07CisKKyAgICBwaXhlbCBkc3lbTUFYX1RCX1NJWkUgKiBNQVhfVEJfU0laRV07
CisgICAgaWYgKCFhdmFpbF90ICYmICFhdmFpbF9sKSB7CisgICAgICAgIEZVTkMoY2NsbV9wcmVk
X2RlZmF1bHQpKGZjLCB4LCB5LCB3LCBoLCBhdmFpbF90LCBhdmFpbF9sKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBGVU5DKGNjbG1fZ2V0X2x1bWFfcmVjX3BpeGVscykoZmMsIHgwLCB5
MCwgdywgaCwgYXZhaWxfdCwgYXZhaWxfbCwgZHN5KTsKKyAgICBGVU5DKGNjbG1fZ2V0X3BhcmFt
cykgKGxjLCB4MCwgeTAsIHcsIGgsIGF2YWlsX3QsIGF2YWlsX2wsIGEsIGIsIGspOworICAgIEZV
TkMoY2NsbV9saW5lYXJfcHJlZCkoZmMsIHgwLCB5MCwgdywgaCwgZHN5LCBhLCBiLCBrKTsKK30K
Kworc3RhdGljIGludCBGVU5DKGxtY3Nfc3VtX3NhbXBsZXMpKGNvbnN0IHBpeGVsICpzdGFydCwg
cHRyZGlmZl90IHN0cmlkZSwgY29uc3QgaW50IGF2YWlsLCBjb25zdCBpbnQgdGFyZ2V0X3NpemUp
Cit7CisgICAgY29uc3QgaW50IHNpemUgPSBGRk1JTihhdmFpbCwgdGFyZ2V0X3NpemUpOworICAg
IGludCBzdW0gPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
ICAgIHN1bSArPSAqc3RhcnQ7CisgICAgICAgIHN0YXJ0ICs9IHN0cmlkZTsKKyAgICB9CisgICAg
c3VtICs9ICooc3RhcnQgLSBzdHJpZGUpICogKHRhcmdldF9zaXplIC0gc2l6ZSk7CisgICAgcmV0
dXJuIHN1bTsKK30KKworLy8gOC43LjUuMyBQaWN0dXJlIHJlY29uc3RydWN0aW9uIHdpdGggbHVt
YSBkZXBlbmRlbnQgY2hyb21hIHJlc2lkdWFsIHNjYWxpbmcgcHJvY2VzcyBmb3IgY2hyb21hIHNh
bXBsZXMKK3N0YXRpYyBpbnQgRlVOQyhsbWNzX2Rlcml2ZV9jaHJvbWFfc2NhbGUpKFZWQ0xvY2Fs
Q29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKQoreworICAgIFZWQ0ZyYW1l
Q29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDTE1DUyAqbG1jcyA9ICZmYy0+cHMu
bG1jczsKKyAgICBjb25zdCBpbnQgc2l6ZV95ICAgID0gRkZNSU4oZmMtPnBzLnNwcy0+Y3RiX3Np
emVfeSwgNjQpOworCisgICAgY29uc3QgaW50IHggPSB4MCAmIH4oc2l6ZV95IC0gMSk7CisgICAg
Y29uc3QgaW50IHkgPSB5MCAmIH4oc2l6ZV95IC0gMSk7CisgICAgaWYgKGxjLT5sbWNzLnhfdnBk
dSAhPSB4IHx8IGxjLT5sbWNzLnlfdnBkdSAhPSB5KSB7CisgICAgICAgIGludCBjbnQgPSAwLCBs
dW1hID0gMCwgaTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnNyYyA9IChjb25zdCBwaXhlbCAqKShm
Yy0+ZnJhbWUtPmRhdGFbTFVNQV0gKyB5ICogZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSArICh4
IDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KSk7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBz
dHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICAg
ICAgY29uc3QgaW50IGF2YWlsX3QgPSBmZl92dmNfZ2V0X3RvcF9hdmFpbGFibGUgKGxjLCB4LCB5
LCAxLCAwKTsKKyAgICAgICAgY29uc3QgaW50IGF2YWlsX2wgPSBmZl92dmNfZ2V0X2xlZnRfYXZh
aWxhYmxlKGxjLCB4LCB5LCAxLCAwKTsKKyAgICAgICAgaWYgKGF2YWlsX2wpIHsKKyAgICAgICAg
ICAgIGx1bWEgKz0gRlVOQyhsbWNzX3N1bV9zYW1wbGVzKShzcmMgLSAxLCBzdHJpZGUsIGZjLT5w
cy5wcHMtPmhlaWdodCAtIHksIHNpemVfeSk7CisgICAgICAgICAgICBjbnQgPSBzaXplX3k7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGF2YWlsX3QpIHsKKyAgICAgICAgICAgIGx1bWEgKz0gRlVO
QyhsbWNzX3N1bV9zYW1wbGVzKShzcmMgLSBzdHJpZGUsIDEsIGZjLT5wcy5wcHMtPndpZHRoIC0g
eCwgc2l6ZV95KTsKKyAgICAgICAgICAgIGNudCArPSBzaXplX3k7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNudCkKKyAgICAgICAgICAgIGx1bWEgPSAobHVtYSArIChjbnQgPj4gMSkpID4+IGF2
X2xvZzIoY250KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbHVtYSA9IDEgPDwgKEJJVF9E
RVBUSCAtIDEpOworCisgICAgICAgIGZvciAoaSA9IGxtY3MtPm1pbl9iaW5faWR4OyBpIDw9IGxt
Y3MtPm1heF9iaW5faWR4OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChsdW1hIDwgbG1jcy0+cGl2
b3RbaSArIDFdKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGkg
PSBGRk1JTihpLCBMTUNTX01BWF9CSU5fU0laRSAtIDEpOworCisgICAgICAgIGxjLT5sbWNzLmNo
cm9tYV9zY2FsZSA9IGxtY3MtPmNocm9tYV9zY2FsZV9jb2VmZltpXTsKKyAgICAgICAgbGMtPmxt
Y3MueF92cGR1ID0geDsKKyAgICAgICAgbGMtPmxtY3MueV92cGR1ID0geTsKKyAgICB9CisgICAg
cmV0dXJuIGxjLT5sbWNzLmNocm9tYV9zY2FsZTsKK30KKworLy8gOC43LjUuMyBQaWN0dXJlIHJl
Y29uc3RydWN0aW9uIHdpdGggbHVtYSBkZXBlbmRlbnQgY2hyb21hIHJlc2lkdWFsIHNjYWxpbmcg
cHJvY2VzcyBmb3IgY2hyb21hIHNhbXBsZXMKK3N0YXRpYyB2b2lkIEZVTkMobG1jc19zY2FsZV9j
aHJvbWEpKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCAqZHN0LCBjb25zdCBpbnQgKmNvZWZmLAor
ICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IHgwX2N1LCBj
b25zdCBpbnQgeTBfY3UpCit7CisgICAgY29uc3QgaW50IGNocm9tYV9zY2FsZSA9IEZVTkMobG1j
c19kZXJpdmVfY2hyb21hX3NjYWxlKShsYywgeDBfY3UsIHkwX2N1KTsKKworICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgYyA9IGF2X2NsaXBfaW50cDIoKmNv
ZWZmLCBCSVRfREVQVEgpOworCisgICAgICAgICAgICBpZiAoYyA+IDApCisgICAgICAgICAgICAg
ICAgKmRzdCA9IChjICogY2hyb21hX3NjYWxlICsgKDEgPDwgMTApKSA+PiAxMTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqZHN0ID0gLSgoLWMgKiBjaHJvbWFfc2NhbGUgKyAo
MSA8PCAxMCkpID4+IDExKTsKKyAgICAgICAgICAgIGNvZWZmKys7CisgICAgICAgICAgICBkc3Qr
KzsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBG
VU5DKHJlZl9maWx0ZXIpKGNvbnN0IHBpeGVsICpsZWZ0LCBjb25zdCBwaXhlbCAqdG9wLAorICAg
IHBpeGVsICpmaWx0ZXJlZF9sZWZ0LCBwaXhlbCAqZmlsdGVyZWRfdG9wLCBjb25zdCBpbnQgbGVm
dF9zaXplLCBjb25zdCBpbnQgdG9wX3NpemUsCisgICAgY29uc3QgaW50IHVuZmlsdGVyX2xhc3Rf
b25lKQoreworICAgIGZpbHRlcmVkX2xlZnRbLTFdID0gZmlsdGVyZWRfdG9wWy0xXSA9IChsZWZ0
WzBdICsgIDIgKiBsZWZ0Wy0xXSArIHRvcFswXSArIDIgKSA+PiAyOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVmdF9zaXplIC0gdW5maWx0ZXJfbGFzdF9vbmU7IGkrKykgeworICAgICAgICBm
aWx0ZXJlZF9sZWZ0W2ldID0gKGxlZnRbaS0gMV0gKyAyICogbGVmdFtpXSArIGxlZnRbaSArIDFd
ICsgMikgPj4gMjsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3Bfc2l6ZSAtIHVu
ZmlsdGVyX2xhc3Rfb25lOyBpKyspIHsKKyAgICAgICAgZmlsdGVyZWRfdG9wW2ldID0gKHRvcFtp
LTFdICsgMiAqIHRvcFtpXSArIHRvcFtpICsgMV0gKyAyKSA+PiAyOworICAgIH0KKyAgICBpZiAo
dW5maWx0ZXJfbGFzdF9vbmUpIHsKKyAgICAgICAgZmlsdGVyZWRfdG9wW3RvcF9zaXplIC0gMV0g
PSB0b3BbdG9wX3NpemUgLSAxXTsKKyAgICAgICAgZmlsdGVyZWRfbGVmdFtsZWZ0X3NpemUgLSAx
XSA9IGxlZnRbbGVmdF9zaXplIC0gMV07CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lu
bGluZSB2b2lkIEZVTkMocHJlcGFyZV9pbnRyYV9lZGdlX3BhcmFtcykoY29uc3QgVlZDTG9jYWxD
b250ZXh0ICpsYywKKyAgICBJbnRyYUVkZ2VQYXJhbXMqIGVkZ2UsIGNvbnN0IHBpeGVsICpzcmMs
IGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUsCisgICAgY29uc3QgaW50IHgsIGludCB5LCBpbnQgdywg
aW50IGgsIGludCBjX2lkeCwgY29uc3QgaW50IGlzX2ludHJhX21pcCwKKyAgICBjb25zdCBpbnQg
bW9kZSwgY29uc3QgaW50IHJlZl9pZHgsIGNvbnN0IGludCBuZWVkX3BkcGMpCit7CisjZGVmaW5l
IEVYVEVORChwdHIsIHZhbCwgbGVuKSAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGZvciAoaSA9IDA7IGkgPCAobGVuKTsgaSsrKSAgICAgICBc
CisgICAgICAgICoocHRyICsgaSkgPSB2YWw7ICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisg
ICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHJlZl9maWx0
ZXJfZmxhZyA9IGlzX2ludHJhX21pcCA/IDAgOiBmZl92dmNfcmVmX2ZpbHRlcl9mbGFnX2Rlcml2
ZShtb2RlKTsKKyAgICBjb25zdCBpbnQgZmlsdGVyX2ZsYWcgPSAhcmVmX2lkeCAmJiB3ICogaCA+
IDMyICYmICFjX2lkeCAmJgorICAgICAgICBjdS0+aXNwX3NwbGl0X3R5cGUgPT0gSVNQX05PX1NQ
TElUICYmIHJlZl9maWx0ZXJfZmxhZzsKKyAgICBpbnQgY2FuZF91cF9sZWZ0ICAgICAgPSBsYy0+
bmEuY2FuZF91cF9sZWZ0OworICAgIHBpeGVsICAqbGVmdCAgICAgICAgICA9IChwaXhlbCopZWRn
ZS0+bGVmdF9hcnJheSArIE1BWF9UQl9TSVpFICsgMzsKKyAgICBwaXhlbCAgKnRvcCAgICAgICAg
ICAgPSAocGl4ZWwqKWVkZ2UtPnRvcF9hcnJheSAgKyBNQVhfVEJfU0laRSArIDM7CisgICAgcGl4
ZWwgICpmaWx0ZXJlZF9sZWZ0ID0gKHBpeGVsKillZGdlLT5maWx0ZXJlZF9sZWZ0X2FycmF5ICsg
TUFYX1RCX1NJWkUgKyAzOworICAgIHBpeGVsICAqZmlsdGVyZWRfdG9wICA9IChwaXhlbCopZWRn
ZS0+ZmlsdGVyZWRfdG9wX2FycmF5ICArIE1BWF9UQl9TSVpFICsgMzsKKyAgICBjb25zdCBpbnQg
cmVmX2xpbmUgPSByZWZfaWR4ID09IDMgPyAtNCA6ICgtMSAtIHJlZl9pZHgpOworICAgIGludCBs
ZWZ0X3NpemUsIHRvcF9zaXplLCB1bmZpbHRlcl9sZWZ0X3NpemUsIHVuZmlsdGVyX3RvcF9zaXpl
OworICAgIGludCBsZWZ0X2F2YWlsYWJsZSwgdG9wX2F2YWlsYWJsZTsKKyAgICBpbnQgcmVmdywg
cmVmaDsKKyAgICBpbnQgaW50cmFfcHJlZF9hbmdsZSwgaW52X2FuZ2xlOworICAgIGludCBpOwor
CisgICAgaWYgKGlzX2ludHJhX21pcCB8fCBtb2RlID09IElOVFJBX1BMQU5BUikgeworICAgICAg
ICBsZWZ0X3NpemUgPSBoICsgMTsKKyAgICAgICAgdG9wX3NpemUgID0gdyArIDE7CisgICAgICAg
IHVuZmlsdGVyX2xlZnRfc2l6ZSA9IGxlZnRfc2l6ZSArIGZpbHRlcl9mbGFnOworICAgICAgICB1
bmZpbHRlcl90b3Bfc2l6ZSAgPSB0b3Bfc2l6ZSAgKyBmaWx0ZXJfZmxhZzsKKyAgICB9IGVsc2Ug
aWYgKG1vZGUgPT0gSU5UUkFfREMpIHsKKyAgICAgICAgdW5maWx0ZXJfbGVmdF9zaXplID0gbGVm
dF9zaXplID0gaDsKKyAgICAgICAgdW5maWx0ZXJfdG9wX3NpemUgPSB0b3Bfc2l6ZSAgPSB3Owor
ICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRSQV9WRVJUKSB7CisgICAgICAgIC8vd2UgbWF5IG5l
ZWQgMSBwaXhlbCB0byBwcmVkaWN0IHRoZSB0b3AgbGVmdC4KKyAgICAgICAgdW5maWx0ZXJfbGVm
dF9zaXplID0gbGVmdF9zaXplID0gbmVlZF9wZHBjID8gaCA6IDE7CisgICAgICAgIHVuZmlsdGVy
X3RvcF9zaXplID0gdG9wX3NpemUgID0gdzsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFf
SE9SWikgeworICAgICAgICB1bmZpbHRlcl9sZWZ0X3NpemUgPSBsZWZ0X3NpemUgPSBoOworICAg
ICAgICAvL2V2ZW4gbmVlZF9wZHBjID09IDAsIHdlIG1heSBuZWVkIDEgcGl4ZWwgdG8gcHJlZGlj
dCB0aGUgdG9wIGxlZnQuCisgICAgICAgIHVuZmlsdGVyX3RvcF9zaXplID0gdG9wX3NpemUgPSBu
ZWVkX3BkcGMgPyB3IDogMTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY3UtPmlzcF9zcGxp
dF90eXBlID09IElTUF9OT19TUExJVCB8fCBjX2lkeCkgeworICAgICAgICAgICAgcmVmdyA9IHcg
KiAyOworICAgICAgICAgICAgcmVmaCA9IGggKiAyOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmVmdyA9IGN1LT5jYl93aWR0aCArIHc7CisgICAgICAgICAgICByZWZoID0gY3UtPmNi
X2hlaWdodCArIGg7CisgICAgICAgIH0KKyAgICAgICAgaW50cmFfcHJlZF9hbmdsZSA9IGZmX3Z2
Y19pbnRyYV9wcmVkX2FuZ2xlX2Rlcml2ZShtb2RlKTsKKyAgICAgICAgaW52X2FuZ2xlID0gZmZf
dnZjX2ludHJhX2ludl9hbmdsZV9kZXJpdmUoaW50cmFfcHJlZF9hbmdsZSk7CisgICAgICAgIHVu
ZmlsdGVyX3RvcF9zaXplID0gdG9wX3NpemUgID0gcmVmdzsKKyAgICAgICAgdW5maWx0ZXJfbGVm
dF9zaXplID0gbGVmdF9zaXplID0gcmVmaDsKKyAgICB9CisKKyAgICBsZWZ0X2F2YWlsYWJsZSA9
IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUobGMsIHgsIHksIHVuZmlsdGVyX2xlZnRfc2l6ZSwg
Y19pZHgpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZWZ0X2F2YWlsYWJsZTsgaSsrKQorICAgICAg
ICBsZWZ0W2ldID0gUE9TKHJlZl9saW5lLCBpKTsKKworICAgIHRvcF9hdmFpbGFibGUgPSBmZl92
dmNfZ2V0X3RvcF9hdmFpbGFibGUobGMsIHgsIHksIHVuZmlsdGVyX3RvcF9zaXplLCBjX2lkeCk7
CisgICAgbWVtY3B5KHRvcCwgc3JjICsgcmVmX2xpbmUgKiBzdHJpZGUsIHRvcF9hdmFpbGFibGUg
KiBzaXplb2YocGl4ZWwpKTsKKworICAgIGZvciAoaW50IGkgPSAtMTsgaSA+PSByZWZfbGluZTsg
aS0tKSB7CisgICAgICAgIGlmIChjYW5kX3VwX2xlZnQpIHsKKyAgICAgICAgICAgIGxlZnRbaV0g
PSBQT1MocmVmX2xpbmUsIGkpOworICAgICAgICAgICAgdG9wW2ldICA9IFBPUyhpLCByZWZfbGlu
ZSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdF9hdmFpbGFibGUpIHsKKyAgICAgICAgICAgIGxl
ZnRbaV0gPSB0b3BbaV0gPSBsZWZ0WzBdOworICAgICAgICB9IGVsc2UgaWYgKHRvcF9hdmFpbGFi
bGUpIHsKKyAgICAgICAgICAgIGxlZnRbaV0gPSB0b3BbaV0gPSB0b3BbMF07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBsZWZ0W2ldID0gdG9wW2ldID0gMSA8PCAoQklUX0RFUFRIIC0g
MSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFWFRFTkQodG9wICsgdG9wX2F2YWlsYWJsZSwg
dG9wW3RvcF9hdmFpbGFibGUtMV0sIHVuZmlsdGVyX3RvcF9zaXplIC0gdG9wX2F2YWlsYWJsZSk7
CisgICAgRVhURU5EKGxlZnQgKyBsZWZ0X2F2YWlsYWJsZSwgbGVmdFtsZWZ0X2F2YWlsYWJsZS0x
XSwgdW5maWx0ZXJfbGVmdF9zaXplIC0gbGVmdF9hdmFpbGFibGUpOworCisgICAgaWYgKHJlZl9m
aWx0ZXJfZmxhZykgeworICAgICAgICBpZiAoIXJlZl9pZHggJiYgdyAqIGggPiAzMiAmJiAhY19p
ZHggJiYgY3UtPmlzcF9zcGxpdF90eXBlID09IElTUF9OT19TUExJVCApIHsKKyAgICAgICAgICAg
IGNvbnN0IGludCB1bmZpbHRlcl9sYXN0X29uZSA9IGxlZnRfc2l6ZSA9PSB1bmZpbHRlcl9sZWZ0
X3NpemU7CisgICAgICAgICAgICBGVU5DKHJlZl9maWx0ZXIpKGxlZnQsIHRvcCwgZmlsdGVyZWRf
bGVmdCwgZmlsdGVyZWRfdG9wLCB1bmZpbHRlcl9sZWZ0X3NpemUsIHVuZmlsdGVyX3RvcF9zaXpl
LCB1bmZpbHRlcl9sYXN0X29uZSk7CisgICAgICAgICAgICBsZWZ0ID0gZmlsdGVyZWRfbGVmdDsK
KyAgICAgICAgICAgIHRvcCAgPSBmaWx0ZXJlZF90b3A7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKCFpc19pbnRyYV9taXAgJiYgbW9kZSAhPSBJTlRSQV9QTEFOQVIgJiYgbW9kZSAhPSBJTlRS
QV9EQykgeworICAgICAgICBpZiAocmVmX2ZpbHRlcl9mbGFnIHx8IHJlZl9pZHggfHwgY3UtPmlz
cF9zcGxpdF90eXBlICE9IElTUF9OT19TUExJVCkgeworICAgICAgICAgICAgZWRnZS0+ZmlsdGVy
X2ZsYWcgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgaW50IG1pbl9k
aXN0X3Zlcl9ob3IgPSBGRk1JTihhYnMobW9kZSAtIDUwKSwgYWJzKG1vZGUgLSAxOCkpOworICAg
ICAgICAgICAgY29uc3QgaW50IGludHJhX2hvcl92ZXJfZGlzdF90aHJlc1tdID0gezI0LCAxNCwg
MiwgMCwgMH07CisgICAgICAgICAgICBjb25zdCBpbnQgbnRicyA9IChhdl9sb2cyKHcpICsgYXZf
bG9nMihoKSkgPj4gMTsKKyAgICAgICAgICAgIGVkZ2UtPmZpbHRlcl9mbGFnID0gbWluX2Rpc3Rf
dmVyX2hvciA+IGludHJhX2hvcl92ZXJfZGlzdF90aHJlc1tudGJzIC0gMl07CisgICAgICAgIH0K
KworICAgICAgICBpZiAobW9kZSAhPSBJTlRSQV9WRVJUICYmIG1vZGUgIT0gSU5UUkFfSE9SWikg
eworICAgICAgICAgICAgaWYgKG1vZGUgPj0gSU5UUkFfRElBRykgeworICAgICAgICAgICAgICAg
IGlmIChpbnRyYV9wcmVkX2FuZ2xlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBwaXhlbCAq
cCA9IHRvcCAtIChyZWZfaWR4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAtaDsgeCA8IDA7IHgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGlk
eCA9IC0xIC0gcmVmX2lkeCArIEZGTUlOKCh4Kmludl9hbmdsZSArIDI1NikgPj4gOSwgaCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwW3hdID0gbGVmdFtpZHhdOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IHJlZnc7IGkgPD0gcmVmdyArIEZGTUFYKDEsIHcvaCkgKiByZWZfaWR4ICsgMTsg
aSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9wW2ldID0gdG9wW3JlZncgLSAxXTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChpbnRyYV9wcmVkX2FuZ2xlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBwaXhlbCAqcCA9
IGxlZnQgLSAocmVmX2lkeCArIDEpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
LXc7IHggPCAwOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpZHgg
PSAtMSAtIHJlZl9pZHggKyBGRk1JTigoeCppbnZfYW5nbGUgKyAyNTYpID4+IDksIHcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcFt4XSA9IHRvcFtpZHhdOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IHJlZmg7IGkgPD0gcmVmaCArIEZGTUFYKDEsIGgvdykgKiByZWZfaWR4ICsgMTsgaSsr
KQorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFtpXSA9IGxlZnRbcmVmaCAtIDFdOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlZGdl
LT5sZWZ0ID0gKHVpbnQ4X3QqKWxlZnQ7CisgICAgZWRnZS0+dG9wICA9ICh1aW50OF90Kil0b3A7
Cit9CisKKy8vOC40LjEgR2VuZXJhbCBkZWNvZGluZyBwcm9jZXNzIGZvciBjb2RpbmcgdW5pdHMg
Y29kZWQgaW4gaW50cmEgcHJlZGljdGlvbiBtb2RlCitzdGF0aWMgdm9pZCBGVU5DKGludHJhX3By
ZWQpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwLAorICAgIGNvbnN0
IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgaW50IGNfaWR4KQoreworICAgIFZWQ0ZyYW1l
Q29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBz
LnNwczsKKyAgICBjb25zdCBWVkNQUFMgKnBwcyA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgQ29k
aW5nVW5pdCAqY3UgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IGxvZzJfbWluX2NiX3NpemUgICAg
PSBzcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgbWluX2NiX3dpZHRoICAg
ICAgICA9IHBwcy0+bWluX2NiX3dpZHRoOworICAgIGNvbnN0IGludCB4X2NiICAgICAgICAgICAg
ICAgID0geDAgPj4gbG9nMl9taW5fY2Jfc2l6ZTsKKyAgICBjb25zdCBpbnQgeV9jYiAgICAgICAg
ICAgICAgICA9IHkwID4+IGxvZzJfbWluX2NiX3NpemU7CisKKyAgICBjb25zdCBpbnQgaHNoaWZ0
ID0gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgdnNoaWZ0ID0gZmMt
PnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgeCA9IHgwID4+IGhzaGlmdDsK
KyAgICBjb25zdCBpbnQgeSA9IHkwID4+IHZzaGlmdDsKKyAgICBjb25zdCBpbnQgdyA9IHdpZHRo
ID4+IGhzaGlmdDsKKyAgICBjb25zdCBpbnQgaCA9IGhlaWdodCA+PiB2c2hpZnQ7CisgICAgY29u
c3QgcHRyZGlmZl90IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdIC8gc2l6ZW9m
KHBpeGVsKTsKKworICAgIGNvbnN0IGludCBwcmVkX21vZGUgPSBjX2lkeCA/IGN1LT5pbnRyYV9w
cmVkX21vZGVfYyA6IGN1LT5pbnRyYV9wcmVkX21vZGVfeTsKKyAgICBjb25zdCBpbnQgbW9kZSA9
IGZmX3Z2Y193aWRlX2FuZ2xlX21vZGVfbWFwcGluZyhjdSwgdywgaCwgY19pZHgsIHByZWRfbW9k
ZSk7CisKKyAgICBjb25zdCBpbnQgaW50cmFfbWlwX2ZsYWcgID0gU0FNUExFX0NUQihmYy0+dGFi
LmltZiwgeF9jYiwgeV9jYik7CisgICAgY29uc3QgaW50IGlzX2ludHJhX21pcCAgICA9IGludHJh
X21pcF9mbGFnICYmICghY19pZHggfHwgY3UtPm1pcF9jaHJvbWFfZGlyZWN0X2ZsYWcpOworICAg
IGNvbnN0IGludCByZWZfaWR4ID0gY19pZHggPyAwIDogY3UtPmludHJhX2x1bWFfcmVmX2lkeDsK
KyAgICBjb25zdCBpbnQgbmVlZF9wZHBjID0gZmZfdnZjX25lZWRfcGRwYyh3LCBoLCBjdS0+YmRw
Y21fZmxhZ1tjX2lkeF0sIG1vZGUsIHJlZl9pZHgpOworCisKKyAgICBwaXhlbCAqc3JjID0gKHBp
eGVsKilmYy0+ZnJhbWUtPmRhdGFbY19pZHhdICsgeCArIHkgKiBzdHJpZGU7CisgICAgSW50cmFF
ZGdlUGFyYW1zIGVkZ2U7CisKKyAgICBGVU5DKHByZXBhcmVfaW50cmFfZWRnZV9wYXJhbXMpKGxj
LCAmZWRnZSwgc3JjLCBzdHJpZGUsIHgsIHksIHcsIGgsIGNfaWR4LCBpc19pbnRyYV9taXAsIG1v
ZGUsIHJlZl9pZHgsIG5lZWRfcGRwYyk7CisKKyAgICBpZiAoaXNfaW50cmFfbWlwKSB7CisgICAg
ICAgIGludCBpbnRyYV9taXBfdHJhbnNwb3NlZF9mbGFnID0gU0FNUExFX0NUQihmYy0+dGFiLmlt
dGYsIHhfY2IsIHlfY2IpOworICAgICAgICBpbnQgaW50cmFfbWlwX21vZGUgPSBTQU1QTEVfQ1RC
KGZjLT50YWIuaW1tLCB4X2NiLCB5X2NiKTsKKworICAgICAgICBmYy0+dnZjZHNwLmludHJhLnBy
ZWRfbWlwKCh1aW50OF90ICopc3JjLCBlZGdlLnRvcCwgZWRnZS5sZWZ0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgdywgaCwgc3RyaWRlLCBpbnRyYV9taXBfbW9kZSwgaW50cmFfbWlwX3RyYW5z
cG9zZWRfZmxhZyk7CisgICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX1BMQU5BUikgeworICAg
ICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfcGxhbmFyKCh1aW50OF90ICopc3JjLCBlZGdlLnRv
cCwgZWRnZS5sZWZ0LCB3LCBoLCBzdHJpZGUpOworICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRS
QV9EQykgeworICAgICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfZGMoKHVpbnQ4X3QgKilzcmMs
IGVkZ2UudG9wLCBlZGdlLmxlZnQsIHcsIGgsIHN0cmlkZSk7CisgICAgfSBlbHNlIGlmIChtb2Rl
ID09IElOVFJBX1ZFUlQpIHsKKyAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5wcmVkX3YoKHVpbnQ4
X3QgKilzcmMsIGVkZ2UudG9wLCB3LCBoLCBzdHJpZGUpOworICAgIH0gZWxzZSBpZiAobW9kZSA9
PSBJTlRSQV9IT1JaKSB7CisgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF9oKCh1aW50OF90
ICopc3JjLCBlZGdlLmxlZnQsIHcsIGgsIHN0cmlkZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKG1vZGUgPj0gSU5UUkFfRElBRykgeworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5w
cmVkX2FuZ3VsYXJfdigodWludDhfdCAqKXNyYywgZWRnZS50b3AsIGVkZ2UubGVmdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBzdHJpZGUsIGNfaWR4LCBtb2RlLCBy
ZWZfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UuZmlsdGVyX2Zs
YWcsIG5lZWRfcGRwYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmYy0+dnZjZHNw
LmludHJhLnByZWRfYW5ndWxhcl9oKCh1aW50OF90ICopc3JjLCBlZGdlLnRvcCwgZWRnZS5sZWZ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIHN0cmlkZSwgY19pZHgs
IG1vZGUsIHJlZl9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5m
aWx0ZXJfZmxhZywgbmVlZF9wZHBjKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobmVlZF9w
ZHBjKSB7CisgICAgICAgIC8vOC40LjUuMi4xNSBQb3NpdGlvbi1kZXBlbmRlbnQgaW50cmEgcHJl
ZGljdGlvbiBzYW1wbGUgZmlsdGVyaW5nIHByb2Nlc3MKKyAgICAgICAgaWYgKCFpc19pbnRyYV9t
aXAgJiYgKG1vZGUgPT0gSU5UUkFfUExBTkFSIHx8IG1vZGUgPT0gSU5UUkFfREMgfHwKKyAgICAg
ICAgICAgIG1vZGUgPT0gSU5UUkFfVkVSVCB8fCBtb2RlID09IElOVFJBX0hPUlopKSB7CisgICAg
ICAgICAgICBjb25zdCBpbnQgc2NhbGUgPSAoYXZfbG9nMih3KSArIGF2X2xvZzIoaCkgLSAyKSA+
PiAyOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmxlZnQgPSAocGl4ZWwqKWVkZ2UubGVmdDsK
KyAgICAgICAgICAgIGNvbnN0IHBpeGVsICp0b3AgID0gKHBpeGVsKillZGdlLnRvcDsKKyAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGwsIHQs
IHdsLCB3dCwgcHJlZDsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgdmFsOworICAgICAgICAg
ICAgICAgICAgICBpZiAobW9kZSA9PSBJTlRSQV9QTEFOQVIgfHwgbW9kZSA9PSBJTlRSQV9EQykg
eworICAgICAgICAgICAgICAgICAgICAgICAgbCAgPSBsZWZ0W3ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgdCA9IHRvcFt4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsID0gMzIgPj4g
RkZNSU4oKHggPDwgMSkgPj4gc2NhbGUsIDMxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHd0
ID0gMzIgPj4gRkZNSU4oKHkgPDwgMSkgPj4gc2NhbGUsIDMxKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGwgID0gbGVmdFt5XSAtIGxlZnRb
LTFdICsgUE9TKHgseSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdG9wW3hdIC0gdG9w
Wy0xXSArIFBPUyh4LHkpOworICAgICAgICAgICAgICAgICAgICAgICAgd2wgPSAobW9kZSA9PSBJ
TlRSQV9WRVJUKSA/ICAoMzIgPj4gRkZNSU4oKHggPDwgMSkgPj4gc2NhbGUsIDMxKSkgOiAwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgd3QgPSAobW9kZSA9PSBJTlRSQV9IT1JaKSA/ICAoMzIg
Pj4gRkZNSU4oKHkgPDwgMSkgPj4gc2NhbGUsIDMxKSkgOiAwOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHZhbCA9IFBPUyh4LCB5KTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJlZCAgPSB2YWwgKyAoKHdsICogKGwgLSB2YWwpICsgd3QgKiAodCAtIHZhbCkgKyAz
MikgPj4gNik7CisgICAgICAgICAgICAgICAgICAgIFBPUyh4LCB5KSA9IENMSVAocHJlZCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisv
LzguNC41LjIuMTEgU3BlY2lmaWNhdGlvbiBvZiBJTlRSQV9QTEFOQVIgaW50cmEgcHJlZGljdGlv
biBtb2RlCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMocHJlZF9wbGFuYXIpKHVp
bnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3QgKl90b3AsCisgICAgY29uc3QgdWludDhfdCAqX2xl
ZnQsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sK
KyAgICBpbnQgeCwgeTsKKyAgICBwaXhlbCAqc3JjICAgICAgICA9IChwaXhlbCAqKV9zcmM7Cisg
ICAgY29uc3QgcGl4ZWwgKnRvcCAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGNvbnN0IHBp
eGVsICpsZWZ0ID0gKGNvbnN0IHBpeGVsICopX2xlZnQ7CisgICAgY29uc3QgaW50IGxvZ3cgID0g
YXZfbG9nMih3KTsKKyAgICBjb25zdCBpbnQgbG9naCAgPSBhdl9sb2cyKGgpOworICAgIGNvbnN0
IGludCBzaXplICA9ICB3ICogaDsKKyAgICBjb25zdCBpbnQgc2hpZnQgPSAobG9ndyArIGxvZ2gg
KyAxKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGZvciAoeCA9IDA7
IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcmVkX3YgPSAoKGggLSAxIC0g
eSkgKiB0b3BbeF0gICsgKHkgKyAxKSAqIGxlZnRbaF0pIDw8IGxvZ3c7CisgICAgICAgICAgICBj
b25zdCBpbnQgcHJlZF9oID0gKCh3IC0gMSAtIHgpICogbGVmdFt5XSArICh4ICsgMSkgKiB0b3Bb
d10pIDw8IGxvZ2g7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlZCA9IChwcmVkX3YgKyBwcmVk
X2ggKyBzaXplKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIFBPUyh4LCB5KSA9IHByZWQ7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKKy8vOC40LjUuMi4zIE1JUCBib3VuZGFyeSBzYW1wbGUgZG93bnNh
bXBsaW5nIHByb2Nlc3MKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhtaXBfZG93
bnNhbXBsaW5nKShpbnQgKnJlZHVjZWQsIGNvbnN0IGludCBib3VuZGFyeV9zaXplLAorICAgIGNv
bnN0IHBpeGVsICpyZWYsIGNvbnN0IGludCBuX3RiX3MpCit7CisgICAgY29uc3QgaW50IGJfZHdu
ID0gbl90Yl9zIC8gYm91bmRhcnlfc2l6ZTsKKyAgICBjb25zdCBpbnQgbG9nMiA9IGF2X2xvZzIo
Yl9kd24pOworCisgICAgaWYgKGJvdW5kYXJ5X3NpemUgPT0gbl90Yl9zKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbl90Yl9zOyBpKyspCisgICAgICAgICAgICByZWR1Y2VkW2ldID0g
cmVmW2ldOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Ym91bmRhcnlfc2l6ZTsgaSsrKSB7CisgICAgICAgIGludCByOworICAgICAgICByID0gKnJlZisr
OworICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8IGJfZHduOyBqKyspCisgICAgICAgICAgICBy
ICs9ICpyZWYrKzsKKyAgICAgICAgcmVkdWNlZFtpXSA9IChyICsgKDEgPDwgKGxvZzIgLSAxKSkp
ID4+IGxvZzI7CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMo
bWlwX3JlZHVjZWRfcHJlZCkocGl4ZWwgKnNyYywgY29uc3QgcHRyZGlmZl90IHN0cmlkZSwKKyAg
ICBjb25zdCBpbnQgdXBfaG9yLCBjb25zdCBpbnQgdXBfdmVyLCBjb25zdCBpbnQgcHJlZF9zaXpl
LCBjb25zdCBpbnQgKnJlZHVjZWQsIGNvbnN0IGludCByZWR1Y2VkX3NpemUsCisgICAgY29uc3Qg
aW50IG93LCBjb25zdCBpbnQgdGVtcDAsIGNvbnN0IHVpbnQ4X3QgKm1hdHJpeCwgaW50IGlzX3Ry
YW5zcG9zZWQpCit7CisgICAgc3JjID0gJlBPUyh1cF9ob3IgLSAxLCB1cF92ZXIgLSAxKTsKKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IHByZWRfc2l6ZTsgeSsrKSB7CisgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgcHJlZF9zaXplOyB4KyspIHsKKyAgICAgICAgICAgIGludCBwcmVkID0gMDsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVkdWNlZF9zaXplOyBpKyspCisgICAg
ICAgICAgICAgICAgcHJlZCArPSByZWR1Y2VkW2ldICogbWF0cml4W2ldOworICAgICAgICAgICAg
bWF0cml4ICs9IHJlZHVjZWRfc2l6ZTsKKyAgICAgICAgICAgIHByZWQgPSAoKHByZWQgKyBvdykg
Pj4gNikgKyB0ZW1wMDsKKyAgICAgICAgICAgIHByZWQgPSBhdl9jbGlwKHByZWQsIDAsICgxPDxC
SVRfREVQVEgpIC0gMSk7CisgICAgICAgICAgICBpZiAoaXNfdHJhbnNwb3NlZCkKKyAgICAgICAg
ICAgICAgICBQT1MoeSAqIHVwX2hvciwgeCAqIHVwX3ZlcikgPSBwcmVkOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIFBPUyh4ICogdXBfaG9yLCB5ICogdXBfdmVyKSA9IHByZWQ7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVO
QyhtaXBfdXBzYW1wbGluZ18xZCkocGl4ZWwgKmRzdCwgY29uc3QgaW50IGRzdF9zdGVwLCBjb25z
dCBpbnQgZHN0X3N0cmlkZSwgY29uc3QgaW50IGRzdF9oZWlnaHQsIGNvbnN0IGludCBmYWN0b3Is
CisgICAgY29uc3QgcGl4ZWwgKmJvdW5kYXJ5LCBjb25zdCBpbnQgYm91bmRhcnlfc3RlcCwgIGNv
bnN0IGludCBwcmVkX3NpemUpCit7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRzdF9oZWln
aHQ7IGkrKykgeworICAgICAgICBjb25zdCBwaXhlbCAqYmVmb3JlID0gYm91bmRhcnk7CisgICAg
ICAgIGNvbnN0IHBpeGVsICphZnRlciAgPSBkc3QgLSBkc3Rfc3RlcDsKKyAgICAgICAgcGl4ZWwg
KmQgPSBkc3Q7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcHJlZF9zaXplOyBqKyspIHsK
KyAgICAgICAgICAgIGFmdGVyICs9IGRzdF9zdGVwICogZmFjdG9yOworICAgICAgICAgICAgZm9y
IChpbnQgayA9IDE7IGsgPCBmYWN0b3I7IGsrKykgeworICAgICAgICAgICAgICAgIGludCBtaWQg
PSAoZmFjdG9yIC0gaykgKiAoKmJlZm9yZSkgKyBrICogKCphZnRlcik7CisgICAgICAgICAgICAg
ICAgKmQgPSAobWlkICsgZmFjdG9yIC8gMikgLyBmYWN0b3I7CisgICAgICAgICAgICAgICAgZCAr
PSBkc3Rfc3RlcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJlZm9yZSA9IGFmdGVyOwor
ICAgICAgICAgICAgZCArPSBkc3Rfc3RlcDsKKyAgICAgICAgfQorICAgICAgICBib3VuZGFyeSAr
PSBib3VuZGFyeV9zdGVwOworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICB9Cit9CisK
Ky8vOC40LjUuMi4yIE1hdHJpeC1iYXNlZCBpbnRyYSBzYW1wbGUgcHJlZGljdGlvbgorc3RhdGlj
IGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKHByZWRfbWlwKSh1aW50OF90ICpfc3JjLCBjb25z
dCB1aW50OF90ICpfdG9wLAorICAgIGNvbnN0IHVpbnQ4X3QgKl9sZWZ0LCBjb25zdCBpbnQgdywg
Y29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUsCisgICAgaW50IG1vZGVfaWQsIGlu
dCBpc190cmFuc3Bvc2VkKQoreworICAgIHBpeGVsICpzcmMgICAgICAgID0gKHBpeGVsICopX3Ny
YzsKKyAgICBjb25zdCBwaXhlbCAqdG9wICA9IChjb25zdCBwaXhlbCAqKV90b3A7CisgICAgY29u
c3QgcGl4ZWwgKmxlZnQgPSAoY29uc3QgcGl4ZWwgKilfbGVmdDsKKworICAgIGNvbnN0IGludCBz
aXplX2lkID0gZmZfdnZjX2dldF9taXBfc2l6ZV9pZCh3LCBoKTsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IGJvdW5kYXJ5X3NpemVzW10gPSB7MiwgNCwgNH07CisgICAgc3RhdGljIGNvbnN0IGludCBw
cmVkX3NpemVzW10gPSB7NCwgNCwgOH07CisgICAgY29uc3QgaW50IGJvdW5kYXJ5X3NpemUgPSBi
b3VuZGFyeV9zaXplc1tzaXplX2lkXTsKKyAgICBjb25zdCBpbnQgcHJlZF9zaXplICAgICA9IHBy
ZWRfc2l6ZXNbc2l6ZV9pZF07CisgICAgY29uc3QgaW50IGluX3NpemUgPSAyICogYm91bmRhcnlf
c2l6ZSAtICgoc2l6ZV9pZCA9PSAyKSA/IDEgOiAwKTsKKyAgICBjb25zdCB1aW50OF90ICptYXRy
aXggPSBmZl92dmNfZ2V0X21pcF9tYXRyaXgoc2l6ZV9pZCwgbW9kZV9pZCk7CisgICAgY29uc3Qg
aW50IHVwX2hvciA9IHcgLyBwcmVkX3NpemU7CisgICAgY29uc3QgaW50IHVwX3ZlciA9IGggLyBw
cmVkX3NpemU7CisKKyAgICBpbnQgcmVkdWNlZFsxNl07CisgICAgaW50ICpyZWRfdCAgPSByZWR1
Y2VkOworICAgIGludCAqcmVkX2wgID0gcmVkdWNlZCArIGJvdW5kYXJ5X3NpemU7CisgICAgaW50
IG9mZiA9IDEsIG93ID0gMDsKKyAgICBpbnQgdGVtcDA7CisKKyAgICBpZiAoaXNfdHJhbnNwb3Nl
ZCkgeworICAgICAgICBGRlNXQVAoaW50KiwgcmVkX3QsIHJlZF9sKTsKKyAgICB9CisgICAgRlVO
QyhtaXBfZG93bnNhbXBsaW5nKShyZWRfdCwgYm91bmRhcnlfc2l6ZSwgdG9wLCB3KTsKKyAgICBG
VU5DKG1pcF9kb3duc2FtcGxpbmcpKHJlZF9sLCBib3VuZGFyeV9zaXplLCBsZWZ0LCBoKTsKKwor
ICAgIHRlbXAwID0gcmVkdWNlZFswXTsKKyAgICBpZiAoc2l6ZV9pZCAhPSAyKSB7CisgICAgICAg
IG9mZiA9IDA7CisgICAgICAgIG93ID0gKDEgPDwgKEJJVF9ERVBUSCAtIDEpKSAtIHRlbXAwOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG93ID0gcmVkdWNlZFsxXSAtIHRlbXAwOworICAgIH0KKyAg
ICByZWR1Y2VkWzBdID0gb3c7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBpbl9zaXplOyBpKysp
IHsKKyAgICAgICAgcmVkdWNlZFtpXSA9IHJlZHVjZWRbaSArIG9mZl0gLSB0ZW1wMDsKKyAgICAg
ICAgb3cgKz0gcmVkdWNlZFtpXTsKKyAgICB9CisgICAgb3cgPSAzMiAtIDMyICogb3c7CisKKyAg
ICBGVU5DKG1pcF9yZWR1Y2VkX3ByZWQpKHNyYywgc3RyaWRlLCB1cF9ob3IsIHVwX3ZlciwgcHJl
ZF9zaXplLCByZWR1Y2VkLCBpbl9zaXplLCBvdywgdGVtcDAsIG1hdHJpeCwgaXNfdHJhbnNwb3Nl
ZCk7CisgICAgaWYgKHVwX2hvciA+IDEgfHwgdXBfdmVyID4gMSkgeworICAgICAgICBpZiAodXBf
aG9yID4gMSkKKyAgICAgICAgICAgIEZVTkMobWlwX3Vwc2FtcGxpbmdfMWQpKCZQT1MoMCwgdXBf
dmVyIC0gMSksIDEsIHVwX3ZlciAqIHN0cmlkZSwgcHJlZF9zaXplLCB1cF9ob3IsIGxlZnQgKyB1
cF92ZXIgLSAxLCB1cF92ZXIsIHByZWRfc2l6ZSk7CisgICAgICAgIGlmICh1cF92ZXIgPiAxKQor
ICAgICAgICAgICAgRlVOQyhtaXBfdXBzYW1wbGluZ18xZCkoc3JjLCBzdHJpZGUsIDEsIHcsIHVw
X3ZlciwgdG9wLCAxLCBwcmVkX3NpemUpOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19p
bmxpbmUgcGl4ZWwgRlVOQyhwcmVkX2RjX3ZhbCkoY29uc3QgcGl4ZWwgKnRvcCwgY29uc3QgcGl4
ZWwgKmxlZnQsCisgICAgY29uc3QgaW50IHcsIGNvbnN0IGludCBoKQoreworICAgIHBpeGVsIGRj
X3ZhbDsKKyAgICBpbnQgc3VtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gKHcgPT0g
aCkgPyAodyA8PCAxKSA6IEZGTUFYKHcsIGgpOworICAgIGNvbnN0IGludCBzaGlmdCA9IGF2X2xv
ZzIob2Zmc2V0KTsKKyAgICBvZmZzZXQgPj49IDE7CisgICAgaWYgKHcgPj0gaCkgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHc7IGkrKykKKyAgICAgICAgICAgIHN1bSArPSB0b3BbaV07
CisgICAgfQorICAgIGlmICh3IDw9IGgpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBo
OyBpKyspCisgICAgICAgICAgICBzdW0gKz0gbGVmdFtpXTsKKyAgICB9CisgICAgZGNfdmFsID0g
KHN1bSArIG9mZnNldCkgPj4gc2hpZnQ7CisgICAgcmV0dXJuIGRjX3ZhbDsKK30KKworLy84LjQu
NS4yLjEyIFNwZWNpZmljYXRpb24gb2YgSU5UUkFfREMgaW50cmEgcHJlZGljdGlvbiBtb2RlCitz
dGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMocHJlZF9kYykodWludDhfdCAqX3NyYywg
Y29uc3QgdWludDhfdCAqX3RvcCwKKyAgICBjb25zdCB1aW50OF90ICpfbGVmdCwgY29uc3QgaW50
IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIGludCB4LCB5
OworICAgIHBpeGVsICpzcmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IHBp
eGVsICp0b3AgICAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGNvbnN0IHBpeGVsICpsZWZ0
ICAgPSAoY29uc3QgcGl4ZWwgKilfbGVmdDsKKyAgICBjb25zdCBwaXhlbCBkYyAgICAgID0gRlVO
QyhwcmVkX2RjX3ZhbCkodG9wLCBsZWZ0LCB3LCBoKTsKKyAgICBjb25zdCBwaXhlbDQgYSAgICAg
ID0gUElYRUxfU1BMQVRfWDQoZGMpOworICAgIGZvciAoeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAg
ICAgICAgcGl4ZWwgKnMgPSBzcmM7CisgICAgICAgIGZvciAoeCA9IDA7IHggPCB3OyB4ICs9IDQp
IHsKKyAgICAgICAgICAgIEFWX1dONFAocywgYSk7CisgICAgICAgICAgICBzICs9IDQ7CisgICAg
ICAgIH0KKyAgICAgICAgc3JjICs9IHN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdh
eXNfaW5saW5lIHZvaWQgRlVOQyhwcmVkX3YpKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3Qg
Kl90b3AsCisgICAgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZmX3Qgc3Ry
aWRlKQoreworICAgIHBpeGVsICpzcmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNv
bnN0IHBpeGVsICp0b3AgICAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIG1lbWNweShzcmMsIHRvcCwgc2l6ZW9mKHBpeGVs
KSAgKiB3KTsKKyAgICAgICAgc3JjICs9IHN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IEZVTkMocHJlZF9oKSh1aW50OF90ICpfc3JjLCBjb25zdCB1aW50OF90ICpfbGVmdCwgY29uc3Qg
aW50IHcsIGNvbnN0IGludCBoLAorICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAg
cGl4ZWwgKnNyYyAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4ZWwgKmxl
ZnQgICAgPSAoY29uc3QgcGl4ZWwgKilfbGVmdDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7
IHkrKykgeworICAgICAgICBjb25zdCBwaXhlbDQgYSA9IFBJWEVMX1NQTEFUX1g0KGxlZnRbeV0p
OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHggKz0gNCkgeworICAgICAgICAgICAg
QVZfV040UCgmUE9TKHgsIHkpLCBhKTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2RlZmluZSBJ
TlRSQV9MVU1BX0ZJTFRFUihwKSAgICBDTElQKChwWzBdICogZlswXSArIHBbMV0gKiBmWzFdICsg
cFsyXSAqIGZbMl0gKyBwWzNdICogZlszXSArIDMyKSA+PiA2KQorI2RlZmluZSBJTlRSQV9DSFJP
TUFfRklMVEVSKHApICAoKCgzMiAtIGZhY3QpICogcFsxXSArIGZhY3QgKiBwWzJdICsgMTYpID4+
IDUpCisKKy8vOC40LjUuMi4xMyBTcGVjaWZpY2F0aW9uIG9mIElOVFJBX0FOR1VMQVIyLi5JTlRS
QV9BTkdVTEFSNjYgaW50cmEgcHJlZGljdGlvbiBtb2Rlcworc3RhdGljIHZvaWQgRlVOQyhwcmVk
X2FuZ3VsYXJfdikodWludDhfdCAqX3NyYywgY29uc3QgdWludDhfdCAqX3RvcCwgY29uc3QgdWlu
dDhfdCAqX2xlZnQsCisgICAgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZm
X3Qgc3RyaWRlLCBjb25zdCBpbnQgY19pZHgsIGNvbnN0IGludCBtb2RlLAorICAgIGNvbnN0IGlu
dCByZWZfaWR4LCBjb25zdCBpbnQgZmlsdGVyX2ZsYWcsIGNvbnN0IGludCBuZWVkX3BkcGMpCit7
CisgICAgcGl4ZWwgKnNyYyAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4
ZWwgKmxlZnQgICA9IChjb25zdCBwaXhlbCAqKV9sZWZ0OworICAgIGNvbnN0IHBpeGVsICp0b3Ag
ICAgPSAoY29uc3QgcGl4ZWwgKilfdG9wIC0gKDEgKyByZWZfaWR4KTsKKyAgICBjb25zdCBpbnQg
aW50cmFfcHJlZF9hbmdsZSA9IGZmX3Z2Y19pbnRyYV9wcmVkX2FuZ2xlX2Rlcml2ZShtb2RlKTsK
KyAgICBpbnQgcG9zID0gKDEgKyByZWZfaWR4KSAqIGludHJhX3ByZWRfYW5nbGU7CisgICAgY29u
c3QgaW50IGRwID0gaW50cmFfcHJlZF9hbmdsZTsKKyAgICBjb25zdCBpbnQgaXNfbHVtYSA9ICFj
X2lkeDsKKyAgICBpbnQgbnNjYWxlLCBpbnZfYW5nbGU7CisKKyAgICBpZiAobmVlZF9wZHBjKSB7
CisgICAgICAgIGludl9hbmdsZSA9IGZmX3Z2Y19pbnRyYV9pbnZfYW5nbGVfZGVyaXZlKGludHJh
X3ByZWRfYW5nbGUpOworICAgICAgICBuc2NhbGUgPSBmZl92dmNfbnNjYWxlX2Rlcml2ZSh3LCBo
LCBtb2RlKTsKKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAg
ICAgICBjb25zdCBpbnQgaWR4ICAgPSAocG9zID4+IDUpICsgcmVmX2lkeDsKKyAgICAgICAgY29u
c3QgaW50IGZhY3QgPSBwb3MgJiAzMTsKKyAgICAgICAgaWYgKCFmYWN0ICYmICghaXNfbHVtYSB8
fCAhZmlsdGVyX2ZsYWcpKSB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgr
KykgeworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwID0gdG9wICsgeCArIGlkeCArIDE7
CisgICAgICAgICAgICAgICAgUE9TKHgsIHkpID0gKnA7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAgICAgICAgY29u
c3QgaW50OF90ICpmID0gZmZfdnZjX2ludHJhX2x1bWFfZmlsdGVyW2ZpbHRlcl9mbGFnXVtmYWN0
XTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcCA9IHRvcCArIHggKyBpZHg7CisgICAgICAgICAg
ICAgICAgICAgIFBPUyh4LCB5KSA9IElOVFJBX0xVTUFfRklMVEVSKHApOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAgPSB0
b3AgKyB4ICsgaWR4OworICAgICAgICAgICAgICAgICAgICBQT1MoeCwgeSkgPSBJTlRSQV9DSFJP
TUFfRklMVEVSKHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAobmVlZF9wZHBjKSB7CisgICAgICAgICAgICBpbnQgaW52X2FuZ2xlX3N1
bSA9IDI1NiArIGludl9hbmdsZTsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgRkZN
SU4odywgMyA8PCBuc2NhbGUpOyB4KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCBs
ICAgPSBsZWZ0W3kgKyAoaW52X2FuZ2xlX3N1bSA+PiA5KV07CisgICAgICAgICAgICAgICAgY29u
c3QgcGl4ZWwgdmFsID0gUE9TKHgsIHkpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCB3bCAg
ICA9IDMyID4+ICgoeCA8PCAxKSA+PiBuc2NhbGUpOworICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBwcmVkICA9IHZhbCArICgoKGwgLSB2YWwpICogd2wgKyAzMikgPj4gNik7CisgICAgICAgICAg
ICAgICAgUE9TKHgsIHkpID0gQ0xJUChwcmVkKTsKKyAgICAgICAgICAgICAgICBpbnZfYW5nbGVf
c3VtICs9IGludl9hbmdsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwb3Mg
Kz0gZHA7CisgICAgfQorfQorCisvLzguNC41LjIuMTMgU3BlY2lmaWNhdGlvbiBvZiBJTlRSQV9B
TkdVTEFSMi4uSU5UUkFfQU5HVUxBUjY2IGludHJhIHByZWRpY3Rpb24gbW9kZXMKK3N0YXRpYyB2
b2lkIEZVTkMocHJlZF9hbmd1bGFyX2gpKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3QgKl90
b3AsIGNvbnN0IHVpbnQ4X3QgKl9sZWZ0LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwg
Y29uc3QgcHRyZGlmZl90IHN0cmlkZSwgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgbW9kZSwK
KyAgICBjb25zdCBpbnQgcmVmX2lkeCwgY29uc3QgaW50IGZpbHRlcl9mbGFnLCBjb25zdCBpbnQg
bmVlZF9wZHBjKQoreworICAgIHBpeGVsICpzcmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOwor
ICAgIGNvbnN0IHBpeGVsICpsZWZ0ICAgPSAoY29uc3QgcGl4ZWwgKilfbGVmdCAtICgxICsgcmVm
X2lkeCk7CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgICA9IChjb25zdCBwaXhlbCAqKV90b3A7Cisg
ICAgY29uc3QgaW50IGlzX2x1bWEgPSAhY19pZHg7CisgICAgY29uc3QgaW50IGludHJhX3ByZWRf
YW5nbGUgPSBmZl92dmNfaW50cmFfcHJlZF9hbmdsZV9kZXJpdmUobW9kZSk7CisgICAgY29uc3Qg
aW50IGRwID0gaW50cmFfcHJlZF9hbmdsZTsKKyAgICBpbnQgbnNjYWxlID0gMCwgaW52X2FuZ2xl
LCBpbnZfYW5nbGVfc3VtOworCisgICAgaWYgKG5lZWRfcGRwYykgeworICAgICAgICBpbnZfYW5n
bGUgPSBmZl92dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2ZShpbnRyYV9wcmVkX2FuZ2xlKTsKKyAg
ICAgICAgaW52X2FuZ2xlX3N1bSA9IDI1NiArIGludl9hbmdsZTsKKyAgICAgICAgbnNjYWxlID0g
ZmZfdnZjX25zY2FsZV9kZXJpdmUodywgaCwgbW9kZSk7CisgICAgfQorCisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgaW50IHBvcyA9ICgxICsgcmVmX2lkeCkgKiBp
bnRyYV9wcmVkX2FuZ2xlOworICAgICAgICBpbnQgd3Q7CisgICAgICAgIGlmIChuZWVkX3BkcGMp
CisgICAgICAgICAgICB3dCA9ICgzMiA+PiAoKHkgKiAyKSA+PiBuc2NhbGUpKTsKKworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgY29uc3QgaW50IGlk
eCAgPSAocG9zID4+IDUpICsgcmVmX2lkeDsKKyAgICAgICAgICAgIGNvbnN0IGludCBmYWN0ID0g
cG9zICYgMzE7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqcCA9IGxlZnQgKyB5ICsgaWR4Owor
ICAgICAgICAgICAgaW50IHByZWQ7CisgICAgICAgICAgICBpZiAoIWZhY3QgJiYgKCFpc19sdW1h
IHx8ICFmaWx0ZXJfZmxhZykpIHsKKyAgICAgICAgICAgICAgICBwcmVkID0gcFsxXTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFjX2lkeCkgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQ4X3QgKmYgPSBmZl92dmNfaW50cmFfbHVtYV9maWx0ZXJbZmls
dGVyX2ZsYWddW2ZhY3RdOworICAgICAgICAgICAgICAgICAgICBwcmVkID0gSU5UUkFfTFVNQV9G
SUxURVIocCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
cHJlZCA9IElOVFJBX0NIUk9NQV9GSUxURVIocCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG5lZWRfcGRwYykgeworICAgICAgICAgICAgICAgIGlm
ICh5IDwgKDMgPDwgbnNjYWxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCB0
ID0gdG9wW3ggKyAoaW52X2FuZ2xlX3N1bSA+PiA5KV07CisgICAgICAgICAgICAgICAgICAgIHBy
ZWQgPSBDTElQKHByZWQgKyAoKCh0IC0gcHJlZCkgKiB3dCArIDMyKSA+PiA2KSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUE9TKHgsIHkpID0gcHJlZDsK
KyAgICAgICAgICAgIHBvcyArPSBkcDsKKyAgICAgICAgfQorICAgICAgICBpZiAobmVlZF9wZHBj
KQorICAgICAgICAgICAgaW52X2FuZ2xlX3N1bSArPSBpbnZfYW5nbGU7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19pbnRyYV9kc3BfaW5pdCkoVlZDSW50cmFEU1BDb250ZXh0
ICpjb25zdCBpbnRyYSkKK3sKKyAgICBpbnRyYS0+bG1jc19zY2FsZV9jaHJvbWEgID0gRlVOQyhs
bWNzX3NjYWxlX2Nocm9tYSk7CisgICAgaW50cmEtPmludHJhX2NjbG1fcHJlZCAgICA9IEZVTkMo
aW50cmFfY2NsbV9wcmVkKTsKKyAgICBpbnRyYS0+aW50cmFfcHJlZCAgICAgICAgID0gRlVOQyhp
bnRyYV9wcmVkKTsKKyAgICBpbnRyYS0+cHJlZF9wbGFuYXIgICAgICAgID0gRlVOQyhwcmVkX3Bs
YW5hcik7CisgICAgaW50cmEtPnByZWRfbWlwICAgICAgICAgICA9IEZVTkMocHJlZF9taXApOwor
ICAgIGludHJhLT5wcmVkX2RjICAgICAgICAgICAgPSBGVU5DKHByZWRfZGMpOworICAgIGludHJh
LT5wcmVkX3YgICAgICAgICAgICAgPSBGVU5DKHByZWRfdik7CisgICAgaW50cmEtPnByZWRfaCAg
ICAgICAgICAgICA9IEZVTkMocHJlZF9oKTsKKyAgICBpbnRyYS0+cHJlZF9hbmd1bGFyX3YgICAg
ID0gRlVOQyhwcmVkX2FuZ3VsYXJfdik7CisgICAgaW50cmEtPnByZWRfYW5ndWxhcl9oICAgICA9
IEZVTkMocHJlZF9hbmd1bGFyX2gpOworfQotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZm
bXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZv
L2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWls
CmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmli
ZSIuCg==