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.126; helo=mga18.intel.com; envelope-from=jiewen.yao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 5C0BD211CD9B5 for ; Wed, 6 Mar 2019 23:25:14 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Mar 2019 23:25:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,451,1544515200"; d="scan'208,217";a="152812670" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga001.fm.intel.com with ESMTP; 06 Mar 2019 23:25:13 -0800 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 6 Mar 2019 23:25:13 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.163]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.252]) with mapi id 14.03.0415.000; Thu, 7 Mar 2019 15:25:10 +0800 From: "Yao, Jiewen" To: "Gao, Liming" , "afish@apple.com" CC: "Kinney, Michael D" , edk2-devel-01 Thread-Topic: [edk2] [PATCH 3/3] MdePkg/BaseSynchronizationLib: Remove inline X86 assembly code Thread-Index: AQHU05YqeJOPQtHvH0qxU5X+IVYthKX9CLMAgAATyACAAa+GgIAAA6MAgAAOCICAAL09gP//jMcAgACH+aD//4W+gIAACGMAgACHr1A= Date: Thu, 7 Mar 2019 07:25:10 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503F55769F@shsmsx102.ccr.corp.intel.com> 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> In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3FCFF0@SHSMSX104.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWI5NTM3OWQtMmRkZS00YjZhLWJiNTctNTE0NGJlODExYTJmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiMWVqeU9yK2xPUEtUTG1uZWpQWVhpXC96ZEpjZGVjcTJPY01qRUt1cGJJWmdUYzFQU1wvR2tmN1ZPY3hCRFY5QzhDIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] 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: Thu, 07 Mar 2019 07:25:15 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzLg0KDQpJIGFsc28gcmVjb21tZW5kIHRvIHRha2UgYSBsb29rIGF0IE1kZVBrZ1xMaWJy YXJ5XEJhc2VTeW5jaHJvbml6YXRpb25MaWIuDQoNClRoYXQgaXMgYWxzbyBjb21wbGljYXRlZCBh bmQgbm90IHNvIHJlYWRhYmxlIGZvciBtZS4NCg0KQW5kIHdlIGhhdmUgOCBwYXRjaGVzIHRvICpm aXgqIHRoZSByZWFsIHByb2JsZW0gaW4gMjAxOC4NCg0KVGhhbmsgeW91DQpZYW8gSmlld2VuDQoN Cg0KRnJvbTogR2FvLCBMaW1pbmcNClNlbnQ6IFdlZG5lc2RheSwgTWFyY2ggNiwgMjAxOSAxMTox NSBQTQ0KVG86IGFmaXNoQGFwcGxlLmNvbTsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwu Y29tPg0KQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47 IGVkazItZGV2ZWwtMDEgPGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KU3ViamVjdDogUkU6IFtl ZGsyXSBbUEFUQ0ggMy8zXSBNZGVQa2cvQmFzZVN5bmNocm9uaXphdGlvbkxpYjogUmVtb3ZlIGlu bGluZSBYODYgYXNzZW1ibHkgY29kZQ0KDQpUaGFua3MgZm9yIHlvdXIgY2xhcmlmaWNhdGlvbi4g Tm93LCB3ZSB3aWxsIGZvY3VzIG9uIFNldEp1bXAvTG9uZ0p1bXAoKSBmaXJzdC4NCg0KVGhhbmtz DQpMaW1pbmcNCkZyb206IGFmaXNoQGFwcGxlLmNvbTxtYWlsdG86YWZpc2hAYXBwbGUuY29tPiBb bWFpbHRvOmFmaXNoQGFwcGxlLmNvbV0NClNlbnQ6IFdlZG5lc2RheSwgTWFyY2ggNiwgMjAxOSAx MDo0NSBQTQ0KVG86IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amll d2VuLnlhb0BpbnRlbC5jb20+Pg0KQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgR2FvLCBM aW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+ OyBlZGsyLWRldmVsLTAxIDxlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmc+Pg0KU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMy8zXSBNZGVQa2cv QmFzZVN5bmNocm9uaXphdGlvbkxpYjogUmVtb3ZlIGlubGluZSBYODYgYXNzZW1ibHkgY29kZQ0K DQoNCg0KT24gTWFyIDYsIDIwMTksIGF0IDEwOjA5IFBNLCBZYW8sIEppZXdlbiA8amlld2VuLnlh b0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj4gd3JvdGU6DQoNClRoYW5r cyBBbmRyZXcuDQpOb3cgSSAxMDAlIGFncmVlIHdpdGggeW91IC0gSSB0aGluayBpdCBpcyBmaW5l IHRvIHJlc3RyaWN0IG5ldyBDIGlubGluZSBhc3NlbWJsZXIsIG9yIGF0IGxlYXN0IGhhdmUgYSB2 ZXJ5IGhpZ2ggYmFyIHRvIGFkZCBhbnl0aGluZyBuZXcuIEFueSBuZXcgaW5saW5lIGFzc2VtYmxl ciAqc2hvdWxkIGFsc28gYmUgc2ltcGxlIGFuZCBqdXN0IGJlIGEgZnVuY3Rpb24gYWJzdHJhY3Rp bmcgYSBDUFUgb3AtY29kZSogdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIEMuIFRoaXMgaXMgaG93 IHdlIHByZXZlbnQgdGhlIG1haW50ZW5hbmNlIGlzc3VlcyB5b3UgYXJlIHdvcnJ5aW5nIGFib3V0 Lg0KDQpBbmQgSSBhbHNvIGFncmVlIHdpdGggeW91ciBjYXNlLg0KDQpMZXTigJlzIGRpc2N1c3Mg YW5vdGhlciBjYXNlLiBCZWxvdyAyIGZ1bmN0aW9ucyBTZXRKdW1wL0xvbmdKdW1wIGFyZSB1cGRh dGVkIHJlY2VudGx5LCBieSBtZSB1bmZvcnR1bmF0ZWx5Lg0KDQpJdCBpcyB1bmNsZWFyIHRvIG1l IHdoYXQgaXMgdGhlIHNpemUgb3B0aW1pemF0aW9uIHdlIGNhbiBnZXQgYnkgaW5saW5lIFNldEp1 bXAvTG9uZ0p1bXAuDQpCdXQgb2J2aW91c2x5LCBpdCBicmluZ3MgdGhlIG1haW50ZW5hbmNlIGlz c3VlIHRvIG1lLg0KQW5kIEkgZG9u4oCZdCBiZWxpZXZlIGl0IG1lZXRzIHRoZSBjcml0ZXJpYSB5 b3UgbWVudGlvbmVkIGFib3ZlLg0KDQoNCkppZXdlbiwNCg0KSSBhZ3JlZSBpdCBzZWVtcyBsaWtl IGdpdmVuIHRoZSBydWxlcyB3ZSBhZ3JlZSBvbiB0aGlzIGNvZGUgc2hvdWxkIGJlIHdyaXR0ZW4g aW4gTkFTTS4NCg0KVGhhbmtzLA0KDQpBbmRyZXcgRmlzaA0KDQpfZGVjbHNwZWMgKG5ha2VkKQ0K UkVUVVJOU19UV0lDRQ0KVUlOVE4NCkVGSUFQSQ0KU2V0SnVtcCAoDQogIE9VVCAgICAgQkFTRV9M SUJSQVJZX0pVTVBfQlVGRkVSICAqSnVtcEJ1ZmZlcg0KICApDQp7DQogIF9hc20gew0KICAgIHB1 c2ggICAgW2VzcCArIDRdDQogICAgY2FsbCAgICBJbnRlcm5hbEFzc2VydEp1bXBCdWZmZXINCiAg ICBwb3AgICAgIGVjeA0KICAgIHBvcCAgICAgZWN4DQogICAgbW92ICAgICBlZHgsIFtlc3BdDQoN CiAgICB4b3IgICAgIGVheCwgZWF4DQogICAgbW92ICAgICBbZWR4ICsgMjRdLCBlYXggICAgICAg IDsgc2F2ZSAwIHRvIFNTUA0KDQogICAgbW92ICAgICBlYXgsIFtQY2RHZXQzMiAoUGNkQ29udHJv bEZsb3dFbmZvcmNlbWVudFByb3BlcnR5TWFzayldDQogICAgdGVzdCAgICBlYXgsIGVheA0KICAg IGp6ICAgICAgQ2V0RG9uZQ0KICAgIF9lbWl0ICAgICAgMHgwRg0KICAgIF9lbWl0ICAgICAgMHgy MA0KICAgIF9lbWl0ICAgICAgMHhFMCAgICAgICAgICAgICAgICA7IG1vdiAgICAgZWF4LCBjcjQN CiAgICBidCAgICAgIGVheCwgMjMgICAgICAgICAgICAgICAgOyBjaGVjayBpZiBDRVQgaXMgZW5h YmxlZA0KICAgIGpuYyAgICAgQ2V0RG9uZQ0KDQogICAgbW92ICAgICBlYXgsIDENCiAgICBfZW1p dCAgICAgIDB4RjMNCiAgICBfZW1pdCAgICAgIDB4MEYNCiAgICBfZW1pdCAgICAgIDB4QUUNCiAg ICBfZW1pdCAgICAgIDB4RTggICAgICAgICAgICAgICAgOyBJTkNTU1AgRUFYIHRvIHJlYWQgb3Jp Z2luYWwgU1NQDQogICAgX2VtaXQgICAgICAweEYzDQogICAgX2VtaXQgICAgICAweDBGDQogICAg X2VtaXQgICAgICAweDFFDQogICAgX2VtaXQgICAgICAweEM4ICAgICAgICAgICAgICAgIDsgUkVB RFNTUCBFQVgNCiAgICBtb3YgICAgIFtlZHggKyAweDI0XSwgZWF4ICAgICAgOyBzYXZlIFNTUA0K DQpDZXREb25lOg0KDQogICAgbW92ICAgICBbZWR4XSwgZWJ4DQogICAgbW92ICAgICBbZWR4ICsg NF0sIGVzaQ0KICAgIG1vdiAgICAgW2VkeCArIDhdLCBlZGkNCiAgICBtb3YgICAgIFtlZHggKyAx Ml0sIGVicA0KICAgIG1vdiAgICAgW2VkeCArIDE2XSwgZXNwDQogICAgbW92ICAgICBbZWR4ICsg MjBdLCBlY3gNCiAgICB4b3IgICAgIGVheCwgZWF4DQogICAgam1wICAgICBlY3gNCiAgfQ0KfQ0K DQpfX2RlY2xzcGVjIChuYWtlZCkNClZPSUQNCkVGSUFQSQ0KSW50ZXJuYWxMb25nSnVtcCAoDQog IElOICAgICAgQkFTRV9MSUJSQVJZX0pVTVBfQlVGRkVSICAqSnVtcEJ1ZmZlciwNCiAgSU4gICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQogICkNCnsNCiAgX2FzbSB7DQogICAg bW92ICAgICBlYXgsIFtQY2RHZXQzMiAoUGNkQ29udHJvbEZsb3dFbmZvcmNlbWVudFByb3BlcnR5 TWFzayldDQogICAgdGVzdCAgICBlYXgsIGVheA0KICAgIGp6ICAgICAgQ2V0RG9uZQ0KICAgIF9l bWl0ICAgICAgMHgwRg0KICAgIF9lbWl0ICAgICAgMHgyMA0KICAgIF9lbWl0ICAgICAgMHhFMCAg ICAgICAgICAgICAgICA7IG1vdiAgICAgZWF4LCBjcjQNCiAgICBidCAgICAgIGVheCwgMjMgICAg ICAgICAgICAgICAgOyBjaGVjayBpZiBDRVQgaXMgZW5hYmxlZA0KICAgIGpuYyAgICAgQ2V0RG9u ZQ0KDQogICAgbW92ICAgICBlZHgsIFtlc3AgKyA0XSAgICAgICAgIDsgZWR4ID0gSnVtcEJ1ZmZl cg0KICAgIG1vdiAgICAgZWR4LCBbZWR4ICsgMjRdICAgICAgICA7IGVkeCA9IHRhcmdldCBTU1AN CiAgICBfZW1pdCAgICAgIDB4RjMNCiAgICBfZW1pdCAgICAgIDB4MEYNCiAgICBfZW1pdCAgICAg IDB4MUUNCiAgICBfZW1pdCAgICAgIDB4QzggICAgICAgICAgICAgICAgOyBSRUFEU1NQIEVBWA0K ICAgIHN1YiAgICAgZWR4LCBlYXggICAgICAgICAgICAgICA7IGVkeCA9IGRlbHRhDQogICAgbW92 ICAgICBlYXgsIGVkeCAgICAgICAgICAgICAgIDsgZWF4ID0gZGVsdGENCg0KICAgIHNociAgICAg ZWF4LCAyICAgICAgICAgICAgICAgICA7IGVheCA9IGRlbHRhL3NpemVvZihVSU5UMzIpDQogICAg X2VtaXQgICAgICAweEYzDQogICAgX2VtaXQgICAgICAweDBGDQogICAgX2VtaXQgICAgICAweEFF DQogICAgX2VtaXQgICAgICAweEU4ICAgICAgICAgICAgICAgIDsgSU5DU1NQIEVBWA0KDQpDZXRE b25lOg0KDQogICAgcG9wICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgOyBza2lwIHJl dHVybiBhZGRyZXNzDQogICAgcG9wICAgICBlZHggICAgICAgICAgICAgICAgICAgICAgICAgOyBl ZHggPC0gSnVtcEJ1ZmZlcg0KICAgIHBvcCAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAg IDsgZWF4IDwtIFZhbHVlDQogICAgbW92ICAgICBlYngsIFtlZHhdDQogICAgbW92ICAgICBlc2ks IFtlZHggKyA0XQ0KICAgIG1vdiAgICAgZWRpLCBbZWR4ICsgOF0NCiAgICBtb3YgICAgIGVicCwg W2VkeCArIDEyXQ0KICAgIG1vdiAgICAgZXNwLCBbZWR4ICsgMTZdDQogICAgam1wICAgICBkd29y ZCBwdHIgW2VkeCArIDIwXQ0KICB9DQp9DQoNCg0KDQpGcm9tOiBhZmlzaEBhcHBsZS5jb208bWFp bHRvOmFmaXNoQGFwcGxlLmNvbT4gW21haWx0bzphZmlzaEBhcHBsZS5jb21dDQpTZW50OiBXZWRu ZXNkYXksIE1hcmNoIDYsIDIwMTkgOTo1NiBQTQ0KVG86IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFv QGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+Pg0KQ2M6IEtpbm5leSwgTWlj aGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb20+PjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzps aW1pbmcuZ2FvQGludGVsLmNvbT4+OyBlZGsyLWRldmVsLTAxIDxlZGsyLWRldmVsQGxpc3RzLjAx Lm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+Pg0KU3ViamVjdDogUmU6IFtlZGsy XSBbUEFUQ0ggMy8zXSBNZGVQa2cvQmFzZVN5bmNocm9uaXphdGlvbkxpYjogUmVtb3ZlIGlubGlu ZSBYODYgYXNzZW1ibHkgY29kZQ0KDQoNCg0KDQpPbiBNYXIgNiwgMjAxOSwgYXQgOTowNiBQTSwg WWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVs LmNvbT4+IHdyb3RlOg0KDQpISSBNaWtlIGFuZCBBbmRyZXcNClRoZSBwcm9ibGVtIGlzIG1haW50 YWluYWJpbGl0eS4NCg0KSWYgd2UgaGF2ZSBtdWx0aXBsZSBjb3B5IG9mIGltcGxlbWVudGF0aW9u LCBhIGRldmVsb3BlciBuZWVkIHZlcmlmeSBtdWx0aXBsZSBjb3B5IG9mIGltcGxlbWVudGF0aW9u LCBpZiB3ZSBtYWtlIHVwZGF0ZS4gQmVmb3JlIHRoYXQsIGEgZGV2ZWxvcGVyIGhhcyB0byBiZSBh d2FyZSB0aGF0IHRoZXJlIGlzIG11bHRpcGxlIGNvcHkgb2YgaW1wbGVtZW50YXRpb24uIC0gVGhh dCBpbmNyZWFzZXMgdGhlIGNvbXBsZXhpdHkuDQoNCklmIHdlIGhhdmUgZXZlcnl0aGluZywgdGhl cmUgTUFZIGJlIDUgY29weSAtIEFTTSwgTkFTTSwgUywgR0NDIGlubGluZSwgTVMgaW5saW5lLCB0 aGVvcmV0aWNhbGx5Lg0KTm93LCB3ZSByZW1vdmUgQVNNLiBJdCBpcyBnb29kIGZpcnN0IHN0ZXAu DQpCdXQgd2UgbWF5IHN0aWxsIGhhdmUgNCBjb3BpZXMuIEkgc3VnZ2VzdCB3ZSBjb25zaWRlciBk byBtb3JlLg0KDQpKaWV3ZW4sDQoNCkkgdGhpbmsgeW91IGFyZSB0cnlpbmcgZG8gdGhlIHJpZ2h0 IHRoaW5nLCBidXQgYXJlIG9wdGltaXplIHRoZSB3cm9uZyB0aGluZy4NCg0KTW9zdCBvZiB0aGUg R0NDL0NsYW5nIGlubGluZSBhc3NlbWJsZXIgY29kZSBpcyBpbiBHY2NpbmxpbmUuYyBhbmQgc2lu Y2UgdGhhdCBjb2RlIGlzIG1vc3RseSBqdXN0IGFic3RyYWN0aW5nIGFuIHg4NiBpbnN0cnVjdGlv biBhbmQgdGhlIGZ1bmN0aW9ucyBhcmUgdmVyeSBzaW1wbGUgYW5kIHRodXMgaXQgaXMgTk9UIGNv ZGUgdGhhdCBuZWVkcyBvbmdvaW5nIG1haW50ZW5hbmNlLg0KDQpMZXRzIGxvb2sgYXQgdGhlIGhp c3Rvcnk6DQpodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIvY29tbWl0cy9tYXN0ZXIv TWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9YNjQvR2NjSW5saW5lLmMNClRoZSBsYXN0IGxvZ2ljIGZp eCB3YXMgSnVuIDEsIDIwMTANCg0KaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Nv bW1pdHMvbWFzdGVyL01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvSWEzMi9HY2NJbmxpbmUuYw0KT2sg c28gTWlrZSBoYWQgdG8gbWFrZSBhIGZpeCBpbiB0aGlzIGZpbGUgaW4gMjAxNSB0byBtYWtlIHNv bWV0aGluZyBvcHRpb25hbCwgZHVlIHRvIGFuIGVtYmVkZGVkIENQVSBkZWZlYXRpbmcgYW4gaW5z dHJ1Y3Rpb24uIEJ1dCBwcmlvciB0byB0aGF0IGl0IHdhcyAyMDEwLg0KDQpUaGUgc2V0IG9mIHRo aW5ncyB0aGF0IGFyZSBDIGlubGluZSBhc3NlbWJsZXIgd2UgaGF2ZSBzaG91bGQgYmUgc3RhdGlj IGFuZCBub3QgcmVxdWlyZSBtdWNoIG1haW50ZW5hbmNlLiBNb3JlIGNvbXBsZXggY29kZSBzaG91 bGQgYmUgd3JpdHRlbiBpbiBDIGFuZCB1c2UgdGhlIEMgaW5saW5lIGFzc2VtYmxlciBmdW5jdGlv bnMgd2UgYWxyZWFkeSBoYXZlLiBJZiBhbnkgbW9yZSBjb21wbGV4IGFzc2VtYmx5IGNvZGUgaXMg cmVxdWlyZWQgd2Ugc2hvdWxkIGp1c3Qgd3JpdGUgaXQgaW4gTkFTTS4gU28gSSB0aGluayBpdCBp cyBmaW5lIHRvIHJlc3RyaWN0IG5ldyBDIGlubGluZSBhc3NlbWJsZXIsIG9yIGF0IGxlYXN0IGhh dmUgYSB2ZXJ5IGhpZ2ggYmFyIHRvIGFkZCBhbnl0aGluZyBuZXcuIEFueSBuZXcgaW5saW5lIGFz c2VtYmxlciBzaG91bGQgYWxzbyBiZSBzaW1wbGUgYW5kIGp1c3QgYmUgYSBmdW5jdGlvbiBhYnN0 cmFjdGluZyBhIENQVSBvcC1jb2RlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBDLiBUaGlzIGlz IGhvdyB3ZSBwcmV2ZW50IHRoZSBtYWludGVuYW5jZSBpc3N1ZXMgeW91IGFyZSB3b3JyeWluZyBh Ym91dC4NCg0KSSBnYXZlIGFuIGV4YW1wbGUgaW4gdGhpcyAgbWFpbCB0aHJlYWQgb24gaG93IGEg QnJlYWtwb2ludCBnb2VzIGZyb20gYmVpbmcgMSBieXRlIHRvIDExIGJ5dGVzIGlmIHlvdSByZW1v dmUgdGhlIEMgaW5saW5lIGFzc2VtYmxlci4gRm9yIGNsYW5nIHdpdGggTFRPIGVuYWJsZWQgYSBD cHVCcmVha3BvaW50IHdpbGwgYWx3YXlzIGdldCBpbmxpbmVkIGludG8gdGhlIGNhbGxlcnMgY29k ZSBhbmQgaXQgd2lsbCBvbmx5IHRha2UgdGhlIG9uZSBieXRlIGZvciBpbnQgMyBpbnN0cnVjdGlv bi4gSWYgdGhhdCBjb2RlIG1vdmVzIHRvIE5BU00gdGhlbiBpdCBnZXQgcmVwbGFjZXMgd2l0aCBh IDUgYnl0ZSBjYWxsIGluc3RydWN0aW9uIGFuZCBhbiBhY3R1YWwgQyBBQkkgZnVuY3Rpb24gZm9y IHRoZSBicmVha3BvaW50Lg0KDQpWT0lEDQpFRklBUEkNCkNwdUJyZWFrcG9pbnQgKA0KICBWT0lE DQogICkNCnsNCiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbnQgJDMiKTsNCn0NCg0KDQpUb2Rh eSB3aXRoIGNsYW5nIExUTyB0dXJuZWQgb24gY2FsbGluZyBDcHVCcmVha3BvaW50KCkgbG9va3Mg bGlrZSB0aGlzIGZyb20gdGhlIGNhbGxlcnMgcG9pbnQgb2Ygdmlldy4NCg0KYS5vdXRbMHgxZmE1 XSA8KzY+OiAgY2MgICAgICAgICAgICAgIGludDMNCg0KDQpCdXQgaWYgd2UgbW92ZSB0aGF0IHRv IE5BU006DQoNCg0KYS5vdXRbMHgxZmE2XSA8Kzc+OiAgZTggMDcgMDAgMDAgMDAgIGNhbGxsICAw eDFmYjIgICAgICAgICAgICAgICAgICAgIDsgQ3B1QnJlYWtwb2ludA0KDQoNCnBsdXM6DQphLm91 dGBDcHVCcmVha3BvaW50Og0KYS5vdXRbMHgxZjk5XSA8KzA+OiA1NSAgICAgcHVzaGwgICVlYnAN CmEub3V0WzB4MWY5YV0gPCsxPjogODkgZTUgIG1vdmwgICAlZXNwLCAlZWJwDQphLm91dFsweDFm OWNdIDwrMz46IGNjICAgICBpbnQzDQphLm91dFsweDFmOWRdIDwrND46IDVkICAgICBwb3BsICAg JWVicA0KYS5vdXRbMHgxZjllXSA8KzU+OiBjMyAgICAgcmV0bA0KDQoNCkZvciBhbnkgY29tcGls ZXIgdGhhdCBlbWl0cyB0aGUgZnJhbWUgcG9pbnRlciBpZiB5b3UgbW92ZSB0aGUgSU5UIDMgdG8g YXNzZW1ibHkgeW91IG5lZWQgdGhlIGZyYW1lIHBvaW50ZXIgb3IgdGhlIEV4Y2VwdGlvbiBMaWIg aXMgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gcHJpbnQgb3V0IHRoZSBzdGFjayBiYWNrdHJhY2Ug b2YgdGhlIGNvZGUgd2hlbiB5b3UgaGl0IGEgYnJlYWtwb2ludC4gU28gdGhpcyBpcyBob3cgSSBn ZXQgdG8gMTEgdnMuIDEgYnl0ZXMuDQoNCg0KVGhhbmtzLA0KDQpBbmRyZXcgRmlzaA0KDQpQUyBm b3IgY2xhbmcgTFRPIHRoZSBjb21waWxlciBjb21waWxlcyB0byBiaXRjb2RlIGFuZCB0aGF0IGlz IGFuIGFic3RyYWN0ZWQgYXNzZW1ibHkgbGFuZ3VhZ2UuIEF0IGxpbmsgdGltZSBhbGwgdGhhdCBj b2RlIGdldHMgb3B0aW1pemVkIHRvIHRvZ2V0aGVyIGFuZCB0aGVuIHBhc3NlZCB0aHJvdWdoIHRo ZSBDUFUgc3BlY2lmaWMgY29kZSBnZW4uIEZvciBDIGlubGluZSBhc3NlbWJsZXIgdGhlIGFzc2Vt Ymx5IGluc3RydWN0aW9ucyBlbmQgdXAgaW4gdGhlIGJpdGNvZGUgd2l0aCBsb3RzIG9mIGluZm9y bWF0aW9uIGFib3V0IHRoZSBjb25zdHJhaW50cy4gVGhhdCBpcyB3aHkgdGhlc2UgR2NjSW5saW5l LmMgZnVuY3Rpb25zIGFsbW9zdCBhbHdheXMgZ2V0IGlubGluZWQgd2l0aCBjbGFuZyBhbmQgTFRP Lg0KDQpUaGUgQ3B1QnJlYWtwb2ludCgpIGZ1bmN0aW9uIGxvb2tzIGxpa2UgdGhpcyBpbiBiaXRj b2RlLCBidXQgdGhlIGZ1bmN0aW9uIGNhbGwgZ2V0cyBvcHRpbWl6ZWQgYXdheSBieSBMVE8gaW4g dGhlIGNvZGUgZ2VuLg0KDQo7IEZ1bmN0aW9uIEF0dHJzOiBub2lubGluZSBub3Vud2luZCBvcHRu b25lIHNzcCB1d3RhYmxlDQpkZWZpbmUgdm9pZCBAQ3B1QnJlYWtwb2ludCgpICMwIHsNCiAgY2Fs bCB2b2lkIGFzbSBzaWRlZWZmZWN0ICJpbnQgJCQzIiwgIn57ZGlyZmxhZ30sfntmcHNyfSx+e2Zs YWdzfSIoKSAjMiwgIXNyY2xvYyAhMw0KICByZXQgdm9pZA0KfQ0KDQoNCkV2ZW4gc29tZXRoaW5n IG1vcmUgY29tcGxleCBsaWtlIEFzbVJlYWRNc3I2NCgpIGNhbiBnZXQgaW5saW5lZCwgYnV0IGl0 IGNvbnRhaW5zIGEgbG90IG1vcmUgaW5mbyBhYm91dCB0aGUgY29uc3RyYWludHM6DQoNCjsgRnVu Y3Rpb24gQXR0cnM6IG5vaW5saW5lIG5vdW53aW5kIG9wdG5vbmUgc3NwIHV3dGFibGUNCmRlZmlu ZSBpNjQgQEFzbVJlYWRNc3I2NChpMzIpICMwIHsNCiAgJTIgPSBhbGxvY2EgaTMyLCBhbGlnbiA0 DQogICUzID0gYWxsb2NhIGk2NCwgYWxpZ24gOA0KICBzdG9yZSBpMzIgJTAsIGkzMiogJTIsIGFs aWduIDQNCiAgJTQgPSBsb2FkIGkzMiwgaTMyKiAlMiwgYWxpZ24gNA0KICAlNSA9IGNhbGwgaTY0 IGFzbSBzaWRlZWZmZWN0ICJyZG1zciIsICI9QSx7Y3h9LH57ZGlyZmxhZ30sfntmcHNyfSx+e2Zs YWdzfSIoaTMyICU0KSAjMiwgIXNyY2xvYyAhNA0KICBzdG9yZSBpNjQgJTUsIGk2NCogJTMsIGFs aWduIDgNCiAgJTYgPSBsb2FkIGk2NCwgaTY0KiAlMywgYWxpZ24gOA0KICByZXQgaTY0ICU2DQp9 DQoNCg0KVGhlIGFsbG9jYSwgc3RvcmUsIGxvYWQsIGV0YyBhcmUgdGhlIHNhbWUgYml0Y29kZSBp bnN0cnVjdGlvbnMgeW91IHdvdWxkIHNlZSB3aXRoIEMgY29kZS4NCg0KDQpBIHJlY2VudGx5IGNh c2UgdGhhdCBTZXRKdW1wL0xvbmdKdW1wLCBJIHVwZGF0ZWQgdGhlIE5BU00gZmlsZSBmb3IgYm90 aCBJQTMyIGFuZCBYNjQuDQoNCkxhdGVyLCB0byBteSBzdXJwcmlzZSwgb25seSBYNjQgdmVyc2lv biBOQVNNIHdvcmtzLCBhbmQgSUEzMiB2ZXJzaW9uIE5BU00gZG9lcyBub3Qgd29yay4NClRoZW4g SSBub3RpY2UgdGhhdCB0aGVyZSBpcyBhIGRpZmZlcmVudCBjb3B5IGlmIElBMzIgSnVtcC5jIE1T IGlubGluZSAtIEkgYWxzbyBuZWVkIHVwZGF0ZS4gVGhhdCBpcyBmcnVzdHJhdGVkLg0KDQpJIHRo aW5rIHRoZXJlIHNob3VsZCBiZSBhIGJhbGFuY2UgYmV0d2VlbiBvcHRpbWl6YXRpb24gYW5kIGNv ZGUgcmVhZGFiaWxpdHkvbWFpbnRhaW5hYmlsaXR5Lg0KDQpEbyB3ZSBoYXZlIGRhdGEgb24gd2hh dCBzaXplIGJlbmVmaXQgd2UgY2FuIGdldCB3aXRoIHRoZXNlIGlubGluZSBmdW5jdGlvbiwgZnJv bSB3aG9sZSBpbWFnZSBsZXZlbD8NCldlIGNhbiBkbyBldmFsdWF0aW9uIGF0IGZ1bmN0aW9uIGxl dmVsLCBjYXNlIGJ5IGNhc2UuDQpJZiB3ZSBzZWUgYSBodWdlIHNpemUgYmVuZWZpdCwgSSBhZ3Jl ZSB0byBrZWVwIHRoaXMgZnVuY3Rpb24uDQpJZiB3ZSBzZWUgbm8gc2l6ZSBiZW5lZml0LCBJIHN1 Z2dlc3Qgd2UgZG8gdGhlIGNsZWFudXAgZm9yIHRoaXMgZnVuY3Rpb24uDQoNCg0KVGhhbmsgeW91 DQpZYW8gSmlld2VuDQoNCg0KDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBl ZGsyLWRldmVsIFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVo YWxmIE9mDQpBbmRyZXcgRmlzaCB2aWEgZWRrMi1kZXZlbA0KU2VudDogV2VkbmVzZGF5LCBNYXJj aCA2LCAyMDE5IDU6MzEgUE0NClRvOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4NCkNjOiBlZGsy LWRldmVsLTAxIDxlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0 cy4wMS5vcmc+PjsgR2FvLCBMaW1pbmcNCjxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGlt aW5nLmdhb0BpbnRlbC5jb20+Pg0KU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMy8zXSBNZGVQ a2cvQmFzZVN5bmNocm9uaXphdGlvbkxpYjogUmVtb3ZlDQppbmxpbmUgWDg2IGFzc2VtYmx5IGNv ZGUNCg0KDQoNCg0KT24gTWFyIDYsIDIwMTksIGF0IDQ6NDEgUE0sIEtpbm5leSwgTWljaGFlbCBE DQo8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50 ZWwuY29tPj4gd3JvdGU6DQoNCg0KTGltaW5nLA0KDQpUaGF0IGRvZXMgbm90IHdvcmsgZWl0aGVy IGJlY2F1c2UgaW5saW5lIGFzc2VtYmx5IHVzZXMgY29tcGlsZXIgc3BlY2lmaWMNCnN5bnRheC4N Cg0KDQpQbGVhc2UgdXBkYXRlIHdpdGggdGhlIHNwZWNpZmljIGxpc3Qgb2YgZnVuY3Rpb25zIHRo YXQgeW91IHRoaW5rIHRoZSBpbmxpbmUNCnNob3VsZCBiZSByZW1vdmVkIHRvIGltcHJvdmUgbWFp bnRlbmFuY2Ugd2l0aCBubyBpbXBhY3RzIGluIHNpemUvcGVyZi4NCg0KDQoNCk1pa2UsDQoNCkl0 IGlzIGVhc3kgdG8gZmluZCB0aGUgZ2NjL2NsYW5nIGlubGluZSBhc3NlbWJsZXIsIGp1c3QgYGdp dCBncmVwICJfX2FzbV9fDQpfX3ZvbGF0aWxlX18iYA0KDQpUaGUgbWFpbiBmaWxlcyBhcmU6DQpo dHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIvYmxvYi9tYXN0ZXIvTWRlUGtnL0xpYnJh cnkvQmFzZUlvTGliDQpJbnRyaW5zaWMvSW9MaWJHY2MuYw0KaHR0cHM6Ly9naXRodWIuY29tL3Rp YW5vY29yZS9lZGsyL2Jsb2IvbWFzdGVyL01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvWA0KNjQvR2Nj SW5saW5lLmMNCmh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi9ibG9iL21hc3Rlci9N ZGVQa2cvTGlicmFyeS9CYXNlTGliL0kNCmEzMi9HY2NJbmxpbmUuYw0KaHR0cHM6Ly9naXRodWIu Y29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvbWFzdGVyL01kZVBrZy9MaWJyYXJ5L0Jhc2VTeW5jDQpo cm9uaXphdGlvbkxpYi9JYTMyL0djY0lubGluZS5jDQpodHRwczovL2dpdGh1Yi5jb20vdGlhbm9j b3JlL2VkazIvYmxvYi9tYXN0ZXIvTWRlUGtnL0xpYnJhcnkvQmFzZVN5bmMNCmhyb25pemF0aW9u TGliL1g2NC9HY2NJbmxpbmUuYw0KDQpUaGlzIGlzIHJlYWxseSBqdXN0IGNvbXBpbGVyIG9wdGlt aXplciBjb250cm9sLg0KTGlicmFyeS9CYXNlU3luY2hyb25pemF0aW9uTGliL1N5bmNocm9uaXph dGlvbkdjYy5jOjIxOiNkZWZpbmUNCl9SZWFkV3JpdGVCYXJyaWVyKCkgZG8geyBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoIiI6IDogOiAibWVtb3J5Iik7IH0gd2hpbGUoMCkNCg0KTG9va3MgbGlrZSB0 aGlzIGlzIHdvcmtpbmcgYXJvdW5kIHRoZSBhbGlnbm1lbnQgQVNTRVJUIGluIEJhc2VJb0xpYklu dHJpbnNpYy4NCk92bWZQa2cvUWVtdVZpZGVvRHhlL1VuYWxpZ25lZElvR2NjLmM6NDM6ICBfX2Fz bV9fIF9fdm9sYXRpbGVfXw0KKCAib3V0bCAlMCwgJTEiIDogOiAiYSIgKFZhbHVlKSwgImQiICgo VUlOVDE2KVBvcnQpICk7DQpPdm1mUGtnL1FlbXVWaWRlb0R4ZS9VbmFsaWduZWRJb0djYy5jOjY3 OiAgX19hc21fXyBfX3ZvbGF0aWxlX18NCiggImlubCAlMSwgJTAiIDogIj1hIiAoRGF0YSkgOiAi ZCIgKChVSU5UMTYpUG9ydCkgKTsNCg0KSXQgc2VlbXMgbGlrZSB3ZSBoYXZlIGEgcmVhc29uYWJs ZSBzZXQgYW5kIHNob3VsZCBub3QgdXNlIHRoZSBpbmxpbmUNCmFzc2VtYmx5IGZvciBhbnkgbW9y ZSBjb21wbGV4IGNvZGUuDQoNClRoYW5rcywNCg0KQW5kcmV3IEZpc2gNCg0KDQpUaGUgaXNzdWUg eW91IHBvaW50ZWQgdG8gd2FzIGFyb3VuZCBTZXRKdW1wKCkvTG9uZ0p1bXAoKS4gIENhbiB3ZSBs aW1pdA0KdGhpcyBCWiB0byBvbmx5IHRob3NlIDIgZnVuY3Rpb25zPw0KDQoNCk1pa2UNCiAgPD4N CkZyb206IEdhbywgTGltaW5nDQpTZW50OiBXZWRuZXNkYXksIE1hcmNoIDYsIDIwMTkgNDoyOCBQ TQ0KVG86IGFmaXNoQGFwcGxlLmNvbTxtYWlsdG86YWZpc2hAYXBwbGUuY29tPg0KQ2M6IFpoYW5n LCBTaGVuZ2xlaSA8c2hlbmdsZWkuemhhbmdAaW50ZWwuY29tPG1haWx0bzpzaGVuZ2xlaS56aGFu Z0BpbnRlbC5jb20+PjsgZWRrMi1kZXZlbC0wMQ0KPGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1h aWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4+OyBLaW5uZXksIE1pY2hhZWwgRA0KPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+ DQoNClN1YmplY3Q6IFJFOiBbZWRrMl0gW1BBVENIIDMvM10gTWRlUGtnL0Jhc2VTeW5jaHJvbml6 YXRpb25MaWI6IFJlbW92ZQ0KaW5saW5lIFg4NiBhc3NlbWJseSBjb2RlDQoNCg0KQW5kcmV3Og0K IEkgd2FudCB0byBrZWVwIG9ubHkgb25lIGltcGxlbWVudGF0aW9uLiBJZiBpbmxpbmUgYXNzZW1i bHkgYyBzb3VyY2UgaXMNCnByZWZlcnJlZCwgSSBzdWdnZXN0IHRvIHJlbW92ZSBpdHMgbmFzbSBp bXBsZW1lbnRhdGlvbi4NCg0KDQpUaGFua3MNCkxpbWluZw0KPD5Gcm9tOiBhZmlzaEBhcHBsZS5j b208bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT4gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+DQpbbWFp bHRvOmFmaXNoQGFwcGxlLmNvbSA8bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT48bWFpbHRvOmFmaXNo QGFwcGxlLmNvbSUyMCUzY21haWx0bzphZmlzaEBhcHBsZS5jb20lM2U+XQ0KDQpTZW50OiBUdWVz ZGF5LCBNYXJjaCA1LCAyMDE5IDI6NDQgUE0NClRvOiBHYW8sIExpbWluZyA8bGltaW5nLmdhb0Bp bnRlbC5jb20gPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0Bp bnRlbC5jb20lMjAlM2NtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+Pj4NCkNjOiBaaGFuZywg U2hlbmdsZWkgPHNoZW5nbGVpLnpoYW5nQGludGVsLmNvbTxtYWlsdG86c2hlbmdsZWkuemhhbmdA aW50ZWwuY29tPg0KPG1haWx0bzpzaGVuZ2xlaS56aGFuZ0BpbnRlbC5jb20+PjsgZWRrMi1kZXZl bC0wMQ0KPGVkazItZGV2ZWxAbGlzdHMuMDEub3JnIDxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnJTIwJTNjbWFpbHRvOmVkazItZGV2 ZWxAbGlzdHMuMDEub3JnPj4+OyBLaW5uZXksDQpNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tDQo8bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNo YWVsLmQua2lubmV5QGludGVsLmNvbSUwYiUzY21haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVs LmNvbT4+Pg0KDQpTdWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCAzLzNdIE1kZVBrZy9CYXNlU3lu Y2hyb25pemF0aW9uTGliOiBSZW1vdmUNCmlubGluZSBYODYgYXNzZW1ibHkgY29kZQ0KDQoNCg0K DQoNCk9uIE1hciA1LCAyMDE5LCBhdCAxOjMyIFBNLCBHYW8sIExpbWluZyA8bGltaW5nLmdhb0Bp bnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPg0KPG1haWx0bzpsaW1pbmcuZ2Fv QGludGVsLmNvbT4+IHdyb3RlOg0KDQoNCkFuZHJldzoNCkJaIDExNjMgaXMgdG8gcmVtb3ZlIGlu bGluZSBYODYgYXNzZW1ibHkgY29kZSBpbiBDIHNvdXJjZSBmaWxlLiBCdXQsIHRoaXMNCnBhdGNo IGlzIHdyb25nLiBJIGhhdmUgZ2F2ZSBteSBjb21tZW50cyB0byB1cGRhdGUgdGhpcyBwYXRjaC4N Cg0KDQoNCldoeSBkbyB3ZSB3YW50IHRvIHJlbW92ZSBpbmxpbmUgWDg2IGFzc2VtYmx5LiBBcyBJ IG1lbnRpb25lZCBpdCB3aWxsIGxlYWQNCnRvIGxhcmdlciBiaW5hcmllcywgc2xvd2VyIGJpbmFy aWVzLCBhbmQgbGVzcyBvcHRpbWl6ZWQgY29kZS4NCg0KDQpGb3IgZXhhbXBsZSB0YWtlIHRoaXMg c2ltcGxlIGlubGluZSBhc3NlbWJseSBmdW5jdGlvbjoNCg0KVk9JRA0KRUZJQVBJDQpDcHVCcmVh a3BvaW50ICgNCiBWT0lEDQogKQ0Kew0KIF9fYXNtX18gX192b2xhdGlsZV9fICgiaW50ICQzIik7 DQp9DQoNCg0KVG9kYXkgd2l0aCBjbGFuZyBMVE8gdHVybmVkIG9uIGNhbGxpbmcgQ3B1QnJlYWtw b2ludCgpIGxvb2tzIGxpa2UgdGhpcyBmcm9tDQp0aGUgY2FsbGVycyBwb2ludCBvZiB2aWV3Lg0K DQoNCmEub3V0WzB4MWZhNV0gPCs2PjogIGNjICAgICAgICAgICAgICBpbnQzDQoNCg0KQnV0IGlm IHdlIG1vdmUgdGhhdCB0byBOQVNNOg0KDQoNCmEub3V0WzB4MWZhNl0gPCs3PjogIGU4IDA3IDAw IDAwIDAwICBjYWxsbA0KMHgxZmIyICAgICAgICAgICAgICAgICAgICA7IENwdUJyZWFrcG9pbnQN Cg0KDQoNCnBsdXM6DQphLm91dGBDcHVCcmVha3BvaW50Og0KYS5vdXRbMHgxZmIyXSA8KzA+OiBj YyAgICAgaW50Mw0KYS5vdXRbMHgxZmIzXSA8KzE+OiBjMyAgICAgcmV0bA0KDQoNCkFuZCB0aGVy ZSBpcyBhbHNvIGFuIGV4dHJhIHB1c2ggYW5kIHBvcCBvbiB0aGUgc3RhY2suIFRoZSBvdGhlciBp c3N1ZSBpcyB0aGUNCmNhbGwgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgaXMgdW5rbm93biB0byB0aGUg Y29tcGlsZXIgd2lsbCBhY3QgbGlrZSBhDQpfUmVhZFdyaXRlQmFycmllciAoWWlrZXMgSSBzZWUg X1JlYWRXcml0ZUJhcnJpZXIgaXMgZGVwcmVjYXRlZCBpbiBWQysrDQoyMDE3KS4gSXMgdGhlIGRl cHJlY2lhdGlvbiBvZiBzb21lIG9mIHRoZXNlIGludHJpbnNpY3MgaW4gVkMrKyBkcml2aW5nIHRo ZQ0KcmVtb3ZhbCBvZiBpbmxpbmUgYXNzZW1ibHk/IEZvciBHQ0MgaW5saW5lIGFzc2VtYmx5IHdv cmtzIGdyZWF0IGZvciBsb2NhbA0KY29tcGlsZSwgYW5kIGZvciBjbGFuZyBMVE8gaXQgd29ya3Mg aW4gZW50aXJlIHByb2dyYW0gb3B0aW1pemF0aW9uLg0KDQoNClRoZSBMVE8gYml0Y29kZSBpbmNs dWRlcyBpbmxpbmUgYXNzZW1ibHkgYW5kIGNvbnN0cmFpbnRzIHNvIHRoYXQgdGhlDQpvcHRpbWl6 ZXIga25vd3Mgd2hhdCB0byBkbyBzbyBpdCBjYW4gZ2V0IG9wdGltaXplZCBqdXN0IGxpa2UgdGhl IGFic3RyYWN0DQpiaXRjb2RlIGR1cmluZyB0aGUgTGluayBUaW1lIE9wdGltaXphdGlvbi4NCg0K DQpUaGlzIGlzIENwdUJyZWFrcG9pbnQoKToNCjsgRnVuY3Rpb24gQXR0cnM6IG5vaW5saW5lIG5v dW53aW5kIG9wdG5vbmUgc3NwIHV3dGFibGUNCmRlZmluZSB2b2lkIEBDcHVCcmVha3BvaW50KCkg IzAgew0KIGNhbGwgdm9pZCBhc20gc2lkZWVmZmVjdCAiaW50ICQkMyIsICJ+e2RpcmZsYWd9LH57 ZnBzcn0sfntmbGFnc30iKCkNCiMyLCAhc3JjbG9jICEzDQoNCiByZXQgdm9pZA0KfQ0KDQoNClRo aXMgaXMgQXNtUmVhZE1zcjY0KCk6DQo7IEZ1bmN0aW9uIEF0dHJzOiBub2lubGluZSBub3Vud2lu ZCBvcHRub25lIHNzcCB1d3RhYmxlDQpkZWZpbmUgaTY0IEBBc21SZWFkTXNyNjQoaTMyKSAjMCB7 DQogJTIgPSBhbGxvY2EgaTMyLCBhbGlnbiA0DQogJTMgPSBhbGxvY2EgaTY0LCBhbGlnbiA4DQog c3RvcmUgaTMyICUwLCBpMzIqICUyLCBhbGlnbiA0DQogJTQgPSBsb2FkIGkzMiwgaTMyKiAlMiwg YWxpZ24gNA0KICU1ID0gY2FsbCBpNjQgYXNtIHNpZGVlZmZlY3QgInJkbXNyIiwNCiI9QSx7Y3h9 LH57ZGlyZmxhZ30sfntmcHNyfSx+e2ZsYWdzfSIoaTMyICU0KSAjMiwgIXNyY2xvYyAhNA0KDQog c3RvcmUgaTY0ICU1LCBpNjQqICUzLCBhbGlnbiA4DQogJTYgPSBsb2FkIGk2NCwgaTY0KiAlMywg YWxpZ24gOA0KIHJldCBpNjQgJTYNCn0NCg0KDQoNCkkgYWdyZWUgaXQgbWFrZSBzZW5zZSB0byBy ZW1vdmUgLlMgYW5kIC5hc20gZmlsZXMgYW5kIG9ubHkgaGF2ZSAubmFzbSBmaWxlcy4NCg0KVGhh bmtzLA0KDQpBbmRyZXcgRmlzaA0KDQpQUyBGb3IgdGhlIFhjb2RlIGNsYW5nIHNpbmNlIGl0IGVt aXRzIGZyYW1lIHBvaW50ZXJzIGJ5IGRlZmF1bHQgd2UgbmVlZCB0bw0KYWRkIHRoZSBleHRyYSA0 IGJ5dGVzIHRvIHNhdmUgdGhlIGFzc2VtYmx5IGZ1bmN0aW9ucyBzbyB0aGUgc3RhY2sgY2FuIGdl dA0KdW53b3VuZC4NCg0KDQphLm91dGBDcHVCcmVha3BvaW50Og0KYS5vdXRbMHgxZjk5XSA8KzA+ OiA1NSAgICAgcHVzaGwgICVlYnANCmEub3V0WzB4MWY5YV0gPCsxPjogODkgZTUgIG1vdmwgICAl ZXNwLCAlZWJwDQphLm91dFsweDFmOWNdIDwrMz46IGNjICAgICBpbnQzDQphLm91dFsweDFmOWRd IDwrND46IDVkICAgICBwb3BsICAgJWVicA0KYS5vdXRbMHgxZjllXSA8KzU+OiBjMyAgICAgcmV0 bA0KDQoNClNvIGJyZWFrcG9pbnQgZ29lcyBmcm9tIDEgYnl0ZSB0byAxMSBieXRlcyBpZiB3ZSBn ZXQgcmlkIG9mIHRoZSBpbnRyaW5zaWNzLg0KDQoNClRoZSBjaGFuZ2UgaXMgdG8gcmVkdWNlIHRo ZSBkdXBsaWNhdGVkIGltcGxlbWVudGF0aW9uLiBJdCB3aWxsIGJlIGdvb2QNCm9uIHRoZSBjb2Rl IG1haW50YWluLiBSZWNlbnRseSwgb25lIHBhdGNoIGhhcyB0byB1cGRhdGUgLmMgYW5kIC5uYXNt IGJvdGguDQpQbGVhc2Ugc2VlDQpodHRwczovL2xpc3RzLjAxLm9yZy9waXBlcm1haWwvZWRrMi1k ZXZlbC8yMDE5LUZlYnJ1YXJ5LzAzNzE2NS5odG1sDQo8aHR0cHM6Ly9saXN0cy4wMS5vcmcvcGlw ZXJtYWlsL2VkazItZGV2ZWwvMjAxOS1GZWJydWFyeS8wMzcxNjUuaHRtbD4uDQpCZXNpZGUgdGhp cyBjaGFuZ2UsIEkgcHJvcG9zZSB0byByZW1vdmUgYWxsIEdBUyBhc3NlbWJseSBjb2RlIGZvciBJ QTMyIGFuZA0KWDY0IGFyY2guIEFmdGVyIHRob3NlIGNoYW5nZSwgdGhlIHBhdGNoIG93bmVyIHdp bGwgY29sbGVjdCB0aGUgaW1wYWN0IG9mIHRoZQ0KaW1hZ2Ugc2l6ZS4NCg0KDQpUaGFua3MNCkxp bWluZw0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K ZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzpl ZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlz dGluZm8vZWRrMi1kZXZlbA0KDQo=