From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1D093C61DA4 for ; Thu, 9 Mar 2023 11:31:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231438AbjCILb5 (ORCPT ); Thu, 9 Mar 2023 06:31:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48500 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231492AbjCILbu (ORCPT ); Thu, 9 Mar 2023 06:31:50 -0500 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2432DD341 for ; Thu, 9 Mar 2023 03:31:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1678361494; x=1709897494; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=d2bd7BTxD06jlY2Y0SyZ2kCqZmdHAPlgybj2tn37q5g=; b=K9cEsBeJBYLfYbwU4cH34+ig4lK5LC2tO9TwCvdlzpBUsXPfwzAQXg38 WWbNwbd2sGYOU/bdBQIUGDvlRfLiuCsiBMuqKv6aLuxKz70YN6CBYjbmn E5ynt9RrY1XQQ6M31KBoItZYjijKJSd6UTMZYo2f7n/2uMvoTk4yjla71 TAr8EEfBg0OiKfVIueJRzgyO0AxP8Ds3EIaV4EstEfTTOsv5OP3tSbcL2 2zgWFYD6B/oXRKYTqpkDikw+rEaR4y0gof10gvNQXt+whzigHFCdSpDMW nPSQKM7iPOfTAZVFJJk7IoMlMIS53QL23nDVUU+0E0z4GY8lAe8daEgxz Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10643"; a="316817117" X-IronPort-AV: E=Sophos;i="5.98,246,1673942400"; d="scan'208";a="316817117" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Mar 2023 03:31:34 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10643"; a="670690721" X-IronPort-AV: E=Sophos;i="5.98,246,1673942400"; d="scan'208";a="670690721" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga007.jf.intel.com with ESMTP; 09 Mar 2023 03:31:33 -0800 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Thu, 9 Mar 2023 03:31:33 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Thu, 9 Mar 2023 03:31:32 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21 via Frontend Transport; Thu, 9 Mar 2023 03:31:32 -0800 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.175) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.21; Thu, 9 Mar 2023 03:31:32 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E1M+fm+C5//ljwncr+/4rkFFZXa0wPWzYDnLd3ZgDIwM6miX75SqloqsxOjorXSBxV3RP93HGff5MH1gt87ohjwgtUCf1oL0isCPs3Q4apYQmkFZ6biGqwSdZvcUYAghMqNtEP3LFMF/bd9uPsrLNcsaDlrq9S+ZcSF7/TR4TzJtxdNkt8aYw/+0BwEkTnewPIPSxr18gpf7nMVwvnYn/HnlhrlJ1ZB7uQxHwcEh/IxdTJoX+jX9DZU40DPCgIfuqUGR24BeJlsxORCB22qgm2engbHwavIqs+ZuRRqG1mIt1a6XchuNsJjYaeySGYCOu1jvsVE0lqaYoTRysDxyXQ== 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=d2bd7BTxD06jlY2Y0SyZ2kCqZmdHAPlgybj2tn37q5g=; b=R+GsNnWSKNv/+LXViW+hfWS9UUoxLJunu1KnXkz91dqaKKPfGRPbyQBZvRffcJRMsq5avSWLBcSTTDEa2SdZKxjNaAbE+lOE2Zmz/0D9MgGf13UgAfvvJxjHMqxKUeI+aMKaVVzsJLh0XqA7nuae79ws7cGSOKVXHVOreqqMacoltmOsFM+kx4qC6UTbJXiXsvrdbzR8dxUxf0CMeCs/BqfiMwji3Cqyw1NTxHtWYI/ECgZAB4FsP/ubw0yLE5wwkN/+aII6KbVD+X//ZFMvddetNzWFPxsTtkdaMGSThwDGrR+epdnKnpBqu+OD6ajvLXeIrTJD7FJvlYQk9ziETQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BL1PR11MB5978.namprd11.prod.outlook.com (2603:10b6:208:385::18) by CH3PR11MB7345.namprd11.prod.outlook.com (2603:10b6:610:14a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Thu, 9 Mar 2023 11:31:30 +0000 Received: from BL1PR11MB5978.namprd11.prod.outlook.com ([fe80::f403:a0a2:e468:c1e9]) by BL1PR11MB5978.namprd11.prod.outlook.com ([fe80::f403:a0a2:e468:c1e9%4]) with mapi id 15.20.6156.029; Thu, 9 Mar 2023 11:31:30 +0000 From: "Huang, Kai" To: "jarkko@kernel.org" , "haitao.huang@linux.intel.com" CC: "linux-sgx@vger.kernel.org" , "Chatre, Reinette" , "Dhanraj, Vijay" , "dave.hansen@linux.intel.com" Subject: Re: [RFC PATCH v4 2/4] x86/sgx: Implement support for MADV_WILLNEED Thread-Topic: [RFC PATCH v4 2/4] x86/sgx: Implement support for MADV_WILLNEED Thread-Index: AQHZMtTIU78a0A3o9UaUPrwPUmNX5q7OTQIAgACfroCAABrOAIAADTuAgAAPNoCAAFobgIAAUaaAgABy3wCAA5ciAIAACKGAgAY6gQCAADnpAIAV3bGAgAGoFwCAALMwAA== Date: Thu, 9 Mar 2023 11:31:29 +0000 Message-ID: References: <3c7b4f7bf3e7c2a213662b1c9fdaa979050a9327.camel@intel.com> <39903b057751d963e4e9b2a8cd5271fe3c102509.camel@intel.com> <5de607230294552829b075846a66688f65f3f74e.camel@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.46.4 (3.46.4-1.fc37) authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BL1PR11MB5978:EE_|CH3PR11MB7345:EE_ x-ms-office365-filtering-correlation-id: 1aaa17bb-1027-48db-be1b-08db2091d3aa x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Bi609Pa1TrVV+xR/snfCkygbEZn1/3ScGKpkTsOF0wJ2nXd6IdArQ5E04C5EupG89LxTvG/r1Q6l+dL+fcwgaimOIwGugh2VaMeMK841SLWl9Xu/h6tRpT+zllML+nFMXP/4+C4Wgnl1XcdKFk6rb1yBMNFpEpusKe9nUMKK72EzpQnFkJJP/gmAMvgR6037zIzFHTrfCpB+w3mdlCT9IQb3UsssQns2XmsyV+CUXUuy6HPsiXY5Xfx2hHAmu0VY8JJkau3dD4sYNudUP8+2VOUlXopH8i3IcjPGHwDpS8XKqzPAuVD4iCzsnC9VwXjm7CtMQtfniXrnWLi/LrruKLAMfcuOYWj1+tPS3IR+jrPiuYP4taLZ8ZAjMxu5G9M5inku0GFnFVQHGQmVOXNmNEvQ/QBA9j+gHWQ4EXbfIQEIJ+7CVb2BtS1/L85OI6l08rEfJsYFUDHtNSS7o0phD5J+emrY+chMBwQxka8OKxRtJIOLfKhOnyzYf+C1uFJuW/MYdbYsHfCiu0/jb2RkFsVES4Pzlmt+Wgk4J4sE3e0HYB7axth2AahNVp01sIG2+bE/hdNzpQTQiTeqYiXYC+aKZTVk9luM3qQ8E6ZRdoUTRVarnaQVmpnw1lxMHpTMWJLBAGxbhny7VQ6a++Fkc/13RcSsxjtEr3r65qkMpEw1mFvDHH4ls/b80BbD1tpcawr5cO+Wi62Vb5Xrvu9ifJW8Ox+uA45BwwaOtEwbRmc= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL1PR11MB5978.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(376002)(136003)(346002)(366004)(39860400002)(396003)(451199018)(36756003)(316002)(54906003)(110136005)(478600001)(6486002)(8936002)(5660300002)(71200400001)(4326008)(66446008)(91956017)(66476007)(76116006)(8676002)(66946007)(66556008)(64756008)(30864003)(2906002)(41300700001)(122000001)(82960400001)(38070700005)(86362001)(38100700002)(186003)(2616005)(26005)(6506007)(6512007)(83380400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Y3U4SkFENzhaSjZMYmM2RkpWK1ZEMy92S3hJWDNhYnQzRjdnNDY4TmQxczhF?= =?utf-8?B?MTdIRDhHSzAzUXpreEdKa3IzMHo3Z3BRWU1TWkszcEx4MHl3aTZUZEIySlli?= =?utf-8?B?MmRnaUljOW04VkE2ZG5RU3BEVFlhWWFnTlpSbDlSSFdOUGVvTG9UYzFrdGky?= =?utf-8?B?bnlGRlNqbkRPazRnMVZkT0xLNnJrVGF3TFVsalUrR3VELzVMTjVCZCt2aFZO?= =?utf-8?B?VEpzSDFIVU8wZ0ZqTmlKTkMrOTJFTDZSR2l0bG5ydTdOTWhLVjR5T2twbklD?= =?utf-8?B?L1IxcnZ6MnF5OTgvVFpJWmJzMWxldTRUVUZZY3NwUmdMak5RVUpSaHFIbGxq?= =?utf-8?B?S2JNZW5HVUgvTEl6Tm5DM05maSt5Q2tuakdJeTZPbEJYY0I2V3Rsd2NGZGc5?= =?utf-8?B?Ylk0TGZnTHozUitYUFl4dksvZkVNYXkzTFMyNjRNRmtZcndEUTVkdE9meTV5?= =?utf-8?B?MWJsRTcwMVc4N1JXNkRmREREYThrNSszbjR2V2JCS2k3bUZIK045em9uanl2?= =?utf-8?B?OTg1Y2N5Zmhoek9BL1VNRGxYanBpRFV5bVRkOTM0LzRpVXV4WW1BbkhOVEtv?= =?utf-8?B?OWpOZU54Sm4zYjRMUmwyQ0xoWko0YTNPREcvZWEzMG1QWEdraS9vRnlhSUU3?= =?utf-8?B?blFPc3BTSTRrVXdDVTc3eUw4ZWFDdmNhZmhTWU1heElTZzNoZkUrVE1IMmp4?= =?utf-8?B?b2tITUEwVGlybDVLSkloZHczZ0lmWXhVKzM4dkxqb2IyWmgzeFdnb1owRC9x?= =?utf-8?B?K2FUSkRFLzg0cjd6WFI0ZTlUdVcrbjI2TU5vN3dFU0crZUhWYlE1U3d2WUJn?= =?utf-8?B?SkZyWlF2Q3FEckpRa0s5SFRlWGUxZ3hRMlhUamo1aHRWVlJkRGZ0a1hnOVJw?= =?utf-8?B?d2RBR29jOWlzbm1ZTUtuL3VJcS9PWm81Y043SXlFU2dmRnA4bm9EOUkxY1o0?= =?utf-8?B?NkxPOVNTbmVseWFUVERKZ2VEOWxUbU9uL1dNY01ZUEpQMDR3cGtYWXFhRGJF?= =?utf-8?B?aVZWNDRWSmhlOXcyVUJ4YnBJWFJ0UkR4UnlnaE9oNWxpb1dCOTBNUVRxK1pT?= =?utf-8?B?dm9xckpmbUdYbkZNTEhMVTZoRW9jOVp2Ym5IdXZuT21HU0lKN0FWMVdDTkRp?= =?utf-8?B?c3g3eHVyb0MxL2VnZ0FjMnZlT1ZzUDd5ZXBEQWlwRGxqajN5djNsTHVHdWxJ?= =?utf-8?B?ZDFwdkVsakpiN1YxRzZUK1J4SklTSU81NytqU2J2bXUrT0ZjeEhpc1A0dVlv?= =?utf-8?B?NGZleWhCaFNqZTlrck5jalZuMFZENndNazVRaXo0cFNtSGhHWWgvNjU1SGRC?= =?utf-8?B?YlFKbXVCVnNUNHRZV25qZHhZYjVLYmRpejVqQXJhaTVGb1hOem1HQlVpMm5v?= =?utf-8?B?Q2l6aEppM1RlRVZvSnMzTFJQQUVJN2VDOXJMcUhaSTVXOENlZ1FXc2hkWGQy?= =?utf-8?B?MnJjWnlTT3krMEUybFFZeXVOQlcwUkxzc3NBbnF1V0FzcTh2QkZ3LzJXMHBj?= =?utf-8?B?RHNNd2kyU3JNTExzSE55NWZRbWRHYk5DdHhCaTFOM0VhY3JZTzZGU2FFdXhp?= =?utf-8?B?WE00Zk81MGFJOXR2OUprR09mZVBOQVVURnFpaGNDSittd0ZlS3oxazNsWHZF?= =?utf-8?B?Ty8zb016UXQ2dDBjWEFOdkJha0d1ZWNpdnBsejljdXI4cVpaNy81UE1xL290?= =?utf-8?B?NmRUQnJIZVBQei9mdGN2OG4yOXdub2I0NWJjZDdLZ2ZwV2xjTGdoWGl2SXE3?= =?utf-8?B?bVFjQ3JnNXNybFhqMm9nM0tZY0N1eUFocGp4ampwd1RXOE10YzlJRGg5b3M2?= =?utf-8?B?RUlBVGtKZ0FuRmZ6SnYyNzYzS2x5QVBvd2pBYUlBLzI1aXV2UWZUditNcnRt?= =?utf-8?B?d08zbXBObUYzbGpxd3FSUmRua2xJVlpQUSs5Q3BMeDhRNEkxYjVjUUp0ZzBT?= =?utf-8?B?UFZCQTlLOTh3OG9OZkpXZDlpbGFTZXR6eGlqanpEclg1WlFjSGdoS0xzYzZN?= =?utf-8?B?b0JKaTNsaW04cG5YbUxSL0hST2dUUUN6U2lOdVdDenRrelFrUkNGb1FnMlNo?= =?utf-8?B?YWhEbGR5WnBLMXc2RkZpTTVpWmNjSUZtYTVvRy92bnJSaVlNV0l4UEgrYzlY?= =?utf-8?B?RWZEejNScGVJRERIQzdsK2JpVmZXZFMrQmhrN3o4VGRnUllicjBsWjRTVXJl?= =?utf-8?B?Vmc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL1PR11MB5978.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1aaa17bb-1027-48db-be1b-08db2091d3aa X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Mar 2023 11:31:29.5961 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: RmeyyJvat7yjpLf/3ZmmvZs3+NR/OPdSAzKoEWyiJzSU0l8jckdKy1sEtRubb9UJ3Mcy9iG1AFmL52mgCS6V6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR11MB7345 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-sgx@vger.kernel.org T24gV2VkLCAyMDIzLTAzLTA4IGF0IDE4OjUwIC0wNjAwLCBIYWl0YW8gSHVhbmcgd3JvdGU6DQo+ IEhpIEthaQ0KPiANCj4gVGhhbmtzIGZvciB5b3VyIGRldGFpbGVkIHJldmlldy4NCj4gDQo+IE9u IFR1ZSwgMDcgTWFyIDIwMjMgMTc6MzI6MTUgLTA2MDAsIEh1YW5nLCBLYWkgPGthaS5odWFuZ0Bp bnRlbC5jb20+IHdyb3RlOg0KPiANCj4gPiBPbiBUdWUsIDIwMjMtMDItMjEgYXQgMTk6MzcgLTA2 MDAsIEhhaXRhbyBIdWFuZyB3cm90ZToNCj4gPiA+IE9uIFR1ZSwgMjEgRmViIDIwMjMgMTY6MTA6 MDIgLTA2MDAsIGphcmtrb0BrZXJuZWwub3JnICANCj4gPiA+IDxqYXJra29Aa2VybmVsLm9yZz4N Cj4gPiA+IHdyb3RlOg0KPiA+ID4gDQo+ID4gPiA+IE9uIEZyaSwgRmViIDE3LCAyMDIzIGF0IDA1 OjAzOjA1UE0gLTA2MDAsIEhhaXRhbyBIdWFuZyB3cm90ZToNCj4gPiA+ID4gPiBIaSBKYXJra28N Cj4gPiA+ID4gPiANCj4gPiA+ID4gPiBPbiBGcmksIDE3IEZlYiAyMDIzIDE2OjMyOjEyIC0wNjAw LCBqYXJra29Aa2VybmVsLm9yZw0KPiA+ID4gPiA+IDxqYXJra29Aa2VybmVsLm9yZz4NCj4gPiA+ ID4gPiB3cm90ZToNCj4gPiA+ID4gPiANCj4gPiA+ID4gPiA+IE9uIFdlZCwgRmViIDE1LCAyMDIz IGF0IDA5OjQyOjMwQU0gLTA2MDAsIEhhaXRhbyBIdWFuZyB3cm90ZToNCj4gPiA+ID4gPiA+ID4g T24gV2VkLCAxNSBGZWIgMjAyMyAwMjo1MToyMyAtMDYwMCwgSHVhbmcsIEthaSAgDQo+ID4gPiA8 a2FpLmh1YW5nQGludGVsLmNvbT4NCj4gPiA+ID4gPiA+ID4gd3JvdGU6DQo+ID4gPiA+ID4gPiA+ IA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiA+ID4gPiA+IA0KPiA+ID4g PiA+ID4gPiA+ID4gPiBTaW5jZSBzZ3hfbW1hcCgpIGNhbiBoYXBwZW4gYmVmb3JlIGVuY2xhdmUg aXMgY3JlYXRlZCwNCj4gPiA+ID4gPiA+ID4gY2FsY3VsYXRpbmcgdGhlDQo+ID4gPiA+ID4gPiA+ ID4gPiA+IHZtX3Bnb2ZmDQo+ID4gPiA+ID4gPiA+ID4gPiA+IGZyb20gZW5jbGF2ZV9iYXNlIGlz IGNvbmNlcHR1YWxseSB3cm9uZy4gIEV2ZW4gaWYgeW91ICANCj4gPiA+IHJlYWxseQ0KPiA+ID4g PiA+IHdhbnQNCj4gPiA+ID4gPiA+ID4gPiA+IHRvIGRvDQo+ID4gPiA+ID4gPiA+ID4gPiA+IGl0 LCBpdA0KPiA+ID4gPiA+ID4gPiA+ID4gPiBzaG91bGQgYmU6DQo+ID4gPiA+ID4gPiA+ID4gPiA+ IA0KPiA+ID4gPiA+ID4gPiA+ID4gPiAJaWYgKGVuY2xhdmVfaGFzX2luaXRpYWxpemVkKCkpDQo+ ID4gPiA+ID4gPiA+ID4gPiA+IAkJdm1hLT52bV9wZ29mZiA9IC4uLjsNCj4gPiA+ID4gPiA+ID4g PiA+IA0KPiA+ID4gPiA+ID4gPiA+ID4gSSBnb3QgeW91ciBwb2ludCBub3cuIEkgY2FuIGFkZCBh IGNvbmRpdGlvbiB0byB0ZXN0IHRoZQ0KPiA+ID4gPiA+ID4gPiBTR1hfRU5DTF9DUkVBVEVEDQo+ ID4gPiA+ID4gPiA+ID4gPiBiaXQuIEhvd2V2ZXIsIHdlIHN0aWxsIGhhdmUgYSBob2xlIGlmIHdl IG11c3QgaGFuZGxlIHRoZQ0KPiA+ID4gPiA+IHNlcXVlbmNlDQo+ID4gPiA+ID4gPiA+ID4gPiBt bWFwKC4uLiwgZW5jbGF2ZV9mZCkgYmVpbmcgY2FsbGVkIGJlZm9yZSBFQ1JFQVRFIGlvY3RsLiBX ZQ0KPiA+ID4gPiA+ID4gPiBjYW4ndCBsZWF2ZQ0KPiA+ID4gPiA+ID4gPiA+ID4gdm1fcGdvZmYg bm90IHNldCBmb3IgdGhvc2UgY2FzZXMuDQo+ID4gPiA+ID4gPiA+ID4gPiANCj4gPiA+ID4gPiA+ ID4gPiA+IFNpbmNlIG5vIG9uZSBkb2VzIHRoYXQgc28gZmFyLCBjYW4gd2UgZXhwbGljaXRseSBy ZXR1cm4gYW4gIA0KPiA+ID4gZXJyb3INCj4gPiA+ID4gPiA+ID4gZnJvbQ0KPiA+ID4gPiA+ID4g PiA+ID4gc2d4X21tYXAgd2hlbiB0aGF0IGhhcHBlbnM/DQo+ID4gPiA+ID4gPiA+ID4gPiBPdGhl ciBzdWdnZXN0aW9ucz8NCj4gPiA+ID4gPiA+ID4gPiANCj4gPiA+ID4gPiA+ID4gPiBBcyBJIHJl cGxpZWQgdG8gcGF0Y2ggNC80LCBJIGJlbGlldmUgdXNlcnNwYWNlIHNob3VsZCBwYXNzIHRoZQ0K PiA+ID4gPiA+IGNvcnJlY3QNCj4gPiA+ID4gPiA+ID4gPiBwZ29mZiBpbg0KPiA+ID4gPiA+ID4g PiA+IG1tYXAoKS4gIEl0J3Mgd3JvbmcgdG8gYWx3YXlzIHBhc3MgMCBvciBhbnkgcmFuZG9tIHZh bHVlLg0KPiA+ID4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gPiA+IElmIHVzZXJzcGFjZSBmb2xs b3cgdGhlIG1tYXAoKSBydWxlLCB5b3Ugd29uJ3QgbmVlZCB0byAgDQo+ID4gPiBtYW51YWxseQ0K PiA+ID4gPiA+IHNldA0KPiA+ID4gPiA+ID4gPiA+IHZtX3Bnb2ZmDQo+ID4gPiA+ID4gPiA+ID4g aGVyZSAod2hpY2ggaXMgaGFja3kgSU1ITykuICBFdmVyeXRoaW5nIHdvcmtzIGZpbmUuDQo+ID4g PiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gPiBTR1ggZHJpdmVyIHdh cyBmb2xsb3dpbmcgTUFQX0FOT05ZTU9VUyBzZW1hbnRpY3MuIElmIHdlIGNoYW5nZSAgDQo+ID4g PiB0aGF0LA0KPiA+ID4gPiA+ID4gPiBpdCdkDQo+ID4gPiA+ID4gPiA+IGJyZWFrIGN1cnJlbnQg dXNhZ2UvQUJJLg0KPiA+ID4gPiA+ID4gPiANCj4gPiA+ID4gPiA+ID4gSSBzdGlsbCB0aGluayBy ZXR1cm5pbmcgZXJyb3IgZm9yIGNhc2VzIG1tYXAoLi4uLCBlbmNsYXZlX2ZkKSBpZg0KPiA+ID4g PiA+ID4gPiBlbmNsYXZlIGlzDQo+ID4gPiA+ID4gPiA+IG5vdCBjcmVhdGVkIHdvdWxkIGJlIGxl c3MgaW50cnVzaXZlIGNoYW5nZS4NCj4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gSXMgdGhpcyBz b21ldGhpbmcgeW91IGNhcmUgaW4gU0dYIFNESz8NCj4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4g SXQgaXMgbm90IGNhdGVnb3JpY2FsbHkgZm9yYmlkZGVuIHNvIHRoYXQncyB3aHkgSSdtIGFza2lu Zy4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBTREsgZG9lcyBub3QgY2FyZSBhcyB3ZSB3b3VsZCBu ZXZlciBkbyB0aGlzIGFuZCBkb24ndCB0aGluayBhbnlvbmUgIA0KPiA+ID4gaXMNCj4gPiA+ID4g PiBkb2luZw0KPiA+ID4gPiA+IHRoYXQgZWl0aGVyLiBTdWdnZXN0aW5nIHJldHVybmluZyBlcnJv ciB0byBjb3ZlciBhbGwgY2FzZXMgc28gdXNlciAgDQo+ID4gPiBzcGFjZQ0KPiA+ID4gPiA+IHdv dWxkIG5vdCBhY2NpZGVudGFsbHkgY2F1c2UgaW5jb3JyZWN0IHZtX3Bnb2ZmIHNldC4NCj4gPiA+ ID4gDQo+ID4gPiA+IHZtX3Bnb2ZmICE9IDAgc2hvdWxkIHJlc3VsdCAtRUlOVkFMLg0KPiA+ID4g PiANCj4gPiA+IA0KPiA+ID4gRG8geW91IG1lYW4gJ29mZnNldCcgcGFzc2VkIGluIGZyb20gbW1h cCBzeXNjYWxsIGFuZCBjb252ZXJ0ZWQgdG8gcGdvZmYgIA0KPiA+ID4gaW4NCj4gPiA+IGtlcm5l bD8gSSBjYW4gc2VlIGl0IG9ubHkgcGFzc2VkIHRvIGRyaXZlciBpbiBnZXRfdW5tYXBwZWRfYXJl YS4gSSBjYW4gIA0KPiA+ID4gYWRkDQo+ID4gPiB0aGlzIGVuZm9yY2VtZW50IHRoZXJlIHNvIGl0 IGlzIGNvbnNpc3RlbnQgdG8gdGhlIE1BUF9BTk9OWU1PVVMgc3BlYyBpZg0KPiA+ID4gdGhhdCdz IHdoYXQgeW91IHN1Z2dlc3QuDQo+ID4gPiANCj4gPiA+ICAgdm1hLT52bV9wZ29mZiBpcyB0aGUg b2Zmc2V0IGluIHBhZ2VzIG9mIHRoZSB2bWEtPnZtX3N0YXJ0IHJlbGF0aXZlIHRvDQo+ID4gPiAn ZmlsZScuDQo+ID4gPiAgIEl0IGNhbiBub3QgYmUgemVybyBmb3IgYWxsIFZNQXMgb2YgdGhlIGVu Y2xhdmUuDQo+ID4gPiANCj4gPiA+IEtlcm5lbCBzZXRzIHZtYS0+dm1fcGdvZmYgPT0gdm1hLT52 bV9zdGFydD4+UEFHRV9TSElGVCBmb3IgcHJpdmF0ZSBhbm9uDQo+ID4gPiBWTUFzLCBhbmQgaWdu b3JlIGl0ICh6ZXJvKSBmb3Igc2hhcmVkIGFub24gbWFwcGluZy4NCj4gPiA+IA0KPiA+ID4gRm9y IHVzLCB3ZSBwcm9wb3NlIHRvIHNldCBpdCB0byBQRk5fRE9XTih2bWEtPnZtX3N0YXJ0IC0gZW5j bC0+YmFzZSkgIA0KPiA+ID4gdXBvbg0KPiA+ID4gbW1hcC4NCj4gPiANCj4gPiBTb3JyeSBmb3Ig bGF0ZSByZXBseS4gIEJhc2ljYWxseSBJIHdhcyBzaWNrIGFuZCBoYXZpbmcgbGltaXRlZCB3b3Jr aW5nICANCj4gPiB0aW1lIGluDQo+ID4gdGhlIHBhc3NlZCB0d28gd2Vla3MuDQo+ID4gDQo+ID4g Rm9yIHdoYXQgSSB1bmRlcnN0YW5kIG5vdywgU0dYIGRyaXZlciB3YW50cyB0byB1c2UgTUFQX0FO T05ZTU9VUyAgDQo+ID4gc2VtYW50aWMgZm9yDQo+ID4gbW1hcCgpcyBhZ2FpbnN0IC9kZXYvc2d4 X2VuY2xhdmUgKGZvciB3aGF0ZXZlciByZWFzb24gdGhhdCBJIGRvbid0ICANCj4gPiB1bmRlcnN0 YW5kKS4NCj4gPiBBbmQgYmVjYXVzZSBvZiB0aGF0LCB3ZSBldmVuIHdhbnQgdG8gZXhwbGljaXRs eSBlbmZvcmNlIHVzZXJzcGFjZSB0byAgDQo+ID4gYWx3YXlzIHBhc3MNCj4gPiAwIGFzIHBnb2Zm IGluIG1tYXAoKXMgKGhhc24ndCBiZWVuIGRvbmUgeWV0KS4NCj4gPiANCj4gPiBBbmQgdGhlbiBo ZXJlLCB3ZSB3YW50IHRvIHJld3JpdGUgdm1hLT5wZ29mZiBzbyB0aGF0IHRoZSBWTUEgY2FuIGFj dCAgDQo+ID4gX2xpa2VfIGENCj4gPiBub3JtYWwgZmlsZS1iYXNlZCBtbWFwKCkgc2VtYW50aWNz IChkZXNwaXRlIGl0IGlzIGluZGVlZCBhIGZpbGUtYmFzZWQgIA0KPiA+IFZNQSksDQo+ID4gYmVj YXVzZSB0aGUgVkZTIGZhZHZpY2UoKSBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIGZpbGUtYmFzZWQg Vk1BcyBhcmUgIA0KPiA+IGFsd2F5cw0KPiA+IGZvbGxvd2luZyBmaWxlLWJhc2VkIG1tYXAoKSBz ZW1hbnRpY3MuDQo+ID4gDQo+ID4gSG1tLi4NCj4gPiANCj4gPiBEb2Vzbid0IHRoaXMgc291bmQg d2VpcmQ/DQo+ID4gDQo+IA0KPiBTb21ldGltZSB3ZWlyZCBtZWFucyBnb29kIG9yIGNyZWF0aXZl IGFzIGV4cHJlc3NlZCBpbiBhIHBvcHVsYXIgc2xvZ2FuIGluICANCj4gdGhlIGNpdHkgd2hlcmUg SSBsaXZlLiBKdXN0IGpva2luZzotKQ0KPiANCj4gPiBJIG11c3QgaGF2ZSBiZWVuIG1pc3Npbmcg c29tZXRoaW5nLCBidXQgd2h5IGNhbm5vdCBTR1ggZHJpdmVyIGp1c3QgIA0KPiA+IGFsd2F5cyBm b2xsb3cNCj4gPiBmaWxlLWJhc2VkIG1tYXAoKSBzZW1hbnRpY3MgYXQgdGhlIGJlZ2lubmluZz8N Cj4gPiANCj4gPiBGb3IgaW5zdGFuY2UsIHdoYXQncyB3cm9uZyB3aXRoOg0KPiA+IA0KPiA+IAkx KSBlbmNsX2ZkID0gb3BlbigiL2Rldi9zZ3hfZW5jbGF2ZSIpDQo+ID4gCTIpIGVuY2xfYmFzZSA9 IG1tYXAoLi4uLCBlbmNsX3NpemUsIE1BUF9TSEFSRUQsIGVuY2xfZmQsIDAgLyogcGdvZmYgKi8p DQo+ID4gCTMpIGlvY3RsKEVDUkVBVEUsIGVuY2xfYmFzZSwgZW5jbF9zaXplKQ0KPiA+IA0KPiA+ IChJbiBpb2N0bChFQ1JFQVRFKSwgd2UgbWlnaHQgd2FudCB0byB2ZXJpZnkgdGhlIFZNQSB3ZSBm b3VuZCBoYXMgdGhlIHNhbWUNCj4gPiBlbmNsX2Jhc2UgYXMgc3RhcnRpbmcgYWRkcmVzcywgYW5k IDAgcGdvZmYpLg0KPiA+IA0KPiA+IEFuZCBpbiBmb2xsb3dpbmcgbW1hcCgpcyBpbiB3aGljaCB3 ZSB3YW50IHRvIG1hcCBhIHNtYWxsIHJhbmdlIG9mICANCj4gPiBlbmNsYXZlOg0KPiA+IA0KPiA+ IAllbmNsX2FkZHIgPSBtbWFwKGVuY2xfYWRkciwgTUFQX1NIQVJFRHxNQVBfRklYRUQsIGVuY2xf ZmQsDQo+ID4gCQkJKGVuY2xfYWRkciAtIGVuY2xfYmFzZSkgPj4gUEFHRV9TSElGVCk7DQo+ID4g DQo+ID4gPw0KPiA+IA0KPiA+IEFueXRoaW5nIHdyb25nIGFib3ZlPw0KPiA+IA0KPiANCj4gSSBi ZWxpZXZlIHRoaXMgY2FuIGJlIGRvbmUgZXhjZXB0IGZvciB0aGF0IHlvdSBhcmUgYnJlYWtpbmcg ZXhpc3RpbmcgY29kZSAgDQo+IGJ5IHJlcXVpcmluZyBwZ19vZmYgZm9yIGFsbCBtbWFwcyBub3cu DQo+IA0KPiBEb2luZyBtbWFwIGJlZm9yZSBFQ1JFQVRFIGFsc28gZWZmZWN0aXZlbHkgYnlwYXNz ZXMgc2d4X2VuY2xfbWF5X21hcC4gQW5kICANCj4gd2UgaGF2ZSBhIHZlcnkgbG9uZyB0aHJlYWQg b2YgZGlzY3Vzc2lvbiBhYm91dCB0aGlzWzFdIGFuZCB0aGF0J3Mgd2h5ICANCj4gc2d4X2VuY2xf bWF5X21hcCBjb21lIGludG8gcGxheSB0byBsaW1pdCBWTUEgcGVybWlzc2lvbnMgdG8gdGhvc2Ug Z2l2ZW4gaW4gIA0KPiBTZWNJbmZvIGJ5IEVBREQgaW9jdGwuIEhvd2V2ZXIsIGN1cnJlbnQgY29k ZSBkb2VzIG5vdCBleHBsaWNpdGx5IGJsb2NrIGl0ICANCj4gYW5kIEkgdGhpbmsgaXQnZCBiZSBi ZXR0ZXIgZG8gaXQuICBNb3JlIGNvbW1lbnQgYmVsb3cgb24gdGhpcyBwb2ludC4NCg0KVGhhbmtz IGZvciB0aGUgaW5mbyENCj4gDQo+ID4gSW4gZmFjdCwgaWYgdGhlIGZpcnN0IG1tYXAoKSBpbiBz dGVwIDIpIGJlZm9yZSBJT0NUTChlY3JlYXRlKSB1c2VkDQo+ID4gTUFQX0FOT05ZTU9VUywgSUlV QyB0aGF0IFZNQSB3aWxsIHN0YXkgYXMgYW5vbnltb3VzIFZNQSBidXQgd2lsbCBuZXZlciBiZQ0K PiA+IGNvbnZlcnRlZCB0byBTR1ggZmlsZS1iYXNlZCBvbmUsIGJlY2F1c2UgYnkgbG9va2luZyBh dCB0aGUgY29kZSwgSSBzZWUgIA0KPiA+IG5laXRoZXINCj4gPiBpb2N0bChFQ1JFQVRFKSBub3Ig aW9jdGwoRUlOSVQpIGNvbnZlcnRzIHRoYXQgVk1BIHRvIGZpbGUtYmFzZWQgb25lLg0KPiA+IA0K PiA+IFRoYXQgYmVpbmcgc2FpZCwgYWxsIHBhZ2UgZmF1bHRzIGNhdXNlZCBieSB1c2Vyc3BhY2Ug YWNjZXNzIHRvIHRoYXQgVk1BICANCj4gPiB3aWxsDQo+ID4gc3RpbGwgZ28gdG8gYW5vbnltb3Vz IFZNQSdzIGZhdWx0IHBhdGgsIGJ1dCBub3QgU0dYIGRyaXZlcidzLg0KPiA+IA0KPiANCj4gSXQg aXMgcmVxdWlyZWQgdG8gbW1hcCBhbm9ueW1vdXNseSB3aXRoIFBST1RfTk9ORSBpbml0aWFsbHkg YW5kDQo+IHVzZXIgc3BhY2UgbXVzdCBpbnZva2UgbW1hcCB3aXRoIGVuY2xhdmUgZmQgYWZ0ZXIg RUFERGluZyBlYWNoICANCj4gc2VnbWVudHMvYXJlYXMuIFBGIGhhbmRsZXIgd2lsbCBjaGVjayBW TUEgcHJvdCBiaXRzIGFnYWluc3QgIA0KPiB2bV9tYXhfcHJvdF9iaXRzIGluIHNneF9lbmNsX2xv YWRfcGFnZV9pbl92bWEsIGFuZCByZXBvcnQgZmFpbHVyZSBvbiBhbnkgIA0KPiBtaXNtYXRjaC4N Cj4gSWYgdXNlciBzcGFjZSBkb2VzIG5vdCBtbWFwKC4uLixlbmNsX2ZkKSBhZnRlciBFQURELCBw YWdlcyB3aWxsIGhhdmUgIA0KPiBQUk9UX05PTkUgYW5kIGZhaWwgb24gYW55IGFjY2Vzcy4NCj4g DQo+ID4gVGhpcyBpcyBmaW5lIGZvciBTR1gxIGFzIGFsbCBlbmNsYXZlIHBhZ2VzIGFyZSBmdWxs eSBwb3B1bGF0ZWQuICBGb3IgIA0KPiA+IFNHWDIsDQo+ID4gX3VubGVzc18geW91IGV4cGxpY2l0 bHkgbW1hcCgiL2Rldi9zZ3hfZW5jbGF2ZSIpIHRob3NlIGR5bmFtaWNhbCByYW5nZXMsICANCj4g PiB0aGUNCj4gPiBmYXVsdCB3aWxsIG5ldmVyIGJlIGhhbmRsZWQgYnkgU0dYIGRyaXZlci4NCj4g PiANCj4gDQo+IEluZGVlZCwgaXQgaXMgcmVxdWlyZWQgdXNlciBzcGFjZSBpbnZva2UgbW1hcCB0 byBjb25maWcgdGhlIHJlZ2lvbnMgZm9yICANCj4gRUFVRy4NCj4gDQo+ID4gQXJjaGl0ZWN0dXJh bGx5LCBmb3IgU0dYMiwgaWYgeW91IG1tYXAoKSB0aGUgZW50aXJlIGVuY2xhdmUgcmFuZ2UgKGFz IGluICANCj4gPiBzdGVwDQo+ID4gMiksIHlvdSBkb24ndCBuZWVkIGV4cGxpY2l0bHkgbW1hcCgp IGFsbCBkeW5hbWljIHJhbmdlcy4gIFRoZSB1c2Vyc3BhY2UgIA0KPiA+IHNob3VsZA0KPiA+IGp1 c3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhvc2UgZHluYW1pYyByYW5nZXMgKGkuZS4gRUFDQ0VQVCkg YW5kIHRoZSAgDQo+ID4ga2VybmVsIGRyaXZlcg0KPiA+IHNob3VsZCBncmFjZWZ1bGx5IGhhbmRs ZSB0aGUgZmF1bHQuDQo+ID4gDQo+ID4gU2hvdWxkbid0IHRoaXMgYmUgYSBwcm9ibGVtPw0KPiA+ IA0KPiA+IChCdHcsIHRoZXJlIG1pZ2h0IGJlIG90aGVyIGNvcm5lciBjYXNlcyB0aGF0IGNvdWxk IGNhdXNlIFZNQSAgDQo+ID4gc3BsaXR0aW5nL21lcmdpbmcsDQo+ID4gZXRjLCBidXQgSSBoYXZl bid0IHRob3VnaHQgYWJvdXQgdGhvc2UpDQo+ID4gDQo+ID4gPiBUaGUgY29uY2VybiBLYWkgcmFp c2VkIGFib3V0IGVuY2wtPmJhc2Ugbm90IGF2YWlsYWJsZSBpbiB0aGUgd2luZG93DQo+ID4gPiBi ZXR3ZWVuIG1tYXAgYW5kIEVDUkVBVEUgY2FuIGJlIGFkZHJlc3NlZCBieSBkaXNhbGxvd2luZyBt bWFwIGJlZm9yZQ0KPiA+ID4gRUNSRUFURSBpcyBkb25lLiBJdCBkb2VzIG5vdCBtYWtlIG11Y2gg c2Vuc2UgYW55d2F5IHRvIG1tYXAoZW5jbGF2ZV9mZCkNCj4gPiA+IHdpdGhvdXQgYSB2YWxpZCBl bmNsYXZlIHJhbmdlIGFzc29jaWF0ZWQgd2l0aCBlbmNsYXZlX2ZkLg0KPiA+ID4gDQo+ID4gDQo+ ID4gV2UgY2FuLCBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB0aGUgZmlyc3QgbW1hcCgpIGJl Zm9yZSBFQ1JFQVRFICANCj4gPiBtdXN0L3Nob3VsZA0KPiA+IGJlIGRvbmUgdmlhIE1NQVBfQU5P TllNT1VTLiAgSW4gZmFjdCwgSSB0aGluayBpdCBtaWdodCBiZSB3cm9uZyBmb3IgU0dYMi4NCj4g PiANCj4gDQo+IFRoZXJlIGlzIGEgbG9uZyBoaXN0b3J5IGJlaGluZCBpdC4gVGhlIHVzZSBvZiBh bm9ueW1vdXMgbWFwcGluZyBjYW4gYmUgIA0KPiB0cmFjZWQgYmFjayB0byB2MjkuDQo+IFNlZSB0 aGlzIHRocmVhZFsyXS4NCj4gDQo+IEJlZm9yZSB2MjksIHVzZXIgc3BhY2UgY2FuIGRvIG1tYXAo UFJPVF9OT05FLCAuLi4sIGVuY2xhdmVfZmQpIGJlZm9yZSAgDQo+IEVDUkVBVEUgdG8gcmVzZXJ2 ZSBhIHJhbmdlIGZvciB0aGUgZW5jbGF2ZS4gQnV0IGl0IG11c3QgYmUgUFJPVF9OT05FIGZvciAg DQo+IHRoZSByZXNlcnZhdGlvbiwgb3RoZXJ3aXNlIHNneF9lbmNsX21heV9tYXAgd2lsbCBibG9j ayBpdCBieSB0aGUgIiFwYWdlIiAgDQo+IGNoZWNrIGJlbG93IFszXToNCj4gDQo+IGludCBzZ3hf ZW5jbF9tYXlfbWFwKHN0cnVjdCBzZ3hfZW5jbCAqZW5jbCwgdW5zaWduZWQgbG9uZyBzdGFydCwN Cj4gCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHZtX3Byb3RfYml0cykN Cj4gew0KPiAJdW5zaWduZWQgbG9uZyBpZHgsIGlkeF9zdGFydCwgaWR4X2VuZDsNCj4gCXN0cnVj dCBzZ3hfZW5jbF9wYWdlICpwYWdlOw0KPiANCj4gCS8qIFBST1RfTk9ORSBhbHdheXMgc3VjY2Vl ZHMuICovDQo+IAlpZiAoIXZtX3Byb3RfYml0cykNCj4gCQlyZXR1cm4gMDsNCj4gDQo+IAlpZHhf c3RhcnQgPSBQRk5fRE9XTihzdGFydCk7DQo+IAlpZHhfZW5kID0gUEZOX0RPV04oZW5kIC0gMSk7 DQo+IAlmb3IgKGlkeCA9IGlkeF9zdGFydDsgaWR4IDw9IGlkeF9lbmQ7ICsraWR4KSB7DQo+IAkJ bXV0ZXhfbG9jaygmZW5jbC0+bG9jayk7DQo+IAkJcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKCZl bmNsLT5wYWdlX3RyZWUsIGlkeCk7DQo+IAkJbXV0ZXhfdW5sb2NrKCZlbmNsLT5sb2NrKTsNCj4g DQo+IAkJaWYgKCFwYWdlIHx8ICh+cGFnZS0+dm1fcHJvdF9iaXRzICYgdm1fcHJvdF9iaXRzKSkN Cj4gCQkJcmV0dXJuIC1FQUNDRVM7DQo+IC4uLg0KPiANCj4gVGhlbiBpbiB2MjksIFBST1RfTk9O RSBtYXBwaW5nIHdhcyBkaXNhbGxvd2VkIGZvciBlbmNsX2ZkIGJlZm9yZSBwYWdlcyAgDQo+IEVB RERlZCBzbyB1c2VyIHNwYWNlIGhhcyB0byBtbWFwIGFub255bW91c2x5IHRvIHJlc2VydmUgdGhl IHJhbmdlLlRoZSAgDQo+IGludGVudCB3YXMgc3RpbGwgbm90IHRvIGFsbG93IG1tYXAgYmVmb3Jl IHBhZ2VzIEVBRERlZCAodGhlICFwYWdlIGNoZWNrICANCj4gd2FzIHN0aWxsIHRoZXJlIHVwIHRv IHYzOCkNCg0KRG8geW91IGtub3cgdGhlIHJlYXNvbiBvZiBkaXNhbGxvd2luZyBQUk9UX05PTkUg bWFwcGluZyBhZ2FpbnN0IGVuY2xfZmQ/DQoNCkkgZGlnIHYyOCByb3VnaGx5IGJ1dCBkaWRuJ3Qg ZmluZCBhbnkgY2x1ZS4NCg0KQmFzaWNhbGx5IG5vIGNvbW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyB3 ZXJlIG1hZGUgdG86DQoNCglbUEFUQ0ggdjI4IDExLzIyXSB4ODYvc2d4OiBMaW51eCBFbmNsYXZl IERyaXZlcg0KDQo+IA0KPiBMYXRlciB2ZXJzaW9uIChhcm91bmQgdjM5Pykgd2Ugc3dpdGNoZWQg dG8gZW5mb3JjZSB0aGUgcGVybWlzc2lvbnMgaW4gUEYgIA0KPiBoYW5kbGVyIGFuZCBtbWFwIHdp dGggYW55IHBlcm1pc3Npb25zIGJlZm9yZSBFQUREIGlzIGFsbG93ZWQsIGJ1dCBtYXkgIA0KPiBj YXVzZSBmYWlsdXJlIGxhdGVyIG9uIFBGLiBJJ20gbm90IHN1cmUgaXQgd2FzIGludGVudGlvbmFs IGJ1dCBwcmV0dHkgc3VyZSAgDQo+IG5vIG1lYW5pbmdmdWwgdXNhZ2UgZm9yIGRvaW5nIG1tYXAg YmVmb3JlIEVDUkVBVEUgZHVlIHRvIFBGIGhhbmRsZXIgIA0KPiBlbmZvcmNlbWVudC4NCg0KSUlV QyB0aGlzIGNoYW5nZSBhcm91bmQgdjM5IHJlLWFsbG93cyBtbWFwKCkgYWdhaW5zdCBlbmNsX2Zk IGJlZm9yZSBFQ1JFQVRFPw0KDQpJSVVDIHRoZSBvbmx5IGVuZm9yY2VtZW50IGlzIFZNQSdzIHBl cm1pc3Npb24gbXVzdCBiZSBtb3JlIHJlc3RyaWN0ZWQgdGhhbg0KZW5jbGF2ZSBwYWdlJ3MgcGVy bWlzc2lvbi4NCg0KU28sIHRoZW9yZXRpY2FsbHksIHdlIGNhbiBtbWFwKCkgZW5jbF9mZCB3aXRo IFBST1RfUkVBRHxQUk9UX1dSSVRFfFBST1RfRVhFQywNCmFuZCB0aGVuIG1wcm90ZWN0KCkgdGhl IGFkZHJlc3MgcmFuZ2UgYmFzZWQgb24gdGhlIGFjdHVhbCBlbmNsYXZlIHBhZ2VzIChpbg0KRUFE RCkgYmVmb3JlIGFjdHVhbGx5IGRvaW5nIEVBREQgdGhvc2UgcGFnZXM/IA0KDQo+IA0KPiBJIHRo aW5rIHRoYXQncyB0aGUgaGlzdG9yeSBiZWhpbmQgaXQuIE90aGVycyBtb3JlIGtub3dsZWRnZWFi bGUgY2FuICANCj4gY29ycmVjdCBtZSBhcyBuZWVkZWQuDQoNClRoYW5rcyBmb3IgdGhlIGluZm9y bWF0aW9uLg0KDQo+IA0KPiBBZ2FpbiwgZXZlbiBpZiB3ZSByZWRlc2lnbiB0aGUgd2hvbGUgdGhp bmcgdG8gYmUgbGVzcyAid2VpcmQiLCB0aGVuICANCj4gcmVxdWlyaW5nIHBnb2ZmIGZvciBlYWNo IG1tYXAgd291bGQgYnJlYWsgZXhpc3RpbmcgdXNlciBzcGFjZSBjb2RlLiBBbmQgSSAgDQo+IHRo aW5rIGV4cGxpY2l0bHkgYmxvY2sgbW1hcCBiZWZvcmUgRUNSRUFURSBtYWtlIHRoZSBBUEkgbW9y ZSBjb25zaXN0ZW50ICANCj4gd2l0aCB0aGUgUEYgaGFuZGxlciBlbmZvcmNlbWVudCBhbmQgb3Jp Z2luYWwgaW50ZW50IG9mIHNneF9lbmNsX21heV9tYXAuDQoNCkkgdGhpbmsgcGVybWlzc2lvbiBj aGVjayBpbiBzZ3hfZW5jbF9tYXlfbWFwKCkgaXNuJ3QgcmVzdHJpY3RlZCByZWxhdGVkIHRvIHRo ZQ0Kdm1hLT5wZ29mZiBpc3N1ZSBoZXJlLiAgVGhleSBhcmUgYmFzaWNhbGx5IHR3byBkaWZmZXJl bnQgdG9waWNzLCBJSVVDLg0KDQpTbyBJIGFtIHN0aWxsIGEgbGl0dGxlIGJpdCBjb25mdXNlZCBh Ym91dCB3aGVyZSBkb2VzICJTR1ggZHJpdmVyIHVzZXMNCk1BUF9BTk9OWU1PVVMgc2VtYW50aWNz IGZvciBmZC1iYXNlZCBtbWFwKCkiIGNvbWUgZnJvbS4NCg0KQW55d2F5LCB3ZSBjZXJ0YWlubHkg ZG9uJ3Qgd2FudCB0byBicmVhayB1c2Vyc3BhY2UuICBIb3dldmVyLCBJSVVDLCBldmVuIGZyb20N Cm5vdyBvbiB3ZSBjaGFuZ2UgdGhlIGRyaXZlciB0byBkZXBlbmQgb24gdXNlcnNwYWNlIHRvIHBh c3MgdGhlIGNvcnJlY3QgcGdvZmYgaW4NCm1tYXAoKSwgdGhpcyB3b24ndCBicmVhayB1c2Vyc3Bh Y2UsIGJlY2F1c2Ugb2xkIHVzZXJzcGFjZSB3aGljaCBkb2Vzbid0IHVzZQ0KZmFkdmljZSgpIGFu ZCBwZ29mZiBhY3R1YWxseSBkb2Vzbid0IG1hdHRlci4gIEZvciBuZXcgdXNlcnNwYWNlIHdoaWNo IHVzZXMNCmZhZHZpY2UoKSwgaXQgbmVlZHMgdG8gcGFzcyB0aGUgY29ycmVjdCBwZ29mZi4NCg0K SSBhbSBub3Qgc2F5aW5nIHdlIHNob3VsZCBkbyB0aGlzLCBidXQgaXQgZG9lc24ndCBzZWVtIHdl IGNhbiBicmVhayB1c2Vyc3BhY2U/DQoNCj4gDQo+IFRoYW5rcyBhZ2FpbiBmb3IgZGV0YWlsZWQg cmV2aWV3IGFuZCB0aG9zZSB0aG91Z2h0ZnVsIHF1ZXN0aW9ucy4NCj4gDQo+IEhhaXRhbw0KPiAN Cj4gWzFdaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtc2d4L0NBTENFVHJYZjhtU0s0NWg3 c1RLNVdmK3BYTFZuPUJqc2NfUkxwZ08taC1xZHpCUm81UUBtYWlsLmdtYWlsLmNvbS8NCj4gWzJd aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtc2d4L0NBT0FTZXBQRmVfdWN1d2U3SldfLStW QlE0PStzSHF5R1hPZEE5a1ViY1lBXzk9djBzQUBtYWlsLmdtYWlsLmNvbS8NCj4gWzNdaHR0cHM6 Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtc2d4LzIwMTkwNzEzMTcwODA0LjIzNDAtMTctamFya2tv LnNha2tpbmVuQGxpbnV4LmludGVsLmNvbS8NCg0KVGhhbmtzIGFnYWluIGZvciBkaWdnaW5nIG91 dCB0aG9zZSBsaW5rcy4gIEkgaGF2ZW4ndCByZWFkIHRoZSBlbnRpcmUgZGlzY3Vzc2lvbiwNCnRo b3VnaCwgYXMgdGhleSBhcmUgcHJldHR5IGxvbmcuDQo=