From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mo-csw-fb.securemx.jp (mo-csw-fb1120.securemx.jp [210.130.202.128]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA230179A3; Mon, 20 Jan 2025 01:26:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=210.130.202.128 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737336376; cv=fail; b=chCgjweaa4NxqLLLbwqDakgxVAttVKIIX/4av8eGWuxpyt9IfRPpuwS0wQrgwc1Ms624HAPIBigTe4baSV1RSEok5kv2nhQzx5DKk7WZ7DmGu4VnqZWrFV6dl3jD3+XZhGhPZMB7YKN2RYlcgWZePRE+A7jV1TZcFxJ1jr0JdA4= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737336376; c=relaxed/simple; bh=IKm+qZVgx+m96639BkbFRxf8PVXNF5pZ62JoCobBEHo=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=kC/En36/uZ8G1XXpAph1gSfyitv/DdYpGWVMX4ZLvp+/tMNbHtlZsIWFaWbDPYAiAIXalRBNriNoeFO7iu5Mck+8aKzsf0YrzOxHBQ2/5DJmC52dQbBhk1LZgWsKG4kS056wyKrzETuFXzojv71kvPjKerMzF1GKb22HiSSIEdk= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=toshiba.co.jp; spf=pass smtp.mailfrom=toshiba.co.jp; dkim=pass (2048-bit key) header.d=toshiba.co.jp header.i=yuji2.ishikawa@toshiba.co.jp header.b=Zol37UmL; arc=fail smtp.client-ip=210.130.202.128 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=toshiba.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=toshiba.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toshiba.co.jp header.i=yuji2.ishikawa@toshiba.co.jp header.b="Zol37UmL" Received: by mo-csw-fb.securemx.jp (mx-mo-csw-fb1120) id 50K0QrUi3394641; Mon, 20 Jan 2025 09:26:53 +0900 DKIM-Signature: v=1;a=rsa-sha256;c=relaxed/simple;d=toshiba.co.jp;h=From:To:CC :Subject:Date:Message-ID:References:In-Reply-To:Content-Type: Content-Transfer-Encoding:MIME-Version;i=yuji2.ishikawa@toshiba.co.jp;s= key2.smx;t=1737332774;x=1738542374;bh=IKm+qZVgx+m96639BkbFRxf8PVXNF5pZ62JoCob BEHo=;b=Zol37UmLiq6QLvyT8KWGt+mfJUUhiUD+ccZvjS8OhGxLpyxq9DQLDey1FKNQOw8C70Ode AzLnoqc/d+8QPDT3nPaDEOOYo2Xpg2zzGINYsH9kjnYEHrByWH/o5rcCNFm8vH7fLiiRe06FdVvew YqJs/u5OYyBpJxJEK3jyeYbzWjqN19bHZtfTugOLTbGT2PPHczc3mJUrq6z5YpHyDcsqsAHNhDqog arud/n57rRW940IA4EdEYWozMtRuSnJrNXcI3v3KmELfd+1dxILMnP3cLD/SsCMhzv3toHkLBc0Os Q5LwHYwxuVaAQwuAOlrGqD5V/eSlKW2gzoF3O8im7Q==; Received: by mo-csw.securemx.jp (mx-mo-csw1122) id 50K0QCcp3914337; Mon, 20 Jan 2025 09:26:12 +0900 X-Iguazu-Qid: 2rWhEqwpiDfMs06M2b X-Iguazu-QSIG: v=2; s=0; t=1737332771; q=2rWhEqwpiDfMs06M2b; m=oHdtT7rn2uoFvmSSJ/Zrs9Kms/REr0xFRaAoWb77/O4= Received: from imx12-a.toshiba.co.jp ([38.106.60.135]) by relay.securemx.jp (mx-mr1120) id 50K0Q9DV2720337 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 20 Jan 2025 09:26:10 +0900 X-SA-MID: 35931409 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=th9gxCY9ax09TjA6TinHHMWGBsJ46+JWVR70PR+WnNLfIhLC/RyXK75j4sunez2K8LVe5AEpjv/UXppni8qmUh+EAwoBnw9xDE1f3m/D3OKnEnFfMkQZcZ6CsZF8nwb49tSk8ghqDTxKw3WGOJZtCJmKDNHE5W1/StHFlEfW9uiCkdI2NTDdeAP4qWo01DZ/lp2d16SZG5DxwS75YfPu1X/NZlFYtdVpvPCePtjo9fP6BYunK1NjIfsvuQw88NyHknXvCv7gtNYi/R0dPlX8gWgz/Zm560MmLnUSPMtpXHRrbGvh1Ouj0jgFCoPH5Jg0LttsCQBJy5SeNPi+Mdrpbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=IKm+qZVgx+m96639BkbFRxf8PVXNF5pZ62JoCobBEHo=; b=hM3aNV7PNFhKUaLTZp+vfcYyTHGYmy050z9lKltE9Hp6DfX0JdmxRFvwvY7FLMbemYCiWSF88nraEfeIR9QsYbXiV5xBIZym6yVqD4HkZ39yiuaY1j+7MFJgs9iSoEvKIrRtBa+x2je7gG8+RVIp50ntMQCAOpKfQW4uO3UUvPUTe3V39F5CwxRdSnN84ZrT1LJ2CFVEBgS2sKeuqTZkMbhHPnM74KmJhni1+yWVidl5szNPRynmt+YLfhNFwAl8l7rbVie/K6zCUQTzQouAjWUbdaYMfonLiQh2WuxDfPREQPYBPiWUYeT7Vqu2PU7a5KneTP1u5UjHG4S2ENvDRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=toshiba.co.jp; dmarc=pass action=none header.from=toshiba.co.jp; dkim=pass header.d=toshiba.co.jp; arc=none From: To: CC: , , , , , , , , , , Subject: RE: [PATCH v12 4/8] media: platform: visconti: Add Toshiba Visconti CSI-2 Receiver driver Thread-Topic: [PATCH v12 4/8] media: platform: visconti: Add Toshiba Visconti CSI-2 Receiver driver Thread-Index: AQHbPxuBi7kHTVRdiEiGnKxc7B63K7MDsJSAgBtyMvA= Date: Mon, 20 Jan 2025 00:21:02 +0000 X-TSB-HOP2: ON Message-ID: References: <20241125092146.1561901-1-yuji2.ishikawa@toshiba.co.jp> <20241125092146.1561901-5-yuji2.ishikawa@toshiba.co.jp> <20250102130821.GF554@pendragon.ideasonboard.com> In-Reply-To: <20250102130821.GF554@pendragon.ideasonboard.com> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=toshiba.co.jp; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYWPR01MB9986:EE_|OSRPR01MB12001:EE_ x-ms-office365-filtering-correlation-id: e9fe240b-ba4c-4a5a-7175-08dd38e852d1 x-ld-processed: f109924e-fb71-4ba0-b2cc-65dcdf6fbe4f,ExtAddr,ExtFwd x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?R3Nqc2thMkErOE5ZVjVQcTJTa2M2WEhNdTBMMUhWclFsd0FERnA3ZWxFcjlm?= =?utf-8?B?VWQ2bHZQc2xZUWVROE9LNEdnRkhSWUVXQ295ZzU5VHJpYTAyQzgzT2IzcjB6?= =?utf-8?B?VlVzMGNQUFBsY1BRZDdieDBRUzRGY0k0QXNTVkF0aC9XZGk3cWFibFRkSFBH?= =?utf-8?B?c2lMT25xc1FDVFNoOENhRDZBWVZZcGhYeU5zU1pmdGtrdzZqUVRLVHdtU3J6?= =?utf-8?B?ZG8xOGVTckFta1QydERGVzcxcXpnV0hldTZpLzNWUWJFZ2U1QzlUb1J5VTJ4?= =?utf-8?B?c2dDemg0UjhCQnlrWHZhZVY5bzNZUUZtNGtuYWQreU4rK3BNbW5JVlpWbGtz?= =?utf-8?B?M09BV2xyREpxR29IR1BCS2tMSmQ1VS9WTTVEaUt2ajF5Yk00ZS8zTWh1WWxx?= =?utf-8?B?VlhRb2FDQzhXWVJDSkZzYzhFVmt3Y0pMaEh1VjlsQTZNdjBMQ1dGVE1Iejhn?= =?utf-8?B?MUk4bWZvOHIrTXhLOGJZR1ZBMlFTWEY2cmRlUVhUd2JOOE8rckN2TnRJK3pW?= =?utf-8?B?RzJwU1NjdVVJdE5YRS93RzRPd0J6VmJ1SUtRdHB4L2FWK3ladmtPOHVScjVC?= =?utf-8?B?RGoxcGpwanYzeXhZWVRYem1xdmJ3WStFcjMrNWJ5cHA3N3FvWG15cHRIYXJK?= =?utf-8?B?REdNQXpnRTBHY1MwQ3cxWVZFT3hkRFdZOXhhOWI5WGs5V0JodER3OEtaUXk1?= =?utf-8?B?N3FJcDFtdmZaZUZQOUNmNWVnMmFiTDRKa21VZ2tsa0ZmRGZHWmYxQlhzaFRP?= =?utf-8?B?eW9wUTh2VEdNWUdkOW1CWlBBVEtzeFNqd0VZbHAwQ1JmVG51aGFvM0pIVEph?= =?utf-8?B?b0RhNHdVeDFuOGlWRDA2SkxNZUJ2TXB4M0ptTFpzUm1nTHJhZXpDY2lsMG5Z?= =?utf-8?B?SHQ3RFZSOHBjaEpLWmZneDBmdjcrcHlobFUrcG96S3REcEZQZ0dTeXB1emJP?= =?utf-8?B?enNIY3pzcm9nY3lpY0x2VzN4N3Zjck0weXBDbGFCWWRtYjhKeUFKQk5MRXlK?= =?utf-8?B?MU5XcjhDQUpKQ1RIVmRUK3A1blNCdzZlMXd0NmowY3pJWlU3NHlHdWdQaUND?= =?utf-8?B?ZXNGQ0pZZ1RCOVpCTUZCa2x3aGNmWWIyZWZSOTF6WHhsYXp0VUlRNm1nMVJ4?= =?utf-8?B?SVlHbmwxYVNSdysrOVVUSzNrUldKbmpnRFM0SGxsdkFGbHpJRkdlWERrOElv?= =?utf-8?B?Y2tKVXpMNEl4RXd5MlRCODN3cVpydG9XbFl2RlJzTkxKa2VEMjhzSnkxMDdT?= =?utf-8?B?VUI0OGRlbm0vMi9KbVB6TklobUxIeUFBd3pnVzBpczg1LzJ2RFNrbFV6TVA5?= =?utf-8?B?M0VFN3BkUE4xRGVFd0FnMzI4cmRMZlNBbUNodUNVU2ZWSVcvMkJieHByWUxX?= =?utf-8?B?Q3dUMDBoNytQT3Fzc1dRdTljOVZ5T2E2UFM2QURjT2VQRE1sOXZPQUZlVVlT?= =?utf-8?B?MmhYQkZPQUNYM1JRbURsK1JFLzA4dmJpM0JBaGcybVpJR1lvWDN5UWJ5RGNX?= =?utf-8?B?cWM3V3RVbmlzV2NHeXVUMWNVa1RpU05TRzJ0Ull6M0l5ZU1NSUVROFBrU2l2?= =?utf-8?B?RXZjM0p0T2d2T0J5ZzJrWTJ0a1pEMmw1eE9vcGoycVcxai9VNkdMS016WGtz?= =?utf-8?B?cXdZYkxRZjVYUzI1MW83bDlqeTFTRExZdEhCTS9FdVdUZGRER0NsdFBnSWtM?= =?utf-8?B?OTk2ZGgvNFI3eTVBUlJWZ2xjZDhSRm11V0xhRFhvZFl6RUI0V0w1dS9UUFl4?= =?utf-8?B?b2ZEQXlzNlhpTlQvc3B6SldlaWZodVlsN08zeFFiR2l5MmpBbmJnbmxGR2ty?= =?utf-8?B?N1M2RERCZmUyc3F6RXp2b2RZQldlQW16d01hKzFUWEJTZ1pOSkZiVWlvbFVB?= =?utf-8?B?Q0xHYkRXcTU5dk1HM2VFN3RLTWFnRGQzNjhPbXBMNjFUby9yZkV6MFNNNmZk?= =?utf-8?Q?+ipg4adNQrUges2THm9yqjR4JS9o14vO?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:ja;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWPR01MB9986.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?UWJaNHdOUlNhRGw5Y1N6VjQxWXUwOHJvdXV5WUxXbW53NDN1dUtBY2hWS1ZU?= =?utf-8?B?TU1zczRBSE9pYy9NZVcxcFJuR0hTamRKcnZZYVhzN3FzdkMzbHRycENoWVZy?= =?utf-8?B?djEzLzVZKy9LMU03SmFRaWIrWXFYbEljcnpWQ1RPSk1YNzFjYm5saGVEZGND?= =?utf-8?B?OFRsTUU3NVAvazlZWVJLc0JvSFphRkJ5M0pZdG9lVElhNDR3ZTRNU2Z6MmJh?= =?utf-8?B?RXlhR0ZmRnlZQy9uWlVRL3J5WGd3cUQrSFB0WGhaWmp2NldIcnIzSmJKZSt5?= =?utf-8?B?YU9pRVZsOGx5VFhTS0lzUVMwVTFpOSs1WXJEZW8yUmtjTVdjSDY5cWZ2WGRi?= =?utf-8?B?TUpFdkUxcXROdlVEYzdEbEo4a3ZXSkhMaXY5L1g4d3lmcHZ5K3dHL3Zhc09w?= =?utf-8?B?V0FFYitJQ2dPOUdqdnN4ZlQrdWMzeWJORjEzeHZsaTRReTdOaWVkcE5GZHRu?= =?utf-8?B?eGphSWJQUUJCRnN6U0FUY3ZoVHBNTW1KZlN0Ny9YbkZuRGlvMGVtYzkwZGZx?= =?utf-8?B?UGFUM0VhRkVWUHVHdFJTck5EWXQ0Ym16ekVCSGhZcTZGVzIrUE9yMm9Wb0Yr?= =?utf-8?B?bXpSMXZvZFRFRjZCaVlVbXdSSnJJc2RiSDlGWSs4aFo3eUhKN3NwWGdHbzFT?= =?utf-8?B?K3VWZm9tQXdGbXRpYWViVUtCdDgwS3ZJUk96NlFsTkFDRTA5MkJjUnJKTFcz?= =?utf-8?B?V2JrT205aUF5V0tKU1FaMEczUjByRU1rN2ZLVzFONFNXK3p5SXVIdFE5YnUv?= =?utf-8?B?Ujg3Tm9kSkNJMkhMY1ppc0NKRjdsQUV2M3lFL1BMRXdKVVdGUmE3MyttVlN6?= =?utf-8?B?UXZlZHQyQnBYQUNFbnhBVmRlRlRxNUt6YytnajA0WXlILzVVTGI3QzVkb29R?= =?utf-8?B?Z1RyYUdDdVBQYmdwWFZKWmd0bkVhYUNZUFRKYWsyTkJ4ekRjM3orSXlUeEZn?= =?utf-8?B?VWY2YWUwWWpzRjFEVW13bGJZS2RVWmlPMm9RcFVyM0pKYkFSQkh5bWJxckll?= =?utf-8?B?WnRvd2JDVjFiTy9jbDYrUVpwcGNONld5MEFXY0o4QURnWjRacy9udGdLV0NX?= =?utf-8?B?MUk0ZlkvM3hCSW9wVlI1emsrcml6bStTbFQ4RlVqMzBCVmlRVVh5aGZxcHR0?= =?utf-8?B?b0hNb0hRZU56Q3I4RjBoSDJic2xlWURFcmp6MFNUaTYxOUx3UW8vVG0zMytQ?= =?utf-8?B?dmtKVmRxcDJyWnhsb2lnRGhTZFBVTlpveHcyRGZJWjNUSWx3YWVyeUd3ZEM2?= =?utf-8?B?WkN1dDFxU0N4dy9hd0FWTnMwdWZLT1dVWVJhemVWQTZwQk1WYnY3bDdCK0ox?= =?utf-8?B?QzB1M1dtTTh3NEdBS3dVL3hlSVhzeFRKYnQ5MmVRQVN2YlVCZWVDSGJDZWxa?= =?utf-8?B?MEd5MnBrSDM3V1pURGtVNWlpekl2VU5LY0VRVzBMbC80cE1Jc29ZTVNNMlhD?= =?utf-8?B?WVRpS0dRVk9oY1ZoWmhieDI4QlNxSWJpb09lNFlFUmJEOXBsbUE5MUN6YWxT?= =?utf-8?B?bk9yUmVrNjZkQzArZGxhU0taMHB6ZWl1YlkvNXEwU2JROUxoTVVTMHVrWTdV?= =?utf-8?B?aDA4eDNTeERyQVA2YVBkcmx3TFJsVkdJdE1tM3ViWXBiTWdiSCt5andsYnMx?= =?utf-8?B?QjhVRW5PSGhiK0Q3cWoyOHM0Zk9JUjJoUjYvRW0zNGZCOStwRm90bnJjL2Fi?= =?utf-8?B?QXVIMXphUHY1TUdkWGRXc05weFZzbytmajdCeUl5ajFGeEk1TkxMRHNiY1Jt?= =?utf-8?B?S0tXQ25vNHdXQlpGSHdJY1V0dldtNGNBUFNLS255b1ZMYjZJVG1BTjBqVXdR?= =?utf-8?B?TmhnM3YrNHNHOFhxSHZDYXFBZWduV0Y5OXFlRlVlRnBITXlkWUpRUjlsQ1Z3?= =?utf-8?B?T3AvMGdsa1lLa2kwRHBNNFUxZnhRQXJibVJFbmVYeWcyazBzT1NlVVZlOS9t?= =?utf-8?B?Wndaa3RoYUZtVmxOVDQwZ0d6akM2VmxQUVYwQm1CZmNDeGFqcFVqdW91b05z?= =?utf-8?B?WFlyeFZmbk5tTDF0ejVWZXZrcXJQdytKWkpXVG13blYzeGJ5VkVvN1lYdC85?= =?utf-8?B?L1ZXZmtHOHYwOCtEbWoySHNYN2FHdEhVY3ZpcGViSW94RzN4YkhIOXBGVmE5?= =?utf-8?B?aXUwRVFLRFNnNDVJQms5N2ZPay9ISGhJTk51b0pNS0E1YUNYWUZEMWFsdGhx?= =?utf-8?B?VUE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: toshiba.co.jp X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYWPR01MB9986.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e9fe240b-ba4c-4a5a-7175-08dd38e852d1 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2025 00:21:02.9455 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f109924e-fb71-4ba0-b2cc-65dcdf6fbe4f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: yWUbZuQ+l19ul2WlBXfasB6yiEHzB70WRMoyZD2evcuupDsH2v7uWjqcW8jifUVYFL0XdLdbYZCP2U4JRTajrEpO9IxgvIjQKdomeExWFiQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSRPR01MB12001 SGVsbG8gTGF1cmVudC4NCg0KVGhhbmsgeW91IGZvciB5b3VyIHJldmlldyBjb21tZW50cy4NCg0K PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMYXVyZW50IFBpbmNoYXJ0IDxs YXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+DQo+IFNlbnQ6IFRodXJzZGF5LCBKYW51 YXJ5IDIsIDIwMjUgMTA6MDggUE0NCj4gVG86IGlzaGlrYXdhIHl1amko55+z5bedIOaCoOWPuCDi l4vvvLLvvKTvvKPilqHvvKHvvKnvvLTvvKPil4vvvKXvvKHplospDQo+IDx5dWppMi5pc2hpa2F3 YUB0b3NoaWJhLmNvLmpwPg0KPiBDYzogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGtl cm5lbC5vcmc+OyBSb2IgSGVycmluZw0KPiA8cm9iaEBrZXJuZWwub3JnPjsgS3J6eXN6dG9mIEtv emxvd3NraSA8a3J6aytkdEBrZXJuZWwub3JnPjsgQ29ub3IgRG9vbGV5DQo+IDxjb25vcitkdEBr ZXJuZWwub3JnPjsgU2FrYXJpIEFpbHVzIDxzYWthcmkuYWlsdXNAbGludXguaW50ZWwuY29tPjsg SGFucw0KPiBWZXJrdWlsIDxodmVya3VpbC1jaXNjb0B4czRhbGwubmw+OyBpd2FtYXRzdSBub2J1 aGlybyjlsqnmnb4g5L+h5rSLIOKXi++8pO+8qe+8tO+8ow0KPiDilqHvvKTvvKnvvLTil4vvvK/v vLPvvLQpIDxub2J1aGlybzEuaXdhbWF0c3VAdG9zaGliYS5jby5qcD47DQo+IGxpbnV4LW1lZGlh QHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4gbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9y Zw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMiA0LzhdIG1lZGlhOiBwbGF0Zm9ybTogdmlzY29u dGk6IEFkZCBUb3NoaWJhIFZpc2NvbnRpDQo+IENTSS0yIFJlY2VpdmVyIGRyaXZlcg0KPiANCj4g SGVsbG8gSXNoaWthd2Etc2FuLA0KPiANCj4gVGhhbmsgeW91IGZvciB0aGUgcGF0Y2guDQo+IA0K PiBPbiBNb24sIE5vdiAyNSwgMjAyNCBhdCAwNjoyMTo0MlBNICswOTAwLCBZdWppIElzaGlrYXdh IHdyb3RlOg0KPiA+IEFkZCBzdXBwb3J0IHRvIE1JUEkgQ1NJLTIgUmVjZWl2ZXIgb24gVG9zaGli YSBWaXNjb250aSBBUk0gU29Dcy4NCj4gPiBUaGlzIGRyaXZlciBpcyB1c2VkIHdpdGggVmlzY29u dGkgVmlkZW8gSW5wdXQgSW50ZXJmYWNlIGRyaXZlci4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6 IFl1amkgSXNoaWthd2EgPHl1amkyLmlzaGlrYXdhQHRvc2hpYmEuY28uanA+DQo+ID4gLS0tDQo+ ID4gQ2hhbmdlbG9nIHYxMjoNCj4gPiAtIFNlcGFyYXRlIENTSTJSWCBkcml2ZXIgYW5kIG1hZGUg aXQgaW5kZXBlbmRlbnQgZHJpdmVyDQo+ID4gLSB2aWlmX2NzaTJyeCBzdWJkZXZpY2UgZHJpdmVy IChpbiB2MTEgcGF0Y2gpIHdhcyByZW1vdmVkLg0KPiA+IC0gZGljdGlvbmFyeSBvcmRlciBhdCBL Y29uZmlnIGFuZCBNYWtlZmlsZQ0KPiA+DQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vS2Nv bmZpZyAgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v TWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vdG9zaGliYS9LY29uZmlnICAgICAgICB8ICAgNiArDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vdG9zaGliYS9NYWtlZmlsZSAgICAgICB8ICAgMiArDQo+ID4gIC4uLi9tZWRpYS9wbGF0 Zm9ybS90b3NoaWJhL3Zpc2NvbnRpL0tjb25maWcgICB8ICAxNiArDQo+ID4gIC4uLi9tZWRpYS9w bGF0Zm9ybS90b3NoaWJhL3Zpc2NvbnRpL01ha2VmaWxlICB8ICAgOCArDQo+ID4gIC4uLi9wbGF0 Zm9ybS90b3NoaWJhL3Zpc2NvbnRpL2NzaTJyeF9kcnYuYyAgICB8IDc5MQ0KPiArKysrKysrKysr KysrKysrKysNCj4gPiAgNyBmaWxlcyBjaGFuZ2VkLCA4MjUgaW5zZXJ0aW9ucygrKQ0KPiA+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90b3NoaWJhL0tjb25maWcN Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdG9zaGliYS9N YWtlZmlsZQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90 b3NoaWJhL3Zpc2NvbnRpL0tjb25maWcNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bWVkaWEvcGxhdGZvcm0vdG9zaGliYS92aXNjb250aS9NYWtlZmlsZQ0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQNCj4gPiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Rvc2hpYmEvdmlzY29udGkvY3Np MnJ4X2Rydi5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9L Y29uZmlnDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcgaW5kZXggODVkMjYy Nzc3NmI2Li43NjFiMTViMDdiOTANCj4gPiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25m aWcNCj4gPiBAQCAtODYsNiArODYsNyBAQCBzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v c2Ftc3VuZy9LY29uZmlnIg0KPiA+ICBzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3Qv S2NvbmZpZyINCj4gPiAgc291cmNlICJkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL0tjb25m aWciDQo+ID4gIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90aS9LY29uZmlnIg0KPiA+ ICtzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdG9zaGliYS9LY29uZmlnIg0KPiA+ICBz b3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vS2NvbmZpZyINCj4gPiAg c291cmNlICJkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZpYS9LY29uZmlnIg0KPiA+ICBzb3VyY2Ug ImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWciDQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vTWFrZWZpbGUNCj4gPiBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vTWFrZWZpbGUgaW5kZXggYWNlNGUzNDQ4M2RkLi45MTcxNDVmZTUxNzENCj4gPiAxMDA2 NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL01ha2VmaWxlDQo+ID4gKysrIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9NYWtlZmlsZQ0KPiA+IEBAIC0yOSw2ICsyOSw3IEBAIG9i ai15ICs9IHNhbXN1bmcvDQo+ID4gIG9iai15ICs9IHN0Lw0KPiA+ICBvYmoteSArPSBzdW54aS8N Cj4gPiAgb2JqLXkgKz0gdGkvDQo+ID4gK29iai15ICs9IHRvc2hpYmEvDQo+ID4gIG9iai15ICs9 IHZlcmlzaWxpY29uLw0KPiA+ICBvYmoteSArPSB2aWEvDQo+ID4gIG9iai15ICs9IHhpbGlueC8N Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90b3NoaWJhL0tjb25maWcN Cj4gPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdG9zaGliYS9LY29uZmlnDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmYwMjk4M2Y0ZmM5Nw0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Rvc2hpYmEv S2NvbmZpZw0KPiA+IEBAIC0wLDAgKzEsNiBAQA0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkNCj4gPiArDQo+ID4gK2NvbW1lbnQgIlRvc2hpYmEgbWVkaWEgcGxh dGZvcm0gZHJpdmVycyINCj4gPiArDQo+ID4gK3NvdXJjZSAiZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS90b3NoaWJhL3Zpc2NvbnRpL0tjb25maWciDQo+ID4gKw0KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3Rvc2hpYmEvTWFrZWZpbGUNCj4gPiBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vdG9zaGliYS9NYWtlZmlsZQ0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g aW5kZXggMDAwMDAwMDAwMDAwLi4yYmNlODVlZjNiNDgNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90b3NoaWJhL01ha2VmaWxlDQo+ID4gQEAgLTAs MCArMSwyIEBADQo+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0K PiANCj4gQSBibGFuayBsaW5lIHdvdWxkIGJlIG5pY2UgaGVyZS4NCj4gDQoNCkknbGwgYWRkIGEg YmxhbmsgbGluZS4NCg0KPiA+ICtvYmoteSArPSB2aXNjb250aS8NCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90b3NoaWJhL3Zpc2NvbnRpL0tjb25maWcNCj4gPiBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vdG9zaGliYS92aXNjb250aS9LY29uZmlnDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmU1YzkyZDU5OGY4Yg0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Rvc2hpYmEv dmlzY29udGkvS2NvbmZpZw0KPiA+IEBAIC0wLDAgKzEsMTYgQEANCj4gPiArIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+IA0KPiBBIGJsYW5rIGxpbmUgd291bGQgYmUg bmljZSBoZXJlIHRvby4NCj4gDQoNCkknbGwgYWRkIGEgYmxhbmsgbGluZSBoZXJlIHRvby4NCg0K PiA+ICtjb25maWcgVklERU9fVklTQ09OVElfQ1NJMlJYDQo+ID4gKwl0cmlzdGF0ZSAiVmlzY29u dGkgTUlQSSBDU0ktMiBSZWNlaXZlciBkcml2ZXIiDQo+ID4gKwlkZXBlbmRzIG9uIFY0TF9QTEFU Rk9STV9EUklWRVJTDQo+ID4gKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBPRg0KPiA+ICsJZGVw ZW5kcyBvbiBBUkNIX1ZJU0NPTlRJIHx8IENPTVBJTEVfVEVTVA0KPiA+ICsJc2VsZWN0IE1FRElB X0NPTlRST0xMRVINCj4gPiArCXNlbGVjdCBWSURFT19WNEwyX1NVQkRFVl9BUEkNCj4gPiArCXNl bGVjdCBWNEwyX0ZXTk9ERQ0KPiA+ICsJaGVscA0KPiA+ICsJICBTdXBwb3J0IGZvciBUb3NoaWJh IFZpc2NvbnRpIE1JUEkgQ1NJLTIgcmVjZWl2ZXIsDQo+ID4gKwkgIHdoaWNoIGlzIHVzZWQgd2l0 aCBWaXNjb250aSBDYW1lcmEgSW50ZXJmYWNlIGRyaXZlci4NCj4gPiArDQo+ID4gKwkgIFRoaXMg ZHJpdmVyIHlpZWxkcyAxIHN1YmRldmljZSBub2RlIGZvciBhIGhhcmR3YXJlIGluc3RhbmNlLg0K PiA+ICsJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJl OiB0aGUNCj4gPiArCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpc2NvbnRpLWNzaTJyeC4NCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90b3NoaWJhL3Zpc2NvbnRpL01h a2VmaWxlDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Rvc2hpYmEvdmlzY29udGkvTWFr ZWZpbGUNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4u NjJhMDI5Mzc2MTM0DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vdG9zaGliYS92aXNjb250aS9NYWtlZmlsZQ0KPiA+IEBAIC0wLDAgKzEsOCBAQA0K PiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gKyMNCj4gPiArIyBN YWtlZmlsZSBmb3IgdGhlIFZpc2NvbnRpIHZpZGVvIGlucHV0IGRldmljZSBkcml2ZXIgIw0KPiA+ ICsNCj4gPiArdmlzY29udGktY3NpMnJ4LW9ianMgPSBjc2kycnhfZHJ2Lm8NCj4gPiArDQo+ID4g K29iai0kKENPTkZJR19WSURFT19WSVNDT05USV9DU0kyUlgpICs9IHZpc2NvbnRpLWNzaTJyeC5v DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdG9zaGliYS92aXNjb250 aS9jc2kycnhfZHJ2LmMNCj4gPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdG9zaGliYS92aXNj b250aS9jc2kycnhfZHJ2LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAw MDAwMDAwMDAwMC4uOTQ1Njc5NjM4NzJhDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vdG9zaGliYS92aXNjb250aS9jc2kycnhfZHJ2LmMNCj4gPiBA QCAtMCwwICsxLDc5MSBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCBPUiBCU0QtMi1DbGF1c2UNCj4gPiArLyogVG9zaGliYSBWaXNjb250aSBWaWRlbyBDYXB0dXJl IFN1cHBvcnQNCj4gDQo+IC8qDQo+ICAqIFRvc2hpYmEgVmlzY29udGkgVmlkZW8gQ2FwdHVyZSBT dXBwb3J0DQo+ICAqDQo+IA0KDQpJJ2xsIGZpeCBpdC4gQWxzbyBJJ2xsIGNoZWNrIGZvciB0aGUg c2ltaWxhciBjYXNlcy4NCg0KPiA+ICsgKg0KPiA+ICsgKiAoQykgQ29weXJpZ2h0IDIwMjQgVE9T SElCQSBDT1JQT1JBVElPTg0KPiA+ICsgKiAoQykgQ29weXJpZ2h0IDIwMjQgVG9zaGliYSBFbGVj dHJvbmljIERldmljZXMgJiBTdG9yYWdlDQo+ID4gKyBDb3Jwb3JhdGlvbiAqLw0KPiA+ICsNCj4g PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1 cHQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9vZl9ncmFwaC5oPg0KPiANCj4gWW91IGRvbid0IG5lZWQgdGhvc2UgdHdvIGhlYWRlcnMuIFlv dSBob3dldmVyIG5lZWQgdG8gaW5jbHVkZQ0KPiANCj4gLSBsaW51eC9kZXZpY2UuaCAoZm9yIGRl dm1fa3phbGxvYykNCj4gLSBsaW51eC9wcm9wZXJ0eS5oIChmb3IgdGhlIGZ3bm9kZV8qIEFQSSkN Cj4gDQoNCkknbGwgdXBkYXRlIHRoZSBpbmNsdWRlIGxpc3QuDQoNCj4gPiArI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPG1lZGlhL21pcGkt Y3NpMi5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4NCj4gPiArI2luY2x1 ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2Rl Lmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPg0KPiA+ICsNCj4gPiArLyog Q1NJMkhPU1QgcmVnaXN0ZXIgc3BhY2UgKi8NCj4gPiArI2RlZmluZSBSRUdfQ1NJMlJYX05MQU5F UwkgMHg0DQo+ID4gKyNkZWZpbmUgUkVHX0NTSTJSWF9SRVNFVE4JIDB4OA0KPiA+ICsjZGVmaW5l IFJFR19DU0kyUlhfSU5UX1NUX01BSU4JIDB4Yw0KPiA+ICsjZGVmaW5lIFJFR19DU0kyUlhfREFU QV9JRFNfMQkgMHgxMA0KPiA+ICsjZGVmaW5lIFJFR19DU0kyUlhfREFUQV9JRFNfMgkgMHgxNA0K PiA+ICsjZGVmaW5lIFJFR19DU0kyUlhfUEhZX1NIVVRET1dOWiAweDQwDQo+ID4gKyNkZWZpbmUg UkVHX0NTSTJSWF9QSFlfUlNUWgkgMHg0NA0KPiA+ICsNCj4gPiArLyogYWNjZXNzIHRvIGRwaHkg ZXh0ZXJuYWwgcmVnaXN0ZXJzICovDQo+IA0KPiAvKiBBY2Nlc3MgdG8gZHBoeSBleHRlcm5hbCBy ZWdpc3RlcnMgKi8NCj4gDQo+IFNhbWUgaW4gb3RoZXIgY29tbWVudHMgYmVsb3cuDQo+IA0KDQpJ J2xsIGZpeCBpdC4gQWxzbyBJJ2xsIGNoZWNrIGZvciB0aGUgc2ltaWxhciBjYXNlcy4NCg0KPiA+ ICsjZGVmaW5lIFJFR19DU0kyUlhfUEhZX1RFU1RDVFJMMCAweDUwDQo+ID4gKyNkZWZpbmUgQklU X1RFU1RDVFJMMF9DTEtfMAkgMA0KPiA+ICsjZGVmaW5lIEJJVF9URVNUQ1RSTDBfQ0xLXzEJIEJJ VCgxKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBSRUdfQ1NJMlJYX1BIWV9URVNUQ1RSTDEgMHg1NA0K PiA+ICsjZGVmaW5lIEJJVF9URVNUQ1RSTDFfQUREUgkgQklUKDE2KQ0KPiA+ICsjZGVmaW5lIE1B U0tfVEVTVENUUkwxX0RJTgkgMHhmZg0KPiA+ICsjZGVmaW5lIE1BU0tfVEVTVENUUkwxX0RPVVQJ IDB4ZmYwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBSRUdfQ1NJMlJYX0lOVF9TVF9QSFlfRkFUQUwg IDB4ZTAgI2RlZmluZQ0KPiA+ICtSRUdfQ1NJMlJYX0lOVF9NU0tfUEhZX0ZBVEFMIDB4ZTQNCj4g PiArI2RlZmluZSBNQVNLX1BIWV9GQVRBTF9BTEwJICAgICAweDAwMDAwMDBmDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFJFR19DU0kyUlhfSU5UX1NUX1BLVF9GQVRBTCAgMHhmMCAjZGVmaW5lDQo+ID4g K1JFR19DU0kyUlhfSU5UX01TS19QS1RfRkFUQUwgMHhmNA0KPiA+ICsjZGVmaW5lIE1BU0tfUEtU X0ZBVEFMX0FMTAkgICAgIDB4MDAwMTAwMGYNCj4gPiArDQo+ID4gKyNkZWZpbmUgUkVHX0NTSTJS WF9JTlRfU1RfRlJBTUVfRkFUQUwgIDB4MTAwICNkZWZpbmUNCj4gPiArUkVHX0NTSTJSWF9JTlRf TVNLX0ZSQU1FX0ZBVEFMIDB4MTA0DQo+ID4gKyNkZWZpbmUgTUFTS19GUkFNRV9GQVRBTF9BTEwJ ICAgICAgIDB4MDAwZjBmMGYNCj4gPiArDQo+ID4gKyNkZWZpbmUgUkVHX0NTSTJSWF9JTlRfU1Rf UEhZICAweDExMA0KPiA+ICsjZGVmaW5lIFJFR19DU0kyUlhfSU5UX01TS19QSFkgMHgxMTQNCj4g PiArI2RlZmluZSBNQVNLX1BIWV9FUlJPUl9BTEwgICAgIDB4MDAwZjAwMGYNCj4gPiArDQo+ID4g KyNkZWZpbmUgUkVHX0NTSTJSWF9JTlRfU1RfUEtUICAweDEyMA0KPiA+ICsjZGVmaW5lIFJFR19D U0kyUlhfSU5UX01TS19QS1QgMHgxMjQNCj4gPiArI2RlZmluZSBNQVNLX1BLVF9FUlJPUl9BTEwg ICAgIDB4MDAwZjAwMGYNCj4gPiArDQo+ID4gKyNkZWZpbmUgUkVHX0NTSTJSWF9JTlRfU1RfTElO RQkweDEzMA0KPiA+ICsjZGVmaW5lIFJFR19DU0kyUlhfSU5UX01TS19MSU5FIDB4MTM0DQo+ID4g KyNkZWZpbmUgTUFTS19MSU5FX0VSUk9SX0FMTAkweDAwZmYwMGZmDQo+ID4gKw0KPiA+ICsvKiBE UEhZIHJlZ2lzdGVyIHNwYWNlICovDQo+ID4gK2VudW0gZHBoeV90ZXN0Y29kZSB7DQo+ID4gKwlE SUdfVEVTVENPREVfRVhUID0gMCwNCj4gPiArCURJR19TWVNfMCA9IDB4MDAxLA0KPiA+ICsJRElH X1NZU18xID0gMHgwMDIsDQo+ID4gKwlESUdfU1lTXzMgPSAweDAwNCwNCj4gPiArCURJR19TWVNf NyA9IDB4MDA4LA0KPiA+ICsJRElHX1JYX1NUQVJUVVBfT1ZSXzIgPSAweDBlMiwNCj4gPiArCURJ R19SWF9TVEFSVFVQX09WUl8zID0gMHgwZTMsDQo+ID4gKwlESUdfUlhfU1RBUlRVUF9PVlJfNCA9 IDB4MGU0LA0KPiA+ICsJRElHX1JYX1NUQVJUVVBfT1ZSXzUgPSAweDBlNSwNCj4gPiArCURJR19D Ql8yID0gMHgxYWMsDQo+ID4gKwlESUdfVEVSTV9DQUxfMCA9IDB4MjIwLA0KPiA+ICsJRElHX1RF Uk1fQ0FMXzEgPSAweDIyMSwNCj4gPiArCURJR19URVJNX0NBTF8yID0gMHgyMjIsDQo+ID4gKwlE SUdfQ0xLTEFORV9MQU5FXzYgPSAweDMwNywNCj4gPiArCURJR19DTEtMQU5FX09GRlNFVF9DQUxf MCA9IDB4MzlkLA0KPiA+ICsJRElHX0xBTkUwX09GRlNFVF9DQUxfMCA9IDB4NTlmLA0KPiA+ICsJ RElHX0xBTkUwX0RETF8wID0gMHg1ZTAsDQo+ID4gKwlESUdfTEFORTFfT0ZGU0VUX0NBTF8wID0g MHg3OWYsDQo+ID4gKwlESUdfTEFORTFfRERMXzAgPSAweDdlMCwNCj4gPiArCURJR19MQU5FMl9P RkZTRVRfQ0FMXzAgPSAweDk5ZiwNCj4gPiArCURJR19MQU5FMl9ERExfMCA9IDB4OWUwLA0KPiA+ ICsJRElHX0xBTkUzX09GRlNFVF9DQUxfMCA9IDB4YjlmLA0KPiA+ICsJRElHX0xBTkUzX0RETF8w ID0gMHhiZTAsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNZU18wX0hTRlJFUVJBTkdF X09WUiAgQklUKDUpDQo+ID4gKyNkZWZpbmUgU1lTXzNfTk9fUkVYVAkgICAgICAgQklUKDQpDQo+ ID4gKyNkZWZpbmUgU1lTXzdfUkVTRVJWRUQJICAgICAgIEZJRUxEX1BSRVAoMHgxZiwgMHgwYykN Cj4gPiArI2RlZmluZSBTWVNfN19ERVNLRVdfUE9MICAgICAgIEJJVCg1KQ0KPiA+ICsjZGVmaW5l IFNUQVJUVVBfT1ZSXzRfQ05UVkFMICAgRklFTERfUFJFUCgweDcwLCAweDAxKQ0KPiA+ICsjZGVm aW5lIFNUQVJUVVBfT1ZSXzRfRERMX0VOICAgQklUKDApDQo+ID4gKyNkZWZpbmUgU1RBUlRVUF9P VlJfNV9CWVBBU1MgICBCSVQoMCkNCj4gPiArI2RlZmluZSBDQl8yX0xQUlhfQklBUwkgICAgICAg QklUKDYpDQo+ID4gKyNkZWZpbmUgQ0JfMl9SRVNFUlZFRAkgICAgICAgRklFTERfUFJFUCgweDNm LCAweDBiKQ0KPiA+ICsjZGVmaW5lIENMS0xBTkVfUlhIU19QVUxMX0xPTkcgQklUKDcpDQo+ID4g Kw0KPiA+ICsvKiBiaXQgbWFzayBmb3IgY2FsaWJyYXRpb24gcmVzdWx0IHJlZ2lzdGVycyAqLyAj ZGVmaW5lDQo+ID4gK01BU0tfVEVSTV9DQUxfRVJSICAwICNkZWZpbmUgTUFTS19URVJNX0NBTF9E T05FIEJJVCg3KQ0KPiA+ICsjZGVmaW5lIE1BU0tfQ0xLX0NBTF9FUlIgICBCSVQoNCkNCj4gPiAr I2RlZmluZSBNQVNLX0NMS19DQUxfRE9ORSAgQklUKDApDQo+ID4gKyNkZWZpbmUgTUFTS19DQUxf RVJSCSAgIEJJVCgyKQ0KPiA+ICsjZGVmaW5lIE1BU0tfQ0FMX0RPTkUJICAgQklUKDEpDQo+ID4g KyNkZWZpbmUgTUFTS19ERExfRVJSCSAgIEJJVCgxKQ0KPiA+ICsjZGVmaW5lIE1BU0tfRERMX0RP TkUJICAgQklUKDIpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZJU0NPTlRJX0NTSTJSWF9FUlJPUl9N T05JVE9SU19OVU0gOA0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCB2aXNjb250aV9j c2kycnhfbGluZV9lcnJfdGFyZ2V0DQo+ID4gKyAqDQo+ID4gKyAqIFZpcnR1YWwgQ2hhbm5lbCBh bmQgRGF0YSBUeXBlIHBhaXIgZm9yIENTSTJSWCBsaW5lIGVycm9yIG1vbml0b3INCj4gPiArICoN Cj4gPiArICogV2hlbiAwIGlzIHNldCB0byBkdCwgbGluZSBlcnJvciBkZXRlY3Rpb24gaXMgZGlz YWJsZWQuDQo+ID4gKyAqDQo+ID4gKyAqIEB2YzogVmlydHVhbCBDaGFubmVsIHRvIG1vbml0b3I7 IFJhbmdlIDAuLjMNCj4gPiArICogQGR0OiBEYXRhIFR5cGUgdG8gbW9uaXRvcjsgUmFuZ2UgMCwg MHgxMC4uMHgzZiAgKi8gc3RydWN0DQo+ID4gK3Zpc2NvbnRpX2NzaTJyeF9saW5lX2Vycl90YXJn ZXQgew0KPiA+ICsJdTMyIHZjW1ZJU0NPTlRJX0NTSTJSWF9FUlJPUl9NT05JVE9SU19OVU1dOw0K PiA+ICsJdTMyIGR0W1ZJU0NPTlRJX0NTSTJSWF9FUlJPUl9NT05JVE9SU19OVU1dOw0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArI2RlZmluZSBDU0kyUlhfTUlOX0RBVEFfUkFURSA4MFUNCj4gPiArI2Rl ZmluZSBDU0kyUlhfTUFYX0RBVEFfUkFURSAxNTAwVQ0KPiA+ICsNCj4gPiArI2RlZmluZSBWSVND T05USV9DU0kyUlhfUEFEX1NJTksgMA0KPiA+ICsjZGVmaW5lIFZJU0NPTlRJX0NTSTJSWF9QQURf U1JDCSAxDQo+ID4gKyNkZWZpbmUgVklTQ09OVElfQ1NJMlJYX1BBRF9OVU0JIDINCj4gPiArDQo+ ID4gKyNkZWZpbmUgVklTQ09OVElfQ1NJMlJYX0RFRl9XSURUSCAgMTkyMCAjZGVmaW5lDQo+ID4g K1ZJU0NPTlRJX0NTSTJSWF9ERUZfSEVJR0hUIDEwODAgI2RlZmluZQ0KPiBWSVNDT05USV9DU0ky UlhfTUlOX1dJRFRIDQo+ID4gKzY0MCAjZGVmaW5lIFZJU0NPTlRJX0NTSTJSWF9NQVhfV0lEVEgg IDM4NDAgI2RlZmluZQ0KPiA+ICtWSVNDT05USV9DU0kyUlhfTUlOX0hFSUdIVCA0ODAgI2RlZmlu ZQ0KPiBWSVNDT05USV9DU0kyUlhfTUFYX0hFSUdIVA0KPiA+ICsyMTYwDQo+ID4gKw0KPiA+ICtz dHJ1Y3QgdmlzY29udGlfY3NpMnJ4IHsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiAr CXZvaWQgX19pb21lbSAqYmFzZTsNCj4gPiArDQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3Vi ZGV2Ow0KPiA+ICsJc3RydWN0IG1lZGlhX3BhZCBwYWRzW1ZJU0NPTlRJX0NTSTJSWF9QQURfTlVN XTsNCj4gPiArCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyIG5vdGlmaWVyOw0KPiA+ICsJc3Ry dWN0IHY0bDJfc3ViZGV2ICpyZW1vdGU7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcmVtb3RlX3BhZDsN Cj4gPiArDQo+ID4gKwl1bnNpZ25lZCBpbnQgbGFuZXM7DQo+ID4gKw0KPiA+ICsJdW5zaWduZWQg aW50IGlycTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZpc2Nv bnRpX2NzaTJyeCAqbm90aWZpZXJfdG9fY3NpMihzdHJ1Y3QNCj4gPiArdjRsMl9hc3luY19ub3Rp ZmllciAqbikgew0KPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgdmlzY29udGlf Y3NpMnJ4LCBub3RpZmllcik7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZp c2NvbnRpX2NzaTJyeCAqc2RfdG9fY3NpMihzdHJ1Y3QgdjRsMl9zdWJkZXYNCj4gPiArKnNkKSB7 DQo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4LCBz dWJkZXYpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgdmlzY29udGlfY3NpMnJ4 X3dyaXRlKHN0cnVjdCB2aXNjb250aV9jc2kycngNCj4gPiArKnByaXYsIHUzMiByZWdpZCwgdTMy IHZhbCkNCj4gDQo+IFRoZSBtZWRpYSBzdWJzeXN0ZW0gdHJpZXMgdG8gbGltaXQgbGluZSBsZW5n dGhzIHRvIDgwIGNvbHVtbnMsIHdoZW4gaXQgZG9lc24ndA0KPiBoaW5kZXIgcmVhZGFiaWxpdHku IEZvciBpbnN0YW5jZSBoZXJlIHlvdSBjb3VsZCB3cml0ZQ0KPiANCj4gc3RhdGljIGlubGluZSB2 b2lkIHZpc2NvbnRpX2NzaTJyeF93cml0ZShzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4ICpwcml2LA0K PiAJCQkJCSB1MzIgcmVnaWQsIHUzMiB2YWwpDQo+IA0KPiBJZiBsaW5lcyBhcmUganVzdCBhIGZl dyBjaGFyYWN0ZXJzIG92ZXIgODAgY29sdW1ucyB0aGUgbmVlZCB0byBicmVhayB0aGVtIGlzIGxl c3MNCj4gdGhhbiBpZiB0aGV5IGFwcHJvYWNoIDEwMCBjb2x1bW5zLiBJdCdzIGEgInNvZnQgbGlt aXQiDQo+IHBvbGljeSB0byB0cnkgYW5kIG1heGltaXplIHJlYWRhYmlsaXR5Lg0KPiANCg0KSSB1 bmRlcnN0YW5kIHRoZSBwb2xpY3kuDQpJJ2xsIGxpbWl0IGVhY2ggbGluZSB0byBhcm91bmQgODAg Y29sdW1ucy4NCg0KPiA+ICt7DQo+ID4gKwl3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgcmVnaWQp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHUzMiB2aXNjb250aV9jc2kycnhf cmVhZChzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4ICpwcml2LA0KPiA+ICt1MzIgcmVnaWQpIHsNCj4g PiArCXJldHVybiByZWFkbChwcml2LT5iYXNlICsgcmVnaWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW5saW5lIHZvaWQgdGlja190ZXN0Y2xrKHN0cnVjdCB2aXNjb250aV9jc2kycngg KnByaXYpDQo+IA0KPiBEb24ndCBpbmxpbmUgdGhpcyBvciB0aGUgbmV4dCBmdW5jdGlvbiwgY29t cGlsZXJzIGFyZSBzbWFydCBlbm91Z2ggdG8gZGVjaWRlIGJ5DQo+IHRoZW1zZWx2ZXMgdGhlc2Ug ZGF5cy4NCj4gDQoNCkknbGwgcmVtb3ZlIGlubGluZSBzcGVjaWZpZXIuDQpEbyBJIGFsc28gbmVl ZCB0byByZW1vdmUgaXQgZnJvbSBvdGhlciBtdWx0aS1saW5lIGZ1bmN0aW9ucz8NCg0KPiA+ICt7 DQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9QSFlfVEVTVENU UkwwLA0KPiBCSVRfVEVTVENUUkwwX0NMS18xKTsNCj4gPiArCXZpc2NvbnRpX2NzaTJyeF93cml0 ZShwcml2LCBSRUdfQ1NJMlJYX1BIWV9URVNUQ1RSTDAsDQo+ID4gK0JJVF9URVNUQ1RSTDBfQ0xL XzApOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RwaHlfYWRkcihzdHJ1 Y3QgdmlzY29udGlfY3NpMnJ4ICpwcml2LCB1MzINCj4gPiArdGVzdF9tb2RlKSB7DQo+ID4gKwkv KiBzZWxlY3QgdGVzdGNvZGUgRXggc3BhY2Ugd2l0aCB0b3AgNGJpdHMgb2YgdGVzdF9tb2RlICov DQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9QSFlfVEVTVENU UkwxLA0KPiA+ICsJCQkgICAgICBCSVRfVEVTVENUUkwxX0FERFIgfA0KPiBESUdfVEVTVENPREVf RVhUKTsNCj4gPiArCXRpY2tfdGVzdGNsayhwcml2KTsNCj4gDQo+IElmIHdyaXRpbmcgdG8gUkVH X0NTSTJSWF9QSFlfVEVTVENUUkwxIGFsd2F5cyBuZWVkcyB0byBiZSBmb2xsb3dlZCBieSBhDQo+ IGNhbGwgdG8gdGlja190ZXN0Y2xrKCksIEkgd291bGQgY3JlYXRlIGEgdmlzY29udGlfY3NpMnJ4 X2RwaHlfd3JpdGUoKQ0KPiBmdW5jdGlvbjoNCj4gDQo+IHN0YXRpYyB2b2lkIHZpc2NvbnRpX2Nz aTJyeF9kcGh5X3dyaXRlKHN0cnVjdCB2aXNjb250aV9jc2kycnggKnByaXYsIHUzMiBkYXRhKSB7 DQo+IAl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9QSFlfVEVTVENUUkwx LCBkYXRhKTsNCj4gCXZpc2NvbnRpX2NzaTJyeF93cml0ZShwcml2LCBSRUdfQ1NJMlJYX1BIWV9U RVNUQ1RSTDAsDQo+IEJJVF9URVNUQ1RSTDBfQ0xLXzEpOw0KPiAJdmlzY29udGlfY3NpMnJ4X3dy aXRlKHByaXYsIFJFR19DU0kyUlhfUEhZX1RFU1RDVFJMMCwNCj4gQklUX1RFU1RDVFJMMF9DTEtf MCk7IH0NCj4gDQoNClRoZSB3cml0aW5nIHRvIFJFR19DU0kyUlhfUEhZX1RFU1RDVFJMMSBpcyBh bHdheXMgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIHRpY2tfdGVzdGNsaygpLiBUaGlzIHNlcXVlbmNl IGNhbiBiZSBtZXJnZWQuDQpJJ2xsIGFkZCB2aXNjb250aV9jc2kycnhfZHBoeV93cml0ZSgpLg0K DQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9QSFlfVEVTVENU UkwxLA0KPiA+ICtGSUVMRF9HRVQoMHhmMDAsIHRlc3RfbW9kZSkpOw0KPiANCj4gQW5kIGhlcmUN Cj4gDQo+IAl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9QSFlfVEVTVENU UkwxLA0KPiAJCQkgICAgICBGSUVMRF9HRVQoMHhmMDAsIHRlc3RfbW9kZSkpOw0KPiANCj4gVGhl cmUgYXJlIG1hbnkgb3RoZXIgcGxhY2VzIGJlbG93IHRoYXQgZ28gb3ZlciA4MCBjb2x1bW5zLg0K PiANCg0KSSB1bmRlcnN0YW5kIHRoZSBwb2xpY3kuDQpJJ2xsIHVwZGF0ZSB0aGUgY29kZSBub3Qg dG8gZ28gb3ZlciA4MCBjb2x1bW5zLg0KDQo+ID4gKwl0aWNrX3Rlc3RjbGsocHJpdik7DQo+ID4g Kw0KPiA+ICsJLyogc2V0IGJvdHRvbSA4Yml0IG9mIHRlc3RfbW9kZSAqLw0KPiA+ICsJdmlzY29u dGlfY3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfUEhZX1RFU1RDVFJMMSwNCj4gPiArCQkJ ICAgICAgQklUX1RFU1RDVFJMMV9BRERSIHwgRklFTERfR0VUKDB4ZmYsDQo+IHRlc3RfbW9kZSkp Ow0KPiA+ICsJdGlja190ZXN0Y2xrKHByaXYpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCB3cml0ZV9kcGh5X3BhcmFtKHN0cnVjdCB2aXNjb250aV9jc2kycnggKnByaXYsIHUzMg0K PiA+ICt0ZXN0X21vZGUsIHU4IHRlc3RfaW4pIHsNCj4gPiArCXNldF9kcGh5X2FkZHIocHJpdiwg dGVzdF9tb2RlKTsNCj4gPiArDQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVH X0NTSTJSWF9QSFlfVEVTVENUUkwxLA0KPiAodTMyKXRlc3RfaW4pOw0KPiANCj4gSXMgdGhlICh1 OCkgZXhwbGljaXQgY2FzdCBuZWVkZWQgPw0KPiANCg0KVGhlcmUncyBubyBuZWVkIGZvciBpdC4g SSdsbCByZW1vdmUgdGhlIGNhc3Qgb3BlcmF0b3IuDQoNCj4gPiArCXRpY2tfdGVzdGNsayhwcml2 KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RydWN0IGNzaTJyeF9kcGh5X2hzX2luZm8gew0KPiA+ ICsJdTMyIHJhdGU7DQo+ID4gKwl1MzIgaHNmcmVxcmFuZ2U7DQo+ID4gKwl1MzIgb3NjX2ZyZXFf dGFyZ2V0Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjc2kycnhf ZHBoeV9oc19pbmZvIGRwaHlfaHNfaW5mb1tdID0gew0KPiA+ICsJeyA4MCwgMHgwLCAweDFjYyB9 LCAgIHsgODUsIDB4MTAsIDB4MWNjIH0sICAgeyA5NSwgMHgyMCwgMHgxY2MgfSwgICB7IDEwNSwN Cj4gMHgzMCwgMHgxY2MgfSwNCj4gPiArCXsgMTE1LCAweDEsIDB4MWNjIH0sICB7IDEyNSwgMHgx MSwgMHgxY2MgfSwgIHsgMTM1LCAweDIxLCAweDFjYyB9LCAgeyAxNDUsDQo+IDB4MzEsIDB4MWNj IH0sDQo+ID4gKwl7IDE1NSwgMHgyLCAweDFjYyB9LCAgeyAxNjUsIDB4MTIsIDB4MWNjIH0sICB7 IDE3NSwgMHgyMiwgMHgxY2MgfSwgIHsgMTg1LA0KPiAweDMyLCAweDFjYyB9LA0KPiA+ICsJeyAx OTgsIDB4MywgMHgxY2MgfSwgIHsgMjEzLCAweDEzLCAweDFjYyB9LCAgeyAyMjgsIDB4MjMsIDB4 MWNjIH0sICB7IDI0MywNCj4gMHgzMywgMHgxY2MgfSwNCj4gPiArCXsgMjYzLCAweDQsIDB4MWNj IH0sICB7IDI4OCwgMHgxNCwgMHgxY2MgfSwgIHsgMzEzLCAweDI1LCAweDFjYyB9LCAgeyAzMzgs DQo+IDB4MzUsIDB4MWNjIH0sDQo+ID4gKwl7IDM3NSwgMHg1LCAweDFjYyB9LCAgeyA0MjUsIDB4 MTYsIDB4MWNjIH0sICB7IDQ3NSwgMHgyNiwgMHgxY2MgfSwgIHsgNTI1LA0KPiAweDM3LCAweDFj YyB9LA0KPiA+ICsJeyA1NzUsIDB4NywgMHgxY2MgfSwgIHsgNjI1LCAweDE4LCAweDFjYyB9LCAg eyA2NzUsIDB4MjgsIDB4MWNjIH0sICB7IDcyNSwNCj4gMHgzOSwgMHgxY2MgfSwNCj4gPiArCXsg Nzc1LCAweDksIDB4MWNjIH0sICB7IDgyNSwgMHgxOSwgMHgxY2MgfSwgIHsgODc1LCAweDI5LCAw eDFjYyB9LCAgeyA5MjUsDQo+IDB4M2EsIDB4MWNjIH0sDQo+ID4gKwl7IDk3NSwgMHhhLCAweDFj YyB9LCAgeyAxMDI1LCAweDFhLCAweDFjYyB9LCB7IDEwNzUsIDB4MmEsIDB4MWNjIH0sIHsgMTEy NSwNCj4gMHgzYiwgMHgxY2MgfSwNCj4gPiArCXsgMTE3NSwgMHhiLCAweDFjYyB9LCB7IDEyMjUs IDB4MWIsIDB4MWNjIH0sIHsgMTI3NSwgMHgyYiwgMHgxY2MgfSwgeyAxMzI1LA0KPiAweDNjLCAw eDFjYyB9LA0KPiA+ICsJeyAxMzc1LCAweGMsIDB4MWNjIH0sIHsgMTQyNSwgMHgxYywgMHgxY2Mg fSwgeyAxNDc1LCAweDJjLCAweDFjYyB9DQo+IA0KPiBvc2NfZnJlcV90YXJnZXQgc2VlbXMgdG8g YWx3YXlzIGJlIDB4MWNjLCBkb2VzIGl0IGhhdmUgdG8gYmUgc3RvcmVkIGluIHRoaXMNCj4gdGFi bGUgPw0KPiANCg0KSSBjaGVja2VkIHRoZSBkb2N1bWVudCBhbmQgZm91bmQgdGhhdCBvc2NfZnJl cV90YXJnZXQgaXMgYWx3YXlzIDB4MWNjIGZvciB0ZXN0ZWQgY2FzZXMuDQpJJ2xsIHJlbW92ZSB0 aGUgbWVtYmVyIGZyb20gdGhlIHRhYmxlIGFuZCBtYWtlIGl0IGEgY29uc3RhbnQgdmFsdWUuDQoN Cj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGdldF9kcGh5X2hzX3RyYW5zZmVyX2lu Zm8odTMyIGRwaHlfcmF0ZSwgdTMyDQo+ID4gKypoc2ZyZXFyYW5nZSwgdTMyICpvc2NfZnJlcV90 YXJnZXQpIHsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDE7 IGkgPCBBUlJBWV9TSVpFKGRwaHlfaHNfaW5mbyk7IGkrKykgew0KPiA+ICsJCWlmIChkcGh5X3Jh dGUgPCBkcGh5X2hzX2luZm9baV0ucmF0ZSkgew0KPiA+ICsJCQkqaHNmcmVxcmFuZ2UgPSBkcGh5 X2hzX2luZm9baSAtIDFdLmhzZnJlcXJhbmdlOw0KPiA+ICsJCQkqb3NjX2ZyZXFfdGFyZ2V0ID0g ZHBoeV9oc19pbmZvW2kgLQ0KPiAxXS5vc2NfZnJlcV90YXJnZXQ7DQo+ID4gKwkJCXJldHVybjsN Cj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogbm90IGZvdW5kOyByZXR1cm4gdGhl IGxhcmdlc3QgZW50cnkgKi8NCj4gPiArCSpoc2ZyZXFyYW5nZSA9IGRwaHlfaHNfaW5mb1tBUlJB WV9TSVpFKGRwaHlfaHNfaW5mbykgLQ0KPiAxXS5oc2ZyZXFyYW5nZTsNCj4gPiArCSpvc2NfZnJl cV90YXJnZXQgPSBkcGh5X2hzX2luZm9bQVJSQVlfU0laRShkcGh5X2hzX2luZm8pIC0NCj4gPiAr MV0ub3NjX2ZyZXFfdGFyZ2V0OyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aXNjb250aV9j c2kycnhfc2V0X2RwaHlfcmF0ZShzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4DQo+ID4gKypwcml2LCB1 MzIgZHBoeV9yYXRlKSB7DQo+ID4gKwl1MzIgaHNmcmVxcmFuZ2UsIG9zY19mcmVxX3RhcmdldDsN Cj4gPiArDQo+ID4gKwlnZXRfZHBoeV9oc190cmFuc2Zlcl9pbmZvKGRwaHlfcmF0ZSwgJmhzZnJl cXJhbmdlLA0KPiA+ICsmb3NjX2ZyZXFfdGFyZ2V0KTsNCj4gPiArDQo+ID4gKwl3cml0ZV9kcGh5 X3BhcmFtKHByaXYsIERJR19TWVNfMSwgKHU4KWhzZnJlcXJhbmdlKTsNCj4gDQo+IEkgZG9uJ3Qg dGhpbmsgdGhlIGV4cGxpY2l0IGNhc3QgaXMgbmVlZGVkIGhlcmUgZWl0aGVyLg0KPiANCg0KSSds bCByZW1vdmUgdGhlIGNhc3Qgb3BlcmF0b3IuDQoNCj4gPiArCXdyaXRlX2RwaHlfcGFyYW0ocHJp diwgRElHX1NZU18wLCBTWVNfMF9IU0ZSRVFSQU5HRV9PVlIpOw0KPiA+ICsJd3JpdGVfZHBoeV9w YXJhbShwcml2LCBESUdfUlhfU1RBUlRVUF9PVlJfNSwNCj4gU1RBUlRVUF9PVlJfNV9CWVBBU1Mp Ow0KPiA+ICsJd3JpdGVfZHBoeV9wYXJhbShwcml2LCBESUdfUlhfU1RBUlRVUF9PVlJfNCwNCj4g U1RBUlRVUF9PVlJfNF9DTlRWQUwpOw0KPiA+ICsJd3JpdGVfZHBoeV9wYXJhbShwcml2LCBESUdf Q0JfMiwgQ0JfMl9MUFJYX0JJQVMgfA0KPiBDQl8yX1JFU0VSVkVEKTsNCj4gPiArCXdyaXRlX2Rw aHlfcGFyYW0ocHJpdiwgRElHX1NZU183LCBTWVNfN19ERVNLRVdfUE9MIHwNCj4gU1lTXzdfUkVT RVJWRUQpOw0KPiA+ICsJd3JpdGVfZHBoeV9wYXJhbShwcml2LCBESUdfQ0xLTEFORV9MQU5FXzYs DQo+IENMS0xBTkVfUlhIU19QVUxMX0xPTkcpOw0KPiA+ICsJd3JpdGVfZHBoeV9wYXJhbShwcml2 LCBESUdfUlhfU1RBUlRVUF9PVlJfMiwgRklFTERfR0VUKDB4ZmYsDQo+IG9zY19mcmVxX3Rhcmdl dCkpOw0KPiA+ICsJd3JpdGVfZHBoeV9wYXJhbShwcml2LCBESUdfUlhfU1RBUlRVUF9PVlJfMywg RklFTERfR0VUKDB4ZjAwLA0KPiBvc2NfZnJlcV90YXJnZXQpKTsNCj4gPiArCXdyaXRlX2RwaHlf cGFyYW0ocHJpdiwgRElHX1JYX1NUQVJUVVBfT1ZSXzQsDQo+IFNUQVJUVVBfT1ZSXzRfQ05UVkFM IHwNCj4gPiArU1RBUlRVUF9PVlJfNF9ERExfRU4pOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IHZpc2NvbnRpX2NzaTJyeF9pbml0aWFsaXplKHN0cnVjdCB2aXNjb250aV9jc2kycnggKnByaXYs IHUzMg0KPiBudW1fbGFuZSwgdTMyIGRwaHlfcmF0ZSwNCj4gPiArCQkJCSAgICAgIGNvbnN0IHN0 cnVjdA0KPiB2aXNjb250aV9jc2kycnhfbGluZV9lcnJfdGFyZ2V0ICplcnJfdGFyZ2V0KSB7DQo+ ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiArCWlmIChkcGh5X3JhdGUgPCBDU0kyUlhfTUlOX0RB VEFfUkFURSB8fCBkcGh5X3JhdGUgPg0KPiBDU0kyUlhfTUFYX0RBVEFfUkFURSkgew0KPiA+ICsJ CWRldl9lcnIocHJpdi0+ZGV2LCAiVW5zdXBwb3J0ZWQgUEhZIHNwZWVkICgldSBNYnBzKSIsDQo+ IGRwaHlfcmF0ZSk7DQo+ID4gKwkJcmV0dXJuIC1FUkFOR0U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJLyogMXN0IHBoYXNlIG9mIGluaXRpYWxpemF0aW9uICovDQo+ID4gKwl2aXNjb250aV9jc2ky cnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9SRVNFVE4sIDEpOw0KPiA+ICsJdmlzY29udGlfY3Np MnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfUEhZX1JTVFosIDApOw0KPiA+ICsJdmlzY29udGlf Y3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfUEhZX1NIVVRET1dOWiwgMCk7DQo+ID4gKwl2 aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9QSFlfVEVTVENUUkwwLCAxKTsN Cj4gPiArCW5kZWxheSgxNVUpOw0KPiANCj4gSSBkb24ndCBtaW5kIG11Y2gsIGJ1dCB0aGUgVSBz dWZmaXggaGVyZSBhbmQgaW4gbWFueSBvdGhlciBwbGFjZXMgc2VlbXMNCj4gdW5uZWVkZWQuDQo+ IA0KDQpUaGlzIHN1ZmZpeCBzZWVtcyBleGNlc3NpdmUuIEknbGwgcmVtb3ZlIFUgc3VmZml4IGlu IHNpbWlsYXIgY2FzZXMuDQoNCj4gPiArCXZpc2NvbnRpX2NzaTJyeF93cml0ZShwcml2LCBSRUdf Q1NJMlJYX1BIWV9URVNUQ1RSTDAsIDApOw0KPiA+ICsNCj4gPiArCS8qIENvbmZpZ3VyZSBELVBI WSBmcmVxdWVuY3kgcmFuZ2UgKi8NCj4gPiArCXZpc2NvbnRpX2NzaTJyeF9zZXRfZHBoeV9yYXRl KHByaXYsIGRwaHlfcmF0ZSk7DQo+ID4gKw0KPiA+ICsJLyogMm5kIHBoYXNlIG9mIGluaXRpYWxp emF0aW9uICovDQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9O TEFORVMsIChudW1fbGFuZSAtIDFVKSk7DQo+IA0KPiBObyBuZWVkIGZvciB0aGUgaW5uZXIgcGFy ZW50aGVzZXMuDQo+IA0KDQpJJ2xsIHJlbW92ZSB0aGVtLg0KDQo+ID4gKwluZGVsYXkoNVUpOw0K PiA+ICsNCj4gPiArCS8qIFJlbGVhc2UgRC1QSFkgZnJvbSBSZXNldCAqLw0KPiA+ICsJdmlzY29u dGlfY3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfUEhZX1NIVVRET1dOWiwgMSk7DQo+ID4g KwluZGVsYXkoNVUpOw0KPiA+ICsJdmlzY29udGlfY3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0ky UlhfUEhZX1JTVFosIDEpOw0KPiA+ICsNCj4gPiArCS8qIGNvbmZpZ3VyYXRpb24gb2YgbGluZSBl cnJvciB0YXJnZXQgKi8NCj4gPiArCXZhbCA9IChlcnJfdGFyZ2V0LT52Y1szXSA8PCAzMFUpIHwg KGVycl90YXJnZXQtPmR0WzNdIDw8IDI0VSkgfA0KPiAoZXJyX3RhcmdldC0+dmNbMl0gPDwgMjJV KSB8DQo+ID4gKwkgICAgICAoZXJyX3RhcmdldC0+ZHRbMl0gPDwgMTZVKSB8IChlcnJfdGFyZ2V0 LT52Y1sxXSA8PCAxNFUpIHwNCj4gKGVycl90YXJnZXQtPmR0WzFdIDw8IDhVKSB8DQo+ID4gKwkg ICAgICAoZXJyX3RhcmdldC0+dmNbMF0gPDwgNlUpIHwgKGVycl90YXJnZXQtPmR0WzBdKTsNCj4g PiArCXZpc2NvbnRpX2NzaTJyeF93cml0ZShwcml2LCBSRUdfQ1NJMlJYX0RBVEFfSURTXzEsIHZh bCk7DQo+ID4gKwl2YWwgPSAoZXJyX3RhcmdldC0+dmNbN10gPDwgMzBVKSB8IChlcnJfdGFyZ2V0 LT5kdFs3XSA8PCAyNFUpIHwNCj4gKGVycl90YXJnZXQtPnZjWzZdIDw8IDIyVSkgfA0KPiA+ICsJ ICAgICAgKGVycl90YXJnZXQtPmR0WzZdIDw8IDE2VSkgfCAoZXJyX3RhcmdldC0+dmNbNV0gPDwg MTRVKSB8DQo+IChlcnJfdGFyZ2V0LT5kdFs1XSA8PCA4VSkgfA0KPiA+ICsJICAgICAgKGVycl90 YXJnZXQtPnZjWzRdIDw8IDZVKSB8IChlcnJfdGFyZ2V0LT5kdFs0XSk7DQo+ID4gKwl2aXNjb250 aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9EQVRBX0lEU18yLCB2YWwpOw0KPiA+ICsN Cj4gPiArCS8qIGNvbmZpZ3VyYXRpb24gb2YgbWFzayAqLw0KPiA+ICsJdmlzY29udGlfY3NpMnJ4 X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfSU5UX01TS19QSFlfRkFUQUwsDQo+IE1BU0tfUEhZX0ZB VEFMX0FMTCk7DQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9J TlRfTVNLX1BLVF9GQVRBTCwNCj4gTUFTS19QS1RfRkFUQUxfQUxMKTsNCj4gPiArCXZpc2NvbnRp X2NzaTJyeF93cml0ZShwcml2LCBSRUdfQ1NJMlJYX0lOVF9NU0tfRlJBTUVfRkFUQUwsDQo+IE1B U0tfRlJBTUVfRkFUQUxfQUxMKTsNCj4gPiArCXZpc2NvbnRpX2NzaTJyeF93cml0ZShwcml2LCBS RUdfQ1NJMlJYX0lOVF9NU0tfUEhZLA0KPiBNQVNLX1BIWV9FUlJPUl9BTEwpOw0KPiA+ICsJdmlz Y29udGlfY3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfSU5UX01TS19QS1QsDQo+IE1BU0tf UEtUX0VSUk9SX0FMTCk7DQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NT STJSWF9JTlRfTVNLX0xJTkUsDQo+ID4gK01BU0tfTElORV9FUlJPUl9BTEwpOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4 X2Zvcm1hdCB7DQo+ID4gKwl1MzIgY29kZTsNCj4gPiArCXVuc2lnbmVkIGludCBicHA7DQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZpc2NvbnRpX2NzaTJyeF9mb3Jt YXQgdmlzY29udGlfY3NpMnJ4X2Zvcm1hdHNbXSA9IHsNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9C VVNfRk1UX1JHQjg4OF8xWDI0LCAuYnBwID0gMjQgfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9C VVNfRk1UX1VZVlk4XzFYMTYsIC5icHAgPSAxNiB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JV U19GTVRfVVlWWTEwXzFYMjAsIC5icHAgPSAyMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JV U19GTVRfUkdCNTY1XzFYMTYsIC5icHAgPSAxNiB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JV U19GTVRfU0JHR1I4XzFYOCwgLmJwcCA9IDggfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9CVVNf Rk1UX1NHQlJHOF8xWDgsIC5icHAgPSA4IH0sDQo+ID4gKwl7IC5jb2RlID0gTUVESUFfQlVTX0ZN VF9TR1JCRzhfMVg4LCAuYnBwID0gOCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRf U1JHR0I4XzFYOCwgLmJwcCA9IDggfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9CVVNfRk1UX1NC R0dSMTBfMVgxMCwgLmJwcCA9IDEwIH0sDQo+ID4gKwl7IC5jb2RlID0gTUVESUFfQlVTX0ZNVF9T R0JSRzEwXzFYMTAsIC5icHAgPSAxMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRf U0dSQkcxMF8xWDEwLCAuYnBwID0gMTAgfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9CVVNfRk1U X1NSR0dCMTBfMVgxMCwgLmJwcCA9IDEwIH0sDQo+ID4gKwl7IC5jb2RlID0gTUVESUFfQlVTX0ZN VF9TQkdHUjEyXzFYMTIsIC5icHAgPSAxMiB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19G TVRfU0dCUkcxMl8xWDEyLCAuYnBwID0gMTIgfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9CVVNf Rk1UX1NHUkJHMTJfMVgxMiwgLmJwcCA9IDEyIH0sDQo+ID4gKwl7IC5jb2RlID0gTUVESUFfQlVT X0ZNVF9TUkdHQjEyXzFYMTIsIC5icHAgPSAxMiB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JV U19GTVRfU0JHR1IxNF8xWDE0LCAuYnBwID0gMTQgfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9C VVNfRk1UX1NHQlJHMTRfMVgxNCwgLmJwcCA9IDE0IH0sDQo+ID4gKwl7IC5jb2RlID0gTUVESUFf QlVTX0ZNVF9TR1JCRzE0XzFYMTQsIC5icHAgPSAxNCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElB X0JVU19GTVRfU1JHR0IxNF8xWDE0LCAuYnBwID0gMTQgfSwgfTsNCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4X2Zvcm1hdA0KPiA+ICsqZm10X2Zvcl9tYnVz X2NvZGUodW5zaWduZWQgaW50IG1idXNfY29kZSkgew0KPiA+ICsJaW50IGk7DQo+IA0KPiB1bnNp Z25lZCBpbnQNCj4gDQoNCkknbGwgZml4IGl0Lg0KDQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsg QVJSQVlfU0laRSh2aXNjb250aV9jc2kycnhfZm9ybWF0cyk7IGkrKykNCj4gPiArCQlpZiAodmlz Y29udGlfY3NpMnJ4X2Zvcm1hdHNbaV0uY29kZSA9PSBtYnVzX2NvZGUpDQo+ID4gKwkJCXJldHVy biAmdmlzY29udGlfY3NpMnJ4X2Zvcm1hdHNbaV07DQo+IA0KPiBQbGVhc2UgdXNlIGN1cmx5IGJy YWNlcyBmb3IgdGhlICdmb3InIHN0YXRlbWVudC4NCg0KSSdsbCBhZGQgY3VybHkgYnJhY2VzLg0K DQo+IA0KPiBObyByZXR1cm4gd2hlbiB0aGUgbG9vayBkb2Vzbid0IGZpbmQgYSBtYXRjaCA/DQo+ IA0KDQpUaGVyZSBzaG91bGQgaGF2ZSBiZWVuICJyZXR1cm4gTlVMTCIgYXQgdGhlIGVuZCBvZiB0 aGUgZnVuY3Rpb24uDQpJJ2xsIGZpeCBpdC4NCg0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dW5zaWduZWQgaW50IGJwcF9mb3JfbWJ1c19jb2RlKHVuc2lnbmVkIGludCBtYnVzX2NvZGUpIHsN Cj4gPiArCWNvbnN0IHN0cnVjdCB2aXNjb250aV9jc2kycnhfZm9ybWF0ICpmbXQgPQ0KPiA+ICtm bXRfZm9yX21idXNfY29kZShtYnVzX2NvZGUpOw0KPiA+ICsNCj4gPiArCXJldHVybiBmbXQgPyBm bXQtPmJwcCA6IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQ2NF90IGdldF9waXhl bGNsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpIHsNCj4gPiArCXN0cnVjdCB2NGwyX2N0cmwg KmN0cmw7DQo+ID4gKw0KPiA+ICsJY3RybCA9IHY0bDJfY3RybF9maW5kKHNkLT5jdHJsX2hhbmRs ZXIsIFY0TDJfQ0lEX1BJWEVMX1JBVEUpOw0KPiA+ICsJaWYgKCFjdHJsKQ0KPiA+ICsJCXJldHVy biAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCXJldHVybiB2NGwyX2N0cmxfZ19jdHJsX2ludDY0KGN0 cmwpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZpc2NvbnRpX2NzaTJyeF9s aW5lX2Vycl90YXJnZXQgZXJyX3RhcmdldF92YzBfYWxsZHQgPSB7DQo+ID4gKwkvKiBzZWxlY3Qg VkM9MCAqLw0KPiA+ICsJLyogc2VsZWN0IGFsbCBzdXBwb3J0ZWQgRGF0YVR5cGVzICovDQo+ID4g KwkuZHQgPSB7DQo+ID4gKwkJTUlQSV9DU0kyX0RUX1JHQjU2NSwNCj4gPiArCQlNSVBJX0NTSTJf RFRfWVVWNDIyXzhCLA0KPiA+ICsJCU1JUElfQ1NJMl9EVF9ZVVY0MjJfMTBCLA0KPiA+ICsJCU1J UElfQ1NJMl9EVF9SR0I4ODgsDQo+ID4gKwkJTUlQSV9DU0kyX0RUX1JBVzgsDQo+ID4gKwkJTUlQ SV9DU0kyX0RUX1JBVzEwLA0KPiA+ICsJCU1JUElfQ1NJMl9EVF9SQVcxMiwNCj4gPiArCQlNSVBJ X0NTSTJfRFRfUkFXMTQsDQo+ID4gKwl9DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IHZpc2NvbnRpX2NzaTJyeF9zdGFydChzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4ICpwcml2LCBzdHJ1 Y3QNCj4gPiArdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlKSB7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9t YnVzX2ZyYW1lZm10ICpzaW5rX2ZtdDsNCj4gDQo+IGNvbnN0DQo+IA0KDQpJJ2xsIGFkZCBhIGNv bnN0IHF1YWxpZmllci4NCg0KPiA+ICsJaW50IGN1cl9icHAsIGRwaHlfcmF0ZTsNCj4gPiArCXM2 NCBwaXhlbGNsb2NrOw0KPiA+ICsNCj4gPiArCS8qIGdldCBicHAgZm9yIGN1cnJlbnQgZm9ybWF0 ICovDQo+ID4gKwlzaW5rX2ZtdCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9mb3JtYXQoc3RhdGUs DQo+IFZJU0NPTlRJX0NTSTJSWF9QQURfU0lOSyk7DQo+ID4gKwljdXJfYnBwID0gYnBwX2Zvcl9t YnVzX2NvZGUoc2lua19mbXQtPmNvZGUpOw0KPiANCj4gCWJwcCA9IGZtdF9mb3JfbWJ1c19jb2Rl KHNpbmtfZm10LT5jb2RlKS0+YnBwOw0KPiANCj4gYW5kIGRyb3AgdGhlIGJwcF9mb3JfbWJ1c19j b2RlKCkgZnVuY3Rpb24uDQo+IA0KDQpJJ2xsIGRyb3AgYnBwX2Zvcl9tYnVzX2NvZGUoKS4NCklz IE5VTEwgY2hlY2sgZm9yIGZtdF9mb3JfbWJ1c19jb2RlKHNpbmtfZm10LT5jb2RlKSByZXF1aXJl ZD8NCg0KPiA+ICsNCj4gPiArCS8qIGdldCBwaXhlbCBjbG9jayAqLw0KPiA+ICsJcGl4ZWxjbG9j ayA9IGdldF9waXhlbGNsb2NrKHByaXYtPnJlbW90ZSk7DQo+IA0KPiBVc2UgdjRsMl9nZXRfbGlu a19mcmVxKCkgYW5kIGRyb3AgdGhlIGdldF9waXhlbGNsb2NrKCkgZnVuY3Rpb24uDQo+IA0KDQpJ J2xsIHVzZSB2NGwyX2dldF9saW5rX2ZyZXEoKS4NCg0KPiA+ICsJaWYgKHBpeGVsY2xvY2sgPCAw KQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWRwaHlfcmF0ZSA9IGRpdjY0 X3U2NCgodTY0KXBpeGVsY2xvY2sgKiAodTMyKWN1cl9icHAsIHByaXYtPmxhbmVzICoNCj4gPiAr MTAwMDAwMCk7DQo+ID4gKw0KPiA+ICsJbmRlbGF5KDE1VSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IHZpc2NvbnRpX2NzaTJyeF9pbml0aWFsaXplKHByaXYsIHByaXYtPmxhbmVzLCBkcGh5X3JhdGUs DQo+ID4gKyZlcnJfdGFyZ2V0X3ZjMF9hbGxkdCk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHZpc2NvbnRpX2NzaTJyeF9zdG9wKHN0cnVjdCB2aXNjb250aV9jc2kycnggKnByaXYpIHsNCj4g PiArCS8qIGRpc2FibGUgaW50ZXJydXB0IC0+IG1ha2Ugc3VyZSByZWdpc3RlcnMgY2xlYXJlZCAt PiB3YWl0IGZvciBjdXJyZW50DQo+IGhhbmRsZXJzIGZpbmlzaCAqLw0KPiA+ICsJdmlzY29udGlf Y3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfSU5UX01TS19QSFlfRkFUQUwsIDApOw0KPiA+ ICsJdmlzY29udGlfY3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfSU5UX01TS19QS1RfRkFU QUwsIDApOw0KPiA+ICsJdmlzY29udGlfY3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfSU5U X01TS19GUkFNRV9GQVRBTCwgMCk7DQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwg UkVHX0NTSTJSWF9JTlRfTVNLX1BIWSwgMCk7DQo+ID4gKwl2aXNjb250aV9jc2kycnhfd3JpdGUo cHJpdiwgUkVHX0NTSTJSWF9JTlRfTVNLX1BLVCwgMCk7DQo+ID4gKwl2aXNjb250aV9jc2kycnhf d3JpdGUocHJpdiwgUkVHX0NTSTJSWF9JTlRfTVNLX0xJTkUsIDApOw0KPiA+ICsJdmlzY29udGlf Y3NpMnJ4X3JlYWQocHJpdiwgUkVHX0NTSTJSWF9JTlRfTVNLX1BIWV9GQVRBTCk7DQo+ID4gKwl2 aXNjb250aV9jc2kycnhfcmVhZChwcml2LCBSRUdfQ1NJMlJYX0lOVF9NU0tfUEtUX0ZBVEFMKTsN Cj4gPiArCXZpc2NvbnRpX2NzaTJyeF9yZWFkKHByaXYsIFJFR19DU0kyUlhfSU5UX01TS19GUkFN RV9GQVRBTCk7DQo+ID4gKwl2aXNjb250aV9jc2kycnhfcmVhZChwcml2LCBSRUdfQ1NJMlJYX0lO VF9NU0tfUEhZKTsNCj4gPiArCXZpc2NvbnRpX2NzaTJyeF9yZWFkKHByaXYsIFJFR19DU0kyUlhf SU5UX01TS19QS1QpOw0KPiA+ICsJdmlzY29udGlfY3NpMnJ4X3JlYWQocHJpdiwgUkVHX0NTSTJS WF9JTlRfTVNLX0xJTkUpOw0KPiA+ICsJc3luY2hyb25pemVfaXJxKHByaXYtPmlycSk7DQo+ID4g Kw0KPiA+ICsJLyogc2h1dGRvd24gaGFyZHdhcmUgKi8NCj4gPiArCXZpc2NvbnRpX2NzaTJyeF93 cml0ZShwcml2LCBSRUdfQ1NJMlJYX1BIWV9TSFVURE9XTlosIDApOw0KPiA+ICsJdmlzY29udGlf Y3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfUEhZX1JTVFosIDApOw0KPiA+ICsJdmlzY29u dGlfY3NpMnJ4X3dyaXRlKHByaXYsIFJFR19DU0kyUlhfUEhZX1RFU1RDVFJMMCwgMSk7DQo+ID4g Kwl2aXNjb250aV9jc2kycnhfd3JpdGUocHJpdiwgUkVHX0NTSTJSWF9SRVNFVE4sIDApOyB9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX2NzaTJyeF9lbmFibGVfc3RyZWFtcyhzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QNCj4gdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlLA0K PiA+ICsJCQkJCSAgdTMyIHBhZCwgdTY0IHN0cmVhbXNfbWFzaykNCj4gPiArew0KPiA+ICsJc3Ry dWN0IHZpc2NvbnRpX2NzaTJyeCAqcHJpdiA9IHNkX3RvX2NzaTIoc2QpOw0KPiA+ICsJc3RydWN0 IHY0bDJfc3ViZGV2ICpyZW1vdGVfc2Q7DQo+ID4gKwlzdHJ1Y3QgbWVkaWFfcGFkICpyZW1vdGVf cGFkOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZW1vdGVfcGFkID0NCj4gbWVkaWFf cGFkX3JlbW90ZV9wYWRfZmlyc3QoJnNkLT5lbnRpdHkucGFkc1tWSVNDT05USV9DU0kyUlhfUEFE X1NJTksNCj4gXSk7DQo+ID4gKwlpZiAoIXJlbW90ZV9wYWQpDQo+ID4gKwkJcmV0dXJuIC1FTk9E RVY7DQo+IA0KPiBDYW4ndCB5b3UgdXNlIHByaXYtPnJlbW90ZSBhbmQgcHJpdi0+cmVtb3RlX3Bh ZCBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2YNCj4gZ2V0dGluZyB0aGUgcmVtb3RlIHBhZCBk eW5hbWljYWxseSA/IFNhbWUgaW4NCj4gdmlzY29udGlfY3NpMnJ4X2Rpc2FibGVfc3RyZWFtcygp Lg0KPiANCg0KSSdsbCB1c2UgcHJpdi0+cmVtb3RlLCBhbmQgcHJpdi0+cmVtb3RlX3BhZC4NCg0K PiA+ICsJcmVtb3RlX3NkID0gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KHJlbW90ZV9wYWQt PmVudGl0eSk7DQo+ID4gKw0KPiA+ICsJLyogZW5hYmxpbmc6IHR1cm4gb24gQ1NJMlJYIC0+IHR1 cm4gb24gc2Vuc29yICovDQo+ID4gKwlyZXQgPSB2aXNjb250aV9jc2kycnhfc3RhcnQocHJpdiwg c3RhdGUpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiAr CS8qIGN1cnJlbnRseSBDU0kyUlggc3VwcG9ydHMgb25seSBzdHJlYW0wIGluIHNvdXJjZSBwYWQg Ki8NCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2VuYWJsZV9zdHJlYW1zKHJlbW90ZV9zZCwgcmVt b3RlX3BhZC0+aW5kZXgsDQo+IEJJVCgwKSk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJdmlz Y29udGlfY3NpMnJ4X3N0b3AocHJpdik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aXNj b250aV9jc2kycnhfZGlzYWJsZV9zdHJlYW1zKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVj dA0KPiB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGUsDQo+ID4gKwkJCQkJICAgdTMyIHBhZCwgdTY0 IHN0cmVhbXNfbWFzaykNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpc2NvbnRpX2NzaTJyeCAqcHJp diA9IHNkX3RvX2NzaTIoc2QpOw0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpyZW1vdGVfc2Q7 DQo+ID4gKwlzdHJ1Y3QgbWVkaWFfcGFkICpyZW1vdGVfcGFkOw0KPiA+ICsNCj4gPiArCXJlbW90 ZV9wYWQgPQ0KPiBtZWRpYV9wYWRfcmVtb3RlX3BhZF9maXJzdCgmc2QtPmVudGl0eS5wYWRzW1ZJ U0NPTlRJX0NTSTJSWF9QQURfU0lOSw0KPiBdKTsNCj4gPiArCWlmICghcmVtb3RlX3BhZCkNCj4g PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCXJlbW90ZV9zZCA9IG1lZGlhX2VudGl0eV90b192 NGwyX3N1YmRldihyZW1vdGVfcGFkLT5lbnRpdHkpOw0KPiA+ICsNCj4gPiArCS8qIGRpc2FibGlu ZzogdHVybiBvZmYgc2Vuc29yIC0+IHR1cm4gb2ZmIENTSTJSWCAqLw0KPiA+ICsJdjRsMl9zdWJk ZXZfZGlzYWJsZV9zdHJlYW1zKHJlbW90ZV9zZCwgcmVtb3RlX3BhZC0+aW5kZXgsDQo+IEJJVCgw KSk7DQo+ID4gKwl2aXNjb250aV9jc2kycnhfc3RvcChwcml2KTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aXNjb250aV9jc2kycnhfZW51 bV9tYnVzX2NvZGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCQkgIHN0cnVjdCB2 NGwyX3N1YmRldl9zdGF0ZQ0KPiAqc2Rfc3RhdGUsDQo+ID4gKwkJCQkJICBzdHJ1Y3QNCj4gdjRs Ml9zdWJkZXZfbWJ1c19jb2RlX2VudW0gKmNvZGUpIHsNCj4gPiArCWlmIChjb2RlLT5wYWQgPT0g VklTQ09OVElfQ1NJMlJYX1BBRF9TUkMpIHsNCj4gPiArCQljb25zdCBzdHJ1Y3QgdjRsMl9tYnVz X2ZyYW1lZm10ICpzaW5rX2ZtdDsNCj4gPiArDQo+ID4gKwkJLyogU1JDIHBhZCBzdXBwb3J0cyBl eGFjdGx5IHRoZSBzYW1lIGZvcm1hdCBhcyBTSU5LIHBhZCAqLw0KPiA+ICsJCWlmIChjb2RlLT5p bmRleCkNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJc2lua19mbXQgPSB2NGwyX3N1 YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0YXRlLA0KPiBWSVNDT05USV9DU0kyUlhfUEFEX1NJ TkspOw0KPiA+ICsJCWNvZGUtPmNvZGUgPSBzaW5rX2ZtdC0+Y29kZTsNCj4gPiArCQlyZXR1cm4g MDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoY29kZS0+aW5kZXggPj0gQVJSQVlfU0laRSh2 aXNjb250aV9jc2kycnhfZm9ybWF0cykpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwlj b2RlLT5jb2RlID0gdmlzY29udGlfY3NpMnJ4X2Zvcm1hdHNbY29kZS0+aW5kZXhdLmNvZGU7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlz Y29udGlfY3NpMnJ4X2luaXRfc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0DQo+ ID4gK3Y0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSkgew0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1 c19mcmFtZWZtdCAqc2lua19mbXQsICpzcmNfZm10Ow0KPiA+ICsNCj4gPiArCXNpbmtfZm10ID0g djRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzZF9zdGF0ZSwNCj4gVklTQ09OVElfQ1NJMlJY X1BBRF9TSU5LKTsNCj4gPiArCXNyY19mbXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0 KHNkX3N0YXRlLA0KPiA+ICtWSVNDT05USV9DU0kyUlhfUEFEX1NSQyk7DQo+ID4gKw0KPiA+ICsJ c2lua19mbXQtPndpZHRoID0gVklTQ09OVElfQ1NJMlJYX0RFRl9XSURUSDsNCj4gPiArCXNpbmtf Zm10LT5oZWlnaHQgPSBWSVNDT05USV9DU0kyUlhfREVGX0hFSUdIVDsNCj4gPiArCXNpbmtfZm10 LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gPiArCXNpbmtfZm10LT5jb2RlID0gdmlzY29u dGlfY3NpMnJ4X2Zvcm1hdHNbMF0uY29kZTsNCj4gDQo+IFBsZWFzZSBhbHNvIGluaXRpYWxpemUg dGhlIGNvbG91cnNwYWNlIGZpZWxkcy4gVjRMMl9DT0xPUlNQQUNFX1JBVywNCj4gVjRMMl9YRkVS X0ZVTkNfTk9ORSwgVjRMMl9ZQ0JDUl9FTkNfNjAxIGFuZA0KPiBWNEwyX1FVQU5USVpBVElPTl9G VUxMX1JBTkdFIHNob3VsZCBiZSBhcHByb3ByaWF0ZSBkZWZhdWx0cy4NCj4gDQoNCkknbGwgc2V0 IHRoZSBkZWZhdWx0IHZhbHVlIHRvIGNvbG91cnNwYWNlIGZpZWxkcy4NCg0KPiA+ICsNCj4gPiAr CSpzcmNfZm10ID0gKnNpbmtfZm10Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX2NzaTJyeF9zZXRfcGFkX2Zvcm1hdChzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRl DQo+ICpzZF9zdGF0ZSwNCj4gPiArCQkJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZt dCkgew0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqc2lua19mbXQsICpzcmNfZm10 Ow0KPiA+ICsNCj4gPiArCS8qIFNSQyBQQUQgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBTSU5LIFBB RCAqLw0KPiA+ICsJaWYgKGZtdC0+cGFkID09IDEpDQo+IA0KPiAJaWYgKGZtdC0+cGFkID09IFZJ U0NPTlRJX0NTSTJSWF9QQURfU1JDKQ0KPiANCg0KSSdsbCB1c2UgdGhlIGNvbnN0YW50IG1hY3Jv Lg0KDQo+ID4gKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2dldF9mbXQoc2QsIHNkX3N0YXRlLCBmbXQp Ow0KPiA+ICsNCj4gPiArCXNpbmtfZm10ID0gdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChz ZF9zdGF0ZSwNCj4gPiArVklTQ09OVElfQ1NJMlJYX1BBRF9TSU5LKTsNCj4gPiArDQo+ID4gKwkq c2lua19mbXQgPSBmbXQtPmZvcm1hdDsNCj4gPiArCXNpbmtfZm10LT53aWR0aCA9IGNsYW1wX3Qo dTMyLCBmbXQtPmZvcm1hdC53aWR0aCwNCj4gVklTQ09OVElfQ1NJMlJYX01JTl9XSURUSCwNCj4g PiArCQkJCSAgVklTQ09OVElfQ1NJMlJYX01BWF9XSURUSCk7DQo+ID4gKwlzaW5rX2ZtdC0+aGVp Z2h0ID0gY2xhbXBfdCh1MzIsIGZtdC0+Zm9ybWF0LmhlaWdodCwNCj4gVklTQ09OVElfQ1NJMlJY X01JTl9IRUlHSFQsDQo+ID4gKwkJCQkgICBWSVNDT05USV9DU0kyUlhfTUFYX0hFSUdIVCk7DQo+ ID4gKwlpZiAoIWZtdF9mb3JfbWJ1c19jb2RlKHNpbmtfZm10LT5jb2RlKSkNCj4gPiArCQlzaW5r X2ZtdC0+Y29kZSA9IHZpc2NvbnRpX2NzaTJyeF9mb3JtYXRzWzBdLmNvZGU7DQo+ID4gKwlmbXQt PmZvcm1hdCA9ICpzaW5rX2ZtdDsNCj4gPiArDQo+ID4gKwkvKiBzb3VyY2UgcGFkIHNob3VsZCBo YXZlIHRoZSBzYW1lIGZvcm1hdCAqLw0KPiA+ICsJc3JjX2ZtdCA9IHY0bDJfc3ViZGV2X3N0YXRl X2dldF9mb3JtYXQoc2Rfc3RhdGUsDQo+IFZJU0NPTlRJX0NTSTJSWF9QQURfU1JDKTsNCj4gPiAr CSpzcmNfZm10ID0gKnNpbmtfZm10Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIHZp c2NvbnRpX2NzaTJyeF9lbnRpdHlfb3BzID0gew0KPiA+ICsJLmxpbmtfdmFsaWRhdGUgPSB2NGwy X3N1YmRldl9saW5rX3ZhbGlkYXRlLCB9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCB2NGwyX3N1YmRldl92aWRlb19vcHMgdmlzY29udGlfY3NpMnJ4X3ZpZGVvX29wcyA9IHsNCj4g PiArCS5zX3N0cmVhbSA9IHY0bDJfc3ViZGV2X3Nfc3RyZWFtX2hlbHBlciwNCj4gDQo+IEFzIHRo ZSBvbmx5IGRyaXZlciB0aGF0IHdpbGwgdXNlIHRoaXMgQ1NJLTIgUlggaXMgdGhlIFZJSUYgZHJp dmVyLCBhbmQgdGhhdCBkcml2ZXINCj4gdXNlcyB2NGwyX3N1YmRldl9lbmFibGVfc3RyZWFtcygp LCAuc19zdHJlYW0oKSB3aWxsIG5ldmVyIGJlIGNhbGxlZC4gWW91IGNhbg0KPiBkcm9wIHRoZSB2 NGwyX3N1YmRldl92aWRlb19vcHMuDQo+IA0KDQpJJ2xsIGRyb3AgdmlzY29udGlfY3NpMnJ4X3Zp ZGVvX29wcy4NCg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X3N1YmRldl9wYWRfb3BzIHZpc2NvbnRpX2NzaTJyeF9wYWRfb3BzID0gew0KPiA+ICsJLmVudW1f bWJ1c19jb2RlID0gdmlzY29udGlfY3NpMnJ4X2VudW1fbWJ1c19jb2RlLA0KPiANCj4gWW91IGFs c28gbmVlZCB0byBpbXBsZW1lbnQgLmVudW1fZnJhbWVfc2l6ZSgpDQo+IA0KDQpJJ2xsIGltcGxl bWVudCBpdC4NCg0KPiA+ICsJLmRpc2FibGVfc3RyZWFtcyA9IHZpc2NvbnRpX2NzaTJyeF9kaXNh YmxlX3N0cmVhbXMsDQo+ID4gKwkuZW5hYmxlX3N0cmVhbXMgPSB2aXNjb250aV9jc2kycnhfZW5h YmxlX3N0cmVhbXMsDQo+ID4gKwkuZ2V0X2ZtdCA9IHY0bDJfc3ViZGV2X2dldF9mbXQsDQo+ID4g Kwkuc2V0X2ZtdCA9IHZpc2NvbnRpX2NzaTJyeF9zZXRfcGFkX2Zvcm1hdCwgfTsNCj4gPiArDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHZpc2NvbnRpX2NzaTJyeF9z dWJkZXZfb3BzID0gew0KPiA+ICsJLnZpZGVvID0gJnZpc2NvbnRpX2NzaTJyeF92aWRlb19vcHMs DQo+ID4gKwkucGFkID0gJnZpc2NvbnRpX2NzaTJyeF9wYWRfb3BzLA0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9pbnRlcm5hbF9vcHMgdmlzY29u dGlfY3NpMnJ4X2ludGVybmFsX29wcyA9DQo+IHsNCj4gPiArCS5pbml0X3N0YXRlID0gdmlzY29u dGlfY3NpMnJ4X2luaXRfc3RhdGUsIH07DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRp X2NzaTJyeF9ub3RpZnlfYm91bmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVy LA0KPiA+ICsJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LA0KPiA+ICsJCQkJCXN0cnVj dCB2NGwyX2FzeW5jX2Nvbm5lY3Rpb24gKmFzYykgew0KPiA+ICsJc3RydWN0IHZpc2NvbnRpX2Nz aTJyeCAqcHJpdiA9IG5vdGlmaWVyX3RvX2NzaTIobm90aWZpZXIpOw0KPiA+ICsJaW50IHBhZDsN Cj4gPiArDQo+ID4gKwlwYWQgPSBtZWRpYV9lbnRpdHlfZ2V0X2Z3bm9kZV9wYWQoJnN1YmRldi0+ ZW50aXR5LA0KPiBhc2MtPm1hdGNoLmZ3bm9kZSwgTUVESUFfUEFEX0ZMX1NPVVJDRSk7DQo+ID4g KwlpZiAocGFkIDwgMCkgew0KPiA+ICsJCWRldl9lcnIocHJpdi0+ZGV2LCAiRmFpbGVkIHRvIGZp bmQgcGFkIGZvciAlc1xuIiwNCj4gc3ViZGV2LT5uYW1lKTsNCj4gPiArCQlyZXR1cm4gcGFkOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCXByaXYtPnJlbW90ZSA9IHN1YmRldjsNCj4gPiArCXByaXYt PnJlbW90ZV9wYWQgPSBwYWQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIG1lZGlhX2NyZWF0ZV9wYWRf bGluaygmc3ViZGV2LT5lbnRpdHksIHBhZCwNCj4gJnByaXYtPnN1YmRldi5lbnRpdHksIDAsDQo+ ID4gKwkJCQkgICAgIE1FRElBX0xOS19GTF9FTkFCTEVEKTsNCj4gDQo+IENhbiB5b3UgaGF2ZSBt dWx0aXBsZSBzb3VyY2VzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBDU0ktMiByZWNlaXZlciA/IElm IG5vdCwNCj4geW91IGNhbiBtYWtlIHRoZSBsaW5rIHRvIHRoZSBzb3VyY2UgaW1tdXRhYmxlLg0K PiANCg0KQXNzdW1pbmcgdGhhdCAic291cmNlcyIgbWVhbiBpbWFnZSBzZW5zb3JzLCB0aGUgQ1NJ LTIgcmVjZWl2ZXIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzb3VyY2VzLg0KSSdsbCBzZXQg TUVESUFfTE5LX0ZMX0lNTVVUQUJMRSBmbGFnLg0KDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHZpc2NvbnRpX2NzaTJyeF9ub3RpZnlfdW5iaW5kKHN0cnVjdCB2NGwyX2FzeW5jX25v dGlmaWVyDQo+ICpub3RpZmllciwNCj4gPiArCQkJCQkgIHN0cnVjdCB2NGwyX3N1YmRldiAqc3Vi ZGV2LA0KPiA+ICsJCQkJCSAgc3RydWN0IHY0bDJfYXN5bmNfY29ubmVjdGlvbiAqYXNjKQ0KPiB7 DQo+ID4gKwlzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4ICpwcml2ID0gbm90aWZpZXJfdG9fY3NpMihu b3RpZmllcik7DQo+ID4gKw0KPiA+ICsJcHJpdi0+cmVtb3RlID0gTlVMTDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyX29wZXJhdGlv bnMNCj4gdmlzY29udGlfY3NpMnJ4X25vdGlmeV9vcHMgPSB7DQo+ID4gKwkuYm91bmQgPSB2aXNj b250aV9jc2kycnhfbm90aWZ5X2JvdW5kLA0KPiA+ICsJLnVuYmluZCA9IHZpc2NvbnRpX2NzaTJy eF9ub3RpZnlfdW5iaW5kLCB9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aXNjb250aV9jc2ky cnhfcGFyc2VfdjRsMihzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4ICpwcml2LA0KPiA+ICsJCQkJICAg ICAgc3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50ICp2ZXApIHsNCj4gPiArCS8qIE9ubHkgcG9y dCAwIGVuZHBvaW50IDAgaXMgdmFsaWQuICovDQo+ID4gKwlpZiAodmVwLT5iYXNlLnBvcnQgfHwg dmVwLT5iYXNlLmlkKQ0KPiA+ICsJCXJldHVybiAtRU5PVENPTk47DQo+IA0KPiBZb3UgY2FsbCBm d25vZGVfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X2lkKCkgd2l0aCBwb3J0IGFuZCBlbmRwb2ludCBz ZXQgdG8gMCwNCj4gc28gSSB0aGluayB5b3UgY2FuIGRyb3AgdGhpcyBjaGVjay4NCj4gDQoNCkkn bGwgZHJvcCB0aGUgY2hlY2suDQoNCj4gPiArDQo+ID4gKwlwcml2LT5sYW5lcyA9IHZlcC0+YnVz Lm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lczsNCj4gPiArDQo+ID4gKwkvKiBnb3QgdHJvdWJsZSAq Lw0KPiA+ICsJaWYgKHZlcC0+YnVzX3R5cGUgIT0gVjRMMl9NQlVTX0NTSTJfRFBIWSkgew0KPiA+ ICsJCWRldl9lcnIocHJpdi0+ZGV2LCAiU3BlY2lmaWVkIGJ1cyB0eXBlIGlzIG5vdCBzdXBwb3J0 ZWRcbiIpOw0KPiANCj4gSWYgeW91IG9ubHkgc3VwcG9ydCBELVBIWSwgdGhlbiBzZXQgdGhlIGJ1 c190eXBlIHRvIFY0TDJfTUJVU19DU0kyX0RQSFkNCj4gaW5zdGVhZCBvZiBWNEwyX01CVVNfVU5L Tk9XTiBpbiB2aXNjb250aV9jc2kycnhfcGFyc2VfZHQoKS4NCj4gdjRsMl9md25vZGVfZW5kcG9p bnRfcGFyc2UoKSB3aWxsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgYnVzIHR5cGUgaXMgbm90IEQt UEhZLA0KPiBhbmQgeW91IGNhbiBkcm9wIHRoaXMgY2hlY2suDQo+IA0KDQpJJ2xsIHVwZGF0ZSB0 aGUgcXVlcnkgYW5kIGRyb3AgdGhpcyBjaGVjay4NCg0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChwcml2LT5sYW5lcyAhPSAxICYmIHByaXYtPmxhbmVz ICE9IDIgJiYgcHJpdi0+bGFuZXMgIT0gNCkgew0KPiA+ICsJCWRldl9lcnIocHJpdi0+ZGV2LCAi VW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGRhdGEtbGFuZXMgZm9yDQo+IEQtUEhZOiAldVxuIiwgcHJp di0+bGFuZXMpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX2NzaTJy eF9wYXJzZV9kdChzdHJ1Y3QgdmlzY29udGlfY3NpMnJ4ICpwcml2KSB7DQo+ID4gKwlzdHJ1Y3Qg djRsMl9hc3luY19jb25uZWN0aW9uICphc2M7DQo+ID4gKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAq Zndub2RlOw0KPiA+ICsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmVwOw0KPiA+ICsJc3RydWN0IHY0 bDJfZndub2RlX2VuZHBvaW50IHY0bDJfZXAgPSB7DQo+ID4gKwkJLmJ1c190eXBlID0gVjRMMl9N QlVTX1VOS05PV04sDQo+ID4gKwl9Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwllcCA9 IGZ3bm9kZV9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfaWQoZGV2X2Z3bm9kZShwcml2LT5kZXYpLCAw LCAwLA0KPiAwKTsNCj4gPiArCWlmICghZXApIHsNCj4gPiArCQlkZXZfZXJyKHByaXYtPmRldiwg Ik5vdCBjb25uZWN0ZWQgdG8gc3ViZGV2aWNlXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9wYXJzZShl cCwgJnY0bDJfZXApOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIocHJpdi0+ZGV2 LCAiQ291bGQgbm90IHBhcnNlIHY0bDIgZW5kcG9pbnRcbiIpOw0KPiA+ICsJCWZ3bm9kZV9oYW5k bGVfcHV0KGVwKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXQgPSB2aXNjb250aV9jc2kycnhfcGFyc2VfdjRsMihwcml2LCAmdjRsMl9lcCk7DQo+IA0K PiBJIHdvdWxkIGlubGluZSB3aGF0IGlzIGxlZnQgb2YgdGhhdCBmdW5jdGlvbiBpbiBoZXJlLg0K PiANCg0KSSdsbCBpbmxpbmUgdmlzY29udGlfY3NpMnJ4X3BhcnNlX3Y0bDIoKQ0KDQo+ID4gKwlp ZiAocmV0KSB7DQo+ID4gKwkJZndub2RlX2hhbmRsZV9wdXQoZXApOw0KPiA+ICsJCXJldHVybiBy ZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZndub2RlID0gZndub2RlX2dyYXBoX2dldF9yZW1v dGVfZW5kcG9pbnQoZXApOw0KPiA+ICsJZndub2RlX2hhbmRsZV9wdXQoZXApOw0KPiA+ICsNCj4g PiArCXY0bDJfYXN5bmNfc3ViZGV2X25mX2luaXQoJnByaXYtPm5vdGlmaWVyLCAmcHJpdi0+c3Vi ZGV2KTsNCj4gPiArCXByaXYtPm5vdGlmaWVyLm9wcyA9ICZ2aXNjb250aV9jc2kycnhfbm90aWZ5 X29wczsNCj4gPiArDQo+ID4gKwlhc2MgPSB2NGwyX2FzeW5jX25mX2FkZF9md25vZGUoJnByaXYt Pm5vdGlmaWVyLCBmd25vZGUsIHN0cnVjdA0KPiB2NGwyX2FzeW5jX2Nvbm5lY3Rpb24pOw0KPiA+ ICsJZndub2RlX2hhbmRsZV9wdXQoZndub2RlKTsNCj4gPiArCWlmIChJU19FUlIoYXNjKSkNCj4g PiArCQlyZXR1cm4gUFRSX0VSUihhc2MpOw0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfYXN5bmNf bmZfcmVnaXN0ZXIoJnByaXYtPm5vdGlmaWVyKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJdjRs Ml9hc3luY19uZl9jbGVhbnVwKCZwcml2LT5ub3RpZmllcik7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlycXJldHVybl90IHZpc2NvbnRpX2Nz aTJyeF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKSB7DQo+ID4gKwlzdHJ1Y3QgdmlzY29udGlf Y3NpMnJ4ICpwcml2ID0gZGV2X2lkOw0KPiA+ICsJdTMyIGV2ZW50Ow0KPiA+ICsNCj4gPiArCWV2 ZW50ID0gdmlzY29udGlfY3NpMnJ4X3JlYWQocHJpdiwgUkVHX0NTSTJSWF9JTlRfU1RfTUFJTik7 DQo+ID4gKwlkZXZfZXJyKHByaXYtPmRldiwgIkNTSTJSWCBlcnJvciAweCV4LlxuIiwgZXZlbnQp Ow0KPiANCj4gU2hvdWxkIHRoaXMgYmUgYXQgbGVhc3QgcmF0ZS1saW1pdGVkID8NCj4gDQoNCkkn bGwgdXNlIGRldl9lcnJfcmF0ZWxpbWl0ZWQoKS4NCg0KPiA+ICsNCj4gPiArCXJldHVybiBJUlFf SEFORExFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgdmlzY29udGlfY3NpMnJ4X29mX3RhYmxlW10gPSB7DQo+ID4gKwl7DQo+ID4gKwkJLmNv bXBhdGlibGUgPSAidG9zaGliYSx2aXNjb250aTUtY3NpMnJ4IiwNCj4gPiArCX0sDQo+ID4gKwl7 fSwNCj4gDQo+IAl7IC8qIFNlbnRpbmVsICovIH0sDQo+IA0KPiBpcyBjdXN0b21hcnkuIFlvdSBj YW4gYWxzbyBkcm9wIHRoZSB0cmFpbGluZyBjb21tYSwgYXMgdGhlcmUgc2hvdWxkIG5ldmVyIGJl DQo+IGFueSBlbnRyeSBhZnRlciB0aGlzIG9uZS4NCj4gDQoNCkknbGwgdXBkYXRlIHRoZSBpbml0 aWFsaXplci4NCg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aXNjb250aV9jc2ky cnhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IHZp c2NvbnRpX2NzaTJyeCAqcHJpdjsNCj4gPiArCWludCBpcnEsIHJldDsNCj4gPiArDQo+ID4gKwlw cml2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwp Ow0KPiA+ICsJaWYgKCFwcml2KQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiAr CXByaXYtPmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKw0KPiA+ICsJcHJpdi0+YmFzZSA9IGRldm1f cGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsNCj4gPiArCWlmIChJU19FUlIocHJp di0+YmFzZSkpIHsNCj4gPiArCQlkZXZfZXJyKHByaXYtPmRldiwgIkZhaWxlZCB0byBnZXQgcmVn aXN0ZXJzXG4iKTsNCj4gDQo+IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZSgpIHByaW50 cyBhbiBlcnJvciBtZXNzYWdlIGFscmVhZHksIHlvdSBjYW4NCj4gZHJvcCB0aGlzIG9uZS4NCj4g DQoNCkknbGwgZHJvcCB0aGUgbWVzc2FnZSBvdXRwdXQuDQoNCj4gPiArCQlyZXR1cm4gUFRSX0VS Uihwcml2LT5iYXNlKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRf aXJxKHBkZXYsIDApOw0KPiA+ICsJaWYgKGlycSA8IDApDQo+ID4gKwkJcmV0dXJuIGlycTsNCj4g DQo+IEhlcmUsIG9uIHRoZSBvdGhlciBoYW5kLCBhbiBlcnJvciBtZXNzYWdlIHdvdWxkIGJlIHVz ZWZ1bC4gWW91IGNhbiB1c2UNCj4gZGV2X2Vycl9wcm9iZSgpOg0KPiANCj4gCQlyZXR1cm4gZGV2 X2Vycl9wcm9iZShwcml2LT5kZXYsIGlycSwgIkZhaWxlZCB0byBnZXQgSVJRXG4iKTsNCj4gDQoN CkknbGwga2VlcCBpdC4NCg0KPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2 LCBpcnEsIHZpc2NvbnRpX2NzaTJyeF9pcnEsIDAsDQo+IEtCVUlMRF9NT0ROQU1FLCBwcml2KTsN Cj4gPiArCXByaXYtPmlycSA9IGlycTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJy KHByaXYtPmRldiwgInJlcXVlc3QgaXJxIGZhaWxlZDogJWRcbiIsIHJldCk7DQo+ID4gKwkJcmV0 dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBwcml2KTsNCj4gPiArDQo+ID4gKwlyZXQgPSB2aXNjb250aV9jc2kycnhfcGFyc2VfZHQocHJp dik7IC8qdGhpcyBmdW5jdGlvbiBkb2VzDQo+IHY0bDJfYXN5bmNfbmZfcmVnaXN0ZXIgKi8NCj4g PiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlwcml2LT5zdWJk ZXYub3duZXIgPSBUSElTX01PRFVMRTsNCj4gDQo+IE5vdCBuZWVkZWQsIHRoaXMgaXMgaGFuZGxl ZCBieSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldigpDQo+IA0KDQpJJ2xsIGRyb3AgaXQuDQoN Cj4gPiArCXByaXYtPnN1YmRldi5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJdjRsMl9zdWJkZXZf aW5pdCgmcHJpdi0+c3ViZGV2LCAmdmlzY29udGlfY3NpMnJ4X3N1YmRldl9vcHMpOw0KPiA+ICsJ djRsMl9zZXRfc3ViZGV2ZGF0YSgmcHJpdi0+c3ViZGV2LCAmcGRldi0+ZGV2KTsNCj4gPiArCXNu cHJpbnRmKHByaXYtPnN1YmRldi5uYW1lLCBzaXplb2YocHJpdi0+c3ViZGV2Lm5hbWUpLCAiJXMg JXMiLA0KPiBLQlVJTERfTU9ETkFNRSwNCj4gPiArCQkgZGV2X25hbWUoJnBkZXYtPmRldikpOw0K PiA+ICsNCj4gPiArCXByaXYtPnN1YmRldi5pbnRlcm5hbF9vcHMgPSAmdmlzY29udGlfY3NpMnJ4 X2ludGVybmFsX29wczsNCj4gPiArCXByaXYtPnN1YmRldi5mbGFncyA9IFY0TDJfU1VCREVWX0ZM X0hBU19ERVZOT0RFOw0KPiA+ICsJcHJpdi0+c3ViZGV2LmVudGl0eS5mdW5jdGlvbiA9DQo+ID4g K01FRElBX0VOVF9GX1BST0NfVklERU9fUElYRUxfRk9STUFUVEVSOw0KPiANCj4gTUVESUFfRU5U X0ZfVklEX0lGX0JSSURHRSBzZWVtcyBtb3JlIGFwcHJvcHJpYXRlLg0KPiANCg0KSSdsbCB1c2Ug TUVESUFfRU5UX0ZfVklEX0lGX0JSSURHRS4NCg0KPiA+ICsJcHJpdi0+c3ViZGV2LmVudGl0eS5v cHMgPSAmdmlzY29udGlfY3NpMnJ4X2VudGl0eV9vcHM7DQo+ID4gKw0KPiA+ICsJcHJpdi0+cGFk c1tWSVNDT05USV9DU0kyUlhfUEFEX1NJTktdLmZsYWdzID0NCj4gTUVESUFfUEFEX0ZMX1NJTks7 DQo+ID4gKwlwcml2LT5wYWRzW1ZJU0NPTlRJX0NTSTJSWF9QQURfU1JDXS5mbGFncyA9DQo+IE1F RElBX1BBRF9GTF9TT1VSQ0U7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNf aW5pdCgmcHJpdi0+c3ViZGV2LmVudGl0eSwNCj4gPiArVklTQ09OVElfQ1NJMlJYX1BBRF9OVU0s IHByaXYtPnBhZHMpOw0KPiANCj4gCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJnByaXYt PnN1YmRldi5lbnRpdHksDQo+IEFSUkFZX1NJWkUocHJpdi0+cGFkcyksDQo+IAkJCQkgICAgIHBy aXYtPnBhZHMpOw0KPiANCj4gDQoNCkknbGwgdXNlIEFSUkFZX1NJWkUuDQoNCj4gPiArCWlmIChy ZXQpDQo+ID4gKwkJZ290byBlcnJfY2xlYW51cF9hc3luYzsNCj4gPiArDQo+ID4gKwlyZXQgPSB2 NGwyX3N1YmRldl9pbml0X2ZpbmFsaXplKCZwcml2LT5zdWJkZXYpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlnb3RvIGVycl9jbGVhbnVwX21lZGlhX2VudGl0eTsNCj4gPiArDQo+ID4gKwlyZXQg PSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldigmcHJpdi0+c3ViZGV2KTsNCj4gPiArCWlmIChy ZXQgPCAwKQ0KPiA+ICsJCWdvdG8gZXJyX2NsZWFudXBfc3ViZGV2X3N0YXRlOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2NsZWFudXBfc3ViZGV2X3N0YXRlOg0KPiA+ ICsJdjRsMl9zdWJkZXZfY2xlYW51cCgmcHJpdi0+c3ViZGV2KTsNCj4gPiArDQo+ID4gK2Vycl9j bGVhbnVwX21lZGlhX2VudGl0eToNCj4gPiArCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZwcml2LT5z dWJkZXYuZW50aXR5KTsNCj4gPiArDQo+ID4gK2Vycl9jbGVhbnVwX2FzeW5jOg0KPiA+ICsJdjRs Ml9hc3luY19uZl91bnJlZ2lzdGVyKCZwcml2LT5ub3RpZmllcik7DQo+ID4gKwl2NGwyX2FzeW5j X25mX2NsZWFudXAoJnByaXYtPm5vdGlmaWVyKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aXNjb250aV9jc2kycnhfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArCXN0cnVjdCB2aXNjb250aV9jc2ky cnggKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArDQo+ID4gKwl2NGwy X2FzeW5jX25mX3VucmVnaXN0ZXIoJnByaXYtPm5vdGlmaWVyKTsNCj4gPiArCXY0bDJfYXN5bmNf bmZfY2xlYW51cCgmcHJpdi0+bm90aWZpZXIpOw0KPiA+ICsJdjRsMl9hc3luY191bnJlZ2lzdGVy X3N1YmRldigmcHJpdi0+c3ViZGV2KTsNCj4gPiArDQo+ID4gKwl2NGwyX3N1YmRldl9jbGVhbnVw KCZwcml2LT5zdWJkZXYpOw0KPiA+ICsJbWVkaWFfZW50aXR5X2NsZWFudXAoJnByaXYtPnN1YmRl di5lbnRpdHkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciB2aXNjb250aV9jc2kycnhfZHJpdmVyID0gew0KPiA+ICsJLnByb2JlID0gdmlzY29udGlf Y3NpMnJ4X3Byb2JlLA0KPiA+ICsJLnJlbW92ZSA9IHZpc2NvbnRpX2NzaTJyeF9yZW1vdmUsDQo+ ID4gKwkuZHJpdmVyID0gew0KPiA+ICsJCS5uYW1lID0gInZpc2NvbnRpX2NzaTJyeF9kZXYiLA0K PiA+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHZpc2NvbnRpX2NzaTJyeF9vZl90YWJsZSwNCj4gPiAr CX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHZpc2NvbnRp X2NzaTJyeF9kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9EVUxFX0FVVEhPUigiWXVqaSBJc2hpa2F3 YSA8eXVqaTIuaXNoaWthd2FAdG9zaGliYS5jby5qcD4iKTsNCj4gPiArTU9EVUxFX0RFU0NSSVBU SU9OKCJUb3NoaWJhIFZpc2NvbnRpIENTSS0yIHJlY2VpdmVyIGRyaXZlciIpOw0KPiA+ICtNT0RV TEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7DQo+IA0KPiAtLQ0KPiBSZWdhcmRzLA0KPiANCj4g TGF1cmVudCBQaW5jaGFydA0KDQpSZWdhcmRzLA0KDQpZdWppIElzaGlrYXdhDQo=