From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=michael.d.kinney@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id DEC1F211CC3CF for ; Fri, 8 Mar 2019 16:07:08 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Mar 2019 16:07:08 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,456,1544515200"; d="scan'208,217";a="326923807" Received: from orsmsx106.amr.corp.intel.com ([10.22.225.133]) by fmsmga005.fm.intel.com with ESMTP; 08 Mar 2019 16:07:07 -0800 Received: from orsmsx161.amr.corp.intel.com (10.22.240.84) by ORSMSX106.amr.corp.intel.com (10.22.225.133) with Microsoft SMTP Server (TLS) id 14.3.408.0; Fri, 8 Mar 2019 16:07:07 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.97]) by ORSMSX161.amr.corp.intel.com ([169.254.4.180]) with mapi id 14.03.0415.000; Fri, 8 Mar 2019 16:07:06 -0800 From: "Kinney, Michael D" To: "Yao, Jiewen" , "Gao, Liming" , "afish@apple.com" , "Kinney, Michael D" CC: edk2-devel-01 Thread-Topic: [edk2] [PATCH 3/3] MdePkg/BaseSynchronizationLib: Remove inline X86 assembly code Thread-Index: AQHU0vSEcLio4+YtTUm1OMXnEiLc5KX+DF2AgAAJ0gCAABPIAIABr4aA//98y1CAAJTggIAAPC8AgAAN1QCAAAOmAIAAChGAgAAIYwCAAAK4AIACI8bQ Date: Sat, 9 Mar 2019 00:07:05 +0000 Message-ID: References: <20190305014059.17988-1-shenglei.zhang@intel.com> <20190305014059.17988-4-shenglei.zhang@intel.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E3FBBC2@SHSMSX104.ccr.corp.intel.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E3FCC47@SHSMSX104.ccr.corp.intel.com> <47E8FE4A-4BDC-48A3-B7E6-02F1682C0990@apple.com> <74D8A39837DF1E4DA445A8C0B3885C503F556F4E@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503F55722E@shsmsx102.ccr.corp.intel.com> <0F79F0FC-123A-4862-926D-DFE08CF5740F@apple.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E3FCFF0@SHSMSX104.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503F55769F@shsmsx102.ccr.corp.intel.com> In-Reply-To: <74D8A39837DF1E4DA445A8C0B3885C503F55769F@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [PATCH 3/3] MdePkg/BaseSynchronizationLib: Remove inline X86 assembly code X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 09 Mar 2019 00:07:09 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Smlld2VuLA0KDQpUaGVyZSBhcmUgbm90IG1hbnkgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCB0aGV5 IGNhbiBiZSBvbiBzcGVlZCBwYXRocy4NCg0KSSBkbyBub3QgcmVjb21tZW5kIGNvbnZlcnRpbmcg dGhlbSB0byBvbmx5IE5BU00uDQoNCkkgZG8gcmVjb21tZW5kIHdlIGFkZCBjb21tZW50cyB0byBO QVNNIGZpbGVzIGFuZCBDIGZpbGVzIHdpdGggaW5jbHVkZSBhc3NlbWJseSB0aGF0IHN0YXRlIHRo YXQgdXBkYXRlcyB0byBvbmUgcmVxdWlyZSB1cGRhdGVzIHRvIHRoZSBvdGhlcnMuDQoNCk1pa2UN Cg0KRnJvbTogWWFvLCBKaWV3ZW4NClNlbnQ6IFdlZG5lc2RheSwgTWFyY2ggNiwgMjAxOSAxMToy NSBQTQ0KVG86IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IGFmaXNoQGFwcGxl LmNvbQ0KQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47 IGVkazItZGV2ZWwtMDEgPGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KU3ViamVjdDogUkU6IFtl ZGsyXSBbUEFUQ0ggMy8zXSBNZGVQa2cvQmFzZVN5bmNocm9uaXphdGlvbkxpYjogUmVtb3ZlIGlu bGluZSBYODYgYXNzZW1ibHkgY29kZQ0KDQpUaGFua3MuDQoNCkkgYWxzbyByZWNvbW1lbmQgdG8g dGFrZSBhIGxvb2sgYXQgTWRlUGtnXExpYnJhcnlcQmFzZVN5bmNocm9uaXphdGlvbkxpYi4NCg0K VGhhdCBpcyBhbHNvIGNvbXBsaWNhdGVkIGFuZCBub3Qgc28gcmVhZGFibGUgZm9yIG1lLg0KDQpB bmQgd2UgaGF2ZSA4IHBhdGNoZXMgdG8gKmZpeCogdGhlIHJlYWwgcHJvYmxlbSBpbiAyMDE4Lg0K DQpUaGFuayB5b3UNCllhbyBKaWV3ZW4NCg0KDQpGcm9tOiBHYW8sIExpbWluZw0KU2VudDogV2Vk bmVzZGF5LCBNYXJjaCA2LCAyMDE5IDExOjE1IFBNDQpUbzogYWZpc2hAYXBwbGUuY29tPG1haWx0 bzphZmlzaEBhcHBsZS5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFp bHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj4NCkNjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFl bC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47 IGVkazItZGV2ZWwtMDEgPGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVs QGxpc3RzLjAxLm9yZz4+DQpTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCAzLzNdIE1kZVBrZy9C YXNlU3luY2hyb25pemF0aW9uTGliOiBSZW1vdmUgaW5saW5lIFg4NiBhc3NlbWJseSBjb2RlDQoN ClRoYW5rcyBmb3IgeW91ciBjbGFyaWZpY2F0aW9uLiBOb3csIHdlIHdpbGwgZm9jdXMgb24gU2V0 SnVtcC9Mb25nSnVtcCgpIGZpcnN0Lg0KDQpUaGFua3MNCkxpbWluZw0KRnJvbTogYWZpc2hAYXBw bGUuY29tPG1haWx0bzphZmlzaEBhcHBsZS5jb20+IFttYWlsdG86YWZpc2hAYXBwbGUuY29tXQ0K U2VudDogV2VkbmVzZGF5LCBNYXJjaCA2LCAyMDE5IDEwOjQ1IFBNDQpUbzogWWFvLCBKaWV3ZW4g PGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+DQpDYzog S2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNo YWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5j b208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IGVkazItZGV2ZWwtMDEgPGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4+DQpTdWJqZWN0 OiBSZTogW2VkazJdIFtQQVRDSCAzLzNdIE1kZVBrZy9CYXNlU3luY2hyb25pemF0aW9uTGliOiBS ZW1vdmUgaW5saW5lIFg4NiBhc3NlbWJseSBjb2RlDQoNCg0KDQpPbiBNYXIgNiwgMjAxOSwgYXQg MTA6MDkgUE0sIFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2Vu Lnlhb0BpbnRlbC5jb20+PiB3cm90ZToNCg0KVGhhbmtzIEFuZHJldy4NCk5vdyBJIDEwMCUgYWdy ZWUgd2l0aCB5b3UgLSBJIHRoaW5rIGl0IGlzIGZpbmUgdG8gcmVzdHJpY3QgbmV3IEMgaW5saW5l IGFzc2VtYmxlciwgb3IgYXQgbGVhc3QgaGF2ZSBhIHZlcnkgaGlnaCBiYXIgdG8gYWRkIGFueXRo aW5nIG5ldy4gQW55IG5ldyBpbmxpbmUgYXNzZW1ibGVyICpzaG91bGQgYWxzbyBiZSBzaW1wbGUg YW5kIGp1c3QgYmUgYSBmdW5jdGlvbiBhYnN0cmFjdGluZyBhIENQVSBvcC1jb2RlKiB0aGF0IGlz IG5vdCBhdmFpbGFibGUgdG8gQy4gVGhpcyBpcyBob3cgd2UgcHJldmVudCB0aGUgbWFpbnRlbmFu Y2UgaXNzdWVzIHlvdSBhcmUgd29ycnlpbmcgYWJvdXQuDQoNCkFuZCBJIGFsc28gYWdyZWUgd2l0 aCB5b3VyIGNhc2UuDQoNCkxldOKAmXMgZGlzY3VzcyBhbm90aGVyIGNhc2UuIEJlbG93IDIgZnVu Y3Rpb25zIFNldEp1bXAvTG9uZ0p1bXAgYXJlIHVwZGF0ZWQgcmVjZW50bHksIGJ5IG1lIHVuZm9y dHVuYXRlbHkuDQoNCkl0IGlzIHVuY2xlYXIgdG8gbWUgd2hhdCBpcyB0aGUgc2l6ZSBvcHRpbWl6 YXRpb24gd2UgY2FuIGdldCBieSBpbmxpbmUgU2V0SnVtcC9Mb25nSnVtcC4NCkJ1dCBvYnZpb3Vz bHksIGl0IGJyaW5ncyB0aGUgbWFpbnRlbmFuY2UgaXNzdWUgdG8gbWUuDQpBbmQgSSBkb27igJl0 IGJlbGlldmUgaXQgbWVldHMgdGhlIGNyaXRlcmlhIHlvdSBtZW50aW9uZWQgYWJvdmUuDQoNCg0K Smlld2VuLA0KDQpJIGFncmVlIGl0IHNlZW1zIGxpa2UgZ2l2ZW4gdGhlIHJ1bGVzIHdlIGFncmVl IG9uIHRoaXMgY29kZSBzaG91bGQgYmUgd3JpdHRlbiBpbiBOQVNNLg0KDQpUaGFua3MsDQoNCkFu ZHJldyBGaXNoDQoNCl9kZWNsc3BlYyAobmFrZWQpDQpSRVRVUk5TX1RXSUNFDQpVSU5UTg0KRUZJ QVBJDQpTZXRKdW1wICgNCiAgT1VUICAgICBCQVNFX0xJQlJBUllfSlVNUF9CVUZGRVIgICpKdW1w QnVmZmVyDQogICkNCnsNCiAgX2FzbSB7DQogICAgcHVzaCAgICBbZXNwICsgNF0NCiAgICBjYWxs ICAgIEludGVybmFsQXNzZXJ0SnVtcEJ1ZmZlcg0KICAgIHBvcCAgICAgZWN4DQogICAgcG9wICAg ICBlY3gNCiAgICBtb3YgICAgIGVkeCwgW2VzcF0NCg0KICAgIHhvciAgICAgZWF4LCBlYXgNCiAg ICBtb3YgICAgIFtlZHggKyAyNF0sIGVheCAgICAgICAgOyBzYXZlIDAgdG8gU1NQDQoNCiAgICBt b3YgICAgIGVheCwgW1BjZEdldDMyIChQY2RDb250cm9sRmxvd0VuZm9yY2VtZW50UHJvcGVydHlN YXNrKV0NCiAgICB0ZXN0ICAgIGVheCwgZWF4DQogICAganogICAgICBDZXREb25lDQogICAgX2Vt aXQgICAgICAweDBGDQogICAgX2VtaXQgICAgICAweDIwDQogICAgX2VtaXQgICAgICAweEUwICAg ICAgICAgICAgICAgIDsgbW92ICAgICBlYXgsIGNyNA0KICAgIGJ0ICAgICAgZWF4LCAyMyAgICAg ICAgICAgICAgICA7IGNoZWNrIGlmIENFVCBpcyBlbmFibGVkDQogICAgam5jICAgICBDZXREb25l DQoNCiAgICBtb3YgICAgIGVheCwgMQ0KICAgIF9lbWl0ICAgICAgMHhGMw0KICAgIF9lbWl0ICAg ICAgMHgwRg0KICAgIF9lbWl0ICAgICAgMHhBRQ0KICAgIF9lbWl0ICAgICAgMHhFOCAgICAgICAg ICAgICAgICA7IElOQ1NTUCBFQVggdG8gcmVhZCBvcmlnaW5hbCBTU1ANCiAgICBfZW1pdCAgICAg IDB4RjMNCiAgICBfZW1pdCAgICAgIDB4MEYNCiAgICBfZW1pdCAgICAgIDB4MUUNCiAgICBfZW1p dCAgICAgIDB4QzggICAgICAgICAgICAgICAgOyBSRUFEU1NQIEVBWA0KICAgIG1vdiAgICAgW2Vk eCArIDB4MjRdLCBlYXggICAgICA7IHNhdmUgU1NQDQoNCkNldERvbmU6DQoNCiAgICBtb3YgICAg IFtlZHhdLCBlYngNCiAgICBtb3YgICAgIFtlZHggKyA0XSwgZXNpDQogICAgbW92ICAgICBbZWR4 ICsgOF0sIGVkaQ0KICAgIG1vdiAgICAgW2VkeCArIDEyXSwgZWJwDQogICAgbW92ICAgICBbZWR4 ICsgMTZdLCBlc3ANCiAgICBtb3YgICAgIFtlZHggKyAyMF0sIGVjeA0KICAgIHhvciAgICAgZWF4 LCBlYXgNCiAgICBqbXAgICAgIGVjeA0KICB9DQp9DQoNCl9fZGVjbHNwZWMgKG5ha2VkKQ0KVk9J RA0KRUZJQVBJDQpJbnRlcm5hbExvbmdKdW1wICgNCiAgSU4gICAgICBCQVNFX0xJQlJBUllfSlVN UF9CVUZGRVIgICpKdW1wQnVmZmVyLA0KICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgVmFsdWUNCiAgKQ0Kew0KICBfYXNtIHsNCiAgICBtb3YgICAgIGVheCwgW1BjZEdldDMyIChQ Y2RDb250cm9sRmxvd0VuZm9yY2VtZW50UHJvcGVydHlNYXNrKV0NCiAgICB0ZXN0ICAgIGVheCwg ZWF4DQogICAganogICAgICBDZXREb25lDQogICAgX2VtaXQgICAgICAweDBGDQogICAgX2VtaXQg ICAgICAweDIwDQogICAgX2VtaXQgICAgICAweEUwICAgICAgICAgICAgICAgIDsgbW92ICAgICBl YXgsIGNyNA0KICAgIGJ0ICAgICAgZWF4LCAyMyAgICAgICAgICAgICAgICA7IGNoZWNrIGlmIENF VCBpcyBlbmFibGVkDQogICAgam5jICAgICBDZXREb25lDQoNCiAgICBtb3YgICAgIGVkeCwgW2Vz cCArIDRdICAgICAgICAgOyBlZHggPSBKdW1wQnVmZmVyDQogICAgbW92ICAgICBlZHgsIFtlZHgg KyAyNF0gICAgICAgIDsgZWR4ID0gdGFyZ2V0IFNTUA0KICAgIF9lbWl0ICAgICAgMHhGMw0KICAg IF9lbWl0ICAgICAgMHgwRg0KICAgIF9lbWl0ICAgICAgMHgxRQ0KICAgIF9lbWl0ICAgICAgMHhD OCAgICAgICAgICAgICAgICA7IFJFQURTU1AgRUFYDQogICAgc3ViICAgICBlZHgsIGVheCAgICAg ICAgICAgICAgIDsgZWR4ID0gZGVsdGENCiAgICBtb3YgICAgIGVheCwgZWR4ICAgICAgICAgICAg ICAgOyBlYXggPSBkZWx0YQ0KDQogICAgc2hyICAgICBlYXgsIDIgICAgICAgICAgICAgICAgIDsg ZWF4ID0gZGVsdGEvc2l6ZW9mKFVJTlQzMikNCiAgICBfZW1pdCAgICAgIDB4RjMNCiAgICBfZW1p dCAgICAgIDB4MEYNCiAgICBfZW1pdCAgICAgIDB4QUUNCiAgICBfZW1pdCAgICAgIDB4RTggICAg ICAgICAgICAgICAgOyBJTkNTU1AgRUFYDQoNCkNldERvbmU6DQoNCiAgICBwb3AgICAgIGVheCAg ICAgICAgICAgICAgICAgICAgICAgICA7IHNraXAgcmV0dXJuIGFkZHJlc3MNCiAgICBwb3AgICAg IGVkeCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVkeCA8LSBKdW1wQnVmZmVyDQogICAgcG9w ICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPC0gVmFsdWUNCiAgICBtb3Yg ICAgIGVieCwgW2VkeF0NCiAgICBtb3YgICAgIGVzaSwgW2VkeCArIDRdDQogICAgbW92ICAgICBl ZGksIFtlZHggKyA4XQ0KICAgIG1vdiAgICAgZWJwLCBbZWR4ICsgMTJdDQogICAgbW92ICAgICBl c3AsIFtlZHggKyAxNl0NCiAgICBqbXAgICAgIGR3b3JkIHB0ciBbZWR4ICsgMjBdDQogIH0NCn0N Cg0KDQoNCkZyb206IGFmaXNoQGFwcGxlLmNvbTxtYWlsdG86YWZpc2hAYXBwbGUuY29tPiBbbWFp bHRvOmFmaXNoQGFwcGxlLmNvbV0NClNlbnQ6IFdlZG5lc2RheSwgTWFyY2ggNiwgMjAxOSA5OjU2 IFBNDQpUbzogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4u eWFvQGludGVsLmNvbT4+DQpDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBHYW8sIExpbWlu ZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IGVk azItZGV2ZWwtMDEgPGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxp c3RzLjAxLm9yZz4+DQpTdWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCAzLzNdIE1kZVBrZy9CYXNl U3luY2hyb25pemF0aW9uTGliOiBSZW1vdmUgaW5saW5lIFg4NiBhc3NlbWJseSBjb2RlDQoNCg0K DQpPbiBNYXIgNiwgMjAxOSwgYXQgOTowNiBQTSwgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50 ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+IHdyb3RlOg0KDQpISSBNaWtlIGFu ZCBBbmRyZXcNClRoZSBwcm9ibGVtIGlzIG1haW50YWluYWJpbGl0eS4NCg0KSWYgd2UgaGF2ZSBt dWx0aXBsZSBjb3B5IG9mIGltcGxlbWVudGF0aW9uLCBhIGRldmVsb3BlciBuZWVkIHZlcmlmeSBt dWx0aXBsZSBjb3B5IG9mIGltcGxlbWVudGF0aW9uLCBpZiB3ZSBtYWtlIHVwZGF0ZS4gQmVmb3Jl IHRoYXQsIGEgZGV2ZWxvcGVyIGhhcyB0byBiZSBhd2FyZSB0aGF0IHRoZXJlIGlzIG11bHRpcGxl IGNvcHkgb2YgaW1wbGVtZW50YXRpb24uIC0gVGhhdCBpbmNyZWFzZXMgdGhlIGNvbXBsZXhpdHku DQoNCklmIHdlIGhhdmUgZXZlcnl0aGluZywgdGhlcmUgTUFZIGJlIDUgY29weSAtIEFTTSwgTkFT TSwgUywgR0NDIGlubGluZSwgTVMgaW5saW5lLCB0aGVvcmV0aWNhbGx5Lg0KTm93LCB3ZSByZW1v dmUgQVNNLiBJdCBpcyBnb29kIGZpcnN0IHN0ZXAuDQpCdXQgd2UgbWF5IHN0aWxsIGhhdmUgNCBj b3BpZXMuIEkgc3VnZ2VzdCB3ZSBjb25zaWRlciBkbyBtb3JlLg0KDQpKaWV3ZW4sDQoNCkkgdGhp bmsgeW91IGFyZSB0cnlpbmcgZG8gdGhlIHJpZ2h0IHRoaW5nLCBidXQgYXJlIG9wdGltaXplIHRo ZSB3cm9uZyB0aGluZy4NCg0KTW9zdCBvZiB0aGUgR0NDL0NsYW5nIGlubGluZSBhc3NlbWJsZXIg Y29kZSBpcyBpbiBHY2NpbmxpbmUuYyBhbmQgc2luY2UgdGhhdCBjb2RlIGlzIG1vc3RseSBqdXN0 IGFic3RyYWN0aW5nIGFuIHg4NiBpbnN0cnVjdGlvbiBhbmQgdGhlIGZ1bmN0aW9ucyBhcmUgdmVy eSBzaW1wbGUgYW5kIHRodXMgaXQgaXMgTk9UIGNvZGUgdGhhdCBuZWVkcyBvbmdvaW5nIG1haW50 ZW5hbmNlLg0KDQpMZXRzIGxvb2sgYXQgdGhlIGhpc3Rvcnk6DQpodHRwczovL2dpdGh1Yi5jb20v dGlhbm9jb3JlL2VkazIvY29tbWl0cy9tYXN0ZXIvTWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9YNjQv R2NjSW5saW5lLmMNClRoZSBsYXN0IGxvZ2ljIGZpeCB3YXMgSnVuIDEsIDIwMTANCg0KaHR0cHM6 Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2NvbW1pdHMvbWFzdGVyL01kZVBrZy9MaWJyYXJ5 L0Jhc2VMaWIvSWEzMi9HY2NJbmxpbmUuYw0KT2sgc28gTWlrZSBoYWQgdG8gbWFrZSBhIGZpeCBp biB0aGlzIGZpbGUgaW4gMjAxNSB0byBtYWtlIHNvbWV0aGluZyBvcHRpb25hbCwgZHVlIHRvIGFu IGVtYmVkZGVkIENQVSBkZWZlYXRpbmcgYW4gaW5zdHJ1Y3Rpb24uIEJ1dCBwcmlvciB0byB0aGF0 IGl0IHdhcyAyMDEwLg0KDQpUaGUgc2V0IG9mIHRoaW5ncyB0aGF0IGFyZSBDIGlubGluZSBhc3Nl bWJsZXIgd2UgaGF2ZSBzaG91bGQgYmUgc3RhdGljIGFuZCBub3QgcmVxdWlyZSBtdWNoIG1haW50 ZW5hbmNlLiBNb3JlIGNvbXBsZXggY29kZSBzaG91bGQgYmUgd3JpdHRlbiBpbiBDIGFuZCB1c2Ug dGhlIEMgaW5saW5lIGFzc2VtYmxlciBmdW5jdGlvbnMgd2UgYWxyZWFkeSBoYXZlLiBJZiBhbnkg bW9yZSBjb21wbGV4IGFzc2VtYmx5IGNvZGUgaXMgcmVxdWlyZWQgd2Ugc2hvdWxkIGp1c3Qgd3Jp dGUgaXQgaW4gTkFTTS4gU28gSSB0aGluayBpdCBpcyBmaW5lIHRvIHJlc3RyaWN0IG5ldyBDIGlu bGluZSBhc3NlbWJsZXIsIG9yIGF0IGxlYXN0IGhhdmUgYSB2ZXJ5IGhpZ2ggYmFyIHRvIGFkZCBh bnl0aGluZyBuZXcuIEFueSBuZXcgaW5saW5lIGFzc2VtYmxlciBzaG91bGQgYWxzbyBiZSBzaW1w bGUgYW5kIGp1c3QgYmUgYSBmdW5jdGlvbiBhYnN0cmFjdGluZyBhIENQVSBvcC1jb2RlIHRoYXQg aXMgbm90IGF2YWlsYWJsZSB0byBDLiBUaGlzIGlzIGhvdyB3ZSBwcmV2ZW50IHRoZSBtYWludGVu YW5jZSBpc3N1ZXMgeW91IGFyZSB3b3JyeWluZyBhYm91dC4NCg0KSSBnYXZlIGFuIGV4YW1wbGUg aW4gdGhpcyAgbWFpbCB0aHJlYWQgb24gaG93IGEgQnJlYWtwb2ludCBnb2VzIGZyb20gYmVpbmcg MSBieXRlIHRvIDExIGJ5dGVzIGlmIHlvdSByZW1vdmUgdGhlIEMgaW5saW5lIGFzc2VtYmxlci4g Rm9yIGNsYW5nIHdpdGggTFRPIGVuYWJsZWQgYSBDcHVCcmVha3BvaW50IHdpbGwgYWx3YXlzIGdl dCBpbmxpbmVkIGludG8gdGhlIGNhbGxlcnMgY29kZSBhbmQgaXQgd2lsbCBvbmx5IHRha2UgdGhl IG9uZSBieXRlIGZvciBpbnQgMyBpbnN0cnVjdGlvbi4gSWYgdGhhdCBjb2RlIG1vdmVzIHRvIE5B U00gdGhlbiBpdCBnZXQgcmVwbGFjZXMgd2l0aCBhIDUgYnl0ZSBjYWxsIGluc3RydWN0aW9uIGFu ZCBhbiBhY3R1YWwgQyBBQkkgZnVuY3Rpb24gZm9yIHRoZSBicmVha3BvaW50Lg0KDQpWT0lEDQpF RklBUEkNCkNwdUJyZWFrcG9pbnQgKA0KICBWT0lEDQogICkNCnsNCiAgX19hc21fXyBfX3ZvbGF0 aWxlX18gKCJpbnQgJDMiKTsNCn0NCg0KVG9kYXkgd2l0aCBjbGFuZyBMVE8gdHVybmVkIG9uIGNh bGxpbmcgQ3B1QnJlYWtwb2ludCgpIGxvb2tzIGxpa2UgdGhpcyBmcm9tIHRoZSBjYWxsZXJzIHBv aW50IG9mIHZpZXcuDQoNCmEub3V0WzB4MWZhNV0gPCs2PjogIGNjICAgICAgICAgICAgICBpbnQz DQoNCkJ1dCBpZiB3ZSBtb3ZlIHRoYXQgdG8gTkFTTToNCg0KYS5vdXRbMHgxZmE2XSA8Kzc+OiAg ZTggMDcgMDAgMDAgMDAgIGNhbGxsICAweDFmYjIgICAgICAgICAgICAgICAgICAgIDsgQ3B1QnJl YWtwb2ludA0KDQpwbHVzOg0KYS5vdXRgQ3B1QnJlYWtwb2ludDoNCmEub3V0WzB4MWY5OV0gPCsw PjogNTUgICAgIHB1c2hsICAlZWJwDQphLm91dFsweDFmOWFdIDwrMT46IDg5IGU1ICBtb3ZsICAg JWVzcCwgJWVicA0KYS5vdXRbMHgxZjljXSA8KzM+OiBjYyAgICAgaW50Mw0KYS5vdXRbMHgxZjlk XSA8KzQ+OiA1ZCAgICAgcG9wbCAgICVlYnANCmEub3V0WzB4MWY5ZV0gPCs1PjogYzMgICAgIHJl dGwNCg0KRm9yIGFueSBjb21waWxlciB0aGF0IGVtaXRzIHRoZSBmcmFtZSBwb2ludGVyIGlmIHlv dSBtb3ZlIHRoZSBJTlQgMyB0byBhc3NlbWJseSB5b3UgbmVlZCB0aGUgZnJhbWUgcG9pbnRlciBv ciB0aGUgRXhjZXB0aW9uIExpYiBpcyBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byBwcmludCBvdXQg dGhlIHN0YWNrIGJhY2t0cmFjZSBvZiB0aGUgY29kZSB3aGVuIHlvdSBoaXQgYSBicmVha3BvaW50 LiBTbyB0aGlzIGlzIGhvdyBJIGdldCB0byAxMSB2cy4gMSBieXRlcy4NCg0KVGhhbmtzLA0KDQpB bmRyZXcgRmlzaA0KDQpQUyBmb3IgY2xhbmcgTFRPIHRoZSBjb21waWxlciBjb21waWxlcyB0byBi aXRjb2RlIGFuZCB0aGF0IGlzIGFuIGFic3RyYWN0ZWQgYXNzZW1ibHkgbGFuZ3VhZ2UuIEF0IGxp bmsgdGltZSBhbGwgdGhhdCBjb2RlIGdldHMgb3B0aW1pemVkIHRvIHRvZ2V0aGVyIGFuZCB0aGVu IHBhc3NlZCB0aHJvdWdoIHRoZSBDUFUgc3BlY2lmaWMgY29kZSBnZW4uIEZvciBDIGlubGluZSBh c3NlbWJsZXIgdGhlIGFzc2VtYmx5IGluc3RydWN0aW9ucyBlbmQgdXAgaW4gdGhlIGJpdGNvZGUg d2l0aCBsb3RzIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb25zdHJhaW50cy4gVGhhdCBpcyB3 aHkgdGhlc2UgR2NjSW5saW5lLmMgZnVuY3Rpb25zIGFsbW9zdCBhbHdheXMgZ2V0IGlubGluZWQg d2l0aCBjbGFuZyBhbmQgTFRPLg0KDQpUaGUgQ3B1QnJlYWtwb2ludCgpIGZ1bmN0aW9uIGxvb2tz IGxpa2UgdGhpcyBpbiBiaXRjb2RlLCBidXQgdGhlIGZ1bmN0aW9uIGNhbGwgZ2V0cyBvcHRpbWl6 ZWQgYXdheSBieSBMVE8gaW4gdGhlIGNvZGUgZ2VuLg0KDQo7IEZ1bmN0aW9uIEF0dHJzOiBub2lu bGluZSBub3Vud2luZCBvcHRub25lIHNzcCB1d3RhYmxlDQpkZWZpbmUgdm9pZCBAQ3B1QnJlYWtw b2ludCgpICMwIHsNCiAgY2FsbCB2b2lkIGFzbSBzaWRlZWZmZWN0ICJpbnQgJCQzIiwgIn57ZGly ZmxhZ30sfntmcHNyfSx+e2ZsYWdzfSIoKSAjMiwgIXNyY2xvYyAhMw0KICByZXQgdm9pZA0KfQ0K DQpFdmVuIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBBc21SZWFkTXNyNjQoKSBjYW4gZ2V0 IGlubGluZWQsIGJ1dCBpdCBjb250YWlucyBhIGxvdCBtb3JlIGluZm8gYWJvdXQgdGhlIGNvbnN0 cmFpbnRzOg0KDQo7IEZ1bmN0aW9uIEF0dHJzOiBub2lubGluZSBub3Vud2luZCBvcHRub25lIHNz cCB1d3RhYmxlDQpkZWZpbmUgaTY0IEBBc21SZWFkTXNyNjQoaTMyKSAjMCB7DQogICUyID0gYWxs b2NhIGkzMiwgYWxpZ24gNA0KICAlMyA9IGFsbG9jYSBpNjQsIGFsaWduIDgNCiAgc3RvcmUgaTMy ICUwLCBpMzIqICUyLCBhbGlnbiA0DQogICU0ID0gbG9hZCBpMzIsIGkzMiogJTIsIGFsaWduIDQN CiAgJTUgPSBjYWxsIGk2NCBhc20gc2lkZWVmZmVjdCAicmRtc3IiLCAiPUEse2N4fSx+e2RpcmZs YWd9LH57ZnBzcn0sfntmbGFnc30iKGkzMiAlNCkgIzIsICFzcmNsb2MgITQNCiAgc3RvcmUgaTY0 ICU1LCBpNjQqICUzLCBhbGlnbiA4DQogICU2ID0gbG9hZCBpNjQsIGk2NCogJTMsIGFsaWduIDgN CiAgcmV0IGk2NCAlNg0KfQ0KDQpUaGUgYWxsb2NhLCBzdG9yZSwgbG9hZCwgZXRjIGFyZSB0aGUg c2FtZSBiaXRjb2RlIGluc3RydWN0aW9ucyB5b3Ugd291bGQgc2VlIHdpdGggQyBjb2RlLg0KDQpB IHJlY2VudGx5IGNhc2UgdGhhdCBTZXRKdW1wL0xvbmdKdW1wLCBJIHVwZGF0ZWQgdGhlIE5BU00g ZmlsZSBmb3IgYm90aCBJQTMyIGFuZCBYNjQuDQoNCkxhdGVyLCB0byBteSBzdXJwcmlzZSwgb25s eSBYNjQgdmVyc2lvbiBOQVNNIHdvcmtzLCBhbmQgSUEzMiB2ZXJzaW9uIE5BU00gZG9lcyBub3Qg d29yay4NClRoZW4gSSBub3RpY2UgdGhhdCB0aGVyZSBpcyBhIGRpZmZlcmVudCBjb3B5IGlmIElB MzIgSnVtcC5jIE1TIGlubGluZSAtIEkgYWxzbyBuZWVkIHVwZGF0ZS4gVGhhdCBpcyBmcnVzdHJh dGVkLg0KDQpJIHRoaW5rIHRoZXJlIHNob3VsZCBiZSBhIGJhbGFuY2UgYmV0d2VlbiBvcHRpbWl6 YXRpb24gYW5kIGNvZGUgcmVhZGFiaWxpdHkvbWFpbnRhaW5hYmlsaXR5Lg0KDQpEbyB3ZSBoYXZl IGRhdGEgb24gd2hhdCBzaXplIGJlbmVmaXQgd2UgY2FuIGdldCB3aXRoIHRoZXNlIGlubGluZSBm dW5jdGlvbiwgZnJvbSB3aG9sZSBpbWFnZSBsZXZlbD8NCldlIGNhbiBkbyBldmFsdWF0aW9uIGF0 IGZ1bmN0aW9uIGxldmVsLCBjYXNlIGJ5IGNhc2UuDQpJZiB3ZSBzZWUgYSBodWdlIHNpemUgYmVu ZWZpdCwgSSBhZ3JlZSB0byBrZWVwIHRoaXMgZnVuY3Rpb24uDQpJZiB3ZSBzZWUgbm8gc2l6ZSBi ZW5lZml0LCBJIHN1Z2dlc3Qgd2UgZG8gdGhlIGNsZWFudXAgZm9yIHRoaXMgZnVuY3Rpb24uDQoN Cg0KVGhhbmsgeW91DQpZYW8gSmlld2VuDQoNCg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5v cmddIE9uIEJlaGFsZiBPZg0KQW5kcmV3IEZpc2ggdmlhIGVkazItZGV2ZWwNClNlbnQ6IFdlZG5l c2RheSwgTWFyY2ggNiwgMjAxOSA1OjMxIFBNDQpUbzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+ DQpDYzogZWRrMi1kZXZlbC0wMSA8ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazIt ZGV2ZWxAbGlzdHMuMDEub3JnPj47IEdhbywgTGltaW5nDQo8bGltaW5nLmdhb0BpbnRlbC5jb208 bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj4NClN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENI IDMvM10gTWRlUGtnL0Jhc2VTeW5jaHJvbml6YXRpb25MaWI6IFJlbW92ZQ0KaW5saW5lIFg4NiBh c3NlbWJseSBjb2RlDQoNCg0KDQpPbiBNYXIgNiwgMjAxOSwgYXQgNDo0MSBQTSwgS2lubmV5LCBN aWNoYWVsIEQNCjxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtp bm5leUBpbnRlbC5jb20+PiB3cm90ZToNCg0KTGltaW5nLA0KDQpUaGF0IGRvZXMgbm90IHdvcmsg ZWl0aGVyIGJlY2F1c2UgaW5saW5lIGFzc2VtYmx5IHVzZXMgY29tcGlsZXIgc3BlY2lmaWMNCnN5 bnRheC4NCg0KUGxlYXNlIHVwZGF0ZSB3aXRoIHRoZSBzcGVjaWZpYyBsaXN0IG9mIGZ1bmN0aW9u cyB0aGF0IHlvdSB0aGluayB0aGUgaW5saW5lDQpzaG91bGQgYmUgcmVtb3ZlZCB0byBpbXByb3Zl IG1haW50ZW5hbmNlIHdpdGggbm8gaW1wYWN0cyBpbiBzaXplL3BlcmYuDQoNCg0KTWlrZSwNCg0K SXQgaXMgZWFzeSB0byBmaW5kIHRoZSBnY2MvY2xhbmcgaW5saW5lIGFzc2VtYmxlciwganVzdCBg Z2l0IGdyZXAgIl9fYXNtX18NCl9fdm9sYXRpbGVfXyJgDQoNClRoZSBtYWluIGZpbGVzIGFyZToN Cmh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi9ibG9iL21hc3Rlci9NZGVQa2cvTGli cmFyeS9CYXNlSW9MaWINCkludHJpbnNpYy9Jb0xpYkdjYy5jDQpodHRwczovL2dpdGh1Yi5jb20v dGlhbm9jb3JlL2VkazIvYmxvYi9tYXN0ZXIvTWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9YDQo2NC9H Y2NJbmxpbmUuYw0KaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvbWFzdGVy L01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvSQ0KYTMyL0djY0lubGluZS5jDQpodHRwczovL2dpdGh1 Yi5jb20vdGlhbm9jb3JlL2VkazIvYmxvYi9tYXN0ZXIvTWRlUGtnL0xpYnJhcnkvQmFzZVN5bmMN Cmhyb25pemF0aW9uTGliL0lhMzIvR2NjSW5saW5lLmMNCmh0dHBzOi8vZ2l0aHViLmNvbS90aWFu b2NvcmUvZWRrMi9ibG9iL21hc3Rlci9NZGVQa2cvTGlicmFyeS9CYXNlU3luYw0KaHJvbml6YXRp b25MaWIvWDY0L0djY0lubGluZS5jDQoNClRoaXMgaXMgcmVhbGx5IGp1c3QgY29tcGlsZXIgb3B0 aW1pemVyIGNvbnRyb2wuDQpMaWJyYXJ5L0Jhc2VTeW5jaHJvbml6YXRpb25MaWIvU3luY2hyb25p emF0aW9uR2NjLmM6MjE6I2RlZmluZQ0KX1JlYWRXcml0ZUJhcnJpZXIoKSBkbyB7IF9fYXNtX18g X192b2xhdGlsZV9fICgiIjogOiA6ICJtZW1vcnkiKTsgfSB3aGlsZSgwKQ0KDQpMb29rcyBsaWtl IHRoaXMgaXMgd29ya2luZyBhcm91bmQgdGhlIGFsaWdubWVudCBBU1NFUlQgaW4gQmFzZUlvTGli SW50cmluc2ljLg0KT3ZtZlBrZy9RZW11VmlkZW9EeGUvVW5hbGlnbmVkSW9HY2MuYzo0MzogIF9f YXNtX18gX192b2xhdGlsZV9fDQooICJvdXRsICUwLCAlMSIgOiA6ICJhIiAoVmFsdWUpLCAiZCIg KChVSU5UMTYpUG9ydCkgKTsNCk92bWZQa2cvUWVtdVZpZGVvRHhlL1VuYWxpZ25lZElvR2NjLmM6 Njc6ICBfX2FzbV9fIF9fdm9sYXRpbGVfXw0KKCAiaW5sICUxLCAlMCIgOiAiPWEiIChEYXRhKSA6 ICJkIiAoKFVJTlQxNilQb3J0KSApOw0KDQpJdCBzZWVtcyBsaWtlIHdlIGhhdmUgYSByZWFzb25h YmxlIHNldCBhbmQgc2hvdWxkIG5vdCB1c2UgdGhlIGlubGluZQ0KYXNzZW1ibHkgZm9yIGFueSBt b3JlIGNvbXBsZXggY29kZS4NCg0KVGhhbmtzLA0KDQpBbmRyZXcgRmlzaA0KDQpUaGUgaXNzdWUg eW91IHBvaW50ZWQgdG8gd2FzIGFyb3VuZCBTZXRKdW1wKCkvTG9uZ0p1bXAoKS4gIENhbiB3ZSBs aW1pdA0KdGhpcyBCWiB0byBvbmx5IHRob3NlIDIgZnVuY3Rpb25zPw0KDQpNaWtlDQogIDw+DQpG cm9tOiBHYW8sIExpbWluZw0KU2VudDogV2VkbmVzZGF5LCBNYXJjaCA2LCAyMDE5IDQ6MjggUE0N ClRvOiBhZmlzaEBhcHBsZS5jb208bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT4NCkNjOiBaaGFuZywg U2hlbmdsZWkgPHNoZW5nbGVpLnpoYW5nQGludGVsLmNvbTxtYWlsdG86c2hlbmdsZWkuemhhbmdA aW50ZWwuY29tPj47IGVkazItZGV2ZWwtMDENCjxlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWls dG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+PjsgS2lubmV5LCBNaWNoYWVsIEQNCjxtaWNoYWVs LmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pg0K U3ViamVjdDogUkU6IFtlZGsyXSBbUEFUQ0ggMy8zXSBNZGVQa2cvQmFzZVN5bmNocm9uaXphdGlv bkxpYjogUmVtb3ZlDQppbmxpbmUgWDg2IGFzc2VtYmx5IGNvZGUNCg0KQW5kcmV3Og0KIEkgd2Fu dCB0byBrZWVwIG9ubHkgb25lIGltcGxlbWVudGF0aW9uLiBJZiBpbmxpbmUgYXNzZW1ibHkgYyBz b3VyY2UgaXMNCnByZWZlcnJlZCwgSSBzdWdnZXN0IHRvIHJlbW92ZSBpdHMgbmFzbSBpbXBsZW1l bnRhdGlvbi4NCg0KVGhhbmtzDQpMaW1pbmcNCjw+RnJvbTogYWZpc2hAYXBwbGUuY29tPG1haWx0 bzphZmlzaEBhcHBsZS5jb20+IDxtYWlsdG86YWZpc2hAYXBwbGUuY29tPg0KW21haWx0bzphZmlz aEBhcHBsZS5jb20gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+PG1haWx0bzphZmlzaEBhcHBsZS5j b20lMjAlM2NtYWlsdG86YWZpc2hAYXBwbGUuY29tJTNlPl0NClNlbnQ6IFR1ZXNkYXksIE1hcmNo IDUsIDIwMTkgMjo0NCBQTQ0KVG86IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbSA8 bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbSUy MCUzY21haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+Pg0KQ2M6IFpoYW5nLCBTaGVuZ2xlaSA8 c2hlbmdsZWkuemhhbmdAaW50ZWwuY29tPG1haWx0bzpzaGVuZ2xlaS56aGFuZ0BpbnRlbC5jb20+ DQo8bWFpbHRvOnNoZW5nbGVpLnpoYW5nQGludGVsLmNvbT4+OyBlZGsyLWRldmVsLTAxDQo8ZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmcgPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWls dG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmclMjAlM2NtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmc+Pj47IEtpbm5leSwNCk1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20N CjxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tJTBiJTNjbWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4+DQpT dWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCAzLzNdIE1kZVBrZy9CYXNlU3luY2hyb25pemF0aW9u TGliOiBSZW1vdmUNCmlubGluZSBYODYgYXNzZW1ibHkgY29kZQ0KDQoNCg0KDQpPbiBNYXIgNSwg MjAxOSwgYXQgMTozMiBQTSwgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0 bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4NCjxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PiB3 cm90ZToNCg0KQW5kcmV3Og0KQlogMTE2MyBpcyB0byByZW1vdmUgaW5saW5lIFg4NiBhc3NlbWJs eSBjb2RlIGluIEMgc291cmNlIGZpbGUuIEJ1dCwgdGhpcw0KcGF0Y2ggaXMgd3JvbmcuIEkgaGF2 ZSBnYXZlIG15IGNvbW1lbnRzIHRvIHVwZGF0ZSB0aGlzIHBhdGNoLg0KDQoNCldoeSBkbyB3ZSB3 YW50IHRvIHJlbW92ZSBpbmxpbmUgWDg2IGFzc2VtYmx5LiBBcyBJIG1lbnRpb25lZCBpdCB3aWxs IGxlYWQNCnRvIGxhcmdlciBiaW5hcmllcywgc2xvd2VyIGJpbmFyaWVzLCBhbmQgbGVzcyBvcHRp bWl6ZWQgY29kZS4NCg0KRm9yIGV4YW1wbGUgdGFrZSB0aGlzIHNpbXBsZSBpbmxpbmUgYXNzZW1i bHkgZnVuY3Rpb246DQoNClZPSUQNCkVGSUFQSQ0KQ3B1QnJlYWtwb2ludCAoDQogVk9JRA0KICkN CnsNCiBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImludCAkMyIpOw0KfQ0KDQoNClRvZGF5IHdpdGgg Y2xhbmcgTFRPIHR1cm5lZCBvbiBjYWxsaW5nIENwdUJyZWFrcG9pbnQoKSBsb29rcyBsaWtlIHRo aXMgZnJvbQ0KdGhlIGNhbGxlcnMgcG9pbnQgb2Ygdmlldy4NCg0KYS5vdXRbMHgxZmE1XSA8KzY+ OiAgY2MgICAgICAgICAgICAgIGludDMNCg0KDQpCdXQgaWYgd2UgbW92ZSB0aGF0IHRvIE5BU006 DQoNCg0KYS5vdXRbMHgxZmE2XSA8Kzc+OiAgZTggMDcgMDAgMDAgMDAgIGNhbGxsDQoweDFmYjIg ICAgICAgICAgICAgICAgICAgIDsgQ3B1QnJlYWtwb2ludA0KDQoNCnBsdXM6DQphLm91dGBDcHVC cmVha3BvaW50Og0KYS5vdXRbMHgxZmIyXSA8KzA+OiBjYyAgICAgaW50Mw0KYS5vdXRbMHgxZmIz XSA8KzE+OiBjMyAgICAgcmV0bA0KDQoNCkFuZCB0aGVyZSBpcyBhbHNvIGFuIGV4dHJhIHB1c2gg YW5kIHBvcCBvbiB0aGUgc3RhY2suIFRoZSBvdGhlciBpc3N1ZSBpcyB0aGUNCmNhbGwgdG8gdGhl IGZ1bmN0aW9uIHRoYXQgaXMgdW5rbm93biB0byB0aGUgY29tcGlsZXIgd2lsbCBhY3QgbGlrZSBh DQpfUmVhZFdyaXRlQmFycmllciAoWWlrZXMgSSBzZWUgX1JlYWRXcml0ZUJhcnJpZXIgaXMgZGVw cmVjYXRlZCBpbiBWQysrDQoyMDE3KS4gSXMgdGhlIGRlcHJlY2lhdGlvbiBvZiBzb21lIG9mIHRo ZXNlIGludHJpbnNpY3MgaW4gVkMrKyBkcml2aW5nIHRoZQ0KcmVtb3ZhbCBvZiBpbmxpbmUgYXNz ZW1ibHk/IEZvciBHQ0MgaW5saW5lIGFzc2VtYmx5IHdvcmtzIGdyZWF0IGZvciBsb2NhbA0KY29t cGlsZSwgYW5kIGZvciBjbGFuZyBMVE8gaXQgd29ya3MgaW4gZW50aXJlIHByb2dyYW0gb3B0aW1p emF0aW9uLg0KDQpUaGUgTFRPIGJpdGNvZGUgaW5jbHVkZXMgaW5saW5lIGFzc2VtYmx5IGFuZCBj b25zdHJhaW50cyBzbyB0aGF0IHRoZQ0Kb3B0aW1pemVyIGtub3dzIHdoYXQgdG8gZG8gc28gaXQg Y2FuIGdldCBvcHRpbWl6ZWQganVzdCBsaWtlIHRoZSBhYnN0cmFjdA0KYml0Y29kZSBkdXJpbmcg dGhlIExpbmsgVGltZSBPcHRpbWl6YXRpb24uDQoNClRoaXMgaXMgQ3B1QnJlYWtwb2ludCgpOg0K OyBGdW5jdGlvbiBBdHRyczogbm9pbmxpbmUgbm91bndpbmQgb3B0bm9uZSBzc3AgdXd0YWJsZQ0K ZGVmaW5lIHZvaWQgQENwdUJyZWFrcG9pbnQoKSAjMCB7DQogY2FsbCB2b2lkIGFzbSBzaWRlZWZm ZWN0ICJpbnQgJCQzIiwgIn57ZGlyZmxhZ30sfntmcHNyfSx+e2ZsYWdzfSIoKQ0KIzIsICFzcmNs b2MgITMNCiByZXQgdm9pZA0KfQ0KDQoNClRoaXMgaXMgQXNtUmVhZE1zcjY0KCk6DQo7IEZ1bmN0 aW9uIEF0dHJzOiBub2lubGluZSBub3Vud2luZCBvcHRub25lIHNzcCB1d3RhYmxlDQpkZWZpbmUg aTY0IEBBc21SZWFkTXNyNjQoaTMyKSAjMCB7DQogJTIgPSBhbGxvY2EgaTMyLCBhbGlnbiA0DQog JTMgPSBhbGxvY2EgaTY0LCBhbGlnbiA4DQogc3RvcmUgaTMyICUwLCBpMzIqICUyLCBhbGlnbiA0 DQogJTQgPSBsb2FkIGkzMiwgaTMyKiAlMiwgYWxpZ24gNA0KICU1ID0gY2FsbCBpNjQgYXNtIHNp ZGVlZmZlY3QgInJkbXNyIiwNCiI9QSx7Y3h9LH57ZGlyZmxhZ30sfntmcHNyfSx+e2ZsYWdzfSIo aTMyICU0KSAjMiwgIXNyY2xvYyAhNA0KIHN0b3JlIGk2NCAlNSwgaTY0KiAlMywgYWxpZ24gOA0K ICU2ID0gbG9hZCBpNjQsIGk2NCogJTMsIGFsaWduIDgNCiByZXQgaTY0ICU2DQp9DQoNCg0KDQpJ IGFncmVlIGl0IG1ha2Ugc2Vuc2UgdG8gcmVtb3ZlIC5TIGFuZCAuYXNtIGZpbGVzIGFuZCBvbmx5 IGhhdmUgLm5hc20gZmlsZXMuDQoNClRoYW5rcywNCg0KQW5kcmV3IEZpc2gNCg0KUFMgRm9yIHRo ZSBYY29kZSBjbGFuZyBzaW5jZSBpdCBlbWl0cyBmcmFtZSBwb2ludGVycyBieSBkZWZhdWx0IHdl IG5lZWQgdG8NCmFkZCB0aGUgZXh0cmEgNCBieXRlcyB0byBzYXZlIHRoZSBhc3NlbWJseSBmdW5j dGlvbnMgc28gdGhlIHN0YWNrIGNhbiBnZXQNCnVud291bmQuDQoNCmEub3V0YENwdUJyZWFrcG9p bnQ6DQphLm91dFsweDFmOTldIDwrMD46IDU1ICAgICBwdXNobCAgJWVicA0KYS5vdXRbMHgxZjlh XSA8KzE+OiA4OSBlNSAgbW92bCAgICVlc3AsICVlYnANCmEub3V0WzB4MWY5Y10gPCszPjogY2Mg ICAgIGludDMNCmEub3V0WzB4MWY5ZF0gPCs0PjogNWQgICAgIHBvcGwgICAlZWJwDQphLm91dFsw eDFmOWVdIDwrNT46IGMzICAgICByZXRsDQoNCg0KU28gYnJlYWtwb2ludCBnb2VzIGZyb20gMSBi eXRlIHRvIDExIGJ5dGVzIGlmIHdlIGdldCByaWQgb2YgdGhlIGludHJpbnNpY3MuDQoNCg0KVGhl IGNoYW5nZSBpcyB0byByZWR1Y2UgdGhlIGR1cGxpY2F0ZWQgaW1wbGVtZW50YXRpb24uIEl0IHdp bGwgYmUgZ29vZA0Kb24gdGhlIGNvZGUgbWFpbnRhaW4uIFJlY2VudGx5LCBvbmUgcGF0Y2ggaGFz IHRvIHVwZGF0ZSAuYyBhbmQgLm5hc20gYm90aC4NClBsZWFzZSBzZWUNCmh0dHBzOi8vbGlzdHMu MDEub3JnL3BpcGVybWFpbC9lZGsyLWRldmVsLzIwMTktRmVicnVhcnkvMDM3MTY1Lmh0bWwNCjxo dHRwczovL2xpc3RzLjAxLm9yZy9waXBlcm1haWwvZWRrMi1kZXZlbC8yMDE5LUZlYnJ1YXJ5LzAz NzE2NS5odG1sPi4NCkJlc2lkZSB0aGlzIGNoYW5nZSwgSSBwcm9wb3NlIHRvIHJlbW92ZSBhbGwg R0FTIGFzc2VtYmx5IGNvZGUgZm9yIElBMzIgYW5kDQpYNjQgYXJjaC4gQWZ0ZXIgdGhvc2UgY2hh bmdlLCB0aGUgcGF0Y2ggb3duZXIgd2lsbCBjb2xsZWN0IHRoZSBpbXBhY3Qgb2YgdGhlDQppbWFn ZSBzaXplLg0KDQpUaGFua3MNCkxpbWluZw0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXw0KZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCmVkazItZGV2ZWxA bGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCmh0dHBzOi8vbGlz dHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0KDQo=