From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web09.317.1614808712790492460 for ; Wed, 03 Mar 2021 13:58:33 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=Ew1EkPis; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: guo.dong@intel.com) IronPort-SDR: Ffbq5spYMec5QZTxNAZvjWD4//Kprn7EpeWaMvSECIPl2b/PMMz6NAaVdvTPDa8p7zxYivs/Wu iTrq9ArPUiGw== X-IronPort-AV: E=McAfee;i="6000,8403,9912"; a="174405570" X-IronPort-AV: E=Sophos;i="5.81,220,1610438400"; d="scan'208";a="174405570" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2021 13:58:31 -0800 IronPort-SDR: NCBkhg3ZGhtqs82otxhBulMR3o+YxFdAsKieVB8WVmmj4ZtQWIekHtSrgre1UaKz4kWhU/Yxt9 6ElpDyfUfP+A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,220,1610438400"; d="scan'208";a="406614367" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by orsmga007.jf.intel.com with ESMTP; 03 Mar 2021 13:58:31 -0800 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Wed, 3 Mar 2021 13:58:30 -0800 Received: from fmsmsx606.amr.corp.intel.com (10.18.126.86) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Wed, 3 Mar 2021 13:58:30 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Wed, 3 Mar 2021 13:58:30 -0800 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.109) 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.2106.2; Wed, 3 Mar 2021 13:58:30 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RMaBDxbrnDJNVqrHFuHabZqlgrWEjxW5JFU7dgpB+3gsiSvINriqw3hRalspJEdiCzv8/+Ynewj8UT0BWalFVbyO0HOcugK860I+NaTtaxU8pfP4xV9uyDrArQVLoGrDQSSLshXOi4bGETMccbZoV+zpfde9kOOe2MZeR86tEewMa4hJnPMQs4hy/7+dbmzHJZfpeC/aLE5A84zgmcLQ+lr3Z1O99saVYCWczKI+sw5tPvNFv84vLQHPwL4IFGAxsCBF6geL6ecdvRVTz/09MWee5E6nCu5n7JmkLNGBUnGh9/q+f8Z/v8qq3thXgnrJWm0Z3805sUDBxMCCiCpHsg== 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-SenderADCheck; bh=2/ymdso6TbiGTtRbMRnbxx7eTXslxgZ0zA7TRlmsJqg=; b=Y7a31LoWFndJsq9Ara4/4uSHw6hvUPM/uiu8OcmuvBkL6DXN3/0C9NwayT7m/1GAOsJ9TUokmKIhuwVKR7dG5FuTDJ36i80FbiZk6X9YS1n6CwtFcb91cKQu2vGIstkEN6WReVZFxQNCQ/ORS8dsxxMsGZuHwXTxi8aMdMyYtHYxxShuatzXLuAEgFE8e6+SK+6+W/OxESPVXOl5FZFq5dVjlP3wGfpatDdfuzMeMY/+YH8wcxbEdO5pgTVB4atTeg+pfg3UOPXRaciSaMScE4FJlMuIg1R7qMURYyOCvDPjG88KJNMlBgJOyJ7CZqZqQ5BT2gp6bjGMyUmNg2Murg== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2/ymdso6TbiGTtRbMRnbxx7eTXslxgZ0zA7TRlmsJqg=; b=Ew1EkPisa6SdyiEMikNBibQkxrRhvUs29qvwqmogQbRfJT6P0aVUIS7iIpmDB+HKczA2JMsAeegVL9oTGorjdx/VHTBYPnHejoVZPrDAiiMtEBZ6f9G/V8yXwBhweKQ8FdpJyQ/4HplQakhG0LWST0eK1NYhCaTxOQz+pfdhJv0= Received: from BYAPR11MB3622.namprd11.prod.outlook.com (2603:10b6:a03:fe::30) by BY5PR11MB3909.namprd11.prod.outlook.com (2603:10b6:a03:191::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.28; Wed, 3 Mar 2021 21:58:28 +0000 Received: from BYAPR11MB3622.namprd11.prod.outlook.com ([fe80::9d0a:3b97:a353:663d]) by BYAPR11MB3622.namprd11.prod.outlook.com ([fe80::9d0a:3b97:a353:663d%3]) with mapi id 15.20.3890.029; Wed, 3 Mar 2021 21:58:28 +0000 From: "Guo Dong" To: "Ni, Ray" , Michael Kubacki , "devel@edk2.groups.io" CC: "Chaganty, Rangasai V" , "Chiu, Chasel" , "Desimone, Nathaniel L" , "Luo, Heng" , "Agyeman, Prince" , "gaoliming@byosoft.com.cn" , "Dong, Eric" Subject: Re: [edk2-devel] [edk2-platforms][RFC] SpiFlashCommonLib Refactor Thread-Topic: [edk2-devel] [edk2-platforms][RFC] SpiFlashCommonLib Refactor Thread-Index: AQHXBMgIPP87jNjwdkOy46lNqOXX/Kpu1iOwgAC+8gCAAF36gIAC8Aqg Date: Wed, 3 Mar 2021 21:58:28 +0000 Message-ID: References: <2a2a1cc0-3de9-fbd5-1bfb-eb5dbc9d1bc6@linux.microsoft.com> <9a764723-06b6-555a-dfb8-6dee940e7276@linux.microsoft.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [68.2.51.172] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3f4894b8-738d-4d4c-699f-08d8de8f7a59 x-ms-traffictypediagnostic: BY5PR11MB3909: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: tVHC5l8w3u6PcpH2+pyDrICdrd9IPX1XfV1q+JDIDgpVdpVRRHEODB2/hli4Rd+t4RUN2GBZuxdOSDHdm9+uZ1FX7FY88GEG0Mytsh2phyr2lboeZVqdG7M1E29XTMiLYnUc6ilK5Q7xnRx4J2ZjzUetmCn8khrdj2qDBXNV1mJ5anXiLU2skMjpVw+9GiFozP8Jqjhau3gPtUrlq9CT26ZWG9rzhfnlGK8b3gPEGibPdtrulT0WbXUBxWQ4cc0oqhMABnmTM/+1iEby334Mena64Vu41CEHQVQuE3foKxmu5lN3qafr0M0sdmaxd6e6GTou5XaYAMOhubYZ9sZl34bMB5YKkLDBwqJH/CMC68U8ZIwzUvrNYYuQ3DwS1lTSZ7/7Smti55eb8eKBmJEcwA0gcCcLKTJOuiAs6LpdqJtO4etR23qPrdqD8oKfLDhIVAHHaSwDFQFVkTjM5e48YETRmou0tLdKDzK1HsiTEmTeY50NhgHpE16XjQw+2svzsBP9OAD/3kA+PZvx3pUOv8BLDqhBqdbDE6J09SUBM3z4mgrNuAvEha0wXGu/+HfWBZg7yg4OmJ19eMcIEgIsxawCe9DlNGZMToq2sRDxKTc= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR11MB3622.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(366004)(39860400002)(346002)(376002)(5660300002)(66946007)(478600001)(33656002)(52536014)(83380400001)(64756008)(66446008)(66476007)(8676002)(6506007)(8936002)(186003)(966005)(7696005)(107886003)(76116006)(54906003)(2906002)(71200400001)(26005)(110136005)(53546011)(86362001)(9686003)(66556008)(55016002)(316002)(4326008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?YkpLZjFqREVmdTluVFVuUjV2NlNrQ1dmSnlqK3BBcE1yeWVCYkYxdVZPaXZk?= =?utf-8?B?UCszcnpodzl2Y2J4S0RHT2x3VzJMLzRFQ2hld213SDBsRUl3VUdsUlRZRlJu?= =?utf-8?B?ZmpaSWJjVlVXUFRiUG1PMG9DamYxWjFOd1lNNldBaWpuVFVUMGl3RERzMGdO?= =?utf-8?B?OGk3eWI4czIrM2ZrSTRiTFVIYTc3aVQ4NjNBOGF4OExqbCtkT3dHcW5hU2FY?= =?utf-8?B?L3VsWWxuQzhSWU9waU5uTUQzdU90WHcyZlZrUVpwdGJ3QVNrYVRVc21FSG1G?= =?utf-8?B?UldldHJMSXUxYzhveE9yRTlGaUxlMGM1V3RKczBoVEhKRUNzbnRXUVJZcGJW?= =?utf-8?B?YXJ6Znp2MndKRWhaVG5VK2hweVBCSnhzRmI3RWhaSWpNVlFHRjVKQXNsaFdi?= =?utf-8?B?SldkY3NYRzFxb2M4ZmpuclJHVUpaVmtrNVJ6eUI5VDBLdHk3Z0FZbDl5bjV1?= =?utf-8?B?ZnBoQmh6VmIrNXhRYlZVUlBFUHpvQURjL2RneXAxNmI0bmdDSnZKbmI1RVpD?= =?utf-8?B?WnkvMlFXZ2FETGpsNzk3TFJoSHRTRlQyMFFQdjc1WmRqSU1pVUJmNDUrYkpu?= =?utf-8?B?ZjZOQUNHS3Myamw1dVQ1MkdYUTV1L205V2xKNVV4MDFIbTAwajhIY2t6NzRJ?= =?utf-8?B?Qmk1R1BzQzJVMVFScjVJT0s4Z21OMTN3c1Faenlub3VmcUFPeldIK1hkVFhi?= =?utf-8?B?SHpIR0dTVU5CaHdISlp6WHZpSDZHNC90UGRqTjlXSU1oMnViRzVvazVWQ3Zp?= =?utf-8?B?RXQ3ajJ5RmhlNytRU2NpZlZsV2hVL29wUmlNMGt6VXhSVGMvdnRSVkZXSk9h?= =?utf-8?B?N0VMRWo4RkwrKyttYitJOC9BQ2Q2SGpQWkhVSmFQU2twS09Kd3JtMjFBQ0tQ?= =?utf-8?B?WTMrckxIdks3ZE54Z0pIOXBwWUVmdGpQRkZXS0RjajUxQ1lUWHYyQ3JRVmUz?= =?utf-8?B?K3JuYVlyd2ZVQW1jdWw0bk40eWh6RGJ3bFRIZEVJZUt2L3dheCtTZXJKSUM3?= =?utf-8?B?UXBZblhiM1lZeit6YzNpTEJBN01JNzBrdWE5amM1Zmx3V2sxQVZiTEZWSVZZ?= =?utf-8?B?c0JOOFViOHhCN1BTb0xuajh1cW5QaG1sVEsvaHBFVE5wenNVanR2Z1JiL01V?= =?utf-8?B?Rm1aaGxNY0NrVVZjTFN3cDgyNUZMajVzbE1Mc2dnRkdsUGU4dERtbGJ5TlR6?= =?utf-8?B?NytoWE4rTHphQ1hGNlV2SVBJTUtlb3Z6RzlUblZMaHRtczJQWDV6S1NJRnRX?= =?utf-8?B?bi94cDdjZG51YlNvRC9xL0Q5TEt6ajk5NEhNT2JIVDJRMTZNMGY3YzVtTjRt?= =?utf-8?B?c1g4amdIWTJreVByLzN6TDE0OTNTRkR6L2IzN1Q3Um1pNmFsU2tJTFVhZDAx?= =?utf-8?B?U2JYQW9VK0hKT0dYWWNKQzhzcXFTSzhCQXF5Zm1RYVBhTi9FTDQzUDJOUHF3?= =?utf-8?B?SGJ2MExxQmM4WWFVQWI5SWx3NFBQakRLVStFSkkxRHdCMEhRQ0gzUVVQSVhD?= =?utf-8?B?VnU0ZXV1MlNxbzhGZVVWT242clg2VG9BWWtRWHZlZE03Z3V4NTBZL1FMQTlP?= =?utf-8?B?bVM1aS9VUUh0TlJMZW01N1AwQi82N1VDQW1mRE51dFlmV1ZTMHdwYlVmSzMx?= =?utf-8?B?aVllTTRQTkp1bk4yeWN1RGFjSC9Bazk3cHRUYkY3MDZacFQxTlltQjFhTFJs?= =?utf-8?B?RXNwYjZHUmZqallFVk5Mbis3SkdCS1VSRnhQdWZobmxkUkx4bWJ5SmM3S2RT?= =?utf-8?Q?RMERI5MR3cBddnndiw=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR11MB3622.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f4894b8-738d-4d4c-699f-08d8de8f7a59 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Mar 2021 21:58:28.6215 (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: TNgJ+ImVnPq2gPD/pSYwVL8J+KAVnZqz62sOAs47YrD36WZna6+AtydG/wpduA1gKswHo6utYwC3eEiq09AVZw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR11MB3909 Return-Path: guo.dong@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQpIaSBNaWNoYWVsLA0KDQpXZSBoYWQgY3JlYXRlZCBhIGNvbW1vbiBTUEkgZmxhc2ggbGlicmFy eSBhbmQgYSBjb21tb24gU01NIEZWQiBkcml2ZXIgZm9yIGFsbCB0aGUgcGxhdGZvcm1zIEkgaGF2 ZSAoaW5jbHVkaW5nIEFwb2xsbyBsYWtlLCBDb2ZmZWUgbGFrZSwgS2FieSBMYWtlLCBDb21ldCBM YWtlLCBUaWdlciBMYWtlLCBFbGtoYXJ0IExha2UsIGV0Yy4pLiAgd2UgcGxhbiB0byB1cHN0cmVh bSB0aGlzIGZvciBVRUZJIFBheWxvYWQuDQpJZiB0aGlzIG9uZSBjb3VsZCBiZSB1cHN0cmVhbSB0 byBVZWZpUGF5bG9hZFBrZywgdGhlbiBlYWNoIHBsYXRmb3JtIGNvdWxkIGxldmVyYWdlIGl0Lg0K DQpCVFcsIHRvZ2V0aGVyIHdpdGggdGhpcywgd2UgcGxhbiB0byB1cHN0cmVhbSBTTU0gc3VwcG9y dCwgc2VjdXJlIGJvb3QgYW5kIG1lYXN1cmVkIGJvb3QgZm9yIFVFRkkgUGF5bG9hZC4NClNvIHdl IGNvdWxkIHVzZSBhIHNpbmdsZSBVRUZJIFBheWxvYWQgd2l0aCB0aGVzZSBhZHZhbmNlZCBmZWF0 dXJlcyAgb24gZGlmZmVyZW50IHBsYXRmb3Jtcy4NCg0KVGhhbmtzLA0KR3VvDQogDQoNCj4gLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTmksIFJheSA8cmF5Lm5pQGludGVsLmNv bT4NCj4gU2VudDogTW9uZGF5LCBNYXJjaCAxLCAyMDIxIDU6NTIgUE0NCj4gVG86IE1pY2hhZWwg S3ViYWNraSA8bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT47DQo+IGRldmVsQGVkazIuZ3Jv dXBzLmlvDQo+IENjOiBDaGFnYW50eSwgUmFuZ2FzYWkgViA8cmFuZ2FzYWkudi5jaGFnYW50eUBp bnRlbC5jb20+OyBDaGl1LCBDaGFzZWwNCj4gPGNoYXNlbC5jaGl1QGludGVsLmNvbT47IERlc2lt b25lLCBOYXRoYW5pZWwgTA0KPiA8bmF0aGFuaWVsLmwuZGVzaW1vbmVAaW50ZWwuY29tPjsgTHVv LCBIZW5nIDxoZW5nLmx1b0BpbnRlbC5jb20+Ow0KPiBBZ3llbWFuLCBQcmluY2UgPHByaW5jZS5h Z3llbWFuQGludGVsLmNvbT47IGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbjsNCj4gRG9uZywgRXJp YyA8ZXJpYy5kb25nQGludGVsLmNvbT47IERvbmcsIEd1byA8Z3VvLmRvbmdAaW50ZWwuY29tPg0K PiBTdWJqZWN0OiBSRTogW2VkazItZGV2ZWxdIFtlZGsyLXBsYXRmb3Jtc11bUkZDXSBTcGlGbGFz aENvbW1vbkxpYg0KPiBSZWZhY3Rvcg0KPiANCj4gTWljaGFlbCwNCj4gSSBhbSBnb29kIHdpdGgg dGhhdC4gSSBhbSBhbHNvIGN1cmlvdXMgaG93IHlvdSBtZXJnZSBhbGwgdGhlIGRpZmZlcmVudCBT UEkNCj4gZmxhc2ggaW1wbGVtZW50YXRpb24gaW50byBvbmUuDQo+IA0KPiBUaGFua3MsDQo+IFJh eQ0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE1pY2hhZWwg S3ViYWNraSA8bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT4NCj4gPiBTZW50OiBUdWVzZGF5 LCBNYXJjaCAyLCAyMDIxIDM6MTYgQU0NCj4gPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IE5p LCBSYXkgPHJheS5uaUBpbnRlbC5jb20+DQo+ID4gQ2M6IENoYWdhbnR5LCBSYW5nYXNhaSBWIDxy YW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT47IENoaXUsIENoYXNlbA0KPiA8Y2hhc2VsLmNo aXVAaW50ZWwuY29tPjsgRGVzaW1vbmUsIE5hdGhhbmllbCBMDQo+ID4gPG5hdGhhbmllbC5sLmRl c2ltb25lQGludGVsLmNvbT47IEx1bywgSGVuZyA8aGVuZy5sdW9AaW50ZWwuY29tPjsNCj4gQWd5 ZW1hbiwgUHJpbmNlIDxwcmluY2UuYWd5ZW1hbkBpbnRlbC5jb20+Ow0KPiA+IGdhb2xpbWluZ0Bi eW9zb2Z0LmNvbS5jbjsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPiBTdWJq ZWN0OiBSZTogW2VkazItZGV2ZWxdIFtlZGsyLXBsYXRmb3Jtc11bUkZDXSBTcGlGbGFzaENvbW1v bkxpYg0KPiBSZWZhY3Rvcg0KPiA+DQo+ID4gSGkgUmF5LA0KPiA+DQo+ID4gVGhhdCBzb3VuZHMg cmVhc29uYWJsZSB0byBtZS4NCj4gPg0KPiA+IEkgd2FzIGF0dGVtcHRpbmcgdG8gcHJlc2VydmUg dGhlIGRlc2lnbiB0aGF0IGlzb2xhdGVzIHRoZQ0KPiA+IHNpbGljb24tc3BlY2lmaWMgbG9naWMg dG8gYSBsaWJyYXJ5IHZpYSBhbiBpbnRlcmZhY2UgdG8gYSBzaWxpY29uDQo+ID4gcGFja2FnZS4g SG93ZXZlciwgdGhlIHJlYWwgYWJzdHJhY3Rpb24gaGVyZSBpcyB0aGUgZmlybXdhcmUgdm9sdW1l IGJsb2NrDQo+ID4gcHJvdG9jb2wgd2hpY2ggY291bGQgc2ltcGx5IGJlIHByb2R1Y2VkIGJ5IGEg c2lsaWNvbiBkcml2ZXIgd2l0aCB0aGUNCj4gPiBzZXBhcmF0aW9uIG9mIHN1Y2ggbG9naWMgdG8g YSBsaWJyYXJ5IGJlaW5nIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZg0KPiA+IHRoZSBkcml2 ZXIuDQo+ID4NCj4gPiBJbiBzdW1tYXJ5LCBoZXJlIGlzIHRoZSB1cGRhdGVkIHByb3Bvc2FsOg0K PiA+DQo+ID4gMS4gQ29uc29saWRhdGUgdGhlIGxpYnJhcnkgaW50ZXJmYWNlIGludG8gYSBzaW5n bGUgaGVhZGVyIGluDQo+ID4gSW50ZWxTaWxpY29uUGtnLg0KPiA+DQo+ID4gMi4gQ29uc29saWRh dGUgdGhlIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gaW50byBhIHNpbmdsZSBpbnN0YW5jZSBpbg0K PiA+IEludGVsU2lsaWNvblBrZy4NCj4gPg0KPiA+IDMuIE1vdmUgU3BpRnZiU2VydmljZVNtbSBv dXQgb2YgTWluUGxhdGZvcm1Qa2cgaW50byBJbnRlbFNpbGljb25Qa2cuDQo+ID4NCj4gPiA0LiBB ZGQgU3BpRnZiU2VydmljZVN0YW5kYWxvbmVNbSB0byBJbnRlbFNpbGljb25Qa2cgc2hhcmluZw0K PiA+IGltcGxlbWVudGF0aW9uIHdpdGggU3BpRnZiU2VydmljZVNtbSB3aGVyZSBhcHByb3ByaWF0 ZS4NCj4gPg0KPiA+IEludGVsIGJvYXJkIHBhY2thZ2VzIHdvdWxkIHRoZW4gdXNlIHRoZSBTcGlG bGFzaENvbW1vbkxpYiBmcm9tDQo+ID4gSW50ZWxTaWxpY29uUGtnIChhIGdlbmVyYXRpb24gc3Bl Y2lmaWMgaW5zdGFuY2UgY291bGQgYmUgY3JlYXRlZCBpZg0KPiA+IG5lZWRlZCkgYW5kIHVzZSB0 aGUgU3BpRnZiU2VydmljZVh5eiBkcml2ZXIgZnJvbSBJbnRlbFNpbGljb25Qa2cuDQo+ID4NCj4g PiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgdGhpcyBpcyBhY2NlcHRhYmxlIGFuZCBJJ2QgYmUgaGFw cHkgdG8gc2VuZCB0aGUNCj4gPiBwYXRjaGVzLg0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IE1pY2hh ZWwNCj4gPg0KPiA+IE9uIDMvMS8yMDIxIDE6MDcgQU0sIE5pLCBSYXkgd3JvdGU6DQo+ID4gPiBN aWNoYWVsLA0KPiA+ID4gSSBhZ3JlZSB3aXRoIHlvdXIgdGhvdWdodHMgdG8gY29uc29saWRhdGUg dGhlIGxpYiBoZWFkZXIgYW5kDQo+IGltcGxlbWVudGF0aW9uIHRvIEludGVsU2lsaWNvblBrZy4N Cj4gPiA+IEkgZGlkbid0IHJlYWQgdGhlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuIEJ1dCB0 aGUgaW1wbGVtZW50YXRpb24NCj4gY29uc29saWRhdGlvbiBtZWFucyB5b3Ugc2VlIGFsbCB0aGUg ZXhpc3RpbmcNCj4gPiBpbXBsZW1lbnRhdGlvbnMgYXJlIHRoZSBzYW1lLiBSaWdodD8NCj4gPiA+ DQo+ID4gPiBCdXQgd2h5IGRvbid0IHlvdSBwdXQgdGhlIGRyaXZlciBpbiBJbnRlbFNpbGljb25Q a2cgYXMgd2VsbD8gQ3JlYXRpbmcgYW4NCj4gYWR2YW5jZWQgZmVhdHVyZSBmb3IgdGhpcyBmdW5k YW1lbnRhbCBzZXJ2aWNlIHNlZW1zDQo+ID4gb3Zlci1raWxsLg0KPiA+ID4NCj4gPiA+IFRoYW5r cywNCj4gPiA+IFJheQ0KPiA+ID4NCj4gPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiA+ID4+IEZyb206IENoYWdhbnR5LCBSYW5nYXNhaSBWIDxyYW5nYXNhaS52LmNoYWdhbnR5QGlu dGVsLmNvbT4NCj4gPiA+PiBTZW50OiBNb25kYXksIE1hcmNoIDEsIDIwMjEgNDo0NiBQTQ0KPiA+ ID4+IFRvOiBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPg0KPiA+ID4+IFN1YmplY3Q6IFJFOiBb ZWRrMi1wbGF0Zm9ybXNdW1JGQ10gU3BpRmxhc2hDb21tb25MaWIgUmVmYWN0b3INCj4gPiA+Pg0K PiA+ID4+IERpZCB5b3UgZ2V0IGEgY2hhbmNlIHRvIGxvb2sgaW50byB0aGlzID8NCj4gPiA+Pg0K PiA+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPj4gRnJvbTogTWljaGFlbCBL dWJhY2tpIDxtaWt1YmFja0BsaW51eC5taWNyb3NvZnQuY29tPg0KPiA+ID4+IFNlbnQ6IFR1ZXNk YXksIEZlYnJ1YXJ5IDE2LCAyMDIxIDQ6NTggUE0NCj4gPiA+PiBUbzogZGV2ZWxAZWRrMi5ncm91 cHMuaW87IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+OyBDaGFnYW50eSwNCj4gUmFuZ2FzYWkg ViA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+OyBDaGl1LA0KPiA+IENoYXNlbA0KPiA+ ID4+IDxjaGFzZWwuY2hpdUBpbnRlbC5jb20+OyBEZXNpbW9uZSwgTmF0aGFuaWVsIEwNCj4gPG5h dGhhbmllbC5sLmRlc2ltb25lQGludGVsLmNvbT47IEx1bywgSGVuZyA8aGVuZy5sdW9AaW50ZWwu Y29tPjsNCj4gPiA+PiBBZ3llbWFuLCBQcmluY2UgPHByaW5jZS5hZ3llbWFuQGludGVsLmNvbT47 DQo+IGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbjsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVs LmNvbT4NCj4gPiA+PiBTdWJqZWN0OiBbZWRrMi1wbGF0Zm9ybXNdW1JGQ10gU3BpRmxhc2hDb21t b25MaWIgUmVmYWN0b3INCj4gPiA+Pg0KPiA+ID4+IEhlbGxvLA0KPiA+ID4+DQo+ID4gPj4gSSdt IHBsYW5uaW5nIHRvIHN1Ym1pdCBzdXBwb3J0IGZvciBTdGFuZGFsb25lIE1NIGluDQo+IFNwaUZs YXNoQ29tbW9uTGliIHNvb24uIEN1cnJlbnRseSwgdGhlcmUncyBxdWl0ZSBhIGJpdCBvZiBkdXBs aWNhdGlvbg0KPiA+IHdpdGgNCj4gPiA+PiBTcGlGbGFzaENvbW1vbkxpYi4NCj4gPiA+Pg0KPiA+ ID4+IEkgd291bGQgbGlrZSB0byBoYXZlIHRoaXMgU3RhbmRhbG9uZSBNTSBzdXBwb3J0IGJlIGF2 YWlsYWJsZSBpbiBhcw0KPiBjb25zaXN0ZW50IG9mIGEgbG9jYXRpb24gYXMgcG9zc2libGUgc28g SSdkIGxpa2UgdG8gc2VlIGlmDQo+ID4gdGhlcmUgaXMNCj4gPiA+PiBhbnl0aGluZyBJIGNhbiBk byB0byBoZWxwIGNsZWFuIHRoaXMgdXAgaW4gdGhlIGVhcmx5IHBhcnQgb2YgdGhlIHBhdGNoDQo+ IHNlcmllcy4NCj4gPiA+Pg0KPiA+ID4+DQo+ID4gPj4gVGhlIGxpYnJhcnkgaW50ZXJmYWNlIGlz IGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBmb2xsb3dpbmcgaGVhZGVyIGZpbGVzOg0KPiA+ID4+ DQo+ID4gPj4gMS4NCj4gUGxhdGZvcm1cSW50ZWxcTWluUGxhdGZvcm1Qa2dcSW5jbHVkZVxMaWJy YXJ5XFNwaUZsYXNoQ29tbW9uTGliLmgNCj4gPiA+Pg0KPiA+ID4+IDIuIFNpbGljb25cSW50ZWxc U2ltaWNzSWNoMTBQa2dcSW5jbHVkZVxMaWJyYXJ5XFNwaUZsYXNoQ29tbW9uTGliLmgNCj4gPiA+ Pg0KPiA+ID4+IDMuDQo+IFNpbGljb25cSW50ZWxcS2FieWxha2VTaWxpY29uUGtnXFBjaFxJbmNs dWRlXExpYnJhcnlcU3BpRmxhc2hDb21tb25MaWIuaA0KPiA+ID4+DQo+ID4gPj4gNC4NCj4gPiA+ Pg0KPiBTaWxpY29uXEludGVsXENvZmZlZWxha2VTaWxpY29uUGtnXFBjaFxJbmNsdWRlXExpYnJh cnlcU3BpRmxhc2hDb21tb25MaWIuDQo+IGgNCj4gPiA+Pg0KPiA+ID4+DQo+ID4gPj4gSW5zdGFu Y2VzIG9mIFNtbVNwaUZsYXNoQ29tbW9uTGliIGltcGxlbWVudGF0aW9uIGV4aXN0IGluIGEgbWl4 IG9mDQo+IHBsYXRmb3JtIGFuZCBzaWxpY29uIHBhY2thZ2VzOg0KPiA+ID4+DQo+ID4gPj4gMS4N Cj4gPiA+Pg0KPiBTaWxpY29uXEludGVsXFNpbWljc0ljaDEwUGtnXExpYnJhcnlcU21tU3BpRmxh c2hDb21tb25MaWJcU21tU3BpRmxhc2hDDQo+IG9tbW9uTGliLmluZg0KPiA+ID4+DQo+ID4gPj4g Mi4NCj4gPiA+Pg0KPiBQbGF0Zm9ybVxJbnRlbFxUaWdlcmxha2VPcGVuQm9hcmRQa2dcTGlicmFy eVxTbW1TcGlGbGFzaENvbW1vbkxpYlxTDQo+IG1tU3BpRmxhc2hDb21tb25MaWIuaW5mDQo+ID4g Pj4NCj4gPiA+PiAzLg0KPiA+ID4+DQo+IFNpbGljb25cSW50ZWxcS2FieWxha2VTaWxpY29uUGtn XFBjaFxMaWJyYXJ5XFNtbVNwaUZsYXNoQ29tbW9uTGliXFNtbQ0KPiBTcGlGbGFzaENvbW1vbkxp Yi5pbmYNCj4gPiA+Pg0KPiA+ID4+IDQuDQo+ID4gPj4NCj4gU2lsaWNvblxJbnRlbFxDb2ZmZWVs YWtlU2lsaWNvblBrZ1xQY2hcTGlicmFyeVxTbW1TcGlGbGFzaENvbW1vbkxpYlxTbQ0KPiBtU3Bp Rmxhc2hDb21tb25MaWIuaW5mDQo+ID4gPj4NCj4gPiA+PiA1Lg0KPiA+ID4+DQo+IFBsYXRmb3Jt XEludGVsXE1pblBsYXRmb3JtUGtnXEZsYXNoXExpYnJhcnlcU3BpRmxhc2hDb21tb25MaWJOdWxs XFNwaUZsYQ0KPiBzaENvbW1vbkxpYk51bGwuaW5mDQo+ID4gPj4NCj4gPiA+Pg0KPiA+ID4+IFRo ZSBsaWJyYXJ5IGNsYXNzIGlzIGN1cnJlbnRseSBjb25zdW1lZCBpbiB0aGUgZm9sbG93aW5nIElO RnM6DQo+ID4gPj4NCj4gPiA+PiAxLg0KPiBQbGF0Zm9ybVxJbnRlbFxNaW5QbGF0Zm9ybVBrZ1xG bGFzaFxTcGlGdmJTZXJ2aWNlXFNwaUZ2YlNlcnZpY2VTbW0uaW5mDQo+ID4gPj4NCj4gPiA+PiAy Lg0KPiA+ID4+DQo+IFBsYXRmb3JtXEludGVsXE1pblBsYXRmb3JtUGtnXEZsYXNoXFNwaUZ2YlNl cnZpY2VcU3BpRnZiU2VydmljZVN0YW5kYWxvbg0KPiBlTW0uaW5mDQo+ID4gPj4NCj4gPiA+Pg0K PiA+ID4+IE15IHVuZGVyc3RhbmRpbmcgaXM6DQo+ID4gPj4NCj4gPiA+PiAxLiBUaGUgaGVhZGVy IGZpbGUgaXMgZGVmaW5lZCBpbiBlYWNoIHNpbGljb24gcGFja2FnZSBiZWNhdXNlIHNpbGljb24N Cj4gY2Fubm90IGRlcGVuZCB1cG9uIHBsYXRmb3JtIChpLmUuIHRoZSBNaW5QbGF0Zm9ybVBrZw0K PiA+ID4+IGhlYWRlcikuDQo+ID4gPj4NCj4gPiA+PiAyLiBUaGUgaGVhZGVyIGlzIHByZXNlbnQg aW4gZWFjaCBzaWxpY29uIHBhY2thZ2UgYmVjYXVzZSB0aGUNCj4gaW1wbGVtZW50YXRpb24gaXMg c2lsaWNvbi1zcGVjaWZpYyBhbmQgdGhlc2UgcGFja2FnZXMgY2Fubm90DQo+ID4gPj4gZGVwZW5k IG9uIG9uZSBhbm90aGVyLg0KPiA+ID4+DQo+ID4gPj4gMy4gVGhlIGhlYWRlciBpcyBkZWZpbmVk IGluIE1pblBsYXRmb3JtUGtnIGJlY2F1c2UgTWluUGxhdGZvcm1Qa2cNCj4gc2hvdWxkIGJlIHNp bGljb24gdmVuZG9yIGFnbm9zdGljIChjYW5ub3QgZGVwZW5kIG9uIHRoZQ0KPiA+ID4+IHNpbGlj b24gcGFja2FnZXMpLg0KPiA+ID4+DQo+ID4gPj4gNC4gVGhlIGhlYWRlciBpcyBuZWVkZWQgaW4g TWluUGxhdGZvcm1Qa2cgYmVjYXVzZSB0aGUgU3BpRnZiU2VydmljZQ0KPiB0aGVyZSBkZXBlbmRz IG9uIFNQSSBmbGFzaCBvcGVyYXRpb25zIGltcGxlbWVudGVkIGluDQo+ID4gPj4gU3BpRmxhc2hD b21tb25MaWIuDQo+ID4gPj4NCj4gPiA+Pg0KPiA+ID4+IEhlcmUncyBhbiBpbml0aWFsIHByb3Bv c2FsOg0KPiA+ID4+DQo+ID4gPj4gMS4gQ29uc29saWRhdGUgdGhlIGxpYnJhcnkgaW50ZXJmYWNl IGludG8gYSBzaW5nbGUgaGVhZGVyLiBJbg0KPiA+ID4+IEludGVsU2lsaWNvblBrZz8NCj4gPiA+ Pg0KPiA+ID4+IDIuIENvbnNvbGlkYXRlIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gaW50byBhIHNp bmdsZSBpbnN0YW5jZS4gSW4NCj4gPiA+PiBJbnRlbFNpbGljb25Qa2c/DQo+ID4gPj4NCj4gPiA+ PiAzLiBNb3ZlIFNwaUZ2YlNlcnZpY2VYeXogb3V0IG9mIE1pblBsYXRmb3JtUGtnLg0KPiA+ID4+ ICAgICAgMy5hLiBNYWtlIGEgIlNQSSBmbGFzaCIgZmVhdHVyZT8NCj4gPiA+PiAgICAgIDMuYi4g QWxsb3cgdGhlIEludGVsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZmVhdHVyZSB0byBkZXBlbmQg b24NCj4gPiA+PiBTcGlGbGFzaENvbW1vbkxpYiBkZWZpbmVkIGluIEludGVsU2lsaWNvblBrZy4N Cj4gPiA+Pg0KPiA+ID4+IEludGVsIGJvYXJkIHBhY2thZ2VzIGNvdWxkIHRoZW4gdXNlIHRoZSBT cGlGbGFzaENvbW1vbkxpYiBmcm9tDQo+ID4gPj4gSW50ZWxTaWxpY29uUGtnIChhIGdlbmVyYXRp b24gc3BlY2lmaWMgaW5zdGFuY2UgY291bGQgYmUgY3JlYXRlZCBpZg0KPiA+ID4+IG5lZWRlZCkg YW5kIHVzZSB0aGUgU3BpRnZiU2VydmljZVh5eiBkcml2ZXIgZnJvbSB0aGUgIlNwaUZsYXNoIg0K PiBmZWF0dXJlLg0KPiA+ID4+DQo+ID4gPj4gTG9vayBmb3J3YXJkIHRvIHlvdXIgdGhvdWdodHMg YW5kIGZlZWRiYWNrLg0KPiA+ID4+DQo+ID4gPj4gVGhhbmtzLA0KPiA+ID4+IE1pY2hhZWwNCj4g PiA+DQo+ID4gPg0KPiA+ID4gDQo+ID4gPg0KPiA+ID4NCg==