From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2070.outbound.protection.outlook.com [40.107.105.70]) by sourceware.org (Postfix) with ESMTPS id E25503858D38 for ; Tue, 13 Jun 2023 15:27:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E25503858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pEyC41/+/2gn0Hx8JMfK5iWw+oOFfsKNGIdTLvuZObY=; b=ermZhT0/YPUt4ZELiTFbmcDIwNdgvmgbPH7lK0e2T+Aj4CoIpaCJbsl+0EGhnYuCIeaSfD5hgfcX8ycRKwOHvcjmgy4CfiMWH1Kq1TPJprhPkVoVp48He2XYREGEp5wz4BTMUj3SzrEC2vRMrXSQAOHWLS+jutWyt6lyw8eP4mw= Received: from DUZPR01CA0257.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b5::29) by DB3PR08MB10334.eurprd08.prod.outlook.com (2603:10a6:10:43e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.39; Tue, 13 Jun 2023 15:26:54 +0000 Received: from DBAEUR03FT064.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:4b5:cafe::61) by DUZPR01CA0257.outlook.office365.com (2603:10a6:10:4b5::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.35 via Frontend Transport; Tue, 13 Jun 2023 15:26:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT064.mail.protection.outlook.com (100.127.143.3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.29 via Frontend Transport; Tue, 13 Jun 2023 15:26:54 +0000 Received: ("Tessian outbound 5154e9d36775:v136"); Tue, 13 Jun 2023 15:26:54 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: f2dfa31bc5d3eb0e X-CR-MTA-TID: 64aa7808 Received: from 89b7d7d2e899.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 4AE44200-DF8F-4394-844C-A24CC6A4BDF9.1; Tue, 13 Jun 2023 15:26:42 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 89b7d7d2e899.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 13 Jun 2023 15:26:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RqhNYoOfwc9hddBqm6hZXQAX3g7WpDmWGbYpLlANiVLkqy1I7577kRe2z15WwLAi+NVW21yRh4PrCx6GuWOmWeSJCNihcNE1FzHBhtVK3EA6jVZ3j8oHYF3xm0PzxxfQp+tiPnIcESuJ1102ibekO7/hWU1P9uftLrgom876tBVqVTAIWK8DaBAJLg7WUWk43V3hOKXCvEKhkBfyqCMsdvYSKfuIBcPHJB7nhfAv/CX+HkdkvQbnNb6Z5gbRavb5QcCvkpWUJ2UkgCJEwL3qk7Vp9y0V/UrqVwBc510YUzQ3KbdypBAZ+RtkWZW9CH4NHiRUxUGFipNa1h6WKpgP6g== 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=pEyC41/+/2gn0Hx8JMfK5iWw+oOFfsKNGIdTLvuZObY=; b=mwr5REcaDUMYOhyIsAGT/XuTVc7F0AC9Kq0QMq9d3VPR8C5zCeGFKAZPM2z31YbYS/BYLO4NVRAyneHXW/CqDE5AzudTSxOddOMTTNCu/IR3k9S2oPoB1L5k8BhDQHT7a8TVdF7Sce2bmTO7SDeDWVY9ypYT4phrJMXxdLEkkIyVOG7aZsV0R5YH8vcWh5BpDDOzHsAtUE/TeCJao2NN5KkhwzJmcrVJn5wxLz2QV16Fg8M2I16CFWyXgK0WpL4sW5qXl4h4+H1+VJ6WDNRPsZEMS9Jm/ygABrduy3TGwETDjJkcbgZZ9NQ0RzYCc8a5+Df4lO4V4VJ5EhTPvqd34Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pEyC41/+/2gn0Hx8JMfK5iWw+oOFfsKNGIdTLvuZObY=; b=ermZhT0/YPUt4ZELiTFbmcDIwNdgvmgbPH7lK0e2T+Aj4CoIpaCJbsl+0EGhnYuCIeaSfD5hgfcX8ycRKwOHvcjmgy4CfiMWH1Kq1TPJprhPkVoVp48He2XYREGEp5wz4BTMUj3SzrEC2vRMrXSQAOHWLS+jutWyt6lyw8eP4mw= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by DBAPR08MB5829.eurprd08.prod.outlook.com (2603:10a6:10:1a9::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.44; Tue, 13 Jun 2023 15:26:38 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::2301:1cde:cfe7:eaf0]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::2301:1cde:cfe7:eaf0%6]) with mapi id 15.20.6455.030; Tue, 13 Jun 2023 15:26:37 +0000 From: Tamar Christina To: Mikael Morin , Richard Earnshaw , "gcc-patches@gcc.gnu.org" , nd , Richard Sandiford Subject: RE: [PATCH v2] machine descriptor: New compact syntax for insn and insn_split in Machine Descriptions. Thread-Topic: [PATCH v2] machine descriptor: New compact syntax for insn and insn_split in Machine Descriptions. Thread-Index: AQHZl+08kf326nq/x0q2PMtkKgB+m699qeyAgAARCb+AADjTAIACu6WAgABy+gCAB8RTEA== Date: Tue, 13 Jun 2023 15:26:35 +0000 Message-ID: References: <30f06911-e19a-a39b-9b56-803cc9ef0ec1@orange.fr> In-Reply-To: <30f06911-e19a-a39b-9b56-803cc9ef0ec1@orange.fr> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|DBAPR08MB5829:EE_|DBAEUR03FT064:EE_|DB3PR08MB10334:EE_ X-MS-Office365-Filtering-Correlation-Id: 1f80e763-ce75-4262-607d-08db6c229e48 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: hntwStqzx5hQ1eoNlleBIyJx7lB3noALDFiH0YNE6izy+IV2NyITFKD4JPpLDU8aePsLj/2G57ZboULV4Z2CovNeBlSA982XLRoStQSeM0a54CEVzHqncFNCWXoaqsOiNKLb9sBtmbxvbDOaazZ4Rmn8pv6buMGBVf5M6aWQGkDciQbpTnEejoZlJ/duqD1ir/w4/qGjT+Rxe1N3iHuHxR4KQ1WIWOYzhdn7SlprZL8S37SrUuqR+0WrsxXobXXAdxJgKcwHRnwpDP+IcSVvL1SOQZKTPZ/+0/pIp5CEIPAPhLqMoccNSsMDmGMI7095yr5eMM6dMvEESFbmn2QlDX/H7nhodkDt0CV4LHOLP1IOpCvFqdF+cGL97/8Ii9J4CX/9X1TiNfJdvUCiDGn/isCVekG8GjG5csqd6fNjqAqdneNjWJ1Zt/a45mux88P3ZV+eZk3Vdh+t6eDRRfHEyb/SlbHEip7oQmz4/auxD6hsZsKaUazBTcsYcQ1rtSXuYf/ltWIG8FyzNKBWOyVbMgQzdYDmsEvEmrXG7JglGeuSw8dul8m8pP99jKYLthyItg9Ej4vZEwyxWqyjSR9GoF60WG9YV4hBcBRbvPRi2PY= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(376002)(396003)(39860400002)(136003)(366004)(451199021)(86362001)(7696005)(55016003)(33656002)(38100700002)(122000001)(99936003)(38070700005)(478600001)(71200400001)(110136005)(66476007)(8676002)(8936002)(5660300002)(52536014)(6636002)(66556008)(66446008)(316002)(76116006)(2906002)(66946007)(41300700001)(30864003)(64756008)(186003)(9686003)(83380400001)(26005)(6506007)(579004)(559001);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB532501BE8432A4B569870958FF55AVI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5829 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT064.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: eaa4ee8b-eed2-413f-834a-08db6c2292eb X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: m1M2Q0080umz/WQ0r6LsdWVSotc2ld+TowdG7WZSRuHVxs05kuQ1k8ZQyM4/OKjQzsJ7uvNAcCqw3wcpF0qYHhhmH8poGVV2bSXIkQ70RzMomXSqFf8eBZJYgpgwB66tdOxT126XEycA27dH/pNbQo8osQA3JF+REkSl7Tz9yfYRWZSNDQAhzRLs2GVBDxMSK/lIs7VTM17Mm5LS3f8/PCCJr3UnI/IWqErkz7/gkfK01zSTXJ4X9v+vcLkrIMvhAPm9zdf0SUmEPTgAF7Xr2I3KKpvu6+lj9r7e0woJLRQMYGwsa80NpRcIa9kIGF9/iNVkmKhjE1+zUHOTzYtKzByvx6sOMbKdsdJvtrhJTrfLGCf628XASUULRkJPnRL4noqRZwqFRGgXXKb+BKRbZN7D8zt3KiT1UuJeUawh5xP7XqdIR4b0OpXCeX91aIDynitI5Mh9f4Eftu1H1o5l98bUtHAjLmhMn2ejuwn378zk8/QMF96J6YRItYEBdnbcdBKHjLj/bCSUZe54k+EQ2BllcHDjYBbyfOaM/MGxeSx5D8k1q9hJcLtuLk+vEg+eKYD8dL0mkSerEcTAXJsoDPdyk9ptvdjEGr66cNibUL9RC/J/XOm2/kE73ueyYK99RX1f/82vpojcwla/0j7A1xZjwY1fUe8yhKcBpgjFL3wUPvJqgSDmTMoq1oiJoxFOyMeGKSW4t0MrHqRr2+0ihjZavkbrbo6YmdCuFVYIOdI= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(376002)(136003)(396003)(346002)(451199021)(36840700001)(46966006)(40470700004)(478600001)(6636002)(70586007)(81166007)(356005)(70206006)(82740400003)(110136005)(235185007)(86362001)(52536014)(8676002)(8936002)(5660300002)(30864003)(40480700001)(41300700001)(316002)(2906002)(55016003)(33656002)(83380400001)(99936003)(40460700003)(186003)(336012)(47076005)(26005)(9686003)(6506007)(33964004)(36860700001)(7696005)(82310400005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2023 15:26:54.3132 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1f80e763-ce75-4262-607d-08db6c229e48 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT064.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR08MB10334 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_002_VI1PR08MB532501BE8432A4B569870958FF55AVI1PR08MB5325eurp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQWxsLA0KDQpVcGRhdGVkIHBhdGNoIHdpdGggZmVlZGJhY2sgYWRkcmVzc2VkLg0KDQoNCkJv b3RzdHJhcHBlZCBSZWd0ZXN0ZWQgb24gYWFyY2g2NC1ub25lLWxpbnV4LWdudSBhbmQgbm8gaXNz dWVzLg0KDQpBbnkgZmVlZGJhY2s/DQoNClRoYW5rcywNClRhbWFyDQoNCmdjYy9DaGFuZ2VMb2c6 DQoNCgkqIGdlbnN1cHBvcnQuY2MgKGNsYXNzIGNvbmxpc3QsIGFkZF9jb25zdHJhaW50cywgYWRk X2F0dHJpYnV0ZXMsDQoJc2tpcF9zcGFjZXMsIGV4cGVjdF9jaGFyLCBwcmVwcm9jZXNzX2NvbXBh Y3Rfc3ludGF4LA0KCXBhcnNlX3NlY3Rpb25fbGF5b3V0LCBwYXJzZV9zZWN0aW9uLCBjb252ZXJ0 X3N5bnRheCk6IE5ldy4NCgkocHJvY2Vzc19ydHgpOiBDaGVjayBmb3IgY29udmVyc2lvbi4NCgkq IGdlbm91dHB1dC5jYyAocHJvY2Vzc190ZW1wbGF0ZSk6IENoZWNrIGZvciB1bnJlc29sdmVkIGl0 ZXJhdG9ycy4NCgkoY2xhc3MgZGF0YSk6IEFkZCBjb21wYWN0X3N5bnRheF9wLg0KCShnZW5faW5z bik6IFVzZSBpdC4NCgkqIGdlbnN1cHBvcnQuaCAoY29tcGFjdF9zeW50YXgpOiBOZXcuDQoJKGhh c2gtc2V0LmgpOiBJbmNsdWRlLg0KDQpDby1BdXRob3JlZC1CeTogT21hciBUYWhpciA8T21hci5U YWhpcjJAYXJtLmNvbT4NCg0KLS0tIGlubGluZSBjb3B5IG9mIHBhdGNoIC0tLQ0KDQpkaWZmIC0t Z2l0IGEvZ2NjL2RvYy9tZC50ZXhpIGIvZ2NjL2RvYy9tZC50ZXhpDQppbmRleCA2YTQzNWViNDQ2 MTA5NjA1MTNlOTczOWFjOWFjMWU4YTI3MTgyYzEwLi4zYmQxYmNiYzhiZWRhOWJiYWVhNzFjNjUx MThlY2ZhMmNkYWNlMzM1IDEwMDY0NA0KLS0tIGEvZ2NjL2RvYy9tZC50ZXhpDQorKysgYi9nY2Mv ZG9jL21kLnRleGkNCkBAIC0yNyw2ICsyNyw3IEBAIFNlZSB0aGUgbmV4dCBjaGFwdGVyIGZvciBp bmZvcm1hdGlvbiBvbiB0aGUgQyBoZWFkZXIgZmlsZS4NCiAgICAgICAgICAgICAgICAgICAgICAg ICBmcm9tIHN1Y2ggYW4gaW5zbi4NCiAqIE91dHB1dCBTdGF0ZW1lbnQ6OiAgICBGb3IgbW9yZSBn ZW5lcmFsaXR5LCB3cml0ZSBDIGNvZGUgdG8gb3V0cHV0DQogICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGFzc2VtYmxlciBjb2RlLg0KKyogQ29tcGFjdCBTeW50YXg6OiAgICAgIENvbXBhY3Qg c3ludGF4IGZvciB3cml0aW5nIG1hY2hpbmUgZGVzY3JpcHRvcnMuDQogKiBQcmVkaWNhdGVzOjog ICAgICAgICAgQ29udHJvbGxpbmcgd2hhdCBraW5kcyBvZiBvcGVyYW5kcyBjYW4gYmUgdXNlZA0K ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiBpbnNuLg0KICogQ29uc3RyYWludHM6OiAg ICAgICAgIEZpbmUtdHVuaW5nIG9wZXJhbmQgc2VsZWN0aW9uLg0KQEAgLTcxMyw2ICs3MTQsMTY3 IEBAIHlvdSBjYW4gdXNlIEBzYW1weyp9IGluc2lkZSBvZiBhIEBzYW1we0BAfSBtdWx0aS1hbHRl cm5hdGl2ZSB0ZW1wbGF0ZToNCiBAZW5kIGdyb3VwDQogQGVuZCBzbWFsbGV4YW1wbGUNCiANCitA bm9kZSBDb21wYWN0IFN5bnRheA0KK0BzZWN0aW9uIENvbXBhY3QgU3ludGF4DQorQGNpbmRleCBj b21wYWN0IHN5bnRheA0KKw0KK1doZW4gYSBAY29kZXtkZWZpbmVfaW5zbn0gb3IgQGNvZGV7ZGVm aW5lX2luc25fYW5kX3NwbGl0fSBoYXMgbXVsdGlwbGUNCithbHRlcm5hdGl2ZXMgaXQgbWF5IGJl IGJlbmVmaWNpYWwgdG8gdXNlIHRoZSBjb21wYWN0IHN5bnRheCB3aGVuIHNwZWNpZnlpbmcNCith bHRlcm5hdGl2ZXMuDQorDQorVGhpcyBzeW50YXggcHV0cyB0aGUgY29uc3RyYWludHMgYW5kIGF0 dHJpYnV0ZXMgb24gdGhlIHNhbWUgaG9yaXpvbnRhbCBsaW5lIGFzDQordGhlIGluc3RydWN0aW9u IGFzc2VtYmx5IHRlbXBsYXRlLg0KKw0KK0FzIGFuIGV4YW1wbGUNCisNCitAc21hbGxleGFtcGxl DQorQGdyb3VwDQorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiIg0KKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6U0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9cixrLHIscixyLHIiKQ0KKwkobWF0 Y2hfb3BlcmFuZDpTSSAxICJhYXJjaDY0X21vdl9vcGVyYW5kIiAgIiByLHIsayxNLG4sVXN2Iikp XQ0KKyAgIiINCisgICJAQA0KKyAgIG1vdlxcdCV3MCwgJXcxDQorICAgbW92XFx0JXcwLCAldzEN CisgICBtb3ZcXHQldzAsICV3MQ0KKyAgIG1vdlxcdCV3MCwgJTENCisgICAjDQorICAgKiByZXR1 cm4gYWFyY2g2NF9vdXRwdXRfc3ZlX2NudF9pbW1lZGlhdGUgKCdjbnQnLCAnJXgwJywgb3BlcmFu ZHNbMV0pOyINCisgICImJiB0cnVlIg0KKyAgIFsoY29uc3RfaW50IDApXQ0KKyAgQHsNCisgICAg IGFhcmNoNjRfZXhwYW5kX21vdl9pbW1lZGlhdGUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSk7 DQorICAgICBET05FOw0KKyAgQH0NCisgIFsoc2V0X2F0dHIgInR5cGUiICJtb3ZfcmVnLG1vdl9y ZWcsbW92X3JlZyxtb3ZfaW1tLG1vdl9pbW0sbW92X2ltbSIpDQorICAgKHNldF9hdHRyICJhcmNo IiAgICIqLCosKiwqLCosc3ZlIikNCisgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQsNCw0LDQsKiwg IDQiKQ0KK10NCispDQorQGVuZCBncm91cA0KK0BlbmQgc21hbGxleGFtcGxlDQorDQorY2FuIGJl IGJldHRlciBleHByZXNzZWQgYXM6DQorDQorQHNtYWxsZXhhbXBsZQ0KK0Bncm91cA0KKyhkZWZp bmVfaW5zbl9hbmRfc3BsaXQgIiINCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIikNCisJKG1hdGNoX29wZXJhbmQ6U0kgMSAiYWFyY2g2NF9tb3Zfb3Bl cmFuZCIpKV0NCisgICIiDQorICBAe0BAIFtjb25zOiA9MCwgMTsgYXR0cnM6IHR5cGUsIGFyY2gs IGxlbmd0aF0NCisgICAgIFtyICwgciAgOyBtb3ZfcmVnICAsICogICAsIDRdIG1vdlx0JXcwLCAl dzENCisgICAgIFtrICwgciAgOyBtb3ZfcmVnICAsICogICAsIDRdIF4NCisgICAgIFtyICwgayAg OyBtb3ZfcmVnICAsICogICAsIDRdIF4NCisgICAgIFtyICwgTSAgOyBtb3ZfaW1tICAsICogICAs IDRdIG1vdlx0JXcwLCAlMQ0KKyAgICAgW3IgLCBuICA7IG1vdl9pbW0gICwgKiAgICwgKl0gIw0K KyAgICAgW3IgLCBVc3Y7IG1vdl9pbW0gICwgc3ZlICwgNF0gPDwgYWFyY2g2NF9vdXRwdXRfc3Zl X2NudF9pbW1lZGlhdGUgKCJjbnQiLCAiJXgwIiwgb3BlcmFuZHNbMV0pOw0KKyAgQH0NCisgICIm JiB0cnVlIg0KKyAgWyhjb25zdF9pbnQgMCldDQorICBAew0KKyAgICBhYXJjaDY0X2V4cGFuZF9t b3ZfaW1tZWRpYXRlIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pOw0KKyAgICBET05FOw0KKyAg QH0NCispDQorQGVuZCBncm91cA0KK0BlbmQgc21hbGxleGFtcGxlDQorDQorVGhlIHN5bnRheCBy dWxlcyBhcmUgYXMgZm9sbG93czoNCitAaXRlbWl6ZSBAYnVsbGV0DQorQGl0ZW0NCitUZW1wbGF0 ZXMgbXVzdCBzdGFydCB3aXRoIEBzYW1we0B7QEB9IHRvIHVzZSB0aGUgbmV3IHN5bnRheC4NCisN CitAaXRlbQ0KK0BzYW1we0B7QEB9IGlzIGZvbGxvd2VkIGJ5IGEgbGF5b3V0IGluIHBhcmVudGhl c2VzIHdoaWNoIGlzIEBzYW1we2NvbnM6fQ0KK2ZvbGxvd2VkIGJ5IGEgY29tbWEtc2VwYXJhdGVk IGxpc3Qgb2YgQGNvZGV7bWF0Y2hfb3BlcmFuZH0vQGNvZGV7bWF0Y2hfc2NyYXRjaH0NCitvcGVy YW5kIG51bWJlcnMsIHRoZW4gYSBzZW1pY29sb24sIGZvbGxvd2VkIGJ5IHRoZSBzYW1lIGZvciBh dHRyaWJ1dGVzDQorKEBzYW1we2F0dHJzOn0pLiAgT3BlcmFuZCBtb2RpZmllcnMgY2FuIGJlIHBs YWNlZCBpbiB0aGlzIHNlY3Rpb24gZ3JvdXAgYXMgd2VsbC4NCitCb3RoIHNlY3Rpb25zIGFyZSBv cHRpb25hbCAoc28geW91IGNhbiB1c2Ugb25seSBAc2FtcHtjb25zfSwgb3Igb25seQ0KK0BzYW1w e2F0dHJzfSwgb3IgYm90aCksIGFuZCBAc2FtcHtjb25zfSBtdXN0IGNvbWUgYmVmb3JlIEBzYW1w e2F0dHJzfSBpZg0KK3ByZXNlbnQuDQorDQorQGl0ZW0NCitFYWNoIGFsdGVybmF0aXZlIGJlZ2lu cyB3aXRoIGFueSBhbW91bnQgb2Ygd2hpdGVzcGFjZS4NCisNCitAaXRlbQ0KK0ZvbGxvd2luZyB0 aGUgd2hpdGVzcGFjZSBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mICJjb25zdHJhaW50cyIg YW5kL29yDQorImF0dHJpYnV0ZXMiIHdpdGhpbiBicmFja2V0cyBAY29kZXtbXX0sIHdpdGggc2Vj dGlvbnMgc2VwYXJhdGVkIGJ5IGEgc2VtaWNvbG9uLg0KKw0KK0BpdGVtDQorU2hvdWxkIHlvdSB3 YW50IHRvIGNvcHkgdGhlIHByZXZpb3VzIGFzbSBsaW5lLCB0aGUgc3ltYm9sIEBjb2Rle159IGNh biBiZSB1c2VkLg0KK1RoaXMgYWxsb3dzIGxlc3MgY29weSBwYXN0aW5nIGJldHdlZW4gYWx0ZXJu YXRpdmUgYW5kIHJlZHVjZXMgdGhlIG51bWJlciBvZg0KK2xpbmVzIHRvIHVwZGF0ZSBvbiBjaGFu Z2VzLg0KKw0KK0BpdGVtDQorV2hlbiB1c2luZyBDIGZ1bmN0aW9ucyBmb3Igb3V0cHV0LCB0aGUg aWRpb20gQHNhbXB7KiByZXR1cm4gQHZhcntmdW5jdGlvbn07fQ0KK2NhbiBiZSByZXBsYWNlZCB3 aXRoIHRoZSBzaG9ydGhhbmQgQHNhbXB7PDwgQHZhcntmdW5jdGlvbn07fS4NCisNCitAaXRlbQ0K K0ZvbGxvd2luZyB0aGUgY2xvc2luZyBAc2FtcHtdfSBpcyBhbnkgYW1vdW50IG9mIHdoaXRlc3Bh Y2UsIGFuZCB0aGVuIHRoZSBhY3R1YWwNCithc20gb3V0cHV0Lg0KKw0KK0BpdGVtDQorU3BhY2Vz IGFyZSBhbGxvd2VkIGluIHRoZSBsaXN0ICh0aGV5IHdpbGwgc2ltcGx5IGJlIHJlbW92ZWQpLg0K Kw0KK0BpdGVtDQorQWxsIGNvbnN0cmFpbnQgYWx0ZXJuYXRpdmVzIHNob3VsZCBiZSBzcGVjaWZp ZWQuICBGb3IgZXhhbXBsZSwgYSBsaXN0IG9mDQorb2YgdGhyZWUgYmxhbmsgYWx0ZXJuYXRpdmVz IHNob3VsZCBiZSB3cml0dGVuIEBzYW1we1ssLF19IHJhdGhlciB0aGFuDQorQHNhbXB7W119Lg0K Kw0KK0BpdGVtDQorQWxsIGF0dHJpYnV0ZSBhbHRlcm5hdGl2ZXMgc2hvdWxkIGJlIG5vbi1lbXB0 eSwgd2l0aCBAc2FtcHsqfQ0KK3JlcHJlc2VudGluZyB0aGUgZGVmYXVsdCBhdHRyaWJ1dGUgdmFs dWUuICBGb3IgZXhhbXBsZSwgYSBsaXN0IG9mIHRocmVlDQorZGVmYXVsdCBhdHRyaWJ1dGUgdmFs dWVzIHNob3VsZCBiZSB3cml0dGVuIEBzYW1we1sqLCosKl19IHJhdGhlciB0aGFuDQorQHNhbXB7 W119Lg0KKw0KKw0KK0BpdGVtDQorV2l0aGluIGFuIEBzYW1we0B7QEB9IGJsb2NrIGJvdGggbXVs dGlsaW5lIGFuZCBzaW5nbGVsaW5lIEMgY29tbWVudHMgYXJlDQorYWxsb3dlZCwgYnV0IHdoZW4g dXNlZCBvdXRzaWRlIG9mIGEgQyBibG9jayB0aGV5IG11c3QgYmUgdGhlIG9ubHkgbm9uLXdoaXRl c3BhY2UNCitibG9ja3Mgb24gdGhlIGxpbmUuDQorDQorQGl0ZW0NCitXaXRoaW4gYW4gQHNhbXB7 QHtAQH0gYmxvY2ssIGFueSBpdGVyYXRvcnMgdGhhdCBkbyBub3QgZ2V0IGV4cGFuZGVkIHdpbGwg cmVzdWx0DQoraW4gYW4gZXJyb3IuICBJZiBmb3Igc29tZSByZWFzb24gaXQgaXMgcmVxdWlyZWQg dG8gaGF2ZSBAY29kZXs8fSBvciBAY29kZXs+fSBpbg0KK3RoZSBvdXRwdXQgdGhlbiB0aGVzZSBt dXN0IGJlIGVzY2FwZWQgdXNpbmcgQGJhY2tzbGFzaGNoYXJ7fS4NCisNCitAaXRlbQ0KK0l0IGlz IHBvc3NpYmxlIHRvIHVzZSB0aGUgQHNhbXB7YXR0cnN9IGxpc3QgdG8gc3BlY2lmeSBzb21lIGF0 dHJpYnV0ZXMgYW5kIHRvDQordXNlIHRoZSBub3JtYWwgQGNvZGV7c2V0X2F0dHJ9IHN5bnRheCB0 byBzcGVjaWZ5IG90aGVyIGF0dHJpYnV0ZXMuICBUaGVyZSBtdXN0DQorbm90IGJlIGFueSBvdmVy bGFwIGJldHdlZW4gdGhlIHR3byBsaXN0cy4NCisNCitJbiBvdGhlciB3b3JkcywgdGhlIGZvbGxv d2luZyBpcyB2YWxpZDoNCitAc21hbGxleGFtcGxlDQorQGdyb3VwDQorKGRlZmluZV9pbnNuX2Fu ZF9zcGxpdCAiIg0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibm9uaW1tZWRpYXRlX29w ZXJhbmQiKQ0KKwkobWF0Y2hfb3BlcmFuZDpTSSAxICJhYXJjaDY0X21vdl9vcGVyYW5kIikpXQ0K KyAgIiINCisgIEB7QEAgW2NvbnM6IDAsIDE7IGF0dHJzOiB0eXBlLCBhcmNoLCBsZW5ndGhdQH0N CisgIEBkb3Rze30gDQorICBbKHNldF9hdHRyICJmb28iICJtb3ZfaW1tIildDQorKQ0KK0BlbmQg Z3JvdXANCitAZW5kIHNtYWxsZXhhbXBsZQ0KKw0KK2J1dCB0aGlzIGlzIG5vdCB2YWxpZDoNCitA c21hbGxleGFtcGxlDQorQGdyb3VwDQorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiIg0KKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQ0KKwkobWF0Y2hf b3BlcmFuZDpTSSAxICJhYXJjaDY0X21vdl9vcGVyYW5kIikpXQ0KKyAgIiINCisgIEB7QEAgW2Nv bnM6IDAsIDE7IGF0dHJzOiB0eXBlLCBhcmNoLCBsZW5ndGhdQH0NCisgIEBkb3Rze30gDQorICBb KHNldF9hdHRyICJhcmNoIiAiYmFyIikNCisgICAoc2V0X2F0dHIgImZvbyIgIm1vdl9pbW0iKV0N CispDQorQGVuZCBncm91cA0KK0BlbmQgc21hbGxleGFtcGxlDQorDQorYmVjYXVzZSB5b3UgY2Fu J3QgbWl4IGFuZCBtYXRjaCBuZXcgYW5kIG9sZCBzeW50YXguDQorDQogQG5vZGUgUHJlZGljYXRl cw0KIEBzZWN0aW9uIFByZWRpY2F0ZXMNCiBAY2luZGV4IHByZWRpY2F0ZXMNCmRpZmYgLS1naXQg YS9nY2MvZ2Vub3V0cHV0LmNjIGIvZ2NjL2dlbm91dHB1dC5jYw0KaW5kZXggMTYzZThkZmVmNGNh MmMyYzkyY2UxY2YwMDFlZTZiZTQwYTU0Y2EzZS4uM2ZiZGRlNzBkZjMwZDIzYTExYjIzZDU5ZWVm ZTk1Yjg2ZjE0OGM3NiAxMDA2NDQNCi0tLSBhL2djYy9nZW5vdXRwdXQuY2MNCisrKyBiL2djYy9n ZW5vdXRwdXQuY2MNCkBAIC0xNTcsNiArMTU3LDcgQEAgcHVibGljOg0KICAgaW50IG5fYWx0ZXJu YXRpdmVzOwkJLyogTnVtYmVyIG9mIGFsdGVybmF0aXZlcyBpbiBlYWNoIGNvbnN0cmFpbnQgKi8N CiAgIGludCBvcGVyYW5kX251bWJlcjsJCS8qIE9wZXJhbmQgaW5kZXggaW4gdGhlIGJpZyBhcnJh eS4gICovDQogICBpbnQgb3V0cHV0X2Zvcm1hdDsJCS8qIElOU05fT1VUUFVUX0ZPUk1BVF8qLiAg Ki8NCisgIGJvb2wgY29tcGFjdF9zeW50YXhfcDsNCiAgIHN0cnVjdCBvcGVyYW5kX2RhdGEgb3Bl cmFuZFtNQVhfTUFYX09QRVJBTkRTXTsNCiB9Ow0KIA0KQEAgLTcwMCwxMiArNzAxLDUxIEBAIHBy b2Nlc3NfdGVtcGxhdGUgKGNsYXNzIGRhdGEgKmQsIGNvbnN0IGNoYXIgKnRlbXBsYXRlX2NvZGUp DQogCSAgaWYgKHNwICE9IGVwKQ0KIAkgICAgbWVzc2FnZV9hdCAoZC0+bG9jLCAidHJhaWxpbmcg d2hpdGVzcGFjZSBpbiBvdXRwdXQgdGVtcGxhdGUiKTsNCiANCi0JICB3aGlsZSAoY3AgPCBzcCkN CisJICAvKiBDaGVjayBmb3IgYW55IHVuZXhwYW5kZWQgaXRlcmF0b3JzLiAgKi8NCisJICBpZiAo YnBbMF0gIT0gJyonICYmIGQtPmNvbXBhY3Rfc3ludGF4X3ApDQogCSAgICB7DQotCSAgICAgIHB1 dGNoYXIgKCpjcCk7DQotCSAgICAgIGNwKys7DQorCSAgICAgIGNvbnN0IGNoYXIgKnAgPSBjcDsN CisJICAgICAgY29uc3QgY2hhciAqbGFzdF9icmFja2V0ID0gbnVsbHB0cjsNCisJICAgICAgd2hp bGUgKHAgPCBzcCkNCisJCXsNCisJCSAgaWYgKCpwID09ICdcXCcgJiYgcCArIDEgPCBzcCkNCisJ CSAgICB7DQorCQkgICAgICBwdXRjaGFyICgqcCk7DQorCQkgICAgICBwdXRjaGFyICgqKHArMSkp Ow0KKwkJICAgICAgcCArPSAyOw0KKwkJICAgICAgY29udGludWU7DQorCQkgICAgfQ0KKw0KKwkJ ICBpZiAoKnAgPT0gJz4nICYmIGxhc3RfYnJhY2tldCAmJiAqbGFzdF9icmFja2V0ID09ICc8JykN CisJCSAgICB7DQorCQkgICAgICBpbnQgbGVuID0gcCAtIGxhc3RfYnJhY2tldDsNCisJCSAgICAg IGZhdGFsX2F0IChkLT5sb2MsICJ1bnJlc29sdmVkIGl0ZXJhdG9yICclLipzJyBpbiAnJXMnIiwN CisJCQkJbGVuIC0gMSwgbGFzdF9icmFja2V0ICsgMSwgY3ApOw0KKwkJICAgIH0NCisJCSAgZWxz ZSBpZiAoKnAgPT0gJzwnIHx8ICpwID09ICc+JykNCisJCSAgICBsYXN0X2JyYWNrZXQgPSBwOw0K Kw0KKwkJICBwdXRjaGFyICgqcCk7DQorCQkgIHAgKz0gMTsNCisJCX0NCisNCisJICAgICAgaWYg KGxhc3RfYnJhY2tldCkNCisJCXsNCisJCSAgY2hhciAqbmwgPSBzdHJjaHIgKGNvbnN0X2Nhc3Q8 Y2hhcio+IChjcCksICdcbicpOw0KKwkJICBpZiAobmwpDQorCQkgICAgKm5sID0gJ1wwJzsNCisJ CSAgZmF0YWxfYXQgKGQtPmxvYywgInVubWF0Y2hlZCBhbmdsZSBicmFja2V0cywgbGlrZWx5IGFu ICINCisJCQkgICAgImVycm9yIGluIGl0ZXJhdG9yIHN5bnRheCBpbiAlcyIsIGNwKTsNCisJCX0N CisJICAgIH0NCisJICBlbHNlDQorCSAgICB7DQorCSAgICAgIHdoaWxlIChjcCA8IHNwKQ0KKwkJ cHV0Y2hhciAoKihjcCsrKSk7DQogCSAgICB9DQogDQorCSAgY3AgPSBzcDsNCisNCiAJICBpZiAo IWZvdW5kX3N0YXIpDQogCSAgICBwdXRzICgiXCIsIik7DQogCSAgZWxzZSBpZiAoKmJwICE9ICcq JykNCkBAIC04ODEsNiArOTIxLDggQEAgZ2VuX2luc24gKG1kX3J0eF9pbmZvICppbmZvKQ0KICAg ZWxzZQ0KICAgICBkLT5uYW1lID0gMDsNCiANCisgIGQtPmNvbXBhY3Rfc3ludGF4X3AgPSBjb21w YWN0X3N5bnRheC5jb250YWlucyAoaW5zbik7DQorDQogICAvKiBCdWlsZCB1cCB0aGUgbGlzdCBp biB0aGUgc2FtZSBvcmRlciBhcyB0aGUgaW5zbnMgYXJlIHNlZW4NCiAgICAgIGluIHRoZSBtYWNo aW5lIGRlc2NyaXB0aW9uLiAgKi8NCiAgIGQtPm5leHQgPSAwOw0KZGlmZiAtLWdpdCBhL2djYy9n ZW5zdXBwb3J0LmggYi9nY2MvZ2Vuc3VwcG9ydC5oDQppbmRleCBhMWVkZmJkNzE5MDhiNjI0NGI0 MGY4MDFjNmMwMTA3NGRlNTY3NzdlLi43OTI1ZTIyZWQ0MTg3Njc1NzY1NjdjYWQ1ODNiZGRmODNj MDg0NmIxIDEwMDY0NA0KLS0tIGEvZ2NjL2dlbnN1cHBvcnQuaA0KKysrIGIvZ2NjL2dlbnN1cHBv cnQuaA0KQEAgLTIwLDYgKzIwLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUNCiAjaWZuZGVmIEdDQ19HRU5TVVBQT1JUX0gNCiAjZGVmaW5lIEdD Q19HRU5TVVBQT1JUX0gNCiANCisjaW5jbHVkZSAiaGFzaC1zZXQuaCINCiAjaW5jbHVkZSAicmVh ZC1tZC5oIg0KIA0KIHN0cnVjdCBvYnN0YWNrOw0KQEAgLTIxOCw2ICsyMTksOCBAQCBzdHJ1Y3Qg cGF0dGVybl9zdGF0cw0KICAgaW50IG51bV9vcGVyYW5kX3ZhcnM7DQogfTsNCiANCitleHRlcm4g aGFzaF9zZXQ8cnR4PiBjb21wYWN0X3N5bnRheDsNCisNCiBleHRlcm4gdm9pZCBnZXRfcGF0dGVy bl9zdGF0cyAoc3RydWN0IHBhdHRlcm5fc3RhdHMgKnJhbmdlcywgcnR2ZWMgdmVjKTsNCiBleHRl cm4gdm9pZCBjb21wdXRlX3Rlc3RfY29kZXMgKHJ0eCwgZmlsZV9sb2NhdGlvbiwgY2hhciAqKTsN CiBleHRlcm4gZmlsZV9sb2NhdGlvbiBnZXRfZmlsZV9sb2NhdGlvbiAocnR4KTsNCmRpZmYgLS1n aXQgYS9nY2MvZ2Vuc3VwcG9ydC5jYyBiL2djYy9nZW5zdXBwb3J0LmNjDQppbmRleCBmOWVmYzZl Yjc1NzJhNDRiOGJiMTU0YjBiMjJiZTM4MTViZDBkMjQ0Li43YjcwNDI4NDE1M2YzNzAyYmMwMjMx OTRkOWVmMzk0ZDg3MjJjM2JkIDEwMDY0NA0KLS0tIGEvZ2NjL2dlbnN1cHBvcnQuY2MNCisrKyBi L2djYy9nZW5zdXBwb3J0LmNjDQpAQCAtMTgsNiArMTgsOCBAQA0KICAgIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovDQogDQogI2luY2x1ZGUgImJjb25maWcuaCINCisjZGVmaW5l IElOQ0xVREVfU1RSSU5HDQorI2RlZmluZSBJTkNMVURFX1ZFQ1RPUg0KICNpbmNsdWRlICJzeXN0 ZW0uaCINCiAjaW5jbHVkZSAiY29yZXR5cGVzLmgiDQogI2luY2x1ZGUgInRtLmgiDQpAQCAtMzMs NiArMzUsOCBAQA0KIHN0YXRpYyBydHggb3BlcmFuZF9kYXRhW01BWF9PUEVSQU5EU107DQogc3Rh dGljIHJ0eCBtYXRjaF9vcGVyYW5kX2VudHJpZXNfaW5fcGF0dGVybltNQVhfT1BFUkFORFNdOw0K IHN0YXRpYyBjaGFyIHVzZWRfb3BlcmFuZHNfbnVtYmVyc1tNQVhfT1BFUkFORFNdOw0KKy8qIExp c3Qgb2YgZW50cmllcyB3aGljaCBhcmUgcGFydCBvZiB0aGUgbmV3IHN5bnRheC4gICovDQoraGFz aF9zZXQ8cnR4PiBjb21wYWN0X3N5bnRheDsNCiANCiANCiAvKiBJbiBjYXNlIHNvbWUgbWFjcm9z IHVzZWQgYnkgZmlsZXMgd2UgaW5jbHVkZSBuZWVkIGl0LCBkZWZpbmUgdGhpcyBoZXJlLiAgKi8N CkBAIC01NDUsNiArNTQ5LDQ4NSBAQCBnZW5fcmV3cml0ZV9zZXF1ZW5jZSAocnR2ZWMgdmVjKQ0K ICAgcmV0dXJuIG5ld192ZWM7DQogfQ0KIA0KKy8qIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGhhbmRs aW5nIHRoZSBjb21wYWN0IHN5bnRheCBmb3IgY29uc3RyYWludHMgYW5kDQorICAgYXR0cmlidXRl cy4NCisNCisgICBUaGUgbm9ybWFsIHN5bnRheCBsb29rcyBsaWtlIHRoaXM6DQorDQorICAgICAg IC4uLg0KKyAgICAgICAobWF0Y2hfb3BlcmFuZDogMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAicixJ LGsiKQ0KKyAgICAgICAobWF0Y2hfb3BlcmFuZDogMiAic19yZWdpc3Rlcl9vcGVyYW5kIiAicixr LEkiKQ0KKyAgICAgICAuLi4NCisgICAgICAgIkANCisJPGFzbT4NCisJPGFzbT4NCisJPGFzbT4i DQorICAgICAgIC4uLg0KKyAgICAgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQsOCw4IikNCisNCisg ICBUaGUgY29tcGFjdCBzeW50YXggbG9va3MgbGlrZSB0aGlzOg0KKw0KKyAgICAgICAuLi4NCisg ICAgICAgKG1hdGNoX29wZXJhbmQ6IDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIpDQorICAgICAgICht YXRjaF9vcGVyYW5kOiAyICJzX3JlZ2lzdGVyX29wZXJhbmQiKQ0KKyAgICAgICAuLi4NCisgICAg ICAge0AgW2NvbnM6IDAsIDI7IGF0dHJzOiBsZW5ndGhdDQorCVtyLHI7IDRdIDxhc20+DQorCVtJ LGs7IDhdIDxhc20+DQorCVtrLEk7IDhdIDxhc20+DQorICAgICAgIH0NCisgICAgICAgLi4uDQor ICAgICAgIFs8b3RoZXIgYXR0cmlidXRlcz5dDQorDQorICAgVGhpcyBpcyB0aGUgb25seSBwbGFj ZSB3aGVyZSB0aGlzIHN5bnRheCBuZWVkcyB0byBiZSBoYW5kbGVkLiAgUmVsZXZhbnQNCisgICBw YXR0ZXJucyBhcmUgdHJhbnNmb3JtZWQgZnJvbSBjb21wYWN0IHRvIHRoZSBub3JtYWwgc3ludGF4 IGJlZm9yZSB0aGV5IGFyZQ0KKyAgIHF1ZXVlZCwgc28gbm9uZSBvZiB0aGUgZ2VuKiBwcm9ncmFt cyBuZWVkIHRvIGtub3cgYWJvdXQgdGhpcyBzeW50YXggYXQgYWxsLg0KKw0KKyAgIENvbnZlcnNp b24gcHJvY2VzcyAoY29udmVydF9zeW50YXgpOg0KKw0KKyAgIDApIENoZWNrIHRoYXQgcGF0dGVy biBhY3R1YWxseSB1c2VzIG5ldyBzeW50YXggKGNoZWNrIGZvciB7QCAuLi4gfSkuDQorDQorICAg MSkgR2V0IHRoZSAibGF5b3V0IiwgaS5lLiB0aGUgIltjb25zOiAwIDI7IGF0dHJzOiBsZW5ndGhd IiBmcm9tIHRoZSBhYm92ZQ0KKyAgICAgIGV4YW1wbGUuICBjb25zIG11c3QgY29tZSBmaXJzdDsg Ym90aCBhcmUgb3B0aW9uYWwuIFNldCB1cCB0d28gdmVjcywNCisgICAgICBjb252ZWMgYW5kIGF0 dHJ2ZWMsIGZvciBob2xkaW5nIHRoZSByZXN1bHRzIG9mIHRoZSB0cmFuc2Zvcm1hdGlvbi4NCisN CisgICAyKSBGb3IgZWFjaCBhbHRlcm5hdGl2ZTogcGFyc2UgdGhlIGxpc3Qgb2YgY29uc3RyYWlu dHMgYW5kL29yIGF0dHJpYnV0ZXMsDQorICAgICAgYW5kIGVucXVldWUgdGhlbSBpbiB0aGUgcmVs ZXZhbnQgbGlzdHMgaW4gY29udmVjIGFuZCBhdHRydmVjLiAgQnkgdGhlIGVuZA0KKyAgICAgIG9m IHRoaXMgcHJvY2VzcywgY29udmVjW05dLmNvbiBhbmQgYXR0cnZlY1tOXS5jb24gc2hvdWxkIGNv bnRhaW4gcmVndWxhcg0KKyAgICAgIHN5bnRheCBjb25zdHJhaW50L2F0dHJpYnV0ZSBsaXN0cyBs aWtlICJyLEksayIuICBDb3B5IHRoZSBhc20gdG8gYSBzdHJpbmcNCisgICAgICBhcyB3ZSBnby4N CisNCisgICAzKSBTZWFyY2ggdGhlIHJ0eCBhbmQgd3JpdGUgdGhlIGNvbnN0cmFpbnQgYW5kIGF0 dHJpYnV0ZSBsaXN0cyBpbnRvIHRoZQ0KKyAgICAgIGNvcnJlY3QgcGxhY2VzLiBXcml0ZSB0aGUg YXNtIGJhY2sgaW50byB0aGUgdGVtcGxhdGUuICAqLw0KKw0KKy8qIEhlbHBlciBjbGFzcyBmb3Ig c2h1ZmZsaW5nIGNvbnN0cmFpbnRzL2F0dHJpYnV0ZXMgaW4gY29udmVydF9zeW50YXggYW5kDQor ICAgYWRkX2NvbnN0cmFpbnRzL2FkZF9hdHRyaWJ1dGVzLiAgVGhpcyBpbmNsdWRlcyBjb21tYXMg YnV0IG5vdCB3aGl0ZXNwYWNlLiAgKi8NCisNCitjbGFzcyBjb25saXN0IHsNCitwcml2YXRlOg0K KyAgc3RkOjpzdHJpbmcgY29uOw0KKw0KK3B1YmxpYzoNCisgIHN0ZDo6c3RyaW5nIG5hbWU7DQor ICBpbnQgaWR4ID0gLTE7DQorDQorICBjb25saXN0ICgpID0gZGVmYXVsdDsNCisNCisgIC8qIFtu cy4ubnMgKyBsZW4pIHNob3VsZCBiZSBhIHN0cmluZyB3aXRoIHRoZSBpZCBvZiB0aGUgcnR4IHRv IG1hdGNoDQorICAgICBpLmUuIGlmIHJ0eCBpcyB0aGUgcmVsZXZhbnQgbWF0Y2hfb3BlcmFuZCBv ciBtYXRjaF9zY3JhdGNoIHRoZW4NCisgICAgIFtucy4ubnMgKyBsZW4pIHNob3VsZCBlcXVhbCBp dG9hIChYSU5UIChydHgsIDApKSwgYW5kIGlmIHNldF9hdHRyIHRoZW4NCisgICAgIFtucy4ubnMg KyBsZW4pIHNob3VsZCBlcXVhbCBYU1RSIChydHgsIDApLiAgKi8NCisgIGNvbmxpc3QgKGNvbnN0 IGNoYXIgKm5zLCB1bnNpZ25lZCBpbnQgbGVuLCBib29sIG51bWVyaWMpDQorICB7DQorICAgIC8q IFRyaW0gbGVhZGluZyB3aGl0ZXNwYWNlcy4gICovDQorICAgIHdoaWxlIChJU0JMQU5LICgqbnMp KQ0KKyAgICAgIHsNCisJbnMrKzsNCisJbGVuLS07DQorICAgICAgfQ0KKw0KKyAgICAvKiBUcmlt IHRyYWlsaW5nIHdoaXRlc3BhY2UuICAqLw0KKyAgICBmb3IgKGludCBpID0gbGVuIC0gMTsgaSA+ PSAwOyBpLS0sIGxlbi0tKQ0KKyAgICAgIGlmICghSVNCTEFOSyAobnNbaV0pKQ0KKwlicmVhazsN CisNCisgICAgLyogUGFyc2Ugb2ZmIGFueSBtb2RpZmllcnMuICAqLw0KKyAgICB3aGlsZSAoIUlT QUxOVU0gKCpucykpDQorICAgICAgew0KKwljb24gKz0gKihucysrKTsNCisJbGVuLS07DQorICAg ICAgfQ0KKw0KKyAgICBuYW1lLmFzc2lnbiAobnMsIGxlbik7DQorICAgIGlmIChudW1lcmljKQ0K KyAgICAgIGlkeCA9IHN0ZDo6c3RvaSAobmFtZSk7DQorICB9DQorDQorICAvKiBBZGRzIGEgY2hh cmFjdGVyIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gICovDQorICB2b2lkIGFkZCAoY2hhciBj KQ0KKyAgew0KKyAgICBjb24gKz0gYzsNCisgIH0NCisNCisgIC8qIE91dHB1dCB0aGUgc3RyaW5n IGluIHRoZSBmb3JtIG9mIGEgYnJhbmQtbmV3IGNoYXIgKiwgdGhlbiBlZmZlY3RpdmVseQ0KKyAg ICAgY2xlYXIgdGhlIGludGVybmFsIHN0cmluZyBieSByZXNldHRpbmcgbGVuIHRvIDAuICAqLw0K KyAgY2hhciAqb3V0ICgpDQorICB7DQorICAgIC8qIEZpbmFsIGNoYXJhY3RlciBpcyBhbHdheXMg YSB0cmFpbGluZyBjb21tYSwgc28gc3RyaXAgaXQgb3V0LiAgKi8NCisgICAgY2hhciAqcSA9IHhz dHJuZHVwIChjb24uY19zdHIgKCksIGNvbi5zaXplICgpIC0gMSk7DQorICAgIGNvbi5jbGVhciAo KTsNCisgICAgcmV0dXJuIHE7DQorICB9DQorfTsNCisNCit0eXBlZGVmIHN0ZDo6dmVjdG9yPGNv bmxpc3Q+IHZlY19jb25saXN0Ow0KKw0KKy8qIEFkZCBjb25zdHJhaW50cyB0byBhbiBydHguICBU aGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gcmVtb3ZlX2NvbnN0cmFpbnRzLg0KKyAgIEVycm9y cyBpZiBhZGRpbmcgdGhlIGNvbnN0cmFpbnRzIHdvdWxkIG92ZXJ3cml0ZSBleGlzdGluZyBjb25z dHJhaW50cy4gICovDQorDQorc3RhdGljIHZvaWQNCithZGRfY29uc3RyYWludHMgKHJ0eCBwYXJ0 LCBmaWxlX2xvY2F0aW9uIGxvYywgdmVjX2Nvbmxpc3QgJmNvbnMpDQorew0KKyAgY29uc3QgY2hh ciAqZm9ybWF0X3B0cjsNCisNCisgIGlmIChwYXJ0ID09IE5VTExfUlRYKQ0KKyAgICByZXR1cm47 DQorDQorICAvKiBJZiBtYXRjaF9vcCBvciBtYXRjaF9zY3IsIGNoZWNrIGlmIHdlIGhhdmUgdGhl IHJpZ2h0IG9uZSwgYW5kIGlmIHNvLCBjb3B5DQorICAgICBvdmVyIHRoZSBjb25zdHJhaW50IGxp c3QuICAqLw0KKyAgaWYgKEdFVF9DT0RFIChwYXJ0KSA9PSBNQVRDSF9PUEVSQU5EIHx8IEdFVF9D T0RFIChwYXJ0KSA9PSBNQVRDSF9TQ1JBVENIKQ0KKyAgICB7DQorICAgICAgaW50IGZpZWxkID0g R0VUX0NPREUgKHBhcnQpID09IE1BVENIX09QRVJBTkQgPyAyIDogMTsNCisgICAgICB1bnNpZ25l ZCBpZCA9IFhJTlQgKHBhcnQsIDApOw0KKw0KKyAgICAgIGlmIChpZCA+PSBjb25zLnNpemUgKCkp DQorCWZhdGFsX2F0IChsb2MsICJjb3VsZCBub3QgZmluZCBtYXRjaF9vcGVyYW5kL3NjcmF0Y2gg d2l0aCBpZCAlZCIsIGlkKTsNCisNCisgICAgICBpZiAoY29uc1tpZF0uaWR4ID09IC0xKQ0KKwly ZXR1cm47DQorDQorICAgICAgaWYgKFhTVFIgKHBhcnQsIGZpZWxkKVswXSAhPSAnXDAnKQ0KKwl7 DQorCSAgZXJyb3JfYXQgKGxvYywgImNhbid0IG1peCBub3JtYWwgYW5kIGNvbXBhY3QgY29uc3Ry YWludCBzeW50YXgiKTsNCisJICByZXR1cm47DQorCX0NCisgICAgICBYU1RSIChwYXJ0LCBmaWVs ZCkgPSBjb25zW2lkXS5vdXQgKCk7DQorICAgICAgY29uc1tpZF0uaWR4ID0gLTE7DQorICAgIH0N CisNCisgIGZvcm1hdF9wdHIgPSBHRVRfUlRYX0ZPUk1BVCAoR0VUX0NPREUgKHBhcnQpKTsNCisN CisgIC8qIFJlY3Vyc2l2ZWx5IHNlYXJjaCB0aGUgcnR4LiAgKi8NCisgIGZvciAoaW50IGkgPSAw OyBpIDwgR0VUX1JUWF9MRU5HVEggKEdFVF9DT0RFIChwYXJ0KSk7IGkrKykNCisgICAgc3dpdGNo ICgqZm9ybWF0X3B0cisrKQ0KKyAgICAgIHsNCisgICAgICBjYXNlICdlJzoNCisgICAgICBjYXNl ICd1JzoNCisJYWRkX2NvbnN0cmFpbnRzIChYRVhQIChwYXJ0LCBpKSwgbG9jLCBjb25zKTsNCisJ YnJlYWs7DQorICAgICAgY2FzZSAnRSc6DQorCWlmIChYVkVDIChwYXJ0LCBpKSAhPSBOVUxMKQ0K KwkgIGZvciAoaW50IGogPSAwOyBqIDwgWFZFQ0xFTiAocGFydCwgaSk7IGorKykNCisJICAgIGFk ZF9jb25zdHJhaW50cyAoWFZFQ0VYUCAocGFydCwgaSwgaiksIGxvYywgY29ucyk7DQorCWJyZWFr Ow0KKyAgICAgIGRlZmF1bHQ6DQorCWNvbnRpbnVlOw0KKyAgICAgIH0NCit9DQorDQorLyogQWRk IEFUVFJTIHRvIGRlZmluaXRpb24gWCdzIGF0dHJpYnV0ZSBsaXN0LiAgKi8NCisNCitzdGF0aWMg dm9pZA0KK2FkZF9hdHRyaWJ1dGVzIChydHggeCwgdmVjX2Nvbmxpc3QgJmF0dHJzKQ0KK3sNCisg IHVuc2lnbmVkIGludCBhdHRyX2luZGV4ID0gR0VUX0NPREUgKHgpID09IERFRklORV9JTlNOID8g NCA6IDM7DQorICBydHZlYyBvcmlnID0gWFZFQyAoeCwgYXR0cl9pbmRleCk7DQorICBzaXplX3Qg bl9jdXJyID0gb3JpZyA/IFhWRUNMRU4gKHgsIGF0dHJfaW5kZXgpIDogMDsNCisgIHJ0dmVjIGNv cHkgPSBydHZlY19hbGxvYyAobl9jdXJyICsgYXR0cnMuc2l6ZSAoKSk7DQorDQorICAvKiBDcmVh dGUgYSBzaGFsbG93IGNvcHkgb2YgZXhpc3RpbmcgZW50cmllcy4gICovDQorICBtZW1jcHkgKCZj b3B5LT5lbGVtW2F0dHJzLnNpemUgKCldLCAmb3JpZy0+ZWxlbVswXSwgc2l6ZW9mIChydHgpICog bl9jdXJyKTsNCisgIFhWRUMgKHgsIGF0dHJfaW5kZXgpID0gY29weTsNCisNCisgIC8qIENyZWF0 ZSB0aGUgbmV3IGVsZW1lbnRzLiAgKi8NCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRy cy5zaXplICgpOyBpKyspDQorICAgIHsNCisgICAgICBydHggYXR0ciA9IHJ0eF9hbGxvYyAoU0VU X0FUVFIpOw0KKyAgICAgIFhTVFIgKGF0dHIsIDApID0geHN0cmR1cCAoYXR0cnNbaV0ubmFtZS5j X3N0ciAoKSk7DQorICAgICAgWFNUUiAoYXR0ciwgMSkgPSBhdHRyc1tpXS5vdXQgKCk7DQorICAg ICAgWFZFQ0VYUCAoeCwgYXR0cl9pbmRleCwgaSkgPSBhdHRyOw0KKyAgICB9DQorfQ0KKw0KKy8q IENvbnN1bWVzIHNwYWNlcyBhbmQgdGFicy4gICovDQorDQorc3RhdGljIGlubGluZSB2b2lkDQor c2tpcF9zcGFjZXMgKGNvbnN0IGNoYXIgKipzdHIpDQorew0KKyAgd2hpbGUgKElTQkxBTksgKCoq c3RyKSkNCisgICAgKCpzdHIpKys7DQorfQ0KKw0KKy8qIENvbnN1bWVzIHRoZSBnaXZlbiBjaGFy YWN0ZXIsIGlmIGl0J3MgdGhlcmUuICAqLw0KKw0KK3N0YXRpYyBpbmxpbmUgYm9vbA0KK2V4cGVj dF9jaGFyIChjb25zdCBjaGFyICoqc3RyLCBjaGFyIGMpDQorew0KKyAgaWYgKCoqc3RyICE9IGMp DQorICAgIHJldHVybiBmYWxzZTsNCisgICgqc3RyKSsrOw0KKyAgcmV0dXJuIHRydWU7DQorfQ0K Kw0KKy8qIFBhcnNlcyB0aGUgc2VjdGlvbiBsYXlvdXQgdGhhdCBmb2xsb3dzIGEgIntAIiBpZiB1 c2luZyBuZXcgc3ludGF4LiBCdWlsZHMNCisgICBhIHZlY3RvciBmb3IgYSBzaW5nbGUgc2VjdGlv bi4gRS5nLiBpZiB3ZSBoYXZlICJhdHRyczogbGVuZ3RoLCBhcmNoXS4uLiINCisgICB0aGVuIGxp c3Qgd2lsbCBoYXZlIHR3byBlbGVtZW50cywgdGhlIGZpcnN0IGZvciAibGVuZ3RoIiBhbmQgdGhl IHNlY29uZA0KKyAgIGZvciAiYXJjaCIuICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorcGFyc2Vfc2Vj dGlvbl9sYXlvdXQgKGZpbGVfbG9jYXRpb24gbG9jLCBjb25zdCBjaGFyICoqdGVtcGwsIGNvbnN0 IGNoYXIgKmxhYmVsLA0KKwkJICAgICAgdmVjX2Nvbmxpc3QgJmxpc3QsIGJvb2wgbnVtZXJpYykN Cit7DQorICBjb25zdCBjaGFyICpuYW1lX3N0YXJ0Ow0KKyAgc2l6ZV90IGxhYmVsX2xlbiA9IHN0 cmxlbiAobGFiZWwpOw0KKyAgaWYgKHN0cm5jbXAgKGxhYmVsLCAqdGVtcGwsIGxhYmVsX2xlbikg PT0gMCkNCisgICAgew0KKyAgICAgICp0ZW1wbCArPSBsYWJlbF9sZW47DQorDQorICAgICAgLyog R2F0aGVyIHRoZSBuYW1lcy4gICovDQorICAgICAgd2hpbGUgKCoqdGVtcGwgIT0gJzsnICYmICoq dGVtcGwgIT0gJ10nKQ0KKwl7DQorCSAgc2tpcF9zcGFjZXMgKHRlbXBsKTsNCisJICBuYW1lX3N0 YXJ0ID0gKnRlbXBsOw0KKwkgIGludCBsZW4gPSAwOw0KKwkgIGNoYXIgdmFsID0gKCp0ZW1wbClb bGVuXTsNCisJICB3aGlsZSAodmFsICE9ICcsJyAmJiB2YWwgIT0gJzsnICYmIHZhbCAhPSAnXScp DQorCSAgICB7DQorCSAgICAgIGlmICh2YWwgPT0gMCB8fCB2YWwgPT0gJ1xuJykNCisJICAgICAg ICBmYXRhbF9hdCAobG9jLCAibWlzc2luZyAnXSciKTsNCisJICAgICAgdmFsID0gKCp0ZW1wbClb KytsZW5dOw0KKwkgICAgfQ0KKwkgICp0ZW1wbCArPSBsZW47DQorCSAgaWYgKHZhbCA9PSAnLCcp DQorCSAgICAoKnRlbXBsKSsrOw0KKwkgIGxpc3QucHVzaF9iYWNrIChjb25saXN0IChuYW1lX3N0 YXJ0LCBsZW4sIG51bWVyaWMpKTsNCisJfQ0KKyAgICB9DQorfQ0KKw0KKy8qIFBhcnNlIGEgc2Vj dGlvbiwgYSBzZWN0aW9uIGlzIGRlZmluZWQgYXMgYSBuYW1lZCBzcGFjZSBzZXBhcmF0ZWQgbGlz dCwgZS5nLg0KKw0KKyAgIGZvbzogYSwgYiwgYw0KKw0KKyAgIGlzIGEgc2VjdGlvbiBuYW1lZCAi Zm9vIiB3aXRoIGVudHJpZXMgYSwgYiBhbmQgYy4gICovDQorDQorc3RhdGljIHZvaWQNCitwYXJz ZV9zZWN0aW9uIChjb25zdCBjaGFyICoqdGVtcGwsIHVuc2lnbmVkIGludCBuX2VsZW1zLCB1bnNp Z25lZCBpbnQgYWx0X25vLA0KKwkgICAgICAgdmVjX2Nvbmxpc3QgJmxpc3QsIGZpbGVfbG9jYXRp b24gbG9jLCBjb25zdCBjaGFyICpuYW1lKQ0KK3sNCisgIHVuc2lnbmVkIGludCBpOw0KKw0KKyAg LyogR28gdGhyb3VnaCB0aGUgbGlzdCwgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUsIGFkZGluZyBz YWlkIGNoYXJhY3Rlcg0KKyAgICAgdG8gdGhlIGNvcnJlY3Qgc3RyaW5nLiAgKi8NCisgIGZvciAo aSA9IDA7ICoqdGVtcGwgIT0gJ10nICYmICoqdGVtcGwgIT0gJzsnOyAoKnRlbXBsKSsrKQ0KKyAg ICBpZiAoIUlTQkxBTksgKCoqdGVtcGwpKQ0KKyAgICAgIHsNCisJbGlzdFtpXS5hZGQgKCoqdGVt cGwpOw0KKwlpZiAoKip0ZW1wbCA9PSAnLCcpDQorCSAgew0KKwkgICAgKytpOw0KKwkgICAgaWYg KGkgPT0gbl9lbGVtcykNCisJICAgICAgZmF0YWxfYXQgKGxvYywgInRvbyBtYW55ICVzcyBpbiBh bHRlcm5hdGl2ZSAlZDogZXhwZWN0ZWQgJWQiLA0KKwkJCW5hbWUsIGFsdF9ubywgbl9lbGVtcyk7 DQorCSAgfQ0KKwlpZiAoKip0ZW1wbCA9PSAwIHx8ICoqdGVtcGwgPT0gJ1xuJykNCisJICBmYXRh bF9hdCAobG9jLCAibWlzc2luZyAnXSciKTsNCisgICAgICB9DQorDQorICBpZiAoaSArIDEgPCBu X2VsZW1zKQ0KKyAgICBmYXRhbF9hdCAobG9jLCAidG9vIGZldyAlc3MgaW4gYWx0ZXJuYXRpdmUg JWQ6IGV4cGVjdGVkICVkLCBnb3QgJWQiLA0KKwkgICAgICBuYW1lLCBhbHRfbm8sIG5fZWxlbXMs IGkpOw0KKw0KKyAgbGlzdFtpXS5hZGQgKCcsJyk7DQorfQ0KKw0KKy8qIFRoZSBjb21wYWN0IHN5 bnRheCBoYXMgbW9yZSBjb252aWVuY2Ugc3ludGF4ZXMuICBBcyBzdWNoIHdlIHBvc3QgcHJvY2Vz cw0KKyAgIHRoZSBsaW5lcyB0byBnZXQgdGhlbSBiYWNrIHRvIHNvbWV0aGluZyB0aGUgbm9ybWFs IHN5bnRheCB1bmRlcnN0YW5kcy4gICovDQorDQorc3RhdGljIHZvaWQNCitwcmVwcm9jZXNzX2Nv bXBhY3Rfc3ludGF4IChmaWxlX2xvY2F0aW9uIGxvYywgaW50IGFsdF9ubywgc3RkOjpzdHJpbmcg JmxpbmUsDQorCQkJICAgc3RkOjpzdHJpbmcgJmxhc3RfbGluZSkNCit7DQorICAvKiBDaGVjayBp ZiB3ZSdyZSBjb3B5aW5nIHRoZSBsYXN0IHN0YXRlbWVudC4gICovDQorICBpZiAobGluZS5maW5k ICgiXiIpID09IDAgJiYgbGluZS5zaXplICgpID09IDEpDQorICAgIHsNCisgICAgICBpZiAobGFz dF9saW5lLmVtcHR5ICgpKQ0KKwlmYXRhbF9hdCAobG9jLCAiZm91bmQgaW5zdHJ1Y3Rpb24gdG8g Y29weSBwcmV2aW91cyBsaW5lICheKSBpbiINCisJCSAgICAgICAiYWx0ZXJuYXRpdmUgJWQgYnV0 IG5vIHByZXZpb3VzIGxpbmUgdG8gY29weSIsIGFsdF9ubyk7DQorICAgICAgbGluZSA9IGxhc3Rf bGluZTsNCisgICAgICByZXR1cm47DQorICAgIH0NCisNCisgIHN0ZDo6c3RyaW5nIHJlc3VsdDsN CisgIHN0ZDo6c3RyaW5nIGJ1ZmZlcjsNCisgIC8qIENoZWNrIGlmIHdlIGhhdmUgPDwgd2hpY2gg bWVhbnMgcmV0dXJuIGMgc3RhdGVtZW50LiAgKi8NCisgIGlmIChsaW5lLmZpbmQgKCI8PCIpID09 IDApDQorICAgIHsNCisgICAgICByZXN1bHQuYXBwZW5kICgiKiByZXR1cm4gIik7DQorICAgICAg Y29uc3QgY2hhciAqY2h1bmsgPSBsaW5lLmNfc3RyICgpICsgMjsNCisgICAgICBza2lwX3NwYWNl cyAoJmNodW5rKTsNCisgICAgICByZXN1bHQuYXBwZW5kIChjaHVuayk7DQorICAgIH0NCisgIGVs c2UNCisgICAgcmVzdWx0LmFwcGVuZCAobGluZSk7DQorDQorICBsaW5lID0gcmVzdWx0Ow0KKyAg cmV0dXJuOw0KK30NCisNCisvKiBDb252ZXJ0cyBhbiBydHggZnJvbSBjb21wYWN0IHN5bnRheCB0 byBub3JtYWwgc3ludGF4IGlmIHBvc3NpYmxlLiAgKi8NCisNCitzdGF0aWMgdm9pZA0KK2NvbnZl cnRfc3ludGF4IChydHggeCwgZmlsZV9sb2NhdGlvbiBsb2MpDQorew0KKyAgaW50IGFsdF9ubzsN CisgIHVuc2lnbmVkIGludCB0ZW1wbF9pbmRleDsNCisgIGNvbnN0IGNoYXIgKnRlbXBsOw0KKyAg dmVjX2Nvbmxpc3QgdGNvbnZlYywgY29udmVjLCBhdHRydmVjOw0KKw0KKyAgdGVtcGxfaW5kZXgg PSBHRVRfQ09ERSAoeCkgPT0gREVGSU5FX0lOU04gPyAzIDogMjsNCisNCisgIHRlbXBsID0gWFRN UEwgKHgsIHRlbXBsX2luZGV4KTsNCisNCisgIC8qIFRlbXBsYXRlcyB3aXRoIGNvbnN0cmFpbnRz IHN0YXJ0IHdpdGggIntAIi4gICovDQorICBpZiAoc3RybmNtcCAoIip7QCIsIHRlbXBsLCAzKSkN CisgICAgcmV0dXJuOw0KKw0KKyAgLyogR2V0IHRoZSBsYXlvdXQgZm9yIHRoZSB0ZW1wbGF0ZS4g ICovDQorICB0ZW1wbCArPSAzOw0KKyAgc2tpcF9zcGFjZXMgKCZ0ZW1wbCk7DQorDQorICBpZiAo IWV4cGVjdF9jaGFyICgmdGVtcGwsICdbJykpDQorICAgIGZhdGFsX2F0IChsb2MsICJleHBlY2lu ZyBgWycgdG8gYmVnaW4gc2VjdGlvbiBsaXN0Iik7DQorDQorICBwYXJzZV9zZWN0aW9uX2xheW91 dCAobG9jLCAmdGVtcGwsICJjb25zOiIsIHRjb252ZWMsIHRydWUpOw0KKyAgY29udmVjLnJlc2l6 ZSAodGNvbnZlYy5zaXplICgpKTsNCisNCisgIC8qIENoZWNrIGZvciBhbnkgZHVwbGljYXRlIGNv bnMgZW50cmllcyBhbmQgc29ydCBiYXNlZCBvbiBpLiAgKi8NCisgIGZvciAoYXV0byBlIDogdGNv bnZlYykNCisgICAgew0KKyAgICAgIHVuc2lnbmVkIGlkeCA9IGUuaWR4Ow0KKyAgICAgIGlmIChp ZHggPj0gY29udmVjLnNpemUgKCkpDQorCWNvbnZlYy5yZXNpemUgKGlkeCArIDEpOw0KKw0KKyAg ICAgIGlmIChjb252ZWNbaWR4XS5pZHggPj0gMCkNCisJZmF0YWxfYXQgKGxvYywgImR1cGxpY2F0 ZSBjb25zIG51bWJlciBmb3VuZDogJWQiLCBpZHgpOw0KKyAgICAgIGNvbnZlY1tpZHhdID0gZTsN CisgICAgfQ0KKyAgdGNvbnZlYy5jbGVhciAoKTsNCisNCisgIGlmICgqdGVtcGwgIT0gJ10nKQ0K KyAgICB7DQorICAgICAgaWYgKCp0ZW1wbCA9PSAnOycpDQorCXNraXBfc3BhY2VzICgmKCsrdGVt cGwpKTsNCisgICAgICBwYXJzZV9zZWN0aW9uX2xheW91dCAobG9jLCAmdGVtcGwsICJhdHRyczoi LCBhdHRydmVjLCBmYWxzZSk7DQorICAgIH0NCisNCisgIGlmICghZXhwZWN0X2NoYXIgKCZ0ZW1w bCwgJ10nKSkNCisgICAgZmF0YWxfYXQgKGxvYywgImV4cGVjdGluZyBgXWAgdG8gZW5kIHNlY3Rp b24gbGlzdCAtIHNlY3Rpb24gbGlzdCBtdXN0IGhhdmUgIg0KKwkJICAgImNvbnMgZmlyc3QsIGF0 dHJzIHNlY29uZCIpOw0KKw0KKyAgLyogV2Ugd2lsbCB3cml0ZSB0aGUgdW4tY29uc3RyYWluaWZp ZWQgdGVtcGxhdGUgaW50byBuZXdfdGVtcGwuICAqLw0KKyAgc3RkOjpzdHJpbmcgbmV3X3RlbXBs Ow0KKyAgbmV3X3RlbXBsLmFwcGVuZCAoIkAiKTsNCisNCisgIC8qIFNraXAgdG8gdGhlIGZpcnN0 IHByb3BlciBsaW5lLiAgKi8NCisgIHdoaWxlICgqdGVtcGwrKyAhPSAnXG4nKTsNCisNCisgIGFs dF9ubyA9IDA7DQorICBzdGQ6OnN0cmluZyBsYXN0X2xpbmU7DQorDQorICAvKiBQcm9jZXNzIHRo ZSBhbHRlcm5hdGl2ZXMuICAqLw0KKyAgd2hpbGUgKCoodGVtcGwgLSAxKSAhPSAnXDAnKQ0KKyAg ICB7DQorICAgICAgLyogU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UuICAqLw0KKyAgICAgIHN0ZDo6 c3RyaW5nIGJ1ZmZlcjsNCisgICAgICBza2lwX3NwYWNlcyAoJnRlbXBsKTsNCisNCisgICAgICAv KiBDaGVjayBpZiB3ZSdyZSBhdCB0aGUgZW5kLiAgKi8NCisgICAgICBpZiAodGVtcGxbMF0gPT0g J30nICYmIHRlbXBsWzFdID09ICdcMCcpDQorCWJyZWFrOw0KKw0KKyAgICAgIGlmIChleHBlY3Rf Y2hhciAoJnRlbXBsLCAnWycpKQ0KKwl7DQorCSAgbmV3X3RlbXBsICs9ICdcbic7DQorCSAgbmV3 X3RlbXBsLmFwcGVuZCAoYnVmZmVyKTsNCisJICAvKiBQYXJzZSB0aGUgY29uc3RyYWludCBsaXN0 LCB0aGVuIHRoZSBhdHRyaWJ1dGUgbGlzdC4gICovDQorCSAgaWYgKGNvbnZlYy5zaXplICgpID4g MCkNCisJICAgIHBhcnNlX3NlY3Rpb24gKCZ0ZW1wbCwgY29udmVjLnNpemUgKCksIGFsdF9ubywg Y29udmVjLCBsb2MsDQorCQkJICAgImNvbnN0cmFpbnQiKTsNCisNCisJICBpZiAoYXR0cnZlYy5z aXplICgpID4gMCkNCisJICAgIHsNCisJICAgICAgaWYgKGNvbnZlYy5zaXplICgpID4gMCAmJiAh ZXhwZWN0X2NoYXIgKCZ0ZW1wbCwgJzsnKSkNCisJCWZhdGFsX2F0IChsb2MsICJleHBlY3RlZCBg OycgdG8gc2VwYXJhdGUgY29uc3RyYWludHMgIg0KKwkJCSAgICAgICAiYW5kIGF0dHJpYnV0ZXMg aW4gYWx0ZXJuYXRpdmUgJWQiLCBhbHRfbm8pOw0KKw0KKwkgICAgICBwYXJzZV9zZWN0aW9uICgm dGVtcGwsIGF0dHJ2ZWMuc2l6ZSAoKSwgYWx0X25vLA0KKwkJCSAgICAgYXR0cnZlYywgbG9jLCAi YXR0cmlidXRlIik7DQorCSAgICB9DQorDQorCSAgaWYgKCFleHBlY3RfY2hhciAoJnRlbXBsLCAn XScpKQ0KKwkgICAgZmF0YWxfYXQgKGxvYywgImV4cGVjdGVkIGVuZCBvZiBjb25zdHJhaW50L2F0 dHJpYnV0ZSBsaXN0IGJ1dCAiDQorCQkJICAgIm1pc3NpbmcgYW4gZW5kaW5nIGBdJyBpbiBhbHRl cm5hdGl2ZSAlZCIsIGFsdF9ubyk7DQorCX0NCisgICAgICBlbHNlIGlmICh0ZW1wbFswXSA9PSAn LycgJiYgdGVtcGxbMV0gPT0gJy8nKQ0KKwl7DQorCSAgdGVtcGwgKz0gMjsNCisgCSAgLyogR2xv YiB0aWxsIG5ld2xpbmUgb3IgZW5kIG9mIHN0cmluZy4gICovDQorCSAgd2hpbGUgKCp0ZW1wbCAh PSAnXG4nIHx8ICp0ZW1wbCAhPSAnXDAnKQ0KKwkgICAgdGVtcGwrKzsNCisJICB0ZW1wbCsrOw0K Kw0KKwkgIC8qIFNraXAgYW55IG5ld2xpbmVzIG9yIHdoaXRlc3BhY2VzIG5lZWRlZC4gICovDQor CSAgd2hpbGUgKElTU1BBQ0UoKnRlbXBsKSkNCisJICAgIHRlbXBsKys7DQorCSAgY29udGludWU7 DQorCX0NCisgICAgICBlbHNlIGlmICh0ZW1wbFswXSA9PSAnLycgJiYgdGVtcGxbMV0gPT0gJyon KQ0KKwl7DQorCSAgdGVtcGwgKz0gMjsNCisgCSAgLyogR2xvYiB0aWxsIG5ld2xpbmUgb3IgZW5k IG9mIG11bHRpbGluZSBjb21tZW50LiAgKi8NCisJICB3aGlsZSAodGVtcGxbMF0gIT0gMCAmJiB0 ZW1wbFswXSAhPSAnKicgJiYgdGVtcGxbMV0gIT0gJy8nKQ0KKwkgICAgdGVtcGwrKzsNCisJICB0 ZW1wbCArPSAyOw0KKw0KKwkgIC8qIFNraXAgYW55IG5ld2xpbmVzIG9yIHdoaXRlc3BhY2VzIG5l ZWRlZC4gICovDQorCSAgd2hpbGUgKElTU1BBQ0UoKnRlbXBsKSkNCisJICAgIHRlbXBsKys7DQor CSAgY29udGludWU7DQorCX0NCisgICAgICBlbHNlDQorCWZhdGFsX2F0IChsb2MsICJleHBlY3Rl ZCBjb25zdHJhaW50L2F0dHJpYnV0ZSBsaXN0IGF0IGJlZ2lubmluZyBvZiAiDQorCQkgICAgICAg ImFsdGVybmF0aXZlICVkIGJ1dCBtaXNzaW5nIGEgc3RhcnRpbmcgYFsnIiwgYWx0X25vKTsNCisN CisgICAgICAvKiBTa2lwIHdoaXRlc3BhY2UgYmV0d2VlbiBsaXN0IGFuZCBhc20uICAqLw0KKyAg ICAgICsrdGVtcGw7DQorICAgICAgc2tpcF9zcGFjZXMgKCZ0ZW1wbCk7DQorDQorICAgICAgLyog Q29weSBhc20gdG8gbmV3IHRlbXBsYXRlLiAgKi8NCisgICAgICBzdGQ6OnN0cmluZyBsaW5lOw0K KyAgICAgIHdoaWxlICgqdGVtcGwgIT0gJ1xuJyAmJiAqdGVtcGwgIT0gJ1wwJykNCisJbGluZSAr PSAqdGVtcGwrKzsNCisNCisgICAgICAvKiBBcHBseSBhbnkgcHJlLXByb2Nlc3NpbmcgbmVlZGVk IHRvIHRoZSBsaW5lLiAgKi8NCisgICAgICBwcmVwcm9jZXNzX2NvbXBhY3Rfc3ludGF4IChsb2Ms IGFsdF9ubywgbGluZSwgbGFzdF9saW5lKTsNCisgICAgICBuZXdfdGVtcGwuYXBwZW5kIChsaW5l KTsNCisgICAgICBsYXN0X2xpbmUgPSBsaW5lOw0KKw0KKyAgICAgIC8qIE5vcm1hbCAiKi4uLiIg c3ludGF4IGV4cGVjdHMgdGhlIGNsb3NpbmcgcXVvdGUgdG8gYmUgb24gdGhlIGZpbmFsDQorCSBs aW5lIG9mIGFzbSwgd2hlcmVhcyB3ZSBhbGxvdyB0aGUgY2xvc2luZyAifSIgdG8gYmUgb24gaXRz IG93biBsaW5lLg0KKwkgUG9zdHBvbmUgY29weWluZyB0aGUgJ1xuJyB1bnRpbCB3ZSBrbm93IHRo YXQgdGhlcmUgaXMgYW5vdGhlcg0KKwkgYWx0ZXJuYXRpdmUgaW4gdGhlIGxpc3QuICAqLw0KKyAg ICAgIHdoaWxlIChJU1NQQUNFICgqdGVtcGwpKQ0KKwl0ZW1wbCsrOw0KKyAgICAgICsrYWx0X25v Ow0KKyAgICB9DQorDQorICAvKiBXcml0ZSB0aGUgY29uc3RyYWludHMgYW5kIGF0dHJpYnV0ZXMg aW50byB0aGVpciBwcm9wZXIgcGxhY2VzLiAgKi8NCisgIGlmIChjb252ZWMuc2l6ZSAoKSA+IDAp DQorICAgIGFkZF9jb25zdHJhaW50cyAoeCwgbG9jLCBjb252ZWMpOw0KKw0KKyAgaWYgKGF0dHJ2 ZWMuc2l6ZSAoKSA+IDApDQorICAgIGFkZF9hdHRyaWJ1dGVzICh4LCBhdHRydmVjKTsNCisNCisg IC8qIENvcHkgb3ZlciB0aGUgbmV3IHVuLWNvbnN0cmFpbmlmaWVkIHRlbXBsYXRlLiAgKi8NCisg IFhUTVBMICh4LCB0ZW1wbF9pbmRleCkgPSB4c3RyZHVwIChuZXdfdGVtcGwuY19zdHIgKCkpOw0K Kw0KKyAgLyogUmVnaXN0ZXIgZm9yIGxhdGVyIGNoZWNrcyBkdXJpbmcgaXRlcmF0b3IgZXhwYW5z aW9ucy4gICovDQorICBjb21wYWN0X3N5bnRheC5hZGQgKHgpOw0KK30NCisNCiAvKiBQcm9jZXNz IGEgdG9wIGxldmVsIHJ0eCBpbiBzb21lIHdheSwgcXVldWluZyBhcyBhcHByb3ByaWF0ZS4gICov DQogDQogc3RhdGljIHZvaWQNCkBAIC01NTMsMTAgKzEwMzYsMTIgQEAgcHJvY2Vzc19ydHggKHJ0 eCBkZXNjLCBmaWxlX2xvY2F0aW9uIGxvYykNCiAgIHN3aXRjaCAoR0VUX0NPREUgKGRlc2MpKQ0K ICAgICB7DQogICAgIGNhc2UgREVGSU5FX0lOU046DQorICAgICAgY29udmVydF9zeW50YXggKGRl c2MsIGxvYyk7DQogICAgICAgcXVldWVfcGF0dGVybiAoZGVzYywgJmRlZmluZV9pbnNuX3RhaWws IGxvYyk7DQogICAgICAgYnJlYWs7DQogDQogICAgIGNhc2UgREVGSU5FX0NPTkRfRVhFQzoNCisg ICAgICBjb252ZXJ0X3N5bnRheCAoZGVzYywgbG9jKTsNCiAgICAgICBxdWV1ZV9wYXR0ZXJuIChk ZXNjLCAmZGVmaW5lX2NvbmRfZXhlY190YWlsLCBsb2MpOw0KICAgICAgIGJyZWFrOw0KIA0KQEAg LTYzMSw2ICsxMTE2LDcgQEAgcHJvY2Vzc19ydHggKHJ0eCBkZXNjLCBmaWxlX2xvY2F0aW9uIGxv YykNCiAJYXR0ciA9IFhWRUMgKGRlc2MsIHNwbGl0X2NvZGUgKyAxKTsNCiAJUFVUX0NPREUgKGRl c2MsIERFRklORV9JTlNOKTsNCiAJWFZFQyAoZGVzYywgNCkgPSBhdHRyOw0KKwljb252ZXJ0X3N5 bnRheCAoZGVzYywgbG9jKTsNCiANCiAJLyogUXVldWUgdGhlbS4gICovDQogCWluc25fZWxlbSA9 IHF1ZXVlX3BhdHRlcm4gKGRlc2MsICZkZWZpbmVfaW5zbl90YWlsLCBsb2MpOw0K --_002_VI1PR08MB532501BE8432A4B569870958FF55AVI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb17151.patch" Content-Description: rb17151.patch Content-Disposition: attachment; filename="rb17151.patch"; size=23303; creation-date="Tue, 13 Jun 2023 15:26:24 GMT"; modification-date="Tue, 13 Jun 2023 15:26:34 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9kb2MvbWQudGV4aSBiL2djYy9kb2MvbWQudGV4aQppbmRleCA2YTQz NWViNDQ2MTA5NjA1MTNlOTczOWFjOWFjMWU4YTI3MTgyYzEwLi4zYmQxYmNiYzhiZWRhOWJiYWVh NzFjNjUxMThlY2ZhMmNkYWNlMzM1IDEwMDY0NAotLS0gYS9nY2MvZG9jL21kLnRleGkKKysrIGIv Z2NjL2RvYy9tZC50ZXhpCkBAIC0yNyw2ICsyNyw3IEBAIFNlZSB0aGUgbmV4dCBjaGFwdGVyIGZv ciBpbmZvcm1hdGlvbiBvbiB0aGUgQyBoZWFkZXIgZmlsZS4KICAgICAgICAgICAgICAgICAgICAg ICAgIGZyb20gc3VjaCBhbiBpbnNuLgogKiBPdXRwdXQgU3RhdGVtZW50OjogICAgRm9yIG1vcmUg Z2VuZXJhbGl0eSwgd3JpdGUgQyBjb2RlIHRvIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGFzc2VtYmxlciBjb2RlLgorKiBDb21wYWN0IFN5bnRheDo6ICAgICAgQ29tcGFjdCBz eW50YXggZm9yIHdyaXRpbmcgbWFjaGluZSBkZXNjcmlwdG9ycy4KICogUHJlZGljYXRlczo6ICAg ICAgICAgIENvbnRyb2xsaW5nIHdoYXQga2luZHMgb2Ygb3BlcmFuZHMgY2FuIGJlIHVzZWQKICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiBpbnNuLgogKiBDb25zdHJhaW50czo6ICAgICAg ICAgRmluZS10dW5pbmcgb3BlcmFuZCBzZWxlY3Rpb24uCkBAIC03MTMsNiArNzE0LDE2NyBAQCB5 b3UgY2FuIHVzZSBAc2FtcHsqfSBpbnNpZGUgb2YgYSBAc2FtcHtAQH0gbXVsdGktYWx0ZXJuYXRp dmUgdGVtcGxhdGU6CiBAZW5kIGdyb3VwCiBAZW5kIHNtYWxsZXhhbXBsZQogCitAbm9kZSBDb21w YWN0IFN5bnRheAorQHNlY3Rpb24gQ29tcGFjdCBTeW50YXgKK0BjaW5kZXggY29tcGFjdCBzeW50 YXgKKworV2hlbiBhIEBjb2Rle2RlZmluZV9pbnNufSBvciBAY29kZXtkZWZpbmVfaW5zbl9hbmRf c3BsaXR9IGhhcyBtdWx0aXBsZQorYWx0ZXJuYXRpdmVzIGl0IG1heSBiZSBiZW5lZmljaWFsIHRv IHVzZSB0aGUgY29tcGFjdCBzeW50YXggd2hlbiBzcGVjaWZ5aW5nCithbHRlcm5hdGl2ZXMuCisK K1RoaXMgc3ludGF4IHB1dHMgdGhlIGNvbnN0cmFpbnRzIGFuZCBhdHRyaWJ1dGVzIG9uIHRoZSBz YW1lIGhvcml6b250YWwgbGluZSBhcwordGhlIGluc3RydWN0aW9uIGFzc2VtYmx5IHRlbXBsYXRl LgorCitBcyBhbiBleGFtcGxlCisKK0BzbWFsbGV4YW1wbGUKK0Bncm91cAorKGRlZmluZV9pbnNu X2FuZF9zcGxpdCAiIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJub25pbW1lZGlhdGVf b3BlcmFuZCIgIj1yLGsscixyLHIsciIpCisJKG1hdGNoX29wZXJhbmQ6U0kgMSAiYWFyY2g2NF9t b3Zfb3BlcmFuZCIgICIgcixyLGssTSxuLFVzdiIpKV0KKyAgIiIKKyAgIkBACisgICBtb3ZcXHQl dzAsICV3MQorICAgbW92XFx0JXcwLCAldzEKKyAgIG1vdlxcdCV3MCwgJXcxCisgICBtb3ZcXHQl dzAsICUxCisgICAjCisgICAqIHJldHVybiBhYXJjaDY0X291dHB1dF9zdmVfY250X2ltbWVkaWF0 ZSAoJ2NudCcsICcleDAnLCBvcGVyYW5kc1sxXSk7IgorICAiJiYgdHJ1ZSIKKyAgIFsoY29uc3Rf aW50IDApXQorICBAeworICAgICBhYXJjaDY0X2V4cGFuZF9tb3ZfaW1tZWRpYXRlIChvcGVyYW5k c1swXSwgb3BlcmFuZHNbMV0pOworICAgICBET05FOworICBAfQorICBbKHNldF9hdHRyICJ0eXBl IiAibW92X3JlZyxtb3ZfcmVnLG1vdl9yZWcsbW92X2ltbSxtb3ZfaW1tLG1vdl9pbW0iKQorICAg KHNldF9hdHRyICJhcmNoIiAgICIqLCosKiwqLCosc3ZlIikKKyAgIChzZXRfYXR0ciAibGVuZ3Ro IiAiNCw0LDQsNCwqLCAgNCIpCitdCispCitAZW5kIGdyb3VwCitAZW5kIHNtYWxsZXhhbXBsZQor CitjYW4gYmUgYmV0dGVyIGV4cHJlc3NlZCBhczoKKworQHNtYWxsZXhhbXBsZQorQGdyb3VwCiso ZGVmaW5lX2luc25fYW5kX3NwbGl0ICIiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm5v bmltbWVkaWF0ZV9vcGVyYW5kIikKKwkobWF0Y2hfb3BlcmFuZDpTSSAxICJhYXJjaDY0X21vdl9v cGVyYW5kIikpXQorICAiIgorICBAe0BAIFtjb25zOiA9MCwgMTsgYXR0cnM6IHR5cGUsIGFyY2gs IGxlbmd0aF0KKyAgICAgW3IgLCByICA7IG1vdl9yZWcgICwgKiAgICwgNF0gbW92XHQldzAsICV3 MQorICAgICBbayAsIHIgIDsgbW92X3JlZyAgLCAqICAgLCA0XSBeCisgICAgIFtyICwgayAgOyBt b3ZfcmVnICAsICogICAsIDRdIF4KKyAgICAgW3IgLCBNICA7IG1vdl9pbW0gICwgKiAgICwgNF0g bW92XHQldzAsICUxCisgICAgIFtyICwgbiAgOyBtb3ZfaW1tICAsICogICAsICpdICMKKyAgICAg W3IgLCBVc3Y7IG1vdl9pbW0gICwgc3ZlICwgNF0gPDwgYWFyY2g2NF9vdXRwdXRfc3ZlX2NudF9p bW1lZGlhdGUgKCJjbnQiLCAiJXgwIiwgb3BlcmFuZHNbMV0pOworICBAfQorICAiJiYgdHJ1ZSIK KyAgWyhjb25zdF9pbnQgMCldCisgIEB7CisgICAgYWFyY2g2NF9leHBhbmRfbW92X2ltbWVkaWF0 ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKTsKKyAgICBET05FOworICBAfQorKQorQGVuZCBn cm91cAorQGVuZCBzbWFsbGV4YW1wbGUKKworVGhlIHN5bnRheCBydWxlcyBhcmUgYXMgZm9sbG93 czoKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitUZW1wbGF0ZXMgbXVzdCBzdGFydCB3aXRoIEBz YW1we0B7QEB9IHRvIHVzZSB0aGUgbmV3IHN5bnRheC4KKworQGl0ZW0KK0BzYW1we0B7QEB9IGlz IGZvbGxvd2VkIGJ5IGEgbGF5b3V0IGluIHBhcmVudGhlc2VzIHdoaWNoIGlzIEBzYW1we2NvbnM6 fQorZm9sbG93ZWQgYnkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBAY29kZXttYXRjaF9vcGVy YW5kfS9AY29kZXttYXRjaF9zY3JhdGNofQorb3BlcmFuZCBudW1iZXJzLCB0aGVuIGEgc2VtaWNv bG9uLCBmb2xsb3dlZCBieSB0aGUgc2FtZSBmb3IgYXR0cmlidXRlcworKEBzYW1we2F0dHJzOn0p LiAgT3BlcmFuZCBtb2RpZmllcnMgY2FuIGJlIHBsYWNlZCBpbiB0aGlzIHNlY3Rpb24gZ3JvdXAg YXMgd2VsbC4KK0JvdGggc2VjdGlvbnMgYXJlIG9wdGlvbmFsIChzbyB5b3UgY2FuIHVzZSBvbmx5 IEBzYW1we2NvbnN9LCBvciBvbmx5CitAc2FtcHthdHRyc30sIG9yIGJvdGgpLCBhbmQgQHNhbXB7 Y29uc30gbXVzdCBjb21lIGJlZm9yZSBAc2FtcHthdHRyc30gaWYKK3ByZXNlbnQuCisKK0BpdGVt CitFYWNoIGFsdGVybmF0aXZlIGJlZ2lucyB3aXRoIGFueSBhbW91bnQgb2Ygd2hpdGVzcGFjZS4K KworQGl0ZW0KK0ZvbGxvd2luZyB0aGUgd2hpdGVzcGFjZSBpcyBhIGNvbW1hLXNlcGFyYXRlZCBs aXN0IG9mICJjb25zdHJhaW50cyIgYW5kL29yCisiYXR0cmlidXRlcyIgd2l0aGluIGJyYWNrZXRz IEBjb2Rle1tdfSwgd2l0aCBzZWN0aW9ucyBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24uCisKK0Bp dGVtCitTaG91bGQgeW91IHdhbnQgdG8gY29weSB0aGUgcHJldmlvdXMgYXNtIGxpbmUsIHRoZSBz eW1ib2wgQGNvZGV7Xn0gY2FuIGJlIHVzZWQuCitUaGlzIGFsbG93cyBsZXNzIGNvcHkgcGFzdGlu ZyBiZXR3ZWVuIGFsdGVybmF0aXZlIGFuZCByZWR1Y2VzIHRoZSBudW1iZXIgb2YKK2xpbmVzIHRv IHVwZGF0ZSBvbiBjaGFuZ2VzLgorCitAaXRlbQorV2hlbiB1c2luZyBDIGZ1bmN0aW9ucyBmb3Ig b3V0cHV0LCB0aGUgaWRpb20gQHNhbXB7KiByZXR1cm4gQHZhcntmdW5jdGlvbn07fQorY2FuIGJl IHJlcGxhY2VkIHdpdGggdGhlIHNob3J0aGFuZCBAc2FtcHs8PCBAdmFye2Z1bmN0aW9ufTt9Lgor CitAaXRlbQorRm9sbG93aW5nIHRoZSBjbG9zaW5nIEBzYW1we119IGlzIGFueSBhbW91bnQgb2Yg d2hpdGVzcGFjZSwgYW5kIHRoZW4gdGhlIGFjdHVhbAorYXNtIG91dHB1dC4KKworQGl0ZW0KK1Nw YWNlcyBhcmUgYWxsb3dlZCBpbiB0aGUgbGlzdCAodGhleSB3aWxsIHNpbXBseSBiZSByZW1vdmVk KS4KKworQGl0ZW0KK0FsbCBjb25zdHJhaW50IGFsdGVybmF0aXZlcyBzaG91bGQgYmUgc3BlY2lm aWVkLiAgRm9yIGV4YW1wbGUsIGEgbGlzdCBvZgorb2YgdGhyZWUgYmxhbmsgYWx0ZXJuYXRpdmVz IHNob3VsZCBiZSB3cml0dGVuIEBzYW1we1ssLF19IHJhdGhlciB0aGFuCitAc2FtcHtbXX0uCisK K0BpdGVtCitBbGwgYXR0cmlidXRlIGFsdGVybmF0aXZlcyBzaG91bGQgYmUgbm9uLWVtcHR5LCB3 aXRoIEBzYW1weyp9CityZXByZXNlbnRpbmcgdGhlIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlLiAg Rm9yIGV4YW1wbGUsIGEgbGlzdCBvZiB0aHJlZQorZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzIHNo b3VsZCBiZSB3cml0dGVuIEBzYW1we1sqLCosKl19IHJhdGhlciB0aGFuCitAc2FtcHtbXX0uCisK KworQGl0ZW0KK1dpdGhpbiBhbiBAc2FtcHtAe0BAfSBibG9jayBib3RoIG11bHRpbGluZSBhbmQg c2luZ2xlbGluZSBDIGNvbW1lbnRzIGFyZQorYWxsb3dlZCwgYnV0IHdoZW4gdXNlZCBvdXRzaWRl IG9mIGEgQyBibG9jayB0aGV5IG11c3QgYmUgdGhlIG9ubHkgbm9uLXdoaXRlc3BhY2UKK2Jsb2Nr cyBvbiB0aGUgbGluZS4KKworQGl0ZW0KK1dpdGhpbiBhbiBAc2FtcHtAe0BAfSBibG9jaywgYW55 IGl0ZXJhdG9ycyB0aGF0IGRvIG5vdCBnZXQgZXhwYW5kZWQgd2lsbCByZXN1bHQKK2luIGFuIGVy cm9yLiAgSWYgZm9yIHNvbWUgcmVhc29uIGl0IGlzIHJlcXVpcmVkIHRvIGhhdmUgQGNvZGV7PH0g b3IgQGNvZGV7Pn0gaW4KK3RoZSBvdXRwdXQgdGhlbiB0aGVzZSBtdXN0IGJlIGVzY2FwZWQgdXNp bmcgQGJhY2tzbGFzaGNoYXJ7fS4KKworQGl0ZW0KK0l0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGUg QHNhbXB7YXR0cnN9IGxpc3QgdG8gc3BlY2lmeSBzb21lIGF0dHJpYnV0ZXMgYW5kIHRvCit1c2Ug dGhlIG5vcm1hbCBAY29kZXtzZXRfYXR0cn0gc3ludGF4IHRvIHNwZWNpZnkgb3RoZXIgYXR0cmli dXRlcy4gIFRoZXJlIG11c3QKK25vdCBiZSBhbnkgb3ZlcmxhcCBiZXR3ZWVuIHRoZSB0d28gbGlz dHMuCisKK0luIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nIGlzIHZhbGlkOgorQHNtYWxsZXhh bXBsZQorQGdyb3VwCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIiCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlNJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkobWF0Y2hfb3BlcmFuZDpTSSAx ICJhYXJjaDY0X21vdl9vcGVyYW5kIikpXQorICAiIgorICBAe0BAIFtjb25zOiAwLCAxOyBhdHRy czogdHlwZSwgYXJjaCwgbGVuZ3RoXUB9CisgIEBkb3Rze30gCisgIFsoc2V0X2F0dHIgImZvbyIg Im1vdl9pbW0iKV0KKykKK0BlbmQgZ3JvdXAKK0BlbmQgc21hbGxleGFtcGxlCisKK2J1dCB0aGlz IGlzIG5vdCB2YWxpZDoKK0BzbWFsbGV4YW1wbGUKK0Bncm91cAorKGRlZmluZV9pbnNuX2FuZF9z cGxpdCAiIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJub25pbW1lZGlhdGVfb3BlcmFu ZCIpCisJKG1hdGNoX29wZXJhbmQ6U0kgMSAiYWFyY2g2NF9tb3Zfb3BlcmFuZCIpKV0KKyAgIiIK KyAgQHtAQCBbY29uczogMCwgMTsgYXR0cnM6IHR5cGUsIGFyY2gsIGxlbmd0aF1AfQorICBAZG90 c3t9IAorICBbKHNldF9hdHRyICJhcmNoIiAiYmFyIikKKyAgIChzZXRfYXR0ciAiZm9vIiAibW92 X2ltbSIpXQorKQorQGVuZCBncm91cAorQGVuZCBzbWFsbGV4YW1wbGUKKworYmVjYXVzZSB5b3Ug Y2FuJ3QgbWl4IGFuZCBtYXRjaCBuZXcgYW5kIG9sZCBzeW50YXguCisKIEBub2RlIFByZWRpY2F0 ZXMKIEBzZWN0aW9uIFByZWRpY2F0ZXMKIEBjaW5kZXggcHJlZGljYXRlcwpkaWZmIC0tZ2l0IGEv Z2NjL2dlbm91dHB1dC5jYyBiL2djYy9nZW5vdXRwdXQuY2MKaW5kZXggMTYzZThkZmVmNGNhMmMy YzkyY2UxY2YwMDFlZTZiZTQwYTU0Y2EzZS4uM2ZiZGRlNzBkZjMwZDIzYTExYjIzZDU5ZWVmZTk1 Yjg2ZjE0OGM3NiAxMDA2NDQKLS0tIGEvZ2NjL2dlbm91dHB1dC5jYworKysgYi9nY2MvZ2Vub3V0 cHV0LmNjCkBAIC0xNTcsNiArMTU3LDcgQEAgcHVibGljOgogICBpbnQgbl9hbHRlcm5hdGl2ZXM7 CQkvKiBOdW1iZXIgb2YgYWx0ZXJuYXRpdmVzIGluIGVhY2ggY29uc3RyYWludCAqLwogICBpbnQg b3BlcmFuZF9udW1iZXI7CQkvKiBPcGVyYW5kIGluZGV4IGluIHRoZSBiaWcgYXJyYXkuICAqLwog ICBpbnQgb3V0cHV0X2Zvcm1hdDsJCS8qIElOU05fT1VUUFVUX0ZPUk1BVF8qLiAgKi8KKyAgYm9v bCBjb21wYWN0X3N5bnRheF9wOwogICBzdHJ1Y3Qgb3BlcmFuZF9kYXRhIG9wZXJhbmRbTUFYX01B WF9PUEVSQU5EU107CiB9OwogCkBAIC03MDAsMTIgKzcwMSw1MSBAQCBwcm9jZXNzX3RlbXBsYXRl IChjbGFzcyBkYXRhICpkLCBjb25zdCBjaGFyICp0ZW1wbGF0ZV9jb2RlKQogCSAgaWYgKHNwICE9 IGVwKQogCSAgICBtZXNzYWdlX2F0IChkLT5sb2MsICJ0cmFpbGluZyB3aGl0ZXNwYWNlIGluIG91 dHB1dCB0ZW1wbGF0ZSIpOwogCi0JICB3aGlsZSAoY3AgPCBzcCkKKwkgIC8qIENoZWNrIGZvciBh bnkgdW5leHBhbmRlZCBpdGVyYXRvcnMuICAqLworCSAgaWYgKGJwWzBdICE9ICcqJyAmJiBkLT5j b21wYWN0X3N5bnRheF9wKQogCSAgICB7Ci0JICAgICAgcHV0Y2hhciAoKmNwKTsKLQkgICAgICBj cCsrOworCSAgICAgIGNvbnN0IGNoYXIgKnAgPSBjcDsKKwkgICAgICBjb25zdCBjaGFyICpsYXN0 X2JyYWNrZXQgPSBudWxscHRyOworCSAgICAgIHdoaWxlIChwIDwgc3ApCisJCXsKKwkJICBpZiAo KnAgPT0gJ1xcJyAmJiBwICsgMSA8IHNwKQorCQkgICAgeworCQkgICAgICBwdXRjaGFyICgqcCk7 CisJCSAgICAgIHB1dGNoYXIgKCoocCsxKSk7CisJCSAgICAgIHAgKz0gMjsKKwkJICAgICAgY29u dGludWU7CisJCSAgICB9CisKKwkJICBpZiAoKnAgPT0gJz4nICYmIGxhc3RfYnJhY2tldCAmJiAq bGFzdF9icmFja2V0ID09ICc8JykKKwkJICAgIHsKKwkJICAgICAgaW50IGxlbiA9IHAgLSBsYXN0 X2JyYWNrZXQ7CisJCSAgICAgIGZhdGFsX2F0IChkLT5sb2MsICJ1bnJlc29sdmVkIGl0ZXJhdG9y ICclLipzJyBpbiAnJXMnIiwKKwkJCQlsZW4gLSAxLCBsYXN0X2JyYWNrZXQgKyAxLCBjcCk7CisJ CSAgICB9CisJCSAgZWxzZSBpZiAoKnAgPT0gJzwnIHx8ICpwID09ICc+JykKKwkJICAgIGxhc3Rf YnJhY2tldCA9IHA7CisKKwkJICBwdXRjaGFyICgqcCk7CisJCSAgcCArPSAxOworCQl9CisKKwkg ICAgICBpZiAobGFzdF9icmFja2V0KQorCQl7CisJCSAgY2hhciAqbmwgPSBzdHJjaHIgKGNvbnN0 X2Nhc3Q8Y2hhcio+IChjcCksICdcbicpOworCQkgIGlmIChubCkKKwkJICAgICpubCA9ICdcMCc7 CisJCSAgZmF0YWxfYXQgKGQtPmxvYywgInVubWF0Y2hlZCBhbmdsZSBicmFja2V0cywgbGlrZWx5 IGFuICIKKwkJCSAgICAiZXJyb3IgaW4gaXRlcmF0b3Igc3ludGF4IGluICVzIiwgY3ApOworCQl9 CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHdoaWxlIChjcCA8IHNwKQorCQlwdXRj aGFyICgqKGNwKyspKTsKIAkgICAgfQogCisJICBjcCA9IHNwOworCiAJICBpZiAoIWZvdW5kX3N0 YXIpCiAJICAgIHB1dHMgKCJcIiwiKTsKIAkgIGVsc2UgaWYgKCpicCAhPSAnKicpCkBAIC04ODEs NiArOTIxLDggQEAgZ2VuX2luc24gKG1kX3J0eF9pbmZvICppbmZvKQogICBlbHNlCiAgICAgZC0+ bmFtZSA9IDA7CiAKKyAgZC0+Y29tcGFjdF9zeW50YXhfcCA9IGNvbXBhY3Rfc3ludGF4LmNvbnRh aW5zIChpbnNuKTsKKwogICAvKiBCdWlsZCB1cCB0aGUgbGlzdCBpbiB0aGUgc2FtZSBvcmRlciBh cyB0aGUgaW5zbnMgYXJlIHNlZW4KICAgICAgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uICAq LwogICBkLT5uZXh0ID0gMDsKZGlmZiAtLWdpdCBhL2djYy9nZW5zdXBwb3J0LmggYi9nY2MvZ2Vu c3VwcG9ydC5oCmluZGV4IGExZWRmYmQ3MTkwOGI2MjQ0YjQwZjgwMWM2YzAxMDc0ZGU1Njc3N2Uu Ljc5MjVlMjJlZDQxODc2NzU3NjU2N2NhZDU4M2JkZGY4M2MwODQ2YjEgMTAwNjQ0Ci0tLSBhL2dj Yy9nZW5zdXBwb3J0LmgKKysrIGIvZ2NjL2dlbnN1cHBvcnQuaApAQCAtMjAsNiArMjAsNyBAQCBh bG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2lmbmRl ZiBHQ0NfR0VOU1VQUE9SVF9ICiAjZGVmaW5lIEdDQ19HRU5TVVBQT1JUX0gKIAorI2luY2x1ZGUg Imhhc2gtc2V0LmgiCiAjaW5jbHVkZSAicmVhZC1tZC5oIgogCiBzdHJ1Y3Qgb2JzdGFjazsKQEAg LTIxOCw2ICsyMTksOCBAQCBzdHJ1Y3QgcGF0dGVybl9zdGF0cwogICBpbnQgbnVtX29wZXJhbmRf dmFyczsKIH07CiAKK2V4dGVybiBoYXNoX3NldDxydHg+IGNvbXBhY3Rfc3ludGF4OworCiBleHRl cm4gdm9pZCBnZXRfcGF0dGVybl9zdGF0cyAoc3RydWN0IHBhdHRlcm5fc3RhdHMgKnJhbmdlcywg cnR2ZWMgdmVjKTsKIGV4dGVybiB2b2lkIGNvbXB1dGVfdGVzdF9jb2RlcyAocnR4LCBmaWxlX2xv Y2F0aW9uLCBjaGFyICopOwogZXh0ZXJuIGZpbGVfbG9jYXRpb24gZ2V0X2ZpbGVfbG9jYXRpb24g KHJ0eCk7CmRpZmYgLS1naXQgYS9nY2MvZ2Vuc3VwcG9ydC5jYyBiL2djYy9nZW5zdXBwb3J0LmNj CmluZGV4IGY5ZWZjNmViNzU3MmE0NGI4YmIxNTRiMGIyMmJlMzgxNWJkMGQyNDQuLjdiNzA0Mjg0 MTUzZjM3MDJiYzAyMzE5NGQ5ZWYzOTRkODcyMmMzYmQgMTAwNjQ0Ci0tLSBhL2djYy9nZW5zdXBw b3J0LmNjCisrKyBiL2djYy9nZW5zdXBwb3J0LmNjCkBAIC0xOCw2ICsxOCw4IEBACiAgICA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSAiYmNvbmZpZy5oIgor I2RlZmluZSBJTkNMVURFX1NUUklORworI2RlZmluZSBJTkNMVURFX1ZFQ1RPUgogI2luY2x1ZGUg InN5c3RlbS5oIgogI2luY2x1ZGUgImNvcmV0eXBlcy5oIgogI2luY2x1ZGUgInRtLmgiCkBAIC0z Myw2ICszNSw4IEBACiBzdGF0aWMgcnR4IG9wZXJhbmRfZGF0YVtNQVhfT1BFUkFORFNdOwogc3Rh dGljIHJ0eCBtYXRjaF9vcGVyYW5kX2VudHJpZXNfaW5fcGF0dGVybltNQVhfT1BFUkFORFNdOwog c3RhdGljIGNoYXIgdXNlZF9vcGVyYW5kc19udW1iZXJzW01BWF9PUEVSQU5EU107CisvKiBMaXN0 IG9mIGVudHJpZXMgd2hpY2ggYXJlIHBhcnQgb2YgdGhlIG5ldyBzeW50YXguICAqLworaGFzaF9z ZXQ8cnR4PiBjb21wYWN0X3N5bnRheDsKIAogCiAvKiBJbiBjYXNlIHNvbWUgbWFjcm9zIHVzZWQg YnkgZmlsZXMgd2UgaW5jbHVkZSBuZWVkIGl0LCBkZWZpbmUgdGhpcyBoZXJlLiAgKi8KQEAgLTU0 NSw2ICs1NDksNDg1IEBAIGdlbl9yZXdyaXRlX3NlcXVlbmNlIChydHZlYyB2ZWMpCiAgIHJldHVy biBuZXdfdmVjOwogfQogCisvKiBUaGUgZm9sbG93aW5nIGlzIGZvciBoYW5kbGluZyB0aGUgY29t cGFjdCBzeW50YXggZm9yIGNvbnN0cmFpbnRzIGFuZAorICAgYXR0cmlidXRlcy4KKworICAgVGhl IG5vcm1hbCBzeW50YXggbG9va3MgbGlrZSB0aGlzOgorCisgICAgICAgLi4uCisgICAgICAgKG1h dGNoX29wZXJhbmQ6IDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgInIsSSxrIikKKyAgICAgICAobWF0 Y2hfb3BlcmFuZDogMiAic19yZWdpc3Rlcl9vcGVyYW5kIiAicixrLEkiKQorICAgICAgIC4uLgor ICAgICAgICJACisJPGFzbT4KKwk8YXNtPgorCTxhc20+IgorICAgICAgIC4uLgorICAgICAgIChz ZXRfYXR0ciAibGVuZ3RoIiAiNCw4LDgiKQorCisgICBUaGUgY29tcGFjdCBzeW50YXggbG9va3Mg bGlrZSB0aGlzOgorCisgICAgICAgLi4uCisgICAgICAgKG1hdGNoX29wZXJhbmQ6IDAgInNfcmVn aXN0ZXJfb3BlcmFuZCIpCisgICAgICAgKG1hdGNoX29wZXJhbmQ6IDIgInNfcmVnaXN0ZXJfb3Bl cmFuZCIpCisgICAgICAgLi4uCisgICAgICAge0AgW2NvbnM6IDAsIDI7IGF0dHJzOiBsZW5ndGhd CisJW3IscjsgNF0gPGFzbT4KKwlbSSxrOyA4XSA8YXNtPgorCVtrLEk7IDhdIDxhc20+CisgICAg ICAgfQorICAgICAgIC4uLgorICAgICAgIFs8b3RoZXIgYXR0cmlidXRlcz5dCisKKyAgIFRoaXMg aXMgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgdGhpcyBzeW50YXggbmVlZHMgdG8gYmUgaGFuZGxlZC4g IFJlbGV2YW50CisgICBwYXR0ZXJucyBhcmUgdHJhbnNmb3JtZWQgZnJvbSBjb21wYWN0IHRvIHRo ZSBub3JtYWwgc3ludGF4IGJlZm9yZSB0aGV5IGFyZQorICAgcXVldWVkLCBzbyBub25lIG9mIHRo ZSBnZW4qIHByb2dyYW1zIG5lZWQgdG8ga25vdyBhYm91dCB0aGlzIHN5bnRheCBhdCBhbGwuCisK KyAgIENvbnZlcnNpb24gcHJvY2VzcyAoY29udmVydF9zeW50YXgpOgorCisgICAwKSBDaGVjayB0 aGF0IHBhdHRlcm4gYWN0dWFsbHkgdXNlcyBuZXcgc3ludGF4IChjaGVjayBmb3Ige0AgLi4uIH0p LgorCisgICAxKSBHZXQgdGhlICJsYXlvdXQiLCBpLmUuIHRoZSAiW2NvbnM6IDAgMjsgYXR0cnM6 IGxlbmd0aF0iIGZyb20gdGhlIGFib3ZlCisgICAgICBleGFtcGxlLiAgY29ucyBtdXN0IGNvbWUg Zmlyc3Q7IGJvdGggYXJlIG9wdGlvbmFsLiBTZXQgdXAgdHdvIHZlY3MsCisgICAgICBjb252ZWMg YW5kIGF0dHJ2ZWMsIGZvciBob2xkaW5nIHRoZSByZXN1bHRzIG9mIHRoZSB0cmFuc2Zvcm1hdGlv bi4KKworICAgMikgRm9yIGVhY2ggYWx0ZXJuYXRpdmU6IHBhcnNlIHRoZSBsaXN0IG9mIGNvbnN0 cmFpbnRzIGFuZC9vciBhdHRyaWJ1dGVzLAorICAgICAgYW5kIGVucXVldWUgdGhlbSBpbiB0aGUg cmVsZXZhbnQgbGlzdHMgaW4gY29udmVjIGFuZCBhdHRydmVjLiAgQnkgdGhlIGVuZAorICAgICAg b2YgdGhpcyBwcm9jZXNzLCBjb252ZWNbTl0uY29uIGFuZCBhdHRydmVjW05dLmNvbiBzaG91bGQg Y29udGFpbiByZWd1bGFyCisgICAgICBzeW50YXggY29uc3RyYWludC9hdHRyaWJ1dGUgbGlzdHMg bGlrZSAicixJLGsiLiAgQ29weSB0aGUgYXNtIHRvIGEgc3RyaW5nCisgICAgICBhcyB3ZSBnby4K KworICAgMykgU2VhcmNoIHRoZSBydHggYW5kIHdyaXRlIHRoZSBjb25zdHJhaW50IGFuZCBhdHRy aWJ1dGUgbGlzdHMgaW50byB0aGUKKyAgICAgIGNvcnJlY3QgcGxhY2VzLiBXcml0ZSB0aGUgYXNt IGJhY2sgaW50byB0aGUgdGVtcGxhdGUuICAqLworCisvKiBIZWxwZXIgY2xhc3MgZm9yIHNodWZm bGluZyBjb25zdHJhaW50cy9hdHRyaWJ1dGVzIGluIGNvbnZlcnRfc3ludGF4IGFuZAorICAgYWRk X2NvbnN0cmFpbnRzL2FkZF9hdHRyaWJ1dGVzLiAgVGhpcyBpbmNsdWRlcyBjb21tYXMgYnV0IG5v dCB3aGl0ZXNwYWNlLiAgKi8KKworY2xhc3MgY29ubGlzdCB7Citwcml2YXRlOgorICBzdGQ6OnN0 cmluZyBjb247CisKK3B1YmxpYzoKKyAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgaW50IGlkeCA9IC0x OworCisgIGNvbmxpc3QgKCkgPSBkZWZhdWx0OworCisgIC8qIFtucy4ubnMgKyBsZW4pIHNob3Vs ZCBiZSBhIHN0cmluZyB3aXRoIHRoZSBpZCBvZiB0aGUgcnR4IHRvIG1hdGNoCisgICAgIGkuZS4g aWYgcnR4IGlzIHRoZSByZWxldmFudCBtYXRjaF9vcGVyYW5kIG9yIG1hdGNoX3NjcmF0Y2ggdGhl bgorICAgICBbbnMuLm5zICsgbGVuKSBzaG91bGQgZXF1YWwgaXRvYSAoWElOVCAocnR4LCAwKSks IGFuZCBpZiBzZXRfYXR0ciB0aGVuCisgICAgIFtucy4ubnMgKyBsZW4pIHNob3VsZCBlcXVhbCBY U1RSIChydHgsIDApLiAgKi8KKyAgY29ubGlzdCAoY29uc3QgY2hhciAqbnMsIHVuc2lnbmVkIGlu dCBsZW4sIGJvb2wgbnVtZXJpYykKKyAgeworICAgIC8qIFRyaW0gbGVhZGluZyB3aGl0ZXNwYWNl cy4gICovCisgICAgd2hpbGUgKElTQkxBTksgKCpucykpCisgICAgICB7CisJbnMrKzsKKwlsZW4t LTsKKyAgICAgIH0KKworICAgIC8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4gICovCisgICAg Zm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tLCBsZW4tLSkKKyAgICAgIGlmICghSVNC TEFOSyAobnNbaV0pKQorCWJyZWFrOworCisgICAgLyogUGFyc2Ugb2ZmIGFueSBtb2RpZmllcnMu ICAqLworICAgIHdoaWxlICghSVNBTE5VTSAoKm5zKSkKKyAgICAgIHsKKwljb24gKz0gKihucysr KTsKKwlsZW4tLTsKKyAgICAgIH0KKworICAgIG5hbWUuYXNzaWduIChucywgbGVuKTsKKyAgICBp ZiAobnVtZXJpYykKKyAgICAgIGlkeCA9IHN0ZDo6c3RvaSAobmFtZSk7CisgIH0KKworICAvKiBB ZGRzIGEgY2hhcmFjdGVyIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gICovCisgIHZvaWQgYWRk IChjaGFyIGMpCisgIHsKKyAgICBjb24gKz0gYzsKKyAgfQorCisgIC8qIE91dHB1dCB0aGUgc3Ry aW5nIGluIHRoZSBmb3JtIG9mIGEgYnJhbmQtbmV3IGNoYXIgKiwgdGhlbiBlZmZlY3RpdmVseQor ICAgICBjbGVhciB0aGUgaW50ZXJuYWwgc3RyaW5nIGJ5IHJlc2V0dGluZyBsZW4gdG8gMC4gICov CisgIGNoYXIgKm91dCAoKQorICB7CisgICAgLyogRmluYWwgY2hhcmFjdGVyIGlzIGFsd2F5cyBh IHRyYWlsaW5nIGNvbW1hLCBzbyBzdHJpcCBpdCBvdXQuICAqLworICAgIGNoYXIgKnEgPSB4c3Ry bmR1cCAoY29uLmNfc3RyICgpLCBjb24uc2l6ZSAoKSAtIDEpOworICAgIGNvbi5jbGVhciAoKTsK KyAgICByZXR1cm4gcTsKKyAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnZlY3Rvcjxjb25saXN0PiB2 ZWNfY29ubGlzdDsKKworLyogQWRkIGNvbnN0cmFpbnRzIHRvIGFuIHJ0eC4gIFRoaXMgZnVuY3Rp b24gaXMgc2ltaWxhciB0byByZW1vdmVfY29uc3RyYWludHMuCisgICBFcnJvcnMgaWYgYWRkaW5n IHRoZSBjb25zdHJhaW50cyB3b3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uc3RyYWludHMuICAq LworCitzdGF0aWMgdm9pZAorYWRkX2NvbnN0cmFpbnRzIChydHggcGFydCwgZmlsZV9sb2NhdGlv biBsb2MsIHZlY19jb25saXN0ICZjb25zKQoreworICBjb25zdCBjaGFyICpmb3JtYXRfcHRyOwor CisgIGlmIChwYXJ0ID09IE5VTExfUlRYKQorICAgIHJldHVybjsKKworICAvKiBJZiBtYXRjaF9v cCBvciBtYXRjaF9zY3IsIGNoZWNrIGlmIHdlIGhhdmUgdGhlIHJpZ2h0IG9uZSwgYW5kIGlmIHNv LCBjb3B5CisgICAgIG92ZXIgdGhlIGNvbnN0cmFpbnQgbGlzdC4gICovCisgIGlmIChHRVRfQ09E RSAocGFydCkgPT0gTUFUQ0hfT1BFUkFORCB8fCBHRVRfQ09ERSAocGFydCkgPT0gTUFUQ0hfU0NS QVRDSCkKKyAgICB7CisgICAgICBpbnQgZmllbGQgPSBHRVRfQ09ERSAocGFydCkgPT0gTUFUQ0hf T1BFUkFORCA/IDIgOiAxOworICAgICAgdW5zaWduZWQgaWQgPSBYSU5UIChwYXJ0LCAwKTsKKwor ICAgICAgaWYgKGlkID49IGNvbnMuc2l6ZSAoKSkKKwlmYXRhbF9hdCAobG9jLCAiY291bGQgbm90 IGZpbmQgbWF0Y2hfb3BlcmFuZC9zY3JhdGNoIHdpdGggaWQgJWQiLCBpZCk7CisKKyAgICAgIGlm IChjb25zW2lkXS5pZHggPT0gLTEpCisJcmV0dXJuOworCisgICAgICBpZiAoWFNUUiAocGFydCwg ZmllbGQpWzBdICE9ICdcMCcpCisJeworCSAgZXJyb3JfYXQgKGxvYywgImNhbid0IG1peCBub3Jt YWwgYW5kIGNvbXBhY3QgY29uc3RyYWludCBzeW50YXgiKTsKKwkgIHJldHVybjsKKwl9CisgICAg ICBYU1RSIChwYXJ0LCBmaWVsZCkgPSBjb25zW2lkXS5vdXQgKCk7CisgICAgICBjb25zW2lkXS5p ZHggPSAtMTsKKyAgICB9CisKKyAgZm9ybWF0X3B0ciA9IEdFVF9SVFhfRk9STUFUIChHRVRfQ09E RSAocGFydCkpOworCisgIC8qIFJlY3Vyc2l2ZWx5IHNlYXJjaCB0aGUgcnR4LiAgKi8KKyAgZm9y IChpbnQgaSA9IDA7IGkgPCBHRVRfUlRYX0xFTkdUSCAoR0VUX0NPREUgKHBhcnQpKTsgaSsrKQor ICAgIHN3aXRjaCAoKmZvcm1hdF9wdHIrKykKKyAgICAgIHsKKyAgICAgIGNhc2UgJ2UnOgorICAg ICAgY2FzZSAndSc6CisJYWRkX2NvbnN0cmFpbnRzIChYRVhQIChwYXJ0LCBpKSwgbG9jLCBjb25z KTsKKwlicmVhazsKKyAgICAgIGNhc2UgJ0UnOgorCWlmIChYVkVDIChwYXJ0LCBpKSAhPSBOVUxM KQorCSAgZm9yIChpbnQgaiA9IDA7IGogPCBYVkVDTEVOIChwYXJ0LCBpKTsgaisrKQorCSAgICBh ZGRfY29uc3RyYWludHMgKFhWRUNFWFAgKHBhcnQsIGksIGopLCBsb2MsIGNvbnMpOworCWJyZWFr OworICAgICAgZGVmYXVsdDoKKwljb250aW51ZTsKKyAgICAgIH0KK30KKworLyogQWRkIEFUVFJT IHRvIGRlZmluaXRpb24gWCdzIGF0dHJpYnV0ZSBsaXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2Fk ZF9hdHRyaWJ1dGVzIChydHggeCwgdmVjX2Nvbmxpc3QgJmF0dHJzKQoreworICB1bnNpZ25lZCBp bnQgYXR0cl9pbmRleCA9IEdFVF9DT0RFICh4KSA9PSBERUZJTkVfSU5TTiA/IDQgOiAzOworICBy dHZlYyBvcmlnID0gWFZFQyAoeCwgYXR0cl9pbmRleCk7CisgIHNpemVfdCBuX2N1cnIgPSBvcmln ID8gWFZFQ0xFTiAoeCwgYXR0cl9pbmRleCkgOiAwOworICBydHZlYyBjb3B5ID0gcnR2ZWNfYWxs b2MgKG5fY3VyciArIGF0dHJzLnNpemUgKCkpOworCisgIC8qIENyZWF0ZSBhIHNoYWxsb3cgY29w eSBvZiBleGlzdGluZyBlbnRyaWVzLiAgKi8KKyAgbWVtY3B5ICgmY29weS0+ZWxlbVthdHRycy5z aXplICgpXSwgJm9yaWctPmVsZW1bMF0sIHNpemVvZiAocnR4KSAqIG5fY3Vycik7CisgIFhWRUMg KHgsIGF0dHJfaW5kZXgpID0gY29weTsKKworICAvKiBDcmVhdGUgdGhlIG5ldyBlbGVtZW50cy4g ICovCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy5zaXplICgpOyBpKyspCisgICAg eworICAgICAgcnR4IGF0dHIgPSBydHhfYWxsb2MgKFNFVF9BVFRSKTsKKyAgICAgIFhTVFIgKGF0 dHIsIDApID0geHN0cmR1cCAoYXR0cnNbaV0ubmFtZS5jX3N0ciAoKSk7CisgICAgICBYU1RSIChh dHRyLCAxKSA9IGF0dHJzW2ldLm91dCAoKTsKKyAgICAgIFhWRUNFWFAgKHgsIGF0dHJfaW5kZXgs IGkpID0gYXR0cjsKKyAgICB9Cit9CisKKy8qIENvbnN1bWVzIHNwYWNlcyBhbmQgdGFicy4gICov CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2tpcF9zcGFjZXMgKGNvbnN0IGNoYXIgKipzdHIpCit7 CisgIHdoaWxlIChJU0JMQU5LICgqKnN0cikpCisgICAgKCpzdHIpKys7Cit9CisKKy8qIENvbnN1 bWVzIHRoZSBnaXZlbiBjaGFyYWN0ZXIsIGlmIGl0J3MgdGhlcmUuICAqLworCitzdGF0aWMgaW5s aW5lIGJvb2wKK2V4cGVjdF9jaGFyIChjb25zdCBjaGFyICoqc3RyLCBjaGFyIGMpCit7CisgIGlm ICgqKnN0ciAhPSBjKQorICAgIHJldHVybiBmYWxzZTsKKyAgKCpzdHIpKys7CisgIHJldHVybiB0 cnVlOworfQorCisvKiBQYXJzZXMgdGhlIHNlY3Rpb24gbGF5b3V0IHRoYXQgZm9sbG93cyBhICJ7 QCIgaWYgdXNpbmcgbmV3IHN5bnRheC4gQnVpbGRzCisgICBhIHZlY3RvciBmb3IgYSBzaW5nbGUg c2VjdGlvbi4gRS5nLiBpZiB3ZSBoYXZlICJhdHRyczogbGVuZ3RoLCBhcmNoXS4uLiIKKyAgIHRo ZW4gbGlzdCB3aWxsIGhhdmUgdHdvIGVsZW1lbnRzLCB0aGUgZmlyc3QgZm9yICJsZW5ndGgiIGFu ZCB0aGUgc2Vjb25kCisgICBmb3IgImFyY2giLiAgKi8KKworc3RhdGljIHZvaWQKK3BhcnNlX3Nl Y3Rpb25fbGF5b3V0IChmaWxlX2xvY2F0aW9uIGxvYywgY29uc3QgY2hhciAqKnRlbXBsLCBjb25z dCBjaGFyICpsYWJlbCwKKwkJICAgICAgdmVjX2Nvbmxpc3QgJmxpc3QsIGJvb2wgbnVtZXJpYykK K3sKKyAgY29uc3QgY2hhciAqbmFtZV9zdGFydDsKKyAgc2l6ZV90IGxhYmVsX2xlbiA9IHN0cmxl biAobGFiZWwpOworICBpZiAoc3RybmNtcCAobGFiZWwsICp0ZW1wbCwgbGFiZWxfbGVuKSA9PSAw KQorICAgIHsKKyAgICAgICp0ZW1wbCArPSBsYWJlbF9sZW47CisKKyAgICAgIC8qIEdhdGhlciB0 aGUgbmFtZXMuICAqLworICAgICAgd2hpbGUgKCoqdGVtcGwgIT0gJzsnICYmICoqdGVtcGwgIT0g J10nKQorCXsKKwkgIHNraXBfc3BhY2VzICh0ZW1wbCk7CisJICBuYW1lX3N0YXJ0ID0gKnRlbXBs OworCSAgaW50IGxlbiA9IDA7CisJICBjaGFyIHZhbCA9ICgqdGVtcGwpW2xlbl07CisJICB3aGls ZSAodmFsICE9ICcsJyAmJiB2YWwgIT0gJzsnICYmIHZhbCAhPSAnXScpCisJICAgIHsKKwkgICAg ICBpZiAodmFsID09IDAgfHwgdmFsID09ICdcbicpCisJICAgICAgICBmYXRhbF9hdCAobG9jLCAi bWlzc2luZyAnXSciKTsKKwkgICAgICB2YWwgPSAoKnRlbXBsKVsrK2xlbl07CisJICAgIH0KKwkg ICp0ZW1wbCArPSBsZW47CisJICBpZiAodmFsID09ICcsJykKKwkgICAgKCp0ZW1wbCkrKzsKKwkg IGxpc3QucHVzaF9iYWNrIChjb25saXN0IChuYW1lX3N0YXJ0LCBsZW4sIG51bWVyaWMpKTsKKwl9 CisgICAgfQorfQorCisvKiBQYXJzZSBhIHNlY3Rpb24sIGEgc2VjdGlvbiBpcyBkZWZpbmVkIGFz IGEgbmFtZWQgc3BhY2Ugc2VwYXJhdGVkIGxpc3QsIGUuZy4KKworICAgZm9vOiBhLCBiLCBjCisK KyAgIGlzIGEgc2VjdGlvbiBuYW1lZCAiZm9vIiB3aXRoIGVudHJpZXMgYSwgYiBhbmQgYy4gICov CisKK3N0YXRpYyB2b2lkCitwYXJzZV9zZWN0aW9uIChjb25zdCBjaGFyICoqdGVtcGwsIHVuc2ln bmVkIGludCBuX2VsZW1zLCB1bnNpZ25lZCBpbnQgYWx0X25vLAorCSAgICAgICB2ZWNfY29ubGlz dCAmbGlzdCwgZmlsZV9sb2NhdGlvbiBsb2MsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHVuc2ln bmVkIGludCBpOworCisgIC8qIEdvIHRocm91Z2ggdGhlIGxpc3QsIG9uZSBjaGFyYWN0ZXIgYXQg YSB0aW1lLCBhZGRpbmcgc2FpZCBjaGFyYWN0ZXIKKyAgICAgdG8gdGhlIGNvcnJlY3Qgc3RyaW5n LiAgKi8KKyAgZm9yIChpID0gMDsgKip0ZW1wbCAhPSAnXScgJiYgKip0ZW1wbCAhPSAnOyc7ICgq dGVtcGwpKyspCisgICAgaWYgKCFJU0JMQU5LICgqKnRlbXBsKSkKKyAgICAgIHsKKwlsaXN0W2ld LmFkZCAoKip0ZW1wbCk7CisJaWYgKCoqdGVtcGwgPT0gJywnKQorCSAgeworCSAgICArK2k7CisJ ICAgIGlmIChpID09IG5fZWxlbXMpCisJICAgICAgZmF0YWxfYXQgKGxvYywgInRvbyBtYW55ICVz cyBpbiBhbHRlcm5hdGl2ZSAlZDogZXhwZWN0ZWQgJWQiLAorCQkJbmFtZSwgYWx0X25vLCBuX2Vs ZW1zKTsKKwkgIH0KKwlpZiAoKip0ZW1wbCA9PSAwIHx8ICoqdGVtcGwgPT0gJ1xuJykKKwkgIGZh dGFsX2F0IChsb2MsICJtaXNzaW5nICddJyIpOworICAgICAgfQorCisgIGlmIChpICsgMSA8IG5f ZWxlbXMpCisgICAgZmF0YWxfYXQgKGxvYywgInRvbyBmZXcgJXNzIGluIGFsdGVybmF0aXZlICVk OiBleHBlY3RlZCAlZCwgZ290ICVkIiwKKwkgICAgICBuYW1lLCBhbHRfbm8sIG5fZWxlbXMsIGkp OworCisgIGxpc3RbaV0uYWRkICgnLCcpOworfQorCisvKiBUaGUgY29tcGFjdCBzeW50YXggaGFz IG1vcmUgY29udmllbmNlIHN5bnRheGVzLiAgQXMgc3VjaCB3ZSBwb3N0IHByb2Nlc3MKKyAgIHRo ZSBsaW5lcyB0byBnZXQgdGhlbSBiYWNrIHRvIHNvbWV0aGluZyB0aGUgbm9ybWFsIHN5bnRheCB1 bmRlcnN0YW5kcy4gICovCisKK3N0YXRpYyB2b2lkCitwcmVwcm9jZXNzX2NvbXBhY3Rfc3ludGF4 IChmaWxlX2xvY2F0aW9uIGxvYywgaW50IGFsdF9ubywgc3RkOjpzdHJpbmcgJmxpbmUsCisJCQkg ICBzdGQ6OnN0cmluZyAmbGFzdF9saW5lKQoreworICAvKiBDaGVjayBpZiB3ZSdyZSBjb3B5aW5n IHRoZSBsYXN0IHN0YXRlbWVudC4gICovCisgIGlmIChsaW5lLmZpbmQgKCJeIikgPT0gMCAmJiBs aW5lLnNpemUgKCkgPT0gMSkKKyAgICB7CisgICAgICBpZiAobGFzdF9saW5lLmVtcHR5ICgpKQor CWZhdGFsX2F0IChsb2MsICJmb3VuZCBpbnN0cnVjdGlvbiB0byBjb3B5IHByZXZpb3VzIGxpbmUg KF4pIGluIgorCQkgICAgICAgImFsdGVybmF0aXZlICVkIGJ1dCBubyBwcmV2aW91cyBsaW5lIHRv IGNvcHkiLCBhbHRfbm8pOworICAgICAgbGluZSA9IGxhc3RfbGluZTsKKyAgICAgIHJldHVybjsK KyAgICB9CisKKyAgc3RkOjpzdHJpbmcgcmVzdWx0OworICBzdGQ6OnN0cmluZyBidWZmZXI7Cisg IC8qIENoZWNrIGlmIHdlIGhhdmUgPDwgd2hpY2ggbWVhbnMgcmV0dXJuIGMgc3RhdGVtZW50LiAg Ki8KKyAgaWYgKGxpbmUuZmluZCAoIjw8IikgPT0gMCkKKyAgICB7CisgICAgICByZXN1bHQuYXBw ZW5kICgiKiByZXR1cm4gIik7CisgICAgICBjb25zdCBjaGFyICpjaHVuayA9IGxpbmUuY19zdHIg KCkgKyAyOworICAgICAgc2tpcF9zcGFjZXMgKCZjaHVuayk7CisgICAgICByZXN1bHQuYXBwZW5k IChjaHVuayk7CisgICAgfQorICBlbHNlCisgICAgcmVzdWx0LmFwcGVuZCAobGluZSk7CisKKyAg bGluZSA9IHJlc3VsdDsKKyAgcmV0dXJuOworfQorCisvKiBDb252ZXJ0cyBhbiBydHggZnJvbSBj b21wYWN0IHN5bnRheCB0byBub3JtYWwgc3ludGF4IGlmIHBvc3NpYmxlLiAgKi8KKworc3RhdGlj IHZvaWQKK2NvbnZlcnRfc3ludGF4IChydHggeCwgZmlsZV9sb2NhdGlvbiBsb2MpCit7CisgIGlu dCBhbHRfbm87CisgIHVuc2lnbmVkIGludCB0ZW1wbF9pbmRleDsKKyAgY29uc3QgY2hhciAqdGVt cGw7CisgIHZlY19jb25saXN0IHRjb252ZWMsIGNvbnZlYywgYXR0cnZlYzsKKworICB0ZW1wbF9p bmRleCA9IEdFVF9DT0RFICh4KSA9PSBERUZJTkVfSU5TTiA/IDMgOiAyOworCisgIHRlbXBsID0g WFRNUEwgKHgsIHRlbXBsX2luZGV4KTsKKworICAvKiBUZW1wbGF0ZXMgd2l0aCBjb25zdHJhaW50 cyBzdGFydCB3aXRoICJ7QCIuICAqLworICBpZiAoc3RybmNtcCAoIip7QCIsIHRlbXBsLCAzKSkK KyAgICByZXR1cm47CisKKyAgLyogR2V0IHRoZSBsYXlvdXQgZm9yIHRoZSB0ZW1wbGF0ZS4gICov CisgIHRlbXBsICs9IDM7CisgIHNraXBfc3BhY2VzICgmdGVtcGwpOworCisgIGlmICghZXhwZWN0 X2NoYXIgKCZ0ZW1wbCwgJ1snKSkKKyAgICBmYXRhbF9hdCAobG9jLCAiZXhwZWNpbmcgYFsnIHRv IGJlZ2luIHNlY3Rpb24gbGlzdCIpOworCisgIHBhcnNlX3NlY3Rpb25fbGF5b3V0IChsb2MsICZ0 ZW1wbCwgImNvbnM6IiwgdGNvbnZlYywgdHJ1ZSk7CisgIGNvbnZlYy5yZXNpemUgKHRjb252ZWMu c2l6ZSAoKSk7CisKKyAgLyogQ2hlY2sgZm9yIGFueSBkdXBsaWNhdGUgY29ucyBlbnRyaWVzIGFu ZCBzb3J0IGJhc2VkIG9uIGkuICAqLworICBmb3IgKGF1dG8gZSA6IHRjb252ZWMpCisgICAgewor ICAgICAgdW5zaWduZWQgaWR4ID0gZS5pZHg7CisgICAgICBpZiAoaWR4ID49IGNvbnZlYy5zaXpl ICgpKQorCWNvbnZlYy5yZXNpemUgKGlkeCArIDEpOworCisgICAgICBpZiAoY29udmVjW2lkeF0u aWR4ID49IDApCisJZmF0YWxfYXQgKGxvYywgImR1cGxpY2F0ZSBjb25zIG51bWJlciBmb3VuZDog JWQiLCBpZHgpOworICAgICAgY29udmVjW2lkeF0gPSBlOworICAgIH0KKyAgdGNvbnZlYy5jbGVh ciAoKTsKKworICBpZiAoKnRlbXBsICE9ICddJykKKyAgICB7CisgICAgICBpZiAoKnRlbXBsID09 ICc7JykKKwlza2lwX3NwYWNlcyAoJigrK3RlbXBsKSk7CisgICAgICBwYXJzZV9zZWN0aW9uX2xh eW91dCAobG9jLCAmdGVtcGwsICJhdHRyczoiLCBhdHRydmVjLCBmYWxzZSk7CisgICAgfQorCisg IGlmICghZXhwZWN0X2NoYXIgKCZ0ZW1wbCwgJ10nKSkKKyAgICBmYXRhbF9hdCAobG9jLCAiZXhw ZWN0aW5nIGBdYCB0byBlbmQgc2VjdGlvbiBsaXN0IC0gc2VjdGlvbiBsaXN0IG11c3QgaGF2ZSAi CisJCSAgICJjb25zIGZpcnN0LCBhdHRycyBzZWNvbmQiKTsKKworICAvKiBXZSB3aWxsIHdyaXRl IHRoZSB1bi1jb25zdHJhaW5pZmllZCB0ZW1wbGF0ZSBpbnRvIG5ld190ZW1wbC4gICovCisgIHN0 ZDo6c3RyaW5nIG5ld190ZW1wbDsKKyAgbmV3X3RlbXBsLmFwcGVuZCAoIkAiKTsKKworICAvKiBT a2lwIHRvIHRoZSBmaXJzdCBwcm9wZXIgbGluZS4gICovCisgIHdoaWxlICgqdGVtcGwrKyAhPSAn XG4nKTsKKworICBhbHRfbm8gPSAwOworICBzdGQ6OnN0cmluZyBsYXN0X2xpbmU7CisKKyAgLyog UHJvY2VzcyB0aGUgYWx0ZXJuYXRpdmVzLiAgKi8KKyAgd2hpbGUgKCoodGVtcGwgLSAxKSAhPSAn XDAnKQorICAgIHsKKyAgICAgIC8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLiAgKi8KKyAgICAg IHN0ZDo6c3RyaW5nIGJ1ZmZlcjsKKyAgICAgIHNraXBfc3BhY2VzICgmdGVtcGwpOworCisgICAg ICAvKiBDaGVjayBpZiB3ZSdyZSBhdCB0aGUgZW5kLiAgKi8KKyAgICAgIGlmICh0ZW1wbFswXSA9 PSAnfScgJiYgdGVtcGxbMV0gPT0gJ1wwJykKKwlicmVhazsKKworICAgICAgaWYgKGV4cGVjdF9j aGFyICgmdGVtcGwsICdbJykpCisJeworCSAgbmV3X3RlbXBsICs9ICdcbic7CisJICBuZXdfdGVt cGwuYXBwZW5kIChidWZmZXIpOworCSAgLyogUGFyc2UgdGhlIGNvbnN0cmFpbnQgbGlzdCwgdGhl biB0aGUgYXR0cmlidXRlIGxpc3QuICAqLworCSAgaWYgKGNvbnZlYy5zaXplICgpID4gMCkKKwkg ICAgcGFyc2Vfc2VjdGlvbiAoJnRlbXBsLCBjb252ZWMuc2l6ZSAoKSwgYWx0X25vLCBjb252ZWMs IGxvYywKKwkJCSAgICJjb25zdHJhaW50Iik7CisKKwkgIGlmIChhdHRydmVjLnNpemUgKCkgPiAw KQorCSAgICB7CisJICAgICAgaWYgKGNvbnZlYy5zaXplICgpID4gMCAmJiAhZXhwZWN0X2NoYXIg KCZ0ZW1wbCwgJzsnKSkKKwkJZmF0YWxfYXQgKGxvYywgImV4cGVjdGVkIGA7JyB0byBzZXBhcmF0 ZSBjb25zdHJhaW50cyAiCisJCQkgICAgICAgImFuZCBhdHRyaWJ1dGVzIGluIGFsdGVybmF0aXZl ICVkIiwgYWx0X25vKTsKKworCSAgICAgIHBhcnNlX3NlY3Rpb24gKCZ0ZW1wbCwgYXR0cnZlYy5z aXplICgpLCBhbHRfbm8sCisJCQkgICAgIGF0dHJ2ZWMsIGxvYywgImF0dHJpYnV0ZSIpOworCSAg ICB9CisKKwkgIGlmICghZXhwZWN0X2NoYXIgKCZ0ZW1wbCwgJ10nKSkKKwkgICAgZmF0YWxfYXQg KGxvYywgImV4cGVjdGVkIGVuZCBvZiBjb25zdHJhaW50L2F0dHJpYnV0ZSBsaXN0IGJ1dCAiCisJ CQkgICAibWlzc2luZyBhbiBlbmRpbmcgYF0nIGluIGFsdGVybmF0aXZlICVkIiwgYWx0X25vKTsK Kwl9CisgICAgICBlbHNlIGlmICh0ZW1wbFswXSA9PSAnLycgJiYgdGVtcGxbMV0gPT0gJy8nKQor CXsKKwkgIHRlbXBsICs9IDI7CisgCSAgLyogR2xvYiB0aWxsIG5ld2xpbmUgb3IgZW5kIG9mIHN0 cmluZy4gICovCisJICB3aGlsZSAoKnRlbXBsICE9ICdcbicgfHwgKnRlbXBsICE9ICdcMCcpCisJ ICAgIHRlbXBsKys7CisJICB0ZW1wbCsrOworCisJICAvKiBTa2lwIGFueSBuZXdsaW5lcyBvciB3 aGl0ZXNwYWNlcyBuZWVkZWQuICAqLworCSAgd2hpbGUgKElTU1BBQ0UoKnRlbXBsKSkKKwkgICAg dGVtcGwrKzsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGVsc2UgaWYgKHRlbXBsWzBdID09ICcv JyAmJiB0ZW1wbFsxXSA9PSAnKicpCisJeworCSAgdGVtcGwgKz0gMjsKKyAJICAvKiBHbG9iIHRp bGwgbmV3bGluZSBvciBlbmQgb2YgbXVsdGlsaW5lIGNvbW1lbnQuICAqLworCSAgd2hpbGUgKHRl bXBsWzBdICE9IDAgJiYgdGVtcGxbMF0gIT0gJyonICYmIHRlbXBsWzFdICE9ICcvJykKKwkgICAg dGVtcGwrKzsKKwkgIHRlbXBsICs9IDI7CisKKwkgIC8qIFNraXAgYW55IG5ld2xpbmVzIG9yIHdo aXRlc3BhY2VzIG5lZWRlZC4gICovCisJICB3aGlsZSAoSVNTUEFDRSgqdGVtcGwpKQorCSAgICB0 ZW1wbCsrOworCSAgY29udGludWU7CisJfQorICAgICAgZWxzZQorCWZhdGFsX2F0IChsb2MsICJl eHBlY3RlZCBjb25zdHJhaW50L2F0dHJpYnV0ZSBsaXN0IGF0IGJlZ2lubmluZyBvZiAiCisJCSAg ICAgICAiYWx0ZXJuYXRpdmUgJWQgYnV0IG1pc3NpbmcgYSBzdGFydGluZyBgWyciLCBhbHRfbm8p OworCisgICAgICAvKiBTa2lwIHdoaXRlc3BhY2UgYmV0d2VlbiBsaXN0IGFuZCBhc20uICAqLwor ICAgICAgKyt0ZW1wbDsKKyAgICAgIHNraXBfc3BhY2VzICgmdGVtcGwpOworCisgICAgICAvKiBD b3B5IGFzbSB0byBuZXcgdGVtcGxhdGUuICAqLworICAgICAgc3RkOjpzdHJpbmcgbGluZTsKKyAg ICAgIHdoaWxlICgqdGVtcGwgIT0gJ1xuJyAmJiAqdGVtcGwgIT0gJ1wwJykKKwlsaW5lICs9ICp0 ZW1wbCsrOworCisgICAgICAvKiBBcHBseSBhbnkgcHJlLXByb2Nlc3NpbmcgbmVlZGVkIHRvIHRo ZSBsaW5lLiAgKi8KKyAgICAgIHByZXByb2Nlc3NfY29tcGFjdF9zeW50YXggKGxvYywgYWx0X25v LCBsaW5lLCBsYXN0X2xpbmUpOworICAgICAgbmV3X3RlbXBsLmFwcGVuZCAobGluZSk7CisgICAg ICBsYXN0X2xpbmUgPSBsaW5lOworCisgICAgICAvKiBOb3JtYWwgIiouLi4iIHN5bnRheCBleHBl Y3RzIHRoZSBjbG9zaW5nIHF1b3RlIHRvIGJlIG9uIHRoZSBmaW5hbAorCSBsaW5lIG9mIGFzbSwg d2hlcmVhcyB3ZSBhbGxvdyB0aGUgY2xvc2luZyAifSIgdG8gYmUgb24gaXRzIG93biBsaW5lLgor CSBQb3N0cG9uZSBjb3B5aW5nIHRoZSAnXG4nIHVudGlsIHdlIGtub3cgdGhhdCB0aGVyZSBpcyBh bm90aGVyCisJIGFsdGVybmF0aXZlIGluIHRoZSBsaXN0LiAgKi8KKyAgICAgIHdoaWxlIChJU1NQ QUNFICgqdGVtcGwpKQorCXRlbXBsKys7CisgICAgICArK2FsdF9ubzsKKyAgICB9CisKKyAgLyog V3JpdGUgdGhlIGNvbnN0cmFpbnRzIGFuZCBhdHRyaWJ1dGVzIGludG8gdGhlaXIgcHJvcGVyIHBs YWNlcy4gICovCisgIGlmIChjb252ZWMuc2l6ZSAoKSA+IDApCisgICAgYWRkX2NvbnN0cmFpbnRz ICh4LCBsb2MsIGNvbnZlYyk7CisKKyAgaWYgKGF0dHJ2ZWMuc2l6ZSAoKSA+IDApCisgICAgYWRk X2F0dHJpYnV0ZXMgKHgsIGF0dHJ2ZWMpOworCisgIC8qIENvcHkgb3ZlciB0aGUgbmV3IHVuLWNv bnN0cmFpbmlmaWVkIHRlbXBsYXRlLiAgKi8KKyAgWFRNUEwgKHgsIHRlbXBsX2luZGV4KSA9IHhz dHJkdXAgKG5ld190ZW1wbC5jX3N0ciAoKSk7CisKKyAgLyogUmVnaXN0ZXIgZm9yIGxhdGVyIGNo ZWNrcyBkdXJpbmcgaXRlcmF0b3IgZXhwYW5zaW9ucy4gICovCisgIGNvbXBhY3Rfc3ludGF4LmFk ZCAoeCk7Cit9CisKIC8qIFByb2Nlc3MgYSB0b3AgbGV2ZWwgcnR4IGluIHNvbWUgd2F5LCBxdWV1 aW5nIGFzIGFwcHJvcHJpYXRlLiAgKi8KIAogc3RhdGljIHZvaWQKQEAgLTU1MywxMCArMTAzNiwx MiBAQCBwcm9jZXNzX3J0eCAocnR4IGRlc2MsIGZpbGVfbG9jYXRpb24gbG9jKQogICBzd2l0Y2gg KEdFVF9DT0RFIChkZXNjKSkKICAgICB7CiAgICAgY2FzZSBERUZJTkVfSU5TTjoKKyAgICAgIGNv bnZlcnRfc3ludGF4IChkZXNjLCBsb2MpOwogICAgICAgcXVldWVfcGF0dGVybiAoZGVzYywgJmRl ZmluZV9pbnNuX3RhaWwsIGxvYyk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgREVGSU5FX0NP TkRfRVhFQzoKKyAgICAgIGNvbnZlcnRfc3ludGF4IChkZXNjLCBsb2MpOwogICAgICAgcXVldWVf cGF0dGVybiAoZGVzYywgJmRlZmluZV9jb25kX2V4ZWNfdGFpbCwgbG9jKTsKICAgICAgIGJyZWFr OwogCkBAIC02MzEsNiArMTExNiw3IEBAIHByb2Nlc3NfcnR4IChydHggZGVzYywgZmlsZV9sb2Nh dGlvbiBsb2MpCiAJYXR0ciA9IFhWRUMgKGRlc2MsIHNwbGl0X2NvZGUgKyAxKTsKIAlQVVRfQ09E RSAoZGVzYywgREVGSU5FX0lOU04pOwogCVhWRUMgKGRlc2MsIDQpID0gYXR0cjsKKwljb252ZXJ0 X3N5bnRheCAoZGVzYywgbG9jKTsKIAogCS8qIFF1ZXVlIHRoZW0uICAqLwogCWluc25fZWxlbSA9 IHF1ZXVlX3BhdHRlcm4gKGRlc2MsICZkZWZpbmVfaW5zbl90YWlsLCBsb2MpOwo= --_002_VI1PR08MB532501BE8432A4B569870958FF55AVI1PR08MB5325eurp_--