From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2060.outbound.protection.outlook.com [40.107.105.60]) by sourceware.org (Postfix) with ESMTPS id B6AD93858D1E for ; Wed, 30 Nov 2022 13:54:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B6AD93858D1E 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=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nlWL50AZ2wSHZe3hTNduMZ4Gh8Kps4F7mY92XG0fIjcRvX3AzDNE6yIKytGRI7gZmvFKEZCSn/gXPWifC/mEmqAPdgx11iNVMPCZsyfdMysJ/xEjsy4lXt+HgQVDjQEy/LCgJovT9LS3Sd7t2lDZYJ/6022lvEYtp5Vb/YK9nyZCsXB8M/Vrvb1wlc6V/+MOrowLsFJOUJkz0qxF0Nd9AQhkRIg95wloghIHXsA51b5vRFa809bj+SUFVrOQzPkHMo83leG9TZwdNKRynqXPbcJq0ss7trVbOYi3hQJjzK9YYrKM3ECjJW/VWgpVCrnK4YIeFma8W+gD9jCBaOfz2A== 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=4cy010Zd4T3DwlB3cEoZLVAt1Vk3BF13W/jmDqSOors=; b=h5W5u1GKphM7JiqvjhyRKUm9yfo9GaU372huGUdpTVqH3Hclz2LrKluV3KiZuv8SOOPmpMrSDDIHdqwL7XFbquzA1PEfRWCvnNd+guMghCH5T/kf2TzWQRmPhEXyyJshj8VwhnzGTsX3bPA4aIiwjFIeGVB/sFchL2DfHq8uHL3FJfTiItJwdUAQ0Pso7b1Tuww6D6UijVF32CEuOgjaME/ioPOQXLQ+wAWnRIC8gZv4iqo/6c76g3COpm0VUy2QD61UGnbXzR76UJS/0lWyco2shua7YgefirIUfL2HCJWB4TUmiDnANFRaya6P2wXwDWvctxO6SyMNCMyXIKU+gw== 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=4cy010Zd4T3DwlB3cEoZLVAt1Vk3BF13W/jmDqSOors=; b=NskwPrpY5gI3j+atVXDkXqJoL87AIkuYGM4mOa7107x+tbK0m8PCV3lEXJbyWos5eaa8Kb31st/BHgfxZpUtGMn4C96hIaot2mcObLnf4kWEe6TCYKLfUbKQWHuEDkwxW2YCF6r8HvjhUFePJFuM/6ir2LslKDqaziS3pyCY7H0= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by DU0PR08MB8206.eurprd08.prod.outlook.com (2603:10a6:10:3b3::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.8; Wed, 30 Nov 2022 13:54:28 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%5]) with mapi id 15.20.5880.008; Wed, 30 Nov 2022 13:54:28 +0000 From: Tamar Christina To: Tamar Christina , Richard Biener , Manolis Tsamis CC: "gcc-patches@gcc.gnu.org" , Philipp Tomsich , "jiangning.liu@amperecomputing.com" , Christoph Muellner Subject: RE: [PATCH v2] Add pattern to convert vector shift + bitwise and + multiply to vector compare in some cases. Thread-Topic: [PATCH v2] Add pattern to convert vector shift + bitwise and + multiply to vector compare in some cases. Thread-Index: AQHZA9omtSuGJf4EJ0mOVwvQE3HgmK5XF0qAgAAU1oCAAEjUgIAAAGYggAAIQFA= Date: Wed, 30 Nov 2022 13:54:28 +0000 Message-ID: References: <20221129100446.3875697-1-manolis.tsamis@vrull.eu> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: BE445FA88301414A8B7DA71F1A975AA6.0 x-checkrecipientchecked: true authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|DU0PR08MB8206:EE_ x-ms-office365-filtering-correlation-id: 36003b54-716e-44d3-78d7-08dad2da65e8 nodisclaimer: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 8lqtpxUneo21f4PFQH7XLfli3gDcoOMf4nUHK+MfQKVZK83FfjyQQksH9LmQN/aSnxZ1gBABw4WOgql5D5htHiVGznSAd1jOH1VkoLoXfHiKbPnhe7SFcEnCvxp1oXxXeiBwHJk1D0LxCbF3oOq58z2AX24OLzJmKlHCTDXxyoY7hOhIIZlfN7UDRElP4P5RkIONExkizSTxfyliS2IS0xQD4lC5Qg1p5kOb4Yrxo8laAgFiW1sVHYeE2Tp7zbl0mIY9CwKwG2ajeP76QW0yBn/p0eo/YyRwP5VgObC8El5Q+iwGZqlMxdJDiKE9BdccqE7VWjOhh4FLmUoQpYQnqLEtWzOsEib0xNHseyoRYd47DdSw0svo3pZCLE3gxs0bBI/isTP8C6aS+4d77qO9jeBsxKD7qRurPqgBjrIbHXoNGshc58SsjrS2v5WCHgTMQG64MCkNYtaHG6pY6FDMdKM1D4NkDzNADa8/npm8ArAzvqlHqU6tXn1z6RLmNfDJ43ySijZGIXM+RMyms8FJ9x8g2K6GMgefwStx2pXBUnhtrw33LoS/wVfcjk0jLPLR/xPThMu3NgYUIFx5HfXcEycjP20B5tn8EJZYVseWVVO2bfstbwB2AUiw42ZNO9HGdbNyfsCGLhTfNOg3fRwJebBEtgB9OVtaH8+1UZSsNREowJU4qKLyOYS+t0jBsBqO+jsbC4g7ux1N1mcr+ZVzH1i7FsbL2M1T32ns+/7UHW0= x-forefront-antispam-report: 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)(346002)(396003)(376002)(39860400002)(366004)(136003)(451199015)(30864003)(5660300002)(33656002)(9686003)(316002)(76116006)(55016003)(2940100002)(8936002)(110136005)(41300700001)(54906003)(52536014)(8676002)(186003)(66446008)(66476007)(4326008)(66946007)(122000001)(38070700005)(66556008)(38100700002)(64756008)(26005)(2906002)(6506007)(86362001)(7696005)(84970400001)(71200400001)(83380400001)(478600001)(53546011);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VFpwdmZ1WmJ2TXBnZUQ5V0dXZkJNTEpvZC9BYVhtL1BVeUkzL1ZaZ0ZQcVJx?= =?utf-8?B?dEtPaGVVeW1jams5SCs1UWV6L1FmS1UzWkJaWGdUMnQ4bmYyZHR0aCtDbkN1?= =?utf-8?B?Qnk1QVptOTkyaGpHWUd3UGxBandHK0VzMzh5aWd1L2FZNzJqTWhxd1hnbldV?= =?utf-8?B?SWtrak02N1NRUlVFS0dlRGR3NXB3QTBodUpQYjN2YkFkRDZLNWxVTjJIa05B?= =?utf-8?B?NlR6aHhkVWpocDV3RHhNbmkyR1lZbDc3Y2VINm8wQkNweXl6dEhPUG5vVkxl?= =?utf-8?B?eTZiUXNiN29TSkl1N2FkMVNWTm1qTFhjYklxNmU5L1o3bEdFVWg1RzZxRHhF?= =?utf-8?B?c2YrZUdLbW1oSytnNlRQNy95aFZCWFNLbUpTN1pRWllaZFE5a2tLNG1TUmR3?= =?utf-8?B?K0s3RmxCT25Sdmh1U3Z4UEM2YUxxOFlvSUMrZFVJMlZ1R0p0bmlYbm5BR05Y?= =?utf-8?B?Vmxtc0VzZnUwWjVkMjJNbFk4bFBJUzl4YWgrOVpWYVVPa2FVbmlJZ3M2OHdU?= =?utf-8?B?aW1lTnVPOHE3SkVWbVIvWU4yZTBmTkJQdzhNbERlNzk0UFZjNkpXTi96c21R?= =?utf-8?B?Ymx2b0VBNFVydXN6WW91OHdhMTBDS1dtNFJreXpzanJ5WHI3c0p4elA1b0J3?= =?utf-8?B?QlJsWTFiSmlHUTNlUElYSXdzbWVhOUZneGpMS1hKb0ZTZnYyTHR4aXkrR3Js?= =?utf-8?B?cEZ0dStNZnBBMTU0MDQ5K3phT3YzRmhRT2dkbWxiSkZ0Q09OdWpqWGs0d3J0?= =?utf-8?B?bDhWMkMzdHFDcTgxZzRwNXpCUkxCdkNraXZma05xZm82azRCUytrY0dXdTFJ?= =?utf-8?B?SkxGNGt0YXp2YWtEcG5xMkRZNGVGRDRHUFQ1SGIzUjE3NHcyNnY0TTc1Rndh?= =?utf-8?B?SEd0b1RQNzAwaFlHcFJEdVRlZmxBejlRanROOHVYZEhaNUh6aFl4OW1XbHRt?= =?utf-8?B?MEpwV3F3eWpUOUxCREpXYW95Q2thZGxlSHVUOE04NHJVQUp0OXg5cnd2NDRu?= =?utf-8?B?UlFnRkFBV3hXT29VRG10anp6WDNOZkMxNWhJWkI0WUdyajc3a28rZERBaHZu?= =?utf-8?B?R2RXb0hVWGxyTmM3VlpEZ0Eya05GcmJ0cTlrT3ROS200VE53Rk11ZjJET3Jl?= =?utf-8?B?R3ZrL1Z0ZDluTURBa1hWbm9HbXFmc1pzUDdCanp0cm9pT0hFVWtVUmRNTWY3?= =?utf-8?B?dldLRU1mcGx0Ym43VlIvbG5Bb0xUVVVlSm1KaVdyd3hnUWZCS3VDelZnMzJW?= =?utf-8?B?V3dOQzJXb2UrV1FqR0hsVkpwQndES0JZZW1uRm9ERGFNWkdZTHNiSjlIeTA2?= =?utf-8?B?blhCS0dFSUYwZDJyQW41SGpnVHROY3pJTDB4TU5CaFBQcEFUTVhaRFhYL210?= =?utf-8?B?REhjcHRkeTBjaFRlbUxzNXlrSjgycy9LNTBEWTM3VWFQd0FoekVEa2RyTTNj?= =?utf-8?B?UU5sNHF1SXYwcldMZitTSFZvVWJLZEJPZlVtTG9xdjRjUU1TRzQ0RkM4WXRF?= =?utf-8?B?dW5BOU5XcGdQZ054THpkMlZkMTVUZG9iZzZYUkJzeU10OXNuYTEybnVmd0hJ?= =?utf-8?B?Qzdxb09yTHhndXdMaE94TXliR040TWk3WWFrS0IyeEdOeUxnYzZkQU9FdjFF?= =?utf-8?B?RHFOK2tGUWxOS1FUMUE5c0EwbmV0cWhSbWdSUTdxUWNFbVZvMlE5a0pvVWhJ?= =?utf-8?B?VisyREtiRDNHRWZ5cTExdUxTcWUvcGZ3Mjc1VStSSHRhenRmQjFiWUJkK1JZ?= =?utf-8?B?czBpZmo0T2pTbmx6Qmk1ekRNSlQvSXJZV1p4TWQ2aDhpY0lKSmxNNkZ6MElP?= =?utf-8?B?MjdIQzNhK3VQL3A0cmw0T3ZNTDA2S2R5K3kwY0w4K3FaNGJ6Y3lGc0Ewckpi?= =?utf-8?B?V25ZTXNYRzVydFRNTWxDbGRaYzFpbEVNajc4c2VZZWNCcm5xQ0F6RUZiWi95?= =?utf-8?B?enk2MzRtNGRCTzNURzV0RTFvOUdaVXVVd09Rc0J6MS9Sb25ER0xveHRrMVRU?= =?utf-8?B?YkRjTXIrNVZ6QkYvNWRrQ3VHU0ExQjI3ZGF6MnNCSEtDcHF2NkxzaUxiMjdX?= =?utf-8?B?NGk5R0JJT2FscDh5RVJBQUljWU5zVkxmeFV5SUYvRk05a05uSnorTm45ZC91?= =?utf-8?Q?Qb2LYauuoaDRdSs/jD3kDk+6V?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: VI1PR08MB5325.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36003b54-716e-44d3-78d7-08dad2da65e8 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2022 13:54:28.0471 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Nme4S6fsKStBxmV8fNJNWg7/z9O7TX3F+Sf3gcjJ2vQC26BQr4ipuZ6bNUuYldA6i+lT8UxTK9FFbsif+5IY5w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8206 X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP 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: PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBHY2MtcGF0Y2hlcyA8Z2NjLXBh dGNoZXMtDQo+IGJvdW5jZXMrdGFtYXIuY2hyaXN0aW5hPWFybS5jb21AZ2NjLmdudS5vcmc+IE9u IEJlaGFsZiBPZiBUYW1hcg0KPiBDaHJpc3RpbmEgdmlhIEdjYy1wYXRjaGVzDQo+IFNlbnQ6IFdl ZG5lc2RheSwgTm92ZW1iZXIgMzAsIDIwMjIgMToyNCBQTQ0KPiBUbzogUmljaGFyZCBCaWVuZXIg PHJpY2hhcmQuZ3VlbnRoZXJAZ21haWwuY29tPjsgTWFub2xpcyBUc2FtaXMNCj4gPG1hbm9saXMu dHNhbWlzQHZydWxsLmV1Pg0KPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc7IFBoaWxpcHAg VG9tc2ljaCA8cGhpbGlwcC50b21zaWNoQHZydWxsLmV1PjsNCj4gamlhbmduaW5nLmxpdUBhbXBl cmVjb21wdXRpbmcuY29tOyBDaHJpc3RvcGggTXVlbGxuZXINCj4gPGNocmlzdG9waC5tdWVsbG5l ckB2cnVsbC5ldT4NCj4gU3ViamVjdDogUkU6IFtQQVRDSCB2Ml0gQWRkIHBhdHRlcm4gdG8gY29u dmVydCB2ZWN0b3Igc2hpZnQgKyBiaXR3aXNlIGFuZCArDQo+IG11bHRpcGx5IHRvIHZlY3RvciBj b21wYXJlIGluIHNvbWUgY2FzZXMuDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+ID4gRnJvbTogUmljaGFyZCBCaWVuZXIgPHJpY2hhcmQuZ3VlbnRoZXJAZ21haWwuY29tPg0K PiA+IFNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIgMzAsIDIwMjIgMToxOSBQTQ0KPiA+IFRvOiBN YW5vbGlzIFRzYW1pcyA8bWFub2xpcy50c2FtaXNAdnJ1bGwuZXU+DQo+ID4gQ2M6IGdjYy1wYXRj aGVzQGdjYy5nbnUub3JnOyBQaGlsaXBwIFRvbXNpY2gNCj4gPiA8cGhpbGlwcC50b21zaWNoQHZy dWxsLmV1PjsgVGFtYXIgQ2hyaXN0aW5hIDxUYW1hci5DaHJpc3RpbmFAYXJtLmNvbT47DQo+ID4g amlhbmduaW5nLmxpdUBhbXBlcmVjb21wdXRpbmcuY29tOyBDaHJpc3RvcGggTXVlbGxuZXINCj4g PiA8Y2hyaXN0b3BoLm11ZWxsbmVyQHZydWxsLmV1Pg0KPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg djJdIEFkZCBwYXR0ZXJuIHRvIGNvbnZlcnQgdmVjdG9yIHNoaWZ0ICsgYml0d2lzZQ0KPiA+IGFu ZCArIG11bHRpcGx5IHRvIHZlY3RvciBjb21wYXJlIGluIHNvbWUgY2FzZXMuDQo+ID4NCj4gPiBP biBXZWQsIE5vdiAzMCwgMjAyMiBhdCA5OjU5IEFNIE1hbm9saXMgVHNhbWlzDQo+ID4gPG1hbm9s aXMudHNhbWlzQHZydWxsLmV1Pg0KPiA+IHdyb3RlOg0KPiA+ID4NCj4gPiA+IE9uIFdlZCwgTm92 IDMwLCAyMDIyIGF0IDk6NDQgQU0gUmljaGFyZCBCaWVuZXINCj4gPiA+IDxyaWNoYXJkLmd1ZW50 aGVyQGdtYWlsLmNvbT4gd3JvdGU6DQo+ID4gPiA+DQo+ID4gPiA+IE9uIFR1ZSwgTm92IDI5LCAy MDIyIGF0IDExOjA1IEFNIE1hbm9saXMgVHNhbWlzDQo+ID4gPG1hbm9saXMudHNhbWlzQHZydWxs LmV1PiB3cm90ZToNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFdoZW4gdXNpbmcgU1dBUiAoU0lNRCBp biBhIHJlZ2lzdGVyKSB0ZWNobmlxdWVzIGEgY29tcGFyaXNvbg0KPiA+ID4gPiA+IG9wZXJhdGlv biB3aXRoaW4gc3VjaCBhIHJlZ2lzdGVyIGNhbiBiZSBtYWRlIGJ5IHVzaW5nIGENCj4gPiA+ID4g PiBjb21iaW5hdGlvbiBvZiBzaGlmdHMsIGJpdHdpc2UgYW5kIGFuZCBtdWx0aXBsaWNhdGlvbi4g SWYgY29kZQ0KPiA+ID4gPiA+IHVzaW5nIHRoaXMgc2NoZW1lIGlzIHZlY3Rvcml6ZWQgdGhlbiB0 aGVyZSBpcyBwb3RlbnRpYWwgdG8NCj4gPiA+ID4gPiByZXBsYWNlIGFsbCB0aGVzZSBvcGVyYXRp b25zIHdpdGggYSBzaW5nbGUgdmVjdG9yIGNvbXBhcmlzb24sIGJ5DQo+ID4gPiA+ID4gcmVpbnRl cnByZXRpbmcNCj4gPiB0aGUgdmVjdG9yIHR5cGVzIHRvIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUg U1dBUiByZWdpc3Rlci4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEZvciBleGFtcGxlLCBmb3IgdGhl IHRlc3QgZnVuY3Rpb24gcGFja2VkX2NtcF8xNl8zMiwgdGhlDQo+ID4gPiA+ID4gb3JpZ2luYWwN Cj4gPiBnZW5lcmF0ZWQgY29kZSBpczoNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAgICAgICAgbGRy ICAgICBxMCwgW3gwXQ0KPiA+ID4gPiA+ICAgICAgICAgYWRkICAgICB3MSwgdzEsIDENCj4gPiA+ ID4gPiAgICAgICAgIHVzaHIgICAgdjAuNHMsIHYwLjRzLCAxNQ0KPiA+ID4gPiA+ICAgICAgICAg YW5kICAgICB2MC4xNmIsIHYwLjE2YiwgdjIuMTZiDQo+ID4gPiA+ID4gICAgICAgICBzaGwgICAg IHYxLjRzLCB2MC40cywgMTYNCj4gPiA+ID4gPiAgICAgICAgIHN1YiAgICAgdjAuNHMsIHYxLjRz LCB2MC40cw0KPiA+ID4gPiA+ICAgICAgICAgc3RyICAgICBxMCwgW3gwXSwgMTYNCj4gPiA+ID4g PiAgICAgICAgIGNtcCAgICAgdzIsIHcxDQo+ID4gPiA+ID4gICAgICAgICBiaGkgICAgIC5MMjAN Cj4gPiA+ID4gPg0KPiA+ID4gPiA+IHdpdGggdGhpcyBwYXR0ZXJuIHRoZSBhYm92ZSBjYW4gYmUg b3B0aW1pemVkIHRvOg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gICAgICAgICBsZHIgICAgIHEwLCBb eDBdDQo+ID4gPiA+ID4gICAgICAgICBhZGQgICAgIHcxLCB3MSwgMQ0KPiA+ID4gPiA+ICAgICAg ICAgY21sdCAgICB2MC44aCwgdjAuOGgsICMwDQo+ID4gPiA+ID4gICAgICAgICBzdHIgICAgIHEw LCBbeDBdLCAxNg0KPiA+ID4gPiA+ICAgICAgICAgY21wICAgICB3MiwgdzENCj4gPiA+ID4gPiAg ICAgICAgIGJoaSAgICAgLkwyMA0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gVGhlIGVmZmVjdCBpcyBz aW1pbGFyIGZvciB4ODYtNjQuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBN YW5vbGlzIFRzYW1pcyA8bWFub2xpcy50c2FtaXNAdnJ1bGwuZXU+DQo+ID4gPiA+ID4NCj4gPiA+ ID4gPiBnY2MvQ2hhbmdlTG9nOg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gICAgICAgICAqIG1hdGNo LnBkOiBTaW1wbGlmeSB2ZWN0b3Igc2hpZnQgKyBiaXRfYW5kICsgbXVsdGlwbHkgaW4gc29tZQ0K PiBjYXNlcy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IGdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOg0K PiA+ID4gPiA+DQo+ID4gPiA+ID4gICAgICAgICAqIGdjYy50YXJnZXQvYWFyY2g2NC9zd2FyX3Rv X3ZlY19jbXAuYzogTmV3IHRlc3QuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtLS0NCj4gPiA+ID4g Pg0KPiA+ID4gPiA+IENoYW5nZXMgaW4gdjI6DQo+ID4gPiA+ID4gICAgICAgICAtIENoYW5nZWQg cGF0dGVybiB0byB1c2UgdmVjX2NvbmRfZXhwci4NCj4gPiA+ID4gPiAgICAgICAgIC0gQ2hhbmdl ZCBwYXR0ZXJuIHRvIHdvcmsgd2l0aCBWTEEgdmVjdG9yLg0KPiA+ID4gPiA+ICAgICAgICAgLSBB ZGRlZCBtb3JlIGNoZWNrcyBhbmQgY29tbWVudHMuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgZ2Nj L21hdGNoLnBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjAgKysrKysrKysr KysrKysrKw0KPiA+ID4gPiA+ICAuLi4vZ2NjLnRhcmdldC9hYXJjaDY0L3N3YXJfdG9fdmVjX2Nt cC5jICAgICAgfCA3Mg0KPiA+ICsrKysrKysrKysrKysrKysrKysNCj4gPiA+ID4gPiAgMiBmaWxl cyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+ ID4gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3dhcl90b192ZWNfY21wLmMNCj4g PiA+ID4gPg0KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9nY2MvbWF0Y2gucGQgYi9nY2MvbWF0Y2gu cGQgaW5kZXgNCj4gPiA+ID4gPiA2N2EwYTY4MmYzMS4uMDVlN2ZjNzliYTggMTAwNjQ0DQo+ID4g PiA+ID4gLS0tIGEvZ2NjL21hdGNoLnBkDQo+ID4gPiA+ID4gKysrIGIvZ2NjL21hdGNoLnBkDQo+ ID4gPiA+ID4gQEAgLTMwMSw2ICszMDEsNjYgQEAgREVGSU5FX0lOVF9BTkRfRkxPQVRfUk9VTkRf Rk4gKFJJTlQpDQo+ID4gPiA+ID4gICAgICAodmlld19jb252ZXJ0IChiaXRfYW5kOml0eXBlICh2 aWV3X2NvbnZlcnQgQDApDQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKG5lIEAxIHsgYnVpbGRfemVyb19jc3QgKHR5cGUpOw0KPiA+ID4gPiA+IH0pKSkpKSkpDQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiArLyogSW4gU1dBUiAoU0lNRCBpbiBhIHJlZ2lzdGVyKSBjb2Rl IGEgc2lnbmVkIGNvbXBhcmlzb24gb2YNCj4gPiA+ID4gPiArcGFja2VkDQo+ID4gZGF0YSBjYW4N Cj4gPiA+ID4gPiArICAgYmUgY29uc3RydWN0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgY29tYmluYXRp b24gb2Ygc2hpZnQsIGJpdHdpc2UgYW5kLA0KPiA+ID4gPiA+ICsgICBhbmQgbXVsdGlwbGljYXRp b24gYnkgY29uc3RhbnRzLiAgSWYgdGhhdCBjb2RlIGlzIHZlY3Rvcml6ZWQgd2UgY2FuDQo+ID4g PiA+ID4gKyAgIGNvbnZlcnQgdGhpcyBwYXR0ZXJuIGludG8gYSBtb3JlIGVmZmljaWVudCB2ZWN0 b3IgY29tcGFyaXNvbi4NCj4gPiA+ID4gPiArKi8gKHNpbXBsaWZ5ICAobXVsdCAoYml0X2FuZCAo cnNoaWZ0IEAwIHVuaWZvcm1faW50ZWdlcl9jc3RfcEAxKQ0KPiA+ID4gPiA+ICsgICAgICAgICAg IHVuaWZvcm1faW50ZWdlcl9jc3RfcEAyKQ0KPiA+ID4gPiA+ICsgICAgdW5pZm9ybV9pbnRlZ2Vy X2NzdF9wQDMpDQo+ID4gPiA+DQo+ID4gPiA+IFBsZWFzZSB1c2UgVkVDVE9SX0NTVCBpbiB0aGUg bWF0Y2ggaW5zdGVhZCBvZg0KPiA+ID4gPiB1bmlmb3JtX2ludGVnZXJfY3N0X3AgYW5kIGluc3Rl YWQgLi4uDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gV2lsbCBkby4NCj4gPiA+DQo+ID4gPiA+ID4g KyAod2l0aCB7DQo+ID4gPiA+ID4gKyAgIHRyZWUgcnNoaWZ0X2NzdCA9IHVuaWZvcm1faW50ZWdl cl9jc3RfcCAoQDEpOw0KPiA+ID4gPiA+ICsgICB0cmVlIGJpdF9hbmRfY3N0ID0gdW5pZm9ybV9p bnRlZ2VyX2NzdF9wIChAMik7DQo+ID4gPiA+ID4gKyAgIHRyZWUgbXVsdF9jc3QgPSB1bmlmb3Jt X2ludGVnZXJfY3N0X3AgKEAzKTsgIH0NCj4gPiA+ID4gPiArICAvKiBNYWtlIHN1cmUgd2UncmUg d29ya2luZyB3aXRoIHZlY3RvcnMgYW5kIHVuaWZvcm0gdmVjdG9yDQo+ID4gPiA+ID4gKyBjb25z dGFudHMuICAqLyAgKGlmIChWRUNUT1JfVFlQRV9QICh0eXBlKQ0KPiA+ID4gPg0KPiA+ID4gPiAu Li4gdGVzdCBmb3Igbm9uLU5VTEwgKl9jc3QgaGVyZSB3aGVyZSB5b3UgY2FuIHVzZQ0KPiA+ID4g PiB1bmlmb3JtX3ZlY3Rvcl9wIGluc3RlYWQgb2YgdW5pZm9ybV9pbnRlZ2VyX2NzdF9wLiAgWW91 IGNhbiBlbGlkZQ0KPiA+ID4gPiB0aGUgVkVDVE9SX1RZUEVfUCBjaGVjayB0aGVuIGFuZCBpbnN0 ZWFkIGRvIElOVEVHUkFMX1RZUEVfUA0KPiAoVFJFRV9UWVBFICh0eXBlKSkuDQo+ID4gPiA+DQo+ ID4gPg0KPiA+ID4gV2lsbCBkby4NCj4gPiA+DQo+ID4gPiA+ID4gKyAgICAgICAmJiB0cmVlX2Zp dHNfdWh3aV9wIChyc2hpZnRfY3N0KQ0KPiA+ID4gPiA+ICsgICAgICAgJiYgdHJlZV9maXRzX3Vo d2lfcCAobXVsdF9jc3QpDQo+ID4gPiA+ID4gKyAgICAgICAmJiB0cmVlX2ZpdHNfdWh3aV9wIChi aXRfYW5kX2NzdCkpDQo+ID4gPiA+ID4gKyAgIC8qIENvbXB1dGUgd2hhdCBjb25zdGFudHMgd291 bGQgYmUgbmVlZGVkIGZvciB0aGlzIHRvDQo+ID4gPiA+ID4gKyByZXByZXNlbnQgYQ0KPiA+IHBh Y2tlZA0KPiA+ID4gPiA+ICsgICAgICBjb21wYXJpc29uIGJhc2VkIG9uIHRoZSBzaGlmdCBhbW91 bnQgZGVub3RlZCBieSBSU0hJRlRfQ1NULg0KPiAqLw0KPiA+ID4gPiA+ICsgICAod2l0aCB7DQo+ ID4gPiA+ID4gKyAgICAgSE9TVF9XSURFX0lOVCB2ZWNfZWxlbV9iaXRzID0gdmVjdG9yX2VsZW1l bnRfYml0cyAodHlwZSk7DQo+ID4gPiA+ID4gKyAgICAgcG9seV9pbnQ2NCB2ZWNfbmVsdHMgPSBU WVBFX1ZFQ1RPUl9TVUJQQVJUUyAodHlwZSk7DQo+ID4gPiA+ID4gKyAgICAgcG9seV9pbnQ2NCB2 ZWNfYml0cyA9IHZlY19lbGVtX2JpdHMgKiB2ZWNfbmVsdHM7DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgY21wX2JpdHNfaSwgYml0X2FuZF9pLCBt dWx0X2k7DQo+ID4gPiA+ID4gKyAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCB0YXJnZXRfbXVs dF9pLCB0YXJnZXRfYml0X2FuZF9pOw0KPiA+ID4gPiA+ICsgICAgIGNtcF9iaXRzX2kgPSB0cmVl X3RvX3Vod2kgKHJzaGlmdF9jc3QpICsgMTsNCj4gPiA+ID4gPiArICAgICB0YXJnZXRfbXVsdF9p ID0gKEhPU1RfV0lERV9JTlRfMVUgPDwgY21wX2JpdHNfaSkgLSAxOw0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArICAgICBtdWx0X2kgPSB0cmVlX3RvX3Vod2kgKG11bHRfY3N0KTsNCj4gPiA+ID4g PiArICAgICBiaXRfYW5kX2kgPSB0cmVlX3RvX3Vod2kgKGJpdF9hbmRfY3N0KTsNCj4gPiA+ID4g PiArICAgICB0YXJnZXRfYml0X2FuZF9pID0gMDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAg ICAgLyogVGhlIGJpdCBwYXR0ZXJuIGluIEJJVF9BTkRfSSBzaG91bGQgYmUgYSBtYXNrIGZvciB0 aGUgbGVhc3QNCj4gPiA+ID4gPiArICAgICAgICBzaWduaWZpY2FudCBiaXQgb2YgZWFjaCBwYWNr ZWQgZWxlbWVudCB0aGF0IGlzIENNUF9CSVRTIHdpZGUuICAqLw0KPiA+ID4gPiA+ICsgICAgIGZv ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWNfZWxlbV9iaXRzIC8gY21wX2JpdHNfaTsgaSsrKQ0K PiA+ID4gPiA+ICsgICAgICAgdGFyZ2V0X2JpdF9hbmRfaSA9ICh0YXJnZXRfYml0X2FuZF9pIDw8 IGNtcF9iaXRzX2kpIHwgMVU7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKyAgICAoaWYg KChleGFjdF9sb2cyIChjbXBfYml0c19pKSkgPj0gMA0KPiA+ID4gPiA+ICsgICAgICAgICYmIGNt cF9iaXRzX2kgPCBIT1NUX0JJVFNfUEVSX1dJREVfSU5UDQo+ID4gPiA+ID4gKyAgICAgICAgJiYg bXVsdGlwbGVfcCAodmVjX2JpdHMsIGNtcF9iaXRzX2kpDQo+ID4gPiA+ID4gKyAgICAgICAgJiYg dmVjX2VsZW1fYml0cyA8PSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UDQo+ID4gPiA+ID4gKyAgICAg ICAgJiYgdGFyZ2V0X211bHRfaSA9PSBtdWx0X2kNCj4gPiA+ID4gPiArICAgICAgICAmJiB0YXJn ZXRfYml0X2FuZF9pID09IGJpdF9hbmRfaSkNCj4gPiA+ID4gPiArICAgICAvKiBDb21wdXRlIHRo ZSB2ZWN0b3Igc2hhcGUgZm9yIHRoZSBjb21wYXJpc29uIGFuZCBjaGVjaw0KPiA+ID4gPiA+ICsg aWYgdGhlDQo+ID4gdGFyZ2V0IGlzDQo+ID4gPiA+ID4gKyAgICAgICBhYmxlIHRvIGV4cGFuZCB0 aGUgY29tcGFyaXNvbiB3aXRoIHRoYXQgdHlwZS4gICovDQo+ID4gPiA+ID4gKyAgICAgKHdpdGgg ew0KPiA+ID4gPiA+ICsgICAgICAgLyogV2UncmUgZG9pbmcgYSBzaWduZWQgY29tcGFyaXNvbi4g ICovDQo+ID4gPiA+ID4gKyAgICAgICB0cmVlIGNtcF90eXBlID0gYnVpbGRfbm9uc3RhbmRhcmRf aW50ZWdlcl90eXBlIChjbXBfYml0c19pLA0KPiAwKTsNCj4gPiA+ID4gPiArICAgICAgIHBvbHlf aW50NjQgdmVjdG9yX3R5cGVfbmVsdHMgPSBleGFjdF9kaXYgKHZlY19iaXRzLCBjbXBfYml0c19p KTsNCj4gPiA+ID4gPiArICAgICAgIHRyZWUgdmVjdG9yX2NtcF90eXBlID0gYnVpbGRfdmVjdG9y X3R5cGUgKGNtcF90eXBlLA0KPiA+IHZlY3Rvcl90eXBlX25lbHRzKTsNCj4gPiA+ID4gPiArICAg ICAgIHRyZWUgemVyb3MgPSBidWlsZF96ZXJvX2NzdCAodmVjdG9yX2NtcF90eXBlKTsNCj4gPiA+ ID4gPiArICAgICAgIHRyZWUgb25lcyA9IGJ1aWxkX2FsbF9vbmVzX2NzdCAodmVjdG9yX2NtcF90 eXBlKTsNCj4gPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgICAoaWYgKGV4cGFuZF92 ZWNfY21wX2V4cHJfcCAodmVjdG9yX2NtcF90eXBlLA0KPiA+IHZlY3Rvcl9jbXBfdHlwZSwgTFRf RVhQUikpDQo+ID4gPiA+ID4gKyAgICAgICAodmlld19jb252ZXJ0OnR5cGUgKHZlY19jb25kIChs dA0KPiA+ICh2aWV3X2NvbnZlcnQ6dmVjdG9yX2NtcF90eXBlIEAwKQ0KPiA+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHplcm9zOyB9KQ0KPiA+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIHsgb25lczsgfSB7IHplcm9zOyB9KSkpKSkpKSkpDQo+ ID4gPiA+DQo+ID4gPiA+IFlvdSBhcmUgdGVzdGluZyB3aGV0aGVyIHdlIGNhbiBleHBhbmQgdGhl IGNvbXBhcmlzb24gYnV0IG5vdA0KPiA+ID4gPiB3aGV0aGVyIHdlIGNhbiBleHBhbmQgdGhlIHZl Y3RvciBjb25kaXRpb24gaGVyZT8gIFRoZSBzZXQgb2YNCj4gPiA+ID4gY29tYmluYXRpb25zIHN1 cHBvcnRlZCBhcmUgdHJpY2t5LCBJIHRoaW5rIHlvdXIgdGVzdCBpcw0KPiA+ID4gPiBjb25zZXJ2 YXRpdmVseSBPSyBidXQgaXQgbWlnaHQgZmFpbCB0byBtYXRjaCBBVlg1MTIgYW5kIHdpbGwgZmFp bA0KPiA+ID4gPiB0YXJnZXRzIHdpdGggbWFza3MgKFNWRSwgR0NOPykuICBJIHRoaW5rIGFkZGlu Zw0KPiA+ID4gPg0KPiA+ID4gPiAgIHx8IGV4cGFuZF92ZWNfY29uZF9leHByX3AgKHZlY3Rvcl9j bXBfdHlwZSwgdmVjdG9yX2NtcF90eXBlLA0KPiA+ID4gPiBMVF9FWFBSKQ0KPiA+ID4gPg0KPiA+ ID4gPiB3b3VsZCBmaXggdGhhdCAoYnV0IHRoZXJlIHdpbGwgYmUgZXh0cmEgY29zdCBpbiBwcm9k dWNpbmcgdGhlDQo+ID4gPiA+IGZpbmFsIHJlc3VsdCB2ZWN0b3IgZnJvbSB0aGUgY29tcGFyaXNv biBtYXNrKS4NCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiBJIGRpZG4ndCB1bmRlcnN0YW5kIHRoYXQg dGhlc2UgbmVlZGVkIHNlcGFyYXRlIGNoZWNrcywgdGhhbmtzIGZvcg0KPiA+ID4gcG9pbnRpbmcg aXQgb3V0Lg0KPiA+ID4gV2lsbCBkby4NCj4gPiA+DQo+ID4gPiA+IEkgZG8gd29uZGVyIGlmLCBh cyB0aGlzIGlzIHRhcmdldGVkIGF0IHZlY3Rvcml6YXRpb24sIHRoaXMNCj4gPiA+ID4gc2hvdWxk bid0IGJlIGEgdmVjdG9yaXplciBwYXR0ZXJuIGluc3RlYWQgb2YgYSBwb3N0LXByb2Nlc3NpbmcN Cj4gdHJhbnNmb3JtPw0KPiA+ID4gPiBUaGF0DQo+ID4gPg0KPiA+ID4gTXkgaW5pdGlhbCBpbXBs ZW1lbnRhdGlvbiBmb3IgdGhpcyB3YXMgYWN0dWFsbHkgdGFyZ2V0aW5nIHRoZQ0KPiA+ID4gdmVj dG9yaXphdGlvbiBwYXR0ZXJucyBidXQgaXQgZGlkbid0IGZpdCB3aXRoIGl0IHZlcnkgd2VsbC4g T25lDQo+ID4gPiBpc3N1ZSB0aGF0IHdhcyByYWlzZWQgaXMgdGhhdCB0aGVzZSBwYXR0ZXJucyBu ZWVkIHRoZSBpbnRlcm5hbCB2ZWMNCj4gPiA+IGNhbGxzIGFuZCBhZGRpbmcgb25lIGludGVybmFs IGZ1bmN0aW9uIGZvciB0aGlzIG9wdGltaXphdGlvbiB3b3VsZA0KPiA+ID4gYmUgaGFyZGx5IGp1 c3RpZmlhYmxlIGFuZCBwb3NzaWJseSB1Z2x5LiBUaGUgd2F5IEkgc2VlIGl0IHRoaXMgaXMgYQ0K PiA+ID4gcGVlcGhvbGUgb3B0aW1pemF0aW9uIGFuZCBub3Qgc29tZXRoaW5nIHRvIG1ha2UgYSBw YXR0ZXJuIGZvci4NCj4gPiA+IEFmdGVyIHRoYXQgbWF0Y2gucGQgd2FzIGxvb2tpbmcgbGlrZSBh IGJldHRlciBwbGFjZSB0byBhY2hpZXZlIHRoZQ0KPiA+ID4gb3B0aW1pemF0aW9uIGluIGEgY2xl YW4gd2F5IGFuZCBub3QgcG9sbHV0ZSB0aGUgdmVjdG9yaXplci4NCj4gPiA+IE15IHVuZGVyc3Rh bmRpbmcgb2YgdGhlIHZlY3Rvcml6YXRpb24gbWFjaGluZXJ5IGlzIGxpbWl0ZWQgc28gcGxlYXNl DQo+ID4gPiBjb3JyZWN0IG1lIGlmIEknbSB3cm9uZy4NCj4gPiA+DQo+ID4gPiA+IHdheSB3ZSB3 b3VsZA0KPiA+ID4gPiBnZXQgdGhlIGNvc3RpbmcgaW4gdGhlIHZlY3Rvcml6ZXIgY29ycmVjdCBh bmQgbm90IHJlbHkgb24gaW50ZWdlcg0KPiA+ID4gPiB2ZWN0b3Igc2hpZnQgb3IgbXVsdGlwbGlj YXRpb24gYW5kIGFsc28gZ2V0IHRoZSBjb3N0IG9mIHByb2R1Y2luZw0KPiA+ID4gPiB0aGUgcmVz dWx0IHZlY3RvciBjb3JyZWN0PyAgSSBjYW4ndCBmdWxseSBkZWNpcGhlciB0aGUgdHJpY2sNCj4g PiA+ID4gdGhvdWdoLCBidXQgYXNzdW1lIHRoYXQgdmVjdG9yX2NtcF90eXBlIGFsd2F5cyBoYXMg c21hbGxlcg0KPiA+ID4gPiBlbGVtZW50cyB0aGFuICd0eXBlJy4NCj4gPiA+ID4NCj4gPiA+DQo+ ID4gPiBUaGF0IGlzIGNvcnJlY3QsIGFsbCB0aGlzIGFwcGxpZXMgd2hlbiB2ZWN0b3JfY21wX3R5 cGUgaGFzIHNtYWxsZXINCj4gPiA+IGVsZW1lbnRzIHRoYW4gdHlwZS4gT3RoZXJ3aXNlIGlmIHZl Y3Rvcl9jbXBfdHlwZSA9PSB0eXBlIHRoZXJlIGlzIG5vDQo+ID4gPiBTV0FSIGFuZCBHQ0Mgb3B0 aW1pemVzIGl0IG5pY2VseSBhbHJlYWR5KS4gQnV0IEkgaGF2ZW4ndCBhZGRlZCBhbnkNCj4gPiA+ IHNwZWNpYWwgY2FzZSBmb3IgdGhhdCBhcyB0aGUgcGF0dGVybiBpcyBnZW5lcmFsIGFuZCB3b3Jr cyBuaWNlbHkgaW4NCj4gPiA+IGJvdGgNCj4gPiBjYXNlcy4NCj4gPg0KPiA+IFNvIGEgdmVjdG9y aXplciBwYXR0ZXJuIHdvdWxkIGJlIHRvIHJlcGxhY2UgdGhlIG11bHRpcGxpY2F0aW9uIHdpdGgN Cj4gPiAod2l0aCBzbWFsbGVyIHR5cGUgVCBhbmQgb3JpZ2luYWwgdHlwZSBVKQ0KPiA+DQo+ID4g ICAoVClAMCA8IDAgPyAoVSktMSA6KFUpMA0KPiA+DQo+ID4gPyAgVGhhdCBpcywgdGhpcyBzaG91 bGQgYWxzbyB3b3JrIG9uIHRoZSBzY2FsYXIgc2lkZT8gIChpZiBpdCBkb2Vzbid0DQo+ID4gdGhl biBpdCBpbmRlZWQgZ2V0cyBtb3JlIHRyaWNreSkNCj4gDQo+IEhtbSBkb24ndCB0aGluayBpdCBk b2VzLCBhcyB0aGUgbmFycm93aW5nIG9uIHRoZSBzY2FsYXIgc2l6ZSB3aWxsIHJlc3VsdCBpbg0K PiBwYWNrL3VucGFjayBvcGVyYXRpb25zIGR1cmluZyB2ZWN0b3JpemF0aW9uIHdvdWxkIGl0IG5v dD8gVGhlIDwgbmVlZHMgdG8gYmUNCj4gZG9uZSB3aXRob3V0IGNoYW5naW5nIHRoZSBWRi4NCj4g DQo+IGkuZS4gaXQncyBvbmx5IHZhbGlkIGFzIGEgdmVjdG9yIC0+IHZlY3RvciB0cmFuc2Zvcm0g YnkgcmVpbnRlcnByZXRpbmcgdGhlIGJpdHMgaW4NCj4gdGhlIHZlY3Rvci4NCg0KQWRkaXRpb25h bGx5LCBJIGRvbid0IHRoaW5rIGEgc2NhbGFyIHJlcHJlc2VudGF0aW9uIGlzIGFjdHVhbGx5IGNv cnJlY3QuIEVhY2ggc2NhbGFyDQp2YWx1ZSBzdGlsbCBjb250YWlucyBtdWx0aXBsZSBwYWNrZWQg dmFsdWVzLiBTbyBlLmcuICB1aW50MTZfdCBjb250YWlucyB0d28gdWludDhfdA0KdmFsdWVzIHdo aWNoIGhhdmUgdG8gYmUgaW5kaXZpZHVhbGx5IGNvbXBhcmVkLiAgU28gYSBjYXN0IG9uIHRoZSBz Y2FsYXIgdmFsdWUgaXMNCmluY29ycmVjdCBhcyBpdCdzIGp1c3QgdHJ1bmNhdGluZy4gQSB0eXBl IGNvbnZlcnQgb24gYSBzY2FsYXIgd291bGQgYmUgaW5jb3JyZWN0IGFzDQp3ZWxsIGFzIHRoZSBz ZW1hbnRpY3Mgb2YgPCBpcyBpbmNvcnJlY3QgdGhlbiAoaXQnbGwgY29tcGFyZSBpdCBhcyBhIHdo b2xlKS4NCg0KUmVnYXJkcywNClRhbWFyDQo+IA0KPiBUYW1hcg0KPiANCj4gPg0KPiA+ID4gVGhl IHRyaWNrIGlzIHRoYXQgaW4gc2NhbGFyIGNvZGUgd2hlcmUgc2ltZC13aXRoaW4tYS1yZWdpc3Rl cg0KPiA+ID4gdGVjaG5pcXVlcyBhcmUgdXNlZCBhIHNpZ25lZCBjb21wYXJpc29uIGNhbiBiZSBj cmVhdGVkIGJ5IDEpIHJpZ2h0DQo+ID4gPiBzaGlmdGluZyB0aGUgc2lnbiBiaXRzIHRvIHRoZSBs c2INCj4gPiA+IDIpIG1hc2tpbmcgb2ZmIGV2ZXJ5dGhpbmcgZWxzZSBhbmQgMykgbXVsdGlwbHkg YnkgYW4gYXBwcm9wcmlhdGUNCj4gPiA+IDB4ZmZmZi4uLiBjb25zdGFudCB0byBjcmVhdGUgYSBt YXNrLiBHQ0MgY29tcHV0ZXMgdGhpcyBhcyA0DQo+ID4gPiBpbnN0cnVjdGlvbnMgc2luY2UgdGhl IG11bHRpcGx5IGlzIHVzdWFsbHkgcmVwbGFjZWQgYnkgc2hpZnQgYW5kDQo+ID4gPiBzdWJ0cmFj dC4gQnV0IGlmIHRoaXMgc2VxdWVuY2UgZ2V0cyB2ZWN0b3JpemVkIHRoZW4gYWxsIHRoaXMNCj4g PiA+IHNlcXVlbmNlIGNhbiBiZSByZXBsYWNlZCBieSBhIHNpbmdsZSB2ZWN0b3IgY29tcGFyZS1s ZXNzLCBzaW5jZSB0aGUNCj4gPiA+IG9yaWdpbmFsIGNvZGUgd2FzIGVtdWxhdGluZyB3aGF0IGEg dmVjdG9yIGNvbWFwcmUtbGVzcyBkb2VzIGFueXdheS4NCj4gPiA+DQo+ID4gPiBUaGFua3MhDQo+ ID4gPiBNYW5vbGlzDQo+ID4gPg0KPiA+ID4gPiBUaGFua3MsDQo+ID4gPiA+IFJpY2hhcmQuDQo+ ID4gPiA+DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICAoZm9yIGNtcCAoZ3QgZ2UgbHQgbGUpDQo+ ID4gPiA+ID4gICAgICAgb3V0cCAoY29udmVydCBjb252ZXJ0IG5lZ2F0ZSBuZWdhdGUpDQo+ID4g PiA+ID4gICAgICAgb3V0biAobmVnYXRlIG5lZ2F0ZSBjb252ZXJ0IGNvbnZlcnQpIGRpZmYgLS1n aXQNCj4gPiA+ID4gPiBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N3YXJfdG9f dmVjX2NtcC5jDQo+ID4gPiA+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9z d2FyX3RvX3ZlY19jbXAuYw0KPiA+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+ ID4gaW5kZXggMDAwMDAwMDAwMDAuLjI2ZjlhZDllZjI4DQo+ID4gPiA+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ID4gPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N3YXJf dG9fdmVjX2NtcC5jDQo+ID4gPiA+ID4gQEAgLTAsMCArMSw3MiBAQA0KPiA+ID4gPiA+ICsvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ID4gPiA+ICsvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZnRy ZWUtdmVjdG9yaXplIiB9ICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICt0eXBlZGVmIHVuc2ln bmVkIGNoYXIgdWludDhfdDsNCj4gPiA+ID4gPiArdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50 MTZfdDsgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsvKiA4LWJpdCBTV0FSIHRlc3RzLiAgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0 YXRpYyB1aW50OF90IHBhY2tlZF9jbXBfOF84KHVpbnQ4X3QgYSkgew0KPiA+ID4gPiA+ICsgIHJl dHVybiAoKGEgPj4gNykgJiAweDFVKSAqIDB4ZmZVOyB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsvKiAxNi1iaXQgU1dBUiB0ZXN0cy4gICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0 aWMgdWludDE2X3QgcGFja2VkX2NtcF84XzE2KHVpbnQxNl90IGEpIHsNCj4gPiA+ID4gPiArICBy ZXR1cm4gKChhID4+IDcpICYgMHgxMDFVKSAqIDB4ZmZVOyB9DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICtzdGF0aWMgdWludDE2X3QgcGFja2VkX2NtcF8xNl8xNih1aW50MTZfdCBhKSB7DQo+ID4g PiA+ID4gKyAgcmV0dXJuICgoYSA+PiAxNSkgJiAweDFVKSAqIDB4ZmZmZlU7IH0NCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKy8qIDMyLWJpdCBTV0FSIHRlc3RzLiAgKi8NCj4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gK3N0YXRpYyB1aW50MzJfdCBwYWNrZWRfY21wXzhfMzIodWludDMyX3QgYSkgew0K PiA+ID4gPiA+ICsgIHJldHVybiAoKGEgPj4gNykgJiAweDEwMTAxMDFVKSAqIDB4ZmZVOyB9DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgdWludDMyX3QgcGFja2VkX2NtcF8xNl8zMih1 aW50MzJfdCBhKSB7DQo+ID4gPiA+ID4gKyAgcmV0dXJuICgoYSA+PiAxNSkgJiAweDEwMDAxVSkg KiAweGZmZmZVOyB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgdWludDMyX3QgcGFj a2VkX2NtcF8zMl8zMih1aW50MzJfdCBhKSB7DQo+ID4gPiA+ID4gKyAgcmV0dXJuICgoYSA+PiAz MSkgJiAweDFVKSAqIDB4ZmZmZmZmZmZVOyB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBE cml2ZXIgZnVuY3Rpb24gdG8gdGVzdCB0aGUgdmVjdG9yaXplZCBjb2RlIGdlbmVyYXRlZCBmb3IN Cj4gPiA+ID4gPiArdGhlDQo+ID4gZGlmZmVyZW50DQo+ID4gPiA+ID4gKyAgIHBhY2tlZF9jbXAg dmFyaWFudHMuICAqLw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2RlZmluZSBWRUNUT1JJWkVE X1BBQ0tFRF9DTVAoVCwgRlVOQykgICAgICAgICBcDQo+ID4gPiA+ID4gKyAgdm9pZCB2ZWN0b3Jp emVkX2NtcF8jI0ZVTkMoVCogYSwgaW50IG4pICAgICAgXA0KPiA+ID4gPiA+ICsgIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiA+ID4gPiArICAgIG4g PSAobiAvIDMyKSAqIDMyOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ID4gPiA+ID4gKyAg ICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSArPSA0KSAgICAgICAgICAgICAgXA0KPiA+ID4gPiA+ ICsgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiA+ ID4gPiArICAgICAgYVtpICsgMF0gPSBGVU5DKGFbaSArIDBdKTsgICAgICAgICAgICAgICBcDQo+ ID4gPiA+ID4gKyAgICAgIGFbaSArIDFdID0gRlVOQyhhW2kgKyAxXSk7ICAgICAgICAgICAgICAg XA0KPiA+ID4gPiA+ICsgICAgICBhW2kgKyAyXSA9IEZVTkMoYVtpICsgMl0pOyAgICAgICAgICAg ICAgIFwNCj4gPiA+ID4gPiArICAgICAgYVtpICsgM10gPSBGVU5DKGFbaSArIDNdKTsgICAgICAg ICAgICAgICBcDQo+ID4gPiA+ID4gKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KPiA+ID4gPiA+ICsgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK1ZF Q1RPUklaRURfUEFDS0VEX0NNUCh1aW50OF90LCBwYWNrZWRfY21wXzhfOCk7DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICtWRUNUT1JJWkVEX1BBQ0tFRF9DTVAodWludDE2X3QsIHBhY2tlZF9jbXBf OF8xNik7DQo+ID4gPiA+ID4gK1ZFQ1RPUklaRURfUEFDS0VEX0NNUCh1aW50MTZfdCwgcGFja2Vk X2NtcF8xNl8xNik7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtWRUNUT1JJWkVEX1BBQ0tFRF9D TVAodWludDMyX3QsIHBhY2tlZF9jbXBfOF8zMik7DQo+ID4gPiA+ID4gK1ZFQ1RPUklaRURfUEFD S0VEX0NNUCh1aW50MzJfdCwgcGFja2VkX2NtcF8xNl8zMik7DQo+ID4gPiA+ID4gK1ZFQ1RPUkla RURfUEFDS0VEX0NNUCh1aW50MzJfdCwgcGFja2VkX2NtcF8zMl8zMik7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge1x0Y21sdFx0fSB9IH0g Ki8NCj4gPiA+ID4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7XHR1c2hy XHR9IH0gfSAqLw0KPiA+ID4gPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 IHtcdHNobFx0fSB9IH0gKi8NCj4gPiA+ID4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLW5vdCB7XHRtdWxcdH0gfSB9ICovDQo+ID4gPiA+ID4gLS0NCj4gPiA+ID4gPiAyLjM0LjEN Cj4gPiA+ID4gPg0K