From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B9E9847340 for ; Tue, 5 Sep 2023 13:08:10 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5E46E68C7DF; Tue, 5 Sep 2023 16:08:07 +0300 (EEST) Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2036.outbound.protection.outlook.com [40.92.53.36]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 428A268C626 for ; Tue, 5 Sep 2023 16:08:00 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZUMR7HyorogjihlPd6rE35rFB5RjjYv5Pkcf4jAZFi86b3kMldry0cz1U4s/xVXz49hd4fhmiDlDPD0ZUtYL+cFe8nLsPz2a0S6bzw8TUFH3BGLJB717Xbj9/YS6m8XXA/rHVXMDzHpc/0OShqpkkHi8XC6o5jQXOjlQty14s7/bSinutEJBhTgArEOB5E++3Rd/Hisonuvr1oa7sgaxsdiX4lV9q9OWEaAx6nb9zFPjiMiBXcC2v0ZCMbBpDhMoHXL1mQoi01MHGa5ayKUuiE22Kwuozkn1bDfPNkwviq2IYj0plGdSu2WjrL+EC1ZFQfi538AMO2STdSP4uX1seQ== 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=GKg+hqn+px2r/tYw2+hHBS6liOElNyaDZQlsPUZv3aU=; b=Oinaob4YLCheOp1ToV+KEdd587x1XMDKtJCIjweMvZq+6D76c+31YyFOTzBx1kFSjoEGzcbI1e8vng2Ys/MRDbbRvdCoX3D2KmUbCtEqFATatqLdWEzwfOT1YgnCpYtNxdxuYk8eRvmck51DitlQn8ro+kZcdMWlDnRH0wAdkMrxoLQKYDaYjfpsMejOVrIpnI/l9owWzenTQLw8enB1TYnVrDWkMVkxp2GSLI1k/FvbTKQ8Y7BX8MUGF4CA3kcQxmiNZn2IkXlMFF0HYwbRcTwNB2A6FunDwdL0HRq9esVxuzHoNfJuM/j/qjp7co1EPQ6KjEHzyWVZ5JSxvhqmvw== 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=GKg+hqn+px2r/tYw2+hHBS6liOElNyaDZQlsPUZv3aU=; b=MvMc8kp+uoBHPtwglZWGBk4folATuSwK/ziikx1xMNl3U3vsEUEHrw7DoRI6NwwoVPQHUc1DFn1Rw6gxlZK5xzmVmlT/xqV5j/CW2ngpxxRKzr4+/RvsYsCSEkCRvPWC0lFt0z0kZmEID/5AdR2wMHzmjmPA2sf/kd026Iryq3hgaz6tbm7C6IZSxTh4k1a98B+wWW2JEkaWku+6rm3U5iu3CTGTaCJ1PpfKcXJYdN4KA0AXswATVfvPOdJPAmPEV8kxKIZTNQbrFl/NFR6/2eQIgNYePf4jMrMI9e1pmjCAXUtlX23eOnIJ6RzBTOW3BHm/Nyc3N5z2ePMF14W18Q== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by KL1PR06MB6790.apcprd06.prod.outlook.com (2603:1096:820:ff::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.32; Tue, 5 Sep 2023 13:07:54 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::f1a4:bbff:7592:ee31]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::f1a4:bbff:7592:ee31%5]) with mapi id 15.20.6745.030; Tue, 5 Sep 2023 13:07:54 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Sep 2023 21:07:41 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: X-TMN: [i8V8ezdqkk54XJvgf6fosw/8+VL4zUcZ] X-ClientProxiedBy: TYCP286CA0317.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3b7::7) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20230905130741.2915-1-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|KL1PR06MB6790:EE_ X-MS-Office365-Filtering-Correlation-Id: 177b232d-a542-429f-72d6-08dbae111ddb X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uzG/tB9hgqCvo68rIbHETg+CSX9kk7xVMUQ4c3yapzT6Bz6LqC+43UOPIfPgRA2leH4mAzrfiPiCZKGH6ECGjW1txIRN7c/OeopswxEDYPCwCk32SnSigMdSRP9SpuY1IF+MPJKaScPsCRbvvS7MFLw9rPtMakaKvWS11MzTtZt1IzBMkOry0B0wbGcHkenbA57YpE2tsgf9e8Ho9xO8l9G9+ODuZ5HrdJhsAR413RmCU2RRTL/ggNLFnhNeYMIKhhoab6Do5AIZSdf434j5jNL35qXXwB0RQtZPjRFuohK2r+cuZ3Oxq5/aEyYvK1940rHz3dgPKaZ4rRq2K3kSf4VuNfYqYXUiK21rpTLB+WGDFWlCEhcS9MwYqwB0sfkMdw4leDLg7+I8CtqB0I1DAI+snlUc16A3QM774muTPju4rekqDu+l+/4ZTrHcmaWDGNuRZwxZTJ8gke2uOrUrJnC9kj1En7pPg4s3tCeJaFe/9RS9Ils6UU8wZBJE+3xiaR7SxOJXaaGbLxUuwVdgeHfHmLD5unZfp6qg0cpNXzQNngyRsg3oC6+XEBbPk5/QRzMoYMoBUaXFkFk/QkicufRJjI4WiXzpupQwYSYtquKgTawmoPbG3SRBhUcq6GvB X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TKT4oCVweGsim9S1x0VVn8+OBMrRzRWfqTN3lRxr/dhqRmZwuoq0Y8su8W8/0h/KvRjdAQ87mZjAyGWN3NK139727o312jhOULLfIN2Vr8W37AjfX41necYlCOl962KRL9TbK4aBEPhugEKmQlRF03nJ1tpWeEvL+582t5r0b+kLPW1Td7fu7mJFLr2LB1B6R3JJ7/2J6UO0j84RDqofkQEQ5ItykD92ovtIQNdciyriIQlBedtJJcVjQbd9xcBuUmNi1zE4uqPVGx44E/+RtuVqvNZ3wWN7+4llCUHauYX/FRXqOsauBUAai4Rj7Ui/2vG52W6XYCC6JBnpw++ZM2wELzmglzCig82Lj6LevYCyRc67ou4bGXdAZSN74gahlikVKb6iYqIf1u1cXOUiyegws4smjNnzqz5ruY+aY2Q= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 177b232d-a542-429f-72d6-08dbae111ddb X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Sep 2023 13:07:54.7658 (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: KL1PR06MB6790 Subject: [FFmpeg-devel] [PATCH v4] vvcdec: add parameter parser for sps, pps, ph, sh X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Nuo Mi Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSB8ICAgIDMgKy0KIGxpYmF2Y29kZWMvdnZjL3Z2 Y19wcy5jIHwgMTMwNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxp YmF2Y29kZWMvdnZjL3Z2Y19wcy5oIHwgIDI3NCArKysrKysrKwogbGliYXZjb2RlYy92dmMvdnZj ZGVjLmggfCAgICA0ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTU4NiBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNfcHMuaAoKZGlmZiAtLWdpdCBhL2xp YmF2Y29kZWMvdnZjL01ha2VmaWxlIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggMTA0 YjE3ZGIyOS4uM2VhNDMwZjYxYSAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUK KysrIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKQEAgLTIsNCArMiw1IEBAIGNsZWFuOjoKIAkk KFJNKSAkKENMRUFOU1VGRklYRVM6JT1saWJhdmNvZGVjL3Z2Yy8lKQogCiBPQkpTLSQoQ09ORklH X1ZWQ19ERUNPREVSKSAgICAgICAgICArPSAgdnZjL3Z2Y2RlYy5vICAgICAgICAgICAgXAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfZGF0YS5vCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19kYXRhLm8gICAgICAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfcHMu bwpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMgYi9saWJhdmNvZGVjL3Z2Yy92 dmNfcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zNDEwYmRhNGJi Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKQEAgLTAsMCArMSwx MzA2IEBACisvKgorICogVlZDIHBhcmFtZXRlciBzZXQgcGFyc2VyCisgKgorICogQ29weXJpZ2h0 IChDKSAyMDIzIE51byBNaQorICogQ29weXJpZ2h0IChDKSAyMDIyIFh1IE11CisgKgorICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSAibGliYXZjb2RlYy9jYnNfaDI2 Ni5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgorI2luY2x1ZGUgInZ2Y19kYXRh LmgiCisjaW5jbHVkZSAidnZjX3BzLmgiCisjaW5jbHVkZSAidnZjZGVjLmgiCisKKwordHlwZWRl ZiB2b2lkICgqZnJlZV9mbikodWludDhfdCAqZGF0YSk7CisKK3N0YXRpYyB2b2lkIHBzX2ZyZWUo dm9pZCAqb3BhcXVlLCB1aW50OF90ICpkYXRhKQoreworICAgIGZyZWVfZm4gZnJlZSA9IChmcmVl X2ZuKW9wYXF1ZTsKKworICAgIGZyZWUoZGF0YSk7CisgICAgYXZfZnJlZXAoJmRhdGEpOworfQor CitzdGF0aWMgQVZCdWZmZXJSZWYqIHBzX2FsbG9jKHNpemVfdCBzaXplLCBmcmVlX2ZuIGZyZWUp Cit7CisgICAgQVZCdWZmZXJSZWYgKmJ1ZjsKKyAgICB1aW50OF90ICpkYXRhID0gYXZfbWFsbG9j eihzaXplKTsKKworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBi dWYgPSBhdl9idWZmZXJfY3JlYXRlKGRhdGEsIHNpemUsIHBzX2ZyZWUsIGZyZWUsIDApOworICAg IGlmICghYnVmKQorICAgICAgICBhdl9mcmVlcCgmZGF0YSk7CisKKyAgICByZXR1cm4gYnVmOwor fQorCitzdGF0aWMgaW50IHNwc19tYXBfcGl4ZWxfZm9ybWF0KFZWQ1NQUyAqc3BzLCB2b2lkICps b2dfY3R4KQoreworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7CisgICAgY29uc3Qg QVZQaXhGbXREZXNjcmlwdG9yICpkZXNjOworCisgICAgc3dpdGNoIChzcHMtPmJpdF9kZXB0aCkg eworICAgIGNhc2UgODoKKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAw KSBzcHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX0dSQVk4OworICAgICAgICBpZiAoci0+c3BzX2No cm9tYV9mb3JtYXRfaWRjID09IDEpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDsK KyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAyKSBzcHMtPnBpeF9mbXQg PSBBVl9QSVhfRk1UX1lVVjQyMlA7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9p ZGMgPT0gMykgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQOworICAgICAgIGJyZWFr OworICAgIGNhc2UgMTA6CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0g MCkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTA7CisgICAgICAgIGlmIChyLT5zcHNf Y2hyb21hX2Zvcm1hdF9pZGMgPT0gMSkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjBQ MTA7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMikgc3BzLT5waXhf Zm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTA7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zv cm1hdF9pZGMgPT0gMykgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQMTA7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgMTI6CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1h dF9pZGMgPT0gMCkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTI7CisgICAgICAgIGlm IChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMSkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZN VF9ZVVY0MjBQMTI7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMikg c3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTI7CisgICAgICAgIGlmIChyLT5zcHNf Y2hyb21hX2Zvcm1hdF9pZGMgPT0gMykgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQ MTI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGF2X2xvZyhsb2dfY3R4 LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiVGhlIGZvbGxvd2luZyBiaXQtZGVwdGhz IGFyZSBjdXJyZW50bHkgc3BlY2lmaWVkOiA4LCAxMCwgMTIgYml0cywgIgorICAgICAgICAgICAg ICAgImNocm9tYV9mb3JtYXRfaWRjIGlzICVkLCBkZXB0aCBpcyAlZFxuIiwKKyAgICAgICAgICAg ICAgIHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYywgc3BzLT5iaXRfZGVwdGgpOworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICBkZXNjID0gYXZfcGl4X2Zt dF9kZXNjX2dldChzcHMtPnBpeF9mbXQpOworICAgIGlmICghZGVzYykKKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKKworICAgIHNwcy0+aHNoaWZ0WzBdID0gc3BzLT52c2hpZnRbMF0g PSAwOworICAgIHNwcy0+aHNoaWZ0WzJdID0gc3BzLT5oc2hpZnRbMV0gPSBkZXNjLT5sb2cyX2No cm9tYV93OworICAgIHNwcy0+dnNoaWZ0WzJdID0gc3BzLT52c2hpZnRbMV0gPSBkZXNjLT5sb2cy X2Nocm9tYV9oOworCisgICAgc3BzLT5waXhlbF9zaGlmdCA9IHNwcy0+Yml0X2RlcHRoID4gODsK KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwc19iaXRfZGVwdGgoVlZDU1BTICpz cHMsIHZvaWQgKmxvZ19jdHgpCit7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsK KworICAgIHNwcy0+Yml0X2RlcHRoID0gci0+c3BzX2JpdGRlcHRoX21pbnVzOCArIDg7CisgICAg c3BzLT5xcF9iZF9vZmZzZXQgPSA2ICogKHNwcy0+Yml0X2RlcHRoIC0gOCk7CisgICAgc3BzLT5s b2cyX3RyYW5zZm9ybV9yYW5nZSA9CisgICAgICAgIHItPnNwc19leHRlbmRlZF9wcmVjaXNpb25f ZmxhZyA/IEZGTUFYKDE1LCBGRk1JTigyMCwgc3BzLT5iaXRfZGVwdGggKyA2KSkgOiAxNTsKKyAg ICByZXR1cm4gc3BzX21hcF9waXhlbF9mb3JtYXQoc3BzLCBsb2dfY3R4KTsKK30KKworc3RhdGlj IGludCBzcHNfY2hyb21hX3FwX3RhYmxlKFZWQ1NQUyAqc3BzKQoreworICAgIGNvbnN0IEgyNjZS YXdTUFMgKnIgPSBzcHMtPnI7CisgICAgY29uc3QgaW50IG51bV9xcF90YWJsZXMgPSByLT5zcHNf c2FtZV9xcF90YWJsZV9mb3JfY2hyb21hX2ZsYWcgPworICAgICAgICAxIDogKHItPnNwc19qb2lu dF9jYmNyX2VuYWJsZWRfZmxhZyA/IDMgOiAyKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bnVtX3FwX3RhYmxlczsgaSsrKSB7CisgICAgICAgIGludCBudW1fcG9pbnRzX2luX3FwX3RhYmxl OworICAgICAgICBpbnQ4X3QgcXBfaW5bVlZDX01BWF9QT0lOVFNfSU5fUVBfVEFCTEVdLCBxcF9v dXRbVlZDX01BWF9QT0lOVFNfSU5fUVBfVEFCTEVdOworICAgICAgICB1bnNpZ25lZCBpbnQgZGVs dGFfcXBfaW5bVlZDX01BWF9QT0lOVFNfSU5fUVBfVEFCTEVdOworICAgICAgICBpbnQgb2ZmID0g c3BzLT5xcF9iZF9vZmZzZXQ7CisKKyAgICAgICAgbnVtX3BvaW50c19pbl9xcF90YWJsZSA9IHIt PnNwc19udW1fcG9pbnRzX2luX3FwX3RhYmxlX21pbnVzMVtpXSArIDE7CisKKyAgICAgICAgcXBf b3V0WzBdID0gcXBfaW5bMF0gPSByLT5zcHNfcXBfdGFibGVfc3RhcnRfbWludXMyNltpXSArIDI2 OworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bV9wb2ludHNfaW5fcXBfdGFibGU7IGor KyApIHsKKyAgICAgICAgICAgIGRlbHRhX3FwX2luW2pdID0gci0+c3BzX2RlbHRhX3FwX2luX3Zh bF9taW51czFbaV1bal0gKyAxOworICAgICAgICAgICAgcXBfaW5baisxXSA9IHFwX2luW2pdICsg ZGVsdGFfcXBfaW5bal07CisgICAgICAgICAgICBxcF9vdXRbaisxXSA9IHFwX291dFtqXSArIChy LT5zcHNfZGVsdGFfcXBfaW5fdmFsX21pbnVzMVtpXVtqXSBeIHItPnNwc19kZWx0YV9xcF9kaWZm X3ZhbFtpXVtqXSk7CisgICAgICAgIH0KKyAgICAgICAgc3BzLT5jaHJvbWFfcXBfdGFibGVbaV1b cXBfaW5bMF0gKyBvZmZdID0gcXBfb3V0WzBdOworICAgICAgICBmb3IgKGludCBrID0gcXBfaW5b MF0gLSAxICsgb2ZmOyBrID49IDA7IGstLSkKKyAgICAgICAgICAgIHNwcy0+Y2hyb21hX3FwX3Rh YmxlW2ldW2tdID0gYXZfY2xpcChzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrKzFdLTEsIC1vZmYs IDYzKTsKKworICAgICAgICBmb3IgKGludCBqICA9IDA7IGogPCBudW1fcG9pbnRzX2luX3FwX3Rh YmxlOyBqKyspIHsKKyAgICAgICAgICAgIGludCBzaCA9IGRlbHRhX3FwX2luW2pdID4+IDE7Cisg ICAgICAgICAgICBmb3IgKGludCBrID0gcXBfaW5bal0gKyAxICsgb2ZmLCBtID0gMTsgayA8PSBx cF9pbltqKzFdICsgb2ZmOyBrKyssIG0rKykgeworICAgICAgICAgICAgICAgIHNwcy0+Y2hyb21h X3FwX3RhYmxlW2ldW2tdID0gc3BzLT5jaHJvbWFfcXBfdGFibGVbaV1bcXBfaW5bal0gKyBvZmZd ICsKKyAgICAgICAgICAgICAgICAgICAgKChxcF9vdXRbaisxXSAtIHFwX291dFtqXSkgKiBtICsg c2gpIC8gZGVsdGFfcXBfaW5bal07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg Zm9yIChpbnQgayA9IHFwX2luW251bV9wb2ludHNfaW5fcXBfdGFibGVdICsgMSArIG9mZjsgayA8 PSA2MyArIG9mZjsgaysrKQorICAgICAgICAgICAgc3BzLT5jaHJvbWFfcXBfdGFibGVbaV1ba10g ID0gYXZfY2xpcChzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrLTFdICsgMSwgLXNwcy0+cXBfYmRf b2Zmc2V0LCA2Myk7CisgICAgfQorICAgIGlmIChyLT5zcHNfc2FtZV9xcF90YWJsZV9mb3JfY2hy b21hX2ZsYWcpIHsKKyAgICAgICAgbWVtY3B5KCZzcHMtPmNocm9tYV9xcF90YWJsZVsxXSwgJnNw cy0+Y2hyb21hX3FwX3RhYmxlWzBdLCBzaXplb2Yoc3BzLT5jaHJvbWFfcXBfdGFibGVbMF0pKTsK KyAgICAgICAgbWVtY3B5KCZzcHMtPmNocm9tYV9xcF90YWJsZVsyXSwgJnNwcy0+Y2hyb21hX3Fw X3RhYmxlWzBdLCBzaXplb2Yoc3BzLT5jaHJvbWFfcXBfdGFibGVbMF0pKTsKKyAgICB9CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BzX3BvYyhWVkNTUFMgKnNwcykKK3sKKyAg ICBzcHMtPm1heF9waWNfb3JkZXJfY250X2xzYiA9IDEgPDwgKHNwcy0+ci0+c3BzX2xvZzJfbWF4 X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCArIDQpOworfQorCitzdGF0aWMgdm9pZCBzcHNfaW50 ZXIoVlZDU1BTICpzcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsKKwor ICAgIHNwcy0+bWF4X251bV9tZXJnZV9jYW5kICAgICA9IDYgLSByLT5zcHNfc2l4X21pbnVzX21h eF9udW1fbWVyZ2VfY2FuZDsKKyAgICBzcHMtPm1heF9udW1faWJjX21lcmdlX2NhbmQgPSA2IC0g ci0+c3BzX3NpeF9taW51c19tYXhfbnVtX2liY19tZXJnZV9jYW5kOworCisgICAgaWYgKHNwcy0+ ci0+c3BzX2dwbV9lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgc3BzLT5tYXhfbnVtX2dwbV9tZXJn ZV9jYW5kID0gMjsKKyAgICAgICAgaWYgKHNwcy0+bWF4X251bV9tZXJnZV9jYW5kID49IDMpCisg ICAgICAgICAgICBzcHMtPm1heF9udW1fZ3BtX21lcmdlX2NhbmQgPSBzcHMtPm1heF9udW1fbWVy Z2VfY2FuZCAtIHItPnNwc19tYXhfbnVtX21lcmdlX2NhbmRfbWludXNfbWF4X251bV9ncG1fY2Fu ZDsKKyAgICB9CisKKyAgICBzcHMtPmxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWwgPSByLT5zcHNf bG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czIgKyAyOworfQorCitzdGF0aWMgdm9pZCBz cHNfcGFydGl0aW9uX2NvbnN0cmFpbnRzKFZWQ1NQUyogc3BzKQoreworICAgIGNvbnN0IEgyNjZS YXdTUFMgKnIgPSBzcHMtPnI7CisKKyAgICBzcHMtPmN0Yl9sb2cyX3NpemVfeSAgICA9IHItPnNw c19sb2cyX2N0dV9zaXplX21pbnVzNSArIDU7CisgICAgc3BzLT5jdGJfc2l6ZV95ICAgICAgICAg PSAxIDw8IHNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95 ID0gci0+c3BzX2xvZzJfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMyICsgMjsKKyAg ICBzcHMtPm1pbl9jYl9zaXplX3kgICAgICA9IDEgPDwgc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7 CisgICAgc3BzLT5tYXhfdGJfc2l6ZV95ICAgICAgPSAxIDw8IChyLT5zcHNfbWF4X2x1bWFfdHJh bnNmb3JtX3NpemVfNjRfZmxhZyA/IDYgOiA1KTsKKyAgICBzcHMtPm1heF90c19zaXplICAgICAg ICA9IDEgPDwgKHItPnNwc19sb2cyX3RyYW5zZm9ybV9za2lwX21heF9zaXplX21pbnVzMiArIDIp OworfQorCitzdGF0aWMgdm9pZCBzcHNfbGFkZihWVkNTUFMqIHNwcykKK3sKKyAgICBjb25zdCBI MjY2UmF3U1BTICpyID0gc3BzLT5yOworCisgICAgaWYgKHItPnNwc19sYWRmX2VuYWJsZWRfZmxh ZykgeworICAgICAgICBzcHMtPm51bV9sYWRmX2ludGVydmFscyA9IHItPnNwc19udW1fbGFkZl9p bnRlcnZhbHNfbWludXMyICsgMjsKKyAgICAgICAgc3BzLT5sYWRmX2ludGVydmFsX2xvd2VyX2Jv dW5kWzBdID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcHMtPm51bV9sYWRmX2lu dGVydmFscyAtIDE7IGkrKykgeworICAgICAgICAgICAgc3BzLT5sYWRmX2ludGVydmFsX2xvd2Vy X2JvdW5kW2kgKyAxXSA9CisgICAgICAgICAgICAgICAgc3BzLT5sYWRmX2ludGVydmFsX2xvd2Vy X2JvdW5kW2ldICsgci0+c3BzX2xhZGZfZGVsdGFfdGhyZXNob2xkX21pbnVzMVtpXSArIDE7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgc3BzX2Rlcml2ZShWVkNTUFMgKnNwcywg dm9pZCAqbG9nX2N0eCkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIg PSBzcHMtPnI7CisKKyAgICBzcHMtPndpZHRoICA9IHItPnNwc19waWNfd2lkdGhfbWF4X2luX2x1 bWFfc2FtcGxlczsKKyAgICBzcHMtPmhlaWdodCA9IHItPnNwc19waWNfaGVpZ2h0X21heF9pbl9s dW1hX3NhbXBsZXM7CisKKyAgICByZXQgPSBzcHNfYml0X2RlcHRoKHNwcywgbG9nX2N0eCk7Cisg ICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgc3BzX3BvYyhzcHMpOwor ICAgIHNwc19pbnRlcihzcHMpOworICAgIHNwc19wYXJ0aXRpb25fY29uc3RyYWludHMoc3BzKTsK KyAgICBzcHNfbGFkZihzcHMpOworICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgIT0g MCkKKyAgICAgICAgc3BzX2Nocm9tYV9xcF90YWJsZShzcHMpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIHNwc19mcmVlKHVpbnQ4X3QgKmRhdGEpCit7CisgICAgVlZDU1BTICpz cHMgPSAoVlZDU1BTKilkYXRhOworICAgIGF2X2J1ZmZlcl91bnJlZigmc3BzLT5ycmVmKTsKK30K Kworc3RhdGljIEFWQnVmZmVyUmVmICpzcHNfYWxsb2MoY29uc3QgSDI2NlJhd1NQUyAqcnNwcywg QVZCdWZmZXJSZWYgKnJzcHNfYnVmLCB2b2lkICpsb2dfY3R4KQoreworICAgIGludCByZXQ7Cisg ICAgVlZDU1BTICpzcHM7CisgICAgQVZCdWZmZXJSZWYgKnNwc19idWYgPSBwc19hbGxvYyhzaXpl b2YoKnNwcyksIHNwc19mcmVlKTsKKworICAgIGlmICghc3BzX2J1ZikKKyAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgc3BzID0gKFZWQ1NQUyAqKXNwc19idWYtPmRhdGE7CisKKyAgICByZXQgPSBh dl9idWZmZXJfcmVwbGFjZSgmc3BzLT5ycmVmLCByc3BzX2J1Zik7CisgICAgaWYgKHJldCA8IDAp CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBzcHMtPnIgPSByc3BzOworCisgICAgcmV0ID0gc3Bz X2Rlcml2ZShzcHMsIGxvZ19jdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGZh aWw7CisKKyAgICByZXR1cm4gc3BzX2J1ZjsKKworZmFpbDoKKyAgICBhdl9idWZmZXJfdW5yZWYo JnNwc19idWYpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRlY29kZV9zcHMo VlZDUGFyYW1TZXRzICpwcywKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyc3BzLCBBVkJ1ZmZlclJl ZiAqcnNwc19idWYsIHZvaWQgKmxvZ19jdHgpCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBp bnQgc3BzX2lkID0gcnNwcy0+c3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkOworICAgIEFWQnVmZmVy UmVmICpzcHNfYnVmID0gcHMtPnNwc19saXN0W3Nwc19pZF07CisKKyAgICBpZiAoc3BzX2J1ZiAm JiAoKFZWQ1NQUyAqKXNwc19idWYtPmRhdGEpLT5yID09IHJzcHMpCisgICAgICAgIHJldHVybiAw OworCisgICAgc3BzX2J1ZiA9IHNwc19hbGxvYyhyc3BzLCByc3BzX2J1ZiwgbG9nX2N0eCk7Cisg ICAgaWYgKCFzcHNfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAg cmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJnBzLT5zcHNfbGlzdFtzcHNfaWRdLCBzcHNfYnVmKTsK KworICAgIGF2X2J1ZmZlcl91bnJlZigmc3BzX2J1Zik7CisgICAgcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgcHBzX2Nocm9tYV9xcF9vZmZzZXQoVlZDUFBTICpwcHMpCit7CisgICAgcHBz LT5jaHJvbWFfcXBfb2Zmc2V0W0NCIC0gMV0gICA9IHBwcy0+ci0+cHBzX2NiX3FwX29mZnNldDsK KyAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRbQ1IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY3JfcXBf b2Zmc2V0OworICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldFtKQ0JDUiAtIDFdPSBwcHMtPnItPnBw c19qb2ludF9jYmNyX3FwX29mZnNldF92YWx1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7 IGkrKykgeworICAgICAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdFtpXVtDQiAtIDFdICAg PSBwcHMtPnItPnBwc19jYl9xcF9vZmZzZXRfbGlzdFtpXTsKKyAgICAgICAgcHBzLT5jaHJvbWFf cXBfb2Zmc2V0X2xpc3RbaV1bQ1IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY3JfcXBfb2Zmc2V0X2xp c3RbaV07CisgICAgICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldF9saXN0W2ldW0pDQkNSIC0gMV09 IHBwcy0+ci0+cHBzX2pvaW50X2NiY3JfcXBfb2Zmc2V0X2xpc3RbaV07CisgICAgfQorfQorCitz dGF0aWMgdm9pZCBwcHNfd2lkdGhfaGVpZ2h0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNw cykKK3sKKyAgICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBzLT5yOworCisgICAgcHBzLT53aWR0 aCAgICAgICAgICA9IHItPnBwc19waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOworICAgIHBwcy0+ aGVpZ2h0ICAgICAgICAgPSByLT5wcHNfcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXM7CisKKyAg ICBwcHMtPmN0Yl93aWR0aCAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT53aWR0aCwgIHNwcy0+ Y3RiX2xvZzJfc2l6ZV95KTsKKyAgICBwcHMtPmN0Yl9oZWlnaHQgICAgID0gQVZfQ0VJTF9SU0hJ RlQocHBzLT5oZWlnaHQsIHNwcy0+Y3RiX2xvZzJfc2l6ZV95KTsKKyAgICBwcHMtPmN0Yl9jb3Vu dCAgICAgID0gcHBzLT5jdGJfd2lkdGggKiBwcHMtPmN0Yl9oZWlnaHQ7CisKKyAgICBwcHMtPm1p bl9jYl93aWR0aCAgID0gcHBzLT53aWR0aCAgPj4gc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7Cisg ICAgcHBzLT5taW5fY2JfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IHNwcy0+bWluX2NiX2xvZzJf c2l6ZV95OworCisgICAgcHBzLT5taW5fcHVfd2lkdGggICA9IHBwcy0+d2lkdGggID4+IE1JTl9Q VV9MT0cyOworICAgIHBwcy0+bWluX3B1X2hlaWdodCAgPSBwcHMtPmhlaWdodCA+PiBNSU5fUFVf TE9HMjsKKyAgICBwcHMtPm1pbl90dV93aWR0aCAgID0gcHBzLT53aWR0aCAgPj4gTUlOX1RVX0xP RzI7CisgICAgcHBzLT5taW5fdHVfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IE1JTl9UVV9MT0cy OworCisgICAgcHBzLT53aWR0aDMyICAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+d2lkdGgs ICA1KTsKKyAgICBwcHMtPmhlaWdodDMyICAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT5oZWln aHQsIDUpOworICAgIHBwcy0+d2lkdGg2NCAgICAgICAgPSBBVl9DRUlMX1JTSElGVChwcHMtPndp ZHRoLCAgNik7CisgICAgcHBzLT5oZWlnaHQ2NCAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+ aGVpZ2h0LCA2KTsKK30KKworc3RhdGljIGludCBwcHNfYmQoVlZDUFBTICpwcHMpCit7CisgICAg Y29uc3QgSDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKworICAgIHBwcy0+Y29sX2JkICAgICAgICA9 IGF2X2NhbGxvYyhyLT5udW1fdGlsZV9jb2x1bW5zICArIDEsIHNpemVvZigqcHBzLT5jb2xfYmQp KTsKKyAgICBwcHMtPnJvd19iZCAgICAgICAgPSBhdl9jYWxsb2Moci0+bnVtX3RpbGVfcm93cyAg KyAxLCAgICBzaXplb2YoKnBwcy0+cm93X2JkKSk7CisgICAgcHBzLT5jdGJfdG9fY29sX2JkID0g YXZfY2FsbG9jKHBwcy0+Y3RiX3dpZHRoICArIDEsICAgICAgc2l6ZW9mKCpwcHMtPmN0Yl90b19j b2xfYmQpKTsKKyAgICBwcHMtPmN0Yl90b19yb3dfYmQgPSBhdl9jYWxsb2MocHBzLT5jdGJfaGVp Z2h0ICsgMSwgICAgICBzaXplb2YoKnBwcy0+Y3RiX3RvX2NvbF9iZCkpOworICAgIGlmICghcHBz LT5jb2xfYmQgfHwgIXBwcy0+cm93X2JkIHx8ICFwcHMtPmN0Yl90b19jb2xfYmQgfHwgIXBwcy0+ Y3RiX3RvX3Jvd19iZCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZv ciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHItPm51bV90aWxlX2NvbHVtbnM7IGkrKykgeworICAg ICAgICBwcHMtPmNvbF9iZFtpXSA9IGo7CisgICAgICAgIGogKz0gci0+Y29sX3dpZHRoX3ZhbFtp XTsKKyAgICAgICAgZm9yIChpbnQgayA9IHBwcy0+Y29sX2JkW2ldOyBrIDwgajsgaysrKQorICAg ICAgICAgICAgcHBzLT5jdGJfdG9fY29sX2JkW2tdID0gcHBzLT5jb2xfYmRbaV07CisgICAgfQor CisgICAgZm9yIChpbnQgaSA9IDAsIGogPSAwOyBpIDwgci0+bnVtX3RpbGVfcm93czsgaSsrKSB7 CisgICAgICAgIHBwcy0+cm93X2JkW2ldID0gajsKKyAgICAgICAgaiArPSByLT5yb3dfaGVpZ2h0 X3ZhbFtpXTsKKyAgICAgICAgZm9yIChpbnQgayA9IHBwcy0+cm93X2JkW2ldOyBrIDwgajsgaysr KQorICAgICAgICAgICAgcHBzLT5jdGJfdG9fcm93X2JkW2tdID0gcHBzLT5yb3dfYmRbaV07Cisg ICAgfQorICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgbmV4dF90aWxlX2lkeChpbnQg dGlsZV9pZHgsIGNvbnN0IGludCBpLCBjb25zdCBIMjY2UmF3UFBTICpyKQoreworICAgIGlmIChy LT5wcHNfdGlsZV9pZHhfZGVsdGFfcHJlc2VudF9mbGFnKSB7CisgICAgICAgIHRpbGVfaWR4ICs9 IHItPnBwc190aWxlX2lkeF9kZWx0YV92YWxbaV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGls ZV9pZHggKz0gci0+cHBzX3NsaWNlX3dpZHRoX2luX3RpbGVzX21pbnVzMVtpXSArIDE7CisgICAg ICAgIGlmICh0aWxlX2lkeCAlIHItPm51bV90aWxlX2NvbHVtbnMgPT0gMCkKKyAgICAgICAgICAg IHRpbGVfaWR4ICs9IChyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3RpbGVzX21pbnVzMVtpXSkgKiBy LT5udW1fdGlsZV9jb2x1bW5zOworICAgIH0KKyAgICByZXR1cm4gdGlsZV9pZHg7Cit9CisKK3N0 YXRpYyB2b2lkIHRpbGVfeHkoaW50ICp0aWxlX3gsIGludCAqdGlsZV95LCBjb25zdCBpbnQgdGls ZV9pZHgsIGNvbnN0IFZWQ1BQUyAqcHBzKQoreworICAgICp0aWxlX3ggPSB0aWxlX2lkeCAlIHBw cy0+ci0+bnVtX3RpbGVfY29sdW1uczsKKyAgICAqdGlsZV95ID0gdGlsZV9pZHggLyBwcHMtPnIt Pm51bV90aWxlX2NvbHVtbnM7Cit9CisKK3N0YXRpYyB2b2lkIGN0dV94eShpbnQgKmN0dV94LCBp bnQgKmN0dV95LCBjb25zdCBpbnQgdGlsZV94LCBjb25zdCBpbnQgdGlsZV95LCBjb25zdCBWVkNQ UFMgKnBwcykKK3sKKyAgICAqY3R1X3ggPSBwcHMtPmNvbF9iZFt0aWxlX3hdOworICAgICpjdHVf eSA9IHBwcy0+cm93X2JkW3RpbGVfeV07Cit9CisKK3N0YXRpYyBpbnQgY3R1X3JzKGNvbnN0IGlu dCBjdHVfeCwgY29uc3QgaW50IGN0dV95LCBjb25zdCBWVkNQUFMgKnBwcykKK3sKKyAgICByZXR1 cm4gcHBzLT5jdGJfd2lkdGggKiBjdHVfeSArIGN0dV94OworfQorCitzdGF0aWMgaW50IHBwc19h ZGRfY3R1cyhWVkNQUFMgKnBwcywgaW50ICpvZmYsIGNvbnN0IGludCBjdHVfeCwgY29uc3QgaW50 IGN0dV95LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKK3sKKyAgICBpbnQgc3RhcnQg PSAqb2ZmOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGZvciAo aW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICBwcHMtPmN0Yl9hZGRyX2luX3Ns aWNlWypvZmZdID0gY3R1X3JzKGN0dV94ICsgeCwgY3R1X3kgKyB5LCBwcHMpOworICAgICAgICAg ICAgKCpvZmYpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICpvZmYgLSBzdGFydDsK K30KKworc3RhdGljIGludCBwcHNfb25lX3RpbGVfc2xpY2VzKFZWQ1BQUyAqcHBzLCBjb25zdCBp bnQgdGlsZV9pZHgsIGludCBpLCBpbnQgKm9mZikKK3sKKyAgICBjb25zdCBIMjY2UmF3UFBTICpy ID0gcHBzLT5yOworICAgIGludCBjdHVfeCwgY3R1X3ksIGN0dV95X2VuZCwgdGlsZV94LCB0aWxl X3k7CisKKyAgICB0aWxlX3h5KCZ0aWxlX3gsICZ0aWxlX3ksIHRpbGVfaWR4LCBwcHMpOworICAg IGN0dV94eSgmY3R1X3gsICZjdHVfeSwgdGlsZV94LCB0aWxlX3ksIHBwcyk7CisgICAgY3R1X3lf ZW5kID0gY3R1X3kgKyByLT5yb3dfaGVpZ2h0X3ZhbFt0aWxlX3ldOworICAgIHdoaWxlIChjdHVf eSA8IGN0dV95X2VuZCkgeworICAgICAgICBwcHMtPnNsaWNlX3N0YXJ0X29mZnNldFtpXSA9ICpv ZmY7CisgICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gPSBwcHNfYWRkX2N0dXMocHBz LCBvZmYsIGN0dV94LCBjdHVfeSwKKyAgICAgICAgICAgIHItPmNvbF93aWR0aF92YWxbdGlsZV94 XSwgci0+c2xpY2VfaGVpZ2h0X2luX2N0dXNbaV0pOworICAgICAgICBjdHVfeSArPSByLT5zbGlj ZV9oZWlnaHRfaW5fY3R1c1tpKytdOworICAgIH0KKyAgICBpLS07CisgICAgcmV0dXJuIGk7Cit9 CisKK3N0YXRpYyB2b2lkIHBwc19tdWx0aV90aWxlc19zbGljZShWVkNQUFMgKnBwcywgY29uc3Qg aW50IHRpbGVfaWR4LCBjb25zdCBpbnQgaSwgaW50ICpvZmYpCit7CisgICAgY29uc3QgSDI2NlJh d1BQUyAqciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LHRpbGVfeCwgdGlsZV95Owor CisgICAgdGlsZV94eSgmdGlsZV94LCAmdGlsZV95LCB0aWxlX2lkeCwgcHBzKTsKKyAgICBwcHMt PnNsaWNlX3N0YXJ0X29mZnNldFtpXSA9ICpvZmY7CisgICAgcHBzLT5udW1fY3R1c19pbl9zbGlj ZVtpXSA9IDA7CisgICAgZm9yIChpbnQgdHkgPSB0aWxlX3k7IHR5IDw9IHRpbGVfeSArIHItPnBw c19zbGljZV9oZWlnaHRfaW5fdGlsZXNfbWludXMxW2ldOyB0eSsrKSB7CisgICAgICAgIGZvciAo aW50IHR4ID0gdGlsZV94OyB0eCA8PSB0aWxlX3ggKyByLT5wcHNfc2xpY2Vfd2lkdGhfaW5fdGls ZXNfbWludXMxW2ldOyB0eCsrKSB7CisgICAgICAgICAgICBjdHVfeHkoJmN0dV94LCAmY3R1X3ks IHR4LCB0eSwgcHBzKTsKKyAgICAgICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gKz0g cHBzX2FkZF9jdHVzKHBwcywgb2ZmLCBjdHVfeCwgY3R1X3ksCisgICAgICAgICAgICAgICAgci0+ Y29sX3dpZHRoX3ZhbFt0eF0sIHItPnJvd19oZWlnaHRfdmFsW3R5XSk7CisgICAgICAgIH0KKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkIHBwc19yZWN0X3NsaWNlKFZWQ1BQUyogcHBzKQoreworICAg IGNvbnN0IEgyNjZSYXdQUFMqIHIgPSBwcHMtPnI7CisgICAgaW50IHRpbGVfaWR4ID0gMCwgb2Zm ID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgci0+cHBzX251bV9zbGljZXNfaW5fcGlj X21pbnVzMSArIDE7IGkrKykgeworICAgICAgICBpZiAoIXItPnBwc19zbGljZV93aWR0aF9pbl90 aWxlc19taW51czFbaV0gJiYKKyAgICAgICAgICAgICFyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3Rp bGVzX21pbnVzMVtpXSkgeworICAgICAgICAgICAgaSA9IHBwc19vbmVfdGlsZV9zbGljZXMocHBz LCB0aWxlX2lkeCwgaSwgJm9mZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcHNf bXVsdGlfdGlsZXNfc2xpY2UocHBzLCB0aWxlX2lkeCwgaSwgJm9mZik7CisKKyAgICAgICAgfQor ICAgICAgICB0aWxlX2lkeCA9IG5leHRfdGlsZV9pZHgodGlsZV9pZHgsIGksIHIpOworICAgIH0K K30KKworc3RhdGljIHZvaWQgcHBzX25vX3JlY3Rfc2xpY2UoVlZDUFBTKiBwcHMpCit7CisgICAg Y29uc3QgSDI2NlJhd1BQUyogciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LCBvZmYg PSAwOworCisgICAgZm9yIChpbnQgdGlsZV95ID0gMDsgdGlsZV95IDwgci0+bnVtX3RpbGVfcm93 czsgdGlsZV95KyspIHsKKyAgICAgICAgZm9yIChpbnQgdGlsZV94ID0gMDsgdGlsZV94IDwgci0+ bnVtX3RpbGVfY29sdW1uczsgdGlsZV94KyspIHsKKyAgICAgICAgICAgIGN0dV94eSgmY3R1X3gs ICZjdHVfeSwgdGlsZV94LCB0aWxlX3ksIHBwcyk7CisgICAgICAgICAgICBwcHNfYWRkX2N0dXMo cHBzLCAmb2ZmLCBjdHVfeCwgY3R1X3ksIHItPmNvbF93aWR0aF92YWxbdGlsZV94XSwgci0+cm93 X2hlaWdodF92YWxbdGlsZV95XSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQg cHBzX3NsaWNlX21hcChWVkNQUFMgKnBwcykKK3sKKyAgICBwcHMtPmN0Yl9hZGRyX2luX3NsaWNl ID0gYXZfY2FsbG9jKHBwcy0+Y3RiX2NvdW50LCBzaXplb2YoKnBwcy0+Y3RiX2FkZHJfaW5fc2xp Y2UpKTsKKyAgICBpZiAoIXBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UpCisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisKKyAgICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGljZV9mbGFnKQor ICAgICAgICBwcHNfcmVjdF9zbGljZShwcHMpOworICAgIGVsc2UKKyAgICAgICAgcHBzX25vX3Jl Y3Rfc2xpY2UocHBzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcHNfcmVm X3dyYXBhcm91bmRfb2Zmc2V0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKK3sKKyAg ICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBzLT5yOworCisgICAgaWYgKHItPnBwc19yZWZfd3Jh cGFyb3VuZF9lbmFibGVkX2ZsYWcpCisgICAgICAgIHBwcy0+cmVmX3dyYXBhcm91bmRfb2Zmc2V0 ID0gKHBwcy0+d2lkdGggLyBzcHMtPm1pbl9jYl9zaXplX3kpIC0gci0+cHBzX3BpY193aWR0aF9t aW51c193cmFwYXJvdW5kX29mZnNldDsKK30KKworc3RhdGljIGludCBwcHNfZGVyaXZlKFZWQ1BQ UyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKK3sKKyAgICBpbnQgcmV0OworCisgICAgcHBzX2No cm9tYV9xcF9vZmZzZXQocHBzKTsKKyAgICBwcHNfd2lkdGhfaGVpZ2h0KHBwcywgc3BzKTsKKwor ICAgIHJldCA9IHBwc19iZChwcHMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgcmV0ID0gcHBzX3NsaWNlX21hcChwcHMpOworICAgIGlmIChyZXQgPCAwKQor ICAgICAgICByZXR1cm4gcmV0OworCisgICAgcHBzX3JlZl93cmFwYXJvdW5kX29mZnNldChwcHMs IHNwcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHBzX2ZyZWUodWludDhf dCAqZGF0YSkKK3sKKyAgICBWVkNQUFMgKnBwcyA9IChWVkNQUFMgKilkYXRhOworCisgICAgYXZf YnVmZmVyX3VucmVmKCZwcHMtPnJyZWYpOworCisgICAgYXZfZnJlZXAoJnBwcy0+Y29sX2JkKTsK KyAgICBhdl9mcmVlcCgmcHBzLT5yb3dfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19j b2xfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19yb3dfYmQpOworICAgIGF2X2ZyZWVw KCZwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKTsKK30KKworc3RhdGljIEFWQnVmZmVyUmVmICpwcHNf YWxsb2MoY29uc3QgSDI2NlJhd1BQUyAqcnBwcywgQVZCdWZmZXJSZWYgKnJwcHNfYnVmLCBjb25z dCBWVkNTUFMgKnNwcykKK3sKKyAgICBpbnQgcmV0OworICAgIEFWQnVmZmVyUmVmICpwcHNfYnVm OworICAgIFZWQ1BQUyAqcHBzOworCisgICAgcHBzX2J1ZiA9IHBzX2FsbG9jKHNpemVvZigqcHBz KSwgcHBzX2ZyZWUpOworICAgIGlmICghcHBzX2J1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgcHBzID0gKFZWQ1BQUyAqKXBwc19idWYtPmRhdGE7CisKKyAgICByZXQgPSBhdl9idWZmZXJf cmVwbGFjZSgmcHBzLT5ycmVmLCBycHBzX2J1Zik7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IGdvdG8gZmFpbDsKKyAgICBwcHMtPnIgPSBycHBzOworCisgICAgcmV0ID0gcHBzX2Rlcml2ZShw cHMsIHNwcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJl dHVybiBwcHNfYnVmOworCitmYWlsOgorICAgIGF2X2J1ZmZlcl91bnJlZigmcHBzX2J1Zik7Cisg ICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3BwcyhWVkNQYXJhbVNldHMg KnBzLAorICAgIGNvbnN0IEgyNjZSYXdQUFMgKnJwcHMsIEFWQnVmZmVyUmVmICpycHBzX2J1ZikK K3sKKyAgICBBVkJ1ZmZlclJlZiAqcHBzX2J1ZjsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjb25z dCBpbnQgcHBzX2lkID0gcnBwcy0+cHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkOworICAgIGNvbnN0 IGludCBzcHNfaWQgPSBycHBzLT5wcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ7CisKKyAgICBwcHNf YnVmID0gcHMtPnBwc19saXN0W3Bwc19pZF07CisgICAgaWYgKHBwc19idWYgJiYgKChWVkNQUFMq KXBwc19idWYtPmRhdGEpLT5yID09IHJwcHMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcHBz X2J1ZiA9IHBwc19hbGxvYyhycHBzLCBycHBzX2J1ZiwgKFZWQ1NQUyopKHBzLT5zcHNfbGlzdFtz cHNfaWRdLT5kYXRhKSk7CisgICAgaWYgKCFwcHNfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworCisgICAgcmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJnBzLT5wcHNfbGlzdFtw cHNfaWRdLCBwcHNfYnVmKTsKKworICAgIGF2X2J1ZmZlcl91bnJlZigmcHBzX2J1Zik7CisgICAg cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZWNvZGVfcHMoVlZDUGFyYW1TZXRzICpwcywg Y29uc3QgQ29kZWRCaXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2Niwgdm9pZCAqbG9nX2N0eCkKK3sK KyAgICBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGggPSBoMjY2LT5waDsKKyAgICBjb25z dCBIMjY2UmF3UFBTICpycHBzOworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnJzcHM7CisgICAgQVZC dWZmZXJSZWYgKnJzcHNfYnVmLCAqcnBwc19idWY7CisgICAgaW50IHJldDsKKworICAgIGlmICgh cGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgcnBwcyAgICAg PSBoMjY2LT5wcHNbcGgtPnBoX3BpY19wYXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBycHBzX2J1ZiA9 IGgyNjYtPnBwc19yZWZbcGgtPnBoX3BpY19wYXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBpZiAoIXJw cHMgfHwgIXJwcHNfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKwor ICAgIHJzcHMgICAgID0gaDI2Ni0+c3BzW3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZF07 CisgICAgcnNwc19idWYgPSBoMjY2LT5zcHNfcmVmW3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3Nl dF9pZF07CisgICAgaWYgKCFyc3BzIHx8ICFyc3BzX2J1ZikKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICByZXQgPSBkZWNvZGVfc3BzKHBzLCByc3BzLCByc3BzX2J1 ZiwgbG9nX2N0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAg ICByZXQgPSBkZWNvZGVfcHBzKHBzLCBycHBzLCBycHBzX2J1Zik7CisgICAgaWYgKHJldCA8IDAp CisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBXRUlH SFRfVEFCTEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdy0+bmJfd2VpZ2h0c1tM IyN4XSA9IHItPm51bV93ZWlnaHRzX2wjI3g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHct Pm5iX3dlaWdodHNbTCMjeF07IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB3LT53ZWlnaHRfZmxhZ1tMIyN4XVtMVU1B XVtpXSAgICAgPSByLT5sdW1hX3dlaWdodF9sIyN4IyNfZmxhZ1tpXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIHctPndlaWdodF9mbGFnW0wjI3hdW0NIUk9NQV1baV0g ICA9IHItPmNocm9tYV93ZWlnaHRfbCMjeCMjX2ZsYWdbaV07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgdy0+d2VpZ2h0W0wjI3hdW0xVTUFdW2ldICAgICAgICAgID0gZGVu b21bTFVNQV0gKyByLT5kZWx0YV9sdW1hX3dlaWdodF9sIyN4W2ldOyAgICAgICAgICAgICAgICAg XAorICAgICAgICB3LT5vZmZzZXRbTCMjeF1bTFVNQV1baV0gICAgICAgICAgPSByLT5sdW1hX29m ZnNldF9sIyN4W2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgIGZvciAoaW50IGogPSBDQjsgaiA8PSBDUjsgaisrKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg IHctPndlaWdodFtMIyN4XVtqXVtpXSAgICAgICAgID0gZGVub21bQ0hST01BXSArIHItPmRlbHRh X2Nocm9tYV93ZWlnaHRfbCMjeFtpXVtqIC0gMV07ICAgICAgXAorICAgICAgICAgICAgdy0+b2Zm c2V0W0wjI3hdW2pdW2ldICAgICAgICAgPSAxMjggKyByLT5kZWx0YV9jaHJvbWFfb2Zmc2V0X2wj I3hbaV1baiAtIDFdOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB3LT5vZmZzZXRbTCMj eF1bal1baV0gICAgICAgIC09ICgxMjggKiB3LT53ZWlnaHRbTCMjeF1bal1baV0pID4+IHctPmxv ZzJfZGVub21bQ0hST01BXTsgICAgIFwKKyAgICAgICAgICAgIHctPm9mZnNldFtMIyN4XVtqXVtp XSAgICAgICAgID0gYXZfY2xpcF9pbnRwMih3LT5vZmZzZXRbTCMjeF1bal1baV0sIDcpOyAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKworc3RhdGljIHZvaWQgcHJlZF93ZWlnaHRfdGFibGUoUHJlZFdlaWdodFRhYmxlICp3LCBj b25zdCBIMjY2UmF3UHJlZFdlaWdodFRhYmxlICpyKQoreworICAgIGludCBkZW5vbVsyXTsKKwor ICAgIHctPmxvZzJfZGVub21bTFVNQV0gPSByLT5sdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tOworICAg IHctPmxvZzJfZGVub21bQ0hST01BXSA9IHctPmxvZzJfZGVub21bTFVNQV0gKyByLT5kZWx0YV9j aHJvbWFfbG9nMl93ZWlnaHRfZGVub207CisgICAgZGVub21bTFVNQV0gPSAxIDw8IHctPmxvZzJf ZGVub21bTFVNQV07CisgICAgZGVub21bQ0hST01BXSA9IDEgPDwgdy0+bG9nMl9kZW5vbVtDSFJP TUFdOworICAgIFdFSUdIVF9UQUJMRSgwKQorICAgIFdFSUdIVF9UQUJMRSgxKQorfQorCisvLyA4 LjMuMSBEZWNvZGluZyBwcm9jZXNzIGZvciBwaWN0dXJlIG9yZGVyIGNvdW50CitzdGF0aWMgaW50 IHBoX2NvbXB1dGVfcG9jKGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCwgY29uc3QgSDI2 NlJhd1NQUyAqc3BzLCBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19jbHZzcykKK3sK KyAgICBjb25zdCBpbnQgbWF4X3BvY19sc2IgICAgICAgPSAxIDw8IChzcHMtPnNwc19sb2cyX21h eF9waWNfb3JkZXJfY250X2xzYl9taW51czQgKyA0KTsKKyAgICBjb25zdCBpbnQgcHJldl9wb2Nf bHNiICAgICAgPSBwb2NfdGlkMCAlIG1heF9wb2NfbHNiOworICAgIGNvbnN0IGludCBwcmV2X3Bv Y19tc2IgICAgICA9IHBvY190aWQwIC0gcHJldl9wb2NfbHNiOworICAgIGNvbnN0IGludCBwb2Nf bHNiICAgICAgICAgICA9IHBoLT5waF9waWNfb3JkZXJfY250X2xzYjsKKyAgICBpbnQgcG9jX21z YjsKKworICAgIGlmIChwaC0+cGhfcG9jX21zYl9jeWNsZV9wcmVzZW50X2ZsYWcpIHsKKyAgICAg ICAgcG9jX21zYiA9IHBoLT5waF9wb2NfbXNiX2N5Y2xlX3ZhbCAqIG1heF9wb2NfbHNiOworICAg IH0gZWxzZSBpZiAoaXNfY2x2c3MpIHsKKyAgICAgICAgcG9jX21zYiA9IDA7CisgICAgfSBlbHNl IHsKKyAgICAgICAgaWYgKHBvY19sc2IgPCBwcmV2X3BvY19sc2IgJiYgcHJldl9wb2NfbHNiIC0g cG9jX2xzYiA+PSBtYXhfcG9jX2xzYiAvIDIpCisgICAgICAgICAgICBwb2NfbXNiID0gcHJldl9w b2NfbXNiICsgbWF4X3BvY19sc2I7CisgICAgICAgIGVsc2UgaWYgKHBvY19sc2IgPiBwcmV2X3Bv Y19sc2IgJiYgcG9jX2xzYiAtIHByZXZfcG9jX2xzYiA+IG1heF9wb2NfbHNiIC8gMikKKyAgICAg ICAgICAgIHBvY19tc2IgPSBwcmV2X3BvY19tc2IgLSBtYXhfcG9jX2xzYjsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgcG9jX21zYiA9IHByZXZfcG9jX21zYjsKKyAgICB9CisKKyAgICByZXR1 cm4gcG9jX21zYiArIHBvY19sc2I7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHVpbnQx Nl90IGxtY3NfZGVyaXZlX2x1dF9zYW1wbGUodWludDE2X3Qgc2FtcGxlLAorICAgIHVpbnQxNl90 ICpwaXZvdDEsIHVpbnQxNl90ICpwaXZvdDIsIHVpbnQxNl90ICpzY2FsZV9jb2VmZiwgY29uc3Qg aW50IGlkeCwgY29uc3QgaW50IG1heCkKK3sKKyAgICBjb25zdCBpbnQgbHV0X3NhbXBsZSA9Cisg ICAgICAgIHBpdm90MVtpZHhdICsgKChzY2FsZV9jb2VmZltpZHhdICogKHNhbXBsZSAtIHBpdm90 MltpZHhdKSArICgxPDwgMTApKSA+PiAxMSk7CisgICAgcmV0dXJuIGF2X2NsaXAobHV0X3NhbXBs ZSwgMCwgbWF4IC0gMSk7Cit9CisKKy8vOC44LjIuMiBJbnZlcnNlIG1hcHBpbmcgcHJvY2VzcyBm b3IgYSBsdW1hIHNhbXBsZQorc3RhdGljIGludCBsbWNzX2Rlcml2ZV9sdXQoVlZDTE1DUyAqbG1j cywgY29uc3QgQVZCdWZmZXJSZWYgKmxtY3NfYnVmLCBjb25zdCBIMjY2UmF3U1BTICpzcHMpCit7 CisgICAgY29uc3QgSDI2NlJhd0FQUyAqcmxtY3M7CisgICAgY29uc3QgaW50IGJpdF9kZXB0aCA9 IChzcHMtPnNwc19iaXRkZXB0aF9taW51czggKyA4KTsKKyAgICBjb25zdCBpbnQgbWF4ICAgICAg ID0gKDEgPDwgYml0X2RlcHRoKTsKKyAgICBjb25zdCBpbnQgb3JnX2N3ICAgID0gbWF4IC8gTE1D U19NQVhfQklOX1NJWkU7CisgICAgY29uc3QgaW50IHNoaWZ0ICAgICA9IGF2X2xvZzIob3JnX2N3 KTsKKyAgICBjb25zdCBpbnQgb2ZmICAgICAgID0gMSA8PCAoc2hpZnQgLSAxKTsKKyAgICBpbnQg Y3dbTE1DU19NQVhfQklOX1NJWkVdOworICAgIHVpbnQxNl90IGlucHV0X3Bpdm90W0xNQ1NfTUFY X0JJTl9TSVpFXTsKKyAgICB1aW50MTZfdCBzY2FsZV9jb2VmZltMTUNTX01BWF9CSU5fU0laRV07 CisgICAgdWludDE2X3QgaW52X3NjYWxlX2NvZWZmW0xNQ1NfTUFYX0JJTl9TSVpFXTsKKyAgICBp bnQgaSwgZGVsdGFfY3JzOworICAgIGlmIChiaXRfZGVwdGggPiBMTUNTX01BWF9CSVRfREVQVEgp CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKworICAgIGlmICghbG1jc19i dWYpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHJsbWNzID0gKGNv bnN0IEgyNjZSYXdBUFMgKilsbWNzX2J1Zi0+ZGF0YTsKKworCisgICAgbG1jcy0+bWluX2Jpbl9p ZHggPSBybG1jcy0+bG1jc19taW5fYmluX2lkeDsKKyAgICBsbWNzLT5tYXhfYmluX2lkeCA9IExN Q1NfTUFYX0JJTl9TSVpFIC0gMSAtIHJsbWNzLT5sbWNzX21pbl9iaW5faWR4OworCisgICAgbWVt c2V0KGN3LCAwLCBzaXplb2YoY3cpKTsKKyAgICBmb3IgKGludCBpID0gbG1jcy0+bWluX2Jpbl9p ZHg7IGkgPD0gbG1jcy0+bWF4X2Jpbl9pZHg7IGkrKykKKyAgICAgICAgY3dbaV0gPSBvcmdfY3cg KyAoMSAtIDIgKiBybG1jcy0+bG1jc19kZWx0YV9zaWduX2N3X2ZsYWdbaV0pICogcmxtY3MtPmxt Y3NfZGVsdGFfYWJzX2N3W2ldOworCisgICAgZGVsdGFfY3JzID0gKDEgLSAyICogcmxtY3MtPmxt Y3NfZGVsdGFfc2lnbl9jcnNfZmxhZykgKiBybG1jcy0+bG1jc19kZWx0YV9hYnNfY3JzOworCisg ICAgbG1jcy0+cGl2b3RbMF0gPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBMTUNTX01BWF9CSU5f U0laRTsgaSsrKSB7CisgICAgICAgIGlucHV0X3Bpdm90W2ldICAgICAgICA9IGkgKiBvcmdfY3c7 CisgICAgICAgIGxtY3MtPnBpdm90W2kgKyAxXSA9IGxtY3MtPnBpdm90W2ldICsgY3dbaV07Cisg ICAgICAgIHNjYWxlX2NvZWZmW2ldICAgICAgICA9IChjd1tpXSAqICgxIDw8IDExKSArICBvZmYp ID4+IHNoaWZ0OworICAgICAgICBpZiAoY3dbaV0gPT0gMCkgeworICAgICAgICAgICAgaW52X3Nj YWxlX2NvZWZmW2ldID0gMDsKKyAgICAgICAgICAgIGxtY3MtPmNocm9tYV9zY2FsZV9jb2VmZltp XSA9ICgxIDw8IDExKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludl9zY2FsZV9j b2VmZltpXSA9IG9yZ19jdyAqICgxIDw8IDExKSAvIGN3W2ldOworICAgICAgICAgICAgbG1jcy0+ Y2hyb21hX3NjYWxlX2NvZWZmW2ldID0gb3JnX2N3ICogKDEgPDwgMTEpIC8gKGN3W2ldICsgZGVs dGFfY3JzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vZGVyaXZlIGxtY3NfZndkX2x1dAor ICAgIGZvciAodWludDE2X3Qgc2FtcGxlID0gMDsgc2FtcGxlIDwgbWF4OyBzYW1wbGUrKykgewor ICAgICAgICBjb25zdCBpbnQgaWR4X3kgPSBzYW1wbGUgLyBvcmdfY3c7CisgICAgICAgIGNvbnN0 IHVpbnQxNl90IGZ3ZF9zYW1wbGUgPSBsbWNzX2Rlcml2ZV9sdXRfc2FtcGxlKHNhbXBsZSwgbG1j cy0+cGl2b3QsCisgICAgICAgICAgICBpbnB1dF9waXZvdCwgc2NhbGVfY29lZmYsIGlkeF95LCBt YXgpOworICAgICAgICBpZiAoYml0X2RlcHRoID4gOCkKKyAgICAgICAgICAgICgodWludDE2X3Qg KilsbWNzLT5md2RfbHV0KVtzYW1wbGVdID0gZndkX3NhbXBsZTsKKyAgICAgICAgZWxzZQorICAg ICAgICAgICAgbG1jcy0+ZndkX2x1dFtzYW1wbGVdID0gZndkX3NhbXBsZTsKKworICAgIH0KKwor ICAgIC8vZGVyaXZlIGxtY3NfaW52X2x1dAorICAgIGkgPSBsbWNzLT5taW5fYmluX2lkeDsKKyAg ICBmb3IgKHVpbnQxNl90IHNhbXBsZSA9IDA7IHNhbXBsZSA8IG1heDsgc2FtcGxlKyspIHsKKyAg ICAgICAgdWludDE2X3QgaW52X3NhbXBsZTsKKyAgICAgICAgd2hpbGUgKHNhbXBsZSA+PSBsbWNz LT5waXZvdFtpICsgMV0gJiYgaSA8PSBsbWNzLT5tYXhfYmluX2lkeCkKKyAgICAgICAgICAgIGkr KzsKKworICAgICAgICBpbnZfc2FtcGxlID0gbG1jc19kZXJpdmVfbHV0X3NhbXBsZShzYW1wbGUs IGlucHV0X3Bpdm90LCBsbWNzLT5waXZvdCwKKyAgICAgICAgICAgIGludl9zY2FsZV9jb2VmZiwg aSwgbWF4KTsKKworICAgICAgICBpZiAoYml0X2RlcHRoID4gOCkKKyAgICAgICAgICAgICgodWlu dDE2X3QgKilsbWNzLT5pbnZfbHV0KVtzYW1wbGVdID0gaW52X3NhbXBsZTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgbG1jcy0+aW52X2x1dFtzYW1wbGVdID0gaW52X3NhbXBsZTsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaF9tYXhfbnVtX3N1YmJsb2NrX21l cmdlX2NhbmQoY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRl ciAqcGgpCit7CisgICAgaWYgKHNwcy0+c3BzX2FmZmluZV9lbmFibGVkX2ZsYWcpCisgICAgICAg IHJldHVybiA1IC0gc3BzLT5zcHNfZml2ZV9taW51c19tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2Nh bmQ7CisgICAgcmV0dXJuIHNwcy0+c3BzX3NidG12cF9lbmFibGVkX2ZsYWcgJiYgcGgtPnBoX3Rl bXBvcmFsX212cF9lbmFibGVkX2ZsYWc7Cit9CisKK3N0YXRpYyBpbnQgcGhfZGVyaXZlKFZWQ1BI ICpwaCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UFBTICpwcHMsIGNvbnN0 IGludCBwb2NfdGlkMCwgY29uc3QgaW50IGlzX2NsdnNzKQoreworICAgIHBoLT5tYXhfbnVtX3N1 YmJsb2NrX21lcmdlX2NhbmQgPSBwaF9tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQoc3BzLCBw aC0+cik7CisKKyAgICBwaC0+cG9jID0gcGhfY29tcHV0ZV9wb2MocGgtPnIsIHNwcywgcG9jX3Rp ZDAsIGlzX2NsdnNzKTsKKworICAgIGlmIChwcHMtPnBwc193cF9pbmZvX2luX3BoX2ZsYWcpCisg ICAgICAgIHByZWRfd2VpZ2h0X3RhYmxlKCZwaC0+cHd0LCAmcGgtPnItPnBoX3ByZWRfd2VpZ2h0 X3RhYmxlKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV9waChWVkNG cmFtZVBhcmFtU2V0cyAqZnBzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcnBoLCBBVkJ1 ZmZlclJlZiAqcnBoX3JlZiwKKyAgICBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19j bHZzcykKK3sKKyAgICBpbnQgcmV0OworICAgIFZWQ1BIICpwaCA9ICZmcHMtPnBoOworICAgIGNv bnN0IEgyNjZSYXdTUFMgKnNwcyA9IGZwcy0+c3BzLT5yOworICAgIGNvbnN0IEgyNjZSYXdQUFMg KnBwcyA9IGZwcy0+cHBzLT5yOworCisgICAgcmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJnBoLT5y cmVmLCBycGhfcmVmKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAg ICBwaC0+ciA9IHJwaDsKKworICAgIHJldCA9IHBoX2Rlcml2ZShwaCwgc3BzLCBwcHMsIHBvY190 aWQwLCBpc19jbHZzcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWNvZGVfc2NhbGluZ19saXN0KFZWQ0Zy YW1lUGFyYW1TZXRzICpmcHMsIEFWQnVmZmVyUmVmICpzbF9idWYpCit7CisgICAgaW50IHJldDsK KworICAgIGlmICghc2xfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KworICAgIHJldCA9IGF2X2J1ZmZlcl9yZXBsYWNlKCZmcHMtPnNsX2J1Ziwgc2xfYnVmKTsKKyAg ICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuICByZXQ7CisKKyAgICBmcHMtPnNsID0gKGNv bnN0IFZWQ1NjYWxpbmdMaXN0KilzbF9idWYtPmRhdGE7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBkZWNvZGVfZnJhbWVfcHMoVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgY29uc3Qg VlZDUGFyYW1TZXRzICpwcywKKyAgICBjb25zdCBDb2RlZEJpdHN0cmVhbUgyNjZDb250ZXh0ICpo MjY2LCBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19jbHZzcykKK3sKKyAgICBjb25z dCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGggPSBoMjY2LT5waDsKKyAgICBjb25zdCBIMjY2UmF3 UFBTICpycHBzOworICAgIGludCByZXQ7CisKKyAgICBpZiAoIXBoKQorICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHJwcHMgPSBoMjY2LT5wcHNbcGgtPnBoX3BpY19w YXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBpZiAoIXJwcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworCisgICAgcmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJmZwcy0+c3BzX2J1 ZiwgcHMtPnNwc19saXN0W3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZF0pOworICAgIGlm IChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIGZwcy0+c3BzID0gKFZWQ1NQUyAq KWZwcy0+c3BzX2J1Zi0+ZGF0YTsKKworICAgIHJldCA9IGF2X2J1ZmZlcl9yZXBsYWNlKCZmcHMt PnBwc19idWYsIHBzLT5wcHNfbGlzdFtycHBzLT5wcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRdKTsK KyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICBmcHMtPnBwcyA9IChW VkNQUFMgKilmcHMtPnBwc19idWYtPmRhdGE7CisKKyAgICByZXQgPSBkZWNvZGVfcGgoZnBzLCBw aCwgaDI2Ni0+cGhfcmVmLCBwb2NfdGlkMCwgaXNfY2x2c3MpOworICAgIGlmIChyZXQgPCAwKQor ICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKHBoLT5waF9leHBsaWNpdF9zY2FsaW5nX2xp c3RfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIHJldCA9IGRlY29kZV9zY2FsaW5nX2xpc3QoZnBz LCBwcy0+c2NhbGluZ19saXN0W3BoLT5waF9zY2FsaW5nX2xpc3RfYXBzX2lkXSk7CisgICAgICAg IGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpZiAo cGgtPnBoX2xtY3NfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIHJldCA9IGxtY3NfZGVyaXZlX2x1 dCgmZnBzLT5sbWNzLCBwcy0+bG1jc19saXN0W3BoLT5waF9sbWNzX2Fwc19pZF0sIGZwcy0+c3Bz LT5yKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAg IH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoZnBzLT5hbGZfbGlz dCk7IGkrKykgeworICAgICAgICByZXQgPSBhdl9idWZmZXJfcmVwbGFjZSgmZnBzLT5hbGZfbGlz dFtpXSwgcHMtPmFsZl9saXN0W2ldKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAg ICByZXR1cm4gcmV0OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVj b2RlX3JlY292ZXJ5X2ZsYWcoVlZDQ29udGV4dCAqcykKK3sKKyAgICBpZiAoSVNfSURSKHMpKQor ICAgICAgICBzLT5ub19vdXRwdXRfYmVmb3JlX3JlY292ZXJ5X2ZsYWcgPSAwOworICAgIGVsc2Ug aWYgKElTX0NSQShzKSB8fCBJU19HRFIocykpCisgICAgICAgIHMtPm5vX291dHB1dF9iZWZvcmVf cmVjb3ZlcnlfZmxhZyA9IHMtPmxhc3RfZW9zOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfcmVj b3ZlcnlfcG9jKFZWQ0NvbnRleHQgKnMsIGNvbnN0IFZWQ1BIICpwaCkKK3sKKyAgICBpZiAocy0+ bm9fb3V0cHV0X2JlZm9yZV9yZWNvdmVyeV9mbGFnKSB7CisgICAgICAgIGlmIChJU19HRFIocykp CisgICAgICAgICAgICBzLT5nZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID0gcGgtPnBvYyArIHBoLT5y LT5waF9yZWNvdmVyeV9wb2NfY250OworICAgICAgICBpZiAoIUdEUl9JU19SRUNPVkVSRUQocykg JiYgcy0+Z2RyX3JlY292ZXJ5X3BvaW50X3BvYyA8PSBwaC0+cG9jKQorICAgICAgICAgICAgR0RS X1NFVF9SRUNPVkVSRUQocyk7CisgICAgfQorfQorCitpbnQgZmZfdnZjX2RlY29kZV9mcmFtZV9w cyhWVkNGcmFtZVBhcmFtU2V0cyAqZnBzLCBzdHJ1Y3QgVlZDQ29udGV4dCAqcykKK3sKKyAgICBp bnQgcmV0ID0gMDsKKyAgICBWVkNQYXJhbVNldHMgKnBzICAgICAgICAgICAgICAgICAgICAgICAg PSAmcy0+cHM7CisgICAgY29uc3QgQ29kZWRCaXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2NiAgID0g cy0+Y2JjLT5wcml2X2RhdGE7CisKKyAgICByZXQgPSBkZWNvZGVfcHMocHMsIGgyNjYsIHMtPmF2 Y3R4KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGRlY29k ZV9yZWNvdmVyeV9mbGFnKHMpOworICAgIHJldCA9IGRlY29kZV9mcmFtZV9wcyhmcHMsIHBzLCBo MjY2LCBzLT5wb2NfdGlkMCwgSVNfQ0xWU1MocykpOworICAgIGRlY29kZV9yZWNvdmVyeV9wb2Mo cywgJmZwcy0+cGgpOworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmZfdnZjX2ZyYW1lX3Bz X2ZyZWUoVlZDRnJhbWVQYXJhbVNldHMgKmZwcykKK3sKKyAgICBhdl9idWZmZXJfdW5yZWYoJmZw cy0+c3BzX2J1Zik7CisgICAgYXZfYnVmZmVyX3VucmVmKCZmcHMtPnBwc19idWYpOworICAgIGF2 X2J1ZmZlcl91bnJlZigmZnBzLT5waC5ycmVmKTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJmZwcy0+ c2xfYnVmKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGZwcy0+YWxm X2xpc3QpOyBpKyspCisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZnBzLT5hbGZfbGlzdFtpXSk7 Cit9CisKK3ZvaWQgZmZfdnZjX3BzX3VuaW5pdChWVkNQYXJhbVNldHMgKnBzKQoreworICAgIGlu dCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5zY2FsaW5nX2xp c3QpOyBpKyspCisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmcHMtPnNjYWxpbmdfbGlzdFtpXSk7 CisgICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5sbWNzX2xpc3QpOyBpKysp CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmcHMtPmxtY3NfbGlzdFtpXSk7CisgICAgZm9yIChp ID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5hbGZfbGlzdCk7IGkrKykKKyAgICAgICAgYXZf YnVmZmVyX3VucmVmKCZwcy0+YWxmX2xpc3RbaV0pOworICAgIGZvciAoaSA9IDA7IGkgPCBGRl9B UlJBWV9FTEVNUyhwcy0+dnBzX2xpc3QpOyBpKyspCisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigm cHMtPnZwc19saXN0W2ldKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMocHMt PnNwc19saXN0KTsgaSsrKQorICAgICAgICBhdl9idWZmZXJfdW5yZWYoJnBzLT5zcHNfbGlzdFtp XSk7CisgICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5wcHNfbGlzdCk7IGkr KykKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZwcy0+cHBzX2xpc3RbaV0pOworfQorCitlbnVt IHsKKyAgICBBUFNfQUxGLAorICAgIEFQU19MTUNTLAorICAgIEFQU19TQ0FMSU5HLAorfTsKKwor c3RhdGljIHZvaWQgYWxmX2NvZWZmKGludDE2X3QgKmNvZWZmLAorICAgIGNvbnN0IHVpbnQ4X3Qg KmFicywgY29uc3QgdWludDhfdCAqc2lnbiwgY29uc3QgaW50IHNpemUpCit7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGNvZWZmW2ldID0gKDEgLSAyICogc2ln bltpXSkgKiBhYnNbaV07Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9jb2VmZl9jYyhpbnQxNl90ICpj b2VmZiwKKyAgICBjb25zdCB1aW50OF90ICptYXBwZWRfYWJzLCBjb25zdCB1aW50OF90ICpzaWdu KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQUxGX05VTV9DT0VGRl9DQzsgaSsrKSB7Cisg ICAgICAgIGludCBjID0gbWFwcGVkX2Fic1tpXTs7CisgICAgICAgIGlmIChjKQorICAgICAgICAg ICAgYyA9ICgxIC0gMiAqIHNpZ25baV0pICogKDEgPDwgKGMgLSAxKSk7CisgICAgICAgIGNvZWZm W2ldID0gYzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9sdW1hKFZWQ0FMRiAqYWxmKQor eworICAgIGNvbnN0IEgyNjZSYXdBUFMgKmFwcyA9IChjb25zdCBIMjY2UmF3QVBTICopYWxmLT5y cmVmLT5kYXRhOworCisgICAgaWYgKCFhcHMtPmFsZl9sdW1hX2ZpbHRlcl9zaWduYWxfZmxhZykK KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfTlVNX0ZJTFRF UlNfTFVNQTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGludCByZWYgICAgICAgPSBhcHMtPmFsZl9s dW1hX2NvZWZmX2RlbHRhX2lkeFtpXTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqYWJzICA9IGFw cy0+YWxmX2x1bWFfY29lZmZfYWJzW3JlZl07CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNpZ24g PSBhcHMtPmFsZl9sdW1hX2NvZWZmX3NpZ25bcmVmXTsKKworICAgICAgICBhbGZfY29lZmYoYWxm LT5sdW1hX2NvZWZmW2ldLCBhYnMsIHNpZ24sIEFMRl9OVU1fQ09FRkZfTFVNQSk7CisgICAgICAg IG1lbWNweShhbGYtPmx1bWFfY2xpcF9pZHhbaV0sIGFwcy0+YWxmX2x1bWFfY2xpcF9pZHhbcmVm XSwKKyAgICAgICAgICAgIHNpemVvZihhbGYtPmx1bWFfY2xpcF9pZHhbaV0pKTsKKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIGFsZl9jaHJvbWEoVlZDQUxGICphbGYpCit7CisgICAgY29uc3QgSDI2 NlJhd0FQUyAqYXBzID0gKGNvbnN0IEgyNjZSYXdBUFMgKilhbGYtPnJyZWYtPmRhdGE7CisKKwor ICAgIGlmICghYXBzLT5hbGZfY2hyb21hX2ZpbHRlcl9zaWduYWxfZmxhZykKKyAgICAgICAgcmV0 dXJuOworCisgICAgYWxmLT5udW1fY2hyb21hX2ZpbHRlcnMgID0gYXBzLT5hbGZfY2hyb21hX251 bV9hbHRfZmlsdGVyc19taW51czEgKyAxOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxmLT5u dW1fY2hyb21hX2ZpbHRlcnM7IGkrKykgeworICAgICAgICBjb25zdCB1aW50OF90ICphYnMgID0g YXBzLT5hbGZfY2hyb21hX2NvZWZmX2Fic1tpXTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc2ln biA9IGFwcy0+YWxmX2Nocm9tYV9jb2VmZl9zaWduW2ldOworCisgICAgICAgIGFsZl9jb2VmZihh bGYtPmNocm9tYV9jb2VmZltpXSwgYWJzLCBzaWduLCBBTEZfTlVNX0NPRUZGX0NIUk9NQSk7Cisg ICAgICAgIG1lbWNweShhbGYtPmNocm9tYV9jbGlwX2lkeFtpXSwgYXBzLT5hbGZfY2hyb21hX2Ns aXBfaWR4W2ldLAorICAgICAgICAgICAgc2l6ZW9mKGFsZi0+Y2hyb21hX2NsaXBfaWR4W2ldKSk7 CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfY2MoVlZDQUxGICphbGYpCit7CisgICAgY29u c3QgSDI2NlJhd0FQUyAqYXBzICA9IChjb25zdCBIMjY2UmF3QVBTICopYWxmLT5ycmVmLT5kYXRh OworICAgIGNvbnN0IHVpbnQ4X3QgKCphYnNbXSlbQUxGX05VTV9DT0VGRl9DQ10gPQorICAgICAg ICB7IGFwcy0+YWxmX2NjX2NiX21hcHBlZF9jb2VmZl9hYnMsIGFwcy0+YWxmX2NjX2NyX21hcHBl ZF9jb2VmZl9hYnMgfTsKKyAgICBjb25zdCB1aW50OF90ICgqc2lnbltdKVtBTEZfTlVNX0NPRUZG X0NDXSA9CisgICAgICAgIHthcHMtPmFsZl9jY19jYl9jb2VmZl9zaWduLCBhcHMtPmFsZl9jY19j cl9jb2VmZl9zaWduIH07CisgICAgY29uc3QgaW50IHNpZ25hbGVkW10gPSB7IGFwcy0+YWxmX2Nj X2NiX2ZpbHRlcl9zaWduYWxfZmxhZywgYXBzLT5hbGZfY2NfY3JfZmlsdGVyX3NpZ25hbF9mbGFn fTsKKworICAgIGFsZi0+bnVtX2NjX2ZpbHRlcnNbMF0gPSBhcHMtPmFsZl9jY19jYl9maWx0ZXJz X3NpZ25hbGxlZF9taW51czEgKyAxOworICAgIGFsZi0+bnVtX2NjX2ZpbHRlcnNbMV0gPSBhcHMt PmFsZl9jY19jcl9maWx0ZXJzX3NpZ25hbGxlZF9taW51czEgKyAxOworCisgICAgZm9yIChpbnQg aWR4ID0gMDsgaWR4IDwgMjsgaWR4KyspIHsKKyAgICAgICAgaWYgKHNpZ25hbGVkW2lkeF0pIHsK KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxmLT5udW1fY2NfZmlsdGVyc1tpZHhd OyBpKyspCisgICAgICAgICAgICAgICAgYWxmX2NvZWZmX2NjKGFsZi0+Y2NfY29lZmZbaWR4XVtp XSwgYWJzW2lkeF1baV0sIHNpZ25baWR4XVtpXSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkIGFsZl9kZXJpdmUoVlZDQUxGICphbGYpCit7CisgICAgYWxmX2x1bWEoYWxmKTsK KyAgICBhbGZfY2hyb21hKGFsZik7CisgICAgYWxmX2NjKGFsZik7Cit9CisKK3N0YXRpYyB2b2lk IGFsZl9mcmVlKHVpbnQ4X3QgKmRhdGEpCit7CisgICAgVlZDQUxGICphbGYgPSAoVlZDQUxGKilk YXRhOworCisgICAgYXZfYnVmZmVyX3VucmVmKCZhbGYtPnJyZWYpOworfQorCitzdGF0aWMgQVZC dWZmZXJSZWYgKmFsZl9hbGxvYyhBVkJ1ZmZlclJlZiAqYXBzX2J1ZikKK3sKKyAgICBpbnQgcmV0 OworICAgIFZWQ0FMRiAqYWxmOworICAgIEFWQnVmZmVyUmVmICpidWYgPSBwc19hbGxvYyhzaXpl b2YoKmFsZiksIGFsZl9mcmVlKTsKKyAgICBpZiAoIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7 CisKKyAgICBhbGYgPSAoVlZDQUxGICopYnVmLT5kYXRhOworICAgIHJldCA9IGF2X2J1ZmZlcl9y ZXBsYWNlKCZhbGYtPnJyZWYsIGFwc19idWYpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBn b3RvIGZhaWw7CisKKyAgICBhbGZfZGVyaXZlKGFsZik7CisKKyAgICByZXR1cm4gYnVmOworCitm YWlsOgorICAgIGF2X2J1ZmZlcl91bnJlZigmYnVmKTsKKyAgICByZXR1cm4gYnVmOworfQorCitz dGF0aWMgaW50IGFwc19kZWNvZGVfYWxmKEFWQnVmZmVyUmVmICoqYWxmX2J1ZiwgQVZCdWZmZXJS ZWYgKmFwc19idWYpCit7CisgICAgaW50IHJldDsKKyAgICBBVkJ1ZmZlclJlZiAqYnVmID0gYWxm X2FsbG9jKGFwc19idWYpOworCisgICAgaWYgKCFidWYpCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICByZXQgPSBhdl9idWZmZXJfcmVwbGFjZShhbGZfYnVmLCBidWYpOwor CisgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOworICAgIHJldHVybiByZXQ7CisKK30KKworc3Rh dGljIGludCBpc19sdW1hX2xpc3QoY29uc3QgaW50IGlkKQoreworICAgIHJldHVybiBpZCAlIFZW Q19NQVhfU0FNUExFX0FSUkFZUyA9PSBTTF9TVEFSVF80eDQgfHwgaWQgPT0gU0xfU1RBUlRfNjR4 NjQgKyAxOworfQorCitzdGF0aWMgaW50IGRlcml2ZV9tYXRyaXhfc2l6ZShjb25zdCBpbnQgaWQp Cit7CisgICAgcmV0dXJuIGlkIDwgU0xfU1RBUlRfNHg0ID8gMiA6IChpZCA8IFNMX1NUQVJUXzh4 OCA/IDQgOiA4KTsKK30KKworLy8gNy40LjMuMjAgU2NhbGluZyBsaXN0IGRhdGEgc2VtYW50aWNz CitzdGF0aWMgaW50IHNjYWxpbmdfZGVyaXZlKFZWQ1NjYWxpbmdMaXN0ICpzbCkKK3sKKyAgICBj b25zdCBIMjY2UmF3QVBTICphcHMgPSAoY29uc3QgSDI2NlJhd0FQUyAqKXNsLT5ycmVmLT5kYXRh OworCisgICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IFNMX01BWF9JRDsgaWQrKykgeworICAgICAg ICBjb25zdCBpbnQgbWF0cml4X3NpemUgICA9IGRlcml2ZV9tYXRyaXhfc2l6ZShpZCk7CisgICAg ICAgIGNvbnN0IGludCBsb2cyX3NpemUgICAgID0gbG9nMihtYXRyaXhfc2l6ZSk7CisgICAgICAg IGNvbnN0IGludCBsaXN0X3NpemUgICAgID0gbWF0cml4X3NpemUgKiBtYXRyaXhfc2l6ZTsKKyAg ICAgICAgaW50IGNvZWZmW1NMX01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0laRV07 CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnByZWQ7CisgICAgICAgIGNvbnN0IGludCAqc2NhbGlu Z19saXN0OworICAgICAgICBpbnQgZGMgPSAwOworCisgICAgICAgIGlmIChhcHMtPmFwc19jaHJv bWFfcHJlc2VudF9mbGFnIHx8IGlzX2x1bWFfbGlzdChpZCkpIHsKKyAgICAgICAgICAgIGlmICgh YXBzLT5zY2FsaW5nX2xpc3RfY29weV9tb2RlX2ZsYWdbaWRdKSB7CisgICAgICAgICAgICAgICAg aW50IG5leHRfY29lZiA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoaWQgPj0gU0xfU1RBUlRf MTZ4MTYpCisgICAgICAgICAgICAgICAgICAgIGRjID0gbmV4dF9jb2VmID0gYXBzLT5zY2FsaW5n X2xpc3RfZGNfY29lZltpZCAtIFNMX1NUQVJUXzE2eDE2XTsKKworICAgICAgICAgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbGlzdF9zaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg Y29uc3QgaW50IHggPSBmZl92dmNfZGlhZ19zY2FuX3hbM11bM11baV07CisgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGludCB5ID0gZmZfdnZjX2RpYWdfc2Nhbl95WzNdWzNdW2ldOworCisgICAg ICAgICAgICAgICAgICAgIGlmICghKGlkID49IFNMX1NUQVJUXzY0eDY0ICYmIHggPj0gNCAmJiB5 ID49IDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9jb2VmICs9IGFwcy0+c2NhbGlu Z19saXN0X2RlbHRhX2NvZWZbaWRdW2ldOworICAgICAgICAgICAgICAgICAgICBjb2VmZltpXSA9 IG5leHRfY29lZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KworICAgICAgICAvL2RjCisgICAgICAgIGlmIChpZCA+PSBTTF9TVEFSVF8xNngxNikgeworICAg ICAgICAgICAgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gJiYgIWFw cy0+c2NhbGluZ19saXN0X3ByZWRfbW9kZV9mbGFnW2lkXSkgeworICAgICAgICAgICAgICAgIHNs LT5zY2FsaW5nX21hdHJpeF9kY19yZWNbaWQgLSBTTF9TVEFSVF8xNngxNl0gPSA4OworICAgICAg ICAgICAgfSBlbHNlIGlmICghYXBzLT5zY2FsaW5nX2xpc3RfcHJlZF9pZF9kZWx0YVtpZF0pIHsK KyAgICAgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRf MTZ4MTZdID0gMTY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0 IGludCByZWZfaWQgPSBpZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdOwor ICAgICAgICAgICAgICAgIGlmIChyZWZfaWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAgICAg ICAgICAgICAgIGRjICs9IHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNbcmVmX2lkIC0gU0xfU1RB UlRfMTZ4MTZdOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGMg Kz0gc2wtPnNjYWxpbmdfbWF0cml4X3JlY1tyZWZfaWRdWzBdOworICAgICAgICAgICAgICAgIHNs LT5zY2FsaW5nX21hdHJpeF9kY19yZWNbaWQgLSBTTF9TVEFSVF8xNngxNl0gPSBkYyAmIDI1NTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vYWMKKyAgICAgICAgc2NhbGlu Z19saXN0ID0gYXBzLT5zY2FsaW5nX2xpc3RfY29weV9tb2RlX2ZsYWdbaWRdID8gZmZfdnZjX3Nj YWxpbmdfbGlzdDAgOiBjb2VmZjsKKyAgICAgICAgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9jb3B5 X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+c2NhbGluZ19saXN0X3ByZWRfbW9kZV9mbGFnW2lkXSkK KyAgICAgICAgICAgIHByZWQgPSBmZl92dmNfc2NhbGluZ19wcmVkXzg7CisgICAgICAgIGVsc2Ug aWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9wcmVkX2lkX2RlbHRhW2lkXSkKKyAgICAgICAgICAgIHBy ZWQgPSBmZl92dmNfc2NhbGluZ19wcmVkXzE2OworICAgICAgICBlbHNlCisgICAgICAgICAgICBw cmVkID0gc2wtPnNjYWxpbmdfbWF0cml4X3JlY1tpZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRf aWRfZGVsdGFbaWRdXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0X3NpemU7IGkr KykgeworICAgICAgICAgICAgY29uc3QgaW50IHggPSBmZl92dmNfZGlhZ19zY2FuX3hbbG9nMl9z aXplXVtsb2cyX3NpemVdW2ldOworICAgICAgICAgICAgY29uc3QgaW50IHkgPSBmZl92dmNfZGlh Z19zY2FuX3lbbG9nMl9zaXplXVtsb2cyX3NpemVdW2ldOworICAgICAgICAgICAgY29uc3QgaW50 IG9mZiA9IHkgKiBtYXRyaXhfc2l6ZSArIHg7CisgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRy aXhfcmVjW2lkXVtvZmZdID0gKHByZWRbb2ZmXSArIHNjYWxpbmdfbGlzdFtpXSkgJiAyNTU7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2NhbGlu Z19mcmVlKHVpbnQ4X3QgKmRhdGEpCit7CisgICAgVlZDU2NhbGluZ0xpc3QgKnNsID0gKFZWQ1Nj YWxpbmdMaXN0KilkYXRhOworCisgICAgYXZfYnVmZmVyX3VucmVmKCZzbC0+cnJlZik7Cit9CisK K3N0YXRpYyBBVkJ1ZmZlclJlZiAqc2NhbGluZ19hbGxvYyhBVkJ1ZmZlclJlZiAqYXBzX2J1ZikK K3sKKyAgICBpbnQgcmV0OworICAgIFZWQ1NjYWxpbmdMaXN0ICpzbDsKKyAgICBBVkJ1ZmZlclJl ZiAqYnVmID0gcHNfYWxsb2Moc2l6ZW9mKCpzbCksIHNjYWxpbmdfZnJlZSk7CisKKyAgICBpZiAo IWJ1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc2wgPSAoVlZDU2NhbGluZ0xpc3QgKili dWYtPmRhdGE7CisKKyAgICByZXQgPSBhdl9idWZmZXJfcmVwbGFjZSgmc2wtPnJyZWYsIGFwc19i dWYpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICByZXQgPSBz Y2FsaW5nX2Rlcml2ZShzbCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZmFpbDsK KworICAgIHJldHVybiBidWY7CisKK2ZhaWw6CisgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOwor ICAgIHJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgYXBzX2RlY29kZV9zY2FsaW5nKEFWQnVm ZmVyUmVmICoqc2xfYnVmLCBBVkJ1ZmZlclJlZiAqYXBzX2J1ZikKK3sKKyAgICBpbnQgcmV0Owor ICAgIEFWQnVmZmVyUmVmICpidWYgPSBzY2FsaW5nX2FsbG9jKGFwc19idWYpOworICAgIGlmICgh YnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgcmV0ID0gYXZfYnVm ZmVyX3JlcGxhY2Uoc2xfYnVmLCBidWYpOworCisgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOwor ICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBmZl92dmNfZGVjb2RlX2FwcyhWVkNQYXJhbVNldHMg KnBzLCBjb25zdCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQpCit7CisgICAgQVZCdWZmZXJSZWYg KmFwc19idWYgICAgICAgICAgICAgICAgICAgID0gdW5pdC0+Y29udGVudF9yZWY7CisgICAgY29u c3QgSDI2NlJhd0FQUyAqYXBzICAgICAgICAgICAgICAgICAgID0gdW5pdC0+Y29udGVudDsKKyAg ICBpbnQgcmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgaWYg KCFhcHNfYnVmIHx8ICFhcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor CisgICAgc3dpdGNoIChhcHMtPmFwc19wYXJhbXNfdHlwZSkgeworICAgICAgICBjYXNlIEFQU19B TEY6CisgICAgICAgICAgICByZXQgPSBhcHNfZGVjb2RlX2FsZigmcHMtPmFsZl9saXN0W2Fwcy0+ YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFwc19idWYpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgQVBTX0xNQ1M6CisgICAgICAgICAgICByZXQgPSBhdl9idWZm ZXJfcmVwbGFjZSgmcHMtPmxtY3NfbGlzdFthcHMtPmFwc19hZGFwdGF0aW9uX3BhcmFtZXRlcl9z ZXRfaWRdLCBhcHNfYnVmKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFQU19T Q0FMSU5HOgorICAgICAgICAgICAgcmV0ID0gYXBzX2RlY29kZV9zY2FsaW5nKCZwcy0+c2NhbGlu Z19saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFwc19idWYpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgc2hfc2xpY2VfYWRkcmVzcyhWVkNTSCAqc2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywg Y29uc3QgVlZDUFBTICpwcHMpCit7CisgICAgY29uc3QgaW50IHNsaWNlX2FkZHJlc3MgICAgID0g c2gtPnItPnNoX3NsaWNlX2FkZHJlc3M7CisKKyAgICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGlj ZV9mbGFnKSB7CisgICAgICAgIGludCBwaWNfbGV2ZWxfc2xpY2VfaWR4ID0gc2xpY2VfYWRkcmVz czsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaC0+ci0+Y3Vycl9zdWJwaWNfaWR4OyBq KyspCisgICAgICAgICAgICBwaWNfbGV2ZWxfc2xpY2VfaWR4ICs9IHBwcy0+ci0+bnVtX3NsaWNl c19pbl9zdWJwaWNbal07CisgICAgICAgIHNoLT5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlID0gcHBz LT5jdGJfYWRkcl9pbl9zbGljZSArIHBwcy0+c2xpY2Vfc3RhcnRfb2Zmc2V0W3BpY19sZXZlbF9z bGljZV9pZHhdOworICAgICAgICBzaC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZSA9IHBwcy0+bnVt X2N0dXNfaW5fc2xpY2VbcGljX2xldmVsX3NsaWNlX2lkeF07CisgICAgfSBlbHNlIHsKKyAgICAg ICAgaW50IHRpbGVfeCA9IHNsaWNlX2FkZHJlc3MgJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7 CisgICAgICAgIGludCB0aWxlX3kgPSBzbGljZV9hZGRyZXNzIC8gcHBzLT5yLT5udW1fdGlsZV9j b2x1bW5zOworICAgICAgICBjb25zdCBpbnQgc2xpY2Vfc3RhcnRfY3RiID0gcHBzLT5yb3dfYmRb dGlsZV95XSAqIHBwcy0+Y3RiX3dpZHRoICsgcHBzLT5jb2xfYmRbdGlsZV94XSAqIHBwcy0+ci0+ cm93X2hlaWdodF92YWxbdGlsZV95XTsKKworICAgICAgICBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9z bGljZSA9IHBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UgKyBzbGljZV9zdGFydF9jdGI7CisKKyAgICAg ICAgc2gtPm51bV9jdHVzX2luX2N1cnJfc2xpY2UgPSAwOworICAgICAgICBmb3IgKGludCB0aWxl X2lkeCA9IHNsaWNlX2FkZHJlc3M7IHRpbGVfaWR4IDw9IHNsaWNlX2FkZHJlc3MgKyBzaC0+ci0+ c2hfbnVtX3RpbGVzX2luX3NsaWNlX21pbnVzMTsgdGlsZV9pZHgrKykgeworICAgICAgICAgICAg dGlsZV94ID0gdGlsZV9pZHggJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7CisgICAgICAgICAg ICB0aWxlX3kgPSB0aWxlX2lkeCAvIHBwcy0+ci0+bnVtX3RpbGVfY29sdW1uczsKKyAgICAgICAg ICAgIHNoLT5udW1fY3R1c19pbl9jdXJyX3NsaWNlICs9IHBwcy0+ci0+cm93X2hlaWdodF92YWxb dGlsZV95XSAqIHBwcy0+ci0+Y29sX3dpZHRoX3ZhbFt0aWxlX3hdOworICAgICAgICB9CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBzaF9xcF95KFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1BQUyAq cHBzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGgpCit7CisgICAgY29uc3QgaW50IGlu aXRfcXAgPSBwcHMtPnBwc19pbml0X3FwX21pbnVzMjYgKyAyNjsKKworICAgIGlmICghcHBzLT5w cHNfcXBfZGVsdGFfaW5mb19pbl9waF9mbGFnKQorICAgICAgICBzaC0+c2xpY2VfcXBfeSA9IGlu aXRfcXAgKyBzaC0+ci0+c2hfcXBfZGVsdGE7CisgICAgZWxzZQorICAgICAgICBzaC0+c2xpY2Vf cXBfeSA9IGluaXRfcXAgKyBwaC0+cGhfcXBfZGVsdGE7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2lu dGVyKFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UFBTICpw cHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBzaC0+cjsKKworICAg IGlmICghcHBzLT5wcHNfd3BfaW5mb19pbl9waF9mbGFnICYmCisgICAgICAgICgocHBzLT5wcHNf d2VpZ2h0ZWRfcHJlZF9mbGFnICYmIElTX1AocnNoKSkgfHwKKyAgICAgICAgIChwcHMtPnBwc193 ZWlnaHRlZF9iaXByZWRfZmxhZyAmJiBJU19CKHJzaCkpKSkKKyAgICAgICAgcHJlZF93ZWlnaHRf dGFibGUoJnNoLT5wd3QsICZyc2gtPnNoX3ByZWRfd2VpZ2h0X3RhYmxlKTsKK30KKworc3RhdGlj IHZvaWQgc2hfZGVibG9ja19vZmZzZXRzKFZWQ1NIICpzaCkKK3sKKyAgICBjb25zdCBIMjY2UmF3 U2xpY2VIZWFkZXIgKnIgPSBzaC0+cjsKKworICAgIGlmICghci0+c2hfZGVibG9ja2luZ19maWx0 ZXJfZGlzYWJsZWRfZmxhZykgeworICAgICAgICBzaC0+ZGVibG9jay5iZXRhX29mZnNldFtMVU1B XSA9IHItPnNoX2x1bWFfYmV0YV9vZmZzZXRfZGl2MiA8PCAxOworICAgICAgICBzaC0+ZGVibG9j ay50Y19vZmZzZXRbTFVNQV0gICA9IHItPnNoX2x1bWFfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAg ICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZzZXRbQ0JdICAgPSByLT5zaF9jYl9iZXRhX29mZnNl dF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5kZWJsb2NrLnRjX29mZnNldFtDQl0gICAgID0gci0+ c2hfY2JfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAgICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZz ZXRbQ1JdICAgPSByLT5zaF9jcl9iZXRhX29mZnNldF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5k ZWJsb2NrLnRjX29mZnNldFtDUl0gICAgID0gci0+c2hfY3JfdGNfb2Zmc2V0X2RpdjIgPDwgMTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNoX3BhcnRpdGlvbl9jb25zdHJhaW50cyhWVkNTSCAq c2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywgY29uc3QgSDI2NlJhd1BpY3R1cmVIZWFkZXIgKnBo KQoreworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMl9zaXplX3kgPSBzcHMtPnNwc19sb2cyX21p bl9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMiArIDI7CisgICAgaW50IG1pbl9xdF9sb2cy X3NpemVfeVsyXTsKKworICAgIGlmIChJU19JKHNoLT5yKSkgeworICAgICAgICBtaW5fcXRfbG9n Ml9zaXplX3lbTFVNQV0gICAgICAgID0gKG1pbl9jYl9sb2cyX3NpemVfeSArIHBoLT5waF9sb2cy X2RpZmZfbWluX3F0X21pbl9jYl9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgbWluX3F0X2xv ZzJfc2l6ZV95W0NIUk9NQV0gICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9n Ml9kaWZmX21pbl9xdF9taW5fY2JfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+ bWF4X2J0X3NpemVbTFVNQV0gICAgICAgICAgID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W0xV TUFdICArIHBoLT5waF9sb2cyX2RpZmZfbWF4X2J0X21pbl9xdF9pbnRyYV9zbGljZV9sdW1hKTsK KyAgICAgICAgc2gtPm1heF9idF9zaXplW0NIUk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9s b2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5fcXRfaW50cmFf c2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+bWF4X3R0X3NpemVbTFVNQV0gICAgICAgICAg ID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W0xVTUFdICArIHBoLT5waF9sb2cyX2RpZmZfbWF4 X3R0X21pbl9xdF9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgc2gtPm1heF90dF9zaXplW0NI Uk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhf bG9nMl9kaWZmX21heF90dF9taW5fcXRfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBz aC0+bWF4X210dF9kZXB0aFtMVU1BXSAgICAgICAgID0gcGgtPnBoX21heF9tdHRfaGllcmFyY2h5 X2RlcHRoX2ludHJhX3NsaWNlX2x1bWE7CisgICAgICAgIHNoLT5tYXhfbXR0X2RlcHRoW0NIUk9N QV0gICAgICAgPSBwaC0+cGhfbWF4X210dF9oaWVyYXJjaHlfZGVwdGhfaW50cmFfc2xpY2VfY2hy b21hOworCisgICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAgPSBwaC0+cGhf Y3VfcXBfZGVsdGFfc3ViZGl2X2ludHJhX3NsaWNlOworICAgICAgICBzaC0+Y3VfY2hyb21hX3Fw X29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2X2ludHJh X3NsaWNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBMVU1BOyBpIDw9IENI Uk9NQTsgaSsrKSAgeworICAgICAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95W2ldICAgICAgICA9 IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9xdF9taW5fY2JfaW50 ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9idF9zaXplW2ldICAgICAgICAgICA9IDEg PDwgKG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5f cXRfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF90dF9zaXplW2ldICAgICAgICAg ICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF90 dF9taW5fcXRfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9tdHRfZGVwdGhbaV0g ICAgICAgICA9IHBoLT5waF9tYXhfbXR0X2hpZXJhcmNoeV9kZXB0aF9pbnRlcl9zbGljZTsKKyAg ICAgICAgfQorCisgICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAgPSBwaC0+ cGhfY3VfcXBfZGVsdGFfc3ViZGl2X2ludGVyX3NsaWNlOworICAgICAgICBzaC0+Y3VfY2hyb21h X3FwX29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2X2lu dGVyX3NsaWNlOworICAgIH0KKworICAgIHNoLT5taW5fcXRfc2l6ZVtMVU1BXSAgID0gMSA8PCBt aW5fcXRfbG9nMl9zaXplX3lbTFVNQV07CisgICAgc2gtPm1pbl9xdF9zaXplW0NIUk9NQV0gPSAx IDw8IG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdOworfQorCitzdGF0aWMgdm9pZCBzaF9lbnRy eV9wb2ludHMoVlZDU0ggKnNoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0IFZWQ1BQUyAq cHBzKQoreworICAgIGlmIChzcHMtPnNwc19lbnRyeV9wb2ludF9vZmZzZXRzX3ByZXNlbnRfZmxh ZykgeworICAgICAgICBmb3IgKGludCBpID0gMSwgaiA9IDA7IGkgPCBzaC0+bnVtX2N0dXNfaW5f Y3Vycl9zbGljZTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlX2N0Yl9hZGRyX3gg PSBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9zbGljZVtpIC0gMV0gJSBwcHMtPmN0Yl93aWR0aDsKKyAg ICAgICAgICAgIGNvbnN0IGludCBwcmVfY3RiX2FkZHJfeSA9IHNoLT5jdGJfYWRkcl9pbl9jdXJy X3NsaWNlW2kgLSAxXSAvIHBwcy0+Y3RiX3dpZHRoOworICAgICAgICAgICAgY29uc3QgaW50IGN0 Yl9hZGRyX3ggICAgID0gc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2VbaV0gJSBwcHMtPmN0Yl93 aWR0aDsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdGJfYWRkcl95ICAgICA9IHNoLT5jdGJfYWRk cl9pbl9jdXJyX3NsaWNlW2ldIC8gcHBzLT5jdGJfd2lkdGg7CisgICAgICAgICAgICBpZiAocHBz LT5jdGJfdG9fcm93X2JkW2N0Yl9hZGRyX3ldICE9IHBwcy0+Y3RiX3RvX3Jvd19iZFtwcmVfY3Ri X2FkZHJfeV0gfHwKKyAgICAgICAgICAgICAgICBwcHMtPmN0Yl90b19jb2xfYmRbY3RiX2FkZHJf eF0gIT0gcHBzLT5jdGJfdG9fY29sX2JkW3ByZV9jdGJfYWRkcl94XSB8fAorICAgICAgICAgICAg ICAgIChjdGJfYWRkcl95ICE9IHByZV9jdGJfYWRkcl95ICYmIHNwcy0+c3BzX2VudHJvcHlfY29k aW5nX3N5bmNfZW5hYmxlZF9mbGFnKSkgeworICAgICAgICAgICAgICAgIHNoLT5lbnRyeV9wb2lu dF9zdGFydF9jdHVbaisrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyBpbnQgc2hfZGVyaXZlKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNl dHMgKmZwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpzcHMgICAgICAgICAgID0gZnBzLT5z cHMtPnI7CisgICAgY29uc3QgSDI2NlJhd1BQUyAqcHBzICAgICAgICAgICA9IGZwcy0+cHBzLT5y OworICAgIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCAgPSBmcHMtPnBoLnI7CisKKyAg ICBzaF9zbGljZV9hZGRyZXNzKHNoLCBzcHMsIGZwcy0+cHBzKTsKKyAgICBzaF9pbnRlcihzaCwg c3BzLCBwcHMpOworICAgIHNoX3FwX3koc2gsIHBwcywgcGgpOworICAgIHNoX2RlYmxvY2tfb2Zm c2V0cyhzaCk7CisgICAgc2hfcGFydGl0aW9uX2NvbnN0cmFpbnRzKHNoLCBzcHMsIHBoKTsKKyAg ICBzaF9lbnRyeV9wb2ludHMoc2gsIHNwcywgZnBzLT5wcHMpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK2ludCBmZl92dmNfZGVjb2RlX3NoKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNl dHMgKmZwcywgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0ICp1bml0KQoreworICAgIGludCByZXQ7 CisKKyAgICBpZiAoIWZwcy0+c3BzIHx8ICFmcHMtPnBwcykKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICByZXQgPSBhdl9idWZmZXJfcmVwbGFjZSgmc2gtPnJyZWYs IHVuaXQtPmNvbnRlbnRfcmVmKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKyAgICBzaC0+ciA9IChjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKil1bml0LT5jb250ZW50 OworCisgICAgcmV0ID0gc2hfZGVyaXZlKHNoLCBmcHMpOworICAgIGlmIChyZXQgPCAwKQorICAg ICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL3Z2Yy92dmNfcHMuaCBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19wcy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmMyYTlmZThiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJhdmNvZGVjL3Z2Yy92dmNfcHMuaApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIFZWQyBwYXJh bWV0ZXIgc2V0IHBhcnNlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMyBOdW8gTWkKKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVkNPREVDX1ZWQ19Q U19ICisjZGVmaW5lIEFWQ09ERUNfVlZDX1BTX0gKKworI2luY2x1ZGUgImxpYmF2Y29kZWMvdnZj LmgiCisKKyNkZWZpbmUgSVNfSURSKHMpICAoKHMpLT52Y2xfdW5pdF90eXBlID09IFZWQ19JRFJf V19SQURMIHx8IChzKS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfSURSX05fTFApCisjZGVmaW5lIElT X0NSQShzKSAgKChzKS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfQ1JBX05VVCkKKyNkZWZpbmUgSVNf SVJBUChzKSAoSVNfSURSKHMpIHx8IElTX0NSQShzKSkKKyNkZWZpbmUgSVNfR0RSKHMpICAoKHMp LT52Y2xfdW5pdF90eXBlID09IFZWQ19HRFJfTlVUKQorI2RlZmluZSBJU19DVlNTKHMpIChJU19J UkFQKHMpfHwgSVNfR0RSKHMpKQorI2RlZmluZSBJU19DTFZTUyhzKSAoSVNfQ1ZTUyhzKSAmJiBz LT5ub19vdXRwdXRfYmVmb3JlX3JlY292ZXJ5X2ZsYWcpCisjZGVmaW5lIElTX1JBU0wocykgKChz KS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfUkFTTF9OVVQpCisjZGVmaW5lIElTX1JBREwocykgKChz KS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfUkFETF9OVVQpCisKKyNkZWZpbmUgSVNfSShyc2gpICgo cnNoKS0+c2hfc2xpY2VfdHlwZSA9PSBWVkNfU0xJQ0VfVFlQRV9JKQorI2RlZmluZSBJU19QKHJz aCkgKChyc2gpLT5zaF9zbGljZV90eXBlID09IFZWQ19TTElDRV9UWVBFX1ApCisjZGVmaW5lIElT X0IocnNoKSAoKHJzaCktPnNoX3NsaWNlX3R5cGUgPT0gVlZDX1NMSUNFX1RZUEVfQikKKworI2Rl ZmluZSBJTlZfUE9DIElOVF9NSU4KKyNkZWZpbmUgR0RSX0lTX1JFQ09WRVJFRChzKSAgKHMtPmdk cl9yZWNvdmVyeV9wb2ludF9wb2MgPT0gSU5WX1BPQykKKyNkZWZpbmUgR0RSX1NFVF9SRUNPVkVS RUQocykgKHMtPmdkcl9yZWNvdmVyeV9wb2ludF9wb2MgPSAgSU5WX1BPQykKKworI2RlZmluZSBM TUNTX01BWF9CSVRfREVQVEggIDEyCisjZGVmaW5lIExNQ1NfTUFYX0xVVF9TSVpFICAgKDEgPDwg TE1DU19NQVhfQklUX0RFUFRIKQorI2RlZmluZSBMTUNTX01BWF9CSU5fU0laRSAgIDE2CisjZGVm aW5lIExBREZfTUFYX0lOVEVSVkFMICAgNQorCitlbnVtIHsKKyAgICBDSFJPTUFfRk9STUFUX01P Tk8sCisgICAgQ0hST01BX0ZPUk1BVF80MjAsCisgICAgQ0hST01BX0ZPUk1BVF80MjIsCisgICAg Q0hST01BX0ZPUk1BVF80NDQsCit9OworCit0eXBlZGVmIHN0cnVjdCBWVkNTUFMgeworICAgIEFW QnVmZmVyUmVmICpycmVmOworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnI7CisKKyAgICAvL2Rlcml2 ZWQgdmFsdWVzCisgICAgdWludDE2X3QgICAgd2lkdGg7CisgICAgdWludDE2X3QgICAgaGVpZ2h0 OworICAgIHVpbnQ4X3QgICAgIGhzaGlmdFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIHVp bnQ4X3QgICAgIHZzaGlmdFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIHVpbnQzMl90ICAg IG1heF9waWNfb3JkZXJfY250X2xzYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg TWF4UGljT3JkZXJDbnRMc2IKKworICAgIHVpbnQ4X3QgICAgIHBpeGVsX3NoaWZ0OworICAgIGVu dW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10OworCisgICAgdWludDhfdCAgICAgYml0X2RlcHRoOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQml0RGVwdGgKKyAg ICB1aW50OF90ICAgICBxcF9iZF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBRcEJkT2Zmc2V0CisgICAgdWludDhfdCAgICAgY3RiX2xvZzJfc2l6ZV95 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3RiTG9nMlNpemVZCisg ICAgdWludDhfdCAgICAgY3RiX3NpemVfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgQ3RiU2l6ZVkKKyAgICB1aW50OF90ICAgICBtaW5fY2JfbG9nMl9zaXpl X3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNaW5DYkxvZzJTaXplWQor ICAgIHVpbnQ4X3QgICAgIG1pbl9jYl9zaXplX3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLy88IE1pbkNiU2l6ZVkKKyAgICB1aW50OF90ICAgICBtYXhfdGJfc2l6ZV95 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXhUYlNpemVZCisg ICAgdWludDhfdCAgICAgbWF4X3RzX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgTWF4VHNTaXplCisgICAgdWludDhfdCAgICAgbWF4X251bV9tZXJnZV9j YW5kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TnVtTWVyZ2VDYW5k CisgICAgdWludDhfdCAgICAgbWF4X251bV9pYmNfbWVyZ2VfY2FuZDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgTWF4TnVtSWJjTWVyZ2VDYW5kCisgICAgdWludDhfdCAgICAgbWF4 X251bV9ncG1fbWVyZ2VfY2FuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4 TnVtR3BtTWVyZ2VDYW5kCisgICAgdWludDhfdCAgICAgbnVtX2xhZGZfaW50ZXJ2YWxzOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgc3BzX251bV9sYWRmX2ludGVydmFsc19t aW51czIgKyAyOworICAgIHVpbnQzMl90ICAgIGxhZGZfaW50ZXJ2YWxfbG93ZXJfYm91bmRbTEFE Rl9NQVhfSU5URVJWQUxdOyAgICAgICAvLy88IFNwc0xhZGZJbnRlcnZhbExvd2VyQm91bmRbXQor ICAgIHVpbnQ4X3QgICAgIGxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWw7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvLy88IHNwc19sb2cyX3BhcmFsbGVsX21lcmdlX2xldmVsX21pbnVzMiArIDI7 CisgICAgdWludDhfdCAgICAgbG9nMl90cmFuc2Zvcm1fcmFuZ2U7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgTG9nMlRyYW5zZm9ybVJhbmdlCisgICAgaW50OF90ICAgICAgY2hy b21hX3FwX3RhYmxlWzNdW1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxFXTsgICAgIC8vLzwgQ2hy b21hUXBUYWJsZQorfSBWVkNTUFM7CisKK3R5cGVkZWYgc3RydWN0IERCUGFyYW1zIHsKKyAgICBp bnQ4X3QgYmV0YV9vZmZzZXRbVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAgICBpbnQ4X3QgdGNf b2Zmc2V0W1ZWQ19NQVhfU0FNUExFX0FSUkFZU107Cit9IERCUGFyYW1zOworCit0eXBlZGVmIHN0 cnVjdCBWVkNQUFMgeworICAgIEFWQnVmZmVyUmVmICpycmVmOworICAgIGNvbnN0IEgyNjZSYXdQ UFMgKnI7CisKKyAgICAvL2Rlcml2ZWQgdmFsdWU7CisgICAgaW50OF90ICAgY2hyb21hX3FwX29m ZnNldFszXTsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgcHBzX2NiX3FwX29mZnNldCwgcHBz X2NyX3FwX29mZnNldCwgcHBzX2pvaW50X2NiY3JfcXBfb2Zmc2V0X3ZhbHVlCisgICAgaW50OF90 ICAgY2hyb21hX3FwX29mZnNldF9saXN0WzZdWzNdOyAgICAgICAgICAgICAgIC8vLzwgcHBzX2Ni X3FwX29mZnNldF9saXN0LCBwcHNfY3JfcXBfb2Zmc2V0X2xpc3QsIHBwc19qb2ludF9jYmNyX3Fw X29mZnNldF9saXN0CisKKyAgICB1aW50MTZfdCB3aWR0aDsKKyAgICB1aW50MTZfdCBoZWlnaHQ7 CisKKyAgICB1aW50MTZfdCBzbGljZV9zdGFydF9vZmZzZXRbVlZDX01BWF9TTElDRVNdOworICAg IHVpbnQxNl90IG51bV9jdHVzX2luX3NsaWNlIFtWVkNfTUFYX1NMSUNFU107CisKKyAgICB1aW50 MTZfdCBtaW5fY2Jfd2lkdGg7CisgICAgdWludDE2X3QgbWluX2NiX2hlaWdodDsKKworICAgIHVp bnQxNl90IGN0Yl93aWR0aDsKKyAgICB1aW50MTZfdCBjdGJfaGVpZ2h0OworICAgIHVpbnQzMl90 IGN0Yl9jb3VudDsKKworICAgIHVpbnQxNl90IG1pbl9wdV93aWR0aDsKKyAgICB1aW50MTZfdCBt aW5fcHVfaGVpZ2h0OworICAgIHVpbnQxNl90IG1pbl90dV93aWR0aDsKKyAgICB1aW50MTZfdCBt aW5fdHVfaGVpZ2h0OworCisgICAgdWludDMyX3QgKmN0Yl9hZGRyX2luX3NsaWNlOyAgICAgICAg ICAgIC8vLzwgQ3RiQWRkckluQ3VyclNsaWNlIGZvciBlbnRpcmUgcGljdHVyZQorICAgIHVpbnQx Nl90ICpjb2xfYmQ7CisgICAgdWludDE2X3QgKnJvd19iZDsKKyAgICB1aW50MTZfdCAqY3RiX3Rv X2NvbF9iZDsKKyAgICB1aW50MTZfdCAqY3RiX3RvX3Jvd19iZDsKKworICAgIHVpbnQxNl90IHdp ZHRoMzI7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IHdpZHRoICBpbiAzMiBwaXhlbHMKKyAg ICB1aW50MTZfdCBoZWlnaHQzMjsgICAgICAgICAgICAgICAgICAgICAgLy8vPCBoZWlnaHQgaW4g MzIgcGl4ZWxzCisgICAgdWludDE2X3Qgd2lkdGg2NDsgICAgICAgICAgICAgICAgICAgICAgIC8v Lzwgd2lkdGggIGluIDY0IHBpeGVscworICAgIHVpbnQxNl90IGhlaWdodDY0OyAgICAgICAgICAg ICAgICAgICAgICAvLy88IGhlaWdodCBpbiA2NCBwaXhlbHMKKworICAgIHVpbnQxNl90IHJlZl93 cmFwYXJvdW5kX29mZnNldDsgICAgICAgICAvLy88IFBwc1JlZldyYXBhcm91bmRPZmZzZXQKKwor fSBWVkNQUFM7CisKKyNkZWZpbmUgTUFYX1dFSUdIVFMgMTUKK3R5cGVkZWYgc3RydWN0IFByZWRX ZWlnaHRUYWJsZSB7CisgICAgdWludDhfdCBsb2cyX2Rlbm9tWzJdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8vPCBsdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tLCBDaHJvbWFM b2cyV2VpZ2h0RGVub20KKworICAgIHVpbnQ4X3QgbmJfd2VpZ2h0c1syXTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgbnVtX2wwX3dlaWdodHMsIG51bV9sMV93ZWln aHRzCisgICAgdWludDhfdCB3ZWlnaHRfZmxhZ1syXVsyXVtNQVhfV0VJR0hUU107ICAgICAgICAg ICAgICAgICAgICAgLy8vPCBsdW1hX3dlaWdodF9sMF9mbGFnLCBjaHJvbWFfd2VpZ2h0X2wwX2Zs YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8vPCBsdW1hX3dlaWdodF9sMV9mbGFnLCBjaHJvbWFfd2VpZ2h0X2wxX2Zs YWcsCisgICAgaW50MTZfdCB3ZWlnaHRbMl1bVlZDX01BWF9TQU1QTEVfQVJSQVlTXVtNQVhfV0VJ R0hUU107ICAgICAgLy8vPCBMdW1hV2VpZ2h0TDAsIEx1bWFXZWlnaHRMMSwgQ2hyb21hV2VpZ2h0 TDAsIENocm9tYVdlaWdodEwxCisgICAgaW50MTZfdCBvZmZzZXRbMl1bVlZDX01BWF9TQU1QTEVf QVJSQVlTXVtNQVhfV0VJR0hUU107ICAgICAgLy8vPCBsdW1hX29mZnNldF9sMCwgbHVtYV9vZmZz ZXRfbDEsIENocm9tYU9mZnNldEwwLCBDaHJvbWFPZmZzZXRMMQorfSBQcmVkV2VpZ2h0VGFibGU7 CisKK3R5cGVkZWYgc3RydWN0IFZWQ1BIIHsKKyAgICBBVkJ1ZmZlclJlZiAqcnJlZjsKKyAgICBj b25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcjsKKworICAgIC8vZGVyaXZlZCB2YWx1ZXMKKyAg ICB1aW50MzJfdCBtYXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQ7ICAgICAgICAgICAvLy88IE1h eE51bVN1YmJsb2NrTWVyZ2VDYW5kCisgICAgaW50MzJfdCAgcG9jOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8vPCBQaWNPcmRlckNudFZhbAorICAgIFByZWRXZWlnaHRUYWJs ZSBwd3Q7Cit9IFZWQ1BIOworCisjZGVmaW5lIFZWQ19NQVhfQUxGX0NPVU5UICAgICAgICA4Cisj ZGVmaW5lIFZWQ19NQVhfTE1DU19DT1VOVCAgICAgICA0CisjZGVmaW5lIFZWQ19NQVhfU0xfQ09V TlQgICAgICAgICA4CisKK3R5cGVkZWYgc3RydWN0IFZWQ1BhcmFtU2V0cyB7CisgICAgQVZCdWZm ZXJSZWYgKnZwc19saXN0W1ZWQ19NQVhfVlBTX0NPVU5UXTsKKyAgICBBVkJ1ZmZlclJlZiAqc3Bz X2xpc3RbVlZDX01BWF9TUFNfQ09VTlRdOworICAgIEFWQnVmZmVyUmVmICpwcHNfbGlzdFtWVkNf TUFYX1BQU19DT1VOVF07CisgICAgQVZCdWZmZXJSZWYgKmFsZl9saXN0W1ZWQ19NQVhfQUxGX0NP VU5UXTsKKyAgICBBVkJ1ZmZlclJlZiAqbG1jc19saXN0W1ZWQ19NQVhfTE1DU19DT1VOVF07Cisg ICAgQVZCdWZmZXJSZWYgKnNjYWxpbmdfbGlzdFtWVkNfTUFYX1NMX0NPVU5UXTsKK30gVlZDUGFy YW1TZXRzOworCisjZGVmaW5lIEFMRl9OVU1fRklMVEVSU19MVU1BICAgIDI1CisjZGVmaW5lIEFM Rl9OVU1fRklMVEVSU19DSFJPTUEgICA4CisjZGVmaW5lIEFMRl9OVU1fRklMVEVSU19DQyAgICAg ICA1CisKKyNkZWZpbmUgQUxGX05VTV9DT0VGRl9MVU1BICAgICAgMTIKKyNkZWZpbmUgQUxGX05V TV9DT0VGRl9DSFJPTUEgICAgIDYKKyNkZWZpbmUgQUxGX05VTV9DT0VGRl9DQyAgICAgICAgIDcK KwordHlwZWRlZiBzdHJ1Y3QgVlZDQUxGIHsKKyAgICBBVkJ1ZmZlclJlZiAqcnJlZjsKKworICAg IGludDE2X3QgbHVtYV9jb2VmZiAgICAgW0FMRl9OVU1fRklMVEVSU19MVU1BXVtBTEZfTlVNX0NP RUZGX0xVTUFdOworICAgIHVpbnQ4X3QgbHVtYV9jbGlwX2lkeCAgW0FMRl9OVU1fRklMVEVSU19M VU1BXVtBTEZfTlVNX0NPRUZGX0xVTUFdOworCisgICAgdWludDhfdCBudW1fY2hyb21hX2ZpbHRl cnM7CisgICAgaW50MTZfdCBjaHJvbWFfY29lZmYgICBbQUxGX05VTV9GSUxURVJTX0NIUk9NQV1b QUxGX05VTV9DT0VGRl9DSFJPTUFdOworICAgIHVpbnQ4X3QgY2hyb21hX2NsaXBfaWR4W0FMRl9O VU1fRklMVEVSU19DSFJPTUFdW0FMRl9OVU1fQ09FRkZfQ0hST01BXTsKKworICAgIHVpbnQ4X3Qg bnVtX2NjX2ZpbHRlcnNbMl07ICAgICAgICAvLy88IGFsZl9jY19jYl9maWx0ZXJzX3NpZ25hbGxl ZF9taW51czEgKyAxLCBhbGZfY2NfY3JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMQorICAg IGludDE2X3QgY2NfY29lZmZbMl1bQUxGX05VTV9GSUxURVJTX0NDXVtBTEZfTlVNX0NPRUZGX0ND XTsKK30gVlZDQUxGOworCitlbnVtIHsKKyAgU0xfU1RBUlRfMngyICAgID0gMCwKKyAgU0xfU1RB UlRfNHg0ICAgID0gMiwKKyAgU0xfU1RBUlRfOHg4ICAgID0gOCwKKyAgU0xfU1RBUlRfMTZ4MTYg ID0gMTQsCisgIFNMX1NUQVJUXzMyeDMyICA9IDIwLAorICBTTF9TVEFSVF82NHg2NCAgPSAyNiwK KyAgU0xfTUFYX0lEICAgICAgID0gMjgsCit9OworCisjZGVmaW5lIFNMX01BWF9NQVRSSVhfU0la RSA4CisKK3R5cGVkZWYgc3RydWN0IFZWQ1NjYWxpbmdMaXN0IHsKKyAgICBBVkJ1ZmZlclJlZiAq cnJlZjsKKworICAgIHVpbnQ4X3Qgc2NhbGluZ19tYXRyaXhfcmVjW1NMX01BWF9JRF1bU0xfTUFY X01BVFJJWF9TSVpFICogU0xfTUFYX01BVFJJWF9TSVpFXTsgIC8vLzwgU2NhbGluZ01hdHJpeFJl YworICAgIHVpbnQ4X3Qgc2NhbGluZ19tYXRyaXhfZGNfcmVjW1NMX01BWF9JRCAtIFNMX1NUQVJU XzE2eDE2XTsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgU2NhbGluZ01hdHJpeERjUmVjW3Jl ZklkIOKIkiAxNF0KK30gVlZDU2NhbGluZ0xpc3Q7CisKK3R5cGVkZWYgc3RydWN0IFZWQ0xNQ1Mg eworICAgIHVpbnQ4X3QgIG1pbl9iaW5faWR4OworICAgIHVpbnQ4X3QgIG1heF9iaW5faWR4Owor CisgICAgLy8qMiBmb3IgaGlnaCBkZXB0aAorICAgIHVpbnQ4X3QgIGZ3ZF9sdXRbTE1DU19NQVhf TFVUX1NJWkUgKiAyXTsKKyAgICB1aW50OF90ICBpbnZfbHV0W0xNQ1NfTUFYX0xVVF9TSVpFICog Ml07CisKKyAgICB1aW50MTZfdCBwaXZvdFtMTUNTX01BWF9CSU5fU0laRSArIDFdOworICAgIHVp bnQxNl90IGNocm9tYV9zY2FsZV9jb2VmZltMTUNTX01BWF9CSU5fU0laRV07Cit9IFZWQ0xNQ1M7 CisKK3R5cGVkZWYgc3RydWN0IFZWQ0ZyYW1lUGFyYW1TZXRzIHsKKyAgICBBVkJ1ZmZlclJlZiAg ICAgICAgICAgICpzcHNfYnVmOworICAgIEFWQnVmZmVyUmVmICAgICAgICAgICAgKnBwc19idWY7 CisgICAgQVZCdWZmZXJSZWYgICAgICAgICAgICAqYWxmX2xpc3RbVlZDX01BWF9BTEZfQ09VTlRd OworICAgIEFWQnVmZmVyUmVmICAgICAgICAgICAgKnNsX2J1ZjsKKworICAgIGNvbnN0IFZWQ1NQ UyAgICAgICAgICAgKnNwczsKKyAgICBjb25zdCBWVkNQUFMgICAgICAgICAgICpwcHM7CisgICAg VlZDUEggICAgICAgICAgICAgICAgICAgcGg7CisgICAgVlZDTE1DUyAgICAgICAgICAgICAgICAg bG1jczsKKyAgICBjb25zdCBWVkNTY2FsaW5nTGlzdCAgICpzbDsKK30gVlZDRnJhbWVQYXJhbVNl dHM7CisKK3R5cGVkZWYgc3RydWN0IFZWQ1NIIHsKKyAgICBBVkJ1ZmZlclJlZiAqcnJlZjsKKyAg ICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKnI7CisKKyAgICAvLyBkZXJpdmVkIHZhbHVlcwor ICAgIC8vIGN0dSBhZGRyZXNzCisgICAgdWludDMyX3QgICAgICAgIG51bV9jdHVzX2luX2N1cnJf c2xpY2U7ICAgICAgICAgICAgICAgICAvLy88IE51bUN0dXNJbkN1cnJTbGljZQorICAgIGNvbnN0 IHVpbnQzMl90KiBjdGJfYWRkcl9pbl9jdXJyX3NsaWNlOyAgICAgICAgICAgICAgICAgLy8vPCBD dGJBZGRySW5DdXJyU2xpY2UKKworICAgIC8vIGludGVyCisgICAgUHJlZFdlaWdodFRhYmxlIHB3 dDsKKyAgICBpbnQ4X3QgICByZWZfaWR4X3N5bVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgUmVmSWR4U3ltTDAsIFJlZklkeFN5bUwxCisKKyAgICAvLyBxcF95CisgICAg aW50OF90ICAgc2xpY2VfcXBfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv Ly88IFNsaWNlUXBZCisKKyAgICAvLyBkZWJsb2NrX29mZnNldHMKKyAgICBEQlBhcmFtcyBkZWJs b2NrOworCisgICAgLy8gcGFydGl0aW9uIGNvbnN0cmFpbnMKKyAgICB1aW50OF90ICBtaW5fcXRf c2l6ZVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWluUXRTaXplWSwg TWluUXRTaXplQworICAgIHVpbnQ4X3QgIG1heF9idF9zaXplWzJdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vPCBNYXhCdFNpemVZLCBNYXhCdFNpemVDCisgICAgdWludDhfdCAg bWF4X3R0X3NpemVbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heFR0 U2l6ZVksIE1heFR0U2l6ZUMKKyAgICB1aW50OF90ICBtYXhfbXR0X2RlcHRoWzJdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TXR0RGVwdGhZLCBNYXhNdHREZXB0aEMKKyAg ICB1aW50OF90ICBjdV9xcF9kZWx0YV9zdWJkaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vLzwgQ3VRcERlbHRhU3ViZGl2CisgICAgdWludDhfdCAgY3VfY2hyb21hX3FwX29mZnNldF9z dWJkaXY7ICAgICAgICAgICAgICAgICAgICAvLy88IEN1Q2hyb21hUXBPZmZzZXRTdWJkaXYKKwor ICAgIC8vIGVudHJpZXMKKyAgICB1aW50MzJfdCBlbnRyeV9wb2ludF9zdGFydF9jdHVbVlZDX01B WF9FTlRSWV9QT0lOVFNdOyAgIC8vLzwgZW50cnkgcG9pbnQgc3RhcnQgaW4gY3R1X2FkZHIKK30g VlZDU0g7CisKK3N0cnVjdCBWVkNDb250ZXh0OworCitpbnQgZmZfdnZjX2RlY29kZV9mcmFtZV9w cyhWVkNGcmFtZVBhcmFtU2V0cyAqZnBzLCBzdHJ1Y3QgVlZDQ29udGV4dCAqcyk7CitpbnQgZmZf dnZjX2RlY29kZV9hcHMoVlZDUGFyYW1TZXRzICpwcywgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0 ICp1bml0KTsKK2ludCBmZl92dmNfZGVjb2RlX3NoKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQ YXJhbVNldHMgKnBzLCBjb25zdCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQpOwordm9pZCBmZl92 dmNfZnJhbWVfcHNfZnJlZShWVkNGcmFtZVBhcmFtU2V0cyAqZnBzKTsKK3ZvaWQgZmZfdnZjX3Bz X3VuaW5pdChWVkNQYXJhbVNldHMgKnBzKTsKKworI2VuZGlmIC8qIEFWQ09ERUNfVlZDX1BTX0gg Ki8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y2RlYy5oIGIvbGliYXZjb2RlYy92dmMv dnZjZGVjLmgKaW5kZXggNjk4YWI4OWI5ZC4uYTQ2ZWMyOGI4YSAxMDA2NDQKLS0tIGEvbGliYXZj b2RlYy92dmMvdnZjZGVjLmgKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjZGVjLmgKQEAgLTMyLDYg KzMyLDggQEAKICNpbmNsdWRlICJsaWJhdmNvZGVjL3Z2Yy5oIgogI2luY2x1ZGUgImxpYmF2dXRp bC9leGVjdXRvci5oIgogCisjaW5jbHVkZSAidnZjX3BzLmgiCisKICNkZWZpbmUgTFVNQSAgICAg ICAgICAgICAgICAgICAgMAogI2RlZmluZSBDSFJPTUEgICAgICAgICAgICAgICAgICAxCiAjZGVm aW5lIENCICAgICAgICAgICAgICAgICAgICAgIDEKQEAgLTI3MSw2ICsyNzMsOCBAQCB0eXBlZGVm IHN0cnVjdCBWVkNDb250ZXh0IHsKICAgICBDb2RlZEJpdHN0cmVhbUNvbnRleHQgKmNiYzsKICAg ICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50IGN1cnJlbnRfZnJhbWU7CiAKKyAgICBWVkNQYXJhbVNl dHMgcHM7CisKICAgICBpbnQgdGVtcG9yYWxfaWQ7ICAgICAgICAvLy88IHRlbXBvcmFsX2lkX3Bs dXMxIC0gMQogICAgIGludCBwb2NfdGlkMDsKIAotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0 CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVt YWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNj cmliZSIuCg==