From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 3/9] drm/i915: gvt: Introduce the basic architecture of GVT-g Date: Wed, 18 May 2016 12:22:50 +0100 Message-ID: <573C508A.90009@linux.intel.com> References: <1463473149-5876-1-git-send-email-zhi.a.wang@intel.com> <1463473149-5876-4-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 511B46E0A4 for ; Wed, 18 May 2016 11:22:57 +0000 (UTC) In-Reply-To: <1463473149-5876-4-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Zhi Wang , intel-gfx@lists.freedesktop.org, joonas.lahtinen@linux.intel.com, chris@chris-wilson.co.uk, kevin.tian@intel.com, zhiyuan.lv@intel.com List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE3LzA1LzE2IDA5OjE5LCBaaGkgV2FuZyB3cm90ZToKPiBUaGlzIHBhdGNoIGludHJvZHVj ZXMgdGhlIHZlcnkgYmFzaWMgZnJhbWV3b3JrIG9mIEdWVC1nIGRldmljZSBtb2RlbCwKPiBpbmNs dWRlcyBiYXNpYyBwcm90b3R5cGVzLCBkZWZpbml0aW9ucywgaW5pdGlhbGl6YXRpb24uCj4KPiB2 NToKPiBUYWtlIFR2cnRrbydzIGNvbW1lbnRzOgo+IC0gRml4IHRoZSBtaXNzcGVsbGVkIHdvcmRz IGluIEtjb25mZwo+IC0gTGV0IGZ1bmN0aW9ucyB0YWtlIGRybV9pOTE1X3ByaXZhdGUgKiBpbnN0 ZWFkIG9mIHN0cnVjdCBkcm1fZGV2aWNlICoKPiAtIFJlbW92ZSByZWR1bmRhbnQgcHJpbnRzL2xv Y2FsIHZhcmlibGUgaW5pdGlhbGl6YXRpb24KPgo+IHYzOgo+IFRha2UgSm9vbmFzJyBjb21tZW50 czoKPiAtIENoYW5nZSBmaWxlIG5hbWUgaTkxNV9ndnQuKiB0byBpbnRlbF9ndnQuKgo+IC0gTW92 ZSBHVlQga2VybmVsIHBhcmFtZXRlciBpbnRvIGludGVsX2d2dC5jCj4gLSBSZW1vdmUgcmVkdW5k YW50IGRlYnVnIG1hY3Jvcwo+IC0gQ2hhbmdlIGVycm9yIGhhbmRsaW5nIHN0eWxlCj4gLSBBZGQg aW50cm9kdWN0aW9ucyBmb3Igc29tZSBzdHViIGZ1bmN0aW9ucwo+IC0gSW50cm9kdWNlIGRybS9p OTE1X2d2dC5oLgo+Cj4gVGFrZSBLZXZpbidzIGNvbW1lbnRzOgo+IC0gTW92ZSBHVlQtZyBob3N0 L2d1ZXN0IGNoZWNrIGludG8gaW50ZWxfdmd0X2JhbGxvb24gaW4gaTkxNV9nZW1fZ3R0LmMKPgo+ IHYyOgo+IC0gSW50cm9kdWNlIGk5MTVfZ3Z0LmMuCj4gSXQncyBuZWNlc3NhcnkgdG8gaW50cm9k dWNlIHRoZSBzdHVicyBiZXR3ZWVuIGk5MTUgZHJpdmVyIGFuZCBHVlQtZyBob3N0LAo+IGFzIEdW VC1nIGNvbXBvbmVudHMgaXMgY29uZmlndXJhYmxlIGluIGtlcm5lbCBjb25maWcuIFdoZW4gZGlz YWJsZWQsIHRoZQo+IHN0dWJzIGhlcmUgZG8gbm90aGluZy4KPgo+IFRha2UgSm9vbmFzJyBjb21t ZW50czoKPiAtIFJlcGxhY2UgYm9vbGVhbiByZXR1cm4gdmFsdWUgd2l0aCBpbnQuCj4gLSBSZXBs YWNlIGN1c3RvbWl6ZWQgaW5mby93YXJuL2RlYnVnIG1hY3JvcyB3aXRoIERSTSBtYWNyb3MuCj4g LSBEb2N1bWVudCBhbGwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBpOTE1Lgo+IC0gUmVtb3Zl IGVtcHR5IGFuZCB1bnVzZWQgZnVuY3Rpb25zLgo+IC0gUmVwbGFjZSBtYWdpYyBudW1iZXIgd2l0 aCBtYXJjb3MuCj4gLSBTZXQgR1ZULWcgaW4ga2VybmVsIGNvbmZpZyB0byAibiIgYnkgZGVmYXVs dC4KPgo+IFNpZ25lZC1vZmYtYnk6IFpoaSBXYW5nIDx6aGkuYS53YW5nQGludGVsLmNvbT4KPiAt LS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcgICAgICAgICB8ICAxNSArKysKPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICB8ICAgNSArCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUgICAgfCAgIDUgKwo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L2RlYnVnLmggICAgIHwgIDM2ICsrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2d2dC5jICAgICAgIHwgMjA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmggICAgICAgfCAgODQgKysrKysr KysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaCB8ICAzOCAr KysrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmggICAgICAgfCAgNDkgKysr KysrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jICAgICAgfCAgMTcgKyst Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgfCAgMTIgKysKPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d2dC5jICAgICB8ICA5OCArKysrKysrKysrKysrKysr Kwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Z0LmggICAgIHwgIDQ5ICsrKysrKysr Kwo+ICAgaW5jbHVkZS9kcm0vaTkxNV9ndnQuaCAgICAgICAgICAgICAgIHwgIDMxICsrKysrKwo+ ICAgMTMgZmlsZXMgY2hhbmdlZCwgNjQwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RlYnVnLmgKPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaHlwZXJjYWxsLmgKPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmgKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndnQuYwo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d2dC5oCj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vaTkxNV9ndnQuaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCj4g aW5kZXggMjlhMzJiMS4uZmViNTZlZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+IEBAIC01Nyw2 ICs1NywyMSBAQCBjb25maWcgRFJNX0k5MTVfVVNFUlBUUgo+Cj4gICAJICBJZiBpbiBkb3VidCwg c2F5ICJZIi4KPgo+ICtjb25maWcgRFJNX0k5MTVfR1ZUCj4gKyAgICAgICAgYm9vbCAiSW50ZWwg R1ZULWcgaG9zdCBkcml2ZXIiCj4gKyAgICAgICAgZGVwZW5kcyBvbiBEUk1fSTkxNQo+ICsgICAg ICAgIGRlZmF1bHQgbgo+ICsgICAgICAgIGhlbHAKPiArICAgICAgICAgIEVuYWJsaW5nIEdWVC1n IG1lZGlhdGVkIGdyYXBoaWNzIHBhc3MtdGhyb3VnaCB0ZWNobmlxdWUgZm9yIEludGVsIGk5MTUK PiArICAgICAgICAgIGJhc2VkIGludGVncmF0ZWQgZ3JhcGhpY3MgY2FyZC4gV2l0aCBHVlQtZywg aXQncyBwb3NzaWJsZSB0byBoYXZlIG9uZQo+ICsgICAgICAgICAgaW50ZWdyYXRlZCBpOTE1IGRl dmljZSBzaGFyZWQgYnkgbXVsdGlwbGUgVk1zLiBQZXJmb3JtYW5jZSBjcml0aWNhbAo+ICsgICAg ICAgICAgb3BlcmF0aW9ucyBzdWNoIGFzIGFwZXJ0dXJlIGFjY2Vzc2VzIGFuZCByaW5nIGJ1ZmZl ciBvcGVyYXRpb25zCj4gKyAgICAgICAgICBhcmUgcGFzc2VkLXRocm91Z2ggdG8gVk0sIHdpdGgg YSBtaW5pbWFsIHNldCBvZiBjb25mbGljdGluZyByZXNvdXJjZXMKCk1heWJlIEkgYW0gY29uZnVz ZWQgYnV0IHRvIG1lIHRoaXMgaXMgbm90IGNsZWFyLiBJZiB3ZSBoYXZlIG11bHRpcGxlIFZNcyAK c2hhcmluZyB0aGUgR1BVIHdoZXJlIHBlcmZvcm1hbmNlIGNyaXRpY2FsIG9wZXJhdGlvbnMgYXJl IHBhc3NlZC10aHJvdWdoIAp0byB0aGUgKlZNKiA/IEFyZW4ndCB0aGV5IHBhc3NlZC10aHJvdWdo IHRvIHRoZSBHUFUvaG9zdC9oeXBlcnZpc29yIG9yIApzb21ldGhpbmcgcmF0aGVyIHRoYW4gdGhl IFZNPwoKPiArICAgICAgICAgIChlLmcuIGRpc3BsYXkgc2V0dGluZ3MpIG1lZGlhdGVkIGJ5IEdW VCBob3N0IGRyaXZlci4gVGhlIGJlbmVmaXQgb2YgR1ZUCj4gKyAgICAgICAgICBpcyBvbiBib3Ro IHRoZSBwZXJmb3JtYW5jZSwgZ2l2ZW4gdGhhdCBlYWNoIFZNIGNvdWxkIGRpcmVjdGx5IG9wZXJh dGUKPiArICAgICAgICAgIGl0cyBhcGVydHVyZSBzcGFjZSBhbmQgc3VibWl0IGNvbW1hbmRzIGxp a2UgcnVubmluZyBvbiBuYXRpdmUsIGFuZAo+ICsgICAgICAgICAgdGhlIGZlYXR1cmUgY29tcGxl dGVuZXNzLCBnaXZlbiB0aGF0IGEgdHJ1ZSBHRU4gaGFyZHdhcmUgaXMgZXhwb3NlZC4KPiArCj4g ICBtZW51ICJkcm0vaTkxNSBEZWJ1Z2dpbmciCj4gICBkZXBlbmRzIG9uIERSTV9JOTE1Cj4gICBk ZXBlbmRzIG9uIEVYUEVSVAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggNjNjNGQyYi4uZTQ4 MTQ1YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTEwMyw2ICsxMDMsMTEgQEAgaTkx NS15ICs9IGk5MTVfdmdwdS5vCj4gICAjIGxlZ2FjeSBob3Jyb3JzCj4gICBpOTE1LXkgKz0gaTkx NV9kbWEubwo+Cj4gK2lmZXEgKCQoQ09ORklHX0RSTV9JOTE1X0dWVCkseSkKPiAraTkxNS15ICs9 IGludGVsX2d2dC5vCj4gK2luY2x1ZGUgJChzcmMpL2d2dC9NYWtlZmlsZQo+ICtlbmRpZgo+ICsK PiAgIG9iai0kKENPTkZJR19EUk1fSTkxNSkgICs9IGk5MTUubwo+Cj4gICBDRkxBR1NfaTkxNV90 cmFjZV9wb2ludHMubyA6PSAtSSQoc3JjKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmQwZjIxYTYKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCj4gQEAgLTAsMCAr MSw1IEBACj4gK0dWVF9ESVIgOj0gZ3Z0Cj4gK0dWVF9TT1VSQ0UgOj0gZ3Z0Lm8KPiArCj4gK2Nj ZmxhZ3MteSAgICAgICAgICAgICAgICAgICAgICArPSAtSSQoc3JjKSAtSSQoc3JjKS8kKEdWVF9E SVIpIC1XYWxsCj4gK2k5MTUteQkJCSAgICAgICArPSAkKGFkZHByZWZpeCAkKEdWVF9ESVIpLywg JChHVlRfU09VUkNFKSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2Rl YnVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNWIwNjdkMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaAo+IEBAIC0wLDAgKzEsMzYgQEAKPiArLyoK PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsg KiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZu ZGVmIF9fR1ZUX0RFQlVHX0hfXwo+ICsjZGVmaW5lIF9fR1ZUX0RFQlVHX0hfXwo+ICsKPiArI2Rl ZmluZSBndnRfaW5mbyhmbXQsIGFyZ3MuLi4pIFwKPiArCURSTV9JTkZPKCJndnQ6ICJmbXQsICMj YXJncykKPiArCj4gKyNkZWZpbmUgZ3Z0X2VycihmbXQsIGFyZ3MuLi4pIFwKPiArCURSTV9FUlJP UigiZ3Z0OiAiZm10LCAjI2FyZ3MpCj4gKwo+ICsjZGVmaW5lIGd2dF9kYmdfY29yZShmbXQsIGFy Z3MuLi4pIFwKPiArCURSTV9ERUJVR19EUklWRVIoImd2dDogY29yZTogImZtdCwgIyNhcmdzKQo+ ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMC4uYWE0MDM1Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPiBAQCAtMCwwICsxLDIwNSBAQAo+ICsvKgo+ICsgKiBD b3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MgSU4gVEhFCj4gKyAqIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8eGVuL3hlbi5oPgo+ICsjaW5jbHVkZSA8bGludXgv a3RocmVhZC5oPgo+ICsKPiArI2luY2x1ZGUgImd2dC5oIgo+ICsKPiArc3RydWN0IGludGVsX2d2 dF9ob3N0IGludGVsX2d2dF9ob3N0Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBz dXBwb3J0ZWRfaHlwZXJ2aXNvcnNbXSA9IHsKPiArCVtJTlRFTF9HVlRfSFlQRVJWSVNPUl9YRU5d ID0gIlhFTiIsCj4gKwlbSU5URUxfR1ZUX0hZUEVSVklTT1JfS1ZNXSA9ICJLVk0iLAo+ICt9Owo+ ICsKPiArI2RlZmluZSBNQih4KSAoeCAqIDEwMjRVTEwgKiAxMDI0VUxMKQo+ICsjZGVmaW5lIEdC KHgpICh4ICogTUIoMTAyNCkpCj4gKwo+ICsvKgo+ICsgKiBUaGUgbGF5b3V0IG9mIEJBUjAgaW4g QkRXOgo+ICsgKiB8PCAtIE1NSU8gMk1CIC0+fDwtIFJlc2VydmVkIDZNQiAtPnw8LSBNQVggR1RU IDhNQi0+fAo+ICsgKgo+ICsgKiBHVFQgb2Zmc2V0IGluIEJBUjAgc3RhcnRzIGZyb20gOE1CIHRv IDE2TUIsIGFuZAo+ICsgKiBXaGF0ZXZlciBHVFQgc2l6ZSBpcyBjb25maWd1cmVkIGluIEJJT1Ms Cj4gKyAqIHRoZSBzaXplIG9mIEJBUjAgaXMgYWx3YXlzIDE2TUIuIFRoZSBhY3R1YWwgY29uZmln dXJlZAo+ICsgKiBHVFQgc2l6ZSBjYW4gYmUgZm91bmQgaW4gR01DSF9DVFJMLgo+ICsgKi8KPiAr c3RhdGljIHN0cnVjdCBpbnRlbF9ndnRfZGV2aWNlX2luZm8gYnJvYWR3ZWxsX2RldmljZV9pbmZv ID0gewo+ICsJLm1heF9ndHRfZ21fc3ogPSBHQig0KSwgLyogNEdCICovCj4gKwkuZ3R0X3N0YXJ0 X29mZnNldCA9IE1CKDgpLCAvKiA4TUIgKi8KPiArCS5tYXhfZ3R0X3NpemUgPSBNQig4KSwgLyog OE1CICovCj4gKwkuZ3R0X2VudHJ5X3NpemUgPSA4LAo+ICsJLmd0dF9lbnRyeV9zaXplX3NoaWZ0 ID0gMywKPiArCS5nbWFkcl9ieXRlc19pbl9jbWQgPSA4LAo+ICsJLm1taW9fc2l6ZSA9IE1CKDIp LCAvKiAyTUIgKi8KPiArCS5tbWlvX2JhciA9IDAsIC8qIEJBUiAwICovCj4gKwkubWF4X3N1cHBv cnRfdmdwdSA9IDgsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGluaXRfZ3Z0X2hvc3Qodm9pZCkK PiArewo+ICsJaWYgKFdBUk4oaW50ZWxfZ3Z0X2hvc3QuaW5pdGlhbGl6ZWQsCj4gKwkJCSJJbnRl bCBHVlQgaG9zdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkXG4iKSkKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCj4gKwkvKiBYZW4gRE9NIFUgKi8KPiArCWlmICh4ZW5fZG9tYWluKCkgJiYg IXhlbl9pbml0aWFsX2RvbWFpbigpKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmICh4 ZW5faW5pdGlhbF9kb21haW4oKSkgewo+ICsJCS8qIFhlbiBEb20wICovCj4gKwkJaW50ZWxfZ3Z0 X2hvc3QubXB0ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoCj4gKwkJCQlzeW1ib2xfZ2V0KHhl bmd0X21wdCksICJ4ZW5ndCIpOwo+ICsJCWludGVsX2d2dF9ob3N0Lmh5cGVydmlzb3JfdHlwZSA9 IElOVEVMX0dWVF9IWVBFUlZJU09SX1hFTjsKPiArCX0gZWxzZSB7Cj4gKwkJLyogbm90IGluIFhl bi4gVHJ5IEtWTUdUICovCj4gKwkJaW50ZWxfZ3Z0X2hvc3QubXB0ID0gdHJ5X3RoZW5fcmVxdWVz dF9tb2R1bGUoCj4gKwkJCQlzeW1ib2xfZ2V0KGt2bWd0X21wdCksICJrdm0iKTsKPiArCQlpbnRl bF9ndnRfaG9zdC5oeXBlcnZpc29yX3R5cGUgPSBJTlRFTF9HVlRfSFlQRVJWSVNPUl9LVk07Cj4g Kwl9Cj4gKwo+ICsJaWYgKCFpbnRlbF9ndnRfaG9zdC5tcHQpIHsKPiArCQlndnRfZXJyKCJGYWls IHRvIGxvYWQgYW55IE1QVCBtb2R1bGVzLlxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJaWYgKCFpbnRlbF9ndnRfaHlwZXJ2aXNvcl9kZXRlY3RfaG9zdCgpKQo+ICsJCXJl dHVybiAtRU5PREVWOwo+ICsKPiArCWd2dF9pbmZvKCJSdW5uaW5nIHdpdGggaHlwZXJ2aXNvciAl cyBpbiBob3N0IG1vZGVcbiIsCj4gKwkJCXN1cHBvcnRlZF9oeXBlcnZpc29yc1tpbnRlbF9ndnRf aG9zdC5oeXBlcnZpc29yX3R5cGVdKTsKPiArCj4gKwlpZHJfaW5pdCgmaW50ZWxfZ3Z0X2hvc3Qu Z3Z0X2lkcik7Cj4gKwltdXRleF9pbml0KCZpbnRlbF9ndnRfaG9zdC5ndnRfaWRyX2xvY2spOwo+ ICsKPiArCWludGVsX2d2dF9ob3N0LmluaXRpYWxpemVkID0gdHJ1ZTsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGluaXRfZGV2aWNlX2luZm8oc3RydWN0IGludGVsX2d2dCAq Z3Z0KQo+ICt7Cj4gKwlpZiAoSVNfQlJPQURXRUxMKGd2dC0+ZGV2X3ByaXYpKQo+ICsJCWd2dC0+ ZGV2aWNlX2luZm8gPSAmYnJvYWR3ZWxsX2RldmljZV9pbmZvOwo+ICsJZWxzZQo+ICsJCXJldHVy biAtRU5PREVWOwo+ICsKCk15IHByZXZpb3VzIGNvbW1lbnQgd2FzIHRoYXQgaW50ZWxfZ3Z0X2Ny ZWF0ZV9kZXZpY2UgKHdoaWNoIGNhbGxzIHRoaXMpIApjYW4gb25seSBnZXQgY2FsbGVkIGlmIGlz X3N1cHBvcnRlZF9kZXZpY2Ugc3VjY2VlZGVkLiBBbmQgdGhlIGxhdHRlciBoYXMgCnRoZSBzYW1l IElTX0JST0FEV0VMTCBjaGVjay4KClNvIHRvIG1lIGVycm9yIGhhbmRsaW5nIGluIGluaXRfZGV2 aWNlX2luZm8gbG9va3MgcmVkdW5kYW50LgoKSSB3b3VsZCBwcm9iYWJseSBqdXN0IHJlbW92ZSB0 aGlzIGZ1bmN0aW9uIGFuZCBpbml0aWFsaXplIGRldmljZSBpbmZvIApkaXJlY3RseSBpbiBpbnRl bF9ndnRfY3JlYXRlX2RldmljZSB3aGljaCB3b3VsZCBzaW1wbGlmeSBlcnJvciBoYW5kbGluZyAK dGhlcmUgYW5kIHlvdSBwcm9iYWJseSB3b3VsZCBlbmQgdXAgd2l0aCBvbmUgZGVidWcgbWVzc2Fn ZSBpbiB0aGVyZSBhcyAKd2VsbCB0aGVuLgoKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBmcmVlX2d2dF9kZXZpY2Uoc3RydWN0IGludGVsX2d2dCAqZ3Z0KQo+ICt7Cj4gKwlt dXRleF9sb2NrKCZpbnRlbF9ndnRfaG9zdC5ndnRfaWRyX2xvY2spOwo+ICsJaWRyX3JlbW92ZSgm aW50ZWxfZ3Z0X2hvc3QuZ3Z0X2lkciwgZ3Z0LT5pZCk7Cj4gKwltdXRleF91bmxvY2soJmludGVs X2d2dF9ob3N0Lmd2dF9pZHJfbG9jayk7Cj4gKwo+ICsJdmZyZWUoZ3Z0KTsKPiArfQo+ICsKPiAr c3RhdGljIHN0cnVjdCBpbnRlbF9ndnQgKmFsbG9jX2d2dF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3Z0ICpndnQ7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCWd2dCA9IHZ6YWxsb2Moc2l6ZW9mKCpndnQpKTsKPiArCWlmICghZ3Z0 KQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCW11dGV4X2xvY2soJmludGVs X2d2dF9ob3N0Lmd2dF9pZHJfbG9jayk7Cj4gKwlyZXQgPSBpZHJfYWxsb2MoJmludGVsX2d2dF9o b3N0Lmd2dF9pZHIsIGd2dCwgMCwgMCwgR0ZQX0tFUk5FTCk7Cj4gKwltdXRleF91bmxvY2soJmlu dGVsX2d2dF9ob3N0Lmd2dF9pZHJfbG9jayk7Cj4gKwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290 byBlcnI7Cj4gKwo+ICsJZ3Z0LT5pZCA9IHJldDsKPiArCW11dGV4X2luaXQoJmd2dC0+bG9jayk7 Cj4gKwlndnQtPmRldl9wcml2ID0gZGV2X3ByaXY7Cj4gKwlpZHJfaW5pdCgmZ3Z0LT52Z3B1X2lk cik7Cj4gKwo+ICsJcmV0dXJuIGd2dDsKPiArZXJyOgo+ICsJZnJlZV9ndnRfZGV2aWNlKGd2dCk7 Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfZ3Z0 X2Rlc3Ryb3lfZGV2aWNlIC0gZGVzdHJveSBhIEdWVCBkZXZpY2UKPiArICogQGd2dF9kZXZpY2U6 IGd2dCBkZXZpY2UKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgdGhlIGRy aXZlciB1bmxvYWRpbmcgc3RhZ2UsIHRvIGRlc3Ryb3kgYQo+ICsgKiBHVlQgZGV2aWNlIGFuZCBm cmVlIHRoZSByZWxhdGVkIHJlc291cmNlcy4KPiArICoKPiArICovCj4gK3ZvaWQgaW50ZWxfZ3Z0 X2Rlc3Ryb3lfZGV2aWNlKHZvaWQgKmRldmljZSkKCllvdSBzYWlkIHRoaXMgaXMgYSB2b2lkICog YmVjYXVzZSB5b3UgZG8gbm90IHdhbnQgdG8gaW5jbHVkZSBndnQvZ3Z0LmggLSAKYnV0IHRoaXMg aXMgZ3Z0LmMgc28gd2h5IGRvZXMgbm90IGl0IG5vdCBtYWtlIHNlbnNlIHRvIGluY2x1ZGUgaXQ/ CgpPciB5b3UgbWVhbiB5b3UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGl0IGZyb20gdGhlIGNhbGxl cnMgb2YgCmludGVsX2d2dF9kZXN0cm95X2RldmljZT8KCkkgdGhpbmsgaXQgaXMgcmVhbGx5IG5v dCBpZGVhbCB0byBoYXZlIHZvaWQgKiBpbiB0aGUgQVBJIGhlcmUgYW5kIGFsc28gCmluIHRoZSBk YXRhIHN0cnVjdHVyZXMgZWxzZXdoZXJlLiBBcmUgeW91IHN1cmUgaGVhZGVycyBjYW5ub3QgYmUg CnJlLW9yZ2FuaXplZCBzbyB0aGF0IHRoZSBjb3JyZWN0IHR5cGVzIGFyZSB1c2VkPyBNYXliZSBh IGZldyBmb3J3YXJkIApkZWNsYXJhdGlvbnMgYXQgdGhlIHJpZ2h0IHBsYWNlcz8KCj4gK3sKPiAr CXN0cnVjdCBpbnRlbF9ndnQgKmd2dCA9IChzdHJ1Y3QgaW50ZWxfZ3Z0ICopZGV2aWNlOwo+ICsK PiArCWZyZWVfZ3Z0X2RldmljZShndnQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfZ3Z0 X2NyZWF0ZV9kZXZpY2UgLSBjcmVhdGUgYSBHVlQgZGV2aWNlCj4gKyAqIEBkZXZfcHJpdjogZHJt IGk5MTUgcHJpdmF0ZSBkYXRhCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0 IHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwgdG8gY3JlYXRlIGEKPiArICogR1ZUIGRldmljZSBh bmQgaW5pdGlhbGl6ZSBuZWNlc3NhcnkgR1ZUIGNvbXBvbmVudHMgZm9yIGl0Lgo+ICsgKgo+ICsg KiBSZXR1cm5zOgo+ICsgKiBwb2ludGVyIHRvIHRoZSBpbnRlbCBndnQgZGV2aWNlIHN0cnVjdHVy ZSwgZXJyb3IgcG9pbnRlciBpZiBmYWlsZWQuCj4gKyAqLwo+ICt2b2lkICppbnRlbF9ndnRfY3Jl YXRlX2RldmljZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0 cnVjdCBpbnRlbF9ndnQgKmd2dDsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFpbnRlbF9ndnRf aG9zdC5pbml0aWFsaXplZCkgewo+ICsJCXJldCA9IGluaXRfZ3Z0X2hvc3QoKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJfQo+ICsKPiArCWd2dF9kYmdfY29y ZSgiY3JlYXRlIG5ldyBndnQgZGV2aWNlXG4iKTsKPiArCj4gKwlndnQgPSBhbGxvY19ndnRfZGV2 aWNlKGRldl9wcml2KTsKPiArCWlmIChJU19FUlIoZ3Z0KSkgewo+ICsJCXJldCA9IFBUUl9FUlIo Z3Z0KTsKPiArCQlnb3RvIG91dF9lcnI7Cj4gKwl9Cj4gKwo+ICsJZ3Z0X2RiZ19jb3JlKCJpbml0 IGd2dCBkZXZpY2UsIGlkICVkXG4iLCBndnQtPmlkKTsKPiArCj4gKwlyZXQgPSBpbml0X2Rldmlj ZV9pbmZvKGd2dCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X2ZyZWVfZ3Z0X2RldmljZTsK PiArCj4gKwlndnRfZGJnX2NvcmUoImd2dCBkZXZpY2UgY3JlYXRpb24gZG9uZSwgaWQgJWRcbiIs IGd2dC0+aWQpOwo+ICsKPiArCXJldHVybiBndnQ7Cj4gKwo+ICtvdXRfZnJlZV9ndnRfZGV2aWNl Ogo+ICsJZnJlZV9ndnRfZGV2aWNlKGd2dCk7Cj4gK291dF9lcnI6Cj4gKwlyZXR1cm4gRVJSX1BU UihyZXQpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMC4uOWU2ZTIyYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiBAQCAtMCwwICsxLDg0IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4g KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPiArICogT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfR1ZU X0hfCj4gKyNkZWZpbmUgX0dWVF9IXwo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNp bmNsdWRlICJpOTE1X3ZncHUuaCIKPiArCj4gKyNpbmNsdWRlICJkZWJ1Zy5oIgo+ICsjaW5jbHVk ZSAiaHlwZXJjYWxsLmgiCj4gKwo+ICsjZGVmaW5lIEdWVF9NQVhfVkdQVSA4Cj4gKyNkZWZpbmUg R1ZUX0FMSUdOKGFkZHIsIHNpemUpICgoYWRkcikgJiAofigodHlwZW9mKGFkZHIpKShzaXplKSAt IDEpKSkKPiArCj4gK2VudW0gewo+ICsJSU5URUxfR1ZUX0hZUEVSVklTT1JfWEVOID0gMCwKPiAr CUlOVEVMX0dWVF9IWVBFUlZJU09SX0tWTSwKPiArfTsKPiArCj4gK3N0cnVjdCBpbnRlbF9ndnRf aG9zdCB7Cj4gKwlib29sIGluaXRpYWxpemVkOwo+ICsJaW50IGh5cGVydmlzb3JfdHlwZTsKPiAr CXN0cnVjdCBtdXRleCBndnRfaWRyX2xvY2s7Cj4gKwlzdHJ1Y3QgaWRyIGd2dF9pZHI7Cj4gKwlz dHJ1Y3QgaW50ZWxfZ3Z0X21wdCAqbXB0Owo+ICt9Owo+ICsKPiArZXh0ZXJuIHN0cnVjdCBpbnRl bF9ndnRfaG9zdCBpbnRlbF9ndnRfaG9zdDsKPiArCj4gKy8qIERlc2NyaWJlIHRoZSBsaW1pdGF0 aW9uIG9mIEhXLiovCj4gK3N0cnVjdCBpbnRlbF9ndnRfZGV2aWNlX2luZm8gewo+ICsJdTY0IG1h eF9ndHRfZ21fc3o7Cj4gKwl1MzIgZ3R0X3N0YXJ0X29mZnNldDsKPiArCXUzMiBndHRfZW5kX29m ZnNldDsKPiArCXUzMiBtYXhfZ3R0X3NpemU7Cj4gKwl1MzIgZ3R0X2VudHJ5X3NpemU7Cj4gKwl1 MzIgZ3R0X2VudHJ5X3NpemVfc2hpZnQ7Cj4gKwl1MzIgZ21hZHJfYnl0ZXNfaW5fY21kOwo+ICsJ dTMyIG1taW9fc2l6ZTsKPiArCXUzMiBtbWlvX2JhcjsKPiArCXUzMiBtYXhfc3VwcG9ydF92Z3B1 Owo+ICt9Owo+ICsKPiArc3RydWN0IGludGVsX3ZncHUgewo+ICsJc3RydWN0IGludGVsX2d2dCAq Z3Z0Owo+ICsJaW50IGlkOwo+ICsJaW50IHZtX2lkOwo+ICsJYm9vbCB3YXJuX3VudHJhY2s7Cj4g K307Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfZ3Z0IHsKPiArCXN0cnVjdCBtdXRleCBsb2NrOwo+ICsJ aW50IGlkOwo+ICsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiArCXN0 cnVjdCBpZHIgdmdwdV9pZHI7Cj4gKwo+ICsJc3RydWN0IGludGVsX2d2dF9kZXZpY2VfaW5mbyAq ZGV2aWNlX2luZm87Cj4gK307Cj4gKwo+ICsjaW5jbHVkZSAibXB0LmgiCj4gKwo+ICsjZW5kaWYK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2h5cGVyY2FsbC5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2h5cGVyY2FsbC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi4yNTRkZjhiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaAo+IEBAIC0wLDAgKzEsMzggQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVm IF9HVlRfSFlQRVJDQUxMX0hfCj4gKyNkZWZpbmUgX0dWVF9IWVBFUkNBTExfSF8KPiArCj4gKy8q Cj4gKyAqIFNwZWNpZmljIEdWVC1nIE1QVCBtb2R1bGVzIGZ1bmN0aW9uIGNvbGxlY3Rpb25zLiBD dXJyZW50bHkgR1ZULWcgc3VwcG9ydHMKPiArICogYm90aCBYZW4gYW5kIEtWTSBieSBwcm92aWRp bmcgZGVkaWNhdGVkIGh5cGVydmlzb3ItcmVsYXRlZCBNUFQgbW9kdWxlcy4KPiArICovCj4gK3N0 cnVjdCBpbnRlbF9ndnRfbXB0IHsKPiArCWludCAoKmRldGVjdF9ob3N0KSh2b2lkKTsKPiArfTsK PiArCj4gK2V4dGVybiBzdHJ1Y3QgaW50ZWxfZ3Z0X21wdCB4ZW5ndF9tcHQ7Cj4gK2V4dGVybiBz dHJ1Y3QgaW50ZWxfZ3Z0X21wdCBrdm1ndF9tcHQ7Cj4gKwo+ICsjZW5kaWYgLyogX0dWVF9IWVBF UkNBTExfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21wdC5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21wdC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi43ODNmNGY4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9tcHQuaAo+IEBAIC0wLDAgKzEsNDkgQEAKPiArLyoKPiArICogQ29w eXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9HVlRf TVBUX0hfCj4gKyNkZWZpbmUgX0dWVF9NUFRfSF8KPiArCj4gKy8qKgo+ICsgKiBET0M6IEh5cGVy dmlzb3IgU2VydmljZSBBUElzIGZvciBHVlQtZyBDb3JlIExvZ2ljCj4gKyAqCj4gKyAqIFRoaXMg aXMgdGhlIGdsdWUgbGF5ZXIgYmV0d2VlbiBzcGVjaWZpYyBoeXBlcnZpc29yIE1QVCBtb2R1bGVz IGFuZCBHVlQtZyBjb3JlCj4gKyAqIGxvZ2ljLiBFYWNoIGtpbmQgb2YgaHlwZXJ2aXNvciBNUFQg bW9kdWxlIHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbgo+ICsgKiBjYWxsYmFja3Mg dmlhIGd2dF9rZXJuZWxfZG0gYW5kIHdpbGwgYmUgYXR0YWNoZWQgdG8gR1ZUIGhvc3Qgd2hlbiBk cml2ZXIKPiArICogbG9hZGluZy4gR1ZULWcgY29yZSBsb2dpYyB3aWxsIGNhbGwgdGhlc2UgQVBJ cyB0byByZXF1ZXN0IHNwZWNpZmljIHNlcnZpY2VzCj4gKyAqIGZyb20gaHlwZXJ2aXNvci4KPiAr ICovCj4gKwo+ICsvKioKPiArICogaW50ZWxfZ3Z0X2h5cGVydmlzb3JfZGV0ZWN0X2hvc3QgLSBj aGVjayBpZiBHVlQtZyBpcyBydW5uaW5nIHdpdGhpbgo+ICsgKiBoeXBlcnZpc29yIGhvc3QvcHJp dmlsZ2VkIGRvbWFpbgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBaZXJvIG9uIHN1Y2Nlc3Ms IC1FTk9ERVYgaWYgY3VycmVudCBrZXJuZWwgaXMgcnVubmluZyBpbnNpZGUgYSBWTQo+ICsgKi8K PiArc3RhdGljIGlubGluZSBpbnQgaW50ZWxfZ3Z0X2h5cGVydmlzb3JfZGV0ZWN0X2hvc3Qodm9p ZCkKPiArewo+ICsJcmV0dXJuIGludGVsX2d2dF9ob3N0Lm1wdC0+ZGV0ZWN0X2hvc3QoKTsKPiAr fQo+ICsKPiArI2VuZGlmIC8qIF9HVlRfTVBUX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5j Cj4gaW5kZXggNTQ3MTAwZi4uNTAyZDdjZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RtYS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+ IEBAIC0zNSw2ICszNSw3IEBACj4gICAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gICAjaW5jbHVk ZSA8ZHJtL2k5MTVfZHJtLmg+Cj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUg ImludGVsX2d2dC5oIgo+ICAgI2luY2x1ZGUgImk5MTVfdmdwdS5oIgo+ICAgI2luY2x1ZGUgImk5 MTVfdHJhY2UuaCIKPiAgICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiBAQCAtMTI0NSwxOCArMTI0 NiwyMiBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICAgCQlnb3RvIG91dF9nZ3R0Owo+ICAgCX0KPgo+ICsJcmV0ID0g aW50ZWxfZ3Z0X2luaXQoZGV2X3ByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91dF9nZ3R0 Owo+ICsKPiAgIAkvKiBXQVJOSU5HOiBBcHBhcmVudGx5IHdlIG11c3Qga2ljayBmYmRldiBkcml2 ZXJzIGJlZm9yZSB2Z2Fjb24sCj4gICAJICogb3RoZXJ3aXNlIHRoZSB2Z2EgZmJkZXYgZHJpdmVy IGZhbGxzIG92ZXIuICovCj4gICAJcmV0ID0gaTkxNV9raWNrX291dF9maXJtd2FyZV9mYihkZXZf cHJpdik7Cj4gICAJaWYgKHJldCkgewo+ICAgCQlEUk1fRVJST1IoImZhaWxlZCB0byByZW1vdmUg Y29uZmxpY3RpbmcgZnJhbWVidWZmZXIgZHJpdmVyc1xuIik7Cj4gLQkJZ290byBvdXRfZ2d0dDsK PiArCQlnb3RvIG91dF9ndnQ7Cj4gICAJfQo+Cj4gICAJcmV0ID0gaTkxNV9raWNrX291dF92Z2Fj b24oZGV2X3ByaXYpOwo+ICAgCWlmIChyZXQpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g cmVtb3ZlIGNvbmZsaWN0aW5nIFZHQSBjb25zb2xlXG4iKTsKPiAtCQlnb3RvIG91dF9nZ3R0Owo+ ICsJCWdvdG8gb3V0X2d2dDsKPiAgIAl9Cj4KPiAgIAlwY2lfc2V0X21hc3RlcihkZXYtPnBkZXYp Owo+IEBAIC0xMjY3LDcgKzEyNzIsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHco c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCQlpZiAocmV0KSB7Cj4gICAJ CQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXQgRE1BIG1hc2tcbiIpOwo+Cj4gLQkJCWdvdG8gb3V0 X2dndHQ7Cj4gKwkJCWdvdG8gb3V0X2d2dDsKPiAgIAkJfQo+ICAgCX0KPgo+IEBAIC0xMjk3LDcg KzEzMDIsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCQkJCSAgICAgYXBlcnR1cmVfc2l6ZSk7Cj4gICAJaWYg KCFnZ3R0LT5tYXBwYWJsZSkgewo+ICAgCQlyZXQgPSAtRUlPOwo+IC0JCWdvdG8gb3V0X2dndHQ7 Cj4gKwkJZ290byBvdXRfZ3Z0Owo+ICAgCX0KPgo+ICAgCWdndHQtPm10cnIgPSBhcmNoX3BoeXNf d2NfYWRkKGdndHQtPm1hcHBhYmxlX2Jhc2UsCj4gQEAgLTEzMzAsNiArMTMzNSw4IEBAIHN0YXRp YyBpbnQgaTkxNV9kcml2ZXJfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4KPiAgIAlyZXR1cm4gMDsKPgo+ICtvdXRfZ3Z0Ogo+ICsJaW50ZWxfZ3Z0X2NsZWFudXAo ZGV2X3ByaXYpOwo+ICAgb3V0X2dndHQ6Cj4gICAJaTkxNV9nZ3R0X2NsZWFudXBfaHcoZGV2KTsK Pgo+IEBAIC0xNDg4LDYgKzE0OTUsOCBAQCBpbnQgaTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4KPiAgIAlpbnRlbF9mYmRldl9maW5pKGRldik7Cj4KPiArCWludGVs X2d2dF9jbGVhbnVwKGRldl9wcml2KTsKPiArCj4gICAJcmV0ID0gaTkxNV9nZW1fc3VzcGVuZChk ZXYpOwo+ICAgCWlmIChyZXQpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaWRsZSBoYXJk d2FyZTogJWRcbiIsIHJldCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggNzJmMGIw Mi4uN2QwYjhkMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0xNzAzLDYgKzE3 MDMsMTAgQEAgc3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgewo+ICAgCXUzMiBod193aGl0ZWxpc3Rf Y291bnRbSTkxNV9OVU1fRU5HSU5FU107Cj4gICB9Owo+Cj4gK3N0cnVjdCBpOTE1X2d2dCB7Cj4g Kwl2b2lkICpndnQ7Cj4gK307Cj4gKwo+ICAgc3RydWN0IGk5MTVfdmlydHVhbF9ncHUgewo+ICAg CWJvb2wgYWN0aXZlOwo+ICAgfTsKPiBAQCAtMTc0Miw2ICsxNzQ2LDggQEAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgewo+Cj4gICAJc3RydWN0IGk5MTVfdmlydHVhbF9ncHUgdmdwdTsKPgo+ICsJ c3RydWN0IGk5MTVfZ3Z0IGd2dDsKPiArCj4gICAJc3RydWN0IGludGVsX2d1YyBndWM7Cj4KPiAg IAlzdHJ1Y3QgaW50ZWxfY3NyIGNzcjsKPiBAQCAtMjg2OCw2ICsyODc0LDEyIEBAIHZvaWQgaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXRfX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gICB1NjQgaW50ZWxfdW5jb3JlX2VkcmFtX3NpemUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKPgo+ICAgdm9pZCBhc3NlcnRfZm9yY2V3YWtlc19pbmFjdGl2 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICsKPiArc3RhdGljIGlubGlu ZSBib29sIGludGVsX2d2dF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICt7Cj4gKwlyZXR1cm4gZGV2X3ByaXYtPmd2dC5ndnQgPyB0cnVlIDogZmFsc2U7Cj4gK30K PiArCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgaW50ZWxfdmdwdV9hY3RpdmUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgewo+ICAgCXJldHVybiBkZXZfcHJpdi0+dmdwdS5h Y3RpdmU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d2dC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Z0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLjgxNWNjOWYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3Z0LmMKPiBAQCAtMCwwICsxLDk4IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4g KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPiArICogT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImk5 MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ndnQuaCIKPiArCj4gKy8qKgo+ICsgKiBET0M6 IEludGVsIEdWVC1nIGhvc3Qgc3VwcG9ydAo+ICsgKgo+ICsgKiBJbnRlbCBHVlQtZyBpcyBhIGdy YXBoaWNzIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ3kgd2hpY2ggc2hhcmVzIHRoZQo+ICsgKiBH UFUgYW1vbmcgbXVsdGlwbGUgdmlydHVhbCBtYWNoaW5lcyBvbiBhIHRpbWUtc2hhcmluZyBiYXNp cy4gRWFjaAo+ICsgKiB2aXJ0dWFsIG1hY2hpbmUgaXMgcHJlc2VudGVkIGEgdmlydHVhbCBHUFUg KHZHUFUpLCB3aGljaCBoYXMgZXF1aXZhbGVudAo+ICsgKiBmZWF0dXJlcyBhcyB0aGUgdW5kZXJs eWluZyBwaHlzaWNhbCBHUFUgKHBHUFUpLCBzbyBpOTE1IGRyaXZlciBjYW4gcnVuCj4gKyAqIHNl YW1sZXNzbHkgaW4gYSB2aXJ0dWFsIG1hY2hpbmUuIFRoaXMgZmlsZSBwcm92aWRlcyB0aGUgZW5n bGlnaHRtZW50cwo+ICsgKiBvZiBHVlQgYW5kIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyB1c2Vk IGJ5IEdWVCBpbiBpOTE1IGRyaXZlci4KPiArICovCj4gKwo+ICtzdHJ1Y3QgZ3Z0X2tlcm5lbF9w YXJhbXMgZ3Z0X2twYXJhbXMgPSB7Cj4gKwkuZW5hYmxlID0gZmFsc2UsCj4gK307Cj4gKwo+ICsv KiBpOTE1Lmd2dF9lbmFibGUgKi8KPiArbW9kdWxlX3BhcmFtX25hbWVkKGd2dF9lbmFibGUsIGd2 dF9rcGFyYW1zLmVuYWJsZSwgYm9vbCwgMDYwMCk7Cj4gK01PRFVMRV9QQVJNX0RFU0MoZ3Z0X2Vu YWJsZSwgIkVuYWJsZSBJbnRlbCBHVlQtZyBob3N0IHN1cHBvcnQiKTsKPiArCj4gK3N0YXRpYyBi b29sIGlzX3N1cHBvcnRlZF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICt7Cj4gKwlpZiAoSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiArCQlyZXR1cm4gdHJ1ZTsK PiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX2d2dF9pbml0IC0g aW5pdGlhbGl6ZSBHVlQgY29tcG9uZW50cwo+ICsgKiBAZGV2X3ByaXY6IGRybSBpOTE1IHByaXZh dGUgZGF0YQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgaW5pdGlh bGl6YXRpb24gc3RhZ2UgdG8gaW5pdGlhbGl6ZSB0aGUKPiArICogR1ZUIGNvbXBvbmVudHMuCj4g KyAqLwo+ICtpbnQgaW50ZWxfZ3Z0X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICt7Cj4gKwl2b2lkICpkZXZpY2U7Cj4gKwo+ICsJaWYgKCFndnRfa3BhcmFtcy5lbmFi bGUpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJHVlQtZyBpcyBkaXNhYmxlZCBieSBrZXJuZWwg cGFyYW1zXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAoIWlzX3N1cHBvcnRl ZF9kZXZpY2UoZGV2X3ByaXYpKSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiVW5zdXBwb3J0ZWQg ZGV2aWNlLiBHVlQtZyBpcyBkaXNhYmxlZFxuIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ ICsJZGV2aWNlID0gaW50ZWxfZ3Z0X2NyZWF0ZV9kZXZpY2UoZGV2X3ByaXYpOwo+ICsJaWYgKElT X0VSUihkZXZpY2UpKSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiR1ZULWcgaXMgZGlzYWJsZWRc biIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWRldl9wcml2LT5ndnQuZ3Z0ID0gZGV2 aWNlOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9ndnRfY2xlYW51 cCAtIGNsZWFudXAgR1ZUIGNvbXBvbmVudHMgd2hlbiBpOTE1IGRyaXZlciBpcyB1bmxvYWRpbmcK PiArICogQGRldl9wcml2OiBkcm0gaTkxNSBwcml2YXRlICoKPiArICoKPiArICogVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgYXQgdGhlIGk5MTUgZHJpdmVyIHVubG9hZGluZyBzdGFnZSwgdG8gc2h1 dGRvd24KPiArICogR1ZUIGNvbXBvbmVudHMgYW5kIHJlbGVhc2UgdGhlIHJlbGF0ZWQgcmVzb3Vy Y2VzLgo+ICsgKi8KPiArdm9pZCBpbnRlbF9ndnRfY2xlYW51cChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWlmICghaW50ZWxfZ3Z0X2FjdGl2ZShkZXZfcHJpdikp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCWludGVsX2d2dF9kZXN0cm95X2RldmljZShkZXZfcHJpdi0+ Z3Z0Lmd2dCk7Cj4gKwlkZXZfcHJpdi0+Z3Z0Lmd2dCA9IE5VTEw7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Z0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9ndnQuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uODA3 OWRmZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9n dnQuaAo+IEBAIC0wLDAgKzEsNDkgQEAKPiArLyoKPiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ICsg KiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9JTlRFTF9HVlRfSF8KPiArI2RlZmlu ZSBfSU5URUxfR1ZUX0hfCj4gKwo+ICsjaWZkZWYgQ09ORklHX0RSTV9JOTE1X0dWVAo+ICsKPiAr I2luY2x1ZGUgPGRybS9pOTE1X2d2dC5oPgo+ICsKPiArc3RydWN0IGd2dF9rZXJuZWxfcGFyYW1z IHsKPiArCWJvb2wgZW5hYmxlOwo+ICt9Owo+ICsKPiArZXh0ZXJuIHN0cnVjdCBndnRfa2VybmVs X3BhcmFtcyBndnRfa3BhcmFtczsKPiArCj4gK2V4dGVybiBpbnQgaW50ZWxfZ3Z0X2luaXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArZXh0ZXJuIHZvaWQgaW50ZWxfZ3Z0 X2NsZWFudXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArI2Vsc2UKPiAr c3RhdGljIGlubGluZSBpbnQgaW50ZWxfZ3Z0X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICtzdGF0aWMgaW5saW5lIHZvaWQg aW50ZWxfZ3Z0X2NsZWFudXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7 Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsjZW5kaWYgLyogX0lOVEVMX0dWVF9IXyAqLwo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9pOTE1X2d2dC5oIGIvaW5jbHVkZS9kcm0vaTkxNV9ndnQuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNGVkOGI4OAo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9pbmNsdWRlL2RybS9pOTE1X2d2dC5oCj4gQEAgLTAsMCArMSwzMSBAQAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgo+ICsgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKgo+ICsgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4gKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKPiArICogd2l0aG91dCBs aW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LAo+ICsgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvCj4gKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwo+ICsgKiB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCj4gKyAqIG5leHQgcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z Cj4gKyAqIG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiAr ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCj4gKyAqIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKyNpZm5kZWYgX0k5MTVfR1ZUX0gKPiArI2Rl ZmluZSBfSTkxNV9HVlRfSAo+ICsKPiArZXh0ZXJuIHZvaWQgKmludGVsX2d2dF9jcmVhdGVfZGV2 aWNlKHZvaWQgKmRldl9wcml2KTsKCnZvaWQgKiBkZXZfcHJpdiwgdmV5IGJhZCA6KSBBbmQgdGhl IGJlbG93IHNpZ25hdHVyZSBJJ3ZlIGNvbW1lbnRlZCBhbHJlYWR5LgoKPiArZXh0ZXJuIHZvaWQg aW50ZWxfZ3Z0X2Rlc3Ryb3lfZGV2aWNlKHZvaWQgKmd2dCk7Cj4gKwo+ICsjZW5kaWYgLyogX0k5 MTVfR1ZUX0ggKi8KPgoKClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==