From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2097.outbound.protection.outlook.com [40.107.92.97]) by sourceware.org (Postfix) with ESMTPS id 520AE3858C27 for ; Wed, 31 Mar 2021 23:02:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 520AE3858C27 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SCh1gC5cxSSNizh/udrtTLXo1LquPRXvNoTw+lSWf/Y9rPcQS0MXGqJRMpjVefeG6eiqAxzLMkjlVZWsRlOXWEX3L07sWvnPbD2WxRzN9X9A6IDF3grhcjI++T/HrDtsy/yMoDvjsfgmNT7QUZADGL/BEedCP6wF6Yyo7DCKrjaJAcJsjdnQC4ebIHcPJQAa7LtD03eLSRlub6rMAfXOPUN6M6Ov8nZ6YtGhtTG5eXk4brQ3yQ0hiDakUGW23qoPw71oWUrXnubpAZcneSOd5mre5K5aUhbLTOCp9pPr3IkC4psyBT5XufsfkFudkpCBTWDU2pS629lSyVZ9tDLjjA== 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-SenderADCheck; bh=YLLpDQJPSpGhgGUEzZlR5hcp1iiBkt8rCWaeMVp7YjI=; b=AyqJr2kyxe3pCGW25xFmuki2pHBLCkQb+NprDl238lzTqIXMvOke2WOG2YjebGCi9eQ7/ZogsRS8iXxmyLxma3w2N/Lhz2t2RjtGsYenZ+pxQo2rpuwToY0o3dfga01lNI4RJ6a4aj9yWkPs/DbxdeWsRBOEI7gxau4ipUujbiAlbHqzEFrtriNYXDEARoBKH8rBfraTi9riP0yjhZH4QDbPcO00qsWTI+SL4UxSWFAxCHP8G7aQOROd50U4tdTGxqrb1A/o/lQCbnPDReg87J8YghHQD2QbnRmeVqZdJ9R8V/8C1r3gpqszb8Gn6p/QQG+udNgImmooSVXSDPNrZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none Received: from CY4PR2101MB0801.namprd21.prod.outlook.com (2603:10b6:910:8d::25) by CY4PR21MB0632.namprd21.prod.outlook.com (2603:10b6:903:12e::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.6; Wed, 31 Mar 2021 23:02:14 +0000 Received: from CY4PR2101MB0801.namprd21.prod.outlook.com ([fe80::2958:5594:bbc4:2246]) by CY4PR2101MB0801.namprd21.prod.outlook.com ([fe80::2958:5594:bbc4:2246%5]) with mapi id 15.20.3999.028; Wed, 31 Mar 2021 23:02:14 +0000 From: Victor Tong To: "gcc-patches@gcc.gnu.org" Subject: [PATCH] tree-optimization: Optimize division followed by multiply [PR95176] Thread-Topic: [PATCH] tree-optimization: Optimize division followed by multiply [PR95176] Thread-Index: AQHXJoDrR4fklL4IYku64pH3Fv0p3g== Date: Wed, 31 Mar 2021 23:02:14 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2021-03-31T23:02:13.927Z; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; x-originating-ip: [216.19.187.149] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: b14bbb54-3df2-4c27-8db8-08d8f499060f x-ms-traffictypediagnostic: CY4PR21MB0632: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: b64qzKA9Dc+bLJBrhBs4S08/R0Yq75EVVKgAUJT0/06daeMFvFc7GHsOLnn27d6lBj1rPQtuDHeQIPDk8QcRpVoIuRV7WMt0nnSmJreB6HuIOeyC9NfdU/cfolUjljqhUSO0gL04fhb9qH4knKXvswxquYdV/A2Lixr8WwimNYA6dWmeiecE38W8fFCtYiiWNPXdbvfqzTENb9qiOsgPdDl5y9xtuimsziyxZCoCR0uehcMfPUftDys7m5LN2VAUw4SvrZKbNa0CebfkApAlrRthTHkjxd/pQ4yDPW24xTTNEFK9ZYXpJSHuJiXJOs6NdSG+/NPwOgPSaradVGJILb/WoFJzyeyLhgRCLXbEo3KWwOt4v1nz6ieZPx6/J0Ls10wUBPun6FJt5nGO2aL8uRQ/9G8u9VRa5hICejHSFpG5DhAg1xINyvdUsoP45mfQ9YHbK0yBdDu/M9kTEoc6EjTUX2eVOSlcak1kclfxS1UlnH5ref2+HyJn7sDJVrMMqmX5erheN6j/CyXJxX9aimhbGNQ8kmyhA+D6IRSoXCzQWKq0AELIw2NmmJnwoJfdh/AxZ1f23RihVh6ZQj6caaTl/wDOTNECqm0fo0H2ht+IBIbsyDAk2A5xbN2IrlV+A6JoQJ3Awhf55Ch1thkueZHFJxlyaaST8m9LnCO41Ww= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY4PR2101MB0801.namprd21.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39860400002)(136003)(376002)(396003)(346002)(76116006)(91956017)(52536014)(66446008)(66476007)(83380400001)(64756008)(86362001)(66616009)(66556008)(66946007)(10290500003)(6506007)(8936002)(71200400001)(186003)(478600001)(5660300002)(8990500004)(7696005)(316002)(26005)(2906002)(82950400001)(82960400001)(99936003)(9686003)(55016002)(8676002)(33656002)(6916009)(38100700001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?iso-8859-1?Q?z4ENnPR1qrmnzZB4SJtVDw5BASpS+JJsA3vqHpMOXZHXsNcyVvXxFzFTO6?= =?iso-8859-1?Q?SMxncYR5rGLEUNwRdNoAXerJ+GEWAQItoovkZyhQCsXrpSAxxlGl4KTfcl?= =?iso-8859-1?Q?o0l/eyIpHhp8fT/2J0IhMnkvfgKW1GVo3viTu8rIiZ9NFFPgZHxII3jrGZ?= =?iso-8859-1?Q?ZItAseuEGX7pnXwLjKZnZB8GLpHZ/epKfFraXCRRW5tHktYn3ZeGAbkupH?= =?iso-8859-1?Q?pogmqTEe0HBlxM1ZZ/l1OjfoHlpuB4qpate+YHufrWu5CMuCWOcP+ehu+0?= =?iso-8859-1?Q?LEVnoTJSEJ/c1qghw6GhlFVBq95wBhUZ/7HX9u3TV35w77zHmXPjUwiTAb?= =?iso-8859-1?Q?DK2P3sQ/YUdvnzak2LuHu7eRI5Rotvb/qQ08qY2fMKdxX998uFExjAHgoI?= =?iso-8859-1?Q?3GMUsnBbI9P1ChuAVO4BB4lqEnU4+kyL7T0D7xwa5hCV/UO2mkvmXbMTGa?= =?iso-8859-1?Q?47eB5morBFht1ZcbPv3uPR+ZphLx+0tJoYWBPtYm0iP02Jodg59OFOIyh8?= =?iso-8859-1?Q?Zu3Fl1VG50R6l4PwtxunTp4+nb8VE9NC1irdJi5Os1+NtTwFQXpVLEhrbK?= =?iso-8859-1?Q?r/TfubxVZxdS17UEnIwC64EbrHz6af15SvOzG0FJhoabRjTkoDIFij8jTQ?= =?iso-8859-1?Q?Wx3grezXrHMDcU2yP0FgW65Zps7RfcuCU93xSMGIyX/ZA6eEiFTE5AF2Z0?= =?iso-8859-1?Q?G+XW0T41mawDYjzzGsOAzZJ9+TRYF3p25GJu1a7PMNhF9hWw/xuQz9CdYR?= =?iso-8859-1?Q?/4WKQgXLqYqNJC0xmx2KyYnT0Hh/41s5A/q4c2g5Af1Tr/oNC2JrW72n6b?= =?iso-8859-1?Q?WyfVQXJSs8HKE8nv4a3CXRYIbDH0V3t11bo85+zrea3+X9eYICB5ce++Ak?= =?iso-8859-1?Q?nx42D++/9N6GxckaR3FmGvN7EffQjZbLJjpINmYpG/JHhk2RUatvby8U71?= =?iso-8859-1?Q?94qIsDKnWmxPh2et9ayq7NMXyxsotzuEcoRWzmN4kojxu+W1NDrP1SFO1S?= =?iso-8859-1?Q?Di6Ub+6pMqQtjeaZC69/17NvBJ2+bJt/w4B4uTG24UlumaIr3o/RQF/N/A?= =?iso-8859-1?Q?BEk0je3RYddbSH/pHE+7kYf/PRo6wQrkVcWhW29fSlvSVFqfZxDZCgKUV+?= =?iso-8859-1?Q?9V5v6PV7mSoW85OFnWBX1P+o+6+HNDL/SN+d21vjawEpyyfLTMYj2Ou4Hg?= =?iso-8859-1?Q?WQG4gcHp0UvkDakRUCdmRD1dOqvqNET7u24OlSjHIlUf7Mu8/jskcvIWdk?= =?iso-8859-1?Q?onTr5Hmo40GyNgGBa/Uv5OzFzL4faN8kCzxzBKNrqBCIXcJ61ufD3NllVv?= =?iso-8859-1?Q?EKunjI8YknwO6ldzqkV43NFKGpatKS4Lul8QcXWWvenvhD81+q439UH/tZ?= =?iso-8859-1?Q?Mdi1JR1Xt+?= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_CY4PR2101MB0801A8FFC0954BA013219E76CC7C9CY4PR2101MB0801_" MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR2101MB0801.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b14bbb54-3df2-4c27-8db8-08d8f499060f X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Mar 2021 23:02:14.0821 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: s90PdF4Dym0aZZf1k06Gi7LITb+ZVeOW6ykZAtXVclM3sxhFDV+srWh9aKDaT8cZ759Pn0aVTLfnNHhwpTFRgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR21MB0632 X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Mar 2021 23:02:16 -0000 --_002_CY4PR2101MB0801A8FFC0954BA013219E76CC7C9CY4PR2101MB0801_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello,=0A= =0A= This patch fixes PR tree-optimization/95176. A new pattern in match.pd was = added to transform "a * (b / a)" --> "b - (b % a)". A new test case was als= o added to cover this scenario.=0A= =0A= The new pattern interfered with the existing pattern of "X - (X / Y) * Y". = In some cases (such as in fn4() in gcc/testsuite/gcc.dg/fold-minus-6.c), th= e new pattern is applied causing the existing pattern to no longer apply. T= his results in worse code generation because the expression is left as "X -= (X - Y)". An additional subtraction pattern of "X - (X - Y) --> Y" was add= ed to this patch to avoid this regression.=0A= =0A= I also didn't remove the existing pattern because it triggered in more case= s than the new pattern because of a tree_invariant_p check that's inserted = by genmatch for the new pattern.=0A= =0A= I verified that all "make -k check" tests pass when targeting x86_64-pc-lin= ux-gnu.=0A= =0A= 2021-03-31 Victor Tong =0A= =0A= gcc/ChangeLog:=0A= =0A= * match.pd: Two new patterns: One to optimize division followed by multipl= y and the other to avoid a regression as explained above=0A= =0A= gcc/testsuite/ChangeLog:=0A= =0A= * gcc.dg/tree-ssa/20030807-10.c: Update existing test to look for a subtra= ction because a shift is no longer emitted=0A= * gcc.dg/pr95176.c: New test to cover optimizing division followed by mult= iply=0A= =0A= I don't have write access to the GCC repo but I've completed the FSF paperw= ork as I plan to make more contributions in the future. I'm looking for a s= ponsorship from an existing GCC maintainer before applying for write access= .=0A= =0A= Thanks,=0A= Victor= --_002_CY4PR2101MB0801A8FFC0954BA013219E76CC7C9CY4PR2101MB0801_ Content-Type: application/octet-stream; name="pr95176.patch" Content-Description: pr95176.patch Content-Disposition: attachment; filename="pr95176.patch"; size=3025; creation-date="Wed, 31 Mar 2021 22:57:25 GMT"; modification-date="Wed, 31 Mar 2021 22:57:25 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9tYXRjaC5wZCBiL2djYy9tYXRjaC5wZAppbmRleCAwMzZmOTJmYTk1 OS4uZWY5YzY3MTlhMGEgMTAwNjQ0Ci0tLSBhL2djYy9tYXRjaC5wZAorKysgYi9nY2MvbWF0Y2gu cGQKQEAgLTU5OSw2ICs1OTksMTggQEAgREVGSU5FX0lOVF9BTkRfRkxPQVRfUk9VTkRfRk4gKFJJ TlQpCiAgKGlmIChJTlRFR1JBTF9UWVBFX1AgKHR5cGUpIHx8IFZFQ1RPUl9JTlRFR0VSX1RZUEVf UCAodHlwZSkpCiAgIChjb252ZXJ0ICh0cnVuY19tb2QgQDAgQDEpKSkpCiAKKy8qIFggKiAoWSAv IFgpIGlzIHRoZSBzYW1lIGFzIFkgLSAoWSAlIFgpLiAgKi8KKyhzaW1wbGlmeQorIChtdWx0OmMg KGNvbnZlcnQxPyBAMCkgKGNvbnZlcnQyPyAodHJ1bmNfZGl2IEAxIEBAMCkpKQorIChpZiAoSU5U RUdSQUxfVFlQRV9QICh0eXBlKSB8fCBWRUNUT1JfSU5URUdFUl9UWVBFX1AgKHR5cGUpKQorICAo bWludXMgKGNvbnZlcnQgQDEpIChjb252ZXJ0ICh0cnVuY19tb2QgQDEgQDApKSkpKQorCisvKiBY IC0gKFggLSBZKSAtLT4gWSAqLworKHNpbXBsaWZ5CisgKG1pbnVzIChjb252ZXJ0MT8gQDApIChj b252ZXJ0Mj8gKG1pbnVzIEBAMCBAMSkpKQorIChpZiAoKElOVEVHUkFMX1RZUEVfUCAodHlwZSkg fHwgVkVDVE9SX0lOVEVHRVJfVFlQRV9QICh0eXBlKSkgJiYgVFlQRV9PVkVSRkxPV19VTkRFRklO RUQodHlwZSkpCisgIChjb252ZXJ0IEAxKSkpCisKIC8qIE9wdGltaXplIFRSVU5DX01PRF9FWFBS IGJ5IGEgcG93ZXIgb2YgdHdvIGludG8gYSBCSVRfQU5EX0VYUFIsCiAgICBpLmUuICJYICUgQyIg aW50byAiWCAmIChDIC0gMSkiLCBpZiBYIGFuZCBDIGFyZSBwb3NpdGl2ZS4KICAgIEFsc28gb3B0 aW1pemUgQSAlIChDIDw8IE4pICB3aGVyZSBDIGlzIGEgcG93ZXIgb2YgMiwKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByOTUxNzYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3By OTUxNzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWYwODczMTcx ODcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjk1MTc2LmMKQEAg LTAsMCArMSw0NSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICItTyAt ZmR1bXAtdHJlZS1vcHRpbWl6ZWQtcmF3IiB9ICovCisKK2V4dGVybiBpbnQgcHJpbnRmIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLik7CisKK2ludCBfX2F0dHJpYnV0ZV9f ICgobm9pbmxpbmUpKQorZihpbnQgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgKiAoYiAvIGEp OworfQorCitpbnQgX19hdHRyaWJ1dGVfXygob3B0aW1pemUoIk8wIikpKSBfX2F0dHJpYnV0ZV9f ICgobm9pbmxpbmUpKQorZk5vT3B0KGludCBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAqIChi IC8gYSk7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorZjIoaW50IGEsIGlu dCBiKQoreworICAgIHJldHVybiAoYiAvIGEpICogYTsKK30KKworaW50IF9fYXR0cmlidXRlX18o KG9wdGltaXplKCJPMCIpKSkgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKK2YyTm9PcHQoaW50 IGEsIGludCBiKQoreworICAgIHJldHVybiAoYiAvIGEpICogYTsKK30KKworaW50IG1haW4oKQor eworICAgIGlmIChmKDIsIDE1KSAhPSBmTm9PcHQoMiwgMTUpKQorICAgICAgICBfX2J1aWx0aW5f YWJvcnQoKTsKKyAgICBpZiAoZjIoMiwgMTUpICE9IGYyTm9PcHQoMiwgMTUpKQorICAgICAgICBf X2J1aWx0aW5fYWJvcnQoKTsKKyAgICBwcmludGYoInBhc3MiKTsKK30KKworLy8gVGhlcmUgc2hv dWxkIGJlIHR3byBpbnN0YW5jZXMgb2YgdHJ1bmNfZGl2X2V4cHIgYW5kIAorLy8gbXVsdF9leHBy IGluIHRoZSBvdXRwdXQuIE9uZSBpbiBmTm9PcHQgYW5kIG9uZSBpbiBmMk5vT3B0LgorLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ0cnVuY19kaXZfZXhwciIgMiAib3B0aW1p emVkIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAibXVsdF9l eHByIiAyICJvcHRpbWl6ZWQiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJ0cnVuY19tb2RfZXhwciIgMiAib3B0aW1pemVkIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAibWludXNfZXhwciIgMiAib3B0aW1pemVkIiB9IH0g Ki8KKy8qIHsgZGctb3V0cHV0ICJwYXNzIiB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS8yMDAzMDgwNy0xMC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJl ZS1zc2EvMjAwMzA4MDctMTAuYwppbmRleCAwZTAxZTUxMWI3OC4uNGNkMzU3MzgwNTcgMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhLzIwMDMwODA3LTEwLmMKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvMjAwMzA4MDctMTAuYwpAQCAtMjAsNiArMjAs OSBAQCBzdWJyZWdfaGlnaHBhcnRfb2Zmc2V0IChvdXRlcm1vZGUsIGlubmVybW9kZSkKIC8qIFRo ZXJlIHNob3VsZCBiZSBvbmUgbWFzayB3aXRoIHRoZSB2YWx1ZSAzLiAgKi8KIC8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiIFwmIDMiIDEgInZycDEifSB9ICovCiAgIAotLyog VGhlcmUgc2hvdWxkIGJlIG9uZSByaWdodCBzaGlmdCBieSAyIHBsYWNlcy4gICovCi0vKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIiA+PiAyIiAxICJ2cnAxIn0gfSAqLworLyog VGhlcmUgc2hvdWxkIGJlIG5vIHJpZ2h0IHNoaWZ0IGJ5IDIgcGxhY2VzLiAgKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiID4+IDIiIDAgInZycDEifSB9ICovCisKKy8q IFRoZSAiZGlmZmVyZW5jZSAvIDQgKiA0IiBzaG91bGQgYmVjb21lIGEgc3VidHJhY3Rpb24gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiIC0gIiAyICJ2cnAxIn0gfSAq LwogCg== --_002_CY4PR2101MB0801A8FFC0954BA013219E76CC7C9CY4PR2101MB0801_--