From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web10.6973.1578639948970703349 for ; Thu, 09 Jan 2020 23:05:49 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: siyuan.fu@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Jan 2020 23:05:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,415,1571727600"; d="scan'208";a="422021506" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga005.fm.intel.com with ESMTP; 09 Jan 2020 23:05:48 -0800 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 9 Jan 2020 23:05:48 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 9 Jan 2020 23:05:47 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.245]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.30]) with mapi id 14.03.0439.000; Fri, 10 Jan 2020 15:05:45 +0800 From: "Siyuan, Fu" To: "devel@edk2.groups.io" , "Fu, Siyuan" CC: "Dong, Eric" , "Ni, Ray" , "Laszlo Ersek" Subject: Re: [edk2-devel] [Patch] UefiCpuPkg: Shadow microcode patch according to FIT microcode entry. Thread-Topic: [edk2-devel] [Patch] UefiCpuPkg: Shadow microcode patch according to FIT microcode entry. Thread-Index: AQHVx4B+TrY63Th8nkC9cdUcoVHXj6fjeWAw Date: Fri, 10 Jan 2020 07:05:45 +0000 Message-ID: References: <15E8732525669510.23004@groups.io> In-Reply-To: <15E8732525669510.23004@groups.io> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTBiMzUzNzgtODI0Yy00NzgzLWFlNmUtZjJkNWEzZDc4MmRlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoidWNMQWtzT2dYdDIxblFoMERVd2xEbDFuS2Zud1hhc1JXbHNvVVdWM2RrSWlSOXBJN0RvVGR1aU8yNld1ampEUiJ9 dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: siyuan.fu@intel.com Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 U2VuZCBieSBtaXNvcGVyYXRpb26hoyBUaGlzIHBhdGNoIGhhcyBhbHJlYWR5IGJlZW4gbWVyZ2Vk LCBwbHMgaWdub3JlLg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGRl dmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gT24gQmVoYWxmIE9mIFNp eXVhbiwNCj4gRnUNCj4gU2VudDogMjAyMMTqMdTCMTDI1SAxNDozOA0KPiBUbzogZGV2ZWxAZWRr Mi5ncm91cHMuaW8NCj4gQ2M6IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBOaSwg UmF5IDxyYXkubmlAaW50ZWwuY29tPjsgTGFzemxvDQo+IEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNv bT4NCj4gU3ViamVjdDogW2VkazItZGV2ZWxdIFtQYXRjaF0gVWVmaUNwdVBrZzogU2hhZG93IG1p Y3JvY29kZSBwYXRjaA0KPiBhY2NvcmRpbmcgdG8gRklUIG1pY3JvY29kZSBlbnRyeS4NCj4gDQo+ IFRoZSBleGlzdGluZyBNcEluaXRMaWIgd2lsbCBzaGFkb3cgdGhlIG1pY3JvY29kZSB1cGRhdGUg cGF0Y2hlcyBmcm9tDQo+IGZsYXNoIHRvIG1lbW9yeSBhbmQgdGhpcyBpcyBkb25lIGJ5IHNlYXJj aGluZyBtaWNyb2NvZGUgcmVnaW9uIHNwZWNpZmllZA0KPiBieSBQQ0QgUGNkQ3B1TWljcm9jb2Rl UGF0Y2hBZGRyZXNzIGFuZA0KPiBQY2RDcHVNaWNyb2NvZGVQYXRjaFJlZ2lvblNpemUuDQo+IFRo aXMgYnJpbmdzIGEgbGltaXRpb24gdG8gcGxhdGZvcm0gRlcgdGhhdCBhbGwgdGhlIG1pY3JvY29k ZSBwYXRjaGVzIG11c3QNCj4gYmUgcGxhY2VkIGluIG9uZSBjb250aW51b3VzIGZsYXNoIHNwYWNl Lg0KPiANCj4gVGhpcyBwYXRjaCBzaGFkb3dzIG1pY3JvY29kZSB1cGRhdGUgYWNjb3JkaW5nIHRv IEZJVCBtaWNyb2NvZGUgZW50cmllcyBpZg0KPiBpdCdzIHByZXNlbnQsIG90aGVyd2lzZSBpdCB3 aWxsIGZhbGxiYWNrIHRvIG9yaWdpbmFsIGxvZ2ljIChieSBQQ0QpLg0KPiANCj4gQSBuZXcgZmVh dHVyZWQgUENEDQo+IGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1U2hhZG93TWljcm9j b2RlQnlGaXQNCj4gaXMgYWRkZWQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGlzIHN1cHBvcnQu DQo+IA0KPiBURVNUOiBUZXN0ZWQgb24gRklUIGVuYWJsZWQgcGxhdGZvcm0uDQo+IEJaOiBodHRw czovL3RpYW5vY29yZS5hY2dtdWx0aW1lZGlhLmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MjQ0OQ0KPiAN Cj4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gQ2M6IFJheSBOaSA8cmF5 Lm5pQGludGVsLmNvbT4NCj4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ IFNpZ25lZC1vZmYtYnk6IFNpeXVhbiBGdSA8c2l5dWFuLmZ1QGludGVsLmNvbT4NCj4gUmV2aWV3 ZWQtYnk6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gUmV2aWV3ZWQtYnk6IExh c3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+IC0tLQ0KPiAgVWVmaUNwdVBrZy9MaWJy YXJ5L01wSW5pdExpYi9EeGVNcEluaXRMaWIuaW5mIHwgICAxICsNCj4gIFVlZmlDcHVQa2cvTGli cmFyeS9NcEluaXRMaWIvTWljcm9jb2RlLmMgICAgICB8IDI2MiArKysrKysrKysrKysrLS0tLS0N Cj4gIFVlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIvTXBMaWIuYyAgICAgICAgICB8ICAgNCAr LQ0KPiAgVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9NcExpYi5oICAgICAgICAgIHwgICA3 ICstDQo+ICBVZWZpQ3B1UGtnL0xpYnJhcnkvTXBJbml0TGliL1BlaU1wSW5pdExpYi5pbmYgfCAg IDMgKy0NCj4gIFVlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMgICAgICAgICAgICAgICAgICAgICB8 ICAgNiArDQo+ICBVZWZpQ3B1UGtnL1VlZmlDcHVQa2cudW5pICAgICAgICAgICAgICAgICAgICAg fCAgIDYgKw0KPiAgNyBmaWxlcyBjaGFuZ2VkLCAyMjIgaW5zZXJ0aW9ucygrKSwgNjcgZGVsZXRp b25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9E eGVNcEluaXRMaWIuaW5mDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9EeGVNcElu aXRMaWIuaW5mDQo+IGluZGV4IGNkOTEyYWIwYzUuLmJmNWQxOGQ1MjEgMTAwNjQ0DQo+IC0tLSBh L1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIvRHhlTXBJbml0TGliLmluZg0KPiArKysgYi9V ZWZpQ3B1UGtnL0xpYnJhcnkvTXBJbml0TGliL0R4ZU1wSW5pdExpYi5pbmYNCj4gQEAgLTY4LDUg KzY4LDYgQEANCj4gICAgZ1VlZmlDcHVQa2dUb2tlblNwYWNlR3VpZC5QY2RDcHVNaWNyb2NvZGVQ YXRjaFJlZ2lvblNpemUgICAgICAgICAjIw0KPiBDT05TVU1FUw0KPiAgICBnVWVmaUNwdVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZENwdUFwTG9vcE1vZGUgICAgICAgICAgICAgICAgICAgICAgICMjDQo+ IENPTlNVTUVTDQo+ICAgIGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1QXBUYXJnZXRD c3RhdGUgICAgICAgICAgICAgICAgICAgIyMNCj4gU09NRVRJTUVTX0NPTlNVTUVTDQo+ICsgIGdV ZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1U2hhZG93TWljcm9jb2RlQnlGaXQgICAgICAg ICAgICAgIyMNCj4gQ09OU1VNRVMNCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk LlBjZENwdVN0YWNrR3VhcmQgICAgICAgICAgICAgICAgICAjIw0KPiBDT05TVU1FUw0KPiANCj4g ZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIvTWljcm9jb2RlLmMNCj4g Yi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJbml0TGliL01pY3JvY29kZS5jDQo+IGluZGV4IDhmNGQ0 ZGE0MGMuLjkzODllNTJhZTUgMTAwNjQ0DQo+IC0tLSBhL1VlZmlDcHVQa2cvTGlicmFyeS9NcElu aXRMaWIvTWljcm9jb2RlLmMNCj4gKysrIGIvVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9N aWNyb2NvZGUuYw0KPiBAQCAtMzE4LDcgKzMxOCw3IEBAIERvbmU6DQo+ICB9DQo+IA0KPiAgLyoq DQo+IC0gIERldGVybWluZSBpZiBhIG1pY3JvY29kZSBwYXRjaCB3aWxsIGJlIGxvYWRlZCBpbnRv IG1lbW9yeS4NCj4gKyAgRGV0ZXJtaW5lIGlmIGEgbWljcm9jb2RlIHBhdGNoIG1hdGNocyB0aGUg c3BlY2lmaWMgcHJvY2Vzc29yIHNpZ25hdHVyZQ0KPiBhbmQgZmxhZy4NCj4gDQo+ICAgIEBwYXJh bVtpbl0gIENwdU1wRGF0YSAgICAgICAgICAgICBUaGUgcG9pbnRlciB0byBDUFUgTVAgRGF0YSBz dHJ1Y3R1cmUuDQo+ICAgIEBwYXJhbVtpbl0gIFByb2Nlc3NvclNpZ25hdHVyZSAgICBUaGUgcHJv Y2Vzc29yIHNpZ25hdHVyZSBmaWVsZCB2YWx1ZQ0KPiBAQCAtMzMwLDcgKzMzMCw3IEBAIERvbmU6 DQo+ICAgIEByZXR2YWwgRkFMU0UgICAgVGhlIHNwZWNpZmllZCBtaWNyb2NvZGUgcGF0Y2ggd2ls bCBub3QgYmUgbG9hZGVkLg0KPiAgKiovDQo+ICBCT09MRUFODQo+IC1Jc01pY3JvY29kZVBhdGNo TmVlZExvYWQgKA0KPiArSXNQcm9jZXNzb3JNYXRjaGVkTWljcm9jb2RlUGF0Y2ggKA0KPiAgICBJ TiBDUFVfTVBfREFUQSAgICAgICAgICAgICAgICAgKkNwdU1wRGF0YSwNCj4gICAgSU4gVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvclNpZ25hdHVyZSwNCj4gICAgSU4gVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvckZsYWdzDQo+IEBAIC0zNTEsNyArMzUxLDc3 IEBAIElzTWljcm9jb2RlUGF0Y2hOZWVkTG9hZCAoDQo+ICB9DQo+IA0KPiAgLyoqDQo+IC0gIEFj dHVhbCB3b3JrZXIgZnVuY3Rpb24gdGhhdCBsb2FkcyB0aGUgcmVxdWlyZWQgbWljcm9jb2RlIHBh dGNoZXMgaW50bw0KPiBtZW1vcnkuDQo+ICsgIENoZWNrIHRoZSAnUHJvY2Vzc29yU2lnbmF0dXJl JyBhbmQgJ1Byb2Nlc3NvckZsYWdzJyBvZiB0aGUgbWljcm9jb2RlDQo+ICsgIHBhdGNoIGhlYWRl ciB3aXRoIHRoZSBDUFVJRCBhbmQgUGxhdGZvcm1JRCBvZiB0aGUgcHJvY2Vzc29ycyB3aXRoaW4N Cj4gKyAgc3lzdGVtIHRvIGRlY2lkZSBpZiBpdCB3aWxsIGJlIGNvcGllZCBpbnRvIG1lbW9yeS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBDcHVNcERhdGEgICAgICAgICAgICAgVGhlIHBvaW50ZXIg dG8gQ1BVIE1QIERhdGEgc3RydWN0dXJlLg0KPiArICBAcGFyYW1baW5dICBNaWNyb2NvZGVFbnRy eVBvaW50ICAgVGhlIHBvaW50ZXIgdG8gdGhlIG1pY3JvY29kZSBwYXRjaA0KPiBoZWFkZXIuDQo+ ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICBUaGUgc3BlY2lmaWVkIG1pY3JvY29kZSBwYXRjaCBu ZWVkIHRvIGJlIGxvYWRlZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICBUaGUgc3BlY2lmaWVkIG1p Y3JvY29kZSBwYXRjaCBkb3Nlbid0IG5lZWQgdG8gYmUgbG9hZGVkLg0KPiArKiovDQo+ICtCT09M RUFODQo+ICtJc01pY3JvY29kZVBhdGNoTmVlZExvYWQgKA0KPiArICBJTiBDUFVfTVBfREFUQSAg ICAgICAgICAgICAgICAgKkNwdU1wRGF0YSwNCj4gKyAgQ1BVX01JQ1JPQ09ERV9IRUFERVIgICAg ICAgICAgICpNaWNyb2NvZGVFbnRyeVBvaW50DQo+ICsgICkNCj4gK3sNCj4gKyAgQk9PTEVBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmVlZExvYWQ7DQo+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplOw0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbFNpemU7DQo+ICsgIENQVV9NSUNST0NPREVf RVhURU5ERURfVEFCTEVfSEVBREVSICAgICpFeHRlbmRlZFRhYmxlSGVhZGVyOw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZFRhYmxlQ291bnQ7DQo+ ICsgIENQVV9NSUNST0NPREVfRVhURU5ERURfVEFCTEUgICAgICAgICAgICpFeHRlbmRlZFRhYmxl Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4g Kw0KPiArICAvLw0KPiArICAvLyBDaGVjayB0aGUgJ1Byb2Nlc3NvclNpZ25hdHVyZScgYW5kICdQ cm9jZXNzb3JGbGFncycgaW4gbWljcm9jb2RlIHBhdGNoDQo+IGhlYWRlci4NCj4gKyAgLy8NCj4g KyAgTmVlZExvYWQgPSBJc1Byb2Nlc3Nvck1hdGNoZWRNaWNyb2NvZGVQYXRjaCAoDQo+ICsgICAg ICAgICAgICAgICBDcHVNcERhdGEsDQo+ICsgICAgICAgICAgICAgICBNaWNyb2NvZGVFbnRyeVBv aW50LT5Qcm9jZXNzb3JTaWduYXR1cmUuVWludDMyLA0KPiArICAgICAgICAgICAgICAgTWljcm9j b2RlRW50cnlQb2ludC0+UHJvY2Vzc29yRmxhZ3MNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsN Cj4gKyAgLy8NCj4gKyAgLy8gSWYgdGhlIEV4dGVuZGVkIFNpZ25hdHVyZSBUYWJsZSBleGlzdHMs IGNoZWNrIGlmIHRoZSBwcm9jZXNzb3IgaXMgaW4gdGhlDQo+ICsgIC8vIHN1cHBvcnQgbGlzdA0K PiArICAvLw0KPiArICBEYXRhU2l6ZSAgPSBNaWNyb2NvZGVFbnRyeVBvaW50LT5EYXRhU2l6ZTsN Cj4gKyAgVG90YWxTaXplID0gKERhdGFTaXplID09IDApID8gMjA0OCA6IE1pY3JvY29kZUVudHJ5 UG9pbnQtPlRvdGFsU2l6ZTsNCj4gKyAgaWYgKCghTmVlZExvYWQpICYmIChEYXRhU2l6ZSAhPSAw KSAmJg0KPiArICAgICAgKFRvdGFsU2l6ZSAtIERhdGFTaXplID4gc2l6ZW9mIChDUFVfTUlDUk9D T0RFX0hFQURFUikgKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChD UFVfTUlDUk9DT0RFX0VYVEVOREVEX1RBQkxFX0hFQURFUikpKSB7DQo+ICsgICAgRXh0ZW5kZWRU YWJsZUhlYWRlciA9IChDUFVfTUlDUk9DT0RFX0VYVEVOREVEX1RBQkxFX0hFQURFUiAqKQ0KPiAo KFVJTlQ4ICopIChNaWNyb2NvZGVFbnRyeVBvaW50KQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgRGF0YVNpemUgKyBzaXplb2YgKENQVV9NSUNST0NPREVfSEVBREVSKSk7DQo+ICsg ICAgRXh0ZW5kZWRUYWJsZUNvdW50ICA9IEV4dGVuZGVkVGFibGVIZWFkZXItPkV4dGVuZGVkU2ln bmF0dXJlQ291bnQ7DQo+ICsgICAgRXh0ZW5kZWRUYWJsZSAgICAgICA9IChDUFVfTUlDUk9DT0RF X0VYVEVOREVEX1RBQkxFICopDQo+IChFeHRlbmRlZFRhYmxlSGVhZGVyICsgMSk7DQo+ICsNCj4g KyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBFeHRlbmRlZFRhYmxlQ291bnQ7IEluZGV4ICsr KSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gQ2hlY2sgdGhlICdQcm9jZXNzb3JTaWduYXR1 cmUnIGFuZCAnUHJvY2Vzc29yRmxhZycgb2YgdGhlIEV4dGVuZGVkDQo+ICsgICAgICAvLyBTaWdu YXR1cmUgVGFibGUgZW50cnkgd2l0aCB0aGUgQ1BVSUQgYW5kIFBsYXRmb3JtSUQgb2YgdGhlDQo+ IHByb2Nlc3NvcnMNCj4gKyAgICAgIC8vIHdpdGhpbiBzeXN0ZW0gdG8gZGVjaWRlIGlmIGl0IHdp bGwgYmUgY29waWVkIGludG8gbWVtb3J5DQo+ICsgICAgICAvLw0KPiArICAgICAgTmVlZExvYWQg PSBJc1Byb2Nlc3Nvck1hdGNoZWRNaWNyb2NvZGVQYXRjaCAoDQo+ICsgICAgICAgICAgICAgICAg ICAgQ3B1TXBEYXRhLA0KPiArICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkVGFibGUtPlByb2Nl c3NvclNpZ25hdHVyZS5VaW50MzIsDQo+ICsgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWRUYWJs ZS0+UHJvY2Vzc29yRmxhZw0KPiArICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgICBpZiAo TmVlZExvYWQpIHsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICB9DQo+ICsgICAgICBFeHRl bmRlZFRhYmxlICsrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBOZWVkTG9h ZDsNCj4gK30NCj4gKw0KPiArDQo+ICsvKioNCj4gKyAgQWN0dWFsIHdvcmtlciBmdW5jdGlvbiB0 aGF0IHNoYWRvd3MgdGhlIHJlcXVpcmVkIG1pY3JvY29kZSBwYXRjaGVzIGludG8NCj4gbWVtb3J5 Lg0KPiANCj4gICAgQHBhcmFtW2luLCBvdXRdICBDcHVNcERhdGEgICAgICAgIFRoZSBwb2ludGVy IHRvIENQVSBNUCBEYXRhIHN0cnVjdHVyZS4NCj4gICAgQHBhcmFtW2luXSAgICAgICBQYXRjaGVz ICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGluZm9ybWF0aW9uIG9uDQo+IEBA IC0zNjMsNyArNDMzLDcgQEAgSXNNaWNyb2NvZGVQYXRjaE5lZWRMb2FkICgNCj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGxvYWRlZC4NCj4gICoqLw0KPiAgVk9J RA0KPiAtTG9hZE1pY3JvY29kZVBhdGNoV29ya2VyICgNCj4gK1NoYWRvd01pY3JvY29kZVBhdGNo V29ya2VyICgNCj4gICAgSU4gT1VUIENQVV9NUF9EQVRBICAgICAgICAgICAgICpDcHVNcERhdGEs DQo+ICAgIElOICAgICBNSUNST0NPREVfUEFUQ0hfSU5GTyAgICAqUGF0Y2hlcywNCj4gICAgSU4g ICAgIFVJTlROICAgICAgICAgICAgICAgICAgIFBhdGNoQ291bnQsDQo+IEBAIC0zOTAsNyArNDYw LDYgQEAgTG9hZE1pY3JvY29kZVBhdGNoV29ya2VyICgNCj4gICAgICAgIChWT0lEICopIFBhdGNo ZXNbSW5kZXhdLkFkZHJlc3MsDQo+ICAgICAgICBQYXRjaGVzW0luZGV4XS5TaXplDQo+ICAgICAg ICApOw0KPiAtDQo+ICAgICAgV2Fsa2VyICs9IFBhdGNoZXNbSW5kZXhdLlNpemU7DQo+ICAgIH0N Cj4gDQo+IEBAIC00MTAsMTIgKzQ3OSwxMyBAQCBMb2FkTWljcm9jb2RlUGF0Y2hXb3JrZXIgKA0K PiAgfQ0KPiANCj4gIC8qKg0KPiAtICBMb2FkIHRoZSByZXF1aXJlZCBtaWNyb2NvZGUgcGF0Y2hl cyBkYXRhIGludG8gbWVtb3J5Lg0KPiArICBTaGFkb3cgdGhlIHJlcXVpcmVkIG1pY3JvY29kZSBw YXRjaGVzIGRhdGEgaW50byBtZW1vcnkgYWNjb3JkaW5nIHRvDQo+IFBDRA0KPiArICBQY2RDcHVN aWNyb2NvZGVQYXRjaEFkZHJlc3MgYW5kIFBjZENwdU1pY3JvY29kZVBhdGNoUmVnaW9uU2l6ZS4N Cj4gDQo+ICAgIEBwYXJhbVtpbiwgb3V0XSAgQ3B1TXBEYXRhICAgIFRoZSBwb2ludGVyIHRvIENQ VSBNUCBEYXRhIHN0cnVjdHVyZS4NCj4gICoqLw0KPiAgVk9JRA0KPiAtTG9hZE1pY3JvY29kZVBh dGNoICgNCj4gK1NoYWRvd01pY3JvY29kZVBhdGNoQnlQY2QgKA0KPiAgICBJTiBPVVQgQ1BVX01Q X0RBVEEgICAgICAgICAgICAgKkNwdU1wRGF0YQ0KPiAgICApDQo+ICB7DQo+IEBAIC00MjMsMTUg KzQ5MywxMCBAQCBMb2FkTWljcm9jb2RlUGF0Y2ggKA0KPiAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNaWNyb2NvZGVFbmQ7DQo+ICAgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplOw0KPiAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUb3RhbFNpemU7DQo+IC0gIENQVV9NSUNST0NPREVfRVhURU5E RURfVEFCTEVfSEVBREVSICAgICpFeHRlbmRlZFRhYmxlSGVhZGVyOw0KPiAtICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZFRhYmxlQ291bnQ7DQo+IC0gIENQ VV9NSUNST0NPREVfRVhURU5ERURfVEFCTEUgICAgICAgICAgICpFeHRlbmRlZFRhYmxlOw0KPiAg ICBNSUNST0NPREVfUEFUQ0hfSU5GTyAgICAgICAgICAgICAgICAgICAqUGF0Y2hJbmZvQnVmZmVy Ow0KPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhQYXRjaE51 bWJlcjsNCj4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0Y2hD b3VudDsNCj4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxM b2FkU2l6ZTsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5k ZXg7DQo+IC0gIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lZWRMb2Fk Ow0KPiANCj4gICAgLy8NCj4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbWljcm9jb2RlIHBhdGNoIHJl bGF0ZWQgZmllbGRzIGluIENwdU1wRGF0YSBhcyB0aGUgdmFsdWVzDQo+IEBAIC00ODcsNTUgKzU1 Miw3IEBAIExvYWRNaWNyb2NvZGVQYXRjaCAoDQo+ICAgICAgICBjb250aW51ZTsNCj4gICAgICB9 DQo+IA0KPiAtICAgIC8vDQo+IC0gICAgLy8gQ2hlY2sgdGhlICdQcm9jZXNzb3JTaWduYXR1cmUn IGFuZCAnUHJvY2Vzc29yRmxhZ3MnIG9mIHRoZSBtaWNyb2NvZGUNCj4gLSAgICAvLyBwYXRjaCBo ZWFkZXIgd2l0aCB0aGUgQ1BVSUQgYW5kIFBsYXRmb3JtSUQgb2YgdGhlIHByb2Nlc3NvcnMgd2l0 aGluDQo+IC0gICAgLy8gc3lzdGVtIHRvIGRlY2lkZSBpZiBpdCB3aWxsIGJlIGNvcGllZCBpbnRv IG1lbW9yeQ0KPiAtICAgIC8vDQo+IC0gICAgTmVlZExvYWQgPSBJc01pY3JvY29kZVBhdGNoTmVl ZExvYWQgKA0KPiAtICAgICAgICAgICAgICAgICBDcHVNcERhdGEsDQo+IC0gICAgICAgICAgICAg ICAgIE1pY3JvY29kZUVudHJ5UG9pbnQtPlByb2Nlc3NvclNpZ25hdHVyZS5VaW50MzIsDQo+IC0g ICAgICAgICAgICAgICAgIE1pY3JvY29kZUVudHJ5UG9pbnQtPlByb2Nlc3NvckZsYWdzDQo+IC0g ICAgICAgICAgICAgICAgICk7DQo+IC0NCj4gLSAgICAvLw0KPiAtICAgIC8vIElmIHRoZSBFeHRl bmRlZCBTaWduYXR1cmUgVGFibGUgZXhpc3RzLCBjaGVjayBpZiB0aGUgcHJvY2Vzc29yIGlzIGlu IHRoZQ0KPiAtICAgIC8vIHN1cHBvcnQgbGlzdA0KPiAtICAgIC8vDQo+IC0gICAgaWYgKCghTmVl ZExvYWQpICYmIChEYXRhU2l6ZSAhPSAwKSAmJg0KPiAtICAgICAgICAoVG90YWxTaXplIC0gRGF0 YVNpemUgPiBzaXplb2YgKENQVV9NSUNST0NPREVfSEVBREVSKSArDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZiAoQ1BVX01JQ1JPQ09ERV9FWFRFTkRFRF9UQUJMRV9I RUFERVIpKSkgew0KPiAtICAgICAgRXh0ZW5kZWRUYWJsZUhlYWRlciA9IChDUFVfTUlDUk9DT0RF X0VYVEVOREVEX1RBQkxFX0hFQURFUg0KPiAqKSAoKFVJTlQ4ICopIChNaWNyb2NvZGVFbnRyeVBv aW50KQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBEYXRhU2l6ZSArIHNpemVv ZiAoQ1BVX01JQ1JPQ09ERV9IRUFERVIpKTsNCj4gLSAgICAgIEV4dGVuZGVkVGFibGVDb3VudCAg PSBFeHRlbmRlZFRhYmxlSGVhZGVyLT5FeHRlbmRlZFNpZ25hdHVyZUNvdW50Ow0KPiAtICAgICAg RXh0ZW5kZWRUYWJsZSAgICAgICA9IChDUFVfTUlDUk9DT0RFX0VYVEVOREVEX1RBQkxFICopDQo+ IChFeHRlbmRlZFRhYmxlSGVhZGVyICsgMSk7DQo+IC0NCj4gLSAgICAgIGZvciAoSW5kZXggPSAw OyBJbmRleCA8IEV4dGVuZGVkVGFibGVDb3VudDsgSW5kZXggKyspIHsNCj4gLSAgICAgICAgLy8N Cj4gLSAgICAgICAgLy8gQXZvaWQgYWNjZXNzIGNvbnRlbnQgYmV5b25kIE1pY3JvY29kZUVuZA0K PiAtICAgICAgICAvLw0KPiAtICAgICAgICBpZiAoKFVJTlROKSBFeHRlbmRlZFRhYmxlID4gTWlj cm9jb2RlRW5kIC0gc2l6ZW9mDQo+IChDUFVfTUlDUk9DT0RFX0VYVEVOREVEX1RBQkxFKSkgew0K PiAtICAgICAgICAgIGJyZWFrOw0KPiAtICAgICAgICB9DQo+IC0NCj4gLSAgICAgICAgLy8NCj4g LSAgICAgICAgLy8gQ2hlY2sgdGhlICdQcm9jZXNzb3JTaWduYXR1cmUnIGFuZCAnUHJvY2Vzc29y RmxhZycgb2YgdGhlIEV4dGVuZGVkDQo+IC0gICAgICAgIC8vIFNpZ25hdHVyZSBUYWJsZSBlbnRy eSB3aXRoIHRoZSBDUFVJRCBhbmQgUGxhdGZvcm1JRCBvZiB0aGUNCj4gcHJvY2Vzc29ycw0KPiAt ICAgICAgICAvLyB3aXRoaW4gc3lzdGVtIHRvIGRlY2lkZSBpZiBpdCB3aWxsIGJlIGNvcGllZCBp bnRvIG1lbW9yeQ0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICBOZWVkTG9hZCA9IElzTWljcm9j b2RlUGF0Y2hOZWVkTG9hZCAoDQo+IC0gICAgICAgICAgICAgICAgICAgICBDcHVNcERhdGEsDQo+ IC0gICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZFRhYmxlLT5Qcm9jZXNzb3JTaWduYXR1cmUu VWludDMyLA0KPiAtICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWRUYWJsZS0+UHJvY2Vzc29y RmxhZw0KPiAtICAgICAgICAgICAgICAgICAgICAgKTsNCj4gLSAgICAgICAgaWYgKE5lZWRMb2Fk KSB7DQo+IC0gICAgICAgICAgYnJlYWs7DQo+IC0gICAgICAgIH0NCj4gLSAgICAgICAgRXh0ZW5k ZWRUYWJsZSArKzsNCj4gLSAgICAgIH0NCj4gLSAgICB9DQo+IC0NCj4gLSAgICBpZiAoTmVlZExv YWQpIHsNCj4gKyAgICBpZiAoSXNNaWNyb2NvZGVQYXRjaE5lZWRMb2FkIChDcHVNcERhdGEsIE1p Y3JvY29kZUVudHJ5UG9pbnQpKSB7DQo+ICAgICAgICBQYXRjaENvdW50Kys7DQo+ICAgICAgICBp ZiAoUGF0Y2hDb3VudCA+IE1heFBhdGNoTnVtYmVyKSB7DQo+ICAgICAgICAgIC8vDQo+IEBAIC01 ODEsNyArNTk4LDcgQEAgTG9hZE1pY3JvY29kZVBhdGNoICgNCj4gICAgICAgIF9fRlVOQ1RJT05f XywgUGF0Y2hDb3VudCwgVG90YWxMb2FkU2l6ZQ0KPiAgICAgICAgKSk7DQo+IA0KPiAtICAgIExv YWRNaWNyb2NvZGVQYXRjaFdvcmtlciAoQ3B1TXBEYXRhLCBQYXRjaEluZm9CdWZmZXIsIFBhdGNo Q291bnQsDQo+IFRvdGFsTG9hZFNpemUpOw0KPiArICAgIFNoYWRvd01pY3JvY29kZVBhdGNoV29y a2VyIChDcHVNcERhdGEsIFBhdGNoSW5mb0J1ZmZlciwNCj4gUGF0Y2hDb3VudCwgVG90YWxMb2Fk U2l6ZSk7DQo+ICAgIH0NCj4gDQo+ICBPbkV4aXQ6DQo+IEBAIC01OTAsMyArNjA3LDEyNCBAQCBP bkV4aXQ6DQo+ICAgIH0NCj4gICAgcmV0dXJuOw0KPiAgfQ0KPiArDQo+ICsvKioNCj4gKyAgU2hh ZG93IHRoZSByZXF1aXJlZCBtaWNyb2NvZGUgcGF0Y2hlcyBkYXRhIGludG8gbWVtb3J5IGFjY29y ZGluZyB0bw0KPiBGSVQgbWljcm9jb2RlIGVudHJ5Lg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0 XSAgQ3B1TXBEYXRhICAgIFRoZSBwb2ludGVyIHRvIENQVSBNUCBEYXRhIHN0cnVjdHVyZS4NCj4g Kw0KPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICBNaWNyb2NvZGUgcGF0Y2ggaXMg c2hhZG93ZWQgaW50byBtZW1vcnkuDQo+ICsgIEByZXR1cm4gRUZJX1VOU1VQUE9SVEVEICAgICAg IEZJVCBiYXNlZCBtaWNyb2NvZGUgc2hhZG93aW5nIGlzIG5vdA0KPiBzdXBwb3J0ZWQuDQo+ICsg IEByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVMgIE5vIGVub3VnaCBtZW1vcnkgcmVzb3VyY2Uu DQo+ICsgIEByZXR1cm4gRUZJX05PVF9GT1VORCAgICAgICAgIFRoZXJlIGlzIHNvbWV0aGluZyB3 cm9uZyBpbiBGSVQgbWljcm9jb2RlDQo+IGVudHJ5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK1NoYWRvd01pY3JvY29kZVBhdGNoQnlGaXQgKA0KPiArICBJTiBPVVQgQ1BVX01QX0RB VEEgICAgICAgICAgICAgKkNwdU1wRGF0YQ0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQ2NCAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaXRQb2ludGVyOw0KPiArICBGSVJNV0FSRV9JTlRFUkZB Q0VfVEFCTEVfRU5UUlkgICAgKkZpdEVudHJ5Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRW50cnlOdW07DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gKyAgTUlDUk9DT0RFX1BBVENIX0lORk8gICAgICAgICAgICAgICpQYXRj aEluZm9CdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhQ YXRjaE51bWJlcjsNCj4gKyAgQ1BVX01JQ1JPQ09ERV9IRUFERVIgICAgICAgICAgICAgICpNaWNy b2NvZGVFbnRyeVBvaW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UGF0Y2hDb3VudDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFs U2l6ZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsTG9hZFNp emU7DQo+ICsNCj4gKyAgaWYgKCFGZWF0dXJlUGNkR2V0IChQY2RDcHVTaGFkb3dNaWNyb2NvZGVC eUZpdCkpIHsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsNCj4g KyAgRml0UG9pbnRlciA9ICooVUlOVDY0ICopIChVSU5UTikgRklUX1BPSU5URVJfQUREUkVTUzsN Cj4gKyAgaWYgKChGaXRQb2ludGVyID09IDApIHx8DQo+ICsgICAgICAoRml0UG9pbnRlciA9PSAw eEZGRkZGRkZGRkZGRkZGRkYpIHx8DQo+ICsgICAgICAoRml0UG9pbnRlciA9PSAweEVFRUVFRUVF RUVFRUVFRUUpKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBObyBGSVQgdGFibGUuDQo+ICsgICAg Ly8NCj4gKyAgICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsN Cj4gKyAgfQ0KPiArICBGaXRFbnRyeSA9IChGSVJNV0FSRV9JTlRFUkZBQ0VfVEFCTEVfRU5UUlkg KikgKFVJTlROKSBGaXRQb2ludGVyOw0KPiArICBpZiAoKEZpdEVudHJ5WzBdLlR5cGUgIT0gRklU X1RZUEVfMDBfSEVBREVSKSB8fA0KPiArICAgICAgKEZpdEVudHJ5WzBdLkFkZHJlc3MgIT0gRklU X1RZUEVfMDBfU0lHTkFUVVJFKSkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gSW52YWxpZCBGSVQg dGFibGUsIHRyZWF0IGl0IGFzIG5vIEZJVCB0YWJsZS4NCj4gKyAgICAvLw0KPiArICAgIEFTU0VS VCAoRkFMU0UpOw0KPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICB9DQo+ICsNCj4g KyAgRW50cnlOdW0gPSAqKFVJTlQzMiAqKSgmRml0RW50cnlbMF0uU2l6ZVswXSkgJiAweEZGRkZG RjsNCj4gKw0KPiArICAvLw0KPiArICAvLyBDYWxjdWxhdGUgbWljcm9jb2RlIGVudHJ5IG51bWJl cg0KPiArICAvLw0KPiArICBNYXhQYXRjaE51bWJlciA9IDA7DQo+ICsgIGZvciAoSW5kZXggPSAw OyBJbmRleCA8IEVudHJ5TnVtOyBJbmRleCsrKSB7DQo+ICsgICAgaWYgKEZpdEVudHJ5W0luZGV4 XS5UeXBlID09IEZJVF9UWVBFXzAxX01JQ1JPQ09ERSkgew0KPiArICAgICAgTWF4UGF0Y2hOdW1i ZXIrKzsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgaWYgKE1heFBhdGNoTnVtYmVyID09IDApIHsN Cj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0KPiArDQo+ICsgIFBhdGNoSW5m b0J1ZmZlciA9IEFsbG9jYXRlUG9vbCAoTWF4UGF0Y2hOdW1iZXIgKiBzaXplb2YNCj4gKE1JQ1JP Q09ERV9QQVRDSF9JTkZPKSk7DQo+ICsgIGlmIChQYXRjaEluZm9CdWZmZXIgPT0gTlVMTCkgew0K PiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIEZpbGwgdXAgbWljcm9jb2RlIHBhdGNoIGluZm8gYnVmZmVyIGFjY29yZGluZyB0 byBGSVQgdGFibGUuDQo+ICsgIC8vDQo+ICsgIFBhdGNoQ291bnQgPSAwOw0KPiArICBUb3RhbExv YWRTaXplID0gMDsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRW50cnlOdW07IEluZGV4 KyspIHsNCj4gKyAgICBpZiAoRml0RW50cnlbSW5kZXhdLlR5cGUgPT0gRklUX1RZUEVfMDFfTUlD Uk9DT0RFKSB7DQo+ICsgICAgICBNaWNyb2NvZGVFbnRyeVBvaW50ID0gKENQVV9NSUNST0NPREVf SEVBREVSICopIChVSU5UTikNCj4gRml0RW50cnlbSW5kZXhdLkFkZHJlc3M7DQo+ICsgICAgICBU b3RhbFNpemUgPSAoTWljcm9jb2RlRW50cnlQb2ludC0+RGF0YVNpemUgPT0gMCkgPyAyMDQ4IDoN Cj4gTWljcm9jb2RlRW50cnlQb2ludC0+VG90YWxTaXplOw0KPiArICAgICAgaWYgKElzTWljcm9j b2RlUGF0Y2hOZWVkTG9hZCAoQ3B1TXBEYXRhLCBNaWNyb2NvZGVFbnRyeVBvaW50KSkgew0KPiAr ICAgICAgICBQYXRjaEluZm9CdWZmZXJbUGF0Y2hDb3VudF0uQWRkcmVzcyAgICAgPSAoVUlOVE4p DQo+IE1pY3JvY29kZUVudHJ5UG9pbnQ7DQo+ICsgICAgICAgIFBhdGNoSW5mb0J1ZmZlcltQYXRj aENvdW50XS5TaXplICAgICAgICA9IFRvdGFsU2l6ZTsNCj4gKyAgICAgICAgVG90YWxMb2FkU2l6 ZSArPSBUb3RhbFNpemU7DQo+ICsgICAgICAgIFBhdGNoQ291bnQrKzsNCj4gKyAgICAgIH0NCj4g KyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoUGF0Y2hDb3VudCAhPSAwKSB7DQo+ICsgICAg REVCVUcgKCgNCj4gKyAgICAgIERFQlVHX0lORk8sDQo+ICsgICAgICAiJWE6IDB4JXggbWljcm9j b2RlIHBhdGNoZXMgd2lsbCBiZSBsb2FkZWQgaW50byBtZW1vcnksIHdpdGggc2l6ZQ0KPiAweCV4 LlxuIiwNCj4gKyAgICAgIF9fRlVOQ1RJT05fXywgUGF0Y2hDb3VudCwgVG90YWxMb2FkU2l6ZQ0K PiArICAgICAgKSk7DQo+ICsNCj4gKyAgICBTaGFkb3dNaWNyb2NvZGVQYXRjaFdvcmtlciAoQ3B1 TXBEYXRhLCBQYXRjaEluZm9CdWZmZXIsDQo+IFBhdGNoQ291bnQsIFRvdGFsTG9hZFNpemUpOw0K PiArICB9DQo+ICsNCj4gKyAgRnJlZVBvb2wgKFBhdGNoSW5mb0J1ZmZlcik7DQo+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNoYWRvdyB0aGUgcmVxdWly ZWQgbWljcm9jb2RlIHBhdGNoZXMgZGF0YSBpbnRvIG1lbW9yeS4NCj4gKw0KPiArICBAcGFyYW1b aW4sIG91dF0gIENwdU1wRGF0YSAgICBUaGUgcG9pbnRlciB0byBDUFUgTVAgRGF0YSBzdHJ1Y3R1 cmUuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1NoYWRvd01pY3JvY29kZVVwZGF0ZVBhdGNoICgNCj4g KyAgSU4gT1VUIENQVV9NUF9EQVRBICAgICAgICAgICAgICpDcHVNcERhdGENCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgU3RhdHVzID0gU2hhZG93 TWljcm9jb2RlUGF0Y2hCeUZpdCAoQ3B1TXBEYXRhKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIFNoYWRvd01pY3JvY29kZVBhdGNoQnlQY2QgKENwdU1wRGF0YSk7DQo+ ICsgIH0NCj4gK30NCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIv TXBMaWIuYw0KPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIvTXBMaWIuYw0KPiBpbmRl eCBlNjExYThjYTQwLi42ZWM5YjE3MmI4IDEwMDY0NA0KPiAtLS0gYS9VZWZpQ3B1UGtnL0xpYnJh cnkvTXBJbml0TGliL01wTGliLmMNCj4gKysrIGIvVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExp Yi9NcExpYi5jDQo+IEBAIC0xLDcgKzEsNyBAQA0KPiAgLyoqIEBmaWxlDQo+ICAgIENQVSBNUCBJ bml0aWFsaXplIExpYnJhcnkgY29tbW9uIGZ1bmN0aW9ucy4NCj4gDQo+IC0gIENvcHlyaWdodCAo YykgMjAxNiAtIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2IC0gMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiANCj4gICoqLw0KPiBAQCAtMTc0NCw3ICsxNzQ0LDcgQEAgTXBJ bml0TGliSW5pdGlhbGl6ZSAoDQo+ICAgICAgLy8NCj4gICAgICAvLyBMb2FkIHJlcXVpcmVkIG1p Y3JvY29kZSBwYXRjaGVzIGRhdGEgaW50byBtZW1vcnkNCj4gICAgICAvLw0KPiAtICAgIExvYWRN aWNyb2NvZGVQYXRjaCAoQ3B1TXBEYXRhKTsNCj4gKyAgICBTaGFkb3dNaWNyb2NvZGVVcGRhdGVQ YXRjaCAoQ3B1TXBEYXRhKTsNCj4gICAgfSBlbHNlIHsNCj4gICAgICAvLw0KPiAgICAgIC8vIEFQ cyBoYXZlIGJlZW4gd2FrZXVwIGJlZm9yZSwganVzdCBnZXQgdGhlIENQVSBJbmZvcm1hdGlvbg0K PiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9NcExpYi5oDQo+IGIv VWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9NcExpYi5oDQo+IGluZGV4IGI2ZTVhMWFmYWIu LjdjNjJkNzVhY2MgMTAwNjQ0DQo+IC0tLSBhL1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIv TXBMaWIuaA0KPiArKysgYi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJbml0TGliL01wTGliLmgNCj4g QEAgLTI5LDYgKzI5LDkgQEANCj4gICNpbmNsdWRlIDxMaWJyYXJ5L010cnJMaWIuaD4NCj4gICNp bmNsdWRlIDxMaWJyYXJ5L0hvYkxpYi5oPg0KPiANCj4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5k YXJkL0Zpcm13YXJlSW50ZXJmYWNlVGFibGUuaD4NCj4gKw0KPiArDQo+ICAjZGVmaW5lIFdBS0VV UF9BUF9TSUdOQUwgU0lHTkFUVVJFXzMyICgnUycsICdUJywgJ0EnLCAnUCcpDQo+IA0KPiAgI2Rl ZmluZSBDUFVfSU5JVF9NUF9MSUJfSE9CX0dVSUQgXA0KPiBAQCAtNTg3LDEyICs1OTAsMTIgQEAg TWljcm9jb2RlRGV0ZWN0ICgNCj4gICAgKTsNCj4gDQo+ICAvKioNCj4gLSAgTG9hZCB0aGUgcmVx dWlyZWQgbWljcm9jb2RlIHBhdGNoZXMgZGF0YSBpbnRvIG1lbW9yeS4NCj4gKyAgU2hhZG93IHRo ZSByZXF1aXJlZCBtaWNyb2NvZGUgcGF0Y2hlcyBkYXRhIGludG8gbWVtb3J5Lg0KPiANCj4gICAg QHBhcmFtW2luLCBvdXRdICBDcHVNcERhdGEgICAgVGhlIHBvaW50ZXIgdG8gQ1BVIE1QIERhdGEg c3RydWN0dXJlLg0KPiAgKiovDQo+ICBWT0lEDQo+IC1Mb2FkTWljcm9jb2RlUGF0Y2ggKA0KPiAr U2hhZG93TWljcm9jb2RlVXBkYXRlUGF0Y2ggKA0KPiAgICBJTiBPVVQgQ1BVX01QX0RBVEEgICAg ICAgICAgICAgKkNwdU1wRGF0YQ0KPiAgICApOw0KPiANCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQ a2cvTGlicmFyeS9NcEluaXRMaWIvUGVpTXBJbml0TGliLmluZg0KPiBiL1VlZmlDcHVQa2cvTGli cmFyeS9NcEluaXRMaWIvUGVpTXBJbml0TGliLmluZg0KPiBpbmRleCAzMjY3MDNjYzlhLi41NTUx MjVhN2M1IDEwMDY0NA0KPiAtLS0gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJbml0TGliL1BlaU1w SW5pdExpYi5pbmYNCj4gKysrIGIvVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9QZWlNcElu aXRMaWIuaW5mDQo+IEBAIC0xLDcgKzEsNyBAQA0KPiAgIyMgQGZpbGUNCj4gICMgIE1QIEluaXRp YWxpemUgTGlicmFyeSBpbnN0YW5jZSBmb3IgUEVJIGRyaXZlci4NCj4gICMNCj4gLSMgIENvcHly aWdodCAoYykgMjAxNiAtIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4gKyMgIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMjAsIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gICMgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICAjDQo+ICAjIw0KPiBAQCAtNjAsNiArNjAsNyBA QA0KPiAgICBnVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdU1pY3JvY29kZVBhdGNoUmVn aW9uU2l6ZSAgICAgICAgICMjDQo+IENPTlNVTUVTDQo+ICAgIGdVZWZpQ3B1UGtnVG9rZW5TcGFj ZUd1aWQuUGNkQ3B1QXBMb29wTW9kZSAgICAgICAgICAgICAgICAgICAgICAgIyMNCj4gQ09OU1VN RVMNCj4gICAgZ1VlZmlDcHVQa2dUb2tlblNwYWNlR3VpZC5QY2RDcHVBcFRhcmdldENzdGF0ZSAg ICAgICAgICAgICAgICAgICAjIw0KPiBTT01FVElNRVNfQ09OU1VNRVMNCj4gKyAgZ1VlZmlDcHVQ a2dUb2tlblNwYWNlR3VpZC5QY2RDcHVTaGFkb3dNaWNyb2NvZGVCeUZpdCAgICAgICAgICAgICAj Iw0KPiBDT05TVU1FUw0KPiANCj4gIFtHdWlkc10NCj4gICAgZ0Vka2lpUzNTbW1Jbml0RG9uZUd1 aWQNCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMgYi9VZWZpQ3B1UGtn L1VlZmlDcHVQa2cuZGVjDQo+IGluZGV4IDQ1YjI2N2FjNjEuLmE2ZWJkZGUxY2YgMTAwNjQ0DQo+ IC0tLSBhL1VlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMNCj4gKysrIGIvVWVmaUNwdVBrZy9VZWZp Q3B1UGtnLmRlYw0KPiBAQCAtMTM5LDYgKzEzOSwxMiBAQA0KPiAgICAjIEBQcm9tcHQgTG9jayBT TU0gRmVhdHVyZSBDb250cm9sIE1TUi4NCj4gDQo+IGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQu UGNkQ3B1U21tRmVhdHVyZUNvbnRyb2xNc3JMb2NrfFRSVUV8Qk8NCj4gT0xFQU58MHgzMjEzMjEw Qg0KPiANCj4gKyAgIyMgSW5kaWNhdGVzIGlmIEZJVCBiYXNlZCBtaWNyb2NvZGUgc2hhZG93aW5n IHdpbGwgYmUgZW5hYmxlZC48QlI+PEJSPg0KPiArICAjICAgVFJVRSAgLSBGSVQgYmFzZSBtaWNy b2NvZGUgc2hhZG93aW5nIHdpbGwgYmUgZW5hYmxlZC48QlI+DQo+ICsgICMgICBGQUxTRSAtIEZJ VCBiYXNlIG1pY3JvY29kZSBzaGFkb3dpbmcgd2lsbCBiZSBkaXNhYmxlZC48QlI+DQo+ICsgICMg QFByb21wdCBGSVQgYmFzZWQgbWljcm9jb2RlIHNoYWRvd2luZy4NCj4gKw0KPiBnVWVmaUNwdVBr Z1Rva2VuU3BhY2VHdWlkLlBjZENwdVNoYWRvd01pY3JvY29kZUJ5Rml0fEZBTFNFfEJPT0xFDQo+ IEFOfDB4MzIxMzIxMEQNCj4gKw0KPiAgW1BjZHNGaXhlZEF0QnVpbGRdDQo+ICAgICMjIExpc3Qg b2YgZXhjZXB0aW9uIHZlY3RvcnMgd2hpY2ggbmVlZCBzd2l0Y2hpbmcgc3RhY2suDQo+ICAgICMg IFRoaXMgUENEIHdpbGwgb25seSB0YWtlIGludG8gZWZmZWN0IGlmIFBjZENwdVN0YWNrR3VhcmQg aXMgZW5hYmxlZC4NCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvVWVmaUNwdVBrZy51bmkgYi9V ZWZpQ3B1UGtnL1VlZmlDcHVQa2cudW5pDQo+IGluZGV4IGMwZDZlZDUxMzYuLjJkYjQ5ZTg0MWIg MTAwNjQ0DQo+IC0tLSBhL1VlZmlDcHVQa2cvVWVmaUNwdVBrZy51bmkNCj4gKysrIGIvVWVmaUNw dVBrZy9VZWZpQ3B1UGtnLnVuaQ0KPiBAQCAtMTAwLDYgKzEwMCwxMiBAQA0KPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUUlVFICAtIGxvY2tlZC48QlI+XG4iDQo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBTFNFIC0gdW5sb2NrZWQuPEJSPiINCj4g DQo+ICsjc3RyaW5nDQo+IFNUUl9nVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkX1BjZENwdVNoYWRv d01pY3JvY29kZUJ5Rml0X1BST01QVA0KPiAjbGFuZ3VhZ2UgZW4tVVMgIkZJVCBiYXNlZCBtaWNy b2NvZGUgc2hhZG93aW5nIg0KPiArDQo+ICsjc3RyaW5nDQo+IFNUUl9nVWVmaUNwdVBrZ1Rva2Vu U3BhY2VHdWlkX1BjZENwdVNoYWRvd01pY3JvY29kZUJ5Rml0X0hFTFANCj4gI2xhbmd1YWdlIGVu LVVTICJJbmRpY2F0ZXMgaWYgRklUIGJhc2VkIG1pY3JvY29kZSBzaGFkb3dpbmcgd2lsbCBiZQ0K PiBlbmFibGVkLjxCUj48QlI+XG4iDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi VFJVRSAgLSBGSVQgYmFzZQ0KPiBtaWNyb2NvZGUgc2hhZG93aW5nIHdpbGwgYmUgZW5hYmxlZC48 QlI+XG4iDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFMU0UgLSBGSVQgYmFz ZQ0KPiBtaWNyb2NvZGUgc2hhZG93aW5nIHdpbGwgYmUgZGlzYWJsZWQuPEJSPiINCj4gKw0KPiAg I3N0cmluZw0KPiBTVFJfZ1VlZmlDcHVQa2dUb2tlblNwYWNlR3VpZF9QY2RQZWlUZW1wb3JhcnlS YW1TdGFja1NpemVfUFJPTVBUDQo+ICNsYW5ndWFnZSBlbi1VUyAiU3RhY2sgc2l6ZSBpbiB0aGUg dGVtcG9yYXJ5IFJBTSINCj4gDQo+ICAjc3RyaW5nDQo+IFNUUl9nVWVmaUNwdVBrZ1Rva2VuU3Bh Y2VHdWlkX1BjZFBlaVRlbXBvcmFyeVJhbVN0YWNrU2l6ZV9IRUxQDQo+ICNsYW5ndWFnZSBlbi1V UyAiU3BlY2lmaWVzIHN0YWNrIHNpemUgaW4gdGhlIHRlbXBvcmFyeSBSQU0uIDAgbWVhbnMgaGFs ZiBvZg0KPiBUZW1wb3JhcnlSYW1TaXplLiINCj4gLS0NCj4gMi4xOS4xLndpbmRvd3MuMQ0KPiAN Cj4gDQo+IA0KDQo=