From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2069.outbound.protection.outlook.com [40.107.220.69]) by sourceware.org (Postfix) with ESMTPS id 43758385840A for ; Sun, 24 Jul 2022 18:16:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 43758385840A ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KVRXvO1IUM2V7U+7mr3lD8fvM6/TVKjoi8KP+eW5V7faIFq/1nNV+vcXPjl3ldc2BaESE01C75OufR/mP4P2X0nM0YIC0mQ08tSm+08mzrpL5uds7HBSY8fGaTT9QnSoqmyloGIc2fel79a4XQsHv0sFwcX6uEJTzJDeJ03QfO+WihLpfsT6Tze1yaa88q1tM/cLqIaHER0r6nbXKegumcag7OWcX7TqCal3dIkJKN2sUAqSf4o+wHYFsLBai8nrGagHvsb2OGWv7JvcbsJpRJG8sWbgIpSOe5zjy222DpgQsR22a9iiu2xdfDx3+PUjsxks7DkuQ9FcE2xD1tkQ/A== 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=BO42aE3R4tg4eUDKmdB2HAJSAsAs3zXtw7TKktBX8Yw=; b=l8eIenNtr5uLreIthKMamkqbZ+3MdZKhtHKHqxZWgQiFbF+mUncYfrQyUhZXoOO29LUBYN0dj0m9zB/AzFwldh5XmjXfR5GsX+/FirtCk6yqSOYMFO3E5MExLNWP0NmOEIFW8R9gz/b3MMd8x/XScarrXQxOhj97F0QVonehluLM5ArOGicEVMqOx/L1FhD3ChBVinn5hw/qr3i0rsYtHk80Fln9/JO4B/Fi1w0v3YOXyHNQ7ULbDG2usF5uS/DspUaNSuuAFY2hnlI9bf70nq6IFR34NeWcUq4M6eKBrmDYmsylIFaXuohFe3tq/+xIbtTuIroJlEKIUZzv0QucvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none Received: from CO6PR12MB5491.namprd12.prod.outlook.com (2603:10b6:303:13b::8) by BN7PR12MB2756.namprd12.prod.outlook.com (2603:10b6:408:29::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.18; Sun, 24 Jul 2022 18:16:25 +0000 Received: from CO6PR12MB5491.namprd12.prod.outlook.com ([fe80::788e:63e2:12a7:855c]) by CO6PR12MB5491.namprd12.prod.outlook.com ([fe80::788e:63e2:12a7:855c%9]) with mapi id 15.20.5458.024; Sun, 24 Jul 2022 18:16:23 +0000 From: "Sharma, Alok Kumar" To: "gdb-patches@sourceware.org" CC: "George, Jini Susan" Subject: [PATCH] Enable Access to containing scope variables from nested inlined function Thread-Topic: [PATCH] Enable Access to containing scope variables from nested inlined function Thread-Index: AdifiG4v+p6eTZ/3TAWVx+6eDMBxZw== Date: Sun, 24 Jul 2022 18:16:23 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Enabled=true; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SetDate=2022-07-24T18:07:24Z; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Method=Privileged; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Name=Public-AIP 2.0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ActionId=2ab2b2ad-6dda-411b-9c7e-4fcd93ad4840; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ContentBits=1 msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_enabled: true msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_setdate: 2022-07-24T18:16:19Z msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_method: Privileged msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_name: Public-AIP 2.0 msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_siteid: 3dd8961f-e488-4e60-8e11-a82d994e183d msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_actionid: 6ef16c79-37da-431f-9f5a-11f33e6c8fb9 msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_contentbits: 0 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 710d2ed1-dfef-46c6-7aa8-08da6da09dda x-ms-traffictypediagnostic: BN7PR12MB2756:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: byu/kJwG4ogA9baEJZDOoMQw4SyVXV6cWYaxfksw1gXsniOwYhI/9oOU8sNpyEth+OC8AH3xHORYOvQ/mj3HpQkCEsR3B90YsyA3YYeSjOfavp/eEzBqS67HO17zsIYyqnji6HRN66eAQIo9rFmjiQCwA9GBPgUVQUFFpm5GxMQxcu5HgQ5Wt3zB/A/XypL9bZh4W1kYANBPricrP7zHhzrPkXYuwfLWpGyout3c5rgzFMHTB+MmV6DhqAhCkJ6MwbJwDgDL3qwfQE2WRX4o9ZFj3DS0X4KyQibevws649fcPbkkQbFzLzCrwr/b5uk5sJKZe0NcuWHlj9dZXD+sMZ2JnuVsz3vBgqZQcALdRbHtfI676k2Fkmi6w72YDMQQ29A+IYLlbYu6jNfLkC8rEn1/Nr/xsiITrhkTz/WYg0LA8cycq3hQ6ufkLgRJK/PlLslHTyFfthYb2Jqwu3GTLUJbvQn1NZUFq9MDL39NJDsqWjfC8SGaKwUlC8Sl/JHWJP2fWC9gnAoGXlVzBkCbRTAN5dgfcNpA9t8pDiKKsRaYpPQw5Bhv1VDngtgS06GZ8M7y906C5RmY6ipM/vJL4erFa7Ot8CL5nRVnM1H8G47NsBlxxJOQmQ5l1K4AX5xLJ50KPzzolAHt5lcptzBn5UJscLW0DQ/Jz8ETGLgJUo40f2OiLjkNgfGDf3Rc3w9JGACui1R8wfB2rRYHerLZvZp2F3ktyD9MtV6rXxsJG+SxsIDPR8Uh7HVneqRAF8jAsR6Nnmnvlvj227DnEplX89W3aFWBiTehQe3sTfMIysbBjUDxny322WGzpZFfyYVU x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR12MB5491.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(39860400002)(366004)(396003)(376002)(136003)(346002)(38070700005)(99936003)(316002)(38100700002)(83380400001)(4326008)(8676002)(76116006)(55016003)(64756008)(66446008)(66476007)(66946007)(66556008)(8936002)(52536014)(2906002)(41300700001)(6506007)(7696005)(186003)(71200400001)(478600001)(6916009)(122000001)(9686003)(86362001)(5660300002)(33656002)(26005); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?2FMyESE+y6xFBgn7OTGfg+ipdaDf0XMfmyU50LIDTDA/WUDzZUseD6vIlNYr?= =?us-ascii?Q?eYyWo78tc7NnTgzR47UFpTfREMAdKXURwkDZIBeoXm/wwXT0+Al7fH+59S84?= =?us-ascii?Q?vnDQZTxpQGmzGMuT3tUVyKO06mehutYrvSPXe+z/ilC5kIXpRVgP/asPMUkg?= =?us-ascii?Q?HWOk3TW4iHndj2wU+W6OnXrOzilR9DSoVqyh+LdD6Pywo2rtDblIakylkij0?= =?us-ascii?Q?mhdhhTWepOQKQemOo+5wqlNXVr2+a3SepjC3/ZDGma+d7lGQOqV3Ta0vDf81?= =?us-ascii?Q?Wpwqba/kiq7fm6A0i5ntVtpbWW/PYL8ROrPB1oWHINJqkKlNz4QUIz8rXJ4a?= =?us-ascii?Q?M3HtfRWabkuV73MRLb3Bg88ZwmmL1Zr7qc80I2VF4jpuJMuxai6U+G4kkSD7?= =?us-ascii?Q?pWf/nFchTGnNrU24MSIYFZ5S7DxZJq0FmUuNpQ7ICYzgta5AVUUFN3JmPZj/?= =?us-ascii?Q?38G6Wy8gL75Ea13KMgNeru0jKrvAqXNFvXpE2mEmJOag0EB0fYt6rc9Zl2mE?= =?us-ascii?Q?fDSx9H0FCc/TywyOd23KMjlNbT09B/LvGKjWY07SwUlR3CHyx0JxbxgS75AN?= =?us-ascii?Q?WPtIIzjhLwJ1Ih4tDrRoWYYwgG6cnWfXT4iS0/4+CbMDdT+fHcytKQAXASdf?= =?us-ascii?Q?W4/ne7h2dhUGS/IC8cwGGljfTcGzGrXJ/em92TPfmp7NSB7swkDUewQlJXXy?= =?us-ascii?Q?tT3WFcA/g+X8T/qZD7F1tMkboISD7Tpr2AgyTYkfY4YKrsNpwaa13xdQ3nz3?= =?us-ascii?Q?AE0xJwzRYrUgFulQbx2C4pb7S3W/sGR9S9vJm8mxpEc8XbwhgIxm7q/WWinQ?= =?us-ascii?Q?2OMExzLzGou04jtKffUrFVLEyioNsg5i8r5wBI8HIGZzvoqn+KqeO7Gwb0h7?= =?us-ascii?Q?5UfxgYfcM6/Inew+rcR9+AQrfz3XhYTpK6aS69CN5ktH8D+JBl1JNwOq9Zi3?= =?us-ascii?Q?D3WQFwg6fs0mzsrVDZCFTVUYcNDVFNcB2BuSL/J3ec/VQyPn9ZC6UkJRqI0M?= =?us-ascii?Q?eaPaFoyUsHJX36fdKmXvz2dgUNSr0r7xgxYLYJbAAXJep1ItfJu/2xfcz7sZ?= =?us-ascii?Q?dkSwYOPEk5Vkp1CZtZTBeS0FqqdwJr0i6kadMj5oy7flIgNd5G/UP+9YtveH?= =?us-ascii?Q?sScTqBPWpdXOMCsyFkr4IAAek296UjGzoI9GJeUPUkJSpJGrNwV715OadIM8?= =?us-ascii?Q?3gtpD1sHZLmEjcOxkFXmvLbi8yh+Wzlkh5bXUQl7lfL5yt3J3bALkjklZK5L?= =?us-ascii?Q?ZtmpryiUyUgqO29RfY7mi/2hUZVQqM6UlYrMDp294A7tBpQoiiz665SgBEMQ?= =?us-ascii?Q?97oyWlooz2sYA+Wg6nvgSAP3yBItay9zsOLoby0On/k8AzNk02QfrT1myxWz?= =?us-ascii?Q?ANwrQHvvxYhoZe57I9P2RrC33JfMIqSiGkgjfLDhY7JHY1DDEo4AbMEtogUL?= =?us-ascii?Q?2yzt0YXPNhCCPvw+CjWrAKR/YTaOGsTnYJn6tfVQoRfzvCwvTxmAZi6z7Kns?= =?us-ascii?Q?NNlW+7ceOmdJKfzrsmGJe/knhu0PFwD9gp17TRvnlud3CZM3QrAXwE11on1S?= =?us-ascii?Q?kjn2hzyvgilx8EfT8Cv3LU3D/qlow5JAkWYrnHhh?= Content-Type: multipart/mixed; boundary="_002_CO6PR12MB54919D329BC9BCAC5EF7D4089E929CO6PR12MB5491namp_" MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR12MB5491.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 710d2ed1-dfef-46c6-7aa8-08da6da09dda X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jul 2022 18:16:23.6726 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: tRJO0u47oWICe7dMY9WRK024D2tas1w4gXpBvweNyzVqbsXY6c8UNBfmFCl1aqJgvXmWO/mT7aXkBL9hVVromw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR12MB2756 X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, 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 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: , X-List-Received-Date: Sun, 24 Jul 2022 18:16:41 -0000 --_002_CO6PR12MB54919D329BC9BCAC5EF7D4089E929CO6PR12MB5491namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [Public] Hi all, Currently inlined functions are barred from accessing any containing local scope variable, which makes sense for global scoped functions. The gcc compiler supports nested (local scoped) function for end user, the Clang compiler does not allow nested function for end user but compiler itself generates such artificial functions internally ( in case of Openmp). General barrier by gdb reduces debug experience, current patch enhances debugging in such cases. Please consider below program --------------------- 1 #include 2 3 __attribute__((always_inline)) inline int outer_fun (int arg) { 4 // Inlined at (A) or not, this function should not have access to 5 // variables caller_fun_var, caller_fun_other_var in non containi= ng 6 // scoped function caller_fun. 7 int outer_local =3D 5; 8 outer_local =3D arg; 9 printf("Value of outer_local =3D %d\n", outer_local); 10 } 11 12 void caller_fun() { 13 static int caller_fun_var =3D 9; 14 volatile int caller_fun_other_var =3D 7; 15 __attribute__((always_inline)) inline void called_fun (int arg) { 16 // Inlined at (B) or not, this function should have access to 17 // containing scope variables caller_fun_var, caller_fun_other_va= r 18 int local =3D 0; 19 local =3D arg; 20 printf("Value of local =3D %d\n", local); 21 } 22 23 outer_fun(caller_fun_other_var); // <--- (A) 24 called_fun(caller_fun_other_var); // <--- (B) 25 return; 26 } 27 28 int main() { 29 caller_fun(); 30 return 0; 31 } ----------------------- Which produces DWARF as below ----------------------- 0x00000094: DW_TAG_subprogram DW_AT_name ("main") 0x000000b2: DW_TAG_subprogram DW_AT_name ("caller_fun") 0x000000d0: DW_TAG_variable DW_AT_name ("caller_fun_var") 0x000000dd: DW_TAG_variable DW_AT_name ("caller_fun_other_var") 0x000000ec: DW_TAG_subprogram DW_AT_name ("called_fun") 0x00000112: DW_TAG_inlined_subroutine DW_AT_abstract_origin (0x00000169 "outer_fun") 0x0000013f: DW_TAG_inlined_subroutine DW_AT_abstract_origin (0x000000ec "called_fun") 0x00000169: DW_TAG_subprogram DW_AT_external (true) DW_AT_name ("outer_fun") ----------------------- Please note concrete instances of abstract functions "called_fun" (0x000000= ec) and "outer_fun" (0x00000169) are DIE:0x00000112 and DIE:0x0000013f. Both have DWARF tag DW_TAG_inlined_subroutine. To stop "outer_fun" (0x00000112) from accessing scope of "caller_fun", gdb generalize barrier for DW_TAG_inlined_subroutine. GDB should instead check DW_AT_abstract_origin attribute to check actual sc= ope of corresponding abstract functions and allow "called_fun" to access scope = of "caller_fun". Current patch stores this information into data structure DIE_BLOCK and use= s that to compute actual containing scope. Please review the patch and let me know your comments. Regards, Alok= --_002_CO6PR12MB54919D329BC9BCAC5EF7D4089E929CO6PR12MB5491namp_ Content-Type: application/octet-stream; name="0001-Enable-Access-to-containing-scope-variables-from-nes.patch" Content-Description: 0001-Enable-Access-to-containing-scope-variables-from-nes.patch Content-Disposition: attachment; filename="0001-Enable-Access-to-containing-scope-variables-from-nes.patch"; size=25669; creation-date="Sun, 24 Jul 2022 18:14:59 GMT"; modification-date="Sun, 24 Jul 2022 18:16:22 GMT" Content-Transfer-Encoding: base64 RnJvbSA2YWUxYTM3ZmQzM2I1MGM1MTlhNzhlMjM0NjVkODQ0YzIyZmQ0MDMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbG9rIEt1bWFyIFNoYXJtYSA8QWxva0t1bWFyLlNoYXJtYUBh bWQuY29tPgpEYXRlOiBTdW4sIDI0IEp1bCAyMDIyIDE1OjQ0OjA0ICswNTMwClN1YmplY3Q6IFtQ QVRDSF0gRW5hYmxlIEFjY2VzcyB0byBjb250YWluaW5nIHNjb3BlIHZhcmlhYmxlcyBmcm9tIG5l c3RlZAogaW5saW5lZCBmdW5jdGlvbgoKQ3VycmVudGx5IGlubGluZWQgZnVuY3Rpb25zIGFyZSBi YXJyZWQgZnJvbSBhY2Nlc3NpbmcgYW55IGNvbnRhaW5pbmcKbG9jYWwgc2NvcGUgdmFyaWFibGUs IHdoaWNoIG1ha2VzIHNlbnNlIGZvciBnbG9iYWwgc2NvcGVkIGZ1bmN0aW9ucy4KClRoZSBnY2Mg Y29tcGlsZXIgc3VwcG9ydHMgbmVzdGVkIChsb2NhbCBzY29wZWQpIGZ1bmN0aW9uIGZvciBlbmQg dXNlciwKdGhlIENsYW5nIGNvbXBpbGVyIGRvZXMgbm90IGFsbG93IG5lc3RlZCBmdW5jdGlvbiBm b3IgZW5kIHVzZXIgYnV0CmNvbXBpbGVyIGl0c2VsZiBnZW5lcmF0ZXMgc3VjaCBhcnRpZmljaWFs IGZ1bmN0aW9ucyBpbnRlcm5hbGx5ICggaW4KY2FzZSBvZiBPcGVuTVApLiBHZW5lcmFsIGJhcnJp ZXIgYnkgZ2RiIHJlZHVjZXMgZGVidWcgZXhwZXJpZW5jZSwKY3VycmVudCBwYXRjaCBlbmhhbmNl cyBkZWJ1Z2dpbmcgaW4gc3VjaCBjYXNlcy4KClBsZWFzZSBjb25zaWRlciBiZWxvdyBwcm9ncmFt Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIDEgICNpbmNsdWRlIDxzdGRpby5oPgogICAgIDIK ICAgICAzICBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5saW5lIGludCBvdXRlcl9m dW4gKGludCBhcmcpIHsKICAgICA0ICAgIC8vIElubGluZWQgYXQgKEEpIG9yIG5vdCwgdGhpcyBm dW5jdGlvbiBzaG91bGQgbm90IGhhdmUgYWNjZXNzIHRvCiAgICAgNSAgICAvLyB2YXJpYWJsZXMg Y2FsbGVyX2Z1bl92YXIsIGNhbGxlcl9mdW5fb3RoZXJfdmFyIGluIG5vbiBjb250YWluaW5nCiAg ICAgNiAgICAvLyBzY29wZWQgZnVuY3Rpb24gY2FsbGVyX2Z1bi4KICAgICA3ICAgIGludCBvdXRl cl9sb2NhbCA9IDU7CiAgICAgOCAgICBvdXRlcl9sb2NhbCA9IGFyZzsKICAgICA5ICAgIHByaW50 ZigiVmFsdWUgb2Ygb3V0ZXJfbG9jYWwgPSAlZFxuIiwgb3V0ZXJfbG9jYWwpOwogICAgMTAgIH0K ICAgIDExCiAgICAxMiAgdm9pZCBjYWxsZXJfZnVuKCkgewogICAgMTMgICAgc3RhdGljIGludCBj YWxsZXJfZnVuX3ZhciA9IDk7CiAgICAxNCAgICB2b2xhdGlsZSBpbnQgY2FsbGVyX2Z1bl9vdGhl cl92YXIgPSA3OwogICAgMTUgICAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGlubGlu ZSB2b2lkIGNhbGxlZF9mdW4gKGludCBhcmcpIHsKICAgIDE2ICAgICAgLy8gSW5saW5lZCBhdCAo Qikgb3Igbm90LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGFjY2VzcyB0bwogICAgMTcgICAg Ly8gY29udGFpbmluZyBzY29wZSB2YXJpYWJsZXMgY2FsbGVyX2Z1bl92YXIsIGNhbGxlcl9mdW5f b3RoZXJfdmFyCiAgICAxOCAgICAgIGludCBsb2NhbCA9IDA7CiAgICAxOSAgICAgIGxvY2FsID0g YXJnOwogICAgMjAgICAgICBwcmludGYoIlZhbHVlIG9mIGxvY2FsID0gJWRcbiIsIGxvY2FsKTsK ICAgIDIxICAgIH0KICAgIDIyCiAgICAyMyAgICBvdXRlcl9mdW4oY2FsbGVyX2Z1bl9vdGhlcl92 YXIpOyAgLy8gPC0tLSAoQSkKICAgIDI0ICAgIGNhbGxlZF9mdW4oY2FsbGVyX2Z1bl9vdGhlcl92 YXIpOyAvLyA8LS0tIChCKQogICAgMjUgICAgcmV0dXJuOwogICAgMjYgIH0KICAgIDI3CiAgICAy OCAgaW50IG1haW4oKSB7CiAgICAyOSAgICBjYWxsZXJfZnVuKCk7CiAgICAzMCAgICByZXR1cm4g MDsKICAgIDMxICB9Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldoaWNoIHByb2R1Y2VzIERXQVJG IGFzIGJlbG93Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjB4MDAwMDAwOTQ6ICAgRFdfVEFHX3N1 YnByb2dyYW0KICAgICAgICAgICAgICAgIERXX0FUX25hbWUgICAgICAoIm1haW4iKQoweDAwMDAw MGIyOiAgIERXX1RBR19zdWJwcm9ncmFtCiAgICAgICAgICAgICAgICBEV19BVF9uYW1lICAgICAg KCJjYWxsZXJfZnVuIikKMHgwMDAwMDBkMDogICAgIERXX1RBR192YXJpYWJsZQogICAgICAgICAg ICAgICAgICBEV19BVF9uYW1lICAgICgiY2FsbGVyX2Z1bl92YXIiKQoweDAwMDAwMGRkOiAgICAg RFdfVEFHX3ZhcmlhYmxlCiAgICAgICAgICAgICAgICAgIERXX0FUX25hbWUgICAgKCJjYWxsZXJf ZnVuX290aGVyX3ZhciIpCjB4MDAwMDAwZWM6ICAgICBEV19UQUdfc3VicHJvZ3JhbQogICAgICAg ICAgICAgICAgICBEV19BVF9uYW1lICAgICgiY2FsbGVkX2Z1biIpCjB4MDAwMDAxMTI6ICAgICBE V19UQUdfaW5saW5lZF9zdWJyb3V0aW5lCiAgICAgICAgICAgICAgICAgIERXX0FUX2Fic3RyYWN0 X29yaWdpbiAoMHgwMDAwMDE2OSAib3V0ZXJfZnVuIikKMHgwMDAwMDEzZjogICAgIERXX1RBR19p bmxpbmVkX3N1YnJvdXRpbmUKICAgICAgICAgICAgICAgICAgRFdfQVRfYWJzdHJhY3Rfb3JpZ2lu ICgweDAwMDAwMGVjICJjYWxsZWRfZnVuIikKMHgwMDAwMDE2OTogICBEV19UQUdfc3VicHJvZ3Jh bQogICAgICAgICAgICAgICAgRFdfQVRfZXh0ZXJuYWwgICh0cnVlKQogICAgICAgICAgICAgICAg RFdfQVRfbmFtZSAgICAgICgib3V0ZXJfZnVuIikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUGxl YXNlIG5vdGUgY29uY3JldGUgaW5zdGFuY2VzIG9mIGFic3RyYWN0IGZ1bmN0aW9ucyAiY2FsbGVk X2Z1biIgKDB4MDAwMDAwZWMpCmFuZCAib3V0ZXJfZnVuIiAoMHgwMDAwMDE2OSkgYXJlIERJRTow eDAwMDAwMTEyIGFuZCBESUU6MHgwMDAwMDEzZi4gQm90aApoYXZlIERXQVJGIHRhZyBEV19UQUdf aW5saW5lZF9zdWJyb3V0aW5lLgpUbyBzdG9wICJvdXRlcl9mdW4iICgweDAwMDAwMTEyKSBmcm9t IGFjY2Vzc2luZyBzY29wZSBvZiAiY2FsbGVyX2Z1biIsIGdkYgpnZW5lcmFsaXplIGJhcnJpZXIg Zm9yIERXX1RBR19pbmxpbmVkX3N1YnJvdXRpbmUuCkdEQiBzaG91bGQgaW5zdGVhZCBjaGVjayBE V19BVF9hYnN0cmFjdF9vcmlnaW4gYXR0cmlidXRlIHRvIGNoZWNrIGFjdHVhbCBzY29wZQpvZiBj b3JyZXNwb25kaW5nIGFic3RyYWN0IGZ1bmN0aW9ucyBhbmQgYWxsb3cgImNhbGxlZF9mdW4iIHRv IGFjY2VzcyBzY29wZSBvZgoiY2FsbGVyX2Z1biIuCgpDdXJyZW50IHBhdGNoIHN0b3JlcyB0aGlz IGluZm9ybWF0aW9uIGludG8gZGF0YSBzdHJ1Y3R1cmUgRElFX0JMT0NLIGFuZCB1c2VzCnRoYXQg dG8gY29tcHV0ZSBhY3R1YWwgY29udGFpbmluZyBzY29wZS4KCkNoYW5nZS1JZDogSTdiOTE3OTE1 N2ZjMDUxM2IzOTkwOGUzOWM5ZmJjNzQwYWMxYTg5NDMKLS0tCiBnZGIvYnVpbGRzeW0uYyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNDggKysrKysrKysrKysrKysrKysKIGdkYi9i dWlsZHN5bS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNSArKysKIGdkYi9k d2FyZjIvcmVhZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0MyArKysrLQogZ2Ri L3N5bXRhYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICstCiBnZGIv c3ltdGFiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTQgKysKIGdkYi90 ZXN0c3VpdGUvZ2RiLmJhc2UvbmVzdGVkX2lubGluZWRfZnVuLmMgICB8ICA5MiArKysrKysrKysr KwogZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9uZXN0ZWRfaW5saW5lZF9mdW4uZXhwIHwgMTU0ICsr KysrKysrKysrKysrKysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9vbXAtdGFzay5jICAg ICAgICAgIHwgIDE4ICsrCiBnZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL29tcC10YXNrLmV4cCAg ICAgICAgfCAgIDggKy0KIDkgZmlsZXMgY2hhbmdlZCwgNTA4IGluc2VydGlvbnMoKyksIDYgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9uZXN0 ZWRfaW5saW5lZF9mdW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLmJh c2UvbmVzdGVkX2lubGluZWRfZnVuLmV4cAoKZGlmZiAtLWdpdCBhL2dkYi9idWlsZHN5bS5jIGIv Z2RiL2J1aWxkc3ltLmMKaW5kZXggNjVjMmFjNWFmZjAuLjA1OGMwMDVmZDAyIDEwMDY0NAotLS0g YS9nZGIvYnVpbGRzeW0uYworKysgYi9nZGIvYnVpbGRzeW0uYwpAQCAtMzEsNiArMzEsOCBAQAog I2luY2x1ZGUgIm1hY3JvdGFiLmgiCiAjaW5jbHVkZSAiZGVtYW5nbGUuaCIJCS8qIE5lZWRlZCBi eSBTWU1CT0xfSU5JVF9ERU1BTkdMRURfTkFNRS4gICovCiAjaW5jbHVkZSAiYmxvY2suaCIKKyNp bmNsdWRlICJkd2FyZjIvYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiZHdhcmYyL2RpZS5oIgogI2lu Y2x1ZGUgImNwLXN1cHBvcnQuaCIKICNpbmNsdWRlICJkaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSA8 YWxnb3JpdGhtPgpAQCAtNDksNiArNTEsMjUgQEAgc3RydWN0IHBlbmRpbmdfYmxvY2sKICAgICBz dHJ1Y3QgYmxvY2sgKmJsb2NrOwogICB9OwogCisvKiBEYXRhIHN0cnVjdHVyZSB0byBjb250YWlu IERJRSwgZ2VuZXJhdGVkIEJMT0NLIGZvciBpdCBhbmQgaW4gY2FzZQorICAgRElFIGlzIGlubGlu ZWQgaXRzIE9SSUdfRElFIHdoaWNoIGlzIERJRSByZXByZXNlbnRlZCBieSB0aGUKKyAgIERXX0FU X2Fic3RyYWN0X29yaWdpbiBhdHRyaWJ1dGUuICAqLworCitzdHJ1Y3QgZGllX2Jsb2NrCisgIHsK KyAgICBzdHJ1Y3QgZGllX2luZm8gKmRpZTsKKyAgICBzdHJ1Y3QgZGllX2luZm8gKm9yaWdfZGll OworICAgIHN0cnVjdCBibG9jayAqYmxvY2s7CisgIH07CisKKy8qIExpc3Qgb2YgRElFX0JMT0NL cyAgICovCisKK3N0cnVjdCBkaWVfYmxvY2tfbGlzdAorICB7CisgICAgc3RydWN0IGRpZV9ibG9j a19saXN0ICpuZXh0OworICAgIHN0cnVjdCBkaWVfYmxvY2sgbWVtOworICB9OworCiBidWlsZHN5 bV9jb21wdW5pdDo6YnVpbGRzeW1fY29tcHVuaXQgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlXywK IAkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKmNvbXBf ZGlyXywKQEAgLTE5MSw2ICsyMTIsMjYgQEAgYnVpbGRzeW1fY29tcHVuaXQ6OnJlY29yZF9wZW5k aW5nX2Jsb2NrIChzdHJ1Y3QgYmxvY2sgKmJsb2NrLAogICAgIH0KIH0KIAorLyogUmVjb3JkIERJ RV9CTE9DSyAoRElFLCBPUklHX0RJRSwgQkxPQ0spIGZvciBhbGwgdGhlIGJsb2NrcyBnZW5lcmF0 ZWQKKyAgIGFuZCBpbnNlcnQgaXQgYXQgdGhlIHN0YXJ0IGluIHRoZSBsaXN0IG1fZGllX2Jsb2Nr X2xpc3QuICAqLworCit2b2lkCitidWlsZHN5bV9jb21wdW5pdDo6cmVjb3JkX2RpZV9ibG9jayAo c3RydWN0IGRpZV9pbmZvICpkaWUsCisJCQkgICAgICAgICAgICBzdHJ1Y3QgZGllX2luZm8gKm9y aWdfZGllLAorCQkJICAgICAgICAgICAgc3RydWN0IGJsb2NrICpibG9jaykKK3sKKyAgc3RydWN0 IGRpZV9ibG9ja19saXN0KiBwZGllX2Jsb2NrOworCisgIHBkaWVfYmxvY2sgPSBYT0JORVcgKCZt X2RpZV9ibG9ja19vYnN0YWNrLCBzdHJ1Y3QgZGllX2Jsb2NrX2xpc3QpOworCisgIHBkaWVfYmxv Y2stPm1lbS5kaWUgPSBkaWU7CisgIHBkaWVfYmxvY2stPm1lbS5vcmlnX2RpZSA9IG9yaWdfZGll OworICBwZGllX2Jsb2NrLT5tZW0uYmxvY2sgPSBibG9jazsKKyAgcGRpZV9ibG9jay0+bmV4dCA9 IG1fZGllX2Jsb2NrX2xpc3Q7CisKKyAgbV9kaWVfYmxvY2tfbGlzdCA9IHBkaWVfYmxvY2s7Cit9 CisKIC8qIFRha2Ugb25lIG9mIHRoZSBsaXN0cyBvZiBzeW1ib2xzIGFuZCBtYWtlIGEgYmxvY2sg ZnJvbSBpdC4gIEtlZXAKICAgIHRoZSBvcmRlciB0aGUgc3ltYm9scyBoYXZlIGluIHRoZSBsaXN0 IChyZXZlcnNlZCBmcm9tIHRoZSBpbnB1dAogICAgZmlsZSkuICBQdXQgdGhlIGJsb2NrIG9uIHRo ZSBsaXN0IG9mIHBlbmRpbmcgYmxvY2tzLiAgKi8KQEAgLTQ4Myw2ICs1MjQsMTA5IEBAIGJ1aWxk c3ltX2NvbXB1bml0OjptYWtlX2Jsb2NrdmVjdG9yICgpCiAKICAgcmV0dXJuIChibG9ja3ZlY3Rv cik7CiB9CisKKy8qICBDb21wYXJlIHR3byBESUVfQkxPQ0tzLiAgVGhpcyBpcyB1c2VkIHRvIHNv cnQgRElFX0JMT0NLIGFycmF5LiAgKi8KKworc3RhdGljIGludAorY29tcGFyZV9kaWUgKGNvbnN0 IHZvaWQgKmxwLCBjb25zdCB2b2lkICpycCkKK3sKKyAgc3RydWN0IGRpZV9ibG9jayAqbGVmdCA9 IChzdHJ1Y3QgZGllX2Jsb2NrICopIGxwOworICBzdHJ1Y3QgZGllX2Jsb2NrICpyaWdodCA9IChz dHJ1Y3QgZGllX2Jsb2NrICopIHJwOworCisgIHJldHVybiAoaW50KSBsZWZ0LT5kaWUtPnNlY3Rf b2ZmIC0gKGludCkgcmlnaHQtPmRpZS0+c2VjdF9vZmY7Cit9CisKKworLyogIFRoaXMgZnVuY3Rp b24gc2V0cyBtX3Njb3BlYmxvY2sgZmllbGQgb2YgU1lNQk9MJ3MgZm9yIElOTElORUQgZnVuY3Rp b25zLiAgKi8KKwordm9pZAorYnVpbGRzeW1fY29tcHVuaXQ6OmZpbmlzaF9pbmxpbmVkX3Njb3Bl ICgpCit7CisgIHN0cnVjdCBkaWVfYmxvY2tfbGlzdCAqbmV4dDsKKyAgc3RydWN0IGRpZV9ibG9j ayAqZGllX2Jsb2NrX2FyciA9IG51bGxwdHI7CisgIHN0cnVjdCBkaWVfYmxvY2sga2V5LCAqcGFy ZW50X2RpZV9ibG9jaywgKnNjb3BlX2RpZV9ibG9jazsKKyAgc3RydWN0IHN5bWJvbCAqc3ltOwor ICBzdHJ1Y3QgYmxvY2sgKmJsb2NrMTsKKyAgaW50IGkgPSAwLCBjb3VudCA9IDA7CisKKyAgLyog Q291bnQgbnVtYmVyIG9mIGVsZW1lbnRzIGluIERJRV9CTE9DS19MSVNUIG1fZGllX2Jsb2NrX2xp c3QuICAqLworCisgIGZvciAobmV4dCA9IG1fZGllX2Jsb2NrX2xpc3QsIGkgPSAwOyBuZXh0OyBu ZXh0ID0gbmV4dC0+bmV4dCwgaSsrKQorICAgIHsKKyAgICB9CisKKyAgY291bnQgPSBpOworCisg IC8qIENvcHkgZWxlbWVudHMgdG8gdGhlIGxvY2FsIGFycmF5IGRpZV9ibG9ja19hcnIuICAqLwor CisgIGRpZV9ibG9ja19hcnIgPSBYT0JORVdWRUMgKCZtX2RpZV9ibG9ja19vYnN0YWNrLCBzdHJ1 Y3QgZGllX2Jsb2NrLCBjb3VudCk7CisKKyAgZm9yIChuZXh0ID0gbV9kaWVfYmxvY2tfbGlzdCwg aSA9IDA7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0LCBpKyspCisgICAgeworICAgICAgZGllX2Js b2NrX2FycltpXSA9IG5leHQtPm1lbTsKKyAgICB9CisKKyAgZnJlZV9kaWVfYmxvY2sgKCk7CisK KyAgLyogU29ydCBhcnJheSBkaWVfYmxvY2tfYXJyIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuICAq LworCisgIHFzb3J0IChkaWVfYmxvY2tfYXJyLCBjb3VudCwgc2l6ZW9mKHN0cnVjdCBkaWVfYmxv Y2spLCBjb21wYXJlX2RpZSk7CisKKyAgLyogTGV0J3MgaXRlcmF0ZSBvdmVyIGFsbCB0aGUgZGll LWJsb2NrIHBhaXJzLiBBbmQgZmluZCBpdHMgb3JpZ2luYWwKKyAgICAgbGV4aWNhbCBzY29wZS4g ICovCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGJsb2NrMSA9 IGRpZV9ibG9ja19hcnJbaV0uYmxvY2s7CisgICAgICBzeW0gPSBibG9jazEtPmZ1bmN0aW9uKCk7 CisKKyAgICAgIC8qIFNraXAgdGhpcyBpZiwgdGhpcyBibG9jayBpcyBub3QgZm9yIGZ1bmN0aW9u LCBvcgorICAgICAgICAgdGhpcyBibG9jayBpcyBub3QgaW5saW5lZC4gKi8KKyAgICAgIGlmICgh c3ltIHx8ICFkaWVfYmxvY2tfYXJyW2ldLm9yaWdfZGllKQorICAgICAgICBjb250aW51ZTsKKwor ICAgICAgLyogTGV0J3MgZmluZCB3aGV0aGVyIGN1cnJlbnQgZGllJ3MgcGFyZW50IGRpZSBoYXMg Z2VuZXJhdGVkIGJsb2NrLiovCisgICAgICBrZXkuZGllID0gZGllX2Jsb2NrX2FycltpXS5kaWUt PnBhcmVudDsKKyAgICAgIHBhcmVudF9kaWVfYmxvY2sgPSAoc3RydWN0IGRpZV9ibG9jayopIGJz ZWFyY2ggKCZrZXksIGRpZV9ibG9ja19hcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvdW50LCBzaXplb2YgKHN0cnVjdCBkaWVfYmxvY2spLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlX2RpZSk7CisKKyAg ICAgIGlmIChwYXJlbnRfZGllX2Jsb2NrICYmIHBhcmVudF9kaWVfYmxvY2stPm9yaWdfZGllKQor ICAgICAgICB7CisgICAgICAgICAgLyogSWYgY3VycmVudCBkaWUgYW5kIGl0cyBwYXJlbnQgYm90 aCBoYXZlIG9yaWduIGRpZSdzIChib3RoIGFyZQorICAgICAgICAgICAgIGlubGluZWQgYW5kIHRo b3NlIG9yaWdpbiAoYWJzdHJhY3QgZnVuY3Rpb25zKSBhcmUgYWxzbyBoYXZpbmcgc2FtZQorICAg ICAgICAgICAgIGNoaWxkIHBhcmVudCByZWxhdGlvbnNoaXAuIFRoaXMgaXMgdGhlIGNhc2Ugd2hl biBjYWxsZXIgaW5saW5lZAorICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIGFsc28gbGV4aWNhbGx5 IGNvbnRhaW5pbmcgY2FsbGVkIGZ1bmN0aW9uLiAgKi8KKyAgICAgICAgICBpZiAoZGllX2Jsb2Nr X2FycltpXS5vcmlnX2RpZS0+cGFyZW50ID09IHBhcmVudF9kaWVfYmxvY2stPm9yaWdfZGllKQor ICAgICAgICAgICAgc3ltLT5zZXRfc2NvcGVibG9jayAoKHN0cnVjdCBibG9jayAqKSBibG9jazEt PnN1cGVyYmxvY2soKSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg ICAgICAvKiBBYnN0cmFjdCBmdW5jdGlvbnMgdXN1YWxseSBkbyBub3QgZ2VuZXJhdGUgYmxvY2ss IGJ1dCBsZXQgdXMgbm90CisgICAgICAgICAgICAgIGFzc3VtZSB0aGF0IGFuZCBzdGFydCBzZWFy Y2hpbmcgZnJvbSB0aGUgRElFIGFuZCBsZXQncyBnbyB0aHJvdWdoCisgICAgICAgICAgICAgIHRo ZSBwYXJlbnQgY2hhaW4sIHRyeWluZyB0byBmaW5kIGEgRElFIHdoaWNoIHJlc3VsdHMgaW4gYSBi bG9jaworICAgICAgICAgICAgICBiZWluZyBjcmVhdGVkLiAgKi8KKyAgICAgICAgICAgc3RydWN0 IGRpZV9pbmZvICpzY29wZV9kaWUgPSBkaWVfYmxvY2tfYXJyW2ldLm9yaWdfZGllOworICAgICAg ICAgICBzY29wZV9kaWVfYmxvY2sgPSBudWxscHRyOworICAgICAgICAgICB3aGlsZSAoc2NvcGVf ZGllKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGtleS5kaWUgPSBzY29wZV9kaWU7 CisgICAgICAgICAgICAgICBzY29wZV9kaWVfYmxvY2sgPSAoc3RydWN0IGRpZV9ibG9jayopIGJz ZWFyY2ggKCZrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaWVfYmxvY2tfYXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50 LCBzaXplb2YgKHN0cnVjdCBkaWVfYmxvY2spLCBjb21wYXJlX2RpZSk7CisgICAgICAgICAgICAg ICBpZiAoc2NvcGVfZGllX2Jsb2NrKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgIHNjb3BlX2RpZSA9IHNjb3BlX2RpZS0+cGFyZW50OworICAgICAgICAgICAgIH0KKwor ICAgICAgICAgICBpZiAoc2NvcGVfZGllX2Jsb2NrKQorICAgICAgICAgICAgIHN5bS0+c2V0X3Nj b3BlYmxvY2sgKChzdHJ1Y3QgYmxvY2sgKikgc2NvcGVfZGllX2Jsb2NrLT5ibG9jayk7CisgICAg ICAgIH0KKyAgICB9CisKKyAgZGllX2Jsb2NrX2FyciA9IG51bGxwdHI7CisgIG1fZGllX2Jsb2Nr X29ic3RhY2suY2xlYXIgKCk7Cit9CisKIAwKIC8qIFN0YXJ0IHJlY29yZGluZyBpbmZvcm1hdGlv biBhYm91dCBzb3VyY2UgY29kZSB0aGF0IGNhbWUgZnJvbSBhbgogICAgaW5jbHVkZWQgKG9yIG90 aGVyd2lzZSBtZXJnZWQtaW4pIHNvdXJjZSBmaWxlIHdpdGggYSBkaWZmZXJlbnQKQEAgLTg4Miw2 ICsxMDI2LDEwIEBAIGJ1aWxkc3ltX2NvbXB1bml0OjplbmRfY29tcHVuaXRfc3ltdGFiX3dpdGhf YmxvY2t2ZWN0b3IKIAkJCSAxLCBleHBhbmRhYmxlKTsKICAgYmxvY2t2ZWN0b3IgPSBtYWtlX2Js b2NrdmVjdG9yICgpOwogCisgIC8qIEZpbmQgYW5kIHNldCB0aGUgc2VhcmNoIHNjb3BlIG9mIGNv bmNyZXRlIGlubGluZWQgaW5zdGFuY2VzIHRvIHRoZQorICAgICBjb3JyZXNwb25kaW5nIGFic3Ry YWN0IGluc3RhbmNlLiAgKi8KKyAgZmluaXNoX2lubGluZWRfc2NvcGUoKTsKKwogICAvKiBSZWFk IHRoZSBsaW5lIHRhYmxlIGlmIGl0IGhhcyB0byBiZSByZWFkIHNlcGFyYXRlbHkuCiAgICAgIFRo aXMgaXMgb25seSB1c2VkIGJ5IHhjb2ZmcmVhZC5jLiAgKi8KICAgaWYgKG1fb2JqZmlsZS0+c2Yt PnN5bV9yZWFkX2xpbmV0YWJsZSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvZ2RiL2J1aWxkc3ltLmgg Yi9nZGIvYnVpbGRzeW0uaAppbmRleCAyYWQwMDMzNjI2OS4uNmNiYjMzZmE2YzYgMTAwNjQ0Ci0t LSBhL2dkYi9idWlsZHN5bS5oCisrKyBiL2dkYi9idWlsZHN5bS5oCkBAIC0xOTAsNiArMTkwLDIw IEBAIHN0cnVjdCBidWlsZHN5bV9jb21wdW5pdAogICAgIG1fcGVuZGluZ19ibG9ja3MgPSBudWxs cHRyOwogICB9CiAKKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZGlzY2FyZCBhbnkg ZGllX2Jsb2NrLiAgKi8KKworICB2b2lkIGZyZWVfZGllX2Jsb2NrICgpCisgIHsKKyAgICBtX2Rp ZV9ibG9ja19vYnN0YWNrLmNsZWFyICgpOworICAgIG1fZGllX2Jsb2NrX2xpc3QgPSBudWxscHRy OworICB9CisKKyAgLyogVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGEgbmV3IGVsZW1lbnQgdG8gdGhl IGxpc3QgbV9kaWVfYmxvY2tfbGlzdC4gICovCisKKyAgdm9pZCByZWNvcmRfZGllX2Jsb2NrIChz dHJ1Y3QgZGllX2luZm8gKmRpZSwKKwkJCSBzdHJ1Y3QgZGllX2luZm8gKm9yaWdfZGllLAorCQkJ IHN0cnVjdCBibG9jayAqYmxvY2spOworCiAgIHN0cnVjdCBibG9jayAqZmluaXNoX2Jsb2NrIChz dHJ1Y3Qgc3ltYm9sICpzeW1ib2wsCiAJCQkgICAgICBzdHJ1Y3QgcGVuZGluZ19ibG9jayAqb2xk X2Jsb2NrcywKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBkeW5hbWljX3Byb3AgKnN0YXRpY19saW5r LApAQCAtMzE2LDYgKzMzMCw4IEBAIHN0cnVjdCBidWlsZHN5bV9jb21wdW5pdAogCiAgIHN0cnVj dCBibG9ja3ZlY3RvciAqbWFrZV9ibG9ja3ZlY3RvciAoKTsKIAorICB2b2lkIGZpbmlzaF9pbmxp bmVkX3Njb3BlICgpOworCiAgIHZvaWQgd2F0Y2hfbWFpbl9zb3VyY2VfZmlsZV9sb3NzYWdlICgp OwogCiAgIHN0cnVjdCBjb21wdW5pdF9zeW10YWIgKmVuZF9jb21wdW5pdF9zeW10YWJfd2l0aF9i bG9ja3ZlY3RvcgpAQCAtMzk3LDEyICs0MTMsMjEgQEAgc3RydWN0IGJ1aWxkc3ltX2NvbXB1bml0 CiAgIC8qIEFuIG9ic3RhY2sgdXNlZCBmb3IgYWxsb2NhdGluZyBwZW5kaW5nIGJsb2Nrcy4gICov CiAgIGF1dG9fb2JzdGFjayBtX3BlbmRpbmdfYmxvY2tfb2JzdGFjazsKIAorICAvKiBBbiBvYnN0 YWNrIHVzZWQgZm9yIGFsbG9jYXRpbmcgZGllX2Jsb2Nrcy4gICovCisgIGF1dG9fb2JzdGFjayBt X2RpZV9ibG9ja19vYnN0YWNrOworCiAgIC8qIFBvaW50ZXIgdG8gdGhlIGhlYWQgb2YgYSBsaW5r ZWQgbGlzdCBvZiBzeW1ib2wgYmxvY2tzIHdoaWNoIGhhdmUKICAgICAgYWxyZWFkeSBiZWVuIGZp bmFsaXplZCAobGV4aWNhbCBjb250ZXh0cyBhbHJlYWR5IGNsb3NlZCkgYW5kIHdoaWNoCiAgICAg IGFyZSBqdXN0IHdhaXRpbmcgdG8gYmUgYnVpbHQgaW50byBhIGJsb2NrdmVjdG9yIHdoZW4gZmlu YWxpemluZyB0aGUKICAgICAgYXNzb2NpYXRlZCBzeW10YWIuICAqLwogICBzdHJ1Y3QgcGVuZGlu Z19ibG9jayAqbV9wZW5kaW5nX2Jsb2NrcyA9IG51bGxwdHI7CiAKKyAgLyogUG9pbnRlciB0byBE SUVfQkxPQ0tzIHdoaWNoIGlzIGdyb3VwIG9mCisgICAgICogIERJRQorICAgICAqICBvcmlnaW5h bCBkaWUgT1JJR19ESUUgKGFic3RyYWN0IGluc3RhbmNlKQorICAgICAqICBCTE9DSyBnZW5lcmF0 ZWQgZm9yIGl0LiAgKi8KKyAgc3RydWN0IGRpZV9ibG9ja19saXN0ICptX2RpZV9ibG9ja19saXN0 ID0gbnVsbHB0cjsKKwogICAvKiBQZW5kaW5nIHN0YXRpYyBzeW1ib2xzIGFuZCB0eXBlcyBhdCB0 aGUgdG9wIGxldmVsLiAgKi8KICAgc3RydWN0IHBlbmRpbmcgKm1fZmlsZV9zeW1ib2xzID0gbnVs bHB0cjsKIApkaWZmIC0tZ2l0IGEvZ2RiL2R3YXJmMi9yZWFkLmMgYi9nZGIvZHdhcmYyL3JlYWQu YwppbmRleCBmN2U1NWFmM2U4Ni4uYWY0MGI4ZGViMWMgMTAwNjQ0Ci0tLSBhL2dkYi9kd2FyZjIv cmVhZC5jCisrKyBiL2dkYi9kd2FyZjIvcmVhZC5jCkBAIC0xMTkyNSw2ICsxMTkyNSw0MSBAQCBp bmhlcml0X2Fic3RyYWN0X2RpZXMgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1Y3QgZHdhcmYy X2N1ICpjdSkKICAgICBjb21wdXRlX2RlbGF5ZWRfcGh5c25hbWVzIChvcmlnaW5fY3UpOwogfQog CitzdGF0aWMgc3RydWN0IGJsb2NrKgorZmluaXNoX2RpZV9ibG9jayAoc3RydWN0IGR3YXJmMl9j dSAqY3UsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGllX2luZm8gKmRpZSwKKyAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzeW1ib2wgKnN5bWJvbCwKKyAgICAgICAgICAgICAgICAgIHN0cnVj dCBwZW5kaW5nX2Jsb2NrICpvbGRfYmxvY2tzLAorICAgICAgICAgICAgICAgICAgY29uc3Qgc3Ry dWN0IGR5bmFtaWNfcHJvcCAqc3RhdGljX2xpbmssCisgICAgICAgICAgICAgICAgICBDT1JFX0FE RFIgc3RhcnQsIENPUkVfQUREUiBlbmQpCit7CisgIHN0cnVjdCBibG9jayAqYmxvY2s7CisgIHN0 cnVjdCBhdHRyaWJ1dGUgKm9yaWdfYXR0cjsKKyAgc3RydWN0IGRpZV9pbmZvICpvcmlnX2RpZTsK KworICBibG9jayA9IGN1LT5nZXRfYnVpbGRlciAoKS0+ZmluaXNoX2Jsb2NrIChzeW1ib2wsIG9s ZF9ibG9ja3MsCisJCQkJICAgICBzdGF0aWNfbGluaywgc3RhcnQsIGVuZCk7CisgIGlmIChibG9j aykKKyAgICB7CisgICAgICBvcmlnX2F0dHIgPSBkd2FyZjJfYXR0ciAoZGllLCBEV19BVF9hYnN0 cmFjdF9vcmlnaW4sIGN1KTsKKyAgICAgIG9yaWdfZGllID0gbnVsbHB0cjsKKworICAgICAgaWYg KG9yaWdfYXR0cgorICAgICAgICAgICYmICgoYmxvY2stPmZ1bmN0aW9uICgpICE9IE5VTEwgJiYg YmxvY2tfaW5saW5lZF9wIChibG9jaykpCisgICAgICAgICAgICAgICB8fCBkaWUtPnRhZyA9PSBE V19UQUdfbGV4aWNhbF9ibG9jaykpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZHdhcmYy X2N1ICpvcmlnaW5fY3UgPSBjdTsKKyAgICAgICAgICBvcmlnX2RpZSA9IGZvbGxvd19kaWVfcmVm IChkaWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19hdHRyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcmlnaW5fY3UpOworICAgICAg ICB9CisKKyAgICAgIGN1LT5nZXRfYnVpbGRlciAoKS0+cmVjb3JkX2RpZV9ibG9jayAoZGllLCBv cmlnX2RpZSwgYmxvY2spOworICAgIH0KKworICByZXR1cm4gYmxvY2s7Cit9CisKIHN0YXRpYyB2 b2lkCiByZWFkX2Z1bmNfc2NvcGUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1Y3QgZHdhcmYy X2N1ICpjdSkKIHsKQEAgLTEyMDc1LDggKzEyMTEwLDggQEAgcmVhZF9mdW5jX3Njb3BlIChzdHJ1 Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGR3YXJmMl9jdSAqY3UpCiAKICAgc3RydWN0IGNvbnRl eHRfc3RhY2sgY3N0ayA9IGN1LT5nZXRfYnVpbGRlciAoKS0+cG9wX2NvbnRleHQgKCk7CiAgIC8q IE1ha2UgYSBibG9jayBmb3IgdGhlIGxvY2FsIHN5bWJvbHMgd2l0aGluLiAgKi8KLSAgYmxvY2sg PSBjdS0+Z2V0X2J1aWxkZXIgKCktPmZpbmlzaF9ibG9jayAoY3N0ay5uYW1lLCBjc3RrLm9sZF9i bG9ja3MsCi0JCQkJICAgICBjc3RrLnN0YXRpY19saW5rLCBsb3dwYywgaGlnaHBjKTsKKyAgYmxv Y2sgPSBmaW5pc2hfZGllX2Jsb2NrIChjdSwgZGllLCBjc3RrLm5hbWUsIGNzdGsub2xkX2Jsb2Nr cywKKwkJCWNzdGsuc3RhdGljX2xpbmssIGxvd3BjLCBoaWdocGMpOwogCiAgIC8qIEZvciBDKyss IHNldCB0aGUgYmxvY2sncyBzY29wZS4gICovCiAgIGlmICgoY3UtPmxhbmcgKCkgPT0gbGFuZ3Vh Z2VfY3BsdXMKQEAgLTEyMTg4LDggKzEyMjIzLDggQEAgcmVhZF9sZXhpY2FsX2Jsb2NrX3Njb3Bl IChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGR3YXJmMl9jdSAqY3UpCiAgICAgICB8fCAo KmN1LT5nZXRfYnVpbGRlciAoKS0+Z2V0X2xvY2FsX3VzaW5nX2RpcmVjdGl2ZXMgKCkpICE9IE5V TEwpCiAgICAgewogICAgICAgc3RydWN0IGJsb2NrICpibG9jawotCT0gY3UtPmdldF9idWlsZGVy ICgpLT5maW5pc2hfYmxvY2sgKDAsIGNzdGsub2xkX2Jsb2NrcywgTlVMTCwKLQkJCQkgICAgIGNz dGsuc3RhcnRfYWRkciwgaGlnaHBjKTsKKwk9IGZpbmlzaF9kaWVfYmxvY2sgKGN1LCBkaWUsIDAs IGNzdGsub2xkX2Jsb2NrcywgTlVMTCwKKwkJY3N0ay5zdGFydF9hZGRyLCBoaWdocGMpOwogCiAg ICAgICAvKiBOb3RlIHRoYXQgcmVjb3JkaW5nIHJhbmdlcyBhZnRlciB0cmF2ZXJzaW5nIGNoaWxk cmVuLCBhcyB3ZQogCSBkbyBoZXJlLCBtZWFucyB0aGF0IHJlY29yZGluZyBhIHBhcmVudCdzIHJh bmdlcyBlbnRhaWxzCmRpZmYgLS1naXQgYS9nZGIvc3ltdGFiLmMgYi9nZGIvc3ltdGFiLmMKaW5k ZXggMDNhYTJhOTZiODcuLjg3YWE1OTUzOGM4IDEwMDY0NAotLS0gYS9nZGIvc3ltdGFiLmMKKysr IGIvZ2RiL3N5bXRhYi5jCkBAIC0yMjI4LDcgKzIyMjgsMTcgQEAgbG9va3VwX2xvY2FsX3N5bWJv bCAoY29uc3QgY2hhciAqbmFtZSwKIAl9CiAKICAgICAgIGlmIChibG9jay0+ZnVuY3Rpb24gKCkg IT0gTlVMTCAmJiBibG9ja19pbmxpbmVkX3AgKGJsb2NrKSkKLQlicmVhazsKKwl7CisJICBzdHJ1 Y3Qgc3ltYm9sICpmdW5jID0gYmxvY2stPmZ1bmN0aW9uKCk7CisJICBzdHJ1Y3QgYmxvY2sgKnNj b3BlYmxvY2sgPSBmdW5jLT5zY29wZWJsb2NrKCk7CisJICAvKiBGb3IgaW5saW5lcywgY2hlY2sg aW4gdGhlIHNjb3BlIG9mIHRoZSBhYnN0cmFjdCBpbnN0YW5jZS4gICovCisJICBpZiAoc2NvcGVi bG9jayAmJiBzY29wZWJsb2NrICE9IGJsb2NrX2dsb2JhbF9ibG9jayAoYmxvY2spKQorCSAgICB7 CisJICAgICAgYmxvY2sgPSBzY29wZWJsb2NrOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJ ICBicmVhazsKKwl9CiAgICAgICBibG9jayA9IGJsb2NrLT5zdXBlcmJsb2NrICgpOwogICAgIH0K IApkaWZmIC0tZ2l0IGEvZ2RiL3N5bXRhYi5oIGIvZ2RiL3N5bXRhYi5oCmluZGV4IGFjOTAyYTRj YmJlLi4wZjc2NWUyYWVjMyAxMDA2NDQKLS0tIGEvZ2RiL3N5bXRhYi5oCisrKyBiL2dkYi9zeW10 YWIuaApAQCAtMTI4Miw2ICsxMjgyLDE2IEBAIHN0cnVjdCBzeW1ib2wgOiBwdWJsaWMgZ2VuZXJh bF9zeW1ib2xfaW5mbywgcHVibGljIGFsbG9jYXRlX29uX29ic3RhY2sKICAgICByZXR1cm4gdGhp cy0+c3ViY2xhc3MgPT0gU1lNQk9MX1RFTVBMQVRFOwogICB9CiAKKyAgc3RydWN0IGJsb2NrICpz Y29wZWJsb2NrICgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbV9zY29wZWJsb2NrOworICB9CisK KyAgdm9pZCBzZXRfc2NvcGVibG9jayAoc3RydWN0IGJsb2NrICpzY29wZWJsb2NrKQorICB7Cisg ICAgbV9zY29wZWJsb2NrID0gc2NvcGVibG9jazsKKyAgfQorCiAgIHN0cnVjdCB0eXBlICp0eXBl ICgpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gbV90eXBlOwpAQCAtMTM5OSw2ICsxNDA5LDEwIEBA IHN0cnVjdCBzeW1ib2wgOiBwdWJsaWMgZ2VuZXJhbF9zeW1ib2xfaW5mbywgcHVibGljIGFsbG9j YXRlX29uX29ic3RhY2sKIAogICB2b2lkIHNldF9zeW10YWIgKHN0cnVjdCBzeW10YWIgKnN5bXRh Yik7CiAKKyAgLyogT3JpZ2luYWwgc2NvcGUgKGJlZm9yZSBpbmxpbmluZykgYmxvY2sgb2YgaW5s aW5lZCBmdW5jdGlvbi4gICovCisKKyAgc3RydWN0IGJsb2NrICptX3Njb3BlYmxvY2s7CisKICAg LyogRGF0YSB0eXBlIG9mIHZhbHVlICovCiAKICAgc3RydWN0IHR5cGUgKm1fdHlwZSA9IG51bGxw dHI7CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL25lc3RlZF9pbmxpbmVkX2Z1 bi5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9uZXN0ZWRfaW5saW5lZF9mdW4uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjAxMjAyN2ZiYzkKLS0tIC9kZXYvbnVs bAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL25lc3RlZF9pbmxpbmVkX2Z1bi5jCkBAIC0w LDAgKzEsOTIgQEAKKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVi dWdnZXIuCisKKyAgIENvcHlyaWdodCAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor CisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFRlc3RzIHdoaWNoIHZlcmlmeSB0 aGF0IEdEQiBjYW4gYWNjZXNzIHNjb3BlIHZhcmlhYmxlcyBmb3IgbmVzdGVkIGZ1bmN0aW9ucwor ICAgcHJvcGVybHkgd2hlbiBpbmxpbmVkLgorKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0 YXRpYyBpbnQgc3RhdGljX3ZhciA9IDQ7CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUp KSBpbmxpbmUgaW50IG91dGVyX2Z1biAoaW50IGFyZykgeworICBpbnQgb3V0ZXJfbG9jYWwgPSA1 OworICBvdXRlcl9sb2NhbCA9IGFyZzsKKyAgcHJpbnRmKCJWYWx1ZSBvZiBvdXRlcl9sb2NhbCA9 ICVkXG4iLCBvdXRlcl9sb2NhbCk7Cit9CisKK3ZvaWQgY2FsbGVyX2Z1bigpIHsKKyAgc3RhdGlj IGludCBjYWxsZXJfZnVuX3ZhciA9IDk7CisgIHZvbGF0aWxlIGludCBjYWxsZXJfZnVuX290aGVy X3ZhciA9IDc7CisgIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUgdm9pZCBp bmxpbmVkX2NhbGxlZF9mdW4gKGludCBhcmcpIHsKKyAgICBpbnQgbG9jYWwgPSAwOworICAgIGxv Y2FsID0gYXJnOworICAgIGNhbGxlcl9mdW5fdmFyICs9IGFyZzsKKyAgICBwcmludGYoIlZhbHVl IG9mIGxvY2FsID0gJWRcbiIsIGxvY2FsKTsKKyAgfQorCisgIGlubGluZWRfY2FsbGVkX2Z1bihj YWxsZXJfZnVuX290aGVyX3Zhcik7CisKKyAgb3V0ZXJfZnVuKGNhbGxlcl9mdW5fb3RoZXJfdmFy KTsKKworICBpbmxpbmVkX2NhbGxlZF9mdW4oY2FsbGVyX2Z1bl9vdGhlcl92YXIpOworCisgIHsK KyAgICB2b2xhdGlsZSBpbnQgbGV4X2xvY2FsID0gMTE7CisgICAgX19hdHRyaWJ1dGVfXygoYWx3 YXlzX2lubGluZSkpIGlubGluZSB2b2lkIGxleF9jYWxsZWRfZnVuIChpbnQgYXJnKSB7CisgICAg ICBpbnQgbG9jYWwgPSAwOworICAgICAgbG9jYWwgPSBhcmc7IC8qIGJyZWFrIGhlcmUgZm9yIGxl eF9jYWxsZWRfZnVuKi8KKyAgICAgIHByaW50ZigiVmFsdWUgb2YgbG9jYWwgPSAlZFxuIiwgbG9j YWwpOworICAgIH0KKyAgICBsZXhfY2FsbGVkX2Z1bihsZXhfbG9jYWwrNSk7CisgIH0KKworICBy ZXR1cm47Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUgc3RhdGlj IHZvaWQgaW5saW5lZF9jYWxsZXJfZnVuKCkgeworICBzdGF0aWMgaW50IGlfY2FsbGVyX2Z1bl92 YXIgPSA5OworICB2b2xhdGlsZSBpbnQgaV9jYWxsZXJfZnVuX290aGVyX3ZhciA9IDc7CisgIF9f YXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUgdm9pZCBpbmxpbmVkX2NhbGxlZF9m dW4gKGludCBhcmcpIHsKKyAgICBpbnQgbG9jYWwgPSAwOworICAgIGxvY2FsID0gYXJnOworICAg IGlfY2FsbGVyX2Z1bl92YXIgKz0gYXJnOworICAgIHByaW50ZigiVmFsdWUgb2YgbG9jYWwgPSAl ZFxuIiwgbG9jYWwpOworICB9CisKKyAgaW5saW5lZF9jYWxsZWRfZnVuKGlfY2FsbGVyX2Z1bl9v dGhlcl92YXIpOworCisgIG91dGVyX2Z1bihpX2NhbGxlcl9mdW5fb3RoZXJfdmFyKTsKKworICB7 CisgICAgdm9sYXRpbGUgaW50IGlfbGV4X2xvY2FsID0gMTE7CisgICAgX19hdHRyaWJ1dGVfXygo YWx3YXlzX2lubGluZSkpIGlubGluZSB2b2lkIGlfbGV4X2NhbGxlZF9mdW4gKGludCBhcmcpIHsK KyAgICAgIGludCBsb2NhbCA9IDA7CisgICAgICBsb2NhbCA9IGFyZzsgLyogYnJlYWsgaGVyZSBm b3IgaV9sZXhfY2FsbGVkX2Z1biovCisgICAgICBwcmludGYoIlZhbHVlIG9mIGxvY2FsID0gJWRc biIsIGxvY2FsKTsKKyAgICB9CisgICAgaV9sZXhfY2FsbGVkX2Z1bihpX2xleF9sb2NhbCs1KTsK KyAgfQorCisgIHJldHVybjsKK30KKworaW50IG1haW4oKSB7CisgIGNhbGxlcl9mdW4oKTsKKyAg aW5saW5lZF9jYWxsZXJfZnVuKCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rl c3RzdWl0ZS9nZGIuYmFzZS9uZXN0ZWRfaW5saW5lZF9mdW4uZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9n ZGIuYmFzZS9uZXN0ZWRfaW5saW5lZF9mdW4uZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4xNGE2N2FjZTBkYQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvbmVzdGVkX2lubGluZWRfZnVuLmV4cApAQCAtMCwwICsxLDE1NCBAQAorIyBD b3B5cmlnaHQgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgZ2RiIHRlc3RzdWl0ZS4KKwor IyBUZXN0cyB3aGljaCB2ZXJpZnkgdGhhdCBHREIgY2FuIGFjY2VzcyBzY29wZSB2YXJpYWJsZXMg Zm9yIG5lc3RlZCBmdW5jdGlvbnMKKyMgcHJvcGVybHkgd2hlbiBpbmxpbmVkLgorCitzdGFuZGFy ZF90ZXN0ZmlsZQorCitpZiB7IVtzdXBwb3J0X25lc3RlZF9mdW5jdGlvbl90ZXN0c119IHsKKyAg ICByZXR1cm4gLTEKK30KKworaWYge1twcmVwYXJlX2Zvcl90ZXN0aW5nICJmYWlsZWQgdG8gcHJl cGFyZSIgJHRlc3RmaWxlICRzcmNmaWxlXX0geworICAgIHJldHVybiAtMQorfQorCitpZiB7IVty dW50b19tYWluXX0geworICAgIHJldHVybiAtMQorfQorCitnZGJfdGVzdCAiYnJlYWsgY2FsbGVy X2Z1biIgXAorICAgICIuKiIgXAorICAgICJicmVhayBjYWxsZXJfZnVuIgorZ2RiX3Rlc3QgImNv bnRpbnVlIiBcCisgICAgIi4qQnJlYWtwb2ludCAyLioiIFwKKyAgICAiY29udGludWUgMSIKK2dk Yl90ZXN0ICJicmVhayBpbmxpbmVkX2NhbGxlZF9mdW4iIFwKKyAgICAiLioiIFwKKyAgICAiYnJl YWsgaW5saW5lZF9jYWxsZWRfZnVuIgorZ2RiX3Rlc3QgImJyZWFrIG91dGVyX2Z1biIgXAorICAg ICIuKiIgXAorICAgICJicmVhayBvdXRlcl9mdW4iCisKKyMgQ29udGFpbmluZyBzY29wZSB2YXJp YWJsZXMgc2hvdWxkIGJlIGFjY2Vzc2libGUKKyMgZnJvbSBpbmxpbmVkX2NhbGxlZF9mdW4gKGZp cnN0IGNhbGwpLgorCitnZGJfdGVzdCAiY29udGludWUiIFwKKyAgICAiLipCcmVha3BvaW50IDMu KiIgXAorICAgICJjb250aW51ZSAyIgorZ2RiX3Rlc3QgInByaW50IGNhbGxlcl9mdW5fdmFyIiBc CisgICAgIj0gOSIgXAorICAgICJwcmludCBjYWxsZXJfZnVuX3ZhciAxIgorZ2RiX3Rlc3QgInBy aW50IGNhbGxlcl9mdW5fb3RoZXJfdmFyIiBcCisgICAgIj0gNyIgXAorICAgICJwcmludCBjYWxs ZXJfZnVuX290aGVyX3ZhciAxIgorCisjIENvbnRhaW5pbmcgc2NvcGUgdmFyaWFibGVzIHNob3Vs ZCBub3QgYmUgYWNjZXNzaWJsZSBmcm9tIG91dGVyX2Z1bi4KKworZ2RiX3Rlc3QgImNvbnRpbnVl IiBcCisgICAgIi4qQnJlYWtwb2ludCA0LioiIFwKKyAgICAiY29udGludWUgMyIKK2dkYl90ZXN0 ICJwcmludCBjYWxsZXJfZnVuX3ZhciIgXAorICAgICJObyBzeW1ib2wgXCJjYWxsZXJfZnVuX3Zh clwiIGluIGN1cnJlbnQgY29udGV4dC4iIFwKKyAgICAicHJpbnQgY2FsbGVyX2Z1bl92YXIgMiIK K2dkYl90ZXN0ICJwcmludCBjYWxsZXJfZnVuX290aGVyX3ZhciIgXAorICAgICJObyBzeW1ib2wg XCJjYWxsZXJfZnVuX290aGVyX3ZhclwiIGluIGN1cnJlbnQgY29udGV4dC4iIFwKKyAgICAicHJp bnQgY2FsbGVyX2Z1bl9vdGhlcl92YXIgMiIKKworIyBDb250YWluaW5nIHNjb3BlIHZhcmlhYmxl cyBzaG91bGQgYmUgYWNjZXNzaWJsZQorIyBmcm9tIGlubGluZWRfY2FsbGVkX2Z1biAoc2Vjb25k IGNhbGwpLgorCitnZGJfdGVzdCAiY29udGludWUiIFwKKyAgICAiLipCcmVha3BvaW50IDMuKiIg XAorICAgICJjb250aW51ZSA0IgorZ2RiX3Rlc3QgInByaW50IGNhbGxlcl9mdW5fdmFyIiBcCisg ICAgIj0gMTYiIFwKKyAgICAicHJpbnQgY2FsbGVyX2Z1bl92YXIgMyIKK2dkYl90ZXN0ICJwcmlu dCBjYWxsZXJfZnVuX290aGVyX3ZhciIgXAorICAgICI9IDciIFwKKyAgICAicHJpbnQgY2FsbGVy X2Z1bl9vdGhlcl92YXIgMyIKKworIyBJbmxpbmVkIGZ1bmN0aW9uICdsZXhfY2FsbGVkX2Z1bicg aW5zaWRlIGxleGljYWwgYmxvY2sgY2FuIGFjY2VzcworIyBjb250YWluaW5nIHNjb3BlIChjb250 YWluaW5nIGZ1bmN0aW9uIGFuZCBsZXhpY2FsIGJsb2NrKS4KKworZ2RiX2JyZWFrcG9pbnQgW2dk Yl9nZXRfbGluZV9udW1iZXIgImJyZWFrIGhlcmUgZm9yIGxleF9jYWxsZWRfZnVuIl0KK2dkYl90 ZXN0ICJjb250aW51ZSIgXAorICAgICIuKkJyZWFrcG9pbnQgNS4qIiBcCisgICAgImNvbnRpbnVl IDUiCitnZGJfdGVzdCAicHJpbnQgY2FsbGVyX2Z1bl92YXIiIFwKKyAgICAiPSAyMyIgXAorICAg ICJwcmludCBjYWxsZXJfZnVuX3ZhciA0IgorZ2RiX3Rlc3QgInByaW50IGNhbGxlcl9mdW5fb3Ro ZXJfdmFyIiBcCisgICAgIj0gNyIgXAorICAgICJwcmludCBjYWxsZXJfZnVuX290aGVyX3ZhciA0 IgorZ2RiX3Rlc3QgInByaW50IGxleF9sb2NhbCIgXAorICAgICI9IDExIiBcCisgICAgInByaW50 IGxleF9sb2NhbCIKKworIyBUZXN0aW5nIGlubGluZWQgY2FsbGVyIGZ1bmN0aW9uLgorCitnZGJf dGVzdCAiYnJlYWsgaW5saW5lZF9jYWxsZXJfZnVuIiBcCisgICAgIi4qIiBcCisgICAgImJyZWFr IGlubGluZWRfY2FsbGVyX2Z1biIKK2dkYl90ZXN0ICJjb250aW51ZSIgXAorICAgICIuKkJyZWFr cG9pbnQgNi4qIiBcCisgICAgImNvbnRpbnVlIDYiCitnZGJfdGVzdCAiYnJlYWsgaW5saW5lZF9j YWxsZWRfZnVuIiBcCisgICAgIi4qIiBcCisgICAgImJyZWFrIGlubGluZWRfY2NhbGxlZF9mdW4i CisKKyMgSW5saW5lZCBmdW5jdGlvbiBpbnNpZGUgaW5saW5lZCBmdW5jdGlvbiBjYW4gYWNjZXNz IGNvbnRhaW5pbmcgc2NvcGUuCisKK2dkYl90ZXN0ICJjb250aW51ZSIgXAorICAgICIuKkJyZWFr cG9pbnQgMy4qIiBcCisgICAgImNvbnRpbnVlIDciCitnZGJfdGVzdCAicHJpbnQgaV9jYWxsZXJf ZnVuX3ZhciIgXAorICAgICI9IDkiIFwKKyAgICAicHJpbnQgaV9jYWxsZXJfZnVuX3ZhciAxIgor Z2RiX3Rlc3QgInByaW50IGlfY2FsbGVyX2Z1bl9vdGhlcl92YXIiIFwKKyAgICAiPSA3IiBcCisg ICAgInByaW50IGlfY2FsbGVyX2Z1bl9vdGhlcl92YXIgMSIKKworIyBDb250YWluaW5nIHNjb3Bl IHZhcmlhYmxlcyBzaG91bGQgbm90IGJlIGFjY2Vzc2libGUgZnJvbSBvdXRlcl9mdW4uCisKK2dk Yl90ZXN0ICJjb250aW51ZSIgXAorICAgICIuKkJyZWFrcG9pbnQgNC4qIiBcCisgICAgImNvbnRp bnVlIDgiCitnZGJfdGVzdCAicHJpbnQgaV9jYWxsZXJfZnVuX3ZhciIgXAorICAgICJObyBzeW1i b2wgXCJpX2NhbGxlcl9mdW5fdmFyXCIgaW4gY3VycmVudCBjb250ZXh0LiIgXAorICAgICJwcmlu dCBpX2NhbGxlcl9mdW5fdmFyIDIiCitnZGJfdGVzdCAicHJpbnQgaV9jYWxsZXJfZnVuX290aGVy X3ZhciIgXAorICAgICJObyBzeW1ib2wgXCJpX2NhbGxlcl9mdW5fb3RoZXJfdmFyXCIgaW4gY3Vy cmVudCBjb250ZXh0LiIgXAorICAgICJwcmludCBpX2NhbGxlcl9mdW5fb3RoZXJfdmFyIDIiCisK KyMgSW5saW5lZCBmdW5jdGlvbiAnaV9sZXhfY2FsbGVkX2Z1bicgaW5zaWRlIGxleGljYWwgYmxv Y2sgY2FuIGFjY2VzcworIyBjb250YWluaW5nIHNjb3BlIChjb250YWluaW5nIGZ1bmN0aW9uIGFu ZCBsZXhpY2FsIGJsb2NrKS4KKworZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIg ImJyZWFrIGhlcmUgZm9yIGlfbGV4X2NhbGxlZF9mdW4iXQorZ2RiX3Rlc3QgImNvbnRpbnVlIiBc CisgICAgIi4qQnJlYWtwb2ludCA4LioiIFwKKyAgICAiY29udGludWUgOSIKK2dkYl90ZXN0ICJw cmludCBpX2NhbGxlcl9mdW5fdmFyIiBcCisgICAgIj0gMTYiIFwKKyAgICAicHJpbnQgaV9jYWxs ZXJfZnVuX3ZhciAzIgorZ2RiX3Rlc3QgInByaW50IGlfY2FsbGVyX2Z1bl9vdGhlcl92YXIiIFwK KyAgICAiPSA3IiBcCisgICAgInByaW50IGlfY2FsbGVyX2Z1bl9vdGhlcl92YXIgMyIKK2dkYl90 ZXN0ICJwcmludCBpX2xleF9sb2NhbCIgXAorICAgICI9IDExIiBcCisgICAgInByaW50IGlfbGV4 X2xvY2FsIgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9vbXAtdGFzay5j IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9vbXAtdGFzay5jCmluZGV4IGJkZWVhZTUwMWNi Li40MjQyZTBlNmU0MiAxMDA2NDQKLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9vbXAt dGFzay5jCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvb21wLXRhc2suYwpAQCAtMjEs MjAgKzIxLDM4IEBACiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPG9tcC5oPgorI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgZ2xvYmFsX3ZhcjE7CitpbnQgZ2xvYmFsX3ZhcjIgPSA5 OTsKIAogaW50IGZvbyhpbnQgbikgewogICBpbnQgc2hhcmUxID0gOSwgc2hhcmUyID0gMTEsIHNo YXJlMyA9IDEzLCBwcml2MSwgcHJpdjIsIGZwcml2OworICBpbnQgc2FtZV92YXIgPSA1OworICBp bnQgb3RoZXJfdmFyID0gMjE7CisgIHN0YXRpYyBpbnQgc3RhdGljX3ZhciA9IDkzOworICBnbG9i YWxfdmFyMSA9IDk5OwogICBmcHJpdiA9IG4gKyA0OwogCiAgIGlmIChuIDwgMikKICAgICByZXR1 cm4gbjsKICAgZWxzZSB7CisgICAgaW50IHNhbWVfdmFyID0gcmFuZCgpICUgNTsKKyAgICBpbnQg bG9jYWxfdmFyID0gMzE7CiAjcHJhZ21hIG9tcCB0YXNrIHNoYXJlZChzaGFyZTEsIHNoYXJlMikg cHJpdmF0ZShwcml2MSwgcHJpdjIpIGZpcnN0cHJpdmF0ZShmcHJpdikgc2hhcmVkKHNoYXJlMykK ICAgICB7CisgICAgICB2b2xhdGlsZSBpbnQgbGV4X2xvY2FsID0gNzc7CiAgICAgICBwcml2MSA9 IG47CiAgICAgICBwcml2MiA9IG4gKyAyOwogICAgICAgc2hhcmUyICs9IHNoYXJlMzsKICAgICAg IHByaW50Zigic2hhcmUxID0gJWQsIHNoYXJlMiA9ICVkLCBzaGFyZTMgPSAlZFxuIiwgc2hhcmUx LCBzaGFyZTIsIHNoYXJlMyk7CisgICAgICBwcmludGYoImdsb2JhbF92YXIxID0gJWRcbiIsIGds b2JhbF92YXIxKTsKKyAgICAgIHByaW50ZigiZ2xvYmFsX3ZhcjIgPSAlZFxuIiwgZ2xvYmFsX3Zh cjIpOworICAgICAgcHJpbnRmKCJzdGF0aWNfdmFyID0gJWRcbiIsIHN0YXRpY192YXIpOworICAg ICAgcHJpbnRmKCJzYW1lX3ZhciA9ICVkXG4iLCBzYW1lX3Zhcik7CisgICAgICBwcmludGYoIm90 aGVyX3ZhciA9ICVkXG4iLCBvdGhlcl92YXIpOworICAgICAgcHJpbnRmKCJsb2NhbF92YXIgPSAl ZFxuIiwgbG9jYWxfdmFyKTsKKyAgICAgIHByaW50ZigibGV4X2xvY2FsID0gJWRcbiIsIGxleF9s b2NhbCk7CiAgICAgICBzaGFyZTEgPSBwcml2MSArIHByaXYyICsgZnByaXYgKyBmb28obiAtIDEp ICsgc2hhcmUyICsgc2hhcmUzOwogICAgIH0KICNwcmFnbWEgb21wIHRhc2t3YWl0CmRpZmYgLS1n aXQgYS9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL29tcC10YXNrLmV4cCBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnRocmVhZHMvb21wLXRhc2suZXhwCmluZGV4IDhmNDY2NThmZTBkLi5lNzlhNWJhNWJh NiAxMDA2NDQKLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9vbXAtdGFzay5leHAKKysr IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9vbXAtdGFzay5leHAKQEAgLTIwLDcgKzIwLDYg QEAKIAogc3RhbmRhcmRfdGVzdGZpbGUKIAotc2V0IGhhdmVfbmVzdGVkX2Z1bmN0aW9uX3N1cHBv cnQgMAogc2V0IG9wdHMge29wZW5tcCBkZWJ1Z30KIAogaWYge1twcmVwYXJlX2Zvcl90ZXN0aW5n ICJmYWlsZWQgdG8gcHJlcGFyZSIgJHRlc3RmaWxlICRzcmNmaWxlICRvcHRzXX0gewpAQCAtNDks MyArNDgsMTAgQEAgZ2RiX3Rlc3QgImNvbnRpbnVlIiAiLipCcmVha3BvaW50IDMuKiIgImNvbnRp bnVlIDIiCiBnZGJfdGVzdCAicHJpbnQgcHJpdjEiICI9IDEwIgogZ2RiX3Rlc3QgInByaW50IHBy aXYyIiAiPSAxMiIKIGdkYl90ZXN0ICJwcmludCBmcHJpdiIgIj0gMTQiCitnZGJfdGVzdCAicHJp bnQgZ2xvYmFsX3ZhcjEiICI9IDk5IgorZ2RiX3Rlc3QgInByaW50IGdsb2JhbF92YXIyIiAiPSA5 OSIKK2dkYl90ZXN0ICJwcmludCBzdGF0aWNfdmFyIiAiPSA5MyIKK2dkYl90ZXN0ICJwcmludCBz YW1lX3ZhciIgIj0gLioiCitnZGJfdGVzdCAicHJpbnQgb3RoZXJfdmFyIiAiPSAyMSIKK2dkYl90 ZXN0ICJwcmludCBsb2NhbF92YXIiICI9IDMxIgorZ2RiX3Rlc3QgInByaW50IGxleF9sb2NhbCIg Ij0gNzciCi0tIAoyLjI1LjEKCg== --_002_CO6PR12MB54919D329BC9BCAC5EF7D4089E929CO6PR12MB5491namp_--