From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id yNz5Mz9X22N30ycAWB0awg (envelope-from ) for ; Thu, 02 Feb 2023 01:25:03 -0500 Received: by simark.ca (Postfix, from userid 112) id D050A1E128; Thu, 2 Feb 2023 01:25:03 -0500 (EST) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=WNU4wKwR; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 63F311E0D3 for ; Thu, 2 Feb 2023 01:25:02 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CC7E438582AC for ; Thu, 2 Feb 2023 06:25:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CC7E438582AC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1675319101; bh=5CX/pF3gkMpef/qK2vJt37e6KGeFCRMq8RLkJRtU7a8=; h=To:CC:Subject:Date:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=WNU4wKwRmSZOqZN6eUjHbzHOi7qmRZmXDGrttWGqjKG7lsKJDuWAnmZH+yguVNIvC blRtouAz/SoxFPfUJEDtfb9H5zcps07Q0MWTETj090rwc+sXkiK2gaBCcRZDJbjyJQ duXcBlnlU2dXJ2VoHHsfFOPbaMPbgUbko7UcwhzU= Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 458243858401 for ; Thu, 2 Feb 2023 06:24:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 458243858401 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3125jlgZ001648; Thu, 2 Feb 2023 06:24:33 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2168.outbound.protection.outlook.com [104.47.56.168]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3ng7ad0txm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 02 Feb 2023 06:24:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T1c7YDhhr2NleaShquwwHzGb42iSnAdPOzoq+wskcoLCAEZdOqxqm7hSduq81lan3SkfRYl1cKguoVA0G5XI2yiTb8xlbzg63VcXrddwvYSyiSyOU8Ckx9aFT6dQcliJZqPIsdrfTVf1wx2q5zXDQ0e5xpogVQTciYUwNiLuipMEwpWO0fUn8a4ANWGFr8CnNXFis2Y/dE+pCOzcINSyNSTU/ZSv9zeVzT2QnW3EQratKxl/hjip3tgMrnstOYOfsLybC4YuFh+RfznYsJIk/qcFRfPslTaWl8DaE4We4kxSwpiJGskbD7bds3mdGxAOv5hIPfhyzS4SEMrwafbDEg== 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=gR/T46zGgjIb1CPdLlNJEvJ9yh2HxXaeu0ghVCNRdh4=; b=VsBUzfodskGVEv+lz2aCHG//oe84EH6MbB1w33BcP2wJ2wcIVSf0mz1UqSt8XVrrndJiTWZeFejdsGtpESpcheOa/zq7xuwb+qB06vV4sTfV+o2uvedJTS4TtUJs782v3gsEV/5o0jY43YkTjLGrbx4rFPMe5YvTYx5bjkn4etFFHHP3bVzrp1j9IwePrAvfs28qpjk6cwIUt7IwsC+n1dcqoBaddxLOqV2UcbV6r5jO64cWg/PjSXp6qTztnzD+g+noGvPfwpjb8tOpsle5jdzbpFgZ0pxxcKa8XO8s0BxDyfffVKafKt5i2FhYWJC6GrEBluVflOb9TLQtP1zuMw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ibm.com; dmarc=pass action=none header.from=ibm.com; dkim=pass header.d=ibm.com; arc=none Received: from CH2PR15MB3544.namprd15.prod.outlook.com (2603:10b6:610:5::26) by MW4PR15MB5134.namprd15.prod.outlook.com (2603:10b6:303:182::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.36; Thu, 2 Feb 2023 06:24:30 +0000 Received: from CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::1e54:c91e:9426:8880]) by CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::1e54:c91e:9426:8880%5]) with mapi id 15.20.6043.038; Thu, 2 Feb 2023 06:24:29 +0000 To: Ulrich Weigand , "simark@simark.ca" , "gdb-patches@sourceware.org" CC: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Topic: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Index: AQHY6DximDPpCqTL9kGyFvcEZokFBq4jlIiAgBFljYeAAA2HgIAIORaygAMrdQCACMPAdYADi8KAgAAbf+aAABUYgIAADhDtgAjHItiAAgYnAIACq/WKgAVsGwCABC6K8oAAZcYAgAq8WQ+AADoMgIAFnB/fgAUxEICABkBkK4AWHiQAgAFvY+iAAawUgIADF3ySgAshzACACvn7HoAI6B4p Date: Thu, 2 Feb 2023 06:24:29 +0000 Message-ID: References: <0866c91331b08f2870fad6e6a13fbcd1a9823b48.camel@de.ibm.com> <5df6ab523034d1997ffda5bb06c3bd87777dcccb.camel@de.ibm.com> <0dba07cfad3da44c0281c53702d73f807bca7d06.camel@de.ibm.com> <5956432ab1e0eedc8f65e01d3793a80ccf3a3a1f.camel@de.ibm.com> <139ff3da5e35905c963869569bebf280733740c2.camel@de.ibm.com> <8302c3570292b864ab21176e58bdee546f6e4544.camel@de.ibm.com> <5324a4027099ed44a32b3de8db71df875e034deb.camel@de.ibm.com> <37f1252e8d8bc1bad3f7a4ac9b38749ee6791e17.camel@de.ibm.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR15MB3544:EE_|MW4PR15MB5134:EE_ x-ms-office365-filtering-correlation-id: 6548d11b-767f-4846-ebfb-08db04e6240f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Uz4u9xY6XaqzxSrdxcGoYlG24t60F4kq4DFIzyg3RTZqxZT9/ZC2yIDIkiJNJDR70d2uetI0llK2DprIKGi1z02/WVGNFxIpbrIpkGVq6x25nwxl+/l0kE7Nxry0wGh5BHe3Wok4JVPKdRX1rJUGe95+OT5H40ObnV9VyOUsccoYcOjT6uC0XIJPilLkb970btme9V8uvIr8CemYDbbE1QlAO/DgRnoMT3a7TaSLlArOnhPW+9pR5GJLrOoVv8UyC/8kPv7IvIETCdtxEf/Dgys+1Fzsb8le3K4nZf6DSRpvG004Y0PaDkRABjcu2bO60ZKL5v7CZY0wBUiqiSkOHTYlX3qBYdzZhrVlgtp222cGtZvU9KZXK2AYraVIvQTIzD73n847WBqE1AzT/1kT2qEwGPau7ZknK9W1S4xUML23oRl0fB0xiBwA5caqruXUft2SLQ4Ev8H4soxfgYLlyVTeqMNn/F/uuT6bn9gYkMSuRv0zWpTFqnZIxn8+yApEiyYxVmTmKjyDWewu/HD0ZBEvzbPqRzFdtVoL2hFnHdFpZDmuwGh5qDRpWZLB+T4ZD57k/kGnDP4v7IUsRr4JspJoWV54sje2HHUHnUHP+TwyI8k4WAjol2w4atMuqFveCZfmUmThmKKcravcD6oLfWSL185ryFQth0DkhcoE7t2U1hnKxOeNPycRkmuC2o43DYZ8+oRrz/QqHxg6rOrSYg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR15MB3544.namprd15.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(136003)(346002)(376002)(396003)(39860400002)(366004)(451199018)(19627405001)(110136005)(91956017)(66476007)(4326008)(76116006)(64756008)(66446008)(8676002)(66946007)(122000001)(8936002)(52536014)(5660300002)(316002)(38100700002)(86362001)(66556008)(38070700005)(33656002)(99936003)(71200400001)(53546011)(186003)(9686003)(6506007)(55016003)(30864003)(478600001)(2906002)(83380400001)(7696005)(41300700001)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?a9rODk/EtYb1RrTmc8ShRkB0UUj6fz3pa9cjHEOPN9VydOicZyTJXQblOM?= =?iso-8859-1?Q?YcnAQ1Y4obfERv4Xmnjb2uboelE9//RJ/iqAVglbuOy2WR9NCaO2paxEZJ?= =?iso-8859-1?Q?Qy+d0bLQFZOWSaB9lMG4WeA8EkqeKaCiN+Vl1oor1dGmTJpfbDOCqIcKQ2?= =?iso-8859-1?Q?/HZBaAv1LOLELYS8ECDFoqJAJBFZtGd9FBOGEjxJ8Oxi7jfCur+WoD0js1?= =?iso-8859-1?Q?J27Q1bSckjIB+/4pPpfgrl16QOzF9IrDVAZtyBwpG5CLkdabbbyhCNOQTR?= =?iso-8859-1?Q?brojFTJOMCgLEmJZ9dxIy1a9hpAOx1yThmv8JxR71QouSK4BsZq02h/GzG?= =?iso-8859-1?Q?X30e0Uc7sr+x8eLiPrZ8YgBOm2bqUFEdsPud/VkEZYYwzWg8MURt37dzeS?= =?iso-8859-1?Q?UejBnY4ENtBVtYHQl1mKxhMh//QR4LKaDJLNekyF1A9lukC9LB5VG6s9j9?= =?iso-8859-1?Q?5WIoUBdZBbP7wT3V3hTf9a9EMcKlcSJ4uskEKLaWBd3bpm/t08qt3iCssG?= =?iso-8859-1?Q?GSftPG/59Al9KuNNmJKmjFGfoauHmXlR6MTrOkKEl2YL2cERyxMS2gb6gk?= =?iso-8859-1?Q?65NQUwv4jdV3eT2P6VRldoWTxY1D1PYKAf7WvOfLo993zrV08Byy7GFN/C?= =?iso-8859-1?Q?nWEtRLHRprvYXXCyZdESkwqpW974itzq8i9SHmj8iIRWG3sJ4mHq9qbKPo?= =?iso-8859-1?Q?ZfdknOl3NZqVrx+zZCUnmdGM8of5v+7+kJd7Z2HS5DyqDTtv46iig4w1Gw?= =?iso-8859-1?Q?UjeBbJCBplR2lfuZ+7TsGwZ3xNJ4wqi/Q7iBQIrEbXG1CuGy7VWg4OWMqN?= =?iso-8859-1?Q?Wl6sAxQUR4qz78E4lhS1ScdOOB/RVlONq3K/rF7A1TSPpRns9JktdnvFi6?= =?iso-8859-1?Q?wYUfNiIkfxFM7c6wI8mLPbWfC3AojuNqUfrYFikjmPrpv5KHDZDi8kBFlw?= =?iso-8859-1?Q?UiYCMeKg6GEE0G5ucPCLJWNJbGQvkmi4xeBB9Cbtjzu/Vj1Ec0To9Ym6kU?= =?iso-8859-1?Q?MqmN+DqqEgbExegrzdEPllqTOO0vSvkR0wD2p4XoSmXD9eTg1IyhxrVQcQ?= =?iso-8859-1?Q?uNmOIQbPSQvLbv//VrvqUjh0aHt297oHcH4KdQ8hvXWqUnIcXnvzvuVhn3?= =?iso-8859-1?Q?yJSxRxL2TTf3aDOPmLwYa11sCsJPZZxzqBFStQnJ3dIuwAEGnNkTtExS95?= =?iso-8859-1?Q?OlDvYLsmg2cdijrfyOI46uAJEXUmyfrBTvpvl3O/0fjXwcB+veDG76Wadn?= =?iso-8859-1?Q?pWc2ZltKWQrIIzevSD3P8GoyYzjr418MJCx39m+X3SsWYEE1EotLY8nVAw?= =?iso-8859-1?Q?fMZtJRuzDiE/+Gm7nbxRQj78jhZd2Tj7R9lIHOrdTM1b/ulqpmRqkgKVrs?= =?iso-8859-1?Q?Z68nsljE5LIRV8ZpkQWa+/z4pBZfpHEvWnCSy4FozE5K0WNL3zjqyTG1y6?= =?iso-8859-1?Q?0irRDh0eiNIEriSaeQP9agAACv3HwQ8Zv2MVG7apI95CZ0pX/+GUkdldoM?= =?iso-8859-1?Q?iC+jdsOWH6VbnTXHBpA3O9mxt5r2K/5HXL0DogTlqsTkfPfYEWvF0/FOM2?= =?iso-8859-1?Q?AJS9TkHwy8+3brQAt/g6KXtFuyzWWiU2Q8fCweRpYSvgw4kHqZ1iK3U3YD?= =?iso-8859-1?Q?N746UVisuLdcdSPuRBQXrMCo/A66EelJhJE24KPYh22tQ3hyLq/UlMc8V0?= =?iso-8859-1?Q?S32iXVcDrjpRRBCtBaKye83ydf5fAVAfd3sfRb7u?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB35441F7D3B1CDE3E82AFC505D6D69CH2PR15MB3544namp_" MIME-Version: 1.0 X-OriginatorOrg: ibm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR15MB3544.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6548d11b-767f-4846-ebfb-08db04e6240f X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2023 06:24:29.6600 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fcf67057-50c9-4ad4-98f3-ffca64add9e9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: bcilUWCdquma/6JXDOmeQsORfn7NpiAfFMDecZIwuTlRZHOW7Y/mGQPVdQl/ikNhlnHtfCk0+JOUwpO4HZxd/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR15MB5134 X-Proofpoint-ORIG-GUID: OiYVy-jO1vqOb3qBqCAu3BQkHLh659IE X-Proofpoint-GUID: OiYVy-jO1vqOb3qBqCAu3BQkHLh659IE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.122.1 definitions=2023-02-01_15,2023-01-31_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 priorityscore=1501 malwarescore=0 suspectscore=0 mlxscore=0 clxscore=1015 adultscore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302020056 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Aditya Kamath1 via Gdb-patches Reply-To: Aditya Kamath1 Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" --_004_CH2PR15MB35441F7D3B1CDE3E82AFC505D6D69CH2PR15MB3544namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Tom, Ulrich and community, Thank you for the feedback for the fix of this bug. Please find attached th= e patch. {See: 0001-Fix-multi-thread-debug-bug-in-AIX.patch}. So, I have fixed the bug and it works alright. Please find the test program= , output with patch and without patch pasted below this email. >> We now have all variables {pd_able, pd_active and pd_session} now in a >> map of process ID and structure. This will help us make AIX GDB code >> easy to manage them per process in the aix-thread.c file. >I don't really know what this is about, but it's probably better to >attach the data directly to the inferior using the registry system. >(You can't use private_inferior as apparently that's reserved for the >process stratum.) >Search for registry for some examples. >It's better to pass in a ptid or even the aix_thread_variables object >itself than to rely on globals in low-level functions like this. So, I have taken care of this. Now we use the registry. Thank you for this = suggestion. I was not knowing this. This is a very nice feature. >> Secondly, in the function pid_to_str () there is a beneath () call, >> which is why I had to put this function in rs6000-aix-nat.c file. >I wonder why it's necessary, as it seems to me that >aix_thread_target::pid_to_str should have already handled the 'thread' >case, so the inherited method ought to be good enough. This I have removed. I made a mistake while analysing this solution. Thank = you for pointing it out. It works without it. Kindly check the output below= . >Is there an existing gdb test case that exercises this code? >If not then it seems like a new test is warranted. This I am not aware of at least when I tried finding. What we need is a tes= t case to check if the shared library is loaded for every new inferior born= and the top target is set correctly in case of thread debugging. If something exists, I would like to know. >> + return object_bfd; >> + it++; >This doesn't look right to me at all. Using a global means that BFDs >from one inferior might "leak" to another, based solely on whether a >certain name was ever seen. Also nothing ever cleans out the global >vector. >It's better to attach this data to the relevant BFD using the registry >system, and not use a global at all. So we already attach this data using the lines here in the same function. std::string fname =3D string_printf ("%s%s", bfd_get_filename (archive_bfd.get ()), sep); bfd_set_filename (object_bfd.get (), fname.c_str ()); All we need to the right match for the name of the shared library. So, we a= lready have a pathname variable. I used it and removed the vector. Kindly s= ee it in the patch. You were right. There is nothing that could have clean = that vector. Kindly give me feedback if we can do anything better or is incorrect. If no= t, kindly push this patch so that AIX folks can have a better debugging exp= erience. Have a nice day ahead. Thanks and regards, Aditya. ------------------------------------------- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } ------------------------ Output with patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (process 15728962)] I am parent [New inferior 3 (process 20382144)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info threads Id Target Id Frame * 1.1 Thread 1 (tid 34144675, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 30146951, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 37159321, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 process 15728962 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 process 20382144 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary >From To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. (gdb) inferior 2 [Switching to inferior 2 [process 15728962] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 15728962)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) ---------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? >From To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Gdb-patches on behalf of Aditya Kamath1 via Gdb-patches Sent: 27 January 2023 20:10 To: Ulrich Weigand ; simark@simark.ca ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: [EXTERNAL] Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patc= h Hi Ulrich and community, Thank you for the feedback for the fix of this bug. Please find attached th= e patch. {See: 0001-Fix-multi-thread-debug-bug-in-AIX.patch} So, I have fixed the bug and it works alright. Please find the test program= , output with patch and without patch pasted below this email. >+ if (s.find (member_name) !=3D std::string::npos) >+ { >+ return object_bfd; >+ } >This matches the member name *anywhere* in the full >filename, >which could lead to spurious matches, I think. The test >should be more specific. This I have taken care in the patch. There are a few changes for which I want to explain below. We now have all variables {pd_able, pd_active and pd_session} now in a map = of process ID and structure. This will help us make AIX GDB code easy to ma= nage them per process in the aix-thread.c file. Secondly, in the function pid_to_str () there is a beneath () call, which i= s why I had to put this function in rs6000-aix-nat.c file. Third thing is previously if there was no object file, we would use pd_disa= ble () to disable thread debugging. This is incorrect now that we support m= ultiple inferiors. Since we rely on inferior_ptid with new object file func= tion till a point, we must disable only when we mourn the inferior or a pro= cess dies. Otherwise, there is every chance we will disable thread debuggin= g for a wrong inferior that can be currently inferior_ptid. It also creates= a mess disabling the pd_active for the wrong inferior in cases where a new= inferior is born who object file is being loaded. This change can be seen = in the patch. I have written comments for the remaining changes in the patch. Kindly give me feedback if we can do anything better or is incorrect. If no= t, kindly push this patch so that AIX folks can have a better debugging exp= erience. Have a nice day ahead. Thanks and regards, Aditya. ------------------------------------------- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } --------------------------------------------------- Output with patch applied:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (Process 17498448)] I am parent [New inferior 3 (Process 11731454)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [Process 17498448] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (Process 17498448)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info threads Id Target Id Frame 1.1 Thread 1 (tid 25231849, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 33227061, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 23069149, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 * 2.1 Process 17498448 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 Process 11731454 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary >From To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. -------------------------------------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? >From To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Ulrich Weigand Sent: 20 January 2023 20:14 To: simark@simark.ca ; Aditya Kamath1 ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Aditya Kamath1 wrote: >Inorder to resolve the same I request for one information. How can we iter= ate_over_threads >of a particular process. What is that function. Is there any built-in avai= lable?? >Kindly let me know and that should solve this issue. Instead of iterate_over_threads you could use the all_threads() iterator di= rectly; this can be specialized to only return threads of one inferior like this: for (thread_info *tp : all_threads (proc_target, ptid_t (pid))) { ... } >Also kindly give me feedback on this patch if I need to change anything. I think this change in solib-aix.c is not quite correct: + std::string s =3D bfd_get_filename (object_bfd.get ()); + if (s.find (member_name) !=3D std::string::npos) + { + return object_bfd; + } This matches the member name *anywhere* in the full filename, which could lead to spurious matches, I think. The test should be more specific. Bye, Ulrich --_004_CH2PR15MB35441F7D3B1CDE3E82AFC505D6D69CH2PR15MB3544namp_ Content-Type: application/octet-stream; name="0001-Fix-multi-thread-debug-bug-in-AIX.patch" Content-Description: 0001-Fix-multi-thread-debug-bug-in-AIX.patch Content-Disposition: attachment; filename="0001-Fix-multi-thread-debug-bug-in-AIX.patch"; size=20504; creation-date="Thu, 02 Feb 2023 06:22:46 GMT"; modification-date="Thu, 02 Feb 2023 06:22:47 GMT" Content-Transfer-Encoding: base64 RnJvbSA0MTRlZWY4YTk1ZTYwMDJmN2M5NmE0M2Y5Yjg0YWFhNWJkZTg1NzBjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFkaGFyIEthbWF0aCA8QWRpdHlhLkthbWF0 aDFAaWJtLmNvbT4KRGF0ZTogV2VkLCAxIEZlYiAyMDIzIDIzOjU0OjExIC0wNjAwClN1YmplY3Q6 IFtQQVRDSF0gRml4IE11bHRpIHRocmVhZCBkZWJ1ZyBidWcgZml4IGluIEFJWAoKIEluIHRoZSBy ZWNlbnQgY29tbWl0IDk4ZWQyNGZiMzVkODllYjIwMTc5ZWRmNmMxMmY1OTljN2E5ZTIyOGUgbWFk ZSBieSBNci4gVG9tIHRoZXJlIGlzIGEgY2hhbmdlIGluIGFpeC10aHJlYWQuYyBmaWxlIHRoYXQg Y2hhbmdlcwoKIHN0YXRpY19jYXN0IDxhaXhfdGhyZWFkX2luZm8gKj4gaW4gZ2RiIHRvIGdkYjo6 Y2hlY2tlZF9zdGF0aWNfY2FzdCA8YWl4X3RocmVhZF9pbmZvICo+CgogQUlYIGZvbGtzIHVzaW5n IHRoZSBsYXRlc3QgdmVyc2lvbiB3aWxsIG5vdCBiZSBhYmxlIHRvIGRlYnVnIG11bHRpIHRocmVh ZCBwcm9ncmFtcyBhcyBhIHJlc3VsdCBvZiBpdAoKVGhlIGVycm9yIGluIEFJWCBpcyBhcyBmb2xs b3dzOi0KCmludGVybmFsLWVycm9yIGNoZWNrZWRfc3RhdGljX2Nhc3QgQXNzZXJ0aW9uIHJlc3Vs dCAhPSBudWxscHRyIGZhaWxlZC4KClRoZSByZWFzb24gYmVpbmcgQUlYIHNoYXJlZCBsaWJyYXJ5 IHdlcmUgbm90IGJlaW5nIGxvYWRlZCBmb3IgYSBuZXcgaW5mZXJpb3IgYW5kIHRvcCB0YXJnZXQg d2FzIG5vdCBzZXQgcHJvcGVybHkuCgpUaGlzIHBhdGNoIGlzIGEgZml4IGZvciB0aGUgc2FtZS4K LS0tCiBnZGIvYWl4LXRocmVhZC5jIHwgMjc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0tCiBnZGIvc29saWItYWl4LmMgIHwgIDEwICsrCiAyIGZpbGVzIGNo YW5nZWQsIDIwNiBpbnNlcnRpb25zKCspLCA4MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9n ZGIvYWl4LXRocmVhZC5jIGIvZ2RiL2FpeC10aHJlYWQuYwppbmRleCBlNTU2YzE1MzU3Ni4uYWRj MTdjODZkNjYgMTAwNjQ0Ci0tLSBhL2dkYi9haXgtdGhyZWFkLmMKKysrIGIvZ2RiL2FpeC10aHJl YWQuYwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgYm9vbCBkZWJ1Z19haXhfdGhyZWFkOwogCiAv KiBSZXR1cm4gd2hldGhlciB0byB0cmVhdCBQSUQgYXMgYSBkZWJ1Z2dhYmxlIHRocmVhZCBpZC4g ICovCiAKLSNkZWZpbmUgUERfVElEKHB0aWQpCShwZF9hY3RpdmUgJiYgcHRpZC50aWQgKCkgIT0g MCkKKyNkZWZpbmUgUERfVElEKHB0aWQsIGRhdGEpCShkYXRhLT5wZF9hY3RpdmUgJiYgcHRpZC50 aWQgKCkgIT0gMCkKIAogLyogU3VjY2VzcyBhbmQgZmFpbHVyZSB2YWx1ZXMgcmV0dXJuZWQgYnkg cHRoZGIgY2FsbGJhY2tzLiAgKi8KIApAQCAtMTQ5LDE0ICsxNDksNiBAQCBzdGF0aWMgYWl4X3Ro cmVhZF90YXJnZXQgYWl4X3RocmVhZF9vcHM7CiAKIHN0YXRpYyBDT1JFX0FERFIgcGRfYnJrX2Fk ZHI7CiAKLS8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVidWdnYWJsZSBi eSBwdGhkYi4gICovCi0KLXN0YXRpYyBpbnQgcGRfYWJsZSA9IDA7Ci0KLS8qIFdoZXRoZXIgYSB0 aHJlYWRlZCBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZC4gICovCi0KLXN0YXRpYyBpbnQg cGRfYWN0aXZlID0gMDsKLQogLyogV2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgaXMg NjQtYml0LiAgCiAgICBPbmx5IHZhbGlkIHdoZW4gcGRfYWJsZSBpcyB0cnVlLiAgKi8KIApAQCAt MTkxLDkgKzE4Myw2MCBAQCBzdGF0aWMgcHRoZGJfY2FsbGJhY2tzX3QgcGRfY2FsbGJhY2tzID0g ewogICBOVUxMCiB9OwogCi0vKiBDdXJyZW50IHB0aGRiIHNlc3Npb24uICAqLworLyogQWl4IHZh cmlhYmxlIHN0cnVjdHVyZS4gICovCitzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgCit7Cisg IC8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVidWdnYWJsZSBieSBwdGhk Yi4gICovCisgIGludCBwZF9hYmxlOworCisgIC8qIFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNh dGlvbiBpcyBiZWluZyBkZWJ1Z2dlZC4gICovCisgIGludCBwZF9hY3RpdmU7CisKKyAgLyogQ3Vy cmVudCBwdGhkYiBzZXNzaW9uLiAgKi8KKyAgcHRoZGJfc2Vzc2lvbl90IHBkX3Nlc3Npb247Cit9 OworCisvKiBLZXkgdG8gb3VyIHBlci1pbmZlcmlvciBkYXRhLiAgKi8KK3N0YXRpYyBjb25zdCBy ZWdpc3RyeTxpbmZlcmlvcj46OmtleTxhaXhfdGhyZWFkX3ZhcmlhYmxlcz4KKyAgYWl4X3RocmVh ZF92YXJpYWJsZXNfaGFuZGxlOworCisvKiBGdW5jdGlvbiB0byBHZXQgYWl4X3RocmVhZF92YXJp YWJsZXMgZGF0YS4gICovCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0 X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKHN0cnVjdCBpbmZlcmlvciAqaW5mKQoreworICBp ZiAoaW5mID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzKiBkYXRhOworCisgIGRhdGEgPSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUu Z2V0IChpbmYpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIGRhdGEgPSBhaXhfdGhyZWFkX3Zh cmlhYmxlc19oYW5kbGUuZW1wbGFjZSAoaW5mKTsKIAotc3RhdGljIHB0aGRiX3Nlc3Npb25fdCBw ZF9zZXNzaW9uOworICByZXR1cm4gZGF0YTsKK30KKworLyogSGVscGVyIHRvIGdldCBkYXRhIGZv ciBwdGlkIGluIGEgZnVuY3Rpb24uICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFy aWFibGVzKgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocHRpZF90IHB0aWQpCit7 CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgaW5mZXJpb3IgKmluZiA9 IGZpbmRfaW5mZXJpb3JfcHRpZCAoY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQg KCksCisJCQkJCXB0aWQpOworICByZXR1cm4gZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEg KGluZik7Cit9CisKKy8qIEhlbHBlciB0byBnZXQgZGF0YSBmb3IgcGlkIGluIGEgZnVuY3Rpb24u ICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X3RocmVhZF9k YXRhX2hlbHBlcl9mb3JfcGlkIChwaWRfdCBwaWQpCit7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zh cmlhYmxlcyAqZGF0YTsKKyAgaW5mZXJpb3IgKmluZiA9IGZpbmRfaW5mZXJpb3JfcGlkIChjdXJy ZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwaWQpOworICByZXR1cm4gZ2V0X2FpeF90aHJlYWRfdmFyaWFi bGVzX2RhdGEgKGluZik7Cit9CiAKIC8qIFJldHVybiBhIHByaW50YWJsZSByZXByZXNlbnRhdGlv biBvZiBwdGhkZWJ1ZyBmdW5jdGlvbiByZXR1cm4KICAgIFNUQVRVUy4gICovCkBAIC0zMTYsOSAr MzU5LDExIEBAIHN0YXRpYyB2b2lkCiBwaWRfdG9fcHJjIChwdGlkX3QgKnB0aWRwKQogewogICBw dGlkX3QgcHRpZDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRh ID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoKnB0aWRwKTsKIAogICBwdGlkID0g KnB0aWRwOwotICBpZiAoUERfVElEIChwdGlkKSkKKyAgaWYgKFBEX1RJRCAocHRpZCwgZGF0YSkp CiAgICAgKnB0aWRwID0gcHRpZF90IChwdGlkLnBpZCAoKSk7CiB9CiAKQEAgLTUwOCwxNCArNTUz LDEzIEBAIHBkY19yZWFkX2RhdGEgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCB2b2lk ICpidWYsCiAgIC8qIFRoaXMgaXMgbmVlZGVkIHRvIGVsaW1pbmF0ZSB0aGUgZGVwZW5kZW5jeSBv ZiBjdXJyZW50IHRocmVhZAogICAgICB3aGljaCBpcyBudWxsIHNvIHRoYXQgdGhyZWFkIHJlYWRz IHRoZSBjb3JyZWN0IHRhcmdldCBtZW1vcnkuICAqLwogICB7Ci0gICAgc2NvcGVkX3Jlc3RvcmVf Y3VycmVudF90aHJlYWQgcmVzdG9yZV9jdXJyZW50X3RocmVhZDsKKyAgICBzY29wZWRfcmVzdG9y ZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3JlICgmaW5mZXJpb3JfcHRp ZCk7CiAgICAgLyogQmVmb3JlIHRoZSBmaXJzdCBpbmZlcmlvciBpcyBhZGRlZCwgd2UgcGFzcyBp bmZlcmlvcl9wdGlkLnBpZCAoKQogICAgICAgIGZyb20gcGRfZW5hYmxlICgpIHdoaWNoIGlzIDAu ICBUaGVyZSBpcyBubyBuZWVkIHRvIHN3aXRjaCB0aHJlYWRzCiAgICAgICAgZHVyaW5nIGZpcnN0 IGluaXRpYWxpc2F0aW9uLiAgSW4gdGhlIHJlc3Qgb2YgdGhlIGNhbGxiYWNrcyB0aGUKICAgICAg ICBjdXJyZW50IHRocmVhZCBuZWVkcyB0byBiZSBjb3JyZWN0LiAgKi8KICAgICBpZiAodXNlcl9j dXJyZW50X3BpZCAhPSAwKQotICAgICAgc3dpdGNoX3RvX3RocmVhZCAoY3VycmVudF9pbmZlcmlv ciAoKS0+cHJvY2Vzc190YXJnZXQgKCksCi0JCQlwdGlkX3QgKHVzZXJfY3VycmVudF9waWQpKTsK KyAgICAgIGluZmVyaW9yX3B0aWQgPSBwdGlkX3QgKHVzZXJfY3VycmVudF9waWQpOwogICAgIHN0 YXR1cyA9IHRhcmdldF9yZWFkX21lbW9yeSAoYWRkciwgKGdkYl9ieXRlICopIGJ1ZiwgbGVuKTsK ICAgfQogICByZXQgPSBzdGF0dXMgPT0gMCA/IFBEQ19TVUNDRVNTIDogUERDX0ZBSUxVUkU7CkBA IC02MzksMzYgKzY4MywzMiBAQCBwY21wIChjb25zdCB2b2lkICpwMXYsIGNvbnN0IHZvaWQgKnAy dikKICAgcmV0dXJuIHAxLT5wdGhpZCA8IHAyLT5wdGhpZCA/IC0xIDogcDEtPnB0aGlkID4gcDIt PnB0aGlkOwogfQogCi0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBjb3Vu dGluZyBHREIgdGhyZWFkcy4KLQotICAgRG8gbm90IGNvdW50IHRoZSBtYWluIHRocmVhZCAod2hv c2UgdGlkIGlzIHplcm8pLiAgVGhpcyBtYXRjaGVzCi0gICB0aGUgbGlzdCBvZiB0aHJlYWRzIHBy b3ZpZGVkIGJ5IHRoZSBwdGhyZWFkZGVidWcgbGlicmFyeSwgd2hpY2gKLSAgIGRvZXMgbm90IGlu Y2x1ZGUgdGhhdCBtYWluIHRocmVhZCBlaXRoZXIsIGFuZCB0aHVzIGFsbG93cyB1cwotICAgdG8g Y29tcGFyZSB0aGUgdHdvIGxpc3RzLiAgKi8KKy8qIENhbGxiYWNrIGZvciBjb3VudGluZyBHREIg dGhyZWFkcyBmb3IgcHJvY2VzcyBwaWQuICAqLwogCiBzdGF0aWMgaW50Ci1naXRlcl9jb3VudCAo c3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHZvaWQgKmNvdW50cCkKK2dpdGVyX2NvdW50IChw aWRfdCBwaWQpCiB7Ci0gIGlmIChQRF9USUQgKHRocmVhZC0+cHRpZCkpCi0gICAgKCooaW50ICop IGNvdW50cCkrKzsKLSAgcmV0dXJuIDA7CisgIGludCBnY291bnQgPSAwOworICBwcm9jZXNzX3N0 cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAorICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJv Y2Vzc190YXJnZXQgKCk7CisgIGZvciAodGhyZWFkX2luZm8gKnRwIDogYWxsX3RocmVhZHMgKHBy b2NfdGFyZ2V0LCBwdGlkX3QgKHBpZCkpKQorICAgIGdjb3VudCsrOworICByZXR1cm4gZ2NvdW50 OwogfQogCi0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBhY2N1bXVsYXRp bmcgR0RCIHRocmVhZCBwaWRzLgotCi0gICBEbyBub3QgaW5jbHVkZSB0aGUgbWFpbiB0aHJlYWQg KHdob3NlIHRpZCBpcyB6ZXJvKS4gIFRoaXMgbWF0Y2hlcwotICAgdGhlIGxpc3Qgb2YgdGhyZWFk cyBwcm92aWRlZCBieSB0aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0gICBkb2VzIG5v dCBpbmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1cyBhbGxvd3MgdXMKLSAg IHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICovCisvKiBDYWxsYmFjayBmb3IgYWNjdW11bGF0 aW5nIEdEQiB0aHJlYWQgcGlkcy4gICovCiAKIHN0YXRpYyBpbnQKLWdpdGVyX2FjY3VtIChzdHJ1 Y3QgdGhyZWFkX2luZm8gKnRocmVhZCwgdm9pZCAqYnVmcCkKK2dpdGVyX2FjY3VtICh2b2lkICpi dWZwLCBwaWRfdCBwaWQpCiB7Ci0gIGlmIChQRF9USUQgKHRocmVhZC0+cHRpZCkpCi0gICAgewot ICAgICAgKiooc3RydWN0IHRocmVhZF9pbmZvICoqKikgYnVmcCA9IHRocmVhZDsKLSAgICAgICgq KHN0cnVjdCB0aHJlYWRfaW5mbyAqKiopIGJ1ZnApKys7Ci0gICAgfQorICBwcm9jZXNzX3N0cmF0 dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAorICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vz c190YXJnZXQgKCk7CisgIGZvciAodGhyZWFkX2luZm8gKnRwIDogYWxsX3RocmVhZHMgKHByb2Nf dGFyZ2V0LCBwdGlkX3QgKHBpZCkpKQorICB7CisgICAgKiooc3RydWN0IHRocmVhZF9pbmZvICoq KikgYnVmcCA9IHRwOworICAgICgqKHN0cnVjdCB0aHJlYWRfaW5mbyAqKiopIGJ1ZnApKys7Cisg IH0KKwogICByZXR1cm4gMDsKIH0KIApAQCAtNzE5LDcgKzc1OSwxMCBAQCBnZXRfc2lnbmFsZWRf dGhyZWFkIChpbnQgcGlkKQogCQkgICAgc2l6ZW9mICh0aHJpbmYpLCAma3RpZCwgMSkgIT0gMSkK IAlicmVhazsKIAotICAgICAgaWYgKHRocmluZi50aV9jdXJzaWcgPT0gU0lHVFJBUCkKKyAgICAg IC8qIFdlIGFsc28gbmVlZCB0byBrZWVwIGluIG1pbmQgVHJhcCBhbmQgaW50ZXJydXB0IG9yIGFu eQorICAgICAgICAgc2lnbmFsIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBpbiBwZF91cGRhdGUg KCkuICAqLworCisgICAgICBpZiAodGhyaW5mLnRpX2N1cnNpZykKIAlyZXR1cm4gdGhyaW5mLnRp X3RpZDsKICAgICB9CiAKQEAgLTc1MCw2ICs3OTMsMTEgQEAgc3luY190aHJlYWRsaXN0cyAoaW50 IHBpZCkKICAgcHRoZGJfcHRocmVhZF90IHBkdGlkOwogICBwdGhyZWFkX3QgcHRoaWQ7CiAgIHB0 aGRiX3RpZF90IHRpZDsKKyAgcHJvY2Vzc19zdHJhdHVtX3RhcmdldCAqcHJvY190YXJnZXQKKyAg ICAgICAgICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCk7CisgIHRo cmVhZF9pbmZvICAqdHA7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAg ZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAocGlkKTsKIAogICAvKiBBY2N1 bXVsYXRlIGFuIGFycmF5IG9mIGxpYnB0aGRlYnVnIHRocmVhZHMgc29ydGVkIGJ5IHB0aHJlYWQg aWQuICAqLwogCkBAIC03NTksMTEgKzgwNywxMSBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlk KQogCiAgIGZvciAoY21kID0gUFRIREJfTElTVF9GSVJTVDs7IGNtZCA9IFBUSERCX0xJU1RfTkVY VCkKICAgICB7Ci0gICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkIChwZF9zZXNzaW9uLCAmcGR0 aWQsIGNtZCk7CisgICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkIChkYXRhLT5wZF9zZXNzaW9u LCAmcGR0aWQsIGNtZCk7CiAgICAgICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MgfHwgcGR0 aWQgPT0gUFRIREJfSU5WQUxJRF9QVEhSRUFEKQogCWJyZWFrOwogCi0gICAgICBzdGF0dXMgPSBw dGhkYl9wdGhyZWFkX3B0aWQgKHBkX3Nlc3Npb24sIHBkdGlkLCAmcHRoaWQpOworICAgICAgc3Rh dHVzID0gcHRoZGJfcHRocmVhZF9wdGlkIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJnB0aGlk KTsKICAgICAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUyB8fCBwdGhpZCA9PSBQVEhEQl9J TlZBTElEX1BUSUQpCiAJY29udGludWU7CiAKQEAgLTc4MCw3ICs4MjgsNyBAQCBzeW5jX3RocmVh ZGxpc3RzIChpbnQgcGlkKQogCiAgIGZvciAocGkgPSAwOyBwaSA8IHBjb3VudDsgcGkrKykKICAg ICB7Ci0gICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3RpZCAocGRfc2Vzc2lvbiwgcGJ1Zltw aV0ucGR0aWQsICZ0aWQpOworICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF90aWQgKGRhdGEt PnBkX3Nlc3Npb24sIHBidWZbcGldLnBkdGlkLCAmdGlkKTsKICAgICAgIGlmIChzdGF0dXMgIT0g UFRIREJfU1VDQ0VTUykKIAl0aWQgPSBQVEhEQl9JTlZBTElEX1RJRDsKICAgICAgIHBidWZbcGld LnRpZCA9IHRpZDsKQEAgLTc5MCwxMCArODM4LDExIEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBw aWQpCiAKICAgLyogQWNjdW11bGF0ZSBhbiBhcnJheSBvZiBHREIgdGhyZWFkcyBzb3J0ZWQgYnkg cGlkLiAgKi8KIAotICBnY291bnQgPSAwOwotICBpdGVyYXRlX292ZXJfdGhyZWFkcyAoZ2l0ZXJf Y291bnQsICZnY291bnQpOworICAvKiBnY291bnQgaXMgR0RCIHRocmVhZCBjb3VudCBhbmQgcGNv dW50IGlzIHB0aHJlYWRsaWIgdGhyZWFkIGNvdW50LiAgKi8KKworICBnY291bnQgPSBnaXRlcl9j b3VudCAocGlkKTsKICAgZyA9IGdidWYgPSBYTkVXVkVDIChzdHJ1Y3QgdGhyZWFkX2luZm8gKiwg Z2NvdW50KTsKLSAgaXRlcmF0ZV9vdmVyX3RocmVhZHMgKGdpdGVyX2FjY3VtLCAmZyk7CisgIGdp dGVyX2FjY3VtICgmZywgcGlkKTsKICAgcXNvcnQgKGdidWYsIGdjb3VudCwgc2l6ZW9mICpnYnVm LCBnY21wKTsKIAogICAvKiBBcHBseSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28gYXJyYXlz IHRvIEdEQidzIHRocmVhZCBsaXN0LiAgKi8KQEAgLTgxMCw4ICs4NTksNiBAQCBzeW5jX3RocmVh ZGxpc3RzIChpbnQgcGlkKQogCSAgcHJpdi0+cGR0aWQgPSBwYnVmW3BpXS5wZHRpZDsKIAkgIHBy aXYtPnRpZCA9IHBidWZbcGldLnRpZDsKIAotCSAgcHJvY2Vzc19zdHJhdHVtX3RhcmdldCAqcHJv Y190YXJnZXQKLQkgICAgPSBjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKTsK IAkgIHRocmVhZCA9IGFkZF90aHJlYWRfd2l0aF9pbmZvIChwcm9jX3RhcmdldCwKIAkJCQkJIHB0 aWRfdCAocGlkLCAwLCBwYnVmW3BpXS5wdGhpZCksCiAJCQkJCSBwcml2KTsKQEAgLTgzMCw2ICs4 NzcsMjMgQEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAogCSAgY21wX3Jlc3VsdCA9IHB0 aWRfY21wIChwcHRpZCwgZ3B0aWQpOwogCisJICAvKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0aHJl YWQgdGhlbiB3ZSBuZWVkIG5vdCBtYWtlIHRoZSBtYWluIAorCSAgICAgdGhyZWFkIGxvb2sgbGlr ZSBhIHRocmVhZC4gIEl0IGNhbiBzdGF5IGFzIGEgcHJvY2Vzcy4gVGhpcworCSAgICAgaXMgdXNl ZnVsIHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBpbmZlcmlvcnMsIGJ1dCBvbmx5IG9uZSBpcworCSAg ICAgdGhyZWFkZWQuICBTbyB3ZSBuZWVkIG5vdCBtYWtlIHRoZSBvdGhlciBpbmZlcmlvcnMgd2l0 aCBvbmx5CisJICAgICBtYWluIHRocmVhZCwgbG9vayBsaWtlIGEgdGhyZWFkZWQgb25lLiAgRm9y IGV4YW1wbGUsIFRocmVhZAorCSAgICAgMS4xLCAxLjIsIDIuMSwgMy4xIGV4aXN0cyB0aGVuIGl0 IGlzIHVzZWZ1bCB0byBza2lwIHRoaXMgZm9yCisJICAgICBsb29wIGZvciAyLjEgYW5kIDMuMSBs ZWF2aW5nIHRoZW0gYXMgbWFpbiBwcm9jZXNzIHRocmVhZCB3aXRoCisJICAgICBhIGR1bW15IHBy aXYgc2V0LiAgKi8KKworCSAgaWYgKHBjb3VudCA9PSAxICYmIGdjb3VudCA9PSAxKQorCSAgewor CSAgICBhaXhfdGhyZWFkX2luZm8gKnByaXYgPSBuZXcgYWl4X3RocmVhZF9pbmZvOworCSAgICB0 cCA9IGZpbmRfdGhyZWFkX3B0aWQgKHByb2NfdGFyZ2V0LCBncHRpZCk7CisJICAgIHRwLT5wcml2 LnJlc2V0IChwcml2KTsKKwkgICAgYnJlYWs7CisJICB9CisKIAkgIGlmIChjbXBfcmVzdWx0ID09 IDApCiAJICAgIHsKIAkgICAgICBhaXhfdGhyZWFkX2luZm8gKnByaXYgPSBnZXRfYWl4X3RocmVh ZF9pbmZvIChnYnVmW2dpXSk7CkBAIC04NDEsOCArOTA1LDI1IEBAIHN5bmNfdGhyZWFkbGlzdHMg KGludCBwaWQpCiAJICAgIH0KIAkgIGVsc2UgaWYgKGNtcF9yZXN1bHQgPiAwKQogCSAgICB7Ci0J ICAgICAgZGVsZXRlX3RocmVhZCAoZ2J1ZltnaV0pOwotCSAgICAgIGdpKys7CisJICAgICAgLyog VGhpcyBpcyB0byBtYWtlIHRoZSBtYWluIHByb2Nlc3MgdGhyZWFkIG5vdyBsb29rCisJCSBsaWtl IGEgdGhyZWFkLiAgKi8KKworCSAgICAgIGlmIChncHRpZC5pc19waWQgKCkgJiYgZ3B0aWQucGlk ICgpID09IHBwdGlkLnBpZCAoKSkKKwkgICAgICB7CisJCXRocmVhZF9jaGFuZ2VfcHRpZCAocHJv Y190YXJnZXQsIGdwdGlkLCBwcHRpZCk7CisJCWFpeF90aHJlYWRfaW5mbyAqcHJpdiA9IG5ldyBh aXhfdGhyZWFkX2luZm87CisJCXByaXYtPnBkdGlkID0gcGJ1ZltwaV0ucGR0aWQ7CisJCXByaXYt PnRpZCA9IHBidWZbcGldLnRpZDsKKwkJdHAgPSBmaW5kX3RocmVhZF9wdGlkIChwcm9jX3Rhcmdl dCwgcHB0aWQpOworCQl0cC0+cHJpdi5yZXNldCAocHJpdik7CisJCXBpKys7CisJCWdpKys7CisJ ICAgICAgfQorCSAgICAgIGVsc2UKKwkgICAgICB7CisJCWRlbGV0ZV90aHJlYWQgKGdidWZbZ2ld KTsKKwkJZ2krKzsKKwkgICAgICB9CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgewpAQCAtODg4LDEw ICs5NjksMTMgQEAgcGRfdXBkYXRlIChpbnQgcGlkKQogICBwdGhkYl90aWRfdCB0aWQ7CiAgIHN0 cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gTlVMTDsKIAotICBpZiAoIXBkX2FjdGl2ZSkKKyAg c3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9k YXRhX2hlbHBlcl9mb3JfcGlkIChwaWQpOworCisgIGlmICghZGF0YS0+cGRfYWN0aXZlKQogICAg IHJldHVybiBwdGlkX3QgKHBpZCk7CiAKLSAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl91cGRhdGUg KHBkX3Nlc3Npb24pOworICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX3VwZGF0ZSAoZGF0YS0+cGRf c2Vzc2lvbik7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICByZXR1cm4gcHRp ZF90IChwaWQpOwogCkBAIC05MTgsMTUgKzEwMDIsMTcgQEAgc3RhdGljIHB0aWRfdAogcGRfYWN0 aXZhdGUgKGludCBwaWQpCiB7CiAgIGludCBzdGF0dXM7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zh cmlhYmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAo cGlkKTsKIAkJCiAgIHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25faW5pdCAocGlkLCBhcmNoNjQgPyBQ RU1fNjRCSVQgOiBQRU1fMzJCSVQsCiAJCQkgICAgICAgUFRIREJfRkxBR19SRUdTLCAmcGRfY2Fs bGJhY2tzLCAKLQkJCSAgICAgICAmcGRfc2Vzc2lvbik7CisJCQkgICAgICAgJmRhdGEtPnBkX3Nl c3Npb24pOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgewogICAgICAgcmV0 dXJuIHB0aWRfdCAocGlkKTsKICAgICB9Ci0gIHBkX2FjdGl2ZSA9IDE7CisgIGRhdGEtPnBkX2Fj dGl2ZSA9IDE7CiAgIHJldHVybiBwZF91cGRhdGUgKHBpZCk7CiB9CiAKQEAgLTkzNSwxMiArMTAy MSwxNSBAQCBwZF9hY3RpdmF0ZSAoaW50IHBpZCkKIHN0YXRpYyB2b2lkCiBwZF9kZWFjdGl2YXRl ICh2b2lkKQogewotICBpZiAoIXBkX2FjdGl2ZSkKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFi bGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5m ZXJpb3JfcHRpZCk7CisKKyAgaWYgKCFkYXRhLT5wZF9hY3RpdmUpCiAgICAgcmV0dXJuOwotICBw dGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKHBkX3Nlc3Npb24pOworICBwdGhkYl9zZXNzaW9uX2Rlc3Ry b3kgKGRhdGEtPnBkX3Nlc3Npb24pOwogICAKICAgcGlkX3RvX3ByYyAoJmluZmVyaW9yX3B0aWQp OwotICBwZF9hY3RpdmUgPSAwOworICBkYXRhLT5wZF9hY3RpdmUgPSAwOwogfQogCiAvKiBBbiBv YmplY3QgZmlsZSBoYXMganVzdCBiZWVuIGxvYWRlZC4gIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJl bnQKQEAgLTk1Myw4ICsxMDQyLDE0IEBAIHBkX2VuYWJsZSAodm9pZCkKICAgY2hhciAqc3R1Yl9u YW1lOwogICBzdHJ1Y3QgYm91bmRfbWluaW1hbF9zeW1ib2wgbXM7CiAKKyAgaWYgKCFpbmZlcmlv cl9wdGlkLnBpZCAoKSkKKyAgICByZXR1cm47CisgIAorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJp YWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChp bmZlcmlvcl9wdGlkKTsKKwogICAvKiBEb24ndCBpbml0aWFsaXplIHR3aWNlLiAgKi8KLSAgaWYg KHBkX2FibGUpCisgIGlmIChkYXRhLT5wZF9hYmxlKQogICAgIHJldHVybjsKIAogICAvKiBDaGVj ayBhcHBsaWNhdGlvbiB3b3JkIHNpemUuICAqLwpAQCAtOTc4LDcgKzEwNzMsNyBAQCBwZF9lbmFi bGUgKHZvaWQpCiAKICAgLyogUHJlcGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAgIGN1 cnJlbnRfaW5mZXJpb3IgKCktPnB1c2hfdGFyZ2V0ICgmYWl4X3RocmVhZF9vcHMpOwotICBwZF9h YmxlID0gMTsKKyAgZGF0YS0+cGRfYWJsZSA9IDE7IAogCiAgIC8qIElmIHdlJ3JlIGRlYnVnZ2lu ZyBhIGNvcmUgZmlsZSBvciBhbiBhdHRhY2hlZCBpbmZlcmlvciwgdGhlCiAgICAgIHB0aHJlYWQg bGlicmFyeSBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsIHNvIHRyeSB0bwpAQCAt OTkxLDI4ICsxMDg2LDI4IEBAIHBkX2VuYWJsZSAodm9pZCkKIHN0YXRpYyB2b2lkCiBwZF9kaXNh YmxlICh2b2lkKQogewotICBpZiAoIXBkX2FibGUpCisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zhcmlh YmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKGlu ZmVyaW9yX3B0aWQpOworCisgIGlmICghZGF0YS0+cGRfYWJsZSkKICAgICByZXR1cm47Ci0gIGlm IChwZF9hY3RpdmUpCisgIGlmIChkYXRhLT5wZF9hY3RpdmUpCiAgICAgcGRfZGVhY3RpdmF0ZSAo KTsKLSAgcGRfYWJsZSA9IDA7CisgIGRhdGEtPnBkX2FibGUgPSAwOwogICBjdXJyZW50X2luZmVy aW9yICgpLT51bnB1c2hfdGFyZ2V0ICgmYWl4X3RocmVhZF9vcHMpOworICAvL3RtYXAuZXJhc2Ug KGluZmVyaW9yX3B0aWQucGlkICgpKTsKIH0KIAogLyogbmV3X29iamZpbGUgb2JzZXJ2ZXIgY2Fs bGJhY2suCiAKICAgIElmIE9CSkZJTEUgaXMgbm9uLW51bGwsIGNoZWNrIHdoZXRoZXIgYSB0aHJl YWRlZCBhcHBsaWNhdGlvbiBpcwotICAgYmVpbmcgZGVidWdnZWQsIGFuZCBpZiBzbywgcHJlcGFy ZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4KLQotICAgSWYgT0JKRklMRSBpcyBudWxsLCBzdG9wIGRl YnVnZ2luZyB0aHJlYWRzLiAgKi8KKyAgIGJlaW5nIGRlYnVnZ2VkLCBhbmQgaWYgc28sIHByZXBh cmUgZm9yIHRocmVhZCBkZWJ1Z2dpbmcuICAqLwogCiBzdGF0aWMgdm9pZAogbmV3X29iamZpbGUg KHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQogewogICBpZiAob2JqZmlsZSkKICAgICBwZF9lbmFi bGUgKCk7Ci0gIGVsc2UKLSAgICBwZF9kaXNhYmxlICgpOwogfQogCiAvKiBBdHRhY2ggdG8gcHJv Y2VzcyBzcGVjaWZpZWQgYnkgQVJHUy4gICovCkBAIC0xMDQyLDggKzExMzcsMTAgQEAgYWl4X3Ro cmVhZF90YXJnZXQ6OnJlc3VtZSAocHRpZF90IHB0aWQsIGludCBzdGVwLCBlbnVtIGdkYl9zaWdu YWwgc2lnKQogewogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlkX3Qg dGlkWzJdOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBn ZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkKTsKIAotICBpZiAoIVBEX1RJRCAo cHRpZCkpCisgIGlmICghUERfVElEIChwdGlkLCBkYXRhKSkKICAgICB7CiAgICAgICBzY29wZWRf cmVzdG9yZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3JlICgmaW5mZXJp b3JfcHRpZCk7CiAgICAgICAKQEAgLTEwOTUsOCArMTE5MiwxMSBAQCBhaXhfdGhyZWFkX3Rhcmdl dDo6d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzLAog ICAgICBwaWQtb25seSBwdGlkcy4gICovCiAgIGdkYl9hc3NlcnQgKHB0aWQuaXNfcGlkICgpKTsK IAorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhy ZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkKTsKKwogICAvKiBDaGVjayB3aGV0aGVyIGxp YnB0aGRlYnVnIG1pZ2h0IGJlIHJlYWR5IHRvIGJlIGluaXRpYWxpemVkLiAgKi8KLSAgaWYgKCFw ZF9hY3RpdmUgJiYgc3RhdHVzLT5raW5kICgpID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECisg IGlmICghZGF0YS0+cGRfYWN0aXZlICYmIHN0YXR1cy0+a2luZCAoKSA9PSBUQVJHRVRfV0FJVEtJ TkRfU1RPUFBFRAogICAgICAgJiYgc3RhdHVzLT5zaWcgKCkgPT0gR0RCX1NJR05BTF9UUkFQKQog ICAgIHsKICAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnByb2NfdGFyZ2V0CkBAIC0xMjI5 LDExICsxMzI5LDEzIEBAIGZldGNoX3JlZ3NfdXNlcl90aHJlYWQgKHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRfdCBwZHRpZCkKICAgcHBjX2dkYmFyY2hfdGRlcCAqdGRl cCA9IGdkYmFyY2hfdGRlcDxwcGNfZ2RiYXJjaF90ZGVwPiAoZ2RiYXJjaCk7CiAgIGludCBzdGF0 dXMsIGk7CiAgIHB0aGRiX2NvbnRleHRfdCBjdHg7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zhcmlh YmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKGlu ZmVyaW9yX3B0aWQpOwogCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYg KGdkYl9zdGRsb2csIAogCQkiZmV0Y2hfcmVnc191c2VyX3RocmVhZCAlbHhcbiIsIChsb25nKSBw ZHRpZCk7Ci0gIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfY29udGV4dCAocGRfc2Vzc2lvbiwgcGR0 aWQsICZjdHgpOworICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2NvbnRleHQgKGRhdGEtPnBkX3Nl c3Npb24sIHBkdGlkLCAmY3R4KTsKICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTKQogICAg IGVycm9yIChfKCJhaXgtdGhyZWFkOiBmZXRjaF9yZWdpc3RlcnM6IHB0aGRiX3B0aHJlYWRfY29u dGV4dCByZXR1cm5lZCAlcyIpLAogCSAgIHBkX3N0YXR1czJzdHIgKHN0YXR1cykpOwpAQCAtMTM2 Miw4ICsxNDY0LDEwIEBAIGFpeF90aHJlYWRfdGFyZ2V0OjpmZXRjaF9yZWdpc3RlcnMgKHN0cnVj dCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdubykKIHsKICAgc3RydWN0IHRocmVhZF9pbmZv ICp0aHJlYWQ7CiAgIHB0aGRiX3RpZF90IHRpZDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFi bGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocmVn Y2FjaGUtPnB0aWQgKCkpOwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSkpCisg IGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSwgZGF0YSkpCiAgICAgYmVuZWF0aCAoKS0+ ZmV0Y2hfcmVnaXN0ZXJzIChyZWdjYWNoZSwgcmVnbm8pOwogICBlbHNlCiAgICAgewpAQCAtMTUx MSw2ICsxNjE1LDggQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2Nh Y2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBwdGhkYl9jb250ZXh0X3Qg Y3R4OwogICB1aW50MzJfdCBpbnQzMjsKICAgdWludDY0X3QgaW50NjQ7CisgIHN0cnVjdCBhaXhf dGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJf Zm9yX3B0aWQgKGluZmVyaW9yX3B0aWQpOwogCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQogICAg IGdkYl9wcmludGYgKGdkYl9zdGRsb2csIApAQCAtMTUxOCw3ICsxNjI0LDcgQEAgc3RvcmVfcmVn c191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRo cmVhZF90IHBkdGlkKQogCiAgIC8qIFJldHJpZXZlIHRoZSB0aHJlYWQncyBjdXJyZW50IGNvbnRl eHQgZm9yIGl0cyBub24tcmVnaXN0ZXIKICAgICAgdmFsdWVzLiAgKi8KLSAgc3RhdHVzID0gcHRo ZGJfcHRocmVhZF9jb250ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9 IHB0aGRiX3B0aHJlYWRfY29udGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwog ICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6 IHN0b3JlX3JlZ2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250ZXh0IHJldHVybmVkICVzIiksCiAJ ICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVzKSk7CkBAIC0xNTc2LDcgKzE2ODIsNyBAQCBzdG9yZV9y ZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9w dGhyZWFkX3QgcGR0aWQpCiAJY3R4LmZwc2NyID0gdG1wX2Zwc2NyOwogICAgIH0KIAotICBzdGF0 dXMgPSBwdGhkYl9wdGhyZWFkX3NldGNvbnRleHQgKHBkX3Nlc3Npb24sIHBkdGlkLCAmY3R4KTsK KyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zZXRjb250ZXh0IChkYXRhLT5wZF9zZXNzaW9uLCBw ZHRpZCwgJmN0eCk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBlcnJvciAo XygiYWl4LXRocmVhZDogc3RvcmVfcmVnaXN0ZXJzOiAiCiAJICAgICAicHRoZGJfcHRocmVhZF9z ZXRjb250ZXh0IHJldHVybmVkICVzIiksCkBAIC0xNzAyLDggKzE4MDgsMTAgQEAgYWl4X3RocmVh ZF90YXJnZXQ6OnN0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50 IHJlZ25vKQogewogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlkX3Qg dGlkOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRf dGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChpbmZlcmlvcl9wdGlkKTsKIAotICBpZiAoIVBE X1RJRCAocmVnY2FjaGUtPnB0aWQgKCkpKQorICBpZiAoIVBEX1RJRCAocmVnY2FjaGUtPnB0aWQg KCksIGRhdGEpKQogICAgIGJlbmVhdGggKCktPnN0b3JlX3JlZ2lzdGVycyAocmVnY2FjaGUsIHJl Z25vKTsKICAgZWxzZQogICAgIHsKQEAgLTE3NDEsNyArMTg0OSw3IEBAIGFpeF90aHJlYWRfdGFy Z2V0Ojptb3Vybl9pbmZlcmlvciAoKQogewogICB0YXJnZXRfb3BzICpiZW5lYXRoID0gdGhpcy0+ YmVuZWF0aCAoKTsKIAotICBwZF9kZWFjdGl2YXRlICgpOworICBwZF9kaXNhYmxlICgpOwogICBi ZW5lYXRoLT5tb3Vybl9pbmZlcmlvciAoKTsKIH0KIApAQCAtMTc1MCw3ICsxODU4LDEwIEBAIGFp eF90aHJlYWRfdGFyZ2V0Ojptb3Vybl9pbmZlcmlvciAoKQogYm9vbAogYWl4X3RocmVhZF90YXJn ZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERfVElEIChwdGlkKSkK KyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVh ZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CisKKyAgaWYgKCFQRF9USUQg KHB0aWQsIGRhdGEpKQogICAgIHJldHVybiBiZW5lYXRoICgpLT50aHJlYWRfYWxpdmUgKHB0aWQp OwogCiAgIC8qIFdlIHVwZGF0ZSB0aGUgdGhyZWFkIGxpc3QgZXZlcnkgdGltZSB0aGUgY2hpbGQg c3RvcHMsIHNvIGFsbApAQCAtMTc2Niw3ICsxODc3LDEwIEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojp0 aHJlYWRfYWxpdmUgKHB0aWRfdCBwdGlkKQogc3RkOjpzdHJpbmcKIGFpeF90aHJlYWRfdGFyZ2V0 OjpwaWRfdG9fc3RyIChwdGlkX3QgcHRpZCkKIHsKLSAgaWYgKCFQRF9USUQgKHB0aWQpKQorICBz dHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2Rh dGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkKTsKKworICBpZiAoIVBEX1RJRCAocHRpZCwgZGF0YSkp CiAgICAgcmV0dXJuIGJlbmVhdGggKCktPnBpZF90b19zdHIgKHB0aWQpOwogCiAgIHJldHVybiBz dHJpbmdfcHJpbnRmIChfKCJUaHJlYWQgJXMiKSwgcHVsb25nZXN0IChwdGlkLnRpZCAoKSkpOwpA QCAtMTc4Niw4ICsxOTAwLDEwIEBAIGFpeF90aHJlYWRfdGFyZ2V0OjpleHRyYV90aHJlYWRfaW5m byAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCiAgIHB0aGRiX2RldGFjaHN0YXRlX3QgZGV0 YWNoc3RhdGU7CiAgIGludCBjYW5jZWxwZW5kOwogICBzdGF0aWMgY2hhciAqcmV0ID0gTlVMTDsK KyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVh ZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAodGhyZWFkLT5wdGlkKTsKIAotICBpZiAoIVBEX1RJRCAo dGhyZWFkLT5wdGlkKSkKKyAgaWYgKCFQRF9USUQgKHRocmVhZC0+cHRpZCwgZGF0YSkpCiAgICAg cmV0dXJuIE5VTEw7CiAKICAgc3RyaW5nX2ZpbGUgYnVmOwpAQCAtMTgwMCwyNCArMTkxNiwyNCBA QCBhaXhfdGhyZWFkX3RhcmdldDo6ZXh0cmFfdGhyZWFkX2luZm8gKHN0cnVjdCB0aHJlYWRfaW5m byAqdGhyZWFkKQogICAgIC8qIGkxOG46IExpa2UgInRocmVhZC1pZGVudGlmaWVyICVkLCBbc3Rh dGVdIHJ1bm5pbmcsIHN1c3BlbmRlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCJ0aWQgJWQiKSwg KGludCl0aWQpOwogCi0gIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3RhdGUgKHBkX3Nlc3Npb24s IHBkdGlkLCAmc3RhdGUpOworICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3N0YXRlIChkYXRhLT5w ZF9zZXNzaW9uLCBwZHRpZCwgJnN0YXRlKTsKICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNT KQogICAgIHN0YXRlID0gUFNUX05PVFNVUDsKICAgYnVmLnByaW50ZiAoIiwgJXMiLCBzdGF0ZTJz dHIgKHN0YXRlKSk7CiAKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zdXNwZW5kc3RhdGUgKHBk X3Nlc3Npb24sIHBkdGlkLCAKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zdXNwZW5kc3RhdGUg KGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAKIAkJCQkgICAgICAgJnN1c3BlbmRzdGF0ZSk7CiAg IGlmIChzdGF0dXMgPT0gUFRIREJfU1VDQ0VTUyAmJiBzdXNwZW5kc3RhdGUgPT0gUFNTX1NVU1BF TkRFRCkKICAgICAvKiBpMThuOiBMaWtlICJUaHJlYWQtSWQgJWQsIFtzdGF0ZV0gcnVubmluZywg c3VzcGVuZGVkIiAqLwogICAgIGJ1Zi5wcmludGYgKF8oIiwgc3VzcGVuZGVkIikpOwogCi0gIHN0 YXR1cyA9IHB0aGRiX3B0aHJlYWRfZGV0YWNoc3RhdGUgKHBkX3Nlc3Npb24sIHBkdGlkLCAKKyAg c3RhdHVzID0gcHRoZGJfcHRocmVhZF9kZXRhY2hzdGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0 aWQsIAogCQkJCSAgICAgICZkZXRhY2hzdGF0ZSk7CiAgIGlmIChzdGF0dXMgPT0gUFRIREJfU1VD Q0VTUyAmJiBkZXRhY2hzdGF0ZSA9PSBQRFNfREVUQUNIRUQpCiAgICAgLyogaTE4bjogTGlrZSAi VGhyZWFkLUlkICVkLCBbc3RhdGVdIHJ1bm5pbmcsIGRldGFjaGVkIiAqLwogICAgIGJ1Zi5wcmlu dGYgKF8oIiwgZGV0YWNoZWQiKSk7CiAKLSAgcHRoZGJfcHRocmVhZF9jYW5jZWxwZW5kIChwZF9z ZXNzaW9uLCBwZHRpZCwgJmNhbmNlbHBlbmQpOworICBwdGhkYl9wdGhyZWFkX2NhbmNlbHBlbmQg KGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAmY2FuY2VscGVuZCk7CiAgIGlmIChzdGF0dXMgPT0g UFRIREJfU1VDQ0VTUyAmJiBjYW5jZWxwZW5kKQogICAgIC8qIGkxOG46IExpa2UgIlRocmVhZC1J ZCAlZCwgW3N0YXRlXSBydW5uaW5nLCBjYW5jZWwgcGVuZGluZyIgKi8KICAgICBidWYucHJpbnRm IChfKCIsIGNhbmNlbCBwZW5kaW5nIikpOwpkaWZmIC0tZ2l0IGEvZ2RiL3NvbGliLWFpeC5jIGIv Z2RiL3NvbGliLWFpeC5jCmluZGV4IGY0ODNmNTRkZTEzLi4wOWQwMzNlZjQ3MyAxMDA2NDQKLS0t IGEvZ2RiL3NvbGliLWFpeC5jCisrKyBiL2dkYi9zb2xpYi1haXguYwpAQCAtNTY1LDYgKzU2NSw3 IEBAIHNvbGliX2FpeF9iZmRfb3BlbiAoY29uc3QgY2hhciAqcGF0aG5hbWUpCiAgIGNvbnN0IGNo YXIgKnNlcDsKICAgaW50IGZpbGVuYW1lX2xlbjsKICAgaW50IGZvdW5kX2ZpbGU7CisgIHN0ZDo6 c3RyaW5nIHN0cmluZ19wYXRoID0gcGF0aG5hbWU7CiAKICAgaWYgKHBhdGhuYW1lW3BhdGhfbGVu IC0gMV0gIT0gJyknKQogICAgIHJldHVybiBzb2xpYl9iZmRfb3BlbiAocGF0aG5hbWUpOwpAQCAt NjE4LDYgKzYxOSwxNSBAQCBzb2xpYl9haXhfYmZkX29wZW4gKGNvbnN0IGNoYXIgKnBhdGhuYW1l KQogICAgICAgaWYgKG1lbWJlcl9uYW1lID09IGJmZF9nZXRfZmlsZW5hbWUgKG9iamVjdF9iZmQu Z2V0ICgpKSkKIAlicmVhazsKIAorICAgICAgc3RkOjpzdHJpbmcgcyA9IGJmZF9nZXRfZmlsZW5h bWUgKG9iamVjdF9iZmQuZ2V0ICgpKTsKKworICAgICAgLyogRm9yIGV2ZXJ5IGluZmVyaW9yIGFm dGVyIGZpcnN0IGludCBiZmQgc3lzdGVtIHdlIAorCSB3aWxsIGhhdmUgdGhlIHBhdGhuYW1lIGlu c3RlYWQgb2YgdGhlIG1lbWJlciBuYW1lCisJIHJlZ2lzdGVyZWQuIEhlbmNlIHRoZSBiZWxvdyBj b25kaXRpb24gZXhpc3RzLiAgKi8KKworICAgICAgaWYgKHN0cmluZ19wYXRoLmNvbXBhcmUgKHMp ID09IDApCisJcmV0dXJuIG9iamVjdF9iZmQ7CisKICAgICAgIG9iamVjdF9iZmQgPSBnZGJfYmZk X29wZW5yX25leHRfYXJjaGl2ZWRfZmlsZSAoYXJjaGl2ZV9iZmQuZ2V0ICgpLAogCQkJCQkJICAg ICBvYmplY3RfYmZkLmdldCAoKSk7CiAgICAgfQotLSAKMi4zMS4xCgo= --_004_CH2PR15MB35441F7D3B1CDE3E82AFC505D6D69CH2PR15MB3544namp_--