From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70051.outbound.protection.outlook.com [40.107.7.51]) by sourceware.org (Postfix) with ESMTPS id D13D6385842F for ; Tue, 8 Nov 2022 17:37:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D13D6385842F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=YxIUIoKHlzzLHke6c9/lZNtb12DWIG2pzaySxRTJDBb5CULoe4zmTp5zA+0OcsnDplatWZp506eiVkZWA/srSD/IjZJORQ7MccjpQNjzxH/hwYvqMh1QdZmgbk++bGld/sJHp2MgFfCfzYFcR0b1vKaLI+1WsEWs5WfLxVaWvLS4xZeJplklW19Tlut9NPpDmT0eIEYssKJNdyg4On/bESHz1lE1ApGIxEFYreH6hp6ozut/aOToeYzE5onIuLuQJvAegXe9zBO9Y4a5hGDjl1swkFPkRksxXiwoJD0UWk0Il8FNmwt1JclRbqVsPU7SWIDjx5P32C2JplAgOCEZyA== ARC-Message-Signature: i=2; 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=XBukOJ8Cgmm3c5Pmbel1jgCh8hsZl90UbO3wx8ptOoM=; b=H+8M1It1tde6CNvXvbold18JMX/V5XghQai95jV5rz6NcYkFyvBLz3+HOAj8Qyly5SHVuVZWoAsUpjRcp6Bzf87NxmViPJ5AuVbOHIqz7N7j/zT8li2bzV1BMBfBXxw/aWKSUPKuRRF6PKRiW1IBfD+DT+GUHhwo9KYM8n9RgYhzNenlu1K3lLWEvqkQVGLM8tSPL44GZMC0mXAFDXdXKUftxH0BMKeGyG3M0mmqpHFdaMYXv1+WrZ5ZIcj0ZU+VEnKAp+P3CvXI9RWAYBJHYD0bIpg6FegBh5RiPw1U6sYZKJSa+jNbr13PNLonmS0pCDkrCVUSAxL+jxrUh0bPWQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=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=XBukOJ8Cgmm3c5Pmbel1jgCh8hsZl90UbO3wx8ptOoM=; b=ZhOWhjbSML6ueFrZU8AjfWI72u2wGVhUQatBkIyQ4bVR9ADYVVoaPpObyVS2L2/G5fLwW4P+8Yc0gMBAZsOQsOFNlVuTyebie2zQCH4RSfK3e1f07uG62Vneuy7qfoqam5nzklVd15D7EGSVeJAzHqIBp0xzDwU2n7IumpB3CR8= Received: from DB6PR1001CA0019.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:4:b7::29) by DB9PR08MB9849.eurprd08.prod.outlook.com (2603:10a6:10:462::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.11; Tue, 8 Nov 2022 17:37:01 +0000 Received: from DBAEUR03FT062.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:b7:cafe::af) by DB6PR1001CA0019.outlook.office365.com (2603:10a6:4:b7::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.27 via Frontend Transport; Tue, 8 Nov 2022 17:37:01 +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 DBAEUR03FT062.mail.protection.outlook.com (100.127.142.64) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.20 via Frontend Transport; Tue, 8 Nov 2022 17:37:01 +0000 Received: ("Tessian outbound 0800d254cb3b:v130"); Tue, 08 Nov 2022 17:37:01 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 3a806b146c33345c X-CR-MTA-TID: 64aa7808 Received: from 352de410709c.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id BA897310-506B-46E9-8FC7-4AEA897CFCA1.1; Tue, 08 Nov 2022 17:36:51 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 352de410709c.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 08 Nov 2022 17:36:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TDx49uWubMrUiK13JdjurQcwg6PGvcATabjciNV/OZIkg39KJO4WoziTUJbKniVyg5fEa6vZfI9l8VaPu/0PZHcjiwtmNVUT6u8E25ifg+xkknNBuLdnwTL9Ax9iDrMWF5PbAozLDkGiFsnXLjadKO2DXUwUXqgpNHyiuxcYo+ANSVdNZLbrXbisZxTXDfxEdc99qcrebv9P5/4Q8aBEflQczGJhlMuxYhS3m9ISA8Ndlxa+z2DDYtA66mfOYPpJ6wWc2g6hoFhsk9HABFAox8q2SuYjGKfOOylfOlGls4fY9949HkQViqD5pBGZqn2LqFpeeOF9uqdu8hnpWCQTlQ== 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=XBukOJ8Cgmm3c5Pmbel1jgCh8hsZl90UbO3wx8ptOoM=; b=DHY1RT/ub6VR9uO9DRk+7vh4k5kamc9rMXbZeB27WXGL20NHx1U9VWB3MX2PkRWsct6fUaGLlcA+a/8mhY8oXI6fVHot0/Oq4ihBLQljv9U89fOSgALCQ6IG/H0Jzr0fW9WhkJWM0zYscMUrGYlyjTHMtGIE9YL/4X2GPoSRWoSBlt2595M8pmn6OXXpoVjHP8BvkwUA7LW1jhzAYGuocKQJ+Lq+dEDQRGtL31p61vjEemn5cQKgNppsiiShmW0uodsEkxclhtGsV3o+8ZThNHE/imSmH5vXhlMzeR70a7nqDI0iqUmPZEHN22FHyUw0eYQ5PRrYQRke/VjcQIR1wQ== 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=XBukOJ8Cgmm3c5Pmbel1jgCh8hsZl90UbO3wx8ptOoM=; b=ZhOWhjbSML6ueFrZU8AjfWI72u2wGVhUQatBkIyQ4bVR9ADYVVoaPpObyVS2L2/G5fLwW4P+8Yc0gMBAZsOQsOFNlVuTyebie2zQCH4RSfK3e1f07uG62Vneuy7qfoqam5nzklVd15D7EGSVeJAzHqIBp0xzDwU2n7IumpB3CR8= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by PAVPR08MB8917.eurprd08.prod.outlook.com (2603:10a6:102:329::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.11; Tue, 8 Nov 2022 17:36:46 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%4]) with mapi id 15.20.5813.011; Tue, 8 Nov 2022 17:36:46 +0000 From: Tamar Christina To: "gcc-patches@gcc.gnu.org" CC: nd , "rguenther@suse.de" , Richard Sandiford Subject: RE: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Topic: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Index: AQHY7snIAwho+tAVIES+mK7MOEeJC641U6WA Date: Tue, 8 Nov 2022 17:36:46 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 16A7F408E4DA574F93719227DDB9889D.0 Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|PAVPR08MB8917:EE_|DBAEUR03FT062:EE_|DB9PR08MB9849:EE_ X-MS-Office365-Filtering-Correlation-Id: ca48c69d-f5a7-4a3f-7056-08dac1afd84a 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: zLWHdaGBP/bbVet9n5Czys9RaJK+IKmolm91jOTsORbct0JTDjHTVT3P6q51ERkfRp82Xp3IbYA01Xk/QfFj0nw3emlTsSxixandOsITipK0n808oWhxcfejJJX1yAicTYJrdz8f0da5bcSrRZNTHR/QNWwix/FzmWm5BwN1OS1cYzTuGNvoDIEk2pMpaq2zUk48r/enK5cqtOnpNjj7qyXIPEvSl+vRQltvmRnqaYFdr0Qgoyj7Xu9GG5hMaU6Bq8zrNqwwdQrgRtAFTtW91eIFDCYkaaHFtoCI9aNWSof+b+Y8RIWif9iHz1vu8/wZk5kDWXzrdHFs/qBKm9r4nrGVpFyqjRhsEXuaOekmp0SId+kJl9q6efJMHmfgbZM85z+KMkYRgRUAA2zThTqt0pRw1G4AwyuYCWrKTOEU2RI4r7lCfxtin4yk+UIkShMbF53HqsG5ZSXdlvhSLNdIIwtPa4YTJIeXGsgIH2AOmC50yRwmBMN2fvWQ5IyuzeyNUQ99qgrR/xptYPBIkbYSNrerNIrrg1XbewTr9XHaLhmNiqRRCYDwegD0wxWyf3KENHmAcQ3kI+tPfyGUN/xF2wYqtu/oSzpczxU0pUnUDj6GmcEeW7Klcj0ud7ch7z5aEtB7K02CTWoFMo3WBoxK7EL5DqjfSdEcUbe4z1VKdWDZ+q5zhj30ZkC46N/9FyaABMJvbz98yQFtBpjqWQ9Em3h2MpinPNVSIZmv5fVrYc8XfSIH9Ky5o737KBIOQDA4nAMxtbVhXwnICt0qCbB5AfUxjcdk0QLvVrXncUiz4dZkfSb7rONpALUp6jqOU2CeLy3hw2H5eZqa313PtanPi65616nE5P2qJKG+lBJRBt/Pw8EF55XQA+pPfVrQ1frd 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:(13230022)(4636009)(136003)(376002)(346002)(39860400002)(366004)(396003)(451199015)(2906002)(5660300002)(52536014)(30864003)(8936002)(84970400001)(66899015)(33656002)(76116006)(316002)(66946007)(6916009)(86362001)(66556008)(55016003)(71200400001)(38100700002)(38070700005)(478600001)(8676002)(122000001)(6506007)(186003)(83380400001)(66476007)(26005)(41300700001)(54906003)(7696005)(9686003)(4743002)(53546011)(64756008)(66446008)(4326008)(579004)(559001)(357404004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB8917 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: DBAEUR03FT062.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: fcc929bb-6f34-41e7-71fc-08dac1afcf53 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: I5G6Lnq2HhkagK5Ts+V52Wfsxw0S8L9klLTXGNFrB3TOTvVBtC0bhfOEikgafjqc3TCNYRsaVH8vhKwDbf2lc7uRiKidN3IWLIrlad0xjJIiS+0N3zol6TN02LXjH4PHXV7e0CwNT5KRAL0NwN7ys8F0l/+vth1N4pQMRtapdUuPvNm98B6c9VfGn/WfYMJkfQlCiG781CUrrZil4wcwk3AsJRcz/tqYy4x3X4hdlXfcWD/kNP+aG4NPG0dTdlV/0IK3hjrdmXuxd7tsxuBuUSxw+fpLZE5uGWvrso/PoHQAoEuJV1Ph+NtDsZXKcc6kspxApuHj9AnO7gDfZwff8SyTU3G6sBnnF26zr9zNbbwoOQApbxcYu8amAvIU2F1bqkssuUAW5XH2EuKMvr0OaeRclcE9/preYgq4MwTjDrA5hhUvmLntSRyZFGjWYKUA0FperpX8hD6WUGZs1o2c7ltDwjB46rIlxXgj178pzSKdvZU1ICRtYqcpZgydmCF1fbr3VdLK9tVoWovmrdyqpPYA0FSfNSl09G4GRxXrFEEPxlT3rnggoNgzyTdy/F4XcK1AutfVmexNb1276KiZgNa6BZoioYmnwR2M3l2yG1THBljpXBGSl4jP19xVBeagMRqbI69/xItnCkr7G0YiWo0a7HB1Qn9MfZo2PCBfDRPdAyaAZpHU8SjwQzjIHC594CTZko3V983DOx5X6PyLpmGN3i+wUM+Irs5FXdOO8ZgAOVS0XSgRAl6/uMvSRv5mURPnRf0KZmWPyux/9OfUzGc/hiD0jtSR640Edo8yGow011KGY0D3VdcwM8TbMwtDSkGEAdgHwYahujvFYmkUkRw930bN4zvvtKOx1PghnS5ucWZVvm0F0KV8ziqn414G 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:(13230022)(4636009)(136003)(39860400002)(346002)(396003)(376002)(451199015)(40470700004)(36840700001)(46966006)(82310400005)(66899015)(84970400001)(8936002)(81166007)(40480700001)(55016003)(83380400001)(356005)(4326008)(30864003)(8676002)(478600001)(2906002)(41300700001)(70206006)(4743002)(6916009)(52536014)(70586007)(82740400003)(316002)(9686003)(54906003)(186003)(336012)(47076005)(33656002)(26005)(36860700001)(40460700003)(5660300002)(86362001)(53546011)(6506007)(7696005)(579004)(559001)(357404004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2022 17:37:01.8541 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ca48c69d-f5a7-4a3f-7056-08dac1afd84a 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: DBAEUR03FT062.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB9849 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SCC_10_SHORT_WORD_LINES,SCC_5_SHORT_WORD_LINES,SPF_HELO_PASS,SPF_NONE,TXREP,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: cGluZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFRhbWFyIENocmlz dGluYQ0KPiBTZW50OiBXZWRuZXNkYXksIE5vdmVtYmVyIDIsIDIwMjIgMjo0NiBQTQ0KPiBUbzog Z2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcNCj4gQ2M6IG5kIDxuZEBhcm0uY29tPjsgcmd1ZW50aGVy QHN1c2UuZGU7IFJpY2hhcmQgU2FuZGlmb3JkDQo+IDxSaWNoYXJkLlNhbmRpZm9yZEBhcm0uY29t Pg0KPiBTdWJqZWN0OiBbUEFUQ0ggMS8yXW1pZGRsZS1lbmQ6IFN1cHBvcnQgZWFybHkgYnJlYWsv cmV0dXJuIGF1dG8tDQo+IHZlY3Rvcml6YXRpb24uDQo+IA0KPiBIaSBBbGwsDQo+IA0KPiBUaGlz IHBhdGNoIGFkZHMgaW5pdGlhbCBzdXBwb3J0IGZvciBlYXJseSBicmVhayB2ZWN0b3JpemF0aW9u IGluIEdDQy4NCj4gVGhlIHN1cHBvcnQgaXMgYWRkZWQgZm9yIGFueSB0YXJnZXQgdGhhdCBpbXBs ZW1lbnRzIGEgdmVjdG9yIGNicmFuY2ggb3B0YWIuDQo+IA0KPiBDb25jcmV0ZWx5IHRoZSBraW5k IG9mIGxvb3BzIHN1cHBvcnRlZCBhcmUgb2YgdGhlIGZvcm1zOg0KPiANCj4gIGZvciAoaW50IGkg PSAwOyBpIDwgTjsgaSsrKQ0KPiAgew0KPiAgICA8c3RhdGVtZW50czE+DQo+ICAgIGlmICg8Y29u ZGl0aW9uPikNCj4gICAgICA8YWN0aW9uPjsNCj4gICAgPHN0YXRlbWVudHMyPg0KPiAgfQ0KPiAN Cj4gd2hlcmUgPGFjdGlvbj4gY2FuIGJlOg0KPiAgLSBicmVhaw0KPiAgLSByZXR1cm4NCj4gDQo+ IEFueSBudW1iZXIgb2Ygc3RhdGVtZW50cyBjYW4gYmUgdXNlZCBiZWZvcmUgdGhlIDxhY3Rpb24+ IG9jY3Vycy4NCj4gDQo+IFNpbmNlIHRoaXMgaXMgYW4gaW5pdGlhbCB2ZXJzaW9uIGZvciBHQ0Mg MTMgaXQgaGFzIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6DQo+IA0KPiAtIE9ubHkgZml4ZWQg c2l6ZWQgaXRlcmF0aW9ucyBhbmQgYnVmZmVycyBhcmUgc3VwcG9ydGVkLiAgVGhhdCBpcyB0byBz YXkgYW55DQo+ICAgdmVjdG9ycyBsb2FkZWQgb3Igc3RvcmVkIG11c3QgYmUgdG8gc3RhdGljYWxs eSBhbGxvY2F0ZWQgYXJyYXlzIHdpdGgga25vd24NCj4gICBzaXplcy4gTiBtdXN0IGFsc28gYmUg a25vd24uDQo+IC0gYW55IHN0b3JlcyBpbiA8c3RhdGVtZW50czE+IHNob3VsZCBub3QgYmUgdG8g dGhlIHNhbWUgb2JqZWN0cyBhcyBpbg0KPiAgIDxjb25kaXRpb24+LiAgTG9hZHMgYXJlIGZpbmUg YXMgbG9uZyBhcyB0aGV5IGRvbid0IGhhdmUgdGhlIHBvc3NpYmlsaXR5IHRvDQo+ICAgYWxpYXMu DQo+IC0gTm8gc3VwcG9ydCBmb3IgcHJvbG9ndWUgcGVlbGluZy4gIFNpbmNlIHdlIG9ubHkgc3Vw cG9ydCBmaXhlZCBidWZmZXJzIHRoaXMNCj4gICB3b3VsZG4ndCBiZSBhbiBpc3N1ZSBhcyB3ZSBh c3N1bWUgdGhlIGFycmF5cyBhcmUgY29ycmVjdGx5IGFsaWduZWQuDQo+IC0gRnVsbHkgbWFza2Vk IGxvb3BzIG9yIHVubWFza2VkIGxvb3BzIGFyZSBzdXBwb3J0ZWQsIGJ1dCBub3QgcGFydGlhbGx5 DQo+IG1hc2tlZA0KPiAgIGxvb3BzLg0KPiAtIE9ubHkgb25lIGFkZGl0aW9uYWwgZXhpdCBpcyBz dXBwb3J0ZWQgYXQgdGhpcyB0aW1lLiAgVGhlIG1ham9yaXR5IG9mIHRoZSBjb2RlDQo+ICAgd2ls bCBoYW5kbGUgbiBleGl0cy4gQnV0IG5vdCBhbGwgc28gYXQgdGhpcyB0aW1lIHRoaXMgcmVzdHJp Y3Rpb24gaXMgbmVlZGVkLg0KPiAtIFRoZSBlYXJseSBleGl0IG11c3QgYmUgYmVmb3JlIHRoZSBu YXR1cmFsIGxvb3AgZXhpdC9sYXRjaC4gIFRoZSB2ZWN0b3JpemVyIGlzDQo+ICAgZGVzaWduZWQg aW4gd2F5IHRvIHByb3BhZ2UgcGhpLW5vZGVzIGRvd253YXJkcy4gIEFzIHN1Y2ggc3VwcG9ydGlu ZyB0aGlzDQo+ICAgaW52ZXJ0ZWQgY29udHJvbCBmbG93IGlzIGhhcmQuDQo+IC0gTm8gc3VwcG9y dCBmb3IgZXBpbG9ndWUgdmVjdG9yaXphdGlvbi4gIFRoZSBvbmx5IGVwaWxvZ3VlIHN1cHBvcnRl ZCBpcyB0aGUNCj4gICBzY2FsYXIgZmluYWwgb25lLg0KPiANCj4gV2l0aCB0aGUgaGVscCBvZiBJ UEEgdGhpcyBzdGlsbCBnZXRzIGhpdCBxdWl0ZSBvZnRlbi4gIER1cmluZyBib290c3RyYXAgaXQN Cj4gaGl0IHJhdGhlciBmcmVxdWVudGx5IGFzIHdlbGwuDQo+IA0KPiBUaGlzIGltcGxlbWVudGF0 aW9uIGRvZXMgbm90IHN1cHBvcnQgY29tcGxldGVseSBoYW5kbGluZyB0aGUgZWFybHkgYnJlYWsN Cj4gaW5zaWRlDQo+IHRoZSB2ZWN0b3IgbG9vcCBpdHNlbGYgYnV0IGluc3RlYWQgc3VwcG9ydHMg YWRkaW5nIGNoZWNrcyBzdWNoIHRoYXQgaWYgd2UNCj4ga25vdw0KPiB0aGF0IHdlIGhhdmUgdG8g ZXhpdCBpbiB0aGUgY3VycmVudCBpdGVyYXRpb24gdGhlbiB3ZSBicmFuY2ggdG8gc2NhbGFyIGNv ZGUgdG8NCj4gYWN0dWFsbHkgZG8gdGhlIGZpbmFsIFZGIGl0ZXJhdGlvbnMgd2hpY2ggaGFuZGxl cyBhbGwgdGhlIGNvZGUgaW4gPGFjdGlvbj4uDQo+IA0KPiBuaXRlcnMgYW5hbHlzaXMgYW5kIHRo ZSBtYWpvcml0eSBvZiB0aGUgdmVjdG9yaXplciB3aXRoIGhhcmRjb2RlZCBzaW5nbGVfZXhpdA0K PiBoYXZlIGJlZW4gdXBkYXRlZCB3aXRoIHRoZSB1c2Ugb2YgYSBuZXcgZnVuY3Rpb24gbm9ybWFs X2V4aXQgd2hpY2gNCj4gcmV0dXJucyB0aGUNCj4gbG9vcCdzIG5hdHVyYWwgZXhpdC4NCj4gDQo+ IGZvciBuaXRlcnMgdGhlIG5hdHVyYWwgZXhpdCBpcyBzdGlsbCB3aGF0IGRldGVybWluZXMgdGhl IG92ZXJhbGwgaXRlcmF0aW9ucyBhcw0KPiB0aGF0IGlzIHRoZSBPKGl0ZXJzKSBmb3IgdGhlIGxv b3AuDQo+IA0KPiBGb3IgdGhlIHNjYWxhciBsb29wIHdlIGtub3cgdGhhdCB3aGF0ZXZlciBleGl0 IHlvdSB0YWtlIHlvdSBoYXZlIHRvDQo+IHBlcmZvcm0gYXQNCj4gbW9zdCBWRiBpdGVyYXRpb25z Lg0KPiANCj4gV2hlbiB0aGUgbG9vcCBpcyBwZWVsZWQgZHVyaW5nIHRoZSBjb3B5aW5nIEkgaGF2 ZSB0byBnbyB0aHJvdWdoIGdyZWF0DQo+IGxlbmd0aHMgdG8NCj4ga2VlcCB0aGUgZG9taW5hdG9y cyB1cCB0byBkYXRlLiAgQWxsIGV4aXRzIGZyb20gdGhlIGZpcnN0IGxvb3AgYXJlIHJld2lyZWQg dG8NCj4gdGhlDQo+IGxvb3AgaGVhZGVyIG9mIHRoZSBzZWNvbmQgbG9vcC4gIEJ1dCB0aGlzIGNh biBjaGFuZ2UgdGhlIGltbWVkaWF0ZQ0KPiBkb21pbmF0b3IuDQo+IA0KPiBXZSBoYWQgc3Bva2Vu IG9uIElSQyBhYm91dCByZW1vdmluZyB0aGUgZG9taW5hdG9ycyB2YWxpZGF0aW9uIGNhbGwgYXQg dGhlDQo+IGVuZCBvZg0KPiBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyBh bmQgbGVhdmluZyBpdCB1cCB0byBjZmcgY2xlYW51cCB0bw0KPiByZW1vdmUgdGhlIGludGVybWVk aWF0ZSBibG9ja3MgdGhhdCBjYXVzZSB0aGUgZG9taW5hdG9ycyB0byBmYWlsLg0KPiANCj4gSG93 ZXZlciB0aGlzIHR1cm5lZCBvdXQgbm90IHRvIHdvcmsgYXMgY2ZnY2xlYW51cCBpdHNlbGYgcmVx dWlyZXMgdGhlDQo+IGRvbWluYXRvcnMNCj4gZ3JhcGguICAgU28gaXQncyBzb21ld2hhdCBhIGNo aWNrZW4gYW5kIGVnZy4gIFRvIHdvcmsgYXJvdW5kIHRoaXMgSSBhZGRlZA0KPiBzb21lDQo+IHJ1 bGVzIGZvciB3aGVuIEkgdXBkYXRlIHdoYXQgZG9taW5hdG9yIGFuZCBhbHNvIHJlamVjdCB0aGUg Zm9ybXMgSSBkb24ndA0KPiBzdXBwb3J0DQo+IGR1cmluZyB2ZWN0X2FuYWx5emVfbG9vcF9mb3Jt Lg0KPiANCj4gSSBoYXZlIHRyaWVkIHRvIHN0cnVjdHVyZSB0aGUgdXBkYXRlcyB0byBsb29wLW1h bmlwLmNjIGluIGEgd2F5IHRoYXQgaXQgZml0cw0KPiB3aXRoIHRoZSBjdXJyZW50IGZsb3cuICBJ IHRoaW5rIEkgaGF2ZSBkb25lIGEgZGVjZW50IGpvYiwgYnV0IHRoZXJlIGFyZSB0aGluZ3MgSQ0K PiBjYW4gYWxzbyBkbyBkaWZmZXJlbnRseSBpZiBwcmVmZXJyZWQgYW5kIGhhdmUgcG9pbnRlZCB0 aGVtIG91dCBpbiBjb21tZW50cw0KPiBpbg0KPiB0aGUgc291cmNlLg0KPiANCj4gRm9yIHRoZSBs b29wIHBlZWxpbmcgd2UgcmV3cml0ZSB0aGUgbG9vcCBmb3JtOg0KPiANCj4gDQo+ICAgICAgICAg ICAgICAgICAgICAgIEhlYWRlcg0KPiAgICAgICAgICAgICAgICAgICAgICAgLS0tDQo+ICAgICAg ICAgICAgICAgICAgICAgICB8eHwNCj4gICAgICAgICAgICAgICAgICAgICAgICAyDQo+ICAgICAg ICAgICAgICAgICAgICAgICAgfA0KPiAgICAgICAgICAgICAgICAgICAgICAgIHYNCj4gICAgICAg ICAgICAgICAgIC0tLS0tLS0zPC0tLS0tLQ0KPiAgICAgIGVhcmx5IGV4aXQgfCAgICAgIHwgICAg ICB8DQo+ICAgICAgICAgICAgICAgICB2ICAgICAgdiAgICAgIHwgbGF0Y2gNCj4gICAgICAgICAg ICAgICAgIDcgICAgICA0LS0tLS0+Ng0KPiAgICAgICAgICAgICAgICAgfCAgICAgIHwNCj4gICAg ICAgICAgICAgICAgIHwgICAgICB2DQo+ICAgICAgICAgICAgICAgICB8ICAgICAgOA0KPiAgICAg ICAgICAgICAgICAgfCAgICAgIHwNCj4gICAgICAgICAgICAgICAgIHwgICAgICB2DQo+ICAgICAg ICAgICAgICAgICAtLS0tLS0+NQ0KPiANCj4gaW50bw0KPiANCj4gICAgICAgICAgICAgICAgICAg ICAgSGVhZGVyDQo+ICAgICAgICAgICAgICAgICAgICAgICAtLS0NCj4gICAgICAgICAgICAgICAg ICAgICAgIHx4fA0KPiAgICAgICAgICAgICAgICAgICAgICAgIDINCj4gICAgICAgICAgICAgICAg ICAgICAgICB8DQo+ICAgICAgICAgICAgICAgICAgICAgICAgdg0KPiAgICAgICAgICAgICAgICAg LS0tLS0tLTM8LS0tLS0tDQo+ICAgICAgZWFybHkgZXhpdCB8ICAgICAgfCAgICAgIHwNCj4gICAg ICAgICAgICAgICAgIHYgICAgICB2ICAgICAgfCBsYXRjaA0KPiAgICAgICAgICAgICAgICAgNyAg ICAgIDQtLS0tLT42DQo+ICAgICAgICAgICAgICAgICB8ICAgICAgfA0KPiAgICAgICAgICAgICAg ICAgfCAgICAgIHYNCj4gICAgICAgICAgICAgICAgIHwgICAgICA4DQo+ICAgICAgICAgICAgICAg ICB8ICAgICAgfA0KPiAgICAgICAgICAgICAgICAgfCAgICAgIHYNCj4gICAgICAgICAgICAgICAg IHwgIE5ldyBIZWFkZXINCj4gICAgICAgICAgICAgICAgIHwgICAgIC0tLQ0KPiAgICAgICAgICAg ICAgICAgLS0tLS0+fHh8DQo+ICAgICAgICAgICAgICAgICAgICAgICAgOQ0KPiAgICAgICAgICAg ICAgICAgICAgICAgIHwNCj4gICAgICAgICAgICAgICAgICAgICAgICB2DQo+ICAgICAgICAgICAg ICAgICAtLS0tLS0xMDwtLS0tLQ0KPiAgICAgIGVhcmx5IGV4aXQgfCAgICAgIHwgICAgICB8DQo+ ICAgICAgICAgICAgICAgICB2ICAgICAgdiAgICAgIHwgbGF0Y2gNCj4gICAgICAgICAgICAgICAg IDE0ICAgICAxMS0tLS0+MTMNCj4gICAgICAgICAgICAgICAgIHwgICAgICB8DQo+ICAgICAgICAg ICAgICAgICB8ICAgICAgdg0KPiAgICAgICAgICAgICAgICAgfCAgICAgIDEyDQo+ICAgICAgICAg ICAgICAgICB8ICAgICAgfA0KPiAgICAgICAgICAgICAgICAgfCAgICAgIHYNCj4gICAgICAgICAg ICAgICAgIC0tLS0tLT4gNQ0KPiANCj4gV2hlbiB3ZSB2ZWN0b3JpemUgd2UgbW92ZSBhbnkgc3Rh dGVtZW50IG5vdCByZWxhdGVkIHRvIHRoZSBlYXJseSBicmVhaw0KPiBpdHNlbGYgdG8NCj4gdGhl IEJCIGFmdGVyIHRoZSBlYXJseSBleGl0IGFuZCB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgYXMgYXBw cm9wcmlhdGUuDQo+IA0KPiBUaGlzIG1lYW5zIHRoYXQgd2UgY2hlY2sgYXQgdGhlIHN0YXJ0IG9m IGl0ZXJhdGlvbnMgd2hldGhlciB3ZSBhcmUgZ29pbmcgdG8NCj4gZXhpdA0KPiBvciBub3QuICBE dXJpbmcgdGhlIGFuYWx5aXMgcGhhc2Ugd2UgY2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0 byBkbyB0aGlzDQo+IG1vdmluZyBvZiBzdGF0ZW1lbnRzLiAgQWxzbyBub3RlIHRoYXQgd2Ugb25s eSBtb3ZlIHRoZSB2ZWN0b3Igc3RhdGVtZW50cw0KPiBhbmQNCj4gbGVhdmUgdGhlIHNjYWxhcnMg YWxvbmUuDQo+IA0KPiBDb2RlZ2VuOg0KPiANCj4gZm9yIGUuZy4NCj4gDQo+ICNkZWZpbmUgTiA4 MDMNCj4gdW5zaWduZWQgdmVjdF9hW05dOw0KPiB1bnNpZ25lZCB2ZWN0X2JbTl07DQo+IA0KPiB1 bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiB7DQo+ICB1bnNpZ25lZCByZXQgPSAwOw0KPiAg Zm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ICB7DQo+ICAgIHZlY3RfYltpXSA9IHggKyBp Ow0KPiAgICBpZiAodmVjdF9hW2ldID4geCkNCj4gICAgICBicmVhazsNCj4gICAgdmVjdF9hW2ld ID0geDsNCj4gDQo+ICB9DQo+ICByZXR1cm4gcmV0Ow0KPiB9DQo+IA0KPiBXZSBnZW5lcmF0ZSBm b3IgTkVPTjoNCj4gDQo+IHRlc3Q0Og0KPiAgICAgICAgIGFkcnAgICAgeDIsIC5MQzANCj4gICAg ICAgICBhZHJwICAgIHgzLCAuTEFOQ0hPUjANCj4gICAgICAgICBkdXAgICAgIHYyLjRzLCB3MA0K PiAgICAgICAgIGFkZCAgICAgeDMsIHgzLCA6bG8xMjouTEFOQ0hPUjANCj4gICAgICAgICBtb3Zp ICAgIHY0LjRzLCAweDQNCj4gICAgICAgICBhZGQgICAgIHg0LCB4MywgMzIxNg0KPiAgICAgICAg IGxkciAgICAgcTEsIFt4MiwgIzpsbzEyOi5MQzBdDQo+ICAgICAgICAgbW92ICAgICB4MSwgMA0K PiAgICAgICAgIG1vdiAgICAgdzIsIDANCj4gICAgICAgICAucDJhbGlnbiAzLCw3DQo+IC5MMzoN Cj4gICAgICAgICBsZHIgICAgIHEwLCBbeDMsIHgxXQ0KPiAgICAgICAgIGFkZCAgICAgdjMuNHMs IHYxLjRzLCB2Mi40cw0KPiAgICAgICAgIGFkZCAgICAgdjEuNHMsIHYxLjRzLCB2NC40cw0KPiAg ICAgICAgIGNtaGkgICAgdjAuNHMsIHYwLjRzLCB2Mi40cw0KPiAgICAgICAgIHVtYXhwICAgdjAu NHMsIHYwLjRzLCB2MC40cw0KPiAgICAgICAgIGZtb3YgICAgeDUsIGQwDQo+ICAgICAgICAgY2Ju eiAgICB4NSwgLkw2DQo+ICAgICAgICAgYWRkICAgICB3MiwgdzIsIDENCj4gICAgICAgICBzdHIg ICAgIHEzLCBbeDEsIHg0XQ0KPiAgICAgICAgIHN0ciAgICAgcTIsIFt4MywgeDFdDQo+ICAgICAg ICAgYWRkICAgICB4MSwgeDEsIDE2DQo+ICAgICAgICAgY21wICAgICB3MiwgMjAwDQo+ICAgICAg ICAgYm5lICAgICAuTDMNCj4gICAgICAgICBtb3YgICAgIHc3LCAzDQo+IC5MMjoNCj4gICAgICAg ICBsc2wgICAgIHcyLCB3MiwgMg0KPiAgICAgICAgIGFkZCAgICAgeDUsIHgzLCAzMjE2DQo+ICAg ICAgICAgYWRkICAgICB3NiwgdzIsIHcwDQo+ICAgICAgICAgc3h0dyAgICB4NCwgdzINCj4gICAg ICAgICBsZHIgICAgIHcxLCBbeDMsIHg0LCBsc2wgMl0NCj4gICAgICAgICBzdHIgICAgIHc2LCBb eDUsIHg0LCBsc2wgMl0NCj4gICAgICAgICBjbXAgICAgIHcwLCB3MQ0KPiAgICAgICAgIGJjYyAg ICAgLkw0DQo+ICAgICAgICAgYWRkICAgICB3MSwgdzIsIDENCj4gICAgICAgICBzdHIgICAgIHcw LCBbeDMsIHg0LCBsc2wgMl0NCj4gICAgICAgICBhZGQgICAgIHc2LCB3MSwgdzANCj4gICAgICAg ICBzeHR3ICAgIHgxLCB3MQ0KPiAgICAgICAgIGxkciAgICAgdzQsIFt4MywgeDEsIGxzbCAyXQ0K PiAgICAgICAgIHN0ciAgICAgdzYsIFt4NSwgeDEsIGxzbCAyXQ0KPiAgICAgICAgIGNtcCAgICAg dzAsIHc0DQo+ICAgICAgICAgYmNjICAgICAuTDQNCj4gICAgICAgICBhZGQgICAgIHc0LCB3Miwg Mg0KPiAgICAgICAgIHN0ciAgICAgdzAsIFt4MywgeDEsIGxzbCAyXQ0KPiAgICAgICAgIHN4dHcg ICAgeDEsIHc0DQo+ICAgICAgICAgYWRkICAgICB3NiwgdzEsIHcwDQo+ICAgICAgICAgbGRyICAg ICB3NCwgW3gzLCB4MSwgbHNsIDJdDQo+ICAgICAgICAgc3RyICAgICB3NiwgW3g1LCB4MSwgbHNs IDJdDQo+ICAgICAgICAgY21wICAgICB3MCwgdzQNCj4gICAgICAgICBiY2MgICAgIC5MNA0KPiAg ICAgICAgIHN0ciAgICAgdzAsIFt4MywgeDEsIGxzbCAyXQ0KPiAgICAgICAgIGFkZCAgICAgdzIs IHcyLCAzDQo+ICAgICAgICAgY21wICAgICB3NywgMw0KPiAgICAgICAgIGJlcSAgICAgLkw0DQo+ ICAgICAgICAgc3h0dyAgICB4MSwgdzINCj4gICAgICAgICBhZGQgICAgIHcyLCB3MiwgdzANCj4g ICAgICAgICBsZHIgICAgIHc0LCBbeDMsIHgxLCBsc2wgMl0NCj4gICAgICAgICBzdHIgICAgIHcy LCBbeDUsIHgxLCBsc2wgMl0NCj4gICAgICAgICBjbXAgICAgIHcwLCB3NA0KPiAgICAgICAgIGJj YyAgICAgLkw0DQo+ICAgICAgICAgc3RyICAgICB3MCwgW3gzLCB4MSwgbHNsIDJdDQo+IC5MNDoN Cj4gICAgICAgICBtb3YgICAgIHcwLCAwDQo+ICAgICAgICAgcmV0DQo+ICAgICAgICAgLnAyYWxp Z24gMiwsMw0KPiAuTDY6DQo+ICAgICAgICAgbW92ICAgICB3NywgNA0KPiAgICAgICAgIGIgICAg ICAgLkwyDQo+IA0KPiBhbmQgZm9yIFNWRToNCj4gDQo+IHRlc3Q0Og0KPiAgICAgICAgIGFkcnAg ICAgeDIsIC5MQU5DSE9SMA0KPiAgICAgICAgIGFkZCAgICAgeDIsIHgyLCA6bG8xMjouTEFOQ0hP UjANCj4gICAgICAgICBhZGQgICAgIHg1LCB4MiwgMzIxNg0KPiAgICAgICAgIG1vdiAgICAgeDMs IDANCj4gICAgICAgICBtb3YgICAgIHcxLCAwDQo+ICAgICAgICAgY250dyAgICB4NA0KPiAgICAg ICAgIG1vdiAgICAgejEucywgdzANCj4gICAgICAgICBpbmRleCAgIHowLnMsICMwLCAjMQ0KPiAg ICAgICAgIHB0cnVlICAgcDEuYiwgYWxsDQo+ICAgICAgICAgcHRydWUgICBwMC5zLCBhbGwNCj4g ICAgICAgICAucDJhbGlnbiAzLCw3DQo+IC5MMzoNCj4gICAgICAgICBsZDF3ICAgIHoyLnMsIHAx L3osIFt4MiwgeDMsIGxzbCAyXQ0KPiAgICAgICAgIGFkZCAgICAgejMucywgejAucywgejEucw0K PiAgICAgICAgIGNtcGxvICAgcDIucywgcDAveiwgejEucywgejIucw0KPiAgICAgICAgIGIuYW55 ICAgLkwyDQo+ICAgICAgICAgc3QxdyAgICB6My5zLCBwMSwgW3g1LCB4MywgbHNsIDJdDQo+ICAg ICAgICAgYWRkICAgICB3MSwgdzEsIDENCj4gICAgICAgICBzdDF3ICAgIHoxLnMsIHAxLCBbeDIs IHgzLCBsc2wgMl0NCj4gICAgICAgICBhZGQgICAgIHgzLCB4MywgeDQNCj4gICAgICAgICBpbmN3 ICAgIHowLnMNCj4gICAgICAgICBjbXAgICAgIHczLCA4MDMNCj4gICAgICAgICBibHMgICAgIC5M Mw0KPiAuTDU6DQo+ICAgICAgICAgbW92ICAgICB3MCwgMA0KPiAgICAgICAgIHJldA0KPiAgICAg ICAgIC5wMmFsaWduIDIsLDMNCj4gLkwyOg0KPiAgICAgICAgIGNudHcgICAgeDUNCj4gICAgICAg ICBtdWwgICAgIHcxLCB3MSwgdzUNCj4gICAgICAgICBjYnogICAgIHc1LCAuTDUNCj4gICAgICAg ICBzeHR3ICAgIHgxLCB3MQ0KPiAgICAgICAgIHN1YiAgICAgdzUsIHc1LCAjMQ0KPiAgICAgICAg IGFkZCAgICAgeDUsIHg1LCB4MQ0KPiAgICAgICAgIGFkZCAgICAgeDYsIHgyLCAzMjE2DQo+ICAg ICAgICAgYiAgICAgICAuTDYNCj4gICAgICAgICAucDJhbGlnbiAyLCwzDQo+IC5MMTQ6DQo+ICAg ICAgICAgc3RyICAgICB3MCwgW3gyLCB4MSwgbHNsIDJdDQo+ICAgICAgICAgY21wICAgICB4MSwg eDUNCj4gICAgICAgICBiZXEgICAgIC5MNQ0KPiAgICAgICAgIG1vdiAgICAgeDEsIHg0DQo+IC5M NjoNCj4gICAgICAgICBsZHIgICAgIHczLCBbeDIsIHgxLCBsc2wgMl0NCj4gICAgICAgICBhZGQg ICAgIHc0LCB3MCwgdzENCj4gICAgICAgICBzdHIgICAgIHc0LCBbeDYsIHgxLCBsc2wgMl0NCj4g ICAgICAgICBhZGQgICAgIHg0LCB4MSwgMQ0KPiAgICAgICAgIGNtcCAgICAgdzAsIHczDQo+ICAg ICAgICAgYmNzICAgICAuTDE0DQo+ICAgICAgICAgbW92ICAgICB3MCwgMA0KPiAgICAgICAgIHJl dA0KPiANCj4gT24gdGhlIHdvcmtsb2FkcyB0aGlzIHdvcmsgaXMgYmFzZWQgb24gd2Ugc2VlIGJl dHdlZW4gMi0zeCBwZXJmb3JtYW5jZQ0KPiB1cGxpZnQNCj4gdXNpbmcgdGhpcyBwYXRjaC4NCj4g DQo+IE91dHN0YW5kaW5nIGlzc3VlczoNCj4gIC0gVGhlIHBhdGNoIGlzIGZ1bGx5IGZ1bmN0aW9u YWwgYnV0IGhhcyB0d28gdGhpbmdzIEkgd29uZGVyIGFib3V0DQo+ICAgICogSW4gdmVjdF90cmFu c2Zvcm1fZWFybHlfYnJlYWsgc2hvdWxkIEkganVzdCByZWZhY3Rvcg0KPiB2ZWN0b3JpemFibGVf Y29tcGFyaXNvbg0KPiAgICAgIGFuZCB1c2UgaXQgdG8gZ2VuZXJhdGUgdGhlIGNvbmRpdGlvbiBi b2R5PyAgVGhhdCB3b3VsZCBhbHNvIGdldCB0aGUNCj4gY29zdGluZy4NCj4gICAgKiBUaGUgdGVz dGNhc2UgdmVjdC1lYXJseS1icmVha18yLmMgc2hvd3Mgb25lIGZvcm0gdGhhdCBjdXJyZW50bHkg ZG9lc24ndA0KPiB3b3JrDQo+ICAgICAgYW5kIGNyYXNoZXMuICBUaGUgcmVhc29uIGlzIHRoYXQg dGhlcmUncyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIHR5cGVzDQo+IHJlcXVpcmVkDQo+ICAgICAg dG8gdmVjdG9yaXplIHRoaXMuICBUaGUgdmVjdG9yIGxvYWRzIGNhdXNlIG11bHRpcGxlIHN0YXRl bWVudHMgdG8gYmUNCj4gZ2VuZXJhdGVkDQo+ICAgICAgYW5kIHRodXMgcmVxdWlyZSBtdWx0aXBs ZSBjb21wYXJpc29ucy4gIEluIHRoaXMgY2FzZSA4IG9mIHRoZW0uICBIb3dldmVyDQo+ICAgICAg d2hlbiBkZXRlcm1pbmluZyBuY29waWVzIHRoZSBlYXJseSBleGl0IHVzZXMgYSBib29sZWFuIG1v ZGUgYW5kIHNvDQo+IG5jb3BpZXMNCj4gICAgICBpcyBhbHdheXMgMS4gIElmIEkgZm9yY2UgaXQg aW5zdGVhZCB0byBkZXRlcm1pbmUgbmNvcGllcyBiYXNlZCBvbiBpdCdzDQo+ICAgICAgb3BlcmFu ZHMgaW5zdGVhZCBvZiB0aGUgZmluYWwgdHlwZSB0aGVuIHdlIGdldCB0aGUgY29uZGl0b25hbCB2 ZWN0b3JpemVkDQo+ICAgICAgYnV0IHRoZSBpdCBoYXMgYSBtaXNtYXRjaCBjb21wYXJpbmcgaW50 ZWdlciB2ZWN0b3JzIHdpdGggYm9vbGVhbi4NCj4gICAgICBJdCBmZWVscyBsaWtlIEkgbmVlZCBz b21lIGtpbmQgb2YgYm9vbGVhbiByZWR1Y3Rpb25zIGhlcmUuLiAgU2hvdWxkIEkganVzdA0KPiAg ICAgIHJlamVjdCB0aGlzIGZvcm0gZm9yIG5vdz8NCj4gDQo+IEJvb3RzdHJhcHBlZCBSZWd0ZXN0 ZWQgb24gYWFyY2g2NC1ub25lLWxpbnV4LWdudSwgeDg2XzY0LXBjLWxpbnV4LWdudQ0KPiBhbmQg aXNzdWVzDQo+IG1lbnRpb25lZCBhYm92ZS4NCj4gDQo+IE9LIGVub3VnaCBkZXNpZ24gYW5kIGlt cGxlbWVudGF0aW9uIGZvciBHQ0MgMTM/DQo+IA0KPiBUaGFua3MsDQo+IFRhbWFyDQo+IA0KPiBn Y2MvQ2hhbmdlTG9nOg0KPiANCj4gCSogY2ZnbG9vcC5jYyAobm9ybWFsX2V4aXQpOiBOZXcuDQo+ IAkqIGNmZ2xvb3AuaCAobm9ybWFsX2V4aXQpOiBOZXcuDQo+IAkqIGRvYy9sb29wLnRleGkgKG5v cm1hbF9leGl0KTogRG9jdW1lbnQuDQo+IAkqIGRvYy9zb3VyY2VidWlsZC50ZXhpICh2ZWN0X2Vh cmx5X2JyZWFrKTogRG9jdW1lbnQuDQo+IAkqIHRyZWUtc2NhbGFyLWV2b2x1dGlvbi5jYyAoZ2V0 X2xvb3BfZXhpdF9jb25kaXRpb24pOiBSZWZhY3Rvci4NCj4gCShnZXRfZWRnZV9jb25kaXRpb24p OiBOZXcuDQo+IAkqIHRyZWUtc2NhbGFyLWV2b2x1dGlvbi5oIChnZXRfZWRnZV9jb25kaXRpb24p OiBuZXcuDQo+IAkqIHRyZWUtdmVjdC1kYXRhLXJlZnMuY2MgKHZlY3RfZW5oYW5jZV9kYXRhX3Jl ZnNfYWxpZ25tZW50KTogR2V0DQo+IG1haW4NCj4gCWV4aXQgZHVyaW5nIHBlZWxpbmcgY2hlY2su DQo+IAkqIHRyZWUtdmVjdC1sb29wLW1hbmlwLmNjDQo+IAkoc2xwZWVsX3RyZWVfZHVwbGljYXRl X2xvb3BfdG9fZWRnZV9jZmcpOiBTdXBwb3J0IGNvcHlpbmcgQ0ZHcw0KPiB3aXRoDQo+IAltdWx0 aXBsZSBleGl0cyBhbmQgcGxhY2UgYXQgdGhlIGVuZC4NCj4gCSh2ZWN0X3VwZGF0ZV9pdnNfYWZ0 ZXJfdmVjdG9yaXplcik6IFNraXAgb24gZWFybHkgZXhpdHMuDQo+IAkodmVjdF91cGRhdGVfaXZz X2FmdGVyX2Vhcmx5X2JyZWFrKTogTmV3Lg0KPiAJKGdpbXBsZV9maW5kX2xhc3RfbWVtX3VzZSk6 IE5ldy4NCj4gCShzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMsDQo+IHNscGVlbF91 cGRhdGVfcGhpX25vZGVzX2Zvcl9ndWFyZDIsDQo+IAlzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19m b3JfbGNzc2EsDQo+IHZlY3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVyc19tdWx0X3ZmLA0KPiAJc2xw ZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wLA0KPiB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9wYXJ0 aWFsX3ZlY3RvcnMpOg0KPiAJVXBkYXRlIGZvciBtdWx0aXBsZSBleGl0cy4NCj4gCSh2ZWN0X3Nl dF9sb29wX2NvbmRpdGlvbiwgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsKToNCj4gVXBk YXRlDQo+IAljb25kaXRpb24gZm9yIGVhcmx5IGV4aXRzLg0KPiAJKHZlY3RfZG9fcGVlbGluZyk6 IFBlZWwgZm9yIGVhcmx5IGJyZWFrcy4NCj4gCSogdHJlZS12ZWN0LWxvb3AuY2MgKHZlY3RfZ2V0 X2xvb3Bfbml0ZXJzKTogQW5hbHl6ZSBhbmQgcmV0dXJuIGFsbA0KPiAJZXhpdHMuDQo+IAkodmVj dF9hbmFseXplX2xvb3BfZm9ybSwgdmVjdF9jcmVhdGVfbG9vcF92aW5mbyk6IEFuYWx5emUgYWxs DQo+IGNvbmRzLg0KPiAJKHZlY3RfZGV0ZXJtaW5lX3BhcnRpYWxfdmVjdG9yc19hbmRfcGVlbGlu Zyk6IFN1cG9ydCBtdWx0aXBsZQ0KPiBleGl0cyBieQ0KPiAJcGVlaW5nLg0KPiAJKHZlY3RfYW5h bHl6ZV9sb29wKTogQWRkIGFuYXlzaXMgZm9yIG11bHRpcGxlIGV4aXRzLg0KPiAJKG1vdmVfZWFy bHlfZXhpdF9zdG10cywgdmVjdF90cmFuc2Zvcm1fZWFybHlfYnJlYWssDQo+IAl2YWxpZGF0ZV9l YXJseV9leGl0X3N0bXRzLCB2ZWN0b3JpemFibGVfZWFybHlfZXhpdCk6IE5ldy4NCj4gCSh2ZWN0 b3JpemFibGVfbGl2ZV9vcGVyYXRpb24pOiBJZ25vcmUgZWFybHkgYnJlYWsgc3RhdGVtZW50cy4N Cj4gCShzY2FsZV9wcm9maWxlX2Zvcl92ZWN0X2xvb3AsIHZlY3RfdHJhbnNmb3JtX2xvb3ApOiBT dXBwb3J0DQo+IG11bHRpcGxlDQo+IAlleGl0cy4NCj4gCSogdHJlZS12ZWN0LXN0bXRzLmNjICh2 ZWN0X3N0bXRfcmVsZXZhbnRfcCk6IEFuYWx5emUgZWFybHkgYnJlYWtzLg0KPiAJKHByZXBhcmVf dmVjX21hc2spOiBFeHBvc2UuDQo+IAkodmVjdF9hbmFseXplX3N0bXQsIHZlY3RfdHJhbnNmb3Jt X3N0bXQsIHZlY3RfaXNfc2ltcGxlX3VzZSwNCj4gCXZlY3RfZ2V0X3ZlY3Rvcl90eXBlc19mb3Jf c3RtdCk6IFN1cHBvcnQgbG9vcCBjb250cm9sL2Vhcmx5IGV4aXRzLg0KPiAJKiB0cmVlLXZlY3Rv cml6ZXIuY2MgKHBhc3NfdmVjdG9yaXplOjpleGVjdXRlKTogUmVjb3JkIGFsbCBleGl0cyBmb3IN Cj4gCVJQTy4NCj4gCSogdHJlZS12ZWN0b3JpemVyLmggKGVudW0gdmVjdF9kZWZfdHlwZSk6IEFk ZCB2ZWN0X2Vhcmx5X2V4aXRfZGVmLg0KPiAJKHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCk6 IENoYW5nZSBsb29wIHRvIGxvb3BfdmVjX2luZm8uDQo+IAkoc3RydWN0IHZlY3RfbG9vcF9mb3Jt X2luZm8pOiBBZGQgbG9vcCBjb25kaXRpb25zLg0KPiAJKExPT1BfVklORk9fRUFSTFlfQlJFQUtT LCB2ZWN0X3RyYW5zZm9ybV9lYXJseV9icmVhaywNCj4gCXZlY3Rvcml6YWJsZV9lYXJseV9leGl0 KTogTmV3Lg0KPiAJKHByZXBhcmVfdmVjX21hc2spOiBOZXcuDQo+IAkodmVjX2luZm8pOiBBZGQg ZWFybHlfYnJlYWtzLg0KPiAJKGxvb3BfdmVjX2luZm9fZm9yX2xvb3ApOiBNYWtlIGxvb3AgY29u c3QuDQo+IA0KPiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoNCj4gDQo+IAkqIGxpYi90YXJnZXQt c3VwcG9ydHMuZXhwICh2ZWN0X2Vhcmx5X2JyZWFrKTogTmV3Lg0KPiAJKiBnKysuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzEuY2M6IE5ldyB0ZXN0Lg0KPiAJKiBnKysuZGcvdmVjdC92ZWN0LWVh cmx5LWJyZWFrXzIuY2M6IE5ldyB0ZXN0Lg0KPiAJKiBnKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrXzMuY2M6IE5ldyB0ZXN0Lg0KPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1 bl8xLmM6IE5ldyB0ZXN0Lg0KPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8x MC5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMi5j OiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMy5jOiBO ZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNC5jOiBOZXcg dGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNS5jOiBOZXcgdGVz dC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNi5jOiBOZXcgdGVzdC4N Cj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNy5jOiBOZXcgdGVzdC4NCj4g CSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fOC5jOiBOZXcgdGVzdC4NCj4gCSog Z2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fOS5jOiBOZXcgdGVzdC4NCj4gCSogZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8xLmM6IE5ldyB0ZXN0Lg0KPiAJKiBn Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYzogTmV3IHRlc3QuDQo+IAkq IGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVha18xMC5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVha18xMS5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVha18xMi5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18xMy5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18x NC5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNS5jOiBO ZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18yLmM6IE5ldyB0ZXN0 Lg0KPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuYzogTmV3IHRlc3QuDQo+IAkq IGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNC5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVha181LmM6IE5ldyB0ZXN0Lg0KPiAJKiBnY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzYuYzogTmV3IHRlc3QuDQo+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfNy5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh a184LmM6IE5ldyB0ZXN0Lg0KPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzkuYzog TmV3IHRlc3QuDQo+IA0KPiAtLS0gaW5saW5lIGNvcHkgb2YgcGF0Y2ggLS0NCj4gZGlmZiAtLWdp dCBhL2djYy9jZmdsb29wLmggYi9nY2MvY2ZnbG9vcC5oDQo+IGluZGV4DQo+IDUyOGIxMjE5YmMz N2FkOGYxMTRkNWNmMzgxYzBjZmY4OTlkYjMxZWUuLjljN2YwMTlhNTFhYmZlMmRlOGUxZGQ3MTM1 DQo+IGRlYTI0NjNiMDI1NmEwIDEwMDY0NA0KPiAtLS0gYS9nY2MvY2ZnbG9vcC5oDQo+ICsrKyBi L2djYy9jZmdsb29wLmgNCj4gQEAgLTM4NSw2ICszODUsNyBAQCBleHRlcm4gYmFzaWNfYmxvY2sN Cj4gKmdldF9sb29wX2JvZHlfaW5fY3VzdG9tX29yZGVyIChjb25zdCBjbGFzcyBsb29wICosIHZv aWQgKiwNCj4gDQo+ICBleHRlcm4gYXV0b192ZWM8ZWRnZT4gZ2V0X2xvb3BfZXhpdF9lZGdlcyAo Y29uc3QgY2xhc3MgbG9vcCAqLA0KPiBiYXNpY19ibG9jayAqID0gTlVMTCk7DQo+ICBleHRlcm4g ZWRnZSBzaW5nbGVfZXhpdCAoY29uc3QgY2xhc3MgbG9vcCAqKTsNCj4gK2V4dGVybiBlZGdlIG5v cm1hbF9leGl0IChjb25zdCBjbGFzcyBsb29wICopOw0KPiAgZXh0ZXJuIGVkZ2Ugc2luZ2xlX2xp a2VseV9leGl0IChjbGFzcyBsb29wICpsb29wLCBjb25zdCB2ZWM8ZWRnZT4gJik7DQo+ICBleHRl cm4gdW5zaWduZWQgbnVtX2xvb3BfYnJhbmNoZXMgKGNvbnN0IGNsYXNzIGxvb3AgKik7DQo+IA0K PiBkaWZmIC0tZ2l0IGEvZ2NjL2NmZ2xvb3AuY2MgYi9nY2MvY2ZnbG9vcC5jYw0KPiBpbmRleA0K PiA1N2JmN2IxODU1ZDRkZDIwZmIzZjQyMzg4MTI0OTMyZDBjYTJiNDhhLi45N2E3MzczZmI2ZDk1 MTRkYTYwMmQ1YmUwDQo+IDEwNTBmMmVjNjYwOTRiYyAxMDA2NDQNCj4gLS0tIGEvZ2NjL2NmZ2xv b3AuY2MNCj4gKysrIGIvZ2NjL2NmZ2xvb3AuY2MNCj4gQEAgLTE4MTIsNiArMTgxMiwyMCBAQCBz aW5nbGVfZXhpdCAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCkNCj4gICAgICByZXR1cm4gTlVMTDsN Cj4gIH0NCj4gDQo+ICsvKiBSZXR1cm5zIHRoZSBub3JtYWwgZXhpdCBlZGdlIG9mIExPT1AsIG9y IE5VTEwgaWYgTE9PUCBoYXMgZWl0aGVyIG5vDQo+IGV4aXQuDQo+ICsgICBJZiBsb29wcyBkbyBu b3QgaGF2ZSB0aGUgZXhpdHMgcmVjb3JkZWQsIE5VTEwgaXMgcmV0dXJuZWQgYWx3YXlzLiAgKi8N Cj4gKw0KPiArZWRnZQ0KPiArbm9ybWFsX2V4aXQgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3ApDQo+ ICt7DQo+ICsgIHN0cnVjdCBsb29wX2V4aXQgKmV4aXQgPSBsb29wLT5leGl0cy0+bmV4dDsNCj4g Kw0KPiArICBpZiAoIWxvb3BzX3N0YXRlX3NhdGlzZmllc19wIChMT09QU19IQVZFX1JFQ09SREVE X0VYSVRTKSkNCj4gKyAgICByZXR1cm4gTlVMTDsNCj4gKw0KPiArICByZXR1cm4gZXhpdC0+ZTsN Cj4gK30NCj4gKw0KPiAgLyogUmV0dXJucyB0cnVlIHdoZW4gQkIgaGFzIGFuIGluY29taW5nIGVk Z2UgZXhpdGluZyBMT09QLiAgKi8NCj4gDQo+ICBib29sDQo+IGRpZmYgLS1naXQgYS9nY2MvZG9j L2xvb3AudGV4aSBiL2djYy9kb2MvbG9vcC50ZXhpDQo+IGluZGV4DQo+IDZlODY1N2EwNzRkMjQ0 N2RiN2FlOWI3NWNiZmJiNzEyODJiODQyODcuLmUxZGUyYWM0MGY4N2Y4NzlhYjY5MWY2OGINCj4g ZDQxYjNiYzIxYTgzYmY3IDEwMDY0NA0KPiAtLS0gYS9nY2MvZG9jL2xvb3AudGV4aQ0KPiArKysg Yi9nY2MvZG9jL2xvb3AudGV4aQ0KPiBAQCAtMjExLDYgKzIxMSwxMCBAQCByZWxhdGlvbiwgYW5k IGJyZWF0aC1maXJzdCBzZWFyY2ggb3JkZXIsIHJlc3BlY3RpdmVseS4NCj4gIEBpdGVtIEBjb2Rl e3NpbmdsZV9leGl0fTogUmV0dXJucyB0aGUgc2luZ2xlIGV4aXQgZWRnZSBvZiB0aGUgbG9vcCwg b3INCj4gIEBjb2Rle05VTEx9IGlmIHRoZSBsb29wIGhhcyBtb3JlIHRoYW4gb25lIGV4aXQuICBZ b3UgY2FuIG9ubHkgdXNlIHRoaXMNCj4gIGZ1bmN0aW9uIGlmIEBjb2Rle0xPT1BTX0hBVkVfUkVD T1JERURfRVhJVFN9IGlzIHVzZWQuDQo+ICtmdW5jdGlvbiBpZiBMT09QU19IQVZFX01BUktFRF9T SU5HTEVfRVhJVFMgcHJvcGVydHkgaXMgdXNlZC4NCj4gK0BpdGVtIEBjb2Rle25vcm1hbF9leGl0 fTogUmV0dXJucyB0aGUgbmF0dXJhbCBleGl0IGVkZ2Ugb2YgdGhlIGxvb3AsDQo+ICtldmVuIGlm IHRoZSBsb29wIGhhcyBtb3JlIHRoYW4gb25lIGV4aXQuICBUaGUgbmF0dXJhbCBleGl0IGlzIHRo ZSBleGl0DQo+ICt0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHRha2VuIHdoZXJlIHRoZSBsb29wIHRv IGJlIGZ1bGx5IGV4ZWN1dGVkLg0KPiAgQGl0ZW0gQGNvZGV7Z2V0X2xvb3BfZXhpdF9lZGdlc306 IEVudW1lcmF0ZXMgdGhlIGV4aXQgZWRnZXMgb2YgYSBsb29wLg0KPiAgQGl0ZW0gQGNvZGV7anVz dF9vbmNlX2VhY2hfaXRlcmF0aW9uX3B9OiBSZXR1cm5zIHRydWUgaWYgdGhlIGJhc2ljIGJsb2Nr DQo+ICBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhY2ggaXRlcmF0aW9uIG9mIGEg bG9vcCAodGhhdCBpcywgaXQNCj4gQEAgLTYyMyw0ICs2MjcsNCBAQCBtYXhpbXVtIHZlcmJvc2l0 eSB0aGUgZGV0YWlscyBvZiBhIGRhdGEgZGVwZW5kZW5jZQ0KPiByZWxhdGlvbnMgYXJyYXksDQo+ ICBAY29kZXtkdW1wX2Rpc3RfZGlyX3ZlY3RvcnN9IHByaW50cyBvbmx5IHRoZSBjbGFzc2ljYWwg ZGlzdGFuY2UgYW5kDQo+ICBkaXJlY3Rpb24gdmVjdG9ycyBmb3IgYSBkYXRhIGRlcGVuZGVuY2Ug cmVsYXRpb25zIGFycmF5LCBhbmQNCj4gIEBjb2Rle2R1bXBfZGF0YV9yZWZlcmVuY2VzfSBwcmlu dHMgdGhlIGRldGFpbHMgb2YgdGhlIGRhdGEgcmVmZXJlbmNlcw0KPiAtY29udGFpbmVkIGluIGEg ZGF0YSByZWZlcmVuY2UgYXJyYXkuDQo+ICtjb250YWluZWQgaW4gYSBkYXRhIHJlZmVyZW5jZSBh cnJheQ0KPiBkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhpIGIvZ2NjL2RvYy9z b3VyY2VidWlsZC50ZXhpDQo+IGluZGV4DQo+IGUyMWExZDM4MWUwNWRhMWJmY2NiNTU1MDY4ZWEx ZGJlYWJkOWZjNzkuLjE2ZmE5NGViZjUzMmQyN2NkOWEzYTQ1YTcNCj4gYWFkNTc4Y2E2OTIwNDk2 IDEwMDY0NA0KPiAtLS0gYS9nY2MvZG9jL3NvdXJjZWJ1aWxkLnRleGkNCj4gKysrIGIvZ2NjL2Rv Yy9zb3VyY2VidWlsZC50ZXhpDQo+IEBAIC0xNjQwLDYgKzE2NDAsMTAgQEAgVGFyZ2V0IHN1cHBv cnRzIGhhcmR3YXJlIHZlY3RvcnMgb2YgQGNvZGV7ZmxvYXR9DQo+IHdoZW4NCj4gIEBvcHRpb257 LWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zfSBpcyBub3QgaW4gZWZmZWN0Lg0KPiAgVGhpcyBp bXBsaWVzIEBjb2Rle3ZlY3RfZmxvYXR9Lg0KPiANCj4gK0BpdGVtIHZlY3RfZWFybHlfYnJlYWsN Cj4gK1RhcmdldCBzdXBwb3J0cyBoYXJkd2FyZSB2ZWN0b3JpemF0aW9uIG9mIGxvb3BzIHdpdGgg ZWFybHkgYnJlYWtzLg0KPiArVGhpcyByZXF1aXJlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg Y2JyYW5jaCBvcHRhYiBmb3IgdmVjdG9ycy4NCj4gKw0KPiAgQGl0ZW0gdmVjdF9pbnQNCj4gIFRh cmdldCBzdXBwb3J0cyBoYXJkd2FyZSB2ZWN0b3JzIG9mIEBjb2Rle2ludH0uDQo+IA0KPiBkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuY2MN Cj4gYi9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi42YTgzNjQ4Y2EzNmUyYzhmZWViNzgzMzVmYw0KPiBjZjNmM2I4MmE5 N2QyZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVha18xLmNjDQo+IEBAIC0wLDAgKzEsNjEgQEANCj4gKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovDQo+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vh cmx5X2JyZWFrIH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf aW50IH0gKi8NCj4gKw0KPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi13IC1PMiIgfSAq Lw0KPiArDQo+ICt2b2lkIGZhbmN5X2Fib3J0KGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopIF9f YXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOw0KPiArdGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5 cGVuYW1lPiBzdHJ1Y3QgcG9seV9pbnRfcG9kIHsgaW50IGNvZWZmc1tOXTsgfTsNCj4gK3RlbXBs YXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZT4gY2xhc3MgcG9seV9pbnQgOiBwdWJsaWMgcG9seV9p bnRfcG9kPE4sDQo+IGludD4gew0KPiArcHVibGljOg0KPiArICB0ZW1wbGF0ZSA8dHlwZW5hbWUg Q2E+IHBvbHlfaW50ICZvcGVyYXRvcis9KGNvbnN0IHBvbHlfaW50X3BvZDxOLA0KPiBDYT4gJik7 DQo+ICt9Ow0KPiArdGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5cGVuYW1lIEM+DQo+ICt0ZW1wbGF0 ZSA8dHlwZW5hbWUgQ2E+DQo+ICtwb2x5X2ludDxOLCBDPiAmcG9seV9pbnQ8TiwgQz46Om9wZXJh dG9yKz0oY29uc3QgcG9seV9pbnRfcG9kPE4sIENhPg0KPiAmYSkgew0KPiArICBmb3IgKGludCBp ID0gMDsgaSA8IE47IGkrKykNCj4gKyAgICB0aGlzLT5jb2VmZnNbaV0gKz0gYS5jb2VmZnNbaV07 DQo+ICsgIHJldHVybiAqdGhpczsNCj4gK30NCj4gK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBl bmFtZSBDYSwgdHlwZW5hbWUgQ2I+DQo+ICtwb2x5X2ludDxOLCBsb25nPiBleGFjdF9kaXYocG9s eV9pbnRfcG9kPE4sIENhPiwgQ2IpIHsNCj4gKyAgcG9seV9pbnQ8TiwgbG9uZz4gcjsNCj4gKyAg cmV0dXJuIHI7DQo+ICt9DQo+ICtzdHJ1Y3QgdmVjX3ByZWZpeCB7DQo+ICsgIHVuc2lnbmVkIG1f bnVtOw0KPiArfTsNCj4gK3N0cnVjdCB2bF9wdHI7DQo+ICtzdHJ1Y3QgdmFfaGVhcCB7DQo+ICsg IHR5cGVkZWYgdmxfcHRyIGRlZmF1bHRfbGF5b3V0Ow0KPiArfTsNCj4gK3RlbXBsYXRlIDx0eXBl bmFtZSwgdHlwZW5hbWUgQSwgdHlwZW5hbWUgPSB0eXBlbmFtZQ0KPiBBOjpkZWZhdWx0X2xheW91 dD4NCj4gK3N0cnVjdCB2ZWM7DQo+ICt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4g c3RydWN0IHZlYzxULCBBLCBpbnQ+IHsNCj4gKyAgVCAmb3BlcmF0b3JbXSh1bnNpZ25lZCk7DQo+ ICsgIHZlY19wcmVmaXggbV92ZWNwZng7DQo+ICsgIFQgbV92ZWNkYXRhW107DQo+ICt9Ow0KPiAr dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+IFQgJnZlYzxULCBBLA0KPiBpbnQ+Ojpv cGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7DQo+ICsgIG1fdmVjcGZ4Lm1fbnVtID8gZmFuY3lfYWJv cnQoIiIsIDksIF9fRlVOQ1RJT05fXyksIDAgOiAwOw0KPiArICByZXR1cm4gbV92ZWNkYXRhW2l4 XTsNCj4gK30NCj4gK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgdmVjPFQsIHZhX2hlYXA+ IHsNCj4gKyAgVCAmb3BlcmF0b3JbXSh1bnNpZ25lZCBpeCkgeyByZXR1cm4gbV92ZWNbaXhdOyB9 DQo+ICsgIHZlYzxULCB2YV9oZWFwLCBpbnQ+IG1fdmVjOw0KPiArfTsNCj4gK2NsYXNzIGF1dG9f dmVjIDogcHVibGljIHZlYzxwb2x5X2ludDwyLCBsb25nPiwgdmFfaGVhcD4ge307DQo+ICt0ZW1w bGF0ZSA8dHlwZW5hbWU+IGNsYXNzIHZlY3Rvcl9idWlsZGVyIDogcHVibGljIGF1dG9fdmVjIHt9 Ow0KPiArY2xhc3MgaW50X3ZlY3Rvcl9idWlsZGVyIDogcHVibGljIHZlY3Rvcl9idWlsZGVyPGlu dD4gew0KPiArcHVibGljOg0KPiArICBpbnRfdmVjdG9yX2J1aWxkZXIocG9seV9pbnQ8MiwgbG9u Zz4sIGludCwgaW50KTsNCj4gK307DQo+ICtib29sIHZlY3RfZ3JvdXBlZF9zdG9yZV9zdXBwb3J0 ZWQoKSB7DQo+ICsgIGludCBpOw0KPiArICBwb2x5X2ludDwyLCBsb25nPiBuZWx0Ow0KPiArICBp bnRfdmVjdG9yX2J1aWxkZXIgc2VsKG5lbHQsIDIsIDMpOw0KPiArICBmb3IgKGkgPSAwOyBpIDwg NjsgaSsrKQ0KPiArICAgIHNlbFtpXSArPSBleGFjdF9kaXYobmVsdCwgMik7DQo+ICt9DQo+ICsN Cj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVj dCIgfSB9ICovDQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3Qt ZWFybHktYnJlYWtfMi5jYw0KPiBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha18yLmNjDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhODM2NDhjYTM2ZTJjOGZlZWI3ODMz NWZjDQo+IGNmM2YzYjgyYTk3ZDJlDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuY2MNCj4gQEAgLTAsMCArMSw2MSBA QA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0 aW9ucyAiLXcgLU8yIiB9ICovDQo+ICsNCj4gK3ZvaWQgZmFuY3lfYWJvcnQoY2hhciAqLCBpbnQs IGNvbnN0IGNoYXIgKikgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7DQo+ICt0ZW1wbGF0 ZSA8dW5zaWduZWQgTiwgdHlwZW5hbWU+IHN0cnVjdCBwb2x5X2ludF9wb2QgeyBpbnQgY29lZmZz W05dOyB9Ow0KPiArdGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5cGVuYW1lPiBjbGFzcyBwb2x5X2lu dCA6IHB1YmxpYyBwb2x5X2ludF9wb2Q8TiwNCj4gaW50PiB7DQo+ICtwdWJsaWM6DQo+ICsgIHRl bXBsYXRlIDx0eXBlbmFtZSBDYT4gcG9seV9pbnQgJm9wZXJhdG9yKz0oY29uc3QgcG9seV9pbnRf cG9kPE4sDQo+IENhPiAmKTsNCj4gK307DQo+ICt0ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5h bWUgQz4NCj4gK3RlbXBsYXRlIDx0eXBlbmFtZSBDYT4NCj4gK3BvbHlfaW50PE4sIEM+ICZwb2x5 X2ludDxOLCBDPjo6b3BlcmF0b3IrPShjb25zdCBwb2x5X2ludF9wb2Q8TiwgQ2E+DQo+ICZhKSB7 DQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiArICAgIHRoaXMtPmNvZWZmc1tp XSArPSBhLmNvZWZmc1tpXTsNCj4gKyAgcmV0dXJuICp0aGlzOw0KPiArfQ0KPiArdGVtcGxhdGUg PHVuc2lnbmVkIE4sIHR5cGVuYW1lIENhLCB0eXBlbmFtZSBDYj4NCj4gK3BvbHlfaW50PE4sIGxv bmc+IGV4YWN0X2Rpdihwb2x5X2ludF9wb2Q8TiwgQ2E+LCBDYikgew0KPiArICBwb2x5X2ludDxO LCBsb25nPiByOw0KPiArICByZXR1cm4gcjsNCj4gK30NCj4gK3N0cnVjdCB2ZWNfcHJlZml4IHsN Cj4gKyAgdW5zaWduZWQgbV9udW07DQo+ICt9Ow0KPiArc3RydWN0IHZsX3B0cjsNCj4gK3N0cnVj dCB2YV9oZWFwIHsNCj4gKyAgdHlwZWRlZiB2bF9wdHIgZGVmYXVsdF9sYXlvdXQ7DQo+ICt9Ow0K PiArdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSBBLCB0eXBlbmFtZSA9IHR5cGVuYW1lDQo+ IEE6OmRlZmF1bHRfbGF5b3V0Pg0KPiArc3RydWN0IHZlYzsNCj4gK3RlbXBsYXRlIDx0eXBlbmFt ZSBULCB0eXBlbmFtZSBBPiBzdHJ1Y3QgdmVjPFQsIEEsIGludD4gew0KPiArICBUICZvcGVyYXRv cltdKHVuc2lnbmVkKTsNCj4gKyAgdmVjX3ByZWZpeCBtX3ZlY3BmeDsNCj4gKyAgVCBtX3ZlY2Rh dGFbXTsNCj4gK307DQo+ICt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4gVCAmdmVj PFQsIEEsDQo+IGludD46Om9wZXJhdG9yW10odW5zaWduZWQgaXgpIHsNCj4gKyAgbV92ZWNwZngu bV9udW0gPyBmYW5jeV9hYm9ydCgiIiwgOSwgX19GVU5DVElPTl9fKSwgMCA6IDA7DQo+ICsgIHJl dHVybiBtX3ZlY2RhdGFbaXhdOw0KPiArfQ0KPiArdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVj dCB2ZWM8VCwgdmFfaGVhcD4gew0KPiArICBUICZvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7IHJl dHVybiBtX3ZlY1tpeF07IH0NCj4gKyAgdmVjPFQsIHZhX2hlYXAsIGludD4gbV92ZWM7DQo+ICt9 Ow0KPiArY2xhc3MgYXV0b192ZWMgOiBwdWJsaWMgdmVjPHBvbHlfaW50PDIsIGxvbmc+LCB2YV9o ZWFwPiB7fTsNCj4gK3RlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgdmVjdG9yX2J1aWxkZXIgOiBw dWJsaWMgYXV0b192ZWMge307DQo+ICtjbGFzcyBpbnRfdmVjdG9yX2J1aWxkZXIgOiBwdWJsaWMg dmVjdG9yX2J1aWxkZXI8aW50PiB7DQo+ICtwdWJsaWM6DQo+ICsgIGludF92ZWN0b3JfYnVpbGRl cihwb2x5X2ludDwyLCBsb25nPiwgaW50LCBpbnQpOw0KPiArfTsNCj4gK2Jvb2wgdmVjdF9ncm91 cGVkX3N0b3JlX3N1cHBvcnRlZCgpIHsNCj4gKyAgaW50IGk7DQo+ICsgIHBvbHlfaW50PDIsIGxv bmc+IG5lbHQ7DQo+ICsgIGludF92ZWN0b3JfYnVpbGRlciBzZWwobmVsdCwgMiwgMyk7DQo+ICsg IGZvciAoaSA9IDA7IGkgPCA2OyBpKyspDQo+ICsgICAgc2VsW2ldICs9IGV4YWN0X2RpdihuZWx0 LCAyKTsNCj4gK30NCj4gKw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09Q IFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18zLmNjDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuY2MNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g aW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTEyZTVj YTQzNGIyYWMzN2MwM2RiYWExMg0KPiAyNzNmZDhlNWFhMjAxOGMNCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jYw0K PiBAQCAtMCwwICsxLDE2IEBADQo+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiArLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ICsvKiB7 IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ICsNCj4gKy8qIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItdyAtTzIiIH0gKi8NCj4gKw0KPiAraW50IGFhcmNoNjRf YWR2c2ltZF92YWxpZF9pbW1lZGlhdGVfaHNfdmFsMzI7DQo+ICtib29sIGFhcmNoNjRfYWR2c2lt ZF92YWxpZF9pbW1lZGlhdGVfaHMoKSB7DQo+ICsgIGZvciAoaW50IHNoaWZ0ID0gMDsgc2hpZnQg PCAzMjsgc2hpZnQgKz0gOCkNCj4gKyAgICBpZiAoYWFyY2g2NF9hZHZzaW1kX3ZhbGlkX2ltbWVk aWF0ZV9oc192YWwzMiAmIHNoaWZ0KQ0KPiArICAgICAgcmV0dXJuIGFhcmNoNjRfYWR2c2ltZF92 YWxpZF9pbW1lZGlhdGVfaHNfdmFsMzI7DQo+ICsgIGZvciAoOzspDQo+ICsgICAgOw0KPiArfQ0K PiArDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIg InZlY3QiIH0gfSAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrLXJ1bl8xLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWstcnVuXzEuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0K PiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDk1YjM2YTcyZWFl OTRjYjdhYmM0YTBkDQo+IDE3YTVjOTc5ZmQ3ODA4Mw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMS5jDQo+IEBA IC0wLDAgKzEsMTEgQEANCj4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiArLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWFkZGl0 aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovDQo+ICsNCj4gKyNkZWZpbmUg TiA4MDMNCj4gKyNkZWZpbmUgUCAwDQo+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1w bGF0ZV8xLmMiDQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBW RUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEwLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEwLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u OWJjZDdmN2U1N2VmOWExZDQ2NDlkMTg1Ng0KPiA5YjM0MDYwNTBlNTQ2MDMNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWst cnVuXzEwLmMNCj4gQEAgLTAsMCArMSwxMSBAQA0KPiArLyogeyBkZy1kbyBydW4gfSAqLw0KPiAr LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ICsNCj4g Ky8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4g Kw0KPiArI2RlZmluZSBOIDgwMA0KPiArI2RlZmluZSBQIDc5OQ0KPiArI2luY2x1ZGUgInZlY3Qt ZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIg0KPiArDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiBkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8yLmMNCj4gYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzIuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi42M2Y2MzEwMWE0Njc5MDlmMzI4YmU3ZjNhYw0KPiBiYzViY2I3MjE5Njdm Zg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVhay1ydW5fMi5jDQo+IEBAIC0wLDAgKzEsMTEgQEANCj4gKy8qIHsgZGctZG8g cnVuIH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlf YnJlYWsgfSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQg fSAqLw0KPiArDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRl bXBzIiB9ICovDQo+ICsNCj4gKyNkZWZpbmUgTiA4MDMNCj4gKyNkZWZpbmUgUCA4MDINCj4gKyNp bmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzEuYyINCj4gKw0KPiArLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4g ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1y dW5fMy5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1 bl8zLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI2Yjk1ZTliODUxNzA4MWQ0MWQ3OTRlOQ0KPiBl MDI2NGQ2MzAxYzg1ODkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzMuYw0KPiBAQCAtMCwwICsxLDExIEBADQo+ ICsvKiB7IGRnLWRvIHJ1biB9ICovDQo+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfaW50IH0gKi8NCj4gKw0KPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1P ZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiArDQo+ICsjZGVmaW5lIE4gODAzDQo+ICsjZGVmaW5l IFAgNQ0KPiArI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jIg0KPiArDQo+ ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3Qi IH0gfSAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVh cmx5LWJyZWFrLXJ1bl80LmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWstcnVuXzQuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTBlNjQyNjEyMDU1MTE1MmE3 YmQ4MDBjDQo+IDE1ZDllZDZhYjE1YmFkYQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNC5jDQo+IEBAIC0wLDAg KzEsMTEgQEANCj4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovDQo+ICsNCj4gKyNkZWZpbmUgTiA4MDMN Cj4gKyNkZWZpbmUgUCAyNzgNCj4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRl XzEuYyINCj4gKw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RP UklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNS5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl81LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g aW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyY2Y0 ODZmOWM0MDA1NWRmMGFlZjVmZDIzDQo+IDhkMWFmZjdhN2M3ZGENCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzUu Yw0KPiBAQCAtMCwwICsxLDExIEBADQo+ICsvKiB7IGRnLWRvIHJ1biB9ICovDQo+ICsvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gKw0KPiArLyogeyBk Zy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiArDQo+ICsj ZGVmaW5lIE4gODAwDQo+ICsjZGVmaW5lIFAgNzk5DQo+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1i cmVhay10ZW1wbGF0ZV8xLmMiDQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+IGRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzYuYw0KPiBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNi5jDQo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLjlmZTcxMzZiNzIxM2E0NjNjYTY1NzNjNjA0DQo+IDc2YjdjOGY1MzFkZGNiDQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrLXJ1bl82LmMNCj4gQEAgLTAsMCArMSwxMSBAQA0KPiArLyogeyBkZy1kbyBydW4gfSAq Lw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9 ICovDQo+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ ICsNCj4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0g Ki8NCj4gKw0KPiArI2RlZmluZSBOIDgwMw0KPiArI2RlZmluZSBQIDANCj4gKyNpbmNsdWRlICJ2 ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYyINCj4gKw0KPiArLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNy5jDQo+ IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl83LmMNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uMDJmOTNkNzdkYmEzMWI5MzhmNmZkOWU4YzcNCj4gZjVlNGFjZGU0 YWVlYzkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWstcnVuXzcuYw0KPiBAQCAtMCwwICsxLDExIEBADQo+ICsvKiB7IGRn LWRvIHJ1biB9ICovDQo+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vh cmx5X2JyZWFrIH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf aW50IH0gKi8NCj4gKw0KPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2 ZS10ZW1wcyIgfSAqLw0KPiArDQo+ICsjZGVmaW5lIE4gODAzDQo+ICsjZGVmaW5lIFAgODAyDQo+ ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8yLmMiDQo+ICsNCj4gKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICov DQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWstcnVuXzguYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh ay1ydW5fOC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MTQ5MjU0NjU2MDZiNTRjNjM4MjIxZmZi DQo+IDk1YTVlOGQzYmVlNzk3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl84LmMNCj4gQEAgLTAsMCArMSwxMSBA QA0KPiArLyogeyBkZy1kbyBydW4gfSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ICsNCj4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4gKw0KPiArI2RlZmluZSBOIDgwMw0KPiArI2Rl ZmluZSBQIDUNCj4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYyINCj4g Kw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2 ZWN0IiB9IH0gKi8NCj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVhay1ydW5fOS5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrLXJ1bl85LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4g MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRlMmI5YzMwMTQ1NmVk YThmOWFkN2VhYQ0KPiA2NzYwNDU2M2YwYWZlZTcNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzkuYw0KPiBAQCAt MCwwICsxLDExIEBADQo+ICsvKiB7IGRnLWRvIHJ1biB9ICovDQo+ICsvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gKw0KPiArLyogeyBkZy1hZGRpdGlv bmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiArDQo+ICsjZGVmaW5lIE4g ODAzDQo+ICsjZGVmaW5lIFAgMjc4DQo+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1w bGF0ZV8yLmMiDQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBW RUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jDQo+IGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzEuYw0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi5hZjcwYThlMmE1YTlkYzk3NTZlZGI1NTgwZg0KPiAyZGUwMmRkY2M5NWRlOQ0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVhay10ZW1wbGF0ZV8xLmMNCj4gQEAgLTAsMCArMSw0NyBAQA0KPiArI2lmbmRlZiBODQo+ ICsjZGVmaW5lIE4gODAzDQo+ICsjZW5kaWYNCj4gKw0KPiArI2lmbmRlZiBQDQo+ICsjZGVmaW5l IFAgMA0KPiArI2VuZGlmDQo+ICsNCj4gK3Vuc2lnbmVkIHZlY3RfYVtOXSA9IHswfTsNCj4gK3Vu c2lnbmVkIHZlY3RfYltOXSA9IHswfTsNCj4gKw0KPiArX19hdHRyaWJ1dGVfXygobm9pcGEsIG5v aW5saW5lKSkNCj4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQo+ICt7DQo+ICsgdW5zaWdu ZWQgcmV0ID0gMDsNCj4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gKyB7DQo+ICsg ICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KPiArICAgICBi cmVhazsNCj4gKyAgIHZlY3RfYVtpXSA9IHg7DQo+ICsNCj4gKyB9DQo+ICsgcmV0dXJuIHJldDsN Cj4gK30NCj4gKw0KPiArZXh0ZXJuIHZvaWQgYWJvcnQgKCk7DQo+ICsNCj4gK2ludCBtYWluICgp DQo+ICt7DQo+ICsNCj4gKyAgaW50IHggPSAxOw0KPiArICBpbnQgaWR4ID0gUDsNCj4gKyAgdmVj dF9hW2lkeF0gPSB4ICsgMTsNCj4gKw0KPiArICB0ZXN0NCh4KTsNCj4gKw0KPiArICBpZiAodmVj dF9iW2lkeF0gIT0gKHggKyBpZHgpKQ0KPiArICAgIGFib3J0ICgpOw0KPiArDQo+ICsgIGlmICh2 ZWN0X2FbaWR4XSAhPSB4ICsgMSkNCj4gKyAgICBhYm9ydCAoKTsNCj4gKw0KPiArICBpZiAoaWR4 ID4gMCAmJiB2ZWN0X2FbaWR4LTFdICE9IHgpDQo+ICsgICAgYWJvcnQgKCk7DQo+ICsNCj4gK30N Cj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh ay10ZW1wbGF0ZV8yLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHkt YnJlYWstdGVtcGxhdGVfMi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwZjkyNGQ5MDQ0MzdlNzE1 NjdkMjdjYzFmDQo+IDEwODllNTYwN2RjYTBkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYw0KPiBA QCAtMCwwICsxLDUwIEBADQo+ICsjaWZuZGVmIE4NCj4gKyNkZWZpbmUgTiA4MDMNCj4gKyNlbmRp Zg0KPiArDQo+ICsjaWZuZGVmIFANCj4gKyNkZWZpbmUgUCAwDQo+ICsjZW5kaWYNCj4gKw0KPiAr dW5zaWduZWQgdmVjdF9hW05dID0gezB9Ow0KPiArdW5zaWduZWQgdmVjdF9iW05dID0gezB9Ow0K PiArDQo+ICtfX2F0dHJpYnV0ZV9fKChub2lwYSwgbm9pbmxpbmUpKQ0KPiArdW5zaWduZWQgdGVz dDQodW5zaWduZWQgeCkNCj4gK3sNCj4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiArIGZvciAoaW50 IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiArIHsNCj4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiAr ICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ICsgICAgIHJldHVybiBpOw0KPiArICAgdmVjdF9hW2ld ID0geDsNCj4gKw0KPiArIH0NCj4gKyByZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtleHRlcm4g dm9pZCBhYm9ydCAoKTsNCj4gKw0KPiAraW50IG1haW4gKCkNCj4gK3sNCj4gKw0KPiArICBpbnQg eCA9IDE7DQo+ICsgIGludCBpZHggPSBQOw0KPiArICB2ZWN0X2FbaWR4XSA9IHggKyAxOw0KPiAr DQo+ICsgIHVuc2lnbmVkIHJlcyA9IHRlc3Q0KHgpOw0KPiArDQo+ICsgIGlmIChyZXMgIT0gaWR4 KQ0KPiArICAgIGFib3J0ICgpOw0KPiArDQo+ICsgIGlmICh2ZWN0X2JbaWR4XSAhPSAoeCArIGlk eCkpDQo+ICsgICAgYWJvcnQgKCk7DQo+ICsNCj4gKyAgaWYgKHZlY3RfYVtpZHhdICE9IHggKyAx KQ0KPiArICAgIGFib3J0ICgpOw0KPiArDQo+ICsgIGlmIChpZHggPiAwICYmIHZlY3RfYVtpZHgt MV0gIT0geCkNCj4gKyAgICBhYm9ydCAoKTsNCj4gKw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuYw0KPiBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmMNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uNTFlN2Q2NDg5Yjk5YzI1YjliNGIzZDFjOA0KPiAzOWY5ODU2MmI2ZDRkZDcNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfMS5jDQo+IEBAIC0wLDAgKzEsMjcgQEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8N Cj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gKw0K PiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiArDQo+ICsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAq Lw0KPiArDQo+ICsjaWZuZGVmIE4NCj4gKyNkZWZpbmUgTiA4MDMNCj4gKyNlbmRpZg0KPiArdW5z aWduZWQgdmVjdF9hW05dOw0KPiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiArDQo+ICt1bnNpZ25l ZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiArew0KPiArIHVuc2lnbmVkIHJldCA9IDA7DQo+ICsgZm9y IChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ICsgew0KPiArICAgdmVjdF9iW2ldID0geCArIGk7 DQo+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gKyAgICAgYnJlYWs7DQo+ICsgICB2ZWN0X2Fb aV0gPSB4Ow0KPiArDQo+ICsgfQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTAuYw0KPiBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMC5jDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjllNGFkMTc2MzIwMmRmZGFiM2VkNzk2MWUNCj4gYWQ1MTE0ZmNjNjFhMTFiDQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVh cmx5LWJyZWFrXzEwLmMNCj4gQEAgLTAsMCArMSwyOCBAQA0KPiArLyogeyBkZy1kbyBjb21waWxl IH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJl YWsgfSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAq Lw0KPiArDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ICsN Cj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVj dCIgfSB9ICovDQo+ICsNCj4gKyNpZm5kZWYgTg0KPiArI2RlZmluZSBOIDgwMw0KPiArI2VuZGlm DQo+ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ICsNCj4g K3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgsaW50IHksIGludCB6KQ0KPiArew0KPiArIHVuc2ln bmVkIHJldCA9IDA7DQo+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ICsgew0KPiAr ICAgdmVjdF9iW2ldID0geCArIGk7DQo+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gKyAgICAg YnJlYWs7DQo+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiArIH0NCj4gKw0KPiArIHJldCA9IHggKyB5 ICogejsNCj4gKyByZXR1cm4gcmV0Ow0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzExLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTEuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjEz ZGQ5OTA5ZmIwOTI3OGRkOTJhODFhDQo+IDI0ZWY4NTQ5OTRhOTg5MA0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMS5j DQo+IEBAIC0wLDAgKzEsMzEgQEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ICsvKiB7 IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gKw0KPiArLyog eyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiAr DQo+ICsjaWZuZGVmIE4NCj4gKyNkZWZpbmUgTiA4MDMNCj4gKyNlbmRpZg0KPiArdW5zaWduZWQg dmVjdF9hW05dOw0KPiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiArDQo+ICt1bnNpZ25lZCB0ZXN0 NCh1bnNpZ25lZCB4LCBpbnQgeSkNCj4gK3sNCj4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiArZm9y IChpbnQgbyA9IDA7IG8gPCB5OyBvKyspDQo+ICt7DQo+ICsgcmV0ICs9IG87DQo+ICsgZm9yIChp bnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ICsgew0KPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gKyAgICAgYnJlYWs7DQo+ICsgICB2ZWN0X2FbaV0g PSB4Ow0KPiArDQo+ICsgfQ0KPiArfQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTIuYw0KPiBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMi5jDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLmNjMTBmMzIzOGYxY2I4ZTEzMDdlMDI0YTNlDQo+IGJjYjVjMjVhMzlkMWIy DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzEyLmMNCj4gQEAgLTAsMCArMSwzMSBAQA0KPiArLyogeyBkZy1kbyBjb21w aWxlIH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlf YnJlYWsgfSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQg fSAqLw0KPiArDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ ICsNCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAi dmVjdCIgfSB9ICovDQo+ICsNCj4gKyNpZm5kZWYgTg0KPiArI2RlZmluZSBOIDgwMw0KPiArI2Vu ZGlmDQo+ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ICsN Cj4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgsIGludCB5KQ0KPiArew0KPiArIHVuc2lnbmVk IHJldCA9IDA7DQo+ICtmb3IgKGludCBvID0gMDsgbyA8IHk7IG8rKykNCj4gK3sNCj4gKyByZXQg Kz0gbzsNCj4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gKyB7DQo+ICsgICB2ZWN0 X2JbaV0gPSB4ICsgaTsNCj4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KPiArICAgICByZXR1cm4g dmVjdF9hW2ldOw0KPiArICAgdmVjdF9hW2ldID0geDsNCj4gKw0KPiArIH0NCj4gK30NCj4gKyBy ZXR1cm4gcmV0Ow0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrXzEzLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWtfMTMuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTY3YjczOTVlZDdjMTll MzhhNDM2ZDZlDQo+IGRjZmU3YzE1ODBjNzExMw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMy5jDQo+IEBAIC0wLDAg KzEsMjcgQEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ICsvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gKw0KPiArLyogeyBkZy1hZGRpdGlv bmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiArDQo+ICsjaWZuZGVm IE4NCj4gKyNkZWZpbmUgTiA4MDMNCj4gKyNlbmRpZg0KPiArdW5zaWduZWQgdmVjdF9hW05dOw0K PiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiArDQo+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4 KQ0KPiArew0KPiArIHVuc2lnbmVkIHJldCA9IDA7DQo+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBO OyBpKyspDQo+ICsgew0KPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ICsgICBpZiAodmVjdF9h W2ldID4geCkNCj4gKyAgICAgcmV0dXJuIHZlY3RfYVtpXSAqIHg7DQo+ICsgICB2ZWN0X2FbaV0g PSB4Ow0KPiArDQo+ICsgfQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTQuYw0KPiBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNC5jDQo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLjAzY2NlNWNmNmNhZGVjYjUyMGI0NmJlNjY2DQo+IGJmNjA4ZTNiYzZhNTExDQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrXzE0LmMNCj4gQEAgLTAsMCArMSwyNSBAQA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0g Ki8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0K PiArDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ICsNCj4g Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIg fSB9ICovDQo+ICsNCj4gKyNkZWZpbmUgTiA4MDMNCj4gK3Vuc2lnbmVkIHZlY3RfYVtOXTsNCj4g K3Vuc2lnbmVkIHZlY3RfYltOXTsNCj4gKw0KPiAraW50IHRlc3Q0KHVuc2lnbmVkIHgpDQo+ICt7 DQo+ICsgdW5zaWduZWQgcmV0ID0gMDsNCj4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykN Cj4gKyB7DQo+ICsgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4 KQ0KPiArICAgICByZXR1cm4gaTsNCj4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0K PiArDQo+ICsgfQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTUuYw0KPiBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LmRlYzY4NzJlMTExNWZmNjY2OTVmNWE1MDBmZg0KPiBhN2NhMDFjMGY4ZDNhDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzE1LmMNCj4gQEAgLTAsMCArMSwyNSBAQA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4g Ky8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0K PiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiArDQo+ ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ICsNCj4gKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICov DQo+ICsNCj4gKyNkZWZpbmUgTiA4MDMNCj4gK3Vuc2lnbmVkIHZlY3RfYVtOXTsNCj4gK3Vuc2ln bmVkIHZlY3RfYltOXTsNCj4gKw0KPiAraW50IHRlc3Q0KHVuc2lnbmVkIHgpDQo+ICt7DQo+ICsg aW50IHJldCA9IDA7DQo+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ICsgew0KPiAr ICAgdmVjdF9iW2ldID0geCArIGk7DQo+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gKyAgICAg cmV0dXJuIGk7DQo+ICsgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsNCj4gKw0KPiArIH0N Cj4gKyByZXR1cm4gcmV0Ow0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVha18yLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgN Cj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI2OGY2YWUyNDg1 ZDAyNzRmZDg1ZWE1M2MNCj4gYzFlNDRlZjRiODRkNWMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5jDQo+IEBAIC0w LDAgKzEsMjcgQEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ICsvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gKw0KPiArLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiArDQo+ICsjaW5j bHVkZSA8Y29tcGxleC5oPg0KPiArDQo+ICsjZGVmaW5lIE4gMTAyNA0KPiArY29tcGxleCBkb3Vi bGUgdmVjdF9hW05dOw0KPiArY29tcGxleCBkb3VibGUgdmVjdF9iW05dOw0KPiArDQo+ICtjb21w bGV4IGRvdWJsZSB0ZXN0NChjb21wbGV4IGRvdWJsZSB4KQ0KPiArew0KPiArIGNvbXBsZXggZG91 YmxlIHJldCA9IDA7DQo+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ICsgew0KPiAr ICAgdmVjdF9iW2ldICs9IHggKyBpOw0KPiArICAgaWYgKHZlY3RfYVtpXSA9PSB4KQ0KPiArICAg ICByZXR1cm4gaTsNCj4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0KPiArDQo+ICsg fQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl eA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzZkMjhiZDJk NmU2ZTc5NDE0NmJhZjg5DQo+IGU0M2MzYjcwMjkzYjdkOQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18zLmMNCj4gQEAg LTAsMCArMSwyMCBAQA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiArLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiArDQo+ ICt1bnNpZ25lZCB0ZXN0NChjaGFyIHgsIGNoYXIgKnZlY3QsIGludCBuKQ0KPiArew0KPiArIHVu c2lnbmVkIHJldCA9IDA7DQo+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspDQo+ICsgew0K PiArICAgaWYgKHZlY3RbaV0gPiB4KQ0KPiArICAgICByZXR1cm4gMTsNCj4gKw0KPiArICAgdmVj dFtpXSA9IHg7DQo+ICsgfQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNC5jDQo+IGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzQuYw0KPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi4yMTZjNTZmYWYzMzA0NDliZjE5NjliN2U1MQ0KPiBmZjFlOTQyNzBkYzg2MQ0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha180LmMNCj4gQEAgLTAsMCArMSwyMyBAQA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8N Cj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAq Lw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiAr DQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ICsNCj4gKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3Qi IH0gfSAqLw0KPiArDQo+ICsjZGVmaW5lIE4gMTAyNA0KPiArdW5zaWduZWQgdmVjdFtOXTsNCj4g Kw0KPiArdW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCkNCj4gK3sNCj4gKyB1bnNpZ25lZCByZXQg PSAwOw0KPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiArIHsNCj4gKyAgIGlmIChp ID4gMTYgJiYgdmVjdFtpXSA+IHgpDQo+ICsgICAgIGJyZWFrOw0KPiArDQo+ICsgICB2ZWN0W2ld ID0geDsNCj4gKyB9DQo+ICsgcmV0dXJuIHJldDsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha181LmMNCj4gYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjRhMzZkNjk3OWRiMWZkMWY5N2JhMmEyOTBmDQo+IDc4YWMzYjg0ZjZkZTI0DQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzUuYw0KPiBAQCAtMCwwICsxLDI0IEBADQo+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiAr LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ICsNCj4g Ky8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gKw0KPiArLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8N Cj4gKw0KPiArI2RlZmluZSBOIDEwMjQNCj4gK3Vuc2lnbmVkIHZlY3RfYVtOXTsNCj4gK3Vuc2ln bmVkIHZlY3RfYltOXTsNCj4gKw0KPiArdW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCkNCj4gK3sN Cj4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0K PiArIHsNCj4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiArICAgaWYgKHZlY3RfYVtpXSA+IHgp DQo+ICsgICAgIHJldHVybiB2ZWN0X2FbaV07DQo+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiArIH0N Cj4gKyByZXR1cm4gcmV0Ow0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzYuYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVha182LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgN Cj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk2MzJkOWFmZGE3 ZTA3ZjFhODQxNzUxNGUNCj4gZjc3MzU2ZjAwMDQ1YmQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNi5jDQo+IEBAIC0w LDAgKzEsMjYgQEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ICsvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gKw0KPiArLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtbm90ICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gKw0KPiAr I2RlZmluZSBOIDEwMjQNCj4gK3Vuc2lnbmVkIHZlY3RfYVtOXTsNCj4gK3Vuc2lnbmVkIHZlY3Rf YltOXTsNCj4gKw0KPiArdW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCkNCj4gK3sNCj4gKyB1bnNp Z25lZCByZXQgPSAwOw0KPiArIGZvciAoaW50IGkgPSAwOyBpIDwgKE4vMik7IGkrPTIpDQo+ICsg ew0KPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ICsgICB2ZWN0X2JbaSsxXSA9IHggKyBpKzE7 DQo+ICsgICBpZiAodmVjdF9hW2ldID4geCB8fCB2ZWN0X2FbaSsxXSA+IHgpDQo+ICsgICAgIGJy ZWFrOw0KPiArICAgdmVjdF9hW2ldICs9IHggKiB2ZWN0X2JbaV07DQo+ICsgICB2ZWN0X2FbaSsx XSArPSB4ICogdmVjdF9iW2krMV07DQo+ICsgfQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNy5j DQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzcuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi4xMGZkOGI0Mjk1MmM0MmYzZDNhMDE0ZGExMA0KPiAzOTMxY2EzOTQ0 MjNkNQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVha183LmMNCj4gQEAgLTAsMCArMSwyNyBAQA0KPiArLyogeyBkZy1kbyBj b21waWxlIH0gKi8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFy bHlfYnJlYWsgfSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9p bnQgfSAqLw0KPiArDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICov DQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVE IiAidmVjdCIgfSB9ICovDQo+ICsNCj4gKyNpbmNsdWRlIDxjb21wbGV4Lmg+DQo+ICsNCj4gKyNk ZWZpbmUgTiAxMDI0DQo+ICtjb21wbGV4IGRvdWJsZSB2ZWN0X2FbTl07DQo+ICtjb21wbGV4IGRv dWJsZSB2ZWN0X2JbTl07DQo+ICsNCj4gK2NvbXBsZXggZG91YmxlIHRlc3Q0KGNvbXBsZXggZG91 YmxlIHgpDQo+ICt7DQo+ICsgY29tcGxleCBkb3VibGUgcmV0ID0gMDsNCj4gKyBmb3IgKGludCBp ID0gMDsgaSA8IE47IGkrKykNCj4gKyB7DQo+ICsgICB2ZWN0X2JbaV0gKz0geCArIGk7DQo+ICsg ICBpZiAodmVjdF9hW2ldID09IHgpDQo+ICsgICAgIGJyZWFrOw0KPiArICAgdmVjdF9hW2ldICs9 IHggKiB2ZWN0X2JbaV07DQo+ICsNCj4gKyB9DQo+ICsgcmV0dXJuIHJldDsNCj4gK30NCj4gZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184LmMN Cj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOC5jDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLmFlNzA2YjI5NTJjZmNlY2YyMDU0NmE2N2E3DQo+IDM1YjhkOTAyY2Ji NjA3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzguYw0KPiBAQCAtMCwwICsxLDI3IEBADQo+ICsvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJs eV9icmVhayB9ICovDQo+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2lu dCB9ICovDQo+ICsNCj4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8N Cj4gKw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQi ICJ2ZWN0IiB9IH0gKi8NCj4gKw0KPiArI2luY2x1ZGUgPGNvbXBsZXguaD4NCj4gKw0KPiArI2Rl ZmluZSBOIDEwMjQNCj4gK2NoYXIgdmVjdF9hW05dOw0KPiArY2hhciB2ZWN0X2JbTl07DQo+ICsN Cj4gK2NoYXIgdGVzdDQoY2hhciB4LCBjaGFyICogcmVzdHJpY3QgcmVzKQ0KPiArew0KPiArIGNo YXIgcmV0ID0gMDsNCj4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gKyB7DQo+ICsg ICB2ZWN0X2JbaV0gKz0geCArIGk7DQo+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gKyAgICAg YnJlYWs7DQo+ICsgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsNCj4gKyAgIHJlc1tpXSAq PSB2ZWN0X2JbaV07DQo+ICsgfQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOS5jDQo+IGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzkuYw0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi4zNTBmMDJmM2M3Y2FlZjQ1N2FkYmUxYmU4MA0KPiAyYmJhNTFjZDgxODM5Mw0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha185LmMNCj4gQEAgLTAsMCArMSwyNyBAQA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0g Ki8NCj4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLw0KPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0K PiArDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ICsNCj4g Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZl Y3QiIH0gfSAqLw0KPiArDQo+ICsjaWZuZGVmIE4NCj4gKyNkZWZpbmUgTiA4MDMNCj4gKyNlbmRp Zg0KPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiArDQo+ ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiArew0KPiArIHVuc2lnbmVkIHJldCA9IDA7 DQo+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ICsgew0KPiArICAgdmVjdF9hW2ld ID0geCArIGk7DQo+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gKyAgICAgYnJlYWs7DQo+ICsg ICB2ZWN0X2FbaV0gPSB4Ow0KPiArDQo+ICsgfQ0KPiArIHJldHVybiByZXQ7DQo+ICt9DQo+IGRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwIGIvZ2NjL3Rl c3RzdWl0ZS9saWIvdGFyZ2V0LQ0KPiBzdXBwb3J0cy5leHANCj4gaW5kZXgNCj4gY2NiYmVlODQ3 Zjc1NWQ2ZjMwMTE2ZDViMzhlNDAyN2E5OThiNDhmZC4uNWNiZjU0YmQyYTIzZGZkYzVkYzdiMTQ4 Yg0KPiAwZGM2ZWQ0YzYzODE0YWUgMTAwNjQ0DQo+IC0tLSBhL2djYy90ZXN0c3VpdGUvbGliL3Rh cmdldC1zdXBwb3J0cy5leHANCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBv cnRzLmV4cA0KPiBAQCAtMzY0NSw2ICszNjQ1LDE4IEBAIHByb2MgY2hlY2tfZWZmZWN0aXZlX3Rh cmdldF92ZWN0X2ludCB7IH0gew0KPiAgCX19XQ0KPiAgfQ0KPiANCj4gKyMgUmV0dXJuIDEgaWYg dGhlIHRhcmdldCBzdXBwb3J0cyBoYXJkd2FyZSB2ZWN0b3JpemF0aW9uIG9mIGVhcmx5IGJyZWFr cywNCj4gKyMgMCBvdGhlcndpc2UuDQo+ICsjDQo+ICsjIFRoaXMgd29uJ3QgY2hhbmdlIGZvciBk aWZmZXJlbnQgc3VidGFyZ2V0cyBzbyBjYWNoZSB0aGUgcmVzdWx0Lg0KPiArDQo+ICtwcm9jIGNo ZWNrX2VmZmVjdGl2ZV90YXJnZXRfdmVjdF9lYXJseV9icmVhayB7IH0gew0KPiArICAgIHJldHVy biBbY2hlY2tfY2FjaGVkX2VmZmVjdGl2ZV90YXJnZXRfaW5kZXhlZCB2ZWN0X2Vhcmx5X2JyZWFr IHsNCj4gKyAgICAgIGV4cHIgew0KPiArCShbaXN0YXJnZXQgYWFyY2g2NCotKi0qXQ0KPiArCSAm JiBbY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9hYXJjaDY0X3N2ZV0pDQo+ICsJfX1dDQo+ICt9DQo+ ICAjIFJldHVybiAxIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUgdmVjdG9yaXphdGlv biBvZiBjb21wbGV4DQo+IGFkZGl0aW9ucyBvZg0KPiAgIyBieXRlLCAwIG90aGVyd2lzZS4NCj4g ICMNCj4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaCBiL2djYy90cmVl LXNjYWxhci1ldm9sdXRpb24uaA0KPiBpbmRleA0KPiAwZjkwMjA3YmM3MzNkYjNjZjg1OTc5ZDli MGI5NjJhZWZhMDgzMWQ2Li41YWY3ZDJiYmEwZDYyMTk1NzA0YThkNDFlDQo+IGY2ZTYwMDMyNzE2 OTc3MCAxMDA2NDQNCj4gLS0tIGEvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5oDQo+ICsrKyBi L2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaA0KPiBAQCAtMjMsNiArMjMsNyBAQCBhbG9uZyB3 aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQ0KPiANCj4gIGV4dGVy biB0cmVlIG51bWJlcl9vZl9sYXRjaF9leGVjdXRpb25zIChjbGFzcyBsb29wICopOw0KPiAgZXh0 ZXJuIGdjb25kICpnZXRfbG9vcF9leGl0X2NvbmRpdGlvbiAoY29uc3QgY2xhc3MgbG9vcCAqKTsN Cj4gK2V4dGVybiBnY29uZCAqZ2V0X2VkZ2VfY29uZGl0aW9uIChlZGdlKTsNCj4gDQo+ICBleHRl cm4gdm9pZCBzY2V2X2luaXRpYWxpemUgKHZvaWQpOw0KPiAgZXh0ZXJuIGJvb2wgc2Nldl9pbml0 aWFsaXplZF9wICh2b2lkKTsNCj4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXNjYWxhci1ldm9sdXRp b24uY2MgYi9nY2MvdHJlZS1zY2FsYXItZXZvbHV0aW9uLmNjDQo+IGluZGV4DQo+IDdlMmEzZTk4 NjYxOWRlODdlNGFlOWRhZjE2MTk4YmUxZjEzYjkxN2MuLjMwMTI4NzFkZDdmOWE3ZDE4OTdmOTZh MjkNCj4gYjFiMGIyOGQ5MGNiNjNmIDEwMDY0NA0KPiAtLS0gYS9nY2MvdHJlZS1zY2FsYXItZXZv bHV0aW9uLmNjDQo+ICsrKyBiL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uY2MNCj4gQEAgLTg4 NCw3ICs4ODQsNyBAQCBzY2V2X2Rmczo6YWRkX3RvX2V2b2x1dGlvbiAodHJlZSBjaHJlY19iZWZv cmUsDQo+IGVudW0gdHJlZV9jb2RlIGNvZGUsDQo+ICAgIHJldHVybiByZXM7DQo+ICB9DQo+IA0K PiAtDQo+ICsNCj4gDQo+IA0KPiAgLyogRm9sbG93IHRoZSBzc2EgZWRnZSBpbnRvIHRoZSBiaW5h cnkgZXhwcmVzc2lvbiBSSFMwIENPREUgUkhTMS4NCj4gICAgIFJldHVybiB0cnVlIGlmIHRoZSBz dHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50IGhhcyBiZWVuIGZvdW5kLiAgKi8NCj4gDQo+IEBA IC0xMjk1LDggKzEyOTUsMTUgQEAgdGFpbF9yZWN1cnNlOg0KPiAgZ2NvbmQgKg0KPiAgZ2V0X2xv b3BfZXhpdF9jb25kaXRpb24gKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3ApDQo+ICB7DQo+ICsgIHJl dHVybiBnZXRfZWRnZV9jb25kaXRpb24gKG5vcm1hbF9leGl0IChsb29wKSk7DQo+ICt9DQo+ICsN Cj4gKy8qIElmIHRoZSBzdGF0ZW1lbnQganVzdCBiZWZvcmUgdGhlIEVYSVRfRURHRSBjb250YWlu cyBhIGNvbmRpdGlvbiB0aGVuDQo+ICsgICByZXR1cm4gdGhlIGNvbmRpdGlvbiwgb3RoZXJ3aXNl IE5VTEwuICovDQo+ICsNCj4gK2djb25kICoNCj4gK2dldF9lZGdlX2NvbmRpdGlvbiAoZWRnZSBl eGl0X2VkZ2Upew0KPiAgICBnY29uZCAqcmVzID0gTlVMTDsNCj4gLSAgZWRnZSBleGl0X2VkZ2Ug PSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+IA0KPiAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2Zs YWdzICYgVERGX1NDRVYpKQ0KPiAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIihnZXRfbG9vcF9l eGl0X2NvbmRpdGlvbiBcbiAgIik7DQo+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWRhdGEt cmVmcy5jYyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjDQo+IGluZGV4DQo+IDRhMjNkNjE3 MmFhYTEyYWQ3MDQ5ZGM2MjZlNWM0YWZiZDVjYTNmNzQuLjAyZTM3MzE3MTY3NTQzMmNkMzJjNGE3 MjQ0DQo+IDBlZWJkZmY5ODhiZGNmIDEwMDY0NA0KPiAtLS0gYS9nY2MvdHJlZS12ZWN0LWRhdGEt cmVmcy5jYw0KPiArKysgYi9nY2MvdHJlZS12ZWN0LWRhdGEtcmVmcy5jYw0KPiBAQCAtMjA3Miw3 ICsyMDcyLDcgQEAgdmVjdF9lbmhhbmNlX2RhdGFfcmVmc19hbGlnbm1lbnQNCj4gKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbykNCj4gDQo+ICAgIC8qIENoZWNrIGlmIHdlIGNhbiBwb3NzaWJseSBw ZWVsIHRoZSBsb29wLiAgKi8NCj4gICAgaWYgKCF2ZWN0X2Nhbl9hZHZhbmNlX2l2c19wIChsb29w X3ZpbmZvKQ0KPiAtICAgICAgfHwgIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcCwg c2luZ2xlX2V4aXQgKGxvb3ApKQ0KPiArICAgICAgfHwgIXNscGVlbF9jYW5fZHVwbGljYXRlX2xv b3BfcCAobG9vcF92aW5mbywgbm9ybWFsX2V4aXQgKGxvb3ApKQ0KPiAgICAgICAgfHwgbG9vcC0+ aW5uZXIpDQo+ICAgICAgZG9fcGVlbGluZyA9IGZhbHNlOw0KPiANCj4gZGlmZiAtLWdpdCBhL2dj Yy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYw0K PiBpbmRleA0KPiAxZDk2MTMwYzk4NWUyZGVmZDE0MWNmZGY2MDIyMjRjNzNiNGI0MWYyLi4wYjJh NDkyMDc1NGQ4M2FlYjM3OTViNDM1DQo+IDY5M2Q2MWFkY2ZlOTJiNiAxMDA2NDQNCj4gLS0tIGEv Z2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmNjDQo+ICsrKyBiL2djYy90cmVlLXZlY3QtbG9vcC1t YW5pcC5jYw0KPiBAQCAtNzcwLDcgKzc3MCw3IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX3Bh cnRpYWxfdmVjdG9ycyAoY2xhc3MgbG9vcA0KPiAqbG9vcCwNCj4gICAgYWRkX2hlYWRlcl9zZXEg KGxvb3AsIGhlYWRlcl9zZXEpOw0KPiANCj4gICAgLyogR2V0IGEgYm9vbGVhbiByZXN1bHQgdGhh dCB0ZWxscyB1cyB3aGV0aGVyIHRvIGl0ZXJhdGUuICAqLw0KPiAtICBlZGdlIGV4aXRfZWRnZSA9 IHNpbmdsZV9leGl0IChsb29wKTsNCj4gKyAgZWRnZSBleGl0X2VkZ2UgPSBub3JtYWxfZXhpdCAo bG9vcCk7DQo+ICAgIHRyZWVfY29kZSBjb2RlID0gKGV4aXRfZWRnZS0+ZmxhZ3MgJiBFREdFX1RS VUVfVkFMVUUpID8gRVFfRVhQUiA6DQo+IE5FX0VYUFI7DQo+ICAgIHRyZWUgemVyb19jdHJsID0g YnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAodGVzdF9jdHJsKSk7DQo+ICAgIGdjb25kICpjb25k X3N0bXQgPSBnaW1wbGVfYnVpbGRfY29uZCAoY29kZSwgdGVzdF9jdHJsLCB6ZXJvX2N0cmwsDQo+ IEBAIC03ODksNyArNzg5LDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0 b3JzIChjbGFzcyBsb29wDQo+ICpsb29wLA0KPiAgICBpZiAoZmluYWxfaXYpDQo+ICAgICAgew0K PiAgICAgICAgZ2Fzc2lnbiAqYXNzaWduID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoZmluYWxfaXYs IG9yaWdfbml0ZXJzKTsNCj4gLSAgICAgIGdzaV9pbnNlcnRfb25fZWRnZV9pbW1lZGlhdGUgKHNp bmdsZV9leGl0IChsb29wKSwgYXNzaWduKTsNCj4gKyAgICAgIGdzaV9pbnNlcnRfb25fZWRnZV9p bW1lZGlhdGUgKGV4aXRfZWRnZSwgYXNzaWduKTsNCj4gICAgICB9DQo+IA0KPiAgICByZXR1cm4g Y29uZF9zdG10Ow0KPiBAQCAtNzk5LDcgKzc5OSw4IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9u X3BhcnRpYWxfdmVjdG9ycyAoY2xhc3MgbG9vcA0KPiAqbG9vcCwNCj4gICAgIGxvb3AgaGFuZGxl cyBleGFjdGx5IFZGIHNjYWxhcnMgcGVyIGl0ZXJhdGlvbi4gICovDQo+IA0KPiAgc3RhdGljIGdj b25kICoNCj4gLXZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAoY2xhc3MgbG9vcCAqbG9v cCwgdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwNCj4gK3ZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25v cm1hbCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiArCQkJCWNsYXNzIGxvb3AgKmxvb3As IHRyZWUgbml0ZXJzLCB0cmVlIHN0ZXAsDQo+ICAJCQkJdHJlZSBmaW5hbF9pdiwgYm9vbCBuaXRl cnNfbWF5YmVfemVybywNCj4gIAkJCQlnaW1wbGVfc3RtdF9pdGVyYXRvciBsb29wX2NvbmRfZ3Np KQ0KPiAgew0KPiBAQCAtODA3LDcgKzgwOCw3IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25v cm1hbCAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwNCj4gICAg Z2NvbmQgKmNvbmRfc3RtdDsNCj4gICAgZ2NvbmQgKm9yaWdfY29uZDsNCj4gICAgZWRnZSBwZSA9 IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApOw0KPiAtICBlZGdlIGV4aXRfZWRnZSA9IHNpbmds ZV9leGl0IChsb29wKTsNCj4gKyAgZWRnZSBleGl0X2VkZ2UgPSBub3JtYWxfZXhpdCAobG9vcCk7 DQo+ICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGluY3JfZ3NpOw0KPiAgICBib29sIGluc2VydF9h ZnRlcjsNCj4gICAgZW51bSB0cmVlX2NvZGUgY29kZTsNCj4gQEAgLTg3Miw3ICs4NzMsMTEgQEAg dmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChjbGFzcyBsb29wICpsb29wLA0KPiB0cmVl IG5pdGVycywgdHJlZSBzdGVwLA0KPiAgCSBJbiBib3RoIGNhc2VzIHRoZSBsb29wIGxpbWl0IGlz IE5JVEVSUyAtIFNURVAuICAqLw0KPiAgICAgICAgZ2ltcGxlX3NlcSBzZXEgPSBOVUxMOw0KPiAg ICAgICAgbGltaXQgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAobml0ZXJzLCAmc2VxLCB0cnVlLCBO VUxMX1RSRUUpOw0KPiAtICAgICAgbGltaXQgPSBnaW1wbGVfYnVpbGQgKCZzZXEsIE1JTlVTX0VY UFIsIFRSRUVfVFlQRSAobGltaXQpLCBsaW1pdCwgc3RlcCk7DQo+ICsgICAgICAvKiBGb3IgVkxB IGxlYXZlIGxpbWl0ID09IG5pdGVycy4gIFRob3VnaCBJIHdvbmRlciBpZiBtYXliZSBJIHNob3Vs ZA0KPiArCSBmb3JjZSBwYXJ0aWFsIGxvb3BzIGhlcmUgYW5kIHVzZQ0KPiB2ZWN0X3NldF9sb29w X2NvbmRpdGlvbl9wYXJ0aWFsX3ZlY3RvcnMNCj4gKwkgaW5zdGVhZC4gIFRoZSBwcm9ibGVtIGlz IHRoYXQgdGhlIFZMIGNoZWNrIGlzIHVzZWxlc3MgaGVyZS4gICovDQo+ICsgICAgICBpZiAoIUxP T1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSAmJg0KPiAhTE9PUF9WSU5GT19OSVRF UlNfS05PV05fUCAobG9vcF92aW5mbykpDQo+ICsJbGltaXQgPSBnaW1wbGVfYnVpbGQgKCZzZXEs IE1JTlVTX0VYUFIsIFRSRUVfVFlQRSAobGltaXQpLCBsaW1pdCwNCj4gc3RlcCk7DQo+ICAgICAg ICBpZiAoc2VxKQ0KPiAgCXsNCj4gIAkgIGJhc2ljX2Jsb2NrIG5ld19iYiA9IGdzaV9pbnNlcnRf c2VxX29uX2VkZ2VfaW1tZWRpYXRlIChwZSwNCj4gc2VxKTsNCj4gQEAgLTkwNyw3ICs5MTIsOCBA QCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGNsYXNzIGxvb3AgKmxvb3AsDQo+IHRy ZWUgbml0ZXJzLCB0cmVlIHN0ZXAsDQo+ICAgIGdzaV9pbnNlcnRfYmVmb3JlICgmbG9vcF9jb25k X2dzaSwgY29uZF9zdG10LCBHU0lfU0FNRV9TVE1UKTsNCj4gDQo+ICAgIC8qIFJlY29yZCB0aGUg bnVtYmVyIG9mIGxhdGNoIGl0ZXJhdGlvbnMuICAqLw0KPiAtICBpZiAobGltaXQgPT0gbml0ZXJz KQ0KPiArICBpZiAobGltaXQgPT0gbml0ZXJzDQo+ICsgICAgICB8fCBMT09QX1ZJTkZPX0VBUkxZ X0JSRUFLUyAobG9vcF92aW5mbykpDQo+ICAgICAgLyogQ2FzZSBBOiB0aGUgbG9vcCBpdGVyYXRl cyBOSVRFUlMgdGltZXMuICBTdWJ0cmFjdCBvbmUgdG8gZ2V0IHRoZQ0KPiAgICAgICAgIGxhdGNo IGNvdW50LiAgKi8NCj4gICAgICBsb29wLT5uYl9pdGVyYXRpb25zID0gZm9sZF9idWlsZDIgKE1J TlVTX0VYUFIsIG5pdGVyc190eXBlLCBuaXRlcnMsDQo+IEBAIC05MTgsMTAgKzkyNCwxNyBAQCB2 ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGNsYXNzIGxvb3AgKmxvb3AsDQo+IHRyZWUg bml0ZXJzLCB0cmVlIHN0ZXAsDQo+ICAgICAgbG9vcC0+bmJfaXRlcmF0aW9ucyA9IGZvbGRfYnVp bGQyIChUUlVOQ19ESVZfRVhQUiwgbml0ZXJzX3R5cGUsDQo+ICAJCQkJICAgICAgIGxpbWl0LCBz dGVwKTsNCj4gDQo+IC0gIGlmIChmaW5hbF9pdikNCj4gKyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMg PSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gKyAgLyogRm9yIG11bHRpcGxlIGV4aXRz IHdlJ3ZlIGFscmVhZHkgbWFpbnRhaW5lZCBMQ1NTQSBmb3JtIGFuZCBoYW5kbGVkDQo+ICsgICAg IHRoZSBzY2FsYXIgaXRlcmF0aW9uIHVwZGF0ZSBpbiB0aGUgY29kZSB0aGF0IGRlYWxzIHdpdGgg dGhlIG1lcmdlDQo+ICsgICAgIGJsb2NrIGFuZCBpdHMgdXBkYXRlZCBndWFyZC4gIEkgY291bGQg bW92ZSB0aGF0IGNvZGUgaGVyZSBpbnN0ZWFkDQo+ICsgICAgIG9mIGluIHZlY3RfdXBkYXRlX2l2 c19hZnRlcl9lYXJseV9icmVhayBidXQgSSBoYXZlIHRvIHN0aWxsIGRlYWwNCj4gKyAgICAgd2l0 aCB0aGUgdXBkYXRlcyB0byB0aGUgY291bnRlciBgaWAuICBTbyBmb3Igbm93IEknbGwga2VlcCB0 aGVtDQo+ICsgICAgIHRvZ2V0aGVyLiAgKi8NCj4gKyAgaWYgKGZpbmFsX2l2ICYmIGV4aXRzLmxl bmd0aCAoKSA9PSAxKQ0KPiAgICAgIHsNCj4gICAgICAgIGdhc3NpZ24gKmFzc2lnbjsNCj4gLSAg ICAgIGVkZ2UgZXhpdCA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gKyAgICAgIGVkZ2UgZXhpdCA9 IG5vcm1hbF9leGl0IChsb29wKTsNCj4gICAgICAgIGdjY19hc3NlcnQgKHNpbmdsZV9wcmVkX3Ag KGV4aXQtPmRlc3QpKTsNCj4gICAgICAgIHRyZWUgcGhpX2Rlc3QNCj4gIAk9IGludGVnZXJfemVy b3AgKGluaXQpID8gZmluYWxfaXYgOiBjb3B5X3NzYV9uYW1lIChpbmR4X2FmdGVyX2luY3IpOw0K PiBAQCAtOTcyLDEzICs5ODUsMTUgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb24gKGNsYXNzIGxv b3AgKmxvb3AsDQo+IGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gICAgZ2NvbmQgKm9yaWdf Y29uZCA9IGdldF9sb29wX2V4aXRfY29uZGl0aW9uIChsb29wKTsNCj4gICAgZ2ltcGxlX3N0bXRf aXRlcmF0b3IgbG9vcF9jb25kX2dzaSA9IGdzaV9mb3Jfc3RtdCAob3JpZ19jb25kKTsNCj4gDQo+ IC0gIGlmIChsb29wX3ZpbmZvICYmIExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JTX1AN Cj4gKGxvb3BfdmluZm8pKQ0KPiArICBpZiAobG9vcF92aW5mbw0KPiArICAgICAgJiYgTE9PUF9W SU5GT19VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCAobG9vcF92aW5mbykpDQo+ICAgICAgY29uZF9z dG10ID0gdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0b3JzIChsb29wLCBsb29w X3ZpbmZvLA0KPiAgCQkJCQkJCSBuaXRlcnMsIGZpbmFsX2l2LA0KPiAgCQkJCQkJCSBuaXRlcnNf bWF5YmVfemVybywNCj4gIAkJCQkJCQkgbG9vcF9jb25kX2dzaSk7DQo+ICAgIGVsc2UNCj4gLSAg ICBjb25kX3N0bXQgPSB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGxvb3AsIG5pdGVy cywgc3RlcCwgZmluYWxfaXYsDQo+ICsgICAgY29uZF9zdG10ID0gdmVjdF9zZXRfbG9vcF9jb25k aXRpb25fbm9ybWFsIChsb29wX3ZpbmZvLCBsb29wLCBuaXRlcnMsDQo+ICsJCQkJCQlzdGVwLCBm aW5hbF9pdiwNCj4gIAkJCQkJCW5pdGVyc19tYXliZV96ZXJvLA0KPiAgCQkJCQkJbG9vcF9jb25k X2dzaSk7DQo+IA0KPiBAQCAtMTA2Niw3ICsxMDgxLDcgQEAgc2xwZWVsX3RyZWVfZHVwbGljYXRl X2xvb3BfdG9fZWRnZV9jZmcgKGNsYXNzDQo+IGxvb3AgKmxvb3AsDQo+ICAgIGVkZ2UgZXhpdCwg bmV3X2V4aXQ7DQo+ICAgIGJvb2wgZHVwbGljYXRlX291dGVyX2xvb3AgPSBmYWxzZTsNCj4gDQo+ IC0gIGV4aXQgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ICsgIGV4aXQgPSBub3JtYWxfZXhpdCAo bG9vcCk7DQo+ICAgIGF0X2V4aXQgPSAoZSA9PSBleGl0KTsNCj4gICAgaWYgKCFhdF9leGl0ICYm IGUgIT0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCkpDQo+ICAgICAgcmV0dXJuIE5VTEw7DQo+ IEBAIC0xMTA0LDExICsxMTE5LDExIEBAIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2Vk Z2VfY2ZnIChjbGFzcw0KPiBsb29wICpsb29wLA0KPiAgICBiYnNbMF0gPSBwcmVoZWFkZXI7DQo+ ICAgIG5ld19iYnMgPSBYTkVXVkVDIChiYXNpY19ibG9jaywgc2NhbGFyX2xvb3AtPm51bV9ub2Rl cyArIDEpOw0KPiANCj4gLSAgZXhpdCA9IHNpbmdsZV9leGl0IChzY2FsYXJfbG9vcCk7DQo+ICsg IGV4aXQgPSBub3JtYWxfZXhpdCAoc2NhbGFyX2xvb3ApOw0KPiAgICBjb3B5X2JicyAoYmJzLCBz Y2FsYXJfbG9vcC0+bnVtX25vZGVzICsgMSwgbmV3X2JicywNCj4gIAkgICAgJmV4aXQsIDEsICZu ZXdfZXhpdCwgTlVMTCwNCj4gIAkgICAgYXRfZXhpdCA/IGxvb3AtPmxhdGNoIDogZS0+c3JjLCB0 cnVlKTsNCj4gLSAgZXhpdCA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gKyAgZXhpdCA9IG5vcm1h bF9leGl0IChsb29wKTsNCj4gICAgYmFzaWNfYmxvY2sgbmV3X3ByZWhlYWRlciA9IG5ld19iYnNb MF07DQo+IA0KPiAgICAvKiBCZWZvcmUgaW5zdGFsbGluZyBQSEkgYXJndW1lbnRzIG1ha2Ugc3Vy ZSB0aGF0IHRoZSBlZGdlcw0KPiBAQCAtMTE3NiwxMSArMTE5MSw1MyBAQCBzbHBlZWxfdHJlZV9k dXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyAoY2xhc3MNCj4gbG9vcCAqbG9vcCwNCj4gIAkgICAg ICBhZGRfcGhpX2FyZyAocGhpLCBvcmlnX2FyZywgbmV3X2V4aXQsIG9yaWdfbG9jdXMpOw0KPiAg CSAgICB9DQo+ICAJfQ0KPiArDQo+ICsgICAgICAvKiBJZiBoYXZlIG11bHRpcGxlIGV4aXN0LCB3 ZSBub3cgbmVlZCB0byBwb2ludCB0aGUgYWRkaXRpb25hbCBleGl0cw0KPiArCSBmcm9tIHRoZSBv bGQgbG9vcCB0byB0aGUgbG9vcCBwcmUtaGVhZGVyIG9mIHRoZSBuZXcgY29waWVkIGxvb3AuDQo+ ICsJIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgc2ltcGxlIGVhcmx5IGJyZWFrIHZlY3Rvcml6 YXRpb24gc28gYWxsDQo+ICsJIGFkZGl0aW9uYWwgZXhpdHMgbXVzdCBleGl0IHRoZSBsb29wLiBB ZGRpdGlvbmFsbHkgd2UgY2FuIG9ubHkgcGxhY2UNCj4gKwkgY29waWVzIGF0IHRoZSBlbmQuICBp LmUuIHdlIGNhbm5vdCBkbyBwcm9sb2d1ZSBwZWVsaW5nLiAgKi8NCj4gKyAgICAgIGF1dG9fdmVj PGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ICsgICAgICBib29s IG11bHRpcGxlX2V4aXRzX3AgPSBleGl0cy5sZW5ndGggKCkgPiAxOw0KPiArDQo+ICsgICAgICAv KiBDaGVjayB0byBzZWUgaWYgYWxsIG9mIHRoZSBleGl0cyBwb2ludCB0byB0aGUgbG9vcCBoZWFk ZXIuICBJZiB0aGV5DQo+ICsJIGRvbid0IHRoZW4gd2UgaGF2ZSBhbiBpbnRlcm1lZGlhdGUgQkIg dGhhdCdzIG5vIGxvbmdlciB1c2VmdWwgYWZ0ZXINCj4gKwkgdGhlIGNvcHkgYW5kIHdlIHNob3Vs ZCByZW1vdmUgaXQuICovDQo+ICsgICAgICBib29sIGltbV9leGl0ID0gdHJ1ZTsNCj4gKyAgICAg IGZvciAoYXV0byBleGl0IDogZXhpdHMpDQo+ICsJew0KPiArCSAgIGltbV9leGl0ID0gaW1tX2V4 aXQgJiYgZXhpdC0+ZGVzdCA9PSBsb29wLT5oZWFkZXI7DQo+ICsJICAgaWYgKCFpbW1fZXhpdCkN Cj4gKwkgICAgIGJyZWFrOw0KPiArCX0NCj4gKw0KPiArICAgICAgZm9yICh1bnNpZ25lZCBpID0g MTsgaSA8IGV4aXRzLmxlbmd0aCAoKTsgaSsrKQ0KPiArCXsNCj4gKwkgIHJlZGlyZWN0X2VkZ2Vf YW5kX2JyYW5jaCAoZXhpdHNbaV0sIG5ld19wcmVoZWFkZXIpOw0KPiArCSAgZmx1c2hfcGVuZGlu Z19zdG10cyAoZXhpdHNbaV0pOw0KPiArCX0NCj4gKw0KPiArICAgICAgLyogTWFpbiBleGl0IG11 c3QgYmUgdGhlIGxhc3QgdG8gYmUgcmV3cml0dGVuIGFzIGl0J3MgdGhlIGZpcnN0IHBoaSBub2Rl DQo+ICsJIGVudHJ5LiAgVGhlIHJlc3QgYXJlIGluIGFycmF5IG9yZGVyLiAgKi8NCj4gICAgICAg IHJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaF9mb3JjZSAoZSwgbmV3X3ByZWhlYWRlcik7DQo+ICAg ICAgICBmbHVzaF9wZW5kaW5nX3N0bXRzIChlKTsNCj4gLSAgICAgIHNldF9pbW1lZGlhdGVfZG9t aW5hdG9yIChDRElfRE9NSU5BVE9SUywgbmV3X3ByZWhlYWRlciwgZS0NCj4gPnNyYyk7DQo+ICsN Cj4gKyAgICAgIC8qIE9ubHkgdXBkYXRlIHRoZSBkb21pbmF0b3JzIG9mIHRoZSBuZXdfcHJlaGVh ZGVyIHRvIHRoZSBvbGQgZXhpdCBpZg0KPiArCSB3ZSBoYXZlIGVmZmVjdGl2ZWx5IGEgc2luZ2xl IGV4aXQuICAqLw0KPiArICAgICAgaWYgKCFtdWx0aXBsZV9leGl0c19wDQo+ICsJICB8fCBleGl0 c1sxXS0+c3JjICE9IEVER0VfUFJFRCAoZXhpdHNbMF0tPnNyYywgMCktPnNyYykNCj4gKyAgICAg ICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBuZXdfcHJlaGVhZGVy LCBlLQ0KPiA+c3JjKTsNCj4gKyAgICAgIGVsc2UNCj4gKwlzZXRfaW1tZWRpYXRlX2RvbWluYXRv ciAoQ0RJX0RPTUlOQVRPUlMsIG5ld19wcmVoZWFkZXIsDQo+IGV4aXRzWzFdLT5zcmMpOw0KPiAr DQo+ICsgICAgICBhdXRvX3ZlYzxlZGdlPiBuZXdfZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2Vz IChuZXdfbG9vcCk7DQo+ICAgICAgICBpZiAod2FzX2ltbV9kb20gfHwgZHVwbGljYXRlX291dGVy X2xvb3ApDQo+IC0Jc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBleGl0 X2Rlc3QsDQo+IG5ld19leGl0LT5zcmMpOw0KPiArCXsNCj4gKwkgIGlmICghbXVsdGlwbGVfZXhp dHNfcCkNCj4gKwkgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBl eGl0X2Rlc3QsDQo+IG5ld19leGl0LT5zcmMpOw0KPiArCSAgZWxzZQ0KPiArCSAgICBzZXRfaW1t ZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGV4aXRfZGVzdCwNCj4gbmV3X2V4aXRz WzFdLT5zcmMpOw0KPiArCX0NCj4gDQo+ICAgICAgICAvKiBBbmQgcmVtb3ZlIHRoZSBub24tbmVj ZXNzYXJ5IGZvcndhcmRlciBhZ2Fpbi4gIEtlZXAgdGhlIG90aGVyDQo+ICAgICAgICAgICBvbmUg c28gd2UgaGF2ZSBhIHByb3BlciBwcmUtaGVhZGVyIGZvciB0aGUgbG9vcCBhdCB0aGUgZXhpdCBl ZGdlLiAgKi8NCj4gQEAgLTExODksNiArMTI0NiwzOSBAQCBzbHBlZWxfdHJlZV9kdXBsaWNhdGVf bG9vcF90b19lZGdlX2NmZyAoY2xhc3MNCj4gbG9vcCAqbG9vcCwNCj4gICAgICAgIGRlbGV0ZV9i YXNpY19ibG9jayAocHJlaGVhZGVyKTsNCj4gICAgICAgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9y IChDRElfRE9NSU5BVE9SUywgc2NhbGFyX2xvb3AtPmhlYWRlciwNCj4gIAkJCSAgICAgICBsb29w X3ByZWhlYWRlcl9lZGdlIChzY2FsYXJfbG9vcCktPnNyYyk7DQo+ICsNCj4gKyAgICAgIC8qIEZp bmFsbHkgYWZ0ZXIgd2lyaW5nIHRoZSBuZXcgZXBpbG9ndWUgd2UgbmVlZCB0byB1cGRhdGUgaXRz IG1haW4gZXhpdA0KPiArCSB0byB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZXhpdCB3ZSByZWNvcmRl ZC4gIE90aGVyIGV4aXRzIGFyZSBhbHJlYWR5DQo+ICsJIGNvcnJlY3QuICAqLw0KPiArICAgICAg aWYgKCFpbW1fZXhpdCAmJiBtdWx0aXBsZV9leGl0c19wKQ0KPiArCXsNCj4gKwkgIC8qIEZvciBu b3cgd2UgZXhwZWN0IGF0IG1vc3QgYSBzaW5nbGUgc3VjY2Vzc29yIGhlcmUsIGJ1dCB3ZSBtaWdo dA0KPiBiZQ0KPiArCSAgICAgYWJsZSB0byBleHRlbmQgdGhpcyB0byBtdWx0aXBsZS4gICovDQo+ ICsJICBpZiAoc2luZ2xlX3N1Y2NfcCAobmV3X2V4aXQtPmRlc3QpICYmIHNpbmdsZV9wcmVkX3Ag KG5ld19leGl0LQ0KPiA+ZGVzdCkpDQo+ICsJICAgIHsNCj4gKwkgICAgICBlZGdlIGV4aXRfZWRn ZSA9IHNpbmdsZV9zdWNjX2VkZ2UgKG5ld19leGl0LT5kZXN0KTsNCj4gKwkgICAgICAvKiBOb3cg Y29ycmVjdCB0aGUgZG9taW5hdG9ycyB0aGF0IHdlcmUgbWVzc2VkIHVwIGR1cmluZyB0aGUNCj4g Y29weWluZw0KPiArCQkgYXMgdGhlIENGRyB3YXMgdHdlYWtlZCBhIGJpdC4gICovDQo+ICsJICAg ICAgLyogVGhlIG1haW4gZXhpdCBpcyBub3cgZG9taW5hdGVkIGJ5IGEgbmV3IGZhbGwgdGhyb3Vn aCBlZGdlLiAgKi8NCj4gKwkgICAgICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlO QVRPUlMsIGV4aXRfZWRnZS0+c3JjLA0KPiArCQkJCSAgICAgICBuZXdfZXhpdHNbMF0tPnNyYyk7 DQo+ICsJICAgICAgLyogSWYgdGhpcyBpcyBhIGZhbGwgdGhyb3VnaCBlZGdlIHRoZW4gZG9uJ3Qg dXBkYXRlIGRvbXMuICAqLw0KPiArCSAgICAgIGlmICghZW1wdHlfYmxvY2tfcCAoZXhpdF9lZGdl LT5zcmMpKQ0KPiArCQlzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGV4 aXRfZWRnZS0NCj4gPmRlc3QsDQo+ICsJCQkJCSBuZXdfZXhpdHNbMV0tPnNyYyk7DQo+ICsJICAg IH0NCj4gKw0KPiArCSAgLyogVGhlIGV4aXRzIGZyb20gdGhlIEJCIHdpdGggdGhlIGVhcmx5IGV4 aXQgZG9taW5hdGUgdGhlIG5ldw0KPiBmdW5jdGlvbg0KPiArCSAgICAgZXhpdCBlZGdlIGFuZCBh bHNvIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbG9vcC4gIFRoZSBlZGdlcyB3ZXJlDQo+ICsJICAg ICBjb3BpZWQgY29ycmVjdGx5IGJ1dCB0aGUgZG9tcyBhcmUgd3JvbmcgYmVjYXVzZSBkdXJpbmcg dGhlDQo+IGNvcHlpbmcNCj4gKwkgICAgIHNvbWUgb2YgdGhlIGludGVybWVkaWF0ZSBlZGdlcyBh cmUgcmV3cml0dGVuLiAgICovDQo+ICsJICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RP TUlOQVRPUlMsIG5ld19leGl0c1swXS0+c3JjLA0KPiArCQkJCSAgIG5ld19leGl0c1sxXS0+c3Jj KTsNCj4gKwkgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgbmV3X2V4 aXRzWzBdLQ0KPiA+ZGVzdCwNCj4gKwkJCQkgICBuZXdfZXhpdHNbMF0tPnNyYyk7DQo+ICsJICBz ZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIG5ld19leGl0c1sxXS0NCj4g PmRlc3QsDQo+ICsJCQkJICAgbmV3X2V4aXRzWzFdLT5zcmMpOw0KPiArCX0NCj4gICAgICB9DQo+ ICAgIGVsc2UgLyogQWRkIHRoZSBjb3B5IGF0IGVudHJ5LiAgKi8NCj4gICAgICB7DQo+IEBAIC0x MzEwLDIwICsxNDAwLDI0IEBAIHNscGVlbF9hZGRfbG9vcF9ndWFyZCAoYmFzaWNfYmxvY2sgZ3Vh cmRfYmIsDQo+IHRyZWUgY29uZCwNCj4gICAqLw0KPiANCj4gIGJvb2wNCj4gLXNscGVlbF9jYW5f ZHVwbGljYXRlX2xvb3BfcCAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCwgY29uc3RfZWRnZSBlKQ0K PiArc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChjb25zdCBsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sIGNvbnN0X2VkZ2UNCj4gZSkNCj4gIHsNCj4gLSAgZWRnZSBleGl0X2UgPSBzaW5nbGVf ZXhpdCAobG9vcCk7DQo+ICsgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxv b3BfdmluZm8pOw0KPiArICBlZGdlIGV4aXRfZSA9IG5vcm1hbF9leGl0IChsb29wKTsNCj4gICAg ZWRnZSBlbnRyeV9lID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCk7DQo+ICAgIGdjb25kICpv cmlnX2NvbmQgPSBnZXRfbG9vcF9leGl0X2NvbmRpdGlvbiAobG9vcCk7DQo+ICAgIGdpbXBsZV9z dG10X2l0ZXJhdG9yIGxvb3BfZXhpdF9nc2kgPSBnc2lfbGFzdF9iYiAoZXhpdF9lLT5zcmMpOw0K PiAgICB1bnNpZ25lZCBpbnQgbnVtX2JiID0gbG9vcC0+aW5uZXI/IDUgOiAyOw0KPiANCj4gKyAg aWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gKyAgICBudW1fYmIg Kz0gMTsNCj4gKw0KPiAgICAvKiBBbGwgbG9vcHMgaGF2ZSBhbiBvdXRlciBzY29wZTsgdGhlIG9u bHkgY2FzZSBsb29wLT5vdXRlciBpcyBOVUxMIGlzIGZvcg0KPiAgICAgICB0aGUgZnVuY3Rpb24g aXRzZWxmLiAgKi8NCj4gICAgaWYgKCFsb29wX291dGVyIChsb29wKQ0KPiAgICAgICAgfHwgbG9v cC0+bnVtX25vZGVzICE9IG51bV9iYg0KPiAgICAgICAgfHwgIWVtcHR5X2Jsb2NrX3AgKGxvb3At PmxhdGNoKQ0KPiAtICAgICAgfHwgIXNpbmdsZV9leGl0IChsb29wKQ0KPiArICAgICAgfHwgKCFz aW5nbGVfZXhpdCAobG9vcCkgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZv KSkNCj4gICAgICAgIC8qIFZlcmlmeSB0aGF0IG5ldyBsb29wIGV4aXQgY29uZGl0aW9uIGNhbiBi ZSB0cml2aWFsbHkgbW9kaWZpZWQuICAqLw0KPiAgICAgICAgfHwgKCFvcmlnX2NvbmQgfHwgb3Jp Z19jb25kICE9IGdzaV9zdG10IChsb29wX2V4aXRfZ3NpKSkNCj4gICAgICAgIHx8IChlICE9IGV4 aXRfZSAmJiBlICE9IGVudHJ5X2UpKQ0KPiBAQCAtMTUyOCw2ICsxNjIyLDEyIEBAIHZlY3RfdXBk YXRlX2l2c19hZnRlcl92ZWN0b3JpemVyIChsb29wX3ZlY19pbmZvDQo+IGxvb3BfdmluZm8sDQo+ ICAgIGdwaGlfaXRlcmF0b3IgZ3NpLCBnc2kxOw0KPiAgICBjbGFzcyBsb29wICpsb29wID0gTE9P UF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsNCj4gICAgYmFzaWNfYmxvY2sgdXBkYXRlX2JiID0g dXBkYXRlX2UtPmRlc3Q7DQo+ICsNCj4gKyAgLyogRm9yIGVhcmx5IGV4aXRzIHdlJ2xsIHVwZGF0 ZSB0aGUgSVZzIGluDQo+ICsgICAgIHZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhay4g ICovDQo+ICsgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQo+ICsg ICAgcmV0dXJuOw0KPiArDQo+ICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBzaW5nbGVfZXhpdCAo bG9vcCktPmRlc3Q7DQo+IA0KPiAgICAvKiBNYWtlIHN1cmUgdGhlcmUgZXhpc3RzIGEgc2luZ2xl LXByZWRlY2Vzc29yIGV4aXQgYmI6ICAqLw0KPiBAQCAtMTYxMyw2ICsxNzEzLDE4NiBAQCB2ZWN0 X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVjdG9yaXplcg0KPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LA0KPiAgICAgICAgLyogRml4IHBoaSBleHByZXNzaW9ucyBpbiB0aGUgc3VjY2Vzc29yIGJiLiAg Ki8NCj4gICAgICAgIGFkanVzdF9waGlfYW5kX2RlYnVnX3N0bXRzIChwaGkxLCB1cGRhdGVfZSwg bmlfbmFtZSk7DQo+ICAgICAgfQ0KPiArICByZXR1cm47DQo+ICt9DQo+ICsNCj4gKy8qICAgRnVu Y3Rpb24gdmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrLg0KPiArDQo+ICsgICAgICJB ZHZhbmNlIiB0aGUgaW5kdWN0aW9uIHZhcmlhYmxlcyBvZiBMT09QIHRvIHRoZSB2YWx1ZSB0aGV5 IHNob3VsZCB0YWtlDQo+ICsgICAgIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgTE9PUC4gIFRoaXMg aXMgY3VycmVudGx5IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZQ0KPiArICAgICB2ZWN0b3JpemVyIGRv ZXMgbm90IGhhbmRsZSBpbmR1Y3Rpb24gdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYWZ0ZXIgdGhl DQo+ICsgICAgIGxvb3AuICBTdWNoIGEgc2l0dWF0aW9uIG9jY3VycyB3aGVuIHRoZSBsYXN0IGl0 ZXJhdGlvbnMgb2YgTE9PUCBhcmUNCj4gKyAgICAgcGVlbGVkLCBiZWNhdXNlIG9mIHRoZSBlYXJs eSBleGl0LiAgV2l0aCBhbiBlYXJseSBleGl0IHdlIGFsd2F5cyBwZWVsIHRoZQ0KPiArICAgICBs b29wLg0KPiArDQo+ICsgICAgIElucHV0Og0KPiArICAgICAtIExPT1BfVklORk8gLSBhIGxvb3Ag aW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBsb29wIHRoYXQgaXMgZ29pbmcgdG8gYmUNCj4gKwkJICAg IHZlY3Rvcml6ZWQuIFRoZSBsYXN0IGZldyBpdGVyYXRpb25zIG9mIExPT1Agd2VyZSBwZWVsZWQu DQo+ICsgICAgIC0gTE9PUCAtIGEgbG9vcCB0aGF0IGlzIGdvaW5nIHRvIGJlIHZlY3Rvcml6ZWQu IFRoZSBsYXN0IGZldyBpdGVyYXRpb25zDQo+ICsJICAgICAgb2YgTE9PUCB3ZXJlIHBlZWxlZC4N Cj4gKyAgICAgLSBWRiAtIFRoZSBsb29wIHZlY3Rvcml6YXRpb24gZmFjdG9yLg0KPiArICAgICAt IE5JVEVSU19PUklHIC0gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgTE9PUCBleGVjdXRl cyAoYmVmb3JlIGl0DQo+IGlzDQo+ICsJCSAgICAgdmVjdG9yaXplZCkuIGkuZSwgdGhlIG51bWJl ciBvZiB0aW1lcyB0aGUgaXZzIHNob3VsZCBiZQ0KPiArCQkgICAgIGJ1bXBlZC4NCj4gKyAgICAg LSBOSVRFUlNfVkVDVE9SIC0gVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgdGhlIHZlY3Rv ciBMT09QDQo+IGV4ZWN1dGVzLg0KPiArICAgICAtIFVQREFURV9FIC0gYSBzdWNjZXNzb3IgZWRn ZSBvZiBMT09QLT5leGl0IHRoYXQgaXMgb24gdGhlIChvbmx5KSBwYXRoDQo+ICsJCSAgY29taW5n IG91dCBmcm9tIExPT1Agb24gd2hpY2ggdGhlcmUgYXJlIHVzZXMgb2YgdGhlIExPT1ANCj4gaXZz DQo+ICsJCSAgKHRoaXMgaXMgdGhlIHBhdGggZnJvbSBMT09QLT5leGl0IHRvIGVwaWxvZ19sb29w LQ0KPiA+cHJlaGVhZGVyKS4NCj4gKw0KPiArCQkgIFRoZSBuZXcgZGVmaW5pdGlvbnMgb2YgdGhl IGl2cyBhcmUgcGxhY2VkIGluIExPT1AtPmV4aXQuDQo+ICsJCSAgVGhlIHBoaSBhcmdzIGFzc29j aWF0ZWQgd2l0aCB0aGUgZWRnZSBVUERBVEVfRSBpbiB0aGUgYmINCj4gKwkJICBVUERBVEVfRS0+ ZGVzdCBhcmUgdXBkYXRlZCBhY2NvcmRpbmdseS4NCj4gKw0KPiArICAgICBPdXRwdXQ6DQo+ICsg ICAgICAgLSBJZiBhdmFpbGFibGUsIHRoZSBMQ1NTQSBwaGkgbm9kZSBmb3IgdGhlIGxvb3AgSVYg dGVtcC4NCj4gKw0KPiArICAgICBBc3N1bXB0aW9uIDE6IExpa2UgdGhlIHJlc3Qgb2YgdGhlIHZl Y3Rvcml6ZXIsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcw0KPiArICAgICBhIHNpbmdsZSBsb29wIGV4 aXQgdGhhdCBoYXMgYSBzaW5nbGUgcHJlZGVjZXNzb3IuDQo+ICsNCj4gKyAgICAgQXNzdW1wdGlv biAyOiBUaGUgcGhpIG5vZGVzIGluIHRoZSBMT09QIGhlYWRlciBhbmQgaW4gdXBkYXRlX2JiIGFy ZQ0KPiArICAgICBvcmdhbml6ZWQgaW4gdGhlIHNhbWUgb3JkZXIuDQo+ICsNCj4gKyAgICAgQXNz dW1wdGlvbiAzOiBUaGUgYWNjZXNzIGZ1bmN0aW9uIG9mIHRoZSBpdnMgaXMgc2ltcGxlIGVub3Vn aCAoc2VlDQo+ICsgICAgIHZlY3RfY2FuX2FkdmFuY2VfaXZzX3ApLiAgVGhpcyBhc3N1bXB0aW9u IHdpbGwgYmUgcmVsYXhlZCBpbiB0aGUgZnV0dXJlLg0KPiArDQo+ICsgICAgIEFzc3VtcHRpb24g NDogRXhhY3RseSBvbmUgb2YgdGhlIHN1Y2Nlc3NvcnMgb2YgTE9PUCBleGl0LWJiIGlzIG9uIGEg cGF0aA0KPiArICAgICBjb21pbmcgb3V0IG9mIExPT1Agb24gd2hpY2ggdGhlIGl2cyBvZiBMT09Q IGFyZSB1c2VkICh0aGlzIGlzIHRoZSBwYXRoDQo+ICsgICAgIHRoYXQgbGVhZHMgdG8gdGhlIGVw aWxvZyBsb29wOyBvdGhlciBwYXRocyBza2lwIHRoZSBlcGlsb2cgbG9vcCkuICBUaGlzDQo+ICsg ICAgIHBhdGggc3RhcnRzIHdpdGggdGhlIGVkZ2UgVVBEQVRFX0UsIGFuZCBpdHMgZGVzdGluYXRp b24gKGRlbm90ZWQNCj4gdXBkYXRlX2JiKQ0KPiArICAgICBuZWVkcyB0byBoYXZlIGl0cyBwaGlz IHVwZGF0ZWQuDQo+ICsgKi8NCj4gKw0KPiArc3RhdGljIHRyZWUNCj4gK3ZlY3RfdXBkYXRlX2l2 c19hZnRlcl9lYXJseV9icmVhayAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBjbGFzcyBsb29w DQo+ICosDQo+ICsJCQkJICAgcG9seV9pbnQ2NCB2ZiwgdHJlZSBuaXRlcnNfb3JpZywNCj4gKwkJ CQkgICB0cmVlIG5pdGVyc192ZWN0b3IsIGVkZ2UgdXBkYXRlX2UpDQo+ICt7DQo+ICsgIGdwaGlf aXRlcmF0b3IgZ3NpLCBnc2kxOw0KPiArICB0cmVlIG5pX25hbWUsIGl2dG1wID0gTlVMTDsNCj4g KyAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7DQo+ICsg IGJhc2ljX2Jsb2NrIHVwZGF0ZV9iYiA9IHVwZGF0ZV9lLT5kZXN0Ow0KPiArICBhdXRvX3ZlYzxl ZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOw0KPiArDQo+ICsgIGJhc2lj X2Jsb2NrIGV4aXRfYmIgPSBleGl0c1swXS0+ZGVzdDsNCj4gKw0KPiArICBpZiAoIUxPT1BfVklO Rk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gKyAgICByZXR1cm4gTlVMTDsNCj4gKw0K PiArICBmb3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChsb29wLT5oZWFkZXIpLCBnc2kxID0gZ3Np X3N0YXJ0X3BoaXMgKHVwZGF0ZV9iYik7DQo+ICsgICAgICAgIWdzaV9lbmRfcCAoZ3NpKSAmJiAh Z3NpX2VuZF9wIChnc2kxKTsNCj4gKyAgICAgICBnc2lfbmV4dCAoJmdzaSksIGdzaV9uZXh0ICgm Z3NpMSkpDQo+ICsgICAgew0KPiArICAgICAgdHJlZSBpbml0X2V4cHI7DQo+ICsgICAgICB0cmVl IHN0ZXBfZXhwcjsNCj4gKyAgICAgIHRyZWUgdHlwZTsNCj4gKyAgICAgIHRyZWUgdmFyLCBuaTsN Cj4gKyAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxhc3RfZ3NpOw0KPiArDQo+ICsgICAgICBn cGhpICpwaGkgPSBnc2kxLnBoaSAoKTsNCj4gKyAgICAgIHRyZWUgcGhpX3NzYSA9IFBISV9BUkdf REVGX0ZST01fRURHRSAocGhpLCBsb29wX3ByZWhlYWRlcl9lZGdlDQo+IChsb29wKSk7DQo+ICsg ICAgICBncGhpICpwaGkxID0gYXNfYSA8Z3BoaSAqPiAoU1NBX05BTUVfREVGX1NUTVQgKHBoaV9z c2EpKTsNCj4gKyAgICAgIHN0bXRfdmVjX2luZm8gcGhpX2luZm8gPSBsb29wX3ZpbmZvLT5sb29r dXBfc3RtdCAoZ3NpLnBoaSAoKSk7DQo+ICsgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ ICsJZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4gKwkJCSAidmVj dF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrOiBwaGk6ICVHIiwNCj4gKwkJCSAoZ2ltcGxl ICopcGhpKTsNCj4gKw0KPiArICAgICAgLyogU2tpcCByZWR1Y3Rpb24gYW5kIHZpcnR1YWwgcGhp cy4gICovDQo+ICsgICAgICBpZiAoIWl2X3BoaV9wIChwaGlfaW5mbykpDQo+ICsJew0KPiArCSAg aWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiArCSAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RF LCB2ZWN0X2xvY2F0aW9uLA0KPiArCQkJICAgICAicmVkdWMgb3IgdmlydHVhbCBwaGkuIHNraXAu XG4iKTsNCj4gKwkgIGNvbnRpbnVlOw0KPiArCX0NCj4gKw0KPiArICAgICAgLyogRm9yIG11bHRp cGxlIGV4aXRzIHdoZXJlIHdlIGhhbmRsZSBlYXJseSBleGl0cyB3ZSBuZWVkIHRvIGNhcnJ5IG9u DQo+ICsJIHdpdGggdGhlIHByZXZpb3VzIElWIGFzIGxvb3AgaXRlcmF0aW9uIHdhcyBub3QgZG9u ZSBiZWNhdXNlIHdlDQo+IGV4aXRlZA0KPiArCSBlYXJseS4gIEFzIHN1Y2gganVzdCBncmFiIHRo ZSBvcmlnaW5hbCBJVi4gICovDQo+ICsgICAgICBpZiAoU1RNVF9WSU5GT19UWVBFIChwaGlfaW5m bykgIT0gdW5kZWZfdmVjX2luZm9fdHlwZSkNCj4gKwl7DQo+ICsJICB0eXBlID0gVFJFRV9UWVBF IChnaW1wbGVfcGhpX3Jlc3VsdCAocGhpKSk7DQo+ICsJICBzdGVwX2V4cHIgPSBTVE1UX1ZJTkZP X0xPT1BfUEhJX0VWT0xVVElPTl9QQVJUDQo+IChwaGlfaW5mbyk7DQo+ICsJICBzdGVwX2V4cHIg PSB1bnNoYXJlX2V4cHIgKHN0ZXBfZXhwcik7DQo+ICsNCj4gKwkgIC8qIFdlIHByZXZpb3VzbHkg Z2VuZXJhdGVkIHRoZSBuZXcgbWVyZ2VkIHBoaSBpbiB0aGUgc2FtZSBCQiBhcw0KPiB0aGUNCj4g KwkgICAgIGd1YXJkLiAgU28gdXNlIHRoYXQgdG8gcGVyZm9ybSB0aGUgc2NhbGluZyBvbiByYXRo ZXIgdGhhbiB0aGUNCj4gKwkgICAgIG5vcm1hbCBsb29wIHBoaSB3aGljaCBkb24ndCB0YWtlIHRo ZSBlYXJseSBicmVha3MgaW50byBhY2NvdW50LiAgKi8NCj4gKwkgIGluaXRfZXhwciA9IGdpbXBs ZV9waGlfcmVzdWx0IChwaGkxKTsgLy9QSElfQVJHX0RFRl9GUk9NX0VER0UNCj4gKHBoaTEsIGxv b3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKTsNCj4gKw0KPiArCSAgbmkgPSBmb2xkX2J1aWxkMiAo TVVMVF9FWFBSLCBUUkVFX1RZUEUgKHN0ZXBfZXhwciksDQo+ICsJCQkgICAgZm9sZF9jb252ZXJ0 IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksIGluaXRfZXhwciksDQo+ICsJCQkgICAgYnVpbGRfaW50 X2NzdCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpLCB2ZikpOw0KPiArDQo+ICsJICB2YXIgPSBjcmVh dGVfdG1wX3ZhciAodHlwZSwgInRtcCIpOw0KPiArDQo+ICsJICBsYXN0X2dzaSA9IGdzaV9sYXN0 X2JiIChleGl0X2JiKTsNCj4gKwkgIGdpbXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsNCj4gKwkg IG5pX25hbWUgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAobmksICZuZXdfc3RtdHMsIGZhbHNlLCB2 YXIpOw0KPiArCSAgLyogRXhpdF9iYiBzaG91bGRuJ3QgYmUgZW1wdHkuICAqLw0KPiArCSAgaWYg KCFnc2lfZW5kX3AgKGxhc3RfZ3NpKSkNCj4gKwkgICAgZ3NpX2luc2VydF9zZXFfYWZ0ZXIgKCZs YXN0X2dzaSwgbmV3X3N0bXRzLCBHU0lfU0FNRV9TVE1UKTsNCj4gKwkgIGVsc2UNCj4gKwkgICAg Z3NpX2luc2VydF9zZXFfYmVmb3JlICgmbGFzdF9nc2ksIG5ld19zdG10cywgR1NJX1NBTUVfU1RN VCk7DQo+ICsNCj4gKwkgIC8qIEZpeCBwaGkgZXhwcmVzc2lvbnMgaW4gdGhlIHN1Y2Nlc3NvciBi Yi4gICovDQo+ICsJICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAocGhpLCB1cGRhdGVfZSwg bmlfbmFtZSk7DQo+ICsJfQ0KPiArICAgICAgZWxzZSBpZiAoU1RNVF9WSU5GT19UWVBFIChwaGlf aW5mbykgPT0gdW5kZWZfdmVjX2luZm9fdHlwZSkNCj4gKwl7DQo+ICsJICB0eXBlID0gVFJFRV9U WVBFIChnaW1wbGVfcGhpX3Jlc3VsdCAocGhpKSk7DQo+ICsJICBzdGVwX2V4cHIgPSBTVE1UX1ZJ TkZPX0xPT1BfUEhJX0VWT0xVVElPTl9QQVJUDQo+IChwaGlfaW5mbyk7DQo+ICsJICBzdGVwX2V4 cHIgPSB1bnNoYXJlX2V4cHIgKHN0ZXBfZXhwcik7DQo+ICsNCj4gKwkgIC8qIFdlIHByZXZpb3Vz bHkgZ2VuZXJhdGVkIHRoZSBuZXcgbWVyZ2VkIHBoaSBpbiB0aGUgc2FtZSBCQiBhcw0KPiB0aGUN Cj4gKwkgICAgIGd1YXJkLiAgU28gdXNlIHRoYXQgdG8gcGVyZm9ybSB0aGUgc2NhbGluZyBvbiBy YXRoZXIgdGhhbiB0aGUNCj4gKwkgICAgIG5vcm1hbCBsb29wIHBoaSB3aGljaCBkb24ndCB0YWtl IHRoZSBlYXJseSBicmVha3MgaW50byBhY2NvdW50LiAgKi8NCj4gKwkgIGluaXRfZXhwciA9IFBI SV9BUkdfREVGX0ZST01fRURHRSAocGhpMSwNCj4gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCkp Ow0KPiArDQo+ICsJICBpZiAodmYuaXNfY29uc3RhbnQgKCkpDQo+ICsJICAgIHsNCj4gKwkgICAg ICBuaSA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVfVFlQRSAoc3RlcF9leHByKSwNCj4g KwkJCQlmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoc3RlcF9leHByKSwNCj4gKwkJCQkJICAgICAg bml0ZXJzX3ZlY3RvciksDQo+ICsJCQkJYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChzdGVwX2V4 cHIpLCB2ZikpOw0KPiArDQo+ICsJICAgICAgbmkgPSBmb2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwg VFJFRV9UWVBFIChzdGVwX2V4cHIpLA0KPiArCQkJCWZvbGRfY29udmVydCAoVFJFRV9UWVBFIChz dGVwX2V4cHIpLA0KPiArCQkJCQkgICAgICBuaXRlcnNfb3JpZyksDQo+ICsJCQkJZm9sZF9jb252 ZXJ0IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksIG5pKSk7DQo+ICsJICAgIH0NCj4gKwkgIGVsc2UN Cj4gKwkgICAgLyogSWYgdGhlIGxvb3AncyBWRiBpc24ndCBjb25zdGFudCB0aGVuIHRoZSBsb29w IG11c3QgaGF2ZSBiZWVuDQo+ICsJICAgICAgIG1hc2tlZCwgc28gYXQgdGhlIGVuZCBvZiB0aGUg bG9vcCB3ZSBrbm93IHdlIGhhdmUgZmluaXNoZWQNCj4gKwkgICAgICAgdGhlIGVudGlyZSBsb29w IGFuZCBmb3VuZCBub3RoaW5nLiAgKi8NCj4gKwkgICAgbmkgPSBidWlsZF96ZXJvX2NzdCAoVFJF RV9UWVBFIChzdGVwX2V4cHIpKTsNCj4gKw0KPiArCSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChu aSkgPT0gSU5URUdFUl9DU1QpOw0KPiArDQo+ICsJICB2YXIgPSBjcmVhdGVfdG1wX3ZhciAodHlw ZSwgInRtcCIpOw0KPiArDQo+ICsJICBsYXN0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0X2JiKTsN Cj4gKwkgIGdpbXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsNCj4gKwkgIG5pX25hbWUgPSBmb3Jj ZV9naW1wbGVfb3BlcmFuZCAobmksICZuZXdfc3RtdHMsIGZhbHNlLCB2YXIpOw0KPiArCSAgLyog RXhpdF9iYiBzaG91bGRuJ3QgYmUgZW1wdHkuICAqLw0KPiArCSAgaWYgKCFnc2lfZW5kX3AgKGxh c3RfZ3NpKSkNCj4gKwkgICAgZ3NpX2luc2VydF9zZXFfYWZ0ZXIgKCZsYXN0X2dzaSwgbmV3X3N0 bXRzLCBHU0lfU0FNRV9TVE1UKTsNCj4gKwkgIGVsc2UNCj4gKwkgICAgZ3NpX2luc2VydF9zZXFf YmVmb3JlICgmbGFzdF9nc2ksIG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ICsNCj4gKwkg IGFkanVzdF9waGlfYW5kX2RlYnVnX3N0bXRzIChwaGkxLCB1cGRhdGVfZSwgbmlfbmFtZSk7DQo+ ICsNCj4gKwkgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBleGl0cy5sZW5ndGggKCk7IGkrKykN Cj4gKwkgICAgYWRqdXN0X3BoaV9hbmRfZGVidWdfc3RtdHMgKHBoaTEsIGV4aXRzW2ldLA0KPiAr CQkJCQlidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUNCj4gKHN0ZXBfZXhwciksDQo+ICsJCQkJCQkg ICAgICAgdmYpKTsNCj4gKwkgIGl2dG1wID0gZ2ltcGxlX3BoaV9yZXN1bHQgKHBoaTEpOw0KPiAr CX0NCj4gKyAgICAgIGVsc2UNCj4gKwljb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgcmV0 dXJuIGl2dG1wOw0KPiAgfQ0KPiANCj4gIC8qIFJldHVybiBhIGdpbXBsZSB2YWx1ZSBjb250YWlu aW5nIHRoZSBtaXNhbGlnbm1lbnQgKG1lYXN1cmVkIGluIHZlY3Rvcg0KPiBAQCAtMjA5Niw3ICsy Mzc2LDcgQEAgdmVjdF9nZW5fdmVjdG9yX2xvb3Bfbml0ZXJzX211bHRfdmYNCj4gKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbywNCj4gICAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9P UCAobG9vcF92aW5mbyk7DQo+ICAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAobml0ZXJzX3ZlY3Rv cik7DQo+ICAgIHRyZWUgbG9nX3ZmID0gYnVpbGRfaW50X2NzdCAodHlwZSwgZXhhY3RfbG9nMiAo dmYpKTsNCj4gLSAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IHNpbmdsZV9leGl0IChsb29wKS0+ZGVz dDsNCj4gKyAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IG5vcm1hbF9leGl0IChsb29wKS0+ZGVzdDsN Cj4gDQo+ICAgIGdjY19hc3NlcnQgKG5pdGVyc192ZWN0b3JfbXVsdF92Zl9wdHIgIT0gTlVMTCk7 DQo+ICAgIHRyZWUgbml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmID0gZm9sZF9idWlsZDIgKExTSElGVF9F WFBSLCB0eXBlLA0KPiBAQCAtMjEyMywxOSArMjQwMyw0NiBAQCBmaW5kX2d1YXJkX2FyZyAoY2xh c3MgbG9vcCAqbG9vcCwgY2xhc3MgbG9vcA0KPiAqZXBpbG9nIEFUVFJJQlVURV9VTlVTRUQsDQo+ ICAJCWdwaGkgKmxjc3NhX3BoaSkNCj4gIHsNCj4gICAgZ3BoaV9pdGVyYXRvciBnc2k7DQo+IC0g IGVkZ2UgZSA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gKyAgZWRnZSBlID0gbm9ybWFsX2V4aXQg KGxvb3ApOw0KPiANCj4gLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWRfcCAoZS0+ZGVzdCkpOw0K PiAgICBmb3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChlLT5kZXN0KTsgIWdzaV9lbmRfcCAoZ3Np KTsgZ3NpX25leHQgKCZnc2kpKQ0KPiAgICAgIHsNCj4gICAgICAgIGdwaGkgKnBoaSA9IGdzaS5w aGkgKCk7DQo+IC0gICAgICBpZiAob3BlcmFuZF9lcXVhbF9wIChQSElfQVJHX0RFRiAocGhpLCAw KSwNCj4gLQkJCSAgIFBISV9BUkdfREVGIChsY3NzYV9waGksIDApLCAwKSkNCj4gKyAgICAgIC8q IE5lc3RlZCBsb29wcyB3aXRoIG11bHRpcGxlIGV4aXRzIGNhbiBoYXZlIGRpZmZlcmVudCBubyMg cGhpIG5vZGUNCj4gKwkgYXJndW1lbnRzIGJldHdlZW4gdGhlIG1haW4gbG9vcCBhbmQgZXBpbG9n IGFzIGVwaWxvZyBmYWxscyB0byB0aGUNCj4gKwkgc2Vjb25kIGxvb3AuICAqLw0KPiArICAgICAg aWYgKGdpbXBsZV9waGlfbnVtX2FyZ3MgKHBoaSkgPiBlLT5kZXN0X2lkeA0KPiArCSAgJiYgb3Bl cmFuZF9lcXVhbF9wIChQSElfQVJHX0RFRiAocGhpLCBlLT5kZXN0X2lkeCksDQo+ICsJCQkgICAg ICBQSElfQVJHX0RFRiAobGNzc2FfcGhpLCAwKSwgMCkpDQo+ICAJcmV0dXJuIFBISV9SRVNVTFQg KHBoaSk7DQo+ICAgICAgfQ0KPiAgICByZXR1cm4gTlVMTF9UUkVFOw0KPiAgfQ0KPiANCj4gKy8q IFN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgZWRnZSB3YWxrIGFsbCBpbnN0cnVjdGlvbnMgYW5k IGZpbmQgdGhlIGxhc3QNCj4gKyAgIFZVU0UvVkRFRiBpbiB0aGUgYmFzaWMgYmxvY2suICAqLw0K PiArDQo+ICtzdGF0aWMgdHJlZQ0KPiArZ2ltcGxlX2ZpbmRfbGFzdF9tZW1fdXNlIChlZGdlIGUp DQo+ICt7DQo+ICsgIGJhc2ljX2Jsb2NrIGJiID0gZS0+c3JjOw0KPiArICB0cmVlIHJlcyA9IE5V TEw7DQo+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGl0ZXIgPSBnc2lfbGFzdF9iYiAoYmIpOw0K PiArICBkbw0KPiArICB7DQo+ICsgICAgZ2ltcGxlICpzdG10ID0gZ3NpX3N0bXQgKGl0ZXIpOw0K PiArICAgIGlmICgocmVzID0gZ2ltcGxlX3ZkZWYgKHN0bXQpKSkNCj4gKyAgICAgIHJldHVybiBy ZXM7DQo+ICsNCj4gKyAgICBpZiAoKHJlcyA9IGdpbXBsZV92dXNlIChzdG10KSkpDQo+ICsgICAg ICByZXR1cm4gcmVzOw0KPiArDQo+ICsgICAgZ3NpX3ByZXYgKCZpdGVyKTsNCj4gKyAgfSB3aGls ZSAoIWdzaV9lbmRfcCAoaXRlcikpOw0KPiArDQo+ICsgIHJldHVybiBOVUxMOw0KPiArfQ0KPiAr DQo+ICAvKiBGdW5jdGlvbiBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyBk dXBsY2lhdGVzDQo+IEZJUlNUL1NFQ09ORA0KPiAgICAgZnJvbSBTRUNPTkQvRklSU1QgYW5kIHB1 dHMgaXQgYXQgdGhlIG9yaWdpbmFsIGxvb3AncyBwcmVoZWFkZXIvZXhpdA0KPiAgICAgZWRnZSwg dGhlIHR3byBsb29wcyBhcmUgYXJyYW5nZWQgYXMgYmVsb3c6DQo+IEBAIC0yMTg1LDYgKzI0OTIs NyBAQCBmaW5kX2d1YXJkX2FyZyAoY2xhc3MgbG9vcCAqbG9vcCwgY2xhc3MgbG9vcCAqZXBpbG9n DQo+IEFUVFJJQlVURV9VTlVTRUQsDQo+ICBzdGF0aWMgdm9pZA0KPiAgc2xwZWVsX3VwZGF0ZV9w aGlfbm9kZXNfZm9yX2xvb3BzIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ICAJCQkJICAg Y2xhc3MgbG9vcCAqZmlyc3QsIGNsYXNzIGxvb3AgKnNlY29uZCwNCj4gKwkJCQkgICB0cmVlICps Y3NzYV9pdnRtcCwNCj4gIAkJCQkgICBib29sIGNyZWF0ZV9sY3NzYV9mb3JfaXZfcGhpcykNCj4g IHsNCj4gICAgZ3BoaV9pdGVyYXRvciBnc2lfdXBkYXRlLCBnc2lfb3JpZzsNCj4gQEAgLTIxOTIs MTAgKzI1MDAsMTggQEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzDQo+IChsb29w X3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+IA0KPiAgICBlZGdlIGZpcnN0X2xhdGNoX2UgPSBFREdF X1NVQ0MgKGZpcnN0LT5sYXRjaCwgMCk7DQo+ICAgIGVkZ2Ugc2Vjb25kX3ByZWhlYWRlcl9lID0g bG9vcF9wcmVoZWFkZXJfZWRnZSAoc2Vjb25kKTsNCj4gLSAgYmFzaWNfYmxvY2sgYmV0d2Vlbl9i YiA9IHNpbmdsZV9leGl0IChmaXJzdCktPmRlc3Q7DQo+ICsgIGF1dG9fdmVjPGVkZ2U+IGV4aXRz ID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAoZmlyc3QpOw0KPiArICBiYXNpY19ibG9jayBiZXR3ZWVu X2JiID0gZXhpdHNbMF0tPmRlc3Q7DQo+ICsNCj4gKyAgYm9vbCBlYXJseV9leGl0ID0gTE9PUF9W SU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pOw0KPiArICAvKiBGb3IgZWFybHkgZXhpdHMg d2hlbiB3ZSBjcmVhdGUgdGhlIG1lcmdlIEJCIHdlIG11c3QgbWFpbnRhaW4gaXQgaW4NCj4gKyAg ICAgTENTU0EgZm9ybSwgb3RoZXJ3aXNlIHRoZSBmaW5hbCB2ZWN0b3JpemVyIHBhc3NlcyB3aWxs IGNyZWF0ZSB0aGUNCj4gKyAgICAgd3JvbmcgUEhJIG5vZGVzIGhlcmUuICAqLw0KPiArICBjcmVh dGVfbGNzc2FfZm9yX2l2X3BoaXMgPSBjcmVhdGVfbGNzc2FfZm9yX2l2X3BoaXMgfHwgZWFybHlf ZXhpdDsNCj4gDQo+ICAgIGdjY19hc3NlcnQgKGJldHdlZW5fYmIgPT0gc2Vjb25kX3ByZWhlYWRl cl9lLT5zcmMpOw0KPiAtICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChiZXR3ZWVuX2JiKSAm JiBzaW5nbGVfc3VjY19wDQo+IChiZXR3ZWVuX2JiKSk7DQo+ICsgIGdjY19hc3NlcnQgKChzaW5n bGVfcHJlZF9wIChiZXR3ZWVuX2JiKSAmJiBzaW5nbGVfc3VjY19wDQo+IChiZXR3ZWVuX2JiKSkN Cj4gKwkgICAgICB8fCBlYXJseV9leGl0KTsNCj4gICAgLyogRWl0aGVyIHRoZSBmaXJzdCBsb29w IG9yIHRoZSBzZWNvbmQgaXMgdGhlIGxvb3AgdG8gYmUgdmVjdG9yaXplZC4gICovDQo+ICAgIGdj Y19hc3NlcnQgKGxvb3AgPT0gZmlyc3QgfHwgbG9vcCA9PSBzZWNvbmQpOw0KPiANCj4gQEAgLTIy MTUsMTAgKzI1MzEsNDAgQEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzDQo+IChs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ICAJew0KPiAgCSAgdHJlZSBuZXdfcmVzID0gY29w eV9zc2FfbmFtZSAoUEhJX1JFU1VMVCAob3JpZ19waGkpKTsNCj4gIAkgIGdwaGkgKmxjc3NhX3Bo aSA9IGNyZWF0ZV9waGlfbm9kZSAobmV3X3JlcywgYmV0d2Vlbl9iYik7DQo+IC0JICBhZGRfcGhp X2FyZyAobGNzc2FfcGhpLCBhcmcsIHNpbmdsZV9leGl0IChmaXJzdCksDQo+IFVOS05PV05fTE9D QVRJT04pOw0KPiArDQo+ICsJICAvKiBUaGUgZmlyc3QgZXhpdCBpcyBhbHdheXMgdGhlIGxvb3Ag bGF0Y2gsIHNvIGhhbmRsZSB0aGF0DQo+ICsJICAgICBzZXBlcmF0ZWx5LiAgKi8NCj4gKwkgIGdj Y19hc3NlcnQgKGFyZyk7DQo+ICsJICBhZGRfcGhpX2FyZyAobGNzc2FfcGhpLCBhcmcsIGV4aXRz WzBdLCBVTktOT1dOX0xPQ0FUSU9OKTsNCj4gKw0KPiArCSAgLyogVGhlIGVhcmx5IGV4aXRzIGFy ZSBwcm9jZXNzZWQgaW4gb3JkZXIgc3RhcnRpbmcgZnJvbSBleGl0IDEuICAqLw0KPiArCSAgZm9y ICh1bnNpZ25lZCBpID0gMTsgaSA8IGV4aXRzLmxlbmd0aCAoKTsgaSsrKQ0KPiArCSAgICB7DQo+ ICsJICAgICAgdHJlZSBwaGlfYXJnOw0KPiArCSAgICAgIGlmIChpdl9waGlfcCAodmVjdF9waGlf aW5mbykpDQo+ICsJCS8qIEZvciBpbmR1Y3Rpb24gdmFsdWVzIGp1c3QgY29weSB0aGUgcHJldmlv dXMgb25lIGFzIHRoZQ0KPiArCQkgICBjdXJyZW50IGl0ZXJhdGlvbiBkaWQgbm90IGZpbmlzaC4g IFdlJ2xsIHVwZGF0ZSBhcyBuZWVkZWQNCj4gKwkJICAgbGF0ZXIgb24uICAqLw0KPiArCQlwaGlf YXJnID0gZ2ltcGxlX3BoaV9yZXN1bHQgKG9yaWdfcGhpKTsNCj4gKwkgICAgICBlbHNlDQo+ICsJ CXBoaV9hcmcgPSBnaW1wbGVfZmluZF9sYXN0X21lbV91c2UgKGV4aXRzW2ldKTsNCj4gKwkgICAg ICAvKiBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkganVzdCBjb3B5IHRoZSBleGlzdGluZyBvbmUgYW5k IGxlYXZlDQo+ICsJCSBpdCB0byB0aGUgb3RoZXJzIHRvIGZpeCBpdCB1cC4gICovDQo+ICsJICAg ICAgaWYgKCFwaGlfYXJnKQ0KPiArCQlwaGlfYXJnID0gZ2ltcGxlX3BoaV9yZXN1bHQgKG9yaWdf cGhpKTsNCj4gKwkgICAgICBhZGRfcGhpX2FyZyAobGNzc2FfcGhpLCBwaGlfYXJnLCBleGl0c1tp XSwgVU5LTk9XTl9MT0NBVElPTik7DQo+ICsJICAgIH0NCj4gIAkgIGFyZyA9IG5ld19yZXM7DQo+ ICAJfQ0KPiANCj4gKyAgICAgIC8qIE5vcm1hbGx5IGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2Vl biB0aGUgaXRlcmF0b3IgY291bnRlciBhbmQgdGhlDQo+ICsJIGl2dGVtcHMgYnUgbG9va2luZyBh dCB0aGUgU1RNVF9WSU5GT19UWVBFIG9mIHRoZSBwaGkgbm9kZS4NCj4gKwkgaG93ZXZlciBmb3Ig c29tZSByZWFzb24gdGhpcyBpc24ndCBjb25zaXN0ZW50bHkgc2V0LiAgSXMgdGhlcmUgYQ0KPiAr CSBiZXR0ZXIgd2F5Pz8uICAqLw0KPiArICAgICAgaWYgKGxjc3NhX2l2dG1wDQo+ICsJICAmJiBp dl9waGlfcCAodmVjdF9waGlfaW5mbykpDQo+ICsJKmxjc3NhX2l2dG1wID0gYXJnOw0KPiArDQo+ ICAgICAgICAvKiBVcGRhdGUgUEhJIG5vZGUgaW4gdGhlIHNlY29uZCBsb29wIGJ5IHJlcGxhY2lu ZyBhcmcgb24gdGhlIGxvb3Ancw0KPiAgCSBpbmNvbWluZyBlZGdlLiAgKi8NCj4gICAgICAgIGFk anVzdF9waGlfYW5kX2RlYnVnX3N0bXRzICh1cGRhdGVfcGhpLCBzZWNvbmRfcHJlaGVhZGVyX2Us IGFyZyk7DQo+IEBAIC0yMjI4LDcgKzI1NzQsOCBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19m b3JfbG9vcHMNCj4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gICAgICAgZm9yIGNvcnJl Y3QgdmVjdG9yaXphdGlvbiBvZiBsaXZlIHN0bXRzLiAgKi8NCj4gICAgaWYgKGxvb3AgPT0gZmly c3QpDQo+ICAgICAgew0KPiAtICAgICAgYmFzaWNfYmxvY2sgb3JpZ19leGl0ID0gc2luZ2xlX2V4 aXQgKHNlY29uZCktPmRlc3Q7DQo+ICsgICAgICBhdXRvX3ZlYzxlZGdlPiBuZXdfZXhpdHMgPSBn ZXRfbG9vcF9leGl0X2VkZ2VzIChzZWNvbmQpOw0KPiArICAgICAgYmFzaWNfYmxvY2sgb3JpZ19l eGl0ID0gbmV3X2V4aXRzWzBdLT5kZXN0Ow0KPiAgICAgICAgZm9yIChnc2lfb3JpZyA9IGdzaV9z dGFydF9waGlzIChvcmlnX2V4aXQpOw0KPiAgCSAgICFnc2lfZW5kX3AgKGdzaV9vcmlnKTsgZ3Np X25leHQgKCZnc2lfb3JpZykpDQo+ICAJew0KPiBAQCAtMjI0Myw3ICsyNTkwLDE1IEBAIHNscGVl bF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcw0KPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LA0KPiANCj4gIAkgIHRyZWUgbmV3X3JlcyA9IGNvcHlfc3NhX25hbWUgKG9yaWdfYXJnKTsNCj4g IAkgIGdwaGkgKmxjcGhpID0gY3JlYXRlX3BoaV9ub2RlIChuZXdfcmVzLCBiZXR3ZWVuX2JiKTsN Cj4gLQkgIGFkZF9waGlfYXJnIChsY3BoaSwgb3JpZ19hcmcsIHNpbmdsZV9leGl0IChmaXJzdCks DQo+IFVOS05PV05fTE9DQVRJT04pOw0KPiArCSAgLyogVGhlIGZpcnN0IGV4aXQgaXMgYWx3YXlz IHRoZSBsb29wIGxhdGNoLCBzbyBoYW5kbGUgdGhhdA0KPiArCSAgICAgc2VwZXJhdGVseS4gICov DQo+ICsJICBhZGRfcGhpX2FyZyAobGNwaGksIG9yaWdfYXJnLCBuZXdfZXhpdHNbMF0sDQo+IFVO S05PV05fTE9DQVRJT04pOw0KPiArCSAgLyogVGhlIGVhcmx5IGV4aXRzIGFyZSBwcm9jZXNzZWQg aW4gb3JkZXIgc3RhcnRpbmcgZnJvbSBleGl0IDEuICAqLw0KPiArCSAgZm9yICh1bnNpZ25lZCBp ID0gMTsgaSA8IG5ld19leGl0cy5sZW5ndGggKCk7IGkrKykNCj4gKwkgICAgew0KPiArCSAgICAg IHRyZWUgcGhpX2FyZyA9IGdpbXBsZV9waGlfcmVzdWx0IChvcmlnX3BoaSk7DQo+ICsJICAgICAg YWRkX3BoaV9hcmcgKGxjcGhpLCBwaGlfYXJnLCBleGl0c1tpXSwgVU5LTk9XTl9MT0NBVElPTik7 DQo+ICsJICAgIH0NCj4gIAl9DQo+ICAgICAgfQ0KPiAgfQ0KPiBAQCAtMjM5MywxMyArMjc0OCwx MSBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChjbGFzcw0KPiBsb29wICps b29wLCBjbGFzcyBsb29wICplcGlsb2csDQo+ICAgIGdjY19hc3NlcnQgKHNpbmdsZV9zdWNjX3Ag KG1lcmdlX2JiKSk7DQo+ICAgIGVkZ2UgZSA9IHNpbmdsZV9zdWNjX2VkZ2UgKG1lcmdlX2JiKTsN Cj4gICAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IGUtPmRlc3Q7DQo+IC0gIGdjY19hc3NlcnQgKHNp bmdsZV9wcmVkX3AgKGV4aXRfYmIpKTsNCj4gLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWQgKGV4 aXRfYmIpID09IHNpbmdsZV9leGl0IChlcGlsb2cpLT5kZXN0KTsNCj4gDQo+ICAgIGZvciAoZ3Np ID0gZ3NpX3N0YXJ0X3BoaXMgKGV4aXRfYmIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAo JmdzaSkpDQo+ICAgICAgew0KPiAgICAgICAgZ3BoaSAqdXBkYXRlX3BoaSA9IGdzaS5waGkgKCk7 DQo+IC0gICAgICB0cmVlIG9sZF9hcmcgPSBQSElfQVJHX0RFRiAodXBkYXRlX3BoaSwgMCk7DQo+ ICsgICAgICB0cmVlIG9sZF9hcmcgPSBQSElfQVJHX0RFRiAodXBkYXRlX3BoaSwgZS0+ZGVzdF9p ZHgpOw0KPiANCj4gICAgICAgIHRyZWUgbWVyZ2VfYXJnID0gTlVMTF9UUkVFOw0KPiANCj4gQEAg LTI0MzgsMTIgKzI3OTEsMTQgQEAgc3RhdGljIHZvaWQNCj4gIHNscGVlbF91cGRhdGVfcGhpX25v ZGVzX2Zvcl9sY3NzYSAoY2xhc3MgbG9vcCAqZXBpbG9nKQ0KPiAgew0KPiAgICBncGhpX2l0ZXJh dG9yIGdzaTsNCj4gLSAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IHNpbmdsZV9leGl0IChlcGlsb2cp LT5kZXN0Ow0KPiArICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMg KGVwaWxvZyk7DQo+IA0KPiAtICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChleGl0X2JiKSk7 DQo+IC0gIGVkZ2UgZSA9IEVER0VfUFJFRCAoZXhpdF9iYiwgMCk7DQo+IC0gIGZvciAoZ3NpID0g Z3NpX3N0YXJ0X3BoaXMgKGV4aXRfYmIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdz aSkpDQo+IC0gICAgcmVuYW1lX3VzZV9vcCAoUEhJX0FSR19ERUZfUFRSX0ZST01fRURHRSAoZ3Np LnBoaSAoKSwgZSkpOw0KPiArICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdHMubGVuZ3Ro ICgpOyBpKyspDQo+ICsgICAgew0KPiArICAgICAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IGV4aXRz W2ldLT5kZXN0Ow0KPiArICAgICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAoZXhpdF9iYik7 ICFnc2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkNCj4gKwlyZW5hbWVfdXNlX29wIChQ SElfQVJHX0RFRl9QVFJfRlJPTV9FREdFIChnc2kucGhpICgpLA0KPiBleGl0c1tpXSkpOw0KPiAr ICAgIH0NCj4gIH0NCj4gDQo+ICAvKiBFUElMT0dVRV9WSU5GTyBpcyBhbiBlcGlsb2d1ZSBsb29w IHRoYXQgd2Ugbm93IGtub3cgd291bGQgbmVlZCB0bw0KPiBAQCAtMjYyMSw2ICsyOTc2LDE0IEBA IHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlDQo+IG5pdGVy cywgdHJlZSBuaXRlcnNtMSwNCj4gICAgICBib3VuZF9lcGlsb2cgKz0gdmYgLSAxOw0KPiAgICBp ZiAoTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTIChsb29wX3ZpbmZvKSkNCj4gICAgICBib3Vu ZF9lcGlsb2cgKz0gMTsNCj4gKyAgLyogRm9yIGVhcmx5IGJyZWFrcyB0aGUgc2NhbGFyIGxvb3Ag bmVlZHMgdG8gZXhlY3V0ZSBhdCBtb3N0IFZGIHRpbWVzDQo+ICsgICAgIHRvIGZpbmQgdGhlIGVs ZW1lbnQgdGhhdCBjYXVzZWQgdGhlIGJyZWFrLiAgKi8NCj4gKyAgaWYgKExPT1BfVklORk9fRUFS TFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gKyAgICB7DQo+ICsgICAgICBib3VuZF9lcGlsb2cg PSB2ZjsNCj4gKyAgICAgIC8qIEZvcmNlIGEgc2NhbGFyIGVwaWxvZ3VlIGFzIHdlIGNhbid0IHZl Y3Rvcml6ZSB0aGUgaW5kZXggZmluZGluZy4gICovDQo+ICsgICAgICB2ZWN0X2VwaWxvZ3VlcyA9 IGZhbHNlOw0KPiArICAgIH0NCj4gICAgYm9vbCBlcGlsb2dfcGVlbGluZyA9IG1heWJlX25lIChi b3VuZF9lcGlsb2csIDBVKTsNCj4gICAgcG9seV91aW50NjQgYm91bmRfc2NhbGFyID0gYm91bmRf ZXBpbG9nOw0KPiANCj4gQEAgLTI3ODAsMTYgKzMxNDMsMjQgQEAgdmVjdF9kb19wZWVsaW5nIChs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIHRyZWUNCj4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0K PiAgCQkJCSAgYm91bmRfcHJvbG9nICsgYm91bmRfZXBpbG9nKQ0KPiAgCQkgICAgICA6ICghTE9P UF9SRVFVSVJFU19WRVJTSU9OSU5HIChsb29wX3ZpbmZvKQ0KPiAgCQkJIHx8IHZlY3RfZXBpbG9n dWVzKSk7DQo+ICsNCj4gKyAgLyogV2Ugb25seSBzdXBwb3J0IGVhcmx5IGJyZWFrIHZlY3Rvcml6 YXRpb24gb24ga25vd24gYm91bmRzIGF0IHRoaXMNCj4gdGltZS4NCj4gKyAgICAgVGhpcyBtZWFu cyB0aGF0IGlmIHRoZSB2ZWN0b3IgbG9vcCBjYW4ndCBiZSBlbnRlcmVkIHRoZW4gd2Ugd29uJ3QN Cj4gZ2VuZXJhdGUNCj4gKyAgICAgaXQgYXQgYWxsLiAgU28gZm9yIG5vdyBmb3JjZSBza2lwX3Zl Y3RvciBvZmYgYmVjYXVzZSB0aGUgYWRkaXRpb25hbCBjb250cm9sDQo+ICsgICAgIGZsb3cgbWVz c2VzIHdpdGggdGhlIEJCIGV4aXRzIGFuZCB3ZSd2ZSBhbHJlYWR5IGFuYWx5emVkIHRoZW0uICAq Lw0KPiArIHNraXBfdmVjdG9yID0gc2tpcF92ZWN0b3IgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJF QUtTIChsb29wX3ZpbmZvKTsNCj4gKw0KPiAgICAvKiBFcGlsb2cgbG9vcCBtdXN0IGJlIGV4ZWN1 dGVkIGlmIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgZXBpbG9nDQo+ICAgICAgIGxvb3Ag aXMga25vd24gYXQgY29tcGlsZSB0aW1lLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBhZGQgYSBjaGVj ayBhdA0KPiAgICAgICB0aGUgZW5kIG9mIHZlY3RvciBsb29wIGFuZCBza2lwIHRvIHRoZSBlbmQg b2YgZXBpbG9nIGxvb3AuICAqLw0KPiAgICBib29sIHNraXBfZXBpbG9nID0gKHByb2xvZ19wZWVs aW5nIDwgMA0KPiAgCQkgICAgICB8fCAhTE9PUF9WSU5GT19OSVRFUlNfS05PV05fUCAobG9vcF92 aW5mbykNCj4gIAkJICAgICAgfHwgIXZmLmlzX2NvbnN0YW50ICgpKTsNCj4gLSAgLyogUEVFTElO R19GT1JfR0FQUyBpcyBzcGVjaWFsIGJlY2F1c2UgZXBpbG9nIGxvb3AgbXVzdCBiZSBleGVjdXRl ZC4NCj4gKi8NCj4gLSAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5m bykpDQo+ICsgIC8qIFBFRUxJTkdfRk9SX0dBUFMgYW5kIHBlZWxpbmcgZm9yIGVhcmx5IGJyZWFr cyBhcmUgc3BlY2lhbCBiZWNhdXNlDQo+IGVwaWxvZw0KPiArICAgICBsb29wIG11c3QgYmUgZXhl Y3V0ZWQuICAqLw0KPiArICBpZiAoTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTIChsb29wX3Zp bmZvKQ0KPiArICAgICAgfHwgTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0K PiAgICAgIHNraXBfZXBpbG9nID0gZmFsc2U7DQo+IC0NCj4gICAgY2xhc3MgbG9vcCAqc2NhbGFy X2xvb3AgPSBMT09QX1ZJTkZPX1NDQUxBUl9MT09QIChsb29wX3ZpbmZvKTsNCj4gICAgYXV0b192 ZWM8cHJvZmlsZV9jb3VudD4gb3JpZ2luYWxfY291bnRzOw0KPiAgICBiYXNpY19ibG9jayAqb3Jp Z2luYWxfYmJzID0gTlVMTDsNCj4gQEAgLTI4MjgsNyArMzE5OSw3IEBAIHZlY3RfZG9fcGVlbGlu ZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlDQo+IG5pdGVycywgdHJlZSBuaXRlcnNt MSwNCj4gICAgaWYgKHByb2xvZ19wZWVsaW5nKQ0KPiAgICAgIHsNCj4gICAgICAgIGUgPSBsb29w X3ByZWhlYWRlcl9lZGdlIChsb29wKTsNCj4gLSAgICAgIGlmICghc2xwZWVsX2Nhbl9kdXBsaWNh dGVfbG9vcF9wIChsb29wLCBlKSkNCj4gKyAgICAgIGlmICghc2xwZWVsX2Nhbl9kdXBsaWNhdGVf bG9vcF9wIChsb29wX3ZpbmZvLCBlKSkNCj4gIAl7DQo+ICAJICBkdW1wX3ByaW50Zl9sb2MgKE1T R19NSVNTRURfT1BUSU1JWkFUSU9OLCBsb29wX2xvYywNCj4gIAkJCSAgICJsb29wIGNhbid0IGJl IGR1cGxpY2F0ZWQgdG8gcHJlaGVhZGVyIGVkZ2UuXG4iKTsNCj4gQEAgLTI4NDMsNyArMzIxNCw3 IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlDQo+IG5p dGVycywgdHJlZSBuaXRlcnNtMSwNCj4gIAkgIGdjY191bnJlYWNoYWJsZSAoKTsNCj4gIAl9DQo+ ICAgICAgICBwcm9sb2ctPmZvcmNlX3ZlY3Rvcml6ZSA9IGZhbHNlOw0KPiAtICAgICAgc2xwZWVs X3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzIChsb29wX3ZpbmZvLCBwcm9sb2csIGxvb3AsIHRy dWUpOw0KPiArICAgICAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzIChsb29wX3Zp bmZvLCBwcm9sb2csIGxvb3AsIE5VTEwsDQo+IHRydWUpOw0KPiAgICAgICAgZmlyc3RfbG9vcCA9 IHByb2xvZzsNCj4gICAgICAgIHJlc2V0X29yaWdpbmFsX2NvcHlfdGFibGVzICgpOw0KPiANCj4g QEAgLTI5MDIsMTEgKzMyNzMsMTMgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8sIHRyZWUNCj4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiANCj4gICAgaWYgKGVw aWxvZ19wZWVsaW5nKQ0KPiAgICAgIHsNCj4gLSAgICAgIGUgPSBzaW5nbGVfZXhpdCAobG9vcCk7 DQo+IC0gICAgICBpZiAoIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcCwgZSkpDQo+ ICsgICAgICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3Ap Ow0KPiArICAgICAgZSA9IGV4aXRzWzBdOw0KPiArICAgICAgaWYgKCFzbHBlZWxfY2FuX2R1cGxp Y2F0ZV9sb29wX3AgKGxvb3BfdmluZm8sIGUpKQ0KPiAgCXsNCj4gLQkgIGR1bXBfcHJpbnRmX2xv YyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIGxvb3BfbG9jLA0KPiAtCQkJICAgImxvb3AgY2Fu J3QgYmUgZHVwbGljYXRlZCB0byBleGl0IGVkZ2UuXG4iKTsNCj4gKwkgIGlmIChkdW1wX2VuYWJs ZWRfcCAoKSkNCj4gKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElP TiwgbG9vcF9sb2MsDQo+ICsJCQkgICAgICJsb29wIGNhbid0IGJlIGR1cGxpY2F0ZWQgdG8gZXhp dCBlZGdlLlxuIik7DQo+ICAJICBnY2NfdW5yZWFjaGFibGUgKCk7DQo+ICAJfQ0KPiAgICAgICAg LyogUGVlbCBlcGlsb2cgYW5kIHB1dCBpdCBvbiBleGl0IGVkZ2Ugb2YgbG9vcC4gIElmIHdlIGFy ZSB2ZWN0b3JpemluZw0KPiBAQCAtMjkyMCwxMiArMzI5MywxNiBAQCB2ZWN0X2RvX3BlZWxpbmcg KGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZQ0KPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEs DQo+ICAgICAgICBlcGlsb2cgPSBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2Nm ZyAobG9vcCwgZXBpbG9nLCBlKTsNCj4gICAgICAgIGlmICghZXBpbG9nKQ0KPiAgCXsNCj4gLQkg IGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIGxvb3BfbG9jLA0KPiAt CQkJICAgInNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnDQo+IGZhaWxlZC5c biIpOw0KPiArCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiArCSAgICBkdW1wX3ByaW50Zl9s b2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCBsb29wX2xvYywNCj4gKwkJCSAgICAgInNscGVl bF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnDQo+IGZhaWxlZC5cbiIpOw0KPiAgCSAg Z2NjX3VucmVhY2hhYmxlICgpOw0KPiAgCX0NCj4gICAgICAgIGVwaWxvZy0+Zm9yY2VfdmVjdG9y aXplID0gZmFsc2U7DQo+IC0gICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMg KGxvb3BfdmluZm8sIGxvb3AsIGVwaWxvZywgZmFsc2UpOw0KPiArDQo+ICsgICAgICB0cmVlIGVh cmx5X2JyZWFrX2l2X25hbWU7DQo+ICsgICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3Jf bG9vcHMgKGxvb3BfdmluZm8sIGxvb3AsIGVwaWxvZywNCj4gKwkJCQkJICZlYXJseV9icmVha19p dl9uYW1lLCBmYWxzZSk7DQo+IA0KPiAgICAgICAgLyogU2NhbGFyIHZlcnNpb24gbG9vcCBtYXkg YmUgcHJlZmVycmVkLiAgSW4gdGhpcyBjYXNlLCBhZGQgZ3VhcmQNCj4gIAkgYW5kIHNraXAgdG8g ZXBpbG9nLiAgTm90ZSB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBudW1iZXIgb2YNCj4gQEAg LTI5NzgsNiArMzM1NSw3IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3Zp bmZvLCB0cmVlDQo+IG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4gICAgICAgIHZlY3RfZ2VuX3Zl Y3Rvcl9sb29wX25pdGVycyAobG9vcF92aW5mbywgbml0ZXJzLA0KPiAgCQkJCSAgIG5pdGVyc192 ZWN0b3IsIHN0ZXBfdmVjdG9yLA0KPiAgCQkJCSAgIG5pdGVyc19ub19vdmVyZmxvdyk7DQo+ICsN Cj4gICAgICAgIGlmICghaW50ZWdlcl9vbmVwICgqc3RlcF92ZWN0b3IpKQ0KPiAgCXsNCj4gIAkg IC8qIE9uIGV4aXQgZnJvbSB0aGUgbG9vcCB3ZSB3aWxsIGhhdmUgYW4gZWFzeSB3YXkgb2YgY2Fs Y2FsYXRpbmcNCj4gQEAgLTI5ODcsOSArMzM2NSwxMyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywgdHJlZQ0KPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ICAJ ICBTU0FfTkFNRV9ERUZfU1RNVCAobml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmKSA9DQo+IGdpbXBsZV9i dWlsZF9ub3AgKCk7DQo+ICAJICAqbml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmX3ZhciA9IG5pdGVyc192 ZWN0b3JfbXVsdF92ZjsNCj4gIAl9DQo+ICsgICAgICBlbHNlIGlmIChMT09QX1ZJTkZPX0VBUkxZ X0JSRUFLUyAobG9vcF92aW5mbykpDQo+ICsJdmVjdF9nZW5fdmVjdG9yX2xvb3Bfbml0ZXJzX211 bHRfdmYgKGxvb3BfdmluZm8sDQo+IGVhcmx5X2JyZWFrX2l2X25hbWUsDQo+ICsJCQkJCSAgICAg Jm5pdGVyc192ZWN0b3JfbXVsdF92Zik7DQo+ICAgICAgICBlbHNlDQo+ICAJdmVjdF9nZW5fdmVj dG9yX2xvb3Bfbml0ZXJzX211bHRfdmYgKGxvb3BfdmluZm8sICpuaXRlcnNfdmVjdG9yLA0KPiAg CQkJCQkgICAgICZuaXRlcnNfdmVjdG9yX211bHRfdmYpOw0KPiArDQo+ICAgICAgICAvKiBVcGRh dGUgSVZzIG9mIG9yaWdpbmFsIGxvb3AgYXMgaWYgdGhleSB3ZXJlIGFkdmFuY2VkIGJ5DQo+ICAJ IG5pdGVyc192ZWN0b3JfbXVsdF92ZiBzdGVwcy4gICovDQo+ICAgICAgICBnY2NfY2hlY2tpbmdf YXNzZXJ0ICh2ZWN0X2Nhbl9hZHZhbmNlX2l2c19wIChsb29wX3ZpbmZvKSk7DQo+IEBAIC0yOTk3 LDEyICszMzc5LDk3IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LCB0cmVlDQo+IG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4gICAgICAgIHZlY3RfdXBkYXRlX2l2 c19hZnRlcl92ZWN0b3JpemVyIChsb29wX3ZpbmZvLCBuaXRlcnNfdmVjdG9yX211bHRfdmYsDQo+ ICAJCQkJCXVwZGF0ZV9lKTsNCj4gDQo+ICsgICAgICAvKiBGb3IgZWFybHkgYnJlYWtzIHdlIG11 c3QgY3JlYXRlIGEgZ3VhcmQgdG8gY2hlY2sgaG93IG1hbnkgaXRlcmF0aW9ucw0KPiArCSBvZiB0 aGUgc2NhbGFyIGxvb3AgYXJlIHlldCB0byBiZSBwZXJmb3JtZWQuICAqLw0KPiArICAgICAgaWYg KExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gKwl7DQo+ICsJICBnY2Nf YXNzZXJ0IChlYXJseV9icmVha19pdl9uYW1lKTsNCj4gKwkgIHRyZWUgaXZ0bXAgPQ0KPiArCSAg ICB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFybHlfYnJlYWsgKGxvb3BfdmluZm8sIGVwaWxvZywg dmYsIG5pdGVycywNCj4gKwkJCQkJICAgICAgICpuaXRlcnNfdmVjdG9yLCB1cGRhdGVfZSk7DQo+ ICsNCj4gKwkgIHRyZWUgZ3VhcmRfY29uZCA9IGZvbGRfYnVpbGQyIChFUV9FWFBSLCBib29sZWFu X3R5cGVfbm9kZSwNCj4gKwkJCQkJIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChuaXRlcnMpLA0K PiArCQkJCQkJICAgICAgIGl2dG1wKSwNCj4gKwkJCQkJIGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZ UEUgKG5pdGVycykpKTsNCj4gKwkgIGJhc2ljX2Jsb2NrIGd1YXJkX2JiID0gbm9ybWFsX2V4aXQg KGxvb3ApLT5kZXN0Ow0KPiArCSAgYXV0b192ZWM8ZWRnZT4gbmV3X2V4aXRzID0gZ2V0X2xvb3Bf ZXhpdF9lZGdlcyAoZXBpbG9nKTsNCj4gKwkgIC8qIElmIHdlIGhhZCBhIGZhbGx0aHJvdWdoIGVk Z2UsIHRoZSBndWFyZCB3aWxsIHRoZSB0aHJlYWRlZCB0aHJvdWdoDQo+ICsJICAgICBhbmQgc28g d2UgbWF5IG5lZWQgdG8gZmluZCB0aGUgYWN0dWFsIGZpbmFsIGVkZ2UuICAqLw0KPiArCSAgZWRn ZSBmaW5hbF9lZGdlID0gbmV3X2V4aXRzWzBdOw0KPiArCSAgYmFzaWNfYmxvY2sgZ3VhcmRfdG87 DQo+ICsJICBib29sIGZuX2V4aXRfcCA9IGZhbHNlOw0KPiArCSAgaWYgKGdzaV9lbmRfcCAoZ3Np X3N0YXJ0X25vbmRlYnVnX2JiIChmaW5hbF9lZGdlLT5kZXN0KSkNCj4gKwkgICAgICAmJiAhZ3Np X2VuZF9wIChnc2lfc3RhcnRfcGhpcyAoZmluYWxfZWRnZS0+ZGVzdCkpDQo+ICsJICAgICAgJiYg c2luZ2xlX3N1Y2NfcCAoZmluYWxfZWRnZS0+ZGVzdCkpDQo+ICsJICAgIHsNCj4gKwkgICAgICBh dXRvIGdzaSA9IGdzaV9zdGFydF9waGlzIChmaW5hbF9lZGdlLT5kZXN0KTsNCj4gKwkgICAgICB3 aGlsZSAoIWdzaV9lbmRfcCAoZ3NpKSkNCj4gKwkJZ3NpX3JlbW92ZSAoJmdzaSwgdHJ1ZSk7DQo+ ICsJICAgICAgZ3VhcmRfdG8gPSBmaW5hbF9lZGdlLT5kZXN0Ow0KPiArCSAgICAgIGZuX2V4aXRf cCA9IHRydWU7DQo+ICsJICAgIH0NCj4gKwkgIGVsc2UNCj4gKwkgICAgZ3VhcmRfdG8gPSBzcGxp dF9lZGdlIChub3JtYWxfZXhpdCAoZXBpbG9nKSk7DQo+ICsNCj4gKwkgIGVkZ2UgZ3VhcmRfZSA9 IHNscGVlbF9hZGRfbG9vcF9ndWFyZCAoZ3VhcmRfYmIsIGd1YXJkX2NvbmQsDQo+IGd1YXJkX3Rv LA0KPiArCQkJCQkgICBndWFyZF9iYiwNCj4gKwkJCQkJICAgcHJvYl9lcGlsb2cuaW52ZXJ0ICgp LA0KPiArCQkJCQkgICBpcnJlZF9mbGFnKTsNCj4gKw0KPiArCSAgYmFzaWNfYmxvY2sgZGVzdCA9 IHNpbmdsZV9zdWNjIChndWFyZF90byk7DQo+ICsJICAvKiBJZiB3ZSBoYXZlIGEgc2luZ2xlIHBy ZWQgdGhlbiB0aGUgcHJldmlvdXMgYmxvY2sgaXMgdGhlIGltbWVkaWF0ZQ0KPiArCSAgICAgZG9t aW5hdG9yLiAgIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgdGhlIGd1YXJkIGJiLiAgSG93ZXZlciBp ZiB3ZQ0KPiArCSAgICAgaGF2ZSBtdWx0aXBsZSBwcmVkIHRoZW4gdGhlIGd1YXJkIEJCIG11c3Qg YmUgdGhlIGRvbWluYXRvciBhcyBhbGwNCj4gKwkgICAgIHByZXZpb3VzIGV4aXRzIGdvdCByZXdy aXRlZCB0byB0aGUgZ3VhcmQgQkIuICAqLw0KPiArCSAgaWYgKHNpbmdsZV9wcmVkX3AgKGRlc3Qp KQ0KPiArCSAgICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGRlc3Qs IGd1YXJkX3RvKTsNCj4gKwkgIGVsc2UNCj4gKwkgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3Ig KENESV9ET01JTkFUT1JTLCBkZXN0LCBndWFyZF9iYik7DQo+ICsNCj4gKwkgIC8qIFdlIG11c3Qg dXBkYXRlIGFsbCB0aGUgZWRnZXMgZnJvbSB0aGUgbmV3IGd1YXJkX2JiLiAgKi8NCj4gKwkgIHNs cGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9ndWFyZDIgKGxvb3AsIGVwaWxvZywgZ3VhcmRfZSwN Cj4gKwkJCQkJICAgICAgZmluYWxfZWRnZSk7DQo+ICsNCj4gKwkgIC8qIElmIHdlIGhhdmUgYW4g YWRkaXRpb25hbCBmdW5jdGlvbmUgZXhpdCBibG9jaywgdGhlbiB0aHJlYWQgdGhlDQo+IHVwZGF0 ZXMNCj4gKwkgICAgIHRocm91Z2ggdG8gdGhlIGJsb2NrLiAgTGVhdmluZyBpdCB1cCB0byB0aGUg TENTU0EgY2xlYW51cCBwYXNzIHdpbGwNCj4gKwkgICAgIGdldCB0aGUgd3JvbmcgdmFsdWVzIGhl cmUgYXMgaXQgY2FuJ3QgaGFuZGxlIHRoZSBtZXJnZSBibG9jayB3ZQ0KPiBqdXN0DQo+ICsJICAg ICBtYWRlIGNvcnJlY3RseS4gICovDQo+ICsJICBpZiAoZm5fZXhpdF9wKQ0KPiArCSAgICB7DQo+ ICsJCWdwaGlfaXRlcmF0b3IgZ3NpX3VwZGF0ZSwgZ3NpX29yaWcsIGdzaV92ZWN0Ow0KPiArCQlm b3IgKGdzaV9vcmlnID0gZ3NpX3N0YXJ0X3BoaXMgKGVwaWxvZy0+aGVhZGVyKSwNCj4gKwkJICAg ICBnc2lfdXBkYXRlID0gZ3NpX3N0YXJ0X3BoaXMgKGd1YXJkX2UtPmRlc3QpLA0KPiArCQkgICAg IGdzaV92ZWN0ID0gZ3NpX3N0YXJ0X3BoaXMgKGxvb3AtPmhlYWRlcik7DQo+ICsJCSAgICAgIWdz aV9lbmRfcCAoZ3NpX29yaWcpICYmICFnc2lfZW5kX3AgKGdzaV91cGRhdGUpDQo+ICsJCSAgICAg JiYgIWdzaV9lbmRfcCAoZ3NpX3ZlY3QpOw0KPiArCQkgICAgIGdzaV9uZXh0ICgmZ3NpX29yaWcp LCBnc2lfbmV4dCAoJmdzaV91cGRhdGUpLA0KPiArCQkgICAgIGdzaV9uZXh0ICgmZ3NpX3ZlY3Qp KQ0KPiArCQkgIHsNCj4gKwkJICAgIGdwaGkgKm9yaWdfcGhpID0gZ3NpX29yaWcucGhpICgpOw0K PiArCQkgICAgZ3BoaSAqdXBkYXRlX3BoaSA9IGdzaV91cGRhdGUucGhpICgpOw0KPiArCQkgICAg Z3BoaSAqdmVjdF9waGkgPSBnc2lfdmVjdC5waGkgKCk7DQo+ICsJCSAgICBzdG10X3ZlY19pbmZv IHBoaV9pbmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQNCj4gKHZlY3RfcGhpKTsNCj4gKw0K PiArCQkgICAgaWYgKGl2X3BoaV9wIChwaGlfaW5mbykpDQo+ICsJCSAgICAgIGNvbnRpbnVlOw0K PiArDQo+ICsJCSAgICB0cmVlIHBoaV9hcmcgPSBQSElfQVJHX0RFRl9GUk9NX0VER0UgKG9yaWdf cGhpLA0KPiB1cGRhdGVfZSk7DQo+ICsJCSAgICBTRVRfUEhJX0FSR19ERUYgKHVwZGF0ZV9waGks IHVwZGF0ZV9lLT5kZXN0X2lkeCwNCj4gcGhpX2FyZyk7DQo+ICsNCj4gKwkJICAgIHBoaV9hcmcg PSBQSElfQVJHX0RFRl9GUk9NX0VER0UgKG9yaWdfcGhpLCBndWFyZF9lKTsNCj4gKwkJICAgIFNF VF9QSElfQVJHX0RFRiAodXBkYXRlX3BoaSwgZ3VhcmRfZS0+ZGVzdF9pZHgsDQo+IHBoaV9hcmcp Ow0KPiArCQkgIH0NCj4gKwkgICAgfQ0KPiArCSAgZmx1c2hfcGVuZGluZ19zdG10cyAoZ3VhcmRf ZSk7DQo+ICsJfQ0KPiArDQo+ICAgICAgICBpZiAoc2tpcF9lcGlsb2cpDQo+ICAJew0KPiAgCSAg Z3VhcmRfY29uZCA9IGZvbGRfYnVpbGQyIChFUV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwNCj4g IAkJCQkgICAgbml0ZXJzLCBuaXRlcnNfdmVjdG9yX211bHRfdmYpOw0KPiAtCSAgZ3VhcmRfYmIg PSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7DQo+IC0JICBndWFyZF90byA9IHNwbGl0X2VkZ2Ug KHNpbmdsZV9leGl0IChlcGlsb2cpKTsNCj4gKwkgIGd1YXJkX2JiID0gbm9ybWFsX2V4aXQgKGxv b3ApLT5kZXN0Ow0KPiArCSAgZ3VhcmRfdG8gPSBzcGxpdF9lZGdlIChub3JtYWxfZXhpdCAoZXBp bG9nKSk7DQo+ICAJICBndWFyZF9lID0gc2xwZWVsX2FkZF9sb29wX2d1YXJkIChndWFyZF9iYiwg Z3VhcmRfY29uZCwNCj4gZ3VhcmRfdG8sDQo+ICAJCQkJCSAgIHNraXBfdmVjdG9yID8gYW5jaG9y IDogZ3VhcmRfYmIsDQo+ICAJCQkJCSAgIHByb2JfZXBpbG9nLmludmVydCAoKSwNCj4gQEAgLTMw MTAsNyArMzQ3Nyw3IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LCB0cmVlDQo+IG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4gIAkgIGlmICh2ZWN0X2VwaWxvZ3Vl cykNCj4gIAkgICAgZXBpbG9ndWVfdmluZm8tPnNraXBfdGhpc19sb29wX2VkZ2UgPSBndWFyZF9l Ow0KPiAgCSAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2d1YXJkMiAobG9vcCwgZXBpbG9n LCBndWFyZF9lLA0KPiAtCQkJCQkgICAgICBzaW5nbGVfZXhpdCAoZXBpbG9nKSk7DQo+ICsJCQkJ CSAgICAgIG5vcm1hbF9leGl0IChlcGlsb2cpKTsNCj4gIAkgIC8qIE9ubHkgbmVlZCB0byBoYW5k bGUgYmFzaWMgYmxvY2sgYmVmb3JlIGVwaWxvZyBsb29wIGlmIGl0J3Mgbm90DQo+ICAJICAgICB0 aGUgZ3VhcmRfYmIsIHdoaWNoIGlzIHRoZSBjYXNlIHdoZW4gc2tpcF92ZWN0b3IgaXMgdHJ1ZS4g ICovDQo+ICAJICBpZiAoZ3VhcmRfYmIgIT0gYmJfYmVmb3JlX2VwaWxvZykNCj4gQEAgLTMwMjMs NyArMzQ5MCw2IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0 cmVlDQo+IG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4gIAl9DQo+ICAgICAgICBlbHNlDQo+ICAJ c2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xjc3NhIChlcGlsb2cpOw0KPiAtDQo+ICAgICAg ICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGJvdW5kOw0KPiAgICAgICAgaWYgKGJvdW5kX3NjYWxh ci5pc19jb25zdGFudCAoJmJvdW5kKSkNCj4gIAl7DQo+IEBAIC0zMTE0LDcgKzM1ODAsNiBAQCB2 ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZQ0KPiBuaXRlcnMs IHRyZWUgbml0ZXJzbTEsDQo+IA0KPiAgICBhZGp1c3RfdmVjLnJlbGVhc2UgKCk7DQo+ICAgIGZy ZWVfb3JpZ2luYWxfY29weV90YWJsZXMgKCk7DQo+IC0NCj4gICAgcmV0dXJuIHZlY3RfZXBpbG9n dWVzID8gZXBpbG9nIDogTlVMTDsNCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12 ZWN0LWxvb3AuY2MgYi9nY2MvdHJlZS12ZWN0LWxvb3AuY2MNCj4gaW5kZXgNCj4gZDVjMmJmZjgw YmU5YmUxNTI3MDdlYjlkMzkzMmM4NjM5NDhkYWE3My4uNTQ4OTQ2YTZiYmY4ODkyMDg2YTE3ZmUz MA0KPiAwM2RhMmMzZGNlYWRmNWIgMTAwNjQ0DQo+IC0tLSBhL2djYy90cmVlLXZlY3QtbG9vcC5j Yw0KPiArKysgYi9nY2MvdHJlZS12ZWN0LWxvb3AuY2MNCj4gQEAgLTg0NCw4MCArODQ0LDEwNiBA QCB2ZWN0X2ZpeHVwX3NjYWxhcl9jeWNsZXNfd2l0aF9wYXR0ZXJucw0KPiAobG9vcF92ZWNfaW5m byBsb29wX3ZpbmZvKQ0KPiAgICAgaW4gTlVNQkVSX09GX0lURVJBVElPTlNNMS4gIFBsYWNlIHRo ZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggdGhlDQo+ICAgICBuaXRlciBpbmZvcm1hdGlvbiBob2xk cyBpbiBBU1NVTVBUSU9OUy4NCj4gDQo+IC0gICBSZXR1cm4gdGhlIGxvb3AgZXhpdCBjb25kaXRp b24uICAqLw0KPiArICAgUmV0dXJuIHRoZSBsb29wIGV4aXQgY29uZGl0aW9ucy4gICovDQo+IA0K PiANCj4gLXN0YXRpYyBnY29uZCAqDQo+ICtzdGF0aWMgdmVjPGdjb25kICo+DQo+ICB2ZWN0X2dl dF9sb29wX25pdGVycyAoY2xhc3MgbG9vcCAqbG9vcCwgdHJlZSAqYXNzdW1wdGlvbnMsDQo+ICAJ CSAgICAgIHRyZWUgKm51bWJlcl9vZl9pdGVyYXRpb25zLCB0cmVlDQo+ICpudW1iZXJfb2ZfaXRl cmF0aW9uc20xKQ0KPiAgew0KPiAtICBlZGdlIGV4aXQgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ ICsgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ ICsgIHZlYzxnY29uZCAqPiBjb25kczsNCj4gKyAgY29uZHMuY3JlYXRlIChleGl0cy5sZW5ndGgg KCkpOw0KPiAgICBjbGFzcyB0cmVlX25pdGVyX2Rlc2Mgbml0ZXJfZGVzYzsNCj4gICAgdHJlZSBu aXRlcl9hc3N1bXB0aW9ucywgbml0ZXIsIG1heV9iZV96ZXJvOw0KPiAtICBnY29uZCAqY29uZCA9 IGdldF9sb29wX2V4aXRfY29uZGl0aW9uIChsb29wKTsNCj4gDQo+ICAgICphc3N1bXB0aW9ucyA9 IGJvb2xlYW5fdHJ1ZV9ub2RlOw0KPiAgICAqbnVtYmVyX29mX2l0ZXJhdGlvbnNtMSA9IGNocmVj X2RvbnRfa25vdzsNCj4gICAgKm51bWJlcl9vZl9pdGVyYXRpb25zID0gY2hyZWNfZG9udF9rbm93 Ow0KPiArDQo+ICAgIERVTVBfVkVDVF9TQ09QRSAoImdldF9sb29wX25pdGVycyIpOw0KPiANCj4g LSAgaWYgKCFleGl0KQ0KPiAtICAgIHJldHVybiBjb25kOw0KPiArICBpZiAoZXhpdHMuaXNfZW1w dHkgKCkpDQo+ICsgICAgcmV0dXJuIGNvbmRzOw0KPiANCj4gLSAgbWF5X2JlX3plcm8gPSBOVUxM X1RSRUU7DQo+IC0gIGlmICghbnVtYmVyX29mX2l0ZXJhdGlvbnNfZXhpdF9hc3N1bXB0aW9ucyAo bG9vcCwgZXhpdCwgJm5pdGVyX2Rlc2MsDQo+IE5VTEwpDQo+IC0gICAgICB8fCBjaHJlY19jb250 YWluc191bmRldGVybWluZWQgKG5pdGVyX2Rlc2Mubml0ZXIpKQ0KPiAtICAgIHJldHVybiBjb25k Ow0KPiArICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ICsgICAgZHVtcF9wcmludGZfbG9jIChN U0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgIkxvb3AgaGFzICVkIGV4aXRzLlxuIiwNCj4gKwkJICAg ICBleGl0cy5sZW5ndGggKCkpOw0KPiANCj4gLSAgbml0ZXJfYXNzdW1wdGlvbnMgPSBuaXRlcl9k ZXNjLmFzc3VtcHRpb25zOw0KPiAtICBtYXlfYmVfemVybyA9IG5pdGVyX2Rlc2MubWF5X2JlX3pl cm87DQo+IC0gIG5pdGVyID0gbml0ZXJfZGVzYy5uaXRlcjsNCj4gKyAgZWRnZSBleGl0Ow0KPiAr ICB1bnNpZ25lZCBpbnQgaTsNCj4gKyAgRk9SX0VBQ0hfVkVDX0VMVCAoZXhpdHMsIGksIGV4aXQp DQo+ICsgICAgew0KPiArICAgICAgZ2NvbmQgKmNvbmQgPSBnZXRfZWRnZV9jb25kaXRpb24gKGV4 aXQpOw0KPiArICAgICAgaWYgKGNvbmQpDQo+ICsJY29uZHMuc2FmZV9wdXNoIChjb25kKTsNCj4g DQo+IC0gIGlmIChtYXlfYmVfemVybyAmJiBpbnRlZ2VyX3plcm9wIChtYXlfYmVfemVybykpDQo+ IC0gICAgbWF5X2JlX3plcm8gPSBOVUxMX1RSRUU7DQo+ICsgICAgICBpZiAoZHVtcF9lbmFibGVk X3AgKCkpDQo+ICsJZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgIkFu YWx5emluZyBleGl0DQo+ICVkLi4uXG4iLCBpKTsNCj4gDQo+IC0gIGlmIChtYXlfYmVfemVybykN Cj4gLSAgICB7DQo+IC0gICAgICBpZiAoQ09NUEFSSVNPTl9DTEFTU19QIChtYXlfYmVfemVybykp DQo+ICsgICAgICBtYXlfYmVfemVybyA9IE5VTExfVFJFRTsNCj4gKyAgICAgIGlmICghbnVtYmVy X29mX2l0ZXJhdGlvbnNfZXhpdF9hc3N1bXB0aW9ucyAobG9vcCwgZXhpdCwgJm5pdGVyX2Rlc2Ms DQo+IE5VTEwpDQo+ICsgICAgICAgICAgfHwgY2hyZWNfY29udGFpbnNfdW5kZXRlcm1pbmVkIChu aXRlcl9kZXNjLm5pdGVyKSkNCj4gKwljb250aW51ZTsNCj4gKw0KPiArICAgICAgbml0ZXJfYXNz dW1wdGlvbnMgPSBuaXRlcl9kZXNjLmFzc3VtcHRpb25zOw0KPiArICAgICAgbWF5X2JlX3plcm8g PSBuaXRlcl9kZXNjLm1heV9iZV96ZXJvOw0KPiArICAgICAgbml0ZXIgPSBuaXRlcl9kZXNjLm5p dGVyOw0KPiArDQo+ICsgICAgICBpZiAobWF5X2JlX3plcm8gJiYgaW50ZWdlcl96ZXJvcCAobWF5 X2JlX3plcm8pKQ0KPiArCW1heV9iZV96ZXJvID0gTlVMTF9UUkVFOw0KPiArDQo+ICsgICAgICBp ZiAobWF5X2JlX3plcm8pDQo+ICAJew0KPiAtCSAgLyogVHJ5IHRvIGNvbWJpbmUgbWF5X2JlX3pl cm8gd2l0aCBhc3N1bXB0aW9ucywgdGhpcyBjYW4gc2ltcGxpZnkNCj4gLQkgICAgIGNvbXB1dGF0 aW9uIG9mIG5pdGVyIGV4cHJlc3Npb24uICAqLw0KPiAtCSAgaWYgKG5pdGVyX2Fzc3VtcHRpb25z ICYmICFpbnRlZ2VyX25vbnplcm9wIChuaXRlcl9hc3N1bXB0aW9ucykpDQo+IC0JICAgIG5pdGVy X2Fzc3VtcHRpb25zID0gZm9sZF9idWlsZDIgKFRSVVRIX0FORF9FWFBSLA0KPiBib29sZWFuX3R5 cGVfbm9kZSwNCj4gLQkJCQkJICAgICBuaXRlcl9hc3N1bXB0aW9ucywNCj4gLQkJCQkJICAgICBm b2xkX2J1aWxkMSAoVFJVVEhfTk9UX0VYUFIsDQo+IC0NCj4gYm9vbGVhbl90eXBlX25vZGUsDQo+ IC0JCQkJCQkJICBtYXlfYmVfemVybykpOw0KPiArCSAgaWYgKENPTVBBUklTT05fQ0xBU1NfUCAo bWF5X2JlX3plcm8pKQ0KPiArCSAgICB7DQo+ICsJICAgICAgLyogVHJ5IHRvIGNvbWJpbmUgbWF5 X2JlX3plcm8gd2l0aCBhc3N1bXB0aW9ucywgdGhpcyBjYW4NCj4gc2ltcGxpZnkNCj4gKwkJIGNv bXB1dGF0aW9uIG9mIG5pdGVyIGV4cHJlc3Npb24uICAqLw0KPiArCSAgICAgIGlmIChuaXRlcl9h c3N1bXB0aW9ucyAmJiAhaW50ZWdlcl9ub256ZXJvcCAobml0ZXJfYXNzdW1wdGlvbnMpKQ0KPiAr CQluaXRlcl9hc3N1bXB0aW9ucyA9IGZvbGRfYnVpbGQyIChUUlVUSF9BTkRfRVhQUiwNCj4gYm9v bGVhbl90eXBlX25vZGUsDQo+ICsJCQkJCQkgbml0ZXJfYXNzdW1wdGlvbnMsDQo+ICsJCQkJCQkg Zm9sZF9idWlsZDENCj4gKFRSVVRIX05PVF9FWFBSLA0KPiArDQo+IGJvb2xlYW5fdHlwZV9ub2Rl LA0KPiArCQkJCQkJCSAgICAgIG1heV9iZV96ZXJvKSk7DQo+ICsJICAgICAgZWxzZQ0KPiArCQlu aXRlciA9IGZvbGRfYnVpbGQzIChDT05EX0VYUFIsIFRSRUVfVFlQRSAobml0ZXIpLA0KPiBtYXlf YmVfemVybywNCj4gKwkJCQkgICAgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAw KSwNCj4gKwkJCQkgICAgIHJld3JpdGVfdG9fbm9uX3RyYXBwaW5nX292ZXJmbG93DQo+IChuaXRl cikpOw0KPiArDQo+ICsJICAgICAgbWF5X2JlX3plcm8gPSBOVUxMX1RSRUU7DQo+ICsJICAgIH0N Cj4gKwkgIGVsc2UgaWYgKGludGVnZXJfbm9uemVyb3AgKG1heV9iZV96ZXJvKSAmJiBpID09IDAp DQo+ICsJICAgIHsNCj4gKwkgICAgICAqbnVtYmVyX29mX2l0ZXJhdGlvbnNtMSA9IGJ1aWxkX2lu dF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAwKTsNCj4gKwkgICAgICAqbnVtYmVyX29mX2l0ZXJh dGlvbnMgPSBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMSk7DQo+ICsJICAgICAg Y29udGludWU7DQo+ICsJICAgIH0NCj4gIAkgIGVsc2UNCj4gLQkgICAgbml0ZXIgPSBmb2xkX2J1 aWxkMyAoQ09ORF9FWFBSLCBUUkVFX1RZUEUgKG5pdGVyKSwgbWF5X2JlX3plcm8sDQo+IC0JCQkJ IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAwKSwNCj4gLQkJCQkgcmV3cml0ZV90 b19ub25fdHJhcHBpbmdfb3ZlcmZsb3cgKG5pdGVyKSk7DQo+ICsJICAgIGNvbnRpbnVlOw0KPiAr ICAgICAgIH0NCj4gDQo+IC0JICBtYXlfYmVfemVybyA9IE5VTExfVFJFRTsNCj4gLQl9DQo+IC0g ICAgICBlbHNlIGlmIChpbnRlZ2VyX25vbnplcm9wIChtYXlfYmVfemVybykpDQo+ICsgICAgICAv KiBMb29wIGFzc3VtcHRpb25zIGFyZSBiYXNlZCBvZmYgdGhlIG5vcm1hbCBleGl0LiAgKi8NCj4g KyAgICAgIGlmIChpID09IDApDQo+ICAJew0KPiAtCSAgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEg PSBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMCk7DQo+IC0JICAqbnVtYmVyX29m X2l0ZXJhdGlvbnMgPSBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMSk7DQo+IC0J ICByZXR1cm4gY29uZDsNCj4gKwkgICphc3N1bXB0aW9ucyA9IG5pdGVyX2Fzc3VtcHRpb25zOw0K PiArCSAgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEgPSBuaXRlcjsNCj4gKw0KPiArCSAgLyogV2Ug d2FudCB0aGUgbnVtYmVyIG9mIGxvb3AgaGVhZGVyIGV4ZWN1dGlvbnMgd2hpY2ggaXMgdGhlDQo+ IG51bWJlcg0KPiArCSAgICAgb2YgbGF0Y2ggZXhlY3V0aW9ucyBwbHVzIG9uZS4NCj4gKwkgICAg ID8/PyAgRm9yIFVJTlRfTUFYIGxhdGNoIGV4ZWN1dGlvbnMgdGhpcyBudW1iZXIgb3ZlcmZsb3dz IHRvDQo+IHplcm8NCj4gKwkgICAgIGZvciBsb29wcyBsaWtlIGRvIHsgbisrOyB9IHdoaWxlIChu ICE9IDApOyAgKi8NCj4gKwkgIGlmIChuaXRlciAmJiAhY2hyZWNfY29udGFpbnNfdW5kZXRlcm1p bmVkIChuaXRlcikpDQo+ICsJICAgIG5pdGVyID0gZm9sZF9idWlsZDIgKFBMVVNfRVhQUiwgVFJF RV9UWVBFIChuaXRlciksDQo+ICsJCQkJIHVuc2hhcmVfZXhwciAobml0ZXIpLA0KPiArCQkJCSBi dWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMSkpOw0KPiArCSAgKm51bWJlcl9vZl9p dGVyYXRpb25zID0gbml0ZXI7DQo+ICAJfQ0KPiAtICAgICAgZWxzZQ0KPiAtCXJldHVybiBjb25k Ow0KPiAgICAgIH0NCj4gDQo+IC0gICphc3N1bXB0aW9ucyA9IG5pdGVyX2Fzc3VtcHRpb25zOw0K PiAtICAqbnVtYmVyX29mX2l0ZXJhdGlvbnNtMSA9IG5pdGVyOw0KPiAtDQo+IC0gIC8qIFdlIHdh bnQgdGhlIG51bWJlciBvZiBsb29wIGhlYWRlciBleGVjdXRpb25zIHdoaWNoIGlzIHRoZSBudW1i ZXINCj4gLSAgICAgb2YgbGF0Y2ggZXhlY3V0aW9ucyBwbHVzIG9uZS4NCj4gLSAgICAgPz8/ICBG b3IgVUlOVF9NQVggbGF0Y2ggZXhlY3V0aW9ucyB0aGlzIG51bWJlciBvdmVyZmxvd3MgdG8gemVy bw0KPiAtICAgICBmb3IgbG9vcHMgbGlrZSBkbyB7IG4rKzsgfSB3aGlsZSAobiAhPSAwKTsgICov DQo+IC0gIGlmIChuaXRlciAmJiAhY2hyZWNfY29udGFpbnNfdW5kZXRlcm1pbmVkIChuaXRlcikp DQo+IC0gICAgbml0ZXIgPSBmb2xkX2J1aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKG5pdGVy KSwgdW5zaGFyZV9leHByIChuaXRlciksDQo+IC0JCQkgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQ RSAobml0ZXIpLCAxKSk7DQo+IC0gICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9IG5pdGVyOw0KPiAr ICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ICsgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9U RSwgdmVjdF9sb2NhdGlvbiwgIkFsbCBsb29wIGV4aXRzIHN1Y2Nlc3NmdWxseQ0KPiBhbmFseXpl ZC5cbiIpOw0KPiANCj4gLSAgcmV0dXJuIGNvbmQ7DQo+ICsgIHJldHVybiBjb25kczsNCj4gIH0N Cj4gDQo+ICAvKiBGdW5jdGlvbiBiYl9pbl9sb29wX3ANCj4gQEAgLTE0NTUsNyArMTQ4MSw4IEBA IHZlY3RfY29tcHV0ZV9zaW5nbGVfc2NhbGFyX2l0ZXJhdGlvbl9jb3N0DQo+IChsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8pDQo+IA0KPiAgICAgVmVyaWZ5IHRoYXQgY2VydGFpbiBDRkcgcmVzdHJp Y3Rpb25zIGhvbGQsIGluY2x1ZGluZzoNCj4gICAgIC0gdGhlIGxvb3AgaGFzIGEgcHJlLWhlYWRl cg0KPiAtICAgLSB0aGUgbG9vcCBoYXMgYSBzaW5nbGUgZW50cnkgYW5kIGV4aXQNCj4gKyAgIC0g dGhlIGxvb3AgaGFzIGEgc2luZ2xlIGVudHJ5DQo+ICsgICAtIG5lc3RlZCBsb29wcyBjYW4gaGF2 ZSBvbmx5IGEgc2luZ2xlIGV4aXQuDQo+ICAgICAtIHRoZSBsb29wIGV4aXQgY29uZGl0aW9uIGlz IHNpbXBsZSBlbm91Z2gNCj4gICAgIC0gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGNhbiBiZSBh bmFseXplZCwgaS5lLCBhIGNvdW50YWJsZSBsb29wLiAgVGhlDQo+ICAgICAgIG5pdGVyIGNvdWxk IGJlIGFuYWx5emVkIHVuZGVyIHNvbWUgYXNzdW1wdGlvbnMuICAqLw0KPiBAQCAtMTQ4NCwxMSAr MTUxMSw2IEBAIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0gKGNsYXNzIGxvb3AgKmxvb3AsDQo+IHZl Y3RfbG9vcF9mb3JtX2luZm8gKmluZm8pDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhpdC1iYikgICovDQo+IA0KPiAtICAgICAg aWYgKGxvb3AtPm51bV9ub2RlcyAhPSAyKQ0KPiAtCXJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJl X2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiAtCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiAt CQkJCSAgICAgICAiIGNvbnRyb2wgZmxvdyBpbiBsb29wLlxuIik7DQo+IC0NCj4gICAgICAgIGlm IChlbXB0eV9ibG9ja19wIChsb29wLT5oZWFkZXIpKQ0KPiAgCXJldHVybiBvcHRfcmVzdWx0Ojpm YWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiAgCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6 IGVtcHR5IGxvb3AuXG4iKTsNCj4gQEAgLTE1NTksMTEgKzE1ODEsMTMgQEAgdmVjdF9hbmFseXpl X2xvb3BfZm9ybSAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gdmVjdF9sb29wX2Zvcm1faW5mbyAqaW5m bykNCj4gICAgICAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwN Cj4gIAkJCSAiQ29uc2lkZXJpbmcgb3V0ZXItbG9vcCB2ZWN0b3JpemF0aW9uLlxuIik7DQo+ICAg ICAgICBpbmZvLT5pbm5lcl9sb29wX2NvbmQgPSBpbm5lci5sb29wX2NvbmQ7DQo+ICsNCj4gKyAg ICAgIGlmICghc2luZ2xlX2V4aXQgKGxvb3ApKQ0KPiArCXJldHVybiBvcHRfcmVzdWx0OjpmYWls dXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiArCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6IG11 bHRpcGxlIGV4aXRzLlxuIik7DQo+ICsNCj4gICAgICB9DQo+IA0KPiAtICBpZiAoIXNpbmdsZV9l eGl0IChsb29wKSkNCj4gLSAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9s b2NhdGlvbiwNCj4gLQkJCQkgICAibm90IHZlY3Rvcml6ZWQ6IG11bHRpcGxlIGV4aXRzLlxuIik7 DQo+ICAgIGlmIChFREdFX0NPVU5UIChsb29wLT5oZWFkZXItPnByZWRzKSAhPSAyKQ0KPiAgICAg IHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiAgCQkJCSAg ICJub3QgdmVjdG9yaXplZDoiDQo+IEBAIC0xNTc5LDIxICsxNjAzLDQ1IEBAIHZlY3RfYW5hbHl6 ZV9sb29wX2Zvcm0gKGNsYXNzIGxvb3AgKmxvb3AsDQo+IHZlY3RfbG9vcF9mb3JtX2luZm8gKmlu Zm8pDQo+ICAJCQkJICAgIm5vdCB2ZWN0b3JpemVkOiBsYXRjaCBibG9jayBub3QgZW1wdHkuXG4i KTsNCj4gDQo+ICAgIC8qIE1ha2Ugc3VyZSB0aGUgZXhpdCBpcyBub3QgYWJub3JtYWwuICAqLw0K PiAtICBlZGdlIGUgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+IC0gIGlmIChlLT5mbGFncyAmIEVE R0VfQUJOT1JNQUwpDQo+ICsgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9l ZGdlcyAobG9vcCk7DQo+ICsgIGVkZ2UgbmV4aXQgPSBub3JtYWxfZXhpdCAobG9vcCk7DQo+ICsg IGZvciAoZWRnZSBlIDogZXhpdHMpDQo+ICsgICAgew0KPiArICAgICAgaWYgKGUtPmZsYWdzICYg RURHRV9BQk5PUk1BTCkNCj4gKwlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9s b2NhdGlvbiwNCj4gKwkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVkOiINCj4gKwkJCQkgICAgICAg IiBhYm5vcm1hbCBsb29wIGV4aXQgZWRnZS5cbiIpOw0KPiArICAgICAgLyogRWFybHkgYnJlYWsg QkIgbXVzdCBiZSBhZnRlciB0aGUgbWFpbiBleGl0IEJCLiAgSW4gdGhlb3J5IHdlIHNob3VsZA0K PiArCSBiZSBhYmxlIHRvIHZlY3Rvcml6ZSB0aGUgaW52ZXJzZSBvcmRlciwgYnV0IHRoZSBjdXJy ZW50IGZsb3cgaW4gdGhlDQo+ICsJIHRoZSB2ZWN0b3JpemVyIGFsd2F5cyBhc3N1bWVzIHlvdSB1 cGRhdGUgc3VjY2VzcyBQSEkgbm9kZXMsIG5vdA0KPiArCSBwcmVkcy4gICovDQo+ICsgICAgICBp ZiAoZSAhPSBuZXhpdCAmJiAhZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCBuZXhpdC0+ c3JjLCBlLQ0KPiA+c3JjKSkNCj4gKwlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVj dF9sb2NhdGlvbiwNCj4gKwkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVkOiINCj4gKwkJCQkgICAg ICAgIiBhYm5vcm1hbCBsb29wIGV4aXQgZWRnZSBvcmRlci5cbiIpOw0KPiArICAgIH0NCj4gKw0K PiArICBpZiAoZXhpdHMubGVuZ3RoICgpID4gMikNCj4gICAgICByZXR1cm4gb3B0X3Jlc3VsdDo6 ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gIAkJCQkgICAibm90IHZlY3Rvcml6ZWQ6Ig0K PiAtCQkJCSAgICIgYWJub3JtYWwgbG9vcCBleGl0IGVkZ2UuXG4iKTsNCj4gLQ0KPiAtICBpbmZv LT5sb29wX2NvbmQNCj4gKwkJCQkgICAiIHRvbyBtYW55IGV4aXRzLiBPbmx5IDEgYWRkaXRpb25h bCBleGl0Ig0KPiArCQkJCSAgICIgc3VwcG9ydGVkLlxuIik7DQo+ICsgIGlmIChsb29wLT5udW1f bm9kZXMgIT0gMiArIGV4aXRzLmxlbmd0aCAoKSAtIDEpDQo+ICsgICAgcmV0dXJuIG9wdF9yZXN1 bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ICsJCQkJICAgIm5vdCB2ZWN0b3JpemVk OiINCj4gKwkJCQkgICAiIHVuc3VwcG9ydGVkIGNvbnRyb2wgZmxvdyBpbiBsb29wLlxuIik7DQo+ ICsgIGluZm8tPmNvbmRzDQo+ICAgICAgPSB2ZWN0X2dldF9sb29wX25pdGVycyAobG9vcCwgJmlu Zm8tPmFzc3VtcHRpb25zLA0KPiAgCQkJICAgICZpbmZvLT5udW1iZXJfb2ZfaXRlcmF0aW9ucywN Cj4gIAkJCSAgICAmaW5mby0+bnVtYmVyX29mX2l0ZXJhdGlvbnNtMSk7DQo+IC0gIGlmICghaW5m by0+bG9vcF9jb25kKQ0KPiArDQo+ICsgIGlmIChpbmZvLT5jb25kcy5sZW5ndGggKCkgPT0gMCkN Cj4gICAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdA0KPiAgICAgICAgKHZlY3RfbG9j YXRpb24sDQo+ICAgICAgICAgIm5vdCB2ZWN0b3JpemVkOiBjb21wbGljYXRlZCBleGl0IGNvbmRp dGlvbi5cbiIpOw0KPiANCj4gKyAgaW5mby0+bG9vcF9jb25kID0gaW5mby0+Y29uZHNbMF07DQo+ ICsNCj4gICAgaWYgKGludGVnZXJfemVyb3AgKGluZm8tPmFzc3VtcHRpb25zKQ0KPiAgICAgICAg fHwgIWluZm8tPm51bWJlcl9vZl9pdGVyYXRpb25zDQo+ICAgICAgICB8fCBjaHJlY19jb250YWlu c191bmRldGVybWluZWQgKGluZm8tPm51bWJlcl9vZl9pdGVyYXRpb25zKSkNCj4gQEAgLTE2Mzgs OCArMTY4NiwxNyBAQCB2ZWN0X2NyZWF0ZV9sb29wX3ZpbmZvIChjbGFzcyBsb29wICpsb29wLA0K PiB2ZWNfaW5mb19zaGFyZWQgKnNoYXJlZCwNCj4gICAgaWYgKCFpbnRlZ2VyX29uZXAgKGluZm8t PmFzc3VtcHRpb25zKSAmJiAhbWFpbl9sb29wX2luZm8pDQo+ICAgICAgTE9PUF9WSU5GT19OSVRF UlNfQVNTVU1QVElPTlMgKGxvb3BfdmluZm8pID0gaW5mby0+YXNzdW1wdGlvbnM7DQo+IA0KPiAt ICBzdG10X3ZlY19pbmZvIGxvb3BfY29uZF9pbmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQg KGluZm8tDQo+ID5sb29wX2NvbmQpOw0KPiAtICBTVE1UX1ZJTkZPX1RZUEUgKGxvb3BfY29uZF9p bmZvKSA9IGxvb3BfZXhpdF9jdHJsX3ZlY19pbmZvX3R5cGU7DQo+ICsgIHVuc2lnbmVkIGludCBp Ow0KPiArICBnY29uZCAqY29uZDsNCj4gKyAgRk9SX0VBQ0hfVkVDX0VMVCAoaW5mby0+Y29uZHMs IGksIGNvbmQpDQo+ICsgICAgew0KPiArICAgICAgc3RtdF92ZWNfaW5mbyBsb29wX2NvbmRfaW5m byA9IGxvb3BfdmluZm8tPmxvb2t1cF9zdG10IChjb25kKTsNCj4gKyAgICAgIFNUTVRfVklORk9f VFlQRSAobG9vcF9jb25kX2luZm8pID0gbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZTsNCj4g KyAgICB9DQo+ICsNCj4gKyAgLyogQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHZlY3Rvcml6aW5nIG11 bHRpcGxlIGV4aXRzLiAgKi8NCj4gKyAgTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3Bfdmlu Zm8pID0gaW5mby0+Y29uZHMubGVuZ3RoICgpID4gMTsNCj4gKw0KPiAgICBpZiAoaW5mby0+aW5u ZXJfbG9vcF9jb25kKQ0KPiAgICAgIHsNCj4gICAgICAgIHN0bXRfdmVjX2luZm8gaW5uZXJfbG9v cF9jb25kX2luZm8NCj4gQEAgLTIyNzAsMTAgKzIzMjcsMTMgQEAgdmVjdF9kZXRlcm1pbmVfcGFy dGlhbF92ZWN0b3JzX2FuZF9wZWVsaW5nDQo+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ ICAgIGJvb2wgbmVlZF9wZWVsaW5nX29yX3BhcnRpYWxfdmVjdG9yc19wDQo+ICAgICAgPSB2ZWN0 X25lZWRfcGVlbGluZ19vcl9wYXJ0aWFsX3ZlY3RvcnNfcCAobG9vcF92aW5mbyk7DQo+IA0KPiAt ICAvKiBEZWNpZGUgd2hldGhlciB0byB2ZWN0b3JpemUgdGhlIGxvb3Agd2l0aCBwYXJ0aWFsIHZl Y3RvcnMuICAqLw0KPiArICAvKiBEZWNpZGUgd2hldGhlciB0byB2ZWN0b3JpemUgdGhlIGxvb3Ag d2l0aCBwYXJ0aWFsIHZlY3RvcnMuICBDdXJyZW50bHkNCj4gKyAgICAgZWFybHkgYnJlYWsgdmVj dG9yaXphdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpYWwgdmVjdG9ycyBhcyB3ZSBoYXZlDQo+ ICsgICAgIHRvIHBlZWwgYSBzY2FsYXIgbG9vcCB0aGF0IHdlIGNhbid0IHZlY3Rvcml6ZS4gICov DQo+ICAgIExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pID0g ZmFsc2U7DQo+ICAgIExPT1BfVklORk9fRVBJTF9VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCAobG9v cF92aW5mbykgPSBmYWxzZTsNCj4gICAgaWYgKExPT1BfVklORk9fQ0FOX1VTRV9QQVJUSUFMX1ZF Q1RPUlNfUCAobG9vcF92aW5mbykNCj4gKyAgICAgICYmICFMT09QX1ZJTkZPX0VBUkxZX0JSRUFL UyAobG9vcF92aW5mbykNCj4gICAgICAgICYmIG5lZWRfcGVlbGluZ19vcl9wYXJ0aWFsX3ZlY3Rv cnNfcCkNCj4gICAgICB7DQo+ICAgICAgICAvKiBGb3IgcGFydGlhbC12ZWN0b3ItdXNhZ2U9MSwg dHJ5IHRvIHB1c2ggdGhlIGhhbmRsaW5nIG9mIHBhcnRpYWwNCj4gQEAgLTI3NDYsMTMgKzI4MDYs MTQgQEAgc3RhcnRfb3ZlcjoNCj4gDQo+ICAgIC8qIElmIGFuIGVwaWxvZ3VlIGxvb3AgaXMgcmVx dWlyZWQgbWFrZSBzdXJlIHdlIGNhbiBjcmVhdGUgb25lLiAgKi8NCj4gICAgaWYgKExPT1BfVklO Rk9fUEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5mbykNCj4gLSAgICAgIHx8IExPT1BfVklORk9f UEVFTElOR19GT1JfTklURVIgKGxvb3BfdmluZm8pKQ0KPiArICAgICAgfHwgTE9PUF9WSU5GT19Q RUVMSU5HX0ZPUl9OSVRFUiAobG9vcF92aW5mbykNCj4gKyAgICAgIHx8IExPT1BfVklORk9fRUFS TFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gICAgICB7DQo+ICAgICAgICBpZiAoZHVtcF9lbmFi bGVkX3AgKCkpDQo+ICAgICAgICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9j YXRpb24sICJlcGlsb2cgbG9vcCByZXF1aXJlZFxuIik7DQo+ICAgICAgICBpZiAoIXZlY3RfY2Fu X2FkdmFuY2VfaXZzX3AgKGxvb3BfdmluZm8pDQo+IC0JICB8fCAhc2xwZWVsX2Nhbl9kdXBsaWNh dGVfbG9vcF9wIChMT09QX1ZJTkZPX0xPT1ANCj4gKGxvb3BfdmluZm8pLA0KPiAtCQkJCQkgICBz aW5nbGVfZXhpdCAoTE9PUF9WSU5GT19MT09QDQo+ICsJICB8fCAhc2xwZWVsX2Nhbl9kdXBsaWNh dGVfbG9vcF9wIChsb29wX3ZpbmZvLA0KPiArCQkJCQkgICBub3JtYWxfZXhpdCAoTE9PUF9WSU5G T19MT09QDQo+ICAJCQkJCQkJIChsb29wX3ZpbmZvKSkpKQ0KPiAgICAgICAgICB7DQo+ICAJICBv ayA9IG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+IEBAIC0zMjM5LDYg KzMzMDAsOCBAQCB2ZWN0X2FuYWx5emVfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gdmVjX2lu Zm9fc2hhcmVkICpzaGFyZWQpDQo+ICAJCSAgICAgIioqKioqIENob29zaW5nIHZlY3RvciBtb2Rl ICVzXG4iLA0KPiAgCQkgICAgIEdFVF9NT0RFX05BTUUgKGZpcnN0X2xvb3BfdmluZm8tPnZlY3Rv cl9tb2RlKSk7DQo+IA0KPiArICBsb29wX2Zvcm1faW5mby5jb25kcy5yZWxlYXNlICgpOw0KPiAr DQo+ICAgIC8qIE9ubHkgdmVjdG9yaXplIGVwaWxvZ3VlcyBpZiBQQVJBTV9WRUNUX0VQSUxPR1VF U19OT01BU0sgaXMNCj4gICAgICAgZW5hYmxlZCwgU0lNRFVJRCBpcyBub3Qgc2V0LCBpdCBpcyB0 aGUgaW5uZXJtb3N0IGxvb3AgYW5kIHdlIGhhdmUNCj4gICAgICAgZWl0aGVyIGFscmVhZHkgZm91 bmQgdGhlIGxvb3AncyBTSU1ETEVOIG9yIHRoZXJlIHdhcyBubyBTSU1ETEVOIHRvDQo+IEBAIC0z MzUwLDYgKzM0MTMsOCBAQCB2ZWN0X2FuYWx5emVfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwNCj4g dmVjX2luZm9fc2hhcmVkICpzaGFyZWQpDQo+ICAJCQkgICAoZmlyc3RfbG9vcF92aW5mby0+ZXBp bG9ndWVfdmluZm9zWzBdLQ0KPiA+dmVjdG9yX21vZGUpKTsNCj4gICAgICB9DQo+IA0KPiArICBs b29wX2Zvcm1faW5mby5jb25kcy5yZWxlYXNlICgpOw0KPiArDQo+ICAgIHJldHVybiBmaXJzdF9s b29wX3ZpbmZvOw0KPiAgfQ0KPiANCj4gQEAgLTc5MDcsNiArNzk3MiwyMzcgQEAgdmVjdF90cmFu c2Zvcm1fcmVkdWN0aW9uIChsb29wX3ZlY19pbmZvDQo+IGxvb3BfdmluZm8sDQo+ICAgIHJldHVy biB0cnVlOw0KPiAgfQ0KPiANCj4gKy8qICBXaGVuIHZlY3Rvcml6aW5nIGVhcmx5IGJyZWFrIHN0 YXRlbWVudHMgaW5zdHJ1Y3Rpb25zIHRoYXQgaGFwcGVuDQo+IGJlZm9yZQ0KPiArICAgIHRoZSBl YXJseSBicmVhayBpbiB0aGUgY3VycmVudCBCQiBuZWVkIHRvIGJlIG1vdmVkIHRvIGFmdGVyIHRo ZSBlYXJseQ0KPiArICAgIGJyZWFrLiAgVGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIHRoYXQgYW5k IGFzc3VtZXMgdGhhdCBhbnkgdmFsaWRhdHkNCj4gKyAgICBjaGVja3MgaGFzIGFscmVhZHkgYmVl biBwZXJmb3JtZWQuDQo+ICsNCj4gKyAgICBXaGlsZSBtb3ZpbmcgdGhlIGluc3RydWN0aW9ucyBp ZiBpdCBlbmNvdW50ZXJzIGEgVlVTRSBvciBWREVGIGl0IHRoZW4NCj4gKyAgICBjb3JyZWN0cyB0 aGUgVlVTRVMgYXMgaXQgbW92ZXMgdGhlIHN0YXRlbWVudHMgYWxvbmcuICBDSEFJTkVEIGNvbnRh aW5zDQo+ICsgICAgdGhlIGxpc3Qgb2YgU1NBX05BTUVTIHRoYXQgYmVsb25nIHRvIHRoZSBkZXBl bmRlbmN5IGNoYWluIG9mIHRoZSBlYXJseQ0KPiArICAgIGJyZWFrIGNvbmRpdGlvbmFsLiAgR0RF U1QgaXMgdGhlIGxvY2F0aW9uIGluIHdoaWNoIHRvIGluc2VydCB0aGUgbmV3DQo+ICsgICAgc3Rh dGVtZW50cy4gIEdTVE1UIGlzIHRoZSBpdGVyYXRvciB0byB3YWxrIHVwIHRvIGZpbmQgc3RhdGVt ZW50cyB0bw0KPiArICAgIGNvbnNpZGVyIG1vdmluZy4gIFJFQUNISU5HX1ZVU0UgY29udGFpbnMg dGhlIGRvbWluYXRpbmcgVlVTRSBmb3VuZA0KPiBzbyBmYXINCj4gKyAgICBhbmQgQ1VSUkVOVF9W REVGIGNvbnRhaW5zIHRoZSBsYXN0IFZERUYgd2UndmUgc2Vlbi4gIFRoZXNlIGFyZQ0KPiB1cGRh dGVkIGluDQo+ICsgICAgcHJlLW9yZGVyIGFuZCB1cGRhdGVkIGluIHBvc3Qtb3JkZXIgYWZ0ZXIg bW92aW5nIHRoZSBpbnN0cnVjdGlvbi4gICovDQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICttb3Zl X2Vhcmx5X2V4aXRfc3RtdHMgKGhhc2hfc2V0PHRyZWU+ICpjaGFpbmVkLCBnaW1wbGVfc3RtdF9p dGVyYXRvcg0KPiAqZ2Rlc3QsDQo+ICsJCSAgICAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3N0 bXQsIHRyZWUgKnJlYWNoaW5nX3Z1c2UsDQo+ICsJCSAgICAgICB0cmVlICpjdXJyZW50X3ZkZWYp DQo+ICt7DQo+ICsgIGlmIChnc2lfZW5kX3AgKCpnc3RtdCkpDQo+ICsgICAgcmV0dXJuOw0KPiAr DQo+ICsgIGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10ICgqZ3N0bXQpOw0KPiArICBpZiAoZ2ltcGxl X2hhc19vcHMgKHN0bXQpKQ0KPiArICAgIHsNCj4gKyAgICAgIHRyZWUgZGVzdCA9IE5VTExfVFJF RTsNCj4gKyAgICAgIC8qIFRyeSB0byBmaW5kIHRoZSBTU0FfTkFNRSBiZWluZyBkZWZpbmVkLiAg Rm9yIFN0YXRlbWVudHMgd2l0aCBhbiBMSFMNCj4gKwkgdXNlIHRoZSBMSFMsIGlmIG5vdCwgYXNz dW1lIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEgY2FsbCBpcyB0aGUNCj4gKwkgdmFsdWUg YmVpbmcgZGVmaW5lZC4gIGUuZy4gTUFTS0VEX0xPQUQgZXRjLiAgKi8NCj4gKyAgICAgIGlmIChn aW1wbGVfaGFzX2xocyAoc3RtdCkpDQo+ICsJew0KPiArCSAgaWYgKGlzX2dpbXBsZV9hc3NpZ24g KHN0bXQpKQ0KPiArCSAgICBkZXN0ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHN0bXQpOw0KPiArCSAg ZWxzZSBpZiAoY29uc3QgZ2NhbGwgKmNhbGwgPSBkeW5fY2FzdCA8Y29uc3QgZ2NhbGwgKj4gKHN0 bXQpKQ0KPiArCSAgICBkZXN0ID0gZ2ltcGxlX2NhbGxfbGhzIChjYWxsKTsNCj4gKwl9DQo+ICsg ICAgICBlbHNlIGlmIChjb25zdCBnY2FsbCAqY2FsbCA9IGR5bl9jYXN0IDxjb25zdCBnY2FsbCAq PiAoc3RtdCkpDQo+ICsJZGVzdCA9IGdpbXBsZV9hcmcgKGNhbGwsIDApOw0KPiArDQo+ICsgICAg ICAvKiBEb24ndCBtb3ZlIHRoZSBzY2FsYXIgaW5zdHJ1Y3Rpb25zLiAgKi8NCj4gKyAgICAgIGJv b2wgbW92ZQ0KPiArCT0gZGVzdCAmJiAoVkVDVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZXN0KSkN Cj4gKwkJICAgfHwgUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoZGVzdCkpKTsNCj4gKw0KPiAr ICAgICAgLyogSWYgd2UgZm91bmQgdGhlIGRlZmluaW5nIHN0YXRlbWVudCBvZiBhIHNvbWV0aGlu ZyB0aGF0J3MgcGFydCBvZiB0aGUNCj4gKwkgY2hhaW4gdGhlbiBleHBhbmQgdGhlIGNoYWluIHdp dGggdGhlIG5ldyBTU0FfVkFScyBiZWluZyB1c2VkLiAgKi8NCj4gKyAgICAgIGlmIChjaGFpbmVk LT5jb250YWlucyAoZGVzdCkpDQo+ICsJew0KPiArCSAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8 IGdpbXBsZV9udW1fYXJncyAoc3RtdCk7IHgrKykNCj4gKwkgICAgaWYgKFRSRUVfQ09ERSAoZ2lt cGxlX2FyZyAoc3RtdCwgeCkpID09IFNTQV9OQU1FKQ0KPiArCSAgICAgIGNoYWluZWQtPmFkZCAo Z2ltcGxlX2FyZyAoc3RtdCwgeCkpOw0KPiArDQo+ICsJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkp DQo+ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQo+ICsJ CQkgICAgICJmb3VuZCBjaGFpbiAlRyIsIHN0bXQpOw0KPiArCSAgdXBkYXRlX3N0bXQgKHN0bXQp Ow0KPiArCSAgbW92ZSA9IGZhbHNlOw0KPiArCX0NCj4gKw0KPiArICAgICAgaWYgKG1vdmUpDQo+ ICsJew0KPiArCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiArCSAgICBkdW1wX3ByaW50Zl9s b2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLA0KPiArCQkgICAgICAgICAgICAgIm1vdmluZyBz dG10ICVHIiwgc3RtdCk7DQo+ICsJICBnc2lfbW92ZV9iZWZvcmUgKGdzdG10LCBnZGVzdCk7DQo+ ICsJICBnc2lfcHJldiAoZ2Rlc3QpOw0KPiArCSAgdHJlZSB2ZGVmID0gZ2ltcGxlX3ZkZWYgKHN0 bXQpOw0KPiArDQo+ICsJICAvKiBJZiB3ZSd2ZSBtb3ZlZCBhIFZERUYsIGV4dHJhY3QgdGhlIGRl ZmluaW5nIE1FTSBhbmQgdXBkYXRlDQo+ICsJICAgICB1c2FnZXMgb2YgaXQuICBUT0RPOiBJIHRo aW5rIHRoaXMgbWF5IG5lZWQgc29tZSBjb25zdHJhaW50cz8gKi8NCj4gKwkgIGlmICh2ZGVmKQ0K PiArCSAgICB7DQo+ICsJICAgICAgKmN1cnJlbnRfdmRlZiA9IHZkZWY7DQo+ICsJICAgICAgKnJl YWNoaW5nX3Z1c2UgPSBnaW1wbGVfdnVzZSAoc3RtdCk7DQo+ICsJICAgICAgaW1tX3VzZV9pdGVy YXRvciBpbW1faXRlcjsNCj4gKwkgICAgICBnaW1wbGUgKnVzZV9zdG10Ow0KPiArCSAgICAgIEZP Ul9FQUNIX0lNTV9VU0VfU1RNVCAodXNlX3N0bXQsIGltbV9pdGVyLCB2ZGVmKQ0KPiArCQl7DQo+ ICsJCSAgIGlmICghaXNfYSA8Z3BoaSAqPiAodXNlX3N0bXQpKQ0KPiArCQkgICAgIGNvbnRpbnVl Ow0KPiArCQkgICBncGhpICpwaGlfc3RtdCA9IGFzX2EgPGdwaGkgKj4gKHVzZV9zdG10KTsNCj4g Kw0KPiArCQkgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ICsJCSAgICAgZHVtcF9wcmludGZf bG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4gKwkJCQkidXBkYXRpbmcgdnVzZSAlRyIs IHVzZV9zdG10KTsNCj4gKwkJICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdpbXBsZV9waGlf bnVtX2FyZ3MgKHBoaV9zdG10KTsNCj4gaSsrKQ0KPiArCQkgICAgaWYgKGdpbXBsZV9waGlfYXJn X2RlZiAocGhpX3N0bXQsIGkpID09IHZkZWYpDQo+ICsJCSAgICAgIHsNCj4gKwkJCVNFVF9VU0Ug KFBISV9BUkdfREVGX1BUUiAocGhpX3N0bXQsIGkpLA0KPiBnaW1wbGVfdnVzZSAoc3RtdCkpOw0K PiArCQkJYnJlYWs7DQo+ICsJCSAgICAgIH0NCj4gKwkJfQ0KPiArCSAgICB9DQo+ICsJICB1cGRh dGVfc3RtdCAoc3RtdCk7DQo+ICsJfQ0KPiArICAgIH0NCj4gKw0KPiArICBnc2lfcHJldiAoZ3N0 bXQpOw0KPiArICBtb3ZlX2Vhcmx5X2V4aXRfc3RtdHMgKGNoYWluZWQsIGdkZXN0LCBnc3RtdCwg cmVhY2hpbmdfdnVzZSwNCj4gY3VycmVudF92ZGVmKTsNCj4gKw0KPiArICBpZiAoZ2ltcGxlX3Z1 c2UgKHN0bXQpDQo+ICsgICAgICAmJiByZWFjaGluZ192dXNlICYmICpyZWFjaGluZ192dXNlDQo+ ICsgICAgICAmJiBnaW1wbGVfdnVzZSAoc3RtdCkgPT0gKmN1cnJlbnRfdmRlZikNCj4gKyAgICB7 DQo+ICsgICAgICB1bmxpbmtfc3RtdF92ZGVmIChzdG10KTsNCj4gKyAgICAgIGdpbXBsZV9zZXRf dnVzZSAoc3RtdCwgKnJlYWNoaW5nX3Z1c2UpOw0KPiArICAgICAgdXBkYXRlX3N0bXQgKHN0bXQp Ow0KPiArICAgIH0NCj4gK30NCj4gKw0KPiArLyogVHJhbnNmb3JtIHRoZSBkZWZpbml0aW9uIHN0 bXQgU1RNVF9JTkZPIG9mIGFuIGVhcmx5IGV4aXQNCj4gKyAgIHZhbHVlLiAgKi8NCj4gKw0KPiAr Ym9vbA0KPiArdmVjdF90cmFuc2Zvcm1fZWFybHlfYnJlYWsgKGxvb3BfdmVjX2luZm8gbG9vcF92 aW5mbywNCj4gKwkJCSAgICBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywgZ2ltcGxlX3N0bXRfaXRl cmF0b3INCj4gKmdzaSwNCj4gKwkJCSAgICBnaW1wbGUgKip2ZWNfc3RtdCwgc2xwX3RyZWUgc2xw X25vZGUpDQo+ICt7DQo+ICsgIHRyZWUgdmVjdHlwZV9vdXQgPSBTVE1UX1ZJTkZPX1ZFQ1RZUEUg KHN0bXRfaW5mbyk7DQo+ICsgIGludCBpOw0KPiArICBpbnQgbmNvcGllczsNCj4gKyAgaW50IHZl Y19udW07DQo+ICsNCj4gKyAgaWYgKCFTVE1UX1ZJTkZPX1JFTEVWQU5UX1AgKHN0bXRfaW5mbykp DQo+ICsgICAgcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgIGdpbXBsZV9tYXRjaF9vcCBvcDsNCj4g KyAgaWYgKCFnaW1wbGVfZXh0cmFjdF9vcCAoc3RtdF9pbmZvLT5zdG10LCAmb3ApKQ0KPiArICAg IGdjY191bnJlYWNoYWJsZSAoKTsNCj4gKyAgZ2NjX2Fzc2VydCAob3AuY29kZS5pc190cmVlX2Nv ZGUgKCkpOw0KPiArICBhdXRvIGNvZGUgPSB0cmVlX2NvZGUgKG9wLmNvZGUpOw0KPiArDQo+ICsg IHRyZWUgdmVjdHlwZV9pbiA9IFNUTVRfVklORk9fVkVDVFlQRSAoc3RtdF9pbmZvKTsNCj4gKyAg Z2NjX2Fzc2VydCAodmVjdHlwZV9pbik7DQo+ICsNCj4gKw0KPiArICBpZiAoc2xwX25vZGUpDQo+ ICsgICAgew0KPiArICAgICAgbmNvcGllcyA9IDE7DQo+ICsgICAgICB2ZWNfbnVtID0gU0xQX1RS RUVfTlVNQkVSX09GX1ZFQ19TVE1UUyAoc2xwX25vZGUpOw0KPiArICAgIH0NCj4gKyAgZWxzZQ0K PiArICAgIHsNCj4gKyAgICAgIG5jb3BpZXMgPSB2ZWN0X2dldF9udW1fY29waWVzIChsb29wX3Zp bmZvLCB2ZWN0eXBlX2luKTsNCj4gKyAgICAgIHZlY19udW0gPSAxOw0KPiArICAgIH0NCj4gKw0K PiArICB2ZWNfbG9vcF9tYXNrcyAqbWFza3MgPSAmTE9PUF9WSU5GT19NQVNLUyAobG9vcF92aW5m byk7DQo+ICsgIGJvb2wgbWFza2VkX2xvb3BfcCA9IExPT1BfVklORk9fRlVMTFlfTUFTS0VEX1Ag KGxvb3BfdmluZm8pOw0KPiArDQo+ICsgIC8qIFRyYW5zZm9ybS4gICovDQo+ICsgIHRyZWUgbmV3 X3RlbXAgPSBOVUxMX1RSRUU7DQo+ICsgIGF1dG9fdmVjPHRyZWU+IHZlY19vcHJuZHMwOw0KPiAr ICBhdXRvX3ZlYzx0cmVlPiB2ZWNfb3BybmRzMTsNCj4gKyAgdHJlZSBkZWYwOw0KPiArDQo+ICsg IGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gKyAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RF LCB2ZWN0X2xvY2F0aW9uLCAidHJhbnNmb3JtIGVhcmx5LWV4aXQuXG4iKTsNCj4gKw0KPiArICAv KiBGT1JOT1c6IE11bHRpcGxlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBjb25kaXRpb24u ICAqLw0KPiArICBpZiAoY29kZSA9PSBDT05EX0VYUFIpDQo+ICsgICAgZ2NjX2Fzc2VydCAobmNv cGllcyA9PSAxKTsNCj4gKw0KPiArDQo+ICsgIGdpbXBsZSAqc3RtdCA9IFNUTVRfVklORk9fU1RN VCAoc3RtdF9pbmZvKTsNCj4gKyAgYmFzaWNfYmxvY2sgY29uZF9iYiA9IGdpbXBsZV9iYiAoc3Rt dCk7DQo+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yICBjb25kX2dzaSA9IGdzaV9sYXN0X2JiIChj b25kX2JiKTsNCj4gKw0KPiArICB2ZWN0X2dldF92ZWNfZGVmcyAobG9vcF92aW5mbywgc3RtdF9p bmZvLCBzbHBfbm9kZSwgbmNvcGllcywNCj4gKwkJICAgICBvcC5vcHNbMF0sICZ2ZWNfb3BybmRz MCwgb3Aub3BzWzFdLCAmdmVjX29wcm5kczEsDQo+ICsJCSAgICAgTlVMTCwgTlVMTCk7DQo+ICsN Cj4gKyAgZ2ltcGxlICpuZXdfc3RtdCA9IE5VTEw7DQo+ICsgIHRyZWUgY3N0XzAgPSBidWlsZF96 ZXJvX2NzdCAodHJ1dGhfdHlwZV9mb3IgKHZlY3R5cGVfb3V0KSk7DQo+ICsgIHRyZWUgY3N0X20x ID0gYnVpbGRfbWludXNfb25lX2NzdCAodHJ1dGhfdHlwZV9mb3IgKHZlY3R5cGVfb3V0KSk7DQo+ ICsNCj4gKyAgRk9SX0VBQ0hfVkVDX0VMVCAodmVjX29wcm5kczAsIGksIGRlZjApDQo+ICsgICAg ew0KPiArICAgICAgdHJlZSB2b3BbM10gPSB7IGRlZjAsIHZlY19vcHJuZHMxW2ldLCBOVUxMX1RS RUUgfTsNCj4gKwl7DQo+ICsJICB0cmVlIGNvbmQgPSBtYWtlX3RlbXBfc3NhX25hbWUgKHRydXRo X3R5cGVfZm9yICh2ZWN0eXBlX291dCksDQo+IE5VTEwsICJtYXNrIik7DQo+ICsJICBnaW1wbGUg KnZlY19jbXAgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChjb25kLCBjb2RlLCB2b3BbMF0sDQo+IHZv cFsxXSk7DQo+ICsJICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKGxvb3BfdmluZm8sIHN0 bXRfaW5mbywgdmVjX2NtcCwNCj4gJmNvbmRfZ3NpKTsNCj4gKyAgICAgICAgICBpZiAobWFza2Vk X2xvb3BfcCkNCj4gKwkgICAgew0KPiArCSAgICAgIHRyZWUgbWFzayA9IHZlY3RfZ2V0X2xvb3Bf bWFzayAoZ3NpLCBtYXNrcywgdmVjX251bSAqIG5jb3BpZXMsDQo+ICsJCQkJCSAgICAgIHZlY3R5 cGVfaW4sIGkpOw0KPiArCSAgICAgIGNvbmQgPSBwcmVwYXJlX3ZlY19tYXNrIChsb29wX3ZpbmZv LCBUUkVFX1RZUEUgKG1hc2spLCBtYXNrLA0KPiArCQkJCSAgICAgICBjb25kLCAmY29uZF9nc2kp Ow0KPiArCSAgICB9DQo+ICsNCj4gKwkgIG5ld190ZW1wID0gbWFrZV90ZW1wX3NzYV9uYW1lICh0 cnV0aF90eXBlX2Zvcg0KPiAodmVjdHlwZV9vdXQpLCBOVUxMLCAidmV4aXQiKTsNCj4gKyAgICAg ICAgICBnaW1wbGUgKnZlY19jb25kID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3RlbXAsDQo+ IFZFQ19DT05EX0VYUFIsDQo+ICsJCQkJCQkgIGNvbmQsIGNzdF9tMSwgY3N0XzApOw0KPiArCSAg dmVjdF9maW5pc2hfc3RtdF9nZW5lcmF0aW9uIChsb29wX3ZpbmZvLCBzdG10X2luZm8sIHZlY19j b25kLA0KPiAmY29uZF9nc2kpOw0KPiArCSAgbmV3X3N0bXQgPSB2ZWNfY29uZDsNCj4gKwl9DQo+ ICsNCj4gKyAgICAgIGlmIChzbHBfbm9kZSkNCj4gKwlTTFBfVFJFRV9WRUNfU1RNVFMgKHNscF9u b2RlKS5xdWlja19wdXNoIChuZXdfc3RtdCk7DQo+ICsgICAgICBlbHNlDQo+ICsJU1RNVF9WSU5G T19WRUNfU1RNVFMgKHN0bXRfaW5mbykuc2FmZV9wdXNoIChuZXdfc3RtdCk7DQo+ICsgICAgfQ0K PiArDQo+ICsgIGdjY19hc3NlcnQgKG5ld19zdG10KTsNCj4gKyAgdHJlZSBsaHMgPSBnaW1wbGVf YXNzaWduX2xocyAobmV3X3N0bXQpOw0KPiArDQo+ICsgIHRyZWUgdCA9IGZvbGRfYnVpbGQyIChO RV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgbGhzLA0KPiArCQkJYnVpbGRfemVyb19jc3QgKHRy dXRoX3R5cGVfZm9yICh2ZWN0eXBlX291dCkpKTsNCj4gKyAgdCA9IGNhbm9uaWNhbGl6ZV9jb25k X2V4cHJfY29uZCAodCk7DQo+ICsgIGdpbXBsZV9jb25kX3NldF9jb25kaXRpb25fZnJvbV90cmVl ICgoZ2NvbmQqKXN0bXQsIHQpOw0KPiArICB1cGRhdGVfc3RtdCAoc3RtdCk7DQo+ICsNCj4gKyAg YmFzaWNfYmxvY2sgZGVzdF9iYiA9IEVER0VfU1VDQyAoY29uZF9iYiwgMSktPmRlc3Q7DQo+ICsg IGdpbXBsZV9zdG10X2l0ZXJhdG9yIGRlc3RfZ3NpID0gZ3NpX3N0YXJ0X2JiIChkZXN0X2JiKTsN Cj4gKw0KPiArICBoYXNoX3NldDx0cmVlPiBjaGFpbmVkOw0KPiArICBnaW1wbGVfc3RtdF9pdGVy YXRvciBnc2kyID0gZ3NpX2Zvcl9zdG10IChuZXdfc3RtdCk7DQo+ICsgIGNoYWluZWQuYWRkIChs aHMpOw0KPiArICB0cmVlIHZkZWY7DQo+ICsgIHRyZWUgdnVzZSA9IGdpbXBsZV92dXNlIChuZXdf c3RtdCk7DQo+ICsgIG1vdmVfZWFybHlfZXhpdF9zdG10cyAoJmNoYWluZWQsICZkZXN0X2dzaSwg JmdzaTIsICZ2dXNlLCAmdmRlZik7DQo+ICsNCj4gKyAgaWYgKCFzbHBfbm9kZSkNCj4gKyAgICAq dmVjX3N0bXQgPSBTVE1UX1ZJTkZPX1ZFQ19TVE1UUyAoc3RtdF9pbmZvKVswXTsNCj4gKw0KPiAr ICByZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArDQo+ICsNCj4gIC8qIFRyYW5zZm9ybSBwaGFz ZSBvZiBhIGN5Y2xlIFBISS4gICovDQo+IA0KPiAgYm9vbA0KPiBAQCAtODE4NSw2ICs4NDgxLDE4 NiBAQCB2ZWN0X3RyYW5zZm9ybV9jeWNsZV9waGkgKGxvb3BfdmVjX2luZm8NCj4gbG9vcF92aW5m bywNCj4gICAgcmV0dXJuIHRydWU7DQo+ICB9DQo+IA0KPiArLyogVGhpcyBmdW5jdGlvbiB0cmll cyB0byB2YWxpZGF0ZSB3aGV0aGVyIGFuIGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRpb24NCj4gKyAg IGlzIHBvc3NpYmxlIGZvciB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBzZXF1ZW5jZS4gUmV0dXJu cyBUcnVlIGkNCj4gKyAgIHBvc3NpYmxlLCBvdGhlcndpc2UgRmFsc2UuDQo+ICsNCj4gKyAgIFJl cXVpcmVtZW50czoNCj4gKyAgICAgLSBBbnkgbWVtb3J5IGFjY2VzcyBtdXN0IGJlIHRvIGEgZml4 ZWQgc2l6ZSBidWZmZXIuDQo+ICsgICAgIC0gVGhlcmUgbXVzdCBub3QgYmUgYW55IGxvYWRzIGFu ZCBzdG9yZXMgdG8gdGhlIHNhbWUgb2JqZWN0Lg0KPiArICAgICAtIE11bHRpcGxlIGxvYWRzIGFy ZSBhbGxvd2VkIGFzIGxvbmcgYXMgdGhleSBkb24ndCBhbGlhcy4NCj4gKw0KPiArDQo+ICsgICBB cmd1bWVudHM6DQo+ICsgICAgIC0gTE9PUF9WSU5GTzogbG9vcCBpbmZvcm1hdGlvbiBmb3IgdGhl IGN1cnJlbnQgbG9vcC4NCj4gKyAgICAgLSBDSEFJTjogQ3VycmVudGx5IGRldGVjdGVkIHNlcXVl bmNlIG9mIGluc3RydWN0aW9ucyB0aGF0IGJlbG9uZw0KPiArCSAgICAgIHRvIHRoZSBjdXJyZW50 IGVhcmx5IGJyZWFrLg0KPiArICAgICAtIExPQURTOiBMaXN0IG9mIGFsbCBsb2FkcyBmb3VuZCBk dXJpbmcgdHJhdmVyc2FsLg0KPiArICAgICAtIEJBU0VTOiBMaXN0IG9mIGFsbCBsb2FkIGRhdGFy ZWZlcmVuY2VzIGZvdW5kIGR1cmluZyB0cmF2ZXJzYWwuDQo+ICsgICAgIC0gR1NUTVQ6IEN1cnJl bnQgcG9zaXRpb24gdG8gaW5zcGVjdCBmb3IgdmFsaWRpdHkuICBUaGUgc2VxdWVuY2UNCj4gKwkg ICAgICB3aWxsIGJlIG1vdmVkIHVwd2FyZHMgZnJvbSB0aGlzIHBvaW50LiAgKi8NCj4gKw0KPiAr c3RhdGljIGJvb2wNCj4gK3ZhbGlkYXRlX2Vhcmx5X2V4aXRfc3RtdHMgKGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbywgaGFzaF9zZXQ8dHJlZT4NCj4gKmNoYWluLA0KPiArCQkJICAgdmVjPHRyZWU+ ICpsb2FkcywgdmVjPGRhdGFfcmVmZXJlbmNlICo+ICpiYXNlcywNCj4gKwkJCSAgIGdpbXBsZV9z dG10X2l0ZXJhdG9yICpnc3RtdCkNCj4gK3sNCj4gKyAgaWYgKGdzaV9lbmRfcCAoKmdzdG10KSkN Cj4gKyAgICByZXR1cm4gdHJ1ZTsNCj4gKw0KPiArICBnaW1wbGUgKnN0bXQgPSBnc2lfc3RtdCAo KmdzdG10KTsNCj4gKyAgaWYgKGdpbXBsZV9oYXNfb3BzIChzdG10KSkNCj4gKyAgICB7DQo+ICsg ICAgICB0cmVlIGRlc3QgPSBOVUxMX1RSRUU7DQo+ICsgICAgICAvKiBUcnkgdG8gZmluZCB0aGUg U1NBX05BTUUgYmVpbmcgZGVmaW5lZC4gIEZvciBTdGF0ZW1lbnRzIHdpdGggYW4gTEhTDQo+ICsJ IHVzZSB0aGUgTEhTLCBpZiBub3QsIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBh IGNhbGwgaXMgdGhlDQo+ICsJIHZhbHVlIGJlaW5nIGRlZmluZWQuICBlLmcuIE1BU0tFRF9MT0FE IGV0Yy4gICovDQo+ICsgICAgICBpZiAoZ2ltcGxlX2hhc19saHMgKHN0bXQpKQ0KPiArCXsNCj4g KwkgIGlmIChpc19naW1wbGVfYXNzaWduIChzdG10KSkNCj4gKwkgICAgZGVzdCA9IGdpbXBsZV9h c3NpZ25fbGhzIChzdG10KTsNCj4gKwkgIGVsc2UgaWYgKGNvbnN0IGdjYWxsICpjYWxsID0gZHlu X2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10KSkNCj4gKwkgICAgZGVzdCA9IGdpbXBsZV9jYWxs X2xocyAoY2FsbCk7DQo+ICsJfQ0KPiArICAgICAgZWxzZSBpZiAoY29uc3QgZ2NhbGwgKmNhbGwg PSBkeW5fY2FzdCA8Y29uc3QgZ2NhbGwgKj4gKHN0bXQpKQ0KPiArCWRlc3QgPSBnaW1wbGVfYXJn IChjYWxsLCAwKTsNCj4gKw0KPiArICAgICAgLyogRG9uJ3QgbW92ZSB0aGUgc2NhbGFyIGluc3Ry dWN0aW9ucy4gICovDQo+ICsgICAgICBib29sIG1vdmUNCj4gKwk9IGRlc3QgJiYgKFZFQ1RPUl9U WVBFX1AgKFRSRUVfVFlQRSAoZGVzdCkpDQo+ICsJCSAgIHx8IFBPSU5URVJfVFlQRV9QIChUUkVF X1RZUEUgKGRlc3QpKSk7DQo+ICsNCj4gKyAgICAgIC8qIElmIHdlIGZvdW5kIHRoZSBkZWZpbmlu ZyBzdGF0ZW1lbnQgb2YgYSBzb21ldGhpbmcgdGhhdCdzIHBhcnQgb2YgdGhlDQo+ICsJIGNoYWlu IHRoZW4gZXhwYW5kIHRoZSBjaGFpbiB3aXRoIHRoZSBuZXcgU1NBX1ZBUnMgYmVpbmcgdXNlZC4g ICovDQo+ICsgICAgICBpZiAoY2hhaW4tPmNvbnRhaW5zIChkZXN0KSkNCj4gKwl7DQo+ICsJICBm b3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgZ2ltcGxlX251bV9hcmdzIChzdG10KTsgeCsrKQ0KPiAr CSAgICBpZiAoVFJFRV9DT0RFIChnaW1wbGVfYXJnIChzdG10LCB4KSkgPT0gU1NBX05BTUUpDQo+ ICsJICAgICAgY2hhaW4tPmFkZCAoZ2ltcGxlX2FyZyAoc3RtdCwgeCkpOw0KPiArDQo+ICsJICBp ZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ICsJICAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9U RSwgdmVjdF9sb2NhdGlvbiwNCj4gKwkJCQkiZm91bmQgY2hhaW4gJUciLCBzdG10KTsNCj4gKw0K PiArCSAgbW92ZSA9IGZhbHNlOw0KPiArCX0NCj4gKw0KPiArICAgICAgc3RtdF92ZWNfaW5mbyBz dG10X3ZpbmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQgKHN0bXQpOw0KPiArICAgICAgaWYg KCFzdG10X3ZpbmZvKQ0KPiArCXsNCj4gKwkgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ICsJ ICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0 aW9uLA0KPiArCQkJICAgICAgImVhcmx5IGJyZWFrcyBvbmx5IHN1cHBvcnRlZC4gVW5rbm93biIN Cj4gKwkJCSAgICAgICIgc3RhdGVtZW50OiAlRyIsIHN0bXQpOw0KPiArCSAgIHJldHVybiBmYWxz ZTsNCj4gKwl9DQo+ICsNCj4gKyAgICAgIGF1dG8gZHJfcmVmID0gU1RNVF9WSU5GT19EQVRBX1JF RiAoc3RtdF92aW5mbyk7DQo+ICsgICAgICBpZiAoZHJfcmVmKQ0KPiArCXsNCj4gKwkgICAvKiBX ZSBjdXJyZW5seSBvbmx5IHN1cHBvcnQgc3RhdGljYWxseSBhbGxvY2F0ZWQgb2JqZWN0cyBkdWUg dG8NCj4gKwkgICAgICBub3QgaGF2aW5nIGZpcnN0LWZhdWx0aW5nIGxvYWRzIHN1cHBvcnQgb3Ig cGVlbGluZyBmb3IgYWxpZ25tZW50DQo+ICsJICAgICAgc3VwcG9ydC4gIENvbXB1dGUgdGhlIGlz aXplIG9mIHRoZSByZWZlcmVuY2VkIG9iamVjdCAoaXQgY291bGQgYmUNCj4gKwkgICAgICBkeW5h bWljYWxseSBhbGxvY2F0ZWQpLiAgKi8NCj4gKwkgICB0cmVlIG9iaiA9IERSX0JBU0VfQUREUkVT UyAoZHJfcmVmKTsNCj4gKwkgICBpZiAoIW9iaiB8fCBUUkVFX0NPREUgKG9iaikgIT0gQUREUl9F WFBSKQ0KPiArCSAgICAgew0KPiArCSAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ICsJ CSBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLA0KPiB2ZWN0X2xvY2F0 aW9uLA0KPiArCQkJCSAgImVhcmx5IGJyZWFrcyBvbmx5IHN1cHBvcnRlZCBvbiBzdGF0aWNhbGx5 Ig0KPiArCQkJCSAgIiBhbGxvY2F0ZWQgb2JqZWN0cy5cbiIpOw0KPiArCSAgICAgICByZXR1cm4g ZmFsc2U7DQo+ICsJICAgICB9DQo+ICsNCj4gKwkgICB0cmVlIHJlZm9wID0gVFJFRV9PUEVSQU5E IChvYmosIDApOw0KPiArCSAgIHRyZWUgcmVmYmFzZSA9IGdldF9iYXNlX2FkZHJlc3MgKHJlZm9w KTsNCj4gKwkgICBpZiAoIXJlZmJhc2UgfHwgIURFQ0xfUCAocmVmYmFzZSkNCj4gKwkgICAgICAg fHwgVFJFRV9DT0RFIChERUNMX1NJWkUgKHJlZmJhc2UpKSAhPSBJTlRFR0VSX0NTVCkNCj4gKwkg ICAgIHsNCj4gKwkgICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiArCQkgZHVtcF9wcmlu dGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwNCj4gdmVjdF9sb2NhdGlvbiwNCj4gKwkJ CQkgICJlYXJseSBicmVha3Mgb25seSBzdXBwb3J0ZWQgb24gc3RhdGljYWxseSINCj4gKwkJCQkg ICIgYWxsb2NhdGVkIG9iamVjdHMuXG4iKTsNCj4gKwkgICAgICAgcmV0dXJuIGZhbHNlOw0KPiAr CSAgICAgfQ0KPiArDQo+ICsJICAgaWYgKCFtb3ZlICYmIERSX0lTX1JFQUQgKGRyX3JlZikpDQo+ ICsJICAgICB7DQo+ICsJCWxvYWRzLT5zYWZlX3B1c2ggKGRlc3QpOw0KPiArCQliYXNlcy0+c2Fm ZV9wdXNoIChkcl9yZWYpOw0KPiArCSAgICAgfQ0KPiArCSAgIGVsc2UgaWYgKERSX0lTX1dSSVRF IChkcl9yZWYpKQ0KPiArCSAgICAgew0KPiArCQlmb3IgKGF1dG8gZHIgOiBiYXNlcykNCj4gKwkJ ICBpZiAoc2FtZV9kYXRhX3JlZnNfYmFzZV9vYmplY3RzIChkciwgZHJfcmVmKSkNCj4gKwkJICAg IHJldHVybiBmYWxzZTsNCj4gKwkgICAgIH0NCj4gKwl9DQo+ICsNCj4gKyAgICAgIGlmIChtb3Zl KQ0KPiArCXsNCj4gKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gKwkgICAgZHVtcF9wcmlu dGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4gKwkJICAgICAgICAgICAgICJhbmFs eXppbmcgc3RtdCAlRyIsIHN0bXQpOw0KPiArDQo+ICsJICBmb3IgKHRyZWUgcmVmIDogbG9hZHMp DQo+ICsJICAgIGlmIChzdG10X21heV9jbG9iYmVyX3JlZl9wIChzdG10LCByZWYsIHRydWUpKQ0K PiArCSAgICAgIHsNCj4gKwkgICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gKwkJICBk dW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLA0KPiB2ZWN0X2xvY2F0aW9u LA0KPiArCQkJCSAgICJlYXJseSBicmVha3Mgbm90IHN1cHBvcnRlZCBhcyBtZW1vcnkNCj4gdXNl ZCINCj4gKwkJCQkgICAiIG1heSBhbGlhcy5cbiIpOw0KPiArCSAgICAgICAgcmV0dXJuIGZhbHNl Ow0KPiArCSAgICAgIH0NCj4gKwl9DQo+ICsgICAgfQ0KPiArDQo+ICsgIGdzaV9wcmV2IChnc3Rt dCk7DQo+ICsgIHJldHVybiB2YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRzIChsb29wX3ZpbmZvLCBj aGFpbiwgbG9hZHMsIGJhc2VzLCBnc3RtdCk7DQo+ICt9DQo+ICsNCj4gKy8qIENoZWNrIHRvIHNl ZSBpZiB0aGUgY3VycmVudCBlYXJseSBicmVhayBnaXZlbiBpbiBTVE1UX0lORk8gaXMgdmFsaWQg Zm9yDQo+ICsgICB2ZWN0b3JpemF0aW9uLiAgKi8NCj4gKw0KPiArYm9vbA0KPiArdmVjdG9yaXph YmxlX2Vhcmx5X2V4aXQgKHZlY19pbmZvICp2aW5mbywNCj4gKwkJCXN0bXRfdmVjX2luZm8gc3Rt dF9pbmZvLCBzbHBfdHJlZSAvKiBzbHBfbm9kZSAqLywNCj4gKwkJCXNscF9pbnN0YW5jZSAvKiBz bHBfbm9kZV9pbnN0YW5jZSAqLywNCj4gKwkJCXN0bXRfdmVjdG9yX2Zvcl9jb3N0ICogLyogY29z dF92ZWMgKi8pDQo+ICt7DQo+ICsgIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbyA9IGR5bl9jYXN0 IDxsb29wX3ZlY19pbmZvPiAodmluZm8pOw0KPiArDQo+ICsgIGlmICghbG9vcF92aW5mbw0KPiAr ICAgICAgfHwgIWlzX2EgPGdjb25kICo+IChTVE1UX1ZJTkZPX1NUTVQgKHN0bXRfaW5mbykpKQ0K PiArICAgIHJldHVybiBmYWxzZTsNCj4gKw0KPiArICBpZiAoU1RNVF9WSU5GT19ERUZfVFlQRSAo c3RtdF9pbmZvKSAhPSB2ZWN0X2Vhcmx5X2V4aXRfZGVmKQ0KPiArICAgIHJldHVybiBmYWxzZTsN Cj4gKw0KPiArICB0cmVlIHZlY3R5cGUgPSBTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbyk7 DQo+ICsgIHRyZWUgdHJ1dGhfdHlwZSA9IHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlKTsNCj4gKw0K PiArICBhdXRvIG9wdGFiID0gZGlyZWN0X29wdGFiX2hhbmRsZXIgKGNicmFuY2hfb3B0YWIsIFRZ UEVfTU9ERQ0KPiAodHJ1dGhfdHlwZSkpOw0KPiArICBpZiAob3B0YWIgPT0gQ09ERV9GT1Jfbm90 aGluZykNCj4gKyAgICB7DQo+ICsgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ICsJICBk dW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLA0K PiArCQkJCSAiY2FuJ3QgdmVjdG9yaXplIGVhcmx5IGV4aXQgYmVjYXVzZSB0aGUgIg0KPiArCQkJ CSAidGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBmbGFnIHNldHRpbmcgdmVjdG9yICINCj4gKwkJCQkg ImNvbXBhcmlzb25zLlxuIik7DQo+ICsgICAgICByZXR1cm4gZmFsc2U7DQo+ICsgICAgfQ0KPiAr DQo+ICsgIGhhc2hfc2V0PHRyZWU+IGNoYWluOw0KPiArICBhdXRvX3ZlYzx0cmVlPiBsb2FkczsN Cj4gKyAgYXV0b192ZWM8ZGF0YV9yZWZlcmVuY2UgKj4gYmFzZXM7DQo+ICsNCj4gKyAgZ2ltcGxl ICpzdG10ID0gU1RNVF9WSU5GT19TVE1UIChzdG10X2luZm8pOw0KPiArICBnaW1wbGVfc3RtdF9p dGVyYXRvciBnc2kgPSBnc2lfZm9yX3N0bXQgKHN0bXQpOw0KPiArDQo+ICsgIHJldHVybiB2YWxp ZGF0ZV9lYXJseV9leGl0X3N0bXRzIChsb29wX3ZpbmZvLCAmY2hhaW4sICZsb2FkcywgJmJhc2Vz LA0KPiAmZ3NpKTsNCj4gK30NCj4gKw0KPiAgLyogVmVjdG9yaXplcyBMQyBQSElzLiAgKi8NCj4g DQo+ICBib29sDQo+IEBAIC05OTkzLDEzICsxMDQ2OSwyNCBAQCB2ZWN0b3JpemFibGVfbGl2ZV9v cGVyYXRpb24gKHZlY19pbmZvICp2aW5mbywNCj4gIAkgICBuZXdfdHJlZSA9IGxhbmVfZXh0cmFj dCA8dmVjX2xocycsIC4uLj47DQo+ICAJICAgbGhzJyA9IG5ld190cmVlOyAgKi8NCj4gDQo+ICsg ICAgICAvKiBXaGVuIHZlY3Rvcml6aW5nIGFuIGVhcmx5IGJyZWFrLCBhbnkgbGl2ZSBzdGF0ZW1l bnQgdGhhdCBpcyB1c2VkDQo+ICsJIG91dHNpZGUgb2YgdGhlIGxvb3AgYXJlIGRlYWQuICBUaGUg bG9vcCB3aWxsIG5ldmVyIGdldCB0byB0aGVtLg0KPiArCSBXZSBjb3VsZCBjaGFuZ2UgdGhlIGxp dmVuZXNzIHZhbHVlIGR1cmluZyBhbmFseXNpcyBpbnN0ZWFkIGJ1dCBzaW5jZQ0KPiArCSB0aGUg YmVsb3cgY29kZSBpcyBpbnZhbGlkIGFueXdheSBqdXN0IGlnbm9yZSBpdCBkdXJpbmcgY29kZWdl bi4gICovDQo+ICsgICAgICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8p KQ0KPiArCXJldHVybiB0cnVlOw0KPiArDQo+ICAgICAgICBjbGFzcyBsb29wICpsb29wID0gTE9P UF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsNCj4gLSAgICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIg PSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7DQo+ICsgICAgICBiYXNpY19ibG9jayBleGl0X2Ji ID0gbm9ybWFsX2V4aXQgKGxvb3ApLT5kZXN0Ow0KPiAgICAgICAgZ2NjX2Fzc2VydCAoc2luZ2xl X3ByZWRfcCAoZXhpdF9iYikpOw0KPiANCj4gICAgICAgIHRyZWUgdmVjX2xoc19waGkgPSBjb3B5 X3NzYV9uYW1lICh2ZWNfbGhzKTsNCj4gICAgICAgIGdpbXBsZSAqcGhpID0gY3JlYXRlX3BoaV9u b2RlICh2ZWNfbGhzX3BoaSwgZXhpdF9iYik7DQo+IC0gICAgICBTRVRfUEhJX0FSR19ERUYgKHBo aSwgc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0X2lkeCwgdmVjX2xocyk7DQo+ICsgICAgICAvKiBG b3IgZWFybHkgZXhpdHMgd2UgbmVlZCB0byBjb21wdXRlIHRoZSByaWdodCBleGl0LiAgVGhlIGN1 cnJlbnQNCj4gKwkgYXBwcm9hY2ggcHVudHMgdG8gYSBzY2FsYXIgbG9vcCBpbnN0ZWFkLiAgSWYg d2Ugd2VyZSB0byB2ZWN0b3JpemUNCj4gKwkgdGhlIGV4aXQgY29uZGl0aW9uIGJlbG93IG5lZWRz IHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBkaWZmZXJlbmNlDQo+ICsJIGJldHdlZW4gYSBgYnJl YWtgIGVkZ2UgYW5kIGEgYHJldHVybmAgZWRnZS4gICovDQo+ICsgICAgICBTRVRfUEhJX0FSR19E RUYgKHBoaSwgbm9ybWFsX2V4aXQgKGxvb3ApLT5kZXN0X2lkeCwgdmVjX2xocyk7DQo+IA0KPiAg ICAgICAgZ2ltcGxlX3NlcSBzdG10cyA9IE5VTEw7DQo+ICAgICAgICB0cmVlIG5ld190cmVlOw0K PiBAQCAtMTA0MzgsNyArMTA5MjUsOCBAQCBzY2FsZV9wcm9maWxlX2Zvcl92ZWN0X2xvb3AgKGNs YXNzIGxvb3AgKmxvb3AsDQo+IHVuc2lnbmVkIHZmKQ0KPiAgICAgICAgc2NhbGVfbG9vcF9mcmVx dWVuY2llcyAobG9vcCwgcCk7DQo+ICAgICAgfQ0KPiANCj4gLSAgZWRnZSBleGl0X2UgPSBzaW5n bGVfZXhpdCAobG9vcCk7DQo+ICsgIGVkZ2UgZXhpdF9lID0gbm9ybWFsX2V4aXQgKGxvb3ApOw0K PiArDQo+ICAgIGV4aXRfZS0+cHJvYmFiaWxpdHkgPSBwcm9maWxlX3Byb2JhYmlsaXR5OjphbHdh eXMgKCkgLyAobmV3X2VzdF9uaXRlciArIDEpOw0KPiANCj4gICAgZWRnZSBleGl0X2wgPSBzaW5n bGVfcHJlZF9lZGdlIChsb29wLT5sYXRjaCk7DQo+IEBAIC0xMDc4Nyw3ICsxMTI3NSw3IEBAIHZl Y3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gZ2ltcGxlICps b29wX3ZlY3Rvcml6ZWRfY2FsbCkNCj4gICAgLyogTWFrZSBzdXJlIHRoZXJlIGV4aXN0cyBhIHNp bmdsZS1wcmVkZWNlc3NvciBleGl0IGJiLiAgRG8gdGhpcyBiZWZvcmUNCj4gICAgICAgdmVyc2lv bmluZy4gICAqLw0KPiAgICBlZGdlIGUgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+IC0gIGlmICgh IHNpbmdsZV9wcmVkX3AgKGUtPmRlc3QpKQ0KPiArICBpZiAoZSAmJiAhIHNpbmdsZV9wcmVkX3Ag KGUtPmRlc3QpKQ0KPiAgICAgIHsNCj4gICAgICAgIHNwbGl0X2xvb3BfZXhpdF9lZGdlIChlLCB0 cnVlKTsNCj4gICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gQEAgLTEwODEzLDcgKzEx MzAxLDcgQEAgdmVjdF90cmFuc2Zvcm1fbG9vcCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0K PiBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxsKQ0KPiAgICBpZiAoTE9PUF9WSU5GT19TQ0FM QVJfTE9PUCAobG9vcF92aW5mbykpDQo+ICAgICAgew0KPiAgICAgICAgZSA9IHNpbmdsZV9leGl0 IChMT09QX1ZJTkZPX1NDQUxBUl9MT09QIChsb29wX3ZpbmZvKSk7DQo+IC0gICAgICBpZiAoISBz aW5nbGVfcHJlZF9wIChlLT5kZXN0KSkNCj4gKyAgICAgIGlmIChlICYmICEgc2luZ2xlX3ByZWRf cCAoZS0+ZGVzdCkpDQo+ICAJew0KPiAgCSAgc3BsaXRfbG9vcF9leGl0X2VkZ2UgKGUsIHRydWUp Ow0KPiAgCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiBAQCAtMTExNDYsNyArMTE2MzQsOCBA QCB2ZWN0X3RyYW5zZm9ybV9sb29wIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+IGdpbXBs ZSAqbG9vcF92ZWN0b3JpemVkX2NhbGwpDQo+IA0KPiAgICAvKiBMb29wcyB2ZWN0b3JpemVkIHdp dGggYSB2YXJpYWJsZSBmYWN0b3Igd29uJ3QgYmVuZWZpdCBmcm9tDQo+ICAgICAgIHVucm9sbGlu Zy9wZWVsaW5nLiAgKi8NCj4gLSAgaWYgKCF2Zi5pc19jb25zdGFudCAoKSkNCj4gKyAgaWYgKCF2 Zi5pc19jb25zdGFudCAoKQ0KPiArICAgICAgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChs b29wX3ZpbmZvKSkNCj4gICAgICB7DQo+ICAgICAgICBsb29wLT51bnJvbGwgPSAxOw0KPiAgICAg ICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1z dG10cy5jYyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gaW5kZXgNCj4gNGUwZDc1ZTBkNzU4 NmFkNTdhMzc4NTBkOGE3MGY2MTgyZWNiMTNkMC4uNGY5NDQ2YTVjNjk5Mjg4YmUwOTNjNTU2ZQ0K PiBjNTI3ZTg3Y2Y3ODgzMTcgMTAwNjQ0DQo+IC0tLSBhL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MN Cj4gKysrIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0KPiBAQCAtMzQyLDkgKzM0MiwyOCBAQCB2 ZWN0X3N0bXRfcmVsZXZhbnRfcCAoc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sDQo+IGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbywNCj4gICAgKmxpdmVfcCA9IGZhbHNlOw0KPiANCj4gICAgLyogY29u ZCBzdG10IG90aGVyIHRoYW4gbG9vcCBleGl0IGNvbmQuICAqLw0KPiAtICBpZiAoaXNfY3RybF9z dG10IChzdG10X2luZm8tPnN0bXQpDQo+IC0gICAgICAmJiBTVE1UX1ZJTkZPX1RZUEUgKHN0bXRf aW5mbykgIT0gbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZSkNCj4gLSAgICAqcmVsZXZhbnQg PSB2ZWN0X3VzZWRfaW5fc2NvcGU7DQo+ICsgIGlmIChpc19jdHJsX3N0bXQgKHN0bXRfaW5mby0+ c3RtdCkpDQo+ICsgICAgew0KPiArICAgICAgLyogSWRlYWxseSBFREdFX0xPT1BfRVhJVCB3b3Vs ZCBoYXZlIGJlZW4gc2V0IG9uIHRoZSBleGl0IGVkZ2UsIGJ1dA0KPiArCSBpdCBsb29rcyBsaWtl IGxvb3BfbWFuaXAgZG9lc24ndCBkbyB0aGF0Li4gIFNvIHdlIGhhdmUgdG8gZG8gaXQNCj4gKwkg dGhlIGhhcmQgd2F5LiAgKi8NCj4gKyAgICAgIGJhc2ljX2Jsb2NrIGJiID0gZ2ltcGxlX2JiIChz dG10X2luZm8tPnN0bXQpOw0KPiArICAgICAgYmFzaWNfYmxvY2sgKmJicyA9IExPT1BfVklORk9f QkJTIChsb29wX3ZpbmZvKTsNCj4gKyAgICAgIGVkZ2UgZXhpdCA9IEJSQU5DSF9FREdFIChiYik7 DQo+ICsgICAgICB1bnNpZ25lZCBuYmJzID0gbG9vcC0+bnVtX25vZGVzOw0KPiArICAgICAgYm9v bCBleGl0X2JiID0gdHJ1ZTsNCj4gKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYmJz OyBpKyspDQo+ICsJew0KPiArCSAgaWYgKGV4aXQtPmRlc3QgPT0gYmJzW2ldKQ0KPiArCSAgICB7 DQo+ICsJICAgICAgZXhpdF9iYiA9IGZhbHNlOw0KPiArCSAgICAgIGJyZWFrOw0KPiArCSAgICB9 DQo+ICsJfQ0KPiArDQo+ICsgICAgICBpZiAoZXhpdF9iYikNCj4gKwkqcmVsZXZhbnQgPSB2ZWN0 X3VzZWRfaW5fc2NvcGU7DQo+ICsgICAgfQ0KPiANCj4gICAgLyogY2hhbmdpbmcgbWVtb3J5LiAg Ki8NCj4gICAgaWYgKGdpbXBsZV9jb2RlIChzdG10X2luZm8tPnN0bXQpICE9IEdJTVBMRV9QSEkp DQo+IEBAIC0zNTcsNiArMzc2LDExIEBAIHZlY3Rfc3RtdF9yZWxldmFudF9wIChzdG10X3ZlY19p bmZvIHN0bXRfaW5mbywNCj4gbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiAgCSpyZWxldmFu dCA9IHZlY3RfdXNlZF9pbl9zY29wZTsNCj4gICAgICAgIH0NCj4gDQo+ICsgIGF1dG9fdmVjPGVk Z2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ICsgIGF1dG9fYml0bWFw IGV4aXRfYmJzOw0KPiArICBmb3IgKGVkZ2UgZXhpdCA6IGV4aXRzKQ0KPiArICAgIGJpdG1hcF9z ZXRfYml0IChleGl0X2JicywgZXhpdC0+ZGVzdC0+aW5kZXgpOw0KPiArDQo+ICAgIC8qIHVzZXMg b3V0c2lkZSB0aGUgbG9vcC4gICovDQo+ICAgIEZPUl9FQUNIX1BISV9PUl9TVE1UX0RFRiAoZGVm X3AsIHN0bXRfaW5mby0+c3RtdCwgb3BfaXRlciwNCj4gU1NBX09QX0RFRikNCj4gICAgICB7DQo+ IEBAIC0zNzUsNyArMzk5LDcgQEAgdmVjdF9zdG10X3JlbGV2YW50X3AgKHN0bXRfdmVjX2luZm8g c3RtdF9pbmZvLA0KPiBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ICAJICAgICAgLyogV2Ug ZXhwZWN0IGFsbCBzdWNoIHVzZXMgdG8gYmUgaW4gdGhlIGxvb3AgZXhpdCBwaGlzDQo+ICAJCSAo YmVjYXVzZSBvZiBsb29wIGNsb3NlZCBmb3JtKSAgICovDQo+ICAJICAgICAgZ2NjX2Fzc2VydCAo Z2ltcGxlX2NvZGUgKFVTRV9TVE1UICh1c2VfcCkpID09IEdJTVBMRV9QSEkpOw0KPiAtCSAgICAg IGdjY19hc3NlcnQgKGJiID09IHNpbmdsZV9leGl0IChsb29wKS0+ZGVzdCk7DQo+ICsJICAgICAg Z2NjX2Fzc2VydCAoYml0bWFwX2JpdF9wIChleGl0X2JicywgYmItPmluZGV4KSk7DQo+IA0KPiAg ICAgICAgICAgICAgICAqbGl2ZV9wID0gdHJ1ZTsNCj4gIAkgICAgfQ0KPiBAQCAtMTg0NSw3ICsx ODY5LDcgQEAgY2hlY2tfbG9hZF9zdG9yZV9mb3JfcGFydGlhbF92ZWN0b3JzDQo+IChsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sIHRyZWUgdmVjdHlwZSwNCj4gICAgIE1BU0tfVFlQRSBpcyB0aGUg dHlwZSBvZiBib3RoIG1hc2tzLiAgSWYgbmV3IHN0YXRlbWVudHMgYXJlIG5lZWRlZCwNCj4gICAg IGluc2VydCB0aGVtIGJlZm9yZSBHU0kuICAqLw0KPiANCj4gLXN0YXRpYyB0cmVlDQo+ICt0cmVl DQo+ICBwcmVwYXJlX3ZlY19tYXNrIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIHRyZWUgbWFz a190eXBlLCB0cmVlDQo+IGxvb3BfbWFzaywNCj4gIAkJICB0cmVlIHZlY19tYXNrLCBnaW1wbGVf c3RtdF9pdGVyYXRvciAqZ3NpKQ0KPiAgew0KPiBAQCAtMTExNTgsMTEgKzExMTgyLDE0IEBAIHZl Y3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ICAJCQkgICAgIG5vZGVfaW5zdGFu Y2UsIGNvc3RfdmVjKTsNCj4gICAgICAgIGlmICghcmVzKQ0KPiAgCXJldHVybiByZXM7DQo+IC0g ICB9DQo+ICsgICAgfQ0KPiArICBlbHNlIGlmIChpc19jdHJsX3N0bXQgKHN0bXRfaW5mby0+c3Rt dCkpDQo+ICsgICAgU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9pbmZvKSA9IHZlY3RfZWFybHlf ZXhpdF9kZWY7DQo+IA0KPiAgICBzd2l0Y2ggKFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5m bykpDQo+ICAgICAgew0KPiAgICAgICAgY2FzZSB2ZWN0X2ludGVybmFsX2RlZjoNCj4gKyAgICAg IGNhc2UgdmVjdF9lYXJseV9leGl0X2RlZjoNCj4gICAgICAgICAgYnJlYWs7DQo+IA0KPiAgICAg ICAgY2FzZSB2ZWN0X3JlZHVjdGlvbl9kZWY6DQo+IEBAIC0xMTE5NSw2ICsxMTIyMiw3IEBAIHZl Y3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ICAgICAgew0KPiAgICAgICAgZ2Nh bGwgKmNhbGwgPSBkeW5fY2FzdCA8Z2NhbGwgKj4gKHN0bXRfaW5mby0+c3RtdCk7DQo+ICAgICAg ICBnY2NfYXNzZXJ0IChTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbykNCj4gKwkJICB8fCBn aW1wbGVfY29kZSAoc3RtdF9pbmZvLT5zdG10KSA9PSBHSU1QTEVfQ09ORA0KPiAgCQkgIHx8IChj YWxsICYmIGdpbXBsZV9jYWxsX2xocyAoY2FsbCkgPT0gTlVMTF9UUkVFKSk7DQo+ICAgICAgICAq bmVlZF90b192ZWN0b3JpemUgPSB0cnVlOw0KPiAgICAgIH0NCj4gQEAgLTExMjM3LDcgKzExMjY1 LDkgQEAgdmVjdF9hbmFseXplX3N0bXQgKHZlY19pbmZvICp2aW5mbywNCj4gIAkgIHx8IHZlY3Rv cml6YWJsZV9sY19waGkgKGFzX2EgPGxvb3BfdmVjX2luZm8+ICh2aW5mbyksDQo+ICAJCQkJICBz dG10X2luZm8sIE5VTEwsIG5vZGUpDQo+ICAJICB8fCB2ZWN0b3JpemFibGVfcmVjdXJyIChhc19h IDxsb29wX3ZlY19pbmZvPiAodmluZm8pLA0KPiAtCQkJCSAgIHN0bXRfaW5mbywgTlVMTCwgbm9k ZSwgY29zdF92ZWMpKTsNCj4gKwkJCQkgICBzdG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVj KQ0KPiArCSAgfHwgdmVjdG9yaXphYmxlX2Vhcmx5X2V4aXQgKHZpbmZvLCBzdG10X2luZm8sDQo+ ICsJCQkJICAgICAgbm9kZSwgbm9kZV9pbnN0YW5jZSwgY29zdF92ZWMpKTsNCj4gICAgZWxzZQ0K PiAgICAgIHsNCj4gICAgICAgIGlmIChiYl92aW5mbykNCj4gQEAgLTExMjYwLDcgKzExMjkwLDEw IEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ICAJCQkJCSBOVUxMLCBO VUxMLCBub2RlLCBjb3N0X3ZlYykNCj4gIAkgICAgICB8fCB2ZWN0b3JpemFibGVfY29tcGFyaXNv biAodmluZm8sIHN0bXRfaW5mbywgTlVMTCwgTlVMTCwgbm9kZSwNCj4gIAkJCQkJICBjb3N0X3Zl YykNCj4gLQkgICAgICB8fCB2ZWN0b3JpemFibGVfcGhpICh2aW5mbywgc3RtdF9pbmZvLCBOVUxM LCBub2RlLCBjb3N0X3ZlYykpOw0KPiArCSAgICAgIHx8IHZlY3Rvcml6YWJsZV9waGkgKHZpbmZv LCBzdG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVjKQ0KPiArCSAgICAgIHx8IHZlY3Rvcml6 YWJsZV9lYXJseV9leGl0ICh2aW5mbywgc3RtdF9pbmZvLCBub2RlLA0KPiArCQkJCQkgIG5vZGVf aW5zdGFuY2UsIGNvc3RfdmVjKSk7DQo+ICsNCj4gICAgICB9DQo+IA0KPiAgICBpZiAobm9kZSkN Cj4gQEAgLTExNDE4LDYgKzExNDUxLDEyIEBAIHZlY3RfdHJhbnNmb3JtX3N0bXQgKHZlY19pbmZv ICp2aW5mbywNCj4gICAgICAgIGdjY19hc3NlcnQgKGRvbmUpOw0KPiAgICAgICAgYnJlYWs7DQo+ IA0KPiArICAgIGNhc2UgbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZToNCj4gKyAgICAgIGRv bmUgPSB2ZWN0X3RyYW5zZm9ybV9lYXJseV9icmVhayAoYXNfYSA8bG9vcF92ZWNfaW5mbz4gKHZp bmZvKSwNCj4gc3RtdF9pbmZvLA0KPiArCQkJCSAgICAgICAgIGdzaSwgJnZlY19zdG10LCBzbHBf bm9kZSk7DQo+ICsgICAgICBnY2NfYXNzZXJ0IChkb25lKTsNCj4gKyAgICAgIGJyZWFrOw0KPiAr DQo+ICAgICAgZGVmYXVsdDoNCj4gICAgICAgIGlmICghU1RNVF9WSU5GT19MSVZFX1AgKHN0bXRf aW5mbykpDQo+ICAJew0KPiBAQCAtMTE4MTYsNiArMTE4NTUsOSBAQCB2ZWN0X2lzX3NpbXBsZV91 c2UgKHRyZWUgb3BlcmFuZCwgdmVjX2luZm8NCj4gKnZpbmZvLCBlbnVtIHZlY3RfZGVmX3R5cGUg KmR0LA0KPiAgCWNhc2UgdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNlOg0KPiAgCSAgZHVtcF9w cmludGYgKE1TR19OT1RFLCAiZmlyc3Qgb3JkZXIgcmVjdXJyZW5jZVxuIik7DQo+ICAJICBicmVh azsNCj4gKwljYXNlIHZlY3RfZWFybHlfZXhpdF9kZWY6DQo+ICsJICBkdW1wX3ByaW50ZiAoTVNH X05PVEUsICJlYXJseSBleGl0XG4iKTsNCj4gKwkgIGJyZWFrOw0KPiAgCWNhc2UgdmVjdF91bmtu b3duX2RlZl90eXBlOg0KPiAgCSAgZHVtcF9wcmludGYgKE1TR19OT1RFLCAidW5rbm93blxuIik7 DQo+ICAJICBicmVhazsNCj4gQEAgLTEyNDg2LDYgKzEyNTI4LDggQEAgdmVjdF9nZXRfdmVjdG9y X3R5cGVzX2Zvcl9zdG10ICh2ZWNfaW5mbw0KPiAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9p bmZvLA0KPiAgICAqbnVuaXRzX3ZlY3R5cGVfb3V0ID0gTlVMTF9UUkVFOw0KPiANCj4gICAgaWYg KGdpbXBsZV9nZXRfbGhzIChzdG10KSA9PSBOVUxMX1RSRUUNCj4gKyAgICAgIC8qIEFsbG93IHZl Y3RvciBjb25kaXRpb25hbHMgdGhyb3VnaCBoZXJlLiAgKi8NCj4gKyAgICAgICYmICFpc19jdHJs X3N0bXQgKHN0bXQpDQo+ICAgICAgICAvKiBNQVNLX1NUT1JFIGhhcyBubyBsaHMsIGJ1dCBpcyBv ay4gICovDQo+ICAgICAgICAmJiAhZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoc3RtdCwgSUZOX01B U0tfU1RPUkUpKQ0KPiAgICAgIHsNCj4gQEAgLTEyNTAyLDcgKzEyNTQ2LDcgQEAgdmVjdF9nZXRf dmVjdG9yX3R5cGVzX2Zvcl9zdG10ICh2ZWNfaW5mbw0KPiAqdmluZm8sIHN0bXRfdmVjX2luZm8g c3RtdF9pbmZvLA0KPiAgCX0NCj4gDQo+ICAgICAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVy ZV9hdCAoc3RtdCwNCj4gLQkJCQkgICAgICJub3QgdmVjdG9yaXplZDogaXJyZWd1bGFyIHN0bXQu JUciLCBzdG10KTsNCj4gKwkJCQkgICAgICJub3QgdmVjdG9yaXplZDogaXJyZWd1bGFyIHN0bXQ6 ICVHIiwgc3RtdCk7DQo+ICAgICAgfQ0KPiANCj4gICAgdHJlZSB2ZWN0eXBlOw0KPiBAQCAtMTI1 MzEsNiArMTI1NzUsOCBAQCB2ZWN0X2dldF92ZWN0b3JfdHlwZXNfZm9yX3N0bXQgKHZlY19pbmZv DQo+ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sDQo+ICAJc2NhbGFyX3R5cGUgPSBU UkVFX1RZUEUgKERSX1JFRiAoZHIpKTsNCj4gICAgICAgIGVsc2UgaWYgKGdpbXBsZV9jYWxsX2lu dGVybmFsX3AgKHN0bXQsIElGTl9NQVNLX1NUT1JFKSkNCj4gIAlzY2FsYXJfdHlwZSA9IFRSRUVf VFlQRSAoZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAzKSk7DQo+ICsgICAgICBlbHNlIGlmIChpc19j dHJsX3N0bXQgKHN0bXQpKQ0KPiArCXNjYWxhcl90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfY29u ZF9yaHMgKHN0bXQpKTsNCj4gICAgICAgIGVsc2UNCj4gIAlzY2FsYXJfdHlwZSA9IFRSRUVfVFlQ RSAoZ2ltcGxlX2dldF9saHMgKHN0bXQpKTsNCj4gDQo+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12 ZWN0b3JpemVyLmggYi9nY2MvdHJlZS12ZWN0b3JpemVyLmgNCj4gaW5kZXgNCj4gMDE2OTYxZGE4 NTEwY2E3ZGQyZDA3ZTcxNmNiZTM1NjIzZWQyZDlhNS4uZWRiYjcyMjhkM2FhZTI5YjZmNTFmZGFi DQo+IDI4NGY0OWFjNTdjNjYxMmQgMTAwNjQ0DQo+IC0tLSBhL2djYy90cmVlLXZlY3Rvcml6ZXIu aA0KPiArKysgYi9nY2MvdHJlZS12ZWN0b3JpemVyLmgNCj4gQEAgLTYzLDYgKzYzLDcgQEAgZW51 bSB2ZWN0X2RlZl90eXBlIHsNCj4gICAgdmVjdF9pbnRlcm5hbF9kZWYsDQo+ICAgIHZlY3RfaW5k dWN0aW9uX2RlZiwNCj4gICAgdmVjdF9yZWR1Y3Rpb25fZGVmLA0KPiArICB2ZWN0X2Vhcmx5X2V4 aXRfZGVmLA0KPiAgICB2ZWN0X2RvdWJsZV9yZWR1Y3Rpb25fZGVmLA0KPiAgICB2ZWN0X25lc3Rl ZF9jeWNsZSwNCj4gICAgdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNlLA0KPiBAQCAtODM2LDYg KzgzNywxMCBAQCBwdWJsaWM6DQo+ICAgICAgIHdlIG5lZWQgdG8gcGVlbCBvZmYgaXRlcmF0aW9u cyBhdCB0aGUgZW5kIHRvIGZvcm0gYW4gZXBpbG9ndWUgbG9vcC4gICovDQo+ICAgIGJvb2wgcGVl bGluZ19mb3Jfbml0ZXI7DQo+IA0KPiArICAvKiBXaGVuIHRoZSBsb29wIGhhcyBlYXJseSBicmVh a3MgdGhhdCB3ZSBjYW4gdmVjdG9yaXplIHdlIG5lZWQgdG8gcGVlbA0KPiArICAgICB0aGUgbG9v cCBmb3IgdGhlIGJyZWFrIGZpbmRpbmcgbG9vcC4gICovDQo+ICsgIGJvb2wgZWFybHlfYnJlYWtz Ow0KPiArDQo+ICAgIC8qIFRydWUgaWYgdGhlcmUgYXJlIG5vIGxvb3AgY2FycmllZCBkYXRhIGRl cGVuZGVuY2llcyBpbiB0aGUgbG9vcC4NCj4gICAgICAgSWYgbG9vcC0+c2FmZWxlbiA8PSAxLCB0 aGVuIHRoaXMgaXMgYWx3YXlzIHRydWUsIGVpdGhlciB0aGUgbG9vcA0KPiAgICAgICBkaWRuJ3Qg aGF2ZSBhbnkgbG9vcCBjYXJyaWVkIGRhdGEgZGVwZW5kZW5jaWVzLCBvciB0aGUgbG9vcCBpcyBi ZWluZw0KPiBAQCAtOTIxLDYgKzkyNiw3IEBAIHB1YmxpYzoNCj4gICNkZWZpbmUgTE9PUF9WSU5G T19SRURVQ1RJT05fQ0hBSU5TKEwpICAgICAoTCktPnJlZHVjdGlvbl9jaGFpbnMNCj4gICNkZWZp bmUgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTKEwpICAgICAoTCktPnBlZWxpbmdfZm9yX2dh cHMNCj4gICNkZWZpbmUgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9OSVRFUihMKSAgICAoTCktPnBl ZWxpbmdfZm9yX25pdGVyDQo+ICsjZGVmaW5lIExPT1BfVklORk9fRUFSTFlfQlJFQUtTKEwpICAg ICAgICAgKEwpLT5lYXJseV9icmVha3MNCj4gICNkZWZpbmUgTE9PUF9WSU5GT19OT19EQVRBX0RF UEVOREVOQ0lFUyhMKSAoTCktDQo+ID5ub19kYXRhX2RlcGVuZGVuY2llcw0KPiAgI2RlZmluZSBM T09QX1ZJTkZPX1NDQUxBUl9MT09QKEwpCSAgIChMKS0+c2NhbGFyX2xvb3ANCj4gICNkZWZpbmUg TE9PUF9WSU5GT19TQ0FMQVJfTE9PUF9TQ0FMSU5HKEwpICAoTCktPnNjYWxhcl9sb29wX3NjYWxp bmcNCj4gQEAgLTk3MCw3ICs5NzYsNyBAQCBwdWJsaWM6DQo+ICB0eXBlZGVmIG9wdF9wb2ludGVy X3dyYXBwZXIgPGxvb3BfdmVjX2luZm8+IG9wdF9sb29wX3ZlY19pbmZvOw0KPiANCj4gIHN0YXRp YyBpbmxpbmUgbG9vcF92ZWNfaW5mbw0KPiAtbG9vcF92ZWNfaW5mb19mb3JfbG9vcCAoY2xhc3Mg bG9vcCAqbG9vcCkNCj4gK2xvb3BfdmVjX2luZm9fZm9yX2xvb3AgKGNvbnN0IGNsYXNzIGxvb3Ag Kmxvb3ApDQo+ICB7DQo+ICAgIHJldHVybiAobG9vcF92ZWNfaW5mbykgbG9vcC0+YXV4Ow0KPiAg fQ0KPiBAQCAtMjEwNyw3ICsyMTEzLDcgQEAgY2xhc3MgYXV0b19wdXJnZV92ZWN0X2xvY2F0aW9u DQo+ICAgICBpbiB0cmVlLXZlY3QtbG9vcC1tYW5pcC5jYy4gICovDQo+ICBleHRlcm4gdm9pZCB2 ZWN0X3NldF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9vcCAqLCBsb29wX3ZlY19pbmZvLA0KPiAg CQkJCSAgICAgdHJlZSwgdHJlZSwgdHJlZSwgYm9vbCk7DQo+IC1leHRlcm4gYm9vbCBzbHBlZWxf Y2FuX2R1cGxpY2F0ZV9sb29wX3AgKGNvbnN0IGNsYXNzIGxvb3AgKiwgY29uc3RfZWRnZSk7DQo+ ICtleHRlcm4gYm9vbCBzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGNvbnN0IGxvb3BfdmVj X2luZm8sDQo+IGNvbnN0X2VkZ2UpOw0KPiAgY2xhc3MgbG9vcCAqc2xwZWVsX3RyZWVfZHVwbGlj YXRlX2xvb3BfdG9fZWRnZV9jZmcgKGNsYXNzIGxvb3AgKiwNCj4gIAkJCQkJCSAgICAgY2xhc3Mg bG9vcCAqLCBlZGdlKTsNCj4gIGNsYXNzIGxvb3AgKnZlY3RfbG9vcF92ZXJzaW9uaW5nIChsb29w X3ZlY19pbmZvLCBnaW1wbGUgKik7DQo+IEBAIC0yMzA2LDYgKzIzMTIsNyBAQCBzdHJ1Y3QgdmVj dF9sb29wX2Zvcm1faW5mbw0KPiAgICB0cmVlIG51bWJlcl9vZl9pdGVyYXRpb25zOw0KPiAgICB0 cmVlIG51bWJlcl9vZl9pdGVyYXRpb25zbTE7DQo+ICAgIHRyZWUgYXNzdW1wdGlvbnM7DQo+ICsg IHZlYzxnY29uZCAqPiBjb25kczsNCj4gICAgZ2NvbmQgKmxvb3BfY29uZDsNCj4gICAgZ2NvbmQg KmlubmVyX2xvb3BfY29uZDsNCj4gIH07DQo+IEBAIC0yMzI2LDYgKzIzMzMsOSBAQCBleHRlcm4g Ym9vbCB2ZWN0b3JpemFibGVfaW5kdWN0aW9uIChsb29wX3ZlY19pbmZvLA0KPiBzdG10X3ZlY19p bmZvLA0KPiAgZXh0ZXJuIGJvb2wgdmVjdF90cmFuc2Zvcm1fcmVkdWN0aW9uIChsb29wX3ZlY19p bmZvLCBzdG10X3ZlY19pbmZvLA0KPiAgCQkJCSAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yICos DQo+ICAJCQkJICAgICAgZ2ltcGxlICoqLCBzbHBfdHJlZSk7DQo+ICtleHRlcm4gYm9vbCB2ZWN0 X3RyYW5zZm9ybV9lYXJseV9icmVhayAobG9vcF92ZWNfaW5mbywgc3RtdF92ZWNfaW5mbywNCj4g KwkJCQkJZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwNCj4gKwkJCQkJZ2ltcGxlICoqLCBzbHBfdHJl ZSk7DQo+ICBleHRlcm4gYm9vbCB2ZWN0X3RyYW5zZm9ybV9jeWNsZV9waGkgKGxvb3BfdmVjX2lu Zm8sIHN0bXRfdmVjX2luZm8sDQo+ICAJCQkJICAgICAgZ2ltcGxlICoqLA0KPiAgCQkJCSAgICAg IHNscF90cmVlLCBzbHBfaW5zdGFuY2UpOw0KPiBAQCAtMjMzNSw2ICsyMzQ1LDExIEBAIGV4dGVy biBib29sIHZlY3Rvcml6YWJsZV9waGkgKHZlY19pbmZvICosDQo+IHN0bXRfdmVjX2luZm8sIGdp bXBsZSAqKiwgc2xwX3RyZWUsDQo+ICAJCQkgICAgICBzdG10X3ZlY3Rvcl9mb3JfY29zdCAqKTsN Cj4gIGV4dGVybiBib29sIHZlY3Rvcml6YWJsZV9yZWN1cnIgKGxvb3BfdmVjX2luZm8sIHN0bXRf dmVjX2luZm8sDQo+ICAJCQkJICBnaW1wbGUgKiosIHNscF90cmVlLCBzdG10X3ZlY3Rvcl9mb3Jf Y29zdA0KPiAqKTsNCj4gK2V4dGVybiBib29sIHZlY3Rvcml6YWJsZV9lYXJseV9leGl0ICh2ZWNf aW5mbyAqLCBzdG10X3ZlY19pbmZvLA0KPiArCQkJCSAgICAgc2xwX3RyZWUsIHNscF9pbnN0YW5j ZSwNCj4gKwkJCQkgICAgIHN0bXRfdmVjdG9yX2Zvcl9jb3N0ICopOw0KPiArZXh0ZXJuIHRyZWUg cHJlcGFyZV92ZWNfbWFzayAobG9vcF92ZWNfaW5mbywgdHJlZSwgdHJlZSwNCj4gKwkJCSAgICAg IHRyZWUsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICopOw0KPiAgZXh0ZXJuIGJvb2wgdmVjdF9lbXVs YXRlZF92ZWN0b3JfcCAodHJlZSk7DQo+ICBleHRlcm4gYm9vbCB2ZWN0X2Nhbl92ZWN0b3JpemVf d2l0aG91dF9zaW1kX3AgKHRyZWVfY29kZSk7DQo+ICBleHRlcm4gYm9vbCB2ZWN0X2Nhbl92ZWN0 b3JpemVfd2l0aG91dF9zaW1kX3AgKGNvZGVfaGVscGVyKTsNCj4gZGlmZiAtLWdpdCBhL2djYy90 cmVlLXZlY3Rvcml6ZXIuY2MgYi9nY2MvdHJlZS12ZWN0b3JpemVyLmNjDQo+IGluZGV4DQo+IDZl YzQ5NTExZDc0YmQyZTBlNWRkNTE4MjNhNmM0MTE4MGYwODcxNmMuLjRhYTQ2YzdjMGQ4MjM1ZDNi NzgzY2U5MzANCj4gZTVkZjM0ODBlMWIzZWY5IDEwMDY0NA0KPiAtLS0gYS9nY2MvdHJlZS12ZWN0 b3JpemVyLmNjDQo+ICsrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuY2MNCj4gQEAgLTEzODIsNyAr MTM4Miw5IEBAIHBhc3NfdmVjdG9yaXplOjpleGVjdXRlIChmdW5jdGlvbiAqZnVuKQ0KPiAgCSBw cmVkaWNhdGVzIHRoYXQgbmVlZCB0byBiZSBzaGFyZWQgZm9yIG9wdGltYWwgcHJlZGljYXRlIHVz YWdlLg0KPiAgCSBIb3dldmVyIHJlYXNzb2Mgd2lsbCByZS1vcmRlciB0aGVtIGFuZCBwcmV2ZW50 IENTRSBmcm9tIHdvcmtpbmcNCj4gIAkgYXMgaXQgc2hvdWxkLiAgQ1NFIG9ubHkgdGhlIGxvb3Ag Ym9keSwgbm90IHRoZSBlbnRyeS4gICovDQo+IC0gICAgICBiaXRtYXBfc2V0X2JpdCAoZXhpdF9i YnMsIHNpbmdsZV9leGl0IChsb29wKS0+ZGVzdC0+aW5kZXgpOw0KPiArICAgICAgYXV0b192ZWM8 ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gKyAgICAgIGZvciAo ZWRnZSBleGl0IDogZXhpdHMpDQo+ICsJYml0bWFwX3NldF9iaXQgKGV4aXRfYmJzLCBleGl0LT5k ZXN0LT5pbmRleCk7DQo+IA0KPiAgICAgICAgZWRnZSBlbnRyeSA9IEVER0VfUFJFRCAobG9vcF9w cmVoZWFkZXJfZWRnZSAobG9vcCktPnNyYywgMCk7DQo+ICAgICAgICBkb19ycG9fdm4gKGZ1biwg ZW50cnksIGV4aXRfYmJzKTsNCj4gDQo+IA0KPiANCj4gDQo+IC0tDQo=