From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2130.outbound.protection.outlook.com [40.107.92.130]) by sourceware.org (Postfix) with ESMTPS id C21873858410 for ; Fri, 16 Jun 2023 08:51:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C21873858410 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=os.amperecomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=os.amperecomputing.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ib52K8zdCoMhhViFKd0D7pD3UfAbtHdt/O6TvfDPG/np83t0LyTZykFXouAk1u8ORN9uqQ2OggdF1oujvcVjNwW8hJaIiWpDGTKhI0mLECmIDUh5dNOiv9UkgG9tQpK7qV358Z3w5YeyVTjctHwrRhzLX2zZhcVVHjUDHcQmC9y84qN+FBsClfaOATcV/635dGFbkGKJBrlBFGQ2ZZeUeu0BLJfmrG9KYWdCel3tHC+SbyYBJ33WsN+7eHZv10fvJT/uXJIwvTeb6WCmbOVqT6pVI1a/inVRXDvdi1fMU/w3WXxCkdpg0/kMXx2pfmkHIccwPkBgVBJ1KIWNIZYdRQ== 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=ZCswITzwKKIxhGHAw1zowoNRpbo2jl9PPDFp+Wr0OuI=; b=Oyv37eIUbyNea0jKsGCaz3/e3i9K3nKObeJc5m3anpYif7ep0AZ4j80xF/DE8S0iNpCJGR9TlX/IeiVkdpcgZWTuI6ciGIJSHkiAeXhj+EoKZkBhtxE9eWbtMzlFK4AAN1YPQxhyr6VBWev/T/4bZl4F8ywavwKWsZEUt84qyRDHVLjIJsBhjyIckF4+MRr99wac7X3qzbFiWW/o764Zolqhbp9aIEMQ4Bk/1XU4uV0B2nTidEZtmgkHsS0VgnUc0xY3Kf9EkG/TLBNxnu0BI3NILgG8Djl/GmnPy+wDHX2a99I1MdlkaGS3umk15l1l27yxv6T+wZWd1TtTosLWJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZCswITzwKKIxhGHAw1zowoNRpbo2jl9PPDFp+Wr0OuI=; b=g9BBS8JRdToe5sO7IW/T5Zl7aZwhy6eWWVttSYr/eFXAvDU6opvvZlzd8QNpuNLMRifDarJv/z1VEAozAAKaT+adjpc+9B1Q6knlJJvhY5PaQhjecsPe3ic2SH1wiNFDfiaqhmCd3jrDhfxUjRofpE/FSA5JPsXT52KRTE+JVIU= Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by PH0PR01MB7524.prod.exchangelabs.com (2603:10b6:510:f7::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.29; Fri, 16 Jun 2023 08:50:54 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::2d06:ba3a:4a9c:1612]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::2d06:ba3a:4a9c:1612%7]) with mapi id 15.20.6500.029; Fri, 16 Jun 2023 08:50:54 +0000 From: Di Zhao OS To: "gcc-patches@gcc.gnu.org" Subject: [PATCH] tree-optimization/110279- Check for nested FMA chains in reassoc Thread-Topic: [PATCH] tree-optimization/110279- Check for nested FMA chains in reassoc Thread-Index: AdmgLZ4LEuSVXmH+Rp+4f1BgeMsxPw== Date: Fri, 16 Jun 2023 08:50:53 +0000 Message-ID: Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ActionId=fbf64c77-eacd-4d6e-8c92-6063d6188c8f;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ContentBits=0;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Enabled=true;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Method=Standard;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Name=Confidential (Default);MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SetDate=2023-06-16T08:34:01Z;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SiteId=3bc2b170-fd94-476d-b0ce-4229bdc904a7; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR01MB4240:EE_|PH0PR01MB7524:EE_ x-ms-office365-filtering-correlation-id: 7bdacb6e-02fa-49ea-7871-08db6e46cb4d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 7QhLCQ84vfpZm7d76FYx/Yv32tzAQSMVjU2GNPmxRkRBFyGuaIGapLmSZIaG0uKJTc/tRqXpSq7cEqjTrg42JDN5cn4oI6gEVzmDQ9nkalJ6GMRaDD2UmdiMRJ7J/HHAg+rg6m3fgeYhE+WhUL+DGETL/vVozSYfEGzZ0dlh6BqNtS3wgGgljbdVJ0W7hS1+zB0X4ppe88bQtIDNlN47ACHZvhBot2KPt248JFtxQ4rNmyN3PV7qJAs5KrXxTaZ48nQugogBNo6Kc5epFVfkwQYfRFuQ1CtbC+D0+F0f4H1/lgqKS3dAY/U8aQkOK2QyyFeziSW3K7zDarAbTnO6zpCCb54peRRNxyiHL+pTHAof8VTHt8NU5qK1duyRbJPiYO9V78PqZP7mnAu7WDJpZMexXNr3ilAOesDZBDlcNESFbDbiVBpT28T9YX1J/Yoh/HXnif3oCM8MPv2HlXyJUDdSOkHMrG3eTt8C2Gcj1RtoUJ17BynF0FLvFx3AaXDp+rXSKf0VQZD4NzqXR5TppksSqaQNl6k2ZasUXStxWFmzQMUDhh03AXNvSP36hphA8H+BRBXvX8BNUFelZFBbp7zwgvkeMmb58pNODPtWWRbrx50wVPi4qeQ6NAG2QpCM x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR01MB4240.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(366004)(136003)(396003)(376002)(39850400004)(346002)(451199021)(478600001)(99936003)(33656002)(38070700005)(122000001)(38100700002)(86362001)(55016003)(66946007)(7696005)(71200400001)(8676002)(8936002)(2906002)(52536014)(5660300002)(64756008)(66476007)(66556008)(76116006)(66446008)(6916009)(316002)(41300700001)(186003)(9686003)(6506007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?U5IN75Uu7tvxUkfPL2kSNkA0DkROtixquRb5bxZha5ipOztg/O4zPqXJPx4o?= =?us-ascii?Q?ra22zJvWsGgO47G8V5WUVO042r0avnJGbDWLqE/OjPkeZvDfftkyt+1sLnq3?= =?us-ascii?Q?44DrefRVFjR9EiaMMGpnuUk6ATrafCjt8YuDBo0c3psl5Ta6uFaXdAu0ni4P?= =?us-ascii?Q?kGbXR7070bxA7NpK6/+8sh6/4Uweq2841r+Diydms/ppjqNJtJ5bEQ1nBvx5?= =?us-ascii?Q?ffSEZ8826wGnD73THY6rS8nSrKFNlmZcxP7VRXKMB/+kdqh/riFHUem99iv0?= =?us-ascii?Q?EopFyQC7n0IEzo+NMf80GADl7jYgAzEzfNN1YjhSi0OvRWN2DFoZ259Fezv+?= =?us-ascii?Q?ASEeWBrOOVIsNYXn82DMrznV5VVXC68T/7eGDephJIAlnwXxKAtbpfBjIIhC?= =?us-ascii?Q?A6la9U9rI9aILLEjuodnHCOcW/Bl3/o0n7ijXfLlpY3BjAQlovuOwthpixaG?= =?us-ascii?Q?IT4FI1buJ4bjrTjJf9aXmSIBUdw//1fzuUrXsM4rj6Sb4fF5SInh347znLhY?= =?us-ascii?Q?QEjo4TNHc9Xjg74iTXbjcUebtIMMANUVUnh7sU3A4jJN1YjUiCl7T6Djwa0p?= =?us-ascii?Q?bC1yeiTliJ5lGLN/tepCTHQa1ILqlabH6Glbs1qMAF0NJ5VO7ZUF1R19traE?= =?us-ascii?Q?IKZGsgT2117VXuWqYV+t2inG+EQFVI+dFcaXkdUbJkkNRkiuZh78GtbRK6P0?= =?us-ascii?Q?8zmwq1NG3wbTsgUxqlm9dyQtviJdDK8OzGYKX1PriZvAVSwzRlmFZBcC+TaR?= =?us-ascii?Q?t42j6nZDcc0VS9GHSZI16p97OPh1ADRt3vJZu6ZeZ/PqB3rhAYHgR7A93l2p?= =?us-ascii?Q?404uA0mESwThFT8BNNj+Yje9iH8dG6CPbMTMp/yW+YJnAv1CW20vXLGEFpPs?= =?us-ascii?Q?FBctLgxRwJP7+ahaYeq2+RAJibZf4surawczvKBS7eUxhXdfAWKI3mnWxFZz?= =?us-ascii?Q?Uvts/nL7i3fCnLuZdIr76wsMTxKGAhh5A0+qXzj1+WVQrVqfuXQ+IEwjB/3k?= =?us-ascii?Q?1euHRzSdwSR37m+H70RkNTLBsj2JmmyEx3A29TMWvnGXGxox+hgJTYlgJvJq?= =?us-ascii?Q?7XwToc1fipeOzRqL12HCes6cMrwi1ONCcxWjWr4ozvFuy4FrVqZJT2otV6uK?= =?us-ascii?Q?lXa7HyAKvEmQSmgenTy7/u9JwI3SAIrYJxgpdiuUWB2FK5RNVQWUfkq5nPI2?= =?us-ascii?Q?YDAtYV3AiUSEU7Yp7FTj9X7J1G8nqAgk69qkEFC4p8DlEh6XDCLxdbKT1FiC?= =?us-ascii?Q?76NkKN1lEYv00Dq94ZB3QxqBs0dP5xISydGQGa0jD/tmPBwWytPb/Oez6Cj/?= =?us-ascii?Q?usygxN7W7WiWGjcAS0nTXwCpqVaCLCj6ddBx5CAYrWg1/TfKyIV4u/a2i/RT?= =?us-ascii?Q?91GmSco8Bt8sNXtJRrNgMlBtidyYC7HqDEWF8YDPmHDmopJy5TfhQJFBHEYT?= =?us-ascii?Q?QUzxH8InsZFTPUbXkOyxBzlaolp6SEIKnN6r7Qg89C/RHpSb19r1ebI7/e6g?= =?us-ascii?Q?qW/aCgmXoD8zbpFo8IKJRwOFUK7+QGzx+eCRZWvNhcTwFwIIUwuRhvp0sI8f?= =?us-ascii?Q?mGFT3OBmeQYN2NXtXm7Hip9bThop6svhG1bGsQ8XqEEZmwpiZ5MlsXaNHeH6?= =?us-ascii?Q?R4mJE2jbg4cnhh2JY+BYh4UOYLs9DDyCjxF0MkrtcUv2AU6e7ns8wg27OhYi?= =?us-ascii?Q?K/Ie8g=3D=3D?= Content-Type: multipart/mixed; boundary="_002_SN6PR01MB4240ADAFCBC72E9B1F54E4EAE858ASN6PR01MB4240prod_" MIME-Version: 1.0 X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR01MB4240.prod.exchangelabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7bdacb6e-02fa-49ea-7871-08db6e46cb4d X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jun 2023 08:50:54.0407 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: c2pu7rMtlWasp12mlf1N/7Z2JLvVESSUwqxCQHcbQyKYm8vX1f/jwwna12mqMhKIsKRJTcYhVIMU/c2DmYkpHvWKKRfXg7DHtbo5BxVMSldIK2rMLed2NNOCQ7X4yeiS X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR01MB7524 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_002_SN6PR01MB4240ADAFCBC72E9B1F54E4EAE858ASN6PR01MB4240prod_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable This patch is to fix the regressions found in SPEC2017 fprate cases on aarch64. 1. Reused code in pass widening_mul to check for nested FMA chains (those connected by MULT_EXPRs), since re-writing to parallel generates worse codes. 2. Avoid re-arrange to produce less FMA chains that can be slow. Tested on ampere1 and neoverse-n1, this fixed the regressions in 508.namd_r and 510.parest_r 1 copy run. While I'm still collecting data on x86 machines we have, I'd like to know what do you think of this. (Previously I tried to improve things with FMA by adding a widening_mul pass before reassoc2 for it's easier to recognize different patterns of FMA chains and decide whether to split them. But I suppose handling them all in reassoc pass is more efficient.) Thanks, Di Zhao --- gcc/ChangeLog: * tree-ssa-math-opts.cc (convert_mult_to_fma_1): Add new parameter. Support new mode that merely do the checking.=20 (struct fma_transformation_info): Moved to header. (class fma_deferring_state): Moved to header. (convert_mult_to_fma): Add new parameter. * tree-ssa-math-opts.h (struct fma_transformation_info): (class fma_deferring_state): Moved from .cc. (convert_mult_to_fma): Add function decl. * tree-ssa-reassoc.cc (rewrite_expr_tree_parallel): (rank_ops_for_fma): Return -1 if nested FMAs are found. (reassociate_bb): Avoid rewriting to parallel if nested FMAs are fo= und. --_002_SN6PR01MB4240ADAFCBC72E9B1F54E4EAE858ASN6PR01MB4240prod_ Content-Type: application/octet-stream; name="pr110279-Check-for-nested-FMA-chains-in-reassoc.diff" Content-Description: pr110279-Check-for-nested-FMA-chains-in-reassoc.diff Content-Disposition: attachment; filename="pr110279-Check-for-nested-FMA-chains-in-reassoc.diff"; size=12037; creation-date="Fri, 16 Jun 2023 08:48:33 GMT"; modification-date="Fri, 16 Jun 2023 08:50:53 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1tYXRoLW9wdHMuY2MgYi9nY2MvdHJlZS1zc2EtbWF0 aC1vcHRzLmNjCmluZGV4IDljOWNhNTcxYmNkLi45OGI3YjcwZTE0YyAxMDA2NDQKLS0tIGEvZ2Nj L3RyZWUtc3NhLW1hdGgtb3B0cy5jYworKysgYi9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmNjCkBA IC0zMDY3LDcgKzMwNjcsOCBAQCBjb252ZXJ0X3BsdXNtaW51c190b193aWRlbiAoZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKmdzaSwgZ2ltcGxlICpzdG10LAogICAgbXVsdGlwbGljYXRpb24sIGNvbnZl cnRlZCB0byBGTUFzLCBwZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbi4gICovCiAKIHN0YXRpYyB2 b2lkCi1jb252ZXJ0X211bHRfdG9fZm1hXzEgKHRyZWUgbXVsX3Jlc3VsdCwgdHJlZSBvcDEsIHRy ZWUgb3AyKQorY29udmVydF9tdWx0X3RvX2ZtYV8xICh0cmVlIG11bF9yZXN1bHQsIHRyZWUgb3Ax LCB0cmVlIG9wMiwKKwkJICAgICAgIHRyZWUgKnJldHVybl9saHMgPSBOVUxMKQogewogICB0cmVl IHR5cGUgPSBUUkVFX1RZUEUgKG11bF9yZXN1bHQpOwogICBnaW1wbGUgKnVzZV9zdG10OwpAQCAt MzA5MSw4ICszMDkyLDExIEBAIGNvbnZlcnRfbXVsdF90b19mbWFfMSAodHJlZSBtdWxfcmVzdWx0 LCB0cmVlIG9wMSwgdHJlZSBvcDIpCiAJICB1c2Vfb3BlcmFuZF9wIHVzZV9wOwogCSAgZ2ltcGxl ICpuZWd1c2Vfc3RtdDsKIAkgIHNpbmdsZV9pbW1fdXNlIChnaW1wbGVfYXNzaWduX2xocyAodXNl X3N0bXQpLCAmdXNlX3AsICZuZWd1c2Vfc3RtdCk7Ci0JICBnc2lfcmVtb3ZlICgmZ3NpLCB0cnVl KTsKLQkgIHJlbGVhc2VfZGVmcyAodXNlX3N0bXQpOworCSAgaWYgKCFyZXR1cm5fbGhzKQorCSAg ICB7CisJICAgICAgZ3NpX3JlbW92ZSAoJmdzaSwgdHJ1ZSk7CisJICAgICAgcmVsZWFzZV9kZWZz ICh1c2Vfc3RtdCk7CisJICAgIH0KIAogCSAgdXNlX3N0bXQgPSBuZWd1c2Vfc3RtdDsKIAkgIGdz aSA9IGdzaV9mb3Jfc3RtdCAodXNlX3N0bXQpOwpAQCAtMzEwNiw2ICszMTEwLDEyIEBAIGNvbnZl cnRfbXVsdF90b19mbWFfMSAodHJlZSBtdWxfcmVzdWx0LCB0cmVlIG9wMSwgdHJlZSBvcDIpCiAJ Z2NjX3VucmVhY2hhYmxlICgpOwogICAgICAgYWRkb3AgPSBvcHNbMF0gPT0gcmVzdWx0ID8gb3Bz WzFdIDogb3BzWzBdOwogCisgICAgICBpZiAocmV0dXJuX2xocykKKwl7CisJICAqcmV0dXJuX2xo cyA9IGdpbXBsZV9nZXRfbGhzICh1c2Vfc3RtdCk7CisJICByZXR1cm47CisJfQorCiAgICAgICBp ZiAoY29kZSA9PSBNSU5VU19FWFBSKQogCXsKIAkgIGlmIChvcHNbMF0gPT0gcmVzdWx0KQpAQCAt MzE4MSw1NCArMzE5MSw2IEBAIGNvbnZlcnRfbXVsdF90b19mbWFfMSAodHJlZSBtdWxfcmVzdWx0 LCB0cmVlIG9wMSwgdHJlZSBvcDIpCiAgICAgfQogfQogCi0vKiBEYXRhIG5lY2Vzc2FyeSB0byBw ZXJmb3JtIHRoZSBhY3R1YWwgdHJhbnNmb3JtYXRpb24gZnJvbSBhIG11bHRpcGxpY2F0aW9uCi0g ICBhbmQgYW4gYWRkaXRpb24gdG8gYW4gRk1BIGFmdGVyIGRlY2lzaW9uIGlzIHRha2VuIGl0IHNo b3VsZCBiZSBkb25lIGFuZCB0bwotICAgdGhlbiBkZWxldGUgdGhlIG11bHRpcGxpY2F0aW9uIHN0 YXRlbWVudCBmcm9tIHRoZSBmdW5jdGlvbiBJTC4gICovCi0KLXN0cnVjdCBmbWFfdHJhbnNmb3Jt YXRpb25faW5mbwotewotICBnaW1wbGUgKm11bF9zdG10OwotICB0cmVlIG11bF9yZXN1bHQ7Ci0g IHRyZWUgb3AxOwotICB0cmVlIG9wMjsKLX07Ci0KLS8qIFN0cnVjdHVyZSBjb250YWluaW5nIHRo ZSBjdXJyZW50IHN0YXRlIG9mIEZNQSBkZWZlcnJpbmcsIGkuZS4gd2hldGhlciB3ZSBhcmUKLSAg IGRlZmVycmluZywgd2hldGhlciB0byBjb250aW51ZSBkZWZlcnJpbmcsIGFuZCBhbGwgZGF0YSBu ZWNlc3NhcnkgdG8gY29tZQotICAgYmFjayBhbmQgcGVyZm9ybSBhbGwgZGVmZXJyZWQgdHJhbnNm b3JtYXRpb25zLiAgKi8KLQotY2xhc3MgZm1hX2RlZmVycmluZ19zdGF0ZQotewotcHVibGljOgot ICAvKiBDbGFzcyBjb25zdHJ1Y3Rvci4gIFBhc3MgdHJ1ZSBhcyBQRVJGT1JNX0RFRkVSUklORyBp biBvcmRlciB0byBhY3R1YWxseQotICAgICBkbyBhbnkgZGVmZXJyaW5nLiAgKi8KLQotICBmbWFf ZGVmZXJyaW5nX3N0YXRlIChib29sIHBlcmZvcm1fZGVmZXJyaW5nKQotICAgIDogbV9jYW5kaWRh dGVzICgpLCBtX211bF9yZXN1bHRfc2V0ICgpLCBtX2luaXRpYWxfcGhpIChOVUxMKSwKLSAgICAg IG1fbGFzdF9yZXN1bHQgKE5VTExfVFJFRSksIG1fZGVmZXJyaW5nX3AgKHBlcmZvcm1fZGVmZXJy aW5nKSB7fQotCi0gIC8qIExpc3Qgb2YgRk1BIGNhbmRpZGF0ZXMgZm9yIHdoaWNoIHdlIHRoZSB0 cmFuc2Zvcm1hdGlvbiBoYXMgYmVlbiBkZXRlcm1pbmVkCi0gICAgIHBvc3NpYmxlIGJ1dCB3ZSBh dCB0aGlzIHBvaW50IGluIEJCIGFuYWx5c2lzIHdlIGRvIG5vdCBjb25zaWRlciB0aGVtCi0gICAg IGJlbmVmaWNpYWwuICAqLwotICBhdXRvX3ZlYzxmbWFfdHJhbnNmb3JtYXRpb25faW5mbywgOD4g bV9jYW5kaWRhdGVzOwotCi0gIC8qIFNldCBvZiByZXN1bHRzIG9mIG11bHRpcGxpY2F0aW9uIHRo YXQgYXJlIHBhcnQgb2YgYW4gYWxyZWFkeSBkZWZlcnJlZCBGTUEKLSAgICAgY2FuZGlkYXRlcy4g ICovCi0gIGhhc2hfc2V0PHRyZWU+IG1fbXVsX3Jlc3VsdF9zZXQ7Ci0KLSAgLyogVGhlIFBISSB0 aGF0IHN1cHBvc2VkbHkgZmVlZHMgYmFjayByZXN1bHQgb2YgYSBGTUEgdG8gYW5vdGhlciBvdmVy IGxvb3AKLSAgICAgYm91bmRhcnkuICAqLwotICBncGhpICptX2luaXRpYWxfcGhpOwotCi0gIC8q IFJlc3VsdCBvZiB0aGUgbGFzdCBwcm9kdWNlZCBGTUEgY2FuZGlkYXRlIG9yIE5VTEwgaWYgdGhl cmUgaGFzIG5vdCBiZWVuCi0gICAgIG9uZS4gICovCi0gIHRyZWUgbV9sYXN0X3Jlc3VsdDsKLQot ICAvKiBJZiB0cnVlLCBkZWZlcnJpbmcgbWlnaHQgc3RpbGwgYmUgcHJvZml0YWJsZS4gIElmIGZh bHNlLCB0cmFuc2Zvcm0gYWxsCi0gICAgIGNhbmRpZGF0ZXMgYW5kIG5vIGxvbmdlciBkZWZlci4g ICovCi0gIGJvb2wgbV9kZWZlcnJpbmdfcDsKLX07Ci0KIC8qIFRyYW5zZm9ybSBhbGwgZGVmZXJy ZWQgRk1BIGNhbmRpZGF0ZXMgYW5kIG1hcmsgU1RBVEUgYXMgbm8gbG9uZ2VyCiAgICBkZWZlcnJp bmcuICAqLwogCkBAIC0zMzAzLDEyICszMjY1LDE4IEBAIGxhc3RfZm1hX2NhbmRpZGF0ZV9mZWVk c19pbml0aWFsX3BoaSAoZm1hX2RlZmVycmluZ19zdGF0ZSAqc3RhdGUsCiAgIG9yIGl0cyB1bnJv bGxlZCB2ZXJzaW9uLCBpLmUuIHdpdGggc2V2ZXJhbCBGTUEgY2FuZGlkYXRlcyB0aGF0IGZlZWQg cmVzdWx0CiAgIG9mIG9uZSBpbnRvIHRoZSBhZGRlbmQgb2YgYW5vdGhlci4gIEluc3RlYWQsIHdl IGFkZCB0aGVtIHRvIGEgbGlzdCBpbiBTVEFURQogICBhbmQgaWYgd2UgbGF0ZXIgZGlzY292ZXIg YW4gRk1BIGNhbmRpZGF0ZSB0aGF0IGlzIG5vdCBwYXJ0IG9mIHN1Y2ggYSBjaGFpbiwKLSAgd2Ug Z28gYmFjayBhbmQgcGVyZm9ybSBhbGwgZGVmZXJyZWQgcGFzdCBjYW5kaWRhdGVzLiAgKi8KKyAg d2UgZ28gYmFjayBhbmQgcGVyZm9ybSBhbGwgZGVmZXJyZWQgcGFzdCBjYW5kaWRhdGVzLgogCi1z dGF0aWMgYm9vbAorICBJZiBSRVRVUk5fTEhTIGlzIG5vdCBOVUxMLCBpbnN0ZWFkIG9mIHRoZSBh Y3R1YWwgY29udmVyc2lvbiwgc2V0IFJFVFVSTl9MSFMKKyAgYW5kIHJldHVybiB0cnVlLiAgKi8K KworYm9vbAogY29udmVydF9tdWx0X3RvX2ZtYSAoZ2ltcGxlICptdWxfc3RtdCwgdHJlZSBvcDEs IHRyZWUgb3AyLAotCQkgICAgIGZtYV9kZWZlcnJpbmdfc3RhdGUgKnN0YXRlLCB0cmVlIG11bF9j b25kID0gTlVMTF9UUkVFKQorCQkgICAgIGZtYV9kZWZlcnJpbmdfc3RhdGUgKnN0YXRlLCB0cmVl IG11bF9jb25kLAorCQkgICAgIHRyZWUgKnJldHVybl9saHMpCiB7CisgIGlmIChyZXR1cm5fbGhz KQorICAgICpyZXR1cm5fbGhzID0gTlVMTF9UUkVFOwogICB0cmVlIG11bF9yZXN1bHQgPSBnaW1w bGVfZ2V0X2xocyAobXVsX3N0bXQpOwogICAvKiBJZiB0aGVyZSBpc24ndCBhIExIUyB0aGVuIHRo aXMgY2FuJ3QgYmUgYW4gRk1BLiAgVGhlcmUgY2FuIGJlIG5vIExIUwogICAgICBpZiB0aGUgc3Rh dGVtZW50IHdhcyBsZWZ0IGp1c3QgZm9yIHRoZSBzaWRlLWVmZmVjdHMuICAqLwpAQCAtMzU1MCw3 ICszNTE4LDcgQEAgY29udmVydF9tdWx0X3RvX2ZtYSAoZ2ltcGxlICptdWxfc3RtdCwgdHJlZSBv cDEsIHRyZWUgb3AyLAogICAgIHsKICAgICAgIGlmIChzdGF0ZS0+bV9kZWZlcnJpbmdfcCkKIAlj YW5jZWxfZm1hX2RlZmVycmluZyAoc3RhdGUpOwotICAgICAgY29udmVydF9tdWx0X3RvX2ZtYV8x IChtdWxfcmVzdWx0LCBvcDEsIG9wMik7CisgICAgICBjb252ZXJ0X211bHRfdG9fZm1hXzEgKG11 bF9yZXN1bHQsIG9wMSwgb3AyLCByZXR1cm5fbGhzKTsKICAgICAgIHJldHVybiB0cnVlOwogICAg IH0KIH0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1tYXRoLW9wdHMuaCBiL2djYy90cmVlLXNz YS1tYXRoLW9wdHMuaAppbmRleCA1MmI3OTM4YjU5OS4uMjUyNTk3YmE0MjggMTAwNjQ0Ci0tLSBh L2djYy90cmVlLXNzYS1tYXRoLW9wdHMuaAorKysgYi9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmgK QEAgLTIzLDQgKzIzLDU3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMu ICBJZiBub3Qgc2VlCiBleHRlcm4gdHJlZSBwb3dpX2FzX211bHRzIChnaW1wbGVfc3RtdF9pdGVy YXRvciAqLCBsb2NhdGlvbl90LAogCQkJICAgdHJlZSwgSE9TVF9XSURFX0lOVCk7CiAKKy8qIERh dGEgbmVjZXNzYXJ5IHRvIHBlcmZvcm0gdGhlIGFjdHVhbCB0cmFuc2Zvcm1hdGlvbiBmcm9tIGEg bXVsdGlwbGljYXRpb24KKyAgIGFuZCBhbiBhZGRpdGlvbiB0byBhbiBGTUEgYWZ0ZXIgZGVjaXNp b24gaXMgdGFrZW4gaXQgc2hvdWxkIGJlIGRvbmUgYW5kIHRvCisgICB0aGVuIGRlbGV0ZSB0aGUg bXVsdGlwbGljYXRpb24gc3RhdGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIElMLiAgKi8KKworc3Ry dWN0IGZtYV90cmFuc2Zvcm1hdGlvbl9pbmZvCit7CisgIGdpbXBsZSAqbXVsX3N0bXQ7CisgIHRy ZWUgbXVsX3Jlc3VsdDsKKyAgdHJlZSBvcDE7CisgIHRyZWUgb3AyOworfTsKKworLyogU3RydWN0 dXJlIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgRk1BIGRlZmVycmluZywgaS5lLiB3 aGV0aGVyIHdlIGFyZQorICAgZGVmZXJyaW5nLCB3aGV0aGVyIHRvIGNvbnRpbnVlIGRlZmVycmlu ZywgYW5kIGFsbCBkYXRhIG5lY2Vzc2FyeSB0byBjb21lCisgICBiYWNrIGFuZCBwZXJmb3JtIGFs bCBkZWZlcnJlZCB0cmFuc2Zvcm1hdGlvbnMuICAqLworCitjbGFzcyBmbWFfZGVmZXJyaW5nX3N0 YXRlCit7CitwdWJsaWM6CisgIC8qIENsYXNzIGNvbnN0cnVjdG9yLiAgUGFzcyB0cnVlIGFzIFBF UkZPUk1fREVGRVJSSU5HIGluIG9yZGVyIHRvIGFjdHVhbGx5CisgICAgIGRvIGFueSBkZWZlcnJp bmcuICAqLworCisgIGZtYV9kZWZlcnJpbmdfc3RhdGUgKGJvb2wgcGVyZm9ybV9kZWZlcnJpbmcp CisgICAgOiBtX2NhbmRpZGF0ZXMgKCksIG1fbXVsX3Jlc3VsdF9zZXQgKCksIG1faW5pdGlhbF9w aGkgKE5VTEwpLAorICAgICAgbV9sYXN0X3Jlc3VsdCAoTlVMTF9UUkVFKSwgbV9kZWZlcnJpbmdf cCAocGVyZm9ybV9kZWZlcnJpbmcpIHt9CisKKyAgLyogTGlzdCBvZiBGTUEgY2FuZGlkYXRlcyBm b3Igd2hpY2ggd2UgdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBiZWVuIGRldGVybWluZWQKKyAgICAg cG9zc2libGUgYnV0IHdlIGF0IHRoaXMgcG9pbnQgaW4gQkIgYW5hbHlzaXMgd2UgZG8gbm90IGNv bnNpZGVyIHRoZW0KKyAgICAgYmVuZWZpY2lhbC4gICovCisgIGF1dG9fdmVjPGZtYV90cmFuc2Zv cm1hdGlvbl9pbmZvLCA4PiBtX2NhbmRpZGF0ZXM7CisKKyAgLyogU2V0IG9mIHJlc3VsdHMgb2Yg bXVsdGlwbGljYXRpb24gdGhhdCBhcmUgcGFydCBvZiBhbiBhbHJlYWR5IGRlZmVycmVkIEZNQQor ICAgICBjYW5kaWRhdGVzLiAgKi8KKyAgaGFzaF9zZXQ8dHJlZT4gbV9tdWxfcmVzdWx0X3NldDsK KworICAvKiBUaGUgUEhJIHRoYXQgc3VwcG9zZWRseSBmZWVkcyBiYWNrIHJlc3VsdCBvZiBhIEZN QSB0byBhbm90aGVyIG92ZXIgbG9vcAorICAgICBib3VuZGFyeS4gICovCisgIGdwaGkgKm1faW5p dGlhbF9waGk7CisKKyAgLyogUmVzdWx0IG9mIHRoZSBsYXN0IHByb2R1Y2VkIEZNQSBjYW5kaWRh dGUgb3IgTlVMTCBpZiB0aGVyZSBoYXMgbm90IGJlZW4KKyAgICAgb25lLiAgKi8KKyAgdHJlZSBt X2xhc3RfcmVzdWx0OworCisgIC8qIElmIHRydWUsIGRlZmVycmluZyBtaWdodCBzdGlsbCBiZSBw cm9maXRhYmxlLiAgSWYgZmFsc2UsIHRyYW5zZm9ybSBhbGwKKyAgICAgY2FuZGlkYXRlcyBhbmQg bm8gbG9uZ2VyIGRlZmVyLiAgKi8KKyAgYm9vbCBtX2RlZmVycmluZ19wOworfTsKKworYm9vbAor Y29udmVydF9tdWx0X3RvX2ZtYSAoZ2ltcGxlICptdWxfc3RtdCwgdHJlZSBvcDEsIHRyZWUgb3Ay LAorCQkgICAgIGZtYV9kZWZlcnJpbmdfc3RhdGUgKnN0YXRlLCB0cmVlIG11bF9jb25kID0gTlVM TF9UUkVFLAorCQkgICAgIHRyZWUgKnJldHVybl9saHMgPSBOVUxMKTsKKwogI2VuZGlmICAvKiBH Q0NfVFJFRV9TU0FfTUFUSF9PUFRTX0ggICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtcmVh c3NvYy5jYyBiL2djYy90cmVlLXNzYS1yZWFzc29jLmNjCmluZGV4IDk2Yzg4ZWMwMDNlLi5kZDc4 ZjQxYWU3YiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuY2MKKysrIGIvZ2NjL3Ry ZWUtc3NhLXJlYXNzb2MuY2MKQEAgLTU0ODgsNyArNTQ4OCw3IEBAIGdldF9yZWFzc29jaWF0aW9u X3dpZHRoIChpbnQgb3BzX251bSwgZW51bSB0cmVlX2NvZGUgb3BjLAogICAgYXMgcG9zc2libGUu ICAqLwogc3RhdGljIHZvaWQKIHJld3JpdGVfZXhwcl90cmVlX3BhcmFsbGVsIChnYXNzaWduICpz dG10LCBpbnQgd2lkdGgsIGJvb2wgaGFzX2ZtYSwKLQkJCQkJIGNvbnN0IHZlYzxvcGVyYW5kX2Vu dHJ5ICo+ICZvcHMpCisJCQkgICAgY29uc3QgdmVjPG9wZXJhbmRfZW50cnkgKj4gJm9wcykKIHsK ICAgZW51bSB0cmVlX2NvZGUgb3Bjb2RlID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3RtdCk7 CiAgIGludCBvcF9udW0gPSBvcHMubGVuZ3RoICgpOwpAQCAtNTUxNyw3ICs1NTE3LDcgQEAgcmV3 cml0ZV9leHByX3RyZWVfcGFyYWxsZWwgKGdhc3NpZ24gKnN0bXQsIGludCB3aWR0aCwgYm9vbCBo YXNfZm1hLAogICAvKiBCdWlsZCBwYXJhbGxlbCBkZXBlbmRlbmN5IGNoYWluIGFjY29yZGluZyB0 byB3aWR0aC4gICovCiAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQogICAgIHsKLSAgICAg IC8qIElmIHRoZSBjaGFpbiBoYXMgRkFNLCB3ZSBkbyBub3Qgc3dhcCB0d28gb3BlcmFuZHMuICAq LworICAgICAgLyogSWYgdGhlIGNoYWluIGhhcyBGTUEsIHdlIGRvIG5vdCBzd2FwIHR3byBvcGVy YW5kcy4gICovCiAgICAgICBpZiAob3BfaW5kZXggPiAxICYmICFoYXNfZm1hKQogCXN3YXBfb3Bz X2Zvcl9iaW5hcnlfc3RtdCAob3BzLCBvcF9pbmRleCAtIDIpOwogCkBAIC02Njc4LDggKzY2Nzgs OCBAQCB0cmFuc2Zvcm1fc3RtdF90b19tdWx0aXBseSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdz aSwgZ2ltcGxlICpzdG10LAogCiAgICBfNCAgPSAuRk1BIChjXzcoRCksIGRfOChEKSwgXzMpOwog ICAgXzExID0gLkZNQSAoYV81KEQpLCBiXzYoRCksIF80KTsgICovCi1zdGF0aWMgYm9vbAotcmFu a19vcHNfZm9yX2ZtYSAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcykKK3N0YXRpYyBpbnQKK3Jh bmtfb3BzX2Zvcl9mbWEgKHZlYzxvcGVyYW5kX2VudHJ5ICo+ICpvcHMsIHRyZWUgdHlwZSkKIHsK ICAgb3BlcmFuZF9lbnRyeSAqb2U7CiAgIHVuc2lnbmVkIGludCBpOwpAQCAtNjcwMSw2ICs2NzAx LDU5IEBAIHJhbmtfb3BzX2Zvcl9mbWEgKHZlYzxvcGVyYW5kX2VudHJ5ICo+ICpvcHMpCiAgICAg ICBlbHNlCiAJb3BzX290aGVycy5zYWZlX3B1c2ggKG9lKTsKICAgICB9CisKKyAgLyogQ2hlY2sg dGhlIGxocyBvZiBNVUxUX0VYUFJzLCBpZiB0aGVyZSdzIGEgRk1BIGNoYWluIHdpdGggcGF0dGVy bjoKKworCWQgPSAuRk1BIChhLCBiLCBjKTsKKwlnID0gLkZNQSAoZCwgZSwgZik7CisJLi4uCisK KyAgICAgdGhlbiByZXR1cm4gLTEsIHRvIGF2b2lkIHJld3JpdGVfZXhwcl90cmVlX3BhcmFsbGVs LiAgKi8KKyAgZm1hX2RlZmVycmluZ19zdGF0ZSBmbWFfc3RhdGUgKGZhbHNlKTsKKyAgRk9SX0VB Q0hfVkVDX0VMVCAob3BzX211bHQsIGksIG9lKQorICAgIHsKKyAgICAgIGdpbXBsZSAqbXVsX3N0 bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAob2UtPm9wKTsKKyAgICAgIHRyZWUgbGhzLCBsaHMyOwor ICAgICAgaWYgKGNvbnZlcnRfbXVsdF90b19mbWEgKG11bF9zdG10LCBnaW1wbGVfYXNzaWduX3Jo czEgKG11bF9zdG10KSwKKwkJCSAgICAgICBnaW1wbGVfYXNzaWduX3JoczIgKG11bF9zdG10KSwg JmZtYV9zdGF0ZSwgTlVMTCwKKwkJCSAgICAgICAmbGhzKSkKKwl7CisJICAvKiBDaGVjayBmb3Ig TVVMVF9FWFBSIHRoYXQgdXNlcyBMSFMuICAqLworCSAgaW1tX3VzZV9pdGVyYXRvciBpbW1faXRl cjsKKwkgIGdpbXBsZSAqdXNlX3N0bXQ7CisJICB1c2Vfb3BlcmFuZF9wIHVzZV9wOworCSAgRk9S X0VBQ0hfSU1NX1VTRV9GQVNUICh1c2VfcCwgaW1tX2l0ZXIsIGxocykKKwkgICAgeworCSAgICAg IHVzZV9zdG10ID0gVVNFX1NUTVQgKHVzZV9wKTsKKwkgICAgICBpZiAoaXNfZ2ltcGxlX2RlYnVn ICh1c2Vfc3RtdCkpCisJCWNvbnRpbnVlOworCSAgICAgIGlmIChnaW1wbGVfYmIgKHVzZV9zdG10 KSAhPSBnaW1wbGVfYmIgKG11bF9zdG10KSkKKwkJY29udGludWU7CisKKwkgICAgICBpZiAoaXNf Z2ltcGxlX2Fzc2lnbiAodXNlX3N0bXQpCisJCSAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAo dXNlX3N0bXQpID09IE1VTFRfRVhQUgorCQkgICYmIGNvbnZlcnRfbXVsdF90b19mbWEgKHVzZV9z dG10LAorCQkJCQkgIGdpbXBsZV9hc3NpZ25fcmhzMSAodXNlX3N0bXQpLAorCQkJCQkgIGdpbXBs ZV9hc3NpZ25fcmhzMiAodXNlX3N0bXQpLAorCQkJCQkgICZmbWFfc3RhdGUsIE5VTEwsICZsaHMy KQorCQkgICYmIGdpbXBsZV9iYiAoU1NBX05BTUVfREVGX1NUTVQgKGxoczIpKQorCQkgICAgICAg PT0gZ2ltcGxlX2JiIChtdWxfc3RtdCkpCisJCXsKKwkJICBpZiAoZHVtcF9maWxlICYmIChkdW1w X2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCQkgICAgeworCQkgICAgICBmcHJpbnRmIChkdW1wX2Zp bGUsCisJCQkgICAgICAgIkZvdW5kIHBvc3NpYmxlIG5vbi1mbGF0IEZNQSBjaGFpbi4gTEhTMTog Iik7CisJCSAgICAgIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBsaHMpOworCQkgICAg ICBmcHJpbnRmIChkdW1wX2ZpbGUsICIsIExIUzI6ICIpOworCQkgICAgICBwcmludF9nZW5lcmlj X2V4cHIgKGR1bXBfZmlsZSwgbGhzMik7CisJCSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxu Iik7CisJCSAgICB9CisJCSAgcmV0dXJuIC0xOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCiAg IC8qIDEuIFdoZW4gb3BzX211bHQubGVuZ3RoID09IDIsIGxpa2UgdGhlIGZvbGxvd2luZyBjYXNl LAogCiAgICAgIGEgKiBiICsgYyAqIGQgKyBlLgpAQCAtNjcxMiw2ICs2NzY1LDExIEBAIHJhbmtf b3BzX2Zvcl9mbWEgKHZlYzxvcGVyYW5kX2VudHJ5ICo+ICpvcHMpCiAgICAgIDIuIElmIGFsbCBv cHMgYXJlIGRlZmluZWQgd2l0aCBtdWx0LCB3ZSBkb24ndCBuZWVkIHRvIHJlYXJyYW5nZSB0aGVt LiAgKi8KICAgaWYgKG9wc19tdWx0Lmxlbmd0aCAoKSA+PSAyICYmIG9wc19tdWx0Lmxlbmd0aCAo KSAhPSBvcHNfbGVuZ3RoKQogICAgIHsKKyAgICAgIGlmIChtYXliZV9sZSAodHJlZV90b19wb2x5 X2ludDY0IChUWVBFX1NJWkUgKHR5cGUpKSwKKwkJICAgIHBhcmFtX2F2b2lkX2ZtYV9tYXhfYml0 cykpCisJLyogQXZvaWQgcmUtYXJyYW5nZSB0byBwcm9kdWNlIGxlc3MgRk1BIGNoYWlucyB0aGF0 IGNhbiBiZSBzbG93LiAgKi8KKwlyZXR1cm4gMTsKKwogICAgICAgLyogUHV0IG5vLW11bHQgb3Bz IGFuZCBtdWx0IG9wcyBhbHRlcm5hdGVseSBhdCB0aGUgZW5kIG9mIHRoZQogCSBxdWV1ZSwgd2hp Y2ggaXMgY29uZHVjaXZlIHRvIGdlbmVyYXRpbmcgbW9yZSBGTUEgYW5kIHJlZHVjaW5nIHRoZQog CSBsb3NzIG9mIEZNQSB3aGVuIGJyZWFraW5nIHRoZSBjaGFpbi4gICovCkBAIC02NzI2LDkgKzY3 ODQsOSBAQCByYW5rX29wc19mb3JfZm1hICh2ZWM8b3BlcmFuZF9lbnRyeSAqPiAqb3BzKQogCSAg aWYgKG9waW5kZXggPiAwKQogCSAgICBvcGluZGV4LS07CiAJfQotICAgICAgcmV0dXJuIHRydWU7 CisgICAgICByZXR1cm4gMTsKICAgICB9Ci0gIHJldHVybiBmYWxzZTsKKyAgcmV0dXJuIDA7CiB9 CiAvKiBSZWFzc29jaWF0ZSBleHByZXNzaW9ucyBpbiBiYXNpYyBibG9jayBCQiBhbmQgaXRzIHBv c3QtZG9taW5hdG9yIGFzCiAgICBjaGlsZHJlbi4KQEAgLTY4OTQsNyArNjk1Miw3IEBAIHJlYXNz b2NpYXRlX2JiIChiYXNpY19ibG9jayBiYikKIAkJICBtYWNoaW5lX21vZGUgbW9kZSA9IFRZUEVf TU9ERSAoVFJFRV9UWVBFIChsaHMpKTsKIAkJICBpbnQgb3BzX251bSA9IG9wcy5sZW5ndGggKCk7 CiAJCSAgaW50IHdpZHRoOwotCQkgIGJvb2wgaGFzX2ZtYSA9IGZhbHNlOworCQkgIGludCBoYXNf Zm1hID0gMDsKIAogCQkgIC8qIEZvciBiaW5hcnkgYml0IG9wZXJhdGlvbnMsIGlmIHRoZXJlIGFy ZSBhdCBsZWFzdCAzCiAJCSAgICAgb3BlcmFuZHMgYW5kIHRoZSBsYXN0IG9wZXJhbmQgaW4gT1BT IGlzIGEgY29uc3RhbnQsCkBAIC02OTE3LDcgKzY5NzUsNyBAQCByZWFzc29jaWF0ZV9iYiAoYmFz aWNfYmxvY2sgYmIpCiAJCQkJCQkgICAgICBvcHRfdHlwZSkKIAkJICAgICAgJiYgKHJoc19jb2Rl ID09IFBMVVNfRVhQUiB8fCByaHNfY29kZSA9PSBNSU5VU19FWFBSKSkKIAkJICAgIHsKLQkJICAg ICAgaGFzX2ZtYSA9IHJhbmtfb3BzX2Zvcl9mbWEgKCZvcHMpOworCQkgICAgICBoYXNfZm1hID0g cmFua19vcHNfZm9yX2ZtYSAoJm9wcywgVFJFRV9UWVBFIChsaHMpKTsKIAkJICAgIH0KIAogCQkg IC8qIE9ubHkgcmV3cml0ZSB0aGUgZXhwcmVzc2lvbiB0cmVlIHRvIHBhcmFsbGVsIGluIHRoZQpA QCAtNjkyNSw2ICs2OTgzLDcgQEAgcmVhc3NvY2lhdGVfYmIgKGJhc2ljX2Jsb2NrIGJiKQogCQkg ICAgIHdpdGggaW5pdGlhbCBsaW5lYXJpemF0aW9uLiAgKi8KIAkJICBpZiAoIXJlYXNzb2NfaW5z ZXJ0X3Bvd2lfcAogCQkgICAgICAmJiBvcHMubGVuZ3RoICgpID4gMworCQkgICAgICAmJiBoYXNf Zm1hID49IDAKIAkJICAgICAgJiYgKHdpZHRoID0gZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGggKG9w c19udW0sIHJoc19jb2RlLAogCQkJCQkJCSAgIG1vZGUpKSA+IDEpCiAJCSAgICB7CkBAIC02OTM0 LDcgKzY5OTMsNyBAQCByZWFzc29jaWF0ZV9iYiAoYmFzaWNfYmxvY2sgYmIpCiAJCQkJIHdpZHRo KTsKIAkJICAgICAgcmV3cml0ZV9leHByX3RyZWVfcGFyYWxsZWwgKGFzX2EgPGdhc3NpZ24gKj4g KHN0bXQpLAogCQkJCQkJICB3aWR0aCwKLQkJCQkJCSAgaGFzX2ZtYSwKKwkJCQkJCSAgaGFzX2Zt YSA+IDAsCiAJCQkJCQkgIG9wcyk7CiAJCSAgICB9CiAJCSAgZWxzZQpAQCAtNjk0Myw3ICs3MDAy LDcgQEAgcmVhc3NvY2lhdGVfYmIgKGJhc2ljX2Jsb2NrIGJiKQogCQkJIHRvIG1ha2Ugc3VyZSB0 aGUgb25lcyB0aGF0IGdldCB0aGUgZG91YmxlCiAJCQkgYmluYXJ5IG9wIGFyZSBjaG9zZW4gd2lz ZWx5LiAgKi8KIAkJICAgICAgaW50IGxlbiA9IG9wcy5sZW5ndGggKCk7Ci0JCSAgICAgIGlmIChs ZW4gPj0gMyAmJiAhaGFzX2ZtYSkKKwkJICAgICAgaWYgKGxlbiA+PSAzICYmIGhhc19mbWEgPT0g MCkKIAkJCXN3YXBfb3BzX2Zvcl9iaW5hcnlfc3RtdCAob3BzLCBsZW4gLSAzKTsKIAogCQkgICAg ICBuZXdfbGhzID0gcmV3cml0ZV9leHByX3RyZWUgKHN0bXQsIHJoc19jb2RlLCAwLCBvcHMsCi0t IAoyLjI1LjEKCg== --_002_SN6PR01MB4240ADAFCBC72E9B1F54E4EAE858ASN6PR01MB4240prod_--