From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id D7BC93858434 for ; Tue, 14 Feb 2023 14:13:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D7BC93858434 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ibm.com Received: from pps.filterd (m0127361.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31EDxnoA034999; Tue, 14 Feb 2023 14:13:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pp1; bh=Qyq1O2uSU+aetMSE/q8evx1jJC9o3YLvLgywYtmP7ck=; b=FX805qrH62SxqWlok5vXIG+1olB2qiSkPwRLMkl4dmv9m0+14u3EVRE81U4VpF/GOrTU O8hQngBpq3WhUw6Qzj8oYCAV0st4j1zeKz1k0Fyc262c9LAdCSMXefU0bJomAFPwfu6n EK6E1TXfV4ukV9F6oz+pOG9rVsmmXqruh6rDCgE7Lq0YZ5Z9dL+0ifKhetzcpWaf3tgi VlyPh+xv9gjeIDCHgc6Yp5zNTJSxpLBjwIG41FJf5MGH3HZPpSWnQZCWVkPqoPqE+s4C 8lhTY3n1HHtntQwby1/zsKshKUv6sLi1uYrrycan9b3l7BtsLdJOsK+CcSYgmRsJOW0L 8g== Received: from nam02-bn1-obe.outbound.protection.outlook.com (mail-bn1nam02lp2047.outbound.protection.outlook.com [104.47.51.47]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nr9gemm65-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 14 Feb 2023 14:13:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N41I0O+zcI5GAYbXsgCul1crrQsD9raS/iv3UskhiVejCNxAFqciyjL016qC5SnNCbLWKzS7nmAaqgyhsRI5MQu4v2T6nRKKc2Gp5Fkwm1KCOjLZC+y4nQHpDTKMAXtp/ytLrEDVchUxxxuCgeei9RjAfe41M8/rQ3ekzfPCKDjUFjy/TFFU+ZPuRh2v3PbNzbGZps8DbSIdiIl/c3VhCCm6arnZpzWCU1smpDL1f+E0uEjqJvBVXFN3NufkyZe04oe+1McJ7NWe+fFgbDcfhT+D81z6IY4WI+E76jV5LlgCu6q5iCZWKa57JKoKVb/4ZnyDKX20FPEXUllh4KwdcA== 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=Qyq1O2uSU+aetMSE/q8evx1jJC9o3YLvLgywYtmP7ck=; b=ny/zc8PTRos1lTF1XCGUge8INQ7HGBMDpaAPlncye67uKhyd9KNAuM0KCND4lXNMh+BTuSWq8dh4MlYejuN1XmDnEFwV4Eu6cNUVhyvkxcPbZW+uGGpaR4vcYDeAyUD4wJIR0SkjkZCBqJGQOd7iDGP8L2gCMeWt7AXQWo859IwXBI0bymQi3ovvbpnpye/Ch2gJWKInHJreczpjuldisymlJGDB+lCLP/d7vmq1xDajnF1RbJimtckFiLDXilmvaZFKh2h14d/mzcJLYrs9UYWpZfxCLY3hcOysdcc244YFs+RlszzFE17zq5iRRfNJ6raDJYsT2mUJEOyQFte4rA== 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 PH7PR15MB5937.namprd15.prod.outlook.com (2603:10b6:510:244::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.24; Tue, 14 Feb 2023 14:13:28 +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.6086.024; Tue, 14 Feb 2023 14:13:28 +0000 From: Aditya Kamath1 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+iAAawUgIADF3ySgAshzACACvn7HoAI6B4pgAADGXOAALszAIABIz5JgAU9kgCAARgy1IACBimAgAL6kLSABOXQgIABOu4P Date: Tue, 14 Feb 2023 14:13:28 +0000 Message-ID: References: <09f2433177505899c9bd31347af9b43118e4f890.camel@de.ibm.com> <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> <10cb526ef81fd8a63fd776e51bf9505c8dff1e33.camel@de.ibm.com> In-Reply-To: <10cb526ef81fd8a63fd776e51bf9505c8dff1e33.camel@de.ibm.com> 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_|PH7PR15MB5937:EE_ x-ms-office365-filtering-correlation-id: 404e5e10-90b9-4cd5-0013-08db0e95a4ec x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: IGlgIvmVNds6BJm8YBIfWgf5Ofzs7bXoK1BX1bSBPYhsLCV529jIt9m7c+qOBxQA+7vIsnl9ru0MKnhPHbPQDFdW/b9YwXb+EbrNf8bLudlhZOXvNSSqXXAWWKewWtf1mnumGyiGpzC877Klf8394pfe9032S+Qzk3wLWhuy9/H/+y7+Vy4Nkoo5+gDfcau4DmsX8wus09AlyjDZbMyh1F94JTesN3RLHxFJF4YG8jI9aadxINX47yJOb0WwzhdR4NHm2IETjVQfIYITYhnrbX0ymavRakTJSiMCP2BTQaVDBqD9cVLK9pWLNbFVpXqgrKEko1sFA18j5sSSJStlLAcrPcBIcAoRuSgU8aR2a474NzzJCuyeFuteck8a9cuMp5sSUC55lcFMK8u6Iijvp6K8S/62jnbB78QIzLls0pbh2NMNqhvUaQ1EbfPqHlcMW1K2Xd/skwmfwBiMfHz9xIbLnyuevlmzuoqCiD20jx4yz9YZqURIAZta78AY1tHzbxTlhdGoLBOoLh/EBe+ra7V0qmIR7qRGOucy9bRttKWuK6FhpjTdocXWP7464qPsVZgJkavmzBv8FS0ifVaWG+gE5y9NVblTj1LnWxqDjusbzFcQ08gdH3jqmXfJTBkywlkCg0OYcgeqhtEW/0BIjKalXrUf1a0m2m6jxDR3FQnK5tfhoovWfMPev06uPIVEfdO/km7VhdVncOdsxz84UA== 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)(376002)(396003)(346002)(366004)(39860400002)(136003)(451199018)(30864003)(2906002)(5660300002)(83380400001)(55016003)(26005)(38070700005)(186003)(6506007)(9686003)(53546011)(99936003)(91956017)(38100700002)(66446008)(4326008)(76116006)(122000001)(8936002)(8676002)(64756008)(66946007)(316002)(66476007)(66556008)(52536014)(41300700001)(478600001)(33656002)(86362001)(71200400001)(7696005)(19627405001)(110136005)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?Windows-1252?Q?F9xXu4A+QHOsvVEWQCL5p9m++w03g1Z1cKBER9X1qaC0mHc+ODB8hxnV?= =?Windows-1252?Q?yMF9lPVMiZrO/wEqrm0SD9xgePhXwCmuVYVDaRvd9jEqv0lKZ9PHdaAo?= =?Windows-1252?Q?EV/sb0w1GFC8stj1hy/3VgMYlzNOD9m3A3JmtgJMb7dBQeCSplAA30mq?= =?Windows-1252?Q?HH1/YnnydwMGDtH5g/C16Zz0UC3A5MoGvdYEN4Qn3UJ2EF8BXOJGwRqP?= =?Windows-1252?Q?i5gVxA9qrlztZ7E9bg2dzwAMCHFz7ae0fIK+6hRMf0JVgEPXTevqsGAs?= =?Windows-1252?Q?E6ab+amxtYkHeVW2MVuZSG3BCYRY4eSbYhuXsjJYdGM+ShL92syxoF84?= =?Windows-1252?Q?kiBbUyXy01Ki0twaHXp31DsJVa/72jWbdi59uJMa9ZzdmDlXX5/TFsIM?= =?Windows-1252?Q?iH9/tKiIEy4QcRyRC0O3xdTGqIL2puE7XkB3xa8xNDRrxFHGfkWiExn1?= =?Windows-1252?Q?jukzIpqvP1XGxsCPPRm3wVQajG5baEJPyvUxM0fzPsBSyQnAAdrur4xI?= =?Windows-1252?Q?SND/onKhbAoLp19rtsni5ziQqFoNvoWZmU+2ettpOfm6YDR1euPCVYP7?= =?Windows-1252?Q?+ThYhutaY13qlSM7i3Jx+NNFNDrzANvgU2THyos9P07wYnKdpO9PCcUt?= =?Windows-1252?Q?zp/cGFtQZ+Z39TuGgC/J4ilC68TuviAAPwrCYyS2XnBb56cBXvPeM7WU?= =?Windows-1252?Q?DSL4srU2TUIk/LVK9jDy+naK/c7l+dUhIO3wVRP1NP+tC3Sd5eW7EHLL?= =?Windows-1252?Q?zq2K41IUm9RmcVxbdLKNAcmpWrVnKfSTTeP936KFDL8fsK/DEKOjQ4gu?= =?Windows-1252?Q?ZG51g+IsYF2Sk3fqlO2D2vn7Xagu/xKiDXrhmgfU3+mVrvEuBG2r9/Ll?= =?Windows-1252?Q?XXg5LPIfC8RImw3elhQF1bO/FppMIl27rpG5TCCK46wnUY96HD/dQkO5?= =?Windows-1252?Q?7lPnpnhs7ehZ8q4bTaQTJUsaJj6pO3tR8QwEpmBHEbDYlpvYou3FQ03O?= =?Windows-1252?Q?UGa2Gm8wBMzz/1VgKohcUsjfTydbjkuBgYq3U2Foo8M1V0RQ13JTOhpl?= =?Windows-1252?Q?CZ7V/mF/+yZhFxuq5uNgkrPQSSpuJh8H1yUdJBENAHxNbzObr7Gxrj/3?= =?Windows-1252?Q?FFRD5TsfLRr9NJMm53TwL6HWs5KJeDs2VQP572IRQ+jI8yMqj+Tgr91g?= =?Windows-1252?Q?tDj1/dvKgaspZ2lTE6Nksr9wEktaJl3azRL0/T9rahYzeUctrdiIwaZe?= =?Windows-1252?Q?Xv/BfcYekruifveOKNaYxKq5GrYStJSiepmeEeqoM2C23QW2zRfNGKny?= =?Windows-1252?Q?I+W8pMrHqd5RpstjfLgxgP6pincVY4QSFWFAZs93mRf2fF1Wrd2WhsEw?= =?Windows-1252?Q?5CwLaJGZrD0QT9qDBaDkZ7j/lih+pyqMXRiE7dYxnMAeo/iJ9pAYaF9I?= =?Windows-1252?Q?bAnesL0n3x8IohEKH3Rzsd9LQX5MwmsRy2XeEIpFwS00bghs0oFxUdqa?= =?Windows-1252?Q?t/g9Hwa/HHUsPJ+BjMoMMc3ukkiSPZzssosA/SxZLnkJLquRVBnfJeKv?= =?Windows-1252?Q?iqR2WC8/8W6Xz+QhPNeV5umyVExo6+i+CuCF/ScvqpJDssYHT0I5b1wx?= =?Windows-1252?Q?CCjaN9DUtX+rDHaLbAia7U1X/DkMwapLTSqj9XW1loU3E0Tytysf4xAy?= =?Windows-1252?Q?Q+k1bDz9RmNVIjK++Ragr5ROAgxSS1L3?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_" 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: 404e5e10-90b9-4cd5-0013-08db0e95a4ec X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Feb 2023 14:13:28.2434 (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: xUJzNaRfFxtkaChChmj6pkRPnidLsJKTLBsF2aQnbbZGNDKvBqtOmQxPbWKhz15bHefz/bK4tlRaZXycYoIX1w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR15MB5937 X-Proofpoint-GUID: 56vPhbU3c58JnstR8BEf1xvjWIGRIN-K X-Proofpoint-ORIG-GUID: 56vPhbU3c58JnstR8BEf1xvjWIGRIN-K X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-14_07,2023-02-14_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 mlxlogscore=999 mlxscore=0 bulkscore=0 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302140120 X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE,MANY_SPAN_IN_TEXT,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_004_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_ Content-Type: multipart/alternative; boundary="_000_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_" --_000_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi Ulrich, Tom and community, Thank you for all the guidance in this bug fix so far. So we have two problems to fix when we follow the child process before we c= ommit which I felt needed a discussion before we make any adjustments in ou= r AIX target code. Kindly find attached the patch where I have the latest v= ersion with me. I have removed the thread_info parameter in the call backs = since you mentioned that pthdb_user_t is what is defined in the OS. Consider the program below and the output as well for the explanation. So what is happening is that the when after a new process is born, its pthr= ead library is getting intialised and we have changed its ptid from ptid (p= id, 0, 0) to ptid (pid, 0, tid). Since we follow fork the code in inferior.= c file will switch to the thread child where the child is reported as ptid = (pid, 0, 0) but exists as ptid (pid, 0, tid). This leads to this crash. We = did try with two variables if you recall in the previous patch. But your po= int of pd_active being there for it was valid. So somehow something isn't c= orrect that I did not understand. We have pd_activate () in only two places= . So is follow_fork () is expecting us to switch to child process and then = change the ptid of the child?? If yes, how do we go?? And if not where are = we going wrong here. Also this ptid_t (pid, 0, 0) and our main thread being ptid_t (pid, 0, tid)= might need a smarted way to switch to the main thread's process space and = set the right current inferior process in pdc_read_memory. Kindly check it = in this patch and let me know if we can do it better. I have done a nicer w= ay in fetch_registers (). That is why I had changed the first parameter in = previous patch version of pdc_read_memory (). So these are the only places that is blocking us from committing this chang= e. Rest are same as before and remaing cases work correctly. -------------------------- >If you no longer use switch_to_thread, can't you then continue to >use ptid_t (user_current_pid)? So the reason is stated in the first paragraph of this email. >B.t.w. the fact that the message is now getting so long is >actually an indicator that it might be preferable to break >the patch out into multiple commits - the solib change is >one obvious stand-alone patch, and maybe it would make sense >to split off the aix-thread changes also needed for single- >inferior debugging from the multi-inferior support changes. >Given that we've already spent a long time on this patch, >I'm not insisting on this change - but something to keep >in mind for future patches. Yes, I have changed the commit message. Thank you. Sure will learn the art = of splitting patches. -------------------------- Waiting for a reply soon. Have a nice day ahead. With curiosity 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; } ----------------------------------------- problematic output:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set follow-fork-mode child (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [Attaching after Thread 515 fork to child process 14090746] [New inferior 2 (process 14090746)] thread.c:1337: internal-error: switch_to_thread: Assertion `thr !=3D NULL' = failed. A problem internal to GDB has been detected, ----------------------------------------- Procstack for the crash. ---------- tid# 33554919 (pthread ID: 1) ---------- 0x090000000016a474 __fd_poll(??, ??, ??) + 0xb4 0x0000000100674954 poll(0x1104b6e70, 0x4, 0xffffffffffffffff) + 0x2c 0x0000000100675f5c gdb_wait_for_event(int)(0x1ffffe9c8) + 0xd0 0x0000000100674df8 gdb_do_one_event(int)(0xffffffff1072b9d0) + 0x1d4 0x00000001000093b4 gdb_readline_wrapper(char const*)(0x11072b9d0) + 0xec 0x0000000100038e2c defaulted_query(char const*, char, char*)(0x101742c80, = 0x101ab0850, 0xfffffffffffeca8) + 0x370 0x0000000100039218 query(char const*, ...)(0x101742c80) + 0x4c 0x00000001000375b0 internal_vproblem(internal_problem*, char const*, int, = char const*, char*)(0x110002540, 0x10190eb30, 0x53910166090, 0x10190ea30, 0= xfffffffffffef08) + 0x378 0x0000000100037a14 internal_verror(char const*, int, char const*, char*)(0= x10190eb30, 0x539ffffed10, 0x10190ea30, 0xfffffffffffef08) + 0x40 0x00000001000365b0 internal_error_loc(char const*, int, char const*, ...)(= 0x10190eb30, 0x53900000000, 0x10190ea30) + 0x58 0x00000001005a6ddc switch_to_thread(thread_info*)(0x0) + 0x48 0x00000001003767cc follow_fork()() + 0x4c8 0x0000000100385f68 handle_inferior_event(execution_control_state*)(0xfffff= fffffff3a8) + 0xda8 0x0000000100380e40 fetch_inferior_event()() + 0x2f8 0x0000000100a1ef04 inferior_event_handler(inferior_event_type)(0x10207830)= + 0x38 0x00000001003926fc infrun_async_inferior_event_handler(void*)(0x0) + 0x30 0x00000001006786c4 check_async_event_handlers()() + 0x94 0x0000000100674cd8 gdb_do_one_event(int)(0xfffffffffffff840) + 0xb4 0x0000000100001dcc start_event_loop()() + 0x28 0x0000000100001fd4 captured_command_loop()() + 0x58 0x000000010000414c captured_main(void*)(0xffffffffffffa60) + 0x2c 0x0000000100004220 gdb_main(captured_main_args*)(0xffffffffffffa60) + 0x20 0x0000000100000a9c main(0x200000000, 0xffffffffffffb00) + 0x58 ________________________________ From: Ulrich Weigand Sent: 14 February 2023 00:31 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: >Also find attached a document that I have proposed as a commit message. Thanks for the details. However, this is too much detail for a commit message - you don't need to include full debug sessions documenting how you found a bug; instead, please concisely summarize *what* the bug *is*, and how (at a high level) the patch fixes the bug. To be more specific, I'd write a commit message for this patch somewhat along these lines: Fix multi-threaded debugging under AIX Multi-threaded debugging using the libpthdebug debug interface is currently broken due to multiple issues. When debugging a single inferior, we were getting assertion failures in get_aix_thread_info as no tp->priv structure was allocated for the main thread. Fix this by switching the main thread from a (pid, 0, 0) ptid_t to a (pid, 0, tid) ptid_t and allocaing the tp->priv structure in sync_threadlists. As a result, the switch_to_thread call in pdc_read_data could now fail since the main thread no longer uses (pid, 0, 0). Replace the call by only switching inferior_ptid, the current inferior, and the current address space (like proc-service.c). Add similar switching to pdc_write_data where it was missing completely. When debugging multiple inferiors, an additional set of problems prevented correct multi-threaded debugging: First of all, aix-thread.c used to have a number of global variables holding per-inferior information. Switch these to a per-inferior data structure instead. Also, sync_threadlists was getting confused as we were comparing the list of threads returned by libpthdebug for *one* process with GDB's list of threads for *all* processes. Only use the GDB threads of the current inferior instead. Finally, the presence of the thread library in any but the first inferior was not correctly detected due to a bug in solib-aix.c, where the BFD file name for shared library members was changed when the library was loaded for the first time, which caused the library to no longer be recognized by name when loaded a second time, (I'm not saying you need to use this exact message - maybe I'm missing something or getting some details wrong. But this is the style you should be roughly going for.) B.t.w. the fact that the message is now getting so long is actually an indicator that it might be preferable to break the patch out into multiple commits - the solib change is one obvious stand-alone patch, and maybe it would make sense to split off the aix-thread changes also needed for single- inferior debugging from the multi-inferior support changes. Given that we've already spent a long time on this patch, I'm not insisting on this change - but something to keep in mind for future patches. Some additional comments on your latest changes: >However, we also need to keep in mind that before we think this will >work, our libpthread library is only ready when the following condition >in the wait () of aix-thread.c is satisfied. > >/* Check whether libpthdebug might be ready to be initialized. */ > if (!data->pd_active && status->kind () =3D=3D TARGET_WAITKIND_STOPPED > && status->sig () =3D=3D GDB_SIGNAL_TRAP) > >Until then changing the =93process =94 to =93thread =94 is incor= rect. >Even though the session is ready and initalised via pd_enable () and >pd_activate () >functions respectively. Therfore this made us to keep >a variable pthdebugready in all functions that lead to sync_threadlists () >so that we change the process thread to a thread with private data only >when libpthdebug is initialised for a particular process. I do not understand this change. The ->pd_active flag is supposed to track exactly that information, why do we need to duplicate it into yet another flag? Note that the point of the the "if" block above is that *it is calling pd_activacte()*, which will set ->pd_active if the library is in fact ready to be used. If there's anything wrong that causes pd_active to be set when the thread library is, in fact, not yet active, that's a bug we need to find and fix. Also, as long as the thread library is not ready, we should not be calling sync_threadlists in the first place. >So why did we make this change >- if (user_current_pid !=3D 0) >- switch_to_thread (current_inferior ()->process_target (), >- ptid_t (user_current_pid)); > in pdc_read_data and change our user variable which was the process > ID to a thread? Wasn=92t it already doing the job? >This now will use the ptid_t (user_current_pid) to switch the thread (). >However, our parent process or main thread of it, is threaded i.e is ptid_t >(user_current_pid, 0, tid). Hence, we will crash with an assertion >failure that thread ptid_t (user_current_pid) has not been found. Ah, I see. That makes sense. >-static int pdc_read_data (pthdb_user_t, void *, pthdb_addr_t, size_t); >-static int pdc_write_data (pthdb_user_t, void *, pthdb_addr_t, size_t); >+static int pdc_read_data (thread_info*, void *, pthdb_addr_t, size_t); >+static int pdc_write_data (thread_info*, void *, pthdb_addr_t, size_t); These changes are also confusing. First of all, my understanding has been that the signature of these functions is fixed by the OS, since they are passed as callbacks to pthdb_session_init. This means you cannot just go and change them arbitrarily ... In addition, I'm not sure the change makes sense semantically. Note that you create one pd_session object *per inferior*, not one per thread. The pthdb_user_t identifies the pd_session, so it doesn't make sense to use the thread_info pointer as pthdb_user_t, even if that were possible from an API perspective. What was the reason for not just continuing to use the PID here? >+ scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_= ptid); > /* Before the first inferior is added, we pass inferior_ptid.pid () > from pd_enable () which is 0. There is no need to switch threads > during first initialisation. In the rest of the callbacks the > current thread needs to be correct. */ >- if (user_current_pid !=3D 0) >- switch_to_thread (current_inferior ()->process_target (), >- ptid_t (user_current_pid)); >+ inferior_ptid =3D user_current_thread->ptid; If you no longer use switch_to_thread, can't you then continue to use ptid_t (user_current_pid)? This is only used during the target_read_memory call, which should go down to the process target, which doesn't require TIDs. >+ tp =3D find_thread_ptid (proc_target, ptid_t (pid)); >+ >+ /* If the pthreadlibrary is not ready to debug >+ then this is just a main process which needs >+ a priv to be set. The if condition below does >+ the same. Otherwise we go to the for loop to >+ sync the pthread and GDB thread lists. */ This goes back to my question above, if the library is not yet ready, first of all we should never even get here, and second, all PTIDs should still be PID-only and nobody should ever look for any aix_thread_info ... > static ptid_t >-pd_activate (int pid) >+pd_activate (pid_t pid, int pthdebugready) I don't understand this flag - the point of this function is to *find out whether* the library is ready - either pthdb_session_init succeeds (and thus the library is ready) or it fails (and thus the library is not ready). > /* If we're debugging a core file or an attached inferior, the > pthread library may already have been initialized, so try to > activate thread debugging. */ >- pd_activate (inferior_ptid.pid ()); >+ pd_activate (inferior_ptid.pid (), 0); I guess this is the point? As the comment says, this should only ever make any difference for core files or attaching to an already running inferior, never for starting up an inferior under GDB. If this isn't correct, we need to understand why. Bye, Ulrich --_000_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_-- --_004_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_ 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=30371; creation-date="Tue, 14 Feb 2023 14:12:36 GMT"; modification-date="Tue, 14 Feb 2023 14:13:27 GMT" Content-Transfer-Encoding: base64 RnJvbSAxM2M3MDM3YTA1OGE2M2IwNzljOWUyNzBiZWJmNGUwYTI3YWQyZGQ3 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFk aGFyIEthbWF0aCA8QWRpdHlhLkthbWF0aDFAaWJtLmNvbT4KRGF0ZTogVHVl LCAxNCBGZWIgMjAyMyAwNzo0NTowNSAtMDYwMApTdWJqZWN0OiBbUEFUQ0hd IEZpeCBtdWx0aS10aHJlYWRlZCBkZWJ1Z2dpbmcgdW5kZXIgQUlYCgpNdWx0 aS10aHJlYWRlZCBkZWJ1Z2dpbmcgdXNpbmcgdGhlIGxpYnB0aGRlYnVnIGRl YnVnIGludGVyZmFjZQppcyBjdXJyZW50bHkgYnJva2VuIGR1ZSB0byBtdWx0 aXBsZSBpc3N1ZXMuCgpXaGVuIGRlYnVnZ2luZyBhIHNpbmdsZSBpbmZlcmlv ciwgd2Ugd2VyZSBnZXR0aW5nIGFzc2VydGlvbgpmYWlsdXJlcyBpbiBnZXRf YWl4X3RocmVhZF9pbmZvIGFzIG5vIHRwLT5wcml2IHN0cnVjdHVyZSB3YXMK YWxsb2NhdGVkIGZvciB0aGUgbWFpbiB0aHJlYWQuCgpXZSBmaXhlZCB0aGlz IGJ5IHN3aXRjaGluZyB0aGUgbWFpbgp0aHJlYWQgZnJvbSBhIChwaWQsIDAs IDApIHB0aWRfdCB0byBhIChwaWQsIDAsIHRpZCkgcHRpZF90IGFuZAphbGxv Y2FpbmcgdGhlIHRwLT5wcml2IHN0cnVjdHVyZSBpbiBzeW5jX3RocmVhZGxp c3RzLgoKQXMgYSByZXN1bHQsIHRoZSBzd2l0Y2hfdG9fdGhyZWFkIGNhbGwg aW4gcGRjX3JlYWRfZGF0YSBjb3VsZApub3cgZmFpbCBzaW5jZSB0aGUgbWFp biB0aHJlYWQgbm8gbG9uZ2VyIHVzZXMgKHBpZCwgMCwgMCkuCgpTbyB3ZSBy ZXBsYWNlZCB0aGUgY2FsbCBieSBvbmx5IHN3aXRjaGluZyBpbmZlcmlvcl9w dGlkLCB0aGUgY3VycmVudAppbmZlcmlvciwgYW5kIHRoZSBjdXJyZW50IGFk ZHJlc3Mgc3BhY2UgKGxpa2UgcHJvYy1zZXJ2aWNlLmMpLgpBZGQgc2ltaWxh ciBzd2l0Y2hpbmcgdG8gcGRjX3dyaXRlX2RhdGEgd2hlcmUgaXQgd2FzIG1p c3NpbmcKY29tcGxldGVseS4KCldoZW4gZGVidWdnaW5nIG11bHRpcGxlIGlu ZmVyaW9ycywgYW4gYWRkaXRpb25hbCBzZXQgb2YKcHJvYmxlbXMgcHJldmVu dGVkIGNvcnJlY3QgbXVsdGktdGhyZWFkZWQgZGVidWdnaW5nOgoKRmlyc3Qg b2YgYWxsLCBhaXgtdGhyZWFkLmMgdXNlZCB0byBoYXZlIGEgbnVtYmVyIG9m IGdsb2JhbAp2YXJpYWJsZXMgaG9sZGluZyBwZXItaW5mZXJpb3IgaW5mb3Jt YXRpb24uCgpXZSBzd2l0Y2hlZCBoZXNlCnRvIGEgcGVyLWluZmVyaW9yIGRh dGEgc3RydWN0dXJlIGluc3RlYWQuCgpBbHNvLCBzeW5jX3RocmVhZGxpc3Rz IHdhcyBnZXR0aW5nIGNvbmZ1c2VkIGFzIHdlIHdlcmUKY29tcGFyaW5nIHRo ZSBsaXN0IG9mIHRocmVhZHMgcmV0dXJuZWQgYnkgbGlicHRoZGVidWcKZm9y ICpvbmUqIHByb2Nlc3Mgd2l0aCBHREIncyBsaXN0IG9mIHRocmVhZHMgZm9y ICphbGwqCnByb2Nlc3Nlcy4gTm93IHdlIG9ubHkgdXNlIGhlIEdEQiB0aHJl YWRzIG9mIHRoZSBjdXJyZW50CmluZmVyaW9yIGluc3RlYWQuCgpGaW5hbGx5 LCB0aGUgcHJlc2VuY2Ugb2YgdGhlIHRocmVhZCBsaWJyYXJ5IGluIGFueSBi dXQKdGhlIGZpcnN0IGluZmVyaW9yIHdhcyBub3QgY29ycmVjdGx5IGRldGVj dGVkIGR1ZSB0byBhCmJ1ZyBpbiBzb2xpYi1haXguYywgd2hlcmUgdGhlIEJG RCBmaWxlIG5hbWUgZm9yIHNoYXJlZApsaWJyYXJ5IG1lbWJlcnMgd2FzIGNo YW5nZWQgd2hlbiB0aGUgbGlicmFyeSB3YXMgbG9hZGVkCmZvciB0aGUgZmly c3QgdGltZSwgd2hpY2ggY2F1c2VkIHRoZSBsaWJyYXJ5IHRvIG5vIGxvbmdl cgpiZSByZWNvZ25pemVkIGJ5IG5hbWUgd2hlbiBsb2FkZWQgYSBzZWNvbmQg dGltZSwKLS0tCiBnZGIvYWl4LXRocmVhZC5jIHwgMzkxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiBnZGIvc29s aWItYWl4LmMgIHwgIDE0ICsrCiAyIGZpbGVzIGNoYW5nZWQsIDI2MyBpbnNl cnRpb25zKCspLCAxNDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2Ri L2FpeC10aHJlYWQuYyBiL2dkYi9haXgtdGhyZWFkLmMKaW5kZXggZTU1NmMx NTM1NzYuLmM5MDBiZTUzZWU1IDEwMDY0NAotLS0gYS9nZGIvYWl4LXRocmVh ZC5jCisrKyBiL2dkYi9haXgtdGhyZWFkLmMKQEAgLTY4LDEwICs2OCw2IEBA IHN0YXRpYyBib29sIGRlYnVnX2FpeF90aHJlYWQ7CiAjZGVmaW5lIHB0aGRi X3RpZF90CXRpZF90CiAjZW5kaWYKIAotLyogUmV0dXJuIHdoZXRoZXIgdG8g dHJlYXQgUElEIGFzIGEgZGVidWdnYWJsZSB0aHJlYWQgaWQuICAqLwotCi0j ZGVmaW5lIFBEX1RJRChwdGlkKQkocGRfYWN0aXZlICYmIHB0aWQudGlkICgp ICE9IDApCi0KIC8qIFN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWVzIHJldHVy bmVkIGJ5IHB0aGRiIGNhbGxiYWNrcy4gICovCiAKICNkZWZpbmUgUERDX1NV Q0NFU1MJUFRIREJfU1VDQ0VTUwpAQCAtMTQ0LDI0ICsxNDAsNiBAQCBjbGFz cyBhaXhfdGhyZWFkX3RhcmdldCBmaW5hbCA6IHB1YmxpYyB0YXJnZXRfb3Bz CiAKIHN0YXRpYyBhaXhfdGhyZWFkX3RhcmdldCBhaXhfdGhyZWFkX29wczsK IAotLyogQWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdGhhdCBsaWJwdGhyZWFk IHdpbGwgY2FsbCB3aGVuIGxpYnB0aGRlYnVnCi0gICBpcyByZWFkeSB0byBi ZSBpbml0aWFsaXplZC4gICovCi0KLXN0YXRpYyBDT1JFX0FERFIgcGRfYnJr X2FkZHI7Ci0KLS8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24g aXMgZGVidWdnYWJsZSBieSBwdGhkYi4gICovCi0KLXN0YXRpYyBpbnQgcGRf YWJsZSA9IDA7Ci0KLS8qIFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNhdGlv biBpcyBiZWluZyBkZWJ1Z2dlZC4gICovCi0KLXN0YXRpYyBpbnQgcGRfYWN0 aXZlID0gMDsKLQotLyogV2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1 cmUgaXMgNjQtYml0LiAgCi0gICBPbmx5IHZhbGlkIHdoZW4gcGRfYWJsZSBp cyB0cnVlLiAgKi8KLQotc3RhdGljIGludCBhcmNoNjQ7Ci0KIC8qIEZvcndh cmQgZGVjbGFyYXRpb25zIGZvciBwdGhkYiBjYWxsYmFja3MuICAqLwogCiBz dGF0aWMgaW50IHBkY19zeW1ib2xfYWRkcnMgKHB0aGRiX3VzZXJfdCwgcHRo ZGJfc3ltYm9sX3QgKiwgaW50KTsKQEAgLTE5MSw5ICsxNjksNjYgQEAgc3Rh dGljIHB0aGRiX2NhbGxiYWNrc190IHBkX2NhbGxiYWNrcyA9IHsKICAgTlVM TAogfTsKIAotLyogQ3VycmVudCBwdGhkYiBzZXNzaW9uLiAgKi8KKy8qIEFp eCB2YXJpYWJsZSBzdHJ1Y3R1cmUuICAqLworc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzIAoreworICAvKiBXaGV0aGVyIHRoZSBjdXJyZW50IGFwcGxp Y2F0aW9uIGlzIGRlYnVnZ2FibGUgYnkgcHRoZGIuICAqLworICBpbnQgcGRf YWJsZTsKKworICAvKiBXaGV0aGVyIGEgdGhyZWFkZWQgYXBwbGljYXRpb24g aXMgYmVpbmcgZGVidWdnZWQuICAqLworICBpbnQgcGRfYWN0aXZlOworCisg IC8qIEN1cnJlbnQgcHRoZGIgc2Vzc2lvbi4gICovCisgIHB0aGRiX3Nlc3Np b25fdCBwZF9zZXNzaW9uOworCisgIC8qIEFkZHJlc3Mgb2YgdGhlIGZ1bmN0 aW9uIHRoYXQgbGlicHRocmVhZCB3aWxsIGNhbGwgd2hlbiBsaWJwdGhkZWJ1 ZworICAgaXMgcmVhZHkgdG8gYmUgaW5pdGlhbGl6ZWQuICAqLworICBDT1JF X0FERFIgcGRfYnJrX2FkZHI7CisKKyAgLyogV2hldGhlciB0aGUgY3VycmVu dCBhcmNoaXRlY3R1cmUgaXMgNjQtYml0LgorICAgT25seSB2YWxpZCB3aGVu IHBkX2FibGUgaXMgdHJ1ZS4gICovCisgIGludCBhcmNoNjQ7Cit9OworCisv KiBLZXkgdG8gb3VyIHBlci1pbmZlcmlvciBkYXRhLiAgKi8KK3N0YXRpYyBj b25zdCByZWdpc3RyeTxpbmZlcmlvcj46OmtleTxhaXhfdGhyZWFkX3Zhcmlh Ymxlcz4KKyAgYWl4X3RocmVhZF92YXJpYWJsZXNfaGFuZGxlOworCisvKiBG dW5jdGlvbiB0byBHZXQgYWl4X3RocmVhZF92YXJpYWJsZXMgZGF0YS4gICov CitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X2Fp eF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKHN0cnVjdCBpbmZlcmlvciAqaW5m KQoreworICBpZiAoaW5mID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisK KyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKiBkYXRhOwogCi1zdGF0 aWMgcHRoZGJfc2Vzc2lvbl90IHBkX3Nlc3Npb247CisgIGRhdGEgPSBhaXhf dGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUuZ2V0IChpbmYpOworICBpZiAoZGF0 YSA9PSBOVUxMKQorICAgIGRhdGEgPSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19o YW5kbGUuZW1wbGFjZSAoaW5mKTsKKworICByZXR1cm4gZGF0YTsKK30KKwor LyogSGVscGVyIHRvIGdldCBkYXRhIGZvciBwdGlkIGluIGEgZnVuY3Rpb24u ICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgor Z2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocHRpZF90IHB0aWQp Cit7CisgIGluZmVyaW9yICppbmYgPSBmaW5kX2luZmVyaW9yX3B0aWQgKGN1 cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpLAorCQkJCQlw dGlkKTsKKyAgcmV0dXJuIGdldF9haXhfdGhyZWFkX3ZhcmlhYmxlc19kYXRh IChpbmYpOworfQorCisvKiBIZWxwZXIgdG8gZ2V0IGRhdGEgZm9yIHBpZCBp biBhIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIHN0cnVjdCBhaXhfdGhyZWFk X3ZhcmlhYmxlcyoKK2dldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAo cGlkX3QgcGlkKQoreworICBpbmZlcmlvciAqaW5mID0gZmluZF9pbmZlcmlv cl9waWQgKGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp ZCk7CisgIHJldHVybiBnZXRfYWl4X3RocmVhZF92YXJpYWJsZXNfZGF0YSAo aW5mKTsKK30KIAogLyogUmV0dXJuIGEgcHJpbnRhYmxlIHJlcHJlc2VudGF0 aW9uIG9mIHB0aGRlYnVnIGZ1bmN0aW9uIHJldHVybgogICAgU1RBVFVTLiAg Ki8KQEAgLTMxOCw3ICszNTMsNyBAQCBwaWRfdG9fcHJjIChwdGlkX3QgKnB0 aWRwKQogICBwdGlkX3QgcHRpZDsKIAogICBwdGlkID0gKnB0aWRwOwotICBp ZiAoUERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpICE9IDApCiAg ICAgKnB0aWRwID0gcHRpZF90IChwdGlkLnBpZCAoKSk7CiB9CiAKQEAgLTM4 OSw2ICs0MjQsOSBAQCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2VyX3QgdXNl cl9jdXJyZW50X3BpZCwKICAgZG91YmxlIGZwcnNbcHBjX251bV9mcHJzXTsK ICAgc3RydWN0IHB0eHNwcnMgc3ByczY0OwogICBzdHJ1Y3QgcHRzcHJzIHNw cnMzMjsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOwor ICAKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAo dXNlcl9jdXJyZW50X3BpZCk7CiAgIAogICBpZiAoZGVidWdfYWl4X3RocmVh ZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAicGRjX3JlYWRfcmVn cyB0aWQ9JWQgZmxhZ3M9JXNcbiIsCkBAIC0zOTcsNyArNDM1LDcgQEAgcGRj X3JlYWRfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAg IC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxh Z3MgJiBQVEhEQl9GTEFHX0dQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2 NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQpCiAJewogCSAgaWYgKCFwdHJh Y2U2NGFpeCAoUFRUX1JFQURfR1BSUywgdGlkLCAKIAkJCSAgICAodW5zaWdu ZWQgbG9uZykgZ3ByczY0LCAwLCBOVUxMKSkKQEAgLTQyMyw3ICs0NjEsNyBA QCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3Bp ZCwKICAgLyogU3BlY2lhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAgIGlm IChmbGFncyAmIFBUSERCX0ZMQUdfU1BSUykKICAgICB7Ci0gICAgICBpZiAo YXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAl7CiAJICBpZiAo IXB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJTLCB0aWQsIAogCQkJICAgICh1 bnNpZ25lZCBsb25nKSAmc3ByczY0LCAwLCBOVUxMKSkKQEAgLTQ1Niw2ICs0 OTQsMTAgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1 cnJlbnRfcGlkLAogICAgICB0aGlzIGlzIG5lZWRlZCwgSSBoYXZlIGltcGxl bWVudGVkIHdoYXQgSSB0aGluayBpdCBzaG91bGQgZG8sCiAgICAgIGhvd2V2 ZXIgdGhpcyBjb2RlIGlzIHVudGVzdGVkLiAgKi8KIAorICBzdHJ1Y3QgYWl4 X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3Ro cmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkICh1c2VyX2N1cnJlbnRfcGlkKTsK KwogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChn ZGJfc3RkbG9nLCAicGRjX3dyaXRlX3JlZ3MgdGlkPSVkIGZsYWdzPSVzXG4i LAogCQkoaW50KSB0aWQsIGhleF9zdHJpbmcgKGZsYWdzKSk7CkBAIC00NjMs NyArNTA1LDcgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2Vy X2N1cnJlbnRfcGlkLAogICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJz LiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxBR19HUFJTKQogICAgIHsK LSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQog CXB0cmFjZTY0YWl4IChQVFRfV1JJVEVfR1BSUywgdGlkLCAKIAkJICAgICAo dW5zaWduZWQgbG9uZykgY29udGV4dC0+Z3ByLCAwLCBOVUxMKTsKICAgICAg IGVsc2UKQEAgLTQ3OSw3ICs1MjEsNyBAQCBwZGNfd3JpdGVfcmVncyAocHRo ZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8qIFNwZWNpYWwtcHVy cG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFH X1NQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2NCkKKyAgICAgIGlmIChk YXRhLT5hcmNoNjQpCiAJewogCSAgcHRyYWNlNjRhaXggKFBUVF9XUklURV9T UFJTLCB0aWQsIAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpICZjb250ZXh0 LT5tc3IsIDAsIE5VTEwpOwpAQCAtNDk5LDYgKzU0MSwyMCBAQCBwZGNfcmVh ZF9kYXRhIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwgdm9pZCAq YnVmLAogCSAgICAgICBwdGhkYl9hZGRyX3QgYWRkciwgc2l6ZV90IGxlbikK IHsKICAgaW50IHN0YXR1cywgcmV0OworICB0aHJlYWRfaW5mbyAqdGhyZWFk ID0gZmluZF90aHJlYWRfcHRpZCAoY3VycmVudF9pbmZlcmlvciAoKS0+cHJv Y2Vzc190YXJnZXQgKCksIHB0aWRfdCAodXNlcl9jdXJyZW50X3BpZCkpOwor ICAvKiBJZiB0aGUgcHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGlzIGxvYWRlZCwg dGhlbiB3ZSBuZWVkIHRoZSBwdGlkX3QgKHBpZCwgMCAsdGlkKS4KKyAgICAg U2luY2UgdGhlIG1haW4gdGhyZWFkIGluIHRoZSBiZWxvdyBmb3IgbG9vcCB3 aWxsIGJlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24KKyAgICAgd2Ugd2lsbCBi cmVhay4gICovCisKKyAgaWYgKCF0aHJlYWQpCisgIHsKKyAgICBmb3IgKHRo cmVhZF9pbmZvICp0cDogYWxsX3RocmVhZHMgKGN1cnJlbnRfaW5mZXJpb3Ig KCktPnByb2Nlc3NfdGFyZ2V0ICgpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHB0aWRfdCAodXNlcl9jdXJyZW50X3BpZCkp KQorICAgICAgeworCXRocmVhZCA9IHRwOyAKKwlicmVhazsKKyAgICAgIH0g CisgIH0KIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLApAQCAtNTA4LDE0ICs1NjQsMTcgQEAgcGRjX3Jl YWRfZGF0YSAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsIHZvaWQg KmJ1ZiwKICAgLyogVGhpcyBpcyBuZWVkZWQgdG8gZWxpbWluYXRlIHRoZSBk ZXBlbmRlbmN5IG9mIGN1cnJlbnQgdGhyZWFkCiAgICAgIHdoaWNoIGlzIG51 bGwgc28gdGhhdCB0aHJlYWQgcmVhZHMgdGhlIGNvcnJlY3QgdGFyZ2V0IG1l bW9yeS4gICovCiAgIHsKLSAgICBzY29wZWRfcmVzdG9yZV9jdXJyZW50X3Ro cmVhZCByZXN0b3JlX2N1cnJlbnRfdGhyZWFkOworICAgIHNjb3BlZF9yZXN0 b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUg KCZpbmZlcmlvcl9wdGlkKTsKICAgICAvKiBCZWZvcmUgdGhlIGZpcnN0IGlu ZmVyaW9yIGlzIGFkZGVkLCB3ZSBwYXNzIGluZmVyaW9yX3B0aWQucGlkICgp CiAgICAgICAgZnJvbSBwZF9lbmFibGUgKCkgd2hpY2ggaXMgMC4gIFRoZXJl IGlzIG5vIG5lZWQgdG8gc3dpdGNoIHRocmVhZHMKICAgICAgICBkdXJpbmcg Zmlyc3QgaW5pdGlhbGlzYXRpb24uICBJbiB0aGUgcmVzdCBvZiB0aGUgY2Fs bGJhY2tzIHRoZQogICAgICAgIGN1cnJlbnQgdGhyZWFkIG5lZWRzIHRvIGJl IGNvcnJlY3QuICAqLwotICAgIGlmICh1c2VyX2N1cnJlbnRfcGlkICE9IDAp Ci0gICAgICBzd2l0Y2hfdG9fdGhyZWFkIChjdXJyZW50X2luZmVyaW9yICgp LT5wcm9jZXNzX3RhcmdldCAoKSwKLQkJCXB0aWRfdCAodXNlcl9jdXJyZW50 X3BpZCkpOworICAgIGluZmVyaW9yX3B0aWQgPSBwdGlkX3QgKHVzZXJfY3Vy cmVudF9waWQpOworICAgIHNjb3BlZF9yZXN0b3JlX2N1cnJlbnRfaW5mZXJp b3IgcmVzdG9yZV9pbmZlcmlvcjsKKyAgICBzZXRfY3VycmVudF9pbmZlcmlv ciAodGhyZWFkLT5pbmYpOworCisgICAgc2NvcGVkX3Jlc3RvcmVfY3VycmVu dF9wcm9ncmFtX3NwYWNlIHJlc3RvcmVfY3VycmVudF9wcm9nc3BhY2U7Cisg ICAgc2V0X2N1cnJlbnRfcHJvZ3JhbV9zcGFjZSAodGhyZWFkLT5pbmYtPnBz cGFjZSk7CiAgICAgc3RhdHVzID0gdGFyZ2V0X3JlYWRfbWVtb3J5IChhZGRy LCAoZ2RiX2J5dGUgKikgYnVmLCBsZW4pOwogICB9CiAgIHJldCA9IHN0YXR1 cyA9PSAwID8gUERDX1NVQ0NFU1MgOiBQRENfRkFJTFVSRTsKQEAgLTUzMywx MyArNTkyLDM3IEBAIHBkY193cml0ZV9kYXRhIChwdGhkYl91c2VyX3QgdXNl cl9jdXJyZW50X3BpZCwgdm9pZCAqYnVmLAogCQlwdGhkYl9hZGRyX3QgYWRk ciwgc2l6ZV90IGxlbikKIHsKICAgaW50IHN0YXR1cywgcmV0OworICB0aHJl YWRfaW5mbyAqdGhyZWFkID0gZmluZF90aHJlYWRfcHRpZCAoY3VycmVudF9p bmZlcmlvciAoKSwgCisJCQkJCSAgcHRpZF90ICh1c2VyX2N1cnJlbnRfcGlk KSk7CisgIC8qIElmIHRoZSBwdGhyZWFkIGRlYnVnIGxpYnJhcnkgaXMgbG9h ZGVkLCB0aGVuIHdlIG5lZWQgdGhlIHB0aWRfdCAocGlkLCAwICx0aWQpLgor ICAgICBTaW5jZSB0aGUgbWFpbiB0aHJlYWQgaW4gdGhlIGJlbG93IGZvciBs b29wIHdpbGwgYmUgaW4gdGhlIGZpcnN0IGl0ZXJhdGlvbgorICAgICB3ZSB3 aWxsIGJyZWFrLiAgKi8gCisgIGlmICghdGhyZWFkKQorICB7CisgICAgZm9y ICh0aHJlYWRfaW5mbyAqdHA6IGFsbF90aHJlYWRzIChjdXJyZW50X2luZmVy aW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwgCisJCQkJCXB0aWRfdCAodXNl cl9jdXJyZW50X3BpZCkpKQorICAgICAgeworICAgICAgICB0aHJlYWQgPSB0 cDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgIH0KIAogICBpZiAoZGVi dWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAog CQkicGRjX3dyaXRlX2RhdGEgKHVzZXJfY3VycmVudF9waWQgPSAlbGQsIGJ1 ZiA9IDB4JWx4LCBhZGRyID0gJXMsIGxlbiA9ICVsZClcbiIsCiAJCXVzZXJf Y3VycmVudF9waWQsIChsb25nKSBidWYsIGhleF9zdHJpbmcgKGFkZHIpLCBs ZW4pOwogCi0gIHN0YXR1cyA9IHRhcmdldF93cml0ZV9tZW1vcnkgKGFkZHIs IChnZGJfYnl0ZSAqKSBidWYsIGxlbik7CisgIHsKKyAgICBzY29wZWRfcmVz dG9yZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3Jl ICgmaW5mZXJpb3JfcHRpZCk7CisgICAgaW5mZXJpb3JfcHRpZCA9IHB0aWRf dCAodXNlcl9jdXJyZW50X3BpZCk7CisgICAgc2NvcGVkX3Jlc3RvcmVfY3Vy cmVudF9pbmZlcmlvciByZXN0b3JlX2luZmVyaW9yOworICAgIHNldF9jdXJy ZW50X2luZmVyaW9yICh0aHJlYWQtPmluZik7CisKKyAgICBzY29wZWRfcmVz dG9yZV9jdXJyZW50X3Byb2dyYW1fc3BhY2UgcmVzdG9yZV9jdXJyZW50X3By b2dzcGFjZTsKKyAgICBzZXRfY3VycmVudF9wcm9ncmFtX3NwYWNlICh0aHJl YWQtPmluZi0+cHNwYWNlKTsKKyAgICBzdGF0dXMgPSB0YXJnZXRfd3JpdGVf bWVtb3J5IChhZGRyLCAoZ2RiX2J5dGUgKikgYnVmLCBsZW4pOworICB9CisK ICAgcmV0ID0gc3RhdHVzID09IDAgPyBQRENfU1VDQ0VTUyA6IFBEQ19GQUlM VVJFOwogCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQpAQCAtNjM5LDM5ICs3 MjIsNiBAQCBwY21wIChjb25zdCB2b2lkICpwMXYsIGNvbnN0IHZvaWQgKnAy dikKICAgcmV0dXJuIHAxLT5wdGhpZCA8IHAyLT5wdGhpZCA/IC0xIDogcDEt PnB0aGlkID4gcDItPnB0aGlkOwogfQogCi0vKiBpdGVyYXRlX292ZXJfdGhy ZWFkcygpIGNhbGxiYWNrIGZvciBjb3VudGluZyBHREIgdGhyZWFkcy4KLQot ICAgRG8gbm90IGNvdW50IHRoZSBtYWluIHRocmVhZCAod2hvc2UgdGlkIGlz IHplcm8pLiAgVGhpcyBtYXRjaGVzCi0gICB0aGUgbGlzdCBvZiB0aHJlYWRz IHByb3ZpZGVkIGJ5IHRoZSBwdGhyZWFkZGVidWcgbGlicmFyeSwgd2hpY2gK LSAgIGRvZXMgbm90IGluY2x1ZGUgdGhhdCBtYWluIHRocmVhZCBlaXRoZXIs IGFuZCB0aHVzIGFsbG93cyB1cwotICAgdG8gY29tcGFyZSB0aGUgdHdvIGxp c3RzLiAgKi8KLQotc3RhdGljIGludAotZ2l0ZXJfY291bnQgKHN0cnVjdCB0 aHJlYWRfaW5mbyAqdGhyZWFkLCB2b2lkICpjb3VudHApCi17Ci0gIGlmIChQ RF9USUQgKHRocmVhZC0+cHRpZCkpCi0gICAgKCooaW50ICopIGNvdW50cCkr KzsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIGl0ZXJhdGVfb3Zlcl90aHJlYWRz KCkgY2FsbGJhY2sgZm9yIGFjY3VtdWxhdGluZyBHREIgdGhyZWFkIHBpZHMu Ci0KLSAgIERvIG5vdCBpbmNsdWRlIHRoZSBtYWluIHRocmVhZCAod2hvc2Ug dGlkIGlzIHplcm8pLiAgVGhpcyBtYXRjaGVzCi0gICB0aGUgbGlzdCBvZiB0 aHJlYWRzIHByb3ZpZGVkIGJ5IHRoZSBwdGhyZWFkZGVidWcgbGlicmFyeSwg d2hpY2gKLSAgIGRvZXMgbm90IGluY2x1ZGUgdGhhdCBtYWluIHRocmVhZCBl aXRoZXIsIGFuZCB0aHVzIGFsbG93cyB1cwotICAgdG8gY29tcGFyZSB0aGUg dHdvIGxpc3RzLiAgKi8KLQotc3RhdGljIGludAotZ2l0ZXJfYWNjdW0gKHN0 cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkLCB2b2lkICpidWZwKQotewotICBp ZiAoUERfVElEICh0aHJlYWQtPnB0aWQpKQotICAgIHsKLSAgICAgICoqKHN0 cnVjdCB0aHJlYWRfaW5mbyAqKiopIGJ1ZnAgPSB0aHJlYWQ7Ci0gICAgICAo KihzdHJ1Y3QgdGhyZWFkX2luZm8gKioqKSBidWZwKSsrOwotICAgIH0KLSAg cmV0dXJuIDA7Ci19Ci0KIC8qIHB0aWQgY29tcGFyaXNvbiBmdW5jdGlvbiAq LwogCiBzdGF0aWMgaW50CkBAIC03MTksNyArNzY5LDEwIEBAIGdldF9zaWdu YWxlZF90aHJlYWQgKGludCBwaWQpCiAJCSAgICBzaXplb2YgKHRocmluZiks ICZrdGlkLCAxKSAhPSAxKQogCWJyZWFrOwogCi0gICAgICBpZiAodGhyaW5m LnRpX2N1cnNpZyA9PSBTSUdUUkFQKQorICAgICAgLyogV2UgYWxzbyBuZWVk IHRvIGtlZXAgaW4gbWluZCBUcmFwIGFuZCBpbnRlcnJ1cHQgb3IgYW55Cisg ICAgICAgICBzaWduYWwgdGhhdCBuZWVkcyB0byBiZSBoYW5kbGVkIGluIHBk X3VwZGF0ZSAoKS4gICovCisKKyAgICAgIGlmICh0aHJpbmYudGlfY3Vyc2ln KQogCXJldHVybiB0aHJpbmYudGlfdGlkOwogICAgIH0KIApAQCAtNzQxLDcg Kzc5NCw3IEBAIGdldF9zaWduYWxlZF90aHJlYWQgKGludCBwaWQpCiAgICAg ICAgaGF2ZSBkaWZmaWN1bHR5IHdpdGggY2VydGFpbiBjYWxsIHBhdHRlcm5z ICovCiAKIHN0YXRpYyB2b2lkCi1zeW5jX3RocmVhZGxpc3RzIChpbnQgcGlk KQorc3luY190aHJlYWRsaXN0cyAocGlkX3QgcGlkKSAKIHsKICAgaW50IGNt ZCwgc3RhdHVzOwogICBpbnQgcGNvdW50LCBwc2l6ZSwgcGksIGdjb3VudCwg Z2k7CkBAIC03NTAsNiArODAzLDExIEBAIHN5bmNfdGhyZWFkbGlzdHMgKGlu dCBwaWQpCiAgIHB0aGRiX3B0aHJlYWRfdCBwZHRpZDsKICAgcHRocmVhZF90 IHB0aGlkOwogICBwdGhkYl90aWRfdCB0aWQ7CisgIHByb2Nlc3Nfc3RyYXR1 bV90YXJnZXQgKnByb2NfdGFyZ2V0CisgICAgICAgICAgICA9IGN1cnJlbnRf aW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpOworICB0aHJlYWRfaW5m byAgKnRwOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7 CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQgKHBp ZCk7CiAKICAgLyogQWNjdW11bGF0ZSBhbiBhcnJheSBvZiBsaWJwdGhkZWJ1 ZyB0aHJlYWRzIHNvcnRlZCBieSBwdGhyZWFkIGlkLiAgKi8KIApAQCAtNzU5 LDExICs4MTcsMTEgQEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAog ICBmb3IgKGNtZCA9IFBUSERCX0xJU1RfRklSU1Q7OyBjbWQgPSBQVEhEQl9M SVNUX05FWFQpCiAgICAgewotICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVh ZCAocGRfc2Vzc2lvbiwgJnBkdGlkLCBjbWQpOworICAgICAgc3RhdHVzID0g cHRoZGJfcHRocmVhZCAoZGF0YS0+cGRfc2Vzc2lvbiwgJnBkdGlkLCBjbWQp OwogICAgICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTIHx8IHBkdGlk ID09IFBUSERCX0lOVkFMSURfUFRIUkVBRCkKIAlicmVhazsKIAotICAgICAg c3RhdHVzID0gcHRoZGJfcHRocmVhZF9wdGlkIChwZF9zZXNzaW9uLCBwZHRp ZCwgJnB0aGlkKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfcHRp ZCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZwdGhpZCk7CiAgICAgICBp ZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MgfHwgcHRoaWQgPT0gUFRIREJf SU5WQUxJRF9QVElEKQogCWNvbnRpbnVlOwogCkBAIC03ODAsNyArODM4LDcg QEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAogICBmb3IgKHBpID0g MDsgcGkgPCBwY291bnQ7IHBpKyspCiAgICAgewotICAgICAgc3RhdHVzID0g cHRoZGJfcHRocmVhZF90aWQgKHBkX3Nlc3Npb24sIHBidWZbcGldLnBkdGlk LCAmdGlkKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfdGlkIChk YXRhLT5wZF9zZXNzaW9uLCBwYnVmW3BpXS5wZHRpZCwgJnRpZCk7CiAgICAg ICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAJdGlkID0gUFRIREJf SU5WQUxJRF9USUQ7CiAgICAgICBwYnVmW3BpXS50aWQgPSB0aWQ7CkBAIC03 OTAsMTMgKzg0OCwyNiBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlkKQog CiAgIC8qIEFjY3VtdWxhdGUgYW4gYXJyYXkgb2YgR0RCIHRocmVhZHMgc29y dGVkIGJ5IHBpZC4gICovCiAKKyAgLyogZ2NvdW50IGlzIEdEQiB0aHJlYWQg Y291bnQgYW5kIHBjb3VudCBpcyBwdGhyZWFkbGliIHRocmVhZCBjb3VudC4g ICovCisKICAgZ2NvdW50ID0gMDsKLSAgaXRlcmF0ZV9vdmVyX3RocmVhZHMg KGdpdGVyX2NvdW50LCAmZ2NvdW50KTsKKyAgZm9yICh0aHJlYWRfaW5mbyAq dHAgOiBhbGxfdGhyZWFkcyAocHJvY190YXJnZXQsIHB0aWRfdCAocGlkKSkp CisgICAgZ2NvdW50Kys7CiAgIGcgPSBnYnVmID0gWE5FV1ZFQyAoc3RydWN0 IHRocmVhZF9pbmZvICosIGdjb3VudCk7Ci0gIGl0ZXJhdGVfb3Zlcl90aHJl YWRzIChnaXRlcl9hY2N1bSwgJmcpOworICBmb3IgKHRocmVhZF9pbmZvICp0 cCA6IGFsbF90aHJlYWRzIChwcm9jX3RhcmdldCwgcHRpZF90IChwaWQpKSkK KyAgICAqZysrID0gdHA7CiAgIHFzb3J0IChnYnVmLCBnY291bnQsIHNpemVv ZiAqZ2J1ZiwgZ2NtcCk7CiAKKyAgdHAgPSBmaW5kX3RocmVhZF9wdGlkIChw cm9jX3RhcmdldCwgcHRpZF90IChwaWQpKTsKKworICAvKiBJZiB0aGUgcHRo cmVhZGxpYnJhcnkgaXMgbm90IHJlYWR5IHRvIGRlYnVnIAorICAgICB0aGVu IHRoaXMgaXMganVzdCBhIG1haW4gcHJvY2VzcyB3aGljaCBuZWVkcyAKKyAg ICAgYSBwcml2IHRvIGJlIHNldC4gIFRoZSBpZiBjb25kaXRpb24gYmVsb3cg ZG9lcyAKKyAgICAgdGhlIHNhbWUuICBPdGhlcndpc2Ugd2UgZ28gdG8gdGhl IGZvciBsb29wIHRvIAorICAgICBzeW5jIHRoZSBwdGhyZWFkIGFuZCBHREIg dGhyZWFkIGxpc3RzLiAgKi8KKwogICAvKiBBcHBseSBkaWZmZXJlbmNlcyBi ZXR3ZWVuIHRoZSB0d28gYXJyYXlzIHRvIEdEQidzIHRocmVhZCBsaXN0LiAg Ki8KKwogICBmb3IgKHBpID0gZ2kgPSAwOyBwaSA8IHBjb3VudCB8fCBnaSA8 IGdjb3VudDspCiAgICAgewogICAgICAgaWYgKHBpID09IHBjb3VudCkKQEAg LTgxMCw4ICs4ODEsNiBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlkKQog CSAgcHJpdi0+cGR0aWQgPSBwYnVmW3BpXS5wZHRpZDsKIAkgIHByaXYtPnRp ZCA9IHBidWZbcGldLnRpZDsKIAotCSAgcHJvY2Vzc19zdHJhdHVtX3Rhcmdl dCAqcHJvY190YXJnZXQKLQkgICAgPSBjdXJyZW50X2luZmVyaW9yICgpLT5w cm9jZXNzX3RhcmdldCAoKTsKIAkgIHRocmVhZCA9IGFkZF90aHJlYWRfd2l0 aF9pbmZvIChwcm9jX3RhcmdldCwKIAkJCQkJIHB0aWRfdCAocGlkLCAwLCBw YnVmW3BpXS5wdGhpZCksCiAJCQkJCSBwcml2KTsKQEAgLTg0MSwxMyArOTEw LDI3IEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAJICAgIH0KIAkg IGVsc2UgaWYgKGNtcF9yZXN1bHQgPiAwKQogCSAgICB7Ci0JICAgICAgZGVs ZXRlX3RocmVhZCAoZ2J1ZltnaV0pOwotCSAgICAgIGdpKys7CisJICAgICAg LyogVGhpcyBpcyB0byBtYWtlIHRoZSBtYWluIHByb2Nlc3MgdGhyZWFkIG5v dyBsb29rCisgICAgICAgICAgICAgICAgIGxpa2UgYSB0aHJlYWQuICAqLwor CisJICAgICAgaWYgKGdwdGlkLmlzX3BpZCAoKSkKKwkJeworCQkgIHRocmVh ZF9jaGFuZ2VfcHRpZCAocHJvY190YXJnZXQsIGdwdGlkLCBwcHRpZCk7CisJ CSAgYWl4X3RocmVhZF9pbmZvICpwcml2ID0gbmV3IGFpeF90aHJlYWRfaW5m bzsKKyAgICAgICAgICAgICAgICAgIHByaXYtPnBkdGlkID0gcGJ1ZltwaV0u cGR0aWQ7CisgICAgICAgICAgICAgICAgICBwcml2LT50aWQgPSBwYnVmW3Bp XS50aWQ7CisJCSAgdHAtPnByaXYucmVzZXQgKHByaXYpOworCQkgIGdpKys7 CisJCSAgcGkrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGRlbGV0 ZV90aHJlYWQgKGdidWZbZ2ldKTsKKwkJICBnaSsrOworCQl9CiAJICAgIH0K IAkgIGVsc2UKIAkgICAgewotCSAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJn ZXQgKnByb2NfdGFyZ2V0Ci0JCT0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJv Y2Vzc190YXJnZXQgKCk7CiAJICAgICAgdGhyZWFkID0gYWRkX3RocmVhZCAo cHJvY190YXJnZXQsIHBwdGlkKTsKIAogCSAgICAgIGFpeF90aHJlYWRfaW5m byAqcHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87CkBAIC04ODEsMTcgKzk2 NCwyMCBAQCBpdGVyX3RpZCAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQs IHZvaWQgKnRpZHApCiAgICByZXR1cm4gYSBwaWQtb25seSBwdGlkIHdpdGgg UElELiAgKi8KIAogc3RhdGljIHB0aWRfdAotcGRfdXBkYXRlIChpbnQgcGlk KQorcGRfdXBkYXRlIChwaWRfdCBwaWQpCiB7CiAgIGludCBzdGF0dXM7CiAg IHB0aWRfdCBwdGlkOwogICBwdGhkYl90aWRfdCB0aWQ7CiAgIHN0cnVjdCB0 aHJlYWRfaW5mbyAqdGhyZWFkID0gTlVMTDsKKyAgc3RydWN0IGFpeF90aHJl YWRfdmFyaWFibGVzICpkYXRhOworCisgIGRhdGEgPSBnZXRfdGhyZWFkX2Rh dGFfaGVscGVyX2Zvcl9waWQgKHBpZCk7CiAKLSAgaWYgKCFwZF9hY3RpdmUp CisgIGlmICghZGF0YS0+cGRfYWN0aXZlKQogICAgIHJldHVybiBwdGlkX3Qg KHBpZCk7CiAKLSAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl91cGRhdGUgKHBk X3Nlc3Npb24pOworICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX3VwZGF0ZSAo ZGF0YS0+cGRfc2Vzc2lvbik7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VD Q0VTUykKICAgICByZXR1cm4gcHRpZF90IChwaWQpOwogCkBAIC05MTUsMzQg KzEwMDEsMjMgQEAgcGRfdXBkYXRlIChpbnQgcGlkKQogICAgZm9yIHRoYXQg dGhyZWFkLiAgT3RoZXJ3aXNlLCByZXR1cm4gYSBwdGlkLW9ubHkgcHRpZCB1 c2luZyBQSUQuICAqLwogCiBzdGF0aWMgcHRpZF90Ci1wZF9hY3RpdmF0ZSAo aW50IHBpZCkKK3BkX2FjdGl2YXRlIChwaWRfdCBwaWQpCiB7CiAgIGludCBz dGF0dXM7Ci0JCQotICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX2luaXQgKHBp ZCwgYXJjaDY0ID8gUEVNXzY0QklUIDogUEVNXzMyQklULAorICBzdHJ1Y3Qg YWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhy ZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQgKHBpZCk7CisgIAorICBzdGF0dXMg PSBwdGhkYl9zZXNzaW9uX2luaXQgKHBpZCwgZGF0YS0+YXJjaDY0ID8gUEVN XzY0QklUIDogUEVNXzMyQklULAogCQkJICAgICAgIFBUSERCX0ZMQUdfUkVH UywgJnBkX2NhbGxiYWNrcywgCi0JCQkgICAgICAgJnBkX3Nlc3Npb24pOwor CQkJICAgICAgICZkYXRhLT5wZF9zZXNzaW9uKTsKICAgaWYgKHN0YXR1cyAh PSBQVEhEQl9TVUNDRVNTKQogICAgIHsKICAgICAgIHJldHVybiBwdGlkX3Qg KHBpZCk7CiAgICAgfQotICBwZF9hY3RpdmUgPSAxOworICBkYXRhLT5wZF9h Y3RpdmUgPSAxOwogICByZXR1cm4gcGRfdXBkYXRlIChwaWQpOwogfQogCi0v KiBVbmRvIHRoZSBlZmZlY3RzIG9mIHBkX2FjdGl2YXRlKCkuICAqLwotCi1z dGF0aWMgdm9pZAotcGRfZGVhY3RpdmF0ZSAodm9pZCkKLXsKLSAgaWYgKCFw ZF9hY3RpdmUpCi0gICAgcmV0dXJuOwotICBwdGhkYl9zZXNzaW9uX2Rlc3Ry b3kgKHBkX3Nlc3Npb24pOwotICAKLSAgcGlkX3RvX3ByYyAoJmluZmVyaW9y X3B0aWQpOwotICBwZF9hY3RpdmUgPSAwOwotfQotCiAvKiBBbiBvYmplY3Qg ZmlsZSBoYXMganVzdCBiZWVuIGxvYWRlZC4gIENoZWNrIHdoZXRoZXIgdGhl IGN1cnJlbnQKICAgIGFwcGxpY2F0aW9uIGlzIHB0aHJlYWRlZCwgYW5kIGlm IHNvLCBwcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLiAgKi8KIApAQCAt OTUyLDEzICsxMDI3LDE5IEBAIHBkX2VuYWJsZSAodm9pZCkKICAgaW50IHN0 YXR1czsKICAgY2hhciAqc3R1Yl9uYW1lOwogICBzdHJ1Y3QgYm91bmRfbWlu aW1hbF9zeW1ib2wgbXM7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxl cyAqZGF0YTsKKworICBpZiAoIWluZmVyaW9yX3B0aWQucGlkICgpKQorICAg IHJldHVybjsKKyAgCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVy X2Zvcl9wdGlkIChpbmZlcmlvcl9wdGlkKTsKIAogICAvKiBEb24ndCBpbml0 aWFsaXplIHR3aWNlLiAgKi8KLSAgaWYgKHBkX2FibGUpCisgIGlmIChkYXRh LT5wZF9hYmxlKQogICAgIHJldHVybjsKIAogICAvKiBDaGVjayBhcHBsaWNh dGlvbiB3b3JkIHNpemUuICAqLwotICBhcmNoNjQgPSByZWdpc3Rlcl9zaXpl ICh0YXJnZXRfZ2RiYXJjaCAoKSwgMCkgPT0gODsKKyAgZGF0YS0+YXJjaDY0 ID0gcmVnaXN0ZXJfc2l6ZSAodGFyZ2V0X2dkYmFyY2ggKCksIDApID09IDg7 CiAKICAgLyogQ2hlY2sgd2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgcHRo cmVhZGVkLiAgKi8KICAgc3R1Yl9uYW1lID0gTlVMTDsKQEAgLTk3MiwxMyAr MTA1MywxMyBAQCBwZF9lbmFibGUgKHZvaWQpCiAgIG1zID0gbG9va3VwX21p bmltYWxfc3ltYm9sIChzdHViX25hbWUsIE5VTEwsIE5VTEwpOwogICBpZiAo bXMubWluc3ltID09IE5VTEwpCiAgICAgcmV0dXJuOwotICBwZF9icmtfYWRk ciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7Ci0gIGlmICghY3JlYXRlX3RocmVh ZF9ldmVudF9icmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgcGRfYnJr X2FkZHIpKQorICBkYXRhLT5wZF9icmtfYWRkciA9IG1zLnZhbHVlX2FkZHJl c3MgKCk7CisgIGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVha3BvaW50 ICh0YXJnZXRfZ2RiYXJjaCAoKSwgZGF0YS0+cGRfYnJrX2FkZHIpKQogICAg IHJldHVybjsKIAogICAvKiBQcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5n LiAgKi8KICAgY3VycmVudF9pbmZlcmlvciAoKS0+cHVzaF90YXJnZXQgKCZh aXhfdGhyZWFkX29wcyk7Ci0gIHBkX2FibGUgPSAxOworICBkYXRhLT5wZF9h YmxlID0gMTsgCiAKICAgLyogSWYgd2UncmUgZGVidWdnaW5nIGEgY29yZSBm aWxlIG9yIGFuIGF0dGFjaGVkIGluZmVyaW9yLCB0aGUKICAgICAgcHRocmVh ZCBsaWJyYXJ5IG1heSBhbHJlYWR5IGhhdmUgYmVlbiBpbml0aWFsaXplZCwg c28gdHJ5IHRvCkBAIC05OTEsMjggKzEwNzIsMzEgQEAgcGRfZW5hYmxlICh2 b2lkKQogc3RhdGljIHZvaWQKIHBkX2Rpc2FibGUgKHZvaWQpCiB7Ci0gIGlm ICghcGRfYWJsZSkKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpk YXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRp ZCAoaW5mZXJpb3JfcHRpZCk7CisKKyAgaWYgKCFkYXRhLT5wZF9hYmxlKQog ICAgIHJldHVybjsKLSAgaWYgKHBkX2FjdGl2ZSkKLSAgICBwZF9kZWFjdGl2 YXRlICgpOwotICBwZF9hYmxlID0gMDsKKyAgaWYgKCFkYXRhLT5wZF9hY3Rp dmUpCisgICAgcmV0dXJuOworICBwdGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKGRh dGEtPnBkX3Nlc3Npb24pOworIAorICBwaWRfdG9fcHJjICgmaW5mZXJpb3Jf cHRpZCk7CisgIGRhdGEtPnBkX2FjdGl2ZSA9IDA7CisgIGRhdGEtPnBkX2Fi bGUgPSAwOwogICBjdXJyZW50X2luZmVyaW9yICgpLT51bnB1c2hfdGFyZ2V0 ICgmYWl4X3RocmVhZF9vcHMpOwogfQogCiAvKiBuZXdfb2JqZmlsZSBvYnNl cnZlciBjYWxsYmFjay4KIAogICAgSWYgT0JKRklMRSBpcyBub24tbnVsbCwg Y2hlY2sgd2hldGhlciBhIHRocmVhZGVkIGFwcGxpY2F0aW9uIGlzCi0gICBi ZWluZyBkZWJ1Z2dlZCwgYW5kIGlmIHNvLCBwcmVwYXJlIGZvciB0aHJlYWQg ZGVidWdnaW5nLgotCi0gICBJZiBPQkpGSUxFIGlzIG51bGwsIHN0b3AgZGVi dWdnaW5nIHRocmVhZHMuICAqLworICAgYmVpbmcgZGVidWdnZWQsIGFuZCBp ZiBzbywgcHJlcGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAKIHN0 YXRpYyB2b2lkCiBuZXdfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZp bGUpCiB7CiAgIGlmIChvYmpmaWxlKQogICAgIHBkX2VuYWJsZSAoKTsKLSAg ZWxzZQotICAgIHBkX2Rpc2FibGUgKCk7CiB9CiAKIC8qIEF0dGFjaCB0byBw cm9jZXNzIHNwZWNpZmllZCBieSBBUkdTLiAgKi8KQEAgLTEwNDIsOCArMTEy NiwxMSBAQCBhaXhfdGhyZWFkX3RhcmdldDo6cmVzdW1lIChwdGlkX3QgcHRp ZCwgaW50IHN0ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiB7CiAgIHN0cnVj dCB0aHJlYWRfaW5mbyAqdGhyZWFkOwogICBwdGhkYl90aWRfdCB0aWRbMl07 CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgCisg IGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlk KTsKIAotICBpZiAoIVBEX1RJRCAocHRpZCkpCisgIGlmIChwdGlkLnRpZCAo KSA9PSAwKQogICAgIHsKICAgICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5m ZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9w dGlkKTsKICAgICAgIApAQCAtMTA2NSw3ICsxMTUyLDcgQEAgYWl4X3RocmVh ZF90YXJnZXQ6OnJlc3VtZSAocHRpZF90IHB0aWQsIGludCBzdGVwLCBlbnVt IGdkYl9zaWduYWwgc2lnKQogCSAgICAgICBwdGlkLmx3cCAoKSk7CiAgICAg ICB0aWRbMV0gPSAwOwogCi0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYg KGRhdGEtPmFyY2g2NCkKIAlwdHJhY2U2NGFpeCAoUFRUX0NPTlRJTlVFLCB0 aWRbMF0sIChsb25nIGxvbmcpIDEsCiAJCSAgICAgZ2RiX3NpZ25hbF90b19o b3N0IChzaWcpLCAoUFRSQUNFX1RZUEVfQVJHNSkgdGlkKTsKICAgICAgIGVs c2UKQEAgLTEwODIsNiArMTE2OSw3IEBAIHB0aWRfdAogYWl4X3RocmVhZF90 YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRz dGF0dXMgKnN0YXR1cywKIAkJCSB0YXJnZXRfd2FpdF9mbGFncyBvcHRpb25z KQogeworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CiAg IHsKICAgICBwaWRfdG9fcHJjICgmcHRpZCk7CiAKQEAgLTEwOTUsOCArMTE4 MywxMCBAQCBhaXhfdGhyZWFkX3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQs IHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzLAogICAgICBwaWQt b25seSBwdGlkcy4gICovCiAgIGdkYl9hc3NlcnQgKHB0aWQuaXNfcGlkICgp KTsKIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRp ZCAocHRpZCk7CisKICAgLyogQ2hlY2sgd2hldGhlciBsaWJwdGhkZWJ1ZyBt aWdodCBiZSByZWFkeSB0byBiZSBpbml0aWFsaXplZC4gICovCi0gIGlmICgh cGRfYWN0aXZlICYmIHN0YXR1cy0+a2luZCAoKSA9PSBUQVJHRVRfV0FJVEtJ TkRfU1RPUFBFRAorICBpZiAoIWRhdGEtPnBkX2FjdGl2ZSAmJiBzdGF0dXMt PmtpbmQgKCkgPT0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQKICAgICAgICYm IHN0YXR1cy0+c2lnICgpID09IEdEQl9TSUdOQUxfVFJBUCkKICAgICB7CiAg ICAgICBwcm9jZXNzX3N0cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldApAQCAt MTEwNSw3ICsxMTk1LDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6OndhaXQgKHB0 aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywK ICAgICAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gcmVnY2FjaGUtPmFy Y2ggKCk7CiAKICAgICAgIGlmIChyZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNo ZSkKLQkgIC0gZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNo KSA9PSBwZF9icmtfYWRkcikKKwkgIC0gZ2RiYXJjaF9kZWNyX3BjX2FmdGVy X2JyZWFrIChnZGJhcmNoKSA9PSBkYXRhLT5wZF9icmtfYWRkcikKIAlyZXR1 cm4gcGRfYWN0aXZhdGUgKHB0aWQucGlkICgpKTsKICAgICB9CiAKQEAgLTEy MjksMTggKzEzMTksMjAgQEAgZmV0Y2hfcmVnc191c2VyX3RocmVhZCAoc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlk KQogICBwcGNfZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBw Y19nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKICAgaW50IHN0YXR1cywgaTsK ICAgcHRoZGJfY29udGV4dF90IGN0eDsKKyAgc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hl bHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVn X2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCiAJ CSJmZXRjaF9yZWdzX3VzZXJfdGhyZWFkICVseFxuIiwgKGxvbmcpIHBkdGlk KTsKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChwZF9zZXNz aW9uLCBwZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRf Y29udGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBp ZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFp eC10aHJlYWQ6IGZldGNoX3JlZ2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250 ZXh0IHJldHVybmVkICVzIiksCiAJICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVz KSk7CiAKICAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAK LSAgaWYgKGFyY2g2NCkKKyAgaWYgKGRhdGEtPmFyY2g2NCkKICAgICBzdXBw bHlfZ3ByczY0IChyZWdjYWNoZSwgY3R4Lmdwcik7CiAgIGVsc2UKICAgICBm b3IgKGkgPSAwOyBpIDwgcHBjX251bV9ncHJzOyBpKyspCkBAIC0xMjUzLDcg KzEzNDUsNyBAQCBmZXRjaF9yZWdzX3VzZXJfdGhyZWFkIChzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAg LyogU3BlY2lhbCByZWdpc3RlcnMuICAqLwogCi0gIGlmIChhcmNoNjQpCisg IGlmIChkYXRhLT5hcmNoNjQpCiAgICAgc3VwcGx5X3NwcnM2NCAocmVnY2Fj aGUsIGN0eC5pYXIsIGN0eC5tc3IsIGN0eC5jciwgY3R4LmxyLCBjdHguY3Ry LAogCQkJICAgICBjdHgueGVyLCBjdHguZnBzY3IpOwogICBlbHNlCkBAIC0x Mjg4LDE4ICsxMzgwLDIxIEBAIGZldGNoX3JlZ3Nfa2VybmVsX3RocmVhZCAo c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vLAogICBzdHJ1 Y3QgcHR4c3BycyBzcHJzNjQ7CiAgIHN0cnVjdCBwdHNwcnMgc3ByczMyOwog ICBpbnQgaTsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRh OworICAKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0 aWQgKHJlZ2NhY2hlLT5wdGlkICgpKTsKIAogICBpZiAoZGVidWdfYWl4X3Ro cmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAogCQkiZmV0Y2hf cmVnc19rZXJuZWxfdGhyZWFkIHRpZD0lbHggcmVnbm89JWQgYXJjaDY0PSVk XG4iLAotCQkobG9uZykgdGlkLCByZWdubywgYXJjaDY0KTsKKwkJKGxvbmcp IHRpZCwgcmVnbm8sIGRhdGEtPmFyY2g2NCk7CiAKICAgLyogR2VuZXJhbC1w dXJwb3NlIHJlZ2lzdGVycy4gICovCiAgIGlmIChyZWdubyA9PSAtMQogICAg ICAgfHwgKHRkZXAtPnBwY19ncDBfcmVnbnVtIDw9IHJlZ25vCiAJICAmJiBy ZWdubyA8IHRkZXAtPnBwY19ncDBfcmVnbnVtICsgcHBjX251bV9ncHJzKSkK ICAgICB7Ci0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFy Y2g2NCkKIAl7CiAJICBpZiAoIXB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJT LCB0aWQsIAogCQkJICAgICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5V TEwpKQpAQCAtMTMzMSw3ICsxNDI2LDcgQEAgZmV0Y2hfcmVnc19rZXJuZWxf dGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8s CiAKICAgaWYgKHJlZ25vID09IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAo Z2RiYXJjaCwgcmVnbm8pKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisg ICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIGlmICghcHRyYWNlNjRh aXggKFBUVF9SRUFEX1NQUlMsIHRpZCwgCiAJCQkgICAgKHVuc2lnbmVkIGxv bmcpICZzcHJzNjQsIDAsIE5VTEwpKQpAQCAtMTM2MiwxMiArMTQ1NywxNiBA QCBhaXhfdGhyZWFkX3RhcmdldDo6ZmV0Y2hfcmVnaXN0ZXJzIChzdHJ1Y3Qg cmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pCiB7CiAgIHN0cnVjdCB0 aHJlYWRfaW5mbyAqdGhyZWFkOwogICBwdGhkYl90aWRfdCB0aWQ7CisgIHRo cmVhZCA9IGZpbmRfdGhyZWFkX3B0aWQgKGN1cnJlbnRfaW5mZXJpb3IgKCkt PnByb2Nlc3NfdGFyZ2V0ICgpLCBwdGlkX3QgKHJlZ2NhY2hlLT5wdGlkICgp LnBpZCAoKSwgMCwgcmVnY2FjaGUtPnB0aWQgKCkudGlkICgpKSk7CisKKyAg LyogSWYgYSBuZXcgaW5mZXJpb3IgaXMgYm9ybiwgdGhlbiBpdHMgcHRocmVh ZCBkZWJ1ZyBsaWJyYXJ5IGlzIHlldCB0bworICAgICBpbml0aWFsaXNlZCBh bmQgaGVuY2UgaGFzIG5vIHByaXZhdGUgZGF0YS4gU28gdGhlIGJlbG93IGlm IGNvbmRpdGlvbgorICAgICBleGlzdHMuICAqLwogCi0gIGlmICghUERfVElE IChyZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAo KS50aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5mZXRjaF9yZWdpc3Rl cnMgKHJlZ2NhY2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7Ci0gICAgICB0 aHJlYWQgPSBmaW5kX3RocmVhZF9wdGlkIChjdXJyZW50X2luZmVyaW9yICgp LCByZWdjYWNoZS0+cHRpZCAoKSk7CiAgICAgICBhaXhfdGhyZWFkX2luZm8g KnByaXYgPSBnZXRfYWl4X3RocmVhZF9pbmZvICh0aHJlYWQpOwogICAgICAg dGlkID0gcHJpdi0+dGlkOwogCkBAIC0xNTExLDYgKzE2MTAsOCBAQCBzdG9y ZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAgIHB0aGRiX2NvbnRl eHRfdCBjdHg7CiAgIHVpbnQzMl90IGludDMyOwogICB1aW50NjRfdCBpbnQ2 NDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBk YXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJp b3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2Ri X3ByaW50ZiAoZ2RiX3N0ZGxvZywgCkBAIC0xNTE4LDcgKzE2MTksNyBAQCBz dG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUg KnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogUmV0 cmlldmUgdGhlIHRocmVhZCdzIGN1cnJlbnQgY29udGV4dCBmb3IgaXRzIG5v bi1yZWdpc3RlcgogICAgICB2YWx1ZXMuICAqLwotICBzdGF0dXMgPSBwdGhk Yl9wdGhyZWFkX2NvbnRleHQgKHBkX3Nlc3Npb24sIHBkdGlkLCAmY3R4KTsK KyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChkYXRhLT5wZF9z ZXNzaW9uLCBwZHRpZCwgJmN0eCk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJf U1VDQ0VTUykKICAgICBlcnJvciAoXygiYWl4LXRocmVhZDogc3RvcmVfcmVn aXN0ZXJzOiBwdGhkYl9wdGhyZWFkX2NvbnRleHQgcmV0dXJuZWQgJXMiKSwK IAkgICBwZF9zdGF0dXMyc3RyIChzdGF0dXMpKTsKQEAgLTE1MjgsNyArMTYy OSw3IEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJlYWQgKGNvbnN0IHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRfdCBwZHRpZCkKICAg Zm9yIChpID0gMDsgaSA8IHBwY19udW1fZ3ByczsgaSsrKQogICAgIGlmIChS RUdfVkFMSUQgPT0gcmVnY2FjaGUtPmdldF9yZWdpc3Rlcl9zdGF0dXMgKHRk ZXAtPnBwY19ncDBfcmVnbnVtICsgaSkpCiAgICAgICB7Ci0JaWYgKGFyY2g2 NCkKKwlpZiAoZGF0YS0+YXJjaDY0KQogCSAgewogCSAgICByZWdjYWNoZS0+ cmF3X2NvbGxlY3QgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSwgKHZvaWQg KikgJmludDY0KTsKIAkgICAgY3R4LmdwcltpXSA9IGludDY0OwpAQCAtMTU0 NSw3ICsxNjQ2LDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qg c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBk dGlkKQogICAgIGZpbGxfZnBycyAocmVnY2FjaGUsIGN0eC5mcHIpOwogCiAg IC8qIFNwZWNpYWwgcmVnaXN0ZXJzIChhbHdheXMga2VwdCBpbiBjdHggYXMg NjQgYml0cykuICAqLwotICBpZiAoYXJjaDY0KQorICBpZiAoZGF0YS0+YXJj aDY0KQogICAgIHsKICAgICAgIGZpbGxfc3ByczY0IChyZWdjYWNoZSwgJmN0 eC5pYXIsICZjdHgubXNyLCAmY3R4LmNyLCAmY3R4LmxyLCAmY3R4LmN0ciwK IAkJCSAgICAgJmN0eC54ZXIsICZjdHguZnBzY3IpOwpAQCAtMTU3Niw3ICsx Njc3LDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0 IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQog CWN0eC5mcHNjciA9IHRtcF9mcHNjcjsKICAgICB9CiAKLSAgc3RhdHVzID0g cHRoZGJfcHRocmVhZF9zZXRjb250ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwg JmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc2V0Y29udGV4dCAo ZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVz ICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6 IHN0b3JlX3JlZ2lzdGVyczogIgogCSAgICAgInB0aGRiX3B0aHJlYWRfc2V0 Y29udGV4dCByZXR1cm5lZCAlcyIpLApAQCAtMTYwMiw2ICsxNzAzLDkgQEAg c3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAgIGRvdWJsZSBmcHJzW3BwY19u dW1fZnByc107CiAgIHN0cnVjdCBwdHhzcHJzIHNwcnM2NDsKICAgc3RydWN0 IHB0c3BycyAgc3ByczMyOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJs ZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBl cl9mb3JfcHRpZCAocmVnY2FjaGUtPnB0aWQgKCkpOwogCiAgIGlmIChkZWJ1 Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIApA QCAtMTYxMyw3ICsxNzE3LDcgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFk IChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8s CiAgICAgICB8fCAodGRlcC0+cHBjX2dwMF9yZWdudW0gPD0gcmVnbm8KIAkg ICYmIHJlZ25vIDwgdGRlcC0+cHBjX2dwMF9yZWdudW0gKyBwcGNfbnVtX2Zw cnMpKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0 YS0+YXJjaDY0KQogCXsKIAkgIC8qIFByZS1mZXRjaDogc29tZSByZWdzIG1h eSBub3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0YWl4IChQ VFRfUkVBRF9HUFJTLCB0aWQsICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAs IE5VTEwpOwpAQCAtMTY0Niw3ICsxNzUwLDcgQEAgc3RvcmVfcmVnc19rZXJu ZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBp bnQgcmVnbm8sCiAKICAgaWYgKHJlZ25vID09IC0xIHx8IHNwZWNpYWxfcmVn aXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAgIHsKLSAgICAgIGlmIChh cmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFBy ZS1mZXRjaDogc29tZSByZWdpc3RlcnMgd29uJ3QgYmUgaW4gdGhlIGNhY2hl LiAgKi8KIAkgIHB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJTLCB0aWQsIApA QCAtMTcwMyw3ICsxODA3LDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6OnN0b3Jl X3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJl Z25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJf dGlkX3QgdGlkOwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAo KSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAoKS50aWQgKCkgPT0gMCkKICAg ICBiZW5lYXRoICgpLT5zdG9yZV9yZWdpc3RlcnMgKHJlZ2NhY2hlLCByZWdu byk7CiAgIGVsc2UKICAgICB7CkBAIC0xNzQxLDcgKzE4NDUsNyBAQCBhaXhf dGhyZWFkX3RhcmdldDo6bW91cm5faW5mZXJpb3IgKCkKIHsKICAgdGFyZ2V0 X29wcyAqYmVuZWF0aCA9IHRoaXMtPmJlbmVhdGggKCk7CiAKLSAgcGRfZGVh Y3RpdmF0ZSAoKTsKKyAgcGRfZGlzYWJsZSAoKTsKICAgYmVuZWF0aC0+bW91 cm5faW5mZXJpb3IgKCk7CiB9CiAKQEAgLTE3NTAsNyArMTg1NCw3IEBAIGFp eF90aHJlYWRfdGFyZ2V0Ojptb3Vybl9pbmZlcmlvciAoKQogYm9vbAogYWl4 X3RocmVhZF90YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCiB7 Ci0gIGlmICghUERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09 IDApCiAgICAgcmV0dXJuIGJlbmVhdGggKCktPnRocmVhZF9hbGl2ZSAocHRp ZCk7CiAKICAgLyogV2UgdXBkYXRlIHRoZSB0aHJlYWQgbGlzdCBldmVyeSB0 aW1lIHRoZSBjaGlsZCBzdG9wcywgc28gYWxsCkBAIC0xNzY2LDcgKzE4NzAs NyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6dGhyZWFkX2FsaXZlIChwdGlkX3Qg cHRpZCkKIHN0ZDo6c3RyaW5nCiBhaXhfdGhyZWFkX3RhcmdldDo6cGlkX3Rv X3N0ciAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERfVElEIChwdGlkKSkK KyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVhdGgg KCktPnBpZF90b19zdHIgKHB0aWQpOwogCiAgIHJldHVybiBzdHJpbmdfcHJp bnRmIChfKCJUaHJlYWQgJXMiKSwgcHVsb25nZXN0IChwdGlkLnRpZCAoKSkp OwpAQCAtMTc4Niw4ICsxODkwLDExIEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojpl eHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQp CiAgIHB0aGRiX2RldGFjaHN0YXRlX3QgZGV0YWNoc3RhdGU7CiAgIGludCBj YW5jZWxwZW5kOwogICBzdGF0aWMgY2hhciAqcmV0ID0gTlVMTDsKKyAgc3Ry dWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworCisgIGRhdGEgPSBn ZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkICh0aHJlYWQtPnB0aWQp OwogCi0gIGlmICghUERfVElEICh0aHJlYWQtPnB0aWQpKQorICBpZiAodGhy ZWFkLT5wdGlkLnRpZCAoKSA9PSAwKQogICAgIHJldHVybiBOVUxMOwogCiAg IHN0cmluZ19maWxlIGJ1ZjsKQEAgLTE4MDAsMjQgKzE5MDcsMjQgQEAgYWl4 X3RocmVhZF90YXJnZXQ6OmV4dHJhX3RocmVhZF9pbmZvIChzdHJ1Y3QgdGhy ZWFkX2luZm8gKnRocmVhZCkKICAgICAvKiBpMThuOiBMaWtlICJ0aHJlYWQt aWRlbnRpZmllciAlZCwgW3N0YXRlXSBydW5uaW5nLCBzdXNwZW5kZWQiICov CiAgICAgYnVmLnByaW50ZiAoXygidGlkICVkIiksIChpbnQpdGlkKTsKIAot ICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3N0YXRlIChwZF9zZXNzaW9uLCBw ZHRpZCwgJnN0YXRlKTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zdGF0 ZSAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZzdGF0ZSk7CiAgIGlmIChz dGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBzdGF0ZSA9IFBTVF9OT1RT VVA7CiAgIGJ1Zi5wcmludGYgKCIsICVzIiwgc3RhdGUyc3RyIChzdGF0ZSkp OwogCi0gIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0YXRlIChw ZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRf c3VzcGVuZHN0YXRlIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgCiAJCQkJ ICAgICAgICZzdXNwZW5kc3RhdGUpOwogICBpZiAoc3RhdHVzID09IFBUSERC X1NVQ0NFU1MgJiYgc3VzcGVuZHN0YXRlID09IFBTU19TVVNQRU5ERUQpCiAg ICAgLyogaTE4bjogTGlrZSAiVGhyZWFkLUlkICVkLCBbc3RhdGVdIHJ1bm5p bmcsIHN1c3BlbmRlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIsIHN1c3Bl bmRlZCIpKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2RldGFjaHN0 YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0aGRiX3B0 aHJlYWRfZGV0YWNoc3RhdGUgKGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAK IAkJCQkgICAgICAmZGV0YWNoc3RhdGUpOwogICBpZiAoc3RhdHVzID09IFBU SERCX1NVQ0NFU1MgJiYgZGV0YWNoc3RhdGUgPT0gUERTX0RFVEFDSEVEKQog ICAgIC8qIGkxOG46IExpa2UgIlRocmVhZC1JZCAlZCwgW3N0YXRlXSBydW5u aW5nLCBkZXRhY2hlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIsIGRldGFj aGVkIikpOwogCi0gIHB0aGRiX3B0aHJlYWRfY2FuY2VscGVuZCAocGRfc2Vz c2lvbiwgcGR0aWQsICZjYW5jZWxwZW5kKTsKKyAgcHRoZGJfcHRocmVhZF9j YW5jZWxwZW5kIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJmNhbmNlbHBl bmQpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgY2FuY2Vs cGVuZCkKICAgICAvKiBpMThuOiBMaWtlICJUaHJlYWQtSWQgJWQsIFtzdGF0 ZV0gcnVubmluZywgY2FuY2VsIHBlbmRpbmciICovCiAgICAgYnVmLnByaW50 ZiAoXygiLCBjYW5jZWwgcGVuZGluZyIpKTsKZGlmZiAtLWdpdCBhL2dkYi9z b2xpYi1haXguYyBiL2dkYi9zb2xpYi1haXguYwppbmRleCBmNDgzZjU0ZGUx My4uNmJlODEwNjRlYmQgMTAwNjQ0Ci0tLSBhL2dkYi9zb2xpYi1haXguYwor KysgYi9nZGIvc29saWItYWl4LmMKQEAgLTYxOCw2ICs2MTgsMjAgQEAgc29s aWJfYWl4X2JmZF9vcGVuIChjb25zdCBjaGFyICpwYXRobmFtZSkKICAgICAg IGlmIChtZW1iZXJfbmFtZSA9PSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmplY3Rf YmZkLmdldCAoKSkpCiAJYnJlYWs7CiAKKyAgICAgIHN0ZDo6c3RyaW5nIHMg PSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSk7CisKKyAg ICAgIC8qIEZvciBldmVyeSBpbmZlcmlvciBhZnRlciBmaXJzdCBpbnQgYmZk IHN5c3RlbSB3ZSAKKwkgd2lsbCBoYXZlIHRoZSBwYXRobmFtZSBpbnN0ZWFk IG9mIHRoZSBtZW1iZXIgbmFtZQorCSByZWdpc3RlcmVkLiBIZW5jZSB0aGUg YmVsb3cgY29uZGl0aW9uIGV4aXN0cy4gICovCisKKyAgICAgIGlmIChzLmZp bmQgKCcoJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisJeworCSAgaW50IHBv cyA9IHMuZmluZCAoJygnKTsKKwkgIGludCBsZW4gPSBzLmZpbmQgKCcpJykg LSBzLmZpbmQgKCcoJyk7CisJICBpZiAocy5zdWJzdHIgKHBvcysxLCBsZW4t MSkgPT0gbWVtYmVyX25hbWUpIAorCSAgICByZXR1cm4gb2JqZWN0X2JmZDsK Kwl9CisKICAgICAgIG9iamVjdF9iZmQgPSBnZGJfYmZkX29wZW5yX25leHRf YXJjaGl2ZWRfZmlsZSAoYXJjaGl2ZV9iZmQuZ2V0ICgpLAogCQkJCQkJICAg ICBvYmplY3RfYmZkLmdldCAoKSk7CiAgICAgfQotLSAKMi4zMS4xCgo= --_004_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_--